From 160b730921d8d58b925ae0c2c5d353d5ee3b4505 Mon Sep 17 00:00:00 2001 From: pom-eranian Date: Tue, 1 Oct 2024 15:24:08 -0400 Subject: [PATCH 001/153] [Hotfix] Revert "[Sprite] 451 - Skorupi Animation Fix " (#4535) --- public/images/pokemon/451.json | 3043 ++++++++++++++++++++------ public/images/pokemon/451.png | Bin 6490 -> 6518 bytes public/images/pokemon/shiny/451.json | 3043 ++++++++++++++++++++------ public/images/pokemon/shiny/451.png | Bin 6495 -> 6518 bytes 4 files changed, 4658 insertions(+), 1428 deletions(-) diff --git a/public/images/pokemon/451.json b/public/images/pokemon/451.json index 3a320a87c61..0e99c96f876 100644 --- a/public/images/pokemon/451.json +++ b/public/images/pokemon/451.json @@ -1,715 +1,2330 @@ -{ "frames": [ - { - "filename": "0001.png", - "frame": { "x": 287, "y": 86, "w": 52, "h": 46 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 0, "w": 52, "h": 46 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0002.png", - "frame": { "x": 287, "y": 86, "w": 52, "h": 46 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 0, "w": 52, "h": 46 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0003.png", - "frame": { "x": 57, "y": 86, "w": 55, "h": 45 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 1, "w": 55, "h": 45 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0004.png", - "frame": { "x": 57, "y": 86, "w": 55, "h": 45 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 1, "w": 55, "h": 45 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0005.png", - "frame": { "x": 0, "y": 85, "w": 57, "h": 44 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 2, "w": 57, "h": 44 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0006.png", - "frame": { "x": 0, "y": 85, "w": 57, "h": 44 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 2, "w": 57, "h": 44 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0007.png", - "frame": { "x": 238, "y": 43, "w": 59, "h": 43 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 3, "w": 59, "h": 43 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0008.png", - "frame": { "x": 238, "y": 43, "w": 59, "h": 43 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 3, "w": 59, "h": 43 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0009.png", - "frame": { "x": 177, "y": 42, "w": 61, "h": 42 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 4, "w": 61, "h": 42 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0010.png", - "frame": { "x": 177, "y": 42, "w": 61, "h": 42 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 4, "w": 61, "h": 42 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0011.png", - "frame": { "x": 68, "y": 0, "w": 64, "h": 42 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 4, "w": 64, "h": 42 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0012.png", - "frame": { "x": 68, "y": 0, "w": 64, "h": 42 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 4, "w": 64, "h": 42 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0013.png", - "frame": { "x": 177, "y": 42, "w": 61, "h": 42 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 4, "w": 61, "h": 42 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0014.png", - "frame": { "x": 177, "y": 42, "w": 61, "h": 42 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 4, "w": 61, "h": 42 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0015.png", - "frame": { "x": 238, "y": 43, "w": 59, "h": 43 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 3, "w": 59, "h": 43 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0016.png", - "frame": { "x": 238, "y": 43, "w": 59, "h": 43 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 3, "w": 59, "h": 43 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0017.png", - "frame": { "x": 0, "y": 85, "w": 57, "h": 44 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 2, "w": 57, "h": 44 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0018.png", - "frame": { "x": 0, "y": 85, "w": 57, "h": 44 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 2, "w": 57, "h": 44 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0019.png", - "frame": { "x": 57, "y": 86, "w": 55, "h": 45 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 1, "w": 55, "h": 45 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0020.png", - "frame": { "x": 57, "y": 86, "w": 55, "h": 45 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 1, "w": 55, "h": 45 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0021.png", - "frame": { "x": 287, "y": 86, "w": 52, "h": 46 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 0, "w": 52, "h": 46 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0022.png", - "frame": { "x": 287, "y": 86, "w": 52, "h": 46 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 0, "w": 52, "h": 46 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0023.png", - "frame": { "x": 287, "y": 86, "w": 52, "h": 46 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 0, "w": 52, "h": 46 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0024.png", - "frame": { "x": 287, "y": 86, "w": 52, "h": 46 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 0, "w": 52, "h": 46 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0025.png", - "frame": { "x": 57, "y": 86, "w": 55, "h": 45 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 1, "w": 55, "h": 45 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0026.png", - "frame": { "x": 57, "y": 86, "w": 55, "h": 45 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 1, "w": 55, "h": 45 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0027.png", - "frame": { "x": 0, "y": 85, "w": 57, "h": 44 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 2, "w": 57, "h": 44 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0028.png", - "frame": { "x": 0, "y": 85, "w": 57, "h": 44 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 2, "w": 57, "h": 44 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0029.png", - "frame": { "x": 238, "y": 43, "w": 59, "h": 43 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 3, "w": 59, "h": 43 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0030.png", - "frame": { "x": 238, "y": 43, "w": 59, "h": 43 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 3, "w": 59, "h": 43 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0031.png", - "frame": { "x": 177, "y": 42, "w": 61, "h": 42 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 4, "w": 61, "h": 42 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0032.png", - "frame": { "x": 177, "y": 42, "w": 61, "h": 42 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 4, "w": 61, "h": 42 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0033.png", - "frame": { "x": 68, "y": 0, "w": 64, "h": 42 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 4, "w": 64, "h": 42 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0034.png", - "frame": { "x": 68, "y": 0, "w": 64, "h": 42 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 4, "w": 64, "h": 42 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0035.png", - "frame": { "x": 177, "y": 42, "w": 61, "h": 42 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 4, "w": 61, "h": 42 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0036.png", - "frame": { "x": 177, "y": 42, "w": 61, "h": 42 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 4, "w": 61, "h": 42 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0037.png", - "frame": { "x": 238, "y": 43, "w": 59, "h": 43 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 3, "w": 59, "h": 43 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0038.png", - "frame": { "x": 238, "y": 43, "w": 59, "h": 43 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 3, "w": 59, "h": 43 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0039.png", - "frame": { "x": 0, "y": 85, "w": 57, "h": 44 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 2, "w": 57, "h": 44 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0040.png", - "frame": { "x": 0, "y": 85, "w": 57, "h": 44 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 2, "w": 57, "h": 44 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0041.png", - "frame": { "x": 57, "y": 86, "w": 55, "h": 45 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 1, "w": 55, "h": 45 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0042.png", - "frame": { "x": 57, "y": 86, "w": 55, "h": 45 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 1, "w": 55, "h": 45 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0043.png", - "frame": { "x": 287, "y": 86, "w": 52, "h": 46 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 0, "w": 52, "h": 46 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0044.png", - "frame": { "x": 287, "y": 86, "w": 52, "h": 46 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 0, "w": 52, "h": 46 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0045.png", - "frame": { "x": 287, "y": 86, "w": 52, "h": 46 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 0, "w": 52, "h": 46 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0046.png", - "frame": { "x": 287, "y": 86, "w": 52, "h": 46 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 0, "w": 52, "h": 46 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0047.png", - "frame": { "x": 232, "y": 86, "w": 55, "h": 45 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 1, "w": 55, "h": 45 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0048.png", - "frame": { "x": 232, "y": 86, "w": 55, "h": 45 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 1, "w": 55, "h": 45 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0049.png", - "frame": { "x": 117, "y": 85, "w": 57, "h": 44 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 2, "w": 57, "h": 44 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0050.png", - "frame": { "x": 117, "y": 85, "w": 57, "h": 44 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 2, "w": 57, "h": 44 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0051.png", - "frame": { "x": 117, "y": 42, "w": 60, "h": 43 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 3, "w": 60, "h": 43 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0052.png", - "frame": { "x": 117, "y": 42, "w": 60, "h": 43 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 3, "w": 60, "h": 43 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0053.png", - "frame": { "x": 132, "y": 0, "w": 63, "h": 42 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 4, "w": 63, "h": 42 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0054.png", - "frame": { "x": 132, "y": 0, "w": 63, "h": 42 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 4, "w": 63, "h": 42 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0055.png", - "frame": { "x": 0, "y": 0, "w": 68, "h": 40 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 6, "w": 68, "h": 40 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0056.png", - "frame": { "x": 0, "y": 0, "w": 68, "h": 40 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 6, "w": 68, "h": 40 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0057.png", - "frame": { "x": 195, "y": 0, "w": 63, "h": 42 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 4, "w": 63, "h": 42 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0058.png", - "frame": { "x": 195, "y": 0, "w": 63, "h": 42 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 4, "w": 63, "h": 42 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0059.png", - "frame": { "x": 258, "y": 0, "w": 61, "h": 43 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 3, "w": 61, "h": 43 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0060.png", - "frame": { "x": 258, "y": 0, "w": 61, "h": 43 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 3, "w": 61, "h": 43 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0061.png", - "frame": { "x": 58, "y": 42, "w": 59, "h": 44 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 2, "w": 59, "h": 44 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0062.png", - "frame": { "x": 58, "y": 42, "w": 59, "h": 44 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 2, "w": 59, "h": 44 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0063.png", - "frame": { "x": 0, "y": 40, "w": 58, "h": 45 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 1, "w": 58, "h": 45 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0064.png", - "frame": { "x": 0, "y": 40, "w": 58, "h": 45 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 1, "w": 58, "h": 45 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0065.png", - "frame": { "x": 177, "y": 84, "w": 55, "h": 46 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 55, "h": 46 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0066.png", - "frame": { "x": 177, "y": 84, "w": 55, "h": 46 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 55, "h": 46 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0067.png", - "frame": { "x": 0, "y": 129, "w": 55, "h": 44 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 2, "w": 55, "h": 44 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0068.png", - "frame": { "x": 0, "y": 129, "w": 55, "h": 44 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 2, "w": 55, "h": 44 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0069.png", - "frame": { "x": 112, "y": 129, "w": 55, "h": 44 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 2, "w": 55, "h": 44 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0070.png", - "frame": { "x": 112, "y": 129, "w": 55, "h": 44 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 2, "w": 55, "h": 44 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0071.png", - "frame": { "x": 167, "y": 130, "w": 55, "h": 44 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 2, "w": 55, "h": 44 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0072.png", - "frame": { "x": 167, "y": 130, "w": 55, "h": 44 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 2, "w": 55, "h": 44 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0073.png", - "frame": { "x": 0, "y": 173, "w": 54, "h": 44 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 2, "w": 54, "h": 44 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0074.png", - "frame": { "x": 0, "y": 173, "w": 54, "h": 44 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 2, "w": 54, "h": 44 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0075.png", - "frame": { "x": 54, "y": 177, "w": 52, "h": 44 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 2, "w": 52, "h": 44 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0076.png", - "frame": { "x": 54, "y": 177, "w": 52, "h": 44 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 2, "w": 52, "h": 44 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0077.png", - "frame": { "x": 210, "y": 176, "w": 53, "h": 44 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 2, "w": 53, "h": 44 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0078.png", - "frame": { "x": 210, "y": 176, "w": 53, "h": 44 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 2, "w": 53, "h": 44 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0079.png", - "frame": { "x": 158, "y": 174, "w": 52, "h": 45 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 52, "h": 45 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0080.png", - "frame": { "x": 158, "y": 174, "w": 52, "h": 45 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 2, "y": 1, "w": 52, "h": 45 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0081.png", - "frame": { "x": 222, "y": 131, "w": 53, "h": 45 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 53, "h": 45 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0082.png", - "frame": { "x": 222, "y": 131, "w": 53, "h": 45 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 53, "h": 45 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0083.png", - "frame": { "x": 275, "y": 132, "w": 53, "h": 45 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 1, "w": 53, "h": 45 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0084.png", - "frame": { "x": 275, "y": 132, "w": 53, "h": 45 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 1, "w": 53, "h": 45 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0085.png", - "frame": { "x": 55, "y": 131, "w": 52, "h": 46 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 0, "w": 52, "h": 46 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0086.png", - "frame": { "x": 55, "y": 131, "w": 52, "h": 46 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 0, "w": 52, "h": 46 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0087.png", - "frame": { "x": 107, "y": 173, "w": 51, "h": 46 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 0, "w": 51, "h": 46 }, - "sourceSize": { "w": 71, "h": 46 } - }, - { - "filename": "0088.png", - "frame": { "x": 107, "y": 173, "w": 51, "h": 46 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 0, "w": 51, "h": 46 }, - "sourceSize": { "w": 71, "h": 46 } - } - ], - "meta": { - "app": "https://www.aseprite.org/", - "version": "1.3.8.1-x64", - "image": "451.png", - "format": "I8", - "size": { "w": 339, "h": 221 }, - "scale": "1" - } +{ + "textures": [ + { + "image": "451.png", + "format": "RGBA8888", + "size": { + "w": 281, + "h": 281 + }, + "scale": 1, + "frames": [ + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 2, + "y": 5, + "w": 69, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 69, + "h": 41 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 2, + "y": 5, + "w": 69, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 69, + "h": 41 + } + }, + { + "filename": "0077.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 2, + "y": 5, + "w": 69, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 69, + "h": 41 + } + }, + { + "filename": "0078.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 2, + "y": 5, + "w": 69, + "h": 41 + }, + "frame": { + "x": 0, + "y": 0, + "w": 69, + "h": 41 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 3, + "w": 63, + "h": 43 + }, + "frame": { + "x": 69, + "y": 0, + "w": 63, + "h": 43 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 3, + "w": 63, + "h": 43 + }, + "frame": { + "x": 69, + "y": 0, + "w": 63, + "h": 43 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 3, + "w": 63, + "h": 43 + }, + "frame": { + "x": 69, + "y": 0, + "w": 63, + "h": 43 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 3, + "w": 63, + "h": 43 + }, + "frame": { + "x": 69, + "y": 0, + "w": 63, + "h": 43 + } + }, + { + "filename": "0053.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 3, + "w": 63, + "h": 43 + }, + "frame": { + "x": 69, + "y": 0, + "w": 63, + "h": 43 + } + }, + { + "filename": "0054.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 3, + "w": 63, + "h": 43 + }, + "frame": { + "x": 69, + "y": 0, + "w": 63, + "h": 43 + } + }, + { + "filename": "0057.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 3, + "w": 63, + "h": 43 + }, + "frame": { + "x": 69, + "y": 0, + "w": 63, + "h": 43 + } + }, + { + "filename": "0058.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 3, + "w": 63, + "h": 43 + }, + "frame": { + "x": 69, + "y": 0, + "w": 63, + "h": 43 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 66, + "h": 43 + }, + "frame": { + "x": 132, + "y": 0, + "w": 66, + "h": 43 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 66, + "h": 43 + }, + "frame": { + "x": 132, + "y": 0, + "w": 66, + "h": 43 + } + }, + { + "filename": "0055.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 66, + "h": 43 + }, + "frame": { + "x": 132, + "y": 0, + "w": 66, + "h": 43 + } + }, + { + "filename": "0056.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 66, + "h": 43 + }, + "frame": { + "x": 132, + "y": 0, + "w": 66, + "h": 43 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 3, + "w": 65, + "h": 43 + }, + "frame": { + "x": 198, + "y": 0, + "w": 65, + "h": 43 + } + }, + { + "filename": "0032.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 3, + "w": 65, + "h": 43 + }, + "frame": { + "x": 198, + "y": 0, + "w": 65, + "h": 43 + } + }, + { + "filename": "0075.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 3, + "w": 65, + "h": 43 + }, + "frame": { + "x": 198, + "y": 0, + "w": 65, + "h": 43 + } + }, + { + "filename": "0076.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 3, + "w": 65, + "h": 43 + }, + "frame": { + "x": 198, + "y": 0, + "w": 65, + "h": 43 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 3, + "w": 65, + "h": 43 + }, + "frame": { + "x": 0, + "y": 41, + "w": 65, + "h": 43 + } + }, + { + "filename": "0036.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 3, + "w": 65, + "h": 43 + }, + "frame": { + "x": 0, + "y": 41, + "w": 65, + "h": 43 + } + }, + { + "filename": "0079.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 3, + "w": 65, + "h": 43 + }, + "frame": { + "x": 0, + "y": 41, + "w": 65, + "h": 43 + } + }, + { + "filename": "0080.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 3, + "w": 65, + "h": 43 + }, + "frame": { + "x": 0, + "y": 41, + "w": 65, + "h": 43 + } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 4, + "y": 2, + "w": 61, + "h": 44 + }, + "frame": { + "x": 65, + "y": 43, + "w": 61, + "h": 44 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 4, + "y": 2, + "w": 61, + "h": 44 + }, + "frame": { + "x": 65, + "y": 43, + "w": 61, + "h": 44 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 4, + "y": 2, + "w": 61, + "h": 44 + }, + "frame": { + "x": 65, + "y": 43, + "w": 61, + "h": 44 + } + }, + { + "filename": "0016.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 4, + "y": 2, + "w": 61, + "h": 44 + }, + "frame": { + "x": 65, + "y": 43, + "w": 61, + "h": 44 + } + }, + { + "filename": "0051.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 4, + "y": 2, + "w": 61, + "h": 44 + }, + "frame": { + "x": 65, + "y": 43, + "w": 61, + "h": 44 + } + }, + { + "filename": "0052.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 4, + "y": 2, + "w": 61, + "h": 44 + }, + "frame": { + "x": 65, + "y": 43, + "w": 61, + "h": 44 + } + }, + { + "filename": "0059.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 4, + "y": 2, + "w": 61, + "h": 44 + }, + "frame": { + "x": 65, + "y": 43, + "w": 61, + "h": 44 + } + }, + { + "filename": "0060.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 4, + "y": 2, + "w": 61, + "h": 44 + }, + "frame": { + "x": 65, + "y": 43, + "w": 61, + "h": 44 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 4, + "y": 2, + "w": 62, + "h": 44 + }, + "frame": { + "x": 126, + "y": 43, + "w": 62, + "h": 44 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 4, + "y": 2, + "w": 62, + "h": 44 + }, + "frame": { + "x": 126, + "y": 43, + "w": 62, + "h": 44 + } + }, + { + "filename": "0073.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 4, + "y": 2, + "w": 62, + "h": 44 + }, + "frame": { + "x": 126, + "y": 43, + "w": 62, + "h": 44 + } + }, + { + "filename": "0074.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 4, + "y": 2, + "w": 62, + "h": 44 + }, + "frame": { + "x": 126, + "y": 43, + "w": 62, + "h": 44 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 2, + "w": 63, + "h": 44 + }, + "frame": { + "x": 188, + "y": 43, + "w": 63, + "h": 44 + } + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 2, + "w": 63, + "h": 44 + }, + "frame": { + "x": 188, + "y": 43, + "w": 63, + "h": 44 + } + }, + { + "filename": "0081.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 2, + "w": 63, + "h": 44 + }, + "frame": { + "x": 188, + "y": 43, + "w": 63, + "h": 44 + } + }, + { + "filename": "0082.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 2, + "w": 63, + "h": 44 + }, + "frame": { + "x": 188, + "y": 43, + "w": 63, + "h": 44 + } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 59, + "h": 45 + }, + "frame": { + "x": 0, + "y": 84, + "w": 59, + "h": 45 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 59, + "h": 45 + }, + "frame": { + "x": 0, + "y": 84, + "w": 59, + "h": 45 + } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 59, + "h": 45 + }, + "frame": { + "x": 0, + "y": 84, + "w": 59, + "h": 45 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 59, + "h": 45 + }, + "frame": { + "x": 0, + "y": 84, + "w": 59, + "h": 45 + } + }, + { + "filename": "0049.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 59, + "h": 45 + }, + "frame": { + "x": 0, + "y": 84, + "w": 59, + "h": 45 + } + }, + { + "filename": "0050.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 59, + "h": 45 + }, + "frame": { + "x": 0, + "y": 84, + "w": 59, + "h": 45 + } + }, + { + "filename": "0061.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 59, + "h": 45 + }, + "frame": { + "x": 0, + "y": 84, + "w": 59, + "h": 45 + } + }, + { + "filename": "0062.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 59, + "h": 45 + }, + "frame": { + "x": 0, + "y": 84, + "w": 59, + "h": 45 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 59, + "h": 45 + }, + "frame": { + "x": 59, + "y": 87, + "w": 59, + "h": 45 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 59, + "h": 45 + }, + "frame": { + "x": 59, + "y": 87, + "w": 59, + "h": 45 + } + }, + { + "filename": "0071.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 59, + "h": 45 + }, + "frame": { + "x": 59, + "y": 87, + "w": 59, + "h": 45 + } + }, + { + "filename": "0072.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 59, + "h": 45 + }, + "frame": { + "x": 59, + "y": 87, + "w": 59, + "h": 45 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 1, + "w": 61, + "h": 45 + }, + "frame": { + "x": 118, + "y": 87, + "w": 61, + "h": 45 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 1, + "w": 61, + "h": 45 + }, + "frame": { + "x": 118, + "y": 87, + "w": 61, + "h": 45 + } + }, + { + "filename": "0083.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 1, + "w": 61, + "h": 45 + }, + "frame": { + "x": 118, + "y": 87, + "w": 61, + "h": 45 + } + }, + { + "filename": "0084.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 1, + "w": 61, + "h": 45 + }, + "frame": { + "x": 118, + "y": 87, + "w": 61, + "h": 45 + } + }, + { + "filename": "0089.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 57, + "h": 45 + }, + "frame": { + "x": 179, + "y": 87, + "w": 57, + "h": 45 + } + }, + { + "filename": "0090.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 57, + "h": 45 + }, + "frame": { + "x": 179, + "y": 87, + "w": 57, + "h": 45 + } + }, + { + "filename": "0091.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 57, + "h": 45 + }, + "frame": { + "x": 0, + "y": 129, + "w": 57, + "h": 45 + } + }, + { + "filename": "0092.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 57, + "h": 45 + }, + "frame": { + "x": 0, + "y": 129, + "w": 57, + "h": 45 + } + }, + { + "filename": "0093.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 57, + "h": 45 + }, + "frame": { + "x": 57, + "y": 132, + "w": 57, + "h": 45 + } + }, + { + "filename": "0094.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 57, + "h": 45 + }, + "frame": { + "x": 57, + "y": 132, + "w": 57, + "h": 45 + } + }, + { + "filename": "0095.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 56, + "h": 45 + }, + "frame": { + "x": 114, + "y": 132, + "w": 56, + "h": 45 + } + }, + { + "filename": "0096.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 56, + "h": 45 + }, + "frame": { + "x": 114, + "y": 132, + "w": 56, + "h": 45 + } + }, + { + "filename": "0097.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 54, + "h": 45 + }, + "frame": { + "x": 170, + "y": 132, + "w": 54, + "h": 45 + } + }, + { + "filename": "0098.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 54, + "h": 45 + }, + "frame": { + "x": 170, + "y": 132, + "w": 54, + "h": 45 + } + }, + { + "filename": "0099.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 54, + "h": 45 + }, + "frame": { + "x": 224, + "y": 132, + "w": 54, + "h": 45 + } + }, + { + "filename": "0100.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 54, + "h": 45 + }, + "frame": { + "x": 224, + "y": 132, + "w": 54, + "h": 45 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 6, + "y": 0, + "w": 54, + "h": 46 + }, + "frame": { + "x": 0, + "y": 174, + "w": 54, + "h": 46 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 6, + "y": 0, + "w": 54, + "h": 46 + }, + "frame": { + "x": 0, + "y": 174, + "w": 54, + "h": 46 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 6, + "y": 0, + "w": 54, + "h": 46 + }, + "frame": { + "x": 0, + "y": 174, + "w": 54, + "h": 46 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 6, + "y": 0, + "w": 54, + "h": 46 + }, + "frame": { + "x": 0, + "y": 174, + "w": 54, + "h": 46 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 6, + "y": 0, + "w": 54, + "h": 46 + }, + "frame": { + "x": 0, + "y": 174, + "w": 54, + "h": 46 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 6, + "y": 0, + "w": 54, + "h": 46 + }, + "frame": { + "x": 0, + "y": 174, + "w": 54, + "h": 46 + } + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 6, + "y": 0, + "w": 54, + "h": 46 + }, + "frame": { + "x": 0, + "y": 174, + "w": 54, + "h": 46 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 6, + "y": 0, + "w": 54, + "h": 46 + }, + "frame": { + "x": 0, + "y": 174, + "w": 54, + "h": 46 + } + }, + { + "filename": "0065.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 6, + "y": 0, + "w": 54, + "h": 46 + }, + "frame": { + "x": 0, + "y": 174, + "w": 54, + "h": 46 + } + }, + { + "filename": "0066.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 6, + "y": 0, + "w": 54, + "h": 46 + }, + "frame": { + "x": 0, + "y": 174, + "w": 54, + "h": 46 + } + }, + { + "filename": "0067.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 6, + "y": 0, + "w": 54, + "h": 46 + }, + "frame": { + "x": 0, + "y": 174, + "w": 54, + "h": 46 + } + }, + { + "filename": "0068.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 6, + "y": 0, + "w": 54, + "h": 46 + }, + "frame": { + "x": 0, + "y": 174, + "w": 54, + "h": 46 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 6, + "y": 0, + "w": 57, + "h": 46 + }, + "frame": { + "x": 54, + "y": 177, + "w": 57, + "h": 46 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 6, + "y": 0, + "w": 57, + "h": 46 + }, + "frame": { + "x": 54, + "y": 177, + "w": 57, + "h": 46 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 6, + "y": 0, + "w": 57, + "h": 46 + }, + "frame": { + "x": 54, + "y": 177, + "w": 57, + "h": 46 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 6, + "y": 0, + "w": 57, + "h": 46 + }, + "frame": { + "x": 54, + "y": 177, + "w": 57, + "h": 46 + } + }, + { + "filename": "0047.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 6, + "y": 0, + "w": 57, + "h": 46 + }, + "frame": { + "x": 54, + "y": 177, + "w": 57, + "h": 46 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 6, + "y": 0, + "w": 57, + "h": 46 + }, + "frame": { + "x": 54, + "y": 177, + "w": 57, + "h": 46 + } + }, + { + "filename": "0063.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 6, + "y": 0, + "w": 57, + "h": 46 + }, + "frame": { + "x": 54, + "y": 177, + "w": 57, + "h": 46 + } + }, + { + "filename": "0064.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 6, + "y": 0, + "w": 57, + "h": 46 + }, + "frame": { + "x": 54, + "y": 177, + "w": 57, + "h": 46 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 6, + "y": 0, + "w": 57, + "h": 46 + }, + "frame": { + "x": 111, + "y": 177, + "w": 57, + "h": 46 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 6, + "y": 0, + "w": 57, + "h": 46 + }, + "frame": { + "x": 111, + "y": 177, + "w": 57, + "h": 46 + } + }, + { + "filename": "0069.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 6, + "y": 0, + "w": 57, + "h": 46 + }, + "frame": { + "x": 111, + "y": 177, + "w": 57, + "h": 46 + } + }, + { + "filename": "0070.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 6, + "y": 0, + "w": 57, + "h": 46 + }, + "frame": { + "x": 111, + "y": 177, + "w": 57, + "h": 46 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 60, + "h": 46 + }, + "frame": { + "x": 168, + "y": 177, + "w": 60, + "h": 46 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 60, + "h": 46 + }, + "frame": { + "x": 168, + "y": 177, + "w": 60, + "h": 46 + } + }, + { + "filename": "0085.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 60, + "h": 46 + }, + "frame": { + "x": 168, + "y": 177, + "w": 60, + "h": 46 + } + }, + { + "filename": "0086.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 60, + "h": 46 + }, + "frame": { + "x": 168, + "y": 177, + "w": 60, + "h": 46 + } + }, + { + "filename": "0109.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 6, + "y": 0, + "w": 53, + "h": 46 + }, + "frame": { + "x": 228, + "y": 177, + "w": 53, + "h": 46 + } + }, + { + "filename": "0110.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 6, + "y": 0, + "w": 53, + "h": 46 + }, + "frame": { + "x": 228, + "y": 177, + "w": 53, + "h": 46 + } + }, + { + "filename": "0101.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 54, + "h": 46 + }, + "frame": { + "x": 0, + "y": 220, + "w": 54, + "h": 46 + } + }, + { + "filename": "0102.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 54, + "h": 46 + }, + "frame": { + "x": 0, + "y": 220, + "w": 54, + "h": 46 + } + }, + { + "filename": "0043.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 57, + "h": 46 + }, + "frame": { + "x": 54, + "y": 223, + "w": 57, + "h": 46 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 57, + "h": 46 + }, + "frame": { + "x": 54, + "y": 223, + "w": 57, + "h": 46 + } + }, + { + "filename": "0087.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 57, + "h": 46 + }, + "frame": { + "x": 54, + "y": 223, + "w": 57, + "h": 46 + } + }, + { + "filename": "0088.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 57, + "h": 46 + }, + "frame": { + "x": 54, + "y": 223, + "w": 57, + "h": 46 + } + }, + { + "filename": "0103.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 55, + "h": 46 + }, + "frame": { + "x": 111, + "y": 223, + "w": 55, + "h": 46 + } + }, + { + "filename": "0104.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 2, + "y": 0, + "w": 55, + "h": 46 + }, + "frame": { + "x": 111, + "y": 223, + "w": 55, + "h": 46 + } + }, + { + "filename": "0105.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 55, + "h": 46 + }, + "frame": { + "x": 166, + "y": 223, + "w": 55, + "h": 46 + } + }, + { + "filename": "0106.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 3, + "y": 0, + "w": 55, + "h": 46 + }, + "frame": { + "x": 166, + "y": 223, + "w": 55, + "h": 46 + } + }, + { + "filename": "0107.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 5, + "y": 0, + "w": 54, + "h": 46 + }, + "frame": { + "x": 221, + "y": 223, + "w": 54, + "h": 46 + } + }, + { + "filename": "0108.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 71, + "h": 46 + }, + "spriteSourceSize": { + "x": 5, + "y": 0, + "w": 54, + "h": 46 + }, + "frame": { + "x": 221, + "y": 223, + "w": 54, + "h": 46 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:e303c68c1876b77078f3e1fd4372a4ce:84139d6b94cea0f3c45dbd8fa7109c3d:c79e17c206de27e3b7f1ce96f7df8e51$" + } } diff --git a/public/images/pokemon/451.png b/public/images/pokemon/451.png index 716e8a0804135a9fe84e338b769805352f50713a..fac8f5a0170b216f4535ff54e1ea317807f422cb 100644 GIT binary patch literal 6518 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 literal 6490 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 literal 6495 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 Date: Thu, 3 Oct 2024 16:33:12 +0200 Subject: [PATCH 002/153] =?UTF-8?q?[P2]=C2=A0Make=20weather=20damage=20rou?= =?UTF-8?q?nd=20down=20for=20consistency=20(#4559)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fmake weather damage consistent with the rest of the game * [test] add some sandstorm and hail tests --- src/phases/weather-effect-phase.ts | 2 +- src/test/arena/weather_hail.test.ts | 18 ++++++++++-- src/test/arena/weather_sandstorm.test.ts | 37 ++++++++++++++++++++++-- 3 files changed, 52 insertions(+), 5 deletions(-) diff --git a/src/phases/weather-effect-phase.ts b/src/phases/weather-effect-phase.ts index 73de44389d0..b48ee342780 100644 --- a/src/phases/weather-effect-phase.ts +++ b/src/phases/weather-effect-phase.ts @@ -44,7 +44,7 @@ export class WeatherEffectPhase extends CommonAnimPhase { return; } - const damage = Math.ceil(pokemon.getMaxHp() / 16); + const damage = Utils.toDmgValue(pokemon.getMaxHp() / 16); this.scene.queueMessage(getWeatherDamageMessage(this.weather?.weatherType!, pokemon)!); // TODO: are those bangs correct? pokemon.damageAndUpdate(damage, HitResult.EFFECTIVE, false, false, true); diff --git a/src/test/arena/weather_hail.test.ts b/src/test/arena/weather_hail.test.ts index 31d20be2ded..2070e40dbcc 100644 --- a/src/test/arena/weather_hail.test.ts +++ b/src/test/arena/weather_hail.test.ts @@ -39,7 +39,7 @@ describe("Weather - Hail", () => { await game.phaseInterceptor.to("TurnEndPhase"); game.scene.getField(true).forEach(pokemon => { - expect(pokemon.hp).toBeLessThan(pokemon.getMaxHp() - Math.floor(pokemon.getMaxHp() / 16)); + expect(pokemon.hp).toBe(pokemon.getMaxHp() - Math.max(Math.floor(pokemon.getMaxHp() / 16), 1)); }); }); @@ -56,6 +56,20 @@ describe("Weather - Hail", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; expect(playerPokemon.hp).toBe(playerPokemon.getMaxHp()); - expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp() - Math.floor(enemyPokemon.getMaxHp() / 16)); + expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp() - Math.max(Math.floor(enemyPokemon.getMaxHp() / 16), 1)); + }); + + it("does not inflict damage to Ice type Pokemon", async () => { + await game.classicMode.startBattle([Species.CLOYSTER]); + + game.move.select(Moves.SPLASH); + + await game.phaseInterceptor.to("TurnEndPhase"); + + const playerPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; + + expect(playerPokemon.hp).toBe(playerPokemon.getMaxHp()); + expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp() - Math.max(Math.floor(enemyPokemon.getMaxHp() / 16), 1)); }); }); diff --git a/src/test/arena/weather_sandstorm.test.ts b/src/test/arena/weather_sandstorm.test.ts index 91188de6985..2419ca11b70 100644 --- a/src/test/arena/weather_sandstorm.test.ts +++ b/src/test/arena/weather_sandstorm.test.ts @@ -1,4 +1,6 @@ import { WeatherType } from "#app/data/weather"; +import { Abilities } from "#app/enums/abilities"; +import { Stat } from "#app/enums/stat"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/utils/gameManager"; @@ -37,7 +39,7 @@ describe("Weather - Sandstorm", () => { await game.phaseInterceptor.to("TurnEndPhase"); game.scene.getField(true).forEach(pokemon => { - expect(pokemon.hp).toBeLessThan(pokemon.getMaxHp() - Math.floor(pokemon.getMaxHp() / 16)); + expect(pokemon.hp).toBe(pokemon.getMaxHp() - Math.max(Math.floor(pokemon.getMaxHp() / 16), 1)); }); }); @@ -53,6 +55,37 @@ describe("Weather - Sandstorm", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; expect(playerPokemon.hp).toBe(playerPokemon.getMaxHp()); - expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp() - Math.floor(enemyPokemon.getMaxHp() / 16)); + expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp() - Math.max(Math.floor(enemyPokemon.getMaxHp() / 16), 1)); + }); + + it("does not inflict damage to Rock, Ground and Steel type Pokemon", async () => { + game.override + .battleType("double") + .enemySpecies(Species.SANDSHREW) + .ability(Abilities.BALL_FETCH) + .enemyAbility(Abilities.BALL_FETCH); + + await game.classicMode.startBattle([Species.ROCKRUFF, Species.KLINK]); + + game.move.select(Moves.SPLASH, 0); + game.move.select(Moves.SPLASH, 1); + + await game.phaseInterceptor.to("TurnEndPhase"); + + game.scene.getField(true).forEach(pokemon => { + expect(pokemon.hp).toBe(pokemon.getMaxHp()); + }); + }); + + it("increases Rock type Pokemon Sp.Def by 50%", async () => { + await game.classicMode.startBattle([Species.ROCKRUFF]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + const playerSpdef = playerPokemon.getStat(Stat.SPDEF); + expect(playerPokemon.getEffectiveStat(Stat.SPDEF)).toBe(Math.floor(playerSpdef * 1.5)); + + const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemySpdef = enemyPokemon.getStat(Stat.SPDEF); + expect(enemyPokemon.getEffectiveStat(Stat.SPDEF)).toBe(enemySpdef); }); }); From 5f700590be857c960e8d90d56c7984b2b0896ed5 Mon Sep 17 00:00:00 2001 From: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> Date: Thu, 3 Oct 2024 16:34:29 +0200 Subject: [PATCH 003/153] [QOL] Have Friendship Value be shown in summary (#4490) * Have Friendship Value be shown in summary * Fix how "fill" of icon is calced * Update src/locales/de/pokemon-summary.json * Actually add the images * Add correct image files * Update src/ui/summary-ui-handler.ts Co-authored-by: Adrian T. <68144167+torranx@users.noreply.github.com> * Update src/ui/summary-ui-handler.ts Co-authored-by: Adrian T. <68144167+torranx@users.noreply.github.com> * Update src/ui/summary-ui-handler.ts * Update src/ui/summary-ui-handler.ts Co-authored-by: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com> * Made changed suggested in code review * Update src/locales/en/pokemon-summary.json --------- Co-authored-by: Adrian T. <68144167+torranx@users.noreply.github.com> Co-authored-by: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com> --- public/images/ui/friendship.png | Bin 0 -> 174 bytes public/images/ui/friendship_overlay.png | Bin 0 -> 182 bytes public/images/ui/legacy/friendship.png | Bin 0 -> 174 bytes .../images/ui/legacy/friendship_overlay.png | Bin 0 -> 182 bytes src/loading-scene.ts | 2 ++ src/ui/summary-ui-handler.ts | 33 ++++++++++++++++++ 6 files changed, 35 insertions(+) create mode 100644 public/images/ui/friendship.png create mode 100644 public/images/ui/friendship_overlay.png create mode 100644 public/images/ui/legacy/friendship.png create mode 100644 public/images/ui/legacy/friendship_overlay.png diff --git a/public/images/ui/friendship.png b/public/images/ui/friendship.png new file mode 100644 index 0000000000000000000000000000000000000000..073adcadc7654da274704444d5cbc773c4a925a2 GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^{6Ngd!3-pihitnGq!^2X+?^QKos)S9VIoSmBi2x?XbGy$vQ#9~stsVD#Pi SG4lt|ECx?kKbLh*2~7YE>pBVm literal 0 HcmV?d00001 diff --git a/public/images/ui/friendship_overlay.png b/public/images/ui/friendship_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..4a4724fbdc9f357caa342f3eab247bb0c8d9a876 GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^{6Ngd!3-pihitnGq!^2X+?^QKos)S9k`3?)aRt&o zf}(3>R6iTp|G#-T?dz^HKq1zWAirRS|3DyfK@DV*i>HfY2*=FO-jj?B3LJ;IcKkmx z&AFw{Ymo*+;sw?~gy?!Mb@LJuD>e>{GIF!lGYH Y8)6xQ9wz_32Q-ht)78&qol`;+0AP_n(*OVf literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/friendship.png b/public/images/ui/legacy/friendship.png new file mode 100644 index 0000000000000000000000000000000000000000..073adcadc7654da274704444d5cbc773c4a925a2 GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^{6Ngd!3-pihitnGq!^2X+?^QKos)S9VIoSmBi2x?XbGy$vQ#9~stsVD#Pi SG4lt|ECx?kKbLh*2~7YE>pBVm literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/friendship_overlay.png b/public/images/ui/legacy/friendship_overlay.png new file mode 100644 index 0000000000000000000000000000000000000000..4a4724fbdc9f357caa342f3eab247bb0c8d9a876 GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^{6Ngd!3-pihitnGq!^2X+?^QKos)S9k`3?)aRt&o zf}(3>R6iTp|G#-T?dz^HKq1zWAirRS|3DyfK@DV*i>HfY2*=FO-jj?B3LJ;IcKkmx z&AFw{Ymo*+;sw?~gy?!Mb@LJuD>e>{GIF!lGYH Y8)6xQ9wz_32Q-ht)78&qol`;+0AP_n(*OVf literal 0 HcmV?d00001 diff --git a/src/loading-scene.ts b/src/loading-scene.ts index e71082ca8f5..3d4f4d165e6 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -44,6 +44,8 @@ export class LoadingScene extends SceneBase { this.loadAtlas("prompt", "ui"); this.loadImage("candy", "ui"); this.loadImage("candy_overlay", "ui"); + this.loadImage("friendship", "ui"); + this.loadImage("friendship_overlay", "ui"); this.loadImage("cursor", "ui"); this.loadImage("cursor_reverse", "ui"); for (const wv of Utils.getEnumValues(WindowVariant)) { diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index 28c3ccdb2e4..d3985b225ff 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -87,6 +87,10 @@ export default class SummaryUiHandler extends UiHandler { private moveAccuracyText: Phaser.GameObjects.Text; private moveCategoryIcon: Phaser.GameObjects.Sprite; private summaryPageTransitionContainer: Phaser.GameObjects.Container; + private friendshipShadow: Phaser.GameObjects.Sprite; + private friendshipText: Phaser.GameObjects.Text; + private friendshipIcon: Phaser.GameObjects.Sprite; + private friendshipOverlay: Phaser.GameObjects.Sprite; private descriptionScrollTween: Phaser.Tweens.Tween | null; private moveCursorBlinkTimer: Phaser.Time.TimerEvent | null; @@ -187,6 +191,25 @@ export default class SummaryUiHandler extends UiHandler { this.candyCountText.setOrigin(0, 0); this.summaryContainer.add(this.candyCountText); + this.friendshipIcon = this.scene.add.sprite(13, -60, "friendship"); + this.friendshipIcon.setScale(0.8); + this.summaryContainer.add(this.friendshipIcon); + + this.friendshipOverlay = this.scene.add.sprite(13, -60, "friendship_overlay"); + this.friendshipOverlay.setScale(0.8); + this.summaryContainer.add(this.friendshipOverlay); + + this.friendshipShadow = this.scene.add.sprite(13, -60, "friendship"); + this.friendshipShadow.setTint(0x000000); + this.friendshipShadow.setAlpha(0.50); + this.friendshipShadow.setScale(0.8); + this.friendshipShadow.setInteractive(new Phaser.Geom.Rectangle(0, 0, 16, 16), Phaser.Geom.Rectangle.Contains); + this.summaryContainer.add(this.friendshipShadow); + + this.friendshipText = addTextObject(this.scene, 20, -66, "x0", TextStyle.WINDOW_ALT, { fontSize: "76px" }); + this.friendshipText.setOrigin(0, 0); + this.summaryContainer.add(this.friendshipText); + this.championRibbon = this.scene.add.image(88, -146, "champion_ribbon"); this.championRibbon.setOrigin(0, 0); //this.championRibbon.setScale(0.8); @@ -292,6 +315,7 @@ export default class SummaryUiHandler extends UiHandler { this.candyIcon.setTint(argbFromRgba(Utils.rgbHexToRgba(colorScheme[0]))); this.candyOverlay.setTint(argbFromRgba(Utils.rgbHexToRgba(colorScheme[1]))); + this.numberText.setText(Utils.padInt(this.pokemon.species.speciesId, 4)); this.numberText.setColor(this.getTextColor(!this.pokemon.isShiny() ? TextStyle.SUMMARY : TextStyle.SUMMARY_GOLD)); this.numberText.setShadowColor(this.getTextColor(!this.pokemon.isShiny() ? TextStyle.SUMMARY : TextStyle.SUMMARY_GOLD, true)); @@ -345,6 +369,15 @@ export default class SummaryUiHandler extends UiHandler { this.candyShadow.setCrop(0, 0, 16, candyCropY); + if (this.friendshipShadow.visible) { + this.friendshipShadow.on("pointerover", () => this.scene.ui.showTooltip("", `${i18next.t("pokemonSummary:friendship")}`, true)); + this.friendshipShadow.on("pointerout", () => this.scene.ui.hideTooltip()); + } + + this.friendshipText.setText(`${this.pokemon?.friendship || "0"} / 255`); + + this.friendshipShadow.setCrop(0, 0, 16, 16 - (16 * ((this.pokemon?.friendship || 0) / 255))); + const doubleShiny = isFusion && this.pokemon.shiny && this.pokemon.fusionShiny; const baseVariant = !doubleShiny ? this.pokemon.getVariant() : this.pokemon.variant; From 8fc0d9a4292a6eadc676adc62e317e91390b9529 Mon Sep 17 00:00:00 2001 From: Lneacx Date: Thu, 3 Oct 2024 07:35:03 -0700 Subject: [PATCH 004/153] [P2] Fix Toxic to bypass semi-invulnerability when used by a Poison-type. (#4445) * Fix Toxic to bypass semi-invulnerability when used by a Poison-type. * Apply suggestion to refactor BerryPhase in Toxic move tests. Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Corrected missing quotes on a BerryPhase in Toxic.test. --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/phases/move-effect-phase.ts | 8 +++- src/test/moves/toxic.test.ts | 76 +++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 src/test/moves/toxic.test.ts diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index ca1fb87654f..33f2394cd1e 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -4,7 +4,7 @@ import { applyPreAttackAbAttrs, AddSecondStrikeAbAttr, IgnoreMoveEffectsAbAttr, import { ArenaTagSide, ConditionalProtectTag } from "#app/data/arena-tag"; import { MoveAnim } from "#app/data/battle-anims"; import { BattlerTagLapseType, DamageProtectedTag, ProtectedTag, SemiInvulnerableTag, SubstituteTag } from "#app/data/battler-tags"; -import { MoveTarget, applyMoveAttrs, OverrideMoveEffectAttr, MultiHitAttr, AttackMove, FixedDamageAttr, VariableTargetAttr, MissEffectAttr, MoveFlags, applyFilteredMoveAttrs, MoveAttr, MoveEffectAttr, MoveEffectTrigger, ChargeAttr, MoveCategory, NoEffectAttr, HitsTagAttr } from "#app/data/move"; +import { MoveTarget, applyMoveAttrs, OverrideMoveEffectAttr, MultiHitAttr, AttackMove, FixedDamageAttr, VariableTargetAttr, MissEffectAttr, MoveFlags, applyFilteredMoveAttrs, MoveAttr, MoveEffectAttr, MoveEffectTrigger, ChargeAttr, MoveCategory, NoEffectAttr, HitsTagAttr, ToxicAccuracyAttr } from "#app/data/move"; import { SpeciesFormChangePostMoveTrigger } from "#app/data/pokemon-forms"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { Moves } from "#app/enums/moves"; @@ -14,6 +14,7 @@ import { PokemonMultiHitModifier, FlinchChanceModifier, EnemyAttackStatusEffectC import i18next from "i18next"; import * as Utils from "#app/utils"; import { PokemonPhase } from "./pokemon-phase"; +import { Type } from "#app/data/type"; export class MoveEffectPhase extends PokemonPhase { public move: PokemonMove; @@ -404,7 +405,10 @@ export class MoveEffectPhase extends PokemonPhase { } const semiInvulnerableTag = target.getTag(SemiInvulnerableTag); - if (semiInvulnerableTag && !this.move.getMove().getAttrs(HitsTagAttr).some(hta => hta.tagType === semiInvulnerableTag.tagType)) { + if (semiInvulnerableTag + && !this.move.getMove().getAttrs(HitsTagAttr).some(hta => hta.tagType === semiInvulnerableTag.tagType) + && !(this.move.getMove().getAttrs(ToxicAccuracyAttr) && user.isOfType(Type.POISON)) + ) { return false; } diff --git a/src/test/moves/toxic.test.ts b/src/test/moves/toxic.test.ts new file mode 100644 index 00000000000..2d023c201c1 --- /dev/null +++ b/src/test/moves/toxic.test.ts @@ -0,0 +1,76 @@ +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { StatusEffect } from "#enums/status-effect"; +import { BattlerIndex } from "#app/battle"; +import { allMoves } from "#app/data/move"; + +describe("Moves - Toxic", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .battleType("single") + .moveset(Moves.TOXIC) + .enemySpecies(Species.MAGIKARP) + .enemyMoveset(Moves.SPLASH); + }); + + it("should be guaranteed to hit if user is Poison-type", async () => { + vi.spyOn(allMoves[Moves.TOXIC], "accuracy", "get").mockReturnValue(0); + await game.classicMode.startBattle([Species.TOXAPEX]); + + game.move.select(Moves.TOXIC); + await game.phaseInterceptor.to("BerryPhase", false); + + expect(game.scene.getEnemyPokemon()!.status?.effect).toBe(StatusEffect.TOXIC); + }); + + it("may miss if user is not Poison-type", async () => { + vi.spyOn(allMoves[Moves.TOXIC], "accuracy", "get").mockReturnValue(0); + await game.classicMode.startBattle([Species.UMBREON]); + + game.move.select(Moves.TOXIC); + await game.phaseInterceptor.to("BerryPhase", false); + + expect(game.scene.getEnemyPokemon()!.status).toBeUndefined(); + }); + + it("should hit semi-invulnerable targets if user is Poison-type", async () => { + vi.spyOn(allMoves[Moves.TOXIC], "accuracy", "get").mockReturnValue(0); + game.override.enemyMoveset(Moves.FLY); + await game.classicMode.startBattle([Species.TOXAPEX]); + + game.move.select(Moves.TOXIC); + await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.phaseInterceptor.to("BerryPhase", false); + + expect(game.scene.getEnemyPokemon()!.status?.effect).toBe(StatusEffect.TOXIC); + }); + + it("should miss semi-invulnerable targets if user is not Poison-type", async () => { + vi.spyOn(allMoves[Moves.TOXIC], "accuracy", "get").mockReturnValue(-1); + game.override.enemyMoveset(Moves.FLY); + await game.classicMode.startBattle([Species.UMBREON]); + + game.move.select(Moves.TOXIC); + await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.phaseInterceptor.to("BerryPhase", false); + + expect(game.scene.getEnemyPokemon()!.status).toBeUndefined(); + }); +}); From ea9e0c7909ad2bd64ee4cb832c24185580658649 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Thu, 3 Oct 2024 11:17:51 -0400 Subject: [PATCH 005/153] [Move] Implement Scale Shot (#4551) * Scale Shot * Docstrings for StatStageChangeAttr * Add test for scale shot --- src/data/move.ts | 33 +++++++++++--- src/test/moves/scale_shot.test.ts | 74 +++++++++++++++++++++++++++++++ 2 files changed, 101 insertions(+), 6 deletions(-) create mode 100644 src/test/moves/scale_shot.test.ts diff --git a/src/data/move.ts b/src/data/move.ts index 748f81cdd8b..13ab84e8898 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -2668,20 +2668,42 @@ export class DelayedAttackAttr extends OverrideMoveEffectAttr { } } +/** + * Attribute used for moves that change stat stages + * @param stats {@linkcode BattleStat} array of stats to be changed + * @param stages stages by which to change the stats, from -6 to 6 + * @param selfTarget whether the changes are applied to the user (true) or the target (false) + * @param condition {@linkcode MoveConditionFunc} optional condition to trigger the stat change + * @param firstHitOnly whether the stat change only applies on the first hit of a multi hit move + * @param moveEffectTrigger {@linkcode MoveEffectTrigger} the trigger for the effect to take place + * @param firstTargetOnly whether, if this is a multi target move, to only apply the effect after the first target is hit, rather than once for each target + * @param lastHitOnly whether the effect should only apply after the last hit of a multi hit move + * + * @extends MoveEffectAttr + * @see {@linkcode apply} + */ export class StatStageChangeAttr extends MoveEffectAttr { public stats: BattleStat[]; public stages: integer; private condition: MoveConditionFunc | null; private showMessage: boolean; - constructor(stats: BattleStat[], stages: integer, selfTarget?: boolean, condition?: MoveConditionFunc | null, showMessage: boolean = true, firstHitOnly: boolean = false, moveEffectTrigger: MoveEffectTrigger = MoveEffectTrigger.HIT, firstTargetOnly: boolean = false) { - super(selfTarget, moveEffectTrigger, firstHitOnly, false, firstTargetOnly); + constructor(stats: BattleStat[], stages: integer, selfTarget?: boolean, condition?: MoveConditionFunc | null, showMessage: boolean = true, firstHitOnly: boolean = false, moveEffectTrigger: MoveEffectTrigger = MoveEffectTrigger.HIT, firstTargetOnly: boolean = false, lastHitOnly: boolean = false) { + super(selfTarget, moveEffectTrigger, firstHitOnly, lastHitOnly, firstTargetOnly); this.stats = stats; this.stages = stages; this.condition = condition!; // TODO: is this bang correct? this.showMessage = showMessage; } + /** + * Attempts to change stats of the user or target (depending on value of selfTarget) if conditions are met + * @param user {@linkcode Pokemon} the user of the move + * @param target {@linkcode Pokemon} the target of the move + * @param move {@linkcode Move} the move + * @param args unused + * @returns whether stat stages were changed + */ apply(user: Pokemon, target: Pokemon, move: Move, args?: any[]): boolean | Promise { if (!super.apply(user, target, move, args) || (this.condition && !this.condition(user, target, move))) { return false; @@ -9154,11 +9176,10 @@ export function initMoves() { .attr(ClearTerrainAttr) .condition((user, target, move) => !!user.scene.arena.terrain), new AttackMove(Moves.SCALE_SHOT, Type.DRAGON, MoveCategory.PHYSICAL, 25, 90, 20, -1, 0, 8) - //.attr(StatStageChangeAttr, Stat.SPD, 1, true) // TODO: Have boosts only apply at end of move, not after every hit - //.attr(StatStageChangeAttr, Stat.DEF, -1, true) + .attr(StatStageChangeAttr, [Stat.SPD], 1, true, null, true, false, MoveEffectTrigger.HIT, false, true) + .attr(StatStageChangeAttr, [Stat.DEF], -1, true, null, true, false, MoveEffectTrigger.HIT, false, true) .attr(MultiHitAttr) - .makesContact(false) - .partial(), + .makesContact(false), new AttackMove(Moves.METEOR_BEAM, Type.ROCK, MoveCategory.SPECIAL, 120, 90, 10, 100, 0, 8) .attr(ChargeAttr, ChargeAnim.METEOR_BEAM_CHARGING, i18next.t("moveTriggers:isOverflowingWithSpacePower", {pokemonName: "{USER}"}), null, true) .attr(StatStageChangeAttr, [ Stat.SPATK ], 1, true) diff --git a/src/test/moves/scale_shot.test.ts b/src/test/moves/scale_shot.test.ts new file mode 100644 index 00000000000..412ce6687c6 --- /dev/null +++ b/src/test/moves/scale_shot.test.ts @@ -0,0 +1,74 @@ +import { DamagePhase } from "#app/phases/damage-phase"; +import { MoveEffectPhase } from "#app/phases/move-effect-phase"; +import { MoveEndPhase } from "#app/phases/move-end-phase"; +import { TurnEndPhase } from "#app/phases/turn-end-phase"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { Stat } from "#enums/stat"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; + +describe("Moves - Scale Shot", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([Moves.SCALE_SHOT]) + .battleType("single") + .disableCrits() + .starterSpecies(Species.MINCCINO) + .ability(Abilities.NO_GUARD) + .passiveAbility(Abilities.SKILL_LINK) + .enemyAbility(Abilities.SHEER_FORCE) + .enemyPassiveAbility(Abilities.STALL) + .enemyMoveset(Moves.SKILL_SWAP) + .enemyLevel(5); + }); + + it("applies stat changes after last hit", async () => { + await game.classicMode.startBattle([Species.FORRETRESS]); + const minccino = game.scene.getPlayerPokemon()!; + game.move.select(Moves.SCALE_SHOT); + await game.phaseInterceptor.to(MoveEffectPhase); + await game.phaseInterceptor.to(DamagePhase); + await game.phaseInterceptor.to(MoveEffectPhase); + expect (minccino?.getStatStage(Stat.DEF)).toBe(0); + expect (minccino?.getStatStage(Stat.SPD)).toBe(0); + await game.phaseInterceptor.to(MoveEndPhase); + expect (minccino.getStatStage(Stat.DEF)).toBe(-1); + expect (minccino.getStatStage(Stat.SPD)).toBe(1); + }); + + it("unaffected by sheer force", async () => { + await game.classicMode.startBattle([Species.WOBBUFFET]); + const minccino = game.scene.getPlayerPokemon()!; + const wobbuffet = game.scene.getEnemyPokemon()!; + wobbuffet.setStat(Stat.HP, 100, true); + wobbuffet.hp = 100; + game.move.select(Moves.SCALE_SHOT); + await game.phaseInterceptor.to(TurnEndPhase); + const hpafter1 = wobbuffet.hp; + //effect not nullified by sheer force + expect (minccino.getStatStage(Stat.DEF)).toBe(-1); + expect (minccino.getStatStage(Stat.SPD)).toBe(1); + game.move.select(Moves.SCALE_SHOT); + await game.phaseInterceptor.to(MoveEndPhase); + const hpafter2 = wobbuffet.hp; + //check damage not boosted- make damage before sheer force a little lower than theoretical boosted sheer force damage + expect (100 - hpafter1).toBe(hpafter1 - hpafter2); + }); +}); From 54efd444975d9b42e52148eb2b32eef9a054b047 Mon Sep 17 00:00:00 2001 From: flx-sta <50131232+flx-sta@users.noreply.github.com> Date: Thu, 3 Oct 2024 08:38:17 -0700 Subject: [PATCH 006/153] [Refactor] Modifiers type inference v2 (#4294) * refactor: apply Modifiers type inference (pattern) Mirror from #1747 Co-authored-by: Dmitriy * fix: PokemonBaseStatTotalModifier.apply having a `[1]` left * fix: HeldItemTransferModifier.apply missing `...args: unknown[]` * Replace relative imports with absolute imports in `modifier.ts` * chore: fix TS1016* error [*] A required parameter cannot follow an optional parameter. * chore: fix namings, types and docs suggested by @torranx * replace: `IntegerHolder` with `NumberHolder` & `integer` with `number` * chore: apply review suggestions by @torranx * chore: address review feedback from @torranx * update: imports in `modifier-types` * update `lapse` calls in modifier.ts * fix lapse call in `battle-end-phase` * minor adjustments in `modifier.ts` * fix `EnemyEndureChanceModifier.apply` types * fix `EnemyAttackStatusEffectChanceModifier.apply` types * fix `EnemyTurnHealModifier.apply` types * fix `EnemyStatusEffectHealChanceModifier.apply` types --------- Co-authored-by: Dmitriy Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/battle-scene.ts | 90 +- src/modifier/modifier-type.ts | 311 ++++--- src/modifier/modifier.ts | 1542 ++++++++++++++++++++------------ src/phases/battle-end-phase.ts | 2 +- src/phases/berry-phase.ts | 4 +- 5 files changed, 1200 insertions(+), 749 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index df852126bc2..1bb0d6bfc4b 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -2445,7 +2445,10 @@ export default class BattleScene extends SceneBase { } if ((modifier as PersistentModifier).add(this.modifiers, !!virtual, this)) { if (modifier instanceof PokemonFormChangeItemModifier || modifier instanceof TerastallizeModifier) { - success = modifier.apply([ this.getPokemonById(modifier.pokemonId), true ]); + const pokemon = this.getPokemonById(modifier.pokemonId); + if (pokemon) { + success = modifier.apply(pokemon, true); + } } if (playSound && !this.sound.get(soundName)) { this.playSound(soundName); @@ -2472,7 +2475,7 @@ export default class BattleScene extends SceneBase { for (const p in this.party) { const pokemon = this.party[p]; - const args: any[] = [ pokemon ]; + const args: unknown[] = []; if (modifier instanceof PokemonHpRestoreModifier) { if (!(modifier as PokemonHpRestoreModifier).fainted) { const hpRestoreMultiplier = new Utils.IntegerHolder(1); @@ -2485,8 +2488,8 @@ export default class BattleScene extends SceneBase { args.push(this.getPokemonById(modifier.fusePokemonId) as PlayerPokemon); } - if (modifier.shouldApply(args)) { - const result = modifier.apply(args); + if (modifier.shouldApply(pokemon, ...args)) { + const result = modifier.apply(pokemon, ...args); if (result instanceof Promise) { modifierPromises.push(result.then(s => success ||= s)); } else { @@ -2498,8 +2501,8 @@ export default class BattleScene extends SceneBase { return Promise.allSettled([this.party.map(p => p.updateInfo(instant)), ...modifierPromises]).then(() => resolve(success)); } else { const args = [ this ]; - if (modifier.shouldApply(args)) { - const result = modifier.apply(args); + if (modifier.shouldApply(...args)) { + const result = modifier.apply(...args); if (result instanceof Promise) { return result.then(success => resolve(success)); } else { @@ -2521,7 +2524,10 @@ export default class BattleScene extends SceneBase { } if ((modifier as PersistentModifier).add(this.enemyModifiers, false, this)) { if (modifier instanceof PokemonFormChangeItemModifier || modifier instanceof TerastallizeModifier) { - modifier.apply([ this.getPokemonById(modifier.pokemonId), true ]); + const pokemon = this.getPokemonById(modifier.pokemonId); + if (pokemon) { + modifier.apply(pokemon, true); + } } for (const rm of modifiersToRemove) { this.removeModifier(rm, true); @@ -2755,7 +2761,10 @@ export default class BattleScene extends SceneBase { if (modifierIndex > -1) { modifiers.splice(modifierIndex, 1); if (modifier instanceof PokemonFormChangeItemModifier || modifier instanceof TerastallizeModifier) { - modifier.apply([ this.getPokemonById(modifier.pokemonId), false ]); + const pokemon = this.getPokemonById(modifier.pokemonId); + if (pokemon) { + modifier.apply(pokemon, false); + } } return true; } @@ -2773,16 +2782,36 @@ export default class BattleScene extends SceneBase { return (player ? this.modifiers : this.enemyModifiers).filter((m): m is T => m instanceof modifierType); } - findModifiers(modifierFilter: ModifierPredicate, player: boolean = true): PersistentModifier[] { - return (player ? this.modifiers : this.enemyModifiers).filter(m => (modifierFilter as ModifierPredicate)(m)); + /** + * Get all of the modifiers that pass the `modifierFilter` function + * @param modifierFilter The function used to filter a target's modifiers + * @param isPlayer Whether to search the player (`true`) or the enemy (`false`); Defaults to `true` + * @returns the list of all modifiers that passed the `modifierFilter` function + */ + findModifiers(modifierFilter: ModifierPredicate, isPlayer: boolean = true): PersistentModifier[] { + return (isPlayer ? this.modifiers : this.enemyModifiers).filter(modifierFilter); } + /** + * Find the first modifier that pass the `modifierFilter` function + * @param modifierFilter The function used to filter a target's modifiers + * @param player Whether to search the player (`true`) or the enemy (`false`); Defaults to `true` + * @returns the first modifier that passed the `modifierFilter` function; `undefined` if none passed + */ findModifier(modifierFilter: ModifierPredicate, player: boolean = true): PersistentModifier | undefined { - return (player ? this.modifiers : this.enemyModifiers).find(m => (modifierFilter as ModifierPredicate)(m)); + return (player ? this.modifiers : this.enemyModifiers).find(modifierFilter); } - applyShuffledModifiers(scene: BattleScene, modifierType: Constructor, player: boolean = true, ...args: any[]): PersistentModifier[] { - let modifiers = (player ? this.modifiers : this.enemyModifiers).filter(m => m instanceof modifierType && m.shouldApply(args)); + /** + * Apply all modifiers that match `modifierType` in a random order + * @param scene {@linkcode BattleScene} used to randomize the order of modifiers + * @param modifierType The type of modifier to apply; must extend {@linkcode PersistentModifier} + * @param player Whether to search the player (`true`) or the enemy (`false`); Defaults to `true` + * @param ...args The list of arguments needed to invoke `modifierType.apply` + * @returns the list of all modifiers that matched `modifierType` and were applied. + */ + applyShuffledModifiers(scene: BattleScene, modifierType: Constructor, player: boolean = true, ...args: Parameters): T[] { + let modifiers = (player ? this.modifiers : this.enemyModifiers).filter((m): m is T => m instanceof modifierType && m.shouldApply(...args)); scene.executeWithSeedOffset(() => { const shuffleModifiers = mods => { if (mods.length < 1) { @@ -2796,15 +2825,23 @@ export default class BattleScene extends SceneBase { return this.applyModifiersInternal(modifiers, player, args); } - applyModifiers(modifierType: Constructor, player: boolean = true, ...args: any[]): PersistentModifier[] { - const modifiers = (player ? this.modifiers : this.enemyModifiers).filter(m => m instanceof modifierType && m.shouldApply(args)); + /** + * Apply all modifiers that match `modifierType` + * @param modifierType The type of modifier to apply; must extend {@linkcode PersistentModifier} + * @param player Whether to search the player (`true`) or the enemy (`false`); Defaults to `true` + * @param ...args The list of arguments needed to invoke `modifierType.apply` + * @returns the list of all modifiers that matched `modifierType` and were applied. + */ + applyModifiers(modifierType: Constructor, player: boolean = true, ...args: Parameters): T[] { + const modifiers = (player ? this.modifiers : this.enemyModifiers).filter((m): m is T => m instanceof modifierType && m.shouldApply(...args)); return this.applyModifiersInternal(modifiers, player, args); } - applyModifiersInternal(modifiers: PersistentModifier[], player: boolean, args: any[]): PersistentModifier[] { - const appliedModifiers: PersistentModifier[] = []; + /** Helper function to apply all passed modifiers */ + applyModifiersInternal(modifiers: T[], player: boolean, args: Parameters): T[] { + const appliedModifiers: T[] = []; for (const modifier of modifiers) { - if (modifier.apply(args)) { + if (modifier.apply(...args)) { console.log("Applied", modifier.type.name, !player ? "(enemy)" : ""); appliedModifiers.push(modifier); } @@ -2813,10 +2850,17 @@ export default class BattleScene extends SceneBase { return appliedModifiers; } - applyModifier(modifierType: Constructor, player: boolean = true, ...args: any[]): PersistentModifier | null { - const modifiers = (player ? this.modifiers : this.enemyModifiers).filter(m => m instanceof modifierType && m.shouldApply(args)); + /** + * Apply the first modifier that matches `modifierType` + * @param modifierType The type of modifier to apply; must extend {@linkcode PersistentModifier} + * @param player Whether to search the player (`true`) or the enemy (`false`); Defaults to `true` + * @param ...args The list of arguments needed to invoke `modifierType.apply` + * @returns the first modifier that matches `modifierType` and was applied; return `null` if none matched + */ + applyModifier(modifierType: Constructor, player: boolean = true, ...args: Parameters): T | null { + const modifiers = (player ? this.modifiers : this.enemyModifiers).filter((m): m is T => m instanceof modifierType && m.shouldApply(...args)); for (const modifier of modifiers) { - if (modifier.apply(args)) { + if (modifier.apply(...args)) { console.log("Applied", modifier.type.name, !player ? "(enemy)" : ""); return modifier; } @@ -2882,7 +2926,7 @@ export default class BattleScene extends SceneBase { } } - validateAchv(achv: Achv, args?: any[]): boolean { + validateAchv(achv: Achv, args?: unknown[]): boolean { if (!this.gameData.achvUnlocks.hasOwnProperty(achv.id) && achv.validate(this, args)) { this.gameData.achvUnlocks[achv.id] = new Date().getTime(); this.ui.achvBar.showAchv(achv); @@ -2895,7 +2939,7 @@ export default class BattleScene extends SceneBase { return false; } - validateVoucher(voucher: Voucher, args?: any[]): boolean { + validateVoucher(voucher: Voucher, args?: unknown[]): boolean { if (!this.gameData.voucherUnlocks.hasOwnProperty(voucher.id) && voucher.validate(this, args)) { this.gameData.voucherUnlocks[voucher.id] = new Date().getTime(); this.ui.achvBar.showAchv(voucher); diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index 238d2f0debf..aac6a0ed572 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -1,38 +1,35 @@ -import * as Modifiers from "#app/modifier/modifier"; -import { MoneyMultiplierModifier } from "#app/modifier/modifier"; -import { allMoves, AttackMove, selfStatLowerMoves } from "#app/data/move"; -import { getPokeballCatchMultiplier, getPokeballName, MAX_PER_TYPE_POKEBALLS, PokeballType } from "#app/data/pokeball"; -import Pokemon, { EnemyPokemon, PlayerPokemon, PokemonMove } from "#app/field/pokemon"; +import BattleScene from "#app/battle-scene"; import { EvolutionItem, pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import { tmPoolTiers, tmSpecies } from "#app/data/balance/tms"; -import { Type } from "#app/data/type"; -import PartyUiHandler, { PokemonMoveSelectFilter, PokemonSelectFilter } from "#app/ui/party-ui-handler"; -import * as Utils from "#app/utils"; import { getBerryEffectDescription, getBerryName } from "#app/data/berry"; -import { Unlockables } from "#app/system/unlockables"; -import { getStatusEffectDescriptor, StatusEffect } from "#app/data/status-effect"; -import BattleScene from "#app/battle-scene"; -import { getVoucherTypeIcon, getVoucherTypeName, VoucherType } from "#app/system/voucher"; -import { FormChangeItem, pokemonFormChanges, SpeciesFormChangeCondition, SpeciesFormChangeItemTrigger } from "#app/data/pokemon-forms"; -import { ModifierTier } from "#app/modifier/modifier-tier"; +import { allMoves, AttackMove, selfStatLowerMoves } from "#app/data/move"; import { getNatureName, getNatureStatMultiplier, Nature } from "#app/data/nature"; -import i18next from "i18next"; -import { getModifierTierTextTint } from "#app/ui/text"; +import { getPokeballCatchMultiplier, getPokeballName, MAX_PER_TYPE_POKEBALLS, PokeballType } from "#app/data/pokeball"; +import { FormChangeItem, pokemonFormChanges, SpeciesFormChangeCondition, SpeciesFormChangeItemTrigger } from "#app/data/pokemon-forms"; +import { getStatusEffectDescriptor, StatusEffect } from "#app/data/status-effect"; +import { Type } from "#app/data/type"; +import Pokemon, { EnemyPokemon, PlayerPokemon, PokemonMove } from "#app/field/pokemon"; +import { getPokemonNameWithAffix } from "#app/messages"; +import { AddPokeballModifier, AddVoucherModifier, AttackTypeBoosterModifier, BaseStatModifier, BerryModifier, BoostBugSpawnModifier, BypassSpeedChanceModifier, ContactHeldItemTransferChanceModifier, CritBoosterModifier, DamageMoneyRewardModifier, DoubleBattleChanceBoosterModifier, EnemyAttackStatusEffectChanceModifier, EnemyDamageBoosterModifier, EnemyDamageReducerModifier, EnemyEndureChanceModifier, EnemyFusionChanceModifier, EnemyStatusEffectHealChanceModifier, EnemyTurnHealModifier, EvolutionItemModifier, EvolutionStatBoosterModifier, EvoTrackerModifier, ExpBalanceModifier, ExpBoosterModifier, ExpShareModifier, ExtraModifierModifier, FlinchChanceModifier, FusePokemonModifier, GigantamaxAccessModifier, HealingBoosterModifier, HealShopCostModifier, HiddenAbilityRateBoosterModifier, HitHealModifier, IvScannerModifier, LevelIncrementBoosterModifier, LockModifierTiersModifier, MapModifier, MegaEvolutionAccessModifier, MoneyInterestModifier, MoneyMultiplierModifier, MoneyRewardModifier, MultipleParticipantExpBonusModifier, PokemonAllMovePpRestoreModifier, PokemonBaseStatFlatModifier, PokemonBaseStatTotalModifier, PokemonExpBoosterModifier, PokemonFormChangeItemModifier, PokemonFriendshipBoosterModifier, PokemonHeldItemModifier, PokemonHpRestoreModifier, PokemonIncrementingStatModifier, PokemonInstantReviveModifier, PokemonLevelIncrementModifier, PokemonMoveAccuracyBoosterModifier, PokemonMultiHitModifier, PokemonNatureChangeModifier, PokemonNatureWeightModifier, PokemonPpRestoreModifier, PokemonPpUpModifier, PokemonStatusHealModifier, PreserveBerryModifier, RememberMoveModifier, ResetNegativeStatStageModifier, ShinyRateBoosterModifier, SpeciesCritBoosterModifier, SpeciesStatBoosterModifier, SurviveDamageModifier, SwitchEffectTransferModifier, TempCritBoosterModifier, TempStatStageBoosterModifier, TerastallizeAccessModifier, TerastallizeModifier, TmModifier, TurnHealModifier, TurnHeldItemTransferModifier, TurnStatusEffectModifier, type EnemyPersistentModifier, type Modifier, type PersistentModifier } from "#app/modifier/modifier"; +import { ModifierTier } from "#app/modifier/modifier-tier"; import Overrides from "#app/overrides"; +import { Unlockables } from "#app/system/unlockables"; +import { getVoucherTypeIcon, getVoucherTypeName, VoucherType } from "#app/system/voucher"; +import PartyUiHandler, { PokemonMoveSelectFilter, PokemonSelectFilter } from "#app/ui/party-ui-handler"; +import { getModifierTierTextTint } from "#app/ui/text"; +import { formatMoney, getEnumKeys, getEnumValues, IntegerHolder, NumberHolder, padInt, randSeedInt, randSeedItem } from "#app/utils"; import { Abilities } from "#enums/abilities"; import { BattlerTagType } from "#enums/battler-tag-type"; import { BerryType } from "#enums/berry-type"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import { getPokemonNameWithAffix } from "#app/messages"; -import { PermanentStat, TEMP_BATTLE_STATS, TempBattleStat, Stat, getStatKey } from "#enums/stat"; import { SpeciesFormKey } from "#enums/species-form-key"; +import { getStatKey, PermanentStat, Stat, TEMP_BATTLE_STATS, TempBattleStat } from "#enums/stat"; +import i18next from "i18next"; const outputModifierData = false; const useMaxWeightForOutput = false; -type Modifier = Modifiers.Modifier; - export enum ModifierPoolType { PLAYER, WILD, @@ -97,7 +94,7 @@ export class ModifierType { // Try multiple pool types in case of stolen items for (const type of poolTypes) { const pool = getModifierPoolForType(type); - for (const tier of Utils.getEnumValues(ModifierTier)) { + for (const tier of getEnumValues(ModifierTier)) { if (!pool.hasOwnProperty(tier)) { continue; } @@ -171,7 +168,7 @@ class AddPokeballModifierType extends ModifierType { private count: integer; constructor(iconImage: string, pokeballType: PokeballType, count: integer) { - super("", iconImage, (_type, _args) => new Modifiers.AddPokeballModifier(this, pokeballType, count), "pb", "se/pb_bounce_1"); + super("", iconImage, (_type, _args) => new AddPokeballModifier(this, pokeballType, count), "pb", "se/pb_bounce_1"); this.pokeballType = pokeballType; this.count = count; } @@ -198,7 +195,7 @@ class AddVoucherModifierType extends ModifierType { private count: integer; constructor(voucherType: VoucherType, count: integer) { - super("", getVoucherTypeIcon(voucherType), (_type, _args) => new Modifiers.AddVoucherModifier(this, voucherType, count), "voucher"); + super("", getVoucherTypeIcon(voucherType), (_type, _args) => new AddVoucherModifier(this, voucherType, count), "voucher"); this.count = count; this.voucherType = voucherType; } @@ -232,7 +229,7 @@ export class PokemonHeldItemModifierType extends PokemonModifierType { constructor(localeKey: string, iconImage: string, newModifierFunc: NewModifierFunc, group?: string, soundName?: string) { super(localeKey, iconImage, newModifierFunc, (pokemon: PlayerPokemon) => { const dummyModifier = this.newModifier(pokemon); - const matchingModifier = pokemon.scene.findModifier(m => m instanceof Modifiers.PokemonHeldItemModifier && m.pokemonId === pokemon.id && m.matchType(dummyModifier)) as Modifiers.PokemonHeldItemModifier; + const matchingModifier = pokemon.scene.findModifier(m => m instanceof PokemonHeldItemModifier && m.pokemonId === pokemon.id && m.matchType(dummyModifier)) as PokemonHeldItemModifier; const maxStackCount = dummyModifier.getMaxStackCount(pokemon.scene); if (!maxStackCount) { return i18next.t("modifierType:ModifierType.PokemonHeldItemModifierType.extra.inoperable", { "pokemonName": getPokemonNameWithAffix(pokemon) }); @@ -244,8 +241,8 @@ export class PokemonHeldItemModifierType extends PokemonModifierType { }, group, soundName); } - newModifier(...args: any[]): Modifiers.PokemonHeldItemModifier { - return super.newModifier(...args) as Modifiers.PokemonHeldItemModifier; + newModifier(...args: any[]): PokemonHeldItemModifier { + return super.newModifier(...args) as PokemonHeldItemModifier; } } @@ -255,7 +252,7 @@ export class PokemonHpRestoreModifierType extends PokemonModifierType { protected healStatus: boolean; constructor(localeKey: string, iconImage: string, restorePoints: integer, restorePercent: integer, healStatus: boolean = false, newModifierFunc?: NewModifierFunc, selectFilter?: PokemonSelectFilter, group?: string) { - super(localeKey, iconImage, newModifierFunc || ((_type, args) => new Modifiers.PokemonHpRestoreModifier(this, (args[0] as PlayerPokemon).id, this.restorePoints, this.restorePercent, this.healStatus, false)), + super(localeKey, iconImage, newModifierFunc || ((_type, args) => new PokemonHpRestoreModifier(this, (args[0] as PlayerPokemon).id, this.restorePoints, this.restorePercent, this.healStatus, false)), selectFilter || ((pokemon: PlayerPokemon) => { if (!pokemon.hp || (pokemon.isFullHp() && (!this.healStatus || (!pokemon.status && !pokemon.getTag(BattlerTagType.CONFUSED))))) { return PartyUiHandler.NoEffectMessage; @@ -282,7 +279,7 @@ export class PokemonHpRestoreModifierType extends PokemonModifierType { export class PokemonReviveModifierType extends PokemonHpRestoreModifierType { constructor(localeKey: string, iconImage: string, restorePercent: integer) { - super(localeKey, iconImage, 0, restorePercent, false, (_type, args) => new Modifiers.PokemonHpRestoreModifier(this, (args[0] as PlayerPokemon).id, 0, this.restorePercent, false, true), + super(localeKey, iconImage, 0, restorePercent, false, (_type, args) => new PokemonHpRestoreModifier(this, (args[0] as PlayerPokemon).id, 0, this.restorePercent, false, true), ((pokemon: PlayerPokemon) => { if (!pokemon.isFainted()) { return PartyUiHandler.NoEffectMessage; @@ -305,7 +302,7 @@ export class PokemonReviveModifierType extends PokemonHpRestoreModifierType { export class PokemonStatusHealModifierType extends PokemonModifierType { constructor(localeKey: string, iconImage: string) { - super(localeKey, iconImage, ((_type, args) => new Modifiers.PokemonStatusHealModifier(this, (args[0] as PlayerPokemon).id)), + super(localeKey, iconImage, ((_type, args) => new PokemonStatusHealModifier(this, (args[0] as PlayerPokemon).id)), ((pokemon: PlayerPokemon) => { if (!pokemon.hp || (!pokemon.status && !pokemon.getTag(BattlerTagType.CONFUSED))) { return PartyUiHandler.NoEffectMessage; @@ -333,7 +330,7 @@ export class PokemonPpRestoreModifierType extends PokemonMoveModifierType { protected restorePoints: integer; constructor(localeKey: string, iconImage: string, restorePoints: integer) { - super(localeKey, iconImage, (_type, args) => new Modifiers.PokemonPpRestoreModifier(this, (args[0] as PlayerPokemon).id, (args[1] as integer), this.restorePoints), + super(localeKey, iconImage, (_type, args) => new PokemonPpRestoreModifier(this, (args[0] as PlayerPokemon).id, (args[1] as integer), this.restorePoints), (_pokemon: PlayerPokemon) => { return null; }, (pokemonMove: PokemonMove) => { @@ -358,7 +355,7 @@ export class PokemonAllMovePpRestoreModifierType extends PokemonModifierType { protected restorePoints: integer; constructor(localeKey: string, iconImage: string, restorePoints: integer) { - super(localeKey, iconImage, (_type, args) => new Modifiers.PokemonAllMovePpRestoreModifier(this, (args[0] as PlayerPokemon).id, this.restorePoints), + super(localeKey, iconImage, (_type, args) => new PokemonAllMovePpRestoreModifier(this, (args[0] as PlayerPokemon).id, this.restorePoints), (pokemon: PlayerPokemon) => { if (!pokemon.getMoveset().filter(m => m?.ppUsed).length) { return PartyUiHandler.NoEffectMessage; @@ -381,7 +378,7 @@ export class PokemonPpUpModifierType extends PokemonMoveModifierType { protected upPoints: integer; constructor(localeKey: string, iconImage: string, upPoints: integer) { - super(localeKey, iconImage, (_type, args) => new Modifiers.PokemonPpUpModifier(this, (args[0] as PlayerPokemon).id, (args[1] as integer), this.upPoints), + super(localeKey, iconImage, (_type, args) => new PokemonPpUpModifier(this, (args[0] as PlayerPokemon).id, (args[1] as integer), this.upPoints), (_pokemon: PlayerPokemon) => { return null; }, (pokemonMove: PokemonMove) => { @@ -403,7 +400,7 @@ export class PokemonNatureChangeModifierType extends PokemonModifierType { protected nature: Nature; constructor(nature: Nature) { - super("", `mint_${Utils.getEnumKeys(Stat).find(s => getNatureStatMultiplier(nature, Stat[s]) > 1)?.toLowerCase() || "neutral" }`, ((_type, args) => new Modifiers.PokemonNatureChangeModifier(this, (args[0] as PlayerPokemon).id, this.nature)), + super("", `mint_${getEnumKeys(Stat).find(s => getNatureStatMultiplier(nature, Stat[s]) > 1)?.toLowerCase() || "neutral" }`, ((_type, args) => new PokemonNatureChangeModifier(this, (args[0] as PlayerPokemon).id, this.nature)), ((pokemon: PlayerPokemon) => { if (pokemon.getNature() === this.nature) { return PartyUiHandler.NoEffectMessage; @@ -425,7 +422,7 @@ export class PokemonNatureChangeModifierType extends PokemonModifierType { export class RememberMoveModifierType extends PokemonModifierType { constructor(localeKey: string, iconImage: string, group?: string) { - super(localeKey, iconImage, (type, args) => new Modifiers.RememberMoveModifier(type, (args[0] as PlayerPokemon).id, (args[1] as integer)), + super(localeKey, iconImage, (type, args) => new RememberMoveModifier(type, (args[0] as PlayerPokemon).id, (args[1] as integer)), (pokemon: PlayerPokemon) => { if (!pokemon.getLearnableLevelMoves().length) { return PartyUiHandler.NoEffectMessage; @@ -439,7 +436,7 @@ export class DoubleBattleChanceBoosterModifierType extends ModifierType { private maxBattles: number; constructor(localeKey: string, iconImage: string, maxBattles: number) { - super(localeKey, iconImage, (_type, _args) => new Modifiers.DoubleBattleChanceBoosterModifier(this, maxBattles), "lure"); + super(localeKey, iconImage, (_type, _args) => new DoubleBattleChanceBoosterModifier(this, maxBattles), "lure"); this.maxBattles = maxBattles; } @@ -458,7 +455,7 @@ export class TempStatStageBoosterModifierType extends ModifierType implements Ge constructor(stat: TempBattleStat) { const nameKey = TempStatStageBoosterModifierTypeGenerator.items[stat]; - super("", nameKey, (_type, _args) => new Modifiers.TempStatStageBoosterModifier(this, this.stat, 5)); + super("", nameKey, (_type, _args) => new TempStatStageBoosterModifier(this, this.stat, 5)); this.stat = stat; this.nameKey = nameKey; @@ -485,7 +482,7 @@ export class BerryModifierType extends PokemonHeldItemModifierType implements Ge private berryType: BerryType; constructor(berryType: BerryType) { - super("", `${BerryType[berryType].toLowerCase()}_berry`, (type, args) => new Modifiers.BerryModifier(type, (args[0] as Pokemon).id, berryType), "berry"); + super("", `${BerryType[berryType].toLowerCase()}_berry`, (type, args) => new BerryModifier(type, (args[0] as Pokemon).id, berryType), "berry"); this.berryType = berryType; } @@ -550,7 +547,7 @@ export class AttackTypeBoosterModifierType extends PokemonHeldItemModifierType i constructor(moveType: Type, boostPercent: integer) { super("", `${getAttackTypeBoosterItemName(moveType)?.replace(/[ \-]/g, "_").toLowerCase()}`, - (_type, args) => new Modifiers.AttackTypeBoosterModifier(this, (args[0] as Pokemon).id, moveType, boostPercent)); + (_type, args) => new AttackTypeBoosterModifier(this, (args[0] as Pokemon).id, moveType, boostPercent)); this.moveType = moveType; this.boostPercent = boostPercent; @@ -573,7 +570,7 @@ export class AttackTypeBoosterModifierType extends PokemonHeldItemModifierType i export type SpeciesStatBoosterItem = keyof typeof SpeciesStatBoosterModifierTypeGenerator.items; /** - * Modifier type for {@linkcode Modifiers.SpeciesStatBoosterModifier} + * Modifier type for {@linkcode SpeciesStatBoosterModifier} * @extends PokemonHeldItemModifierType * @implements GeneratedPersistentModifierType */ @@ -582,7 +579,7 @@ export class SpeciesStatBoosterModifierType extends PokemonHeldItemModifierType constructor(key: SpeciesStatBoosterItem) { const item = SpeciesStatBoosterModifierTypeGenerator.items[key]; - super(`modifierType:SpeciesBoosterItem.${key}`, key.toLowerCase(), (type, args) => new Modifiers.SpeciesStatBoosterModifier(type, (args[0] as Pokemon).id, item.stats, item.multiplier, item.species)); + super(`modifierType:SpeciesBoosterItem.${key}`, key.toLowerCase(), (type, args) => new SpeciesStatBoosterModifier(type, (args[0] as Pokemon).id, item.stats, item.multiplier, item.species)); this.key = key; } @@ -594,12 +591,12 @@ export class SpeciesStatBoosterModifierType extends PokemonHeldItemModifierType export class PokemonLevelIncrementModifierType extends PokemonModifierType { constructor(localeKey: string, iconImage: string) { - super(localeKey, iconImage, (_type, args) => new Modifiers.PokemonLevelIncrementModifier(this, (args[0] as PlayerPokemon).id), (_pokemon: PlayerPokemon) => null); + super(localeKey, iconImage, (_type, args) => new PokemonLevelIncrementModifier(this, (args[0] as PlayerPokemon).id), (_pokemon: PlayerPokemon) => null); } getDescription(scene: BattleScene): string { let levels = 1; - const hasCandyJar = scene.modifiers.find(modifier => modifier instanceof Modifiers.LevelIncrementBoosterModifier); + const hasCandyJar = scene.modifiers.find(modifier => modifier instanceof LevelIncrementBoosterModifier); if (hasCandyJar) { levels += hasCandyJar.stackCount; } @@ -609,12 +606,12 @@ export class PokemonLevelIncrementModifierType extends PokemonModifierType { export class AllPokemonLevelIncrementModifierType extends ModifierType { constructor(localeKey: string, iconImage: string) { - super(localeKey, iconImage, (_type, _args) => new Modifiers.PokemonLevelIncrementModifier(this, -1)); + super(localeKey, iconImage, (_type, _args) => new PokemonLevelIncrementModifier(this, -1)); } getDescription(scene: BattleScene): string { let levels = 1; - const hasCandyJar = scene.modifiers.find(modifier => modifier instanceof Modifiers.LevelIncrementBoosterModifier); + const hasCandyJar = scene.modifiers.find(modifier => modifier instanceof LevelIncrementBoosterModifier); if (hasCandyJar) { levels += hasCandyJar.stackCount; } @@ -628,7 +625,7 @@ export class BaseStatBoosterModifierType extends PokemonHeldItemModifierType imp constructor(stat: PermanentStat) { const key = BaseStatBoosterModifierTypeGenerator.items[stat]; - super("", key, (_type, args) => new Modifiers.BaseStatModifier(this, (args[0] as Pokemon).id, this.stat)); + super("", key, (_type, args) => new BaseStatModifier(this, (args[0] as Pokemon).id, this.stat)); this.stat = stat; this.key = key; @@ -654,7 +651,7 @@ export class PokemonBaseStatTotalModifierType extends PokemonHeldItemModifierTyp private readonly statModifier: integer; constructor(statModifier: integer) { - super("modifierType:ModifierType.MYSTERY_ENCOUNTER_SHUCKLE_JUICE", "berry_juice", (_type, args) => new Modifiers.PokemonBaseStatTotalModifier(this, (args[0] as Pokemon).id, this.statModifier)); + super("modifierType:ModifierType.MYSTERY_ENCOUNTER_SHUCKLE_JUICE", "berry_juice", (_type, args) => new PokemonBaseStatTotalModifier(this, (args[0] as Pokemon).id, this.statModifier)); this.statModifier = statModifier; } @@ -679,7 +676,7 @@ export class PokemonBaseStatFlatModifierType extends PokemonHeldItemModifierType private readonly stats: Stat[]; constructor(statModifier: integer, stats: Stat[]) { - super("modifierType:ModifierType.MYSTERY_ENCOUNTER_OLD_GATEAU", "old_gateau", (_type, args) => new Modifiers.PokemonBaseStatFlatModifier(this, (args[0] as Pokemon).id, this.statModifier, this.stats)); + super("modifierType:ModifierType.MYSTERY_ENCOUNTER_OLD_GATEAU", "old_gateau", (_type, args) => new PokemonBaseStatFlatModifier(this, (args[0] as Pokemon).id, this.statModifier, this.stats)); this.statModifier = statModifier; this.stats = stats; } @@ -700,7 +697,7 @@ class AllPokemonFullHpRestoreModifierType extends ModifierType { private descriptionKey: string; constructor(localeKey: string, iconImage: string, descriptionKey?: string, newModifierFunc?: NewModifierFunc) { - super(localeKey, iconImage, newModifierFunc || ((_type, _args) => new Modifiers.PokemonHpRestoreModifier(this, -1, 0, 100, false))); + super(localeKey, iconImage, newModifierFunc || ((_type, _args) => new PokemonHpRestoreModifier(this, -1, 0, 100, false))); this.descriptionKey = descriptionKey!; // TODO: is this bang correct? } @@ -712,7 +709,7 @@ class AllPokemonFullHpRestoreModifierType extends ModifierType { class AllPokemonFullReviveModifierType extends AllPokemonFullHpRestoreModifierType { constructor(localeKey: string, iconImage: string) { - super(localeKey, iconImage, "modifierType:ModifierType.AllPokemonFullReviveModifierType", (_type, _args) => new Modifiers.PokemonHpRestoreModifier(this, -1, 0, 100, false, true)); + super(localeKey, iconImage, "modifierType:ModifierType.AllPokemonFullReviveModifierType", (_type, _args) => new PokemonHpRestoreModifier(this, -1, 0, 100, false, true)); } } @@ -721,16 +718,16 @@ export class MoneyRewardModifierType extends ModifierType { private moneyMultiplierDescriptorKey: string; constructor(localeKey: string, iconImage: string, moneyMultiplier: number, moneyMultiplierDescriptorKey: string) { - super(localeKey, iconImage, (_type, _args) => new Modifiers.MoneyRewardModifier(this, moneyMultiplier), "money", "se/buy"); + super(localeKey, iconImage, (_type, _args) => new MoneyRewardModifier(this, moneyMultiplier), "money", "se/buy"); this.moneyMultiplier = moneyMultiplier; this.moneyMultiplierDescriptorKey = moneyMultiplierDescriptorKey; } getDescription(scene: BattleScene): string { - const moneyAmount = new Utils.IntegerHolder(scene.getWaveMoneyAmount(this.moneyMultiplier)); + const moneyAmount = new IntegerHolder(scene.getWaveMoneyAmount(this.moneyMultiplier)); scene.applyModifiers(MoneyMultiplierModifier, true, moneyAmount); - const formattedMoney = Utils.formatMoney(scene.moneyFormat, moneyAmount.value); + const formattedMoney = formatMoney(scene.moneyFormat, moneyAmount.value); return i18next.t("modifierType:ModifierType.MoneyRewardModifierType.description", { moneyMultiplier: i18next.t(this.moneyMultiplierDescriptorKey as any), @@ -743,7 +740,7 @@ export class ExpBoosterModifierType extends ModifierType { private boostPercent: integer; constructor(localeKey: string, iconImage: string, boostPercent: integer) { - super(localeKey, iconImage, () => new Modifiers.ExpBoosterModifier(this, boostPercent)); + super(localeKey, iconImage, () => new ExpBoosterModifier(this, boostPercent)); this.boostPercent = boostPercent; } @@ -757,7 +754,7 @@ export class PokemonExpBoosterModifierType extends PokemonHeldItemModifierType { private boostPercent: integer; constructor(localeKey: string, iconImage: string, boostPercent: integer) { - super(localeKey, iconImage, (_type, args) => new Modifiers.PokemonExpBoosterModifier(this, (args[0] as Pokemon).id, boostPercent)); + super(localeKey, iconImage, (_type, args) => new PokemonExpBoosterModifier(this, (args[0] as Pokemon).id, boostPercent)); this.boostPercent = boostPercent; } @@ -769,7 +766,7 @@ export class PokemonExpBoosterModifierType extends PokemonHeldItemModifierType { export class PokemonFriendshipBoosterModifierType extends PokemonHeldItemModifierType { constructor(localeKey: string, iconImage: string) { - super(localeKey, iconImage, (_type, args) => new Modifiers.PokemonFriendshipBoosterModifier(this, (args[0] as Pokemon).id)); + super(localeKey, iconImage, (_type, args) => new PokemonFriendshipBoosterModifier(this, (args[0] as Pokemon).id)); } getDescription(scene: BattleScene): string { @@ -781,7 +778,7 @@ export class PokemonMoveAccuracyBoosterModifierType extends PokemonHeldItemModif private amount: integer; constructor(localeKey: string, iconImage: string, amount: integer, group?: string, soundName?: string) { - super(localeKey, iconImage, (_type, args) => new Modifiers.PokemonMoveAccuracyBoosterModifier(this, (args[0] as Pokemon).id, amount), group, soundName); + super(localeKey, iconImage, (_type, args) => new PokemonMoveAccuracyBoosterModifier(this, (args[0] as Pokemon).id, amount), group, soundName); this.amount = amount; } @@ -793,7 +790,7 @@ export class PokemonMoveAccuracyBoosterModifierType extends PokemonHeldItemModif export class PokemonMultiHitModifierType extends PokemonHeldItemModifierType { constructor(localeKey: string, iconImage: string) { - super(localeKey, iconImage, (type, args) => new Modifiers.PokemonMultiHitModifier(type as PokemonMultiHitModifierType, (args[0] as Pokemon).id)); + super(localeKey, iconImage, (type, args) => new PokemonMultiHitModifier(type as PokemonMultiHitModifierType, (args[0] as Pokemon).id)); } getDescription(scene: BattleScene): string { @@ -805,7 +802,7 @@ export class TmModifierType extends PokemonModifierType { public moveId: Moves; constructor(moveId: Moves) { - super("", `tm_${Type[allMoves[moveId].type].toLowerCase()}`, (_type, args) => new Modifiers.TmModifier(this, (args[0] as PlayerPokemon).id), + super("", `tm_${Type[allMoves[moveId].type].toLowerCase()}`, (_type, args) => new TmModifier(this, (args[0] as PlayerPokemon).id), (pokemon: PlayerPokemon) => { if (pokemon.compatibleTms.indexOf(moveId) === -1 || pokemon.getMoveset().filter(m => m?.moveId === moveId).length) { return PartyUiHandler.NoEffectMessage; @@ -818,7 +815,7 @@ export class TmModifierType extends PokemonModifierType { get name(): string { return i18next.t("modifierType:ModifierType.TmModifierType.name", { - moveId: Utils.padInt(Object.keys(tmSpecies).indexOf(this.moveId.toString()) + 1, 3), + moveId: padInt(Object.keys(tmSpecies).indexOf(this.moveId.toString()) + 1, 3), moveName: allMoves[this.moveId].name, }); } @@ -832,7 +829,7 @@ export class EvolutionItemModifierType extends PokemonModifierType implements Ge public evolutionItem: EvolutionItem; constructor(evolutionItem: EvolutionItem) { - super("", EvolutionItem[evolutionItem].toLowerCase(), (_type, args) => new Modifiers.EvolutionItemModifier(this, (args[0] as PlayerPokemon).id), + super("", EvolutionItem[evolutionItem].toLowerCase(), (_type, args) => new EvolutionItemModifier(this, (args[0] as PlayerPokemon).id), (pokemon: PlayerPokemon) => { if (pokemonEvolutions.hasOwnProperty(pokemon.species.speciesId) && pokemonEvolutions[pokemon.species.speciesId].filter(e => e.item === this.evolutionItem && (!e.condition || e.condition.predicate(pokemon)) && (e.preFormKey === null || e.preFormKey === pokemon.getFormKey())).length && (pokemon.getFormKey() !== SpeciesFormKey.GIGANTAMAX)) { @@ -868,7 +865,7 @@ export class FormChangeItemModifierType extends PokemonModifierType implements G public formChangeItem: FormChangeItem; constructor(formChangeItem: FormChangeItem) { - super("", FormChangeItem[formChangeItem].toLowerCase(), (_type, args) => new Modifiers.PokemonFormChangeItemModifier(this, (args[0] as PlayerPokemon).id, formChangeItem, true), + super("", FormChangeItem[formChangeItem].toLowerCase(), (_type, args) => new PokemonFormChangeItemModifier(this, (args[0] as PlayerPokemon).id, formChangeItem, true), (pokemon: PlayerPokemon) => { // Make sure the Pokemon has alternate forms if (pokemonFormChanges.hasOwnProperty(pokemon.species.speciesId) @@ -902,7 +899,7 @@ export class FormChangeItemModifierType extends PokemonModifierType implements G export class FusePokemonModifierType extends PokemonModifierType { constructor(localeKey: string, iconImage: string) { - super(localeKey, iconImage, (_type, args) => new Modifiers.FusePokemonModifier(this, (args[0] as PlayerPokemon).id, (args[1] as PlayerPokemon).id), + super(localeKey, iconImage, (_type, args) => new FusePokemonModifier(this, (args[0] as PlayerPokemon).id, (args[1] as PlayerPokemon).id), (pokemon: PlayerPokemon) => { if (pokemon.isFusion()) { return PartyUiHandler.NoEffectMessage; @@ -949,7 +946,7 @@ class AttackTypeBoosterModifierTypeGenerator extends ModifierTypeGenerator { let type: Type; - const randInt = Utils.randSeedInt(totalWeight); + const randInt = randSeedInt(totalWeight); let weight = 0; for (const t of attackMoveTypeWeights.keys()) { @@ -981,7 +978,7 @@ class BaseStatBoosterModifierTypeGenerator extends ModifierTypeGenerator { if (pregenArgs) { return new BaseStatBoosterModifierType(pregenArgs[0]); } - const randStat: PermanentStat = Utils.randSeedInt(Stat.SPD + 1); + const randStat: PermanentStat = randSeedInt(Stat.SPD + 1); return new BaseStatBoosterModifierType(randStat); }); } @@ -1002,7 +999,7 @@ class TempStatStageBoosterModifierTypeGenerator extends ModifierTypeGenerator { if (pregenArgs && (pregenArgs.length === 1) && TEMP_BATTLE_STATS.includes(pregenArgs[0])) { return new TempStatStageBoosterModifierType(pregenArgs[0]); } - const randStat: TempBattleStat = Utils.randSeedInt(Stat.ACC, Stat.ATK); + const randStat: TempBattleStat = randSeedInt(Stat.ACC, Stat.ATK); return new TempStatStageBoosterModifierType(randStat); }); } @@ -1044,8 +1041,8 @@ class SpeciesStatBoosterModifierTypeGenerator extends ModifierTypeGenerator { const checkedStats = values[i].stats; // If party member already has the item being weighted currently, skip to the next item - const hasItem = p.getHeldItems().some(m => m instanceof Modifiers.SpeciesStatBoosterModifier - && (m as Modifiers.SpeciesStatBoosterModifier).contains(checkedSpecies[0], checkedStats[0])); + const hasItem = p.getHeldItems().some(m => m instanceof SpeciesStatBoosterModifier + && (m as SpeciesStatBoosterModifier).contains(checkedSpecies[0], checkedStats[0])); if (!hasItem) { if (checkedSpecies.includes(speciesId) || (!!fusionSpeciesId && checkedSpecies.includes(fusionSpeciesId))) { @@ -1065,7 +1062,7 @@ class SpeciesStatBoosterModifierTypeGenerator extends ModifierTypeGenerator { } if (totalWeight !== 0) { - const randInt = Utils.randSeedInt(totalWeight, 1); + const randInt = randSeedInt(totalWeight, 1); let weight = 0; for (const i in weights) { @@ -1095,7 +1092,7 @@ class TmModifierTypeGenerator extends ModifierTypeGenerator { if (!tierUniqueCompatibleTms.length) { return null; } - const randTmIndex = Utils.randSeedInt(tierUniqueCompatibleTms.length); + const randTmIndex = randSeedInt(tierUniqueCompatibleTms.length); return new TmModifierType(tierUniqueCompatibleTms[randTmIndex]); }); } @@ -1123,7 +1120,7 @@ class EvolutionItemModifierTypeGenerator extends ModifierTypeGenerator { return null; } - return new EvolutionItemModifierType(evolutionItemPool[Utils.randSeedInt(evolutionItemPool.length)]!); // TODO: is the bang correct? + return new EvolutionItemModifierType(evolutionItemPool[randSeedInt(evolutionItemPool.length)]!); // TODO: is the bang correct? }); } } @@ -1137,12 +1134,12 @@ class FormChangeItemModifierTypeGenerator extends ModifierTypeGenerator { const formChangeItemPool = [...new Set(party.filter(p => pokemonFormChanges.hasOwnProperty(p.species.speciesId)).map(p => { const formChanges = pokemonFormChanges[p.species.speciesId]; - let formChangeItemTriggers = formChanges.filter(fc => ((fc.formKey.indexOf(SpeciesFormKey.MEGA) === -1 && fc.formKey.indexOf(SpeciesFormKey.PRIMAL) === -1) || party[0].scene.getModifiers(Modifiers.MegaEvolutionAccessModifier).length) - && ((fc.formKey.indexOf(SpeciesFormKey.GIGANTAMAX) === -1 && fc.formKey.indexOf(SpeciesFormKey.ETERNAMAX) === -1) || party[0].scene.getModifiers(Modifiers.GigantamaxAccessModifier).length) + let formChangeItemTriggers = formChanges.filter(fc => ((fc.formKey.indexOf(SpeciesFormKey.MEGA) === -1 && fc.formKey.indexOf(SpeciesFormKey.PRIMAL) === -1) || party[0].scene.getModifiers(MegaEvolutionAccessModifier).length) + && ((fc.formKey.indexOf(SpeciesFormKey.GIGANTAMAX) === -1 && fc.formKey.indexOf(SpeciesFormKey.ETERNAMAX) === -1) || party[0].scene.getModifiers(GigantamaxAccessModifier).length) && (!fc.conditions.length || fc.conditions.filter(cond => cond instanceof SpeciesFormChangeCondition && cond.predicate(p)).length) && (fc.preFormKey === p.getFormKey())) .map(fc => fc.findTrigger(SpeciesFormChangeItemTrigger) as SpeciesFormChangeItemTrigger) - .filter(t => t && t.active && !p.scene.findModifier(m => m instanceof Modifiers.PokemonFormChangeItemModifier && m.pokemonId === p.id && m.formChangeItem === t.item)); + .filter(t => t && t.active && !p.scene.findModifier(m => m instanceof PokemonFormChangeItemModifier && m.pokemonId === p.id && m.formChangeItem === t.item)); if (p.species.speciesId === Species.NECROZMA) { // technically we could use a simplified version and check for formChanges.length > 3, but in case any code changes later, this might break... @@ -1177,7 +1174,7 @@ class FormChangeItemModifierTypeGenerator extends ModifierTypeGenerator { return null; } - return new FormChangeItemModifierType(formChangeItemPool[Utils.randSeedInt(formChangeItemPool.length)]); + return new FormChangeItemModifierType(formChangeItemPool[randSeedInt(formChangeItemPool.length)]); }); } } @@ -1186,7 +1183,7 @@ export class TerastallizeModifierType extends PokemonHeldItemModifierType implem private teraType: Type; constructor(teraType: Type) { - super("", `${Type[teraType].toLowerCase()}_tera_shard`, (type, args) => new Modifiers.TerastallizeModifier(type as TerastallizeModifierType, (args[0] as Pokemon).id, teraType), "tera_shard"); + super("", `${Type[teraType].toLowerCase()}_tera_shard`, (type, args) => new TerastallizeModifier(type as TerastallizeModifierType, (args[0] as Pokemon).id, teraType), "tera_shard"); this.teraType = teraType; } @@ -1208,7 +1205,7 @@ export class ContactHeldItemTransferChanceModifierType extends PokemonHeldItemMo private chancePercent: integer; constructor(localeKey: string, iconImage: string, chancePercent: integer, group?: string, soundName?: string) { - super(localeKey, iconImage, (type, args) => new Modifiers.ContactHeldItemTransferChanceModifier(type, (args[0] as Pokemon).id, chancePercent), group, soundName); + super(localeKey, iconImage, (type, args) => new ContactHeldItemTransferChanceModifier(type, (args[0] as Pokemon).id, chancePercent), group, soundName); this.chancePercent = chancePercent; } @@ -1220,7 +1217,7 @@ export class ContactHeldItemTransferChanceModifierType extends PokemonHeldItemMo export class TurnHeldItemTransferModifierType extends PokemonHeldItemModifierType { constructor(localeKey: string, iconImage: string, group?: string, soundName?: string) { - super(localeKey, iconImage, (type, args) => new Modifiers.TurnHeldItemTransferModifier(type, (args[0] as Pokemon).id), group, soundName); + super(localeKey, iconImage, (type, args) => new TurnHeldItemTransferModifier(type, (args[0] as Pokemon).id), group, soundName); } getDescription(scene: BattleScene): string { @@ -1233,7 +1230,7 @@ export class EnemyAttackStatusEffectChanceModifierType extends ModifierType { private effect: StatusEffect; constructor(localeKey: string, iconImage: string, chancePercent: integer, effect: StatusEffect, stackCount?: integer) { - super(localeKey, iconImage, (type, args) => new Modifiers.EnemyAttackStatusEffectChanceModifier(type, effect, chancePercent, stackCount), "enemy_status_chance"); + super(localeKey, iconImage, (type, args) => new EnemyAttackStatusEffectChanceModifier(type, effect, chancePercent, stackCount), "enemy_status_chance"); this.chancePercent = chancePercent; this.effect = effect; @@ -1251,7 +1248,7 @@ export class EnemyEndureChanceModifierType extends ModifierType { private chancePercent: number; constructor(localeKey: string, iconImage: string, chancePercent: number) { - super(localeKey, iconImage, (type, _args) => new Modifiers.EnemyEndureChanceModifier(type, chancePercent), "enemy_endure"); + super(localeKey, iconImage, (type, _args) => new EnemyEndureChanceModifier(type, chancePercent), "enemy_endure"); this.chancePercent = chancePercent; } @@ -1298,7 +1295,7 @@ function skipInLastClassicWaveOrDefault(defaultWeight: integer) : WeightedModifi */ function lureWeightFunc(maxBattles: number, weight: number): WeightedModifierTypeWeightFunc { return (party: Pokemon[]) => { - const lures = party[0].scene.getModifiers(Modifiers.DoubleBattleChanceBoosterModifier); + const lures = party[0].scene.getModifiers(DoubleBattleChanceBoosterModifier); return !(party[0].scene.gameMode.isClassic && party[0].scene.currentBattle.waveIndex === 199) && (lures.length === 0 || lures.filter(m => m.getMaxBattles() === maxBattles && m.getBattleCount() >= maxBattles * 0.6).length === 0) ? weight : 0; }; } @@ -1388,13 +1385,13 @@ export const modifierTypes = { RARE_FORM_CHANGE_ITEM: () => new FormChangeItemModifierTypeGenerator(true), EVOLUTION_TRACKER_GIMMIGHOUL: () => new PokemonHeldItemModifierType("modifierType:ModifierType.EVOLUTION_TRACKER_GIMMIGHOUL", "relic_gold", - (type, args) => new Modifiers.EvoTrackerModifier(type, (args[0] as Pokemon).id, Species.GIMMIGHOUL, 10)), + (type, args) => new EvoTrackerModifier(type, (args[0] as Pokemon).id, Species.GIMMIGHOUL, 10)), - MEGA_BRACELET: () => new ModifierType("modifierType:ModifierType.MEGA_BRACELET", "mega_bracelet", (type, _args) => new Modifiers.MegaEvolutionAccessModifier(type)), - DYNAMAX_BAND: () => new ModifierType("modifierType:ModifierType.DYNAMAX_BAND", "dynamax_band", (type, _args) => new Modifiers.GigantamaxAccessModifier(type)), - TERA_ORB: () => new ModifierType("modifierType:ModifierType.TERA_ORB", "tera_orb", (type, _args) => new Modifiers.TerastallizeAccessModifier(type)), + MEGA_BRACELET: () => new ModifierType("modifierType:ModifierType.MEGA_BRACELET", "mega_bracelet", (type, _args) => new MegaEvolutionAccessModifier(type)), + DYNAMAX_BAND: () => new ModifierType("modifierType:ModifierType.DYNAMAX_BAND", "dynamax_band", (type, _args) => new GigantamaxAccessModifier(type)), + TERA_ORB: () => new ModifierType("modifierType:ModifierType.TERA_ORB", "tera_orb", (type, _args) => new TerastallizeAccessModifier(type)), - MAP: () => new ModifierType("modifierType:ModifierType.MAP", "map", (type, _args) => new Modifiers.MapModifier(type)), + MAP: () => new ModifierType("modifierType:ModifierType.MAP", "map", (type, _args) => new MapModifier(type)), POTION: () => new PokemonHpRestoreModifierType("modifierType:ModifierType.POTION", "potion", 20, 10), SUPER_POTION: () => new PokemonHpRestoreModifierType("modifierType:ModifierType.SUPER_POTION", "super_potion", 50, 25), @@ -1409,8 +1406,8 @@ export const modifierTypes = { SACRED_ASH: () => new AllPokemonFullReviveModifierType("modifierType:ModifierType.SACRED_ASH", "sacred_ash"), - REVIVER_SEED: () => new PokemonHeldItemModifierType("modifierType:ModifierType.REVIVER_SEED", "reviver_seed", (type, args) => new Modifiers.PokemonInstantReviveModifier(type, (args[0] as Pokemon).id)), - WHITE_HERB: () => new PokemonHeldItemModifierType("modifierType:ModifierType.WHITE_HERB", "white_herb", (type, args) => new Modifiers.ResetNegativeStatStageModifier(type, (args[0] as Pokemon).id)), + REVIVER_SEED: () => new PokemonHeldItemModifierType("modifierType:ModifierType.REVIVER_SEED", "reviver_seed", (type, args) => new PokemonInstantReviveModifier(type, (args[0] as Pokemon).id)), + WHITE_HERB: () => new PokemonHeldItemModifierType("modifierType:ModifierType.WHITE_HERB", "white_herb", (type, args) => new ResetNegativeStatStageModifier(type, (args[0] as Pokemon).id)), ETHER: () => new PokemonPpRestoreModifierType("modifierType:ModifierType.ETHER", "ether", 10), MAX_ETHER: () => new PokemonPpRestoreModifierType("modifierType:ModifierType.MAX_ETHER", "max_ether", -1), @@ -1440,7 +1437,7 @@ export const modifierTypes = { amount: i18next.t("modifierType:ModifierType.TempStatStageBoosterModifierType.extra.stage") }); } - }("modifierType:ModifierType.DIRE_HIT", "dire_hit", (type, _args) => new Modifiers.TempCritBoosterModifier(type, 5)), + }("modifierType:ModifierType.DIRE_HIT", "dire_hit", (type, _args) => new TempCritBoosterModifier(type, 5)), BASE_STAT_BOOSTER: () => new BaseStatBoosterModifierTypeGenerator(), @@ -1450,22 +1447,22 @@ export const modifierTypes = { if (pregenArgs && (pregenArgs.length === 1) && (pregenArgs[0] in Nature)) { return new PokemonNatureChangeModifierType(pregenArgs[0] as Nature); } - return new PokemonNatureChangeModifierType(Utils.randSeedInt(Utils.getEnumValues(Nature).length) as Nature); + return new PokemonNatureChangeModifierType(randSeedInt(getEnumValues(Nature).length) as Nature); }), TERA_SHARD: () => new ModifierTypeGenerator((party: Pokemon[], pregenArgs?: any[]) => { if (pregenArgs && (pregenArgs.length === 1) && (pregenArgs[0] in Type)) { return new TerastallizeModifierType(pregenArgs[0] as Type); } - if (!party[0].scene.getModifiers(Modifiers.TerastallizeAccessModifier).length) { + if (!party[0].scene.getModifiers(TerastallizeAccessModifier).length) { return null; } let type: Type; - if (!Utils.randSeedInt(3)) { + if (!randSeedInt(3)) { const partyMemberTypes = party.map(p => p.getTypes(false, false, true)).flat(); - type = Utils.randSeedItem(partyMemberTypes); + type = randSeedItem(partyMemberTypes); } else { - type = Utils.randSeedInt(64) ? Utils.randSeedInt(18) as Type : Type.STELLAR; + type = randSeedInt(64) ? randSeedInt(18) as Type : Type.STELLAR; } return new TerastallizeModifierType(type); }), @@ -1474,9 +1471,9 @@ export const modifierTypes = { if (pregenArgs && (pregenArgs.length === 1) && (pregenArgs[0] in BerryType)) { return new BerryModifierType(pregenArgs[0] as BerryType); } - const berryTypes = Utils.getEnumValues(BerryType); + const berryTypes = getEnumValues(BerryType); let randBerryType: BerryType; - const rand = Utils.randSeedInt(12); + const rand = randSeedInt(12); if (rand < 2) { randBerryType = BerryType.SITRUS; } else if (rand < 4) { @@ -1484,7 +1481,7 @@ export const modifierTypes = { } else if (rand < 6) { randBerryType = BerryType.LEPPA; } else { - randBerryType = berryTypes[Utils.randSeedInt(berryTypes.length - 3) + 2]; + randBerryType = berryTypes[randSeedInt(berryTypes.length - 3) + 2]; } return new BerryModifierType(randBerryType); }), @@ -1495,10 +1492,10 @@ export const modifierTypes = { MEMORY_MUSHROOM: () => new RememberMoveModifierType("modifierType:ModifierType.MEMORY_MUSHROOM", "big_mushroom"), - EXP_SHARE: () => new ModifierType("modifierType:ModifierType.EXP_SHARE", "exp_share", (type, _args) => new Modifiers.ExpShareModifier(type)), - EXP_BALANCE: () => new ModifierType("modifierType:ModifierType.EXP_BALANCE", "exp_balance", (type, _args) => new Modifiers.ExpBalanceModifier(type)), + EXP_SHARE: () => new ModifierType("modifierType:ModifierType.EXP_SHARE", "exp_share", (type, _args) => new ExpShareModifier(type)), + EXP_BALANCE: () => new ModifierType("modifierType:ModifierType.EXP_BALANCE", "exp_balance", (type, _args) => new ExpBalanceModifier(type)), - OVAL_CHARM: () => new ModifierType("modifierType:ModifierType.OVAL_CHARM", "oval_charm", (type, _args) => new Modifiers.MultipleParticipantExpBonusModifier(type)), + OVAL_CHARM: () => new ModifierType("modifierType:ModifierType.OVAL_CHARM", "oval_charm", (type, _args) => new MultipleParticipantExpBonusModifier(type)), EXP_CHARM: () => new ExpBoosterModifierType("modifierType:ModifierType.EXP_CHARM", "exp_charm", 25), SUPER_EXP_CHARM: () => new ExpBoosterModifierType("modifierType:ModifierType.SUPER_EXP_CHARM", "super_exp_charm", 60), @@ -1509,51 +1506,51 @@ export const modifierTypes = { SOOTHE_BELL: () => new PokemonFriendshipBoosterModifierType("modifierType:ModifierType.SOOTHE_BELL", "soothe_bell"), - SCOPE_LENS: () => new PokemonHeldItemModifierType("modifierType:ModifierType.SCOPE_LENS", "scope_lens", (type, args) => new Modifiers.CritBoosterModifier(type, (args[0] as Pokemon).id, 1)), - LEEK: () => new PokemonHeldItemModifierType("modifierType:ModifierType.LEEK", "leek", (type, args) => new Modifiers.SpeciesCritBoosterModifier(type, (args[0] as Pokemon).id, 2, [Species.FARFETCHD, Species.GALAR_FARFETCHD, Species.SIRFETCHD])), + SCOPE_LENS: () => new PokemonHeldItemModifierType("modifierType:ModifierType.SCOPE_LENS", "scope_lens", (type, args) => new CritBoosterModifier(type, (args[0] as Pokemon).id, 1)), + LEEK: () => new PokemonHeldItemModifierType("modifierType:ModifierType.LEEK", "leek", (type, args) => new SpeciesCritBoosterModifier(type, (args[0] as Pokemon).id, 2, [Species.FARFETCHD, Species.GALAR_FARFETCHD, Species.SIRFETCHD])), - EVIOLITE: () => new PokemonHeldItemModifierType("modifierType:ModifierType.EVIOLITE", "eviolite", (type, args) => new Modifiers.EvolutionStatBoosterModifier(type, (args[0] as Pokemon).id, [Stat.DEF, Stat.SPDEF], 1.5)), + EVIOLITE: () => new PokemonHeldItemModifierType("modifierType:ModifierType.EVIOLITE", "eviolite", (type, args) => new EvolutionStatBoosterModifier(type, (args[0] as Pokemon).id, [Stat.DEF, Stat.SPDEF], 1.5)), - SOUL_DEW: () => new PokemonHeldItemModifierType("modifierType:ModifierType.SOUL_DEW", "soul_dew", (type, args) => new Modifiers.PokemonNatureWeightModifier(type, (args[0] as Pokemon).id)), + SOUL_DEW: () => new PokemonHeldItemModifierType("modifierType:ModifierType.SOUL_DEW", "soul_dew", (type, args) => new PokemonNatureWeightModifier(type, (args[0] as Pokemon).id)), NUGGET: () => new MoneyRewardModifierType("modifierType:ModifierType.NUGGET", "nugget", 1, "modifierType:ModifierType.MoneyRewardModifierType.extra.small"), BIG_NUGGET: () => new MoneyRewardModifierType("modifierType:ModifierType.BIG_NUGGET", "big_nugget", 2.5, "modifierType:ModifierType.MoneyRewardModifierType.extra.moderate"), RELIC_GOLD: () => new MoneyRewardModifierType("modifierType:ModifierType.RELIC_GOLD", "relic_gold", 10, "modifierType:ModifierType.MoneyRewardModifierType.extra.large"), - AMULET_COIN: () => new ModifierType("modifierType:ModifierType.AMULET_COIN", "amulet_coin", (type, _args) => new Modifiers.MoneyMultiplierModifier(type)), - GOLDEN_PUNCH: () => new PokemonHeldItemModifierType("modifierType:ModifierType.GOLDEN_PUNCH", "golden_punch", (type, args) => new Modifiers.DamageMoneyRewardModifier(type, (args[0] as Pokemon).id)), - COIN_CASE: () => new ModifierType("modifierType:ModifierType.COIN_CASE", "coin_case", (type, _args) => new Modifiers.MoneyInterestModifier(type)), + AMULET_COIN: () => new ModifierType("modifierType:ModifierType.AMULET_COIN", "amulet_coin", (type, _args) => new MoneyMultiplierModifier(type)), + GOLDEN_PUNCH: () => new PokemonHeldItemModifierType("modifierType:ModifierType.GOLDEN_PUNCH", "golden_punch", (type, args) => new DamageMoneyRewardModifier(type, (args[0] as Pokemon).id)), + COIN_CASE: () => new ModifierType("modifierType:ModifierType.COIN_CASE", "coin_case", (type, _args) => new MoneyInterestModifier(type)), - LOCK_CAPSULE: () => new ModifierType("modifierType:ModifierType.LOCK_CAPSULE", "lock_capsule", (type, _args) => new Modifiers.LockModifierTiersModifier(type)), + LOCK_CAPSULE: () => new ModifierType("modifierType:ModifierType.LOCK_CAPSULE", "lock_capsule", (type, _args) => new LockModifierTiersModifier(type)), GRIP_CLAW: () => new ContactHeldItemTransferChanceModifierType("modifierType:ModifierType.GRIP_CLAW", "grip_claw", 10), WIDE_LENS: () => new PokemonMoveAccuracyBoosterModifierType("modifierType:ModifierType.WIDE_LENS", "wide_lens", 5), MULTI_LENS: () => new PokemonMultiHitModifierType("modifierType:ModifierType.MULTI_LENS", "zoom_lens"), - HEALING_CHARM: () => new ModifierType("modifierType:ModifierType.HEALING_CHARM", "healing_charm", (type, _args) => new Modifiers.HealingBoosterModifier(type, 1.1)), - CANDY_JAR: () => new ModifierType("modifierType:ModifierType.CANDY_JAR", "candy_jar", (type, _args) => new Modifiers.LevelIncrementBoosterModifier(type)), + HEALING_CHARM: () => new ModifierType("modifierType:ModifierType.HEALING_CHARM", "healing_charm", (type, _args) => new HealingBoosterModifier(type, 1.1)), + CANDY_JAR: () => new ModifierType("modifierType:ModifierType.CANDY_JAR", "candy_jar", (type, _args) => new LevelIncrementBoosterModifier(type)), - BERRY_POUCH: () => new ModifierType("modifierType:ModifierType.BERRY_POUCH", "berry_pouch", (type, _args) => new Modifiers.PreserveBerryModifier(type)), + BERRY_POUCH: () => new ModifierType("modifierType:ModifierType.BERRY_POUCH", "berry_pouch", (type, _args) => new PreserveBerryModifier(type)), - FOCUS_BAND: () => new PokemonHeldItemModifierType("modifierType:ModifierType.FOCUS_BAND", "focus_band", (type, args) => new Modifiers.SurviveDamageModifier(type, (args[0] as Pokemon).id)), + FOCUS_BAND: () => new PokemonHeldItemModifierType("modifierType:ModifierType.FOCUS_BAND", "focus_band", (type, args) => new SurviveDamageModifier(type, (args[0] as Pokemon).id)), - QUICK_CLAW: () => new PokemonHeldItemModifierType("modifierType:ModifierType.QUICK_CLAW", "quick_claw", (type, args) => new Modifiers.BypassSpeedChanceModifier(type, (args[0] as Pokemon).id)), + QUICK_CLAW: () => new PokemonHeldItemModifierType("modifierType:ModifierType.QUICK_CLAW", "quick_claw", (type, args) => new BypassSpeedChanceModifier(type, (args[0] as Pokemon).id)), - KINGS_ROCK: () => new PokemonHeldItemModifierType("modifierType:ModifierType.KINGS_ROCK", "kings_rock", (type, args) => new Modifiers.FlinchChanceModifier(type, (args[0] as Pokemon).id)), + KINGS_ROCK: () => new PokemonHeldItemModifierType("modifierType:ModifierType.KINGS_ROCK", "kings_rock", (type, args) => new FlinchChanceModifier(type, (args[0] as Pokemon).id)), - LEFTOVERS: () => new PokemonHeldItemModifierType("modifierType:ModifierType.LEFTOVERS", "leftovers", (type, args) => new Modifiers.TurnHealModifier(type, (args[0] as Pokemon).id)), - SHELL_BELL: () => new PokemonHeldItemModifierType("modifierType:ModifierType.SHELL_BELL", "shell_bell", (type, args) => new Modifiers.HitHealModifier(type, (args[0] as Pokemon).id)), + LEFTOVERS: () => new PokemonHeldItemModifierType("modifierType:ModifierType.LEFTOVERS", "leftovers", (type, args) => new TurnHealModifier(type, (args[0] as Pokemon).id)), + SHELL_BELL: () => new PokemonHeldItemModifierType("modifierType:ModifierType.SHELL_BELL", "shell_bell", (type, args) => new HitHealModifier(type, (args[0] as Pokemon).id)), - TOXIC_ORB: () => new PokemonHeldItemModifierType("modifierType:ModifierType.TOXIC_ORB", "toxic_orb", (type, args) => new Modifiers.TurnStatusEffectModifier(type, (args[0] as Pokemon).id)), - FLAME_ORB: () => new PokemonHeldItemModifierType("modifierType:ModifierType.FLAME_ORB", "flame_orb", (type, args) => new Modifiers.TurnStatusEffectModifier(type, (args[0] as Pokemon).id)), + TOXIC_ORB: () => new PokemonHeldItemModifierType("modifierType:ModifierType.TOXIC_ORB", "toxic_orb", (type, args) => new TurnStatusEffectModifier(type, (args[0] as Pokemon).id)), + FLAME_ORB: () => new PokemonHeldItemModifierType("modifierType:ModifierType.FLAME_ORB", "flame_orb", (type, args) => new TurnStatusEffectModifier(type, (args[0] as Pokemon).id)), - BATON: () => new PokemonHeldItemModifierType("modifierType:ModifierType.BATON", "baton", (type, args) => new Modifiers.SwitchEffectTransferModifier(type, (args[0] as Pokemon).id)), + BATON: () => new PokemonHeldItemModifierType("modifierType:ModifierType.BATON", "baton", (type, args) => new SwitchEffectTransferModifier(type, (args[0] as Pokemon).id)), - SHINY_CHARM: () => new ModifierType("modifierType:ModifierType.SHINY_CHARM", "shiny_charm", (type, _args) => new Modifiers.ShinyRateBoosterModifier(type)), - ABILITY_CHARM: () => new ModifierType("modifierType:ModifierType.ABILITY_CHARM", "ability_charm", (type, _args) => new Modifiers.HiddenAbilityRateBoosterModifier(type)), + SHINY_CHARM: () => new ModifierType("modifierType:ModifierType.SHINY_CHARM", "shiny_charm", (type, _args) => new ShinyRateBoosterModifier(type)), + ABILITY_CHARM: () => new ModifierType("modifierType:ModifierType.ABILITY_CHARM", "ability_charm", (type, _args) => new HiddenAbilityRateBoosterModifier(type)), - IV_SCANNER: () => new ModifierType("modifierType:ModifierType.IV_SCANNER", "scanner", (type, _args) => new Modifiers.IvScannerModifier(type)), + IV_SCANNER: () => new ModifierType("modifierType:ModifierType.IV_SCANNER", "scanner", (type, _args) => new IvScannerModifier(type)), DNA_SPLICERS: () => new FusePokemonModifierType("modifierType:ModifierType.DNA_SPLICERS", "dna_splicers"), @@ -1563,39 +1560,39 @@ export const modifierTypes = { VOUCHER_PLUS: () => new AddVoucherModifierType(VoucherType.PLUS, 1), VOUCHER_PREMIUM: () => new AddVoucherModifierType(VoucherType.PREMIUM, 1), - GOLDEN_POKEBALL: () => new ModifierType("modifierType:ModifierType.GOLDEN_POKEBALL", "pb_gold", (type, _args) => new Modifiers.ExtraModifierModifier(type), undefined, "se/pb_bounce_1"), + GOLDEN_POKEBALL: () => new ModifierType("modifierType:ModifierType.GOLDEN_POKEBALL", "pb_gold", (type, _args) => new ExtraModifierModifier(type), undefined, "se/pb_bounce_1"), - ENEMY_DAMAGE_BOOSTER: () => new ModifierType("modifierType:ModifierType.ENEMY_DAMAGE_BOOSTER", "wl_item_drop", (type, _args) => new Modifiers.EnemyDamageBoosterModifier(type, 5)), - ENEMY_DAMAGE_REDUCTION: () => new ModifierType("modifierType:ModifierType.ENEMY_DAMAGE_REDUCTION", "wl_guard_spec", (type, _args) => new Modifiers.EnemyDamageReducerModifier(type, 2.5)), - //ENEMY_SUPER_EFFECT_BOOSTER: () => new ModifierType('Type Advantage Token', 'Increases damage of super effective attacks by 30%', (type, _args) => new Modifiers.EnemySuperEffectiveDamageBoosterModifier(type, 30), 'wl_custom_super_effective'), - ENEMY_HEAL: () => new ModifierType("modifierType:ModifierType.ENEMY_HEAL", "wl_potion", (type, _args) => new Modifiers.EnemyTurnHealModifier(type, 2, 10)), + ENEMY_DAMAGE_BOOSTER: () => new ModifierType("modifierType:ModifierType.ENEMY_DAMAGE_BOOSTER", "wl_item_drop", (type, _args) => new EnemyDamageBoosterModifier(type, 5)), + ENEMY_DAMAGE_REDUCTION: () => new ModifierType("modifierType:ModifierType.ENEMY_DAMAGE_REDUCTION", "wl_guard_spec", (type, _args) => new EnemyDamageReducerModifier(type, 2.5)), + //ENEMY_SUPER_EFFECT_BOOSTER: () => new ModifierType('Type Advantage Token', 'Increases damage of super effective attacks by 30%', (type, _args) => new EnemySuperEffectiveDamageBoosterModifier(type, 30), 'wl_custom_super_effective'), + ENEMY_HEAL: () => new ModifierType("modifierType:ModifierType.ENEMY_HEAL", "wl_potion", (type, _args) => new EnemyTurnHealModifier(type, 2, 10)), ENEMY_ATTACK_POISON_CHANCE: () => new EnemyAttackStatusEffectChanceModifierType("modifierType:ModifierType.ENEMY_ATTACK_POISON_CHANCE", "wl_antidote", 5, StatusEffect.POISON, 10), ENEMY_ATTACK_PARALYZE_CHANCE: () => new EnemyAttackStatusEffectChanceModifierType("modifierType:ModifierType.ENEMY_ATTACK_PARALYZE_CHANCE", "wl_paralyze_heal", 2.5, StatusEffect.PARALYSIS, 10), ENEMY_ATTACK_BURN_CHANCE: () => new EnemyAttackStatusEffectChanceModifierType("modifierType:ModifierType.ENEMY_ATTACK_BURN_CHANCE", "wl_burn_heal", 5, StatusEffect.BURN, 10), - ENEMY_STATUS_EFFECT_HEAL_CHANCE: () => new ModifierType("modifierType:ModifierType.ENEMY_STATUS_EFFECT_HEAL_CHANCE", "wl_full_heal", (type, _args) => new Modifiers.EnemyStatusEffectHealChanceModifier(type, 2.5, 10)), + ENEMY_STATUS_EFFECT_HEAL_CHANCE: () => new ModifierType("modifierType:ModifierType.ENEMY_STATUS_EFFECT_HEAL_CHANCE", "wl_full_heal", (type, _args) => new EnemyStatusEffectHealChanceModifier(type, 2.5, 10)), ENEMY_ENDURE_CHANCE: () => new EnemyEndureChanceModifierType("modifierType:ModifierType.ENEMY_ENDURE_CHANCE", "wl_reset_urge", 2), - ENEMY_FUSED_CHANCE: () => new ModifierType("modifierType:ModifierType.ENEMY_FUSED_CHANCE", "wl_custom_spliced", (type, _args) => new Modifiers.EnemyFusionChanceModifier(type, 1)), + ENEMY_FUSED_CHANCE: () => new ModifierType("modifierType:ModifierType.ENEMY_FUSED_CHANCE", "wl_custom_spliced", (type, _args) => new EnemyFusionChanceModifier(type, 1)), MYSTERY_ENCOUNTER_SHUCKLE_JUICE: () => new ModifierTypeGenerator((party: Pokemon[], pregenArgs?: any[]) => { if (pregenArgs) { return new PokemonBaseStatTotalModifierType(pregenArgs[0] as number); } - return new PokemonBaseStatTotalModifierType(Utils.randSeedInt(20)); + return new PokemonBaseStatTotalModifierType(randSeedInt(20)); }), MYSTERY_ENCOUNTER_OLD_GATEAU: () => new ModifierTypeGenerator((party: Pokemon[], pregenArgs?: any[]) => { if (pregenArgs) { return new PokemonBaseStatFlatModifierType(pregenArgs[0] as number, pregenArgs[1] as Stat[]); } - return new PokemonBaseStatFlatModifierType(Utils.randSeedInt(20), [Stat.HP, Stat.ATK, Stat.DEF]); + return new PokemonBaseStatFlatModifierType(randSeedInt(20), [Stat.HP, Stat.ATK, Stat.DEF]); }), MYSTERY_ENCOUNTER_BLACK_SLUDGE: () => new ModifierTypeGenerator((party: Pokemon[], pregenArgs?: any[]) => { if (pregenArgs) { - return new ModifierType("modifierType:ModifierType.MYSTERY_ENCOUNTER_BLACK_SLUDGE", "black_sludge", (type, _args) => new Modifiers.HealShopCostModifier(type, pregenArgs[0] as number)); + return new ModifierType("modifierType:ModifierType.MYSTERY_ENCOUNTER_BLACK_SLUDGE", "black_sludge", (type, _args) => new HealShopCostModifier(type, pregenArgs[0] as number)); } - return new ModifierType("modifierType:ModifierType.MYSTERY_ENCOUNTER_BLACK_SLUDGE", "black_sludge", (type, _args) => new Modifiers.HealShopCostModifier(type, 2.5)); + return new ModifierType("modifierType:ModifierType.MYSTERY_ENCOUNTER_BLACK_SLUDGE", "black_sludge", (type, _args) => new HealShopCostModifier(type, 2.5)); }), - MYSTERY_ENCOUNTER_MACHO_BRACE: () => new PokemonHeldItemModifierType("modifierType:ModifierType.MYSTERY_ENCOUNTER_MACHO_BRACE", "macho_brace", (type, args) => new Modifiers.PokemonIncrementingStatModifier(type, (args[0] as Pokemon).id)), - MYSTERY_ENCOUNTER_GOLDEN_BUG_NET: () => new ModifierType("modifierType:ModifierType.MYSTERY_ENCOUNTER_GOLDEN_BUG_NET", "golden_net", (type, _args) => new Modifiers.BoostBugSpawnModifier(type)), + MYSTERY_ENCOUNTER_MACHO_BRACE: () => new PokemonHeldItemModifierType("modifierType:ModifierType.MYSTERY_ENCOUNTER_MACHO_BRACE", "macho_brace", (type, args) => new PokemonIncrementingStatModifier(type, (args[0] as Pokemon).id)), + MYSTERY_ENCOUNTER_GOLDEN_BUG_NET: () => new ModifierType("modifierType:ModifierType.MYSTERY_ENCOUNTER_GOLDEN_BUG_NET", "golden_net", (type, _args) => new BoostBugSpawnModifier(type)), }; interface ModifierPool { @@ -1644,8 +1641,8 @@ const modifierPool: ModifierPool = { new WeightedModifierType(modifierTypes.PP_UP, 2), new WeightedModifierType(modifierTypes.FULL_HEAL, (party: Pokemon[]) => { const statusEffectPartyMemberCount = Math.min(party.filter(p => p.hp && !!p.status && !p.getHeldItems().some(i => { - if (i instanceof Modifiers.TurnStatusEffectModifier) { - return (i as Modifiers.TurnStatusEffectModifier).getStatusEffect() === p.status?.effect; + if (i instanceof TurnStatusEffectModifier) { + return (i as TurnStatusEffectModifier).getStatusEffect() === p.status?.effect; } return false; })).length, 3); @@ -1672,8 +1669,8 @@ const modifierPool: ModifierPool = { }, 3), new WeightedModifierType(modifierTypes.FULL_RESTORE, (party: Pokemon[]) => { const statusEffectPartyMemberCount = Math.min(party.filter(p => p.hp && !!p.status && !p.getHeldItems().some(i => { - if (i instanceof Modifiers.TurnStatusEffectModifier) { - return (i as Modifiers.TurnStatusEffectModifier).getStatusEffect() === p.status?.effect; + if (i instanceof TurnStatusEffectModifier) { + return (i as TurnStatusEffectModifier).getStatusEffect() === p.status?.effect; } return false; })).length, 3); @@ -1723,7 +1720,7 @@ const modifierPool: ModifierPool = { const { gameMode, gameData } = party[0].scene; if (gameMode.isDaily || (!gameMode.isFreshStartChallenge() && gameData.isUnlocked(Unlockables.EVIOLITE))) { return party.some(p => ((p.getSpeciesForm(true).speciesId in pokemonEvolutions) || (p.isFusion() && (p.getFusionSpeciesForm(true).speciesId in pokemonEvolutions))) - && !p.getHeldItems().some(i => i instanceof Modifiers.EvolutionStatBoosterModifier) && !p.isMax()) ? 10 : 0; + && !p.getHeldItems().some(i => i instanceof EvolutionStatBoosterModifier) && !p.isMax()) ? 10 : 0; } return 0; }), @@ -1731,7 +1728,7 @@ const modifierPool: ModifierPool = { new WeightedModifierType(modifierTypes.LEEK, (party: Pokemon[]) => { const checkedSpecies = [ Species.FARFETCHD, Species.GALAR_FARFETCHD, Species.SIRFETCHD ]; // If a party member doesn't already have a Leek and is one of the relevant species, Leek can appear - return party.some(p => !p.getHeldItems().some(i => i instanceof Modifiers.SpeciesCritBoosterModifier) + return party.some(p => !p.getHeldItems().some(i => i instanceof SpeciesCritBoosterModifier) && (checkedSpecies.includes(p.getSpeciesForm(true).speciesId) || (p.isFusion() && checkedSpecies.includes(p.getFusionSpeciesForm(true).speciesId)))) ? 12 : 0; }, 12), @@ -1739,7 +1736,7 @@ const modifierPool: ModifierPool = { const checkedAbilities = [Abilities.QUICK_FEET, Abilities.GUTS, Abilities.MARVEL_SCALE, Abilities.TOXIC_BOOST, Abilities.POISON_HEAL, Abilities.MAGIC_GUARD]; const checkedMoves = [Moves.FACADE, Moves.TRICK, Moves.FLING, Moves.SWITCHEROO, Moves.PSYCHO_SHIFT]; // If a party member doesn't already have one of these two orbs and has one of the above moves or abilities, the orb can appear - return party.some(p => !p.getHeldItems().some(i => i instanceof Modifiers.TurnStatusEffectModifier) + return party.some(p => !p.getHeldItems().some(i => i instanceof TurnStatusEffectModifier) && (checkedAbilities.some(a => p.hasAbility(a, false, true)) || p.getMoveset(true).some(m => m && checkedMoves.includes(m.moveId)))) ? 10 : 0; }, 10), @@ -1747,13 +1744,13 @@ const modifierPool: ModifierPool = { const checkedAbilities = [Abilities.QUICK_FEET, Abilities.GUTS, Abilities.MARVEL_SCALE, Abilities.FLARE_BOOST, Abilities.MAGIC_GUARD]; const checkedMoves = [Moves.FACADE, Moves.TRICK, Moves.FLING, Moves.SWITCHEROO, Moves.PSYCHO_SHIFT]; // If a party member doesn't already have one of these two orbs and has one of the above moves or abilities, the orb can appear - return party.some(p => !p.getHeldItems().some(i => i instanceof Modifiers.TurnStatusEffectModifier) + return party.some(p => !p.getHeldItems().some(i => i instanceof TurnStatusEffectModifier) && (checkedAbilities.some(a => p.hasAbility(a, false, true)) || p.getMoveset(true).some(m => m && checkedMoves.includes(m.moveId)))) ? 10 : 0; }, 10), new WeightedModifierType(modifierTypes.WHITE_HERB, (party: Pokemon[]) => { const checkedAbilities = [Abilities.WEAK_ARMOR, Abilities.CONTRARY, Abilities.MOODY, Abilities.ANGER_SHELL, Abilities.COMPETITIVE, Abilities.DEFIANT]; const weightMultiplier = party.filter( - p => !p.getHeldItems().some(i => i instanceof Modifiers.ResetNegativeStatStageModifier && i.stackCount >= i.getMaxHeldItemCount(p)) && + p => !p.getHeldItems().some(i => i instanceof ResetNegativeStatStageModifier && i.stackCount >= i.getMaxHeldItemCount(p)) && (checkedAbilities.some(a => p.hasAbility(a, false, true)) || p.getMoveset(true).some(m => m && selfStatLowerMoves.includes(m.moveId)))).length; // If a party member has one of the above moves or abilities and doesn't have max herbs, the herb will appear more frequently return 0 * (weightMultiplier ? 2 : 1) + (weightMultiplier ? weightMultiplier * 0 : 0); @@ -2246,7 +2243,7 @@ export function getPlayerShopModifierTypeOptionsForWave(waveIndex: integer, base return options.slice(0, Math.ceil(Math.max(waveIndex + 10, 0) / 30)).flat(); } -export function getEnemyBuffModifierForWave(tier: ModifierTier, enemyModifiers: Modifiers.PersistentModifier[], scene: BattleScene): Modifiers.EnemyPersistentModifier { +export function getEnemyBuffModifierForWave(tier: ModifierTier, enemyModifiers: PersistentModifier[], scene: BattleScene): EnemyPersistentModifier { let tierStackCount: number; switch (tier) { case ModifierTier.ULTRA: @@ -2263,30 +2260,30 @@ export function getEnemyBuffModifierForWave(tier: ModifierTier, enemyModifiers: const retryCount = 50; let candidate = getNewModifierTypeOption([], ModifierPoolType.ENEMY_BUFF, tier); let r = 0; - let matchingModifier: Modifiers.PersistentModifier | undefined; + let matchingModifier: PersistentModifier | undefined; while (++r < retryCount && (matchingModifier = enemyModifiers.find(m => m.type.id === candidate?.type?.id)) && matchingModifier.getMaxStackCount(scene) < matchingModifier.stackCount + (r < 10 ? tierStackCount : 1)) { candidate = getNewModifierTypeOption([], ModifierPoolType.ENEMY_BUFF, tier); } - const modifier = candidate?.type?.newModifier() as Modifiers.EnemyPersistentModifier; + const modifier = candidate?.type?.newModifier() as EnemyPersistentModifier; modifier.stackCount = tierStackCount; return modifier; } export function getEnemyModifierTypesForWave(waveIndex: integer, count: integer, party: EnemyPokemon[], poolType: ModifierPoolType.WILD | ModifierPoolType.TRAINER, upgradeChance: integer = 0): PokemonHeldItemModifierType[] { - const ret = new Array(count).fill(0).map(() => getNewModifierTypeOption(party, poolType, undefined, upgradeChance && !Utils.randSeedInt(upgradeChance) ? 1 : 0)?.type as PokemonHeldItemModifierType); + const ret = new Array(count).fill(0).map(() => getNewModifierTypeOption(party, poolType, undefined, upgradeChance && !randSeedInt(upgradeChance) ? 1 : 0)?.type as PokemonHeldItemModifierType); if (!(waveIndex % 1000)) { ret.push(getModifierType(modifierTypes.MINI_BLACK_HOLE) as PokemonHeldItemModifierType); } return ret; } -export function getDailyRunStarterModifiers(party: PlayerPokemon[]): Modifiers.PokemonHeldItemModifier[] { - const ret: Modifiers.PokemonHeldItemModifier[] = []; +export function getDailyRunStarterModifiers(party: PlayerPokemon[]): PokemonHeldItemModifier[] { + const ret: PokemonHeldItemModifier[] = []; for (const p of party) { for (let m = 0; m < 3; m++) { - const tierValue = Utils.randSeedInt(64); + const tierValue = randSeedInt(64); let tier: ModifierTier; if (tierValue > 25) { @@ -2301,7 +2298,7 @@ export function getDailyRunStarterModifiers(party: PlayerPokemon[]): Modifiers.P tier = ModifierTier.MASTER; } - const modifier = getNewModifierTypeOption(party, ModifierPoolType.DAILY_STARTER, tier)?.type?.newModifier(p) as Modifiers.PokemonHeldItemModifier; + const modifier = getNewModifierTypeOption(party, ModifierPoolType.DAILY_STARTER, tier)?.type?.newModifier(p) as PokemonHeldItemModifier; ret.push(modifier); } } @@ -2340,7 +2337,7 @@ function getNewModifierTypeOption(party: Pokemon[], poolType: ModifierPoolType, break; } if (tier === undefined) { - const tierValue = Utils.randSeedInt(1024); + const tierValue = randSeedInt(1024); if (!upgradeCount) { upgradeCount = 0; } @@ -2349,7 +2346,7 @@ function getNewModifierTypeOption(party: Pokemon[], poolType: ModifierPoolType, const upgradeOdds = Math.floor(128 / ((partyLuckValue + 4) / 4)); let upgraded = false; do { - upgraded = Utils.randSeedInt(upgradeOdds) < 4; + upgraded = randSeedInt(upgradeOdds) < 4; if (upgraded) { upgradeCount++; } @@ -2381,7 +2378,7 @@ function getNewModifierTypeOption(party: Pokemon[], poolType: ModifierPoolType, const partyShinyCount = party.filter(p => p.isShiny() && !p.isFainted()).length; const upgradeOdds = Math.floor(32 / ((partyShinyCount + 2) / 2)); while (modifierPool.hasOwnProperty(tier + upgradeCount + 1) && modifierPool[tier + upgradeCount + 1].length) { - if (!Utils.randSeedInt(upgradeOdds)) { + if (!randSeedInt(upgradeOdds)) { upgradeCount++; } else { break; @@ -2396,7 +2393,7 @@ function getNewModifierTypeOption(party: Pokemon[], poolType: ModifierPoolType, const tierThresholds = Object.keys(thresholds[tier]); const totalWeight = parseInt(tierThresholds[tierThresholds.length - 1]); - const value = Utils.randSeedInt(totalWeight); + const value = randSeedInt(totalWeight); let index: integer | undefined; for (const t of tierThresholds) { const threshold = parseInt(t); @@ -2456,9 +2453,9 @@ export class ModifierTypeOption { */ export function getPartyLuckValue(party: Pokemon[]): integer { if (party[0].scene.gameMode.isDaily) { - const DailyLuck = new Utils.NumberHolder(0); + const DailyLuck = new NumberHolder(0); party[0].scene.executeWithSeedOffset(() => { - DailyLuck.value = Utils.randSeedInt(15); // Random number between 0 and 14 + DailyLuck.value = randSeedInt(15); // Random number between 0 and 14 }, 0, party[0].scene.seed); return DailyLuck.value; } diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 4c20b454081..4f1f9833602 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -1,33 +1,35 @@ -import * as ModifierTypes from "#app/modifier/modifier-type"; -import { getModifierType, ModifierType, modifierTypes } from "#app/modifier/modifier-type"; -import BattleScene from "#app/battle-scene"; -import { getLevelTotalExp } from "#app/data/exp"; -import { MAX_PER_TYPE_POKEBALLS, PokeballType } from "#app/data/pokeball"; -import Pokemon, { PlayerPokemon } from "#app/field/pokemon"; -import { addTextObject, TextStyle } from "#app/ui/text"; -import { Type } from "#app/data/type"; -import { EvolutionPhase } from "#app/phases/evolution-phase"; +import type BattleScene from "#app/battle-scene"; import { FusionSpeciesFormEvolution, pokemonEvolutions, pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; -import { getPokemonNameWithAffix } from "#app/messages"; -import * as Utils from "#app/utils"; import { getBerryEffectFunc, getBerryPredicate } from "#app/data/berry"; -import { BattlerTagType } from "#enums/battler-tag-type"; -import { BerryType } from "#enums/berry-type"; -import { getStatusEffectHealText, StatusEffect } from "#app/data/status-effect"; -import { achvs } from "#app/system/achv"; -import { VoucherType } from "#app/system/voucher"; -import { FormChangeItem, SpeciesFormChangeItemTrigger, SpeciesFormChangeLapseTeraTrigger, SpeciesFormChangeTeraTrigger } from "#app/data/pokemon-forms"; -import { Nature } from "#app/data/nature"; -import Overrides from "#app/overrides"; -import { Command } from "#app/ui/command-ui-handler"; -import { Species } from "#enums/species"; -import { BATTLE_STATS, type PermanentStat, Stat, TEMP_BATTLE_STATS, type TempBattleStat } from "#enums/stat"; -import i18next from "i18next"; +import { getLevelTotalExp } from "#app/data/exp"; import { allMoves } from "#app/data/move"; -import { Abilities } from "#enums/abilities"; +import { MAX_PER_TYPE_POKEBALLS } from "#app/data/pokeball"; +import { type FormChangeItem, SpeciesFormChangeItemTrigger, SpeciesFormChangeLapseTeraTrigger, SpeciesFormChangeTeraTrigger } from "#app/data/pokemon-forms"; +import { getStatusEffectHealText } from "#app/data/status-effect"; +import { Type } from "#app/data/type"; +import Pokemon, { type PlayerPokemon } from "#app/field/pokemon"; +import { getPokemonNameWithAffix } from "#app/messages"; +import Overrides from "#app/overrides"; +import { EvolutionPhase } from "#app/phases/evolution-phase"; import { LearnMovePhase } from "#app/phases/learn-move-phase"; import { LevelUpPhase } from "#app/phases/level-up-phase"; import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; +import { achvs } from "#app/system/achv"; +import type { VoucherType } from "#app/system/voucher"; +import { Command } from "#app/ui/command-ui-handler"; +import { addTextObject, TextStyle } from "#app/ui/text"; +import { BooleanHolder, hslToHex, isNullOrUndefined, NumberHolder, toDmgValue } from "#app/utils"; +import { Abilities } from "#enums/abilities"; +import { BattlerTagType } from "#enums/battler-tag-type"; +import { BerryType } from "#enums/berry-type"; +import type { Nature } from "#enums/nature"; +import type { PokeballType } from "#enums/pokeball"; +import { Species } from "#enums/species"; +import { type PermanentStat, type TempBattleStat, BATTLE_STATS, Stat, TEMP_BATTLE_STATS } from "#enums/stat"; +import { StatusEffect } from "#enums/status-effect"; +import i18next from "i18next"; +import { type DoubleBattleChanceBoosterModifierType, type EvolutionItemModifierType, type FormChangeItemModifierType, type ModifierOverride, type ModifierType, type PokemonBaseStatTotalModifierType, type PokemonExpBoosterModifierType, type PokemonFriendshipBoosterModifierType, type PokemonMoveAccuracyBoosterModifierType, type PokemonMultiHitModifierType, type TerastallizeModifierType, type TmModifierType, getModifierType, ModifierPoolType, ModifierTypeGenerator, modifierTypes, PokemonHeldItemModifierType } from "./modifier-type"; +import { Color, ShadowColor } from "#enums/color"; export type ModifierPredicate = (modifier: Modifier) => boolean; @@ -84,7 +86,7 @@ export class ModifierBar extends Phaser.GameObjects.Container { const thisArg = this; - sortedVisibleIconModifiers.forEach((modifier: PersistentModifier, i: integer) => { + sortedVisibleIconModifiers.forEach((modifier: PersistentModifier, i: number) => { const icon = modifier.getIcon(this.scene as BattleScene); if (i >= iconOverflowIndex) { icon.setVisible(false); @@ -120,8 +122,8 @@ export class ModifierBar extends Phaser.GameObjects.Container { } } - setModifierIconPosition(icon: Phaser.GameObjects.Container, modifierCount: integer) { - const rowIcons: integer = 12 + 6 * Math.max((Math.ceil(Math.min(modifierCount, 24) / 12) - 2), 0); + setModifierIconPosition(icon: Phaser.GameObjects.Container, modifierCount: number) { + const rowIcons: number = 12 + 6 * Math.max((Math.ceil(Math.min(modifierCount, 24) / 12) - 2), 0); const x = (this.getIndex(icon) % rowIcons) * 26 / (rowIcons / 12); const y = Math.floor(this.getIndex(icon) / rowIcons) * 20; @@ -141,18 +143,27 @@ export abstract class Modifier { return false; } - shouldApply(_args: any[]): boolean { + /** + * Checks if {@linkcode Modifier} should be applied + * @param _args parameters passed to {@linkcode Modifier.apply} + * @returns always `true` by default + */ + shouldApply(..._args: Parameters): boolean { return true; } - abstract apply(args: any[]): boolean | Promise; + /** + * Handles applying of {@linkcode Modifier} + * @param args collection of all passed parameters + */ + abstract apply(...args: unknown[]): boolean | Promise; } export abstract class PersistentModifier extends Modifier { - public stackCount: integer; - public virtualStackCount: integer; + public stackCount: number; + public virtualStackCount: number; - constructor(type: ModifierType, stackCount?: integer) { + constructor(type: ModifierType, stackCount?: number) { super(type); this.stackCount = stackCount === undefined ? 1 : stackCount; this.virtualStackCount = 0; @@ -179,7 +190,7 @@ export abstract class PersistentModifier extends Modifier { return []; } - incrementStack(scene: BattleScene, amount: integer, virtual: boolean): boolean { + incrementStack(scene: BattleScene, amount: number, virtual: boolean): boolean { if (this.getStackCount() + amount <= this.getMaxStackCount(scene)) { if (!virtual) { this.stackCount += amount; @@ -192,11 +203,11 @@ export abstract class PersistentModifier extends Modifier { return false; } - getStackCount(): integer { + getStackCount(): number { return this.stackCount + this.virtualStackCount; } - abstract getMaxStackCount(scene: BattleScene, forThreshold?: boolean): integer; + abstract getMaxStackCount(scene: BattleScene, forThreshold?: boolean): number; isIconVisible(scene: BattleScene): boolean { return true; @@ -247,25 +258,26 @@ export abstract class ConsumableModifier extends Modifier { add(_modifiers: Modifier[]): boolean { return true; } - - shouldApply(args: any[]): boolean { - return super.shouldApply(args) && args.length === 1 && args[0] instanceof BattleScene; - } } export class AddPokeballModifier extends ConsumableModifier { private pokeballType: PokeballType; - private count: integer; + private count: number; - constructor(type: ModifierType, pokeballType: PokeballType, count: integer) { + constructor(type: ModifierType, pokeballType: PokeballType, count: number) { super(type); this.pokeballType = pokeballType; this.count = count; } - apply(args: any[]): boolean { - const pokeballCounts = (args[0] as BattleScene).pokeballCounts; + /** + * Applies {@linkcode AddPokeballModifier} + * @param battleScene {@linkcode BattleScene} + * @returns always `true` + */ + override apply(battleScene: BattleScene): boolean { + const pokeballCounts = battleScene.pokeballCounts; pokeballCounts[this.pokeballType] = Math.min(pokeballCounts[this.pokeballType] + this.count, MAX_PER_TYPE_POKEBALLS); return true; @@ -274,17 +286,22 @@ export class AddPokeballModifier extends ConsumableModifier { export class AddVoucherModifier extends ConsumableModifier { private voucherType: VoucherType; - private count: integer; + private count: number; - constructor(type: ModifierType, voucherType: VoucherType, count: integer) { + constructor(type: ModifierType, voucherType: VoucherType, count: number) { super(type); this.voucherType = voucherType; this.count = count; } - apply(args: any[]): boolean { - const voucherCounts = (args[0] as BattleScene).gameData.voucherCounts; + /** + * Applies {@linkcode AddVoucherModifier} + * @param battleScene {@linkcode BattleScene} + * @returns always `true` + */ + override apply(battleScene: BattleScene): boolean { + const voucherCounts = battleScene.gameData.voucherCounts; voucherCounts[this.voucherType] += this.count; return true; @@ -308,7 +325,7 @@ export abstract class LapsingPersistentModifier extends PersistentModifier { /** The current amount of battles the modifier will exist for */ private battleCount: number; - constructor(type: ModifierTypes.ModifierType, maxBattles: number, battleCount?: number, stackCount?: integer) { + constructor(type: ModifierType, maxBattles: number, battleCount?: number, stackCount?: number) { super(type, stackCount); this.maxBattles = maxBattles; @@ -322,7 +339,7 @@ export abstract class LapsingPersistentModifier extends PersistentModifier { * @param modifiers {@linkcode PersistentModifier} array of the player's modifiers * @param _virtual N/A * @param _scene N/A - * @returns true if the modifier was successfully added or applied, false otherwise + * @returns `true` if the modifier was successfully added or applied, false otherwise */ add(modifiers: PersistentModifier[], _virtual: boolean, scene: BattleScene): boolean { for (const modifier of modifiers) { @@ -342,7 +359,12 @@ export abstract class LapsingPersistentModifier extends PersistentModifier { return true; } - lapse(_args: any[]): boolean { + /** + * Lapses the {@linkcode battleCount} by 1. + * @param _args passed arguments (not in use here) + * @returns `true` if the {@linkcode battleCount} is greater than 0 + */ + public lapse(..._args: unknown[]): boolean { this.battleCount--; return this.battleCount > 0; } @@ -354,10 +376,13 @@ export abstract class LapsingPersistentModifier extends PersistentModifier { const hue = Math.floor(120 * (this.battleCount / this.maxBattles) + 5); // Generates the color hex code with a constant saturation and lightness but varying hue - const typeHex = Utils.hslToHex(hue, 0.50, 0.90); - const strokeHex = Utils.hslToHex(hue, 0.70, 0.30); + const typeHex = hslToHex(hue, 0.5, 0.9); + const strokeHex = hslToHex(hue, 0.7, 0.3); - const battleCountText = addTextObject(scene, 27, 0, this.battleCount.toString(), TextStyle.PARTY, { fontSize: "66px", color: typeHex }); + const battleCountText = addTextObject(scene, 27, 0, this.battleCount.toString(), TextStyle.PARTY, { + fontSize: "66px", + color: typeHex, + }); battleCountText.setShadow(0, 0); battleCountText.setStroke(strokeHex, 16); battleCountText.setOrigin(1, 0); @@ -383,7 +408,7 @@ export abstract class LapsingPersistentModifier extends PersistentModifier { } getArgs(): any[] { - return [ this.maxBattles, this.battleCount ]; + return [this.maxBattles, this.battleCount]; } getMaxStackCount(_scene: BattleScene, _forThreshold?: boolean): number { @@ -399,7 +424,9 @@ export abstract class LapsingPersistentModifier extends PersistentModifier { * @see {@linkcode apply} */ export class DoubleBattleChanceBoosterModifier extends LapsingPersistentModifier { - constructor(type: ModifierType, maxBattles:number, battleCount?: number, stackCount?: integer) { + public override type: DoubleBattleChanceBoosterModifierType; + + constructor(type: ModifierType, maxBattles:number, battleCount?: number, stackCount?: number) { super(type, maxBattles, battleCount, stackCount); } @@ -408,17 +435,16 @@ export class DoubleBattleChanceBoosterModifier extends LapsingPersistentModifier } clone(): DoubleBattleChanceBoosterModifier { - return new DoubleBattleChanceBoosterModifier(this.type as ModifierTypes.DoubleBattleChanceBoosterModifierType, this.getMaxBattles(), this.getBattleCount(), this.stackCount); + return new DoubleBattleChanceBoosterModifier(this.type, this.getMaxBattles(), this.getBattleCount(), this.stackCount); } /** * Increases the chance of a double battle occurring - * @param args [0] {@linkcode Utils.NumberHolder} for double battle chance - * @returns true if the modifier was applied + * @param doubleBattleChance {@linkcode NumberHolder} for double battle chance + * @returns true */ - apply(args: any[]): boolean { - const doubleBattleChance = args[0] as Utils.NumberHolder; - // This is divided because the chance is generated as a number from 0 to doubleBattleChance.value using Utils.randSeedInt + override apply(doubleBattleChance: NumberHolder): boolean { + // This is divided because the chance is generated as a number from 0 to doubleBattleChance.value using randSeedInt // A double battle will initiate if the generated number is 0 doubleBattleChance.value = doubleBattleChance.value / 4; @@ -467,21 +493,21 @@ export class TempStatStageBoosterModifier extends LapsingPersistentModifier { /** * Checks if {@linkcode args} contains the necessary elements and if the * incoming stat is matches {@linkcode stat}. - * @param args [0] {@linkcode TempBattleStat} being checked at the time - * [1] {@linkcode Utils.NumberHolder} N/A - * @returns true if the modifier can be applied, false otherwise + * @param tempBattleStat {@linkcode TempBattleStat} being affected + * @param statLevel {@linkcode NumberHolder} that holds the resulting value of the stat stage multiplier + * @returns `true` if the modifier can be applied, false otherwise */ - shouldApply(args: any[]): boolean { - return args && (args.length === 2) && TEMP_BATTLE_STATS.includes(args[0]) && (args[0] === this.stat) && (args[1] instanceof Utils.NumberHolder); + override shouldApply(tempBattleStat?: TempBattleStat, statLevel?: NumberHolder): boolean { + return !!tempBattleStat && !!statLevel && TEMP_BATTLE_STATS.includes(tempBattleStat) && (tempBattleStat === this.stat); } /** * Increases the incoming stat stage matching {@linkcode stat} by {@linkcode boost}. - * @param args [0] {@linkcode TempBattleStat} N/A - * [1] {@linkcode Utils.NumberHolder} that holds the resulting value of the stat stage multiplier + * @param _tempBattleStat {@linkcode TempBattleStat} N/A + * @param statLevel {@linkcode NumberHolder} that holds the resulting value of the stat stage multiplier */ - apply(args: any[]): boolean { - (args[1] as Utils.NumberHolder).value += this.boost; + override apply(_tempBattleStat: TempBattleStat, statLevel: NumberHolder): boolean { + statLevel.value += this.boost; return true; } } @@ -507,26 +533,26 @@ export class TempCritBoosterModifier extends LapsingPersistentModifier { /** * Checks if {@linkcode args} contains the necessary elements. - * @param args [1] {@linkcode Utils.NumberHolder} N/A - * @returns true if the critical-hit stage boost applies successfully + * @param critLevel {@linkcode NumberHolder} that holds the resulting critical-hit level + * @returns `true` if the critical-hit stage boost applies successfully */ - shouldApply(args: any[]): boolean { - return args && (args.length === 1) && (args[0] instanceof Utils.NumberHolder); + override shouldApply(critLevel?: NumberHolder): boolean { + return !!critLevel; } /** * Increases the current critical-hit stage value by 1. - * @param args [0] {@linkcode Utils.IntegerHolder} that holds the resulting critical-hit level - * @returns true if the critical-hit stage boost applies successfully + * @param critLevel {@linkcode NumberHolder} that holds the resulting critical-hit level + * @returns `true` if the critical-hit stage boost applies successfully */ - apply(args: any[]): boolean { - (args[0] as Utils.NumberHolder).value++; + override apply(critLevel: NumberHolder): boolean { + critLevel.value++; return true; } } export class MapModifier extends PersistentModifier { - constructor(type: ModifierType, stackCount?: integer) { + constructor(type: ModifierType, stackCount?: number) { super(type, stackCount); } @@ -534,17 +560,17 @@ export class MapModifier extends PersistentModifier { return new MapModifier(this.type, this.stackCount); } - apply(args: any[]): boolean { + override apply(..._args: unknown[]): boolean { return true; } - getMaxStackCount(scene: BattleScene): integer { + getMaxStackCount(scene: BattleScene): number { return 1; } } export class MegaEvolutionAccessModifier extends PersistentModifier { - constructor(type: ModifierType, stackCount?: integer) { + constructor(type: ModifierType, stackCount?: number) { super(type, stackCount); } @@ -552,17 +578,17 @@ export class MegaEvolutionAccessModifier extends PersistentModifier { return new MegaEvolutionAccessModifier(this.type, this.stackCount); } - apply(args: any[]): boolean { + override apply(..._args: unknown[]): boolean { return true; } - getMaxStackCount(scene: BattleScene): integer { + getMaxStackCount(scene: BattleScene): number { return 1; } } export class GigantamaxAccessModifier extends PersistentModifier { - constructor(type: ModifierType, stackCount?: integer) { + constructor(type: ModifierType, stackCount?: number) { super(type, stackCount); } @@ -570,17 +596,22 @@ export class GigantamaxAccessModifier extends PersistentModifier { return new GigantamaxAccessModifier(this.type, this.stackCount); } - apply(args: any[]): boolean { + /** + * Applies {@linkcode GigantamaxAccessModifier} + * @param _args N/A + * @returns always `true` + */ + apply(..._args: unknown[]): boolean { return true; } - getMaxStackCount(scene: BattleScene): integer { + getMaxStackCount(scene: BattleScene): number { return 1; } } export class TerastallizeAccessModifier extends PersistentModifier { - constructor(type: ModifierType, stackCount?: integer) { + constructor(type: ModifierType, stackCount?: number) { super(type, stackCount); } @@ -588,20 +619,25 @@ export class TerastallizeAccessModifier extends PersistentModifier { return new TerastallizeAccessModifier(this.type, this.stackCount); } - apply(args: any[]): boolean { + /** + * Applies {@linkcode TerastallizeAccessModifier} + * @param _args N/A + * @returns always `true` + */ + override apply(..._args: unknown[]): boolean { return true; } - getMaxStackCount(scene: BattleScene): integer { + getMaxStackCount(scene: BattleScene): number { return 1; } } export abstract class PokemonHeldItemModifier extends PersistentModifier { - public pokemonId: integer; + public pokemonId: number; public isTransferable: boolean = true; - constructor(type: ModifierType, pokemonId: integer, stackCount?: integer) { + constructor(type: ModifierType, pokemonId: number, stackCount?: number) { super(type, stackCount); this.pokemonId = pokemonId; @@ -617,8 +653,21 @@ export abstract class PokemonHeldItemModifier extends PersistentModifier { return [ this.pokemonId ]; } - shouldApply(args: any[]): boolean { - return super.shouldApply(args) && args.length !== 0 && args[0] instanceof Pokemon && (this.pokemonId === -1 || (args[0] as Pokemon).id === this.pokemonId); + /** + * Applies the {@linkcode PokemonHeldItemModifier} to the given {@linkcode Pokemon}. + * @param pokemon The {@linkcode Pokemon} that holds the held item + * @param args additional parameters + */ + abstract override apply(pokemon: Pokemon, ...args: unknown[]): boolean; + + /** + * Checks if {@linkcode PokemonHeldItemModifier} should be applied. + * @param pokemon The {@linkcode Pokemon} that holds the item + * @param _args N/A + * @returns if {@linkcode PokemonHeldItemModifier} should be applied + */ + override shouldApply(pokemon?: Pokemon, ..._args: unknown[]): boolean { + return !!pokemon && (this.pokemonId === -1 || pokemon.id === this.pokemonId); } isIconVisible(scene: BattleScene): boolean { @@ -667,7 +716,7 @@ export abstract class PokemonHeldItemModifier extends PersistentModifier { } //Applies to items with chance of activating secondary effects ie Kings Rock - getSecondaryChanceMultiplier(pokemon: Pokemon): integer { + getSecondaryChanceMultiplier(pokemon: Pokemon): number { // Temporary quickfix to stop game from freezing when the opponet uses u-turn while holding on to king's rock if (!pokemon.getLastXMoves(0)[0]) { return 1; @@ -682,41 +731,52 @@ export abstract class PokemonHeldItemModifier extends PersistentModifier { return 1; } - getMaxStackCount(scene: BattleScene, forThreshold?: boolean): integer { + getMaxStackCount(scene: BattleScene, forThreshold?: boolean): number { const pokemon = this.getPokemon(scene); if (!pokemon) { return 0; } if (pokemon.isPlayer() && forThreshold) { - return scene.getParty().map(p => this.getMaxHeldItemCount(p)).reduce((stackCount: integer, maxStackCount: integer) => Math.max(stackCount, maxStackCount), 0); + return scene.getParty().map(p => this.getMaxHeldItemCount(p)).reduce((stackCount: number, maxStackCount: number) => Math.max(stackCount, maxStackCount), 0); } return this.getMaxHeldItemCount(pokemon); } - abstract getMaxHeldItemCount(pokemon?: Pokemon): integer; + abstract getMaxHeldItemCount(pokemon?: Pokemon): number; } export abstract class LapsingPokemonHeldItemModifier extends PokemonHeldItemModifier { - protected battlesLeft: integer; + protected battlesLeft: number; public isTransferable: boolean = false; - constructor(type: ModifierTypes.ModifierType, pokemonId: integer, battlesLeft?: integer, stackCount?: integer) { + constructor(type: ModifierType, pokemonId: number, battlesLeft?: number, stackCount?: number) { super(type, pokemonId, stackCount); this.battlesLeft = battlesLeft!; // TODO: is this bang correct? } - lapse(args: any[]): boolean { + /** + * Lapse the {@linkcode battlesLeft} counter (reduce it by 1) + * @param _args arguments passed (not used here) + * @returns `true` if {@linkcode battlesLeft} is not null + */ + public lapse(..._args: unknown[]): boolean { return !!--this.battlesLeft; } - getIcon(scene: BattleScene, forSummary?: boolean): Phaser.GameObjects.Container { + /** + * Retrieve the {@linkcode Modifier | Modifiers} icon as a {@linkcode Phaser.GameObjects.Container | Container} + * @param scene The {@linkcode BattleScene} + * @param forSummary `true` if the icon is for the summary screen + * @returns the icon as a {@linkcode Phaser.GameObjects.Container | Container} + */ + public getIcon(scene: BattleScene, forSummary?: boolean): Phaser.GameObjects.Container { const container = super.getIcon(scene, forSummary); if (this.getPokemon(scene)?.isPlayer()) { - const battleCountText = addTextObject(scene, 27, 0, this.battlesLeft.toString(), TextStyle.PARTY, { fontSize: "66px", color: "#f89890" }); + const battleCountText = addTextObject(scene, 27, 0, this.battlesLeft.toString(), TextStyle.PARTY, { fontSize: "66px", color: Color.PINK }); battleCountText.setShadow(0, 0); - battleCountText.setStroke("#984038", 16); + battleCountText.setStroke(ShadowColor.RED, 16); battleCountText.setOrigin(1, 0); container.add(battleCountText); } @@ -724,7 +784,7 @@ export abstract class LapsingPokemonHeldItemModifier extends PokemonHeldItemModi return container; } - getBattlesLeft(): integer { + getBattlesLeft(): number { return this.battlesLeft; } @@ -734,10 +794,11 @@ export abstract class LapsingPokemonHeldItemModifier extends PokemonHeldItemModi } export class TerastallizeModifier extends LapsingPokemonHeldItemModifier { + public override type: TerastallizeModifierType; public teraType: Type; public isTransferable: boolean = false; - constructor(type: ModifierTypes.TerastallizeModifierType, pokemonId: integer, teraType: Type, battlesLeft?: integer, stackCount?: integer) { + constructor(type: TerastallizeModifierType, pokemonId: number, teraType: Type, battlesLeft?: number, stackCount?: number) { super(type, pokemonId, battlesLeft || 10, stackCount); this.teraType = teraType; @@ -751,15 +812,19 @@ export class TerastallizeModifier extends LapsingPokemonHeldItemModifier { } clone(): TerastallizeModifier { - return new TerastallizeModifier(this.type as ModifierTypes.TerastallizeModifierType, this.pokemonId, this.teraType, this.battlesLeft, this.stackCount); + return new TerastallizeModifier(this.type, this.pokemonId, this.teraType, this.battlesLeft, this.stackCount); } getArgs(): any[] { return [ this.pokemonId, this.teraType, this.battlesLeft ]; } - apply(args: any[]): boolean { - const pokemon = args[0] as Pokemon; + /** + * Applies the {@linkcode TerastallizeModifier} to the specified {@linkcode Pokemon}. + * @param pokemon the {@linkcode Pokemon} to be terastallized + * @returns always `true` + */ + override apply(pokemon: Pokemon): boolean { if (pokemon.isPlayer()) { pokemon.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeTeraTrigger); pokemon.scene.validateAchv(achvs.TERASTALLIZE); @@ -771,10 +836,14 @@ export class TerastallizeModifier extends LapsingPokemonHeldItemModifier { return true; } - lapse(args: any[]): boolean { - const ret = super.lapse(args); + /** + * Triggers {@linkcode LapsingPokemonHeldItemModifier.lapse} and if it returns `0` a form change is triggered. + * @param pokemon THe {@linkcode Pokemon} to be terastallized + * @returns the result of {@linkcode LapsingPokemonHeldItemModifier.lapse} + */ + public override lapse(pokemon: Pokemon): boolean { + const ret = super.lapse(pokemon); if (!ret) { - const pokemon = args[0] as Pokemon; pokemon.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeLapseTeraTrigger); pokemon.updateSpritePipelineData(); } @@ -785,7 +854,7 @@ export class TerastallizeModifier extends LapsingPokemonHeldItemModifier { return 1.25; } - getMaxHeldItemCount(pokemon: Pokemon): integer { + getMaxHeldItemCount(pokemon: Pokemon): number { return 1; } } @@ -800,7 +869,7 @@ export class BaseStatModifier extends PokemonHeldItemModifier { protected stat: PermanentStat; public isTransferable: boolean = false; - constructor(type: ModifierType, pokemonId: integer, stat: PermanentStat, stackCount?: integer) { + constructor(type: ModifierType, pokemonId: number, stat: PermanentStat, stackCount?: number) { super(type, pokemonId, stackCount); this.stat = stat; } @@ -820,12 +889,23 @@ export class BaseStatModifier extends PokemonHeldItemModifier { return super.getArgs().concat(this.stat); } - shouldApply(args: any[]): boolean { - return super.shouldApply(args) && args.length === 2 && Array.isArray(args[1]); + /** + * Checks if {@linkcode BaseStatModifier} should be applied to the specified {@linkcode Pokemon}. + * @param _pokemon the {@linkcode Pokemon} to be modified + * @param baseStats the base stats of the {@linkcode Pokemon} + * @returns `true` if the {@linkcode Pokemon} should be modified + */ + override shouldApply(_pokemon?: Pokemon, baseStats?: number[]): boolean { + return super.shouldApply(_pokemon, baseStats) && Array.isArray(baseStats); } - apply(args: any[]): boolean { - const baseStats = args[1] as number[]; + /** + * Applies the {@linkcode BaseStatModifier} to the specified {@linkcode Pokemon}. + * @param _pokemon the {@linkcode Pokemon} to be modified + * @param baseStats the base stats of the {@linkcode Pokemon} + * @returns always `true` + */ + override apply(_pokemon: Pokemon, baseStats: number[]): boolean { baseStats[this.stat] = Math.floor(baseStats[this.stat] * (1 + this.getStackCount() * 0.1)); return true; } @@ -834,17 +914,17 @@ export class BaseStatModifier extends PokemonHeldItemModifier { return 1.1; } - getMaxHeldItemCount(pokemon: Pokemon): integer { + getMaxHeldItemCount(pokemon: Pokemon): number { return pokemon.ivs[this.stat]; } } export class EvoTrackerModifier extends PokemonHeldItemModifier { protected species: Species; - protected required: integer; + protected required: number; public isTransferable: boolean = false; - constructor(type: ModifierType, pokemonId: integer, species: Species, required: integer, stackCount?: integer) { + constructor(type: ModifierType, pokemonId: number, species: Species, required: number, stackCount?: number) { super(type, pokemonId, stackCount); this.species = species; this.required = required; @@ -862,7 +942,11 @@ export class EvoTrackerModifier extends PokemonHeldItemModifier { return super.getArgs().concat([this.species, this.required]); } - apply(args: any[]): boolean { + /** + * Applies the {@linkcode EvoTrackerModifier} + * @returns always `true` + */ + override apply(): boolean { return true; } @@ -888,7 +972,7 @@ export class EvoTrackerModifier extends PokemonHeldItemModifier { return text; } - getMaxHeldItemCount(pokemon: Pokemon): integer { + getMaxHeldItemCount(pokemon: Pokemon): number { this.stackCount = pokemon.evoCounter + pokemon.getHeldItems().filter(m => m instanceof DamageMoneyRewardModifier).length + pokemon.scene.findModifiers(m => m instanceof MoneyMultiplierModifier || m instanceof ExtraModifierModifier).length; return 999; @@ -899,10 +983,12 @@ export class EvoTrackerModifier extends PokemonHeldItemModifier { * Currently used by Shuckle Juice item */ export class PokemonBaseStatTotalModifier extends PokemonHeldItemModifier { - private statModifier: integer; + public override type: PokemonBaseStatTotalModifierType; public isTransferable: boolean = false; - constructor(type: ModifierTypes.PokemonBaseStatTotalModifierType, pokemonId: number, statModifier: number, stackCount?: integer) { + private statModifier: number; + + constructor(type: PokemonBaseStatTotalModifierType, pokemonId: number, statModifier: number, stackCount?: number) { super(type, pokemonId, stackCount); this.statModifier = statModifier; } @@ -912,23 +998,35 @@ export class PokemonBaseStatTotalModifier extends PokemonHeldItemModifier { } override clone(): PersistentModifier { - return new PokemonBaseStatTotalModifier(this.type as ModifierTypes.PokemonBaseStatTotalModifierType, this.pokemonId, this.statModifier, this.stackCount); + return new PokemonBaseStatTotalModifier(this.type, this.pokemonId, this.statModifier, this.stackCount); } override getArgs(): any[] { return super.getArgs().concat(this.statModifier); } - override shouldApply(args: any[]): boolean { - return super.shouldApply(args) && args.length === 2 && args[1] instanceof Array; + /** + * Checks if {@linkcode PokemonBaseStatTotalModifier} should be applied to the specified {@linkcode Pokemon}. + * @param pokemon the {@linkcode Pokemon} to be modified + * @param baseStats the base stats of the {@linkcode Pokemon} + * @returns `true` if the {@linkcode Pokemon} should be modified + */ + override shouldApply(pokemon?: Pokemon, baseStats?: number[]): boolean { + return super.shouldApply(pokemon, baseStats) && Array.isArray(baseStats); } - override apply(args: any[]): boolean { + /** + * Applies the {@linkcode PokemonBaseStatTotalModifier} + * @param _pokemon the {@linkcode Pokemon} to be modified + * @param baseStats the base stats of the {@linkcode Pokemon} + * @returns always `true` + */ + override apply(_pokemon: Pokemon, baseStats: number[]): boolean { // Modifies the passed in baseStats[] array - args[1].forEach((v, i) => { + baseStats.forEach((v, i) => { // HP is affected by half as much as other stats const newVal = i === 0 ? Math.floor(v + this.statModifier / 2) : Math.floor(v + this.statModifier); - args[1][i] = Math.min(Math.max(newVal, 1), 999999); + baseStats[i] = Math.min(Math.max(newVal, 1), 999999); }); return true; @@ -938,7 +1036,7 @@ export class PokemonBaseStatTotalModifier extends PokemonHeldItemModifier { return 1.2; } - override getMaxHeldItemCount(pokemon: Pokemon): integer { + override getMaxHeldItemCount(pokemon: Pokemon): number { return 2; } } @@ -970,16 +1068,28 @@ export class PokemonBaseStatFlatModifier extends PokemonHeldItemModifier { return [ ...super.getArgs(), this.statModifier, this.stats ]; } - override shouldApply(args: any[]): boolean { - return super.shouldApply(args) && args.length === 2 && args[1] instanceof Array; + /** + * Checks if the {@linkcode PokemonBaseStatFlatModifier} should be applied to the {@linkcode Pokemon}. + * @param pokemon The {@linkcode Pokemon} that holds the item + * @param baseStats The base stats of the {@linkcode Pokemon} + * @returns `true` if the {@linkcode PokemonBaseStatFlatModifier} should be applied + */ + override shouldApply(pokemon?: Pokemon, baseStats?: number[]): boolean { + return super.shouldApply(pokemon, baseStats) && Array.isArray(baseStats); } - override apply(args: any[]): boolean { + /** + * Applies the {@linkcode PokemonBaseStatFlatModifier} + * @param _pokemon The {@linkcode Pokemon} that holds the item + * @param baseStats The base stats of the {@linkcode Pokemon} + * @returns always `true` + */ + override apply(_pokemon: Pokemon, baseStats: number[]): boolean { // Modifies the passed in baseStats[] array by a flat value, only if the stat is specified in this.stats - args[1].forEach((v, i) => { + baseStats.forEach((v, i) => { if (this.stats.includes(i)) { const newVal = Math.floor(v + this.statModifier); - args[1][i] = Math.min(Math.max(newVal, 1), 999999); + baseStats[i] = Math.min(Math.max(newVal, 1), 999999); } }); @@ -990,7 +1100,7 @@ export class PokemonBaseStatFlatModifier extends PokemonHeldItemModifier { return 1.1; } - override getMaxHeldItemCount(pokemon: Pokemon): integer { + override getMaxHeldItemCount(pokemon: Pokemon): number { return 1; } } @@ -1001,7 +1111,7 @@ export class PokemonBaseStatFlatModifier extends PokemonHeldItemModifier { export class PokemonIncrementingStatModifier extends PokemonHeldItemModifier { public isTransferable: boolean = false; - constructor (type: ModifierType, pokemonId: integer, stackCount?: integer) { + constructor (type: ModifierType, pokemonId: number, stackCount?: number) { super(type, pokemonId, stackCount); } @@ -1017,15 +1127,28 @@ export class PokemonIncrementingStatModifier extends PokemonHeldItemModifier { return super.getArgs(); } - shouldApply(args: any[]): boolean { - return super.shouldApply(args) && args.length === 3 && args[2] instanceof Utils.IntegerHolder; + /** + * Checks if the {@linkcode PokemonIncrementingStatModifier} should be applied to the {@linkcode Pokemon}. + * @param pokemon The {@linkcode Pokemon} that holds the item + * @param stat The affected {@linkcode Stat} + * @param statHolder The {@linkcode NumberHolder} that holds the stat + * @returns `true` if the {@linkcode PokemonBaseStatFlatModifier} should be applied + */ + override shouldApply(pokemon?: Pokemon, stat?: Stat, statHolder?: NumberHolder): boolean { + return super.shouldApply(pokemon, stat, statHolder) && !!statHolder; } - apply(args: any[]): boolean { - // Modifies the passed in stat integer holder by +1 per stack for HP, +2 per stack for other stats + /** + * Applies the {@linkcode PokemonIncrementingStatModifier} + * @param _pokemon The {@linkcode Pokemon} that holds the item + * @param stat The affected {@linkcode Stat} + * @param statHolder The {@linkcode NumberHolder} that holds the stat + * @returns always `true` + */ + override apply(_pokemon: Pokemon, stat: Stat, statHolder: NumberHolder): boolean { + // Modifies the passed in stat number holder by +1 per stack for HP, +2 per stack for other stats // If the Macho Brace is at max stacks (50), adds additional 5% to total HP and 10% to other stats - const isHp = args[1] === Stat.HP; - const statHolder = args[2] as Utils.IntegerHolder; + const isHp = stat === Stat.HP; if (isHp) { statHolder.value += this.stackCount; @@ -1046,13 +1169,13 @@ export class PokemonIncrementingStatModifier extends PokemonHeldItemModifier { return 1.2; } - getMaxHeldItemCount(pokemon?: Pokemon): integer { + getMaxHeldItemCount(pokemon?: Pokemon): number { return 50; } } /** - * Modifier used for held items that apply {@linkcode Stat} boost(s) + * Modifier used for held items that Applies {@linkcode Stat} boost(s) * using a multiplier. * @extends PokemonHeldItemModifier * @see {@linkcode apply} @@ -1063,7 +1186,7 @@ export class StatBoosterModifier extends PokemonHeldItemModifier { /** The multiplier used to increase the relevant stat(s) */ protected multiplier: number; - constructor(type: ModifierType, pokemonId: integer, stats: Stat[], multiplier: number, stackCount?: integer) { + constructor(type: ModifierType, pokemonId: number, stats: Stat[], multiplier: number, stackCount?: number) { super(type, pokemonId, stackCount); this.stats = stats; @@ -1091,27 +1214,25 @@ export class StatBoosterModifier extends PokemonHeldItemModifier { /** * Checks if the incoming stat is listed in {@linkcode stats} - * @param args [0] {@linkcode Pokemon} N/A - * [1] {@linkcode Stat} being checked at the time - * [2] {@linkcode Utils.NumberHolder} N/A - * @returns true if the stat could be boosted, false otherwise + * @param _pokemon the {@linkcode Pokemon} that holds the item + * @param _stat the {@linkcode Stat} to be boosted + * @param statValue {@linkcode NumberHolder} that holds the resulting value of the stat + * @returns `true` if the stat could be boosted, false otherwise */ - shouldApply(args: any[]): boolean { - return super.shouldApply(args) && this.stats.includes(args[1] as Stat); + override shouldApply(pokemon: Pokemon, stat: Stat, statValue: NumberHolder): boolean { + return super.shouldApply(pokemon, stat, statValue) && this.stats.includes(stat); } /** * Boosts the incoming stat by a {@linkcode multiplier} if the stat is listed * in {@linkcode stats}. - * @param args [0] {@linkcode Pokemon} N/A - * [1] {@linkcode Stat} N/A - * [2] {@linkcode Utils.NumberHolder} that holds the resulting value of the stat - * @returns true if the stat boost applies successfully, false otherwise + * @param _pokemon the {@linkcode Pokemon} that holds the item + * @param _stat the {@linkcode Stat} to be boosted + * @param statValue {@linkcode NumberHolder} that holds the resulting value of the stat + * @returns `true` if the stat boost applies successfully, false otherwise * @see shouldApply */ - apply(args: any[]): boolean { - const statValue = args[2] as Utils.NumberHolder; - + override apply(_pokemon: Pokemon, _stat: Stat, statValue: NumberHolder): boolean { statValue.value *= this.multiplier; return true; } @@ -1139,39 +1260,37 @@ export class EvolutionStatBoosterModifier extends StatBoosterModifier { /** * Checks if the stat boosts can apply and if the holder is not currently * Gigantamax'd. - * @param args [0] {@linkcode Pokemon} that holds the held item - * [1] {@linkcode Stat} N/A - * [2] {@linkcode Utils.NumberHolder} N/A - * @returns true if the stat boosts can be applied, false otherwise + * @param pokemon {@linkcode Pokemon} that holds the held item + * @param stat {@linkcode Stat} The {@linkcode Stat} to be boosted + * @param statValue {@linkcode NumberHolder} that holds the resulting value of the stat + * @returns `true` if the stat boosts can be applied, false otherwise */ - shouldApply(args: any[]): boolean { - return super.shouldApply(args) && !(args[0] as Pokemon).isMax(); + override shouldApply(pokemon: Pokemon, stat: Stat, statValue: NumberHolder): boolean { + return super.shouldApply(pokemon, stat, statValue) && !pokemon.isMax(); } /** - * Boosts the incoming stat value by a {@linkcode multiplier} if the holder + * Boosts the incoming stat value by a {@linkcode EvolutionStatBoosterModifier.multiplier} if the holder * can evolve. Note that, if the holder is a fusion, they will receive * only half of the boost if either of the fused members are fully * evolved. However, if they are both unevolved, the full boost * will apply. - * @param args [0] {@linkcode Pokemon} that holds the held item - * [1] {@linkcode Stat} N/A - * [2] {@linkcode Utils.NumberHolder} that holds the resulting value of the stat - * @returns true if the stat boost applies successfully, false otherwise + * @param pokemon {@linkcode Pokemon} that holds the item + * @param _stat {@linkcode Stat} The {@linkcode Stat} to be boosted + * @param statValue{@linkcode NumberHolder} that holds the resulting value of the stat + * @returns `true` if the stat boost applies successfully, false otherwise * @see shouldApply */ - apply(args: any[]): boolean { - const holder = args[0] as Pokemon; - const statValue = args[2] as Utils.NumberHolder; - const isUnevolved = holder.getSpeciesForm(true).speciesId in pokemonEvolutions; + override apply(pokemon: Pokemon, stat: Stat, statValue: NumberHolder): boolean { + const isUnevolved = pokemon.getSpeciesForm(true).speciesId in pokemonEvolutions; - if (holder.isFusion() && (holder.getFusionSpeciesForm(true).speciesId in pokemonEvolutions) !== isUnevolved) { - // Half boost applied if holder is fused and either part of fusion is fully evolved + if (pokemon.isFusion() && (pokemon.getFusionSpeciesForm(true).speciesId in pokemonEvolutions) !== isUnevolved) { + // Half boost applied if pokemon is fused and either part of fusion is fully evolved statValue.value *= 1 + (this.multiplier - 1) / 2; return true; } else if (isUnevolved) { // Full boost applied if holder is unfused and unevolved or, if fused, both parts of fusion are unevolved - return super.apply(args); + return super.apply(pokemon, stat, statValue); } return false; @@ -1179,7 +1298,7 @@ export class EvolutionStatBoosterModifier extends StatBoosterModifier { } /** - * Modifier used for held items that apply {@linkcode Stat} boost(s) using a + * Modifier used for held items that Applies {@linkcode Stat} boost(s) using a * multiplier if the holder is of a specific {@linkcode Species}. * @extends StatBoosterModifier * @see {@linkcode apply} @@ -1188,7 +1307,7 @@ export class SpeciesStatBoosterModifier extends StatBoosterModifier { /** The species that the held item's stat boost(s) apply to */ private species: Species[]; - constructor(type: ModifierType, pokemonId: integer, stats: Stat[], multiplier: number, species: Species[], stackCount?: integer) { + constructor(type: ModifierType, pokemonId: number, stats: Stat[], multiplier: number, species: Species[], stackCount?: number) { super(type, pokemonId, stats, multiplier, stackCount); this.species = species; @@ -1216,21 +1335,20 @@ export class SpeciesStatBoosterModifier extends StatBoosterModifier { /** * Checks if the incoming stat is listed in {@linkcode stats} and if the holder's {@linkcode Species} * (or its fused species) is listed in {@linkcode species}. - * @param args [0] {@linkcode Pokemon} that holds the held item - * [1] {@linkcode Stat} being checked at the time - * [2] {@linkcode Utils.NumberHolder} N/A - * @returns true if the stat could be boosted, false otherwise + * @param pokemon {@linkcode Pokemon} that holds the item + * @param stat {@linkcode Stat} being checked at the time + * @param statValue {@linkcode NumberHolder} that holds the resulting value of the stat + * @returns `true` if the stat could be boosted, false otherwise */ - shouldApply(args: any[]): boolean { - const holder = args[0] as Pokemon; - return super.shouldApply(args) && (this.species.includes(holder.getSpeciesForm(true).speciesId) || (holder.isFusion() && this.species.includes(holder.getFusionSpeciesForm(true).speciesId))); + override shouldApply(pokemon: Pokemon, stat: Stat, statValue: NumberHolder): boolean { + return super.shouldApply(pokemon, stat, statValue) && (this.species.includes(pokemon.getSpeciesForm(true).speciesId) || (pokemon.isFusion() && this.species.includes(pokemon.getFusionSpeciesForm(true).speciesId))); } /** * Checks if either parameter is included in the corresponding lists * @param speciesId {@linkcode Species} being checked * @param stat {@linkcode Stat} being checked - * @returns true if both parameters are in {@linkcode species} and {@linkcode stats} respectively, false otherwise + * @returns `true` if both parameters are in {@linkcode species} and {@linkcode stats} respectively, false otherwise */ contains(speciesId: Species, stat: Stat): boolean { return this.species.includes(speciesId) && this.stats.includes(stat); @@ -1246,7 +1364,7 @@ export class CritBoosterModifier extends PokemonHeldItemModifier { /** The amount of stages by which the held item increases the current critical-hit stage value */ protected stageIncrement: number; - constructor(type: ModifierType, pokemonId: integer, stageIncrement: number, stackCount?: integer) { + constructor(type: ModifierType, pokemonId: number, stageIncrement: number, stackCount?: number) { super(type, pokemonId, stackCount); this.stageIncrement = stageIncrement; @@ -1270,13 +1388,11 @@ export class CritBoosterModifier extends PokemonHeldItemModifier { /** * Increases the current critical-hit stage value by {@linkcode stageIncrement}. - * @param args [0] {@linkcode Pokemon} N/A - * [1] {@linkcode Utils.IntegerHolder} that holds the resulting critical-hit level - * @returns true if the critical-hit stage boost applies successfully, false otherwise + * @param _pokemon {@linkcode Pokemon} N/A + * @param critStage {@linkcode NumberHolder} that holds the resulting critical-hit level + * @returns always `true` */ - apply(args: any[]): boolean { - const critStage = args[1] as Utils.NumberHolder; - + override apply(_pokemon: Pokemon, critStage: NumberHolder): boolean { critStage.value += this.stageIncrement; return true; } @@ -1296,7 +1412,7 @@ export class SpeciesCritBoosterModifier extends CritBoosterModifier { /** The species that the held item's critical-hit stage boost applies to */ private species: Species[]; - constructor(type: ModifierType, pokemonId: integer, stageIncrement: number, species: Species[], stackCount?: integer) { + constructor(type: ModifierType, pokemonId: number, stageIncrement: number, species: Species[], stackCount?: number) { super(type, pokemonId, stageIncrement, stackCount); this.species = species; @@ -1317,14 +1433,12 @@ export class SpeciesCritBoosterModifier extends CritBoosterModifier { /** * Checks if the holder's {@linkcode Species} (or its fused species) is listed * in {@linkcode species}. - * @param args [0] {@linkcode Pokemon} that holds the held item - * [1] {@linkcode Utils.IntegerHolder} N/A - * @returns true if the critical-hit level can be incremented, false otherwise + * @param pokemon {@linkcode Pokemon} that holds the held item + * @param critStage {@linkcode NumberHolder} that holds the resulting critical-hit level + * @returns `true` if the critical-hit level can be incremented, false otherwise */ - shouldApply(args: any[]) { - const holder = args[0] as Pokemon; - - return super.shouldApply(args) && (this.species.includes(holder.getSpeciesForm(true).speciesId) || (holder.isFusion() && this.species.includes(holder.getFusionSpeciesForm(true).speciesId))); + override shouldApply(pokemon: Pokemon, critStage: NumberHolder): boolean { + return super.shouldApply(pokemon, critStage) && (this.species.includes(pokemon.getSpeciesForm(true).speciesId) || (pokemon.isFusion() && this.species.includes(pokemon.getFusionSpeciesForm(true).speciesId))); } } @@ -1335,7 +1449,7 @@ export class AttackTypeBoosterModifier extends PokemonHeldItemModifier { public moveType: Type; private boostMultiplier: number; - constructor(type: ModifierType, pokemonId: integer, moveType: Type, boostPercent: number, stackCount?: integer) { + constructor(type: ModifierType, pokemonId: number, moveType: Type, boostPercent: number, stackCount?: number) { super(type, pokemonId, stackCount); this.moveType = moveType; @@ -1359,20 +1473,27 @@ export class AttackTypeBoosterModifier extends PokemonHeldItemModifier { return super.getArgs().concat([ this.moveType, this.boostMultiplier * 100 ]); } - shouldApply(args: any[]): boolean { - return super.shouldApply(args) && args.length === 3 && typeof args[1] === "number" && args[2] instanceof Utils.NumberHolder; + /** + * Checks if {@linkcode AttackTypeBoosterModifier} should be applied + * @param pokemon the {@linkcode Pokemon} that holds the held item + * @param moveType the {@linkcode Type} of the move being used + * @param movePower the {@linkcode NumberHolder} that holds the power of the move + * @returns `true` if boosts should be applied to the move. + */ + override shouldApply(pokemon?: Pokemon, moveType?: Type, movePower?: NumberHolder): boolean { + return super.shouldApply(pokemon, moveType, movePower) && typeof moveType === "number" && movePower instanceof NumberHolder; } /** - * @param {Array} args Array - * - Index 0: {Pokemon} Pokemon - * - Index 1: {number} Move type - * - Index 2: {Utils.NumberHolder} Move power - * @returns {boolean} Returns true if boosts have been applied to the move. - */ - apply(args: any[]): boolean { - if (args[1] === this.moveType && (args[2] as Utils.NumberHolder).value >= 1) { - (args[2] as Utils.NumberHolder).value = Math.floor((args[2] as Utils.NumberHolder).value * (1 + (this.getStackCount() * this.boostMultiplier))); + * Applies {@linkcode AttackTypeBoosterModifier} + * @param pokemon {@linkcode Pokemon} that holds the held item + * @param moveType {@linkcode Type} of the move being used + * @param movePower {@linkcode NumberHolder} that holds the power of the move + * @returns `true` if boosts have been applied to the move. + */ + override apply(_pokemon: Pokemon, moveType: Type, movePower: NumberHolder): boolean { + if (moveType === this.moveType && movePower.value >= 1) { + (movePower as NumberHolder).value = Math.floor((movePower as NumberHolder).value * (1 + (this.getStackCount() * this.boostMultiplier))); return true; } @@ -1383,13 +1504,13 @@ export class AttackTypeBoosterModifier extends PokemonHeldItemModifier { return 1.2; } - getMaxHeldItemCount(pokemon: Pokemon): integer { + getMaxHeldItemCount(pokemon: Pokemon): number { return 99; } } export class SurviveDamageModifier extends PokemonHeldItemModifier { - constructor(type: ModifierType, pokemonId: integer, stackCount?: integer) { + constructor(type: ModifierType, pokemonId: number, stackCount?: number) { super(type, pokemonId, stackCount); } @@ -1401,14 +1522,23 @@ export class SurviveDamageModifier extends PokemonHeldItemModifier { return new SurviveDamageModifier(this.type, this.pokemonId, this.stackCount); } - shouldApply(args: any[]): boolean { - return super.shouldApply(args) && args.length === 2 && args[1] instanceof Utils.BooleanHolder; + /** + * Checks if the {@linkcode SurviveDamageModifier} should be applied + * @param pokemon the {@linkcode Pokemon} that holds the item + * @param surviveDamage {@linkcode BooleanHolder} that holds the survive damage + * @returns `true` if the {@linkcode SurviveDamageModifier} should be applied + */ + override shouldApply(pokemon?: Pokemon, surviveDamage?: BooleanHolder): boolean { + return super.shouldApply(pokemon, surviveDamage) && !!surviveDamage; } - apply(args: any[]): boolean { - const pokemon = args[0] as Pokemon; - const surviveDamage = args[1] as Utils.BooleanHolder; - + /** + * Applies {@linkcode SurviveDamageModifier} + * @param pokemon the {@linkcode Pokemon} that holds the item + * @param surviveDamage {@linkcode BooleanHolder} that holds the survive damage + * @returns `true` if the survive damage has been applied + */ + override apply(pokemon: Pokemon, surviveDamage: BooleanHolder): boolean { if (!surviveDamage.value && pokemon.randSeedInt(10) < this.getStackCount()) { surviveDamage.value = true; @@ -1419,13 +1549,13 @@ export class SurviveDamageModifier extends PokemonHeldItemModifier { return false; } - getMaxHeldItemCount(pokemon: Pokemon): integer { + getMaxHeldItemCount(pokemon: Pokemon): number { return 5; } } export class BypassSpeedChanceModifier extends PokemonHeldItemModifier { - constructor(type: ModifierType, pokemonId: integer, stackCount?: integer) { + constructor(type: ModifierType, pokemonId: number, stackCount?: number) { super(type, pokemonId, stackCount); } @@ -1437,18 +1567,27 @@ export class BypassSpeedChanceModifier extends PokemonHeldItemModifier { return new BypassSpeedChanceModifier(this.type, this.pokemonId, this.stackCount); } - shouldApply(args: any[]): boolean { - return super.shouldApply(args) && args.length === 2 && args[1] instanceof Utils.BooleanHolder; + /** + * Checks if {@linkcode BypassSpeedChanceModifier} should be applied + * @param pokemon the {@linkcode Pokemon} that holds the item + * @param doBypassSpeed {@linkcode BooleanHolder} that is `true` if speed should be bypassed + * @returns `true` if {@linkcode BypassSpeedChanceModifier} should be applied + */ + override shouldApply(pokemon?: Pokemon, doBypassSpeed?: BooleanHolder): boolean { + return super.shouldApply(pokemon, doBypassSpeed) && !!doBypassSpeed; } - apply(args: any[]): boolean { - const pokemon = args[0] as Pokemon; - const bypassSpeed = args[1] as Utils.BooleanHolder; - - if (!bypassSpeed.value && pokemon.randSeedInt(10) < this.getStackCount()) { - bypassSpeed.value = true; + /** + * Applies {@linkcode BypassSpeedChanceModifier} + * @param pokemon the {@linkcode Pokemon} that holds the item + * @param doBypassSpeed {@linkcode BooleanHolder} that is `true` if speed should be bypassed + * @returns `true` if {@linkcode BypassSpeedChanceModifier} has been applied + */ + override apply(pokemon: Pokemon, doBypassSpeed: BooleanHolder): boolean { + if (!doBypassSpeed.value && pokemon.randSeedInt(10) < this.getStackCount()) { + doBypassSpeed.value = true; const isCommandFight = pokemon.scene.currentBattle.turnCommands[pokemon.getBattlerIndex()]?.command === Command.FIGHT; - const hasQuickClaw = this.type instanceof ModifierTypes.PokemonHeldItemModifierType && this.type.id === "QUICK_CLAW"; + const hasQuickClaw = this.type instanceof PokemonHeldItemModifierType && this.type.id === "QUICK_CLAW"; if (isCommandFight && hasQuickClaw) { pokemon.scene.queueMessage(i18next.t("modifier:bypassSpeedChanceApply", { pokemonName: getPokemonNameWithAffix(pokemon), itemName: i18next.t("modifierType:ModifierType.QUICK_CLAW.name") })); @@ -1459,13 +1598,13 @@ export class BypassSpeedChanceModifier extends PokemonHeldItemModifier { return false; } - getMaxHeldItemCount(pokemon: Pokemon): integer { + getMaxHeldItemCount(pokemon: Pokemon): number { return 3; } } export class FlinchChanceModifier extends PokemonHeldItemModifier { - constructor(type: ModifierType, pokemonId: integer, stackCount?: integer) { + constructor(type: ModifierType, pokemonId: number, stackCount?: number) { super(type, pokemonId, stackCount); } @@ -1477,14 +1616,23 @@ export class FlinchChanceModifier extends PokemonHeldItemModifier { return new FlinchChanceModifier(this.type, this.pokemonId, this.stackCount); } - shouldApply(args: any[]): boolean { - return super.shouldApply(args) && args.length === 2 && args[1] instanceof Utils.BooleanHolder; + /** + * Checks if {@linkcode FlinchChanceModifier} should be applied + * @param pokemon the {@linkcode Pokemon} that holds the item + * @param flinched {@linkcode BooleanHolder} that is `true` if the pokemon flinched + * @returns `true` if {@linkcode FlinchChanceModifier} should be applied + */ + override shouldApply(pokemon?: Pokemon, flinched?: BooleanHolder): boolean { + return super.shouldApply(pokemon, flinched) && !!flinched; } - apply(args: any[]): boolean { - const pokemon = args[0] as Pokemon; - const flinched = args[1] as Utils.BooleanHolder; - + /** + * Applies {@linkcode FlinchChanceModifier} + * @param pokemon the {@linkcode Pokemon} that holds the item + * @param flinched {@linkcode BooleanHolder} that is `true` if the pokemon flinched + * @returns `true` if {@linkcode FlinchChanceModifier} has been applied + */ + override apply(pokemon: Pokemon, flinched: BooleanHolder): boolean { if (!flinched.value && pokemon.randSeedInt(10) < (this.getStackCount() * this.getSecondaryChanceMultiplier(pokemon))) { flinched.value = true; return true; @@ -1493,13 +1641,13 @@ export class FlinchChanceModifier extends PokemonHeldItemModifier { return false; } - getMaxHeldItemCount(pokemon: Pokemon): integer { + getMaxHeldItemCount(pokemon: Pokemon): number { return 3; } } export class TurnHealModifier extends PokemonHeldItemModifier { - constructor(type: ModifierType, pokemonId: integer, stackCount?: integer) { + constructor(type: ModifierType, pokemonId: number, stackCount?: number) { super(type, pokemonId, stackCount); } @@ -1511,20 +1659,23 @@ export class TurnHealModifier extends PokemonHeldItemModifier { return new TurnHealModifier(this.type, this.pokemonId, this.stackCount); } - apply(args: any[]): boolean { - const pokemon = args[0] as Pokemon; - + /** + * Applies {@linkcode TurnHealModifier} + * @param pokemon The {@linkcode Pokemon} that holds the item + * @returns `true` if the {@linkcode Pokemon} was healed + */ + override apply(pokemon: Pokemon): boolean { if (!pokemon.isFullHp()) { const scene = pokemon.scene; scene.unshiftPhase(new PokemonHealPhase(scene, pokemon.getBattlerIndex(), - Utils.toDmgValue(pokemon.getMaxHp() / 16) * this.stackCount, i18next.t("modifier:turnHealApply", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), typeName: this.type.name }), true)); + toDmgValue(pokemon.getMaxHp() / 16) * this.stackCount, i18next.t("modifier:turnHealApply", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), typeName: this.type.name }), true)); return true; } return false; } - getMaxHeldItemCount(pokemon: Pokemon): integer { + getMaxHeldItemCount(pokemon: Pokemon): number { return 4; } } @@ -1539,7 +1690,7 @@ export class TurnStatusEffectModifier extends PokemonHeldItemModifier { /** The status effect to be applied by the held item */ private effect: StatusEffect; - constructor (type: ModifierType, pokemonId: integer, stackCount?: integer) { + constructor (type: ModifierType, pokemonId: number, stackCount?: number) { super(type, pokemonId, stackCount); switch (type.id) { @@ -1559,7 +1710,7 @@ export class TurnStatusEffectModifier extends PokemonHeldItemModifier { * would be the only item able to {@linkcode apply} successfully. * @override * @param modifier {@linkcode Modifier} being type tested - * @return true if {@linkcode modifier} is an instance of + * @return `true` if {@linkcode modifier} is an instance of * TurnStatusEffectModifier, false otherwise */ matchType(modifier: Modifier): boolean { @@ -1572,15 +1723,14 @@ export class TurnStatusEffectModifier extends PokemonHeldItemModifier { /** * Tries to inflicts the holder with the associated {@linkcode StatusEffect}. - * @param args [0] {@linkcode Pokemon} that holds the held item - * @returns true if the status effect was applied successfully, false if - * otherwise + * @param pokemon {@linkcode Pokemon} that holds the held item + * @returns `true` if the status effect was applied successfully */ - apply(args: any[]): boolean { - return (args[0] as Pokemon).trySetStatus(this.effect, true, undefined, undefined, this.type.name); + override apply(pokemon: Pokemon): boolean { + return pokemon.trySetStatus(this.effect, true, undefined, undefined, this.type.name); } - getMaxHeldItemCount(pokemon: Pokemon): integer { + getMaxHeldItemCount(pokemon: Pokemon): number { return 1; } @@ -1590,7 +1740,7 @@ export class TurnStatusEffectModifier extends PokemonHeldItemModifier { } export class HitHealModifier extends PokemonHeldItemModifier { - constructor(type: ModifierType, pokemonId: integer, stackCount?: integer) { + constructor(type: ModifierType, pokemonId: number, stackCount?: number) { super(type, pokemonId, stackCount); } @@ -1602,25 +1752,28 @@ export class HitHealModifier extends PokemonHeldItemModifier { return new HitHealModifier(this.type, this.pokemonId, this.stackCount); } - apply(args: any[]): boolean { - const pokemon = args[0] as Pokemon; - + /** + * Applies {@linkcode HitHealModifier} + * @param pokemon The {@linkcode Pokemon} that holds the item + * @returns `true` if the {@linkcode Pokemon} was healed + */ + override apply(pokemon: Pokemon): boolean { if (pokemon.turnData.damageDealt && !pokemon.isFullHp()) { const scene = pokemon.scene; scene.unshiftPhase(new PokemonHealPhase(scene, pokemon.getBattlerIndex(), - Utils.toDmgValue(pokemon.turnData.damageDealt / 8) * this.stackCount, i18next.t("modifier:hitHealApply", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), typeName: this.type.name }), true)); + toDmgValue(pokemon.turnData.damageDealt / 8) * this.stackCount, i18next.t("modifier:hitHealApply", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), typeName: this.type.name }), true)); } return true; } - getMaxHeldItemCount(pokemon: Pokemon): integer { + getMaxHeldItemCount(pokemon: Pokemon): number { return 4; } } export class LevelIncrementBoosterModifier extends PersistentModifier { - constructor(type: ModifierType, stackCount?: integer) { + constructor(type: ModifierType, stackCount?: number) { super(type, stackCount); } @@ -1632,12 +1785,22 @@ export class LevelIncrementBoosterModifier extends PersistentModifier { return new LevelIncrementBoosterModifier(this.type, this.stackCount); } - shouldApply(args: any[]): boolean { - return super.shouldApply(args) && args[0] instanceof Utils.IntegerHolder; + /** + * Checks if {@linkcode LevelIncrementBoosterModifier} should be applied + * @param count {@linkcode NumberHolder} holding the level increment count + * @returns `true` if {@linkcode LevelIncrementBoosterModifier} should be applied + */ + override shouldApply(count: NumberHolder): boolean { + return !!count; } - apply(args: any[]): boolean { - (args[0] as Utils.IntegerHolder).value += this.getStackCount(); + /** + * Applies {@linkcode LevelIncrementBoosterModifier} + * @param count {@linkcode NumberHolder} holding the level increment count + * @returns always `true` + */ + override apply(count: NumberHolder): boolean { + count.value += this.getStackCount(); return true; } @@ -1651,7 +1814,7 @@ export class BerryModifier extends PokemonHeldItemModifier { public berryType: BerryType; public consumed: boolean; - constructor(type: ModifierType, pokemonId: integer, berryType: BerryType, stackCount?: integer) { + constructor(type: ModifierType, pokemonId: number, berryType: BerryType, stackCount?: number) { super(type, pokemonId, stackCount); this.berryType = berryType; @@ -1670,14 +1833,22 @@ export class BerryModifier extends PokemonHeldItemModifier { return super.getArgs().concat(this.berryType); } - shouldApply(args: any[]): boolean { - return !this.consumed && super.shouldApply(args) && getBerryPredicate(this.berryType)(args[0] as Pokemon); + /** + * Checks if {@linkcode BerryModifier} should be applied + * @param pokemon The {@linkcode Pokemon} that holds the berry + * @returns `true` if {@linkcode BerryModifier} should be applied + */ + override shouldApply(pokemon: Pokemon): boolean { + return !this.consumed && super.shouldApply(pokemon) && getBerryPredicate(this.berryType)(pokemon); } - apply(args: any[]): boolean { - const pokemon = args[0] as Pokemon; - - const preserve = new Utils.BooleanHolder(false); + /** + * Applies {@linkcode BerryModifier} + * @param pokemon The {@linkcode Pokemon} that holds the berry + * @returns always `true` + */ + override apply(pokemon: Pokemon): boolean { + const preserve = new BooleanHolder(false); pokemon.scene.applyModifiers(PreserveBerryModifier, pokemon.isPlayer(), pokemon, preserve); getBerryEffectFunc(this.berryType)(pokemon); @@ -1688,7 +1859,7 @@ export class BerryModifier extends PokemonHeldItemModifier { return true; } - getMaxHeldItemCount(pokemon: Pokemon): integer { + getMaxHeldItemCount(pokemon: Pokemon): number { if ([BerryType.LUM, BerryType.LEPPA, BerryType.SITRUS, BerryType.ENIGMA].includes(this.berryType)) { return 2; } @@ -1697,7 +1868,7 @@ export class BerryModifier extends PokemonHeldItemModifier { } export class PreserveBerryModifier extends PersistentModifier { - constructor(type: ModifierType, stackCount?: integer) { + constructor(type: ModifierType, stackCount?: number) { super(type, stackCount); } @@ -1709,25 +1880,37 @@ export class PreserveBerryModifier extends PersistentModifier { return new PreserveBerryModifier(this.type, this.stackCount); } - shouldApply(args: any[]): boolean { - return super.shouldApply(args) && args[0] instanceof Pokemon && args[1] instanceof Utils.BooleanHolder; + /** + * Checks if all prequired conditions are met to apply {@linkcode PreserveBerryModifier} + * @param pokemon {@linkcode Pokemon} that holds the berry + * @param doPreserve {@linkcode BooleanHolder} that is `true` if the berry should be preserved + * @returns `true` if {@linkcode PreserveBerryModifier} should be applied + */ + override shouldApply(pokemon?: Pokemon, doPreserve?: BooleanHolder): boolean { + return !!pokemon && !!doPreserve; } - apply(args: any[]): boolean { - if (!(args[1] as Utils.BooleanHolder).value) { - (args[1] as Utils.BooleanHolder).value = (args[0] as Pokemon).randSeedInt(10) < this.getStackCount() * 3; + /** + * Applies {@linkcode PreserveBerryModifier} + * @param pokemon The {@linkcode Pokemon} that holds the berry + * @param doPreserve {@linkcode BooleanHolder} that is `true` if the berry should be preserved + * @returns always `true` + */ + override apply(pokemon: Pokemon, doPreserve: BooleanHolder): boolean { + if (!doPreserve.value) { + doPreserve.value = pokemon.randSeedInt(10) < this.getStackCount() * 3; } return true; } - getMaxStackCount(scene: BattleScene): integer { + getMaxStackCount(scene: BattleScene): number { return 3; } } export class PokemonInstantReviveModifier extends PokemonHeldItemModifier { - constructor(type: ModifierType, pokemonId: integer, stackCount?: integer) { + constructor(type: ModifierType, pokemonId: number, stackCount?: number) { super(type, pokemonId, stackCount); } @@ -1739,17 +1922,20 @@ export class PokemonInstantReviveModifier extends PokemonHeldItemModifier { return new PokemonInstantReviveModifier(this.type, this.pokemonId, this.stackCount); } - apply(args: any[]): boolean { - const pokemon = args[0] as Pokemon; - + /** + * Applies {@linkcode PokemonInstantReviveModifier} + * @param pokemon The {@linkcode Pokemon} that holds the item + * @returns always `true` + */ + override apply(pokemon: Pokemon): boolean { pokemon.scene.unshiftPhase(new PokemonHealPhase(pokemon.scene, pokemon.getBattlerIndex(), - Utils.toDmgValue(pokemon.getMaxHp() / 2), i18next.t("modifier:pokemonInstantReviveApply", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), typeName: this.type.name }), false, false, true)); + toDmgValue(pokemon.getMaxHp() / 2), i18next.t("modifier:pokemonInstantReviveApply", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), typeName: this.type.name }), false, false, true)); pokemon.resetStatus(true, false, true); return true; } - getMaxHeldItemCount(pokemon: Pokemon): integer { + getMaxHeldItemCount(pokemon: Pokemon): number { return 1; } } @@ -1761,7 +1947,7 @@ export class PokemonInstantReviveModifier extends PokemonHeldItemModifier { * @see {@linkcode apply} */ export class ResetNegativeStatStageModifier extends PokemonHeldItemModifier { - constructor(type: ModifierType, pokemonId: integer, stackCount?: integer) { + constructor(type: ModifierType, pokemonId: number, stackCount?: number) { super(type, pokemonId, stackCount); } @@ -1776,11 +1962,10 @@ export class ResetNegativeStatStageModifier extends PokemonHeldItemModifier { /** * Goes through the holder's stat stages and, if any are negative, resets that * stat stage back to 0. - * @param args [0] {@linkcode Pokemon} that holds the held item - * @returns true if any stat stages were reset, false otherwise + * @param pokemon {@linkcode Pokemon} that holds the item + * @returns `true` if any stat stages were reset, false otherwise */ - apply(args: any[]): boolean { - const pokemon = args[0] as Pokemon; + override apply(pokemon: Pokemon): boolean { let statRestored = false; for (const s of BATTLE_STATS) { @@ -1796,36 +1981,49 @@ export class ResetNegativeStatStageModifier extends PokemonHeldItemModifier { return statRestored; } - getMaxHeldItemCount(_pokemon: Pokemon): integer { + getMaxHeldItemCount(_pokemon: Pokemon): number { return 2; } } export abstract class ConsumablePokemonModifier extends ConsumableModifier { - public pokemonId: integer; + public pokemonId: number; - constructor(type: ModifierType, pokemonId: integer) { + constructor(type: ModifierType, pokemonId: number) { super(type); this.pokemonId = pokemonId; } - shouldApply(args: any[]): boolean { - return args.length !== 0 && args[0] instanceof PlayerPokemon && (this.pokemonId === -1 || (args[0] as PlayerPokemon).id === this.pokemonId); + /** + * Checks if {@linkcode ConsumablePokemonModifier} should be applied + * @param playerPokemon The {@linkcode PlayerPokemon} that consumes the item + * @param _args N/A + * @returns `true` if {@linkcode ConsumablePokemonModifier} should be applied + */ + override shouldApply(playerPokemon?: PlayerPokemon, ..._args: unknown[]): boolean { + return !!playerPokemon && (this.pokemonId === -1 || playerPokemon.id === this.pokemonId); } + /** + * Applies {@linkcode ConsumablePokemonModifier} + * @param playerPokemon The {@linkcode PlayerPokemon} that consumes the item + * @param args Additional arguments passed to {@linkcode ConsumablePokemonModifier.apply} + */ + abstract override apply(playerPokemon: PlayerPokemon, ...args: unknown[]): boolean | Promise; + getPokemon(scene: BattleScene) { return scene.getParty().find(p => p.id === this.pokemonId); } } export class PokemonHpRestoreModifier extends ConsumablePokemonModifier { - private restorePoints: integer; + private restorePoints: number; private restorePercent: number; private healStatus: boolean; public fainted: boolean; - constructor(type: ModifierType, pokemonId: integer, restorePoints: integer, restorePercent: number, healStatus: boolean, fainted?: boolean) { + constructor(type: ModifierType, pokemonId: number, restorePoints: number, restorePercent: number, healStatus: boolean, fainted?: boolean) { super(type, pokemonId); this.restorePoints = restorePoints; @@ -1834,16 +2032,27 @@ export class PokemonHpRestoreModifier extends ConsumablePokemonModifier { this.fainted = !!fainted; } - shouldApply(args: any[]): boolean { - return super.shouldApply(args) && (this.fainted || (args.length > 1 && typeof(args[1]) === "number")); + /** + * Checks if {@linkcode PokemonHpRestoreModifier} should be applied + * @param playerPokemon The {@linkcode PlayerPokemon} that consumes the item + * @param multiplier The multiplier of the hp restore + * @returns `true` if the {@linkcode PokemonHpRestoreModifier} should be applied + */ + override shouldApply(playerPokemon?: PlayerPokemon, multiplier?: number): boolean { + return super.shouldApply(playerPokemon) && (this.fainted || (!isNullOrUndefined(multiplier) && typeof(multiplier) === "number")); } - apply(args: any[]): boolean { - const pokemon = args[0] as Pokemon; + /** + * Applies {@linkcode PokemonHpRestoreModifier} + * @param pokemon The {@linkcode PlayerPokemon} that consumes the item + * @param multiplier The multiplier of the hp restore + * @returns `true` if hp was restored + */ + override apply(pokemon: Pokemon, multiplier: number): boolean { if (!pokemon.hp === this.fainted) { let restorePoints = this.restorePoints; if (!this.fainted) { - restorePoints = Math.floor(restorePoints * (args[1] as number)); + restorePoints = Math.floor(restorePoints * multiplier); } if (this.fainted || this.healStatus) { pokemon.resetStatus(true, true); @@ -1856,21 +2065,25 @@ export class PokemonHpRestoreModifier extends ConsumablePokemonModifier { } export class PokemonStatusHealModifier extends ConsumablePokemonModifier { - constructor(type: ModifierType, pokemonId: integer) { + constructor(type: ModifierType, pokemonId: number) { super(type, pokemonId); } - apply(args: any[]): boolean { - const pokemon = args[0] as Pokemon; - pokemon.resetStatus(true, true); + /** + * Applies {@linkcode PokemonStatusHealModifier} + * @param playerPokemon The {@linkcode PlayerPokemon} that gets healed from the status + * @returns always `true` + */ + override apply(playerPokemon: PlayerPokemon): boolean { + playerPokemon.resetStatus(true, true); return true; } } export abstract class ConsumablePokemonMoveModifier extends ConsumablePokemonModifier { - public moveIndex: integer; + public moveIndex: number; - constructor(type: ModifierType, pokemonId: integer, moveIndex: integer) { + constructor(type: ModifierType, pokemonId: number, moveIndex: number) { super(type, pokemonId); this.moveIndex = moveIndex; @@ -1878,36 +2091,49 @@ export abstract class ConsumablePokemonMoveModifier extends ConsumablePokemonMod } export class PokemonPpRestoreModifier extends ConsumablePokemonMoveModifier { - private restorePoints: integer; + private restorePoints: number; - constructor(type: ModifierType, pokemonId: integer, moveIndex: integer, restorePoints: integer) { + constructor(type: ModifierType, pokemonId: number, moveIndex: number, restorePoints: number) { super(type, pokemonId, moveIndex); this.restorePoints = restorePoints; } - apply(args: any[]): boolean { - const pokemon = args[0] as Pokemon; - const move = pokemon.getMoveset()[this.moveIndex]!; //TODO: is the bang correct? - move.ppUsed = this.restorePoints > -1 ? Math.max(move.ppUsed - this.restorePoints, 0) : 0; + /** + * Applies {@linkcode PokemonPpRestoreModifier} + * @param playerPokemon The {@linkcode PlayerPokemon} that should get move pp restored + * @returns always `true` + */ + override apply(playerPokemon: PlayerPokemon): boolean { + const move = playerPokemon.getMoveset()[this.moveIndex]; + + if (move) { + move.ppUsed = this.restorePoints > -1 ? Math.max(move.ppUsed - this.restorePoints, 0) : 0; + } return true; } } export class PokemonAllMovePpRestoreModifier extends ConsumablePokemonModifier { - private restorePoints: integer; + private restorePoints: number; - constructor(type: ModifierType, pokemonId: integer, restorePoints: integer) { + constructor(type: ModifierType, pokemonId: number, restorePoints: number) { super(type, pokemonId); this.restorePoints = restorePoints; } - apply(args: any[]): boolean { - const pokemon = args[0] as Pokemon; - for (const move of pokemon.getMoveset()) { - move!.ppUsed = this.restorePoints > -1 ? Math.max(move!.ppUsed - this.restorePoints, 0) : 0; // TODO: are those bangs correct? + /** + * Applies {@linkcode PokemonAllMovePpRestoreModifier} + * @param playerPokemon The {@linkcode PlayerPokemon} that should get all move pp restored + * @returns always `true` + */ + override apply(playerPokemon: PlayerPokemon): boolean { + for (const move of playerPokemon.getMoveset()) { + if (move) { + move.ppUsed = this.restorePoints > -1 ? Math.max(move.ppUsed - this.restorePoints, 0) : 0; + } } return true; @@ -1915,18 +2141,25 @@ export class PokemonAllMovePpRestoreModifier extends ConsumablePokemonModifier { } export class PokemonPpUpModifier extends ConsumablePokemonMoveModifier { - private upPoints: integer; + private upPoints: number; - constructor(type: ModifierType, pokemonId: integer, moveIndex: integer, upPoints: integer) { + constructor(type: ModifierType, pokemonId: number, moveIndex: number, upPoints: number) { super(type, pokemonId, moveIndex); this.upPoints = upPoints; } - apply(args: any[]): boolean { - const pokemon = args[0] as Pokemon; - const move = pokemon.getMoveset()[this.moveIndex]!; // TODO: is the bang correct? - move.ppUp = Math.min(move.ppUp + this.upPoints, 3); + /** + * Applies {@linkcode PokemonPpUpModifier} + * @param playerPokemon The {@linkcode PlayerPokemon} that gets a pp up on move-slot {@linkcode moveIndex} + * @returns + */ + override apply(playerPokemon: PlayerPokemon): boolean { + const move = playerPokemon.getMoveset()[this.moveIndex]; + + if (move) { + move.ppUp = Math.min(move.ppUp + this.upPoints, 3); + } return true; } @@ -1935,21 +2168,25 @@ export class PokemonPpUpModifier extends ConsumablePokemonMoveModifier { export class PokemonNatureChangeModifier extends ConsumablePokemonModifier { public nature: Nature; - constructor(type: ModifierType, pokemonId: integer, nature: Nature) { + constructor(type: ModifierType, pokemonId: number, nature: Nature) { super(type, pokemonId); this.nature = nature; } - apply(args: any[]): boolean { - const pokemon = args[0] as Pokemon; - pokemon.natureOverride = this.nature; - let speciesId = pokemon.species.speciesId; - pokemon.scene.gameData.dexData[speciesId].natureAttr |= 1 << (this.nature + 1); + /** + * Applies {@linkcode PokemonNatureChangeModifier} + * @param playerPokemon {@linkcode PlayerPokemon} to apply the {@linkcode Nature} change to + * @returns + */ + override apply(playerPokemon: PlayerPokemon): boolean { + playerPokemon.natureOverride = this.nature; + let speciesId = playerPokemon.species.speciesId; + playerPokemon.scene.gameData.dexData[speciesId].natureAttr |= 1 << (this.nature + 1); while (pokemonPrevolutions.hasOwnProperty(speciesId)) { speciesId = pokemonPrevolutions[speciesId]; - pokemon.scene.gameData.dexData[speciesId].natureAttr |= 1 << (this.nature + 1); + playerPokemon.scene.gameData.dexData[speciesId].natureAttr |= 1 << (this.nature + 1); } return true; @@ -1957,86 +2194,104 @@ export class PokemonNatureChangeModifier extends ConsumablePokemonModifier { } export class PokemonLevelIncrementModifier extends ConsumablePokemonModifier { - constructor(type: ModifierType, pokemonId: integer) { + constructor(type: ModifierType, pokemonId: number) { super(type, pokemonId); } - apply(args: any[]): boolean { - const pokemon = args[0] as PlayerPokemon; - const levelCount = new Utils.IntegerHolder(1); - pokemon.scene.applyModifiers(LevelIncrementBoosterModifier, true, levelCount); + /** + * Applies {@linkcode PokemonLevelIncrementModifier} + * @param playerPokemon The {@linkcode PlayerPokemon} that should get levels incremented + * @param levelCount The amount of levels to increment + * @returns always `true` + */ + override apply(playerPokemon: PlayerPokemon, levelCount: NumberHolder): boolean { + playerPokemon.scene.applyModifiers(LevelIncrementBoosterModifier, true, levelCount); - pokemon.level += levelCount.value; - if (pokemon.level <= pokemon.scene.getMaxExpLevel(true)) { - pokemon.exp = getLevelTotalExp(pokemon.level, pokemon.species.growthRate); - pokemon.levelExp = 0; + playerPokemon.level += levelCount.value; + if (playerPokemon.level <= playerPokemon.scene.getMaxExpLevel(true)) { + playerPokemon.exp = getLevelTotalExp(playerPokemon.level, playerPokemon.species.growthRate); + playerPokemon.levelExp = 0; } - pokemon.addFriendship(5); + playerPokemon.addFriendship(5); - pokemon.scene.unshiftPhase(new LevelUpPhase(pokemon.scene, pokemon.scene.getParty().indexOf(pokemon), pokemon.level - levelCount.value, pokemon.level)); + playerPokemon.scene.unshiftPhase(new LevelUpPhase(playerPokemon.scene, playerPokemon.scene.getParty().indexOf(playerPokemon), playerPokemon.level - levelCount.value, playerPokemon.level)); return true; } } export class TmModifier extends ConsumablePokemonModifier { - constructor(type: ModifierTypes.TmModifierType, pokemonId: integer) { + public override type: TmModifierType; + + constructor(type: TmModifierType, pokemonId: number) { super(type, pokemonId); } - apply(args: any[]): boolean { - const pokemon = args[0] as PlayerPokemon; + /** + * Applies {@linkcode TmModifier} + * @param playerPokemon The {@linkcode PlayerPokemon} that should learn the TM + * @returns always `true` + */ + override apply(playerPokemon: PlayerPokemon): boolean { - pokemon.scene.unshiftPhase(new LearnMovePhase(pokemon.scene, pokemon.scene.getParty().indexOf(pokemon), (this.type as ModifierTypes.TmModifierType).moveId, true)); + playerPokemon.scene.unshiftPhase(new LearnMovePhase(playerPokemon.scene, playerPokemon.scene.getParty().indexOf(playerPokemon), this.type.moveId, true)); return true; } } export class RememberMoveModifier extends ConsumablePokemonModifier { - public levelMoveIndex: integer; + public levelMoveIndex: number; - constructor(type: ModifierTypes.ModifierType, pokemonId: integer, levelMoveIndex: integer) { + constructor(type: ModifierType, pokemonId: number, levelMoveIndex: number) { super(type, pokemonId); this.levelMoveIndex = levelMoveIndex; } - apply(args: any[]): boolean { - const pokemon = args[0] as PlayerPokemon; - - pokemon.scene.unshiftPhase(new LearnMovePhase(pokemon.scene, pokemon.scene.getParty().indexOf(pokemon), pokemon.getLearnableLevelMoves()[this.levelMoveIndex])); + /** + * Applies {@linkcode RememberMoveModifier} + * @param playerPokemon The {@linkcode PlayerPokemon} that should remember the move + * @returns always `true` + */ + override apply(playerPokemon: PlayerPokemon): boolean { + playerPokemon.scene.unshiftPhase(new LearnMovePhase(playerPokemon.scene, playerPokemon.scene.getParty().indexOf(playerPokemon), playerPokemon.getLearnableLevelMoves()[this.levelMoveIndex])); return true; } } export class EvolutionItemModifier extends ConsumablePokemonModifier { - constructor(type: ModifierTypes.EvolutionItemModifierType, pokemonId: integer) { + public override type: EvolutionItemModifierType; + + constructor(type: EvolutionItemModifierType, pokemonId: number) { super(type, pokemonId); } - apply(args: any[]): boolean { - const pokemon = args[0] as PlayerPokemon; - - let matchingEvolution = pokemonEvolutions.hasOwnProperty(pokemon.species.speciesId) - ? pokemonEvolutions[pokemon.species.speciesId].find(e => e.item === (this.type as ModifierTypes.EvolutionItemModifierType).evolutionItem - && (e.evoFormKey === null || (e.preFormKey || "") === pokemon.getFormKey()) - && (!e.condition || e.condition.predicate(pokemon))) + /** + * Applies {@linkcode EvolutionItemModifier} + * @param playerPokemon The {@linkcode PlayerPokemon} that should evolve via item + * @returns `true` if the evolution was successful + */ + override apply(playerPokemon: PlayerPokemon): boolean { + let matchingEvolution = pokemonEvolutions.hasOwnProperty(playerPokemon.species.speciesId) + ? pokemonEvolutions[playerPokemon.species.speciesId].find(e => e.item === this.type.evolutionItem + && (e.evoFormKey === null || (e.preFormKey || "") === playerPokemon.getFormKey()) + && (!e.condition || e.condition.predicate(playerPokemon))) : null; - if (!matchingEvolution && pokemon.isFusion()) { - matchingEvolution = pokemonEvolutions[pokemon.fusionSpecies!.speciesId].find(e => e.item === (this.type as ModifierTypes.EvolutionItemModifierType).evolutionItem // TODO: is the bang correct? - && (e.evoFormKey === null || (e.preFormKey || "") === pokemon.getFusionFormKey()) - && (!e.condition || e.condition.predicate(pokemon))); + if (!matchingEvolution && playerPokemon.isFusion()) { + matchingEvolution = pokemonEvolutions[playerPokemon.fusionSpecies!.speciesId].find(e => e.item === this.type.evolutionItem // TODO: is the bang correct? + && (e.evoFormKey === null || (e.preFormKey || "") === playerPokemon.getFusionFormKey()) + && (!e.condition || e.condition.predicate(playerPokemon))); if (matchingEvolution) { - matchingEvolution = new FusionSpeciesFormEvolution(pokemon.species.speciesId, matchingEvolution); + matchingEvolution = new FusionSpeciesFormEvolution(playerPokemon.species.speciesId, matchingEvolution); } } if (matchingEvolution) { - pokemon.scene.unshiftPhase(new EvolutionPhase(pokemon.scene, pokemon, matchingEvolution, pokemon.level - 1)); + playerPokemon.scene.unshiftPhase(new EvolutionPhase(playerPokemon.scene, playerPokemon, matchingEvolution, playerPokemon.level - 1)); return true; } @@ -2045,27 +2300,38 @@ export class EvolutionItemModifier extends ConsumablePokemonModifier { } export class FusePokemonModifier extends ConsumablePokemonModifier { - public fusePokemonId: integer; + public fusePokemonId: number; - constructor(type: ModifierType, pokemonId: integer, fusePokemonId: integer) { + constructor(type: ModifierType, pokemonId: number, fusePokemonId: number) { super(type, pokemonId); this.fusePokemonId = fusePokemonId; } - shouldApply(args: any[]): boolean { - return super.shouldApply(args) && args[1] instanceof PlayerPokemon && this.fusePokemonId === (args[1] as PlayerPokemon).id; + /** + * Checks if {@linkcode FusePokemonModifier} should be applied + * @param playerPokemon {@linkcode PlayerPokemon} that should be fused + * @param playerPokemon2 {@linkcode PlayerPokemon} that should be fused with {@linkcode playerPokemon} + * @returns `true` if {@linkcode FusePokemonModifier} should be applied + */ + override shouldApply(playerPokemon?: PlayerPokemon, playerPokemon2?: PlayerPokemon): boolean { + return super.shouldApply(playerPokemon, playerPokemon2) && !!playerPokemon2 && this.fusePokemonId === playerPokemon2.id; } - apply(args: any[]): Promise { - return new Promise(resolve => { - (args[0] as PlayerPokemon).fuse(args[1] as PlayerPokemon).then(() => resolve(true)); - }); + /** + * Applies {@linkcode FusePokemonModifier} + * @param playerPokemon {@linkcode PlayerPokemon} that should be fused + * @param playerPokemon2 {@linkcode PlayerPokemon} that should be fused with {@linkcode playerPokemon} + * @returns always Promise + */ + override async apply(playerPokemon: PlayerPokemon, playerPokemon2: PlayerPokemon): Promise { + await playerPokemon.fuse(playerPokemon2); + return true; } } export class MultipleParticipantExpBonusModifier extends PersistentModifier { - constructor(type: ModifierType, stackCount?: integer) { + constructor(type: ModifierType, stackCount?: number) { super(type, stackCount); } @@ -2073,7 +2339,11 @@ export class MultipleParticipantExpBonusModifier extends PersistentModifier { return modifier instanceof MultipleParticipantExpBonusModifier; } - apply(_args: any[]): boolean { + /** + * Applies {@linkcode MultipleParticipantExpBonusModifier} + * @returns always `true` + */ + apply(): boolean { return true; } @@ -2081,7 +2351,7 @@ export class MultipleParticipantExpBonusModifier extends PersistentModifier { return new MultipleParticipantExpBonusModifier(this.type, this.stackCount); } - getMaxStackCount(scene: BattleScene): integer { + getMaxStackCount(scene: BattleScene): number { return 5; } } @@ -2089,7 +2359,7 @@ export class MultipleParticipantExpBonusModifier extends PersistentModifier { export class HealingBoosterModifier extends PersistentModifier { private multiplier: number; - constructor(type: ModifierType, multiplier: number, stackCount?: integer) { + constructor(type: ModifierType, multiplier: number, stackCount?: number) { super(type, stackCount); this.multiplier = multiplier; @@ -2107,22 +2377,26 @@ export class HealingBoosterModifier extends PersistentModifier { return [ this.multiplier ]; } - apply(args: any[]): boolean { - const healingMultiplier = args[0] as Utils.IntegerHolder; + /** + * Applies {@linkcode HealingBoosterModifier} + * @param healingMultiplier the multiplier to apply to the healing + * @returns always `true` + */ + override apply(healingMultiplier: NumberHolder): boolean { healingMultiplier.value *= 1 + ((this.multiplier - 1) * this.getStackCount()); return true; } - getMaxStackCount(scene: BattleScene): integer { + getMaxStackCount(scene: BattleScene): number { return 5; } } export class ExpBoosterModifier extends PersistentModifier { - private boostMultiplier: integer; + private boostMultiplier: number; - constructor(type: ModifierType, boostPercent: number, stackCount?: integer) { + constructor(type: ModifierType, boostPercent: number, stackCount?: number) { super(type, stackCount); this.boostMultiplier = boostPercent * 0.01; @@ -2144,21 +2418,28 @@ export class ExpBoosterModifier extends PersistentModifier { return [ this.boostMultiplier * 100 ]; } - apply(args: any[]): boolean { - (args[0] as Utils.NumberHolder).value = Math.floor((args[0] as Utils.NumberHolder).value * (1 + (this.getStackCount() * this.boostMultiplier))); + /** + * Applies {@linkcode ExpBoosterModifier} + * @param boost {@linkcode NumberHolder} holding the boost value + * @returns always `true` + */ + override apply(boost: NumberHolder): boolean { + boost.value = Math.floor(boost.value * (1 + (this.getStackCount() * this.boostMultiplier))); return true; } - getMaxStackCount(scene: BattleScene, forThreshold?: boolean): integer { + getMaxStackCount(scene: BattleScene, forThreshold?: boolean): number { return this.boostMultiplier < 1 ? this.boostMultiplier < 0.6 ? 99 : 30 : 10; } } export class PokemonExpBoosterModifier extends PokemonHeldItemModifier { - private boostMultiplier: integer; + public override type: PokemonExpBoosterModifierType; - constructor(type: ModifierTypes.PokemonExpBoosterModifierType, pokemonId: integer, boostPercent: number, stackCount?: integer) { + private boostMultiplier: number; + + constructor(type: PokemonExpBoosterModifierType, pokemonId: number, boostPercent: number, stackCount?: number) { super(type, pokemonId, stackCount); this.boostMultiplier = boostPercent * 0.01; } @@ -2172,30 +2453,42 @@ export class PokemonExpBoosterModifier extends PokemonHeldItemModifier { } clone(): PersistentModifier { - return new PokemonExpBoosterModifier(this.type as ModifierTypes.PokemonExpBoosterModifierType, this.pokemonId, this.boostMultiplier * 100, this.stackCount); + return new PokemonExpBoosterModifier(this.type, this.pokemonId, this.boostMultiplier * 100, this.stackCount); } getArgs(): any[] { return super.getArgs().concat(this.boostMultiplier * 100); } - shouldApply(args: any[]): boolean { - return super.shouldApply(args) && args.length === 2 && args[1] instanceof Utils.NumberHolder; + /** + * Checks if {@linkcode PokemonExpBoosterModifier} should be applied + * @param pokemon The {@linkcode Pokemon} to apply the exp boost to + * @param boost {@linkcode NumberHolder} holding the exp boost value + * @returns `true` if {@linkcode PokemonExpBoosterModifier} should be applied + */ + override shouldApply(pokemon: Pokemon, boost: NumberHolder): boolean { + return super.shouldApply(pokemon, boost) && !!boost; } - apply(args: any[]): boolean { - (args[1] as Utils.NumberHolder).value = Math.floor((args[1] as Utils.NumberHolder).value * (1 + (this.getStackCount() * this.boostMultiplier))); + /** + * Applies {@linkcode PokemonExpBoosterModifier} + * @param _pokemon The {@linkcode Pokemon} to apply the exp boost to + * @param boost {@linkcode NumberHolder} holding the exp boost value + * @returns always `true` + */ + override apply(_pokemon: Pokemon, boost: NumberHolder): boolean { + boost.value = Math.floor(boost.value * (1 + (this.getStackCount() * this.boostMultiplier))); return true; } - getMaxHeldItemCount(pokemon: Pokemon): integer { + getMaxHeldItemCount(pokemon: Pokemon): number { return 99; } } export class ExpShareModifier extends PersistentModifier { - constructor(type: ModifierType, stackCount?: integer) { + constructor(type: ModifierType, stackCount?: number) { super(type, stackCount); } @@ -2207,17 +2500,21 @@ export class ExpShareModifier extends PersistentModifier { return new ExpShareModifier(this.type, this.stackCount); } - apply(_args: any[]): boolean { + /** + * Applies {@linkcode ExpShareModifier} + * @returns always `true` + */ + override apply(): boolean { return true; } - getMaxStackCount(scene: BattleScene): integer { + getMaxStackCount(scene: BattleScene): number { return 5; } } export class ExpBalanceModifier extends PersistentModifier { - constructor(type: ModifierType, stackCount?: integer) { + constructor(type: ModifierType, stackCount?: number) { super(type, stackCount); } @@ -2229,17 +2526,23 @@ export class ExpBalanceModifier extends PersistentModifier { return new ExpBalanceModifier(this.type, this.stackCount); } - apply(_args: any[]): boolean { + /** + * Applies {@linkcode ExpBalanceModifier} + * @returns always `true` + */ + override apply(): boolean { return true; } - getMaxStackCount(scene: BattleScene): integer { + getMaxStackCount(scene: BattleScene): number { return 4; } } export class PokemonFriendshipBoosterModifier extends PokemonHeldItemModifier { - constructor(type: ModifierTypes.PokemonFriendshipBoosterModifierType, pokemonId: integer, stackCount?: integer) { + public override type: PokemonFriendshipBoosterModifierType; + + constructor(type: PokemonFriendshipBoosterModifierType, pokemonId: number, stackCount?: number) { super(type, pokemonId, stackCount); } @@ -2248,23 +2551,28 @@ export class PokemonFriendshipBoosterModifier extends PokemonHeldItemModifier { } clone(): PersistentModifier { - return new PokemonFriendshipBoosterModifier(this.type as ModifierTypes.PokemonFriendshipBoosterModifierType, this.pokemonId, this.stackCount); + return new PokemonFriendshipBoosterModifier(this.type, this.pokemonId, this.stackCount); } - apply(args: any[]): boolean { - const friendship = args[1] as Utils.IntegerHolder; + /** + * Applies {@linkcode PokemonFriendshipBoosterModifier} + * @param _pokemon The {@linkcode Pokemon} to apply the friendship boost to + * @param friendship {@linkcode NumberHolder} holding the friendship boost value + * @returns always `true` + */ + override apply(_pokemon: Pokemon, friendship: NumberHolder): boolean { friendship.value = Math.floor(friendship.value * (1 + 0.5 * this.getStackCount())); return true; } - getMaxHeldItemCount(pokemon: Pokemon): integer { + getMaxHeldItemCount(pokemon: Pokemon): number { return 3; } } export class PokemonNatureWeightModifier extends PokemonHeldItemModifier { - constructor(type: ModifierTypes.ModifierType, pokemonId: integer, stackCount?: integer) { + constructor(type: ModifierType, pokemonId: number, stackCount?: number) { super(type, pokemonId, stackCount); } @@ -2276,8 +2584,13 @@ export class PokemonNatureWeightModifier extends PokemonHeldItemModifier { return new PokemonNatureWeightModifier(this.type, this.pokemonId, this.stackCount); } - apply(args: any[]): boolean { - const multiplier = args[1] as Utils.IntegerHolder; + /** + * Applies {@linkcode PokemonNatureWeightModifier} + * @param _pokemon The {@linkcode Pokemon} to apply the nature weight to + * @param multiplier {@linkcode NumberHolder} holding the nature weight + * @returns `true` if multiplier was applied + */ + override apply(_pokemon: Pokemon, multiplier: NumberHolder): boolean { if (multiplier.value !== 1) { multiplier.value += 0.1 * this.getStackCount() * (multiplier.value > 1 ? 1 : -1); return true; @@ -2286,15 +2599,16 @@ export class PokemonNatureWeightModifier extends PokemonHeldItemModifier { return false; } - getMaxHeldItemCount(pokemon: Pokemon): integer { + getMaxHeldItemCount(pokemon: Pokemon): number { return 10; } } export class PokemonMoveAccuracyBoosterModifier extends PokemonHeldItemModifier { - private accuracyAmount: integer; + public override type: PokemonMoveAccuracyBoosterModifierType; + private accuracyAmount: number; - constructor(type: ModifierTypes.PokemonMoveAccuracyBoosterModifierType, pokemonId: integer, accuracy: integer, stackCount?: integer) { + constructor(type: PokemonMoveAccuracyBoosterModifierType, pokemonId: number, accuracy: number, stackCount?: number) { super(type, pokemonId, stackCount); this.accuracyAmount = accuracy; } @@ -2308,31 +2622,44 @@ export class PokemonMoveAccuracyBoosterModifier extends PokemonHeldItemModifier } clone(): PersistentModifier { - return new PokemonMoveAccuracyBoosterModifier(this.type as ModifierTypes.PokemonMoveAccuracyBoosterModifierType, this.pokemonId, this.accuracyAmount, this.stackCount); + return new PokemonMoveAccuracyBoosterModifier(this.type, this.pokemonId, this.accuracyAmount, this.stackCount); } getArgs(): any[] { return super.getArgs().concat(this.accuracyAmount); } - shouldApply(args: any[]): boolean { - return super.shouldApply(args) && args.length === 2 && args[1] instanceof Utils.NumberHolder; + /** + * Checks if {@linkcode PokemonMoveAccuracyBoosterModifier} should be applied + * @param pokemon The {@linkcode Pokemon} to apply the move accuracy boost to + * @param moveAccuracy {@linkcode NumberHolder} holding the move accuracy boost + * @returns `true` if {@linkcode PokemonMoveAccuracyBoosterModifier} should be applied + */ + override shouldApply(pokemon?: Pokemon, moveAccuracy?: NumberHolder): boolean { + return super.shouldApply(pokemon, moveAccuracy) && !!moveAccuracy; } - apply(args: any[]): boolean { - const moveAccuracy = (args[1] as Utils.IntegerHolder); + /** + * Applies {@linkcode PokemonMoveAccuracyBoosterModifier} + * @param _pokemon The {@linkcode Pokemon} to apply the move accuracy boost to + * @param moveAccuracy {@linkcode NumberHolder} holding the move accuracy boost + * @returns always `true` + */ + override apply(_pokemon: Pokemon, moveAccuracy: NumberHolder): boolean { moveAccuracy.value = Math.min(moveAccuracy.value + this.accuracyAmount * this.getStackCount(), 100); return true; } - getMaxHeldItemCount(pokemon: Pokemon): integer { + getMaxHeldItemCount(pokemon: Pokemon): number { return 3; } } export class PokemonMultiHitModifier extends PokemonHeldItemModifier { - constructor(type: ModifierTypes.PokemonMultiHitModifierType, pokemonId: integer, stackCount?: integer) { + public override type: PokemonMultiHitModifierType; + + constructor(type: PokemonMultiHitModifierType, pokemonId: number, stackCount?: number) { super(type, pokemonId, stackCount); } @@ -2341,13 +2668,19 @@ export class PokemonMultiHitModifier extends PokemonHeldItemModifier { } clone(): PersistentModifier { - return new PokemonMultiHitModifier(this.type as ModifierTypes.PokemonMultiHitModifierType, this.pokemonId, this.stackCount); + return new PokemonMultiHitModifier(this.type, this.pokemonId, this.stackCount); } - apply(args: any[]): boolean { - (args[1] as Utils.IntegerHolder).value *= (this.getStackCount() + 1); + /** + * Applies {@linkcode PokemonMultiHitModifier} + * @param _pokemon The {@linkcode Pokemon} using the move + * @param count {@linkcode NumberHolder} holding the number of items + * @param power {@linkcode NumberHolder} holding the power of the move + * @returns always `true` + */ + override apply(_pokemon: Pokemon, count: NumberHolder, power: NumberHolder): boolean { + count.value *= (this.getStackCount() + 1); - const power = args[2] as Utils.NumberHolder; switch (this.getStackCount()) { case 1: power.value *= 0.4; @@ -2363,17 +2696,18 @@ export class PokemonMultiHitModifier extends PokemonHeldItemModifier { return true; } - getMaxHeldItemCount(pokemon: Pokemon): integer { + getMaxHeldItemCount(pokemon: Pokemon): number { return 3; } } export class PokemonFormChangeItemModifier extends PokemonHeldItemModifier { + public override type: FormChangeItemModifierType; public formChangeItem: FormChangeItem; public active: boolean; public isTransferable: boolean = false; - constructor(type: ModifierTypes.FormChangeItemModifierType, pokemonId: integer, formChangeItem: FormChangeItem, active: boolean, stackCount?: integer) { + constructor(type: FormChangeItemModifierType, pokemonId: number, formChangeItem: FormChangeItem, active: boolean, stackCount?: number) { super(type, pokemonId, stackCount); this.formChangeItem = formChangeItem; this.active = active; @@ -2384,17 +2718,20 @@ export class PokemonFormChangeItemModifier extends PokemonHeldItemModifier { } clone(): PersistentModifier { - return new PokemonFormChangeItemModifier(this.type as ModifierTypes.FormChangeItemModifierType, this.pokemonId, this.formChangeItem, this.active, this.stackCount); + return new PokemonFormChangeItemModifier(this.type, this.pokemonId, this.formChangeItem, this.active, this.stackCount); } getArgs(): any[] { return super.getArgs().concat(this.formChangeItem, this.active); } - apply(args: any[]): boolean { - const pokemon = args[0] as Pokemon; - const active = args[1] as boolean; - + /** + * Applies {@linkcode PokemonFormChangeItemModifier} + * @param pokemon The {@linkcode Pokemon} to apply the form change item to + * @param active `true` if the form change item is active + * @returns `true` if the form change item was applied + */ + override apply(pokemon: Pokemon, active: boolean): boolean { const switchActive = this.active && !active; if (switchActive) { @@ -2410,7 +2747,7 @@ export class PokemonFormChangeItemModifier extends PokemonHeldItemModifier { return ret; } - getMaxHeldItemCount(pokemon: Pokemon): integer { + getMaxHeldItemCount(pokemon: Pokemon): number { return 1; } } @@ -2424,19 +2761,23 @@ export class MoneyRewardModifier extends ConsumableModifier { this.moneyMultiplier = moneyMultiplier; } - apply(args: any[]): boolean { - const scene = args[0] as BattleScene; - const moneyAmount = new Utils.IntegerHolder(scene.getWaveMoneyAmount(this.moneyMultiplier)); + /** + * Applies {@linkcode MoneyRewardModifier} + * @param battleScene The current {@linkcode BattleScene} + * @returns always `true` + */ + override apply(battleScene: BattleScene): boolean { + const moneyAmount = new NumberHolder(battleScene.getWaveMoneyAmount(this.moneyMultiplier)); - scene.applyModifiers(MoneyMultiplierModifier, true, moneyAmount); + battleScene.applyModifiers(MoneyMultiplierModifier, true, moneyAmount); - scene.addMoney(moneyAmount.value); + battleScene.addMoney(moneyAmount.value); - scene.getParty().map(p => { + battleScene.getParty().map(p => { if (p.species?.speciesId === Species.GIMMIGHOUL || p.fusionSpecies?.speciesId === Species.GIMMIGHOUL) { p.evoCounter ? p.evoCounter++ : p.evoCounter = 1; const modifier = getModifierType(modifierTypes.EVOLUTION_TRACKER_GIMMIGHOUL).newModifier(p) as EvoTrackerModifier; - scene.addModifier(modifier); + battleScene.addModifier(modifier); } }); @@ -2445,7 +2786,7 @@ export class MoneyRewardModifier extends ConsumableModifier { } export class MoneyMultiplierModifier extends PersistentModifier { - constructor(type: ModifierType, stackCount?: integer) { + constructor(type: ModifierType, stackCount?: number) { super(type, stackCount); } @@ -2457,19 +2798,24 @@ export class MoneyMultiplierModifier extends PersistentModifier { return new MoneyMultiplierModifier(this.type, this.stackCount); } - apply(args: any[]): boolean { - (args[0] as Utils.IntegerHolder).value += Math.floor((args[0] as Utils.IntegerHolder).value * 0.2 * this.getStackCount()); + /** + * Applies {@linkcode MoneyMultiplierModifier} + * @param multiplier {@linkcode NumberHolder} holding the money multiplier value + * @returns always `true` + */ + override apply(multiplier: NumberHolder): boolean { + multiplier.value += Math.floor(multiplier.value * 0.2 * this.getStackCount()); return true; } - getMaxStackCount(scene: BattleScene): integer { + getMaxStackCount(scene: BattleScene): number { return 5; } } export class DamageMoneyRewardModifier extends PokemonHeldItemModifier { - constructor(type: ModifierType, pokemonId: integer, stackCount?: integer) { + constructor(type: ModifierType, pokemonId: number, stackCount?: number) { super(type, pokemonId, stackCount); } @@ -2481,22 +2827,28 @@ export class DamageMoneyRewardModifier extends PokemonHeldItemModifier { return new DamageMoneyRewardModifier(this.type, this.pokemonId, this.stackCount); } - apply(args: any[]): boolean { - const scene = (args[0] as Pokemon).scene; - const moneyAmount = new Utils.IntegerHolder(Math.floor((args[1] as Utils.IntegerHolder).value * (0.5 * this.getStackCount()))); - scene.applyModifiers(MoneyMultiplierModifier, true, moneyAmount); - scene.addMoney(moneyAmount.value); + /** + * Applies {@linkcode DamageMoneyRewardModifier} + * @param pokemon The {@linkcode Pokemon} attacking + * @param multiplier {@linkcode NumberHolder} holding the multiplier value + * @returns always `true` + */ + override apply(pokemon: Pokemon, multiplier: NumberHolder): boolean { + const battleScene = pokemon.scene; + const moneyAmount = new NumberHolder(Math.floor(multiplier.value * (0.5 * this.getStackCount()))); + battleScene.applyModifiers(MoneyMultiplierModifier, true, moneyAmount); + battleScene.addMoney(moneyAmount.value); return true; } - getMaxHeldItemCount(pokemon: Pokemon): integer { + getMaxHeldItemCount(pokemon: Pokemon): number { return 5; } } export class MoneyInterestModifier extends PersistentModifier { - constructor(type: ModifierType, stackCount?: integer) { + constructor(type: ModifierType, stackCount?: number) { super(type, stackCount); } @@ -2504,15 +2856,19 @@ export class MoneyInterestModifier extends PersistentModifier { return modifier instanceof MoneyInterestModifier; } - apply(args: any[]): boolean { - const scene = args[0] as BattleScene; - const interestAmount = Math.floor(scene.money * 0.1 * this.getStackCount()); - scene.addMoney(interestAmount); + /** + * Applies {@linkcode MoneyInterestModifier} + * @param battleScene The current {@linkcode BattleScene} + * @returns always `true` + */ + override apply(battleScene: BattleScene): boolean { + const interestAmount = Math.floor(battleScene.money * 0.1 * this.getStackCount()); + battleScene.addMoney(interestAmount); const userLocale = navigator.language || "en-US"; const formattedMoneyAmount = interestAmount.toLocaleString(userLocale); const message = i18next.t("modifier:moneyInterestApply", { moneyAmount: formattedMoneyAmount, typeName: this.type.name }); - scene.queueMessage(message, undefined, true); + battleScene.queueMessage(message, undefined, true); return true; } @@ -2521,13 +2877,13 @@ export class MoneyInterestModifier extends PersistentModifier { return new MoneyInterestModifier(this.type, this.stackCount); } - getMaxStackCount(scene: BattleScene): integer { + getMaxStackCount(scene: BattleScene): number { return 5; } } export class HiddenAbilityRateBoosterModifier extends PersistentModifier { - constructor(type: ModifierType, stackCount?: integer) { + constructor(type: ModifierType, stackCount?: number) { super(type, stackCount); } @@ -2539,19 +2895,24 @@ export class HiddenAbilityRateBoosterModifier extends PersistentModifier { return new HiddenAbilityRateBoosterModifier(this.type, this.stackCount); } - apply(args: any[]): boolean { - (args[0] as Utils.IntegerHolder).value *= Math.pow(2, -1 - this.getStackCount()); + /** + * Applies {@linkcode HiddenAbilityRateBoosterModifier} + * @param boost {@linkcode NumberHolder} holding the boost value + * @returns always `true` + */ + override apply(boost: NumberHolder): boolean { + boost.value *= Math.pow(2, -1 - this.getStackCount()); return true; } - getMaxStackCount(scene: BattleScene): integer { + getMaxStackCount(scene: BattleScene): number { return 4; } } export class ShinyRateBoosterModifier extends PersistentModifier { - constructor(type: ModifierType, stackCount?: integer) { + constructor(type: ModifierType, stackCount?: number) { super(type, stackCount); } @@ -2563,19 +2924,24 @@ export class ShinyRateBoosterModifier extends PersistentModifier { return new ShinyRateBoosterModifier(this.type, this.stackCount); } - apply(args: any[]): boolean { - (args[0] as Utils.IntegerHolder).value *= Math.pow(2, 1 + this.getStackCount()); + /** + * Applies {@linkcode ShinyRateBoosterModifier} + * @param boost {@linkcode NumberHolder} holding the boost value + * @returns always `true` + */ + override apply(boost: NumberHolder): boolean { + boost.value *= Math.pow(2, 1 + this.getStackCount()); return true; } - getMaxStackCount(scene: BattleScene): integer { + getMaxStackCount(scene: BattleScene): number { return 4; } } export class LockModifierTiersModifier extends PersistentModifier { - constructor(type: ModifierType, stackCount?: integer) { + constructor(type: ModifierType, stackCount?: number) { super(type, stackCount); } @@ -2583,7 +2949,11 @@ export class LockModifierTiersModifier extends PersistentModifier { return modifier instanceof LockModifierTiersModifier; } - apply(args: any[]): boolean { + /** + * Applies {@linkcode LockModifierTiersModifier} + * @returns always `true` + */ + override apply(): boolean { return true; } @@ -2591,7 +2961,7 @@ export class LockModifierTiersModifier extends PersistentModifier { return new LockModifierTiersModifier(this.type, this.stackCount); } - getMaxStackCount(scene: BattleScene): integer { + getMaxStackCount(scene: BattleScene): number { return 1; } } @@ -2602,7 +2972,7 @@ export class LockModifierTiersModifier extends PersistentModifier { export class HealShopCostModifier extends PersistentModifier { public readonly shopMultiplier: number; - constructor(type: ModifierType, shopMultiplier: number, stackCount?: integer) { + constructor(type: ModifierType, shopMultiplier: number, stackCount?: number) { super(type, stackCount); this.shopMultiplier = shopMultiplier ?? 2.5; @@ -2616,8 +2986,12 @@ export class HealShopCostModifier extends PersistentModifier { return new HealShopCostModifier(this.type, this.shopMultiplier, this.stackCount); } - apply(args: any[]): boolean { - const moneyCost = args[0] as Utils.NumberHolder; + /** + * Applies {@linkcode HealShopCostModifier} + * @param cost {@linkcode NumberHolder} holding the heal shop cost + * @returns always `true` + */ + apply(moneyCost: NumberHolder): boolean { moneyCost.value = Math.floor(moneyCost.value * this.shopMultiplier); return true; @@ -2627,13 +3001,13 @@ export class HealShopCostModifier extends PersistentModifier { return super.getArgs().concat(this.shopMultiplier); } - getMaxStackCount(scene: BattleScene): integer { + getMaxStackCount(scene: BattleScene): number { return 1; } } export class BoostBugSpawnModifier extends PersistentModifier { - constructor(type: ModifierType, stackCount?: integer) { + constructor(type: ModifierType, stackCount?: number) { super(type, stackCount); } @@ -2645,17 +3019,21 @@ export class BoostBugSpawnModifier extends PersistentModifier { return new BoostBugSpawnModifier(this.type, this.stackCount); } - apply(args: any[]): boolean { + /** + * Applies {@linkcode BoostBugSpawnModifier} + * @returns always `true` + */ + override apply(): boolean { return true; } - getMaxStackCount(scene: BattleScene): integer { + getMaxStackCount(scene: BattleScene): number { return 1; } } export class SwitchEffectTransferModifier extends PokemonHeldItemModifier { - constructor(type: ModifierType, pokemonId: integer, stackCount?: integer) { + constructor(type: ModifierType, pokemonId: number, stackCount?: number) { super(type, pokemonId, stackCount); } @@ -2667,11 +3045,15 @@ export class SwitchEffectTransferModifier extends PokemonHeldItemModifier { return new SwitchEffectTransferModifier(this.type, this.pokemonId, this.stackCount); } - apply(args: any[]): boolean { + /** + * Applies {@linkcode SwitchEffectTransferModifier} + * @returns always `true` + */ + override apply(): boolean { return true; } - getMaxHeldItemCount(pokemon: Pokemon): integer { + getMaxHeldItemCount(pokemon: Pokemon): number { return 1; } } @@ -2682,18 +3064,17 @@ export class SwitchEffectTransferModifier extends PokemonHeldItemModifier { * @see {@linkcode ContactHeldItemTransferChanceModifier} */ export abstract class HeldItemTransferModifier extends PokemonHeldItemModifier { - constructor(type: ModifierType, pokemonId: integer, stackCount?: integer) { + constructor(type: ModifierType, pokemonId: number, stackCount?: number) { super(type, pokemonId, stackCount); } /** * Determines the targets to transfer items from when this applies. - * @param args\[0\] the {@linkcode Pokemon} holding this item + * @param pokemon the {@linkcode Pokemon} holding this item + * @param _args N/A * @returns the opponents of the source {@linkcode Pokemon} */ - getTargets(args: any[]): Pokemon[] { - const pokemon = args[0]; - + getTargets(pokemon?: Pokemon, ..._args: unknown[]): Pokemon[] { return pokemon instanceof Pokemon ? pokemon.getOpponents() : []; @@ -2702,12 +3083,12 @@ export abstract class HeldItemTransferModifier extends PokemonHeldItemModifier { /** * Steals an item from a set of target Pokemon. * This prioritizes high-tier held items when selecting the item to steal. - * @param args \[0\] The {@linkcode Pokemon} holding this item - * @returns true if an item was stolen; false otherwise. + * @param pokemon The {@linkcode Pokemon} holding this item + * @param _args N/A + * @returns `true` if an item was stolen; false otherwise. */ - apply(args: any[]): boolean { - const pokemon = args[0] as Pokemon; - const opponents = this.getTargets(args); + override apply(pokemon: Pokemon, ..._args: unknown[]): boolean { + const opponents = this.getTargets(pokemon); if (!opponents.length) { return false; @@ -2720,9 +3101,9 @@ export abstract class HeldItemTransferModifier extends PokemonHeldItemModifier { return false; } - const poolType = pokemon.isPlayer() ? ModifierTypes.ModifierPoolType.PLAYER : pokemon.hasTrainer() ? ModifierTypes.ModifierPoolType.TRAINER : ModifierTypes.ModifierPoolType.WILD; + const poolType = pokemon.isPlayer() ? ModifierPoolType.PLAYER : pokemon.hasTrainer() ? ModifierPoolType.TRAINER : ModifierPoolType.WILD; - const transferredModifierTypes: ModifierTypes.ModifierType[] = []; + const transferredModifierTypes: ModifierType[] = []; const itemModifiers = pokemon.scene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.pokemonId === targetPokemon.id && m.isTransferable, targetPokemon.isPlayer()) as PokemonHeldItemModifier[]; let highestItemTier = itemModifiers.map(m => m.type.getOrInferTier(poolType)).reduce((highestTier, tier) => Math.max(tier!, highestTier), 0); // TODO: is this bang correct? @@ -2758,9 +3139,9 @@ export abstract class HeldItemTransferModifier extends PokemonHeldItemModifier { return !!transferredModifierTypes.length; } - abstract getTransferredItemCount(): integer; + abstract getTransferredItemCount(): number; - abstract getTransferMessage(pokemon: Pokemon, targetPokemon: Pokemon, item: ModifierTypes.ModifierType): string; + abstract getTransferMessage(pokemon: Pokemon, targetPokemon: Pokemon, item: ModifierType): string; } /** @@ -2770,7 +3151,7 @@ export abstract class HeldItemTransferModifier extends PokemonHeldItemModifier { */ export class TurnHeldItemTransferModifier extends HeldItemTransferModifier { isTransferable: boolean = true; - constructor(type: ModifierType, pokemonId: integer, stackCount?: integer) { + constructor(type: ModifierType, pokemonId: number, stackCount?: number) { super(type, pokemonId, stackCount); } @@ -2782,15 +3163,15 @@ export class TurnHeldItemTransferModifier extends HeldItemTransferModifier { return new TurnHeldItemTransferModifier(this.type, this.pokemonId, this.stackCount); } - getTransferredItemCount(): integer { + getTransferredItemCount(): number { return this.getStackCount(); } - getTransferMessage(pokemon: Pokemon, targetPokemon: Pokemon, item: ModifierTypes.ModifierType): string { + getTransferMessage(pokemon: Pokemon, targetPokemon: Pokemon, item: ModifierType): string { return i18next.t("modifier:turnHeldItemTransferApply", { pokemonNameWithAffix: getPokemonNameWithAffix(targetPokemon), itemName: item.name, pokemonName: pokemon.getNameToRender(), typeName: this.type.name }); } - getMaxHeldItemCount(pokemon: Pokemon): integer { + getMaxHeldItemCount(pokemon: Pokemon): number { return 1; } @@ -2808,7 +3189,7 @@ export class TurnHeldItemTransferModifier extends HeldItemTransferModifier { export class ContactHeldItemTransferChanceModifier extends HeldItemTransferModifier { private chance: number; - constructor(type: ModifierType, pokemonId: integer, chancePercent: number, stackCount?: integer) { + constructor(type: ModifierType, pokemonId: number, chancePercent: number, stackCount?: number) { super(type, pokemonId, stackCount); this.chance = chancePercent / 100; @@ -2816,16 +3197,12 @@ export class ContactHeldItemTransferChanceModifier extends HeldItemTransferModif /** * Determines the target to steal items from when this applies. - * @param args\[0\] The {@linkcode Pokemon} holding this item - * @param args\[1\] The {@linkcode Pokemon} the holder is targeting with an attack - * @returns The target (args[1]) stored in array format for use in {@linkcode HeldItemTransferModifier.apply} + * @param _holderPokemon The {@linkcode Pokemon} holding this item + * @param targetPokemon The {@linkcode Pokemon} the holder is targeting with an attack + * @returns The target {@linkcode Pokemon} as array for further use in `apply` implementations */ - getTargets(args: any[]): Pokemon[] { - const target = args[1]; - - return target instanceof Pokemon - ? [ target ] - : []; + override getTargets(_holderPokemon: Pokemon, targetPokemon: Pokemon): Pokemon[] { + return !!targetPokemon ? [ targetPokemon ] : []; } matchType(modifier: Modifier): boolean { @@ -2840,21 +3217,21 @@ export class ContactHeldItemTransferChanceModifier extends HeldItemTransferModif return super.getArgs().concat(this.chance * 100); } - getTransferredItemCount(): integer { + getTransferredItemCount(): number { return Phaser.Math.RND.realInRange(0, 1) < (this.chance * this.getStackCount()) ? 1 : 0; } - getTransferMessage(pokemon: Pokemon, targetPokemon: Pokemon, item: ModifierTypes.ModifierType): string { + getTransferMessage(pokemon: Pokemon, targetPokemon: Pokemon, item: ModifierType): string { return i18next.t("modifier:contactHeldItemTransferApply", { pokemonNameWithAffix: getPokemonNameWithAffix(targetPokemon), itemName: item.name, pokemonName: getPokemonNameWithAffix(pokemon), typeName: this.type.name }); } - getMaxHeldItemCount(pokemon: Pokemon): integer { + getMaxHeldItemCount(pokemon: Pokemon): number { return 5; } } export class IvScannerModifier extends PersistentModifier { - constructor(type: ModifierType, stackCount?: integer) { + constructor(type: ModifierType, stackCount?: number) { super(type, stackCount); } @@ -2866,17 +3243,21 @@ export class IvScannerModifier extends PersistentModifier { return new IvScannerModifier(this.type, this.stackCount); } - apply(args: any[]): boolean { + /** + * Applies {@linkcode IvScannerModifier} + * @returns always `true` + */ + override apply(): boolean { return true; } - getMaxStackCount(scene: BattleScene): integer { + getMaxStackCount(scene: BattleScene): number { return 3; } } export class ExtraModifierModifier extends PersistentModifier { - constructor(type: ModifierType, stackCount?: integer) { + constructor(type: ModifierType, stackCount?: number) { super(type, stackCount); } @@ -2888,23 +3269,28 @@ export class ExtraModifierModifier extends PersistentModifier { return new ExtraModifierModifier(this.type, this.stackCount); } - apply(args: any[]): boolean { - (args[0] as Utils.IntegerHolder).value += this.getStackCount(); + /** + * Applies {@linkcode ExtraModifierModifier} + * @param count {NumberHolder} holding the count value + * @returns always `true` + */ + override apply(count: NumberHolder): boolean { + count.value += this.getStackCount(); return true; } - getMaxStackCount(scene: BattleScene): integer { + getMaxStackCount(scene: BattleScene): number { return 3; } } export abstract class EnemyPersistentModifier extends PersistentModifier { - constructor(type: ModifierType, stackCount?: integer) { + constructor(type: ModifierType, stackCount?: number) { super(type, stackCount); } - getMaxStackCount(scene: BattleScene): integer { + getMaxStackCount(scene: BattleScene): number { return 5; } } @@ -2912,25 +3298,30 @@ export abstract class EnemyPersistentModifier extends PersistentModifier { abstract class EnemyDamageMultiplierModifier extends EnemyPersistentModifier { protected damageMultiplier: number; - constructor(type: ModifierType, damageMultiplier: number, stackCount?: integer) { + constructor(type: ModifierType, damageMultiplier: number, stackCount?: number) { super(type, stackCount); this.damageMultiplier = damageMultiplier; } - apply(args: any[]): boolean { - (args[0] as Utils.NumberHolder).value = Math.floor((args[0] as Utils.NumberHolder).value * Math.pow(this.damageMultiplier, this.getStackCount())); + /** + * Applies {@linkcode EnemyDamageMultiplierModifier} + * @param multiplier {NumberHolder} holding the multiplier value + * @returns always `true` + */ + override apply(multiplier: NumberHolder): boolean { + multiplier.value = Math.floor(multiplier.value * Math.pow(this.damageMultiplier, this.getStackCount())); return true; } - getMaxStackCount(scene: BattleScene): integer { + getMaxStackCount(scene: BattleScene): number { return 99; } } export class EnemyDamageBoosterModifier extends EnemyDamageMultiplierModifier { - constructor(type: ModifierType, boostPercent: number, stackCount?: integer) { + constructor(type: ModifierType, boostPercent: number, stackCount?: number) { //super(type, 1 + ((boostPercent || 10) * 0.01), stackCount); super(type, 1.05, stackCount); // Hardcode multiplier temporarily } @@ -2947,13 +3338,13 @@ export class EnemyDamageBoosterModifier extends EnemyDamageMultiplierModifier { return [ (this.damageMultiplier - 1) * 100 ]; } - getMaxStackCount(scene: BattleScene): integer { + getMaxStackCount(scene: BattleScene): number { return 999; } } export class EnemyDamageReducerModifier extends EnemyDamageMultiplierModifier { - constructor(type: ModifierType, reductionPercent: number, stackCount?: integer) { + constructor(type: ModifierType, reductionPercent: number, stackCount?: number) { //super(type, 1 - ((reductionPercent || 5) * 0.01), stackCount); super(type, 0.975, stackCount); // Hardcode multiplier temporarily } @@ -2970,7 +3361,7 @@ export class EnemyDamageReducerModifier extends EnemyDamageMultiplierModifier { return [ (1 - this.damageMultiplier) * 100 ]; } - getMaxStackCount(scene: BattleScene): integer { + getMaxStackCount(scene: BattleScene): number { return scene.currentBattle.waveIndex < 2000 ? super.getMaxStackCount(scene) : 999; } } @@ -2978,7 +3369,7 @@ export class EnemyDamageReducerModifier extends EnemyDamageMultiplierModifier { export class EnemyTurnHealModifier extends EnemyPersistentModifier { public healPercent: number; - constructor(type: ModifierType, healPercent: number, stackCount?: integer) { + constructor(type: ModifierType, healPercent: number, stackCount?: number) { super(type, stackCount); // Hardcode temporarily @@ -2997,20 +3388,23 @@ export class EnemyTurnHealModifier extends EnemyPersistentModifier { return [ this.healPercent ]; } - apply(args: any[]): boolean { - const pokemon = args[0] as Pokemon; - - if (!pokemon.isFullHp()) { - const scene = pokemon.scene; - scene.unshiftPhase(new PokemonHealPhase(scene, pokemon.getBattlerIndex(), - Math.max(Math.floor(pokemon.getMaxHp() / (100 / this.healPercent)) * this.stackCount, 1), i18next.t("modifier:enemyTurnHealApply", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), true, false, false, false, true)); + /** + * Applies {@linkcode EnemyTurnHealModifier} + * @param enemyPokemon The {@linkcode Pokemon} to heal + * @returns `true` if the {@linkcode Pokemon} was healed + */ + override apply(enemyPokemon: Pokemon): boolean { + if (!enemyPokemon.isFullHp()) { + const scene = enemyPokemon.scene; + scene.unshiftPhase(new PokemonHealPhase(scene, enemyPokemon.getBattlerIndex(), + Math.max(Math.floor(enemyPokemon.getMaxHp() / (100 / this.healPercent)) * this.stackCount, 1), i18next.t("modifier:enemyTurnHealApply", { pokemonNameWithAffix: getPokemonNameWithAffix(enemyPokemon) }), true, false, false, false, true)); return true; } return false; } - getMaxStackCount(scene: BattleScene): integer { + getMaxStackCount(scene: BattleScene): number { return 10; } } @@ -3019,7 +3413,7 @@ export class EnemyAttackStatusEffectChanceModifier extends EnemyPersistentModifi public effect: StatusEffect; public chance: number; - constructor(type: ModifierType, effect: StatusEffect, chancePercent: number, stackCount?: integer) { + constructor(type: ModifierType, effect: StatusEffect, chancePercent: number, stackCount?: number) { super(type, stackCount); this.effect = effect; @@ -3039,16 +3433,20 @@ export class EnemyAttackStatusEffectChanceModifier extends EnemyPersistentModifi return [ this.effect, this.chance * 100 ]; } - apply(args: any[]): boolean { - const target = (args[0] as Pokemon); + /** + * Applies {@linkcode EnemyAttackStatusEffectChanceModifier} + * @param enemyPokemon {@linkcode Pokemon} to apply the status effect to + * @returns `true` if the {@linkcode Pokemon} was affected + */ + override apply(enemyPokemon: Pokemon): boolean { if (Phaser.Math.RND.realInRange(0, 1) < (this.chance * this.getStackCount())) { - return target.trySetStatus(this.effect, true); + return enemyPokemon.trySetStatus(this.effect, true); } return false; } - getMaxStackCount(scene: BattleScene): integer { + getMaxStackCount(scene: BattleScene): number { return 10; } } @@ -3056,7 +3454,7 @@ export class EnemyAttackStatusEffectChanceModifier extends EnemyPersistentModifi export class EnemyStatusEffectHealChanceModifier extends EnemyPersistentModifier { public chance: number; - constructor(type: ModifierType, chancePercent: number, stackCount?: integer) { + constructor(type: ModifierType, chancePercent: number, stackCount?: number) { super(type, stackCount); //Hardcode temporarily @@ -3075,19 +3473,23 @@ export class EnemyStatusEffectHealChanceModifier extends EnemyPersistentModifier return [ this.chance * 100 ]; } - apply(args: any[]): boolean { - const target = (args[0] as Pokemon); - if (target.status && Phaser.Math.RND.realInRange(0, 1) < (this.chance * this.getStackCount())) { - target.scene.queueMessage(getStatusEffectHealText(target.status.effect, getPokemonNameWithAffix(target))); - target.resetStatus(); - target.updateInfo(); + /** + * Applies {@linkcode EnemyStatusEffectHealChanceModifier} + * @param enemyPokemon The {@linkcode Pokemon} to heal + * @returns `true` if the {@linkcode Pokemon} was healed + */ + override apply(enemyPokemon: Pokemon): boolean { + if (enemyPokemon.status && Phaser.Math.RND.realInRange(0, 1) < (this.chance * this.getStackCount())) { + enemyPokemon.scene.queueMessage(getStatusEffectHealText(enemyPokemon.status.effect, getPokemonNameWithAffix(enemyPokemon))); + enemyPokemon.resetStatus(); + enemyPokemon.updateInfo(); return true; } return false; } - getMaxStackCount(scene: BattleScene): integer { + getMaxStackCount(scene: BattleScene): number { return 10; } } @@ -3095,7 +3497,7 @@ export class EnemyStatusEffectHealChanceModifier extends EnemyPersistentModifier export class EnemyEndureChanceModifier extends EnemyPersistentModifier { public chance: number; - constructor(type: ModifierType, chancePercent?: number, stackCount?: integer) { + constructor(type: ModifierType, chancePercent?: number, stackCount?: number) { super(type, stackCount || 10); //Hardcode temporarily @@ -3114,9 +3516,12 @@ export class EnemyEndureChanceModifier extends EnemyPersistentModifier { return [ this.chance * 100 ]; } - apply(args: any[]): boolean { - const target = (args[0] as Pokemon); - + /** + * Applies {@linkcode EnemyEndureChanceModifier} + * @param target {@linkcode Pokemon} to apply the {@linkcode BattlerTagType.ENDURING} chance to + * @returns `true` if {@linkcode Pokemon} endured + */ + override apply(target: Pokemon): boolean { if (target.battleData.endured || Phaser.Math.RND.realInRange(0, 1) >= (this.chance * this.getStackCount())) { return false; } @@ -3128,7 +3533,7 @@ export class EnemyEndureChanceModifier extends EnemyPersistentModifier { return true; } - getMaxStackCount(scene: BattleScene): integer { + getMaxStackCount(scene: BattleScene): number { return 10; } } @@ -3136,7 +3541,7 @@ export class EnemyEndureChanceModifier extends EnemyPersistentModifier { export class EnemyFusionChanceModifier extends EnemyPersistentModifier { private chance: number; - constructor(type: ModifierType, chancePercent: number, stackCount?: integer) { + constructor(type: ModifierType, chancePercent: number, stackCount?: number) { super(type, stackCount); this.chance = chancePercent / 100; @@ -3154,17 +3559,22 @@ export class EnemyFusionChanceModifier extends EnemyPersistentModifier { return [ this.chance * 100 ]; } - apply(args: any[]): boolean { + /** + * Applies {@linkcode EnemyFusionChanceModifier} + * @param isFusion {@linkcode BooleanHolder} that will be set to `true` if the {@linkcode EnemyPokemon} is a fusion + * @returns `true` if the {@linkcode EnemyPokemon} is a fusion + */ + override apply(isFusion: BooleanHolder): boolean { if (Phaser.Math.RND.realInRange(0, 1) >= (this.chance * this.getStackCount())) { return false; } - (args[0] as Utils.BooleanHolder).value = true; + isFusion.value = true; return true; } - getMaxStackCount(scene: BattleScene): integer { + getMaxStackCount(scene: BattleScene): number { return 10; } } @@ -3177,7 +3587,7 @@ export class EnemyFusionChanceModifier extends EnemyPersistentModifier { * @param isPlayer {@linkcode boolean} for whether the player (`true`) or enemy (`false`) is being overridden */ export function overrideModifiers(scene: BattleScene, isPlayer: boolean = true): void { - const modifiersOverride: ModifierTypes.ModifierOverride[] = isPlayer ? Overrides.STARTING_MODIFIER_OVERRIDE : Overrides.OPP_MODIFIER_OVERRIDE; + const modifiersOverride: ModifierOverride[] = isPlayer ? Overrides.STARTING_MODIFIER_OVERRIDE : Overrides.OPP_MODIFIER_OVERRIDE; if (!modifiersOverride || modifiersOverride.length === 0 || !scene) { return; } @@ -3191,7 +3601,7 @@ export function overrideModifiers(scene: BattleScene, isPlayer: boolean = true): const modifierFunc = modifierTypes[item.name]; let modifierType: ModifierType | null = modifierFunc(); - if (modifierType instanceof ModifierTypes.ModifierTypeGenerator) { + if (modifierType instanceof ModifierTypeGenerator) { const pregenArgs = ("type" in item) && (item.type !== null) ? [item.type] : undefined; modifierType = modifierType.generateType([], pregenArgs); } @@ -3218,7 +3628,7 @@ export function overrideModifiers(scene: BattleScene, isPlayer: boolean = true): * @param isPlayer {@linkcode boolean} for whether the {@linkcode pokemon} is the player's (`true`) or an enemy (`false`) */ export function overrideHeldItems(scene: BattleScene, pokemon: Pokemon, isPlayer: boolean = true): void { - const heldItemsOverride: ModifierTypes.ModifierOverride[] = isPlayer ? Overrides.STARTING_HELD_ITEMS_OVERRIDE : Overrides.OPP_HELD_ITEMS_OVERRIDE; + const heldItemsOverride: ModifierOverride[] = isPlayer ? Overrides.STARTING_HELD_ITEMS_OVERRIDE : Overrides.OPP_HELD_ITEMS_OVERRIDE; if (!heldItemsOverride || heldItemsOverride.length === 0 || !scene) { return; } @@ -3232,7 +3642,7 @@ export function overrideHeldItems(scene: BattleScene, pokemon: Pokemon, isPlayer let modifierType: ModifierType | null = modifierFunc(); const qty = item.count || 1; - if (modifierType instanceof ModifierTypes.ModifierTypeGenerator) { + if (modifierType instanceof ModifierTypeGenerator) { const pregenArgs = ("type" in item) && (item.type !== null) ? [item.type] : undefined; modifierType = modifierType.generateType([], pregenArgs); } diff --git a/src/phases/battle-end-phase.ts b/src/phases/battle-end-phase.ts index eaa458af904..bae61aa2288 100644 --- a/src/phases/battle-end-phase.ts +++ b/src/phases/battle-end-phase.ts @@ -57,7 +57,7 @@ export class BattleEndPhase extends BattlePhase { if (m instanceof LapsingPokemonHeldItemModifier) { args.push(this.scene.getPokemonById(m.pokemonId)); } - if (!m.lapse(args)) { + if (!m.lapse(...args)) { this.scene.removeModifier(m); } } diff --git a/src/phases/berry-phase.ts b/src/phases/berry-phase.ts index 66ecaa6c7f8..e419aa6692d 100644 --- a/src/phases/berry-phase.ts +++ b/src/phases/berry-phase.ts @@ -15,7 +15,7 @@ export class BerryPhase extends FieldPhase { this.executeForAll((pokemon) => { const hasUsableBerry = !!this.scene.findModifier((m) => { - return m instanceof BerryModifier && m.shouldApply([pokemon]); + return m instanceof BerryModifier && m.shouldApply(pokemon); }, pokemon.isPlayer()); if (hasUsableBerry) { @@ -29,7 +29,7 @@ export class BerryPhase extends FieldPhase { new CommonAnimPhase(this.scene, pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.USE_ITEM) ); - for (const berryModifier of this.scene.applyModifiers(BerryModifier, pokemon.isPlayer(), pokemon) as BerryModifier[]) { + for (const berryModifier of this.scene.applyModifiers(BerryModifier, pokemon.isPlayer(), pokemon)) { if (berryModifier.consumed) { if (!--berryModifier.stackCount) { this.scene.removeModifier(berryModifier); From c58b5e943b986f084b3592889e8eac352ed9b06a Mon Sep 17 00:00:00 2001 From: schmidtc1 <62030095+schmidtc1@users.noreply.github.com> Date: Thu, 3 Oct 2024 11:49:33 -0400 Subject: [PATCH 007/153] [P2] Fixes party status cure moves only curing the player's pokemon, even when used by enemy pokemon (#3369) * Fixes bug with Status Cure moves only curing player pokemon, refactors PartyStatusCureAttr, removes PartyStatusCurePhase * Adds check for user ID, since user always cures its own status regardless of ability * Adds unit tests for sparkly swirl * Merge and fix conflicts * Fix conflicts with SPLASH_ONLY * Fix failing sparkly swirl test due to splash_only * Adds unit tests for heal bell and aromatherapy * Update src/data/move.ts --------- Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> --- src/data/move.ts | 27 ++++++- src/phases/party-status-cure-phase.ts | 48 ------------ src/test/moves/aromatherapy.test.ts | 101 ++++++++++++++++++++++++++ src/test/moves/heal_bell.test.ts | 101 ++++++++++++++++++++++++++ src/test/moves/sparkly_swirl.test.ts | 86 ++++++++++++++++++++++ 5 files changed, 311 insertions(+), 52 deletions(-) delete mode 100644 src/phases/party-status-cure-phase.ts create mode 100644 src/test/moves/aromatherapy.test.ts create mode 100644 src/test/moves/heal_bell.test.ts create mode 100644 src/test/moves/sparkly_swirl.test.ts diff --git a/src/data/move.ts b/src/data/move.ts index 13ab84e8898..d547cd56524 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -25,7 +25,6 @@ import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { MoveUsedEvent } from "#app/events/battle-scene"; import { BATTLE_STATS, type BattleStat, EFFECTIVE_STATS, type EffectiveStat, getStatKey, Stat } from "#app/enums/stat"; -import { PartyStatusCurePhase } from "#app/phases/party-status-cure-phase"; import { BattleEndPhase } from "#app/phases/battle-end-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; import { MovePhase } from "#app/phases/move-phase"; @@ -34,6 +33,7 @@ import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { SwitchPhase } from "#app/phases/switch-phase"; import { SwitchSummonPhase } from "#app/phases/switch-summon-phase"; +import { ShowAbilityPhase } from "#app/phases/show-ability-phase"; import { SpeciesFormChangeRevertWeatherFormTrigger } from "./pokemon-forms"; import { GameMode } from "#app/game-mode"; import { applyChallenges, ChallengeType } from "./challenge"; @@ -1585,12 +1585,31 @@ export class PartyStatusCureAttr extends MoveEffectAttr { if (!this.canApply(user, target, move, args)) { return false; } - this.addPartyCurePhase(user); + const partyPokemon = user.isPlayer() ? user.scene.getParty() : user.scene.getEnemyParty(); + partyPokemon.forEach(p => this.cureStatus(p, user.id)); + + if (this.message) { + user.scene.queueMessage(this.message); + } + return true; } - addPartyCurePhase(user: Pokemon) { - user.scene.unshiftPhase(new PartyStatusCurePhase(user.scene, user, this.message, this.abilityCondition)); + /** + * Tries to cure the status of the given {@linkcode Pokemon} + * @param pokemon The {@linkcode Pokemon} to cure. + * @param userId The ID of the (move) {@linkcode Pokemon | user}. + */ + public cureStatus(pokemon: Pokemon, userId: number) { + if (!pokemon.isOnField() || pokemon.id === userId) { // user always cures its own status, regardless of ability + pokemon.resetStatus(false); + pokemon.updateInfo(); + } else if (!pokemon.hasAbility(this.abilityCondition)) { + pokemon.resetStatus(); + pokemon.updateInfo(); + } else { + pokemon.scene.unshiftPhase(new ShowAbilityPhase(pokemon.scene, pokemon.id, pokemon.getPassiveAbility()?.id === this.abilityCondition)); + } } } diff --git a/src/phases/party-status-cure-phase.ts b/src/phases/party-status-cure-phase.ts deleted file mode 100644 index e4903c7fc1f..00000000000 --- a/src/phases/party-status-cure-phase.ts +++ /dev/null @@ -1,48 +0,0 @@ -import BattleScene from "#app/battle-scene"; -import { Abilities } from "#app/enums/abilities"; -import Pokemon from "#app/field/pokemon"; -import { BattlePhase } from "./battle-phase"; -import { ShowAbilityPhase } from "./show-ability-phase"; - -/** - * Cures the party of all non-volatile status conditions, shows a message - * @param {BattleScene} scene The current scene - * @param {Pokemon} user The user of the move that cures the party - * @param {string} message The message that should be displayed - * @param {Abilities} abilityCondition Pokemon with this ability will not be affected ie. Soundproof - */ -export class PartyStatusCurePhase extends BattlePhase { - private user: Pokemon; - private message: string; - private abilityCondition: Abilities; - - constructor(scene: BattleScene, user: Pokemon, message: string, abilityCondition: Abilities) { - super(scene); - - this.user = user; - this.message = message; - this.abilityCondition = abilityCondition; - } - - start() { - super.start(); - for (const pokemon of this.scene.getParty()) { - if (!pokemon.isOnField() || pokemon === this.user) { - pokemon.resetStatus(false); - pokemon.updateInfo(true); - } else { - if (!pokemon.hasAbility(this.abilityCondition)) { - pokemon.resetStatus(); - pokemon.updateInfo(true); - } else { - // Manually show ability bar, since we're not hooked into the targeting system - pokemon.scene.unshiftPhase(new ShowAbilityPhase(pokemon.scene, pokemon.id, pokemon.getPassiveAbility()?.id === this.abilityCondition)); - } - } - } - if (this.message) { - this.scene.queueMessage(this.message); - } - this.end(); - } -} diff --git a/src/test/moves/aromatherapy.test.ts b/src/test/moves/aromatherapy.test.ts new file mode 100644 index 00000000000..acc2e9c5fae --- /dev/null +++ b/src/test/moves/aromatherapy.test.ts @@ -0,0 +1,101 @@ +import { StatusEffect } from "#app/enums/status-effect"; +import { CommandPhase } from "#app/phases/command-phase"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; + +describe("Moves - Aromatherapy", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([Moves.AROMATHERAPY, Moves.SPLASH]) + .statusEffect(StatusEffect.BURN) + .battleType("double") + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should cure status effect of the user, its ally, and all party pokemon", async () => { + await game.classicMode.startBattle([Species.RATTATA, Species.RATTATA, Species.RATTATA]); + const [leftPlayer, rightPlayer, partyPokemon] = game.scene.getParty(); + + vi.spyOn(leftPlayer, "resetStatus"); + vi.spyOn(rightPlayer, "resetStatus"); + vi.spyOn(partyPokemon, "resetStatus"); + + game.move.select(Moves.AROMATHERAPY, 0); + await game.phaseInterceptor.to(CommandPhase); + game.move.select(Moves.SPLASH, 1); + await game.toNextTurn(); + + expect(leftPlayer.resetStatus).toHaveBeenCalledOnce(); + expect(rightPlayer.resetStatus).toHaveBeenCalledOnce(); + expect(partyPokemon.resetStatus).toHaveBeenCalledOnce(); + + expect(leftPlayer.status?.effect).toBeUndefined(); + expect(rightPlayer.status?.effect).toBeUndefined(); + expect(partyPokemon.status?.effect).toBeUndefined(); + }); + + it("should not cure status effect of the target/target's allies", async () => { + game.override.enemyStatusEffect(StatusEffect.BURN); + await game.classicMode.startBattle([Species.RATTATA, Species.RATTATA]); + const [leftOpp, rightOpp] = game.scene.getEnemyField(); + + vi.spyOn(leftOpp, "resetStatus"); + vi.spyOn(rightOpp, "resetStatus"); + + game.move.select(Moves.AROMATHERAPY, 0); + await game.phaseInterceptor.to(CommandPhase); + game.move.select(Moves.SPLASH, 1); + await game.toNextTurn(); + + expect(leftOpp.resetStatus).toHaveBeenCalledTimes(0); + expect(rightOpp.resetStatus).toHaveBeenCalledTimes(0); + + expect(leftOpp.status?.effect).toBeTruthy(); + expect(rightOpp.status?.effect).toBeTruthy(); + + expect(leftOpp.status?.effect).toBe(StatusEffect.BURN); + expect(rightOpp.status?.effect).toBe(StatusEffect.BURN); + }); + + it("should not cure status effect of allies ON FIELD with Sap Sipper, should still cure allies in party", async () => { + game.override.ability(Abilities.SAP_SIPPER); + await game.classicMode.startBattle([Species.RATTATA, Species.RATTATA, Species.RATTATA]); + const [leftPlayer, rightPlayer, partyPokemon] = game.scene.getParty(); + + vi.spyOn(leftPlayer, "resetStatus"); + vi.spyOn(rightPlayer, "resetStatus"); + vi.spyOn(partyPokemon, "resetStatus"); + + game.move.select(Moves.AROMATHERAPY, 0); + await game.phaseInterceptor.to(CommandPhase); + game.move.select(Moves.SPLASH, 1); + await game.toNextTurn(); + + expect(leftPlayer.resetStatus).toHaveBeenCalledOnce(); + expect(rightPlayer.resetStatus).toHaveBeenCalledTimes(0); + expect(partyPokemon.resetStatus).toHaveBeenCalledOnce(); + + expect(leftPlayer.status?.effect).toBeUndefined(); + expect(rightPlayer.status?.effect).toBe(StatusEffect.BURN); + expect(partyPokemon.status?.effect).toBeUndefined(); + }); +}); diff --git a/src/test/moves/heal_bell.test.ts b/src/test/moves/heal_bell.test.ts new file mode 100644 index 00000000000..1421809cf6c --- /dev/null +++ b/src/test/moves/heal_bell.test.ts @@ -0,0 +1,101 @@ +import { StatusEffect } from "#app/enums/status-effect"; +import { CommandPhase } from "#app/phases/command-phase"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; + +describe("Moves - Heal Bell", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([Moves.HEAL_BELL, Moves.SPLASH]) + .statusEffect(StatusEffect.BURN) + .battleType("double") + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should cure status effect of the user, its ally, and all party pokemon", async () => { + await game.classicMode.startBattle([Species.RATTATA, Species.RATTATA, Species.RATTATA]); + const [leftPlayer, rightPlayer, partyPokemon] = game.scene.getParty(); + + vi.spyOn(leftPlayer, "resetStatus"); + vi.spyOn(rightPlayer, "resetStatus"); + vi.spyOn(partyPokemon, "resetStatus"); + + game.move.select(Moves.HEAL_BELL, 0); + await game.phaseInterceptor.to(CommandPhase); + game.move.select(Moves.SPLASH, 1); + await game.toNextTurn(); + + expect(leftPlayer.resetStatus).toHaveBeenCalledOnce(); + expect(rightPlayer.resetStatus).toHaveBeenCalledOnce(); + expect(partyPokemon.resetStatus).toHaveBeenCalledOnce(); + + expect(leftPlayer.status?.effect).toBeUndefined(); + expect(rightPlayer.status?.effect).toBeUndefined(); + expect(partyPokemon.status?.effect).toBeUndefined(); + }); + + it("should not cure status effect of the target/target's allies", async () => { + game.override.enemyStatusEffect(StatusEffect.BURN); + await game.classicMode.startBattle([Species.RATTATA, Species.RATTATA]); + const [leftOpp, rightOpp] = game.scene.getEnemyField(); + + vi.spyOn(leftOpp, "resetStatus"); + vi.spyOn(rightOpp, "resetStatus"); + + game.move.select(Moves.HEAL_BELL, 0); + await game.phaseInterceptor.to(CommandPhase); + game.move.select(Moves.SPLASH, 1); + await game.toNextTurn(); + + expect(leftOpp.resetStatus).toHaveBeenCalledTimes(0); + expect(rightOpp.resetStatus).toHaveBeenCalledTimes(0); + + expect(leftOpp.status?.effect).toBeTruthy(); + expect(rightOpp.status?.effect).toBeTruthy(); + + expect(leftOpp.status?.effect).toBe(StatusEffect.BURN); + expect(rightOpp.status?.effect).toBe(StatusEffect.BURN); + }); + + it("should not cure status effect of allies ON FIELD with Soundproof, should still cure allies in party", async () => { + game.override.ability(Abilities.SOUNDPROOF); + await game.classicMode.startBattle([Species.RATTATA, Species.RATTATA, Species.RATTATA]); + const [leftPlayer, rightPlayer, partyPokemon] = game.scene.getParty(); + + vi.spyOn(leftPlayer, "resetStatus"); + vi.spyOn(rightPlayer, "resetStatus"); + vi.spyOn(partyPokemon, "resetStatus"); + + game.move.select(Moves.HEAL_BELL, 0); + await game.phaseInterceptor.to(CommandPhase); + game.move.select(Moves.SPLASH, 1); + await game.toNextTurn(); + + expect(leftPlayer.resetStatus).toHaveBeenCalledOnce(); + expect(rightPlayer.resetStatus).toHaveBeenCalledTimes(0); + expect(partyPokemon.resetStatus).toHaveBeenCalledOnce(); + + expect(leftPlayer.status?.effect).toBeUndefined(); + expect(rightPlayer.status?.effect).toBe(StatusEffect.BURN); + expect(partyPokemon.status?.effect).toBeUndefined(); + }); +}); diff --git a/src/test/moves/sparkly_swirl.test.ts b/src/test/moves/sparkly_swirl.test.ts new file mode 100644 index 00000000000..83c154e57e7 --- /dev/null +++ b/src/test/moves/sparkly_swirl.test.ts @@ -0,0 +1,86 @@ +import { allMoves } from "#app/data/move"; +import { StatusEffect } from "#app/enums/status-effect"; +import { CommandPhase } from "#app/phases/command-phase"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("Moves - Sparkly Swirl", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ type: Phaser.HEADLESS }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .enemySpecies(Species.SHUCKLE) + .enemyLevel(100) + .enemyMoveset(Moves.SPLASH) + .enemyAbility(Abilities.BALL_FETCH) + .moveset([Moves.SPARKLY_SWIRL, Moves.SPLASH]) + .ability(Abilities.BALL_FETCH); + + vi.spyOn(allMoves[Moves.SPARKLY_SWIRL], "accuracy", "get").mockReturnValue(100); + }); + + it("should cure status effect of the user, its ally, and all party pokemon", async () => { + game.override + .battleType("double") + .statusEffect(StatusEffect.BURN); + await game.classicMode.startBattle([Species.RATTATA, Species.RATTATA, Species.RATTATA]); + const [leftPlayer, rightPlayer, partyPokemon] = game.scene.getParty(); + const leftOpp = game.scene.getEnemyPokemon()!; + + vi.spyOn(leftPlayer, "resetStatus"); + vi.spyOn(rightPlayer, "resetStatus"); + vi.spyOn(partyPokemon, "resetStatus"); + + game.move.select(Moves.SPARKLY_SWIRL, 0, leftOpp.getBattlerIndex()); + await game.phaseInterceptor.to(CommandPhase); + game.move.select(Moves.SPLASH, 1); + await game.toNextTurn(); + + expect(leftPlayer.resetStatus).toHaveBeenCalledOnce(); + expect(rightPlayer.resetStatus).toHaveBeenCalledOnce(); + expect(partyPokemon.resetStatus).toHaveBeenCalledOnce(); + + expect(leftPlayer.status?.effect).toBeUndefined(); + expect(rightPlayer.status?.effect).toBeUndefined(); + expect(partyPokemon.status?.effect).toBeUndefined(); + }); + + it("should not cure status effect of the target/target's allies", async () => { + game.override + .battleType("double") + .enemyStatusEffect(StatusEffect.BURN); + await game.classicMode.startBattle([Species.RATTATA, Species.RATTATA]); + const [leftOpp, rightOpp] = game.scene.getEnemyField(); + + vi.spyOn(leftOpp, "resetStatus"); + vi.spyOn(rightOpp, "resetStatus"); + + game.move.select(Moves.SPARKLY_SWIRL, 0, leftOpp.getBattlerIndex()); + await game.phaseInterceptor.to(CommandPhase); + game.move.select(Moves.SPLASH, 1); + await game.toNextTurn(); + + expect(leftOpp.resetStatus).toHaveBeenCalledTimes(0); + expect(rightOpp.resetStatus).toHaveBeenCalledTimes(0); + + expect(leftOpp.status?.effect).toBeTruthy(); + expect(rightOpp.status?.effect).toBeTruthy(); + + expect(leftOpp.status?.effect).toBe(StatusEffect.BURN); + expect(rightOpp.status?.effect).toBe(StatusEffect.BURN); + }); +}); From 76e25a6d6f316dd78e59a3792f39d3b8f999478c Mon Sep 17 00:00:00 2001 From: "Adrian T." <68144167+torranx@users.noreply.github.com> Date: Fri, 4 Oct 2024 00:58:21 +0800 Subject: [PATCH 008/153] [Move] Update Tera Starstorm (still Partial), Readd Partial tag to Tera Blast (#4549) * fully implement tera starstorm * add docs * add tests * add override keyword * account for fusion * swap party positions * add partial tag to tera blast * address comments --- src/data/move.ts | 46 +++++++++++-- src/field/pokemon.ts | 9 +++ src/test/moves/tera_starstorm.test.ts | 98 +++++++++++++++++++++++++++ 3 files changed, 147 insertions(+), 6 deletions(-) create mode 100644 src/test/moves/tera_starstorm.test.ts diff --git a/src/data/move.ts b/src/data/move.ts index d547cd56524..8c9e8b0fb99 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -3942,7 +3942,14 @@ export class PhotonGeyserCategoryAttr extends VariableMoveCategoryAttr { } } -export class TeraBlastCategoryAttr extends VariableMoveCategoryAttr { +/** + * Attribute used for tera moves that change category based on the user's Atk and SpAtk stats + * Note: Currently, `getEffectiveStat` does not ignore all abilities that affect stats except those + * with the attribute of `StatMultiplierAbAttr` + * TODO: Remove the `.partial()` tag from Tera Blast and Tera Starstorm when the above issue is resolved + * @extends VariableMoveCategoryAttr + */ +export class TeraMoveCategoryAttr extends VariableMoveCategoryAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const category = (args[0] as Utils.NumberHolder); @@ -4031,6 +4038,30 @@ export class VariableMoveTypeAttr extends MoveAttr { } } +/** + * Attribute used for Tera Starstorm that changes the move type to Stellar + * @extends VariableMoveTypeAttr + */ +export class TeraStarstormTypeAttr extends VariableMoveTypeAttr { + /** + * + * @param user the {@linkcode Pokemon} using the move + * @param target n/a + * @param move n/a + * @param args[0] {@linkcode Utils.NumberHolder} the move type + * @returns `true` if the move type is changed to {@linkcode Type.STELLAR}, `false` otherwise + */ + override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + if (user.isTerastallized() && (user.hasFusionSpecies(Species.TERAPAGOS) || user.species.speciesId === Species.TERAPAGOS)) { + const moveType = args[0] as Utils.NumberHolder; + + moveType.value = Type.STELLAR; + return true; + } + return false; + } +} + export class FormChangeItemTypeAttr extends VariableMoveTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const moveType = args[0]; @@ -9190,7 +9221,7 @@ export function initMoves() { .attr(HalfSacrificialAttr), new AttackMove(Moves.EXPANDING_FORCE, Type.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 8) .attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.PSYCHIC && user.isGrounded() ? 1.5 : 1) - .attr(VariableTargetAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.PSYCHIC && user.isGrounded() ? 6 : 3), + .attr(VariableTargetAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.PSYCHIC && user.isGrounded() ? MoveTarget.ALL_NEAR_ENEMIES : MoveTarget.NEAR_OTHER), new AttackMove(Moves.STEEL_ROLLER, Type.STEEL, MoveCategory.PHYSICAL, 130, 100, 5, -1, 0, 8) .attr(ClearTerrainAttr) .condition((user, target, move) => !!user.scene.arena.terrain), @@ -9464,10 +9495,11 @@ export function initMoves() { .unimplemented(), End Unused */ new AttackMove(Moves.TERA_BLAST, Type.NORMAL, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 9) - .attr(TeraBlastCategoryAttr) + .attr(TeraMoveCategoryAttr) .attr(TeraBlastTypeAttr) .attr(TeraBlastPowerAttr) - .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -1, true, (user, target, move) => user.isTerastallized() && user.isOfType(Type.STELLAR)), + .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -1, true, (user, target, move) => user.isTerastallized() && user.isOfType(Type.STELLAR)) + .partial(), /** Does not ignore abilities that affect stats, relevant in determining the move's category {@see TeraMoveCategoryAttr} */ new SelfStatusMove(Moves.SILK_TRAP, Type.BUG, -1, 10, -1, 4, 9) .attr(ProtectAttr, BattlerTagType.SILK_TRAP) .condition(failIfLastCondition), @@ -9657,8 +9689,10 @@ export function initMoves() { .attr(ElectroShotChargeAttr) .ignoresVirtual(), new AttackMove(Moves.TERA_STARSTORM, Type.NORMAL, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 9) - .attr(TeraBlastCategoryAttr) - .partial(), + .attr(TeraMoveCategoryAttr) + .attr(TeraStarstormTypeAttr) + .attr(VariableTargetAttr, (user, target, move) => (user.hasFusionSpecies(Species.TERAPAGOS) || user.species.speciesId === Species.TERAPAGOS) && user.isTerastallized() ? MoveTarget.ALL_NEAR_ENEMIES : MoveTarget.NEAR_OTHER) + .partial(), /** Does not ignore abilities that affect stats, relevant in determining the move's category {@see TeraMoveCategoryAttr} */ new AttackMove(Moves.FICKLE_BEAM, Type.DRAGON, MoveCategory.SPECIAL, 80, 100, 5, 30, 0, 9) .attr(PreMoveMessageAttr, doublePowerChanceMessageFunc) .attr(DoublePowerChanceAttr), diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index d5411496223..de18dfb74eb 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1087,6 +1087,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return !!this.fusionSpecies; } + /** + * Checks if the {@linkcode Pokemon} has a fusion with the specified {@linkcode Species}. + * @param species the pokemon {@linkcode Species} to check + * @returns `true` if the {@linkcode Pokemon} has a fusion with the specified {@linkcode Species}, `false` otherwise + */ + hasFusionSpecies(species: Species): boolean { + return this.fusionSpecies?.speciesId === species; + } + abstract isBoss(): boolean; getMoveset(ignoreOverride?: boolean): (PokemonMove | null)[] { diff --git a/src/test/moves/tera_starstorm.test.ts b/src/test/moves/tera_starstorm.test.ts new file mode 100644 index 00000000000..20dbc0b77d6 --- /dev/null +++ b/src/test/moves/tera_starstorm.test.ts @@ -0,0 +1,98 @@ +import { BattlerIndex } from "#app/battle"; +import { Type } from "#app/data/type"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; + +describe("Moves - Tera Starstorm", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([Moves.TERA_STARSTORM, Moves.SPLASH]) + .battleType("double") + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH) + .enemyLevel(30) + .enemySpecies(Species.MAGIKARP) + .startingHeldItems([{ name: "TERA_SHARD", type: Type.FIRE }]); + }); + + it("changes type to Stellar when used by Terapagos in its Stellar Form", async () => { + game.override.battleType("single"); + await game.classicMode.startBattle([Species.TERAPAGOS]); + + const terapagos = game.scene.getPlayerPokemon()!; + + vi.spyOn(terapagos, "getMoveType"); + + game.move.select(Moves.TERA_STARSTORM); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(terapagos.isTerastallized()).toBe(true); + expect(terapagos.getMoveType).toHaveReturnedWith(Type.STELLAR); + }); + + it("targets both opponents in a double battle when used by Terapagos in its Stellar Form", async () => { + await game.classicMode.startBattle([Species.MAGIKARP, Species.TERAPAGOS]); + + game.move.select(Moves.TERA_STARSTORM, 0, BattlerIndex.ENEMY); + game.move.select(Moves.TERA_STARSTORM, 1); + + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); + + const enemyField = game.scene.getEnemyField(); + + // Pokemon other than Terapagos should not be affected - only hits one target + await game.phaseInterceptor.to("MoveEndPhase"); + expect(enemyField.some(pokemon => pokemon.isFullHp())).toBe(true); + + // Terapagos in Stellar Form should hit both targets + await game.phaseInterceptor.to("MoveEndPhase"); + expect(enemyField.every(pokemon => pokemon.isFullHp())).toBe(false); + }); + + it("applies the effects when Terapagos in Stellar Form is fused with another Pokemon", async () => { + await game.classicMode.startBattle([Species.TERAPAGOS, Species.CHARMANDER, Species.MAGIKARP]); + + const fusionedMon = game.scene.getParty()[0]; + const magikarp = game.scene.getParty()[2]; + + // Fuse party members (taken from PlayerPokemon.fuse(...) function) + fusionedMon.fusionSpecies = magikarp.species; + fusionedMon.fusionFormIndex = magikarp.formIndex; + fusionedMon.fusionAbilityIndex = magikarp.abilityIndex; + fusionedMon.fusionShiny = magikarp.shiny; + fusionedMon.fusionVariant = magikarp.variant; + fusionedMon.fusionGender = magikarp.gender; + fusionedMon.fusionLuck = magikarp.luck; + + vi.spyOn(fusionedMon, "getMoveType"); + + game.move.select(Moves.TERA_STARSTORM, 0); + game.move.select(Moves.SPLASH, 1); + await game.phaseInterceptor.to("TurnEndPhase"); + + // Fusion and terastallized + expect(fusionedMon.isFusion()).toBe(true); + expect(fusionedMon.isTerastallized()).toBe(true); + // Move effects should be applied + expect(fusionedMon.getMoveType).toHaveReturnedWith(Type.STELLAR); + expect(game.scene.getEnemyField().every(pokemon => pokemon.isFullHp())).toBe(false); + }); +}); From 46c84155b3a881e0bb6f5b97a340b7b2d82c03cd Mon Sep 17 00:00:00 2001 From: flx-sta <50131232+flx-sta@users.noreply.github.com> Date: Thu, 3 Oct 2024 11:53:35 -0700 Subject: [PATCH 009/153] [Beta P1] Fix rare candy crashing (#4561) --- src/modifier/modifier.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 4f1f9833602..b8905bc9bf1 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -2204,7 +2204,7 @@ export class PokemonLevelIncrementModifier extends ConsumablePokemonModifier { * @param levelCount The amount of levels to increment * @returns always `true` */ - override apply(playerPokemon: PlayerPokemon, levelCount: NumberHolder): boolean { + override apply(playerPokemon: PlayerPokemon, levelCount: NumberHolder = new NumberHolder(1)): boolean { playerPokemon.scene.applyModifiers(LevelIncrementBoosterModifier, true, levelCount); playerPokemon.level += levelCount.value; From af51c1f2f0b6eb1ccebe6183833c2693ec2b8172 Mon Sep 17 00:00:00 2001 From: Mumble <171087428+frutescens@users.noreply.github.com> Date: Thu, 3 Oct 2024 11:56:35 -0700 Subject: [PATCH 010/153] [Move] Unique message for heal block, taunt, torment, and imprison (#4530) Co-authored-by: frutescens --- src/data/battler-tags.ts | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index d8094f96368..42775775ac4 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -2267,7 +2267,7 @@ export class HealBlockTag extends MoveRestrictionBattlerTag { * Uses DisabledTag's selectionDeniedText() message */ override selectionDeniedText(pokemon: Pokemon, move: Moves): string { - return i18next.t("battle:moveDisabled", { moveName: allMoves[move].name }); + return i18next.t("battle:moveDisabledHealBlock", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: allMoves[move].name, healBlockName: allMoves[Moves.HEAL_BLOCK].name }); } /** @@ -2277,7 +2277,7 @@ export class HealBlockTag extends MoveRestrictionBattlerTag { * @returns {string} text to display when the move is interrupted */ override interruptedText(pokemon: Pokemon, move: Moves): string { - return i18next.t("battle:disableInterruptedMove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: allMoves[move].name }); + return i18next.t("battle:moveDisabledHealBlock", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: allMoves[move].name, healBlockName: allMoves[Moves.HEAL_BLOCK].name }); } override onRemove(pokemon: Pokemon): void { @@ -2530,8 +2530,8 @@ export class TormentTag extends MoveRestrictionBattlerTag { return false; } - override selectionDeniedText(_pokemon: Pokemon, move: Moves): string { - return i18next.t("battle:moveCannotBeSelected", { moveName: allMoves[move].name }); + override selectionDeniedText(pokemon: Pokemon, _move: Moves): string { + return i18next.t("battle:moveDisabledTorment", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }); } } @@ -2559,12 +2559,12 @@ export class TauntTag extends MoveRestrictionBattlerTag { return allMoves[move].category === MoveCategory.STATUS; } - override selectionDeniedText(_pokemon: Pokemon, move: Moves): string { - return i18next.t("battle:moveCannotBeSelected", { moveName: allMoves[move].name }); + override selectionDeniedText(pokemon: Pokemon, move: Moves): string { + return i18next.t("battle:moveDisabledTaunt", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: allMoves[move].name }); } override interruptedText(pokemon: Pokemon, move: Moves): string { - return i18next.t("battle:disableInterruptedMove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: allMoves[move].name }); + return i18next.t("battle:moveDisabledTaunt", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: allMoves[move].name }); } } @@ -2609,12 +2609,12 @@ export class ImprisonTag extends MoveRestrictionBattlerTag { return false; } - override selectionDeniedText(_pokemon: Pokemon, move: Moves): string { - return i18next.t("battle:moveCannotBeSelected", { moveName: allMoves[move].name }); + override selectionDeniedText(pokemon: Pokemon, move: Moves): string { + return i18next.t("battle:moveDisabledImprison", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: allMoves[move].name }); } override interruptedText(pokemon: Pokemon, move: Moves): string { - return i18next.t("battle:disableInterruptedMove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: allMoves[move].name }); + return i18next.t("battle:moveDisabledImprison", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: allMoves[move].name }); } } From 9c56c15a6c2f6a3096601213e37bdcaed583cdd3 Mon Sep 17 00:00:00 2001 From: Acelynn Zhang <102631387+acelynnzhang@users.noreply.github.com> Date: Thu, 3 Oct 2024 16:23:04 -0500 Subject: [PATCH 011/153] [P3] Fix persisting sleep animation when sprite is already loaded (#4562) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ensure that a Pokémon's animation speed is reset properly after saving and quitting. Previously, if a Pokémon was put to sleep, which slows its framerate, saving and quitting would result in the slower framerate persisting even though the Pokémon was no longer asleep. This fix adds an else condition to reset the frameRate to 12 if the sprite is already loaded upon resuming the game. Fixes #4465 --- src/data/pokemon-species.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index b710c40e1d5..469e400a551 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -484,6 +484,8 @@ export abstract class PokemonSpeciesForm { frameRate: 12, repeat: -1 }); + } else { + scene.anims.get(spriteKey).frameRate = 12; } let spritePath = this.getSpriteAtlasPath(female, formIndex, shiny, variant).replace("variant/", "").replace(/_[1-3]$/, ""); const useExpSprite = scene.experimentalSprites && scene.hasExpSprite(spriteKey); From 74ea358f180a0df6a38486aa9bc8533f0fe53277 Mon Sep 17 00:00:00 2001 From: Lneacx Date: Thu, 3 Oct 2024 20:45:53 -0700 Subject: [PATCH 012/153] [Beta] Fix hit check so Poison-types do not brick semi-invuln. (#4567) --- src/phases/move-effect-phase.ts | 2 +- src/test/moves/toxic.test.ts | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index 33f2394cd1e..7730a32eaa2 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -407,7 +407,7 @@ export class MoveEffectPhase extends PokemonPhase { const semiInvulnerableTag = target.getTag(SemiInvulnerableTag); if (semiInvulnerableTag && !this.move.getMove().getAttrs(HitsTagAttr).some(hta => hta.tagType === semiInvulnerableTag.tagType) - && !(this.move.getMove().getAttrs(ToxicAccuracyAttr) && user.isOfType(Type.POISON)) + && !(this.move.getMove().hasAttr(ToxicAccuracyAttr) && user.isOfType(Type.POISON)) ) { return false; } diff --git a/src/test/moves/toxic.test.ts b/src/test/moves/toxic.test.ts index 2d023c201c1..bfc41c8c92d 100644 --- a/src/test/moves/toxic.test.ts +++ b/src/test/moves/toxic.test.ts @@ -73,4 +73,17 @@ describe("Moves - Toxic", () => { expect(game.scene.getEnemyPokemon()!.status).toBeUndefined(); }); + + it("moves other than Toxic should not hit semi-invulnerable targets even if user is Poison-type", async () => { + game.override.moveset(Moves.SWIFT); + game.override.enemyMoveset(Moves.FLY); + await game.classicMode.startBattle([Species.TOXAPEX]); + + game.move.select(Moves.SWIFT); + await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.phaseInterceptor.to("BerryPhase", false); + + const enemyPokemon = game.scene.getEnemyPokemon()!; + expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); + }); }); From 644c078a6c5c7e061f873a2693d1477b50d22f6b Mon Sep 17 00:00:00 2001 From: torranx Date: Fri, 4 Oct 2024 13:08:31 +0800 Subject: [PATCH 013/153] add new lint rules....again --- eslint.config.js | 5 + src/account.ts | 2 +- src/battle-scene.ts | 26 +- src/battle.ts | 20 +- src/configs/inputs/cfg_keyboard_qwerty.ts | 4 +- src/configs/inputs/configHandler.ts | 2 +- src/configs/inputs/pad_dualshock.ts | 4 +- src/configs/inputs/pad_generic.ts | 4 +- src/configs/inputs/pad_procon.ts | 4 +- src/configs/inputs/pad_unlicensedSNES.ts | 4 +- src/configs/inputs/pad_xbox360.ts | 4 +- src/data/ability.ts | 74 +- src/data/arena-tag.ts | 10 +- src/data/balance/biomes.ts | 2242 ++++++++--------- src/data/balance/starters.ts | 20 +- src/data/battle-anims.ts | 14 +- src/data/battler-tags.ts | 36 +- src/data/challenge.ts | 22 +- src/data/dialogue.ts | 42 +- src/data/egg-hatch-data.ts | 2 +- src/data/egg.ts | 4 +- src/data/move.ts | 238 +- .../encounters/a-trainers-test-encounter.ts | 4 +- .../encounters/absolute-avarice-encounter.ts | 22 +- .../encounters/berries-abound-encounter.ts | 12 +- .../encounters/bug-type-superfan-encounter.ts | 30 +- .../encounters/clowning-around-encounter.ts | 70 +- .../encounters/dancing-lessons-encounter.ts | 12 +- .../encounters/dark-deal-encounter.ts | 4 +- .../encounters/delibirdy-encounter.ts | 2 +- .../encounters/field-trip-encounter.ts | 18 +- .../encounters/fiery-fallout-encounter.ts | 16 +- .../encounters/fight-or-flight-encounter.ts | 12 +- .../encounters/fun-and-games-encounter.ts | 10 +- .../global-trade-system-encounter.ts | 26 +- .../encounters/lost-at-sea-encounter.ts | 2 +- .../mysterious-challengers-encounter.ts | 6 +- .../encounters/mysterious-chest-encounter.ts | 8 +- .../encounters/part-timer-encounter.ts | 2 +- .../encounters/safari-zone-encounter.ts | 4 +- .../shady-vitamin-dealer-encounter.ts | 6 +- .../slumbering-snorlax-encounter.ts | 22 +- .../teleporting-hijinks-encounter.ts | 24 +- .../the-expert-pokemon-breeder-encounter.ts | 66 +- .../the-pokemon-salesman-encounter.ts | 4 +- .../encounters/the-strong-stuff-encounter.ts | 26 +- .../the-winstrate-challenge-encounter.ts | 64 +- .../encounters/trash-to-treasure-encounter.ts | 16 +- .../encounters/uncommon-breed-encounter.ts | 12 +- .../encounters/weird-dream-encounter.ts | 14 +- .../mystery-encounter-requirements.ts | 99 +- .../mystery-encounters/mystery-encounter.ts | 20 +- .../mystery-encounters/mystery-encounters.ts | 68 +- .../can-learn-move-requirement.ts | 6 +- .../utils/encounter-phase-utils.ts | 26 +- .../utils/encounter-pokemon-utils.ts | 62 +- src/data/pokemon-forms.ts | 24 +- src/data/pokemon-species.ts | 4 +- src/data/splash-messages.ts | 8 +- src/data/trainer-config.ts | 768 +++--- src/data/trainer-names.ts | 104 +- src/data/weather.ts | 8 +- src/enums/arena-tag-type.ts | 1 - src/enums/battler-tag-type.ts | 1 - src/enums/berry-type.ts | 1 - src/enums/biome.ts | 1 - src/enums/time-of-day.ts | 1 - src/field/mystery-encounter-intro.ts | 4 +- src/field/pokemon-sprite-sparkle-handler.ts | 2 +- src/field/pokemon.ts | 69 +- src/field/trainer.ts | 22 +- src/game-mode.ts | 6 +- src/inputs-controller.ts | 16 +- src/loading-scene.ts | 6 +- src/modifier/modifier-type.ts | 28 +- src/modifier/modifier.ts | 10 +- src/phases/attempt-capture-phase.ts | 2 +- src/phases/attempt-run-phase.ts | 2 +- src/phases/battle-phase.ts | 2 +- src/phases/command-phase.ts | 2 +- src/phases/egg-lapse-phase.ts | 2 +- src/phases/encounter-phase.ts | 8 +- src/phases/enemy-command-phase.ts | 2 +- src/phases/faint-phase.ts | 2 +- src/phases/learn-move-phase.ts | 8 +- src/phases/login-phase.ts | 2 +- src/phases/move-anim-test-phase.ts | 2 +- src/phases/move-effect-phase.ts | 6 +- src/phases/move-phase.ts | 2 +- src/phases/mystery-encounter-phases.ts | 2 +- src/phases/new-biome-encounter-phase.ts | 2 +- src/phases/next-encounter-phase.ts | 2 +- src/phases/pokemon-anim-phase.ts | 5 +- src/phases/select-biome-phase.ts | 2 +- src/phases/select-modifier-phase.ts | 2 +- src/phases/summon-phase.ts | 4 +- src/phases/switch-biome-phase.ts | 4 +- src/phases/title-phase.ts | 4 +- src/phases/trainer-message-test-phase.ts | 2 +- src/phases/trainer-victory-phase.ts | 2 +- src/plugins/cache-busted-loader-plugin.ts | 2 +- src/plugins/i18n.ts | 10 +- src/plugins/vite/vite-minify-json-plugin.ts | 2 +- src/scene-base.ts | 2 +- src/system/achv.ts | 40 +- src/system/egg-data.ts | 2 +- src/system/game-data.ts | 20 +- src/system/settings/settings-gamepad.ts | 48 +- src/system/settings/settings-keyboard.ts | 72 +- src/system/voucher.ts | 2 +- src/test/abilities/ability_timing.test.ts | 2 +- src/test/abilities/aroma_veil.test.ts | 8 +- src/test/abilities/aura_break.test.ts | 8 +- src/test/abilities/battery.test.ts | 8 +- src/test/abilities/battle_bond.test.ts | 7 +- src/test/abilities/beast_boost.test.ts | 8 +- src/test/abilities/contrary.test.ts | 10 +- src/test/abilities/costar.test.ts | 15 +- src/test/abilities/dancer.test.ts | 11 +- src/test/abilities/disguise.test.ts | 9 +- src/test/abilities/dry_skin.test.ts | 8 +- src/test/abilities/flash_fire.test.ts | 32 +- src/test/abilities/flower_gift.test.ts | 22 +- src/test/abilities/forecast.test.ts | 34 +- src/test/abilities/galvanize.test.ts | 7 +- src/test/abilities/gorilla_tactics.test.ts | 12 +- src/test/abilities/gulp_missile.test.ts | 30 +- src/test/abilities/heatproof.test.ts | 2 +- src/test/abilities/hustle.test.ts | 8 +- src/test/abilities/hyper_cutter.test.ts | 6 +- src/test/abilities/ice_face.test.ts | 44 +- src/test/abilities/imposter.test.ts | 2 +- src/test/abilities/intimidate.test.ts | 10 +- src/test/abilities/libero.test.ts | 67 +- src/test/abilities/magic_guard.test.ts | 60 +- src/test/abilities/mycelium_might.test.ts | 24 +- src/test/abilities/parental_bond.test.ts | 97 +- src/test/abilities/pastel_veil.test.ts | 6 +- src/test/abilities/power_construct.test.ts | 7 +- src/test/abilities/power_spot.test.ts | 8 +- src/test/abilities/protean.test.ts | 67 +- src/test/abilities/quick_draw.test.ts | 6 +- src/test/abilities/sand_spit.test.ts | 6 +- src/test/abilities/sand_veil.test.ts | 7 +- src/test/abilities/sap_sipper.test.ts | 4 +- src/test/abilities/schooling.test.ts | 7 +- src/test/abilities/screen_cleaner.test.ts | 14 +- src/test/abilities/serene_grace.test.ts | 8 +- src/test/abilities/sheer_force.test.ts | 12 +- src/test/abilities/shield_dust.test.ts | 6 +- src/test/abilities/shields_down.test.ts | 7 +- src/test/abilities/stall.test.ts | 22 +- src/test/abilities/steely_spirit.test.ts | 12 +- src/test/abilities/sturdy.test.ts | 3 +- src/test/abilities/sweet_veil.test.ts | 14 +- src/test/abilities/synchronize.test.ts | 10 +- src/test/abilities/tera_shell.test.ts | 24 +- src/test/abilities/unseen_fist.test.ts | 9 +- src/test/abilities/volt_absorb.test.ts | 6 +- src/test/abilities/wind_power.test.ts | 10 +- src/test/abilities/wind_rider.test.ts | 10 +- src/test/abilities/wonder_skin.test.ts | 10 +- src/test/abilities/zen_mode.test.ts | 19 +- src/test/abilities/zero_to_hero.test.ts | 9 +- src/test/account.test.ts | 8 +- src/test/achievements/achievement.test.ts | 18 +- src/test/arena/arena_gravity.test.ts | 14 +- src/test/arena/grassy_terrain.test.ts | 6 +- src/test/arena/weather_fog.test.ts | 6 +- src/test/arena/weather_hail.test.ts | 12 +- src/test/arena/weather_sandstorm.test.ts | 10 +- src/test/arena/weather_strong_winds.test.ts | 12 +- src/test/battle/battle-order.test.ts | 28 +- src/test/battle/battle.test.ts | 22 +- src/test/battle/damage_calculation.test.ts | 14 +- src/test/battle/error-handling.test.ts | 4 +- src/test/battle/inverse_battle.test.ts | 55 +- src/test/battle/special_battle.test.ts | 4 +- src/test/battlerTags/stockpiling.test.ts | 16 +- src/test/battlerTags/substitute.test.ts | 4 +- src/test/boss-pokemon.test.ts | 4 +- src/test/daily_mode.test.ts | 2 +- src/test/data/splash_messages.test.ts | 4 +- src/test/eggs/egg.test.ts | 12 +- src/test/eggs/manaphy-egg.test.ts | 10 +- src/test/endless_boss.test.ts | 10 +- src/test/enemy_command.test.ts | 10 +- src/test/escape-calculations.test.ts | 32 +- src/test/evolution.test.ts | 18 +- src/test/field/pokemon.test.ts | 6 +- src/test/final_boss.test.ts | 12 +- src/test/internals.test.ts | 4 +- src/test/items/exp_booster.test.ts | 2 +- src/test/items/grip_claw.test.ts | 4 +- src/test/items/leek.test.ts | 6 +- src/test/items/leftovers.test.ts | 6 +- src/test/items/light_ball.test.ts | 8 +- src/test/items/lock_capsule.test.ts | 4 +- src/test/items/metal_powder.test.ts | 8 +- src/test/items/quick_powder.test.ts | 8 +- src/test/items/thick_club.test.ts | 12 +- src/test/items/toxic_orb.test.ts | 4 +- src/test/misc.test.ts | 2 +- src/test/moves/after_you.test.ts | 7 +- src/test/moves/alluring_voice.test.ts | 7 +- src/test/moves/aromatherapy.test.ts | 14 +- src/test/moves/astonish.test.ts | 7 +- src/test/moves/aurora_veil.test.ts | 12 +- src/test/moves/autotomize.test.ts | 8 +- src/test/moves/baddy_bad.test.ts | 4 +- src/test/moves/baneful_bunker.test.ts | 13 +- src/test/moves/baton_pass.test.ts | 18 +- src/test/moves/beak_blast.test.ts | 19 +- src/test/moves/beat_up.test.ts | 10 +- src/test/moves/belly_drum.test.ts | 10 +- src/test/moves/burning_jealousy.test.ts | 11 +- src/test/moves/ceaseless_edge.test.ts | 11 +- src/test/moves/chilly_reception.test.ts | 16 +- src/test/moves/clangorous_soul.test.ts | 10 +- src/test/moves/crafty_shield.test.ts | 17 +- src/test/moves/disable.test.ts | 18 +- src/test/moves/double_team.test.ts | 6 +- src/test/moves/dragon_cheer.test.ts | 20 +- src/test/moves/dragon_rage.test.ts | 8 +- src/test/moves/dragon_tail.test.ts | 12 +- src/test/moves/dynamax_cannon.test.ts | 6 +- src/test/moves/fake_out.test.ts | 8 +- src/test/moves/fillet_away.test.ts | 10 +- src/test/moves/fissure.test.ts | 2 +- src/test/moves/flame_burst.test.ts | 20 +- src/test/moves/flower_shield.test.ts | 12 +- src/test/moves/focus_punch.test.ts | 15 +- src/test/moves/follow_me.test.ts | 17 +- src/test/moves/foresight.test.ts | 4 +- src/test/moves/freeze_dry.test.ts | 14 +- src/test/moves/freezy_frost.test.ts | 2 +- src/test/moves/fusion_bolt.test.ts | 4 +- src/test/moves/fusion_flare.test.ts | 4 +- src/test/moves/fusion_flare_bolt.test.ts | 40 +- src/test/moves/gastro_acid.test.ts | 5 +- src/test/moves/gigaton_hammer.test.ts | 6 +- src/test/moves/glaive_rush.test.ts | 17 +- src/test/moves/guard_split.test.ts | 2 +- src/test/moves/hard_press.test.ts | 10 +- src/test/moves/haze.test.ts | 4 +- src/test/moves/heal_bell.test.ts | 14 +- src/test/moves/heal_block.test.ts | 22 +- src/test/moves/hyper_beam.test.ts | 6 +- src/test/moves/imprison.test.ts | 12 +- src/test/moves/jaw_lock.test.ts | 23 +- src/test/moves/lash_out.test.ts | 7 +- src/test/moves/light_screen.test.ts | 10 +- src/test/moves/lucky_chant.test.ts | 13 +- src/test/moves/lunar_blessing.test.ts | 10 +- src/test/moves/magnet_rise.test.ts | 4 +- src/test/moves/make_it_rain.test.ts | 11 +- src/test/moves/mat_block.test.ts | 13 +- src/test/moves/miracle_eye.test.ts | 4 +- src/test/moves/multi_target.test.ts | 21 +- src/test/moves/obstruct.test.ts | 2 +- src/test/moves/parting_shot.test.ts | 21 +- src/test/moves/plasma_fists.test.ts | 14 +- src/test/moves/power_shift.test.ts | 4 +- src/test/moves/power_split.test.ts | 2 +- src/test/moves/protect.test.ts | 25 +- src/test/moves/purify.test.ts | 9 +- src/test/moves/quick_guard.test.ts | 21 +- src/test/moves/rage_powder.test.ts | 9 +- src/test/moves/reflect.test.ts | 10 +- src/test/moves/relic_song.test.ts | 10 +- src/test/moves/retaliate.test.ts | 6 +- src/test/moves/rollout.test.ts | 8 +- src/test/moves/roost.test.ts | 35 +- src/test/moves/safeguard.test.ts | 29 +- src/test/moves/scale_shot.test.ts | 6 +- src/test/moves/shed_tail.test.ts | 4 +- src/test/moves/shell_side_arm.test.ts | 10 +- src/test/moves/shell_trap.test.ts | 23 +- src/test/moves/sparkly_swirl.test.ts | 10 +- src/test/moves/spikes.test.ts | 8 +- src/test/moves/spit_up.test.ts | 12 +- src/test/moves/spotlight.test.ts | 9 +- src/test/moves/steamroller.test.ts | 8 +- src/test/moves/stockpile.test.ts | 6 +- src/test/moves/substitute.test.ts | 84 +- src/test/moves/swallow.test.ts | 14 +- src/test/moves/syrup_bomb.test.ts | 10 +- src/test/moves/tackle.test.ts | 4 +- src/test/moves/tailwind.test.ts | 8 +- src/test/moves/tar_shot.test.ts | 18 +- src/test/moves/taunt.test.ts | 6 +- src/test/moves/tera_blast.test.ts | 10 +- src/test/moves/tera_starstorm.test.ts | 10 +- src/test/moves/thousand_arrows.test.ts | 11 +- src/test/moves/throat_chop.test.ts | 6 +- src/test/moves/thunder_wave.test.ts | 3 +- src/test/moves/tidy_up.test.ts | 22 +- src/test/moves/torment.test.ts | 6 +- src/test/moves/toxic.test.ts | 16 +- src/test/moves/transform.test.ts | 2 +- src/test/moves/u_turn.test.ts | 2 +- src/test/moves/whirlwind.test.ts | 6 +- src/test/moves/wide_guard.test.ts | 19 +- .../a-trainers-test-encounter.test.ts | 8 +- .../absolute-avarice-encounter.test.ts | 22 +- ...an-offer-you-cant-refuse-encounter.test.ts | 10 +- .../berries-abound-encounter.test.ts | 8 +- .../bug-type-superfan-encounter.test.ts | 20 +- .../clowning-around-encounter.test.ts | 28 +- .../dancing-lessons-encounter.test.ts | 16 +- .../encounters/delibirdy-encounter.test.ts | 26 +- .../department-store-sale-encounter.test.ts | 6 +- .../encounters/field-trip-encounter.test.ts | 6 +- .../fiery-fallout-encounter.test.ts | 8 +- .../fight-or-flight-encounter.test.ts | 6 +- .../fun-and-games-encounter.test.ts | 16 +- .../global-trade-system-encounter.test.ts | 12 +- .../encounters/lost-at-sea-encounter.test.ts | 10 +- .../mysterious-challengers-encounter.test.ts | 6 +- .../encounters/part-timer-encounter.test.ts | 12 +- .../teleporting-hijinks-encounter.test.ts | 26 +- .../the-expert-breeder-encounter.test.ts | 6 +- .../the-pokemon-salesman-encounter.test.ts | 6 +- .../the-strong-stuff-encounter.test.ts | 14 +- .../the-winstrate-challenge-encounter.test.ts | 32 +- .../trash-to-treasure-encounter.test.ts | 8 +- .../uncommon-breed-encounter.test.ts | 14 +- .../encounters/weird-dream-encounter.test.ts | 4 +- .../mystery-encounter-utils.test.ts | 8 +- .../mystery-encounter.test.ts | 2 +- src/test/phases/learn-move-phase.test.ts | 4 +- .../phases/mystery-encounter-phase.test.ts | 16 +- src/test/phases/select-modifier-phase.test.ts | 18 +- src/test/reload.test.ts | 6 +- src/test/settingMenu/helpers/menuManip.ts | 2 +- .../settingMenu/rebinding_setting.test.ts | 2 +- src/test/sprites/pokemonSprite.test.ts | 14 +- src/test/system/game_data.test.ts | 12 +- src/test/ui/battle_info.test.ts | 6 +- src/test/ui/transfer-item.test.ts | 6 +- src/test/ui/type-hints.test.ts | 8 +- src/test/utils/gameManager.ts | 4 +- src/test/utils/helpers/overridesHelper.ts | 8 +- src/test/utils/helpers/settingsHelper.ts | 2 +- src/test/utils/inputsHandler.ts | 16 +- src/test/utils/mocks/mockClock.ts | 2 +- src/test/utils/mocks/mockConsoleLog.ts | 6 +- src/test/utils/mocks/mockFetch.ts | 4 +- .../utils/mocks/mocksContainer/mockSprite.ts | 1 - src/test/utils/phaseInterceptor.ts | 108 +- src/test/vitest.setup.ts | 2 +- src/timed-event-manager.ts | 16 +- src/touch-controls.ts | 4 +- src/ui-inputs.ts | 12 +- src/ui/abstact-option-select-ui-handler.ts | 8 +- src/ui/achvs-ui-handler.ts | 4 +- src/ui/admin-ui-handler.ts | 8 +- src/ui/arena-flyout.ts | 7 +- src/ui/awaitable-ui-handler.ts | 2 +- src/ui/ball-ui-handler.ts | 2 +- src/ui/battle-flyout.ts | 2 +- src/ui/battle-info.ts | 2 +- src/ui/battle-message-ui-handler.ts | 6 +- src/ui/bgm-bar.ts | 4 +- src/ui/challenges-select-ui-handler.ts | 4 +- src/ui/command-ui-handler.ts | 4 +- src/ui/confirm-ui-handler.ts | 2 +- src/ui/dropdown.ts | 20 +- src/ui/egg-gacha-ui-handler.ts | 16 +- src/ui/egg-hatch-scene-handler.ts | 2 +- src/ui/egg-list-ui-handler.ts | 2 +- src/ui/evolution-scene-handler.ts | 2 +- src/ui/fight-ui-handler.ts | 4 +- src/ui/filter-bar.ts | 8 +- src/ui/game-stats-ui-handler.ts | 6 +- src/ui/login-form-ui-handler.ts | 14 +- src/ui/menu-ui-handler.ts | 10 +- src/ui/modal-ui-handler.ts | 4 +- src/ui/modifier-select-ui-handler.ts | 2 +- src/ui/move-info-overlay.ts | 4 +- src/ui/mystery-encounter-ui-handler.ts | 6 +- src/ui/party-ui-handler.ts | 10 +- src/ui/pokemon-hatch-info-container.ts | 6 +- src/ui/registration-form-ui-handler.ts | 4 +- src/ui/run-history-ui-handler.ts | 16 +- src/ui/run-info-ui-handler.ts | 102 +- .../settings/abstract-binding-ui-handler.ts | 12 +- .../abstract-control-settings-ui-handler.ts | 12 +- .../settings/abstract-settings-ui-handler.ts | 6 +- src/ui/settings/gamepad-binding-ui-handler.ts | 10 +- .../settings/keyboard-binding-ui-handler.ts | 8 +- .../settings/move-touch-controls-handler.ts | 5 +- src/ui/settings/navigationMenu.ts | 18 +- .../settings/settings-gamepad-ui-handler.ts | 14 +- .../settings/settings-keyboard-ui-handler.ts | 23 +- src/ui/starter-select-ui-handler.ts | 39 +- src/ui/stats-container.ts | 10 +- src/ui/summary-ui-handler.ts | 14 +- src/ui/target-select-ui-handler.ts | 4 +- src/ui/test-dialogue-ui-handler.ts | 4 +- src/ui/text.ts | 2 +- src/ui/time-of-day-widget.ts | 22 +- src/ui/title-ui-handler.ts | 2 +- src/ui/ui-handler.ts | 2 +- src/ui/ui-theme.ts | 4 +- src/ui/ui.ts | 2 +- src/ui/unavailable-modal-ui-handler.ts | 2 +- src/utils.test.ts | 2 +- src/utils.ts | 12 +- 409 files changed, 4252 insertions(+), 4307 deletions(-) diff --git a/eslint.config.js b/eslint.config.js index 80e9e67b525..c371f073f76 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -41,6 +41,11 @@ export default [ "keyword-spacing": ["error", { "before": true, "after": true }], // Enforces spacing before and after keywords "comma-spacing": ["error", { "before": false, "after": true }], // Enforces spacing after comma "import-x/extensions": ["error", "never", { "json": "always" }], // Enforces no extension for imports unless json + "array-bracket-spacing": ["error", "always", { "objectsInArrays": false, "arraysInArrays": false }], // Enforces consistent spacing inside array brackets + "object-curly-spacing": ["error", "always", { "arraysInObjects": false, "objectsInObjects": false }], // Enforces consistent spacing inside braces of object literals, destructuring assignments, and import/export specifiers + "computed-property-spacing": ["error", "never" ], // Enforces consistent spacing inside computed property brackets + "space-infix-ops": ["error", { "int32Hint": false }], // Enforces spacing around infix operators + "no-multiple-empty-lines": ["error", { "max": 2, "maxEOF": 1, "maxBOF": 0 }], // Disallows multiple empty lines } } ] diff --git a/src/account.ts b/src/account.ts index c6d2f85489a..692ff2b0d81 100644 --- a/src/account.ts +++ b/src/account.ts @@ -20,7 +20,7 @@ export function initLoggedInUser(): void { export function updateUserInfo(): Promise<[boolean, integer]> { return new Promise<[boolean, integer]>(resolve => { if (bypassLogin) { - loggedInUser = { username: "Guest", lastSessionSlot: -1, discordId: "", googleId: "", hasAdminRole: false}; + loggedInUser = { username: "Guest", lastSessionSlot: -1, discordId: "", googleId: "", hasAdminRole: false }; let lastSessionSlot = -1; for (let s = 0; s < 5; s++) { if (localStorage.getItem(`sessionData${s ? s : ""}_${loggedInUser.username}`)) { diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 1bb0d6bfc4b..7ee4abd2f27 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -1261,7 +1261,7 @@ export default class BattleScene extends SceneBase { const isEndlessFifthWave = this.gameMode.hasShortBiomes && (lastBattle.waveIndex % 5) === 0; const isWaveIndexMultipleOfFiftyMinusOne = (lastBattle.waveIndex % 50) === 49; const isNewBiome = isWaveIndexMultipleOfTen || isEndlessFifthWave || (isEndlessOrDaily && isWaveIndexMultipleOfFiftyMinusOne); - const resetArenaState = isNewBiome || [BattleType.TRAINER, BattleType.MYSTERY_ENCOUNTER].includes(this.currentBattle.battleType) || this.currentBattle.battleSpec === BattleSpec.FINAL_BOSS; + const resetArenaState = isNewBiome || [ BattleType.TRAINER, BattleType.MYSTERY_ENCOUNTER ].includes(this.currentBattle.battleType) || this.currentBattle.battleSpec === BattleSpec.FINAL_BOSS; this.getEnemyParty().forEach(enemyPokemon => enemyPokemon.destroy()); this.trySpreadPokerus(); if (!isNewBiome && (newWaveIndex % 10) === 5) { @@ -1758,14 +1758,14 @@ export default class BattleScene extends SceneBase { if (fromArenaPool) { return this.arena.randomSpecies(waveIndex, level, undefined, getPartyLuckValue(this.party)); } - const filteredSpecies = speciesFilter ? [...new Set(allSpecies.filter(s => s.isCatchable()).filter(speciesFilter).map(s => { + const filteredSpecies = speciesFilter ? [ ...new Set(allSpecies.filter(s => s.isCatchable()).filter(speciesFilter).map(s => { if (!filterAllEvolutions) { while (pokemonPrevolutions.hasOwnProperty(s.speciesId)) { s = getPokemonSpecies(pokemonPrevolutions[s.speciesId]); } } return s; - }))] : allSpecies.filter(s => s.isCatchable()); + })) ] : allSpecies.filter(s => s.isCatchable()); return filteredSpecies[Utils.randSeedInt(filteredSpecies.length)]; } @@ -1885,14 +1885,14 @@ export default class BattleScene extends SceneBase { case "battle_anims": case "cry": if (soundDetails[1].startsWith("PRSFX- ")) { - sound.setVolume(this.masterVolume*this.fieldVolume*0.5); + sound.setVolume(this.masterVolume * this.fieldVolume * 0.5); } else { - sound.setVolume(this.masterVolume*this.fieldVolume); + sound.setVolume(this.masterVolume * this.fieldVolume); } break; case "se": case "ui": - sound.setVolume(this.masterVolume*this.seVolume); + sound.setVolume(this.masterVolume * this.seVolume); } } } @@ -2221,7 +2221,7 @@ export default class BattleScene extends SceneBase { * */ pushConditionalPhase(phase: Phase, condition: () => boolean): void { - this.conditionalQueue.push([condition, phase]); + this.conditionalQueue.push([ condition, phase ]); } /** @@ -2498,7 +2498,7 @@ export default class BattleScene extends SceneBase { } } - return Promise.allSettled([this.party.map(p => p.updateInfo(instant)), ...modifierPromises]).then(() => resolve(success)); + return Promise.allSettled([ this.party.map(p => p.updateInfo(instant)), ...modifierPromises ]).then(() => resolve(success)); } else { const args = [ this ]; if (modifier.shouldApply(...args)) { @@ -2818,7 +2818,7 @@ export default class BattleScene extends SceneBase { return mods; } const rand = Utils.randSeedInt(mods.length); - return [mods[rand], ...shuffleModifiers(mods.filter((_, i) => i !== rand))]; + return [ mods[rand], ...shuffleModifiers(mods.filter((_, i) => i !== rand)) ]; }; modifiers = shuffleModifiers(modifiers); }, scene.currentBattle.turn << 4, scene.waveSeed); @@ -2978,7 +2978,7 @@ export default class BattleScene extends SceneBase { keys.push(p.getBattleSpriteKey(true, true)); keys.push("cry/" + p.species.getCryKey(p.formIndex)); if (p.fusionSpecies) { - keys.push("cry/"+p.fusionSpecies.getCryKey(p.fusionFormIndex)); + keys.push("cry/" + p.fusionSpecies.getCryKey(p.fusionFormIndex)); } }); // enemyParty has to be operated on separately from playerParty because playerPokemon =/= enemyPokemon @@ -2987,7 +2987,7 @@ export default class BattleScene extends SceneBase { keys.push(p.getSpriteKey(true)); keys.push("cry/" + p.species.getCryKey(p.formIndex)); if (p.fusionSpecies) { - keys.push("cry/"+p.fusionSpecies.getCryKey(p.fusionFormIndex)); + keys.push("cry/" + p.fusionSpecies.getCryKey(p.fusionFormIndex)); } }); return keys; @@ -3135,7 +3135,7 @@ export default class BattleScene extends SceneBase { * @param sessionDataEncounterType */ private isWaveMysteryEncounter(newBattleType: BattleType, waveIndex: number, sessionDataEncounterType?: MysteryEncounterType): boolean { - const [lowestMysteryEncounterWave, highestMysteryEncounterWave] = this.gameMode.getMysteryEncounterLegalWaves(); + const [ lowestMysteryEncounterWave, highestMysteryEncounterWave ] = this.gameMode.getMysteryEncounterLegalWaves(); if (this.gameMode.hasMysteryEncounters && newBattleType === BattleType.WILD && !this.gameMode.isBoss(waveIndex) && waveIndex < highestMysteryEncounterWave && waveIndex > lowestMysteryEncounterWave) { // Base spawn weight is BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT/256, and increases by WEIGHT_INCREMENT_ON_SPAWN_MISS/256 for each missed attempt at spawning an encounter on a valid floor const sessionEncounterRate = this.mysteryEncounterSaveData.encounterSpawnChance; @@ -3201,7 +3201,7 @@ export default class BattleScene extends SceneBase { } // See Enum values for base tier weights - const tierWeights = [MysteryEncounterTier.COMMON, MysteryEncounterTier.GREAT, MysteryEncounterTier.ULTRA, MysteryEncounterTier.ROGUE]; + const tierWeights = [ MysteryEncounterTier.COMMON, MysteryEncounterTier.GREAT, MysteryEncounterTier.ULTRA, MysteryEncounterTier.ROGUE ]; // Adjust tier weights by previously encountered events to lower odds of only Common/Great in run this.mysteryEncounterSaveData.encounteredEvents.forEach(seenEncounterData => { diff --git a/src/battle.ts b/src/battle.ts index 412fd1b5184..6086c2ceb4e 100644 --- a/src/battle.ts +++ b/src/battle.ts @@ -497,7 +497,7 @@ function getRandomTrainerFunc(trainerPool: (TrainerType | TrainerType[])[], rand } /* 1/3 chance for evil team grunts to be double battles */ - const evilTeamGrunts = [TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT, TrainerType.MACRO_GRUNT, TrainerType.STAR_GRUNT]; + const evilTeamGrunts = [ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT, TrainerType.MACRO_GRUNT, TrainerType.STAR_GRUNT ]; const isEvilTeamGrunt = evilTeamGrunts.includes(trainerTypes[rand]); if (trainerConfigs[trainerTypes[rand]].hasDouble && isEvilTeamGrunt) { @@ -527,34 +527,34 @@ export const classicFixedBattles: FixedBattleConfigs = { .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)), [25]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_2, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)) - .setCustomModifierRewards({ guaranteedModifierTiers: [ModifierTier.ULTRA, ModifierTier.GREAT, ModifierTier.GREAT], allowLuckUpgrades: false }), + .setCustomModifierRewards({ guaranteedModifierTiers: [ ModifierTier.ULTRA, ModifierTier.GREAT, ModifierTier.GREAT ], allowLuckUpgrades: false }), [35]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT, TrainerType.MACRO_GRUNT, TrainerType.STAR_GRUNT ], true)), [55]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_3, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)) - .setCustomModifierRewards({ guaranteedModifierTiers: [ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.GREAT, ModifierTier.GREAT], allowLuckUpgrades: false }), + .setCustomModifierRewards({ guaranteedModifierTiers: [ ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.GREAT, ModifierTier.GREAT ], allowLuckUpgrades: false }), [62]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT, TrainerType.MACRO_GRUNT, TrainerType.STAR_GRUNT ], true)), [64]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT, TrainerType.MACRO_GRUNT, TrainerType.STAR_GRUNT ], true)), [66]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) - .setGetTrainerFunc(getRandomTrainerFunc([[ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [ TrainerType.TABITHA, TrainerType.COURTNEY ], [ TrainerType.MATT, TrainerType.SHELLY ], [ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ], [ TrainerType.ZINZOLIN, TrainerType.ROOD ], [ TrainerType.XEROSIC, TrainerType.BRYONY ], TrainerType.FABA, TrainerType.PLUMERIA, TrainerType.OLEANA, [ TrainerType.GIACOMO, TrainerType.MELA, TrainerType.ATTICUS, TrainerType.ORTEGA, TrainerType.ERI ] ], true)), + .setGetTrainerFunc(getRandomTrainerFunc([[ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [ TrainerType.TABITHA, TrainerType.COURTNEY ], [ TrainerType.MATT, TrainerType.SHELLY ], [ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ], [ TrainerType.ZINZOLIN, TrainerType.ROOD ], [ TrainerType.XEROSIC, TrainerType.BRYONY ], TrainerType.FABA, TrainerType.PLUMERIA, TrainerType.OLEANA, [ TrainerType.GIACOMO, TrainerType.MELA, TrainerType.ATTICUS, TrainerType.ORTEGA, TrainerType.ERI ]], true)), [95]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_4, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)) - .setCustomModifierRewards({ guaranteedModifierTiers: [ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA], allowLuckUpgrades: false }), + .setCustomModifierRewards({ guaranteedModifierTiers: [ ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA ], allowLuckUpgrades: false }), [112]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT, TrainerType.MACRO_GRUNT, TrainerType.STAR_GRUNT ], true)), [114]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) - .setGetTrainerFunc(getRandomTrainerFunc([[ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [ TrainerType.TABITHA, TrainerType.COURTNEY ], [ TrainerType.MATT, TrainerType.SHELLY ], [ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ], [ TrainerType.ZINZOLIN, TrainerType.ROOD ], [ TrainerType.XEROSIC, TrainerType.BRYONY ], TrainerType.FABA, TrainerType.PLUMERIA, TrainerType.OLEANA, [ TrainerType.GIACOMO, TrainerType.MELA, TrainerType.ATTICUS, TrainerType.ORTEGA, TrainerType.ERI ] ], true, 1)), + .setGetTrainerFunc(getRandomTrainerFunc([[ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [ TrainerType.TABITHA, TrainerType.COURTNEY ], [ TrainerType.MATT, TrainerType.SHELLY ], [ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ], [ TrainerType.ZINZOLIN, TrainerType.ROOD ], [ TrainerType.XEROSIC, TrainerType.BRYONY ], TrainerType.FABA, TrainerType.PLUMERIA, TrainerType.OLEANA, [ TrainerType.GIACOMO, TrainerType.MELA, TrainerType.ATTICUS, TrainerType.ORTEGA, TrainerType.ERI ]], true, 1)), [ClassicFixedBossWaves.EVIL_BOSS_1]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_BOSS_GIOVANNI_1, TrainerType.MAXIE, TrainerType.ARCHIE, TrainerType.CYRUS, TrainerType.GHETSIS, TrainerType.LYSANDRE, TrainerType.LUSAMINE, TrainerType.GUZMA, TrainerType.ROSE, TrainerType.PENNY ])) - .setCustomModifierRewards({ guaranteedModifierTiers: [ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA], allowLuckUpgrades: false }), + .setCustomModifierRewards({ guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA ], allowLuckUpgrades: false }), [145]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_5, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)) - .setCustomModifierRewards({ guaranteedModifierTiers: [ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.ULTRA], allowLuckUpgrades: false }), + .setCustomModifierRewards({ guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.ULTRA ], allowLuckUpgrades: false }), [ClassicFixedBossWaves.EVIL_BOSS_2]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_BOSS_GIOVANNI_2, TrainerType.MAXIE_2, TrainerType.ARCHIE_2, TrainerType.CYRUS_2, TrainerType.GHETSIS_2, TrainerType.LYSANDRE_2, TrainerType.LUSAMINE_2, TrainerType.GUZMA_2, TrainerType.ROSE_2, TrainerType.PENNY_2 ])) - .setCustomModifierRewards({ guaranteedModifierTiers: [ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA], allowLuckUpgrades: false }), + .setCustomModifierRewards({ guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA ], allowLuckUpgrades: false }), [182]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.LORELEI, TrainerType.WILL, TrainerType.SIDNEY, TrainerType.AARON, TrainerType.SHAUNTAL, TrainerType.MALVA, [ TrainerType.HALA, TrainerType.MOLAYNE ], TrainerType.MARNIE_ELITE, TrainerType.RIKA, TrainerType.CRISPIN ])), [184]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(182) @@ -567,5 +567,5 @@ export const classicFixedBattles: FixedBattleConfigs = { .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.BLUE, [ TrainerType.RED, TrainerType.LANCE_CHAMPION ], [ TrainerType.STEVEN, TrainerType.WALLACE ], TrainerType.CYNTHIA, [ TrainerType.ALDER, TrainerType.IRIS ], TrainerType.DIANTHA, TrainerType.HAU, TrainerType.LEON, [ TrainerType.GEETA, TrainerType.NEMONA ], TrainerType.KIERAN ])), [195]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_6, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)) - .setCustomModifierRewards({ guaranteedModifierTiers: [ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.GREAT, ModifierTier.GREAT], allowLuckUpgrades: false }) + .setCustomModifierRewards({ guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.GREAT, ModifierTier.GREAT ], allowLuckUpgrades: false }) }; diff --git a/src/configs/inputs/cfg_keyboard_qwerty.ts b/src/configs/inputs/cfg_keyboard_qwerty.ts index 09a02f02836..5ddc12e8784 100644 --- a/src/configs/inputs/cfg_keyboard_qwerty.ts +++ b/src/configs/inputs/cfg_keyboard_qwerty.ts @@ -1,5 +1,5 @@ -import {Button} from "#enums/buttons"; -import {SettingKeyboard} from "#app/system/settings/settings-keyboard"; +import { Button } from "#enums/buttons"; +import { SettingKeyboard } from "#app/system/settings/settings-keyboard"; const cfg_keyboard_qwerty = { padID: "default", diff --git a/src/configs/inputs/configHandler.ts b/src/configs/inputs/configHandler.ts index 45fb033e9fa..50be692cbc3 100644 --- a/src/configs/inputs/configHandler.ts +++ b/src/configs/inputs/configHandler.ts @@ -1,4 +1,4 @@ -import {Device} from "#enums/devices"; +import { Device } from "#enums/devices"; /** * Retrieves the key associated with the specified keycode from the mapping. diff --git a/src/configs/inputs/pad_dualshock.ts b/src/configs/inputs/pad_dualshock.ts index 742040958b4..2fbdd0ddfaa 100644 --- a/src/configs/inputs/pad_dualshock.ts +++ b/src/configs/inputs/pad_dualshock.ts @@ -1,5 +1,5 @@ -import {SettingGamepad} from "../../system/settings/settings-gamepad"; -import {Button} from "#enums/buttons"; +import { SettingGamepad } from "../../system/settings/settings-gamepad"; +import { Button } from "#enums/buttons"; /** * Dualshock mapping diff --git a/src/configs/inputs/pad_generic.ts b/src/configs/inputs/pad_generic.ts index 88ff66e231c..256af8f0fe3 100644 --- a/src/configs/inputs/pad_generic.ts +++ b/src/configs/inputs/pad_generic.ts @@ -1,5 +1,5 @@ -import {SettingGamepad} from "../../system/settings/settings-gamepad"; -import {Button} from "#enums/buttons"; +import { SettingGamepad } from "../../system/settings/settings-gamepad"; +import { Button } from "#enums/buttons"; /** * Generic pad mapping diff --git a/src/configs/inputs/pad_procon.ts b/src/configs/inputs/pad_procon.ts index be751cc3acc..98d17c4ef57 100644 --- a/src/configs/inputs/pad_procon.ts +++ b/src/configs/inputs/pad_procon.ts @@ -1,5 +1,5 @@ -import {SettingGamepad} from "#app/system/settings/settings-gamepad"; -import {Button} from "#enums/buttons"; +import { SettingGamepad } from "#app/system/settings/settings-gamepad"; +import { Button } from "#enums/buttons"; /** * Nintendo Pro Controller mapping diff --git a/src/configs/inputs/pad_unlicensedSNES.ts b/src/configs/inputs/pad_unlicensedSNES.ts index 8a7f3e78f98..77e68e6a644 100644 --- a/src/configs/inputs/pad_unlicensedSNES.ts +++ b/src/configs/inputs/pad_unlicensedSNES.ts @@ -1,5 +1,5 @@ -import {SettingGamepad} from "../../system/settings/settings-gamepad"; -import {Button} from "#enums/buttons"; +import { SettingGamepad } from "../../system/settings/settings-gamepad"; +import { Button } from "#enums/buttons"; /** * 081f-e401 - UnlicensedSNES diff --git a/src/configs/inputs/pad_xbox360.ts b/src/configs/inputs/pad_xbox360.ts index e003ccc8e87..6afc452f50b 100644 --- a/src/configs/inputs/pad_xbox360.ts +++ b/src/configs/inputs/pad_xbox360.ts @@ -1,5 +1,5 @@ -import {SettingGamepad} from "../../system/settings/settings-gamepad"; -import {Button} from "#enums/buttons"; +import { SettingGamepad } from "../../system/settings/settings-gamepad"; +import { Button } from "#enums/buttons"; /** * Generic pad mapping diff --git a/src/data/ability.ts b/src/data/ability.ts index 8a7365b2c28..62e6e772411 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -162,7 +162,7 @@ export class BlockRecoilDamageAttr extends AbAttr { } getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]) { - return i18next.t("abilityTriggers:blockRecoilDamage", {pokemonName: getPokemonNameWithAffix(pokemon), abilityName: abilityName}); + return i18next.t("abilityTriggers:blockRecoilDamage", { pokemonName: getPokemonNameWithAffix(pokemon), abilityName: abilityName }); } } @@ -964,7 +964,7 @@ export class PostDefendPerishSongAbAttr extends PostDefendAbAttr { } getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { - return i18next.t("abilityTriggers:perishBody", {pokemonName: getPokemonNameWithAffix(pokemon), abilityName: abilityName}); + return i18next.t("abilityTriggers:perishBody", { pokemonName: getPokemonNameWithAffix(pokemon), abilityName: abilityName }); } } @@ -1268,7 +1268,7 @@ export class PokemonTypeChangeAbAttr extends PreAttackAbAttr { if (pokemon.getTypes().some((t) => t !== moveType)) { if (!simulated) { this.moveType = moveType; - pokemon.summonData.types = [moveType]; + pokemon.summonData.types = [ moveType ]; pokemon.updateInfo(); } @@ -2814,7 +2814,7 @@ export class PreApplyBattlerTagImmunityAbAttr extends PreApplyBattlerTagAbAttr { constructor(immuneTagTypes: BattlerTagType | BattlerTagType[]) { super(); - this.immuneTagTypes = Array.isArray(immuneTagTypes) ? immuneTagTypes : [immuneTagTypes]; + this.immuneTagTypes = Array.isArray(immuneTagTypes) ? immuneTagTypes : [ immuneTagTypes ]; } applyPreApplyBattlerTag(pokemon: Pokemon, passive: boolean, simulated: boolean, tag: BattlerTag, cancelled: Utils.BooleanHolder, args: any[]): boolean { @@ -3099,17 +3099,17 @@ function getAnticipationCondition(): AbAttrCondition { // edge case for hidden power, type is computed if (move.getMove().id === Moves.HIDDEN_POWER) { const iv_val = Math.floor(((opponent.ivs[Stat.HP] & 1) - +(opponent.ivs[Stat.ATK] & 1) * 2 - +(opponent.ivs[Stat.DEF] & 1) * 4 - +(opponent.ivs[Stat.SPD] & 1) * 8 - +(opponent.ivs[Stat.SPATK] & 1) * 16 - +(opponent.ivs[Stat.SPDEF] & 1) * 32) * 15/63); + + (opponent.ivs[Stat.ATK] & 1) * 2 + + (opponent.ivs[Stat.DEF] & 1) * 4 + + (opponent.ivs[Stat.SPD] & 1) * 8 + + (opponent.ivs[Stat.SPATK] & 1) * 16 + + (opponent.ivs[Stat.SPDEF] & 1) * 32) * 15 / 63); const type = [ Type.FIGHTING, Type.FLYING, Type.POISON, Type.GROUND, Type.ROCK, Type.BUG, Type.GHOST, Type.STEEL, Type.FIRE, Type.WATER, Type.GRASS, Type.ELECTRIC, - Type.PSYCHIC, Type.ICE, Type.DRAGON, Type.DARK][iv_val]; + Type.PSYCHIC, Type.ICE, Type.DRAGON, Type.DARK ][iv_val]; if (pokemon.getAttackTypeEffectiveness(type, opponent) >= 2) { return true; @@ -3644,7 +3644,7 @@ export class PostTurnHurtIfSleepingAbAttr extends PostTurnAbAttr { if ((opp.status?.effect === StatusEffect.SLEEP || opp.hasAbility(Abilities.COMATOSE)) && !opp.hasAbilityWithAttr(BlockNonDirectDamageAbAttr)) { if (!simulated) { opp.damageAndUpdate(Utils.toDmgValue(opp.getMaxHp() / 8), HitResult.OTHER); - pokemon.scene.queueMessage(i18next.t("abilityTriggers:badDreams", {pokemonName: getPokemonNameWithAffix(opp)})); + pokemon.scene.queueMessage(i18next.t("abilityTriggers:badDreams", { pokemonName: getPokemonNameWithAffix(opp) })); } hadEffect = true; } @@ -3755,8 +3755,8 @@ export class PostDancingMoveAbAttr extends PostMoveUsedAbAttr { */ applyPostMoveUsed(dancer: Pokemon, move: PokemonMove, source: Pokemon, targets: BattlerIndex[], simulated: boolean, args: any[]): boolean | Promise { // List of tags that prevent the Dancer from replicating the move - const forbiddenTags = [BattlerTagType.FLYING, BattlerTagType.UNDERWATER, - BattlerTagType.UNDERGROUND, BattlerTagType.HIDDEN]; + const forbiddenTags = [ BattlerTagType.FLYING, BattlerTagType.UNDERWATER, + BattlerTagType.UNDERGROUND, BattlerTagType.HIDDEN ]; // The move to replicate cannot come from the Dancer if (source.getBattlerIndex() !== dancer.getBattlerIndex() && !dancer.summonData.tags.some(tag => forbiddenTags.includes(tag.tagType))) { @@ -3767,7 +3767,7 @@ export class PostDancingMoveAbAttr extends PostMoveUsedAbAttr { dancer.scene.unshiftPhase(new MovePhase(dancer.scene, dancer, target, move, true, true)); } else if (move.getMove() instanceof SelfStatusMove) { // If the move is a SelfStatusMove (ie. Swords Dance) the Dancer should replicate it on itself - dancer.scene.unshiftPhase(new MovePhase(dancer.scene, dancer, [dancer.getBattlerIndex()], move, true, true)); + dancer.scene.unshiftPhase(new MovePhase(dancer.scene, dancer, [ dancer.getBattlerIndex() ], move, true, true)); } } return true; @@ -3784,9 +3784,9 @@ export class PostDancingMoveAbAttr extends PostMoveUsedAbAttr { */ getTarget(dancer: Pokemon, source: Pokemon, targets: BattlerIndex[]) : BattlerIndex[] { if (dancer.isPlayer()) { - return source.isPlayer() ? targets : [source.getBattlerIndex()]; + return source.isPlayer() ? targets : [ source.getBattlerIndex() ]; } - return source.isPlayer() ? [source.getBattlerIndex()] : targets; + return source.isPlayer() ? [ source.getBattlerIndex() ] : targets; } } @@ -4561,7 +4561,7 @@ export class BypassSpeedChanceAbAttr extends AbAttr { const turnCommand = pokemon.scene.currentBattle.turnCommands[pokemon.getBattlerIndex()]; const isCommandFight = turnCommand?.command === Command.FIGHT; - const move = turnCommand?.move?.move ?allMoves[turnCommand.move.move] : null; + const move = turnCommand?.move?.move ? allMoves[turnCommand.move.move] : null; const isDamageMove = move?.category === MoveCategory.PHYSICAL || move?.category === MoveCategory.SPECIAL; if (isCommandFight && isDamageMove) { @@ -4574,7 +4574,7 @@ export class BypassSpeedChanceAbAttr extends AbAttr { } getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { - return i18next.t("abilityTriggers:quickDraw", {pokemonName: getPokemonNameWithAffix(pokemon)}); + return i18next.t("abilityTriggers:quickDraw", { pokemonName: getPokemonNameWithAffix(pokemon) }); } } @@ -4622,7 +4622,7 @@ async function applyAbAttrsInternal( simulated: boolean = false, messages: string[] = [], ) { - for (const passive of [false, true]) { + for (const passive of [ false, true ]) { if (!pokemon?.canApplyAbility(passive)) { continue; } @@ -4872,7 +4872,7 @@ export function initAbilities() { .attr(TypeImmunityHealAbAttr, Type.WATER) .ignorable(), new Ability(Abilities.OBLIVIOUS, 3) - .attr(BattlerTagImmunityAbAttr, [BattlerTagType.INFATUATED, BattlerTagType.TAUNT]) + .attr(BattlerTagImmunityAbAttr, [ BattlerTagType.INFATUATED, BattlerTagType.TAUNT ]) .attr(IntimidateImmunityAbAttr) .ignorable(), new Ability(Abilities.CLOUD_NINE, 3) @@ -5017,10 +5017,10 @@ export function initAbilities() { new Ability(Abilities.CUTE_CHARM, 3) .attr(PostDefendContactApplyTagChanceAbAttr, 30, BattlerTagType.INFATUATED), new Ability(Abilities.PLUS, 3) - .conditionalAttr(p => p.scene.currentBattle.double && [Abilities.PLUS, Abilities.MINUS].some(a => p.getAlly().hasAbility(a)), StatMultiplierAbAttr, Stat.SPATK, 1.5) + .conditionalAttr(p => p.scene.currentBattle.double && [ Abilities.PLUS, Abilities.MINUS ].some(a => p.getAlly().hasAbility(a)), StatMultiplierAbAttr, Stat.SPATK, 1.5) .ignorable(), new Ability(Abilities.MINUS, 3) - .conditionalAttr(p => p.scene.currentBattle.double && [Abilities.PLUS, Abilities.MINUS].some(a => p.getAlly().hasAbility(a)), StatMultiplierAbAttr, Stat.SPATK, 1.5) + .conditionalAttr(p => p.scene.currentBattle.double && [ Abilities.PLUS, Abilities.MINUS ].some(a => p.getAlly().hasAbility(a)), StatMultiplierAbAttr, Stat.SPATK, 1.5) .ignorable(), new Ability(Abilities.FORECAST, 3) .attr(UncopiableAbilityAbAttr) @@ -5138,7 +5138,7 @@ export function initAbilities() { .conditionalAttr(pokemon => !!pokemon.status || pokemon.hasAbility(Abilities.COMATOSE), StatMultiplierAbAttr, Stat.SPD, 1.5), new Ability(Abilities.NORMALIZE, 4) .attr(MoveTypeChangeAbAttr, Type.NORMAL, 1.2, (user, target, move) => { - return ![Moves.HIDDEN_POWER, Moves.WEATHER_BALL, Moves.NATURAL_GIFT, Moves.JUDGMENT, Moves.TECHNO_BLAST].includes(move.id); + return ![ Moves.HIDDEN_POWER, Moves.WEATHER_BALL, Moves.NATURAL_GIFT, Moves.JUDGMENT, Moves.TECHNO_BLAST ].includes(move.id); }), new Ability(Abilities.SNIPER, 4) .attr(MultCritAbAttr, 1.5), @@ -5184,7 +5184,7 @@ export function initAbilities() { new Ability(Abilities.SLOW_START, 4) .attr(PostSummonAddBattlerTagAbAttr, BattlerTagType.SLOW_START, 5), new Ability(Abilities.SCRAPPY, 4) - .attr(IgnoreTypeImmunityAbAttr, Type.GHOST, [Type.NORMAL, Type.FIGHTING]) + .attr(IgnoreTypeImmunityAbAttr, Type.GHOST, [ Type.NORMAL, Type.FIGHTING ]) .attr(IntimidateImmunityAbAttr), new Ability(Abilities.STORM_DRAIN, 4) .attr(RedirectTypeMoveAbAttr, Type.WATER) @@ -5225,7 +5225,7 @@ export function initAbilities() { .attr(PostDefendStealHeldItemAbAttr, (target, user, move) => move.hasFlag(MoveFlags.MAKES_CONTACT)) .condition(getSheerForceHitDisableAbCondition()), new Ability(Abilities.SHEER_FORCE, 5) - .attr(MovePowerBoostAbAttr, (user, target, move) => move.chance >= 1, 5461/4096) + .attr(MovePowerBoostAbAttr, (user, target, move) => move.chance >= 1, 5461 / 4096) .attr(MoveEffectChanceMultiplierAbAttr, 0) .partial(), new Ability(Abilities.CONTRARY, 5) @@ -5234,7 +5234,7 @@ export function initAbilities() { new Ability(Abilities.UNNERVE, 5) .attr(PreventBerryUseAbAttr), new Ability(Abilities.DEFIANT, 5) - .attr(PostStatStageChangeStatStageChangeAbAttr, (target, statsChanged, stages) => stages < 0, [Stat.ATK], 2), + .attr(PostStatStageChangeStatStageChangeAbAttr, (target, statsChanged, stages) => stages < 0, [ Stat.ATK ], 2), new Ability(Abilities.DEFEATIST, 5) .attr(StatMultiplierAbAttr, Stat.ATK, 0.5) .attr(StatMultiplierAbAttr, Stat.SPATK, 0.5) @@ -5320,7 +5320,7 @@ export function initAbilities() { return move.category !== MoveCategory.STATUS && (moveType === Type.DARK || moveType === Type.BUG || moveType === Type.GHOST); }, Stat.SPD, 1) - .attr(PostIntimidateStatStageChangeAbAttr, [Stat.SPD], 1), + .attr(PostIntimidateStatStageChangeAbAttr, [ Stat.SPD ], 1), new Ability(Abilities.MAGIC_BOUNCE, 5) .ignorable() .unimplemented(), @@ -5357,12 +5357,12 @@ export function initAbilities() { .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonTeravolt", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })) .attr(MoveAbilityBypassAbAttr), new Ability(Abilities.AROMA_VEIL, 6) - .attr(UserFieldBattlerTagImmunityAbAttr, [BattlerTagType.INFATUATED, BattlerTagType.TAUNT, BattlerTagType.DISABLED, BattlerTagType.TORMENT, BattlerTagType.HEAL_BLOCK]), + .attr(UserFieldBattlerTagImmunityAbAttr, [ BattlerTagType.INFATUATED, BattlerTagType.TAUNT, BattlerTagType.DISABLED, BattlerTagType.TORMENT, BattlerTagType.HEAL_BLOCK ]), new Ability(Abilities.FLOWER_VEIL, 6) .ignorable() .unimplemented(), new Ability(Abilities.CHEEK_POUCH, 6) - .attr(HealFromBerryUseAbAttr, 1/3), + .attr(HealFromBerryUseAbAttr, 1 / 3), new Ability(Abilities.PROTEAN, 6) .attr(PokemonTypeChangeAbAttr), //.condition((p) => !p.summonData?.abilitiesApplied.includes(Abilities.PROTEAN)), //Gen 9 Implementation @@ -5375,7 +5375,7 @@ export function initAbilities() { .attr(MoveImmunityAbAttr, (pokemon, attacker, move) => pokemon !== attacker && move.hasFlag(MoveFlags.BALLBOMB_MOVE)) .ignorable(), new Ability(Abilities.COMPETITIVE, 6) - .attr(PostStatStageChangeStatStageChangeAbAttr, (target, statsChanged, stages) => stages < 0, [Stat.SPATK], 2), + .attr(PostStatStageChangeStatStageChangeAbAttr, (target, statsChanged, stages) => stages < 0, [ Stat.SPATK ], 2), new Ability(Abilities.STRONG_JAW, 6) .attr(MovePowerBoostAbAttr, (user, target, move) => move.hasFlag(MoveFlags.BITING_MOVE), 1.5), new Ability(Abilities.REFRIGERATE, 6) @@ -5471,7 +5471,7 @@ export function initAbilities() { new Ability(Abilities.STEELWORKER, 7) .attr(MoveTypePowerBoostAbAttr, Type.STEEL), new Ability(Abilities.BERSERK, 7) - .attr(PostDefendHpGatedStatStageChangeAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, 0.5, [Stat.SPATK], 1) + .attr(PostDefendHpGatedStatStageChangeAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, 0.5, [ Stat.SPATK ], 1) .condition(getSheerForceHitDisableAbCondition()), new Ability(Abilities.SLUSH_RUSH, 7) .attr(StatMultiplierAbAttr, Stat.SPD, 2) @@ -5528,7 +5528,7 @@ export function initAbilities() { .bypassFaint() .partial(), new Ability(Abilities.CORROSION, 7) // TODO: Test Corrosion against Magic Bounce once it is implemented - .attr(IgnoreTypeStatusEffectImmunityAbAttr, [StatusEffect.POISON, StatusEffect.TOXIC], [Type.STEEL, Type.POISON]) + .attr(IgnoreTypeStatusEffectImmunityAbAttr, [ StatusEffect.POISON, StatusEffect.TOXIC ], [ Type.STEEL, Type.POISON ]) .partial(), new Ability(Abilities.COMATOSE, 7) .attr(UncopiableAbilityAbAttr) @@ -5545,7 +5545,7 @@ export function initAbilities() { new Ability(Abilities.DANCER, 7) .attr(PostDancingMoveAbAttr), new Ability(Abilities.BATTERY, 7) - .attr(AllyMoveCategoryPowerBoostAbAttr, [MoveCategory.SPECIAL], 1.3), + .attr(AllyMoveCategoryPowerBoostAbAttr, [ MoveCategory.SPECIAL ], 1.3), new Ability(Abilities.FLUFFY, 7) .attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => move.hasFlag(MoveFlags.MAKES_CONTACT), 0.5) .attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => user.getMoveType(move) === Type.FIRE, 2) @@ -5671,11 +5671,11 @@ export function initAbilities() { .bypassFaint() .ignorable(), new Ability(Abilities.POWER_SPOT, 8) - .attr(AllyMoveCategoryPowerBoostAbAttr, [MoveCategory.SPECIAL, MoveCategory.PHYSICAL], 1.3), + .attr(AllyMoveCategoryPowerBoostAbAttr, [ MoveCategory.SPECIAL, MoveCategory.PHYSICAL ], 1.3), new Ability(Abilities.MIMICRY, 8) .unimplemented(), new Ability(Abilities.SCREEN_CLEANER, 8) - .attr(PostSummonRemoveArenaTagAbAttr, [ArenaTagType.AURORA_VEIL, ArenaTagType.LIGHT_SCREEN, ArenaTagType.REFLECT]), + .attr(PostSummonRemoveArenaTagAbAttr, [ ArenaTagType.AURORA_VEIL, ArenaTagType.LIGHT_SCREEN, ArenaTagType.REFLECT ]), new Ability(Abilities.STEELY_SPIRIT, 8) .attr(UserFieldMoveTypePowerBoostAbAttr, Type.STEEL), new Ability(Abilities.PERISH_BODY, 8) @@ -5758,7 +5758,7 @@ export function initAbilities() { .attr(PostSummonStatStageChangeOnArenaAbAttr, ArenaTagType.TAILWIND) .ignorable(), new Ability(Abilities.GUARD_DOG, 9) - .attr(PostIntimidateStatStageChangeAbAttr, [Stat.ATK], 1, true) + .attr(PostIntimidateStatStageChangeAbAttr, [ Stat.ATK ], 1, true) .attr(ForceSwitchOutImmunityAbAttr) .ignorable(), new Ability(Abilities.ROCKY_PAYLOAD, 9) @@ -5847,7 +5847,7 @@ export function initAbilities() { .attr(PreventBypassSpeedChanceAbAttr, (pokemon, move) => move.category === MoveCategory.STATUS) .attr(MoveAbilityBypassAbAttr, (pokemon, move: Move) => move.category === MoveCategory.STATUS), new Ability(Abilities.MINDS_EYE, 9) - .attr(IgnoreTypeImmunityAbAttr, Type.GHOST, [Type.NORMAL, Type.FIGHTING]) + .attr(IgnoreTypeImmunityAbAttr, Type.GHOST, [ Type.NORMAL, Type.FIGHTING ]) .attr(ProtectStatAbAttr, Stat.ACC) .attr(IgnoreOpponentStatStagesAbAttr, [ Stat.EVA ]) .ignorable(), diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index 9e121b81fea..abe443cdfa6 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -135,7 +135,7 @@ export class WeakenMoveScreenTag extends ArenaTag { */ apply(arena: Arena, args: any[]): boolean { if (this.weakenedCategories.includes((args[0] as MoveCategory))) { - (args[2] as Utils.NumberHolder).value = (args[1] as boolean) ? 2732/4096 : 0.5; + (args[2] as Utils.NumberHolder).value = (args[1] as boolean) ? 2732 / 4096 : 0.5; return true; } return false; @@ -148,7 +148,7 @@ export class WeakenMoveScreenTag extends ArenaTag { */ class ReflectTag extends WeakenMoveScreenTag { constructor(turnCount: integer, sourceId: integer, side: ArenaTagSide) { - super(ArenaTagType.REFLECT, turnCount, Moves.REFLECT, sourceId, side, [MoveCategory.PHYSICAL]); + super(ArenaTagType.REFLECT, turnCount, Moves.REFLECT, sourceId, side, [ MoveCategory.PHYSICAL ]); } onAdd(arena: Arena, quiet: boolean = false): void { @@ -164,7 +164,7 @@ class ReflectTag extends WeakenMoveScreenTag { */ class LightScreenTag extends WeakenMoveScreenTag { constructor(turnCount: integer, sourceId: integer, side: ArenaTagSide) { - super(ArenaTagType.LIGHT_SCREEN, turnCount, Moves.LIGHT_SCREEN, sourceId, side, [MoveCategory.SPECIAL]); + super(ArenaTagType.LIGHT_SCREEN, turnCount, Moves.LIGHT_SCREEN, sourceId, side, [ MoveCategory.SPECIAL ]); } onAdd(arena: Arena, quiet: boolean = false): void { @@ -180,7 +180,7 @@ class LightScreenTag extends WeakenMoveScreenTag { */ class AuroraVeilTag extends WeakenMoveScreenTag { constructor(turnCount: integer, sourceId: integer, side: ArenaTagSide) { - super(ArenaTagType.AURORA_VEIL, turnCount, Moves.AURORA_VEIL, sourceId, side, [MoveCategory.SPECIAL, MoveCategory.PHYSICAL]); + super(ArenaTagType.AURORA_VEIL, turnCount, Moves.AURORA_VEIL, sourceId, side, [ MoveCategory.SPECIAL, MoveCategory.PHYSICAL ]); } onAdd(arena: Arena, quiet: boolean = false): void { @@ -988,7 +988,7 @@ class ImprisonTag extends ArenaTrapTag { party?.forEach((p: PlayerPokemon | EnemyPokemon ) => { p.addTag(BattlerTagType.IMPRISON, 1, Moves.IMPRISON, this.sourceId); }); - scene.queueMessage(i18next.t("battlerTags:imprisonOnAdd", {pokemonNameWithAffix: getPokemonNameWithAffix(this.source)})); + scene.queueMessage(i18next.t("battlerTags:imprisonOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(this.source) })); } } diff --git a/src/data/balance/biomes.ts b/src/data/balance/biomes.ts index f35bd56b3a4..7ef83b654db 100644 --- a/src/data/balance/biomes.ts +++ b/src/data/balance/biomes.ts @@ -37,34 +37,34 @@ export const biomeLinks: BiomeLinks = { [Biome.PLAINS]: [ Biome.GRASS, Biome.METROPOLIS, Biome.LAKE ], [Biome.GRASS]: Biome.TALL_GRASS, [Biome.TALL_GRASS]: [ Biome.FOREST, Biome.CAVE ], - [Biome.SLUM]: [ Biome.CONSTRUCTION_SITE, [ Biome.SWAMP, 2 ] ], + [Biome.SLUM]: [ Biome.CONSTRUCTION_SITE, [ Biome.SWAMP, 2 ]], [Biome.FOREST]: [ Biome.JUNGLE, Biome.MEADOW ], [Biome.SEA]: [ Biome.SEABED, Biome.ICE_CAVE ], [Biome.SWAMP]: [ Biome.GRAVEYARD, Biome.TALL_GRASS ], - [Biome.BEACH]: [ Biome.SEA, [ Biome.ISLAND, 2 ] ], + [Biome.BEACH]: [ Biome.SEA, [ Biome.ISLAND, 2 ]], [Biome.LAKE]: [ Biome.BEACH, Biome.SWAMP, Biome.CONSTRUCTION_SITE ], - [Biome.SEABED]: [ Biome.CAVE, [ Biome.VOLCANO, 3 ] ], - [Biome.MOUNTAIN]: [ Biome.VOLCANO, [ Biome.WASTELAND, 2 ], [ Biome.SPACE, 3 ] ], + [Biome.SEABED]: [ Biome.CAVE, [ Biome.VOLCANO, 3 ]], + [Biome.MOUNTAIN]: [ Biome.VOLCANO, [ Biome.WASTELAND, 2 ], [ Biome.SPACE, 3 ]], [Biome.BADLANDS]: [ Biome.DESERT, Biome.MOUNTAIN ], - [Biome.CAVE]: [ Biome.BADLANDS, Biome.LAKE, [ Biome.LABORATORY, 2 ] ], - [Biome.DESERT]: [ Biome.RUINS, [ Biome.CONSTRUCTION_SITE, 2 ] ], + [Biome.CAVE]: [ Biome.BADLANDS, Biome.LAKE, [ Biome.LABORATORY, 2 ]], + [Biome.DESERT]: [ Biome.RUINS, [ Biome.CONSTRUCTION_SITE, 2 ]], [Biome.ICE_CAVE]: Biome.SNOWY_FOREST, [Biome.MEADOW]: [ Biome.PLAINS, Biome.FAIRY_CAVE ], [Biome.POWER_PLANT]: Biome.FACTORY, - [Biome.VOLCANO]: [ Biome.BEACH, [ Biome.ICE_CAVE, 3 ] ], + [Biome.VOLCANO]: [ Biome.BEACH, [ Biome.ICE_CAVE, 3 ]], [Biome.GRAVEYARD]: Biome.ABYSS, - [Biome.DOJO]: [ Biome.PLAINS, [ Biome.JUNGLE, 2], [ Biome.TEMPLE, 2 ] ], - [Biome.FACTORY]: [ Biome.PLAINS, [ Biome.LABORATORY, 2 ] ], - [Biome.RUINS]: [ Biome.MOUNTAIN, [ Biome.FOREST, 2 ] ], + [Biome.DOJO]: [ Biome.PLAINS, [ Biome.JUNGLE, 2 ], [ Biome.TEMPLE, 2 ]], + [Biome.FACTORY]: [ Biome.PLAINS, [ Biome.LABORATORY, 2 ]], + [Biome.RUINS]: [ Biome.MOUNTAIN, [ Biome.FOREST, 2 ]], [Biome.WASTELAND]: Biome.BADLANDS, - [Biome.ABYSS]: [ Biome.CAVE, [ Biome.SPACE, 2 ], [ Biome.WASTELAND, 2 ] ], + [Biome.ABYSS]: [ Biome.CAVE, [ Biome.SPACE, 2 ], [ Biome.WASTELAND, 2 ]], [Biome.SPACE]: Biome.RUINS, - [Biome.CONSTRUCTION_SITE]: [ Biome.POWER_PLANT, [ Biome.DOJO, 2 ] ], + [Biome.CONSTRUCTION_SITE]: [ Biome.POWER_PLANT, [ Biome.DOJO, 2 ]], [Biome.JUNGLE]: [ Biome.TEMPLE ], - [Biome.FAIRY_CAVE]: [ Biome.ICE_CAVE, [ Biome.SPACE, 2 ] ], - [Biome.TEMPLE]: [ Biome.DESERT, [ Biome.SWAMP, 2 ], [ Biome.RUINS, 2 ] ], + [Biome.FAIRY_CAVE]: [ Biome.ICE_CAVE, [ Biome.SPACE, 2 ]], + [Biome.TEMPLE]: [ Biome.DESERT, [ Biome.SWAMP, 2 ], [ Biome.RUINS, 2 ]], [Biome.METROPOLIS]: Biome.SLUM, - [Biome.SNOWY_FOREST]: [ Biome.FOREST, [ Biome.MOUNTAIN, 2 ], [ Biome.LAKE, 2 ] ], + [Biome.SNOWY_FOREST]: [ Biome.FOREST, [ Biome.MOUNTAIN, 2 ], [ Biome.LAKE, 2 ]], [Biome.ISLAND]: Biome.SEA, [Biome.LABORATORY]: Biome.CONSTRUCTION_SITE }; @@ -113,7 +113,7 @@ export const biomePokemonPools: BiomePokemonPools = { [Biome.TOWN]: { [BiomePoolTier.COMMON]: { [TimeOfDay.DAWN]: [ - { 1: [ Species.CATERPIE ], 7: [ Species.METAPOD ] }, + { 1: [ Species.CATERPIE ], 7: [ Species.METAPOD ]}, Species.SENTRET, Species.LEDYBA, Species.HOPPIP, @@ -121,12 +121,12 @@ export const biomePokemonPools: BiomePokemonPools = { Species.STARLY, Species.PIDOVE, Species.COTTONEE, - { 1: [ Species.SCATTERBUG ], 9: [ Species.SPEWPA ] }, + { 1: [ Species.SCATTERBUG ], 9: [ Species.SPEWPA ]}, Species.YUNGOOS, Species.SKWOVET ], [TimeOfDay.DAY]: [ - { 1: [ Species.CATERPIE ], 7: [ Species.METAPOD ] }, + { 1: [ Species.CATERPIE ], 7: [ Species.METAPOD ]}, Species.SENTRET, Species.HOPPIP, Species.SUNKERN, @@ -134,12 +134,12 @@ export const biomePokemonPools: BiomePokemonPools = { Species.STARLY, Species.PIDOVE, Species.COTTONEE, - { 1: [ Species.SCATTERBUG ], 9: [ Species.SPEWPA ] }, + { 1: [ Species.SCATTERBUG ], 9: [ Species.SPEWPA ]}, Species.YUNGOOS, Species.SKWOVET ], - [TimeOfDay.DUSK]: [ { 1: [ Species.WEEDLE ], 7: [ Species.KAKUNA ] }, Species.POOCHYENA, Species.PATRAT, Species.PURRLOIN, Species.BLIPBUG ], - [TimeOfDay.NIGHT]: [ { 1: [ Species.WEEDLE ], 7: [ Species.KAKUNA ] }, Species.HOOTHOOT, Species.SPINARAK, Species.POOCHYENA, Species.CASCOON, Species.PATRAT, Species.PURRLOIN, Species.BLIPBUG ], + [TimeOfDay.DUSK]: [{ 1: [ Species.WEEDLE ], 7: [ Species.KAKUNA ]}, Species.POOCHYENA, Species.PATRAT, Species.PURRLOIN, Species.BLIPBUG ], + [TimeOfDay.NIGHT]: [{ 1: [ Species.WEEDLE ], 7: [ Species.KAKUNA ]}, Species.HOOTHOOT, Species.SPINARAK, Species.POOCHYENA, Species.CASCOON, Species.PATRAT, Species.PURRLOIN, Species.BLIPBUG ], [TimeOfDay.ALL]: [ Species.PIDGEY, Species.RATTATA, Species.SPEAROW, Species.ZIGZAGOON, Species.WURMPLE, Species.TAILLOW, Species.BIDOOF, Species.LILLIPUP, Species.FLETCHLING, Species.WOOLOO, Species.LECHONK ] }, [BiomePoolTier.UNCOMMON]: { @@ -149,56 +149,56 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [ Species.EKANS, Species.ODDISH, Species.PARAS, Species.VENONAT, Species.MEOWTH, Species.SEEDOT, Species.SHROOMISH, Species.KRICKETOT, Species.VENIPEDE ], [TimeOfDay.ALL]: [ Species.NINCADA, Species.WHISMUR, Species.FIDOUGH ] }, - [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [ Species.TANDEMAUS ], [TimeOfDay.DAY]: [ Species.TANDEMAUS ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ABRA, Species.SURSKIT, Species.ROOKIDEE ] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.EEVEE, Species.RALTS ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DITTO ] }, - [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } + [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [ Species.TANDEMAUS ], [TimeOfDay.DAY]: [ Species.TANDEMAUS ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ABRA, Species.SURSKIT, Species.ROOKIDEE ]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.EEVEE, Species.RALTS ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DITTO ]}, + [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []} }, [Biome.PLAINS]: { [BiomePoolTier.COMMON]: { - [TimeOfDay.DAWN]: [ { 1: [ Species.SENTRET ], 15: [ Species.FURRET ] }, { 1: [ Species.YUNGOOS ], 30: [ Species.GUMSHOOS ] }, { 1: [ Species.SKWOVET ], 24: [ Species.GREEDENT ] } ], - [TimeOfDay.DAY]: [ { 1: [ Species.SENTRET ], 15: [ Species.FURRET ] }, { 1: [ Species.YUNGOOS ], 30: [ Species.GUMSHOOS ] }, { 1: [ Species.SKWOVET ], 24: [ Species.GREEDENT ] } ], - [TimeOfDay.DUSK]: [ { 1: [ Species.MEOWTH ], 28: [ Species.PERSIAN ] }, { 1: [ Species.POOCHYENA ], 18: [ Species.MIGHTYENA ] } ], - [TimeOfDay.NIGHT]: [ { 1: [ Species.ZUBAT ], 22: [ Species.GOLBAT ] }, { 1: [ Species.MEOWTH ], 28: [ Species.PERSIAN ] }, { 1: [ Species.POOCHYENA ], 18: [ Species.MIGHTYENA ] } ], - [TimeOfDay.ALL]: [ { 1: [ Species.ZIGZAGOON ], 20: [ Species.LINOONE ] }, { 1: [ Species.BIDOOF ], 15: [ Species.BIBAREL ] }, { 1: [ Species.LECHONK ], 18: [ Species.OINKOLOGNE ] } ] + [TimeOfDay.DAWN]: [{ 1: [ Species.SENTRET ], 15: [ Species.FURRET ]}, { 1: [ Species.YUNGOOS ], 30: [ Species.GUMSHOOS ]}, { 1: [ Species.SKWOVET ], 24: [ Species.GREEDENT ]}], + [TimeOfDay.DAY]: [{ 1: [ Species.SENTRET ], 15: [ Species.FURRET ]}, { 1: [ Species.YUNGOOS ], 30: [ Species.GUMSHOOS ]}, { 1: [ Species.SKWOVET ], 24: [ Species.GREEDENT ]}], + [TimeOfDay.DUSK]: [{ 1: [ Species.MEOWTH ], 28: [ Species.PERSIAN ]}, { 1: [ Species.POOCHYENA ], 18: [ Species.MIGHTYENA ]}], + [TimeOfDay.NIGHT]: [{ 1: [ Species.ZUBAT ], 22: [ Species.GOLBAT ]}, { 1: [ Species.MEOWTH ], 28: [ Species.PERSIAN ]}, { 1: [ Species.POOCHYENA ], 18: [ Species.MIGHTYENA ]}], + [TimeOfDay.ALL]: [{ 1: [ Species.ZIGZAGOON ], 20: [ Species.LINOONE ]}, { 1: [ Species.BIDOOF ], 15: [ Species.BIBAREL ]}, { 1: [ Species.LECHONK ], 18: [ Species.OINKOLOGNE ]}] }, [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [ - { 1: [ Species.DODUO ], 31: [ Species.DODRIO ] }, - { 1: [ Species.POOCHYENA ], 18: [ Species.MIGHTYENA ] }, - { 1: [ Species.STARLY ], 14: [ Species.STARAVIA ], 34: [ Species.STARAPTOR ] }, - { 1: [ Species.PIDOVE ], 21: [ Species.TRANQUILL ], 32: [ Species.UNFEZANT ] }, - { 1: [ Species.PAWMI ], 18: [ Species.PAWMO ], 32: [ Species.PAWMOT ] } + { 1: [ Species.DODUO ], 31: [ Species.DODRIO ]}, + { 1: [ Species.POOCHYENA ], 18: [ Species.MIGHTYENA ]}, + { 1: [ Species.STARLY ], 14: [ Species.STARAVIA ], 34: [ Species.STARAPTOR ]}, + { 1: [ Species.PIDOVE ], 21: [ Species.TRANQUILL ], 32: [ Species.UNFEZANT ]}, + { 1: [ Species.PAWMI ], 18: [ Species.PAWMO ], 32: [ Species.PAWMOT ]} ], [TimeOfDay.DAY]: [ - { 1: [ Species.DODUO ], 31: [ Species.DODRIO ] }, - { 1: [ Species.POOCHYENA ], 18: [ Species.MIGHTYENA ] }, - { 1: [ Species.STARLY ], 14: [ Species.STARAVIA ], 34: [ Species.STARAPTOR ] }, - { 1: [ Species.PIDOVE ], 21: [ Species.TRANQUILL ], 32: [ Species.UNFEZANT ] }, - { 1: [ Species.ROCKRUFF ], 25: [ Species.LYCANROC ] }, - { 1: [ Species.PAWMI ], 18: [ Species.PAWMO ], 32: [ Species.PAWMOT ] } + { 1: [ Species.DODUO ], 31: [ Species.DODRIO ]}, + { 1: [ Species.POOCHYENA ], 18: [ Species.MIGHTYENA ]}, + { 1: [ Species.STARLY ], 14: [ Species.STARAVIA ], 34: [ Species.STARAPTOR ]}, + { 1: [ Species.PIDOVE ], 21: [ Species.TRANQUILL ], 32: [ Species.UNFEZANT ]}, + { 1: [ Species.ROCKRUFF ], 25: [ Species.LYCANROC ]}, + { 1: [ Species.PAWMI ], 18: [ Species.PAWMO ], 32: [ Species.PAWMOT ]} ], - [TimeOfDay.DUSK]: [ { 1: [ Species.MANKEY ], 28: [ Species.PRIMEAPE ], 75: [ Species.ANNIHILAPE ] } ], - [TimeOfDay.NIGHT]: [ { 1: [ Species.MANKEY ], 28: [ Species.PRIMEAPE ], 75: [ Species.ANNIHILAPE ] } ], + [TimeOfDay.DUSK]: [{ 1: [ Species.MANKEY ], 28: [ Species.PRIMEAPE ], 75: [ Species.ANNIHILAPE ]}], + [TimeOfDay.NIGHT]: [{ 1: [ Species.MANKEY ], 28: [ Species.PRIMEAPE ], 75: [ Species.ANNIHILAPE ]}], [TimeOfDay.ALL]: [ - { 1: [ Species.PIDGEY ], 18: [ Species.PIDGEOTTO ], 36: [ Species.PIDGEOT ] }, - { 1: [ Species.SPEAROW ], 20: [ Species.FEAROW ] }, + { 1: [ Species.PIDGEY ], 18: [ Species.PIDGEOTTO ], 36: [ Species.PIDGEOT ]}, + { 1: [ Species.SPEAROW ], 20: [ Species.FEAROW ]}, Species.PIKACHU, - { 1: [ Species.FLETCHLING ], 17: [ Species.FLETCHINDER ], 35: [ Species.TALONFLAME ] } + { 1: [ Species.FLETCHLING ], 17: [ Species.FLETCHINDER ], 35: [ Species.TALONFLAME ]} ] }, [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [ Species.PALDEA_TAUROS ], [TimeOfDay.DAY]: [ Species.PALDEA_TAUROS ], - [TimeOfDay.DUSK]: [ { 1: [ Species.SHINX ], 15: [ Species.LUXIO ], 30: [ Species.LUXRAY ] } ], - [TimeOfDay.NIGHT]: [ { 1: [ Species.SHINX ], 15: [ Species.LUXIO ], 30: [ Species.LUXRAY ] } ], - [TimeOfDay.ALL]: [ { 1: [ Species.ABRA ], 16: [ Species.KADABRA ] }, { 1: [ Species.BUNEARY ], 20: [ Species.LOPUNNY ] }, { 1: [ Species.ROOKIDEE ], 18: [ Species.CORVISQUIRE ], 38: [ Species.CORVIKNIGHT ] } ] + [TimeOfDay.DUSK]: [{ 1: [ Species.SHINX ], 15: [ Species.LUXIO ], 30: [ Species.LUXRAY ]}], + [TimeOfDay.NIGHT]: [{ 1: [ Species.SHINX ], 15: [ Species.LUXIO ], 30: [ Species.LUXRAY ]}], + [TimeOfDay.ALL]: [{ 1: [ Species.ABRA ], 16: [ Species.KADABRA ]}, { 1: [ Species.BUNEARY ], 20: [ Species.LOPUNNY ]}, { 1: [ Species.ROOKIDEE ], 18: [ Species.CORVISQUIRE ], 38: [ Species.CORVIKNIGHT ]}] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.FARFETCHD, Species.LICKITUNG, Species.CHANSEY, Species.EEVEE, Species.SNORLAX, { 1: [ Species.DUNSPARCE ], 62: [ Species.DUDUNSPARCE ] } ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DITTO, Species.LATIAS, Species.LATIOS ] }, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.FARFETCHD, Species.LICKITUNG, Species.CHANSEY, Species.EEVEE, Species.SNORLAX, { 1: [ Species.DUNSPARCE ], 62: [ Species.DUDUNSPARCE ]}]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DITTO, Species.LATIAS, Species.LATIOS ]}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.DODRIO, Species.FURRET, Species.GUMSHOOS, Species.GREEDENT ], [TimeOfDay.DAY]: [ Species.DODRIO, Species.FURRET, Species.GUMSHOOS, Species.GREEDENT ], @@ -213,22 +213,22 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.FARFETCHD, Species.SNORLAX, Species.LICKILICKY, Species.DUDUNSPARCE ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.LATIAS, Species.LATIOS ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.LATIAS, Species.LATIOS ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []} }, [Biome.GRASS]: { [BiomePoolTier.COMMON]: { - [TimeOfDay.DAWN]: [ { 1: [ Species.HOPPIP ], 18: [ Species.SKIPLOOM ] }, Species.SUNKERN, Species.COTTONEE, Species.PETILIL ], - [TimeOfDay.DAY]: [ { 1: [ Species.HOPPIP ], 18: [ Species.SKIPLOOM ] }, Species.SUNKERN, Species.COTTONEE, Species.PETILIL ], - [TimeOfDay.DUSK]: [ { 1: [ Species.SEEDOT ], 14: [ Species.NUZLEAF ] }, { 1: [ Species.SHROOMISH ], 23: [ Species.BRELOOM ] } ], - [TimeOfDay.NIGHT]: [ { 1: [ Species.SEEDOT ], 14: [ Species.NUZLEAF ] }, { 1: [ Species.SHROOMISH ], 23: [ Species.BRELOOM ] } ], + [TimeOfDay.DAWN]: [{ 1: [ Species.HOPPIP ], 18: [ Species.SKIPLOOM ]}, Species.SUNKERN, Species.COTTONEE, Species.PETILIL ], + [TimeOfDay.DAY]: [{ 1: [ Species.HOPPIP ], 18: [ Species.SKIPLOOM ]}, Species.SUNKERN, Species.COTTONEE, Species.PETILIL ], + [TimeOfDay.DUSK]: [{ 1: [ Species.SEEDOT ], 14: [ Species.NUZLEAF ]}, { 1: [ Species.SHROOMISH ], 23: [ Species.BRELOOM ]}], + [TimeOfDay.NIGHT]: [{ 1: [ Species.SEEDOT ], 14: [ Species.NUZLEAF ]}, { 1: [ Species.SHROOMISH ], 23: [ Species.BRELOOM ]}], [TimeOfDay.ALL]: [] }, [BiomePoolTier.UNCOMMON]: { - [TimeOfDay.DAWN]: [ { 1: [ Species.COMBEE ], 21: [ Species.VESPIQUEN ] }, { 1: [ Species.CHERUBI ], 25: [ Species.CHERRIM ] } ], - [TimeOfDay.DAY]: [ { 1: [ Species.COMBEE ], 21: [ Species.VESPIQUEN ] }, { 1: [ Species.CHERUBI ], 25: [ Species.CHERRIM ] } ], - [TimeOfDay.DUSK]: [ { 1: [ Species.FOONGUS ], 39: [ Species.AMOONGUSS ] } ], - [TimeOfDay.NIGHT]: [ { 1: [ Species.FOONGUS ], 39: [ Species.AMOONGUSS ] } ], + [TimeOfDay.DAWN]: [{ 1: [ Species.COMBEE ], 21: [ Species.VESPIQUEN ]}, { 1: [ Species.CHERUBI ], 25: [ Species.CHERRIM ]}], + [TimeOfDay.DAY]: [{ 1: [ Species.COMBEE ], 21: [ Species.VESPIQUEN ]}, { 1: [ Species.CHERUBI ], 25: [ Species.CHERRIM ]}], + [TimeOfDay.DUSK]: [{ 1: [ Species.FOONGUS ], 39: [ Species.AMOONGUSS ]}], + [TimeOfDay.NIGHT]: [{ 1: [ Species.FOONGUS ], 39: [ Species.AMOONGUSS ]}], [TimeOfDay.ALL]: [] }, [BiomePoolTier.RARE]: { @@ -236,28 +236,28 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ { 1: [ Species.BULBASAUR ], 16: [ Species.IVYSAUR ], 32: [ Species.VENUSAUR ] }, Species.GROWLITHE, { 1: [ Species.TURTWIG ], 18: [ Species.GROTLE ], 32: [ Species.TORTERRA ] } ] + [TimeOfDay.ALL]: [{ 1: [ Species.BULBASAUR ], 16: [ Species.IVYSAUR ], 32: [ Species.VENUSAUR ]}, Species.GROWLITHE, { 1: [ Species.TURTWIG ], 18: [ Species.GROTLE ], 32: [ Species.TORTERRA ]}] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SUDOWOODO ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VIRIZION ] }, - [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.JUMPLUFF, Species.SUNFLORA, Species.WHIMSICOTT ], [TimeOfDay.DAY]: [ Species.JUMPLUFF, Species.SUNFLORA, Species.WHIMSICOTT ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VENUSAUR, Species.SUDOWOODO, Species.TORTERRA ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VIRIZION ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SUDOWOODO ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VIRIZION ]}, + [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.JUMPLUFF, Species.SUNFLORA, Species.WHIMSICOTT ], [TimeOfDay.DAY]: [ Species.JUMPLUFF, Species.SUNFLORA, Species.WHIMSICOTT ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VENUSAUR, Species.SUDOWOODO, Species.TORTERRA ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VIRIZION ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []} }, [Biome.TALL_GRASS]: { [BiomePoolTier.COMMON]: { - [TimeOfDay.DAWN]: [ { 1: [ Species.BOUNSWEET ], 18: [ Species.STEENEE ], 58: [ Species.TSAREENA ] } ], - [TimeOfDay.DAY]: [ { 1: [ Species.NIDORAN_F ], 16: [ Species.NIDORINA ] }, { 1: [ Species.NIDORAN_M ], 16: [ Species.NIDORINO ] }, { 1: [ Species.BOUNSWEET ], 18: [ Species.STEENEE ], 58: [ Species.TSAREENA ] } ], - [TimeOfDay.DUSK]: [ { 1: [ Species.ODDISH ], 21: [ Species.GLOOM ] }, { 1: [ Species.KRICKETOT ], 10: [ Species.KRICKETUNE ] } ], - [TimeOfDay.NIGHT]: [ { 1: [ Species.ODDISH ], 21: [ Species.GLOOM ] }, { 1: [ Species.KRICKETOT ], 10: [ Species.KRICKETUNE ] } ], - [TimeOfDay.ALL]: [ { 1: [ Species.NINCADA ], 20: [ Species.NINJASK ] }, { 1: [ Species.FOMANTIS ], 44: [ Species.LURANTIS ] }, { 1: [ Species.NYMBLE ], 24: [ Species.LOKIX ] } ] + [TimeOfDay.DAWN]: [{ 1: [ Species.BOUNSWEET ], 18: [ Species.STEENEE ], 58: [ Species.TSAREENA ]}], + [TimeOfDay.DAY]: [{ 1: [ Species.NIDORAN_F ], 16: [ Species.NIDORINA ]}, { 1: [ Species.NIDORAN_M ], 16: [ Species.NIDORINO ]}, { 1: [ Species.BOUNSWEET ], 18: [ Species.STEENEE ], 58: [ Species.TSAREENA ]}], + [TimeOfDay.DUSK]: [{ 1: [ Species.ODDISH ], 21: [ Species.GLOOM ]}, { 1: [ Species.KRICKETOT ], 10: [ Species.KRICKETUNE ]}], + [TimeOfDay.NIGHT]: [{ 1: [ Species.ODDISH ], 21: [ Species.GLOOM ]}, { 1: [ Species.KRICKETOT ], 10: [ Species.KRICKETUNE ]}], + [TimeOfDay.ALL]: [{ 1: [ Species.NINCADA ], 20: [ Species.NINJASK ]}, { 1: [ Species.FOMANTIS ], 44: [ Species.LURANTIS ]}, { 1: [ Species.NYMBLE ], 24: [ Species.LOKIX ]}] }, [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], - [TimeOfDay.NIGHT]: [ { 1: [ Species.PARAS ], 24: [ Species.PARASECT ] }, { 1: [ Species.VENONAT ], 31: [ Species.VENOMOTH ] }, { 1: [ Species.SPINARAK ], 22: [ Species.ARIADOS ] } ], + [TimeOfDay.NIGHT]: [{ 1: [ Species.PARAS ], 24: [ Species.PARASECT ]}, { 1: [ Species.VENONAT ], 31: [ Species.VENOMOTH ]}, { 1: [ Species.SPINARAK ], 22: [ Species.ARIADOS ]}], [TimeOfDay.ALL]: [ Species.VULPIX ] }, [BiomePoolTier.RARE]: { @@ -265,10 +265,10 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.PINSIR, { 1: [ Species.CHIKORITA ], 16: [ Species.BAYLEEF ], 32: [ Species.MEGANIUM ] }, { 1: [ Species.GIRAFARIG ], 62: [ Species.FARIGIRAF ] }, Species.ZANGOOSE, Species.KECLEON, Species.TROPIUS ] + [TimeOfDay.ALL]: [ Species.PINSIR, { 1: [ Species.CHIKORITA ], 16: [ Species.BAYLEEF ], 32: [ Species.MEGANIUM ]}, { 1: [ Species.GIRAFARIG ], 62: [ Species.FARIGIRAF ]}, Species.ZANGOOSE, Species.KECLEON, Species.TROPIUS ] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SCYTHER, Species.SHEDINJA, Species.ROTOM ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SCYTHER, Species.SHEDINJA, Species.ROTOM ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.TSAREENA ], [TimeOfDay.DAY]: [ Species.NIDOQUEEN, Species.NIDOKING, Species.TSAREENA ], @@ -276,87 +276,87 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [ Species.VILEPLUME, Species.KRICKETUNE ], [TimeOfDay.ALL]: [ Species.NINJASK, Species.ZANGOOSE, Species.KECLEON, Species.LURANTIS, Species.LOKIX ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [ Species.BELLOSSOM ], [TimeOfDay.DAY]: [ Species.BELLOSSOM ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.PINSIR, Species.MEGANIUM, Species.FARIGIRAF ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ROTOM ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [ Species.BELLOSSOM ], [TimeOfDay.DAY]: [ Species.BELLOSSOM ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.PINSIR, Species.MEGANIUM, Species.FARIGIRAF ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ROTOM ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []} }, [Biome.METROPOLIS]: { [BiomePoolTier.COMMON]: { - [TimeOfDay.DAWN]: [ { 1: [ Species.YAMPER ], 25: [ Species.BOLTUND ] } ], - [TimeOfDay.DAY]: [ { 1: [ Species.YAMPER ], 25: [ Species.BOLTUND ] } ], - [TimeOfDay.DUSK]: [ { 1: [ Species.PATRAT ], 20: [ Species.WATCHOG ] } ], - [TimeOfDay.NIGHT]: [ { 1: [ Species.HOUNDOUR ], 24: [ Species.HOUNDOOM ] }, { 1: [ Species.PATRAT ], 20: [ Species.WATCHOG ] } ], - [TimeOfDay.ALL]: [ { 1: [ Species.RATTATA ], 20: [ Species.RATICATE ] }, { 1: [ Species.ZIGZAGOON ], 20: [ Species.LINOONE ] }, { 1: [ Species.LILLIPUP ], 16: [ Species.HERDIER ], 32: [ Species.STOUTLAND ] } ] + [TimeOfDay.DAWN]: [{ 1: [ Species.YAMPER ], 25: [ Species.BOLTUND ]}], + [TimeOfDay.DAY]: [{ 1: [ Species.YAMPER ], 25: [ Species.BOLTUND ]}], + [TimeOfDay.DUSK]: [{ 1: [ Species.PATRAT ], 20: [ Species.WATCHOG ]}], + [TimeOfDay.NIGHT]: [{ 1: [ Species.HOUNDOUR ], 24: [ Species.HOUNDOOM ]}, { 1: [ Species.PATRAT ], 20: [ Species.WATCHOG ]}], + [TimeOfDay.ALL]: [{ 1: [ Species.RATTATA ], 20: [ Species.RATICATE ]}, { 1: [ Species.ZIGZAGOON ], 20: [ Species.LINOONE ]}, { 1: [ Species.LILLIPUP ], 16: [ Species.HERDIER ], 32: [ Species.STOUTLAND ]}] }, [BiomePoolTier.UNCOMMON]: { - [TimeOfDay.DAWN]: [ { 1: [ Species.PATRAT ], 20: [ Species.WATCHOG ] }, Species.INDEEDEE ], - [TimeOfDay.DAY]: [ { 1: [ Species.PATRAT ], 20: [ Species.WATCHOG ] }, Species.INDEEDEE ], - [TimeOfDay.DUSK]: [ { 1: [ Species.ESPURR ], 25: [ Species.MEOWSTIC ] } ], - [TimeOfDay.NIGHT]: [ { 1: [ Species.ESPURR ], 25: [ Species.MEOWSTIC ] } ], - [TimeOfDay.ALL]: [ Species.PIKACHU, { 1: [ Species.GLAMEOW ], 38: [ Species.PURUGLY ] }, Species.FURFROU, { 1: [ Species.FIDOUGH ], 26: [ Species.DACHSBUN ] }, Species.SQUAWKABILLY ] + [TimeOfDay.DAWN]: [{ 1: [ Species.PATRAT ], 20: [ Species.WATCHOG ]}, Species.INDEEDEE ], + [TimeOfDay.DAY]: [{ 1: [ Species.PATRAT ], 20: [ Species.WATCHOG ]}, Species.INDEEDEE ], + [TimeOfDay.DUSK]: [{ 1: [ Species.ESPURR ], 25: [ Species.MEOWSTIC ]}], + [TimeOfDay.NIGHT]: [{ 1: [ Species.ESPURR ], 25: [ Species.MEOWSTIC ]}], + [TimeOfDay.ALL]: [ Species.PIKACHU, { 1: [ Species.GLAMEOW ], 38: [ Species.PURUGLY ]}, Species.FURFROU, { 1: [ Species.FIDOUGH ], 26: [ Species.DACHSBUN ]}, Species.SQUAWKABILLY ] }, [BiomePoolTier.RARE]: { - [TimeOfDay.DAWN]: [ { 1: [ Species.TANDEMAUS ], 25: [ Species.MAUSHOLD ] } ], - [TimeOfDay.DAY]: [ { 1: [ Species.TANDEMAUS ], 25: [ Species.MAUSHOLD ] } ], + [TimeOfDay.DAWN]: [{ 1: [ Species.TANDEMAUS ], 25: [ Species.MAUSHOLD ]}], + [TimeOfDay.DAY]: [{ 1: [ Species.TANDEMAUS ], 25: [ Species.MAUSHOLD ]}], [TimeOfDay.DUSK]: [ Species.MORPEKO ], [TimeOfDay.NIGHT]: [ Species.MORPEKO ], - [TimeOfDay.ALL]: [ { 1: [ Species.VAROOM ], 40: [ Species.REVAVROOM ] } ] + [TimeOfDay.ALL]: [{ 1: [ Species.VAROOM ], 40: [ Species.REVAVROOM ]}] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DITTO, Species.EEVEE, Species.SMEARGLE ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CASTFORM ] }, - [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.BOLTUND ], [TimeOfDay.DAY]: [ Species.BOLTUND ], [TimeOfDay.DUSK]: [ Species.MEOWSTIC ], [TimeOfDay.NIGHT]: [ Species.MEOWSTIC ], [TimeOfDay.ALL]: [ Species.STOUTLAND, Species.FURFROU, Species.DACHSBUN ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [ Species.MAUSHOLD ], [TimeOfDay.DAY]: [ Species.MAUSHOLD ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CASTFORM, Species.REVAVROOM ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DITTO, Species.EEVEE, Species.SMEARGLE ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CASTFORM ]}, + [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.BOLTUND ], [TimeOfDay.DAY]: [ Species.BOLTUND ], [TimeOfDay.DUSK]: [ Species.MEOWSTIC ], [TimeOfDay.NIGHT]: [ Species.MEOWSTIC ], [TimeOfDay.ALL]: [ Species.STOUTLAND, Species.FURFROU, Species.DACHSBUN ]}, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [ Species.MAUSHOLD ], [TimeOfDay.DAY]: [ Species.MAUSHOLD ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CASTFORM, Species.REVAVROOM ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []} }, [Biome.FOREST]: { [BiomePoolTier.COMMON]: { [TimeOfDay.DAWN]: [ Species.BUTTERFREE, - { 1: [ Species.BELLSPROUT ], 21: [ Species.WEEPINBELL ] }, - { 1: [ Species.COMBEE ], 21: [ Species.VESPIQUEN ] }, + { 1: [ Species.BELLSPROUT ], 21: [ Species.WEEPINBELL ]}, + { 1: [ Species.COMBEE ], 21: [ Species.VESPIQUEN ]}, Species.PETILIL, - { 1: [ Species.DEERLING ], 34: [ Species.SAWSBUCK ] }, + { 1: [ Species.DEERLING ], 34: [ Species.SAWSBUCK ]}, Species.VIVILLON ], [TimeOfDay.DAY]: [ Species.BUTTERFREE, - { 1: [ Species.BELLSPROUT ], 21: [ Species.WEEPINBELL ] }, + { 1: [ Species.BELLSPROUT ], 21: [ Species.WEEPINBELL ]}, Species.BEAUTIFLY, - { 1: [ Species.COMBEE ], 21: [ Species.VESPIQUEN ] }, + { 1: [ Species.COMBEE ], 21: [ Species.VESPIQUEN ]}, Species.PETILIL, - { 1: [ Species.DEERLING ], 34: [ Species.SAWSBUCK ] }, + { 1: [ Species.DEERLING ], 34: [ Species.SAWSBUCK ]}, Species.VIVILLON ], [TimeOfDay.DUSK]: [ Species.BEEDRILL, - { 1: [ Species.PINECO ], 31: [ Species.FORRETRESS ] }, - { 1: [ Species.SEEDOT ], 14: [ Species.NUZLEAF ] }, - { 1: [ Species.SHROOMISH ], 23: [ Species.BRELOOM ] }, - { 1: [ Species.VENIPEDE ], 22: [ Species.WHIRLIPEDE ], 30: [ Species.SCOLIPEDE ] } + { 1: [ Species.PINECO ], 31: [ Species.FORRETRESS ]}, + { 1: [ Species.SEEDOT ], 14: [ Species.NUZLEAF ]}, + { 1: [ Species.SHROOMISH ], 23: [ Species.BRELOOM ]}, + { 1: [ Species.VENIPEDE ], 22: [ Species.WHIRLIPEDE ], 30: [ Species.SCOLIPEDE ]} ], [TimeOfDay.NIGHT]: [ Species.BEEDRILL, - { 1: [ Species.VENONAT ], 31: [ Species.VENOMOTH ] }, - { 1: [ Species.SPINARAK ], 22: [ Species.ARIADOS ] }, - { 1: [ Species.PINECO ], 31: [ Species.FORRETRESS ] }, + { 1: [ Species.VENONAT ], 31: [ Species.VENOMOTH ]}, + { 1: [ Species.SPINARAK ], 22: [ Species.ARIADOS ]}, + { 1: [ Species.PINECO ], 31: [ Species.FORRETRESS ]}, Species.DUSTOX, - { 1: [ Species.SEEDOT ], 14: [ Species.NUZLEAF ] }, - { 1: [ Species.SHROOMISH ], 23: [ Species.BRELOOM ] }, - { 1: [ Species.VENIPEDE ], 22: [ Species.WHIRLIPEDE ], 30: [ Species.SCOLIPEDE ] } + { 1: [ Species.SEEDOT ], 14: [ Species.NUZLEAF ]}, + { 1: [ Species.SHROOMISH ], 23: [ Species.BRELOOM ]}, + { 1: [ Species.VENIPEDE ], 22: [ Species.WHIRLIPEDE ], 30: [ Species.SCOLIPEDE ]} ], - [TimeOfDay.ALL]: [ { 1: [ Species.TAROUNTULA ], 15: [ Species.SPIDOPS ] }, { 1: [ Species.NYMBLE ], 24: [ Species.LOKIX ] }, { 1: [ Species.SHROODLE ], 28: [ Species.GRAFAIAI ] } ] + [TimeOfDay.ALL]: [{ 1: [ Species.TAROUNTULA ], 15: [ Species.SPIDOPS ]}, { 1: [ Species.NYMBLE ], 24: [ Species.LOKIX ]}, { 1: [ Species.SHROODLE ], 28: [ Species.GRAFAIAI ]}] }, [BiomePoolTier.UNCOMMON]: { - [TimeOfDay.DAWN]: [ Species.ROSELIA, Species.MOTHIM, { 1: [ Species.SEWADDLE ], 20: [ Species.SWADLOON ], 30: [ Species.LEAVANNY ] } ], - [TimeOfDay.DAY]: [ Species.ROSELIA, Species.MOTHIM, { 1: [ Species.SEWADDLE ], 20: [ Species.SWADLOON ], 30: [ Species.LEAVANNY ] } ], - [TimeOfDay.DUSK]: [ { 1: [ Species.SPINARAK ], 22: [ Species.ARIADOS ] }, { 1: [ Species.DOTTLER ], 30: [ Species.ORBEETLE ] } ], - [TimeOfDay.NIGHT]: [ { 1: [ Species.HOOTHOOT ], 20: [ Species.NOCTOWL ] }, { 1: [ Species.ROCKRUFF ], 25: [ Species.LYCANROC ] }, { 1: [ Species.DOTTLER ], 30: [ Species.ORBEETLE ] } ], + [TimeOfDay.DAWN]: [ Species.ROSELIA, Species.MOTHIM, { 1: [ Species.SEWADDLE ], 20: [ Species.SWADLOON ], 30: [ Species.LEAVANNY ]}], + [TimeOfDay.DAY]: [ Species.ROSELIA, Species.MOTHIM, { 1: [ Species.SEWADDLE ], 20: [ Species.SWADLOON ], 30: [ Species.LEAVANNY ]}], + [TimeOfDay.DUSK]: [{ 1: [ Species.SPINARAK ], 22: [ Species.ARIADOS ]}, { 1: [ Species.DOTTLER ], 30: [ Species.ORBEETLE ]}], + [TimeOfDay.NIGHT]: [{ 1: [ Species.HOOTHOOT ], 20: [ Species.NOCTOWL ]}, { 1: [ Species.ROCKRUFF ], 25: [ Species.LYCANROC ]}, { 1: [ Species.DOTTLER ], 30: [ Species.ORBEETLE ]}], [TimeOfDay.ALL]: [ - { 1: [ Species.EKANS ], 22: [ Species.ARBOK ] }, - { 1: [ Species.TEDDIURSA ], 30: [ Species.URSARING ] }, - { 1: [ Species.BURMY ], 20: [ Species.WORMADAM ] }, - { 1: [ Species.PANSAGE ], 30: [ Species.SIMISAGE ] } + { 1: [ Species.EKANS ], 22: [ Species.ARBOK ]}, + { 1: [ Species.TEDDIURSA ], 30: [ Species.URSARING ]}, + { 1: [ Species.BURMY ], 20: [ Species.WORMADAM ]}, + { 1: [ Species.PANSAGE ], 30: [ Species.SIMISAGE ]} ] }, [BiomePoolTier.RARE]: { @@ -366,18 +366,18 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [ Species.SCYTHER ], [TimeOfDay.ALL]: [ Species.HERACROSS, - { 1: [ Species.TREECKO ], 16: [ Species.GROVYLE ], 36: [ Species.SCEPTILE ] }, + { 1: [ Species.TREECKO ], 16: [ Species.GROVYLE ], 36: [ Species.SCEPTILE ]}, Species.TROPIUS, Species.KARRABLAST, Species.SHELMET, - { 1: [ Species.CHESPIN ], 16: [ Species.QUILLADIN ], 36: [ Species.CHESNAUGHT ] }, - { 1: [ Species.ROWLET ], 17: [ Species.DARTRIX ], 34: [ Species.DECIDUEYE ] }, + { 1: [ Species.CHESPIN ], 16: [ Species.QUILLADIN ], 36: [ Species.CHESNAUGHT ]}, + { 1: [ Species.ROWLET ], 17: [ Species.DARTRIX ], 34: [ Species.DECIDUEYE ]}, Species.SQUAWKABILLY, - { 1: [ Species.TOEDSCOOL ], 30: [ Species.TOEDSCRUEL ] } + { 1: [ Species.TOEDSCOOL ], 30: [ Species.TOEDSCRUEL ]} ] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [ Species.BLOODMOON_URSALUNA ], [TimeOfDay.ALL]: [ Species.DURANT ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KARTANA, Species.WO_CHIEN ] }, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [ Species.BLOODMOON_URSALUNA ], [TimeOfDay.ALL]: [ Species.DURANT ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KARTANA, Species.WO_CHIEN ]}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.VICTREEBEL, Species.MOTHIM, Species.VESPIQUEN, Species.LILLIGANT, Species.SAWSBUCK ], [TimeOfDay.DAY]: [ Species.VICTREEBEL, Species.BEAUTIFLY, Species.MOTHIM, Species.VESPIQUEN, Species.LILLIGANT, Species.SAWSBUCK ], @@ -392,29 +392,29 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [ Species.LYCANROC, Species.BLOODMOON_URSALUNA ], [TimeOfDay.ALL]: [ Species.HERACROSS, Species.SCEPTILE, Species.ESCAVALIER, Species.ACCELGOR, Species.DURANT, Species.CHESNAUGHT, Species.DECIDUEYE, Species.TOEDSCRUEL ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KARTANA, Species.WO_CHIEN ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CALYREX ] } + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KARTANA, Species.WO_CHIEN ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CALYREX ]} }, [Biome.SEA]: { [BiomePoolTier.COMMON]: { - [TimeOfDay.DAWN]: [ { 1: [ Species.SLOWPOKE ], 37: [ Species.SLOWBRO ] }, { 1: [ Species.WINGULL ], 25: [ Species.PELIPPER ] }, Species.CRAMORANT, { 1: [ Species.FINIZEN ], 38: [ Species.PALAFIN ] } ], - [TimeOfDay.DAY]: [ { 1: [ Species.SLOWPOKE ], 37: [ Species.SLOWBRO ] }, { 1: [ Species.WINGULL ], 25: [ Species.PELIPPER ] }, Species.CRAMORANT, { 1: [ Species.FINIZEN ], 38: [ Species.PALAFIN ] } ], - [TimeOfDay.DUSK]: [ { 1: [ Species.INKAY ], 30: [ Species.MALAMAR ] } ], - [TimeOfDay.NIGHT]: [ { 1: [ Species.FINNEON ], 31: [ Species.LUMINEON ] }, { 1: [ Species.INKAY ], 30: [ Species.MALAMAR ] } ], - [TimeOfDay.ALL]: [ { 1: [ Species.TENTACOOL ], 30: [ Species.TENTACRUEL ] }, { 1: [ Species.MAGIKARP ], 20: [ Species.GYARADOS ] }, { 1: [ Species.BUIZEL ], 26: [ Species.FLOATZEL ] } ] + [TimeOfDay.DAWN]: [{ 1: [ Species.SLOWPOKE ], 37: [ Species.SLOWBRO ]}, { 1: [ Species.WINGULL ], 25: [ Species.PELIPPER ]}, Species.CRAMORANT, { 1: [ Species.FINIZEN ], 38: [ Species.PALAFIN ]}], + [TimeOfDay.DAY]: [{ 1: [ Species.SLOWPOKE ], 37: [ Species.SLOWBRO ]}, { 1: [ Species.WINGULL ], 25: [ Species.PELIPPER ]}, Species.CRAMORANT, { 1: [ Species.FINIZEN ], 38: [ Species.PALAFIN ]}], + [TimeOfDay.DUSK]: [{ 1: [ Species.INKAY ], 30: [ Species.MALAMAR ]}], + [TimeOfDay.NIGHT]: [{ 1: [ Species.FINNEON ], 31: [ Species.LUMINEON ]}, { 1: [ Species.INKAY ], 30: [ Species.MALAMAR ]}], + [TimeOfDay.ALL]: [{ 1: [ Species.TENTACOOL ], 30: [ Species.TENTACRUEL ]}, { 1: [ Species.MAGIKARP ], 20: [ Species.GYARADOS ]}, { 1: [ Species.BUIZEL ], 26: [ Species.FLOATZEL ]}] }, [BiomePoolTier.UNCOMMON]: { - [TimeOfDay.DAWN]: [ { 1: [ Species.STARYU ], 30: [ Species.STARMIE ] } ], - [TimeOfDay.DAY]: [ { 1: [ Species.STARYU ], 30: [ Species.STARMIE ] } ], - [TimeOfDay.DUSK]: [ { 1: [ Species.SLOWPOKE ], 37: [ Species.SLOWBRO ] }, Species.SHELLDER, { 1: [ Species.CARVANHA ], 30: [ Species.SHARPEDO ] } ], - [TimeOfDay.NIGHT]: [ { 1: [ Species.SLOWPOKE ], 37: [ Species.SLOWBRO ] }, Species.SHELLDER, { 1: [ Species.CHINCHOU ], 27: [ Species.LANTURN ] }, { 1: [ Species.CARVANHA ], 30: [ Species.SHARPEDO ] } ], + [TimeOfDay.DAWN]: [{ 1: [ Species.STARYU ], 30: [ Species.STARMIE ]}], + [TimeOfDay.DAY]: [{ 1: [ Species.STARYU ], 30: [ Species.STARMIE ]}], + [TimeOfDay.DUSK]: [{ 1: [ Species.SLOWPOKE ], 37: [ Species.SLOWBRO ]}, Species.SHELLDER, { 1: [ Species.CARVANHA ], 30: [ Species.SHARPEDO ]}], + [TimeOfDay.NIGHT]: [{ 1: [ Species.SLOWPOKE ], 37: [ Species.SLOWBRO ]}, Species.SHELLDER, { 1: [ Species.CHINCHOU ], 27: [ Species.LANTURN ]}, { 1: [ Species.CARVANHA ], 30: [ Species.SHARPEDO ]}], [TimeOfDay.ALL]: [ - { 1: [ Species.POLIWAG ], 25: [ Species.POLIWHIRL ] }, - { 1: [ Species.HORSEA ], 32: [ Species.SEADRA ] }, - { 1: [ Species.GOLDEEN ], 33: [ Species.SEAKING ] }, - { 1: [ Species.WAILMER ], 40: [ Species.WAILORD ] }, - { 1: [ Species.PANPOUR ], 30: [ Species.SIMIPOUR ] }, - { 1: [ Species.WATTREL ], 25: [ Species.KILOWATTREL ] } + { 1: [ Species.POLIWAG ], 25: [ Species.POLIWHIRL ]}, + { 1: [ Species.HORSEA ], 32: [ Species.SEADRA ]}, + { 1: [ Species.GOLDEEN ], 33: [ Species.SEAKING ]}, + { 1: [ Species.WAILMER ], 40: [ Species.WAILORD ]}, + { 1: [ Species.PANPOUR ], 30: [ Species.SIMIPOUR ]}, + { 1: [ Species.WATTREL ], 25: [ Species.KILOWATTREL ]} ] }, [BiomePoolTier.RARE]: { @@ -422,10 +422,10 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.LAPRAS, { 1: [ Species.PIPLUP ], 16: [ Species.PRINPLUP ], 36: [ Species.EMPOLEON ] }, { 1: [ Species.POPPLIO ], 17: [ Species.BRIONNE ], 34: [ Species.PRIMARINA ] } ] + [TimeOfDay.ALL]: [ Species.LAPRAS, { 1: [ Species.PIPLUP ], 16: [ Species.PRINPLUP ], 36: [ Species.EMPOLEON ]}, { 1: [ Species.POPPLIO ], 17: [ Species.BRIONNE ], 34: [ Species.PRIMARINA ]}] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KINGDRA, Species.ROTOM, { 1: [ Species.TIRTOUGA ], 37: [ Species.CARRACOSTA ] } ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KINGDRA, Species.ROTOM, { 1: [ Species.TIRTOUGA ], 37: [ Species.CARRACOSTA ]}]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.PELIPPER, Species.CRAMORANT, Species.PALAFIN ], [TimeOfDay.DAY]: [ Species.PELIPPER, Species.CRAMORANT, Species.PALAFIN ], @@ -433,34 +433,34 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [ Species.SHARPEDO, Species.LUMINEON, Species.MALAMAR ], [TimeOfDay.ALL]: [ Species.TENTACRUEL, Species.FLOATZEL, Species.SIMIPOUR, Species.KILOWATTREL ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KINGDRA, Species.EMPOLEON, Species.PRIMARINA ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ROTOM ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.LUGIA ] } + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KINGDRA, Species.EMPOLEON, Species.PRIMARINA ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ROTOM ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.LUGIA ]} }, [Biome.SWAMP]: { [BiomePoolTier.COMMON]: { - [TimeOfDay.DAWN]: [ { 1: [ Species.WOOPER ], 20: [ Species.QUAGSIRE ] }, { 1: [ Species.LOTAD ], 14: [ Species.LOMBRE ] } ], - [TimeOfDay.DAY]: [ { 1: [ Species.WOOPER ], 20: [ Species.QUAGSIRE ] }, { 1: [ Species.LOTAD ], 14: [ Species.LOMBRE ] } ], - [TimeOfDay.DUSK]: [ { 1: [ Species.EKANS ], 22: [ Species.ARBOK ] }, { 1: [ Species.PALDEA_WOOPER ], 20: [ Species.CLODSIRE ] } ], - [TimeOfDay.NIGHT]: [ { 1: [ Species.EKANS ], 22: [ Species.ARBOK ] }, { 1: [ Species.PALDEA_WOOPER ], 20: [ Species.CLODSIRE ] } ], + [TimeOfDay.DAWN]: [{ 1: [ Species.WOOPER ], 20: [ Species.QUAGSIRE ]}, { 1: [ Species.LOTAD ], 14: [ Species.LOMBRE ]}], + [TimeOfDay.DAY]: [{ 1: [ Species.WOOPER ], 20: [ Species.QUAGSIRE ]}, { 1: [ Species.LOTAD ], 14: [ Species.LOMBRE ]}], + [TimeOfDay.DUSK]: [{ 1: [ Species.EKANS ], 22: [ Species.ARBOK ]}, { 1: [ Species.PALDEA_WOOPER ], 20: [ Species.CLODSIRE ]}], + [TimeOfDay.NIGHT]: [{ 1: [ Species.EKANS ], 22: [ Species.ARBOK ]}, { 1: [ Species.PALDEA_WOOPER ], 20: [ Species.CLODSIRE ]}], [TimeOfDay.ALL]: [ - { 1: [ Species.POLIWAG ], 25: [ Species.POLIWHIRL ] }, - { 1: [ Species.GULPIN ], 26: [ Species.SWALOT ] }, - { 1: [ Species.SHELLOS ], 30: [ Species.GASTRODON ] }, - { 1: [ Species.TYMPOLE ], 25: [ Species.PALPITOAD ], 36: [ Species.SEISMITOAD ] } + { 1: [ Species.POLIWAG ], 25: [ Species.POLIWHIRL ]}, + { 1: [ Species.GULPIN ], 26: [ Species.SWALOT ]}, + { 1: [ Species.SHELLOS ], 30: [ Species.GASTRODON ]}, + { 1: [ Species.TYMPOLE ], 25: [ Species.PALPITOAD ], 36: [ Species.SEISMITOAD ]} ] }, [BiomePoolTier.UNCOMMON]: { - [TimeOfDay.DAWN]: [ { 1: [ Species.EKANS ], 22: [ Species.ARBOK ] } ], - [TimeOfDay.DAY]: [ { 1: [ Species.EKANS ], 22: [ Species.ARBOK ] } ], - [TimeOfDay.DUSK]: [ { 1: [ Species.CROAGUNK ], 37: [ Species.TOXICROAK ] } ], - [TimeOfDay.NIGHT]: [ { 1: [ Species.CROAGUNK ], 37: [ Species.TOXICROAK ] } ], + [TimeOfDay.DAWN]: [{ 1: [ Species.EKANS ], 22: [ Species.ARBOK ]}], + [TimeOfDay.DAY]: [{ 1: [ Species.EKANS ], 22: [ Species.ARBOK ]}], + [TimeOfDay.DUSK]: [{ 1: [ Species.CROAGUNK ], 37: [ Species.TOXICROAK ]}], + [TimeOfDay.NIGHT]: [{ 1: [ Species.CROAGUNK ], 37: [ Species.TOXICROAK ]}], [TimeOfDay.ALL]: [ - { 1: [ Species.PSYDUCK ], 33: [ Species.GOLDUCK ] }, - { 1: [ Species.BARBOACH ], 30: [ Species.WHISCASH ] }, - { 1: [ Species.SKORUPI ], 40: [ Species.DRAPION ] }, + { 1: [ Species.PSYDUCK ], 33: [ Species.GOLDUCK ]}, + { 1: [ Species.BARBOACH ], 30: [ Species.WHISCASH ]}, + { 1: [ Species.SKORUPI ], 40: [ Species.DRAPION ]}, Species.STUNFISK, - { 1: [ Species.MAREANIE ], 38: [ Species.TOXAPEX ] } + { 1: [ Species.MAREANIE ], 38: [ Species.TOXAPEX ]} ] }, [BiomePoolTier.RARE]: { @@ -468,16 +468,16 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ { 1: [ Species.TOTODILE ], 18: [ Species.CROCONAW ], 30: [ Species.FERALIGATR ] }, { 1: [ Species.MUDKIP ], 16: [ Species.MARSHTOMP ], 36: [ Species.SWAMPERT ] } ] + [TimeOfDay.ALL]: [{ 1: [ Species.TOTODILE ], 18: [ Species.CROCONAW ], 30: [ Species.FERALIGATR ]}, { 1: [ Species.MUDKIP ], 16: [ Species.MARSHTOMP ], 36: [ Species.SWAMPERT ]}] }, [BiomePoolTier.SUPER_RARE]: { - [TimeOfDay.DAWN]: [ { 1: [ Species.GALAR_SLOWPOKE ], 40: [ Species.GALAR_SLOWBRO ] }, { 1: [ Species.HISUI_SLIGGOO ], 80: [ Species.HISUI_GOODRA ] } ], - [TimeOfDay.DAY]: [ { 1: [ Species.GALAR_SLOWPOKE ], 40: [ Species.GALAR_SLOWBRO ] }, { 1: [ Species.HISUI_SLIGGOO ], 80: [ Species.HISUI_GOODRA ] } ], + [TimeOfDay.DAWN]: [{ 1: [ Species.GALAR_SLOWPOKE ], 40: [ Species.GALAR_SLOWBRO ]}, { 1: [ Species.HISUI_SLIGGOO ], 80: [ Species.HISUI_GOODRA ]}], + [TimeOfDay.DAY]: [{ 1: [ Species.GALAR_SLOWPOKE ], 40: [ Species.GALAR_SLOWBRO ]}, { 1: [ Species.HISUI_SLIGGOO ], 80: [ Species.HISUI_GOODRA ]}], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.POLITOED, Species.GALAR_STUNFISK ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.AZELF, Species.POIPOLE ] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.AZELF, Species.POIPOLE ]}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.QUAGSIRE, Species.LUDICOLO ], [TimeOfDay.DAY]: [ Species.QUAGSIRE, Species.LUDICOLO ], @@ -492,22 +492,22 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.FERALIGATR, Species.POLITOED, Species.SWAMPERT, Species.GALAR_STUNFISK ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.AZELF, Species.NAGANADEL ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.AZELF, Species.NAGANADEL ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []} }, [Biome.BEACH]: { [BiomePoolTier.COMMON]: { - [TimeOfDay.DAWN]: [ { 1: [ Species.STARYU ], 30: [ Species.STARMIE ] } ], - [TimeOfDay.DAY]: [ { 1: [ Species.STARYU ], 30: [ Species.STARMIE ] } ], + [TimeOfDay.DAWN]: [{ 1: [ Species.STARYU ], 30: [ Species.STARMIE ]}], + [TimeOfDay.DAY]: [{ 1: [ Species.STARYU ], 30: [ Species.STARMIE ]}], [TimeOfDay.DUSK]: [ Species.SHELLDER ], [TimeOfDay.NIGHT]: [ Species.SHELLDER ], [TimeOfDay.ALL]: [ - { 1: [ Species.KRABBY ], 28: [ Species.KINGLER ] }, - { 1: [ Species.CORPHISH ], 30: [ Species.CRAWDAUNT ] }, - { 1: [ Species.DWEBBLE ], 34: [ Species.CRUSTLE ] }, - { 1: [ Species.BINACLE ], 39: [ Species.BARBARACLE ] }, - { 1: [ Species.MAREANIE ], 38: [ Species.TOXAPEX ] }, - { 1: [ Species.WIGLETT ], 26: [ Species.WUGTRIO ] } + { 1: [ Species.KRABBY ], 28: [ Species.KINGLER ]}, + { 1: [ Species.CORPHISH ], 30: [ Species.CRAWDAUNT ]}, + { 1: [ Species.DWEBBLE ], 34: [ Species.CRUSTLE ]}, + { 1: [ Species.BINACLE ], 39: [ Species.BARBARACLE ]}, + { 1: [ Species.MAREANIE ], 38: [ Species.TOXAPEX ]}, + { 1: [ Species.WIGLETT ], 26: [ Species.WUGTRIO ]} ] }, [BiomePoolTier.UNCOMMON]: { @@ -515,11 +515,11 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ { 1: [ Species.BURMY ], 20: [ Species.WORMADAM ] }, { 1: [ Species.CLAUNCHER ], 37: [ Species.CLAWITZER ] }, { 1: [ Species.SANDYGAST ], 42: [ Species.PALOSSAND ] } ] + [TimeOfDay.ALL]: [{ 1: [ Species.BURMY ], 20: [ Species.WORMADAM ]}, { 1: [ Species.CLAUNCHER ], 37: [ Species.CLAWITZER ]}, { 1: [ Species.SANDYGAST ], 42: [ Species.PALOSSAND ]}] }, - [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.QUAXLY ], 16: [ Species.QUAXWELL ], 36: [ Species.QUAQUAVAL ] }, Species.TATSUGIRI ] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.TIRTOUGA ], 37: [ Species.CARRACOSTA ] } ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CRESSELIA, Species.KELDEO, Species.TAPU_FINI ] }, + [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ Species.QUAXLY ], 16: [ Species.QUAXWELL ], 36: [ Species.QUAQUAVAL ]}, Species.TATSUGIRI ]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ Species.TIRTOUGA ], 37: [ Species.CARRACOSTA ]}]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CRESSELIA, Species.KELDEO, Species.TAPU_FINI ]}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.STARMIE ], [TimeOfDay.DAY]: [ Species.STARMIE ], @@ -527,29 +527,29 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [ Species.CLOYSTER ], [TimeOfDay.ALL]: [ Species.KINGLER, Species.CRAWDAUNT, Species.WORMADAM, Species.CRUSTLE, Species.BARBARACLE, Species.CLAWITZER, Species.TOXAPEX, Species.PALOSSAND ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CARRACOSTA, Species.QUAQUAVAL ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CRESSELIA, Species.KELDEO, Species.TAPU_FINI ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CARRACOSTA, Species.QUAQUAVAL ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CRESSELIA, Species.KELDEO, Species.TAPU_FINI ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []} }, [Biome.LAKE]: { [BiomePoolTier.COMMON]: { - [TimeOfDay.DAWN]: [ { 1: [ Species.LOTAD ], 14: [ Species.LOMBRE ] }, { 1: [ Species.DUCKLETT ], 35: [ Species.SWANNA ] } ], - [TimeOfDay.DAY]: [ { 1: [ Species.LOTAD ], 14: [ Species.LOMBRE ] }, { 1: [ Species.DUCKLETT ], 35: [ Species.SWANNA ] } ], - [TimeOfDay.DUSK]: [ { 1: [ Species.MARILL ], 18: [ Species.AZUMARILL ] } ], - [TimeOfDay.NIGHT]: [ { 1: [ Species.MARILL ], 18: [ Species.AZUMARILL ] } ], + [TimeOfDay.DAWN]: [{ 1: [ Species.LOTAD ], 14: [ Species.LOMBRE ]}, { 1: [ Species.DUCKLETT ], 35: [ Species.SWANNA ]}], + [TimeOfDay.DAY]: [{ 1: [ Species.LOTAD ], 14: [ Species.LOMBRE ]}, { 1: [ Species.DUCKLETT ], 35: [ Species.SWANNA ]}], + [TimeOfDay.DUSK]: [{ 1: [ Species.MARILL ], 18: [ Species.AZUMARILL ]}], + [TimeOfDay.NIGHT]: [{ 1: [ Species.MARILL ], 18: [ Species.AZUMARILL ]}], [TimeOfDay.ALL]: [ - { 1: [ Species.PSYDUCK ], 33: [ Species.GOLDUCK ] }, - { 1: [ Species.GOLDEEN ], 33: [ Species.SEAKING ] }, - { 1: [ Species.MAGIKARP ], 20: [ Species.GYARADOS ] }, - { 1: [ Species.CHEWTLE ], 22: [ Species.DREDNAW ] } + { 1: [ Species.PSYDUCK ], 33: [ Species.GOLDUCK ]}, + { 1: [ Species.GOLDEEN ], 33: [ Species.SEAKING ]}, + { 1: [ Species.MAGIKARP ], 20: [ Species.GYARADOS ]}, + { 1: [ Species.CHEWTLE ], 22: [ Species.DREDNAW ]} ] }, [BiomePoolTier.UNCOMMON]: { - [TimeOfDay.DAWN]: [ { 1: [ Species.DEWPIDER ], 22: [ Species.ARAQUANID ] } ], - [TimeOfDay.DAY]: [ { 1: [ Species.DEWPIDER ], 22: [ Species.ARAQUANID ] } ], + [TimeOfDay.DAWN]: [{ 1: [ Species.DEWPIDER ], 22: [ Species.ARAQUANID ]}], + [TimeOfDay.DAY]: [{ 1: [ Species.DEWPIDER ], 22: [ Species.ARAQUANID ]}], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ { 1: [ Species.SLOWPOKE ], 37: [ Species.SLOWBRO ] }, { 1: [ Species.WOOPER ], 20: [ Species.QUAGSIRE ] }, { 1: [ Species.SURSKIT ], 22: [ Species.MASQUERAIN ] }, Species.WISHIWASHI, Species.FLAMIGO ] + [TimeOfDay.ALL]: [{ 1: [ Species.SLOWPOKE ], 37: [ Species.SLOWBRO ]}, { 1: [ Species.WOOPER ], 20: [ Species.QUAGSIRE ]}, { 1: [ Species.SURSKIT ], 22: [ Species.MASQUERAIN ]}, Species.WISHIWASHI, Species.FLAMIGO ] }, [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], @@ -557,14 +557,14 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.SQUIRTLE ], 16: [ Species.WARTORTLE ], 36: [ Species.BLASTOISE ] }, - { 1: [ Species.OSHAWOTT ], 17: [ Species.DEWOTT ], 36: [ Species.SAMUROTT ] }, - { 1: [ Species.FROAKIE ], 16: [ Species.FROGADIER ], 36: [ Species.GRENINJA ] }, - { 1: [ Species.SOBBLE ], 16: [ Species.DRIZZILE ], 35: [ Species.INTELEON ] } + { 1: [ Species.SQUIRTLE ], 16: [ Species.WARTORTLE ], 36: [ Species.BLASTOISE ]}, + { 1: [ Species.OSHAWOTT ], 17: [ Species.DEWOTT ], 36: [ Species.SAMUROTT ]}, + { 1: [ Species.FROAKIE ], 16: [ Species.FROGADIER ], 36: [ Species.GRENINJA ]}, + { 1: [ Species.SOBBLE ], 16: [ Species.DRIZZILE ], 35: [ Species.INTELEON ]} ] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VAPOREON, Species.SLOWKING ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SUICUNE, Species.MESPRIT ] }, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.VAPOREON, Species.SLOWKING ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SUICUNE, Species.MESPRIT ]}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.SWANNA, Species.ARAQUANID ], [TimeOfDay.DAY]: [ Species.SWANNA, Species.ARAQUANID ], @@ -572,9 +572,9 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [ Species.AZUMARILL ], [TimeOfDay.ALL]: [ Species.GOLDUCK, Species.SLOWBRO, Species.SEAKING, Species.GYARADOS, Species.MASQUERAIN, Species.WISHIWASHI, Species.DREDNAW ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.BLASTOISE, Species.VAPOREON, Species.SLOWKING, Species.SAMUROTT, Species.GRENINJA, Species.INTELEON ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SUICUNE, Species.MESPRIT ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.BLASTOISE, Species.VAPOREON, Species.SLOWKING, Species.SAMUROTT, Species.GRENINJA, Species.INTELEON ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SUICUNE, Species.MESPRIT ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []} }, [Biome.SEABED]: { [BiomePoolTier.COMMON]: { @@ -583,12 +583,12 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.CHINCHOU ], 27: [ Species.LANTURN ] }, + { 1: [ Species.CHINCHOU ], 27: [ Species.LANTURN ]}, Species.REMORAID, Species.CLAMPERL, Species.BASCULIN, - { 1: [ Species.FRILLISH ], 40: [ Species.JELLICENT ] }, - { 1: [ Species.ARROKUDA ], 26: [ Species.BARRASKEWDA ] }, + { 1: [ Species.FRILLISH ], 40: [ Species.JELLICENT ]}, + { 1: [ Species.ARROKUDA ], 26: [ Species.BARRASKEWDA ]}, Species.VELUZA ] }, @@ -598,12 +598,12 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.TENTACOOL ], 30: [ Species.TENTACRUEL ] }, + { 1: [ Species.TENTACOOL ], 30: [ Species.TENTACRUEL ]}, Species.SHELLDER, - { 1: [ Species.WAILMER ], 40: [ Species.WAILORD ] }, + { 1: [ Species.WAILMER ], 40: [ Species.WAILORD ]}, Species.LUVDISC, - { 1: [ Species.SHELLOS ], 30: [ Species.GASTRODON ] }, - { 1: [ Species.SKRELP ], 48: [ Species.DRAGALGE ] }, + { 1: [ Species.SHELLOS ], 30: [ Species.GASTRODON ]}, + { 1: [ Species.SKRELP ], 48: [ Species.DRAGALGE ]}, Species.PINCURCHIN, Species.DONDOZO ] @@ -613,7 +613,7 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.QWILFISH, Species.CORSOLA, Species.OCTILLERY, { 1: [ Species.MANTYKE ], 52: [ Species.MANTINE ] }, Species.ALOMOMOLA, { 1: [ Species.TYNAMO ], 39: [ Species.EELEKTRIK ] }, Species.DHELMISE ] + [TimeOfDay.ALL]: [ Species.QWILFISH, Species.CORSOLA, Species.OCTILLERY, { 1: [ Species.MANTYKE ], 52: [ Species.MANTINE ]}, Species.ALOMOMOLA, { 1: [ Species.TYNAMO ], 39: [ Species.EELEKTRIK ]}, Species.DHELMISE ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], @@ -621,16 +621,16 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.OMANYTE ], 40: [ Species.OMASTAR ] }, - { 1: [ Species.KABUTO ], 40: [ Species.KABUTOPS ] }, + { 1: [ Species.OMANYTE ], 40: [ Species.OMASTAR ]}, + { 1: [ Species.KABUTO ], 40: [ Species.KABUTOPS ]}, Species.RELICANTH, Species.PYUKUMUKU, - { 1: [ Species.GALAR_CORSOLA ], 38: [ Species.CURSOLA ] }, + { 1: [ Species.GALAR_CORSOLA ], 38: [ Species.CURSOLA ]}, Species.ARCTOVISH, Species.HISUI_QWILFISH ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.FEEBAS, Species.NIHILEGO ] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.FEEBAS, Species.NIHILEGO ]}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], @@ -645,56 +645,56 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.OMASTAR, Species.KABUTOPS, Species.RELICANTH, Species.EELEKTROSS, Species.PYUKUMUKU, Species.DHELMISE, Species.CURSOLA, Species.ARCTOVISH, Species.BASCULEGION, Species.OVERQWIL ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MILOTIC, Species.NIHILEGO ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KYOGRE ] } + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MILOTIC, Species.NIHILEGO ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KYOGRE ]} }, [Biome.MOUNTAIN]: { [BiomePoolTier.COMMON]: { [TimeOfDay.DAWN]: [ - { 1: [ Species.TAILLOW ], 22: [ Species.SWELLOW ] }, - { 1: [ Species.SWABLU ], 35: [ Species.ALTARIA ] }, - { 1: [ Species.STARLY ], 14: [ Species.STARAVIA ], 34: [ Species.STARAPTOR ] }, - { 1: [ Species.PIDOVE ], 21: [ Species.TRANQUILL ], 32: [ Species.UNFEZANT ] }, - { 1: [ Species.FLETCHLING ], 17: [ Species.FLETCHINDER ], 35: [ Species.TALONFLAME ] } + { 1: [ Species.TAILLOW ], 22: [ Species.SWELLOW ]}, + { 1: [ Species.SWABLU ], 35: [ Species.ALTARIA ]}, + { 1: [ Species.STARLY ], 14: [ Species.STARAVIA ], 34: [ Species.STARAPTOR ]}, + { 1: [ Species.PIDOVE ], 21: [ Species.TRANQUILL ], 32: [ Species.UNFEZANT ]}, + { 1: [ Species.FLETCHLING ], 17: [ Species.FLETCHINDER ], 35: [ Species.TALONFLAME ]} ], [TimeOfDay.DAY]: [ - { 1: [ Species.TAILLOW ], 22: [ Species.SWELLOW ] }, - { 1: [ Species.SWABLU ], 35: [ Species.ALTARIA ] }, - { 1: [ Species.STARLY ], 14: [ Species.STARAVIA ], 34: [ Species.STARAPTOR ] }, - { 1: [ Species.PIDOVE ], 21: [ Species.TRANQUILL ], 32: [ Species.UNFEZANT ] }, - { 1: [ Species.FLETCHLING ], 17: [ Species.FLETCHINDER ], 35: [ Species.TALONFLAME ] } + { 1: [ Species.TAILLOW ], 22: [ Species.SWELLOW ]}, + { 1: [ Species.SWABLU ], 35: [ Species.ALTARIA ]}, + { 1: [ Species.STARLY ], 14: [ Species.STARAVIA ], 34: [ Species.STARAPTOR ]}, + { 1: [ Species.PIDOVE ], 21: [ Species.TRANQUILL ], 32: [ Species.UNFEZANT ]}, + { 1: [ Species.FLETCHLING ], 17: [ Species.FLETCHINDER ], 35: [ Species.TALONFLAME ]} ], - [TimeOfDay.DUSK]: [ { 1: [ Species.RHYHORN ], 42: [ Species.RHYDON ] }, { 1: [ Species.ARON ], 32: [ Species.LAIRON ], 42: [ Species.AGGRON ] }, { 1: [ Species.ROGGENROLA ], 25: [ Species.BOLDORE ] } ], - [TimeOfDay.NIGHT]: [ { 1: [ Species.RHYHORN ], 42: [ Species.RHYDON ] }, { 1: [ Species.ARON ], 32: [ Species.LAIRON ], 42: [ Species.AGGRON ] }, { 1: [ Species.ROGGENROLA ], 25: [ Species.BOLDORE ] } ], - [TimeOfDay.ALL]: [ { 1: [ Species.PIDGEY ], 18: [ Species.PIDGEOTTO ], 36: [ Species.PIDGEOT ] }, { 1: [ Species.SPEAROW ], 20: [ Species.FEAROW ] }, { 1: [ Species.SKIDDO ], 32: [ Species.GOGOAT ] } ] + [TimeOfDay.DUSK]: [{ 1: [ Species.RHYHORN ], 42: [ Species.RHYDON ]}, { 1: [ Species.ARON ], 32: [ Species.LAIRON ], 42: [ Species.AGGRON ]}, { 1: [ Species.ROGGENROLA ], 25: [ Species.BOLDORE ]}], + [TimeOfDay.NIGHT]: [{ 1: [ Species.RHYHORN ], 42: [ Species.RHYDON ]}, { 1: [ Species.ARON ], 32: [ Species.LAIRON ], 42: [ Species.AGGRON ]}, { 1: [ Species.ROGGENROLA ], 25: [ Species.BOLDORE ]}], + [TimeOfDay.ALL]: [{ 1: [ Species.PIDGEY ], 18: [ Species.PIDGEOTTO ], 36: [ Species.PIDGEOT ]}, { 1: [ Species.SPEAROW ], 20: [ Species.FEAROW ]}, { 1: [ Species.SKIDDO ], 32: [ Species.GOGOAT ]}] }, [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [ - { 1: [ Species.RHYHORN ], 42: [ Species.RHYDON ] }, - { 1: [ Species.ARON ], 32: [ Species.LAIRON ], 42: [ Species.AGGRON ] }, - { 1: [ Species.ROGGENROLA ], 25: [ Species.BOLDORE ] }, - { 1: [ Species.RUFFLET ], 54: [ Species.BRAVIARY ] }, - { 1: [ Species.ROOKIDEE ], 18: [ Species.CORVISQUIRE ], 38: [ Species.CORVIKNIGHT ] }, - { 1: [ Species.FLITTLE ], 35: [ Species.ESPATHRA ] }, + { 1: [ Species.RHYHORN ], 42: [ Species.RHYDON ]}, + { 1: [ Species.ARON ], 32: [ Species.LAIRON ], 42: [ Species.AGGRON ]}, + { 1: [ Species.ROGGENROLA ], 25: [ Species.BOLDORE ]}, + { 1: [ Species.RUFFLET ], 54: [ Species.BRAVIARY ]}, + { 1: [ Species.ROOKIDEE ], 18: [ Species.CORVISQUIRE ], 38: [ Species.CORVIKNIGHT ]}, + { 1: [ Species.FLITTLE ], 35: [ Species.ESPATHRA ]}, Species.BOMBIRDIER ], [TimeOfDay.DAY]: [ - { 1: [ Species.RHYHORN ], 42: [ Species.RHYDON ] }, - { 1: [ Species.ARON ], 32: [ Species.LAIRON ], 42: [ Species.AGGRON ] }, - { 1: [ Species.ROGGENROLA ], 25: [ Species.BOLDORE ] }, - { 1: [ Species.RUFFLET ], 54: [ Species.BRAVIARY ] }, - { 1: [ Species.ROOKIDEE ], 18: [ Species.CORVISQUIRE ], 38: [ Species.CORVIKNIGHT ] }, - { 1: [ Species.FLITTLE ], 35: [ Species.ESPATHRA ] }, + { 1: [ Species.RHYHORN ], 42: [ Species.RHYDON ]}, + { 1: [ Species.ARON ], 32: [ Species.LAIRON ], 42: [ Species.AGGRON ]}, + { 1: [ Species.ROGGENROLA ], 25: [ Species.BOLDORE ]}, + { 1: [ Species.RUFFLET ], 54: [ Species.BRAVIARY ]}, + { 1: [ Species.ROOKIDEE ], 18: [ Species.CORVISQUIRE ], 38: [ Species.CORVIKNIGHT ]}, + { 1: [ Species.FLITTLE ], 35: [ Species.ESPATHRA ]}, Species.BOMBIRDIER ], - [TimeOfDay.DUSK]: [ { 1: [ Species.VULLABY ], 54: [ Species.MANDIBUZZ ] } ], - [TimeOfDay.NIGHT]: [ { 1: [ Species.VULLABY ], 54: [ Species.MANDIBUZZ ] } ], + [TimeOfDay.DUSK]: [{ 1: [ Species.VULLABY ], 54: [ Species.MANDIBUZZ ]}], + [TimeOfDay.NIGHT]: [{ 1: [ Species.VULLABY ], 54: [ Species.MANDIBUZZ ]}], [TimeOfDay.ALL]: [ - { 1: [ Species.MACHOP ], 28: [ Species.MACHOKE ] }, - { 1: [ Species.GEODUDE ], 25: [ Species.GRAVELER ] }, - { 1: [ Species.NATU ], 25: [ Species.XATU ] }, - { 1: [ Species.SLUGMA ], 38: [ Species.MAGCARGO ] }, - { 1: [ Species.NACLI ], 24: [ Species.NACLSTACK ], 38: [ Species.GARGANACL ] } + { 1: [ Species.MACHOP ], 28: [ Species.MACHOKE ]}, + { 1: [ Species.GEODUDE ], 25: [ Species.GRAVELER ]}, + { 1: [ Species.NATU ], 25: [ Species.XATU ]}, + { 1: [ Species.SLUGMA ], 38: [ Species.MAGCARGO ]}, + { 1: [ Species.NACLI ], 24: [ Species.NACLSTACK ], 38: [ Species.GARGANACL ]} ] }, [BiomePoolTier.RARE]: { @@ -702,7 +702,7 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [ Species.MURKROW ], - [TimeOfDay.ALL]: [ Species.SKARMORY, { 1: [ Species.TORCHIC ], 16: [ Species.COMBUSKEN ], 36: [ Species.BLAZIKEN ] }, { 1: [ Species.SPOINK ], 32: [ Species.GRUMPIG ] }, Species.HAWLUCHA, Species.KLAWF ] + [TimeOfDay.ALL]: [ Species.SKARMORY, { 1: [ Species.TORCHIC ], 16: [ Species.COMBUSKEN ], 36: [ Species.BLAZIKEN ]}, { 1: [ Species.SPOINK ], 32: [ Species.GRUMPIG ]}, Species.HAWLUCHA, Species.KLAWF ] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], @@ -710,16 +710,16 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.LARVITAR ], 30: [ Species.PUPITAR ] }, - { 1: [ Species.CRANIDOS ], 30: [ Species.RAMPARDOS ] }, - { 1: [ Species.SHIELDON ], 30: [ Species.BASTIODON ] }, - { 1: [ Species.GIBLE ], 24: [ Species.GABITE ], 48: [ Species.GARCHOMP ] }, + { 1: [ Species.LARVITAR ], 30: [ Species.PUPITAR ]}, + { 1: [ Species.CRANIDOS ], 30: [ Species.RAMPARDOS ]}, + { 1: [ Species.SHIELDON ], 30: [ Species.BASTIODON ]}, + { 1: [ Species.GIBLE ], 24: [ Species.GABITE ], 48: [ Species.GARCHOMP ]}, Species.ROTOM, Species.ARCHEOPS, - { 1: [ Species.AXEW ], 38: [ Species.FRAXURE ] } + { 1: [ Species.AXEW ], 38: [ Species.FRAXURE ]} ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TORNADUS, Species.TING_LU, Species.OGERPON ] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TORNADUS, Species.TING_LU, Species.OGERPON ]}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.SWELLOW, Species.ALTARIA, Species.STARAPTOR, Species.UNFEZANT, Species.BRAVIARY, Species.TALONFLAME, Species.CORVIKNIGHT, Species.ESPATHRA ], [TimeOfDay.DAY]: [ Species.SWELLOW, Species.ALTARIA, Species.STARAPTOR, Species.UNFEZANT, Species.BRAVIARY, Species.TALONFLAME, Species.CORVIKNIGHT, Species.ESPATHRA ], @@ -727,39 +727,39 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [ Species.MANDIBUZZ ], [TimeOfDay.ALL]: [ Species.PIDGEOT, Species.FEAROW, Species.SKARMORY, Species.AGGRON, Species.GOGOAT, Species.GARGANACL ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [ Species.HISUI_BRAVIARY ], [TimeOfDay.DAY]: [ Species.HISUI_BRAVIARY ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.BLAZIKEN, Species.RAMPARDOS, Species.BASTIODON, Species.HAWLUCHA ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ROTOM, Species.TORNADUS, Species.TING_LU, Species.OGERPON ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HO_OH ] } + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [ Species.HISUI_BRAVIARY ], [TimeOfDay.DAY]: [ Species.HISUI_BRAVIARY ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.BLAZIKEN, Species.RAMPARDOS, Species.BASTIODON, Species.HAWLUCHA ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ROTOM, Species.TORNADUS, Species.TING_LU, Species.OGERPON ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HO_OH ]} }, [Biome.BADLANDS]: { [BiomePoolTier.COMMON]: { - [TimeOfDay.DAWN]: [ { 1: [ Species.PHANPY ], 25: [ Species.DONPHAN ] } ], - [TimeOfDay.DAY]: [ { 1: [ Species.PHANPY ], 25: [ Species.DONPHAN ] } ], + [TimeOfDay.DAWN]: [{ 1: [ Species.PHANPY ], 25: [ Species.DONPHAN ]}], + [TimeOfDay.DAY]: [{ 1: [ Species.PHANPY ], 25: [ Species.DONPHAN ]}], [TimeOfDay.DUSK]: [], - [TimeOfDay.NIGHT]: [ { 1: [ Species.CUBONE ], 28: [ Species.MAROWAK ] } ], + [TimeOfDay.NIGHT]: [{ 1: [ Species.CUBONE ], 28: [ Species.MAROWAK ]}], [TimeOfDay.ALL]: [ - { 1: [ Species.DIGLETT ], 26: [ Species.DUGTRIO ] }, - { 1: [ Species.GEODUDE ], 25: [ Species.GRAVELER ] }, - { 1: [ Species.RHYHORN ], 42: [ Species.RHYDON ] }, - { 1: [ Species.DRILBUR ], 31: [ Species.EXCADRILL ] }, - { 1: [ Species.MUDBRAY ], 30: [ Species.MUDSDALE ] } + { 1: [ Species.DIGLETT ], 26: [ Species.DUGTRIO ]}, + { 1: [ Species.GEODUDE ], 25: [ Species.GRAVELER ]}, + { 1: [ Species.RHYHORN ], 42: [ Species.RHYDON ]}, + { 1: [ Species.DRILBUR ], 31: [ Species.EXCADRILL ]}, + { 1: [ Species.MUDBRAY ], 30: [ Species.MUDSDALE ]} ] }, [BiomePoolTier.UNCOMMON]: { - [TimeOfDay.DAWN]: [ { 1: [ Species.SIZZLIPEDE ], 28: [ Species.CENTISKORCH ] }, { 1: [ Species.CAPSAKID ], 30: [ Species.SCOVILLAIN ] } ], - [TimeOfDay.DAY]: [ { 1: [ Species.SIZZLIPEDE ], 28: [ Species.CENTISKORCH ] }, { 1: [ Species.CAPSAKID ], 30: [ Species.SCOVILLAIN ] } ], + [TimeOfDay.DAWN]: [{ 1: [ Species.SIZZLIPEDE ], 28: [ Species.CENTISKORCH ]}, { 1: [ Species.CAPSAKID ], 30: [ Species.SCOVILLAIN ]}], + [TimeOfDay.DAY]: [{ 1: [ Species.SIZZLIPEDE ], 28: [ Species.CENTISKORCH ]}, { 1: [ Species.CAPSAKID ], 30: [ Species.SCOVILLAIN ]}], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.SANDSHREW ], 22: [ Species.SANDSLASH ] }, - { 1: [ Species.NUMEL ], 33: [ Species.CAMERUPT ] }, - { 1: [ Species.ROGGENROLA ], 25: [ Species.BOLDORE ] }, - { 1: [ Species.CUFANT ], 34: [ Species.COPPERAJAH ] } + { 1: [ Species.SANDSHREW ], 22: [ Species.SANDSLASH ]}, + { 1: [ Species.NUMEL ], 33: [ Species.CAMERUPT ]}, + { 1: [ Species.ROGGENROLA ], 25: [ Species.BOLDORE ]}, + { 1: [ Species.CUFANT ], 34: [ Species.COPPERAJAH ]} ] }, - [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ONIX, Species.GLIGAR, { 1: [ Species.POLTCHAGEIST ], 30: [ Species.SINISTCHA ] } ] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.LANDORUS, Species.OKIDOGI ] }, + [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ONIX, Species.GLIGAR, { 1: [ Species.POLTCHAGEIST ], 30: [ Species.SINISTCHA ]}]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.LANDORUS, Species.OKIDOGI ]}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.DONPHAN, Species.CENTISKORCH, Species.SCOVILLAIN ], [TimeOfDay.DAY]: [ Species.DONPHAN, Species.CENTISKORCH, Species.SCOVILLAIN ], @@ -767,9 +767,9 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [ Species.MAROWAK ], [TimeOfDay.ALL]: [ Species.DUGTRIO, Species.GOLEM, Species.RHYPERIOR, Species.GLISCOR, Species.EXCADRILL, Species.MUDSDALE, Species.COPPERAJAH ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.STEELIX, Species.SINISTCHA ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.LANDORUS, Species.OKIDOGI ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GROUDON ] } + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.STEELIX, Species.SINISTCHA ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.LANDORUS, Species.OKIDOGI ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GROUDON ]} }, [Biome.CAVE]: { [BiomePoolTier.COMMON]: { @@ -778,27 +778,27 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.ZUBAT ], 22: [ Species.GOLBAT ] }, - { 1: [ Species.PARAS ], 24: [ Species.PARASECT ] }, - { 1: [ Species.TEDDIURSA ], 30: [ Species.URSARING ] }, - { 1: [ Species.WHISMUR ], 20: [ Species.LOUDRED ], 40: [ Species.EXPLOUD ] }, - { 1: [ Species.ROGGENROLA ], 25: [ Species.BOLDORE ] }, - { 1: [ Species.WOOBAT ], 20: [ Species.SWOOBAT ] }, - { 1: [ Species.BUNNELBY ], 20: [ Species.DIGGERSBY ] }, - { 1: [ Species.NACLI ], 24: [ Species.NACLSTACK ], 38: [ Species.GARGANACL ] } + { 1: [ Species.ZUBAT ], 22: [ Species.GOLBAT ]}, + { 1: [ Species.PARAS ], 24: [ Species.PARASECT ]}, + { 1: [ Species.TEDDIURSA ], 30: [ Species.URSARING ]}, + { 1: [ Species.WHISMUR ], 20: [ Species.LOUDRED ], 40: [ Species.EXPLOUD ]}, + { 1: [ Species.ROGGENROLA ], 25: [ Species.BOLDORE ]}, + { 1: [ Species.WOOBAT ], 20: [ Species.SWOOBAT ]}, + { 1: [ Species.BUNNELBY ], 20: [ Species.DIGGERSBY ]}, + { 1: [ Species.NACLI ], 24: [ Species.NACLSTACK ], 38: [ Species.GARGANACL ]} ] }, [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], - [TimeOfDay.DUSK]: [ { 1: [ Species.ROCKRUFF ], 25: [ Species.LYCANROC ] } ], + [TimeOfDay.DUSK]: [{ 1: [ Species.ROCKRUFF ], 25: [ Species.LYCANROC ]}], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.GEODUDE ], 25: [ Species.GRAVELER ] }, - { 1: [ Species.MAKUHITA ], 24: [ Species.HARIYAMA ] }, + { 1: [ Species.GEODUDE ], 25: [ Species.GRAVELER ]}, + { 1: [ Species.MAKUHITA ], 24: [ Species.HARIYAMA ]}, Species.NOSEPASS, - { 1: [ Species.NOIBAT ], 48: [ Species.NOIVERN ] }, - { 1: [ Species.WIMPOD ], 30: [ Species.GOLISOPOD ] } + { 1: [ Species.NOIBAT ], 48: [ Species.NOIVERN ]}, + { 1: [ Species.WIMPOD ], 30: [ Species.GOLISOPOD ]} ] }, [BiomePoolTier.RARE]: { @@ -806,10 +806,10 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.ONIX, { 1: [ Species.FERROSEED ], 40: [ Species.FERROTHORN ] }, Species.CARBINK, { 1: [ Species.GLIMMET ], 35: [ Species.GLIMMORA ] } ] + [TimeOfDay.ALL]: [ Species.ONIX, { 1: [ Species.FERROSEED ], 40: [ Species.FERROTHORN ]}, Species.CARBINK, { 1: [ Species.GLIMMET ], 35: [ Species.GLIMMORA ]}] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SHUCKLE ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.UXIE ] }, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SHUCKLE ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.UXIE ]}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], @@ -817,34 +817,34 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.PARASECT, Species.ONIX, Species.CROBAT, Species.URSARING, Species.EXPLOUD, Species.PROBOPASS, Species.GIGALITH, Species.SWOOBAT, Species.DIGGERSBY, Species.NOIVERN, Species.GOLISOPOD, Species.GARGANACL ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.LYCANROC ], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SHUCKLE, Species.FERROTHORN, Species.GLIMMORA ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.UXIE ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TERAPAGOS ] } + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.LYCANROC ], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SHUCKLE, Species.FERROTHORN, Species.GLIMMORA ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.UXIE ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TERAPAGOS ]} }, [Biome.DESERT]: { [BiomePoolTier.COMMON]: { - [TimeOfDay.DAWN]: [ Species.TRAPINCH, { 1: [ Species.HIPPOPOTAS ], 34: [ Species.HIPPOWDON ] }, { 1: [ Species.RELLOR ], 29: [ Species.RABSCA ] } ], - [TimeOfDay.DAY]: [ Species.TRAPINCH, { 1: [ Species.HIPPOPOTAS ], 34: [ Species.HIPPOWDON ] }, { 1: [ Species.RELLOR ], 29: [ Species.RABSCA ] } ], - [TimeOfDay.DUSK]: [ { 1: [ Species.CACNEA ], 32: [ Species.CACTURNE ] }, { 1: [ Species.SANDILE ], 29: [ Species.KROKOROK ], 40: [ Species.KROOKODILE ] } ], - [TimeOfDay.NIGHT]: [ { 1: [ Species.CACNEA ], 32: [ Species.CACTURNE ] }, { 1: [ Species.SANDILE ], 29: [ Species.KROKOROK ], 40: [ Species.KROOKODILE ] } ], - [TimeOfDay.ALL]: [ { 1: [ Species.SANDSHREW ], 22: [ Species.SANDSLASH ] }, { 1: [ Species.SKORUPI ], 40: [ Species.DRAPION ] }, { 1: [ Species.SILICOBRA ], 36: [ Species.SANDACONDA ] } ] + [TimeOfDay.DAWN]: [ Species.TRAPINCH, { 1: [ Species.HIPPOPOTAS ], 34: [ Species.HIPPOWDON ]}, { 1: [ Species.RELLOR ], 29: [ Species.RABSCA ]}], + [TimeOfDay.DAY]: [ Species.TRAPINCH, { 1: [ Species.HIPPOPOTAS ], 34: [ Species.HIPPOWDON ]}, { 1: [ Species.RELLOR ], 29: [ Species.RABSCA ]}], + [TimeOfDay.DUSK]: [{ 1: [ Species.CACNEA ], 32: [ Species.CACTURNE ]}, { 1: [ Species.SANDILE ], 29: [ Species.KROKOROK ], 40: [ Species.KROOKODILE ]}], + [TimeOfDay.NIGHT]: [{ 1: [ Species.CACNEA ], 32: [ Species.CACTURNE ]}, { 1: [ Species.SANDILE ], 29: [ Species.KROKOROK ], 40: [ Species.KROOKODILE ]}], + [TimeOfDay.ALL]: [{ 1: [ Species.SANDSHREW ], 22: [ Species.SANDSLASH ]}, { 1: [ Species.SKORUPI ], 40: [ Species.DRAPION ]}, { 1: [ Species.SILICOBRA ], 36: [ Species.SANDACONDA ]}] }, [BiomePoolTier.UNCOMMON]: { - [TimeOfDay.DAWN]: [ { 1: [ Species.SANDILE ], 29: [ Species.KROKOROK ], 40: [ Species.KROOKODILE ] }, Species.HELIOPTILE ], - [TimeOfDay.DAY]: [ { 1: [ Species.SANDILE ], 29: [ Species.KROKOROK ], 40: [ Species.KROOKODILE ] }, Species.HELIOPTILE ], + [TimeOfDay.DAWN]: [{ 1: [ Species.SANDILE ], 29: [ Species.KROKOROK ], 40: [ Species.KROOKODILE ]}, Species.HELIOPTILE ], + [TimeOfDay.DAY]: [{ 1: [ Species.SANDILE ], 29: [ Species.KROKOROK ], 40: [ Species.KROOKODILE ]}, Species.HELIOPTILE ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.MARACTUS, { 1: [ Species.BRAMBLIN ], 30: [ Species.BRAMBLEGHAST ] }, Species.ORTHWORM ] + [TimeOfDay.ALL]: [ Species.MARACTUS, { 1: [ Species.BRAMBLIN ], 30: [ Species.BRAMBLEGHAST ]}, Species.ORTHWORM ] }, [BiomePoolTier.RARE]: { - [TimeOfDay.DAWN]: [ { 1: [ Species.VIBRAVA ], 45: [ Species.FLYGON ] } ], - [TimeOfDay.DAY]: [ { 1: [ Species.VIBRAVA ], 45: [ Species.FLYGON ] } ], + [TimeOfDay.DAWN]: [{ 1: [ Species.VIBRAVA ], 45: [ Species.FLYGON ]}], + [TimeOfDay.DAY]: [{ 1: [ Species.VIBRAVA ], 45: [ Species.FLYGON ]}], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ { 1: [ Species.DARUMAKA ], 35: [ Species.DARMANITAN ] } ] + [TimeOfDay.ALL]: [{ 1: [ Species.DARUMAKA ], 35: [ Species.DARMANITAN ]}] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.LILEEP ], 40: [ Species.CRADILY ] }, { 1: [ Species.ANORITH ], 40: [ Species.ARMALDO ] } ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIROCK, Species.TAPU_BULU, Species.PHEROMOSA ] }, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ Species.LILEEP ], 40: [ Species.CRADILY ]}, { 1: [ Species.ANORITH ], 40: [ Species.ARMALDO ]}]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIROCK, Species.TAPU_BULU, Species.PHEROMOSA ]}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.HIPPOWDON, Species.HELIOLISK, Species.RABSCA ], [TimeOfDay.DAY]: [ Species.HIPPOWDON, Species.HELIOLISK, Species.RABSCA ], @@ -852,9 +852,9 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [ Species.CACTURNE, Species.KROOKODILE ], [TimeOfDay.ALL]: [ Species.SANDSLASH, Species.DRAPION, Species.DARMANITAN, Species.MARACTUS, Species.SANDACONDA, Species.BRAMBLEGHAST ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CRADILY, Species.ARMALDO ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIROCK, Species.TAPU_BULU, Species.PHEROMOSA ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CRADILY, Species.ARMALDO ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIROCK, Species.TAPU_BULU, Species.PHEROMOSA ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []} }, [Biome.ICE_CAVE]: { [BiomePoolTier.COMMON]: { @@ -863,14 +863,14 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.SEEL ], 34: [ Species.DEWGONG ] }, - { 1: [ Species.SWINUB ], 33: [ Species.PILOSWINE ] }, - { 1: [ Species.SNOVER ], 40: [ Species.ABOMASNOW ] }, - { 1: [ Species.VANILLITE ], 35: [ Species.VANILLISH ], 47: [ Species.VANILLUXE ] }, - { 1: [ Species.CUBCHOO ], 37: [ Species.BEARTIC ] }, - { 1: [ Species.BERGMITE ], 37: [ Species.AVALUGG ] }, + { 1: [ Species.SEEL ], 34: [ Species.DEWGONG ]}, + { 1: [ Species.SWINUB ], 33: [ Species.PILOSWINE ]}, + { 1: [ Species.SNOVER ], 40: [ Species.ABOMASNOW ]}, + { 1: [ Species.VANILLITE ], 35: [ Species.VANILLISH ], 47: [ Species.VANILLUXE ]}, + { 1: [ Species.CUBCHOO ], 37: [ Species.BEARTIC ]}, + { 1: [ Species.BERGMITE ], 37: [ Species.AVALUGG ]}, Species.CRABRAWLER, - { 1: [ Species.SNOM ], 20: [ Species.FROSMOTH ] } + { 1: [ Species.SNOM ], 20: [ Species.FROSMOTH ]} ] }, [BiomePoolTier.UNCOMMON]: { @@ -880,15 +880,15 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SNEASEL, - { 1: [ Species.SNORUNT ], 42: [ Species.GLALIE ] }, - { 1: [ Species.SPHEAL ], 32: [ Species.SEALEO ], 44: [ Species.WALREIN ] }, + { 1: [ Species.SNORUNT ], 42: [ Species.GLALIE ]}, + { 1: [ Species.SPHEAL ], 32: [ Species.SEALEO ], 44: [ Species.WALREIN ]}, Species.EISCUE, - { 1: [ Species.CETODDLE ], 30: [ Species.CETITAN ] } + { 1: [ Species.CETODDLE ], 30: [ Species.CETITAN ]} ] }, - [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.JYNX, Species.LAPRAS, Species.FROSLASS, Species.CRYOGONAL ] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DELIBIRD, Species.ROTOM, { 1: [ Species.AMAURA ], 59: [ Species.AURORUS ] } ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ARTICUNO, Species.REGICE ] }, + [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.JYNX, Species.LAPRAS, Species.FROSLASS, Species.CRYOGONAL ]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DELIBIRD, Species.ROTOM, { 1: [ Species.AMAURA ], 59: [ Species.AURORUS ]}]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ARTICUNO, Species.REGICE ]}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], @@ -896,46 +896,46 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DEWGONG, Species.GLALIE, Species.WALREIN, Species.WEAVILE, Species.MAMOSWINE, Species.FROSLASS, Species.VANILLUXE, Species.BEARTIC, Species.CRYOGONAL, Species.AVALUGG, Species.CRABOMINABLE, Species.CETITAN ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.JYNX, Species.LAPRAS, Species.GLACEON, Species.AURORUS ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ARTICUNO, Species.REGICE, Species.ROTOM ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KYUREM ] } + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.JYNX, Species.LAPRAS, Species.GLACEON, Species.AURORUS ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ARTICUNO, Species.REGICE, Species.ROTOM ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KYUREM ]} }, [Biome.MEADOW]: { [BiomePoolTier.COMMON]: { - [TimeOfDay.DAWN]: [ { 1: [ Species.LEDYBA ], 18: [ Species.LEDIAN ] }, Species.ROSELIA, Species.COTTONEE, Species.MINCCINO ], + [TimeOfDay.DAWN]: [{ 1: [ Species.LEDYBA ], 18: [ Species.LEDIAN ]}, Species.ROSELIA, Species.COTTONEE, Species.MINCCINO ], [TimeOfDay.DAY]: [ Species.ROSELIA, Species.COTTONEE, Species.MINCCINO ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.BLITZLE ], 27: [ Species.ZEBSTRIKA ] }, - { 1: [ Species.FLABEBE ], 19: [ Species.FLOETTE ] }, - { 1: [ Species.CUTIEFLY ], 25: [ Species.RIBOMBEE ] }, - { 1: [ Species.GOSSIFLEUR ], 20: [ Species.ELDEGOSS ] }, - { 1: [ Species.WOOLOO ], 24: [ Species.DUBWOOL ] } + { 1: [ Species.BLITZLE ], 27: [ Species.ZEBSTRIKA ]}, + { 1: [ Species.FLABEBE ], 19: [ Species.FLOETTE ]}, + { 1: [ Species.CUTIEFLY ], 25: [ Species.RIBOMBEE ]}, + { 1: [ Species.GOSSIFLEUR ], 20: [ Species.ELDEGOSS ]}, + { 1: [ Species.WOOLOO ], 24: [ Species.DUBWOOL ]} ] }, [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [ - { 1: [ Species.PONYTA ], 40: [ Species.RAPIDASH ] }, - { 1: [ Species.SNUBBULL ], 23: [ Species.GRANBULL ] }, - { 1: [ Species.SKITTY ], 30: [ Species.DELCATTY ] }, + { 1: [ Species.PONYTA ], 40: [ Species.RAPIDASH ]}, + { 1: [ Species.SNUBBULL ], 23: [ Species.GRANBULL ]}, + { 1: [ Species.SKITTY ], 30: [ Species.DELCATTY ]}, Species.BOUFFALANT, - { 1: [ Species.SMOLIV ], 25: [ Species.DOLLIV ], 35: [ Species.ARBOLIVA ] } + { 1: [ Species.SMOLIV ], 25: [ Species.DOLLIV ], 35: [ Species.ARBOLIVA ]} ], [TimeOfDay.DAY]: [ - { 1: [ Species.PONYTA ], 40: [ Species.RAPIDASH ] }, - { 1: [ Species.SNUBBULL ], 23: [ Species.GRANBULL ] }, - { 1: [ Species.SKITTY ], 30: [ Species.DELCATTY ] }, + { 1: [ Species.PONYTA ], 40: [ Species.RAPIDASH ]}, + { 1: [ Species.SNUBBULL ], 23: [ Species.GRANBULL ]}, + { 1: [ Species.SKITTY ], 30: [ Species.DELCATTY ]}, Species.BOUFFALANT, - { 1: [ Species.SMOLIV ], 25: [ Species.DOLLIV ], 35: [ Species.ARBOLIVA ] } + { 1: [ Species.SMOLIV ], 25: [ Species.DOLLIV ], 35: [ Species.ARBOLIVA ]} ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.JIGGLYPUFF ], 30: [ Species.WIGGLYTUFF ] }, - { 1: [ Species.MAREEP ], 15: [ Species.FLAAFFY ], 30: [ Species.AMPHAROS ] }, - { 1: [ Species.RALTS ], 20: [ Species.KIRLIA ], 30: [ Species.GARDEVOIR ] }, - { 1: [ Species.GLAMEOW ], 38: [ Species.PURUGLY ] }, + { 1: [ Species.JIGGLYPUFF ], 30: [ Species.WIGGLYTUFF ]}, + { 1: [ Species.MAREEP ], 15: [ Species.FLAAFFY ], 30: [ Species.AMPHAROS ]}, + { 1: [ Species.RALTS ], 20: [ Species.KIRLIA ], 30: [ Species.GARDEVOIR ]}, + { 1: [ Species.GLAMEOW ], 38: [ Species.PURUGLY ]}, Species.ORICORIO ] }, @@ -944,10 +944,10 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [ Species.VOLBEAT, Species.ILLUMISE ], - [TimeOfDay.ALL]: [ Species.TAUROS, Species.EEVEE, Species.MILTANK, Species.SPINDA, { 1: [ Species.APPLIN ], 30: [ Species.DIPPLIN ] }, { 1: [ Species.SPRIGATITO ], 16: [ Species.FLORAGATO ], 36: [ Species.MEOWSCARADA ] } ] + [TimeOfDay.ALL]: [ Species.TAUROS, Species.EEVEE, Species.MILTANK, Species.SPINDA, { 1: [ Species.APPLIN ], 30: [ Species.DIPPLIN ]}, { 1: [ Species.SPRIGATITO ], 16: [ Species.FLORAGATO ], 36: [ Species.MEOWSCARADA ]}] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CHANSEY, Species.SYLVEON ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MELOETTA ] }, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CHANSEY, Species.SYLVEON ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MELOETTA ]}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.LEDIAN, Species.GRANBULL, Species.DELCATTY, Species.ROSERADE, Species.CINCCINO, Species.BOUFFALANT, Species.ARBOLIVA ], [TimeOfDay.DAY]: [ Species.GRANBULL, Species.DELCATTY, Species.ROSERADE, Species.CINCCINO, Species.BOUFFALANT, Species.ARBOLIVA ], @@ -955,9 +955,9 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TAUROS, Species.MILTANK, Species.GARDEVOIR, Species.PURUGLY, Species.ZEBSTRIKA, Species.FLORGES, Species.RIBOMBEE, Species.DUBWOOL ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [ Species.HISUI_LILLIGANT ], [TimeOfDay.DAY]: [ Species.HISUI_LILLIGANT ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.BLISSEY, Species.SYLVEON, Species.FLAPPLE, Species.APPLETUN, Species.MEOWSCARADA, Species.HYDRAPPLE ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MELOETTA ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SHAYMIN ] } + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [ Species.HISUI_LILLIGANT ], [TimeOfDay.DAY]: [ Species.HISUI_LILLIGANT ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.BLISSEY, Species.SYLVEON, Species.FLAPPLE, Species.APPLETUN, Species.MEOWSCARADA, Species.HYDRAPPLE ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MELOETTA ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SHAYMIN ]} }, [Biome.POWER_PLANT]: { [BiomePoolTier.COMMON]: { @@ -967,20 +967,20 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.PIKACHU, - { 1: [ Species.MAGNEMITE ], 30: [ Species.MAGNETON ] }, - { 1: [ Species.VOLTORB ], 30: [ Species.ELECTRODE ] }, - { 1: [ Species.ELECTRIKE ], 26: [ Species.MANECTRIC ] }, - { 1: [ Species.SHINX ], 15: [ Species.LUXIO ], 30: [ Species.LUXRAY ] }, + { 1: [ Species.MAGNEMITE ], 30: [ Species.MAGNETON ]}, + { 1: [ Species.VOLTORB ], 30: [ Species.ELECTRODE ]}, + { 1: [ Species.ELECTRIKE ], 26: [ Species.MANECTRIC ]}, + { 1: [ Species.SHINX ], 15: [ Species.LUXIO ], 30: [ Species.LUXRAY ]}, Species.DEDENNE, - { 1: [ Species.GRUBBIN ], 20: [ Species.CHARJABUG ] }, - { 1: [ Species.PAWMI ], 18: [ Species.PAWMO ], 32: [ Species.PAWMOT ] }, - { 1: [ Species.TADBULB ], 30: [ Species.BELLIBOLT ] } + { 1: [ Species.GRUBBIN ], 20: [ Species.CHARJABUG ]}, + { 1: [ Species.PAWMI ], 18: [ Species.PAWMO ], 32: [ Species.PAWMOT ]}, + { 1: [ Species.TADBULB ], 30: [ Species.BELLIBOLT ]} ] }, - [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ELECTABUZZ, Species.PLUSLE, Species.MINUN, Species.PACHIRISU, Species.EMOLGA, Species.TOGEDEMARU ] }, - [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.MAREEP ], 15: [ Species.FLAAFFY ] } ] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.JOLTEON, Species.HISUI_VOLTORB ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.RAIKOU, Species.THUNDURUS, Species.XURKITREE, Species.ZERAORA, Species.REGIELEKI ] }, + [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ELECTABUZZ, Species.PLUSLE, Species.MINUN, Species.PACHIRISU, Species.EMOLGA, Species.TOGEDEMARU ]}, + [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ Species.MAREEP ], 15: [ Species.FLAAFFY ]}]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.JOLTEON, Species.HISUI_VOLTORB ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.RAIKOU, Species.THUNDURUS, Species.XURKITREE, Species.ZERAORA, Species.REGIELEKI ]}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], @@ -988,9 +988,9 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.RAICHU, Species.MANECTRIC, Species.LUXRAY, Species.MAGNEZONE, Species.ELECTIVIRE, Species.DEDENNE, Species.VIKAVOLT, Species.TOGEDEMARU, Species.PAWMOT, Species.BELLIBOLT ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.JOLTEON, Species.AMPHAROS, Species.HISUI_ELECTRODE ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZAPDOS, Species.RAIKOU, Species.THUNDURUS, Species.XURKITREE, Species.ZERAORA, Species.REGIELEKI ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZEKROM ] } + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.JOLTEON, Species.AMPHAROS, Species.HISUI_ELECTRODE ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZAPDOS, Species.RAIKOU, Species.THUNDURUS, Species.XURKITREE, Species.ZERAORA, Species.REGIELEKI ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZEKROM ]} }, [Biome.VOLCANO]: { [BiomePoolTier.COMMON]: { @@ -1001,32 +1001,32 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.ALL]: [ Species.VULPIX, Species.GROWLITHE, - { 1: [ Species.PONYTA ], 40: [ Species.RAPIDASH ] }, - { 1: [ Species.SLUGMA ], 38: [ Species.MAGCARGO ] }, - { 1: [ Species.NUMEL ], 33: [ Species.CAMERUPT ] }, - { 1: [ Species.SALANDIT ], 33: [ Species.SALAZZLE ] }, - { 1: [ Species.ROLYCOLY ], 18: [ Species.CARKOL ], 34: [ Species.COALOSSAL ] } + { 1: [ Species.PONYTA ], 40: [ Species.RAPIDASH ]}, + { 1: [ Species.SLUGMA ], 38: [ Species.MAGCARGO ]}, + { 1: [ Species.NUMEL ], 33: [ Species.CAMERUPT ]}, + { 1: [ Species.SALANDIT ], 33: [ Species.SALAZZLE ]}, + { 1: [ Species.ROLYCOLY ], 18: [ Species.CARKOL ], 34: [ Species.COALOSSAL ]} ] }, - [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MAGMAR, Species.TORKOAL, { 1: [ Species.PANSEAR ], 30: [ Species.SIMISEAR ] }, Species.HEATMOR, Species.TURTONATOR ] }, + [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MAGMAR, Species.TORKOAL, { 1: [ Species.PANSEAR ], 30: [ Species.SIMISEAR ]}, Species.HEATMOR, Species.TURTONATOR ]}, [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.CHARMANDER ], 16: [ Species.CHARMELEON ], 36: [ Species.CHARIZARD ] }, - { 1: [ Species.CYNDAQUIL ], 14: [ Species.QUILAVA ], 36: [ Species.TYPHLOSION ] }, - { 1: [ Species.CHIMCHAR ], 14: [ Species.MONFERNO ], 36: [ Species.INFERNAPE ] }, - { 1: [ Species.TEPIG ], 17: [ Species.PIGNITE ], 36: [ Species.EMBOAR ] }, - { 1: [ Species.FENNEKIN ], 16: [ Species.BRAIXEN ], 36: [ Species.DELPHOX ] }, - { 1: [ Species.LITTEN ], 17: [ Species.TORRACAT ], 34: [ Species.INCINEROAR ] }, - { 1: [ Species.SCORBUNNY ], 16: [ Species.RABOOT ], 35: [ Species.CINDERACE ] }, - { 1: [ Species.CHARCADET ], 30: [ Species.ARMAROUGE ] } + { 1: [ Species.CHARMANDER ], 16: [ Species.CHARMELEON ], 36: [ Species.CHARIZARD ]}, + { 1: [ Species.CYNDAQUIL ], 14: [ Species.QUILAVA ], 36: [ Species.TYPHLOSION ]}, + { 1: [ Species.CHIMCHAR ], 14: [ Species.MONFERNO ], 36: [ Species.INFERNAPE ]}, + { 1: [ Species.TEPIG ], 17: [ Species.PIGNITE ], 36: [ Species.EMBOAR ]}, + { 1: [ Species.FENNEKIN ], 16: [ Species.BRAIXEN ], 36: [ Species.DELPHOX ]}, + { 1: [ Species.LITTEN ], 17: [ Species.TORRACAT ], 34: [ Species.INCINEROAR ]}, + { 1: [ Species.SCORBUNNY ], 16: [ Species.RABOOT ], 35: [ Species.CINDERACE ]}, + { 1: [ Species.CHARCADET ], 30: [ Species.ARMAROUGE ]} ] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.FLAREON, Species.ROTOM, { 1: [ Species.LARVESTA ], 59: [ Species.VOLCARONA ] }, Species.HISUI_GROWLITHE ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ENTEI, Species.HEATRAN, Species.VOLCANION, Species.CHI_YU ] }, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.FLAREON, Species.ROTOM, { 1: [ Species.LARVESTA ], 59: [ Species.VOLCARONA ]}, Species.HISUI_GROWLITHE ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ENTEI, Species.HEATRAN, Species.VOLCANION, Species.CHI_YU ]}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], @@ -1041,8 +1041,8 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CHARIZARD, Species.FLAREON, Species.TYPHLOSION, Species.INFERNAPE, Species.EMBOAR, Species.VOLCARONA, Species.DELPHOX, Species.INCINEROAR, Species.CINDERACE, Species.ARMAROUGE, Species.HISUI_ARCANINE ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MOLTRES, Species.ENTEI, Species.ROTOM, Species.HEATRAN, Species.VOLCANION, Species.CHI_YU ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.RESHIRAM ] } + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MOLTRES, Species.ENTEI, Species.ROTOM, Species.HEATRAN, Species.VOLCANION, Species.CHI_YU ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.RESHIRAM ]} }, [Biome.GRAVEYARD]: { [BiomePoolTier.COMMON]: { @@ -1051,14 +1051,14 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.GASTLY ], 25: [ Species.HAUNTER ] }, - { 1: [ Species.SHUPPET ], 37: [ Species.BANETTE ] }, - { 1: [ Species.DUSKULL ], 37: [ Species.DUSCLOPS ] }, - { 1: [ Species.DRIFLOON ], 28: [ Species.DRIFBLIM ] }, - { 1: [ Species.LITWICK ], 41: [ Species.LAMPENT ] }, + { 1: [ Species.GASTLY ], 25: [ Species.HAUNTER ]}, + { 1: [ Species.SHUPPET ], 37: [ Species.BANETTE ]}, + { 1: [ Species.DUSKULL ], 37: [ Species.DUSCLOPS ]}, + { 1: [ Species.DRIFLOON ], 28: [ Species.DRIFBLIM ]}, + { 1: [ Species.LITWICK ], 41: [ Species.LAMPENT ]}, Species.PHANTUMP, Species.PUMPKABOO, - { 1: [ Species.GREAVARD ], 60: [ Species.HOUNDSTONE ] } + { 1: [ Species.GREAVARD ], 60: [ Species.HOUNDSTONE ]} ] }, [BiomePoolTier.UNCOMMON]: { @@ -1066,11 +1066,11 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ { 1: [ Species.CUBONE ], 28: [ Species.MAROWAK ] }, { 1: [ Species.YAMASK ], 34: [ Species.COFAGRIGUS ] }, { 1: [ Species.SINISTEA ], 30: [ Species.POLTEAGEIST ] } ] + [TimeOfDay.ALL]: [{ 1: [ Species.CUBONE ], 28: [ Species.MAROWAK ]}, { 1: [ Species.YAMASK ], 34: [ Species.COFAGRIGUS ]}, { 1: [ Species.SINISTEA ], 30: [ Species.POLTEAGEIST ]}] }, - [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MISDREAVUS, Species.MIMIKYU, { 1: [ Species.FUECOCO ], 16: [ Species.CROCALOR ], 36: [ Species.SKELEDIRGE ] }, Species.CERULEDGE ] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SPIRITOMB ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MARSHADOW, Species.SPECTRIER ] }, + [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MISDREAVUS, Species.MIMIKYU, { 1: [ Species.FUECOCO ], 16: [ Species.CROCALOR ], 36: [ Species.SKELEDIRGE ]}, Species.CERULEDGE ]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SPIRITOMB ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MARSHADOW, Species.SPECTRIER ]}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.MAROWAK ], [TimeOfDay.DAY]: [ Species.MAROWAK ], @@ -1078,9 +1078,9 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GENGAR, Species.BANETTE, Species.DRIFBLIM, Species.MISMAGIUS, Species.DUSKNOIR, Species.CHANDELURE, Species.TREVENANT, Species.GOURGEIST, Species.MIMIKYU, Species.POLTEAGEIST, Species.HOUNDSTONE ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SKELEDIRGE, Species.CERULEDGE, Species.HISUI_TYPHLOSION ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MARSHADOW, Species.SPECTRIER ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GIRATINA ] } + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.SKELEDIRGE, Species.CERULEDGE, Species.HISUI_TYPHLOSION ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MARSHADOW, Species.SPECTRIER ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GIRATINA ]} }, [Biome.DOJO]: { [BiomePoolTier.COMMON]: { @@ -1089,11 +1089,11 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.MANKEY ], 28: [ Species.PRIMEAPE ], 75: [ Species.ANNIHILAPE ] }, - { 1: [ Species.MAKUHITA ], 24: [ Species.HARIYAMA ] }, - { 1: [ Species.MEDITITE ], 37: [ Species.MEDICHAM ] }, - { 1: [ Species.STUFFUL ], 27: [ Species.BEWEAR ] }, - { 1: [ Species.CLOBBOPUS ], 55: [ Species.GRAPPLOCT ] } + { 1: [ Species.MANKEY ], 28: [ Species.PRIMEAPE ], 75: [ Species.ANNIHILAPE ]}, + { 1: [ Species.MAKUHITA ], 24: [ Species.HARIYAMA ]}, + { 1: [ Species.MEDITITE ], 37: [ Species.MEDICHAM ]}, + { 1: [ Species.STUFFUL ], 27: [ Species.BEWEAR ]}, + { 1: [ Species.CLOBBOPUS ], 55: [ Species.GRAPPLOCT ]} ] }, [BiomePoolTier.UNCOMMON]: { @@ -1101,11 +1101,11 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ { 1: [ Species.CROAGUNK ], 37: [ Species.TOXICROAK ] }, { 1: [ Species.SCRAGGY ], 39: [ Species.SCRAFTY ] }, { 1: [ Species.MIENFOO ], 50: [ Species.MIENSHAO ] } ] + [TimeOfDay.ALL]: [{ 1: [ Species.CROAGUNK ], 37: [ Species.TOXICROAK ]}, { 1: [ Species.SCRAGGY ], 39: [ Species.SCRAFTY ]}, { 1: [ Species.MIENFOO ], 50: [ Species.MIENSHAO ]}] }, - [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HITMONLEE, Species.HITMONCHAN, Species.LUCARIO, Species.THROH, Species.SAWK, { 1: [ Species.PANCHAM ], 52: [ Species.PANGORO ] } ] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HITMONTOP, Species.GALLADE, Species.GALAR_FARFETCHD ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TERRAKION, Species.KUBFU, Species.GALAR_ZAPDOS ] }, + [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HITMONLEE, Species.HITMONCHAN, Species.LUCARIO, Species.THROH, Species.SAWK, { 1: [ Species.PANCHAM ], 52: [ Species.PANGORO ]}]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HITMONTOP, Species.GALLADE, Species.GALAR_FARFETCHD ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TERRAKION, Species.KUBFU, Species.GALAR_ZAPDOS ]}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], @@ -1113,9 +1113,9 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HITMONLEE, Species.HITMONCHAN, Species.HARIYAMA, Species.MEDICHAM, Species.LUCARIO, Species.TOXICROAK, Species.THROH, Species.SAWK, Species.SCRAFTY, Species.MIENSHAO, Species.BEWEAR, Species.GRAPPLOCT, Species.ANNIHILAPE ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HITMONTOP, Species.GALLADE, Species.PANGORO, Species.SIRFETCHD, Species.HISUI_DECIDUEYE ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TERRAKION, Species.URSHIFU ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZAMAZENTA, Species.GALAR_ZAPDOS ] } + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HITMONTOP, Species.GALLADE, Species.PANGORO, Species.SIRFETCHD, Species.HISUI_DECIDUEYE ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TERRAKION, Species.URSHIFU ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZAMAZENTA, Species.GALAR_ZAPDOS ]} }, [Biome.FACTORY]: { [BiomePoolTier.COMMON]: { @@ -1124,21 +1124,21 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.MACHOP ], 28: [ Species.MACHOKE ] }, - { 1: [ Species.MAGNEMITE ], 30: [ Species.MAGNETON ] }, - { 1: [ Species.VOLTORB ], 30: [ Species.ELECTRODE ] }, - { 1: [ Species.TIMBURR ], 25: [ Species.GURDURR ] }, - { 1: [ Species.KLINK ], 38: [ Species.KLANG ], 49: [ Species.KLINKLANG ] } + { 1: [ Species.MACHOP ], 28: [ Species.MACHOKE ]}, + { 1: [ Species.MAGNEMITE ], 30: [ Species.MAGNETON ]}, + { 1: [ Species.VOLTORB ], 30: [ Species.ELECTRODE ]}, + { 1: [ Species.TIMBURR ], 25: [ Species.GURDURR ]}, + { 1: [ Species.KLINK ], 38: [ Species.KLANG ], 49: [ Species.KLINKLANG ]} ] }, - [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.BRONZOR ], 33: [ Species.BRONZONG ] }, Species.KLEFKI ] }, - [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.PORYGON ], 30: [ Species.PORYGON2 ] } ] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.BELDUM ], 20: [ Species.METANG ], 45: [ Species.METAGROSS ] } ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GENESECT, Species.MAGEARNA ] }, - [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KLINKLANG, Species.KLEFKI ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GENESECT, Species.MAGEARNA ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } + [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ Species.BRONZOR ], 33: [ Species.BRONZONG ]}, Species.KLEFKI ]}, + [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ Species.PORYGON ], 30: [ Species.PORYGON2 ]}]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ Species.BELDUM ], 20: [ Species.METANG ], 45: [ Species.METAGROSS ]}]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GENESECT, Species.MAGEARNA ]}, + [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KLINKLANG, Species.KLEFKI ]}, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GENESECT, Species.MAGEARNA ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []} }, [Biome.RUINS]: { [BiomePoolTier.COMMON]: { @@ -1147,12 +1147,12 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.DROWZEE ], 26: [ Species.HYPNO ] }, - { 1: [ Species.NATU ], 25: [ Species.XATU ] }, + { 1: [ Species.DROWZEE ], 26: [ Species.HYPNO ]}, + { 1: [ Species.NATU ], 25: [ Species.XATU ]}, Species.UNOWN, - { 1: [ Species.SPOINK ], 32: [ Species.GRUMPIG ] }, - { 1: [ Species.BALTOY ], 36: [ Species.CLAYDOL ] }, - { 1: [ Species.ELGYEM ], 42: [ Species.BEHEEYEM ] } + { 1: [ Species.SPOINK ], 32: [ Species.GRUMPIG ]}, + { 1: [ Species.BALTOY ], 36: [ Species.CLAYDOL ]}, + { 1: [ Species.ELGYEM ], 42: [ Species.BEHEEYEM ]} ] }, [BiomePoolTier.UNCOMMON]: { @@ -1160,58 +1160,58 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ { 1: [ Species.ABRA ], 16: [ Species.KADABRA ] }, Species.SIGILYPH, { 1: [ Species.TINKATINK ], 24: [ Species.TINKATUFF ], 38: [ Species.TINKATON ] } ] + [TimeOfDay.ALL]: [{ 1: [ Species.ABRA ], 16: [ Species.KADABRA ]}, Species.SIGILYPH, { 1: [ Species.TINKATINK ], 24: [ Species.TINKATUFF ], 38: [ Species.TINKATON ]}] }, - [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MR_MIME, Species.WOBBUFFET, { 1: [ Species.GOTHITA ], 32: [ Species.GOTHORITA ], 41: [ Species.GOTHITELLE ] }, Species.STONJOURNER ] }, + [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MR_MIME, Species.WOBBUFFET, { 1: [ Species.GOTHITA ], 32: [ Species.GOTHORITA ], 41: [ Species.GOTHITELLE ]}, Species.STONJOURNER ]}, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ Species.ESPEON ], - [TimeOfDay.DUSK]: [ { 1: [ Species.GALAR_YAMASK ], 34: [ Species.RUNERIGUS ] } ], - [TimeOfDay.NIGHT]: [ { 1: [ Species.GALAR_YAMASK ], 34: [ Species.RUNERIGUS ] } ], - [TimeOfDay.ALL]: [ { 1: [ Species.ARCHEN ], 37: [ Species.ARCHEOPS ] } ] + [TimeOfDay.DUSK]: [{ 1: [ Species.GALAR_YAMASK ], 34: [ Species.RUNERIGUS ]}], + [TimeOfDay.NIGHT]: [{ 1: [ Species.GALAR_YAMASK ], 34: [ Species.RUNERIGUS ]}], + [TimeOfDay.ALL]: [{ 1: [ Species.ARCHEN ], 37: [ Species.ARCHEOPS ]}] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGISTEEL, Species.FEZANDIPITI ] }, - [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ALAKAZAM, Species.HYPNO, Species.XATU, Species.GRUMPIG, Species.CLAYDOL, Species.SIGILYPH, Species.GOTHITELLE, Species.BEHEEYEM, Species.TINKATON ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ Species.ESPEON ], [TimeOfDay.DUSK]: [ Species.RUNERIGUS ], [TimeOfDay.NIGHT]: [ Species.RUNERIGUS ], [TimeOfDay.ALL]: [ Species.MR_MIME, Species.WOBBUFFET, Species.ARCHEOPS ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGISTEEL, Species.FEZANDIPITI ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KORAIDON ] } + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGISTEEL, Species.FEZANDIPITI ]}, + [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ALAKAZAM, Species.HYPNO, Species.XATU, Species.GRUMPIG, Species.CLAYDOL, Species.SIGILYPH, Species.GOTHITELLE, Species.BEHEEYEM, Species.TINKATON ]}, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ Species.ESPEON ], [TimeOfDay.DUSK]: [ Species.RUNERIGUS ], [TimeOfDay.NIGHT]: [ Species.RUNERIGUS ], [TimeOfDay.ALL]: [ Species.MR_MIME, Species.WOBBUFFET, Species.ARCHEOPS ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGISTEEL, Species.FEZANDIPITI ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KORAIDON ]} }, [Biome.WASTELAND]: { [BiomePoolTier.COMMON]: { [TimeOfDay.DAWN]: [ - { 1: [ Species.BAGON ], 30: [ Species.SHELGON ], 50: [ Species.SALAMENCE ] }, - { 1: [ Species.GOOMY ], 40: [ Species.SLIGGOO ], 80: [ Species.GOODRA ] }, - { 1: [ Species.JANGMO_O ], 35: [ Species.HAKAMO_O ], 45: [ Species.KOMMO_O ] } + { 1: [ Species.BAGON ], 30: [ Species.SHELGON ], 50: [ Species.SALAMENCE ]}, + { 1: [ Species.GOOMY ], 40: [ Species.SLIGGOO ], 80: [ Species.GOODRA ]}, + { 1: [ Species.JANGMO_O ], 35: [ Species.HAKAMO_O ], 45: [ Species.KOMMO_O ]} ], [TimeOfDay.DAY]: [ - { 1: [ Species.BAGON ], 30: [ Species.SHELGON ], 50: [ Species.SALAMENCE ] }, - { 1: [ Species.GOOMY ], 40: [ Species.SLIGGOO ], 80: [ Species.GOODRA ] }, - { 1: [ Species.JANGMO_O ], 35: [ Species.HAKAMO_O ], 45: [ Species.KOMMO_O ] } + { 1: [ Species.BAGON ], 30: [ Species.SHELGON ], 50: [ Species.SALAMENCE ]}, + { 1: [ Species.GOOMY ], 40: [ Species.SLIGGOO ], 80: [ Species.GOODRA ]}, + { 1: [ Species.JANGMO_O ], 35: [ Species.HAKAMO_O ], 45: [ Species.KOMMO_O ]} ], - [TimeOfDay.DUSK]: [ { 1: [ Species.LARVITAR ], 30: [ Species.PUPITAR ], 55: [ Species.TYRANITAR ] } ], - [TimeOfDay.NIGHT]: [ { 1: [ Species.LARVITAR ], 30: [ Species.PUPITAR ], 55: [ Species.TYRANITAR ] } ], + [TimeOfDay.DUSK]: [{ 1: [ Species.LARVITAR ], 30: [ Species.PUPITAR ], 55: [ Species.TYRANITAR ]}], + [TimeOfDay.NIGHT]: [{ 1: [ Species.LARVITAR ], 30: [ Species.PUPITAR ], 55: [ Species.TYRANITAR ]}], [TimeOfDay.ALL]: [ - { 1: [ Species.VIBRAVA ], 45: [ Species.FLYGON ] }, - { 1: [ Species.GIBLE ], 24: [ Species.GABITE ], 48: [ Species.GARCHOMP ] }, - { 1: [ Species.AXEW ], 38: [ Species.FRAXURE ], 48: [ Species.HAXORUS ] } + { 1: [ Species.VIBRAVA ], 45: [ Species.FLYGON ]}, + { 1: [ Species.GIBLE ], 24: [ Species.GABITE ], 48: [ Species.GARCHOMP ]}, + { 1: [ Species.AXEW ], 38: [ Species.FRAXURE ], 48: [ Species.HAXORUS ]} ] }, [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], - [TimeOfDay.DUSK]: [ { 1: [ Species.DEINO ], 50: [ Species.ZWEILOUS ], 64: [ Species.HYDREIGON ] } ], - [TimeOfDay.NIGHT]: [ { 1: [ Species.DEINO ], 50: [ Species.ZWEILOUS ], 64: [ Species.HYDREIGON ] } ], - [TimeOfDay.ALL]: [ { 1: [ Species.SWABLU ], 35: [ Species.ALTARIA ] }, Species.DRAMPA, Species.CYCLIZAR ] + [TimeOfDay.DUSK]: [{ 1: [ Species.DEINO ], 50: [ Species.ZWEILOUS ], 64: [ Species.HYDREIGON ]}], + [TimeOfDay.NIGHT]: [{ 1: [ Species.DEINO ], 50: [ Species.ZWEILOUS ], 64: [ Species.HYDREIGON ]}], + [TimeOfDay.ALL]: [{ 1: [ Species.SWABLU ], 35: [ Species.ALTARIA ]}, Species.DRAMPA, Species.CYCLIZAR ] }, [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], - [TimeOfDay.DUSK]: [ { 1: [ Species.DREEPY ], 50: [ Species.DRAKLOAK ], 60: [ Species.DRAGAPULT ] } ], - [TimeOfDay.NIGHT]: [ { 1: [ Species.DREEPY ], 50: [ Species.DRAKLOAK ], 60: [ Species.DRAGAPULT ] } ], - [TimeOfDay.ALL]: [ { 1: [ Species.DRATINI ], 30: [ Species.DRAGONAIR ], 55: [ Species.DRAGONITE ] }, { 1: [ Species.FRIGIBAX ], 35: [ Species.ARCTIBAX ], 54: [ Species.BAXCALIBUR ] } ] + [TimeOfDay.DUSK]: [{ 1: [ Species.DREEPY ], 50: [ Species.DRAKLOAK ], 60: [ Species.DRAGAPULT ]}], + [TimeOfDay.NIGHT]: [{ 1: [ Species.DREEPY ], 50: [ Species.DRAKLOAK ], 60: [ Species.DRAGAPULT ]}], + [TimeOfDay.ALL]: [{ 1: [ Species.DRATINI ], 30: [ Species.DRAGONAIR ], 55: [ Species.DRAGONITE ]}, { 1: [ Species.FRIGIBAX ], 35: [ Species.ARCTIBAX ], 54: [ Species.BAXCALIBUR ]}] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.AERODACTYL, Species.DRUDDIGON, { 1: [ Species.TYRUNT ], 59: [ Species.TYRANTRUM ] }, Species.DRACOZOLT, Species.DRACOVISH ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIDRAGO ] }, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.AERODACTYL, Species.DRUDDIGON, { 1: [ Species.TYRUNT ], 59: [ Species.TYRANTRUM ]}, Species.DRACOZOLT, Species.DRACOVISH ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIDRAGO ]}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.SALAMENCE, Species.GOODRA, Species.KOMMO_O ], [TimeOfDay.DAY]: [ Species.SALAMENCE, Species.GOODRA, Species.KOMMO_O ], @@ -1219,9 +1219,9 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [ Species.TYRANITAR, Species.DRAGAPULT ], [TimeOfDay.ALL]: [ Species.DRAGONITE, Species.FLYGON, Species.GARCHOMP, Species.HAXORUS, Species.DRAMPA, Species.BAXCALIBUR ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.AERODACTYL, Species.DRUDDIGON, Species.TYRANTRUM, Species.DRACOZOLT, Species.DRACOVISH ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIDRAGO ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DIALGA ] } + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.AERODACTYL, Species.DRUDDIGON, Species.TYRANTRUM, Species.DRACOZOLT, Species.DRACOVISH ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIDRAGO ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DIALGA ]} }, [Biome.ABYSS]: { [BiomePoolTier.COMMON]: { @@ -1231,25 +1231,25 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MURKROW, - { 1: [ Species.HOUNDOUR ], 24: [ Species.HOUNDOOM ] }, + { 1: [ Species.HOUNDOUR ], 24: [ Species.HOUNDOOM ]}, Species.SABLEYE, - { 1: [ Species.PURRLOIN ], 20: [ Species.LIEPARD ] }, - { 1: [ Species.PAWNIARD ], 52: [ Species.BISHARP ], 64: [ Species.KINGAMBIT ] }, - { 1: [ Species.NICKIT ], 18: [ Species.THIEVUL ] }, - { 1: [ Species.IMPIDIMP ], 32: [ Species.MORGREM ], 42: [ Species.GRIMMSNARL ] }, - { 1: [ Species.MASCHIFF ], 30: [ Species.MABOSSTIFF ] } + { 1: [ Species.PURRLOIN ], 20: [ Species.LIEPARD ]}, + { 1: [ Species.PAWNIARD ], 52: [ Species.BISHARP ], 64: [ Species.KINGAMBIT ]}, + { 1: [ Species.NICKIT ], 18: [ Species.THIEVUL ]}, + { 1: [ Species.IMPIDIMP ], 32: [ Species.MORGREM ], 42: [ Species.GRIMMSNARL ]}, + { 1: [ Species.MASCHIFF ], 30: [ Species.MABOSSTIFF ]} ] }, - [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, + [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.ABSOL, Species.SPIRITOMB, { 1: [ Species.ZORUA ], 30: [ Species.ZOROARK ] }, { 1: [ Species.DEINO ], 50: [ Species.ZWEILOUS ], 64: [ Species.HYDREIGON ] } ] + [TimeOfDay.ALL]: [ Species.ABSOL, Species.SPIRITOMB, { 1: [ Species.ZORUA ], 30: [ Species.ZOROARK ]}, { 1: [ Species.DEINO ], 50: [ Species.ZWEILOUS ], 64: [ Species.HYDREIGON ]}] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.UMBREON ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DARKRAI, Species.GALAR_MOLTRES ] }, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.UMBREON ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DARKRAI, Species.GALAR_MOLTRES ]}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], @@ -1257,9 +1257,9 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HOUNDOOM, Species.SABLEYE, Species.ABSOL, Species.HONCHKROW, Species.SPIRITOMB, Species.LIEPARD, Species.ZOROARK, Species.HYDREIGON, Species.THIEVUL, Species.GRIMMSNARL, Species.MABOSSTIFF, Species.KINGAMBIT ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.UMBREON, Species.HISUI_SAMUROTT ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DARKRAI ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.PALKIA, Species.YVELTAL, Species.GALAR_MOLTRES ] } + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.UMBREON, Species.HISUI_SAMUROTT ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DARKRAI ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.PALKIA, Species.YVELTAL, Species.GALAR_MOLTRES ]} }, [Biome.SPACE]: { [BiomePoolTier.COMMON]: { @@ -1267,22 +1267,22 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DAY]: [ Species.SOLROCK ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [ Species.LUNATONE ], - [TimeOfDay.ALL]: [ Species.CLEFAIRY, { 1: [ Species.BRONZOR ], 33: [ Species.BRONZONG ] }, { 1: [ Species.MUNNA ], 30: [ Species.MUSHARNA ] }, Species.MINIOR ] + [TimeOfDay.ALL]: [ Species.CLEFAIRY, { 1: [ Species.BRONZOR ], 33: [ Species.BRONZONG ]}, { 1: [ Species.MUNNA ], 30: [ Species.MUSHARNA ]}, Species.MINIOR ] }, - [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.BALTOY ], 36: [ Species.CLAYDOL ] }, { 1: [ Species.ELGYEM ], 42: [ Species.BEHEEYEM ] } ] }, + [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ Species.BALTOY ], 36: [ Species.CLAYDOL ]}, { 1: [ Species.ELGYEM ], 42: [ Species.BEHEEYEM ]}]}, [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ { 1: [ Species.BELDUM ], 20: [ Species.METANG ], 45: [ Species.METAGROSS ] }, Species.SIGILYPH, { 1: [ Species.SOLOSIS ], 32: [ Species.DUOSION ], 41: [ Species.REUNICLUS ] } ] + [TimeOfDay.ALL]: [{ 1: [ Species.BELDUM ], 20: [ Species.METANG ], 45: [ Species.METAGROSS ]}, Species.SIGILYPH, { 1: [ Species.SOLOSIS ], 32: [ Species.DUOSION ], 41: [ Species.REUNICLUS ]}] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.PORYGON ], 30: [ Species.PORYGON2 ] } ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.COSMOG ], 43: [ Species.COSMOEM ] }, Species.CELESTEELA ] }, - [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ Species.SOLROCK ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [ Species.LUNATONE ], [TimeOfDay.ALL]: [ Species.CLEFABLE, Species.BRONZONG, Species.MUSHARNA, Species.REUNICLUS, Species.MINIOR ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.METAGROSS, Species.PORYGON_Z ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CELESTEELA ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ Species.SOLGALEO ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [ Species.LUNALA ], [TimeOfDay.ALL]: [ Species.RAYQUAZA, Species.NECROZMA ] } + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ Species.PORYGON ], 30: [ Species.PORYGON2 ]}]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ Species.COSMOG ], 43: [ Species.COSMOEM ]}, Species.CELESTEELA ]}, + [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ Species.SOLROCK ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [ Species.LUNATONE ], [TimeOfDay.ALL]: [ Species.CLEFABLE, Species.BRONZONG, Species.MUSHARNA, Species.REUNICLUS, Species.MINIOR ]}, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.METAGROSS, Species.PORYGON_Z ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CELESTEELA ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [ Species.SOLGALEO ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [ Species.LUNALA ], [TimeOfDay.ALL]: [ Species.RAYQUAZA, Species.NECROZMA ]} }, [Biome.CONSTRUCTION_SITE]: { [BiomePoolTier.COMMON]: { @@ -1291,10 +1291,10 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.MACHOP ], 28: [ Species.MACHOKE ] }, - { 1: [ Species.MAGNEMITE ], 30: [ Species.MAGNETON ] }, - { 1: [ Species.DRILBUR ], 31: [ Species.EXCADRILL ] }, - { 1: [ Species.TIMBURR ], 25: [ Species.GURDURR ] } + { 1: [ Species.MACHOP ], 28: [ Species.MACHOKE ]}, + { 1: [ Species.MAGNEMITE ], 30: [ Species.MAGNETON ]}, + { 1: [ Species.DRILBUR ], 31: [ Species.EXCADRILL ]}, + { 1: [ Species.TIMBURR ], 25: [ Species.GURDURR ]} ] }, [BiomePoolTier.UNCOMMON]: { @@ -1303,60 +1303,60 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.GRIMER ], 38: [ Species.MUK ] }, - { 1: [ Species.KOFFING ], 35: [ Species.WEEZING ] }, - { 1: [ Species.RHYHORN ], 42: [ Species.RHYDON ] }, - { 1: [ Species.SCRAGGY ], 39: [ Species.SCRAFTY ] } + { 1: [ Species.GRIMER ], 38: [ Species.MUK ]}, + { 1: [ Species.KOFFING ], 35: [ Species.WEEZING ]}, + { 1: [ Species.RHYHORN ], 42: [ Species.RHYDON ]}, + { 1: [ Species.SCRAGGY ], 39: [ Species.SCRAFTY ]} ] }, - [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ { 1: [ Species.GALAR_MEOWTH ], 28: [ Species.PERRSERKER ] } ], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ONIX, Species.HITMONLEE, Species.HITMONCHAN, Species.DURALUDON ] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DITTO, Species.HITMONTOP ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.COBALION, Species.STAKATAKA ] }, - [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MACHAMP, Species.CONKELDURR ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.PERRSERKER ], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ARCHALUDON ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.COBALION, Species.STAKATAKA ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } + [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [{ 1: [ Species.GALAR_MEOWTH ], 28: [ Species.PERRSERKER ]}], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ONIX, Species.HITMONLEE, Species.HITMONCHAN, Species.DURALUDON ]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DITTO, Species.HITMONTOP ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.COBALION, Species.STAKATAKA ]}, + [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MACHAMP, Species.CONKELDURR ]}, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.PERRSERKER ], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ARCHALUDON ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.COBALION, Species.STAKATAKA ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []} }, [Biome.JUNGLE]: { [BiomePoolTier.COMMON]: { - [TimeOfDay.DAWN]: [ Species.VESPIQUEN, { 1: [ Species.CHERUBI ], 25: [ Species.CHERRIM ] }, { 1: [ Species.SEWADDLE ], 20: [ Species.SWADLOON ], 30: [ Species.LEAVANNY ] } ], - [TimeOfDay.DAY]: [ Species.VESPIQUEN, { 1: [ Species.CHERUBI ], 25: [ Species.CHERRIM ] }, { 1: [ Species.SEWADDLE ], 20: [ Species.SWADLOON ], 30: [ Species.LEAVANNY ] } ], - [TimeOfDay.DUSK]: [ Species.SHROOMISH, { 1: [ Species.PURRLOIN ], 20: [ Species.LIEPARD ] }, { 1: [ Species.FOONGUS ], 39: [ Species.AMOONGUSS ] } ], - [TimeOfDay.NIGHT]: [ { 1: [ Species.SPINARAK ], 22: [ Species.ARIADOS ] }, Species.SHROOMISH, { 1: [ Species.PURRLOIN ], 20: [ Species.LIEPARD ] }, { 1: [ Species.FOONGUS ], 39: [ Species.AMOONGUSS ] } ], - [TimeOfDay.ALL]: [ Species.AIPOM, { 1: [ Species.BLITZLE ], 27: [ Species.ZEBSTRIKA ] }, { 1: [ Species.PIKIPEK ], 14: [ Species.TRUMBEAK ], 28: [ Species.TOUCANNON ] } ] + [TimeOfDay.DAWN]: [ Species.VESPIQUEN, { 1: [ Species.CHERUBI ], 25: [ Species.CHERRIM ]}, { 1: [ Species.SEWADDLE ], 20: [ Species.SWADLOON ], 30: [ Species.LEAVANNY ]}], + [TimeOfDay.DAY]: [ Species.VESPIQUEN, { 1: [ Species.CHERUBI ], 25: [ Species.CHERRIM ]}, { 1: [ Species.SEWADDLE ], 20: [ Species.SWADLOON ], 30: [ Species.LEAVANNY ]}], + [TimeOfDay.DUSK]: [ Species.SHROOMISH, { 1: [ Species.PURRLOIN ], 20: [ Species.LIEPARD ]}, { 1: [ Species.FOONGUS ], 39: [ Species.AMOONGUSS ]}], + [TimeOfDay.NIGHT]: [{ 1: [ Species.SPINARAK ], 22: [ Species.ARIADOS ]}, Species.SHROOMISH, { 1: [ Species.PURRLOIN ], 20: [ Species.LIEPARD ]}, { 1: [ Species.FOONGUS ], 39: [ Species.AMOONGUSS ]}], + [TimeOfDay.ALL]: [ Species.AIPOM, { 1: [ Species.BLITZLE ], 27: [ Species.ZEBSTRIKA ]}, { 1: [ Species.PIKIPEK ], 14: [ Species.TRUMBEAK ], 28: [ Species.TOUCANNON ]}] }, [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [ Species.EXEGGCUTE, Species.TROPIUS, Species.COMBEE, Species.KOMALA ], [TimeOfDay.DAY]: [ Species.EXEGGCUTE, Species.TROPIUS, Species.COMBEE, Species.KOMALA ], - [TimeOfDay.DUSK]: [ Species.TANGELA, { 1: [ Species.SPINARAK ], 22: [ Species.ARIADOS ] }, { 1: [ Species.PANCHAM ], 52: [ Species.PANGORO ] } ], - [TimeOfDay.NIGHT]: [ Species.TANGELA, { 1: [ Species.PANCHAM ], 52: [ Species.PANGORO ] } ], + [TimeOfDay.DUSK]: [ Species.TANGELA, { 1: [ Species.SPINARAK ], 22: [ Species.ARIADOS ]}, { 1: [ Species.PANCHAM ], 52: [ Species.PANGORO ]}], + [TimeOfDay.NIGHT]: [ Species.TANGELA, { 1: [ Species.PANCHAM ], 52: [ Species.PANGORO ]}], [TimeOfDay.ALL]: [ - { 1: [ Species.PANSAGE ], 30: [ Species.SIMISAGE ] }, - { 1: [ Species.PANSEAR ], 30: [ Species.SIMISEAR ] }, - { 1: [ Species.PANPOUR ], 30: [ Species.SIMIPOUR ] }, - { 1: [ Species.JOLTIK ], 36: [ Species.GALVANTULA ] }, - { 1: [ Species.LITLEO ], 35: [ Species.PYROAR ] }, - { 1: [ Species.FOMANTIS ], 44: [ Species.LURANTIS ] }, + { 1: [ Species.PANSAGE ], 30: [ Species.SIMISAGE ]}, + { 1: [ Species.PANSEAR ], 30: [ Species.SIMISEAR ]}, + { 1: [ Species.PANPOUR ], 30: [ Species.SIMIPOUR ]}, + { 1: [ Species.JOLTIK ], 36: [ Species.GALVANTULA ]}, + { 1: [ Species.LITLEO ], 35: [ Species.PYROAR ]}, + { 1: [ Species.FOMANTIS ], 44: [ Species.LURANTIS ]}, Species.FALINKS ] }, [BiomePoolTier.RARE]: { - [TimeOfDay.DAWN]: [ { 1: [ Species.FOONGUS ], 39: [ Species.AMOONGUSS ] }, Species.PASSIMIAN, { 1: [ Species.GALAR_PONYTA ], 40: [ Species.GALAR_RAPIDASH ] } ], - [TimeOfDay.DAY]: [ { 1: [ Species.FOONGUS ], 39: [ Species.AMOONGUSS ] }, Species.PASSIMIAN ], + [TimeOfDay.DAWN]: [{ 1: [ Species.FOONGUS ], 39: [ Species.AMOONGUSS ]}, Species.PASSIMIAN, { 1: [ Species.GALAR_PONYTA ], 40: [ Species.GALAR_RAPIDASH ]}], + [TimeOfDay.DAY]: [{ 1: [ Species.FOONGUS ], 39: [ Species.AMOONGUSS ]}, Species.PASSIMIAN ], [TimeOfDay.DUSK]: [ Species.ORANGURU ], [TimeOfDay.NIGHT]: [ Species.ORANGURU ], [TimeOfDay.ALL]: [ Species.SCYTHER, Species.YANMA, - { 1: [ Species.SLAKOTH ], 18: [ Species.VIGOROTH ], 36: [ Species.SLAKING ] }, + { 1: [ Species.SLAKOTH ], 18: [ Species.VIGOROTH ], 36: [ Species.SLAKING ]}, Species.SEVIPER, Species.CARNIVINE, - { 1: [ Species.SNIVY ], 17: [ Species.SERVINE ], 36: [ Species.SERPERIOR ] }, - { 1: [ Species.GROOKEY ], 16: [ Species.THWACKEY ], 35: [ Species.RILLABOOM ] } + { 1: [ Species.SNIVY ], 17: [ Species.SERVINE ], 36: [ Species.SERPERIOR ]}, + { 1: [ Species.GROOKEY ], 16: [ Species.THWACKEY ], 35: [ Species.RILLABOOM ]} ] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KANGASKHAN, Species.CHATOT, Species.KLEAVOR ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TAPU_LELE, Species.BUZZWOLE, Species.ZARUDE, Species.MUNKIDORI ] }, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KANGASKHAN, Species.CHATOT, Species.KLEAVOR ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TAPU_LELE, Species.BUZZWOLE, Species.ZARUDE, Species.MUNKIDORI ]}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.EXEGGUTOR, Species.TROPIUS, Species.CHERRIM, Species.LEAVANNY, Species.KOMALA ], [TimeOfDay.DAY]: [ Species.EXEGGUTOR, Species.TROPIUS, Species.CHERRIM, Species.LEAVANNY, Species.KOMALA ], @@ -1371,8 +1371,8 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KANGASKHAN, Species.SCIZOR, Species.SLAKING, Species.LEAFEON, Species.SERPERIOR, Species.RILLABOOM ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TAPU_LELE, Species.BUZZWOLE, Species.ZARUDE, Species.MUNKIDORI ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KLEAVOR ] } + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TAPU_LELE, Species.BUZZWOLE, Species.ZARUDE, Species.MUNKIDORI ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.KLEAVOR ]} }, [Biome.FAIRY_CAVE]: { [BiomePoolTier.COMMON]: { @@ -1381,14 +1381,14 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.JIGGLYPUFF ], 30: [ Species.WIGGLYTUFF ] }, - { 1: [ Species.MARILL ], 18: [ Species.AZUMARILL ] }, + { 1: [ Species.JIGGLYPUFF ], 30: [ Species.WIGGLYTUFF ]}, + { 1: [ Species.MARILL ], 18: [ Species.AZUMARILL ]}, Species.MAWILE, - { 1: [ Species.SPRITZEE ], 40: [ Species.AROMATISSE ] }, - { 1: [ Species.SWIRLIX ], 40: [ Species.SLURPUFF ] }, - { 1: [ Species.CUTIEFLY ], 25: [ Species.RIBOMBEE ] }, - { 1: [ Species.MORELULL ], 24: [ Species.SHIINOTIC ] }, - { 1: [ Species.MILCERY ], 30: [ Species.ALCREMIE ] } + { 1: [ Species.SPRITZEE ], 40: [ Species.AROMATISSE ]}, + { 1: [ Species.SWIRLIX ], 40: [ Species.SLURPUFF ]}, + { 1: [ Species.CUTIEFLY ], 25: [ Species.RIBOMBEE ]}, + { 1: [ Species.MORELULL ], 24: [ Species.SHIINOTIC ]}, + { 1: [ Species.MILCERY ], 30: [ Species.ALCREMIE ]} ] }, [BiomePoolTier.UNCOMMON]: { @@ -1399,15 +1399,15 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.ALL]: [ Species.CLEFAIRY, Species.TOGETIC, - { 1: [ Species.RALTS ], 20: [ Species.KIRLIA ], 30: [ Species.GARDEVOIR ] }, + { 1: [ Species.RALTS ], 20: [ Species.KIRLIA ], 30: [ Species.GARDEVOIR ]}, Species.CARBINK, Species.COMFEY, - { 1: [ Species.HATENNA ], 32: [ Species.HATTREM ], 42: [ Species.HATTERENE ] } + { 1: [ Species.HATENNA ], 32: [ Species.HATTREM ], 42: [ Species.HATTERENE ]} ] }, - [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.AUDINO, Species.ETERNAL_FLOETTE ] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DIANCIE, Species.ENAMORUS ] }, + [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.AUDINO, Species.ETERNAL_FLOETTE ]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DIANCIE, Species.ENAMORUS ]}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], @@ -1415,9 +1415,9 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.WIGGLYTUFF, Species.MAWILE, Species.TOGEKISS, Species.AUDINO, Species.AROMATISSE, Species.SLURPUFF, Species.CARBINK, Species.RIBOMBEE, Species.SHIINOTIC, Species.COMFEY, Species.HATTERENE, Species.ALCREMIE ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ETERNAL_FLOETTE ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DIANCIE, Species.ENAMORUS ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.XERNEAS ] } + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ETERNAL_FLOETTE ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DIANCIE, Species.ENAMORUS ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.XERNEAS ]} }, [Biome.TEMPLE]: { [BiomePoolTier.COMMON]: { @@ -1426,12 +1426,12 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.GASTLY ], 25: [ Species.HAUNTER ] }, - { 1: [ Species.NATU ], 25: [ Species.XATU ] }, - { 1: [ Species.DUSKULL ], 37: [ Species.DUSCLOPS ] }, - { 1: [ Species.YAMASK ], 34: [ Species.COFAGRIGUS ] }, - { 1: [ Species.GOLETT ], 43: [ Species.GOLURK ] }, - { 1: [ Species.HONEDGE ], 35: [ Species.DOUBLADE ] } + { 1: [ Species.GASTLY ], 25: [ Species.HAUNTER ]}, + { 1: [ Species.NATU ], 25: [ Species.XATU ]}, + { 1: [ Species.DUSKULL ], 37: [ Species.DUSCLOPS ]}, + { 1: [ Species.YAMASK ], 34: [ Species.COFAGRIGUS ]}, + { 1: [ Species.GOLETT ], 43: [ Species.GOLURK ]}, + { 1: [ Species.HONEDGE ], 35: [ Species.DOUBLADE ]} ] }, [BiomePoolTier.UNCOMMON]: { @@ -1440,86 +1440,86 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.CUBONE ], 28: [ Species.MAROWAK ] }, - { 1: [ Species.BALTOY ], 36: [ Species.CLAYDOL ] }, - { 1: [ Species.CHINGLING ], 20: [ Species.CHIMECHO ] }, - { 1: [ Species.SKORUPI ], 40: [ Species.DRAPION ] }, - { 1: [ Species.LITWICK ], 41: [ Species.LAMPENT ] } + { 1: [ Species.CUBONE ], 28: [ Species.MAROWAK ]}, + { 1: [ Species.BALTOY ], 36: [ Species.CLAYDOL ]}, + { 1: [ Species.CHINGLING ], 20: [ Species.CHIMECHO ]}, + { 1: [ Species.SKORUPI ], 40: [ Species.DRAPION ]}, + { 1: [ Species.LITWICK ], 41: [ Species.LAMPENT ]} ] }, - [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.GIMMIGHOUL ], 40: [ Species.GHOLDENGO ] } ] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HOOPA, Species.TAPU_KOKO ] }, - [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CHIMECHO, Species.COFAGRIGUS, Species.GOLURK, Species.AEGISLASH ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GHOLDENGO ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HOOPA, Species.TAPU_KOKO ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIGIGAS ] } + [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ Species.GIMMIGHOUL ], 40: [ Species.GHOLDENGO ]}]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HOOPA, Species.TAPU_KOKO ]}, + [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.CHIMECHO, Species.COFAGRIGUS, Species.GOLURK, Species.AEGISLASH ]}, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GHOLDENGO ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.HOOPA, Species.TAPU_KOKO ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.REGIGIGAS ]} }, [Biome.SLUM]: { [BiomePoolTier.COMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], - [TimeOfDay.DUSK]: [ { 1: [ Species.PATRAT ], 20: [ Species.WATCHOG ] } ], - [TimeOfDay.NIGHT]: [ { 1: [ Species.PATRAT ], 20: [ Species.WATCHOG ] } ], + [TimeOfDay.DUSK]: [{ 1: [ Species.PATRAT ], 20: [ Species.WATCHOG ]}], + [TimeOfDay.NIGHT]: [{ 1: [ Species.PATRAT ], 20: [ Species.WATCHOG ]}], [TimeOfDay.ALL]: [ - { 1: [ Species.RATTATA ], 20: [ Species.RATICATE ] }, - { 1: [ Species.GRIMER ], 38: [ Species.MUK ] }, - { 1: [ Species.KOFFING ], 35: [ Species.WEEZING ] }, - { 1: [ Species.TRUBBISH ], 36: [ Species.GARBODOR ] } + { 1: [ Species.RATTATA ], 20: [ Species.RATICATE ]}, + { 1: [ Species.GRIMER ], 38: [ Species.MUK ]}, + { 1: [ Species.KOFFING ], 35: [ Species.WEEZING ]}, + { 1: [ Species.TRUBBISH ], 36: [ Species.GARBODOR ]} ] }, [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], - [TimeOfDay.DUSK]: [ { 1: [ Species.STUNKY ], 34: [ Species.SKUNTANK ] } ], - [TimeOfDay.NIGHT]: [ { 1: [ Species.STUNKY ], 34: [ Species.SKUNTANK ] } ], - [TimeOfDay.ALL]: [ { 1: [ Species.BURMY ], 20: [ Species.WORMADAM ] } ] + [TimeOfDay.DUSK]: [{ 1: [ Species.STUNKY ], 34: [ Species.SKUNTANK ]}], + [TimeOfDay.NIGHT]: [{ 1: [ Species.STUNKY ], 34: [ Species.SKUNTANK ]}], + [TimeOfDay.ALL]: [{ 1: [ Species.BURMY ], 20: [ Species.WORMADAM ]}] }, [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], - [TimeOfDay.DUSK]: [ Species.TOXTRICITY, { 1: [ Species.GALAR_LINOONE ], 65: [ Species.OBSTAGOON ] }, Species.GALAR_ZIGZAGOON ], - [TimeOfDay.NIGHT]: [ Species.TOXTRICITY, { 1: [ Species.GALAR_LINOONE ], 65: [ Species.OBSTAGOON ] }, Species.GALAR_ZIGZAGOON ], - [TimeOfDay.ALL]: [ { 1: [ Species.VAROOM ], 40: [ Species.REVAVROOM ] } ] + [TimeOfDay.DUSK]: [ Species.TOXTRICITY, { 1: [ Species.GALAR_LINOONE ], 65: [ Species.OBSTAGOON ]}, Species.GALAR_ZIGZAGOON ], + [TimeOfDay.NIGHT]: [ Species.TOXTRICITY, { 1: [ Species.GALAR_LINOONE ], 65: [ Species.OBSTAGOON ]}, Species.GALAR_ZIGZAGOON ], + [TimeOfDay.ALL]: [{ 1: [ Species.VAROOM ], 40: [ Species.REVAVROOM ]}] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GUZZLORD ] }, - [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.SKUNTANK, Species.WATCHOG ], [TimeOfDay.NIGHT]: [ Species.SKUNTANK, Species.WATCHOG ], [TimeOfDay.ALL]: [ Species.MUK, Species.WEEZING, Species.WORMADAM, Species.GARBODOR ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.TOXTRICITY, Species.OBSTAGOON ], [TimeOfDay.NIGHT]: [ Species.TOXTRICITY, Species.OBSTAGOON ], [TimeOfDay.ALL]: [ Species.REVAVROOM, Species.GALAR_WEEZING ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GUZZLORD ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GUZZLORD ]}, + [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.SKUNTANK, Species.WATCHOG ], [TimeOfDay.NIGHT]: [ Species.SKUNTANK, Species.WATCHOG ], [TimeOfDay.ALL]: [ Species.MUK, Species.WEEZING, Species.WORMADAM, Species.GARBODOR ]}, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [ Species.TOXTRICITY, Species.OBSTAGOON ], [TimeOfDay.NIGHT]: [ Species.TOXTRICITY, Species.OBSTAGOON ], [TimeOfDay.ALL]: [ Species.REVAVROOM, Species.GALAR_WEEZING ]}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GUZZLORD ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []} }, [Biome.SNOWY_FOREST]: { [BiomePoolTier.COMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], - [TimeOfDay.DUSK]: [ Species.SNEASEL, { 1: [ Species.TEDDIURSA ], 30: [ Species.URSARING ] }, { 1: [ Species.SNOM ], 20: [ Species.FROSMOTH ] } ], - [TimeOfDay.NIGHT]: [ Species.SNEASEL, { 1: [ Species.TEDDIURSA ], 30: [ Species.URSARING ] }, { 1: [ Species.SNOM ], 20: [ Species.FROSMOTH ] } ], - [TimeOfDay.ALL]: [ { 1: [ Species.SWINUB ], 33: [ Species.PILOSWINE ] }, { 1: [ Species.SNOVER ], 40: [ Species.ABOMASNOW ] }, Species.EISCUE ] + [TimeOfDay.DUSK]: [ Species.SNEASEL, { 1: [ Species.TEDDIURSA ], 30: [ Species.URSARING ]}, { 1: [ Species.SNOM ], 20: [ Species.FROSMOTH ]}], + [TimeOfDay.NIGHT]: [ Species.SNEASEL, { 1: [ Species.TEDDIURSA ], 30: [ Species.URSARING ]}, { 1: [ Species.SNOM ], 20: [ Species.FROSMOTH ]}], + [TimeOfDay.ALL]: [{ 1: [ Species.SWINUB ], 33: [ Species.PILOSWINE ]}, { 1: [ Species.SNOVER ], 40: [ Species.ABOMASNOW ]}, Species.EISCUE ] }, [BiomePoolTier.UNCOMMON]: { - [TimeOfDay.DAWN]: [ Species.SNEASEL, { 1: [ Species.TEDDIURSA ], 30: [ Species.URSARING ] }, Species.STANTLER ], - [TimeOfDay.DAY]: [ Species.SNEASEL, { 1: [ Species.TEDDIURSA ], 30: [ Species.URSARING ] }, Species.STANTLER ], + [TimeOfDay.DAWN]: [ Species.SNEASEL, { 1: [ Species.TEDDIURSA ], 30: [ Species.URSARING ]}, Species.STANTLER ], + [TimeOfDay.DAY]: [ Species.SNEASEL, { 1: [ Species.TEDDIURSA ], 30: [ Species.URSARING ]}, Species.STANTLER ], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, [BiomePoolTier.RARE]: { - [TimeOfDay.DAWN]: [ { 1: [ Species.GALAR_DARUMAKA ], 30: [ Species.GALAR_DARMANITAN ] } ], - [TimeOfDay.DAY]: [ { 1: [ Species.GALAR_DARUMAKA ], 30: [ Species.GALAR_DARMANITAN ] } ], + [TimeOfDay.DAWN]: [{ 1: [ Species.GALAR_DARUMAKA ], 30: [ Species.GALAR_DARMANITAN ]}], + [TimeOfDay.DAY]: [{ 1: [ Species.GALAR_DARUMAKA ], 30: [ Species.GALAR_DARMANITAN ]}], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], - [TimeOfDay.ALL]: [ Species.DELIBIRD, { 1: [ Species.ALOLA_SANDSHREW ], 30: [ Species.ALOLA_SANDSLASH ] }, { 1: [ Species.ALOLA_VULPIX ], 30: [ Species.ALOLA_NINETALES ] } ] + [TimeOfDay.ALL]: [ Species.DELIBIRD, { 1: [ Species.ALOLA_SANDSHREW ], 30: [ Species.ALOLA_SANDSLASH ]}, { 1: [ Species.ALOLA_VULPIX ], 30: [ Species.ALOLA_NINETALES ]}] }, [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [ Species.HISUI_SNEASEL ], [TimeOfDay.DAY]: [ Species.HISUI_SNEASEL ], - [TimeOfDay.DUSK]: [ { 1: [ Species.HISUI_ZORUA ], 30: [ Species.HISUI_ZOROARK ] } ], - [TimeOfDay.NIGHT]: [ { 1: [ Species.HISUI_ZORUA ], 30: [ Species.HISUI_ZOROARK ] } ], - [TimeOfDay.ALL]: [ { 1: [ Species.GALAR_MR_MIME ], 42: [ Species.MR_RIME ] }, Species.ARCTOZOLT, Species.HISUI_AVALUGG ] + [TimeOfDay.DUSK]: [{ 1: [ Species.HISUI_ZORUA ], 30: [ Species.HISUI_ZOROARK ]}], + [TimeOfDay.NIGHT]: [{ 1: [ Species.HISUI_ZORUA ], 30: [ Species.HISUI_ZOROARK ]}], + [TimeOfDay.ALL]: [{ 1: [ Species.GALAR_MR_MIME ], 42: [ Species.MR_RIME ]}, Species.ARCTOZOLT, Species.HISUI_AVALUGG ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GLASTRIER, Species.CHIEN_PAO, Species.GALAR_ARTICUNO ] }, - [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.WYRDEER ], [TimeOfDay.DAY]: [ Species.WYRDEER ], [TimeOfDay.DUSK]: [ Species.FROSMOTH ], [TimeOfDay.NIGHT]: [ Species.FROSMOTH ], [TimeOfDay.ALL]: [ Species.ABOMASNOW, Species.URSALUNA ] }, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GLASTRIER, Species.CHIEN_PAO, Species.GALAR_ARTICUNO ]}, + [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.WYRDEER ], [TimeOfDay.DAY]: [ Species.WYRDEER ], [TimeOfDay.DUSK]: [ Species.FROSMOTH ], [TimeOfDay.NIGHT]: [ Species.FROSMOTH ], [TimeOfDay.ALL]: [ Species.ABOMASNOW, Species.URSALUNA ]}, [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [ Species.SNEASLER, Species.GALAR_DARMANITAN ], [TimeOfDay.DAY]: [ Species.SNEASLER, Species.GALAR_DARMANITAN ], @@ -1527,22 +1527,22 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [ Species.HISUI_ZOROARK ], [TimeOfDay.ALL]: [ Species.MR_RIME, Species.ARCTOZOLT, Species.ALOLA_SANDSLASH, Species.ALOLA_NINETALES ] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GLASTRIER, Species.CHIEN_PAO ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZACIAN, Species.GALAR_ARTICUNO ] } + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.GLASTRIER, Species.CHIEN_PAO ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ZACIAN, Species.GALAR_ARTICUNO ]} }, [Biome.ISLAND]: { [BiomePoolTier.COMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], - [TimeOfDay.DUSK]: [ { 1: [ Species.ALOLA_RATTATA ], 30: [ Species.ALOLA_RATICATE ] }, { 1: [ Species.ALOLA_MEOWTH ], 30: [ Species.ALOLA_PERSIAN ] } ], - [TimeOfDay.NIGHT]: [ { 1: [ Species.ALOLA_RATTATA ], 30: [ Species.ALOLA_RATICATE ] }, { 1: [ Species.ALOLA_MEOWTH ], 30: [ Species.ALOLA_PERSIAN ] } ], + [TimeOfDay.DUSK]: [{ 1: [ Species.ALOLA_RATTATA ], 30: [ Species.ALOLA_RATICATE ]}, { 1: [ Species.ALOLA_MEOWTH ], 30: [ Species.ALOLA_PERSIAN ]}], + [TimeOfDay.NIGHT]: [{ 1: [ Species.ALOLA_RATTATA ], 30: [ Species.ALOLA_RATICATE ]}, { 1: [ Species.ALOLA_MEOWTH ], 30: [ Species.ALOLA_PERSIAN ]}], [TimeOfDay.ALL]: [ Species.ORICORIO, - { 1: [ Species.ALOLA_SANDSHREW ], 30: [ Species.ALOLA_SANDSLASH ] }, - { 1: [ Species.ALOLA_VULPIX ], 30: [ Species.ALOLA_NINETALES ] }, - { 1: [ Species.ALOLA_DIGLETT ], 26: [ Species.ALOLA_DUGTRIO ] }, - { 1: [ Species.ALOLA_GEODUDE ], 25: [ Species.ALOLA_GRAVELER ], 40: [ Species.ALOLA_GOLEM ] }, - { 1: [ Species.ALOLA_GRIMER ], 38: [ Species.ALOLA_MUK ] } + { 1: [ Species.ALOLA_SANDSHREW ], 30: [ Species.ALOLA_SANDSLASH ]}, + { 1: [ Species.ALOLA_VULPIX ], 30: [ Species.ALOLA_NINETALES ]}, + { 1: [ Species.ALOLA_DIGLETT ], 26: [ Species.ALOLA_DUGTRIO ]}, + { 1: [ Species.ALOLA_GEODUDE ], 25: [ Species.ALOLA_GRAVELER ], 40: [ Species.ALOLA_GOLEM ]}, + { 1: [ Species.ALOLA_GRIMER ], 38: [ Species.ALOLA_MUK ]} ] }, [BiomePoolTier.UNCOMMON]: { @@ -1552,9 +1552,9 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [ Species.ALOLA_MAROWAK ], [TimeOfDay.ALL]: [ Species.BRUXISH ] }, - [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.BLACEPHALON ] }, + [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.BLACEPHALON ]}, [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [ Species.ALOLA_RAICHU, Species.ALOLA_EXEGGUTOR ], [TimeOfDay.DAY]: [ Species.ALOLA_RAICHU, Species.ALOLA_EXEGGUTOR ], @@ -1562,9 +1562,9 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.NIGHT]: [ Species.ALOLA_RATICATE, Species.ALOLA_PERSIAN, Species.ALOLA_MAROWAK ], [TimeOfDay.ALL]: [ Species.ORICORIO, Species.BRUXISH, Species.ALOLA_SANDSLASH, Species.ALOLA_NINETALES, Species.ALOLA_DUGTRIO, Species.ALOLA_GOLEM, Species.ALOLA_MUK ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.BLACEPHALON ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.BLACEPHALON ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []} }, [Biome.LABORATORY]: { [BiomePoolTier.COMMON]: { @@ -1573,21 +1573,21 @@ export const biomePokemonPools: BiomePokemonPools = { [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ - { 1: [ Species.MAGNEMITE ], 30: [ Species.MAGNETON ] }, - { 1: [ Species.GRIMER ], 38: [ Species.MUK ] }, - { 1: [ Species.VOLTORB ], 30: [ Species.ELECTRODE ] }, - { 1: [ Species.BRONZOR ], 33: [ Species.BRONZONG ] }, - { 1: [ Species.KLINK ], 38: [ Species.KLANG ], 49: [ Species.KLINKLANG ] } + { 1: [ Species.MAGNEMITE ], 30: [ Species.MAGNETON ]}, + { 1: [ Species.GRIMER ], 38: [ Species.MUK ]}, + { 1: [ Species.VOLTORB ], 30: [ Species.ELECTRODE ]}, + { 1: [ Species.BRONZOR ], 33: [ Species.BRONZONG ]}, + { 1: [ Species.KLINK ], 38: [ Species.KLANG ], 49: [ Species.KLINKLANG ]} ] }, - [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ { 1: [ Species.SOLOSIS ], 32: [ Species.DUOSION ], 41: [ Species.REUNICLUS ] } ] }, - [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DITTO, { 1: [ Species.PORYGON ], 30: [ Species.PORYGON2 ] } ] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ROTOM ] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TYPE_NULL ] }, - [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MUK, Species.ELECTRODE, Species.BRONZONG, Species.MAGNEZONE, Species.PORYGON_Z, Species.REUNICLUS, Species.KLINKLANG ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ROTOM, Species.ZYGARDE, Species.SILVALLY ] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MEWTWO, Species.MIRAIDON ] } + [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [{ 1: [ Species.SOLOSIS ], 32: [ Species.DUOSION ], 41: [ Species.REUNICLUS ]}]}, + [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.DITTO, { 1: [ Species.PORYGON ], 30: [ Species.PORYGON2 ]}]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ROTOM ]}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.TYPE_NULL ]}, + [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MUK, Species.ELECTRODE, Species.BRONZONG, Species.MAGNEZONE, Species.PORYGON_Z, Species.REUNICLUS, Species.KLINKLANG ]}, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ROTOM, Species.ZYGARDE, Species.SILVALLY ]}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.MEWTWO, Species.MIRAIDON ]} }, [Biome.END]: { [BiomePoolTier.COMMON]: { @@ -1610,14 +1610,14 @@ export const biomePokemonPools: BiomePokemonPools = { Species.IRON_THORNS ] }, - [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ROARING_MOON, Species.IRON_VALIANT ] }, - [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.WALKING_WAKE, Species.IRON_LEAVES, Species.GOUGING_FIRE, Species.RAGING_BOLT, Species.IRON_BOULDER, Species.IRON_CROWN ] }, - [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ETERNATUS ] }, - [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] }, - [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [] } + [BiomePoolTier.UNCOMMON]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ROARING_MOON, Species.IRON_VALIANT ]}, + [BiomePoolTier.RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.WALKING_WAKE, Species.IRON_LEAVES, Species.GOUGING_FIRE, Species.RAGING_BOLT, Species.IRON_BOULDER, Species.IRON_CROWN ]}, + [BiomePoolTier.SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, + [BiomePoolTier.ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, + [BiomePoolTier.BOSS]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: [ Species.ETERNATUS ]}, + [BiomePoolTier.BOSS_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, + [BiomePoolTier.BOSS_SUPER_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []}, + [BiomePoolTier.BOSS_ULTRA_RARE]: { [TimeOfDay.DAWN]: [], [TimeOfDay.DAY]: [], [TimeOfDay.DUSK]: [], [TimeOfDay.NIGHT]: [], [TimeOfDay.ALL]: []} } }; @@ -2051,27 +2051,27 @@ export function initBiomes() { ] ], [ Species.CATERPIE, Type.BUG, -1, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.METAPOD, Type.BUG, -1, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.BUTTERFREE, Type.BUG, Type.FLYING, [ - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.WEEDLE, Type.BUG, Type.POISON, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.KAKUNA, Type.BUG, Type.POISON, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.BEEDRILL, Type.BUG, Type.POISON, [ - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.PIDGEY, Type.NORMAL, Type.FLYING, [ @@ -2115,17 +2115,17 @@ export function initBiomes() { ] ], [ Species.EKANS, Type.POISON, -1, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], + [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], [ Biome.FOREST, BiomePoolTier.UNCOMMON ], - [ Biome.SWAMP, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.SWAMP, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.ARBOK, Type.POISON, -1, [ [ Biome.FOREST, BiomePoolTier.UNCOMMON ], - [ Biome.SWAMP, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.SWAMP, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.SWAMP, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.SWAMP, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.PIKACHU, Type.ELECTRIC, -1, [ @@ -2215,16 +2215,16 @@ export function initBiomes() { ] ], [ Species.ODDISH, Type.GRASS, Type.POISON, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.TALL_GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.TALL_GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.GLOOM, Type.GRASS, Type.POISON, [ - [ Biome.TALL_GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.TALL_GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.VILEPLUME, Type.GRASS, Type.POISON, [ - [ Biome.TALL_GRASS, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.TALL_GRASS, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.PARAS, Type.BUG, Type.GRASS, [ @@ -2261,13 +2261,13 @@ export function initBiomes() { ] ], [ Species.MEOWTH, Type.NORMAL, -1, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.PERSIAN, Type.NORMAL, -1, [ - [ Biome.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.PLAINS, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.PLAINS, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.PSYDUCK, Type.WATER, -1, [ @@ -2282,12 +2282,12 @@ export function initBiomes() { ] ], [ Species.MANKEY, Type.FIGHTING, -1, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], + [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], [ Biome.DOJO, BiomePoolTier.COMMON ] ] ], [ Species.PRIMEAPE, Type.FIGHTING, -1, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], + [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], [ Biome.DOJO, BiomePoolTier.COMMON ] ] ], @@ -2346,16 +2346,16 @@ export function initBiomes() { ] ], [ Species.BELLSPROUT, Type.GRASS, Type.POISON, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.WEEPINBELL, Type.GRASS, Type.POISON, [ - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.VICTREEBEL, Type.GRASS, Type.POISON, [ - [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.TENTACOOL, Type.WATER, Type.POISON, [ @@ -2386,25 +2386,25 @@ export function initBiomes() { ] ], [ Species.PONYTA, Type.FIRE, -1, [ - [ Biome.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], + [ Biome.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], [ Biome.VOLCANO, BiomePoolTier.COMMON ] ] ], [ Species.RAPIDASH, Type.FIRE, -1, [ - [ Biome.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], + [ Biome.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], [ Biome.VOLCANO, BiomePoolTier.COMMON ], [ Biome.VOLCANO, BiomePoolTier.BOSS ] ] ], [ Species.SLOWPOKE, Type.WATER, Type.PSYCHIC, [ - [ Biome.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.SEA, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], + [ Biome.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.SEA, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], [ Biome.LAKE, BiomePoolTier.UNCOMMON ] ] ], [ Species.SLOWBRO, Type.WATER, Type.PSYCHIC, [ - [ Biome.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.SEA, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], + [ Biome.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.SEA, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], [ Biome.LAKE, BiomePoolTier.UNCOMMON ], [ Biome.LAKE, BiomePoolTier.BOSS ] ] @@ -2429,12 +2429,12 @@ export function initBiomes() { ] ], [ Species.DODUO, Type.NORMAL, Type.FLYING, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.DODRIO, Type.NORMAL, Type.FLYING, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.PLAINS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.PLAINS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.SEEL, Type.WATER, -1, [ @@ -2461,13 +2461,13 @@ export function initBiomes() { ] ], [ Species.SHELLDER, Type.WATER, -1, [ - [ Biome.SEA, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.BEACH, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], + [ Biome.SEA, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.BEACH, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], [ Biome.SEABED, BiomePoolTier.UNCOMMON ] ] ], [ Species.CLOYSTER, Type.WATER, Type.ICE, [ - [ Biome.BEACH, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.BEACH, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.GASTLY, Type.GHOST, Type.POISON, [ @@ -2523,12 +2523,12 @@ export function initBiomes() { ] ], [ Species.EXEGGCUTE, Type.GRASS, Type.PSYCHIC, [ - [ Biome.FOREST, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.JUNGLE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.FOREST, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.JUNGLE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.EXEGGUTOR, Type.GRASS, Type.PSYCHIC, [ - [ Biome.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.CUBONE, Type.GROUND, -1, [ @@ -2542,7 +2542,7 @@ export function initBiomes() { [ Biome.GRAVEYARD, BiomePoolTier.UNCOMMON ], [ Biome.TEMPLE, BiomePoolTier.UNCOMMON ], [ Biome.BADLANDS, BiomePoolTier.BOSS, TimeOfDay.NIGHT ], - [ Biome.GRAVEYARD, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY, TimeOfDay.DUSK ] ] + [ Biome.GRAVEYARD, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY, TimeOfDay.DUSK ]] ] ], [ Species.HITMONLEE, Type.FIGHTING, -1, [ @@ -2573,15 +2573,15 @@ export function initBiomes() { ] ], [ Species.RHYHORN, Type.GROUND, Type.ROCK, [ - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], + [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], [ Biome.BADLANDS, BiomePoolTier.COMMON ], [ Biome.CONSTRUCTION_SITE, BiomePoolTier.UNCOMMON ] ] ], [ Species.RHYDON, Type.GROUND, Type.ROCK, [ - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], + [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], [ Biome.BADLANDS, BiomePoolTier.COMMON ], [ Biome.CONSTRUCTION_SITE, BiomePoolTier.UNCOMMON ] ] @@ -2592,7 +2592,7 @@ export function initBiomes() { ] ], [ Species.TANGELA, Type.GRASS, -1, [ - [ Biome.JUNGLE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.JUNGLE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.KANGASKHAN, Type.NORMAL, -1, [ @@ -2620,14 +2620,14 @@ export function initBiomes() { ] ], [ Species.STARYU, Type.WATER, -1, [ - [ Biome.BEACH, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.SEA, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.BEACH, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.SEA, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.STARMIE, Type.WATER, Type.PSYCHIC, [ - [ Biome.BEACH, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.BEACH, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.SEA, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.BEACH, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.BEACH, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.SEA, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.MR_MIME, Type.PSYCHIC, Type.FAIRY, [ @@ -2637,7 +2637,7 @@ export function initBiomes() { ], [ Species.SCYTHER, Type.BUG, Type.FLYING, [ [ Biome.TALL_GRASS, BiomePoolTier.SUPER_RARE ], - [ Biome.FOREST, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], + [ Biome.FOREST, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], [ Biome.JUNGLE, BiomePoolTier.RARE ] ] ], @@ -2817,13 +2817,13 @@ export function initBiomes() { ] ], [ Species.SENTRET, Type.NORMAL, -1, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.FURRET, Type.NORMAL, -1, [ - [ Biome.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.PLAINS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.PLAINS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.HOOTHOOT, Type.NORMAL, Type.FLYING, [ @@ -2860,7 +2860,7 @@ export function initBiomes() { [ Biome.TALL_GRASS, BiomePoolTier.UNCOMMON, TimeOfDay.NIGHT ], [ Biome.FOREST, BiomePoolTier.UNCOMMON, TimeOfDay.DUSK ], [ Biome.FOREST, BiomePoolTier.COMMON, TimeOfDay.NIGHT ], - [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], + [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], [ Biome.JUNGLE, BiomePoolTier.UNCOMMON, TimeOfDay.DUSK ], [ Biome.JUNGLE, BiomePoolTier.COMMON, TimeOfDay.NIGHT ] ] @@ -2921,17 +2921,17 @@ export function initBiomes() { ] ], [ Species.BELLOSSOM, Type.GRASS, -1, [ - [ Biome.TALL_GRASS, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.TALL_GRASS, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.MARILL, Type.WATER, Type.FAIRY, [ - [ Biome.LAKE, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], + [ Biome.LAKE, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], [ Biome.FAIRY_CAVE, BiomePoolTier.COMMON ] ] ], [ Species.AZUMARILL, Type.WATER, Type.FAIRY, [ - [ Biome.LAKE, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.LAKE, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], + [ Biome.LAKE, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.LAKE, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], [ Biome.FAIRY_CAVE, BiomePoolTier.COMMON ] ] ], @@ -2946,16 +2946,16 @@ export function initBiomes() { ] ], [ Species.HOPPIP, Type.GRASS, Type.FLYING, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.SKIPLOOM, Type.GRASS, Type.FLYING, [ - [ Biome.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.JUMPLUFF, Type.GRASS, Type.FLYING, [ - [ Biome.GRASS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.GRASS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.AIPOM, Type.NORMAL, -1, [ @@ -2963,12 +2963,12 @@ export function initBiomes() { ] ], [ Species.SUNKERN, Type.GRASS, -1, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.SUNFLORA, Type.GRASS, -1, [ - [ Biome.GRASS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.GRASS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.YANMA, Type.BUG, Type.FLYING, [ @@ -2977,13 +2977,13 @@ export function initBiomes() { ], [ Species.WOOPER, Type.WATER, Type.GROUND, [ [ Biome.LAKE, BiomePoolTier.UNCOMMON ], - [ Biome.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.QUAGSIRE, Type.WATER, Type.GROUND, [ [ Biome.LAKE, BiomePoolTier.UNCOMMON ], - [ Biome.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.SWAMP, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.SWAMP, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.ESPEON, Type.PSYCHIC, -1, [ @@ -3024,12 +3024,12 @@ export function initBiomes() { ] ], [ Species.PINECO, Type.BUG, -1, [ - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.FORRETRESS, Type.BUG, Type.STEEL, [ - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.DUNSPARCE, Type.NORMAL, -1, [ @@ -3045,12 +3045,12 @@ export function initBiomes() { ] ], [ Species.SNUBBULL, Type.FAIRY, -1, [ - [ Biome.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.GRANBULL, Type.FAIRY, -1, [ - [ Biome.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.MEADOW, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.MEADOW, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.QWILFISH, Type.WATER, Type.POISON, [ @@ -3074,23 +3074,23 @@ export function initBiomes() { ], [ Species.SNEASEL, Type.DARK, Type.ICE, [ [ Biome.ICE_CAVE, BiomePoolTier.UNCOMMON ], - [ Biome.SNOWY_FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.SNOWY_FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SNOWY_FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.SNOWY_FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.TEDDIURSA, Type.NORMAL, -1, [ [ Biome.FOREST, BiomePoolTier.UNCOMMON ], [ Biome.CAVE, BiomePoolTier.COMMON ], - [ Biome.SNOWY_FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.SNOWY_FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SNOWY_FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.SNOWY_FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.URSARING, Type.NORMAL, -1, [ [ Biome.FOREST, BiomePoolTier.UNCOMMON ], [ Biome.CAVE, BiomePoolTier.COMMON ], [ Biome.CAVE, BiomePoolTier.BOSS ], - [ Biome.SNOWY_FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.SNOWY_FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SNOWY_FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.SNOWY_FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.SLUGMA, Type.FIRE, -1, [ @@ -3160,12 +3160,12 @@ export function initBiomes() { ] ], [ Species.PHANPY, Type.GROUND, -1, [ - [ Biome.BADLANDS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.BADLANDS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.DONPHAN, Type.GROUND, -1, [ - [ Biome.BADLANDS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.BADLANDS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.BADLANDS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.BADLANDS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.PORYGON2, Type.NORMAL, -1, [ @@ -3175,9 +3175,9 @@ export function initBiomes() { ] ], [ Species.STANTLER, Type.NORMAL, -1, [ - [ Biome.FOREST, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.FOREST, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.SNOWY_FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.FOREST, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.FOREST, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.SNOWY_FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.SMEARGLE, Type.NORMAL, -1, [ @@ -3224,17 +3224,17 @@ export function initBiomes() { ], [ Species.LARVITAR, Type.ROCK, Type.GROUND, [ [ Biome.MOUNTAIN, BiomePoolTier.SUPER_RARE ], - [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.PUPITAR, Type.ROCK, Type.GROUND, [ [ Biome.MOUNTAIN, BiomePoolTier.SUPER_RARE ], - [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.TYRANITAR, Type.ROCK, Type.DARK, [ - [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.WASTELAND, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.WASTELAND, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.LUGIA, Type.PSYCHIC, Type.FLYING, [ @@ -3287,16 +3287,16 @@ export function initBiomes() { ] ], [ Species.POOCHYENA, Type.DARK, -1, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.MIGHTYENA, Type.DARK, -1, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.PLAINS, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.PLAINS, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.ZIGZAGOON, Type.NORMAL, -1, [ @@ -3334,52 +3334,52 @@ export function initBiomes() { ] ], [ Species.LOTAD, Type.WATER, Type.GRASS, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.LAKE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.LAKE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.LOMBRE, Type.WATER, Type.GRASS, [ - [ Biome.LAKE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.LAKE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.LUDICOLO, Type.WATER, Type.GRASS, [ - [ Biome.SWAMP, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SWAMP, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.SEEDOT, Type.GRASS, -1, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.NUZLEAF, Type.GRASS, Type.DARK, [ - [ Biome.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.SHIFTRY, Type.GRASS, Type.DARK, [ - [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.TAILLOW, Type.NORMAL, Type.FLYING, [ [ Biome.TOWN, BiomePoolTier.COMMON ], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.SWELLOW, Type.NORMAL, Type.FLYING, [ - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.WINGULL, Type.WATER, Type.FLYING, [ - [ Biome.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.PELIPPER, Type.WATER, Type.FLYING, [ - [ Biome.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.SEA, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.SEA, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.RALTS, Type.PSYCHIC, Type.FAIRY, [ @@ -3410,17 +3410,17 @@ export function initBiomes() { ] ], [ Species.SHROOMISH, Type.GRASS, -1, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.BRELOOM, Type.GRASS, Type.FIGHTING, [ - [ Biome.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.SLAKOTH, Type.NORMAL, -1, [ @@ -3482,13 +3482,13 @@ export function initBiomes() { ] ], [ Species.SKITTY, Type.NORMAL, -1, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.DELCATTY, Type.NORMAL, -1, [ - [ Biome.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.MEADOW, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.MEADOW, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.SABLEYE, Type.DARK, Type.GHOST, [ @@ -3502,18 +3502,18 @@ export function initBiomes() { ] ], [ Species.ARON, Type.STEEL, Type.ROCK, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.LAIRON, Type.STEEL, Type.ROCK, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.AGGRON, Type.STEEL, Type.ROCK, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], + [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], [ Biome.MOUNTAIN, BiomePoolTier.BOSS ] ] ], @@ -3552,8 +3552,8 @@ export function initBiomes() { ] ], [ Species.ROSELIA, Type.GRASS, Type.POISON, [ - [ Biome.FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.MEADOW, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.MEADOW, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.GULPIN, Type.POISON, -1, [ @@ -3566,12 +3566,12 @@ export function initBiomes() { ] ], [ Species.CARVANHA, Type.WATER, Type.DARK, [ - [ Biome.SEA, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.SEA, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.SHARPEDO, Type.WATER, Type.DARK, [ - [ Biome.SEA, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.SEA, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.SEA, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.SEA, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.WAILMER, Type.WATER, -1, [ @@ -3617,37 +3617,37 @@ export function initBiomes() { ] ], [ Species.TRAPINCH, Type.GROUND, -1, [ - [ Biome.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.VIBRAVA, Type.GROUND, Type.DRAGON, [ - [ Biome.DESERT, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], + [ Biome.DESERT, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], [ Biome.WASTELAND, BiomePoolTier.COMMON ] ] ], [ Species.FLYGON, Type.GROUND, Type.DRAGON, [ - [ Biome.DESERT, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], + [ Biome.DESERT, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], [ Biome.WASTELAND, BiomePoolTier.COMMON ], [ Biome.WASTELAND, BiomePoolTier.BOSS ] ] ], [ Species.CACNEA, Type.GRASS, -1, [ - [ Biome.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.CACTURNE, Type.GRASS, Type.DARK, [ - [ Biome.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.DESERT, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.DESERT, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.SWABLU, Type.NORMAL, Type.FLYING, [ - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], + [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], [ Biome.WASTELAND, BiomePoolTier.UNCOMMON ] ] ], [ Species.ALTARIA, Type.DRAGON, Type.FLYING, [ - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], + [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], [ Biome.WASTELAND, BiomePoolTier.UNCOMMON ] ] ], @@ -3760,8 +3760,8 @@ export function initBiomes() { [ Species.TROPIUS, Type.GRASS, Type.FLYING, [ [ Biome.TALL_GRASS, BiomePoolTier.RARE ], [ Biome.FOREST, BiomePoolTier.RARE ], - [ Biome.JUNGLE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.JUNGLE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.CHIMECHO, Type.PSYCHIC, -1, [ @@ -3821,16 +3821,16 @@ export function initBiomes() { ] ], [ Species.BAGON, Type.DRAGON, -1, [ - [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.SHELGON, Type.DRAGON, -1, [ - [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.SALAMENCE, Type.DRAGON, Type.FLYING, [ - [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.WASTELAND, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.WASTELAND, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.BELDUM, Type.STEEL, Type.PSYCHIC, [ @@ -3930,20 +3930,20 @@ export function initBiomes() { ] ], [ Species.STARLY, Type.NORMAL, Type.FLYING, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.STARAVIA, Type.NORMAL, Type.FLYING, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.STARAPTOR, Type.NORMAL, Type.FLYING, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.BIDOOF, Type.NORMAL, -1, [ @@ -3957,27 +3957,27 @@ export function initBiomes() { ] ], [ Species.KRICKETOT, Type.BUG, -1, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.TALL_GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.TALL_GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.KRICKETUNE, Type.BUG, -1, [ - [ Biome.TALL_GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.TALL_GRASS, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.TALL_GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.TALL_GRASS, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.SHINX, Type.ELECTRIC, -1, [ - [ Biome.PLAINS, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], + [ Biome.PLAINS, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], [ Biome.POWER_PLANT, BiomePoolTier.COMMON ] ] ], [ Species.LUXIO, Type.ELECTRIC, -1, [ - [ Biome.PLAINS, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], + [ Biome.PLAINS, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], [ Biome.POWER_PLANT, BiomePoolTier.COMMON ] ] ], [ Species.LUXRAY, Type.ELECTRIC, -1, [ - [ Biome.PLAINS, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], + [ Biome.PLAINS, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], [ Biome.POWER_PLANT, BiomePoolTier.COMMON ], [ Biome.POWER_PLANT, BiomePoolTier.BOSS ] ] @@ -3985,7 +3985,7 @@ export function initBiomes() { [ Species.BUDEW, Type.GRASS, Type.POISON, [ ] ], [ Species.ROSERADE, Type.GRASS, Type.POISON, [ - [ Biome.MEADOW, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.MEADOW, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.CRANIDOS, Type.ROCK, -1, [ @@ -4022,22 +4022,22 @@ export function initBiomes() { ] ], [ Species.MOTHIM, Type.BUG, Type.FLYING, [ - [ Biome.FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.COMBEE, Type.BUG, Type.FLYING, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.GRASS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.JUNGLE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.GRASS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.JUNGLE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.VESPIQUEN, Type.BUG, Type.FLYING, [ - [ Biome.GRASS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.GRASS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.PACHIRISU, Type.ELECTRIC, -1, [ @@ -4054,15 +4054,15 @@ export function initBiomes() { ] ], [ Species.CHERUBI, Type.GRASS, -1, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.GRASS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.GRASS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.CHERRIM, Type.GRASS, -1, [ - [ Biome.GRASS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.GRASS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.SHELLOS, Type.WATER, -1, [ @@ -4122,12 +4122,12 @@ export function initBiomes() { ] ], [ Species.STUNKY, Type.POISON, Type.DARK, [ - [ Biome.SLUM, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.SLUM, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.SKUNTANK, Type.POISON, Type.DARK, [ - [ Biome.SLUM, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.SLUM, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.SLUM, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.SLUM, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.BRONZOR, Type.STEEL, Type.PSYCHIC, [ @@ -4186,12 +4186,12 @@ export function initBiomes() { ] ], [ Species.HIPPOPOTAS, Type.GROUND, -1, [ - [ Biome.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.HIPPOWDON, Type.GROUND, -1, [ - [ Biome.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.DESERT, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.DESERT, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.SKORUPI, Type.POISON, Type.BUG, [ @@ -4208,12 +4208,12 @@ export function initBiomes() { ] ], [ Species.CROAGUNK, Type.POISON, Type.FIGHTING, [ - [ Biome.SWAMP, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], + [ Biome.SWAMP, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], [ Biome.DOJO, BiomePoolTier.UNCOMMON ] ] ], [ Species.TOXICROAK, Type.POISON, Type.FIGHTING, [ - [ Biome.SWAMP, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], + [ Biome.SWAMP, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], [ Biome.DOJO, BiomePoolTier.UNCOMMON ], [ Biome.DOJO, BiomePoolTier.BOSS ] ] @@ -4265,7 +4265,7 @@ export function initBiomes() { ] ], [ Species.TANGROWTH, Type.GRASS, -1, [ - [ Biome.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.ELECTIVIRE, Type.ELECTRIC, -1, [ @@ -4436,18 +4436,18 @@ export function initBiomes() { ] ], [ Species.PATRAT, Type.NORMAL, -1, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.METROPOLIS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.SLUM, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.METROPOLIS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.SLUM, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.WATCHOG, Type.NORMAL, -1, [ - [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.METROPOLIS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.SLUM, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.SLUM, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.METROPOLIS, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.SLUM, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.SLUM, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.LILLIPUP, Type.NORMAL, -1, [ @@ -4465,15 +4465,15 @@ export function initBiomes() { ] ], [ Species.PURRLOIN, Type.DARK, -1, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], + [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], [ Biome.ABYSS, BiomePoolTier.COMMON ], - [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.LIEPARD, Type.DARK, -1, [ [ Biome.ABYSS, BiomePoolTier.COMMON ], [ Biome.ABYSS, BiomePoolTier.BOSS ], - [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.PANSAGE, Type.GRASS, -1, [ @@ -4519,20 +4519,20 @@ export function initBiomes() { ] ], [ Species.PIDOVE, Type.NORMAL, Type.FLYING, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.TRANQUILL, Type.NORMAL, Type.FLYING, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.UNFEZANT, Type.NORMAL, Type.FLYING, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.BLITZLE, Type.ELECTRIC, -1, [ @@ -4547,15 +4547,15 @@ export function initBiomes() { ] ], [ Species.ROGGENROLA, Type.ROCK, -1, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], + [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], [ Biome.BADLANDS, BiomePoolTier.UNCOMMON ], [ Biome.CAVE, BiomePoolTier.COMMON ] ] ], [ Species.BOLDORE, Type.ROCK, -1, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], + [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], [ Biome.BADLANDS, BiomePoolTier.UNCOMMON ], [ Biome.CAVE, BiomePoolTier.COMMON ] ] @@ -4627,52 +4627,52 @@ export function initBiomes() { ] ], [ Species.SEWADDLE, Type.BUG, Type.GRASS, [ - [ Biome.FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.SWADLOON, Type.BUG, Type.GRASS, [ - [ Biome.FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.LEAVANNY, Type.BUG, Type.GRASS, [ - [ Biome.FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.VENIPEDE, Type.BUG, Type.POISON, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.WHIRLIPEDE, Type.BUG, Type.POISON, [ - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.SCOLIPEDE, Type.BUG, Type.POISON, [ - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.COTTONEE, Type.GRASS, Type.FAIRY, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.MEADOW, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.MEADOW, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.WHIMSICOTT, Type.GRASS, Type.FAIRY, [ - [ Biome.GRASS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.GRASS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.PETILIL, Type.GRASS, -1, [ - [ Biome.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.LILLIGANT, Type.GRASS, -1, [ - [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.BASCULIN, Type.WATER, -1, [ @@ -4680,19 +4680,19 @@ export function initBiomes() { ] ], [ Species.SANDILE, Type.GROUND, Type.DARK, [ - [ Biome.DESERT, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.DESERT, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.KROKOROK, Type.GROUND, Type.DARK, [ - [ Biome.DESERT, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.DESERT, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.KROOKODILE, Type.GROUND, Type.DARK, [ - [ Biome.DESERT, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.DESERT, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.DESERT, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.DESERT, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.DARUMAKA, Type.FIRE, -1, [ @@ -4786,12 +4786,12 @@ export function initBiomes() { ] ], [ Species.MINCCINO, Type.NORMAL, -1, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.MEADOW, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.MEADOW, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.CINCCINO, Type.NORMAL, -1, [ - [ Biome.MEADOW, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.MEADOW, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.GOTHITA, Type.PSYCHIC, -1, [ @@ -4825,12 +4825,12 @@ export function initBiomes() { ] ], [ Species.DUCKLETT, Type.WATER, Type.FLYING, [ - [ Biome.LAKE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.LAKE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.SWANNA, Type.WATER, Type.FLYING, [ - [ Biome.LAKE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.LAKE, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.LAKE, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.LAKE, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.VANILLITE, Type.ICE, -1, [ @@ -4847,12 +4847,12 @@ export function initBiomes() { ] ], [ Species.DEERLING, Type.NORMAL, Type.GRASS, [ - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.SAWSBUCK, Type.NORMAL, Type.GRASS, [ - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.EMOLGA, Type.ELECTRIC, Type.FLYING, [ @@ -4868,17 +4868,17 @@ export function initBiomes() { ] ], [ Species.FOONGUS, Type.GRASS, Type.POISON, [ - [ Biome.GRASS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.JUNGLE, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.GRASS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.JUNGLE, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.AMOONGUSS, Type.GRASS, Type.POISON, [ - [ Biome.GRASS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.JUNGLE, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.JUNGLE, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.GRASS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.JUNGLE, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.JUNGLE, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.JUNGLE, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.FRILLISH, Type.WATER, Type.GHOST, [ @@ -5041,26 +5041,26 @@ export function initBiomes() { ] ], [ Species.BOUFFALANT, Type.NORMAL, -1, [ - [ Biome.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.MEADOW, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.MEADOW, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.RUFFLET, Type.NORMAL, Type.FLYING, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.BRAVIARY, Type.NORMAL, Type.FLYING, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.VULLABY, Type.DARK, Type.FLYING, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.MANDIBUZZ, Type.DARK, Type.FLYING, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.HEATMOR, Type.FIRE, -1, [ @@ -5074,17 +5074,17 @@ export function initBiomes() { ] ], [ Species.DEINO, Type.DARK, Type.DRAGON, [ - [ Biome.WASTELAND, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], + [ Biome.WASTELAND, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], [ Biome.ABYSS, BiomePoolTier.RARE ] ] ], [ Species.ZWEILOUS, Type.DARK, Type.DRAGON, [ - [ Biome.WASTELAND, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], + [ Biome.WASTELAND, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], [ Biome.ABYSS, BiomePoolTier.RARE ] ] ], [ Species.HYDREIGON, Type.DARK, Type.DRAGON, [ - [ Biome.WASTELAND, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], + [ Biome.WASTELAND, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], [ Biome.ABYSS, BiomePoolTier.RARE ], [ Biome.ABYSS, BiomePoolTier.BOSS ] ] @@ -5206,30 +5206,30 @@ export function initBiomes() { [ Species.FLETCHLING, Type.NORMAL, Type.FLYING, [ [ Biome.TOWN, BiomePoolTier.COMMON ], [ Biome.PLAINS, BiomePoolTier.UNCOMMON ], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.FLETCHINDER, Type.FIRE, Type.FLYING, [ [ Biome.PLAINS, BiomePoolTier.UNCOMMON ], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.TALONFLAME, Type.FIRE, Type.FLYING, [ [ Biome.PLAINS, BiomePoolTier.UNCOMMON ], - [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.MOUNTAIN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.SCATTERBUG, Type.BUG, -1, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.SPEWPA, Type.BUG, -1, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.VIVILLON, Type.BUG, Type.FLYING, [ - [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.LITLEO, Type.FIRE, Type.NORMAL, [ @@ -5264,14 +5264,14 @@ export function initBiomes() { ], [ Species.PANCHAM, Type.FIGHTING, -1, [ [ Biome.DOJO, BiomePoolTier.RARE ], - [ Biome.JUNGLE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.JUNGLE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.PANGORO, Type.FIGHTING, Type.DARK, [ [ Biome.DOJO, BiomePoolTier.RARE ], [ Biome.DOJO, BiomePoolTier.BOSS_RARE ], - [ Biome.JUNGLE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.JUNGLE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.FURFROU, Type.NORMAL, -1, [ @@ -5280,12 +5280,12 @@ export function initBiomes() { ] ], [ Species.ESPURR, Type.PSYCHIC, -1, [ - [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.MEOWSTIC, Type.PSYCHIC, -1, [ - [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.METROPOLIS, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.METROPOLIS, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.HONEDGE, Type.STEEL, Type.GHOST, [ @@ -5319,12 +5319,12 @@ export function initBiomes() { ] ], [ Species.INKAY, Type.DARK, Type.PSYCHIC, [ - [ Biome.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.MALAMAR, Type.DARK, Type.PSYCHIC, [ - [ Biome.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.SEA, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.SEA, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.BINACLE, Type.ROCK, Type.WATER, [ @@ -5355,11 +5355,11 @@ export function initBiomes() { ] ], [ Species.HELIOPTILE, Type.ELECTRIC, Type.NORMAL, [ - [ Biome.DESERT, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.DESERT, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.HELIOLISK, Type.ELECTRIC, Type.NORMAL, [ - [ Biome.DESERT, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.DESERT, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.TYRUNT, Type.ROCK, Type.DRAGON, [ @@ -5402,16 +5402,16 @@ export function initBiomes() { ] ], [ Species.GOOMY, Type.DRAGON, -1, [ - [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.SLIGGOO, Type.DRAGON, -1, [ - [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.GOODRA, Type.DRAGON, -1, [ - [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.WASTELAND, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.WASTELAND, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.KLEFKI, Type.STEEL, Type.FAIRY, [ @@ -5533,13 +5533,13 @@ export function initBiomes() { ] ], [ Species.YUNGOOS, Type.NORMAL, -1, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.GUMSHOOS, Type.NORMAL, -1, [ - [ Biome.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.PLAINS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.PLAINS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.GRUBBIN, Type.BUG, -1, [ @@ -5622,12 +5622,12 @@ export function initBiomes() { ] ], [ Species.DEWPIDER, Type.WATER, Type.BUG, [ - [ Biome.LAKE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.LAKE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.ARAQUANID, Type.WATER, Type.BUG, [ - [ Biome.LAKE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.LAKE, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.LAKE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.LAKE, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.FOMANTIS, Type.GRASS, -1, [ @@ -5670,16 +5670,16 @@ export function initBiomes() { ] ], [ Species.BOUNSWEET, Type.GRASS, -1, [ - [ Biome.TALL_GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.TALL_GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.STEENEE, Type.GRASS, -1, [ - [ Biome.TALL_GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.TALL_GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.TSAREENA, Type.GRASS, -1, [ - [ Biome.TALL_GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.TALL_GRASS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.TALL_GRASS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.TALL_GRASS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.COMFEY, Type.FAIRY, -1, [ @@ -5688,11 +5688,11 @@ export function initBiomes() { ] ], [ Species.ORANGURU, Type.NORMAL, Type.PSYCHIC, [ - [ Biome.JUNGLE, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.JUNGLE, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.PASSIMIAN, Type.FIGHTING, -1, [ - [ Biome.JUNGLE, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.JUNGLE, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.WIMPOD, Type.BUG, Type.WATER, [ @@ -5732,8 +5732,8 @@ export function initBiomes() { ] ], [ Species.KOMALA, Type.NORMAL, -1, [ - [ Biome.JUNGLE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.JUNGLE, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.JUNGLE, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.TURTONATOR, Type.FIRE, Type.DRAGON, [ @@ -5767,16 +5767,16 @@ export function initBiomes() { ] ], [ Species.JANGMO_O, Type.DRAGON, -1, [ - [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.HAKAMO_O, Type.DRAGON, Type.FIGHTING, [ - [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.KOMMO_O, Type.DRAGON, Type.FIGHTING, [ - [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.WASTELAND, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.WASTELAND, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.WASTELAND, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.TAPU_KOKO, Type.ELECTRIC, Type.FAIRY, [ @@ -5931,43 +5931,43 @@ export function initBiomes() { ] ], [ Species.SKWOVET, Type.NORMAL, -1, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.GREEDENT, Type.NORMAL, -1, [ - [ Biome.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.PLAINS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.PLAINS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.PLAINS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.ROOKIDEE, Type.FLYING, -1, [ [ Biome.TOWN, BiomePoolTier.RARE ], [ Biome.PLAINS, BiomePoolTier.RARE ], - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.CORVISQUIRE, Type.FLYING, -1, [ [ Biome.PLAINS, BiomePoolTier.RARE ], - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.CORVIKNIGHT, Type.FLYING, Type.STEEL, [ [ Biome.PLAINS, BiomePoolTier.RARE ], - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.BLIPBUG, Type.BUG, -1, [ - [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.TOWN, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.DOTTLER, Type.BUG, Type.PSYCHIC, [ - [ Biome.FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.ORBEETLE, Type.BUG, Type.PSYCHIC, [ - [ Biome.FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.FOREST, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.NICKIT, Type.DARK, -1, [ @@ -6007,12 +6007,12 @@ export function initBiomes() { ] ], [ Species.YAMPER, Type.ELECTRIC, -1, [ - [ Biome.METROPOLIS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.METROPOLIS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.BOLTUND, Type.ELECTRIC, -1, [ - [ Biome.METROPOLIS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.METROPOLIS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.METROPOLIS, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.METROPOLIS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.ROLYCOLY, Type.ROCK, -1, [ @@ -6050,8 +6050,8 @@ export function initBiomes() { ] ], [ Species.CRAMORANT, Type.FLYING, Type.WATER, [ - [ Biome.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.SEA, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.SEA, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.ARROKUDA, Type.WATER, -1, [ @@ -6066,17 +6066,17 @@ export function initBiomes() { [ Species.TOXEL, Type.ELECTRIC, Type.POISON, [ ] ], [ Species.TOXTRICITY, Type.ELECTRIC, Type.POISON, [ - [ Biome.SLUM, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.SLUM, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.SLUM, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.SLUM, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.SIZZLIPEDE, Type.FIRE, Type.BUG, [ - [ Biome.BADLANDS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.BADLANDS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.CENTISKORCH, Type.FIRE, Type.BUG, [ - [ Biome.BADLANDS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.BADLANDS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.BADLANDS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.BADLANDS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.CLOBBOPUS, Type.FIGHTING, -1, [ @@ -6124,8 +6124,8 @@ export function initBiomes() { ] ], [ Species.OBSTAGOON, Type.DARK, Type.NORMAL, [ - [ Biome.SLUM, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.SLUM, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.SLUM, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.SLUM, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.PERRSERKER, Type.STEEL, -1, [ @@ -6148,8 +6148,8 @@ export function initBiomes() { ] ], [ Species.RUNERIGUS, Type.GROUND, Type.GHOST, [ - [ Biome.RUINS, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.RUINS, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.RUINS, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.RUINS, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.MILCERY, Type.FAIRY, -1, [ @@ -6172,13 +6172,13 @@ export function initBiomes() { ], [ Species.SNOM, Type.ICE, Type.BUG, [ [ Biome.ICE_CAVE, BiomePoolTier.COMMON ], - [ Biome.SNOWY_FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.SNOWY_FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.FROSMOTH, Type.ICE, Type.BUG, [ [ Biome.ICE_CAVE, BiomePoolTier.COMMON ], - [ Biome.SNOWY_FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.SNOWY_FOREST, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.STONJOURNER, Type.ROCK, -1, [ @@ -6191,11 +6191,11 @@ export function initBiomes() { ] ], [ Species.INDEEDEE, Type.PSYCHIC, Type.NORMAL, [ - [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.MORPEKO, Type.ELECTRIC, Type.DARK, [ - [ Biome.METROPOLIS, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.METROPOLIS, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.CUFANT, Type.STEEL, -1, [ @@ -6232,16 +6232,16 @@ export function initBiomes() { ] ], [ Species.DREEPY, Type.DRAGON, Type.GHOST, [ - [ Biome.WASTELAND, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.WASTELAND, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.DRAKLOAK, Type.DRAGON, Type.GHOST, [ - [ Biome.WASTELAND, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.WASTELAND, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.DRAGAPULT, Type.DRAGON, Type.GHOST, [ - [ Biome.WASTELAND, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.WASTELAND, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.WASTELAND, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.WASTELAND, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.ZACIAN, Type.FAIRY, -1, [ @@ -6294,7 +6294,7 @@ export function initBiomes() { ] ], [ Species.WYRDEER, Type.NORMAL, Type.PSYCHIC, [ - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.KLEAVOR, Type.BUG, Type.ROCK, [ @@ -6311,7 +6311,7 @@ export function initBiomes() { ] ], [ Species.SNEASLER, Type.FIGHTING, Type.POISON, [ - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.OVERQWIL, Type.DARK, Type.POISON, [ @@ -6394,31 +6394,31 @@ export function initBiomes() { ] ], [ Species.PAWMI, Type.ELECTRIC, -1, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], + [ Biome.TOWN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], [ Biome.POWER_PLANT, BiomePoolTier.COMMON ] ] ], [ Species.PAWMO, Type.ELECTRIC, Type.FIGHTING, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], + [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], [ Biome.POWER_PLANT, BiomePoolTier.COMMON ] ] ], [ Species.PAWMOT, Type.ELECTRIC, Type.FIGHTING, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.PLAINS, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], + [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.PLAINS, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], [ Biome.POWER_PLANT, BiomePoolTier.COMMON ], [ Biome.POWER_PLANT, BiomePoolTier.BOSS ] ] ], [ Species.TANDEMAUS, Type.NORMAL, -1, [ - [ Biome.TOWN, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.METROPOLIS, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.TOWN, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.METROPOLIS, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.MAUSHOLD, Type.NORMAL, -1, [ - [ Biome.METROPOLIS, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.METROPOLIS, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.METROPOLIS, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.METROPOLIS, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.FIDOUGH, Type.FAIRY, -1, [ @@ -6432,16 +6432,16 @@ export function initBiomes() { ] ], [ Species.SMOLIV, Type.GRASS, Type.NORMAL, [ - [ Biome.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.DOLLIV, Type.GRASS, Type.NORMAL, [ - [ Biome.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.ARBOLIVA, Type.GRASS, Type.NORMAL, [ - [ Biome.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.MEADOW, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.MEADOW, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.MEADOW, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.SQUAWKABILLY, Type.NORMAL, Type.FLYING, [ @@ -6539,30 +6539,30 @@ export function initBiomes() { ] ], [ Species.CAPSAKID, Type.GRASS, -1, [ - [ Biome.BADLANDS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.BADLANDS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.SCOVILLAIN, Type.GRASS, Type.FIRE, [ - [ Biome.BADLANDS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.BADLANDS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.BADLANDS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.BADLANDS, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.RELLOR, Type.BUG, -1, [ - [ Biome.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.RABSCA, Type.BUG, Type.PSYCHIC, [ - [ Biome.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.DESERT, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.DESERT, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.DESERT, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.FLITTLE, Type.PSYCHIC, -1, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.ESPATHRA, Type.PSYCHIC, -1, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.MOUNTAIN, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.TINKATINK, Type.FAIRY, Type.STEEL, [ @@ -6587,16 +6587,16 @@ export function initBiomes() { ] ], [ Species.BOMBIRDIER, Type.FLYING, Type.DARK, [ - [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.FINIZEN, Type.WATER, -1, [ - [ Biome.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.PALAFIN, Type.WATER, -1, [ - [ Biome.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.SEA, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SEA, BiomePoolTier.COMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.SEA, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.VAROOM, Type.STEEL, Type.POISON, [ @@ -6664,14 +6664,14 @@ export function initBiomes() { ] ], [ Species.ANNIHILAPE, Type.FIGHTING, Type.GHOST, [ - [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], + [ Biome.PLAINS, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], [ Biome.DOJO, BiomePoolTier.COMMON ], [ Biome.DOJO, BiomePoolTier.BOSS ] ] ], [ Species.CLODSIRE, Type.POISON, Type.GROUND, [ - [ Biome.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.SWAMP, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.SWAMP, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.FARIGIRAF, Type.NORMAL, Type.PSYCHIC, [ @@ -6867,17 +6867,17 @@ export function initBiomes() { [ Species.PECHARUNT, Type.POISON, Type.GHOST, [ ] ], [ Species.ALOLA_RATTATA, Type.DARK, Type.NORMAL, [ - [ Biome.ISLAND, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.ISLAND, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.ALOLA_RATICATE, Type.DARK, Type.NORMAL, [ - [ Biome.ISLAND, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.ISLAND, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.ISLAND, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.ISLAND, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.ALOLA_RAICHU, Type.ELECTRIC, Type.PSYCHIC, [ - [ Biome.ISLAND, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.ISLAND, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.ISLAND, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.ISLAND, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.ALOLA_SANDSHREW, Type.ICE, Type.STEEL, [ @@ -6914,12 +6914,12 @@ export function initBiomes() { ] ], [ Species.ALOLA_MEOWTH, Type.DARK, -1, [ - [ Biome.ISLAND, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.ISLAND, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.ALOLA_PERSIAN, Type.DARK, -1, [ - [ Biome.ISLAND, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.ISLAND, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.ISLAND, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.ISLAND, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.ALOLA_GEODUDE, Type.ROCK, Type.ELECTRIC, [ @@ -6945,13 +6945,13 @@ export function initBiomes() { ] ], [ Species.ALOLA_EXEGGUTOR, Type.GRASS, Type.DRAGON, [ - [ Biome.ISLAND, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.ISLAND, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.ISLAND, BiomePoolTier.UNCOMMON, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.ISLAND, BiomePoolTier.BOSS, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.ALOLA_MAROWAK, Type.FIRE, Type.GHOST, [ - [ Biome.ISLAND, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.ISLAND, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.ISLAND, BiomePoolTier.UNCOMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.ISLAND, BiomePoolTier.BOSS, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.ETERNAL_FLOETTE, Type.FAIRY, -1, [ @@ -6973,12 +6973,12 @@ export function initBiomes() { ] ], [ Species.GALAR_SLOWPOKE, Type.PSYCHIC, -1, [ - [ Biome.SWAMP, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SWAMP, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.GALAR_SLOWBRO, Type.POISON, Type.PSYCHIC, [ - [ Biome.SWAMP, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.SWAMP, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SWAMP, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.SWAMP, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.GALAR_FARFETCHD, Type.FIGHTING, -1, [ @@ -7009,7 +7009,7 @@ export function initBiomes() { ] ], [ Species.GALAR_SLOWKING, Type.POISON, Type.PSYCHIC, [ - [ Biome.SWAMP, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SWAMP, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.GALAR_CORSOLA, Type.GHOST, -1, [ @@ -7017,24 +7017,24 @@ export function initBiomes() { ] ], [ Species.GALAR_ZIGZAGOON, Type.DARK, Type.NORMAL, [ - [ Biome.SLUM, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.SLUM, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.GALAR_LINOONE, Type.DARK, Type.NORMAL, [ - [ Biome.SLUM, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.SLUM, BiomePoolTier.RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.GALAR_DARUMAKA, Type.ICE, -1, [ - [ Biome.SNOWY_FOREST, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SNOWY_FOREST, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.GALAR_DARMANITAN, Type.ICE, -1, [ - [ Biome.SNOWY_FOREST, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SNOWY_FOREST, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.GALAR_YAMASK, Type.GROUND, Type.GHOST, [ - [ Biome.RUINS, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.RUINS, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.GALAR_STUNFISK, Type.GROUND, Type.STEEL, [ @@ -7067,7 +7067,7 @@ export function initBiomes() { ] ], [ Species.HISUI_SNEASEL, Type.FIGHTING, Type.POISON, [ - [ Biome.SNOWY_FOREST, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SNOWY_FOREST, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.HISUI_SAMUROTT, Type.WATER, Type.DARK, [ @@ -7075,29 +7075,29 @@ export function initBiomes() { ] ], [ Species.HISUI_LILLIGANT, Type.GRASS, Type.FIGHTING, [ - [ Biome.MEADOW, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.MEADOW, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.HISUI_ZORUA, Type.NORMAL, Type.GHOST, [ - [ Biome.SNOWY_FOREST, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.SNOWY_FOREST, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.HISUI_ZOROARK, Type.NORMAL, Type.GHOST, [ - [ Biome.SNOWY_FOREST, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ], - [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.SNOWY_FOREST, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]], + [ Biome.SNOWY_FOREST, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.HISUI_BRAVIARY, Type.PSYCHIC, Type.FLYING, [ - [ Biome.MOUNTAIN, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.MOUNTAIN, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.HISUI_SLIGGOO, Type.STEEL, Type.DRAGON, [ - [ Biome.SWAMP, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SWAMP, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.HISUI_GOODRA, Type.STEEL, Type.DRAGON, [ - [ Biome.SWAMP, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.SWAMP, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.SWAMP, BiomePoolTier.SUPER_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.SWAMP, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.HISUI_AVALUGG, Type.ICE, Type.ROCK, [ @@ -7109,12 +7109,12 @@ export function initBiomes() { ] ], [ Species.PALDEA_TAUROS, Type.FIGHTING, -1, [ - [ Biome.PLAINS, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ], - [ Biome.PLAINS, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ] ] + [ Biome.PLAINS, BiomePoolTier.RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]], + [ Biome.PLAINS, BiomePoolTier.BOSS_RARE, [ TimeOfDay.DAWN, TimeOfDay.DAY ]] ] ], [ Species.PALDEA_WOOPER, Type.POISON, Type.GROUND, [ - [ Biome.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ] ] + [ Biome.SWAMP, BiomePoolTier.COMMON, [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]] ] ], [ Species.BLOODMOON_URSALUNA, Type.GROUND, Type.NORMAL, [ @@ -7146,7 +7146,7 @@ export function initBiomes() { [ Biome.METROPOLIS, BiomePoolTier.RARE ] ] ], - [ TrainerType.BACKERS, [] ], + [ TrainerType.BACKERS, []], [ TrainerType.BACKPACKER, [ [ Biome.MOUNTAIN, BiomePoolTier.COMMON ], [ Biome.CAVE, BiomePoolTier.COMMON ], @@ -7160,7 +7160,7 @@ export function initBiomes() { ], [ TrainerType.BEAUTY, [ [ Biome.FAIRY_CAVE, BiomePoolTier.COMMON ] - ] ], + ]], [ TrainerType.BIKER, [ [ Biome.SLUM, BiomePoolTier.COMMON ] ] @@ -7190,42 +7190,42 @@ export function initBiomes() { ], [ TrainerType.CLERK, [ [ Biome.METROPOLIS, BiomePoolTier.COMMON ] - ] ], + ]], [ TrainerType.CYCLIST, [ [ Biome.PLAINS, BiomePoolTier.UNCOMMON ], [ Biome.METROPOLIS, BiomePoolTier.COMMON ] ] ], - [ TrainerType.DANCER, [] ], + [ TrainerType.DANCER, []], [ TrainerType.DEPOT_AGENT, [ [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON ] - ] ], - [ TrainerType.DOCTOR, [] ], + ]], + [ TrainerType.DOCTOR, []], [ TrainerType.FISHERMAN, [ [ Biome.LAKE, BiomePoolTier.COMMON ], [ Biome.BEACH, BiomePoolTier.COMMON ] ] ], - [ TrainerType.RICH, [] ], + [ TrainerType.RICH, []], [ TrainerType.GUITARIST, [ [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON ], [ Biome.POWER_PLANT, BiomePoolTier.COMMON ] - ] ], - [ TrainerType.HARLEQUIN, [] ], + ]], + [ TrainerType.HARLEQUIN, []], [ TrainerType.HIKER, [ [ Biome.MOUNTAIN, BiomePoolTier.COMMON ], [ Biome.CAVE, BiomePoolTier.COMMON ], [ Biome.BADLANDS, BiomePoolTier.COMMON ] ] ], - [ TrainerType.HOOLIGANS, [] ], - [ TrainerType.HOOPSTER, [] ], - [ TrainerType.INFIELDER, [] ], - [ TrainerType.JANITOR, [] ], - [ TrainerType.LINEBACKER, [] ], - [ TrainerType.MAID, [] ], - [ TrainerType.MUSICIAN, [] ], - [ TrainerType.NURSERY_AIDE, [] ], + [ TrainerType.HOOLIGANS, []], + [ TrainerType.HOOPSTER, []], + [ TrainerType.INFIELDER, []], + [ TrainerType.JANITOR, []], + [ TrainerType.LINEBACKER, []], + [ TrainerType.MAID, []], + [ TrainerType.MUSICIAN, []], + [ TrainerType.NURSERY_AIDE, []], [ TrainerType.OFFICER, [ [ Biome.METROPOLIS, BiomePoolTier.COMMON ], [ Biome.CONSTRUCTION_SITE, BiomePoolTier.COMMON ], @@ -7237,9 +7237,9 @@ export function initBiomes() { [ Biome.MEADOW, BiomePoolTier.COMMON ] ] ], - [ TrainerType.PILOT, [] ], - [ TrainerType.POKEFAN, [] ], - [ TrainerType.PRESCHOOLER, [] ], + [ TrainerType.PILOT, []], + [ TrainerType.POKEFAN, []], + [ TrainerType.PRESCHOOLER, []], [ TrainerType.PSYCHIC, [ [ Biome.GRAVEYARD, BiomePoolTier.COMMON ], [ Biome.RUINS, BiomePoolTier.COMMON ] @@ -7251,7 +7251,7 @@ export function initBiomes() { [ Biome.JUNGLE, BiomePoolTier.COMMON ] ] ], - [ TrainerType.RICH_KID, [] ], + [ TrainerType.RICH_KID, []], [ TrainerType.ROUGHNECK, [ [ Biome.SLUM, BiomePoolTier.COMMON ] ] @@ -7261,13 +7261,13 @@ export function initBiomes() { [ Biome.RUINS, BiomePoolTier.COMMON ] ] ], - [ TrainerType.SMASHER, [] ], + [ TrainerType.SMASHER, []], [ TrainerType.SNOW_WORKER, [ [ Biome.ICE_CAVE, BiomePoolTier.COMMON ], [ Biome.SNOWY_FOREST, BiomePoolTier.COMMON ] ] ], - [ TrainerType.STRIKER, [] ], + [ TrainerType.STRIKER, []], [ TrainerType.SCHOOL_KID, [ [ Biome.GRASS, BiomePoolTier.COMMON ] ] @@ -7607,57 +7607,57 @@ export function initBiomes() { [ Biome.ICE_CAVE, BiomePoolTier.BOSS ] ] ], - [ TrainerType.LORELEI, [] ], - [ TrainerType.BRUNO, [] ], - [ TrainerType.AGATHA, [] ], - [ TrainerType.LANCE, [] ], - [ TrainerType.WILL, [] ], - [ TrainerType.KOGA, [] ], - [ TrainerType.KAREN, [] ], - [ TrainerType.SIDNEY, [] ], - [ TrainerType.PHOEBE, [] ], - [ TrainerType.GLACIA, [] ], - [ TrainerType.DRAKE, [] ], - [ TrainerType.AARON, [] ], - [ TrainerType.BERTHA, [] ], - [ TrainerType.FLINT, [] ], - [ TrainerType.LUCIAN, [] ], - [ TrainerType.SHAUNTAL, [] ], - [ TrainerType.MARSHAL, [] ], - [ TrainerType.GRIMSLEY, [] ], - [ TrainerType.CAITLIN, [] ], - [ TrainerType.MALVA, [] ], - [ TrainerType.SIEBOLD, [] ], - [ TrainerType.WIKSTROM, [] ], - [ TrainerType.DRASNA, [] ], - [ TrainerType.HALA, [] ], - [ TrainerType.MOLAYNE, [] ], - [ TrainerType.OLIVIA, [] ], - [ TrainerType.ACEROLA, [] ], - [ TrainerType.KAHILI, [] ], - [ TrainerType.RIKA, [] ], - [ TrainerType.POPPY, [] ], - [ TrainerType.LARRY_ELITE, [] ], - [ TrainerType.HASSEL, [] ], - [ TrainerType.CRISPIN, [] ], - [ TrainerType.AMARYS, [] ], - [ TrainerType.LACEY, [] ], - [ TrainerType.DRAYTON, [] ], - [ TrainerType.BLUE, [] ], - [ TrainerType.RED, [] ], - [ TrainerType.LANCE_CHAMPION, [] ], - [ TrainerType.STEVEN, [] ], - [ TrainerType.WALLACE, [] ], - [ TrainerType.CYNTHIA, [] ], - [ TrainerType.ALDER, [] ], - [ TrainerType.IRIS, [] ], - [ TrainerType.DIANTHA, [] ], - [ TrainerType.HAU, [] ], - [ TrainerType.GEETA, [] ], - [ TrainerType.NEMONA, [] ], - [ TrainerType.KIERAN, [] ], - [ TrainerType.LEON, [] ], - [ TrainerType.RIVAL, [] ] + [ TrainerType.LORELEI, []], + [ TrainerType.BRUNO, []], + [ TrainerType.AGATHA, []], + [ TrainerType.LANCE, []], + [ TrainerType.WILL, []], + [ TrainerType.KOGA, []], + [ TrainerType.KAREN, []], + [ TrainerType.SIDNEY, []], + [ TrainerType.PHOEBE, []], + [ TrainerType.GLACIA, []], + [ TrainerType.DRAKE, []], + [ TrainerType.AARON, []], + [ TrainerType.BERTHA, []], + [ TrainerType.FLINT, []], + [ TrainerType.LUCIAN, []], + [ TrainerType.SHAUNTAL, []], + [ TrainerType.MARSHAL, []], + [ TrainerType.GRIMSLEY, []], + [ TrainerType.CAITLIN, []], + [ TrainerType.MALVA, []], + [ TrainerType.SIEBOLD, []], + [ TrainerType.WIKSTROM, []], + [ TrainerType.DRASNA, []], + [ TrainerType.HALA, []], + [ TrainerType.MOLAYNE, []], + [ TrainerType.OLIVIA, []], + [ TrainerType.ACEROLA, []], + [ TrainerType.KAHILI, []], + [ TrainerType.RIKA, []], + [ TrainerType.POPPY, []], + [ TrainerType.LARRY_ELITE, []], + [ TrainerType.HASSEL, []], + [ TrainerType.CRISPIN, []], + [ TrainerType.AMARYS, []], + [ TrainerType.LACEY, []], + [ TrainerType.DRAYTON, []], + [ TrainerType.BLUE, []], + [ TrainerType.RED, []], + [ TrainerType.LANCE_CHAMPION, []], + [ TrainerType.STEVEN, []], + [ TrainerType.WALLACE, []], + [ TrainerType.CYNTHIA, []], + [ TrainerType.ALDER, []], + [ TrainerType.IRIS, []], + [ TrainerType.DIANTHA, []], + [ TrainerType.HAU, []], + [ TrainerType.GEETA, []], + [ TrainerType.NEMONA, []], + [ TrainerType.KIERAN, []], + [ TrainerType.LEON, []], + [ TrainerType.RIVAL, []] ]; biomeDepths[Biome.TOWN] = [ 0, 1 ]; diff --git a/src/data/balance/starters.ts b/src/data/balance/starters.ts index 5117f800086..0fadd992309 100644 --- a/src/data/balance/starters.ts +++ b/src/data/balance/starters.ts @@ -630,16 +630,16 @@ export const speciesStarterCosts = { }; const starterCandyCosts: { passive: number; costReduction: [number, number]; egg: number; }[] = [ - { passive: 40, costReduction: [25, 60], egg: 30 }, // 1 Cost - { passive: 40, costReduction: [25, 60], egg: 30 }, // 2 Cost - { passive: 35, costReduction: [20, 50], egg: 25 }, // 3 Cost - { passive: 30, costReduction: [15, 40], egg: 20 }, // 4 Cost - { passive: 25, costReduction: [12, 35], egg: 18 }, // 5 Cost - { passive: 20, costReduction: [10, 30], egg: 15 }, // 6 Cost - { passive: 15, costReduction: [8, 20], egg: 12 }, // 7 Cost - { passive: 10, costReduction: [5, 15], egg: 10 }, // 8 Cost - { passive: 10, costReduction: [5, 15], egg: 10 }, // 9 Cost - { passive: 10, costReduction: [5, 15], egg: 10 }, // 10 Cost + { passive: 40, costReduction: [ 25, 60 ], egg: 30 }, // 1 Cost + { passive: 40, costReduction: [ 25, 60 ], egg: 30 }, // 2 Cost + { passive: 35, costReduction: [ 20, 50 ], egg: 25 }, // 3 Cost + { passive: 30, costReduction: [ 15, 40 ], egg: 20 }, // 4 Cost + { passive: 25, costReduction: [ 12, 35 ], egg: 18 }, // 5 Cost + { passive: 20, costReduction: [ 10, 30 ], egg: 15 }, // 6 Cost + { passive: 15, costReduction: [ 8, 20 ], egg: 12 }, // 7 Cost + { passive: 10, costReduction: [ 5, 15 ], egg: 10 }, // 8 Cost + { passive: 10, costReduction: [ 5, 15 ], egg: 10 }, // 9 Cost + { passive: 10, costReduction: [ 5, 15 ], egg: 10 }, // 10 Cost ]; /** diff --git a/src/data/battle-anims.ts b/src/data/battle-anims.ts index 62ef8112e6c..939f834cccc 100644 --- a/src/data/battle-anims.ts +++ b/src/data/battle-anims.ts @@ -556,7 +556,7 @@ function logMissingMoveAnim(move: Moves, ...optionalParams: any[]) { * @param encounterAnim one or more animations to fetch */ export async function initEncounterAnims(scene: BattleScene, encounterAnim: EncounterAnim | EncounterAnim[]): Promise { - const anims = Array.isArray(encounterAnim) ? encounterAnim : [encounterAnim]; + const anims = Array.isArray(encounterAnim) ? encounterAnim : [ encounterAnim ]; const encounterAnimNames = Utils.getEnumKeys(EncounterAnim); const encounterAnimFetches: Promise>[] = []; for (const anim of anims) { @@ -774,9 +774,9 @@ export abstract class BattleAnim { private getGraphicFrameData(scene: BattleScene, frames: AnimFrame[], onSubstitute?: boolean): Map> { const ret: Map> = new Map([ - [AnimFrameTarget.GRAPHIC, new Map() ], - [AnimFrameTarget.USER, new Map() ], - [AnimFrameTarget.TARGET, new Map() ] + [ AnimFrameTarget.GRAPHIC, new Map() ], + [ AnimFrameTarget.USER, new Map() ], + [ AnimFrameTarget.TARGET, new Map() ] ]); const isOppAnim = this.isOppAnim(); @@ -1093,9 +1093,9 @@ export abstract class BattleAnim { private getGraphicFrameDataWithoutTarget(frames: AnimFrame[], targetInitialX: number, targetInitialY: number): Map> { const ret: Map> = new Map([ - [AnimFrameTarget.GRAPHIC, new Map() ], - [AnimFrameTarget.USER, new Map() ], - [AnimFrameTarget.TARGET, new Map() ] + [ AnimFrameTarget.GRAPHIC, new Map() ], + [ AnimFrameTarget.USER, new Map() ], + [ AnimFrameTarget.TARGET, new Map() ] ]); let g = 0; diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 42775775ac4..6cb33dca306 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -363,7 +363,7 @@ export class RechargingTag extends BattlerTag { super.onAdd(pokemon); // Queue a placeholder move for the Pokemon to "use" next turn - pokemon.getMoveQueue().push({ move: Moves.NONE, targets: [] }); + pokemon.getMoveQueue().push({ move: Moves.NONE, targets: []}); } /** Cancels the source's move this turn and queues a "__ must recharge!" message */ @@ -569,7 +569,7 @@ export class InterruptedTag extends BattlerTag { super.onAdd(pokemon); pokemon.getMoveQueue().shift(); - pokemon.pushMoveHistory({move: Moves.NONE, result: MoveResult.OTHER}); + pokemon.pushMoveHistory({ move: Moves.NONE, result: MoveResult.OTHER }); } lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { @@ -1935,10 +1935,10 @@ export class RoostedTag extends BattlerTag { modifiedTypes = currentTypes.filter(type => type !== Type.NORMAL); modifiedTypes.push(Type.FLYING); } else { - modifiedTypes = [Type.FLYING]; + modifiedTypes = [ Type.FLYING ]; } } else { - modifiedTypes = [...currentTypes]; + modifiedTypes = [ ...currentTypes ]; modifiedTypes.push(Type.FLYING); } pokemon.summonData.types = modifiedTypes; @@ -1958,10 +1958,10 @@ export class RoostedTag extends BattlerTag { if (this.isBaseFlying) { let modifiedTypes: Type[]; if (this.isBasePureFlying && !isCurrentlyDualType) { - modifiedTypes = [Type.NORMAL]; + modifiedTypes = [ Type.NORMAL ]; } else { if (!!pokemon.getTag(RemovedTypeTag) && isOriginallyDualType && !isCurrentlyDualType) { - modifiedTypes = [Type.UNKNOWN]; + modifiedTypes = [ Type.UNKNOWN ]; } else { modifiedTypes = currentTypes.filter(type => type !== Type.FLYING); } @@ -2067,8 +2067,8 @@ export class StockpilingTag extends BattlerTag { super.loadTag(source); this.stockpiledCount = source.stockpiledCount || 0; this.statChangeCounts = { - [ Stat.DEF ]: source.statChangeCounts?.[ Stat.DEF ] ?? 0, - [ Stat.SPDEF ]: source.statChangeCounts?.[ Stat.SPDEF ] ?? 0, + [Stat.DEF]: source.statChangeCounts?.[Stat.DEF] ?? 0, + [Stat.SPDEF]: source.statChangeCounts?.[Stat.SPDEF] ?? 0, }; } @@ -2090,7 +2090,7 @@ export class StockpilingTag extends BattlerTag { // Attempt to increase DEF and SPDEF by one stage, keeping track of successful changes. pokemon.scene.unshiftPhase(new StatStageChangePhase( pokemon.scene, pokemon.getBattlerIndex(), true, - [Stat.SPDEF, Stat.DEF], 1, true, false, true, this.onStatStagesChanged + [ Stat.SPDEF, Stat.DEF ], 1, true, false, true, this.onStatStagesChanged )); } } @@ -2354,7 +2354,7 @@ export class SubstituteTag extends BattlerTag { public sourceInFocus: boolean; constructor(sourceMove: Moves, sourceId: integer) { - super(BattlerTagType.SUBSTITUTE, [BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.AFTER_MOVE, BattlerTagLapseType.HIT], 0, sourceMove, sourceId, true); + super(BattlerTagType.SUBSTITUTE, [ BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.AFTER_MOVE, BattlerTagLapseType.HIT ], 0, sourceMove, sourceId, true); } /** Sets the Substitute's HP and queues an on-add battle animation that initializes the Substitute's sprite. */ @@ -2378,7 +2378,7 @@ export class SubstituteTag extends BattlerTag { onRemove(pokemon: Pokemon): void { // Only play the animation if the cause of removal isn't from the source's own move if (!this.sourceInFocus) { - pokemon.scene.triggerPokemonBattleAnim(pokemon, PokemonAnimType.SUBSTITUTE_REMOVE, [this.sprite]); + pokemon.scene.triggerPokemonBattleAnim(pokemon, PokemonAnimType.SUBSTITUTE_REMOVE, [ this.sprite ]); } else { this.sprite.destroy(); } @@ -2402,13 +2402,13 @@ export class SubstituteTag extends BattlerTag { /** Triggers an animation that brings the Pokemon into focus before it uses a move */ onPreMove(pokemon: Pokemon): void { - pokemon.scene.triggerPokemonBattleAnim(pokemon, PokemonAnimType.SUBSTITUTE_PRE_MOVE, [this.sprite]); + pokemon.scene.triggerPokemonBattleAnim(pokemon, PokemonAnimType.SUBSTITUTE_PRE_MOVE, [ this.sprite ]); this.sourceInFocus = true; } /** Triggers an animation that brings the Pokemon out of focus after it uses a move */ onAfterMove(pokemon: Pokemon): void { - pokemon.scene.triggerPokemonBattleAnim(pokemon, PokemonAnimType.SUBSTITUTE_POST_MOVE, [this.sprite]); + pokemon.scene.triggerPokemonBattleAnim(pokemon, PokemonAnimType.SUBSTITUTE_POST_MOVE, [ this.sprite ]); this.sourceInFocus = false; } @@ -2542,7 +2542,7 @@ export class TormentTag extends MoveRestrictionBattlerTag { */ export class TauntTag extends MoveRestrictionBattlerTag { constructor() { - super(BattlerTagType.TAUNT, [BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.AFTER_MOVE], 4, Moves.TAUNT); + super(BattlerTagType.TAUNT, [ BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.AFTER_MOVE ], 4, Moves.TAUNT); } override onAdd(pokemon: Pokemon) { @@ -2577,7 +2577,7 @@ export class ImprisonTag extends MoveRestrictionBattlerTag { private source: Pokemon | null; constructor(sourceId: number) { - super(BattlerTagType.IMPRISON, [BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.AFTER_MOVE], 1, Moves.IMPRISON, sourceId); + super(BattlerTagType.IMPRISON, [ BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.AFTER_MOVE ], 1, Moves.IMPRISON, sourceId); } override onAdd(pokemon: Pokemon) { @@ -2650,7 +2650,7 @@ export class SyrupBombTag extends BattlerTag { pokemon.scene.queueMessage(i18next.t("battlerTags:syrupBombLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); // Custom message in lieu of an animation in mainline pokemon.scene.unshiftPhase(new StatStageChangePhase( pokemon.scene, pokemon.getBattlerIndex(), true, - [Stat.SPD], -1, true, false, true + [ Stat.SPD ], -1, true, false, true )); return --this.turnCount > 0; } @@ -2803,9 +2803,9 @@ export function getBattlerTag(tagType: BattlerTagType, turnCount: number, source case BattlerTagType.DISABLED: return new DisabledTag(sourceId); case BattlerTagType.IGNORE_GHOST: - return new ExposedTag(tagType, sourceMove, Type.GHOST, [Type.NORMAL, Type.FIGHTING]); + return new ExposedTag(tagType, sourceMove, Type.GHOST, [ Type.NORMAL, Type.FIGHTING ]); case BattlerTagType.IGNORE_DARK: - return new ExposedTag(tagType, sourceMove, Type.DARK, [Type.PSYCHIC]); + return new ExposedTag(tagType, sourceMove, Type.DARK, [ Type.PSYCHIC ]); case BattlerTagType.GULP_MISSILE_ARROKUDA: case BattlerTagType.GULP_MISSILE_PIKACHU: return new GulpMissileTag(tagType, sourceMove); diff --git a/src/data/challenge.ts b/src/data/challenge.ts index e3ee818cee9..7ecdfbf36e1 100644 --- a/src/data/challenge.ts +++ b/src/data/challenge.ts @@ -185,7 +185,7 @@ export abstract class Challenge { */ getDescription(overrideValue?: number): string { const value = overrideValue ?? this.value; - return `${i18next.t([`challenges:${this.geti18nKey()}.desc.${value}`, `challenges:${this.geti18nKey()}.desc`])}`; + return `${i18next.t([ `challenges:${this.geti18nKey()}.desc.${value}`, `challenges:${this.geti18nKey()}.desc` ])}`; } /** @@ -414,9 +414,9 @@ export class SingleGenerationChallenge extends Challenge { } applyStarterChoice(pokemon: PokemonSpecies, valid: Utils.BooleanHolder, dexAttr: DexAttrProps, soft: boolean = false): boolean { - const generations = [pokemon.generation]; + const generations = [ pokemon.generation ]; if (soft) { - const speciesToCheck = [pokemon.speciesId]; + const speciesToCheck = [ pokemon.speciesId ]; while (speciesToCheck.length) { const checking = speciesToCheck.pop(); if (checking && pokemonEvolutions.hasOwnProperty(checking)) { @@ -455,7 +455,7 @@ export class SingleGenerationChallenge extends Challenge { trainerTypes = [ TrainerType.BRUNO, TrainerType.KOGA, TrainerType.PHOEBE, TrainerType.BERTHA, TrainerType.MARSHAL, TrainerType.SIEBOLD, TrainerType.OLIVIA, TrainerType.NESSA_ELITE, TrainerType.POPPY ]; break; case 186: - trainerTypes = [ TrainerType.AGATHA, TrainerType.BRUNO, TrainerType.GLACIA, TrainerType.FLINT, TrainerType.GRIMSLEY, TrainerType.WIKSTROM, TrainerType.ACEROLA, Utils.randSeedItem([TrainerType.BEA_ELITE, TrainerType.ALLISTER_ELITE]), TrainerType.LARRY_ELITE ]; + trainerTypes = [ TrainerType.AGATHA, TrainerType.BRUNO, TrainerType.GLACIA, TrainerType.FLINT, TrainerType.GRIMSLEY, TrainerType.WIKSTROM, TrainerType.ACEROLA, Utils.randSeedItem([ TrainerType.BEA_ELITE, TrainerType.ALLISTER_ELITE ]), TrainerType.LARRY_ELITE ]; break; case 188: trainerTypes = [ TrainerType.LANCE, TrainerType.KAREN, TrainerType.DRAKE, TrainerType.LUCIAN, TrainerType.CAITLIN, TrainerType.DRASNA, TrainerType.KAHILI, TrainerType.RAIHAN_ELITE, TrainerType.HASSEL ]; @@ -528,10 +528,10 @@ interface monotypeOverride { */ export class SingleTypeChallenge extends Challenge { private static TYPE_OVERRIDES: monotypeOverride[] = [ - {species: Species.CASTFORM, type: Type.NORMAL, fusion: false}, + { species: Species.CASTFORM, type: Type.NORMAL, fusion: false }, ]; // TODO: Find a solution for all Pokemon with this ssui issue, including Basculin and Burmy - private static SPECIES_OVERRIDES: Species[] = [Species.MELOETTA]; + private static SPECIES_OVERRIDES: Species[] = [ Species.MELOETTA ]; constructor() { super(Challenges.SINGLE_TYPE, 18); @@ -539,9 +539,9 @@ export class SingleTypeChallenge extends Challenge { override applyStarterChoice(pokemon: PokemonSpecies, valid: Utils.BooleanHolder, dexAttr: DexAttrProps, soft: boolean = false): boolean { const speciesForm = getPokemonSpeciesForm(pokemon.speciesId, dexAttr.formIndex); - const types = [speciesForm.type1, speciesForm.type2]; + const types = [ speciesForm.type1, speciesForm.type2 ]; if (soft && !SingleTypeChallenge.SPECIES_OVERRIDES.includes(pokemon.speciesId)) { - const speciesToCheck = [pokemon.speciesId]; + const speciesToCheck = [ pokemon.speciesId ]; while (speciesToCheck.length) { const checking = speciesToCheck.pop(); if (checking && pokemonEvolutions.hasOwnProperty(checking)) { @@ -606,9 +606,9 @@ export class SingleTypeChallenge extends Challenge { overrideValue = this.value; } const type = i18next.t(`pokemonInfo:Type.${Type[this.value - 1]}`); - const typeColor = `[color=${TypeColor[Type[this.value-1]]}][shadow=${TypeShadow[Type[this.value-1]]}]${type}[/shadow][/color]`; + const typeColor = `[color=${TypeColor[Type[this.value - 1]]}][shadow=${TypeShadow[Type[this.value - 1]]}]${type}[/shadow][/color]`; const defaultDesc = i18next.t("challenges:singleType.desc_default"); - const typeDesc = i18next.t("challenges:singleType.desc", {type: typeColor}); + const typeDesc = i18next.t("challenges:singleType.desc", { type: typeColor }); return this.value === 0 ? defaultDesc : typeDesc; } @@ -653,7 +653,7 @@ export class FreshStartChallenge extends Challenge { pokemon.shiny = false; // Not shiny pokemon.variant = 0; // Not shiny pokemon.formIndex = 0; // Froakie should be base form - pokemon.ivs = [10, 10, 10, 10, 10, 10]; // Default IVs of 10 for all stats + pokemon.ivs = [ 10, 10, 10, 10, 10, 10 ]; // Default IVs of 10 for all stats return true; } diff --git a/src/data/dialogue.ts b/src/data/dialogue.ts index cf693a6315c..3219ce4d058 100644 --- a/src/data/dialogue.ts +++ b/src/data/dialogue.ts @@ -3123,44 +3123,44 @@ export const trainerTypeDialogue: TrainerTypeDialogue = { export const doubleBattleDialogue = { "blue_red_double": { - encounter: ["doubleBattleDialogue:blue_red_double.encounter.1"], - victory: ["doubleBattleDialogue:blue_red_double.victory.1"] + encounter: [ "doubleBattleDialogue:blue_red_double.encounter.1" ], + victory: [ "doubleBattleDialogue:blue_red_double.victory.1" ] }, "red_blue_double": { - encounter: ["doubleBattleDialogue:red_blue_double.encounter.1"], - victory: ["doubleBattleDialogue:red_blue_double.victory.1"] + encounter: [ "doubleBattleDialogue:red_blue_double.encounter.1" ], + victory: [ "doubleBattleDialogue:red_blue_double.victory.1" ] }, "tate_liza_double": { - encounter: ["doubleBattleDialogue:tate_liza_double.encounter.1"], - victory: ["doubleBattleDialogue:tate_liza_double.victory.1"] + encounter: [ "doubleBattleDialogue:tate_liza_double.encounter.1" ], + victory: [ "doubleBattleDialogue:tate_liza_double.victory.1" ] }, "liza_tate_double": { - encounter: ["doubleBattleDialogue:liza_tate_double.encounter.1"], - victory: [ "doubleBattleDialogue:liza_tate_double.victory.1"] + encounter: [ "doubleBattleDialogue:liza_tate_double.encounter.1" ], + victory: [ "doubleBattleDialogue:liza_tate_double.victory.1" ] }, "wallace_steven_double": { - encounter: [ "doubleBattleDialogue:wallace_steven_double.encounter.1"], - victory: [ "doubleBattleDialogue:wallace_steven_double.victory.1"] + encounter: [ "doubleBattleDialogue:wallace_steven_double.encounter.1" ], + victory: [ "doubleBattleDialogue:wallace_steven_double.victory.1" ] }, "steven_wallace_double": { - encounter: [ "doubleBattleDialogue:steven_wallace_double.encounter.1"], - victory: [ "doubleBattleDialogue:steven_wallace_double.victory.1"] + encounter: [ "doubleBattleDialogue:steven_wallace_double.encounter.1" ], + victory: [ "doubleBattleDialogue:steven_wallace_double.victory.1" ] }, "alder_iris_double": { - encounter: [ "doubleBattleDialogue:alder_iris_double.encounter.1"], - victory: [ "doubleBattleDialogue:alder_iris_double.victory.1"] + encounter: [ "doubleBattleDialogue:alder_iris_double.encounter.1" ], + victory: [ "doubleBattleDialogue:alder_iris_double.victory.1" ] }, "iris_alder_double": { - encounter: [ "doubleBattleDialogue:iris_alder_double.encounter.1"], - victory: [ "doubleBattleDialogue:iris_alder_double.victory.1"] + encounter: [ "doubleBattleDialogue:iris_alder_double.encounter.1" ], + victory: [ "doubleBattleDialogue:iris_alder_double.victory.1" ] }, "marnie_piers_double": { - encounter: [ "doubleBattleDialogue:marnie_piers_double.encounter.1"], - victory: [ "doubleBattleDialogue:marnie_piers_double.victory.1"] + encounter: [ "doubleBattleDialogue:marnie_piers_double.encounter.1" ], + victory: [ "doubleBattleDialogue:marnie_piers_double.victory.1" ] }, "piers_marnie_double": { - encounter: [ "doubleBattleDialogue:piers_marnie_double.encounter.1"], - victory: [ "doubleBattleDialogue:piers_marnie_double.victory.1"] + encounter: [ "doubleBattleDialogue:piers_marnie_double.encounter.1" ], + victory: [ "doubleBattleDialogue:piers_marnie_double.victory.1" ] }, @@ -3193,7 +3193,7 @@ export function initTrainerTypeDialogue(): void { const trainerTypes = Object.keys(trainerTypeDialogue).map(t => parseInt(t) as TrainerType); for (const trainerType of trainerTypes) { const messages = trainerTypeDialogue[trainerType]; - const messageTypes = ["encounter", "victory", "defeat"]; + const messageTypes = [ "encounter", "victory", "defeat" ]; for (const messageType of messageTypes) { if (Array.isArray(messages)) { if (messages[0][messageType]) { diff --git a/src/data/egg-hatch-data.ts b/src/data/egg-hatch-data.ts index e754a9205c4..ba553b55c4f 100644 --- a/src/data/egg-hatch-data.ts +++ b/src/data/egg-hatch-data.ts @@ -48,7 +48,7 @@ export class EggHatchData { seenCount: currDexEntry.seenCount, caughtCount: currDexEntry.caughtCount, hatchedCount: currDexEntry.hatchedCount, - ivs: [...currDexEntry.ivs] + ivs: [ ...currDexEntry.ivs ] }; this.starterDataEntryBeforeUpdate = { moveset: currStarterDataEntry.moveset, diff --git a/src/data/egg.ts b/src/data/egg.ts index c83554f2a19..5fffe4fcece 100644 --- a/src/data/egg.ts +++ b/src/data/egg.ts @@ -288,7 +288,7 @@ export class Egg { public getEggTypeDescriptor(scene: BattleScene): string { switch (this.sourceType) { case EggSourceType.SAME_SPECIES_EGG: - return this._eggDescriptor ?? i18next.t("egg:sameSpeciesEgg", { species: getPokemonSpecies(this._species).getName()}); + return this._eggDescriptor ?? i18next.t("egg:sameSpeciesEgg", { species: getPokemonSpecies(this._species).getName() }); case EggSourceType.GACHA_LEGENDARY: return this._eggDescriptor ?? `${i18next.t("egg:gachaTypeLegendary")} (${getPokemonSpecies(getLegendaryGachaSpeciesForTimestamp(scene, this.timestamp)).getName()})`; case EggSourceType.GACHA_SHINY: @@ -396,7 +396,7 @@ export class Egg { break; } - const ignoredSpecies = [Species.PHIONE, Species.MANAPHY, Species.ETERNATUS]; + const ignoredSpecies = [ Species.PHIONE, Species.MANAPHY, Species.ETERNATUS ]; let speciesPool = Object.keys(speciesStarterCosts) .filter(s => speciesStarterCosts[s] >= minStarterValue && speciesStarterCosts[s] <= maxStarterValue) diff --git a/src/data/move.ts b/src/data/move.ts index 8c9e8b0fb99..2225a457a42 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -341,7 +341,7 @@ export default class Move implements Localizable { * @returns `true` if the move can bypass the target's Substitute; `false` otherwise. */ hitsSubstitute(user: Pokemon, target: Pokemon | null): boolean { - if ([MoveTarget.USER, MoveTarget.USER_SIDE, MoveTarget.ENEMY_SIDE, MoveTarget.BOTH_SIDES].includes(this.moveTarget) + if ([ MoveTarget.USER, MoveTarget.USER_SIDE, MoveTarget.ENEMY_SIDE, MoveTarget.BOTH_SIDES ].includes(this.moveTarget) || !target?.getTag(BattlerTagType.SUBSTITUTE)) { return false; } @@ -782,7 +782,7 @@ export default class Move implements Localizable { .flat(), ); for (const aura of fieldAuras) { - aura.applyPreAttack(source, null, simulated, target, this, [power]); + aura.applyPreAttack(source, null, simulated, target, this, [ power ]); } const alliedField: Pokemon[] = source instanceof PlayerPokemon ? source.scene.getPlayerField() : source.scene.getEnemyField(); @@ -1328,7 +1328,7 @@ export class RecoilAttr extends MoveEffectAttr { } user.damageAndUpdate(recoilDamage, HitResult.OTHER, false, true, true); - user.scene.queueMessage(i18next.t("moveTriggers:hitWithRecoil", {pokemonName: getPokemonNameWithAffix(user)})); + user.scene.queueMessage(i18next.t("moveTriggers:hitWithRecoil", { pokemonName: getPokemonNameWithAffix(user) })); user.turnData.damageTaken += recoilDamage; return true; @@ -1439,8 +1439,8 @@ export class HalfSacrificialAttr extends MoveEffectAttr { // Check to see if the Pokemon has an ability that blocks non-direct damage applyAbAttrs(BlockNonDirectDamageAbAttr, user, cancelled); if (!cancelled.value) { - user.damageAndUpdate(Utils.toDmgValue(user.getMaxHp()/2), HitResult.OTHER, false, true, true); - user.scene.queueMessage(i18next.t("moveTriggers:cutHpPowerUpMove", {pokemonName: getPokemonNameWithAffix(user)})); // Queue recoil message + user.damageAndUpdate(Utils.toDmgValue(user.getMaxHp() / 2), HitResult.OTHER, false, true, true); + user.scene.queueMessage(i18next.t("moveTriggers:cutHpPowerUpMove", { pokemonName: getPokemonNameWithAffix(user) })); // Queue recoil message } return true; } @@ -1449,7 +1449,7 @@ export class HalfSacrificialAttr extends MoveEffectAttr { if (user.isBoss()) { return -10; } - return Math.ceil(((1 - user.getHpRatio()/2) * 10 - 10) * (target.getAttackTypeEffectiveness(move.type, user) - 0.5)); + return Math.ceil(((1 - user.getHpRatio() / 2) * 10 - 10) * (target.getAttackTypeEffectiveness(move.type, user) - 0.5)); } } @@ -1546,7 +1546,7 @@ export class HealAttr extends MoveEffectAttr { */ addHealPhase(target: Pokemon, healRatio: number) { target.scene.unshiftPhase(new PokemonHealPhase(target.scene, target.getBattlerIndex(), - Utils.toDmgValue(target.getMaxHp() * healRatio), i18next.t("moveTriggers:healHp", {pokemonName: getPokemonNameWithAffix(target)}), true, !this.showAnim)); + Utils.toDmgValue(target.getMaxHp() * healRatio), i18next.t("moveTriggers:healHp", { pokemonName: getPokemonNameWithAffix(target) }), true, !this.showAnim)); } getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { @@ -1637,7 +1637,7 @@ export class FlameBurstAttr extends MoveEffectAttr { return false; } - targetAlly.damageAndUpdate(Math.max(1, Math.floor(1/16 * targetAlly.getMaxHp())), HitResult.OTHER); + targetAlly.damageAndUpdate(Math.max(1, Math.floor(1 / 16 * targetAlly.getMaxHp())), HitResult.OTHER); return true; } @@ -1660,7 +1660,7 @@ export class SacrificialFullRestoreAttr extends SacrificialAttr { const maxPartyMemberHp = user.scene.getParty().map(p => p.getMaxHp()).reduce((maxHp: integer, hp: integer) => Math.max(hp, maxHp), 0); user.scene.pushPhase(new PokemonHealPhase(user.scene, user.getBattlerIndex(), - maxPartyMemberHp, i18next.t("moveTriggers:sacrificialFullRestore", {pokemonName: getPokemonNameWithAffix(user)}), true, false, false, true), true); + maxPartyMemberHp, i18next.t("moveTriggers:sacrificialFullRestore", { pokemonName: getPokemonNameWithAffix(user) }), true, false, false, true), true); return true; } @@ -1697,7 +1697,7 @@ export class IgnoreWeatherTypeDebuffAttr extends MoveAttr { * @returns true if the function succeeds */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const weatherModifier=args[0] as Utils.NumberHolder; + const weatherModifier = args[0] as Utils.NumberHolder; //If the type-based attack power modifier due to weather (e.g. Water moves in Sun) is below 1, set it to 1 if (user.scene.arena.weather?.weatherType === this.weather) { weatherModifier.value = Math.max(weatherModifier.value, 1); @@ -1845,11 +1845,11 @@ export class HitHealAttr extends MoveEffectAttr { if (this.healStat !== null) { // Strength Sap formula healAmount = target.getEffectiveStat(this.healStat); - message = i18next.t("battle:drainMessage", {pokemonName: getPokemonNameWithAffix(target)}); + message = i18next.t("battle:drainMessage", { pokemonName: getPokemonNameWithAffix(target) }); } else { // Default healing formula used by draining moves like Absorb, Draining Kiss, Bitter Blade, etc. healAmount = Utils.toDmgValue(user.turnData.currDamageDealt * this.healRatio); - message = i18next.t("battle:regainHealth", {pokemonName: getPokemonNameWithAffix(user)}); + message = i18next.t("battle:regainHealth", { pokemonName: getPokemonNameWithAffix(user) }); } if (reverseDrain) { if (user.hasAbilityWithAttr(BlockNonDirectDamageAbAttr)) { @@ -1875,7 +1875,7 @@ export class HitHealAttr extends MoveEffectAttr { getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { if (this.healStat) { const healAmount = target.getEffectiveStat(this.healStat); - return Math.floor(Math.max(0, (Math.min(1, (healAmount+user.hp)/user.getMaxHp() - 0.33))) / user.getHpRatio()); + return Math.floor(Math.max(0, (Math.min(1, (healAmount + user.hp) / user.getMaxHp() - 0.33))) / user.getHpRatio()); } return Math.floor(Math.max((1 - user.getHpRatio()) - 0.33, 0) * (move.power / 4)); } @@ -2049,7 +2049,7 @@ export class StatusEffectAttr extends MoveEffectAttr { if (user !== target && target.scene.arena.getTagOnSide(ArenaTagType.SAFEGUARD, target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY)) { if (move.category === MoveCategory.STATUS) { - user.scene.queueMessage(i18next.t("moveTriggers:safeguard", { targetName: getPokemonNameWithAffix(target)})); + user.scene.queueMessage(i18next.t("moveTriggers:safeguard", { targetName: getPokemonNameWithAffix(target) })); } return false; } @@ -2148,7 +2148,7 @@ export class StealHeldItemChanceAttr extends MoveEffectAttr { const stolenItem = tierHeldItems[user.randSeedInt(tierHeldItems.length)]; user.scene.tryTransferHeldItemModifier(stolenItem, user, false).then(success => { if (success) { - user.scene.queueMessage(i18next.t("moveTriggers:stoleItem", {pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), itemName: stolenItem.type.name})); + user.scene.queueMessage(i18next.t("moveTriggers:stoleItem", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), itemName: stolenItem.type.name })); } resolve(success); }); @@ -2231,9 +2231,9 @@ export class RemoveHeldItemAttr extends MoveEffectAttr { target.scene.updateModifiers(target.isPlayer()); if (this.berriesOnly) { - user.scene.queueMessage(i18next.t("moveTriggers:incineratedItem", {pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), itemName: removedItem.type.name})); + user.scene.queueMessage(i18next.t("moveTriggers:incineratedItem", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), itemName: removedItem.type.name })); } else { - user.scene.queueMessage(i18next.t("moveTriggers:knockedOffItem", {pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), itemName: removedItem.type.name})); + user.scene.queueMessage(i18next.t("moveTriggers:knockedOffItem", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), itemName: removedItem.type.name })); } } @@ -2343,7 +2343,7 @@ export class StealEatBerryAttr extends EatBerryAttr { } // if the target has berries, pick a random berry and steal it this.chosenBerry = heldBerries[user.randSeedInt(heldBerries.length)]; - const message = i18next.t("battle:stealEatBerry", {pokemonName: user.name, targetName: target.name, berryName: this.chosenBerry.type.name}); + const message = i18next.t("battle:stealEatBerry", { pokemonName: user.name, targetName: target.name, berryName: this.chosenBerry.type.name }); user.scene.queueMessage(message); this.reduceBerryModifier(target); this.eatBerry(user); @@ -2622,7 +2622,7 @@ export class SunlightChargeAttr extends ChargeAttr { export class ElectroShotChargeAttr extends ChargeAttr { private statIncreaseApplied: boolean; constructor() { - super(ChargeAnim.ELECTRO_SHOT_CHARGING, i18next.t("moveTriggers:absorbedElectricity", {pokemonName: "{USER}"}), null, true); + super(ChargeAnim.ELECTRO_SHOT_CHARGING, i18next.t("moveTriggers:absorbedElectricity", { pokemonName: "{USER}" }), null, true); // Add a flag because ChargeAttr skills use themselves twice instead of once over one-to-two turns this.statIncreaseApplied = false; } @@ -2681,7 +2681,7 @@ export class DelayedAttackAttr extends OverrideMoveEffectAttr { resolve(true); }); } else { - user.scene.ui.showText(i18next.t("moveTriggers:tookMoveAttack", {pokemonName: getPokemonNameWithAffix(user.scene.getPokemonById(target.id) ?? undefined), moveName: move.name}), null, () => resolve(true)); + user.scene.ui.showText(i18next.t("moveTriggers:tookMoveAttack", { pokemonName: getPokemonNameWithAffix(user.scene.getPokemonById(target.id) ?? undefined), moveName: move.name }), null, () => resolve(true)); } }); } @@ -2819,7 +2819,7 @@ export class AcupressureStatStageChangeAttr extends MoveEffectAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean | Promise { const randStats = BATTLE_STATS.filter(s => target.getStatStage(s) < 6); if (randStats.length > 0) { - const boostStat = [randStats[user.randSeedInt(randStats.length)]]; + const boostStat = [ randStats[user.randSeedInt(randStats.length)] ]; user.scene.unshiftPhase(new StatStageChangePhase(user.scene, target.getBattlerIndex(), this.selfTarget, boostStat, 2)); return true; } @@ -2890,7 +2890,7 @@ export class CopyStatsAttr extends MoveEffectAttr { } target.updateInfo(); user.updateInfo(); - target.scene.queueMessage(i18next.t("moveTriggers:copiedStatChanges", {pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target)})); + target.scene.queueMessage(i18next.t("moveTriggers:copiedStatChanges", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target) })); return true; } @@ -2909,7 +2909,7 @@ export class InvertStatsAttr extends MoveEffectAttr { target.updateInfo(); user.updateInfo(); - target.scene.queueMessage(i18next.t("moveTriggers:invertStats", {pokemonName: getPokemonNameWithAffix(target)})); + target.scene.queueMessage(i18next.t("moveTriggers:invertStats", { pokemonName: getPokemonNameWithAffix(target) })); return true; } @@ -2930,7 +2930,7 @@ export class ResetStatsAttr extends MoveEffectAttr { } else { // Affects only the single target when Clear Smog is used if (!move.hitsSubstitute(user, target)) { promises.push(this.resetStats(target)); - target.scene.queueMessage(i18next.t("moveTriggers:resetStats", {pokemonName: getPokemonNameWithAffix(target)})); + target.scene.queueMessage(i18next.t("moveTriggers:resetStats", { pokemonName: getPokemonNameWithAffix(target) })); } } @@ -3154,7 +3154,7 @@ const doublePowerChanceMessageFunc = (user: Pokemon, target: Pokemon, move: Move user.scene.executeWithSeedOffset(() => { const rand = Utils.randSeedInt(100); if (rand < move.chance) { - message = i18next.t("moveTriggers:goingAllOutForAttack", {pokemonName: getPokemonNameWithAffix(user)}); + message = i18next.t("moveTriggers:goingAllOutForAttack", { pokemonName: getPokemonNameWithAffix(user) }); } }, user.scene.currentBattle.turn << 6, user.scene.waveSeed); return message; @@ -3433,7 +3433,7 @@ const magnitudeMessageFunc = (user: Pokemon, target: Pokemon, move: Move) => { } } - message = i18next.t("moveTriggers:magnitudeMessage", {magnitude: m + 4}); + message = i18next.t("moveTriggers:magnitudeMessage", { magnitude: m + 4 }); }, user.scene.currentBattle.turn << 6, user.scene.waveSeed); return message!; }; @@ -3583,7 +3583,7 @@ export class PresentPowerAttr extends VariablePowerAttr { // If this move is multi-hit, disable all other hits user.stopMultiHit(); target.scene.unshiftPhase(new PokemonHealPhase(target.scene, target.getBattlerIndex(), - Utils.toDmgValue(target.getMaxHp() / 4), i18next.t("moveTriggers:regainedHealth", {pokemonName: getPokemonNameWithAffix(target)}), true)); + Utils.toDmgValue(target.getMaxHp() / 4), i18next.t("moveTriggers:regainedHealth", { pokemonName: getPokemonNameWithAffix(target) }), true)); } return true; @@ -4069,7 +4069,7 @@ export class FormChangeItemTypeAttr extends VariableMoveTypeAttr { return false; } - if ([user.species.speciesId, user.fusionSpecies?.speciesId].includes(Species.ARCEUS) || [user.species.speciesId, user.fusionSpecies?.speciesId].includes(Species.SILVALLY)) { + if ([ user.species.speciesId, user.fusionSpecies?.speciesId ].includes(Species.ARCEUS) || [ user.species.speciesId, user.fusionSpecies?.speciesId ].includes(Species.SILVALLY)) { const form = user.species.speciesId === Species.ARCEUS || user.species.speciesId === Species.SILVALLY ? user.formIndex : user.fusionSpecies?.formIndex!; // TODO: is this bang correct? moveType.value = Type[Type[form]]; @@ -4087,7 +4087,7 @@ export class TechnoBlastTypeAttr extends VariableMoveTypeAttr { return false; } - if ([user.species.speciesId, user.fusionSpecies?.speciesId].includes(Species.GENESECT)) { + if ([ user.species.speciesId, user.fusionSpecies?.speciesId ].includes(Species.GENESECT)) { const form = user.species.speciesId === Species.GENESECT ? user.formIndex : user.fusionSpecies?.formIndex; switch (form) { @@ -4121,7 +4121,7 @@ export class AuraWheelTypeAttr extends VariableMoveTypeAttr { return false; } - if ([user.species.speciesId, user.fusionSpecies?.speciesId].includes(Species.MORPEKO)) { + if ([ user.species.speciesId, user.fusionSpecies?.speciesId ].includes(Species.MORPEKO)) { const form = user.species.speciesId === Species.MORPEKO ? user.formIndex : user.fusionSpecies?.formIndex; switch (form) { @@ -4146,7 +4146,7 @@ export class RagingBullTypeAttr extends VariableMoveTypeAttr { return false; } - if ([user.species.speciesId, user.fusionSpecies?.speciesId].includes(Species.PALDEA_TAUROS)) { + if ([ user.species.speciesId, user.fusionSpecies?.speciesId ].includes(Species.PALDEA_TAUROS)) { const form = user.species.speciesId === Species.PALDEA_TAUROS ? user.formIndex : user.fusionSpecies?.formIndex; switch (form) { @@ -4174,7 +4174,7 @@ export class IvyCudgelTypeAttr extends VariableMoveTypeAttr { return false; } - if ([user.species.speciesId, user.fusionSpecies?.speciesId].includes(Species.OGERPON)) { + if ([ user.species.speciesId, user.fusionSpecies?.speciesId ].includes(Species.OGERPON)) { const form = user.species.speciesId === Species.OGERPON ? user.formIndex : user.fusionSpecies?.formIndex; switch (form) { @@ -4293,17 +4293,17 @@ export class HiddenPowerTypeAttr extends VariableMoveTypeAttr { } const iv_val = Math.floor(((user.ivs[Stat.HP] & 1) - +(user.ivs[Stat.ATK] & 1) * 2 - +(user.ivs[Stat.DEF] & 1) * 4 - +(user.ivs[Stat.SPD] & 1) * 8 - +(user.ivs[Stat.SPATK] & 1) * 16 - +(user.ivs[Stat.SPDEF] & 1) * 32) * 15/63); + + (user.ivs[Stat.ATK] & 1) * 2 + + (user.ivs[Stat.DEF] & 1) * 4 + + (user.ivs[Stat.SPD] & 1) * 8 + + (user.ivs[Stat.SPATK] & 1) * 16 + + (user.ivs[Stat.SPDEF] & 1) * 32) * 15 / 63); moveType.value = [ Type.FIGHTING, Type.FLYING, Type.POISON, Type.GROUND, Type.ROCK, Type.BUG, Type.GHOST, Type.STEEL, Type.FIRE, Type.WATER, Type.GRASS, Type.ELECTRIC, - Type.PSYCHIC, Type.ICE, Type.DRAGON, Type.DARK][iv_val]; + Type.PSYCHIC, Type.ICE, Type.DRAGON, Type.DARK ][iv_val]; return true; } @@ -4494,7 +4494,7 @@ const crashDamageFunc = (user: Pokemon, move: Move) => { } user.damageAndUpdate(Utils.toDmgValue(user.getMaxHp() / 2), HitResult.OTHER, false, true); - user.scene.queueMessage(i18next.t("moveTriggers:keptGoingAndCrashed", {pokemonName: getPokemonNameWithAffix(user)})); + user.scene.queueMessage(i18next.t("moveTriggers:keptGoingAndCrashed", { pokemonName: getPokemonNameWithAffix(user) })); user.turnData.damageTaken += Utils.toDmgValue(user.getMaxHp() / 2); return true; @@ -4760,7 +4760,7 @@ export class CurseAttr extends MoveEffectAttr { target.addTag(BattlerTagType.CURSED, 0, move.id, user.id); return true; } else { - user.scene.unshiftPhase(new StatStageChangePhase(user.scene, user.getBattlerIndex(), true, [ Stat.ATK, Stat.DEF], 1)); + user.scene.unshiftPhase(new StatStageChangePhase(user.scene, user.getBattlerIndex(), true, [ Stat.ATK, Stat.DEF ], 1)); user.scene.unshiftPhase(new StatStageChangePhase(user.scene, user.getBattlerIndex(), true, [ Stat.SPD ], -1)); return true; } @@ -4832,7 +4832,7 @@ export class ConfuseAttr extends AddBattlerTagAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (!this.selfTarget && target.scene.arena.getTagOnSide(ArenaTagType.SAFEGUARD, target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY)) { if (move.category === MoveCategory.STATUS) { - user.scene.queueMessage(i18next.t("moveTriggers:safeguard", { targetName: getPokemonNameWithAffix(target)})); + user.scene.queueMessage(i18next.t("moveTriggers:safeguard", { targetName: getPokemonNameWithAffix(target) })); } return false; } @@ -4892,7 +4892,7 @@ export class IgnoreAccuracyAttr extends AddBattlerTagAttr { return false; } - user.scene.queueMessage(i18next.t("moveTriggers:tookAimAtTarget", {pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target)})); + user.scene.queueMessage(i18next.t("moveTriggers:tookAimAtTarget", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target) })); return true; } @@ -4908,7 +4908,7 @@ export class FaintCountdownAttr extends AddBattlerTagAttr { return false; } - user.scene.queueMessage(i18next.t("moveTriggers:faintCountdown", {pokemonName: getPokemonNameWithAffix(target), turnCount: this.turnCountMin - 1})); + user.scene.queueMessage(i18next.t("moveTriggers:faintCountdown", { pokemonName: getPokemonNameWithAffix(target), turnCount: this.turnCountMin - 1 })); return true; } @@ -5191,7 +5191,7 @@ export class SwapArenaTagsAttr extends MoveEffectAttr { } - user.scene.queueMessage(i18next.t("moveTriggers:swapArenaTags", {pokemonName: getPokemonNameWithAffix(user)})); + user.scene.queueMessage(i18next.t("moveTriggers:swapArenaTags", { pokemonName: getPokemonNameWithAffix(user) })); return true; } } @@ -5218,7 +5218,7 @@ export class RevivalBlessingAttr extends MoveEffectAttr { return new Promise(resolve => { // If user is player, checks if the user has fainted pokemon if (user instanceof PlayerPokemon - && user.scene.getParty().findIndex(p => p.isFainted())>-1) { + && user.scene.getParty().findIndex(p => p.isFainted()) > -1) { (user as PlayerPokemon).revivalBlessing().then(() => { resolve(true); }); @@ -5232,11 +5232,11 @@ export class RevivalBlessingAttr extends MoveEffectAttr { const slotIndex = user.scene.getEnemyParty().findIndex(p => pokemon.id === p.id); pokemon.resetStatus(); pokemon.heal(Math.min(Utils.toDmgValue(0.5 * pokemon.getMaxHp()), pokemon.getMaxHp())); - user.scene.queueMessage(i18next.t("moveTriggers:revivalBlessing", {pokemonName: getPokemonNameWithAffix(pokemon)}), 0, true); + user.scene.queueMessage(i18next.t("moveTriggers:revivalBlessing", { pokemonName: getPokemonNameWithAffix(pokemon) }), 0, true); if (user.scene.currentBattle.double && user.scene.getEnemyParty().length > 1) { const allyPokemon = user.getAlly(); - if (slotIndex<=1) { + if (slotIndex <= 1) { user.scene.unshiftPhase(new SwitchSummonPhase(user.scene, SwitchType.SWITCH, pokemon.getFieldIndex(), slotIndex, false, false)); } else if (allyPokemon.isFainted()) { user.scene.unshiftPhase(new SwitchSummonPhase(user.scene, SwitchType.SWITCH, allyPokemon.getFieldIndex(), slotIndex, false, false)); @@ -5314,7 +5314,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { switchOutTarget.leaveField(false); if (switchOutTarget.hp) { - user.scene.queueMessage(i18next.t("moveTriggers:fled", {pokemonName: getPokemonNameWithAffix(switchOutTarget)}), null, true, 500); + user.scene.queueMessage(i18next.t("moveTriggers:fled", { pokemonName: getPokemonNameWithAffix(switchOutTarget) }), null, true, 500); // in double battles redirect potential moves off fled pokemon if (switchOutTarget.scene.currentBattle.double) { @@ -5343,7 +5343,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { getFailedText(user: Pokemon, target: Pokemon, move: Move, cancelled: Utils.BooleanHolder): string | null { const blockedByAbility = new Utils.BooleanHolder(false); applyAbAttrs(ForceSwitchOutImmunityAbAttr, target, blockedByAbility); - return blockedByAbility.value ? i18next.t("moveTriggers:cannotBeSwitchedOut", {pokemonName: getPokemonNameWithAffix(target)}) : null; + return blockedByAbility.value ? i18next.t("moveTriggers:cannotBeSwitchedOut", { pokemonName: getPokemonNameWithAffix(target) }) : null; } getSwitchOutCondition(): MoveConditionFunc { @@ -5456,7 +5456,7 @@ export class CopyTypeAttr extends MoveEffectAttr { user.summonData.types = target.getTypes(true); user.updateInfo(); - user.scene.queueMessage(i18next.t("moveTriggers:copyType", {pokemonName: getPokemonNameWithAffix(user), targetPokemonName: getPokemonNameWithAffix(target)})); + user.scene.queueMessage(i18next.t("moveTriggers:copyType", { pokemonName: getPokemonNameWithAffix(user), targetPokemonName: getPokemonNameWithAffix(target) })); return true; } @@ -5481,7 +5481,7 @@ export class CopyBiomeTypeAttr extends MoveEffectAttr { user.summonData.types = [ biomeType ]; user.updateInfo(); - user.scene.queueMessage(i18next.t("moveTriggers:transformedIntoType", {pokemonName: getPokemonNameWithAffix(user), typeName: i18next.t(`pokemonInfo:Type.${Type[biomeType]}`)})); + user.scene.queueMessage(i18next.t("moveTriggers:transformedIntoType", { pokemonName: getPokemonNameWithAffix(user), typeName: i18next.t(`pokemonInfo:Type.${Type[biomeType]}`) })); return true; } @@ -5497,10 +5497,10 @@ export class ChangeTypeAttr extends MoveEffectAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - target.summonData.types = [this.type]; + target.summonData.types = [ this.type ]; target.updateInfo(); - user.scene.queueMessage(i18next.t("moveTriggers:transformedIntoType", {pokemonName: getPokemonNameWithAffix(target), typeName: i18next.t(`pokemonInfo:Type.${Type[this.type]}`)})); + user.scene.queueMessage(i18next.t("moveTriggers:transformedIntoType", { pokemonName: getPokemonNameWithAffix(target), typeName: i18next.t(`pokemonInfo:Type.${Type[this.type]}`) })); return true; } @@ -5527,13 +5527,13 @@ export class AddTypeAttr extends MoveEffectAttr { target.summonData.types = types; target.updateInfo(); - user.scene.queueMessage(i18next.t("moveTriggers:addType", {typeName: i18next.t(`pokemonInfo:Type.${Type[this.type]}`), pokemonName: getPokemonNameWithAffix(target)})); + user.scene.queueMessage(i18next.t("moveTriggers:addType", { typeName: i18next.t(`pokemonInfo:Type.${Type[this.type]}`), pokemonName: getPokemonNameWithAffix(target) })); return true; } getCondition(): MoveConditionFunc { - return (user, target, move) => !target.isTerastallized()&& !target.getTypes().includes(this.type); + return (user, target, move) => !target.isTerastallized() && !target.getTypes().includes(this.type); } } @@ -5549,7 +5549,7 @@ export class FirstMoveTypeAttr extends MoveEffectAttr { const firstMoveType = target.getMoveset()[0]?.getMove().type!; // TODO: is this bang correct? user.summonData.types = [ firstMoveType ]; - user.scene.queueMessage(i18next.t("battle:transformedIntoType", {pokemonName: getPokemonNameWithAffix(user), type: i18next.t(`pokemonInfo:Type.${Type[firstMoveType]}`)})); + user.scene.queueMessage(i18next.t("battle:transformedIntoType", { pokemonName: getPokemonNameWithAffix(user), type: i18next.t(`pokemonInfo:Type.${Type[firstMoveType]}`) })); return true; } @@ -5759,8 +5759,8 @@ export class NaturePowerAttr extends OverrideMoveEffectAttr { break; } - user.getMoveQueue().push({ move: moveId, targets: [target.getBattlerIndex()], ignorePP: true }); - user.scene.unshiftPhase(new MovePhase(user.scene, user, [target.getBattlerIndex()], new PokemonMove(moveId, 0, 0, true), true)); + user.getMoveQueue().push({ move: moveId, targets: [ target.getBattlerIndex() ], ignorePP: true }); + user.scene.unshiftPhase(new MovePhase(user.scene, user, [ target.getBattlerIndex() ], new PokemonMove(moveId, 0, 0, true), true)); initMoveAnim(user.scene, moveId).then(() => { loadMoveAnimAssets(user.scene, [ moveId ], true) .then(() => resolve(true)); @@ -5838,7 +5838,7 @@ export class ReducePpMoveAttr extends MoveEffectAttr { const lastPpUsed = movesetMove?.ppUsed!; // TODO: is the bang correct? movesetMove!.ppUsed = Math.min((movesetMove?.ppUsed!) + this.reduction, movesetMove?.getMovePp()!); // TODO: is the bang correct? - const message = i18next.t("battle:ppReduced", {targetName: getPokemonNameWithAffix(target), moveName: movesetMove?.getName(), reduction: (movesetMove?.ppUsed!) - lastPpUsed}); // TODO: is the bang correct? + const message = i18next.t("battle:ppReduced", { targetName: getPokemonNameWithAffix(target), moveName: movesetMove?.getName(), reduction: (movesetMove?.ppUsed!) - lastPpUsed }); // TODO: is the bang correct? user.scene.eventTarget.dispatchEvent(new MoveUsedEvent(target?.id, movesetMove?.getMove()!, movesetMove?.ppUsed!)); // TODO: are these bangs correct? user.scene.queueMessage(message); @@ -5951,7 +5951,7 @@ export class MovesetCopyMoveAttr extends OverrideMoveEffectAttr { user.summonData.moveset = user.getMoveset().slice(0); user.summonData.moveset[thisMoveIndex] = new PokemonMove(copiedMove.id, 0, 0); - user.scene.queueMessage(i18next.t("moveTriggers:copiedMove", {pokemonName: getPokemonNameWithAffix(user), moveName: copiedMove.name})); + user.scene.queueMessage(i18next.t("moveTriggers:copiedMove", { pokemonName: getPokemonNameWithAffix(user), moveName: copiedMove.name })); return true; } @@ -6000,7 +6000,7 @@ export class SketchAttr extends MoveEffectAttr { user.setMove(sketchIndex, sketchedMove.id); - user.scene.queueMessage(i18next.t("moveTriggers:sketchedMove", {pokemonName: getPokemonNameWithAffix(user), moveName: sketchedMove.name})); + user.scene.queueMessage(i18next.t("moveTriggers:sketchedMove", { pokemonName: getPokemonNameWithAffix(user), moveName: sketchedMove.name })); return true; } @@ -6060,7 +6060,7 @@ export class AbilityChangeAttr extends MoveEffectAttr { moveTarget.summonData.ability = this.ability; user.scene.triggerPokemonFormChange(moveTarget, SpeciesFormChangeRevertWeatherFormTrigger); - user.scene.queueMessage(i18next.t("moveTriggers:acquiredAbility", {pokemonName: getPokemonNameWithAffix((this.selfTarget ? user : target)), abilityName: allAbilities[this.ability].name})); + user.scene.queueMessage(i18next.t("moveTriggers:acquiredAbility", { pokemonName: getPokemonNameWithAffix((this.selfTarget ? user : target)), abilityName: allAbilities[this.ability].name })); return true; } @@ -6086,11 +6086,11 @@ export class AbilityCopyAttr extends MoveEffectAttr { user.summonData.ability = target.getAbility().id; - user.scene.queueMessage(i18next.t("moveTriggers:copiedTargetAbility", {pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), abilityName: allAbilities[target.getAbility().id].name})); + user.scene.queueMessage(i18next.t("moveTriggers:copiedTargetAbility", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), abilityName: allAbilities[target.getAbility().id].name })); if (this.copyToPartner && user.scene.currentBattle?.double && user.getAlly().hp) { user.getAlly().summonData.ability = target.getAbility().id; - user.getAlly().scene.queueMessage(i18next.t("moveTriggers:copiedTargetAbility", {pokemonName: getPokemonNameWithAffix(user.getAlly()), targetName: getPokemonNameWithAffix(target), abilityName: allAbilities[target.getAbility().id].name})); + user.getAlly().scene.queueMessage(i18next.t("moveTriggers:copiedTargetAbility", { pokemonName: getPokemonNameWithAffix(user.getAlly()), targetName: getPokemonNameWithAffix(target), abilityName: allAbilities[target.getAbility().id].name })); } return true; @@ -6123,7 +6123,7 @@ export class AbilityGiveAttr extends MoveEffectAttr { target.summonData.ability = user.getAbility().id; - user.scene.queueMessage(i18next.t("moveTriggers:acquiredAbility", {pokemonName: getPokemonNameWithAffix(target), abilityName: allAbilities[user.getAbility().id].name})); + user.scene.queueMessage(i18next.t("moveTriggers:acquiredAbility", { pokemonName: getPokemonNameWithAffix(target), abilityName: allAbilities[user.getAbility().id].name })); return true; } @@ -6143,7 +6143,7 @@ export class SwitchAbilitiesAttr extends MoveEffectAttr { user.summonData.ability = target.getAbility().id; target.summonData.ability = tempAbilityId; - user.scene.queueMessage(i18next.t("moveTriggers:swappedAbilitiesWithTarget", {pokemonName: getPokemonNameWithAffix(user)})); + user.scene.queueMessage(i18next.t("moveTriggers:swappedAbilitiesWithTarget", { pokemonName: getPokemonNameWithAffix(user) })); // Swaps Forecast/Flower Gift from Castform/Cherrim user.scene.arena.triggerWeatherBasedFormChangesToNormal(); // Swaps Forecast/Flower Gift to Castform/Cherrim (edge case) @@ -6175,7 +6175,7 @@ export class SuppressAbilitiesAttr extends MoveEffectAttr { target.summonData.abilitySuppressed = true; target.scene.arena.triggerWeatherBasedFormChangesToNormal(); - target.scene.queueMessage(i18next.t("moveTriggers:suppressAbilities", {pokemonName: getPokemonNameWithAffix(target)})); + target.scene.queueMessage(i18next.t("moveTriggers:suppressAbilities", { pokemonName: getPokemonNameWithAffix(target) })); return true; } @@ -6241,7 +6241,7 @@ export class TransformAttr extends MoveEffectAttr { user.summonData.moveset = target.getMoveset().map(m => new PokemonMove(m?.moveId!, m?.ppUsed, m?.ppUp)); // TODO: is this bang correct? user.summonData.types = target.getTypes(); - user.scene.queueMessage(i18next.t("moveTriggers:transformedIntoTarget", {pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target)})); + user.scene.queueMessage(i18next.t("moveTriggers:transformedIntoTarget", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target) })); user.loadAssets(false).then(() => { user.playAnim(); @@ -6441,7 +6441,7 @@ export class DestinyBondAttr extends MoveEffectAttr { * @returns true */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - user.scene.queueMessage(`${i18next.t("moveTriggers:tryingToTakeFoeDown", {pokemonName: getPokemonNameWithAffix(user)})}`); + user.scene.queueMessage(`${i18next.t("moveTriggers:tryingToTakeFoeDown", { pokemonName: getPokemonNameWithAffix(user) })}`); user.addTag(BattlerTagType.DESTINY_BOND, undefined, move.id, user.id); return true; } @@ -6531,7 +6531,7 @@ export class AttackedByItemAttr extends MoveAttr { } const itemName = heldItems[0]?.type?.name ?? "item"; - target.scene.queueMessage(i18next.t("moveTriggers:attackedByItem", {pokemonName: getPokemonNameWithAffix(target), itemName: itemName})); + target.scene.queueMessage(i18next.t("moveTriggers:attackedByItem", { pokemonName: getPokemonNameWithAffix(target), itemName: itemName })); return true; }; @@ -6570,12 +6570,12 @@ export class AfterYouAttr extends MoveEffectAttr { * @returns true */ override apply(user: Pokemon, target: Pokemon, _move: Move, _args: any[]): boolean { - user.scene.queueMessage(i18next.t("moveTriggers:afterYou", {targetName: getPokemonNameWithAffix(target)})); + user.scene.queueMessage(i18next.t("moveTriggers:afterYou", { targetName: getPokemonNameWithAffix(target) })); //Will find next acting phase of the targeted pokémon, delete it and queue it next on successful delete. const nextAttackPhase = target.scene.findPhase((phase) => phase.pokemon === target); if (nextAttackPhase && target.scene.tryRemovePhase((phase: MovePhase) => phase.pokemon === target)) { - target.scene.prependToPhase(new MovePhase(target.scene, target, [...nextAttackPhase.targets], nextAttackPhase.move), MovePhase); + target.scene.prependToPhase(new MovePhase(target.scene, target, [ ...nextAttackPhase.targets ], nextAttackPhase.move), MovePhase); } return true; @@ -6593,7 +6593,7 @@ const failIfDampCondition: MoveConditionFunc = (user, target, move) => { user.scene.getField(true).map(p=>applyAbAttrs(FieldPreventExplosiveMovesAbAttr, p, cancelled)); // Queue a message if an ability prevented usage of the move if (cancelled.value) { - user.scene.queueMessage(i18next.t("moveTriggers:cannotUseMove", {pokemonName: getPokemonNameWithAffix(user), moveName: move.name})); + user.scene.queueMessage(i18next.t("moveTriggers:cannotUseMove", { pokemonName: getPokemonNameWithAffix(user), moveName: move.name })); } return !cancelled.value; }; @@ -6691,7 +6691,7 @@ export class ResistLastMoveTypeAttr extends MoveEffectAttr { return false; } - const [targetMove] = target.getLastXMoves(1); // target's most recent move + const [ targetMove ] = target.getLastXMoves(1); // target's most recent move if (!targetMove) { return false; } @@ -6707,7 +6707,7 @@ export class ResistLastMoveTypeAttr extends MoveEffectAttr { } const type = validTypes[user.randSeedInt(validTypes.length)]; user.summonData.types = [ type ]; - user.scene.queueMessage(i18next.t("battle:transformedIntoType", {pokemonName: getPokemonNameWithAffix(user), type: Utils.toReadableString(Type[type])})); + user.scene.queueMessage(i18next.t("battle:transformedIntoType", { pokemonName: getPokemonNameWithAffix(user), type: Utils.toReadableString(Type[type]) })); user.updateInfo(); return true; @@ -6766,7 +6766,7 @@ export class ExposedMoveAttr extends AddBattlerTagAttr { return false; } - user.scene.queueMessage(i18next.t("moveTriggers:exposedMove", { pokemonName: getPokemonNameWithAffix(user), targetPokemonName: getPokemonNameWithAffix(target)})); + user.scene.queueMessage(i18next.t("moveTriggers:exposedMove", { pokemonName: getPokemonNameWithAffix(user), targetPokemonName: getPokemonNameWithAffix(target) })); return true; } @@ -6873,7 +6873,7 @@ export function initMoves() { .attr(OneHitKOAttr) .attr(OneHitKOAccuracyAttr), new AttackMove(Moves.RAZOR_WIND, Type.NORMAL, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 1) - .attr(ChargeAttr, ChargeAnim.RAZOR_WIND_CHARGING, i18next.t("moveTriggers:whippedUpAWhirlwind", {pokemonName: "{USER}"})) + .attr(ChargeAttr, ChargeAnim.RAZOR_WIND_CHARGING, i18next.t("moveTriggers:whippedUpAWhirlwind", { pokemonName: "{USER}" })) .attr(HighCritAttr) .windMove() .ignoresVirtual() @@ -6893,7 +6893,7 @@ export function initMoves() { .hidesTarget() .windMove(), new AttackMove(Moves.FLY, Type.FLYING, MoveCategory.PHYSICAL, 90, 95, 15, -1, 0, 1) - .attr(ChargeAttr, ChargeAnim.FLY_CHARGING, i18next.t("moveTriggers:flewUpHigh", {pokemonName: "{USER}"}), BattlerTagType.FLYING) + .attr(ChargeAttr, ChargeAnim.FLY_CHARGING, i18next.t("moveTriggers:flewUpHigh", { pokemonName: "{USER}" }), BattlerTagType.FLYING) .condition(failOnGravityCondition) .ignoresVirtual(), new AttackMove(Moves.BIND, Type.NORMAL, MoveCategory.PHYSICAL, 15, 85, 20, -1, 0, 1) @@ -7042,7 +7042,7 @@ export function initMoves() { .slicingMove() .target(MoveTarget.ALL_NEAR_ENEMIES), new AttackMove(Moves.SOLAR_BEAM, Type.GRASS, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 1) - .attr(SunlightChargeAttr, ChargeAnim.SOLAR_BEAM_CHARGING, i18next.t("moveTriggers:tookInSunlight", {pokemonName: "{USER}"})) + .attr(SunlightChargeAttr, ChargeAnim.SOLAR_BEAM_CHARGING, i18next.t("moveTriggers:tookInSunlight", { pokemonName: "{USER}" })) .attr(AntiSunlightPowerDecreaseAttr) .ignoresVirtual(), new StatusMove(Moves.POISON_POWDER, Type.POISON, 75, 35, -1, 0, 1) @@ -7092,7 +7092,7 @@ export function initMoves() { .attr(HitsTagAttr, BattlerTagType.UNDERGROUND) .makesContact(false), new AttackMove(Moves.DIG, Type.GROUND, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 1) - .attr(ChargeAttr, ChargeAnim.DIG_CHARGING, i18next.t("moveTriggers:dugAHole", {pokemonName: "{USER}"}), BattlerTagType.UNDERGROUND) + .attr(ChargeAttr, ChargeAnim.DIG_CHARGING, i18next.t("moveTriggers:dugAHole", { pokemonName: "{USER}" }), BattlerTagType.UNDERGROUND) .ignoresVirtual(), new StatusMove(Moves.TOXIC, Type.POISON, 90, 10, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.TOXIC) @@ -7189,7 +7189,7 @@ export function initMoves() { new AttackMove(Moves.SWIFT, Type.NORMAL, MoveCategory.SPECIAL, 60, -1, 20, -1, 0, 1) .target(MoveTarget.ALL_NEAR_ENEMIES), new AttackMove(Moves.SKULL_BASH, Type.NORMAL, MoveCategory.PHYSICAL, 130, 100, 10, -1, 0, 1) - .attr(ChargeAttr, ChargeAnim.SKULL_BASH_CHARGING, i18next.t("moveTriggers:loweredItsHead", {pokemonName: "{USER}"}), null, true) + .attr(ChargeAttr, ChargeAnim.SKULL_BASH_CHARGING, i18next.t("moveTriggers:loweredItsHead", { pokemonName: "{USER}" }), null, true) .attr(StatStageChangeAttr, [ Stat.DEF ], 1, true) .ignoresVirtual(), new AttackMove(Moves.SPIKE_CANNON, Type.NORMAL, MoveCategory.PHYSICAL, 20, 100, 15, -1, 0, 1) @@ -7228,7 +7228,7 @@ export function initMoves() { new StatusMove(Moves.LOVELY_KISS, Type.NORMAL, 75, 10, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.SLEEP), new AttackMove(Moves.SKY_ATTACK, Type.FLYING, MoveCategory.PHYSICAL, 140, 90, 5, 30, 0, 1) - .attr(ChargeAttr, ChargeAnim.SKY_ATTACK_CHARGING, i18next.t("moveTriggers:isGlowing", {pokemonName: "{USER}"})) + .attr(ChargeAttr, ChargeAnim.SKY_ATTACK_CHARGING, i18next.t("moveTriggers:isGlowing", { pokemonName: "{USER}" })) .attr(HighCritAttr) .attr(FlinchAttr) .makesContact(false) @@ -7282,7 +7282,7 @@ export function initMoves() { new SelfStatusMove(Moves.CONVERSION, Type.NORMAL, -1, 30, -1, 0, 1) .attr(FirstMoveTypeAttr), new AttackMove(Moves.TRI_ATTACK, Type.NORMAL, MoveCategory.SPECIAL, 80, 100, 10, 20, 0, 1) - .attr(MultiStatusEffectAttr, [StatusEffect.BURN, StatusEffect.FREEZE, StatusEffect.PARALYSIS]), + .attr(MultiStatusEffectAttr, [ StatusEffect.BURN, StatusEffect.FREEZE, StatusEffect.PARALYSIS ]), new AttackMove(Moves.SUPER_FANG, Type.NORMAL, MoveCategory.PHYSICAL, -1, 90, 10, -1, 0, 1) .attr(TargetHalfHpDamageAttr), new AttackMove(Moves.SLASH, Type.NORMAL, MoveCategory.PHYSICAL, 70, 100, 20, -1, 0, 1) @@ -7561,7 +7561,7 @@ export function initMoves() { .ballBombMove(), new AttackMove(Moves.FUTURE_SIGHT, Type.PSYCHIC, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 2) .partial() - .attr(DelayedAttackAttr, ArenaTagType.FUTURE_SIGHT, ChargeAnim.FUTURE_SIGHT_CHARGING, i18next.t("moveTriggers:foresawAnAttack", {pokemonName: "{USER}"})), + .attr(DelayedAttackAttr, ArenaTagType.FUTURE_SIGHT, ChargeAnim.FUTURE_SIGHT_CHARGING, i18next.t("moveTriggers:foresawAnAttack", { pokemonName: "{USER}" })), new AttackMove(Moves.ROCK_SMASH, Type.FIGHTING, MoveCategory.PHYSICAL, 40, 100, 15, 50, 0, 2) .attr(StatStageChangeAttr, [ Stat.DEF ], -1), new AttackMove(Moves.WHIRLPOOL, Type.WATER, MoveCategory.SPECIAL, 35, 85, 15, -1, 0, 2) @@ -7585,11 +7585,11 @@ export function initMoves() { new AttackMove(Moves.SPIT_UP, Type.NORMAL, MoveCategory.SPECIAL, -1, -1, 10, -1, 0, 3) .condition(hasStockpileStacksCondition) .attr(SpitUpPowerAttr, 100) - .attr(RemoveBattlerTagAttr, [BattlerTagType.STOCKPILING], true), + .attr(RemoveBattlerTagAttr, [ BattlerTagType.STOCKPILING ], true), new SelfStatusMove(Moves.SWALLOW, Type.NORMAL, -1, 10, -1, 0, 3) .condition(hasStockpileStacksCondition) .attr(SwallowHealAttr) - .attr(RemoveBattlerTagAttr, [BattlerTagType.STOCKPILING], true) + .attr(RemoveBattlerTagAttr, [ BattlerTagType.STOCKPILING ], true) .triageMove(), new AttackMove(Moves.HEAT_WAVE, Type.FIRE, MoveCategory.SPECIAL, 95, 90, 10, 10, 0, 3) .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) @@ -7616,7 +7616,7 @@ export function initMoves() { && (user.status.effect === StatusEffect.BURN || user.status.effect === StatusEffect.POISON || user.status.effect === StatusEffect.TOXIC || user.status.effect === StatusEffect.PARALYSIS) ? 2 : 1) .attr(BypassBurnDamageReductionAttr), new AttackMove(Moves.FOCUS_PUNCH, Type.FIGHTING, MoveCategory.PHYSICAL, 150, 100, 20, -1, -3, 3) - .attr(MessageHeaderAttr, (user, move) => i18next.t("moveTriggers:isTighteningFocus", {pokemonName: getPokemonNameWithAffix(user)})) + .attr(MessageHeaderAttr, (user, move) => i18next.t("moveTriggers:isTighteningFocus", { pokemonName: getPokemonNameWithAffix(user) })) .punchingMove() .ignoresVirtual() .condition((user, target, move) => !user.turnData.attacksReceived.find(r => r.damage)), @@ -7690,7 +7690,7 @@ export function initMoves() { .makesContact(false) .partial(), new AttackMove(Moves.DIVE, Type.WATER, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 3) - .attr(ChargeAttr, ChargeAnim.DIVE_CHARGING, i18next.t("moveTriggers:hidUnderwater", {pokemonName: "{USER}"}), BattlerTagType.UNDERWATER, true) + .attr(ChargeAttr, ChargeAnim.DIVE_CHARGING, i18next.t("moveTriggers:hidUnderwater", { pokemonName: "{USER}" }), BattlerTagType.UNDERWATER, true) .attr(GulpMissileTagAttr) .ignoresVirtual(), new AttackMove(Moves.ARM_THRUST, Type.FIGHTING, MoveCategory.PHYSICAL, 15, 100, 20, -1, 0, 3) @@ -7746,7 +7746,7 @@ export function initMoves() { .attr(FlinchAttr), new AttackMove(Moves.WEATHER_BALL, Type.NORMAL, MoveCategory.SPECIAL, 50, 100, 10, -1, 0, 3) .attr(WeatherBallTypeAttr) - .attr(MovePowerMultiplierAttr, (user, target, move) => [WeatherType.SUNNY, WeatherType.RAIN, WeatherType.SANDSTORM, WeatherType.HAIL, WeatherType.SNOW, WeatherType.FOG, WeatherType.HEAVY_RAIN, WeatherType.HARSH_SUN].includes(user.scene.arena.weather?.weatherType!) && !user.scene.arena.weather?.isEffectSuppressed(user.scene) ? 2 : 1) // TODO: is this bang correct? + .attr(MovePowerMultiplierAttr, (user, target, move) => [ WeatherType.SUNNY, WeatherType.RAIN, WeatherType.SANDSTORM, WeatherType.HAIL, WeatherType.SNOW, WeatherType.FOG, WeatherType.HEAVY_RAIN, WeatherType.HARSH_SUN ].includes(user.scene.arena.weather?.weatherType!) && !user.scene.arena.weather?.isEffectSuppressed(user.scene) ? 2 : 1) // TODO: is this bang correct? .ballBombMove(), new StatusMove(Moves.AROMATHERAPY, Type.GRASS, -1, 5, -1, 0, 3) .attr(PartyStatusCureAttr, i18next.t("moveTriggers:soothingAromaWaftedThroughArea"), Abilities.SAP_SIPPER) @@ -7825,7 +7825,7 @@ export function initMoves() { new SelfStatusMove(Moves.BULK_UP, Type.FIGHTING, -1, 20, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF ], 1, true), new AttackMove(Moves.BOUNCE, Type.FLYING, MoveCategory.PHYSICAL, 85, 85, 5, 30, 0, 3) - .attr(ChargeAttr, ChargeAnim.BOUNCE_CHARGING, i18next.t("moveTriggers:sprangUp", {pokemonName: "{USER}"}), BattlerTagType.FLYING) + .attr(ChargeAttr, ChargeAnim.BOUNCE_CHARGING, i18next.t("moveTriggers:sprangUp", { pokemonName: "{USER}" }), BattlerTagType.FLYING) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .condition(failOnGravityCondition) .ignoresVirtual(), @@ -7863,7 +7863,7 @@ export function initMoves() { .pulseMove(), new AttackMove(Moves.DOOM_DESIRE, Type.STEEL, MoveCategory.SPECIAL, 140, 100, 5, -1, 0, 3) .partial() - .attr(DelayedAttackAttr, ArenaTagType.DOOM_DESIRE, ChargeAnim.DOOM_DESIRE_CHARGING, i18next.t("moveTriggers:choseDoomDesireAsDestiny", {pokemonName: "{USER}"})), + .attr(DelayedAttackAttr, ArenaTagType.DOOM_DESIRE, ChargeAnim.DOOM_DESIRE_CHARGING, i18next.t("moveTriggers:choseDoomDesireAsDestiny", { pokemonName: "{USER}" })), new AttackMove(Moves.PSYCHO_BOOST, Type.PSYCHIC, MoveCategory.SPECIAL, 140, 90, 5, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPATK ], -2, true), new SelfStatusMove(Moves.ROOST, Type.FLYING, -1, 5, -1, 0, 4) @@ -7985,7 +7985,7 @@ export function initMoves() { .attr(AddBattlerTagAttr, BattlerTagType.AQUA_RING, true, true), new SelfStatusMove(Moves.MAGNET_RISE, Type.ELECTRIC, -1, 10, -1, 0, 4) .attr(AddBattlerTagAttr, BattlerTagType.MAGNET_RISEN, true, true) - .condition((user, target, move) => !user.scene.arena.getTag(ArenaTagType.GRAVITY) && [BattlerTagType.MAGNET_RISEN, BattlerTagType.IGNORE_FLYING, BattlerTagType.INGRAIN].every((tag) => !user.getTag(tag))), + .condition((user, target, move) => !user.scene.arena.getTag(ArenaTagType.GRAVITY) && [ BattlerTagType.MAGNET_RISEN, BattlerTagType.IGNORE_FLYING, BattlerTagType.INGRAIN ].every((tag) => !user.getTag(tag))), new AttackMove(Moves.FLARE_BLITZ, Type.FIRE, MoveCategory.PHYSICAL, 120, 100, 15, 10, 0, 4) .attr(RecoilAttr, false, 0.33) .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) @@ -8181,7 +8181,7 @@ export function initMoves() { .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ], 1, true) .windMove(), new AttackMove(Moves.SHADOW_FORCE, Type.GHOST, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 4) - .attr(ChargeAttr, ChargeAnim.SHADOW_FORCE_CHARGING, i18next.t("moveTriggers:vanishedInstantly", {pokemonName: "{USER}"}), BattlerTagType.HIDDEN) + .attr(ChargeAttr, ChargeAnim.SHADOW_FORCE_CHARGING, i18next.t("moveTriggers:vanishedInstantly", { pokemonName: "{USER}" }), BattlerTagType.HIDDEN) .ignoresProtect() .ignoresVirtual(), new SelfStatusMove(Moves.HONE_CLAWS, Type.DARK, -1, 15, -1, 0, 5) @@ -8218,7 +8218,7 @@ export function initMoves() { new AttackMove(Moves.SMACK_DOWN, Type.ROCK, MoveCategory.PHYSICAL, 50, 100, 15, 100, 0, 5) .attr(AddBattlerTagAttr, BattlerTagType.IGNORE_FLYING, false, false, 1, 1, true) .attr(AddBattlerTagAttr, BattlerTagType.INTERRUPTED) - .attr(RemoveBattlerTagAttr, [BattlerTagType.FLYING, BattlerTagType.MAGNET_RISEN]) + .attr(RemoveBattlerTagAttr, [ BattlerTagType.FLYING, BattlerTagType.MAGNET_RISEN ]) .attr(HitsTagAttr, BattlerTagType.FLYING) .makesContact(false), new AttackMove(Moves.STORM_THROW, Type.FIGHTING, MoveCategory.PHYSICAL, 60, 100, 10, -1, 0, 5) @@ -8299,10 +8299,10 @@ export function initMoves() { new AttackMove(Moves.HEX, Type.GHOST, MoveCategory.SPECIAL, 65, 100, 10, -1, 0, 5) .attr( MovePowerMultiplierAttr, - (user, target, move) => target.status || target.hasAbility(Abilities.COMATOSE)? 2 : 1), + (user, target, move) => target.status || target.hasAbility(Abilities.COMATOSE) ? 2 : 1), new AttackMove(Moves.SKY_DROP, Type.FLYING, MoveCategory.PHYSICAL, 60, 100, 10, -1, 0, 5) .partial() // Should immobilize the target, Flying types should take no damage. cf https://bulbapedia.bulbagarden.net/wiki/Sky_Drop_(move) and https://www.smogon.com/dex/sv/moves/sky-drop/ - .attr(ChargeAttr, ChargeAnim.SKY_DROP_CHARGING, i18next.t("moveTriggers:tookTargetIntoSky", {pokemonName: "{USER}", targetName: "{TARGET}"}), BattlerTagType.FLYING) // TODO: Add 2nd turn message + .attr(ChargeAttr, ChargeAnim.SKY_DROP_CHARGING, i18next.t("moveTriggers:tookTargetIntoSky", { pokemonName: "{USER}", targetName: "{TARGET}" }), BattlerTagType.FLYING) // TODO: Add 2nd turn message .condition(failOnGravityCondition) .condition((user, target, move) => !target.getTag(BattlerTagType.SUBSTITUTE)) .ignoresVirtual(), @@ -8436,11 +8436,11 @@ export function initMoves() { .attr(StatStageChangeAttr, [ Stat.SPATK ], 1, true) .danceMove(), new AttackMove(Moves.FREEZE_SHOCK, Type.ICE, MoveCategory.PHYSICAL, 140, 90, 5, 30, 0, 5) - .attr(ChargeAttr, ChargeAnim.FREEZE_SHOCK_CHARGING, i18next.t("moveTriggers:becameCloakedInFreezingLight", {pokemonName: "{USER}"})) + .attr(ChargeAttr, ChargeAnim.FREEZE_SHOCK_CHARGING, i18next.t("moveTriggers:becameCloakedInFreezingLight", { pokemonName: "{USER}" })) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .makesContact(false), new AttackMove(Moves.ICE_BURN, Type.ICE, MoveCategory.SPECIAL, 140, 90, 5, 30, 0, 5) - .attr(ChargeAttr, ChargeAnim.ICE_BURN_CHARGING, i18next.t("moveTriggers:becameCloakedInFreezingAir", {pokemonName: "{USER}"})) + .attr(ChargeAttr, ChargeAnim.ICE_BURN_CHARGING, i18next.t("moveTriggers:becameCloakedInFreezingAir", { pokemonName: "{USER}" })) .attr(StatusEffectAttr, StatusEffect.BURN) .ignoresVirtual(), new AttackMove(Moves.SNARL, Type.DARK, MoveCategory.SPECIAL, 55, 95, 15, 100, 0, 5) @@ -8474,7 +8474,7 @@ export function initMoves() { .target(MoveTarget.ALL) .condition((user, target, move) => { // If any fielded pokémon is grass-type and grounded. - return [...user.scene.getEnemyParty(), ...user.scene.getParty()].some((poke) => poke.isOfType(Type.GRASS) && poke.isGrounded()); + return [ ...user.scene.getEnemyParty(), ...user.scene.getParty() ].some((poke) => poke.isOfType(Type.GRASS) && poke.isGrounded()); }) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], 1, false, (user, target, move) => target.isOfType(Type.GRASS) && target.isGrounded()), new StatusMove(Moves.STICKY_WEB, Type.BUG, -1, 20, -1, 0, 6) @@ -8483,7 +8483,7 @@ export function initMoves() { new AttackMove(Moves.FELL_STINGER, Type.BUG, MoveCategory.PHYSICAL, 50, 100, 25, -1, 0, 6) .attr(PostVictoryStatStageChangeAttr, [ Stat.ATK ], 3, true ), new AttackMove(Moves.PHANTOM_FORCE, Type.GHOST, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6) - .attr(ChargeAttr, ChargeAnim.PHANTOM_FORCE_CHARGING, i18next.t("moveTriggers:vanishedInstantly", {pokemonName: "{USER}"}), BattlerTagType.HIDDEN) + .attr(ChargeAttr, ChargeAnim.PHANTOM_FORCE_CHARGING, i18next.t("moveTriggers:vanishedInstantly", { pokemonName: "{USER}" }), BattlerTagType.HIDDEN) .ignoresProtect() .ignoresVirtual(), new StatusMove(Moves.TRICK_OR_TREAT, Type.GHOST, 100, 20, -1, 0, 6) @@ -8594,14 +8594,14 @@ export function initMoves() { .powderMove() .unimplemented(), new SelfStatusMove(Moves.GEOMANCY, Type.FAIRY, -1, 10, -1, 0, 6) - .attr(ChargeAttr, ChargeAnim.GEOMANCY_CHARGING, i18next.t("moveTriggers:isChargingPower", {pokemonName: "{USER}"})) + .attr(ChargeAttr, ChargeAnim.GEOMANCY_CHARGING, i18next.t("moveTriggers:isChargingPower", { pokemonName: "{USER}" })) .attr(StatStageChangeAttr, [ Stat.SPATK, Stat.SPDEF, Stat.SPD ], 2, true) .ignoresVirtual(), new StatusMove(Moves.MAGNETIC_FLUX, Type.ELECTRIC, -1, 20, -1, 0, 6) - .attr(StatStageChangeAttr, [ Stat.DEF, Stat.SPDEF ], 1, false, (user, target, move) => !![ Abilities.PLUS, Abilities.MINUS].find(a => target.hasAbility(a, false))) + .attr(StatStageChangeAttr, [ Stat.DEF, Stat.SPDEF ], 1, false, (user, target, move) => !![ Abilities.PLUS, Abilities.MINUS ].find(a => target.hasAbility(a, false))) .ignoresSubstitute() .target(MoveTarget.USER_AND_ALLIES) - .condition((user, target, move) => !![ user, user.getAlly() ].filter(p => p?.isActive()).find(p => !![ Abilities.PLUS, Abilities.MINUS].find(a => p.hasAbility(a, false)))), + .condition((user, target, move) => !![ user, user.getAlly() ].filter(p => p?.isActive()).find(p => !![ Abilities.PLUS, Abilities.MINUS ].find(a => p.hasAbility(a, false)))), new StatusMove(Moves.HAPPY_HOUR, Type.NORMAL, -1, 30, -1, 0, 6) // No animation .attr(AddArenaTagAttr, ArenaTagType.HAPPY_HOUR, null, true) .target(MoveTarget.USER_SIDE), @@ -8635,7 +8635,7 @@ export function initMoves() { .attr(HitsTagAttr, BattlerTagType.FLYING) .attr(HitsTagAttr, BattlerTagType.MAGNET_RISEN) .attr(AddBattlerTagAttr, BattlerTagType.INTERRUPTED) - .attr(RemoveBattlerTagAttr, [BattlerTagType.FLYING, BattlerTagType.MAGNET_RISEN]) + .attr(RemoveBattlerTagAttr, [ BattlerTagType.FLYING, BattlerTagType.MAGNET_RISEN ]) .makesContact(false) .target(MoveTarget.ALL_NEAR_ENEMIES), new AttackMove(Moves.THOUSAND_WAVES, Type.GROUND, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6) @@ -8795,7 +8795,7 @@ export function initMoves() { .attr(StatStageChangeAttr, [ Stat.SPD ], -1, true) .punchingMove(), new StatusMove(Moves.FLORAL_HEALING, Type.FAIRY, -1, 10, -1, 0, 7) - .attr(BoostHealAttr, 0.5, 2/3, true, false, (user, target, move) => user.scene.arena.terrain?.terrainType === TerrainType.GRASSY) + .attr(BoostHealAttr, 0.5, 2 / 3, true, false, (user, target, move) => user.scene.arena.terrain?.terrainType === TerrainType.GRASSY) .triageMove(), new AttackMove(Moves.HIGH_HORSEPOWER, Type.GROUND, MoveCategory.PHYSICAL, 95, 95, 10, -1, 0, 7), new StatusMove(Moves.STRENGTH_SAP, Type.GRASS, 100, 10, -1, 0, 7) @@ -8804,7 +8804,7 @@ export function initMoves() { .condition((user, target, move) => target.getStatStage(Stat.ATK) > -6) .triageMove(), new AttackMove(Moves.SOLAR_BLADE, Type.GRASS, MoveCategory.PHYSICAL, 125, 100, 10, -1, 0, 7) - .attr(SunlightChargeAttr, ChargeAnim.SOLAR_BLADE_CHARGING, i18next.t("moveTriggers:isGlowing", {pokemonName: "{USER}"})) + .attr(SunlightChargeAttr, ChargeAnim.SOLAR_BLADE_CHARGING, i18next.t("moveTriggers:isGlowing", { pokemonName: "{USER}" })) .attr(AntiSunlightPowerDecreaseAttr) .slicingMove(), new AttackMove(Moves.LEAFAGE, Type.GRASS, MoveCategory.PHYSICAL, 40, 100, 40, -1, 0, 7) @@ -8817,10 +8817,10 @@ export function initMoves() { new SelfStatusMove(Moves.LASER_FOCUS, Type.NORMAL, -1, 30, -1, 0, 7) .attr(AddBattlerTagAttr, BattlerTagType.ALWAYS_CRIT, true, false), new StatusMove(Moves.GEAR_UP, Type.STEEL, -1, 20, -1, 0, 7) - .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], 1, false, (user, target, move) => !![ Abilities.PLUS, Abilities.MINUS].find(a => target.hasAbility(a, false))) + .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], 1, false, (user, target, move) => !![ Abilities.PLUS, Abilities.MINUS ].find(a => target.hasAbility(a, false))) .ignoresSubstitute() .target(MoveTarget.USER_AND_ALLIES) - .condition((user, target, move) => !![ user, user.getAlly() ].filter(p => p?.isActive()).find(p => !![ Abilities.PLUS, Abilities.MINUS].find(a => p.hasAbility(a, false)))), + .condition((user, target, move) => !![ user, user.getAlly() ].filter(p => p?.isActive()).find(p => !![ Abilities.PLUS, Abilities.MINUS ].find(a => p.hasAbility(a, false)))), new AttackMove(Moves.THROAT_CHOP, Type.DARK, MoveCategory.PHYSICAL, 80, 100, 15, 100, 0, 7) .attr(AddBattlerTagAttr, BattlerTagType.THROAT_CHOPPED), new AttackMove(Moves.POLLEN_PUFF, Type.BUG, MoveCategory.SPECIAL, 90, 100, 15, -1, 0, 7) @@ -8846,7 +8846,7 @@ export function initMoves() { .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) .attr(AddBattlerTagAttr, BattlerTagType.BURNED_UP, true, false) .attr(RemoveTypeAttr, Type.FIRE, (user) => { - user.scene.queueMessage(i18next.t("moveTriggers:burnedItselfOut", {pokemonName: getPokemonNameWithAffix(user)})); + user.scene.queueMessage(i18next.t("moveTriggers:burnedItselfOut", { pokemonName: getPokemonNameWithAffix(user) })); }), new StatusMove(Moves.SPEED_SWAP, Type.PSYCHIC, -1, 10, -1, 0, 7) .attr(SwapStatAttr, Stat.SPD) @@ -9087,7 +9087,7 @@ export function initMoves() { .attr(FirstAttackDoublePowerAttr) .bitingMove(), new StatusMove(Moves.COURT_CHANGE, Type.NORMAL, 100, 10, -1, 0, 8) - .attr(SwapArenaTagsAttr, [ArenaTagType.AURORA_VEIL, ArenaTagType.LIGHT_SCREEN, ArenaTagType.MIST, ArenaTagType.REFLECT, ArenaTagType.SPIKES, ArenaTagType.STEALTH_ROCK, ArenaTagType.STICKY_WEB, ArenaTagType.TAILWIND, ArenaTagType.TOXIC_SPIKES]), + .attr(SwapArenaTagsAttr, [ ArenaTagType.AURORA_VEIL, ArenaTagType.LIGHT_SCREEN, ArenaTagType.MIST, ArenaTagType.REFLECT, ArenaTagType.SPIKES, ArenaTagType.STEALTH_ROCK, ArenaTagType.STICKY_WEB, ArenaTagType.TAILWIND, ArenaTagType.TOXIC_SPIKES ]), new AttackMove(Moves.MAX_FLARE, Type.FIRE, MoveCategory.PHYSICAL, 10, -1, 10, -1, 0, 8) .target(MoveTarget.NEAR_ENEMY) .unimplemented() @@ -9226,12 +9226,12 @@ export function initMoves() { .attr(ClearTerrainAttr) .condition((user, target, move) => !!user.scene.arena.terrain), new AttackMove(Moves.SCALE_SHOT, Type.DRAGON, MoveCategory.PHYSICAL, 25, 90, 20, -1, 0, 8) - .attr(StatStageChangeAttr, [Stat.SPD], 1, true, null, true, false, MoveEffectTrigger.HIT, false, true) - .attr(StatStageChangeAttr, [Stat.DEF], -1, true, null, true, false, MoveEffectTrigger.HIT, false, true) + .attr(StatStageChangeAttr, [ Stat.SPD ], 1, true, null, true, false, MoveEffectTrigger.HIT, false, true) + .attr(StatStageChangeAttr, [ Stat.DEF ], -1, true, null, true, false, MoveEffectTrigger.HIT, false, true) .attr(MultiHitAttr) .makesContact(false), new AttackMove(Moves.METEOR_BEAM, Type.ROCK, MoveCategory.SPECIAL, 120, 90, 10, 100, 0, 8) - .attr(ChargeAttr, ChargeAnim.METEOR_BEAM_CHARGING, i18next.t("moveTriggers:isOverflowingWithSpacePower", {pokemonName: "{USER}"}), null, true) + .attr(ChargeAttr, ChargeAnim.METEOR_BEAM_CHARGING, i18next.t("moveTriggers:isOverflowingWithSpacePower", { pokemonName: "{USER}" }), null, true) .attr(StatStageChangeAttr, [ Stat.SPATK ], 1, true) .ignoresVirtual(), new AttackMove(Moves.SHELL_SIDE_ARM, Type.POISON, MoveCategory.SPECIAL, 90, 100, 10, 20, 0, 8) @@ -9312,7 +9312,7 @@ export function initMoves() { .attr(AttackReducePpMoveAttr, 3) .soundBased(), new AttackMove(Moves.DIRE_CLAW, Type.POISON, MoveCategory.PHYSICAL, 80, 100, 15, 50, 0, 8) - .attr(MultiStatusEffectAttr, [StatusEffect.POISON, StatusEffect.PARALYSIS, StatusEffect.SLEEP]), + .attr(MultiStatusEffectAttr, [ StatusEffect.POISON, StatusEffect.PARALYSIS, StatusEffect.SLEEP ]), new AttackMove(Moves.PSYSHIELD_BASH, Type.PSYCHIC, MoveCategory.PHYSICAL, 70, 90, 10, 100, 0, 8) .attr(StatStageChangeAttr, [ Stat.DEF ], 1, true), new SelfStatusMove(Moves.POWER_SHIFT, Type.NORMAL, -1, 10, -1, 0, 8) @@ -9588,19 +9588,19 @@ export function initMoves() { .slicingMove(), new AttackMove(Moves.HYDRO_STEAM, Type.WATER, MoveCategory.SPECIAL, 80, 100, 15, -1, 0, 9) .attr(IgnoreWeatherTypeDebuffAttr, WeatherType.SUNNY) - .attr(MovePowerMultiplierAttr, (user, target, move) => [WeatherType.SUNNY, WeatherType.HARSH_SUN].includes(user.scene.arena.weather?.weatherType!) && !user.scene.arena.weather?.isEffectSuppressed(user.scene) ? 1.5 : 1), // TODO: is this bang correct? + .attr(MovePowerMultiplierAttr, (user, target, move) => [ WeatherType.SUNNY, WeatherType.HARSH_SUN ].includes(user.scene.arena.weather?.weatherType!) && !user.scene.arena.weather?.isEffectSuppressed(user.scene) ? 1.5 : 1), // TODO: is this bang correct? new AttackMove(Moves.RUINATION, Type.DARK, MoveCategory.SPECIAL, -1, 90, 10, -1, 0, 9) .attr(TargetHalfHpDamageAttr), new AttackMove(Moves.COLLISION_COURSE, Type.FIGHTING, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 9) - .attr(MovePowerMultiplierAttr, (user, target, move) => target.getAttackTypeEffectiveness(move.type, user) >= 2 ? 5461/4096 : 1), + .attr(MovePowerMultiplierAttr, (user, target, move) => target.getAttackTypeEffectiveness(move.type, user) >= 2 ? 5461 / 4096 : 1), new AttackMove(Moves.ELECTRO_DRIFT, Type.ELECTRIC, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 9) - .attr(MovePowerMultiplierAttr, (user, target, move) => target.getAttackTypeEffectiveness(move.type, user) >= 2 ? 5461/4096 : 1) + .attr(MovePowerMultiplierAttr, (user, target, move) => target.getAttackTypeEffectiveness(move.type, user) >= 2 ? 5461 / 4096 : 1) .makesContact(), new SelfStatusMove(Moves.SHED_TAIL, Type.NORMAL, -1, 10, -1, 0, 9) .attr(AddSubstituteAttr, 0.5) .attr(ForceSwitchOutAttr, true, SwitchType.SHED_TAIL), new SelfStatusMove(Moves.CHILLY_RECEPTION, Type.ICE, -1, 10, -1, 0, 9) - .attr(PreMoveMessageAttr, (user, move) => i18next.t("moveTriggers:chillyReception", {pokemonName: getPokemonNameWithAffix(user)})) + .attr(PreMoveMessageAttr, (user, move) => i18next.t("moveTriggers:chillyReception", { pokemonName: getPokemonNameWithAffix(user) })) .attr(ChillyReceptionAttr, true), new SelfStatusMove(Moves.TIDY_UP, Type.NORMAL, -1, 10, -1, 0, 9) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPD ], 1, true, null, true, true) @@ -9635,7 +9635,7 @@ export function initMoves() { }) .attr(AddBattlerTagAttr, BattlerTagType.DOUBLE_SHOCKED, true, false) .attr(RemoveTypeAttr, Type.ELECTRIC, (user) => { - user.scene.queueMessage(i18next.t("moveTriggers:usedUpAllElectricity", {pokemonName: getPokemonNameWithAffix(user)})); + user.scene.queueMessage(i18next.t("moveTriggers:usedUpAllElectricity", { pokemonName: getPokemonNameWithAffix(user) })); }), new AttackMove(Moves.GIGATON_HAMMER, Type.STEEL, MoveCategory.PHYSICAL, 160, 100, 5, -1, 0, 9) .makesContact(false) diff --git a/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts b/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts index 7c2d7052ff9..13e187179d4 100644 --- a/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts +++ b/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts @@ -152,7 +152,7 @@ export const ATrainersTestEncounter: MysteryEncounter = tier: EggTier.ULTRA }; encounter.setDialogueToken("eggType", i18next.t(`${namespace}:eggTypes.epic`)); - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [modifierTypes.SACRED_ASH], guaranteedModifierTiers: [ModifierTier.ROGUE, ModifierTier.ULTRA], fillRemaining: true }, [eggOptions]); + setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.SACRED_ASH ], guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ULTRA ], fillRemaining: true }, [ eggOptions ]); return initBattleWithEnemyConfig(scene, config); } ) @@ -174,7 +174,7 @@ export const ATrainersTestEncounter: MysteryEncounter = tier: EggTier.GREAT }; encounter.setDialogueToken("eggType", i18next.t(`${namespace}:eggTypes.rare`)); - setEncounterRewards(scene, { fillRemaining: false, rerollMultiplier: -1 }, [eggOptions]); + setEncounterRewards(scene, { fillRemaining: false, rerollMultiplier: -1 }, [ eggOptions ]); leaveEncounterWithoutBattle(scene); } ) diff --git a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts index 0b32f857d75..c98947a3f93 100644 --- a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts +++ b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts @@ -195,7 +195,7 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = // Can't define stack count on a ModifierType, have to just create separate instances for each stack // Overflow berries will be "lost" on the boss, but it's un-catchable anyway for (let i = 0; i < berryMod.stackCount; i++) { - const modifierType = generateModifierType(scene, modifierTypes.BERRY, [berryMod.berryType]) as PokemonHeldItemModifierType; + const modifierType = generateModifierType(scene, modifierTypes.BERRY, [ berryMod.berryType ]) as PokemonHeldItemModifierType; bossModifierConfigs.push({ modifier: modifierType }); } }); @@ -204,8 +204,8 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = // SpDef buff below wave 50, +1 to all stats otherwise const statChangesForBattle: (Stat.ATK | Stat.DEF | Stat.SPATK | Stat.SPDEF | Stat.SPD | Stat.ACC | Stat.EVA)[] = scene.currentBattle.waveIndex < 50 ? - [Stat.SPDEF] : - [Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD]; + [ Stat.SPDEF ] : + [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ]; // Calculate boss mon const config: EnemyPartyConfig = { @@ -215,9 +215,9 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = species: getPokemonSpecies(Species.GREEDENT), isBoss: true, bossSegments: 3, - moveSet: [Moves.THRASH, Moves.BODY_PRESS, Moves.STUFF_CHEEKS, Moves.CRUNCH], + moveSet: [ Moves.THRASH, Moves.BODY_PRESS, Moves.STUFF_CHEEKS, Moves.CRUNCH ], modifierConfigs: bossModifierConfigs, - tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON], + tags: [ BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON ], mysteryEncounterBattleEffects: (pokemon: Pokemon) => { queueEncounterMessage(pokemon.scene, `${namespace}:option.1.boss_enraged`); pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, statChangesForBattle, 1)); @@ -226,7 +226,7 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = ], }; - encounter.enemyPartyConfigs = [config]; + encounter.enemyPartyConfigs = [ config ]; encounter.setDialogueToken("greedentName", getPokemonSpecies(Species.GREEDENT).getName()); return true; @@ -280,7 +280,7 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = setEncounterRewards(scene, { fillRemaining: true }, undefined, givePartyPokemonReviverSeeds); encounter.startOfBattleEffects.push({ sourceBattlerIndex: BattlerIndex.ENEMY, - targets: [BattlerIndex.ENEMY], + targets: [ BattlerIndex.ENEMY ], move: new PokemonMove(Moves.STUFF_CHEEKS), ignorePp: true }); @@ -320,7 +320,7 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = Phaser.Math.RND.shuffle(berryTypesAsArray); const randBerryType = berryTypesAsArray.pop(); - const berryModType = generateModifierType(scene, modifierTypes.BERRY, [randBerryType]) as BerryModifierType; + const berryModType = generateModifierType(scene, modifierTypes.BERRY, [ randBerryType ]) as BerryModifierType; applyModifierTypeToPlayerPokemon(scene, pokemon, berryModType); } } @@ -355,7 +355,7 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = // Greedent joins the team, level equal to 2 below highest party member const level = getHighestLevelPlayerPokemon(scene, false, true).level - 2; const greedent = new EnemyPokemon(scene, getPokemonSpecies(Species.GREEDENT), level, TrainerSlot.NONE, false); - greedent.moveset = [new PokemonMove(Moves.THRASH), new PokemonMove(Moves.BODY_PRESS), new PokemonMove(Moves.STUFF_CHEEKS), new PokemonMove(Moves.SLACK_OFF)]; + greedent.moveset = [ new PokemonMove(Moves.THRASH), new PokemonMove(Moves.BODY_PRESS), new PokemonMove(Moves.STUFF_CHEEKS), new PokemonMove(Moves.SLACK_OFF) ]; greedent.passive = true; transitionMysteryEncounterIntroVisuals(scene, true, true, 500); @@ -472,7 +472,7 @@ function doGreedentEatBerries(scene: BattleScene) { */ function doBerrySpritePile(scene: BattleScene, isEat: boolean = false) { const berryAddDelay = 150; - let animationOrder = ["starf", "sitrus", "lansat", "salac", "apicot", "enigma", "liechi", "ganlon", "lum", "petaya", "leppa"]; + let animationOrder = [ "starf", "sitrus", "lansat", "salac", "apicot", "enigma", "liechi", "ganlon", "lum", "petaya", "leppa" ]; if (isEat) { animationOrder = animationOrder.reverse(); } @@ -496,7 +496,7 @@ function doBerrySpritePile(scene: BattleScene, isEat: boolean = false) { // Animate Petaya berry falling off the pile if (berry === "petaya" && sprite && tintSprite && !isEat) { scene.time.delayedCall(200, () => { - doBerryBounce(scene, [sprite, tintSprite], 30, 500); + doBerryBounce(scene, [ sprite, tintSprite ], 30, 500); }); } }); diff --git a/src/data/mystery-encounters/encounters/berries-abound-encounter.ts b/src/data/mystery-encounters/encounters/berries-abound-encounter.ts index 55c66642944..3e5d75727b1 100644 --- a/src/data/mystery-encounters/encounters/berries-abound-encounter.ts +++ b/src/data/mystery-encounters/encounters/berries-abound-encounter.ts @@ -69,7 +69,7 @@ export const BerriesAboundEncounter: MysteryEncounter = isBoss: true }], }; - encounter.enemyPartyConfigs = [config]; + encounter.enemyPartyConfigs = [ config ]; // Calculate the number of extra berries that player receives // 10-40: 2, 40-120: 4, 120-160: 5, 160-180: 7 @@ -193,11 +193,11 @@ export const BerriesAboundEncounter: MysteryEncounter = // Defense/Spd buffs below wave 50, +1 to all stats otherwise const statChangesForBattle: (Stat.ATK | Stat.DEF | Stat.SPATK | Stat.SPDEF | Stat.SPD | Stat.ACC | Stat.EVA)[] = scene.currentBattle.waveIndex < 50 ? - [Stat.DEF, Stat.SPDEF, Stat.SPD] : - [Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD]; + [ Stat.DEF, Stat.SPDEF, Stat.SPD ] : + [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ]; const config = scene.currentBattle.mysteryEncounter!.enemyPartyConfigs[0]; - config.pokemonConfigs![0].tags = [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON]; + config.pokemonConfigs![0].tags = [ BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON ]; config.pokemonConfigs![0].mysteryEncounterBattleEffects = (pokemon: Pokemon) => { queueEncounterMessage(pokemon.scene, `${namespace}:option.2.boss_enraged`); pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, statChangesForBattle, 1)); @@ -208,7 +208,7 @@ export const BerriesAboundEncounter: MysteryEncounter = return; } else { // Gains 1 berry for every 10% faster the player's pokemon is than the enemy, up to a max of numBerries, minimum of 2 - const numBerriesGrabbed = Math.max(Math.min(Math.round((speedDiff - 1)/0.08), numBerries), 2); + const numBerriesGrabbed = Math.max(Math.min(Math.round((speedDiff - 1) / 0.08), numBerries), 2); encounter.setDialogueToken("numBerries", String(numBerriesGrabbed)); const doFasterBerryRewards = () => { const berryText = i18next.t(`${namespace}:berries`); @@ -250,7 +250,7 @@ export const BerriesAboundEncounter: MysteryEncounter = function tryGiveBerry(scene: BattleScene, prioritizedPokemon?: PlayerPokemon) { const berryType = randSeedInt(Object.keys(BerryType).filter(s => !isNaN(Number(s))).length) as BerryType; - const berry = generateModifierType(scene, modifierTypes.BERRY, [berryType]) as BerryModifierType; + const berry = generateModifierType(scene, modifierTypes.BERRY, [ berryType ]) as BerryModifierType; const party = scene.getParty(); diff --git a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts index 6847ab8b832..20c0569c725 100644 --- a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts +++ b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts @@ -181,7 +181,7 @@ const MISC_TUTOR_MOVES = [ /** * Wave breakpoints that determine how strong to make the Bug-Type Superfan's team */ -const WAVE_LEVEL_BREAKPOINTS = [30, 50, 70, 100, 120, 140, 160]; +const WAVE_LEVEL_BREAKPOINTS = [ 30, 50, 70, 100, 120, 140, 160 ]; /** * Bug Type Superfan encounter. @@ -193,7 +193,7 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = .withEncounterTier(MysteryEncounterTier.GREAT) .withPrimaryPokemonRequirement(new CombinationPokemonRequirement( // Must have at least 1 Bug type on team, OR have a bug item somewhere on the team - new HeldItemRequirement(["BypassSpeedChanceModifier", "ContactHeldItemTransferChanceModifier"], 1), + new HeldItemRequirement([ "BypassSpeedChanceModifier", "ContactHeldItemTransferChanceModifier" ], 1), new AttackTypeBoosterHeldItemTypeRequirement(Type.BUG, 1), new TypeRequirement(Type.BUG, false, 1) )) @@ -268,7 +268,7 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = const requiredItems = [ generateModifierType(scene, modifierTypes.QUICK_CLAW), generateModifierType(scene, modifierTypes.GRIP_CLAW), - generateModifierType(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [Type.BUG]), + generateModifierType(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [ Type.BUG ]), ]; const requiredItemString = requiredItems.map(m => m?.name ?? "unknown").join("/"); @@ -331,7 +331,7 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = encounter.setDialogueToken("numBugTypes", numBugTypesText); if (numBugTypes < 2) { - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [modifierTypes.SUPER_LURE, modifierTypes.GREAT_BALL], fillRemaining: false }); + setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.SUPER_LURE, modifierTypes.GREAT_BALL ], fillRemaining: false }); encounter.selectedOption!.dialogue!.selected = [ { speaker: `${namespace}:speaker`, @@ -339,7 +339,7 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = }, ]; } else if (numBugTypes < 4) { - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [modifierTypes.QUICK_CLAW, modifierTypes.MAX_LURE, modifierTypes.ULTRA_BALL], fillRemaining: false }); + setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.QUICK_CLAW, modifierTypes.MAX_LURE, modifierTypes.ULTRA_BALL ], fillRemaining: false }); encounter.selectedOption!.dialogue!.selected = [ { speaker: `${namespace}:speaker`, @@ -347,7 +347,7 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = }, ]; } else if (numBugTypes < 6) { - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [modifierTypes.GRIP_CLAW, modifierTypes.MAX_LURE, modifierTypes.ROGUE_BALL], fillRemaining: false }); + setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.GRIP_CLAW, modifierTypes.MAX_LURE, modifierTypes.ROGUE_BALL ], fillRemaining: false }); encounter.selectedOption!.dialogue!.selected = [ { speaker: `${namespace}:speaker`, @@ -356,7 +356,7 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = ]; } else { // If player has any evolution/form change items that are valid for their party, will spawn one of those items in addition to a Master Ball - const modifierOptions: ModifierTypeOption[] = [generateModifierTypeOption(scene, modifierTypes.MASTER_BALL)!, generateModifierTypeOption(scene, modifierTypes.MAX_LURE)!]; + const modifierOptions: ModifierTypeOption[] = [ generateModifierTypeOption(scene, modifierTypes.MASTER_BALL)!, generateModifierTypeOption(scene, modifierTypes.MAX_LURE)! ]; const specialOptions: ModifierTypeOption[] = []; const nonRareEvolutionModifier = generateModifierTypeOption(scene, modifierTypes.EVOLUTION_ITEM); @@ -397,7 +397,7 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = .newOptionWithMode(MysteryEncounterOptionMode.DISABLED_OR_DEFAULT) .withPrimaryPokemonRequirement(new CombinationPokemonRequirement( // Meets one or both of the below reqs - new HeldItemRequirement(["BypassSpeedChanceModifier", "ContactHeldItemTransferChanceModifier"], 1), + new HeldItemRequirement([ "BypassSpeedChanceModifier", "ContactHeldItemTransferChanceModifier" ], 1), new AttackTypeBoosterHeldItemTypeRequirement(Type.BUG, 1) )) .withDialogue({ @@ -474,7 +474,7 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = const bugNet = generateModifierTypeOption(scene, modifierTypes.MYSTERY_ENCOUNTER_GOLDEN_BUG_NET)!; bugNet.type.tier = ModifierTier.ROGUE; - setEncounterRewards(scene, { guaranteedModifierTypeOptions: [bugNet], guaranteedModifierTypeFuncs: [modifierTypes.REVIVER_SEED], fillRemaining: false }); + setEncounterRewards(scene, { guaranteedModifierTypeOptions: [ bugNet ], guaranteedModifierTypeFuncs: [ modifierTypes.REVIVER_SEED ], fillRemaining: false }); leaveEncounterWithoutBattle(scene, true); }) .build()) @@ -535,7 +535,7 @@ function getTrainerConfigForWave(waveIndex: number) { })) .setPartyMemberFunc(2, getRandomPartyMemberFunc(POOL_2_POKEMON, TrainerSlot.TRAINER, true)) .setPartyMemberFunc(3, getRandomPartyMemberFunc(POOL_2_POKEMON, TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([pool3Mon.species], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ pool3Mon.species ], TrainerSlot.TRAINER, true, p => { if (!isNullOrUndefined(pool3Mon.formIndex)) { p.formIndex = pool3Mon.formIndex; p.generateAndPopulateMoveset(); @@ -558,14 +558,14 @@ function getTrainerConfigForWave(waveIndex: number) { p.generateName(); })) .setPartyMemberFunc(2, getRandomPartyMemberFunc(POOL_2_POKEMON, TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([pool3Mon.species], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ pool3Mon.species ], TrainerSlot.TRAINER, true, p => { if (!isNullOrUndefined(pool3Mon.formIndex)) { p.formIndex = pool3Mon.formIndex; p.generateAndPopulateMoveset(); p.generateName(); } })) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([pool3Mon2.species], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ pool3Mon2.species ], TrainerSlot.TRAINER, true, p => { if (!isNullOrUndefined(pool3Mon2.formIndex)) { p.formIndex = pool3Mon2.formIndex; p.generateAndPopulateMoveset(); @@ -586,7 +586,7 @@ function getTrainerConfigForWave(waveIndex: number) { p.generateName(); })) .setPartyMemberFunc(2, getRandomPartyMemberFunc(POOL_2_POKEMON, TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([pool3Mon.species], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ pool3Mon.species ], TrainerSlot.TRAINER, true, p => { if (!isNullOrUndefined(pool3Mon.formIndex)) { p.formIndex = pool3Mon.formIndex; p.generateAndPopulateMoveset(); @@ -611,14 +611,14 @@ function getTrainerConfigForWave(waveIndex: number) { p.generateAndPopulateMoveset(); p.generateName(); })) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([pool3Mon.species], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ pool3Mon.species ], TrainerSlot.TRAINER, true, p => { if (!isNullOrUndefined(pool3Mon.formIndex)) { p.formIndex = pool3Mon.formIndex; p.generateAndPopulateMoveset(); p.generateName(); } })) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([pool3Mon2.species], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ pool3Mon2.species ], TrainerSlot.TRAINER, true, p => { if (!isNullOrUndefined(pool3Mon2.formIndex)) { p.formIndex = pool3Mon2.formIndex; p.generateAndPopulateMoveset(); diff --git a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts index e2bf3bf79fe..6c028d4619a 100644 --- a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts +++ b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts @@ -129,20 +129,20 @@ export const ClowningAroundEncounter: MysteryEncounter = { species: getPokemonSpecies(Species.MR_MIME), isBoss: true, - moveSet: [Moves.TEETER_DANCE, Moves.ALLY_SWITCH, Moves.DAZZLING_GLEAM, Moves.PSYCHIC] + moveSet: [ Moves.TEETER_DANCE, Moves.ALLY_SWITCH, Moves.DAZZLING_GLEAM, Moves.PSYCHIC ] }, { // Blacephalon has the random ability from pool, and 2 entirely random types to fit with the theme of the encounter species: getPokemonSpecies(Species.BLACEPHALON), - mysteryEncounterPokemonData: new MysteryEncounterPokemonData({ ability: ability, types: [randSeedInt(18), randSeedInt(18)] }), + mysteryEncounterPokemonData: new MysteryEncounterPokemonData({ ability: ability, types: [ randSeedInt(18), randSeedInt(18) ]}), isBoss: true, - moveSet: [Moves.TRICK, Moves.HYPNOSIS, Moves.SHADOW_BALL, Moves.MIND_BLOWN] + moveSet: [ Moves.TRICK, Moves.HYPNOSIS, Moves.SHADOW_BALL, Moves.MIND_BLOWN ] }, ], doubleBattle: true }); // Load animations/sfx for start of fight moves - loadCustomMovesForEncounter(scene, [Moves.ROLE_PLAY, Moves.TAUNT]); + loadCustomMovesForEncounter(scene, [ Moves.ROLE_PLAY, Moves.TAUNT ]); encounter.setDialogueToken("blacephalonName", getPokemonSpecies(Species.BLACEPHALON).getName()); @@ -175,19 +175,19 @@ export const ClowningAroundEncounter: MysteryEncounter = encounter.startOfBattleEffects.push( { // Mr. Mime copies the Blacephalon's random ability sourceBattlerIndex: BattlerIndex.ENEMY, - targets: [BattlerIndex.ENEMY_2], + targets: [ BattlerIndex.ENEMY_2 ], move: new PokemonMove(Moves.ROLE_PLAY), ignorePp: true }, { sourceBattlerIndex: BattlerIndex.ENEMY_2, - targets: [BattlerIndex.PLAYER], + targets: [ BattlerIndex.PLAYER ], move: new PokemonMove(Moves.TAUNT), ignorePp: true }, { sourceBattlerIndex: BattlerIndex.ENEMY_2, - targets: [BattlerIndex.PLAYER_2], + targets: [ BattlerIndex.PLAYER_2 ], move: new PokemonMove(Moves.TAUNT), ignorePp: true }); @@ -336,11 +336,11 @@ export const ClowningAroundEncounter: MysteryEncounter = .filter(move => move && !originalTypes.includes(move.getMove().type) && move.getMove().category !== MoveCategory.STATUS) .map(move => move!.getMove().type); if (priorityTypes?.length > 0) { - priorityTypes = [...new Set(priorityTypes)].sort(); + priorityTypes = [ ...new Set(priorityTypes) ].sort(); priorityTypes = randSeedShuffle(priorityTypes); } - const newTypes = [originalTypes[0]]; + const newTypes = [ originalTypes[0] ]; let secondType: Type | null = null; while (secondType === null || secondType === newTypes[0] || originalTypes.includes(secondType)) { if (priorityTypes.length > 0) { @@ -453,37 +453,37 @@ function generateItemsOfTier(scene: BattleScene, pokemon: PlayerPokemon, numItem // Pools have instances of the modifier type equal to the max stacks that modifier can be applied to any one pokemon // This is to prevent "over-generating" a random item of a certain type during item swaps const ultraPool = [ - [modifierTypes.REVIVER_SEED, 1], - [modifierTypes.GOLDEN_PUNCH, 5], - [modifierTypes.ATTACK_TYPE_BOOSTER, 99], - [modifierTypes.QUICK_CLAW, 3], - [modifierTypes.WIDE_LENS, 3] + [ modifierTypes.REVIVER_SEED, 1 ], + [ modifierTypes.GOLDEN_PUNCH, 5 ], + [ modifierTypes.ATTACK_TYPE_BOOSTER, 99 ], + [ modifierTypes.QUICK_CLAW, 3 ], + [ modifierTypes.WIDE_LENS, 3 ] ]; const roguePool = [ - [modifierTypes.LEFTOVERS, 4], - [modifierTypes.SHELL_BELL, 4], - [modifierTypes.SOUL_DEW, 10], - [modifierTypes.SOOTHE_BELL, 3], - [modifierTypes.SCOPE_LENS, 1], - [modifierTypes.BATON, 1], - [modifierTypes.FOCUS_BAND, 5], - [modifierTypes.KINGS_ROCK, 3], - [modifierTypes.GRIP_CLAW, 5] + [ modifierTypes.LEFTOVERS, 4 ], + [ modifierTypes.SHELL_BELL, 4 ], + [ modifierTypes.SOUL_DEW, 10 ], + [ modifierTypes.SOOTHE_BELL, 3 ], + [ modifierTypes.SCOPE_LENS, 1 ], + [ modifierTypes.BATON, 1 ], + [ modifierTypes.FOCUS_BAND, 5 ], + [ modifierTypes.KINGS_ROCK, 3 ], + [ modifierTypes.GRIP_CLAW, 5 ] ]; const berryPool = [ - [BerryType.APICOT, 3], - [BerryType.ENIGMA, 2], - [BerryType.GANLON, 3], - [BerryType.LANSAT, 3], - [BerryType.LEPPA, 2], - [BerryType.LIECHI, 3], - [BerryType.LUM, 2], - [BerryType.PETAYA, 3], - [BerryType.SALAC, 2], - [BerryType.SITRUS, 2], - [BerryType.STARF, 3] + [ BerryType.APICOT, 3 ], + [ BerryType.ENIGMA, 2 ], + [ BerryType.GANLON, 3 ], + [ BerryType.LANSAT, 3 ], + [ BerryType.LEPPA, 2 ], + [ BerryType.LIECHI, 3 ], + [ BerryType.LUM, 2 ], + [ BerryType.PETAYA, 3 ], + [ BerryType.SALAC, 2 ], + [ BerryType.SITRUS, 2 ], + [ BerryType.STARF, 3 ] ]; let pool: any[]; @@ -502,7 +502,7 @@ function generateItemsOfTier(scene: BattleScene, pokemon: PlayerPokemon, numItem const newItemType = pool[randIndex]; let newMod: PokemonHeldItemModifierType; if (tier === "Berries") { - newMod = generateModifierType(scene, modifierTypes.BERRY, [newItemType[0]]) as PokemonHeldItemModifierType; + newMod = generateModifierType(scene, modifierTypes.BERRY, [ newItemType[0] ]) as PokemonHeldItemModifierType; } else { newMod = generateModifierType(scene, newItemType[0]) as PokemonHeldItemModifierType; } diff --git a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts index 655cc3e937e..cb07bf06a81 100644 --- a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts +++ b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts @@ -141,7 +141,7 @@ export const DancingLessonsEncounter: MysteryEncounter = scene.getEnemyParty().forEach(enemyPokemon => { scene.field.remove(enemyPokemon, true); }); - scene.currentBattle.enemyParty = [oricorio]; + scene.currentBattle.enemyParty = [ oricorio ]; scene.field.add(oricorio); // Spawns on offscreen field oricorio.x -= 300; @@ -153,14 +153,14 @@ export const DancingLessonsEncounter: MysteryEncounter = dataSource: oricorioData, isBoss: true, // Gets +1 to all stats except SPD on battle start - tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON], + tags: [ BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON ], mysteryEncounterBattleEffects: (pokemon: Pokemon) => { queueEncounterMessage(pokemon.scene, `${namespace}:option.1.boss_enraged`); - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF], 1)); + pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF ], 1)); } }], }; - encounter.enemyPartyConfigs = [config]; + encounter.enemyPartyConfigs = [ config ]; encounter.misc = { oricorioData }; @@ -187,13 +187,13 @@ export const DancingLessonsEncounter: MysteryEncounter = encounter.startOfBattleEffects.push({ sourceBattlerIndex: BattlerIndex.ENEMY, - targets: [BattlerIndex.PLAYER], + targets: [ BattlerIndex.PLAYER ], move: new PokemonMove(Moves.REVELATION_DANCE), ignorePp: true }); await hideOricorioPokemon(scene); - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [modifierTypes.BATON], fillRemaining: true }); + setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.BATON ], fillRemaining: true }); await initBattleWithEnemyConfig(scene, encounter.enemyPartyConfigs[0]); }) .build() diff --git a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts index c511add0b28..fc8c8088d58 100644 --- a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts +++ b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts @@ -164,7 +164,7 @@ export const DarkDealEncounter: MysteryEncounter = // Starter egg tier, 35/50/10/5 %odds for tiers 6/7/8/9+ const roll = randSeedInt(100); const starterTier: number | [number, number] = - roll >= 65 ? 6 : roll >= 15 ? 7 : roll >= 5 ? 8 : [9, 10]; + roll >= 65 ? 6 : roll >= 15 ? 7 : roll >= 5 ? 8 : [ 9, 10 ]; const bossSpecies = getPokemonSpecies(getRandomSpeciesByStarterTier(starterTier, excludedBosses, bossTypes)); const pokemonConfig: EnemyPokemonConfig = { species: bossSpecies, @@ -179,7 +179,7 @@ export const DarkDealEncounter: MysteryEncounter = pokemonConfig.formIndex = 0; } const config: EnemyPartyConfig = { - pokemonConfigs: [pokemonConfig], + pokemonConfigs: [ pokemonConfig ], }; return initBattleWithEnemyConfig(scene, config); }) diff --git a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts index 1246572b680..a11dc8cbe72 100644 --- a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts +++ b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts @@ -22,7 +22,7 @@ import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; const namespace = "mysteryEncounters/delibirdy"; /** Berries only */ -const OPTION_2_ALLOWED_MODIFIERS = ["BerryModifier", "PokemonInstantReviveModifier"]; +const OPTION_2_ALLOWED_MODIFIERS = [ "BerryModifier", "PokemonInstantReviveModifier" ]; /** Disallowed items are berries, Reviver Seeds, and Vitamins (form change items and fusion items are not PokemonHeldItemModifiers) */ const OPTION_3_DISALLOWED_MODIFIERS = [ diff --git a/src/data/mystery-encounters/encounters/field-trip-encounter.ts b/src/data/mystery-encounters/encounters/field-trip-encounter.ts index 0a356f16b37..a75e5ef6a77 100644 --- a/src/data/mystery-encounters/encounters/field-trip-encounter.ts +++ b/src/data/mystery-encounters/encounters/field-trip-encounter.ts @@ -87,9 +87,9 @@ export const FieldTripEncounter: MysteryEncounter = const encounter = scene.currentBattle.mysteryEncounter!; if (encounter.misc.correctMove) { const modifiers = [ - generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_STAGE_BOOSTER, [Stat.ATK])!, - generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_STAGE_BOOSTER, [Stat.DEF])!, - generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_STAGE_BOOSTER, [Stat.SPD])!, + generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_STAGE_BOOSTER, [ Stat.ATK ])!, + generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_STAGE_BOOSTER, [ Stat.DEF ])!, + generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_STAGE_BOOSTER, [ Stat.SPD ])!, generateModifierTypeOption(scene, modifierTypes.DIRE_HIT)!, generateModifierTypeOption(scene, modifierTypes.RARER_CANDY)!, ]; @@ -133,9 +133,9 @@ export const FieldTripEncounter: MysteryEncounter = const encounter = scene.currentBattle.mysteryEncounter!; if (encounter.misc.correctMove) { const modifiers = [ - generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_STAGE_BOOSTER, [Stat.SPATK])!, - generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_STAGE_BOOSTER, [Stat.SPDEF])!, - generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_STAGE_BOOSTER, [Stat.SPD])!, + generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_STAGE_BOOSTER, [ Stat.SPATK ])!, + generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_STAGE_BOOSTER, [ Stat.SPDEF ])!, + generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_STAGE_BOOSTER, [ Stat.SPD ])!, generateModifierTypeOption(scene, modifierTypes.DIRE_HIT)!, generateModifierTypeOption(scene, modifierTypes.RARER_CANDY)!, ]; @@ -179,8 +179,8 @@ export const FieldTripEncounter: MysteryEncounter = const encounter = scene.currentBattle.mysteryEncounter!; if (encounter.misc.correctMove) { const modifiers = [ - generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_STAGE_BOOSTER, [Stat.ACC])!, - generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_STAGE_BOOSTER, [Stat.SPD])!, + generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_STAGE_BOOSTER, [ Stat.ACC ])!, + generateModifierTypeOption(scene, modifierTypes.TEMP_STAT_STAGE_BOOSTER, [ Stat.SPD ])!, generateModifierTypeOption(scene, modifierTypes.GREAT_BALL)!, generateModifierTypeOption(scene, modifierTypes.IV_SCANNER)!, generateModifierTypeOption(scene, modifierTypes.RARER_CANDY)!, @@ -227,7 +227,7 @@ function pokemonAndMoveChosen(scene: BattleScene, pokemon: PlayerPokemon, move: text: `${namespace}:correct_exp`, }, ]; - setEncounterExp(scene, [pokemon.id], 100); + setEncounterExp(scene, [ pokemon.id ], 100); } encounter.misc = { correctMove: correctMove, diff --git a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts index cfb87a9e862..9e7652e24ea 100644 --- a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts +++ b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts @@ -73,7 +73,7 @@ export const FieryFalloutEncounter: MysteryEncounter = doubleBattle: true, disableSwitch: true }; - encounter.enemyPartyConfigs = [config]; + encounter.enemyPartyConfigs = [ config ]; // Load hidden Volcarona sprites encounter.spriteConfigs = [ @@ -99,7 +99,7 @@ export const FieryFalloutEncounter: MysteryEncounter = ]; // Load animations/sfx for Volcarona moves - loadCustomMovesForEncounter(scene, [Moves.FIRE_SPIN, Moves.QUIVER_DANCE]); + loadCustomMovesForEncounter(scene, [ Moves.FIRE_SPIN, Moves.QUIVER_DANCE ]); scene.arena.trySetWeather(WeatherType.SUNNY, true); @@ -143,25 +143,25 @@ export const FieryFalloutEncounter: MysteryEncounter = encounter.startOfBattleEffects.push( { sourceBattlerIndex: BattlerIndex.ENEMY, - targets: [BattlerIndex.PLAYER], + targets: [ BattlerIndex.PLAYER ], move: new PokemonMove(Moves.FIRE_SPIN), ignorePp: true }, { sourceBattlerIndex: BattlerIndex.ENEMY_2, - targets: [BattlerIndex.PLAYER_2], + targets: [ BattlerIndex.PLAYER_2 ], move: new PokemonMove(Moves.FIRE_SPIN), ignorePp: true }, { sourceBattlerIndex: BattlerIndex.ENEMY, - targets: [BattlerIndex.ENEMY], + targets: [ BattlerIndex.ENEMY ], move: new PokemonMove(Moves.QUIVER_DANCE), ignorePp: true }, { sourceBattlerIndex: BattlerIndex.ENEMY_2, - targets: [BattlerIndex.ENEMY_2], + targets: [ BattlerIndex.ENEMY_2 ], move: new PokemonMove(Moves.QUIVER_DANCE), ignorePp: true }); @@ -237,7 +237,7 @@ export const FieryFalloutEncounter: MysteryEncounter = const primary = encounter.options[2].primaryPokemon!; const secondary = encounter.options[2].secondaryPokemon![0]; - setEncounterExp(scene, [primary.id, secondary.id], getPokemonSpecies(Species.VOLCARONA).baseExp * 2); + setEncounterExp(scene, [ primary.id, secondary.id ], getPokemonSpecies(Species.VOLCARONA).baseExp * 2); leaveEncounterWithoutBattle(scene); }) .build() @@ -248,7 +248,7 @@ function giveLeadPokemonCharcoal(scene: BattleScene) { // Give first party pokemon Charcoal for free at end of battle const leadPokemon = scene.getParty()?.[0]; if (leadPokemon) { - const charcoal = generateModifierType(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [Type.FIRE]) as AttackTypeBoosterModifierType; + const charcoal = generateModifierType(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [ Type.FIRE ]) as AttackTypeBoosterModifierType; applyModifierTypeToPlayerPokemon(scene, leadPokemon, charcoal); scene.currentBattle.mysteryEncounter!.setDialogueToken("leadPokemon", leadPokemon.getNameToRender()); queueEncounterMessage(scene, `${namespace}:found_charcoal`); diff --git a/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts b/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts index aa3bace67f0..a04521839fe 100644 --- a/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts +++ b/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts @@ -65,16 +65,16 @@ export const FightOrFlightEncounter: MysteryEncounter = species: bossSpecies, dataSource: new PokemonData(bossPokemon), isBoss: true, - tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON], + tags: [ BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON ], mysteryEncounterBattleEffects: (pokemon: Pokemon) => { queueEncounterMessage(pokemon.scene, `${namespace}:option.1.stat_boost`); // Randomly boost 1 stat 2 stages // Cannot boost Spd, Acc, or Evasion - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [randSeedInt(4, 1)], 2)); + pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ randSeedInt(4, 1) ], 2)); } }], }; - encounter.enemyPartyConfigs = [config]; + encounter.enemyPartyConfigs = [ config ]; // Calculate item // Waves 10-40 GREAT, 60-120 ULTRA, 120-160 ROGUE, 160-180 MASTER @@ -90,7 +90,7 @@ export const FightOrFlightEncounter: MysteryEncounter = let item: ModifierTypeOption | null = null; // TMs and Candy Jar excluded from possible rewards as they're too swingy in value for a singular item reward while (!item || item.type.id.includes("TM_") || item.type.id === "CANDY_JAR") { - item = getPlayerModifierTypeOptions(1, scene.getParty(), [], { guaranteedModifierTiers: [tier], allowLuckUpgrades: false })[0]; + item = getPlayerModifierTypeOptions(1, scene.getParty(), [], { guaranteedModifierTiers: [ tier ], allowLuckUpgrades: false })[0]; } encounter.setDialogueToken("itemName", item.type.name); encounter.misc = item; @@ -137,7 +137,7 @@ export const FightOrFlightEncounter: MysteryEncounter = // Pick battle // Pokemon will randomly boost 1 stat by 2 stages const item = scene.currentBattle.mysteryEncounter!.misc as ModifierTypeOption; - setEncounterRewards(scene, { guaranteedModifierTypeOptions: [item], fillRemaining: false }); + setEncounterRewards(scene, { guaranteedModifierTypeOptions: [ item ], fillRemaining: false }); await initBattleWithEnemyConfig(scene, scene.currentBattle.mysteryEncounter!.enemyPartyConfigs[0]); } ) @@ -159,7 +159,7 @@ export const FightOrFlightEncounter: MysteryEncounter = // Pick steal const encounter = scene.currentBattle.mysteryEncounter!; const item = scene.currentBattle.mysteryEncounter!.misc as ModifierTypeOption; - setEncounterRewards(scene, { guaranteedModifierTypeOptions: [item], fillRemaining: false }); + setEncounterRewards(scene, { guaranteedModifierTypeOptions: [ item ], fillRemaining: false }); // Use primaryPokemon to execute the thievery const primaryPokemon = encounter.options[1].primaryPokemon!; diff --git a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts index c690faf28b7..2b103e0a293 100644 --- a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts +++ b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts @@ -197,7 +197,7 @@ async function summonPlayerPokemon(scene: BattleScene) { const enemySpecies = getPokemonSpecies(Species.WOBBUFFET); scene.currentBattle.enemyParty = []; const wobbuffet = scene.addEnemyPokemon(enemySpecies, encounter.misc.playerPokemon.level, TrainerSlot.NONE, false); - wobbuffet.ivs = [0, 0, 0, 0, 0, 0]; + wobbuffet.ivs = [ 0, 0, 0, 0, 0, 0 ]; wobbuffet.setNature(Nature.MILD); wobbuffet.setAlpha(0); wobbuffet.setVisible(false); @@ -256,15 +256,15 @@ function handleNextTurn(scene: BattleScene) { let isHealPhase = false; if (healthRatio < 0.03) { // Grand prize - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [modifierTypes.MULTI_LENS], fillRemaining: false }); + setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.MULTI_LENS ], fillRemaining: false }); resultMessageKey = `${namespace}:best_result`; } else if (healthRatio < 0.15) { // 2nd prize - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [modifierTypes.SCOPE_LENS], fillRemaining: false }); + setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.SCOPE_LENS ], fillRemaining: false }); resultMessageKey = `${namespace}:great_result`; } else if (healthRatio < 0.33) { // 3rd prize - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [modifierTypes.WIDE_LENS], fillRemaining: false }); + setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.WIDE_LENS ], fillRemaining: false }); resultMessageKey = `${namespace}:good_result`; } else { // No prize @@ -411,7 +411,7 @@ function hideShowmanIntroSprite(scene: BattleScene) { // Slide the Wobbuffet and Game over slightly scene.tweens.add({ - targets: [wobbuffet, carnivalGame], + targets: [ wobbuffet, carnivalGame ], x: "+=16", ease: "Sine.easeInOut", duration: 750 diff --git a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts index cc66bdfb4c9..7b929ea5e7b 100644 --- a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts +++ b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts @@ -35,15 +35,15 @@ const WONDER_TRADE_SHINY_CHANCE = 512; const MAX_WONDER_TRADE_SHINY_CHANCE = 4096; const LEGENDARY_TRADE_POOLS = { - 1: [Species.RATTATA, Species.PIDGEY, Species.WEEDLE], - 2: [Species.SENTRET, Species.HOOTHOOT, Species.LEDYBA], - 3: [Species.POOCHYENA, Species.ZIGZAGOON, Species.TAILLOW], - 4: [Species.BIDOOF, Species.STARLY, Species.KRICKETOT], - 5: [Species.PATRAT, Species.PURRLOIN, Species.PIDOVE], - 6: [Species.BUNNELBY, Species.LITLEO, Species.SCATTERBUG], - 7: [Species.PIKIPEK, Species.YUNGOOS, Species.ROCKRUFF], - 8: [Species.SKWOVET, Species.WOOLOO, Species.ROOKIDEE], - 9: [Species.LECHONK, Species.FIDOUGH, Species.TAROUNTULA] + 1: [ Species.RATTATA, Species.PIDGEY, Species.WEEDLE ], + 2: [ Species.SENTRET, Species.HOOTHOOT, Species.LEDYBA ], + 3: [ Species.POOCHYENA, Species.ZIGZAGOON, Species.TAILLOW ], + 4: [ Species.BIDOOF, Species.STARLY, Species.KRICKETOT ], + 5: [ Species.PATRAT, Species.PURRLOIN, Species.PIDOVE ], + 6: [ Species.BUNNELBY, Species.LITLEO, Species.SCATTERBUG ], + 7: [ Species.PIKIPEK, Species.YUNGOOS, Species.ROCKRUFF ], + 8: [ Species.SKWOVET, Species.WOOLOO, Species.ROOKIDEE ], + 9: [ Species.LECHONK, Species.FIDOUGH, Species.TAROUNTULA ] }; /** Exclude Paradox mons as they aren't considered legendary/mythical */ @@ -387,11 +387,11 @@ export const GlobalTradeSystemEncounter: MysteryEncounter = let item: ModifierTypeOption | null = null; // TMs excluded from possible rewards while (!item || item.type.id.includes("TM_")) { - item = getPlayerModifierTypeOptions(1, scene.getParty(), [], { guaranteedModifierTiers: [tier], allowLuckUpgrades: false })[0]; + item = getPlayerModifierTypeOptions(1, scene.getParty(), [], { guaranteedModifierTiers: [ tier ], allowLuckUpgrades: false })[0]; } encounter.setDialogueToken("itemName", item.type.name); - setEncounterRewards(scene, { guaranteedModifierTypeOptions: [item], fillRemaining: false }); + setEncounterRewards(scene, { guaranteedModifierTypeOptions: [ item ], fillRemaining: false }); // Remove the chosen modifier if its stacks go to 0 modifier.stackCount -= 1; @@ -650,7 +650,7 @@ function doPokemonTradeSequence(scene: BattleScene, tradedPokemon: PlayerPokemon // addPokeballOpenParticles(scene, tradedPokemon.x, tradedPokemon.y, tradedPokemon.pokeball); scene.tweens.add({ - targets: [tradedPokemonTintSprite, tradedPokemonSprite], + targets: [ tradedPokemonTintSprite, tradedPokemonSprite ], duration: 500, ease: "Sine.easeIn", scale: 0.25, @@ -726,7 +726,7 @@ function doPokemonTradeFlyBySequence(scene: BattleScene, tradedPokemonSprite: Ph duration: FADE_DELAY, onComplete: () => { scene.tweens.add({ - targets: [receivedPokemonSprite, tradedPokemonSprite], + targets: [ receivedPokemonSprite, tradedPokemonSprite ], y: tradeBaseBg.displayWidth / 2 - 100, ease: "Cubic.easeInOut", duration: BASE_ANIM_DURATION * 3, diff --git a/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts b/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts index 27b3bdd8cf7..6ca131543b4 100644 --- a/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts +++ b/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts @@ -10,7 +10,7 @@ import { applyDamageToPokemon } from "#app/data/mystery-encounters/utils/encount import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; -import {PokemonMove} from "#app/field/pokemon"; +import { PokemonMove } from "#app/field/pokemon"; const OPTION_1_REQUIRED_MOVE = Moves.SURF; const OPTION_2_REQUIRED_MOVE = Moves.FLY; diff --git a/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts b/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts index af01ecbb97c..08536f44245 100644 --- a/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts +++ b/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts @@ -143,7 +143,7 @@ export const MysteriousChallengersEncounter: MysteryEncounter = // Spawn standard trainer battle with memory mushroom reward const config: EnemyPartyConfig = encounter.enemyPartyConfigs[0]; - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [modifierTypes.TM_COMMON, modifierTypes.TM_GREAT, modifierTypes.MEMORY_MUSHROOM], fillRemaining: true }); + setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.TM_COMMON, modifierTypes.TM_GREAT, modifierTypes.MEMORY_MUSHROOM ], fillRemaining: true }); // Seed offsets to remove possibility of different trainers having exact same teams let ret; @@ -168,7 +168,7 @@ export const MysteriousChallengersEncounter: MysteryEncounter = // Spawn hard fight const config: EnemyPartyConfig = encounter.enemyPartyConfigs[1]; - setEncounterRewards(scene, { guaranteedModifierTiers: [ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.GREAT, ModifierTier.GREAT], fillRemaining: true }); + setEncounterRewards(scene, { guaranteedModifierTiers: [ ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.GREAT, ModifierTier.GREAT ], fillRemaining: true }); // Seed offsets to remove possibility of different trainers having exact same teams let ret; @@ -196,7 +196,7 @@ export const MysteriousChallengersEncounter: MysteryEncounter = // To avoid player level snowballing from picking this option encounter.expMultiplier = 0.9; - setEncounterRewards(scene, { guaranteedModifierTiers: [ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.GREAT], fillRemaining: true }); + setEncounterRewards(scene, { guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.GREAT ], fillRemaining: true }); // Seed offsets to remove possibility of different trainers having exact same teams let ret; diff --git a/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts b/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts index 9221cde0844..2b44f6ee33d 100644 --- a/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts +++ b/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts @@ -76,12 +76,12 @@ export const MysteriousChestEncounter: MysteryEncounter = species: getPokemonSpecies(Species.GIMMIGHOUL), formIndex: 0, isBoss: true, - moveSet: [Moves.NASTY_PLOT, Moves.SHADOW_BALL, Moves.POWER_GEM, Moves.THIEF] + moveSet: [ Moves.NASTY_PLOT, Moves.SHADOW_BALL, Moves.POWER_GEM, Moves.THIEF ] } ], }; - encounter.enemyPartyConfigs = [config]; + encounter.enemyPartyConfigs = [ config ]; encounter.setDialogueToken("gimmighoulName", getPokemonSpecies(Species.GIMMIGHOUL).getName()); encounter.setDialogueToken("trapPercent", TRAP_PERCENT.toString()); @@ -157,13 +157,13 @@ export const MysteriousChestEncounter: MysteryEncounter = leaveEncounterWithoutBattle(scene); } else if (roll >= RAND_LENGTH - COMMON_REWARDS_PERCENT - ULTRA_REWARDS_PERCENT - ROGUE_REWARDS_PERCENT) { // Choose between 2 ROGUE tier items (10%) - setEncounterRewards(scene, { guaranteedModifierTiers: [ModifierTier.ROGUE, ModifierTier.ROGUE] }); + setEncounterRewards(scene, { guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ROGUE ]}); // Display result message then proceed to rewards queueEncounterMessage(scene, `${namespace}:option.1.great`); leaveEncounterWithoutBattle(scene); } else if (roll >= RAND_LENGTH - COMMON_REWARDS_PERCENT - ULTRA_REWARDS_PERCENT - ROGUE_REWARDS_PERCENT - MASTER_REWARDS_PERCENT) { // Choose 1 MASTER tier item (5%) - setEncounterRewards(scene, { guaranteedModifierTiers: [ModifierTier.MASTER] }); + setEncounterRewards(scene, { guaranteedModifierTiers: [ ModifierTier.MASTER ]}); // Display result message then proceed to rewards queueEncounterMessage(scene, `${namespace}:option.1.amazing`); leaveEncounterWithoutBattle(scene); diff --git a/src/data/mystery-encounters/encounters/part-timer-encounter.ts b/src/data/mystery-encounters/encounters/part-timer-encounter.ts index f7eb2f2f1b4..2f41aa96677 100644 --- a/src/data/mystery-encounters/encounters/part-timer-encounter.ts +++ b/src/data/mystery-encounters/encounters/part-timer-encounter.ts @@ -94,7 +94,7 @@ export const PartTimerEncounter: MysteryEncounter = // Calculation from Pokemon.calculateStats const baselineValue = Math.floor(((2 * 90 + 16) * pokemon.level) * 0.01) + 5; const percentDiff = (pokemon.getStat(Stat.SPD) - baselineValue) / baselineValue; - const moneyMultiplier = Math.min(Math.max(2.5 * (1+ percentDiff), 1), 4); + const moneyMultiplier = Math.min(Math.max(2.5 * (1 + percentDiff), 1), 4); encounter.misc = { moneyMultiplier diff --git a/src/data/mystery-encounters/encounters/safari-zone-encounter.ts b/src/data/mystery-encounters/encounters/safari-zone-encounter.ts index be5b9023eea..d029460e617 100644 --- a/src/data/mystery-encounters/encounters/safari-zone-encounter.ts +++ b/src/data/mystery-encounters/encounters/safari-zone-encounter.ts @@ -23,7 +23,7 @@ import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; /** the i18n namespace for the encounter */ const namespace = "mysteryEncounters/safariZone"; -const TRAINER_THROW_ANIMATION_TIMES = [512, 184, 768]; +const TRAINER_THROW_ANIMATION_TIMES = [ 512, 184, 768 ]; const SAFARI_MONEY_MULTIPLIER = 2; @@ -260,7 +260,7 @@ async function summonSafariPokemon(scene: BattleScene) { let enemySpecies; let pokemon; scene.executeWithSeedOffset(() => { - enemySpecies = getPokemonSpecies(getRandomSpeciesByStarterTier([0, 5], undefined, undefined, false, false, false)); + enemySpecies = getPokemonSpecies(getRandomSpeciesByStarterTier([ 0, 5 ], undefined, undefined, false, false, false)); const level = scene.currentBattle.getLevelForWave(); enemySpecies = getPokemonSpecies(enemySpecies.getWildSpeciesForLevel(level, true, false, scene.gameMode)); pokemon = scene.addEnemyPokemon(enemySpecies, level, TrainerSlot.NONE, false); diff --git a/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts b/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts index a8ddfc28ae9..89cb572962c 100644 --- a/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts +++ b/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts @@ -33,7 +33,7 @@ export const ShadyVitaminDealerEncounter: MysteryEncounter = .withEncounterTier(MysteryEncounterTier.COMMON) .withSceneWaveRangeRequirement(...CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES) .withSceneRequirement(new MoneyRequirement(0, VITAMIN_DEALER_CHEAP_PRICE_MULTIPLIER)) // Must have the money for at least the cheap deal - .withPrimaryPokemonHealthRatioRequirement([0.51, 1]) // At least 1 Pokemon must have above half HP + .withPrimaryPokemonHealthRatioRequirement([ 0.51, 1 ]) // At least 1 Pokemon must have above half HP .withIntroSpriteConfigs([ { spriteKey: Species.KROOKODILE.toString(), @@ -140,7 +140,7 @@ export const ShadyVitaminDealerEncounter: MysteryEncounter = chosenPokemon.nature = newNature; encounter.setDialogueToken("newNature", getNatureName(newNature)); queueEncounterMessage(scene, `${namespace}:cheap_side_effects`); - setEncounterExp(scene, [chosenPokemon.id], 100); + setEncounterExp(scene, [ chosenPokemon.id ], 100); chosenPokemon.updateInfo(); }) .build() @@ -201,7 +201,7 @@ export const ShadyVitaminDealerEncounter: MysteryEncounter = const chosenPokemon = encounter.misc.chosenPokemon; queueEncounterMessage(scene, `${namespace}:no_bad_effects`); - setEncounterExp(scene, [chosenPokemon.id], 100); + setEncounterExp(scene, [ chosenPokemon.id ], 100); chosenPokemon.updateInfo(); }) diff --git a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts index 5abd4839c0c..d0b4cc13301 100644 --- a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts +++ b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts @@ -60,15 +60,15 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = const pokemonConfig: EnemyPokemonConfig = { species: bossSpecies, isBoss: true, - status: [StatusEffect.SLEEP, 5], // Extra turns on timer for Snorlax's start of fight moves - moveSet: [Moves.REST, Moves.SLEEP_TALK, Moves.CRUNCH, Moves.GIGA_IMPACT], + status: [ StatusEffect.SLEEP, 5 ], // Extra turns on timer for Snorlax's start of fight moves + moveSet: [ Moves.REST, Moves.SLEEP_TALK, Moves.CRUNCH, Moves.GIGA_IMPACT ], modifierConfigs: [ { - modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.SITRUS]) as PokemonHeldItemModifierType, + modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.SITRUS ]) as PokemonHeldItemModifierType, stackCount: 2 }, { - modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.ENIGMA]) as PokemonHeldItemModifierType, + modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.ENIGMA ]) as PokemonHeldItemModifierType, stackCount: 2 }, ], @@ -77,12 +77,12 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = }; const config: EnemyPartyConfig = { levelAdditiveModifier: 0.5, - pokemonConfigs: [pokemonConfig], + pokemonConfigs: [ pokemonConfig ], }; - encounter.enemyPartyConfigs = [config]; + encounter.enemyPartyConfigs = [ config ]; // Load animations/sfx for Snorlax fight start moves - loadCustomMovesForEncounter(scene, [Moves.SNORE]); + loadCustomMovesForEncounter(scene, [ Moves.SNORE ]); encounter.setDialogueToken("snorlaxName", getPokemonSpecies(Species.SNORLAX).getName()); @@ -104,17 +104,17 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = async (scene: BattleScene) => { // Pick battle const encounter = scene.currentBattle.mysteryEncounter!; - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [modifierTypes.LEFTOVERS], fillRemaining: true}); + setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.LEFTOVERS ], fillRemaining: true }); encounter.startOfBattleEffects.push( { sourceBattlerIndex: BattlerIndex.ENEMY, - targets: [BattlerIndex.PLAYER], + targets: [ BattlerIndex.PLAYER ], move: new PokemonMove(Moves.SNORE), ignorePp: true }, { sourceBattlerIndex: BattlerIndex.ENEMY, - targets: [BattlerIndex.PLAYER], + targets: [ BattlerIndex.PLAYER ], move: new PokemonMove(Moves.SNORE), ignorePp: true }); @@ -156,7 +156,7 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = .withOptionPhase(async (scene: BattleScene) => { // Steal the Snorlax's Leftovers const instance = scene.currentBattle.mysteryEncounter!; - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [modifierTypes.LEFTOVERS], fillRemaining: false }); + setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.LEFTOVERS ], fillRemaining: false }); // Snorlax exp to Pokemon that did the stealing setEncounterExp(scene, instance.primaryPokemon!.id, getPokemonSpecies(Species.SNORLAX).baseExp); leaveEncounterWithoutBattle(scene); diff --git a/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts b/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts index f685bdae2a1..63ab178c52a 100644 --- a/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts +++ b/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts @@ -26,8 +26,8 @@ import { getEncounterPokemonLevelForWave, STANDARD_ENCOUNTER_BOOSTED_LEVEL_MODIF const namespace = "mysteryEncounters/teleportingHijinks"; const MONEY_COST_MULTIPLIER = 1.75; -const BIOME_CANDIDATES = [Biome.SPACE, Biome.FAIRY_CAVE, Biome.LABORATORY, Biome.ISLAND, Biome.WASTELAND, Biome.DOJO]; -const MACHINE_INTERFACING_TYPES = [Type.ELECTRIC, Type.STEEL]; +const BIOME_CANDIDATES = [ Biome.SPACE, Biome.FAIRY_CAVE, Biome.LABORATORY, Biome.ISLAND, Biome.WASTELAND, Biome.DOJO ]; +const MACHINE_INTERFACING_TYPES = [ Type.ELECTRIC, Type.STEEL ]; /** * Teleporting Hijinks encounter. @@ -38,7 +38,7 @@ export const TeleportingHijinksEncounter: MysteryEncounter = MysteryEncounterBuilder.withEncounterType(MysteryEncounterType.TELEPORTING_HIJINKS) .withEncounterTier(MysteryEncounterTier.COMMON) .withSceneWaveRangeRequirement(...CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES) - .withSceneRequirement(new WaveModulusRequirement([1, 2, 3], 10)) // Must be in first 3 waves after boss wave + .withSceneRequirement(new WaveModulusRequirement([ 1, 2, 3 ], 10)) // Must be in first 3 waves after boss wave .withSceneRequirement(new MoneyRequirement(0, MONEY_COST_MULTIPLIER)) // Must be able to pay teleport cost .withAutoHideIntroVisuals(false) .withCatchAllowed(true) @@ -145,9 +145,9 @@ export const TeleportingHijinksEncounter: MysteryEncounter = }], }; - const magnet = generateModifierTypeOption(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [Type.STEEL])!; - const metalCoat = generateModifierTypeOption(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [Type.ELECTRIC])!; - setEncounterRewards(scene, { guaranteedModifierTypeOptions: [magnet, metalCoat], fillRemaining: true }); + const magnet = generateModifierTypeOption(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [ Type.STEEL ])!; + const metalCoat = generateModifierTypeOption(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [ Type.ELECTRIC ])!; + setEncounterRewards(scene, { guaranteedModifierTypeOptions: [ magnet, metalCoat ], fillRemaining: true }); transitionMysteryEncounterIntroVisuals(scene, true, true); await initBattleWithEnemyConfig(scene, config); } @@ -163,7 +163,7 @@ async function doBiomeTransitionDialogueAndBattleInit(scene: BattleScene) { // Show dialogue and transition biome await showEncounterText(scene, `${namespace}:transport`); - await Promise.all([animateBiomeChange(scene, newBiome), transitionMysteryEncounterIntroVisuals(scene)]); + await Promise.all([ animateBiomeChange(scene, newBiome), transitionMysteryEncounterIntroVisuals(scene) ]); scene.playBgm(); await showEncounterText(scene, `${namespace}:attacked`); @@ -175,8 +175,8 @@ async function doBiomeTransitionDialogueAndBattleInit(scene: BattleScene) { // Defense/Spd buffs below wave 50, +1 to all stats otherwise const statChangesForBattle: (Stat.ATK | Stat.DEF | Stat.SPATK | Stat.SPDEF | Stat.SPD | Stat.ACC | Stat.EVA)[] = scene.currentBattle.waveIndex < 50 ? - [Stat.DEF, Stat.SPDEF, Stat.SPD] : - [Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD]; + [ Stat.DEF, Stat.SPDEF, Stat.SPD ] : + [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ]; const config: EnemyPartyConfig = { pokemonConfigs: [{ @@ -184,7 +184,7 @@ async function doBiomeTransitionDialogueAndBattleInit(scene: BattleScene) { species: bossSpecies, dataSource: new PokemonData(bossPokemon), isBoss: true, - tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON], + tags: [ BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON ], mysteryEncounterBattleEffects: (pokemon: Pokemon) => { queueEncounterMessage(pokemon.scene, `${namespace}:boss_enraged`); pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, statChangesForBattle, 1)); @@ -198,7 +198,7 @@ async function doBiomeTransitionDialogueAndBattleInit(scene: BattleScene) { async function animateBiomeChange(scene: BattleScene, nextBiome: Biome) { return new Promise(resolve => { scene.tweens.add({ - targets: [scene.arenaEnemy, scene.lastEnemyTrainer], + targets: [ scene.arenaEnemy, scene.lastEnemyTrainer ], x: "+=300", duration: 2000, onComplete: () => { @@ -214,7 +214,7 @@ async function animateBiomeChange(scene: BattleScene, nextBiome: Biome) { scene.arenaPlayerTransition.setVisible(true); scene.tweens.add({ - targets: [scene.arenaPlayer, scene.arenaBgTransition, scene.arenaPlayerTransition], + targets: [ scene.arenaPlayer, scene.arenaBgTransition, scene.arenaPlayerTransition ], duration: 1000, ease: "Sine.easeInOut", alpha: (target: any) => target === scene.arenaPlayer ? 0 : 1, diff --git a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts index e4c0fdc2d98..aca46f1598b 100644 --- a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts @@ -48,29 +48,29 @@ class BreederSpeciesEvolution { } const POOL_1_POKEMON: (Species | BreederSpeciesEvolution)[][] = [ - [Species.MUNCHLAX, new BreederSpeciesEvolution(Species.SNORLAX, SECOND_STAGE_EVOLUTION_WAVE)], - [Species.HAPPINY, new BreederSpeciesEvolution(Species.CHANSEY, FIRST_STAGE_EVOLUTION_WAVE), new BreederSpeciesEvolution(Species.BLISSEY, FINAL_STAGE_EVOLUTION_WAVE)], - [Species.MAGBY, new BreederSpeciesEvolution(Species.MAGMAR, FIRST_STAGE_EVOLUTION_WAVE), new BreederSpeciesEvolution(Species.MAGMORTAR, FINAL_STAGE_EVOLUTION_WAVE)], - [Species.ELEKID, new BreederSpeciesEvolution(Species.ELECTABUZZ, FIRST_STAGE_EVOLUTION_WAVE), new BreederSpeciesEvolution(Species.ELECTIVIRE, FINAL_STAGE_EVOLUTION_WAVE)], - [Species.RIOLU, new BreederSpeciesEvolution(Species.LUCARIO, SECOND_STAGE_EVOLUTION_WAVE)], - [Species.BUDEW, new BreederSpeciesEvolution(Species.ROSELIA, FIRST_STAGE_EVOLUTION_WAVE), new BreederSpeciesEvolution(Species.ROSERADE, FINAL_STAGE_EVOLUTION_WAVE)], - [Species.TOXEL, new BreederSpeciesEvolution(Species.TOXTRICITY, SECOND_STAGE_EVOLUTION_WAVE)], - [Species.MIME_JR, new BreederSpeciesEvolution(Species.GALAR_MR_MIME, FIRST_STAGE_EVOLUTION_WAVE), new BreederSpeciesEvolution(Species.MR_RIME, FINAL_STAGE_EVOLUTION_WAVE)] + [ Species.MUNCHLAX, new BreederSpeciesEvolution(Species.SNORLAX, SECOND_STAGE_EVOLUTION_WAVE) ], + [ Species.HAPPINY, new BreederSpeciesEvolution(Species.CHANSEY, FIRST_STAGE_EVOLUTION_WAVE), new BreederSpeciesEvolution(Species.BLISSEY, FINAL_STAGE_EVOLUTION_WAVE) ], + [ Species.MAGBY, new BreederSpeciesEvolution(Species.MAGMAR, FIRST_STAGE_EVOLUTION_WAVE), new BreederSpeciesEvolution(Species.MAGMORTAR, FINAL_STAGE_EVOLUTION_WAVE) ], + [ Species.ELEKID, new BreederSpeciesEvolution(Species.ELECTABUZZ, FIRST_STAGE_EVOLUTION_WAVE), new BreederSpeciesEvolution(Species.ELECTIVIRE, FINAL_STAGE_EVOLUTION_WAVE) ], + [ Species.RIOLU, new BreederSpeciesEvolution(Species.LUCARIO, SECOND_STAGE_EVOLUTION_WAVE) ], + [ Species.BUDEW, new BreederSpeciesEvolution(Species.ROSELIA, FIRST_STAGE_EVOLUTION_WAVE), new BreederSpeciesEvolution(Species.ROSERADE, FINAL_STAGE_EVOLUTION_WAVE) ], + [ Species.TOXEL, new BreederSpeciesEvolution(Species.TOXTRICITY, SECOND_STAGE_EVOLUTION_WAVE) ], + [ Species.MIME_JR, new BreederSpeciesEvolution(Species.GALAR_MR_MIME, FIRST_STAGE_EVOLUTION_WAVE), new BreederSpeciesEvolution(Species.MR_RIME, FINAL_STAGE_EVOLUTION_WAVE) ] ]; const POOL_2_POKEMON: (Species | BreederSpeciesEvolution)[][] = [ - [Species.PICHU, new BreederSpeciesEvolution(Species.PIKACHU, FIRST_STAGE_EVOLUTION_WAVE), new BreederSpeciesEvolution(Species.RAICHU, FINAL_STAGE_EVOLUTION_WAVE)], - [Species.PICHU, new BreederSpeciesEvolution(Species.PIKACHU, FIRST_STAGE_EVOLUTION_WAVE), new BreederSpeciesEvolution(Species.ALOLA_RAICHU, FINAL_STAGE_EVOLUTION_WAVE)], - [Species.JYNX], - [Species.TYROGUE, new BreederSpeciesEvolution(Species.HITMONLEE, SECOND_STAGE_EVOLUTION_WAVE)], - [Species.TYROGUE, new BreederSpeciesEvolution(Species.HITMONCHAN, SECOND_STAGE_EVOLUTION_WAVE)], - [Species.TYROGUE, new BreederSpeciesEvolution(Species.HITMONTOP, SECOND_STAGE_EVOLUTION_WAVE)], - [Species.IGGLYBUFF, new BreederSpeciesEvolution(Species.JIGGLYPUFF, FIRST_STAGE_EVOLUTION_WAVE), new BreederSpeciesEvolution(Species.WIGGLYTUFF, FINAL_STAGE_EVOLUTION_WAVE)], - [Species.AZURILL, new BreederSpeciesEvolution(Species.MARILL, FIRST_STAGE_EVOLUTION_WAVE), new BreederSpeciesEvolution(Species.AZUMARILL, FINAL_STAGE_EVOLUTION_WAVE)], - [Species.WYNAUT, new BreederSpeciesEvolution(Species.WOBBUFFET, SECOND_STAGE_EVOLUTION_WAVE)], - [Species.CHINGLING, new BreederSpeciesEvolution(Species.CHIMECHO, SECOND_STAGE_EVOLUTION_WAVE)], - [Species.BONSLY, new BreederSpeciesEvolution(Species.SUDOWOODO, SECOND_STAGE_EVOLUTION_WAVE)], - [Species.MANTYKE, new BreederSpeciesEvolution(Species.MANTINE, SECOND_STAGE_EVOLUTION_WAVE)] + [ Species.PICHU, new BreederSpeciesEvolution(Species.PIKACHU, FIRST_STAGE_EVOLUTION_WAVE), new BreederSpeciesEvolution(Species.RAICHU, FINAL_STAGE_EVOLUTION_WAVE) ], + [ Species.PICHU, new BreederSpeciesEvolution(Species.PIKACHU, FIRST_STAGE_EVOLUTION_WAVE), new BreederSpeciesEvolution(Species.ALOLA_RAICHU, FINAL_STAGE_EVOLUTION_WAVE) ], + [ Species.JYNX ], + [ Species.TYROGUE, new BreederSpeciesEvolution(Species.HITMONLEE, SECOND_STAGE_EVOLUTION_WAVE) ], + [ Species.TYROGUE, new BreederSpeciesEvolution(Species.HITMONCHAN, SECOND_STAGE_EVOLUTION_WAVE) ], + [ Species.TYROGUE, new BreederSpeciesEvolution(Species.HITMONTOP, SECOND_STAGE_EVOLUTION_WAVE) ], + [ Species.IGGLYBUFF, new BreederSpeciesEvolution(Species.JIGGLYPUFF, FIRST_STAGE_EVOLUTION_WAVE), new BreederSpeciesEvolution(Species.WIGGLYTUFF, FINAL_STAGE_EVOLUTION_WAVE) ], + [ Species.AZURILL, new BreederSpeciesEvolution(Species.MARILL, FIRST_STAGE_EVOLUTION_WAVE), new BreederSpeciesEvolution(Species.AZUMARILL, FINAL_STAGE_EVOLUTION_WAVE) ], + [ Species.WYNAUT, new BreederSpeciesEvolution(Species.WOBBUFFET, SECOND_STAGE_EVOLUTION_WAVE) ], + [ Species.CHINGLING, new BreederSpeciesEvolution(Species.CHIMECHO, SECOND_STAGE_EVOLUTION_WAVE) ], + [ Species.BONSLY, new BreederSpeciesEvolution(Species.SUDOWOODO, SECOND_STAGE_EVOLUTION_WAVE) ], + [ Species.MANTYKE, new BreederSpeciesEvolution(Species.MANTINE, SECOND_STAGE_EVOLUTION_WAVE) ] ]; /** @@ -138,7 +138,7 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = encounter.setDialogueToken("pokemon3Name", pokemon3.getNameToRender()); // Dialogue and egg calcs for Pokemon 1 - const [pokemon1CommonEggs, pokemon1RareEggs] = calculateEggRewardsForPokemon(pokemon1); + const [ pokemon1CommonEggs, pokemon1RareEggs ] = calculateEggRewardsForPokemon(pokemon1); let pokemon1Tooltip = getEncounterText(scene, `${namespace}:option.1.tooltip_base`)!; if (pokemon1RareEggs > 0) { const eggsText = i18next.t(`${namespace}:numEggs`, { count: pokemon1RareEggs, rarity: i18next.t("egg:greatTier") }); @@ -153,7 +153,7 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = encounter.options[0].dialogue!.buttonTooltip = pokemon1Tooltip; // Dialogue and egg calcs for Pokemon 2 - const [pokemon2CommonEggs, pokemon2RareEggs] = calculateEggRewardsForPokemon(pokemon2); + const [ pokemon2CommonEggs, pokemon2RareEggs ] = calculateEggRewardsForPokemon(pokemon2); let pokemon2Tooltip = getEncounterText(scene, `${namespace}:option.2.tooltip_base`)!; if (pokemon2RareEggs > 0) { const eggsText = i18next.t(`${namespace}:numEggs`, { count: pokemon2RareEggs, rarity: i18next.t("egg:greatTier") }); @@ -168,7 +168,7 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = encounter.options[1].dialogue!.buttonTooltip = pokemon2Tooltip; // Dialogue and egg calcs for Pokemon 3 - const [pokemon3CommonEggs, pokemon3RareEggs] = calculateEggRewardsForPokemon(pokemon3); + const [ pokemon3CommonEggs, pokemon3RareEggs ] = calculateEggRewardsForPokemon(pokemon3); let pokemon3Tooltip = getEncounterText(scene, `${namespace}:option.3.tooltip_base`)!; if (pokemon3RareEggs > 0) { const eggsText = i18next.t(`${namespace}:numEggs`, { count: pokemon3RareEggs, rarity: i18next.t("egg:greatTier") }); @@ -381,11 +381,11 @@ function getPartyConfig(scene: BattleScene): EnemyPartyConfig { abilityIndex: 1, // Magic Guard shiny: false, nature: Nature.ADAMANT, - moveSet: [Moves.METEOR_MASH, Moves.FIRE_PUNCH, Moves.ICE_PUNCH, Moves.THUNDER_PUNCH], - ivs: [31, 31, 31, 31, 31, 31], + moveSet: [ Moves.METEOR_MASH, Moves.FIRE_PUNCH, Moves.ICE_PUNCH, Moves.THUNDER_PUNCH ], + ivs: [ 31, 31, 31, 31, 31, 31 ], modifierConfigs: [ { - modifier: generateModifierType(scene, modifierTypes.TERA_SHARD, [Type.STEEL]) as PokemonHeldItemModifierType, + modifier: generateModifierType(scene, modifierTypes.TERA_SHARD, [ Type.STEEL ]) as PokemonHeldItemModifierType, } ] } @@ -402,8 +402,8 @@ function getPartyConfig(scene: BattleScene): EnemyPartyConfig { shiny: true, variant: 1, nature: Nature.MODEST, - moveSet: [Moves.MOONBLAST, Moves.MYSTICAL_FIRE, Moves.ICE_BEAM, Moves.THUNDERBOLT], - ivs: [31, 31, 31, 31, 31, 31] + moveSet: [ Moves.MOONBLAST, Moves.MYSTICAL_FIRE, Moves.ICE_BEAM, Moves.THUNDERBOLT ], + ivs: [ 31, 31, 31, 31, 31, 31 ] }, { nickname: i18next.t(`${namespace}:cleffa_3_nickname`, { speciesName: getPokemonSpecies(cleffaSpecies).getName() }), @@ -413,8 +413,8 @@ function getPartyConfig(scene: BattleScene): EnemyPartyConfig { shiny: true, variant: 2, nature: Nature.BOLD, - moveSet: [Moves.TRI_ATTACK, Moves.STORED_POWER, Moves.TAKE_HEART, Moves.MOONLIGHT], - ivs: [31, 31, 31, 31, 31, 31] + moveSet: [ Moves.TRI_ATTACK, Moves.STORED_POWER, Moves.TAKE_HEART, Moves.MOONLIGHT ], + ivs: [ 31, 31, 31, 31, 31, 31 ] }); } else { // Second member from pool 1 @@ -425,12 +425,12 @@ function getPartyConfig(scene: BattleScene): EnemyPartyConfig { baseConfig.pokemonConfigs!.push({ species: getPokemonSpecies(pool1Species), isBoss: false, - ivs: [31, 31, 31, 31, 31, 31] + ivs: [ 31, 31, 31, 31, 31, 31 ] }, { species: getPokemonSpecies(pool2Species), isBoss: false, - ivs: [31, 31, 31, 31, 31, 31] + ivs: [ 31, 31, 31, 31, 31, 31 ] }); } @@ -468,7 +468,7 @@ function calculateEggRewardsForPokemon(pokemon: PlayerPokemon): [number, number] // 1 Common egg for every point leftover const numCommons = totalPoints % 6; - return [numCommons, numRares]; + return [ numCommons, numRares ]; } function getEggOptions(scene: BattleScene, commonEggs: number, rareEggs: number) { diff --git a/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts b/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts index 5486c130a28..2720653e654 100644 --- a/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts @@ -59,12 +59,12 @@ export const ThePokemonSalesmanEncounter: MysteryEncounter = .withOnInit((scene: BattleScene) => { const encounter = scene.currentBattle.mysteryEncounter!; - let species = getPokemonSpecies(getRandomSpeciesByStarterTier([0, 5], undefined, undefined, false, false, false)); + let species = getPokemonSpecies(getRandomSpeciesByStarterTier([ 0, 5 ], undefined, undefined, false, false, false)); let tries = 0; // Reroll any species that don't have HAs while ((isNullOrUndefined(species.abilityHidden) || species.abilityHidden === Abilities.NONE) && tries < 5) { - species = getPokemonSpecies(getRandomSpeciesByStarterTier([0, 5], undefined, undefined, false, false, false)); + species = getPokemonSpecies(getRandomSpeciesByStarterTier([ 0, 5 ], undefined, undefined, false, false, false)); tries++; } diff --git a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts index bd99c8babf7..d1d5b484129 100644 --- a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts @@ -81,37 +81,37 @@ export const TheStrongStuffEncounter: MysteryEncounter = bossSegments: 5, mysteryEncounterPokemonData: new MysteryEncounterPokemonData({ spriteScale: 1.25 }), nature: Nature.BOLD, - moveSet: [Moves.INFESTATION, Moves.SALT_CURE, Moves.GASTRO_ACID, Moves.HEAL_ORDER], + moveSet: [ Moves.INFESTATION, Moves.SALT_CURE, Moves.GASTRO_ACID, Moves.HEAL_ORDER ], modifierConfigs: [ { - modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.SITRUS]) as PokemonHeldItemModifierType + modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.SITRUS ]) as PokemonHeldItemModifierType }, { - modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.ENIGMA]) as PokemonHeldItemModifierType + modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.ENIGMA ]) as PokemonHeldItemModifierType }, { - modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.APICOT]) as PokemonHeldItemModifierType + modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.APICOT ]) as PokemonHeldItemModifierType }, { - modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.GANLON]) as PokemonHeldItemModifierType + modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.GANLON ]) as PokemonHeldItemModifierType }, { - modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.LUM]) as PokemonHeldItemModifierType, + modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.LUM ]) as PokemonHeldItemModifierType, stackCount: 2 } ], - tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON], + tags: [ BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON ], mysteryEncounterBattleEffects: (pokemon: Pokemon) => { queueEncounterMessage(pokemon.scene, `${namespace}:option.2.stat_boost`); - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [Stat.DEF, Stat.SPDEF], 2)); + pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ Stat.DEF, Stat.SPDEF ], 2)); } } ], }; - encounter.enemyPartyConfigs = [config]; + encounter.enemyPartyConfigs = [ config ]; - loadCustomMovesForEncounter(scene, [Moves.GASTRO_ACID, Moves.STEALTH_ROCK]); + loadCustomMovesForEncounter(scene, [ Moves.GASTRO_ACID, Moves.STEALTH_ROCK ]); encounter.setDialogueToken("shuckleName", getPokemonSpecies(Species.SHUCKLE).getName()); @@ -184,17 +184,17 @@ export const TheStrongStuffEncounter: MysteryEncounter = async (scene: BattleScene) => { // Pick battle const encounter = scene.currentBattle.mysteryEncounter!; - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [modifierTypes.SOUL_DEW], fillRemaining: true }); + setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.SOUL_DEW ], fillRemaining: true }); encounter.startOfBattleEffects.push( { sourceBattlerIndex: BattlerIndex.ENEMY, - targets: [BattlerIndex.PLAYER], + targets: [ BattlerIndex.PLAYER ], move: new PokemonMove(Moves.GASTRO_ACID), ignorePp: true }, { sourceBattlerIndex: BattlerIndex.ENEMY, - targets: [BattlerIndex.PLAYER], + targets: [ BattlerIndex.PLAYER ], move: new PokemonMove(Moves.STEALTH_ROCK), ignorePp: true }); diff --git a/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts b/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts index 9e813800b59..ad4f2dd8498 100644 --- a/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts @@ -131,7 +131,7 @@ export const TheWinstrateChallengeEncounter: MysteryEncounter = async (scene: BattleScene) => { // Refuse the challenge, they full heal the party and give the player a Rarer Candy scene.unshiftPhase(new PartyHealPhase(scene, true)); - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [modifierTypes.RARER_CANDY], fillRemaining: false }); + setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.RARER_CANDY ], fillRemaining: false }); leaveEncounterWithoutBattle(scene); } ) @@ -154,7 +154,7 @@ async function spawnNextTrainerOrEndEncounter(scene: BattleScene) { scene.ui.clearText(); // Clears "Winstrate" title from screen as rewards get animated in const machoBrace = generateModifierTypeOption(scene, modifierTypes.MYSTERY_ENCOUNTER_MACHO_BRACE)!; machoBrace.type.tier = ModifierTier.MASTER; - setEncounterRewards(scene, { guaranteedModifierTypeOptions: [machoBrace], fillRemaining: false }); + setEncounterRewards(scene, { guaranteedModifierTypeOptions: [ machoBrace ], fillRemaining: false }); encounter.doContinueEncounter = undefined; leaveEncounterWithoutBattle(scene, false, MysteryEncounterMode.NO_BATTLE); } else { @@ -232,7 +232,7 @@ function getVictorTrainerConfig(scene: BattleScene): EnemyPartyConfig { isBoss: false, abilityIndex: 0, // Guts nature: Nature.ADAMANT, - moveSet: [Moves.FACADE, Moves.BRAVE_BIRD, Moves.PROTECT, Moves.QUICK_ATTACK], + moveSet: [ Moves.FACADE, Moves.BRAVE_BIRD, Moves.PROTECT, Moves.QUICK_ATTACK ], modifierConfigs: [ { modifier: generateModifierType(scene, modifierTypes.FLAME_ORB) as PokemonHeldItemModifierType, @@ -250,7 +250,7 @@ function getVictorTrainerConfig(scene: BattleScene): EnemyPartyConfig { isBoss: false, abilityIndex: 1, // Guts nature: Nature.ADAMANT, - moveSet: [Moves.FACADE, Moves.OBSTRUCT, Moves.NIGHT_SLASH, Moves.FIRE_PUNCH], + moveSet: [ Moves.FACADE, Moves.OBSTRUCT, Moves.NIGHT_SLASH, Moves.FIRE_PUNCH ], modifierConfigs: [ { modifier: generateModifierType(scene, modifierTypes.FLAME_ORB) as PokemonHeldItemModifierType, @@ -276,7 +276,7 @@ function getVictoriaTrainerConfig(scene: BattleScene): EnemyPartyConfig { isBoss: false, abilityIndex: 0, // Natural Cure nature: Nature.CALM, - moveSet: [Moves.SYNTHESIS, Moves.SLUDGE_BOMB, Moves.GIGA_DRAIN, Moves.SLEEP_POWDER], + moveSet: [ Moves.SYNTHESIS, Moves.SLUDGE_BOMB, Moves.GIGA_DRAIN, Moves.SLEEP_POWDER ], modifierConfigs: [ { modifier: generateModifierType(scene, modifierTypes.SOUL_DEW) as PokemonHeldItemModifierType, @@ -294,15 +294,15 @@ function getVictoriaTrainerConfig(scene: BattleScene): EnemyPartyConfig { isBoss: false, formIndex: 1, nature: Nature.TIMID, - moveSet: [Moves.PSYSHOCK, Moves.MOONBLAST, Moves.SHADOW_BALL, Moves.WILL_O_WISP], + moveSet: [ Moves.PSYSHOCK, Moves.MOONBLAST, Moves.SHADOW_BALL, Moves.WILL_O_WISP ], modifierConfigs: [ { - modifier: generateModifierType(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [Type.PSYCHIC]) as PokemonHeldItemModifierType, + modifier: generateModifierType(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [ Type.PSYCHIC ]) as PokemonHeldItemModifierType, stackCount: 1, isTransferable: false }, { - modifier: generateModifierType(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [Type.FAIRY]) as PokemonHeldItemModifierType, + modifier: generateModifierType(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [ Type.FAIRY ]) as PokemonHeldItemModifierType, stackCount: 1, isTransferable: false } @@ -321,15 +321,15 @@ function getViviTrainerConfig(scene: BattleScene): EnemyPartyConfig { isBoss: false, abilityIndex: 3, // Lightning Rod nature: Nature.ADAMANT, - moveSet: [Moves.WATERFALL, Moves.MEGAHORN, Moves.KNOCK_OFF, Moves.REST], + moveSet: [ Moves.WATERFALL, Moves.MEGAHORN, Moves.KNOCK_OFF, Moves.REST ], modifierConfigs: [ { - modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.LUM]) as PokemonHeldItemModifierType, + modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.LUM ]) as PokemonHeldItemModifierType, stackCount: 2, isTransferable: false }, { - modifier: generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER, [Stat.HP]) as PokemonHeldItemModifierType, + modifier: generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER, [ Stat.HP ]) as PokemonHeldItemModifierType, stackCount: 4, isTransferable: false } @@ -340,10 +340,10 @@ function getViviTrainerConfig(scene: BattleScene): EnemyPartyConfig { isBoss: false, abilityIndex: 1, // Poison Heal nature: Nature.JOLLY, - moveSet: [Moves.SPORE, Moves.SWORDS_DANCE, Moves.SEED_BOMB, Moves.DRAIN_PUNCH], + moveSet: [ Moves.SPORE, Moves.SWORDS_DANCE, Moves.SEED_BOMB, Moves.DRAIN_PUNCH ], modifierConfigs: [ { - modifier: generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER, [Stat.HP]) as PokemonHeldItemModifierType, + modifier: generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER, [ Stat.HP ]) as PokemonHeldItemModifierType, stackCount: 4, isTransferable: false }, @@ -358,7 +358,7 @@ function getViviTrainerConfig(scene: BattleScene): EnemyPartyConfig { isBoss: false, formIndex: 1, nature: Nature.CALM, - moveSet: [Moves.EARTH_POWER, Moves.FIRE_BLAST, Moves.YAWN, Moves.PROTECT], + moveSet: [ Moves.EARTH_POWER, Moves.FIRE_BLAST, Moves.YAWN, Moves.PROTECT ], modifierConfigs: [ { modifier: generateModifierType(scene, modifierTypes.QUICK_CLAW) as PokemonHeldItemModifierType, @@ -380,7 +380,7 @@ function getVickyTrainerConfig(scene: BattleScene): EnemyPartyConfig { isBoss: false, formIndex: 1, nature: Nature.IMPISH, - moveSet: [Moves.AXE_KICK, Moves.ICE_PUNCH, Moves.ZEN_HEADBUTT, Moves.BULLET_PUNCH], + moveSet: [ Moves.AXE_KICK, Moves.ICE_PUNCH, Moves.ZEN_HEADBUTT, Moves.BULLET_PUNCH ], modifierConfigs: [ { modifier: generateModifierType(scene, modifierTypes.SHELL_BELL) as PokemonHeldItemModifierType, @@ -401,10 +401,10 @@ function getVitoTrainerConfig(scene: BattleScene): EnemyPartyConfig { isBoss: false, abilityIndex: 0, // Soundproof nature: Nature.MODEST, - moveSet: [Moves.THUNDERBOLT, Moves.GIGA_DRAIN, Moves.FOUL_PLAY, Moves.THUNDER_WAVE], + moveSet: [ Moves.THUNDERBOLT, Moves.GIGA_DRAIN, Moves.FOUL_PLAY, Moves.THUNDER_WAVE ], modifierConfigs: [ { - modifier: generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER, [Stat.SPD]) as PokemonHeldItemModifierType, + modifier: generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER, [ Stat.SPD ]) as PokemonHeldItemModifierType, stackCount: 2, isTransferable: false } @@ -415,50 +415,50 @@ function getVitoTrainerConfig(scene: BattleScene): EnemyPartyConfig { isBoss: false, abilityIndex: 2, // Gluttony nature: Nature.QUIET, - moveSet: [Moves.SLUDGE_BOMB, Moves.GIGA_DRAIN, Moves.ICE_BEAM, Moves.EARTHQUAKE], + moveSet: [ Moves.SLUDGE_BOMB, Moves.GIGA_DRAIN, Moves.ICE_BEAM, Moves.EARTHQUAKE ], modifierConfigs: [ { - modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.SITRUS]) as PokemonHeldItemModifierType, + modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.SITRUS ]) as PokemonHeldItemModifierType, stackCount: 2, }, { - modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.APICOT]) as PokemonHeldItemModifierType, + modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.APICOT ]) as PokemonHeldItemModifierType, stackCount: 2, }, { - modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.GANLON]) as PokemonHeldItemModifierType, + modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.GANLON ]) as PokemonHeldItemModifierType, stackCount: 2, }, { - modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.STARF]) as PokemonHeldItemModifierType, + modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.STARF ]) as PokemonHeldItemModifierType, stackCount: 2, }, { - modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.SALAC]) as PokemonHeldItemModifierType, + modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.SALAC ]) as PokemonHeldItemModifierType, stackCount: 2, }, { - modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.LUM]) as PokemonHeldItemModifierType, + modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.LUM ]) as PokemonHeldItemModifierType, stackCount: 2, }, { - modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.LANSAT]) as PokemonHeldItemModifierType, + modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.LANSAT ]) as PokemonHeldItemModifierType, stackCount: 2, }, { - modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.LIECHI]) as PokemonHeldItemModifierType, + modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.LIECHI ]) as PokemonHeldItemModifierType, stackCount: 2, }, { - modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.PETAYA]) as PokemonHeldItemModifierType, + modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.PETAYA ]) as PokemonHeldItemModifierType, stackCount: 2, }, { - modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.ENIGMA]) as PokemonHeldItemModifierType, + modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.ENIGMA ]) as PokemonHeldItemModifierType, stackCount: 2, }, { - modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.LEPPA]) as PokemonHeldItemModifierType, + modifier: generateModifierType(scene, modifierTypes.BERRY, [ BerryType.LEPPA ]) as PokemonHeldItemModifierType, stackCount: 2, } ] @@ -468,7 +468,7 @@ function getVitoTrainerConfig(scene: BattleScene): EnemyPartyConfig { isBoss: false, abilityIndex: 2, // Tangled Feet nature: Nature.JOLLY, - moveSet: [Moves.DRILL_PECK, Moves.QUICK_ATTACK, Moves.THRASH, Moves.KNOCK_OFF], + moveSet: [ Moves.DRILL_PECK, Moves.QUICK_ATTACK, Moves.THRASH, Moves.KNOCK_OFF ], modifierConfigs: [ { modifier: generateModifierType(scene, modifierTypes.KINGS_ROCK) as PokemonHeldItemModifierType, @@ -482,7 +482,7 @@ function getVitoTrainerConfig(scene: BattleScene): EnemyPartyConfig { isBoss: false, formIndex: 1, nature: Nature.BOLD, - moveSet: [Moves.PSYCHIC, Moves.SHADOW_BALL, Moves.FOCUS_BLAST, Moves.THUNDERBOLT], + moveSet: [ Moves.PSYCHIC, Moves.SHADOW_BALL, Moves.FOCUS_BLAST, Moves.THUNDERBOLT ], modifierConfigs: [ { modifier: generateModifierType(scene, modifierTypes.WIDE_LENS) as PokemonHeldItemModifierType, @@ -496,7 +496,7 @@ function getVitoTrainerConfig(scene: BattleScene): EnemyPartyConfig { isBoss: false, abilityIndex: 0, // Sheer Force nature: Nature.IMPISH, - moveSet: [Moves.EARTHQUAKE, Moves.U_TURN, Moves.FLARE_BLITZ, Moves.ROCK_SLIDE], + moveSet: [ Moves.EARTHQUAKE, Moves.U_TURN, Moves.FLARE_BLITZ, Moves.ROCK_SLIDE ], modifierConfigs: [ { modifier: generateModifierType(scene, modifierTypes.QUICK_CLAW) as PokemonHeldItemModifierType, diff --git a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts index 9673924e6d1..be2cd796386 100644 --- a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts +++ b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts @@ -67,17 +67,17 @@ export const TrashToTreasureEncounter: MysteryEncounter = isBoss: true, formIndex: 1, // Gmax bossSegmentModifier: 1, // +1 Segment from normal - moveSet: [Moves.PAYBACK, Moves.GUNK_SHOT, Moves.STOMPING_TANTRUM, Moves.DRAIN_PUNCH] + moveSet: [ Moves.PAYBACK, Moves.GUNK_SHOT, Moves.STOMPING_TANTRUM, Moves.DRAIN_PUNCH ] }; const config: EnemyPartyConfig = { levelAdditiveModifier: 1, - pokemonConfigs: [pokemonConfig], + pokemonConfigs: [ pokemonConfig ], disableSwitch: true }; - encounter.enemyPartyConfigs = [config]; + encounter.enemyPartyConfigs = [ config ]; // Load animations/sfx for Garbodor fight start moves - loadCustomMovesForEncounter(scene, [Moves.TOXIC, Moves.AMNESIA]); + loadCustomMovesForEncounter(scene, [ Moves.TOXIC, Moves.AMNESIA ]); scene.loadSe("PRSFX- Dig2", "battle_anims", "PRSFX- Dig2.wav"); scene.loadSe("PRSFX- Venom Drench", "battle_anims", "PRSFX- Venom Drench.wav"); @@ -107,7 +107,7 @@ export const TrashToTreasureEncounter: MysteryEncounter = transitionMysteryEncounterIntroVisuals(scene); await tryApplyDigRewardItems(scene); - const blackSludge = generateModifierType(scene, modifierTypes.MYSTERY_ENCOUNTER_BLACK_SLUDGE, [SHOP_ITEM_COST_MULTIPLIER]); + const blackSludge = generateModifierType(scene, modifierTypes.MYSTERY_ENCOUNTER_BLACK_SLUDGE, [ SHOP_ITEM_COST_MULTIPLIER ]); const modifier = blackSludge?.newModifier(); if (modifier) { await scene.addModifier(modifier, false, false, false, true); @@ -139,17 +139,17 @@ export const TrashToTreasureEncounter: MysteryEncounter = const encounter = scene.currentBattle.mysteryEncounter!; - setEncounterRewards(scene, { guaranteedModifierTiers: [ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.GREAT], fillRemaining: true }); + setEncounterRewards(scene, { guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.GREAT ], fillRemaining: true }); encounter.startOfBattleEffects.push( { sourceBattlerIndex: BattlerIndex.ENEMY, - targets: [BattlerIndex.PLAYER], + targets: [ BattlerIndex.PLAYER ], move: new PokemonMove(Moves.TOXIC), ignorePp: true }, { sourceBattlerIndex: BattlerIndex.ENEMY, - targets: [BattlerIndex.ENEMY], + targets: [ BattlerIndex.ENEMY ], move: new PokemonMove(Moves.AMNESIA), ignorePp: true }); diff --git a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts index d06720400c2..51c1d5f963f 100644 --- a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts +++ b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts @@ -74,8 +74,8 @@ export const UncommonBreedEncounter: MysteryEncounter = // Defense/Spd buffs below wave 50, +1 to all stats otherwise const statChangesForBattle: (Stat.ATK | Stat.DEF | Stat.SPATK | Stat.SPDEF | Stat.SPD | Stat.ACC | Stat.EVA)[] = scene.currentBattle.waveIndex < 50 ? - [Stat.DEF, Stat.SPDEF, Stat.SPD] : - [Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD]; + [ Stat.DEF, Stat.SPDEF, Stat.SPD ] : + [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ]; const config: EnemyPartyConfig = { pokemonConfigs: [{ @@ -83,14 +83,14 @@ export const UncommonBreedEncounter: MysteryEncounter = species: species, dataSource: new PokemonData(pokemon), isBoss: false, - tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON], + tags: [ BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON ], mysteryEncounterBattleEffects: (pokemon: Pokemon) => { queueEncounterMessage(pokemon.scene, `${namespace}:option.1.stat_boost`); pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, statChangesForBattle, 1)); } }], }; - encounter.enemyPartyConfigs = [config]; + encounter.enemyPartyConfigs = [ config ]; const { spriteKey, fileRoot } = getSpriteKeysFromPokemon(pokemon); encounter.spriteConfigs = [ @@ -152,7 +152,7 @@ export const UncommonBreedEncounter: MysteryEncounter = encounter.startOfBattleEffects.push( { sourceBattlerIndex: BattlerIndex.ENEMY, - targets: [target], + targets: [ target ], move: pokemonMove, ignorePp: true }); @@ -181,7 +181,7 @@ export const UncommonBreedEncounter: MysteryEncounter = // Remove 4 random berries from player's party // Get all player berry items, remove from party, and store reference - const berryItems: BerryModifier[]= scene.findModifiers(m => m instanceof BerryModifier) as BerryModifier[]; + const berryItems: BerryModifier[] = scene.findModifiers(m => m instanceof BerryModifier) as BerryModifier[]; for (let i = 0; i < 4; i++) { const index = randSeedInt(berryItems.length); const randBerry = berryItems[index]; diff --git a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts index 1e68a894bc4..17f33c27645 100644 --- a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts +++ b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts @@ -89,12 +89,12 @@ const PERCENT_LEVEL_LOSS_ON_REFUSE = 12.5; * Value ranges of the resulting species BST transformations after adding values to original species * 2 Pokemon in the party use this range */ -const HIGH_BST_TRANSFORM_BASE_VALUES: [number, number] = [90, 110]; +const HIGH_BST_TRANSFORM_BASE_VALUES: [number, number] = [ 90, 110 ]; /** * Value ranges of the resulting species BST transformations after adding values to original species * All remaining Pokemon in the party use this range */ -const STANDARD_BST_TRANSFORM_BASE_VALUES: [number, number] = [40, 50]; +const STANDARD_BST_TRANSFORM_BASE_VALUES: [number, number] = [ 40, 50 ]; /** * Weird Dream encounter. @@ -192,7 +192,7 @@ export const WeirdDreamEncounter: MysteryEncounter = await showEncounterText(scene, `${namespace}:option.1.dream_complete`); await doNewTeamPostProcess(scene, transformations); - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [modifierTypes.MEMORY_MUSHROOM, modifierTypes.ROGUE_BALL, modifierTypes.MINT, modifierTypes.MINT]}); + setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.MEMORY_MUSHROOM, modifierTypes.ROGUE_BALL, modifierTypes.MINT, modifierTypes.MINT ]}); leaveEncounterWithoutBattle(scene, true); }) .build() @@ -372,7 +372,7 @@ async function doNewTeamPostProcess(scene: BattleScene, transformations: Pokemon // Randomize the second type of the pokemon // If the pokemon does not normally have a second type, it will gain 1 - const newTypes = [newPokemon.getTypes()[0]]; + const newTypes = [ newPokemon.getTypes()[0] ]; let newType = randSeedInt(18) as Type; while (newType === newTypes[0]) { newType = randSeedInt(18) as Type; @@ -390,14 +390,14 @@ async function doNewTeamPostProcess(scene: BattleScene, transformations: Pokemon // Any pokemon that is at or below 450 BST gets +20 permanent BST to 3 stats: HP (halved, +10), lowest of Atk/SpAtk, and lowest of Def/SpDef if (newPokemon.getSpeciesForm().getBaseStatTotal() <= GAIN_OLD_GATEAU_ITEM_BST_THRESHOLD) { - const stats: Stat[] = [Stat.HP]; + const stats: Stat[] = [ Stat.HP ]; const baseStats = newPokemon.getSpeciesForm().baseStats.slice(0); // Attack or SpAtk stats.push(baseStats[Stat.ATK] < baseStats[Stat.SPATK] ? Stat.ATK : Stat.SPATK); // Def or SpDef stats.push(baseStats[Stat.DEF] < baseStats[Stat.SPDEF] ? Stat.DEF : Stat.SPDEF); const modType = modifierTypes.MYSTERY_ENCOUNTER_OLD_GATEAU() - .generateType(scene.getParty(), [20, stats]) + .generateType(scene.getParty(), [ 20, stats ]) ?.withIdFromFunc(modifierTypes.MYSTERY_ENCOUNTER_OLD_GATEAU); const modifier = modType?.newModifier(newPokemon); if (modifier) { @@ -553,7 +553,7 @@ async function addEggMoveToNewPokemonMoveset(scene: BattleScene, newPokemon: Pla let eggMoveIndex: null | number = null; const eggMoves = newPokemon.getEggMoves()?.slice(0); if (eggMoves) { - const eggMoveIndices = randSeedShuffle([0, 1, 2, 3]); + const eggMoveIndices = randSeedShuffle([ 0, 1, 2, 3 ]); let randomEggMoveIndex = eggMoveIndices.pop(); let randomEggMove = !isNullOrUndefined(randomEggMoveIndex) ? eggMoves[randomEggMoveIndex] : null; let retries = 0; diff --git a/src/data/mystery-encounters/mystery-encounter-requirements.ts b/src/data/mystery-encounters/mystery-encounter-requirements.ts index 6069e1abcfb..86e04e80807 100644 --- a/src/data/mystery-encounters/mystery-encounter-requirements.ts +++ b/src/data/mystery-encounters/mystery-encounter-requirements.ts @@ -147,7 +147,7 @@ export class PreviousEncounterRequirement extends EncounterSceneRequirement { } override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { - return ["previousEncounter", scene.mysteryEncounterSaveData.encounteredEvents.find(e => e.type === this.previousEncounterRequirement)?.[0].toString() ?? ""]; + return [ "previousEncounter", scene.mysteryEncounterSaveData.encounteredEvents.find(e => e.type === this.previousEncounterRequirement)?.[0].toString() ?? "" ]; } } @@ -175,7 +175,7 @@ export class WaveRangeRequirement extends EncounterSceneRequirement { } override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { - return ["waveIndex", scene.currentBattle.waveIndex.toString()]; + return [ "waveIndex", scene.currentBattle.waveIndex.toString() ]; } } @@ -204,7 +204,7 @@ export class WaveModulusRequirement extends EncounterSceneRequirement { } override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { - return ["waveIndex", scene.currentBattle.waveIndex.toString()]; + return [ "waveIndex", scene.currentBattle.waveIndex.toString() ]; } } @@ -213,7 +213,7 @@ export class TimeOfDayRequirement extends EncounterSceneRequirement { constructor(timeOfDay: TimeOfDay | TimeOfDay[]) { super(); - this.requiredTimeOfDay = Array.isArray(timeOfDay) ? timeOfDay : [timeOfDay]; + this.requiredTimeOfDay = Array.isArray(timeOfDay) ? timeOfDay : [ timeOfDay ]; } override meetsRequirement(scene: BattleScene): boolean { @@ -226,7 +226,7 @@ export class TimeOfDayRequirement extends EncounterSceneRequirement { } override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { - return ["timeOfDay", TimeOfDay[scene.arena.getTimeOfDay()].toLocaleLowerCase()]; + return [ "timeOfDay", TimeOfDay[scene.arena.getTimeOfDay()].toLocaleLowerCase() ]; } } @@ -235,7 +235,7 @@ export class WeatherRequirement extends EncounterSceneRequirement { constructor(weather: WeatherType | WeatherType[]) { super(); - this.requiredWeather = Array.isArray(weather) ? weather : [weather]; + this.requiredWeather = Array.isArray(weather) ? weather : [ weather ]; } override meetsRequirement(scene: BattleScene): boolean { @@ -253,7 +253,7 @@ export class WeatherRequirement extends EncounterSceneRequirement { if (!isNullOrUndefined(currentWeather)) { token = WeatherType[currentWeather].replace("_", " ").toLocaleLowerCase(); } - return ["weather", token]; + return [ "weather", token ]; } } @@ -285,7 +285,7 @@ export class PartySizeRequirement extends EncounterSceneRequirement { } override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { - return ["partySize", scene.getParty().length.toString()]; + return [ "partySize", scene.getParty().length.toString() ]; } } @@ -296,7 +296,7 @@ export class PersistentModifierRequirement extends EncounterSceneRequirement { constructor(heldItem: string | string[], minNumberOfItems: number = 1) { super(); this.minNumberOfItems = minNumberOfItems; - this.requiredHeldItemModifiers = Array.isArray(heldItem) ? heldItem : [heldItem]; + this.requiredHeldItemModifiers = Array.isArray(heldItem) ? heldItem : [ heldItem ]; } override meetsRequirement(scene: BattleScene): boolean { @@ -318,7 +318,7 @@ export class PersistentModifierRequirement extends EncounterSceneRequirement { } override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { - return ["requiredItem", this.requiredHeldItemModifiers[0]]; + return [ "requiredItem", this.requiredHeldItemModifiers[0] ]; } } @@ -346,7 +346,7 @@ export class MoneyRequirement extends EncounterSceneRequirement { override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { const value = this.scalingMultiplier > 0 ? scene.getWaveMoneyAmount(this.scalingMultiplier).toString() : this.requiredMoney.toString(); - return ["money", value]; + return [ "money", value ]; } } @@ -359,7 +359,7 @@ export class SpeciesRequirement extends EncounterPokemonRequirement { super(); this.minNumberOfPokemon = minNumberOfPokemon; this.invertQuery = invertQuery; - this.requiredSpecies = Array.isArray(species) ? species : [species]; + this.requiredSpecies = Array.isArray(species) ? species : [ species ]; } override meetsRequirement(scene: BattleScene): boolean { @@ -381,9 +381,9 @@ export class SpeciesRequirement extends EncounterPokemonRequirement { override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { if (pokemon?.species.speciesId && this.requiredSpecies.includes(pokemon.species.speciesId)) { - return ["species", Species[pokemon.species.speciesId]]; + return [ "species", Species[pokemon.species.speciesId] ]; } - return ["species", ""]; + return [ "species", "" ]; } } @@ -397,7 +397,7 @@ export class NatureRequirement extends EncounterPokemonRequirement { super(); this.minNumberOfPokemon = minNumberOfPokemon; this.invertQuery = invertQuery; - this.requiredNature = Array.isArray(nature) ? nature : [nature]; + this.requiredNature = Array.isArray(nature) ? nature : [ nature ]; } override meetsRequirement(scene: BattleScene): boolean { @@ -419,9 +419,9 @@ export class NatureRequirement extends EncounterPokemonRequirement { override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { if (!isNullOrUndefined(pokemon?.nature) && this.requiredNature.includes(pokemon.nature)) { - return ["nature", Nature[pokemon.nature]]; + return [ "nature", Nature[pokemon.nature] ]; } - return ["nature", ""]; + return [ "nature", "" ]; } } @@ -436,7 +436,7 @@ export class TypeRequirement extends EncounterPokemonRequirement { this.excludeFainted = excludeFainted; this.minNumberOfPokemon = minNumberOfPokemon; this.invertQuery = invertQuery; - this.requiredType = Array.isArray(type) ? type : [type]; + this.requiredType = Array.isArray(type) ? type : [ type ]; } override meetsRequirement(scene: BattleScene): boolean { @@ -465,9 +465,9 @@ export class TypeRequirement extends EncounterPokemonRequirement { override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { const includedTypes = this.requiredType.filter((ty) => pokemon?.getTypes().includes(ty)); if (includedTypes.length > 0) { - return ["type", Type[includedTypes[0]]]; + return [ "type", Type[includedTypes[0]] ]; } - return ["type", ""]; + return [ "type", "" ]; } } @@ -481,7 +481,7 @@ export class MoveRequirement extends EncounterPokemonRequirement { super(); this.minNumberOfPokemon = minNumberOfPokemon; this.invertQuery = invertQuery; - this.requiredMoves = Array.isArray(moves) ? moves : [moves]; + this.requiredMoves = Array.isArray(moves) ? moves : [ moves ]; } override meetsRequirement(scene: BattleScene): boolean { @@ -504,9 +504,9 @@ export class MoveRequirement extends EncounterPokemonRequirement { override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { const includedMoves = pokemon?.moveset.filter((move) => move?.moveId && this.requiredMoves.includes(move.moveId)); if (includedMoves && includedMoves.length > 0 && includedMoves[0]) { - return ["move", includedMoves[0].getName()]; + return [ "move", includedMoves[0].getName() ]; } - return ["move", ""]; + return [ "move", "" ]; } } @@ -525,7 +525,7 @@ export class CompatibleMoveRequirement extends EncounterPokemonRequirement { super(); this.minNumberOfPokemon = minNumberOfPokemon; this.invertQuery = invertQuery; - this.requiredMoves = Array.isArray(learnableMove) ? learnableMove : [learnableMove]; + this.requiredMoves = Array.isArray(learnableMove) ? learnableMove : [ learnableMove ]; } override meetsRequirement(scene: BattleScene): boolean { @@ -548,9 +548,9 @@ export class CompatibleMoveRequirement extends EncounterPokemonRequirement { override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { const includedCompatMoves = this.requiredMoves.filter((reqMove) => pokemon?.compatibleTms.filter((tm) => !pokemon.moveset.find(m => m?.moveId === tm)).includes(reqMove)); if (includedCompatMoves.length > 0) { - return ["compatibleMove", Moves[includedCompatMoves[0]]]; + return [ "compatibleMove", Moves[includedCompatMoves[0]] ]; } - return ["compatibleMove", ""]; + return [ "compatibleMove", "" ]; } } @@ -564,7 +564,7 @@ export class AbilityRequirement extends EncounterPokemonRequirement { super(); this.minNumberOfPokemon = minNumberOfPokemon; this.invertQuery = invertQuery; - this.requiredAbilities = Array.isArray(abilities) ? abilities : [abilities]; + this.requiredAbilities = Array.isArray(abilities) ? abilities : [ abilities ]; } override meetsRequirement(scene: BattleScene): boolean { @@ -586,9 +586,9 @@ export class AbilityRequirement extends EncounterPokemonRequirement { override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { if (pokemon?.getAbility().id && this.requiredAbilities.some(a => pokemon.getAbility().id === a)) { - return ["ability", pokemon.getAbility().name]; + return [ "ability", pokemon.getAbility().name ]; } - return ["ability", ""]; + return [ "ability", "" ]; } } @@ -601,7 +601,7 @@ export class StatusEffectRequirement extends EncounterPokemonRequirement { super(); this.minNumberOfPokemon = minNumberOfPokemon; this.invertQuery = invertQuery; - this.requiredStatusEffect = Array.isArray(statusEffect) ? statusEffect : [statusEffect]; + this.requiredStatusEffect = Array.isArray(statusEffect) ? statusEffect : [ statusEffect ]; } override meetsRequirement(scene: BattleScene): boolean { @@ -649,9 +649,9 @@ export class StatusEffectRequirement extends EncounterPokemonRequirement { return pokemon!.status?.effect === a; }); if (reqStatus.length > 0) { - return ["status", StatusEffect[reqStatus[0]]]; + return [ "status", StatusEffect[reqStatus[0]] ]; } - return ["status", ""]; + return [ "status", "" ]; } } @@ -670,7 +670,7 @@ export class CanFormChangeWithItemRequirement extends EncounterPokemonRequiremen super(); this.minNumberOfPokemon = minNumberOfPokemon; this.invertQuery = invertQuery; - this.requiredFormChangeItem = Array.isArray(formChangeItem) ? formChangeItem : [formChangeItem]; + this.requiredFormChangeItem = Array.isArray(formChangeItem) ? formChangeItem : [ formChangeItem ]; } override meetsRequirement(scene: BattleScene): boolean { @@ -706,9 +706,9 @@ export class CanFormChangeWithItemRequirement extends EncounterPokemonRequiremen override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { const requiredItems = this.requiredFormChangeItem.filter((formChangeItem) => this.filterByForm(pokemon, formChangeItem)); if (requiredItems.length > 0) { - return ["formChangeItem", FormChangeItem[requiredItems[0]]]; + return [ "formChangeItem", FormChangeItem[requiredItems[0]] ]; } - return ["formChangeItem", ""]; + return [ "formChangeItem", "" ]; } } @@ -722,7 +722,7 @@ export class CanEvolveWithItemRequirement extends EncounterPokemonRequirement { super(); this.minNumberOfPokemon = minNumberOfPokemon; this.invertQuery = invertQuery; - this.requiredEvolutionItem = Array.isArray(evolutionItems) ? evolutionItems : [evolutionItems]; + this.requiredEvolutionItem = Array.isArray(evolutionItems) ? evolutionItems : [ evolutionItems ]; } override meetsRequirement(scene: BattleScene): boolean { @@ -756,9 +756,9 @@ export class CanEvolveWithItemRequirement extends EncounterPokemonRequirement { override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { const requiredItems = this.requiredEvolutionItem.filter((evoItem) => this.filterByEvo(pokemon, evoItem)); if (requiredItems.length > 0) { - return ["evolutionItem", EvolutionItem[requiredItems[0]]]; + return [ "evolutionItem", EvolutionItem[requiredItems[0]] ]; } - return ["evolutionItem", ""]; + return [ "evolutionItem", "" ]; } } @@ -772,7 +772,7 @@ export class HeldItemRequirement extends EncounterPokemonRequirement { super(); this.minNumberOfPokemon = minNumberOfPokemon; this.invertQuery = invertQuery; - this.requiredHeldItemModifiers = Array.isArray(heldItem) ? heldItem : [heldItem]; + this.requiredHeldItemModifiers = Array.isArray(heldItem) ? heldItem : [ heldItem ]; this.requireTransferable = requireTransferable; } @@ -807,9 +807,9 @@ export class HeldItemRequirement extends EncounterPokemonRequirement { && (!this.requireTransferable || it.isTransferable); }); if (requiredItems && requiredItems.length > 0) { - return ["heldItem", requiredItems[0].type.name]; + return [ "heldItem", requiredItems[0].type.name ]; } - return ["heldItem", ""]; + return [ "heldItem", "" ]; } } @@ -823,7 +823,7 @@ export class AttackTypeBoosterHeldItemTypeRequirement extends EncounterPokemonRe super(); this.minNumberOfPokemon = minNumberOfPokemon; this.invertQuery = invertQuery; - this.requiredHeldItemTypes = Array.isArray(heldItemTypes) ? heldItemTypes : [heldItemTypes]; + this.requiredHeldItemTypes = Array.isArray(heldItemTypes) ? heldItemTypes : [ heldItemTypes ]; this.requireTransferable = requireTransferable; } @@ -864,9 +864,9 @@ export class AttackTypeBoosterHeldItemTypeRequirement extends EncounterPokemonRe && (!this.requireTransferable || it.isTransferable); }); if (requiredItems && requiredItems.length > 0) { - return ["heldItem", requiredItems[0].type.name]; + return [ "heldItem", requiredItems[0].type.name ]; } - return ["heldItem", ""]; + return [ "heldItem", "" ]; } } @@ -904,7 +904,7 @@ export class LevelRequirement extends EncounterPokemonRequirement { } override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { - return ["level", pokemon?.level.toString() ?? ""]; + return [ "level", pokemon?.level.toString() ?? "" ]; } } @@ -942,7 +942,7 @@ export class FriendshipRequirement extends EncounterPokemonRequirement { } override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { - return ["friendship", pokemon?.friendship.toString() ?? ""]; + return [ "friendship", pokemon?.friendship.toString() ?? "" ]; } } @@ -989,9 +989,9 @@ export class HealthRatioRequirement extends EncounterPokemonRequirement { override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { const hpRatio = pokemon?.getHpRatio(); if (!isNullOrUndefined(hpRatio)) { - return ["healthRatio", Math.floor(hpRatio * 100).toString() + "%"]; + return [ "healthRatio", Math.floor(hpRatio * 100).toString() + "%" ]; } - return ["healthRatio", ""]; + return [ "healthRatio", "" ]; } } @@ -1029,8 +1029,7 @@ export class WeightRequirement extends EncounterPokemonRequirement { } override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { - return ["weight", pokemon?.getWeight().toString() ?? ""]; + return [ "weight", pokemon?.getWeight().toString() ?? "" ]; } } - diff --git a/src/data/mystery-encounters/mystery-encounter.ts b/src/data/mystery-encounters/mystery-encounter.ts index da4d29c94d6..aabb0a3311a 100644 --- a/src/data/mystery-encounters/mystery-encounter.ts +++ b/src/data/mystery-encounters/mystery-encounter.ts @@ -265,7 +265,7 @@ export default class MysteryEncounter implements IMysteryEncounter { } this.encounterTier = this.encounterTier ?? MysteryEncounterTier.COMMON; this.dialogue = this.dialogue ?? {}; - this.spriteConfigs = this.spriteConfigs ? [...this.spriteConfigs] : []; + this.spriteConfigs = this.spriteConfigs ? [ ...this.spriteConfigs ] : []; // Default max is 1 for ROGUE encounters, 2 for others this.maxAllowedEncounters = this.maxAllowedEncounters ?? this.encounterTier === MysteryEncounterTier.ROGUE ? DEFAULT_MAX_ALLOWED_ROGUE_ENCOUNTERS : DEFAULT_MAX_ALLOWED_ENCOUNTERS; this.encounterMode = MysteryEncounterMode.DEFAULT; @@ -573,7 +573,7 @@ export class MysteryEncounterBuilder implements Partial { */ withOption(option: MysteryEncounterOption): this & Pick { if (!this.options) { - const options = [option]; + const options = [ option ]; return Object.assign(this, { options }); } else { this.options.push(option); @@ -624,11 +624,11 @@ export class MysteryEncounterBuilder implements Partial { } withIntroDialogue(dialogue: MysteryEncounterDialogue["intro"] = []): this { - this.dialogue = {...this.dialogue, intro: dialogue }; + this.dialogue = { ...this.dialogue, intro: dialogue }; return this; } - withIntro({spriteConfigs, dialogue} : {spriteConfigs: MysteryEncounterSpriteConfig[], dialogue?: MysteryEncounterDialogue["intro"]}) { + withIntro({ spriteConfigs, dialogue } : {spriteConfigs: MysteryEncounterSpriteConfig[], dialogue?: MysteryEncounterDialogue["intro"]}) { return this.withIntroSpriteConfigs(spriteConfigs).withIntroDialogue(dialogue); } @@ -660,7 +660,7 @@ export class MysteryEncounterBuilder implements Partial { * @returns */ withAnimations(...encounterAnimations: EncounterAnim[]): this & Required> { - const animations = Array.isArray(encounterAnimations) ? encounterAnimations : [encounterAnimations]; + const animations = Array.isArray(encounterAnimations) ? encounterAnimations : [ encounterAnimations ]; return Object.assign(this, { encounterAnimations: animations }); } @@ -670,7 +670,7 @@ export class MysteryEncounterBuilder implements Partial { * @param disallowedGameModes */ withDisallowedGameModes(...disallowedGameModes: GameModes[]): this & Required> { - const gameModes = Array.isArray(disallowedGameModes) ? disallowedGameModes : [disallowedGameModes]; + const gameModes = Array.isArray(disallowedGameModes) ? disallowedGameModes : [ disallowedGameModes ]; return Object.assign(this, { disallowedGameModes: gameModes }); } @@ -680,7 +680,7 @@ export class MysteryEncounterBuilder implements Partial { * @param disallowedChallenges */ withDisallowedChallenges(...disallowedChallenges: Challenges[]): this & Required> { - const challenges = Array.isArray(disallowedChallenges) ? disallowedChallenges : [disallowedChallenges]; + const challenges = Array.isArray(disallowedChallenges) ? disallowedChallenges : [ disallowedChallenges ]; return Object.assign(this, { disallowedChallenges: challenges }); } @@ -755,7 +755,7 @@ export class MysteryEncounterBuilder implements Partial { * @returns */ withSceneWaveRangeRequirement(min: number, max?: number): this & Required> { - return this.withSceneRequirement(new WaveRangeRequirement([min, max ?? min])); + return this.withSceneRequirement(new WaveRangeRequirement([ min, max ?? min ])); } /** @@ -767,7 +767,7 @@ export class MysteryEncounterBuilder implements Partial { * @returns */ withScenePartySizeRequirement(min: number, max?: number, excludeDisallowedPokemon: boolean = false): this & Required> { - return this.withSceneRequirement(new PartySizeRequirement([min, max ?? min], excludeDisallowedPokemon)); + return this.withSceneRequirement(new PartySizeRequirement([ min, max ?? min ], excludeDisallowedPokemon)); } /** @@ -982,7 +982,7 @@ export class MysteryEncounterBuilder implements Partial { * @returns */ withOutroDialogue(dialogue: MysteryEncounterDialogue["outro"] = []): this { - this.dialogue = {...this.dialogue, outro: dialogue }; + this.dialogue = { ...this.dialogue, outro: dialogue }; return this; } diff --git a/src/data/mystery-encounters/mystery-encounters.ts b/src/data/mystery-encounters/mystery-encounters.ts index 8fde06f3b14..8c1c3bf6de4 100644 --- a/src/data/mystery-encounters/mystery-encounters.ts +++ b/src/data/mystery-encounters/mystery-encounters.ts @@ -224,72 +224,72 @@ const anyBiomeEncounters: MysteryEncounterType[] = [ * that biome groups do not cover */ export const mysteryEncountersByBiome = new Map([ - [Biome.TOWN, []], - [Biome.PLAINS, [ + [ Biome.TOWN, []], + [ Biome.PLAINS, [ MysteryEncounterType.SLUMBERING_SNORLAX, MysteryEncounterType.ABSOLUTE_AVARICE ]], - [Biome.GRASS, [ + [ Biome.GRASS, [ MysteryEncounterType.SLUMBERING_SNORLAX, MysteryEncounterType.ABSOLUTE_AVARICE ]], - [Biome.TALL_GRASS, [ + [ Biome.TALL_GRASS, [ MysteryEncounterType.ABSOLUTE_AVARICE ]], - [Biome.METROPOLIS, []], - [Biome.FOREST, [ + [ Biome.METROPOLIS, []], + [ Biome.FOREST, [ MysteryEncounterType.SAFARI_ZONE, MysteryEncounterType.ABSOLUTE_AVARICE ]], - [Biome.SEA, [ + [ Biome.SEA, [ MysteryEncounterType.LOST_AT_SEA ]], - [Biome.SWAMP, [ + [ Biome.SWAMP, [ MysteryEncounterType.SAFARI_ZONE ]], - [Biome.BEACH, []], - [Biome.LAKE, []], - [Biome.SEABED, []], - [Biome.MOUNTAIN, []], - [Biome.BADLANDS, [ + [ Biome.BEACH, []], + [ Biome.LAKE, []], + [ Biome.SEABED, []], + [ Biome.MOUNTAIN, []], + [ Biome.BADLANDS, [ MysteryEncounterType.DANCING_LESSONS ]], - [Biome.CAVE, [ + [ Biome.CAVE, [ MysteryEncounterType.THE_STRONG_STUFF ]], - [Biome.DESERT, [ + [ Biome.DESERT, [ MysteryEncounterType.DANCING_LESSONS ]], - [Biome.ICE_CAVE, []], - [Biome.MEADOW, []], - [Biome.POWER_PLANT, []], - [Biome.VOLCANO, [ + [ Biome.ICE_CAVE, []], + [ Biome.MEADOW, []], + [ Biome.POWER_PLANT, []], + [ Biome.VOLCANO, [ MysteryEncounterType.FIERY_FALLOUT, MysteryEncounterType.DANCING_LESSONS ]], - [Biome.GRAVEYARD, []], - [Biome.DOJO, []], - [Biome.FACTORY, []], - [Biome.RUINS, []], - [Biome.WASTELAND, [ + [ Biome.GRAVEYARD, []], + [ Biome.DOJO, []], + [ Biome.FACTORY, []], + [ Biome.RUINS, []], + [ Biome.WASTELAND, [ MysteryEncounterType.DANCING_LESSONS ]], - [Biome.ABYSS, [ + [ Biome.ABYSS, [ MysteryEncounterType.DANCING_LESSONS ]], - [Biome.SPACE, [ + [ Biome.SPACE, [ MysteryEncounterType.THE_EXPERT_POKEMON_BREEDER ]], - [Biome.CONSTRUCTION_SITE, []], - [Biome.JUNGLE, [ + [ Biome.CONSTRUCTION_SITE, []], + [ Biome.JUNGLE, [ MysteryEncounterType.SAFARI_ZONE ]], - [Biome.FAIRY_CAVE, []], - [Biome.TEMPLE, []], - [Biome.SLUM, []], - [Biome.SNOWY_FOREST, []], - [Biome.ISLAND, []], - [Biome.LABORATORY, []] + [ Biome.FAIRY_CAVE, []], + [ Biome.TEMPLE, []], + [ Biome.SLUM, []], + [ Biome.SNOWY_FOREST, []], + [ Biome.ISLAND, []], + [ Biome.LABORATORY, []] ]); export function initMysteryEncounters() { diff --git a/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts b/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts index a0b4edd4a36..f34d383dbbc 100644 --- a/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts +++ b/src/data/mystery-encounters/requirements/can-learn-move-requirement.ts @@ -28,7 +28,7 @@ export class CanLearnMoveRequirement extends EncounterPokemonRequirement { constructor(requiredMoves: Moves | Moves[], options: CanLearnMoveRequirementOptions = {}) { super(); - this.requiredMoves = Array.isArray(requiredMoves) ? requiredMoves : [requiredMoves]; + this.requiredMoves = Array.isArray(requiredMoves) ? requiredMoves : [ requiredMoves ]; this.excludeLevelMoves = options.excludeLevelMoves ?? false; this.excludeTmMoves = options.excludeTmMoves ?? false; @@ -64,11 +64,11 @@ export class CanLearnMoveRequirement extends EncounterPokemonRequirement { } override getDialogueToken(_scene: BattleScene, _pokemon?: PlayerPokemon): [string, string] { - return ["requiredMoves", this.requiredMoves.map(m => new PokemonMove(m).getName()).join(", ")]; + return [ "requiredMoves", this.requiredMoves.map(m => new PokemonMove(m).getName()).join(", ") ]; } private getPokemonLevelMoves(pkm: PlayerPokemon): Moves[] { - return pkm.getLevelMoves().map(([_level, move]) => move); + return pkm.getLevelMoves().map(([ _level, move ]) => move); } private getAllPokemonMoves(pkm: PlayerPokemon): Moves[] { diff --git a/src/data/mystery-encounters/utils/encounter-phase-utils.ts b/src/data/mystery-encounters/utils/encounter-phase-utils.ts index 18adaa4f6f4..f76dff1fec7 100644 --- a/src/data/mystery-encounters/utils/encounter-phase-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-phase-utils.ts @@ -373,7 +373,7 @@ export async function initBattleWithEnemyConfig(scene: BattleScene, partyConfig: * @param moves */ export function loadCustomMovesForEncounter(scene: BattleScene, moves: Moves | Moves[]) { - moves = Array.isArray(moves) ? moves : [moves]; + moves = Array.isArray(moves) ? moves : [ moves ]; return Promise.all(moves.map(move => initMoveAnim(scene, move))) .then(() => loadMoveAnimAssets(scene, moves)); } @@ -663,7 +663,7 @@ export function setEncounterRewards(scene: BattleScene, customShopRewards?: Cust * @param useWaveIndex - set to false when directly passing the the full exp value instead of baseExpValue */ export function setEncounterExp(scene: BattleScene, participantId: number | number[], baseExpValue: number, useWaveIndex: boolean = true) { - const participantIds = Array.isArray(participantId) ? participantId : [participantId]; + const participantIds = Array.isArray(participantId) ? participantId : [ participantId ]; scene.currentBattle.mysteryEncounter!.doEncounterExp = (scene: BattleScene) => { scene.unshiftPhase(new PartyExpPhase(scene, baseExpValue, useWaveIndex, new Set(participantIds))); @@ -800,8 +800,8 @@ export function transitionMysteryEncounterIntroVisuals(scene: BattleScene, hide: // Transition scene.tweens.add({ - targets: [introVisuals, enemyPokemon], - x: `${hide? "+" : "-"}=16`, + targets: [ introVisuals, enemyPokemon ], + x: `${hide ? "+" : "-"}=16`, y: `${hide ? "-" : "+"}=16`, alpha: hide ? 0 : 1, ease: "Sine.easeInOut", @@ -888,14 +888,14 @@ export function calculateMEAggregateStats(scene: BattleScene, baseSpawnWeight: n const numRuns = 1000; let run = 0; const biomes = Object.keys(Biome).filter(key => isNaN(Number(key))); - const alwaysPickTheseBiomes = [Biome.ISLAND, Biome.ABYSS, Biome.WASTELAND, Biome.FAIRY_CAVE, Biome.TEMPLE, Biome.LABORATORY, Biome.SPACE, Biome.WASTELAND]; + const alwaysPickTheseBiomes = [ Biome.ISLAND, Biome.ABYSS, Biome.WASTELAND, Biome.FAIRY_CAVE, Biome.TEMPLE, Biome.LABORATORY, Biome.SPACE, Biome.WASTELAND ]; const calculateNumEncounters = (): any[] => { let encounterRate = baseSpawnWeight; // BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT - const numEncounters = [0, 0, 0, 0]; + const numEncounters = [ 0, 0, 0, 0 ]; let mostRecentEncounterWave = 0; - const encountersByBiome = new Map(biomes.map(b => [b, 0])); - const validMEfloorsByBiome = new Map(biomes.map(b => [b, 0])); + const encountersByBiome = new Map(biomes.map(b => [ b, 0 ])); + const validMEfloorsByBiome = new Map(biomes.map(b => [ b, 0 ])); let currentBiome = Biome.TOWN; let currentArena = scene.newArena(currentBiome); scene.setSeed(Utils.randomString(24)); @@ -968,7 +968,7 @@ export function calculateMEAggregateStats(scene: BattleScene, baseSpawnWeight: n // Calculate encounter rarity // Common / Uncommon / Rare / Super Rare (base is out of 128) - const tierWeights = [66, 40, 19, 3]; + const tierWeights = [ 66, 40, 19, 3 ]; // Adjust tier weights by currently encountered events (pity system that lowers odds of multiple Common/Great) tierWeights[0] = tierWeights[0] - 6 * numEncounters[0]; @@ -987,7 +987,7 @@ export function calculateMEAggregateStats(scene: BattleScene, baseSpawnWeight: n } } - return [numEncounters, encountersByBiome, validMEfloorsByBiome]; + return [ numEncounters, encountersByBiome, validMEfloorsByBiome ]; }; const encounterRuns: number[][] = []; @@ -995,7 +995,7 @@ export function calculateMEAggregateStats(scene: BattleScene, baseSpawnWeight: n const validFloorsByBiome: Map[] = []; while (run < numRuns) { scene.executeWithSeedOffset(() => { - const [numEncounters, encountersByBiome, validMEfloorsByBiome] = calculateNumEncounters(); + const [ numEncounters, encountersByBiome, validMEfloorsByBiome ] = calculateNumEncounters(); encounterRuns.push(numEncounters); encountersByBiomeRuns.push(encountersByBiome); validFloorsByBiome.push(validMEfloorsByBiome); @@ -1036,7 +1036,7 @@ export function calculateMEAggregateStats(scene: BattleScene, baseSpawnWeight: n let stats = `Starting weight: ${baseSpawnWeight}\nAverage MEs per run: ${totalMean}\nStandard Deviation: ${totalStd}\nAvg Commons: ${commonMean}\nAvg Greats: ${uncommonMean}\nAvg Ultras: ${rareMean}\nAvg Rogues: ${superRareMean}\n`; - const meanEncountersPerRunPerBiomeSorted = [...meanEncountersPerRunPerBiome.entries()].sort((e1, e2) => e2[1] - e1[1]); + const meanEncountersPerRunPerBiomeSorted = [ ...meanEncountersPerRunPerBiome.entries() ].sort((e1, e2) => e2[1] - e1[1]); meanEncountersPerRunPerBiomeSorted.forEach(value => stats = stats + `${value[0]}: avg valid floors ${meanMEFloorsPerRunPerBiome.get(value[0])}, avg MEs ${value[1]},\n`); console.log(stats); @@ -1054,7 +1054,7 @@ export function calculateRareSpawnAggregateStats(scene: BattleScene, luckValue: let run = 0; const calculateNumRareEncounters = (): any[] => { - const bossEncountersByRarity = [0, 0, 0, 0]; + const bossEncountersByRarity = [ 0, 0, 0, 0 ]; scene.setSeed(Utils.randomString(24)); scene.resetSeed(); // There are 12 wild boss floors diff --git a/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts b/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts index fc459c78e37..5fa8af95f4d 100644 --- a/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts @@ -208,7 +208,7 @@ export function getRandomSpeciesByStarterTier(starterTiers: number | [number, nu let max = Array.isArray(starterTiers) ? starterTiers[1] : starterTiers; let filteredSpecies: [PokemonSpecies, number][] = Object.keys(speciesStarterCosts) - .map(s => [parseInt(s) as Species, speciesStarterCosts[s] as number]) + .map(s => [ parseInt(s) as Species, speciesStarterCosts[s] as number ]) .filter(s => { const pokemonSpecies = getPokemonSpecies(s[0]); return pokemonSpecies && (!excludedSpecies || !excludedSpecies.includes(s[0])) @@ -216,7 +216,7 @@ export function getRandomSpeciesByStarterTier(starterTiers: number | [number, nu && (allowLegendary || !pokemonSpecies.legendary) && (allowMythical || !pokemonSpecies.mythical); }) - .map(s => [getPokemonSpecies(s[0]), s[1]]); + .map(s => [ getPokemonSpecies(s[0]), s[1] ]); if (types && types.length > 0) { filteredSpecies = filteredSpecies.filter(s => types.includes(s[0].type1) || (!isNullOrUndefined(s[0].type2) && types.includes(s[0].type2))); @@ -313,7 +313,7 @@ export function applyHealToPokemon(scene: BattleScene, pokemon: PlayerPokemon, h */ export async function modifyPlayerPokemonBST(pokemon: PlayerPokemon, value: number) { const modType = modifierTypes.MYSTERY_ENCOUNTER_SHUCKLE_JUICE() - .generateType(pokemon.scene.getParty(), [value]) + .generateType(pokemon.scene.getParty(), [ value ]) ?.withIdFromFunc(modifierTypes.MYSTERY_ENCOUNTER_SHUCKLE_JUICE); const modifier = modType?.newModifier(pokemon); if (modifier) { @@ -602,7 +602,7 @@ export async function catchPokemon(scene: BattleScene, pokemon: EnemyPokemon, po } }); }; - Promise.all([pokemon.hideInfo(), scene.gameData.setPokemonCaught(pokemon)]).then(() => { + Promise.all([ pokemon.hideInfo(), scene.gameData.setPokemonCaught(pokemon) ]).then(() => { if (scene.getParty().length === 6) { const promptRelease = () => { scene.ui.showText(i18next.t("battle:partyFull", { pokemonName: pokemon.getNameToRender() }), null, () => { @@ -728,33 +728,33 @@ export function doPlayerFlee(scene: BattleScene, pokemon: EnemyPokemon): Promise * Bug Species and their corresponding weights */ const GOLDEN_BUG_NET_SPECIES_POOL: [Species, number][] = [ - [Species.SCYTHER, 40], - [Species.SCIZOR, 40], - [Species.KLEAVOR, 40], - [Species.PINSIR, 40], - [Species.HERACROSS, 40], - [Species.YANMA, 40], - [Species.YANMEGA, 40], - [Species.SHUCKLE, 40], - [Species.ANORITH, 40], - [Species.ARMALDO, 40], - [Species.ESCAVALIER, 40], - [Species.ACCELGOR, 40], - [Species.JOLTIK, 40], - [Species.GALVANTULA, 40], - [Species.DURANT, 40], - [Species.LARVESTA, 40], - [Species.VOLCARONA, 40], - [Species.DEWPIDER, 40], - [Species.ARAQUANID, 40], - [Species.WIMPOD, 40], - [Species.GOLISOPOD, 40], - [Species.SIZZLIPEDE, 40], - [Species.CENTISKORCH, 40], - [Species.NYMBLE, 40], - [Species.LOKIX, 40], - [Species.BUZZWOLE, 1], - [Species.PHEROMOSA, 1], + [ Species.SCYTHER, 40 ], + [ Species.SCIZOR, 40 ], + [ Species.KLEAVOR, 40 ], + [ Species.PINSIR, 40 ], + [ Species.HERACROSS, 40 ], + [ Species.YANMA, 40 ], + [ Species.YANMEGA, 40 ], + [ Species.SHUCKLE, 40 ], + [ Species.ANORITH, 40 ], + [ Species.ARMALDO, 40 ], + [ Species.ESCAVALIER, 40 ], + [ Species.ACCELGOR, 40 ], + [ Species.JOLTIK, 40 ], + [ Species.GALVANTULA, 40 ], + [ Species.DURANT, 40 ], + [ Species.LARVESTA, 40 ], + [ Species.VOLCARONA, 40 ], + [ Species.DEWPIDER, 40 ], + [ Species.ARAQUANID, 40 ], + [ Species.WIMPOD, 40 ], + [ Species.GOLISOPOD, 40 ], + [ Species.SIZZLIPEDE, 40 ], + [ Species.CENTISKORCH, 40 ], + [ Species.NYMBLE, 40 ], + [ Species.LOKIX, 40 ], + [ Species.BUZZWOLE, 1 ], + [ Species.PHEROMOSA, 1 ], ]; /** diff --git a/src/data/pokemon-forms.ts b/src/data/pokemon-forms.ts index 37d8e5d2ffb..03b6b89e5b1 100644 --- a/src/data/pokemon-forms.ts +++ b/src/data/pokemon-forms.ts @@ -640,18 +640,18 @@ export const pokemonFormChanges: PokemonFormChanges = { new SpeciesFormChange(Species.ALTARIA, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.ALTARIANITE)) ], [Species.CASTFORM]: [ - new SpeciesFormChange(Species.CASTFORM, "", "sunny", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.SUNNY, WeatherType.HARSH_SUN]), true), - new SpeciesFormChange(Species.CASTFORM, "rainy", "sunny", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.SUNNY, WeatherType.HARSH_SUN]), true), - new SpeciesFormChange(Species.CASTFORM, "snowy", "sunny", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.SUNNY, WeatherType.HARSH_SUN]), true), - new SpeciesFormChange(Species.CASTFORM, "", "rainy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.RAIN, WeatherType.HEAVY_RAIN]), true), - new SpeciesFormChange(Species.CASTFORM, "sunny", "rainy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.RAIN, WeatherType.HEAVY_RAIN]), true), - new SpeciesFormChange(Species.CASTFORM, "snowy", "rainy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.RAIN, WeatherType.HEAVY_RAIN]), true), - new SpeciesFormChange(Species.CASTFORM, "", "snowy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.HAIL, WeatherType.SNOW]), true), - new SpeciesFormChange(Species.CASTFORM, "sunny", "snowy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.HAIL, WeatherType.SNOW]), true), - new SpeciesFormChange(Species.CASTFORM, "rainy", "snowy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.HAIL, WeatherType.SNOW]), true), - new SpeciesFormChange(Species.CASTFORM, "sunny", "", new SpeciesFormChangeRevertWeatherFormTrigger(Abilities.FORECAST, [WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG]), true), - new SpeciesFormChange(Species.CASTFORM, "rainy", "", new SpeciesFormChangeRevertWeatherFormTrigger(Abilities.FORECAST, [WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG]), true), - new SpeciesFormChange(Species.CASTFORM, "snowy", "", new SpeciesFormChangeRevertWeatherFormTrigger(Abilities.FORECAST, [WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG]), true), + new SpeciesFormChange(Species.CASTFORM, "", "sunny", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [ WeatherType.SUNNY, WeatherType.HARSH_SUN ]), true), + new SpeciesFormChange(Species.CASTFORM, "rainy", "sunny", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [ WeatherType.SUNNY, WeatherType.HARSH_SUN ]), true), + new SpeciesFormChange(Species.CASTFORM, "snowy", "sunny", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [ WeatherType.SUNNY, WeatherType.HARSH_SUN ]), true), + new SpeciesFormChange(Species.CASTFORM, "", "rainy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [ WeatherType.RAIN, WeatherType.HEAVY_RAIN ]), true), + new SpeciesFormChange(Species.CASTFORM, "sunny", "rainy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [ WeatherType.RAIN, WeatherType.HEAVY_RAIN ]), true), + new SpeciesFormChange(Species.CASTFORM, "snowy", "rainy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [ WeatherType.RAIN, WeatherType.HEAVY_RAIN ]), true), + new SpeciesFormChange(Species.CASTFORM, "", "snowy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [ WeatherType.HAIL, WeatherType.SNOW ]), true), + new SpeciesFormChange(Species.CASTFORM, "sunny", "snowy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [ WeatherType.HAIL, WeatherType.SNOW ]), true), + new SpeciesFormChange(Species.CASTFORM, "rainy", "snowy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [ WeatherType.HAIL, WeatherType.SNOW ]), true), + new SpeciesFormChange(Species.CASTFORM, "sunny", "", new SpeciesFormChangeRevertWeatherFormTrigger(Abilities.FORECAST, [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG ]), true), + new SpeciesFormChange(Species.CASTFORM, "rainy", "", new SpeciesFormChangeRevertWeatherFormTrigger(Abilities.FORECAST, [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG ]), true), + new SpeciesFormChange(Species.CASTFORM, "snowy", "", new SpeciesFormChangeRevertWeatherFormTrigger(Abilities.FORECAST, [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG ]), true), new SpeciesFormChange(Species.CASTFORM, "sunny", "", new SpeciesFormChangeActiveTrigger(), true), new SpeciesFormChange(Species.CASTFORM, "rainy", "", new SpeciesFormChangeActiveTrigger(), true), new SpeciesFormChange(Species.CASTFORM, "snowy", "", new SpeciesFormChangeActiveTrigger(), true) diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 469e400a551..1ceb5971f6a 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -651,7 +651,7 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali } if (key) { - return i18next.t(`battlePokemonForm:${key}`, {pokemonName: this.name}); + return i18next.t(`battlePokemonForm:${key}`, { pokemonName: this.name }); } } return this.name; @@ -915,7 +915,7 @@ export class PokemonForm extends PokemonSpeciesForm { public formSpriteKey: string | null; // This is a collection of form keys that have in-run form changes, but should still be separately selectable from the start screen - private starterSelectableKeys: string[] = ["10", "50", "10-pc", "50-pc", "red", "orange", "yellow", "green", "blue", "indigo", "violet"]; + private starterSelectableKeys: string[] = [ "10", "50", "10-pc", "50-pc", "red", "orange", "yellow", "green", "blue", "indigo", "violet" ]; constructor(formName: string, formKey: string, type1: Type, type2: Type | null, height: number, weight: number, ability1: Abilities, ability2: Abilities, abilityHidden: Abilities, baseTotal: integer, baseHp: integer, baseAtk: integer, baseDef: integer, baseSpatk: integer, baseSpdef: integer, baseSpd: integer, diff --git a/src/data/splash-messages.ts b/src/data/splash-messages.ts index a257b748734..1f00ce0d555 100644 --- a/src/data/splash-messages.ts +++ b/src/data/splash-messages.ts @@ -185,26 +185,26 @@ const seasonalSplashMessages: Season[] = [ name: "Halloween", start: "09-15", end: "10-31", - messages: ["halloween.pumpkabooAbout", "halloween.mayContainSpiders", "halloween.spookyScarySkeledirge", "halloween.gourgeistUsedTrickOrTreat", "halloween.letsSnuggleForever"], + messages: [ "halloween.pumpkabooAbout", "halloween.mayContainSpiders", "halloween.spookyScarySkeledirge", "halloween.gourgeistUsedTrickOrTreat", "halloween.letsSnuggleForever" ], }, { name: "XMAS", start: "12-01", end: "12-26", - messages: ["xmas.happyHolidays", "xmas.unaffilicatedWithDelibirdServices", "xmas.delibirdSeason", "xmas.diamondsFromTheSky", "xmas.holidayStylePikachuNotIncluded"], + messages: [ "xmas.happyHolidays", "xmas.unaffilicatedWithDelibirdServices", "xmas.delibirdSeason", "xmas.diamondsFromTheSky", "xmas.holidayStylePikachuNotIncluded" ], }, { name: "New Year's", start: "01-01", end: "01-31", - messages: ["newYears.happyNewYear"], + messages: [ "newYears.happyNewYear" ], }, ]; //#endregion export function getSplashMessages(): string[] { - const splashMessages: string[] = [...commonSplashMessages]; + const splashMessages: string[] = [ ...commonSplashMessages ]; console.log("use seasonal splash messages", USE_SEASONAL_SPLASH_MESSAGES); if (USE_SEASONAL_SPLASH_MESSAGES) { // add seasonal splash messages if the season is active diff --git a/src/data/trainer-config.ts b/src/data/trainer-config.ts index 63ed596cd13..bc6596c74bd 100644 --- a/src/data/trainer-config.ts +++ b/src/data/trainer-config.ts @@ -227,7 +227,7 @@ export class TrainerConfig { this.battleBgm = "battle_trainer"; this.mixedBattleBgm = "battle_trainer"; this.victoryBgm = "victory_trainer"; - this.partyTemplates = [trainerPartyTemplates.TWO_AVG]; + this.partyTemplates = [ trainerPartyTemplates.TWO_AVG ]; this.speciesFilter = species => (allowLegendaries || (!species.legendary && !species.subLegendary && !species.mythical)) && !species.isTrainerForbidden(); } @@ -526,7 +526,7 @@ export class TrainerConfig { } setSpeciesPools(speciesPools: TrainerTierPools | Species[]): TrainerConfig { - this.speciesPools = (Array.isArray(speciesPools) ? {[TrainerPoolTier.COMMON]: speciesPools} : speciesPools) as unknown as TrainerTierPools; + this.speciesPools = (Array.isArray(speciesPools) ? { [TrainerPoolTier.COMMON]: speciesPools } : speciesPools) as unknown as TrainerTierPools; return this; } @@ -566,65 +566,65 @@ export class TrainerConfig { switch (team) { case "rocket": { return { - [TrainerPoolTier.COMMON]: [Species.RATTATA, Species.KOFFING, Species.EKANS, Species.ZUBAT, Species.MAGIKARP, Species.HOUNDOUR, Species.ONIX, Species.CUBONE, Species.GROWLITHE, Species.MURKROW, Species.GASTLY, Species.EXEGGCUTE, Species.VOLTORB, Species.DROWZEE, Species.VILEPLUME], - [TrainerPoolTier.UNCOMMON]: [Species.PORYGON, Species.MANKEY, Species.MAGNEMITE, Species.ALOLA_SANDSHREW, Species.ALOLA_MEOWTH, Species.ALOLA_GRIMER, Species.ALOLA_GEODUDE, Species.PALDEA_TAUROS, Species.OMANYTE, Species.KABUTO, Species.MAGBY, Species.ELEKID], - [TrainerPoolTier.RARE]: [Species.DRATINI, Species.LARVITAR] + [TrainerPoolTier.COMMON]: [ Species.RATTATA, Species.KOFFING, Species.EKANS, Species.ZUBAT, Species.MAGIKARP, Species.HOUNDOUR, Species.ONIX, Species.CUBONE, Species.GROWLITHE, Species.MURKROW, Species.GASTLY, Species.EXEGGCUTE, Species.VOLTORB, Species.DROWZEE, Species.VILEPLUME ], + [TrainerPoolTier.UNCOMMON]: [ Species.PORYGON, Species.MANKEY, Species.MAGNEMITE, Species.ALOLA_SANDSHREW, Species.ALOLA_MEOWTH, Species.ALOLA_GRIMER, Species.ALOLA_GEODUDE, Species.PALDEA_TAUROS, Species.OMANYTE, Species.KABUTO, Species.MAGBY, Species.ELEKID ], + [TrainerPoolTier.RARE]: [ Species.DRATINI, Species.LARVITAR ] }; } case "magma": { return { - [TrainerPoolTier.COMMON]: [Species.GROWLITHE, Species.SLUGMA, Species.SOLROCK, Species.HIPPOPOTAS, Species.BALTOY, Species.ROLYCOLY, Species.GLIGAR, Species.TORKOAL, Species.HOUNDOUR, Species.MAGBY], - [TrainerPoolTier.UNCOMMON]: [Species.TRAPINCH, Species.SILICOBRA, Species.RHYHORN, Species.ANORITH, Species.LILEEP, Species.HISUI_GROWLITHE, Species.TURTONATOR, Species.ARON, Species.BARBOACH], - [TrainerPoolTier.RARE]: [Species.CAPSAKID, Species.CHARCADET] + [TrainerPoolTier.COMMON]: [ Species.GROWLITHE, Species.SLUGMA, Species.SOLROCK, Species.HIPPOPOTAS, Species.BALTOY, Species.ROLYCOLY, Species.GLIGAR, Species.TORKOAL, Species.HOUNDOUR, Species.MAGBY ], + [TrainerPoolTier.UNCOMMON]: [ Species.TRAPINCH, Species.SILICOBRA, Species.RHYHORN, Species.ANORITH, Species.LILEEP, Species.HISUI_GROWLITHE, Species.TURTONATOR, Species.ARON, Species.BARBOACH ], + [TrainerPoolTier.RARE]: [ Species.CAPSAKID, Species.CHARCADET ] }; } case "aqua": { return { - [TrainerPoolTier.COMMON]: [Species.CORPHISH, Species.SPHEAL, Species.CLAMPERL, Species.CHINCHOU, Species.WOOPER, Species.WINGULL, Species.TENTACOOL, Species.AZURILL, Species.LOTAD, Species.WAILMER, Species.REMORAID], - [TrainerPoolTier.UNCOMMON]: [Species.MANTYKE, Species.HISUI_QWILFISH, Species.ARROKUDA, Species.DHELMISE, Species.CLOBBOPUS, Species.FEEBAS, Species.PALDEA_WOOPER, Species.HORSEA, Species.SKRELP], - [TrainerPoolTier.RARE]: [Species.DONDOZO, Species.BASCULEGION] + [TrainerPoolTier.COMMON]: [ Species.CORPHISH, Species.SPHEAL, Species.CLAMPERL, Species.CHINCHOU, Species.WOOPER, Species.WINGULL, Species.TENTACOOL, Species.AZURILL, Species.LOTAD, Species.WAILMER, Species.REMORAID ], + [TrainerPoolTier.UNCOMMON]: [ Species.MANTYKE, Species.HISUI_QWILFISH, Species.ARROKUDA, Species.DHELMISE, Species.CLOBBOPUS, Species.FEEBAS, Species.PALDEA_WOOPER, Species.HORSEA, Species.SKRELP ], + [TrainerPoolTier.RARE]: [ Species.DONDOZO, Species.BASCULEGION ] }; } case "galactic": { return { - [TrainerPoolTier.COMMON]: [Species.BRONZOR, Species.SWINUB, Species.YANMA, Species.LICKITUNG, Species.TANGELA, Species.MAGBY, Species.ELEKID, Species.SKORUPI, Species.ZUBAT, Species.MURKROW, Species.MAGIKARP, Species.VOLTORB], - [TrainerPoolTier.UNCOMMON]: [Species.HISUI_GROWLITHE, Species.HISUI_QWILFISH, Species.SNEASEL, Species.DUSKULL, Species.ROTOM, Species.HISUI_VOLTORB, Species.GLIGAR, Species.ABRA], - [TrainerPoolTier.RARE]: [Species.URSALUNA, Species.HISUI_LILLIGANT, Species.SPIRITOMB, Species.HISUI_SNEASEL] + [TrainerPoolTier.COMMON]: [ Species.BRONZOR, Species.SWINUB, Species.YANMA, Species.LICKITUNG, Species.TANGELA, Species.MAGBY, Species.ELEKID, Species.SKORUPI, Species.ZUBAT, Species.MURKROW, Species.MAGIKARP, Species.VOLTORB ], + [TrainerPoolTier.UNCOMMON]: [ Species.HISUI_GROWLITHE, Species.HISUI_QWILFISH, Species.SNEASEL, Species.DUSKULL, Species.ROTOM, Species.HISUI_VOLTORB, Species.GLIGAR, Species.ABRA ], + [TrainerPoolTier.RARE]: [ Species.URSALUNA, Species.HISUI_LILLIGANT, Species.SPIRITOMB, Species.HISUI_SNEASEL ] }; } case "plasma": { return { - [TrainerPoolTier.COMMON]: [Species.YAMASK, Species.ROGGENROLA, Species.JOLTIK, Species.TYMPOLE, Species.FRILLISH, Species.FERROSEED, Species.SANDILE, Species.TIMBURR, Species.DARUMAKA, Species.FOONGUS, Species.CUBCHOO, Species.VANILLITE], - [TrainerPoolTier.UNCOMMON]: [Species.PAWNIARD, Species.VULLABY, Species.ZORUA, Species.DRILBUR, Species.KLINK, Species.TYNAMO, Species.GALAR_DARUMAKA, Species.GOLETT, Species.MIENFOO, Species.DURANT, Species.SIGILYPH], - [TrainerPoolTier.RARE]: [Species.HISUI_ZORUA, Species.AXEW, Species.DEINO, Species.HISUI_BRAVIARY] + [TrainerPoolTier.COMMON]: [ Species.YAMASK, Species.ROGGENROLA, Species.JOLTIK, Species.TYMPOLE, Species.FRILLISH, Species.FERROSEED, Species.SANDILE, Species.TIMBURR, Species.DARUMAKA, Species.FOONGUS, Species.CUBCHOO, Species.VANILLITE ], + [TrainerPoolTier.UNCOMMON]: [ Species.PAWNIARD, Species.VULLABY, Species.ZORUA, Species.DRILBUR, Species.KLINK, Species.TYNAMO, Species.GALAR_DARUMAKA, Species.GOLETT, Species.MIENFOO, Species.DURANT, Species.SIGILYPH ], + [TrainerPoolTier.RARE]: [ Species.HISUI_ZORUA, Species.AXEW, Species.DEINO, Species.HISUI_BRAVIARY ] }; } case "flare": { return { - [TrainerPoolTier.COMMON]: [Species.FLETCHLING, Species.LITLEO, Species.INKAY, Species.HELIOPTILE, Species.ELECTRIKE, Species.SKORUPI, Species.PURRLOIN, Species.CLAWITZER, Species.PANCHAM, Species.ESPURR, Species.BUNNELBY], - [TrainerPoolTier.UNCOMMON]: [Species.LITWICK, Species.SNEASEL, Species.PUMPKABOO, Species.PHANTUMP, Species.HONEDGE, Species.BINACLE, Species.HOUNDOUR, Species.SKRELP, Species.SLIGGOO], - [TrainerPoolTier.RARE]: [Species.NOIVERN, Species.HISUI_AVALUGG, Species.HISUI_SLIGGOO] + [TrainerPoolTier.COMMON]: [ Species.FLETCHLING, Species.LITLEO, Species.INKAY, Species.HELIOPTILE, Species.ELECTRIKE, Species.SKORUPI, Species.PURRLOIN, Species.CLAWITZER, Species.PANCHAM, Species.ESPURR, Species.BUNNELBY ], + [TrainerPoolTier.UNCOMMON]: [ Species.LITWICK, Species.SNEASEL, Species.PUMPKABOO, Species.PHANTUMP, Species.HONEDGE, Species.BINACLE, Species.HOUNDOUR, Species.SKRELP, Species.SLIGGOO ], + [TrainerPoolTier.RARE]: [ Species.NOIVERN, Species.HISUI_AVALUGG, Species.HISUI_SLIGGOO ] }; } case "aether": { return { - [TrainerPoolTier.COMMON]: [ Species.BRUXISH, Species.SLOWPOKE, Species.BALTOY, Species.EXEGGCUTE, Species.ABRA, Species.ALOLA_RAICHU, Species.ELGYEM, Species.NATU, Species.BLIPBUG, Species.GIRAFARIG, Species.ORANGURU], - [TrainerPoolTier.UNCOMMON]: [Species.GALAR_SLOWPOKE, Species.MEDITITE, Species.BELDUM, Species.HATENNA, Species.INKAY, Species.RALTS, Species.GALAR_MR_MIME], - [TrainerPoolTier.RARE]: [Species.ARMAROUGE, Species.HISUI_BRAVIARY, Species.PORYGON] + [TrainerPoolTier.COMMON]: [ Species.BRUXISH, Species.SLOWPOKE, Species.BALTOY, Species.EXEGGCUTE, Species.ABRA, Species.ALOLA_RAICHU, Species.ELGYEM, Species.NATU, Species.BLIPBUG, Species.GIRAFARIG, Species.ORANGURU ], + [TrainerPoolTier.UNCOMMON]: [ Species.GALAR_SLOWPOKE, Species.MEDITITE, Species.BELDUM, Species.HATENNA, Species.INKAY, Species.RALTS, Species.GALAR_MR_MIME ], + [TrainerPoolTier.RARE]: [ Species.ARMAROUGE, Species.HISUI_BRAVIARY, Species.PORYGON ] }; } case "skull": { return { - [TrainerPoolTier.COMMON]: [ Species.MAREANIE, Species.ALOLA_GRIMER, Species.GASTLY, Species.ZUBAT, Species.FOMANTIS, Species.VENIPEDE, Species.BUDEW, Species.KOFFING, Species.STUNKY, Species.CROAGUNK, Species.NIDORAN_F], - [TrainerPoolTier.UNCOMMON]: [Species.GALAR_SLOWPOKE, Species.SKORUPI, Species.PALDEA_WOOPER, Species.VULLABY, Species.HISUI_QWILFISH, Species.GLIMMET], - [TrainerPoolTier.RARE]: [Species.SKRELP, Species.HISUI_SNEASEL] + [TrainerPoolTier.COMMON]: [ Species.MAREANIE, Species.ALOLA_GRIMER, Species.GASTLY, Species.ZUBAT, Species.FOMANTIS, Species.VENIPEDE, Species.BUDEW, Species.KOFFING, Species.STUNKY, Species.CROAGUNK, Species.NIDORAN_F ], + [TrainerPoolTier.UNCOMMON]: [ Species.GALAR_SLOWPOKE, Species.SKORUPI, Species.PALDEA_WOOPER, Species.VULLABY, Species.HISUI_QWILFISH, Species.GLIMMET ], + [TrainerPoolTier.RARE]: [ Species.SKRELP, Species.HISUI_SNEASEL ] }; } case "macro": { return { - [TrainerPoolTier.COMMON]: [ Species.HATENNA, Species.FEEBAS, Species.BOUNSWEET, Species.SALANDIT, Species.GALAR_PONYTA, Species.GOTHITA, Species.FROSLASS, Species.VULPIX, Species.FRILLISH, Species.ODDISH, Species.SINISTEA], - [TrainerPoolTier.UNCOMMON]: [Species.VULLABY, Species.MAREANIE, Species.ALOLA_VULPIX, Species.TOGEPI, Species.GALAR_CORSOLA, Species.APPLIN], - [TrainerPoolTier.RARE]: [Species.TINKATINK, Species.HISUI_LILLIGANT] + [TrainerPoolTier.COMMON]: [ Species.HATENNA, Species.FEEBAS, Species.BOUNSWEET, Species.SALANDIT, Species.GALAR_PONYTA, Species.GOTHITA, Species.FROSLASS, Species.VULPIX, Species.FRILLISH, Species.ODDISH, Species.SINISTEA ], + [TrainerPoolTier.UNCOMMON]: [ Species.VULLABY, Species.MAREANIE, Species.ALOLA_VULPIX, Species.TOGEPI, Species.GALAR_CORSOLA, Species.APPLIN ], + [TrainerPoolTier.RARE]: [ Species.TINKATINK, Species.HISUI_LILLIGANT ] }; } case "star_1": { @@ -686,7 +686,7 @@ export class TrainerConfig { signatureSpecies.forEach((speciesPool, s) => { if (!Array.isArray(speciesPool)) { - speciesPool = [speciesPool]; + speciesPool = [ speciesPool ]; } this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); }); @@ -720,7 +720,7 @@ export class TrainerConfig { signatureSpecies.forEach((speciesPool, s) => { if (!Array.isArray(speciesPool)) { - speciesPool = [speciesPool]; + speciesPool = [ speciesPool ]; } this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); }); @@ -759,7 +759,7 @@ export class TrainerConfig { } signatureSpecies.forEach((speciesPool, s) => { if (!Array.isArray(speciesPool)) { - speciesPool = [speciesPool]; + speciesPool = [ speciesPool ]; } this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); }); @@ -800,7 +800,7 @@ export class TrainerConfig { signatureSpecies.forEach((speciesPool, s) => { // Ensure speciesPool is an array. if (!Array.isArray(speciesPool)) { - speciesPool = [speciesPool]; + speciesPool = [ speciesPool ]; } // Set a function to get a random party member from the species pool. this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); @@ -857,7 +857,7 @@ export class TrainerConfig { signatureSpecies.forEach((speciesPool, s) => { // Ensure speciesPool is an array. if (!Array.isArray(speciesPool)) { - speciesPool = [speciesPool]; + speciesPool = [ speciesPool ]; } // Set a function to get a random party member from the species pool. this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); @@ -912,7 +912,7 @@ export class TrainerConfig { signatureSpecies.forEach((speciesPool, s) => { // Ensure speciesPool is an array. if (!Array.isArray(speciesPool)) { - speciesPool = [speciesPool]; + speciesPool = [ speciesPool ]; } // Set a function to get a random party member from the species pool. this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); @@ -1180,7 +1180,7 @@ function getRandomTeraModifiers(party: EnemyPokemon[], count: integer, types?: T for (let t = 0; t < Math.min(count, party.length); t++) { const randomIndex = Utils.randSeedItem(partyMemberIndexes); partyMemberIndexes.splice(partyMemberIndexes.indexOf(randomIndex), 1); - ret.push(modifierTypes.TERA_SHARD().generateType([], [Utils.randSeedItem(types ? types : party[randomIndex].getTypes())])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(party[randomIndex]) as PersistentModifier); // TODO: is the bang correct? + ret.push(modifierTypes.TERA_SHARD().generateType([], [ Utils.randSeedItem(types ? types : party[randomIndex].getTypes()) ])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(party[randomIndex]) as PersistentModifier); // TODO: is the bang correct? } return ret; } @@ -1195,135 +1195,135 @@ type SignatureSpecies = { * This is in a separate const so it can be accessed from other places and not just the trainerConfigs */ export const signatureSpecies: SignatureSpecies = { - BROCK: [Species.GEODUDE, Species.ONIX], - MISTY: [Species.STARYU, Species.PSYDUCK], - LT_SURGE: [Species.VOLTORB, Species.PIKACHU, Species.ELECTABUZZ], - ERIKA: [Species.ODDISH, Species.BELLSPROUT, Species.TANGELA, Species.HOPPIP], - JANINE: [Species.VENONAT, Species.SPINARAK, Species.ZUBAT], - SABRINA: [Species.ABRA, Species.MR_MIME, Species.ESPEON], - BLAINE: [Species.GROWLITHE, Species.PONYTA, Species.MAGMAR], - GIOVANNI: [Species.SANDILE, Species.MURKROW, Species.NIDORAN_M, Species.NIDORAN_F], - FALKNER: [Species.PIDGEY, Species.HOOTHOOT, Species.DODUO], - BUGSY: [Species.SCYTHER, Species.HERACROSS, Species.SHUCKLE, Species.PINSIR], - WHITNEY: [Species.GIRAFARIG, Species.MILTANK], - MORTY: [Species.GASTLY, Species.MISDREAVUS, Species.SABLEYE], - CHUCK: [Species.POLIWRATH, Species.MANKEY], - JASMINE: [Species.MAGNEMITE, Species.STEELIX], - PRYCE: [Species.SEEL, Species.SWINUB], - CLAIR: [Species.DRATINI, Species.HORSEA, Species.GYARADOS], - ROXANNE: [Species.GEODUDE, Species.NOSEPASS], - BRAWLY: [Species.MACHOP, Species.MAKUHITA], - WATTSON: [Species.MAGNEMITE, Species.VOLTORB, Species.ELECTRIKE], - FLANNERY: [Species.SLUGMA, Species.TORKOAL, Species.NUMEL], - NORMAN: [Species.SLAKOTH, Species.SPINDA, Species.CHANSEY, Species.KANGASKHAN], - WINONA: [Species.SWABLU, Species.WINGULL, Species.TROPIUS, Species.SKARMORY], - TATE: [Species.SOLROCK, Species.NATU, Species.CHIMECHO, Species.GALLADE], - LIZA: [Species.LUNATONE, Species.SPOINK, Species.BALTOY, Species.GARDEVOIR], - JUAN: [Species.HORSEA, Species.BARBOACH, Species.SPHEAL, Species.RELICANTH], - ROARK: [Species.CRANIDOS, Species.LARVITAR, Species.GEODUDE], - GARDENIA: [Species.ROSELIA, Species.TANGELA, Species.TURTWIG], - MAYLENE: [Species.LUCARIO, Species.MEDITITE, Species.CHIMCHAR], - CRASHER_WAKE: [Species.BUIZEL, Species.MAGIKARP, Species.PIPLUP], - FANTINA: [Species.MISDREAVUS, Species.DRIFLOON, Species.SPIRITOMB], - BYRON: [Species.SHIELDON, Species.BRONZOR, Species.AGGRON], - CANDICE: [Species.SNEASEL, Species.SNOVER, Species.SNORUNT], - VOLKNER: [Species.SHINX, Species.CHINCHOU, Species.ROTOM], - CILAN: [Species.PANSAGE, Species.COTTONEE, Species.PETILIL], - CHILI: [Species.PANSEAR, Species.DARUMAKA, Species.HEATMOR], - CRESS: [Species.PANPOUR, Species.BASCULIN, Species.TYMPOLE], - CHEREN: [Species.LILLIPUP, Species.MINCCINO, Species.PATRAT], - LENORA: [Species.KANGASKHAN, Species.DEERLING, Species.AUDINO], - ROXIE: [Species.VENIPEDE, Species.TRUBBISH, Species.SKORUPI], - BURGH: [Species.SEWADDLE, Species.SHELMET, Species.KARRABLAST], - ELESA: [Species.EMOLGA, Species.BLITZLE, Species.JOLTIK], - CLAY: [Species.DRILBUR, Species.SANDILE, Species.GOLETT], - SKYLA: [Species.DUCKLETT, Species.WOOBAT, Species.RUFFLET], - BRYCEN: [Species.CRYOGONAL, Species.VANILLITE, Species.CUBCHOO], - DRAYDEN: [Species.DRUDDIGON, Species.AXEW, Species.DEINO], - MARLON: [Species.WAILMER, Species.FRILLISH, Species.TIRTOUGA], - VIOLA: [Species.SURSKIT, Species.SCATTERBUG], - GRANT: [Species.AMAURA, Species.TYRUNT], - KORRINA: [Species.HAWLUCHA, Species.LUCARIO, Species.MIENFOO], - RAMOS: [Species.SKIDDO, Species.HOPPIP, Species.BELLSPROUT], - CLEMONT: [Species.HELIOPTILE, Species.MAGNEMITE, Species.EMOLGA], - VALERIE: [Species.SYLVEON, Species.MAWILE, Species.MR_MIME], - OLYMPIA: [Species.ESPURR, Species.SIGILYPH, Species.SLOWKING], - WULFRIC: [Species.BERGMITE, Species.SNOVER, Species.CRYOGONAL], - MILO: [Species.GOSSIFLEUR, Species.APPLIN, Species.BOUNSWEET], - NESSA: [Species.CHEWTLE, Species.ARROKUDA, Species.WIMPOD], - KABU: [Species.SIZZLIPEDE, Species.VULPIX, Species.TORKOAL], - BEA: [Species.GALAR_FARFETCHD, Species.MACHOP, Species.CLOBBOPUS], - ALLISTER: [Species.GALAR_YAMASK, Species.GALAR_CORSOLA, Species.GASTLY], - OPAL: [Species.MILCERY, Species.TOGETIC, Species.GALAR_WEEZING], - BEDE: [Species.HATENNA, Species.GALAR_PONYTA, Species.GARDEVOIR], - GORDIE: [Species.ROLYCOLY, Species.STONJOURNER, Species.BINACLE], - MELONY: [Species.SNOM, Species.GALAR_DARUMAKA, Species.GALAR_MR_MIME], - PIERS: [Species.GALAR_ZIGZAGOON, Species.SCRAGGY, Species.INKAY], - MARNIE: [Species.IMPIDIMP, Species.PURRLOIN, Species.MORPEKO], - RAIHAN: [Species.DURALUDON, Species.TURTONATOR, Species.GOOMY], - KATY: [Species.NYMBLE, Species.TAROUNTULA, Species.HERACROSS], - BRASSIUS: [Species.SMOLIV, Species.SHROOMISH, Species.ODDISH], - IONO: [Species.TADBULB, Species.WATTREL, Species.VOLTORB], - KOFU: [Species.VELUZA, Species.WIGLETT, Species.WINGULL], - LARRY: [Species.STARLY, Species.DUNSPARCE, Species.KOMALA], - RYME: [Species.GREAVARD, Species.SHUPPET, Species.MIMIKYU], - TULIP: [Species.GIRAFARIG, Species.FLITTLE, Species.RALTS], - GRUSHA: [Species.CETODDLE, Species.ALOLA_VULPIX, Species.CUBCHOO], - LORELEI: [Species.JYNX, [Species.SLOWBRO, Species.GALAR_SLOWBRO], Species.LAPRAS, [Species.ALOLA_SANDSLASH, Species.CLOYSTER]], - BRUNO: [Species.MACHAMP, Species.HITMONCHAN, Species.HITMONLEE, [Species.ALOLA_GOLEM, Species.GOLEM]], - AGATHA: [Species.GENGAR, [Species.ARBOK, Species.WEEZING], Species.CROBAT, Species.ALOLA_MAROWAK], - LANCE: [Species.DRAGONITE, Species.GYARADOS, Species.AERODACTYL, Species.ALOLA_EXEGGUTOR], - WILL: [Species.XATU, Species.JYNX, [Species.SLOWBRO, Species.SLOWKING], Species.EXEGGUTOR], - KOGA: [[Species.WEEZING, Species.MUK], [Species.VENOMOTH, Species.ARIADOS], Species.CROBAT, Species.TENTACRUEL], - KAREN: [Species.UMBREON, Species.HONCHKROW, Species.HOUNDOOM, Species.WEAVILE], - SIDNEY: [[Species.SHIFTRY, Species.CACTURNE], [Species.SHARPEDO, Species.CRAWDAUNT], Species.ABSOL, Species.MIGHTYENA], - PHOEBE: [Species.SABLEYE, Species.DUSKNOIR, Species.BANETTE, [Species.MISMAGIUS, Species.DRIFBLIM]], - GLACIA: [Species.GLALIE, Species.WALREIN, Species.FROSLASS, Species.ABOMASNOW], - DRAKE: [Species.ALTARIA, Species.SALAMENCE, Species.FLYGON, Species.KINGDRA], - AARON: [[Species.SCIZOR, Species.KLEAVOR], Species.HERACROSS, [Species.VESPIQUEN, Species.YANMEGA], Species.DRAPION], - BERTHA: [Species.WHISCASH, Species.HIPPOWDON, Species.GLISCOR, Species.RHYPERIOR], - FLINT: [[Species.FLAREON, Species.RAPIDASH], Species.MAGMORTAR, [Species.STEELIX, Species.LOPUNNY], Species.INFERNAPE], - LUCIAN: [Species.MR_MIME, Species.GALLADE, Species.BRONZONG, [Species.ALAKAZAM, Species.ESPEON]], - SHAUNTAL: [Species.COFAGRIGUS, Species.CHANDELURE, Species.GOLURK, Species.JELLICENT], - MARSHAL: [Species.CONKELDURR, Species.MIENSHAO, Species.THROH, Species.SAWK], - GRIMSLEY: [Species.LIEPARD, Species.KINGAMBIT, Species.SCRAFTY, Species.KROOKODILE], - CAITLIN: [Species.MUSHARNA, Species.GOTHITELLE, Species.SIGILYPH, Species.REUNICLUS], - MALVA: [Species.PYROAR, Species.TORKOAL, Species.CHANDELURE, Species.TALONFLAME], - SIEBOLD: [Species.CLAWITZER, Species.GYARADOS, Species.BARBARACLE, Species.STARMIE], - WIKSTROM: [Species.KLEFKI, Species.PROBOPASS, Species.SCIZOR, Species.AEGISLASH], - DRASNA: [Species.DRAGALGE, Species.DRUDDIGON, Species.ALTARIA, Species.NOIVERN], - HALA: [Species.HARIYAMA, Species.BEWEAR, Species.CRABOMINABLE, [Species.POLIWRATH, Species.ANNIHILAPE]], - MOLAYNE: [Species.KLEFKI, Species.MAGNEZONE, Species.METAGROSS, Species.ALOLA_DUGTRIO], - OLIVIA: [Species.RELICANTH, Species.CARBINK, Species.ALOLA_GOLEM, Species.LYCANROC], - ACEROLA: [[Species.BANETTE, Species.DRIFBLIM], Species.MIMIKYU, Species.DHELMISE, Species.PALOSSAND], - KAHILI: [[Species.BRAVIARY, Species.MANDIBUZZ], Species.HAWLUCHA, Species.ORICORIO, Species.TOUCANNON], - MARNIE_ELITE: [Species.MORPEKO, Species.LIEPARD, [Species.TOXICROAK, Species.SCRAFTY], Species.GRIMMSNARL], - NESSA_ELITE: [Species.GOLISOPOD, [Species.PELIPPER, Species.QUAGSIRE], Species.TOXAPEX, Species.DREDNAW], - BEA_ELITE: [Species.HAWLUCHA, [Species.GRAPPLOCT, Species.SIRFETCHD], Species.FALINKS, Species.MACHAMP], - ALLISTER_ELITE: [Species.DUSKNOIR, [Species.POLTEAGEIST, Species.RUNERIGUS], Species.CURSOLA, Species.GENGAR], - RAIHAN_ELITE: [Species.GOODRA, [Species.TORKOAL, Species.TURTONATOR], Species.FLYGON, Species.ARCHALUDON], - RIKA: [Species.WHISCASH, [Species.DONPHAN, Species.DUGTRIO], Species.CAMERUPT, Species.CLODSIRE], - POPPY: [Species.COPPERAJAH, Species.BRONZONG, Species.CORVIKNIGHT, Species.TINKATON], - LARRY_ELITE: [Species.STARAPTOR, Species.FLAMIGO, Species.ALTARIA, Species.TROPIUS], - HASSEL: [Species.NOIVERN, [Species.FLAPPLE, Species.APPLETUN], Species.DRAGALGE, Species.BAXCALIBUR], - CRISPIN: [Species.TALONFLAME, Species.CAMERUPT, Species.MAGMORTAR, Species.BLAZIKEN], - AMARYS: [Species.SKARMORY, Species.EMPOLEON, Species.SCIZOR, Species.METAGROSS], - LACEY: [Species.EXCADRILL, Species.PRIMARINA, [Species.ALCREMIE, Species.GRANBULL], Species.WHIMSICOTT], - DRAYTON: [Species.DRAGONITE, Species.ARCHALUDON, Species.HAXORUS, Species.SCEPTILE], - BLUE: [[Species.GYARADOS, Species.EXEGGUTOR, Species.ARCANINE], Species.HO_OH, [Species.RHYPERIOR, Species.MAGNEZONE]], // Alakazam lead, Mega Pidgeot - RED: [Species.LUGIA, Species.SNORLAX, [Species.ESPEON, Species.UMBREON, Species.SYLVEON]], // GMax Pikachu lead, Mega gen 1 starter - LANCE_CHAMPION: [Species.DRAGONITE, Species.KINGDRA, Species.ALOLA_EXEGGUTOR], // Aerodactyl lead, Mega Latias/Latios - STEVEN: [Species.AGGRON, [Species.ARMALDO, Species.CRADILY], Species.DIALGA], // Skarmory lead, Mega Metagross - WALLACE: [Species.MILOTIC, Species.PALKIA, Species.LUDICOLO], // Pelipper lead, Mega Swampert - CYNTHIA: [Species.GIRATINA, Species.LUCARIO, Species.TOGEKISS], // Spiritomb lead, Mega Garchomp - ALDER: [Species.VOLCARONA, Species.ZEKROM, [Species.ACCELGOR, Species.ESCAVALIER], Species.KELDEO], // Bouffalant/Braviary lead - IRIS: [Species.HAXORUS, Species.RESHIRAM, Species.ARCHEOPS], // Druddigon lead, Gmax Lapras - DIANTHA: [Species.HAWLUCHA, Species.XERNEAS, Species.GOODRA], // Gourgeist lead, Mega Gardevoir - HAU: [[Species.SOLGALEO, Species.LUNALA], Species.NOIVERN, [Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA], [Species.TAPU_BULU, Species.TAPU_FINI, Species.TAPU_KOKO, Species.TAPU_LELE]], // Alola Raichu lead - LEON: [Species.DRAGAPULT, Species.ZACIAN, Species.AEGISLASH], // Rillaboom/Cinderace/Inteleon lead, GMax Charizard - GEETA: [Species.MIRAIDON, [Species.ESPATHRA, Species.VELUZA], [Species.AVALUGG, Species.HISUI_AVALUGG], Species.KINGAMBIT], // Glimmora lead - NEMONA: [Species.KORAIDON, Species.PAWMOT, [Species.DUDUNSPARCE, Species.ORTHWORM], [Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL]], // Lycanroc lead - KIERAN: [[Species.GRIMMSNARL, Species.INCINEROAR, Species.PORYGON_Z], Species.OGERPON, Species.TERAPAGOS, Species.HYDRAPPLE], // Poliwrath/Politoed lead + BROCK: [ Species.GEODUDE, Species.ONIX ], + MISTY: [ Species.STARYU, Species.PSYDUCK ], + LT_SURGE: [ Species.VOLTORB, Species.PIKACHU, Species.ELECTABUZZ ], + ERIKA: [ Species.ODDISH, Species.BELLSPROUT, Species.TANGELA, Species.HOPPIP ], + JANINE: [ Species.VENONAT, Species.SPINARAK, Species.ZUBAT ], + SABRINA: [ Species.ABRA, Species.MR_MIME, Species.ESPEON ], + BLAINE: [ Species.GROWLITHE, Species.PONYTA, Species.MAGMAR ], + GIOVANNI: [ Species.SANDILE, Species.MURKROW, Species.NIDORAN_M, Species.NIDORAN_F ], + FALKNER: [ Species.PIDGEY, Species.HOOTHOOT, Species.DODUO ], + BUGSY: [ Species.SCYTHER, Species.HERACROSS, Species.SHUCKLE, Species.PINSIR ], + WHITNEY: [ Species.GIRAFARIG, Species.MILTANK ], + MORTY: [ Species.GASTLY, Species.MISDREAVUS, Species.SABLEYE ], + CHUCK: [ Species.POLIWRATH, Species.MANKEY ], + JASMINE: [ Species.MAGNEMITE, Species.STEELIX ], + PRYCE: [ Species.SEEL, Species.SWINUB ], + CLAIR: [ Species.DRATINI, Species.HORSEA, Species.GYARADOS ], + ROXANNE: [ Species.GEODUDE, Species.NOSEPASS ], + BRAWLY: [ Species.MACHOP, Species.MAKUHITA ], + WATTSON: [ Species.MAGNEMITE, Species.VOLTORB, Species.ELECTRIKE ], + FLANNERY: [ Species.SLUGMA, Species.TORKOAL, Species.NUMEL ], + NORMAN: [ Species.SLAKOTH, Species.SPINDA, Species.CHANSEY, Species.KANGASKHAN ], + WINONA: [ Species.SWABLU, Species.WINGULL, Species.TROPIUS, Species.SKARMORY ], + TATE: [ Species.SOLROCK, Species.NATU, Species.CHIMECHO, Species.GALLADE ], + LIZA: [ Species.LUNATONE, Species.SPOINK, Species.BALTOY, Species.GARDEVOIR ], + JUAN: [ Species.HORSEA, Species.BARBOACH, Species.SPHEAL, Species.RELICANTH ], + ROARK: [ Species.CRANIDOS, Species.LARVITAR, Species.GEODUDE ], + GARDENIA: [ Species.ROSELIA, Species.TANGELA, Species.TURTWIG ], + MAYLENE: [ Species.LUCARIO, Species.MEDITITE, Species.CHIMCHAR ], + CRASHER_WAKE: [ Species.BUIZEL, Species.MAGIKARP, Species.PIPLUP ], + FANTINA: [ Species.MISDREAVUS, Species.DRIFLOON, Species.SPIRITOMB ], + BYRON: [ Species.SHIELDON, Species.BRONZOR, Species.AGGRON ], + CANDICE: [ Species.SNEASEL, Species.SNOVER, Species.SNORUNT ], + VOLKNER: [ Species.SHINX, Species.CHINCHOU, Species.ROTOM ], + CILAN: [ Species.PANSAGE, Species.COTTONEE, Species.PETILIL ], + CHILI: [ Species.PANSEAR, Species.DARUMAKA, Species.HEATMOR ], + CRESS: [ Species.PANPOUR, Species.BASCULIN, Species.TYMPOLE ], + CHEREN: [ Species.LILLIPUP, Species.MINCCINO, Species.PATRAT ], + LENORA: [ Species.KANGASKHAN, Species.DEERLING, Species.AUDINO ], + ROXIE: [ Species.VENIPEDE, Species.TRUBBISH, Species.SKORUPI ], + BURGH: [ Species.SEWADDLE, Species.SHELMET, Species.KARRABLAST ], + ELESA: [ Species.EMOLGA, Species.BLITZLE, Species.JOLTIK ], + CLAY: [ Species.DRILBUR, Species.SANDILE, Species.GOLETT ], + SKYLA: [ Species.DUCKLETT, Species.WOOBAT, Species.RUFFLET ], + BRYCEN: [ Species.CRYOGONAL, Species.VANILLITE, Species.CUBCHOO ], + DRAYDEN: [ Species.DRUDDIGON, Species.AXEW, Species.DEINO ], + MARLON: [ Species.WAILMER, Species.FRILLISH, Species.TIRTOUGA ], + VIOLA: [ Species.SURSKIT, Species.SCATTERBUG ], + GRANT: [ Species.AMAURA, Species.TYRUNT ], + KORRINA: [ Species.HAWLUCHA, Species.LUCARIO, Species.MIENFOO ], + RAMOS: [ Species.SKIDDO, Species.HOPPIP, Species.BELLSPROUT ], + CLEMONT: [ Species.HELIOPTILE, Species.MAGNEMITE, Species.EMOLGA ], + VALERIE: [ Species.SYLVEON, Species.MAWILE, Species.MR_MIME ], + OLYMPIA: [ Species.ESPURR, Species.SIGILYPH, Species.SLOWKING ], + WULFRIC: [ Species.BERGMITE, Species.SNOVER, Species.CRYOGONAL ], + MILO: [ Species.GOSSIFLEUR, Species.APPLIN, Species.BOUNSWEET ], + NESSA: [ Species.CHEWTLE, Species.ARROKUDA, Species.WIMPOD ], + KABU: [ Species.SIZZLIPEDE, Species.VULPIX, Species.TORKOAL ], + BEA: [ Species.GALAR_FARFETCHD, Species.MACHOP, Species.CLOBBOPUS ], + ALLISTER: [ Species.GALAR_YAMASK, Species.GALAR_CORSOLA, Species.GASTLY ], + OPAL: [ Species.MILCERY, Species.TOGETIC, Species.GALAR_WEEZING ], + BEDE: [ Species.HATENNA, Species.GALAR_PONYTA, Species.GARDEVOIR ], + GORDIE: [ Species.ROLYCOLY, Species.STONJOURNER, Species.BINACLE ], + MELONY: [ Species.SNOM, Species.GALAR_DARUMAKA, Species.GALAR_MR_MIME ], + PIERS: [ Species.GALAR_ZIGZAGOON, Species.SCRAGGY, Species.INKAY ], + MARNIE: [ Species.IMPIDIMP, Species.PURRLOIN, Species.MORPEKO ], + RAIHAN: [ Species.DURALUDON, Species.TURTONATOR, Species.GOOMY ], + KATY: [ Species.NYMBLE, Species.TAROUNTULA, Species.HERACROSS ], + BRASSIUS: [ Species.SMOLIV, Species.SHROOMISH, Species.ODDISH ], + IONO: [ Species.TADBULB, Species.WATTREL, Species.VOLTORB ], + KOFU: [ Species.VELUZA, Species.WIGLETT, Species.WINGULL ], + LARRY: [ Species.STARLY, Species.DUNSPARCE, Species.KOMALA ], + RYME: [ Species.GREAVARD, Species.SHUPPET, Species.MIMIKYU ], + TULIP: [ Species.GIRAFARIG, Species.FLITTLE, Species.RALTS ], + GRUSHA: [ Species.CETODDLE, Species.ALOLA_VULPIX, Species.CUBCHOO ], + LORELEI: [ Species.JYNX, [ Species.SLOWBRO, Species.GALAR_SLOWBRO ], Species.LAPRAS, [ Species.ALOLA_SANDSLASH, Species.CLOYSTER ]], + BRUNO: [ Species.MACHAMP, Species.HITMONCHAN, Species.HITMONLEE, [ Species.ALOLA_GOLEM, Species.GOLEM ]], + AGATHA: [ Species.GENGAR, [ Species.ARBOK, Species.WEEZING ], Species.CROBAT, Species.ALOLA_MAROWAK ], + LANCE: [ Species.DRAGONITE, Species.GYARADOS, Species.AERODACTYL, Species.ALOLA_EXEGGUTOR ], + WILL: [ Species.XATU, Species.JYNX, [ Species.SLOWBRO, Species.SLOWKING ], Species.EXEGGUTOR ], + KOGA: [[ Species.WEEZING, Species.MUK ], [ Species.VENOMOTH, Species.ARIADOS ], Species.CROBAT, Species.TENTACRUEL ], + KAREN: [ Species.UMBREON, Species.HONCHKROW, Species.HOUNDOOM, Species.WEAVILE ], + SIDNEY: [[ Species.SHIFTRY, Species.CACTURNE ], [ Species.SHARPEDO, Species.CRAWDAUNT ], Species.ABSOL, Species.MIGHTYENA ], + PHOEBE: [ Species.SABLEYE, Species.DUSKNOIR, Species.BANETTE, [ Species.MISMAGIUS, Species.DRIFBLIM ]], + GLACIA: [ Species.GLALIE, Species.WALREIN, Species.FROSLASS, Species.ABOMASNOW ], + DRAKE: [ Species.ALTARIA, Species.SALAMENCE, Species.FLYGON, Species.KINGDRA ], + AARON: [[ Species.SCIZOR, Species.KLEAVOR ], Species.HERACROSS, [ Species.VESPIQUEN, Species.YANMEGA ], Species.DRAPION ], + BERTHA: [ Species.WHISCASH, Species.HIPPOWDON, Species.GLISCOR, Species.RHYPERIOR ], + FLINT: [[ Species.FLAREON, Species.RAPIDASH ], Species.MAGMORTAR, [ Species.STEELIX, Species.LOPUNNY ], Species.INFERNAPE ], + LUCIAN: [ Species.MR_MIME, Species.GALLADE, Species.BRONZONG, [ Species.ALAKAZAM, Species.ESPEON ]], + SHAUNTAL: [ Species.COFAGRIGUS, Species.CHANDELURE, Species.GOLURK, Species.JELLICENT ], + MARSHAL: [ Species.CONKELDURR, Species.MIENSHAO, Species.THROH, Species.SAWK ], + GRIMSLEY: [ Species.LIEPARD, Species.KINGAMBIT, Species.SCRAFTY, Species.KROOKODILE ], + CAITLIN: [ Species.MUSHARNA, Species.GOTHITELLE, Species.SIGILYPH, Species.REUNICLUS ], + MALVA: [ Species.PYROAR, Species.TORKOAL, Species.CHANDELURE, Species.TALONFLAME ], + SIEBOLD: [ Species.CLAWITZER, Species.GYARADOS, Species.BARBARACLE, Species.STARMIE ], + WIKSTROM: [ Species.KLEFKI, Species.PROBOPASS, Species.SCIZOR, Species.AEGISLASH ], + DRASNA: [ Species.DRAGALGE, Species.DRUDDIGON, Species.ALTARIA, Species.NOIVERN ], + HALA: [ Species.HARIYAMA, Species.BEWEAR, Species.CRABOMINABLE, [ Species.POLIWRATH, Species.ANNIHILAPE ]], + MOLAYNE: [ Species.KLEFKI, Species.MAGNEZONE, Species.METAGROSS, Species.ALOLA_DUGTRIO ], + OLIVIA: [ Species.RELICANTH, Species.CARBINK, Species.ALOLA_GOLEM, Species.LYCANROC ], + ACEROLA: [[ Species.BANETTE, Species.DRIFBLIM ], Species.MIMIKYU, Species.DHELMISE, Species.PALOSSAND ], + KAHILI: [[ Species.BRAVIARY, Species.MANDIBUZZ ], Species.HAWLUCHA, Species.ORICORIO, Species.TOUCANNON ], + MARNIE_ELITE: [ Species.MORPEKO, Species.LIEPARD, [ Species.TOXICROAK, Species.SCRAFTY ], Species.GRIMMSNARL ], + NESSA_ELITE: [ Species.GOLISOPOD, [ Species.PELIPPER, Species.QUAGSIRE ], Species.TOXAPEX, Species.DREDNAW ], + BEA_ELITE: [ Species.HAWLUCHA, [ Species.GRAPPLOCT, Species.SIRFETCHD ], Species.FALINKS, Species.MACHAMP ], + ALLISTER_ELITE: [ Species.DUSKNOIR, [ Species.POLTEAGEIST, Species.RUNERIGUS ], Species.CURSOLA, Species.GENGAR ], + RAIHAN_ELITE: [ Species.GOODRA, [ Species.TORKOAL, Species.TURTONATOR ], Species.FLYGON, Species.ARCHALUDON ], + RIKA: [ Species.WHISCASH, [ Species.DONPHAN, Species.DUGTRIO ], Species.CAMERUPT, Species.CLODSIRE ], + POPPY: [ Species.COPPERAJAH, Species.BRONZONG, Species.CORVIKNIGHT, Species.TINKATON ], + LARRY_ELITE: [ Species.STARAPTOR, Species.FLAMIGO, Species.ALTARIA, Species.TROPIUS ], + HASSEL: [ Species.NOIVERN, [ Species.FLAPPLE, Species.APPLETUN ], Species.DRAGALGE, Species.BAXCALIBUR ], + CRISPIN: [ Species.TALONFLAME, Species.CAMERUPT, Species.MAGMORTAR, Species.BLAZIKEN ], + AMARYS: [ Species.SKARMORY, Species.EMPOLEON, Species.SCIZOR, Species.METAGROSS ], + LACEY: [ Species.EXCADRILL, Species.PRIMARINA, [ Species.ALCREMIE, Species.GRANBULL ], Species.WHIMSICOTT ], + DRAYTON: [ Species.DRAGONITE, Species.ARCHALUDON, Species.HAXORUS, Species.SCEPTILE ], + BLUE: [[ Species.GYARADOS, Species.EXEGGUTOR, Species.ARCANINE ], Species.HO_OH, [ Species.RHYPERIOR, Species.MAGNEZONE ]], // Alakazam lead, Mega Pidgeot + RED: [ Species.LUGIA, Species.SNORLAX, [ Species.ESPEON, Species.UMBREON, Species.SYLVEON ]], // GMax Pikachu lead, Mega gen 1 starter + LANCE_CHAMPION: [ Species.DRAGONITE, Species.KINGDRA, Species.ALOLA_EXEGGUTOR ], // Aerodactyl lead, Mega Latias/Latios + STEVEN: [ Species.AGGRON, [ Species.ARMALDO, Species.CRADILY ], Species.DIALGA ], // Skarmory lead, Mega Metagross + WALLACE: [ Species.MILOTIC, Species.PALKIA, Species.LUDICOLO ], // Pelipper lead, Mega Swampert + CYNTHIA: [ Species.GIRATINA, Species.LUCARIO, Species.TOGEKISS ], // Spiritomb lead, Mega Garchomp + ALDER: [ Species.VOLCARONA, Species.ZEKROM, [ Species.ACCELGOR, Species.ESCAVALIER ], Species.KELDEO ], // Bouffalant/Braviary lead + IRIS: [ Species.HAXORUS, Species.RESHIRAM, Species.ARCHEOPS ], // Druddigon lead, Gmax Lapras + DIANTHA: [ Species.HAWLUCHA, Species.XERNEAS, Species.GOODRA ], // Gourgeist lead, Mega Gardevoir + HAU: [[ Species.SOLGALEO, Species.LUNALA ], Species.NOIVERN, [ Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA ], [ Species.TAPU_BULU, Species.TAPU_FINI, Species.TAPU_KOKO, Species.TAPU_LELE ]], // Alola Raichu lead + LEON: [ Species.DRAGAPULT, Species.ZACIAN, Species.AEGISLASH ], // Rillaboom/Cinderace/Inteleon lead, GMax Charizard + GEETA: [ Species.MIRAIDON, [ Species.ESPATHRA, Species.VELUZA ], [ Species.AVALUGG, Species.HISUI_AVALUGG ], Species.KINGAMBIT ], // Glimmora lead + NEMONA: [ Species.KORAIDON, Species.PAWMOT, [ Species.DUDUNSPARCE, Species.ORTHWORM ], [ Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL ]], // Lycanroc lead + KIERAN: [[ Species.GRIMMSNARL, Species.INCINEROAR, Species.PORYGON_Z ], Species.OGERPON, Species.TERAPAGOS, Species.HYDRAPPLE ], // Poliwrath/Politoed lead }; export const trainerConfigs: TrainerConfigs = { @@ -1331,15 +1331,15 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.ACE_TRAINER]: new TrainerConfig(++t).setHasGenders("Ace Trainer Female").setHasDouble("Ace Duo").setMoneyMultiplier(2.25).setEncounterBgm(TrainerType.ACE_TRAINER) .setPartyTemplateFunc(scene => getWavePartyTemplate(scene, trainerPartyTemplates.THREE_WEAK_BALANCED, trainerPartyTemplates.FOUR_WEAK_BALANCED, trainerPartyTemplates.FIVE_WEAK_BALANCED, trainerPartyTemplates.SIX_WEAK_BALANCED)), [TrainerType.ARTIST]: new TrainerConfig(++t).setEncounterBgm(TrainerType.RICH).setPartyTemplates(trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.THREE_AVG) - .setSpeciesPools([Species.SMEARGLE]), + .setSpeciesPools([ Species.SMEARGLE ]), [TrainerType.BACKERS]: new TrainerConfig(++t).setHasGenders("Backers").setDoubleOnly().setEncounterBgm(TrainerType.CYCLIST), [TrainerType.BACKPACKER]: new TrainerConfig(++t).setHasGenders("Backpacker Female").setHasDouble("Backpackers").setSpeciesFilter(s => s.isOfType(Type.FLYING) || s.isOfType(Type.ROCK)).setEncounterBgm(TrainerType.BACKPACKER) .setPartyTemplates(trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.ONE_WEAK_ONE_STRONG, trainerPartyTemplates.ONE_AVG_ONE_STRONG) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.RHYHORN, Species.AIPOM, Species.MAKUHITA, Species.MAWILE, Species.NUMEL, Species.LILLIPUP, Species.SANDILE, Species.WOOLOO], - [TrainerPoolTier.UNCOMMON]: [Species.GIRAFARIG, Species.ZANGOOSE, Species.SEVIPER, Species.CUBCHOO, Species.PANCHAM, Species.SKIDDO, Species.MUDBRAY], - [TrainerPoolTier.RARE]: [Species.TAUROS, Species.STANTLER, Species.DARUMAKA, Species.BOUFFALANT, Species.DEERLING, Species.IMPIDIMP], - [TrainerPoolTier.SUPER_RARE]: [Species.GALAR_DARUMAKA, Species.TEDDIURSA] + [TrainerPoolTier.COMMON]: [ Species.RHYHORN, Species.AIPOM, Species.MAKUHITA, Species.MAWILE, Species.NUMEL, Species.LILLIPUP, Species.SANDILE, Species.WOOLOO ], + [TrainerPoolTier.UNCOMMON]: [ Species.GIRAFARIG, Species.ZANGOOSE, Species.SEVIPER, Species.CUBCHOO, Species.PANCHAM, Species.SKIDDO, Species.MUDBRAY ], + [TrainerPoolTier.RARE]: [ Species.TAUROS, Species.STANTLER, Species.DARUMAKA, Species.BOUFFALANT, Species.DEERLING, Species.IMPIDIMP ], + [TrainerPoolTier.SUPER_RARE]: [ Species.GALAR_DARUMAKA, Species.TEDDIURSA ] }), [TrainerType.BAKER]: new TrainerConfig(++t).setEncounterBgm(TrainerType.CLERK).setMoneyMultiplier(1.35).setSpeciesFilter(s => s.isOfType(Type.GRASS) || s.isOfType(Type.FIRE)), [TrainerType.BEAUTY]: new TrainerConfig(++t).setMoneyMultiplier(1.55).setEncounterBgm(TrainerType.PARASOL_LADY), @@ -1347,11 +1347,11 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.BLACK_BELT]: new TrainerConfig(++t).setHasGenders("Battle Girl", TrainerType.PSYCHIC).setHasDouble("Crush Kin").setEncounterBgm(TrainerType.ROUGHNECK).setSpecialtyTypes(Type.FIGHTING) .setPartyTemplates(trainerPartyTemplates.TWO_WEAK_ONE_AVG, trainerPartyTemplates.TWO_WEAK_ONE_AVG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_ONE_STRONG, trainerPartyTemplates.THREE_AVG, trainerPartyTemplates.TWO_AVG_ONE_STRONG) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.NIDORAN_F, Species.NIDORAN_M, Species.MACHOP, Species.MAKUHITA, Species.MEDITITE, Species.CROAGUNK, Species.TIMBURR], - [TrainerPoolTier.UNCOMMON]: [Species.MANKEY, Species.POLIWRATH, Species.TYROGUE, Species.BRELOOM, Species.SCRAGGY, Species.MIENFOO, Species.PANCHAM, Species.STUFFUL, Species.CRABRAWLER], - [TrainerPoolTier.RARE]: [Species.HERACROSS, Species.RIOLU, Species.THROH, Species.SAWK, Species.PASSIMIAN, Species.CLOBBOPUS], - [TrainerPoolTier.SUPER_RARE]: [Species.HITMONTOP, Species.INFERNAPE, Species.GALLADE, Species.HAWLUCHA, Species.HAKAMO_O], - [TrainerPoolTier.ULTRA_RARE]: [Species.KUBFU] + [TrainerPoolTier.COMMON]: [ Species.NIDORAN_F, Species.NIDORAN_M, Species.MACHOP, Species.MAKUHITA, Species.MEDITITE, Species.CROAGUNK, Species.TIMBURR ], + [TrainerPoolTier.UNCOMMON]: [ Species.MANKEY, Species.POLIWRATH, Species.TYROGUE, Species.BRELOOM, Species.SCRAGGY, Species.MIENFOO, Species.PANCHAM, Species.STUFFUL, Species.CRABRAWLER ], + [TrainerPoolTier.RARE]: [ Species.HERACROSS, Species.RIOLU, Species.THROH, Species.SAWK, Species.PASSIMIAN, Species.CLOBBOPUS ], + [TrainerPoolTier.SUPER_RARE]: [ Species.HITMONTOP, Species.INFERNAPE, Species.GALLADE, Species.HAWLUCHA, Species.HAKAMO_O ], + [TrainerPoolTier.ULTRA_RARE]: [ Species.KUBFU ] }), [TrainerType.BREEDER]: new TrainerConfig(++t).setMoneyMultiplier(1.325).setEncounterBgm(TrainerType.POKEFAN).setHasGenders("Breeder Female").setHasDouble("Breeders") .setPartyTemplateFunc(scene => getWavePartyTemplate(scene, trainerPartyTemplates.FOUR_WEAKER, trainerPartyTemplates.FIVE_WEAKER, trainerPartyTemplates.SIX_WEAKER)) @@ -1359,25 +1359,25 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.CLERK]: new TrainerConfig(++t).setHasGenders("Clerk Female").setHasDouble("Colleagues").setEncounterBgm(TrainerType.CLERK) .setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.THREE_WEAK, trainerPartyTemplates.ONE_AVG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_ONE_AVG) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.MEOWTH, Species.PSYDUCK, Species.BUDEW, Species.PIDOVE, Species.CINCCINO, Species.LITLEO], - [TrainerPoolTier.UNCOMMON]: [Species.JIGGLYPUFF, Species.MAGNEMITE, Species.MARILL, Species.COTTONEE, Species.SKIDDO], - [TrainerPoolTier.RARE]: [Species.BUIZEL, Species.SNEASEL, Species.KLEFKI, Species.INDEEDEE] + [TrainerPoolTier.COMMON]: [ Species.MEOWTH, Species.PSYDUCK, Species.BUDEW, Species.PIDOVE, Species.CINCCINO, Species.LITLEO ], + [TrainerPoolTier.UNCOMMON]: [ Species.JIGGLYPUFF, Species.MAGNEMITE, Species.MARILL, Species.COTTONEE, Species.SKIDDO ], + [TrainerPoolTier.RARE]: [ Species.BUIZEL, Species.SNEASEL, Species.KLEFKI, Species.INDEEDEE ] }), [TrainerType.CYCLIST]: new TrainerConfig(++t).setMoneyMultiplier(1.3).setHasGenders("Cyclist Female").setHasDouble("Cyclists").setEncounterBgm(TrainerType.CYCLIST) .setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.ONE_AVG) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.PICHU, Species.STARLY, Species.TAILLOW, Species.BOLTUND], - [TrainerPoolTier.UNCOMMON]: [Species.DODUO, Species.ELECTRIKE, Species.BLITZLE, Species.WATTREL], - [TrainerPoolTier.RARE]: [Species.YANMA, Species.NINJASK, Species.WHIRLIPEDE, Species.EMOLGA], - [TrainerPoolTier.SUPER_RARE]: [Species.ACCELGOR, Species.DREEPY] + [TrainerPoolTier.COMMON]: [ Species.PICHU, Species.STARLY, Species.TAILLOW, Species.BOLTUND ], + [TrainerPoolTier.UNCOMMON]: [ Species.DODUO, Species.ELECTRIKE, Species.BLITZLE, Species.WATTREL ], + [TrainerPoolTier.RARE]: [ Species.YANMA, Species.NINJASK, Species.WHIRLIPEDE, Species.EMOLGA ], + [TrainerPoolTier.SUPER_RARE]: [ Species.ACCELGOR, Species.DREEPY ] }), [TrainerType.DANCER]: new TrainerConfig(++t).setMoneyMultiplier(1.55).setEncounterBgm(TrainerType.CYCLIST) .setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.ONE_AVG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_SAME_TWO_WEAK_SAME) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.RALTS, Species.SPOINK, Species.LOTAD, Species.BUDEW], - [TrainerPoolTier.UNCOMMON]: [Species.SPINDA, Species.SWABLU, Species.MARACTUS,], - [TrainerPoolTier.RARE]: [Species.BELLOSSOM, Species.HITMONTOP, Species.MIME_JR, Species.ORICORIO], - [TrainerPoolTier.SUPER_RARE]: [Species.POPPLIO] + [TrainerPoolTier.COMMON]: [ Species.RALTS, Species.SPOINK, Species.LOTAD, Species.BUDEW ], + [TrainerPoolTier.UNCOMMON]: [ Species.SPINDA, Species.SWABLU, Species.MARACTUS, ], + [TrainerPoolTier.RARE]: [ Species.BELLOSSOM, Species.HITMONTOP, Species.MIME_JR, Species.ORICORIO ], + [TrainerPoolTier.SUPER_RARE]: [ Species.POPPLIO ] }), [TrainerType.DEPOT_AGENT]: new TrainerConfig(++t).setMoneyMultiplier(1.45).setEncounterBgm(TrainerType.CLERK), [TrainerType.DOCTOR]: new TrainerConfig(++t).setHasGenders("Nurse", "lass").setHasDouble("Medical Team").setMoneyMultiplier(3).setEncounterBgm(TrainerType.CLERK) @@ -1387,20 +1387,20 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.FISHERMAN]: new TrainerConfig(++t).setMoneyMultiplier(1.25).setEncounterBgm(TrainerType.BACKPACKER).setSpecialtyTypes(Type.WATER) .setPartyTemplates(trainerPartyTemplates.TWO_WEAK_SAME_ONE_AVG, trainerPartyTemplates.ONE_AVG, trainerPartyTemplates.THREE_WEAK_SAME, trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.SIX_WEAKER) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.TENTACOOL, Species.MAGIKARP, Species.GOLDEEN, Species.STARYU, Species.REMORAID, Species.SKRELP, Species.CLAUNCHER, Species.ARROKUDA], - [TrainerPoolTier.UNCOMMON]: [Species.POLIWAG, Species.SHELLDER, Species.KRABBY, Species.HORSEA, Species.CARVANHA, Species.BARBOACH, Species.CORPHISH, Species.FINNEON, Species.TYMPOLE, Species.BASCULIN, Species.FRILLISH, Species.INKAY], - [TrainerPoolTier.RARE]: [Species.CHINCHOU, Species.CORSOLA, Species.WAILMER, Species.BARBOACH, Species.CLAMPERL, Species.LUVDISC, Species.MANTYKE, Species.ALOMOMOLA, Species.TATSUGIRI, Species.VELUZA], - [TrainerPoolTier.SUPER_RARE]: [Species.LAPRAS, Species.FEEBAS, Species.RELICANTH, Species.DONDOZO] + [TrainerPoolTier.COMMON]: [ Species.TENTACOOL, Species.MAGIKARP, Species.GOLDEEN, Species.STARYU, Species.REMORAID, Species.SKRELP, Species.CLAUNCHER, Species.ARROKUDA ], + [TrainerPoolTier.UNCOMMON]: [ Species.POLIWAG, Species.SHELLDER, Species.KRABBY, Species.HORSEA, Species.CARVANHA, Species.BARBOACH, Species.CORPHISH, Species.FINNEON, Species.TYMPOLE, Species.BASCULIN, Species.FRILLISH, Species.INKAY ], + [TrainerPoolTier.RARE]: [ Species.CHINCHOU, Species.CORSOLA, Species.WAILMER, Species.BARBOACH, Species.CLAMPERL, Species.LUVDISC, Species.MANTYKE, Species.ALOMOMOLA, Species.TATSUGIRI, Species.VELUZA ], + [TrainerPoolTier.SUPER_RARE]: [ Species.LAPRAS, Species.FEEBAS, Species.RELICANTH, Species.DONDOZO ] }), [TrainerType.GUITARIST]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.ROUGHNECK).setSpecialtyTypes(Type.ELECTRIC).setSpeciesFilter(s => s.isOfType(Type.ELECTRIC)), [TrainerType.HARLEQUIN]: new TrainerConfig(++t).setEncounterBgm(TrainerType.PSYCHIC).setSpeciesFilter(s => tmSpecies[Moves.TRICK_ROOM].indexOf(s.speciesId) > -1), [TrainerType.HIKER]: new TrainerConfig(++t).setEncounterBgm(TrainerType.BACKPACKER) .setPartyTemplates(trainerPartyTemplates.TWO_AVG_SAME_ONE_AVG, trainerPartyTemplates.TWO_AVG_SAME_ONE_STRONG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.FOUR_WEAK, trainerPartyTemplates.ONE_STRONG) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.SANDSHREW, Species.DIGLETT, Species.GEODUDE, Species.MACHOP, Species.ARON, Species.ROGGENROLA, Species.DRILBUR, Species.NACLI], - [TrainerPoolTier.UNCOMMON]: [Species.ZUBAT, Species.RHYHORN, Species.ONIX, Species.CUBONE, Species.WOOBAT, Species.SWINUB, Species.NOSEPASS, Species.HIPPOPOTAS, Species.DWEBBLE, Species.KLAWF, Species.TOEDSCOOL], - [TrainerPoolTier.RARE]: [Species.TORKOAL, Species.TRAPINCH, Species.BARBOACH, Species.GOLETT, Species.ALOLA_DIGLETT, Species.ALOLA_GEODUDE, Species.GALAR_STUNFISK, Species.PALDEA_WOOPER], - [TrainerPoolTier.SUPER_RARE]: [Species.MAGBY, Species.LARVITAR] + [TrainerPoolTier.COMMON]: [ Species.SANDSHREW, Species.DIGLETT, Species.GEODUDE, Species.MACHOP, Species.ARON, Species.ROGGENROLA, Species.DRILBUR, Species.NACLI ], + [TrainerPoolTier.UNCOMMON]: [ Species.ZUBAT, Species.RHYHORN, Species.ONIX, Species.CUBONE, Species.WOOBAT, Species.SWINUB, Species.NOSEPASS, Species.HIPPOPOTAS, Species.DWEBBLE, Species.KLAWF, Species.TOEDSCOOL ], + [TrainerPoolTier.RARE]: [ Species.TORKOAL, Species.TRAPINCH, Species.BARBOACH, Species.GOLETT, Species.ALOLA_DIGLETT, Species.ALOLA_GEODUDE, Species.GALAR_STUNFISK, Species.PALDEA_WOOPER ], + [TrainerPoolTier.SUPER_RARE]: [ Species.MAGBY, Species.LARVITAR ] }), [TrainerType.HOOLIGANS]: new TrainerConfig(++t).setDoubleOnly().setEncounterBgm(TrainerType.ROUGHNECK).setSpeciesFilter(s => s.isOfType(Type.POISON) || s.isOfType(Type.DARK)), [TrainerType.HOOPSTER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), @@ -1416,11 +1416,11 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.OFFICER]: new TrainerConfig(++t).setMoneyMultiplier(1.55).setEncounterBgm(TrainerType.CLERK) .setPartyTemplates(trainerPartyTemplates.ONE_AVG, trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_SAME_ONE_AVG) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.VULPIX, Species.GROWLITHE, Species.SNUBBULL, Species.POOCHYENA, Species.ELECTRIKE, Species.LILLIPUP, Species.YAMPER, Species.FIDOUGH], - [TrainerPoolTier.UNCOMMON]: [Species.HOUNDOUR, Species.ROCKRUFF, Species.MASCHIFF], - [TrainerPoolTier.RARE]: [Species.JOLTEON, Species.RIOLU], + [TrainerPoolTier.COMMON]: [ Species.VULPIX, Species.GROWLITHE, Species.SNUBBULL, Species.POOCHYENA, Species.ELECTRIKE, Species.LILLIPUP, Species.YAMPER, Species.FIDOUGH ], + [TrainerPoolTier.UNCOMMON]: [ Species.HOUNDOUR, Species.ROCKRUFF, Species.MASCHIFF ], + [TrainerPoolTier.RARE]: [ Species.JOLTEON, Species.RIOLU ], [TrainerPoolTier.SUPER_RARE]: [], - [TrainerPoolTier.ULTRA_RARE]: [Species.ENTEI, Species.SUICUNE, Species.RAIKOU] + [TrainerPoolTier.ULTRA_RARE]: [ Species.ENTEI, Species.SUICUNE, Species.RAIKOU ] }), [TrainerType.PARASOL_LADY]: new TrainerConfig(++t).setMoneyMultiplier(1.55).setEncounterBgm(TrainerType.PARASOL_LADY).setSpeciesFilter(s => s.isOfType(Type.WATER)), [TrainerType.PILOT]: new TrainerConfig(++t).setEncounterBgm(TrainerType.CLERK).setSpeciesFilter(s => tmSpecies[Moves.FLY].indexOf(s.speciesId) > -1), @@ -1429,25 +1429,25 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.PRESCHOOLER]: new TrainerConfig(++t).setMoneyMultiplier(0.2).setEncounterBgm(TrainerType.YOUNGSTER).setHasGenders("Preschooler Female", "lass").setHasDouble("Preschoolers") .setPartyTemplates(trainerPartyTemplates.THREE_WEAK, trainerPartyTemplates.FOUR_WEAKER, trainerPartyTemplates.TWO_WEAK_SAME_ONE_AVG, trainerPartyTemplates.FIVE_WEAKER) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.CATERPIE, Species.PICHU, Species.SANDSHREW, Species.LEDYBA, Species.BUDEW, Species.BURMY, Species.WOOLOO, Species.PAWMI, Species.SMOLIV], - [TrainerPoolTier.UNCOMMON]: [Species.EEVEE, Species.CLEFFA, Species.IGGLYBUFF, Species.SWINUB, Species.WOOPER, Species.DRIFLOON, Species.DEDENNE, Species.STUFFUL], - [TrainerPoolTier.RARE]: [Species.RALTS, Species.RIOLU, Species.JOLTIK, Species.TANDEMAUS], - [TrainerPoolTier.SUPER_RARE]: [Species.DARUMAKA, Species.TINKATINK], + [TrainerPoolTier.COMMON]: [ Species.CATERPIE, Species.PICHU, Species.SANDSHREW, Species.LEDYBA, Species.BUDEW, Species.BURMY, Species.WOOLOO, Species.PAWMI, Species.SMOLIV ], + [TrainerPoolTier.UNCOMMON]: [ Species.EEVEE, Species.CLEFFA, Species.IGGLYBUFF, Species.SWINUB, Species.WOOPER, Species.DRIFLOON, Species.DEDENNE, Species.STUFFUL ], + [TrainerPoolTier.RARE]: [ Species.RALTS, Species.RIOLU, Species.JOLTIK, Species.TANDEMAUS ], + [TrainerPoolTier.SUPER_RARE]: [ Species.DARUMAKA, Species.TINKATINK ], }), [TrainerType.PSYCHIC]: new TrainerConfig(++t).setHasGenders("Psychic Female").setHasDouble("Psychics").setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.PSYCHIC) .setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_SAME_ONE_AVG, trainerPartyTemplates.TWO_WEAK_SAME_TWO_WEAK_SAME, trainerPartyTemplates.ONE_STRONGER) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.ABRA, Species.DROWZEE, Species.RALTS, Species.SPOINK, Species.GOTHITA, Species.SOLOSIS, Species.BLIPBUG, Species.ESPURR, Species.HATENNA], - [TrainerPoolTier.UNCOMMON]: [Species.MIME_JR, Species.EXEGGCUTE, Species.MEDITITE, Species.NATU, Species.EXEGGCUTE, Species.WOOBAT, Species.INKAY, Species.ORANGURU], - [TrainerPoolTier.RARE]: [Species.ELGYEM, Species.SIGILYPH, Species.BALTOY, Species.GIRAFARIG, Species.MEOWSTIC], - [TrainerPoolTier.SUPER_RARE]: [Species.BELDUM, Species.ESPEON, Species.STANTLER], + [TrainerPoolTier.COMMON]: [ Species.ABRA, Species.DROWZEE, Species.RALTS, Species.SPOINK, Species.GOTHITA, Species.SOLOSIS, Species.BLIPBUG, Species.ESPURR, Species.HATENNA ], + [TrainerPoolTier.UNCOMMON]: [ Species.MIME_JR, Species.EXEGGCUTE, Species.MEDITITE, Species.NATU, Species.EXEGGCUTE, Species.WOOBAT, Species.INKAY, Species.ORANGURU ], + [TrainerPoolTier.RARE]: [ Species.ELGYEM, Species.SIGILYPH, Species.BALTOY, Species.GIRAFARIG, Species.MEOWSTIC ], + [TrainerPoolTier.SUPER_RARE]: [ Species.BELDUM, Species.ESPEON, Species.STANTLER ], }), [TrainerType.RANGER]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setName("Pokémon Ranger").setEncounterBgm(TrainerType.BACKPACKER).setHasGenders("Pokémon Ranger Female").setHasDouble("Pokémon Rangers") .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.PICHU, Species.GROWLITHE, Species.PONYTA, Species.ZIGZAGOON, Species.SEEDOT, Species.BIDOOF, Species.RIOLU, Species.SEWADDLE, Species.SKIDDO, Species.SALANDIT, Species.YAMPER], - [TrainerPoolTier.UNCOMMON]: [Species.AZURILL, Species.TAUROS, Species.MAREEP, Species.FARFETCHD, Species.TEDDIURSA, Species.SHROOMISH, Species.ELECTRIKE, Species.BUDEW, Species.BUIZEL, Species.MUDBRAY, Species.STUFFUL], - [TrainerPoolTier.RARE]: [Species.EEVEE, Species.SCYTHER, Species.KANGASKHAN, Species.RALTS, Species.MUNCHLAX, Species.ZORUA, Species.PALDEA_TAUROS, Species.TINKATINK, Species.CYCLIZAR, Species.FLAMIGO], - [TrainerPoolTier.SUPER_RARE]: [Species.LARVESTA], + [TrainerPoolTier.COMMON]: [ Species.PICHU, Species.GROWLITHE, Species.PONYTA, Species.ZIGZAGOON, Species.SEEDOT, Species.BIDOOF, Species.RIOLU, Species.SEWADDLE, Species.SKIDDO, Species.SALANDIT, Species.YAMPER ], + [TrainerPoolTier.UNCOMMON]: [ Species.AZURILL, Species.TAUROS, Species.MAREEP, Species.FARFETCHD, Species.TEDDIURSA, Species.SHROOMISH, Species.ELECTRIKE, Species.BUDEW, Species.BUIZEL, Species.MUDBRAY, Species.STUFFUL ], + [TrainerPoolTier.RARE]: [ Species.EEVEE, Species.SCYTHER, Species.KANGASKHAN, Species.RALTS, Species.MUNCHLAX, Species.ZORUA, Species.PALDEA_TAUROS, Species.TINKATINK, Species.CYCLIZAR, Species.FLAMIGO ], + [TrainerPoolTier.SUPER_RARE]: [ Species.LARVESTA ], }), [TrainerType.RICH]: new TrainerConfig(++t).setMoneyMultiplier(5).setName("Gentleman").setHasGenders("Madame").setHasDouble("Rich Couple"), [TrainerType.RICH_KID]: new TrainerConfig(++t).setMoneyMultiplier(3.75).setName("Rich Boy").setHasGenders("Lady").setHasDouble("Rich Kids").setEncounterBgm(TrainerType.RICH), @@ -1455,150 +1455,150 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.SAILOR]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.BACKPACKER).setSpeciesFilter(s => s.isOfType(Type.WATER) || s.isOfType(Type.FIGHTING)), [TrainerType.SCIENTIST]: new TrainerConfig(++t).setHasGenders("Scientist Female").setHasDouble("Scientists").setMoneyMultiplier(1.7).setEncounterBgm(TrainerType.SCIENTIST) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.MAGNEMITE, Species.GRIMER, Species.DROWZEE, Species.VOLTORB, Species.KOFFING], - [TrainerPoolTier.UNCOMMON]: [Species.BALTOY, Species.BRONZOR, Species.FERROSEED, Species.KLINK, Species.CHARJABUG, Species.BLIPBUG, Species.HELIOPTILE], - [TrainerPoolTier.RARE]: [Species.ABRA, Species.DITTO, Species.PORYGON, Species.ELEKID, Species.SOLOSIS, Species.GALAR_WEEZING], - [TrainerPoolTier.SUPER_RARE]: [Species.OMANYTE, Species.KABUTO, Species.AERODACTYL, Species.LILEEP, Species.ANORITH, Species.CRANIDOS, Species.SHIELDON, Species.TIRTOUGA, Species.ARCHEN, Species.ARCTOVISH, Species.ARCTOZOLT, Species.DRACOVISH, Species.DRACOZOLT], - [TrainerPoolTier.ULTRA_RARE]: [Species.ROTOM, Species.MELTAN] + [TrainerPoolTier.COMMON]: [ Species.MAGNEMITE, Species.GRIMER, Species.DROWZEE, Species.VOLTORB, Species.KOFFING ], + [TrainerPoolTier.UNCOMMON]: [ Species.BALTOY, Species.BRONZOR, Species.FERROSEED, Species.KLINK, Species.CHARJABUG, Species.BLIPBUG, Species.HELIOPTILE ], + [TrainerPoolTier.RARE]: [ Species.ABRA, Species.DITTO, Species.PORYGON, Species.ELEKID, Species.SOLOSIS, Species.GALAR_WEEZING ], + [TrainerPoolTier.SUPER_RARE]: [ Species.OMANYTE, Species.KABUTO, Species.AERODACTYL, Species.LILEEP, Species.ANORITH, Species.CRANIDOS, Species.SHIELDON, Species.TIRTOUGA, Species.ARCHEN, Species.ARCTOVISH, Species.ARCTOZOLT, Species.DRACOVISH, Species.DRACOZOLT ], + [TrainerPoolTier.ULTRA_RARE]: [ Species.ROTOM, Species.MELTAN ] }), [TrainerType.SMASHER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), [TrainerType.SNOW_WORKER]: new TrainerConfig(++t).setName("Worker").setHasDouble("Workers").setMoneyMultiplier(1.7).setEncounterBgm(TrainerType.CLERK).setSpeciesFilter(s => s.isOfType(Type.ICE) || s.isOfType(Type.STEEL)), [TrainerType.STRIKER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), [TrainerType.SCHOOL_KID]: new TrainerConfig(++t).setMoneyMultiplier(0.75).setEncounterBgm(TrainerType.YOUNGSTER).setHasGenders("School Kid Female", "lass").setHasDouble("School Kids") .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.ODDISH, Species.EXEGGCUTE, Species.TEDDIURSA, Species.WURMPLE, Species.RALTS, Species.SHROOMISH, Species.FLETCHLING], - [TrainerPoolTier.UNCOMMON]: [Species.VOLTORB, Species.WHISMUR, Species.MEDITITE, Species.MIME_JR, Species.NYMBLE], - [TrainerPoolTier.RARE]: [Species.TANGELA, Species.EEVEE, Species.YANMA], - [TrainerPoolTier.SUPER_RARE]: [Species.TADBULB] + [TrainerPoolTier.COMMON]: [ Species.ODDISH, Species.EXEGGCUTE, Species.TEDDIURSA, Species.WURMPLE, Species.RALTS, Species.SHROOMISH, Species.FLETCHLING ], + [TrainerPoolTier.UNCOMMON]: [ Species.VOLTORB, Species.WHISMUR, Species.MEDITITE, Species.MIME_JR, Species.NYMBLE ], + [TrainerPoolTier.RARE]: [ Species.TANGELA, Species.EEVEE, Species.YANMA ], + [TrainerPoolTier.SUPER_RARE]: [ Species.TADBULB ] }), [TrainerType.SWIMMER]: new TrainerConfig(++t).setMoneyMultiplier(1.3).setEncounterBgm(TrainerType.PARASOL_LADY).setHasGenders("Swimmer Female").setHasDouble("Swimmers").setSpecialtyTypes(Type.WATER).setSpeciesFilter(s => s.isOfType(Type.WATER)), [TrainerType.TWINS]: new TrainerConfig(++t).setDoubleOnly().setMoneyMultiplier(0.65).setUseSameSeedForAllMembers() .setPartyTemplateFunc(scene => getWavePartyTemplate(scene, trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_STRONG)) - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.PLUSLE, Species.VOLBEAT, Species.PACHIRISU, Species.SILCOON, Species.METAPOD, Species.IGGLYBUFF, Species.PETILIL, Species.EEVEE])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.MINUN, Species.ILLUMISE, Species.EMOLGA, Species.CASCOON, Species.KAKUNA, Species.CLEFFA, Species.COTTONEE, Species.EEVEE], TrainerSlot.TRAINER_PARTNER)) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.PLUSLE, Species.VOLBEAT, Species.PACHIRISU, Species.SILCOON, Species.METAPOD, Species.IGGLYBUFF, Species.PETILIL, Species.EEVEE ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.MINUN, Species.ILLUMISE, Species.EMOLGA, Species.CASCOON, Species.KAKUNA, Species.CLEFFA, Species.COTTONEE, Species.EEVEE ], TrainerSlot.TRAINER_PARTNER)) .setEncounterBgm(TrainerType.TWINS), [TrainerType.VETERAN]: new TrainerConfig(++t).setHasGenders("Veteran Female").setHasDouble("Veteran Duo").setMoneyMultiplier(2.5).setEncounterBgm(TrainerType.ACE_TRAINER).setSpeciesFilter(s => s.isOfType(Type.DRAGON)), [TrainerType.WAITER]: new TrainerConfig(++t).setHasGenders("Waitress").setHasDouble("Restaurant Staff").setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.CLERK) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.CLEFFA, Species.CHATOT, Species.PANSAGE, Species.PANSEAR, Species.PANPOUR, Species.MINCCINO], - [TrainerPoolTier.UNCOMMON]: [Species.TROPIUS, Species.PETILIL, Species.BOUNSWEET, Species.INDEEDEE], - [TrainerPoolTier.RARE]: [Species.APPLIN, Species.SINISTEA, Species.POLTCHAGEIST] + [TrainerPoolTier.COMMON]: [ Species.CLEFFA, Species.CHATOT, Species.PANSAGE, Species.PANSEAR, Species.PANPOUR, Species.MINCCINO ], + [TrainerPoolTier.UNCOMMON]: [ Species.TROPIUS, Species.PETILIL, Species.BOUNSWEET, Species.INDEEDEE ], + [TrainerPoolTier.RARE]: [ Species.APPLIN, Species.SINISTEA, Species.POLTCHAGEIST ] }), [TrainerType.WORKER]: new TrainerConfig(++t).setHasGenders("Worker Female").setHasDouble("Workers").setEncounterBgm(TrainerType.CLERK).setMoneyMultiplier(1.7).setSpeciesFilter(s => s.isOfType(Type.ROCK) || s.isOfType(Type.STEEL)), [TrainerType.YOUNGSTER]: new TrainerConfig(++t).setMoneyMultiplier(0.5).setEncounterBgm(TrainerType.YOUNGSTER).setHasGenders("Lass", "lass").setHasDouble("Beginners").setPartyTemplates(trainerPartyTemplates.TWO_WEAKER) .setSpeciesPools( - [Species.CATERPIE, Species.WEEDLE, Species.RATTATA, Species.SENTRET, Species.POOCHYENA, Species.ZIGZAGOON, Species.WURMPLE, Species.BIDOOF, Species.PATRAT, Species.LILLIPUP] + [ Species.CATERPIE, Species.WEEDLE, Species.RATTATA, Species.SENTRET, Species.POOCHYENA, Species.ZIGZAGOON, Species.WURMPLE, Species.BIDOOF, Species.PATRAT, Species.LILLIPUP ] ), [TrainerType.ROCKET_GRUNT]: new TrainerConfig(++t).setHasGenders("Rocket Grunt Female").setHasDouble("Rocket Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.WEEDLE, Species.RATTATA, Species.EKANS, Species.SANDSHREW, Species.ZUBAT, Species.GEODUDE, Species.KOFFING, Species.GRIMER, Species.ODDISH, Species.SLOWPOKE], - [TrainerPoolTier.UNCOMMON]: [Species.GYARADOS, Species.LICKITUNG, Species.TAUROS, Species.MANKEY, Species.SCYTHER, Species.ELEKID, Species.MAGBY, Species.CUBONE, Species.GROWLITHE, Species.MURKROW, Species.GASTLY, Species.EXEGGCUTE, Species.VOLTORB, Species.MAGNEMITE], - [TrainerPoolTier.RARE]: [Species.PORYGON, Species.ALOLA_RATTATA, Species.ALOLA_SANDSHREW, Species.ALOLA_MEOWTH, Species.ALOLA_GRIMER, Species.ALOLA_GEODUDE, Species.PALDEA_TAUROS, Species.OMANYTE, Species.KABUTO], - [TrainerPoolTier.SUPER_RARE]: [Species.DRATINI, Species.LARVITAR] + [TrainerPoolTier.COMMON]: [ Species.WEEDLE, Species.RATTATA, Species.EKANS, Species.SANDSHREW, Species.ZUBAT, Species.GEODUDE, Species.KOFFING, Species.GRIMER, Species.ODDISH, Species.SLOWPOKE ], + [TrainerPoolTier.UNCOMMON]: [ Species.GYARADOS, Species.LICKITUNG, Species.TAUROS, Species.MANKEY, Species.SCYTHER, Species.ELEKID, Species.MAGBY, Species.CUBONE, Species.GROWLITHE, Species.MURKROW, Species.GASTLY, Species.EXEGGCUTE, Species.VOLTORB, Species.MAGNEMITE ], + [TrainerPoolTier.RARE]: [ Species.PORYGON, Species.ALOLA_RATTATA, Species.ALOLA_SANDSHREW, Species.ALOLA_MEOWTH, Species.ALOLA_GRIMER, Species.ALOLA_GEODUDE, Species.PALDEA_TAUROS, Species.OMANYTE, Species.KABUTO ], + [TrainerPoolTier.SUPER_RARE]: [ Species.DRATINI, Species.LARVITAR ] }), - [TrainerType.ARCHER]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin", "rocket", [Species.HOUNDOOM]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.ARIANA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin_female", "rocket", [Species.ARBOK]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.PROTON]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin", "rocket", [Species.CROBAT]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.PETREL]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin", "rocket", [Species.WEEZING]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.ARCHER]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin", "rocket", [ Species.HOUNDOOM ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.ARIANA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin_female", "rocket", [ Species.ARBOK ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.PROTON]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin", "rocket", [ Species.CROBAT ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.PETREL]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("rocket_admin", "rocket", [ Species.WEEZING ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), [TrainerType.MAGMA_GRUNT]: new TrainerConfig(++t).setHasGenders("Magma Grunt Female").setHasDouble("Magma Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.SLUGMA, Species.POOCHYENA, Species.NUMEL, Species.ZIGZAGOON, Species.DIGLETT, Species.MAGBY, Species.TORKOAL, Species.GROWLITHE, Species.BALTOY], - [TrainerPoolTier.UNCOMMON]: [Species.SOLROCK, Species.HIPPOPOTAS, Species.SANDACONDA, Species.PHANPY, Species.ROLYCOLY, Species.GLIGAR, Species.RHYHORN, Species.HEATMOR], - [TrainerPoolTier.RARE]: [Species.TRAPINCH, Species.LILEEP, Species.ANORITH, Species.HISUI_GROWLITHE, Species.TURTONATOR, Species.ARON], - [TrainerPoolTier.SUPER_RARE]: [Species.CAPSAKID, Species.CHARCADET] + [TrainerPoolTier.COMMON]: [ Species.SLUGMA, Species.POOCHYENA, Species.NUMEL, Species.ZIGZAGOON, Species.DIGLETT, Species.MAGBY, Species.TORKOAL, Species.GROWLITHE, Species.BALTOY ], + [TrainerPoolTier.UNCOMMON]: [ Species.SOLROCK, Species.HIPPOPOTAS, Species.SANDACONDA, Species.PHANPY, Species.ROLYCOLY, Species.GLIGAR, Species.RHYHORN, Species.HEATMOR ], + [TrainerPoolTier.RARE]: [ Species.TRAPINCH, Species.LILEEP, Species.ANORITH, Species.HISUI_GROWLITHE, Species.TURTONATOR, Species.ARON ], + [TrainerPoolTier.SUPER_RARE]: [ Species.CAPSAKID, Species.CHARCADET ] }), - [TrainerType.TABITHA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("magma_admin", "magma", [Species.CAMERUPT]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.COURTNEY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("magma_admin_female", "magma", [Species.CAMERUPT]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.TABITHA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("magma_admin", "magma", [ Species.CAMERUPT ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.COURTNEY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("magma_admin_female", "magma", [ Species.CAMERUPT ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), [TrainerType.AQUA_GRUNT]: new TrainerConfig(++t).setHasGenders("Aqua Grunt Female").setHasDouble("Aqua Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.CARVANHA, Species.WAILMER, Species.ZIGZAGOON, Species.LOTAD, Species.CORPHISH, Species.SPHEAL, Species.REMORAID, Species.QWILFISH, Species.BARBOACH], - [TrainerPoolTier.UNCOMMON]: [Species.CLAMPERL, Species.CHINCHOU, Species.WOOPER, Species.WINGULL, Species.TENTACOOL, Species.AZURILL, Species.CLOBBOPUS, Species.HORSEA], - [TrainerPoolTier.RARE]: [Species.MANTYKE, Species.DHELMISE, Species.HISUI_QWILFISH, Species.ARROKUDA, Species.PALDEA_WOOPER, Species.SKRELP], - [TrainerPoolTier.SUPER_RARE]: [Species.DONDOZO, Species.BASCULEGION] + [TrainerPoolTier.COMMON]: [ Species.CARVANHA, Species.WAILMER, Species.ZIGZAGOON, Species.LOTAD, Species.CORPHISH, Species.SPHEAL, Species.REMORAID, Species.QWILFISH, Species.BARBOACH ], + [TrainerPoolTier.UNCOMMON]: [ Species.CLAMPERL, Species.CHINCHOU, Species.WOOPER, Species.WINGULL, Species.TENTACOOL, Species.AZURILL, Species.CLOBBOPUS, Species.HORSEA ], + [TrainerPoolTier.RARE]: [ Species.MANTYKE, Species.DHELMISE, Species.HISUI_QWILFISH, Species.ARROKUDA, Species.PALDEA_WOOPER, Species.SKRELP ], + [TrainerPoolTier.SUPER_RARE]: [ Species.DONDOZO, Species.BASCULEGION ] }), - [TrainerType.MATT]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("aqua_admin", "aqua", [Species.SHARPEDO]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.SHELLY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("aqua_admin_female", "aqua", [Species.SHARPEDO]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.MATT]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("aqua_admin", "aqua", [ Species.SHARPEDO ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.SHELLY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("aqua_admin_female", "aqua", [ Species.SHARPEDO ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), [TrainerType.GALACTIC_GRUNT]: new TrainerConfig(++t).setHasGenders("Galactic Grunt Female").setHasDouble("Galactic Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.GLAMEOW, Species.STUNKY, Species.CROAGUNK, Species.SHINX, Species.WURMPLE, Species.BRONZOR, Species.DRIFLOON, Species.BURMY, Species.CARNIVINE], - [TrainerPoolTier.UNCOMMON]: [Species.LICKITUNG, Species.RHYHORN, Species.TANGELA, Species.ZUBAT, Species.YANMA, Species.SKORUPI, Species.GLIGAR, Species.SWINUB], - [TrainerPoolTier.RARE]: [Species.HISUI_GROWLITHE, Species.HISUI_QWILFISH, Species.SNEASEL, Species.ELEKID, Species.MAGBY, Species.DUSKULL], - [TrainerPoolTier.SUPER_RARE]: [Species.ROTOM, Species.SPIRITOMB, Species.HISUI_SNEASEL] + [TrainerPoolTier.COMMON]: [ Species.GLAMEOW, Species.STUNKY, Species.CROAGUNK, Species.SHINX, Species.WURMPLE, Species.BRONZOR, Species.DRIFLOON, Species.BURMY, Species.CARNIVINE ], + [TrainerPoolTier.UNCOMMON]: [ Species.LICKITUNG, Species.RHYHORN, Species.TANGELA, Species.ZUBAT, Species.YANMA, Species.SKORUPI, Species.GLIGAR, Species.SWINUB ], + [TrainerPoolTier.RARE]: [ Species.HISUI_GROWLITHE, Species.HISUI_QWILFISH, Species.SNEASEL, Species.ELEKID, Species.MAGBY, Species.DUSKULL ], + [TrainerPoolTier.SUPER_RARE]: [ Species.ROTOM, Species.SPIRITOMB, Species.HISUI_SNEASEL ] }), - [TrainerType.JUPITER]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander_female", "galactic", [Species.SKUNTANK]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.MARS]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander_female", "galactic", [Species.PURUGLY]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.SATURN]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander", "galactic", [Species.TOXICROAK]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.JUPITER]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander_female", "galactic", [ Species.SKUNTANK ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.MARS]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander_female", "galactic", [ Species.PURUGLY ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.SATURN]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander", "galactic", [ Species.TOXICROAK ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), [TrainerType.PLASMA_GRUNT]: new TrainerConfig(++t).setHasGenders("Plasma Grunt Female").setHasDouble("Plasma Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.PATRAT, Species.LILLIPUP, Species.PURRLOIN, Species.SCRAFTY, Species.WOOBAT, Species.VANILLITE, Species.SANDILE, Species.TRUBBISH, Species.TYMPOLE], - [TrainerPoolTier.UNCOMMON]: [Species.FRILLISH, Species.VENIPEDE, Species.GOLETT, Species.TIMBURR, Species.DARUMAKA, Species.FOONGUS, Species.JOLTIK, Species.CUBCHOO, Species.KLINK], - [TrainerPoolTier.RARE]: [Species.PAWNIARD, Species.RUFFLET, Species.VULLABY, Species.ZORUA, Species.DRILBUR, Species.MIENFOO, Species.DURANT, Species.BOUFFALANT], - [TrainerPoolTier.SUPER_RARE]: [Species.DRUDDIGON, Species.HISUI_ZORUA, Species.AXEW, Species.DEINO] + [TrainerPoolTier.COMMON]: [ Species.PATRAT, Species.LILLIPUP, Species.PURRLOIN, Species.SCRAFTY, Species.WOOBAT, Species.VANILLITE, Species.SANDILE, Species.TRUBBISH, Species.TYMPOLE ], + [TrainerPoolTier.UNCOMMON]: [ Species.FRILLISH, Species.VENIPEDE, Species.GOLETT, Species.TIMBURR, Species.DARUMAKA, Species.FOONGUS, Species.JOLTIK, Species.CUBCHOO, Species.KLINK ], + [TrainerPoolTier.RARE]: [ Species.PAWNIARD, Species.RUFFLET, Species.VULLABY, Species.ZORUA, Species.DRILBUR, Species.MIENFOO, Species.DURANT, Species.BOUFFALANT ], + [TrainerPoolTier.SUPER_RARE]: [ Species.DRUDDIGON, Species.HISUI_ZORUA, Species.AXEW, Species.DEINO ] }), - [TrainerType.ZINZOLIN]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("plasma_sage", "plasma", [Species.CRYOGONAL]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.ROOD]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("plasma_sage", "plasma", [Species.SWOOBAT]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.ZINZOLIN]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("plasma_sage", "plasma", [ Species.CRYOGONAL ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.ROOD]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("plasma_sage", "plasma", [ Species.SWOOBAT ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), [TrainerType.FLARE_GRUNT]: new TrainerConfig(++t).setHasGenders("Flare Grunt Female").setHasDouble("Flare Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.FLETCHLING, Species.LITLEO, Species.PONYTA, Species.INKAY, Species.HOUNDOUR, Species.SKORUPI, Species.SCRAFTY, Species.CROAGUNK, Species.SCATTERBUG, Species.ESPURR], - [TrainerPoolTier.UNCOMMON]: [Species.HELIOPTILE, Species.ELECTRIKE, Species.SKRELP, Species.PANCHAM, Species.PURRLOIN, Species.POOCHYENA, Species.BINACLE, Species.CLAUNCHER, Species.PUMPKABOO, Species.PHANTUMP], - [TrainerPoolTier.RARE]: [Species.LITWICK, Species.SNEASEL, Species.PAWNIARD, Species.SLIGGOO], - [TrainerPoolTier.SUPER_RARE]: [Species.NOIVERN, Species.HISUI_SLIGGOO, Species.HISUI_AVALUGG] + [TrainerPoolTier.COMMON]: [ Species.FLETCHLING, Species.LITLEO, Species.PONYTA, Species.INKAY, Species.HOUNDOUR, Species.SKORUPI, Species.SCRAFTY, Species.CROAGUNK, Species.SCATTERBUG, Species.ESPURR ], + [TrainerPoolTier.UNCOMMON]: [ Species.HELIOPTILE, Species.ELECTRIKE, Species.SKRELP, Species.PANCHAM, Species.PURRLOIN, Species.POOCHYENA, Species.BINACLE, Species.CLAUNCHER, Species.PUMPKABOO, Species.PHANTUMP ], + [TrainerPoolTier.RARE]: [ Species.LITWICK, Species.SNEASEL, Species.PAWNIARD, Species.SLIGGOO ], + [TrainerPoolTier.SUPER_RARE]: [ Species.NOIVERN, Species.HISUI_SLIGGOO, Species.HISUI_AVALUGG ] }), - [TrainerType.BRYONY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("flare_admin_female", "flare", [Species.LIEPARD]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), - [TrainerType.XEROSIC]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("flare_admin", "flare", [Species.MALAMAR]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.BRYONY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("flare_admin_female", "flare", [ Species.LIEPARD ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.XEROSIC]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("flare_admin", "flare", [ Species.MALAMAR ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), [TrainerType.AETHER_GRUNT]: new TrainerConfig(++t).setHasGenders("Aether Grunt Female").setHasDouble("Aether Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aether_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [ Species.PIKIPEK, Species.ROCKRUFF, Species.ALOLA_DIGLETT, Species.ALOLA_EXEGGUTOR, Species.YUNGOOS, Species.CORSOLA, Species.ALOLA_GEODUDE, Species.ALOLA_RAICHU, Species.BOUNSWEET, Species.LILLIPUP, Species.KOMALA, Species.MORELULL, Species.COMFEY, Species.TOGEDEMARU], - [TrainerPoolTier.UNCOMMON]: [ Species.POLIWAG, Species.STUFFUL, Species.ORANGURU, Species.PASSIMIAN, Species.BRUXISH, Species.MINIOR, Species.WISHIWASHI, Species.ALOLA_SANDSHREW, Species.ALOLA_VULPIX, Species.CRABRAWLER, Species.CUTIEFLY, Species.ORICORIO, Species.MUDBRAY, Species.PYUKUMUKU, Species.ALOLA_MAROWAK], - [TrainerPoolTier.RARE]: [ Species.GALAR_CORSOLA, Species.TURTONATOR, Species.MIMIKYU, Species.MAGNEMITE, Species.DRAMPA], - [TrainerPoolTier.SUPER_RARE]: [Species.JANGMO_O, Species.PORYGON] + [TrainerPoolTier.COMMON]: [ Species.PIKIPEK, Species.ROCKRUFF, Species.ALOLA_DIGLETT, Species.ALOLA_EXEGGUTOR, Species.YUNGOOS, Species.CORSOLA, Species.ALOLA_GEODUDE, Species.ALOLA_RAICHU, Species.BOUNSWEET, Species.LILLIPUP, Species.KOMALA, Species.MORELULL, Species.COMFEY, Species.TOGEDEMARU ], + [TrainerPoolTier.UNCOMMON]: [ Species.POLIWAG, Species.STUFFUL, Species.ORANGURU, Species.PASSIMIAN, Species.BRUXISH, Species.MINIOR, Species.WISHIWASHI, Species.ALOLA_SANDSHREW, Species.ALOLA_VULPIX, Species.CRABRAWLER, Species.CUTIEFLY, Species.ORICORIO, Species.MUDBRAY, Species.PYUKUMUKU, Species.ALOLA_MAROWAK ], + [TrainerPoolTier.RARE]: [ Species.GALAR_CORSOLA, Species.TURTONATOR, Species.MIMIKYU, Species.MAGNEMITE, Species.DRAMPA ], + [TrainerPoolTier.SUPER_RARE]: [ Species.JANGMO_O, Species.PORYGON ] }), - [TrainerType.FABA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("aether_admin", "aether", [Species.HYPNO]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aether_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.FABA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("aether_admin", "aether", [ Species.HYPNO ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aether_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), [TrainerType.SKULL_GRUNT]: new TrainerConfig(++t).setHasGenders("Skull Grunt Female").setHasDouble("Skull Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_skull_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [ Species.SALANDIT, Species.ALOLA_RATTATA, Species.EKANS, Species.ALOLA_MEOWTH, Species.SCRAGGY, Species.KOFFING, Species.ALOLA_GRIMER, Species.MAREANIE, Species.SPINARAK, Species.TRUBBISH, Species.DROWZEE], - [TrainerPoolTier.UNCOMMON]: [ Species.FOMANTIS, Species.SABLEYE, Species.SANDILE, Species.HOUNDOUR, Species.ALOLA_MAROWAK, Species.GASTLY, Species.PANCHAM, Species.ZUBAT, Species.VENIPEDE, Species.VULLABY], - [TrainerPoolTier.RARE]: [Species.SANDYGAST, Species.PAWNIARD, Species.MIMIKYU, Species.DHELMISE, Species.WISHIWASHI, Species.NYMBLE], - [TrainerPoolTier.SUPER_RARE]: [Species.GRUBBIN, Species.DEWPIDER] + [TrainerPoolTier.COMMON]: [ Species.SALANDIT, Species.ALOLA_RATTATA, Species.EKANS, Species.ALOLA_MEOWTH, Species.SCRAGGY, Species.KOFFING, Species.ALOLA_GRIMER, Species.MAREANIE, Species.SPINARAK, Species.TRUBBISH, Species.DROWZEE ], + [TrainerPoolTier.UNCOMMON]: [ Species.FOMANTIS, Species.SABLEYE, Species.SANDILE, Species.HOUNDOUR, Species.ALOLA_MAROWAK, Species.GASTLY, Species.PANCHAM, Species.ZUBAT, Species.VENIPEDE, Species.VULLABY ], + [TrainerPoolTier.RARE]: [ Species.SANDYGAST, Species.PAWNIARD, Species.MIMIKYU, Species.DHELMISE, Species.WISHIWASHI, Species.NYMBLE ], + [TrainerPoolTier.SUPER_RARE]: [ Species.GRUBBIN, Species.DEWPIDER ] }), - [TrainerType.PLUMERIA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("skull_admin", "skull", [Species.SALAZZLE]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_skull_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.PLUMERIA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("skull_admin", "skull", [ Species.SALAZZLE ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_skull_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), [TrainerType.MACRO_GRUNT]: new TrainerConfig(++t).setHasGenders("Macro Grunt Female").setHasDouble("Macro Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_macro_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [ Species.CUFANT, Species.GALAR_MEOWTH, Species.KLINK, Species.ROOKIDEE, Species.CRAMORANT, Species.GALAR_ZIGZAGOON, Species.SKWOVET, Species.STEELIX, Species.MAWILE, Species.FERROSEED], - [TrainerPoolTier.UNCOMMON]: [ Species.DRILBUR, Species.MAGNEMITE, Species.HATENNA, Species.ARROKUDA, Species.APPLIN, Species.GALAR_PONYTA, Species.GALAR_YAMASK, Species.SINISTEA, Species.RIOLU], - [TrainerPoolTier.RARE]: [Species.FALINKS, Species.BELDUM, Species.GALAR_FARFETCHD, Species.GALAR_MR_MIME, Species.HONEDGE, Species.SCIZOR, Species.GALAR_DARUMAKA], - [TrainerPoolTier.SUPER_RARE]: [Species.DURALUDON, Species.DREEPY] + [TrainerPoolTier.COMMON]: [ Species.CUFANT, Species.GALAR_MEOWTH, Species.KLINK, Species.ROOKIDEE, Species.CRAMORANT, Species.GALAR_ZIGZAGOON, Species.SKWOVET, Species.STEELIX, Species.MAWILE, Species.FERROSEED ], + [TrainerPoolTier.UNCOMMON]: [ Species.DRILBUR, Species.MAGNEMITE, Species.HATENNA, Species.ARROKUDA, Species.APPLIN, Species.GALAR_PONYTA, Species.GALAR_YAMASK, Species.SINISTEA, Species.RIOLU ], + [TrainerPoolTier.RARE]: [ Species.FALINKS, Species.BELDUM, Species.GALAR_FARFETCHD, Species.GALAR_MR_MIME, Species.HONEDGE, Species.SCIZOR, Species.GALAR_DARUMAKA ], + [TrainerPoolTier.SUPER_RARE]: [ Species.DURALUDON, Species.DREEPY ] }), - [TrainerType.OLEANA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("macro_admin", "macro", [Species.GARBODOR]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_oleana").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), + [TrainerType.OLEANA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("macro_admin", "macro", [ Species.GARBODOR ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_oleana").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), [TrainerType.STAR_GRUNT]: new TrainerConfig(++t).setHasGenders("Star Grunt Female").setHasDouble("Star Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_star_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ Species.DUNSPARCE, Species.HOUNDOUR, Species.AZURILL, Species.GULPIN, Species.FOONGUS, Species.FLETCHLING, Species.LITLEO, Species.FLABEBE, Species.CRABRAWLER, Species.NYMBLE, Species.PAWMI, Species.FIDOUGH, Species.SQUAWKABILLY, Species.MASCHIFF, Species.SHROODLE, Species.KLAWF, Species.WIGLETT, Species.PALDEA_WOOPER ], [TrainerPoolTier.UNCOMMON]: [ Species.KOFFING, Species.EEVEE, Species.GIRAFARIG, Species.RALTS, Species.TORKOAL, Species.SEVIPER, Species.SCRAGGY, Species.ZORUA, Species.MIMIKYU, Species.IMPIDIMP, Species.FALINKS, Species.CAPSAKID, Species.TINKATINK, Species.BOMBIRDIER, Species.CYCLIZAR, Species.FLAMIGO, Species.PALDEA_TAUROS ], - [TrainerPoolTier.RARE]: [ Species.MANKEY, Species.PAWNIARD, Species.CHARCADET, Species.FLITTLE, Species.VAROOM, Species.ORTHWORM], + [TrainerPoolTier.RARE]: [ Species.MANKEY, Species.PAWNIARD, Species.CHARCADET, Species.FLITTLE, Species.VAROOM, Species.ORTHWORM ], [TrainerPoolTier.SUPER_RARE]: [ Species.DONDOZO, Species.GIMMIGHOUL ] }), - [TrainerType.GIACOMO]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("star_admin", "star_1", [Species.KINGAMBIT]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_star_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.REVAVROOM], TrainerSlot.TRAINER, true, p => { + [TrainerType.GIACOMO]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("star_admin", "star_1", [ Species.KINGAMBIT ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_star_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.REVAVROOM ], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Segin Starmobile p.moveset = [ new PokemonMove(Moves.WICKED_TORQUE), new PokemonMove(Moves.SPIN_OUT), new PokemonMove(Moves.SHIFT_GEAR), new PokemonMove(Moves.HIGH_HORSEPOWER) ]; })), - [TrainerType.MELA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("star_admin", "star_2", [Species.ARMAROUGE]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_star_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.REVAVROOM], TrainerSlot.TRAINER, true, p => { + [TrainerType.MELA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("star_admin", "star_2", [ Species.ARMAROUGE ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_star_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.REVAVROOM ], TrainerSlot.TRAINER, true, p => { p.formIndex = 2; // Schedar Starmobile p.moveset = [ new PokemonMove(Moves.BLAZING_TORQUE), new PokemonMove(Moves.SPIN_OUT), new PokemonMove(Moves.SHIFT_GEAR), new PokemonMove(Moves.HIGH_HORSEPOWER) ]; })), - [TrainerType.ATTICUS]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("star_admin", "star_3", [Species.REVAVROOM]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_star_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.REVAVROOM], TrainerSlot.TRAINER, true, p => { + [TrainerType.ATTICUS]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("star_admin", "star_3", [ Species.REVAVROOM ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_star_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.REVAVROOM ], TrainerSlot.TRAINER, true, p => { p.formIndex = 3; // Navi Starmobile p.moveset = [ new PokemonMove(Moves.NOXIOUS_TORQUE), new PokemonMove(Moves.SPIN_OUT), new PokemonMove(Moves.SHIFT_GEAR), new PokemonMove(Moves.HIGH_HORSEPOWER) ]; })), - [TrainerType.ORTEGA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("star_admin", "star_4", [Species.DACHSBUN]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_star_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.REVAVROOM], TrainerSlot.TRAINER, true, p => { + [TrainerType.ORTEGA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("star_admin", "star_4", [ Species.DACHSBUN ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_star_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.REVAVROOM ], TrainerSlot.TRAINER, true, p => { p.formIndex = 4; // Ruchbah Starmobile p.moveset = [ new PokemonMove(Moves.MAGICAL_TORQUE), new PokemonMove(Moves.SPIN_OUT), new PokemonMove(Moves.SHIFT_GEAR), new PokemonMove(Moves.HIGH_HORSEPOWER) ]; })), - [TrainerType.ERI]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("star_admin", "star_5", [Species.ANNIHILAPE]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_star_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.REVAVROOM], TrainerSlot.TRAINER, true, p => { + [TrainerType.ERI]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("star_admin", "star_5", [ Species.ANNIHILAPE ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_star_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.REVAVROOM ], TrainerSlot.TRAINER, true, p => { p.formIndex = 5; // Caph Starmobile p.moveset = [ new PokemonMove(Moves.COMBAT_TORQUE), new PokemonMove(Moves.SPIN_OUT), new PokemonMove(Moves.SHIFT_GEAR), new PokemonMove(Moves.HIGH_HORSEPOWER) ]; })), @@ -1721,141 +1721,141 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.DRAYTON]: new TrainerConfig(++t).initForEliteFour(signatureSpecies["DRAYTON"], true, Type.DRAGON).setMixedBattleBgm("battle_bb_elite"), [TrainerType.BLUE]: new TrainerConfig((t = TrainerType.BLUE)).initForChampion(signatureSpecies["BLUE"], true).setBattleBgm("battle_kanto_champion").setMixedBattleBgm("battle_kanto_champion").setHasDouble("blue_red_double").setDoubleTrainerType(TrainerType.RED).setDoubleTitle("champion_double") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.ALAKAZAM], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.ALAKAZAM ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOT], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.PIDGEOT ], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Pidgeot p.generateAndPopulateMoveset(); p.generateName(); })), [TrainerType.RED]: new TrainerConfig(++t).initForChampion(signatureSpecies["RED"], true).setBattleBgm("battle_johto_champion").setMixedBattleBgm("battle_johto_champion").setHasDouble("red_blue_double").setDoubleTrainerType(TrainerType.BLUE).setDoubleTitle("champion_double") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.PIKACHU], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.PIKACHU ], TrainerSlot.TRAINER, true, p => { p.formIndex = 8; // G-Max Pikachu p.generateAndPopulateMoveset(); p.generateName(); })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE ], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Venusaur, Mega Charizard X, or Mega Blastoise p.generateAndPopulateMoveset(); p.generateName(); })), [TrainerType.LANCE_CHAMPION]: new TrainerConfig(++t).setName("Lance").initForChampion(signatureSpecies["LANCE_CHAMPION"], true).setBattleBgm("battle_johto_champion").setMixedBattleBgm("battle_johto_champion") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.AERODACTYL], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.AERODACTYL ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.LATIAS, Species.LATIOS], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.LATIAS, Species.LATIOS ], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Latias or Mega Latios p.generateAndPopulateMoveset(); p.generateName(); })), [TrainerType.STEVEN]: new TrainerConfig(++t).initForChampion(signatureSpecies["STEVEN"], true).setBattleBgm("battle_hoenn_champion_g5").setMixedBattleBgm("battle_hoenn_champion_g6").setHasDouble("steven_wallace_double").setDoubleTrainerType(TrainerType.WALLACE).setDoubleTitle("champion_double") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SKARMORY], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.SKARMORY ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.METAGROSS], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.METAGROSS ], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Metagross p.generateAndPopulateMoveset(); p.generateName(); })), [TrainerType.WALLACE]: new TrainerConfig(++t).initForChampion(signatureSpecies["WALLACE"], true).setBattleBgm("battle_hoenn_champion_g5").setMixedBattleBgm("battle_hoenn_champion_g6").setHasDouble("wallace_steven_double").setDoubleTrainerType(TrainerType.STEVEN).setDoubleTitle("champion_double") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.PELIPPER], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.PELIPPER ], TrainerSlot.TRAINER, true, p => { p.abilityIndex = 1; // Drizzle p.generateAndPopulateMoveset(); })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.SWAMPERT], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.SWAMPERT ], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Swampert p.generateAndPopulateMoveset(); p.generateName(); })), [TrainerType.CYNTHIA]: new TrainerConfig(++t).initForChampion(signatureSpecies["CYNTHIA"], false).setBattleBgm("battle_sinnoh_champion").setMixedBattleBgm("battle_sinnoh_champion") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SPIRITOMB], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.SPIRITOMB ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.GARCHOMP], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.GARCHOMP ], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Garchomp p.generateAndPopulateMoveset(); p.generateName(); })), [TrainerType.ALDER]: new TrainerConfig(++t).initForChampion(signatureSpecies["ALDER"], true).setHasDouble("alder_iris_double").setDoubleTrainerType(TrainerType.IRIS).setDoubleTitle("champion_double").setBattleBgm("battle_champion_alder").setMixedBattleBgm("battle_champion_alder") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.BOUFFALANT, Species.BRAVIARY], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.BOUFFALANT, Species.BRAVIARY ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); })), [TrainerType.IRIS]: new TrainerConfig(++t).initForChampion(signatureSpecies["IRIS"], false).setBattleBgm("battle_champion_iris").setMixedBattleBgm("battle_champion_iris").setHasDouble("iris_alder_double").setDoubleTrainerType(TrainerType.ALDER).setDoubleTitle("champion_double") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.DRUDDIGON], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.DRUDDIGON ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.LAPRAS], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.LAPRAS ], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // G-Max Lapras p.generateAndPopulateMoveset(); p.generateName(); })), [TrainerType.DIANTHA]: new TrainerConfig(++t).initForChampion(signatureSpecies["DIANTHA"], false).setMixedBattleBgm("battle_kalos_champion") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.GOURGEIST], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.GOURGEIST ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.GARDEVOIR], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.GARDEVOIR ], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; // Mega Gardevoir p.generateAndPopulateMoveset(); p.generateName(); })), [TrainerType.HAU]: new TrainerConfig(++t).initForChampion(signatureSpecies["HAU"], true).setMixedBattleBgm("battle_alola_champion") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.ALOLA_RAICHU], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.ALOLA_RAICHU ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); })), [TrainerType.LEON]: new TrainerConfig(++t).initForChampion(signatureSpecies["LEON"], true).setMixedBattleBgm("battle_galar_champion") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.RILLABOOM, Species.CINDERACE, Species.INTELEON], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.RILLABOOM, Species.CINDERACE, Species.INTELEON ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.CHARIZARD], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.CHARIZARD ], TrainerSlot.TRAINER, true, p => { p.formIndex = 3; // G-Max Charizard p.generateAndPopulateMoveset(); p.generateName(); })), [TrainerType.GEETA]: new TrainerConfig(++t).initForChampion(signatureSpecies["GEETA"], false).setMixedBattleBgm("battle_champion_geeta") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.GLIMMORA], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.GLIMMORA ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); })), [TrainerType.NEMONA]: new TrainerConfig(++t).initForChampion(signatureSpecies["NEMONA"], false).setMixedBattleBgm("battle_champion_nemona") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.LYCANROC], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.LYCANROC ], TrainerSlot.TRAINER, true, p => { p.formIndex = 0; // Midday form p.generateAndPopulateMoveset(); })), [TrainerType.KIERAN]: new TrainerConfig(++t).initForChampion(signatureSpecies["KIERAN"], true).setMixedBattleBgm("battle_champion_kieran") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.POLIWRATH, Species.POLITOED], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.POLIWRATH, Species.POLITOED ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); })), [TrainerType.RIVAL]: new TrainerConfig((t = TrainerType.RIVAL)).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setStaticParty().setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival").setMixedBattleBgm("battle_rival").setPartyTemplates(trainerPartyTemplates.RIVAL) .setModifierRewardFuncs(() => modifierTypes.SUPER_EXP_CHARM, () => modifierTypes.EXP_SHARE) - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE, Species.CHIKORITA, Species.CYNDAQUIL, Species.TOTODILE, Species.TREECKO, Species.TORCHIC, Species.MUDKIP, Species.TURTWIG, Species.CHIMCHAR, Species.PIPLUP, Species.SNIVY, Species.TEPIG, Species.OSHAWOTT, Species.CHESPIN, Species.FENNEKIN, Species.FROAKIE, Species.ROWLET, Species.LITTEN, Species.POPPLIO, Species.GROOKEY, Species.SCORBUNNY, Species.SOBBLE, Species.SPRIGATITO, Species.FUECOCO, Species.QUAXLY], TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEY, Species.HOOTHOOT, Species.TAILLOW, Species.STARLY, Species.PIDOVE, Species.FLETCHLING, Species.PIKIPEK, Species.ROOKIDEE, Species.WATTREL], TrainerSlot.TRAINER, true)), + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE, Species.CHIKORITA, Species.CYNDAQUIL, Species.TOTODILE, Species.TREECKO, Species.TORCHIC, Species.MUDKIP, Species.TURTWIG, Species.CHIMCHAR, Species.PIPLUP, Species.SNIVY, Species.TEPIG, Species.OSHAWOTT, Species.CHESPIN, Species.FENNEKIN, Species.FROAKIE, Species.ROWLET, Species.LITTEN, Species.POPPLIO, Species.GROOKEY, Species.SCORBUNNY, Species.SOBBLE, Species.SPRIGATITO, Species.FUECOCO, Species.QUAXLY ], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.PIDGEY, Species.HOOTHOOT, Species.TAILLOW, Species.STARLY, Species.PIDOVE, Species.FLETCHLING, Species.PIKIPEK, Species.ROOKIDEE, Species.WATTREL ], TrainerSlot.TRAINER, true)), [TrainerType.RIVAL_2]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setStaticParty().setMoneyMultiplier(1.25).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival").setMixedBattleBgm("battle_rival").setPartyTemplates(trainerPartyTemplates.RIVAL_2) .setModifierRewardFuncs(() => modifierTypes.EXP_SHARE) - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.IVYSAUR, Species.CHARMELEON, Species.WARTORTLE, Species.BAYLEEF, Species.QUILAVA, Species.CROCONAW, Species.GROVYLE, Species.COMBUSKEN, Species.MARSHTOMP, Species.GROTLE, Species.MONFERNO, Species.PRINPLUP, Species.SERVINE, Species.PIGNITE, Species.DEWOTT, Species.QUILLADIN, Species.BRAIXEN, Species.FROGADIER, Species.DARTRIX, Species.TORRACAT, Species.BRIONNE, Species.THWACKEY, Species.RABOOT, Species.DRIZZILE, Species.FLORAGATO, Species.CROCALOR, Species.QUAXWELL], TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOTTO, Species.HOOTHOOT, Species.TAILLOW, Species.STARAVIA, Species.TRANQUILL, Species.FLETCHINDER, Species.TRUMBEAK, Species.CORVISQUIRE, Species.WATTREL], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.IVYSAUR, Species.CHARMELEON, Species.WARTORTLE, Species.BAYLEEF, Species.QUILAVA, Species.CROCONAW, Species.GROVYLE, Species.COMBUSKEN, Species.MARSHTOMP, Species.GROTLE, Species.MONFERNO, Species.PRINPLUP, Species.SERVINE, Species.PIGNITE, Species.DEWOTT, Species.QUILLADIN, Species.BRAIXEN, Species.FROGADIER, Species.DARTRIX, Species.TORRACAT, Species.BRIONNE, Species.THWACKEY, Species.RABOOT, Species.DRIZZILE, Species.FLORAGATO, Species.CROCALOR, Species.QUAXWELL ], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.PIDGEOTTO, Species.HOOTHOOT, Species.TAILLOW, Species.STARAVIA, Species.TRANQUILL, Species.FLETCHINDER, Species.TRUMBEAK, Species.CORVISQUIRE, Species.WATTREL ], TrainerSlot.TRAINER, true)) .setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)), [TrainerType.RIVAL_3]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setStaticParty().setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival").setMixedBattleBgm("battle_rival").setPartyTemplates(trainerPartyTemplates.RIVAL_3) - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON, Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL], TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT, Species.KILOWATTREL], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON, Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL ], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT, Species.KILOWATTREL ], TrainerSlot.TRAINER, true)) .setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)) .setSpeciesFilter(species => species.baseTotal >= 540), [TrainerType.RIVAL_4]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setBoss().setStaticParty().setMoneyMultiplier(1.75).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival_2").setMixedBattleBgm("battle_rival_2").setPartyTemplates(trainerPartyTemplates.RIVAL_4) - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON, Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL], TrainerSlot.TRAINER, true)) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT, Species.KILOWATTREL], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON, Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL ], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT, Species.KILOWATTREL ], TrainerSlot.TRAINER, true)) .setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)) .setSpeciesFilter(species => species.baseTotal >= 540) .setGenModifiersFunc(party => { const starter = party[0]; - return [modifierTypes.TERA_SHARD().generateType([], [starter.species.type1])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(starter) as PersistentModifier]; // TODO: is the bang correct? + return [ modifierTypes.TERA_SHARD().generateType([], [ starter.species.type1 ])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(starter) as PersistentModifier ]; // TODO: is the bang correct? }), [TrainerType.RIVAL_5]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setBoss().setStaticParty().setMoneyMultiplier(2.25).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival_3").setMixedBattleBgm("battle_rival_3").setPartyTemplates(trainerPartyTemplates.RIVAL_5) - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON, Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL], TrainerSlot.TRAINER, true, + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON, Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL ], TrainerSlot.TRAINER, true, p => p.setBoss(true, 2))) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT, Species.KILOWATTREL], TrainerSlot.TRAINER, true)) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT, Species.KILOWATTREL ], TrainerSlot.TRAINER, true)) .setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)) .setSpeciesFilter(species => species.baseTotal >= 540) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.RAYQUAZA], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.RAYQUAZA ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 3); p.pokeball = PokeballType.MASTER_BALL; p.shiny = true; @@ -1863,22 +1863,22 @@ export const trainerConfigs: TrainerConfigs = { })) .setGenModifiersFunc(party => { const starter = party[0]; - return [modifierTypes.TERA_SHARD().generateType([], [starter.species.type1])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(starter) as PersistentModifier]; //TODO: is the bang correct? + return [ modifierTypes.TERA_SHARD().generateType([], [ starter.species.type1 ])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(starter) as PersistentModifier ]; //TODO: is the bang correct? }), [TrainerType.RIVAL_6]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setBoss().setStaticParty().setMoneyMultiplier(3).setEncounterBgm("final").setBattleBgm("battle_rival_3").setMixedBattleBgm("battle_rival_3").setPartyTemplates(trainerPartyTemplates.RIVAL_6) - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON, Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL], TrainerSlot.TRAINER, true, + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON, Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 3); p.generateAndPopulateMoveset(); })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT, Species.KILOWATTREL], TrainerSlot.TRAINER, true, + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT, Species.KILOWATTREL ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); })) .setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)) .setSpeciesFilter(species => species.baseTotal >= 540) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.RAYQUAZA], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.RAYQUAZA ], TrainerSlot.TRAINER, true, p => { p.setBoss(); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; @@ -1889,16 +1889,16 @@ export const trainerConfigs: TrainerConfigs = { })) .setGenModifiersFunc(party => { const starter = party[0]; - return [modifierTypes.TERA_SHARD().generateType([], [starter.species.type1])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(starter) as PersistentModifier]; // TODO: is the bang correct? + return [ modifierTypes.TERA_SHARD().generateType([], [ starter.species.type1 ])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(starter) as PersistentModifier ]; // TODO: is the bang correct? }), [TrainerType.ROCKET_BOSS_GIOVANNI_1]: new TrainerConfig(t = TrainerType.ROCKET_BOSS_GIOVANNI_1).setName("Giovanni").initForEvilTeamLeader("Rocket Boss", []).setMixedBattleBgm("battle_rocket_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.PERSIAN, Species.ALOLA_PERSIAN])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.DUGTRIO, Species.ALOLA_DUGTRIO])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.HONCHKROW])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.NIDOKING, Species.NIDOQUEEN])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.RHYPERIOR])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.KANGASKHAN], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.PERSIAN, Species.ALOLA_PERSIAN ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.DUGTRIO, Species.ALOLA_DUGTRIO ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.HONCHKROW ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.NIDOKING, Species.NIDOQUEEN ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.RHYPERIOR ])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.KANGASKHAN ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; @@ -1906,21 +1906,21 @@ export const trainerConfigs: TrainerConfigs = { p.generateName(); })), [TrainerType.ROCKET_BOSS_GIOVANNI_2]: new TrainerConfig(++t).setName("Giovanni").initForEvilTeamLeader("Rocket Boss", [], true).setMixedBattleBgm("battle_rocket_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.TYRANITAR, Species.IRON_THORNS], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.TYRANITAR, Species.IRON_THORNS ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.HIPPOWDON])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.EXCADRILL, Species.GARCHOMP])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.KANGASKHAN], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.HIPPOWDON ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.EXCADRILL, Species.GARCHOMP ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.KANGASKHAN ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; p.formIndex = 1; // Mega Kangaskhan p.generateName(); })) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.GASTRODON, Species.SEISMITOAD], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.GASTRODON, Species.SEISMITOAD ], TrainerSlot.TRAINER, true, p => { //Storm Drain Gastrodon, Water Absorb Seismitoad if (p.species.speciesId === Species.GASTRODON) { p.abilityIndex = 0; @@ -1928,18 +1928,18 @@ export const trainerConfigs: TrainerConfigs = { p.abilityIndex = 2; } })) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.MEWTWO], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.MEWTWO ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; })), [TrainerType.MAXIE]: new TrainerConfig(++t).setName("Maxie").initForEvilTeamLeader("Magma Boss", []).setMixedBattleBgm("battle_aqua_magma_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.MIGHTYENA])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.CROBAT, Species.GLISCOR])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.WEEZING, Species.GALAR_WEEZING])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.MAGMORTAR, Species.TORKOAL])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.FLYGON])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.CAMERUPT], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.MIGHTYENA ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.CROBAT, Species.GLISCOR ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.WEEZING, Species.GALAR_WEEZING ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.MAGMORTAR, Species.TORKOAL ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.FLYGON ])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.CAMERUPT ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; @@ -1947,39 +1947,39 @@ export const trainerConfigs: TrainerConfigs = { p.generateName(); })), [TrainerType.MAXIE_2]: new TrainerConfig(++t).setName("Maxie").initForEvilTeamLeader("Magma Boss", [], true).setMixedBattleBgm("battle_aqua_magma_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SOLROCK, Species.TYPHLOSION], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.SOLROCK, Species.TYPHLOSION ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.TORKOAL, Species.NINETALES], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.TORKOAL, Species.NINETALES ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.abilityIndex = 2; // Drought })) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.SHIFTRY, Species.SCOVILLAIN], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SHIFTRY, Species.SCOVILLAIN ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.abilityIndex = 0; // Chlorophyll })) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GREAT_TUSK])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CAMERUPT], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GREAT_TUSK ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.CAMERUPT ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; p.formIndex = 1; // Mega Camerupt p.generateName(); })) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.GROUDON], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.GROUDON ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; })), [TrainerType.ARCHIE]: new TrainerConfig(++t).setName("Archie").initForEvilTeamLeader("Aqua Boss", []).setMixedBattleBgm("battle_aqua_magma_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.LINOONE])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.CROBAT, Species.PELIPPER])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.MUK, Species.ALOLA_MUK])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.TENTACRUEL])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.RELICANTH, Species.WAILORD])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.SHARPEDO], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.LINOONE ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.CROBAT, Species.PELIPPER ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.MUK, Species.ALOLA_MUK ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.TENTACRUEL ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.RELICANTH, Species.WAILORD ])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.SHARPEDO ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; @@ -1987,16 +1987,16 @@ export const trainerConfigs: TrainerConfigs = { p.generateName(); })), [TrainerType.ARCHIE_2]: new TrainerConfig(++t).setName("Archie").initForEvilTeamLeader("Aqua Boss", [], true).setMixedBattleBgm("battle_aqua_magma_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.EMPOLEON, Species.LUDICOLO], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.EMPOLEON, Species.LUDICOLO ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.POLITOED, Species.PELIPPER], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.POLITOED, Species.PELIPPER ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.abilityIndex = 2; // Drizzle })) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.BEARTIC, Species.ARMALDO], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.BEARTIC, Species.ARMALDO ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.abilityIndex = 2; // Swift Swim })) @@ -2004,14 +2004,14 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.abilityIndex = 1; // Swift Swim })) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SHARPEDO], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.SHARPEDO ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; p.formIndex = 1; // Mega Sharpedo p.generateName(); })) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.KYOGRE], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.KYOGRE ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; @@ -2027,41 +2027,41 @@ export const trainerConfigs: TrainerConfigs = { p.formIndex = 1; // Mega Houndoom p.generateName(); })) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.WEAVILE], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.WEAVILE ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; })), [TrainerType.CYRUS_2]: new TrainerConfig(++t).setName("Cyrus").initForEvilTeamLeader("Galactic Boss", [], true).setMixedBattleBgm("battle_galactic_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.AZELF, Species.UXIE, Species.MESPRIT], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.AZELF, Species.UXIE, Species.MESPRIT ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.ELECTRODE, Species.HISUI_ELECTRODE])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.SALAMENCE, Species.ROARING_MOON])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.HOUNDOOM], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.ELECTRODE, Species.HISUI_ELECTRODE ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SALAMENCE, Species.ROARING_MOON ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.HOUNDOOM ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; p.formIndex = 1; // Mega Houndoom p.generateName(); })) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.WEAVILE, Species.SNEASLER], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.WEAVILE, Species.SNEASLER ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; })) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.DARKRAI], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.DARKRAI ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; })), [TrainerType.GHETSIS]: new TrainerConfig(++t).setName("Ghetsis").initForEvilTeamLeader("Plasma Boss", []).setMixedBattleBgm("battle_plasma_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.COFAGRIGUS, Species.RUNERIGUS])) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.BOUFFALANT])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.SEISMITOAD, Species.CARRACOSTA])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.EELEKTROSS, Species.GALVANTULA])) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.VOLCARONA])) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.HYDREIGON], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.COFAGRIGUS, Species.RUNERIGUS ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.BOUFFALANT ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SEISMITOAD, Species.CARRACOSTA ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.EELEKTROSS, Species.GALVANTULA ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.VOLCARONA ])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.HYDREIGON ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; @@ -2085,7 +2085,7 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; })) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.KYUREM], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.KYUREM ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; @@ -2107,7 +2107,7 @@ export const trainerConfigs: TrainerConfigs = { p.generateName(); })), [TrainerType.LYSANDRE_2]: new TrainerConfig(++t).setName("Lysandre").initForEvilTeamLeader("Flare Boss", [], true).setMixedBattleBgm("battle_flare_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SCREAM_TAIL, Species.FLUTTER_MANE], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.SCREAM_TAIL, Species.FLUTTER_MANE ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; @@ -2125,7 +2125,7 @@ export const trainerConfigs: TrainerConfigs = { p.formIndex = 1; // Mega Gyardos p.generateName(); })) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.YVELTAL], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.YVELTAL ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; @@ -2181,7 +2181,7 @@ export const trainerConfigs: TrainerConfigs = { p.abilityIndex = 2; } })) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GALVANTULA, Species.VIKAVOLT])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GALVANTULA, Species.VIKAVOLT ])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.PINSIR ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.formIndex = 1; // Mega Pinsir @@ -2287,7 +2287,7 @@ export const trainerConfigs: TrainerConfigs = { })) .setGenModifiersFunc(party => { const teraPokemon = party[4]; - return [modifierTypes.TERA_SHARD().generateType([], [teraPokemon.species.type1])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(teraPokemon) as PersistentModifier]; //TODO: is the bang correct? + return [ modifierTypes.TERA_SHARD().generateType([], [ teraPokemon.species.type1 ])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(teraPokemon) as PersistentModifier ]; //TODO: is the bang correct? }), [TrainerType.PENNY_2]: new TrainerConfig(++t).setName("Cassiopeia").initForEvilTeamLeader("Star Boss", [], true).setMixedBattleBgm("battle_star_boss").setVictoryBgm("victory_team_plasma") .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.REVAVROOM ], TrainerSlot.TRAINER, true, p => { @@ -2319,7 +2319,7 @@ export const trainerConfigs: TrainerConfigs = { })) .setGenModifiersFunc(party => { const teraPokemon = party[3]; - return [modifierTypes.TERA_SHARD().generateType([], [teraPokemon.species.type1])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(teraPokemon) as PersistentModifier]; //TODO: is the bang correct? + return [ modifierTypes.TERA_SHARD().generateType([], [ teraPokemon.species.type1 ])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(teraPokemon) as PersistentModifier ]; //TODO: is the bang correct? }), [TrainerType.BUCK]: new TrainerConfig(++t).setName("Buck").initForStatTrainer([], true) .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.CLAYDOL ], TrainerSlot.TRAINER, true, p => { diff --git a/src/data/trainer-names.ts b/src/data/trainer-names.ts index 899702ff193..d075b7121f2 100644 --- a/src/data/trainer-names.ts +++ b/src/data/trainer-names.ts @@ -75,56 +75,56 @@ const trainerNameConfigs: TrainerNameConfigs = { }; export const trainerNamePools = { - [TrainerType.ACE_TRAINER]: [["Aaron", "Allen", "Blake", "Brian", "Gaven", "Jake", "Kevin", "Mike", "Nick", "Paul", "Ryan", "Sean", "Darin", "Albert", "Berke", "Clyde", "Edgar", "George", "Leroy", "Owen", "Parker", "Randall", "Ruben", "Samuel", "Vincent", "Warren", "Wilton", "Zane", "Alfred", "Braxton", "Felix", "Gerald", "Jonathan", "Leonel", "Marcel", "Mitchell", "Quincy", "Roderick", "Colby", "Rolando", "Yuji", "Abel", "Anton", "Arthur", "Cesar", "Dalton", "Dennis", "Ernest", "Garrett", "Graham", "Henry", "Isaiah", "Jonah", "Jose", "Keenan", "Micah", "Omar", "Quinn", "Rodolfo", "Saul", "Sergio", "Skylar", "Stefan", "Zachery", "Alton", "Arabella", "Bonita", "Cal", "Cody", "French", "Kobe", "Paulo", "Shaye", "Austin", "Beckett", "Charlie", "Corky", "David", "Dwayne", "Elmer", "Jesse", "Jared", "Johan", "Jordan", "Kipp", "Lou", "Terry", "Tom", "Webster", "Billy", "Doyle", "Enzio", "Geoff", "Grant", "Kelsey", "Miguel", "Pierce", "Ray", "Santino", "Shel", "Adelbert", "Bence", "Emil", "Evan", "Mathis", "Maxim", "Neil", "Rico", "Robbie", "Theo", "Viktor", "Benedict", "Cornelius", "Hisato", "Leopold", "Neville", "Vito", "Chase", "Cole", "Hiroshi", "Jackson", "Jim", "Kekoa", "Makana", "Yuki", "Elwood", "Seth", "Alvin", "Arjun", "Arnold", "Cameron", "Carl", "Carlton", "Christopher", "Dave", "Dax", "Dominic", "Edmund", "Finn", "Fred", "Garret", "Grayson", "Jace", "Jaxson", "Jay", "Jirard", "Johnson", "Kayden", "Kite", "Louis", "Mac", "Marty", "Percy", "Raymond", "Ronnie", "Satch", "Tim", "Zach", "Conner", "Vince", "Bedro", "Boda", "Botan", "Daras", "Dury", "Herton", "Rewn", "Stum", "Tock", "Trilo", "Berki", "Cruik", "Dazon", "Desid", "Dillot", "Farfin", "Forgon", "Hebel", "Morfon", "Moril", "Shadd", "Vanhub", "Bardo", "Carben", "Degin", "Gorps", "Klept", "Lask", "Malex", "Mopar", "Niled", "Noxon", "Teslor", "Tetil"], ["Beth", "Carol", "Cybil", "Emma", "Fran", "Gwen", "Irene", "Jenn", "Joyce", "Kate", "Kelly", "Lois", "Lola", "Megan", "Quinn", "Reena", "Cara", "Alexa", "Brooke", "Caroline", "Elaine", "Hope", "Jennifer", "Jody", "Julie", "Lori", "Mary", "Michelle", "Shannon", "Wendy", "Alexia", "Alicia", "Athena", "Carolina", "Cristin", "Darcy", "Dianne", "Halle", "Jazmyn", "Katelynn", "Keira", "Marley", "Allyson", "Kathleen", "Naomi", "Alyssa", "Ariana", "Brandi", "Breanna", "Brenda", "Brenna", "Catherine", "Clarice", "Dana", "Deanna", "Destiny", "Jamie", "Jasmin", "Kassandra", "Laura", "Maria", "Mariah", "Maya", "Meagan", "Mikayla", "Monique", "Natasha", "Olivia", "Sandra", "Savannah", "Sydney", "Moira", "Piper", "Salma", "Allison", "Beverly", "Cathy", "Cheyenne", "Clara", "Dara", "Eileen", "Glinda", "Junko", "Lena", "Lucille", "Mariana", "Olwen", "Shanta", "Stella", "Angi", "Belle", "Chandra", "Cora", "Eve", "Jacqueline", "Jeanne", "Juliet", "Kathrine", "Layla", "Lucca", "Melina", "Miki", "Nina", "Sable", "Shelly", "Summer", "Trish", "Vicki", "Alanza", "Cordelia", "Hilde", "Imelda", "Michele", "Mireille", "Claudia", "Constance", "Harriet", "Honor", "Melba", "Portia", "Alexis", "Angela", "Karla", "Lindsey", "Tori", "Sheri", "Jada", "Kailee", "Amanda", "Annie", "Kindra", "Kyla", "Sofia", "Yvette", "Becky", "Flora", "Gloria", "Buna", "Ferda", "Lehan", "Liqui", "Lomen", "Neira", "Atilo", "Detta", "Gilly", "Gosney", "Levens", "Moden", "Rask", "Rateis", "Rosno", "Tynan", "Veron", "Zoel", "Cida", "Dibsin", "Dodin", "Ebson", "Equin", "Flostin", "Gabsen", "Halsion", "Hileon", "Quelor", "Rapeel", "Roze", "Tensin"]], - [TrainerType.ARTIST]: [["Ismael", "William", "Horton", "Pierre", "Zach", "Gough", "Salvador", "Vincent", "Duncan"], ["Georgia"]], - [TrainerType.BACKERS]: [["Alf & Fred", "Hawk & Dar", "Joe & Ross", "Les & Web", "Masa & Yas", "Stu & Art"], ["Ai & Ciel", "Ami & Eira", "Cam & Abby", "Fey & Sue", "Kat & Phae", "Kay & Ali", "Ava & Aya", "Cleo & Rio", "May & Mal"]], - [TrainerType.BACKPACKER]: [["Alexander", "Carlos", "Herman", "Jerome", "Keane", "Kelsey", "Kiyo", "Michael", "Nate", "Peter", "Sam", "Stephen", "Talon", "Terrance", "Toru", "Waylon", "Boone", "Clifford", "Ivan", "Kendall", "Lowell", "Randall", "Reece", "Roland", "Shane", "Walt", "Farid", "Heike", "Joren", "Lane", "Roderick", "Darnell", "Deon", "Emory", "Graeme", "Grayson", "Aitor", "Alex", "Arturo", "Asier", "Jaime", "Jonathan", "Julio", "Kevin", "Kosuke", "Lander", "Markel", "Mateo", "Nil", "Pau", "Samuel"], ["Anna", "Corin", "Elaine", "Emi", "Jill", "Kumiko", "Liz", "Lois", "Lora", "Molly", "Patty", "Ruth", "Vicki", "Annie", "Blossom", "Clara", "Eileen", "Mae", "Myra", "Rachel", "Tami", "Ashley", "Mikiko", "Kiana", "Perdy", "Maria", "Yuho", "Peren", "Barbara", "Diane"]], - [TrainerType.BAKER]: ["Chris", "Jenn", "Lilly"], - [TrainerType.BEAUTY]: ["Cassie", "Julia", "Olivia", "Samantha", "Valerie", "Victoria", "Bridget", "Connie", "Jessica", "Johanna", "Melissa", "Sheila", "Shirley", "Tiffany", "Namiko", "Thalia", "Grace", "Lola", "Lori", "Maura", "Tamia", "Cyndy", "Devon", "Gabriella", "Harley", "Lindsay", "Nicola", "Callie", "Charlotte", "Kassandra", "December", "Fleming", "Nikola", "Aimee", "Anais", "Brigitte", "Cassandra", "Andrea", "Brittney", "Carolyn", "Krystal", "Alexis", "Alice", "Aina", "Anya", "Arianna", "Aubrey", "Beverly", "Camille", "Beauty", "Evette", "Hansol", "Haruka", "Jill", "Jo", "Lana", "Lois", "Lucy", "Mai", "Nickie", "Nicole", "Prita", "Rose", "Shelly", "Suzy", "Tessa", "Anita", "Alissa", "Rita", "Cudsy", "Eloff", "Miru", "Minot", "Nevah", "Niven", "Ogoin"], - [TrainerType.BIKER]: ["Charles", "Dwayne", "Glenn", "Harris", "Joel", "Riley", "Zeke", "Alex", "Billy", "Ernest", "Gerald", "Hideo", "Isaac", "Jared", "Jaren", "Jaxon", "Jordy", "Lao", "Lukas", "Malik", "Nikolas", "Ricardo", "Ruben", "Virgil", "William", "Aiden", "Dale", "Dan", "Jacob", "Markey", "Reese", "Teddy", "Theron", "Jeremy", "Morgann", "Phillip", "Philip", "Stanley", "Dillon"], - [TrainerType.BLACK_BELT]: [["Kenji", "Lao", "Lung", "Nob", "Wai", "Yoshi", "Atsushi", "Daisuke", "Hideki", "Hitoshi", "Kiyo", "Koichi", "Koji", "Yuji", "Cristian", "Rhett", "Takao", "Theodore", "Zander", "Aaron", "Hugh", "Mike", "Nicolas", "Shea", "Takashi", "Adam", "Carl", "Colby", "Darren", "David", "Davon", "Derek", "Eddie", "Gregory", "Griffin", "Jarrett", "Jeffery", "Kendal", "Kyle", "Luke", "Miles", "Nathaniel", "Philip", "Rafael", "Ray", "Ricky", "Sean", "Willie", "Ander", "Manford", "Benjamin", "Corey", "Edward", "Grant", "Jay", "Kendrew", "Kentaro", "Ryder", "Teppei", "Thomas", "Tyrone", "Andrey", "Donny", "Drago", "Gordon", "Grigor", "Jeriel", "Kenneth", "Martell", "Mathis", "Rich", "Rocky", "Rodrigo", "Wesley", "Zachery", "Alonzo", "Cadoc", "Gunnar", "Igor", "Killian", "Markus", "Ricardo", "Yanis", "Banting", "Clayton", "Duane", "Earl", "Greg", "Roy", "Terry", "Tracy", "Walter", "Alvaro", "Curtis", "Francis", "Ross", "Brice", "Cheng", "Dudley", "Eric", "Kano", "Masahiro", "Randy", "Ryuji", "Steve", "Tadashi", "Wong", "Yuen", "Brian", "Carter", "Reece", "Nick", "Yang"], ["Cora", "Cyndy", "Jill", "Laura", "Sadie", "Tessa", "Vivian", "Aisha", "Callie", "Danielle", "Helene", "Jocelyn", "Lilith", "Paula", "Reyna", "Helen", "Kelsey", "Tyler", "Amy", "Chandra", "Hillary", "Janie", "Lee", "Maggie", "Mikiko", "Miriam", "Sharon", "Susie", "Xiao", "Alize", "Azra", "Brenda", "Chalina", "Chan", "Glinda", "Maki", "Tia", "Tiffany", "Wendy", "Andrea", "Gabrielle", "Gerardine", "Hailey", "Hedvig", "Justine", "Kinsey", "Sigrid", "Veronique", "Tess"]], - [TrainerType.BREEDER]: [["Isaac", "Myles", "Salvadore", "Albert", "Kahlil", "Eustace", "Galen", "Owen", "Addison", "Marcus", "Foster", "Cory", "Glenn", "Jay", "Wesley", "William", "Adrian", "Bradley", "Jaime"], ["Allison", "Alize", "Bethany", "Lily", "Lydia", "Gabrielle", "Jayden", "Pat", "Veronica", "Amber", "Jennifer", "Kaylee", "Adelaide", "Brooke", "Ethel", "April", "Irene", "Magnolia", "Amala", "Mercy", "Amanda", "Ikue", "Savannah", "Yuka", "Chloe", "Debra", "Denise", "Elena"]], - [TrainerType.CLERK]: [["Chaz", "Clemens", "Doug", "Fredric", "Ivan", "Isaac", "Nelson", "Wade", "Warren", "Augustin", "Gilligan", "Cody", "Jeremy", "Shane", "Dugal", "Royce", "Ronald"], ["Alberta", "Ingrid", "Katie", "Piper", "Trisha", "Wren", "Britney", "Lana", "Jessica", "Kristen", "Michelle", "Gabrielle"]], - [TrainerType.CYCLIST]: [["Axel", "James", "John", "Ryan", "Hector", "Jeremiah"], ["Kayla", "Megan", "Nicole", "Rachel", "Krissa", "Adelaide"]], - [TrainerType.DANCER]: ["Brian", "Davey", "Dirk", "Edmond", "Mickey", "Raymond", "Cara", "Julia", "Maika", "Mireille", "Ronda", "Zoe"], - [TrainerType.DEPOT_AGENT]: ["Josh", "Hank", "Vincent"], - [TrainerType.DOCTOR]: [["Hank", "Jerry", "Jules", "Logan", "Wayne", "Braid", "Derek", "Heath", "Julius", "Kit", "Graham"], ["Kirsten", "Sachiko", "Shery", "Carol", "Dixie", "Mariah"]], - [TrainerType.FIREBREATHER]: ["Bill", "Burt", "Cliff", "Dick", "Lyle", "Ned", "Otis", "Ray", "Richard", "Walt"], - [TrainerType.FISHERMAN]: ["Andre", "Arnold", "Barney", "Chris", "Edgar", "Henry", "Jonah", "Justin", "Kyle", "Martin", "Marvin", "Ralph", "Raymond", "Scott", "Stephen", "Wilton", "Tully", "Andrew", "Barny", "Carter", "Claude", "Dale", "Elliot", "Eugene", "Ivan", "Ned", "Nolan", "Roger", "Ronald", "Wade", "Wayne", "Darian", "Kai", "Chip", "Hank", "Kaden", "Tommy", "Tylor", "Alec", "Brett", "Cameron", "Cody", "Cole", "Cory", "Erick", "George", "Joseph", "Juan", "Kenneth", "Luc", "Miguel", "Travis", "Walter", "Zachary", "Josh", "Gideon", "Kyler", "Liam", "Murphy", "Bruce", "Damon", "Devon", "Hubert", "Jones", "Lydon", "Mick", "Pete", "Sean", "Sid", "Vince", "Bucky", "Dean", "Eustace", "Kenzo", "Leroy", "Mack", "Ryder", "Ewan", "Finn", "Murray", "Seward", "Shad", "Wharton", "Finley", "Fisher", "Fisk", "River", "Sheaffer", "Timin", "Carl", "Ernest", "Hal", "Herbert", "Hisato", "Mike", "Vernon", "Harriet", "Marina", "Chase"], - [TrainerType.GUITARIST]: ["Anna", "Beverly", "January", "Tina", "Alicia", "Claudia", "Julia", "Lidia", "Mireia", "Noelia", "Sara", "Sheila", "Tatiana"], - [TrainerType.HARLEQUIN]: ["Charley", "Ian", "Jack", "Kerry", "Louis", "Pat", "Paul", "Rick", "Anders", "Clarence", "Gary"], - [TrainerType.HIKER]: ["Anthony", "Bailey", "Benjamin", "Daniel", "Erik", "Jim", "Kenny", "Leonard", "Michael", "Parry", "Phillip", "Russell", "Sidney", "Tim", "Timothy", "Alan", "Brice", "Clark", "Eric", "Lenny", "Lucas", "Mike", "Trent", "Devan", "Eli", "Marc", "Sawyer", "Allen", "Daryl", "Dudley", "Earl", "Franklin", "Jeremy", "Marcos", "Nob", "Oliver", "Wayne", "Alexander", "Damon", "Jonathan", "Justin", "Kevin", "Lorenzo", "Louis", "Maurice", "Nicholas", "Reginald", "Robert", "Theodore", "Bruce", "Clarke", "Devin", "Dwight", "Edwin", "Eoin", "Noland", "Russel", "Andy", "Bret", "Darrell", "Gene", "Hardy", "Hugh", "Jebediah", "Jeremiah", "Kit", "Neil", "Terrell", "Don", "Doug", "Hunter", "Jared", "Jerome", "Keith", "Manuel", "Markus", "Otto", "Shelby", "Stephen", "Teppei", "Tobias", "Wade", "Zaiem", "Aaron", "Alain", "Bergin", "Bernard", "Brent", "Corwin", "Craig", "Delmon", "Dunstan", "Orestes", "Ross", "Davian", "Calhoun", "David", "Gabriel", "Ryan", "Thomas", "Travis", "Zachary", "Anuhea", "Barnaby", "Claus", "Collin", "Colson", "Dexter", "Dillan", "Eugine", "Farkas", "Hisato", "Julius", "Kenji", "Irwin", "Lionel", "Paul", "Richter", "Valentino", "Donald", "Douglas", "Kevyn", "Chester"], //["Angela","Carla","Celia","Daniela","Estela","Fatima","Helena","Leire","Lucia","Luna","Manuela","Mar","Marina","Miyu","Nancy","Nerea","Paula","Rocio","Yanira"] - [TrainerType.HOOLIGANS]: ["Jim & Cas", "Rob & Sal"], - [TrainerType.HOOPSTER]: ["Bobby", "John", "Lamarcus", "Derrick", "Nicolas"], - [TrainerType.INFIELDER]: ["Alex", "Connor", "Todd"], - [TrainerType.JANITOR]: ["Caleb", "Geoff", "Brady", "Felix", "Orville", "Melvin", "Shawn"], - [TrainerType.LINEBACKER]: ["Bob", "Dan", "Jonah"], - [TrainerType.MAID]: ["Belinda", "Sophie", "Emily", "Elena", "Clare", "Alica", "Tanya", "Tammy"], - [TrainerType.MUSICIAN]: ["Boris", "Preston", "Charles", "Clyde", "Vincent", "Dalton", "Kirk", "Shawn", "Fabian", "Fernando", "Joseph", "Marcos", "Arturo", "Jerry", "Lonnie", "Tony"], - [TrainerType.NURSERY_AIDE]: ["Autumn", "Briana", "Leah", "Miho", "Ethel", "Hollie", "Ilse", "June", "Kimya", "Rosalyn"], - [TrainerType.OFFICER]: ["Dirk", "Keith", "Alex", "Bobby", "Caleb", "Danny", "Dylan", "Thomas", "Daniel", "Jeff", "Braven", "Dell", "Neagle", "Haruki", "Mitchell", "Raymond"], - [TrainerType.PARASOL_LADY]: ["Angelica", "Clarissa", "Madeline", "Akari", "Annabell", "Kayley", "Rachel", "Alexa", "Sabrina", "April", "Gwyneth", "Laura", "Lumi", "Mariah", "Melita", "Nicole", "Tihana", "Ingrid", "Tyra"], - [TrainerType.PILOT]: ["Chase", "Leonard", "Ted", "Elron", "Ewing", "Flynn", "Winslow"], - [TrainerType.POKEFAN]: [["Alex", "Allan", "Brandon", "Carter", "Colin", "Derek", "Jeremy", "Joshua", "Rex", "Robert", "Trevor", "William", "Colton", "Miguel", "Francisco", "Kaleb", "Leonard", "Boone", "Elliot", "Jude", "Norbert", "Corey", "Gabe", "Baxter"], ["Beverly", "Georgia", "Jaime", "Ruth", "Isabel", "Marissa", "Vanessa", "Annika", "Bethany", "Kimberly", "Meredith", "Rebekah", "Eleanor", "Darcy", "Lydia", "Sachiko", "Abigail", "Agnes", "Lydie", "Roisin", "Tara", "Carmen", "Janet"]], - [TrainerType.PRESCHOOLER]: [["Billy", "Doyle", "Evan", "Homer", "Tully", "Albert", "Buster", "Greg", "Ike", "Jojo", "Tyrone", "Adrian", "Oliver", "Hayden", "Hunter", "Kaleb", "Liam", "Dylan"], ["Juliet", "Mia", "Sarah", "Wendy", "Winter", "Chrissy", "Eva", "Lin", "Samantha", "Ella", "Lily", "Natalie", "Ailey", "Hannah", "Malia", "Kindra", "Nancy"]], - [TrainerType.PSYCHIC]: [["Fidel", "Franklin", "Gilbert", "Greg", "Herman", "Jared", "Mark", "Nathan", "Norman", "Phil", "Richard", "Rodney", "Cameron", "Edward", "Fritz", "Joshua", "Preston", "Virgil", "William", "Alvaro", "Blake", "Cedric", "Keenan", "Nicholas", "Dario", "Johan", "Lorenzo", "Tyron", "Bryce", "Corbin", "Deandre", "Elijah", "Kody", "Landon", "Maxwell", "Mitchell", "Sterling", "Eli", "Nelson", "Vernon", "Gaven", "Gerard", "Low", "Micki", "Perry", "Rudolf", "Tommy", "Al", "Nandor", "Tully", "Arthur", "Emanuel", "Franz", "Harry", "Paschal", "Robert", "Sayid", "Angelo", "Anton", "Arin", "Avery", "Danny", "Frasier", "Harrison", "Jaime", "Ross", "Rui", "Vlad", "Mason"], ["Alexis", "Hannah", "Jacki", "Jaclyn", "Kayla", "Maura", "Samantha", "Alix", "Brandi", "Edie", "Macey", "Mariella", "Marlene", "Laura", "Rodette", "Abigail", "Brittney", "Chelsey", "Daisy", "Desiree", "Kendra", "Lindsey", "Rachael", "Valencia", "Belle", "Cybil", "Doreen", "Dua", "Future", "Lin", "Madhu", "Alia", "Ena", "Joyce", "Lynette", "Olesia", "Sarah"]], - [TrainerType.RANGER]: [["Carlos", "Jackson", "Sebastian", "Gav", "Lorenzo", "Logan", "Nicolas", "Trenton", "Deshawn", "Dwayne", "Jeffery", "Kyler", "Taylor", "Alain", "Claude", "Crofton", "Forrest", "Harry", "Jaden", "Keith", "Lewis", "Miguel", "Pedro", "Ralph", "Richard", "Bret", "Daryl", "Eddie", "Johan", "Leaf", "Louis", "Maxwell", "Parker", "Rick", "Steve", "Bjorn", "Chaise", "Dean", "Lee", "Maurice", "Nash", "Ralf", "Reed", "Shinobu", "Silas"], ["Catherine", "Jenna", "Sophia", "Merdith", "Nora", "Beth", "Chelsea", "Katelyn", "Madeline", "Allison", "Ashlee", "Felicia", "Krista", "Annie", "Audra", "Brenda", "Chloris", "Eliza", "Heidi", "Irene", "Mary", "Mylene", "Shanti", "Shelly", "Thalia", "Anja", "Briana", "Dianna", "Elaine", "Elle", "Hillary", "Katie", "Lena", "Lois", "Malory", "Melita", "Mikiko", "Naoko", "Serenity", "Ambre", "Brooke", "Clementine", "Melina", "Petra", "Twiggy"]], - [TrainerType.RICH]: [["Alfred", "Edward", "Gregory", "Preston", "Thomas", "Tucker", "Walter", "Clifford", "Everett", "Micah", "Nate", "Pierre", "Terrance", "Arthur", "Brooks", "Emanuel", "Lamar", "Jeremy", "Leonardo", "Milton", "Frederic", "Renaud", "Robert", "Yan", "Daniel", "Sheldon", "Stonewall", "Gerald", "Ronald", "Smith", "Stanley", "Reginald", "Orson", "Wilco", "Caden", "Glenn"], ["Rebecca", "Reina", "Cassandra", "Emilia", "Grace", "Marian", "Elizabeth", "Kathleen", "Sayuri", "Caroline", "Judy"]], - [TrainerType.RICH_KID]: [["Garret", "Winston", "Dawson", "Enrique", "Jason", "Roman", "Trey", "Liam", "Anthony", "Brad", "Cody", "Manuel", "Martin", "Pierce", "Rolan", "Keenan", "Filbert", "Antoin", "Cyus", "Diek", "Dugo", "Flitz", "Jurek", "Lond", "Perd", "Quint", "Basto", "Benit", "Brot", "Denc", "Guyit", "Marcon", "Perc", "Puros", "Roex", "Sainz", "Symin", "Tark", "Venak"], ["Anette", "Brianna", "Cindy", "Colleen", "Daphne", "Elizabeth", "Naomi", "Sarah", "Charlotte", "Gillian", "Jacki", "Lady", "Melissa", "Celeste", "Colette", "Elizandra", "Isabel", "Lynette", "Magnolia", "Sophie", "Lina", "Dulcie", "Auro", "Brin", "Caril", "Eloos", "Gwin", "Illa", "Kowly", "Rima", "Ristin", "Vesey", "Brena", "Deasy", "Denslon", "Kylet", "Nemi", "Rene", "Sanol", "Stouner", "Sturk", "Talmen", "Zoila"]], - [TrainerType.ROUGHNECK]: ["Camron", "Corey", "Gabriel", "Isaiah", "Jamal", "Koji", "Luke", "Paxton", "Raul", "Zeek", "Kirby", "Chance", "Dave", "Fletcher", "Johnny", "Reese", "Joey", "Ricky", "Silvester", "Martin"], - [TrainerType.SAILOR]: ["Alberto", "Bost", "Brennan", "Brenden", "Claude", "Cory", "Damian", "Dirk", "Duncan", "Dwayne", "Dylan", "Eddie", "Edmond", "Elijah", "Ernest", "Eugene", "Garrett", "Golos", "Gratin", "Grestly", "Harry", "Hols", "Hudson", "Huey", "Jebol", "Jeff", "Leonald", "Luther", "Kelvin", "Kenneth", "Kent", "Knook", "Marc", "Mifis", "Monar", "Morkor", "Ordes", "Oxlin", "Parker", "Paul", "Philip", "Roberto", "Samson", "Skyler", "Stanly", "Tebu", "Terrell", "Trevor", "Yasu", "Zachariah"], - [TrainerType.SCIENTIST]: [["Jed", "Marc", "Mitch", "Rich", "Ross", "Beau", "Braydon", "Connor", "Ed", "Ivan", "Jerry", "Jose", "Joshua", "Parker", "Rodney", "Taylor", "Ted", "Travis", "Zackery", "Darrius", "Emilio", "Fredrick", "Shaun", "Stefano", "Travon", "Daniel", "Garett", "Gregg", "Linden", "Lowell", "Trenton", "Dudley", "Luke", "Markus", "Nathan", "Orville", "Randall", "Ron", "Ronald", "Simon", "Steve", "William", "Franklin", "Clarke", "Jacques", "Terrance", "Ernst", "Justus", "Ikaika", "Jayson", "Kyle", "Reid", "Tyrone", "Adam", "Albert", "Alphonse", "Cory", "Donnie", "Elton", "Francis", "Gordon", "Herbert", "Humphrey", "Jordan", "Julian", "Keaton", "Levi", "Melvin", "Murray", "West", "Craig", "Coren", "Dubik", "Kotan", "Lethco", "Mante", "Mort", "Myron", "Odlow", "Ribek", "Roeck", "Vogi", "Vonder", "Zogo", "Doimo", "Doton", "Durel", "Hildon", "Kukla", "Messa", "Nanot", "Platen", "Raburn", "Reman", "Acrod", "Coffy", "Elrok", "Foss", "Hardig", "Hombol", "Hospel", "Kaller", "Klots", "Krilok", "Limar", "Loket", "Mesak", "Morbit", "Newin", "Orill", "Tabor", "Tekot"], ["Blythe", "Chan", "Kathrine", "Marie", "Maria", "Naoko", "Samantha", "Satomi", "Shannon", "Athena", "Caroline", "Lumi", "Lumina", "Marissa", "Sonia"]], - [TrainerType.SMASHER]: ["Aspen", "Elena", "Mari", "Amy", "Lizzy"], - [TrainerType.SNOW_WORKER]: [["Braden", "Brendon", "Colin", "Conrad", "Dillan", "Gary", "Gerardo", "Holden", "Jackson", "Mason", "Quentin", "Willy", "Noel", "Arnold", "Brady", "Brand", "Cairn", "Cliff", "Don", "Eddie", "Felix", "Filipe", "Glenn", "Gus", "Heath", "Matthew", "Patton", "Rich", "Rob", "Ryan", "Scott", "Shelby", "Sterling", "Tyler", "Victor", "Zack", "Friedrich", "Herman", "Isaac", "Leo", "Maynard", "Mitchell", "Morgann", "Nathan", "Niel", "Pasqual", "Paul", "Tavarius", "Tibor", "Dimitri", "Narek", "Yusif", "Frank", "Jeff", "Vaclav", "Ovid", "Francis", "Keith", "Russel", "Sangon", "Toway", "Bomber", "Chean", "Demit", "Hubor", "Kebile", "Laber", "Ordo", "Retay", "Ronix", "Wagel", "Dobit", "Kaster", "Lobel", "Releo", "Saken", "Rustix"], ["Georgia", "Sandra", "Yvonne"]], - [TrainerType.STRIKER]: ["Marco", "Roberto", "Tony"], - [TrainerType.SCHOOL_KID]: [["Alan", "Billy", "Chad", "Danny", "Dudley", "Jack", "Joe", "Johnny", "Kipp", "Nate", "Ricky", "Tommy", "Jerry", "Paul", "Ted", "Chance", "Esteban", "Forrest", "Harrison", "Connor", "Sherman", "Torin", "Travis", "Al", "Carter", "Edgar", "Jem", "Sammy", "Shane", "Shayne", "Alvin", "Keston", "Neil", "Seymour", "William", "Carson", "Clark", "Nolan"], ["Georgia", "Karen", "Meiko", "Christine", "Mackenzie", "Tiera", "Ann", "Gina", "Lydia", "Marsha", "Millie", "Sally", "Serena", "Silvia", "Alberta", "Cassie", "Mara", "Rita", "Georgie", "Meena", "Nitzel"]], - [TrainerType.SWIMMER]: [["Berke", "Cameron", "Charlie", "George", "Harold", "Jerome", "Kirk", "Mathew", "Parker", "Randall", "Seth", "Simon", "Tucker", "Austin", "Barry", "Chad", "Cody", "Darrin", "David", "Dean", "Douglas", "Franklin", "Gilbert", "Herman", "Jack", "Luis", "Matthew", "Reed", "Richard", "Rodney", "Roland", "Spencer", "Stan", "Tony", "Clarence", "Declan", "Dominik", "Harrison", "Kevin", "Leonardo", "Nolen", "Pete", "Santiago", "Axle", "Braden", "Finn", "Garrett", "Mymo", "Reece", "Samir", "Toby", "Adrian", "Colton", "Dillon", "Erik", "Evan", "Francisco", "Glenn", "Kurt", "Oscar", "Ricardo", "Sam", "Sheltin", "Troy", "Vincent", "Wade", "Wesley", "Duane", "Elmo", "Esteban", "Frankie", "Ronald", "Tyson", "Bart", "Matt", "Tim", "Wright", "Jeffery", "Kyle", "Alessandro", "Estaban", "Kieran", "Ramses", "Casey", "Dakota", "Jared", "Kalani", "Keoni", "Lawrence", "Logan", "Robert", "Roddy", "Yasu", "Derek", "Jacob", "Bruce", "Clayton"], ["Briana", "Dawn", "Denise", "Diana", "Elaine", "Kara", "Kaylee", "Lori", "Nicole", "Nikki", "Paula", "Susie", "Wendy", "Alice", "Beth", "Beverly", "Brenda", "Dana", "Debra", "Grace", "Jenny", "Katie", "Laurel", "Linda", "Missy", "Sharon", "Tanya", "Tara", "Tisha", "Carlee", "Imani", "Isabelle", "Kyla", "Sienna", "Abigail", "Amara", "Anya", "Connie", "Maria", "Melissa", "Nora", "Shirley", "Shania", "Tiffany", "Aubree", "Cassandra", "Claire", "Crystal", "Erica", "Gabrielle", "Haley", "Jessica", "Joanna", "Lydia", "Mallory", "Mary", "Miranda", "Paige", "Sophia", "Vanessa", "Chelan", "Debbie", "Joy", "Kendra", "Leona", "Mina", "Caroline", "Joyce", "Larissa", "Rebecca", "Tyra", "Dara", "Desiree", "Kaoru", "Ruth", "Coral", "Genevieve", "Isla", "Marissa", "Romy", "Sheryl", "Alexandria", "Alicia", "Chelsea", "Jade", "Kelsie", "Laura", "Portia", "Shelby", "Sara", "Tiare", "Kyra", "Natasha", "Layla", "Scarlett", "Cora"]], - [TrainerType.TWINS]: ["Amy & May", "Jo & Zoe", "Meg & Peg", "Ann & Anne", "Lea & Pia", "Amy & Liv", "Gina & Mia", "Miu & Yuki", "Tori & Tia", "Eli & Anne", "Jen & Kira", "Joy & Meg", "Kiri & Jan", "Miu & Mia", "Emma & Lil", "Liv & Liz", "Teri & Tia", "Amy & Mimi", "Clea & Gil", "Day & Dani", "Kay & Tia", "Tori & Til", "Saya & Aya", "Emy & Lin", "Kumi & Amy", "Mayo & May", "Ally & Amy", "Lia & Lily", "Rae & Ula", "Sola & Ana", "Tara & Val", "Faith & Joy", "Nana & Nina"], - [TrainerType.VETERAN]: [["Armando", "Brenden", "Brian", "Clayton", "Edgar", "Emanuel", "Grant", "Harlan", "Terrell", "Arlen", "Chester", "Hugo", "Martell", "Ray", "Shaun", "Abraham", "Carter", "Claude", "Jerry", "Lucius", "Murphy", "Rayne", "Ron", "Sinan", "Sterling", "Vincent", "Zach", "Gerard", "Gilles", "Louis", "Timeo", "Akira", "Don", "Eric", "Harry", "Leon", "Roger", "Angus", "Aristo", "Brone", "Johnny"], ["Julia", "Karla", "Kim", "Sayuri", "Tiffany", "Cathy", "Cecile", "Chloris", "Denae", "Gina", "Maya", "Oriana", "Portia", "Rhona", "Rosaline", "Catrina", "Inga", "Trisha", "Heather", "Lynn", "Sheri", "Alonsa", "Ella", "Leticia", "Kiara"]], - [TrainerType.WAITER]: [["Bert", "Clint", "Maxwell", "Lou"], ["Kati", "Aurora", "Bonita", "Flo", "Tia", "Jan", "Olwen", "Paget", "Paula", "Talia"]], - [TrainerType.WORKER]: [["Braden", "Brendon", "Colin", "Conrad", "Dillan", "Gary", "Gerardo", "Holden", "Jackson", "Mason", "Quentin", "Willy", "Noel", "Arnold", "Brady", "Brand", "Cairn", "Cliff", "Don", "Eddie", "Felix", "Filipe", "Glenn", "Gus", "Heath", "Matthew", "Patton", "Rich", "Rob", "Ryan", "Scott", "Shelby", "Sterling", "Tyler", "Victor", "Zack", "Friedrich", "Herman", "Isaac", "Leo", "Maynard", "Mitchell", "Morgann", "Nathan", "Niel", "Pasqual", "Paul", "Tavarius", "Tibor", "Dimitri", "Narek", "Yusif", "Frank", "Jeff", "Vaclav", "Ovid", "Francis", "Keith", "Russel", "Sangon", "Toway", "Bomber", "Chean", "Demit", "Hubor", "Kebile", "Laber", "Ordo", "Retay", "Ronix", "Wagel", "Dobit", "Kaster", "Lobel", "Releo", "Saken", "Rustix"], ["Georgia", "Sandra", "Yvonne"]], - [TrainerType.YOUNGSTER]: [["Albert", "Gordon", "Ian", "Jason", "Jimmy", "Mikey", "Owen", "Samuel", "Warren", "Allen", "Ben", "Billy", "Calvin", "Dillion", "Eddie", "Joey", "Josh", "Neal", "Timmy", "Tommy", "Breyden", "Deandre", "Demetrius", "Dillon", "Jaylen", "Johnson", "Shigenobu", "Chad", "Cole", "Cordell", "Dan", "Dave", "Destin", "Nash", "Tyler", "Yasu", "Austin", "Dallas", "Darius", "Donny", "Jonathon", "Logan", "Michael", "Oliver", "Sebastian", "Tristan", "Wayne", "Norman", "Roland", "Regis", "Abe", "Astor", "Keita", "Kenneth", "Kevin", "Kyle", "Lester", "Masao", "Nicholas", "Parker", "Wes", "Zachary", "Cody", "Henley", "Jaye", "Karl", "Kenny", "Masahiro", "Pedro", "Petey", "Sinclair", "Terrell", "Waylon", "Aidan", "Anthony", "David", "Jacob", "Jayden", "Cutler", "Ham", "Caleb", "Kai", "Honus", "Kenway", "Bret", "Chris", "Cid", "Dennis", "Easton", "Ken", "Robby", "Ronny", "Shawn", "Benjamin", "Jake", "Travis", "Adan", "Aday", "Beltran", "Elian", "Hernan", "Julen", "Luka", "Roi", "Bernie", "Dustin", "Jonathan", "Wyatt"], ["Alice", "Bridget", "Carrie", "Connie", "Dana", "Ellen", "Krise", "Laura", "Linda", "Michelle", "Shannon", "Andrea", "Crissy", "Janice", "Robin", "Sally", "Tiana", "Haley", "Ali", "Ann", "Dalia", "Dawn", "Iris", "Joana", "Julia", "Kay", "Lisa", "Megan", "Mikaela", "Miriam", "Paige", "Reli", "Blythe", "Briana", "Caroline", "Cassidy", "Kaitlin", "Madeline", "Molly", "Natalie", "Samantha", "Sarah", "Cathy", "Dye", "Eri", "Eva", "Fey", "Kara", "Lurleen", "Maki", "Mali", "Maya", "Miki", "Sibyl", "Daya", "Diana", "Flo", "Helia", "Henrietta", "Isabel", "Mai", "Persephone", "Serena", "Anna", "Charlotte", "Elin", "Elsa", "Lise", "Sara", "Suzette", "Audrey", "Emmy", "Isabella", "Madison", "Rika", "Rylee", "Salla", "Ellie", "Alexandra", "Amy", "Lass", "Brittany", "Chel", "Cindy", "Dianne", "Emily", "Emma", "Evelyn", "Hana", "Harleen", "Hazel", "Jocelyn", "Katrina", "Kimberly", "Lina", "Marge", "Mila", "Mizuki", "Rena", "Sal", "Satoko", "Summer", "Tomoe", "Vicky", "Yue", "Yumi", "Lauren", "Rei", "Riley", "Lois", "Nancy", "Tammy", "Terry"]], - [TrainerType.HEX_MANIAC]: ["Kindra", "Patricia", "Tammy", "Tasha", "Valerie", "Alaina", "Kathleen", "Leah", "Makie", "Sylvia", "Anina", "Arachna", "Carrie", "Desdemona", "Josette", "Luna", "Melanie", "Osanna", "Raziah"], + [TrainerType.ACE_TRAINER]: [[ "Aaron", "Allen", "Blake", "Brian", "Gaven", "Jake", "Kevin", "Mike", "Nick", "Paul", "Ryan", "Sean", "Darin", "Albert", "Berke", "Clyde", "Edgar", "George", "Leroy", "Owen", "Parker", "Randall", "Ruben", "Samuel", "Vincent", "Warren", "Wilton", "Zane", "Alfred", "Braxton", "Felix", "Gerald", "Jonathan", "Leonel", "Marcel", "Mitchell", "Quincy", "Roderick", "Colby", "Rolando", "Yuji", "Abel", "Anton", "Arthur", "Cesar", "Dalton", "Dennis", "Ernest", "Garrett", "Graham", "Henry", "Isaiah", "Jonah", "Jose", "Keenan", "Micah", "Omar", "Quinn", "Rodolfo", "Saul", "Sergio", "Skylar", "Stefan", "Zachery", "Alton", "Arabella", "Bonita", "Cal", "Cody", "French", "Kobe", "Paulo", "Shaye", "Austin", "Beckett", "Charlie", "Corky", "David", "Dwayne", "Elmer", "Jesse", "Jared", "Johan", "Jordan", "Kipp", "Lou", "Terry", "Tom", "Webster", "Billy", "Doyle", "Enzio", "Geoff", "Grant", "Kelsey", "Miguel", "Pierce", "Ray", "Santino", "Shel", "Adelbert", "Bence", "Emil", "Evan", "Mathis", "Maxim", "Neil", "Rico", "Robbie", "Theo", "Viktor", "Benedict", "Cornelius", "Hisato", "Leopold", "Neville", "Vito", "Chase", "Cole", "Hiroshi", "Jackson", "Jim", "Kekoa", "Makana", "Yuki", "Elwood", "Seth", "Alvin", "Arjun", "Arnold", "Cameron", "Carl", "Carlton", "Christopher", "Dave", "Dax", "Dominic", "Edmund", "Finn", "Fred", "Garret", "Grayson", "Jace", "Jaxson", "Jay", "Jirard", "Johnson", "Kayden", "Kite", "Louis", "Mac", "Marty", "Percy", "Raymond", "Ronnie", "Satch", "Tim", "Zach", "Conner", "Vince", "Bedro", "Boda", "Botan", "Daras", "Dury", "Herton", "Rewn", "Stum", "Tock", "Trilo", "Berki", "Cruik", "Dazon", "Desid", "Dillot", "Farfin", "Forgon", "Hebel", "Morfon", "Moril", "Shadd", "Vanhub", "Bardo", "Carben", "Degin", "Gorps", "Klept", "Lask", "Malex", "Mopar", "Niled", "Noxon", "Teslor", "Tetil" ], [ "Beth", "Carol", "Cybil", "Emma", "Fran", "Gwen", "Irene", "Jenn", "Joyce", "Kate", "Kelly", "Lois", "Lola", "Megan", "Quinn", "Reena", "Cara", "Alexa", "Brooke", "Caroline", "Elaine", "Hope", "Jennifer", "Jody", "Julie", "Lori", "Mary", "Michelle", "Shannon", "Wendy", "Alexia", "Alicia", "Athena", "Carolina", "Cristin", "Darcy", "Dianne", "Halle", "Jazmyn", "Katelynn", "Keira", "Marley", "Allyson", "Kathleen", "Naomi", "Alyssa", "Ariana", "Brandi", "Breanna", "Brenda", "Brenna", "Catherine", "Clarice", "Dana", "Deanna", "Destiny", "Jamie", "Jasmin", "Kassandra", "Laura", "Maria", "Mariah", "Maya", "Meagan", "Mikayla", "Monique", "Natasha", "Olivia", "Sandra", "Savannah", "Sydney", "Moira", "Piper", "Salma", "Allison", "Beverly", "Cathy", "Cheyenne", "Clara", "Dara", "Eileen", "Glinda", "Junko", "Lena", "Lucille", "Mariana", "Olwen", "Shanta", "Stella", "Angi", "Belle", "Chandra", "Cora", "Eve", "Jacqueline", "Jeanne", "Juliet", "Kathrine", "Layla", "Lucca", "Melina", "Miki", "Nina", "Sable", "Shelly", "Summer", "Trish", "Vicki", "Alanza", "Cordelia", "Hilde", "Imelda", "Michele", "Mireille", "Claudia", "Constance", "Harriet", "Honor", "Melba", "Portia", "Alexis", "Angela", "Karla", "Lindsey", "Tori", "Sheri", "Jada", "Kailee", "Amanda", "Annie", "Kindra", "Kyla", "Sofia", "Yvette", "Becky", "Flora", "Gloria", "Buna", "Ferda", "Lehan", "Liqui", "Lomen", "Neira", "Atilo", "Detta", "Gilly", "Gosney", "Levens", "Moden", "Rask", "Rateis", "Rosno", "Tynan", "Veron", "Zoel", "Cida", "Dibsin", "Dodin", "Ebson", "Equin", "Flostin", "Gabsen", "Halsion", "Hileon", "Quelor", "Rapeel", "Roze", "Tensin" ]], + [TrainerType.ARTIST]: [[ "Ismael", "William", "Horton", "Pierre", "Zach", "Gough", "Salvador", "Vincent", "Duncan" ], [ "Georgia" ]], + [TrainerType.BACKERS]: [[ "Alf & Fred", "Hawk & Dar", "Joe & Ross", "Les & Web", "Masa & Yas", "Stu & Art" ], [ "Ai & Ciel", "Ami & Eira", "Cam & Abby", "Fey & Sue", "Kat & Phae", "Kay & Ali", "Ava & Aya", "Cleo & Rio", "May & Mal" ]], + [TrainerType.BACKPACKER]: [[ "Alexander", "Carlos", "Herman", "Jerome", "Keane", "Kelsey", "Kiyo", "Michael", "Nate", "Peter", "Sam", "Stephen", "Talon", "Terrance", "Toru", "Waylon", "Boone", "Clifford", "Ivan", "Kendall", "Lowell", "Randall", "Reece", "Roland", "Shane", "Walt", "Farid", "Heike", "Joren", "Lane", "Roderick", "Darnell", "Deon", "Emory", "Graeme", "Grayson", "Aitor", "Alex", "Arturo", "Asier", "Jaime", "Jonathan", "Julio", "Kevin", "Kosuke", "Lander", "Markel", "Mateo", "Nil", "Pau", "Samuel" ], [ "Anna", "Corin", "Elaine", "Emi", "Jill", "Kumiko", "Liz", "Lois", "Lora", "Molly", "Patty", "Ruth", "Vicki", "Annie", "Blossom", "Clara", "Eileen", "Mae", "Myra", "Rachel", "Tami", "Ashley", "Mikiko", "Kiana", "Perdy", "Maria", "Yuho", "Peren", "Barbara", "Diane" ]], + [TrainerType.BAKER]: [ "Chris", "Jenn", "Lilly" ], + [TrainerType.BEAUTY]: [ "Cassie", "Julia", "Olivia", "Samantha", "Valerie", "Victoria", "Bridget", "Connie", "Jessica", "Johanna", "Melissa", "Sheila", "Shirley", "Tiffany", "Namiko", "Thalia", "Grace", "Lola", "Lori", "Maura", "Tamia", "Cyndy", "Devon", "Gabriella", "Harley", "Lindsay", "Nicola", "Callie", "Charlotte", "Kassandra", "December", "Fleming", "Nikola", "Aimee", "Anais", "Brigitte", "Cassandra", "Andrea", "Brittney", "Carolyn", "Krystal", "Alexis", "Alice", "Aina", "Anya", "Arianna", "Aubrey", "Beverly", "Camille", "Beauty", "Evette", "Hansol", "Haruka", "Jill", "Jo", "Lana", "Lois", "Lucy", "Mai", "Nickie", "Nicole", "Prita", "Rose", "Shelly", "Suzy", "Tessa", "Anita", "Alissa", "Rita", "Cudsy", "Eloff", "Miru", "Minot", "Nevah", "Niven", "Ogoin" ], + [TrainerType.BIKER]: [ "Charles", "Dwayne", "Glenn", "Harris", "Joel", "Riley", "Zeke", "Alex", "Billy", "Ernest", "Gerald", "Hideo", "Isaac", "Jared", "Jaren", "Jaxon", "Jordy", "Lao", "Lukas", "Malik", "Nikolas", "Ricardo", "Ruben", "Virgil", "William", "Aiden", "Dale", "Dan", "Jacob", "Markey", "Reese", "Teddy", "Theron", "Jeremy", "Morgann", "Phillip", "Philip", "Stanley", "Dillon" ], + [TrainerType.BLACK_BELT]: [[ "Kenji", "Lao", "Lung", "Nob", "Wai", "Yoshi", "Atsushi", "Daisuke", "Hideki", "Hitoshi", "Kiyo", "Koichi", "Koji", "Yuji", "Cristian", "Rhett", "Takao", "Theodore", "Zander", "Aaron", "Hugh", "Mike", "Nicolas", "Shea", "Takashi", "Adam", "Carl", "Colby", "Darren", "David", "Davon", "Derek", "Eddie", "Gregory", "Griffin", "Jarrett", "Jeffery", "Kendal", "Kyle", "Luke", "Miles", "Nathaniel", "Philip", "Rafael", "Ray", "Ricky", "Sean", "Willie", "Ander", "Manford", "Benjamin", "Corey", "Edward", "Grant", "Jay", "Kendrew", "Kentaro", "Ryder", "Teppei", "Thomas", "Tyrone", "Andrey", "Donny", "Drago", "Gordon", "Grigor", "Jeriel", "Kenneth", "Martell", "Mathis", "Rich", "Rocky", "Rodrigo", "Wesley", "Zachery", "Alonzo", "Cadoc", "Gunnar", "Igor", "Killian", "Markus", "Ricardo", "Yanis", "Banting", "Clayton", "Duane", "Earl", "Greg", "Roy", "Terry", "Tracy", "Walter", "Alvaro", "Curtis", "Francis", "Ross", "Brice", "Cheng", "Dudley", "Eric", "Kano", "Masahiro", "Randy", "Ryuji", "Steve", "Tadashi", "Wong", "Yuen", "Brian", "Carter", "Reece", "Nick", "Yang" ], [ "Cora", "Cyndy", "Jill", "Laura", "Sadie", "Tessa", "Vivian", "Aisha", "Callie", "Danielle", "Helene", "Jocelyn", "Lilith", "Paula", "Reyna", "Helen", "Kelsey", "Tyler", "Amy", "Chandra", "Hillary", "Janie", "Lee", "Maggie", "Mikiko", "Miriam", "Sharon", "Susie", "Xiao", "Alize", "Azra", "Brenda", "Chalina", "Chan", "Glinda", "Maki", "Tia", "Tiffany", "Wendy", "Andrea", "Gabrielle", "Gerardine", "Hailey", "Hedvig", "Justine", "Kinsey", "Sigrid", "Veronique", "Tess" ]], + [TrainerType.BREEDER]: [[ "Isaac", "Myles", "Salvadore", "Albert", "Kahlil", "Eustace", "Galen", "Owen", "Addison", "Marcus", "Foster", "Cory", "Glenn", "Jay", "Wesley", "William", "Adrian", "Bradley", "Jaime" ], [ "Allison", "Alize", "Bethany", "Lily", "Lydia", "Gabrielle", "Jayden", "Pat", "Veronica", "Amber", "Jennifer", "Kaylee", "Adelaide", "Brooke", "Ethel", "April", "Irene", "Magnolia", "Amala", "Mercy", "Amanda", "Ikue", "Savannah", "Yuka", "Chloe", "Debra", "Denise", "Elena" ]], + [TrainerType.CLERK]: [[ "Chaz", "Clemens", "Doug", "Fredric", "Ivan", "Isaac", "Nelson", "Wade", "Warren", "Augustin", "Gilligan", "Cody", "Jeremy", "Shane", "Dugal", "Royce", "Ronald" ], [ "Alberta", "Ingrid", "Katie", "Piper", "Trisha", "Wren", "Britney", "Lana", "Jessica", "Kristen", "Michelle", "Gabrielle" ]], + [TrainerType.CYCLIST]: [[ "Axel", "James", "John", "Ryan", "Hector", "Jeremiah" ], [ "Kayla", "Megan", "Nicole", "Rachel", "Krissa", "Adelaide" ]], + [TrainerType.DANCER]: [ "Brian", "Davey", "Dirk", "Edmond", "Mickey", "Raymond", "Cara", "Julia", "Maika", "Mireille", "Ronda", "Zoe" ], + [TrainerType.DEPOT_AGENT]: [ "Josh", "Hank", "Vincent" ], + [TrainerType.DOCTOR]: [[ "Hank", "Jerry", "Jules", "Logan", "Wayne", "Braid", "Derek", "Heath", "Julius", "Kit", "Graham" ], [ "Kirsten", "Sachiko", "Shery", "Carol", "Dixie", "Mariah" ]], + [TrainerType.FIREBREATHER]: [ "Bill", "Burt", "Cliff", "Dick", "Lyle", "Ned", "Otis", "Ray", "Richard", "Walt" ], + [TrainerType.FISHERMAN]: [ "Andre", "Arnold", "Barney", "Chris", "Edgar", "Henry", "Jonah", "Justin", "Kyle", "Martin", "Marvin", "Ralph", "Raymond", "Scott", "Stephen", "Wilton", "Tully", "Andrew", "Barny", "Carter", "Claude", "Dale", "Elliot", "Eugene", "Ivan", "Ned", "Nolan", "Roger", "Ronald", "Wade", "Wayne", "Darian", "Kai", "Chip", "Hank", "Kaden", "Tommy", "Tylor", "Alec", "Brett", "Cameron", "Cody", "Cole", "Cory", "Erick", "George", "Joseph", "Juan", "Kenneth", "Luc", "Miguel", "Travis", "Walter", "Zachary", "Josh", "Gideon", "Kyler", "Liam", "Murphy", "Bruce", "Damon", "Devon", "Hubert", "Jones", "Lydon", "Mick", "Pete", "Sean", "Sid", "Vince", "Bucky", "Dean", "Eustace", "Kenzo", "Leroy", "Mack", "Ryder", "Ewan", "Finn", "Murray", "Seward", "Shad", "Wharton", "Finley", "Fisher", "Fisk", "River", "Sheaffer", "Timin", "Carl", "Ernest", "Hal", "Herbert", "Hisato", "Mike", "Vernon", "Harriet", "Marina", "Chase" ], + [TrainerType.GUITARIST]: [ "Anna", "Beverly", "January", "Tina", "Alicia", "Claudia", "Julia", "Lidia", "Mireia", "Noelia", "Sara", "Sheila", "Tatiana" ], + [TrainerType.HARLEQUIN]: [ "Charley", "Ian", "Jack", "Kerry", "Louis", "Pat", "Paul", "Rick", "Anders", "Clarence", "Gary" ], + [TrainerType.HIKER]: [ "Anthony", "Bailey", "Benjamin", "Daniel", "Erik", "Jim", "Kenny", "Leonard", "Michael", "Parry", "Phillip", "Russell", "Sidney", "Tim", "Timothy", "Alan", "Brice", "Clark", "Eric", "Lenny", "Lucas", "Mike", "Trent", "Devan", "Eli", "Marc", "Sawyer", "Allen", "Daryl", "Dudley", "Earl", "Franklin", "Jeremy", "Marcos", "Nob", "Oliver", "Wayne", "Alexander", "Damon", "Jonathan", "Justin", "Kevin", "Lorenzo", "Louis", "Maurice", "Nicholas", "Reginald", "Robert", "Theodore", "Bruce", "Clarke", "Devin", "Dwight", "Edwin", "Eoin", "Noland", "Russel", "Andy", "Bret", "Darrell", "Gene", "Hardy", "Hugh", "Jebediah", "Jeremiah", "Kit", "Neil", "Terrell", "Don", "Doug", "Hunter", "Jared", "Jerome", "Keith", "Manuel", "Markus", "Otto", "Shelby", "Stephen", "Teppei", "Tobias", "Wade", "Zaiem", "Aaron", "Alain", "Bergin", "Bernard", "Brent", "Corwin", "Craig", "Delmon", "Dunstan", "Orestes", "Ross", "Davian", "Calhoun", "David", "Gabriel", "Ryan", "Thomas", "Travis", "Zachary", "Anuhea", "Barnaby", "Claus", "Collin", "Colson", "Dexter", "Dillan", "Eugine", "Farkas", "Hisato", "Julius", "Kenji", "Irwin", "Lionel", "Paul", "Richter", "Valentino", "Donald", "Douglas", "Kevyn", "Chester" ], //["Angela","Carla","Celia","Daniela","Estela","Fatima","Helena","Leire","Lucia","Luna","Manuela","Mar","Marina","Miyu","Nancy","Nerea","Paula","Rocio","Yanira"] + [TrainerType.HOOLIGANS]: [ "Jim & Cas", "Rob & Sal" ], + [TrainerType.HOOPSTER]: [ "Bobby", "John", "Lamarcus", "Derrick", "Nicolas" ], + [TrainerType.INFIELDER]: [ "Alex", "Connor", "Todd" ], + [TrainerType.JANITOR]: [ "Caleb", "Geoff", "Brady", "Felix", "Orville", "Melvin", "Shawn" ], + [TrainerType.LINEBACKER]: [ "Bob", "Dan", "Jonah" ], + [TrainerType.MAID]: [ "Belinda", "Sophie", "Emily", "Elena", "Clare", "Alica", "Tanya", "Tammy" ], + [TrainerType.MUSICIAN]: [ "Boris", "Preston", "Charles", "Clyde", "Vincent", "Dalton", "Kirk", "Shawn", "Fabian", "Fernando", "Joseph", "Marcos", "Arturo", "Jerry", "Lonnie", "Tony" ], + [TrainerType.NURSERY_AIDE]: [ "Autumn", "Briana", "Leah", "Miho", "Ethel", "Hollie", "Ilse", "June", "Kimya", "Rosalyn" ], + [TrainerType.OFFICER]: [ "Dirk", "Keith", "Alex", "Bobby", "Caleb", "Danny", "Dylan", "Thomas", "Daniel", "Jeff", "Braven", "Dell", "Neagle", "Haruki", "Mitchell", "Raymond" ], + [TrainerType.PARASOL_LADY]: [ "Angelica", "Clarissa", "Madeline", "Akari", "Annabell", "Kayley", "Rachel", "Alexa", "Sabrina", "April", "Gwyneth", "Laura", "Lumi", "Mariah", "Melita", "Nicole", "Tihana", "Ingrid", "Tyra" ], + [TrainerType.PILOT]: [ "Chase", "Leonard", "Ted", "Elron", "Ewing", "Flynn", "Winslow" ], + [TrainerType.POKEFAN]: [[ "Alex", "Allan", "Brandon", "Carter", "Colin", "Derek", "Jeremy", "Joshua", "Rex", "Robert", "Trevor", "William", "Colton", "Miguel", "Francisco", "Kaleb", "Leonard", "Boone", "Elliot", "Jude", "Norbert", "Corey", "Gabe", "Baxter" ], [ "Beverly", "Georgia", "Jaime", "Ruth", "Isabel", "Marissa", "Vanessa", "Annika", "Bethany", "Kimberly", "Meredith", "Rebekah", "Eleanor", "Darcy", "Lydia", "Sachiko", "Abigail", "Agnes", "Lydie", "Roisin", "Tara", "Carmen", "Janet" ]], + [TrainerType.PRESCHOOLER]: [[ "Billy", "Doyle", "Evan", "Homer", "Tully", "Albert", "Buster", "Greg", "Ike", "Jojo", "Tyrone", "Adrian", "Oliver", "Hayden", "Hunter", "Kaleb", "Liam", "Dylan" ], [ "Juliet", "Mia", "Sarah", "Wendy", "Winter", "Chrissy", "Eva", "Lin", "Samantha", "Ella", "Lily", "Natalie", "Ailey", "Hannah", "Malia", "Kindra", "Nancy" ]], + [TrainerType.PSYCHIC]: [[ "Fidel", "Franklin", "Gilbert", "Greg", "Herman", "Jared", "Mark", "Nathan", "Norman", "Phil", "Richard", "Rodney", "Cameron", "Edward", "Fritz", "Joshua", "Preston", "Virgil", "William", "Alvaro", "Blake", "Cedric", "Keenan", "Nicholas", "Dario", "Johan", "Lorenzo", "Tyron", "Bryce", "Corbin", "Deandre", "Elijah", "Kody", "Landon", "Maxwell", "Mitchell", "Sterling", "Eli", "Nelson", "Vernon", "Gaven", "Gerard", "Low", "Micki", "Perry", "Rudolf", "Tommy", "Al", "Nandor", "Tully", "Arthur", "Emanuel", "Franz", "Harry", "Paschal", "Robert", "Sayid", "Angelo", "Anton", "Arin", "Avery", "Danny", "Frasier", "Harrison", "Jaime", "Ross", "Rui", "Vlad", "Mason" ], [ "Alexis", "Hannah", "Jacki", "Jaclyn", "Kayla", "Maura", "Samantha", "Alix", "Brandi", "Edie", "Macey", "Mariella", "Marlene", "Laura", "Rodette", "Abigail", "Brittney", "Chelsey", "Daisy", "Desiree", "Kendra", "Lindsey", "Rachael", "Valencia", "Belle", "Cybil", "Doreen", "Dua", "Future", "Lin", "Madhu", "Alia", "Ena", "Joyce", "Lynette", "Olesia", "Sarah" ]], + [TrainerType.RANGER]: [[ "Carlos", "Jackson", "Sebastian", "Gav", "Lorenzo", "Logan", "Nicolas", "Trenton", "Deshawn", "Dwayne", "Jeffery", "Kyler", "Taylor", "Alain", "Claude", "Crofton", "Forrest", "Harry", "Jaden", "Keith", "Lewis", "Miguel", "Pedro", "Ralph", "Richard", "Bret", "Daryl", "Eddie", "Johan", "Leaf", "Louis", "Maxwell", "Parker", "Rick", "Steve", "Bjorn", "Chaise", "Dean", "Lee", "Maurice", "Nash", "Ralf", "Reed", "Shinobu", "Silas" ], [ "Catherine", "Jenna", "Sophia", "Merdith", "Nora", "Beth", "Chelsea", "Katelyn", "Madeline", "Allison", "Ashlee", "Felicia", "Krista", "Annie", "Audra", "Brenda", "Chloris", "Eliza", "Heidi", "Irene", "Mary", "Mylene", "Shanti", "Shelly", "Thalia", "Anja", "Briana", "Dianna", "Elaine", "Elle", "Hillary", "Katie", "Lena", "Lois", "Malory", "Melita", "Mikiko", "Naoko", "Serenity", "Ambre", "Brooke", "Clementine", "Melina", "Petra", "Twiggy" ]], + [TrainerType.RICH]: [[ "Alfred", "Edward", "Gregory", "Preston", "Thomas", "Tucker", "Walter", "Clifford", "Everett", "Micah", "Nate", "Pierre", "Terrance", "Arthur", "Brooks", "Emanuel", "Lamar", "Jeremy", "Leonardo", "Milton", "Frederic", "Renaud", "Robert", "Yan", "Daniel", "Sheldon", "Stonewall", "Gerald", "Ronald", "Smith", "Stanley", "Reginald", "Orson", "Wilco", "Caden", "Glenn" ], [ "Rebecca", "Reina", "Cassandra", "Emilia", "Grace", "Marian", "Elizabeth", "Kathleen", "Sayuri", "Caroline", "Judy" ]], + [TrainerType.RICH_KID]: [[ "Garret", "Winston", "Dawson", "Enrique", "Jason", "Roman", "Trey", "Liam", "Anthony", "Brad", "Cody", "Manuel", "Martin", "Pierce", "Rolan", "Keenan", "Filbert", "Antoin", "Cyus", "Diek", "Dugo", "Flitz", "Jurek", "Lond", "Perd", "Quint", "Basto", "Benit", "Brot", "Denc", "Guyit", "Marcon", "Perc", "Puros", "Roex", "Sainz", "Symin", "Tark", "Venak" ], [ "Anette", "Brianna", "Cindy", "Colleen", "Daphne", "Elizabeth", "Naomi", "Sarah", "Charlotte", "Gillian", "Jacki", "Lady", "Melissa", "Celeste", "Colette", "Elizandra", "Isabel", "Lynette", "Magnolia", "Sophie", "Lina", "Dulcie", "Auro", "Brin", "Caril", "Eloos", "Gwin", "Illa", "Kowly", "Rima", "Ristin", "Vesey", "Brena", "Deasy", "Denslon", "Kylet", "Nemi", "Rene", "Sanol", "Stouner", "Sturk", "Talmen", "Zoila" ]], + [TrainerType.ROUGHNECK]: [ "Camron", "Corey", "Gabriel", "Isaiah", "Jamal", "Koji", "Luke", "Paxton", "Raul", "Zeek", "Kirby", "Chance", "Dave", "Fletcher", "Johnny", "Reese", "Joey", "Ricky", "Silvester", "Martin" ], + [TrainerType.SAILOR]: [ "Alberto", "Bost", "Brennan", "Brenden", "Claude", "Cory", "Damian", "Dirk", "Duncan", "Dwayne", "Dylan", "Eddie", "Edmond", "Elijah", "Ernest", "Eugene", "Garrett", "Golos", "Gratin", "Grestly", "Harry", "Hols", "Hudson", "Huey", "Jebol", "Jeff", "Leonald", "Luther", "Kelvin", "Kenneth", "Kent", "Knook", "Marc", "Mifis", "Monar", "Morkor", "Ordes", "Oxlin", "Parker", "Paul", "Philip", "Roberto", "Samson", "Skyler", "Stanly", "Tebu", "Terrell", "Trevor", "Yasu", "Zachariah" ], + [TrainerType.SCIENTIST]: [[ "Jed", "Marc", "Mitch", "Rich", "Ross", "Beau", "Braydon", "Connor", "Ed", "Ivan", "Jerry", "Jose", "Joshua", "Parker", "Rodney", "Taylor", "Ted", "Travis", "Zackery", "Darrius", "Emilio", "Fredrick", "Shaun", "Stefano", "Travon", "Daniel", "Garett", "Gregg", "Linden", "Lowell", "Trenton", "Dudley", "Luke", "Markus", "Nathan", "Orville", "Randall", "Ron", "Ronald", "Simon", "Steve", "William", "Franklin", "Clarke", "Jacques", "Terrance", "Ernst", "Justus", "Ikaika", "Jayson", "Kyle", "Reid", "Tyrone", "Adam", "Albert", "Alphonse", "Cory", "Donnie", "Elton", "Francis", "Gordon", "Herbert", "Humphrey", "Jordan", "Julian", "Keaton", "Levi", "Melvin", "Murray", "West", "Craig", "Coren", "Dubik", "Kotan", "Lethco", "Mante", "Mort", "Myron", "Odlow", "Ribek", "Roeck", "Vogi", "Vonder", "Zogo", "Doimo", "Doton", "Durel", "Hildon", "Kukla", "Messa", "Nanot", "Platen", "Raburn", "Reman", "Acrod", "Coffy", "Elrok", "Foss", "Hardig", "Hombol", "Hospel", "Kaller", "Klots", "Krilok", "Limar", "Loket", "Mesak", "Morbit", "Newin", "Orill", "Tabor", "Tekot" ], [ "Blythe", "Chan", "Kathrine", "Marie", "Maria", "Naoko", "Samantha", "Satomi", "Shannon", "Athena", "Caroline", "Lumi", "Lumina", "Marissa", "Sonia" ]], + [TrainerType.SMASHER]: [ "Aspen", "Elena", "Mari", "Amy", "Lizzy" ], + [TrainerType.SNOW_WORKER]: [[ "Braden", "Brendon", "Colin", "Conrad", "Dillan", "Gary", "Gerardo", "Holden", "Jackson", "Mason", "Quentin", "Willy", "Noel", "Arnold", "Brady", "Brand", "Cairn", "Cliff", "Don", "Eddie", "Felix", "Filipe", "Glenn", "Gus", "Heath", "Matthew", "Patton", "Rich", "Rob", "Ryan", "Scott", "Shelby", "Sterling", "Tyler", "Victor", "Zack", "Friedrich", "Herman", "Isaac", "Leo", "Maynard", "Mitchell", "Morgann", "Nathan", "Niel", "Pasqual", "Paul", "Tavarius", "Tibor", "Dimitri", "Narek", "Yusif", "Frank", "Jeff", "Vaclav", "Ovid", "Francis", "Keith", "Russel", "Sangon", "Toway", "Bomber", "Chean", "Demit", "Hubor", "Kebile", "Laber", "Ordo", "Retay", "Ronix", "Wagel", "Dobit", "Kaster", "Lobel", "Releo", "Saken", "Rustix" ], [ "Georgia", "Sandra", "Yvonne" ]], + [TrainerType.STRIKER]: [ "Marco", "Roberto", "Tony" ], + [TrainerType.SCHOOL_KID]: [[ "Alan", "Billy", "Chad", "Danny", "Dudley", "Jack", "Joe", "Johnny", "Kipp", "Nate", "Ricky", "Tommy", "Jerry", "Paul", "Ted", "Chance", "Esteban", "Forrest", "Harrison", "Connor", "Sherman", "Torin", "Travis", "Al", "Carter", "Edgar", "Jem", "Sammy", "Shane", "Shayne", "Alvin", "Keston", "Neil", "Seymour", "William", "Carson", "Clark", "Nolan" ], [ "Georgia", "Karen", "Meiko", "Christine", "Mackenzie", "Tiera", "Ann", "Gina", "Lydia", "Marsha", "Millie", "Sally", "Serena", "Silvia", "Alberta", "Cassie", "Mara", "Rita", "Georgie", "Meena", "Nitzel" ]], + [TrainerType.SWIMMER]: [[ "Berke", "Cameron", "Charlie", "George", "Harold", "Jerome", "Kirk", "Mathew", "Parker", "Randall", "Seth", "Simon", "Tucker", "Austin", "Barry", "Chad", "Cody", "Darrin", "David", "Dean", "Douglas", "Franklin", "Gilbert", "Herman", "Jack", "Luis", "Matthew", "Reed", "Richard", "Rodney", "Roland", "Spencer", "Stan", "Tony", "Clarence", "Declan", "Dominik", "Harrison", "Kevin", "Leonardo", "Nolen", "Pete", "Santiago", "Axle", "Braden", "Finn", "Garrett", "Mymo", "Reece", "Samir", "Toby", "Adrian", "Colton", "Dillon", "Erik", "Evan", "Francisco", "Glenn", "Kurt", "Oscar", "Ricardo", "Sam", "Sheltin", "Troy", "Vincent", "Wade", "Wesley", "Duane", "Elmo", "Esteban", "Frankie", "Ronald", "Tyson", "Bart", "Matt", "Tim", "Wright", "Jeffery", "Kyle", "Alessandro", "Estaban", "Kieran", "Ramses", "Casey", "Dakota", "Jared", "Kalani", "Keoni", "Lawrence", "Logan", "Robert", "Roddy", "Yasu", "Derek", "Jacob", "Bruce", "Clayton" ], [ "Briana", "Dawn", "Denise", "Diana", "Elaine", "Kara", "Kaylee", "Lori", "Nicole", "Nikki", "Paula", "Susie", "Wendy", "Alice", "Beth", "Beverly", "Brenda", "Dana", "Debra", "Grace", "Jenny", "Katie", "Laurel", "Linda", "Missy", "Sharon", "Tanya", "Tara", "Tisha", "Carlee", "Imani", "Isabelle", "Kyla", "Sienna", "Abigail", "Amara", "Anya", "Connie", "Maria", "Melissa", "Nora", "Shirley", "Shania", "Tiffany", "Aubree", "Cassandra", "Claire", "Crystal", "Erica", "Gabrielle", "Haley", "Jessica", "Joanna", "Lydia", "Mallory", "Mary", "Miranda", "Paige", "Sophia", "Vanessa", "Chelan", "Debbie", "Joy", "Kendra", "Leona", "Mina", "Caroline", "Joyce", "Larissa", "Rebecca", "Tyra", "Dara", "Desiree", "Kaoru", "Ruth", "Coral", "Genevieve", "Isla", "Marissa", "Romy", "Sheryl", "Alexandria", "Alicia", "Chelsea", "Jade", "Kelsie", "Laura", "Portia", "Shelby", "Sara", "Tiare", "Kyra", "Natasha", "Layla", "Scarlett", "Cora" ]], + [TrainerType.TWINS]: [ "Amy & May", "Jo & Zoe", "Meg & Peg", "Ann & Anne", "Lea & Pia", "Amy & Liv", "Gina & Mia", "Miu & Yuki", "Tori & Tia", "Eli & Anne", "Jen & Kira", "Joy & Meg", "Kiri & Jan", "Miu & Mia", "Emma & Lil", "Liv & Liz", "Teri & Tia", "Amy & Mimi", "Clea & Gil", "Day & Dani", "Kay & Tia", "Tori & Til", "Saya & Aya", "Emy & Lin", "Kumi & Amy", "Mayo & May", "Ally & Amy", "Lia & Lily", "Rae & Ula", "Sola & Ana", "Tara & Val", "Faith & Joy", "Nana & Nina" ], + [TrainerType.VETERAN]: [[ "Armando", "Brenden", "Brian", "Clayton", "Edgar", "Emanuel", "Grant", "Harlan", "Terrell", "Arlen", "Chester", "Hugo", "Martell", "Ray", "Shaun", "Abraham", "Carter", "Claude", "Jerry", "Lucius", "Murphy", "Rayne", "Ron", "Sinan", "Sterling", "Vincent", "Zach", "Gerard", "Gilles", "Louis", "Timeo", "Akira", "Don", "Eric", "Harry", "Leon", "Roger", "Angus", "Aristo", "Brone", "Johnny" ], [ "Julia", "Karla", "Kim", "Sayuri", "Tiffany", "Cathy", "Cecile", "Chloris", "Denae", "Gina", "Maya", "Oriana", "Portia", "Rhona", "Rosaline", "Catrina", "Inga", "Trisha", "Heather", "Lynn", "Sheri", "Alonsa", "Ella", "Leticia", "Kiara" ]], + [TrainerType.WAITER]: [[ "Bert", "Clint", "Maxwell", "Lou" ], [ "Kati", "Aurora", "Bonita", "Flo", "Tia", "Jan", "Olwen", "Paget", "Paula", "Talia" ]], + [TrainerType.WORKER]: [[ "Braden", "Brendon", "Colin", "Conrad", "Dillan", "Gary", "Gerardo", "Holden", "Jackson", "Mason", "Quentin", "Willy", "Noel", "Arnold", "Brady", "Brand", "Cairn", "Cliff", "Don", "Eddie", "Felix", "Filipe", "Glenn", "Gus", "Heath", "Matthew", "Patton", "Rich", "Rob", "Ryan", "Scott", "Shelby", "Sterling", "Tyler", "Victor", "Zack", "Friedrich", "Herman", "Isaac", "Leo", "Maynard", "Mitchell", "Morgann", "Nathan", "Niel", "Pasqual", "Paul", "Tavarius", "Tibor", "Dimitri", "Narek", "Yusif", "Frank", "Jeff", "Vaclav", "Ovid", "Francis", "Keith", "Russel", "Sangon", "Toway", "Bomber", "Chean", "Demit", "Hubor", "Kebile", "Laber", "Ordo", "Retay", "Ronix", "Wagel", "Dobit", "Kaster", "Lobel", "Releo", "Saken", "Rustix" ], [ "Georgia", "Sandra", "Yvonne" ]], + [TrainerType.YOUNGSTER]: [[ "Albert", "Gordon", "Ian", "Jason", "Jimmy", "Mikey", "Owen", "Samuel", "Warren", "Allen", "Ben", "Billy", "Calvin", "Dillion", "Eddie", "Joey", "Josh", "Neal", "Timmy", "Tommy", "Breyden", "Deandre", "Demetrius", "Dillon", "Jaylen", "Johnson", "Shigenobu", "Chad", "Cole", "Cordell", "Dan", "Dave", "Destin", "Nash", "Tyler", "Yasu", "Austin", "Dallas", "Darius", "Donny", "Jonathon", "Logan", "Michael", "Oliver", "Sebastian", "Tristan", "Wayne", "Norman", "Roland", "Regis", "Abe", "Astor", "Keita", "Kenneth", "Kevin", "Kyle", "Lester", "Masao", "Nicholas", "Parker", "Wes", "Zachary", "Cody", "Henley", "Jaye", "Karl", "Kenny", "Masahiro", "Pedro", "Petey", "Sinclair", "Terrell", "Waylon", "Aidan", "Anthony", "David", "Jacob", "Jayden", "Cutler", "Ham", "Caleb", "Kai", "Honus", "Kenway", "Bret", "Chris", "Cid", "Dennis", "Easton", "Ken", "Robby", "Ronny", "Shawn", "Benjamin", "Jake", "Travis", "Adan", "Aday", "Beltran", "Elian", "Hernan", "Julen", "Luka", "Roi", "Bernie", "Dustin", "Jonathan", "Wyatt" ], [ "Alice", "Bridget", "Carrie", "Connie", "Dana", "Ellen", "Krise", "Laura", "Linda", "Michelle", "Shannon", "Andrea", "Crissy", "Janice", "Robin", "Sally", "Tiana", "Haley", "Ali", "Ann", "Dalia", "Dawn", "Iris", "Joana", "Julia", "Kay", "Lisa", "Megan", "Mikaela", "Miriam", "Paige", "Reli", "Blythe", "Briana", "Caroline", "Cassidy", "Kaitlin", "Madeline", "Molly", "Natalie", "Samantha", "Sarah", "Cathy", "Dye", "Eri", "Eva", "Fey", "Kara", "Lurleen", "Maki", "Mali", "Maya", "Miki", "Sibyl", "Daya", "Diana", "Flo", "Helia", "Henrietta", "Isabel", "Mai", "Persephone", "Serena", "Anna", "Charlotte", "Elin", "Elsa", "Lise", "Sara", "Suzette", "Audrey", "Emmy", "Isabella", "Madison", "Rika", "Rylee", "Salla", "Ellie", "Alexandra", "Amy", "Lass", "Brittany", "Chel", "Cindy", "Dianne", "Emily", "Emma", "Evelyn", "Hana", "Harleen", "Hazel", "Jocelyn", "Katrina", "Kimberly", "Lina", "Marge", "Mila", "Mizuki", "Rena", "Sal", "Satoko", "Summer", "Tomoe", "Vicky", "Yue", "Yumi", "Lauren", "Rei", "Riley", "Lois", "Nancy", "Tammy", "Terry" ]], + [TrainerType.HEX_MANIAC]: [ "Kindra", "Patricia", "Tammy", "Tasha", "Valerie", "Alaina", "Kathleen", "Leah", "Makie", "Sylvia", "Anina", "Arachna", "Carrie", "Desdemona", "Josette", "Luna", "Melanie", "Osanna", "Raziah" ], }; // function used in a commented code @@ -140,7 +140,7 @@ function fetchAndPopulateTrainerNames(url: string, parser: DOMParser, trainerNam if (!trainerListHeader) { return []; } - const elements = [...(trainerListHeader?.parentElement?.childNodes ?? [])]; + const elements = [ ...(trainerListHeader?.parentElement?.childNodes ?? []) ]; const startChildIndex = elements.indexOf(trainerListHeader); const endChildIndex = elements.findIndex(h => h.nodeName === "H2" && elements.indexOf(h) > startChildIndex); const tables = elements.filter(t => { @@ -152,7 +152,7 @@ function fetchAndPopulateTrainerNames(url: string, parser: DOMParser, trainerNam }).map(t => t as Element); console.log(url, tables); for (const table of tables) { - const trainerRows = [...table.querySelectorAll("tr:not(:first-child)")].filter(r => r.children.length === 9); + const trainerRows = [ ...table.querySelectorAll("tr:not(:first-child)") ].filter(r => r.children.length === 9); for (const row of trainerRows) { const nameCell = row.firstElementChild; if (!nameCell) { diff --git a/src/data/weather.ts b/src/data/weather.ts index afdd0a958cf..8dfa17c4ef8 100644 --- a/src/data/weather.ts +++ b/src/data/weather.ts @@ -171,9 +171,9 @@ export function getWeatherLapseMessage(weatherType: WeatherType): string | null export function getWeatherDamageMessage(weatherType: WeatherType, pokemon: Pokemon): string | null { switch (weatherType) { case WeatherType.SANDSTORM: - return i18next.t("weather:sandstormDamageMessage", {pokemonNameWithAffix: getPokemonNameWithAffix(pokemon)}); + return i18next.t("weather:sandstormDamageMessage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }); case WeatherType.HAIL: - return i18next.t("weather:hailDamageMessage", {pokemonNameWithAffix: getPokemonNameWithAffix(pokemon)}); + return i18next.t("weather:hailDamageMessage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }); } return null; @@ -238,9 +238,9 @@ export function getTerrainClearMessage(terrainType: TerrainType): string | null export function getTerrainBlockMessage(pokemon: Pokemon, terrainType: TerrainType): string { if (terrainType === TerrainType.MISTY) { - return i18next.t("terrain:mistyBlockMessage", {pokemonNameWithAffix: getPokemonNameWithAffix(pokemon)}); + return i18next.t("terrain:mistyBlockMessage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }); } - return i18next.t("terrain:defaultBlockMessage", {pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), terrainName: getTerrainName(terrainType)}); + return i18next.t("terrain:defaultBlockMessage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), terrainName: getTerrainName(terrainType) }); } interface WeatherPoolEntry { diff --git a/src/enums/arena-tag-type.ts b/src/enums/arena-tag-type.ts index 123d70b64fa..c484b2932f1 100644 --- a/src/enums/arena-tag-type.ts +++ b/src/enums/arena-tag-type.ts @@ -1,4 +1,3 @@ - export enum ArenaTagType { NONE = "NONE", MUD_SPORT = "MUD_SPORT", diff --git a/src/enums/battler-tag-type.ts b/src/enums/battler-tag-type.ts index 209d36316f9..ccd6e9fe314 100644 --- a/src/enums/battler-tag-type.ts +++ b/src/enums/battler-tag-type.ts @@ -1,4 +1,3 @@ - export enum BattlerTagType { NONE = "NONE", RECHARGING = "RECHARGING", diff --git a/src/enums/berry-type.ts b/src/enums/berry-type.ts index 8b7aab16010..97c69148146 100644 --- a/src/enums/berry-type.ts +++ b/src/enums/berry-type.ts @@ -1,4 +1,3 @@ - export enum BerryType { SITRUS, LUM, diff --git a/src/enums/biome.ts b/src/enums/biome.ts index 7088b2e99ac..bb9eaf454cc 100644 --- a/src/enums/biome.ts +++ b/src/enums/biome.ts @@ -1,4 +1,3 @@ - export enum Biome { TOWN, PLAINS, diff --git a/src/enums/time-of-day.ts b/src/enums/time-of-day.ts index 9363aa4c73a..3fd05308cc6 100644 --- a/src/enums/time-of-day.ts +++ b/src/enums/time-of-day.ts @@ -1,4 +1,3 @@ - export enum TimeOfDay { ALL = -1, DAWN, diff --git a/src/field/mystery-encounter-intro.ts b/src/field/mystery-encounter-intro.ts index 70588da5d44..12bcace500c 100644 --- a/src/field/mystery-encounter-intro.ts +++ b/src/field/mystery-encounter-intro.ts @@ -101,14 +101,14 @@ export default class MysteryEncounterIntroVisuals extends Phaser.GameObjects.Con const getSprite = (spriteKey: string, hasShadow?: boolean, yShadow?: number) => { const ret = this.scene.addFieldSprite(0, 0, spriteKey); ret.setOrigin(0.5, 1); - ret.setPipeline(this.scene.spritePipeline, { tone: [0.0, 0.0, 0.0, 0.0], hasShadow: !!hasShadow, yShadowOffset: yShadow ?? 0 }); + ret.setPipeline(this.scene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], hasShadow: !!hasShadow, yShadowOffset: yShadow ?? 0 }); return ret; }; const getItemSprite = (spriteKey: string, hasShadow?: boolean, yShadow?: number) => { const icon = this.scene.add.sprite(-19, 2, "items", spriteKey); icon.setOrigin(0.5, 1); - icon.setPipeline(this.scene.spritePipeline, { tone: [0.0, 0.0, 0.0, 0.0], hasShadow: !!hasShadow, yShadowOffset: yShadow ?? 0 }); + icon.setPipeline(this.scene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], hasShadow: !!hasShadow, yShadowOffset: yShadow ?? 0 }); return icon; }; diff --git a/src/field/pokemon-sprite-sparkle-handler.ts b/src/field/pokemon-sprite-sparkle-handler.ts index ccf6a098667..2c4c295eaa4 100644 --- a/src/field/pokemon-sprite-sparkle-handler.ts +++ b/src/field/pokemon-sprite-sparkle-handler.ts @@ -36,7 +36,7 @@ export default class PokemonSpriteSparkleHandler { const ratioY = s.height / height; const pixel = texture.manager.getPixel(pixelX, pixelY, texture.key, "__BASE"); if (pixel?.alpha) { - const [ xOffset, yOffset ] = [ -s.originX * s.width, -s.originY * s.height]; + const [ xOffset, yOffset ] = [ -s.originX * s.width, -s.originY * s.height ]; const sparkle = (s.scene as BattleScene).addFieldSprite(((pokemon?.x || 0) + s.x + pixelX * ratioX + xOffset), ((pokemon?.y || 0) + s.y + pixelY * ratioY + yOffset), "tera_sparkle"); sparkle.pipelineData["ignoreTimeTint"] = s.pipelineData["ignoreTimeTint"]; sparkle.setName("sprite-tera-sparkle"); diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index de18dfb74eb..731d71b85d9 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -696,7 +696,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @see {@linkcode getFieldPositionOffset} */ getSubstituteOffset(): [ number, number ] { - return this.isPlayer() ? [-30, 10] : [30, -10]; + return this.isPlayer() ? [ -30, 10 ] : [ 30, -10 ]; } /** @@ -1106,7 +1106,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // Overrides moveset based on arrays specified in overrides.ts let overrideArray: Moves | Array = this.isPlayer() ? Overrides.MOVESET_OVERRIDE : Overrides.OPP_MOVESET_OVERRIDE; if (!Array.isArray(overrideArray)) { - overrideArray = [overrideArray]; + overrideArray = [ overrideArray ]; } if (overrideArray.length > 0) { if (!this.isPlayer()) { @@ -1392,10 +1392,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const suppressed = new Utils.BooleanHolder(false); this.scene.getField(true).filter(p => p !== this).map(p => { if (p.getAbility().hasAttr(SuppressFieldAbilitiesAbAttr) && p.canApplyAbility()) { - p.getAbility().getAttrs(SuppressFieldAbilitiesAbAttr).map(a => a.apply(this, false, false, suppressed, [ability])); + p.getAbility().getAttrs(SuppressFieldAbilitiesAbAttr).map(a => a.apply(this, false, false, suppressed, [ ability ])); } if (p.getPassiveAbility().hasAttr(SuppressFieldAbilitiesAbAttr) && p.canApplyAbility(true)) { - p.getPassiveAbility().getAttrs(SuppressFieldAbilitiesAbAttr).map(a => a.apply(this, true, false, suppressed, [ability])); + p.getPassiveAbility().getAttrs(SuppressFieldAbilitiesAbAttr).map(a => a.apply(this, true, false, suppressed, [ ability ])); } }); if (suppressed.value) { @@ -1531,7 +1531,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } - /** * Calculates the effectiveness of a move against the Pokémon. * This includes modifiers from move and ability attributes. @@ -2026,7 +2025,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { weight /= 100; } // Unimplemented level up moves are possible to generate, but 1% of their normal chance. if (!movePool.some(m => m[0] === levelMove[1])) { - movePool.push([levelMove[1], weight]); + movePool.push([ levelMove[1], weight ]); } } @@ -2048,11 +2047,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } if (compatible && !movePool.some(m => m[0] === moveId) && !allMoves[moveId].name.endsWith(" (N)")) { if (tmPoolTiers[moveId] === ModifierTier.COMMON && this.level >= 15) { - movePool.push([moveId, 4]); + movePool.push([ moveId, 4 ]); } else if (tmPoolTiers[moveId] === ModifierTier.GREAT && this.level >= 30) { - movePool.push([moveId, 8]); + movePool.push([ moveId, 8 ]); } else if (tmPoolTiers[moveId] === ModifierTier.ULTRA && this.level >= 50) { - movePool.push([moveId, 14]); + movePool.push([ moveId, 14 ]); } } } @@ -2061,23 +2060,23 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { for (let i = 0; i < 3; i++) { const moveId = speciesEggMoves[this.species.getRootSpeciesId()][i]; if (!movePool.some(m => m[0] === moveId) && !allMoves[moveId].name.endsWith(" (N)")) { - movePool.push([moveId, 40]); + movePool.push([ moveId, 40 ]); } } const moveId = speciesEggMoves[this.species.getRootSpeciesId()][3]; if (this.level >= 170 && !movePool.some(m => m[0] === moveId) && !allMoves[moveId].name.endsWith(" (N)") && !this.isBoss()) { // No rare egg moves before e4 - movePool.push([moveId, 30]); + movePool.push([ moveId, 30 ]); } if (this.fusionSpecies) { for (let i = 0; i < 3; i++) { const moveId = speciesEggMoves[this.fusionSpecies.getRootSpeciesId()][i]; if (!movePool.some(m => m[0] === moveId) && !allMoves[moveId].name.endsWith(" (N)")) { - movePool.push([moveId, 40]); + movePool.push([ moveId, 40 ]); } } const moveId = speciesEggMoves[this.fusionSpecies.getRootSpeciesId()][3]; if (this.level >= 170 && !movePool.some(m => m[0] === moveId) && !allMoves[moveId].name.endsWith(" (N)") && !this.isBoss()) {// No rare egg moves before e4 - movePool.push([moveId, 30]); + movePool.push([ moveId, 30 ]); } } } @@ -2091,26 +2090,26 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // Trainers never get OHKO moves movePool = movePool.filter(m => !allMoves[m[0]].hasAttr(OneHitKOAttr)); // Half the weight of self KO moves - movePool = movePool.map(m => [m[0], m[1] * (!!allMoves[m[0]].hasAttr(SacrificialAttr) ? 0.5 : 1)]); - movePool = movePool.map(m => [m[0], m[1] * (!!allMoves[m[0]].hasAttr(SacrificialAttrOnHit) ? 0.5 : 1)]); + movePool = movePool.map(m => [ m[0], m[1] * (!!allMoves[m[0]].hasAttr(SacrificialAttr) ? 0.5 : 1) ]); + movePool = movePool.map(m => [ m[0], m[1] * (!!allMoves[m[0]].hasAttr(SacrificialAttrOnHit) ? 0.5 : 1) ]); // Trainers get a weight bump to stat buffing moves - movePool = movePool.map(m => [m[0], m[1] * (allMoves[m[0]].getAttrs(StatStageChangeAttr).some(a => a.stages > 1 && a.selfTarget) ? 1.25 : 1)]); + movePool = movePool.map(m => [ m[0], m[1] * (allMoves[m[0]].getAttrs(StatStageChangeAttr).some(a => a.stages > 1 && a.selfTarget) ? 1.25 : 1) ]); // Trainers get a weight decrease to multiturn moves - movePool = movePool.map(m => [m[0], m[1] * (!!allMoves[m[0]].hasAttr(ChargeAttr) || !!allMoves[m[0]].hasAttr(RechargeAttr) ? 0.7 : 1)]); + movePool = movePool.map(m => [ m[0], m[1] * (!!allMoves[m[0]].hasAttr(ChargeAttr) || !!allMoves[m[0]].hasAttr(RechargeAttr) ? 0.7 : 1) ]); } // Weight towards higher power moves, by reducing the power of moves below the highest power. // Caps max power at 90 to avoid something like hyper beam ruining the stats. // This is a pretty soft weighting factor, although it is scaled with the weight multiplier. const maxPower = Math.min(movePool.reduce((v, m) => Math.max(allMoves[m[0]].power, v), 40), 90); - movePool = movePool.map(m => [m[0], m[1] * (allMoves[m[0]].category === MoveCategory.STATUS ? 1 : Math.max(Math.min(allMoves[m[0]].power/maxPower, 1), 0.5))]); + movePool = movePool.map(m => [ m[0], m[1] * (allMoves[m[0]].category === MoveCategory.STATUS ? 1 : Math.max(Math.min(allMoves[m[0]].power / maxPower, 1), 0.5)) ]); // Weight damaging moves against the lower stat const atk = this.getStat(Stat.ATK); const spAtk = this.getStat(Stat.SPATK); const worseCategory: MoveCategory = atk > spAtk ? MoveCategory.SPECIAL : MoveCategory.PHYSICAL; const statRatio = worseCategory === MoveCategory.PHYSICAL ? atk / spAtk : spAtk / atk; - movePool = movePool.map(m => [m[0], m[1] * (allMoves[m[0]].category === worseCategory ? statRatio : 1)]); + movePool = movePool.map(m => [ m[0], m[1] * (allMoves[m[0]].category === worseCategory ? statRatio : 1) ]); let weightMultiplier = 0.9; // The higher this is the more the game weights towards higher level moves. At 0 all moves are equal weight. if (this.hasTrainer()) { @@ -2119,7 +2118,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (this.isBoss()) { weightMultiplier += 0.4; } - const baseWeights: [Moves, number][] = movePool.map(m => [m[0], Math.ceil(Math.pow(m[1], weightMultiplier)*100)]); + const baseWeights: [Moves, number][] = movePool.map(m => [ m[0], Math.ceil(Math.pow(m[1], weightMultiplier) * 100) ]); if (this.hasTrainer() || this.isBoss()) { // Trainers and bosses always force a stab move const stabMovePool = baseWeights.filter(m => allMoves[m[0]].category !== MoveCategory.STATUS && this.isOfType(allMoves[m[0]].type)); @@ -2151,7 +2150,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // Sqrt the weight of any damaging moves with overlapping types. This is about a 0.05 - 0.1 multiplier. // Other damaging moves 2x weight if 0-1 damaging moves, 0.5x if 2, 0.125x if 3. These weights double if STAB. // Status moves remain unchanged on weight, this encourages 1-2 - movePool = baseWeights.filter(m => !this.moveset.some(mo => m[0] === mo?.moveId)).map(m => [m[0], this.moveset.some(mo => mo?.getMove().category !== MoveCategory.STATUS && mo?.getMove().type === allMoves[m[0]].type) ? Math.ceil(Math.sqrt(m[1])) : allMoves[m[0]].category !== MoveCategory.STATUS ? Math.ceil(m[1]/Math.max(Math.pow(4, this.moveset.filter(mo => (mo?.getMove().power!) > 1).length)/8, 0.5) * (this.isOfType(allMoves[m[0]].type) ? 2 : 1)) : m[1]]); // TODO: is this bang correct? + movePool = baseWeights.filter(m => !this.moveset.some(mo => m[0] === mo?.moveId)).map(m => [ m[0], this.moveset.some(mo => mo?.getMove().category !== MoveCategory.STATUS && mo?.getMove().type === allMoves[m[0]].type) ? Math.ceil(Math.sqrt(m[1])) : allMoves[m[0]].category !== MoveCategory.STATUS ? Math.ceil(m[1] / Math.max(Math.pow(4, this.moveset.filter(mo => (mo?.getMove().power!) > 1).length) / 8, 0.5) * (this.isOfType(allMoves[m[0]].type) ? 2 : 1)) : m[1] ]); // TODO: is this bang correct? } else { // Non-trainer pokemon just use normal weights movePool = baseWeights.filter(m => !this.moveset.some(mo => m[0] === mo?.moveId)); } @@ -2689,7 +2688,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (critOnly.value || critAlways) { isCritical = true; } else { - const critChance = [24, 8, 2, 1][Math.max(0, Math.min(this.getCritStage(source, move), 3))]; + const critChance = [ 24, 8, 2, 1 ][Math.max(0, Math.min(this.getCritStage(source, move), 3))]; isCritical = critChance === 1 || !this.scene.randBattleSeedInt(critChance); } @@ -2874,7 +2873,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } isMax(): boolean { - const maxForms = [SpeciesFormKey.GIGANTAMAX, SpeciesFormKey.GIGANTAMAX_RAPID, SpeciesFormKey.GIGANTAMAX_SINGLE, SpeciesFormKey.ETERNAMAX] as string[]; + const maxForms = [ SpeciesFormKey.GIGANTAMAX, SpeciesFormKey.GIGANTAMAX_RAPID, SpeciesFormKey.GIGANTAMAX_SINGLE, SpeciesFormKey.ETERNAMAX ] as string[]; return maxForms.includes(this.getFormKey()) || (!!this.getFusionFormKey() && maxForms.includes(this.getFusionFormKey()!)); } @@ -3362,7 +3361,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } break; case StatusEffect.FREEZE: - if (this.isOfType(Type.ICE) || (this.scene?.arena?.weather?.weatherType &&[WeatherType.SUNNY, WeatherType.HARSH_SUN].includes(this.scene.arena.weather.weatherType))) { + if (this.isOfType(Type.ICE) || (this.scene?.arena?.weather?.weatherType && [ WeatherType.SUNNY, WeatherType.HARSH_SUN ].includes(this.scene.arena.weather.weatherType))) { return false; } break; @@ -3655,7 +3654,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const pixel = pixelData[f].slice(i, i + 4); let [ r, g, b, a ] = pixel; if (variantColors) { - const color = Utils.rgbaToInt([r, g, b, a]); + const color = Utils.rgbaToInt([ r, g, b, a ]); if (variantColorSet.has(color)) { const mappedPixel = variantColorSet.get(color); if (mappedPixel) { @@ -3699,7 +3698,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } let [ r, g, b, a ] = [ pixelData[2 + f][i], pixelData[2 + f][i + 1], pixelData[2 + f][i + 2], pixelData[2 + f][i + 3] ]; if (variantColors) { - const color = Utils.rgbaToInt([r, g, b, a]); + const color = Utils.rgbaToInt([ r, g, b, a ]); if (variantColorSet.has(color)) { const mappedPixel = variantColorSet.get(color); if (mappedPixel) { @@ -3994,7 +3993,7 @@ export class PlayerPokemon extends Pokemon { let compatible = false; for (const p of tmSpecies[tm]) { if (Array.isArray(p)) { - const [pkm, form] = p; + const [ pkm, form ] = p; if ((pkm === this.species.speciesId || this.fusionSpecies && pkm === this.fusionSpecies.speciesId) && form === this.getFormKey()) { compatible = true; break; @@ -4083,7 +4082,7 @@ export class PlayerPokemon extends Pokemon { revivalBlessing(): Promise { return new Promise(resolve => { this.scene.ui.setMode(Mode.PARTY, PartyUiMode.REVIVAL_BLESSING, this.getFieldIndex(), (slotIndex:integer, option: PartyOption) => { - if (slotIndex >= 0 && slotIndex<6) { + if (slotIndex >= 0 && slotIndex < 6) { const pokemon = this.scene.getParty()[slotIndex]; if (!pokemon || !pokemon.isFainted()) { resolve(); @@ -4092,11 +4091,11 @@ export class PlayerPokemon extends Pokemon { pokemon.resetTurnData(); pokemon.resetStatus(); pokemon.heal(Math.min(Utils.toDmgValue(0.5 * pokemon.getMaxHp()), pokemon.getMaxHp())); - this.scene.queueMessage(i18next.t("moveTriggers:revivalBlessing", {pokemonName: pokemon.name}), 0, true); + this.scene.queueMessage(i18next.t("moveTriggers:revivalBlessing", { pokemonName: pokemon.name }), 0, true); if (this.scene.currentBattle.double && this.scene.getParty().length > 1) { const allyPokemon = this.getAlly(); - if (slotIndex<=1) { + if (slotIndex <= 1) { // Revived ally pokemon this.scene.unshiftPhase(new SwitchSummonPhase(this.scene, SwitchType.SWITCH, pokemon.getFieldIndex(), slotIndex, false, true)); this.scene.unshiftPhase(new ToggleDoublePositionPhase(this.scene, true)); @@ -4163,7 +4162,7 @@ export class PlayerPokemon extends Pokemon { if (!isFusion) { const abilityCount = this.getSpeciesForm().getAbilityCount(); const preEvoAbilityCount = preEvolution.getAbilityCount(); - if ([0, 1, 2].includes(this.abilityIndex)) { + if ([ 0, 1, 2 ].includes(this.abilityIndex)) { // Handles cases where a Pokemon with 3 abilities evolves into a Pokemon with 2 abilities (ie: Eevee -> any Eeveelution) if (this.abilityIndex === 2 && preEvoAbilityCount === 3 && abilityCount === 2) { this.abilityIndex = 1; @@ -4176,7 +4175,7 @@ export class PlayerPokemon extends Pokemon { } else { // Do the same as above, but for fusions const abilityCount = this.getFusionSpeciesForm().getAbilityCount(); const preEvoAbilityCount = preEvolution.getAbilityCount(); - if ([0, 1, 2].includes(this.fusionAbilityIndex)) { + if ([ 0, 1, 2 ].includes(this.fusionAbilityIndex)) { if (this.fusionAbilityIndex === 2 && preEvoAbilityCount === 3 && abilityCount === 2) { this.fusionAbilityIndex = 1; } @@ -4567,7 +4566,7 @@ export class EnemyPokemon extends Pokemon { return move.category !== MoveCategory.STATUS && moveTargets.some(p => { - const doesNotFail = move.applyConditions(this, p, move) || [Moves.SUCKER_PUNCH, Moves.UPPER_HAND, Moves.THUNDERCLAP].includes(move.id); + const doesNotFail = move.applyConditions(this, p, move) || [ Moves.SUCKER_PUNCH, Moves.UPPER_HAND, Moves.THUNDERCLAP ].includes(move.id); return doesNotFail && p.getAttackDamage(this, move, !p.battleData.abilityRevealed, false, isCritical).damage >= p.hp; }); }, this); @@ -4610,7 +4609,7 @@ export class EnemyPokemon extends Pokemon { * If this move is unimplemented, or the move is known to fail when used, set its * target score to -20 */ - if ((move.name.endsWith(" (N)") || !move.applyConditions(this, target, move)) && ![Moves.SUCKER_PUNCH, Moves.UPPER_HAND, Moves.THUNDERCLAP].includes(move.id)) { + if ((move.name.endsWith(" (N)") || !move.applyConditions(this, target, move)) && ![ Moves.SUCKER_PUNCH, Moves.UPPER_HAND, Moves.THUNDERCLAP ].includes(move.id)) { targetScore = -20; } else if (move instanceof AttackMove) { /** @@ -4706,7 +4705,7 @@ export class EnemyPokemon extends Pokemon { // Set target to BattlerIndex.ATTACKER when using a counter move // This is the same as when the player does so if (move.hasAttr(CounterDamageAttr)) { - return [BattlerIndex.ATTACKER]; + return [ BattlerIndex.ATTACKER ]; } return []; diff --git a/src/field/trainer.ts b/src/field/trainer.ts index 06548e2b020..2ec9d07e474 100644 --- a/src/field/trainer.ts +++ b/src/field/trainer.ts @@ -1,6 +1,6 @@ import BattleScene from "#app/battle-scene"; -import {pokemonPrevolutions} from "#app/data/balance/pokemon-evolutions"; -import PokemonSpecies, {getPokemonSpecies} from "#app/data/pokemon-species"; +import { pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; +import PokemonSpecies, { getPokemonSpecies } from "#app/data/pokemon-species"; import { TrainerConfig, TrainerPartyCompoundTemplate, @@ -11,7 +11,7 @@ import { trainerPartyTemplates, signatureSpecies } from "#app/data/trainer-config"; -import {EnemyPokemon} from "#app/field/pokemon"; +import { EnemyPokemon } from "#app/field/pokemon"; import * as Utils from "#app/utils"; import { PersistentModifier } from "#app/modifier/modifier"; import { trainerNamePools } from "#app/data/trainer-names"; @@ -56,7 +56,7 @@ export default class Trainer extends Phaser.GameObjects.Container { if (partnerName) { this.partnerName = partnerName; } else { - [this.name, this.partnerName] = this.name.split(" & "); + [ this.name, this.partnerName ] = this.name.split(" & "); } } else { this.partnerName = partnerName || Utils.randSeedItem(Array.isArray(namePool[0]) ? namePool[1] : namePool); @@ -82,7 +82,7 @@ export default class Trainer extends Phaser.GameObjects.Container { const getSprite = (hasShadow?: boolean, forceFemale?: boolean) => { const ret = this.scene.addFieldSprite(0, 0, this.config.getSpriteKey(variant === TrainerVariant.FEMALE || forceFemale, this.isDouble())); ret.setOrigin(0.5, 1); - ret.setPipeline(this.scene.spritePipeline, {tone: [0.0, 0.0, 0.0, 0.0], hasShadow: !!hasShadow}); + ret.setPipeline(this.scene.spritePipeline, { tone: [ 0.0, 0.0, 0.0, 0.0 ], hasShadow: !!hasShadow }); return ret; }; @@ -126,7 +126,7 @@ export default class Trainer extends Phaser.GameObjects.Container { // Determine the title to include based on the configuration and includeTitle flag. let title = includeTitle && this.config.title ? this.config.title : null; - const evilTeamTitles = ["grunt"]; + const evilTeamTitles = [ "grunt" ]; if (this.name === "" && evilTeamTitles.some(t => name.toLocaleLowerCase().includes(t))) { // This is a evil team grunt so we localize it by only using the "name" as the title title = i18next.t(`trainerClasses:${name.toLowerCase().replace(/\s/g, "_")}`); @@ -336,9 +336,9 @@ export default class Trainer extends Phaser.GameObjects.Container { if (!(index % 2)) { // Since the only currently allowed double battle with named trainers is Tate & Liza, we need to make sure that Solrock is the first pokemon in the party for Tate and Lunatone for Liza if (index === 0 && (TrainerType[this.config.trainerType] === TrainerType[TrainerType.TATE])) { - newSpeciesPool = [Species.SOLROCK]; + newSpeciesPool = [ Species.SOLROCK ]; } else if (index === 0 && (TrainerType[this.config.trainerType] === TrainerType[TrainerType.LIZA])) { - newSpeciesPool = [Species.LUNATONE]; + newSpeciesPool = [ Species.LUNATONE ]; } else { newSpeciesPool = speciesPoolFiltered; } @@ -346,9 +346,9 @@ export default class Trainer extends Phaser.GameObjects.Container { // If the index is odd, use the species pool for the partner trainer (that way he only uses his own pokemon in battle) // Since the only currently allowed double battle with named trainers is Tate & Liza, we need to make sure that Solrock is the first pokemon in the party for Tate and Lunatone for Liza if (index === 1 && (TrainerType[this.config.trainerTypeDouble] === TrainerType[TrainerType.TATE])) { - newSpeciesPool = [Species.SOLROCK]; + newSpeciesPool = [ Species.SOLROCK ]; } else if (index === 1 && (TrainerType[this.config.trainerTypeDouble] === TrainerType[TrainerType.LIZA])) { - newSpeciesPool = [Species.LUNATONE]; + newSpeciesPool = [ Species.LUNATONE ]; } else { newSpeciesPool = speciesPoolPartnerFiltered; } @@ -475,7 +475,7 @@ export default class Trainer extends Phaser.GameObjects.Container { } } - return [party.indexOf(p), score]; + return [ party.indexOf(p), score ]; }) as [integer, integer][]; return partyMemberScores; diff --git a/src/game-mode.ts b/src/game-mode.ts index 525c975a19b..91e8933ea6e 100644 --- a/src/game-mode.ts +++ b/src/game-mode.ts @@ -33,8 +33,8 @@ interface GameModeConfig { } // Describes min and max waves for MEs in specific game modes -export const CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES: [number, number] = [10, 180]; -export const CHALLENGE_MODE_MYSTERY_ENCOUNTER_WAVES: [number, number] = [10, 180]; +export const CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES: [number, number] = [ 10, 180 ]; +export const CHALLENGE_MODE_MYSTERY_ENCOUNTER_WAVES: [number, number] = [ 10, 180 ]; export class GameMode implements GameModeConfig { public modeId: GameModes; @@ -330,7 +330,7 @@ export class GameMode implements GameModeConfig { getMysteryEncounterLegalWaves(): [number, number] { switch (this.modeId) { default: - return [0, 0]; + return [ 0, 0 ]; case GameModes.CLASSIC: return CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES; case GameModes.CHALLENGE: diff --git a/src/inputs-controller.ts b/src/inputs-controller.ts index bb3cfcbeb3b..537d2870259 100644 --- a/src/inputs-controller.ts +++ b/src/inputs-controller.ts @@ -1,12 +1,12 @@ import Phaser from "phaser"; import * as Utils from "./utils"; -import {deepCopy} from "./utils"; +import { deepCopy } from "./utils"; import pad_generic from "./configs/inputs/pad_generic"; import pad_unlicensedSNES from "./configs/inputs/pad_unlicensedSNES"; import pad_xbox360 from "./configs/inputs/pad_xbox360"; import pad_dualshock from "./configs/inputs/pad_dualshock"; import pad_procon from "./configs/inputs/pad_procon"; -import {Mode} from "./ui/ui"; +import { Mode } from "./ui/ui"; import SettingsGamepadUiHandler from "./ui/settings/settings-gamepad-ui-handler"; import SettingsKeyboardUiHandler from "./ui/settings/settings-keyboard-ui-handler"; import cfg_keyboard_qwerty from "./configs/inputs/cfg_keyboard_qwerty"; @@ -16,8 +16,8 @@ import { getIconForLatestInput, swap, } from "#app/configs/inputs/configHandler"; import BattleScene from "./battle-scene"; -import {SettingGamepad} from "#app/system/settings/settings-gamepad"; -import {SettingKeyboard} from "#app/system/settings/settings-keyboard"; +import { SettingGamepad } from "#app/system/settings/settings-gamepad"; +import { SettingKeyboard } from "#app/system/settings/settings-keyboard"; import TouchControl from "#app/touch-controls"; import { Button } from "#enums/buttons"; import { Device } from "#enums/devices"; @@ -294,7 +294,7 @@ export class InputsController { this.setChosenGamepad(gamepadID); } const config = deepCopy(this.getConfig(gamepadID)) as InterfaceConfig; - config.custom = this.configs[gamepadID]?.custom || {...config.default}; + config.custom = this.configs[gamepadID]?.custom || { ...config.default }; this.configs[gamepadID] = config; this.scene.gameData?.saveMappingConfigs(gamepadID, this.configs[gamepadID]); } @@ -307,9 +307,9 @@ export class InputsController { * Initializes or updates configurations for connected keyboards. */ setupKeyboard(): void { - for (const layout of ["default"]) { + for (const layout of [ "default" ]) { const config = deepCopy(this.getConfigKeyboard(layout)) as InterfaceConfig; - config.custom = this.configs[layout]?.custom || {...config.default}; + config.custom = this.configs[layout]?.custom || { ...config.default }; this.configs[layout] = config; this.scene.gameData?.saveMappingConfigs(this.selectedDevice[Device.KEYBOARD], this.configs[layout]); } @@ -330,7 +330,7 @@ export class InputsController { return el !== null; }) ?? []; - for (const [index, thisGamepad] of this.gamepads.entries()) { + for (const [ index, thisGamepad ] of this.gamepads.entries()) { thisGamepad.index = index; // Overwrite the gamepad index, in case we had undefined gamepads earlier } } diff --git a/src/loading-scene.ts b/src/loading-scene.ts index 3d4f4d165e6..d6512486d0e 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -19,7 +19,7 @@ import i18next from "i18next"; import { initStatsKeys } from "#app/ui/game-stats-ui-handler"; import { initVouchers } from "#app/system/voucher"; import { Biome } from "#enums/biome"; -import {initMysteryEncounters} from "#app/data/mystery-encounters/mystery-encounters"; +import { initMysteryEncounters } from "#app/data/mystery-encounters/mystery-encounters"; export class LoadingScene extends SceneBase { public static readonly KEY = "loading"; @@ -242,9 +242,9 @@ export class LoadingScene extends SceneBase { this.loadAtlas("statuses", ""); this.loadAtlas("types", ""); } - const availableLangs = ["en", "de", "it", "fr", "ja", "ko", "es", "pt-BR", "zh-CN"]; + const availableLangs = [ "en", "de", "it", "fr", "ja", "ko", "es", "pt-BR", "zh-CN" ]; if (lang && availableLangs.includes(lang)) { - this.loadImage("egg-update_"+lang, "events"); + this.loadImage("egg-update_" + lang, "events"); } else { this.loadImage("egg-update_en", "events"); } diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index aac6a0ed572..f20aa854bdf 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -1014,10 +1014,10 @@ class TempStatStageBoosterModifierTypeGenerator extends ModifierTypeGenerator { class SpeciesStatBoosterModifierTypeGenerator extends ModifierTypeGenerator { /** Object comprised of the currently available species-based stat boosting held items */ public static readonly items = { - LIGHT_BALL: { stats: [Stat.ATK, Stat.SPATK], multiplier: 2, species: [Species.PIKACHU] }, - THICK_CLUB: { stats: [Stat.ATK], multiplier: 2, species: [Species.CUBONE, Species.MAROWAK, Species.ALOLA_MAROWAK] }, - METAL_POWDER: { stats: [Stat.DEF], multiplier: 2, species: [Species.DITTO] }, - QUICK_POWDER: { stats: [Stat.SPD], multiplier: 2, species: [Species.DITTO] }, + LIGHT_BALL: { stats: [ Stat.ATK, Stat.SPATK ], multiplier: 2, species: [ Species.PIKACHU ]}, + THICK_CLUB: { stats: [ Stat.ATK ], multiplier: 2, species: [ Species.CUBONE, Species.MAROWAK, Species.ALOLA_MAROWAK ]}, + METAL_POWDER: { stats: [ Stat.DEF ], multiplier: 2, species: [ Species.DITTO ]}, + QUICK_POWDER: { stats: [ Stat.SPD ], multiplier: 2, species: [ Species.DITTO ]}, }; constructor() { @@ -1132,7 +1132,7 @@ class FormChangeItemModifierTypeGenerator extends ModifierTypeGenerator { return new FormChangeItemModifierType(pregenArgs[0] as FormChangeItem); } - const formChangeItemPool = [...new Set(party.filter(p => pokemonFormChanges.hasOwnProperty(p.species.speciesId)).map(p => { + const formChangeItemPool = [ ...new Set(party.filter(p => pokemonFormChanges.hasOwnProperty(p.species.speciesId)).map(p => { const formChanges = pokemonFormChanges[p.species.speciesId]; let formChangeItemTriggers = formChanges.filter(fc => ((fc.formKey.indexOf(SpeciesFormKey.MEGA) === -1 && fc.formKey.indexOf(SpeciesFormKey.PRIMAL) === -1) || party[0].scene.getModifiers(MegaEvolutionAccessModifier).length) && ((fc.formKey.indexOf(SpeciesFormKey.GIGANTAMAX) === -1 && fc.formKey.indexOf(SpeciesFormKey.ETERNAMAX) === -1) || party[0].scene.getModifiers(GigantamaxAccessModifier).length) @@ -1507,9 +1507,9 @@ export const modifierTypes = { SOOTHE_BELL: () => new PokemonFriendshipBoosterModifierType("modifierType:ModifierType.SOOTHE_BELL", "soothe_bell"), SCOPE_LENS: () => new PokemonHeldItemModifierType("modifierType:ModifierType.SCOPE_LENS", "scope_lens", (type, args) => new CritBoosterModifier(type, (args[0] as Pokemon).id, 1)), - LEEK: () => new PokemonHeldItemModifierType("modifierType:ModifierType.LEEK", "leek", (type, args) => new SpeciesCritBoosterModifier(type, (args[0] as Pokemon).id, 2, [Species.FARFETCHD, Species.GALAR_FARFETCHD, Species.SIRFETCHD])), + LEEK: () => new PokemonHeldItemModifierType("modifierType:ModifierType.LEEK", "leek", (type, args) => new SpeciesCritBoosterModifier(type, (args[0] as Pokemon).id, 2, [ Species.FARFETCHD, Species.GALAR_FARFETCHD, Species.SIRFETCHD ])), - EVIOLITE: () => new PokemonHeldItemModifierType("modifierType:ModifierType.EVIOLITE", "eviolite", (type, args) => new EvolutionStatBoosterModifier(type, (args[0] as Pokemon).id, [Stat.DEF, Stat.SPDEF], 1.5)), + EVIOLITE: () => new PokemonHeldItemModifierType("modifierType:ModifierType.EVIOLITE", "eviolite", (type, args) => new EvolutionStatBoosterModifier(type, (args[0] as Pokemon).id, [ Stat.DEF, Stat.SPDEF ], 1.5)), SOUL_DEW: () => new PokemonHeldItemModifierType("modifierType:ModifierType.SOUL_DEW", "soul_dew", (type, args) => new PokemonNatureWeightModifier(type, (args[0] as Pokemon).id)), @@ -1583,7 +1583,7 @@ export const modifierTypes = { if (pregenArgs) { return new PokemonBaseStatFlatModifierType(pregenArgs[0] as number, pregenArgs[1] as Stat[]); } - return new PokemonBaseStatFlatModifierType(randSeedInt(20), [Stat.HP, Stat.ATK, Stat.DEF]); + return new PokemonBaseStatFlatModifierType(randSeedInt(20), [ Stat.HP, Stat.ATK, Stat.DEF ]); }), MYSTERY_ENCOUNTER_BLACK_SLUDGE: () => new ModifierTypeGenerator((party: Pokemon[], pregenArgs?: any[]) => { if (pregenArgs) { @@ -1733,22 +1733,22 @@ const modifierPool: ModifierPool = { || (p.isFusion() && checkedSpecies.includes(p.getFusionSpeciesForm(true).speciesId)))) ? 12 : 0; }, 12), new WeightedModifierType(modifierTypes.TOXIC_ORB, (party: Pokemon[]) => { - const checkedAbilities = [Abilities.QUICK_FEET, Abilities.GUTS, Abilities.MARVEL_SCALE, Abilities.TOXIC_BOOST, Abilities.POISON_HEAL, Abilities.MAGIC_GUARD]; - const checkedMoves = [Moves.FACADE, Moves.TRICK, Moves.FLING, Moves.SWITCHEROO, Moves.PSYCHO_SHIFT]; + const checkedAbilities = [ Abilities.QUICK_FEET, Abilities.GUTS, Abilities.MARVEL_SCALE, Abilities.TOXIC_BOOST, Abilities.POISON_HEAL, Abilities.MAGIC_GUARD ]; + const checkedMoves = [ Moves.FACADE, Moves.TRICK, Moves.FLING, Moves.SWITCHEROO, Moves.PSYCHO_SHIFT ]; // If a party member doesn't already have one of these two orbs and has one of the above moves or abilities, the orb can appear return party.some(p => !p.getHeldItems().some(i => i instanceof TurnStatusEffectModifier) && (checkedAbilities.some(a => p.hasAbility(a, false, true)) || p.getMoveset(true).some(m => m && checkedMoves.includes(m.moveId)))) ? 10 : 0; }, 10), new WeightedModifierType(modifierTypes.FLAME_ORB, (party: Pokemon[]) => { - const checkedAbilities = [Abilities.QUICK_FEET, Abilities.GUTS, Abilities.MARVEL_SCALE, Abilities.FLARE_BOOST, Abilities.MAGIC_GUARD]; - const checkedMoves = [Moves.FACADE, Moves.TRICK, Moves.FLING, Moves.SWITCHEROO, Moves.PSYCHO_SHIFT]; + const checkedAbilities = [ Abilities.QUICK_FEET, Abilities.GUTS, Abilities.MARVEL_SCALE, Abilities.FLARE_BOOST, Abilities.MAGIC_GUARD ]; + const checkedMoves = [ Moves.FACADE, Moves.TRICK, Moves.FLING, Moves.SWITCHEROO, Moves.PSYCHO_SHIFT ]; // If a party member doesn't already have one of these two orbs and has one of the above moves or abilities, the orb can appear return party.some(p => !p.getHeldItems().some(i => i instanceof TurnStatusEffectModifier) && (checkedAbilities.some(a => p.hasAbility(a, false, true)) || p.getMoveset(true).some(m => m && checkedMoves.includes(m.moveId)))) ? 10 : 0; }, 10), new WeightedModifierType(modifierTypes.WHITE_HERB, (party: Pokemon[]) => { - const checkedAbilities = [Abilities.WEAK_ARMOR, Abilities.CONTRARY, Abilities.MOODY, Abilities.ANGER_SHELL, Abilities.COMPETITIVE, Abilities.DEFIANT]; + const checkedAbilities = [ Abilities.WEAK_ARMOR, Abilities.CONTRARY, Abilities.MOODY, Abilities.ANGER_SHELL, Abilities.COMPETITIVE, Abilities.DEFIANT ]; const weightMultiplier = party.filter( p => !p.getHeldItems().some(i => i instanceof ResetNegativeStatStageModifier && i.stackCount >= i.getMaxHeldItemCount(p)) && (checkedAbilities.some(a => p.hasAbility(a, false, true)) || p.getMoveset(true).some(m => m && selfStatLowerMoves.includes(m.moveId)))).length; @@ -2196,7 +2196,7 @@ export function overridePlayerModifierTypeOptions(options: ModifierTypeOption[], let modifierType: ModifierType | null = modifierFunc(); if (modifierType instanceof ModifierTypeGenerator) { - const pregenArgs = ("type" in override) && (override.type !== null) ? [override.type] : undefined; + const pregenArgs = ("type" in override) && (override.type !== null) ? [ override.type ] : undefined; modifierType = modifierType.generateType(party, pregenArgs); } diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index b8905bc9bf1..b658d3b5277 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -408,7 +408,7 @@ export abstract class LapsingPersistentModifier extends PersistentModifier { } getArgs(): any[] { - return [this.maxBattles, this.battleCount]; + return [ this.maxBattles, this.battleCount ]; } getMaxStackCount(_scene: BattleScene, _forThreshold?: boolean): number { @@ -939,7 +939,7 @@ export class EvoTrackerModifier extends PokemonHeldItemModifier { } getArgs(): any[] { - return super.getArgs().concat([this.species, this.required]); + return super.getArgs().concat([ this.species, this.required ]); } /** @@ -1860,7 +1860,7 @@ export class BerryModifier extends PokemonHeldItemModifier { } getMaxHeldItemCount(pokemon: Pokemon): number { - if ([BerryType.LUM, BerryType.LEPPA, BerryType.SITRUS, BerryType.ENIGMA].includes(this.berryType)) { + if ([ BerryType.LUM, BerryType.LEPPA, BerryType.SITRUS, BerryType.ENIGMA ].includes(this.berryType)) { return 2; } return 3; @@ -3602,7 +3602,7 @@ export function overrideModifiers(scene: BattleScene, isPlayer: boolean = true): let modifierType: ModifierType | null = modifierFunc(); if (modifierType instanceof ModifierTypeGenerator) { - const pregenArgs = ("type" in item) && (item.type !== null) ? [item.type] : undefined; + const pregenArgs = ("type" in item) && (item.type !== null) ? [ item.type ] : undefined; modifierType = modifierType.generateType([], pregenArgs); } @@ -3643,7 +3643,7 @@ export function overrideHeldItems(scene: BattleScene, pokemon: Pokemon, isPlayer const qty = item.count || 1; if (modifierType instanceof ModifierTypeGenerator) { - const pregenArgs = ("type" in item) && (item.type !== null) ? [item.type] : undefined; + const pregenArgs = ("type" in item) && (item.type !== null) ? [ item.type ] : undefined; modifierType = modifierType.generateType([], pregenArgs); } diff --git a/src/phases/attempt-capture-phase.ts b/src/phases/attempt-capture-phase.ts index 53723526c14..3e46fc792f0 100644 --- a/src/phases/attempt-capture-phase.ts +++ b/src/phases/attempt-capture-phase.ts @@ -248,7 +248,7 @@ export class AttemptCapturePhase extends PokemonPhase { } }); }; - Promise.all([pokemon.hideInfo(), this.scene.gameData.setPokemonCaught(pokemon)]).then(() => { + Promise.all([ pokemon.hideInfo(), this.scene.gameData.setPokemonCaught(pokemon) ]).then(() => { if (this.scene.getParty().length === 6) { const promptRelease = () => { this.scene.ui.showText(i18next.t("battle:partyFull", { pokemonName: pokemon.getNameToRender() }), null, () => { diff --git a/src/phases/attempt-run-phase.ts b/src/phases/attempt-run-phase.ts index 46d68f6005a..e0dd7fa72fd 100644 --- a/src/phases/attempt-run-phase.ts +++ b/src/phases/attempt-run-phase.ts @@ -33,7 +33,7 @@ export class AttemptRunPhase extends PokemonPhase { this.scene.queueMessage(i18next.t("battle:runAwaySuccess"), null, true, 500); this.scene.tweens.add({ - targets: [this.scene.arenaEnemy, enemyField].flat(), + targets: [ this.scene.arenaEnemy, enemyField ].flat(), alpha: 0, duration: 250, ease: "Sine.easeIn", diff --git a/src/phases/battle-phase.ts b/src/phases/battle-phase.ts index b51e19bdf0e..11807fdc714 100644 --- a/src/phases/battle-phase.ts +++ b/src/phases/battle-phase.ts @@ -12,7 +12,7 @@ export class BattlePhase extends Phase { const tintSprites = this.scene.currentBattle.trainer?.getTintSprites()!; // TODO: is this bang correct? for (let i = 0; i < sprites.length; i++) { const visible = !trainerSlot || !i === (trainerSlot === TrainerSlot.TRAINER) || sprites.length < 2; - [sprites[i], tintSprites[i]].map(sprite => { + [ sprites[i], tintSprites[i] ].map(sprite => { if (visible) { sprite.x = trainerSlot || sprites.length < 2 ? 0 : i ? 16 : -16; } diff --git a/src/phases/command-phase.ts b/src/phases/command-phase.ts index 5e5031c1d06..e85c66543ac 100644 --- a/src/phases/command-phase.ts +++ b/src/phases/command-phase.ts @@ -93,7 +93,7 @@ export class CommandPhase extends FieldPhase { const turnCommand: TurnCommand = { command: Command.FIGHT, cursor: cursor, move: { move: moveId, targets: [], ignorePP: args[0] }, args: args }; const moveTargets: MoveTargetSet = args.length < 3 ? getMoveTargets(playerPokemon, moveId) : args[2]; if (!moveId) { - turnCommand.targets = [this.fieldIndex]; + turnCommand.targets = [ this.fieldIndex ]; } console.log(moveTargets, getPokemonNameWithAffix(playerPokemon)); if (moveTargets.targets.length > 1 && moveTargets.multiple) { diff --git a/src/phases/egg-lapse-phase.ts b/src/phases/egg-lapse-phase.ts index c251819f331..d81d63696a5 100644 --- a/src/phases/egg-lapse-phase.ts +++ b/src/phases/egg-lapse-phase.ts @@ -28,7 +28,7 @@ export class EggLapsePhase extends Phase { return Overrides.EGG_IMMEDIATE_HATCH_OVERRIDE ? true : --egg.hatchWaves < 1; }); const eggsToHatchCount: number = eggsToHatch.length; - this.eggHatchData= []; + this.eggHatchData = []; if (eggsToHatchCount > 0) { if (eggsToHatchCount >= this.minEggsToSkip && this.scene.eggSkipPreference === 1) { diff --git a/src/phases/encounter-phase.ts b/src/phases/encounter-phase.ts index 798ee3dca3c..3610ffed386 100644 --- a/src/phases/encounter-phase.ts +++ b/src/phases/encounter-phase.ts @@ -259,7 +259,7 @@ export class EncounterPhase extends BattlePhase { const enemyField = this.scene.getEnemyField(); this.scene.tweens.add({ - targets: [this.scene.arenaEnemy, this.scene.currentBattle.trainer, enemyField, this.scene.arenaPlayer, this.scene.trainer].flat(), + targets: [ this.scene.arenaEnemy, this.scene.currentBattle.trainer, enemyField, this.scene.arenaPlayer, this.scene.trainer ].flat(), x: (_target, _key, value, fieldIndex: integer) => fieldIndex < 2 + (enemyField.length) ? value + 300 : value - 300, duration: 2000, onComplete: () => { @@ -287,7 +287,7 @@ export class EncounterPhase extends BattlePhase { const enemyField = this.scene.getEnemyField(); if (this.scene.currentBattle.battleSpec === BattleSpec.FINAL_BOSS) { - return i18next.t("battle:bossAppeared", { bossName: getPokemonNameWithAffix(enemyField[0])}); + return i18next.t("battle:bossAppeared", { bossName: getPokemonNameWithAffix(enemyField[0]) }); } if (this.scene.currentBattle.battleType === BattleType.TRAINER) { @@ -436,7 +436,7 @@ export class EncounterPhase extends BattlePhase { } }); - if (![BattleType.TRAINER, BattleType.MYSTERY_ENCOUNTER].includes(this.scene.currentBattle.battleType)) { + if (![ BattleType.TRAINER, BattleType.MYSTERY_ENCOUNTER ].includes(this.scene.currentBattle.battleType)) { enemyField.map(p => this.scene.pushConditionalPhase(new PostSummonPhase(this.scene, p.getBattlerIndex()), () => { // if there is not a player party, we can't continue if (!this.scene.getParty()?.length) { @@ -505,7 +505,7 @@ export class EncounterPhase extends BattlePhase { } else { const count = 5643853 + this.scene.gameData.gameStats.classicSessionsPlayed; // The line below checks if an English ordinal is necessary or not based on whether an entry for encounterLocalizationKey exists in the language or not. - const ordinalUsed = !i18next.exists(localizationKey, {fallbackLng: []}) || i18next.resolvedLanguage === "en" ? i18next.t("battleSpecDialogue:key", { count: count, ordinal: true }) : ""; + const ordinalUsed = !i18next.exists(localizationKey, { fallbackLng: []}) || i18next.resolvedLanguage === "en" ? i18next.t("battleSpecDialogue:key", { count: count, ordinal: true }) : ""; const cycleCount = count.toLocaleString() + ordinalUsed; const genderIndex = this.scene.gameData.gender ?? PlayerGender.UNSET; const genderStr = PlayerGender[genderIndex].toLowerCase(); diff --git a/src/phases/enemy-command-phase.ts b/src/phases/enemy-command-phase.ts index b4503a7b059..3647a237ef1 100644 --- a/src/phases/enemy-command-phase.ts +++ b/src/phases/enemy-command-phase.ts @@ -61,7 +61,7 @@ export class EnemyCommandPhase extends FieldPhase { const index = trainer.getNextSummonIndex(enemyPokemon.trainerSlot, partyMemberScores); battle.turnCommands[this.fieldIndex + BattlerIndex.ENEMY] = - { command: Command.POKEMON, cursor: index, args: [false], skip: this.skipTurn }; + { command: Command.POKEMON, cursor: index, args: [ false ], skip: this.skipTurn }; battle.enemySwitchCounter++; diff --git a/src/phases/faint-phase.ts b/src/phases/faint-phase.ts index ba25225f6e0..66bb22899be 100644 --- a/src/phases/faint-phase.ts +++ b/src/phases/faint-phase.ts @@ -111,7 +111,7 @@ export class FaintPhase extends PokemonPhase { } } else { this.scene.unshiftPhase(new VictoryPhase(this.scene, this.battlerIndex)); - if ([BattleType.TRAINER, BattleType.MYSTERY_ENCOUNTER].includes(this.scene.currentBattle.battleType)) { + if ([ BattleType.TRAINER, BattleType.MYSTERY_ENCOUNTER ].includes(this.scene.currentBattle.battleType)) { const hasReservePartyMember = !!this.scene.getEnemyParty().filter(p => p.isActive() && !p.isOnField() && p.trainerSlot === (pokemon as EnemyPokemon).trainerSlot).length; if (hasReservePartyMember) { this.scene.pushPhase(new SwitchSummonPhase(this.scene, SwitchType.SWITCH, this.fieldIndex, -1, false, false)); diff --git a/src/phases/learn-move-phase.ts b/src/phases/learn-move-phase.ts index 5b4b16f3785..6480577258a 100644 --- a/src/phases/learn-move-phase.ts +++ b/src/phases/learn-move-phase.ts @@ -59,7 +59,7 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { const learnMovePrompt = i18next.t("battle:learnMovePrompt", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: move.name }); const moveLimitReached = i18next.t("battle:learnMoveLimitReached", { pokemonName: getPokemonNameWithAffix(pokemon) }); const shouldReplaceQ = i18next.t("battle:learnMoveReplaceQuestion", { moveName: move.name }); - const preQText = [learnMovePrompt, moveLimitReached].join("$"); + const preQText = [ learnMovePrompt, moveLimitReached ].join("$"); await this.scene.ui.showTextPromise(preQText); await this.scene.ui.showTextPromise(shouldReplaceQ, undefined, false); await this.scene.ui.setModeWithoutClear(Mode.CONFIRM, @@ -91,7 +91,7 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { return; } const forgetSuccessText = i18next.t("battle:learnMoveForgetSuccess", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: pokemon.moveset[moveIndex]!.getName() }); - const fullText = [i18next.t("battle:countdownPoof"), forgetSuccessText, i18next.t("battle:learnMoveAnd")].join("$"); + const fullText = [ i18next.t("battle:countdownPoof"), forgetSuccessText, i18next.t("battle:learnMoveAnd") ].join("$"); this.scene.ui.setMode(this.messageMode).then(() => this.learnMove(moveIndex, move, pokemon, fullText)); }); } @@ -144,12 +144,12 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { } pokemon.setMove(index, this.moveId); initMoveAnim(this.scene, this.moveId).then(() => { - loadMoveAnimAssets(this.scene, [this.moveId], true); + loadMoveAnimAssets(this.scene, [ this.moveId ], true); this.scene.playSound("level_up_fanfare"); // Sound loaded into game as is }); this.scene.ui.setMode(this.messageMode); const learnMoveText = i18next.t("battle:learnMove", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: move.name }); - textMessage = textMessage ? textMessage+"$"+learnMoveText : learnMoveText; + textMessage = textMessage ? textMessage + "$" + learnMoveText : learnMoveText; await this.scene.ui.showTextPromise(textMessage, this.messageMode === Mode.EVOLUTION_SCENE ? 1000 : undefined, true); this.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeMoveLearnedTrigger, true); this.end(); diff --git a/src/phases/login-phase.ts b/src/phases/login-phase.ts index 89ced201e9e..ac1e68d1b0e 100644 --- a/src/phases/login-phase.ts +++ b/src/phases/login-phase.ts @@ -22,7 +22,7 @@ export class LoginPhase extends Phase { const hasSession = !!Utils.getCookie(Utils.sessionIdKey); - this.scene.ui.setMode(Mode.LOADING, { buttonActions: [] }); + this.scene.ui.setMode(Mode.LOADING, { buttonActions: []}); Utils.executeIf(bypassLogin || hasSession, updateUserInfo).then(response => { const success = response ? response[0] : false; const statusCode = response ? response[1] : null; diff --git a/src/phases/move-anim-test-phase.ts b/src/phases/move-anim-test-phase.ts index a6ab90464b8..e4b04ce5de6 100644 --- a/src/phases/move-anim-test-phase.ts +++ b/src/phases/move-anim-test-phase.ts @@ -29,7 +29,7 @@ export class MoveAnimTestPhase extends BattlePhase { } initMoveAnim(this.scene, moveId).then(() => { - loadMoveAnimAssets(this.scene, [moveId], true) + loadMoveAnimAssets(this.scene, [ moveId ], true) .then(() => { const user = player ? this.scene.getPlayerPokemon()! : this.scene.getEnemyPokemon()!; const target = (player !== (allMoves[moveId] instanceof SelfStatusMove)) ? this.scene.getEnemyPokemon()! : this.scene.getPlayerPokemon()!; diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index 7730a32eaa2..93466babb77 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -96,7 +96,7 @@ export class MoveEffectPhase extends PokemonPhase { * Stores results of hit checks of the invoked move against all targets, organized by battler index. * @see {@linkcode hitCheck} */ - const targetHitChecks = Object.fromEntries(targets.map(p => [p.getBattlerIndex(), this.hitCheck(p)])); + const targetHitChecks = Object.fromEntries(targets.map(p => [ p.getBattlerIndex(), this.hitCheck(p) ])); const hasActiveTargets = targets.some(t => t.isActive(true)); /** Check if the target is immune via ability to the attacking move */ @@ -111,7 +111,7 @@ export class MoveEffectPhase extends PokemonPhase { if (!hasActiveTargets || (!move.hasAttr(VariableTargetAttr) && !move.isMultiTarget() && !targetHitChecks[this.targets[0]] && !targets[0].getTag(ProtectedTag) && !isImmune)) { this.stopMultiHit(); if (hasActiveTargets) { - this.scene.queueMessage(i18next.t("battle:attackMissed", { pokemonNameWithAffix: this.getTarget()? getPokemonNameWithAffix(this.getTarget()!) : "" })); + this.scene.queueMessage(i18next.t("battle:attackMissed", { pokemonNameWithAffix: this.getTarget() ? getPokemonNameWithAffix(this.getTarget()!) : "" })); moveHistoryEntry.result = MoveResult.MISS; applyMoveAttrs(MissEffectAttr, user, null, move); } else { @@ -376,7 +376,7 @@ export class MoveEffectPhase extends PokemonPhase { */ hitCheck(target: Pokemon): boolean { // Moves targeting the user and entry hazards can't miss - if ([MoveTarget.USER, MoveTarget.ENEMY_SIDE].includes(this.move.getMove().moveTarget)) { + if ([ MoveTarget.USER, MoveTarget.ENEMY_SIDE ].includes(this.move.getMove().moveTarget)) { return true; } diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index 0a75c32bac3..154fbbe410d 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -220,7 +220,7 @@ export class MovePhase extends BattlePhase { * Will still change the user's type when using Roar, Whirlwind, Trick-or-Treat, and Forest's Curse, * regardless of whether the move successfully executes or not. */ - if (success || [Moves.ROAR, Moves.WHIRLWIND, Moves.TRICK_OR_TREAT, Moves.FORESTS_CURSE].includes(this.move.moveId)) { + if (success || [ Moves.ROAR, Moves.WHIRLWIND, Moves.TRICK_OR_TREAT, Moves.FORESTS_CURSE ].includes(this.move.moveId)) { applyPreAttackAbAttrs(PokemonTypeChangeAbAttr, this.pokemon, null, this.move.getMove()); } diff --git a/src/phases/mystery-encounter-phases.ts b/src/phases/mystery-encounter-phases.ts index 0efaf1bf4ca..0166b2d6abd 100644 --- a/src/phases/mystery-encounter-phases.ts +++ b/src/phases/mystery-encounter-phases.ts @@ -220,7 +220,7 @@ export class MysteryEncounterBattleStartCleanupPhase extends Phase { super.start(); // Lapse any residual flinches/endures but ignore all other turn-end battle tags - const includedLapseTags = [BattlerTagType.FLINCHED, BattlerTagType.ENDURING]; + const includedLapseTags = [ BattlerTagType.FLINCHED, BattlerTagType.ENDURING ]; const field = this.scene.getField(true).filter(p => p.summonData); field.forEach(pokemon => { const tags = pokemon.summonData.tags; diff --git a/src/phases/new-biome-encounter-phase.ts b/src/phases/new-biome-encounter-phase.ts index 2a526a22ee2..eea591c3936 100644 --- a/src/phases/new-biome-encounter-phase.ts +++ b/src/phases/new-biome-encounter-phase.ts @@ -22,7 +22,7 @@ export class NewBiomeEncounterPhase extends NextEncounterPhase { } const enemyField = this.scene.getEnemyField(); - const moveTargets: any[] = [this.scene.arenaEnemy, enemyField]; + const moveTargets: any[] = [ this.scene.arenaEnemy, enemyField ]; const mysteryEncounter = this.scene.currentBattle?.mysteryEncounter?.introVisuals; if (mysteryEncounter) { moveTargets.push(mysteryEncounter); diff --git a/src/phases/next-encounter-phase.ts b/src/phases/next-encounter-phase.ts index d63823e4167..407d7c26b5d 100644 --- a/src/phases/next-encounter-phase.ts +++ b/src/phases/next-encounter-phase.ts @@ -23,7 +23,7 @@ export class NextEncounterPhase extends EncounterPhase { this.scene.arenaNextEnemy.setVisible(true); const enemyField = this.scene.getEnemyField(); - const moveTargets: any[] = [this.scene.arenaEnemy, this.scene.arenaNextEnemy, this.scene.currentBattle.trainer, enemyField, this.scene.lastEnemyTrainer]; + const moveTargets: any[] = [ this.scene.arenaEnemy, this.scene.arenaNextEnemy, this.scene.currentBattle.trainer, enemyField, this.scene.lastEnemyTrainer ]; const lastEncounterVisuals = this.scene.lastMysteryEncounter?.introVisuals; if (lastEncounterVisuals) { moveTargets.push(lastEncounterVisuals); diff --git a/src/phases/pokemon-anim-phase.ts b/src/phases/pokemon-anim-phase.ts index 50a62837f9c..6f1bfe8bc18 100644 --- a/src/phases/pokemon-anim-phase.ts +++ b/src/phases/pokemon-anim-phase.ts @@ -5,7 +5,6 @@ import Pokemon from "#app/field/pokemon"; import { BattlePhase } from "#app/phases/battle-phase"; - export class PokemonAnimPhase extends BattlePhase { /** The type of animation to play in this phase */ private key: PokemonAnimType; @@ -53,7 +52,7 @@ export class PokemonAnimPhase extends BattlePhase { const sprite = this.scene.addFieldSprite( this.pokemon.x + this.pokemon.getSprite().x, this.pokemon.y + this.pokemon.getSprite().y, - `pkmn${this.pokemon.isPlayer() ? "__back": ""}__sub` + `pkmn${this.pokemon.isPlayer() ? "__back" : ""}__sub` ); sprite.setOrigin(0.5, 1); this.scene.field.add(sprite); @@ -179,7 +178,7 @@ export class PokemonAnimPhase extends BattlePhase { const sprite = this.scene.addFieldSprite( subSprite.x, subSprite.y, - `pkmn${this.pokemon.isPlayer() ? "__back": ""}__sub` + `pkmn${this.pokemon.isPlayer() ? "__back" : ""}__sub` ); sprite.setOrigin(0.5, 1); this.scene.field.add(sprite); diff --git a/src/phases/select-biome-phase.ts b/src/phases/select-biome-phase.ts index 49c6c3ac3c0..817cd7bcd3d 100644 --- a/src/phases/select-biome-phase.ts +++ b/src/phases/select-biome-phase.ts @@ -45,7 +45,7 @@ export class SelectBiomePhase extends BattlePhase { let biomeChoices: Biome[] = []; this.scene.executeWithSeedOffset(() => { biomeChoices = (!Array.isArray(biomeLinks[currentBiome]) - ? [biomeLinks[currentBiome] as Biome] + ? [ biomeLinks[currentBiome] as Biome ] : biomeLinks[currentBiome] as (Biome | [Biome, integer])[]) .filter((b, i) => !Array.isArray(b) || !Utils.randSeedInt(b[1])) .map(b => Array.isArray(b) ? b[0] : b); diff --git a/src/phases/select-modifier-phase.ts b/src/phases/select-modifier-phase.ts index ba55340bd8d..159af979fa0 100644 --- a/src/phases/select-modifier-phase.ts +++ b/src/phases/select-modifier-phase.ts @@ -242,7 +242,7 @@ export class SelectModifierPhase extends BattlePhase { if (Overrides.WAIVE_ROLL_FEE_OVERRIDE) { return baseValue; } else if (lockRarities) { - const tierValues = [50, 125, 300, 750, 2000]; + const tierValues = [ 50, 125, 300, 750, 2000 ]; for (const opt of typeOptions) { baseValue += tierValues[opt.type.tier ?? 0]; } diff --git a/src/phases/summon-phase.ts b/src/phases/summon-phase.ts index dfa374307d5..119e550293c 100644 --- a/src/phases/summon-phase.ts +++ b/src/phases/summon-phase.ts @@ -57,7 +57,7 @@ export class SummonPhase extends PartyMemberPokemonPhase { } // Swaps the fainted Pokemon and the first non-fainted legal Pokemon in the party - [party[this.partyMemberIndex], party[legalIndex]] = [party[legalIndex], party[this.partyMemberIndex]]; + [ party[this.partyMemberIndex], party[legalIndex] ] = [ party[legalIndex], party[this.partyMemberIndex] ]; console.warn("Swapped %s %O with %s %O", getPokemonNameWithAffix(partyMember), partyMember, getPokemonNameWithAffix(party[0]), party[0]); } @@ -240,7 +240,7 @@ export class SummonPhase extends PartyMemberPokemonPhase { pokemon.resetTurnData(); - if (!this.loaded || [BattleType.TRAINER, BattleType.MYSTERY_ENCOUNTER].includes(this.scene.currentBattle.battleType) || (this.scene.currentBattle.waveIndex % 10) === 1) { + if (!this.loaded || [ BattleType.TRAINER, BattleType.MYSTERY_ENCOUNTER ].includes(this.scene.currentBattle.battleType) || (this.scene.currentBattle.waveIndex % 10) === 1) { this.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeActiveTrigger, true); this.queuePostSummon(); } diff --git a/src/phases/switch-biome-phase.ts b/src/phases/switch-biome-phase.ts index 9cf5635a39f..80a31794209 100644 --- a/src/phases/switch-biome-phase.ts +++ b/src/phases/switch-biome-phase.ts @@ -20,7 +20,7 @@ export class SwitchBiomePhase extends BattlePhase { } this.scene.tweens.add({ - targets: [this.scene.arenaEnemy, this.scene.lastEnemyTrainer], + targets: [ this.scene.arenaEnemy, this.scene.lastEnemyTrainer ], x: "+=300", duration: 2000, onComplete: () => { @@ -38,7 +38,7 @@ export class SwitchBiomePhase extends BattlePhase { this.scene.arenaPlayerTransition.setVisible(true); this.scene.tweens.add({ - targets: [this.scene.arenaPlayer, this.scene.arenaBgTransition, this.scene.arenaPlayerTransition], + targets: [ this.scene.arenaPlayer, this.scene.arenaBgTransition, this.scene.arenaPlayerTransition ], duration: 1000, delay: 1000, ease: "Sine.easeInOut", diff --git a/src/phases/title-phase.ts b/src/phases/title-phase.ts index b23a5ec0c89..115e4f640a2 100644 --- a/src/phases/title-phase.ts +++ b/src/phases/title-phase.ts @@ -60,7 +60,7 @@ export class TitlePhase extends Phase { const options: OptionSelectItem[] = []; if (loggedInUser && loggedInUser.lastSessionSlot > -1) { options.push({ - label: i18next.t("continue", {ns: "menu"}), + label: i18next.t("continue", { ns: "menu" }), handler: () => { this.loadSaveSlot(this.lastSessionData || !loggedInUser ? -1 : loggedInUser.lastSessionSlot); return true; @@ -221,7 +221,7 @@ export class TitlePhase extends Phase { const modifiers: Modifier[] = Array(3).fill(null).map(() => modifierTypes.EXP_SHARE().withIdFromFunc(modifierTypes.EXP_SHARE).newModifier()) .concat(Array(3).fill(null).map(() => modifierTypes.GOLDEN_EXP_CHARM().withIdFromFunc(modifierTypes.GOLDEN_EXP_CHARM).newModifier())) - .concat([modifierTypes.MAP().withIdFromFunc(modifierTypes.MAP).newModifier()]) + .concat([ modifierTypes.MAP().withIdFromFunc(modifierTypes.MAP).newModifier() ]) .concat(getDailyRunStarterModifiers(party)) .filter((m) => m !== null); diff --git a/src/phases/trainer-message-test-phase.ts b/src/phases/trainer-message-test-phase.ts index 8075dd761e2..d9e58473bd5 100644 --- a/src/phases/trainer-message-test-phase.ts +++ b/src/phases/trainer-message-test-phase.ts @@ -24,7 +24,7 @@ export class TrainerMessageTestPhase extends BattlePhase { continue; } const config = trainerConfigs[type]; - [config.encounterMessages, config.femaleEncounterMessages, config.victoryMessages, config.femaleVictoryMessages, config.defeatMessages, config.femaleDefeatMessages] + [ config.encounterMessages, config.femaleEncounterMessages, config.victoryMessages, config.femaleVictoryMessages, config.defeatMessages, config.femaleDefeatMessages ] .map(messages => { if (messages?.length) { testMessages.push(...messages); diff --git a/src/phases/trainer-victory-phase.ts b/src/phases/trainer-victory-phase.ts index e925f0c47d4..fd48b91b1a1 100644 --- a/src/phases/trainer-victory-phase.ts +++ b/src/phases/trainer-victory-phase.ts @@ -30,7 +30,7 @@ export class TrainerVictoryPhase extends BattlePhase { const trainerType = this.scene.currentBattle.trainer?.config.trainerType!; // TODO: is this bang correct? if (vouchers.hasOwnProperty(TrainerType[trainerType])) { if (!this.scene.validateVoucher(vouchers[TrainerType[trainerType]]) && this.scene.currentBattle.trainer?.config.isBoss) { - this.scene.unshiftPhase(new ModifierRewardPhase(this.scene, [modifierTypes.VOUCHER, modifierTypes.VOUCHER, modifierTypes.VOUCHER_PLUS, modifierTypes.VOUCHER_PREMIUM][vouchers[TrainerType[trainerType]].voucherType])); + this.scene.unshiftPhase(new ModifierRewardPhase(this.scene, [ modifierTypes.VOUCHER, modifierTypes.VOUCHER, modifierTypes.VOUCHER_PLUS, modifierTypes.VOUCHER_PREMIUM ][vouchers[TrainerType[trainerType]].voucherType])); } } diff --git a/src/plugins/cache-busted-loader-plugin.ts b/src/plugins/cache-busted-loader-plugin.ts index 3ed939c49dd..344da3eaa66 100644 --- a/src/plugins/cache-busted-loader-plugin.ts +++ b/src/plugins/cache-busted-loader-plugin.ts @@ -20,7 +20,7 @@ export default class CacheBustedLoaderPlugin extends Phaser.Loader.LoaderPlugin file.forEach(item => { if (manifest) { - const timestamp = manifest[`/${item.url.replace(/\/\//g, "/")}` ]; + const timestamp = manifest[`/${item.url.replace(/\/\//g, "/")}`]; if (timestamp) { item.url += `?t=${timestamp}`; } diff --git a/src/plugins/i18n.ts b/src/plugins/i18n.ts index 5f7be4768a3..676e47c19b8 100644 --- a/src/plugins/i18n.ts +++ b/src/plugins/i18n.ts @@ -27,9 +27,9 @@ const unicodeRanges = { }; const rangesByLanguage = { - korean: [unicodeRanges.CJKCommon, unicodeRanges.hangul].join(","), - chinese: [unicodeRanges.CJKCommon, unicodeRanges.fullwidth, unicodeRanges.CJKIdeograph].join(","), - japanese: [unicodeRanges.CJKCommon, unicodeRanges.fullwidth, unicodeRanges.kana, unicodeRanges.CJKIdeograph].join(",") + korean: [ unicodeRanges.CJKCommon, unicodeRanges.hangul ].join(","), + chinese: [ unicodeRanges.CJKCommon, unicodeRanges.fullwidth, unicodeRanges.CJKIdeograph ].join(","), + japanese: [ unicodeRanges.CJKCommon, unicodeRanges.fullwidth, unicodeRanges.kana, unicodeRanges.CJKIdeograph ].join(",") }; const fonts: Array = [ @@ -135,7 +135,7 @@ export async function initI18n(): Promise { i18next.use(new KoreanPostpositionProcessor()); await i18next.init({ fallbackLng: "en", - supportedLngs: ["en", "es", "fr", "it", "de", "zh-CN", "zh-TW", "pt-BR", "ko", "ja", "ca-ES"], + supportedLngs: [ "en", "es", "fr", "it", "de", "zh-CN", "zh-TW", "pt-BR", "ko", "ja", "ca-ES" ], backend: { loadPath(lng: string, [ ns ]: string[]) { let fileName: string; @@ -246,7 +246,7 @@ export async function initI18n(): Promise { interpolation: { escapeValue: false, }, - postProcess: ["korean-postposition"], + postProcess: [ "korean-postposition" ], }); // Input: {{myMoneyValue, money}} diff --git a/src/plugins/vite/vite-minify-json-plugin.ts b/src/plugins/vite/vite-minify-json-plugin.ts index 57130669075..a638271562f 100644 --- a/src/plugins/vite/vite-minify-json-plugin.ts +++ b/src/plugins/vite/vite-minify-json-plugin.ts @@ -41,7 +41,7 @@ export function minifyJsonPlugin(basePath: string | string[], recursive?: boolea }, async closeBundle() { console.log("Minifying JSON files..."); - const basePathes = Array.isArray(basePath) ? basePath : [basePath]; + const basePathes = Array.isArray(basePath) ? basePath : [ basePath ]; basePathes.forEach((basePath) => { const baseDir = path.resolve(buildDir, basePath); diff --git a/src/scene-base.ts b/src/scene-base.ts index 298b8096e54..9af97b8e6d4 100644 --- a/src/scene-base.ts +++ b/src/scene-base.ts @@ -81,7 +81,7 @@ export class SceneBase extends Phaser.Scene { filenames = [ filenames ]; } for (const f of filenames as string[]) { - this.load.audio(folder+key, this.getCachedUrl(`audio/${folder}${f}`)); + this.load.audio(folder + key, this.getCachedUrl(`audio/${folder}${f}`)); } } diff --git a/src/system/achv.ts b/src/system/achv.ts index a355a027093..7bac631d7aa 100644 --- a/src/system/achv.ts +++ b/src/system/achv.ts @@ -157,45 +157,45 @@ export function getAchievementDescription(localizationKey: string): string { switch (localizationKey) { case "10K_MONEY": - return i18next.t("achv:MoneyAchv.description", {context: genderStr, "moneyAmount": achvs._10K_MONEY.moneyAmount.toLocaleString("en-US")}); + return i18next.t("achv:MoneyAchv.description", { context: genderStr, "moneyAmount": achvs._10K_MONEY.moneyAmount.toLocaleString("en-US") }); case "100K_MONEY": - return i18next.t("achv:MoneyAchv.description", {context: genderStr, "moneyAmount": achvs._100K_MONEY.moneyAmount.toLocaleString("en-US")}); + return i18next.t("achv:MoneyAchv.description", { context: genderStr, "moneyAmount": achvs._100K_MONEY.moneyAmount.toLocaleString("en-US") }); case "1M_MONEY": - return i18next.t("achv:MoneyAchv.description", {context: genderStr, "moneyAmount": achvs._1M_MONEY.moneyAmount.toLocaleString("en-US")}); + return i18next.t("achv:MoneyAchv.description", { context: genderStr, "moneyAmount": achvs._1M_MONEY.moneyAmount.toLocaleString("en-US") }); case "10M_MONEY": - return i18next.t("achv:MoneyAchv.description", {context: genderStr, "moneyAmount": achvs._10M_MONEY.moneyAmount.toLocaleString("en-US")}); + return i18next.t("achv:MoneyAchv.description", { context: genderStr, "moneyAmount": achvs._10M_MONEY.moneyAmount.toLocaleString("en-US") }); case "250_DMG": - return i18next.t("achv:DamageAchv.description", {context: genderStr, "damageAmount": achvs._250_DMG.damageAmount.toLocaleString("en-US")}); + return i18next.t("achv:DamageAchv.description", { context: genderStr, "damageAmount": achvs._250_DMG.damageAmount.toLocaleString("en-US") }); case "1000_DMG": - return i18next.t("achv:DamageAchv.description", {context: genderStr, "damageAmount": achvs._1000_DMG.damageAmount.toLocaleString("en-US")}); + return i18next.t("achv:DamageAchv.description", { context: genderStr, "damageAmount": achvs._1000_DMG.damageAmount.toLocaleString("en-US") }); case "2500_DMG": - return i18next.t("achv:DamageAchv.description", {context: genderStr, "damageAmount": achvs._2500_DMG.damageAmount.toLocaleString("en-US")}); + return i18next.t("achv:DamageAchv.description", { context: genderStr, "damageAmount": achvs._2500_DMG.damageAmount.toLocaleString("en-US") }); case "10000_DMG": - return i18next.t("achv:DamageAchv.description", {context: genderStr, "damageAmount": achvs._10000_DMG.damageAmount.toLocaleString("en-US")}); + return i18next.t("achv:DamageAchv.description", { context: genderStr, "damageAmount": achvs._10000_DMG.damageAmount.toLocaleString("en-US") }); case "250_HEAL": - return i18next.t("achv:HealAchv.description", {context: genderStr, "healAmount": achvs._250_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t(getShortenedStatKey(Stat.HP))}); + return i18next.t("achv:HealAchv.description", { context: genderStr, "healAmount": achvs._250_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t(getShortenedStatKey(Stat.HP)) }); case "1000_HEAL": - return i18next.t("achv:HealAchv.description", {context: genderStr, "healAmount": achvs._1000_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t(getShortenedStatKey(Stat.HP))}); + return i18next.t("achv:HealAchv.description", { context: genderStr, "healAmount": achvs._1000_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t(getShortenedStatKey(Stat.HP)) }); case "2500_HEAL": - return i18next.t("achv:HealAchv.description", {context: genderStr, "healAmount": achvs._2500_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t(getShortenedStatKey(Stat.HP))}); + return i18next.t("achv:HealAchv.description", { context: genderStr, "healAmount": achvs._2500_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t(getShortenedStatKey(Stat.HP)) }); case "10000_HEAL": - return i18next.t("achv:HealAchv.description", {context: genderStr, "healAmount": achvs._10000_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t(getShortenedStatKey(Stat.HP))}); + return i18next.t("achv:HealAchv.description", { context: genderStr, "healAmount": achvs._10000_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t(getShortenedStatKey(Stat.HP)) }); case "LV_100": - return i18next.t("achv:LevelAchv.description", {context: genderStr, "level": achvs.LV_100.level}); + return i18next.t("achv:LevelAchv.description", { context: genderStr, "level": achvs.LV_100.level }); case "LV_250": - return i18next.t("achv:LevelAchv.description", {context: genderStr, "level": achvs.LV_250.level}); + return i18next.t("achv:LevelAchv.description", { context: genderStr, "level": achvs.LV_250.level }); case "LV_1000": - return i18next.t("achv:LevelAchv.description", {context: genderStr, "level": achvs.LV_1000.level}); + return i18next.t("achv:LevelAchv.description", { context: genderStr, "level": achvs.LV_1000.level }); case "10_RIBBONS": - return i18next.t("achv:RibbonAchv.description", {context: genderStr, "ribbonAmount": achvs._10_RIBBONS.ribbonAmount.toLocaleString("en-US")}); + return i18next.t("achv:RibbonAchv.description", { context: genderStr, "ribbonAmount": achvs._10_RIBBONS.ribbonAmount.toLocaleString("en-US") }); case "25_RIBBONS": - return i18next.t("achv:RibbonAchv.description", {context: genderStr, "ribbonAmount": achvs._25_RIBBONS.ribbonAmount.toLocaleString("en-US")}); + return i18next.t("achv:RibbonAchv.description", { context: genderStr, "ribbonAmount": achvs._25_RIBBONS.ribbonAmount.toLocaleString("en-US") }); case "50_RIBBONS": - return i18next.t("achv:RibbonAchv.description", {context: genderStr, "ribbonAmount": achvs._50_RIBBONS.ribbonAmount.toLocaleString("en-US")}); + return i18next.t("achv:RibbonAchv.description", { context: genderStr, "ribbonAmount": achvs._50_RIBBONS.ribbonAmount.toLocaleString("en-US") }); case "75_RIBBONS": - return i18next.t("achv:RibbonAchv.description", {context: genderStr, "ribbonAmount": achvs._75_RIBBONS.ribbonAmount.toLocaleString("en-US")}); + return i18next.t("achv:RibbonAchv.description", { context: genderStr, "ribbonAmount": achvs._75_RIBBONS.ribbonAmount.toLocaleString("en-US") }); case "100_RIBBONS": - return i18next.t("achv:RibbonAchv.description", {context: genderStr, "ribbonAmount": achvs._100_RIBBONS.ribbonAmount.toLocaleString("en-US")}); + return i18next.t("achv:RibbonAchv.description", { context: genderStr, "ribbonAmount": achvs._100_RIBBONS.ribbonAmount.toLocaleString("en-US") }); case "TRANSFER_MAX_STAT_STAGE": return i18next.t("achv:TRANSFER_MAX_STAT_STAGE.description", { context: genderStr }); case "MAX_FRIENDSHIP": diff --git a/src/system/egg-data.ts b/src/system/egg-data.ts index 1c9c903688a..aa06316a61f 100644 --- a/src/system/egg-data.ts +++ b/src/system/egg-data.ts @@ -41,7 +41,7 @@ export default class EggData { if (!this.species) { return new Egg({ id: this.id, hatchWaves: this.hatchWaves, sourceType: this.sourceType, timestamp: this.timestamp, tier: Math.floor(this.id / EGG_SEED) }); } else { - return new Egg({id: this.id, tier: this.tier, sourceType: this.sourceType, hatchWaves: this.hatchWaves, + return new Egg({ id: this.id, tier: this.tier, sourceType: this.sourceType, hatchWaves: this.hatchWaves, timestamp: this.timestamp, variantTier: this.variantTier, isShiny: this.isShiny, species: this.species, eggMoveIndex: this.eggMoveIndex, overrideHiddenAbility: this.overrideHiddenAbility }); } diff --git a/src/system/game-data.ts b/src/system/game-data.ts index b597a1b9aad..eada3d270ef 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -348,8 +348,8 @@ export class GameData { [VoucherType.GOLDEN]: 0 }; this.eggs = []; - this.eggPity = [0, 0, 0, 0]; - this.unlockPity = [0, 0, 0, 0]; + this.eggPity = [ 0, 0, 0, 0 ]; + this.unlockPity = [ 0, 0, 0, 0 ]; this.initDexData(); this.initStarterData(); } @@ -560,8 +560,8 @@ export class GameData { ? systemData.eggs.map(e => e.toEgg()) : []; - this.eggPity = systemData.eggPity ? systemData.eggPity.slice(0) : [0, 0, 0, 0]; - this.unlockPity = systemData.unlockPity ? systemData.unlockPity.slice(0) : [0, 0, 0, 0]; + this.eggPity = systemData.eggPity ? systemData.eggPity.slice(0) : [ 0, 0, 0, 0 ]; + this.unlockPity = systemData.unlockPity ? systemData.unlockPity.slice(0) : [ 0, 0, 0, 0 ]; this.dexData = Object.assign(this.dexData, systemData.dexData); this.consolidateDexData(this.dexData); @@ -1193,11 +1193,11 @@ export class GameData { * Attempt to clear session data. After session data is removed, attempt to update user info so the menu updates */ async tryClearSession(scene: BattleScene, slotId: integer): Promise<[success: boolean, newClear: boolean]> { - let result: [boolean, boolean] = [false, false]; + let result: [boolean, boolean] = [ false, false ]; if (bypassLogin) { localStorage.removeItem(`sessionData${slotId ? slotId : ""}_${loggedInUser?.username}`); - result = [true, true]; + result = [ true, true ]; } else { const sessionData = this.getSessionSaveData(scene); const response = await Utils.apiPost(`savedata/session/clear?slot=${slotId}&trainerId=${this.trainerId}&secretId=${this.secretId}&clientSessionId=${clientSessionId}`, JSON.stringify(sessionData), undefined, true); @@ -1210,7 +1210,7 @@ export class GameData { const jsonResponse: PokerogueApiClearSessionData = await response.json(); if (!jsonResponse.error) { - result = [true, jsonResponse.success ?? false]; + result = [ true, jsonResponse.success ?? false ]; } else { if (jsonResponse && jsonResponse.error?.startsWith("session out of date")) { this.scene.clearPhaseQueue(); @@ -1218,7 +1218,7 @@ export class GameData { } console.error(jsonResponse); - result = [false, false]; + result = [ false, false ]; } } @@ -1367,7 +1367,7 @@ export class GameData { break; } const encryptedData = AES.encrypt(dataStr, saveKey); - const blob = new Blob([ encryptedData.toString() ], {type: "text/json"}); + const blob = new Blob([ encryptedData.toString() ], { type: "text/json" }); const link = document.createElement("a"); link.href = window.URL.createObjectURL(blob); link.download = `${dataKey}.prsv`; @@ -1437,7 +1437,7 @@ export class GameData { dataName = i18next.t("menuUiHandler:RUN_HISTORY").toLowerCase(); keys.forEach((key) => { const entryKeys = Object.keys(data[key]); - valid = ["isFavorite", "isVictory", "entry"].every(v => entryKeys.includes(v)) && entryKeys.length === 3; + valid = [ "isFavorite", "isVictory", "entry" ].every(v => entryKeys.includes(v)) && entryKeys.length === 3; }); break; case GameDataType.SETTINGS: diff --git a/src/system/settings/settings-gamepad.ts b/src/system/settings/settings-gamepad.ts index 5dd94b780a0..c96ec36f9a5 100644 --- a/src/system/settings/settings-gamepad.ts +++ b/src/system/settings/settings-gamepad.ts @@ -1,9 +1,9 @@ import BattleScene from "../../battle-scene"; import SettingsGamepadUiHandler from "../../ui/settings/settings-gamepad-ui-handler"; -import {Mode} from "../../ui/ui"; -import {truncateString} from "../../utils"; -import {Button} from "#enums/buttons"; -import {SettingKeyboard} from "#app/system/settings/settings-keyboard"; +import { Mode } from "../../ui/ui"; +import { truncateString } from "../../utils"; +import { Button } from "#enums/buttons"; +import { SettingKeyboard } from "#app/system/settings/settings-keyboard"; export enum SettingGamepad { Controller = "CONTROLLER", @@ -30,25 +30,25 @@ export enum SettingGamepad { const pressAction = "Press action to assign"; export const settingGamepadOptions = { - [SettingGamepad.Controller]: ["Default", "Change"], - [SettingGamepad.Gamepad_Support]: ["Auto", "Disabled"], - [SettingGamepad.Button_Up]: [`KEY ${Button.UP.toString()}`, pressAction], - [SettingGamepad.Button_Down]: [`KEY ${Button.DOWN.toString()}`, pressAction], - [SettingGamepad.Button_Left]: [`KEY ${Button.LEFT.toString()}`, pressAction], - [SettingGamepad.Button_Right]: [`KEY ${Button.RIGHT.toString()}`, pressAction], - [SettingGamepad.Button_Action]: [`KEY ${Button.ACTION.toString()}`, pressAction], - [SettingGamepad.Button_Cancel]: [`KEY ${Button.CANCEL.toString()}`, pressAction], - [SettingGamepad.Button_Menu]: [`KEY ${Button.MENU.toString()}`, pressAction], - [SettingGamepad.Button_Stats]: [`KEY ${Button.STATS.toString()}`, pressAction], - [SettingGamepad.Button_Cycle_Form]: [`KEY ${Button.CYCLE_FORM.toString()}`, pressAction], - [SettingGamepad.Button_Cycle_Shiny]: [`KEY ${Button.CYCLE_SHINY.toString()}`, pressAction], - [SettingGamepad.Button_Cycle_Gender]: [`KEY ${Button.CYCLE_GENDER.toString()}`, pressAction], - [SettingGamepad.Button_Cycle_Ability]: [`KEY ${Button.CYCLE_ABILITY.toString()}`, pressAction], - [SettingGamepad.Button_Cycle_Nature]: [`KEY ${Button.CYCLE_NATURE.toString()}`, pressAction], - [SettingGamepad.Button_Cycle_Variant]: [`KEY ${Button.V.toString()}`, pressAction], - [SettingGamepad.Button_Speed_Up]: [`KEY ${Button.SPEED_UP.toString()}`, pressAction], - [SettingGamepad.Button_Slow_Down]: [`KEY ${Button.SLOW_DOWN.toString()}`, pressAction], - [SettingGamepad.Button_Submit]: [`KEY ${Button.SUBMIT.toString()}`, pressAction], + [SettingGamepad.Controller]: [ "Default", "Change" ], + [SettingGamepad.Gamepad_Support]: [ "Auto", "Disabled" ], + [SettingGamepad.Button_Up]: [ `KEY ${Button.UP.toString()}`, pressAction ], + [SettingGamepad.Button_Down]: [ `KEY ${Button.DOWN.toString()}`, pressAction ], + [SettingGamepad.Button_Left]: [ `KEY ${Button.LEFT.toString()}`, pressAction ], + [SettingGamepad.Button_Right]: [ `KEY ${Button.RIGHT.toString()}`, pressAction ], + [SettingGamepad.Button_Action]: [ `KEY ${Button.ACTION.toString()}`, pressAction ], + [SettingGamepad.Button_Cancel]: [ `KEY ${Button.CANCEL.toString()}`, pressAction ], + [SettingGamepad.Button_Menu]: [ `KEY ${Button.MENU.toString()}`, pressAction ], + [SettingGamepad.Button_Stats]: [ `KEY ${Button.STATS.toString()}`, pressAction ], + [SettingGamepad.Button_Cycle_Form]: [ `KEY ${Button.CYCLE_FORM.toString()}`, pressAction ], + [SettingGamepad.Button_Cycle_Shiny]: [ `KEY ${Button.CYCLE_SHINY.toString()}`, pressAction ], + [SettingGamepad.Button_Cycle_Gender]: [ `KEY ${Button.CYCLE_GENDER.toString()}`, pressAction ], + [SettingGamepad.Button_Cycle_Ability]: [ `KEY ${Button.CYCLE_ABILITY.toString()}`, pressAction ], + [SettingGamepad.Button_Cycle_Nature]: [ `KEY ${Button.CYCLE_NATURE.toString()}`, pressAction ], + [SettingGamepad.Button_Cycle_Variant]: [ `KEY ${Button.V.toString()}`, pressAction ], + [SettingGamepad.Button_Speed_Up]: [ `KEY ${Button.SPEED_UP.toString()}`, pressAction ], + [SettingGamepad.Button_Slow_Down]: [ `KEY ${Button.SLOW_DOWN.toString()}`, pressAction ], + [SettingGamepad.Button_Submit]: [ `KEY ${Button.SUBMIT.toString()}`, pressAction ], }; export const settingGamepadDefaults = { @@ -130,7 +130,7 @@ export function setSettingGamepad(scene: BattleScene, setting: SettingGamepad, v return true; }; scene.ui.setOverlayMode(Mode.OPTION_SELECT, { - options: [...gp.map((g: string) => ({ + options: [ ...gp.map((g: string) => ({ label: truncateString(g, 30), // Truncate the gamepad name for display handler: () => changeGamepadHandler(g) })), { diff --git a/src/system/settings/settings-keyboard.ts b/src/system/settings/settings-keyboard.ts index d60af06e12b..d7cb994aca8 100644 --- a/src/system/settings/settings-keyboard.ts +++ b/src/system/settings/settings-keyboard.ts @@ -1,6 +1,6 @@ -import {Button} from "#enums/buttons"; +import { Button } from "#enums/buttons"; import BattleScene from "#app/battle-scene"; -import {Mode} from "#app/ui/ui"; +import { Mode } from "#app/ui/ui"; import SettingsKeyboardUiHandler from "#app/ui/settings/settings-keyboard-ui-handler"; import i18next from "i18next"; @@ -46,40 +46,40 @@ const pressAction = i18next.t("settings:pressToBind"); export const settingKeyboardOptions = { // [SettingKeyboard.Default_Layout]: ['Default'], - [SettingKeyboard.Button_Up]: [`KEY ${Button.UP.toString()}`, pressAction], - [SettingKeyboard.Button_Down]: [`KEY ${Button.DOWN.toString()}`, pressAction], - [SettingKeyboard.Alt_Button_Up]: [`KEY ${Button.UP.toString()}`, pressAction], - [SettingKeyboard.Button_Left]: [`KEY ${Button.LEFT.toString()}`, pressAction], - [SettingKeyboard.Button_Right]: [`KEY ${Button.RIGHT.toString()}`, pressAction], - [SettingKeyboard.Button_Action]: [`KEY ${Button.ACTION.toString()}`, pressAction], - [SettingKeyboard.Button_Menu]: [`KEY ${Button.MENU.toString()}`, pressAction], - [SettingKeyboard.Button_Submit]: [`KEY ${Button.SUBMIT.toString()}`, pressAction], - [SettingKeyboard.Alt_Button_Down]: [`KEY ${Button.DOWN.toString()}`, pressAction], - [SettingKeyboard.Alt_Button_Left]: [`KEY ${Button.LEFT.toString()}`, pressAction], - [SettingKeyboard.Alt_Button_Right]: [`KEY ${Button.RIGHT.toString()}`, pressAction], - [SettingKeyboard.Alt_Button_Action]: [`KEY ${Button.ACTION.toString()}`, pressAction], - [SettingKeyboard.Button_Cancel]: [`KEY ${Button.CANCEL.toString()}`, pressAction], - [SettingKeyboard.Alt_Button_Cancel]: [`KEY ${Button.CANCEL.toString()}`, pressAction], - [SettingKeyboard.Alt_Button_Menu]: [`KEY ${Button.MENU.toString()}`, pressAction], - [SettingKeyboard.Button_Stats]: [`KEY ${Button.STATS.toString()}`, pressAction], - [SettingKeyboard.Alt_Button_Stats]: [`KEY ${Button.STATS.toString()}`, pressAction], - [SettingKeyboard.Button_Cycle_Form]: [`KEY ${Button.CYCLE_FORM.toString()}`, pressAction], - [SettingKeyboard.Alt_Button_Cycle_Form]: [`KEY ${Button.CYCLE_FORM.toString()}`, pressAction], - [SettingKeyboard.Button_Cycle_Shiny]: [`KEY ${Button.CYCLE_SHINY.toString()}`, pressAction], - [SettingKeyboard.Alt_Button_Cycle_Shiny]: [`KEY ${Button.CYCLE_SHINY.toString()}`, pressAction], - [SettingKeyboard.Button_Cycle_Gender]: [`KEY ${Button.CYCLE_GENDER.toString()}`, pressAction], - [SettingKeyboard.Alt_Button_Cycle_Gender]: [`KEY ${Button.CYCLE_GENDER.toString()}`, pressAction], - [SettingKeyboard.Button_Cycle_Ability]: [`KEY ${Button.CYCLE_ABILITY.toString()}`, pressAction], - [SettingKeyboard.Alt_Button_Cycle_Ability]: [`KEY ${Button.CYCLE_ABILITY.toString()}`, pressAction], - [SettingKeyboard.Button_Cycle_Nature]: [`KEY ${Button.CYCLE_NATURE.toString()}`, pressAction], - [SettingKeyboard.Alt_Button_Cycle_Nature]: [`KEY ${Button.CYCLE_NATURE.toString()}`, pressAction], - [SettingKeyboard.Button_Cycle_Variant]: [`KEY ${Button.V.toString()}`, pressAction], - [SettingKeyboard.Alt_Button_Cycle_Variant]: [`KEY ${Button.V.toString()}`, pressAction], - [SettingKeyboard.Button_Speed_Up]: [`KEY ${Button.SPEED_UP.toString()}`, pressAction], - [SettingKeyboard.Alt_Button_Speed_Up]: [`KEY ${Button.SPEED_UP.toString()}`, pressAction], - [SettingKeyboard.Button_Slow_Down]: [`KEY ${Button.SLOW_DOWN.toString()}`, pressAction], - [SettingKeyboard.Alt_Button_Slow_Down]: [`KEY ${Button.SLOW_DOWN.toString()}`, pressAction], - [SettingKeyboard.Alt_Button_Submit]: [`KEY ${Button.SUBMIT.toString()}`, pressAction], + [SettingKeyboard.Button_Up]: [ `KEY ${Button.UP.toString()}`, pressAction ], + [SettingKeyboard.Button_Down]: [ `KEY ${Button.DOWN.toString()}`, pressAction ], + [SettingKeyboard.Alt_Button_Up]: [ `KEY ${Button.UP.toString()}`, pressAction ], + [SettingKeyboard.Button_Left]: [ `KEY ${Button.LEFT.toString()}`, pressAction ], + [SettingKeyboard.Button_Right]: [ `KEY ${Button.RIGHT.toString()}`, pressAction ], + [SettingKeyboard.Button_Action]: [ `KEY ${Button.ACTION.toString()}`, pressAction ], + [SettingKeyboard.Button_Menu]: [ `KEY ${Button.MENU.toString()}`, pressAction ], + [SettingKeyboard.Button_Submit]: [ `KEY ${Button.SUBMIT.toString()}`, pressAction ], + [SettingKeyboard.Alt_Button_Down]: [ `KEY ${Button.DOWN.toString()}`, pressAction ], + [SettingKeyboard.Alt_Button_Left]: [ `KEY ${Button.LEFT.toString()}`, pressAction ], + [SettingKeyboard.Alt_Button_Right]: [ `KEY ${Button.RIGHT.toString()}`, pressAction ], + [SettingKeyboard.Alt_Button_Action]: [ `KEY ${Button.ACTION.toString()}`, pressAction ], + [SettingKeyboard.Button_Cancel]: [ `KEY ${Button.CANCEL.toString()}`, pressAction ], + [SettingKeyboard.Alt_Button_Cancel]: [ `KEY ${Button.CANCEL.toString()}`, pressAction ], + [SettingKeyboard.Alt_Button_Menu]: [ `KEY ${Button.MENU.toString()}`, pressAction ], + [SettingKeyboard.Button_Stats]: [ `KEY ${Button.STATS.toString()}`, pressAction ], + [SettingKeyboard.Alt_Button_Stats]: [ `KEY ${Button.STATS.toString()}`, pressAction ], + [SettingKeyboard.Button_Cycle_Form]: [ `KEY ${Button.CYCLE_FORM.toString()}`, pressAction ], + [SettingKeyboard.Alt_Button_Cycle_Form]: [ `KEY ${Button.CYCLE_FORM.toString()}`, pressAction ], + [SettingKeyboard.Button_Cycle_Shiny]: [ `KEY ${Button.CYCLE_SHINY.toString()}`, pressAction ], + [SettingKeyboard.Alt_Button_Cycle_Shiny]: [ `KEY ${Button.CYCLE_SHINY.toString()}`, pressAction ], + [SettingKeyboard.Button_Cycle_Gender]: [ `KEY ${Button.CYCLE_GENDER.toString()}`, pressAction ], + [SettingKeyboard.Alt_Button_Cycle_Gender]: [ `KEY ${Button.CYCLE_GENDER.toString()}`, pressAction ], + [SettingKeyboard.Button_Cycle_Ability]: [ `KEY ${Button.CYCLE_ABILITY.toString()}`, pressAction ], + [SettingKeyboard.Alt_Button_Cycle_Ability]: [ `KEY ${Button.CYCLE_ABILITY.toString()}`, pressAction ], + [SettingKeyboard.Button_Cycle_Nature]: [ `KEY ${Button.CYCLE_NATURE.toString()}`, pressAction ], + [SettingKeyboard.Alt_Button_Cycle_Nature]: [ `KEY ${Button.CYCLE_NATURE.toString()}`, pressAction ], + [SettingKeyboard.Button_Cycle_Variant]: [ `KEY ${Button.V.toString()}`, pressAction ], + [SettingKeyboard.Alt_Button_Cycle_Variant]: [ `KEY ${Button.V.toString()}`, pressAction ], + [SettingKeyboard.Button_Speed_Up]: [ `KEY ${Button.SPEED_UP.toString()}`, pressAction ], + [SettingKeyboard.Alt_Button_Speed_Up]: [ `KEY ${Button.SPEED_UP.toString()}`, pressAction ], + [SettingKeyboard.Button_Slow_Down]: [ `KEY ${Button.SLOW_DOWN.toString()}`, pressAction ], + [SettingKeyboard.Alt_Button_Slow_Down]: [ `KEY ${Button.SLOW_DOWN.toString()}`, pressAction ], + [SettingKeyboard.Alt_Button_Submit]: [ `KEY ${Button.SUBMIT.toString()}`, pressAction ], }; export const settingKeyboardDefaults = { diff --git a/src/system/voucher.ts b/src/system/voucher.ts index 06edfe5c6a6..aca7b9fc2f2 100644 --- a/src/system/voucher.ts +++ b/src/system/voucher.ts @@ -90,7 +90,7 @@ export interface Vouchers { export const vouchers: Vouchers = {}; export function initVouchers() { - for (const achv of [achvs.CLASSIC_VICTORY]) { + for (const achv of [ achvs.CLASSIC_VICTORY ]) { const voucherType = achv.score >= 150 ? VoucherType.GOLDEN : achv.score >= 100 diff --git a/src/test/abilities/ability_timing.test.ts b/src/test/abilities/ability_timing.test.ts index 16437df06c9..1472f9eb429 100644 --- a/src/test/abilities/ability_timing.test.ts +++ b/src/test/abilities/ability_timing.test.ts @@ -38,7 +38,7 @@ describe("Ability Timing", () => { initI18n(); i18next.changeLanguage("en"); game.settings.battleStyle = BattleStyle.SWITCH; - await game.classicMode.runToSummon([Species.EEVEE, Species.FEEBAS]); + await game.classicMode.runToSummon([ Species.EEVEE, Species.FEEBAS ]); game.onNextPrompt("CheckSwitchPhase", Mode.CONFIRM, () => { game.setMode(Mode.MESSAGE); diff --git a/src/test/abilities/aroma_veil.test.ts b/src/test/abilities/aroma_veil.test.ts index b70308a5d60..4284eb43a75 100644 --- a/src/test/abilities/aroma_veil.test.ts +++ b/src/test/abilities/aroma_veil.test.ts @@ -27,14 +27,14 @@ describe("Moves - Aroma Veil", () => { game.override .battleType("double") .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset([Moves.HEAL_BLOCK, Moves.IMPRISON, Moves.SPLASH]) + .enemyMoveset([ Moves.HEAL_BLOCK, Moves.IMPRISON, Moves.SPLASH ]) .enemySpecies(Species.SHUCKLE) .ability(Abilities.AROMA_VEIL) - .moveset([Moves.GROWL]); + .moveset([ Moves.GROWL ]); }); it("Aroma Veil protects the Pokemon's side against most Move Restriction Battler Tags", async () => { - await game.classicMode.startBattle([Species.REGIELEKI, Species.BULBASAUR]); + await game.classicMode.startBattle([ Species.REGIELEKI, Species.BULBASAUR ]); const party = game.scene.getParty()! as PlayerPokemon[]; @@ -48,7 +48,7 @@ describe("Moves - Aroma Veil", () => { }); it("Aroma Veil does not protect against Imprison", async () => { - await game.classicMode.startBattle([Species.REGIELEKI, Species.BULBASAUR]); + await game.classicMode.startBattle([ Species.REGIELEKI, Species.BULBASAUR ]); const party = game.scene.getParty()! as PlayerPokemon[]; diff --git a/src/test/abilities/aura_break.test.ts b/src/test/abilities/aura_break.test.ts index 422ac5178c1..137688d1f22 100644 --- a/src/test/abilities/aura_break.test.ts +++ b/src/test/abilities/aura_break.test.ts @@ -25,7 +25,7 @@ describe("Abilities - Aura Break", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleType("single"); - game.override.moveset([Moves.MOONBLAST, Moves.DARK_PULSE, Moves.MOONBLAST, Moves.DARK_PULSE]); + game.override.moveset([ Moves.MOONBLAST, Moves.DARK_PULSE, Moves.MOONBLAST, Moves.DARK_PULSE ]); game.override.enemyMoveset(Moves.SPLASH); game.override.enemyAbility(Abilities.AURA_BREAK); game.override.enemySpecies(Species.SHUCKLE); @@ -38,7 +38,7 @@ describe("Abilities - Aura Break", () => { game.override.ability(Abilities.FAIRY_AURA); vi.spyOn(moveToCheck, "calculateBattlePower"); - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([ Species.PIKACHU ]); game.move.select(Moves.MOONBLAST); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -52,7 +52,7 @@ describe("Abilities - Aura Break", () => { game.override.ability(Abilities.DARK_AURA); vi.spyOn(moveToCheck, "calculateBattlePower"); - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([ Species.PIKACHU ]); game.move.select(Moves.DARK_PULSE); await game.phaseInterceptor.to("MoveEffectPhase"); @@ -66,7 +66,7 @@ describe("Abilities - Aura Break", () => { game.override.ability(Abilities.BALL_FETCH); vi.spyOn(moveToCheck, "calculateBattlePower"); - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([ Species.PIKACHU ]); game.move.select(Moves.MOONBLAST); await game.phaseInterceptor.to("MoveEffectPhase"); diff --git a/src/test/abilities/battery.test.ts b/src/test/abilities/battery.test.ts index cd02ed0c4eb..8abeca287f7 100644 --- a/src/test/abilities/battery.test.ts +++ b/src/test/abilities/battery.test.ts @@ -29,7 +29,7 @@ describe("Abilities - Battery", () => { game.override.battleType("double"); game.override.enemySpecies(Species.SHUCKLE); game.override.enemyAbility(Abilities.BALL_FETCH); - game.override.moveset([Moves.TACKLE, Moves.BREAKING_SWIPE, Moves.SPLASH, Moves.DAZZLING_GLEAM]); + game.override.moveset([ Moves.TACKLE, Moves.BREAKING_SWIPE, Moves.SPLASH, Moves.DAZZLING_GLEAM ]); game.override.enemyMoveset(Moves.SPLASH); }); @@ -39,7 +39,7 @@ describe("Abilities - Battery", () => { vi.spyOn(moveToCheck, "calculateBattlePower"); - await game.startBattle([Species.PIKACHU, Species.CHARJABUG]); + await game.startBattle([ Species.PIKACHU, Species.CHARJABUG ]); game.move.select(Moves.DAZZLING_GLEAM); game.move.select(Moves.SPLASH, 1); @@ -54,7 +54,7 @@ describe("Abilities - Battery", () => { vi.spyOn(moveToCheck, "calculateBattlePower"); - await game.startBattle([Species.PIKACHU, Species.CHARJABUG]); + await game.startBattle([ Species.PIKACHU, Species.CHARJABUG ]); game.move.select(Moves.BREAKING_SWIPE); game.move.select(Moves.SPLASH, 1); @@ -69,7 +69,7 @@ describe("Abilities - Battery", () => { vi.spyOn(moveToCheck, "calculateBattlePower"); - await game.startBattle([Species.CHARJABUG, Species.PIKACHU]); + await game.startBattle([ Species.CHARJABUG, Species.PIKACHU ]); game.move.select(Moves.DAZZLING_GLEAM); game.move.select(Moves.SPLASH, 1); diff --git a/src/test/abilities/battle_bond.test.ts b/src/test/abilities/battle_bond.test.ts index 4882001cc8d..c7dffeb150a 100644 --- a/src/test/abilities/battle_bond.test.ts +++ b/src/test/abilities/battle_bond.test.ts @@ -8,7 +8,6 @@ import GameManager from "#test/utils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; - describe("Abilities - BATTLE BOND", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -28,8 +27,8 @@ describe("Abilities - BATTLE BOND", () => { const moveToUse = Moves.SPLASH; game.override.battleType("single"); game.override.ability(Abilities.BATTLE_BOND); - game.override.moveset([moveToUse]); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override.moveset([ moveToUse ]); + game.override.enemyMoveset([ Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE ]); }); test( @@ -42,7 +41,7 @@ describe("Abilities - BATTLE BOND", () => { [Species.GRENINJA]: ashForm, }); - await game.startBattle([Species.MAGIKARP, Species.GRENINJA]); + await game.startBattle([ Species.MAGIKARP, Species.GRENINJA ]); const greninja = game.scene.getParty().find((p) => p.species.speciesId === Species.GRENINJA); expect(greninja).toBeDefined(); diff --git a/src/test/abilities/beast_boost.test.ts b/src/test/abilities/beast_boost.test.ts index 26bae7b8838..de31b979e32 100644 --- a/src/test/abilities/beast_boost.test.ts +++ b/src/test/abilities/beast_boost.test.ts @@ -34,7 +34,7 @@ describe("Abilities - Beast Boost", () => { }); it("should prefer highest stat to boost its corresponding stat stage by 1 when winning a battle", async() => { - await game.classicMode.startBattle([Species.SLOWBRO]); + await game.classicMode.startBattle([ Species.SLOWBRO ]); const playerPokemon = game.scene.getPlayerPokemon()!; // Set the pokemon's highest stat to DEF, so it should be picked by Beast Boost @@ -50,9 +50,9 @@ describe("Abilities - Beast Boost", () => { }, 20000); it("should use in-battle overriden stats when determining the stat stage to raise by 1", async() => { - game.override.enemyMoveset([Moves.GUARD_SPLIT]); + game.override.enemyMoveset([ Moves.GUARD_SPLIT ]); - await game.classicMode.startBattle([Species.SLOWBRO]); + await game.classicMode.startBattle([ Species.SLOWBRO ]); const playerPokemon = game.scene.getPlayerPokemon()!; // If the opponent uses Guard Split, the pokemon's second highest stat (SPATK) should be chosen @@ -70,7 +70,7 @@ describe("Abilities - Beast Boost", () => { it("should have order preference in case of stat ties", async() => { // Order preference follows the order of EFFECTIVE_STAT - await game.classicMode.startBattle([Species.SLOWBRO]); + await game.classicMode.startBattle([ Species.SLOWBRO ]); const playerPokemon = game.scene.getPlayerPokemon()!; diff --git a/src/test/abilities/contrary.test.ts b/src/test/abilities/contrary.test.ts index 5221e821e70..c838a5a098e 100644 --- a/src/test/abilities/contrary.test.ts +++ b/src/test/abilities/contrary.test.ts @@ -44,8 +44,8 @@ describe("Abilities - Contrary", () => { it("should apply positive effects", async () => { game.override .enemyPassiveAbility(Abilities.CLEAR_BODY) - .moveset([Moves.TAIL_WHIP]); - await game.classicMode.startBattle([Species.SLOWBRO]); + .moveset([ Moves.TAIL_WHIP ]); + await game.classicMode.startBattle([ Species.SLOWBRO ]); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -60,9 +60,9 @@ describe("Abilities - Contrary", () => { it("should block negative effects", async () => { game.override .enemyPassiveAbility(Abilities.CLEAR_BODY) - .enemyMoveset([Moves.HOWL, Moves.HOWL, Moves.HOWL, Moves.HOWL]) - .moveset([Moves.SPLASH]); - await game.classicMode.startBattle([Species.SLOWBRO]); + .enemyMoveset([ Moves.HOWL, Moves.HOWL, Moves.HOWL, Moves.HOWL ]) + .moveset([ Moves.SPLASH ]); + await game.classicMode.startBattle([ Species.SLOWBRO ]); const enemyPokemon = game.scene.getEnemyPokemon()!; diff --git a/src/test/abilities/costar.test.ts b/src/test/abilities/costar.test.ts index 2fd1cb26408..3be29ea2dcf 100644 --- a/src/test/abilities/costar.test.ts +++ b/src/test/abilities/costar.test.ts @@ -9,7 +9,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; - describe("Abilities - COSTAR", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -28,7 +27,7 @@ describe("Abilities - COSTAR", () => { game = new GameManager(phaserGame); game.override.battleType("double"); game.override.ability(Abilities.COSTAR); - game.override.moveset([Moves.SPLASH, Moves.NASTY_PLOT]); + game.override.moveset([ Moves.SPLASH, Moves.NASTY_PLOT ]); game.override.enemyMoveset(Moves.SPLASH); }); @@ -38,9 +37,9 @@ describe("Abilities - COSTAR", () => { async () => { game.override.enemyAbility(Abilities.BALL_FETCH); - await game.startBattle([Species.MAGIKARP, Species.MAGIKARP, Species.FLAMIGO]); + await game.startBattle([ Species.MAGIKARP, Species.MAGIKARP, Species.FLAMIGO ]); - let [leftPokemon, rightPokemon] = game.scene.getPlayerField(); + let [ leftPokemon, rightPokemon ] = game.scene.getPlayerField(); game.move.select(Moves.NASTY_PLOT); await game.phaseInterceptor.to(CommandPhase); @@ -55,7 +54,7 @@ describe("Abilities - COSTAR", () => { game.doSwitchPokemon(2); await game.phaseInterceptor.to(MessagePhase); - [leftPokemon, rightPokemon] = game.scene.getPlayerField(); + [ leftPokemon, rightPokemon ] = game.scene.getPlayerField(); expect(leftPokemon.getStatStage(Stat.SPATK)).toBe(2); expect(rightPokemon.getStatStage(Stat.SPATK)).toBe(2); }, @@ -66,9 +65,9 @@ describe("Abilities - COSTAR", () => { async () => { game.override.enemyAbility(Abilities.INTIMIDATE); - await game.startBattle([Species.MAGIKARP, Species.MAGIKARP, Species.FLAMIGO]); + await game.startBattle([ Species.MAGIKARP, Species.MAGIKARP, Species.FLAMIGO ]); - let [leftPokemon, rightPokemon] = game.scene.getPlayerField(); + let [ leftPokemon, rightPokemon ] = game.scene.getPlayerField(); expect(leftPokemon.getStatStage(Stat.ATK)).toBe(-2); expect(leftPokemon.getStatStage(Stat.ATK)).toBe(-2); @@ -78,7 +77,7 @@ describe("Abilities - COSTAR", () => { game.doSwitchPokemon(2); await game.phaseInterceptor.to(MessagePhase); - [leftPokemon, rightPokemon] = game.scene.getPlayerField(); + [ leftPokemon, rightPokemon ] = game.scene.getPlayerField(); expect(leftPokemon.getStatStage(Stat.ATK)).toBe(-2); expect(rightPokemon.getStatStage(Stat.ATK)).toBe(-2); }, diff --git a/src/test/abilities/dancer.test.ts b/src/test/abilities/dancer.test.ts index 7564a254dbe..8fa3d444f37 100644 --- a/src/test/abilities/dancer.test.ts +++ b/src/test/abilities/dancer.test.ts @@ -8,7 +8,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; - describe("Abilities - Dancer", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -27,22 +26,22 @@ describe("Abilities - Dancer", () => { game = new GameManager(phaserGame); game.override .battleType("double") - .moveset([Moves.SWORDS_DANCE, Moves.SPLASH]) + .moveset([ Moves.SWORDS_DANCE, Moves.SPLASH ]) .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.DANCER) - .enemyMoveset([Moves.VICTORY_DANCE]); + .enemyMoveset([ Moves.VICTORY_DANCE ]); }); // Reference Link: https://bulbapedia.bulbagarden.net/wiki/Dancer_(Ability) it("triggers when dance moves are used, doesn't consume extra PP", async () => { - await game.classicMode.startBattle([Species.ORICORIO, Species.FEEBAS]); + await game.classicMode.startBattle([ Species.ORICORIO, Species.FEEBAS ]); - const [oricorio] = game.scene.getPlayerField(); + const [ oricorio ] = game.scene.getPlayerField(); game.move.select(Moves.SPLASH); game.move.select(Moves.SWORDS_DANCE, 1); - await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2]); + await game.setTurnOrder([ BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2 ]); await game.phaseInterceptor.to("MovePhase"); // immediately copies ally move await game.phaseInterceptor.to("MovePhase", false); diff --git a/src/test/abilities/disguise.test.ts b/src/test/abilities/disguise.test.ts index 0268a738c0e..a295dd61443 100644 --- a/src/test/abilities/disguise.test.ts +++ b/src/test/abilities/disguise.test.ts @@ -8,7 +8,6 @@ import GameManager from "#test/utils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; - describe("Abilities - Disguise", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -32,7 +31,7 @@ describe("Abilities - Disguise", () => { .enemySpecies(Species.MIMIKYU) .enemyMoveset(Moves.SPLASH) .starterSpecies(Species.REGIELEKI) - .moveset([Moves.SHADOW_SNEAK, Moves.VACUUM_WAVE, Moves.TOXIC_THREAD, Moves.SPLASH]); + .moveset([ Moves.SHADOW_SNEAK, Moves.VACUUM_WAVE, Moves.TOXIC_THREAD, Moves.SPLASH ]); }); it("takes no damage from attacking move and transforms to Busted form, takes 1/8 max HP damage from the disguise breaking", async () => { @@ -107,7 +106,7 @@ describe("Abilities - Disguise", () => { }); it("persists form change when switched out", async () => { - game.override.enemyMoveset([Moves.SHADOW_SNEAK]); + game.override.enemyMoveset([ Moves.SHADOW_SNEAK ]); game.override.starterSpecies(0); await game.classicMode.startBattle([ Species.MIMIKYU, Species.FURRET ]); @@ -193,7 +192,7 @@ describe("Abilities - Disguise", () => { }); it("doesn't faint twice when fainting due to Disguise break damage, nor prevent faint from Disguise break damage if using Endure", async () => { - game.override.enemyMoveset([Moves.ENDURE]); + game.override.enemyMoveset([ Moves.ENDURE ]); await game.classicMode.startBattle(); const mimikyu = game.scene.getEnemyPokemon()!; @@ -208,7 +207,7 @@ describe("Abilities - Disguise", () => { it("activates when Aerilate circumvents immunity to the move's base type", async () => { game.override.ability(Abilities.AERILATE); - game.override.moveset([Moves.TACKLE]); + game.override.moveset([ Moves.TACKLE ]); await game.classicMode.startBattle(); diff --git a/src/test/abilities/dry_skin.test.ts b/src/test/abilities/dry_skin.test.ts index a97914660bc..314564df15c 100644 --- a/src/test/abilities/dry_skin.test.ts +++ b/src/test/abilities/dry_skin.test.ts @@ -28,7 +28,7 @@ describe("Abilities - Dry Skin", () => { .enemyMoveset(Moves.SPLASH) .enemySpecies(Species.CHARMANDER) .ability(Abilities.BALL_FETCH) - .moveset([Moves.SUNNY_DAY, Moves.RAIN_DANCE, Moves.SPLASH, Moves.WATER_GUN]) + .moveset([ Moves.SUNNY_DAY, Moves.RAIN_DANCE, Moves.SPLASH, Moves.WATER_GUN ]) .starterSpecies(Species.CHANDELURE); }); @@ -69,7 +69,7 @@ describe("Abilities - Dry Skin", () => { }); it("opposing fire attacks do 25% more damage", async () => { - game.override.moveset([Moves.FLAMETHROWER]); + game.override.moveset([ Moves.FLAMETHROWER ]); await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; @@ -105,7 +105,7 @@ describe("Abilities - Dry Skin", () => { }); it("opposing water attacks do not heal if they were protected from", async () => { - game.override.enemyMoveset([Moves.PROTECT]); + game.override.enemyMoveset([ Moves.PROTECT ]); await game.classicMode.startBattle(); @@ -119,7 +119,7 @@ describe("Abilities - Dry Skin", () => { }); it("multi-strike water attacks only heal once", async () => { - game.override.moveset([Moves.WATER_GUN, Moves.WATER_SHURIKEN]); + game.override.moveset([ Moves.WATER_GUN, Moves.WATER_SHURIKEN ]); await game.classicMode.startBattle(); diff --git a/src/test/abilities/flash_fire.test.ts b/src/test/abilities/flash_fire.test.ts index 9c78de99575..f03e1689649 100644 --- a/src/test/abilities/flash_fire.test.ts +++ b/src/test/abilities/flash_fire.test.ts @@ -37,8 +37,8 @@ describe("Abilities - Flash Fire", () => { it("immune to Fire-type moves", async () => { - game.override.enemyMoveset([Moves.EMBER]).moveset(Moves.SPLASH); - await game.classicMode.startBattle([Species.BLISSEY]); + game.override.enemyMoveset([ Moves.EMBER ]).moveset(Moves.SPLASH); + await game.classicMode.startBattle([ Species.BLISSEY ]); const blissey = game.scene.getPlayerPokemon()!; @@ -48,8 +48,8 @@ describe("Abilities - Flash Fire", () => { }, 20000); it("not activate if the Pokémon is protected from the Fire-type move", async () => { - game.override.enemyMoveset([Moves.EMBER]).moveset([Moves.PROTECT]); - await game.classicMode.startBattle([Species.BLISSEY]); + game.override.enemyMoveset([ Moves.EMBER ]).moveset([ Moves.PROTECT ]); + await game.classicMode.startBattle([ Species.BLISSEY ]); const blissey = game.scene.getPlayerPokemon()!; @@ -59,8 +59,8 @@ describe("Abilities - Flash Fire", () => { }, 20000); it("activated by Will-O-Wisp", async () => { - game.override.enemyMoveset([Moves.WILL_O_WISP]).moveset(Moves.SPLASH); - await game.classicMode.startBattle([Species.BLISSEY]); + game.override.enemyMoveset([ Moves.WILL_O_WISP ]).moveset(Moves.SPLASH); + await game.classicMode.startBattle([ Species.BLISSEY ]); const blissey = game.scene.getPlayerPokemon()!; @@ -74,9 +74,9 @@ describe("Abilities - Flash Fire", () => { }, 20000); it("activated after being frozen", async () => { - game.override.enemyMoveset([Moves.EMBER]).moveset(Moves.SPLASH); + game.override.enemyMoveset([ Moves.EMBER ]).moveset(Moves.SPLASH); game.override.statusEffect(StatusEffect.FREEZE); - await game.classicMode.startBattle([Species.BLISSEY]); + await game.classicMode.startBattle([ Species.BLISSEY ]); const blissey = game.scene.getPlayerPokemon()!; @@ -87,12 +87,12 @@ describe("Abilities - Flash Fire", () => { }, 20000); it("not passing with baton pass", async () => { - game.override.enemyMoveset([Moves.EMBER]).moveset([Moves.BATON_PASS]); - await game.classicMode.startBattle([Species.BLISSEY, Species.CHANSEY]); + game.override.enemyMoveset([ Moves.EMBER ]).moveset([ Moves.BATON_PASS ]); + await game.classicMode.startBattle([ Species.BLISSEY, Species.CHANSEY ]); // ensure use baton pass after enemy moved game.move.select(Moves.BATON_PASS); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); game.doSelectPartyPokemon(1); @@ -103,16 +103,16 @@ describe("Abilities - Flash Fire", () => { }, 20000); it("boosts Fire-type move when the ability is activated", async () => { - game.override.enemyMoveset([Moves.FIRE_PLEDGE]).moveset([Moves.EMBER, Moves.SPLASH]); + game.override.enemyMoveset([ Moves.FIRE_PLEDGE ]).moveset([ Moves.EMBER, Moves.SPLASH ]); game.override.enemyAbility(Abilities.FLASH_FIRE).ability(Abilities.NONE); - await game.classicMode.startBattle([Species.BLISSEY]); + await game.classicMode.startBattle([ Species.BLISSEY ]); const blissey = game.scene.getPlayerPokemon()!; const initialHP = 1000; blissey.hp = initialHP; // first turn game.move.select(Moves.EMBER); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.phaseInterceptor.to(TurnEndPhase); const originalDmg = initialHP - blissey.hp; @@ -131,7 +131,7 @@ describe("Abilities - Flash Fire", () => { game.override.moveset(Moves.FIRE_PLEDGE).enemyMoveset(Moves.EMBER); game.override.enemyAbility(Abilities.NONE).ability(Abilities.FLASH_FIRE); game.override.enemySpecies(Species.BLISSEY); - await game.classicMode.startBattle([Species.RATTATA]); + await game.classicMode.startBattle([ Species.RATTATA ]); const blissey = game.scene.getEnemyPokemon()!; const initialHP = 1000; @@ -139,7 +139,7 @@ describe("Abilities - Flash Fire", () => { // first turn game.move.select(Moves.FIRE_PLEDGE); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to("MoveEffectPhase"); await game.move.forceMiss(); await game.phaseInterceptor.to(TurnEndPhase); diff --git a/src/test/abilities/flower_gift.test.ts b/src/test/abilities/flower_gift.test.ts index 256b61c6fea..04ada598f22 100644 --- a/src/test/abilities/flower_gift.test.ts +++ b/src/test/abilities/flower_gift.test.ts @@ -21,7 +21,7 @@ describe("Abilities - Flower Gift", () => { */ const testRevertFormAgainstAbility = async (game: GameManager, ability: Abilities) => { game.override.starterForms({ [Species.CASTFORM]: SUNSHINE_FORM }).enemyAbility(ability); - await game.classicMode.startBattle([Species.CASTFORM]); + await game.classicMode.startBattle([ Species.CASTFORM ]); game.move.select(Moves.SPLASH); @@ -41,7 +41,7 @@ describe("Abilities - Flower Gift", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.RAIN_DANCE, Moves.SUNNY_DAY, Moves.SKILL_SWAP]) + .moveset([ Moves.SPLASH, Moves.RAIN_DANCE, Moves.SUNNY_DAY, Moves.SKILL_SWAP ]) .enemySpecies(Species.MAGIKARP) .enemyMoveset(Moves.SPLASH) .enemyAbility(Abilities.BALL_FETCH); @@ -50,7 +50,7 @@ describe("Abilities - Flower Gift", () => { // TODO: Uncomment expect statements when the ability is implemented - currently does not increase stats of allies it("increases the ATK and SPDEF stat stages of the Pokémon with this Ability and its allies by 1.5× during Harsh Sunlight", async () => { game.override.battleType("double"); - await game.classicMode.startBattle([Species.CHERRIM, Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.CHERRIM, Species.MAGIKARP ]); const [ cherrim ] = game.scene.getPlayerField(); const cherrimAtkStat = cherrim.getEffectiveStat(Stat.ATK); @@ -62,7 +62,7 @@ describe("Abilities - Flower Gift", () => { game.move.select(Moves.SUNNY_DAY, 0); game.move.select(Moves.SPLASH, 1); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); await game.phaseInterceptor.to("TurnEndPhase"); expect(cherrim.formIndex).toBe(SUNSHINE_FORM); @@ -74,7 +74,7 @@ describe("Abilities - Flower Gift", () => { it("changes the Pokemon's form during Harsh Sunlight", async () => { game.override.weather(WeatherType.HARSH_SUN); - await game.classicMode.startBattle([Species.CHERRIM]); + await game.classicMode.startBattle([ Species.CHERRIM ]); const cherrim = game.scene.getPlayerPokemon()!; expect(cherrim.formIndex).toBe(SUNSHINE_FORM); @@ -91,9 +91,9 @@ describe("Abilities - Flower Gift", () => { }); it("reverts to Overcast Form when the Pokémon loses Flower Gift, changes form under Harsh Sunlight/Sunny when it regains it", async () => { - game.override.enemyMoveset([Moves.SKILL_SWAP]).weather(WeatherType.HARSH_SUN); + game.override.enemyMoveset([ Moves.SKILL_SWAP ]).weather(WeatherType.HARSH_SUN); - await game.classicMode.startBattle([Species.CHERRIM]); + await game.classicMode.startBattle([ Species.CHERRIM ]); const cherrim = game.scene.getPlayerPokemon()!; @@ -110,16 +110,16 @@ describe("Abilities - Flower Gift", () => { }); it("reverts to Overcast Form when the Flower Gift is suppressed, changes form under Harsh Sunlight/Sunny when it regains it", async () => { - game.override.enemyMoveset([Moves.GASTRO_ACID]).weather(WeatherType.HARSH_SUN); + game.override.enemyMoveset([ Moves.GASTRO_ACID ]).weather(WeatherType.HARSH_SUN); - await game.classicMode.startBattle([Species.CHERRIM, Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.CHERRIM, Species.MAGIKARP ]); const cherrim = game.scene.getPlayerPokemon()!; expect(cherrim.formIndex).toBe(SUNSHINE_FORM); game.move.select(Moves.SPLASH); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.phaseInterceptor.to("TurnEndPhase"); expect(cherrim.summonData.abilitySuppressed).toBe(true); @@ -140,7 +140,7 @@ describe("Abilities - Flower Gift", () => { it("should be in Overcast Form after the user is switched out", async () => { game.override.weather(WeatherType.SUNNY); - await game.classicMode.startBattle([Species.CASTFORM, Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.CASTFORM, Species.MAGIKARP ]); const cherrim = game.scene.getPlayerPokemon()!; expect(cherrim.formIndex).toBe(SUNSHINE_FORM); diff --git a/src/test/abilities/forecast.test.ts b/src/test/abilities/forecast.test.ts index c1eb3600b8b..6da31307789 100644 --- a/src/test/abilities/forecast.test.ts +++ b/src/test/abilities/forecast.test.ts @@ -30,7 +30,7 @@ describe("Abilities - Forecast", () => { */ const testWeatherFormChange = async (game: GameManager, weather: WeatherType, form: number, initialForm?: number) => { game.override.weather(weather).starterForms({ [Species.CASTFORM]: initialForm }); - await game.startBattle([Species.CASTFORM]); + await game.startBattle([ Species.CASTFORM ]); game.move.select(Moves.SPLASH); @@ -44,7 +44,7 @@ describe("Abilities - Forecast", () => { */ const testRevertFormAgainstAbility = async (game: GameManager, ability: Abilities) => { game.override.starterForms({ [Species.CASTFORM]: SUNNY_FORM }).enemyAbility(ability); - await game.startBattle([Species.CASTFORM]); + await game.startBattle([ Species.CASTFORM ]); game.move.select(Moves.SPLASH); @@ -64,7 +64,7 @@ describe("Abilities - Forecast", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.RAIN_DANCE, Moves.SUNNY_DAY, Moves.TACKLE]) + .moveset([ Moves.SPLASH, Moves.RAIN_DANCE, Moves.SUNNY_DAY, Moves.TACKLE ]) .enemySpecies(Species.MAGIKARP) .enemyMoveset(Moves.SPLASH) .enemyAbility(Abilities.BALL_FETCH); @@ -72,14 +72,14 @@ describe("Abilities - Forecast", () => { it("changes form based on weather", async () => { game.override - .moveset([Moves.RAIN_DANCE, Moves.SUNNY_DAY, Moves.SNOWSCAPE, Moves.SPLASH]) + .moveset([ Moves.RAIN_DANCE, Moves.SUNNY_DAY, Moves.SNOWSCAPE, Moves.SPLASH ]) .battleType("double") .starterForms({ [Species.KYOGRE]: 1, [Species.GROUDON]: 1, [Species.RAYQUAZA]: 1 }); - await game.startBattle([Species.CASTFORM, Species.FEEBAS, Species.KYOGRE, Species.GROUDON, Species.RAYQUAZA, Species.ALTARIA]); + await game.startBattle([ Species.CASTFORM, Species.FEEBAS, Species.KYOGRE, Species.GROUDON, Species.RAYQUAZA, Species.ALTARIA ]); vi.spyOn(game.scene.getParty()[5], "getAbility").mockReturnValue(allAbilities[Abilities.CLOUD_NINE]); @@ -107,7 +107,7 @@ describe("Abilities - Forecast", () => { expect(castform.formIndex).toBe(SNOWY_FORM); - game.override.moveset([Moves.HAIL, Moves.SANDSTORM, Moves.SNOWSCAPE, Moves.SPLASH]); + game.override.moveset([ Moves.HAIL, Moves.SANDSTORM, Moves.SNOWSCAPE, Moves.SPLASH ]); game.move.select(Moves.SANDSTORM); game.move.select(Moves.SPLASH, 1); @@ -190,7 +190,7 @@ describe("Abilities - Forecast", () => { it("has no effect on Pokémon other than Castform", async () => { game.override.enemyAbility(Abilities.FORECAST).enemySpecies(Species.SHUCKLE); - await game.startBattle([Species.CASTFORM]); + await game.startBattle([ Species.CASTFORM ]); game.move.select(Moves.RAIN_DANCE); await game.phaseInterceptor.to(TurnEndPhase); @@ -200,8 +200,8 @@ describe("Abilities - Forecast", () => { }); it("reverts to Normal Form when Castform loses Forecast, changes form to match the weather when it regains it", async () => { - game.override.moveset([Moves.SKILL_SWAP, Moves.WORRY_SEED, Moves.SPLASH]).weather(WeatherType.RAIN).battleType("double"); - await game.startBattle([Species.CASTFORM, Species.FEEBAS]); + game.override.moveset([ Moves.SKILL_SWAP, Moves.WORRY_SEED, Moves.SPLASH ]).weather(WeatherType.RAIN).battleType("double"); + await game.startBattle([ Species.CASTFORM, Species.FEEBAS ]); const castform = game.scene.getPlayerField()[0]; @@ -209,7 +209,7 @@ describe("Abilities - Forecast", () => { game.move.select(Moves.SKILL_SWAP, 0, BattlerIndex.PLAYER_2); game.move.select(Moves.SKILL_SWAP, 1, BattlerIndex.PLAYER); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); await game.phaseInterceptor.to("MoveEndPhase"); expect(castform.formIndex).toBe(NORMAL_FORM); @@ -221,22 +221,22 @@ describe("Abilities - Forecast", () => { game.move.select(Moves.SPLASH); game.move.select(Moves.WORRY_SEED, 1, BattlerIndex.PLAYER); - await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); + await game.setTurnOrder([ BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); await game.phaseInterceptor.to("MoveEndPhase"); expect(castform.formIndex).toBe(NORMAL_FORM); }); it("reverts to Normal Form when Forecast is suppressed, changes form to match the weather when it regains it", async () => { - game.override.enemyMoveset([Moves.GASTRO_ACID]).weather(WeatherType.RAIN); - await game.startBattle([Species.CASTFORM, Species.PIKACHU]); + game.override.enemyMoveset([ Moves.GASTRO_ACID ]).weather(WeatherType.RAIN); + await game.startBattle([ Species.CASTFORM, Species.PIKACHU ]); const castform = game.scene.getPlayerPokemon()!; expect(castform.formIndex).toBe(RAINY_FORM); // First turn - Forecast is suppressed game.move.select(Moves.SPLASH); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.move.forceHit(); await game.phaseInterceptor.to(TurnEndPhase); @@ -259,8 +259,8 @@ describe("Abilities - Forecast", () => { }); it("does not change Castform's form until after Stealth Rock deals damage", async () => { - game.override.weather(WeatherType.RAIN).enemyMoveset([Moves.STEALTH_ROCK]); - await game.startBattle([Species.PIKACHU, Species.CASTFORM]); + game.override.weather(WeatherType.RAIN).enemyMoveset([ Moves.STEALTH_ROCK ]); + await game.startBattle([ Species.PIKACHU, Species.CASTFORM ]); // First turn - set up stealth rock game.move.select(Moves.SPLASH); @@ -284,7 +284,7 @@ describe("Abilities - Forecast", () => { it("should be in Normal Form after the user is switched out", async () => { game.override.weather(WeatherType.RAIN); - await game.startBattle([Species.CASTFORM, Species.MAGIKARP]); + await game.startBattle([ Species.CASTFORM, Species.MAGIKARP ]); const castform = game.scene.getPlayerPokemon()!; expect(castform.formIndex).toBe(RAINY_FORM); diff --git a/src/test/abilities/galvanize.test.ts b/src/test/abilities/galvanize.test.ts index 1b7dde9ba60..438f166174d 100644 --- a/src/test/abilities/galvanize.test.ts +++ b/src/test/abilities/galvanize.test.ts @@ -10,7 +10,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; - describe("Abilities - Galvanize", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -32,7 +31,7 @@ describe("Abilities - Galvanize", () => { .battleType("single") .startingLevel(100) .ability(Abilities.GALVANIZE) - .moveset([Moves.TACKLE, Moves.REVELATION_DANCE, Moves.FURY_SWIPES]) + .moveset([ Moves.TACKLE, Moves.REVELATION_DANCE, Moves.FURY_SWIPES ]) .enemySpecies(Species.DUSCLOPS) .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH) @@ -86,7 +85,7 @@ describe("Abilities - Galvanize", () => { it("should not change the type of variable-type moves", async () => { game.override.enemySpecies(Species.MIGHTYENA); - await game.startBattle([Species.ESPEON]); + await game.startBattle([ Species.ESPEON ]); const playerPokemon = game.scene.getPlayerPokemon()!; vi.spyOn(playerPokemon, "getMoveType"); @@ -112,7 +111,7 @@ describe("Abilities - Galvanize", () => { vi.spyOn(enemyPokemon, "apply"); game.move.select(Moves.FURY_SWIPES); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.move.forceHit(); await game.phaseInterceptor.to("MoveEffectPhase"); diff --git a/src/test/abilities/gorilla_tactics.test.ts b/src/test/abilities/gorilla_tactics.test.ts index 5e92950526e..8aee365eb8f 100644 --- a/src/test/abilities/gorilla_tactics.test.ts +++ b/src/test/abilities/gorilla_tactics.test.ts @@ -25,15 +25,15 @@ describe("Abilities - Gorilla Tactics", () => { game.override .battleType("single") .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset([Moves.SPLASH, Moves.DISABLE]) + .enemyMoveset([ Moves.SPLASH, Moves.DISABLE ]) .enemySpecies(Species.MAGIKARP) .enemyLevel(30) - .moveset([Moves.SPLASH, Moves.TACKLE, Moves.GROWL]) + .moveset([ Moves.SPLASH, Moves.TACKLE, Moves.GROWL ]) .ability(Abilities.GORILLA_TACTICS); }); it("boosts the Pokémon's Attack by 50%, but limits the Pokémon to using only one move", async () => { - await game.classicMode.startBattle([Species.GALAR_DARMANITAN]); + await game.classicMode.startBattle([ Species.GALAR_DARMANITAN ]); const darmanitan = game.scene.getPlayerPokemon()!; const initialAtkStat = darmanitan.getStat(Stat.ATK); @@ -50,7 +50,7 @@ describe("Abilities - Gorilla Tactics", () => { }); it("should struggle if the only usable move is disabled", async () => { - await game.classicMode.startBattle([Species.GALAR_DARMANITAN]); + await game.classicMode.startBattle([ Species.GALAR_DARMANITAN ]); const darmanitan = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; @@ -64,7 +64,7 @@ describe("Abilities - Gorilla Tactics", () => { game.move.select(Moves.GROWL); await game.forceEnemyMove(Moves.DISABLE); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.getStatStage(Stat.ATK)).toBe(-1); // Only the effect of the first Growl should be applied @@ -73,7 +73,7 @@ describe("Abilities - Gorilla Tactics", () => { await game.toNextTurn(); game.move.select(Moves.TACKLE); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to("MoveEndPhase"); expect(darmanitan.hp).toBeLessThan(darmanitan.getMaxHp()); diff --git a/src/test/abilities/gulp_missile.test.ts b/src/test/abilities/gulp_missile.test.ts index d981f009974..1ca208996b5 100644 --- a/src/test/abilities/gulp_missile.test.ts +++ b/src/test/abilities/gulp_missile.test.ts @@ -41,7 +41,7 @@ describe("Abilities - Gulp Missile", () => { game = new GameManager(phaserGame); game.override .battleType("single") - .moveset([Moves.SURF, Moves.DIVE, Moves.SPLASH]) + .moveset([ Moves.SURF, Moves.DIVE, Moves.SPLASH ]) .enemySpecies(Species.SNORLAX) .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH) @@ -49,7 +49,7 @@ describe("Abilities - Gulp Missile", () => { }); it("changes to Gulping Form if HP is over half when Surf or Dive is used", async () => { - await game.classicMode.startBattle([Species.CRAMORANT]); + await game.classicMode.startBattle([ Species.CRAMORANT ]); const cramorant = game.scene.getPlayerPokemon()!; game.move.select(Moves.DIVE); @@ -63,7 +63,7 @@ describe("Abilities - Gulp Missile", () => { }); it("changes to Gorging Form if HP is under half when Surf or Dive is used", async () => { - await game.classicMode.startBattle([Species.CRAMORANT]); + await game.classicMode.startBattle([ Species.CRAMORANT ]); const cramorant = game.scene.getPlayerPokemon()!; vi.spyOn(cramorant, "getHpRatio").mockReturnValue(.49); @@ -77,7 +77,7 @@ describe("Abilities - Gulp Missile", () => { }); it("changes to base form when switched out after Surf or Dive is used", async () => { - await game.classicMode.startBattle([Species.CRAMORANT, Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.CRAMORANT, Species.MAGIKARP ]); const cramorant = game.scene.getPlayerPokemon()!; game.move.select(Moves.SURF); @@ -92,7 +92,7 @@ describe("Abilities - Gulp Missile", () => { }); it("changes form during Dive's charge turn", async () => { - await game.classicMode.startBattle([Species.CRAMORANT]); + await game.classicMode.startBattle([ Species.CRAMORANT ]); const cramorant = game.scene.getPlayerPokemon()!; game.move.select(Moves.DIVE); @@ -104,7 +104,7 @@ describe("Abilities - Gulp Missile", () => { it("deals 1/4 of the attacker's maximum HP when hit by a damaging attack", async () => { game.override.enemyMoveset(Moves.TACKLE); - await game.classicMode.startBattle([Species.CRAMORANT]); + await game.classicMode.startBattle([ Species.CRAMORANT ]); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "damageAndUpdate"); @@ -117,7 +117,7 @@ describe("Abilities - Gulp Missile", () => { it("does not have any effect when hit by non-damaging attack", async () => { game.override.enemyMoveset(Moves.TAIL_WHIP); - await game.classicMode.startBattle([Species.CRAMORANT]); + await game.classicMode.startBattle([ Species.CRAMORANT ]); const cramorant = game.scene.getPlayerPokemon()!; vi.spyOn(cramorant, "getHpRatio").mockReturnValue(.55); @@ -136,7 +136,7 @@ describe("Abilities - Gulp Missile", () => { it("lowers attacker's DEF stat stage by 1 when hit in Gulping form", async () => { game.override.enemyMoveset(Moves.TACKLE); - await game.classicMode.startBattle([Species.CRAMORANT]); + await game.classicMode.startBattle([ Species.CRAMORANT ]); const cramorant = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; @@ -160,7 +160,7 @@ describe("Abilities - Gulp Missile", () => { it("paralyzes the enemy when hit in Gorging form", async () => { game.override.enemyMoveset(Moves.TACKLE); - await game.classicMode.startBattle([Species.CRAMORANT]); + await game.classicMode.startBattle([ Species.CRAMORANT ]); const cramorant = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; @@ -184,7 +184,7 @@ describe("Abilities - Gulp Missile", () => { it("does not activate the ability when underwater", async () => { game.override.enemyMoveset(Moves.SURF); - await game.classicMode.startBattle([Species.CRAMORANT]); + await game.classicMode.startBattle([ Species.CRAMORANT ]); const cramorant = game.scene.getPlayerPokemon()!; @@ -197,7 +197,7 @@ describe("Abilities - Gulp Missile", () => { it("prevents effect damage but inflicts secondary effect on attacker with Magic Guard", async () => { game.override.enemyMoveset(Moves.TACKLE).enemyAbility(Abilities.MAGIC_GUARD); - await game.classicMode.startBattle([Species.CRAMORANT]); + await game.classicMode.startBattle([ Species.CRAMORANT ]); const cramorant = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; @@ -221,7 +221,7 @@ describe("Abilities - Gulp Missile", () => { it("activates on faint", async () => { game.override.enemyMoveset(Moves.THUNDERBOLT); - await game.classicMode.startBattle([Species.CRAMORANT]); + await game.classicMode.startBattle([ Species.CRAMORANT ]); const cramorant = game.scene.getPlayerPokemon()!; @@ -237,7 +237,7 @@ describe("Abilities - Gulp Missile", () => { it("cannot be suppressed", async () => { game.override.enemyMoveset(Moves.GASTRO_ACID); - await game.classicMode.startBattle([Species.CRAMORANT]); + await game.classicMode.startBattle([ Species.CRAMORANT ]); const cramorant = game.scene.getPlayerPokemon()!; vi.spyOn(cramorant, "getHpRatio").mockReturnValue(.55); @@ -257,7 +257,7 @@ describe("Abilities - Gulp Missile", () => { it("cannot be swapped with another ability", async () => { game.override.enemyMoveset(Moves.SKILL_SWAP); - await game.classicMode.startBattle([Species.CRAMORANT]); + await game.classicMode.startBattle([ Species.CRAMORANT ]); const cramorant = game.scene.getPlayerPokemon()!; vi.spyOn(cramorant, "getHpRatio").mockReturnValue(.55); @@ -278,7 +278,7 @@ describe("Abilities - Gulp Missile", () => { it("cannot be copied", async () => { game.override.enemyAbility(Abilities.TRACE); - await game.classicMode.startBattle([Species.CRAMORANT]); + await game.classicMode.startBattle([ Species.CRAMORANT ]); game.move.select(Moves.SPLASH); await game.phaseInterceptor.to("TurnStartPhase"); diff --git a/src/test/abilities/heatproof.test.ts b/src/test/abilities/heatproof.test.ts index 61c406201bd..bf4e99ce467 100644 --- a/src/test/abilities/heatproof.test.ts +++ b/src/test/abilities/heatproof.test.ts @@ -33,7 +33,7 @@ describe("Abilities - Heatproof", () => { .enemyLevel(100) .starterSpecies(Species.CHANDELURE) .ability(Abilities.BALL_FETCH) - .moveset([Moves.FLAMETHROWER, Moves.SPLASH]) + .moveset([ Moves.FLAMETHROWER, Moves.SPLASH ]) .startingLevel(100); }); diff --git a/src/test/abilities/hustle.test.ts b/src/test/abilities/hustle.test.ts index 29cbfdc1a5d..c4c4818040d 100644 --- a/src/test/abilities/hustle.test.ts +++ b/src/test/abilities/hustle.test.ts @@ -34,7 +34,7 @@ describe("Abilities - Hustle", () => { }); it("increases the user's Attack stat by 50%", async () => { - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([ Species.PIKACHU ]); const pikachu = game.scene.getPlayerPokemon()!; const atk = pikachu.stats[Stat.ATK]; @@ -48,7 +48,7 @@ describe("Abilities - Hustle", () => { }); it("lowers the accuracy of the user's physical moves by 20%", async () => { - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([ Species.PIKACHU ]); const pikachu = game.scene.getPlayerPokemon()!; vi.spyOn(pikachu, "getAccuracyMultiplier"); @@ -60,7 +60,7 @@ describe("Abilities - Hustle", () => { }); it("does not affect non-physical moves", async () => { - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([ Species.PIKACHU ]); const pikachu = game.scene.getPlayerPokemon()!; const spatk = pikachu.stats[Stat.SPATK]; @@ -78,7 +78,7 @@ describe("Abilities - Hustle", () => { game.override.startingLevel(100); game.override.enemyLevel(30); - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([ Species.PIKACHU ]); const pikachu = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; diff --git a/src/test/abilities/hyper_cutter.test.ts b/src/test/abilities/hyper_cutter.test.ts index ec947add939..e51fef6bd49 100644 --- a/src/test/abilities/hyper_cutter.test.ts +++ b/src/test/abilities/hyper_cutter.test.ts @@ -24,7 +24,7 @@ describe("Abilities - Hyper Cutter", () => { game = new GameManager(phaserGame); game.override .battleType("single") - .moveset([Moves.SAND_ATTACK, Moves.NOBLE_ROAR, Moves.DEFOG, Moves.OCTOLOCK]) + .moveset([ Moves.SAND_ATTACK, Moves.NOBLE_ROAR, Moves.DEFOG, Moves.OCTOLOCK ]) .ability(Abilities.BALL_FETCH) .enemySpecies(Species.SHUCKLE) .enemyAbility(Abilities.HYPER_CUTTER) @@ -46,11 +46,11 @@ describe("Abilities - Hyper Cutter", () => { await game.toNextTurn(); game.move.select(Moves.SAND_ATTACK); await game.toNextTurn(); - game.override.moveset([Moves.STRING_SHOT]); + game.override.moveset([ Moves.STRING_SHOT ]); game.move.select(Moves.STRING_SHOT); await game.toNextTurn(); expect(enemy.getStatStage(Stat.ATK)).toEqual(0); - [Stat.ACC, Stat.DEF, Stat.EVA, Stat.SPATK, Stat.SPDEF, Stat.SPD].forEach((stat: number) => expect(enemy.getStatStage(stat)).toBeLessThan(0)); + [ Stat.ACC, Stat.DEF, Stat.EVA, Stat.SPATK, Stat.SPDEF, Stat.SPD ].forEach((stat: number) => expect(enemy.getStatStage(stat)).toBeLessThan(0)); }); }); diff --git a/src/test/abilities/ice_face.test.ts b/src/test/abilities/ice_face.test.ts index fbc660c27c2..723d5e8d855 100644 --- a/src/test/abilities/ice_face.test.ts +++ b/src/test/abilities/ice_face.test.ts @@ -32,11 +32,11 @@ describe("Abilities - Ice Face", () => { game.override.battleType("single"); game.override.enemySpecies(Species.EISCUE); game.override.enemyAbility(Abilities.ICE_FACE); - game.override.moveset([Moves.TACKLE, Moves.ICE_BEAM, Moves.TOXIC_THREAD, Moves.HAIL]); + game.override.moveset([ Moves.TACKLE, Moves.ICE_BEAM, Moves.TOXIC_THREAD, Moves.HAIL ]); }); it("takes no damage from physical move and transforms to Noice", async () => { - await game.startBattle([Species.HITMONLEE]); + await game.startBattle([ Species.HITMONLEE ]); game.move.select(Moves.TACKLE); @@ -50,9 +50,9 @@ describe("Abilities - Ice Face", () => { }); it("takes no damage from the first hit of multihit physical move and transforms to Noice", async () => { - game.override.moveset([Moves.SURGING_STRIKES]); + game.override.moveset([ Moves.SURGING_STRIKES ]); game.override.enemyLevel(1); - await game.startBattle([Species.HITMONLEE]); + await game.startBattle([ Species.HITMONLEE ]); game.move.select(Moves.SURGING_STRIKES); @@ -78,7 +78,7 @@ describe("Abilities - Ice Face", () => { }); it("takes damage from special moves", async () => { - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); game.move.select(Moves.ICE_BEAM); @@ -92,7 +92,7 @@ describe("Abilities - Ice Face", () => { }); it("takes effects from status moves", async () => { - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); game.move.select(Moves.TOXIC_THREAD); @@ -105,10 +105,10 @@ describe("Abilities - Ice Face", () => { }); it("transforms to Ice Face when Hail or Snow starts", async () => { - game.override.moveset([Moves.QUICK_ATTACK]); - game.override.enemyMoveset([Moves.HAIL, Moves.HAIL, Moves.HAIL, Moves.HAIL]); + game.override.moveset([ Moves.QUICK_ATTACK ]); + game.override.enemyMoveset([ Moves.HAIL, Moves.HAIL, Moves.HAIL, Moves.HAIL ]); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); game.move.select(Moves.QUICK_ATTACK); @@ -127,10 +127,10 @@ describe("Abilities - Ice Face", () => { }); it("transforms to Ice Face when summoned on arena with active Snow or Hail", async () => { - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); - game.override.moveset([Moves.SNOWSCAPE]); + game.override.enemyMoveset([ Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE ]); + game.override.moveset([ Moves.SNOWSCAPE ]); - await game.startBattle([Species.EISCUE, Species.NINJASK]); + await game.startBattle([ Species.EISCUE, Species.NINJASK ]); game.move.select(Moves.SNOWSCAPE); @@ -155,9 +155,9 @@ describe("Abilities - Ice Face", () => { it("will not revert to its Ice Face if there is already Hail when it changes into Noice", async () => { game.override.enemySpecies(Species.SHUCKLE); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override.enemyMoveset([ Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE ]); - await game.startBattle([Species.EISCUE]); + await game.startBattle([ Species.EISCUE ]); game.move.select(Moves.HAIL); const eiscue = game.scene.getPlayerPokemon()!; @@ -174,9 +174,9 @@ describe("Abilities - Ice Face", () => { }); it("persists form change when switched out", async () => { - game.override.enemyMoveset([Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK]); + game.override.enemyMoveset([ Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK ]); - await game.startBattle([Species.EISCUE, Species.MAGIKARP]); + await game.startBattle([ Species.EISCUE, Species.MAGIKARP ]); game.move.select(Moves.ICE_BEAM); @@ -205,7 +205,7 @@ describe("Abilities - Ice Face", () => { [Species.EISCUE]: noiceForm, }); - await game.startBattle([Species.EISCUE]); + await game.startBattle([ Species.EISCUE ]); const eiscue = game.scene.getPlayerPokemon()!; @@ -223,9 +223,9 @@ describe("Abilities - Ice Face", () => { }); it("cannot be suppressed", async () => { - game.override.moveset([Moves.GASTRO_ACID]); + game.override.moveset([ Moves.GASTRO_ACID ]); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); game.move.select(Moves.GASTRO_ACID); @@ -239,9 +239,9 @@ describe("Abilities - Ice Face", () => { }); it("cannot be swapped with another ability", async () => { - game.override.moveset([Moves.SKILL_SWAP]); + game.override.moveset([ Moves.SKILL_SWAP ]); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); game.move.select(Moves.SKILL_SWAP); @@ -257,7 +257,7 @@ describe("Abilities - Ice Face", () => { it("cannot be copied", async () => { game.override.ability(Abilities.TRACE); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); game.move.select(Moves.SIMPLE_BEAM); diff --git a/src/test/abilities/imposter.test.ts b/src/test/abilities/imposter.test.ts index 27673564aaa..b7b8e0c5cca 100644 --- a/src/test/abilities/imposter.test.ts +++ b/src/test/abilities/imposter.test.ts @@ -76,7 +76,7 @@ describe("Abilities - Imposter", () => { }, 20000); it("should copy in-battle overridden stats", async () => { - game.override.enemyMoveset([Moves.POWER_SPLIT]); + game.override.enemyMoveset([ Moves.POWER_SPLIT ]); await game.startBattle([ Species.DITTO diff --git a/src/test/abilities/intimidate.test.ts b/src/test/abilities/intimidate.test.ts index d4c097022df..d5a37d06593 100644 --- a/src/test/abilities/intimidate.test.ts +++ b/src/test/abilities/intimidate.test.ts @@ -34,7 +34,7 @@ describe("Abilities - Intimidate", () => { }); it("should lower ATK stat stage by 1 of enemy Pokemon on entry and player switch", async () => { - await game.classicMode.runToSummon([Species.MIGHTYENA, Species.POOCHYENA]); + await game.classicMode.runToSummon([ Species.MIGHTYENA, Species.POOCHYENA ]); game.onNextPrompt( "CheckSwitchPhase", Mode.CONFIRM, @@ -66,7 +66,7 @@ describe("Abilities - Intimidate", () => { it("should lower ATK stat stage by 1 for every enemy Pokemon in a double battle on entry", async () => { game.override.battleType("double") .startingWave(3); - await game.classicMode.runToSummon([Species.MIGHTYENA, Species.POOCHYENA]); + await game.classicMode.runToSummon([ Species.MIGHTYENA, Species.POOCHYENA ]); game.onNextPrompt( "CheckSwitchPhase", Mode.CONFIRM, @@ -89,7 +89,7 @@ describe("Abilities - Intimidate", () => { it("should not activate again if there is no switch or new entry", async () => { game.override.startingWave(2); - game.override.moveset([Moves.SPLASH]); + game.override.moveset([ Moves.SPLASH ]); await game.classicMode.startBattle([ Species.MIGHTYENA, Species.POOCHYENA ]); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -106,8 +106,8 @@ describe("Abilities - Intimidate", () => { }, 20000); it("should lower ATK stat stage by 1 for every switch", async () => { - game.override.moveset([Moves.SPLASH]) - .enemyMoveset([Moves.VOLT_SWITCH]) + game.override.moveset([ Moves.SPLASH ]) + .enemyMoveset([ Moves.VOLT_SWITCH ]) .startingWave(5); await game.classicMode.startBattle([ Species.MIGHTYENA, Species.POOCHYENA ]); diff --git a/src/test/abilities/libero.test.ts b/src/test/abilities/libero.test.ts index f429d9ffc72..aac1cb16d97 100644 --- a/src/test/abilities/libero.test.ts +++ b/src/test/abilities/libero.test.ts @@ -13,7 +13,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; - describe("Abilities - Libero", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -34,15 +33,15 @@ describe("Abilities - Libero", () => { game.override.ability(Abilities.LIBERO); game.override.startingLevel(100); game.override.enemySpecies(Species.RATTATA); - game.override.enemyMoveset([Moves.ENDURE, Moves.ENDURE, Moves.ENDURE, Moves.ENDURE]); + game.override.enemyMoveset([ Moves.ENDURE, Moves.ENDURE, Moves.ENDURE, Moves.ENDURE ]); }); test( "ability applies and changes a pokemon's type", async () => { - game.override.moveset([Moves.SPLASH]); + game.override.moveset([ Moves.SPLASH ]); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -57,9 +56,9 @@ describe("Abilities - Libero", () => { test.skip( "ability applies only once per switch in", async () => { - game.override.moveset([Moves.SPLASH, Moves.AGILITY]); + game.override.moveset([ Moves.SPLASH, Moves.AGILITY ]); - await game.startBattle([Species.MAGIKARP, Species.BULBASAUR]); + await game.startBattle([ Species.MAGIKARP, Species.BULBASAUR ]); let leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -96,9 +95,9 @@ describe("Abilities - Libero", () => { test( "ability applies correctly even if the pokemon's move has a variable type", async () => { - game.override.moveset([Moves.WEATHER_BALL]); + game.override.moveset([ Moves.WEATHER_BALL ]); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -118,10 +117,10 @@ describe("Abilities - Libero", () => { test( "ability applies correctly even if the type has changed by another ability", async () => { - game.override.moveset([Moves.TACKLE]); + game.override.moveset([ Moves.TACKLE ]); game.override.passiveAbility(Abilities.REFRIGERATE); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -140,9 +139,9 @@ describe("Abilities - Libero", () => { test( "ability applies correctly even if the pokemon's move calls another move", async () => { - game.override.moveset([Moves.NATURE_POWER]); + game.override.moveset([ Moves.NATURE_POWER ]); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -158,9 +157,9 @@ describe("Abilities - Libero", () => { test( "ability applies correctly even if the pokemon's move is delayed / charging", async () => { - game.override.moveset([Moves.DIG]); + game.override.moveset([ Moves.DIG ]); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -175,10 +174,10 @@ describe("Abilities - Libero", () => { test( "ability applies correctly even if the pokemon's move misses", async () => { - game.override.moveset([Moves.TACKLE]); + game.override.moveset([ Moves.TACKLE ]); game.override.enemyMoveset(Moves.SPLASH); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -196,10 +195,10 @@ describe("Abilities - Libero", () => { test( "ability applies correctly even if the pokemon's move is protected against", async () => { - game.override.moveset([Moves.TACKLE]); - game.override.enemyMoveset([Moves.PROTECT, Moves.PROTECT, Moves.PROTECT, Moves.PROTECT]); + game.override.moveset([ Moves.TACKLE ]); + game.override.enemyMoveset([ Moves.PROTECT, Moves.PROTECT, Moves.PROTECT, Moves.PROTECT ]); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -214,10 +213,10 @@ describe("Abilities - Libero", () => { test( "ability applies correctly even if the pokemon's move fails because of type immunity", async () => { - game.override.moveset([Moves.TACKLE]); + game.override.moveset([ Moves.TACKLE ]); game.override.enemySpecies(Species.GASTLY); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -232,14 +231,14 @@ describe("Abilities - Libero", () => { test( "ability is not applied if pokemon's type is the same as the move's type", async () => { - game.override.moveset([Moves.SPLASH]); + game.override.moveset([ Moves.SPLASH ]); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - leadPokemon.summonData.types = [allMoves[Moves.SPLASH].type]; + leadPokemon.summonData.types = [ allMoves[Moves.SPLASH].type ]; game.move.select(Moves.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); @@ -250,9 +249,9 @@ describe("Abilities - Libero", () => { test( "ability is not applied if pokemon is terastallized", async () => { - game.override.moveset([Moves.SPLASH]); + game.override.moveset([ Moves.SPLASH ]); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -269,9 +268,9 @@ describe("Abilities - Libero", () => { test( "ability is not applied if pokemon uses struggle", async () => { - game.override.moveset([Moves.STRUGGLE]); + game.override.moveset([ Moves.STRUGGLE ]); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -286,9 +285,9 @@ describe("Abilities - Libero", () => { test( "ability is not applied if the pokemon's move fails", async () => { - game.override.moveset([Moves.BURN_UP]); + game.override.moveset([ Moves.BURN_UP ]); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -303,10 +302,10 @@ describe("Abilities - Libero", () => { test( "ability applies correctly even if the pokemon's Trick-or-Treat fails", async () => { - game.override.moveset([Moves.TRICK_OR_TREAT]); + game.override.moveset([ Moves.TRICK_OR_TREAT ]); game.override.enemySpecies(Species.GASTLY); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -321,9 +320,9 @@ describe("Abilities - Libero", () => { test( "ability applies correctly and the pokemon curses itself", async () => { - game.override.moveset([Moves.CURSE]); + game.override.moveset([ Moves.CURSE ]); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); diff --git a/src/test/abilities/magic_guard.test.ts b/src/test/abilities/magic_guard.test.ts index dd8b83f7601..614f983e76e 100644 --- a/src/test/abilities/magic_guard.test.ts +++ b/src/test/abilities/magic_guard.test.ts @@ -30,7 +30,7 @@ describe("Abilities - Magic Guard", () => { /** Player Pokemon overrides */ game.override.ability(Abilities.MAGIC_GUARD); - game.override.moveset([Moves.SPLASH]); + game.override.moveset([ Moves.SPLASH ]); game.override.startingLevel(100); /** Enemy Pokemon overrides */ @@ -47,7 +47,7 @@ describe("Abilities - Magic Guard", () => { async () => { game.override.weather(WeatherType.SANDSTORM); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -74,7 +74,7 @@ describe("Abilities - Magic Guard", () => { //Toxic keeps track of the turn counters -> important that Magic Guard keeps track of post-Toxic turns game.override.statusEffect(StatusEffect.POISON); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -95,10 +95,10 @@ describe("Abilities - Magic Guard", () => { it( "ability effect should not persist when the ability is replaced", async () => { - game.override.enemyMoveset([Moves.WORRY_SEED, Moves.WORRY_SEED, Moves.WORRY_SEED, Moves.WORRY_SEED]); + game.override.enemyMoveset([ Moves.WORRY_SEED, Moves.WORRY_SEED, Moves.WORRY_SEED, Moves.WORRY_SEED ]); game.override.statusEffect(StatusEffect.POISON); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -120,7 +120,7 @@ describe("Abilities - Magic Guard", () => { game.override.enemyStatusEffect(StatusEffect.BURN); game.override.enemyAbility(Abilities.MAGIC_GUARD); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); game.move.select(Moves.SPLASH); @@ -144,7 +144,7 @@ describe("Abilities - Magic Guard", () => { game.override.enemyStatusEffect(StatusEffect.TOXIC); game.override.enemyAbility(Abilities.MAGIC_GUARD); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); game.move.select(Moves.SPLASH); @@ -173,7 +173,7 @@ describe("Abilities - Magic Guard", () => { const newTag = getArenaTag(ArenaTagType.SPIKES, 5, Moves.SPIKES, 0, 0, ArenaTagSide.BOTH)!; game.scene.arena.tags.push(newTag); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; game.move.select(Moves.SPLASH); @@ -199,7 +199,7 @@ describe("Abilities - Magic Guard", () => { game.scene.arena.tags.push(playerTag); game.scene.arena.tags.push(enemyTag); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; game.move.select(Moves.SPLASH); @@ -223,8 +223,8 @@ describe("Abilities - Magic Guard", () => { it("Magic Guard prevents against damage from volatile status effects", async () => { - await game.startBattle([Species.DUSKULL]); - game.override.moveset([Moves.CURSE]); + await game.startBattle([ Species.DUSKULL ]); + game.override.moveset([ Moves.CURSE ]); game.override.enemyAbility(Abilities.MAGIC_GUARD); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -248,8 +248,8 @@ describe("Abilities - Magic Guard", () => { ); it("Magic Guard prevents crash damage", async () => { - game.override.moveset([Moves.HIGH_JUMP_KICK]); - await game.startBattle([Species.MAGIKARP]); + game.override.moveset([ Moves.HIGH_JUMP_KICK ]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -267,8 +267,8 @@ describe("Abilities - Magic Guard", () => { ); it("Magic Guard prevents damage from recoil", async () => { - game.override.moveset([Moves.TAKE_DOWN]); - await game.startBattle([Species.MAGIKARP]); + game.override.moveset([ Moves.TAKE_DOWN ]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -285,8 +285,8 @@ describe("Abilities - Magic Guard", () => { ); it("Magic Guard does not prevent damage from Struggle's recoil", async () => { - game.override.moveset([Moves.STRUGGLE]); - await game.startBattle([Species.MAGIKARP]); + game.override.moveset([ Moves.STRUGGLE ]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -304,8 +304,8 @@ describe("Abilities - Magic Guard", () => { //This tests different move attributes than the recoil tests above it("Magic Guard prevents self-damage from attacking moves", async () => { - game.override.moveset([Moves.STEEL_BEAM]); - await game.startBattle([Species.MAGIKARP]); + game.override.moveset([ Moves.STEEL_BEAM ]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -332,8 +332,8 @@ describe("Abilities - Magic Guard", () => { */ it("Magic Guard does not prevent self-damage from non-attacking moves", async () => { - game.override.moveset([Moves.BELLY_DRUM]); - await game.startBattle([Species.MAGIKARP]); + game.override.moveset([ Moves.BELLY_DRUM ]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -353,10 +353,10 @@ describe("Abilities - Magic Guard", () => { //Tests the ability Bad Dreams game.override.statusEffect(StatusEffect.SLEEP); //enemy pokemon is given Spore just in case player pokemon somehow awakens during test - game.override.enemyMoveset([Moves.SPORE, Moves.SPORE, Moves.SPORE, Moves.SPORE]); + game.override.enemyMoveset([ Moves.SPORE, Moves.SPORE, Moves.SPORE, Moves.SPORE ]); game.override.enemyAbility(Abilities.BAD_DREAMS); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -376,10 +376,10 @@ describe("Abilities - Magic Guard", () => { it("Magic Guard prevents damage from abilities with PostFaintContactDamageAbAttr", async () => { //Tests the abilities Innards Out/Aftermath - game.override.moveset([Moves.TACKLE]); + game.override.moveset([ Moves.TACKLE ]); game.override.enemyAbility(Abilities.AFTERMATH); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -401,10 +401,10 @@ describe("Abilities - Magic Guard", () => { it("Magic Guard prevents damage from abilities with PostDefendContactDamageAbAttr", async () => { //Tests the abilities Iron Barbs/Rough Skin - game.override.moveset([Moves.TACKLE]); + game.override.moveset([ Moves.TACKLE ]); game.override.enemyAbility(Abilities.IRON_BARBS); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -425,10 +425,10 @@ describe("Abilities - Magic Guard", () => { it("Magic Guard prevents damage from abilities with ReverseDrainAbAttr", async () => { //Tests the ability Liquid Ooze - game.override.moveset([Moves.ABSORB]); + game.override.moveset([ Moves.ABSORB ]); game.override.enemyAbility(Abilities.LIQUID_OOZE); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -452,7 +452,7 @@ describe("Abilities - Magic Guard", () => { game.override.passiveAbility(Abilities.SOLAR_POWER); game.override.weather(WeatherType.SUNNY); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; game.move.select(Moves.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); diff --git a/src/test/abilities/mycelium_might.test.ts b/src/test/abilities/mycelium_might.test.ts index d8947935880..0c8e7b5a703 100644 --- a/src/test/abilities/mycelium_might.test.ts +++ b/src/test/abilities/mycelium_might.test.ts @@ -28,9 +28,9 @@ describe("Abilities - Mycelium Might", () => { game.override.disableCrits(); game.override.enemySpecies(Species.SHUCKLE); game.override.enemyAbility(Abilities.CLEAR_BODY); - game.override.enemyMoveset([Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK]); + game.override.enemyMoveset([ Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK ]); game.override.ability(Abilities.MYCELIUM_MIGHT); - game.override.moveset([Moves.QUICK_ATTACK, Moves.BABY_DOLL_EYES]); + game.override.moveset([ Moves.QUICK_ATTACK, Moves.BABY_DOLL_EYES ]); }); /** @@ -41,7 +41,7 @@ describe("Abilities - Mycelium Might", () => { **/ it("will move last in its priority bracket and ignore protective abilities", async () => { - await game.startBattle([Species.REGIELEKI]); + await game.startBattle([ Species.REGIELEKI ]); const enemyPokemon = game.scene.getEnemyPokemon(); const playerIndex = game.scene.getPlayerPokemon()?.getBattlerIndex(); @@ -55,8 +55,8 @@ describe("Abilities - Mycelium Might", () => { const commandOrder = phase.getCommandOrder(); // The opponent Pokemon (without Mycelium Might) goes first despite having lower speed than the player Pokemon. // The player Pokemon (with Mycelium Might) goes last despite having higher speed than the opponent. - expect(speedOrder).toEqual([playerIndex, enemyIndex]); - expect(commandOrder).toEqual([enemyIndex, playerIndex]); + expect(speedOrder).toEqual([ playerIndex, enemyIndex ]); + expect(commandOrder).toEqual([ enemyIndex, playerIndex ]); await game.phaseInterceptor.to(TurnEndPhase); // Despite the opponent's ability (Clear Body), its ATK stat stage is still reduced. @@ -64,8 +64,8 @@ describe("Abilities - Mycelium Might", () => { }, 20000); it("will still go first if a status move that is in a higher priority bracket than the opponent's move is used", async () => { - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); - await game.startBattle([Species.REGIELEKI]); + game.override.enemyMoveset([ Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE ]); + await game.startBattle([ Species.REGIELEKI ]); const enemyPokemon = game.scene.getEnemyPokemon(); const playerIndex = game.scene.getPlayerPokemon()?.getBattlerIndex(); @@ -79,15 +79,15 @@ describe("Abilities - Mycelium Might", () => { const commandOrder = phase.getCommandOrder(); // The player Pokemon (with M.M.) goes first because its move is still within a higher priority bracket than its opponent. // The enemy Pokemon goes second because its move is in a lower priority bracket. - expect(speedOrder).toEqual([playerIndex, enemyIndex]); - expect(commandOrder).toEqual([playerIndex, enemyIndex]); + expect(speedOrder).toEqual([ playerIndex, enemyIndex ]); + expect(commandOrder).toEqual([ playerIndex, enemyIndex ]); await game.phaseInterceptor.to(TurnEndPhase); // Despite the opponent's ability (Clear Body), its ATK stat stage is still reduced. expect(enemyPokemon?.getStatStage(Stat.ATK)).toBe(-1); }, 20000); it("will not affect non-status moves", async () => { - await game.startBattle([Species.REGIELEKI]); + await game.startBattle([ Species.REGIELEKI ]); const playerIndex = game.scene.getPlayerPokemon()!.getBattlerIndex(); const enemyIndex = game.scene.getEnemyPokemon()!.getBattlerIndex(); @@ -101,7 +101,7 @@ describe("Abilities - Mycelium Might", () => { // The player Pokemon (with M.M.) goes first because it has a higher speed and did not use a status move. // The enemy Pokemon (without M.M.) goes second because its speed is lower. // This means that the commandOrder should be identical to the speedOrder - expect(speedOrder).toEqual([playerIndex, enemyIndex]); - expect(commandOrder).toEqual([playerIndex, enemyIndex]); + expect(speedOrder).toEqual([ playerIndex, enemyIndex ]); + expect(commandOrder).toEqual([ playerIndex, enemyIndex ]); }, 20000); }); diff --git a/src/test/abilities/parental_bond.test.ts b/src/test/abilities/parental_bond.test.ts index 22c9d8028be..993a5eb8344 100644 --- a/src/test/abilities/parental_bond.test.ts +++ b/src/test/abilities/parental_bond.test.ts @@ -11,7 +11,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; - describe("Abilities - Parental Bond", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -41,9 +40,9 @@ describe("Abilities - Parental Bond", () => { it( "should add second strike to attack move", async () => { - game.override.moveset([Moves.TACKLE]); + game.override.moveset([ Moves.TACKLE ]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -68,10 +67,10 @@ describe("Abilities - Parental Bond", () => { it( "should apply secondary effects to both strikes", async () => { - game.override.moveset([Moves.POWER_UP_PUNCH]); + game.override.moveset([ Moves.POWER_UP_PUNCH ]); game.override.enemySpecies(Species.AMOONGUSS); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -87,9 +86,9 @@ describe("Abilities - Parental Bond", () => { it( "should not apply to Status moves", async () => { - game.override.moveset([Moves.BABY_DOLL_EYES]); + game.override.moveset([ Moves.BABY_DOLL_EYES ]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -104,9 +103,9 @@ describe("Abilities - Parental Bond", () => { it( "should not apply to multi-hit moves", async () => { - game.override.moveset([Moves.DOUBLE_HIT]); + game.override.moveset([ Moves.DOUBLE_HIT ]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -122,9 +121,9 @@ describe("Abilities - Parental Bond", () => { it( "should not apply to self-sacrifice moves", async () => { - game.override.moveset([Moves.SELF_DESTRUCT]); + game.override.moveset([ Moves.SELF_DESTRUCT ]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -139,9 +138,9 @@ describe("Abilities - Parental Bond", () => { it( "should not apply to Rollout", async () => { - game.override.moveset([Moves.ROLLOUT]); + game.override.moveset([ Moves.ROLLOUT ]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -157,9 +156,9 @@ describe("Abilities - Parental Bond", () => { it( "should not apply multiplier to fixed-damage moves", async () => { - game.override.moveset([Moves.DRAGON_RAGE]); + game.override.moveset([ Moves.DRAGON_RAGE ]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -173,10 +172,10 @@ describe("Abilities - Parental Bond", () => { it( "should not apply multiplier to counter moves", async () => { - game.override.moveset([Moves.COUNTER]); - game.override.enemyMoveset([Moves.TACKLE]); + game.override.moveset([ Moves.COUNTER ]); + game.override.enemyMoveset([ Moves.TACKLE ]); - await game.classicMode.startBattle([Species.SHUCKLE]); + await game.classicMode.startBattle([ Species.SHUCKLE ]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -196,10 +195,10 @@ describe("Abilities - Parental Bond", () => { "should not apply to multi-target moves", async () => { game.override.battleType("double"); - game.override.moveset([Moves.EARTHQUAKE]); + game.override.moveset([ Moves.EARTHQUAKE ]); game.override.passiveAbility(Abilities.LEVITATE); - await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); + await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); const playerPokemon = game.scene.getPlayerField(); @@ -215,9 +214,9 @@ describe("Abilities - Parental Bond", () => { it( "should apply to multi-target moves when hitting only one target", async () => { - game.override.moveset([Moves.EARTHQUAKE]); + game.override.moveset([ Moves.EARTHQUAKE ]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -231,9 +230,9 @@ describe("Abilities - Parental Bond", () => { it( "should only trigger post-target move effects once", async () => { - game.override.moveset([Moves.MIND_BLOWN]); + game.override.moveset([ Moves.MIND_BLOWN ]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -253,9 +252,9 @@ describe("Abilities - Parental Bond", () => { it( "Burn Up only removes type after the second strike", async () => { - game.override.moveset([Moves.BURN_UP]); + game.override.moveset([ Moves.BURN_UP ]); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([ Species.CHARIZARD ]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -277,10 +276,10 @@ describe("Abilities - Parental Bond", () => { it( "Moves boosted by this ability and Multi-Lens should strike 4 times", async () => { - game.override.moveset([Moves.TACKLE]); + game.override.moveset([ Moves.TACKLE ]); game.override.startingHeldItems([{ name: "MULTI_LENS", count: 1 }]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -295,10 +294,10 @@ describe("Abilities - Parental Bond", () => { it( "Super Fang boosted by this ability and Multi-Lens should strike twice", async () => { - game.override.moveset([Moves.SUPER_FANG]); + game.override.moveset([ Moves.SUPER_FANG ]); game.override.startingHeldItems([{ name: "MULTI_LENS", count: 1 }]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -319,10 +318,10 @@ describe("Abilities - Parental Bond", () => { it( "Seismic Toss boosted by this ability and Multi-Lens should strike twice", async () => { - game.override.moveset([Moves.SEISMIC_TOSS]); + game.override.moveset([ Moves.SEISMIC_TOSS ]); game.override.startingHeldItems([{ name: "MULTI_LENS", count: 1 }]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -345,9 +344,9 @@ describe("Abilities - Parental Bond", () => { it( "Hyper Beam boosted by this ability should strike twice, then recharge", async () => { - game.override.moveset([Moves.HYPER_BEAM]); + game.override.moveset([ Moves.HYPER_BEAM ]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -368,9 +367,9 @@ describe("Abilities - Parental Bond", () => { it( "Anchor Shot boosted by this ability should only trap the target after the second hit", async () => { - game.override.moveset([Moves.ANCHOR_SHOT]); + game.override.moveset([ Moves.ANCHOR_SHOT ]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -395,9 +394,9 @@ describe("Abilities - Parental Bond", () => { it( "Smack Down boosted by this ability should only ground the target after the second hit", async () => { - game.override.moveset([Moves.SMACK_DOWN]); + game.override.moveset([ Moves.SMACK_DOWN ]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -419,9 +418,9 @@ describe("Abilities - Parental Bond", () => { it( "U-turn boosted by this ability should strike twice before forcing a switch", async () => { - game.override.moveset([Moves.U_TURN]); + game.override.moveset([ Moves.U_TURN ]); - await game.classicMode.startBattle([Species.MAGIKARP, Species.BLASTOISE]); + await game.classicMode.startBattle([ Species.MAGIKARP, Species.BLASTOISE ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -439,9 +438,9 @@ describe("Abilities - Parental Bond", () => { it( "Wake-Up Slap boosted by this ability should only wake up the target after the second hit", async () => { - game.override.moveset([Moves.WAKE_UP_SLAP]).enemyStatusEffect(StatusEffect.SLEEP); + game.override.moveset([ Moves.WAKE_UP_SLAP ]).enemyStatusEffect(StatusEffect.SLEEP); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -463,10 +462,10 @@ describe("Abilities - Parental Bond", () => { it( "should not cause user to hit into King's Shield more than once", async () => { - game.override.moveset([Moves.TACKLE]); - game.override.enemyMoveset([Moves.KINGS_SHIELD]); + game.override.moveset([ Moves.TACKLE ]); + game.override.enemyMoveset([ Moves.KINGS_SHIELD ]); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -481,10 +480,10 @@ describe("Abilities - Parental Bond", () => { it( "should not cause user to hit into Storm Drain more than once", async () => { - game.override.moveset([Moves.WATER_GUN]); + game.override.moveset([ Moves.WATER_GUN ]); game.override.enemyAbility(Abilities.STORM_DRAIN); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -500,11 +499,11 @@ describe("Abilities - Parental Bond", () => { "should not apply to multi-target moves with Multi-Lens", async () => { game.override.battleType("double"); - game.override.moveset([Moves.EARTHQUAKE, Moves.SPLASH]); + game.override.moveset([ Moves.EARTHQUAKE, Moves.SPLASH ]); game.override.passiveAbility(Abilities.LEVITATE); game.override.startingHeldItems([{ name: "MULTI_LENS", count: 1 }]); - await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); + await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); const enemyPokemon = game.scene.getEnemyField(); diff --git a/src/test/abilities/pastel_veil.test.ts b/src/test/abilities/pastel_veil.test.ts index 31490aab143..660ff2616e9 100644 --- a/src/test/abilities/pastel_veil.test.ts +++ b/src/test/abilities/pastel_veil.test.ts @@ -27,14 +27,14 @@ describe("Abilities - Pastel Veil", () => { game = new GameManager(phaserGame); game.override .battleType("double") - .moveset([Moves.TOXIC_THREAD, Moves.SPLASH]) + .moveset([ Moves.TOXIC_THREAD, Moves.SPLASH ]) .enemyAbility(Abilities.BALL_FETCH) .enemySpecies(Species.SUNKERN) .enemyMoveset(Moves.SPLASH); }); it("prevents the user and its allies from being afflicted by poison", async () => { - await game.startBattle([Species.MAGIKARP, Species.GALAR_PONYTA]); + await game.startBattle([ Species.MAGIKARP, Species.GALAR_PONYTA ]); const ponyta = game.scene.getPlayerField()[1]; const magikarp = game.scene.getPlayerField()[0]; ponyta.abilityIndex = 1; @@ -50,7 +50,7 @@ describe("Abilities - Pastel Veil", () => { }); it("it heals the poisoned status condition of allies if user is sent out into battle", async () => { - await game.startBattle([Species.MAGIKARP, Species.FEEBAS, Species.GALAR_PONYTA]); + await game.startBattle([ Species.MAGIKARP, Species.FEEBAS, Species.GALAR_PONYTA ]); const ponyta = game.scene.getParty()[2]; const magikarp = game.scene.getPlayerField()[0]; ponyta.abilityIndex = 1; diff --git a/src/test/abilities/power_construct.test.ts b/src/test/abilities/power_construct.test.ts index 94cee82fb4a..662f5d06258 100644 --- a/src/test/abilities/power_construct.test.ts +++ b/src/test/abilities/power_construct.test.ts @@ -8,7 +8,6 @@ import GameManager from "#test/utils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; - describe("Abilities - POWER CONSTRUCT", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -28,8 +27,8 @@ describe("Abilities - POWER CONSTRUCT", () => { const moveToUse = Moves.SPLASH; game.override.battleType("single"); game.override.ability(Abilities.POWER_CONSTRUCT); - game.override.moveset([moveToUse]); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override.moveset([ moveToUse ]); + game.override.enemyMoveset([ Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE ]); }); test( @@ -42,7 +41,7 @@ describe("Abilities - POWER CONSTRUCT", () => { [Species.ZYGARDE]: completeForm, }); - await game.startBattle([Species.MAGIKARP, Species.ZYGARDE]); + await game.startBattle([ Species.MAGIKARP, Species.ZYGARDE ]); const zygarde = game.scene.getParty().find((p) => p.species.speciesId === Species.ZYGARDE); expect(zygarde).not.toBe(undefined); diff --git a/src/test/abilities/power_spot.test.ts b/src/test/abilities/power_spot.test.ts index 6d349a1a3f9..a566c2277c3 100644 --- a/src/test/abilities/power_spot.test.ts +++ b/src/test/abilities/power_spot.test.ts @@ -27,7 +27,7 @@ describe("Abilities - Power Spot", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleType("double"); - game.override.moveset([Moves.TACKLE, Moves.BREAKING_SWIPE, Moves.SPLASH, Moves.DAZZLING_GLEAM]); + game.override.moveset([ Moves.TACKLE, Moves.BREAKING_SWIPE, Moves.SPLASH, Moves.DAZZLING_GLEAM ]); game.override.enemyMoveset(Moves.SPLASH); game.override.enemySpecies(Species.SHUCKLE); game.override.enemyAbility(Abilities.BALL_FETCH); @@ -39,7 +39,7 @@ describe("Abilities - Power Spot", () => { vi.spyOn(moveToCheck, "calculateBattlePower"); - await game.startBattle([Species.REGIELEKI, Species.STONJOURNER]); + await game.startBattle([ Species.REGIELEKI, Species.STONJOURNER ]); game.move.select(Moves.DAZZLING_GLEAM); game.move.select(Moves.SPLASH, 1); await game.phaseInterceptor.to(MoveEffectPhase); @@ -53,7 +53,7 @@ describe("Abilities - Power Spot", () => { vi.spyOn(moveToCheck, "calculateBattlePower"); - await game.startBattle([Species.REGIELEKI, Species.STONJOURNER]); + await game.startBattle([ Species.REGIELEKI, Species.STONJOURNER ]); game.move.select(Moves.BREAKING_SWIPE); game.move.select(Moves.SPLASH, 1); await game.phaseInterceptor.to(MoveEffectPhase); @@ -67,7 +67,7 @@ describe("Abilities - Power Spot", () => { vi.spyOn(moveToCheck, "calculateBattlePower"); - await game.startBattle([Species.STONJOURNER, Species.REGIELEKI]); + await game.startBattle([ Species.STONJOURNER, Species.REGIELEKI ]); game.move.select(Moves.BREAKING_SWIPE); game.move.select(Moves.SPLASH, 1); await game.phaseInterceptor.to(TurnEndPhase); diff --git a/src/test/abilities/protean.test.ts b/src/test/abilities/protean.test.ts index 8479a293722..5f86ec4c6e6 100644 --- a/src/test/abilities/protean.test.ts +++ b/src/test/abilities/protean.test.ts @@ -13,7 +13,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; - describe("Abilities - Protean", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -34,15 +33,15 @@ describe("Abilities - Protean", () => { game.override.ability(Abilities.PROTEAN); game.override.startingLevel(100); game.override.enemySpecies(Species.RATTATA); - game.override.enemyMoveset([Moves.ENDURE, Moves.ENDURE, Moves.ENDURE, Moves.ENDURE]); + game.override.enemyMoveset([ Moves.ENDURE, Moves.ENDURE, Moves.ENDURE, Moves.ENDURE ]); }); test( "ability applies and changes a pokemon's type", async () => { - game.override.moveset([Moves.SPLASH]); + game.override.moveset([ Moves.SPLASH ]); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -57,9 +56,9 @@ describe("Abilities - Protean", () => { test.skip( "ability applies only once per switch in", async () => { - game.override.moveset([Moves.SPLASH, Moves.AGILITY]); + game.override.moveset([ Moves.SPLASH, Moves.AGILITY ]); - await game.startBattle([Species.MAGIKARP, Species.BULBASAUR]); + await game.startBattle([ Species.MAGIKARP, Species.BULBASAUR ]); let leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -96,9 +95,9 @@ describe("Abilities - Protean", () => { test( "ability applies correctly even if the pokemon's move has a variable type", async () => { - game.override.moveset([Moves.WEATHER_BALL]); + game.override.moveset([ Moves.WEATHER_BALL ]); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -118,10 +117,10 @@ describe("Abilities - Protean", () => { test( "ability applies correctly even if the type has changed by another ability", async () => { - game.override.moveset([Moves.TACKLE]); + game.override.moveset([ Moves.TACKLE ]); game.override.passiveAbility(Abilities.REFRIGERATE); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -140,9 +139,9 @@ describe("Abilities - Protean", () => { test( "ability applies correctly even if the pokemon's move calls another move", async () => { - game.override.moveset([Moves.NATURE_POWER]); + game.override.moveset([ Moves.NATURE_POWER ]); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -158,9 +157,9 @@ describe("Abilities - Protean", () => { test( "ability applies correctly even if the pokemon's move is delayed / charging", async () => { - game.override.moveset([Moves.DIG]); + game.override.moveset([ Moves.DIG ]); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -175,10 +174,10 @@ describe("Abilities - Protean", () => { test( "ability applies correctly even if the pokemon's move misses", async () => { - game.override.moveset([Moves.TACKLE]); + game.override.moveset([ Moves.TACKLE ]); game.override.enemyMoveset(Moves.SPLASH); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -196,10 +195,10 @@ describe("Abilities - Protean", () => { test( "ability applies correctly even if the pokemon's move is protected against", async () => { - game.override.moveset([Moves.TACKLE]); - game.override.enemyMoveset([Moves.PROTECT, Moves.PROTECT, Moves.PROTECT, Moves.PROTECT]); + game.override.moveset([ Moves.TACKLE ]); + game.override.enemyMoveset([ Moves.PROTECT, Moves.PROTECT, Moves.PROTECT, Moves.PROTECT ]); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -214,10 +213,10 @@ describe("Abilities - Protean", () => { test( "ability applies correctly even if the pokemon's move fails because of type immunity", async () => { - game.override.moveset([Moves.TACKLE]); + game.override.moveset([ Moves.TACKLE ]); game.override.enemySpecies(Species.GASTLY); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -232,14 +231,14 @@ describe("Abilities - Protean", () => { test( "ability is not applied if pokemon's type is the same as the move's type", async () => { - game.override.moveset([Moves.SPLASH]); + game.override.moveset([ Moves.SPLASH ]); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); - leadPokemon.summonData.types = [allMoves[Moves.SPLASH].type]; + leadPokemon.summonData.types = [ allMoves[Moves.SPLASH].type ]; game.move.select(Moves.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); @@ -250,9 +249,9 @@ describe("Abilities - Protean", () => { test( "ability is not applied if pokemon is terastallized", async () => { - game.override.moveset([Moves.SPLASH]); + game.override.moveset([ Moves.SPLASH ]); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -269,9 +268,9 @@ describe("Abilities - Protean", () => { test( "ability is not applied if pokemon uses struggle", async () => { - game.override.moveset([Moves.STRUGGLE]); + game.override.moveset([ Moves.STRUGGLE ]); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -286,9 +285,9 @@ describe("Abilities - Protean", () => { test( "ability is not applied if the pokemon's move fails", async () => { - game.override.moveset([Moves.BURN_UP]); + game.override.moveset([ Moves.BURN_UP ]); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -303,10 +302,10 @@ describe("Abilities - Protean", () => { test( "ability applies correctly even if the pokemon's Trick-or-Treat fails", async () => { - game.override.moveset([Moves.TRICK_OR_TREAT]); + game.override.moveset([ Moves.TRICK_OR_TREAT ]); game.override.enemySpecies(Species.GASTLY); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); @@ -321,9 +320,9 @@ describe("Abilities - Protean", () => { test( "ability applies correctly and the pokemon curses itself", async () => { - game.override.moveset([Moves.CURSE]); + game.override.moveset([ Moves.CURSE ]); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; expect(leadPokemon).not.toBe(undefined); diff --git a/src/test/abilities/quick_draw.test.ts b/src/test/abilities/quick_draw.test.ts index dbed6c822c4..4979152f4d6 100644 --- a/src/test/abilities/quick_draw.test.ts +++ b/src/test/abilities/quick_draw.test.ts @@ -27,12 +27,12 @@ describe("Abilities - Quick Draw", () => { game.override.starterSpecies(Species.MAGIKARP); game.override.ability(Abilities.QUICK_DRAW); - game.override.moveset([Moves.TACKLE, Moves.TAIL_WHIP]); + game.override.moveset([ Moves.TACKLE, Moves.TAIL_WHIP ]); game.override.enemyLevel(100); game.override.enemySpecies(Species.MAGIKARP); game.override.enemyAbility(Abilities.BALL_FETCH); - game.override.enemyMoveset([Moves.TACKLE]); + game.override.enemyMoveset([ Moves.TACKLE ]); vi.spyOn(allAbilities[Abilities.QUICK_DRAW].getAttrs(BypassSpeedChanceAbAttr)[0], "chance", "get").mockReturnValue(100); }); @@ -75,7 +75,7 @@ describe("Abilities - Quick Draw", () => { ); test("does not increase priority", async () => { - game.override.enemyMoveset([Moves.EXTREME_SPEED]); + game.override.enemyMoveset([ Moves.EXTREME_SPEED ]); await game.startBattle(); diff --git a/src/test/abilities/sand_spit.test.ts b/src/test/abilities/sand_spit.test.ts index add13ede296..1c21cff3c14 100644 --- a/src/test/abilities/sand_spit.test.ts +++ b/src/test/abilities/sand_spit.test.ts @@ -31,11 +31,11 @@ describe("Abilities - Sand Spit", () => { game.override.starterSpecies(Species.SILICOBRA); game.override.ability(Abilities.SAND_SPIT); - game.override.moveset([Moves.SPLASH, Moves.COIL]); + game.override.moveset([ Moves.SPLASH, Moves.COIL ]); }); it("should trigger when hit with damaging move", async () => { - game.override.enemyMoveset([Moves.TACKLE]); + game.override.enemyMoveset([ Moves.TACKLE ]); await game.startBattle(); game.move.select(Moves.SPLASH); @@ -45,7 +45,7 @@ describe("Abilities - Sand Spit", () => { }, 20000); it("should not trigger when targetted with status moves", async () => { - game.override.enemyMoveset([Moves.GROWL]); + game.override.enemyMoveset([ Moves.GROWL ]); await game.startBattle(); game.move.select(Moves.COIL); diff --git a/src/test/abilities/sand_veil.test.ts b/src/test/abilities/sand_veil.test.ts index 201d8d89600..c62357f17af 100644 --- a/src/test/abilities/sand_veil.test.ts +++ b/src/test/abilities/sand_veil.test.ts @@ -12,7 +12,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; - describe("Abilities - Sand Veil", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -29,10 +28,10 @@ describe("Abilities - Sand Veil", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.moveset([Moves.SPLASH]); + game.override.moveset([ Moves.SPLASH ]); game.override.enemySpecies(Species.MEOWSCARADA); game.override.enemyAbility(Abilities.INSOMNIA); - game.override.enemyMoveset([Moves.TWISTER, Moves.TWISTER, Moves.TWISTER, Moves.TWISTER]); + game.override.enemyMoveset([ Moves.TWISTER, Moves.TWISTER, Moves.TWISTER, Moves.TWISTER ]); game.override.startingLevel(100); game.override.enemyLevel(100); game.override @@ -43,7 +42,7 @@ describe("Abilities - Sand Veil", () => { test( "ability should increase the evasiveness of the source", async () => { - await game.startBattle([Species.SNORLAX, Species.BLISSEY]); + await game.startBattle([ Species.SNORLAX, Species.BLISSEY ]); const leadPokemon = game.scene.getPlayerField(); diff --git a/src/test/abilities/sap_sipper.test.ts b/src/test/abilities/sap_sipper.test.ts index b73bc3d9e27..a4ce0c1b8f6 100644 --- a/src/test/abilities/sap_sipper.test.ts +++ b/src/test/abilities/sap_sipper.test.ts @@ -148,8 +148,8 @@ describe("Abilities - Sap Sipper", () => { const moveToUse = Moves.METRONOME; const enemyAbility = Abilities.SAP_SIPPER; - game.override.moveset([moveToUse]); - game.override.enemyMoveset([Moves.SPLASH, Moves.NONE, Moves.NONE, Moves.NONE]); + game.override.moveset([ moveToUse ]); + game.override.enemyMoveset([ Moves.SPLASH, Moves.NONE, Moves.NONE, Moves.NONE ]); game.override.enemySpecies(Species.RATTATA); game.override.enemyAbility(enemyAbility); diff --git a/src/test/abilities/schooling.test.ts b/src/test/abilities/schooling.test.ts index 4c5a66a41b7..aacc7bbd4c2 100644 --- a/src/test/abilities/schooling.test.ts +++ b/src/test/abilities/schooling.test.ts @@ -8,7 +8,6 @@ import GameManager from "#test/utils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; - describe("Abilities - SCHOOLING", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -28,8 +27,8 @@ describe("Abilities - SCHOOLING", () => { const moveToUse = Moves.SPLASH; game.override.battleType("single"); game.override.ability(Abilities.SCHOOLING); - game.override.moveset([moveToUse]); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override.moveset([ moveToUse ]); + game.override.enemyMoveset([ Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE ]); }); test( @@ -42,7 +41,7 @@ describe("Abilities - SCHOOLING", () => { [Species.WISHIWASHI]: schoolForm, }); - await game.startBattle([Species.MAGIKARP, Species.WISHIWASHI]); + await game.startBattle([ Species.MAGIKARP, Species.WISHIWASHI ]); const wishiwashi = game.scene.getParty().find((p) => p.species.speciesId === Species.WISHIWASHI)!; expect(wishiwashi).not.toBe(undefined); diff --git a/src/test/abilities/screen_cleaner.test.ts b/src/test/abilities/screen_cleaner.test.ts index 3c0d12a06ea..c036aa90a77 100644 --- a/src/test/abilities/screen_cleaner.test.ts +++ b/src/test/abilities/screen_cleaner.test.ts @@ -30,10 +30,10 @@ describe("Abilities - Screen Cleaner", () => { }); it("removes Aurora Veil", async () => { - game.override.moveset([Moves.HAIL]); - game.override.enemyMoveset([Moves.AURORA_VEIL, Moves.AURORA_VEIL, Moves.AURORA_VEIL, Moves.AURORA_VEIL]); + game.override.moveset([ Moves.HAIL ]); + game.override.enemyMoveset([ Moves.AURORA_VEIL, Moves.AURORA_VEIL, Moves.AURORA_VEIL, Moves.AURORA_VEIL ]); - await game.startBattle([Species.MAGIKARP, Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP, Species.MAGIKARP ]); game.move.select(Moves.HAIL); await game.phaseInterceptor.to(TurnEndPhase); @@ -48,9 +48,9 @@ describe("Abilities - Screen Cleaner", () => { }); it("removes Light Screen", async () => { - game.override.enemyMoveset([Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN]); + game.override.enemyMoveset([ Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN ]); - await game.startBattle([Species.MAGIKARP, Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP, Species.MAGIKARP ]); game.move.select(Moves.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); @@ -65,9 +65,9 @@ describe("Abilities - Screen Cleaner", () => { }); it("removes Reflect", async () => { - game.override.enemyMoveset([Moves.REFLECT, Moves.REFLECT, Moves.REFLECT, Moves.REFLECT]); + game.override.enemyMoveset([ Moves.REFLECT, Moves.REFLECT, Moves.REFLECT, Moves.REFLECT ]); - await game.startBattle([Species.MAGIKARP, Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP, Species.MAGIKARP ]); game.move.select(Moves.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); diff --git a/src/test/abilities/serene_grace.test.ts b/src/test/abilities/serene_grace.test.ts index e06288b9de9..3155594c81d 100644 --- a/src/test/abilities/serene_grace.test.ts +++ b/src/test/abilities/serene_grace.test.ts @@ -27,12 +27,12 @@ describe("Abilities - Serene Grace", () => { beforeEach(() => { game = new GameManager(phaserGame); - const movesToUse = [Moves.AIR_SLASH, Moves.TACKLE]; + const movesToUse = [ Moves.AIR_SLASH, Moves.TACKLE ]; game.override.battleType("single"); game.override.enemySpecies(Species.ONIX); game.override.startingLevel(100); game.override.moveset(movesToUse); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override.enemyMoveset([ Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE ]); }); it("Move chance without Serene Grace", async () => { @@ -47,7 +47,7 @@ describe("Abilities - Serene Grace", () => { game.move.select(moveToUse); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to(MoveEffectPhase, false); // Check chance of Air Slash without Serene Grace @@ -74,7 +74,7 @@ describe("Abilities - Serene Grace", () => { game.move.select(moveToUse); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to(MoveEffectPhase, false); // Check chance of Air Slash with Serene Grace diff --git a/src/test/abilities/sheer_force.test.ts b/src/test/abilities/sheer_force.test.ts index 69b47e1eaae..a3add0a9964 100644 --- a/src/test/abilities/sheer_force.test.ts +++ b/src/test/abilities/sheer_force.test.ts @@ -27,12 +27,12 @@ describe("Abilities - Sheer Force", () => { beforeEach(() => { game = new GameManager(phaserGame); - const movesToUse = [Moves.AIR_SLASH, Moves.BIND, Moves.CRUSH_CLAW, Moves.TACKLE]; + const movesToUse = [ Moves.AIR_SLASH, Moves.BIND, Moves.CRUSH_CLAW, Moves.TACKLE ]; game.override.battleType("single"); game.override.enemySpecies(Species.ONIX); game.override.startingLevel(100); game.override.moveset(movesToUse); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override.enemyMoveset([ Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE ]); }); it("Sheer Force", async () => { @@ -48,7 +48,7 @@ describe("Abilities - Sheer Force", () => { game.move.select(moveToUse); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to(MoveEffectPhase, false); const phase = game.scene.getCurrentPhase() as MoveEffectPhase; @@ -81,7 +81,7 @@ describe("Abilities - Sheer Force", () => { game.move.select(moveToUse); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to(MoveEffectPhase, false); const phase = game.scene.getCurrentPhase() as MoveEffectPhase; @@ -114,7 +114,7 @@ describe("Abilities - Sheer Force", () => { game.move.select(moveToUse); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to(MoveEffectPhase, false); const phase = game.scene.getCurrentPhase() as MoveEffectPhase; @@ -149,7 +149,7 @@ describe("Abilities - Sheer Force", () => { game.move.select(moveToUse); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to(MoveEffectPhase, false); const phase = game.scene.getCurrentPhase() as MoveEffectPhase; diff --git a/src/test/abilities/shield_dust.test.ts b/src/test/abilities/shield_dust.test.ts index 8a0b769827d..0f831fcf3fa 100644 --- a/src/test/abilities/shield_dust.test.ts +++ b/src/test/abilities/shield_dust.test.ts @@ -27,13 +27,13 @@ describe("Abilities - Shield Dust", () => { beforeEach(() => { game = new GameManager(phaserGame); - const movesToUse = [Moves.AIR_SLASH]; + const movesToUse = [ Moves.AIR_SLASH ]; game.override.battleType("single"); game.override.enemySpecies(Species.ONIX); game.override.enemyAbility(Abilities.SHIELD_DUST); game.override.startingLevel(100); game.override.moveset(movesToUse); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override.enemyMoveset([ Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE ]); }); it("Shield Dust", async () => { @@ -48,7 +48,7 @@ describe("Abilities - Shield Dust", () => { game.move.select(moveToUse); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to(MoveEffectPhase, false); // Shield Dust negates secondary effect diff --git a/src/test/abilities/shields_down.test.ts b/src/test/abilities/shields_down.test.ts index 411c23fc652..d3d72ac80a5 100644 --- a/src/test/abilities/shields_down.test.ts +++ b/src/test/abilities/shields_down.test.ts @@ -8,7 +8,6 @@ import GameManager from "#test/utils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; - describe("Abilities - SHIELDS DOWN", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -28,8 +27,8 @@ describe("Abilities - SHIELDS DOWN", () => { const moveToUse = Moves.SPLASH; game.override.battleType("single"); game.override.ability(Abilities.SHIELDS_DOWN); - game.override.moveset([moveToUse]); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override.moveset([ moveToUse ]); + game.override.enemyMoveset([ Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE ]); }); test( @@ -42,7 +41,7 @@ describe("Abilities - SHIELDS DOWN", () => { [Species.MINIOR]: coreForm, }); - await game.startBattle([Species.MAGIKARP, Species.MINIOR]); + await game.startBattle([ Species.MAGIKARP, Species.MINIOR ]); const minior = game.scene.getParty().find((p) => p.species.speciesId === Species.MINIOR)!; expect(minior).not.toBe(undefined); diff --git a/src/test/abilities/stall.test.ts b/src/test/abilities/stall.test.ts index 7baf7c846f0..b51c56dbe1f 100644 --- a/src/test/abilities/stall.test.ts +++ b/src/test/abilities/stall.test.ts @@ -26,8 +26,8 @@ describe("Abilities - Stall", () => { game.override.disableCrits(); game.override.enemySpecies(Species.REGIELEKI); game.override.enemyAbility(Abilities.STALL); - game.override.enemyMoveset([Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK]); - game.override.moveset([Moves.QUICK_ATTACK, Moves.TACKLE]); + game.override.enemyMoveset([ Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK ]); + game.override.moveset([ Moves.QUICK_ATTACK, Moves.TACKLE ]); }); /** @@ -37,7 +37,7 @@ describe("Abilities - Stall", () => { **/ it("Pokemon with Stall should move last in its priority bracket regardless of speed", async () => { - await game.startBattle([Species.SHUCKLE]); + await game.startBattle([ Species.SHUCKLE ]); const playerIndex = game.scene.getPlayerPokemon()!.getBattlerIndex(); const enemyIndex = game.scene.getEnemyPokemon()!.getBattlerIndex(); @@ -50,12 +50,12 @@ describe("Abilities - Stall", () => { const commandOrder = phase.getCommandOrder(); // The player Pokemon (without Stall) goes first despite having lower speed than the opponent. // The opponent Pokemon (with Stall) goes last despite having higher speed than the player Pokemon. - expect(speedOrder).toEqual([enemyIndex, playerIndex]); - expect(commandOrder).toEqual([playerIndex, enemyIndex]); + expect(speedOrder).toEqual([ enemyIndex, playerIndex ]); + expect(commandOrder).toEqual([ playerIndex, enemyIndex ]); }, 20000); it("Pokemon with Stall will go first if a move that is in a higher priority bracket than the opponent's move is used", async () => { - await game.startBattle([Species.SHUCKLE]); + await game.startBattle([ Species.SHUCKLE ]); const playerIndex = game.scene.getPlayerPokemon()!.getBattlerIndex(); const enemyIndex = game.scene.getEnemyPokemon()!.getBattlerIndex(); @@ -68,13 +68,13 @@ describe("Abilities - Stall", () => { const commandOrder = phase.getCommandOrder(); // The opponent Pokemon (with Stall) goes first because its move is still within a higher priority bracket than its opponent. // The player Pokemon goes second because its move is in a lower priority bracket. - expect(speedOrder).toEqual([enemyIndex, playerIndex]); - expect(commandOrder).toEqual([enemyIndex, playerIndex]); + expect(speedOrder).toEqual([ enemyIndex, playerIndex ]); + expect(commandOrder).toEqual([ enemyIndex, playerIndex ]); }, 20000); it("If both Pokemon have stall and use the same move, speed is used to determine who goes first.", async () => { game.override.ability(Abilities.STALL); - await game.startBattle([Species.SHUCKLE]); + await game.startBattle([ Species.SHUCKLE ]); const playerIndex = game.scene.getPlayerPokemon()!.getBattlerIndex(); const enemyIndex = game.scene.getEnemyPokemon()!.getBattlerIndex(); @@ -88,7 +88,7 @@ describe("Abilities - Stall", () => { // The opponent Pokemon (with Stall) goes first because it has a higher speed. // The player Pokemon (with Stall) goes second because its speed is lower. - expect(speedOrder).toEqual([enemyIndex, playerIndex]); - expect(commandOrder).toEqual([enemyIndex, playerIndex]); + expect(speedOrder).toEqual([ enemyIndex, playerIndex ]); + expect(commandOrder).toEqual([ enemyIndex, playerIndex ]); }, 20000); }); diff --git a/src/test/abilities/steely_spirit.test.ts b/src/test/abilities/steely_spirit.test.ts index 7b5879555be..61e76989060 100644 --- a/src/test/abilities/steely_spirit.test.ts +++ b/src/test/abilities/steely_spirit.test.ts @@ -29,13 +29,13 @@ describe("Abilities - Steely Spirit", () => { game.override.battleType("double"); game.override.enemySpecies(Species.SHUCKLE); game.override.enemyAbility(Abilities.BALL_FETCH); - game.override.moveset([Moves.IRON_HEAD, Moves.SPLASH]); + game.override.moveset([ Moves.IRON_HEAD, Moves.SPLASH ]); game.override.enemyMoveset(Moves.SPLASH); vi.spyOn(allMoves[moveToCheck], "calculateBattlePower"); }); it("increases Steel-type moves' power used by the user and its allies by 50%", async () => { - await game.classicMode.startBattle([Species.PIKACHU, Species.SHUCKLE]); + await game.classicMode.startBattle([ Species.PIKACHU, Species.SHUCKLE ]); const boostSource = game.scene.getPlayerField()[1]; const enemyToCheck = game.scene.getEnemyPokemon()!; @@ -51,7 +51,7 @@ describe("Abilities - Steely Spirit", () => { }); it("stacks if multiple users with this ability are on the field.", async () => { - await game.classicMode.startBattle([Species.PIKACHU, Species.PIKACHU]); + await game.classicMode.startBattle([ Species.PIKACHU, Species.PIKACHU ]); const enemyToCheck = game.scene.getEnemyPokemon()!; game.scene.getPlayerField().forEach(p => { @@ -68,7 +68,7 @@ describe("Abilities - Steely Spirit", () => { }); it("does not take effect when suppressed", async () => { - await game.classicMode.startBattle([Species.PIKACHU, Species.SHUCKLE]); + await game.classicMode.startBattle([ Species.PIKACHU, Species.SHUCKLE ]); const boostSource = game.scene.getPlayerField()[1]; const enemyToCheck = game.scene.getEnemyPokemon()!; @@ -90,12 +90,12 @@ describe("Abilities - Steely Spirit", () => { it("affects variable-type moves if their resolved type is Steel", async () => { game.override .ability(Abilities.STEELY_SPIRIT) - .moveset([Moves.REVELATION_DANCE]); + .moveset([ Moves.REVELATION_DANCE ]); const revelationDance = allMoves[Moves.REVELATION_DANCE]; vi.spyOn(revelationDance, "calculateBattlePower"); - await game.classicMode.startBattle([Species.KLINKLANG]); + await game.classicMode.startBattle([ Species.KLINKLANG ]); game.move.select(Moves.REVELATION_DANCE); diff --git a/src/test/abilities/sturdy.test.ts b/src/test/abilities/sturdy.test.ts index c329d0830d3..49384e69f83 100644 --- a/src/test/abilities/sturdy.test.ts +++ b/src/test/abilities/sturdy.test.ts @@ -9,7 +9,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; - describe("Abilities - Sturdy", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -30,7 +29,7 @@ describe("Abilities - Sturdy", () => { game.override.starterSpecies(Species.LUCARIO); game.override.startingLevel(100); - game.override.moveset([Moves.CLOSE_COMBAT, Moves.FISSURE]); + game.override.moveset([ Moves.CLOSE_COMBAT, Moves.FISSURE ]); game.override.enemySpecies(Species.ARON); game.override.enemyLevel(5); diff --git a/src/test/abilities/sweet_veil.test.ts b/src/test/abilities/sweet_veil.test.ts index c2946443245..ef66cb1c68a 100644 --- a/src/test/abilities/sweet_veil.test.ts +++ b/src/test/abilities/sweet_veil.test.ts @@ -26,14 +26,14 @@ describe("Abilities - Sweet Veil", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleType("double"); - game.override.moveset([Moves.SPLASH, Moves.REST, Moves.YAWN]); + game.override.moveset([ Moves.SPLASH, Moves.REST, Moves.YAWN ]); game.override.enemySpecies(Species.MAGIKARP); game.override.enemyAbility(Abilities.BALL_FETCH); - game.override.enemyMoveset([Moves.POWDER, Moves.POWDER, Moves.POWDER, Moves.POWDER]); + game.override.enemyMoveset([ Moves.POWDER, Moves.POWDER, Moves.POWDER, Moves.POWDER ]); }); it("prevents the user and its allies from falling asleep", async () => { - await game.startBattle([Species.SWIRLIX, Species.MAGIKARP]); + await game.startBattle([ Species.SWIRLIX, Species.MAGIKARP ]); game.move.select(Moves.SPLASH); game.move.select(Moves.SPLASH, 1); @@ -45,7 +45,7 @@ describe("Abilities - Sweet Veil", () => { it("causes Rest to fail when used by the user or its allies", async () => { game.override.enemyMoveset(Moves.SPLASH); - await game.startBattle([Species.SWIRLIX, Species.MAGIKARP]); + await game.startBattle([ Species.SWIRLIX, Species.MAGIKARP ]); game.move.select(Moves.SPLASH); game.move.select(Moves.REST, 1); @@ -56,8 +56,8 @@ describe("Abilities - Sweet Veil", () => { }); it("causes Yawn to fail if used on the user or its allies", async () => { - game.override.enemyMoveset([Moves.YAWN, Moves.YAWN, Moves.YAWN, Moves.YAWN]); - await game.startBattle([Species.SWIRLIX, Species.MAGIKARP]); + game.override.enemyMoveset([ Moves.YAWN, Moves.YAWN, Moves.YAWN, Moves.YAWN ]); + await game.startBattle([ Species.SWIRLIX, Species.MAGIKARP ]); game.move.select(Moves.SPLASH); game.move.select(Moves.SPLASH, 1); @@ -73,7 +73,7 @@ describe("Abilities - Sweet Veil", () => { game.override.startingLevel(5); game.override.enemyMoveset(Moves.SPLASH); - await game.startBattle([Species.SHUCKLE, Species.SHUCKLE, Species.SWIRLIX]); + await game.startBattle([ Species.SHUCKLE, Species.SHUCKLE, Species.SWIRLIX ]); game.move.select(Moves.SPLASH); game.move.select(Moves.YAWN, 1, BattlerIndex.PLAYER); diff --git a/src/test/abilities/synchronize.test.ts b/src/test/abilities/synchronize.test.ts index 6e0aa46763f..cdd2834f588 100644 --- a/src/test/abilities/synchronize.test.ts +++ b/src/test/abilities/synchronize.test.ts @@ -28,12 +28,12 @@ describe("Abilities - Synchronize", () => { .startingLevel(100) .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.SYNCHRONIZE) - .moveset([Moves.SPLASH, Moves.THUNDER_WAVE, Moves.SPORE, Moves.PSYCHO_SHIFT]) + .moveset([ Moves.SPLASH, Moves.THUNDER_WAVE, Moves.SPORE, Moves.PSYCHO_SHIFT ]) .ability(Abilities.NO_GUARD); }, 20000); it("does not trigger when no status is applied by opponent Pokemon", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([ Species.FEEBAS ]); game.move.select(Moves.SPLASH); await game.phaseInterceptor.to("BerryPhase"); @@ -43,7 +43,7 @@ describe("Abilities - Synchronize", () => { }, 20000); it("sets the status of the source pokemon to Paralysis when paralyzed by it", async () => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([ Species.FEEBAS ]); game.move.select(Moves.THUNDER_WAVE); await game.phaseInterceptor.to("BerryPhase"); @@ -71,7 +71,7 @@ describe("Abilities - Synchronize", () => { .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Array(4).fill(Moves.TOXIC_SPIKES)); - await game.classicMode.startBattle([Species.FEEBAS, Species.MILOTIC]); + await game.classicMode.startBattle([ Species.FEEBAS, Species.MILOTIC ]); game.move.select(Moves.SPLASH); await game.toNextTurn(); @@ -85,7 +85,7 @@ describe("Abilities - Synchronize", () => { }, 20000); it("shows ability even if it fails to set the status of the opponent Pokemon", async () => { - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([ Species.PIKACHU ]); game.move.select(Moves.THUNDER_WAVE); await game.phaseInterceptor.to("BerryPhase"); diff --git a/src/test/abilities/tera_shell.test.ts b/src/test/abilities/tera_shell.test.ts index 9995f7c34c3..01382d0fd9a 100644 --- a/src/test/abilities/tera_shell.test.ts +++ b/src/test/abilities/tera_shell.test.ts @@ -26,10 +26,10 @@ describe("Abilities - Tera Shell", () => { game.override .battleType("single") .ability(Abilities.TERA_SHELL) - .moveset([Moves.SPLASH]) + .moveset([ Moves.SPLASH ]) .enemySpecies(Species.SNORLAX) .enemyAbility(Abilities.INSOMNIA) - .enemyMoveset([Moves.MACH_PUNCH]) + .enemyMoveset([ Moves.MACH_PUNCH ]) .startingLevel(100) .enemyLevel(100); }); @@ -37,7 +37,7 @@ describe("Abilities - Tera Shell", () => { it( "should change the effectiveness of non-resisted attacks when the source is at full HP", async () => { - await game.classicMode.startBattle([Species.SNORLAX]); + await game.classicMode.startBattle([ Species.SNORLAX ]); const playerPokemon = game.scene.getPlayerPokemon()!; vi.spyOn(playerPokemon, "getMoveEffectiveness"); @@ -59,9 +59,9 @@ describe("Abilities - Tera Shell", () => { it( "should not override type immunities", async () => { - game.override.enemyMoveset([Moves.SHADOW_SNEAK]); + game.override.enemyMoveset([ Moves.SHADOW_SNEAK ]); - await game.classicMode.startBattle([Species.SNORLAX]); + await game.classicMode.startBattle([ Species.SNORLAX ]); const playerPokemon = game.scene.getPlayerPokemon()!; vi.spyOn(playerPokemon, "getMoveEffectiveness"); @@ -76,9 +76,9 @@ describe("Abilities - Tera Shell", () => { it( "should not override type multipliers less than 0.5x", async () => { - game.override.enemyMoveset([Moves.QUICK_ATTACK]); + game.override.enemyMoveset([ Moves.QUICK_ATTACK ]); - await game.classicMode.startBattle([Species.AGGRON]); + await game.classicMode.startBattle([ Species.AGGRON ]); const playerPokemon = game.scene.getPlayerPokemon()!; vi.spyOn(playerPokemon, "getMoveEffectiveness"); @@ -93,9 +93,9 @@ describe("Abilities - Tera Shell", () => { it( "should not affect the effectiveness of fixed-damage moves", async () => { - game.override.enemyMoveset([Moves.DRAGON_RAGE]); + game.override.enemyMoveset([ Moves.DRAGON_RAGE ]); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([ Species.CHARIZARD ]); const playerPokemon = game.scene.getPlayerPokemon()!; vi.spyOn(playerPokemon, "apply"); @@ -111,16 +111,16 @@ describe("Abilities - Tera Shell", () => { it( "should change the effectiveness of all strikes of a multi-strike move", async () => { - game.override.enemyMoveset([Moves.DOUBLE_HIT]); + game.override.enemyMoveset([ Moves.DOUBLE_HIT ]); - await game.classicMode.startBattle([Species.SNORLAX]); + await game.classicMode.startBattle([ Species.SNORLAX ]); const playerPokemon = game.scene.getPlayerPokemon()!; vi.spyOn(playerPokemon, "apply"); game.move.select(Moves.SPLASH); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.move.forceHit(); for (let i = 0; i < 2; i++) { await game.phaseInterceptor.to("MoveEffectPhase"); diff --git a/src/test/abilities/unseen_fist.test.ts b/src/test/abilities/unseen_fist.test.ts index 0f285abd98f..f8fa8a723fe 100644 --- a/src/test/abilities/unseen_fist.test.ts +++ b/src/test/abilities/unseen_fist.test.ts @@ -9,7 +9,6 @@ import { BattlerTagType } from "#app/enums/battler-tag-type"; import { BerryPhase } from "#app/phases/berry-phase"; - describe("Abilities - Unseen Fist", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -29,7 +28,7 @@ describe("Abilities - Unseen Fist", () => { game.override.battleType("single"); game.override.starterSpecies(Species.URSHIFU); game.override.enemySpecies(Species.SNORLAX); - game.override.enemyMoveset([Moves.PROTECT, Moves.PROTECT, Moves.PROTECT, Moves.PROTECT]); + game.override.enemyMoveset([ Moves.PROTECT, Moves.PROTECT, Moves.PROTECT, Moves.PROTECT ]); game.override.startingLevel(100); game.override.enemyLevel(100); }); @@ -66,7 +65,7 @@ describe("Abilities - Unseen Fist", () => { "should cause a contact move to ignore Protect, but not Substitute", async () => { game.override.enemyLevel(1); - game.override.moveset([Moves.TACKLE]); + game.override.moveset([ Moves.TACKLE ]); await game.startBattle(); @@ -84,8 +83,8 @@ describe("Abilities - Unseen Fist", () => { }); async function testUnseenFistHitResult(game: GameManager, attackMove: Moves, protectMove: Moves, shouldSucceed: boolean = true): Promise { - game.override.moveset([attackMove]); - game.override.enemyMoveset([protectMove, protectMove, protectMove, protectMove]); + game.override.moveset([ attackMove ]); + game.override.enemyMoveset([ protectMove, protectMove, protectMove, protectMove ]); await game.startBattle(); diff --git a/src/test/abilities/volt_absorb.test.ts b/src/test/abilities/volt_absorb.test.ts index 9bd5de7df57..07907a34566 100644 --- a/src/test/abilities/volt_absorb.test.ts +++ b/src/test/abilities/volt_absorb.test.ts @@ -34,9 +34,9 @@ describe("Abilities - Volt Absorb", () => { const moveToUse = Moves.CHARGE; const ability = Abilities.VOLT_ABSORB; - game.override.moveset([moveToUse]); + game.override.moveset([ moveToUse ]); game.override.ability(ability); - game.override.enemyMoveset([Moves.SPLASH, Moves.NONE, Moves.NONE, Moves.NONE]); + game.override.enemyMoveset([ Moves.SPLASH, Moves.NONE, Moves.NONE, Moves.NONE ]); game.override.enemySpecies(Species.DUSKULL); game.override.enemyAbility(Abilities.BALL_FETCH); @@ -64,7 +64,7 @@ describe("Abilities - Volt Absorb", () => { game.move.select(Moves.THUNDERBOLT); enemyPokemon.hp = enemyPokemon.hp - 1; - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.phaseInterceptor.to("MoveEffectPhase"); await game.move.forceMiss(); diff --git a/src/test/abilities/wind_power.test.ts b/src/test/abilities/wind_power.test.ts index 12b8d2f2299..538b65f898b 100644 --- a/src/test/abilities/wind_power.test.ts +++ b/src/test/abilities/wind_power.test.ts @@ -26,12 +26,12 @@ describe("Abilities - Wind Power", () => { game.override.battleType("single"); game.override.enemySpecies(Species.SHIFTRY); game.override.enemyAbility(Abilities.WIND_POWER); - game.override.moveset([Moves.TAILWIND, Moves.SPLASH, Moves.PETAL_BLIZZARD, Moves.SANDSTORM]); + game.override.moveset([ Moves.TAILWIND, Moves.SPLASH, Moves.PETAL_BLIZZARD, Moves.SANDSTORM ]); game.override.enemyMoveset(Moves.SPLASH); }); it("it becomes charged when hit by wind moves", async () => { - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const shiftry = game.scene.getEnemyPokemon()!; expect(shiftry.getTag(BattlerTagType.CHARGED)).toBeUndefined(); @@ -46,7 +46,7 @@ describe("Abilities - Wind Power", () => { game.override.ability(Abilities.WIND_POWER); game.override.enemySpecies(Species.MAGIKARP); - await game.startBattle([Species.SHIFTRY]); + await game.startBattle([ Species.SHIFTRY ]); const shiftry = game.scene.getPlayerPokemon()!; expect(shiftry.getTag(BattlerTagType.CHARGED)).toBeUndefined(); @@ -61,7 +61,7 @@ describe("Abilities - Wind Power", () => { game.override.enemySpecies(Species.MAGIKARP); game.override.ability(Abilities.WIND_POWER); - await game.startBattle([Species.SHIFTRY]); + await game.startBattle([ Species.SHIFTRY ]); const magikarp = game.scene.getEnemyPokemon()!; const shiftry = game.scene.getPlayerPokemon()!; @@ -79,7 +79,7 @@ describe("Abilities - Wind Power", () => { it("does not interact with Sandstorm", async () => { game.override.enemySpecies(Species.MAGIKARP); - await game.startBattle([Species.SHIFTRY]); + await game.startBattle([ Species.SHIFTRY ]); const shiftry = game.scene.getPlayerPokemon()!; expect(shiftry.getTag(BattlerTagType.CHARGED)).toBeUndefined(); diff --git a/src/test/abilities/wind_rider.test.ts b/src/test/abilities/wind_rider.test.ts index c917f56e101..cd7094fb0a9 100644 --- a/src/test/abilities/wind_rider.test.ts +++ b/src/test/abilities/wind_rider.test.ts @@ -26,7 +26,7 @@ describe("Abilities - Wind Rider", () => { .battleType("single") .enemySpecies(Species.SHIFTRY) .enemyAbility(Abilities.WIND_RIDER) - .moveset([Moves.TAILWIND, Moves.SPLASH, Moves.PETAL_BLIZZARD, Moves.SANDSTORM]) + .moveset([ Moves.TAILWIND, Moves.SPLASH, Moves.PETAL_BLIZZARD, Moves.SANDSTORM ]) .enemyMoveset(Moves.SPLASH); }); @@ -49,7 +49,7 @@ describe("Abilities - Wind Rider", () => { .enemySpecies(Species.MAGIKARP) .ability(Abilities.WIND_RIDER); - await game.classicMode.startBattle([Species.SHIFTRY]); + await game.classicMode.startBattle([ Species.SHIFTRY ]); const shiftry = game.scene.getPlayerPokemon()!; expect(shiftry.getStatStage(Stat.ATK)).toBe(0); @@ -66,7 +66,7 @@ describe("Abilities - Wind Rider", () => { .enemySpecies(Species.MAGIKARP) .ability(Abilities.WIND_RIDER); - await game.classicMode.startBattle([Species.SHIFTRY]); + await game.classicMode.startBattle([ Species.SHIFTRY ]); const magikarp = game.scene.getEnemyPokemon()!; const shiftry = game.scene.getPlayerPokemon()!; @@ -86,7 +86,7 @@ describe("Abilities - Wind Rider", () => { .enemySpecies(Species.MAGIKARP) .ability(Abilities.WIND_RIDER); - await game.classicMode.startBattle([Species.SHIFTRY]); + await game.classicMode.startBattle([ Species.SHIFTRY ]); const magikarp = game.scene.getEnemyPokemon()!; const shiftry = game.scene.getPlayerPokemon()!; @@ -104,7 +104,7 @@ describe("Abilities - Wind Rider", () => { it("does not interact with Sandstorm", async () => { game.override.enemySpecies(Species.MAGIKARP); - await game.classicMode.startBattle([Species.SHIFTRY]); + await game.classicMode.startBattle([ Species.SHIFTRY ]); const shiftry = game.scene.getPlayerPokemon()!; expect(shiftry.getStatStage(Stat.ATK)).toBe(0); diff --git a/src/test/abilities/wonder_skin.test.ts b/src/test/abilities/wonder_skin.test.ts index 6ef985fbd42..6b25701e36a 100644 --- a/src/test/abilities/wonder_skin.test.ts +++ b/src/test/abilities/wonder_skin.test.ts @@ -25,7 +25,7 @@ describe("Abilities - Wonder Skin", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleType("single"); - game.override.moveset([Moves.TACKLE, Moves.CHARM]); + game.override.moveset([ Moves.TACKLE, Moves.CHARM ]); game.override.ability(Abilities.BALL_FETCH); game.override.enemySpecies(Species.SHUCKLE); game.override.enemyAbility(Abilities.WONDER_SKIN); @@ -37,7 +37,7 @@ describe("Abilities - Wonder Skin", () => { vi.spyOn(moveToCheck, "calculateBattleAccuracy"); - await game.startBattle([Species.PIKACHU]); + await game.startBattle([ Species.PIKACHU ]); game.move.select(Moves.CHARM); await game.phaseInterceptor.to(MoveEffectPhase); @@ -49,14 +49,14 @@ describe("Abilities - Wonder Skin", () => { vi.spyOn(moveToCheck, "calculateBattleAccuracy"); - await game.startBattle([Species.PIKACHU]); + await game.startBattle([ Species.PIKACHU ]); game.move.select(Moves.TACKLE); await game.phaseInterceptor.to(MoveEffectPhase); expect(moveToCheck.calculateBattleAccuracy).toHaveReturnedWith(100); }); - const bypassAbilities = [Abilities.MOLD_BREAKER, Abilities.TERAVOLT, Abilities.TURBOBLAZE]; + const bypassAbilities = [ Abilities.MOLD_BREAKER, Abilities.TERAVOLT, Abilities.TURBOBLAZE ]; bypassAbilities.forEach(ability => { it(`does not affect pokemon with ${allAbilities[ability].name}`, async () => { @@ -65,7 +65,7 @@ describe("Abilities - Wonder Skin", () => { game.override.ability(ability); vi.spyOn(moveToCheck, "calculateBattleAccuracy"); - await game.startBattle([Species.PIKACHU]); + await game.startBattle([ Species.PIKACHU ]); game.move.select(Moves.CHARM); await game.phaseInterceptor.to(MoveEffectPhase); diff --git a/src/test/abilities/zen_mode.test.ts b/src/test/abilities/zen_mode.test.ts index b4c60aa7a7f..2601954a9a4 100644 --- a/src/test/abilities/zen_mode.test.ts +++ b/src/test/abilities/zen_mode.test.ts @@ -21,7 +21,6 @@ import { Status, StatusEffect } from "#app/data/status-effect"; import { SwitchType } from "#enums/switch-type"; - describe("Abilities - ZEN MODE", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -44,22 +43,22 @@ describe("Abilities - ZEN MODE", () => { game.override.enemyAbility(Abilities.HYDRATION); game.override.ability(Abilities.ZEN_MODE); game.override.startingLevel(100); - game.override.moveset([moveToUse]); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override.moveset([ moveToUse ]); + game.override.enemyMoveset([ Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE ]); }); test( "not enough damage to change form", async () => { const moveToUse = Moves.SPLASH; - await game.startBattle([Species.DARMANITAN]); + await game.startBattle([ Species.DARMANITAN ]); game.scene.getParty()[0].stats[Stat.HP] = 100; game.scene.getParty()[0].hp = 100; expect(game.scene.getParty()[0].formIndex).toBe(0); game.move.select(moveToUse); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.phaseInterceptor.to(DamagePhase, false); // await game.phaseInterceptor.runFrom(DamagePhase).to(DamagePhase, false); const damagePhase = game.scene.getCurrentPhase() as DamagePhase; @@ -74,14 +73,14 @@ describe("Abilities - ZEN MODE", () => { "enough damage to change form", async () => { const moveToUse = Moves.SPLASH; - await game.startBattle([Species.DARMANITAN]); + await game.startBattle([ Species.DARMANITAN ]); game.scene.getParty()[0].stats[Stat.HP] = 1000; game.scene.getParty()[0].hp = 100; expect(game.scene.getParty()[0].formIndex).toBe(0); game.move.select(moveToUse); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.phaseInterceptor.to(QuietFormChangePhase); await game.phaseInterceptor.to(TurnInitPhase, false); expect(game.scene.getParty()[0].hp).not.toBe(100); @@ -93,14 +92,14 @@ describe("Abilities - ZEN MODE", () => { "kill pokemon while on zen mode", async () => { const moveToUse = Moves.SPLASH; - await game.startBattle([Species.DARMANITAN, Species.CHARIZARD]); + await game.startBattle([ Species.DARMANITAN, Species.CHARIZARD ]); game.scene.getParty()[0].stats[Stat.HP] = 1000; game.scene.getParty()[0].hp = 100; expect(game.scene.getParty()[0].formIndex).toBe(0); game.move.select(moveToUse); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.phaseInterceptor.to(DamagePhase, false); // await game.phaseInterceptor.runFrom(DamagePhase).to(DamagePhase, false); const damagePhase = game.scene.getCurrentPhase() as DamagePhase; @@ -136,7 +135,7 @@ describe("Abilities - ZEN MODE", () => { [Species.DARMANITAN]: zenForm, }); - await game.startBattle([Species.MAGIKARP, Species.DARMANITAN]); + await game.startBattle([ Species.MAGIKARP, Species.DARMANITAN ]); const darmanitan = game.scene.getParty().find((p) => p.species.speciesId === Species.DARMANITAN)!; expect(darmanitan).not.toBe(undefined); diff --git a/src/test/abilities/zero_to_hero.test.ts b/src/test/abilities/zero_to_hero.test.ts index a7f7c970218..48a451e99a2 100644 --- a/src/test/abilities/zero_to_hero.test.ts +++ b/src/test/abilities/zero_to_hero.test.ts @@ -8,7 +8,6 @@ import GameManager from "#test/utils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; - describe("Abilities - ZERO TO HERO", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -40,7 +39,7 @@ describe("Abilities - ZERO TO HERO", () => { [Species.PALAFIN]: heroForm, }); - await game.startBattle([Species.FEEBAS, Species.PALAFIN, Species.PALAFIN]); + await game.startBattle([ Species.FEEBAS, Species.PALAFIN, Species.PALAFIN ]); const palafin1 = game.scene.getParty()[1]; const palafin2 = game.scene.getParty()[2]; @@ -62,7 +61,7 @@ describe("Abilities - ZERO TO HERO", () => { }); it("should swap to Hero form when switching out during a battle", async () => { - await game.startBattle([Species.PALAFIN, Species.FEEBAS]); + await game.startBattle([ Species.PALAFIN, Species.FEEBAS ]); const palafin = game.scene.getPlayerPokemon()!; expect(palafin.formIndex).toBe(baseForm); @@ -73,7 +72,7 @@ describe("Abilities - ZERO TO HERO", () => { }); it("should not swap to Hero form if switching due to faint", async () => { - await game.startBattle([Species.PALAFIN, Species.FEEBAS]); + await game.startBattle([ Species.PALAFIN, Species.FEEBAS ]); const palafin = game.scene.getPlayerPokemon()!; expect(palafin.formIndex).toBe(baseForm); @@ -90,7 +89,7 @@ describe("Abilities - ZERO TO HERO", () => { [Species.PALAFIN]: heroForm, }); - await game.startBattle([Species.PALAFIN, Species.FEEBAS]); + await game.startBattle([ Species.PALAFIN, Species.FEEBAS ]); const palafin = game.scene.getPlayerPokemon()!; expect(palafin.formIndex).toBe(heroForm); diff --git a/src/test/account.test.ts b/src/test/account.test.ts index eb6002f3cf2..8c36f2cd953 100644 --- a/src/test/account.test.ts +++ b/src/test/account.test.ts @@ -17,7 +17,7 @@ describe("account", () => { it("should set loggedInUser! to Guest if bypassLogin is true", async () => { vi.spyOn(battleScene, "bypassLogin", "get").mockReturnValue(true); - const [success, status] = await updateUserInfo(); + const [ success, status ] = await updateUserInfo(); expect(success).toBe(true); expect(status).toBe(200); @@ -39,7 +39,7 @@ describe("account", () => { ) ); - const [success, status] = await updateUserInfo(); + const [ success, status ] = await updateUserInfo(); expect(success).toBe(true); expect(status).toBe(200); @@ -53,7 +53,7 @@ describe("account", () => { new Response(null, { status: 401 }) ); - const [success, status] = await updateUserInfo(); + const [ success, status ] = await updateUserInfo(); expect(success).toBe(false); expect(status).toBe(401); @@ -64,7 +64,7 @@ describe("account", () => { vi.spyOn(battleScene, "bypassLogin", "get").mockReturnValue(false); vi.spyOn(utils, "apiFetch").mockRejectedValue(new Error("Api failed!")); - const [success, status] = await updateUserInfo(); + const [ success, status ] = await updateUserInfo(); expect(success).toBe(false); expect(status).toBe(500); diff --git a/src/test/achievements/achievement.test.ts b/src/test/achievements/achievement.test.ts index 24d00a3e77b..a3669c60463 100644 --- a/src/test/achievements/achievement.test.ts +++ b/src/test/achievements/achievement.test.ts @@ -61,8 +61,8 @@ describe("Achv", () => { const conditionFunc = vi.fn((scene: BattleScene, args: any[]) => args[0] === 10); const achv = new Achv("", "Test Achievement", "Test Description", "test_icon", 10, conditionFunc); - expect(achv.validate(new BattleScene(), [5])).toBe(false); - expect(achv.validate(new BattleScene(), [10])).toBe(true); + expect(achv.validate(new BattleScene(), [ 5 ])).toBe(false); + expect(achv.validate(new BattleScene(), [ 10 ])).toBe(true); expect(conditionFunc).toHaveBeenCalledTimes(2); }); }); @@ -141,10 +141,10 @@ describe("DamageAchv", () => { const scene = new BattleScene(); const numberHolder = new NumberHolder(200); - expect(damageAchv.validate(scene, [numberHolder])).toBe(false); + expect(damageAchv.validate(scene, [ numberHolder ])).toBe(false); numberHolder.value = 300; - expect(damageAchv.validate(scene, [numberHolder])).toBe(true); + expect(damageAchv.validate(scene, [ numberHolder ])).toBe(true); }); }); @@ -160,10 +160,10 @@ describe("HealAchv", () => { const scene = new BattleScene(); const numberHolder = new NumberHolder(200); - expect(healAchv.validate(scene, [numberHolder])).toBe(false); + expect(healAchv.validate(scene, [ numberHolder ])).toBe(false); numberHolder.value = 300; - expect(healAchv.validate(scene, [numberHolder])).toBe(true); + expect(healAchv.validate(scene, [ numberHolder ])).toBe(true); }); }); @@ -179,10 +179,10 @@ describe("LevelAchv", () => { const scene = new BattleScene(); const integerHolder = new IntegerHolder(50); - expect(levelAchv.validate(scene, [integerHolder])).toBe(false); + expect(levelAchv.validate(scene, [ integerHolder ])).toBe(false); integerHolder.value = 150; - expect(levelAchv.validate(scene, [integerHolder])).toBe(true); + expect(levelAchv.validate(scene, [ integerHolder ])).toBe(true); }); }); @@ -198,7 +198,7 @@ describe("ModifierAchv", () => { const scene = new BattleScene(); const modifier = new TurnHeldItemTransferModifier(null!, 3, 1); - expect(modifierAchv.validate(scene, [modifier])).toBe(true); + expect(modifierAchv.validate(scene, [ modifier ])).toBe(true); }); }); diff --git a/src/test/arena/arena_gravity.test.ts b/src/test/arena/arena_gravity.test.ts index 47b8bf4cf70..b6982896571 100644 --- a/src/test/arena/arena_gravity.test.ts +++ b/src/test/arena/arena_gravity.test.ts @@ -27,7 +27,7 @@ describe("Arena - Gravity", () => { game = new GameManager(phaserGame); game.override .battleType("single") - .moveset([Moves.TACKLE, Moves.GRAVITY, Moves.FISSURE]) + .moveset([ Moves.TACKLE, Moves.GRAVITY, Moves.FISSURE ]) .ability(Abilities.UNNERVE) .enemyAbility(Abilities.BALL_FETCH) .enemySpecies(Species.SHUCKLE) @@ -42,7 +42,7 @@ describe("Arena - Gravity", () => { vi.spyOn(moveToCheck, "calculateBattleAccuracy"); // Setup Gravity on first turn - await game.startBattle([Species.PIKACHU]); + await game.startBattle([ Species.PIKACHU ]); game.move.select(Moves.GRAVITY); await game.phaseInterceptor.to(TurnEndPhase); @@ -66,7 +66,7 @@ describe("Arena - Gravity", () => { vi.spyOn(moveToCheck, "calculateBattleAccuracy"); // Setup Gravity on first turn - await game.startBattle([Species.PIKACHU]); + await game.startBattle([ Species.PIKACHU ]); game.move.select(Moves.GRAVITY); await game.phaseInterceptor.to(TurnEndPhase); @@ -86,9 +86,9 @@ describe("Arena - Gravity", () => { .startingLevel(5) .enemyLevel(5) .enemySpecies(Species.PIDGEOT) - .moveset([Moves.GRAVITY, Moves.EARTHQUAKE]); + .moveset([ Moves.GRAVITY, Moves.EARTHQUAKE ]); - await game.startBattle([Species.PIKACHU]); + await game.startBattle([ Species.PIKACHU ]); const pidgeot = game.scene.getEnemyPokemon()!; vi.spyOn(pidgeot, "getAttackTypeEffectiveness"); @@ -119,9 +119,9 @@ describe("Arena - Gravity", () => { .startingLevel(5) .enemyLevel(5) .enemySpecies(Species.PIDGEOT) - .moveset([Moves.GRAVITY, Moves.THUNDERBOLT]); + .moveset([ Moves.GRAVITY, Moves.THUNDERBOLT ]); - await game.startBattle([Species.PIKACHU]); + await game.startBattle([ Species.PIKACHU ]); const pidgeot = game.scene.getEnemyPokemon()!; vi.spyOn(pidgeot, "getAttackTypeEffectiveness"); diff --git a/src/test/arena/grassy_terrain.test.ts b/src/test/arena/grassy_terrain.test.ts index 01bbc778ded..ead4467925b 100644 --- a/src/test/arena/grassy_terrain.test.ts +++ b/src/test/arena/grassy_terrain.test.ts @@ -28,12 +28,12 @@ describe("Arena - Grassy Terrain", () => { .enemySpecies(Species.SHUCKLE) .enemyAbility(Abilities.STURDY) .enemyMoveset(Moves.FLY) - .moveset([Moves.GRASSY_TERRAIN, Moves.EARTHQUAKE]) + .moveset([ Moves.GRASSY_TERRAIN, Moves.EARTHQUAKE ]) .ability(Abilities.NO_GUARD); }); it("halves the damage of Earthquake", async () => { - await game.classicMode.startBattle([Species.TAUROS]); + await game.classicMode.startBattle([ Species.TAUROS ]); const eq = allMoves[Moves.EARTHQUAKE]; vi.spyOn(eq, "calculateBattlePower"); @@ -53,7 +53,7 @@ describe("Arena - Grassy Terrain", () => { }); it("Does not halve the damage of Earthquake if opponent is not grounded", async () => { - await game.classicMode.startBattle([Species.NINJASK]); + await game.classicMode.startBattle([ Species.NINJASK ]); const eq = allMoves[Moves.EARTHQUAKE]; vi.spyOn(eq, "calculateBattlePower"); diff --git a/src/test/arena/weather_fog.test.ts b/src/test/arena/weather_fog.test.ts index b47145e8dd0..db591dda2b8 100644 --- a/src/test/arena/weather_fog.test.ts +++ b/src/test/arena/weather_fog.test.ts @@ -27,11 +27,11 @@ describe("Weather - Fog", () => { game.override .weather(WeatherType.FOG) .battleType("single"); - game.override.moveset([Moves.TACKLE]); + game.override.moveset([ Moves.TACKLE ]); game.override.ability(Abilities.BALL_FETCH); game.override.enemyAbility(Abilities.BALL_FETCH); game.override.enemySpecies(Species.MAGIKARP); - game.override.enemyMoveset([Moves.SPLASH]); + game.override.enemyMoveset([ Moves.SPLASH ]); }); it("move accuracy is multiplied by 90%", async () => { @@ -39,7 +39,7 @@ describe("Weather - Fog", () => { vi.spyOn(moveToCheck, "calculateBattleAccuracy"); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); game.move.select(Moves.TACKLE); await game.phaseInterceptor.to(MoveEffectPhase); diff --git a/src/test/arena/weather_hail.test.ts b/src/test/arena/weather_hail.test.ts index 2070e40dbcc..b8f4276a3d9 100644 --- a/src/test/arena/weather_hail.test.ts +++ b/src/test/arena/weather_hail.test.ts @@ -31,10 +31,10 @@ describe("Weather - Hail", () => { }); it("inflicts damage equal to 1/16 of Pokemon's max HP at turn end", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); game.move.select(Moves.SPLASH); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.phaseInterceptor.to("TurnEndPhase"); @@ -44,11 +44,11 @@ describe("Weather - Hail", () => { }); it("does not inflict damage to a Pokemon that is underwater (Dive) or underground (Dig)", async () => { - game.override.moveset([Moves.DIG]); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.moveset([ Moves.DIG ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); game.move.select(Moves.DIG); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.phaseInterceptor.to("TurnEndPhase"); @@ -60,7 +60,7 @@ describe("Weather - Hail", () => { }); it("does not inflict damage to Ice type Pokemon", async () => { - await game.classicMode.startBattle([Species.CLOYSTER]); + await game.classicMode.startBattle([ Species.CLOYSTER ]); game.move.select(Moves.SPLASH); diff --git a/src/test/arena/weather_sandstorm.test.ts b/src/test/arena/weather_sandstorm.test.ts index 2419ca11b70..09d0c1d2b77 100644 --- a/src/test/arena/weather_sandstorm.test.ts +++ b/src/test/arena/weather_sandstorm.test.ts @@ -32,7 +32,7 @@ describe("Weather - Sandstorm", () => { }); it("inflicts damage equal to 1/16 of Pokemon's max HP at turn end", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); game.move.select(Moves.SPLASH); @@ -44,8 +44,8 @@ describe("Weather - Sandstorm", () => { }); it("does not inflict damage to a Pokemon that is underwater (Dive) or underground (Dig)", async () => { - game.override.moveset([Moves.DIVE]); - await game.classicMode.startBattle([Species.MAGIKARP]); + game.override.moveset([ Moves.DIVE ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); game.move.select(Moves.DIVE); @@ -65,7 +65,7 @@ describe("Weather - Sandstorm", () => { .ability(Abilities.BALL_FETCH) .enemyAbility(Abilities.BALL_FETCH); - await game.classicMode.startBattle([Species.ROCKRUFF, Species.KLINK]); + await game.classicMode.startBattle([ Species.ROCKRUFF, Species.KLINK ]); game.move.select(Moves.SPLASH, 0); game.move.select(Moves.SPLASH, 1); @@ -78,7 +78,7 @@ describe("Weather - Sandstorm", () => { }); it("increases Rock type Pokemon Sp.Def by 50%", async () => { - await game.classicMode.startBattle([Species.ROCKRUFF]); + await game.classicMode.startBattle([ Species.ROCKRUFF ]); const playerPokemon = game.scene.getPlayerPokemon()!; const playerSpdef = playerPokemon.getStat(Stat.SPDEF); diff --git a/src/test/arena/weather_strong_winds.test.ts b/src/test/arena/weather_strong_winds.test.ts index 5ce0e61e647..557de93d644 100644 --- a/src/test/arena/weather_strong_winds.test.ts +++ b/src/test/arena/weather_strong_winds.test.ts @@ -28,13 +28,13 @@ describe("Weather - Strong Winds", () => { game.override.startingLevel(10); game.override.enemySpecies(Species.TAILLOW); game.override.enemyAbility(Abilities.DELTA_STREAM); - game.override.moveset([Moves.THUNDERBOLT, Moves.ICE_BEAM, Moves.ROCK_SLIDE]); + game.override.moveset([ Moves.THUNDERBOLT, Moves.ICE_BEAM, Moves.ROCK_SLIDE ]); }); it("electric type move is not very effective on Rayquaza", async () => { game.override.enemySpecies(Species.RAYQUAZA); - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([ Species.PIKACHU ]); const pikachu = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; @@ -45,7 +45,7 @@ describe("Weather - Strong Winds", () => { }); it("electric type move is neutral for flying type pokemon", async () => { - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([ Species.PIKACHU ]); const pikachu = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; @@ -56,7 +56,7 @@ describe("Weather - Strong Winds", () => { }); it("ice type move is neutral for flying type pokemon", async () => { - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([ Species.PIKACHU ]); const pikachu = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; @@ -67,7 +67,7 @@ describe("Weather - Strong Winds", () => { }); it("rock type move is neutral for flying type pokemon", async () => { - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([ Species.PIKACHU ]); const pikachu = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; @@ -80,7 +80,7 @@ describe("Weather - Strong Winds", () => { it("weather goes away when last trainer pokemon dies to indirect damage", async () => { game.override.enemyStatusEffect(StatusEffect.POISON); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); const enemy = game.scene.getEnemyPokemon()!; enemy.hp = 1; diff --git a/src/test/battle/battle-order.test.ts b/src/test/battle/battle-order.test.ts index e19168962dc..d4e9950dec9 100644 --- a/src/test/battle/battle-order.test.ts +++ b/src/test/battle/battle-order.test.ts @@ -28,7 +28,7 @@ describe("Battle order", () => { game.override.enemySpecies(Species.MEWTWO); game.override.enemyAbility(Abilities.INSOMNIA); game.override.ability(Abilities.INSOMNIA); - game.override.moveset([Moves.TACKLE]); + game.override.moveset([ Moves.TACKLE ]); }); it("opponent faster than player 50 vs 150", async () => { @@ -38,8 +38,8 @@ describe("Battle order", () => { const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - vi.spyOn(playerPokemon, "stats", "get").mockReturnValue([20, 20, 20, 20, 20, 50]); // set playerPokemon's speed to 50 - vi.spyOn(enemyPokemon, "stats", "get").mockReturnValue([20, 20, 20, 20, 20, 150]); // set enemyPokemon's speed to 150 + vi.spyOn(playerPokemon, "stats", "get").mockReturnValue([ 20, 20, 20, 20, 20, 50 ]); // set playerPokemon's speed to 50 + vi.spyOn(enemyPokemon, "stats", "get").mockReturnValue([ 20, 20, 20, 20, 20, 150 ]); // set enemyPokemon's speed to 150 game.move.select(Moves.TACKLE); await game.phaseInterceptor.run(EnemyCommandPhase); @@ -59,8 +59,8 @@ describe("Battle order", () => { const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; - vi.spyOn(playerPokemon, "stats", "get").mockReturnValue([20, 20, 20, 20, 20, 150]); // set playerPokemon's speed to 150 - vi.spyOn(enemyPokemon, "stats", "get").mockReturnValue([20, 20, 20, 20, 20, 50]); // set enemyPokemon's speed to 50 + vi.spyOn(playerPokemon, "stats", "get").mockReturnValue([ 20, 20, 20, 20, 20, 150 ]); // set playerPokemon's speed to 150 + vi.spyOn(enemyPokemon, "stats", "get").mockReturnValue([ 20, 20, 20, 20, 20, 50 ]); // set enemyPokemon's speed to 50 game.move.select(Moves.TACKLE); await game.phaseInterceptor.run(EnemyCommandPhase); @@ -83,8 +83,8 @@ describe("Battle order", () => { const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); - playerPokemon.forEach(p => vi.spyOn(p, "stats", "get").mockReturnValue([20, 20, 20, 20, 20, 50])); // set both playerPokemons' speed to 50 - enemyPokemon.forEach(p => vi.spyOn(p, "stats", "get").mockReturnValue([20, 20, 20, 20, 20, 150])); // set both enemyPokemons' speed to 150 + playerPokemon.forEach(p => vi.spyOn(p, "stats", "get").mockReturnValue([ 20, 20, 20, 20, 20, 50 ])); // set both playerPokemons' speed to 50 + enemyPokemon.forEach(p => vi.spyOn(p, "stats", "get").mockReturnValue([ 20, 20, 20, 20, 20, 150 ])); // set both enemyPokemons' speed to 150 const playerIndices = playerPokemon.map(p => p?.getBattlerIndex()); const enemyIndices = enemyPokemon.map(p => p?.getBattlerIndex()); @@ -109,9 +109,9 @@ describe("Battle order", () => { const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); - playerPokemon.forEach(p => vi.spyOn(p, "stats", "get").mockReturnValue([20, 20, 20, 20, 20, 100])); //set both playerPokemons' speed to 100 - vi.spyOn(enemyPokemon[0], "stats", "get").mockReturnValue([20, 20, 20, 20, 20, 100]); // set enemyPokemon's speed to 100 - vi.spyOn(enemyPokemon[1], "stats", "get").mockReturnValue([20, 20, 20, 20, 20, 150]); // set enemyPokemon's speed to 150 + playerPokemon.forEach(p => vi.spyOn(p, "stats", "get").mockReturnValue([ 20, 20, 20, 20, 20, 100 ])); //set both playerPokemons' speed to 100 + vi.spyOn(enemyPokemon[0], "stats", "get").mockReturnValue([ 20, 20, 20, 20, 20, 100 ]); // set enemyPokemon's speed to 100 + vi.spyOn(enemyPokemon[1], "stats", "get").mockReturnValue([ 20, 20, 20, 20, 20, 150 ]); // set enemyPokemon's speed to 150 const playerIndices = playerPokemon.map(p => p?.getBattlerIndex()); const enemyIndices = enemyPokemon.map(p => p?.getBattlerIndex()); @@ -136,10 +136,10 @@ describe("Battle order", () => { const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); - vi.spyOn(playerPokemon[0], "stats", "get").mockReturnValue([20, 20, 20, 20, 20, 100]); // set one playerPokemon's speed to 100 - vi.spyOn(playerPokemon[1], "stats", "get").mockReturnValue([20, 20, 20, 20, 20, 150]); // set other playerPokemon's speed to 150 - vi.spyOn(enemyPokemon[0], "stats", "get").mockReturnValue([20, 20, 20, 20, 20, 100]); // set one enemyPokemon's speed to 100 - vi.spyOn(enemyPokemon[1], "stats", "get").mockReturnValue([20, 20, 20, 20, 20, 150]); // set other enemyPokemon's speed to 150 + vi.spyOn(playerPokemon[0], "stats", "get").mockReturnValue([ 20, 20, 20, 20, 20, 100 ]); // set one playerPokemon's speed to 100 + vi.spyOn(playerPokemon[1], "stats", "get").mockReturnValue([ 20, 20, 20, 20, 20, 150 ]); // set other playerPokemon's speed to 150 + vi.spyOn(enemyPokemon[0], "stats", "get").mockReturnValue([ 20, 20, 20, 20, 20, 100 ]); // set one enemyPokemon's speed to 100 + vi.spyOn(enemyPokemon[1], "stats", "get").mockReturnValue([ 20, 20, 20, 20, 20, 150 ]); // set other enemyPokemon's speed to 150 const playerIndices = playerPokemon.map(p => p?.getBattlerIndex()); const enemyIndices = enemyPokemon.map(p => p?.getBattlerIndex()); diff --git a/src/test/battle/battle.test.ts b/src/test/battle/battle.test.ts index 554692374d2..eed76397f85 100644 --- a/src/test/battle/battle.test.ts +++ b/src/test/battle/battle.test.ts @@ -99,9 +99,9 @@ describe("Test Battle Phase", () => { game.override .startingWave(3) .battleType("single"); - game.override.moveset([Moves.TACKLE]); + game.override.moveset([ Moves.TACKLE ]); game.override.enemyAbility(Abilities.HYDRATION); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override.enemyMoveset([ Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE ]); await game.startBattle(); game.move.select(Moves.TACKLE); await game.phaseInterceptor.runFrom(EnemyCommandPhase).to(SelectModifierPhase, false); @@ -112,9 +112,9 @@ describe("Test Battle Phase", () => { game.override.enemySpecies(Species.RATTATA); game.override.startingLevel(5); game.override.startingWave(3); - game.override.moveset([Moves.TACKLE]); + game.override.moveset([ Moves.TACKLE ]); game.override.enemyAbility(Abilities.HYDRATION); - game.override.enemyMoveset([Moves.TAIL_WHIP, Moves.TAIL_WHIP, Moves.TAIL_WHIP, Moves.TAIL_WHIP]); + game.override.enemyMoveset([ Moves.TAIL_WHIP, Moves.TAIL_WHIP, Moves.TAIL_WHIP, Moves.TAIL_WHIP ]); game.override.battleType("single"); await game.startBattle(); game.move.select(Moves.TACKLE); @@ -259,8 +259,8 @@ describe("Test Battle Phase", () => { game.override.ability(Abilities.ZEN_MODE); game.override.startingLevel(2000); game.override.startingWave(3); - game.override.moveset([moveToUse]); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override.moveset([ moveToUse ]); + game.override.enemyMoveset([ Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE ]); await game.startBattle([ Species.DARMANITAN, Species.CHARIZARD, @@ -282,8 +282,8 @@ describe("Test Battle Phase", () => { game.override.ability(Abilities.ZEN_MODE); game.override.startingLevel(2000); game.override.startingWave(3); - game.override.moveset([moveToUse]); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override.moveset([ moveToUse ]); + game.override.enemyMoveset([ Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE ]); await game.startBattle(); const turn = game.scene.currentBattle.turn; game.move.select(moveToUse); @@ -302,8 +302,8 @@ describe("Test Battle Phase", () => { .startingLevel(2000) .startingWave(3) .startingBiome(Biome.LAKE) - .moveset([moveToUse]); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + .moveset([ moveToUse ]); + game.override.enemyMoveset([ Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE ]); await game.classicMode.startBattle(); const waveIndex = game.scene.currentBattle.waveIndex; game.move.select(moveToUse); @@ -323,7 +323,7 @@ describe("Test Battle Phase", () => { .enemySpecies(Species.RATTATA) .startingWave(1) .startingLevel(100) - .moveset([moveToUse]) + .moveset([ moveToUse ]) .enemyMoveset(Moves.SPLASH) .startingHeldItems([{ name: "TEMP_STAT_STAGE_BOOSTER", type: Stat.ACC }]); diff --git a/src/test/battle/damage_calculation.test.ts b/src/test/battle/damage_calculation.test.ts index a348df6c085..e6ecbe4646f 100644 --- a/src/test/battle/damage_calculation.test.ts +++ b/src/test/battle/damage_calculation.test.ts @@ -31,11 +31,11 @@ describe("Battle Mechanics - Damage Calculation", () => { .startingLevel(100) .enemyLevel(100) .disableCrits() - .moveset([Moves.TACKLE, Moves.DRAGON_RAGE, Moves.FISSURE, Moves.JUMP_KICK]); + .moveset([ Moves.TACKLE, Moves.DRAGON_RAGE, Moves.FISSURE, Moves.JUMP_KICK ]); }); it("Tackle deals expected base damage", async () => { - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([ Species.CHARIZARD ]); const playerPokemon = game.scene.getPlayerPokemon()!; vi.spyOn(playerPokemon, "getEffectiveStat").mockReturnValue(80); @@ -53,7 +53,7 @@ describe("Battle Mechanics - Damage Calculation", () => { .startingLevel(1) .enemySpecies(Species.AGGRON); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); const aggron = game.scene.getEnemyPokemon()!; @@ -70,7 +70,7 @@ describe("Battle Mechanics - Damage Calculation", () => { .enemySpecies(Species.DRAGONITE) .enemyAbility(Abilities.MULTISCALE); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); const magikarp = game.scene.getPlayerPokemon()!; const dragonite = game.scene.getEnemyPokemon()!; @@ -83,7 +83,7 @@ describe("Battle Mechanics - Damage Calculation", () => { .enemySpecies(Species.AGGRON) .enemyAbility(Abilities.MULTISCALE); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); const magikarp = game.scene.getPlayerPokemon()!; const aggron = game.scene.getEnemyPokemon()!; @@ -96,7 +96,7 @@ describe("Battle Mechanics - Damage Calculation", () => { .enemySpecies(Species.GASTLY) .ability(Abilities.WONDER_GUARD); - await game.classicMode.startBattle([Species.SHEDINJA]); + await game.classicMode.startBattle([ Species.SHEDINJA ]); const shedinja = game.scene.getPlayerPokemon()!; @@ -115,7 +115,7 @@ describe("Battle Mechanics - Damage Calculation", () => { .enemySpecies(Species.CHARIZARD) .enemyAbility(Abilities.BLAZE); - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([ Species.PIKACHU ]); const charizard = game.scene.getEnemyPokemon()!; diff --git a/src/test/battle/error-handling.test.ts b/src/test/battle/error-handling.test.ts index da5cc4d1969..208463e7064 100644 --- a/src/test/battle/error-handling.test.ts +++ b/src/test/battle/error-handling.test.ts @@ -30,8 +30,8 @@ describe("Error Handling", () => { game.override.enemyAbility(Abilities.HYDRATION); game.override.ability(Abilities.ZEN_MODE); game.override.startingLevel(2000); - game.override.moveset([moveToUse]); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override.moveset([ moveToUse ]); + game.override.enemyMoveset([ Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE ]); }); it.skip("to next turn", async () => { diff --git a/src/test/battle/inverse_battle.test.ts b/src/test/battle/inverse_battle.test.ts index 01a0348e730..110f92d15b7 100644 --- a/src/test/battle/inverse_battle.test.ts +++ b/src/test/battle/inverse_battle.test.ts @@ -11,7 +11,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; - describe("Inverse Battle", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -42,7 +41,7 @@ describe("Inverse Battle", () => { it("Immune types are 2x effective - Thunderbolt against Ground Type", async () => { game.override - .moveset([Moves.THUNDERBOLT]) + .moveset([ Moves.THUNDERBOLT ]) .enemySpecies(Species.SANDSHREW); @@ -52,7 +51,7 @@ describe("Inverse Battle", () => { vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(Moves.THUNDERBOLT); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to("MoveEffectPhase"); expect(enemy.getMoveEffectiveness).toHaveLastReturnedWith(2); @@ -60,7 +59,7 @@ describe("Inverse Battle", () => { it("2x effective types are 0.5x effective - Thunderbolt against Flying Type", async () => { game.override - .moveset([Moves.THUNDERBOLT]) + .moveset([ Moves.THUNDERBOLT ]) .enemySpecies(Species.PIDGEY); await game.challengeMode.startBattle(); @@ -69,7 +68,7 @@ describe("Inverse Battle", () => { vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(Moves.THUNDERBOLT); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to("MoveEffectPhase"); expect(enemy.getMoveEffectiveness).toHaveLastReturnedWith(0.5); @@ -77,7 +76,7 @@ describe("Inverse Battle", () => { it("0.5x effective types are 2x effective - Thunderbolt against Electric Type", async () => { game.override - .moveset([Moves.THUNDERBOLT]) + .moveset([ Moves.THUNDERBOLT ]) .enemySpecies(Species.CHIKORITA); await game.challengeMode.startBattle(); @@ -86,7 +85,7 @@ describe("Inverse Battle", () => { vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(Moves.THUNDERBOLT); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to("MoveEffectPhase"); expect(enemy.getMoveEffectiveness).toHaveLastReturnedWith(2); @@ -114,7 +113,7 @@ describe("Inverse Battle", () => { it("Freeze Dry is 2x effective against Water Type like other Ice type Move - Freeze Dry against Squirtle", async () => { game.override - .moveset([Moves.FREEZE_DRY]) + .moveset([ Moves.FREEZE_DRY ]) .enemySpecies(Species.SQUIRTLE); await game.challengeMode.startBattle(); @@ -123,7 +122,7 @@ describe("Inverse Battle", () => { vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(Moves.FREEZE_DRY); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to("MoveEffectPhase"); expect(enemy.getMoveEffectiveness).toHaveLastReturnedWith(2); @@ -131,7 +130,7 @@ describe("Inverse Battle", () => { it("Water Absorb should heal against water moves - Water Absorb against Water gun", async () => { game.override - .moveset([Moves.WATER_GUN]) + .moveset([ Moves.WATER_GUN ]) .enemyAbility(Abilities.WATER_ABSORB); await game.challengeMode.startBattle(); @@ -139,7 +138,7 @@ describe("Inverse Battle", () => { const enemy = game.scene.getEnemyPokemon()!; enemy.hp = enemy.getMaxHp() - 1; game.move.select(Moves.WATER_GUN); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to("MoveEndPhase"); expect(enemy.hp).toBe(enemy.getMaxHp()); @@ -147,7 +146,7 @@ describe("Inverse Battle", () => { it("Fire type does not get burned - Will-O-Wisp against Charmander", async () => { game.override - .moveset([Moves.WILL_O_WISP]) + .moveset([ Moves.WILL_O_WISP ]) .enemySpecies(Species.CHARMANDER); await game.challengeMode.startBattle(); @@ -155,7 +154,7 @@ describe("Inverse Battle", () => { const enemy = game.scene.getEnemyPokemon()!; game.move.select(Moves.WILL_O_WISP); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.move.forceHit(); await game.phaseInterceptor.to("MoveEndPhase"); @@ -164,7 +163,7 @@ describe("Inverse Battle", () => { it("Electric type does not get paralyzed - Nuzzle against Pikachu", async () => { game.override - .moveset([Moves.NUZZLE]) + .moveset([ Moves.NUZZLE ]) .enemySpecies(Species.PIKACHU) .enemyLevel(50); @@ -173,7 +172,7 @@ describe("Inverse Battle", () => { const enemy = game.scene.getEnemyPokemon()!; game.move.select(Moves.NUZZLE); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to("MoveEndPhase"); expect(enemy.status?.effect).not.toBe(StatusEffect.PARALYSIS); @@ -181,7 +180,7 @@ describe("Inverse Battle", () => { it("Ground type is not immune to Thunder Wave - Thunder Wave against Sandshrew", async () => { game.override - .moveset([Moves.THUNDER_WAVE]) + .moveset([ Moves.THUNDER_WAVE ]) .enemySpecies(Species.SANDSHREW); await game.challengeMode.startBattle(); @@ -189,7 +188,7 @@ describe("Inverse Battle", () => { const enemy = game.scene.getEnemyPokemon()!; game.move.select(Moves.THUNDER_WAVE); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.move.forceHit(); await game.phaseInterceptor.to("MoveEndPhase"); @@ -199,7 +198,7 @@ describe("Inverse Battle", () => { it("Anticipation should trigger on 2x effective moves - Anticipation against Thunderbolt", async () => { game.override - .moveset([Moves.THUNDERBOLT]) + .moveset([ Moves.THUNDERBOLT ]) .enemySpecies(Species.SANDSHREW) .enemyAbility(Abilities.ANTICIPATION); @@ -210,15 +209,15 @@ describe("Inverse Battle", () => { it("Conversion 2 should change the type to the resistive type - Conversion 2 against Dragonite", async () => { game.override - .moveset([Moves.CONVERSION_2]) - .enemyMoveset([Moves.DRAGON_CLAW, Moves.DRAGON_CLAW, Moves.DRAGON_CLAW, Moves.DRAGON_CLAW]); + .moveset([ Moves.CONVERSION_2 ]) + .enemyMoveset([ Moves.DRAGON_CLAW, Moves.DRAGON_CLAW, Moves.DRAGON_CLAW, Moves.DRAGON_CLAW ]); await game.challengeMode.startBattle(); const player = game.scene.getPlayerPokemon()!; game.move.select(Moves.CONVERSION_2); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.phaseInterceptor.to("TurnEndPhase"); @@ -227,7 +226,7 @@ describe("Inverse Battle", () => { it("Flying Press should be 0.25x effective against Grass + Dark Type - Flying Press against Meowscarada", async () => { game.override - .moveset([Moves.FLYING_PRESS]) + .moveset([ Moves.FLYING_PRESS ]) .enemySpecies(Species.MEOWSCARADA); await game.challengeMode.startBattle(); @@ -236,7 +235,7 @@ describe("Inverse Battle", () => { vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(Moves.FLYING_PRESS); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to("MoveEffectPhase"); expect(enemy.getMoveEffectiveness).toHaveLastReturnedWith(0.25); @@ -244,7 +243,7 @@ describe("Inverse Battle", () => { it("Scrappy ability has no effect - Tackle against Ghost Type still 2x effective with Scrappy", async () => { game.override - .moveset([Moves.TACKLE]) + .moveset([ Moves.TACKLE ]) .ability(Abilities.SCRAPPY) .enemySpecies(Species.GASTLY); @@ -254,7 +253,7 @@ describe("Inverse Battle", () => { vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(Moves.TACKLE); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to("MoveEffectPhase"); expect(enemy.getMoveEffectiveness).toHaveLastReturnedWith(2); @@ -262,7 +261,7 @@ describe("Inverse Battle", () => { it("FORESIGHT has no effect - Tackle against Ghost Type still 2x effective with Foresight", async () => { game.override - .moveset([Moves.FORESIGHT, Moves.TACKLE]) + .moveset([ Moves.FORESIGHT, Moves.TACKLE ]) .enemySpecies(Species.GASTLY); await game.challengeMode.startBattle(); @@ -271,11 +270,11 @@ describe("Inverse Battle", () => { vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(Moves.FORESIGHT); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.phaseInterceptor.to("TurnEndPhase"); game.move.select(Moves.TACKLE); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to("MoveEffectPhase"); expect(enemy.getMoveEffectiveness).toHaveLastReturnedWith(2); diff --git a/src/test/battle/special_battle.test.ts b/src/test/battle/special_battle.test.ts index 1d319bea372..af9e3dddbec 100644 --- a/src/test/battle/special_battle.test.ts +++ b/src/test/battle/special_battle.test.ts @@ -25,10 +25,10 @@ describe("Test Battle Phase", () => { game = new GameManager(phaserGame); game.override.enemySpecies(Species.RATTATA); game.override.startingLevel(2000); - game.override.moveset([Moves.TACKLE]); + game.override.moveset([ Moves.TACKLE ]); game.override.enemyAbility(Abilities.HYDRATION); game.override.ability(Abilities.HYDRATION); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override.enemyMoveset([ Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE ]); }); it("startBattle 2vs1 boss", async() => { diff --git a/src/test/battlerTags/stockpiling.test.ts b/src/test/battlerTags/stockpiling.test.ts index ae2528e7b5f..dab189853c5 100644 --- a/src/test/battlerTags/stockpiling.test.ts +++ b/src/test/battlerTags/stockpiling.test.ts @@ -27,7 +27,7 @@ describe("BattlerTag - StockpilingTag", () => { expect((phase as StatStageChangePhase)["stages"]).toEqual(1); expect((phase as StatStageChangePhase)["stats"]).toEqual(expect.arrayContaining([ Stat.DEF, Stat.SPDEF ])); - (phase as StatStageChangePhase)["onChange"]!(mockPokemon, [Stat.DEF, Stat.SPDEF], [1, 1]); + (phase as StatStageChangePhase)["onChange"]!(mockPokemon, [ Stat.DEF, Stat.SPDEF ], [ 1, 1 ]); }); subject.onAdd(mockPokemon); @@ -52,9 +52,9 @@ describe("BattlerTag - StockpilingTag", () => { vi.spyOn(mockPokemon.scene, "unshiftPhase").mockImplementation(phase => { expect(phase).toBeInstanceOf(StatStageChangePhase); expect((phase as StatStageChangePhase)["stages"]).toEqual(1); - expect((phase as StatStageChangePhase)["stats"]).toEqual(expect.arrayContaining([Stat.DEF, Stat.SPDEF])); + expect((phase as StatStageChangePhase)["stats"]).toEqual(expect.arrayContaining([ Stat.DEF, Stat.SPDEF ])); - (phase as StatStageChangePhase)["onChange"]!(mockPokemon, [ Stat.DEF, Stat.SPDEF ], [1, 1]); + (phase as StatStageChangePhase)["onChange"]!(mockPokemon, [ Stat.DEF, Stat.SPDEF ], [ 1, 1 ]); }); subject.onAdd(mockPokemon); @@ -79,7 +79,7 @@ describe("BattlerTag - StockpilingTag", () => { expect((phase as StatStageChangePhase)["stages"]).toEqual(1); expect((phase as StatStageChangePhase)["stats"]).toEqual(expect.arrayContaining([ Stat.DEF, Stat.SPDEF ])); - (phase as StatStageChangePhase)["onChange"]!(mockPokemon, [ Stat.DEF, Stat.SPDEF ], [1, 1]); + (phase as StatStageChangePhase)["onChange"]!(mockPokemon, [ Stat.DEF, Stat.SPDEF ], [ 1, 1 ]); }); subject.onOverlap(mockPokemon); @@ -109,7 +109,7 @@ describe("BattlerTag - StockpilingTag", () => { expect((phase as StatStageChangePhase)["stats"]).toEqual(expect.arrayContaining([ Stat.DEF, Stat.SPDEF ])); // def doesn't change - (phase as StatStageChangePhase)["onChange"]!(mockPokemon, [ Stat.SPDEF ], [1]); + (phase as StatStageChangePhase)["onChange"]!(mockPokemon, [ Stat.SPDEF ], [ 1 ]); }); subject.onAdd(mockPokemon); @@ -121,7 +121,7 @@ describe("BattlerTag - StockpilingTag", () => { expect((phase as StatStageChangePhase)["stats"]).toEqual(expect.arrayContaining([ Stat.DEF, Stat.SPDEF ])); // def doesn't change - (phase as StatStageChangePhase)["onChange"]!(mockPokemon, [ Stat.SPDEF ], [1]); + (phase as StatStageChangePhase)["onChange"]!(mockPokemon, [ Stat.SPDEF ], [ 1 ]); }); subject.onOverlap(mockPokemon); @@ -145,13 +145,13 @@ describe("BattlerTag - StockpilingTag", () => { // fourth stack should not be applied subject.onOverlap(mockPokemon); expect(subject.stockpiledCount).toBe(3); - expect(subject.statChangeCounts).toMatchObject({ [ Stat.DEF ]: 0, [Stat.SPDEF]: 2 }); + expect(subject.statChangeCounts).toMatchObject({ [Stat.DEF]: 0, [Stat.SPDEF]: 2 }); // removing tag should reverse stat changes vi.spyOn(mockPokemon.scene, "unshiftPhase").mockImplementationOnce(phase => { expect(phase).toBeInstanceOf(StatStageChangePhase); expect((phase as StatStageChangePhase)["stages"]).toEqual(-2); - expect((phase as StatStageChangePhase)["stats"]).toEqual(expect.arrayContaining([Stat.SPDEF])); + expect((phase as StatStageChangePhase)["stats"]).toEqual(expect.arrayContaining([ Stat.SPDEF ])); }); subject.onRemove(mockPokemon); diff --git a/src/test/battlerTags/substitute.test.ts b/src/test/battlerTags/substitute.test.ts index 0802b549823..af0aa63af89 100644 --- a/src/test/battlerTags/substitute.test.ts +++ b/src/test/battlerTags/substitute.test.ts @@ -122,8 +122,8 @@ describe("BattlerTag - SubstituteTag", () => { scene: new BattleScene(), hp: 101, id: 0, - turnData: {acted: true} as PokemonTurnData, - getLastXMoves: vi.fn().mockReturnValue([{move: Moves.TACKLE, result: MoveResult.SUCCESS} as TurnMove]) as Pokemon["getLastXMoves"], + turnData: { acted: true } as PokemonTurnData, + getLastXMoves: vi.fn().mockReturnValue([ { move: Moves.TACKLE, result: MoveResult.SUCCESS } as TurnMove ]) as Pokemon["getLastXMoves"], } as Pokemon; vi.spyOn(messages, "getPokemonNameWithAffix").mockReturnValue(""); diff --git a/src/test/boss-pokemon.test.ts b/src/test/boss-pokemon.test.ts index e316cac0cf6..840b65f3cc6 100644 --- a/src/test/boss-pokemon.test.ts +++ b/src/test/boss-pokemon.test.ts @@ -33,7 +33,7 @@ describe("Boss Pokemon / Shields", () => { .enemyMoveset(Moves.SPLASH) .enemyHeldItems([]) .startingLevel(1000) - .moveset([Moves.FALSE_SWIPE, Moves.SUPER_FANG, Moves.SPLASH, Moves.PSYCHIC]) + .moveset([ Moves.FALSE_SWIPE, Moves.SUPER_FANG, Moves.SPLASH, Moves.PSYCHIC ]) .ability(Abilities.NO_GUARD); }); @@ -172,7 +172,7 @@ describe("Boss Pokemon / Shields", () => { game.move.select(Moves.SPLASH); await game.toNextTurn(); // All broken shields give +1 stat boost, except the last two that gives +2 - totalStatStages += i >= shieldsToBreak -1? 2 : 1; + totalStatStages += i >= shieldsToBreak - 1 ? 2 : 1; expect(getTotalStatStageBoosts(boss1)).toBe(totalStatStages); } diff --git a/src/test/daily_mode.test.ts b/src/test/daily_mode.test.ts index 58692330272..f832d17cc6c 100644 --- a/src/test/daily_mode.test.ts +++ b/src/test/daily_mode.test.ts @@ -58,7 +58,7 @@ describe("Shop modifications", async () => { .startingLevel(100) // Avoid levelling up .enemyLevel(1000) // Avoid opponent dying before game.doKillOpponents() .disableTrainerWaves() - .moveset([Moves.KOWTOW_CLEAVE]) + .moveset([ Moves.KOWTOW_CLEAVE ]) .enemyMoveset(Moves.SPLASH); game.modifiers .addCheck("EVIOLITE") diff --git a/src/test/data/splash_messages.test.ts b/src/test/data/splash_messages.test.ts index 7e07b9a6e77..b9ed5b9d365 100644 --- a/src/test/data/splash_messages.test.ts +++ b/src/test/data/splash_messages.test.ts @@ -51,8 +51,8 @@ function testSeason(startDate: Date, endDate: Date, prefix: string) { const afterDate = new Date(endDate); afterDate.setDate(endDate.getDate() + 1); - const dates: Date[] = [beforeDate, startDate, endDate, afterDate]; - const [before, start, end, after] = dates.map((date) => { + const dates: Date[] = [ beforeDate, startDate, endDate, afterDate ]; + const [ before, start, end, after ] = dates.map((date) => { vi.setSystemTime(date); console.log("System time set to", date); const count = getSplashMessages().filter(filterFn).length; diff --git a/src/test/eggs/egg.test.ts b/src/test/eggs/egg.test.ts index 053ff8f1112..cf53cca5af8 100644 --- a/src/test/eggs/egg.test.ts +++ b/src/test/eggs/egg.test.ts @@ -237,7 +237,7 @@ describe("Egg Generation Tests", () => { }); it("should increase egg pity", () => { const scene = game.scene; - const startPityValues = [...scene.gameData.eggPity]; + const startPityValues = [ ...scene.gameData.eggPity ]; new Egg({ scene, sourceType: EggSourceType.GACHA_MOVE, pulled: true, tier: EggTier.COMMON }); @@ -247,7 +247,7 @@ describe("Egg Generation Tests", () => { }); it("should increase legendary egg pity by two", () => { const scene = game.scene; - const startPityValues = [...scene.gameData.eggPity]; + const startPityValues = [ ...scene.gameData.eggPity ]; new Egg({ scene, sourceType: EggSourceType.GACHA_LEGENDARY, pulled: true, tier: EggTier.COMMON }); @@ -323,7 +323,7 @@ describe("Egg Generation Tests", () => { scene.setSeed("ABCDEFGHIJKLMNOPQRSTUVWXYZ"); scene.resetSeed(); - const firstEgg = new Egg({scene, sourceType: EggSourceType.GACHA_SHINY, tier: EggTier.COMMON}); + const firstEgg = new Egg({ scene, sourceType: EggSourceType.GACHA_SHINY, tier: EggTier.COMMON }); const firstHatch = firstEgg.generatePlayerPokemon(scene); let diffEggMove = false; let diffSpecies = false; @@ -334,7 +334,7 @@ describe("Egg Generation Tests", () => { scene.setSeed("ABCDEFGHIJKLMNOPQRSTUVWXYZ"); scene.resetSeed(); // Make sure that eggs are unpredictable even if using same seed - const newEgg = new Egg({scene, sourceType: EggSourceType.GACHA_SHINY, tier: EggTier.COMMON}); + const newEgg = new Egg({ scene, sourceType: EggSourceType.GACHA_SHINY, tier: EggTier.COMMON }); const newHatch = newEgg.generatePlayerPokemon(scene); diffEggMove = diffEggMove || (newEgg.eggMoveIndex !== firstEgg.eggMoveIndex); diffSpecies = diffSpecies || (newHatch.species.speciesId !== firstHatch.species.speciesId); @@ -353,7 +353,7 @@ describe("Egg Generation Tests", () => { scene.setSeed("ABCDEFGHIJKLMNOPQRSTUVWXYZ"); scene.resetSeed(); - const firstEgg = new Egg({scene, species: Species.BULBASAUR}); + const firstEgg = new Egg({ scene, species: Species.BULBASAUR }); const firstHatch = firstEgg.generatePlayerPokemon(scene); let diffEggMove = false; let diffSpecies = false; @@ -363,7 +363,7 @@ describe("Egg Generation Tests", () => { scene.setSeed("ABCDEFGHIJKLMNOPQRSTUVWXYZ"); scene.resetSeed(); // Make sure that eggs are unpredictable even if using same seed - const newEgg = new Egg({scene, species: Species.BULBASAUR}); + const newEgg = new Egg({ scene, species: Species.BULBASAUR }); const newHatch = newEgg.generatePlayerPokemon(scene); diffEggMove = diffEggMove || (newEgg.eggMoveIndex !== firstEgg.eggMoveIndex); diffSpecies = diffSpecies || (newHatch.species.speciesId !== firstHatch.species.speciesId); diff --git a/src/test/eggs/manaphy-egg.test.ts b/src/test/eggs/manaphy-egg.test.ts index 257bf330bb8..3b2c40ae84a 100644 --- a/src/test/eggs/manaphy-egg.test.ts +++ b/src/test/eggs/manaphy-egg.test.ts @@ -60,8 +60,8 @@ describe("Manaphy Eggs", () => { } expect(manaphyCount + phioneCount).toBe(EGG_HATCH_COUNT); - expect(manaphyCount).toBe(1/8 * EGG_HATCH_COUNT); - expect(rareEggMoveCount).toBe(1/12 * EGG_HATCH_COUNT); + expect(manaphyCount).toBe(1 / 8 * EGG_HATCH_COUNT); + expect(rareEggMoveCount).toBe(1 / 12 * EGG_HATCH_COUNT); }); it("should have correct Manaphy rates and Rare Egg Move rates, from Phione species eggs", () => { @@ -86,8 +86,8 @@ describe("Manaphy Eggs", () => { } expect(manaphyCount + phioneCount).toBe(EGG_HATCH_COUNT); - expect(manaphyCount).toBe(1/8 * EGG_HATCH_COUNT); - expect(rareEggMoveCount).toBe(1/6 * EGG_HATCH_COUNT); + expect(manaphyCount).toBe(1 / 8 * EGG_HATCH_COUNT); + expect(rareEggMoveCount).toBe(1 / 6 * EGG_HATCH_COUNT); }); it("should have correct Manaphy rates and Rare Egg Move rates, from Manaphy species eggs", () => { @@ -113,6 +113,6 @@ describe("Manaphy Eggs", () => { expect(phioneCount).toBe(0); expect(manaphyCount).toBe(EGG_HATCH_COUNT); - expect(rareEggMoveCount).toBe(1/6 * EGG_HATCH_COUNT); + expect(rareEggMoveCount).toBe(1 / 6 * EGG_HATCH_COUNT); }); }); diff --git a/src/test/endless_boss.test.ts b/src/test/endless_boss.test.ts index 8a564695e42..c9f3afc3936 100644 --- a/src/test/endless_boss.test.ts +++ b/src/test/endless_boss.test.ts @@ -32,7 +32,7 @@ describe("Endless Boss", () => { it(`should spawn a minor boss every ${EndlessBossWave.Minor} waves in END biome in Endless`, async () => { game.override.startingWave(EndlessBossWave.Minor); - await game.runToFinalBossEncounter([Species.BIDOOF], GameModes.ENDLESS); + await game.runToFinalBossEncounter([ Species.BIDOOF ], GameModes.ENDLESS); expect(game.scene.currentBattle.waveIndex).toBe(EndlessBossWave.Minor); expect(game.scene.arena.biomeType).toBe(Biome.END); @@ -44,7 +44,7 @@ describe("Endless Boss", () => { it(`should spawn a major boss every ${EndlessBossWave.Major} waves in END biome in Endless`, async () => { game.override.startingWave(EndlessBossWave.Major); - await game.runToFinalBossEncounter([Species.BIDOOF], GameModes.ENDLESS); + await game.runToFinalBossEncounter([ Species.BIDOOF ], GameModes.ENDLESS); expect(game.scene.currentBattle.waveIndex).toBe(EndlessBossWave.Major); expect(game.scene.arena.biomeType).toBe(Biome.END); @@ -56,7 +56,7 @@ describe("Endless Boss", () => { it(`should spawn a minor boss every ${EndlessBossWave.Minor} waves in END biome in Spliced Endless`, async () => { game.override.startingWave(EndlessBossWave.Minor); - await game.runToFinalBossEncounter([Species.BIDOOF], GameModes.SPLICED_ENDLESS); + await game.runToFinalBossEncounter([ Species.BIDOOF ], GameModes.SPLICED_ENDLESS); expect(game.scene.currentBattle.waveIndex).toBe(EndlessBossWave.Minor); expect(game.scene.arena.biomeType).toBe(Biome.END); @@ -68,7 +68,7 @@ describe("Endless Boss", () => { it(`should spawn a major boss every ${EndlessBossWave.Major} waves in END biome in Spliced Endless`, async () => { game.override.startingWave(EndlessBossWave.Major); - await game.runToFinalBossEncounter([Species.BIDOOF], GameModes.SPLICED_ENDLESS); + await game.runToFinalBossEncounter([ Species.BIDOOF ], GameModes.SPLICED_ENDLESS); expect(game.scene.currentBattle.waveIndex).toBe(EndlessBossWave.Major); expect(game.scene.arena.biomeType).toBe(Biome.END); @@ -80,7 +80,7 @@ describe("Endless Boss", () => { it(`should NOT spawn major or minor boss outside wave ${EndlessBossWave.Minor}s in END biome`, async () => { game.override.startingWave(EndlessBossWave.Minor - 1); - await game.runToFinalBossEncounter([Species.BIDOOF], GameModes.ENDLESS); + await game.runToFinalBossEncounter([ Species.BIDOOF ], GameModes.ENDLESS); expect(game.scene.currentBattle.waveIndex).not.toBe(EndlessBossWave.Minor); expect(game.scene.getEnemyPokemon()!.species.speciesId).not.toBe(Species.ETERNATUS); diff --git a/src/test/enemy_command.test.ts b/src/test/enemy_command.test.ts index 53cddc86efb..49419f5b34d 100644 --- a/src/test/enemy_command.test.ts +++ b/src/test/enemy_command.test.ts @@ -23,7 +23,7 @@ function getEnemyMoveChoices(pokemon: EnemyPokemon, moveChoices: MoveChoiceSet): moveChoices[queuedMove.move]++; } - for (const [moveId, count] of Object.entries(moveChoices)) { + for (const [ moveId, count ] of Object.entries(moveChoices)) { console.log(`Move: ${allMoves[moveId].name} Count: ${count} (${count / NUM_TRIALS * 100}%)`); } } @@ -55,11 +55,11 @@ describe("Enemy Commands - Move Selection", () => { async () => { game.override .enemySpecies(Species.ETERNATUS) - .enemyMoveset([Moves.ETERNABEAM, Moves.SLUDGE_BOMB, Moves.DRAGON_DANCE, Moves.COSMIC_POWER]) + .enemyMoveset([ Moves.ETERNABEAM, Moves.SLUDGE_BOMB, Moves.DRAGON_DANCE, Moves.COSMIC_POWER ]) .startingLevel(1) .enemyLevel(100); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); const enemyPokemon = game.scene.getEnemyPokemon()!; enemyPokemon.aiType = AiType.SMART_RANDOM; @@ -82,11 +82,11 @@ describe("Enemy Commands - Move Selection", () => { async () => { game.override .enemySpecies(Species.KANGASKHAN) - .enemyMoveset([Moves.LAST_RESORT, Moves.GIGA_IMPACT, Moves.SPLASH, Moves.SWORDS_DANCE]) + .enemyMoveset([ Moves.LAST_RESORT, Moves.GIGA_IMPACT, Moves.SPLASH, Moves.SWORDS_DANCE ]) .startingLevel(1) .enemyLevel(100); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); const enemyPokemon = game.scene.getEnemyPokemon()!; enemyPokemon.aiType = AiType.SMART_RANDOM; diff --git a/src/test/escape-calculations.test.ts b/src/test/escape-calculations.test.ts index ecf22fc74aa..cc18fd78066 100644 --- a/src/test/escape-calculations.test.ts +++ b/src/test/escape-calculations.test.ts @@ -32,13 +32,13 @@ describe("Escape chance calculations", () => { }); it("single non-boss opponent", async () => { - await game.classicMode.startBattle([Species.BULBASAUR]); + await game.classicMode.startBattle([ Species.BULBASAUR ]); const playerPokemon = game.scene.getPlayerField(); const enemyField = game.scene.getEnemyField(); const enemySpeed = 100; // set enemyPokemon's speed to 100 - vi.spyOn(enemyField[0], "stats", "get").mockReturnValue([20, 20, 20, 20, 20, enemySpeed]); + vi.spyOn(enemyField[0], "stats", "get").mockReturnValue([ 20, 20, 20, 20, 20, enemySpeed ]); const commandPhase = game.scene.getCurrentPhase() as CommandPhase; commandPhase.handleCommand(Command.RUN, 0); @@ -79,7 +79,7 @@ describe("Escape chance calculations", () => { // sets the number of escape attempts to the required amount game.scene.currentBattle.escapeAttempts = escapeChances[i].escapeAttempts; // set playerPokemon's speed to a multiple of the enemySpeed - vi.spyOn(playerPokemon[0], "stats", "get").mockReturnValue([20, 20, 20, 20, 20, escapeChances[i].pokemonSpeedRatio * enemySpeed]); + vi.spyOn(playerPokemon[0], "stats", "get").mockReturnValue([ 20, 20, 20, 20, 20, escapeChances[i].pokemonSpeedRatio * enemySpeed ]); phase.attemptRunAway(playerPokemon, enemyField, escapePercentage); expect(escapePercentage.value).toBe(escapeChances[i].expectedEscapeChance); } @@ -87,7 +87,7 @@ describe("Escape chance calculations", () => { it("double non-boss opponent", async () => { game.override.battleType("double"); - await game.classicMode.startBattle([Species.BULBASAUR, Species.ABOMASNOW]); + await game.classicMode.startBattle([ Species.BULBASAUR, Species.ABOMASNOW ]); const playerPokemon = game.scene.getPlayerField(); const enemyField = game.scene.getEnemyField(); @@ -98,9 +98,9 @@ describe("Escape chance calculations", () => { // this is used to find the ratio of the player's first pokemon const playerASpeedPercentage = 0.4; // set enemyAPokemon's speed to 70 - vi.spyOn(enemyField[0], "stats", "get").mockReturnValue([20, 20, 20, 20, 20, enemyASpeed]); + vi.spyOn(enemyField[0], "stats", "get").mockReturnValue([ 20, 20, 20, 20, 20, enemyASpeed ]); // set enemyBPokemon's speed to 30 - vi.spyOn(enemyField[1], "stats", "get").mockReturnValue([20, 20, 20, 20, 20, enemyBSpeed]); + vi.spyOn(enemyField[1], "stats", "get").mockReturnValue([ 20, 20, 20, 20, 20, enemyBSpeed ]); const commandPhase = game.scene.getCurrentPhase() as CommandPhase; commandPhase.handleCommand(Command.RUN, 0); @@ -141,9 +141,9 @@ describe("Escape chance calculations", () => { // sets the number of escape attempts to the required amount game.scene.currentBattle.escapeAttempts = escapeChances[i].escapeAttempts; // set the first playerPokemon's speed to a multiple of the enemySpeed - vi.spyOn(playerPokemon[0], "stats", "get").mockReturnValue([20, 20, 20, 20, 20, Math.floor(escapeChances[i].pokemonSpeedRatio * totalEnemySpeed * playerASpeedPercentage)]); + vi.spyOn(playerPokemon[0], "stats", "get").mockReturnValue([ 20, 20, 20, 20, 20, Math.floor(escapeChances[i].pokemonSpeedRatio * totalEnemySpeed * playerASpeedPercentage) ]); // set the second playerPokemon's speed to the remaining value of speed - vi.spyOn(playerPokemon[1], "stats", "get").mockReturnValue([20, 20, 20, 20, 20, escapeChances[i].pokemonSpeedRatio * totalEnemySpeed - playerPokemon[0].stats[5]]); + vi.spyOn(playerPokemon[1], "stats", "get").mockReturnValue([ 20, 20, 20, 20, 20, escapeChances[i].pokemonSpeedRatio * totalEnemySpeed - playerPokemon[0].stats[5] ]); phase.attemptRunAway(playerPokemon, enemyField, escapePercentage); // checks to make sure the escape values are the same expect(escapePercentage.value).toBe(escapeChances[i].expectedEscapeChance); @@ -154,13 +154,13 @@ describe("Escape chance calculations", () => { it("single boss opponent", async () => { game.override.startingWave(10); - await game.classicMode.startBattle([Species.BULBASAUR]); + await game.classicMode.startBattle([ Species.BULBASAUR ]); const playerPokemon = game.scene.getPlayerField()!; const enemyField = game.scene.getEnemyField()!; const enemySpeed = 100; // set enemyPokemon's speed to 100 - vi.spyOn(enemyField[0], "stats", "get").mockReturnValue([20, 20, 20, 20, 20, enemySpeed]); + vi.spyOn(enemyField[0], "stats", "get").mockReturnValue([ 20, 20, 20, 20, 20, enemySpeed ]); const commandPhase = game.scene.getCurrentPhase() as CommandPhase; commandPhase.handleCommand(Command.RUN, 0); @@ -215,7 +215,7 @@ describe("Escape chance calculations", () => { // sets the number of escape attempts to the required amount game.scene.currentBattle.escapeAttempts = escapeChances[i].escapeAttempts; // set playerPokemon's speed to a multiple of the enemySpeed - vi.spyOn(playerPokemon[0], "stats", "get").mockReturnValue([20, 20, 20, 20, 20, escapeChances[i].pokemonSpeedRatio * enemySpeed]); + vi.spyOn(playerPokemon[0], "stats", "get").mockReturnValue([ 20, 20, 20, 20, 20, escapeChances[i].pokemonSpeedRatio * enemySpeed ]); phase.attemptRunAway(playerPokemon, enemyField, escapePercentage); expect(escapePercentage.value).toBe(escapeChances[i].expectedEscapeChance); } @@ -224,7 +224,7 @@ describe("Escape chance calculations", () => { it("double boss opponent", async () => { game.override.battleType("double"); game.override.startingWave(10); - await game.classicMode.startBattle([Species.BULBASAUR, Species.ABOMASNOW]); + await game.classicMode.startBattle([ Species.BULBASAUR, Species.ABOMASNOW ]); const playerPokemon = game.scene.getPlayerField(); const enemyField = game.scene.getEnemyField(); @@ -235,9 +235,9 @@ describe("Escape chance calculations", () => { // this is used to find the ratio of the player's first pokemon const playerASpeedPercentage = 0.8; // set enemyAPokemon's speed to 70 - vi.spyOn(enemyField[0], "stats", "get").mockReturnValue([20, 20, 20, 20, 20, enemyASpeed]); + vi.spyOn(enemyField[0], "stats", "get").mockReturnValue([ 20, 20, 20, 20, 20, enemyASpeed ]); // set enemyBPokemon's speed to 30 - vi.spyOn(enemyField[1], "stats", "get").mockReturnValue([20, 20, 20, 20, 20, enemyBSpeed]); + vi.spyOn(enemyField[1], "stats", "get").mockReturnValue([ 20, 20, 20, 20, 20, enemyBSpeed ]); const commandPhase = game.scene.getCurrentPhase() as CommandPhase; commandPhase.handleCommand(Command.RUN, 0); @@ -290,9 +290,9 @@ describe("Escape chance calculations", () => { // sets the number of escape attempts to the required amount game.scene.currentBattle.escapeAttempts = escapeChances[i].escapeAttempts; // set the first playerPokemon's speed to a multiple of the enemySpeed - vi.spyOn(playerPokemon[0], "stats", "get").mockReturnValue([20, 20, 20, 20, 20, Math.floor(escapeChances[i].pokemonSpeedRatio * totalEnemySpeed * playerASpeedPercentage)]); + vi.spyOn(playerPokemon[0], "stats", "get").mockReturnValue([ 20, 20, 20, 20, 20, Math.floor(escapeChances[i].pokemonSpeedRatio * totalEnemySpeed * playerASpeedPercentage) ]); // set the second playerPokemon's speed to the remaining value of speed - vi.spyOn(playerPokemon[1], "stats", "get").mockReturnValue([20, 20, 20, 20, 20, escapeChances[i].pokemonSpeedRatio * totalEnemySpeed - playerPokemon[0].stats[5]]); + vi.spyOn(playerPokemon[1], "stats", "get").mockReturnValue([ 20, 20, 20, 20, 20, escapeChances[i].pokemonSpeedRatio * totalEnemySpeed - playerPokemon[0].stats[5] ]); phase.attemptRunAway(playerPokemon, enemyField, escapePercentage); // checks to make sure the escape values are the same expect(escapePercentage.value).toBe(escapeChances[i].expectedEscapeChance); diff --git a/src/test/evolution.test.ts b/src/test/evolution.test.ts index 1a5a2be996f..b94d45d6537 100644 --- a/src/test/evolution.test.ts +++ b/src/test/evolution.test.ts @@ -33,7 +33,7 @@ describe("Evolution", () => { }); it("should keep hidden ability after evolving", async () => { - await game.classicMode.runToSummon([Species.EEVEE, Species.TRAPINCH]); + await game.classicMode.runToSummon([ Species.EEVEE, Species.TRAPINCH ]); const eevee = game.scene.getParty()[0]; const trapinch = game.scene.getParty()[1]; @@ -48,7 +48,7 @@ describe("Evolution", () => { }); it("should keep same ability slot after evolving", async () => { - await game.classicMode.runToSummon([Species.BULBASAUR, Species.CHARMANDER]); + await game.classicMode.runToSummon([ Species.BULBASAUR, Species.CHARMANDER ]); const bulbasaur = game.scene.getParty()[0]; const charmander = game.scene.getParty()[1]; @@ -63,7 +63,7 @@ describe("Evolution", () => { }); it("should handle illegal abilityIndex values", async () => { - await game.classicMode.runToSummon([Species.SQUIRTLE]); + await game.classicMode.runToSummon([ Species.SQUIRTLE ]); const squirtle = game.scene.getPlayerPokemon()!; squirtle.abilityIndex = 5; @@ -73,7 +73,7 @@ describe("Evolution", () => { }); it("should handle nincada's unique evolution", async () => { - await game.classicMode.runToSummon([Species.NINCADA]); + await game.classicMode.runToSummon([ Species.NINCADA ]); const nincada = game.scene.getPlayerPokemon()!; nincada.abilityIndex = 2; @@ -95,14 +95,14 @@ describe("Evolution", () => { }); it("should increase both HP and max HP when evolving", async () => { - game.override.moveset([Moves.SURF]) + game.override.moveset([ Moves.SURF ]) .enemySpecies(Species.GOLEM) .enemyMoveset(Moves.SPLASH) .startingWave(21) .startingLevel(16) .enemyLevel(50); - await game.startBattle([Species.TOTODILE]); + await game.startBattle([ Species.TOTODILE ]); const totodile = game.scene.getPlayerPokemon()!; const hpBefore = totodile.hp; @@ -122,14 +122,14 @@ describe("Evolution", () => { }); it("should not fully heal HP when evolving", async () => { - game.override.moveset([Moves.SURF]) + game.override.moveset([ Moves.SURF ]) .enemySpecies(Species.GOLEM) .enemyMoveset(Moves.SPLASH) .startingWave(21) .startingLevel(13) .enemyLevel(30); - await game.startBattle([Species.CYNDAQUIL]); + await game.startBattle([ Species.CYNDAQUIL ]); const cyndaquil = game.scene.getPlayerPokemon()!; cyndaquil.hp = Math.floor(cyndaquil.getMaxHp() / 2); @@ -162,7 +162,7 @@ describe("Evolution", () => { * If the value is 0, it's a 3 family maushold, whereas if the value is * 1, 2 or 3, it's a 4 family maushold */ - await game.startBattle([Species.TANDEMAUS]); // starts us off with a tandemaus + await game.startBattle([ Species.TANDEMAUS ]); // starts us off with a tandemaus const playerPokemon = game.scene.getPlayerPokemon()!; playerPokemon.level = 25; // tandemaus evolves at level 25 vi.spyOn(Utils, "randSeedInt").mockReturnValue(0); // setting the random generator to be 0 to force a three family maushold diff --git a/src/test/field/pokemon.test.ts b/src/test/field/pokemon.test.ts index 225f302ff0c..aeaecab5874 100644 --- a/src/test/field/pokemon.test.ts +++ b/src/test/field/pokemon.test.ts @@ -24,7 +24,7 @@ describe("Spec - Pokemon", () => { }); it("should not crash when trying to set status of undefined", async () => { - await game.classicMode.runToSummon([Species.ABRA]); + await game.classicMode.runToSummon([ Species.ABRA ]); const pkm = game.scene.getPlayerPokemon()!; expect(pkm).toBeDefined(); @@ -37,7 +37,7 @@ describe("Spec - Pokemon", () => { beforeEach(async () => { game.override.enemySpecies(Species.ZUBAT); - await game.classicMode.runToSummon([Species.ABRA, Species.ABRA, Species.ABRA, Species.ABRA, Species.ABRA]); // 5 Abra, only 1 slot left + await game.classicMode.runToSummon([ Species.ABRA, Species.ABRA, Species.ABRA, Species.ABRA, Species.ABRA ]); // 5 Abra, only 1 slot left scene = game.scene; }); @@ -68,7 +68,7 @@ describe("Spec - Pokemon", () => { it("should not share tms between different forms", async () => { game.override.starterForms({ [Species.ROTOM]: 4 }); - await game.classicMode.startBattle([Species.ROTOM]); + await game.classicMode.startBattle([ Species.ROTOM ]); const fanRotom = game.scene.getPlayerPokemon()!; diff --git a/src/test/final_boss.test.ts b/src/test/final_boss.test.ts index fee4dc6c8f6..de2cddff944 100644 --- a/src/test/final_boss.test.ts +++ b/src/test/final_boss.test.ts @@ -38,7 +38,7 @@ describe("Final Boss", () => { }); it("should spawn Eternatus on wave 200 in END biome", async () => { - await game.runToFinalBossEncounter([Species.BIDOOF], GameModes.CLASSIC); + await game.runToFinalBossEncounter([ Species.BIDOOF ], GameModes.CLASSIC); expect(game.scene.currentBattle.waveIndex).toBe(FinalWave.Classic); expect(game.scene.arena.biomeType).toBe(Biome.END); @@ -47,7 +47,7 @@ describe("Final Boss", () => { it("should NOT spawn Eternatus before wave 200 in END biome", async () => { game.override.startingWave(FinalWave.Classic - 1); - await game.runToFinalBossEncounter([Species.BIDOOF], GameModes.CLASSIC); + await game.runToFinalBossEncounter([ Species.BIDOOF ], GameModes.CLASSIC); expect(game.scene.currentBattle.waveIndex).not.toBe(FinalWave.Classic); expect(game.scene.arena.biomeType).toBe(Biome.END); @@ -56,7 +56,7 @@ describe("Final Boss", () => { it("should NOT spawn Eternatus outside of END biome", async () => { game.override.startingBiome(Biome.FOREST); - await game.runToFinalBossEncounter([Species.BIDOOF], GameModes.CLASSIC); + await game.runToFinalBossEncounter([ Species.BIDOOF ], GameModes.CLASSIC); expect(game.scene.currentBattle.waveIndex).toBe(FinalWave.Classic); expect(game.scene.arena.biomeType).not.toBe(Biome.END); @@ -64,7 +64,7 @@ describe("Final Boss", () => { }); it("should not have passive enabled on Eternatus", async () => { - await game.runToFinalBossEncounter([Species.BIDOOF], GameModes.CLASSIC); + await game.runToFinalBossEncounter([ Species.BIDOOF ], GameModes.CLASSIC); const eternatus = game.scene.getEnemyPokemon()!; expect(eternatus.species.speciesId).toBe(Species.ETERNATUS); @@ -72,7 +72,7 @@ describe("Final Boss", () => { }); it("should change form on direct hit down to last boss fragment", async () => { - await game.runToFinalBossEncounter([Species.KYUREM], GameModes.CLASSIC); + await game.runToFinalBossEncounter([ Species.KYUREM ], GameModes.CLASSIC); await game.phaseInterceptor.to("CommandPhase"); // Eternatus phase 1 @@ -101,7 +101,7 @@ describe("Final Boss", () => { it("should change form on status damage down to last boss fragment", async () => { game.override.ability(Abilities.NO_GUARD); - await game.runToFinalBossEncounter([Species.BIDOOF], GameModes.CLASSIC); + await game.runToFinalBossEncounter([ Species.BIDOOF ], GameModes.CLASSIC); await game.phaseInterceptor.to("CommandPhase"); // Eternatus phase 1 diff --git a/src/test/internals.test.ts b/src/test/internals.test.ts index 3c76b40e901..ce2cd55dbc6 100644 --- a/src/test/internals.test.ts +++ b/src/test/internals.test.ts @@ -23,7 +23,7 @@ describe("Internals", () => { }); it("should provide Eevee with 3 defined abilities", async () => { - await game.classicMode.runToSummon([Species.EEVEE]); + await game.classicMode.runToSummon([ Species.EEVEE ]); const eevee = game.scene.getPlayerPokemon()!; expect(eevee.getSpeciesForm().getAbilityCount()).toBe(3); @@ -34,7 +34,7 @@ describe("Internals", () => { }); it("should set Eeeve abilityIndex between 0-2", async () => { - await game.classicMode.runToSummon([Species.EEVEE]); + await game.classicMode.runToSummon([ Species.EEVEE ]); const eevee = game.scene.getPlayerPokemon()!; expect(eevee.abilityIndex).toBeGreaterThanOrEqual(0); diff --git a/src/test/items/exp_booster.test.ts b/src/test/items/exp_booster.test.ts index 9a7464e4866..36107329706 100644 --- a/src/test/items/exp_booster.test.ts +++ b/src/test/items/exp_booster.test.ts @@ -28,7 +28,7 @@ describe("EXP Modifier Items", () => { }); it("EXP booster items stack multiplicatively", async() => { - game.override.startingHeldItems([{name: "LUCKY_EGG", count: 3}, {name: "GOLDEN_EGG"}]); + game.override.startingHeldItems([{ name: "LUCKY_EGG", count: 3 }, { name: "GOLDEN_EGG" }]); await game.startBattle(); const partyMember = game.scene.getPlayerPokemon()!; diff --git a/src/test/items/grip_claw.test.ts b/src/test/items/grip_claw.test.ts index 29d39cabc3e..9d44a9e4672 100644 --- a/src/test/items/grip_claw.test.ts +++ b/src/test/items/grip_claw.test.ts @@ -30,7 +30,7 @@ describe("Items - Grip Claw", () => { game.override .battleType("double") - .moveset([Moves.POPULATION_BOMB, Moves.SPLASH]) + .moveset([ Moves.POPULATION_BOMB, Moves.SPLASH ]) .startingHeldItems([ { name: "GRIP_CLAW", count: 5 }, // TODO: Find a way to mock the steal chance of grip claw { name: "MULTI_LENS", count: 3 }, @@ -51,7 +51,7 @@ describe("Items - Grip Claw", () => { it( "should only steal items from the attack target", async () => { - await game.startBattle([Species.PANSEAR, Species.ROWLET]); + await game.startBattle([ Species.PANSEAR, Species.ROWLET ]); const enemyPokemon = game.scene.getEnemyField(); diff --git a/src/test/items/leek.test.ts b/src/test/items/leek.test.ts index af20516ef83..e27462a9265 100644 --- a/src/test/items/leek.test.ts +++ b/src/test/items/leek.test.ts @@ -25,7 +25,7 @@ describe("Items - Leek", () => { game.override .enemySpecies(Species.MAGIKARP) - .enemyMoveset([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]) + .enemyMoveset([ Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH ]) .startingHeldItems([{ name: "LEEK" }]) .moveset([ Moves.TACKLE ]) .disableCrits() @@ -82,7 +82,7 @@ describe("Items - Leek", () => { it("should raise CRIT stage by 2 when held by FARFETCHD line fused with Pokemon", async () => { // Randomly choose from the Farfetch'd line - const species = [Species.FARFETCHD, Species.GALAR_FARFETCHD, Species.SIRFETCHD]; + const species = [ Species.FARFETCHD, Species.GALAR_FARFETCHD, Species.SIRFETCHD ]; await game.startBattle([ species[Utils.randInt(species.length)], @@ -113,7 +113,7 @@ describe("Items - Leek", () => { it("should raise CRIT stage by 2 when held by Pokemon fused with FARFETCHD line", async () => { // Randomly choose from the Farfetch'd line - const species = [Species.FARFETCHD, Species.GALAR_FARFETCHD, Species.SIRFETCHD]; + const species = [ Species.FARFETCHD, Species.GALAR_FARFETCHD, Species.SIRFETCHD ]; await game.startBattle([ Species.PIKACHU, diff --git a/src/test/items/leftovers.test.ts b/src/test/items/leftovers.test.ts index 8e548542436..cfbf7c2f734 100644 --- a/src/test/items/leftovers.test.ts +++ b/src/test/items/leftovers.test.ts @@ -27,15 +27,15 @@ describe("Items - Leftovers", () => { game.override.battleType("single"); game.override.startingLevel(2000); game.override.ability(Abilities.UNNERVE); - game.override.moveset([Moves.SPLASH]); + game.override.moveset([ Moves.SPLASH ]); game.override.enemySpecies(Species.SHUCKLE); game.override.enemyAbility(Abilities.UNNERVE); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override.enemyMoveset([ Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE ]); game.override.startingHeldItems([{ name: "LEFTOVERS", count: 1 }]); }); it("leftovers works", async () => { - await game.startBattle([Species.ARCANINE]); + await game.startBattle([ Species.ARCANINE ]); // Make sure leftovers are there expect(game.scene.modifiers[0].type.id).toBe("LEFTOVERS"); diff --git a/src/test/items/light_ball.test.ts b/src/test/items/light_ball.test.ts index 673348e7b7a..78375487f3b 100644 --- a/src/test/items/light_ball.test.ts +++ b/src/test/items/light_ball.test.ts @@ -83,7 +83,7 @@ describe("Items - Light Ball", () => { expect(spAtkValue.value / spAtkStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["LIGHT_BALL"])!.newModifier(partyMember), true); + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "LIGHT_BALL" ])!.newModifier(partyMember), true); partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPATK, spAtkValue); @@ -122,7 +122,7 @@ describe("Items - Light Ball", () => { expect(spAtkValue.value / spAtkStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["LIGHT_BALL"])!.newModifier(partyMember), true); + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "LIGHT_BALL" ])!.newModifier(partyMember), true); partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPATK, spAtkValue); @@ -161,7 +161,7 @@ describe("Items - Light Ball", () => { expect(spAtkValue.value / spAtkStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["LIGHT_BALL"])!.newModifier(partyMember), true); + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "LIGHT_BALL" ])!.newModifier(partyMember), true); partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPATK, spAtkValue); @@ -189,7 +189,7 @@ describe("Items - Light Ball", () => { expect(spAtkValue.value / spAtkStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["LIGHT_BALL"])!.newModifier(partyMember), true); + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "LIGHT_BALL" ])!.newModifier(partyMember), true); partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPATK, spAtkValue); diff --git a/src/test/items/lock_capsule.test.ts b/src/test/items/lock_capsule.test.ts index bc4ca1cb014..2667ecea2dc 100644 --- a/src/test/items/lock_capsule.test.ts +++ b/src/test/items/lock_capsule.test.ts @@ -26,7 +26,7 @@ describe("Items - Lock Capsule", () => { game.override .battleType("single") .startingLevel(200) - .moveset([Moves.SURF]) + .moveset([ Moves.SURF ]) .enemyAbility(Abilities.BALL_FETCH) .startingModifier([{ name: "LOCK_CAPSULE" }]); }); @@ -39,7 +39,7 @@ describe("Items - Lock Capsule", () => { const rewards = game.scene.getCurrentPhase() as SelectModifierPhase; const potion = new ModifierTypeOption(modifierTypes.POTION(), 0, 40); // Common tier item - const rerollCost = rewards.getRerollCost([potion, potion, potion], true); + const rerollCost = rewards.getRerollCost([ potion, potion, potion ], true); expect(rerollCost).toBe(150); }, 20000); diff --git a/src/test/items/metal_powder.test.ts b/src/test/items/metal_powder.test.ts index 0206fd1f471..c577182f350 100644 --- a/src/test/items/metal_powder.test.ts +++ b/src/test/items/metal_powder.test.ts @@ -79,7 +79,7 @@ describe("Items - Metal Powder", () => { expect(defValue.value / defStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["METAL_POWDER"])!.newModifier(partyMember), true); + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "METAL_POWDER" ])!.newModifier(partyMember), true); partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); expect(defValue.value / defStat).toBe(2); @@ -112,7 +112,7 @@ describe("Items - Metal Powder", () => { expect(defValue.value / defStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["METAL_POWDER"])!.newModifier(partyMember), true); + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "METAL_POWDER" ])!.newModifier(partyMember), true); partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); expect(defValue.value / defStat).toBe(2); @@ -145,7 +145,7 @@ describe("Items - Metal Powder", () => { expect(defValue.value / defStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["METAL_POWDER"])!.newModifier(partyMember), true); + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "METAL_POWDER" ])!.newModifier(partyMember), true); partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); expect(defValue.value / defStat).toBe(2); @@ -167,7 +167,7 @@ describe("Items - Metal Powder", () => { expect(defValue.value / defStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["METAL_POWDER"])!.newModifier(partyMember), true); + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "METAL_POWDER" ])!.newModifier(partyMember), true); partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); expect(defValue.value / defStat).toBe(1); diff --git a/src/test/items/quick_powder.test.ts b/src/test/items/quick_powder.test.ts index 344b772feb4..4eb6f6fb164 100644 --- a/src/test/items/quick_powder.test.ts +++ b/src/test/items/quick_powder.test.ts @@ -79,7 +79,7 @@ describe("Items - Quick Powder", () => { expect(spdValue.value / spdStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["QUICK_POWDER"])!.newModifier(partyMember), true); + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "QUICK_POWDER" ])!.newModifier(partyMember), true); partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); expect(spdValue.value / spdStat).toBe(2); @@ -112,7 +112,7 @@ describe("Items - Quick Powder", () => { expect(spdValue.value / spdStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["QUICK_POWDER"])!.newModifier(partyMember), true); + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "QUICK_POWDER" ])!.newModifier(partyMember), true); partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); expect(spdValue.value / spdStat).toBe(2); @@ -145,7 +145,7 @@ describe("Items - Quick Powder", () => { expect(spdValue.value / spdStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["QUICK_POWDER"])!.newModifier(partyMember), true); + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "QUICK_POWDER" ])!.newModifier(partyMember), true); partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); expect(spdValue.value / spdStat).toBe(2); @@ -167,7 +167,7 @@ describe("Items - Quick Powder", () => { expect(spdValue.value / spdStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["QUICK_POWDER"])!.newModifier(partyMember), true); + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "QUICK_POWDER" ])!.newModifier(partyMember), true); partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); expect(spdValue.value / spdStat).toBe(1); diff --git a/src/test/items/thick_club.test.ts b/src/test/items/thick_club.test.ts index bcb6b371264..74158089c77 100644 --- a/src/test/items/thick_club.test.ts +++ b/src/test/items/thick_club.test.ts @@ -79,7 +79,7 @@ describe("Items - Thick Club", () => { expect(atkValue.value / atkStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["THICK_CLUB"])!.newModifier(partyMember), true); + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "THICK_CLUB" ])!.newModifier(partyMember), true); partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); expect(atkValue.value / atkStat).toBe(2); @@ -101,7 +101,7 @@ describe("Items - Thick Club", () => { expect(atkValue.value / atkStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["THICK_CLUB"])!.newModifier(partyMember), true); + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "THICK_CLUB" ])!.newModifier(partyMember), true); partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); expect(atkValue.value / atkStat).toBe(2); @@ -123,7 +123,7 @@ describe("Items - Thick Club", () => { expect(atkValue.value / atkStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["THICK_CLUB"])!.newModifier(partyMember), true); + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "THICK_CLUB" ])!.newModifier(partyMember), true); partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); expect(atkValue.value / atkStat).toBe(2); @@ -160,7 +160,7 @@ describe("Items - Thick Club", () => { expect(atkValue.value / atkStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["THICK_CLUB"])!.newModifier(partyMember), true); + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "THICK_CLUB" ])!.newModifier(partyMember), true); partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); expect(atkValue.value / atkStat).toBe(2); @@ -197,7 +197,7 @@ describe("Items - Thick Club", () => { expect(atkValue.value / atkStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["THICK_CLUB"])!.newModifier(partyMember), true); + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "THICK_CLUB" ])!.newModifier(partyMember), true); partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); expect(atkValue.value / atkStat).toBe(2); @@ -219,7 +219,7 @@ describe("Items - Thick Club", () => { expect(atkValue.value / atkStat).toBe(1); // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], ["THICK_CLUB"])!.newModifier(partyMember), true); + partyMember.scene.addModifier(modifierTypes.SPECIES_STAT_BOOSTER().generateType([], [ "THICK_CLUB" ])!.newModifier(partyMember), true); partyMember.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); expect(atkValue.value / atkStat).toBe(1); diff --git a/src/test/items/toxic_orb.test.ts b/src/test/items/toxic_orb.test.ts index 66806083f6f..35d6e77b209 100644 --- a/src/test/items/toxic_orb.test.ts +++ b/src/test/items/toxic_orb.test.ts @@ -34,8 +34,8 @@ describe("Items - Toxic orb", () => { game.override.ability(Abilities.INSOMNIA); game.override.enemyAbility(Abilities.INSOMNIA); game.override.startingLevel(2000); - game.override.moveset([moveToUse]); - game.override.enemyMoveset([oppMoveToUse, oppMoveToUse, oppMoveToUse, oppMoveToUse]); + game.override.moveset([ moveToUse ]); + game.override.enemyMoveset([ oppMoveToUse, oppMoveToUse, oppMoveToUse, oppMoveToUse ]); game.override.startingHeldItems([{ name: "TOXIC_ORB", }]); diff --git a/src/test/misc.test.ts b/src/test/misc.test.ts index 1052a282a64..3335c4c5523 100644 --- a/src/test/misc.test.ts +++ b/src/test/misc.test.ts @@ -64,7 +64,7 @@ describe("Test misc", () => { it("testing wait phase queue", async () => { const fakeScene = { - phaseQueue: [1, 2, 3] // Initially not empty + phaseQueue: [ 1, 2, 3 ] // Initially not empty }; setTimeout(() => { fakeScene.phaseQueue = []; diff --git a/src/test/moves/after_you.test.ts b/src/test/moves/after_you.test.ts index 025b4804bf1..99f383194aa 100644 --- a/src/test/moves/after_you.test.ts +++ b/src/test/moves/after_you.test.ts @@ -9,7 +9,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; - describe("Moves - After You", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -33,11 +32,11 @@ describe("Moves - After You", () => { .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH) .ability(Abilities.BALL_FETCH) - .moveset([Moves.AFTER_YOU, Moves.SPLASH]); + .moveset([ Moves.AFTER_YOU, Moves.SPLASH ]); }); it("makes the target move immediately after the user", async () => { - await game.classicMode.startBattle([Species.REGIELEKI, Species.SHUCKLE]); + await game.classicMode.startBattle([ Species.REGIELEKI, Species.SHUCKLE ]); game.move.select(Moves.AFTER_YOU, 0, BattlerIndex.PLAYER_2); game.move.select(Moves.SPLASH, 1); @@ -51,7 +50,7 @@ describe("Moves - After You", () => { it("fails if target already moved", async () => { game.override.enemySpecies(Species.SHUCKLE); - await game.classicMode.startBattle([Species.REGIELEKI, Species.PIKACHU]); + await game.classicMode.startBattle([ Species.REGIELEKI, Species.PIKACHU ]); game.move.select(Moves.SPLASH); game.move.select(Moves.AFTER_YOU, 1, BattlerIndex.PLAYER); diff --git a/src/test/moves/alluring_voice.test.ts b/src/test/moves/alluring_voice.test.ts index 3e86b46aa69..2980f102735 100644 --- a/src/test/moves/alluring_voice.test.ts +++ b/src/test/moves/alluring_voice.test.ts @@ -9,7 +9,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; - describe("Moves - Alluring Voice", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -31,12 +30,12 @@ describe("Moves - Alluring Voice", () => { .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.ICE_SCALES) - .enemyMoveset([Moves.HOWL]) + .enemyMoveset([ Moves.HOWL ]) .startingLevel(10) .enemyLevel(10) .starterSpecies(Species.FEEBAS) .ability(Abilities.BALL_FETCH) - .moveset([Moves.ALLURING_VOICE]); + .moveset([ Moves.ALLURING_VOICE ]); }); @@ -46,7 +45,7 @@ describe("Moves - Alluring Voice", () => { const enemy = game.scene.getEnemyPokemon()!; game.move.select(Moves.ALLURING_VOICE); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.phaseInterceptor.to(BerryPhase); expect(enemy.getTag(BattlerTagType.CONFUSED)?.tagType).toBe("CONFUSED"); diff --git a/src/test/moves/aromatherapy.test.ts b/src/test/moves/aromatherapy.test.ts index acc2e9c5fae..f547ed0e54c 100644 --- a/src/test/moves/aromatherapy.test.ts +++ b/src/test/moves/aromatherapy.test.ts @@ -24,7 +24,7 @@ describe("Moves - Aromatherapy", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.AROMATHERAPY, Moves.SPLASH]) + .moveset([ Moves.AROMATHERAPY, Moves.SPLASH ]) .statusEffect(StatusEffect.BURN) .battleType("double") .enemyAbility(Abilities.BALL_FETCH) @@ -32,8 +32,8 @@ describe("Moves - Aromatherapy", () => { }); it("should cure status effect of the user, its ally, and all party pokemon", async () => { - await game.classicMode.startBattle([Species.RATTATA, Species.RATTATA, Species.RATTATA]); - const [leftPlayer, rightPlayer, partyPokemon] = game.scene.getParty(); + await game.classicMode.startBattle([ Species.RATTATA, Species.RATTATA, Species.RATTATA ]); + const [ leftPlayer, rightPlayer, partyPokemon ] = game.scene.getParty(); vi.spyOn(leftPlayer, "resetStatus"); vi.spyOn(rightPlayer, "resetStatus"); @@ -55,8 +55,8 @@ describe("Moves - Aromatherapy", () => { it("should not cure status effect of the target/target's allies", async () => { game.override.enemyStatusEffect(StatusEffect.BURN); - await game.classicMode.startBattle([Species.RATTATA, Species.RATTATA]); - const [leftOpp, rightOpp] = game.scene.getEnemyField(); + await game.classicMode.startBattle([ Species.RATTATA, Species.RATTATA ]); + const [ leftOpp, rightOpp ] = game.scene.getEnemyField(); vi.spyOn(leftOpp, "resetStatus"); vi.spyOn(rightOpp, "resetStatus"); @@ -78,8 +78,8 @@ describe("Moves - Aromatherapy", () => { it("should not cure status effect of allies ON FIELD with Sap Sipper, should still cure allies in party", async () => { game.override.ability(Abilities.SAP_SIPPER); - await game.classicMode.startBattle([Species.RATTATA, Species.RATTATA, Species.RATTATA]); - const [leftPlayer, rightPlayer, partyPokemon] = game.scene.getParty(); + await game.classicMode.startBattle([ Species.RATTATA, Species.RATTATA, Species.RATTATA ]); + const [ leftPlayer, rightPlayer, partyPokemon ] = game.scene.getParty(); vi.spyOn(leftPlayer, "resetStatus"); vi.spyOn(rightPlayer, "resetStatus"); diff --git a/src/test/moves/astonish.test.ts b/src/test/moves/astonish.test.ts index 694ad85803b..d94e50fc9f9 100644 --- a/src/test/moves/astonish.test.ts +++ b/src/test/moves/astonish.test.ts @@ -12,7 +12,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; - describe("Moves - Astonish", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -30,10 +29,10 @@ describe("Moves - Astonish", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleType("single"); - game.override.moveset([Moves.ASTONISH, Moves.SPLASH]); + game.override.moveset([ Moves.ASTONISH, Moves.SPLASH ]); game.override.enemySpecies(Species.BLASTOISE); game.override.enemyAbility(Abilities.INSOMNIA); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override.enemyMoveset([ Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE ]); game.override.startingLevel(100); game.override.enemyLevel(100); @@ -43,7 +42,7 @@ describe("Moves - Astonish", () => { test( "move effect should cancel the target's move on the turn it applies", async () => { - await game.startBattle([Species.MEOWSCARADA]); + await game.startBattle([ Species.MEOWSCARADA ]); const leadPokemon = game.scene.getPlayerPokemon()!; diff --git a/src/test/moves/aurora_veil.test.ts b/src/test/moves/aurora_veil.test.ts index fec280debf4..e71d4ab9d11 100644 --- a/src/test/moves/aurora_veil.test.ts +++ b/src/test/moves/aurora_veil.test.ts @@ -33,17 +33,17 @@ describe("Moves - Aurora Veil", () => { game = new GameManager(phaserGame); game.override.battleType("single"); game.override.ability(Abilities.NONE); - game.override.moveset([Moves.ABSORB, Moves.ROCK_SLIDE, Moves.TACKLE]); + game.override.moveset([ Moves.ABSORB, Moves.ROCK_SLIDE, Moves.TACKLE ]); game.override.enemyLevel(100); game.override.enemySpecies(Species.MAGIKARP); - game.override.enemyMoveset([Moves.AURORA_VEIL, Moves.AURORA_VEIL, Moves.AURORA_VEIL, Moves.AURORA_VEIL]); + game.override.enemyMoveset([ Moves.AURORA_VEIL, Moves.AURORA_VEIL, Moves.AURORA_VEIL, Moves.AURORA_VEIL ]); game.override.disableCrits(); game.override.weather(WeatherType.HAIL); }); it("reduces damage of physical attacks by half in a single battle", async () => { const moveToUse = Moves.TACKLE; - await game.startBattle([Species.SHUCKLE]); + await game.startBattle([ Species.SHUCKLE ]); game.move.select(moveToUse); @@ -57,7 +57,7 @@ describe("Moves - Aurora Veil", () => { game.override.battleType("double"); const moveToUse = Moves.ROCK_SLIDE; - await game.startBattle([Species.SHUCKLE, Species.SHUCKLE]); + await game.startBattle([ Species.SHUCKLE, Species.SHUCKLE ]); game.move.select(moveToUse); game.move.select(moveToUse, 1); @@ -70,7 +70,7 @@ describe("Moves - Aurora Veil", () => { it("reduces damage of special attacks by half in a single battle", async () => { const moveToUse = Moves.ABSORB; - await game.startBattle([Species.SHUCKLE]); + await game.startBattle([ Species.SHUCKLE ]); game.move.select(moveToUse); @@ -85,7 +85,7 @@ describe("Moves - Aurora Veil", () => { game.override.battleType("double"); const moveToUse = Moves.DAZZLING_GLEAM; - await game.startBattle([Species.SHUCKLE, Species.SHUCKLE]); + await game.startBattle([ Species.SHUCKLE, Species.SHUCKLE ]); game.move.select(moveToUse); game.move.select(moveToUse, 1); diff --git a/src/test/moves/autotomize.test.ts b/src/test/moves/autotomize.test.ts index 329b92b38fe..e15642b7ce5 100644 --- a/src/test/moves/autotomize.test.ts +++ b/src/test/moves/autotomize.test.ts @@ -23,7 +23,7 @@ describe("Moves - Autotomize", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.AUTOTOMIZE, Moves.KINGS_SHIELD, Moves.FALSE_SWIPE]) + .moveset([ Moves.AUTOTOMIZE, Moves.KINGS_SHIELD, Moves.FALSE_SWIPE ]) .battleType("single") .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH); @@ -35,7 +35,7 @@ describe("Moves - Autotomize", () => { const twoAutotomizeDracozoltWeight = 0.1; const threeAutotomizeDracozoltWeight = 0.1; - await game.classicMode.startBattle([Species.DRACOZOLT]); + await game.classicMode.startBattle([ Species.DRACOZOLT ]); const playerPokemon = game.scene.getPlayerPokemon()!; expect(playerPokemon.getWeight()).toBe(baseDracozoltWeight); game.move.select(Moves.AUTOTOMIZE); @@ -56,7 +56,7 @@ describe("Moves - Autotomize", () => { const baseAegislashWeight = 53; const autotomizeAegislashWeight = 0.1; - await game.classicMode.startBattle([Species.AEGISLASH]); + await game.classicMode.startBattle([ Species.AEGISLASH ]); const playerPokemon = game.scene.getPlayerPokemon()!; expect(playerPokemon.getWeight()).toBe(baseAegislashWeight); @@ -88,7 +88,7 @@ describe("Moves - Autotomize", () => { const baseLightGroudonWeight = 475; const autotomizeLightGroudonWeight = 425; game.override.ability(Abilities.LIGHT_METAL); - await game.classicMode.startBattle([Species.GROUDON]); + await game.classicMode.startBattle([ Species.GROUDON ]); const playerPokemon = game.scene.getPlayerPokemon()!; expect(playerPokemon.getWeight()).toBe(baseLightGroudonWeight); game.move.select(Moves.AUTOTOMIZE); diff --git a/src/test/moves/baddy_bad.test.ts b/src/test/moves/baddy_bad.test.ts index 87a7e9e049d..1be25704393 100644 --- a/src/test/moves/baddy_bad.test.ts +++ b/src/test/moves/baddy_bad.test.ts @@ -21,7 +21,7 @@ describe("Moves - Baddy Bad", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([ Moves.SPLASH ]) .battleType("single") .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) @@ -31,7 +31,7 @@ describe("Moves - Baddy Bad", () => { it("should not activate Reflect if the move fails due to Protect", async () => { game.override.enemyMoveset(Moves.PROTECT); - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([ Species.FEEBAS ]); game.move.select(Moves.BADDY_BAD); await game.phaseInterceptor.to("BerryPhase"); diff --git a/src/test/moves/baneful_bunker.test.ts b/src/test/moves/baneful_bunker.test.ts index 5f63e3b4313..a0fc0f21ee2 100644 --- a/src/test/moves/baneful_bunker.test.ts +++ b/src/test/moves/baneful_bunker.test.ts @@ -8,7 +8,6 @@ import { BattlerIndex } from "#app/battle"; import { StatusEffect } from "#app/enums/status-effect"; - describe("Moves - Baneful Bunker", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -40,13 +39,13 @@ describe("Moves - Baneful Bunker", () => { test( "should protect the user and poison attackers that make contact", async () => { - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([ Species.CHARIZARD ]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; game.move.select(Moves.SLASH); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.phaseInterceptor.to("BerryPhase", false); expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); expect(leadPokemon.status?.effect === StatusEffect.POISON).toBeTruthy(); @@ -55,13 +54,13 @@ describe("Moves - Baneful Bunker", () => { test( "should protect the user and poison attackers that make contact, regardless of accuracy checks", async () => { - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([ Species.CHARIZARD ]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; game.move.select(Moves.SLASH); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.phaseInterceptor.to("MoveEffectPhase"); await game.move.forceMiss(); @@ -75,13 +74,13 @@ describe("Moves - Baneful Bunker", () => { "should not poison attackers that don't make contact", async () => { game.override.moveset(Moves.FLASH_CANNON); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([ Species.CHARIZARD ]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; game.move.select(Moves.FLASH_CANNON); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.phaseInterceptor.to("MoveEffectPhase"); await game.move.forceMiss(); diff --git a/src/test/moves/baton_pass.test.ts b/src/test/moves/baton_pass.test.ts index 5643efceae2..5e6e4be21ba 100644 --- a/src/test/moves/baton_pass.test.ts +++ b/src/test/moves/baton_pass.test.ts @@ -28,7 +28,7 @@ describe("Moves - Baton Pass", () => { .battleType("single") .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) - .moveset([Moves.BATON_PASS, Moves.NASTY_PLOT, Moves.SPLASH]) + .moveset([ Moves.BATON_PASS, Moves.NASTY_PLOT, Moves.SPLASH ]) .ability(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH) .disableCrits(); @@ -36,7 +36,7 @@ describe("Moves - Baton Pass", () => { it("transfers all stat stages when player uses it", async() => { // arrange - await game.classicMode.startBattle([Species.RAICHU, Species.SHUCKLE]); + await game.classicMode.startBattle([ Species.RAICHU, Species.SHUCKLE ]); // round 1 - buff game.move.select(Moves.NASTY_PLOT); @@ -61,8 +61,8 @@ describe("Moves - Baton Pass", () => { // arrange game.override .startingWave(5) - .enemyMoveset(new Array(4).fill([Moves.NASTY_PLOT])); - await game.classicMode.startBattle([Species.RAICHU, Species.SHUCKLE]); + .enemyMoveset(new Array(4).fill([ Moves.NASTY_PLOT ])); + await game.classicMode.startBattle([ Species.RAICHU, Species.SHUCKLE ]); // round 1 - ai buffs game.move.select(Moves.SPLASH); @@ -70,7 +70,7 @@ describe("Moves - Baton Pass", () => { // round 2 - baton pass game.scene.getEnemyPokemon()!.hp = 100; - game.override.enemyMoveset([Moves.BATON_PASS]); + game.override.enemyMoveset([ Moves.BATON_PASS ]); // Force moveset to update mid-battle // TODO: replace with enemy ai control function when it's added game.scene.getEnemyParty()[0].getMoveset(); @@ -92,13 +92,13 @@ describe("Moves - Baton Pass", () => { }, 20000); it("doesn't transfer effects that aren't transferrable", async() => { - game.override.enemyMoveset([Moves.SALT_CURE]); - await game.classicMode.startBattle([Species.PIKACHU, Species.FEEBAS]); + game.override.enemyMoveset([ Moves.SALT_CURE ]); + await game.classicMode.startBattle([ Species.PIKACHU, Species.FEEBAS ]); - const [player1, player2] = game.scene.getParty(); + const [ player1, player2 ] = game.scene.getParty(); game.move.select(Moves.BATON_PASS); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.phaseInterceptor.to("MoveEndPhase"); expect(player1.findTag((t) => t.tagType === BattlerTagType.SALT_CURED)).toBeTruthy(); game.doSelectPartyPokemon(1); diff --git a/src/test/moves/beak_blast.test.ts b/src/test/moves/beak_blast.test.ts index 3f4fe1d1d11..0c1e7bbeed9 100644 --- a/src/test/moves/beak_blast.test.ts +++ b/src/test/moves/beak_blast.test.ts @@ -11,7 +11,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; - describe("Moves - Beak Blast", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -31,10 +30,10 @@ describe("Moves - Beak Blast", () => { game.override .battleType("single") .ability(Abilities.UNNERVE) - .moveset([Moves.BEAK_BLAST]) + .moveset([ Moves.BEAK_BLAST ]) .enemySpecies(Species.SNORLAX) .enemyAbility(Abilities.INSOMNIA) - .enemyMoveset([Moves.TACKLE]) + .enemyMoveset([ Moves.TACKLE ]) .startingLevel(100) .enemyLevel(100); }); @@ -42,7 +41,7 @@ describe("Moves - Beak Blast", () => { it( "should add a charge effect that burns attackers on contact", async () => { - await game.startBattle([Species.BLASTOISE]); + await game.startBattle([ Species.BLASTOISE ]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -62,7 +61,7 @@ describe("Moves - Beak Blast", () => { async () => { game.override.statusEffect(StatusEffect.SLEEP); - await game.startBattle([Species.BLASTOISE]); + await game.startBattle([ Species.BLASTOISE ]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -80,9 +79,9 @@ describe("Moves - Beak Blast", () => { it( "should not burn attackers that don't make contact", async () => { - game.override.enemyMoveset([Moves.WATER_GUN]); + game.override.enemyMoveset([ Moves.WATER_GUN ]); - await game.startBattle([Species.BLASTOISE]); + await game.startBattle([ Species.BLASTOISE ]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -102,7 +101,7 @@ describe("Moves - Beak Blast", () => { async () => { game.override.startingHeldItems([{ name: "MULTI_LENS", count: 1 }]); - await game.startBattle([Species.BLASTOISE]); + await game.startBattle([ Species.BLASTOISE ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -116,9 +115,9 @@ describe("Moves - Beak Blast", () => { it( "should be blocked by Protect", async () => { - game.override.enemyMoveset([Moves.PROTECT]); + game.override.enemyMoveset([ Moves.PROTECT ]); - await game.startBattle([Species.BLASTOISE]); + await game.startBattle([ Species.BLASTOISE ]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; diff --git a/src/test/moves/beat_up.test.ts b/src/test/moves/beat_up.test.ts index 51ec768084c..e51ac6ea452 100644 --- a/src/test/moves/beat_up.test.ts +++ b/src/test/moves/beat_up.test.ts @@ -27,17 +27,17 @@ describe("Moves - Beat Up", () => { game.override.enemySpecies(Species.SNORLAX); game.override.enemyLevel(100); - game.override.enemyMoveset([Moves.SPLASH]); + game.override.enemyMoveset([ Moves.SPLASH ]); game.override.enemyAbility(Abilities.INSOMNIA); game.override.startingLevel(100); - game.override.moveset([Moves.BEAT_UP]); + game.override.moveset([ Moves.BEAT_UP ]); }); it( "should hit once for each healthy player Pokemon", async () => { - await game.startBattle([Species.MAGIKARP, Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE, Species.PIKACHU, Species.EEVEE]); + await game.startBattle([ Species.MAGIKARP, Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE, Species.PIKACHU, Species.EEVEE ]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -61,7 +61,7 @@ describe("Moves - Beat Up", () => { it( "should not count player Pokemon with status effects towards hit count", async () => { - await game.startBattle([Species.MAGIKARP, Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE, Species.PIKACHU, Species.EEVEE]); + await game.startBattle([ Species.MAGIKARP, Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE, Species.PIKACHU, Species.EEVEE ]); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -79,7 +79,7 @@ describe("Moves - Beat Up", () => { "should hit twice for each player Pokemon if the user has Multi-Lens", async () => { game.override.startingHeldItems([{ name: "MULTI_LENS", count: 1 }]); - await game.startBattle([Species.MAGIKARP, Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE, Species.PIKACHU, Species.EEVEE]); + await game.startBattle([ Species.MAGIKARP, Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE, Species.PIKACHU, Species.EEVEE ]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; diff --git a/src/test/moves/belly_drum.test.ts b/src/test/moves/belly_drum.test.ts index 494272089e2..0bed1248e7e 100644 --- a/src/test/moves/belly_drum.test.ts +++ b/src/test/moves/belly_drum.test.ts @@ -35,7 +35,7 @@ describe("Moves - BELLY DRUM", () => { .enemySpecies(Species.SNORLAX) .startingLevel(100) .enemyLevel(100) - .moveset([Moves.BELLY_DRUM]) + .moveset([ Moves.BELLY_DRUM ]) .enemyMoveset(Moves.SPLASH) .enemyAbility(Abilities.BALL_FETCH); }); @@ -44,7 +44,7 @@ describe("Moves - BELLY DRUM", () => { test("raises the user's ATK stat stage to its max, at the cost of 1/2 of its maximum HP", async() => { - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; const hpLost = toDmgValue(leadPokemon.getMaxHp() / RATIO); @@ -59,7 +59,7 @@ describe("Moves - BELLY DRUM", () => { test("will still take effect if an uninvolved stat stage is at max", async() => { - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; const hpLost = toDmgValue(leadPokemon.getMaxHp() / RATIO); @@ -79,7 +79,7 @@ describe("Moves - BELLY DRUM", () => { test("fails if the pokemon's ATK stat stage is at its maximum", async() => { - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -95,7 +95,7 @@ describe("Moves - BELLY DRUM", () => { test("fails if the user's health is less than 1/2", async() => { - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; const hpLost = toDmgValue(leadPokemon.getMaxHp() / RATIO); diff --git a/src/test/moves/burning_jealousy.test.ts b/src/test/moves/burning_jealousy.test.ts index d6ebbf30bb1..fe2735cfa96 100644 --- a/src/test/moves/burning_jealousy.test.ts +++ b/src/test/moves/burning_jealousy.test.ts @@ -9,7 +9,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; - describe("Moves - Burning Jealousy", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -31,12 +30,12 @@ describe("Moves - Burning Jealousy", () => { .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.ICE_SCALES) - .enemyMoveset([Moves.HOWL]) + .enemyMoveset([ Moves.HOWL ]) .startingLevel(10) .enemyLevel(10) .starterSpecies(Species.FEEBAS) .ability(Abilities.BALL_FETCH) - .moveset([Moves.BURNING_JEALOUSY, Moves.GROWL]); + .moveset([ Moves.BURNING_JEALOUSY, Moves.GROWL ]); }); @@ -46,7 +45,7 @@ describe("Moves - Burning Jealousy", () => { const enemy = game.scene.getEnemyPokemon()!; game.move.select(Moves.BURNING_JEALOUSY); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.phaseInterceptor.to("BerryPhase"); expect(enemy.status?.effect).toBe(StatusEffect.BURN); @@ -56,13 +55,13 @@ describe("Moves - Burning Jealousy", () => { game.override .starterSpecies(0) .battleType("double"); - await game.classicMode.startBattle([Species.FEEBAS, Species.ABRA]); + await game.classicMode.startBattle([ Species.FEEBAS, Species.ABRA ]); const enemy = game.scene.getEnemyPokemon()!; game.move.select(Moves.BURNING_JEALOUSY); game.move.select(Moves.GROWL, 1); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2 ]); await game.phaseInterceptor.to("BerryPhase"); expect(enemy.status?.effect).toBe(StatusEffect.BURN); diff --git a/src/test/moves/ceaseless_edge.test.ts b/src/test/moves/ceaseless_edge.test.ts index e98fe462c62..88c8c8cf011 100644 --- a/src/test/moves/ceaseless_edge.test.ts +++ b/src/test/moves/ceaseless_edge.test.ts @@ -11,7 +11,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; - describe("Moves - Ceaseless Edge", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -34,8 +33,8 @@ describe("Moves - Ceaseless Edge", () => { game.override.enemyPassiveAbility(Abilities.RUN_AWAY); game.override.startingLevel(100); game.override.enemyLevel(100); - game.override.moveset([Moves.CEASELESS_EDGE, Moves.SPLASH, Moves.ROAR]); - game.override.enemyMoveset([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]); + game.override.moveset([ Moves.CEASELESS_EDGE, Moves.SPLASH, Moves.ROAR ]); + game.override.enemyMoveset([ Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH ]); vi.spyOn(allMoves[Moves.CEASELESS_EDGE], "accuracy", "get").mockReturnValue(100); }); @@ -43,7 +42,7 @@ describe("Moves - Ceaseless Edge", () => { test( "move should hit and apply spikes", async () => { - await game.startBattle([Species.ILLUMISE]); + await game.startBattle([ Species.ILLUMISE ]); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -68,7 +67,7 @@ describe("Moves - Ceaseless Edge", () => { "move should hit twice with multi lens and apply two layers of spikes", async () => { game.override.startingHeldItems([{ name: "MULTI_LENS" }]); - await game.startBattle([Species.ILLUMISE]); + await game.startBattle([ Species.ILLUMISE ]); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -95,7 +94,7 @@ describe("Moves - Ceaseless Edge", () => { game.override.startingHeldItems([{ name: "MULTI_LENS" }]); game.override.startingWave(5); - await game.startBattle([Species.ILLUMISE]); + await game.startBattle([ Species.ILLUMISE ]); game.move.select(Moves.CEASELESS_EDGE); await game.phaseInterceptor.to(MoveEffectPhase, false); diff --git a/src/test/moves/chilly_reception.test.ts b/src/test/moves/chilly_reception.test.ts index 6c8e8172670..664ca242b20 100644 --- a/src/test/moves/chilly_reception.test.ts +++ b/src/test/moves/chilly_reception.test.ts @@ -24,7 +24,7 @@ describe("Moves - Chilly Reception", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleType("single") - .moveset([Moves.CHILLY_RECEPTION, Moves.SNOWSCAPE]) + .moveset([ Moves.CHILLY_RECEPTION, Moves.SNOWSCAPE ]) .enemyMoveset(Array(4).fill(Moves.SPLASH)) .enemyAbility(Abilities.NONE) .ability(Abilities.NONE); @@ -32,7 +32,7 @@ describe("Moves - Chilly Reception", () => { }); it("should still change the weather if user can't switch out", async () => { - await game.classicMode.startBattle([Species.SLOWKING]); + await game.classicMode.startBattle([ Species.SLOWKING ]); game.move.select(Moves.CHILLY_RECEPTION); @@ -41,7 +41,7 @@ describe("Moves - Chilly Reception", () => { }); it("should switch out even if it's snowing", async () => { - await game.classicMode.startBattle([Species.SLOWKING, Species.MEOWTH]); + await game.classicMode.startBattle([ Species.SLOWKING, Species.MEOWTH ]); // first turn set up snow with snowscape, try chilly reception on second turn game.move.select(Moves.SNOWSCAPE); await game.phaseInterceptor.to("BerryPhase", false); @@ -58,7 +58,7 @@ describe("Moves - Chilly Reception", () => { it("happy case - switch out and weather changes", async () => { - await game.classicMode.startBattle([Species.SLOWKING, Species.MEOWTH]); + await game.classicMode.startBattle([ Species.SLOWKING, Species.MEOWTH ]); game.move.select(Moves.CHILLY_RECEPTION); game.doSelectPartyPokemon(1); @@ -71,11 +71,11 @@ describe("Moves - Chilly Reception", () => { // enemy uses another move and weather doesn't change it("check case - enemy not selecting chilly reception doesn't change weather ", async () => { game.override.battleType("single") - .enemyMoveset([Moves.CHILLY_RECEPTION, Moves.TACKLE]) + .enemyMoveset([ Moves.CHILLY_RECEPTION, Moves.TACKLE ]) .enemyAbility(Abilities.NONE) .moveset(Array(4).fill(Moves.SPLASH)); - await game.classicMode.startBattle([Species.SLOWKING, Species.MEOWTH]); + await game.classicMode.startBattle([ Species.SLOWKING, Species.MEOWTH ]); game.move.select(Moves.SPLASH); await game.forceEnemyMove(Moves.TACKLE); @@ -90,9 +90,9 @@ describe("Moves - Chilly Reception", () => { .enemyMoveset(Array(4).fill(Moves.CHILLY_RECEPTION)) .enemyAbility(Abilities.NONE) .enemySpecies(Species.MAGIKARP) - .moveset([Moves.SPLASH, Moves.THUNDERBOLT]); + .moveset([ Moves.SPLASH, Moves.THUNDERBOLT ]); - await game.classicMode.startBattle([Species.JOLTEON]); + await game.classicMode.startBattle([ Species.JOLTEON ]); const RIVAL_MAGIKARP1 = game.scene.getEnemyPokemon()?.id; game.move.select(Moves.SPLASH); diff --git a/src/test/moves/clangorous_soul.test.ts b/src/test/moves/clangorous_soul.test.ts index 8f0bfb2549f..52e980cc4fa 100644 --- a/src/test/moves/clangorous_soul.test.ts +++ b/src/test/moves/clangorous_soul.test.ts @@ -32,7 +32,7 @@ describe("Moves - Clangorous Soul", () => { game.override.enemySpecies(Species.SNORLAX); game.override.startingLevel(100); game.override.enemyLevel(100); - game.override.moveset([Moves.CLANGOROUS_SOUL]); + game.override.moveset([ Moves.CLANGOROUS_SOUL ]); game.override.enemyMoveset(Moves.SPLASH); }); @@ -40,7 +40,7 @@ describe("Moves - Clangorous Soul", () => { it("raises the user's ATK, DEF, SPATK, SPDEF, and SPD stat stages by 1 each at the cost of 1/3 of its maximum HP", async() => { - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; const hpLost = Math.floor(leadPokemon.getMaxHp() / RATIO); @@ -59,7 +59,7 @@ describe("Moves - Clangorous Soul", () => { it("will still take effect if one or more of the involved stat stages are not at max", async() => { - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; const hpLost = Math.floor(leadPokemon.getMaxHp() / RATIO); @@ -84,7 +84,7 @@ describe("Moves - Clangorous Soul", () => { it("fails if all stat stages involved are at max", async() => { - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -108,7 +108,7 @@ describe("Moves - Clangorous Soul", () => { it("fails if the user's health is less than 1/3", async() => { - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; const hpLost = Math.floor(leadPokemon.getMaxHp() / RATIO); diff --git a/src/test/moves/crafty_shield.test.ts b/src/test/moves/crafty_shield.test.ts index 63399c3a86a..93dd4a02538 100644 --- a/src/test/moves/crafty_shield.test.ts +++ b/src/test/moves/crafty_shield.test.ts @@ -10,7 +10,6 @@ import { BerryPhase } from "#app/phases/berry-phase"; import { CommandPhase } from "#app/phases/command-phase"; - describe("Moves - Crafty Shield", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -30,10 +29,10 @@ describe("Moves - Crafty Shield", () => { game.override.battleType("double"); - game.override.moveset([Moves.CRAFTY_SHIELD, Moves.SPLASH, Moves.SWORDS_DANCE]); + game.override.moveset([ Moves.CRAFTY_SHIELD, Moves.SPLASH, Moves.SWORDS_DANCE ]); game.override.enemySpecies(Species.SNORLAX); - game.override.enemyMoveset([Moves.GROWL]); + game.override.enemyMoveset([ Moves.GROWL ]); game.override.enemyAbility(Abilities.INSOMNIA); game.override.startingLevel(100); @@ -43,7 +42,7 @@ describe("Moves - Crafty Shield", () => { test( "should protect the user and allies from status moves", async () => { - await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.startBattle([ Species.CHARIZARD, Species.BLASTOISE ]); const leadPokemon = game.scene.getPlayerField(); @@ -62,9 +61,9 @@ describe("Moves - Crafty Shield", () => { test( "should not protect the user and allies from attack moves", async () => { - game.override.enemyMoveset([Moves.TACKLE]); + game.override.enemyMoveset([ Moves.TACKLE ]); - await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.startBattle([ Species.CHARIZARD, Species.BLASTOISE ]); const leadPokemon = game.scene.getPlayerField(); @@ -84,9 +83,9 @@ describe("Moves - Crafty Shield", () => { "should protect the user and allies from moves that ignore other protection", async () => { game.override.enemySpecies(Species.DUSCLOPS); - game.override.enemyMoveset([Moves.CURSE]); + game.override.enemyMoveset([ Moves.CURSE ]); - await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.startBattle([ Species.CHARIZARD, Species.BLASTOISE ]); const leadPokemon = game.scene.getPlayerField(); @@ -105,7 +104,7 @@ describe("Moves - Crafty Shield", () => { test( "should not block allies' self-targeted moves", async () => { - await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.startBattle([ Species.CHARIZARD, Species.BLASTOISE ]); const leadPokemon = game.scene.getPlayerField(); diff --git a/src/test/moves/disable.test.ts b/src/test/moves/disable.test.ts index a35d294e91f..3748598fa90 100644 --- a/src/test/moves/disable.test.ts +++ b/src/test/moves/disable.test.ts @@ -26,7 +26,7 @@ describe("Moves - Disable", () => { .battleType("single") .ability(Abilities.BALL_FETCH) .enemyAbility(Abilities.BALL_FETCH) - .moveset([Moves.DISABLE, Moves.SPLASH]) + .moveset([ Moves.DISABLE, Moves.SPLASH ]) .enemyMoveset(Moves.SPLASH) .starterSpecies(Species.PIKACHU) .enemySpecies(Species.SHUCKLE); @@ -38,7 +38,7 @@ describe("Moves - Disable", () => { const enemyMon = game.scene.getEnemyPokemon()!; game.move.select(Moves.DISABLE); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.toNextTurn(); expect(enemyMon.getMoveHistory()).toHaveLength(1); @@ -52,7 +52,7 @@ describe("Moves - Disable", () => { const enemyMon = game.scene.getEnemyPokemon()!; game.move.select(Moves.DISABLE); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.toNextTurn(); expect(playerMon.getMoveHistory()[0]).toMatchObject({ move: Moves.DISABLE, result: MoveResult.FAIL }); @@ -65,7 +65,7 @@ describe("Moves - Disable", () => { const enemyMon = game.scene.getEnemyPokemon()!; game.move.select(Moves.DISABLE); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.toNextTurn(); game.move.select(Moves.SPLASH); @@ -78,14 +78,14 @@ describe("Moves - Disable", () => { }, 20000); it("cannot disable STRUGGLE", async() => { - game.override.enemyMoveset([Moves.STRUGGLE]); + game.override.enemyMoveset([ Moves.STRUGGLE ]); await game.classicMode.startBattle(); const playerMon = game.scene.getPlayerPokemon()!; const enemyMon = game.scene.getEnemyPokemon()!; game.move.select(Moves.DISABLE); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.toNextTurn(); expect(playerMon.getLastXMoves()[0].result).toBe(MoveResult.FAIL); @@ -103,7 +103,7 @@ describe("Moves - Disable", () => { // Both mons just used Splash last turn; now have player use Disable. game.move.select(Moves.DISABLE); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.toNextTurn(); const enemyHistory = enemyMon.getMoveHistory(); @@ -113,13 +113,13 @@ describe("Moves - Disable", () => { }, 20000); it("disables NATURE POWER, not the move invoked by it", async() => { - game.override.enemyMoveset([Moves.NATURE_POWER]); + game.override.enemyMoveset([ Moves.NATURE_POWER ]); await game.classicMode.startBattle(); const enemyMon = game.scene.getEnemyPokemon()!; game.move.select(Moves.DISABLE); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.toNextTurn(); expect(enemyMon.isMoveRestricted(Moves.NATURE_POWER)).toBe(true); diff --git a/src/test/moves/double_team.test.ts b/src/test/moves/double_team.test.ts index fa224c8df9e..62848553e06 100644 --- a/src/test/moves/double_team.test.ts +++ b/src/test/moves/double_team.test.ts @@ -24,16 +24,16 @@ describe("Moves - Double Team", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleType("single"); - game.override.moveset([Moves.DOUBLE_TEAM]); + game.override.moveset([ Moves.DOUBLE_TEAM ]); game.override.disableCrits(); game.override.ability(Abilities.BALL_FETCH); game.override.enemySpecies(Species.SHUCKLE); game.override.enemyAbility(Abilities.BALL_FETCH); - game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + game.override.enemyMoveset([ Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE ]); }); it("raises the user's EVA stat stage by 1", async () => { - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const ally = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; diff --git a/src/test/moves/dragon_cheer.test.ts b/src/test/moves/dragon_cheer.test.ts index beaf6ddb520..37b74d44360 100644 --- a/src/test/moves/dragon_cheer.test.ts +++ b/src/test/moves/dragon_cheer.test.ts @@ -27,11 +27,11 @@ describe("Moves - Dragon Cheer", () => { .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH) .enemyLevel(20) - .moveset([Moves.DRAGON_CHEER, Moves.TACKLE, Moves.SPLASH]); + .moveset([ Moves.DRAGON_CHEER, Moves.TACKLE, Moves.SPLASH ]); }); it("increases the user's allies' critical hit ratio by one stage", async () => { - await game.classicMode.startBattle([Species.DRAGONAIR, Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.DRAGONAIR, Species.MAGIKARP ]); const enemy = game.scene.getEnemyField()[0]; @@ -40,7 +40,7 @@ describe("Moves - Dragon Cheer", () => { game.move.select(Moves.DRAGON_CHEER, 0); game.move.select(Moves.TACKLE, 1, BattlerIndex.ENEMY); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); // After Tackle await game.phaseInterceptor.to("TurnEndPhase"); @@ -48,7 +48,7 @@ describe("Moves - Dragon Cheer", () => { }); it("increases the user's Dragon-type allies' critical hit ratio by two stages", async () => { - await game.classicMode.startBattle([Species.MAGIKARP, Species.DRAGONAIR]); + await game.classicMode.startBattle([ Species.MAGIKARP, Species.DRAGONAIR ]); const enemy = game.scene.getEnemyField()[0]; @@ -57,7 +57,7 @@ describe("Moves - Dragon Cheer", () => { game.move.select(Moves.DRAGON_CHEER, 0); game.move.select(Moves.TACKLE, 1, BattlerIndex.ENEMY); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); // After Tackle await game.phaseInterceptor.to("TurnEndPhase"); @@ -65,7 +65,7 @@ describe("Moves - Dragon Cheer", () => { }); it("applies the effect based on the allies' type upon use of the move, and do not change if the allies' type changes later in battle", async () => { - await game.classicMode.startBattle([Species.DRAGONAIR, Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.DRAGONAIR, Species.MAGIKARP ]); const magikarp = game.scene.getPlayerField()[1]; const enemy = game.scene.getEnemyField()[0]; @@ -75,7 +75,7 @@ describe("Moves - Dragon Cheer", () => { game.move.select(Moves.DRAGON_CHEER, 0); game.move.select(Moves.TACKLE, 1, BattlerIndex.ENEMY); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); // After Tackle await game.phaseInterceptor.to("TurnEndPhase"); @@ -84,13 +84,13 @@ describe("Moves - Dragon Cheer", () => { await game.toNextTurn(); // Change Magikarp's type to Dragon - vi.spyOn(magikarp, "getTypes").mockReturnValue([Type.DRAGON]); - expect(magikarp.getTypes()).toEqual([Type.DRAGON]); + vi.spyOn(magikarp, "getTypes").mockReturnValue([ Type.DRAGON ]); + expect(magikarp.getTypes()).toEqual([ Type.DRAGON ]); game.move.select(Moves.SPLASH, 0); game.move.select(Moves.TACKLE, 1, BattlerIndex.ENEMY); - await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); + await game.setTurnOrder([ BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); await game.phaseInterceptor.to("MoveEndPhase"); expect(enemy.getCritStage).toHaveReturnedWith(1); // getCritStage is called on defender diff --git a/src/test/moves/dragon_rage.test.ts b/src/test/moves/dragon_rage.test.ts index cab8c3f808b..dcbed7107e6 100644 --- a/src/test/moves/dragon_rage.test.ts +++ b/src/test/moves/dragon_rage.test.ts @@ -35,7 +35,7 @@ describe("Moves - Dragon Rage", () => { game.override.battleType("single"); game.override.starterSpecies(Species.SNORLAX); - game.override.moveset([Moves.DRAGON_RAGE]); + game.override.moveset([ Moves.DRAGON_RAGE ]); game.override.ability(Abilities.BALL_FETCH); game.override.passiveAbility(Abilities.BALL_FETCH); game.override.startingLevel(100); @@ -58,7 +58,7 @@ describe("Moves - Dragon Rage", () => { it("ignores weaknesses", async () => { game.override.disableCrits(); - vi.spyOn(enemyPokemon, "getTypes").mockReturnValue([Type.DRAGON]); + vi.spyOn(enemyPokemon, "getTypes").mockReturnValue([ Type.DRAGON ]); game.move.select(Moves.DRAGON_RAGE); await game.phaseInterceptor.to(TurnEndPhase); @@ -68,7 +68,7 @@ describe("Moves - Dragon Rage", () => { it("ignores resistances", async () => { game.override.disableCrits(); - vi.spyOn(enemyPokemon, "getTypes").mockReturnValue([Type.STEEL]); + vi.spyOn(enemyPokemon, "getTypes").mockReturnValue([ Type.STEEL ]); game.move.select(Moves.DRAGON_RAGE); await game.phaseInterceptor.to(TurnEndPhase); @@ -88,7 +88,7 @@ describe("Moves - Dragon Rage", () => { it("ignores stab", async () => { game.override.disableCrits(); - vi.spyOn(partyPokemon, "getTypes").mockReturnValue([Type.DRAGON]); + vi.spyOn(partyPokemon, "getTypes").mockReturnValue([ Type.DRAGON ]); game.move.select(Moves.DRAGON_RAGE); await game.phaseInterceptor.to(TurnEndPhase); diff --git a/src/test/moves/dragon_tail.test.ts b/src/test/moves/dragon_tail.test.ts index dd7193dc97f..eb02b09fbb4 100644 --- a/src/test/moves/dragon_tail.test.ts +++ b/src/test/moves/dragon_tail.test.ts @@ -24,7 +24,7 @@ describe("Moves - Dragon Tail", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleType("single") - .moveset([Moves.DRAGON_TAIL, Moves.SPLASH, Moves.FLAMETHROWER]) + .moveset([ Moves.DRAGON_TAIL, Moves.SPLASH, Moves.FLAMETHROWER ]) .enemySpecies(Species.WAILORD) .enemyMoveset(Moves.SPLASH) .startingLevel(5) @@ -34,7 +34,7 @@ describe("Moves - Dragon Tail", () => { }); it("should cause opponent to flee, and not crash", async () => { - await game.classicMode.startBattle([Species.DRATINI]); + await game.classicMode.startBattle([ Species.DRATINI ]); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -52,7 +52,7 @@ describe("Moves - Dragon Tail", () => { it("should cause opponent to flee, display ability, and not crash", async () => { game.override.enemyAbility(Abilities.ROUGH_SKIN); - await game.classicMode.startBattle([Species.DRATINI]); + await game.classicMode.startBattle([ Species.DRATINI ]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -71,7 +71,7 @@ describe("Moves - Dragon Tail", () => { game.override .battleType("double").enemyMoveset(Moves.SPLASH) .enemyAbility(Abilities.ROUGH_SKIN); - await game.classicMode.startBattle([Species.DRATINI, Species.DRATINI, Species.WAILORD, Species.WAILORD]); + await game.classicMode.startBattle([ Species.DRATINI, Species.DRATINI, Species.WAILORD, Species.WAILORD ]); const leadPokemon = game.scene.getParty()[0]!; @@ -103,7 +103,7 @@ describe("Moves - Dragon Tail", () => { .battleType("double") .enemyMoveset(Moves.SPLASH) .enemyAbility(Abilities.ROUGH_SKIN); - await game.classicMode.startBattle([Species.DRATINI, Species.DRATINI, Species.WAILORD, Species.WAILORD]); + await game.classicMode.startBattle([ Species.DRATINI, Species.DRATINI, Species.WAILORD, Species.WAILORD ]); const leadPokemon = game.scene.getParty()[0]!; const secPokemon = game.scene.getParty()[1]!; @@ -130,7 +130,7 @@ describe("Moves - Dragon Tail", () => { it("doesn't switch out if the target has suction cups", async () => { game.override.enemyAbility(Abilities.SUCTION_CUPS); - await game.classicMode.startBattle([Species.REGIELEKI]); + await game.classicMode.startBattle([ Species.REGIELEKI ]); const enemy = game.scene.getEnemyPokemon()!; diff --git a/src/test/moves/dynamax_cannon.test.ts b/src/test/moves/dynamax_cannon.test.ts index 6ac0befdb36..9dd48d3c94c 100644 --- a/src/test/moves/dynamax_cannon.test.ts +++ b/src/test/moves/dynamax_cannon.test.ts @@ -27,7 +27,7 @@ describe("Moves - Dynamax Cannon", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.moveset([dynamaxCannon.id]); + game.override.moveset([ dynamaxCannon.id ]); game.override.startingLevel(200); // Note that, for Waves 1-10, the level cap is 10 @@ -36,7 +36,7 @@ describe("Moves - Dynamax Cannon", () => { game.override.disableCrits(); game.override.enemySpecies(Species.MAGIKARP); - game.override.enemyMoveset([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]); + game.override.enemyMoveset([ Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH ]); vi.spyOn(dynamaxCannon, "calculateBattlePower"); }); @@ -161,7 +161,7 @@ describe("Moves - Dynamax Cannon", () => { ]); game.move.select(dynamaxCannon.id); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to(MoveEffectPhase, false); expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(dynamaxCannon.id); diff --git a/src/test/moves/fake_out.test.ts b/src/test/moves/fake_out.test.ts index e306ab12a3f..f20b6db3a13 100644 --- a/src/test/moves/fake_out.test.ts +++ b/src/test/moves/fake_out.test.ts @@ -23,7 +23,7 @@ describe("Moves - Fake Out", () => { game.override .battleType("single") .enemySpecies(Species.CORVIKNIGHT) - .moveset([Moves.FAKE_OUT, Moves.SPLASH]) + .moveset([ Moves.FAKE_OUT, Moves.SPLASH ]) .enemyMoveset(Moves.SPLASH) .enemyLevel(10) .startingLevel(10) // prevent LevelUpPhase from happening @@ -31,7 +31,7 @@ describe("Moves - Fake Out", () => { }); it("can only be used on the first turn a pokemon is sent out in a battle", async() => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([ Species.FEEBAS ]); const enemy = game.scene.getEnemyPokemon()!; @@ -49,7 +49,7 @@ describe("Moves - Fake Out", () => { // This is a PokeRogue buff to Fake Out it("can be used at the start of every wave even if the pokemon wasn't recalled", async() => { - await game.classicMode.startBattle([Species.FEEBAS]); + await game.classicMode.startBattle([ Species.FEEBAS ]); const enemy = game.scene.getEnemyPokemon()!; enemy.damageAndUpdate(enemy.getMaxHp() - 1); @@ -65,7 +65,7 @@ describe("Moves - Fake Out", () => { it("can be used again if recalled and sent back out", async() => { game.override.startingWave(4); - await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.FEEBAS, Species.MAGIKARP ]); const enemy1 = game.scene.getEnemyPokemon()!; diff --git a/src/test/moves/fillet_away.test.ts b/src/test/moves/fillet_away.test.ts index d8dd74a259c..aa3243270cb 100644 --- a/src/test/moves/fillet_away.test.ts +++ b/src/test/moves/fillet_away.test.ts @@ -33,7 +33,7 @@ describe("Moves - FILLET AWAY", () => { game.override.enemySpecies(Species.SNORLAX); game.override.startingLevel(100); game.override.enemyLevel(100); - game.override.moveset([Moves.FILLET_AWAY]); + game.override.moveset([ Moves.FILLET_AWAY ]); game.override.enemyMoveset(Moves.SPLASH); }); @@ -41,7 +41,7 @@ describe("Moves - FILLET AWAY", () => { test("raises the user's ATK, SPATK, and SPD stat stages by 2 each, at the cost of 1/2 of its maximum HP", async() => { - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; const hpLost = toDmgValue(leadPokemon.getMaxHp() / RATIO); @@ -58,7 +58,7 @@ describe("Moves - FILLET AWAY", () => { test("still takes effect if one or more of the involved stat stages are not at max", async() => { - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; const hpLost = toDmgValue(leadPokemon.getMaxHp() / RATIO); @@ -79,7 +79,7 @@ describe("Moves - FILLET AWAY", () => { test("fails if all stat stages involved are at max", async() => { - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -99,7 +99,7 @@ describe("Moves - FILLET AWAY", () => { test("fails if the user's health is less than 1/2", async() => { - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; const hpLost = toDmgValue(leadPokemon.getMaxHp() / RATIO); diff --git a/src/test/moves/fissure.test.ts b/src/test/moves/fissure.test.ts index 8689ce4079e..16c3faa6827 100644 --- a/src/test/moves/fissure.test.ts +++ b/src/test/moves/fissure.test.ts @@ -32,7 +32,7 @@ describe("Moves - Fissure", () => { game.override.disableCrits(); game.override.starterSpecies(Species.SNORLAX); - game.override.moveset([Moves.FISSURE]); + game.override.moveset([ Moves.FISSURE ]); game.override.passiveAbility(Abilities.BALL_FETCH); game.override.startingLevel(100); diff --git a/src/test/moves/flame_burst.test.ts b/src/test/moves/flame_burst.test.ts index b2858af2b24..feedee3b7bc 100644 --- a/src/test/moves/flame_burst.test.ts +++ b/src/test/moves/flame_burst.test.ts @@ -36,18 +36,18 @@ describe("Moves - Flame Burst", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleType("double"); - game.override.moveset([Moves.FLAME_BURST, Moves.SPLASH]); + game.override.moveset([ Moves.FLAME_BURST, Moves.SPLASH ]); game.override.disableCrits(); game.override.ability(Abilities.UNNERVE); game.override.startingWave(4); game.override.enemySpecies(Species.SHUCKLE); game.override.enemyAbility(Abilities.BALL_FETCH); - game.override.enemyMoveset([Moves.SPLASH]); + game.override.enemyMoveset([ Moves.SPLASH ]); }); it("inflicts damage to the target's ally equal to 1/16 of its max HP", async () => { - await game.startBattle([Species.PIKACHU, Species.PIKACHU]); - const [leftEnemy, rightEnemy] = game.scene.getEnemyField(); + await game.startBattle([ Species.PIKACHU, Species.PIKACHU ]); + const [ leftEnemy, rightEnemy ] = game.scene.getEnemyField(); game.move.select(Moves.FLAME_BURST, 0, leftEnemy.getBattlerIndex()); game.move.select(Moves.SPLASH, 1); @@ -60,8 +60,8 @@ describe("Moves - Flame Burst", () => { it("does not inflict damage to the target's ally if the target was not affected by Flame Burst", async () => { game.override.enemyAbility(Abilities.FLASH_FIRE); - await game.startBattle([Species.PIKACHU, Species.PIKACHU]); - const [leftEnemy, rightEnemy] = game.scene.getEnemyField(); + await game.startBattle([ Species.PIKACHU, Species.PIKACHU ]); + const [ leftEnemy, rightEnemy ] = game.scene.getEnemyField(); game.move.select(Moves.FLAME_BURST, 0, leftEnemy.getBattlerIndex()); game.move.select(Moves.SPLASH, 1); @@ -72,8 +72,8 @@ describe("Moves - Flame Burst", () => { }); it("does not interact with the target ally's abilities", async () => { - await game.startBattle([Species.PIKACHU, Species.PIKACHU]); - const [leftEnemy, rightEnemy] = game.scene.getEnemyField(); + await game.startBattle([ Species.PIKACHU, Species.PIKACHU ]); + const [ leftEnemy, rightEnemy ] = game.scene.getEnemyField(); vi.spyOn(rightEnemy, "getAbility").mockReturnValue(allAbilities[Abilities.FLASH_FIRE]); @@ -86,8 +86,8 @@ describe("Moves - Flame Burst", () => { }); it("effect damage is prevented by Magic Guard", async () => { - await game.startBattle([Species.PIKACHU, Species.PIKACHU]); - const [leftEnemy, rightEnemy] = game.scene.getEnemyField(); + await game.startBattle([ Species.PIKACHU, Species.PIKACHU ]); + const [ leftEnemy, rightEnemy ] = game.scene.getEnemyField(); vi.spyOn(rightEnemy, "getAbility").mockReturnValue(allAbilities[Abilities.MAGIC_GUARD]); diff --git a/src/test/moves/flower_shield.test.ts b/src/test/moves/flower_shield.test.ts index f5fe8d532cc..1a5cd326fd8 100644 --- a/src/test/moves/flower_shield.test.ts +++ b/src/test/moves/flower_shield.test.ts @@ -29,14 +29,14 @@ describe("Moves - Flower Shield", () => { game.override.ability(Abilities.NONE); game.override.enemyAbility(Abilities.NONE); game.override.battleType("single"); - game.override.moveset([Moves.FLOWER_SHIELD, Moves.SPLASH]); + game.override.moveset([ Moves.FLOWER_SHIELD, Moves.SPLASH ]); game.override.enemyMoveset(Moves.SPLASH); }); it("raises DEF stat stage by 1 for all Grass-type Pokemon on the field by one stage - single battle", async () => { game.override.enemySpecies(Species.CHERRIM); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const cherrim = game.scene.getEnemyPokemon()!; const magikarp = game.scene.getPlayerPokemon()!; @@ -53,7 +53,7 @@ describe("Moves - Flower Shield", () => { it("raises DEF stat stage by 1 for all Grass-type Pokemon on the field by one stage - double battle", async () => { game.override.enemySpecies(Species.MAGIKARP).startingBiome(Biome.GRASS).battleType("double"); - await game.startBattle([Species.CHERRIM, Species.MAGIKARP]); + await game.startBattle([ Species.CHERRIM, Species.MAGIKARP ]); const field = game.scene.getField(true); const grassPokemons = field.filter(p => p.getTypes().includes(Type.GRASS)); @@ -75,10 +75,10 @@ describe("Moves - Flower Shield", () => { */ it("does not raise DEF stat stage for a Pokemon in semi-vulnerable state", async () => { game.override.enemySpecies(Species.PARAS); - game.override.enemyMoveset([Moves.DIG, Moves.DIG, Moves.DIG, Moves.DIG]); + game.override.enemyMoveset([ Moves.DIG, Moves.DIG, Moves.DIG, Moves.DIG ]); game.override.enemyLevel(50); - await game.startBattle([Species.CHERRIM]); + await game.startBattle([ Species.CHERRIM ]); const paras = game.scene.getEnemyPokemon()!; const cherrim = game.scene.getPlayerPokemon()!; @@ -97,7 +97,7 @@ describe("Moves - Flower Shield", () => { it("does nothing if there are no Grass-type Pokemon on the field", async () => { game.override.enemySpecies(Species.MAGIKARP); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const enemy = game.scene.getEnemyPokemon()!; const ally = game.scene.getPlayerPokemon()!; diff --git a/src/test/moves/focus_punch.test.ts b/src/test/moves/focus_punch.test.ts index b839c228b68..386eb2537ee 100644 --- a/src/test/moves/focus_punch.test.ts +++ b/src/test/moves/focus_punch.test.ts @@ -11,7 +11,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; - describe("Moves - Focus Punch", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -31,7 +30,7 @@ describe("Moves - Focus Punch", () => { game.override .battleType("single") .ability(Abilities.UNNERVE) - .moveset([Moves.FOCUS_PUNCH]) + .moveset([ Moves.FOCUS_PUNCH ]) .enemySpecies(Species.GROUDON) .enemyAbility(Abilities.INSOMNIA) .enemyMoveset(Moves.SPLASH) @@ -42,7 +41,7 @@ describe("Moves - Focus Punch", () => { it( "should deal damage at the end of turn if uninterrupted", async () => { - await game.startBattle([Species.CHARIZARD]); + await game.startBattle([ Species.CHARIZARD ]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -67,9 +66,9 @@ describe("Moves - Focus Punch", () => { it( "should fail if the user is hit", async () => { - game.override.enemyMoveset([Moves.TACKLE]); + game.override.enemyMoveset([ Moves.TACKLE ]); - await game.startBattle([Species.CHARIZARD]); + await game.startBattle([ Species.CHARIZARD ]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -94,9 +93,9 @@ describe("Moves - Focus Punch", () => { it( "should be cancelled if the user falls asleep mid-turn", async () => { - game.override.enemyMoveset([Moves.SPORE]); + game.override.enemyMoveset([ Moves.SPORE ]); - await game.startBattle([Species.CHARIZARD]); + await game.startBattle([ Species.CHARIZARD ]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -120,7 +119,7 @@ describe("Moves - Focus Punch", () => { /** Guarantee a Trainer battle with multiple enemy Pokemon */ game.override.startingWave(25); - await game.startBattle([Species.CHARIZARD]); + await game.startBattle([ Species.CHARIZARD ]); game.forceEnemyToSwitch(); game.move.select(Moves.FOCUS_PUNCH); diff --git a/src/test/moves/follow_me.test.ts b/src/test/moves/follow_me.test.ts index 28fb1045a8c..fba7937f812 100644 --- a/src/test/moves/follow_me.test.ts +++ b/src/test/moves/follow_me.test.ts @@ -9,7 +9,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; - describe("Moves - Follow Me", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -32,14 +31,14 @@ describe("Moves - Follow Me", () => { game.override.enemySpecies(Species.SNORLAX); game.override.startingLevel(100); game.override.enemyLevel(100); - game.override.moveset([Moves.FOLLOW_ME, Moves.RAGE_POWDER, Moves.SPOTLIGHT, Moves.QUICK_ATTACK]); - game.override.enemyMoveset([Moves.TACKLE, Moves.FOLLOW_ME, Moves.SPLASH]); + game.override.moveset([ Moves.FOLLOW_ME, Moves.RAGE_POWDER, Moves.SPOTLIGHT, Moves.QUICK_ATTACK ]); + game.override.enemyMoveset([ Moves.TACKLE, Moves.FOLLOW_ME, Moves.SPLASH ]); }); test( "move should redirect enemy attacks to the user", async () => { - await game.classicMode.startBattle([Species.AMOONGUSS, Species.CHARIZARD]); + await game.classicMode.startBattle([ Species.AMOONGUSS, Species.CHARIZARD ]); const playerPokemon = game.scene.getPlayerField(); @@ -60,7 +59,7 @@ describe("Moves - Follow Me", () => { test( "move should redirect enemy attacks to the first ally that uses it", async () => { - await game.classicMode.startBattle([Species.AMOONGUSS, Species.CHARIZARD]); + await game.classicMode.startBattle([ Species.AMOONGUSS, Species.CHARIZARD ]); const playerPokemon = game.scene.getPlayerField(); @@ -84,9 +83,9 @@ describe("Moves - Follow Me", () => { "move effect should be bypassed by Stalwart", async () => { game.override.ability(Abilities.STALWART); - game.override.moveset([Moves.QUICK_ATTACK]); + game.override.moveset([ Moves.QUICK_ATTACK ]); - await game.classicMode.startBattle([Species.AMOONGUSS, Species.CHARIZARD]); + await game.classicMode.startBattle([ Species.AMOONGUSS, Species.CHARIZARD ]); const enemyPokemon = game.scene.getEnemyField(); @@ -108,9 +107,9 @@ describe("Moves - Follow Me", () => { test( "move effect should be bypassed by Snipe Shot", async () => { - game.override.moveset([Moves.SNIPE_SHOT]); + game.override.moveset([ Moves.SNIPE_SHOT ]); - await game.classicMode.startBattle([Species.AMOONGUSS, Species.CHARIZARD]); + await game.classicMode.startBattle([ Species.AMOONGUSS, Species.CHARIZARD ]); const enemyPokemon = game.scene.getEnemyField(); diff --git a/src/test/moves/foresight.test.ts b/src/test/moves/foresight.test.ts index d58097691fd..1195cd0b71b 100644 --- a/src/test/moves/foresight.test.ts +++ b/src/test/moves/foresight.test.ts @@ -27,7 +27,7 @@ describe("Moves - Foresight", () => { .enemyMoveset(Moves.SPLASH) .enemyLevel(5) .starterSpecies(Species.MAGIKARP) - .moveset([Moves.FORESIGHT, Moves.QUICK_ATTACK, Moves.MACH_PUNCH]); + .moveset([ Moves.FORESIGHT, Moves.QUICK_ATTACK, Moves.MACH_PUNCH ]); }); it("should allow Normal and Fighting moves to hit Ghost types", async () => { @@ -54,7 +54,7 @@ describe("Moves - Foresight", () => { }); it("should ignore target's evasiveness boosts", async () => { - game.override.enemyMoveset([Moves.MINIMIZE]); + game.override.enemyMoveset([ Moves.MINIMIZE ]); await game.startBattle(); const pokemon = game.scene.getPlayerPokemon()!; diff --git a/src/test/moves/freeze_dry.test.ts b/src/test/moves/freeze_dry.test.ts index b901f04e6a1..c09d12fa597 100644 --- a/src/test/moves/freeze_dry.test.ts +++ b/src/test/moves/freeze_dry.test.ts @@ -28,7 +28,7 @@ describe("Moves - Freeze-Dry", () => { .enemyMoveset(Moves.SPLASH) .starterSpecies(Species.FEEBAS) .ability(Abilities.BALL_FETCH) - .moveset([Moves.FREEZE_DRY]); + .moveset([ Moves.FREEZE_DRY ]); }); it("should deal 2x damage to pure water types", async () => { @@ -38,7 +38,7 @@ describe("Moves - Freeze-Dry", () => { vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(Moves.FREEZE_DRY); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to("MoveEffectPhase"); expect(enemy.getMoveEffectiveness).toHaveReturnedWith(2); @@ -52,7 +52,7 @@ describe("Moves - Freeze-Dry", () => { vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(Moves.FREEZE_DRY); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to("MoveEffectPhase"); expect(enemy.getMoveEffectiveness).toHaveReturnedWith(4); @@ -66,7 +66,7 @@ describe("Moves - Freeze-Dry", () => { vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(Moves.FREEZE_DRY); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to("MoveEffectPhase"); expect(enemy.getMoveEffectiveness).toHaveReturnedWith(1); @@ -81,7 +81,7 @@ describe("Moves - Freeze-Dry", () => { vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(Moves.FREEZE_DRY); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to("MoveEffectPhase"); expect(enemy.getMoveEffectiveness).toHaveReturnedWith(2); @@ -89,14 +89,14 @@ describe("Moves - Freeze-Dry", () => { // enable once Electrify is implemented (and the interaction is fixed, as above) it.todo("should deal 2x damage to water types under Electrify", async () => { - game.override.enemyMoveset([Moves.ELECTRIFY]); + game.override.enemyMoveset([ Moves.ELECTRIFY ]); await game.classicMode.startBattle(); const enemy = game.scene.getEnemyPokemon()!; vi.spyOn(enemy, "getMoveEffectiveness"); game.move.select(Moves.FREEZE_DRY); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.phaseInterceptor.to("BerryPhase"); expect(enemy.getMoveEffectiveness).toHaveReturnedWith(2); diff --git a/src/test/moves/freezy_frost.test.ts b/src/test/moves/freezy_frost.test.ts index ad5163dae48..09d7779474f 100644 --- a/src/test/moves/freezy_frost.test.ts +++ b/src/test/moves/freezy_frost.test.ts @@ -33,7 +33,7 @@ describe("Moves - Freezy Frost", () => { .moveset([ Moves.FREEZY_FROST, Moves.HOWL, Moves.SPLASH ]) .ability(Abilities.BALL_FETCH); - vi.spyOn(allMoves[ Moves.FREEZY_FROST ], "accuracy", "get").mockReturnValue(100); + vi.spyOn(allMoves[Moves.FREEZY_FROST], "accuracy", "get").mockReturnValue(100); }); it( diff --git a/src/test/moves/fusion_bolt.test.ts b/src/test/moves/fusion_bolt.test.ts index db31863ad03..4e35b939abf 100644 --- a/src/test/moves/fusion_bolt.test.ts +++ b/src/test/moves/fusion_bolt.test.ts @@ -23,12 +23,12 @@ describe("Moves - Fusion Bolt", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.moveset([fusionBolt]); + game.override.moveset([ fusionBolt ]); game.override.startingLevel(1); game.override.enemySpecies(Species.RESHIRAM); game.override.enemyAbility(Abilities.ROUGH_SKIN); - game.override.enemyMoveset([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]); + game.override.enemyMoveset([ Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH ]); game.override.battleType("single"); game.override.startingWave(97); diff --git a/src/test/moves/fusion_flare.test.ts b/src/test/moves/fusion_flare.test.ts index 0a8f6f9115d..162cefcfb1e 100644 --- a/src/test/moves/fusion_flare.test.ts +++ b/src/test/moves/fusion_flare.test.ts @@ -24,11 +24,11 @@ describe("Moves - Fusion Flare", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.moveset([fusionFlare]); + game.override.moveset([ fusionFlare ]); game.override.startingLevel(1); game.override.enemySpecies(Species.RATTATA); - game.override.enemyMoveset([Moves.REST, Moves.REST, Moves.REST, Moves.REST]); + game.override.enemyMoveset([ Moves.REST, Moves.REST, Moves.REST, Moves.REST ]); game.override.battleType("single"); game.override.startingWave(97); diff --git a/src/test/moves/fusion_flare_bolt.test.ts b/src/test/moves/fusion_flare_bolt.test.ts index a8372fcaaab..0d9b9898276 100644 --- a/src/test/moves/fusion_flare_bolt.test.ts +++ b/src/test/moves/fusion_flare_bolt.test.ts @@ -30,11 +30,11 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.moveset([fusionFlare.id, fusionBolt.id]); + game.override.moveset([ fusionFlare.id, fusionBolt.id ]); game.override.startingLevel(1); game.override.enemySpecies(Species.RESHIRAM); - game.override.enemyMoveset([Moves.REST, Moves.REST, Moves.REST, Moves.REST]); + game.override.enemyMoveset([ Moves.REST, Moves.REST, Moves.REST, Moves.REST ]); game.override.battleType("double"); game.override.startingWave(97); @@ -54,7 +54,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { game.move.select(fusionBolt.id, 1, BattlerIndex.ENEMY); // Force user party to act before enemy party - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); await game.phaseInterceptor.to(MoveEffectPhase, false); expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionFlare.id); @@ -77,7 +77,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { game.move.select(fusionFlare.id, 1, BattlerIndex.ENEMY); // Force user party to act before enemy party - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); await game.phaseInterceptor.to(MoveEffectPhase, false); expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionBolt.id); @@ -100,7 +100,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { game.move.select(fusionBolt.id, 1, BattlerIndex.PLAYER); // Force first enemy to act (and fail) in between party - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to(MoveEffectPhase, false); expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionFlare.id); @@ -119,7 +119,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { }, 20000); it("FUSION_FLARE should not double power of subsequent FUSION_BOLT if a move succeeded in between", async () => { - game.override.enemyMoveset([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]); + game.override.enemyMoveset([ Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH ]); await game.startBattle([ Species.ZEKROM, Species.ZEKROM @@ -129,7 +129,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { game.move.select(fusionBolt.id, 1, BattlerIndex.ENEMY); // Force first enemy to act in between party - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to(MoveEffectPhase, false); expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionFlare.id); @@ -156,7 +156,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { game.move.select(fusionFlare.id, 1, BattlerIndex.PLAYER); // Force user party to act before enemy party - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); await game.phaseInterceptor.to(MoveEffectPhase, false); expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionBolt.id); @@ -170,7 +170,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { }, 20000); it("FUSION_FLARE and FUSION_BOLT alternating throughout turn should double power of subsequent moves", async () => { - game.override.enemyMoveset([fusionFlare.id, fusionFlare.id, fusionFlare.id, fusionFlare.id]); + game.override.enemyMoveset([ fusionFlare.id, fusionFlare.id, fusionFlare.id, fusionFlare.id ]); await game.startBattle([ Species.ZEKROM, Species.ZEKROM @@ -186,12 +186,12 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { // Mock stats by replacing entries in copy with desired values for specific stats const stats = { enemy: [ - [...enemyParty[0].stats], - [...enemyParty[1].stats], + [ ...enemyParty[0].stats ], + [ ...enemyParty[1].stats ], ], player: [ - [...party[0].stats], - [...party[1].stats], + [ ...party[0].stats ], + [ ...party[1].stats ], ] }; @@ -205,7 +205,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { game.move.select(fusionBolt.id, 1, BattlerIndex.ENEMY); // Force first enemy to act in between party - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to(MoveEffectPhase, false); expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionBolt.id); @@ -229,7 +229,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { }, 20000); it("FUSION_FLARE and FUSION_BOLT alternating throughout turn should double power of subsequent moves if moves are aimed at allies", async () => { - game.override.enemyMoveset([fusionFlare.id, fusionFlare.id, fusionFlare.id, fusionFlare.id]); + game.override.enemyMoveset([ fusionFlare.id, fusionFlare.id, fusionFlare.id, fusionFlare.id ]); await game.startBattle([ Species.ZEKROM, Species.ZEKROM @@ -245,12 +245,12 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { // Mock stats by replacing entries in copy with desired values for specific stats const stats = { enemy: [ - [...enemyParty[0].stats], - [...enemyParty[1].stats], + [ ...enemyParty[0].stats ], + [ ...enemyParty[1].stats ], ], player: [ - [...party[0].stats], - [...party[1].stats], + [ ...party[0].stats ], + [ ...party[1].stats ], ] }; @@ -264,7 +264,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { game.move.select(fusionBolt.id, 1, BattlerIndex.PLAYER); // Force first enemy to act in between party - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to(MoveEffectPhase, false); expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(fusionBolt.id); diff --git a/src/test/moves/gastro_acid.test.ts b/src/test/moves/gastro_acid.test.ts index 60b2bd80c05..fdd75b90b13 100644 --- a/src/test/moves/gastro_acid.test.ts +++ b/src/test/moves/gastro_acid.test.ts @@ -7,7 +7,6 @@ import GameManager from "#test/utils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; - describe("Moves - Gastro Acid", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -28,7 +27,7 @@ describe("Moves - Gastro Acid", () => { game.override.startingLevel(1); game.override.enemyLevel(100); game.override.ability(Abilities.NONE); - game.override.moveset([Moves.GASTRO_ACID, Moves.WATER_GUN, Moves.SPLASH, Moves.CORE_ENFORCER]); + game.override.moveset([ Moves.GASTRO_ACID, Moves.WATER_GUN, Moves.SPLASH, Moves.CORE_ENFORCER ]); game.override.enemySpecies(Species.BIDOOF); game.override.enemyMoveset(Moves.SPLASH); game.override.enemyAbility(Abilities.WATER_ABSORB); @@ -69,7 +68,7 @@ describe("Moves - Gastro Acid", () => { game.move.select(Moves.CORE_ENFORCER); // Force player to be slower to enable Core Enforcer to proc its suppression effect - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.phaseInterceptor.to("TurnInitPhase"); diff --git a/src/test/moves/gigaton_hammer.test.ts b/src/test/moves/gigaton_hammer.test.ts index b0ab06fdeb5..f54700fe660 100644 --- a/src/test/moves/gigaton_hammer.test.ts +++ b/src/test/moves/gigaton_hammer.test.ts @@ -25,7 +25,7 @@ describe("Moves - Gigaton Hammer", () => { .battleType("single") .enemySpecies(Species.MAGIKARP) .starterSpecies(Species.FEEBAS) - .moveset([Moves.GIGATON_HAMMER]) + .moveset([ Moves.GIGATON_HAMMER ]) .startingLevel(10) .enemyLevel(100) .enemyMoveset(Moves.SPLASH) @@ -38,7 +38,7 @@ describe("Moves - Gigaton Hammer", () => { const enemy1 = game.scene.getEnemyPokemon()!; game.move.select(Moves.GIGATON_HAMMER); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to("MoveEndPhase"); expect(enemy1.hp).toBeLessThan(enemy1.getMaxHp()); @@ -61,7 +61,7 @@ describe("Moves - Gigaton Hammer", () => { const enemy1 = game.scene.getEnemyPokemon()!; game.move.select(Moves.GIGATON_HAMMER); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to("MoveEndPhase"); expect(enemy1.hp).toBeLessThan(enemy1.getMaxHp()); diff --git a/src/test/moves/glaive_rush.test.ts b/src/test/moves/glaive_rush.test.ts index 1a524b4aef6..b36c3e20c7a 100644 --- a/src/test/moves/glaive_rush.test.ts +++ b/src/test/moves/glaive_rush.test.ts @@ -7,7 +7,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; - describe("Moves - Glaive Rush", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -29,10 +28,10 @@ describe("Moves - Glaive Rush", () => { .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset([Moves.GLAIVE_RUSH]) + .enemyMoveset([ Moves.GLAIVE_RUSH ]) .starterSpecies(Species.KLINK) .ability(Abilities.BALL_FETCH) - .moveset([Moves.SHADOW_SNEAK, Moves.AVALANCHE, Moves.SPLASH, Moves.GLAIVE_RUSH]); + .moveset([ Moves.SHADOW_SNEAK, Moves.AVALANCHE, Moves.SPLASH, Moves.GLAIVE_RUSH ]); }); it("takes double damage from attacks", async () => { @@ -67,7 +66,7 @@ describe("Moves - Glaive Rush", () => { it("interacts properly with multi-lens", async () => { game.override .startingHeldItems([{ name: "MULTI_LENS", count: 2 }]) - .enemyMoveset([Moves.AVALANCHE]); + .enemyMoveset([ Moves.AVALANCHE ]); await game.classicMode.startBattle(); const player = game.scene.getPlayerPokemon()!; @@ -88,7 +87,7 @@ describe("Moves - Glaive Rush", () => { }); it("secondary effects only last until next move", async () => { - game.override.enemyMoveset([Moves.SHADOW_SNEAK]); + game.override.enemyMoveset([ Moves.SHADOW_SNEAK ]); await game.classicMode.startBattle(); const player = game.scene.getPlayerPokemon()!; @@ -115,9 +114,9 @@ describe("Moves - Glaive Rush", () => { it("secondary effects are removed upon switching", async () => { game.override - .enemyMoveset([Moves.SHADOW_SNEAK]) + .enemyMoveset([ Moves.SHADOW_SNEAK ]) .starterSpecies(0); - await game.classicMode.startBattle([Species.KLINK, Species.FEEBAS]); + await game.classicMode.startBattle([ Species.KLINK, Species.FEEBAS ]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; @@ -138,7 +137,7 @@ describe("Moves - Glaive Rush", () => { }); it("secondary effects don't activate if move fails", async () => { - game.override.moveset([Moves.SHADOW_SNEAK, Moves.PROTECT, Moves.SPLASH, Moves.GLAIVE_RUSH]); + game.override.moveset([ Moves.SHADOW_SNEAK, Moves.PROTECT, Moves.SPLASH, Moves.GLAIVE_RUSH ]); await game.classicMode.startBattle(); const player = game.scene.getPlayerPokemon()!; @@ -152,7 +151,7 @@ describe("Moves - Glaive Rush", () => { game.move.select(Moves.SHADOW_SNEAK); await game.phaseInterceptor.to("TurnEndPhase"); - game.override.enemyMoveset([Moves.SPLASH]); + game.override.enemyMoveset([ Moves.SPLASH ]); const damagedHP1 = 1000 - enemy.hp; enemy.hp = 1000; diff --git a/src/test/moves/guard_split.test.ts b/src/test/moves/guard_split.test.ts index 36be82ba5e4..519f347b920 100644 --- a/src/test/moves/guard_split.test.ts +++ b/src/test/moves/guard_split.test.ts @@ -55,7 +55,7 @@ describe("Moves - Guard Split", () => { }, 20000); it("should be idempotent", async () => { - game.override.enemyMoveset([Moves.GUARD_SPLIT]); + game.override.enemyMoveset([ Moves.GUARD_SPLIT ]); await game.startBattle([ Species.INDEEDEE ]); diff --git a/src/test/moves/hard_press.test.ts b/src/test/moves/hard_press.test.ts index 5d2e4e5b145..0fa4181491c 100644 --- a/src/test/moves/hard_press.test.ts +++ b/src/test/moves/hard_press.test.ts @@ -30,12 +30,12 @@ describe("Moves - Hard Press", () => { game.override.enemySpecies(Species.MUNCHLAX); game.override.enemyAbility(Abilities.BALL_FETCH); game.override.enemyMoveset(Moves.SPLASH); - game.override.moveset([Moves.HARD_PRESS]); + game.override.moveset([ Moves.HARD_PRESS ]); vi.spyOn(moveToCheck, "calculateBattlePower"); }); it("should return 100 power if target HP ratio is at 100%", async () => { - await game.startBattle([Species.PIKACHU]); + await game.startBattle([ Species.PIKACHU ]); game.move.select(Moves.HARD_PRESS); await game.phaseInterceptor.to(MoveEffectPhase); @@ -44,7 +44,7 @@ describe("Moves - Hard Press", () => { }); it("should return 50 power if target HP ratio is at 50%", async () => { - await game.startBattle([Species.PIKACHU]); + await game.startBattle([ Species.PIKACHU ]); const targetHpRatio = .5; const enemy = game.scene.getEnemyPokemon()!; @@ -57,7 +57,7 @@ describe("Moves - Hard Press", () => { }); it("should return 1 power if target HP ratio is at 1%", async () => { - await game.startBattle([Species.PIKACHU]); + await game.startBattle([ Species.PIKACHU ]); const targetHpRatio = .01; const enemy = game.scene.getEnemyPokemon()!; @@ -70,7 +70,7 @@ describe("Moves - Hard Press", () => { }); it("should return 1 power if target HP ratio is less than 1%", async () => { - await game.startBattle([Species.PIKACHU]); + await game.startBattle([ Species.PIKACHU ]); const targetHpRatio = .005; const enemy = game.scene.getEnemyPokemon()!; diff --git a/src/test/moves/haze.test.ts b/src/test/moves/haze.test.ts index e5474801899..30aab8bd98c 100644 --- a/src/test/moves/haze.test.ts +++ b/src/test/moves/haze.test.ts @@ -31,12 +31,12 @@ describe("Moves - Haze", () => { game.override.enemyAbility(Abilities.NONE); game.override.startingLevel(100); - game.override.moveset([Moves.HAZE, Moves.SWORDS_DANCE, Moves.CHARM, Moves.SPLASH]); + game.override.moveset([ Moves.HAZE, Moves.SWORDS_DANCE, Moves.CHARM, Moves.SPLASH ]); game.override.ability(Abilities.NONE); }); it("should reset all stat changes of all Pokemon on field", async () => { - await game.startBattle([Species.RATTATA]); + await game.startBattle([ Species.RATTATA ]); const user = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; diff --git a/src/test/moves/heal_bell.test.ts b/src/test/moves/heal_bell.test.ts index 1421809cf6c..e4a019d9c0e 100644 --- a/src/test/moves/heal_bell.test.ts +++ b/src/test/moves/heal_bell.test.ts @@ -24,7 +24,7 @@ describe("Moves - Heal Bell", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.HEAL_BELL, Moves.SPLASH]) + .moveset([ Moves.HEAL_BELL, Moves.SPLASH ]) .statusEffect(StatusEffect.BURN) .battleType("double") .enemyAbility(Abilities.BALL_FETCH) @@ -32,8 +32,8 @@ describe("Moves - Heal Bell", () => { }); it("should cure status effect of the user, its ally, and all party pokemon", async () => { - await game.classicMode.startBattle([Species.RATTATA, Species.RATTATA, Species.RATTATA]); - const [leftPlayer, rightPlayer, partyPokemon] = game.scene.getParty(); + await game.classicMode.startBattle([ Species.RATTATA, Species.RATTATA, Species.RATTATA ]); + const [ leftPlayer, rightPlayer, partyPokemon ] = game.scene.getParty(); vi.spyOn(leftPlayer, "resetStatus"); vi.spyOn(rightPlayer, "resetStatus"); @@ -55,8 +55,8 @@ describe("Moves - Heal Bell", () => { it("should not cure status effect of the target/target's allies", async () => { game.override.enemyStatusEffect(StatusEffect.BURN); - await game.classicMode.startBattle([Species.RATTATA, Species.RATTATA]); - const [leftOpp, rightOpp] = game.scene.getEnemyField(); + await game.classicMode.startBattle([ Species.RATTATA, Species.RATTATA ]); + const [ leftOpp, rightOpp ] = game.scene.getEnemyField(); vi.spyOn(leftOpp, "resetStatus"); vi.spyOn(rightOpp, "resetStatus"); @@ -78,8 +78,8 @@ describe("Moves - Heal Bell", () => { it("should not cure status effect of allies ON FIELD with Soundproof, should still cure allies in party", async () => { game.override.ability(Abilities.SOUNDPROOF); - await game.classicMode.startBattle([Species.RATTATA, Species.RATTATA, Species.RATTATA]); - const [leftPlayer, rightPlayer, partyPokemon] = game.scene.getParty(); + await game.classicMode.startBattle([ Species.RATTATA, Species.RATTATA, Species.RATTATA ]); + const [ leftPlayer, rightPlayer, partyPokemon ] = game.scene.getParty(); vi.spyOn(leftPlayer, "resetStatus"); vi.spyOn(rightPlayer, "resetStatus"); diff --git a/src/test/moves/heal_block.test.ts b/src/test/moves/heal_block.test.ts index 14662ac3fce..252533215a8 100644 --- a/src/test/moves/heal_block.test.ts +++ b/src/test/moves/heal_block.test.ts @@ -28,7 +28,7 @@ describe("Moves - Heal Block", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.ABSORB, Moves.WISH, Moves.SPLASH, Moves.AQUA_RING]) + .moveset([ Moves.ABSORB, Moves.WISH, Moves.SPLASH, Moves.AQUA_RING ]) .enemyMoveset(Moves.HEAL_BLOCK) .ability(Abilities.NO_GUARD) .enemyAbility(Abilities.BALL_FETCH) @@ -38,7 +38,7 @@ describe("Moves - Heal Block", () => { it("shouldn't stop damage from HP-drain attacks, just HP restoration", async() => { - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([ Species.CHARIZARD ]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; @@ -46,7 +46,7 @@ describe("Moves - Heal Block", () => { player.damageAndUpdate(enemy.getMaxHp() - 1); game.move.select(Moves.ABSORB); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.phaseInterceptor.to("TurnEndPhase"); expect(player.hp).toBe(1); @@ -56,13 +56,13 @@ describe("Moves - Heal Block", () => { it("shouldn't stop Liquid Ooze from dealing damage", async() => { game.override.enemyAbility(Abilities.LIQUID_OOZE); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([ Species.CHARIZARD ]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; game.move.select(Moves.ABSORB); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.phaseInterceptor.to("TurnEndPhase"); expect(player.isFullHp()).toBe(false); @@ -70,7 +70,7 @@ describe("Moves - Heal Block", () => { }); it("should stop delayed heals, such as from Wish", async() => { - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([ Species.CHARIZARD ]); const player = game.scene.getPlayerPokemon()!; @@ -91,7 +91,7 @@ describe("Moves - Heal Block", () => { it("should prevent Grassy Terrain from restoring HP", async() => { game.override.enemyAbility(Abilities.GRASSY_SURGE); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([ Species.CHARIZARD ]); const player = game.scene.getPlayerPokemon()!; @@ -104,7 +104,7 @@ describe("Moves - Heal Block", () => { }); it("should prevent healing from heal-over-time moves", async() => { - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([ Species.CHARIZARD ]); const player = game.scene.getPlayerPokemon()!; @@ -122,7 +122,7 @@ describe("Moves - Heal Block", () => { .weather(WeatherType.RAIN) .ability(Abilities.RAIN_DISH); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([ Species.CHARIZARD ]); const player = game.scene.getPlayerPokemon()!; @@ -135,9 +135,9 @@ describe("Moves - Heal Block", () => { }); it("should stop healing from items", async() => { - game.override.startingHeldItems([{name: "LEFTOVERS"}]); + game.override.startingHeldItems([{ name: "LEFTOVERS" }]); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([ Species.CHARIZARD ]); const player = game.scene.getPlayerPokemon()!; player.damageAndUpdate(player.getMaxHp() - 1); diff --git a/src/test/moves/hyper_beam.test.ts b/src/test/moves/hyper_beam.test.ts index a6a471569ed..af8440a0911 100644 --- a/src/test/moves/hyper_beam.test.ts +++ b/src/test/moves/hyper_beam.test.ts @@ -30,17 +30,17 @@ describe("Moves - Hyper Beam", () => { game.override.ability(Abilities.BALL_FETCH); game.override.enemySpecies(Species.SNORLAX); game.override.enemyAbility(Abilities.BALL_FETCH); - game.override.enemyMoveset([Moves.SPLASH]); + game.override.enemyMoveset([ Moves.SPLASH ]); game.override.enemyLevel(100); - game.override.moveset([Moves.HYPER_BEAM, Moves.TACKLE]); + game.override.moveset([ Moves.HYPER_BEAM, Moves.TACKLE ]); vi.spyOn(allMoves[Moves.HYPER_BEAM], "accuracy", "get").mockReturnValue(100); }); it( "should force the user to recharge on the next turn (and only that turn)", async () => { - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; diff --git a/src/test/moves/imprison.test.ts b/src/test/moves/imprison.test.ts index abb4b3cac6c..f10e20dab63 100644 --- a/src/test/moves/imprison.test.ts +++ b/src/test/moves/imprison.test.ts @@ -25,13 +25,13 @@ describe("Moves - Imprison", () => { game.override .battleType("single") .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset([Moves.IMPRISON, Moves.SPLASH, Moves.GROWL]) + .enemyMoveset([ Moves.IMPRISON, Moves.SPLASH, Moves.GROWL ]) .enemySpecies(Species.SHUCKLE) - .moveset([Moves.TRANSFORM, Moves.SPLASH]); + .moveset([ Moves.TRANSFORM, Moves.SPLASH ]); }); it("Pokemon under Imprison cannot use shared moves", async () => { - await game.classicMode.startBattle([Species.REGIELEKI]); + await game.classicMode.startBattle([ Species.REGIELEKI ]); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -55,7 +55,7 @@ describe("Moves - Imprison", () => { }); it("Imprison applies to Pokemon switched into Battle", async () => { - await game.classicMode.startBattle([Species.REGIELEKI, Species.BULBASAUR]); + await game.classicMode.startBattle([ Species.REGIELEKI, Species.BULBASAUR ]); const playerPokemon1 = game.scene.getPlayerPokemon()!; @@ -78,8 +78,8 @@ describe("Moves - Imprison", () => { }); it("The effects of Imprison only end when the source is no longer active", async () => { - game.override.moveset([Moves.SPLASH, Moves.IMPRISON]); - await game.classicMode.startBattle([Species.REGIELEKI, Species.BULBASAUR]); + game.override.moveset([ Moves.SPLASH, Moves.IMPRISON ]); + await game.classicMode.startBattle([ Species.REGIELEKI, Species.BULBASAUR ]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; diff --git a/src/test/moves/jaw_lock.test.ts b/src/test/moves/jaw_lock.test.ts index 3398ec00b3b..30dbcac64a8 100644 --- a/src/test/moves/jaw_lock.test.ts +++ b/src/test/moves/jaw_lock.test.ts @@ -12,7 +12,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; - describe("Moves - Jaw Lock", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -35,7 +34,7 @@ describe("Moves - Jaw Lock", () => { .enemySpecies(Species.SNORLAX) .enemyAbility(Abilities.INSOMNIA) .enemyMoveset(Moves.SPLASH) - .moveset([Moves.JAW_LOCK, Moves.SPLASH]) + .moveset([ Moves.JAW_LOCK, Moves.SPLASH ]) .startingLevel(100) .enemyLevel(100) .disableCrits(); @@ -44,13 +43,13 @@ describe("Moves - Jaw Lock", () => { it( "should trap the move's user and target", async () => { - await game.startBattle([Species.BULBASAUR]); + await game.startBattle([ Species.BULBASAUR ]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; game.move.select(Moves.JAW_LOCK); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to(MoveEffectPhase, false); @@ -68,13 +67,13 @@ describe("Moves - Jaw Lock", () => { "should not trap either pokemon if the target faints", async () => { game.override.enemyLevel(1); - await game.startBattle([Species.BULBASAUR]); + await game.startBattle([ Species.BULBASAUR ]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; game.move.select(Moves.JAW_LOCK); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to(MoveEffectPhase, false); @@ -96,13 +95,13 @@ describe("Moves - Jaw Lock", () => { it( "should only trap the user until the target faints", async () => { - await game.startBattle([Species.BULBASAUR]); + await game.startBattle([ Species.BULBASAUR ]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; game.move.select(Moves.JAW_LOCK); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to(MoveEffectPhase); @@ -122,14 +121,14 @@ describe("Moves - Jaw Lock", () => { async () => { game.override.battleType("double"); - await game.startBattle([Species.CHARMANDER, Species.BULBASAUR]); + await game.startBattle([ Species.CHARMANDER, Species.BULBASAUR ]); const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); game.move.select(Moves.JAW_LOCK, 0, BattlerIndex.ENEMY); game.move.select(Moves.SPLASH, 1); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); await game.phaseInterceptor.to(MoveEffectPhase); @@ -152,9 +151,9 @@ describe("Moves - Jaw Lock", () => { it( "should not trap either pokemon if the target is protected", async () => { - game.override.enemyMoveset([Moves.PROTECT]); + game.override.enemyMoveset([ Moves.PROTECT ]); - await game.startBattle([Species.BULBASAUR]); + await game.startBattle([ Species.BULBASAUR ]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; diff --git a/src/test/moves/lash_out.test.ts b/src/test/moves/lash_out.test.ts index 7a8ab6c5bb6..014c0ae8fe5 100644 --- a/src/test/moves/lash_out.test.ts +++ b/src/test/moves/lash_out.test.ts @@ -8,7 +8,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; - describe("Moves - Lash Out", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -30,12 +29,12 @@ describe("Moves - Lash Out", () => { .disableCrits() .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.FUR_COAT) - .enemyMoveset([Moves.GROWL]) + .enemyMoveset([ Moves.GROWL ]) .startingLevel(10) .enemyLevel(10) .starterSpecies(Species.FEEBAS) .ability(Abilities.BALL_FETCH) - .moveset([Moves.LASH_OUT]); + .moveset([ Moves.LASH_OUT ]); }); @@ -44,7 +43,7 @@ describe("Moves - Lash Out", () => { await game.classicMode.startBattle(); game.move.select(Moves.LASH_OUT); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.phaseInterceptor.to("BerryPhase"); expect(allMoves[Moves.LASH_OUT].calculateBattlePower).toHaveReturnedWith(150); diff --git a/src/test/moves/light_screen.test.ts b/src/test/moves/light_screen.test.ts index e94dc4a299e..2308458003d 100644 --- a/src/test/moves/light_screen.test.ts +++ b/src/test/moves/light_screen.test.ts @@ -32,16 +32,16 @@ describe("Moves - Light Screen", () => { game = new GameManager(phaserGame); game.override.battleType("single"); game.override.ability(Abilities.NONE); - game.override.moveset([Moves.ABSORB, Moves.DAZZLING_GLEAM, Moves.TACKLE]); + game.override.moveset([ Moves.ABSORB, Moves.DAZZLING_GLEAM, Moves.TACKLE ]); game.override.enemyLevel(100); game.override.enemySpecies(Species.MAGIKARP); - game.override.enemyMoveset([Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN]); + game.override.enemyMoveset([ Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN ]); game.override.disableCrits(); }); it("reduces damage of special attacks by half in a single battle", async () => { const moveToUse = Moves.ABSORB; - await game.startBattle([Species.SHUCKLE]); + await game.startBattle([ Species.SHUCKLE ]); game.move.select(moveToUse); @@ -56,7 +56,7 @@ describe("Moves - Light Screen", () => { game.override.battleType("double"); const moveToUse = Moves.DAZZLING_GLEAM; - await game.startBattle([Species.SHUCKLE, Species.SHUCKLE]); + await game.startBattle([ Species.SHUCKLE, Species.SHUCKLE ]); game.move.select(moveToUse); game.move.select(moveToUse, 1); @@ -69,7 +69,7 @@ describe("Moves - Light Screen", () => { it("does not affect physical attacks", async () => { const moveToUse = Moves.TACKLE; - await game.startBattle([Species.SHUCKLE]); + await game.startBattle([ Species.SHUCKLE ]); game.move.select(moveToUse); diff --git a/src/test/moves/lucky_chant.test.ts b/src/test/moves/lucky_chant.test.ts index 77ea751aee1..02e9dd24465 100644 --- a/src/test/moves/lucky_chant.test.ts +++ b/src/test/moves/lucky_chant.test.ts @@ -8,7 +8,6 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import GameManager from "../utils/gameManager"; - describe("Moves - Lucky Chant", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -28,10 +27,10 @@ describe("Moves - Lucky Chant", () => { game.override .battleType("single") - .moveset([Moves.LUCKY_CHANT, Moves.SPLASH, Moves.FOLLOW_ME]) + .moveset([ Moves.LUCKY_CHANT, Moves.SPLASH, Moves.FOLLOW_ME ]) .enemySpecies(Species.SNORLAX) .enemyAbility(Abilities.INSOMNIA) - .enemyMoveset([Moves.FLOWER_TRICK]) + .enemyMoveset([ Moves.FLOWER_TRICK ]) .startingLevel(100) .enemyLevel(100); }); @@ -39,7 +38,7 @@ describe("Moves - Lucky Chant", () => { it( "should prevent critical hits from moves", async () => { - await game.startBattle([Species.CHARIZARD]); + await game.startBattle([ Species.CHARIZARD ]); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -63,7 +62,7 @@ describe("Moves - Lucky Chant", () => { async () => { game.override.battleType("double"); - await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.startBattle([ Species.CHARIZARD, Species.BLASTOISE ]); const playerPokemon = game.scene.getPlayerField(); @@ -87,9 +86,9 @@ describe("Moves - Lucky Chant", () => { it( "should prevent critical hits from field effects", async () => { - game.override.enemyMoveset([Moves.TACKLE]); + game.override.enemyMoveset([ Moves.TACKLE ]); - await game.startBattle([Species.CHARIZARD]); + await game.startBattle([ Species.CHARIZARD ]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; diff --git a/src/test/moves/lunar_blessing.test.ts b/src/test/moves/lunar_blessing.test.ts index 6a104762f4d..52c41a30e11 100644 --- a/src/test/moves/lunar_blessing.test.ts +++ b/src/test/moves/lunar_blessing.test.ts @@ -28,13 +28,13 @@ describe("Moves - Lunar Blessing", () => { game.override.enemyMoveset(Moves.SPLASH); game.override.enemyAbility(Abilities.BALL_FETCH); - game.override.moveset([Moves.LUNAR_BLESSING, Moves.SPLASH]); + game.override.moveset([ Moves.LUNAR_BLESSING, Moves.SPLASH ]); game.override.ability(Abilities.BALL_FETCH); }); it("should restore 25% HP of the user and its ally", async () => { - await game.startBattle([Species.RATTATA, Species.RATTATA]); - const [leftPlayer, rightPlayer] = game.scene.getPlayerField(); + await game.startBattle([ Species.RATTATA, Species.RATTATA ]); + const [ leftPlayer, rightPlayer ] = game.scene.getPlayerField(); vi.spyOn(leftPlayer, "getMaxHp").mockReturnValue(100); vi.spyOn(rightPlayer, "getMaxHp").mockReturnValue(100); @@ -62,8 +62,8 @@ describe("Moves - Lunar Blessing", () => { it("should cure status effect of the user and its ally", async () => { game.override.statusEffect(StatusEffect.BURN); - await game.startBattle([Species.RATTATA, Species.RATTATA]); - const [leftPlayer, rightPlayer] = game.scene.getPlayerField(); + await game.startBattle([ Species.RATTATA, Species.RATTATA ]); + const [ leftPlayer, rightPlayer ] = game.scene.getPlayerField(); vi.spyOn(leftPlayer, "resetStatus"); vi.spyOn(rightPlayer, "resetStatus"); diff --git a/src/test/moves/magnet_rise.test.ts b/src/test/moves/magnet_rise.test.ts index 9037e377090..0afcad67ea3 100644 --- a/src/test/moves/magnet_rise.test.ts +++ b/src/test/moves/magnet_rise.test.ts @@ -26,10 +26,10 @@ describe("Moves - Magnet Rise", () => { game.override.battleType("single"); game.override.starterSpecies(Species.MAGNEZONE); game.override.enemySpecies(Species.RATTATA); - game.override.enemyMoveset([Moves.DRILL_RUN, Moves.DRILL_RUN, Moves.DRILL_RUN, Moves.DRILL_RUN]); + game.override.enemyMoveset([ Moves.DRILL_RUN, Moves.DRILL_RUN, Moves.DRILL_RUN, Moves.DRILL_RUN ]); game.override.disableCrits(); game.override.enemyLevel(1); - game.override.moveset([moveToUse, Moves.SPLASH, Moves.GRAVITY, Moves.BATON_PASS]); + game.override.moveset([ moveToUse, Moves.SPLASH, Moves.GRAVITY, Moves.BATON_PASS ]); }); it("MAGNET RISE", async () => { diff --git a/src/test/moves/make_it_rain.test.ts b/src/test/moves/make_it_rain.test.ts index 2b28a958ff0..08021227e9c 100644 --- a/src/test/moves/make_it_rain.test.ts +++ b/src/test/moves/make_it_rain.test.ts @@ -9,7 +9,6 @@ import { MoveEndPhase } from "#app/phases/move-end-phase"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; - describe("Moves - Make It Rain", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -27,7 +26,7 @@ describe("Moves - Make It Rain", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleType("double"); - game.override.moveset([Moves.MAKE_IT_RAIN, Moves.SPLASH]); + game.override.moveset([ Moves.MAKE_IT_RAIN, Moves.SPLASH ]); game.override.enemySpecies(Species.SNORLAX); game.override.enemyAbility(Abilities.INSOMNIA); game.override.enemyMoveset(Moves.SPLASH); @@ -36,7 +35,7 @@ describe("Moves - Make It Rain", () => { }); it("should only lower SPATK stat stage by 1 once in a double battle", async () => { - await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.startBattle([ Species.CHARIZARD, Species.BLASTOISE ]); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -52,7 +51,7 @@ describe("Moves - Make It Rain", () => { game.override.enemyLevel(1); // ensures the enemy will faint game.override.battleType("single"); - await game.startBattle([Species.CHARIZARD]); + await game.startBattle([ Species.CHARIZARD ]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -68,7 +67,7 @@ describe("Moves - Make It Rain", () => { it("should reduce Sp. Atk. once after KOing two enemies", async () => { game.override.enemyLevel(1); // ensures the enemy will faint - await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.startBattle([ Species.CHARIZARD, Species.BLASTOISE ]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyField(); @@ -83,7 +82,7 @@ describe("Moves - Make It Rain", () => { }); it("should lower SPATK stat stage by 1 if it only hits the second target", async () => { - await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.startBattle([ Species.CHARIZARD, Species.BLASTOISE ]); const playerPokemon = game.scene.getPlayerPokemon()!; diff --git a/src/test/moves/mat_block.test.ts b/src/test/moves/mat_block.test.ts index 0746f9bcfa9..a4d9177cbdc 100644 --- a/src/test/moves/mat_block.test.ts +++ b/src/test/moves/mat_block.test.ts @@ -10,7 +10,6 @@ import { CommandPhase } from "#app/phases/command-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; - describe("Moves - Mat Block", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -30,10 +29,10 @@ describe("Moves - Mat Block", () => { game.override.battleType("double"); - game.override.moveset([Moves.MAT_BLOCK, Moves.SPLASH]); + game.override.moveset([ Moves.MAT_BLOCK, Moves.SPLASH ]); game.override.enemySpecies(Species.SNORLAX); - game.override.enemyMoveset([Moves.TACKLE]); + game.override.enemyMoveset([ Moves.TACKLE ]); game.override.enemyAbility(Abilities.INSOMNIA); game.override.startingLevel(100); @@ -43,7 +42,7 @@ describe("Moves - Mat Block", () => { test( "should protect the user and allies from attack moves", async () => { - await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.startBattle([ Species.CHARIZARD, Species.BLASTOISE ]); const leadPokemon = game.scene.getPlayerField(); @@ -62,9 +61,9 @@ describe("Moves - Mat Block", () => { test( "should not protect the user and allies from status moves", async () => { - game.override.enemyMoveset([Moves.GROWL]); + game.override.enemyMoveset([ Moves.GROWL ]); - await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.startBattle([ Species.CHARIZARD, Species.BLASTOISE ]); const leadPokemon = game.scene.getPlayerField(); @@ -83,7 +82,7 @@ describe("Moves - Mat Block", () => { test( "should fail when used after the first turn", async () => { - await game.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.startBattle([ Species.BLASTOISE, Species.CHARIZARD ]); const leadPokemon = game.scene.getPlayerField(); diff --git a/src/test/moves/miracle_eye.test.ts b/src/test/moves/miracle_eye.test.ts index 0528b509c82..70f487de942 100644 --- a/src/test/moves/miracle_eye.test.ts +++ b/src/test/moves/miracle_eye.test.ts @@ -28,7 +28,7 @@ describe("Moves - Miracle Eye", () => { .enemyMoveset(Moves.SPLASH) .enemyLevel(5) .starterSpecies(Species.MAGIKARP) - .moveset([Moves.MIRACLE_EYE, Moves.CONFUSION]); + .moveset([ Moves.MIRACLE_EYE, Moves.CONFUSION ]); }); it("should allow Psychic moves to hit Dark types", async () => { @@ -43,7 +43,7 @@ describe("Moves - Miracle Eye", () => { game.move.select(Moves.MIRACLE_EYE); await game.toNextTurn(); game.move.select(Moves.CONFUSION); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to(MoveEffectPhase); expect(enemy.hp).toBeLessThan(enemy.getMaxHp()); diff --git a/src/test/moves/multi_target.test.ts b/src/test/moves/multi_target.test.ts index cd69482bd8e..b6836b1dcb9 100644 --- a/src/test/moves/multi_target.test.ts +++ b/src/test/moves/multi_target.test.ts @@ -8,7 +8,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; - describe("Multi-target damage reduction", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -33,18 +32,18 @@ describe("Multi-target damage reduction", () => { .enemySpecies(Species.POLIWAG) .enemyMoveset(Moves.SPLASH) .enemyAbility(Abilities.BALL_FETCH) - .moveset([Moves.TACKLE, Moves.DAZZLING_GLEAM, Moves.EARTHQUAKE, Moves.SPLASH]) + .moveset([ Moves.TACKLE, Moves.DAZZLING_GLEAM, Moves.EARTHQUAKE, Moves.SPLASH ]) .ability(Abilities.BALL_FETCH); }); it("should reduce d.gleam damage when multiple enemies but not tackle", async () => { - await game.startBattle([Species.MAGIKARP, Species.FEEBAS]); + await game.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); - const [enemy1, enemy2] = game.scene.getEnemyField(); + const [ enemy1, enemy2 ] = game.scene.getEnemyField(); game.move.select(Moves.DAZZLING_GLEAM); game.move.select(Moves.TACKLE, 1, BattlerIndex.ENEMY); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); await game.phaseInterceptor.to("MoveEndPhase"); const gleam1 = enemy1.getMaxHp() - enemy1.hp; @@ -60,7 +59,7 @@ describe("Multi-target damage reduction", () => { game.move.select(Moves.DAZZLING_GLEAM); game.move.select(Moves.TACKLE, 1, BattlerIndex.ENEMY); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -78,14 +77,14 @@ describe("Multi-target damage reduction", () => { }); it("should reduce earthquake when more than one pokemon other than user is not fainted", async () => { - await game.startBattle([Species.MAGIKARP, Species.FEEBAS]); + await game.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); const player2 = game.scene.getParty()[1]; - const [enemy1, enemy2] = game.scene.getEnemyField(); + const [ enemy1, enemy2 ] = game.scene.getEnemyField(); game.move.select(Moves.EARTHQUAKE); game.move.select(Moves.SPLASH, 1); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -100,7 +99,7 @@ describe("Multi-target damage reduction", () => { game.move.select(Moves.EARTHQUAKE); game.move.select(Moves.SPLASH, 1); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to("MoveEndPhase"); @@ -118,7 +117,7 @@ describe("Multi-target damage reduction", () => { await game.toNextTurn(); game.move.select(Moves.EARTHQUAKE); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to("MoveEndPhase"); diff --git a/src/test/moves/obstruct.test.ts b/src/test/moves/obstruct.test.ts index 43706a5a1d6..fbb5437b43a 100644 --- a/src/test/moves/obstruct.test.ts +++ b/src/test/moves/obstruct.test.ts @@ -24,7 +24,7 @@ describe("Moves - Obstruct", () => { .battleType("single") .enemyAbility(Abilities.BALL_FETCH) .ability(Abilities.BALL_FETCH) - .moveset([Moves.OBSTRUCT]); + .moveset([ Moves.OBSTRUCT ]); }); it("protects from contact damaging moves and lowers the opponent's defense by 2 stages", async () => { diff --git a/src/test/moves/parting_shot.test.ts b/src/test/moves/parting_shot.test.ts index fa328e15a32..e5a2fc38b94 100644 --- a/src/test/moves/parting_shot.test.ts +++ b/src/test/moves/parting_shot.test.ts @@ -11,7 +11,6 @@ import { MessagePhase } from "#app/phases/message-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; - describe("Moves - Parting Shot", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -29,7 +28,7 @@ describe("Moves - Parting Shot", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleType("single"); - game.override.moveset([Moves.PARTING_SHOT, Moves.SPLASH]); + game.override.moveset([ Moves.PARTING_SHOT, Moves.SPLASH ]); game.override.enemyMoveset(Moves.SPLASH); game.override.startingLevel(5); game.override.enemyLevel(5); @@ -42,7 +41,7 @@ describe("Moves - Parting Shot", () => { game.override .enemySpecies(Species.POOCHYENA) .ability(Abilities.PRANKSTER); - await game.startBattle([Species.MURKROW, Species.MEOWTH]); + await game.startBattle([ Species.MURKROW, Species.MEOWTH ]); const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon).toBeDefined(); @@ -62,7 +61,7 @@ describe("Moves - Parting Shot", () => { game.override .enemySpecies(Species.GHOLDENGO) .enemyAbility(Abilities.GOOD_AS_GOLD); - await game.startBattle([Species.MURKROW, Species.MEOWTH]); + await game.startBattle([ Species.MURKROW, Species.MEOWTH ]); const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon).toBeDefined(); @@ -79,8 +78,8 @@ describe("Moves - Parting Shot", () => { it.skip( // TODO: fix this bug to pass the test! "Parting shot should fail if target is -6/-6 de-buffed", async () => { - game.override.moveset([Moves.PARTING_SHOT, Moves.MEMENTO, Moves.SPLASH]); - await game.startBattle([Species.MEOWTH, Species.MEOWTH, Species.MEOWTH, Species.MURKROW, Species.ABRA]); + game.override.moveset([ Moves.PARTING_SHOT, Moves.MEMENTO, Moves.SPLASH ]); + await game.startBattle([ Species.MEOWTH, Species.MEOWTH, Species.MEOWTH, Species.MURKROW, Species.ABRA ]); // use Memento 3 times to debuff enemy game.move.select(Moves.MEMENTO); @@ -124,8 +123,8 @@ describe("Moves - Parting Shot", () => { game.override .enemySpecies(Species.ALTARIA) .enemyAbility(Abilities.NONE) - .enemyMoveset([Moves.MIST]); - await game.startBattle([Species.SNORLAX, Species.MEOWTH]); + .enemyMoveset([ Moves.MIST ]); + await game.startBattle([ Species.SNORLAX, Species.MEOWTH ]); const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon).toBeDefined(); @@ -145,7 +144,7 @@ describe("Moves - Parting Shot", () => { game.override .enemySpecies(Species.TENTACOOL) .enemyAbility(Abilities.CLEAR_BODY); - await game.startBattle([Species.SNORLAX, Species.MEOWTH]); + await game.startBattle([ Species.SNORLAX, Species.MEOWTH ]); const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon).toBeDefined(); @@ -162,7 +161,7 @@ describe("Moves - Parting Shot", () => { it.skip( // TODO: fix this bug to pass the test! "Parting shot should de-buff and not fail if no party available to switch - party size 1", async () => { - await game.startBattle([Species.MURKROW]); + await game.startBattle([ Species.MURKROW ]); const enemyPokemon = game.scene.getEnemyPokemon()!; expect(enemyPokemon).toBeDefined(); @@ -179,7 +178,7 @@ describe("Moves - Parting Shot", () => { it.skip( // TODO: fix this bug to pass the test! "Parting shot regularly not fail if no party available to switch - party fainted", async () => { - await game.startBattle([Species.MURKROW, Species.MEOWTH]); + await game.startBattle([ Species.MURKROW, Species.MEOWTH ]); game.move.select(Moves.SPLASH); // intentionally kill party pokemon, switch to second slot (now 1 party mon is fainted) diff --git a/src/test/moves/plasma_fists.test.ts b/src/test/moves/plasma_fists.test.ts index a9bd7660dfd..24210cd47fa 100644 --- a/src/test/moves/plasma_fists.test.ts +++ b/src/test/moves/plasma_fists.test.ts @@ -24,7 +24,7 @@ describe("Moves - Plasma Fists", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.PLASMA_FISTS, Moves.TACKLE]) + .moveset([ Moves.PLASMA_FISTS, Moves.TACKLE ]) .battleType("double") .startingLevel(100) .enemySpecies(Species.DUSCLOPS) @@ -34,7 +34,7 @@ describe("Moves - Plasma Fists", () => { }); it("should convert all subsequent Normal-type attacks to Electric-type", async () => { - await game.classicMode.startBattle([Species.DUSCLOPS, Species.BLASTOISE]); + await game.classicMode.startBattle([ Species.DUSCLOPS, Species.BLASTOISE ]); const field = game.scene.getField(true); field.forEach(p => vi.spyOn(p, "getMoveType")); @@ -45,7 +45,7 @@ describe("Moves - Plasma Fists", () => { await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); await game.phaseInterceptor.to("BerryPhase", false); @@ -60,7 +60,7 @@ describe("Moves - Plasma Fists", () => { .battleType("single") .enemyAbility(Abilities.PIXILATE); - await game.classicMode.startBattle([Species.ONIX]); + await game.classicMode.startBattle([ Species.ONIX ]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -68,7 +68,7 @@ describe("Moves - Plasma Fists", () => { game.move.select(Moves.PLASMA_FISTS); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to("BerryPhase", false); expect(enemyPokemon.getMoveType).toHaveLastReturnedWith(Type.FAIRY); @@ -81,7 +81,7 @@ describe("Moves - Plasma Fists", () => { .enemyAbility(Abilities.NORMALIZE) .enemyMoveset(Moves.WATER_GUN); - await game.classicMode.startBattle([Species.DUSCLOPS]); + await game.classicMode.startBattle([ Species.DUSCLOPS ]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -89,7 +89,7 @@ describe("Moves - Plasma Fists", () => { game.move.select(Moves.PLASMA_FISTS); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to("BerryPhase", false); expect(enemyPokemon.getMoveType).toHaveLastReturnedWith(Type.ELECTRIC); diff --git a/src/test/moves/power_shift.test.ts b/src/test/moves/power_shift.test.ts index f39759f278b..e389f77bedf 100644 --- a/src/test/moves/power_shift.test.ts +++ b/src/test/moves/power_shift.test.ts @@ -22,7 +22,7 @@ describe("Moves - Power Shift", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.POWER_SHIFT, Moves.BULK_UP]) + .moveset([ Moves.POWER_SHIFT, Moves.BULK_UP ]) .battleType("single") .ability(Abilities.BALL_FETCH) .enemyAbility(Abilities.BALL_FETCH) @@ -30,7 +30,7 @@ describe("Moves - Power Shift", () => { }); it("switches the user's raw Attack stat with its raw Defense stat", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); const playerPokemon = game.scene.getPlayerPokemon()!; diff --git a/src/test/moves/power_split.test.ts b/src/test/moves/power_split.test.ts index aaf34541567..914fa86e491 100644 --- a/src/test/moves/power_split.test.ts +++ b/src/test/moves/power_split.test.ts @@ -55,7 +55,7 @@ describe("Moves - Power Split", () => { }, 20000); it("should be idempotent", async () => { - game.override.enemyMoveset([Moves.POWER_SPLIT]); + game.override.enemyMoveset([ Moves.POWER_SPLIT ]); await game.startBattle([ Species.INDEEDEE ]); diff --git a/src/test/moves/protect.test.ts b/src/test/moves/protect.test.ts index dcf4211ac7f..e639969ddf0 100644 --- a/src/test/moves/protect.test.ts +++ b/src/test/moves/protect.test.ts @@ -11,7 +11,6 @@ import { BattlerIndex } from "#app/battle"; import { MoveResult } from "#app/field/pokemon"; - describe("Moves - Protect", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -31,11 +30,11 @@ describe("Moves - Protect", () => { game.override.battleType("single"); - game.override.moveset([Moves.PROTECT]); + game.override.moveset([ Moves.PROTECT ]); game.override.enemySpecies(Species.SNORLAX); game.override.enemyAbility(Abilities.INSOMNIA); - game.override.enemyMoveset([Moves.TACKLE]); + game.override.enemyMoveset([ Moves.TACKLE ]); game.override.startingLevel(100); game.override.enemyLevel(100); @@ -44,7 +43,7 @@ describe("Moves - Protect", () => { test( "should protect the user from attacks", async () => { - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([ Species.CHARIZARD ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -59,10 +58,10 @@ describe("Moves - Protect", () => { test( "should prevent secondary effects from the opponent's attack", async () => { - game.override.enemyMoveset([Moves.CEASELESS_EDGE]); + game.override.enemyMoveset([ Moves.CEASELESS_EDGE ]); vi.spyOn(allMoves[Moves.CEASELESS_EDGE], "accuracy", "get").mockReturnValue(100); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([ Species.CHARIZARD ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -78,9 +77,9 @@ describe("Moves - Protect", () => { test( "should protect the user from status moves", async () => { - game.override.enemyMoveset([Moves.CHARM]); + game.override.enemyMoveset([ Moves.CHARM ]); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([ Species.CHARIZARD ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -95,9 +94,9 @@ describe("Moves - Protect", () => { test( "should stop subsequent hits of a multi-hit move", async () => { - game.override.enemyMoveset([Moves.TACHYON_CUTTER]); + game.override.enemyMoveset([ Moves.TACHYON_CUTTER ]); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([ Species.CHARIZARD ]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -114,16 +113,16 @@ describe("Moves - Protect", () => { test( "should fail if the user is the last to move in the turn", async () => { - game.override.enemyMoveset([Moves.PROTECT]); + game.override.enemyMoveset([ Moves.PROTECT ]); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([ Species.CHARIZARD ]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; game.move.select(Moves.PROTECT); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.phaseInterceptor.to("BerryPhase", false); diff --git a/src/test/moves/purify.test.ts b/src/test/moves/purify.test.ts index 3ba9dfcbb65..3b07eafd75a 100644 --- a/src/test/moves/purify.test.ts +++ b/src/test/moves/purify.test.ts @@ -9,7 +9,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; - describe("Moves - Purify", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -30,11 +29,11 @@ describe("Moves - Purify", () => { game.override.starterSpecies(Species.PYUKUMUKU); game.override.startingLevel(10); - game.override.moveset([Moves.PURIFY, Moves.SIZZLY_SLIDE]); + game.override.moveset([ Moves.PURIFY, Moves.SIZZLY_SLIDE ]); game.override.enemySpecies(Species.MAGIKARP); game.override.enemyLevel(10); - game.override.enemyMoveset([Moves.SPLASH, Moves.NONE, Moves.NONE, Moves.NONE]); + game.override.enemyMoveset([ Moves.SPLASH, Moves.NONE, Moves.NONE, Moves.NONE ]); }); test( @@ -49,7 +48,7 @@ describe("Moves - Purify", () => { enemyPokemon.status = new Status(StatusEffect.BURN); game.move.select(Moves.PURIFY); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to(MoveEndPhase); expect(enemyPokemon.status).toBeNull(); @@ -68,7 +67,7 @@ describe("Moves - Purify", () => { const playerInitialHp = playerPokemon.hp; game.move.select(Moves.PURIFY); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to(MoveEndPhase); expect(playerPokemon.hp).toBe(playerInitialHp); diff --git a/src/test/moves/quick_guard.test.ts b/src/test/moves/quick_guard.test.ts index e03beeac06a..7bda71782aa 100644 --- a/src/test/moves/quick_guard.test.ts +++ b/src/test/moves/quick_guard.test.ts @@ -9,7 +9,6 @@ import { BattlerIndex } from "#app/battle"; import { MoveResult } from "#app/field/pokemon"; - describe("Moves - Quick Guard", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -29,10 +28,10 @@ describe("Moves - Quick Guard", () => { game.override.battleType("double"); - game.override.moveset([Moves.QUICK_GUARD, Moves.SPLASH, Moves.FOLLOW_ME]); + game.override.moveset([ Moves.QUICK_GUARD, Moves.SPLASH, Moves.FOLLOW_ME ]); game.override.enemySpecies(Species.SNORLAX); - game.override.enemyMoveset([Moves.QUICK_ATTACK]); + game.override.enemyMoveset([ Moves.QUICK_ATTACK ]); game.override.enemyAbility(Abilities.INSOMNIA); game.override.startingLevel(100); @@ -42,7 +41,7 @@ describe("Moves - Quick Guard", () => { test( "should protect the user and allies from priority moves", async () => { - await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([ Species.CHARIZARD, Species.BLASTOISE ]); const playerPokemon = game.scene.getPlayerField(); @@ -59,9 +58,9 @@ describe("Moves - Quick Guard", () => { "should protect the user and allies from Prankster-boosted moves", async () => { game.override.enemyAbility(Abilities.PRANKSTER); - game.override.enemyMoveset([Moves.GROWL]); + game.override.enemyMoveset([ Moves.GROWL ]); - await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([ Species.CHARIZARD, Species.BLASTOISE ]); const playerPokemon = game.scene.getPlayerField(); @@ -77,9 +76,9 @@ describe("Moves - Quick Guard", () => { test( "should stop subsequent hits of a multi-hit priority move", async () => { - game.override.enemyMoveset([Moves.WATER_SHURIKEN]); + game.override.enemyMoveset([ Moves.WATER_SHURIKEN ]); - await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.classicMode.startBattle([ Species.CHARIZARD, Species.BLASTOISE ]); const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); @@ -98,16 +97,16 @@ describe("Moves - Quick Guard", () => { "should fail if the user is the last to move in the turn", async () => { game.override.battleType("single"); - game.override.enemyMoveset([Moves.QUICK_GUARD]); + game.override.enemyMoveset([ Moves.QUICK_GUARD ]); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([ Species.CHARIZARD ]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; game.move.select(Moves.QUICK_GUARD); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.phaseInterceptor.to("BerryPhase", false); diff --git a/src/test/moves/rage_powder.test.ts b/src/test/moves/rage_powder.test.ts index bb31a1f2194..1b73a7f0f5f 100644 --- a/src/test/moves/rage_powder.test.ts +++ b/src/test/moves/rage_powder.test.ts @@ -7,7 +7,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; - describe("Moves - Rage Powder", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -28,14 +27,14 @@ describe("Moves - Rage Powder", () => { game.override.enemySpecies(Species.SNORLAX); game.override.startingLevel(100); game.override.enemyLevel(100); - game.override.moveset([Moves.FOLLOW_ME, Moves.RAGE_POWDER, Moves.SPOTLIGHT, Moves.QUICK_ATTACK]); - game.override.enemyMoveset([Moves.RAGE_POWDER, Moves.TACKLE, Moves.SPLASH]); + game.override.moveset([ Moves.FOLLOW_ME, Moves.RAGE_POWDER, Moves.SPOTLIGHT, Moves.QUICK_ATTACK ]); + game.override.enemyMoveset([ Moves.RAGE_POWDER, Moves.TACKLE, Moves.SPLASH ]); }); test( "move effect should be bypassed by Grass type", async () => { - await game.classicMode.startBattle([Species.AMOONGUSS, Species.VENUSAUR]); + await game.classicMode.startBattle([ Species.AMOONGUSS, Species.VENUSAUR ]); const enemyPokemon = game.scene.getEnemyField(); @@ -59,7 +58,7 @@ describe("Moves - Rage Powder", () => { game.override.ability(Abilities.OVERCOAT); // Test with two non-Grass type player Pokemon - await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([ Species.BLASTOISE, Species.CHARIZARD ]); const enemyPokemon = game.scene.getEnemyField(); diff --git a/src/test/moves/reflect.test.ts b/src/test/moves/reflect.test.ts index 9780ede3c55..41a10988552 100644 --- a/src/test/moves/reflect.test.ts +++ b/src/test/moves/reflect.test.ts @@ -32,16 +32,16 @@ describe("Moves - Reflect", () => { game = new GameManager(phaserGame); game.override.battleType("single"); game.override.ability(Abilities.NONE); - game.override.moveset([Moves.ABSORB, Moves.ROCK_SLIDE, Moves.TACKLE]); + game.override.moveset([ Moves.ABSORB, Moves.ROCK_SLIDE, Moves.TACKLE ]); game.override.enemyLevel(100); game.override.enemySpecies(Species.MAGIKARP); - game.override.enemyMoveset([Moves.REFLECT, Moves.REFLECT, Moves.REFLECT, Moves.REFLECT]); + game.override.enemyMoveset([ Moves.REFLECT, Moves.REFLECT, Moves.REFLECT, Moves.REFLECT ]); game.override.disableCrits(); }); it("reduces damage of physical attacks by half in a single battle", async () => { const moveToUse = Moves.TACKLE; - await game.startBattle([Species.SHUCKLE]); + await game.startBattle([ Species.SHUCKLE ]); game.move.select(moveToUse); @@ -55,7 +55,7 @@ describe("Moves - Reflect", () => { game.override.battleType("double"); const moveToUse = Moves.ROCK_SLIDE; - await game.startBattle([Species.SHUCKLE, Species.SHUCKLE]); + await game.startBattle([ Species.SHUCKLE, Species.SHUCKLE ]); game.move.select(moveToUse); game.move.select(moveToUse, 1); @@ -68,7 +68,7 @@ describe("Moves - Reflect", () => { it("does not affect special attacks", async () => { const moveToUse = Moves.ABSORB; - await game.startBattle([Species.SHUCKLE]); + await game.startBattle([ Species.SHUCKLE ]); game.move.select(moveToUse); diff --git a/src/test/moves/relic_song.test.ts b/src/test/moves/relic_song.test.ts index 67fc557a318..eb877b6054d 100644 --- a/src/test/moves/relic_song.test.ts +++ b/src/test/moves/relic_song.test.ts @@ -23,7 +23,7 @@ describe("Moves - Relic Song", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.RELIC_SONG, Moves.SPLASH]) + .moveset([ Moves.RELIC_SONG, Moves.SPLASH ]) .battleType("single") .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH) @@ -32,7 +32,7 @@ describe("Moves - Relic Song", () => { }); it("swaps Meloetta's form between Aria and Pirouette", async () => { - await game.classicMode.startBattle([Species.MELOETTA]); + await game.classicMode.startBattle([ Species.MELOETTA ]); const meloetta = game.scene.getPlayerPokemon()!; @@ -49,7 +49,7 @@ describe("Moves - Relic Song", () => { it("doesn't swap Meloetta's form during a mono-type challenge", async () => { game.challengeMode.addChallenge(Challenges.SINGLE_TYPE, Type.PSYCHIC + 1, 0); - await game.challengeMode.startBattle([Species.MELOETTA]); + await game.challengeMode.startBattle([ Species.MELOETTA ]); const meloetta = game.scene.getPlayerPokemon()!; @@ -64,9 +64,9 @@ describe("Moves - Relic Song", () => { it("doesn't swap Meloetta's form during biome change (arena reset)", async () => { game.override - .starterForms({[Species.MELOETTA]: 1}) + .starterForms({ [Species.MELOETTA]: 1 }) .startingWave(10); - await game.classicMode.startBattle([Species.MELOETTA]); + await game.classicMode.startBattle([ Species.MELOETTA ]); const meloetta = game.scene.getPlayerPokemon()!; diff --git a/src/test/moves/retaliate.test.ts b/src/test/moves/retaliate.test.ts index 62965fffba6..e00b9da6010 100644 --- a/src/test/moves/retaliate.test.ts +++ b/src/test/moves/retaliate.test.ts @@ -26,16 +26,16 @@ describe("Moves - Retaliate", () => { game.override .battleType("single") .enemySpecies(Species.SNORLAX) - .enemyMoveset([Moves.RETALIATE, Moves.RETALIATE, Moves.RETALIATE, Moves.RETALIATE]) + .enemyMoveset([ Moves.RETALIATE, Moves.RETALIATE, Moves.RETALIATE, Moves.RETALIATE ]) .enemyLevel(100) - .moveset([Moves.RETALIATE, Moves.SPLASH]) + .moveset([ Moves.RETALIATE, Moves.SPLASH ]) .startingLevel(80) .disableCrits(); }); it("increases power if ally died previous turn", async () => { vi.spyOn(retaliate, "calculateBattlePower"); - await game.startBattle([Species.ABRA, Species.COBALION]); + await game.startBattle([ Species.ABRA, Species.COBALION ]); game.move.select(Moves.RETALIATE); await game.phaseInterceptor.to("TurnEndPhase"); expect(retaliate.calculateBattlePower).toHaveLastReturnedWith(70); diff --git a/src/test/moves/rollout.test.ts b/src/test/moves/rollout.test.ts index c08535a61df..4a14b100f6d 100644 --- a/src/test/moves/rollout.test.ts +++ b/src/test/moves/rollout.test.ts @@ -35,7 +35,7 @@ describe("Moves - Rollout", () => { }); it("should double it's dmg on sequential uses but reset after 5", async () => { - game.override.moveset([Moves.ROLLOUT]); + game.override.moveset([ Moves.ROLLOUT ]); vi.spyOn(allMoves[Moves.ROLLOUT], "accuracy", "get").mockReturnValue(100); //always hit const variance = 5; @@ -45,10 +45,10 @@ describe("Moves - Rollout", () => { await game.startBattle(); const playerPkm = game.scene.getParty()[0]; - vi.spyOn(playerPkm, "stats", "get").mockReturnValue([500000, 1, 1, 1, 1, 1]); // HP, ATK, DEF, SPATK, SPDEF, SPD + vi.spyOn(playerPkm, "stats", "get").mockReturnValue([ 500000, 1, 1, 1, 1, 1 ]); // HP, ATK, DEF, SPATK, SPDEF, SPD const enemyPkm = game.scene.getEnemyParty()[0]; - vi.spyOn(enemyPkm, "stats", "get").mockReturnValue([500000, 1, 1, 1, 1, 1]); // HP, ATK, DEF, SPATK, SPDEF, SPD + vi.spyOn(enemyPkm, "stats", "get").mockReturnValue([ 500000, 1, 1, 1, 1, 1 ]); // HP, ATK, DEF, SPATK, SPDEF, SPD vi.spyOn(enemyPkm, "getHeldItems").mockReturnValue([]); //no berries enemyPkm.hp = enemyPkm.getMaxHp(); @@ -62,7 +62,7 @@ describe("Moves - Rollout", () => { previousHp = enemyPkm.hp; } - const [turn1Dmg, turn2Dmg, turn3Dmg, turn4Dmg, turn5Dmg, turn6Dmg] = dmgHistory; + const [ turn1Dmg, turn2Dmg, turn3Dmg, turn4Dmg, turn5Dmg, turn6Dmg ] = dmgHistory; expect(turn2Dmg).toBeGreaterThanOrEqual(turn1Dmg * 2 - variance); expect(turn2Dmg).toBeLessThanOrEqual(turn1Dmg * 2 + variance); diff --git a/src/test/moves/roost.test.ts b/src/test/moves/roost.test.ts index a1c473c0632..e595f879844 100644 --- a/src/test/moves/roost.test.ts +++ b/src/test/moves/roost.test.ts @@ -10,7 +10,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; - describe("Moves - Roost", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -32,7 +31,7 @@ describe("Moves - Roost", () => { game.override.startingLevel(100); game.override.enemyLevel(100); game.override.enemyMoveset(Moves.EARTHQUAKE); - game.override.moveset([Moves.ROOST, Moves.BURN_UP, Moves.DOUBLE_SHOCK]); + game.override.moveset([ Moves.ROOST, Moves.BURN_UP, Moves.DOUBLE_SHOCK ]); }); /** @@ -51,11 +50,11 @@ describe("Moves - Roost", () => { test( "Non flying type uses roost -> no type change, took damage", async () => { - await game.classicMode.startBattle([Species.DUNSPARCE]); + await game.classicMode.startBattle([ Species.DUNSPARCE ]); const playerPokemon = game.scene.getPlayerPokemon()!; const playerPokemonStartingHP = playerPokemon.hp; game.move.select(Moves.ROOST); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to(MoveEffectPhase); // Should only be normal type, and NOT flying type @@ -78,11 +77,11 @@ describe("Moves - Roost", () => { test( "Pure flying type -> becomes normal after roost and takes damage from ground moves -> regains flying", async () => { - await game.classicMode.startBattle([Species.TORNADUS]); + await game.classicMode.startBattle([ Species.TORNADUS ]); const playerPokemon = game.scene.getPlayerPokemon()!; const playerPokemonStartingHP = playerPokemon.hp; game.move.select(Moves.ROOST); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to(MoveEffectPhase); // Should only be normal type, and NOT flying type @@ -106,11 +105,11 @@ describe("Moves - Roost", () => { test( "Dual X/flying type -> becomes type X after roost and takes damage from ground moves -> regains flying", async () => { - await game.classicMode.startBattle([Species.HAWLUCHA]); + await game.classicMode.startBattle([ Species.HAWLUCHA ]); const playerPokemon = game.scene.getPlayerPokemon()!; const playerPokemonStartingHP = playerPokemon.hp; game.move.select(Moves.ROOST); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to(MoveEffectPhase); // Should only be pure fighting type and grounded @@ -135,11 +134,11 @@ describe("Moves - Roost", () => { "Pokemon with levitate after using roost should lose flying type but still be unaffected by ground moves", async () => { game.override.starterForms({ [Species.ROTOM]: 4 }); - await game.classicMode.startBattle([Species.ROTOM]); + await game.classicMode.startBattle([ Species.ROTOM ]); const playerPokemon = game.scene.getPlayerPokemon()!; const playerPokemonStartingHP = playerPokemon.hp; game.move.select(Moves.ROOST); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to(MoveEffectPhase); // Should only be pure eletric type and grounded @@ -163,11 +162,11 @@ describe("Moves - Roost", () => { test( "A fire/flying type that uses burn up, then roost should be typeless until end of turn", async () => { - await game.classicMode.startBattle([Species.MOLTRES]); + await game.classicMode.startBattle([ Species.MOLTRES ]); const playerPokemon = game.scene.getPlayerPokemon()!; const playerPokemonStartingHP = playerPokemon.hp; game.move.select(Moves.BURN_UP); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to(MoveEffectPhase); // Should only be pure flying type after burn up @@ -177,7 +176,7 @@ describe("Moves - Roost", () => { await game.phaseInterceptor.to(TurnEndPhase); game.move.select(Moves.ROOST); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to(MoveEffectPhase); // Should only be typeless type after roost and is grounded @@ -203,11 +202,11 @@ describe("Moves - Roost", () => { "An electric/flying type that uses double shock, then roost should be typeless until end of turn", async () => { game.override.enemySpecies(Species.ZEKROM); - await game.classicMode.startBattle([Species.ZAPDOS]); + await game.classicMode.startBattle([ Species.ZAPDOS ]); const playerPokemon = game.scene.getPlayerPokemon()!; const playerPokemonStartingHP = playerPokemon.hp; game.move.select(Moves.DOUBLE_SHOCK); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to(MoveEffectPhase); // Should only be pure flying type after burn up @@ -217,7 +216,7 @@ describe("Moves - Roost", () => { await game.phaseInterceptor.to(TurnEndPhase); game.move.select(Moves.ROOST); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to(MoveEffectPhase); // Should only be typeless type after roost and is grounded @@ -242,8 +241,8 @@ describe("Moves - Roost", () => { test( "Dual Type Pokemon afflicted with Forests Curse/Trick or Treat and post roost will become dual type and then become 3 type at end of turn", async () => { - game.override.enemyMoveset([Moves.TRICK_OR_TREAT, Moves.TRICK_OR_TREAT, Moves.TRICK_OR_TREAT, Moves.TRICK_OR_TREAT]); - await game.classicMode.startBattle([Species.MOLTRES]); + game.override.enemyMoveset([ Moves.TRICK_OR_TREAT, Moves.TRICK_OR_TREAT, Moves.TRICK_OR_TREAT, Moves.TRICK_OR_TREAT ]); + await game.classicMode.startBattle([ Species.MOLTRES ]); const playerPokemon = game.scene.getPlayerPokemon()!; game.move.select(Moves.ROOST); await game.phaseInterceptor.to(MoveEffectPhase); diff --git a/src/test/moves/safeguard.test.ts b/src/test/moves/safeguard.test.ts index b21698d0298..c180ff338a5 100644 --- a/src/test/moves/safeguard.test.ts +++ b/src/test/moves/safeguard.test.ts @@ -9,7 +9,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; - describe("Moves - Safeguard", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -29,11 +28,11 @@ describe("Moves - Safeguard", () => { game.override .battleType("single") .enemySpecies(Species.DRATINI) - .enemyMoveset([Moves.SAFEGUARD]) + .enemyMoveset([ Moves.SAFEGUARD ]) .enemyAbility(Abilities.BALL_FETCH) .enemyLevel(5) .starterSpecies(Species.DRATINI) - .moveset([Moves.NUZZLE, Moves.SPORE, Moves.YAWN, Moves.SPLASH]) + .moveset([ Moves.NUZZLE, Moves.SPORE, Moves.YAWN, Moves.SPLASH ]) .ability(Abilities.BALL_FETCH); }); @@ -42,7 +41,7 @@ describe("Moves - Safeguard", () => { const enemy = game.scene.getEnemyPokemon()!; game.move.select(Moves.NUZZLE); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.toNextTurn(); expect(enemy.status).toBeUndefined(); @@ -53,19 +52,19 @@ describe("Moves - Safeguard", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; game.move.select(Moves.SPORE); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.toNextTurn(); expect(enemyPokemon.status).toBeUndefined(); }); it("protects from confusion", async () => { - game.override.moveset([Moves.CONFUSE_RAY]); + game.override.moveset([ Moves.CONFUSE_RAY ]); await game.classicMode.startBattle(); const enemyPokemon = game.scene.getEnemyPokemon()!; game.move.select(Moves.CONFUSE_RAY); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.toNextTurn(); expect(enemyPokemon.summonData.tags).toEqual([]); @@ -79,7 +78,7 @@ describe("Moves - Safeguard", () => { game.move.select(Moves.SPORE, 0, BattlerIndex.ENEMY_2); game.move.select(Moves.NUZZLE, 1, BattlerIndex.ENEMY_2); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY_2]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY_2 ]); await game.phaseInterceptor.to("BerryPhase"); @@ -94,7 +93,7 @@ describe("Moves - Safeguard", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; game.move.select(Moves.YAWN); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.toNextTurn(); expect(enemyPokemon.summonData.tags).toEqual([]); @@ -105,7 +104,7 @@ describe("Moves - Safeguard", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; game.move.select(Moves.YAWN); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.toNextTurn(); game.move.select(Moves.SPLASH); @@ -115,18 +114,18 @@ describe("Moves - Safeguard", () => { }); it("doesn't protect from self-inflicted via Rest or Flame Orb", async () => { - game.override.enemyHeldItems([{name: "FLAME_ORB"}]); + game.override.enemyHeldItems([{ name: "FLAME_ORB" }]); await game.classicMode.startBattle(); const enemyPokemon = game.scene.getEnemyPokemon()!; game.move.select(Moves.SPLASH); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.toNextTurn(); enemyPokemon.damageAndUpdate(1); expect(enemyPokemon.status?.effect).toEqual(StatusEffect.BURN); - game.override.enemyMoveset([Moves.REST]); + game.override.enemyMoveset([ Moves.REST ]); // Force the moveset to update mid-battle // TODO: Remove after enemy AI rework is in enemyPokemon.getMoveset(); @@ -144,9 +143,9 @@ describe("Moves - Safeguard", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; game.move.select(Moves.SPLASH); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.toNextTurn(); - game.override.enemyMoveset([Moves.TACKLE]); + game.override.enemyMoveset([ Moves.TACKLE ]); game.move.select(Moves.SPLASH); await game.toNextTurn(); diff --git a/src/test/moves/scale_shot.test.ts b/src/test/moves/scale_shot.test.ts index 412ce6687c6..2730d05306d 100644 --- a/src/test/moves/scale_shot.test.ts +++ b/src/test/moves/scale_shot.test.ts @@ -27,7 +27,7 @@ describe("Moves - Scale Shot", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SCALE_SHOT]) + .moveset([ Moves.SCALE_SHOT ]) .battleType("single") .disableCrits() .starterSpecies(Species.MINCCINO) @@ -40,7 +40,7 @@ describe("Moves - Scale Shot", () => { }); it("applies stat changes after last hit", async () => { - await game.classicMode.startBattle([Species.FORRETRESS]); + await game.classicMode.startBattle([ Species.FORRETRESS ]); const minccino = game.scene.getPlayerPokemon()!; game.move.select(Moves.SCALE_SHOT); await game.phaseInterceptor.to(MoveEffectPhase); @@ -54,7 +54,7 @@ describe("Moves - Scale Shot", () => { }); it("unaffected by sheer force", async () => { - await game.classicMode.startBattle([Species.WOBBUFFET]); + await game.classicMode.startBattle([ Species.WOBBUFFET ]); const minccino = game.scene.getPlayerPokemon()!; const wobbuffet = game.scene.getEnemyPokemon()!; wobbuffet.setStat(Stat.HP, 100, true); diff --git a/src/test/moves/shed_tail.test.ts b/src/test/moves/shed_tail.test.ts index a976a614792..c4df6c574cb 100644 --- a/src/test/moves/shed_tail.test.ts +++ b/src/test/moves/shed_tail.test.ts @@ -23,7 +23,7 @@ describe("Moves - Shed Tail", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SHED_TAIL]) + .moveset([ Moves.SHED_TAIL ]) .battleType("single") .enemySpecies(Species.SNORLAX) .enemyAbility(Abilities.BALL_FETCH) @@ -31,7 +31,7 @@ describe("Moves - Shed Tail", () => { }); it("transfers a Substitute doll to the switched in Pokemon", async () => { - await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); + await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); const magikarp = game.scene.getPlayerPokemon()!; diff --git a/src/test/moves/shell_side_arm.test.ts b/src/test/moves/shell_side_arm.test.ts index 643313f1eae..9646d27f17e 100644 --- a/src/test/moves/shell_side_arm.test.ts +++ b/src/test/moves/shell_side_arm.test.ts @@ -26,7 +26,7 @@ describe("Moves - Shell Side Arm", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SHELL_SIDE_ARM]) + .moveset([ Moves.SHELL_SIDE_ARM ]) .battleType("single") .startingLevel(100) .enemyLevel(100) @@ -37,7 +37,7 @@ describe("Moves - Shell Side Arm", () => { it("becomes a physical attack if forecasted to deal more damage as physical", async () => { game.override.enemySpecies(Species.SNORLAX); - await game.classicMode.startBattle([Species.RAMPARDOS]); + await game.classicMode.startBattle([ Species.RAMPARDOS ]); vi.spyOn(shellSideArmAttr, "apply"); @@ -50,7 +50,7 @@ describe("Moves - Shell Side Arm", () => { it("remains a special attack if forecasted to deal more damage as special", async () => { game.override.enemySpecies(Species.SLOWBRO); - await game.classicMode.startBattle([Species.XURKITREE]); + await game.classicMode.startBattle([ Species.XURKITREE ]); vi.spyOn(shellSideArmAttr, "apply"); @@ -65,12 +65,12 @@ describe("Moves - Shell Side Arm", () => { .enemySpecies(Species.SNORLAX) .enemyMoveset(Moves.COTTON_GUARD); - await game.classicMode.startBattle([Species.MANAPHY]); + await game.classicMode.startBattle([ Species.MANAPHY ]); vi.spyOn(shellSideArmAttr, "apply"); game.move.select(Moves.SHELL_SIDE_ARM); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.phaseInterceptor.to("BerryPhase", false); expect(shellSideArmAttr.apply).toHaveLastReturnedWith(false); diff --git a/src/test/moves/shell_trap.test.ts b/src/test/moves/shell_trap.test.ts index 1dae00e24a5..04d3cf998b1 100644 --- a/src/test/moves/shell_trap.test.ts +++ b/src/test/moves/shell_trap.test.ts @@ -11,7 +11,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; - describe("Moves - Shell Trap", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -30,9 +29,9 @@ describe("Moves - Shell Trap", () => { game = new GameManager(phaserGame); game.override .battleType("double") - .moveset([Moves.SHELL_TRAP, Moves.SPLASH, Moves.BULLDOZE]) + .moveset([ Moves.SHELL_TRAP, Moves.SPLASH, Moves.BULLDOZE ]) .enemySpecies(Species.SNORLAX) - .enemyMoveset([Moves.RAZOR_LEAF]) + .enemyMoveset([ Moves.RAZOR_LEAF ]) .startingLevel(100) .enemyLevel(100); @@ -42,7 +41,7 @@ describe("Moves - Shell Trap", () => { it( "should activate after the user is hit by a physical attack", async () => { - await game.startBattle([Species.CHARIZARD, Species.TURTONATOR]); + await game.startBattle([ Species.CHARIZARD, Species.TURTONATOR ]); const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); @@ -50,7 +49,7 @@ describe("Moves - Shell Trap", () => { game.move.select(Moves.SPLASH); game.move.select(Moves.SHELL_TRAP, 1); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2 ]); await game.phaseInterceptor.to(MoveEndPhase); @@ -66,9 +65,9 @@ describe("Moves - Shell Trap", () => { it( "should fail if the user is only hit by special attacks", async () => { - game.override.enemyMoveset([Moves.SWIFT]); + game.override.enemyMoveset([ Moves.SWIFT ]); - await game.startBattle([Species.CHARIZARD, Species.TURTONATOR]); + await game.startBattle([ Species.CHARIZARD, Species.TURTONATOR ]); const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); @@ -76,7 +75,7 @@ describe("Moves - Shell Trap", () => { game.move.select(Moves.SPLASH); game.move.select(Moves.SHELL_TRAP, 1); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2 ]); await game.phaseInterceptor.to(MoveEndPhase); @@ -94,7 +93,7 @@ describe("Moves - Shell Trap", () => { async () => { game.override.enemyMoveset(Moves.SPLASH); - await game.startBattle([Species.CHARIZARD, Species.TURTONATOR]); + await game.startBattle([ Species.CHARIZARD, Species.TURTONATOR ]); const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); @@ -102,7 +101,7 @@ describe("Moves - Shell Trap", () => { game.move.select(Moves.SPLASH); game.move.select(Moves.SHELL_TRAP, 1); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2 ]); await game.phaseInterceptor.to(MoveEndPhase); @@ -120,7 +119,7 @@ describe("Moves - Shell Trap", () => { async () => { game.override.enemyMoveset(Moves.SPLASH); - await game.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.startBattle([ Species.BLASTOISE, Species.CHARIZARD ]); const playerPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); @@ -147,7 +146,7 @@ describe("Moves - Shell Trap", () => { game.override.battleType("single"); vi.spyOn(allMoves[Moves.RAZOR_LEAF], "priority", "get").mockReturnValue(-4); - await game.startBattle([Species.CHARIZARD]); + await game.startBattle([ Species.CHARIZARD ]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; diff --git a/src/test/moves/sparkly_swirl.test.ts b/src/test/moves/sparkly_swirl.test.ts index 83c154e57e7..8449f2785f8 100644 --- a/src/test/moves/sparkly_swirl.test.ts +++ b/src/test/moves/sparkly_swirl.test.ts @@ -27,7 +27,7 @@ describe("Moves - Sparkly Swirl", () => { .enemyLevel(100) .enemyMoveset(Moves.SPLASH) .enemyAbility(Abilities.BALL_FETCH) - .moveset([Moves.SPARKLY_SWIRL, Moves.SPLASH]) + .moveset([ Moves.SPARKLY_SWIRL, Moves.SPLASH ]) .ability(Abilities.BALL_FETCH); vi.spyOn(allMoves[Moves.SPARKLY_SWIRL], "accuracy", "get").mockReturnValue(100); @@ -37,8 +37,8 @@ describe("Moves - Sparkly Swirl", () => { game.override .battleType("double") .statusEffect(StatusEffect.BURN); - await game.classicMode.startBattle([Species.RATTATA, Species.RATTATA, Species.RATTATA]); - const [leftPlayer, rightPlayer, partyPokemon] = game.scene.getParty(); + await game.classicMode.startBattle([ Species.RATTATA, Species.RATTATA, Species.RATTATA ]); + const [ leftPlayer, rightPlayer, partyPokemon ] = game.scene.getParty(); const leftOpp = game.scene.getEnemyPokemon()!; vi.spyOn(leftPlayer, "resetStatus"); @@ -63,8 +63,8 @@ describe("Moves - Sparkly Swirl", () => { game.override .battleType("double") .enemyStatusEffect(StatusEffect.BURN); - await game.classicMode.startBattle([Species.RATTATA, Species.RATTATA]); - const [leftOpp, rightOpp] = game.scene.getEnemyField(); + await game.classicMode.startBattle([ Species.RATTATA, Species.RATTATA ]); + const [ leftOpp, rightOpp ] = game.scene.getEnemyField(); vi.spyOn(leftOpp, "resetStatus"); vi.spyOn(rightOpp, "resetStatus"); diff --git a/src/test/moves/spikes.test.ts b/src/test/moves/spikes.test.ts index aa59912d802..1dd13f8f65e 100644 --- a/src/test/moves/spikes.test.ts +++ b/src/test/moves/spikes.test.ts @@ -28,11 +28,11 @@ describe("Moves - Spikes", () => { .enemyAbility(Abilities.BALL_FETCH) .ability(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH) - .moveset([Moves.SPIKES, Moves.SPLASH, Moves.ROAR]); + .moveset([ Moves.SPIKES, Moves.SPLASH, Moves.ROAR ]); }); it("should not damage the team that set them", async () => { - await game.startBattle([Species.MIGHTYENA, Species.POOCHYENA]); + await game.startBattle([ Species.MIGHTYENA, Species.POOCHYENA ]); game.move.select(Moves.SPIKES); await game.toNextTurn(); @@ -52,7 +52,7 @@ describe("Moves - Spikes", () => { it("should damage opposing pokemon that are forced to switch in", async () => { game.override.startingWave(5); - await game.startBattle([Species.MIGHTYENA, Species.POOCHYENA]); + await game.startBattle([ Species.MIGHTYENA, Species.POOCHYENA ]); game.move.select(Moves.SPIKES); await game.toNextTurn(); @@ -66,7 +66,7 @@ describe("Moves - Spikes", () => { it("should damage opposing pokemon that choose to switch in", async () => { game.override.startingWave(5); - await game.startBattle([Species.MIGHTYENA, Species.POOCHYENA]); + await game.startBattle([ Species.MIGHTYENA, Species.POOCHYENA ]); game.move.select(Moves.SPIKES); await game.toNextTurn(); diff --git a/src/test/moves/spit_up.test.ts b/src/test/moves/spit_up.test.ts index 412360c2664..8e418858e8d 100644 --- a/src/test/moves/spit_up.test.ts +++ b/src/test/moves/spit_up.test.ts @@ -47,7 +47,7 @@ describe("Moves - Spit Up", () => { const stacksToSetup = 1; const expectedPower = 100; - await game.startBattle([Species.ABOMASNOW]); + await game.startBattle([ Species.ABOMASNOW ]); const pokemon = game.scene.getPlayerPokemon()!; pokemon.addTag(BattlerTagType.STOCKPILING); @@ -69,7 +69,7 @@ describe("Moves - Spit Up", () => { const stacksToSetup = 2; const expectedPower = 200; - await game.startBattle([Species.ABOMASNOW]); + await game.startBattle([ Species.ABOMASNOW ]); const pokemon = game.scene.getPlayerPokemon()!; pokemon.addTag(BattlerTagType.STOCKPILING); @@ -92,7 +92,7 @@ describe("Moves - Spit Up", () => { const stacksToSetup = 3; const expectedPower = 300; - await game.startBattle([Species.ABOMASNOW]); + await game.startBattle([ Species.ABOMASNOW ]); const pokemon = game.scene.getPlayerPokemon()!; pokemon.addTag(BattlerTagType.STOCKPILING); @@ -114,7 +114,7 @@ describe("Moves - Spit Up", () => { }); it("fails without stacks", async () => { - await game.startBattle([Species.ABOMASNOW]); + await game.startBattle([ Species.ABOMASNOW ]); const pokemon = game.scene.getPlayerPokemon()!; @@ -131,7 +131,7 @@ describe("Moves - Spit Up", () => { describe("restores stat boosts granted by stacks", () => { it("decreases stats based on stored values (both boosts equal)", async () => { - await game.startBattle([Species.ABOMASNOW]); + await game.startBattle([ Species.ABOMASNOW ]); const pokemon = game.scene.getPlayerPokemon()!; pokemon.addTag(BattlerTagType.STOCKPILING); @@ -158,7 +158,7 @@ describe("Moves - Spit Up", () => { }); it("decreases stats based on stored values (different boosts)", async () => { - await game.startBattle([Species.ABOMASNOW]); + await game.startBattle([ Species.ABOMASNOW ]); const pokemon = game.scene.getPlayerPokemon()!; pokemon.addTag(BattlerTagType.STOCKPILING); diff --git a/src/test/moves/spotlight.test.ts b/src/test/moves/spotlight.test.ts index 6324c3dc6ec..095f7d80bfe 100644 --- a/src/test/moves/spotlight.test.ts +++ b/src/test/moves/spotlight.test.ts @@ -7,7 +7,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; - describe("Moves - Spotlight", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -29,14 +28,14 @@ describe("Moves - Spotlight", () => { game.override.enemySpecies(Species.SNORLAX); game.override.startingLevel(100); game.override.enemyLevel(100); - game.override.moveset([Moves.FOLLOW_ME, Moves.RAGE_POWDER, Moves.SPOTLIGHT, Moves.QUICK_ATTACK]); - game.override.enemyMoveset([Moves.FOLLOW_ME, Moves.SPLASH]); + game.override.moveset([ Moves.FOLLOW_ME, Moves.RAGE_POWDER, Moves.SPOTLIGHT, Moves.QUICK_ATTACK ]); + game.override.enemyMoveset([ Moves.FOLLOW_ME, Moves.SPLASH ]); }); test( "move should redirect attacks to the target", async () => { - await game.classicMode.startBattle([Species.AMOONGUSS, Species.CHARIZARD]); + await game.classicMode.startBattle([ Species.AMOONGUSS, Species.CHARIZARD ]); const enemyPokemon = game.scene.getEnemyField(); @@ -56,7 +55,7 @@ describe("Moves - Spotlight", () => { test( "move should cause other redirection moves to fail", async () => { - await game.classicMode.startBattle([Species.AMOONGUSS, Species.CHARIZARD]); + await game.classicMode.startBattle([ Species.AMOONGUSS, Species.CHARIZARD ]); const enemyPokemon = game.scene.getEnemyField(); diff --git a/src/test/moves/steamroller.test.ts b/src/test/moves/steamroller.test.ts index cbbb3a22593..9d16643ec5d 100644 --- a/src/test/moves/steamroller.test.ts +++ b/src/test/moves/steamroller.test.ts @@ -25,12 +25,12 @@ describe("Moves - Steamroller", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.moveset([Moves.STEAMROLLER]).battleType("single").enemyAbility(Abilities.BALL_FETCH); + game.override.moveset([ Moves.STEAMROLLER ]).battleType("single").enemyAbility(Abilities.BALL_FETCH); }); it("should always hit a minimzed target with double damage", async () => { game.override.enemySpecies(Species.DITTO).enemyMoveset(Moves.MINIMIZE); - await game.classicMode.startBattle([Species.IRON_BOULDER]); + await game.classicMode.startBattle([ Species.IRON_BOULDER ]); const ditto = game.scene.getEnemyPokemon()!; vi.spyOn(ditto, "getAttackDamage"); @@ -41,13 +41,13 @@ describe("Moves - Steamroller", () => { vi.spyOn(ironBoulder, "getAccuracyMultiplier"); // Turn 1 game.move.select(Moves.STEAMROLLER); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.toNextTurn(); // Turn 2 game.move.select(Moves.STEAMROLLER); await game.toNextTurn(); - const [dmgCalcTurn1, dmgCalcTurn2]: DamageCalculationResult[] = vi + const [ dmgCalcTurn1, dmgCalcTurn2 ]: DamageCalculationResult[] = vi .mocked(ditto.getAttackDamage) .mock.results.map((r) => r.value); diff --git a/src/test/moves/stockpile.test.ts b/src/test/moves/stockpile.test.ts index 141ce79eb33..d3239856ed7 100644 --- a/src/test/moves/stockpile.test.ts +++ b/src/test/moves/stockpile.test.ts @@ -33,12 +33,12 @@ describe("Moves - Stockpile", () => { game.override.enemyAbility(Abilities.NONE); game.override.startingLevel(2000); - game.override.moveset([Moves.STOCKPILE, Moves.SPLASH]); + game.override.moveset([ Moves.STOCKPILE, Moves.SPLASH ]); game.override.ability(Abilities.NONE); }); it("gains a stockpile stack and raises user's DEF and SPDEF stat stages by 1 on each use, fails at max stacks (3)", async () => { - await game.startBattle([Species.ABOMASNOW]); + await game.startBattle([ Species.ABOMASNOW ]); const user = game.scene.getPlayerPokemon()!; @@ -77,7 +77,7 @@ describe("Moves - Stockpile", () => { }); it("gains a stockpile stack even if user's DEF and SPDEF stat stages are at +6", async () => { - await game.startBattle([Species.ABOMASNOW]); + await game.startBattle([ Species.ABOMASNOW ]); const user = game.scene.getPlayerPokemon()!; diff --git a/src/test/moves/substitute.test.ts b/src/test/moves/substitute.test.ts index 3099446f081..92f66c967c4 100644 --- a/src/test/moves/substitute.test.ts +++ b/src/test/moves/substitute.test.ts @@ -38,7 +38,7 @@ describe("Moves - Substitute", () => { game.override .battleType("single") - .moveset([Moves.SUBSTITUTE, Moves.SWORDS_DANCE, Moves.TACKLE, Moves.SPLASH]) + .moveset([ Moves.SUBSTITUTE, Moves.SWORDS_DANCE, Moves.TACKLE, Moves.SPLASH ]) .enemySpecies(Species.SNORLAX) .enemyAbility(Abilities.INSOMNIA) .enemyMoveset(Moves.SPLASH) @@ -49,7 +49,7 @@ describe("Moves - Substitute", () => { it( "should cause the user to take damage", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -57,7 +57,7 @@ describe("Moves - Substitute", () => { await game.phaseInterceptor.to("MoveEndPhase", false); - expect(leadPokemon.hp).toBe(Math.ceil(leadPokemon.getMaxHp() * 3/4)); + expect(leadPokemon.hp).toBe(Math.ceil(leadPokemon.getMaxHp() * 3 / 4)); } ); @@ -66,7 +66,7 @@ describe("Moves - Substitute", () => { async () => { game.override.enemyMoveset(Moves.TACKLE); - await game.classicMode.startBattle([Species.SKARMORY]); + await game.classicMode.startBattle([ Species.SKARMORY ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -74,7 +74,7 @@ describe("Moves - Substitute", () => { await game.phaseInterceptor.to("MoveEndPhase", false); - expect(leadPokemon.hp).toBe(Math.ceil(leadPokemon.getMaxHp() * 3/4)); + expect(leadPokemon.hp).toBe(Math.ceil(leadPokemon.getMaxHp() * 3 / 4)); expect(leadPokemon.getTag(BattlerTagType.SUBSTITUTE)).toBeDefined(); const postSubHp = leadPokemon.hp; @@ -92,7 +92,7 @@ describe("Moves - Substitute", () => { game.override.enemyMoveset(Moves.GIGA_IMPACT); vi.spyOn(allMoves[Moves.GIGA_IMPACT], "accuracy", "get").mockReturnValue(100); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -100,7 +100,7 @@ describe("Moves - Substitute", () => { await game.phaseInterceptor.to("MoveEndPhase", false); - expect(leadPokemon.hp).toBe(Math.ceil(leadPokemon.getMaxHp() * 3/4)); + expect(leadPokemon.hp).toBe(Math.ceil(leadPokemon.getMaxHp() * 3 / 4)); expect(leadPokemon.getTag(BattlerTagType.SUBSTITUTE)).toBeDefined(); const postSubHp = leadPokemon.hp; @@ -116,7 +116,7 @@ describe("Moves - Substitute", () => { async () => { game.override.enemyMoveset(Moves.CHARM); - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -134,7 +134,7 @@ describe("Moves - Substitute", () => { async () => { game.override.enemyMoveset(Moves.ECHOED_VOICE); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([ Species.BLASTOISE ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -158,7 +158,7 @@ describe("Moves - Substitute", () => { game.override.enemyMoveset(Moves.TACKLE); game.override.enemyAbility(Abilities.INFILTRATOR); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([ Species.BLASTOISE ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -179,7 +179,7 @@ describe("Moves - Substitute", () => { it( "shouldn't block the user's own status moves", async () => { - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([ Species.BLASTOISE ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -201,7 +201,7 @@ describe("Moves - Substitute", () => { async () => { game.override.moveset(Moves.LIGHT_SCREEN); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([ Species.BLASTOISE ]); const leadPokemon = game.scene.getPlayerPokemon()!; vi.spyOn(leadPokemon, "getMoveEffectiveness"); @@ -222,7 +222,7 @@ describe("Moves - Substitute", () => { async () => { game.override.enemyMoveset(Moves.STEALTH_ROCK); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([ Species.BLASTOISE ]); const leadPokemon = game.scene.getPlayerPokemon()!; vi.spyOn(leadPokemon, "getMoveEffectiveness"); @@ -243,7 +243,7 @@ describe("Moves - Substitute", () => { .moveset(Moves.TRICK_ROOM) .enemyMoveset(Moves.GRAVITY); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([ Species.BLASTOISE ]); const pokemon = game.scene.getField(true); pokemon.forEach(p => { @@ -267,7 +267,7 @@ describe("Moves - Substitute", () => { game.override.enemyMoveset(Moves.FAKE_OUT); game.override.startingLevel(1); // Ensures the Substitute will break - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([ Species.BLASTOISE ]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -288,7 +288,7 @@ describe("Moves - Substitute", () => { vi.spyOn(allMoves[Moves.SAND_TOMB], "accuracy", "get").mockReturnValue(100); game.override.enemyMoveset(Moves.SAND_TOMB); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([ Species.BLASTOISE ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -308,7 +308,7 @@ describe("Moves - Substitute", () => { vi.spyOn(allMoves[Moves.LIQUIDATION], "chance", "get").mockReturnValue(100); game.override.enemyMoveset(Moves.LIQUIDATION); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([ Species.BLASTOISE ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -327,7 +327,7 @@ describe("Moves - Substitute", () => { async () => { game.override.enemyMoveset(Moves.NUZZLE); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([ Species.BLASTOISE ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -345,10 +345,10 @@ describe("Moves - Substitute", () => { "should prevent the user's items from being stolen", async () => { game.override.enemyMoveset(Moves.THIEF); - vi.spyOn(allMoves[Moves.THIEF], "attrs", "get").mockReturnValue([new StealHeldItemChanceAttr(1.0)]); // give Thief 100% steal rate - game.override.startingHeldItems([{name: "BERRY", type: BerryType.SITRUS}]); + vi.spyOn(allMoves[Moves.THIEF], "attrs", "get").mockReturnValue([ new StealHeldItemChanceAttr(1.0) ]); // give Thief 100% steal rate + game.override.startingHeldItems([{ name: "BERRY", type: BerryType.SITRUS }]); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([ Species.BLASTOISE ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -365,10 +365,10 @@ describe("Moves - Substitute", () => { it( "should prevent the user's items from being removed", async () => { - game.override.moveset([Moves.KNOCK_OFF]); - game.override.enemyHeldItems([{name: "BERRY", type: BerryType.SITRUS}]); + game.override.moveset([ Moves.KNOCK_OFF ]); + game.override.enemyHeldItems([{ name: "BERRY", type: BerryType.SITRUS }]); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([ Species.BLASTOISE ]); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -387,9 +387,9 @@ describe("Moves - Substitute", () => { "move effect should prevent the user's berries from being stolen and eaten", async () => { game.override.enemyMoveset(Moves.BUG_BITE); - game.override.startingHeldItems([{name: "BERRY", type: BerryType.SITRUS}]); + game.override.startingHeldItems([{ name: "BERRY", type: BerryType.SITRUS }]); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([ Species.BLASTOISE ]); const leadPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -413,7 +413,7 @@ describe("Moves - Substitute", () => { async () => { game.override.enemyMoveset(Moves.CLEAR_SMOG); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([ Species.BLASTOISE ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -433,7 +433,7 @@ describe("Moves - Substitute", () => { game.override.enemyMoveset(Moves.MAGICAL_TORQUE); vi.spyOn(allMoves[Moves.MAGICAL_TORQUE], "chance", "get").mockReturnValue(100); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([ Species.BLASTOISE ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -451,9 +451,9 @@ describe("Moves - Substitute", () => { it( "should transfer to the switched in Pokemon when the source uses Baton Pass", async () => { - game.override.moveset([Moves.SUBSTITUTE, Moves.BATON_PASS]); + game.override.moveset([ Moves.SUBSTITUTE, Moves.BATON_PASS ]); - await game.classicMode.startBattle([Species.BLASTOISE, Species.CHARIZARD]); + await game.classicMode.startBattle([ Species.BLASTOISE, Species.CHARIZARD ]); const leadPokemon = game.scene.getPlayerPokemon()!; @@ -469,7 +469,7 @@ describe("Moves - Substitute", () => { const switchedPokemon = game.scene.getPlayerPokemon()!; const subTag = switchedPokemon.getTag(SubstituteTag)!; expect(subTag).toBeDefined(); - expect(subTag.hp).toBe(Math.floor(leadPokemon.getMaxHp() * 1/4)); + expect(subTag.hp).toBe(Math.floor(leadPokemon.getMaxHp() * 1 / 4)); } ); @@ -479,7 +479,7 @@ describe("Moves - Substitute", () => { game.override.enemyMoveset(Moves.TACKLE); game.override.ability(Abilities.ROUGH_SKIN); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([ Species.BLASTOISE ]); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -495,12 +495,12 @@ describe("Moves - Substitute", () => { "should prevent the source's Focus Punch from failing when hit", async () => { game.override.enemyMoveset(Moves.TACKLE); - game.override.moveset([Moves.FOCUS_PUNCH]); + game.override.moveset([ Moves.FOCUS_PUNCH ]); // Make Focus Punch 40 power to avoid a KO vi.spyOn(allMoves[Moves.FOCUS_PUNCH], "calculateBattlePower").mockReturnValue(40); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([ Species.BLASTOISE ]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -520,9 +520,9 @@ describe("Moves - Substitute", () => { "should not allow Shell Trap to activate when attacked", async () => { game.override.enemyMoveset(Moves.TACKLE); - game.override.moveset([Moves.SHELL_TRAP]); + game.override.moveset([ Moves.SHELL_TRAP ]); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([ Species.BLASTOISE ]); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -540,9 +540,9 @@ describe("Moves - Substitute", () => { "should not allow Beak Blast to burn opponents when hit", async () => { game.override.enemyMoveset(Moves.TACKLE); - game.override.moveset([Moves.BEAK_BLAST]); + game.override.moveset([ Moves.BEAK_BLAST ]); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([ Species.BLASTOISE ]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -561,9 +561,9 @@ describe("Moves - Substitute", () => { "should cause incoming attacks to not activate Counter", async () => { game.override.enemyMoveset(Moves.TACKLE); - game.override.moveset([Moves.COUNTER]); + game.override.moveset([ Moves.COUNTER ]); - await game.classicMode.startBattle([Species.BLASTOISE]); + await game.classicMode.startBattle([ Species.BLASTOISE ]); const playerPokemon = game.scene.getPlayerPokemon()!; const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -584,7 +584,7 @@ describe("Moves - Substitute", () => { async () => { game.override.enemyMoveset(Moves.SAPPY_SEED); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([ Species.CHARIZARD ]); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -592,7 +592,7 @@ describe("Moves - Substitute", () => { game.move.select(Moves.SPLASH); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); // enemy uses Sappy Seed first + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); // enemy uses Sappy Seed first await game.move.forceHit(); // forces Sappy Seed to hit await game.phaseInterceptor.to("MoveEndPhase"); diff --git a/src/test/moves/swallow.test.ts b/src/test/moves/swallow.test.ts index b8ca941d0ee..2aee4d2604a 100644 --- a/src/test/moves/swallow.test.ts +++ b/src/test/moves/swallow.test.ts @@ -33,7 +33,7 @@ describe("Moves - Swallow", () => { game.override.enemyAbility(Abilities.NONE); game.override.enemyLevel(2000); - game.override.moveset([Moves.SWALLOW, Moves.SWALLOW, Moves.SWALLOW, Moves.SWALLOW]); + game.override.moveset([ Moves.SWALLOW, Moves.SWALLOW, Moves.SWALLOW, Moves.SWALLOW ]); game.override.ability(Abilities.NONE); }); @@ -42,7 +42,7 @@ describe("Moves - Swallow", () => { const stacksToSetup = 1; const expectedHeal = 25; - await game.startBattle([Species.ABOMASNOW]); + await game.startBattle([ Species.ABOMASNOW ]); const pokemon = game.scene.getPlayerPokemon()!; vi.spyOn(pokemon, "getMaxHp").mockReturnValue(100); @@ -69,7 +69,7 @@ describe("Moves - Swallow", () => { const stacksToSetup = 2; const expectedHeal = 50; - await game.startBattle([Species.ABOMASNOW]); + await game.startBattle([ Species.ABOMASNOW ]); const pokemon = game.scene.getPlayerPokemon()!; vi.spyOn(pokemon, "getMaxHp").mockReturnValue(100); @@ -97,7 +97,7 @@ describe("Moves - Swallow", () => { const stacksToSetup = 3; const expectedHeal = 100; - await game.startBattle([Species.ABOMASNOW]); + await game.startBattle([ Species.ABOMASNOW ]); const pokemon = game.scene.getPlayerPokemon()!; vi.spyOn(pokemon, "getMaxHp").mockReturnValue(100); @@ -124,7 +124,7 @@ describe("Moves - Swallow", () => { }); it("fails without stacks", async () => { - await game.startBattle([Species.ABOMASNOW]); + await game.startBattle([ Species.ABOMASNOW ]); const pokemon = game.scene.getPlayerPokemon()!; @@ -139,7 +139,7 @@ describe("Moves - Swallow", () => { describe("restores stat stage boosts granted by stacks", () => { it("decreases stats based on stored values (both boosts equal)", async () => { - await game.startBattle([Species.ABOMASNOW]); + await game.startBattle([ Species.ABOMASNOW ]); const pokemon = game.scene.getPlayerPokemon()!; pokemon.addTag(BattlerTagType.STOCKPILING); @@ -164,7 +164,7 @@ describe("Moves - Swallow", () => { }); it("lower stat stages based on stored values (different boosts)", async () => { - await game.startBattle([Species.ABOMASNOW]); + await game.startBattle([ Species.ABOMASNOW ]); const pokemon = game.scene.getPlayerPokemon()!; pokemon.addTag(BattlerTagType.STOCKPILING); diff --git a/src/test/moves/syrup_bomb.test.ts b/src/test/moves/syrup_bomb.test.ts index 20cd590e457..7f914e45cc6 100644 --- a/src/test/moves/syrup_bomb.test.ts +++ b/src/test/moves/syrup_bomb.test.ts @@ -30,7 +30,7 @@ describe("Moves - SYRUP BOMB", () => { .enemySpecies(Species.SNORLAX) .startingLevel(30) .enemyLevel(100) - .moveset([Moves.SYRUP_BOMB, Moves.SPLASH]) + .moveset([ Moves.SYRUP_BOMB, Moves.SPLASH ]) .enemyMoveset(Moves.SPLASH); vi.spyOn(allMoves[Moves.SYRUP_BOMB], "accuracy", "get").mockReturnValue(100); }); @@ -39,13 +39,13 @@ describe("Moves - SYRUP BOMB", () => { it("decreases the target Pokemon's speed stat once per turn for 3 turns", async () => { - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const targetPokemon = game.scene.getEnemyPokemon()!; expect(targetPokemon.getStatStage(Stat.SPD)).toBe(0); game.move.select(Moves.SYRUP_BOMB); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.move.forceHit(); await game.toNextTurn(); expect(targetPokemon.getTag(BattlerTagType.SYRUP_BOMB)).toBeDefined(); @@ -66,12 +66,12 @@ describe("Moves - SYRUP BOMB", () => { it("does not affect Pokemon with the ability Bulletproof", async () => { game.override.enemyAbility(Abilities.BULLETPROOF); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const targetPokemon = game.scene.getEnemyPokemon()!; game.move.select(Moves.SYRUP_BOMB); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.move.forceHit(); await game.toNextTurn(); expect(targetPokemon.isFullHp()).toBe(true); diff --git a/src/test/moves/tackle.test.ts b/src/test/moves/tackle.test.ts index b25c7524a1a..5d5ff1a366d 100644 --- a/src/test/moves/tackle.test.ts +++ b/src/test/moves/tackle.test.ts @@ -29,8 +29,8 @@ describe("Moves - Tackle", () => { game.override.enemySpecies(Species.MAGIKARP); game.override.startingLevel(1); game.override.startingWave(97); - game.override.moveset([moveToUse]); - game.override.enemyMoveset([Moves.GROWTH, Moves.GROWTH, Moves.GROWTH, Moves.GROWTH]); + game.override.moveset([ moveToUse ]); + game.override.enemyMoveset([ Moves.GROWTH, Moves.GROWTH, Moves.GROWTH, Moves.GROWTH ]); game.override.disableCrits(); }); diff --git a/src/test/moves/tailwind.test.ts b/src/test/moves/tailwind.test.ts index 6a08cfe802f..a26dde82824 100644 --- a/src/test/moves/tailwind.test.ts +++ b/src/test/moves/tailwind.test.ts @@ -25,12 +25,12 @@ describe("Moves - Tailwind", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleType("double"); - game.override.moveset([Moves.TAILWIND, Moves.SPLASH, Moves.PETAL_BLIZZARD, Moves.SANDSTORM]); + game.override.moveset([ Moves.TAILWIND, Moves.SPLASH, Moves.PETAL_BLIZZARD, Moves.SANDSTORM ]); game.override.enemyMoveset(Moves.SPLASH); }); it("doubles the Speed stat of the Pokemons on its side", async () => { - await game.startBattle([Species.MAGIKARP, Species.MEOWTH]); + await game.startBattle([ Species.MAGIKARP, Species.MEOWTH ]); const magikarp = game.scene.getPlayerField()[0]; const meowth = game.scene.getPlayerField()[1]; @@ -53,7 +53,7 @@ describe("Moves - Tailwind", () => { it("lasts for 4 turns", async () => { game.override.battleType("single"); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); game.move.select(Moves.TAILWIND); await game.toNextTurn(); @@ -76,7 +76,7 @@ describe("Moves - Tailwind", () => { it("does not affect the opposing side", async () => { game.override.battleType("single"); - await game.startBattle([Species.MAGIKARP]); + await game.startBattle([ Species.MAGIKARP ]); const ally = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; diff --git a/src/test/moves/tar_shot.test.ts b/src/test/moves/tar_shot.test.ts index 2385bd18265..4734da366e4 100644 --- a/src/test/moves/tar_shot.test.ts +++ b/src/test/moves/tar_shot.test.ts @@ -29,12 +29,12 @@ describe("Moves - Tar Shot", () => { .enemyMoveset(Moves.SPLASH) .enemySpecies(Species.TANGELA) .enemyLevel(1000) - .moveset([Moves.TAR_SHOT, Moves.FIRE_PUNCH]) + .moveset([ Moves.TAR_SHOT, Moves.FIRE_PUNCH ]) .disableCrits(); }); it("lowers the target's Speed stat by one stage and doubles the effectiveness of Fire-type moves used on the target", async () => { - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([ Species.PIKACHU ]); const enemy = game.scene.getEnemyPokemon()!; @@ -48,14 +48,14 @@ describe("Moves - Tar Shot", () => { await game.toNextTurn(); game.move.select(Moves.FIRE_PUNCH); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to("MoveEndPhase"); expect(enemy.getMoveEffectiveness).toHaveReturnedWith(4); }); it("will not double the effectiveness of Fire-type moves used on a target that is already under the effect of Tar Shot (but may still lower its Speed)", async () => { - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([ Species.PIKACHU ]); const enemy = game.scene.getEnemyPokemon()!; @@ -76,7 +76,7 @@ describe("Moves - Tar Shot", () => { await game.toNextTurn(); game.move.select(Moves.FIRE_PUNCH); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to("MoveEndPhase"); expect(enemy.getMoveEffectiveness).toHaveReturnedWith(4); @@ -84,7 +84,7 @@ describe("Moves - Tar Shot", () => { it("does not double the effectiveness of Fire-type moves against a Pokémon that is Terastallized", async () => { game.override.enemyHeldItems([{ name: "TERA_SHARD", type: Type.GRASS }]).enemySpecies(Species.SPRIGATITO); - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([ Species.PIKACHU ]); const enemy = game.scene.getEnemyPokemon()!; @@ -98,7 +98,7 @@ describe("Moves - Tar Shot", () => { await game.toNextTurn(); game.move.select(Moves.FIRE_PUNCH); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to("MoveEndPhase"); expect(enemy.getMoveEffectiveness).toHaveReturnedWith(2); @@ -106,7 +106,7 @@ describe("Moves - Tar Shot", () => { it("doubles the effectiveness of Fire-type moves against a Pokémon that is already under the effects of Tar Shot before it Terastallized", async () => { game.override.enemySpecies(Species.SPRIGATITO); - await game.classicMode.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([ Species.PIKACHU ]); const enemy = game.scene.getEnemyPokemon()!; @@ -122,7 +122,7 @@ describe("Moves - Tar Shot", () => { game.override.enemyHeldItems([{ name: "TERA_SHARD", type: Type.GRASS }]); game.move.select(Moves.FIRE_PUNCH); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to("MoveEndPhase"); expect(enemy.getMoveEffectiveness).toHaveReturnedWith(4); diff --git a/src/test/moves/taunt.test.ts b/src/test/moves/taunt.test.ts index 50bb2fee9df..a425a048a2c 100644 --- a/src/test/moves/taunt.test.ts +++ b/src/test/moves/taunt.test.ts @@ -25,13 +25,13 @@ describe("Moves - Taunt", () => { game.override .battleType("single") .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset([Moves.TAUNT, Moves.SPLASH]) + .enemyMoveset([ Moves.TAUNT, Moves.SPLASH ]) .enemySpecies(Species.SHUCKLE) - .moveset([Moves.GROWL]); + .moveset([ Moves.GROWL ]); }); it("Pokemon should not be able to use Status Moves", async () => { - await game.classicMode.startBattle([Species.REGIELEKI]); + await game.classicMode.startBattle([ Species.REGIELEKI ]); const playerPokemon = game.scene.getPlayerPokemon()!; diff --git a/src/test/moves/tera_blast.test.ts b/src/test/moves/tera_blast.test.ts index 55d61496297..0ce8a552105 100644 --- a/src/test/moves/tera_blast.test.ts +++ b/src/test/moves/tera_blast.test.ts @@ -32,7 +32,7 @@ describe("Moves - Tera Blast", () => { .battleType("single") .disableCrits() .starterSpecies(Species.FEEBAS) - .moveset([Moves.TERA_BLAST]) + .moveset([ Moves.TERA_BLAST ]) .ability(Abilities.BALL_FETCH) .startingHeldItems([{ name: "TERA_SHARD", type: Type.FIRE }]) .enemySpecies(Species.MAGIKARP) @@ -52,7 +52,7 @@ describe("Moves - Tera Blast", () => { vi.spyOn(enemyPokemon, "apply"); game.move.select(Moves.TERA_BLAST); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to("MoveEffectPhase"); expect(enemyPokemon.apply).toHaveReturnedWith(HitResult.SUPER_EFFECTIVE); @@ -64,7 +64,7 @@ describe("Moves - Tera Blast", () => { await game.startBattle(); game.move.select(Moves.TERA_BLAST); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to("MoveEffectPhase"); expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(100); @@ -80,7 +80,7 @@ describe("Moves - Tera Blast", () => { vi.spyOn(enemyPokemon, "isTerastallized").mockReturnValue(true); game.move.select(Moves.TERA_BLAST); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to("MoveEffectPhase"); expect(enemyPokemon.apply).toHaveReturnedWith(HitResult.SUPER_EFFECTIVE); @@ -107,7 +107,7 @@ describe("Moves - Tera Blast", () => { const playerPokemon = game.scene.getPlayerPokemon()!; game.move.select(Moves.TERA_BLAST); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to("MoveEndPhase"); expect(playerPokemon.getStatStage(Stat.SPATK)).toBe(-1); diff --git a/src/test/moves/tera_starstorm.test.ts b/src/test/moves/tera_starstorm.test.ts index 20dbc0b77d6..f0759dd242d 100644 --- a/src/test/moves/tera_starstorm.test.ts +++ b/src/test/moves/tera_starstorm.test.ts @@ -24,7 +24,7 @@ describe("Moves - Tera Starstorm", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.TERA_STARSTORM, Moves.SPLASH]) + .moveset([ Moves.TERA_STARSTORM, Moves.SPLASH ]) .battleType("double") .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH) @@ -35,7 +35,7 @@ describe("Moves - Tera Starstorm", () => { it("changes type to Stellar when used by Terapagos in its Stellar Form", async () => { game.override.battleType("single"); - await game.classicMode.startBattle([Species.TERAPAGOS]); + await game.classicMode.startBattle([ Species.TERAPAGOS ]); const terapagos = game.scene.getPlayerPokemon()!; @@ -49,12 +49,12 @@ describe("Moves - Tera Starstorm", () => { }); it("targets both opponents in a double battle when used by Terapagos in its Stellar Form", async () => { - await game.classicMode.startBattle([Species.MAGIKARP, Species.TERAPAGOS]); + await game.classicMode.startBattle([ Species.MAGIKARP, Species.TERAPAGOS ]); game.move.select(Moves.TERA_STARSTORM, 0, BattlerIndex.ENEMY); game.move.select(Moves.TERA_STARSTORM, 1); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); const enemyField = game.scene.getEnemyField(); @@ -68,7 +68,7 @@ describe("Moves - Tera Starstorm", () => { }); it("applies the effects when Terapagos in Stellar Form is fused with another Pokemon", async () => { - await game.classicMode.startBattle([Species.TERAPAGOS, Species.CHARMANDER, Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.TERAPAGOS, Species.CHARMANDER, Species.MAGIKARP ]); const fusionedMon = game.scene.getParty()[0]; const magikarp = game.scene.getParty()[2]; diff --git a/src/test/moves/thousand_arrows.test.ts b/src/test/moves/thousand_arrows.test.ts index ad9281dc45e..112be476955 100644 --- a/src/test/moves/thousand_arrows.test.ts +++ b/src/test/moves/thousand_arrows.test.ts @@ -9,7 +9,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; - describe("Moves - Thousand Arrows", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -30,14 +29,14 @@ describe("Moves - Thousand Arrows", () => { game.override.enemySpecies(Species.TOGETIC); game.override.startingLevel(100); game.override.enemyLevel(100); - game.override.moveset([Moves.THOUSAND_ARROWS]); - game.override.enemyMoveset([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]); + game.override.moveset([ Moves.THOUSAND_ARROWS ]); + game.override.enemyMoveset([ Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH ]); }); it( "move should hit and ground Flying-type targets", async () => { - await game.startBattle([Species.ILLUMISE]); + await game.startBattle([ Species.ILLUMISE ]); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -60,7 +59,7 @@ describe("Moves - Thousand Arrows", () => { game.override.enemySpecies(Species.SNORLAX); game.override.enemyAbility(Abilities.LEVITATE); - await game.startBattle([Species.ILLUMISE]); + await game.startBattle([ Species.ILLUMISE ]); const enemyPokemon = game.scene.getEnemyPokemon()!; @@ -82,7 +81,7 @@ describe("Moves - Thousand Arrows", () => { async () => { game.override.enemySpecies(Species.SNORLAX); - await game.startBattle([Species.ILLUMISE]); + await game.startBattle([ Species.ILLUMISE ]); const enemyPokemon = game.scene.getEnemyPokemon()!; diff --git a/src/test/moves/throat_chop.test.ts b/src/test/moves/throat_chop.test.ts index 2a0ab675b25..24293f8d086 100644 --- a/src/test/moves/throat_chop.test.ts +++ b/src/test/moves/throat_chop.test.ts @@ -32,12 +32,12 @@ describe("Moves - Throat Chop", () => { }); it("prevents the target from using sound-based moves for two turns", async () => { - await game.classicMode.startBattle([Species.MAGIKARP]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); const enemy = game.scene.getEnemyPokemon()!; game.move.select(Moves.GROWL); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); // First turn, move is interrupted await game.phaseInterceptor.to("TurnEndPhase"); @@ -47,7 +47,7 @@ describe("Moves - Throat Chop", () => { await game.toNextTurn(); game.move.select(Moves.GROWL); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.phaseInterceptor.to("MoveEndPhase"); expect(enemy.isFullHp()).toBe(false); diff --git a/src/test/moves/thunder_wave.test.ts b/src/test/moves/thunder_wave.test.ts index 28c5da4717b..03e9ebb94f3 100644 --- a/src/test/moves/thunder_wave.test.ts +++ b/src/test/moves/thunder_wave.test.ts @@ -8,7 +8,6 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; - describe("Moves - Thunder Wave", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -28,7 +27,7 @@ describe("Moves - Thunder Wave", () => { game.override .battleType("single") .starterSpecies(Species.PIKACHU) - .moveset([Moves.THUNDER_WAVE]) + .moveset([ Moves.THUNDER_WAVE ]) .enemyMoveset(Moves.SPLASH); }); diff --git a/src/test/moves/tidy_up.test.ts b/src/test/moves/tidy_up.test.ts index 8a3a0f3be76..255967b40ac 100644 --- a/src/test/moves/tidy_up.test.ts +++ b/src/test/moves/tidy_up.test.ts @@ -33,13 +33,13 @@ describe("Moves - Tidy Up", () => { game.override.enemyMoveset(Moves.SPLASH); game.override.starterSpecies(Species.FEEBAS); game.override.ability(Abilities.BALL_FETCH); - game.override.moveset([Moves.TIDY_UP]); + game.override.moveset([ Moves.TIDY_UP ]); game.override.startingLevel(50); }); it("spikes are cleared", async () => { - game.override.moveset([Moves.SPIKES, Moves.TIDY_UP]); - game.override.enemyMoveset([Moves.SPIKES, Moves.SPIKES, Moves.SPIKES, Moves.SPIKES]); + game.override.moveset([ Moves.SPIKES, Moves.TIDY_UP ]); + game.override.enemyMoveset([ Moves.SPIKES, Moves.SPIKES, Moves.SPIKES, Moves.SPIKES ]); await game.classicMode.startBattle(); game.move.select(Moves.SPIKES); @@ -51,8 +51,8 @@ describe("Moves - Tidy Up", () => { }, 20000); it("stealth rocks are cleared", async () => { - game.override.moveset([Moves.STEALTH_ROCK, Moves.TIDY_UP]); - game.override.enemyMoveset([Moves.STEALTH_ROCK, Moves.STEALTH_ROCK, Moves.STEALTH_ROCK, Moves.STEALTH_ROCK]); + game.override.moveset([ Moves.STEALTH_ROCK, Moves.TIDY_UP ]); + game.override.enemyMoveset([ Moves.STEALTH_ROCK, Moves.STEALTH_ROCK, Moves.STEALTH_ROCK, Moves.STEALTH_ROCK ]); await game.classicMode.startBattle(); game.move.select(Moves.STEALTH_ROCK); @@ -63,8 +63,8 @@ describe("Moves - Tidy Up", () => { }, 20000); it("toxic spikes are cleared", async () => { - game.override.moveset([Moves.TOXIC_SPIKES, Moves.TIDY_UP]); - game.override.enemyMoveset([Moves.TOXIC_SPIKES, Moves.TOXIC_SPIKES, Moves.TOXIC_SPIKES, Moves.TOXIC_SPIKES]); + game.override.moveset([ Moves.TOXIC_SPIKES, Moves.TIDY_UP ]); + game.override.enemyMoveset([ Moves.TOXIC_SPIKES, Moves.TOXIC_SPIKES, Moves.TOXIC_SPIKES, Moves.TOXIC_SPIKES ]); await game.classicMode.startBattle(); game.move.select(Moves.TOXIC_SPIKES); @@ -75,8 +75,8 @@ describe("Moves - Tidy Up", () => { }, 20000); it("sticky webs are cleared", async () => { - game.override.moveset([Moves.STICKY_WEB, Moves.TIDY_UP]); - game.override.enemyMoveset([Moves.STICKY_WEB, Moves.STICKY_WEB, Moves.STICKY_WEB, Moves.STICKY_WEB]); + game.override.moveset([ Moves.STICKY_WEB, Moves.TIDY_UP ]); + game.override.enemyMoveset([ Moves.STICKY_WEB, Moves.STICKY_WEB, Moves.STICKY_WEB, Moves.STICKY_WEB ]); await game.classicMode.startBattle(); @@ -88,8 +88,8 @@ describe("Moves - Tidy Up", () => { }, 20000); it("substitutes are cleared", async () => { - game.override.moveset([Moves.SUBSTITUTE, Moves.TIDY_UP]); - game.override.enemyMoveset([Moves.SUBSTITUTE, Moves.SUBSTITUTE, Moves.SUBSTITUTE, Moves.SUBSTITUTE]); + game.override.moveset([ Moves.SUBSTITUTE, Moves.TIDY_UP ]); + game.override.enemyMoveset([ Moves.SUBSTITUTE, Moves.SUBSTITUTE, Moves.SUBSTITUTE, Moves.SUBSTITUTE ]); await game.classicMode.startBattle(); diff --git a/src/test/moves/torment.test.ts b/src/test/moves/torment.test.ts index f725f2bc34a..b4c9a059db1 100644 --- a/src/test/moves/torment.test.ts +++ b/src/test/moves/torment.test.ts @@ -26,15 +26,15 @@ describe("Moves - Torment", () => { game.override .battleType("single") .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset([Moves.TORMENT, Moves.SPLASH]) + .enemyMoveset([ Moves.TORMENT, Moves.SPLASH ]) .enemySpecies(Species.SHUCKLE) .enemyLevel(30) - .moveset([Moves.TACKLE]) + .moveset([ Moves.TACKLE ]) .ability(Abilities.BALL_FETCH); }); it("Pokemon should not be able to use the same move consecutively", async () => { - await game.classicMode.startBattle([Species.CHANSEY]); + await game.classicMode.startBattle([ Species.CHANSEY ]); const playerPokemon = game.scene.getPlayerPokemon()!; diff --git a/src/test/moves/toxic.test.ts b/src/test/moves/toxic.test.ts index bfc41c8c92d..b146134ae51 100644 --- a/src/test/moves/toxic.test.ts +++ b/src/test/moves/toxic.test.ts @@ -32,7 +32,7 @@ describe("Moves - Toxic", () => { it("should be guaranteed to hit if user is Poison-type", async () => { vi.spyOn(allMoves[Moves.TOXIC], "accuracy", "get").mockReturnValue(0); - await game.classicMode.startBattle([Species.TOXAPEX]); + await game.classicMode.startBattle([ Species.TOXAPEX ]); game.move.select(Moves.TOXIC); await game.phaseInterceptor.to("BerryPhase", false); @@ -42,7 +42,7 @@ describe("Moves - Toxic", () => { it("may miss if user is not Poison-type", async () => { vi.spyOn(allMoves[Moves.TOXIC], "accuracy", "get").mockReturnValue(0); - await game.classicMode.startBattle([Species.UMBREON]); + await game.classicMode.startBattle([ Species.UMBREON ]); game.move.select(Moves.TOXIC); await game.phaseInterceptor.to("BerryPhase", false); @@ -53,10 +53,10 @@ describe("Moves - Toxic", () => { it("should hit semi-invulnerable targets if user is Poison-type", async () => { vi.spyOn(allMoves[Moves.TOXIC], "accuracy", "get").mockReturnValue(0); game.override.enemyMoveset(Moves.FLY); - await game.classicMode.startBattle([Species.TOXAPEX]); + await game.classicMode.startBattle([ Species.TOXAPEX ]); game.move.select(Moves.TOXIC); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.phaseInterceptor.to("BerryPhase", false); expect(game.scene.getEnemyPokemon()!.status?.effect).toBe(StatusEffect.TOXIC); @@ -65,10 +65,10 @@ describe("Moves - Toxic", () => { it("should miss semi-invulnerable targets if user is not Poison-type", async () => { vi.spyOn(allMoves[Moves.TOXIC], "accuracy", "get").mockReturnValue(-1); game.override.enemyMoveset(Moves.FLY); - await game.classicMode.startBattle([Species.UMBREON]); + await game.classicMode.startBattle([ Species.UMBREON ]); game.move.select(Moves.TOXIC); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.phaseInterceptor.to("BerryPhase", false); expect(game.scene.getEnemyPokemon()!.status).toBeUndefined(); @@ -77,10 +77,10 @@ describe("Moves - Toxic", () => { it("moves other than Toxic should not hit semi-invulnerable targets even if user is Poison-type", async () => { game.override.moveset(Moves.SWIFT); game.override.enemyMoveset(Moves.FLY); - await game.classicMode.startBattle([Species.TOXAPEX]); + await game.classicMode.startBattle([ Species.TOXAPEX ]); game.move.select(Moves.SWIFT); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.phaseInterceptor.to("BerryPhase", false); const enemyPokemon = game.scene.getEnemyPokemon()!; diff --git a/src/test/moves/transform.test.ts b/src/test/moves/transform.test.ts index 6686f1fc73b..079fdfa5685 100644 --- a/src/test/moves/transform.test.ts +++ b/src/test/moves/transform.test.ts @@ -76,7 +76,7 @@ describe("Moves - Transform", () => { }, 20000); it("should copy in-battle overridden stats", async () => { - game.override.enemyMoveset([Moves.POWER_SPLIT]); + game.override.enemyMoveset([ Moves.POWER_SPLIT ]); await game.startBattle([ Species.DITTO diff --git a/src/test/moves/u_turn.test.ts b/src/test/moves/u_turn.test.ts index c4b6ae2497f..17e02cb50ef 100644 --- a/src/test/moves/u_turn.test.ts +++ b/src/test/moves/u_turn.test.ts @@ -29,7 +29,7 @@ describe("Moves - U-turn", () => { .enemySpecies(Species.GENGAR) .startingLevel(90) .startingWave(97) - .moveset([Moves.U_TURN]) + .moveset([ Moves.U_TURN ]) .enemyMoveset(Moves.SPLASH) .disableCrits(); }); diff --git a/src/test/moves/whirlwind.test.ts b/src/test/moves/whirlwind.test.ts index a591a3cd6c5..c8ad29a23d7 100644 --- a/src/test/moves/whirlwind.test.ts +++ b/src/test/moves/whirlwind.test.ts @@ -36,15 +36,15 @@ describe("Moves - Whirlwind", () => { { move: Moves.BOUNCE, name: "Bounce" }, { move: Moves.SKY_DROP, name: "Sky Drop" }, ])("should not hit a flying target: $name (=$move)", async ({ move }) => { - game.override.moveset([move]); - await game.classicMode.startBattle([Species.STARAPTOR]); + game.override.moveset([ move ]); + await game.classicMode.startBattle([ Species.STARAPTOR ]); const staraptor = game.scene.getPlayerPokemon()!; const whirlwind = allMoves[Moves.WHIRLWIND]; vi.spyOn(whirlwind, "getFailedText"); game.move.select(move); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.toNextTurn(); expect(staraptor.findTag((t) => t.tagType === BattlerTagType.FLYING)).toBeDefined(); diff --git a/src/test/moves/wide_guard.test.ts b/src/test/moves/wide_guard.test.ts index 9ddd8905ff6..c25a700c981 100644 --- a/src/test/moves/wide_guard.test.ts +++ b/src/test/moves/wide_guard.test.ts @@ -9,7 +9,6 @@ import { BerryPhase } from "#app/phases/berry-phase"; import { CommandPhase } from "#app/phases/command-phase"; - describe("Moves - Wide Guard", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -29,10 +28,10 @@ describe("Moves - Wide Guard", () => { game.override.battleType("double"); - game.override.moveset([Moves.WIDE_GUARD, Moves.SPLASH, Moves.SURF]); + game.override.moveset([ Moves.WIDE_GUARD, Moves.SPLASH, Moves.SURF ]); game.override.enemySpecies(Species.SNORLAX); - game.override.enemyMoveset([Moves.SWIFT]); + game.override.enemyMoveset([ Moves.SWIFT ]); game.override.enemyAbility(Abilities.INSOMNIA); game.override.startingLevel(100); @@ -42,7 +41,7 @@ describe("Moves - Wide Guard", () => { test( "should protect the user and allies from multi-target attack moves", async () => { - await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.startBattle([ Species.CHARIZARD, Species.BLASTOISE ]); const leadPokemon = game.scene.getPlayerField(); @@ -61,9 +60,9 @@ describe("Moves - Wide Guard", () => { test( "should protect the user and allies from multi-target status moves", async () => { - game.override.enemyMoveset([Moves.GROWL]); + game.override.enemyMoveset([ Moves.GROWL ]); - await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.startBattle([ Species.CHARIZARD, Species.BLASTOISE ]); const leadPokemon = game.scene.getPlayerField(); @@ -82,9 +81,9 @@ describe("Moves - Wide Guard", () => { test( "should not protect the user and allies from single-target moves", async () => { - game.override.enemyMoveset([Moves.TACKLE]); + game.override.enemyMoveset([ Moves.TACKLE ]); - await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.startBattle([ Species.CHARIZARD, Species.BLASTOISE ]); const leadPokemon = game.scene.getPlayerField(); @@ -103,9 +102,9 @@ describe("Moves - Wide Guard", () => { test( "should protect the user from its ally's multi-target move", async () => { - game.override.enemyMoveset([Moves.SPLASH]); + game.override.enemyMoveset([ Moves.SPLASH ]); - await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]); + await game.startBattle([ Species.CHARIZARD, Species.BLASTOISE ]); const leadPokemon = game.scene.getPlayerField(); const enemyPokemon = game.scene.getEnemyField(); diff --git a/src/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts b/src/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts index 6078e136ccb..f24800eaa71 100644 --- a/src/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts @@ -18,7 +18,7 @@ import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import { PartyHealPhase } from "#app/phases/party-heal-phase"; const namespace = "mysteryEncounters/aTrainersTest"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; +const defaultParty = [ Species.LAPRAS, Species.GENGAR, Species.ABRA ]; const defaultBiome = Biome.CAVE; const defaultWave = 45; @@ -40,10 +40,10 @@ describe("A Trainer's Test - Mystery Encounter", () => { game.override.disableTrainerWaves(); const biomeMap = new Map([ - [Biome.VOLCANO, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], + [ Biome.VOLCANO, [ MysteryEncounterType.MYSTERIOUS_CHALLENGERS ]], ]); HUMAN_TRANSITABLE_BIOMES.forEach(biome => { - biomeMap.set(biome, [MysteryEncounterType.A_TRAINERS_TEST]); + biomeMap.set(biome, [ MysteryEncounterType.A_TRAINERS_TEST ]); }); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue(biomeMap); }); @@ -106,7 +106,7 @@ describe("A Trainer's Test - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyField.length).toBe(1); expect(scene.currentBattle.trainer).toBeDefined(); - expect(["trainerNames:buck", "trainerNames:cheryl", "trainerNames:marley", "trainerNames:mira", "trainerNames:riley"].includes(scene.currentBattle.trainer!.config.name)).toBeTruthy(); + expect([ "trainerNames:buck", "trainerNames:cheryl", "trainerNames:marley", "trainerNames:mira", "trainerNames:riley" ].includes(scene.currentBattle.trainer!.config.name)).toBeTruthy(); expect(enemyField[0]).toBeDefined(); }); diff --git a/src/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts b/src/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts index 99d845c992d..99a835cb6ae 100644 --- a/src/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts @@ -18,7 +18,7 @@ import { MovePhase } from "#app/phases/move-phase"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; const namespace = "mysteryEncounters/absoluteAvarice"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; +const defaultParty = [ Species.LAPRAS, Species.GENGAR, Species.ABRA ]; const defaultBiome = Biome.PLAINS; const defaultWave = 45; @@ -41,8 +41,8 @@ describe("Absolute Avarice - Mystery Encounter", () => { vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( new Map([ - [Biome.PLAINS, [MysteryEncounterType.ABSOLUTE_AVARICE]], - [Biome.VOLCANO, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], + [ Biome.PLAINS, [ MysteryEncounterType.ABSOLUTE_AVARICE ]], + [ Biome.VOLCANO, [ MysteryEncounterType.MYSTERIOUS_CHALLENGERS ]], ]) ); }); @@ -84,7 +84,7 @@ describe("Absolute Avarice - Mystery Encounter", () => { it("should spawn if player has enough berries", async () => { game.override.mysteryEncounterTier(MysteryEncounterTier.GREAT); - game.override.startingHeldItems([{name: "BERRY", count: 2, type: BerryType.SITRUS}, {name: "BERRY", count: 3, type: BerryType.GANLON}]); + game.override.startingHeldItems([{ name: "BERRY", count: 2, type: BerryType.SITRUS }, { name: "BERRY", count: 3, type: BerryType.GANLON }]); await game.runToMysteryEncounter(); @@ -92,7 +92,7 @@ describe("Absolute Avarice - Mystery Encounter", () => { }); it("should remove all player's berries at the start of the encounter", async () => { - game.override.startingHeldItems([{name: "BERRY", count: 2, type: BerryType.SITRUS}, {name: "BERRY", count: 3, type: BerryType.GANLON}]); + game.override.startingHeldItems([{ name: "BERRY", count: 2, type: BerryType.SITRUS }, { name: "BERRY", count: 3, type: BerryType.GANLON }]); await game.runToMysteryEncounter(MysteryEncounterType.ABSOLUTE_AVARICE, defaultParty); @@ -128,7 +128,7 @@ describe("Absolute Avarice - Mystery Encounter", () => { expect(enemyField[0].species.speciesId).toBe(Species.GREEDENT); const moveset = enemyField[0].moveset.map(m => m?.moveId); expect(moveset?.length).toBe(4); - expect(moveset).toEqual([Moves.THRASH, Moves.BODY_PRESS, Moves.STUFF_CHEEKS, Moves.CRUNCH]); + expect(moveset).toEqual([ Moves.THRASH, Moves.BODY_PRESS, Moves.STUFF_CHEEKS, Moves.CRUNCH ]); const movePhases = phaseSpy.mock.calls.filter(p => p[0] instanceof MovePhase).map(p => p[0]); expect(movePhases.length).toBe(1); @@ -169,8 +169,8 @@ describe("Absolute Avarice - Mystery Encounter", () => { }); }); - it("Should return 3 (2/5ths floored) berries if 8 were stolen", {retry: 5}, async () => { - game.override.startingHeldItems([{name: "BERRY", count: 2, type: BerryType.SITRUS}, {name: "BERRY", count: 3, type: BerryType.GANLON}, {name: "BERRY", count: 3, type: BerryType.APICOT}]); + it("Should return 3 (2/5ths floored) berries if 8 were stolen", { retry: 5 }, async () => { + game.override.startingHeldItems([{ name: "BERRY", count: 2, type: BerryType.SITRUS }, { name: "BERRY", count: 3, type: BerryType.GANLON }, { name: "BERRY", count: 3, type: BerryType.APICOT }]); await game.runToMysteryEncounter(MysteryEncounterType.ABSOLUTE_AVARICE, defaultParty); @@ -185,8 +185,8 @@ describe("Absolute Avarice - Mystery Encounter", () => { expect(berryCountAfter).toBe(3); }); - it("Should return 2 (2/5ths floored) berries if 7 were stolen", {retry: 5}, async () => { - game.override.startingHeldItems([{name: "BERRY", count: 2, type: BerryType.SITRUS}, {name: "BERRY", count: 3, type: BerryType.GANLON}, {name: "BERRY", count: 2, type: BerryType.APICOT}]); + it("Should return 2 (2/5ths floored) berries if 7 were stolen", { retry: 5 }, async () => { + game.override.startingHeldItems([{ name: "BERRY", count: 2, type: BerryType.SITRUS }, { name: "BERRY", count: 3, type: BerryType.GANLON }, { name: "BERRY", count: 2, type: BerryType.APICOT }]); await game.runToMysteryEncounter(MysteryEncounterType.ABSOLUTE_AVARICE, defaultParty); @@ -239,7 +239,7 @@ describe("Absolute Avarice - Mystery Encounter", () => { expect(greedent.species.speciesId).toBe(Species.GREEDENT); const moveset = greedent.moveset.map(m => m?.moveId); expect(moveset?.length).toBe(4); - expect(moveset).toEqual([Moves.THRASH, Moves.BODY_PRESS, Moves.STUFF_CHEEKS, Moves.SLACK_OFF]); + expect(moveset).toEqual([ Moves.THRASH, Moves.BODY_PRESS, Moves.STUFF_CHEEKS, Moves.SLACK_OFF ]); }); it("should leave encounter without battle", async () => { diff --git a/src/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts b/src/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts index 54e780aba50..77d5a842b47 100644 --- a/src/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts @@ -20,7 +20,7 @@ import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; const namespace = "mysteryEncounters/anOfferYouCantRefuse"; /** Gyarados for Indimidate */ -const defaultParty = [Species.GYARADOS, Species.GENGAR, Species.ABRA]; +const defaultParty = [ Species.GYARADOS, Species.GENGAR, Species.ABRA ]; const defaultBiome = Biome.CAVE; const defaultWave = 45; @@ -42,10 +42,10 @@ describe("An Offer You Can't Refuse - Mystery Encounter", () => { game.override.disableTrainerWaves(); const biomeMap = new Map([ - [Biome.VOLCANO, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], + [ Biome.VOLCANO, [ MysteryEncounterType.MYSTERIOUS_CHALLENGERS ]], ]); HUMAN_TRANSITABLE_BIOMES.forEach(biome => { - biomeMap.set(biome, [MysteryEncounterType.AN_OFFER_YOU_CANT_REFUSE]); + biomeMap.set(biome, [ MysteryEncounterType.AN_OFFER_YOU_CANT_REFUSE ]); }); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue(biomeMap); }); @@ -194,10 +194,10 @@ describe("An Offer You Can't Refuse - Mystery Encounter", () => { }); it("should award EXP to a pokemon with a move in EXTORTION_MOVES", async () => { - await game.runToMysteryEncounter(MysteryEncounterType.AN_OFFER_YOU_CANT_REFUSE, [Species.ABRA]); + await game.runToMysteryEncounter(MysteryEncounterType.AN_OFFER_YOU_CANT_REFUSE, [ Species.ABRA ]); const party = scene.getParty(); const abra = party.find((pkm) => pkm.species.speciesId === Species.ABRA)!; - abra.moveset = [new PokemonMove(Moves.BEAT_UP)]; + abra.moveset = [ new PokemonMove(Moves.BEAT_UP) ]; const expBefore = abra.exp; await runMysteryEncounterToEnd(game, 2); diff --git a/src/test/mystery-encounter/encounters/berries-abound-encounter.test.ts b/src/test/mystery-encounter/encounters/berries-abound-encounter.test.ts index 225c06483fa..8e286468bea 100644 --- a/src/test/mystery-encounter/encounters/berries-abound-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/berries-abound-encounter.test.ts @@ -20,7 +20,7 @@ import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import { Abilities } from "#enums/abilities"; const namespace = "mysteryEncounters/berriesAbound"; -const defaultParty = [Species.PYUKUMUKU, Species.MAGIKARP, Species.PIKACHU]; +const defaultParty = [ Species.PYUKUMUKU, Species.MAGIKARP, Species.PIKACHU ]; const defaultBiome = Biome.CAVE; const defaultWave = 45; @@ -48,7 +48,7 @@ describe("Berries Abound - Mystery Encounter", () => { vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( new Map([ - [Biome.CAVE, [MysteryEncounterType.BERRIES_ABOUND]], + [ Biome.CAVE, [ MysteryEncounterType.BERRIES_ABOUND ]], ]) ); }); @@ -189,7 +189,7 @@ describe("Berries Abound - Mystery Encounter", () => { expect(enemyField[0].species.speciesId).toBe(speciesToSpawn); // Should be enraged - expect(enemyField[0].summonData.statStages).toEqual([0, 1, 0, 1, 1, 0, 0]); + expect(enemyField[0].summonData.statStages).toEqual([ 0, 1, 0, 1, 1, 0, 0 ]); expect(encounterTextSpy).toHaveBeenCalledWith(expect.any(BattleScene), `${namespace}:option.2.selected_bad`); }); @@ -211,7 +211,7 @@ describe("Berries Abound - Mystery Encounter", () => { expect(enemyField[0].species.speciesId).toBe(speciesToSpawn); // Should be enraged - expect(enemyField[0].summonData.statStages).toEqual([1, 1, 1, 1, 1, 0, 0]); + expect(enemyField[0].summonData.statStages).toEqual([ 1, 1, 1, 1, 1, 0, 0 ]); expect(encounterTextSpy).toHaveBeenCalledWith(expect.any(BattleScene), `${namespace}:option.2.selected_bad`); }); diff --git a/src/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts b/src/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts index bdf0dc3c307..0dc02e03c6d 100644 --- a/src/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts @@ -22,7 +22,7 @@ import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; const namespace = "mysteryEncounters/bugTypeSuperfan"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.WEEDLE]; +const defaultParty = [ Species.LAPRAS, Species.GENGAR, Species.WEEDLE ]; const defaultBiome = Biome.CAVE; const defaultWave = 24; @@ -169,7 +169,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( new Map([ - [Biome.CAVE, [MysteryEncounterType.BUG_TYPE_SUPERFAN]], + [ Biome.CAVE, [ MysteryEncounterType.BUG_TYPE_SUPERFAN ]], ]) ); }); @@ -405,7 +405,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { }); it("should NOT be selectable if the player doesn't have any Bug types", async () => { - await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, [Species.ABRA]); + await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, [ Species.ABRA ]); await game.phaseInterceptor.to(MysteryEncounterPhase, false); const encounterPhase = scene.getCurrentPhase(); @@ -438,7 +438,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { }); it("should proceed to rewards screen with 2-3 Bug Types reward options", async () => { - await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, [Species.BUTTERFREE, Species.BEEDRILL]); + await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, [ Species.BUTTERFREE, Species.BEEDRILL ]); await runMysteryEncounterToEnd(game, 2); expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); @@ -453,7 +453,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { }); it("should proceed to rewards screen with 4-5 Bug Types reward options", async () => { - await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, [Species.BUTTERFREE, Species.BEEDRILL, Species.GALVANTULA, Species.VOLCARONA]); + await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, [ Species.BUTTERFREE, Species.BEEDRILL, Species.GALVANTULA, Species.VOLCARONA ]); await runMysteryEncounterToEnd(game, 2); expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); @@ -468,7 +468,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { }); it("should proceed to rewards screen with 6 Bug Types reward options (including form change item)", async () => { - await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, [Species.BUTTERFREE, Species.BEEDRILL, Species.GALVANTULA, Species.VOLCARONA, Species.ANORITH, Species.GENESECT]); + await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, [ Species.BUTTERFREE, Species.BEEDRILL, Species.GALVANTULA, Species.VOLCARONA, Species.ANORITH, Species.GENESECT ]); await runMysteryEncounterToEnd(game, 2); expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); @@ -536,8 +536,8 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { }); it("should remove the gifted item and proceed to rewards screen", async () => { - game.override.startingHeldItems([{name: "GRIP_CLAW", count: 1}]); - await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, [Species.BUTTERFREE]); + game.override.startingHeldItems([{ name: "GRIP_CLAW", count: 1 }]); + await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, [ Species.BUTTERFREE ]); const gripClawCountBefore = scene.findModifier(m => m instanceof ContactHeldItemTransferChanceModifier)?.stackCount ?? 0; @@ -557,10 +557,10 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { }); it("should leave encounter without battle", async () => { - game.override.startingHeldItems([{name: "GRIP_CLAW", count: 1}]); + game.override.startingHeldItems([{ name: "GRIP_CLAW", count: 1 }]); const leaveEncounterWithoutBattleSpy = vi.spyOn(encounterPhaseUtils, "leaveEncounterWithoutBattle"); - await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, [Species.BUTTERFREE]); + await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, [ Species.BUTTERFREE ]); await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1 }); expect(leaveEncounterWithoutBattleSpy).toBeCalled(); diff --git a/src/test/mystery-encounter/encounters/clowning-around-encounter.test.ts b/src/test/mystery-encounter/encounters/clowning-around-encounter.test.ts index 80434df2f44..b92a4d96adc 100644 --- a/src/test/mystery-encounter/encounters/clowning-around-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/clowning-around-encounter.test.ts @@ -34,7 +34,7 @@ import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import { NewBattlePhase } from "#app/phases/new-battle-phase"; const namespace = "mysteryEncounters/clowningAround"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; +const defaultParty = [ Species.LAPRAS, Species.GENGAR, Species.ABRA ]; const defaultBiome = Biome.CAVE; const defaultWave = 45; @@ -57,7 +57,7 @@ describe("Clowning Around - Mystery Encounter", () => { vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( new Map([ - [Biome.CAVE, [MysteryEncounterType.CLOWNING_AROUND]], + [ Biome.CAVE, [ MysteryEncounterType.CLOWNING_AROUND ]], ]) ); }); @@ -114,13 +114,13 @@ describe("Clowning Around - Mystery Encounter", () => { expect(config.pokemonConfigs?.[0]).toEqual({ species: getPokemonSpecies(Species.MR_MIME), isBoss: true, - moveSet: [Moves.TEETER_DANCE, Moves.ALLY_SWITCH, Moves.DAZZLING_GLEAM, Moves.PSYCHIC] + moveSet: [ Moves.TEETER_DANCE, Moves.ALLY_SWITCH, Moves.DAZZLING_GLEAM, Moves.PSYCHIC ] }); expect(config.pokemonConfigs?.[1]).toEqual({ species: getPokemonSpecies(Species.BLACEPHALON), mysteryEncounterPokemonData: expect.anything(), isBoss: true, - moveSet: [Moves.TRICK, Moves.HYPNOSIS, Moves.SHADOW_BALL, Moves.MIND_BLOWN] + moveSet: [ Moves.TRICK, Moves.HYPNOSIS, Moves.SHADOW_BALL, Moves.MIND_BLOWN ] }); expect(config.pokemonConfigs?.[1].mysteryEncounterPokemonData?.types.length).toBe(2); expect([ @@ -173,9 +173,9 @@ describe("Clowning Around - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyField.length).toBe(2); expect(enemyField[0].species.speciesId).toBe(Species.MR_MIME); - expect(enemyField[0].moveset).toEqual([new PokemonMove(Moves.TEETER_DANCE), new PokemonMove(Moves.ALLY_SWITCH), new PokemonMove(Moves.DAZZLING_GLEAM), new PokemonMove(Moves.PSYCHIC)]); + expect(enemyField[0].moveset).toEqual([ new PokemonMove(Moves.TEETER_DANCE), new PokemonMove(Moves.ALLY_SWITCH), new PokemonMove(Moves.DAZZLING_GLEAM), new PokemonMove(Moves.PSYCHIC) ]); expect(enemyField[1].species.speciesId).toBe(Species.BLACEPHALON); - expect(enemyField[1].moveset).toEqual([new PokemonMove(Moves.TRICK), new PokemonMove(Moves.HYPNOSIS), new PokemonMove(Moves.SHADOW_BALL), new PokemonMove(Moves.MIND_BLOWN)]); + expect(enemyField[1].moveset).toEqual([ new PokemonMove(Moves.TRICK), new PokemonMove(Moves.HYPNOSIS), new PokemonMove(Moves.SHADOW_BALL), new PokemonMove(Moves.MIND_BLOWN) ]); // Should have used moves pre-battle const movePhases = phaseSpy.mock.calls.filter(p => p[0] instanceof MovePhase).map(p => p[0]); @@ -251,14 +251,14 @@ describe("Clowning Around - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.CLOWNING_AROUND, defaultParty); // Set some moves on party for attack type booster generation - scene.getParty()[0].moveset = [new PokemonMove(Moves.TACKLE), new PokemonMove(Moves.THIEF)]; + scene.getParty()[0].moveset = [ new PokemonMove(Moves.TACKLE), new PokemonMove(Moves.THIEF) ]; // 2 Sitrus Berries on lead scene.modifiers = []; - let itemType = generateModifierType(scene, modifierTypes.BERRY, [BerryType.SITRUS]) as PokemonHeldItemModifierType; + let itemType = generateModifierType(scene, modifierTypes.BERRY, [ BerryType.SITRUS ]) as PokemonHeldItemModifierType; await addItemToPokemon(scene, scene.getParty()[0], 2, itemType); // 2 Ganlon Berries on lead - itemType = generateModifierType(scene, modifierTypes.BERRY, [BerryType.GANLON]) as PokemonHeldItemModifierType; + itemType = generateModifierType(scene, modifierTypes.BERRY, [ BerryType.GANLON ]) as PokemonHeldItemModifierType; await addItemToPokemon(scene, scene.getParty()[0], 2, itemType); // 5 Golden Punch on lead (ultra) itemType = generateModifierType(scene, modifierTypes.GOLDEN_PUNCH) as PokemonHeldItemModifierType; @@ -333,9 +333,9 @@ describe("Clowning Around - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.CLOWNING_AROUND, defaultParty); // Same type moves on lead - scene.getParty()[0].moveset = [new PokemonMove(Moves.ICE_BEAM), new PokemonMove(Moves.SURF)]; + scene.getParty()[0].moveset = [ new PokemonMove(Moves.ICE_BEAM), new PokemonMove(Moves.SURF) ]; // Different type moves on second - scene.getParty()[1].moveset = [new PokemonMove(Moves.GRASS_KNOT), new PokemonMove(Moves.ELECTRO_BALL)]; + scene.getParty()[1].moveset = [ new PokemonMove(Moves.GRASS_KNOT), new PokemonMove(Moves.ELECTRO_BALL) ]; // No moves on third scene.getParty()[2].moveset = []; await runMysteryEncounterToEnd(game, 3); @@ -346,11 +346,11 @@ describe("Clowning Around - Mystery Encounter", () => { expect(leadTypesAfter.length).toBe(2); expect(leadTypesAfter[0]).toBe(Type.WATER); - expect([Type.WATER, Type.ICE].includes(leadTypesAfter[1])).toBeFalsy(); + expect([ Type.WATER, Type.ICE ].includes(leadTypesAfter[1])).toBeFalsy(); expect(secondaryTypesAfter.length).toBe(2); expect(secondaryTypesAfter[0]).toBe(Type.GHOST); - expect([Type.GHOST, Type.POISON].includes(secondaryTypesAfter[1])).toBeFalsy(); - expect([Type.GRASS, Type.ELECTRIC].includes(secondaryTypesAfter[1])).toBeTruthy(); + expect([ Type.GHOST, Type.POISON ].includes(secondaryTypesAfter[1])).toBeFalsy(); + expect([ Type.GRASS, Type.ELECTRIC ].includes(secondaryTypesAfter[1])).toBeTruthy(); expect(thirdTypesAfter.length).toBe(2); expect(thirdTypesAfter[0]).toBe(Type.PSYCHIC); expect(secondaryTypesAfter[1]).not.toBe(Type.PSYCHIC); diff --git a/src/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts b/src/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts index 107bc4f3c67..47625541160 100644 --- a/src/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts @@ -21,7 +21,7 @@ import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import { LearnMovePhase } from "#app/phases/learn-move-phase"; const namespace = "mysteryEncounters/dancingLessons"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; +const defaultParty = [ Species.LAPRAS, Species.GENGAR, Species.ABRA ]; const defaultBiome = Biome.PLAINS; const defaultWave = 45; @@ -44,8 +44,8 @@ describe("Dancing Lessons - Mystery Encounter", () => { vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( new Map([ - [Biome.PLAINS, [MysteryEncounterType.DANCING_LESSONS]], - [Biome.SPACE, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], + [ Biome.PLAINS, [ MysteryEncounterType.DANCING_LESSONS ]], + [ Biome.SPACE, [ MysteryEncounterType.MYSTERIOUS_CHALLENGERS ]], ]) ); }); @@ -107,7 +107,7 @@ describe("Dancing Lessons - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyField.length).toBe(1); expect(enemyField[0].species.speciesId).toBe(Species.ORICORIO); - expect(enemyField[0].summonData.statStages).toEqual([1, 1, 1, 1, 0, 0, 0]); + expect(enemyField[0].summonData.statStages).toEqual([ 1, 1, 1, 1, 0, 0, 0 ]); const moveset = enemyField[0].moveset.map(m => m?.moveId); expect(moveset.some(m => m === Moves.REVELATION_DANCE)).toBeTruthy(); @@ -197,8 +197,8 @@ describe("Dancing Lessons - Mystery Encounter", () => { it("should add Oricorio to the party", async () => { await game.runToMysteryEncounter(MysteryEncounterType.DANCING_LESSONS, defaultParty); const partyCountBefore = scene.getParty().length; - scene.getParty()[0].moveset = [new PokemonMove(Moves.DRAGON_DANCE)]; - await runMysteryEncounterToEnd(game, 3, {pokemonNo: 1, optionNo: 1}); + scene.getParty()[0].moveset = [ new PokemonMove(Moves.DRAGON_DANCE) ]; + await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1 }); const partyCountAfter = scene.getParty().length; expect(partyCountBefore + 1).toBe(partyCountAfter); @@ -236,8 +236,8 @@ describe("Dancing Lessons - Mystery Encounter", () => { const leaveEncounterWithoutBattleSpy = vi.spyOn(EncounterPhaseUtils, "leaveEncounterWithoutBattle"); await game.runToMysteryEncounter(MysteryEncounterType.DANCING_LESSONS, defaultParty); - scene.getParty()[0].moveset = [new PokemonMove(Moves.DRAGON_DANCE)]; - await runMysteryEncounterToEnd(game, 3, {pokemonNo: 1, optionNo: 1}); + scene.getParty()[0].moveset = [ new PokemonMove(Moves.DRAGON_DANCE) ]; + await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1 }); expect(leaveEncounterWithoutBattleSpy).toBeCalled(); }); diff --git a/src/test/mystery-encounter/encounters/delibirdy-encounter.test.ts b/src/test/mystery-encounter/encounters/delibirdy-encounter.test.ts index e7a7c0bd50d..69c0a114645 100644 --- a/src/test/mystery-encounter/encounters/delibirdy-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/delibirdy-encounter.test.ts @@ -18,7 +18,7 @@ import { modifierTypes } from "#app/modifier/modifier-type"; import { BerryType } from "#enums/berry-type"; const namespace = "mysteryEncounters/delibirdy"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; +const defaultParty = [ Species.LAPRAS, Species.GENGAR, Species.ABRA ]; const defaultBiome = Biome.CAVE; const defaultWave = 45; @@ -41,7 +41,7 @@ describe("Delibird-y - Mystery Encounter", () => { vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( new Map([ - [Biome.CAVE, [MysteryEncounterType.DELIBIRDY]], + [ Biome.CAVE, [ MysteryEncounterType.DELIBIRDY ]], ]) ); }); @@ -190,13 +190,13 @@ describe("Delibird-y - Mystery Encounter", () => { // Set 2 Sitrus berries on party lead scene.modifiers = []; - const sitrus = generateModifierType(scene, modifierTypes.BERRY, [BerryType.SITRUS])!; + const sitrus = generateModifierType(scene, modifierTypes.BERRY, [ BerryType.SITRUS ])!; const sitrusMod = sitrus.newModifier(scene.getParty()[0]) as BerryModifier; sitrusMod.stackCount = 2; await scene.addModifier(sitrusMod, true, false, false, true); await scene.updateModifiers(true); - await runMysteryEncounterToEnd(game, 2, { pokemonNo: 1, optionNo: 1}); + await runMysteryEncounterToEnd(game, 2, { pokemonNo: 1, optionNo: 1 }); const sitrusAfter = scene.findModifier(m => m instanceof BerryModifier); const candyJarAfter = scene.findModifier(m => m instanceof LevelIncrementBoosterModifier); @@ -217,7 +217,7 @@ describe("Delibird-y - Mystery Encounter", () => { await scene.addModifier(modifier, true, false, false, true); await scene.updateModifiers(true); - await runMysteryEncounterToEnd(game, 2, { pokemonNo: 1, optionNo: 1}); + await runMysteryEncounterToEnd(game, 2, { pokemonNo: 1, optionNo: 1 }); const reviverSeedAfter = scene.findModifier(m => m instanceof PokemonInstantReviveModifier); const healingCharmAfter = scene.findModifier(m => m instanceof HealingBoosterModifier); @@ -235,7 +235,7 @@ describe("Delibird-y - Mystery Encounter", () => { const candyJar = generateModifierType(scene, modifierTypes.CANDY_JAR)!.newModifier() as LevelIncrementBoosterModifier; candyJar.stackCount = 99; await scene.addModifier(candyJar, true, false, false, true); - const sitrus = generateModifierType(scene, modifierTypes.BERRY, [BerryType.SITRUS])!; + const sitrus = generateModifierType(scene, modifierTypes.BERRY, [ BerryType.SITRUS ])!; // Sitrus berries on party const sitrusMod = sitrus.newModifier(scene.getParty()[0]) as BerryModifier; @@ -243,7 +243,7 @@ describe("Delibird-y - Mystery Encounter", () => { await scene.addModifier(sitrusMod, true, false, false, true); await scene.updateModifiers(true); - await runMysteryEncounterToEnd(game, 2, { pokemonNo: 1, optionNo: 1}); + await runMysteryEncounterToEnd(game, 2, { pokemonNo: 1, optionNo: 1 }); const sitrusAfter = scene.findModifier(m => m instanceof BerryModifier); const candyJarAfter = scene.findModifier(m => m instanceof LevelIncrementBoosterModifier); @@ -272,7 +272,7 @@ describe("Delibird-y - Mystery Encounter", () => { await scene.addModifier(modifier, true, false, false, true); await scene.updateModifiers(true); - await runMysteryEncounterToEnd(game, 2, { pokemonNo: 1, optionNo: 1}); + await runMysteryEncounterToEnd(game, 2, { pokemonNo: 1, optionNo: 1 }); const reviverSeedAfter = scene.findModifier(m => m instanceof PokemonInstantReviveModifier); const healingCharmAfter = scene.findModifier(m => m instanceof HealingBoosterModifier); @@ -324,7 +324,7 @@ describe("Delibird-y - Mystery Encounter", () => { await scene.addModifier(modifier, true, false, false, true); await scene.updateModifiers(true); - await runMysteryEncounterToEnd(game, 2, { pokemonNo: 1, optionNo: 1}); + await runMysteryEncounterToEnd(game, 2, { pokemonNo: 1, optionNo: 1 }); expect(leaveEncounterWithoutBattleSpy).toBeCalled(); }); @@ -358,7 +358,7 @@ describe("Delibird-y - Mystery Encounter", () => { await scene.addModifier(modifier, true, false, false, true); await scene.updateModifiers(true); - await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1}); + await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1 }); const soulDewAfter = scene.findModifier(m => m instanceof PokemonNatureWeightModifier); const berryPouchAfter = scene.findModifier(m => m instanceof PreserveBerryModifier); @@ -379,7 +379,7 @@ describe("Delibird-y - Mystery Encounter", () => { await scene.addModifier(modifier, true, false, false, true); await scene.updateModifiers(true); - await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1}); + await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1 }); const soulDewAfter = scene.findModifier(m => m instanceof PokemonNatureWeightModifier); const berryPouchAfter = scene.findModifier(m => m instanceof PreserveBerryModifier); @@ -405,7 +405,7 @@ describe("Delibird-y - Mystery Encounter", () => { await scene.addModifier(modifier, true, false, false, true); await scene.updateModifiers(true); - await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1}); + await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1 }); const soulDewAfter = scene.findModifier(m => m instanceof PokemonNatureWeightModifier); const berryPouchAfter = scene.findModifier(m => m instanceof PreserveBerryModifier); @@ -458,7 +458,7 @@ describe("Delibird-y - Mystery Encounter", () => { await scene.addModifier(modifier, true, false, false, true); await scene.updateModifiers(true); - await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1}); + await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1 }); expect(leaveEncounterWithoutBattleSpy).toBeCalled(); }); diff --git a/src/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts b/src/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts index e36c103b57d..1869a4d3c3c 100644 --- a/src/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/department-store-sale-encounter.test.ts @@ -16,7 +16,7 @@ import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; const namespace = "mysteryEncounters/departmentStoreSale"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; +const defaultParty = [ Species.LAPRAS, Species.GENGAR, Species.ABRA ]; const defaultBiome = Biome.PLAINS; const defaultWave = 37; @@ -38,10 +38,10 @@ describe("Department Store Sale - Mystery Encounter", () => { game.override.disableTrainerWaves(); const biomeMap = new Map([ - [Biome.VOLCANO, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], + [ Biome.VOLCANO, [ MysteryEncounterType.MYSTERIOUS_CHALLENGERS ]], ]); CIVILIZATION_ENCOUNTER_BIOMES.forEach(biome => { - biomeMap.set(biome, [MysteryEncounterType.DEPARTMENT_STORE_SALE]); + biomeMap.set(biome, [ MysteryEncounterType.DEPARTMENT_STORE_SALE ]); }); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue(biomeMap); }); diff --git a/src/test/mystery-encounter/encounters/field-trip-encounter.test.ts b/src/test/mystery-encounter/encounters/field-trip-encounter.test.ts index d8efd340b63..232bad3c2b8 100644 --- a/src/test/mystery-encounter/encounters/field-trip-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/field-trip-encounter.test.ts @@ -17,7 +17,7 @@ import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import i18next from "i18next"; const namespace = "mysteryEncounters/fieldTrip"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; +const defaultParty = [ Species.LAPRAS, Species.GENGAR, Species.ABRA ]; const defaultBiome = Biome.CAVE; const defaultWave = 45; @@ -37,11 +37,11 @@ describe("Field Trip - Mystery Encounter", () => { game.override.startingWave(defaultWave); game.override.startingBiome(defaultBiome); game.override.disableTrainerWaves(); - game.override.moveset([Moves.TACKLE, Moves.UPROAR, Moves.SWORDS_DANCE]); + game.override.moveset([ Moves.TACKLE, Moves.UPROAR, Moves.SWORDS_DANCE ]); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( new Map([ - [Biome.CAVE, [MysteryEncounterType.FIELD_TRIP]], + [ Biome.CAVE, [ MysteryEncounterType.FIELD_TRIP ]], ]) ); }); diff --git a/src/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts b/src/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts index 24c2e083a72..3d2533c0817 100644 --- a/src/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts @@ -25,7 +25,7 @@ import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; const namespace = "mysteryEncounters/fieryFallout"; /** Arcanine and Ninetails for 2 Fire types. Lapras, Gengar, Abra for burnable mon. */ -const defaultParty = [Species.ARCANINE, Species.NINETALES, Species.LAPRAS, Species.GENGAR, Species.ABRA]; +const defaultParty = [ Species.ARCANINE, Species.NINETALES, Species.LAPRAS, Species.GENGAR, Species.ABRA ]; const defaultBiome = Biome.VOLCANO; const defaultWave = 56; @@ -48,8 +48,8 @@ describe("Fiery Fallout - Mystery Encounter", () => { vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( new Map([ - [Biome.VOLCANO, [MysteryEncounterType.FIERY_FALLOUT]], - [Biome.MOUNTAIN, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], + [ Biome.VOLCANO, [ MysteryEncounterType.FIERY_FALLOUT ]], + [ Biome.MOUNTAIN, [ MysteryEncounterType.MYSTERIOUS_CHALLENGERS ]], ]) ); }); @@ -263,7 +263,7 @@ describe("Fiery Fallout - Mystery Encounter", () => { }); it("should be disabled if not enough FIRE types are in party", async () => { - await game.runToMysteryEncounter(MysteryEncounterType.FIERY_FALLOUT, [Species.MAGIKARP, Species.ARCANINE]); + await game.runToMysteryEncounter(MysteryEncounterType.FIERY_FALLOUT, [ Species.MAGIKARP, Species.ARCANINE ]); await game.phaseInterceptor.to(MysteryEncounterPhase, false); const encounterPhase = scene.getCurrentPhase(); diff --git a/src/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts b/src/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts index 20a84281530..d23e7919267 100644 --- a/src/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/fight-or-flight-encounter.test.ts @@ -20,7 +20,7 @@ import { CommandPhase } from "#app/phases/command-phase"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; const namespace = "mysteryEncounters/fightOrFlight"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; +const defaultParty = [ Species.LAPRAS, Species.GENGAR, Species.ABRA ]; const defaultBiome = Biome.CAVE; const defaultWave = 45; @@ -43,7 +43,7 @@ describe("Fight or Flight - Mystery Encounter", () => { vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( new Map([ - [Biome.CAVE, [MysteryEncounterType.FIGHT_OR_FLIGHT]], + [ Biome.CAVE, [ MysteryEncounterType.FIGHT_OR_FLIGHT ]], ]) ); }); @@ -175,7 +175,7 @@ describe("Fight or Flight - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.FIGHT_OR_FLIGHT, defaultParty); // Mock moveset - scene.getParty()[0].moveset = [new PokemonMove(Moves.KNOCK_OFF)]; + scene.getParty()[0].moveset = [ new PokemonMove(Moves.KNOCK_OFF) ]; const item = game.scene.currentBattle.mysteryEncounter!.misc; await runMysteryEncounterToEnd(game, 2); diff --git a/src/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts b/src/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts index c3fa141f65c..2f4f6bed288 100644 --- a/src/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/fun-and-games-encounter.test.ts @@ -23,7 +23,7 @@ import { Command } from "#app/ui/command-ui-handler"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; const namespace = "mysteryEncounters/funAndGames"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; +const defaultParty = [ Species.LAPRAS, Species.GENGAR, Species.ABRA ]; const defaultBiome = Biome.CAVE; const defaultWave = 45; @@ -45,10 +45,10 @@ describe("Fun And Games! - Mystery Encounter", () => { game.override.disableTrainerWaves(); const biomeMap = new Map([ - [Biome.VOLCANO, [MysteryEncounterType.FIGHT_OR_FLIGHT]], + [ Biome.VOLCANO, [ MysteryEncounterType.FIGHT_OR_FLIGHT ]], ]); HUMAN_TRANSITABLE_BIOMES.forEach(biome => { - biomeMap.set(biome, [MysteryEncounterType.FUN_AND_GAMES]); + biomeMap.set(biome, [ MysteryEncounterType.FUN_AND_GAMES ]); }); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue(biomeMap); }); @@ -137,13 +137,13 @@ describe("Fun And Games! - Mystery Encounter", () => { it("should get 3 turns to attack the Wobbuffet for a reward", async () => { scene.money = 20000; - game.override.moveset([Moves.TACKLE]); + game.override.moveset([ Moves.TACKLE ]); await game.runToMysteryEncounter(MysteryEncounterType.FUN_AND_GAMES, defaultParty); await runMysteryEncounterToEnd(game, 1, { pokemonNo: 1 }, true); expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(scene.getEnemyPokemon()?.species.speciesId).toBe(Species.WOBBUFFET); - expect(scene.getEnemyPokemon()?.ivs).toEqual([0, 0, 0, 0, 0, 0]); + expect(scene.getEnemyPokemon()?.ivs).toEqual([ 0, 0, 0, 0, 0, 0 ]); expect(scene.getEnemyPokemon()?.nature).toBe(Nature.MILD); game.onNextPrompt("MessagePhase", Mode.MESSAGE, () => { @@ -192,7 +192,7 @@ describe("Fun And Games! - Mystery Encounter", () => { it("should have Wide Lens item in rewards if Wubboffet is at 15-33% HP remaining", async () => { scene.money = 20000; - game.override.moveset([Moves.SPLASH]); + game.override.moveset([ Moves.SPLASH ]); await game.runToMysteryEncounter(MysteryEncounterType.FUN_AND_GAMES, defaultParty); await runMysteryEncounterToEnd(game, 1, { pokemonNo: 1 }, true); @@ -220,7 +220,7 @@ describe("Fun And Games! - Mystery Encounter", () => { it("should have Scope Lens item in rewards if Wubboffet is at 3-15% HP remaining", async () => { scene.money = 20000; - game.override.moveset([Moves.SPLASH]); + game.override.moveset([ Moves.SPLASH ]); await game.runToMysteryEncounter(MysteryEncounterType.FUN_AND_GAMES, defaultParty); await runMysteryEncounterToEnd(game, 1, { pokemonNo: 1 }, true); @@ -248,7 +248,7 @@ describe("Fun And Games! - Mystery Encounter", () => { it("should have Multi Lens item in rewards if Wubboffet is at <3% HP remaining", async () => { scene.money = 20000; - game.override.moveset([Moves.SPLASH]); + game.override.moveset([ Moves.SPLASH ]); await game.runToMysteryEncounter(MysteryEncounterType.FUN_AND_GAMES, defaultParty); await runMysteryEncounterToEnd(game, 1, { pokemonNo: 1 }, true); diff --git a/src/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts b/src/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts index 17f6a74e480..b08f8008b68 100644 --- a/src/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/global-trade-system-encounter.test.ts @@ -20,7 +20,7 @@ import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { ModifierTier } from "#app/modifier/modifier-tier"; const namespace = "mysteryEncounters/globalTradeSystem"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; +const defaultParty = [ Species.LAPRAS, Species.GENGAR, Species.ABRA ]; const defaultBiome = Biome.CAVE; const defaultWave = 45; @@ -42,10 +42,10 @@ describe("Global Trade System - Mystery Encounter", () => { game.override.disableTrainerWaves(); const biomeMap = new Map([ - [Biome.VOLCANO, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], + [ Biome.VOLCANO, [ MysteryEncounterType.MYSTERIOUS_CHALLENGERS ]], ]); CIVILIZATION_ENCOUNTER_BIOMES.forEach(biome => { - biomeMap.set(biome, [MysteryEncounterType.GLOBAL_TRADE_SYSTEM]); + biomeMap.set(biome, [ MysteryEncounterType.GLOBAL_TRADE_SYSTEM ]); }); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue(biomeMap); }); @@ -70,7 +70,7 @@ describe("Global Trade System - Mystery Encounter", () => { }); it("should not loop infinitely when generating trade options for extreme BST non-legendaries", async () => { - const extremeBstTeam = [Species.SLAKING, Species.WISHIWASHI, Species.SUNKERN]; + const extremeBstTeam = [ Species.SLAKING, Species.WISHIWASHI, Species.SUNKERN ]; await game.runToMysteryEncounter(MysteryEncounterType.GLOBAL_TRADE_SYSTEM, extremeBstTeam); expect(GlobalTradeSystemEncounter.encounterType).toBe(MysteryEncounterType.GLOBAL_TRADE_SYSTEM); @@ -209,7 +209,7 @@ describe("Global Trade System - Mystery Encounter", () => { await scene.addModifier(modifier, true, false, false, true); await scene.updateModifiers(true); - await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1}); + await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1 }); expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); await game.phaseInterceptor.run(SelectModifierPhase); @@ -234,7 +234,7 @@ describe("Global Trade System - Mystery Encounter", () => { await scene.addModifier(modifier, true, false, false, true); await scene.updateModifiers(true); - await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1}); + await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1 }); expect(leaveEncounterWithoutBattleSpy).toBeCalled(); }); diff --git a/src/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts b/src/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts index bb7a74d6fd0..456c18c572d 100644 --- a/src/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts @@ -18,7 +18,7 @@ import { PartyExpPhase } from "#app/phases/party-exp-phase"; const namespace = "mysteryEncounters/lostAtSea"; /** Blastoise for surf. Pidgeot for fly. Abra for none. */ -const defaultParty = [Species.BLASTOISE, Species.PIDGEOT, Species.ABRA]; +const defaultParty = [ Species.BLASTOISE, Species.PIDGEOT, Species.ABRA ]; const defaultBiome = Biome.SEA; const defaultWave = 33; @@ -41,8 +41,8 @@ describe("Lost at Sea - Mystery Encounter", () => { vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( new Map([ - [Biome.SEA, [MysteryEncounterType.LOST_AT_SEA]], - [Biome.MOUNTAIN, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], + [ Biome.SEA, [ MysteryEncounterType.LOST_AT_SEA ]], + [ Biome.MOUNTAIN, [ MysteryEncounterType.MYSTERIOUS_CHALLENGERS ]], ]) ); }); @@ -134,7 +134,7 @@ describe("Lost at Sea - Mystery Encounter", () => { }); it("should be disabled if no surfable PKM is in party", async () => { - await game.runToMysteryEncounter(MysteryEncounterType.LOST_AT_SEA, [Species.ARCANINE]); + await game.runToMysteryEncounter(MysteryEncounterType.LOST_AT_SEA, [ Species.ARCANINE ]); await game.phaseInterceptor.to(MysteryEncounterPhase, false); const encounterPhase = scene.getCurrentPhase(); @@ -199,7 +199,7 @@ describe("Lost at Sea - Mystery Encounter", () => { }); it("should be disabled if no flyable PKM is in party", async () => { - await game.runToMysteryEncounter(MysteryEncounterType.LOST_AT_SEA, [Species.ARCANINE]); + await game.runToMysteryEncounter(MysteryEncounterType.LOST_AT_SEA, [ Species.ARCANINE ]); await game.phaseInterceptor.to(MysteryEncounterPhase, false); const encounterPhase = scene.getCurrentPhase(); diff --git a/src/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts b/src/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts index b8df60b60ec..7bbc505dd8e 100644 --- a/src/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts @@ -22,7 +22,7 @@ import { CommandPhase } from "#app/phases/command-phase"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; const namespace = "mysteryEncounters/mysteriousChallengers"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; +const defaultParty = [ Species.LAPRAS, Species.GENGAR, Species.ABRA ]; const defaultBiome = Biome.CAVE; const defaultWave = 45; @@ -44,10 +44,10 @@ describe("Mysterious Challengers - Mystery Encounter", () => { game.override.disableTrainerWaves(); const biomeMap = new Map([ - [Biome.VOLCANO, [MysteryEncounterType.FIGHT_OR_FLIGHT]], + [ Biome.VOLCANO, [ MysteryEncounterType.FIGHT_OR_FLIGHT ]], ]); HUMAN_TRANSITABLE_BIOMES.forEach(biome => { - biomeMap.set(biome, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]); + biomeMap.set(biome, [ MysteryEncounterType.MYSTERIOUS_CHALLENGERS ]); }); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue(biomeMap); }); diff --git a/src/test/mystery-encounter/encounters/part-timer-encounter.test.ts b/src/test/mystery-encounter/encounters/part-timer-encounter.test.ts index e359c4fd575..ba8ce648a3f 100644 --- a/src/test/mystery-encounter/encounters/part-timer-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/part-timer-encounter.test.ts @@ -17,7 +17,7 @@ import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; const namespace = "mysteryEncounters/partTimer"; // Pyukumuku for lowest speed, Regieleki for highest speed, Feebas for lowest "bulk", Melmetal for highest "bulk" -const defaultParty = [Species.PYUKUMUKU, Species.REGIELEKI, Species.FEEBAS, Species.MELMETAL]; +const defaultParty = [ Species.PYUKUMUKU, Species.REGIELEKI, Species.FEEBAS, Species.MELMETAL ]; const defaultBiome = Biome.PLAINS; const defaultWave = 37; @@ -39,10 +39,10 @@ describe("Part-Timer - Mystery Encounter", () => { game.override.disableTrainerWaves(); const biomeMap = new Map([ - [Biome.VOLCANO, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], + [ Biome.VOLCANO, [ MysteryEncounterType.MYSTERIOUS_CHALLENGERS ]], ]); CIVILIZATION_ENCOUNTER_BIOMES.forEach(biome => { - biomeMap.set(biome, [MysteryEncounterType.PART_TIMER]); + biomeMap.set(biome, [ MysteryEncounterType.PART_TIMER ]); }); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue(biomeMap); }); @@ -122,7 +122,7 @@ describe("Part-Timer - Mystery Encounter", () => { // Override party levels to 50 so stats can be fully reflective scene.getParty().forEach(p => { p.level = 50; - p.ivs = [20, 20, 20, 20, 20, 20]; + p.ivs = [ 20, 20, 20, 20, 20, 20 ]; p.calculateStats(); }); await runMysteryEncounterToEnd(game, 1, { pokemonNo: 2 }); @@ -187,7 +187,7 @@ describe("Part-Timer - Mystery Encounter", () => { // Override party levels to 50 so stats can be fully reflective scene.getParty().forEach(p => { p.level = 50; - p.ivs = [20, 20, 20, 20, 20, 20]; + p.ivs = [ 20, 20, 20, 20, 20, 20 ]; p.calculateStats(); }); await runMysteryEncounterToEnd(game, 2, { pokemonNo: 4 }); @@ -256,7 +256,7 @@ describe("Part-Timer - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.PART_TIMER, defaultParty); // Mock moveset - scene.getParty()[0].moveset = [new PokemonMove(Moves.ATTRACT)]; + scene.getParty()[0].moveset = [ new PokemonMove(Moves.ATTRACT) ]; await runMysteryEncounterToEnd(game, 3); expect(EncounterPhaseUtils.updatePlayerMoney).toHaveBeenCalledWith(scene, scene.getWaveMoneyAmount(2.5), true, false); diff --git a/src/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts b/src/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts index b12452f0a77..2411752baa7 100644 --- a/src/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts @@ -18,11 +18,11 @@ import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; import { Abilities } from "#app/enums/abilities"; const namespace = "mysteryEncounters/teleportingHijinks"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; +const defaultParty = [ Species.LAPRAS, Species.GENGAR, Species.ABRA ]; const defaultBiome = Biome.CAVE; const defaultWave = 45; -const TRANSPORT_BIOMES = [Biome.SPACE, Biome.ISLAND, Biome.LABORATORY, Biome.FAIRY_CAVE, Biome.WASTELAND, Biome.DOJO]; +const TRANSPORT_BIOMES = [ Biome.SPACE, Biome.ISLAND, Biome.LABORATORY, Biome.FAIRY_CAVE, Biome.WASTELAND, Biome.DOJO ]; describe("Teleporting Hijinks - Mystery Encounter", () => { let phaserGame: Phaser.Game; @@ -47,7 +47,7 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( new Map([ - [Biome.CAVE, [MysteryEncounterType.TELEPORTING_HIJINKS]], + [ Biome.CAVE, [ MysteryEncounterType.TELEPORTING_HIJINKS ]], ]) ); }); @@ -180,7 +180,7 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.TELEPORTING_HIJINKS, defaultParty); await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyField = scene.getEnemyField(); - expect(enemyField[0].summonData.statStages).toEqual([0, 1, 0, 1, 1, 0, 0]); + expect(enemyField[0].summonData.statStages).toEqual([ 0, 1, 0, 1, 1, 0, 0 ]); expect(enemyField[0].isBoss()).toBe(true); }); @@ -189,7 +189,7 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.TELEPORTING_HIJINKS, defaultParty); await runMysteryEncounterToEnd(game, 1, undefined, true); const enemyField = scene.getEnemyField(); - expect(enemyField[0].summonData.statStages).toEqual([1, 1, 1, 1, 1, 0, 0]); + expect(enemyField[0].summonData.statStages).toEqual([ 1, 1, 1, 1, 1, 0, 0 ]); expect(enemyField[0].isBoss()).toBe(true); }); }); @@ -212,7 +212,7 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { }); it("should NOT be selectable if the player doesn't the right type pokemon", async () => { - await game.runToMysteryEncounter(MysteryEncounterType.TELEPORTING_HIJINKS, [Species.BLASTOISE]); + await game.runToMysteryEncounter(MysteryEncounterType.TELEPORTING_HIJINKS, [ Species.BLASTOISE ]); await game.phaseInterceptor.to(MysteryEncounterPhase, false); const encounterPhase = scene.getCurrentPhase(); @@ -231,14 +231,14 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { }); it("should be selectable if the player has the right type pokemon", async () => { - await game.runToMysteryEncounter(MysteryEncounterType.TELEPORTING_HIJINKS, [Species.METAGROSS]); + await game.runToMysteryEncounter(MysteryEncounterType.TELEPORTING_HIJINKS, [ Species.METAGROSS ]); await runMysteryEncounterToEnd(game, 2, undefined, true); expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); }); it("should transport to a new area", async () => { - await game.runToMysteryEncounter(MysteryEncounterType.TELEPORTING_HIJINKS, [Species.PIKACHU]); + await game.runToMysteryEncounter(MysteryEncounterType.TELEPORTING_HIJINKS, [ Species.PIKACHU ]); const previousBiome = scene.arena.biomeType; @@ -249,19 +249,19 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { }); it("should start a battle against an enraged boss below wave 50", async () => { - await game.runToMysteryEncounter(MysteryEncounterType.TELEPORTING_HIJINKS, [Species.PIKACHU]); + await game.runToMysteryEncounter(MysteryEncounterType.TELEPORTING_HIJINKS, [ Species.PIKACHU ]); await runMysteryEncounterToEnd(game, 2, undefined, true); const enemyField = scene.getEnemyField(); - expect(enemyField[0].summonData.statStages).toEqual([0, 1, 0, 1, 1, 0, 0]); + expect(enemyField[0].summonData.statStages).toEqual([ 0, 1, 0, 1, 1, 0, 0 ]); expect(enemyField[0].isBoss()).toBe(true); }); it("should start a battle against an extra enraged boss above wave 50", { retry: 5 }, async () => { game.override.startingWave(56); - await game.runToMysteryEncounter(MysteryEncounterType.TELEPORTING_HIJINKS, [Species.PIKACHU]); + await game.runToMysteryEncounter(MysteryEncounterType.TELEPORTING_HIJINKS, [ Species.PIKACHU ]); await runMysteryEncounterToEnd(game, 2, undefined, true); const enemyField = scene.getEnemyField(); - expect(enemyField[0].summonData.statStages).toEqual([1, 1, 1, 1, 1, 0, 0]); + expect(enemyField[0].summonData.statStages).toEqual([ 1, 1, 1, 1, 1, 0, 0 ]); expect(enemyField[0].isBoss()).toBe(true); }); }); @@ -286,7 +286,7 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.TELEPORTING_HIJINKS, defaultParty); await runMysteryEncounterToEnd(game, 3, undefined, true); const enemyField = scene.getEnemyField(); - expect(enemyField[0].summonData.statStages).toEqual([0, 0, 0, 0, 0, 0, 0]); + expect(enemyField[0].summonData.statStages).toEqual([ 0, 0, 0, 0, 0, 0, 0 ]); expect(enemyField[0].isBoss()).toBe(true); }); diff --git a/src/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts b/src/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts index a0120522fd2..7e445ac1fe2 100644 --- a/src/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts @@ -20,7 +20,7 @@ import { EggTier } from "#enums/egg-type"; import { PostMysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; const namespace = "mysteryEncounters/theExpertPokemonBreeder"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; +const defaultParty = [ Species.LAPRAS, Species.GENGAR, Species.ABRA ]; const defaultBiome = Biome.CAVE; const defaultWave = 45; @@ -42,10 +42,10 @@ describe("The Expert Pokémon Breeder - Mystery Encounter", () => { game.override.disableTrainerWaves(); const biomeMap = new Map([ - [Biome.VOLCANO, [MysteryEncounterType.FIGHT_OR_FLIGHT]], + [ Biome.VOLCANO, [ MysteryEncounterType.FIGHT_OR_FLIGHT ]], ]); HUMAN_TRANSITABLE_BIOMES.forEach(biome => { - biomeMap.set(biome, [MysteryEncounterType.THE_EXPERT_POKEMON_BREEDER]); + biomeMap.set(biome, [ MysteryEncounterType.THE_EXPERT_POKEMON_BREEDER ]); }); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue(biomeMap); }); diff --git a/src/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts b/src/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts index 24994b61b83..f8d1ffd3ded 100644 --- a/src/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts @@ -16,7 +16,7 @@ import { initSceneWithoutEncounterPhase } from "#test/utils/gameManagerUtils"; import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; const namespace = "mysteryEncounters/thePokemonSalesman"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; +const defaultParty = [ Species.LAPRAS, Species.GENGAR, Species.ABRA ]; const defaultBiome = Biome.CAVE; const defaultWave = 45; @@ -38,10 +38,10 @@ describe("The Pokemon Salesman - Mystery Encounter", () => { game.override.disableTrainerWaves(); const biomeMap = new Map([ - [Biome.VOLCANO, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], + [ Biome.VOLCANO, [ MysteryEncounterType.MYSTERIOUS_CHALLENGERS ]], ]); HUMAN_TRANSITABLE_BIOMES.forEach(biome => { - biomeMap.set(biome, [MysteryEncounterType.THE_POKEMON_SALESMAN]); + biomeMap.set(biome, [ MysteryEncounterType.THE_POKEMON_SALESMAN ]); }); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue(biomeMap); }); diff --git a/src/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts b/src/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts index 3df2f35f02b..f64124790b7 100644 --- a/src/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts @@ -28,7 +28,7 @@ import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import { Abilities } from "#app/enums/abilities"; const namespace = "mysteryEncounters/theStrongStuff"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; +const defaultParty = [ Species.LAPRAS, Species.GENGAR, Species.ABRA ]; const defaultBiome = Biome.CAVE; const defaultWave = 45; @@ -54,8 +54,8 @@ describe("The Strong Stuff - Mystery Encounter", () => { vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( new Map([ - [Biome.CAVE, [MysteryEncounterType.THE_STRONG_STUFF]], - [Biome.MOUNTAIN, [MysteryEncounterType.MYSTERIOUS_CHALLENGERS]], + [ Biome.CAVE, [ MysteryEncounterType.THE_STRONG_STUFF ]], + [ Biome.MOUNTAIN, [ MysteryEncounterType.MYSTERIOUS_CHALLENGERS ]], ]) ); }); @@ -111,9 +111,9 @@ describe("The Strong Stuff - Mystery Encounter", () => { bossSegments: 5, mysteryEncounterPokemonData: new MysteryEncounterPokemonData({ spriteScale: 1.25 }), nature: Nature.BOLD, - moveSet: [Moves.INFESTATION, Moves.SALT_CURE, Moves.GASTRO_ACID, Moves.HEAL_ORDER], + moveSet: [ Moves.INFESTATION, Moves.SALT_CURE, Moves.GASTRO_ACID, Moves.HEAL_ORDER ], modifierConfigs: expect.any(Array), - tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON], + tags: [ BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON ], mysteryEncounterBattleEffects: expect.any(Function) } ], @@ -194,7 +194,7 @@ describe("The Strong Stuff - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyField.length).toBe(1); expect(enemyField[0].species.speciesId).toBe(Species.SHUCKLE); - expect(enemyField[0].summonData.statStages).toEqual([0, 2, 0, 2, 0, 0, 0]); + expect(enemyField[0].summonData.statStages).toEqual([ 0, 2, 0, 2, 0, 0, 0 ]); const shuckleItems = enemyField[0].getHeldItems(); expect(shuckleItems.length).toBe(5); expect(shuckleItems.find(m => m instanceof BerryModifier && m.berryType === BerryType.SITRUS)?.stackCount).toBe(1); @@ -202,7 +202,7 @@ describe("The Strong Stuff - Mystery Encounter", () => { expect(shuckleItems.find(m => m instanceof BerryModifier && m.berryType === BerryType.GANLON)?.stackCount).toBe(1); expect(shuckleItems.find(m => m instanceof BerryModifier && m.berryType === BerryType.APICOT)?.stackCount).toBe(1); expect(shuckleItems.find(m => m instanceof BerryModifier && m.berryType === BerryType.LUM)?.stackCount).toBe(2); - expect(enemyField[0].moveset).toEqual([new PokemonMove(Moves.INFESTATION), new PokemonMove(Moves.SALT_CURE), new PokemonMove(Moves.GASTRO_ACID), new PokemonMove(Moves.HEAL_ORDER)]); + expect(enemyField[0].moveset).toEqual([ new PokemonMove(Moves.INFESTATION), new PokemonMove(Moves.SALT_CURE), new PokemonMove(Moves.GASTRO_ACID), new PokemonMove(Moves.HEAL_ORDER) ]); // Should have used moves pre-battle const movePhases = phaseSpy.mock.calls.filter(p => p[0] instanceof MovePhase).map(p => p[0]); diff --git a/src/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts b/src/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts index 93f01200203..2653b76ab7c 100644 --- a/src/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/the-winstrate-challenge-encounter.test.ts @@ -27,7 +27,7 @@ import { PartyHealPhase } from "#app/phases/party-heal-phase"; import { VictoryPhase } from "#app/phases/victory-phase"; const namespace = "mysteryEncounters/theWinstrateChallenge"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; +const defaultParty = [ Species.LAPRAS, Species.GENGAR, Species.ABRA ]; const defaultBiome = Biome.CAVE; const defaultWave = 45; @@ -49,10 +49,10 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { game.override.disableTrainerWaves(); const biomeMap = new Map([ - [Biome.VOLCANO, [MysteryEncounterType.FIGHT_OR_FLIGHT]], + [ Biome.VOLCANO, [ MysteryEncounterType.FIGHT_OR_FLIGHT ]], ]); HUMAN_TRANSITABLE_BIOMES.forEach(biome => { - biomeMap.set(biome, [MysteryEncounterType.THE_WINSTRATE_CHALLENGE]); + biomeMap.set(biome, [ MysteryEncounterType.THE_WINSTRATE_CHALLENGE ]); }); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue(biomeMap); }); @@ -114,7 +114,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { isBoss: false, abilityIndex: 0, // Soundproof nature: Nature.MODEST, - moveSet: [Moves.THUNDERBOLT, Moves.GIGA_DRAIN, Moves.FOUL_PLAY, Moves.THUNDER_WAVE], + moveSet: [ Moves.THUNDERBOLT, Moves.GIGA_DRAIN, Moves.FOUL_PLAY, Moves.THUNDER_WAVE ], modifierConfigs: expect.any(Array) }, { @@ -122,7 +122,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { isBoss: false, abilityIndex: 2, // Gluttony nature: Nature.QUIET, - moveSet: [Moves.SLUDGE_BOMB, Moves.GIGA_DRAIN, Moves.ICE_BEAM, Moves.EARTHQUAKE], + moveSet: [ Moves.SLUDGE_BOMB, Moves.GIGA_DRAIN, Moves.ICE_BEAM, Moves.EARTHQUAKE ], modifierConfigs: expect.any(Array) }, { @@ -130,7 +130,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { isBoss: false, abilityIndex: 2, // Tangled Feet nature: Nature.JOLLY, - moveSet: [Moves.DRILL_PECK, Moves.QUICK_ATTACK, Moves.THRASH, Moves.KNOCK_OFF], + moveSet: [ Moves.DRILL_PECK, Moves.QUICK_ATTACK, Moves.THRASH, Moves.KNOCK_OFF ], modifierConfigs: expect.any(Array) }, { @@ -138,7 +138,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { isBoss: false, formIndex: 1, nature: Nature.BOLD, - moveSet: [Moves.PSYCHIC, Moves.SHADOW_BALL, Moves.FOCUS_BLAST, Moves.THUNDERBOLT], + moveSet: [ Moves.PSYCHIC, Moves.SHADOW_BALL, Moves.FOCUS_BLAST, Moves.THUNDERBOLT ], modifierConfigs: expect.any(Array) }, { @@ -146,7 +146,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { isBoss: false, abilityIndex: 0, // Sheer Force nature: Nature.IMPISH, - moveSet: [Moves.EARTHQUAKE, Moves.U_TURN, Moves.FLARE_BLITZ, Moves.ROCK_SLIDE], + moveSet: [ Moves.EARTHQUAKE, Moves.U_TURN, Moves.FLARE_BLITZ, Moves.ROCK_SLIDE ], modifierConfigs: expect.any(Array) } ] @@ -159,7 +159,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { isBoss: false, formIndex: 1, nature: Nature.IMPISH, - moveSet: [Moves.AXE_KICK, Moves.ICE_PUNCH, Moves.ZEN_HEADBUTT, Moves.BULLET_PUNCH], + moveSet: [ Moves.AXE_KICK, Moves.ICE_PUNCH, Moves.ZEN_HEADBUTT, Moves.BULLET_PUNCH ], modifierConfigs: expect.any(Array) } ] @@ -172,7 +172,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { isBoss: false, abilityIndex: 3, // Lightning Rod nature: Nature.ADAMANT, - moveSet: [Moves.WATERFALL, Moves.MEGAHORN, Moves.KNOCK_OFF, Moves.REST], + moveSet: [ Moves.WATERFALL, Moves.MEGAHORN, Moves.KNOCK_OFF, Moves.REST ], modifierConfigs: expect.any(Array) }, { @@ -180,7 +180,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { isBoss: false, abilityIndex: 1, // Poison Heal nature: Nature.JOLLY, - moveSet: [Moves.SPORE, Moves.SWORDS_DANCE, Moves.SEED_BOMB, Moves.DRAIN_PUNCH], + moveSet: [ Moves.SPORE, Moves.SWORDS_DANCE, Moves.SEED_BOMB, Moves.DRAIN_PUNCH ], modifierConfigs: expect.any(Array) }, { @@ -188,7 +188,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { isBoss: false, formIndex: 1, nature: Nature.CALM, - moveSet: [Moves.EARTH_POWER, Moves.FIRE_BLAST, Moves.YAWN, Moves.PROTECT], + moveSet: [ Moves.EARTH_POWER, Moves.FIRE_BLAST, Moves.YAWN, Moves.PROTECT ], modifierConfigs: expect.any(Array) } ] @@ -201,7 +201,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { isBoss: false, abilityIndex: 0, // Natural Cure nature: Nature.CALM, - moveSet: [Moves.SYNTHESIS, Moves.SLUDGE_BOMB, Moves.GIGA_DRAIN, Moves.SLEEP_POWDER], + moveSet: [ Moves.SYNTHESIS, Moves.SLUDGE_BOMB, Moves.GIGA_DRAIN, Moves.SLEEP_POWDER ], modifierConfigs: expect.any(Array) }, { @@ -209,7 +209,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { isBoss: false, formIndex: 1, nature: Nature.TIMID, - moveSet: [Moves.PSYSHOCK, Moves.MOONBLAST, Moves.SHADOW_BALL, Moves.WILL_O_WISP], + moveSet: [ Moves.PSYSHOCK, Moves.MOONBLAST, Moves.SHADOW_BALL, Moves.WILL_O_WISP ], modifierConfigs: expect.any(Array) } ] @@ -222,7 +222,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { isBoss: false, abilityIndex: 0, // Guts nature: Nature.ADAMANT, - moveSet: [Moves.FACADE, Moves.BRAVE_BIRD, Moves.PROTECT, Moves.QUICK_ATTACK], + moveSet: [ Moves.FACADE, Moves.BRAVE_BIRD, Moves.PROTECT, Moves.QUICK_ATTACK ], modifierConfigs: expect.any(Array) }, { @@ -230,7 +230,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => { isBoss: false, abilityIndex: 1, // Guts nature: Nature.ADAMANT, - moveSet: [Moves.FACADE, Moves.OBSTRUCT, Moves.NIGHT_SLASH, Moves.FIRE_PUNCH], + moveSet: [ Moves.FACADE, Moves.OBSTRUCT, Moves.NIGHT_SLASH, Moves.FIRE_PUNCH ], modifierConfigs: expect.any(Array) } ] diff --git a/src/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts b/src/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts index 7e92d17ba25..d761f2d1b21 100644 --- a/src/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts @@ -24,7 +24,7 @@ import { CommandPhase } from "#app/phases/command-phase"; import { MovePhase } from "#app/phases/move-phase"; const namespace = "mysteryEncounters/trashToTreasure"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; +const defaultParty = [ Species.LAPRAS, Species.GENGAR, Species.ABRA ]; const defaultBiome = Biome.CAVE; const defaultWave = 45; @@ -47,7 +47,7 @@ describe("Trash to Treasure - Mystery Encounter", () => { vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( new Map([ - [Biome.CAVE, [MysteryEncounterType.TRASH_TO_TREASURE]], + [ Biome.CAVE, [ MysteryEncounterType.TRASH_TO_TREASURE ]], ]) ); }); @@ -94,7 +94,7 @@ describe("Trash to Treasure - Mystery Encounter", () => { isBoss: true, formIndex: 1, bossSegmentModifier: 1, - moveSet: [Moves.PAYBACK, Moves.GUNK_SHOT, Moves.STOMPING_TANTRUM, Moves.DRAIN_PUNCH], + moveSet: [ Moves.PAYBACK, Moves.GUNK_SHOT, Moves.STOMPING_TANTRUM, Moves.DRAIN_PUNCH ], } ], } @@ -175,7 +175,7 @@ describe("Trash to Treasure - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyField.length).toBe(1); expect(enemyField[0].species.speciesId).toBe(Species.GARBODOR); - expect(enemyField[0].moveset).toEqual([new PokemonMove(Moves.PAYBACK), new PokemonMove(Moves.GUNK_SHOT), new PokemonMove(Moves.STOMPING_TANTRUM), new PokemonMove(Moves.DRAIN_PUNCH)]); + expect(enemyField[0].moveset).toEqual([ new PokemonMove(Moves.PAYBACK), new PokemonMove(Moves.GUNK_SHOT), new PokemonMove(Moves.STOMPING_TANTRUM), new PokemonMove(Moves.DRAIN_PUNCH) ]); // Should have used moves pre-battle const movePhases = phaseSpy.mock.calls.filter(p => p[0] instanceof MovePhase).map(p => p[0]); diff --git a/src/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts b/src/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts index fa3c97b56ce..fa1b5ecdeb7 100644 --- a/src/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/uncommon-breed-encounter.test.ts @@ -27,7 +27,7 @@ import { modifierTypes } from "#app/modifier/modifier-type"; import { Abilities } from "#enums/abilities"; const namespace = "mysteryEncounters/uncommonBreed"; -const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; +const defaultParty = [ Species.LAPRAS, Species.GENGAR, Species.ABRA ]; const defaultBiome = Biome.CAVE; const defaultWave = 45; @@ -53,7 +53,7 @@ describe("Uncommon Breed - Mystery Encounter", () => { vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( new Map([ - [Biome.CAVE, [MysteryEncounterType.UNCOMMON_BREED]], + [ Biome.CAVE, [ MysteryEncounterType.UNCOMMON_BREED ]], ]) ); }); @@ -126,7 +126,7 @@ describe("Uncommon Breed - Mystery Encounter", () => { expect(enemyField[0].species.speciesId).toBe(speciesToSpawn); const statStagePhases = unshiftPhaseSpy.mock.calls.filter(p => p[0] instanceof StatStageChangePhase)[0][0] as any; - expect(statStagePhases.stats).toEqual([Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD]); + expect(statStagePhases.stats).toEqual([ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ]); // Should have used its egg move pre-battle const movePhases = phaseSpy.mock.calls.filter(p => p[0] instanceof MovePhase).map(p => p[0]); @@ -153,7 +153,7 @@ describe("Uncommon Breed - Mystery Encounter", () => { expect(enemyField[0].species.speciesId).toBe(speciesToSpawn); const statStagePhases = unshiftPhaseSpy.mock.calls.filter(p => p[0] instanceof StatStageChangePhase)[0][0] as any; - expect(statStagePhases.stats).toEqual([Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD]); + expect(statStagePhases.stats).toEqual([ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ]); // Should have used its egg move pre-battle const movePhases = phaseSpy.mock.calls.filter(p => p[0] instanceof MovePhase).map(p => p[0]); @@ -213,11 +213,11 @@ describe("Uncommon Breed - Mystery Encounter", () => { await game.runToMysteryEncounter(MysteryEncounterType.UNCOMMON_BREED, defaultParty); // Berries on party lead - const sitrus = generateModifierType(scene, modifierTypes.BERRY, [BerryType.SITRUS])!; + const sitrus = generateModifierType(scene, modifierTypes.BERRY, [ BerryType.SITRUS ])!; const sitrusMod = sitrus.newModifier(scene.getParty()[0]) as BerryModifier; sitrusMod.stackCount = 2; await scene.addModifier(sitrusMod, true, false, false, true); - const ganlon = generateModifierType(scene, modifierTypes.BERRY, [BerryType.GANLON])!; + const ganlon = generateModifierType(scene, modifierTypes.BERRY, [ BerryType.GANLON ])!; const ganlonMod = ganlon.newModifier(scene.getParty()[0]) as BerryModifier; ganlonMod.stackCount = 3; await scene.addModifier(ganlonMod, true, false, false, true); @@ -270,7 +270,7 @@ describe("Uncommon Breed - Mystery Encounter", () => { const leaveEncounterWithoutBattleSpy = vi.spyOn(EncounterPhaseUtils, "leaveEncounterWithoutBattle"); await game.runToMysteryEncounter(MysteryEncounterType.UNCOMMON_BREED, defaultParty); // Mock moveset - scene.getParty()[0].moveset = [new PokemonMove(Moves.CHARM)]; + scene.getParty()[0].moveset = [ new PokemonMove(Moves.CHARM) ]; await runMysteryEncounterToEnd(game, 3); expect(leaveEncounterWithoutBattleSpy).toBeCalled(); diff --git a/src/test/mystery-encounter/encounters/weird-dream-encounter.test.ts b/src/test/mystery-encounter/encounters/weird-dream-encounter.test.ts index fdf9634e383..f4d055c69aa 100644 --- a/src/test/mystery-encounter/encounters/weird-dream-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/weird-dream-encounter.test.ts @@ -17,7 +17,7 @@ import * as EncounterTransformationSequence from "#app/data/mystery-encounters/u import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; const namespace = "mysteryEncounters/weirdDream"; -const defaultParty = [Species.MAGBY, Species.HAUNTER, Species.ABRA]; +const defaultParty = [ Species.MAGBY, Species.HAUNTER, Species.ABRA ]; const defaultBiome = Biome.CAVE; const defaultWave = 45; @@ -41,7 +41,7 @@ describe("Weird Dream - Mystery Encounter", () => { vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( new Map([ - [Biome.CAVE, [MysteryEncounterType.WEIRD_DREAM]], + [ Biome.CAVE, [ MysteryEncounterType.WEIRD_DREAM ]], ]) ); }); diff --git a/src/test/mystery-encounter/mystery-encounter-utils.test.ts b/src/test/mystery-encounter/mystery-encounter-utils.test.ts index 7541379be07..134966a188d 100644 --- a/src/test/mystery-encounter/mystery-encounter-utils.test.ts +++ b/src/test/mystery-encounter/mystery-encounter-utils.test.ts @@ -31,7 +31,7 @@ describe("Mystery Encounter Utils", () => { beforeEach(() => { game = new GameManager(phaserGame); scene = game.scene; - initSceneWithoutEncounterPhase(game.scene, [Species.ARCEUS, Species.MANAPHY]); + initSceneWithoutEncounterPhase(game.scene, [ Species.ARCEUS, Species.MANAPHY ]); }); describe("getRandomPlayerPokemon", () => { @@ -214,7 +214,7 @@ describe("Mystery Encounter Utils", () => { }); it("gets species for a starter tier range", () => { - const result = getRandomSpeciesByStarterTier([5, 8]); + const result = getRandomSpeciesByStarterTier([ 5, 8 ]); const pokeSpecies = getPokemonSpecies(result); expect(pokeSpecies.speciesId).toBe(result); @@ -224,14 +224,14 @@ describe("Mystery Encounter Utils", () => { it("excludes species from search", () => { // Only 9 tiers are: Koraidon, Miraidon, Arceus, Rayquaza, Kyogre, Groudon, Zacian - const result = getRandomSpeciesByStarterTier(9, [Species.KORAIDON, Species.MIRAIDON, Species.ARCEUS, Species.RAYQUAZA, Species.KYOGRE, Species.GROUDON]); + const result = getRandomSpeciesByStarterTier(9, [ Species.KORAIDON, Species.MIRAIDON, Species.ARCEUS, Species.RAYQUAZA, Species.KYOGRE, Species.GROUDON ]); const pokeSpecies = getPokemonSpecies(result); expect(pokeSpecies.speciesId).toBe(Species.ZACIAN); }); it("gets species of specified types", () => { // Only 9 tiers are: Koraidon, Miraidon, Arceus, Rayquaza, Kyogre, Groudon, Zacian - const result = getRandomSpeciesByStarterTier(9, undefined, [Type.GROUND]); + const result = getRandomSpeciesByStarterTier(9, undefined, [ Type.GROUND ]); const pokeSpecies = getPokemonSpecies(result); expect(pokeSpecies.speciesId).toBe(Species.GROUDON); }); diff --git a/src/test/mystery-encounter/mystery-encounter.test.ts b/src/test/mystery-encounter/mystery-encounter.test.ts index 38c999f8aac..eaf6e04a639 100644 --- a/src/test/mystery-encounter/mystery-encounter.test.ts +++ b/src/test/mystery-encounter/mystery-encounter.test.ts @@ -29,7 +29,7 @@ describe("Mystery Encounters", () => { }); it("Spawns a mystery encounter", async () => { - await game.runToMysteryEncounter(MysteryEncounterType.MYSTERIOUS_CHALLENGERS, [Species.CHARIZARD, Species.VOLCARONA]); + await game.runToMysteryEncounter(MysteryEncounterType.MYSTERIOUS_CHALLENGERS, [ Species.CHARIZARD, Species.VOLCARONA ]); await game.phaseInterceptor.to(MysteryEncounterPhase, false); expect(game.scene.getCurrentPhase()!.constructor.name).toBe(MysteryEncounterPhase.name); diff --git a/src/test/phases/learn-move-phase.test.ts b/src/test/phases/learn-move-phase.test.ts index 60cdbee8570..c4fa0e8bf45 100644 --- a/src/test/phases/learn-move-phase.test.ts +++ b/src/test/phases/learn-move-phase.test.ts @@ -25,8 +25,8 @@ describe("Learn Move Phase", () => { }); it("If Pokemon has less than 4 moves, its newest move will be added to the lowest empty index", async () => { - game.override.moveset([Moves.SPLASH]); - await game.startBattle([Species.BULBASAUR]); + game.override.moveset([ Moves.SPLASH ]); + await game.startBattle([ Species.BULBASAUR ]); const pokemon = game.scene.getPlayerPokemon()!; const newMovePos = pokemon?.getMoveset().length; game.move.select(Moves.SPLASH); diff --git a/src/test/phases/mystery-encounter-phase.test.ts b/src/test/phases/mystery-encounter-phase.test.ts index 76b0bd5a905..4468045756b 100644 --- a/src/test/phases/mystery-encounter-phase.test.ts +++ b/src/test/phases/mystery-encounter-phase.test.ts @@ -1,12 +1,12 @@ -import {afterEach, beforeAll, beforeEach, expect, describe, it, vi } from "vitest"; +import { afterEach, beforeAll, beforeEach, expect, describe, it, vi } from "vitest"; import GameManager from "#app/test/utils/gameManager"; import Phaser from "phaser"; -import {Species} from "#enums/species"; +import { Species } from "#enums/species"; import { MysteryEncounterOptionSelectedPhase, MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; -import {Mode} from "#app/ui/ui"; -import {Button} from "#enums/buttons"; +import { Mode } from "#app/ui/ui"; +import { Button } from "#enums/buttons"; import MysteryEncounterUiHandler from "#app/ui/mystery-encounter-ui-handler"; -import {MysteryEncounterType} from "#enums/mystery-encounter-type"; +import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import MessageUiHandler from "#app/ui/message-ui-handler"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; @@ -34,14 +34,14 @@ describe("Mystery Encounter Phases", () => { describe("MysteryEncounterPhase", () => { it("Runs to MysteryEncounterPhase", async() => { - await game.runToMysteryEncounter(MysteryEncounterType.MYSTERIOUS_CHALLENGERS, [Species.CHARIZARD, Species.VOLCARONA]); + await game.runToMysteryEncounter(MysteryEncounterType.MYSTERIOUS_CHALLENGERS, [ Species.CHARIZARD, Species.VOLCARONA ]); await game.phaseInterceptor.to(MysteryEncounterPhase, false); expect(game.scene.getCurrentPhase()?.constructor.name).toBe(MysteryEncounterPhase.name); }); it("Runs MysteryEncounterPhase", async() => { - await game.runToMysteryEncounter(MysteryEncounterType.MYSTERIOUS_CHALLENGERS, [Species.CHARIZARD, Species.VOLCARONA]); + await game.runToMysteryEncounter(MysteryEncounterType.MYSTERIOUS_CHALLENGERS, [ Species.CHARIZARD, Species.VOLCARONA ]); game.onNextPrompt("MysteryEncounterPhase", Mode.MYSTERY_ENCOUNTER, () => { // End phase early for test @@ -59,7 +59,7 @@ describe("Mystery Encounter Phases", () => { const { ui } = game.scene; vi.spyOn(ui, "showDialogue"); vi.spyOn(ui, "showText"); - await game.runToMysteryEncounter(MysteryEncounterType.MYSTERIOUS_CHALLENGERS, [Species.CHARIZARD, Species.VOLCARONA]); + await game.runToMysteryEncounter(MysteryEncounterType.MYSTERIOUS_CHALLENGERS, [ Species.CHARIZARD, Species.VOLCARONA ]); game.onNextPrompt("MysteryEncounterPhase", Mode.MESSAGE, () => { const handler = game.scene.ui.getHandler() as MessageUiHandler; diff --git a/src/test/phases/select-modifier-phase.test.ts b/src/test/phases/select-modifier-phase.test.ts index d946c850ae3..ea50c7e6524 100644 --- a/src/test/phases/select-modifier-phase.test.ts +++ b/src/test/phases/select-modifier-phase.test.ts @@ -28,7 +28,7 @@ describe("SelectModifierPhase", () => { game = new GameManager(phaserGame); scene = game.scene; - initSceneWithoutEncounterPhase(scene, [Species.ABRA, Species.VOLCARONA]); + initSceneWithoutEncounterPhase(scene, [ Species.ABRA, Species.VOLCARONA ]); }); afterEach(() => { @@ -81,7 +81,7 @@ describe("SelectModifierPhase", () => { expect(modifierSelectHandler.options.length).toEqual(3); // Simulate selecting reroll - selectModifierPhase = new SelectModifierPhase(scene, 1, [ModifierTier.COMMON, ModifierTier.COMMON, ModifierTier.COMMON]); + selectModifierPhase = new SelectModifierPhase(scene, 1, [ ModifierTier.COMMON, ModifierTier.COMMON, ModifierTier.COMMON ]); scene.unshiftPhase(selectModifierPhase); scene.ui.setMode(Mode.MESSAGE).then(() => game.endPhase()); await game.phaseInterceptor.run(SelectModifierPhase); @@ -94,7 +94,7 @@ describe("SelectModifierPhase", () => { // Just use fully random seed for this test vi.spyOn(scene, "resetSeed").mockImplementation(() => { scene.waveSeed = Utils.shiftCharCodes(scene.seed, 5); - Phaser.Math.RND.sow([scene.waveSeed]); + Phaser.Math.RND.sow([ scene.waveSeed ]); console.log("Wave Seed:", scene.waveSeed, 5); scene.rngCounter = 0; }); @@ -126,7 +126,7 @@ describe("SelectModifierPhase", () => { it("should generate custom modifiers", async () => { const customModifiers: CustomModifierSettings = { - guaranteedModifierTypeFuncs: [modifierTypes.MEMORY_MUSHROOM, modifierTypes.TM_ULTRA, modifierTypes.LEFTOVERS, modifierTypes.AMULET_COIN, modifierTypes.GOLDEN_PUNCH] + guaranteedModifierTypeFuncs: [ modifierTypes.MEMORY_MUSHROOM, modifierTypes.TM_ULTRA, modifierTypes.LEFTOVERS, modifierTypes.AMULET_COIN, modifierTypes.GOLDEN_PUNCH ] }; const selectModifierPhase = new SelectModifierPhase(scene, 0, undefined, customModifiers); scene.pushPhase(selectModifierPhase); @@ -145,7 +145,7 @@ describe("SelectModifierPhase", () => { it("should generate custom modifier tiers that can upgrade from luck", async () => { const customModifiers: CustomModifierSettings = { - guaranteedModifierTiers: [ModifierTier.COMMON, ModifierTier.GREAT, ModifierTier.ULTRA, ModifierTier.ROGUE, ModifierTier.MASTER] + guaranteedModifierTiers: [ ModifierTier.COMMON, ModifierTier.GREAT, ModifierTier.ULTRA, ModifierTier.ROGUE, ModifierTier.MASTER ] }; const pokemon = new PlayerPokemon(scene, getPokemonSpecies(Species.BULBASAUR), 10, undefined, 0, undefined, true, 2, undefined, undefined, undefined); @@ -172,8 +172,8 @@ describe("SelectModifierPhase", () => { it("should generate custom modifiers and modifier tiers together", async () => { const customModifiers: CustomModifierSettings = { - guaranteedModifierTypeFuncs: [modifierTypes.MEMORY_MUSHROOM, modifierTypes.TM_COMMON], - guaranteedModifierTiers: [ModifierTier.MASTER, ModifierTier.MASTER] + guaranteedModifierTypeFuncs: [ modifierTypes.MEMORY_MUSHROOM, modifierTypes.TM_COMMON ], + guaranteedModifierTiers: [ ModifierTier.MASTER, ModifierTier.MASTER ] }; const selectModifierPhase = new SelectModifierPhase(scene, 0, undefined, customModifiers); scene.pushPhase(selectModifierPhase); @@ -191,8 +191,8 @@ describe("SelectModifierPhase", () => { it("should fill remaining modifiers if fillRemaining is true with custom modifiers", async () => { const customModifiers: CustomModifierSettings = { - guaranteedModifierTypeFuncs: [modifierTypes.MEMORY_MUSHROOM], - guaranteedModifierTiers: [ModifierTier.MASTER], + guaranteedModifierTypeFuncs: [ modifierTypes.MEMORY_MUSHROOM ], + guaranteedModifierTiers: [ ModifierTier.MASTER ], fillRemaining: true }; const selectModifierPhase = new SelectModifierPhase(scene, 0, undefined, customModifiers); diff --git a/src/test/reload.test.ts b/src/test/reload.test.ts index daf8e43a0cd..7849f8f0080 100644 --- a/src/test/reload.test.ts +++ b/src/test/reload.test.ts @@ -46,7 +46,7 @@ describe("Reload", () => { .startingLevel(100) // Avoid levelling up .enemyLevel(1000) // Avoid opponent dying before game.doKillOpponents() .disableTrainerWaves() - .moveset([Moves.KOWTOW_CLEAVE]) + .moveset([ Moves.KOWTOW_CLEAVE ]) .enemyMoveset(Moves.SPLASH); await game.dailyMode.startBattle(); @@ -81,7 +81,7 @@ describe("Reload", () => { .startingLevel(100) // Avoid levelling up .enemyLevel(1000) // Avoid opponent dying before game.doKillOpponents() .disableTrainerWaves() - .moveset([Moves.KOWTOW_CLEAVE]) + .moveset([ Moves.KOWTOW_CLEAVE ]) .enemyMoveset(Moves.SPLASH); await game.classicMode.startBattle(); // Apparently daily mode would override the biome @@ -161,7 +161,7 @@ describe("Reload", () => { game.override .battleType("single") .startingWave(50); - await game.runToFinalBossEncounter([Species.BULBASAUR], GameModes.DAILY); + await game.runToFinalBossEncounter([ Species.BULBASAUR ], GameModes.DAILY); const preReloadRngState = Phaser.Math.RND.state(); diff --git a/src/test/settingMenu/helpers/menuManip.ts b/src/test/settingMenu/helpers/menuManip.ts index 90b3f1e96e6..0b1f48525f1 100644 --- a/src/test/settingMenu/helpers/menuManip.ts +++ b/src/test/settingMenu/helpers/menuManip.ts @@ -72,7 +72,7 @@ export class MenuManip { const icon = getIconWithKeycode(this.config, this.keycode); const key = getKeyWithKeycode(this.config, this.keycode)!; // TODO: is this bang correct? const _keys = key.toLowerCase().split("_"); - const iconIdentifier = _keys[_keys.length-1]; + const iconIdentifier = _keys[_keys.length - 1]; expect(icon.toLowerCase().includes(iconIdentifier)).toEqual(true); return this; } diff --git a/src/test/settingMenu/rebinding_setting.test.ts b/src/test/settingMenu/rebinding_setting.test.ts index ec2343cfb41..37cf8032897 100644 --- a/src/test/settingMenu/rebinding_setting.test.ts +++ b/src/test/settingMenu/rebinding_setting.test.ts @@ -22,7 +22,7 @@ describe("Test Rebinding", () => { beforeEach(() => { config = deepCopy(cfg_keyboard_qwerty); - config.custom = {...config.default}; + config.custom = { ...config.default }; configs["default"] = config; inGame = new InGameManip(configs, config, selectedDevice); inTheSettingMenu = new MenuManip(config); diff --git a/src/test/sprites/pokemonSprite.test.ts b/src/test/sprites/pokemonSprite.test.ts index faf0626b365..c29f88d3143 100644 --- a/src/test/sprites/pokemonSprite.test.ts +++ b/src/test/sprites/pokemonSprite.test.ts @@ -70,7 +70,7 @@ describe("check if every variant's sprite are correctly set", () => { errors.push(`[${id}] missing key ${id} in masterlist for ${trimmedFilePath}`); } if (mlist[id][index] === 1 && jsonFileExists) { - const raw = fs.readFileSync(urlJsonFile, {encoding: "utf8", flag: "r"}); + const raw = fs.readFileSync(urlJsonFile, { encoding: "utf8", flag: "r" }); const data = JSON.parse(raw); const keys = Object.keys(data); if (!keys.includes(`${index}`)) { @@ -87,7 +87,7 @@ describe("check if every variant's sprite are correctly set", () => { } else if (!mlist.hasOwnProperty(name)) { errors.push(`[${name}] - missing key ${name} in masterlist for ${trimmedFilePath}`); } else { - const raw = fs.readFileSync(filePath, {encoding: "utf8", flag: "r"}); + const raw = fs.readFileSync(filePath, { encoding: "utf8", flag: "r" }); const data = JSON.parse(raw); for (const key of Object.keys(data)) { if (mlist[name][key] !== 1) { @@ -109,14 +109,14 @@ describe("check if every variant's sprite are correctly set", () => { const errors: string[] = []; for (const key of Object.keys(keys)) { const row = keys[key]; - for (const [index, elm] of row.entries()) { + for (const [ index, elm ] of row.entries()) { let url: string; if (elm === 0) { continue; } else if (elm === 1) { url = `${key}.json`; const filePath = `${dirPath}${url}`; - const raw = fs.readFileSync(filePath, {encoding: "utf8", flag: "r"}); + const raw = fs.readFileSync(filePath, { encoding: "utf8", flag: "r" }); const data = JSON.parse(raw); if (!data.hasOwnProperty(index)) { errors.push(`index: ${index} - ${filePath}`); @@ -232,7 +232,7 @@ describe("check if every variant's sprite are correctly set", () => { it("look over every file in variant back male and check if present in masterlist", () => { const dirPath = `${rootDir}back${path.sep}`; const backMaleVariant = deepCopy(backVariant); - const errors = getMissingMasterlist(backMaleVariant, dirPath, ["female"]); + const errors = getMissingMasterlist(backMaleVariant, dirPath, [ "female" ]); if (errors.length) { console.log("errors for ", dirPath, errors); } @@ -259,7 +259,7 @@ describe("check if every variant's sprite are correctly set", () => { it("look over every file in variant exp male and check if present in masterlist", () => { const dirPath = `${rootDir}exp${path.sep}`; - const errors = getMissingMasterlist(expVariant, dirPath, ["back", "female"]); + const errors = getMissingMasterlist(expVariant, dirPath, [ "back", "female" ]); if (errors.length) { console.log("errors for ", dirPath, errors); } @@ -268,7 +268,7 @@ describe("check if every variant's sprite are correctly set", () => { it("look over every file in variant root and check if present in masterlist", () => { const dirPath = `${rootDir}`; - const errors = getMissingMasterlist(masterlist, dirPath, ["back", "female", "exp", "icons"]); + const errors = getMissingMasterlist(masterlist, dirPath, [ "back", "female", "exp", "icons" ]); if (errors.length) { console.log("errors for ", dirPath, errors); } diff --git a/src/test/system/game_data.test.ts b/src/test/system/game_data.test.ts index e3550e44fff..5eb4dea3910 100644 --- a/src/test/system/game_data.test.ts +++ b/src/test/system/game_data.test.ts @@ -31,7 +31,7 @@ describe("System - Game Data", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([ Moves.SPLASH ]) .battleType("single") .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH); @@ -46,7 +46,7 @@ describe("System - Game Data", () => { beforeEach(() => { vi.spyOn(BattleScene, "bypassLogin", "get").mockReturnValue(false); vi.spyOn(game.scene.gameData, "getSessionSaveData").mockReturnValue({} as SessionSaveData); - vi.spyOn(account, "updateUserInfo").mockImplementation(async () => [true, 1]); + vi.spyOn(account, "updateUserInfo").mockImplementation(async () => [ true, 1 ]); }); it("should return [true, true] if bypassLogin is true", async () => { @@ -54,7 +54,7 @@ describe("System - Game Data", () => { const result = await game.scene.gameData.tryClearSession(game.scene, 0); - expect(result).toEqual([true, true]); + expect(result).toEqual([ true, true ]); }); it("should return [true, true] if successful", async () => { @@ -62,7 +62,7 @@ describe("System - Game Data", () => { const result = await game.scene.gameData.tryClearSession(game.scene, 0); - expect(result).toEqual([true, true]); + expect(result).toEqual([ true, true ]); expect(account.updateUserInfo).toHaveBeenCalled(); }); @@ -71,7 +71,7 @@ describe("System - Game Data", () => { const result = await game.scene.gameData.tryClearSession(game.scene, 0); - expect(result).toEqual([true, false]); + expect(result).toEqual([ true, false ]); expect(account.updateUserInfo).toHaveBeenCalled(); }); @@ -82,7 +82,7 @@ describe("System - Game Data", () => { const result = await game.scene.gameData.tryClearSession(game.scene, 0); - expect(result).toEqual([false, false]); + expect(result).toEqual([ false, false ]); expect(account.updateUserInfo).toHaveBeenCalled(); }); }); diff --git a/src/test/ui/battle_info.test.ts b/src/test/ui/battle_info.test.ts index 4d511b75e6f..3100372f091 100644 --- a/src/test/ui/battle_info.test.ts +++ b/src/test/ui/battle_info.test.ts @@ -30,20 +30,20 @@ describe("UI - Battle Info", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.GUILLOTINE, Moves.SPLASH]) + .moveset([ Moves.GUILLOTINE, Moves.SPLASH ]) .battleType("single") .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH) .enemySpecies(Species.CATERPIE); }); - it.each([ExpGainsSpeed.FAST, ExpGainsSpeed.FASTER, ExpGainsSpeed.SKIP])( + it.each([ ExpGainsSpeed.FAST, ExpGainsSpeed.FASTER, ExpGainsSpeed.SKIP ])( "should increase exp gains animation by 2^%i", async (expGainsSpeed) => { game.settings.expGainsSpeed(expGainsSpeed); vi.spyOn(Math, "pow"); - await game.classicMode.startBattle([Species.CHARIZARD]); + await game.classicMode.startBattle([ Species.CHARIZARD ]); game.move.select(Moves.SPLASH); await game.doKillOpponents(); diff --git a/src/test/ui/transfer-item.test.ts b/src/test/ui/transfer-item.test.ts index f7dea463574..0fbd4a52c61 100644 --- a/src/test/ui/transfer-item.test.ts +++ b/src/test/ui/transfer-item.test.ts @@ -37,11 +37,11 @@ describe("UI - Transfer Items", () => { { name: "BERRY", count: 2, type: BerryType.APICOT }, { name: "BERRY", count: 2, type: BerryType.LUM }, ]); - game.override.moveset([Moves.DRAGON_CLAW]); + game.override.moveset([ Moves.DRAGON_CLAW ]); game.override.enemySpecies(Species.MAGIKARP); - game.override.enemyMoveset([Moves.SPLASH]); + game.override.enemyMoveset([ Moves.SPLASH ]); - await game.startBattle([Species.RAYQUAZA, Species.RAYQUAZA, Species.RAYQUAZA]); + await game.startBattle([ Species.RAYQUAZA, Species.RAYQUAZA, Species.RAYQUAZA ]); game.move.select(Moves.DRAGON_CLAW); diff --git a/src/test/ui/type-hints.test.ts b/src/test/ui/type-hints.test.ts index 82209859fb0..450f43f1263 100644 --- a/src/test/ui/type-hints.test.ts +++ b/src/test/ui/type-hints.test.ts @@ -36,10 +36,10 @@ describe("UI - Type Hints", () => { .startingWave(1) .enemySpecies(Species.FLORGES) .enemyMoveset(Moves.SPLASH) - .moveset([Moves.DRAGON_CLAW]); + .moveset([ Moves.DRAGON_CLAW ]); game.settings.typeHints(true); //activate type hints - await game.startBattle([Species.RAYQUAZA]); + await game.startBattle([ Species.RAYQUAZA ]); game.onNextPrompt("CommandPhase", Mode.COMMAND, () => { const { ui } = game.scene; @@ -62,9 +62,9 @@ describe("UI - Type Hints", () => { }); it("check status move color", async () => { - game.override.enemySpecies(Species.FLORGES).moveset([Moves.GROWL]); + game.override.enemySpecies(Species.FLORGES).moveset([ Moves.GROWL ]); - await game.startBattle([Species.RAYQUAZA]); + await game.startBattle([ Species.RAYQUAZA ]); game.onNextPrompt("CommandPhase", Mode.COMMAND, () => { const { ui } = game.scene; diff --git a/src/test/utils/gameManager.ts b/src/test/utils/gameManager.ts index a2403de7e18..86c51972c8b 100644 --- a/src/test/utils/gameManager.ts +++ b/src/test/utils/gameManager.ts @@ -304,7 +304,7 @@ export default class GameManager { vi.spyOn(enemy, "getNextMove").mockReturnValueOnce({ move: moveId, targets: (target !== undefined && !legalTargets.multiple && legalTargets.targets.includes(target)) - ? [target] + ? [ target ] : enemy.getNextTargets(moveId) }); @@ -320,7 +320,7 @@ export default class GameManager { const originalMatchupScore = Trainer.prototype.getPartyMemberMatchupScores; Trainer.prototype.getPartyMemberMatchupScores = () => { Trainer.prototype.getPartyMemberMatchupScores = originalMatchupScore; - return [[1, 100], [1, 100]]; + return [[ 1, 100 ], [ 1, 100 ]]; }; } diff --git a/src/test/utils/helpers/overridesHelper.ts b/src/test/utils/helpers/overridesHelper.ts index 84cb1719e0b..e41cbad42c5 100644 --- a/src/test/utils/helpers/overridesHelper.ts +++ b/src/test/utils/helpers/overridesHelper.ts @@ -93,7 +93,7 @@ export class OverridesHelper extends GameManagerHelper { starterForms(forms: Partial>): this { vi.spyOn(Overrides, "STARTER_FORM_OVERRIDES", "get").mockReturnValue(forms); const formsStr = Object.entries(forms) - .map(([speciesId, formIndex]) => `${Species[speciesId]}=${formIndex}`) + .map(([ speciesId, formIndex ]) => `${Species[speciesId]}=${formIndex}`) .join(", "); this.log(`Player Pokemon form set to: ${formsStr}!`); return this; @@ -140,7 +140,7 @@ export class OverridesHelper extends GameManagerHelper { moveset(moveset: Moves | Moves[]): this { vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue(moveset); if (!Array.isArray(moveset)) { - moveset = [moveset]; + moveset = [ moveset ]; } const movesetStr = moveset.map((moveId) => Moves[moveId]).join(", "); this.log(`Player Pokemon moveset set to ${movesetStr} (=[${moveset.join(", ")}])!`); @@ -202,7 +202,7 @@ export class OverridesHelper extends GameManagerHelper { seed(seed: string): this { vi.spyOn(this.game.scene, "resetSeed").mockImplementation(() => { this.game.scene.waveSeed = seed; - Phaser.Math.RND.sow([seed]); + Phaser.Math.RND.sow([ seed ]); this.game.scene.rngCounter = 0; }); this.game.scene.resetSeed(); @@ -262,7 +262,7 @@ export class OverridesHelper extends GameManagerHelper { enemyMoveset(moveset: Moves | Moves[]): this { vi.spyOn(Overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue(moveset); if (!Array.isArray(moveset)) { - moveset = [moveset]; + moveset = [ moveset ]; } const movesetStr = moveset.map((moveId) => Moves[moveId]).join(", "); this.log(`Enemy Pokemon moveset set to ${movesetStr} (=[${moveset.join(", ")}])!`); diff --git a/src/test/utils/helpers/settingsHelper.ts b/src/test/utils/helpers/settingsHelper.ts index c611a705107..83baa329cec 100644 --- a/src/test/utils/helpers/settingsHelper.ts +++ b/src/test/utils/helpers/settingsHelper.ts @@ -27,7 +27,7 @@ export class SettingsHelper extends GameManagerHelper { */ typeHints(enable: boolean): void { this.game.scene.typeHints = enable; - this.log(`Type Hints ${enable? "enabled" : "disabled"}` ); + this.log(`Type Hints ${enable ? "enabled" : "disabled"}` ); } /** diff --git a/src/test/utils/inputsHandler.ts b/src/test/utils/inputsHandler.ts index 30dd101f43d..bf690d5d74c 100644 --- a/src/test/utils/inputsHandler.ts +++ b/src/test/utils/inputsHandler.ts @@ -41,18 +41,18 @@ export default class InputsHandler { pressGamepadButton(button: integer, duration: integer): Promise { return new Promise(async (resolve) => { - this.scene.input.gamepad?.emit("down", this.fakePad, {index: button}); + this.scene.input.gamepad?.emit("down", this.fakePad, { index: button }); await holdOn(duration); - this.scene.input.gamepad?.emit("up", this.fakePad, {index: button}); + this.scene.input.gamepad?.emit("up", this.fakePad, { index: button }); resolve(); }); } pressKeyboardKey(key: integer, duration: integer): Promise { return new Promise(async (resolve) => { - this.scene.input.keyboard?.emit("keydown", {keyCode: key}); + this.scene.input.keyboard?.emit("keydown", { keyCode: key }); await holdOn(duration); - this.scene.input.keyboard?.emit("keyup", {keyCode: key}); + this.scene.input.keyboard?.emit("keyup", { keyCode: key }); resolve(); }); } @@ -67,11 +67,11 @@ export default class InputsHandler { listenInputs(): void { this.events.on("input_down", (event) => { - this.log.push({type: "input_down", button: event.button}); + this.log.push({ type: "input_down", button: event.button }); }, this); this.events.on("input_up", (event) => { - this.logUp.push({type: "input_up", button: event.button}); + this.logUp.push({ type: "input_up", button: event.button }); }, this); } } @@ -82,7 +82,7 @@ class Fakepad extends Phaser.Input.Gamepad.Gamepad { constructor(pad) { //@ts-ignore - super(undefined, {...pad, buttons: pad.deviceMapping, axes: []}); //TODO: resolve ts-ignore + super(undefined, { ...pad, buttons: pad.deviceMapping, axes: []}); //TODO: resolve ts-ignore this.id = "xbox_360_fakepad"; this.index = 0; } @@ -90,7 +90,7 @@ class Fakepad extends Phaser.Input.Gamepad.Gamepad { class FakeMobile { constructor() { - const fakeMobilePage = fs.readFileSync("./src/test/utils/fakeMobile.html", {encoding: "utf8", flag: "r"}); + const fakeMobilePage = fs.readFileSync("./src/test/utils/fakeMobile.html", { encoding: "utf8", flag: "r" }); const dom = new JSDOM(fakeMobilePage); Object.defineProperty(window, "document", { value: dom.window.document, diff --git a/src/test/utils/mocks/mockClock.ts b/src/test/utils/mocks/mockClock.ts index e7501a7c99d..7fad3651010 100644 --- a/src/test/utils/mocks/mockClock.ts +++ b/src/test/utils/mocks/mockClock.ts @@ -17,7 +17,7 @@ export class MockClock extends Clock { } addEvent(config: Phaser.Time.TimerEvent | Phaser.Types.Time.TimerEventConfig): Phaser.Time.TimerEvent { - const cfg = { ...config, delay: this.overrideDelay ?? config.delay}; + const cfg = { ...config, delay: this.overrideDelay ?? config.delay }; return super.addEvent(cfg); } } diff --git a/src/test/utils/mocks/mockConsoleLog.ts b/src/test/utils/mocks/mockConsoleLog.ts index f44a0c7d6cd..9c3cbca6bb6 100644 --- a/src/test/utils/mocks/mockConsoleLog.ts +++ b/src/test/utils/mocks/mockConsoleLog.ts @@ -1,4 +1,4 @@ -const MockConsoleLog = (_logDisabled= false, _phaseText=false) => { +const MockConsoleLog = (_logDisabled = false, _phaseText = false) => { let logs: any[] = []; const logDisabled: boolean = _logDisabled; const phaseText: boolean = _phaseText; @@ -8,8 +8,8 @@ const MockConsoleLog = (_logDisabled= false, _phaseText=false) => { const originalWarn = console.warn; const notified: any[] = []; - const blacklist = ["Phaser", "variant icon does not exist", "Texture \"%s\" not found"]; - const whitelist = ["Phase"]; + const blacklist = [ "Phaser", "variant icon does not exist", "Texture \"%s\" not found" ]; + const whitelist = [ "Phase" ]; return ({ log(...args) { diff --git a/src/test/utils/mocks/mockFetch.ts b/src/test/utils/mocks/mockFetch.ts index ad3758775d1..2fa7cd198ce 100644 --- a/src/test/utils/mocks/mockFetch.ts +++ b/src/test/utils/mocks/mockFetch.ts @@ -5,12 +5,12 @@ export const MockFetch = (input, init) => { let responseText; const handlers = { - "account/info": {"username":"greenlamp", "lastSessionSlot":0}, + "account/info": { "username":"greenlamp", "lastSessionSlot":0 }, "savedata/session": {}, "savedata/system": {}, "savedata/updateall": "", "daily/rankingpagecount": { data: 0 }, - "game/titlestats": {"playerCount":0, "battleCount":5}, + "game/titlestats": { "playerCount":0, "battleCount":5 }, "daily/rankings": [], }; diff --git a/src/test/utils/mocks/mocksContainer/mockSprite.ts b/src/test/utils/mocks/mocksContainer/mockSprite.ts index a55b218d0c2..e726fec454d 100644 --- a/src/test/utils/mocks/mocksContainer/mockSprite.ts +++ b/src/test/utils/mocks/mocksContainer/mockSprite.ts @@ -212,5 +212,4 @@ export default class MockSprite implements MockGameObject { } - } diff --git a/src/test/utils/phaseInterceptor.ts b/src/test/utils/phaseInterceptor.ts index 6c4c9a6cf94..d108c4cb2ea 100644 --- a/src/test/utils/phaseInterceptor.ts +++ b/src/test/utils/phaseInterceptor.ts @@ -81,57 +81,57 @@ export default class PhaseInterceptor { * List of phases with their corresponding start methods. */ private PHASES = [ - [LoginPhase, this.startPhase], - [TitlePhase, this.startPhase], - [SelectGenderPhase, this.startPhase], - [EncounterPhase, this.startPhase], - [NewBiomeEncounterPhase, this.startPhase], - [SelectStarterPhase, this.startPhase], - [PostSummonPhase, this.startPhase], - [SummonPhase, this.startPhase], - [ToggleDoublePositionPhase, this.startPhase], - [CheckSwitchPhase, this.startPhase], - [ShowAbilityPhase, this.startPhase], - [MessagePhase, this.startPhase], - [TurnInitPhase, this.startPhase], - [CommandPhase, this.startPhase], - [EnemyCommandPhase, this.startPhase], - [TurnStartPhase, this.startPhase], - [MovePhase, this.startPhase], - [MoveEffectPhase, this.startPhase], - [DamagePhase, this.startPhase], - [FaintPhase, this.startPhase], - [BerryPhase, this.startPhase], - [TurnEndPhase, this.startPhase], - [BattleEndPhase, this.startPhase], - [EggLapsePhase, this.startPhase], - [SelectModifierPhase, this.startPhase], - [NextEncounterPhase, this.startPhase], - [NewBattlePhase, this.startPhase], - [VictoryPhase, this.startPhase], - [LearnMovePhase, this.startPhase], - [MoveEndPhase, this.startPhase], - [StatStageChangePhase, this.startPhase], - [ShinySparklePhase, this.startPhase], - [SelectTargetPhase, this.startPhase], - [UnavailablePhase, this.startPhase], - [QuietFormChangePhase, this.startPhase], - [SwitchPhase, this.startPhase], - [SwitchSummonPhase, this.startPhase], - [PartyHealPhase, this.startPhase], - [EvolutionPhase, this.startPhase], - [EndEvolutionPhase, this.startPhase], - [LevelCapPhase, this.startPhase], - [AttemptRunPhase, this.startPhase], - [SelectBiomePhase, this.startPhase], - [MysteryEncounterPhase, this.startPhase], - [MysteryEncounterOptionSelectedPhase, this.startPhase], - [MysteryEncounterBattlePhase, this.startPhase], - [MysteryEncounterRewardsPhase, this.startPhase], - [PostMysteryEncounterPhase, this.startPhase], - [ModifierRewardPhase, this.startPhase], - [PartyExpPhase, this.startPhase], - [ExpPhase, this.startPhase], + [ LoginPhase, this.startPhase ], + [ TitlePhase, this.startPhase ], + [ SelectGenderPhase, this.startPhase ], + [ EncounterPhase, this.startPhase ], + [ NewBiomeEncounterPhase, this.startPhase ], + [ SelectStarterPhase, this.startPhase ], + [ PostSummonPhase, this.startPhase ], + [ SummonPhase, this.startPhase ], + [ ToggleDoublePositionPhase, this.startPhase ], + [ CheckSwitchPhase, this.startPhase ], + [ ShowAbilityPhase, this.startPhase ], + [ MessagePhase, this.startPhase ], + [ TurnInitPhase, this.startPhase ], + [ CommandPhase, this.startPhase ], + [ EnemyCommandPhase, this.startPhase ], + [ TurnStartPhase, this.startPhase ], + [ MovePhase, this.startPhase ], + [ MoveEffectPhase, this.startPhase ], + [ DamagePhase, this.startPhase ], + [ FaintPhase, this.startPhase ], + [ BerryPhase, this.startPhase ], + [ TurnEndPhase, this.startPhase ], + [ BattleEndPhase, this.startPhase ], + [ EggLapsePhase, this.startPhase ], + [ SelectModifierPhase, this.startPhase ], + [ NextEncounterPhase, this.startPhase ], + [ NewBattlePhase, this.startPhase ], + [ VictoryPhase, this.startPhase ], + [ LearnMovePhase, this.startPhase ], + [ MoveEndPhase, this.startPhase ], + [ StatStageChangePhase, this.startPhase ], + [ ShinySparklePhase, this.startPhase ], + [ SelectTargetPhase, this.startPhase ], + [ UnavailablePhase, this.startPhase ], + [ QuietFormChangePhase, this.startPhase ], + [ SwitchPhase, this.startPhase ], + [ SwitchSummonPhase, this.startPhase ], + [ PartyHealPhase, this.startPhase ], + [ EvolutionPhase, this.startPhase ], + [ EndEvolutionPhase, this.startPhase ], + [ LevelCapPhase, this.startPhase ], + [ AttemptRunPhase, this.startPhase ], + [ SelectBiomePhase, this.startPhase ], + [ MysteryEncounterPhase, this.startPhase ], + [ MysteryEncounterOptionSelectedPhase, this.startPhase ], + [ MysteryEncounterBattlePhase, this.startPhase ], + [ MysteryEncounterRewardsPhase, this.startPhase ], + [ PostMysteryEncounterPhase, this.startPhase ], + [ ModifierRewardPhase, this.startPhase ], + [ PartyExpPhase, this.startPhase ], + [ ExpPhase, this.startPhase ], ]; private endBySetMode = [ @@ -297,7 +297,7 @@ export default class PhaseInterceptor { this.originalSuperEnd = Phase.prototype.end; UI.prototype.setMode = (mode, ...args) => this.setMode.call(this, mode, ...args); Phase.prototype.end = () => this.superEndPhase.call(this); - for (const [phase, methodStart] of this.PHASES) { + for (const [ phase, methodStart ] of this.PHASES) { const originalStart = phase.prototype.start; this.phases[phase.name] = { start: originalStart, @@ -346,7 +346,7 @@ export default class PhaseInterceptor { const currentPhase = this.scene.getCurrentPhase(); const instance = this.scene.ui; console.log("setMode", `${Mode[mode]} (=${mode})`, args); - const ret = this.originalSetMode.apply(instance, [mode, ...args]); + const ret = this.originalSetMode.apply(instance, [ mode, ...args ]); if (!this.phases[currentPhase.constructor.name]) { throw new Error(`missing ${currentPhase.constructor.name} in phaseInterceptor PHASES list --- Add it to PHASES inside of /test/utils/phaseInterceptor.ts`); @@ -406,7 +406,7 @@ export default class PhaseInterceptor { * function stored in `this.phases`. Additionally, it clears the `promptInterval` and `interval`. */ restoreOg() { - for (const [phase] of this.PHASES) { + for (const [ phase ] of this.PHASES) { phase.prototype.start = this.phases[phase.name].start; } UI.prototype.setMode = this.originalSetMode; diff --git a/src/test/vitest.setup.ts b/src/test/vitest.setup.ts index 948180ca261..0d67d6787c4 100644 --- a/src/test/vitest.setup.ts +++ b/src/test/vitest.setup.ts @@ -36,7 +36,7 @@ vi.mock("i18next", () => ({ exists: () => true, getDataByLanguage:() => ({ en: { - keys: ["foo"] + keys: [ "foo" ] }, }), services: { diff --git a/src/timed-event-manager.ts b/src/timed-event-manager.ts index 3caa84fd39b..513d21bd2f3 100644 --- a/src/timed-event-manager.ts +++ b/src/timed-event-manager.ts @@ -34,7 +34,7 @@ const timedEvents: TimedEvent[] = [ xPosition: 19, yPosition: 120, scale: 0.21, - availableLangs: ["en", "de", "it", "fr", "ja", "ko", "es", "pt-BR", "zh-CN"] + availableLangs: [ "en", "de", "it", "fr", "ja", "ko", "es", "pt-BR", "zh-CN" ] } ]; @@ -95,7 +95,7 @@ export class TimedEventDisplay extends Phaser.GameObjects.Container { let key = this.event.bannerKey; if (lang && this.event.availableLangs && this.event.availableLangs.length > 0) { if (this.event.availableLangs.includes(lang)) { - key += "_"+lang; + key += "_" + lang; } else { key += "_en"; } @@ -142,7 +142,7 @@ export class TimedEventDisplay extends Phaser.GameObjects.Container { // Utility to add leading zero function z(n) { - return (n < 10? "0" : "") + n; + return (n < 10 ? "0" : "") + n; } const now = new Date(); let diff = Math.abs(date.getTime() - now.getTime()); @@ -151,13 +151,13 @@ export class TimedEventDisplay extends Phaser.GameObjects.Container { diff = Math.abs(diff); // Get time components - const days = diff/8.64e7 | 0; - const hours = diff%8.64e7 / 3.6e6 | 0; - const mins = diff%3.6e6 / 6e4 | 0; - const secs = Math.round(diff%6e4 / 1e3); + const days = diff / 8.64e7 | 0; + const hours = diff % 8.64e7 / 3.6e6 | 0; + const mins = diff % 3.6e6 / 6e4 | 0; + const secs = Math.round(diff % 6e4 / 1e3); // Return formatted string - return "Event Ends in : " + z(days) + "d " + z(hours) + "h " + z(mins) + "m " + z(secs)+ "s"; + return "Event Ends in : " + z(days) + "d " + z(hours) + "h " + z(mins) + "m " + z(secs) + "s"; } updateCountdown() { diff --git a/src/touch-controls.ts b/src/touch-controls.ts index 53df545e27f..786d1203d12 100644 --- a/src/touch-controls.ts +++ b/src/touch-controls.ts @@ -1,4 +1,4 @@ -import {Button} from "#enums/buttons"; +import { Button } from "#enums/buttons"; import EventEmitter = Phaser.Events.EventEmitter; import BattleScene from "./battle-scene"; @@ -206,7 +206,7 @@ export function isMobile(): boolean { let ret = false; (function (a) { // Check the user agent string against a regex for mobile devices - if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) { + if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) { ret = true; } })(navigator.userAgent || navigator.vendor || window["opera"]); diff --git a/src/ui-inputs.ts b/src/ui-inputs.ts index b9ecb55958c..9ea1276352a 100644 --- a/src/ui-inputs.ts +++ b/src/ui-inputs.ts @@ -1,11 +1,11 @@ import Phaser from "phaser"; -import {Mode} from "./ui/ui"; -import {InputsController} from "./inputs-controller"; +import { Mode } from "./ui/ui"; +import { InputsController } from "./inputs-controller"; import MessageUiHandler from "./ui/message-ui-handler"; import StarterSelectUiHandler from "./ui/starter-select-ui-handler"; -import {Setting, SettingKeys, settingIndex} from "./system/settings/settings"; +import { Setting, SettingKeys, settingIndex } from "./system/settings/settings"; import SettingsUiHandler from "./ui/settings/settings-ui-handler"; -import {Button} from "#enums/buttons"; +import { Button } from "#enums/buttons"; import SettingsGamepadUiHandler from "./ui/settings/settings-gamepad-ui-handler"; import SettingsKeyboardUiHandler from "#app/ui/settings/settings-keyboard-ui-handler"; import BattleScene from "./battle-scene"; @@ -142,7 +142,7 @@ export class UiInputs { } buttonGoToFilter(button: Button): void { - const whitelist = [StarterSelectUiHandler]; + const whitelist = [ StarterSelectUiHandler ]; const uiHandler = this.scene.ui?.getHandler(); if (whitelist.some(handler => uiHandler instanceof handler)) { this.scene.ui.processInput(button); @@ -192,7 +192,7 @@ export class UiInputs { } buttonCycleOption(button: Button): void { - const whitelist = [StarterSelectUiHandler, SettingsUiHandler, RunInfoUiHandler, SettingsDisplayUiHandler, SettingsAudioUiHandler, SettingsGamepadUiHandler, SettingsKeyboardUiHandler]; + const whitelist = [ StarterSelectUiHandler, SettingsUiHandler, RunInfoUiHandler, SettingsDisplayUiHandler, SettingsAudioUiHandler, SettingsGamepadUiHandler, SettingsKeyboardUiHandler ]; const uiHandler = this.scene.ui?.getHandler(); if (whitelist.some(handler => uiHandler instanceof handler)) { this.scene.ui.processInput(button); diff --git a/src/ui/abstact-option-select-ui-handler.ts b/src/ui/abstact-option-select-ui-handler.ts index 740830595ed..9dffd3b4ad0 100644 --- a/src/ui/abstact-option-select-ui-handler.ts +++ b/src/ui/abstact-option-select-ui-handler.ts @@ -5,7 +5,7 @@ import UiHandler from "./ui-handler"; import { addWindow } from "./ui-theme"; import * as Utils from "../utils"; import { argbFromRgba } from "@material/material-color-utilities"; -import {Button} from "#enums/buttons"; +import { Button } from "#enums/buttons"; export interface OptionSelectConfig { xOffset?: number; @@ -116,7 +116,7 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler { this.optionSelectBg.height = this.getWindowHeight(); - this.optionSelectText.setPositionRelative(this.optionSelectBg, 12+24*this.scale, 2+42*this.scale); + this.optionSelectText.setPositionRelative(this.optionSelectBg, 12 + 24 * this.scale, 2 + 42 * this.scale); options.forEach((option: OptionSelectItem, i: integer) => { if (option.item) { @@ -225,7 +225,7 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler { if (this.cursor) { success = this.setCursor(this.cursor - 1); } else if (this.cursor === 0) { - success = this.setCursor(options.length -1); + success = this.setCursor(options.length - 1); } break; case Button.DOWN: @@ -335,7 +335,7 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler { } this.cursorObj.setScale(this.scale * 6); - this.cursorObj.setPositionRelative(this.optionSelectBg, 12, 102*this.scale + this.cursor * (114 * this.scale - 3)); + this.cursorObj.setPositionRelative(this.optionSelectBg, 12, 102 * this.scale + this.cursor * (114 * this.scale - 3)); return changed; } diff --git a/src/ui/achvs-ui-handler.ts b/src/ui/achvs-ui-handler.ts index 491c4acb523..f90732d1fae 100644 --- a/src/ui/achvs-ui-handler.ts +++ b/src/ui/achvs-ui-handler.ts @@ -79,7 +79,7 @@ export default class AchvsUiHandler extends MessageUiHandler { this.headerActionButton = new Phaser.GameObjects.Sprite(this.scene, 0, 0, "keyboard", "ACTION.png"); this.headerActionButton.setOrigin(0, 0); this.headerActionButton.setPositionRelative(this.headerBg, 236, 6); - this.headerActionText = addTextObject(this.scene, 0, 0, "", TextStyle.WINDOW, {fontSize:"60px"}); + this.headerActionText = addTextObject(this.scene, 0, 0, "", TextStyle.WINDOW, { fontSize:"60px" }); this.headerActionText.setOrigin(0, 0); this.headerActionText.setPositionRelative(this.headerBg, 264, 8); @@ -252,7 +252,7 @@ export default class AchvsUiHandler extends MessageUiHandler { // Wrap around to the last row success = this.setScrollCursor(Math.ceil(this.currentTotal / this.COLS) - this.ROWS); let newCursorIndex = this.cursor + (this.ROWS - 1) * this.COLS; - if (newCursorIndex > this.currentTotal - this.scrollCursor * this.COLS -1) { + if (newCursorIndex > this.currentTotal - this.scrollCursor * this.COLS - 1) { newCursorIndex -= this.COLS; } success = success && this.setCursor(newCursorIndex); diff --git a/src/ui/admin-ui-handler.ts b/src/ui/admin-ui-handler.ts index c48138853fc..c73c02e66c2 100644 --- a/src/ui/admin-ui-handler.ts +++ b/src/ui/admin-ui-handler.ts @@ -20,7 +20,7 @@ export default class AdminUiHandler extends FormModalUiHandler { } getFields(config?: ModalConfig): string[] { - return ["Username", "Discord ID"]; + return [ "Username", "Discord ID" ]; } getWidth(config?: ModalConfig): number { @@ -28,11 +28,11 @@ export default class AdminUiHandler extends FormModalUiHandler { } getMargin(config?: ModalConfig): [number, number, number, number] { - return [0, 0, 48, 0]; + return [ 0, 0, 48, 0 ]; } getButtonLabels(config?: ModalConfig): string[] { - return ["Link account", "Cancel"]; + return [ "Link account", "Cancel" ]; } processInput(button: Button): boolean { @@ -50,7 +50,7 @@ export default class AdminUiHandler extends FormModalUiHandler { const originalSubmitAction = this.submitAction; this.submitAction = (_) => { this.submitAction = originalSubmitAction; - this.scene.ui.setMode(Mode.LOADING, { buttonActions: [] }); + this.scene.ui.setMode(Mode.LOADING, { buttonActions: []}); const onFail = error => { this.scene.ui.setMode(Mode.ADMIN, Object.assign(config, { errorMessage: error?.trim() })); this.scene.ui.playError(); diff --git a/src/ui/arena-flyout.ts b/src/ui/arena-flyout.ts index 42a2396e665..0c00d3403b6 100644 --- a/src/ui/arena-flyout.ts +++ b/src/ui/arena-flyout.ts @@ -9,7 +9,7 @@ import { BattleSceneEventType, TurnEndEvent } from "../events/battle-scene"; import { ArenaTagType } from "#enums/arena-tag-type"; import TimeOfDayWidget from "./time-of-day-widget"; import * as Utils from "../utils"; -import i18next, {ParseKeys} from "i18next"; +import i18next, { ParseKeys } from "i18next"; /** Enum used to differentiate {@linkcode Arena} effects */ enum ArenaEffectType { @@ -196,7 +196,6 @@ export class ArenaFlyout extends Phaser.GameObjects.Container { } - /** Clears out the current string stored in all arena effect texts */ private clearText() { this.flyoutTextPlayer.text = ""; @@ -316,9 +315,9 @@ export class ArenaFlyout extends Phaser.GameObjects.Container { ? ArenaEffectType.WEATHER : ArenaEffectType.TERRAIN, maxDuration: fieldEffectChangedEvent.duration, - duration: fieldEffectChangedEvent.duration}; + duration: fieldEffectChangedEvent.duration }; - foundIndex = this.fieldEffectInfo.findIndex(info => [newInfo.name, oldName].includes(info.name)); + foundIndex = this.fieldEffectInfo.findIndex(info => [ newInfo.name, oldName ].includes(info.name)); if (foundIndex === -1) { if (newInfo.name !== undefined) { this.fieldEffectInfo.push(newInfo); // Adds the info to the array if it doesn't already exist and is defined diff --git a/src/ui/awaitable-ui-handler.ts b/src/ui/awaitable-ui-handler.ts index c6dc717aa3a..8256f938106 100644 --- a/src/ui/awaitable-ui-handler.ts +++ b/src/ui/awaitable-ui-handler.ts @@ -1,7 +1,7 @@ import BattleScene from "../battle-scene"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; -import {Button} from "#enums/buttons"; +import { Button } from "#enums/buttons"; export default abstract class AwaitableUiHandler extends UiHandler { protected awaitingActionInput: boolean; diff --git a/src/ui/ball-ui-handler.ts b/src/ui/ball-ui-handler.ts index 332fe5f65b9..0d97a79943d 100644 --- a/src/ui/ball-ui-handler.ts +++ b/src/ui/ball-ui-handler.ts @@ -5,7 +5,7 @@ import { Command } from "./command-ui-handler"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import { addWindow } from "./ui-theme"; -import {Button} from "#enums/buttons"; +import { Button } from "#enums/buttons"; import { CommandPhase } from "#app/phases/command-phase"; export default class BallUiHandler extends UiHandler { diff --git a/src/ui/battle-flyout.ts b/src/ui/battle-flyout.ts index fe561b76c9f..4541a2bfefa 100644 --- a/src/ui/battle-flyout.ts +++ b/src/ui/battle-flyout.ts @@ -149,7 +149,7 @@ export default class BattleFlyout extends Phaser.GameObjects.Container { if (foundInfo) { foundInfo.ppUsed = moveUsedEvent.ppUsed; } else { - this.moveInfo.push({move: moveUsedEvent.move, maxPp: moveUsedEvent.move.pp, ppUsed: moveUsedEvent.ppUsed}); + this.moveInfo.push({ move: moveUsedEvent.move, maxPp: moveUsedEvent.move.pp, ppUsed: moveUsedEvent.ppUsed }); } this.setText(); diff --git a/src/ui/battle-info.ts b/src/ui/battle-info.ts index b3474bed5cd..79b51ba6c44 100644 --- a/src/ui/battle-info.ts +++ b/src/ui/battle-info.ts @@ -326,7 +326,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.teraIcon.setVisible(this.lastTeraType !== Type.UNKNOWN); this.teraIcon.on("pointerover", () => { if (this.lastTeraType !== Type.UNKNOWN) { - (this.scene as BattleScene).ui.showTooltip("", i18next.t("fightUiHandler:teraHover", {type: i18next.t(`pokemonInfo:Type.${Type[this.lastTeraType]}`) })); + (this.scene as BattleScene).ui.showTooltip("", i18next.t("fightUiHandler:teraHover", { type: i18next.t(`pokemonInfo:Type.${Type[this.lastTeraType]}`) })); } }); this.teraIcon.on("pointerout", () => (this.scene as BattleScene).ui.hideTooltip()); diff --git a/src/ui/battle-message-ui-handler.ts b/src/ui/battle-message-ui-handler.ts index c27c6974192..832d665b290 100644 --- a/src/ui/battle-message-ui-handler.ts +++ b/src/ui/battle-message-ui-handler.ts @@ -4,7 +4,7 @@ import { Mode } from "./ui"; import MessageUiHandler from "./message-ui-handler"; import { addWindow } from "./ui-theme"; import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; -import {Button} from "#enums/buttons"; +import { Button } from "#enums/buttons"; import i18next from "i18next"; import { Stat, PERMANENT_STATS, getStatKey } from "#app/enums/stat"; @@ -55,7 +55,7 @@ export default class BattleMessageUiHandler extends MessageUiHandler { moveDetailsWindow.setName("move-details-window"); moveDetailsWindow.setOrigin(0, 1); - this.movesWindowContainer.add([movesWindow, moveDetailsWindow]); + this.movesWindowContainer.add([ movesWindow, moveDetailsWindow ]); ui.add(this.movesWindowContainer); const messageContainer = this.scene.add.container(12, -39); @@ -113,7 +113,7 @@ export default class BattleMessageUiHandler extends MessageUiHandler { this.levelUpStatsIncrContent = levelUpStatsIncrContent; - const levelUpStatsValuesContent = addBBCodeTextObject(this.scene, (this.scene.game.canvas.width / 6) - 7, -94, "", TextStyle.WINDOW, { maxLines: 6, lineSpacing: 5}); + const levelUpStatsValuesContent = addBBCodeTextObject(this.scene, (this.scene.game.canvas.width / 6) - 7, -94, "", TextStyle.WINDOW, { maxLines: 6, lineSpacing: 5 }); levelUpStatsValuesContent.setLineSpacing(i18next.resolvedLanguage === "ja" ? 25 : 5); levelUpStatsValuesContent.setOrigin(1, 0); levelUpStatsValuesContent.setAlign("right"); diff --git a/src/ui/bgm-bar.ts b/src/ui/bgm-bar.ts index 936ab91d8fa..616b3ff87cf 100644 --- a/src/ui/bgm-bar.ts +++ b/src/ui/bgm-bar.ts @@ -1,5 +1,5 @@ import BattleScene from "../battle-scene"; -import {addTextObject, TextStyle} from "./text"; +import { addTextObject, TextStyle } from "./text"; import i18next from "i18next"; import * as Utils from "#app/utils"; @@ -88,6 +88,6 @@ export default class BgmBar extends Phaser.GameObjects.Container { } getRealBgmName(bgmName: string): string { - return i18next.t([`bgmName:${bgmName}`, "bgmName:missing_entries"], {name: Utils.formatText(bgmName)}); + return i18next.t([ `bgmName:${bgmName}`, "bgmName:missing_entries" ], { name: Utils.formatText(bgmName) }); } } diff --git a/src/ui/challenges-select-ui-handler.ts b/src/ui/challenges-select-ui-handler.ts index 924186de789..b2c0f1a1746 100644 --- a/src/ui/challenges-select-ui-handler.ts +++ b/src/ui/challenges-select-ui-handler.ts @@ -3,7 +3,7 @@ import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import { addWindow } from "./ui-theme"; -import {Button} from "#enums/buttons"; +import { Button } from "#enums/buttons"; import i18next from "i18next"; import { Challenge } from "#app/data/challenge"; import * as Utils from "../utils"; @@ -110,7 +110,7 @@ export default class GameChallengesUiHandler extends UiHandler { }); this.descriptionText.setName("text-desc"); this.scene.add.existing(this.descriptionText); - this.descriptionText.setScale(1/6); + this.descriptionText.setScale(1 / 6); this.descriptionText.setShadow(4, 5, ShadowColor.ORANGE); this.descriptionText.setOrigin(0, 0); diff --git a/src/ui/command-ui-handler.ts b/src/ui/command-ui-handler.ts index 764e71a8c3f..2f65fa0b457 100644 --- a/src/ui/command-ui-handler.ts +++ b/src/ui/command-ui-handler.ts @@ -4,7 +4,7 @@ import PartyUiHandler, { PartyUiMode } from "./party-ui-handler"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import i18next from "i18next"; -import {Button} from "#enums/buttons"; +import { Button } from "#enums/buttons"; import { getPokemonNameWithAffix } from "#app/messages"; import { CommandPhase } from "#app/phases/command-phase"; @@ -67,7 +67,7 @@ export default class CommandUiHandler extends UiHandler { messageHandler.commandWindow.setVisible(true); messageHandler.movesWindowContainer.setVisible(false); messageHandler.message.setWordWrapWidth(1110); - messageHandler.showText(i18next.t("commandUiHandler:actionMessage", {pokemonName: getPokemonNameWithAffix(commandPhase.getPokemon())}), 0); + messageHandler.showText(i18next.t("commandUiHandler:actionMessage", { pokemonName: getPokemonNameWithAffix(commandPhase.getPokemon()) }), 0); if (this.getCursor() === Command.POKEMON) { this.setCursor(Command.FIGHT); } else { diff --git a/src/ui/confirm-ui-handler.ts b/src/ui/confirm-ui-handler.ts index 4a60b0c9689..16dae82d091 100644 --- a/src/ui/confirm-ui-handler.ts +++ b/src/ui/confirm-ui-handler.ts @@ -2,7 +2,7 @@ import BattleScene from "../battle-scene"; import AbstractOptionSelectUiHandler, { OptionSelectConfig } from "./abstact-option-select-ui-handler"; import { Mode } from "./ui"; import i18next from "i18next"; -import {Button} from "#enums/buttons"; +import { Button } from "#enums/buttons"; export default class ConfirmUiHandler extends AbstractOptionSelectUiHandler { diff --git a/src/ui/dropdown.ts b/src/ui/dropdown.ts index 4e1235c211d..eec44480c89 100644 --- a/src/ui/dropdown.ts +++ b/src/ui/dropdown.ts @@ -64,7 +64,7 @@ export class DropDownOption extends Phaser.GameObjects.Container { if (Array.isArray(labels)) { this.labels = labels; } else { - this.labels = labels? [ labels ] : [ new DropDownLabel("") ]; + this.labels = labels ? [ labels ] : [ new DropDownLabel("") ]; } this.currentLabelIndex = 0; const currentLabel = this.labels[this.currentLabelIndex]; @@ -75,12 +75,12 @@ export class DropDownOption extends Phaser.GameObjects.Container { this.add(this.text); // Add to container the sprite for each label if there is one - for (let i=0; i < this.labels.length; i++) { + for (let i = 0; i < this.labels.length; i++) { const sprite = this.labels[i].sprite; if (sprite) { this.add(sprite); sprite.setOrigin(0, 0.5); - if (i!== this.currentLabelIndex) { + if (i !== this.currentLabelIndex) { sprite.setVisible(false); } } @@ -215,7 +215,7 @@ export class DropDownOption extends Phaser.GameObjects.Container { */ setLabelPosition(x: number, y: number) { let textX = x; - for (let i=0; i < this.labels.length; i++) { + for (let i = 0; i < this.labels.length; i++) { const label = this.labels[i]; if (label.sprite) { label.sprite.x = x; @@ -261,7 +261,7 @@ export class DropDownOption extends Phaser.GameObjects.Container { const currentText = this.text.text; for (const label of this.labels) { this.text.setText(label.text); - const spriteWidth = label.sprite? label.sprite.displayWidth + 2 : 0; + const spriteWidth = label.sprite ? label.sprite.displayWidth + 2 : 0; w = Math.max(w, this.text.displayWidth + spriteWidth); } this.text.setText(currentText); @@ -334,7 +334,7 @@ export class DropDown extends Phaser.GameObjects.Container { } getWidth(): number { - return this.window? this.window.width : this.width; + return this.window ? this.window.width : this.width; } toggleVisibility(): void { @@ -460,7 +460,7 @@ export class DropDown extends Phaser.GameObjects.Container { return this.options.filter((_, i) => i > 0).map(option => option.val); } // if nothing is selected and a single option is hovered, return that one - return [this.options[this.cursor].val]; + return [ this.options[this.cursor].val ]; } else if (this.dropDownType === DropDownType.RADIAL) { return this.options.map((option) => { return { val: option.val, state: option.state }; @@ -502,13 +502,13 @@ export class DropDown extends Phaser.GameObjects.Container { switch (this.dropDownType) { case DropDownType.MULTI: case DropDownType.RADIAL: - return compareValues(["val", "state"]); + return compareValues([ "val", "state" ]); case DropDownType.HYBRID: - return compareValues(["val", "state", "cursor"]); + return compareValues([ "val", "state", "cursor" ]); case DropDownType.SINGLE: - return compareValues(["val", "state", "dir"]); + return compareValues([ "val", "state", "dir" ]); default: return false; diff --git a/src/ui/egg-gacha-ui-handler.ts b/src/ui/egg-gacha-ui-handler.ts index e8753122b6d..56cd5299949 100644 --- a/src/ui/egg-gacha-ui-handler.ts +++ b/src/ui/egg-gacha-ui-handler.ts @@ -106,7 +106,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { let pokemonIconX = -20; let pokemonIconY = 6; - if (["de", "es", "fr", "ko", "pt-BR"].includes(currentLanguage)) { + if ([ "de", "es", "fr", "ko", "pt-BR" ].includes(currentLanguage)) { gachaTextStyle = TextStyle.SMALLER_WINDOW_ALT; gachaX = 2; gachaY = 2; @@ -114,7 +114,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { let legendaryLabelX = gachaX; let legendaryLabelY = gachaY; - if (["de", "es"].includes(currentLanguage)) { + if ([ "de", "es" ].includes(currentLanguage)) { pokemonIconX = -25; pokemonIconY = 10; legendaryLabelX = -6; @@ -127,11 +127,11 @@ export default class EggGachaUiHandler extends MessageUiHandler { switch (gachaType as GachaType) { case GachaType.LEGENDARY: - if (["de", "es"].includes(currentLanguage)) { + if ([ "de", "es" ].includes(currentLanguage)) { gachaUpLabel.setAlign("center"); gachaUpLabel.setY(0); } - if (["pt-BR"].includes(currentLanguage)) { + if ([ "pt-BR" ].includes(currentLanguage)) { gachaUpLabel.setX(legendaryLabelX - 2); } else { gachaUpLabel.setX(legendaryLabelX); @@ -139,7 +139,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { gachaUpLabel.setY(legendaryLabelY); const pokemonIcon = this.scene.add.sprite(pokemonIconX, pokemonIconY, "pokemon_icons_0"); - if (["pt-BR"].includes(currentLanguage)) { + if ([ "pt-BR" ].includes(currentLanguage)) { pokemonIcon.setX(pokemonIconX - 2); } pokemonIcon.setScale(0.5); @@ -148,7 +148,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { gachaInfoContainer.add(pokemonIcon); break; case GachaType.MOVE: - if (["de", "es", "fr", "pt-BR"].includes(currentLanguage)) { + if ([ "de", "es", "fr", "pt-BR" ].includes(currentLanguage)) { gachaUpLabel.setAlign("center"); gachaUpLabel.setY(0); } @@ -158,7 +158,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { gachaUpLabel.setOrigin(0.5, 0); break; case GachaType.SHINY: - if (["de", "fr", "ko"].includes(currentLanguage)) { + if ([ "de", "fr", "ko" ].includes(currentLanguage)) { gachaUpLabel.setAlign("center"); gachaUpLabel.setY(0); } @@ -221,7 +221,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { const pullOptionsText = pullOptions.map(option =>{ const desc = option.description.split(" "); if (desc[0].length < 2) { - desc[0] += ["zh", "ko"].includes(resolvedLanguage.substring(0, 2)) ? " " : " "; + desc[0] += [ "zh", "ko" ].includes(resolvedLanguage.substring(0, 2)) ? " " : " "; } if (option.multiplier === multiplierOne) { desc[0] = " " + desc[0]; diff --git a/src/ui/egg-hatch-scene-handler.ts b/src/ui/egg-hatch-scene-handler.ts index 7b01ef7a3a6..1bf58a786e1 100644 --- a/src/ui/egg-hatch-scene-handler.ts +++ b/src/ui/egg-hatch-scene-handler.ts @@ -1,7 +1,7 @@ import BattleScene from "../battle-scene"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; -import {Button} from "#enums/buttons"; +import { Button } from "#enums/buttons"; import { EggHatchPhase } from "#app/phases/egg-hatch-phase"; export default class EggHatchSceneHandler extends UiHandler { diff --git a/src/ui/egg-list-ui-handler.ts b/src/ui/egg-list-ui-handler.ts index 0ebc0f8140e..939f95fabe6 100644 --- a/src/ui/egg-list-ui-handler.ts +++ b/src/ui/egg-list-ui-handler.ts @@ -4,7 +4,7 @@ import PokemonIconAnimHandler, { PokemonIconAnimMode } from "#app/ui/pokemon-ico import { TextStyle, addTextObject } from "#app/ui/text"; import MessageUiHandler from "#app/ui/message-ui-handler"; import { addWindow } from "#app/ui/ui-theme"; -import {Button} from "#enums/buttons"; +import { Button } from "#enums/buttons"; import i18next from "i18next"; import ScrollableGridUiHandler from "#app/ui/scrollable-grid-handler"; import { ScrollBar } from "#app/ui/scroll-bar"; diff --git a/src/ui/evolution-scene-handler.ts b/src/ui/evolution-scene-handler.ts index 76d148d083e..a116a33f373 100644 --- a/src/ui/evolution-scene-handler.ts +++ b/src/ui/evolution-scene-handler.ts @@ -2,7 +2,7 @@ import BattleScene from "../battle-scene"; import MessageUiHandler from "./message-ui-handler"; import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; -import {Button} from "#enums/buttons"; +import { Button } from "#enums/buttons"; export default class EvolutionSceneHandler extends MessageUiHandler { public evolutionContainer: Phaser.GameObjects.Container; diff --git a/src/ui/fight-ui-handler.ts b/src/ui/fight-ui-handler.ts index 59d14ab3bc4..78894a7bf00 100644 --- a/src/ui/fight-ui-handler.ts +++ b/src/ui/fight-ui-handler.ts @@ -7,7 +7,7 @@ import UiHandler from "./ui-handler"; import * as Utils from "../utils"; import { MoveCategory } from "#app/data/move"; import i18next from "i18next"; -import {Button} from "#enums/buttons"; +import { Button } from "#enums/buttons"; import Pokemon, { PokemonMove } from "#app/field/pokemon"; import { CommandPhase } from "#app/phases/command-phase"; import MoveInfoOverlay from "./move-info-overlay"; @@ -188,7 +188,7 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { this.cursorObj?.setVisible(false); } this.scene.tweens.add({ - targets: [this.movesContainer, this.cursorObj], + targets: [ this.movesContainer, this.cursorObj ], duration: Utils.fixedInt(125), ease: "Sine.easeInOut", alpha: visible ? 0 : 1 diff --git a/src/ui/filter-bar.ts b/src/ui/filter-bar.ts index aa0f575d398..bcf7409fce0 100644 --- a/src/ui/filter-bar.ts +++ b/src/ui/filter-bar.ts @@ -104,11 +104,11 @@ export class FilterBar extends Phaser.GameObjects.Container { totalWidth += label.displayWidth + cursorOffset; }); const spacing = (this.width - totalWidth) / (this.labels.length - 1); - for (let i=0; i { const width = statsBgWidth + 2; const height = Math.floor((this.scene.game.canvas.height / 6) - headerBg.height - 2); - const statsBg = addWindow(this.scene, (statsBgWidth - 2) * i, headerBg.height, width, height, false, false, i>0?-3:0, 1); + const statsBg = addWindow(this.scene, (statsBgWidth - 2) * i, headerBg.height, width, height, false, false, i > 0 ? -3 : 0, 1); statsBg.setOrigin(0, 0); return statsBg; }); @@ -276,9 +276,9 @@ export default class GameStatsUiHandler extends UiHandler { // arrows to show that we can scroll through the stats const isLegacyTheme = this.scene.uiTheme === UiTheme.LEGACY; - this.arrowDown = this.scene.add.sprite(statsBgWidth, this.scene.game.canvas.height / 6 - (isLegacyTheme? 9 : 5), "prompt"); + this.arrowDown = this.scene.add.sprite(statsBgWidth, this.scene.game.canvas.height / 6 - (isLegacyTheme ? 9 : 5), "prompt"); this.gameStatsContainer.add(this.arrowDown); - this.arrowUp = this.scene.add.sprite(statsBgWidth, headerBg.height + (isLegacyTheme? 7 : 3), "prompt"); + this.arrowUp = this.scene.add.sprite(statsBgWidth, headerBg.height + (isLegacyTheme ? 7 : 3), "prompt"); this.arrowUp.flipY = true; this.gameStatsContainer.add(this.arrowUp); diff --git a/src/ui/login-form-ui-handler.ts b/src/ui/login-form-ui-handler.ts index 631b2e50b02..192a6cefa7a 100644 --- a/src/ui/login-form-ui-handler.ts +++ b/src/ui/login-form-ui-handler.ts @@ -88,7 +88,7 @@ export default class LoginFormUiHandler extends FormModalUiHandler { } override getButtonLabels(_config?: ModalConfig): string[] { - return [ i18next.t("menu:login"), i18next.t("menu:register")]; + return [ i18next.t("menu:login"), i18next.t("menu:register") ]; } override getReadableErrorMessage(error: string): string { @@ -124,7 +124,7 @@ export default class LoginFormUiHandler extends FormModalUiHandler { // Prevent overlapping overrides on action modification this.submitAction = originalLoginAction; this.sanitizeInputs(); - this.scene.ui.setMode(Mode.LOADING, { buttonActions: [] }); + this.scene.ui.setMode(Mode.LOADING, { buttonActions: []}); const onFail = error => { this.scene.ui.setMode(Mode.LOGIN_FORM, Object.assign(config, { errorMessage: error?.trim() })); this.scene.ui.playError(); @@ -161,19 +161,19 @@ export default class LoginFormUiHandler extends FormModalUiHandler { this.infoContainer.setVisible(false); this.setMouseCursorStyle("default"); //reset cursor - [this.discordImage, this.googleImage, this.usernameInfoImage].forEach((img) => img.off("pointerdown")); + [ this.discordImage, this.googleImage, this.usernameInfoImage ].forEach((img) => img.off("pointerdown")); } private processExternalProvider(config: ModalConfig) : void { this.externalPartyTitle.setText(i18next.t("menu:orUse") ?? ""); - this.externalPartyTitle.setX(20+this.externalPartyTitle.text.length); + this.externalPartyTitle.setX(20 + this.externalPartyTitle.text.length); this.externalPartyTitle.setVisible(true); this.externalPartyContainer.setPositionRelative(this.modalContainer, 175, 0); this.externalPartyContainer.setVisible(true); this.externalPartyBg.setSize(this.externalPartyTitle.text.length + 50, this.modalBg.height); this.getUi().moveTo(this.externalPartyContainer, this.getUi().length - 1); - this.googleImage.setPosition(this.externalPartyBg.width/3.1, this.externalPartyBg.height-60); - this.discordImage.setPosition(this.externalPartyBg.width/3.1, this.externalPartyBg.height-40); + this.googleImage.setPosition(this.externalPartyBg.width / 3.1, this.externalPartyBg.height - 60); + this.discordImage.setPosition(this.externalPartyBg.width / 3.1, this.externalPartyBg.height - 40); this.infoContainer.setPosition(5, -76); this.infoContainer.setVisible(true); @@ -195,7 +195,7 @@ export default class LoginFormUiHandler extends FormModalUiHandler { }); const onFail = error => { - this.scene.ui.setMode(Mode.LOADING, { buttonActions: [] }); + this.scene.ui.setMode(Mode.LOADING, { buttonActions: []}); this.scene.ui.setModeForceTransition(Mode.LOGIN_FORM, Object.assign(config, { errorMessage: error?.trim() })); this.scene.ui.playError(); }; diff --git a/src/ui/menu-ui-handler.ts b/src/ui/menu-ui-handler.ts index 0af527e518f..adebf9fb912 100644 --- a/src/ui/menu-ui-handler.ts +++ b/src/ui/menu-ui-handler.ts @@ -65,8 +65,8 @@ export default class MenuUiHandler extends MessageUiHandler { super(scene, mode); this.excludedMenus = () => [ - { condition: [Mode.COMMAND, Mode.TITLE].includes(mode ?? Mode.TITLE), options: [MenuOptions.EGG_GACHA, MenuOptions.EGG_LIST] }, - { condition: bypassLogin, options: [MenuOptions.LOG_OUT] } + { condition: [ Mode.COMMAND, Mode.TITLE ].includes(mode ?? Mode.TITLE), options: [ MenuOptions.EGG_GACHA, MenuOptions.EGG_LIST ]}, + { condition: bypassLogin, options: [ MenuOptions.LOG_OUT ]} ]; this.menuOptions = Utils.getEnumKeys(MenuOptions) @@ -80,7 +80,7 @@ export default class MenuUiHandler extends MessageUiHandler { const ui = this.getUi(); // wiki url directs based on languges available on wiki const lang = i18next.resolvedLanguage?.substring(0, 2)!; // TODO: is this bang correct? - if (["de", "fr", "ko", "zh"].includes(lang)) { + if ([ "de", "fr", "ko", "zh" ].includes(lang)) { wikiUrl = `https://wiki.pokerogue.net/${lang}:start`; } @@ -108,8 +108,8 @@ export default class MenuUiHandler extends MessageUiHandler { render() { const ui = this.getUi(); this.excludedMenus = () => [ - { condition: this.scene.getCurrentPhase() instanceof SelectModifierPhase, options: [MenuOptions.EGG_GACHA, MenuOptions.EGG_LIST] }, - { condition: bypassLogin, options: [MenuOptions.LOG_OUT] } + { condition: this.scene.getCurrentPhase() instanceof SelectModifierPhase, options: [ MenuOptions.EGG_GACHA, MenuOptions.EGG_LIST ]}, + { condition: bypassLogin, options: [ MenuOptions.LOG_OUT ]} ]; this.menuOptions = Utils.getEnumKeys(MenuOptions) diff --git a/src/ui/modal-ui-handler.ts b/src/ui/modal-ui-handler.ts index 80a39d7bf7f..60204f18c4a 100644 --- a/src/ui/modal-ui-handler.ts +++ b/src/ui/modal-ui-handler.ts @@ -3,7 +3,7 @@ import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import { WindowVariant, addWindow } from "./ui-theme"; -import {Button} from "#enums/buttons"; +import { Button } from "#enums/buttons"; export interface ModalConfig { buttonActions: Function[]; @@ -92,7 +92,7 @@ export abstract class ModalUiHandler extends UiHandler { if (args[0].hasOwnProperty("fadeOut") && typeof args[0].fadeOut === "function") { const [ marginTop, marginRight, marginBottom, marginLeft ] = this.getMargin(); - const overlay = this.scene.add.rectangle(( this.getWidth() + marginLeft + marginRight) / 2, (this.getHeight() + marginTop + marginBottom) / 2, this.scene.game.canvas.width / 6, this.scene.game.canvas.height /6, 0); + const overlay = this.scene.add.rectangle(( this.getWidth() + marginLeft + marginRight) / 2, (this.getHeight() + marginTop + marginBottom) / 2, this.scene.game.canvas.width / 6, this.scene.game.canvas.height / 6, 0); overlay.setOrigin(0.5, 0.5); overlay.setName("rect-ui-overlay-modal"); overlay.setAlpha(0); diff --git a/src/ui/modifier-select-ui-handler.ts b/src/ui/modifier-select-ui-handler.ts index a1e10d74c64..9f2fb731022 100644 --- a/src/ui/modifier-select-ui-handler.ts +++ b/src/ui/modifier-select-ui-handler.ts @@ -283,7 +283,7 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { }); this.scene.tweens.add({ - targets: [this.rerollButtonContainer, this.lockRarityButtonContainer], + targets: [ this.rerollButtonContainer, this.lockRarityButtonContainer ], alpha: this.rerollCost < 0 ? 0.5 : 1, duration: 250 }); diff --git a/src/ui/move-info-overlay.ts b/src/ui/move-info-overlay.ts index 42026082b36..6c58d32c515 100644 --- a/src/ui/move-info-overlay.ts +++ b/src/ui/move-info-overlay.ts @@ -1,4 +1,4 @@ -import BattleScene, {InfoToggle} from "../battle-scene"; +import BattleScene, { InfoToggle } from "../battle-scene"; import { TextStyle, addTextObject } from "./text"; import { addWindow } from "./ui-theme"; import * as Utils from "../utils"; @@ -62,7 +62,7 @@ export default class MoveInfoOverlay extends Phaser.GameObjects.Container implem this.add(this.descBg); // set up the description; wordWrap uses true pixels, unaffected by any scaling, while other values are affected - this.desc = addTextObject(scene, (options?.onSide && !options?.right ? EFF_WIDTH : 0) + BORDER, (options?.top ? EFF_HEIGHT : 0) + BORDER - 2, "", TextStyle.BATTLE_INFO, { wordWrap: { width: (width - (BORDER - 2) * 2 - (options?.onSide ? EFF_WIDTH : 0)) * GLOBAL_SCALE } }); + this.desc = addTextObject(scene, (options?.onSide && !options?.right ? EFF_WIDTH : 0) + BORDER, (options?.top ? EFF_HEIGHT : 0) + BORDER - 2, "", TextStyle.BATTLE_INFO, { wordWrap: { width: (width - (BORDER - 2) * 2 - (options?.onSide ? EFF_WIDTH : 0)) * GLOBAL_SCALE }}); this.desc.setLineSpacing(i18next.resolvedLanguage === "ja" ? 25 : 5); // limit the text rendering, required for scrolling later on diff --git a/src/ui/mystery-encounter-ui-handler.ts b/src/ui/mystery-encounter-ui-handler.ts index edff5c25cda..0a838707432 100644 --- a/src/ui/mystery-encounter-ui-handler.ts +++ b/src/ui/mystery-encounter-ui-handler.ts @@ -438,7 +438,7 @@ export default class MysteryEncounterUiHandler extends UiHandler { const ballType = getPokeballAtlasKey(index); this.rarityBall.setTexture("pb", ballType); - const descriptionTextObject = addBBCodeTextObject(this.scene, 6, 25, descriptionText ?? "", TextStyle.TOOLTIP_CONTENT, { wordWrap: { width: 830 } }); + const descriptionTextObject = addBBCodeTextObject(this.scene, 6, 25, descriptionText ?? "", TextStyle.TOOLTIP_CONTENT, { wordWrap: { width: 830 }}); // Sets up the mask that hides the description text to give an illusion of scrolling const descriptionTextMaskRect = this.scene.make.graphics({}); @@ -472,7 +472,7 @@ export default class MysteryEncounterUiHandler extends UiHandler { this.descriptionContainer.add(descriptionTextObject); - const queryTextObject = addBBCodeTextObject(this.scene, 0, 0, queryText ?? "", TextStyle.TOOLTIP_CONTENT, { wordWrap: { width: 830 } }); + const queryTextObject = addBBCodeTextObject(this.scene, 0, 0, queryText ?? "", TextStyle.TOOLTIP_CONTENT, { wordWrap: { width: 830 }}); this.descriptionContainer.add(queryTextObject); queryTextObject.setPosition(75 - queryTextObject.displayWidth / 2, 90); @@ -518,7 +518,7 @@ export default class MysteryEncounterUiHandler extends UiHandler { // Auto-color options green/blue for good/bad by looking for (+)/(-) if (text) { - const primaryStyleString = [...text.match(new RegExp(/\[color=[^\[]*\]\[shadow=[^\[]*\]/i))!][0]; + const primaryStyleString = [ ...text.match(new RegExp(/\[color=[^\[]*\]\[shadow=[^\[]*\]/i))! ][0]; text = text.replace(/(\(\+\)[^\(\[]*)/gi, substring => "[/color][/shadow]" + getBBCodeFrag(substring, TextStyle.SUMMARY_GREEN) + "[/color][/shadow]" + primaryStyleString); text = text.replace(/(\(\-\)[^\(\[]*)/gi, substring => "[/color][/shadow]" + getBBCodeFrag(substring, TextStyle.SUMMARY_BLUE) + "[/color][/shadow]" + primaryStyleString); } diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index 72b34731842..e7c1b02cf01 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -14,7 +14,7 @@ import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import { addWindow } from "#app/ui/ui-theme"; import { SpeciesFormChangeItemTrigger, FormChangeItem } from "#app/data/pokemon-forms"; import { getVariantTint } from "#app/data/variant"; -import {Button} from "#enums/buttons"; +import { Button } from "#enums/buttons"; import { applyChallenges, ChallengeType } from "#app/data/challenge"; import MoveInfoOverlay from "#app/ui/move-info-overlay"; import i18next from "i18next"; @@ -216,7 +216,7 @@ export default class PartyUiHandler extends MessageUiHandler { public static NoEffectMessage = i18next.t("partyUiHandler:anyEffect"); - private localizedOptions = [PartyOption.SEND_OUT, PartyOption.SUMMARY, PartyOption.CANCEL, PartyOption.APPLY, PartyOption.RELEASE, PartyOption.TEACH, PartyOption.SPLICE, PartyOption.UNSPLICE, PartyOption.REVIVE, PartyOption.TRANSFER, PartyOption.UNPAUSE_EVOLUTION, PartyOption.PASS_BATON, PartyOption.RENAME, PartyOption.SELECT]; + private localizedOptions = [ PartyOption.SEND_OUT, PartyOption.SUMMARY, PartyOption.CANCEL, PartyOption.APPLY, PartyOption.RELEASE, PartyOption.TEACH, PartyOption.SPLICE, PartyOption.UNSPLICE, PartyOption.REVIVE, PartyOption.TRANSFER, PartyOption.UNPAUSE_EVOLUTION, PartyOption.PASS_BATON, PartyOption.RENAME, PartyOption.SELECT ]; constructor(scene: BattleScene) { super(scene, Mode.PARTY); @@ -468,7 +468,7 @@ export default class PartyUiHandler extends MessageUiHandler { this.clearOptions(); ui.playSelect(); pokemon.pauseEvolutions = !pokemon.pauseEvolutions; - this.showText(i18next.t(pokemon.pauseEvolutions? "partyUiHandler:pausedEvolutions" : "partyUiHandler:unpausedEvolutions", { pokemonName: getPokemonNameWithAffix(pokemon) }), undefined, () => this.showText("", 0), null, true); + this.showText(i18next.t(pokemon.pauseEvolutions ? "partyUiHandler:pausedEvolutions" : "partyUiHandler:unpausedEvolutions", { pokemonName: getPokemonNameWithAffix(pokemon) }), undefined, () => this.showText("", 0), null, true); } else if (option === PartyOption.UNSPLICE) { this.clearOptions(); ui.playSelect(); @@ -1240,7 +1240,7 @@ class PartySlot extends Phaser.GameObjects.Container { slotLevelText.setPositionRelative(slotLevelLabel, 9, 0); slotLevelText.setOrigin(0, 0.25); - slotInfoContainer.add([this.slotName, slotLevelLabel, slotLevelText ]); + slotInfoContainer.add([ this.slotName, slotLevelLabel, slotLevelText ]); const genderSymbol = getGenderSymbol(this.pokemon.getGender(true)); @@ -1323,7 +1323,7 @@ class PartySlot extends Phaser.GameObjects.Container { this.slotDescriptionLabel.setOrigin(0, 1); this.slotDescriptionLabel.setVisible(false); - slotInfoContainer.add([this.slotHpBar, this.slotHpOverlay, this.slotHpText, this.slotDescriptionLabel]); + slotInfoContainer.add([ this.slotHpBar, this.slotHpOverlay, this.slotHpText, this.slotDescriptionLabel ]); if (partyUiMode !== PartyUiMode.TM_MODIFIER) { this.slotDescriptionLabel.setVisible(false); diff --git a/src/ui/pokemon-hatch-info-container.ts b/src/ui/pokemon-hatch-info-container.ts index 2c3f5110f53..146d70522fd 100644 --- a/src/ui/pokemon-hatch-info-container.ts +++ b/src/ui/pokemon-hatch-info-container.ts @@ -47,11 +47,11 @@ export default class PokemonHatchInfoContainer extends PokemonInfoContainer { this.pokemonListContainer.add(this.currentPokemonSprite); // setup name and number - this.pokemonNumberText = addTextObject(this.scene, 80, 107.5, "0000", TextStyle.SUMMARY, {fontSize: 74}); + this.pokemonNumberText = addTextObject(this.scene, 80, 107.5, "0000", TextStyle.SUMMARY, { fontSize: 74 }); this.pokemonNumberText.setOrigin(0, 0); this.pokemonListContainer.add(this.pokemonNumberText); - this.pokemonNameText = addTextObject(this.scene, 7, 107.5, "", TextStyle.SUMMARY, {fontSize: 74}); + this.pokemonNameText = addTextObject(this.scene, 7, 107.5, "", TextStyle.SUMMARY, { fontSize: 74 }); this.pokemonNameText.setOrigin(0, 0); this.pokemonListContainer.add(this.pokemonNameText); @@ -89,7 +89,7 @@ export default class PokemonHatchInfoContainer extends PokemonInfoContainer { const eggMoveBg = this.scene.add.nineslice(70, 0, "type_bgs", "unknown", 92, 14, 2, 2, 2, 2); eggMoveBg.setOrigin(1, 0); - const eggMoveLabel = addTextObject(this.scene, 70 -eggMoveBg.width / 2, 0, "???", TextStyle.PARTY); + const eggMoveLabel = addTextObject(this.scene, 70 - eggMoveBg.width / 2, 0, "???", TextStyle.PARTY); eggMoveLabel.setOrigin(0.5, 0); this.pokemonEggMoveBgs.push(eggMoveBg); diff --git a/src/ui/registration-form-ui-handler.ts b/src/ui/registration-form-ui-handler.ts index 0c4b54ac723..c94d060c0b7 100644 --- a/src/ui/registration-form-ui-handler.ts +++ b/src/ui/registration-form-ui-handler.ts @@ -74,7 +74,7 @@ export default class RegistrationFormUiHandler extends FormModalUiHandler { }); const warningMessageFontSize = languageSettings[i18next.resolvedLanguage!]?.warningMessageFontSize ?? "42px"; - const label = addTextObject(this.scene, 10, 87, i18next.t("menu:registrationAgeWarning"), TextStyle.TOOLTIP_CONTENT, { fontSize: warningMessageFontSize}); + const label = addTextObject(this.scene, 10, 87, i18next.t("menu:registrationAgeWarning"), TextStyle.TOOLTIP_CONTENT, { fontSize: warningMessageFontSize }); this.modalContainer.add(label); } @@ -88,7 +88,7 @@ export default class RegistrationFormUiHandler extends FormModalUiHandler { // Prevent overlapping overrides on action modification this.submitAction = originalRegistrationAction; this.sanitizeInputs(); - this.scene.ui.setMode(Mode.LOADING, { buttonActions: [] }); + this.scene.ui.setMode(Mode.LOADING, { buttonActions: []}); const onFail = error => { this.scene.ui.setMode(Mode.REGISTRATION_FORM, Object.assign(config, { errorMessage: error?.trim() })); this.scene.ui.playError(); diff --git a/src/ui/run-history-ui-handler.ts b/src/ui/run-history-ui-handler.ts index d983fb0b0b8..f4de9b21963 100644 --- a/src/ui/run-history-ui-handler.ts +++ b/src/ui/run-history-ui-handler.ts @@ -7,7 +7,7 @@ import * as Utils from "../utils"; import PokemonData from "../system/pokemon-data"; import MessageUiHandler from "./message-ui-handler"; import i18next from "i18next"; -import {Button} from "../enums/buttons"; +import { Button } from "../enums/buttons"; import { BattleType } from "../battle"; import { RunEntry } from "../system/game-data"; import { PlayerGender } from "#enums/player-gender"; @@ -100,7 +100,7 @@ export default class RunHistoryUiHandler extends MessageUiHandler { let success = false; const error = false; - if ([Button.ACTION, Button.CANCEL].includes(button)) { + if ([ Button.ACTION, Button.CANCEL ].includes(button)) { if (button === Button.ACTION) { const cursor = this.cursor + this.scrollCursor; if (this.runs[cursor]) { @@ -186,8 +186,8 @@ export default class RunHistoryUiHandler extends MessageUiHandler { const emptyWindow = addWindow(this.scene, 0, 0, 304, 165); this.runsContainer.add(emptyWindow); const emptyWindowCoordinates = emptyWindow.getCenter(); - const emptyText = addTextObject(this.scene, 0, 0, i18next.t("saveSlotSelectUiHandler:empty"), TextStyle.WINDOW, {fontSize: "128px"}); - emptyText.setPosition(emptyWindowCoordinates.x-18, emptyWindowCoordinates.y-15); + const emptyText = addTextObject(this.scene, 0, 0, i18next.t("saveSlotSelectUiHandler:empty"), TextStyle.WINDOW, { fontSize: "128px" }); + emptyText.setPosition(emptyWindowCoordinates.x - 18, emptyWindowCoordinates.y - 15); this.runsContainer.add(emptyText); } @@ -255,7 +255,7 @@ class RunEntryContainer extends Phaser.GameObjects.Container { public entryData: RunEntry; constructor(scene: BattleScene, entryData: RunEntry, slotId: number) { - super(scene, 0, slotId*56); + super(scene, 0, slotId * 56); this.slotId = slotId; this.entryData = entryData; @@ -295,7 +295,7 @@ class RunEntryContainer extends Phaser.GameObjects.Container { const gameOutcomeLabel = addTextObject(this.scene, 0, 0, `${i18next.t("runHistory:defeatedWild", { context: genderStr })}`, TextStyle.WINDOW); enemyContainer.add(gameOutcomeLabel); data.enemyParty.forEach((enemyData, e) => { - const enemyIconContainer = this.scene.add.container(65+(e*25), -8); + const enemyIconContainer = this.scene.add.container(65 + (e * 25), -8); enemyIconContainer.setScale(0.75); enemyData.boss = false; enemyData["player"] = true; @@ -351,14 +351,14 @@ class RunEntryContainer extends Phaser.GameObjects.Container { const splicedIcon = this.scene.add.image(0, 0, "icon_spliced"); splicedIcon.setScale(0.75); const coords = gameModeLabel.getTopRight(); - splicedIcon.setPosition(coords.x+5, 27); + splicedIcon.setPosition(coords.x + 5, 27); this.add(splicedIcon); // 4 spaces of room for the Spliced icon gameModeLabel.appendText(" - ", false); } else { gameModeLabel.appendText(" - ", false); } - gameModeLabel.appendText(i18next.t("saveSlotSelectUiHandler:wave")+" "+data.waveIndex, false); + gameModeLabel.appendText(i18next.t("saveSlotSelectUiHandler:wave") + " " + data.waveIndex, false); this.add(gameModeLabel); const timestampLabel = addTextObject(this.scene, 8, 33, new Date(data.timestamp).toLocaleString(), TextStyle.WINDOW); diff --git a/src/ui/run-info-ui-handler.ts b/src/ui/run-info-ui-handler.ts index b4e4ad1130d..d5f04f90e5b 100644 --- a/src/ui/run-info-ui-handler.ts +++ b/src/ui/run-info-ui-handler.ts @@ -8,7 +8,7 @@ import { addWindow } from "./ui-theme"; import * as Utils from "../utils"; import PokemonData from "../system/pokemon-data"; import i18next from "i18next"; -import {Button} from "../enums/buttons"; +import { Button } from "../enums/buttons"; import { BattleType } from "../battle"; import { TrainerVariant } from "../field/trainer"; import { Challenges } from "#enums/challenges"; @@ -99,20 +99,20 @@ export default class RunInfoUiHandler extends UiHandler { // Creates Run Result Container this.runResultContainer = this.scene.add.container(0, 24); - const runResultWindow = addWindow(this.scene, 0, 0, this.statsBgWidth-11, 65); + const runResultWindow = addWindow(this.scene, 0, 0, this.statsBgWidth - 11, 65); runResultWindow.setOrigin(0, 0); this.runResultContainer.add(runResultWindow); this.parseRunResult(); // Creates Run Info Container this.runInfoContainer = this.scene.add.container(0, 89); - const runInfoWindow = addWindow(this.scene, 0, 0, this.statsBgWidth-11, 90); + const runInfoWindow = addWindow(this.scene, 0, 0, this.statsBgWidth - 11, 90); const runInfoWindowCoords = runInfoWindow.getBottomRight(); this.runInfoContainer.add(runInfoWindow); this.parseRunInfo(runInfoWindowCoords.x, runInfoWindowCoords.y); // Creates Player Party Container - this.partyContainer = this.scene.add.container(this.statsBgWidth-10, 23); + this.partyContainer = this.scene.add.container(this.statsBgWidth - 10, 23); this.parsePartyInfo(); this.showParty(true); @@ -147,7 +147,7 @@ export default class RunInfoUiHandler extends UiHandler { if (this.runInfo.modifiers.length !== 0) { const headerBgCoords = headerBg.getTopRight(); const abilityButtonContainer = this.scene.add.container(0, 0); - const abilityButtonText = addTextObject(this.scene, 8, 0, i18next.t("runHistory:viewHeldItems"), TextStyle.WINDOW, {fontSize:"34px"}); + const abilityButtonText = addTextObject(this.scene, 8, 0, i18next.t("runHistory:viewHeldItems"), TextStyle.WINDOW, { fontSize:"34px" }); const gamepadType = this.getUi().getGamepadType(); let abilityButtonElement: Phaser.GameObjects.Sprite; if (gamepadType === "touch") { @@ -155,7 +155,7 @@ export default class RunInfoUiHandler extends UiHandler { } else { abilityButtonElement = new Phaser.GameObjects.Sprite(this.scene, 0, 2, gamepadType, this.scene.inputController?.getIconForLatestInputRecorded(SettingKeyboard.Button_Cycle_Ability)); } - abilityButtonContainer.add([abilityButtonText, abilityButtonElement]); + abilityButtonContainer.add([ abilityButtonText, abilityButtonElement ]); abilityButtonContainer.setPosition(headerBgCoords.x - abilityButtonText.displayWidth - abilityButtonElement.displayWidth - 8, 10); this.runContainer.add(abilityButtonContainer); } @@ -178,12 +178,12 @@ export default class RunInfoUiHandler extends UiHandler { const genderStr = PlayerGender[genderIndex]; const runResultTextStyle = this.isVictory ? TextStyle.PERFECT_IV : TextStyle.SUMMARY_RED; const runResultTitle = this.isVictory ? i18next.t("runHistory:victory") : i18next.t("runHistory:defeated", { context: genderStr }); - const runResultText = addTextObject(this.scene, 6, 5, `${runResultTitle} - ${i18next.t("saveSlotSelectUiHandler:wave")} ${this.runInfo.waveIndex}`, runResultTextStyle, {fontSize : "65px", lineSpacing: 0.1}); + const runResultText = addTextObject(this.scene, 6, 5, `${runResultTitle} - ${i18next.t("saveSlotSelectUiHandler:wave")} ${this.runInfo.waveIndex}`, runResultTextStyle, { fontSize : "65px", lineSpacing: 0.1 }); if (this.isVictory) { const hallofFameInstructionContainer = this.scene.add.container(0, 0); - const shinyButtonText = addTextObject(this.scene, 8, 0, i18next.t("runHistory:viewHallOfFame"), TextStyle.WINDOW, {fontSize:"65px"}); - const formButtonText = addTextObject(this.scene, 8, 12, i18next.t("runHistory:viewEndingSplash"), TextStyle.WINDOW, {fontSize:"65px"}); + const shinyButtonText = addTextObject(this.scene, 8, 0, i18next.t("runHistory:viewHallOfFame"), TextStyle.WINDOW, { fontSize:"65px" }); + const formButtonText = addTextObject(this.scene, 8, 12, i18next.t("runHistory:viewEndingSplash"), TextStyle.WINDOW, { fontSize:"65px" }); const gamepadType = this.getUi().getGamepadType(); let shinyButtonElement: Phaser.GameObjects.Sprite; let formButtonElement: Phaser.GameObjects.Sprite; @@ -194,9 +194,9 @@ export default class RunInfoUiHandler extends UiHandler { shinyButtonElement = new Phaser.GameObjects.Sprite(this.scene, 0, 4, gamepadType, this.scene.inputController?.getIconForLatestInputRecorded(SettingKeyboard.Button_Cycle_Shiny)); formButtonElement = new Phaser.GameObjects.Sprite(this.scene, 0, 16, gamepadType, this.scene.inputController?.getIconForLatestInputRecorded(SettingKeyboard.Button_Cycle_Form)); } - hallofFameInstructionContainer.add([shinyButtonText, shinyButtonElement]); + hallofFameInstructionContainer.add([ shinyButtonText, shinyButtonElement ]); - hallofFameInstructionContainer.add([formButtonText, formButtonElement]); + hallofFameInstructionContainer.add([ formButtonText, formButtonElement ]); hallofFameInstructionContainer.setPosition(12, 25); this.runResultContainer.add(hallofFameInstructionContainer); @@ -270,7 +270,7 @@ export default class RunInfoUiHandler extends UiHandler { enemyLevel.setOrigin(1, 0); enemyIconContainer.add(enemyIcon); enemyIconContainer.add(enemyLevel); - enemyIconContainer.setPosition(e*35, 0); + enemyIconContainer.setPosition(e * 35, 0); enemyContainer.add(enemyIconContainer); enemy.destroy(); }); @@ -328,7 +328,7 @@ export default class RunInfoUiHandler extends UiHandler { // 2 Rows x 3 Columns const enemyPartyContainer = this.scene.add.container(0, 0); this.runInfo.enemyParty.forEach((enemyData, e) => { - const pokemonRowHeight = Math.floor(e/3); + const pokemonRowHeight = Math.floor(e / 3); const enemyIconContainer = this.scene.add.container(0, 0); enemyIconContainer.setScale(0.6); const isBoss = enemyData.boss; @@ -348,8 +348,8 @@ export default class RunInfoUiHandler extends UiHandler { enemySprite2.setTint(teraColor.color); } } - enemyIcon.setPosition(39*(e%3)+5, (35*pokemonRowHeight)); - const enemyLevel = addTextObject(this.scene, 43*(e%3), (27*(pokemonRowHeight+1)), `${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatLargeNumber(enemy.level, 1000)}`, isBoss ? TextStyle.PARTY_RED : TextStyle.PARTY, { fontSize: "54px" }); + enemyIcon.setPosition(39 * (e % 3) + 5, (35 * pokemonRowHeight)); + const enemyLevel = addTextObject(this.scene, 43 * (e % 3), (27 * (pokemonRowHeight + 1)), `${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatLargeNumber(enemy.level, 1000)}`, isBoss ? TextStyle.PARTY_RED : TextStyle.PARTY, { fontSize: "54px" }); enemyLevel.setShadow(0, 0, undefined); enemyLevel.setStroke("#424242", 14); enemyLevel.setOrigin(0, 0); @@ -372,9 +372,9 @@ export default class RunInfoUiHandler extends UiHandler { private async parseRunInfo(windowX: number, windowY: number) { // Parsing and displaying the mode. // In the future, parsing Challenges + Challenge Rules may have to be reworked as PokeRogue adds additional challenges and users can stack these challenges in various ways. - const modeText = addBBCodeTextObject(this.scene, 7, 0, "", TextStyle.WINDOW, {fontSize : "50px", lineSpacing:3}); + const modeText = addBBCodeTextObject(this.scene, 7, 0, "", TextStyle.WINDOW, { fontSize : "50px", lineSpacing:3 }); modeText.setPosition(7, 5); - modeText.appendText(i18next.t("runHistory:mode")+": ", false); + modeText.appendText(i18next.t("runHistory:mode") + ": ", false); switch (this.runInfo.gameMode) { case GameModes.DAILY: modeText.appendText(`${i18next.t("gameMode:dailyRun")}`, false); @@ -415,25 +415,25 @@ export default class RunInfoUiHandler extends UiHandler { const runInfoTextContainer = this.scene.add.container(0, 0); // Japanese is set to a greater line spacing of 35px in addBBCodeTextObject() if lineSpacing < 12. const lineSpacing = (i18next.resolvedLanguage === "ja") ? 12 : 3; - const runInfoText = addBBCodeTextObject(this.scene, 7, 0, "", TextStyle.WINDOW, {fontSize: "50px", lineSpacing: lineSpacing}); + const runInfoText = addBBCodeTextObject(this.scene, 7, 0, "", TextStyle.WINDOW, { fontSize: "50px", lineSpacing: lineSpacing }); const runTime = Utils.getPlayTimeString(this.runInfo.playTime); runInfoText.appendText(`${i18next.t("runHistory:runLength")}: ${runTime}`, false); const runMoney = Utils.formatMoney(this.scene.moneyFormat, this.runInfo.money); - runInfoText.appendText(`[color=${getTextColor(TextStyle.MONEY)}]${i18next.t("battleScene:moneyOwned", {formattedMoney : runMoney})}[/color]`); + runInfoText.appendText(`[color=${getTextColor(TextStyle.MONEY)}]${i18next.t("battleScene:moneyOwned", { formattedMoney : runMoney })}[/color]`); runInfoText.setPosition(7, 70); runInfoTextContainer.add(runInfoText); // Luck // Uses the parameters windowX and windowY to dynamically position the luck value neatly into the bottom right corner - const luckText = addBBCodeTextObject(this.scene, 0, 0, "", TextStyle.WINDOW, {fontSize: "55px"}); + const luckText = addBBCodeTextObject(this.scene, 0, 0, "", TextStyle.WINDOW, { fontSize: "55px" }); const luckValue = Phaser.Math.Clamp(this.runInfo.party.map(p => p.toPokemon(this.scene).getLuck()).reduce((total: integer, value: integer) => total += value, 0), 0, 14); - let luckInfo = i18next.t("runHistory:luck")+": "+getLuckString(luckValue); + let luckInfo = i18next.t("runHistory:luck") + ": " + getLuckString(luckValue); if (luckValue < 14) { - luckInfo = "[color=#"+(getLuckTextTint(luckValue)).toString(16)+"]"+luckInfo+"[/color]"; + luckInfo = "[color=#" + (getLuckTextTint(luckValue)).toString(16) + "]" + luckInfo + "[/color]"; } else { luckText.setTint(0xffef5c, 0x47ff69, 0x6b6bff, 0xff6969); } - luckText.appendText("[align=right]"+luckInfo+"[/align]", false); - luckText.setPosition(windowX-luckText.displayWidth-5, windowY-13); + luckText.appendText("[align=right]" + luckInfo + "[/align]", false); + luckText.setPosition(windowX - luckText.displayWidth - 5, windowY - 13); runInfoTextContainer.add(luckText); // Player Held Items @@ -450,8 +450,8 @@ export default class RunInfoUiHandler extends UiHandler { } const icon = modifier?.getIcon(this.scene, false); if (icon) { - const rowHeightModifier = Math.floor(visibleModifierIndex/7); - icon.setPosition(24 * (visibleModifierIndex%7), 20 + (35 * rowHeightModifier)); + const rowHeightModifier = Math.floor(visibleModifierIndex / 7); + icon.setPosition(24 * (visibleModifierIndex % 7), 20 + (35 * rowHeightModifier)); modifierIconsContainer.add(icon); } @@ -483,10 +483,10 @@ export default class RunInfoUiHandler extends UiHandler { rules.push(i18next.t(`runHistory:challengeMonoGen${this.runInfo.challenges[i].value}`)); break; case Challenges.SINGLE_TYPE: - const typeRule = Type[this.runInfo.challenges[i].value-1]; + const typeRule = Type[this.runInfo.challenges[i].value - 1]; const typeTextColor = `[color=${TypeColor[typeRule]}]`; const typeShadowColor = `[shadow=${TypeShadow[typeRule]}]`; - const typeText = typeTextColor + typeShadowColor + i18next.t(`pokemonInfo:Type.${typeRule}`)!+"[/color]"+"[/shadow]"; + const typeText = typeTextColor + typeShadowColor + i18next.t(`pokemonInfo:Type.${typeRule}`)! + "[/color]" + "[/shadow]"; rules.push(typeText); break; case Challenges.FRESH_START: @@ -510,13 +510,13 @@ export default class RunInfoUiHandler extends UiHandler { private parsePartyInfo(): void { const party = this.runInfo.party; const currentLanguage = i18next.resolvedLanguage ?? "en"; - const windowHeight = ((this.scene.game.canvas.height / 6) - 23)/6; + const windowHeight = ((this.scene.game.canvas.height / 6) - 23) / 6; party.forEach((p: PokemonData, i: integer) => { - const pokemonInfoWindow = new RoundRectangle(this.scene, 0, 14, (this.statsBgWidth*2)+10, windowHeight-2, 3); + const pokemonInfoWindow = new RoundRectangle(this.scene, 0, 14, (this.statsBgWidth * 2) + 10, windowHeight - 2, 3); const pokemon = p.toPokemon(this.scene); - const pokemonInfoContainer = this.scene.add.container(this.statsBgWidth+5, (windowHeight-0.5)*i); + const pokemonInfoContainer = this.scene.add.container(this.statsBgWidth + 5, (windowHeight - 0.5) * i); const types = pokemon.getTypes(); const type1 = getTypeRgb(types[0]); @@ -544,18 +544,18 @@ export default class RunInfoUiHandler extends UiHandler { const pName = pokemon.getNameToRender(); //With the exception of Korean/Traditional Chinese/Simplified Chinese, the code shortens the terms for ability and passive to their first letter. //These languages are exempted because they are already short enough. - const exemptedLanguages = ["ko", "zh_CN", "zh_TW"]; + const exemptedLanguages = [ "ko", "zh_CN", "zh_TW" ]; let passiveLabel = i18next.t("starterSelectUiHandler:passive") ?? "-"; let abilityLabel = i18next.t("starterSelectUiHandler:ability") ?? "-"; if (!exemptedLanguages.includes(currentLanguage)) { passiveLabel = passiveLabel.charAt(0); abilityLabel = abilityLabel.charAt(0); } - const pPassiveInfo = pokemon.passive ? passiveLabel+": "+pokemon.getPassiveAbility().name : ""; + const pPassiveInfo = pokemon.passive ? passiveLabel + ": " + pokemon.getPassiveAbility().name : ""; const pAbilityInfo = abilityLabel + ": " + pokemon.getAbility().name; // Japanese is set to a greater line spacing of 35px in addBBCodeTextObject() if lineSpacing < 12. const lineSpacing = (i18next.resolvedLanguage === "ja") ? 12 : 3; - const pokeInfoText = addBBCodeTextObject(this.scene, 0, 0, pName, TextStyle.SUMMARY, {fontSize: textContainerFontSize, lineSpacing: lineSpacing}); + const pokeInfoText = addBBCodeTextObject(this.scene, 0, 0, pName, TextStyle.SUMMARY, { fontSize: textContainerFontSize, lineSpacing: lineSpacing }); pokeInfoText.appendText(`${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatFancyLargeNumber(pokemon.level, 1)} - ${pNatureName}`); pokeInfoText.appendText(pAbilityInfo); pokeInfoText.appendText(pPassiveInfo); @@ -564,27 +564,27 @@ export default class RunInfoUiHandler extends UiHandler { // Pokemon Stats // Colored Arrows (Red/Blue) are placed by stats that are boosted from natures const pokeStatTextContainer = this.scene.add.container(-35, 6); - const pStats : string[]= []; + const pStats : string[] = []; pokemon.stats.forEach((element) => pStats.push(Utils.formatFancyLargeNumber(element, 1))); for (let i = 0; i < pStats.length; i++) { const isMult = getNatureStatMultiplier(pNature, i); pStats[i] = (isMult < 1) ? pStats[i] + "[color=#40c8f8]↓[/color]" : pStats[i]; pStats[i] = (isMult > 1) ? pStats[i] + "[color=#f89890]↑[/color]" : pStats[i]; } - const hp = i18next.t("pokemonInfo:Stat.HPshortened")+": "+pStats[0]; - const atk = i18next.t("pokemonInfo:Stat.ATKshortened")+": "+pStats[1]; - const def = i18next.t("pokemonInfo:Stat.DEFshortened")+": "+pStats[2]; - const spatk = i18next.t("pokemonInfo:Stat.SPATKshortened")+": "+pStats[3]; - const spdef = i18next.t("pokemonInfo:Stat.SPDEFshortened")+": "+pStats[4]; - const speedLabel = (currentLanguage==="es"||currentLanguage==="pt_BR") ? i18next.t("runHistory:SPDshortened") : i18next.t("pokemonInfo:Stat.SPDshortened"); - const speed = speedLabel+": "+pStats[5]; + const hp = i18next.t("pokemonInfo:Stat.HPshortened") + ": " + pStats[0]; + const atk = i18next.t("pokemonInfo:Stat.ATKshortened") + ": " + pStats[1]; + const def = i18next.t("pokemonInfo:Stat.DEFshortened") + ": " + pStats[2]; + const spatk = i18next.t("pokemonInfo:Stat.SPATKshortened") + ": " + pStats[3]; + const spdef = i18next.t("pokemonInfo:Stat.SPDEFshortened") + ": " + pStats[4]; + const speedLabel = (currentLanguage === "es" || currentLanguage === "pt_BR") ? i18next.t("runHistory:SPDshortened") : i18next.t("pokemonInfo:Stat.SPDshortened"); + const speed = speedLabel + ": " + pStats[5]; // Column 1: HP Atk Def - const pokeStatText1 = addBBCodeTextObject(this.scene, -5, 0, hp, TextStyle.SUMMARY, {fontSize: textContainerFontSize, lineSpacing: lineSpacing}); + const pokeStatText1 = addBBCodeTextObject(this.scene, -5, 0, hp, TextStyle.SUMMARY, { fontSize: textContainerFontSize, lineSpacing: lineSpacing }); pokeStatText1.appendText(atk); pokeStatText1.appendText(def); pokeStatTextContainer.add(pokeStatText1); // Column 2: SpAtk SpDef Speed - const pokeStatText2 = addBBCodeTextObject(this.scene, 25, 0, spatk, TextStyle.SUMMARY, {fontSize: textContainerFontSize, lineSpacing: lineSpacing}); + const pokeStatText2 = addBBCodeTextObject(this.scene, 25, 0, spatk, TextStyle.SUMMARY, { fontSize: textContainerFontSize, lineSpacing: lineSpacing }); pokeStatText2.appendText(spdef); pokeStatText2.appendText(speed); pokeStatTextContainer.add(pokeStatText2); @@ -612,7 +612,7 @@ export default class RunInfoUiHandler extends UiHandler { const fusionShinyStar = this.scene.add.image(0, 0, "shiny_star_small_2"); fusionShinyStar.setOrigin(0, 0); fusionShinyStar.setScale(0.5); - fusionShinyStar.setPosition(shinyStar.x+1, shinyStar.y+1); + fusionShinyStar.setPosition(shinyStar.x + 1, shinyStar.y + 1); fusionShinyStar.setTint(getVariantTint(pokemon.fusionVariant)); marksContainer.add(fusionShinyStar); this.getUi().bringToTop(fusionShinyStar); @@ -625,7 +625,7 @@ export default class RunInfoUiHandler extends UiHandler { const movesetContainer = this.scene.add.container(70, -29); const pokemonMoveBgs : Phaser.GameObjects.NineSlice[] = []; const pokemonMoveLabels : Phaser.GameObjects.Text[] = []; - const movePos = [[-6.5, 35.5], [37, 35.5], [-6.5, 43.5], [37, 43.5]]; + const movePos = [[ -6.5, 35.5 ], [ 37, 35.5 ], [ -6.5, 43.5 ], [ 37, 43.5 ]]; for (let m = 0; m < pokemonMoveset?.length; m++) { const moveContainer = this.scene.add.container(movePos[m][0], movePos[m][1]); moveContainer.setScale(0.5); @@ -660,7 +660,7 @@ export default class RunInfoUiHandler extends UiHandler { if (heldItemsList.length > 0) { (heldItemsList as Modifier.PokemonHeldItemModifier[]).sort(Modifier.modifierSortFunc); let row = 0; - for (const [index, item] of heldItemsList.entries()) { + for (const [ index, item ] of heldItemsList.entries()) { if ( index > 36 ) { const overflowIcon = addTextObject(this.scene, 182, 4, "+", TextStyle.WINDOW); heldItemsContainer.add(overflowIcon); @@ -671,7 +671,7 @@ export default class RunInfoUiHandler extends UiHandler { itemIcon.list[1].clearTint(); } itemIcon.setScale(heldItemsScale); - itemIcon.setPosition((index%19) * 10, row * 10); + itemIcon.setPosition((index % 19) * 10, row * 10); heldItemsContainer.add(itemIcon); if (index !== 0 && index % 18 === 0) { row++; @@ -754,15 +754,15 @@ export default class RunInfoUiHandler extends UiHandler { endCard.setScale(0.5); const endCardCoords = endCard.getBottomCenter(); const overlayColor = isFemale ? "red" : "blue"; - const hallofFameBg = this.scene.add.image(0, 0, "hall_of_fame_"+overlayColor); + const hallofFameBg = this.scene.add.image(0, 0, "hall_of_fame_" + overlayColor); hallofFameBg.setPosition(159, 89); - hallofFameBg.setSize(this.scene.game.canvas.width, this.scene.game.canvas.height+10); + hallofFameBg.setSize(this.scene.game.canvas.width, this.scene.game.canvas.height + 10); hallofFameBg.setAlpha(0.8); this.hallofFameContainer.add(endCard); this.hallofFameContainer.add(hallofFameBg); const hallofFameText = addTextObject(this.scene, 0, 0, i18next.t("runHistory:hallofFameText", { context: genderStr }), TextStyle.WINDOW); - hallofFameText.setPosition(endCardCoords.x-(hallofFameText.displayWidth/2), 164); + hallofFameText.setPosition(endCardCoords.x - (hallofFameText.displayWidth / 2), 164); this.hallofFameContainer.add(hallofFameText); this.runInfo.party.forEach((p, i) => { const pkmn = p.toPokemon(this.scene); diff --git a/src/ui/settings/abstract-binding-ui-handler.ts b/src/ui/settings/abstract-binding-ui-handler.ts index 5e6dd80c6d6..9ee741f7bd4 100644 --- a/src/ui/settings/abstract-binding-ui-handler.ts +++ b/src/ui/settings/abstract-binding-ui-handler.ts @@ -1,10 +1,10 @@ import UiHandler from "../ui-handler"; import BattleScene from "../../battle-scene"; -import {Mode} from "../ui"; -import {addWindow} from "../ui-theme"; -import {addTextObject, TextStyle} from "../text"; -import {Button} from "#enums/buttons"; -import {NavigationManager} from "#app/ui/settings/navigationMenu"; +import { Mode } from "../ui"; +import { addWindow } from "../ui-theme"; +import { addTextObject, TextStyle } from "../text"; +import { Button } from "#enums/buttons"; +import { NavigationManager } from "#app/ui/settings/navigationMenu"; import i18next from "i18next"; type CancelFn = (succes?: boolean) => boolean; @@ -88,7 +88,7 @@ export default abstract class AbstractBindingUiHandler extends UiHandler { this.timerText = addTextObject(this.scene, 0, 0, "(5)", TextStyle.WINDOW); this.timerText.setOrigin(0, 0); - this.timerText.setPositionRelative(this.unlockText, (this.unlockText.width/6) + 5, 0); + this.timerText.setPositionRelative(this.unlockText, (this.unlockText.width / 6) + 5, 0); this.optionSelectContainer.add(this.timerText); this.optionSelectBg = addWindow(this.scene, (this.scene.game.canvas.width / 6) - this.getWindowWidth(), -(this.scene.game.canvas.height / 6) + this.getWindowHeight() + 28, this.getWindowWidth(), this.getWindowHeight()); diff --git a/src/ui/settings/abstract-control-settings-ui-handler.ts b/src/ui/settings/abstract-control-settings-ui-handler.ts index efa262bb2e9..477eaf0a68b 100644 --- a/src/ui/settings/abstract-control-settings-ui-handler.ts +++ b/src/ui/settings/abstract-control-settings-ui-handler.ts @@ -120,7 +120,7 @@ export default abstract class AbstractControlSettingsUiHandler extends UiHandler const actionText = addTextObject(this.scene, 0, 0, i18next.t("settings:action"), TextStyle.SETTINGS_LABEL); actionText.setOrigin(0, 0.15); - actionText.setPositionRelative(iconAction, -actionText.width/6-2, 0); + actionText.setPositionRelative(iconAction, -actionText.width / 6 - 2, 0); const iconCancel = this.scene.add.sprite(0, 0, "keyboard"); iconCancel.setOrigin(0, -0.1); @@ -129,7 +129,7 @@ export default abstract class AbstractControlSettingsUiHandler extends UiHandler const cancelText = addTextObject(this.scene, 0, 0, i18next.t("settings:back"), TextStyle.SETTINGS_LABEL); cancelText.setOrigin(0, 0.15); - cancelText.setPositionRelative(iconCancel, -cancelText.width/6-2, 0); + cancelText.setPositionRelative(iconCancel, -cancelText.width / 6 - 2, 0); const iconReset = this.scene.add.sprite(0, 0, "keyboard"); iconReset.setOrigin(0, -0.1); @@ -138,7 +138,7 @@ export default abstract class AbstractControlSettingsUiHandler extends UiHandler const resetText = addTextObject(this.scene, 0, 0, i18next.t("settings:reset"), TextStyle.SETTINGS_LABEL); resetText.setOrigin(0, 0.15); - resetText.setPositionRelative(iconReset, -resetText.width/6-2, 0); + resetText.setPositionRelative(iconReset, -resetText.width / 6 - 2, 0); this.settingsContainer.add(this.optionsBg); this.settingsContainer.add(this.actionsBg); @@ -174,7 +174,7 @@ export default abstract class AbstractControlSettingsUiHandler extends UiHandler // Fetch common setting keys such as 'Controller' and 'Gamepad Support' from gamepad settings. const commonSettingKeys = Object.keys(this.setting).slice(0, this.commonSettingsCount).map(key => this.setting[key]); // Combine common and specific bindings into a single array. - const specificBindingKeys = [...commonSettingKeys, ...Object.keys(config.settings)]; + const specificBindingKeys = [ ...commonSettingKeys, ...Object.keys(config.settings) ]; // Fetch default values for these settings and prepare to highlight selected options. const optionCursors = Object.values(Object.keys(this.settingDeviceDefaults).filter(s => specificBindingKeys.includes(s)).map(k => this.settingDeviceDefaults[k])); // Filter out settings that are not relevant to the current gamepad configuration. @@ -203,7 +203,7 @@ export default abstract class AbstractControlSettingsUiHandler extends UiHandler const valueLabels: Phaser.GameObjects.GameObject[] = []; // Process each option for the current setting. - for (const [o, option] of this.settingDeviceOptions[this.setting[setting]].entries()) { + for (const [ o, option ] of this.settingDeviceOptions[this.setting[setting]].entries()) { // Check if the current setting is for binding keys. if (bindingSettings.includes(this.setting[setting])) { // Create a label for non-null options, typically indicating actionable options like 'change'. @@ -556,7 +556,7 @@ export default abstract class AbstractControlSettingsUiHandler extends UiHandler // Check if the cursor object exists, if not, create it. if (!this.cursorObj) { - const cursorWidth = (this.scene.game.canvas.width / 6) - (this.scrollBar.visible? 16 : 10); + const cursorWidth = (this.scene.game.canvas.width / 6) - (this.scrollBar.visible ? 16 : 10); this.cursorObj = this.scene.add.nineslice(0, 0, "summary_moves_cursor", undefined, cursorWidth, 16, 1, 1, 1, 1); this.cursorObj.setOrigin(0, 0); // Set the origin to the top-left corner. this.optionsContainer.add(this.cursorObj); // Add the cursor to the options container. diff --git a/src/ui/settings/abstract-settings-ui-handler.ts b/src/ui/settings/abstract-settings-ui-handler.ts index 975a32127ff..47eceddc813 100644 --- a/src/ui/settings/abstract-settings-ui-handler.ts +++ b/src/ui/settings/abstract-settings-ui-handler.ts @@ -77,7 +77,7 @@ export default class AbstractSettingsUiHandler extends UiHandler { const actionText = addTextObject(this.scene, 0, 0, i18next.t("settings:action"), TextStyle.SETTINGS_LABEL); actionText.setOrigin(0, 0.15); - actionText.setPositionRelative(iconAction, -actionText.width/6-2, 0); + actionText.setPositionRelative(iconAction, -actionText.width / 6 - 2, 0); const iconCancel = this.scene.add.sprite(0, 0, "keyboard"); iconCancel.setOrigin(0, -0.1); @@ -86,7 +86,7 @@ export default class AbstractSettingsUiHandler extends UiHandler { const cancelText = addTextObject(this.scene, 0, 0, i18next.t("settings:back"), TextStyle.SETTINGS_LABEL); cancelText.setOrigin(0, 0.15); - cancelText.setPositionRelative(iconCancel, -cancelText.width/6-2, 0); + cancelText.setPositionRelative(iconCancel, -cancelText.width / 6 - 2, 0); this.optionsContainer = this.scene.add.container(0, 0); @@ -312,7 +312,7 @@ export default class AbstractSettingsUiHandler extends UiHandler { const ret = super.setCursor(cursor); if (!this.cursorObj) { - const cursorWidth = (this.scene.game.canvas.width / 6) - (this.scrollBar.visible? 16 : 10); + const cursorWidth = (this.scene.game.canvas.width / 6) - (this.scrollBar.visible ? 16 : 10); this.cursorObj = this.scene.add.nineslice(0, 0, "summary_moves_cursor", undefined, cursorWidth, 16, 1, 1, 1, 1); this.cursorObj.setOrigin(0, 0); this.optionsContainer.add(this.cursorObj); diff --git a/src/ui/settings/gamepad-binding-ui-handler.ts b/src/ui/settings/gamepad-binding-ui-handler.ts index 4e5b4576b85..e89529f6453 100644 --- a/src/ui/settings/gamepad-binding-ui-handler.ts +++ b/src/ui/settings/gamepad-binding-ui-handler.ts @@ -1,9 +1,9 @@ import BattleScene from "../../battle-scene"; import AbstractBindingUiHandler from "./abstract-binding-ui-handler"; -import {Mode} from "../ui"; -import {Device} from "#enums/devices"; -import {getIconWithSettingName, getKeyWithKeycode} from "#app/configs/inputs/configHandler"; -import {addTextObject, TextStyle} from "#app/ui/text"; +import { Mode } from "../ui"; +import { Device } from "#enums/devices"; +import { getIconWithSettingName, getKeyWithKeycode } from "#app/configs/inputs/configHandler"; +import { addTextObject, TextStyle } from "#app/ui/text"; export default class GamepadBindingUiHandler extends AbstractBindingUiHandler { @@ -46,7 +46,7 @@ export default class GamepadBindingUiHandler extends AbstractBindingUiHandler { } gamepadButtonDown(pad: Phaser.Input.Gamepad.Gamepad, button: Phaser.Input.Gamepad.Button, value: number): void { - const blacklist = [12, 13, 14, 15]; // d-pad buttons are blacklisted. + const blacklist = [ 12, 13, 14, 15 ]; // d-pad buttons are blacklisted. // Check conditions before processing the button press. if (!this.listening || pad.id.toLowerCase() !== this.getSelectedDevice() || blacklist.includes(button.index) || this.buttonPressed !== null) { return; diff --git a/src/ui/settings/keyboard-binding-ui-handler.ts b/src/ui/settings/keyboard-binding-ui-handler.ts index 043c5fba6a5..52b1a0e385f 100644 --- a/src/ui/settings/keyboard-binding-ui-handler.ts +++ b/src/ui/settings/keyboard-binding-ui-handler.ts @@ -1,9 +1,9 @@ import BattleScene from "../../battle-scene"; import AbstractBindingUiHandler from "./abstract-binding-ui-handler"; -import {Mode} from "../ui"; -import { getKeyWithKeycode} from "#app/configs/inputs/configHandler"; -import {Device} from "#enums/devices"; -import {addTextObject, TextStyle} from "#app/ui/text"; +import { Mode } from "../ui"; +import { getKeyWithKeycode } from "#app/configs/inputs/configHandler"; +import { Device } from "#enums/devices"; +import { addTextObject, TextStyle } from "#app/ui/text"; export default class KeyboardBindingUiHandler extends AbstractBindingUiHandler { diff --git a/src/ui/settings/move-touch-controls-handler.ts b/src/ui/settings/move-touch-controls-handler.ts index cff68fa523d..eda75a54a63 100644 --- a/src/ui/settings/move-touch-controls-handler.ts +++ b/src/ui/settings/move-touch-controls-handler.ts @@ -6,7 +6,6 @@ export const TOUCH_CONTROL_POSITIONS_LANDSCAPE = "touchControlPositionsLandscape export const TOUCH_CONTROL_POSITIONS_PORTRAIT = "touchControlPositionsPortrait"; - type ControlPosition = { id: string, x: number, y: number }; type ConfigurationEventListeners = { @@ -72,7 +71,7 @@ export default class MoveTouchControlsHandler { if (this.inConfigurationMode) { const orientation = document.querySelector("#touchControls #orientation"); if (orientation) { - orientation.textContent = this.isLandscapeMode? "Landscape" : "Portrait"; + orientation.textContent = this.isLandscapeMode ? "Landscape" : "Portrait"; } } const positions = this.getSavedPositionsOfCurrentOrientation() ?? []; @@ -288,7 +287,7 @@ export default class MoveTouchControlsHandler { * @returns All control groups of the touch controls. */ private getControlGroupElements(): HTMLDivElement[] { - return [...document.querySelectorAll("#touchControls .control-group")] as HTMLDivElement[]; + return [ ...document.querySelectorAll("#touchControls .control-group") ] as HTMLDivElement[]; } /** diff --git a/src/ui/settings/navigationMenu.ts b/src/ui/settings/navigationMenu.ts index 7d7761b7b69..45209c220fa 100644 --- a/src/ui/settings/navigationMenu.ts +++ b/src/ui/settings/navigationMenu.ts @@ -1,9 +1,9 @@ import BattleScene from "#app/battle-scene"; -import {Mode} from "#app/ui/ui"; -import {InputsIcons} from "#app/ui/settings/abstract-control-settings-ui-handler"; -import {addTextObject, setTextStyle, TextStyle} from "#app/ui/text"; -import {addWindow} from "#app/ui/ui-theme"; -import {Button} from "#enums/buttons"; +import { Mode } from "#app/ui/ui"; +import { InputsIcons } from "#app/ui/settings/abstract-control-settings-ui-handler"; +import { addTextObject, setTextStyle, TextStyle } from "#app/ui/text"; +import { addWindow } from "#app/ui/ui-theme"; +import { Button } from "#enums/buttons"; import i18next from "i18next"; const LEFT = "LEFT"; @@ -33,7 +33,7 @@ export class NavigationManager { Mode.SETTINGS_GAMEPAD, Mode.SETTINGS_KEYBOARD, ]; - this.labels = [i18next.t("settings:general"), i18next.t("settings:display"), i18next.t("settings:audio"), i18next.t("settings:gamepad"), i18next.t("settings:keyboard")]; + this.labels = [ i18next.t("settings:general"), i18next.t("settings:display"), i18next.t("settings:audio"), i18next.t("settings:gamepad"), i18next.t("settings:keyboard") ]; } public reset() { @@ -134,11 +134,11 @@ export default class NavigationMenu extends Phaser.GameObjects.Container { this.navigationIcons["BUTTON_CYCLE_SHINY"] = iconNextTab; let relative: Phaser.GameObjects.Sprite | Phaser.GameObjects.Text = iconPreviousTab; - let relativeWidth: number = iconPreviousTab.width*6; + let relativeWidth: number = iconPreviousTab.width * 6; for (const label of navigationManager.labels) { const labelText = addTextObject(this.scene, 0, 0, label, TextStyle.SETTINGS_LABEL); labelText.setOrigin(0, 0); - labelText.setPositionRelative(relative, 6 + relativeWidth/6, 0); + labelText.setPositionRelative(relative, 6 + relativeWidth / 6, 0); this.add(labelText); this.headerTitles.push(labelText); relative = labelText; @@ -158,7 +158,7 @@ export default class NavigationMenu extends Phaser.GameObjects.Container { const navigationManager = NavigationManager.getInstance(); const posSelected = navigationManager.modes.indexOf(navigationManager.selectedMode); - for (const [index, title] of this.headerTitles.entries()) { + for (const [ index, title ] of this.headerTitles.entries()) { setTextStyle(title, this.scene, index === posSelected ? TextStyle.SETTINGS_SELECTED : TextStyle.SETTINGS_LABEL); } } diff --git a/src/ui/settings/settings-gamepad-ui-handler.ts b/src/ui/settings/settings-gamepad-ui-handler.ts index 63a9d2ab23b..864142e055b 100644 --- a/src/ui/settings/settings-gamepad-ui-handler.ts +++ b/src/ui/settings/settings-gamepad-ui-handler.ts @@ -1,6 +1,6 @@ import BattleScene from "../../battle-scene"; -import {addTextObject, TextStyle} from "../text"; -import {Mode} from "../ui"; +import { addTextObject, TextStyle } from "../text"; +import { Mode } from "../ui"; import { setSettingGamepad, SettingGamepad, @@ -11,10 +11,10 @@ import { import pad_xbox360 from "#app/configs/inputs/pad_xbox360"; import pad_dualshock from "#app/configs/inputs/pad_dualshock"; import pad_unlicensedSNES from "#app/configs/inputs/pad_unlicensedSNES"; -import {InterfaceConfig} from "#app/inputs-controller"; +import { InterfaceConfig } from "#app/inputs-controller"; import AbstractControlSettingsUiHandler from "#app/ui/settings/abstract-control-settings-ui-handler"; -import {Device} from "#enums/devices"; -import {truncateString} from "#app/utils"; +import { Device } from "#enums/devices"; +import { truncateString } from "#app/utils"; import i18next from "i18next"; /** @@ -37,7 +37,7 @@ export default class SettingsGamepadUiHandler extends AbstractControlSettingsUiH this.setting = SettingGamepad; this.settingDeviceDefaults = settingGamepadDefaults; this.settingDeviceOptions = settingGamepadOptions; - this.configs = [pad_xbox360, pad_dualshock, pad_unlicensedSNES]; + this.configs = [ pad_xbox360, pad_dualshock, pad_unlicensedSNES ]; this.commonSettingsCount = 2; this.localStoragePropertyName = "settingsGamepad"; this.settingBlacklisted = settingGamepadBlackList; @@ -94,7 +94,7 @@ export default class SettingsGamepadUiHandler extends AbstractControlSettingsUiH this.resetScroll(); // Iterate over the keys in the settingDevice enumeration. - for (const [index, key] of Object.keys(this.setting).entries()) { + for (const [ index, key ] of Object.keys(this.setting).entries()) { const setting = this.setting[key]; // Get the actual setting value using the key. // Check if the current setting corresponds to the controller setting. diff --git a/src/ui/settings/settings-keyboard-ui-handler.ts b/src/ui/settings/settings-keyboard-ui-handler.ts index 7e020034bc6..17d91b27c57 100644 --- a/src/ui/settings/settings-keyboard-ui-handler.ts +++ b/src/ui/settings/settings-keyboard-ui-handler.ts @@ -1,5 +1,5 @@ import BattleScene from "../../battle-scene"; -import {Mode} from "../ui"; +import { Mode } from "../ui"; import cfg_keyboard_qwerty from "#app/configs/inputs/cfg_keyboard_qwerty"; import { setSettingKeyboard, @@ -8,13 +8,13 @@ import { settingKeyboardDefaults, settingKeyboardOptions } from "#app/system/settings/settings-keyboard"; -import {reverseValueToKeySetting, truncateString} from "#app/utils"; +import { reverseValueToKeySetting, truncateString } from "#app/utils"; import AbstractControlSettingsUiHandler from "#app/ui/settings/abstract-control-settings-ui-handler"; -import {InterfaceConfig} from "#app/inputs-controller"; -import {addTextObject, TextStyle} from "#app/ui/text"; -import {deleteBind} from "#app/configs/inputs/configHandler"; -import {Device} from "#enums/devices"; -import {NavigationManager} from "#app/ui/settings/navigationMenu"; +import { InterfaceConfig } from "#app/inputs-controller"; +import { addTextObject, TextStyle } from "#app/ui/text"; +import { deleteBind } from "#app/configs/inputs/configHandler"; +import { Device } from "#enums/devices"; +import { NavigationManager } from "#app/ui/settings/navigationMenu"; import i18next from "i18next"; /** @@ -35,7 +35,7 @@ export default class SettingsKeyboardUiHandler extends AbstractControlSettingsUi this.setting = SettingKeyboard; this.settingDeviceDefaults = settingKeyboardDefaults; this.settingDeviceOptions = settingKeyboardOptions; - this.configs = [cfg_keyboard_qwerty]; + this.configs = [ cfg_keyboard_qwerty ]; this.commonSettingsCount = 0; this.textureOverride = "keyboard"; this.localStoragePropertyName = "settingsKeyboard"; @@ -71,13 +71,12 @@ export default class SettingsKeyboardUiHandler extends AbstractControlSettingsUi const deleteText = addTextObject(this.scene, 0, 0, i18next.t("settings:delete"), TextStyle.SETTINGS_LABEL); deleteText.setOrigin(0, 0.15); - deleteText.setPositionRelative(iconDelete, -deleteText.width/6-2, 0); + deleteText.setPositionRelative(iconDelete, -deleteText.width / 6 - 2, 0); this.settingsContainer.add(iconDelete); this.settingsContainer.add(deleteText); - // Map the 'noKeyboard' layout options for easy access. this.layout["noKeyboard"].optionsContainer = optionsContainer; this.layout["noKeyboard"].label = label; @@ -87,7 +86,7 @@ export default class SettingsKeyboardUiHandler extends AbstractControlSettingsUi * Handle the home key press event. */ onHomeDown(): void { - if (![Mode.SETTINGS_KEYBOARD, Mode.SETTINGS_GAMEPAD].includes(this.scene.ui.getMode())) { + if (![ Mode.SETTINGS_KEYBOARD, Mode.SETTINGS_GAMEPAD ].includes(this.scene.ui.getMode())) { return; } this.scene.gameData.resetMappingToFactory(); @@ -142,7 +141,7 @@ export default class SettingsKeyboardUiHandler extends AbstractControlSettingsUi this.updateBindings(); // Iterate over the keys in the settingDevice enumeration. - for (const [index, key] of Object.keys(this.setting).entries()) { + for (const [ index, key ] of Object.keys(this.setting).entries()) { const setting = this.setting[key]; // Get the actual setting value using the key. // Check if the current setting corresponds to the layout setting. diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 38445f79e05..5cc70abf143 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -143,7 +143,7 @@ function calcStarterPosition(index: number, scrollCursor:number = 0): {x: number const x = (index % 9) * 18; const y = yOffset + (Math.floor(index / 9) - scrollCursor) * height; - return {x: x, y: y}; + return { x: x, y: y }; } /** @@ -186,7 +186,7 @@ function findClosestStarterRow(index: number, numberOfRows: number) { const currentY = calcStarterIconY(index) - 13; let smallestDistance = teamWindowHeight; let closestRowIndex = 0; - for (let i=0; i < numberOfRows; i++) { + for (let i = 0; i < numberOfRows; i++) { const distance = Math.abs(currentY - calcStarterPosition(i * 9).y); if (distance < smallestDistance) { closestRowIndex = i; @@ -358,7 +358,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.starterSelectContainer.add(this.shinyOverlay); const starterContainerWindow = addWindow(this.scene, speciesContainerX, filterBarHeight + 1, 175, 161); - const starterContainerBg = this.scene.add.image(speciesContainerX+1, filterBarHeight + 2, "starter_container_bg"); + const starterContainerBg = this.scene.add.image(speciesContainerX + 1, filterBarHeight + 2, "starter_container_bg"); starterContainerBg.setOrigin(0, 0); this.starterSelectContainer.add(starterContainerBg); @@ -588,15 +588,15 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonEggMoveBgs = []; this.pokemonEggMoveLabels = []; - this.valueLimitLabel = addTextObject(this.scene, teamWindowX+17, 150, "0/10", TextStyle.TOOLTIP_CONTENT); + this.valueLimitLabel = addTextObject(this.scene, teamWindowX + 17, 150, "0/10", TextStyle.TOOLTIP_CONTENT); this.valueLimitLabel.setOrigin(0.5, 0); this.starterSelectContainer.add(this.valueLimitLabel); - const startLabel = addTextObject(this.scene, teamWindowX+17, 162, i18next.t("common:start"), TextStyle.TOOLTIP_CONTENT); + const startLabel = addTextObject(this.scene, teamWindowX + 17, 162, i18next.t("common:start"), TextStyle.TOOLTIP_CONTENT); startLabel.setOrigin(0.5, 0); this.starterSelectContainer.add(startLabel); - this.startCursorObj = this.scene.add.nineslice(teamWindowX+4, 160, "select_cursor", undefined, 26, 15, 6, 6, 6, 6); + this.startCursorObj = this.scene.add.nineslice(teamWindowX + 4, 160, "select_cursor", undefined, 26, 15, 6, 6, 6, 6); this.startCursorObj.setVisible(false); this.startCursorObj.setOrigin(0, 0); this.starterSelectContainer.add(this.startCursorObj); @@ -1155,7 +1155,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { ease: "Cubic.easeOut", yoyo: true } - ],}; + ], }; const isPassiveAvailable = this.isPassiveAvailable(species.speciesId); const isValueReductionAvailable = this.isValueReductionAvailable(species.speciesId); @@ -1344,13 +1344,13 @@ export default class StarterSelectUiHandler extends MessageUiHandler { case Button.LEFT: this.startCursorObj.setVisible(false); this.cursorObj.setVisible(true); - success = this.setCursor(onScreenFirstIndex + (onScreenNumberOfRows-1) * 9 + 8); // set last column + success = this.setCursor(onScreenFirstIndex + (onScreenNumberOfRows - 1) * 9 + 8); // set last column success = true; break; case Button.RIGHT: this.startCursorObj.setVisible(false); this.cursorObj.setVisible(true); - success = this.setCursor(onScreenFirstIndex + (onScreenNumberOfRows-1) * 9); // set first column + success = this.setCursor(onScreenFirstIndex + (onScreenNumberOfRows - 1) * 9); // set first column success = true; break; } @@ -1434,7 +1434,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { const ui = this.getUi(); let options: any[] = []; // TODO: add proper type - const [isDupe, removeIndex]: [boolean, number] = this.isInParty(this.lastSpecies); // checks to see if the pokemon is a duplicate; if it is, returns the index that will be removed + const [ isDupe, removeIndex ]: [boolean, number] = this.isInParty(this.lastSpecies); // checks to see if the pokemon is a duplicate; if it is, returns the index that will be removed const isPartyValid = this.isPartyValid(); const isValidForChallenge = new Utils.BooleanHolder(true); @@ -1790,7 +1790,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } this.pokemonCandyCountText.setText(`x${starterData.candyCount}`); - const egg = new Egg({scene: this.scene, species: this.lastSpecies.speciesId, sourceType: EggSourceType.SAME_SPECIES_EGG}); + const egg = new Egg({ scene: this.scene, species: this.lastSpecies.speciesId, sourceType: EggSourceType.SAME_SPECIES_EGG }); egg.addEggToGameData(this.scene); this.scene.gameData.saveSystem().then(success => { @@ -2126,7 +2126,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { break; } } - return [isDupe, removeIndex]; + return [ isDupe, removeIndex ]; } addToParty(species: PokemonSpecies, dexAttr: bigint, abilityIndex: integer, nature: Nature, moveset: StarterMoveset) { @@ -2236,7 +2236,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { controlLabel.setPosition(this.instructionRowX + this.instructionRowTextOffset, this.instructionRowY); iconElement.setVisible(true); controlLabel.setVisible(true); - this.instructionsContainer.add([iconElement, controlLabel]); + this.instructionsContainer.add([ iconElement, controlLabel ]); this.instructionRowY += 8; if (this.instructionRowY >= 24) { this.instructionRowY = 0; @@ -2259,7 +2259,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { controlLabel.setPosition(this.filterInstructionRowX + this.instructionRowTextOffset, this.filterInstructionRowY); iconElement.setVisible(true); controlLabel.setVisible(true); - this.filterInstructionsContainer.add([iconElement, controlLabel]); + this.filterInstructionsContainer.add([ iconElement, controlLabel ]); this.filterInstructionRowY += 8; if (this.filterInstructionRowY >= 24) { this.filterInstructionRowY = 0; @@ -2553,7 +2553,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { const maxColumns = 9; const maxRows = 9; const onScreenFirstIndex = this.scrollCursor * maxColumns; - const onScreenLastIndex = Math.min(this.filteredStarterContainers.length - 1, onScreenFirstIndex + maxRows * maxColumns -1); + const onScreenLastIndex = Math.min(this.filteredStarterContainers.length - 1, onScreenFirstIndex + maxRows * maxColumns - 1); this.starterSelectScrollBar.setScrollCursor(this.scrollCursor); @@ -2719,7 +2719,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonAbilityText.off("pointerover"); this.pokemonPassiveText.off("pointerover"); - const starterAttributes : StarterAttributes | null = species ? {...this.starterPreferences[species.speciesId]} : null; + const starterAttributes : StarterAttributes | null = species ? { ...this.starterPreferences[species.speciesId] } : null; if (starterAttributes?.nature) { // load default nature from stater save data, if set @@ -2778,7 +2778,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { let growthReadable = Utils.toReadableString(GrowthRate[species.growthRate]); const growthAux = growthReadable.replace(" ", "_"); if (i18next.exists("growth:" + growthAux)) { - growthReadable = i18next.t("growth:"+ growthAux as any); + growthReadable = i18next.t("growth:" + growthAux as any); } this.pokemonGrowthRateText.setText(growthReadable); @@ -2951,7 +2951,6 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } - setSpeciesDetails(species: PokemonSpecies, shiny?: boolean, formIndex?: integer, female?: boolean, variant?: Variant, abilityIndex?: integer, natureIndex?: integer, forSeen: boolean = false): void { const oldProps = species ? this.scene.gameData.getSpeciesDexAttrProps(species, this.dexAttrCursor) : null; const oldAbilityIndex = this.abilityCursor > -1 ? this.abilityCursor : this.scene.gameData.getStarterSpeciesDefaultAbilityIndex(species); @@ -2980,7 +2979,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.dexAttrCursor |= this.scene.gameData.getFormAttr(formIndex !== undefined ? formIndex : (formIndex = oldProps!.formIndex)); // TODO: is this bang correct? this.abilityCursor = abilityIndex !== undefined ? abilityIndex : (abilityIndex = oldAbilityIndex); this.natureCursor = natureIndex !== undefined ? natureIndex : (natureIndex = oldNatureIndex); - const [isInParty, partyIndex]: [boolean, number] = this.isInParty(species); // we use this to firstly check if the pokemon is in the party, and if so, to get the party index in order to update the icon image + const [ isInParty, partyIndex ]: [boolean, number] = this.isInParty(species); // we use this to firstly check if the pokemon is in the party, and if so, to get the party index in order to update the icon image if (isInParty) { this.updatePartyIcon(species, partyIndex); } @@ -3077,7 +3076,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { const isVariant3Caught = isShinyCaught && !!(caughtAttr & DexAttr.VARIANT_3); this.canCycleShiny = isNonShinyCaught && isShinyCaught; - this.canCycleVariant = !!shiny && [ isVariant1Caught, isVariant2Caught, isVariant3Caught].filter(v => v).length > 1; + this.canCycleVariant = !!shiny && [ isVariant1Caught, isVariant2Caught, isVariant3Caught ].filter(v => v).length > 1; const isMaleCaught = !!(caughtAttr & DexAttr.MALE); const isFemaleCaught = !!(caughtAttr & DexAttr.FEMALE); diff --git a/src/ui/stats-container.ts b/src/ui/stats-container.ts index 06dd6e7c035..7e026ede83e 100644 --- a/src/ui/stats-container.ts +++ b/src/ui/stats-container.ts @@ -6,12 +6,12 @@ import i18next from "i18next"; const ivChartSize = 24; -const ivChartStatCoordMultipliers = [[0, -1], [0.825, -0.5], [0.825, 0.5], [-0.825, -0.5], [-0.825, 0.5], [0, 1]]; +const ivChartStatCoordMultipliers = [[ 0, -1 ], [ 0.825, -0.5 ], [ 0.825, 0.5 ], [ -0.825, -0.5 ], [ -0.825, 0.5 ], [ 0, 1 ]]; const speedLabelOffset = -3; const sideLabelOffset = 1; -const ivLabelOffset = [0, sideLabelOffset, -sideLabelOffset, sideLabelOffset, -sideLabelOffset, speedLabelOffset]; -const ivChartLabelyOffset= [0, 5, 0, 5, 0, 0]; // doing this so attack does not overlap with (+N) -const ivChartStatIndexes = [0, 1, 2, 5, 4, 3]; // swap special attack and speed +const ivLabelOffset = [ 0, sideLabelOffset, -sideLabelOffset, sideLabelOffset, -sideLabelOffset, speedLabelOffset ]; +const ivChartLabelyOffset = [ 0, 5, 0, 5, 0, 0 ]; // doing this so attack does not overlap with (+N) +const ivChartStatIndexes = [ 0, 1, 2, 5, 4, 3 ]; // swap special attack and speed const defaultIvChartData = new Array(12).fill(null).map(() => 0); @@ -39,7 +39,7 @@ export class StatsContainer extends Phaser.GameObjects.Container { .setStrokeStyle(1, 0x484050); ivChartBorder.setOrigin(0, 0); - const ivChartBgLines = [ [ 0, -1, 0, 1 ], [ -0.825, -0.5, 0.825, 0.5 ], [ 0.825, -0.5, -0.825, 0.5 ] ].map(coords => { + const ivChartBgLines = [[ 0, -1, 0, 1 ], [ -0.825, -0.5, 0.825, 0.5 ], [ 0.825, -0.5, -0.825, 0.5 ]].map(coords => { const line = new Phaser.GameObjects.Line(this.scene, ivChartBg.x, ivChartBg.y, ivChartSize * coords[0], ivChartSize * coords[1], ivChartSize * coords[2], ivChartSize * coords[3], 0xffffff) .setLineWidth(0.5); line.setOrigin(0, 0); diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index d3985b225ff..86b00f512a9 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -685,7 +685,7 @@ export default class SummaryUiHandler extends UiHandler { onComplete: () => { if (forward) { this.populatePageContainer(this.summaryPageContainer); - if (this.cursor===Page.MOVES) { + if (this.cursor === Page.MOVES) { this.moveCursorObj = null; this.showMoveSelect(); this.showMoveEffect(); @@ -785,16 +785,16 @@ export default class SummaryUiHandler extends UiHandler { labelImage: this.scene.add.image(0, 0, "summary_profile_ability"), ability: this.pokemon?.getAbility(true)!, // TODO: is this bang correct? nameText: null, - descriptionText: null}; + descriptionText: null }; - const allAbilityInfo = [this.abilityContainer]; // Creates an array to iterate through + const allAbilityInfo = [ this.abilityContainer ]; // Creates an array to iterate through // Only add to the array and set up displaying a passive if it's unlocked if (this.pokemon?.hasPassive()) { this.passiveContainer = { labelImage: this.scene.add.image(0, 0, "summary_profile_passive"), ability: this.pokemon.getPassiveAbility(), nameText: null, - descriptionText: null}; + descriptionText: null }; allAbilityInfo.push(this.passiveContainer); // Sets up the pixel button prompt image @@ -815,7 +815,7 @@ export default class SummaryUiHandler extends UiHandler { abilityInfo.nameText.setOrigin(0, 1); profileContainer.add(abilityInfo.nameText); - abilityInfo.descriptionText = addTextObject(this.scene, 7, 69, abilityInfo.ability?.description!, TextStyle.WINDOW_ALT, { wordWrap: { width: 1224 } }); // TODO: is this bang correct? + abilityInfo.descriptionText = addTextObject(this.scene, 7, 69, abilityInfo.ability?.description!, TextStyle.WINDOW_ALT, { wordWrap: { width: 1224 }}); // TODO: is this bang correct? abilityInfo.descriptionText.setOrigin(0, 0); profileContainer.add(abilityInfo.descriptionText); @@ -855,7 +855,7 @@ export default class SummaryUiHandler extends UiHandler { const nature = `${getBBCodeFrag(Utils.toReadableString(getNatureName(this.pokemon?.getNature()!)), TextStyle.SUMMARY_RED)}${closeFragment}`; // TODO: is this bang correct? const memoString = i18next.t("pokemonSummary:memoString", { - metFragment: i18next.t(`pokemonSummary:metFragment.${this.pokemon?.metBiome === -1? "apparently": "normal"}`, { + metFragment: i18next.t(`pokemonSummary:metFragment.${this.pokemon?.metBiome === -1 ? "apparently" : "normal"}`, { biome: `${getBBCodeFrag(getBiomeName(this.pokemon?.metBiome!), TextStyle.SUMMARY_RED)}${closeFragment}`, // TODO: is this bang correct? level: `${getBBCodeFrag(this.pokemon?.metLevel.toString()!, TextStyle.SUMMARY_RED)}${closeFragment}`, // TODO: is this bang correct? wave: `${getBBCodeFrag((this.pokemon?.metWave ? this.pokemon.metWave.toString()! : i18next.t("pokemonSummary:unknownTrainer")), TextStyle.SUMMARY_RED)}${closeFragment}`, @@ -1019,7 +1019,7 @@ export default class SummaryUiHandler extends UiHandler { moveRowContainer.add(ppText); } - this.moveDescriptionText = addTextObject(this.scene, 2, 84, "", TextStyle.WINDOW_ALT, { wordWrap: { width: 1212 } }); + this.moveDescriptionText = addTextObject(this.scene, 2, 84, "", TextStyle.WINDOW_ALT, { wordWrap: { width: 1212 }}); this.movesContainer.add(this.moveDescriptionText); const moveDescriptionTextMaskRect = this.scene.make.graphics({}); diff --git a/src/ui/target-select-ui-handler.ts b/src/ui/target-select-ui-handler.ts index 3cdda984d3c..85b671c2617 100644 --- a/src/ui/target-select-ui-handler.ts +++ b/src/ui/target-select-ui-handler.ts @@ -4,7 +4,7 @@ import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import * as Utils from "../utils"; import { getMoveTargets } from "../data/move"; -import {Button} from "#enums/buttons"; +import { Button } from "#enums/buttons"; import { Moves } from "#enums/moves"; import Pokemon from "#app/field/pokemon"; import { ModifierBar } from "#app/modifier/modifier"; @@ -64,7 +64,7 @@ export default class TargetSelectUiHandler extends UiHandler { let success = false; if (button === Button.ACTION || button === Button.CANCEL) { - const targetIndexes: BattlerIndex[] = this.isMultipleTargets ? this.targets : [this.cursor]; + const targetIndexes: BattlerIndex[] = this.isMultipleTargets ? this.targets : [ this.cursor ]; this.targetSelectCallback(button === Button.ACTION ? targetIndexes : []); success = true; } else if (this.isMultipleTargets) { diff --git a/src/ui/test-dialogue-ui-handler.ts b/src/ui/test-dialogue-ui-handler.ts index 0acd9da193b..34fb80ecc89 100644 --- a/src/ui/test-dialogue-ui-handler.ts +++ b/src/ui/test-dialogue-ui-handler.ts @@ -25,7 +25,7 @@ export default class TestDialogueUiHandler extends FormModalUiHandler { // If the value is an object, execute the same process // si el valor es un objeto ejecuta el mismo proceso - return flattenKeys(value, topKey ?? t, topKey ? midleKey ? [...midleKey, t] : [t] : undefined).filter((t) => t.length > 0); + return flattenKeys(value, topKey ?? t, topKey ? midleKey ? [ ...midleKey, t ] : [ t ] : undefined).filter((t) => t.length > 0); } else if (typeof value === "string" || isNullOrUndefined(value)) { // we check for null or undefined here as per above - the typeof is still an object but the value is null so we need to exit out of this and pass the null key // Return in the format expected by i18next @@ -74,7 +74,7 @@ export default class TestDialogueUiHandler extends FormModalUiHandler { input.setMaxLength(255); input.on("keydown", (inputObject, evt: KeyboardEvent) => { - if (["escape", "space"].some((v) => v === evt.key.toLowerCase() || v === evt.code.toLowerCase()) && ui.getMode() === Mode.AUTO_COMPLETE) { + if ([ "escape", "space" ].some((v) => v === evt.key.toLowerCase() || v === evt.code.toLowerCase()) && ui.getMode() === Mode.AUTO_COMPLETE) { // Delete autocomplete list and recovery focus. inputObject.on("blur", () => inputObject.node.focus(), { once: true }); ui.revertMode(); diff --git a/src/ui/text.ts b/src/ui/text.ts index 58b6343144a..e6e1978118b 100644 --- a/src/ui/text.ts +++ b/src/ui/text.ts @@ -243,7 +243,7 @@ export function getBBCodeFrag(content: string, textStyle: TextStyle, uiTheme: Ui export function getTextWithColors(content: string, primaryStyle: TextStyle, uiTheme: UiTheme = UiTheme.DEFAULT): string { // Apply primary styling before anything else let text = getBBCodeFrag(content, primaryStyle, uiTheme) + "[/color][/shadow]"; - const primaryStyleString = [...text.match(new RegExp(/\[color=[^\[]*\]\[shadow=[^\[]*\]/i))!][0]; + const primaryStyleString = [ ...text.match(new RegExp(/\[color=[^\[]*\]\[shadow=[^\[]*\]/i))! ][0]; // Set custom colors text = text.replace(/@\[([^{]*)\]{([^}]*)}/gi, (substring, textStyle: string, textToColor: string) => { diff --git a/src/ui/time-of-day-widget.ts b/src/ui/time-of-day-widget.ts index ea80a6e524a..66fe5cc9ac3 100644 --- a/src/ui/time-of-day-widget.ts +++ b/src/ui/time-of-day-widget.ts @@ -21,9 +21,9 @@ export default class TimeOfDayWidget extends Phaser.GameObjects.Container { /** A map containing all timeOfDayIcon arrays with a matching string key for easier iteration */ private timeOfDayIconPairs: Map = new Map([ - ["bg", this.timeOfDayIconBgs], - ["mg", this.timeOfDayIconMgs], - ["fg", this.timeOfDayIconFgs],]); + [ "bg", this.timeOfDayIconBgs ], + [ "mg", this.timeOfDayIconMgs ], + [ "fg", this.timeOfDayIconFgs ],]); /** The current time of day */ private currentTime: TimeOfDay = TimeOfDay.ALL; @@ -66,7 +66,7 @@ export default class TimeOfDayWidget extends Phaser.GameObjects.Container { } }); // Store a flat array of all icons for later - this.timeOfDayIcons = [this.timeOfDayIconBgs, this.timeOfDayIconMgs, this.timeOfDayIconFgs].flat(); + this.timeOfDayIcons = [ this.timeOfDayIconBgs, this.timeOfDayIconMgs, this.timeOfDayIconFgs ].flat(); this.add(this.timeOfDayIcons); this.battleScene.eventTarget.addEventListener(BattleSceneEventType.ENCOUNTER_PHASE, this.onEncounterPhaseEvent); @@ -78,21 +78,21 @@ export default class TimeOfDayWidget extends Phaser.GameObjects.Container { */ private getBackTween(): Phaser.Types.Tweens.TweenBuilderConfig[] { const rotate = { - targets: [this.timeOfDayIconMgs[0], this.timeOfDayIconMgs[1]], + targets: [ this.timeOfDayIconMgs[0], this.timeOfDayIconMgs[1] ], angle: "+=90", duration: Utils.fixedInt(1500), ease: "Back.easeOut", paused: !this.parentVisible, }; const fade = { - targets: [this.timeOfDayIconBgs[1], this.timeOfDayIconMgs[1], this.timeOfDayIconFgs[1]], + targets: [ this.timeOfDayIconBgs[1], this.timeOfDayIconMgs[1], this.timeOfDayIconFgs[1] ], alpha: 0, duration: Utils.fixedInt(500), ease: "Linear", paused: !this.parentVisible, }; - return [rotate, fade]; + return [ rotate, fade ]; } /** @@ -101,21 +101,21 @@ export default class TimeOfDayWidget extends Phaser.GameObjects.Container { */ private getBounceTween(): Phaser.Types.Tweens.TweenBuilderConfig[] { const bounce = { - targets: [this.timeOfDayIconMgs[0], this.timeOfDayIconMgs[1]], + targets: [ this.timeOfDayIconMgs[0], this.timeOfDayIconMgs[1] ], angle: "+=90", duration: Utils.fixedInt(2000), ease: "Bounce.easeOut", paused: !this.parentVisible, }; const fade = { - targets: [this.timeOfDayIconBgs[1], this.timeOfDayIconMgs[1], this.timeOfDayIconFgs[1]], + targets: [ this.timeOfDayIconBgs[1], this.timeOfDayIconMgs[1], this.timeOfDayIconFgs[1] ], alpha: 0, duration: Utils.fixedInt(800), ease: "Linear", paused: !this.parentVisible, }; - return [bounce, fade]; + return [ bounce, fade ]; } /** Resets all icons to the proper depth, texture, and alpha so they are ready to tween */ @@ -129,7 +129,7 @@ export default class TimeOfDayWidget extends Phaser.GameObjects.Container { icons[0].setTexture(TimeOfDay[this.currentTime].toLowerCase() + "_icon_" + key); icons[1].setTexture(TimeOfDay[this.previousTime].toLowerCase() + "_icon_" + key); }); - this.timeOfDayIconMgs[0].setRotation(-90 * (3.14/180)); + this.timeOfDayIconMgs[0].setRotation(-90 * (3.14 / 180)); this.timeOfDayIcons.forEach(icon => icon.setAlpha(1)); } diff --git a/src/ui/title-ui-handler.ts b/src/ui/title-ui-handler.ts index 79baf407fb6..f7972af2cc2 100644 --- a/src/ui/title-ui-handler.ts +++ b/src/ui/title-ui-handler.ts @@ -98,7 +98,7 @@ export default class TitleUiHandler extends OptionSelectUiHandler { this.splashMessage = Utils.randItem(getSplashMessages()); this.splashMessageText.setText(i18next.t(this.splashMessage, { count: TitleUiHandler.BATTLES_WON_FALLBACK })); - this.appVersionText.setText("v"+version); + this.appVersionText.setText("v" + version); const ui = this.getUi(); diff --git a/src/ui/ui-handler.ts b/src/ui/ui-handler.ts index d9f0a876b71..bb7b1e038db 100644 --- a/src/ui/ui-handler.ts +++ b/src/ui/ui-handler.ts @@ -1,7 +1,7 @@ import BattleScene from "../battle-scene"; import { TextStyle, getTextColor } from "./text"; import { Mode } from "./ui"; -import {Button} from "#enums/buttons"; +import { Button } from "#enums/buttons"; /** * A basic abstract class to act as a holder and processor for UI elements. diff --git a/src/ui/ui-theme.ts b/src/ui/ui-theme.ts index 75725910b82..8ff50667248 100644 --- a/src/ui/ui-theme.ts +++ b/src/ui/ui-theme.ts @@ -55,8 +55,8 @@ export function addWindow(scene: BattleScene, x: number, y: number, width: numbe */ const maskRect = new Phaser.GameObjects.Rectangle( scene, - 6*(x - (mergeMaskLeft ? 2 : 0) - (maskOffsetX || 0)), - 6*(y + (mergeMaskTop ? 2 : 0) + (maskOffsetY || 0)), + 6 * (x - (mergeMaskLeft ? 2 : 0) - (maskOffsetX || 0)), + 6 * (y + (mergeMaskTop ? 2 : 0) + (maskOffsetY || 0)), width - (mergeMaskLeft ? 2 : 0), height - (mergeMaskTop ? 2 : 0), 0xffffff diff --git a/src/ui/ui.ts b/src/ui/ui.ts index 7e00c87cc5f..373930c5d84 100644 --- a/src/ui/ui.ts +++ b/src/ui/ui.ts @@ -273,7 +273,7 @@ export default class UI extends Phaser.GameObjects.Container { } const battleScene = this.scene as BattleScene; - if ([Mode.CONFIRM, Mode.COMMAND, Mode.FIGHT, Mode.MESSAGE].includes(this.mode)) { + if ([ Mode.CONFIRM, Mode.COMMAND, Mode.FIGHT, Mode.MESSAGE ].includes(this.mode)) { battleScene?.processInfoButton(pressed); return true; } diff --git a/src/ui/unavailable-modal-ui-handler.ts b/src/ui/unavailable-modal-ui-handler.ts index 3375fb930e6..92b1c2f1b4e 100644 --- a/src/ui/unavailable-modal-ui-handler.ts +++ b/src/ui/unavailable-modal-ui-handler.ts @@ -52,7 +52,7 @@ export default class UnavailableModalUiHandler extends ModalUiHandler { tryReconnect(): void { updateUserInfo().then(response => { - if (response[0] || [200, 400].includes(response[1])) { + if (response[0] || [ 200, 400 ].includes(response[1])) { this.reconnectTimer = null; this.reconnectDuration = this.minTime; this.scene.playSound("se/pb_bounce_1"); diff --git a/src/utils.test.ts b/src/utils.test.ts index 93f2a96ec4c..3f5b835b03b 100644 --- a/src/utils.test.ts +++ b/src/utils.test.ts @@ -1,4 +1,4 @@ -import {expect, describe, it, beforeAll} from "vitest"; +import { expect, describe, it, beforeAll } from "vitest"; import { randomString, padInt } from "./utils"; import Phaser from "phaser"; diff --git a/src/utils.ts b/src/utils.ts index 7a0def1a950..9cc95b00826 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -149,7 +149,7 @@ export function randSeedShuffle(items: T[]): T[] { const newArray = items.slice(0); for (let i = items.length - 1; i > 0; i--) { const j = Phaser.Math.RND.integerInRange(0, i); - [newArray[i], newArray[j]] = [newArray[j], newArray[i]]; + [ newArray[i], newArray[j] ] = [ newArray[j], newArray[i] ]; } return newArray; } @@ -225,7 +225,7 @@ export function formatLargeNumber(count: integer, threshold: integer): string { } // Abbreviations from 10^0 to 10^33 -const AbbreviationsLargeNumber: string[] = ["", "K", "M", "B", "t", "q", "Q", "s", "S", "o", "n", "d"]; +const AbbreviationsLargeNumber: string[] = [ "", "K", "M", "B", "t", "q", "Q", "s", "S", "o", "n", "d" ]; export function formatFancyLargeNumber(number: number, rounded: number = 3): string { let exponent: number; @@ -274,7 +274,7 @@ export const isLocal = ( /^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/.test(window.location.hostname)) && window.location.port !== "") || window.location.hostname === ""; -export const localServerUrl = import.meta.env.VITE_SERVER_URL ?? `http://${window.location.hostname}:${window.location.port+1}`; +export const localServerUrl = import.meta.env.VITE_SERVER_URL ?? `http://${window.location.hostname}:${window.location.port + 1}`; // Set the server URL based on whether it's local or not export const apiUrl = localServerUrl ?? "https://api.pokerogue.net"; @@ -425,7 +425,7 @@ export function rgbToHsv(r: integer, g: integer, b: integer) { const v = Math.max(r, g, b); const c = v - Math.min(r, g, b); const h = c && ((v === r) ? (g - b) / c : ((v === g) ? 2 + (b - r) / c : 4 + (r - g) / c)); - return [ 60 * (h < 0 ? h + 6 : h), v && c / v, v]; + return [ 60 * (h < 0 ? h + 6 : h), v && c / v, v ]; } /** @@ -445,7 +445,7 @@ export function deltaRgb(rgb1: integer[], rgb2: integer[]): integer { } export function rgbHexToRgba(hex: string) { - const color = hex.match(/^([\da-f]{2})([\da-f]{2})([\da-f]{2})$/i) ?? ["000000", "00", "00", "00"]; + const color = hex.match(/^([\da-f]{2})([\da-f]{2})([\da-f]{2})$/i) ?? [ "000000", "00", "00", "00" ]; return { r: parseInt(color[1], 16), g: parseInt(color[2], 16), @@ -512,7 +512,7 @@ export function verifyLang(lang?: string): boolean { */ export function printContainerList(container: Phaser.GameObjects.Container): void { console.log(container.list.map(go => { - return {type: go.type, name: go.name}; + return { type: go.type, name: go.name }; })); } From 38c682cca788f30da26e1823115835f4101e7341 Mon Sep 17 00:00:00 2001 From: EmberCM Date: Fri, 4 Oct 2024 01:04:50 -0500 Subject: [PATCH 014/153] [QoL] Add fusion options to overrides (#4298) * Add fusion options to overrides * Add fusions overrides to overridesHelper --------- Co-authored-by: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com> Co-authored-by: Adrian T. <68144167+torranx@users.noreply.github.com> Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/battle-scene.ts | 3 ++ src/field/pokemon.ts | 10 +++++- src/overrides.ts | 16 +++++++++ src/phases/select-starter-phase.ts | 2 +- src/test/utils/helpers/overridesHelper.ts | 42 +++++++++++++++++++++++ 5 files changed, 71 insertions(+), 2 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 7ee4abd2f27..7f17a666280 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -889,6 +889,9 @@ export default class BattleScene extends SceneBase { } const pokemon = new EnemyPokemon(this, species, level, trainerSlot, boss, dataSource); + if (Overrides.OPP_FUSION_OVERRIDE) { + pokemon.generateFusionSpecies(); + } overrideModifiers(this, false); overrideHeldItems(this, pokemon, false); diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 731d71b85d9..fed91d05fd5 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1964,7 +1964,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { && species.speciesId !== this.species.speciesId; }; - this.fusionSpecies = this.scene.randomSpecies(this.scene.currentBattle?.waveIndex || 0, this.level, false, filter, true); + let fusionOverride: PokemonSpecies | undefined = undefined; + + if (forStarter && this instanceof PlayerPokemon && Overrides.STARTER_FUSION_SPECIES_OVERRIDE) { + fusionOverride = getPokemonSpecies(Overrides.STARTER_FUSION_SPECIES_OVERRIDE); + } else if (this instanceof EnemyPokemon && Overrides.OPP_FUSION_SPECIES_OVERRIDE) { + fusionOverride = getPokemonSpecies(Overrides.OPP_FUSION_SPECIES_OVERRIDE); + } + + this.fusionSpecies = fusionOverride ?? this.scene.randomSpecies(this.scene.currentBattle?.waveIndex || 0, this.level, false, filter, true); this.fusionAbilityIndex = (this.fusionSpecies.abilityHidden && hasHiddenAbility ? 2 : this.fusionSpecies.ability2 !== this.fusionSpecies.ability1 ? randAbilityIndex : 0); this.fusionShiny = this.shiny; this.fusionVariant = this.variant; diff --git a/src/overrides.ts b/src/overrides.ts index 852961db8d7..27886ded2f2 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -100,6 +100,14 @@ class DefaultOverrides { * @example SPECIES_OVERRIDE = Species.Bulbasaur; */ readonly STARTER_SPECIES_OVERRIDE: Species | number = 0; + /** + * This will force your starter to be a random fusion + */ + readonly STARTER_FUSION_OVERRIDE: boolean = false; + /** + * This will override the species of the fusion + */ + readonly STARTER_FUSION_SPECIES_OVERRIDE: Species | integer = 0; readonly ABILITY_OVERRIDE: Abilities = Abilities.NONE; readonly PASSIVE_ABILITY_OVERRIDE: Abilities = Abilities.NONE; readonly STATUS_OVERRIDE: StatusEffect = StatusEffect.NONE; @@ -112,6 +120,14 @@ class DefaultOverrides { // OPPONENT / ENEMY OVERRIDES // -------------------------- readonly OPP_SPECIES_OVERRIDE: Species | number = 0; + /** + * This will make all opponents fused Pokemon + */ + readonly OPP_FUSION_OVERRIDE: boolean = false; + /** + * This will override the species of the fusion only when the opponent is already a fusion + */ + readonly OPP_FUSION_SPECIES_OVERRIDE: Species | integer = 0; readonly OPP_LEVEL_OVERRIDE: number = 0; readonly OPP_ABILITY_OVERRIDE: Abilities = Abilities.NONE; readonly OPP_PASSIVE_ABILITY_OVERRIDE: Abilities = Abilities.NONE; diff --git a/src/phases/select-starter-phase.ts b/src/phases/select-starter-phase.ts index cd3c112549c..1692b5f2234 100644 --- a/src/phases/select-starter-phase.ts +++ b/src/phases/select-starter-phase.ts @@ -80,7 +80,7 @@ export class SelectStarterPhase extends Phase { starterPokemon.nickname = starter.nickname; } - if (this.scene.gameMode.isSplicedOnly) { + if (this.scene.gameMode.isSplicedOnly || Overrides.STARTER_FUSION_OVERRIDE) { starterPokemon.generateFusionSpecies(true); } starterPokemon.setVisible(false); diff --git a/src/test/utils/helpers/overridesHelper.ts b/src/test/utils/helpers/overridesHelper.ts index e41cbad42c5..27fd9552fe4 100644 --- a/src/test/utils/helpers/overridesHelper.ts +++ b/src/test/utils/helpers/overridesHelper.ts @@ -85,6 +85,27 @@ export class OverridesHelper extends GameManagerHelper { return this; } + /** + * Override the player (pokemon) to be a random fusion + * @returns this + */ + enableStarterFusion(): this { + vi.spyOn(Overrides, "STARTER_FUSION_OVERRIDE", "get").mockReturnValue(true); + this.log("Player Pokemon is a random fusion!"); + return this; + } + + /** + * Override the player (pokemon) fusion species + * @param species the fusion species to set + * @returns this + */ + starterFusionSpecies(species: Species | number): this { + vi.spyOn(Overrides, "STARTER_FUSION_SPECIES_OVERRIDE", "get").mockReturnValue(species); + this.log(`Player Pokemon fusion species set to ${Species[species]} (=${species})!`); + return this; + } + /** * Override the player (pokemons) forms * @param forms the (pokemon) forms to set @@ -232,6 +253,27 @@ export class OverridesHelper extends GameManagerHelper { return this; } + /** + * Override the enemy (pokemon) to be a random fusion + * @returns this + */ + enableEnemyFusion(): this { + vi.spyOn(Overrides, "OPP_FUSION_OVERRIDE", "get").mockReturnValue(true); + this.log("Enemy Pokemon is a random fusion!"); + return this; + } + + /** + * Override the enemy (pokemon) fusion species + * @param species the fusion species to set + * @returns this + */ + enemyFusionSpecies(species: Species | number): this { + vi.spyOn(Overrides, "OPP_FUSION_SPECIES_OVERRIDE", "get").mockReturnValue(species); + this.log(`Enemy Pokemon fusion species set to ${Species[species]} (=${species})!`); + return this; + } + /** * Override the enemy (pokemon) {@linkcode Abilities | ability} * @param ability the (pokemon) {@linkcode Abilities | ability} to set From a5db2e1d6df77107d81e9ac1afaeb0cc76875cdc Mon Sep 17 00:00:00 2001 From: "Adrian T." <68144167+torranx@users.noreply.github.com> Date: Fri, 4 Oct 2024 22:42:05 +0800 Subject: [PATCH 015/153] [Misc] Update readme to include relevant links (#4573) --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index da10290d51d..866687d54b7 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,12 @@ If you have the motivation and experience with Typescript/Javascript (or are wil 2. Run `npm run start:dev` to locally run the project in `localhost:8000` #### Linting -We're using ESLint as our common linter and formatter. It will run automatically during the pre-commit hook but if you would like to manually run it, use the `npm run eslint` script. +We're using ESLint as our common linter and formatter. It will run automatically during the pre-commit hook but if you would like to manually run it, use the `npm run eslint` script. To view the complete rules, check out the [eslint.config.js](./eslint.config.js) file. + +### 📚 Documentation +You can find the auto-generated documentation [here](https://pagefaultgames.github.io/pokerogue/main/index.html). +For information on enemy AI, check out the [enemy-ai.md](./docs/enemy-ai.md) file. +For detailed guidelines on documenting your code, refer to the [comments.md](./docs/comments.md) file. ### ❔ FAQ From 2bc5f501545d83690e25fe524d2e01698ec216ac Mon Sep 17 00:00:00 2001 From: PigeonBar <56974298+PigeonBar@users.noreply.github.com> Date: Fri, 4 Oct 2024 10:42:20 -0400 Subject: [PATCH 016/153] [Test] Fix some test flakiness involving `doKillOpponents()` (#4571) * [Test] Fix some test flakiness involving game.doKillOpponents() * PR Feedback * Fix linting --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/test/daily_mode.test.ts | 14 ++++++-------- src/test/reload.test.ts | 12 ++++-------- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/src/test/daily_mode.test.ts b/src/test/daily_mode.test.ts index f832d17cc6c..100cf07f9c0 100644 --- a/src/test/daily_mode.test.ts +++ b/src/test/daily_mode.test.ts @@ -5,6 +5,7 @@ import { Moves } from "#app/enums/moves"; import { Biome } from "#app/enums/biome"; import { Mode } from "#app/ui/ui"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; +import { Species } from "#enums/species"; //const TIMEOUT = 20 * 1000; @@ -53,12 +54,11 @@ describe("Shop modifications", async () => { game.override .startingWave(9) - .startingBiome(Biome.ICE_CAVE) // Will lead to Snowy Forest with randomly generated weather + .startingBiome(Biome.ICE_CAVE) .battleType("single") .startingLevel(100) // Avoid levelling up - .enemyLevel(1000) // Avoid opponent dying before game.doKillOpponents() .disableTrainerWaves() - .moveset([ Moves.KOWTOW_CLEAVE ]) + .moveset([ Moves.SPLASH ]) .enemyMoveset(Moves.SPLASH); game.modifiers .addCheck("EVIOLITE") @@ -71,9 +71,8 @@ describe("Shop modifications", async () => { }); it("should not have Eviolite and Mini Black Hole available in Classic if not unlocked", async () => { - await game.classicMode.startBattle(); - game.move.select(Moves.KOWTOW_CLEAVE); - await game.phaseInterceptor.to("DamagePhase"); + await game.classicMode.startBattle([ Species.BULBASAUR ]); + game.move.select(Moves.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to("BattleEndPhase"); game.onNextPrompt("SelectModifierPhase", Mode.MODIFIER_SELECT, () => { @@ -86,8 +85,7 @@ describe("Shop modifications", async () => { it("should have Eviolite and Mini Black Hole available in Daily", async () => { await game.dailyMode.startBattle(); - game.move.select(Moves.KOWTOW_CLEAVE); - await game.phaseInterceptor.to("DamagePhase"); + game.move.select(Moves.SPLASH); await game.doKillOpponents(); await game.phaseInterceptor.to("BattleEndPhase"); game.onNextPrompt("SelectModifierPhase", Mode.MODIFIER_SELECT, () => { diff --git a/src/test/reload.test.ts b/src/test/reload.test.ts index 7849f8f0080..b15e9691ed6 100644 --- a/src/test/reload.test.ts +++ b/src/test/reload.test.ts @@ -44,15 +44,13 @@ describe("Reload", () => { .startingWave(10) .battleType("single") .startingLevel(100) // Avoid levelling up - .enemyLevel(1000) // Avoid opponent dying before game.doKillOpponents() .disableTrainerWaves() - .moveset([ Moves.KOWTOW_CLEAVE ]) + .moveset([ Moves.SPLASH ]) .enemyMoveset(Moves.SPLASH); await game.dailyMode.startBattle(); // Transition from Wave 10 to Wave 11 in order to trigger biome switch - game.move.select(Moves.KOWTOW_CLEAVE); - await game.phaseInterceptor.to("DamagePhase"); + game.move.select(Moves.SPLASH); await game.doKillOpponents(); game.onNextPrompt("SelectBiomePhase", Mode.OPTION_SELECT, () => { (game.scene.time as MockClock).overrideDelay = null; @@ -79,15 +77,13 @@ describe("Reload", () => { .startingBiome(Biome.ICE_CAVE) // Will lead to Snowy Forest with randomly generated weather .battleType("single") .startingLevel(100) // Avoid levelling up - .enemyLevel(1000) // Avoid opponent dying before game.doKillOpponents() .disableTrainerWaves() - .moveset([ Moves.KOWTOW_CLEAVE ]) + .moveset([ Moves.SPLASH ]) .enemyMoveset(Moves.SPLASH); await game.classicMode.startBattle(); // Apparently daily mode would override the biome // Transition from Wave 10 to Wave 11 in order to trigger biome switch - game.move.select(Moves.KOWTOW_CLEAVE); - await game.phaseInterceptor.to("DamagePhase"); + game.move.select(Moves.SPLASH); await game.doKillOpponents(); await game.toNextWave(); expect(game.phaseInterceptor.log).toContain("NewBiomeEncounterPhase"); From 22442d3aa066f3ebb6700193c7b9d930cb08712c Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Fri, 4 Oct 2024 07:50:03 -0700 Subject: [PATCH 017/153] [Refactor] Refactor move phase and add documentation (#3974) * Refactor `MovePhase` to improve readability/maintainability Add tsdocs/comments all over Mark all functions/fields with public/etc Fix multi-hit moves called from Metronome/etc, fixes #3914 Remove unused function `BattleScene.pushMovePhase` Don't use failure text as a condition for move success A move defining potential failure text doesn't mean it failed Replace relative imports with absolute imports in `battle-scene.ts` Change some fields from optional to default `false` * Fix Whirlwind test * Fix linting --- src/battle-scene.ts | 149 ++++----- src/field/arena.ts | 12 +- src/field/pokemon.ts | 10 +- src/phases/move-effect-phase.ts | 2 +- src/phases/move-phase.ts | 553 +++++++++++++++++++------------ src/test/moves/whirlwind.test.ts | 10 +- 6 files changed, 431 insertions(+), 305 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 7f17a666280..cc6934f20d1 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -1,57 +1,57 @@ import Phaser from "phaser"; -import UI from "./ui/ui"; -import Pokemon, { EnemyPokemon, PlayerPokemon } from "./field/pokemon"; -import PokemonSpecies, { allSpecies, getPokemonSpecies, PokemonSpeciesFilter } from "./data/pokemon-species"; +import UI from "#app/ui/ui"; +import Pokemon, { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; +import PokemonSpecies, { allSpecies, getPokemonSpecies, PokemonSpeciesFilter } from "#app/data/pokemon-species"; import { Constructor, isNullOrUndefined, randSeedInt } from "#app/utils"; -import * as Utils from "./utils"; +import * as Utils from "#app/utils"; import { ConsumableModifier, ConsumablePokemonModifier, DoubleBattleChanceBoosterModifier, ExpBalanceModifier, ExpShareModifier, FusePokemonModifier, HealingBoosterModifier, Modifier, ModifierBar, ModifierPredicate, MultipleParticipantExpBonusModifier, overrideHeldItems, overrideModifiers, PersistentModifier, PokemonExpBoosterModifier, PokemonFormChangeItemModifier, PokemonHeldItemModifier, PokemonHpRestoreModifier, PokemonIncrementingStatModifier, TerastallizeModifier, TurnHeldItemTransferModifier } from "./modifier/modifier"; -import { PokeballType } from "./data/pokeball"; -import { initCommonAnims, initMoveAnim, loadCommonAnimAssets, loadMoveAnimAssets, populateAnims } from "./data/battle-anims"; -import { Phase } from "./phase"; -import { initGameSpeed } from "./system/game-speed"; -import { Arena, ArenaBase } from "./field/arena"; -import { GameData } from "./system/game-data"; -import { addTextObject, getTextColor, TextStyle } from "./ui/text"; -import { allMoves } from "./data/move"; -import { getDefaultModifierTypeForTier, getEnemyModifierTypesForWave, getLuckString, getLuckTextTint, getModifierPoolForType, getModifierType, getPartyLuckValue, ModifierPoolType, modifierTypes, PokemonHeldItemModifierType } from "./modifier/modifier-type"; -import AbilityBar from "./ui/ability-bar"; -import { allAbilities, applyAbAttrs, applyPostBattleInitAbAttrs, BlockItemTheftAbAttr, ChangeMovePriorityAbAttr, DoubleBattleChanceAbAttr, PostBattleInitAbAttr } from "./data/ability"; -import Battle, { BattleType, FixedBattleConfig } from "./battle"; -import { GameMode, GameModes, getGameMode } from "./game-mode"; -import FieldSpritePipeline from "./pipelines/field-sprite"; -import SpritePipeline from "./pipelines/sprite"; -import PartyExpBar from "./ui/party-exp-bar"; -import { trainerConfigs, TrainerSlot } from "./data/trainer-config"; -import Trainer, { TrainerVariant } from "./field/trainer"; -import TrainerData from "./system/trainer-data"; +import { PokeballType } from "#app/data/pokeball"; +import { initCommonAnims, initMoveAnim, loadCommonAnimAssets, loadMoveAnimAssets, populateAnims } from "#app/data/battle-anims"; +import { Phase } from "#app/phase"; +import { initGameSpeed } from "#app/system/game-speed"; +import { Arena, ArenaBase } from "#app/field/arena"; +import { GameData } from "#app/system/game-data"; +import { addTextObject, getTextColor, TextStyle } from "#app/ui/text"; +import { allMoves } from "#app/data/move"; +import { getDefaultModifierTypeForTier, getEnemyModifierTypesForWave, getLuckString, getLuckTextTint, getModifierPoolForType, getModifierType, getPartyLuckValue, ModifierPoolType, modifierTypes, PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; +import AbilityBar from "#app/ui/ability-bar"; +import { allAbilities, applyAbAttrs, applyPostBattleInitAbAttrs, BlockItemTheftAbAttr, DoubleBattleChanceAbAttr, PostBattleInitAbAttr } from "#app/data/ability"; +import Battle, { BattleType, FixedBattleConfig } from "#app/battle"; +import { GameMode, GameModes, getGameMode } from "#app/game-mode"; +import FieldSpritePipeline from "#app/pipelines/field-sprite"; +import SpritePipeline from "#app/pipelines/sprite"; +import PartyExpBar from "#app/ui/party-exp-bar"; +import { trainerConfigs, TrainerSlot } from "#app/data/trainer-config"; +import Trainer, { TrainerVariant } from "#app/field/trainer"; +import TrainerData from "#app/system/trainer-data"; import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; -import { pokemonPrevolutions } from "./data/balance/pokemon-evolutions"; -import PokeballTray from "./ui/pokeball-tray"; -import InvertPostFX from "./pipelines/invert"; -import { Achv, achvs, ModifierAchv, MoneyAchv } from "./system/achv"; -import { Voucher, vouchers } from "./system/voucher"; -import { Gender } from "./data/gender"; +import { pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; +import PokeballTray from "#app/ui/pokeball-tray"; +import InvertPostFX from "#app/pipelines/invert"; +import { Achv, achvs, ModifierAchv, MoneyAchv } from "#app/system/achv"; +import { Voucher, vouchers } from "#app/system/voucher"; +import { Gender } from "#app/data/gender"; import UIPlugin from "phaser3-rex-plugins/templates/ui/ui-plugin"; -import { addUiThemeOverrides } from "./ui/ui-theme"; -import PokemonData from "./system/pokemon-data"; -import { Nature } from "./data/nature"; -import { FormChangeItem, pokemonFormChanges, SpeciesFormChange, SpeciesFormChangeManualTrigger, SpeciesFormChangeTimeOfDayTrigger, SpeciesFormChangeTrigger } from "./data/pokemon-forms"; -import { FormChangePhase } from "./phases/form-change-phase"; -import { getTypeRgb } from "./data/type"; -import PokemonSpriteSparkleHandler from "./field/pokemon-sprite-sparkle-handler"; -import CharSprite from "./ui/char-sprite"; -import DamageNumberHandler from "./field/damage-number-handler"; -import PokemonInfoContainer from "./ui/pokemon-info-container"; -import { biomeDepths, getBiomeName } from "./data/balance/biomes"; -import { SceneBase } from "./scene-base"; -import CandyBar from "./ui/candy-bar"; -import { Variant, variantData } from "./data/variant"; +import { addUiThemeOverrides } from "#app/ui/ui-theme"; +import PokemonData from "#app/system/pokemon-data"; +import { Nature } from "#app/data/nature"; +import { FormChangeItem, pokemonFormChanges, SpeciesFormChange, SpeciesFormChangeManualTrigger, SpeciesFormChangeTimeOfDayTrigger, SpeciesFormChangeTrigger } from "#app/data/pokemon-forms"; +import { FormChangePhase } from "#app/phases/form-change-phase"; +import { getTypeRgb } from "#app/data/type"; +import PokemonSpriteSparkleHandler from "#app/field/pokemon-sprite-sparkle-handler"; +import CharSprite from "#app/ui/char-sprite"; +import DamageNumberHandler from "#app/field/damage-number-handler"; +import PokemonInfoContainer from "#app/ui/pokemon-info-container"; +import { biomeDepths, getBiomeName } from "#app/data/balance/biomes"; +import { SceneBase } from "#app/scene-base"; +import CandyBar from "#app/ui/candy-bar"; +import { Variant, variantData } from "#app/data/variant"; import { Localizable } from "#app/interfaces/locales"; import Overrides from "#app/overrides"; -import { InputsController } from "./inputs-controller"; -import { UiInputs } from "./ui-inputs"; -import { NewArenaEvent } from "./events/battle-scene"; -import { ArenaFlyout } from "./ui/arena-flyout"; +import { InputsController } from "#app/inputs-controller"; +import { UiInputs } from "#app/ui-inputs"; +import { NewArenaEvent } from "#app/events/battle-scene"; +import { ArenaFlyout } from "#app/ui/arena-flyout"; import { EaseType } from "#enums/ease-type"; import { BattleSpec } from "#enums/battle-spec"; import { BattleStyle } from "#enums/battle-style"; @@ -66,27 +66,27 @@ import { TimedEventManager } from "#app/timed-event-manager"; import { PokemonAnimType } from "#enums/pokemon-anim-type"; import i18next from "i18next"; import { TrainerType } from "#enums/trainer-type"; -import { battleSpecDialogue } from "./data/dialogue"; -import { LoadingScene } from "./loading-scene"; -import { LevelCapPhase } from "./phases/level-cap-phase"; -import { LoginPhase } from "./phases/login-phase"; -import { MessagePhase } from "./phases/message-phase"; -import { MovePhase } from "./phases/move-phase"; -import { NewBiomeEncounterPhase } from "./phases/new-biome-encounter-phase"; -import { NextEncounterPhase } from "./phases/next-encounter-phase"; -import { PokemonAnimPhase } from "./phases/pokemon-anim-phase"; -import { QuietFormChangePhase } from "./phases/quiet-form-change-phase"; -import { ReturnPhase } from "./phases/return-phase"; -import { SelectBiomePhase } from "./phases/select-biome-phase"; -import { ShowTrainerPhase } from "./phases/show-trainer-phase"; -import { SummonPhase } from "./phases/summon-phase"; -import { SwitchPhase } from "./phases/switch-phase"; -import { TitlePhase } from "./phases/title-phase"; -import { ToggleDoublePositionPhase } from "./phases/toggle-double-position-phase"; -import { TurnInitPhase } from "./phases/turn-init-phase"; -import { ShopCursorTarget } from "./enums/shop-cursor-target"; -import MysteryEncounter from "./data/mystery-encounters/mystery-encounter"; -import { allMysteryEncounters, ANTI_VARIANCE_WEIGHT_MODIFIER, AVERAGE_ENCOUNTERS_PER_RUN_TARGET, BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT, MYSTERY_ENCOUNTER_SPAWN_MAX_WEIGHT, mysteryEncountersByBiome, WEIGHT_INCREMENT_ON_SPAWN_MISS } from "./data/mystery-encounters/mystery-encounters"; +import { battleSpecDialogue } from "#app/data/dialogue"; +import { LoadingScene } from "#app/loading-scene"; +import { LevelCapPhase } from "#app/phases/level-cap-phase"; +import { LoginPhase } from "#app/phases/login-phase"; +import { MessagePhase } from "#app/phases/message-phase"; +import { MovePhase } from "#app/phases/move-phase"; +import { NewBiomeEncounterPhase } from "#app/phases/new-biome-encounter-phase"; +import { NextEncounterPhase } from "#app/phases/next-encounter-phase"; +import { PokemonAnimPhase } from "#app/phases/pokemon-anim-phase"; +import { QuietFormChangePhase } from "#app/phases/quiet-form-change-phase"; +import { ReturnPhase } from "#app/phases/return-phase"; +import { SelectBiomePhase } from "#app/phases/select-biome-phase"; +import { ShowTrainerPhase } from "#app/phases/show-trainer-phase"; +import { SummonPhase } from "#app/phases/summon-phase"; +import { SwitchPhase } from "#app/phases/switch-phase"; +import { TitlePhase } from "#app/phases/title-phase"; +import { ToggleDoublePositionPhase } from "#app/phases/toggle-double-position-phase"; +import { TurnInitPhase } from "#app/phases/turn-init-phase"; +import { ShopCursorTarget } from "#app/enums/shop-cursor-target"; +import MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; +import { allMysteryEncounters, ANTI_VARIANCE_WEIGHT_MODIFIER, AVERAGE_ENCOUNTERS_PER_RUN_TARGET, BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT, MYSTERY_ENCOUNTER_SPAWN_MAX_WEIGHT, mysteryEncountersByBiome, WEIGHT_INCREMENT_ON_SPAWN_MISS } from "#app/data/mystery-encounters/mystery-encounters"; import { MysteryEncounterSaveData } from "#app/data/mystery-encounters/mystery-encounter-save-data"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; @@ -94,7 +94,7 @@ import HeldModifierConfig from "#app/interfaces/held-modifier-config"; import { ExpPhase } from "#app/phases/exp-phase"; import { ShowPartyExpBarPhase } from "#app/phases/show-party-exp-bar-phase"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; -import { ExpGainsSpeed } from "./enums/exp-gains-speed"; +import { ExpGainsSpeed } from "#enums/exp-gains-speed"; export const bypassLogin = import.meta.env.VITE_BYPASS_LOGIN === "1"; @@ -2359,17 +2359,6 @@ export default class BattleScene extends SceneBase { return false; } - pushMovePhase(movePhase: MovePhase, priorityOverride?: integer): void { - const movePriority = new Utils.IntegerHolder(priorityOverride !== undefined ? priorityOverride : movePhase.move.getMove().priority); - applyAbAttrs(ChangeMovePriorityAbAttr, movePhase.pokemon, null, false, movePhase.move.getMove(), movePriority); - const lowerPriorityPhase = this.phaseQueue.find(p => p instanceof MovePhase && p.move.getMove().priority < movePriority.value); - if (lowerPriorityPhase) { - this.phaseQueue.splice(this.phaseQueue.indexOf(lowerPriorityPhase), 0, movePhase); - } else { - this.pushPhase(movePhase); - } - } - /** * Tries to add the input phase to index before target phase in the phaseQueue, else simply calls unshiftPhase() * @param phase {@linkcode Phase} the phase to be added diff --git a/src/field/arena.ts b/src/field/arena.ts index 9d5f1eb0a4e..1e164903e9d 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -392,16 +392,16 @@ export class Arena { return true; } - isMoveWeatherCancelled(user: Pokemon, move: Move) { - return this.weather && !this.weather.isEffectSuppressed(this.scene) && this.weather.isMoveWeatherCancelled(user, move); + public isMoveWeatherCancelled(user: Pokemon, move: Move): boolean { + return !!this.weather && !this.weather.isEffectSuppressed(this.scene) && this.weather.isMoveWeatherCancelled(user, move); } - isMoveTerrainCancelled(user: Pokemon, targets: BattlerIndex[], move: Move) { - return this.terrain && this.terrain.isMoveTerrainCancelled(user, targets, move); + public isMoveTerrainCancelled(user: Pokemon, targets: BattlerIndex[], move: Move): boolean { + return !!this.terrain && this.terrain.isMoveTerrainCancelled(user, targets, move); } - getTerrainType() : TerrainType { - return this.terrain?.terrainType || TerrainType.NONE; + public getTerrainType(): TerrainType { + return this.terrain?.terrainType ?? TerrainType.NONE; } getAttackTypeMultiplier(attackType: Type, grounded: boolean): number { diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index fed91d05fd5..05567491a1a 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -5027,8 +5027,12 @@ export class PokemonBattleSummonData { export class PokemonTurnData { public flinched: boolean = false; public acted: boolean = false; - public hitCount: number; - public hitsLeft: number; + public hitCount: number = 0; + /** + * - `-1` = Calculate how many hits are left + * - `0` = Move is finished + */ + public hitsLeft: number = -1; public damageDealt: number = 0; public currDamageDealt: number = 0; public damageTaken: number = 0; @@ -5114,7 +5118,7 @@ export class PokemonMove { * @param {boolean} ignoreRestrictionTags If `true`, skips the check for move restriction tags (see {@link MoveRestrictionBattlerTag}) * @returns `true` if the move can be selected and used by the Pokemon, otherwise `false`. */ - isUsable(pokemon: Pokemon, ignorePp?: boolean, ignoreRestrictionTags?: boolean): boolean { + isUsable(pokemon: Pokemon, ignorePp: boolean = false, ignoreRestrictionTags: boolean = false): boolean { if (this.moveId && !ignoreRestrictionTags && pokemon.isMoveRestricted(this.moveId)) { return false; } diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index 93466babb77..b2d429a4313 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -70,7 +70,7 @@ export class MoveEffectPhase extends PokemonPhase { * resolve the move's total hit count. This block combines the * effects of the move itself, Parental Bond, and Multi-Lens to do so. */ - if (user.turnData.hitsLeft === undefined) { + if (user.turnData.hitsLeft === -1) { const hitCount = new Utils.IntegerHolder(1); // Assume single target for multi hit applyMoveAttrs(MultiHitAttr, user, this.getTarget() ?? null, move, hitCount); diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index 154fbbe410d..807f194bad5 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -1,5 +1,5 @@ -import BattleScene from "#app/battle-scene"; import { BattlerIndex } from "#app/battle"; +import BattleScene from "#app/battle-scene"; import { applyAbAttrs, applyPostMoveUsedAbAttrs, applyPreAttackAbAttrs, BlockRedirectAbAttr, IncreasePpAbAttr, PokemonTypeChangeAbAttr, PostMoveUsedAbAttr, RedirectMoveAbAttr } from "#app/data/ability"; import { CommonAnim } from "#app/data/battle-anims"; import { BattlerTagLapseType, CenterOfAttentionTag } from "#app/data/battler-tags"; @@ -15,236 +15,149 @@ import { StatusEffect } from "#app/enums/status-effect"; import { MoveUsedEvent } from "#app/events/battle-scene"; import Pokemon, { MoveResult, PokemonMove, TurnMove } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; +import { BattlePhase } from "#app/phases/battle-phase"; +import { CommonAnimPhase } from "#app/phases/common-anim-phase"; +import { MoveEffectPhase } from "#app/phases/move-effect-phase"; +import { MoveEndPhase } from "#app/phases/move-end-phase"; +import { ShowAbilityPhase } from "#app/phases/show-ability-phase"; import * as Utils from "#app/utils"; import i18next from "i18next"; -import { BattlePhase } from "./battle-phase"; -import { CommonAnimPhase } from "./common-anim-phase"; -import { MoveEffectPhase } from "./move-effect-phase"; -import { MoveEndPhase } from "./move-end-phase"; -import { ShowAbilityPhase } from "./show-ability-phase"; export class MovePhase extends BattlePhase { - public pokemon: Pokemon; - public move: PokemonMove; - public targets: BattlerIndex[]; + protected _pokemon: Pokemon; + protected _move: PokemonMove; + protected _targets: BattlerIndex[]; protected followUp: boolean; protected ignorePp: boolean; - protected failed: boolean; - protected cancelled: boolean; + protected failed: boolean = false; + protected cancelled: boolean = false; - constructor(scene: BattleScene, pokemon: Pokemon, targets: BattlerIndex[], move: PokemonMove, followUp?: boolean, ignorePp?: boolean) { + public get pokemon(): Pokemon { + return this._pokemon; + } + + protected set pokemon(pokemon: Pokemon) { + this._pokemon = pokemon; + } + + public get move(): PokemonMove { + return this._move; + } + + protected set move(move: PokemonMove) { + this._move = move; + } + + public get targets(): BattlerIndex[] { + return this._targets; + } + + protected set targets(targets: BattlerIndex[]) { + this._targets = targets; + } + + /** + * @param followUp Indicates that the move being uses is a "follow-up" - for example, a move being used by Metronome or Dancer. + * Follow-ups bypass a few failure conditions, including flinches, sleep/paralysis/freeze and volatile status checks, etc. + */ + constructor(scene: BattleScene, pokemon: Pokemon, targets: BattlerIndex[], move: PokemonMove, followUp: boolean = false, ignorePp: boolean = false) { super(scene); this.pokemon = pokemon; this.targets = targets; this.move = move; - this.followUp = followUp ?? false; - this.ignorePp = ignorePp ?? false; - this.failed = false; - this.cancelled = false; + this.followUp = followUp; + this.ignorePp = ignorePp; } - canMove(ignoreDisableTags?: boolean): boolean { + /** + * Checks if the pokemon is active, if the move is usable, and that the move is targetting something. + * @param ignoreDisableTags `true` to not check if the move is disabled + * @returns `true` if all the checks pass + */ + public canMove(ignoreDisableTags: boolean = false): boolean { return this.pokemon.isActive(true) && this.move.isUsable(this.pokemon, this.ignorePp, ignoreDisableTags) && !!this.targets.length; } /**Signifies the current move should fail but still use PP */ - fail(): void { + public fail(): void { this.failed = true; } /**Signifies the current move should cancel and retain PP */ - cancel(): void { + public cancel(): void { this.cancelled = true; } - start() { + public start() { super.start(); console.log(Moves[this.move.moveId]); + // Check if move is unusable (e.g. because it's out of PP due to a mid-turn Spite). if (!this.canMove(true)) { - if (this.pokemon.isActive(true) && this.move.ppUsed >= this.move.getMovePp()) { // if the move PP was reduced from Spite or otherwise, the move fails + if (this.pokemon.isActive(true) && this.move.ppUsed >= this.move.getMovePp()) { this.fail(); this.showMoveText(); this.showFailedText(); } + return this.end(); } + this.pokemon.turnData.acted = true; + + // Reset hit-related turn data when starting follow-up moves (e.g. Metronomed moves, Dancer repeats) + if (this.followUp) { + this.pokemon.turnData.hitsLeft = -1; + this.pokemon.turnData.hitCount = 0; + } + + // Check move to see if arena.ignoreAbilities should be true. if (!this.followUp) { if (this.move.getMove().checkFlag(MoveFlags.IGNORE_ABILITIES, this.pokemon, null)) { this.scene.arena.setIgnoreAbilities(true, this.pokemon.getBattlerIndex()); } + } + + this.resolveRedirectTarget(); + + this.resolveCounterAttackTarget(); + + this.resolvePreMoveStatusEffects(); + + this.lapsePreMoveAndMoveTags(); + + this.resolveFinalPreMoveCancellationChecks(); + + if (this.cancelled || this.failed) { + this.handlePreMoveFailures(); } else { - this.pokemon.turnData.hitsLeft = 0; // TODO: is `0` correct? - this.pokemon.turnData.hitCount = 0; // TODO: is `0` correct? + this.useMove(); } - // Move redirection abilities (ie. Storm Drain) only support single target moves - const moveTarget = this.targets.length === 1 - ? new Utils.IntegerHolder(this.targets[0]) - : null; - if (moveTarget) { - const oldTarget = moveTarget.value; - this.scene.getField(true).filter(p => p !== this.pokemon).forEach(p => applyAbAttrs(RedirectMoveAbAttr, p, null, false, this.move.moveId, moveTarget)); - this.pokemon.getOpponents().forEach(p => { - const redirectTag = p.getTag(CenterOfAttentionTag) as CenterOfAttentionTag; - if (redirectTag && (!redirectTag.powder || (!this.pokemon.isOfType(Type.GRASS) && !this.pokemon.hasAbility(Abilities.OVERCOAT)))) { - moveTarget.value = p.getBattlerIndex(); - } - }); - //Check if this move is immune to being redirected, and restore its target to the intended target if it is. - if ((this.pokemon.hasAbilityWithAttr(BlockRedirectAbAttr) || this.move.getMove().hasAttr(BypassRedirectAttr))) { - //If an ability prevented this move from being redirected, display its ability pop up. - if ((this.pokemon.hasAbilityWithAttr(BlockRedirectAbAttr) && !this.move.getMove().hasAttr(BypassRedirectAttr)) && oldTarget !== moveTarget.value) { - this.scene.unshiftPhase(new ShowAbilityPhase(this.scene, this.pokemon.getBattlerIndex(), this.pokemon.getPassiveAbility().hasAttr(BlockRedirectAbAttr))); - } - moveTarget.value = oldTarget; - } - this.targets[0] = moveTarget.value; + this.end(); + } + + /** Check for cancellation edge cases - no targets remaining, or {@linkcode Moves.NONE} is in the queue */ + protected resolveFinalPreMoveCancellationChecks() { + const targets = this.getActiveTargetPokemon(); + const moveQueue = this.pokemon.getMoveQueue(); + + if (targets.length === 0 || (moveQueue.length && moveQueue[0].move === Moves.NONE)) { + this.showFailedText(); + this.cancelled = true; } + } - // Check for counterattack moves to switch target - if (this.targets.length === 1 && this.targets[0] === BattlerIndex.ATTACKER) { - if (this.pokemon.turnData.attacksReceived.length) { - const attack = this.pokemon.turnData.attacksReceived[0]; - this.targets[0] = attack.sourceBattlerIndex; - - // account for metal burst and comeuppance hitting remaining targets in double battles - // counterattack will redirect to remaining ally if original attacker faints - if (this.scene.currentBattle.double && this.move.getMove().hasFlag(MoveFlags.REDIRECT_COUNTER)) { - if (this.scene.getField()[this.targets[0]].hp === 0) { - const opposingField = this.pokemon.isPlayer() ? this.scene.getEnemyField() : this.scene.getPlayerField(); - //@ts-ignore - this.targets[0] = opposingField.find(p => p.hp > 0)?.getBattlerIndex(); //TODO: fix ts-ignore - } - } - } - if (this.targets[0] === BattlerIndex.ATTACKER) { - this.fail(); // Marks the move as failed for later in doMove - this.showMoveText(); - this.showFailedText(); - } - } - - const targets = this.scene.getField(true).filter(p => { - if (this.targets.indexOf(p.getBattlerIndex()) > -1) { - return true; - } - return false; - }); - - const doMove = () => { - this.pokemon.turnData.acted = true; // Record that the move was attempted, even if it fails - - this.pokemon.lapseTags(BattlerTagLapseType.PRE_MOVE); - - let ppUsed = 1; - // Filter all opponents to include only those this move is targeting - const targetedOpponents = this.pokemon.getOpponents().filter(o => this.targets.includes(o.getBattlerIndex())); - for (const opponent of targetedOpponents) { - if (this.move.ppUsed + ppUsed >= this.move.getMovePp()) { // If we're already at max PP usage, stop checking - break; - } - if (opponent.hasAbilityWithAttr(IncreasePpAbAttr)) { // Accounting for abilities like Pressure - ppUsed++; - } - } - - if (!this.followUp && this.canMove() && !this.cancelled) { - this.pokemon.lapseTags(BattlerTagLapseType.MOVE); - } - - const moveQueue = this.pokemon.getMoveQueue(); - if (this.cancelled || this.failed) { - if (this.failed) { - this.move.usePp(ppUsed); // Only use PP if the move failed - this.scene.eventTarget.dispatchEvent(new MoveUsedEvent(this.pokemon?.id, this.move.getMove(), this.move.ppUsed)); - } - - // Record a failed move so Abilities like Truant don't trigger next turn and soft-lock - this.pokemon.pushMoveHistory({ move: Moves.NONE, result: MoveResult.FAIL }); - - this.pokemon.lapseTags(BattlerTagLapseType.MOVE_EFFECT); // Remove any tags from moves like Fly/Dive/etc. - this.pokemon.lapseTags(BattlerTagLapseType.AFTER_MOVE); - moveQueue.shift(); // Remove the second turn of charge moves - return this.end(); - } - - this.scene.triggerPokemonFormChange(this.pokemon, SpeciesFormChangePreMoveTrigger); - - if (this.move.moveId) { - this.showMoveText(); - } - - // This should only happen when there are no valid targets left on the field - if ((moveQueue.length && moveQueue[0].move === Moves.NONE) || !targets.length) { - this.showFailedText(); - this.cancel(); - - // Record a failed move so Abilities like Truant don't trigger next turn and soft-lock - this.pokemon.pushMoveHistory({ move: Moves.NONE, result: MoveResult.FAIL }); - - this.pokemon.lapseTags(BattlerTagLapseType.MOVE_EFFECT); // Remove any tags from moves like Fly/Dive/etc. - this.pokemon.lapseTags(BattlerTagLapseType.AFTER_MOVE); - - moveQueue.shift(); - return this.end(); - } - - if ((!moveQueue.length || !moveQueue.shift()?.ignorePP) && !this.ignorePp) { // using .shift here clears out two turn moves once they've been used - this.move.usePp(ppUsed); - this.scene.eventTarget.dispatchEvent(new MoveUsedEvent(this.pokemon?.id, this.move.getMove(), this.move.ppUsed)); - } - - if (!allMoves[this.move.moveId].hasAttr(CopyMoveAttr)) { - this.scene.currentBattle.lastMove = this.move.moveId; - } - - // Assume conditions affecting targets only apply to moves with a single target - let success = this.move.getMove().applyConditions(this.pokemon, targets[0], this.move.getMove()); - const cancelled = new Utils.BooleanHolder(false); - let failedText = this.move.getMove().getFailedText(this.pokemon, targets[0], this.move.getMove(), cancelled); - if (success && this.scene.arena.isMoveWeatherCancelled(this.pokemon, this.move.getMove())) { - success = false; - } else if (success && this.scene.arena.isMoveTerrainCancelled(this.pokemon, this.targets, this.move.getMove())) { - success = false; - if (failedText === null) { - failedText = getTerrainBlockMessage(targets[0], this.scene.arena.terrain?.terrainType!); // TODO: is this bang correct? - } - } - - /** - * Trigger pokemon type change before playing the move animation - * Will still change the user's type when using Roar, Whirlwind, Trick-or-Treat, and Forest's Curse, - * regardless of whether the move successfully executes or not. - */ - if (success || [ Moves.ROAR, Moves.WHIRLWIND, Moves.TRICK_OR_TREAT, Moves.FORESTS_CURSE ].includes(this.move.moveId)) { - applyPreAttackAbAttrs(PokemonTypeChangeAbAttr, this.pokemon, null, this.move.getMove()); - } - - if (success) { - this.scene.unshiftPhase(this.getEffectPhase()); - } else { - this.pokemon.pushMoveHistory({ move: this.move.moveId, targets: this.targets, result: MoveResult.FAIL, virtual: this.move.virtual }); - if (!cancelled.value) { - this.showFailedText(failedText); - } - } - // Checks if Dancer ability is triggered - if (this.move.getMove().hasFlag(MoveFlags.DANCE_MOVE) && !this.followUp) { - // Pokemon with Dancer can be on either side of the battle so we check in both cases - this.scene.getPlayerField().forEach(pokemon => { - applyPostMoveUsedAbAttrs(PostMoveUsedAbAttr, pokemon, this.move, this.pokemon, this.targets); - }); - this.scene.getEnemyField().forEach(pokemon => { - applyPostMoveUsedAbAttrs(PostMoveUsedAbAttr, pokemon, this.move, this.pokemon, this.targets); - }); - } - this.end(); - }; + public getActiveTargetPokemon() { + return this.scene.getField(true).filter(p => this.targets.includes(p.getBattlerIndex())); + } + /** + * Handles {@link StatusEffect.SLEEP Sleep}/{@link StatusEffect.PARALYSIS Paralysis}/{@link StatusEffect.FREEZE Freeze} rolls and side effects. + */ + protected resolvePreMoveStatusEffects() { if (!this.followUp && this.pokemon.status && !this.pokemon.status.isPostTurn()) { this.pokemon.status.incrementTurn(); let activated = false; @@ -273,25 +186,257 @@ export class MovePhase extends BattlePhase { if (activated) { this.scene.queueMessage(getStatusEffectActivationText(this.pokemon.status.effect, getPokemonNameWithAffix(this.pokemon))); this.scene.unshiftPhase(new CommonAnimPhase(this.scene, this.pokemon.getBattlerIndex(), undefined, CommonAnim.POISON + (this.pokemon.status.effect - 1))); - doMove(); - } else { - if (healed) { - this.scene.queueMessage(getStatusEffectHealText(this.pokemon.status.effect, getPokemonNameWithAffix(this.pokemon))); - this.pokemon.resetStatus(); - this.pokemon.updateInfo(); - } - doMove(); + } else if (healed) { + this.scene.queueMessage(getStatusEffectHealText(this.pokemon.status.effect, getPokemonNameWithAffix(this.pokemon))); + this.pokemon.resetStatus(); + this.pokemon.updateInfo(); } - } else { - doMove(); } } - getEffectPhase(): MoveEffectPhase { - return new MoveEffectPhase(this.scene, this.pokemon.getBattlerIndex(), this.targets, this.move); + /** + * Lapse {@linkcode BattlerTagLapseType.PRE_MOVE PRE_MOVE} tags that trigger before a move is used, regardless of whether or not it failed. + * Also lapse {@linkcode BattlerTagLapseType.MOVE MOVE} tags if the move should be successful. + */ + protected lapsePreMoveAndMoveTags() { + this.pokemon.lapseTags(BattlerTagLapseType.PRE_MOVE); + + // TODO: does this intentionally happen before the no targets/Moves.NONE on queue cancellation case is checked? + if (!this.followUp && this.canMove() && !this.cancelled) { + this.pokemon.lapseTags(BattlerTagLapseType.MOVE); + } } - showMoveText(): void { + protected useMove() { + const targets = this.getActiveTargetPokemon(); + const moveQueue = this.pokemon.getMoveQueue(); + + // form changes happen even before we know that the move wll execute. + this.scene.triggerPokemonFormChange(this.pokemon, SpeciesFormChangePreMoveTrigger); + + this.showMoveText(); + + // TODO: Clean up implementation of two-turn moves. + if (moveQueue.length > 0) { // Using .shift here clears out two turn moves once they've been used + this.ignorePp = moveQueue.shift()?.ignorePP ?? false; + } + + // "commit" to using the move, deducting PP. + if (!this.ignorePp) { + const ppUsed = 1 + this.getPpIncreaseFromPressure(targets); + + this.move.usePp(ppUsed); + this.scene.eventTarget.dispatchEvent(new MoveUsedEvent(this.pokemon?.id, this.move.getMove(), ppUsed)); + } + + // Update the battle's "last move" pointer, unless we're currently mimicking a move. + if (!allMoves[this.move.moveId].hasAttr(CopyMoveAttr)) { + this.scene.currentBattle.lastMove = this.move.moveId; + } + + /** + * Determine if the move is successful (meaning that its damage/effects can be attempted) + * by checking that all of the following are true: + * - Conditional attributes of the move are all met + * - The target's `ForceSwitchOutImmunityAbAttr` is not triggered (see {@linkcode Move.prototype.applyConditions}) + * - Weather does not block the move + * - Terrain does not block the move + * + * TODO: These steps are straightforward, but the implementation below is extremely convoluted. + */ + + const move = this.move.getMove(); + + /** + * Move conditions assume the move has a single target + * TODO: is this sustainable? + */ + const passesConditions = move.applyConditions(this.pokemon, targets[0], move); + const failedDueToWeather: boolean = this.scene.arena.isMoveWeatherCancelled(this.pokemon, move); + const failedDueToTerrain: boolean = this.scene.arena.isMoveTerrainCancelled(this.pokemon, this.targets, move); + + const success = passesConditions && !failedDueToWeather && !failedDueToTerrain; + + /** + * If the move has not failed, trigger ability-based user type changes and then execute it. + * + * Notably, Roar, Whirlwind, Trick-or-Treat, and Forest's Curse will trigger these type changes even + * if the move fails. + */ + if (success) { + applyPreAttackAbAttrs(PokemonTypeChangeAbAttr, this.pokemon, null, this.move.getMove()); + this.scene.unshiftPhase(new MoveEffectPhase(this.scene, this.pokemon.getBattlerIndex(), this.targets, this.move)); + + } else { + if ([ Moves.ROAR, Moves.WHIRLWIND, Moves.TRICK_OR_TREAT, Moves.FORESTS_CURSE ].includes(this.move.moveId)) { + applyPreAttackAbAttrs(PokemonTypeChangeAbAttr, this.pokemon, null, this.move.getMove()); + } + + this.pokemon.pushMoveHistory({ move: this.move.moveId, targets: this.targets, result: MoveResult.FAIL, virtual: this.move.virtual }); + + let failedText: string | undefined; + const failureMessage = move.getFailedText(this.pokemon, targets[0], move, new Utils.BooleanHolder(false)); + + if (failureMessage) { + failedText = failureMessage; + } else if (failedDueToTerrain) { + failedText = getTerrainBlockMessage(this.pokemon, this.scene.arena.getTerrainType()); + } + + this.showFailedText(failedText); + } + + // Handle Dancer, which triggers immediately after a move is used (rather than waiting on `this.end()`). + // Note that the `!this.followUp` check here prevents an infinite Dancer loop. + if (this.move.getMove().hasFlag(MoveFlags.DANCE_MOVE) && !this.followUp) { + this.scene.getField(true).forEach(pokemon => { + applyPostMoveUsedAbAttrs(PostMoveUsedAbAttr, pokemon, this.move, this.pokemon, this.targets); + }); + } + } + + /** + * Queues a {@linkcode MoveEndPhase} if the move wasn't a {@linkcode followUp} and {@linkcode canMove()} returns `true`, + * then ends the phase. + */ + public end() { + if (!this.followUp && this.canMove()) { + this.scene.unshiftPhase(new MoveEndPhase(this.scene, this.pokemon.getBattlerIndex())); + } + + super.end(); + } + + /** + * Applies PP increasing abilities (currently only {@link Abilities.PRESSURE Pressure}) if they exist on the target pokemon. + * Note that targets must include only active pokemon. + * + * TODO: This hardcodes the PP increase at 1 per opponent, rather than deferring to the ability. + */ + public getPpIncreaseFromPressure(targets: Pokemon[]) { + const foesWithPressure = this.pokemon.getOpponents().filter(o => targets.includes(o) && o.isActive(true) && o.hasAbilityWithAttr(IncreasePpAbAttr)); + return foesWithPressure.length; + } + + /** + * Modifies `this.targets` in place, based upon: + * - Move redirection abilities, effects, etc. + * - Counterattacks, which pass a special value into the `targets` constructor param (`[`{@linkcode BattlerIndex.ATTACKER}`]`). + */ + protected resolveRedirectTarget() { + if (this.targets.length === 1) { + const currentTarget = this.targets[0]; + const redirectTarget = new Utils.NumberHolder(currentTarget); + + // check move redirection abilities of every pokemon *except* the user. + this.scene.getField(true).filter(p => p !== this.pokemon).forEach(p => applyAbAttrs(RedirectMoveAbAttr, p, null, false, this.move.moveId, redirectTarget)); + + // check for center-of-attention tags (note that this will override redirect abilities) + this.pokemon.getOpponents().forEach(p => { + const redirectTag = p.getTag(CenterOfAttentionTag) as CenterOfAttentionTag; + + // TODO: don't hardcode this interaction. + // Handle interaction between the rage powder center-of-attention tag and moves used by grass types/overcoat-havers (which are immune to RP's redirect) + if (redirectTag && (!redirectTag.powder || (!this.pokemon.isOfType(Type.GRASS) && !this.pokemon.hasAbility(Abilities.OVERCOAT)))) { + redirectTarget.value = p.getBattlerIndex(); + } + }); + + if (currentTarget !== redirectTarget.value) { + if (this.move.getMove().hasAttr(BypassRedirectAttr)) { + redirectTarget.value = currentTarget; + + } else if (this.pokemon.hasAbilityWithAttr(BlockRedirectAbAttr)) { + redirectTarget.value = currentTarget; + this.scene.unshiftPhase(new ShowAbilityPhase(this.scene, this.pokemon.getBattlerIndex(), this.pokemon.getPassiveAbility().hasAttr(BlockRedirectAbAttr))); + } + + this.targets[0] = redirectTarget.value; + } + } + } + + /** + * Counter-attacking moves pass in `[`{@linkcode BattlerIndex.ATTACKER}`]` into the constructor's `targets` param. + * This function modifies `this.targets` to reflect the actual battler index of the user's last + * attacker. + * + * If there is no last attacker, or they are no longer on the field, a message is displayed and the + * move is marked for failure. + */ + protected resolveCounterAttackTarget() { + if (this.targets.length === 1 && this.targets[0] === BattlerIndex.ATTACKER) { + if (this.pokemon.turnData.attacksReceived.length) { + const attacker = this.pokemon.scene.getPokemonById(this.pokemon.turnData.attacksReceived[0].sourceId); + + if (attacker?.isActive(true)) { + this.targets[0] = attacker.getBattlerIndex(); + } + + // account for metal burst and comeuppance hitting remaining targets in double battles + // counterattack will redirect to remaining ally if original attacker faints + if (this.scene.currentBattle.double && this.move.getMove().hasFlag(MoveFlags.REDIRECT_COUNTER)) { + if (this.scene.getField()[this.targets[0]].hp === 0) { + const opposingField = this.pokemon.isPlayer() ? this.scene.getEnemyField() : this.scene.getPlayerField(); + this.targets[0] = opposingField.find(p => p.hp > 0)?.getBattlerIndex() ?? BattlerIndex.ATTACKER; + } + } + } + + if (this.targets[0] === BattlerIndex.ATTACKER) { + this.fail(); + this.showMoveText(); + this.showFailedText(); + } + } + } + + /** + * Handles the case where the move was cancelled or failed: + * - Uses PP if the move failed (not cancelled) and should use PP (failed moves are not affected by {@link Abilities.PRESSURE Pressure}) + * - Records a cancelled OR failed move in move history, so abilities like {@link Abilities.TRUANT Truant} don't trigger on the + * next turn and soft-lock. + * - Lapses `MOVE_EFFECT` tags: + * - Semi-invulnerable battler tags (Fly/Dive/etc.) are intended to lapse on move effects, but also need + * to lapse on move failure/cancellation. + * + * TODO: ...this seems weird. + * - Lapses `AFTER_MOVE` tags: + * - This handles the effects of {@link Moves.SUBSTITUTE Substitute} + * - Removes the second turn of charge moves + * + * TODO: handle charge moves more gracefully + */ + protected handlePreMoveFailures() { + if (this.cancelled || this.failed) { + if (this.failed) { + const ppUsed = this.ignorePp ? 0 : 1; + + if (ppUsed) { + this.move.usePp(); + } + + this.scene.eventTarget.dispatchEvent(new MoveUsedEvent(this.pokemon?.id, this.move.getMove(), ppUsed)); + } + + this.pokemon.pushMoveHistory({ move: Moves.NONE, result: MoveResult.FAIL }); + + this.pokemon.lapseTags(BattlerTagLapseType.MOVE_EFFECT); + this.pokemon.lapseTags(BattlerTagLapseType.AFTER_MOVE); + + this.pokemon.getMoveQueue().shift(); + } + } + + /** + * Displays the move's usage text to the player, unless it's a charge turn (ie: {@link Moves.SOLAR_BEAM Solar Beam}), + * the pokemon is on a recharge turn (ie: {@link Moves.HYPER_BEAM Hyper Beam}), or a 2-turn move was interrupted (ie: {@link Moves.FLY Fly}). + */ + protected showMoveText(): void { + if (this.move.moveId === Moves.NONE) { + return; + } + if (this.move.getMove().hasAttr(ChargeAttr)) { const lastMove = this.pokemon.getLastXMoves() as TurnMove[]; if (!lastMove.length || lastMove[0].move !== this.move.getMove().id || lastMove[0].result !== MoveResult.OTHER) { @@ -311,18 +456,10 @@ export class MovePhase extends BattlePhase { pokemonNameWithAffix: getPokemonNameWithAffix(this.pokemon), moveName: this.move.getName() }), 500); - applyMoveAttrs(PreMoveMessageAttr, this.pokemon, this.pokemon.getOpponents().find(() => true)!, this.move.getMove()); //TODO: is the bang correct here? + applyMoveAttrs(PreMoveMessageAttr, this.pokemon, this.pokemon.getOpponents()[0], this.move.getMove()); } - showFailedText(failedText: string | null = null): void { - this.scene.queueMessage(failedText || i18next.t("battle:attackFailed")); - } - - end() { - if (!this.followUp && this.canMove()) { - this.scene.unshiftPhase(new MoveEndPhase(this.scene, this.pokemon.getBattlerIndex())); - } - - super.end(); + protected showFailedText(failedText?: string): void { + this.scene.queueMessage(failedText ?? i18next.t("battle:attackFailed")); } } diff --git a/src/test/moves/whirlwind.test.ts b/src/test/moves/whirlwind.test.ts index c8ad29a23d7..cc31b2591a2 100644 --- a/src/test/moves/whirlwind.test.ts +++ b/src/test/moves/whirlwind.test.ts @@ -1,12 +1,11 @@ -import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/move"; import { BattlerTagType } from "#app/enums/battler-tag-type"; +import { MoveResult } from "#app/field/pokemon"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/utils/gameManager"; import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; describe("Moves - Whirlwind", () => { let phaserGame: Phaser.Game; @@ -40,14 +39,11 @@ describe("Moves - Whirlwind", () => { await game.classicMode.startBattle([ Species.STARAPTOR ]); const staraptor = game.scene.getPlayerPokemon()!; - const whirlwind = allMoves[Moves.WHIRLWIND]; - vi.spyOn(whirlwind, "getFailedText"); game.move.select(move); - await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); await game.toNextTurn(); expect(staraptor.findTag((t) => t.tagType === BattlerTagType.FLYING)).toBeDefined(); - expect(whirlwind.getFailedText).toHaveBeenCalledOnce(); + expect(game.scene.getEnemyPokemon()!.getLastXMoves(1)[0].result).toBe(MoveResult.MISS); }); }); From 2c97b2bda2cfdec84a2561d8ff47e9443c6a93cd Mon Sep 17 00:00:00 2001 From: chaosgrimmon <31082757+chaosgrimmon@users.noreply.github.com> Date: Fri, 4 Oct 2024 10:51:29 -0400 Subject: [PATCH 018/153] [Sprite] Fix variant Farigiraf icon names (#4572) --- public/images/pokemon_icons_9v.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/images/pokemon_icons_9v.json b/public/images/pokemon_icons_9v.json index 83a47f101fa..06909a8298f 100644 --- a/public/images/pokemon_icons_9v.json +++ b/public/images/pokemon_icons_9v.json @@ -853,14 +853,14 @@ "spriteSourceSize": { "x": 7, "y": 2, "w": 27, "h": 26 }, "sourceSize": { "w": 40, "h": 30 } }, - "981_2.png": { + "981_2": { "frame": { "x": 108, "y": 87, "w": 23, "h": 30 }, "rotated": false, "trimmed": true, "spriteSourceSize": { "x": 9, "y": 0, "w": 23, "h": 30 }, "sourceSize": { "w": 40, "h": 30 } }, - "981_3.png": { + "981_3": { "frame": { "x": 246, "y": 86, "w": 23, "h": 30 }, "rotated": false, "trimmed": true, From 75bd730c0434d6a96c69171285cd53304015abfe Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Fri, 4 Oct 2024 10:55:37 -0400 Subject: [PATCH 019/153] [Balance] Fix TM compatibility on forms, Tera Blast on Indigo Disk mons (#4568) * Fix TM compatibility on forms, Tera Blast on Indigo Disk mons * Additional single strike moves --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/data/balance/tms.ts | 548 +++++++++------------------------------- 1 file changed, 121 insertions(+), 427 deletions(-) diff --git a/src/data/balance/tms.ts b/src/data/balance/tms.ts index e08b677c30c..1a509637e05 100644 --- a/src/data/balance/tms.ts +++ b/src/data/balance/tms.ts @@ -1107,12 +1107,7 @@ export const tmSpecies: TmSpecies = { Species.QUILLADIN, Species.CHESNAUGHT, Species.FROGADIER, - [ - Species.GRENINJA, - "", - "battle-bond", - "ash", - ], + Species.GRENINJA, Species.BUNNELBY, Species.DIGGERSBY, Species.FLETCHLING, @@ -2878,12 +2873,7 @@ export const tmSpecies: TmSpecies = { Species.DELPHOX, Species.FROAKIE, Species.FROGADIER, - [ - Species.GRENINJA, - "", - "battle-bond", - "ash", - ], + Species.GRENINJA, Species.BUNNELBY, Species.DIGGERSBY, Species.FLETCHLING, @@ -3910,7 +3900,6 @@ export const tmSpecies: TmSpecies = { Species.YAMPER, Species.BOLTUND, Species.ZAMAZENTA, - Species.URSHIFU, Species.ZARUDE, Species.GLASTRIER, Species.WYRDEER, @@ -3940,6 +3929,10 @@ export const tmSpecies: TmSpecies = { Species.ALOLA_NINETALES, Species.ALOLA_PERSIAN, Species.ALOLA_GOLEM, + [ + Species.URSHIFU, + "single-strike", + ], Species.HISUI_GROWLITHE, Species.HISUI_ARCANINE, Species.HISUI_TYPHLOSION, @@ -6987,14 +6980,7 @@ export const tmSpecies: TmSpecies = { Species.LITLEO, Species.PYROAR, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.SKIDDO, Species.GOGOAT, @@ -8301,7 +8287,6 @@ export const tmSpecies: TmSpecies = { [ Species.WORMADAM, "sandy", - "trash", ], Species.ALOLA_SANDSHREW, Species.ALOLA_SANDSLASH, @@ -8612,12 +8597,7 @@ export const tmSpecies: TmSpecies = { Species.CHESNAUGHT, Species.FROAKIE, Species.FROGADIER, - [ - Species.GRENINJA, - "", - "battle-bond", - "ash", - ], + Species.GRENINJA, Species.BUNNELBY, Species.DIGGERSBY, Species.LITLEO, @@ -9406,14 +9386,7 @@ export const tmSpecies: TmSpecies = { Species.LITLEO, Species.PYROAR, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.SKIDDO, Species.GOGOAT, @@ -9766,14 +9739,7 @@ export const tmSpecies: TmSpecies = { Species.DELPHOX, Species.VIVILLON, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.ESPURR, Species.MEOWSTIC, @@ -11147,14 +11113,7 @@ export const tmSpecies: TmSpecies = { Species.LITLEO, Species.PYROAR, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.SKIDDO, Species.GOGOAT, @@ -13657,12 +13616,7 @@ export const tmSpecies: TmSpecies = { Species.DELPHOX, Species.FROAKIE, Species.FROGADIER, - [ - Species.GRENINJA, - "", - "battle-bond", - "ash", - ], + Species.GRENINJA, Species.FLETCHLING, Species.FLETCHINDER, Species.TALONFLAME, @@ -15326,14 +15280,7 @@ export const tmSpecies: TmSpecies = { Species.LITLEO, Species.PYROAR, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.SKIDDO, Species.GOGOAT, @@ -16934,14 +16881,7 @@ export const tmSpecies: TmSpecies = { Species.LITLEO, Species.PYROAR, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.SKIDDO, Species.GOGOAT, @@ -18483,14 +18423,7 @@ export const tmSpecies: TmSpecies = { Species.LITLEO, Species.PYROAR, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.SKIDDO, Species.GOGOAT, @@ -20250,14 +20183,7 @@ export const tmSpecies: TmSpecies = { Species.LITLEO, Species.PYROAR, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.SKIDDO, Species.GOGOAT, @@ -21583,12 +21509,7 @@ export const tmSpecies: TmSpecies = { Species.DELPHOX, Species.FROAKIE, Species.FROGADIER, - [ - Species.GRENINJA, - "", - "battle-bond", - "ash", - ], + Species.GRENINJA, Species.BUNNELBY, Species.DIGGERSBY, Species.LITLEO, @@ -22516,7 +22437,6 @@ export const tmSpecies: TmSpecies = { [ Species.WORMADAM, "sandy", - "trash", ], Species.ALOLA_DIGLETT, Species.ALOLA_DUGTRIO, @@ -22691,14 +22611,7 @@ export const tmSpecies: TmSpecies = { Species.CHESNAUGHT, Species.VIVILLON, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.SKIDDO, Species.GOGOAT, @@ -23402,12 +23315,7 @@ export const tmSpecies: TmSpecies = { Species.DELPHOX, Species.FROAKIE, Species.FROGADIER, - [ - Species.GRENINJA, - "", - "battle-bond", - "ash", - ], + Species.GRENINJA, Species.BUNNELBY, Species.DIGGERSBY, Species.FLETCHLING, @@ -24134,12 +24042,7 @@ export const tmSpecies: TmSpecies = { Species.KELDEO, Species.FROAKIE, Species.FROGADIER, - [ - Species.GRENINJA, - "", - "battle-bond", - "ash", - ], + Species.GRENINJA, Species.PANCHAM, Species.PANGORO, Species.HONEDGE, @@ -24842,14 +24745,7 @@ export const tmSpecies: TmSpecies = { Species.LITLEO, Species.PYROAR, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.SKIDDO, Species.GOGOAT, @@ -25712,14 +25608,7 @@ export const tmSpecies: TmSpecies = { Species.LITLEO, Species.PYROAR, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.SKIDDO, Species.GOGOAT, @@ -26695,14 +26584,7 @@ export const tmSpecies: TmSpecies = { Species.LITLEO, Species.PYROAR, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.SKIDDO, Species.GOGOAT, @@ -27845,14 +27727,7 @@ export const tmSpecies: TmSpecies = { Species.LITLEO, Species.PYROAR, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.SKIDDO, Species.GOGOAT, @@ -28911,14 +28786,7 @@ export const tmSpecies: TmSpecies = { Species.LITLEO, Species.PYROAR, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.SKIDDO, Species.GOGOAT, @@ -29514,14 +29382,7 @@ export const tmSpecies: TmSpecies = { Species.DELPHOX, Species.VIVILLON, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.ESPURR, Species.MEOWSTIC, @@ -31408,14 +31269,7 @@ export const tmSpecies: TmSpecies = { Species.LITLEO, Species.PYROAR, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.SKIDDO, Species.GOGOAT, @@ -32327,14 +32181,7 @@ export const tmSpecies: TmSpecies = { Species.LITLEO, Species.PYROAR, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.SKIDDO, Species.GOGOAT, @@ -33037,14 +32884,7 @@ export const tmSpecies: TmSpecies = { Species.LITLEO, Species.PYROAR, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.SKIDDO, Species.GOGOAT, @@ -33471,7 +33311,6 @@ export const tmSpecies: TmSpecies = { Species.ARCTOVISH, Species.ZACIAN, Species.ZAMAZENTA, - Species.URSHIFU, Species.ZARUDE, Species.REGIDRAGO, Species.GLASTRIER, @@ -33522,6 +33361,10 @@ export const tmSpecies: TmSpecies = { Species.ALOLA_MUK, Species.GALAR_MEOWTH, Species.GALAR_STUNFISK, + [ + Species.URSHIFU, + "single-strike", + ], [ Species.CALYREX, "ice", @@ -36644,14 +36487,7 @@ export const tmSpecies: TmSpecies = { Species.LITLEO, Species.PYROAR, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.SKIDDO, Species.GOGOAT, @@ -37389,14 +37225,7 @@ export const tmSpecies: TmSpecies = { Species.BUNNELBY, Species.DIGGERSBY, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.SKIDDO, Species.GOGOAT, @@ -38266,23 +38095,11 @@ export const tmSpecies: TmSpecies = { Species.DELPHOX, Species.FROAKIE, Species.FROGADIER, - [ - Species.GRENINJA, - "", - "battle-bond", - "ash", - ], + Species.GRENINJA, Species.LITLEO, Species.PYROAR, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.SKIDDO, Species.GOGOAT, @@ -39323,12 +39140,7 @@ export const tmSpecies: TmSpecies = { Species.CHESPIN, Species.QUILLADIN, Species.CHESNAUGHT, - [ - Species.GRENINJA, - "", - "battle-bond", - "ash", - ], + Species.GRENINJA, Species.BUNNELBY, Species.DIGGERSBY, Species.SKIDDO, @@ -40356,7 +40168,10 @@ export const tmSpecies: TmSpecies = { Species.FENNEKIN, Species.BRAIXEN, Species.DELPHOX, - Species.MEOWSTIC, + [ + Species.MEOWSTIC, + "male", + ], Species.KLEFKI, Species.PHANTUMP, Species.TREVENANT, @@ -41805,7 +41620,6 @@ export const tmSpecies: TmSpecies = { [ Species.WORMADAM, "sandy", - "trash", ], Species.ALOLA_SANDSHREW, Species.ALOLA_SANDSLASH, @@ -43701,12 +43515,7 @@ export const tmSpecies: TmSpecies = { Species.DELPHOX, Species.FROAKIE, Species.FROGADIER, - [ - Species.GRENINJA, - "", - "battle-bond", - "ash", - ], + Species.GRENINJA, Species.BUNNELBY, Species.DIGGERSBY, Species.SKIDDO, @@ -44160,14 +43969,7 @@ export const tmSpecies: TmSpecies = { Species.QUILLADIN, Species.CHESNAUGHT, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.SKIDDO, Species.GOGOAT, @@ -44377,14 +44179,7 @@ export const tmSpecies: TmSpecies = { Species.DELPHOX, Species.VIVILLON, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.ESPURR, Species.MEOWSTIC, @@ -45256,6 +45051,10 @@ export const tmSpecies: TmSpecies = { Species.IRON_CROWN, Species.TERAPAGOS, Species.ALOLA_EXEGGUTOR, + [ + Species.INDEEDEE, + "male", + ], ], [Moves.GYRO_BALL]: [ Species.SQUIRTLE, @@ -47501,12 +47300,7 @@ export const tmSpecies: TmSpecies = { Species.ACCELGOR, Species.FROAKIE, Species.FROGADIER, - [ - Species.GRENINJA, - "", - "battle-bond", - "ash", - ], + Species.GRENINJA, Species.SKRELP, Species.DRAGALGE, Species.MAREANIE, @@ -48143,7 +47937,6 @@ export const tmSpecies: TmSpecies = { Species.RUNERIGUS, Species.MORPEKO, Species.DURALUDON, - Species.URSHIFU, Species.ZARUDE, Species.SPECTRIER, Species.OVERQWIL, @@ -48179,6 +47972,10 @@ export const tmSpecies: TmSpecies = { Species.GALAR_WEEZING, Species.GALAR_MOLTRES, Species.GALAR_YAMASK, + [ + Species.URSHIFU, + "single-strike", + ], [ Species.CALYREX, "shadow", @@ -48456,14 +48253,7 @@ export const tmSpecies: TmSpecies = { Species.QUILLADIN, Species.CHESNAUGHT, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.SKIDDO, Species.GOGOAT, @@ -49622,7 +49412,10 @@ export const tmSpecies: TmSpecies = { Species.TORTERRA, Species.BUDEW, Species.ROSERADE, - Species.WORMADAM, + [ + Species.WORMADAM, + "plant", + ], Species.MOTHIM, Species.CHERUBI, Species.CHERRIM, @@ -49698,14 +49491,7 @@ export const tmSpecies: TmSpecies = { Species.CHESNAUGHT, Species.VIVILLON, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.SKIDDO, Species.GOGOAT, @@ -52635,7 +52421,10 @@ export const tmSpecies: TmSpecies = { Species.TORTERRA, Species.BUDEW, Species.ROSERADE, - Species.WORMADAM, + [ + Species.WORMADAM, + "plant", + ], Species.SNOVER, Species.ABOMASNOW, Species.TANGROWTH, @@ -53751,7 +53540,10 @@ export const tmSpecies: TmSpecies = { Species.BIBAREL, Species.BUDEW, Species.ROSERADE, - Species.WORMADAM, + [ + Species.WORMADAM, + "plant", + ], Species.PACHIRISU, Species.CHERUBI, Species.CHERRIM, @@ -53863,14 +53655,7 @@ export const tmSpecies: TmSpecies = { Species.BUNNELBY, Species.DIGGERSBY, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.SKIDDO, Species.GOGOAT, @@ -55590,12 +55375,7 @@ export const tmSpecies: TmSpecies = { Species.CHESPIN, Species.QUILLADIN, Species.CHESNAUGHT, - [ - Species.GRENINJA, - "", - "battle-bond", - "ash", - ], + Species.GRENINJA, Species.PANCHAM, Species.PANGORO, Species.HELIOPTILE, @@ -55877,7 +55657,6 @@ export const tmSpecies: TmSpecies = { Species.MR_RIME, Species.MORPEKO, Species.DURALUDON, - Species.URSHIFU, Species.SPECTRIER, Species.MEOWSCARADA, Species.SQUAWKABILLY, @@ -55918,6 +55697,10 @@ export const tmSpecies: TmSpecies = { Species.GALAR_MOLTRES, Species.GALAR_SLOWKING, Species.GALAR_STUNFISK, + [ + Species.URSHIFU, + "single-strike", + ], [ Species.CALYREX, "shadow", @@ -56577,14 +56360,7 @@ export const tmSpecies: TmSpecies = { Species.LITLEO, Species.PYROAR, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.SKIDDO, Species.GOGOAT, @@ -57019,14 +56795,7 @@ export const tmSpecies: TmSpecies = { Species.LITLEO, Species.PYROAR, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.PANCHAM, Species.PANGORO, @@ -57354,14 +57123,7 @@ export const tmSpecies: TmSpecies = { Species.BRAIXEN, Species.DELPHOX, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.ESPURR, Species.MEOWSTIC, @@ -58997,7 +58759,6 @@ export const tmSpecies: TmSpecies = { [ Species.WORMADAM, "sandy", - "trash", ], Species.ALOLA_SANDSHREW, Species.ALOLA_SANDSLASH, @@ -60070,7 +59831,6 @@ export const tmSpecies: TmSpecies = { Species.DURALUDON, Species.ZACIAN, Species.ZAMAZENTA, - Species.URSHIFU, Species.ZARUDE, Species.GLASTRIER, Species.SPECTRIER, @@ -60116,6 +59876,10 @@ export const tmSpecies: TmSpecies = { Species.HISUI_ZOROARK, Species.HISUI_BRAVIARY, Species.BLOODMOON_URSALUNA, + [ + Species.URSHIFU, + "single-strike", + ], ], [Moves.PHANTOM_FORCE]: [ Species.HAUNTER, @@ -60446,14 +60210,7 @@ export const tmSpecies: TmSpecies = { Species.QUILLADIN, Species.CHESNAUGHT, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.SKIDDO, Species.GOGOAT, @@ -60529,16 +60286,12 @@ export const tmSpecies: TmSpecies = { Species.WHIMSICOTT, Species.ALOMOMOLA, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, - Species.MEOWSTIC, + [ + Species.MEOWSTIC, + "male", + ], Species.SPRITZEE, Species.AROMATISSE, Species.SYLVEON, @@ -61402,14 +61155,7 @@ export const tmSpecies: TmSpecies = { Species.LITLEO, Species.PYROAR, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.SKIDDO, Species.GOGOAT, @@ -61899,14 +61645,7 @@ export const tmSpecies: TmSpecies = { Species.MELOETTA, Species.DELPHOX, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.SPRITZEE, Species.AROMATISSE, @@ -62617,7 +62356,6 @@ export const tmSpecies: TmSpecies = { Species.SIRFETCHD, Species.FALINKS, Species.PINCURCHIN, - Species.URSHIFU, Species.ZARUDE, Species.GLASTRIER, Species.TAROUNTULA, @@ -62647,6 +62385,10 @@ export const tmSpecies: TmSpecies = { Species.GALAR_ZAPDOS, Species.GALAR_CORSOLA, Species.GALAR_LINOONE, + [ + Species.URSHIFU, + "single-strike", + ], [ Species.CALYREX, "ice", @@ -63541,12 +63283,7 @@ export const tmSpecies: TmSpecies = { Species.KELDEO, Species.FROAKIE, Species.FROGADIER, - [ - Species.GRENINJA, - "", - "battle-bond", - "ash", - ], + Species.GRENINJA, Species.INKAY, Species.MALAMAR, Species.BINACLE, @@ -64755,7 +64492,6 @@ export const tmSpecies: TmSpecies = { Species.OBSTAGOON, Species.PERRSERKER, Species.MORPEKO, - Species.URSHIFU, Species.ZARUDE, Species.GLASTRIER, Species.SPECTRIER, @@ -64803,6 +64539,10 @@ export const tmSpecies: TmSpecies = { Species.GALAR_LINOONE, Species.GALAR_DARMANITAN, Species.GALAR_STUNFISK, + [ + Species.URSHIFU, + "single-strike", + ], [ Species.CALYREX, "ice", @@ -65933,12 +65673,7 @@ export const tmSpecies: TmSpecies = { Species.DELPHOX, Species.FROAKIE, Species.FROGADIER, - [ - Species.GRENINJA, - "", - "battle-bond", - "ash", - ], + Species.GRENINJA, Species.BUNNELBY, Species.DIGGERSBY, Species.FLETCHLING, @@ -65950,14 +65685,7 @@ export const tmSpecies: TmSpecies = { Species.LITLEO, Species.PYROAR, Species.FLABEBE, - [ - Species.FLOETTE, - "red", - "yellow", - "orange", - "blue", - "white", - ], + Species.FLOETTE, Species.FLORGES, Species.SKIDDO, Species.GOGOAT, @@ -66291,6 +66019,13 @@ export const tmSpecies: TmSpecies = { Species.MUNKIDORI, Species.FEZANDIPITI, Species.OGERPON, + Species.ARCHALUDON, + Species.HYDRAPPLE, + Species.GOUGING_FIRE, + Species.RAGING_BOLT, + Species.IRON_BOULDER, + Species.IRON_CROWN, + Species.PECHARUNT, Species.GALAR_MEOWTH, Species.GALAR_SLOWPOKE, Species.GALAR_SLOWBRO, @@ -66429,16 +66164,8 @@ export const tmSpecies: TmSpecies = { Species.PIPLUP, Species.PRINPLUP, Species.EMPOLEON, - [ - Species.SHELLOS, - "east", - "west", - ], - [ - Species.GASTRODON, - "east", - "west", - ], + Species.SHELLOS, + Species.GASTRODON, Species.MISMAGIUS, Species.HAPPINY, Species.SNOVER, @@ -66456,25 +66183,11 @@ export const tmSpecies: TmSpecies = { Species.CUBCHOO, Species.BEARTIC, Species.CRYOGONAL, - [ - Species.TORNADUS, - "incarnate", - "therian", - ], - [ - Species.KYUREM, - "", - "black", - "white", - ], + Species.TORNADUS, + Species.KYUREM, Species.FROAKIE, Species.FROGADIER, - [ - Species.GRENINJA, - "", - "battle-bond", - "ash", - ], + Species.GRENINJA, Species.SKRELP, Species.DRAGALGE, Species.BERGMITE, @@ -66482,11 +66195,7 @@ export const tmSpecies: TmSpecies = { Species.DIANCIE, Species.PRIMARINA, Species.CRABOMINABLE, - [ - Species.MAGEARNA, - "", - "original", - ], + Species.MAGEARNA, Species.INTELEON, Species.FROSMOTH, Species.EISCUE, @@ -66779,12 +66488,7 @@ export const tmSpecies: TmSpecies = { Species.CHESNAUGHT, Species.FROAKIE, Species.FROGADIER, - [ - Species.GRENINJA, - "", - "battle-bond", - "ash", - ], + Species.GRENINJA, Species.LITLEO, Species.PYROAR, Species.FLABEBE, @@ -67007,23 +66711,14 @@ export const tmSpecies: TmSpecies = { Species.WEAVILE, Species.GLACEON, Species.FROSLASS, - [ - Species.PALKIA, - "", - "origin", - ], + Species.PALKIA, Species.PHIONE, Species.MANAPHY, Species.ARCEUS, Species.OSHAWOTT, Species.DEWOTT, Species.SAMUROTT, - [ - Species.BASCULIN, - "red-striped", - "blue-striped", - "white-striped", - ], + Species.BASCULIN, Species.MINCCINO, Species.CINCCINO, Species.DUCKLETT, @@ -67036,12 +66731,7 @@ export const tmSpecies: TmSpecies = { Species.KELDEO, Species.FROAKIE, Species.FROGADIER, - [ - Species.GRENINJA, - "", - "battle-bond", - "ash", - ], + Species.GRENINJA, Species.FLABEBE, Species.FLOETTE, Species.FLORGES, @@ -67304,6 +66994,10 @@ export const tmSpecies: TmSpecies = { Species.FEZANDIPITI, Species.ALOLA_RAICHU, Species.ETERNAL_FLOETTE, + [ + Species.INDEEDEE, + "female", + ], ], [Moves.TEMPER_FLARE]: [ Species.CHARMANDER, From 0bd4d6c86bc85907c6194bc723f0220fb855f6ab Mon Sep 17 00:00:00 2001 From: innerthunder <168692175+innerthunder@users.noreply.github.com> Date: Fri, 4 Oct 2024 13:20:37 -0700 Subject: [PATCH 020/153] [Move] Fully Implement the Pledge Moves (#4511) * Implement Fire/Grass Pledge combo * Add other Pledge combo effects (untested) * Fix missing enums * Pledge moves integration tests * Add turn order manipulation + more tests * Safeguarding against weird Instruct interactions * Update src/test/moves/pledge_moves.test.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Fix style issues * Delete arena-tag.json * Update package-lock.json * Use `instanceof` for all arg type inference * Add Pledge Move sleep test * Fix linting * Fix linting Apparently GitHub has a limit on how many errors it will show * Pledges now only bypass redirection from abilities --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- package-lock.json | 1 + src/data/arena-tag.ts | 82 +++++++ src/data/move.ts | 203 ++++++++++++++++- src/enums/arena-tag-type.ts | 3 + src/field/pokemon.ts | 12 +- src/phases/move-phase.ts | 16 +- src/test/moves/pledge_moves.test.ts | 337 ++++++++++++++++++++++++++++ 7 files changed, 642 insertions(+), 12 deletions(-) create mode 100644 src/test/moves/pledge_moves.test.ts diff --git a/package-lock.json b/package-lock.json index f633d427d6d..ee2708b38f5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,6 +7,7 @@ "": { "name": "pokemon-rogue-battle", "version": "1.0.4", + "hasInstallScript": true, "dependencies": { "@material/material-color-utilities": "^0.2.7", "crypto-js": "^4.2.0", diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index abe443cdfa6..b75d23b48d8 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -19,6 +19,7 @@ import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; import { ShowAbilityPhase } from "#app/phases/show-ability-phase"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; +import { CommonAnimPhase } from "#app/phases/common-anim-phase"; export enum ArenaTagSide { BOTH, @@ -1025,6 +1026,81 @@ class ImprisonTag extends ArenaTrapTag { } } +/** + * Arena Tag implementing the "sea of fire" effect from the combination + * of {@link https://bulbapedia.bulbagarden.net/wiki/Fire_Pledge_(move) | Fire Pledge} + * and {@link https://bulbapedia.bulbagarden.net/wiki/Grass_Pledge_(move) | Grass Pledge}. + * Damages all non-Fire-type Pokemon on the given side of the field at the end + * of each turn for 4 turns. + */ +class FireGrassPledgeTag extends ArenaTag { + constructor(sourceId: number, side: ArenaTagSide) { + super(ArenaTagType.FIRE_GRASS_PLEDGE, 4, Moves.FIRE_PLEDGE, sourceId, side); + } + + override onAdd(arena: Arena): void { + // "A sea of fire enveloped your/the opposing team!" + arena.scene.queueMessage(i18next.t(`arenaTag:fireGrassPledgeOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`)); + } + + override lapse(arena: Arena): boolean { + const field: Pokemon[] = (this.side === ArenaTagSide.PLAYER) + ? arena.scene.getPlayerField() + : arena.scene.getEnemyField(); + + field.filter(pokemon => !pokemon.isOfType(Type.FIRE)).forEach(pokemon => { + // "{pokemonNameWithAffix} was hurt by the sea of fire!" + pokemon.scene.queueMessage(i18next.t("arenaTag:fireGrassPledgeLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + // TODO: Replace this with a proper animation + pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.MAGMA_STORM)); + pokemon.damageAndUpdate(Utils.toDmgValue(pokemon.getMaxHp() / 8)); + }); + + return super.lapse(arena); + } +} + +/** + * Arena Tag implementing the "rainbow" effect from the combination + * of {@link https://bulbapedia.bulbagarden.net/wiki/Water_Pledge_(move) | Water Pledge} + * and {@link https://bulbapedia.bulbagarden.net/wiki/Fire_Pledge_(move) | Fire Pledge}. + * Doubles the secondary effect chance of moves from Pokemon on the + * given side of the field for 4 turns. + */ +class WaterFirePledgeTag extends ArenaTag { + constructor(sourceId: number, side: ArenaTagSide) { + super(ArenaTagType.WATER_FIRE_PLEDGE, 4, Moves.WATER_PLEDGE, sourceId, side); + } + + override onAdd(arena: Arena): void { + // "A rainbow appeared in the sky on your/the opposing team's side!" + arena.scene.queueMessage(i18next.t(`arenaTag:waterFirePledgeOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`)); + } + + override apply(arena: Arena, args: any[]): boolean { + const moveChance = args[0] as Utils.NumberHolder; + moveChance.value *= 2; + return true; + } +} + +/** + * Arena Tag implementing the "swamp" effect from the combination + * of {@link https://bulbapedia.bulbagarden.net/wiki/Grass_Pledge_(move) | Grass Pledge} + * and {@link https://bulbapedia.bulbagarden.net/wiki/Water_Pledge_(move) | Water Pledge}. + * Quarters the Speed of Pokemon on the given side of the field for 4 turns. + */ +class GrassWaterPledgeTag extends ArenaTag { + constructor(sourceId: number, side: ArenaTagSide) { + super(ArenaTagType.GRASS_WATER_PLEDGE, 4, Moves.GRASS_PLEDGE, sourceId, side); + } + + override onAdd(arena: Arena): void { + // "A swamp enveloped your/the opposing team!" + arena.scene.queueMessage(i18next.t(`arenaTag:grassWaterPledgeOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`)); + } +} + export function getArenaTag(tagType: ArenaTagType, turnCount: integer, sourceMove: Moves | undefined, sourceId: integer, targetIndex?: BattlerIndex, side: ArenaTagSide = ArenaTagSide.BOTH): ArenaTag | null { switch (tagType) { case ArenaTagType.MIST: @@ -1076,6 +1152,12 @@ export function getArenaTag(tagType: ArenaTagType, turnCount: integer, sourceMov return new SafeguardTag(turnCount, sourceId, side); case ArenaTagType.IMPRISON: return new ImprisonTag(sourceId, side); + case ArenaTagType.FIRE_GRASS_PLEDGE: + return new FireGrassPledgeTag(sourceId, side); + case ArenaTagType.WATER_FIRE_PLEDGE: + return new WaterFirePledgeTag(sourceId, side); + case ArenaTagType.GRASS_WATER_PLEDGE: + return new GrassWaterPledgeTag(sourceId, side); default: return null; } diff --git a/src/data/move.ts b/src/data/move.ts index 2225a457a42..62ac36b28ad 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -1010,7 +1010,14 @@ export class MoveEffectAttr extends MoveAttr { */ getMoveChance(user: Pokemon, target: Pokemon, move: Move, selfEffect?: Boolean, showAbility?: Boolean): integer { const moveChance = new Utils.NumberHolder(move.chance); + applyAbAttrs(MoveEffectChanceMultiplierAbAttr, user, null, false, moveChance, move, target, selfEffect, showAbility); + + if (!move.hasAttr(FlinchAttr) || moveChance.value <= move.chance) { + const userSide = user.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; + user.scene.arena.applyTagsForSide(ArenaTagType.WATER_FIRE_PLEDGE, userSide, moveChance); + } + if (!selfEffect) { applyPreDefendAbAttrs(IgnoreMoveEffectsAbAttr, target, user, null, null, false, moveChance); } @@ -2687,6 +2694,62 @@ export class DelayedAttackAttr extends OverrideMoveEffectAttr { } } +/** + * Attribute that cancels the associated move's effects when set to be combined with the user's ally's + * subsequent move this turn. Used for Grass Pledge, Water Pledge, and Fire Pledge. + * @extends OverrideMoveEffectAttr + */ +export class AwaitCombinedPledgeAttr extends OverrideMoveEffectAttr { + constructor() { + super(true); + } + /** + * If the user's ally is set to use a different move with this attribute, + * defer this move's effects for a combined move on the ally's turn. + * @param user the {@linkcode Pokemon} using this move + * @param target n/a + * @param move the {@linkcode Move} being used + * @param args + * - [0] a {@linkcode Utils.BooleanHolder} indicating whether the move's base + * effects should be overridden this turn. + * @returns `true` if base move effects were overridden; `false` otherwise + */ + override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + if (user.turnData.combiningPledge) { + // "The two moves have become one!\nIt's a combined move!" + user.scene.queueMessage(i18next.t("moveTriggers:combiningPledge")); + return false; + } + + const overridden = args[0] as Utils.BooleanHolder; + + const allyMovePhase = user.scene.findPhase((phase) => phase instanceof MovePhase && phase.pokemon.isPlayer() === user.isPlayer()); + if (allyMovePhase) { + const allyMove = allyMovePhase.move.getMove(); + if (allyMove !== move && allyMove.hasAttr(AwaitCombinedPledgeAttr)) { + [ user, allyMovePhase.pokemon ].forEach((p) => p.turnData.combiningPledge = move.id); + + // "{userPokemonName} is waiting for {allyPokemonName}'s move..." + user.scene.queueMessage(i18next.t("moveTriggers:awaitingPledge", { + userPokemonName: getPokemonNameWithAffix(user), + allyPokemonName: getPokemonNameWithAffix(allyMovePhase.pokemon) + })); + + // Move the ally's MovePhase (if needed) so that the ally moves next + const allyMovePhaseIndex = user.scene.phaseQueue.indexOf(allyMovePhase); + const firstMovePhaseIndex = user.scene.phaseQueue.findIndex((phase) => phase instanceof MovePhase); + if (allyMovePhaseIndex !== firstMovePhaseIndex) { + user.scene.prependToPhase(user.scene.phaseQueue.splice(allyMovePhaseIndex, 1)[0], MovePhase); + } + + overridden.value = true; + return true; + } + } + return false; + } +} + /** * Attribute used for moves that change stat stages * @param stats {@linkcode BattleStat} array of stats to be changed @@ -3762,6 +3825,45 @@ export class LastMoveDoublePowerAttr extends VariablePowerAttr { } } +/** + * Changes a Pledge move's power to 150 when combined with another unique Pledge + * move from an ally. + */ +export class CombinedPledgePowerAttr extends VariablePowerAttr { + override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + const power = args[0]; + if (!(power instanceof Utils.NumberHolder)) { + return false; + } + const combinedPledgeMove = user.turnData.combiningPledge; + + if (combinedPledgeMove && combinedPledgeMove !== move.id) { + power.value *= 150 / 80; + return true; + } + return false; + } +} + +/** + * Applies STAB to the given Pledge move if the move is part of a combined attack. + */ +export class CombinedPledgeStabBoostAttr extends MoveAttr { + override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + const stabMultiplier = args[0]; + if (!(stabMultiplier instanceof Utils.NumberHolder)) { + return false; + } + const combinedPledgeMove = user.turnData.combiningPledge; + + if (combinedPledgeMove && combinedPledgeMove !== move.id) { + stabMultiplier.value = 1.5; + return true; + } + return false; + } +} + export class VariableAtkAttr extends MoveAttr { constructor() { super(); @@ -4358,6 +4460,47 @@ export class MatchUserTypeAttr extends VariableMoveTypeAttr { } } +/** + * Changes the type of a Pledge move based on the Pledge move combined with it. + * @extends VariableMoveTypeAttr + */ +export class CombinedPledgeTypeAttr extends VariableMoveTypeAttr { + override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + const moveType = args[0]; + if (!(moveType instanceof Utils.NumberHolder)) { + return false; + } + + const combinedPledgeMove = user.turnData.combiningPledge; + if (!combinedPledgeMove) { + return false; + } + + switch (move.id) { + case Moves.FIRE_PLEDGE: + if (combinedPledgeMove === Moves.WATER_PLEDGE) { + moveType.value = Type.WATER; + return true; + } + return false; + case Moves.WATER_PLEDGE: + if (combinedPledgeMove === Moves.GRASS_PLEDGE) { + moveType.value = Type.GRASS; + return true; + } + return false; + case Moves.GRASS_PLEDGE: + if (combinedPledgeMove === Moves.FIRE_PLEDGE) { + moveType.value = Type.FIRE; + return true; + } + return false; + default: + return false; + } + } +} + export class VariableMoveTypeMultiplierAttr extends MoveAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { return false; @@ -4505,7 +4648,15 @@ export class TypelessAttr extends MoveAttr { } * Attribute used for moves which ignore redirection effects, and always target their original target, i.e. Snipe Shot * Bypasses Storm Drain, Follow Me, Ally Switch, and the like. */ -export class BypassRedirectAttr extends MoveAttr { } +export class BypassRedirectAttr extends MoveAttr { + /** `true` if this move only bypasses redirection from Abilities */ + public readonly abilitiesOnly: boolean; + + constructor(abilitiesOnly: boolean = false) { + super(); + this.abilitiesOnly = abilitiesOnly; + } +} export class FrenzyAttr extends MoveEffectAttr { constructor() { @@ -5196,6 +5347,32 @@ export class SwapArenaTagsAttr extends MoveEffectAttr { } } +/** + * Attribute that adds a secondary effect to the field when two unique Pledge moves + * are combined. The effect added varies based on the two Pledge moves combined. + */ +export class AddPledgeEffectAttr extends AddArenaTagAttr { + private readonly requiredPledge: Moves; + + constructor(tagType: ArenaTagType, requiredPledge: Moves, selfSideTarget: boolean = false) { + super(tagType, 4, false, selfSideTarget); + + this.requiredPledge = requiredPledge; + } + + override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + // TODO: add support for `HIT` effect triggering in AddArenaTagAttr to remove the need for this check + if (user.getLastXMoves(1)[0].result !== MoveResult.SUCCESS) { + return false; + } + + if (user.turnData.combiningPledge === this.requiredPledge) { + return super.apply(user, target, move, args); + } + return false; + } +} + /** * Attribute used for Revival Blessing. * @extends MoveEffectAttr @@ -8341,11 +8518,29 @@ export function initMoves() { new AttackMove(Moves.INFERNO, Type.FIRE, MoveCategory.SPECIAL, 100, 50, 5, 100, 0, 5) .attr(StatusEffectAttr, StatusEffect.BURN), new AttackMove(Moves.WATER_PLEDGE, Type.WATER, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 5) - .partial(), + .attr(AwaitCombinedPledgeAttr) + .attr(CombinedPledgeTypeAttr) + .attr(CombinedPledgePowerAttr) + .attr(CombinedPledgeStabBoostAttr) + .attr(AddPledgeEffectAttr, ArenaTagType.WATER_FIRE_PLEDGE, Moves.FIRE_PLEDGE, true) + .attr(AddPledgeEffectAttr, ArenaTagType.GRASS_WATER_PLEDGE, Moves.GRASS_PLEDGE) + .attr(BypassRedirectAttr, true), new AttackMove(Moves.FIRE_PLEDGE, Type.FIRE, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 5) - .partial(), + .attr(AwaitCombinedPledgeAttr) + .attr(CombinedPledgeTypeAttr) + .attr(CombinedPledgePowerAttr) + .attr(CombinedPledgeStabBoostAttr) + .attr(AddPledgeEffectAttr, ArenaTagType.FIRE_GRASS_PLEDGE, Moves.GRASS_PLEDGE) + .attr(AddPledgeEffectAttr, ArenaTagType.WATER_FIRE_PLEDGE, Moves.WATER_PLEDGE, true) + .attr(BypassRedirectAttr, true), new AttackMove(Moves.GRASS_PLEDGE, Type.GRASS, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 5) - .partial(), + .attr(AwaitCombinedPledgeAttr) + .attr(CombinedPledgeTypeAttr) + .attr(CombinedPledgePowerAttr) + .attr(CombinedPledgeStabBoostAttr) + .attr(AddPledgeEffectAttr, ArenaTagType.GRASS_WATER_PLEDGE, Moves.WATER_PLEDGE) + .attr(AddPledgeEffectAttr, ArenaTagType.FIRE_GRASS_PLEDGE, Moves.FIRE_PLEDGE) + .attr(BypassRedirectAttr, true), new AttackMove(Moves.VOLT_SWITCH, Type.ELECTRIC, MoveCategory.SPECIAL, 70, 100, 20, -1, 0, 5) .attr(ForceSwitchOutAttr, true), new AttackMove(Moves.STRUGGLE_BUG, Type.BUG, MoveCategory.SPECIAL, 50, 100, 20, 100, 0, 5) diff --git a/src/enums/arena-tag-type.ts b/src/enums/arena-tag-type.ts index c484b2932f1..0ab0d76e880 100644 --- a/src/enums/arena-tag-type.ts +++ b/src/enums/arena-tag-type.ts @@ -25,4 +25,7 @@ export enum ArenaTagType { NO_CRIT = "NO_CRIT", IMPRISON = "IMPRISON", PLASMA_FISTS = "PLASMA_FISTS", + FIRE_GRASS_PLEDGE = "FIRE_GRASS_PLEDGE", + WATER_FIRE_PLEDGE = "WATER_FIRE_PLEDGE", + GRASS_WATER_PLEDGE = "GRASS_WATER_PLEDGE", } diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 05567491a1a..c2ef7d919b0 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -3,7 +3,7 @@ import BattleScene, { AnySound } from "#app/battle-scene"; import { Variant, VariantSet, variantColorCache } from "#app/data/variant"; import { variantData } from "#app/data/variant"; import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from "#app/ui/battle-info"; -import Move, { HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, OneHitKOAttr, VariableMoveTypeAttr, VariableDefAttr, AttackMove, ModifiedDamageAttr, VariableMoveTypeMultiplierAttr, IgnoreOpponentStatStagesAttr, SacrificialAttr, VariableMoveCategoryAttr, CounterDamageAttr, StatStageChangeAttr, RechargeAttr, ChargeAttr, IgnoreWeatherTypeDebuffAttr, BypassBurnDamageReductionAttr, SacrificialAttrOnHit, OneHitKOAccuracyAttr, RespectAttackTypeImmunityAttr, MoveTarget } from "#app/data/move"; +import Move, { HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, OneHitKOAttr, VariableMoveTypeAttr, VariableDefAttr, AttackMove, ModifiedDamageAttr, VariableMoveTypeMultiplierAttr, IgnoreOpponentStatStagesAttr, SacrificialAttr, VariableMoveCategoryAttr, CounterDamageAttr, StatStageChangeAttr, RechargeAttr, ChargeAttr, IgnoreWeatherTypeDebuffAttr, BypassBurnDamageReductionAttr, SacrificialAttrOnHit, OneHitKOAccuracyAttr, RespectAttackTypeImmunityAttr, MoveTarget, CombinedPledgeStabBoostAttr } from "#app/data/move"; import { default as PokemonSpecies, PokemonSpeciesForm, getFusedSpeciesName, getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species"; import { getStarterValueFriendshipCap, speciesStarterCosts } from "#app/data/balance/starters"; import { starterPassiveAbilities } from "#app/data/balance/passives"; @@ -924,11 +924,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } break; case Stat.SPD: - // Check both the player and enemy to see if Tailwind should be multiplying the speed of the Pokemon - if ((this.isPlayer() && this.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.PLAYER)) - || (!this.isPlayer() && this.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, ArenaTagSide.ENEMY))) { + const side = this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; + if (this.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, side)) { ret *= 2; } + if (this.scene.arena.getTagOnSide(ArenaTagType.GRASS_WATER_PLEDGE, side)) { + ret >>= 2; + } if (this.getTag(BattlerTagType.SLOW_START)) { ret >>= 1; @@ -2562,6 +2564,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (matchesSourceType) { stabMultiplier.value += 0.5; } + applyMoveAttrs(CombinedPledgeStabBoostAttr, source, this, move, stabMultiplier); if (sourceTeraType !== Type.UNKNOWN && sourceTeraType === moveType) { stabMultiplier.value += 0.5; } @@ -5041,6 +5044,7 @@ export class PokemonTurnData { public statStagesIncreased: boolean = false; public statStagesDecreased: boolean = false; public moveEffectiveness: TypeDamageMultiplier | null = null; + public combiningPledge?: Moves; } export enum AiType { diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index 807f194bad5..6272358aa85 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -331,22 +331,30 @@ export class MovePhase extends BattlePhase { // check move redirection abilities of every pokemon *except* the user. this.scene.getField(true).filter(p => p !== this.pokemon).forEach(p => applyAbAttrs(RedirectMoveAbAttr, p, null, false, this.move.moveId, redirectTarget)); + /** `true` if an Ability is responsible for redirecting the move to another target; `false` otherwise */ + let redirectedByAbility = (currentTarget !== redirectTarget.value); + // check for center-of-attention tags (note that this will override redirect abilities) this.pokemon.getOpponents().forEach(p => { - const redirectTag = p.getTag(CenterOfAttentionTag) as CenterOfAttentionTag; + const redirectTag = p.getTag(CenterOfAttentionTag); // TODO: don't hardcode this interaction. // Handle interaction between the rage powder center-of-attention tag and moves used by grass types/overcoat-havers (which are immune to RP's redirect) if (redirectTag && (!redirectTag.powder || (!this.pokemon.isOfType(Type.GRASS) && !this.pokemon.hasAbility(Abilities.OVERCOAT)))) { redirectTarget.value = p.getBattlerIndex(); + redirectedByAbility = false; } }); if (currentTarget !== redirectTarget.value) { - if (this.move.getMove().hasAttr(BypassRedirectAttr)) { - redirectTarget.value = currentTarget; + const bypassRedirectAttrs = this.move.getMove().getAttrs(BypassRedirectAttr); + bypassRedirectAttrs.forEach((attr) => { + if (!attr.abilitiesOnly || redirectedByAbility) { + redirectTarget.value = currentTarget; + } + }); - } else if (this.pokemon.hasAbilityWithAttr(BlockRedirectAbAttr)) { + if (this.pokemon.hasAbilityWithAttr(BlockRedirectAbAttr)) { redirectTarget.value = currentTarget; this.scene.unshiftPhase(new ShowAbilityPhase(this.scene, this.pokemon.getBattlerIndex(), this.pokemon.getPassiveAbility().hasAttr(BlockRedirectAbAttr))); } diff --git a/src/test/moves/pledge_moves.test.ts b/src/test/moves/pledge_moves.test.ts new file mode 100644 index 00000000000..93fcf57cc60 --- /dev/null +++ b/src/test/moves/pledge_moves.test.ts @@ -0,0 +1,337 @@ +import { BattlerIndex } from "#app/battle"; +import { allAbilities } from "#app/data/ability"; +import { ArenaTagSide } from "#app/data/arena-tag"; +import { allMoves, FlinchAttr } from "#app/data/move"; +import { Type } from "#app/data/type"; +import { ArenaTagType } from "#enums/arena-tag-type"; +import { Stat } from "#enums/stat"; +import { toDmgValue } from "#app/utils"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; + +describe("Moves - Pledge Moves", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .battleType("double") + .startingLevel(100) + .moveset([ Moves.FIRE_PLEDGE, Moves.GRASS_PLEDGE, Moves.WATER_PLEDGE, Moves.SPLASH ]) + .enemySpecies(Species.SNORLAX) + .enemyLevel(100) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it( + "Fire Pledge - should be an 80-power Fire-type attack outside of combination", + async () => { + await game.classicMode.startBattle([ Species.BLASTOISE, Species.CHARIZARD ]); + + const firePledge = allMoves[Moves.FIRE_PLEDGE]; + vi.spyOn(firePledge, "calculateBattlePower"); + + const playerPokemon = game.scene.getPlayerField(); + vi.spyOn(playerPokemon[0], "getMoveType"); + + game.move.select(Moves.FIRE_PLEDGE, 0, BattlerIndex.ENEMY); + game.move.select(Moves.SPLASH, 1); + + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); + await game.phaseInterceptor.to("MoveEndPhase", false); + + expect(firePledge.calculateBattlePower).toHaveLastReturnedWith(80); + expect(playerPokemon[0].getMoveType).toHaveLastReturnedWith(Type.FIRE); + } + ); + + it( + "Fire Pledge - should not combine with an ally using Fire Pledge", + async () => { + await game.classicMode.startBattle([ Species.BLASTOISE, Species.CHARIZARD ]); + + const firePledge = allMoves[Moves.FIRE_PLEDGE]; + vi.spyOn(firePledge, "calculateBattlePower"); + + const playerPokemon = game.scene.getPlayerField(); + playerPokemon.forEach(p => vi.spyOn(p, "getMoveType")); + + const enemyPokemon = game.scene.getEnemyField(); + + game.move.select(Moves.FIRE_PLEDGE, 0, BattlerIndex.ENEMY); + game.move.select(Moves.FIRE_PLEDGE, 0, BattlerIndex.ENEMY_2); + + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); + + await game.phaseInterceptor.to("MoveEndPhase"); + expect(firePledge.calculateBattlePower).toHaveLastReturnedWith(80); + expect(playerPokemon[0].getMoveType).toHaveLastReturnedWith(Type.FIRE); + + await game.phaseInterceptor.to("BerryPhase", false); + expect(firePledge.calculateBattlePower).toHaveLastReturnedWith(80); + expect(playerPokemon[1].getMoveType).toHaveLastReturnedWith(Type.FIRE); + + enemyPokemon.forEach(p => expect(p.hp).toBeLessThan(p.getMaxHp())); + } + ); + + it( + "Fire Pledge - should not combine with an enemy's Pledge move", + async () => { + game.override + .battleType("single") + .enemyMoveset(Moves.GRASS_PLEDGE); + + await game.classicMode.startBattle([ Species.CHARIZARD ]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.FIRE_PLEDGE); + + await game.toNextTurn(); + + // Neither Pokemon should defer their move's effects as they would + // if they combined moves, so both should be damaged. + expect(playerPokemon.hp).toBeLessThan(playerPokemon.getMaxHp()); + expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp()); + expect(game.scene.arena.getTag(ArenaTagType.FIRE_GRASS_PLEDGE)).toBeUndefined(); + } + ); + + it( + "Grass Pledge - should combine with Fire Pledge to form a 150-power Fire-type attack that creates a 'sea of fire'", + async () => { + await game.classicMode.startBattle([ Species.CHARIZARD, Species.BLASTOISE ]); + + const grassPledge = allMoves[Moves.GRASS_PLEDGE]; + vi.spyOn(grassPledge, "calculateBattlePower"); + + const playerPokemon = game.scene.getPlayerField(); + const enemyPokemon = game.scene.getEnemyField(); + + vi.spyOn(playerPokemon[1], "getMoveType"); + const baseDmgMock = vi.spyOn(enemyPokemon[0], "getBaseDamage"); + + game.move.select(Moves.FIRE_PLEDGE, 0, BattlerIndex.ENEMY_2); + game.move.select(Moves.GRASS_PLEDGE, 1, BattlerIndex.ENEMY); + + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); + // advance to the end of PLAYER_2's move this turn + for (let i = 0; i < 2; i++) { + await game.phaseInterceptor.to("MoveEndPhase"); + } + expect(playerPokemon[1].getMoveType).toHaveLastReturnedWith(Type.FIRE); + expect(grassPledge.calculateBattlePower).toHaveLastReturnedWith(150); + + const baseDmg = baseDmgMock.mock.results[baseDmgMock.mock.results.length - 1].value; + expect(enemyPokemon[0].getMaxHp() - enemyPokemon[0].hp).toBe(toDmgValue(baseDmg * 1.5)); + expect(enemyPokemon[1].hp).toBe(enemyPokemon[1].getMaxHp()); // PLAYER should not have attacked + expect(game.scene.arena.getTagOnSide(ArenaTagType.FIRE_GRASS_PLEDGE, ArenaTagSide.ENEMY)).toBeDefined(); + + const enemyStartingHp = enemyPokemon.map(p => p.hp); + await game.toNextTurn(); + enemyPokemon.forEach((p, i) => expect(enemyStartingHp[i] - p.hp).toBe(toDmgValue(p.getMaxHp() / 8))); + } + ); + + it( + "Fire Pledge - should combine with Water Pledge to form a 150-power Water-type attack that creates a 'rainbow'", + async () => { + game.override.moveset([ Moves.FIRE_PLEDGE, Moves.WATER_PLEDGE, Moves.FIERY_DANCE, Moves.SPLASH ]); + + await game.classicMode.startBattle([ Species.BLASTOISE, Species.VENUSAUR ]); + + const firePledge = allMoves[Moves.FIRE_PLEDGE]; + vi.spyOn(firePledge, "calculateBattlePower"); + + const playerPokemon = game.scene.getPlayerField(); + const enemyPokemon = game.scene.getEnemyField(); + + vi.spyOn(playerPokemon[1], "getMoveType"); + + game.move.select(Moves.WATER_PLEDGE, 0, BattlerIndex.ENEMY_2); + game.move.select(Moves.FIRE_PLEDGE, 1, BattlerIndex.ENEMY); + + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); + // advance to the end of PLAYER_2's move this turn + for (let i = 0; i < 2; i++) { + await game.phaseInterceptor.to("MoveEndPhase"); + } + expect(playerPokemon[1].getMoveType).toHaveLastReturnedWith(Type.WATER); + expect(firePledge.calculateBattlePower).toHaveLastReturnedWith(150); + expect(enemyPokemon[1].hp).toBe(enemyPokemon[1].getMaxHp()); // PLAYER should not have attacked + expect(game.scene.arena.getTagOnSide(ArenaTagType.WATER_FIRE_PLEDGE, ArenaTagSide.PLAYER)).toBeDefined(); + + await game.toNextTurn(); + + game.move.select(Moves.FIERY_DANCE, 0, BattlerIndex.ENEMY_2); + game.move.select(Moves.SPLASH, 1); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); + await game.phaseInterceptor.to("MoveEndPhase"); + + // Rainbow effect should increase Fiery Dance's chance of raising Sp. Atk to 100% + expect(playerPokemon[0].getStatStage(Stat.SPATK)).toBe(1); + } + ); + + it( + "Water Pledge - should combine with Grass Pledge to form a 150-power Grass-type attack that creates a 'swamp'", + async () => { + await game.classicMode.startBattle([ Species.BLASTOISE, Species.CHARIZARD ]); + + const waterPledge = allMoves[Moves.WATER_PLEDGE]; + vi.spyOn(waterPledge, "calculateBattlePower"); + + const playerPokemon = game.scene.getPlayerField(); + const enemyPokemon = game.scene.getEnemyField(); + const enemyStartingSpd = enemyPokemon.map(p => p.getEffectiveStat(Stat.SPD)); + + vi.spyOn(playerPokemon[1], "getMoveType"); + + game.move.select(Moves.GRASS_PLEDGE, 0, BattlerIndex.ENEMY_2); + game.move.select(Moves.WATER_PLEDGE, 1, BattlerIndex.ENEMY); + + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); + // advance to the end of PLAYER_2's move this turn + for (let i = 0; i < 2; i++) { + await game.phaseInterceptor.to("MoveEndPhase"); + } + + expect(playerPokemon[1].getMoveType).toHaveLastReturnedWith(Type.GRASS); + expect(waterPledge.calculateBattlePower).toHaveLastReturnedWith(150); + expect(enemyPokemon[1].hp).toBe(enemyPokemon[1].getMaxHp()); + + expect(game.scene.arena.getTagOnSide(ArenaTagType.GRASS_WATER_PLEDGE, ArenaTagSide.ENEMY)).toBeDefined(); + enemyPokemon.forEach((p, i) => expect(p.getEffectiveStat(Stat.SPD)).toBe(Math.floor(enemyStartingSpd[i] / 4))); + } + ); + + it( + "Pledge Moves - should alter turn order when used in combination", + async () => { + await game.classicMode.startBattle([ Species.CHARIZARD, Species.BLASTOISE ]); + + const enemyPokemon = game.scene.getEnemyField(); + + game.move.select(Moves.WATER_PLEDGE, 0, BattlerIndex.ENEMY); + game.move.select(Moves.FIRE_PLEDGE, 1, BattlerIndex.ENEMY_2); + + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER_2 ]); + // PLAYER_2 should act with a combined move immediately after PLAYER as the second move in the turn + for (let i = 0; i < 2; i++) { + await game.phaseInterceptor.to("MoveEndPhase"); + } + expect(enemyPokemon[0].hp).toBe(enemyPokemon[0].getMaxHp()); + expect(enemyPokemon[1].hp).toBeLessThan(enemyPokemon[1].getMaxHp()); + } + ); + + it( + "Pledge Moves - 'rainbow' effect should not stack with Serene Grace when applied to flinching moves", + async () => { + game.override + .ability(Abilities.SERENE_GRACE) + .moveset([ Moves.FIRE_PLEDGE, Moves.WATER_PLEDGE, Moves.IRON_HEAD, Moves.SPLASH ]); + + await game.classicMode.startBattle([ Species.BLASTOISE, Species.CHARIZARD ]); + + const ironHeadFlinchAttr = allMoves[Moves.IRON_HEAD].getAttrs(FlinchAttr)[0]; + vi.spyOn(ironHeadFlinchAttr, "getMoveChance"); + + game.move.select(Moves.WATER_PLEDGE, 0, BattlerIndex.ENEMY); + game.move.select(Moves.FIRE_PLEDGE, 1, BattlerIndex.ENEMY_2); + + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(game.scene.arena.getTagOnSide(ArenaTagType.WATER_FIRE_PLEDGE, ArenaTagSide.PLAYER)).toBeDefined(); + + game.move.select(Moves.IRON_HEAD, 0, BattlerIndex.ENEMY); + game.move.select(Moves.SPLASH, 1); + + await game.phaseInterceptor.to("BerryPhase", false); + + expect(ironHeadFlinchAttr.getMoveChance).toHaveLastReturnedWith(60); + } + ); + + it( + "Pledge Moves - should have no effect when the second ally's move is cancelled", + async () => { + game.override + .enemyMoveset([ Moves.SPLASH, Moves.SPORE ]); + + await game.classicMode.startBattle([ Species.BLASTOISE, Species.CHARIZARD ]); + + const enemyPokemon = game.scene.getEnemyField(); + + game.move.select(Moves.FIRE_PLEDGE, 0, BattlerIndex.ENEMY); + game.move.select(Moves.GRASS_PLEDGE, 1, BattlerIndex.ENEMY_2); + + await game.forceEnemyMove(Moves.SPORE, BattlerIndex.PLAYER_2); + await game.forceEnemyMove(Moves.SPLASH); + + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY_2 ]); + + await game.phaseInterceptor.to("BerryPhase", false); + + enemyPokemon.forEach((p) => expect(p.hp).toBe(p.getMaxHp())); + } + ); + + it( + "Pledge Moves - should ignore redirection from another Pokemon's Storm Drain", + async () => { + await game.classicMode.startBattle([ Species.BLASTOISE, Species.CHARIZARD ]); + + const enemyPokemon = game.scene.getEnemyField(); + vi.spyOn(enemyPokemon[1], "getAbility").mockReturnValue(allAbilities[Abilities.STORM_DRAIN]); + + game.move.select(Moves.WATER_PLEDGE, 0, BattlerIndex.ENEMY); + game.move.select(Moves.SPLASH, 1); + + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); + + await game.phaseInterceptor.to("MoveEndPhase", false); + + expect(enemyPokemon[0].hp).toBeLessThan(enemyPokemon[0].getMaxHp()); + expect(enemyPokemon[1].getStatStage(Stat.SPATK)).toBe(0); + } + ); + + it( + "Pledge Moves - should not ignore redirection from another Pokemon's Follow Me", + async () => { + game.override.enemyMoveset([ Moves.FOLLOW_ME, Moves.SPLASH ]); + await game.classicMode.startBattle([ Species.BLASTOISE, Species.CHARIZARD ]); + + game.move.select(Moves.WATER_PLEDGE, 0, BattlerIndex.ENEMY); + game.move.select(Moves.SPLASH, 1); + + await game.forceEnemyMove(Moves.SPLASH); + await game.forceEnemyMove(Moves.FOLLOW_ME); + + await game.phaseInterceptor.to("BerryPhase", false); + + const enemyPokemon = game.scene.getEnemyField(); + expect(enemyPokemon[0].hp).toBe(enemyPokemon[0].getMaxHp()); + expect(enemyPokemon[1].hp).toBeLessThan(enemyPokemon[1].getMaxHp()); + } + ); +}); From 27537286b925d3b47d454df8f0d1e5a4154797e8 Mon Sep 17 00:00:00 2001 From: innerthunder <168692175+innerthunder@users.noreply.github.com> Date: Fri, 4 Oct 2024 13:24:52 -0700 Subject: [PATCH 021/153] [Move] Implement Electrify (#4569) * Implement Electrify * ESLint * Fix docs --- src/data/battler-tags.ts | 17 ++++++++ src/data/move.ts | 2 +- src/enums/battler-tag-type.ts | 1 + src/field/pokemon.ts | 3 ++ src/test/moves/electrify.test.ts | 69 ++++++++++++++++++++++++++++++++ 5 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 src/test/moves/electrify.test.ts diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 6cb33dca306..a54a8c5f519 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -2310,6 +2310,21 @@ export class TarShotTag extends BattlerTag { } } +/** + * Battler Tag implementing the type-changing effect of {@link https://bulbapedia.bulbagarden.net/wiki/Electrify_(move) | Electrify}. + * While this tag is in effect, the afflicted Pokemon's moves are changed to Electric type. + */ +export class ElectrifiedTag extends BattlerTag { + constructor() { + super(BattlerTagType.ELECTRIFIED, BattlerTagLapseType.TURN_END, 1, Moves.ELECTRIFY); + } + + override onAdd(pokemon: Pokemon): void { + // "{pokemonNameWithAffix}'s moves have been electrified!" + pokemon.scene.queueMessage(i18next.t("battlerTags:electrifiedOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + } +} + /** * Battler Tag that keeps track of how many times the user has Autotomized * Each count of Autotomization reduces the weight by 100kg @@ -2811,6 +2826,8 @@ export function getBattlerTag(tagType: BattlerTagType, turnCount: number, source return new GulpMissileTag(tagType, sourceMove); case BattlerTagType.TAR_SHOT: return new TarShotTag(); + case BattlerTagType.ELECTRIFIED: + return new ElectrifiedTag(); case BattlerTagType.THROAT_CHOPPED: return new ThroatChoppedTag(); case BattlerTagType.GORILLA_TACTICS: diff --git a/src/data/move.ts b/src/data/move.ts index 62ac36b28ad..8095b5a6013 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -8732,7 +8732,7 @@ export function initMoves() { .attr(TerrainChangeAttr, TerrainType.MISTY) .target(MoveTarget.BOTH_SIDES), new StatusMove(Moves.ELECTRIFY, Type.ELECTRIC, -1, 20, -1, 0, 6) - .unimplemented(), + .attr(AddBattlerTagAttr, BattlerTagType.ELECTRIFIED, false, true), new AttackMove(Moves.PLAY_ROUGH, Type.FAIRY, MoveCategory.PHYSICAL, 90, 90, 10, 10, 0, 6) .attr(StatStageChangeAttr, [ Stat.ATK ], -1), new AttackMove(Moves.FAIRY_WIND, Type.FAIRY, MoveCategory.SPECIAL, 40, 100, 30, -1, 0, 6) diff --git a/src/enums/battler-tag-type.ts b/src/enums/battler-tag-type.ts index ccd6e9fe314..43c849a78e0 100644 --- a/src/enums/battler-tag-type.ts +++ b/src/enums/battler-tag-type.ts @@ -85,4 +85,5 @@ export enum BattlerTagType { TAUNT = "TAUNT", IMPRISON = "IMPRISON", SYRUP_BOMB = "SYRUP_BOMB", + ELECTRIFIED = "ELECTRIFIED", } diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index c2ef7d919b0..94fa050a7bc 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1528,6 +1528,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { applyPreAttackAbAttrs(MoveTypeChangeAbAttr, this, null, move, simulated, moveTypeHolder); this.scene.arena.applyTags(ArenaTagType.PLASMA_FISTS, moveTypeHolder); + if (this.getTag(BattlerTagType.ELECTRIFIED)) { + moveTypeHolder.value = Type.ELECTRIC; + } return moveTypeHolder.value as Type; } diff --git a/src/test/moves/electrify.test.ts b/src/test/moves/electrify.test.ts new file mode 100644 index 00000000000..5d15a825688 --- /dev/null +++ b/src/test/moves/electrify.test.ts @@ -0,0 +1,69 @@ +import { BattlerIndex } from "#app/battle"; +import { Type } from "#app/data/type"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; + +describe("Moves - Electrify", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset(Moves.ELECTRIFY) + .battleType("single") + .startingLevel(100) + .enemySpecies(Species.SNORLAX) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.TACKLE) + .enemyLevel(100); + }); + + it("should convert attacks to Electric type", async () => { + await game.classicMode.startBattle([ Species.EXCADRILL ]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; + vi.spyOn(enemyPokemon, "getMoveType"); + + game.move.select(Moves.ELECTRIFY); + + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + + await game.phaseInterceptor.to("BerryPhase", false); + expect(enemyPokemon.getMoveType).toHaveLastReturnedWith(Type.ELECTRIC); + expect(playerPokemon.hp).toBe(playerPokemon.getMaxHp()); + }); + + it("should override type changes from abilities", async () => { + game.override.enemyAbility(Abilities.PIXILATE); + + await game.classicMode.startBattle([ Species.EXCADRILL ]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getPlayerPokemon()!; + vi.spyOn(enemyPokemon, "getMoveType"); + + game.move.select(Moves.ELECTRIFY); + + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + + await game.phaseInterceptor.to("BerryPhase", false); + expect(enemyPokemon.getMoveType).toHaveLastReturnedWith(Type.ELECTRIC); + expect(playerPokemon.hp).toBe(playerPokemon.getMaxHp()); + }); +}); From d36245650197f7c6302456b16b02b28cf01853c5 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Fri, 4 Oct 2024 13:29:20 -0700 Subject: [PATCH 022/153] [P2] Diamond Storm should only trigger once when hitting multiple pokemon (#4544) * Diamond Storm should only trigger once when hitting multiple pokemon * Also fix Clangorous Soulblaze just in case * Fix linting * Fix linting Oops missed this one --- src/data/move.ts | 4 +-- src/test/moves/diamond_storm.test.ts | 46 ++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 src/test/moves/diamond_storm.test.ts diff --git a/src/data/move.ts b/src/data/move.ts index 8095b5a6013..01b300cbae4 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -8756,7 +8756,7 @@ export function initMoves() { .attr(StatStageChangeAttr, [ Stat.SPATK ], -1) .soundBased(), new AttackMove(Moves.DIAMOND_STORM, Type.ROCK, MoveCategory.PHYSICAL, 100, 95, 5, 50, 0, 6) - .attr(StatStageChangeAttr, [ Stat.DEF ], 2, true) + .attr(StatStageChangeAttr, [ Stat.DEF ], 2, true, undefined, undefined, undefined, undefined, true) .makesContact(false) .target(MoveTarget.ALL_NEAR_ENEMIES), new AttackMove(Moves.STEAM_ERUPTION, Type.WATER, MoveCategory.SPECIAL, 110, 95, 5, 30, 0, 6) @@ -9183,7 +9183,7 @@ export function initMoves() { .makesContact(false) .ignoresVirtual(), new AttackMove(Moves.CLANGOROUS_SOULBLAZE, Type.DRAGON, MoveCategory.SPECIAL, 185, -1, 1, 100, 0, 7) - .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ], 1, true) + .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ], 1, true, undefined, undefined, undefined, undefined, true) .soundBased() .target(MoveTarget.ALL_NEAR_ENEMIES) .partial() diff --git a/src/test/moves/diamond_storm.test.ts b/src/test/moves/diamond_storm.test.ts new file mode 100644 index 00000000000..6e5be2a790d --- /dev/null +++ b/src/test/moves/diamond_storm.test.ts @@ -0,0 +1,46 @@ +import { allMoves } from "#app/data/move"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { Stat } from "#enums/stat"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("Moves - Diamond Storm", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.DIAMOND_STORM ]) + .battleType("single") + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should only increase defense once even if hitting 2 pokemon", async () => { + game.override.battleType("double"); + const diamondStorm = allMoves[Moves.DIAMOND_STORM]; + vi.spyOn(diamondStorm, "chance", "get").mockReturnValue(100); + vi.spyOn(diamondStorm, "accuracy", "get").mockReturnValue(100); + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.DIAMOND_STORM); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getPlayerPokemon()!.getStatStage(Stat.DEF)).toBe(2); + }); +}); From 1947472f1c5015de733552ec907e71497550e177 Mon Sep 17 00:00:00 2001 From: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com> Date: Fri, 4 Oct 2024 22:47:12 +0200 Subject: [PATCH 023/153] [P3] Fix start button cursor not being cleared properly in starter select (#4558) --- src/ui/starter-select-ui-handler.ts | 71 +++++++++++++++++------------ 1 file changed, 42 insertions(+), 29 deletions(-) diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 5cc70abf143..98a563301e4 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -308,13 +308,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { private starterIconsCursorObj: Phaser.GameObjects.Image; private valueLimitLabel: Phaser.GameObjects.Text; private startCursorObj: Phaser.GameObjects.NineSlice; - // private starterValueLabels: Phaser.GameObjects.Text[]; - // private shinyIcons: Phaser.GameObjects.Image[][]; - // private hiddenAbilityIcons: Phaser.GameObjects.Image[]; - // private classicWinIcons: Phaser.GameObjects.Image[]; - // private candyUpgradeIcon: Phaser.GameObjects.Image[]; - // private candyUpgradeOverlayIcon: Phaser.GameObjects.Image[]; - // + private iconAnimHandler: PokemonIconAnimHandler; //variables to keep track of the dynamically rendered list of instruction prompts for starter select @@ -1316,12 +1310,12 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } break; case Button.UP: + // UP from start button: go to pokemon in team if any, otherwise filter this.startCursorObj.setVisible(false); if (this.starterSpecies.length > 0) { this.starterIconsCursorIndex = this.starterSpecies.length - 1; this.moveStarterIconsCursor(this.starterIconsCursorIndex); } else { - // up from start button with no Pokemon in the team > go to filter this.startCursorObj.setVisible(false); this.filterBarCursor = Math.max(1, this.filterBar.numFilters - 1); this.setFilterMode(true); @@ -1329,29 +1323,27 @@ export default class StarterSelectUiHandler extends MessageUiHandler { success = true; break; case Button.DOWN: + // DOWN from start button: Go to filters this.startCursorObj.setVisible(false); - if (this.starterSpecies.length > 0) { - this.starterIconsCursorIndex = 0; - this.moveStarterIconsCursor(this.starterIconsCursorIndex); - } else { - // down from start button with no Pokemon in the team > go to filter - this.startCursorObj.setVisible(false); - this.filterBarCursor = Math.max(1, this.filterBar.numFilters - 1); - this.setFilterMode(true); - } + this.filterBarCursor = Math.max(1, this.filterBar.numFilters - 1); + this.setFilterMode(true); success = true; break; case Button.LEFT: - this.startCursorObj.setVisible(false); - this.cursorObj.setVisible(true); - success = this.setCursor(onScreenFirstIndex + (onScreenNumberOfRows - 1) * 9 + 8); // set last column - success = true; + if (numberOfStarters > 0) { + this.startCursorObj.setVisible(false); + this.cursorObj.setVisible(true); + this.setCursor(onScreenFirstIndex + (onScreenNumberOfRows - 1) * 9 + 8); // set last column + success = true; + } break; case Button.RIGHT: - this.startCursorObj.setVisible(false); - this.cursorObj.setVisible(true); - success = this.setCursor(onScreenFirstIndex + (onScreenNumberOfRows - 1) * 9); // set first column - success = true; + if (numberOfStarters > 0) { + this.startCursorObj.setVisible(false); + this.cursorObj.setVisible(true); + this.setCursor(onScreenFirstIndex + (onScreenNumberOfRows - 1) * 9); // set first column + success = true; + } break; } } else if (this.filterMode) { @@ -1373,7 +1365,12 @@ export default class StarterSelectUiHandler extends MessageUiHandler { case Button.UP: if (this.filterBar.openDropDown) { success = this.filterBar.decDropDownCursor(); - // else if there is filtered starters + } else if (this.filterBarCursor === this.filterBar.numFilters - 1 && this.starterSpecies.length > 0) { + // UP from the last filter, move to start button + this.setFilterMode(false); + this.cursorObj.setVisible(false); + this.startCursorObj.setVisible(true); + success = true; } else if (numberOfStarters > 0) { // UP from filter bar to bottom of Pokemon list this.setFilterMode(false); @@ -1392,6 +1389,13 @@ export default class StarterSelectUiHandler extends MessageUiHandler { case Button.DOWN: if (this.filterBar.openDropDown) { success = this.filterBar.incDropDownCursor(); + } else if (this.filterBarCursor === this.filterBar.numFilters - 1 && this.starterSpecies.length > 0) { + // DOWN from the last filter, move to Pokemon in party if any + this.setFilterMode(false); + this.cursorObj.setVisible(false); + this.starterIconsCursorIndex = 0; + this.moveStarterIconsCursor(this.starterIconsCursorIndex); + success = true; } else if (numberOfStarters > 0) { // DOWN from filter bar to top of Pokemon list this.setFilterMode(false); @@ -2656,9 +2660,6 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonShinyIcon.setTint(tint); this.setSpecies(species); this.updateInstructions(); - } else { - console.warn("Species is undefined for cursor position", cursor); - this.setFilterMode(true); } } @@ -3326,6 +3327,18 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } } this.moveStarterIconsCursor(this.starterIconsCursorIndex); + } else if (this.startCursorObj.visible && this.starterSpecies.length === 0) { + // On the start button and no more Pokemon in party + this.startCursorObj.setVisible(false); + if (this.filteredStarterContainers.length > 0) { + // Back to the first Pokemon if there is one + this.cursorObj.setVisible(true); + this.setCursor(0 + this.scrollCursor * 9); + } else { + // Back to filters + this.filterBarCursor = Math.max(1, this.filterBar.numFilters - 1); + this.setFilterMode(true); + } } this.tryUpdateValue(); From c99df9712a383dac44e0782a47c3a91225dfbcf0 Mon Sep 17 00:00:00 2001 From: innerthunder <168692175+innerthunder@users.noreply.github.com> Date: Fri, 4 Oct 2024 14:23:20 -0700 Subject: [PATCH 024/153] [Move] Implement Ion Deluge (#4579) --- src/data/arena-tag.ts | 15 ++++++++------- src/data/move.ts | 6 +++--- src/enums/arena-tag-type.ts | 2 +- src/field/pokemon.ts | 2 +- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index b75d23b48d8..6407e139a71 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -513,15 +513,16 @@ class WaterSportTag extends WeakenMoveTypeTag { } /** - * Arena Tag class for the secondary effect of {@link https://bulbapedia.bulbagarden.net/wiki/Plasma_Fists_(move) | Plasma Fists}. + * Arena Tag class for {@link https://bulbapedia.bulbagarden.net/wiki/Ion_Deluge_(move) | Ion Deluge} + * and the secondary effect of {@link https://bulbapedia.bulbagarden.net/wiki/Plasma_Fists_(move) | Plasma Fists}. * Converts Normal-type moves to Electric type for the rest of the turn. */ -export class PlasmaFistsTag extends ArenaTag { - constructor() { - super(ArenaTagType.PLASMA_FISTS, 1, Moves.PLASMA_FISTS); +export class IonDelugeTag extends ArenaTag { + constructor(sourceMove?: Moves) { + super(ArenaTagType.ION_DELUGE, 1, sourceMove); } - /** Queues Plasma Fists' on-add message */ + /** Queues an on-add message */ onAdd(arena: Arena): void { arena.scene.queueMessage(i18next.t("arenaTag:plasmaFistsOnAdd")); } @@ -1119,8 +1120,8 @@ export function getArenaTag(tagType: ArenaTagType, turnCount: integer, sourceMov return new MudSportTag(turnCount, sourceId); case ArenaTagType.WATER_SPORT: return new WaterSportTag(turnCount, sourceId); - case ArenaTagType.PLASMA_FISTS: - return new PlasmaFistsTag(); + case ArenaTagType.ION_DELUGE: + return new IonDelugeTag(sourceMove); case ArenaTagType.SPIKES: return new SpikesTag(sourceId, side); case ArenaTagType.TOXIC_SPIKES: diff --git a/src/data/move.ts b/src/data/move.ts index 01b300cbae4..f795d265336 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -8688,8 +8688,8 @@ export function initMoves() { .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -1) .soundBased(), new StatusMove(Moves.ION_DELUGE, Type.ELECTRIC, -1, 25, -1, 1, 6) - .target(MoveTarget.BOTH_SIDES) - .unimplemented(), + .attr(AddArenaTagAttr, ArenaTagType.ION_DELUGE) + .target(MoveTarget.BOTH_SIDES), new AttackMove(Moves.PARABOLIC_CHARGE, Type.ELECTRIC, MoveCategory.SPECIAL, 65, 100, 20, -1, 0, 6) .attr(HitHealAttr) .target(MoveTarget.ALL_NEAR_OTHERS) @@ -9158,7 +9158,7 @@ export function initMoves() { .attr(HalfSacrificialAttr) .target(MoveTarget.ALL_NEAR_OTHERS), new AttackMove(Moves.PLASMA_FISTS, Type.ELECTRIC, MoveCategory.PHYSICAL, 100, 100, 15, -1, 0, 7) - .attr(AddArenaTagAttr, ArenaTagType.PLASMA_FISTS, 1) + .attr(AddArenaTagAttr, ArenaTagType.ION_DELUGE, 1) .punchingMove(), new AttackMove(Moves.PHOTON_GEYSER, Type.PSYCHIC, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 7) .attr(PhotonGeyserCategoryAttr) diff --git a/src/enums/arena-tag-type.ts b/src/enums/arena-tag-type.ts index 0ab0d76e880..c73f4ec2ae5 100644 --- a/src/enums/arena-tag-type.ts +++ b/src/enums/arena-tag-type.ts @@ -24,7 +24,7 @@ export enum ArenaTagType { SAFEGUARD = "SAFEGUARD", NO_CRIT = "NO_CRIT", IMPRISON = "IMPRISON", - PLASMA_FISTS = "PLASMA_FISTS", + ION_DELUGE = "ION_DELUGE", FIRE_GRASS_PLEDGE = "FIRE_GRASS_PLEDGE", WATER_FIRE_PLEDGE = "WATER_FIRE_PLEDGE", GRASS_WATER_PLEDGE = "GRASS_WATER_PLEDGE", diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 94fa050a7bc..d6f73e1b5bc 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1527,7 +1527,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { applyMoveAttrs(VariableMoveTypeAttr, this, null, move, moveTypeHolder); applyPreAttackAbAttrs(MoveTypeChangeAbAttr, this, null, move, simulated, moveTypeHolder); - this.scene.arena.applyTags(ArenaTagType.PLASMA_FISTS, moveTypeHolder); + this.scene.arena.applyTags(ArenaTagType.ION_DELUGE, moveTypeHolder); if (this.getTag(BattlerTagType.ELECTRIFIED)) { moveTypeHolder.value = Type.ELECTRIC; } From f562a76332fcf76601ed215b48b11e2b484efaef Mon Sep 17 00:00:00 2001 From: Xavion3 Date: Sat, 5 Oct 2024 17:10:32 +1000 Subject: [PATCH 025/153] Make repeat abilities not stack (#4588) If due to fusions you have the same ability as both passive and normal, it'll no longer stack with itself. --- src/data/ability.ts | 2 +- .../abilities/ability_duplication.test.ts | 58 +++++++++++++++++++ 2 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 src/test/abilities/ability_duplication.test.ts diff --git a/src/data/ability.ts b/src/data/ability.ts index 62e6e772411..43d02da1733 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -4623,7 +4623,7 @@ async function applyAbAttrsInternal( messages: string[] = [], ) { for (const passive of [ false, true ]) { - if (!pokemon?.canApplyAbility(passive)) { + if (!pokemon?.canApplyAbility(passive) || (passive && pokemon.getPassiveAbility().id === pokemon.getAbility().id)) { continue; } diff --git a/src/test/abilities/ability_duplication.test.ts b/src/test/abilities/ability_duplication.test.ts new file mode 100644 index 00000000000..f9122b3259c --- /dev/null +++ b/src/test/abilities/ability_duplication.test.ts @@ -0,0 +1,58 @@ +import { Stat } from "#app/enums/stat"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; + +describe("Ability Duplication", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .battleType("single") + .ability(Abilities.HUGE_POWER) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("huge power should only be applied once if both normal and passive", async () => { + game.override.passiveAbility(Abilities.HUGE_POWER); + + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const [ magikarp ] = game.scene.getPlayerField(); + const magikarpAttack = magikarp.getEffectiveStat(Stat.ATK); + + magikarp.summonData.abilitySuppressed = true; + + expect(magikarp.getEffectiveStat(Stat.ATK)).toBe(magikarpAttack / 2); + }); + + it("huge power should stack with pure power", async () => { + game.override.passiveAbility(Abilities.PURE_POWER); + + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const [ magikarp ] = game.scene.getPlayerField(); + const magikarpAttack = magikarp.getEffectiveStat(Stat.ATK); + + magikarp.summonData.abilitySuppressed = true; + + expect(magikarp.getEffectiveStat(Stat.ATK)).toBe(magikarpAttack / 4); + }); +}); From 42b75e8440c8b298f0ee7f404f7918f499da6574 Mon Sep 17 00:00:00 2001 From: flx-sta <50131232+flx-sta@users.noreply.github.com> Date: Sat, 5 Oct 2024 14:01:41 -0700 Subject: [PATCH 026/153] [Qol] Make i18n money formatter controlled by translators (#4550) * fix: i18n money formatter * fix wrongful console.warn on i18n money formatter * update locales submodule update reference to `56eeb809eb5a2de40cfc5bc6128a78bef14deea9` (from `3ccef8472dd7cc7c362538489954cb8fdad27e5f`) --- public/locales | 2 +- src/plugins/i18n.ts | 38 ++++++++++++++++++++------------------ 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/public/locales b/public/locales index 3ccef8472dd..56eeb809eb5 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit 3ccef8472dd7cc7c362538489954cb8fdad27e5f +Subproject commit 56eeb809eb5a2de40cfc5bc6128a78bef14deea9 diff --git a/src/plugins/i18n.ts b/src/plugins/i18n.ts index 676e47c19b8..be4c6983c0a 100644 --- a/src/plugins/i18n.ts +++ b/src/plugins/i18n.ts @@ -100,6 +100,22 @@ async function initFonts(language: string | undefined) { } } +/** + * I18n money formatter with. (useful for BBCode coloring of text)\ + * *If you don't want the BBCode tag applied, just use 'number' formatter* + * @example Input: `{{myMoneyValue, money}}` + * Output: `@[MONEY]{₽100,000,000}` + * @param amount the money amount + * @returns a money formatted string + */ +function i18nMoneyFormatter(amount: any): string { + if (isNaN(Number(amount))) { + console.warn(`i18nMoneyFormatter: value "${amount}" is not a number!`); + } + + return `@[MONEY]{${i18next.t("common:money", { amount })}}`; +} + //#region Exports /** @@ -249,24 +265,10 @@ export async function initI18n(): Promise { postProcess: [ "korean-postposition" ], }); - // Input: {{myMoneyValue, money}} - // Output: @[MONEY]{₽100,000,000} (useful for BBCode coloring of text) - // If you don't want the BBCode tag applied, just use 'number' formatter - i18next.services.formatter?.add("money", (value, lng, options) => { - const numberFormattedString = Intl.NumberFormat(lng, options).format(value); - switch (lng) { - case "ja": - return `@[MONEY]{${numberFormattedString}}円`; - case "de": - case "es": - case "fr": - case "it": - return `@[MONEY]{${numberFormattedString} ₽}`; - default: - // English and other languages that use same format - return `@[MONEY]{₽${numberFormattedString}}`; - } - }); + + if (i18next.services.formatter) { + i18next.services.formatter.add("money", i18nMoneyFormatter); + } await initFonts(localStorage.getItem("prLang") ?? undefined); } From e8f40c10c948606e61a6660d8978e17e92491f4a Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Sat, 5 Oct 2024 16:52:13 -0700 Subject: [PATCH 027/153] [Test] Update `create-test` script for linting changes (#4587) Add additional boilerplate code Change prompt to be slightly more accurate Co-authored-by: Adrian T. <68144167+torranx@users.noreply.github.com> --- create-test-boilerplate.js | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/create-test-boilerplate.js b/create-test-boilerplate.js index 5f4bbc41198..a365999c623 100644 --- a/create-test-boilerplate.js +++ b/create-test-boilerplate.js @@ -49,7 +49,7 @@ async function promptFileName(selectedType) { { type: "input", name: "userInput", - message: `Please provide a file name for the ${selectedType} test:`, + message: `Please provide the name of the ${selectedType}:`, }, ]); @@ -110,7 +110,7 @@ import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/utils/gameManager"; import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; describe("${description}", () => { let phaserGame: Phaser.Game; @@ -129,15 +129,22 @@ describe("${description}", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH]) + .moveset([ Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH); }); - it("test case", async () => { - // await game.classicMode.startBattle([Species.MAGIKARP]); - // game.move.select(Moves.SPLASH); + it("should do X", async () => { + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to("BerryPhase"); + + expect(true).toBe(true); }); }); `; From f629a3e45332176bee4db0ba5d03c31b80c6ffbf Mon Sep 17 00:00:00 2001 From: innerthunder <168692175+innerthunder@users.noreply.github.com> Date: Sat, 5 Oct 2024 16:52:53 -0700 Subject: [PATCH 028/153] [P2] Stop G-Max Pokemon from evolving (#4581) --- src/field/pokemon.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index d6f73e1b5bc..a0ad4e8a52f 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1707,7 +1707,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (pokemonEvolutions.hasOwnProperty(this.species.speciesId)) { const evolutions = pokemonEvolutions[this.species.speciesId]; for (const e of evolutions) { - if (!e.item && this.level >= e.level && (!e.preFormKey || this.getFormKey() === e.preFormKey)) { + if (!e.item && this.level >= e.level && (isNullOrUndefined(e.preFormKey) || this.getFormKey() === e.preFormKey)) { if (e.condition === null || (e.condition as SpeciesEvolutionCondition).predicate(this)) { return e; } @@ -1718,7 +1718,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (this.isFusion() && this.fusionSpecies && pokemonEvolutions.hasOwnProperty(this.fusionSpecies.speciesId)) { const fusionEvolutions = pokemonEvolutions[this.fusionSpecies.speciesId].map(e => new FusionSpeciesFormEvolution(this.species.speciesId, e)); for (const fe of fusionEvolutions) { - if (!fe.item && this.level >= fe.level && (!fe.preFormKey || this.getFusionFormKey() === fe.preFormKey)) { + if (!fe.item && this.level >= fe.level && (isNullOrUndefined(fe.preFormKey) || this.getFusionFormKey() === fe.preFormKey)) { if (fe.condition === null || (fe.condition as SpeciesEvolutionCondition).predicate(this)) { return fe; } From c2c41d9be8b6f73b50ae22024280b8dcaffbdb9f Mon Sep 17 00:00:00 2001 From: Frederico Santos Date: Sun, 6 Oct 2024 02:49:03 +0100 Subject: [PATCH 029/153] Update subproject commit reference for locales --- public/locales | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/locales b/public/locales index 56eeb809eb5..b44ee217378 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit 56eeb809eb5a2de40cfc5bc6128a78bef14deea9 +Subproject commit b44ee2173788018ffd5dc6b7b7fa159be5b9d514 From f9691b872b38e615cb46b09aa06a9dfd7d0f81c8 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Sat, 5 Oct 2024 21:47:34 -0700 Subject: [PATCH 030/153] Change deploy script to specify "main" instead of `default_branch` (#4557) --- .github/workflows/deploy.yml | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 70dc2bfa502..e40b18eb69b 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,8 +1,12 @@ -name: Deploy +name: Deploy Main on: - push: {} - pull_request: {} + push: + branches: + - main + pull_request: + branches: + - main jobs: deploy: @@ -22,7 +26,7 @@ jobs: env: NODE_ENV: production - name: Set up SSH - if: github.event_name == 'push' && github.ref_name == github.event.repository.default_branch + if: github.event_name == 'push' && github.ref_name == 'main' run: | mkdir ~/.ssh echo "${{ secrets.SSH_PUBLIC_KEY }}" > ~/.ssh/id_ed25519.pub @@ -30,12 +34,12 @@ jobs: chmod 600 ~/.ssh/* ssh-keyscan -H ${{ secrets.SSH_HOST }} >> ~/.ssh/known_hosts - name: Deploy build on server - if: github.event_name == 'push' && github.ref_name == github.event.repository.default_branch + if: github.event_name == 'push' && github.ref_name == 'main' run: | rsync --del --no-times --checksum -vrm dist/* ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:${{ secrets.DESTINATION_DIR }} ssh -t ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} "~/prmanifest --inpath ${{ secrets.DESTINATION_DIR }} --outpath ${{ secrets.DESTINATION_DIR }}/manifest.json" - name: Purge Cloudflare Cache - if: github.event_name == 'push' && github.ref_name == github.event.repository.default_branch + if: github.event_name == 'push' && github.ref_name == 'main' id: purge-cache uses: NathanVaughn/actions-cloudflare-purge@v3.1.0 with: From a7157bbe9ab356092284fd1b986b26b75b5ae0b9 Mon Sep 17 00:00:00 2001 From: ImperialSympathizer <110984302+ben-lear@users.noreply.github.com> Date: Sun, 6 Oct 2024 16:51:34 -0400 Subject: [PATCH 031/153] fix shop option cursor indexing (#4601) Co-authored-by: ImperialSympathizer --- src/ui/modifier-select-ui-handler.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/ui/modifier-select-ui-handler.ts b/src/ui/modifier-select-ui-handler.ts index 9f2fb731022..f7e57b53193 100644 --- a/src/ui/modifier-select-ui-handler.ts +++ b/src/ui/modifier-select-ui-handler.ts @@ -577,6 +577,10 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { this.getUi().clearText(); this.eraseCursor(); + // Reset cursor positions + this.cursor = 0; + this.rowCursor = 0; + /* Multiplies the fade time duration by the speed parameter so that it is always constant, and avoids "flashbangs" at game speed x5 */ this.scene.hideShopOverlay(750 * this.scene.gameSpeed); this.scene.hideLuckText(250); From 1226ab37e127c06e4fe1c0ba0bfc081b2c9905b3 Mon Sep 17 00:00:00 2001 From: chaosgrimmon <31082757+chaosgrimmon@users.noreply.github.com> Date: Sun, 6 Oct 2024 17:29:39 -0400 Subject: [PATCH 032/153] [Sprite] Compress Bronzor animation (#4593) * [Sprite] Compress Bronzor front animation * [Sprite] Compress Bronzor back animation * [Sprite] Compress shiny Bronzor back animation * [Sprite] Compress shiny Bronzor front animation --- public/images/pokemon/436.json | 3685 ++++++--------------- public/images/pokemon/436.png | Bin 769 -> 411 bytes public/images/pokemon/back/436.json | 3685 ++++++--------------- public/images/pokemon/back/436.png | Bin 637 -> 399 bytes public/images/pokemon/back/shiny/436.json | 3685 ++++++--------------- public/images/pokemon/back/shiny/436.png | Bin 637 -> 399 bytes public/images/pokemon/shiny/436.json | 3685 ++++++--------------- public/images/pokemon/shiny/436.png | Bin 769 -> 411 bytes 8 files changed, 4076 insertions(+), 10664 deletions(-) diff --git a/public/images/pokemon/436.json b/public/images/pokemon/436.json index dc6c1d23770..6206c5e66cb 100644 --- a/public/images/pokemon/436.json +++ b/public/images/pokemon/436.json @@ -1,2666 +1,1019 @@ -{ - "textures": [ - { - "image": "436.png", - "format": "RGBA8888", - "size": { - "w": 97, - "h": 97 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 6, - "y": 11, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 6, - "y": 11, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 5, - "y": 10, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 5, - "y": 10, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 6, - "y": 11, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 6, - "y": 11, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 9, - "y": 10, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 9, - "y": 10, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 6, - "y": 11, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 6, - "y": 11, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 5, - "y": 10, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 5, - "y": 10, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 6, - "y": 11, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 6, - "y": 11, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 9, - "y": 10, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 9, - "y": 10, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 6, - "y": 11, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 6, - "y": 11, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 5, - "y": 9, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 5, - "y": 9, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 6, - "y": 11, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 6, - "y": 11, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 9, - "y": 10, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 9, - "y": 10, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 9, - "y": 10, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 9, - "y": 10, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 5, - "y": 11, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 5, - "y": 11, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 4, - "y": 10, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 4, - "y": 10, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 8, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 8, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 9, - "y": 6, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 9, - "y": 6, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 11, - "y": 8, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 11, - "y": 8, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 10, - "y": 10, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 10, - "y": 10, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 9, - "y": 11, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 9, - "y": 11, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 4, - "y": 11, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 4, - "y": 11, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 9, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 9, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 10, - "y": 3, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 10, - "y": 3, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 13, - "y": 6, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 13, - "y": 6, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 11, - "y": 9, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 11, - "y": 9, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 10, - "y": 11, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 10, - "y": 11, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 10, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 10, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 1, - "y": 8, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 1, - "y": 8, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 11, - "y": 4, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 11, - "y": 4, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 13, - "y": 14, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 13, - "y": 14, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 10, - "y": 17, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 10, - "y": 17, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 6, - "y": 18, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 6, - "y": 18, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 15, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 15, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 8, - "y": 12, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0116.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 8, - "y": 12, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 9, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 9, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0121.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 8, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0122.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 8, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0123.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 10, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0124.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 10, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0125.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0126.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 33, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 33, - "h": 39 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 32, - "h": 39 - }, - "frame": { - "x": 33, - "y": 0, - "w": 32, - "h": 39 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 32, - "h": 39 - }, - "frame": { - "x": 33, - "y": 0, - "w": 32, - "h": 39 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 15, - "y": 9, - "w": 32, - "h": 39 - }, - "frame": { - "x": 65, - "y": 0, - "w": 32, - "h": 39 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 15, - "y": 9, - "w": 32, - "h": 39 - }, - "frame": { - "x": 65, - "y": 0, - "w": 32, - "h": 39 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 33, - "h": 38 - }, - "frame": { - "x": 0, - "y": 39, - "w": 33, - "h": 38 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 33, - "h": 38 - }, - "frame": { - "x": 0, - "y": 39, - "w": 33, - "h": 38 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 5, - "y": 21, - "w": 33, - "h": 38 - }, - "frame": { - "x": 33, - "y": 39, - "w": 33, - "h": 38 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 47, - "h": 59 - }, - "spriteSourceSize": { - "x": 5, - "y": 21, - "w": 33, - "h": 38 - }, - "frame": { - "x": 33, - "y": 39, - "w": 33, - "h": 38 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:2b46b60048375cd75fb24de5f2dd05a3:de64de523e63943f7f5dc5a59d03e108:0a3bacf3d680738b160c4c8ace3cda59$" - } -} +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 12, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0004.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 12, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 11, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 11, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 12, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 12, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0009.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 11, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0014.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 11, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0015.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0019.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 12, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0020.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 12, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0021.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 11, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0022.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 11, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0023.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 12, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0024.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 12, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0029.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 11, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0030.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 11, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0031.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0034.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0035.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 12, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 12, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 10, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0038.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 10, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0039.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 12, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0040.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 12, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0042.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 11, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0044.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 11, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0045.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 9, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0046.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 9, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 11, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0048.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 11, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0050.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0051.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 12, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0052.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 12, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 11, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 11, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 9, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 9, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 7, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0058.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 7, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0059.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 6, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0060.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 6, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0061.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 7, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0062.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 7, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0063.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 9, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0064.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 9, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0065.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 11, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0066.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 11, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0067.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 12, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0068.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 12, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0069.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0070.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0071.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 12, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0072.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 12, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0073.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 10, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0074.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 10, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0075.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0076.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0077.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0078.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0079.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0080.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0081.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 4, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0082.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 4, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0083.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 7, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0084.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 7, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0085.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 10, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0086.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 10, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0087.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 12, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0088.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 12, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0089.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0090.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0091.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 11, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0092.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 11, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0093.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0094.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0095.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0096.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0097.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0098.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0099.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0100.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0101.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 5, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0102.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 5, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0103.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 10, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0104.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 10, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0105.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 15, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0106.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 15, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0107.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 18, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0108.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 18, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0109.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 22, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0110.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 22, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0111.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 19, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0112.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 19, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0113.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 16, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0114.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 16, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0115.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 13, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0116.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 13, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0117.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0118.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0119.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0120.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0121.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0122.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0123.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 11, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0124.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 11, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0125.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + }, + { + "filename": "0126.png", + "frame": { "x": 0, "y": 0, "w": 31, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 31, "h": 37 }, + "sourceSize": { "w": 47, "h": 59 } + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-dev", + "image": "436.png", + "format": "RGBA8888", + "size": { "w": 31, "h": 37 }, + "scale": "1" + } +} diff --git a/public/images/pokemon/436.png b/public/images/pokemon/436.png index 1ca185baecdffac962d473bac667007fc1689054..0308cb7303a1cbefb9ae467dd7774273be8ae7f6 100644 GIT binary patch delta 402 zcmV;D0d4+)2AcyeiBL{Q4GJ0x0000DNk~Le0000V0000b2m=5B0F9BtzyJUM0drDE zLIAGL9O;oE6o3ETb18(SLZ!uH#paZ?jF8(6%K!iX33O6UQvm<}|NsC0|Nl1vo74aR z0U1d|K~y-6ol{E|#2^Thpmgqk;^AxU$5{-U_8AmNLTi_RM%xF*VBRNSh~i8?uQP3M zEzK6hZ#@7a!xKnf!Tk+ZR0ANguiTnoN0(R=wD5R@aDP!@T}OhqR|$SRheo0^gZ-H1 z&?g)Td8~L2tzqmV6DW>bB-nKkKZ1QTA!Z=**AwT&g^Fm1%Qnj+DsV~3@309L~{|HNlex>gze_D3Yf8_NkFOAb)=`T$ATY38C&dZ`j0+*3ZI=bvx)y(a9 w?kK8dmiHA#I(ECkNigm9JE_=!KE?Cy7o$cCK(e)JzW@LL07*qoM6N<$g8bvPCIA2c literal 769 zcmV+c1OEJpP)dYJ3`0#)YV-eJe67XVn(&}@=1w2Xmt+Kt2y3B;W%=LXYaGFOf>I)UKQ2sAS3=lc zTp@Ja_Tofv_h@19dMODff_tr{Gpv+w`z?-ySm8C?&Dw8$UQ5D-3Cd$UF$f2OyO$qP z<9f0Q=Ly=f^})VR8>0^^xG+IG!#?3FCHk;2t`PbezTty0hZz?L^9--y?(UOeW0-L! zbVgH9YajFWI~fwrgvG3X;v~c*R5KB0g4bRVudC?eGh?fggfk&t6Y54FT%6!?xy0C~ z_HPnQ!I{v%@%!Qz|N1K7?ceu3f$-ymPiAPllVx~~i-fj#K6dGO83|Vj;Spn_wo4fg z8Q$YOK`*^`hwXOOMo|EqCx|lY;{A<`{#v<$3xrl=t(2(Md+nNcK4x_%Tp^V4c8}7y z72mt(A;$&6><-Ffb&u=w05}sG!^-UqoR6U2m;V%J!m>3WPtUlFGoe@bp<(M8YJ{8p z0%yXqE!}LVel%Q!Ghy*EcRy%x0eDS8LcRgH*OVl{ z2}-@DBmpl$VkHF$(j~~eCP|5j%GlDo&mk)kql@hGYMJ-^qPqTsdgt`lO<5i04pg-5Q=wdB~gM>ymPM! z5~SjtdQFm`q#!Q}ZdN!<;6>5RN>4;)B_%hDK~|F8tZ=4sE6HwF*beZb=w`*HBk`i> zX2q+qUxL90LMeN&N4W%Q6}b=)1ug`{g7Tr$0X|R55VBPx*q#jOat{FPFGUVQxA#z@ z!{H5-ddAZ_syl{BUnYQVFK+vX0RpmD6rxQ9NdWWMskcimz!iTm0pjPJRyM#0 zv#(ilH!0)3^$3;CgI3V*3-D%n)p{$nepbdX9DrSxWj}$s12tSZAby`m!z{phPR^Da ziA5IpYd>1QV63Uj^kXjlSTNUhGF8`EpdX)1C&v7za?FsW_8~9eOAq3rTS*T62T}YA UASeW>hyVZp07*qoM6N<$f@g!9)c^nh literal 637 zcmeAS@N?(olHy`uVBq!ia0vp^DImQPr9)OP!V; zO+NZ;LhrS1paf${kY6x^!?PP{3=B+So-U3d6>)E`9`wBvAkvyBEhTX~nBm5RuRmhV z8TKt{&&sRtzWEM`LSfy|8yC_{~TK+%Q@a@xAioA*k>g8 zwB<+igEZs&_v}Ou9e5mkv3c#?g*Als^$ z$LsVS*M>A31o*nVJl>I2r^pi$yi7yzah|}P>HF8-58!R8PClvlD`?r>IU;Pc^q%kg zlKfKX^S=cK1;YGazb7frFLsm2=*#|T;O!^L&eAyRMEPV(7a0MTS&FBgvc6>lIxBhC zp35~|k_Y!*l>O{f!p>5@bZ%(3XZ&FaGwL_0VxpA>^5J*Vjwk( pR0?V)QTiCHT%L66@B8t{e2U8I9gA+bn*fswgQu&X%Q~loCIC|n7-Rqd diff --git a/public/images/pokemon/back/shiny/436.json b/public/images/pokemon/back/shiny/436.json index 4091e1a2e49..3342cc6577c 100644 --- a/public/images/pokemon/back/shiny/436.json +++ b/public/images/pokemon/back/shiny/436.json @@ -1,2666 +1,1019 @@ -{ - "textures": [ - { - "image": "436.png", - "format": "RGBA8888", - "size": { - "w": 100, - "h": 100 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 9, - "y": 10, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 9, - "y": 10, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 11, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 11, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 10, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 10, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 11, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 11, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 9, - "y": 10, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 9, - "y": 10, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 11, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 11, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 10, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 10, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 11, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 11, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 9, - "y": 9, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 9, - "y": 9, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 10, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 10, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 10, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 10, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 9, - "y": 11, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 9, - "y": 11, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 10, - "y": 10, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 10, - "y": 10, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 11, - "y": 8, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 11, - "y": 8, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 9, - "y": 6, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 9, - "y": 6, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 3, - "y": 8, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 3, - "y": 8, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 10, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 10, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 11, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 5, - "y": 11, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 10, - "y": 11, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 10, - "y": 11, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 11, - "y": 9, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 11, - "y": 9, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 13, - "y": 6, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 13, - "y": 6, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 10, - "y": 3, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 10, - "y": 3, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 2, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 3, - "y": 9, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 3, - "y": 9, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 11, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 11, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 11, - "y": 10, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 11, - "y": 10, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 13, - "y": 8, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 13, - "y": 8, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 11, - "y": 0, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 1, - "y": 14, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 1, - "y": 14, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 17, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 4, - "y": 17, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 18, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 8, - "y": 18, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 15, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 15, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 12, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0116.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 6, - "y": 12, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 9, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 9, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0121.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 8, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0122.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 8, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0123.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 10, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0124.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 10, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0125.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0126.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 12, - "w": 34, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 34, - "h": 40 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 15, - "y": 4, - "w": 33, - "h": 40 - }, - "frame": { - "x": 34, - "y": 0, - "w": 33, - "h": 40 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 15, - "y": 4, - "w": 33, - "h": 40 - }, - "frame": { - "x": 34, - "y": 0, - "w": 33, - "h": 40 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 33, - "h": 40 - }, - "frame": { - "x": 67, - "y": 0, - "w": 33, - "h": 40 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 33, - "h": 40 - }, - "frame": { - "x": 67, - "y": 0, - "w": 33, - "h": 40 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 34, - "h": 39 - }, - "frame": { - "x": 0, - "y": 40, - "w": 34, - "h": 39 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 34, - "h": 39 - }, - "frame": { - "x": 0, - "y": 40, - "w": 34, - "h": 39 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 9, - "y": 21, - "w": 34, - "h": 39 - }, - "frame": { - "x": 34, - "y": 40, - "w": 34, - "h": 39 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 60 - }, - "spriteSourceSize": { - "x": 9, - "y": 21, - "w": 34, - "h": 39 - }, - "frame": { - "x": 34, - "y": 40, - "w": 34, - "h": 39 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:810e866f20256a6beca964ab2fe2f997:4d42b12e9664d852f2391c8b56845681:0a3bacf3d680738b160c4c8ace3cda59$" - } -} +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0004.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 11, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 11, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0009.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 12, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 12, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 11, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0014.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 11, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0015.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 12, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 12, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0019.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0020.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0021.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 11, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0022.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 11, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0023.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0024.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 12, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 12, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0029.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 11, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0030.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 11, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0031.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 12, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 12, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0034.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0035.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 10, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0038.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 10, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0039.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0040.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0042.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0043.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 11, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0044.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 11, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0045.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 9, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0046.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 9, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0047.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 11, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0048.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 11, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0050.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0051.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 12, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0052.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 12, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 11, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 11, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 9, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 9, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0057.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 7, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0058.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 7, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0059.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 6, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0060.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 6, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0061.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 7, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0062.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 7, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0063.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 9, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0064.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 9, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0065.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 11, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0066.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 11, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0067.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 12, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0068.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 12, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0069.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0070.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0071.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 12, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0072.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 12, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0073.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 10, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0074.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 10, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0075.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 7, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0076.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 7, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0077.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 4, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0078.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 4, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0079.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0080.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0081.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0082.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0083.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0084.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0085.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 10, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0086.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 10, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0087.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 12, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0088.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 12, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0089.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0090.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0091.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 11, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0092.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 11, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0093.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 9, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0094.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 9, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0095.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 5, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0096.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 5, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0097.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 1, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0098.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 1, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0099.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0100.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0101.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0102.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0103.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0104.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0105.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 15, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0106.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 15, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0107.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 18, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0108.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 18, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0109.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 22, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0110.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 22, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0111.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0112.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0113.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 16, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0114.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 16, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0115.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0116.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0117.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0118.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0119.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0120.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0121.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0122.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0123.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 11, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0124.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 11, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0125.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + }, + { + "filename": "0126.png", + "frame": { "x": 0, "y": 0, "w": 32, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 32, "h": 38 }, + "sourceSize": { "w": 48, "h": 60 } + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-dev", + "image": "436.png", + "format": "I8", + "size": { "w": 32, "h": 38 }, + "scale": "1" + } +} diff --git a/public/images/pokemon/back/shiny/436.png b/public/images/pokemon/back/shiny/436.png index b3d6dc4df6185bfaf3c2ffa14c1bfa243e0fb529..d766a912555771ff696cae5fedcfc7c92b872c4d 100644 GIT binary patch delta 374 zcmV-+0g3+o1djtQiBL{Q4GJ0x0000DNk~Le0000W0000c2m=5B0FwP_+W-In0drDE zLIAGL9O;oEB!35VQchC<|NsC0|No_bruzT@0ToF^K~y-6eUn)h#UKbnP0;Rt$xjA{ z`lx)g9&>90LMeN&N4W%Q6}b=)1ug`{g7Tr$0X|R55VBPx*q#jOat{FPFGUVQxA#z@ z!{H5-ddAZ_syl{BUnYQVFK+vX0RpmD6rxQ9NdWWMskcimz!iTm0pjPJRyM#0 zv#(ilH!0)3^$3;CgI3V*3-D%n)p{$nepbdX9DrSxWj}$s12tSZAby`m!z{phPR^Da ziA5IpYd>1QV63Uj^kXjlSTNUhGF8`EpdX)1C&v7za?FsW_8~9eOAq3rTS*T62T}YA UASeW>hyVZp07*qoM6N<$f@g!9)c^nh literal 637 zcmeAS@N?(olHy`uVBq!ia0vp^DImhE&A8y?W61PJl>jqO_F6?O=u*6Tbe4 zHD}njq(LXhLEv&d=SSn73r{8sX=c~0f46?Ia^=U8S^v{z1pjkvku2wUr`^`m^kJWo z;M0~L(GSv$@87c%J#^r4@R7$mwOY%c8g735`RSjo2m4B%Sl>Tiy#7Ppt-6!^_xfJT z9&#|A;=4w0_WzA*SQ8h-K8|n=Juhh7;SY|1nddm8i4d|@o zU3)IqbV(lEdr|hYQwcju`O>`|rFkOvrYe43xn7pN_4~QAhW)Q+T-4m7zbg9L43T^D zw+Jr$@b9pUz@2a&L**UoGj}sLNi*EYU@)7_m$3OQh$=YplEHlrmD zQ%e@aAPAEnWAA_B;cM;3Sqz)@85BrDYnOmV+Xs4Q-Y1}o;!HoUGi`7!%@)LOJpdxz z6G&gd{S8)B10b@m+?rrVmsk_DaDRkwQDI$2g11)*et$fNMxrx={g~#^CmacRtauKs zVeBIlD2`hs*mV&J?@}p$T6WRD=k+Ns_0wMIFHHGcdHUwg%c4aBmyu06y6joi%dYJ3`0#)YV-eJe67XVn(&}@ z=1w2Xmt+Kt2y3B;W%=LXYaGFOf>I)UKQ2sAS3=lcTp@Ja_Tofv_h@19dMODff_tr{ zGpv+w`z?-ySm8C?&Dw8$UQ5D-e+kNCJTV9dg1eU=QR8~D3Fisgvh~5fPaC5TE4VO0 zJHtNVD<%4{F|H8$8NT6zF^3r!2=ffD;qLB}VPlwaCUizqP-`Fa_B$C8&V zBvdmIXM)#W5wEN0<1=Hcl7urMUK8p@AY7c_a=FCVr}l3WOu?DZzw!Ixe;5DyD&g(l z_dS8|3JCmR|(+}W23f984nrW<2*qxy?2N0cGgBw0Gua? zGV0>}jg0+=9O z6B@(H?G2odpx>AO6lcP+e>EUa&$x^;p;!2!Ve1)cgq!^WXTq{A-E60RG+cx;Vev9| zKWgm3nXve54&F7-gfn6G3}Nq@bHbT0Pj+Hp0B6EtW`}Sl`~@$1JOO#lqY}_c3KE1* z$h{^>pgqXFrXV4oAH1d{Aqn)FiiA7?cuhe5j%GlDo&mk) zkql@hGYMJ-^qPqTsdgt`lO<5i04pg-5Q=wdB~gM>ymPM!5~SjtdQFm`q#!Q}ZdN!< z;6>5RN>4;)B_%hDNI_PT-K=n?ax2MhR@e^kqUdJDrX%s9=w`*Mv0sALbl4FIABaEU kX3sd|j5E$S(^b From c01fff49c4e653de11bde37a52a9fb61f393e29d Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Sun, 6 Oct 2024 14:31:11 -0700 Subject: [PATCH 033/153] [Beta P1] Fix regression in Metal Burst caused by #3974 (#4589) Also adds a regression test for the scenario --- src/phases/move-phase.ts | 6 +-- src/test/moves/metal_burst.test.ts | 80 ++++++++++++++++++++++++++++ src/test/utils/helpers/moveHelper.ts | 8 +-- 3 files changed, 85 insertions(+), 9 deletions(-) create mode 100644 src/test/moves/metal_burst.test.ts diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index 6272358aa85..10cc062ea3b 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -375,11 +375,7 @@ export class MovePhase extends BattlePhase { protected resolveCounterAttackTarget() { if (this.targets.length === 1 && this.targets[0] === BattlerIndex.ATTACKER) { if (this.pokemon.turnData.attacksReceived.length) { - const attacker = this.pokemon.scene.getPokemonById(this.pokemon.turnData.attacksReceived[0].sourceId); - - if (attacker?.isActive(true)) { - this.targets[0] = attacker.getBattlerIndex(); - } + this.targets[0] = this.pokemon.turnData.attacksReceived[0].sourceBattlerIndex; // account for metal burst and comeuppance hitting remaining targets in double battles // counterattack will redirect to remaining ally if original attacker faints diff --git a/src/test/moves/metal_burst.test.ts b/src/test/moves/metal_burst.test.ts new file mode 100644 index 00000000000..3b32dd322a3 --- /dev/null +++ b/src/test/moves/metal_burst.test.ts @@ -0,0 +1,80 @@ +import { BattlerIndex } from "#app/battle"; +import { MoveResult } from "#app/field/pokemon"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Metal Burst", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.METAL_BURST, Moves.FISSURE, Moves.PRECIPICE_BLADES ]) + .ability(Abilities.PURE_POWER) + .startingLevel(10) + .battleType("double") + .disableCrits() + .enemySpecies(Species.PICHU) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.TACKLE); + }); + + it("should redirect target if intended target faints", async () => { + await game.classicMode.startBattle([ Species.FEEBAS, Species.FEEBAS ]); + + const [ , enemy2 ] = game.scene.getEnemyField(); + + game.move.select(Moves.METAL_BURST); + game.move.select(Moves.FISSURE, 1, BattlerIndex.ENEMY); + + await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); + await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); + + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2 ]); + + await game.phaseInterceptor.to("MoveEndPhase"); + await game.move.forceHit(); + await game.phaseInterceptor.to("MoveEndPhase"); + await game.phaseInterceptor.to("MoveEndPhase"); + + expect(enemy2.isFullHp()).toBe(false); + }); + + it("should not crash if both opponents faint before the move is used", async () => { + await game.classicMode.startBattle([ Species.FEEBAS, Species.ARCEUS ]); + + const [ enemy1, enemy2 ] = game.scene.getEnemyField(); + + game.move.select(Moves.METAL_BURST); + game.move.select(Moves.PRECIPICE_BLADES, 1); + + await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); + await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); + + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2 ]); + + await game.phaseInterceptor.to("MoveEndPhase"); + await game.move.forceHit(); + await game.phaseInterceptor.to("MoveEndPhase"); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemy1.isFainted()).toBe(true); + expect(enemy2.isFainted()).toBe(true); + expect(game.scene.getPlayerField()[0].getLastXMoves(1)[0].result).toBe(MoveResult.FAIL); + }); +}); diff --git a/src/test/utils/helpers/moveHelper.ts b/src/test/utils/helpers/moveHelper.ts index a53fa521785..a0667d91f4c 100644 --- a/src/test/utils/helpers/moveHelper.ts +++ b/src/test/utils/helpers/moveHelper.ts @@ -13,8 +13,8 @@ import { GameManagerHelper } from "./gameManagerHelper"; */ export class MoveHelper extends GameManagerHelper { /** - * Intercepts `MoveEffectPhase` and mocks the hitCheck's - * return value to `true` {@linkcode MoveEffectPhase.hitCheck}. + * Intercepts {@linkcode MoveEffectPhase} and mocks the + * {@linkcode MoveEffectPhase.hitCheck | hitCheck}'s return value to `true`. * Used to force a move to hit. */ async forceHit(): Promise { @@ -23,8 +23,8 @@ export class MoveHelper extends GameManagerHelper { } /** - * Intercepts `MoveEffectPhase` and mocks the hitCheck's - * return value to `false` {@linkcode MoveEffectPhase.hitCheck}. + * Intercepts {@linkcode MoveEffectPhase} and mocks the + * {@linkcode MoveEffectPhase.hitCheck | hitCheck}'s return value to `false`. * Used to force a move to miss. * @param firstTargetOnly Whether the move should force miss on the first target only, in the case of multi-target moves. */ From a259ccfc34fbca7b9fdc7dc9f5eee5172791b091 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Sun, 6 Oct 2024 23:29:57 -0400 Subject: [PATCH 034/153] [Beta][Test] Fix Scale Shot flaky test (#4564) Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: Adrian T. <68144167+torranx@users.noreply.github.com> --- src/test/moves/scale_shot.test.ts | 57 ++++++++++++++++++------------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/src/test/moves/scale_shot.test.ts b/src/test/moves/scale_shot.test.ts index 2730d05306d..e4d768fa13a 100644 --- a/src/test/moves/scale_shot.test.ts +++ b/src/test/moves/scale_shot.test.ts @@ -1,3 +1,5 @@ +import { BattlerIndex } from "#app/battle"; +import { allMoves } from "#app/data/move"; import { DamagePhase } from "#app/phases/damage-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; @@ -8,7 +10,7 @@ import { Species } from "#enums/species"; import { Stat } from "#enums/stat"; import GameManager from "#test/utils/gameManager"; import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; describe("Moves - Scale Shot", () => { let phaserGame: Phaser.Game; @@ -30,45 +32,54 @@ describe("Moves - Scale Shot", () => { .moveset([ Moves.SCALE_SHOT ]) .battleType("single") .disableCrits() - .starterSpecies(Species.MINCCINO) .ability(Abilities.NO_GUARD) .passiveAbility(Abilities.SKILL_LINK) - .enemyAbility(Abilities.SHEER_FORCE) - .enemyPassiveAbility(Abilities.STALL) - .enemyMoveset(Moves.SKILL_SWAP) - .enemyLevel(5); + .enemyMoveset(Moves.SPLASH) + .enemyLevel(3); }); it("applies stat changes after last hit", async () => { - await game.classicMode.startBattle([ Species.FORRETRESS ]); + game.override.enemySpecies(Species.FORRETRESS); + + await game.classicMode.startBattle([ Species.MINCCINO ]); const minccino = game.scene.getPlayerPokemon()!; game.move.select(Moves.SCALE_SHOT); + + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to(MoveEffectPhase); await game.phaseInterceptor.to(DamagePhase); + + //check that stats haven't changed after one or two hits have occurred await game.phaseInterceptor.to(MoveEffectPhase); - expect (minccino?.getStatStage(Stat.DEF)).toBe(0); - expect (minccino?.getStatStage(Stat.SPD)).toBe(0); + expect(minccino.getStatStage(Stat.DEF)).toBe(0); + expect(minccino.getStatStage(Stat.SPD)).toBe(0); + + //check that stats changed on last hit await game.phaseInterceptor.to(MoveEndPhase); - expect (minccino.getStatStage(Stat.DEF)).toBe(-1); - expect (minccino.getStatStage(Stat.SPD)).toBe(1); + expect(minccino.getStatStage(Stat.DEF)).toBe(-1); + expect(minccino.getStatStage(Stat.SPD)).toBe(1); }); it("unaffected by sheer force", async () => { - await game.classicMode.startBattle([ Species.WOBBUFFET ]); + const moveToCheck = allMoves[Moves.SCALE_SHOT]; + const basePower = moveToCheck.power; + + game.override.enemySpecies(Species.WOBBUFFET); + + vi.spyOn(moveToCheck, "calculateBattlePower"); + + await game.classicMode.startBattle([ Species.MINCCINO ]); const minccino = game.scene.getPlayerPokemon()!; - const wobbuffet = game.scene.getEnemyPokemon()!; - wobbuffet.setStat(Stat.HP, 100, true); - wobbuffet.hp = 100; + game.move.select(Moves.SCALE_SHOT); await game.phaseInterceptor.to(TurnEndPhase); - const hpafter1 = wobbuffet.hp; + //effect not nullified by sheer force - expect (minccino.getStatStage(Stat.DEF)).toBe(-1); - expect (minccino.getStatStage(Stat.SPD)).toBe(1); - game.move.select(Moves.SCALE_SHOT); - await game.phaseInterceptor.to(MoveEndPhase); - const hpafter2 = wobbuffet.hp; - //check damage not boosted- make damage before sheer force a little lower than theoretical boosted sheer force damage - expect (100 - hpafter1).toBe(hpafter1 - hpafter2); + expect(minccino.getStatStage(Stat.DEF)).toBe(-1); + expect(minccino.getStatStage(Stat.SPD)).toBe(1); + + //power not boosted by sheer force + expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(basePower); }); }); From f5fa478eb8afbfda7f7468e6fc535abe7fd1e03c Mon Sep 17 00:00:00 2001 From: Acelynn Zhang <102631387+acelynnzhang@users.noreply.github.com> Date: Mon, 7 Oct 2024 11:01:15 -0500 Subject: [PATCH 035/153] [P1] Fix crash when starting a challenge run after revisiting challenge select screen (#4603) Ensure EncounterPhase initializes correctly at the start of the game after revisting the challenge selection screen. Fixes #4520 --- src/ui/starter-select-ui-handler.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 98a563301e4..9623d78c51e 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -46,6 +46,7 @@ import { StarterContainer } from "#app/ui/starter-container"; import { DropDownColumn, FilterBar } from "#app/ui/filter-bar"; import { ScrollBar } from "#app/ui/scroll-bar"; import { SelectChallengePhase } from "#app/phases/select-challenge-phase"; +import { EncounterPhase } from "#app/phases/encounter-phase"; import { TitlePhase } from "#app/phases/title-phase"; import { Abilities } from "#enums/abilities"; import { getPassiveCandyCount, getValueReductionCandyCounts, getSameSpeciesEggCandyCounts } from "#app/data/balance/starters"; @@ -3468,6 +3469,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.scene.clearPhaseQueue(); if (this.scene.gameMode.isChallenge) { this.scene.pushPhase(new SelectChallengePhase(this.scene)); + this.scene.pushPhase(new EncounterPhase(this.scene, false)); } else { this.scene.pushPhase(new TitlePhase(this.scene)); } From 8980513a83b257b4a6d0723dcc30d13cfc9b4c04 Mon Sep 17 00:00:00 2001 From: ImperialSympathizer <110984302+ben-lear@users.noreply.github.com> Date: Mon, 7 Oct 2024 15:03:00 -0400 Subject: [PATCH 036/153] [P3 Hotfix] wrong content keys for Weird Dream ME (#4607) Co-authored-by: ImperialSympathizer --- .../mystery-encounters/encounters/weird-dream-encounter.ts | 6 +++--- .../encounters/weird-dream-encounter.test.ts | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts index 71e8491df69..8e15faee853 100644 --- a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts +++ b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts @@ -199,11 +199,11 @@ export const WeirdDreamEncounter: MysteryEncounter = ) .withSimpleOption( { - buttonLabel: `${namespace}.option.2.label`, - buttonTooltip: `${namespace}.option.2.tooltip`, + buttonLabel: `${namespace}.option.3.label`, + buttonTooltip: `${namespace}.option.3.tooltip`, selected: [ { - text: `${namespace}.option.2.selected`, + text: `${namespace}.option.3.selected`, }, ], }, diff --git a/src/test/mystery-encounter/encounters/weird-dream-encounter.test.ts b/src/test/mystery-encounter/encounters/weird-dream-encounter.test.ts index d858d631596..3fd0ce83f9f 100644 --- a/src/test/mystery-encounter/encounters/weird-dream-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/weird-dream-encounter.test.ts @@ -164,11 +164,11 @@ describe("Weird Dream - Mystery Encounter", () => { expect(option.optionMode).toBe(MysteryEncounterOptionMode.DEFAULT); expect(option.dialogue).toBeDefined(); expect(option.dialogue).toStrictEqual({ - buttonLabel: `${namespace}.option.2.label`, - buttonTooltip: `${namespace}.option.2.tooltip`, + buttonLabel: `${namespace}.option.3.label`, + buttonTooltip: `${namespace}.option.3.tooltip`, selected: [ { - text: `${namespace}.option.2.selected`, + text: `${namespace}.option.3.selected`, }, ], }); From 0a4c12387b5992e1f14f53a0f8e6b493a0390ad0 Mon Sep 17 00:00:00 2001 From: ImperialSympathizer <110984302+ben-lear@users.noreply.github.com> Date: Mon, 7 Oct 2024 15:42:27 -0400 Subject: [PATCH 037/153] Revert #4607 (#4609) Co-authored-by: ImperialSympathizer --- .../mystery-encounters/encounters/weird-dream-encounter.ts | 6 +++--- .../encounters/weird-dream-encounter.test.ts | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts index 8e15faee853..71e8491df69 100644 --- a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts +++ b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts @@ -199,11 +199,11 @@ export const WeirdDreamEncounter: MysteryEncounter = ) .withSimpleOption( { - buttonLabel: `${namespace}.option.3.label`, - buttonTooltip: `${namespace}.option.3.tooltip`, + buttonLabel: `${namespace}.option.2.label`, + buttonTooltip: `${namespace}.option.2.tooltip`, selected: [ { - text: `${namespace}.option.3.selected`, + text: `${namespace}.option.2.selected`, }, ], }, diff --git a/src/test/mystery-encounter/encounters/weird-dream-encounter.test.ts b/src/test/mystery-encounter/encounters/weird-dream-encounter.test.ts index 3fd0ce83f9f..d858d631596 100644 --- a/src/test/mystery-encounter/encounters/weird-dream-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/weird-dream-encounter.test.ts @@ -164,11 +164,11 @@ describe("Weird Dream - Mystery Encounter", () => { expect(option.optionMode).toBe(MysteryEncounterOptionMode.DEFAULT); expect(option.dialogue).toBeDefined(); expect(option.dialogue).toStrictEqual({ - buttonLabel: `${namespace}.option.3.label`, - buttonTooltip: `${namespace}.option.3.tooltip`, + buttonLabel: `${namespace}.option.2.label`, + buttonTooltip: `${namespace}.option.2.tooltip`, selected: [ { - text: `${namespace}.option.3.selected`, + text: `${namespace}.option.2.selected`, }, ], }); From a1ca7e632b7054fb7f03fae6b4f5fe2d560dbd2c Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Tue, 8 Oct 2024 05:32:51 -0700 Subject: [PATCH 038/153] [Move] Triple Arrows effect chance for stat change is now 50% (#4543) * Triple Arrows effect chance for stat change is now properly 50% * Add tsdocs to `StatStageChangeAttr` * Add test for Serene Grace interaction * Fix linting --------- Co-authored-by: Mumble <171087428+frutescens@users.noreply.github.com> --- src/data/move.ts | 49 +++++++++++++---------- src/test/moves/triple_arrows.test.ts | 60 ++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 22 deletions(-) create mode 100644 src/test/moves/triple_arrows.test.ts diff --git a/src/data/move.ts b/src/data/move.ts index f795d265336..08c00829b48 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -970,13 +970,16 @@ export class MoveEffectAttr extends MoveAttr { public lastHitOnly: boolean; /** Should this effect only apply on the first target hit? */ public firstTargetOnly: boolean; + /** Overrides the secondary effect chance for this attr if set. */ + public effectChanceOverride?: number; - constructor(selfTarget?: boolean, trigger?: MoveEffectTrigger, firstHitOnly: boolean = false, lastHitOnly: boolean = false, firstTargetOnly: boolean = false) { + constructor(selfTarget?: boolean, trigger?: MoveEffectTrigger, firstHitOnly: boolean = false, lastHitOnly: boolean = false, firstTargetOnly: boolean = false, effectChanceOverride?: number) { super(selfTarget); - this.trigger = trigger !== undefined ? trigger : MoveEffectTrigger.POST_APPLY; + this.trigger = trigger ?? MoveEffectTrigger.POST_APPLY; this.firstHitOnly = firstHitOnly; this.lastHitOnly = lastHitOnly; this.firstTargetOnly = firstTargetOnly; + this.effectChanceOverride = effectChanceOverride; } /** @@ -1001,15 +1004,15 @@ export class MoveEffectAttr extends MoveAttr { /** * Gets the used move's additional effect chance. - * If user's ability has MoveEffectChanceMultiplierAbAttr or IgnoreMoveEffectsAbAttr modifies the base chance. + * Chance is modified by {@linkcode MoveEffectChanceMultiplierAbAttr} and {@linkcode IgnoreMoveEffectsAbAttr}. * @param user {@linkcode Pokemon} using this move - * @param target {@linkcode Pokemon} target of this move + * @param target {@linkcode Pokemon | Target} of this move * @param move {@linkcode Move} being used - * @param selfEffect {@linkcode Boolean} if move targets user. - * @returns Move chance value. + * @param selfEffect `true` if move targets user. + * @returns Move effect chance value. */ getMoveChance(user: Pokemon, target: Pokemon, move: Move, selfEffect?: Boolean, showAbility?: Boolean): integer { - const moveChance = new Utils.NumberHolder(move.chance); + const moveChance = new Utils.NumberHolder(this.effectChanceOverride ?? move.chance); applyAbAttrs(MoveEffectChanceMultiplierAbAttr, user, null, false, moveChance, move, target, selfEffect, showAbility); @@ -2752,14 +2755,17 @@ export class AwaitCombinedPledgeAttr extends OverrideMoveEffectAttr { /** * Attribute used for moves that change stat stages - * @param stats {@linkcode BattleStat} array of stats to be changed - * @param stages stages by which to change the stats, from -6 to 6 - * @param selfTarget whether the changes are applied to the user (true) or the target (false) - * @param condition {@linkcode MoveConditionFunc} optional condition to trigger the stat change - * @param firstHitOnly whether the stat change only applies on the first hit of a multi hit move - * @param moveEffectTrigger {@linkcode MoveEffectTrigger} the trigger for the effect to take place - * @param firstTargetOnly whether, if this is a multi target move, to only apply the effect after the first target is hit, rather than once for each target - * @param lastHitOnly whether the effect should only apply after the last hit of a multi hit move + * + * @param stats {@linkcode BattleStat} Array of stat(s) to change + * @param stages How many stages to change the stat(s) by, [-6, 6] + * @param selfTarget `true` if the move is self-targetting + * @param condition {@linkcode MoveConditionFunc} Optional condition to be checked in order to apply the changes + * @param showMessage `true` to display a message; default `true` + * @param firstHitOnly `true` if only the first hit of a multi hit move should cause a stat stage change; default `false` + * @param moveEffectTrigger {@linkcode MoveEffectTrigger} When the stat change should trigger; default {@linkcode MoveEffectTrigger.HIT} + * @param firstTargetOnly `true` if a move that hits multiple pokemon should only trigger the stat change if it hits at least one pokemon, rather than once per hit pokemon; default `false` + * @param lastHitOnly `true` if the effect should only apply after the last hit of a multi hit move; default `false` + * @param effectChanceOverride Will override the move's normal secondary effect chance if specified * * @extends MoveEffectAttr * @see {@linkcode apply} @@ -2767,14 +2773,14 @@ export class AwaitCombinedPledgeAttr extends OverrideMoveEffectAttr { export class StatStageChangeAttr extends MoveEffectAttr { public stats: BattleStat[]; public stages: integer; - private condition: MoveConditionFunc | null; + private condition?: MoveConditionFunc | null; private showMessage: boolean; - constructor(stats: BattleStat[], stages: integer, selfTarget?: boolean, condition?: MoveConditionFunc | null, showMessage: boolean = true, firstHitOnly: boolean = false, moveEffectTrigger: MoveEffectTrigger = MoveEffectTrigger.HIT, firstTargetOnly: boolean = false, lastHitOnly: boolean = false) { - super(selfTarget, moveEffectTrigger, firstHitOnly, lastHitOnly, firstTargetOnly); + constructor(stats: BattleStat[], stages: integer, selfTarget?: boolean, condition?: MoveConditionFunc | null, showMessage: boolean = true, firstHitOnly: boolean = false, moveEffectTrigger: MoveEffectTrigger = MoveEffectTrigger.HIT, firstTargetOnly: boolean = false, lastHitOnly: boolean = false, effectChanceOverride?: number) { + super(selfTarget, moveEffectTrigger, firstHitOnly, lastHitOnly, firstTargetOnly, effectChanceOverride); this.stats = stats; this.stages = stages; - this.condition = condition!; // TODO: is this bang correct? + this.condition = condition; this.showMessage = showMessage; } @@ -9556,9 +9562,8 @@ export function initMoves() { new AttackMove(Moves.TRIPLE_ARROWS, Type.FIGHTING, MoveCategory.PHYSICAL, 90, 100, 10, 30, 0, 8) .makesContact(false) .attr(HighCritAttr) - .attr(StatStageChangeAttr, [ Stat.DEF ], -1) - .attr(FlinchAttr) - .partial(), + .attr(StatStageChangeAttr, [ Stat.DEF ], -1, undefined, undefined, undefined, undefined, undefined, undefined, undefined, 50) + .attr(FlinchAttr), new AttackMove(Moves.INFERNAL_PARADE, Type.GHOST, MoveCategory.SPECIAL, 60, 100, 15, 30, 0, 8) .attr(StatusEffectAttr, StatusEffect.BURN) .attr(MovePowerMultiplierAttr, (user, target, move) => target.status ? 2 : 1), diff --git a/src/test/moves/triple_arrows.test.ts b/src/test/moves/triple_arrows.test.ts new file mode 100644 index 00000000000..98ad29997df --- /dev/null +++ b/src/test/moves/triple_arrows.test.ts @@ -0,0 +1,60 @@ +import { allMoves, FlinchAttr, StatStageChangeAttr } from "#app/data/move"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("Moves - Triple Arrows", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + const tripleArrows = allMoves[Moves.TRIPLE_ARROWS]; + const flinchAttr = tripleArrows.getAttrs(FlinchAttr)[0]; + const defDropAttr = tripleArrows.getAttrs(StatStageChangeAttr)[0]; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .ability(Abilities.BALL_FETCH) + .moveset([ Moves.TRIPLE_ARROWS ]) + .battleType("single") + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.STURDY) + .enemyMoveset(Moves.SPLASH); + + vi.spyOn(flinchAttr, "getMoveChance"); + vi.spyOn(defDropAttr, "getMoveChance"); + }); + + it("has a 30% flinch chance and 50% defense drop chance", async () => { + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.TRIPLE_ARROWS); + await game.phaseInterceptor.to("BerryPhase"); + + expect(flinchAttr.getMoveChance).toHaveReturnedWith(30); + expect(defDropAttr.getMoveChance).toHaveReturnedWith(50); + }); + + it("is affected normally by Serene Grace", async () => { + game.override.ability(Abilities.SERENE_GRACE); + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.TRIPLE_ARROWS); + await game.phaseInterceptor.to("BerryPhase"); + + expect(flinchAttr.getMoveChance).toHaveReturnedWith(60); + expect(defDropAttr.getMoveChance).toHaveReturnedWith(100); + }); +}); From 9bb6398385847ac5594100597b87e87ed09fe279 Mon Sep 17 00:00:00 2001 From: chaosgrimmon <31082757+chaosgrimmon@users.noreply.github.com> Date: Tue, 8 Oct 2024 11:03:47 -0400 Subject: [PATCH 039/153] [Sprite] Fix stray pixels in Kirlia's animation (#4612) * [Sprite] Fix Kirlia padding bleedover * [Sprite] Fix shiny Kirlia padding bleedover --- public/images/pokemon/281.json | 8 ++++---- public/images/pokemon/shiny/281.json | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/public/images/pokemon/281.json b/public/images/pokemon/281.json index 8e865cdc935..cb1a43f256f 100644 --- a/public/images/pokemon/281.json +++ b/public/images/pokemon/281.json @@ -399,13 +399,13 @@ "x": 0, "y": 6, "w": 36, - "h": 55 + "h": 54 }, "frame": { "x": 72, "y": 55, "w": 36, - "h": 55 + "h": 54 } }, { @@ -420,13 +420,13 @@ "x": 0, "y": 6, "w": 36, - "h": 55 + "h": 54 }, "frame": { "x": 72, "y": 55, "w": 36, - "h": 55 + "h": 54 } }, { diff --git a/public/images/pokemon/shiny/281.json b/public/images/pokemon/shiny/281.json index 684be77edf9..64e10c7f9a6 100644 --- a/public/images/pokemon/shiny/281.json +++ b/public/images/pokemon/shiny/281.json @@ -399,13 +399,13 @@ "x": 0, "y": 6, "w": 36, - "h": 55 + "h": 54 }, "frame": { "x": 72, "y": 55, "w": 36, - "h": 55 + "h": 54 } }, { @@ -420,13 +420,13 @@ "x": 0, "y": 6, "w": 36, - "h": 55 + "h": 54 }, "frame": { "x": 72, "y": 55, "w": 36, - "h": 55 + "h": 54 } }, { From 6e10f6600fe30793c7ff56ce98f27ae1b3486d5e Mon Sep 17 00:00:00 2001 From: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com> Date: Tue, 8 Oct 2024 17:08:25 +0200 Subject: [PATCH 040/153] [P2] Fix damage achievements not awarding (#4613) --- src/field/pokemon.ts | 2 +- src/phases/level-up-phase.ts | 2 +- src/system/achv.ts | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index a0ad4e8a52f..241524df1b9 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -2758,7 +2758,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (damage > 0) { if (source.isPlayer()) { - this.scene.validateAchvs(DamageAchv, damage); + this.scene.validateAchvs(DamageAchv, new Utils.NumberHolder(damage)); if (damage > this.scene.gameData.gameStats.highestDamage) { this.scene.gameData.gameStats.highestDamage = damage; } diff --git a/src/phases/level-up-phase.ts b/src/phases/level-up-phase.ts index a99e038acba..a2fa8a16533 100644 --- a/src/phases/level-up-phase.ts +++ b/src/phases/level-up-phase.ts @@ -28,7 +28,7 @@ export class LevelUpPhase extends PlayerPartyMemberPokemonPhase { this.scene.gameData.gameStats.highestLevel = this.level; } - this.scene.validateAchvs(LevelAchv, new Utils.IntegerHolder(this.level)); + this.scene.validateAchvs(LevelAchv, new Utils.NumberHolder(this.level)); const pokemon = this.getPokemon(); const prevStats = pokemon.stats.slice(0); diff --git a/src/system/achv.ts b/src/system/achv.ts index 7bac631d7aa..7329dd41fd5 100644 --- a/src/system/achv.ts +++ b/src/system/achv.ts @@ -109,7 +109,7 @@ export class DamageAchv extends Achv { damageAmount: integer; constructor(localizationKey: string, name: string, damageAmount: integer, iconImage: string, score: integer) { - super(localizationKey, name, "", iconImage, score, (_scene: BattleScene, args: any[]) => (args[0] as Utils.NumberHolder).value >= this.damageAmount); + super(localizationKey, name, "", iconImage, score, (_scene: BattleScene, args: any[]) => (args[0] instanceof Utils.NumberHolder ? args[0].value : args[0]) >= this.damageAmount); this.damageAmount = damageAmount; } } @@ -118,7 +118,7 @@ export class HealAchv extends Achv { healAmount: integer; constructor(localizationKey: string, name: string, healAmount: integer, iconImage: string, score: integer) { - super(localizationKey, name, "", iconImage, score, (_scene: BattleScene, args: any[]) => (args[0] as Utils.NumberHolder).value >= this.healAmount); + super(localizationKey, name, "", iconImage, score, (_scene: BattleScene, args: any[]) => (args[0] instanceof Utils.NumberHolder ? args[0].value : args[0]) >= this.healAmount); this.healAmount = healAmount; } } @@ -127,7 +127,7 @@ export class LevelAchv extends Achv { level: integer; constructor(localizationKey: string, name: string, level: integer, iconImage: string, score: integer) { - super(localizationKey, name, "", iconImage, score, (scene: BattleScene, args: any[]) => (args[0] as Utils.IntegerHolder).value >= this.level); + super(localizationKey, name, "", iconImage, score, (scene: BattleScene, args: any[]) => (args[0] instanceof Utils.NumberHolder ? args[0].value : args[0]) >= this.level); this.level = level; } } From 0ede7b057d9699e6c3a1d00ae2b2d55e6363f927 Mon Sep 17 00:00:00 2001 From: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com> Date: Tue, 8 Oct 2024 17:10:54 +0200 Subject: [PATCH 041/153] [P3][UI] Fix egg gacha overlay not getting cleared properly (#4600) --- src/overrides.ts | 1 + src/ui/egg-gacha-ui-handler.ts | 49 ++++++++++++++++++++--------- src/ui/starter-select-ui-handler.ts | 3 +- 3 files changed, 37 insertions(+), 16 deletions(-) diff --git a/src/overrides.ts b/src/overrides.ts index 27886ded2f2..211d430a835 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -156,6 +156,7 @@ class DefaultOverrides { readonly EGG_VARIANT_OVERRIDE: VariantTier | null = null; readonly EGG_FREE_GACHA_PULLS_OVERRIDE: boolean = false; readonly EGG_GACHA_PULL_COUNT_OVERRIDE: number = 0; + readonly UNLIMITED_EGG_COUNT_OVERRIDE: boolean = false; // ------------------------- // MYSTERY ENCOUNTER OVERRIDES diff --git a/src/ui/egg-gacha-ui-handler.ts b/src/ui/egg-gacha-ui-handler.ts index 56cd5299949..366f1604740 100644 --- a/src/ui/egg-gacha-ui-handler.ts +++ b/src/ui/egg-gacha-ui-handler.ts @@ -34,6 +34,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { private cursorObj: Phaser.GameObjects.Image; private transitioning: boolean; private transitionCancelled: boolean; + private summaryFinished: boolean; private defaultText: string; private scale: number = 0.1666666667; @@ -479,7 +480,12 @@ export default class EggGachaUiHandler extends MessageUiHandler { } showSummary(eggs: Egg[]): void { - this.transitioning = false; + // the overlay will appear faster if the egg pulling animation was skipped + const overlayEaseInDuration = this.getDelayValue(750); + + this.summaryFinished = false; + this.transitionCancelled = false; + this.setTransitioning(true); this.eggGachaSummaryContainer.setVisible(true); const eggScale = eggs.length < 20 ? 1 : 0.5; @@ -488,12 +494,14 @@ export default class EggGachaUiHandler extends MessageUiHandler { targets: this.eggGachaOverlay, alpha: 0.5, ease: "Sine.easeOut", - duration: 750, + duration: overlayEaseInDuration, onComplete: () => { const rowItems = 5; const rows = Math.ceil(eggs.length / rowItems); const cols = Math.min(eggs.length, rowItems); const height = this.eggGachaOverlay.displayHeight - this.eggGachaMessageBox.displayHeight; + + // Create sprites for each egg const eggContainers = eggs.map((egg, t) => { const col = t % rowItems; const row = Math.floor(t / rowItems); @@ -515,14 +523,24 @@ export default class EggGachaUiHandler extends MessageUiHandler { return ret; }); - eggContainers.forEach((eggContainer, e) => { - this.scene.tweens.add({ - targets: eggContainer, - delay: this.getDelayValue(e * 100), - duration: this.getDelayValue(350), - scale: eggScale, - ease: "Sine.easeOut" - }); + // If action/cancel was pressed when the overlay was easing in, show all eggs at once + // Otherwise show the eggs one by one with a small delay between each + eggContainers.forEach((eggContainer, index) => { + const delay = !this.transitionCancelled ? this.getDelayValue(index * 100) : 0; + this.scene.time.delayedCall(delay, () => + this.scene.tweens.add({ + targets: eggContainer, + duration: this.getDelayValue(350), + scale: eggScale, + ease: "Sine.easeOut", + onComplete: () => { + if (index === eggs.length - 1) { + this.setTransitioning(false); + this.summaryFinished = true; + } + } + })); + }); } }); @@ -540,6 +558,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { this.eggGachaSummaryContainer.setAlpha(1); this.eggGachaSummaryContainer.removeAll(true); this.setTransitioning(false); + this.summaryFinished = false; this.eggGachaOptionsContainer.setVisible(true); } }); @@ -613,7 +632,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { } else { if (this.eggGachaSummaryContainer.visible) { - if (button === Button.ACTION || button === Button.CANCEL) { + if (this.summaryFinished && (button === Button.ACTION || button === Button.CANCEL)) { this.hideSummary(); success = true; } @@ -625,7 +644,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { if (!this.scene.gameData.voucherCounts[VoucherType.REGULAR] && !Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { error = true; this.showError(i18next.t("egg:notEnoughVouchers")); - } else if (this.scene.gameData.eggs.length < 99) { + } else if (this.scene.gameData.eggs.length < 99 || Overrides.UNLIMITED_EGG_COUNT_OVERRIDE) { if (!Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { this.consumeVouchers(VoucherType.REGULAR, 1); } @@ -640,7 +659,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { if (!this.scene.gameData.voucherCounts[VoucherType.PLUS] && !Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { error = true; this.showError(i18next.t("egg:notEnoughVouchers")); - } else if (this.scene.gameData.eggs.length < 95) { + } else if (this.scene.gameData.eggs.length < 95 || Overrides.UNLIMITED_EGG_COUNT_OVERRIDE) { if (!Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { this.consumeVouchers(VoucherType.PLUS, 1); } @@ -657,7 +676,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { || (this.cursor === 3 && !this.scene.gameData.voucherCounts[VoucherType.PREMIUM] && !Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE)) { error = true; this.showError(i18next.t("egg:notEnoughVouchers")); - } else if (this.scene.gameData.eggs.length < 90) { + } else if (this.scene.gameData.eggs.length < 90 || Overrides.UNLIMITED_EGG_COUNT_OVERRIDE) { if (this.cursor === 3) { if (!Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { this.consumeVouchers(VoucherType.PREMIUM, 1); @@ -678,7 +697,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { if (!this.scene.gameData.voucherCounts[VoucherType.GOLDEN] && !Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { error = true; this.showError(i18next.t("egg:notEnoughVouchers")); - } else if (this.scene.gameData.eggs.length < 75) { + } else if (this.scene.gameData.eggs.length < 75 || Overrides.UNLIMITED_EGG_COUNT_OVERRIDE) { if (!Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { this.consumeVouchers(VoucherType.GOLDEN, 1); } diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 9623d78c51e..5bbe765947e 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -1789,7 +1789,8 @@ export default class StarterSelectUiHandler extends MessageUiHandler { options.push({ label: `x${sameSpeciesEggCost} ${i18next.t("starterSelectUiHandler:sameSpeciesEgg")}`, handler: () => { - if (this.scene.gameData.eggs.length < 99 && (Overrides.FREE_CANDY_UPGRADE_OVERRIDE || candyCount >= sameSpeciesEggCost)) { + if ((this.scene.gameData.eggs.length < 99 || Overrides.UNLIMITED_EGG_COUNT_OVERRIDE) + && (Overrides.FREE_CANDY_UPGRADE_OVERRIDE || candyCount >= sameSpeciesEggCost)) { if (!Overrides.FREE_CANDY_UPGRADE_OVERRIDE) { starterData.candyCount -= sameSpeciesEggCost; } From 57a967890a40e2625f2de3b8ba6a97dcc7688388 Mon Sep 17 00:00:00 2001 From: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com> Date: Tue, 8 Oct 2024 17:11:21 +0200 Subject: [PATCH 042/153] [Offline P1] Fix wrong local save being deleted when creating a new run (#4598) --- src/system/game-data.ts | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/system/game-data.ts b/src/system/game-data.ts index eada3d270ef..0d2f35ae728 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -1125,10 +1125,16 @@ export class GameData { }); } + /** + * Delete the session data at the given slot when overwriting a save file + * For deleting the session of a finished run, use {@linkcode tryClearSession} + * @param slotId the slot to clear + * @returns Promise with result `true` if the session was deleted successfully, `false` otherwise + */ deleteSession(slotId: integer): Promise { return new Promise(resolve => { if (bypassLogin) { - localStorage.removeItem(`sessionData${this.scene.sessionSlotId ? this.scene.sessionSlotId : ""}_${loggedInUser?.username}`); + localStorage.removeItem(`sessionData${slotId ? slotId : ""}_${loggedInUser?.username}`); return resolve(true); } @@ -1139,7 +1145,7 @@ export class GameData { Utils.apiFetch(`savedata/session/delete?slot=${slotId}&clientSessionId=${clientSessionId}`, true).then(response => { if (response.ok) { loggedInUser!.lastSessionSlot = -1; // TODO: is the bang correct? - localStorage.removeItem(`sessionData${this.scene.sessionSlotId ? this.scene.sessionSlotId : ""}_${loggedInUser?.username}`); + localStorage.removeItem(`sessionData${slotId ? slotId : ""}_${loggedInUser?.username}`); resolve(true); } return response.text(); @@ -1190,7 +1196,9 @@ export class GameData { /** - * Attempt to clear session data. After session data is removed, attempt to update user info so the menu updates + * Attempt to clear session data after the end of a run + * After session data is removed, attempt to update user info so the menu updates + * To delete an unfinished run instead, use {@linkcode deleteSession} */ async tryClearSession(scene: BattleScene, slotId: integer): Promise<[success: boolean, newClear: boolean]> { let result: [boolean, boolean] = [ false, false ]; @@ -1204,7 +1212,7 @@ export class GameData { if (response.ok) { loggedInUser!.lastSessionSlot = -1; // TODO: is the bang correct? - localStorage.removeItem(`sessionData${this.scene.sessionSlotId ? this.scene.sessionSlotId : ""}_${loggedInUser?.username}`); + localStorage.removeItem(`sessionData${slotId ? slotId : ""}_${loggedInUser?.username}`); } const jsonResponse: PokerogueApiClearSessionData = await response.json(); From 39cebb76d01f801377841bdc1a65161cee4835b6 Mon Sep 17 00:00:00 2001 From: flx-sta <50131232+flx-sta@users.noreply.github.com> Date: Tue, 8 Oct 2024 10:30:48 -0700 Subject: [PATCH 043/153] [Bug] i18n messages files fix (#4611) * fix matching for i18n messages files * update public/locales head --- public/locales | 2 +- src/plugins/i18n.ts | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/public/locales b/public/locales index b44ee217378..fc4a1effd51 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit b44ee2173788018ffd5dc6b7b7fa159be5b9d514 +Subproject commit fc4a1effd5170def3c8314208a52cd0d8e6913ef diff --git a/src/plugins/i18n.ts b/src/plugins/i18n.ts index be4c6983c0a..84c12b91df3 100644 --- a/src/plugins/i18n.ts +++ b/src/plugins/i18n.ts @@ -81,6 +81,8 @@ const namespaceMap = { miscDialogue: "dialogue-misc", battleSpecDialogue: "dialogue-final-boss", doubleBattleDialogue: "dialogue-double-battle", + splashMessages: "splash-texts", + mysteryEncounterMessages: "mystery-encounter-messages", }; //#region Functions From d8c914c7686c0fa4c74609ebed97c03f65a46f3e Mon Sep 17 00:00:00 2001 From: flx-sta <50131232+flx-sta@users.noreply.github.com> Date: Tue, 8 Oct 2024 10:44:23 -0700 Subject: [PATCH 044/153] [Beta P3] Fix i18n namespaces map for `mysteryEncounterMessages` from `mystery-encounter-messages` -> `mystery-encounter-texts` (#4617) Something I missed in #4611 --- src/plugins/i18n.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/i18n.ts b/src/plugins/i18n.ts index 84c12b91df3..d24484bbf9d 100644 --- a/src/plugins/i18n.ts +++ b/src/plugins/i18n.ts @@ -82,7 +82,7 @@ const namespaceMap = { battleSpecDialogue: "dialogue-final-boss", doubleBattleDialogue: "dialogue-double-battle", splashMessages: "splash-texts", - mysteryEncounterMessages: "mystery-encounter-messages", + mysteryEncounterMessages: "mystery-encounter-texts", }; //#region Functions From deb2035610091eedb884c60ee5f2f4cd14365f50 Mon Sep 17 00:00:00 2001 From: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com> Date: Wed, 9 Oct 2024 20:30:28 +0200 Subject: [PATCH 045/153] [Beta][P2] Fix Grip Claw (#4614) * [Beta][P2] Fix Grip Claw * Add test for Grip Claw * [test] improve grip claw's test readability * PR feedback --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/modifier/modifier.ts | 7 ++- src/test/items/grip_claw.test.ts | 96 +++++++++++++++++++++++--------- 2 files changed, 74 insertions(+), 29 deletions(-) diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index b658d3b5277..6c9b5db1bca 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -3084,11 +3084,12 @@ export abstract class HeldItemTransferModifier extends PokemonHeldItemModifier { * Steals an item from a set of target Pokemon. * This prioritizes high-tier held items when selecting the item to steal. * @param pokemon The {@linkcode Pokemon} holding this item + * @param target The {@linkcode Pokemon} to steal from (optional) * @param _args N/A * @returns `true` if an item was stolen; false otherwise. */ - override apply(pokemon: Pokemon, ..._args: unknown[]): boolean { - const opponents = this.getTargets(pokemon); + override apply(pokemon: Pokemon, target?: Pokemon, ..._args: unknown[]): boolean { + const opponents = this.getTargets(pokemon, target); if (!opponents.length) { return false; @@ -3187,7 +3188,7 @@ export class TurnHeldItemTransferModifier extends HeldItemTransferModifier { * @see {@linkcode HeldItemTransferModifier} */ export class ContactHeldItemTransferChanceModifier extends HeldItemTransferModifier { - private chance: number; + public readonly chance: number; constructor(type: ModifierType, pokemonId: number, chancePercent: number, stackCount?: number) { super(type, pokemonId, stackCount); diff --git a/src/test/items/grip_claw.test.ts b/src/test/items/grip_claw.test.ts index 9d44a9e4672..2909549af87 100644 --- a/src/test/items/grip_claw.test.ts +++ b/src/test/items/grip_claw.test.ts @@ -1,16 +1,14 @@ import { BattlerIndex } from "#app/battle"; -import { allMoves } from "#app/data/move"; -import { Abilities } from "#app/enums/abilities"; -import { BerryType } from "#app/enums/berry-type"; -import { Moves } from "#app/enums/moves"; -import { Species } from "#app/enums/species"; -import { MoveEndPhase } from "#app/phases/move-end-phase"; +import Pokemon from "#app/field/pokemon"; +import { ContactHeldItemTransferChanceModifier } from "#app/modifier/modifier"; +import { Abilities } from "#enums/abilities"; +import { BerryType } from "#enums/berry-type"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; import GameManager from "#test/utils/gameManager"; import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -// 20 seconds - describe("Items - Grip Claw", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -30,39 +28,85 @@ describe("Items - Grip Claw", () => { game.override .battleType("double") - .moveset([ Moves.POPULATION_BOMB, Moves.SPLASH ]) + .moveset([ Moves.TACKLE, Moves.SPLASH, Moves.ATTRACT ]) .startingHeldItems([ - { name: "GRIP_CLAW", count: 5 }, // TODO: Find a way to mock the steal chance of grip claw - { name: "MULTI_LENS", count: 3 }, + { name: "GRIP_CLAW", count: 1 }, ]) .enemySpecies(Species.SNORLAX) - .ability(Abilities.KLUTZ) + .enemyAbility(Abilities.UNNERVE) + .ability(Abilities.UNNERVE) .enemyMoveset(Moves.SPLASH) .enemyHeldItems([ { name: "BERRY", type: BerryType.SITRUS, count: 2 }, { name: "BERRY", type: BerryType.LUM, count: 2 }, ]) - .startingLevel(100) .enemyLevel(100); - vi.spyOn(allMoves[Moves.POPULATION_BOMB], "accuracy", "get").mockReturnValue(100); }); - it( - "should only steal items from the attack target", - async () => { - await game.startBattle([ Species.PANSEAR, Species.ROWLET ]); + it("should steal items on contact and only from the attack target", async () => { + await game.classicMode.startBattle([ Species.FEEBAS, Species.MILOTIC ]); - const enemyPokemon = game.scene.getEnemyField(); + const [ playerPokemon, ] = game.scene.getPlayerField(); - const enemyHeldItemCt = enemyPokemon.map(p => p.getHeldItems.length); + const gripClaw = playerPokemon.getHeldItems()[0] as ContactHeldItemTransferChanceModifier; + vi.spyOn(gripClaw, "chance", "get").mockReturnValue(100); - game.move.select(Moves.POPULATION_BOMB, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + const enemyPokemon = game.scene.getEnemyField(); - await game.phaseInterceptor.to(MoveEndPhase, false); + const playerHeldItemCount = getHeldItemCount(playerPokemon); + const enemy1HeldItemCount = getHeldItemCount(enemyPokemon[0]); + const enemy2HeldItemCount = getHeldItemCount(enemyPokemon[1]); + expect(enemy2HeldItemCount).toBeGreaterThan(0); - expect(enemyPokemon[1].getHeldItems.length).toBe(enemyHeldItemCt[1]); - } - ); + game.move.select(Moves.TACKLE, 0, BattlerIndex.ENEMY_2); + game.move.select(Moves.SPLASH, 1); + + await game.phaseInterceptor.to("BerryPhase", false); + + const playerHeldItemCountAfter = getHeldItemCount(playerPokemon); + const enemy1HeldItemCountsAfter = getHeldItemCount(enemyPokemon[0]); + const enemy2HeldItemCountsAfter = getHeldItemCount(enemyPokemon[1]); + + expect(playerHeldItemCountAfter).toBe(playerHeldItemCount + 1); + expect(enemy1HeldItemCountsAfter).toBe(enemy1HeldItemCount); + expect(enemy2HeldItemCountsAfter).toBe(enemy2HeldItemCount - 1); + }); + + it("should not steal items when using a targetted, non attack move", async () => { + await game.classicMode.startBattle([ Species.FEEBAS, Species.MILOTIC ]); + + const [ playerPokemon, ] = game.scene.getPlayerField(); + + const gripClaw = playerPokemon.getHeldItems()[0] as ContactHeldItemTransferChanceModifier; + vi.spyOn(gripClaw, "chance", "get").mockReturnValue(100); + + const enemyPokemon = game.scene.getEnemyField(); + + const playerHeldItemCount = getHeldItemCount(playerPokemon); + const enemy1HeldItemCount = getHeldItemCount(enemyPokemon[0]); + const enemy2HeldItemCount = getHeldItemCount(enemyPokemon[1]); + expect(enemy2HeldItemCount).toBeGreaterThan(0); + + game.move.select(Moves.ATTRACT, 0, BattlerIndex.ENEMY_2); + game.move.select(Moves.SPLASH, 1); + + await game.phaseInterceptor.to("BerryPhase", false); + + const playerHeldItemCountAfter = getHeldItemCount(playerPokemon); + const enemy1HeldItemCountsAfter = getHeldItemCount(enemyPokemon[0]); + const enemy2HeldItemCountsAfter = getHeldItemCount(enemyPokemon[1]); + + expect(playerHeldItemCountAfter).toBe(playerHeldItemCount); + expect(enemy1HeldItemCountsAfter).toBe(enemy1HeldItemCount); + expect(enemy2HeldItemCountsAfter).toBe(enemy2HeldItemCount); + }); }); + +/* + * Gets the total number of items a Pokemon holds + */ +function getHeldItemCount(pokemon: Pokemon) { + return pokemon.getHeldItems().reduce((currentTotal, item) => currentTotal + item.getStackCount(), 0); +} + From d2c579cf2a2d22639ba1c3998f36e27f4e5d5b3a Mon Sep 17 00:00:00 2001 From: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com> Date: Wed, 9 Oct 2024 20:32:20 +0200 Subject: [PATCH 046/153] [P2] Prevent generating Pokemon with duplicate IDs in daily runs (#4623) --- src/phases/title-phase.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/phases/title-phase.ts b/src/phases/title-phase.ts index 115e4f640a2..58683cf8ec8 100644 --- a/src/phases/title-phase.ts +++ b/src/phases/title-phase.ts @@ -196,7 +196,7 @@ export class TitlePhase extends Phase { this.scene.gameMode = getGameMode(GameModes.DAILY); this.scene.setSeed(seed); - this.scene.resetSeed(1); + this.scene.resetSeed(0); this.scene.money = this.scene.gameMode.getStartingMoney(); From ffe941d235f6f4923bc5b87e0d29701a609c4bba Mon Sep 17 00:00:00 2001 From: Mumble <171087428+frutescens@users.noreply.github.com> Date: Wed, 9 Oct 2024 12:04:13 -0700 Subject: [PATCH 047/153] [Feature][UI] Save Preview (#4410) * Making 3 Option UI real * idk anymore * Revert "Making 3 Option UI real" This reverts commit beaad44c1eb098a09cfd2d04043d878d24f494c1. * Let's see * Current issues - scrolling upwards and correct cursor landing * argh * Fixed reactive scrolling * Adding ME handling * set up descriptions * Cleaned up UI i think * stupid alder * Added double trainer handling + changed enum name * Apply suggestions from code review Thank you Moka! Co-authored-by: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com> * Arrow Visibility now depends on Session Slot hasData * documentation * Simplified calls to revertSessionSlot + changed function name per feedback * Fixed scrollCursor issue. * added comment * Update src/ui/save-slot-select-ui-handler.ts Co-authored-by: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com> * Fixed sound played + added better conditional * Balance Team.... * ME related changes * Apply suggestions from code review Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com> * Update src/data/mystery-encounters/mystery-encounter.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/data/mystery-encounters/mystery-encounter.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Sending Doubles-fix * eslint.. --------- Co-authored-by: frutescens Co-authored-by: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com> Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/battle-scene.ts | 6 +- .../encounters/a-trainers-test-encounter.ts | 1 + .../encounters/absolute-avarice-encounter.ts | 1 + .../an-offer-you-cant-refuse-encounter.ts | 1 + .../encounters/berries-abound-encounter.ts | 1 + .../encounters/bug-type-superfan-encounter.ts | 1 + .../encounters/clowning-around-encounter.ts | 1 + .../encounters/dancing-lessons-encounter.ts | 1 + .../encounters/dark-deal-encounter.ts | 1 + .../encounters/delibirdy-encounter.ts | 1 + .../department-store-sale-encounter.ts | 1 + .../encounters/field-trip-encounter.ts | 1 + .../encounters/fiery-fallout-encounter.ts | 1 + .../encounters/fight-or-flight-encounter.ts | 1 + .../encounters/fun-and-games-encounter.ts | 1 + .../global-trade-system-encounter.ts | 1 + .../encounters/lost-at-sea-encounter.ts | 1 + .../mysterious-challengers-encounter.ts | 1 + .../encounters/mysterious-chest-encounter.ts | 1 + .../encounters/part-timer-encounter.ts | 1 + .../encounters/safari-zone-encounter.ts | 1 + .../shady-vitamin-dealer-encounter.ts | 1 + .../slumbering-snorlax-encounter.ts | 1 + .../teleporting-hijinks-encounter.ts | 1 + .../the-expert-pokemon-breeder-encounter.ts | 1 + .../the-pokemon-salesman-encounter.ts | 1 + .../encounters/the-strong-stuff-encounter.ts | 1 + .../the-winstrate-challenge-encounter.ts | 1 + .../encounters/training-session-encounter.ts | 1 + .../encounters/trash-to-treasure-encounter.ts | 1 + .../encounters/uncommon-breed-encounter.ts | 1 + .../encounters/weird-dream-encounter.ts | 1 + .../mystery-encounters/mystery-encounter.ts | 14 +- src/ui/run-history-ui-handler.ts | 3 +- src/ui/run-info-ui-handler.ts | 136 +++++++++++++++--- src/ui/save-slot-select-ui-handler.ts | 94 +++++++++--- 36 files changed, 246 insertions(+), 38 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index cc6934f20d1..a586b565e13 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -3161,13 +3161,17 @@ export default class BattleScene extends SceneBase { /** * Loads or generates a mystery encounter * @param encounterType used to load session encounter when restarting game, etc. + * @param canBypass optional boolean to indicate that the request is coming from a function that needs to access a Mystery Encounter outside of gameplay requirements * @returns */ - getMysteryEncounter(encounterType?: MysteryEncounterType): MysteryEncounter { + getMysteryEncounter(encounterType?: MysteryEncounterType, canBypass?: boolean): MysteryEncounter { // Loading override or session encounter let encounter: MysteryEncounter | null; if (!isNullOrUndefined(Overrides.MYSTERY_ENCOUNTER_OVERRIDE) && allMysteryEncounters.hasOwnProperty(Overrides.MYSTERY_ENCOUNTER_OVERRIDE)) { encounter = allMysteryEncounters[Overrides.MYSTERY_ENCOUNTER_OVERRIDE]; + } else if (canBypass) { + encounter = allMysteryEncounters[encounterType ?? -1]; + return encounter; } else { encounter = !isNullOrUndefined(encounterType) ? allMysteryEncounters[encounterType] : null; } diff --git a/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts b/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts index 13e187179d4..f3b886ac0ac 100644 --- a/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts +++ b/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts @@ -128,6 +128,7 @@ export const ATrainersTestEncounter: MysteryEncounter = return true; }) + .setLocalizationKey(`${namespace}`) .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) diff --git a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts index c98947a3f93..70b2d50fe99 100644 --- a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts +++ b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts @@ -166,6 +166,7 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = text: `${namespace}:intro`, } ]) + .setLocalizationKey(`${namespace}`) .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) diff --git a/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts b/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts index e445a8f481d..ab892ae00f2 100644 --- a/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts +++ b/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts @@ -64,6 +64,7 @@ export const AnOfferYouCantRefuseEncounter: MysteryEncounter = speaker: `${namespace}:speaker`, }, ]) + .setLocalizationKey(`${namespace}`) .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) diff --git a/src/data/mystery-encounters/encounters/berries-abound-encounter.ts b/src/data/mystery-encounters/encounters/berries-abound-encounter.ts index 3e5d75727b1..095f8a8473b 100644 --- a/src/data/mystery-encounters/encounters/berries-abound-encounter.ts +++ b/src/data/mystery-encounters/encounters/berries-abound-encounter.ts @@ -110,6 +110,7 @@ export const BerriesAboundEncounter: MysteryEncounter = return true; }) + .setLocalizationKey(`${namespace}`) .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) diff --git a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts index 20c0569c725..b5d47cf6912 100644 --- a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts +++ b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts @@ -276,6 +276,7 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = return true; }) + .setLocalizationKey(`${namespace}`) .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) diff --git a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts index 6c028d4619a..be52ab42c9d 100644 --- a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts +++ b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts @@ -148,6 +148,7 @@ export const ClowningAroundEncounter: MysteryEncounter = return true; }) + .setLocalizationKey(`${namespace}`) .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) diff --git a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts index cb07bf06a81..0f784739777 100644 --- a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts +++ b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts @@ -102,6 +102,7 @@ export const DancingLessonsEncounter: MysteryEncounter = text: `${namespace}:intro`, } ]) + .setLocalizationKey(`${namespace}`) .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) diff --git a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts index fc8c8088d58..5ad6630386f 100644 --- a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts +++ b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts @@ -117,6 +117,7 @@ export const DarkDealEncounter: MysteryEncounter = .withSceneWaveRangeRequirement(30, CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES[1]) .withScenePartySizeRequirement(2, 6, true) // Must have at least 2 pokemon in party .withCatchAllowed(true) + .setLocalizationKey(`${namespace}`) .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) diff --git a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts index a11dc8cbe72..5686d0f6ce5 100644 --- a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts +++ b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts @@ -84,6 +84,7 @@ export const DelibirdyEncounter: MysteryEncounter = text: `${namespace}:intro`, } ]) + .setLocalizationKey(`${namespace}`) .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) diff --git a/src/data/mystery-encounters/encounters/department-store-sale-encounter.ts b/src/data/mystery-encounters/encounters/department-store-sale-encounter.ts index 1505768f968..10034d19263 100644 --- a/src/data/mystery-encounters/encounters/department-store-sale-encounter.ts +++ b/src/data/mystery-encounters/encounters/department-store-sale-encounter.ts @@ -51,6 +51,7 @@ export const DepartmentStoreSaleEncounter: MysteryEncounter = }, ]) .withAutoHideIntroVisuals(false) + .setLocalizationKey(`${namespace}`) .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) diff --git a/src/data/mystery-encounters/encounters/field-trip-encounter.ts b/src/data/mystery-encounters/encounters/field-trip-encounter.ts index a75e5ef6a77..bf5fb28163b 100644 --- a/src/data/mystery-encounters/encounters/field-trip-encounter.ts +++ b/src/data/mystery-encounters/encounters/field-trip-encounter.ts @@ -52,6 +52,7 @@ export const FieldTripEncounter: MysteryEncounter = }, ]) .withAutoHideIntroVisuals(false) + .setLocalizationKey(`${namespace}`) .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) diff --git a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts index 9e7652e24ea..d44e7bae596 100644 --- a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts +++ b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts @@ -122,6 +122,7 @@ export const FieryFalloutEncounter: MysteryEncounter = return true; }) + .setLocalizationKey(`${namespace}`) .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) diff --git a/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts b/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts index a04521839fe..380662ca817 100644 --- a/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts +++ b/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts @@ -120,6 +120,7 @@ export const FightOrFlightEncounter: MysteryEncounter = return true; }) + .setLocalizationKey(`${namespace}`) .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) diff --git a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts index 2b103e0a293..549faa01fa1 100644 --- a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts +++ b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts @@ -76,6 +76,7 @@ export const FunAndGamesEncounter: MysteryEncounter = text: `${namespace}:intro_dialogue`, }, ]) + .setLocalizationKey(`${namespace}`) .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) diff --git a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts index 7b929ea5e7b..bafc1901e5e 100644 --- a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts +++ b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts @@ -96,6 +96,7 @@ export const GlobalTradeSystemEncounter: MysteryEncounter = text: `${namespace}:intro`, } ]) + .setLocalizationKey(`${namespace}`) .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) diff --git a/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts b/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts index 6ca131543b4..8fd46982dc1 100644 --- a/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts +++ b/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts @@ -50,6 +50,7 @@ export const LostAtSeaEncounter: MysteryEncounter = MysteryEncounterBuilder.with return true; }) + .setLocalizationKey(`${namespace}`) .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) diff --git a/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts b/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts index 08536f44245..fb25976ebd8 100644 --- a/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts +++ b/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts @@ -125,6 +125,7 @@ export const MysteriousChallengersEncounter: MysteryEncounter = return true; }) + .setLocalizationKey(`${namespace}`) .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) diff --git a/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts b/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts index 2b44f6ee33d..1eb1c4cb13e 100644 --- a/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts +++ b/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts @@ -61,6 +61,7 @@ export const MysteriousChestEncounter: MysteryEncounter = text: `${namespace}:intro`, } ]) + .setLocalizationKey(`${namespace}`) .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) diff --git a/src/data/mystery-encounters/encounters/part-timer-encounter.ts b/src/data/mystery-encounters/encounters/part-timer-encounter.ts index 2f41aa96677..17a3a366569 100644 --- a/src/data/mystery-encounters/encounters/part-timer-encounter.ts +++ b/src/data/mystery-encounters/encounters/part-timer-encounter.ts @@ -69,6 +69,7 @@ export const PartTimerEncounter: MysteryEncounter = return true; }) + .setLocalizationKey(`${namespace}`) .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) diff --git a/src/data/mystery-encounters/encounters/safari-zone-encounter.ts b/src/data/mystery-encounters/encounters/safari-zone-encounter.ts index d029460e617..c6b04b7aca6 100644 --- a/src/data/mystery-encounters/encounters/safari-zone-encounter.ts +++ b/src/data/mystery-encounters/encounters/safari-zone-encounter.ts @@ -54,6 +54,7 @@ export const SafariZoneEncounter: MysteryEncounter = text: `${namespace}:intro`, }, ]) + .setLocalizationKey(`${namespace}`) .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) diff --git a/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts b/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts index 89cb572962c..c70048ade07 100644 --- a/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts +++ b/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts @@ -62,6 +62,7 @@ export const ShadyVitaminDealerEncounter: MysteryEncounter = speaker: `${namespace}:speaker`, }, ]) + .setLocalizationKey(`${namespace}`) .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) diff --git a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts index d0b4cc13301..3a4bf465a78 100644 --- a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts +++ b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts @@ -88,6 +88,7 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = return true; }) + .setLocalizationKey(`${namespace}`) .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) diff --git a/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts b/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts index 63ab178c52a..01e241f63d4 100644 --- a/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts +++ b/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts @@ -58,6 +58,7 @@ export const TeleportingHijinksEncounter: MysteryEncounter = text: `${namespace}:intro`, } ]) + .setLocalizationKey(`${namespace}`) .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) diff --git a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts index aca46f1598b..4515736b30a 100644 --- a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts @@ -196,6 +196,7 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = return true; }) + .setLocalizationKey(`${namespace}`) .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) diff --git a/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts b/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts index 2720653e654..95f359547e4 100644 --- a/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-pokemon-salesman-encounter.ts @@ -53,6 +53,7 @@ export const ThePokemonSalesmanEncounter: MysteryEncounter = speaker: `${namespace}:speaker`, }, ]) + .setLocalizationKey(`${namespace}`) .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) diff --git a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts index d1d5b484129..7ee57d36027 100644 --- a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts @@ -117,6 +117,7 @@ export const TheStrongStuffEncounter: MysteryEncounter = return true; }) + .setLocalizationKey(`${namespace}`) .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) diff --git a/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts b/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts index ad4f2dd8498..c7cb23fe6f8 100644 --- a/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts @@ -94,6 +94,7 @@ export const TheWinstrateChallengeEncounter: MysteryEncounter = return true; }) + .setLocalizationKey(`${namespace}`) .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) diff --git a/src/data/mystery-encounters/encounters/training-session-encounter.ts b/src/data/mystery-encounters/encounters/training-session-encounter.ts index ff993f339cb..10bb956636b 100644 --- a/src/data/mystery-encounters/encounters/training-session-encounter.ts +++ b/src/data/mystery-encounters/encounters/training-session-encounter.ts @@ -52,6 +52,7 @@ export const TrainingSessionEncounter: MysteryEncounter = text: `${namespace}:intro`, } ]) + .setLocalizationKey(`${namespace}`) .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) diff --git a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts index be2cd796386..c2a0426bceb 100644 --- a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts +++ b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts @@ -54,6 +54,7 @@ export const TrashToTreasureEncounter: MysteryEncounter = text: `${namespace}:intro`, }, ]) + .setLocalizationKey(`${namespace}`) .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) diff --git a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts index 51c1d5f963f..13594f273d9 100644 --- a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts +++ b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts @@ -125,6 +125,7 @@ export const UncommonBreedEncounter: MysteryEncounter = scene.time.delayedCall(500, () => scene.playSound("battle_anims/PRSFX- Spotlight2")); return true; }) + .setLocalizationKey(`${namespace}`) .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) diff --git a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts index 17f33c27645..6e2f8352480 100644 --- a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts +++ b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts @@ -125,6 +125,7 @@ export const WeirdDreamEncounter: MysteryEncounter = text: `${namespace}:intro_dialogue`, }, ]) + .setLocalizationKey(`${namespace}`) .withTitle(`${namespace}:title`) .withDescription(`${namespace}:description`) .withQuery(`${namespace}:query`) diff --git a/src/data/mystery-encounters/mystery-encounter.ts b/src/data/mystery-encounters/mystery-encounter.ts index aabb0a3311a..7e175957e21 100644 --- a/src/data/mystery-encounters/mystery-encounter.ts +++ b/src/data/mystery-encounters/mystery-encounter.ts @@ -190,7 +190,7 @@ export default class MysteryEncounter implements IMysteryEncounter { secondaryPokemon?: PlayerPokemon[]; // #region Post-construct / Auto-populated params - + localizationKey: string; /** * Dialogue object containing all the dialogue, messages, tooltips, etc. for an encounter */ @@ -264,6 +264,7 @@ export default class MysteryEncounter implements IMysteryEncounter { Object.assign(this, encounter); } this.encounterTier = this.encounterTier ?? MysteryEncounterTier.COMMON; + this.localizationKey = this.localizationKey ?? ""; this.dialogue = this.dialogue ?? {}; this.spriteConfigs = this.spriteConfigs ? [ ...this.spriteConfigs ] : []; // Default max is 1 for ROGUE encounters, 2 for others @@ -528,6 +529,7 @@ export class MysteryEncounterBuilder implements Partial { options: [MysteryEncounterOption, MysteryEncounterOption, ...MysteryEncounterOption[]]; enemyPartyConfigs: EnemyPartyConfig[] = []; + localizationKey: string = ""; dialogue: MysteryEncounterDialogue = {}; requirements: EncounterSceneRequirement[] = []; primaryPokemonRequirements: EncounterPokemonRequirement[] = []; @@ -632,6 +634,16 @@ export class MysteryEncounterBuilder implements Partial { return this.withIntroSpriteConfigs(spriteConfigs).withIntroDialogue(dialogue); } + /** + * Sets the localization key used by the encounter + * @param localizationKey the string used as the key + * @returns `this` + */ + setLocalizationKey(localizationKey: string): this { + this.localizationKey = localizationKey; + return this; + } + /** * OPTIONAL */ diff --git a/src/ui/run-history-ui-handler.ts b/src/ui/run-history-ui-handler.ts index f4de9b21963..20de7fd832c 100644 --- a/src/ui/run-history-ui-handler.ts +++ b/src/ui/run-history-ui-handler.ts @@ -12,6 +12,7 @@ import { BattleType } from "../battle"; import { RunEntry } from "../system/game-data"; import { PlayerGender } from "#enums/player-gender"; import { TrainerVariant } from "../field/trainer"; +import { RunDisplayMode } from "#app/ui/run-info-ui-handler"; export type RunSelectCallback = (cursor: number) => void; @@ -104,7 +105,7 @@ export default class RunHistoryUiHandler extends MessageUiHandler { if (button === Button.ACTION) { const cursor = this.cursor + this.scrollCursor; if (this.runs[cursor]) { - this.scene.ui.setOverlayMode(Mode.RUN_INFO, this.runs[cursor].entryData, true); + this.scene.ui.setOverlayMode(Mode.RUN_INFO, this.runs[cursor].entryData, RunDisplayMode.RUN_HISTORY, true); } else { return false; } diff --git a/src/ui/run-info-ui-handler.ts b/src/ui/run-info-ui-handler.ts index d5f04f90e5b..39927f8e071 100644 --- a/src/ui/run-info-ui-handler.ts +++ b/src/ui/run-info-ui-handler.ts @@ -5,6 +5,7 @@ import { SessionSaveData } from "../system/game-data"; import { TextStyle, addTextObject, addBBCodeTextObject, getTextColor } from "./text"; import { Mode } from "./ui"; import { addWindow } from "./ui-theme"; +import { getPokeballAtlasKey } from "#app/data/pokeball"; import * as Utils from "../utils"; import PokemonData from "../system/pokemon-data"; import i18next from "i18next"; @@ -22,6 +23,8 @@ import * as Modifier from "../modifier/modifier"; import { Species } from "#enums/species"; import { PlayerGender } from "#enums/player-gender"; import { SettingKeyboard } from "#app/system/settings/settings-keyboard"; +import { getBiomeName } from "#app/data/balance/biomes"; +import { MysteryEncounterType } from "#enums/mystery-encounter-type"; /** * RunInfoUiMode indicates possible overlays of RunInfoUiHandler. @@ -34,6 +37,11 @@ enum RunInfoUiMode { ENDING_ART } +export enum RunDisplayMode { + RUN_HISTORY, + SESSION_PREVIEW +} + /** * Some variables are protected because this UI class will most likely be extended in the future to display more information. * These variables will most likely be shared across 'classes' aka pages. @@ -41,6 +49,7 @@ enum RunInfoUiMode { * For now, I leave as is. */ export default class RunInfoUiHandler extends UiHandler { + protected runDisplayMode: RunDisplayMode; protected runInfo: SessionSaveData; protected isVictory: boolean; protected pageMode: RunInfoUiMode; @@ -66,6 +75,7 @@ export default class RunInfoUiHandler extends UiHandler { // The import of the modifiersModule is loaded here to sidestep async/await issues. this.modifiersModule = Modifier; this.runContainer.setVisible(false); + this.scene.loadImage("encounter_exclaim", "mystery-encounters"); } /** @@ -87,9 +97,15 @@ export default class RunInfoUiHandler extends UiHandler { this.runContainer.add(gameStatsBg); const run = args[0]; + this.runDisplayMode = args[1]; + if (this.runDisplayMode === RunDisplayMode.RUN_HISTORY) { + this.runInfo = this.scene.gameData.parseSessionData(JSON.stringify(run.entry)); + this.isVictory = run.isVictory ?? false; + } else if (this.runDisplayMode === RunDisplayMode.SESSION_PREVIEW) { + this.runInfo = args[0]; + } // Assigning information necessary for the UI's creation - this.runInfo = this.scene.gameData.parseSessionData(JSON.stringify(run.entry)); - this.isVictory = run.isVictory; + this.pageMode = RunInfoUiMode.MAIN; // Creates Header and adds to this.runContainer @@ -102,7 +118,11 @@ export default class RunInfoUiHandler extends UiHandler { const runResultWindow = addWindow(this.scene, 0, 0, this.statsBgWidth - 11, 65); runResultWindow.setOrigin(0, 0); this.runResultContainer.add(runResultWindow); - this.parseRunResult(); + if (this.runDisplayMode === RunDisplayMode.RUN_HISTORY) { + this.parseRunResult(); + } else if (this.runDisplayMode === RunDisplayMode.SESSION_PREVIEW) { + this.parseRunStatus(); + } // Creates Run Info Container this.runInfoContainer = this.scene.add.container(0, 89); @@ -226,6 +246,66 @@ export default class RunInfoUiHandler extends UiHandler { this.runContainer.add(this.runResultContainer); } + /** + * This function is used when the Run Info UI is used to preview a Session. + * It edits {@linkcode runResultContainer}, but most importantly - does not display the negative results of a Mystery Encounter or any details of a trainer's party. + * Trainer Parties are replaced with their sprites, names, and their party size. + * Mystery Encounters contain sprites associated with MEs + the title of the specific ME. + */ + private parseRunStatus() { + const runStatusText = addTextObject(this.scene, 6, 5, `${i18next.t("saveSlotSelectUiHandler:wave")} ${this.runInfo.waveIndex} - ${getBiomeName(this.runInfo.arena.biome)}`, TextStyle.WINDOW, { fontSize : "65px", lineSpacing: 0.1 }); + + const enemyContainer = this.scene.add.container(0, 0); + this.runResultContainer.add(enemyContainer); + if (this.runInfo.battleType === BattleType.WILD) { + if (this.runInfo.enemyParty.length === 1) { + this.parseWildSingleDefeat(enemyContainer); + } else if (this.runInfo.enemyParty.length === 2) { + this.parseWildDoubleDefeat(enemyContainer); + } + } else if (this.runInfo.battleType === BattleType.TRAINER) { + this.showTrainerSprites(enemyContainer); + const row_limit = 3; + this.runInfo.enemyParty.forEach((p, i) => { + const pokeball = this.scene.add.sprite(0, 0, "pb"); + pokeball.setFrame(getPokeballAtlasKey(p.pokeball)); + pokeball.setScale(0.5); + pokeball.setPosition(52 + ((i % row_limit) * 8), (i <= 2) ? 18 : 25); + enemyContainer.add(pokeball); + }); + const trainerObj = this.runInfo.trainer.toTrainer(this.scene); + const RIVAL_TRAINER_ID_THRESHOLD = 375; + let trainerName = ""; + if (this.runInfo.trainer.trainerType >= RIVAL_TRAINER_ID_THRESHOLD) { + trainerName = (trainerObj.variant === TrainerVariant.FEMALE) ? i18next.t("trainerNames:rival_female") : i18next.t("trainerNames:rival"); + } else { + trainerName = trainerObj.getName(0, true); + } + const boxString = i18next.t(trainerObj.variant !== TrainerVariant.DOUBLE ? "battle:trainerAppeared" : "battle:trainerAppearedDouble", { trainerName: trainerName }).replace(/\n/g, " "); + const descContainer = this.scene.add.container(0, 0); + const textBox = addTextObject(this.scene, 0, 0, boxString, TextStyle.WINDOW, { fontSize : "35px", wordWrap: { width: 200 }}); + descContainer.add(textBox); + descContainer.setPosition(52, 29); + this.runResultContainer.add(descContainer); + } else if (this.runInfo.battleType === BattleType.MYSTERY_ENCOUNTER) { + const encounterExclaim = this.scene.add.sprite(0, 0, "encounter_exclaim"); + encounterExclaim.setPosition(34, 26); + encounterExclaim.setScale(0.65); + const subSprite = this.scene.add.sprite(56, -106, "pkmn__sub"); + subSprite.setScale(0.65); + subSprite.setPosition(34, 46); + const mysteryEncounterTitle = i18next.t(this.scene.getMysteryEncounter(this.runInfo.mysteryEncounterType as MysteryEncounterType, true).localizationKey + ":title"); + const descContainer = this.scene.add.container(0, 0); + const textBox = addTextObject(this.scene, 0, 0, mysteryEncounterTitle, TextStyle.WINDOW, { fontSize : "45px", wordWrap: { width: 160 }}); + descContainer.add(textBox); + descContainer.setPosition(47, 37); + this.runResultContainer.add([ encounterExclaim, subSprite, descContainer ]); + } + + this.runResultContainer.add(runStatusText); + this.runContainer.add(this.runResultContainer); + } + /** * This function is called to edit an enemyContainer to represent a loss from a defeat by a wild single Pokemon battle. * @param enemyContainer - container holding enemy visual and level information @@ -278,40 +358,58 @@ export default class RunInfoUiHandler extends UiHandler { } /** - * This edits a container to represent a loss from a defeat by a trainer battle. - * @param enemyContainer - container holding enemy visuals and level information - * The trainers are placed to the left of their party. - * Depending on the trainer icon, there may be overlap between the edges of the box or their party. (Capes...) - * - * Party Pokemon have their icons, terastalization status, and level shown. + * This loads the enemy sprites, positions, and scales them according to the current display mode of the RunInfo UI and then adds them to the container parameter. + * Used by {@linkcode parseRunStatus} and {@linkcode parseTrainerDefeat} + * @param enemyContainer a Phaser Container that should hold enemy sprites */ - private parseTrainerDefeat(enemyContainer: Phaser.GameObjects.Container) { + private showTrainerSprites(enemyContainer: Phaser.GameObjects.Container) { // Creating the trainer sprite and adding it to enemyContainer const tObj = this.runInfo.trainer.toTrainer(this.scene); - // Loads trainer assets on demand, as they are not loaded by default in the scene tObj.config.loadAssets(this.scene, this.runInfo.trainer.variant).then(() => { const tObjSpriteKey = tObj.config.getSpriteKey(this.runInfo.trainer.variant === TrainerVariant.FEMALE, false); const tObjSprite = this.scene.add.sprite(0, 5, tObjSpriteKey); - if (this.runInfo.trainer.variant === TrainerVariant.DOUBLE) { + if (this.runInfo.trainer.variant === TrainerVariant.DOUBLE && !tObj.config.doubleOnly) { const doubleContainer = this.scene.add.container(5, 8); tObjSprite.setPosition(-3, -3); const tObjPartnerSpriteKey = tObj.config.getSpriteKey(true, true); const tObjPartnerSprite = this.scene.add.sprite(5, -3, tObjPartnerSpriteKey); // Double Trainers have smaller sprites than Single Trainers - tObjPartnerSprite.setScale(0.20); - tObjSprite.setScale(0.20); - doubleContainer.add(tObjSprite); - doubleContainer.add(tObjPartnerSprite); - doubleContainer.setPosition(12, 38); + if (this.runDisplayMode === RunDisplayMode.RUN_HISTORY) { + tObjPartnerSprite.setScale(0.20); + tObjSprite.setScale(0.20); + doubleContainer.add(tObjSprite); + doubleContainer.add(tObjPartnerSprite); + doubleContainer.setPosition(12, 38); + } else { + tObjSprite.setScale(0.55); + tObjSprite.setPosition(-9, -3); + tObjPartnerSprite.setScale(0.55); + doubleContainer.add([ tObjSprite, tObjPartnerSprite ]); + doubleContainer.setPosition(28, 40); + } enemyContainer.add(doubleContainer); } else { - tObjSprite.setScale(0.35, 0.35); - tObjSprite.setPosition(12, 28); + const scale = (this.runDisplayMode === RunDisplayMode.RUN_HISTORY) ? 0.35 : 0.65; + const position = (this.runDisplayMode === RunDisplayMode.RUN_HISTORY) ? [ 12, 28 ] : [ 32, 36 ]; + tObjSprite.setScale(scale, scale); + tObjSprite.setPosition(position[0], position[1]); enemyContainer.add(tObjSprite); } }); + } + /** + * This edits a container to represent a loss from a defeat by a trainer battle. + * The trainers are placed to the left of their party. + * Depending on the trainer icon, there may be overlap between the edges of the box or their party. (Capes...) + * + * Party Pokemon have their icons, terastalization status, and level shown. + * @param enemyContainer - container holding enemy visuals and level information + */ + private parseTrainerDefeat(enemyContainer: Phaser.GameObjects.Container) { + // Loads and adds trainer sprites to the UI + this.showTrainerSprites(enemyContainer); // Determining which Terastallize Modifier belongs to which Pokemon // Creates a dictionary {PokemonId: TeraShardType} const teraPokemon = {}; diff --git a/src/ui/save-slot-select-ui-handler.ts b/src/ui/save-slot-select-ui-handler.ts index 89b20322a68..bd1a7dd9ac4 100644 --- a/src/ui/save-slot-select-ui-handler.ts +++ b/src/ui/save-slot-select-ui-handler.ts @@ -10,6 +10,7 @@ import MessageUiHandler from "./message-ui-handler"; import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; import { addWindow } from "./ui-theme"; +import { RunDisplayMode } from "#app/ui/run-info-ui-handler"; const sessionSlotCount = 5; @@ -33,7 +34,7 @@ export default class SaveSlotSelectUiHandler extends MessageUiHandler { private scrollCursor: integer = 0; - private cursorObj: Phaser.GameObjects.NineSlice | null; + private cursorObj: Phaser.GameObjects.Container | null; private sessionSlotsContainerInitialY: number; @@ -83,9 +84,11 @@ export default class SaveSlotSelectUiHandler extends MessageUiHandler { this.saveSlotSelectCallback = args[1] as SaveSlotSelectCallback; this.saveSlotSelectContainer.setVisible(true); - this.populateSessionSlots(); - this.setScrollCursor(0); - this.setCursor(0); + this.populateSessionSlots() + .then(() => { + this.setScrollCursor(0); + this.setCursor(0); + }); return true; } @@ -147,21 +150,28 @@ export default class SaveSlotSelectUiHandler extends MessageUiHandler { success = true; } } else { + const cursorPosition = this.cursor + this.scrollCursor; switch (button) { case Button.UP: if (this.cursor) { - success = this.setCursor(this.cursor - 1); + // Check to prevent cursor from accessing a negative index + success = (this.cursor === 0) ? this.setCursor(this.cursor) : this.setCursor(this.cursor - 1, cursorPosition); } else if (this.scrollCursor) { - success = this.setScrollCursor(this.scrollCursor - 1); + success = this.setScrollCursor(this.scrollCursor - 1, cursorPosition); } break; case Button.DOWN: if (this.cursor < 2) { - success = this.setCursor(this.cursor + 1); + success = this.setCursor(this.cursor + 1, this.cursor); } else if (this.scrollCursor < sessionSlotCount - 3) { - success = this.setScrollCursor(this.scrollCursor + 1); + success = this.setScrollCursor(this.scrollCursor + 1, cursorPosition); } break; + case Button.RIGHT: + if (this.sessionSlots[cursorPosition].hasData && this.sessionSlots[cursorPosition].saveData) { + this.scene.ui.setOverlayMode(Mode.RUN_INFO, this.sessionSlots[cursorPosition].saveData, RunDisplayMode.SESSION_PREVIEW); + success = true; + } } } @@ -174,10 +184,10 @@ export default class SaveSlotSelectUiHandler extends MessageUiHandler { return success || error; } - populateSessionSlots() { + async populateSessionSlots() { for (let s = 0; s < sessionSlotCount; s++) { const sessionSlot = new SessionSlot(this.scene, s); - sessionSlot.load(); + await sessionSlot.load(); this.scene.add.existing(sessionSlot); this.sessionSlotsContainer.add(sessionSlot); this.sessionSlots.push(sessionSlot); @@ -198,25 +208,74 @@ export default class SaveSlotSelectUiHandler extends MessageUiHandler { this.saveSlotSelectMessageBoxContainer.setVisible(!!text?.length); } - setCursor(cursor: integer): boolean { + /** + * setCursor takes user navigation as an input and positions the cursor accordingly + * @param cursor the index provided to the cursor + * @param prevCursor the previous index occupied by the cursor - optional + * @returns `true` if the cursor position has changed | `false` if it has not + */ + override setCursor(cursor: integer, prevCursor?: integer): boolean { const changed = super.setCursor(cursor); if (!this.cursorObj) { - this.cursorObj = this.scene.add.nineslice(0, 0, "select_cursor_highlight_thick", undefined, 296, 44, 6, 6, 6, 6); - this.cursorObj.setOrigin(0, 0); + this.cursorObj = this.scene.add.container(0, 0); + const cursorBox = this.scene.add.nineslice(0, 0, "select_cursor_highlight_thick", undefined, 296, 44, 6, 6, 6, 6); + const rightArrow = this.scene.add.image(0, 0, "cursor"); + rightArrow.setPosition(160, 0); + rightArrow.setName("rightArrow"); + this.cursorObj.add([ cursorBox, rightArrow ]); this.sessionSlotsContainer.add(this.cursorObj); } - this.cursorObj.setPosition(4, 4 + (cursor + this.scrollCursor) * 56); + const cursorPosition = cursor + this.scrollCursor; + const cursorIncrement = cursorPosition * 56; + if (this.sessionSlots[cursorPosition] && this.cursorObj) { + const hasData = this.sessionSlots[cursorPosition].hasData; + // If the session slot lacks session data, it does not move from its default, central position. + // Only session slots with session data will move leftwards and have a visible arrow. + if (!hasData) { + this.cursorObj.setPosition(151, 26 + cursorIncrement); + this.sessionSlots[cursorPosition].setPosition(0, cursorIncrement); + } else { + this.cursorObj.setPosition(145, 26 + cursorIncrement); + this.sessionSlots[cursorPosition].setPosition(-6, cursorIncrement); + } + this.setArrowVisibility(hasData); + } + if (!Utils.isNullOrUndefined(prevCursor)) { + this.revertSessionSlot(prevCursor); + } return changed; } - setScrollCursor(scrollCursor: integer): boolean { + /** + * Helper function that resets the session slot position to its default central position + * @param prevCursor the previous location of the cursor + */ + revertSessionSlot(prevCursor: integer): void { + const sessionSlot = this.sessionSlots[prevCursor]; + if (sessionSlot) { + sessionSlot.setPosition(0, prevCursor * 56); + } + } + + /** + * Helper function that checks if the session slot involved holds data or not + * @param hasData `true` if session slot contains data | 'false' if not + */ + setArrowVisibility(hasData: boolean): void { + if (this.cursorObj) { + const rightArrow = this.cursorObj?.getByName("rightArrow") as Phaser.GameObjects.Image; + rightArrow.setVisible(hasData); + } + } + + setScrollCursor(scrollCursor: integer, priorCursor?: integer): boolean { const changed = scrollCursor !== this.scrollCursor; if (changed) { this.scrollCursor = scrollCursor; - this.setCursor(this.cursor); + this.setCursor(this.cursor, priorCursor); this.scene.tweens.add({ targets: this.sessionSlotsContainer, y: this.sessionSlotsContainerInitialY - 56 * scrollCursor, @@ -254,6 +313,8 @@ class SessionSlot extends Phaser.GameObjects.Container { public hasData: boolean; private loadingLabel: Phaser.GameObjects.Text; + public saveData: SessionSaveData; + constructor(scene: BattleScene, slotId: integer) { super(scene, 0, slotId * 56); @@ -337,6 +398,7 @@ class SessionSlot extends Phaser.GameObjects.Container { return; } this.hasData = true; + this.saveData = sessionData; await this.setupWithData(sessionData); resolve(true); }); From f180b6070e8f61ca06fc50a12665bab961070653 Mon Sep 17 00:00:00 2001 From: flx-sta <50131232+flx-sta@users.noreply.github.com> Date: Wed, 9 Oct 2024 13:01:49 -0700 Subject: [PATCH 048/153] [Qol] Load i18n en locales during tests (#4553) * add: i18n backend support the backend is being supported by using msw which will import the correct file from the local locales folder * fix: tests to no longer rely on static i18n keys * Update src/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/test/ui/type-hints.test.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts Co-authored-by: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com> * Fix typos Co-authored-by: Adrian T. <68144167+torranx@users.noreply.github.com> * Fix linting * update locales submodule update reference to `56eeb809eb5a2de40cfc5bc6128a78bef14deea9` (from `3ccef8472dd7cc7c362538489954cb8fdad27e5f`) --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com> Co-authored-by: Adrian T. <68144167+torranx@users.noreply.github.com> --- global.d.ts | 14 +++ src/test/abilities/ability_timing.test.ts | 10 +- src/test/items/toxic_orb.test.ts | 15 ++- .../a-trainers-test-encounter.test.ts | 4 +- .../absolute-avarice-encounter.test.ts | 3 +- ...an-offer-you-cant-refuse-encounter.test.ts | 5 +- .../encounters/field-trip-encounter.test.ts | 32 +++---- .../fiery-fallout-encounter.test.ts | 3 +- .../encounters/lost-at-sea-encounter.test.ts | 5 +- .../teleporting-hijinks-encounter.test.ts | 33 +++---- .../phases/mystery-encounter-phase.test.ts | 7 +- src/test/system/game_data.test.ts | 5 +- src/test/ui/starter-select.test.ts | 91 ++++++++++--------- src/test/ui/type-hints.test.ts | 7 +- src/test/vitest.setup.ts | 58 +++++++----- 15 files changed, 166 insertions(+), 126 deletions(-) create mode 100644 global.d.ts diff --git a/global.d.ts b/global.d.ts new file mode 100644 index 00000000000..f4dfa7d4cb2 --- /dev/null +++ b/global.d.ts @@ -0,0 +1,14 @@ +import type { SetupServerApi } from "msw/node"; + +export {}; + +declare global { + /** + * Only used in testing. + * Can technically be undefined/null but for ease of use we are going to assume it is always defined. + * Used to load i18n files exclusively. + * + * To set up your own server in a test see `game_data.test.ts` + */ + var i18nServer: SetupServerApi; +} diff --git a/src/test/abilities/ability_timing.test.ts b/src/test/abilities/ability_timing.test.ts index 1472f9eb429..e3264c2c1a8 100644 --- a/src/test/abilities/ability_timing.test.ts +++ b/src/test/abilities/ability_timing.test.ts @@ -1,13 +1,13 @@ import { BattleStyle } from "#app/enums/battle-style"; import { CommandPhase } from "#app/phases/command-phase"; import { TurnInitPhase } from "#app/phases/turn-init-phase"; -import i18next, { initI18n } from "#app/plugins/i18n"; +import i18next from "#app/plugins/i18n"; import { Mode } from "#app/ui/ui"; import { Abilities } from "#enums/abilities"; import { Species } from "#enums/species"; import GameManager from "#test/utils/gameManager"; import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; describe("Ability Timing", () => { @@ -32,11 +32,10 @@ describe("Ability Timing", () => { .enemySpecies(Species.MAGIKARP) .enemyAbility(Abilities.INTIMIDATE) .ability(Abilities.BALL_FETCH); + vi.spyOn(i18next, "t"); }); it("should trigger after switch check", async () => { - initI18n(); - i18next.changeLanguage("en"); game.settings.battleStyle = BattleStyle.SWITCH; await game.classicMode.runToSummon([ Species.EEVEE, Species.FEEBAS ]); @@ -46,7 +45,6 @@ describe("Ability Timing", () => { }, () => game.isCurrentPhase(CommandPhase) || game.isCurrentPhase(TurnInitPhase)); await game.phaseInterceptor.to("MessagePhase"); - const message = game.textInterceptor.getLatestMessage(); - expect(message).toContain("battle:statFell"); + expect(i18next.t).toHaveBeenCalledWith("battle:statFell", expect.objectContaining({ count: 1 })); }, 5000); }); diff --git a/src/test/items/toxic_orb.test.ts b/src/test/items/toxic_orb.test.ts index 35d6e77b209..a83fd3655e5 100644 --- a/src/test/items/toxic_orb.test.ts +++ b/src/test/items/toxic_orb.test.ts @@ -2,13 +2,13 @@ import { StatusEffect } from "#app/data/status-effect"; import { EnemyCommandPhase } from "#app/phases/enemy-command-phase"; import { MessagePhase } from "#app/phases/message-phase"; import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import i18next, { initI18n } from "#app/plugins/i18n"; +import i18next from "#app/plugins/i18n"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/utils/gameManager"; import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; describe("Items - Toxic orb", () => { @@ -39,11 +39,11 @@ describe("Items - Toxic orb", () => { game.override.startingHeldItems([{ name: "TOXIC_ORB", }]); + + vi.spyOn(i18next, "t"); }); it("TOXIC ORB", async () => { - initI18n(); - i18next.changeLanguage("en"); const moveToUse = Moves.GROWTH; await game.startBattle([ Species.MIGHTYENA, @@ -57,11 +57,10 @@ describe("Items - Toxic orb", () => { await game.phaseInterceptor.runFrom(EnemyCommandPhase).to(TurnEndPhase); // Toxic orb should trigger here await game.phaseInterceptor.run(MessagePhase); - const message = game.textInterceptor.getLatestMessage(); - expect(message).toContain("statusEffect:toxic.obtainSource"); + expect(i18next.t).toHaveBeenCalledWith("statusEffect:toxic.obtainSource", expect.anything()); + await game.phaseInterceptor.run(MessagePhase); - const message2 = game.textInterceptor.getLatestMessage(); - expect(message2).toBe("statusEffect:toxic.activation"); + expect(i18next.t).toHaveBeenCalledWith("statusEffect:toxic.activation", expect.anything()); expect(game.scene.getParty()[0].status!.effect).toBe(StatusEffect.TOXIC); }, 20000); }); diff --git a/src/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts b/src/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts index f24800eaa71..b1aa378d82a 100644 --- a/src/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts @@ -16,6 +16,7 @@ import { EggTier } from "#enums/egg-type"; import { CommandPhase } from "#app/phases/command-phase"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import { PartyHealPhase } from "#app/phases/party-heal-phase"; +import i18next from "i18next"; const namespace = "mysteryEncounters/aTrainersTest"; const defaultParty = [ Species.LAPRAS, Species.GENGAR, Species.ABRA ]; @@ -106,7 +107,8 @@ describe("A Trainer's Test - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyField.length).toBe(1); expect(scene.currentBattle.trainer).toBeDefined(); - expect([ "trainerNames:buck", "trainerNames:cheryl", "trainerNames:marley", "trainerNames:mira", "trainerNames:riley" ].includes(scene.currentBattle.trainer!.config.name)).toBeTruthy(); + expect([ i18next.t("trainerNames:buck"), i18next.t("trainerNames:cheryl"), i18next.t("trainerNames:marley"), i18next.t("trainerNames:mira"), i18next.t("trainerNames:riley") ] + .map(name => name.toLowerCase()).includes(scene.currentBattle.trainer!.config.name)).toBeTruthy(); expect(enemyField[0]).toBeDefined(); }); diff --git a/src/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts b/src/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts index 99a835cb6ae..a72a9fbb5a3 100644 --- a/src/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts @@ -16,6 +16,7 @@ import { Moves } from "#enums/moves"; import { CommandPhase } from "#app/phases/command-phase"; import { MovePhase } from "#app/phases/move-phase"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; +import i18next from "i18next"; const namespace = "mysteryEncounters/absoluteAvarice"; const defaultParty = [ Species.LAPRAS, Species.GENGAR, Species.ABRA ]; @@ -146,7 +147,7 @@ describe("Absolute Avarice - Mystery Encounter", () => { const pokemonId = partyPokemon.id; const pokemonItems = scene.findModifiers(m => m instanceof PokemonHeldItemModifier && (m as PokemonHeldItemModifier).pokemonId === pokemonId, true) as PokemonHeldItemModifier[]; - const revSeed = pokemonItems.find(i => i.type.name === "modifierType:ModifierType.REVIVER_SEED.name"); + const revSeed = pokemonItems.find(i => i.type.name === i18next.t("modifierType:ModifierType.REVIVER_SEED.name")); expect(revSeed).toBeDefined; expect(revSeed?.stackCount).toBe(1); } diff --git a/src/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts b/src/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts index 77d5a842b47..9883b4332b9 100644 --- a/src/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts @@ -17,6 +17,7 @@ import { getPokemonSpecies } from "#app/data/pokemon-species"; import { Moves } from "#enums/moves"; import { ShinyRateBoosterModifier } from "#app/modifier/modifier"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; +import i18next from "i18next"; const namespace = "mysteryEncounters/anOfferYouCantRefuse"; /** Gyarados for Indimidate */ @@ -93,8 +94,8 @@ describe("An Offer You Can't Refuse - Mystery Encounter", () => { expect(AnOfferYouCantRefuseEncounter.dialogueTokens?.strongestPokemon).toBeDefined(); expect(AnOfferYouCantRefuseEncounter.dialogueTokens?.price).toBeDefined(); - expect(AnOfferYouCantRefuseEncounter.dialogueTokens?.option2PrimaryAbility).toBe("ability:intimidate.name"); - expect(AnOfferYouCantRefuseEncounter.dialogueTokens?.moveOrAbility).toBe("ability:intimidate.name"); + expect(AnOfferYouCantRefuseEncounter.dialogueTokens?.option2PrimaryAbility).toBe(i18next.t("ability:intimidate.name")); + expect(AnOfferYouCantRefuseEncounter.dialogueTokens?.moveOrAbility).toBe(i18next.t("ability:intimidate.name")); expect(AnOfferYouCantRefuseEncounter.misc.pokemon instanceof PlayerPokemon).toBeTruthy(); expect(AnOfferYouCantRefuseEncounter.misc?.price?.toString()).toBe(AnOfferYouCantRefuseEncounter.dialogueTokens?.price); expect(onInitResult).toBe(true); diff --git a/src/test/mystery-encounter/encounters/field-trip-encounter.test.ts b/src/test/mystery-encounter/encounters/field-trip-encounter.test.ts index 232bad3c2b8..a6f925274c3 100644 --- a/src/test/mystery-encounter/encounters/field-trip-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/field-trip-encounter.test.ts @@ -103,11 +103,11 @@ describe("Field Trip - Mystery Encounter", () => { expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find(h => h instanceof ModifierSelectUiHandler) as ModifierSelectUiHandler; expect(modifierSelectHandler.options.length).toEqual(5); - expect(modifierSelectHandler.options[0].modifierTypeOption.type.name).toBe("modifierType:TempStatStageBoosterItem.x_attack"); - expect(modifierSelectHandler.options[1].modifierTypeOption.type.name).toBe("modifierType:TempStatStageBoosterItem.x_defense"); - expect(modifierSelectHandler.options[2].modifierTypeOption.type.name).toBe("modifierType:TempStatStageBoosterItem.x_speed"); - expect(modifierSelectHandler.options[3].modifierTypeOption.type.name).toBe("modifierType:ModifierType.DIRE_HIT.name"); - expect(modifierSelectHandler.options[4].modifierTypeOption.type.name).toBe("modifierType:ModifierType.RARER_CANDY.name"); + expect(modifierSelectHandler.options[0].modifierTypeOption.type.name).toBe(i18next.t("modifierType:TempStatStageBoosterItem.x_attack")); + expect(modifierSelectHandler.options[1].modifierTypeOption.type.name).toBe(i18next.t("modifierType:TempStatStageBoosterItem.x_defense")); + expect(modifierSelectHandler.options[2].modifierTypeOption.type.name).toBe(i18next.t("modifierType:TempStatStageBoosterItem.x_speed")); + expect(modifierSelectHandler.options[3].modifierTypeOption.type.name).toBe(i18next.t("modifierType:ModifierType.DIRE_HIT.name")); + expect(modifierSelectHandler.options[4].modifierTypeOption.type.name).toBe(i18next.t("modifierType:ModifierType.RARER_CANDY.name")); }); it("should leave encounter without battle", async () => { @@ -150,11 +150,11 @@ describe("Field Trip - Mystery Encounter", () => { expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find(h => h instanceof ModifierSelectUiHandler) as ModifierSelectUiHandler; expect(modifierSelectHandler.options.length).toEqual(5); - expect(modifierSelectHandler.options[0].modifierTypeOption.type.name).toBe("modifierType:TempStatStageBoosterItem.x_sp_atk"); - expect(modifierSelectHandler.options[1].modifierTypeOption.type.name).toBe("modifierType:TempStatStageBoosterItem.x_sp_def"); - expect(modifierSelectHandler.options[2].modifierTypeOption.type.name).toBe("modifierType:TempStatStageBoosterItem.x_speed"); - expect(modifierSelectHandler.options[3].modifierTypeOption.type.name).toBe("modifierType:ModifierType.DIRE_HIT.name"); - expect(modifierSelectHandler.options[4].modifierTypeOption.type.name).toBe("modifierType:ModifierType.RARER_CANDY.name"); + expect(modifierSelectHandler.options[0].modifierTypeOption.type.name).toBe(i18next.t("modifierType:TempStatStageBoosterItem.x_sp_atk")); + expect(modifierSelectHandler.options[1].modifierTypeOption.type.name).toBe(i18next.t("modifierType:TempStatStageBoosterItem.x_sp_def")); + expect(modifierSelectHandler.options[2].modifierTypeOption.type.name).toBe(i18next.t("modifierType:TempStatStageBoosterItem.x_speed")); + expect(modifierSelectHandler.options[3].modifierTypeOption.type.name).toBe(i18next.t("modifierType:ModifierType.DIRE_HIT.name")); + expect(modifierSelectHandler.options[4].modifierTypeOption.type.name).toBe(i18next.t("modifierType:ModifierType.RARER_CANDY.name")); }); it("should leave encounter without battle", async () => { @@ -198,12 +198,12 @@ describe("Field Trip - Mystery Encounter", () => { expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find(h => h instanceof ModifierSelectUiHandler) as ModifierSelectUiHandler; expect(modifierSelectHandler.options.length).toEqual(5); - expect(modifierSelectHandler.options[0].modifierTypeOption.type.name).toBe("modifierType:TempStatStageBoosterItem.x_accuracy"); - expect(modifierSelectHandler.options[1].modifierTypeOption.type.name).toBe("modifierType:TempStatStageBoosterItem.x_speed"); - expect(modifierSelectHandler.options[2].modifierTypeOption.type.name).toBe("modifierType:ModifierType.AddPokeballModifierType.name"); - expect(i18next.t).toHaveBeenCalledWith("modifierType:ModifierType.AddPokeballModifierType.name", expect.objectContaining({ modifierCount: 5 })); - expect(modifierSelectHandler.options[3].modifierTypeOption.type.name).toBe("modifierType:ModifierType.IV_SCANNER.name"); - expect(modifierSelectHandler.options[4].modifierTypeOption.type.name).toBe("modifierType:ModifierType.RARER_CANDY.name"); + expect(modifierSelectHandler.options[0].modifierTypeOption.type.name).toBe(i18next.t("modifierType:TempStatStageBoosterItem.x_accuracy")); + expect(modifierSelectHandler.options[1].modifierTypeOption.type.name).toBe(i18next.t("modifierType:TempStatStageBoosterItem.x_speed")); + expect(modifierSelectHandler.options[2].modifierTypeOption.type.name).toBe(i18next.t("modifierType:ModifierType.AddPokeballModifierType.name", { modifierCount: 5, pokeballName: i18next.t("pokeball:greatBall") })); + expect(i18next.t).toHaveBeenCalledWith(("modifierType:ModifierType.AddPokeballModifierType.name"), expect.objectContaining({ modifierCount: 5 })); + expect(modifierSelectHandler.options[3].modifierTypeOption.type.name).toBe(i18next.t("modifierType:ModifierType.IV_SCANNER.name")); + expect(modifierSelectHandler.options[4].modifierTypeOption.type.name).toBe(i18next.t("modifierType:ModifierType.RARER_CANDY.name")); }); it("should leave encounter without battle", async () => { diff --git a/src/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts b/src/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts index 3d2533c0817..a4f303d121f 100644 --- a/src/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts @@ -22,6 +22,7 @@ import { initSceneWithoutEncounterPhase } from "#test/utils/gameManagerUtils"; import { CommandPhase } from "#app/phases/command-phase"; import { MovePhase } from "#app/phases/move-phase"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; +import i18next from "i18next"; const namespace = "mysteryEncounters/fieryFallout"; /** Arcanine and Ninetails for 2 Fire types. Lapras, Gengar, Abra for burnable mon. */ @@ -205,7 +206,7 @@ describe("Fiery Fallout - Mystery Encounter", () => { const burnablePokemon = party.filter((pkm) => pkm.isAllowedInBattle() && !pkm.getTypes().includes(Type.FIRE)); const notBurnablePokemon = party.filter((pkm) => !pkm.isAllowedInBattle() || pkm.getTypes().includes(Type.FIRE)); - expect(scene.currentBattle.mysteryEncounter?.dialogueTokens["burnedPokemon"]).toBe("pokemon:gengar"); + expect(scene.currentBattle.mysteryEncounter?.dialogueTokens["burnedPokemon"]).toBe(i18next.t("pokemon:gengar")); burnablePokemon.forEach((pkm) => { expect(pkm.hp, `${pkm.name} should have received 20% damage: ${pkm.hp} / ${pkm.getMaxHp()} HP`).toBe(pkm.getMaxHp() - Math.floor(pkm.getMaxHp() * 0.2)); }); diff --git a/src/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts b/src/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts index 456c18c572d..dec14d46cc8 100644 --- a/src/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/lost-at-sea-encounter.test.ts @@ -14,6 +14,7 @@ import { initSceneWithoutEncounterPhase } from "#test/utils/gameManagerUtils"; import BattleScene from "#app/battle-scene"; import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; import { PartyExpPhase } from "#app/phases/party-exp-phase"; +import i18next from "i18next"; const namespace = "mysteryEncounters/lostAtSea"; @@ -86,8 +87,8 @@ describe("Lost at Sea - Mystery Encounter", () => { const onInitResult = onInit!(scene); expect(LostAtSeaEncounter.dialogueTokens?.damagePercentage).toBe("25"); - expect(LostAtSeaEncounter.dialogueTokens?.option1RequiredMove).toBe("move:surf.name"); - expect(LostAtSeaEncounter.dialogueTokens?.option2RequiredMove).toBe("move:fly.name"); + expect(LostAtSeaEncounter.dialogueTokens?.option1RequiredMove).toBe(i18next.t("move:surf.name")); + expect(LostAtSeaEncounter.dialogueTokens?.option2RequiredMove).toBe(i18next.t("move:fly.name")); expect(onInitResult).toBe(true); }); diff --git a/src/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts b/src/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts index 2411752baa7..02375d83b98 100644 --- a/src/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/teleporting-hijinks-encounter.test.ts @@ -1,21 +1,22 @@ -import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; -import { Biome } from "#app/enums/biome"; -import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; -import { Species } from "#app/enums/species"; -import GameManager from "#app/test/utils/gameManager"; -import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import { runMysteryEncounterToEnd, runSelectMysteryEncounterOption, skipBattleRunMysteryEncounterRewardsPhase } from "#test/mystery-encounter/encounter-test-utils"; import BattleScene from "#app/battle-scene"; +import { TeleportingHijinksEncounter } from "#app/data/mystery-encounters/encounters/teleporting-hijinks-encounter"; +import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; +import { Abilities } from "#enums/abilities"; +import { Biome } from "#enums/biome"; +import { MysteryEncounterType } from "#enums/mystery-encounter-type"; +import { Species } from "#enums/species"; +import { CommandPhase } from "#app/phases/command-phase"; +import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; +import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; +import GameManager from "#test/utils/gameManager"; +import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; +import { Mode } from "#app/ui/ui"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; +import { runMysteryEncounterToEnd, runSelectMysteryEncounterOption, skipBattleRunMysteryEncounterRewardsPhase } from "#test/mystery-encounter/encounter-test-utils"; import { initSceneWithoutEncounterPhase } from "#test/utils/gameManagerUtils"; -import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; -import { CommandPhase } from "#app/phases/command-phase"; -import { TeleportingHijinksEncounter } from "#app/data/mystery-encounters/encounters/teleporting-hijinks-encounter"; -import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; -import { Mode } from "#app/ui/ui"; -import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; -import { Abilities } from "#app/enums/abilities"; +import i18next from "i18next"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; const namespace = "mysteryEncounters/teleportingHijinks"; const defaultParty = [ Species.LAPRAS, Species.GENGAR, Species.ABRA ]; @@ -300,8 +301,8 @@ describe("Teleporting Hijinks - Mystery Encounter", () => { expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find(h => h instanceof ModifierSelectUiHandler) as ModifierSelectUiHandler; - expect(modifierSelectHandler.options.some(opt => opt.modifierTypeOption.type.name === "modifierType:AttackTypeBoosterItem.metal_coat")).toBe(true); - expect(modifierSelectHandler.options.some(opt => opt.modifierTypeOption.type.name === "modifierType:AttackTypeBoosterItem.magnet")).toBe(true); + expect(modifierSelectHandler.options.some(opt => opt.modifierTypeOption.type.name === i18next.t("modifierType:AttackTypeBoosterItem.metal_coat"))).toBe(true); + expect(modifierSelectHandler.options.some(opt => opt.modifierTypeOption.type.name === i18next.t("modifierType:AttackTypeBoosterItem.magnet"))).toBe(true); }); }); }); diff --git a/src/test/phases/mystery-encounter-phase.test.ts b/src/test/phases/mystery-encounter-phase.test.ts index 4468045756b..32e31ce1c94 100644 --- a/src/test/phases/mystery-encounter-phase.test.ts +++ b/src/test/phases/mystery-encounter-phase.test.ts @@ -9,6 +9,7 @@ import MysteryEncounterUiHandler from "#app/ui/mystery-encounter-ui-handler"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import MessageUiHandler from "#app/ui/message-ui-handler"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; +import i18next from "i18next"; describe("Mystery Encounter Phases", () => { let phaserGame: Phaser.Game; @@ -78,9 +79,9 @@ describe("Mystery Encounter Phases", () => { expect(ui.getMode()).toBe(Mode.MESSAGE); expect(ui.showDialogue).toHaveBeenCalledTimes(1); expect(ui.showText).toHaveBeenCalledTimes(2); - expect(ui.showDialogue).toHaveBeenCalledWith("battle:mysteryEncounterAppeared", "???", null, expect.any(Function)); - expect(ui.showText).toHaveBeenCalledWith("mysteryEncounters/mysteriousChallengers:intro", null, expect.any(Function), 750, true); - expect(ui.showText).toHaveBeenCalledWith("mysteryEncounters/mysteriousChallengers:option.selected", null, expect.any(Function), 300, true); + expect(ui.showDialogue).toHaveBeenCalledWith(i18next.t("battle:mysteryEncounterAppeared"), "???", null, expect.any(Function)); + expect(ui.showText).toHaveBeenCalledWith(i18next.t("mysteryEncounters/mysteriousChallengers:intro"), null, expect.any(Function), 750, true); + expect(ui.showText).toHaveBeenCalledWith(i18next.t("mysteryEncounters/mysteriousChallengers:option.selected"), null, expect.any(Function), 300, true); }); }); diff --git a/src/test/system/game_data.test.ts b/src/test/system/game_data.test.ts index 5eb4dea3910..fcb7e9067a3 100644 --- a/src/test/system/game_data.test.ts +++ b/src/test/system/game_data.test.ts @@ -11,13 +11,15 @@ import * as account from "../../account"; const apiBase = import.meta.env.VITE_API_BASE_URL ?? "http://localhost:8001"; -export const server = setupServer(); +/** We need a custom server. For some reasons I can't extend the listeners of {@linkcode global.i18nServer} with {@linkcode global.i18nServer.use} */ +const server = setupServer(); describe("System - Game Data", () => { let phaserGame: Phaser.Game; let game: GameManager; beforeAll(() => { + global.i18nServer.close(); server.listen(); phaserGame = new Phaser.Game({ type: Phaser.HEADLESS, @@ -26,6 +28,7 @@ describe("System - Game Data", () => { afterAll(() => { server.close(); + global.i18nServer.listen(); }); beforeEach(() => { diff --git a/src/test/ui/starter-select.test.ts b/src/test/ui/starter-select.test.ts index dd0761be392..94370ca1b74 100644 --- a/src/test/ui/starter-select.test.ts +++ b/src/test/ui/starter-select.test.ts @@ -14,6 +14,7 @@ import { Abilities } from "#enums/abilities"; import { Button } from "#enums/buttons"; import { Species } from "#enums/species"; import GameManager from "#test/utils/gameManager"; +import i18next from "i18next"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -66,11 +67,11 @@ describe("UI - Starter select", () => { resolve(); }); }); - expect(options.some(option => option.label === "starterSelectUiHandler:addToParty")).toBe(true); - expect(options.some(option => option.label === "starterSelectUiHandler:toggleIVs")).toBe(true); - expect(options.some(option => option.label === "starterSelectUiHandler:manageMoves")).toBe(true); - expect(options.some(option => option.label === "starterSelectUiHandler:useCandies")).toBe(true); - expect(options.some(option => option.label === "menu:cancel")).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:addToParty"))).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:toggleIVs"))).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:manageMoves"))).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:useCandies"))).toBe(true); + expect(options.some(option => option.label === i18next.t("menu:cancel"))).toBe(true); optionSelectUiHandler?.processInput(Button.ACTION); await new Promise((resolve) => { @@ -127,11 +128,11 @@ describe("UI - Starter select", () => { resolve(); }); }); - expect(options.some(option => option.label === "starterSelectUiHandler:addToParty")).toBe(true); - expect(options.some(option => option.label === "starterSelectUiHandler:toggleIVs")).toBe(true); - expect(options.some(option => option.label === "starterSelectUiHandler:manageMoves")).toBe(true); - expect(options.some(option => option.label === "starterSelectUiHandler:useCandies")).toBe(true); - expect(options.some(option => option.label === "menu:cancel")).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:addToParty"))).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:toggleIVs"))).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:manageMoves"))).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:useCandies"))).toBe(true); + expect(options.some(option => option.label === i18next.t("menu:cancel"))).toBe(true); optionSelectUiHandler?.processInput(Button.ACTION); await new Promise((resolve) => { @@ -191,11 +192,11 @@ describe("UI - Starter select", () => { resolve(); }); }); - expect(options.some(option => option.label === "starterSelectUiHandler:addToParty")).toBe(true); - expect(options.some(option => option.label === "starterSelectUiHandler:toggleIVs")).toBe(true); - expect(options.some(option => option.label === "starterSelectUiHandler:manageMoves")).toBe(true); - expect(options.some(option => option.label === "starterSelectUiHandler:useCandies")).toBe(true); - expect(options.some(option => option.label === "menu:cancel")).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:addToParty"))).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:toggleIVs"))).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:manageMoves"))).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:useCandies"))).toBe(true); + expect(options.some(option => option.label === i18next.t("menu:cancel"))).toBe(true); optionSelectUiHandler?.processInput(Button.ACTION); await new Promise((resolve) => { @@ -254,11 +255,11 @@ describe("UI - Starter select", () => { resolve(); }); }); - expect(options.some(option => option.label === "starterSelectUiHandler:addToParty")).toBe(true); - expect(options.some(option => option.label === "starterSelectUiHandler:toggleIVs")).toBe(true); - expect(options.some(option => option.label === "starterSelectUiHandler:manageMoves")).toBe(true); - expect(options.some(option => option.label === "starterSelectUiHandler:useCandies")).toBe(true); - expect(options.some(option => option.label === "menu:cancel")).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:addToParty"))).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:toggleIVs"))).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:manageMoves"))).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:useCandies"))).toBe(true); + expect(options.some(option => option.label === i18next.t("menu:cancel"))).toBe(true); optionSelectUiHandler?.processInput(Button.ACTION); await new Promise((resolve) => { @@ -315,11 +316,11 @@ describe("UI - Starter select", () => { resolve(); }); }); - expect(options.some(option => option.label === "starterSelectUiHandler:addToParty")).toBe(true); - expect(options.some(option => option.label === "starterSelectUiHandler:toggleIVs")).toBe(true); - expect(options.some(option => option.label === "starterSelectUiHandler:manageMoves")).toBe(true); - expect(options.some(option => option.label === "starterSelectUiHandler:useCandies")).toBe(true); - expect(options.some(option => option.label === "menu:cancel")).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:addToParty"))).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:toggleIVs"))).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:manageMoves"))).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:useCandies"))).toBe(true); + expect(options.some(option => option.label === i18next.t("menu:cancel"))).toBe(true); optionSelectUiHandler?.processInput(Button.ACTION); await new Promise((resolve) => { @@ -376,11 +377,11 @@ describe("UI - Starter select", () => { resolve(); }); }); - expect(options.some(option => option.label === "starterSelectUiHandler:addToParty")).toBe(true); - expect(options.some(option => option.label === "starterSelectUiHandler:toggleIVs")).toBe(true); - expect(options.some(option => option.label === "starterSelectUiHandler:manageMoves")).toBe(true); - expect(options.some(option => option.label === "starterSelectUiHandler:useCandies")).toBe(true); - expect(options.some(option => option.label === "menu:cancel")).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:addToParty"))).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:toggleIVs"))).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:manageMoves"))).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:useCandies"))).toBe(true); + expect(options.some(option => option.label === i18next.t("menu:cancel"))).toBe(true); optionSelectUiHandler?.processInput(Button.ACTION); await new Promise((resolve) => { @@ -436,11 +437,11 @@ describe("UI - Starter select", () => { resolve(); }); }); - expect(options.some(option => option.label === "starterSelectUiHandler:addToParty")).toBe(true); - expect(options.some(option => option.label === "starterSelectUiHandler:toggleIVs")).toBe(true); - expect(options.some(option => option.label === "starterSelectUiHandler:manageMoves")).toBe(true); - expect(options.some(option => option.label === "starterSelectUiHandler:useCandies")).toBe(true); - expect(options.some(option => option.label === "menu:cancel")).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:addToParty"))).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:toggleIVs"))).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:manageMoves"))).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:useCandies"))).toBe(true); + expect(options.some(option => option.label === i18next.t("menu:cancel"))).toBe(true); optionSelectUiHandler?.processInput(Button.ACTION); await new Promise((resolve) => { @@ -496,11 +497,11 @@ describe("UI - Starter select", () => { resolve(); }); }); - expect(options.some(option => option.label === "starterSelectUiHandler:addToParty")).toBe(true); - expect(options.some(option => option.label === "starterSelectUiHandler:toggleIVs")).toBe(true); - expect(options.some(option => option.label === "starterSelectUiHandler:manageMoves")).toBe(true); - expect(options.some(option => option.label === "starterSelectUiHandler:useCandies")).toBe(true); - expect(options.some(option => option.label === "menu:cancel")).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:addToParty"))).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:toggleIVs"))).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:manageMoves"))).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:useCandies"))).toBe(true); + expect(options.some(option => option.label === i18next.t("menu:cancel"))).toBe(true); optionSelectUiHandler?.processInput(Button.ACTION); let starterSelectUiHandler: StarterSelectUiHandler; @@ -561,11 +562,11 @@ describe("UI - Starter select", () => { resolve(); }); }); - expect(options.some(option => option.label === "starterSelectUiHandler:addToParty")).toBe(true); - expect(options.some(option => option.label === "starterSelectUiHandler:toggleIVs")).toBe(true); - expect(options.some(option => option.label === "starterSelectUiHandler:manageMoves")).toBe(true); - expect(options.some(option => option.label === "starterSelectUiHandler:useCandies")).toBe(true); - expect(options.some(option => option.label === "menu:cancel")).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:addToParty"))).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:toggleIVs"))).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:manageMoves"))).toBe(true); + expect(options.some(option => option.label === i18next.t("starterSelectUiHandler:useCandies"))).toBe(true); + expect(options.some(option => option.label === i18next.t("menu:cancel"))).toBe(true); optionSelectUiHandler?.processInput(Button.ACTION); let starterSelectUiHandler: StarterSelectUiHandler | undefined; diff --git a/src/test/ui/type-hints.test.ts b/src/test/ui/type-hints.test.ts index 450f43f1263..2977262dda7 100644 --- a/src/test/ui/type-hints.test.ts +++ b/src/test/ui/type-hints.test.ts @@ -7,7 +7,8 @@ import { Mode } from "#app/ui/ui"; import GameManager from "#test/utils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; -import MockText from "../utils/mocks/mocksContainer/mockText"; +import MockText from "#test/utils/mocks/mocksContainer/mockText"; +import i18next from "i18next"; describe("UI - Type Hints", () => { let phaserGame: Phaser.Game; @@ -53,7 +54,7 @@ describe("UI - Type Hints", () => { const movesContainer = ui.getByName(FightUiHandler.MOVES_CONTAINER_NAME); const dragonClawText = movesContainer .getAll() - .find((text) => text.text === "move:dragonClaw.name")! as unknown as MockText; + .find((text) => text.text === i18next.t("move:dragonClaw.name"))! as unknown as MockText; expect.soft(dragonClawText.color).toBe("#929292"); ui.getHandler().processInput(Button.ACTION); @@ -78,7 +79,7 @@ describe("UI - Type Hints", () => { const movesContainer = ui.getByName(FightUiHandler.MOVES_CONTAINER_NAME); const growlText = movesContainer .getAll() - .find((text) => text.text === "move:growl.name")! as unknown as MockText; + .find((text) => text.text === i18next.t("move:growl.name"))! as unknown as MockText; expect.soft(growlText.color).toBe(undefined); ui.getHandler().processInput(Button.ACTION); diff --git a/src/test/vitest.setup.ts b/src/test/vitest.setup.ts index 0d67d6787c4..8438f607db2 100644 --- a/src/test/vitest.setup.ts +++ b/src/test/vitest.setup.ts @@ -4,16 +4,17 @@ import { initLoggedInUser } from "#app/account"; import { initAbilities } from "#app/data/ability"; import { initBiomes } from "#app/data/balance/biomes"; import { initEggMoves } from "#app/data/balance/egg-moves"; +import { initPokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; import { initMoves } from "#app/data/move"; import { initMysteryEncounters } from "#app/data/mystery-encounters/mystery-encounters"; -import { initPokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; import { initPokemonForms } from "#app/data/pokemon-forms"; import { initSpecies } from "#app/data/pokemon-species"; import { initAchievements } from "#app/system/achv"; import { initVouchers } from "#app/system/voucher"; import { initStatsKeys } from "#app/ui/game-stats-ui-handler"; -import { beforeAll, vi } from "vitest"; +import { afterAll, beforeAll, vi } from "vitest"; +/** Set the timezone to UTC for tests. */ process.env.TZ = "UTC"; /** Mock the override import to always return default values, ignoring any custom overrides. */ @@ -26,26 +27,36 @@ vi.mock("#app/overrides", async (importOriginal) => { } satisfies typeof import("#app/overrides"); }); -vi.mock("i18next", () => ({ - default: { - use: () => {}, - t: (key: string) => key, - changeLanguage: () => Promise.resolve(), - init: () => Promise.resolve(), - resolvedLanguage: "en", - exists: () => true, - getDataByLanguage:() => ({ - en: { - keys: [ "foo" ] - }, - }), - services: { - formatter: { - add: () => {}, +/** + * This is a hacky way to mock the i18n backend requests (with the help of {@link https://mswjs.io/ | msw}). + * The reason to put it inside of a mock is to elevate it. + * This is necessary because how our code is structured. + * Do NOT try to put any of this code into external functions, it won't work as it's elevated during runtime. + */ +vi.mock("i18next", async (importOriginal) => { + console.log("Mocking i18next"); + const { setupServer } = await import("msw/node"); + const { http, HttpResponse } = await import("msw"); + + global.i18nServer = setupServer( + http.get("/locales/en/*", async (req) => { + const filename = req.params[0]; + + try { + const json = await import(`../../public/locales/en/${req.params[0]}`); + console.log("Loaded locale", filename); + return HttpResponse.json(json); + } catch (err) { + console.log(`Failed to load locale ${filename}!`, err); + return HttpResponse.json({}); } - }, - }, -})); + }) + ); + global.i18nServer.listen({ onUnhandledRequest: "error" }); + console.log("i18n MSW server listening!"); + + return await importOriginal(); +}); initVouchers(); initAchievements(); @@ -70,3 +81,8 @@ beforeAll(() => { }, }); }); + +afterAll(() => { + global.i18nServer.close(); + console.log("Closing i18n MSW server!"); +}); From ca3cc3c9c6a569572942516f72edd8610c76b6c5 Mon Sep 17 00:00:00 2001 From: PigeonBar <56974298+PigeonBar@users.noreply.github.com> Date: Thu, 10 Oct 2024 11:28:26 -0400 Subject: [PATCH 049/153] [P1 Bug] Fix infinite recursion from abilities disabled by Sheer Force (#4631) --- src/field/pokemon.ts | 4 ++-- src/test/abilities/sheer_force.test.ts | 27 ++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 241524df1b9..35f389b58a4 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1417,10 +1417,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @returns {boolean} Whether the ability is present and active */ hasAbility(ability: Abilities, canApply: boolean = true, ignoreOverride?: boolean): boolean { - if ((!canApply || this.canApplyAbility()) && this.getAbility(ignoreOverride).id === ability) { + if (this.getAbility(ignoreOverride).id === ability && (!canApply || this.canApplyAbility())) { return true; } - if (this.hasPassive() && (!canApply || this.canApplyAbility(true)) && this.getPassiveAbility().id === ability) { + if (this.getPassiveAbility().id === ability && this.hasPassive() && (!canApply || this.canApplyAbility(true))) { return true; } return false; diff --git a/src/test/abilities/sheer_force.test.ts b/src/test/abilities/sheer_force.test.ts index a3add0a9964..a2600476d6d 100644 --- a/src/test/abilities/sheer_force.test.ts +++ b/src/test/abilities/sheer_force.test.ts @@ -9,6 +9,7 @@ import { Species } from "#enums/species"; import GameManager from "#test/utils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import { allMoves } from "#app/data/move"; describe("Abilities - Sheer Force", () => { @@ -174,5 +175,31 @@ describe("Abilities - Sheer Force", () => { }, 20000); + it("Two Pokemon with abilities disabled by Sheer Force hitting each other should not cause a crash", async () => { + const moveToUse = Moves.CRUNCH; + game.override.enemyAbility(Abilities.COLOR_CHANGE) + .ability(Abilities.COLOR_CHANGE) + .moveset(moveToUse) + .enemyMoveset(moveToUse); + + await game.classicMode.startBattle([ + Species.PIDGEOT + ]); + + const pidgeot = game.scene.getParty()[0]; + const onix = game.scene.getEnemyParty()[0]; + + pidgeot.stats[Stat.DEF] = 10000; + onix.stats[Stat.DEF] = 10000; + + game.move.select(moveToUse); + await game.toNextTurn(); + + // Check that both Pokemon's Color Change activated + const expectedTypes = [ allMoves[moveToUse].type ]; + expect(pidgeot.getTypes()).toStrictEqual(expectedTypes); + expect(onix.getTypes()).toStrictEqual(expectedTypes); + }); + //TODO King's Rock Interaction Unit Test }); From 52257def2fa65aa09018800b29e89864572fc8b0 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Thu, 10 Oct 2024 08:30:19 -0700 Subject: [PATCH 050/153] [P3] Fix enemy used PP flyout, fixes #4622 (#4629) Also add missing function return types --- src/phases/move-phase.ts | 41 ++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index 10cc062ea3b..94093188571 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -8,10 +8,6 @@ import { SpeciesFormChangePreMoveTrigger } from "#app/data/pokemon-forms"; import { getStatusEffectActivationText, getStatusEffectHealText } from "#app/data/status-effect"; import { Type } from "#app/data/type"; import { getTerrainBlockMessage } from "#app/data/weather"; -import { Abilities } from "#app/enums/abilities"; -import { BattlerTagType } from "#app/enums/battler-tag-type"; -import { Moves } from "#app/enums/moves"; -import { StatusEffect } from "#app/enums/status-effect"; import { MoveUsedEvent } from "#app/events/battle-scene"; import Pokemon, { MoveResult, PokemonMove, TurnMove } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; @@ -20,7 +16,11 @@ import { CommonAnimPhase } from "#app/phases/common-anim-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; import { ShowAbilityPhase } from "#app/phases/show-ability-phase"; -import * as Utils from "#app/utils"; +import { BooleanHolder, NumberHolder } from "#app/utils"; +import { Abilities } from "#enums/abilities"; +import { BattlerTagType } from "#enums/battler-tag-type"; +import { Moves } from "#enums/moves"; +import { StatusEffect } from "#enums/status-effect"; import i18next from "i18next"; export class MovePhase extends BattlePhase { @@ -89,7 +89,7 @@ export class MovePhase extends BattlePhase { this.cancelled = true; } - public start() { + public start(): void { super.start(); console.log(Moves[this.move.moveId]); @@ -140,7 +140,7 @@ export class MovePhase extends BattlePhase { } /** Check for cancellation edge cases - no targets remaining, or {@linkcode Moves.NONE} is in the queue */ - protected resolveFinalPreMoveCancellationChecks() { + protected resolveFinalPreMoveCancellationChecks(): void { const targets = this.getActiveTargetPokemon(); const moveQueue = this.pokemon.getMoveQueue(); @@ -150,14 +150,14 @@ export class MovePhase extends BattlePhase { } } - public getActiveTargetPokemon() { + public getActiveTargetPokemon(): Pokemon[] { return this.scene.getField(true).filter(p => this.targets.includes(p.getBattlerIndex())); } /** * Handles {@link StatusEffect.SLEEP Sleep}/{@link StatusEffect.PARALYSIS Paralysis}/{@link StatusEffect.FREEZE Freeze} rolls and side effects. */ - protected resolvePreMoveStatusEffects() { + protected resolvePreMoveStatusEffects(): void { if (!this.followUp && this.pokemon.status && !this.pokemon.status.isPostTurn()) { this.pokemon.status.incrementTurn(); let activated = false; @@ -198,7 +198,7 @@ export class MovePhase extends BattlePhase { * Lapse {@linkcode BattlerTagLapseType.PRE_MOVE PRE_MOVE} tags that trigger before a move is used, regardless of whether or not it failed. * Also lapse {@linkcode BattlerTagLapseType.MOVE MOVE} tags if the move should be successful. */ - protected lapsePreMoveAndMoveTags() { + protected lapsePreMoveAndMoveTags(): void { this.pokemon.lapseTags(BattlerTagLapseType.PRE_MOVE); // TODO: does this intentionally happen before the no targets/Moves.NONE on queue cancellation case is checked? @@ -207,7 +207,7 @@ export class MovePhase extends BattlePhase { } } - protected useMove() { + protected useMove(): void { const targets = this.getActiveTargetPokemon(); const moveQueue = this.pokemon.getMoveQueue(); @@ -217,7 +217,8 @@ export class MovePhase extends BattlePhase { this.showMoveText(); // TODO: Clean up implementation of two-turn moves. - if (moveQueue.length > 0) { // Using .shift here clears out two turn moves once they've been used + if (moveQueue.length > 0) { + // Using .shift here clears out two turn moves once they've been used this.ignorePp = moveQueue.shift()?.ignorePP ?? false; } @@ -226,7 +227,7 @@ export class MovePhase extends BattlePhase { const ppUsed = 1 + this.getPpIncreaseFromPressure(targets); this.move.usePp(ppUsed); - this.scene.eventTarget.dispatchEvent(new MoveUsedEvent(this.pokemon?.id, this.move.getMove(), ppUsed)); + this.scene.eventTarget.dispatchEvent(new MoveUsedEvent(this.pokemon?.id, this.move.getMove(), this.move.ppUsed)); } // Update the battle's "last move" pointer, unless we're currently mimicking a move. @@ -275,7 +276,7 @@ export class MovePhase extends BattlePhase { this.pokemon.pushMoveHistory({ move: this.move.moveId, targets: this.targets, result: MoveResult.FAIL, virtual: this.move.virtual }); let failedText: string | undefined; - const failureMessage = move.getFailedText(this.pokemon, targets[0], move, new Utils.BooleanHolder(false)); + const failureMessage = move.getFailedText(this.pokemon, targets[0], move, new BooleanHolder(false)); if (failureMessage) { failedText = failureMessage; @@ -299,7 +300,7 @@ export class MovePhase extends BattlePhase { * Queues a {@linkcode MoveEndPhase} if the move wasn't a {@linkcode followUp} and {@linkcode canMove()} returns `true`, * then ends the phase. */ - public end() { + public end(): void { if (!this.followUp && this.canMove()) { this.scene.unshiftPhase(new MoveEndPhase(this.scene, this.pokemon.getBattlerIndex())); } @@ -313,7 +314,7 @@ export class MovePhase extends BattlePhase { * * TODO: This hardcodes the PP increase at 1 per opponent, rather than deferring to the ability. */ - public getPpIncreaseFromPressure(targets: Pokemon[]) { + public getPpIncreaseFromPressure(targets: Pokemon[]): number { const foesWithPressure = this.pokemon.getOpponents().filter(o => targets.includes(o) && o.isActive(true) && o.hasAbilityWithAttr(IncreasePpAbAttr)); return foesWithPressure.length; } @@ -323,10 +324,10 @@ export class MovePhase extends BattlePhase { * - Move redirection abilities, effects, etc. * - Counterattacks, which pass a special value into the `targets` constructor param (`[`{@linkcode BattlerIndex.ATTACKER}`]`). */ - protected resolveRedirectTarget() { + protected resolveRedirectTarget(): void { if (this.targets.length === 1) { const currentTarget = this.targets[0]; - const redirectTarget = new Utils.NumberHolder(currentTarget); + const redirectTarget = new NumberHolder(currentTarget); // check move redirection abilities of every pokemon *except* the user. this.scene.getField(true).filter(p => p !== this.pokemon).forEach(p => applyAbAttrs(RedirectMoveAbAttr, p, null, false, this.move.moveId, redirectTarget)); @@ -372,7 +373,7 @@ export class MovePhase extends BattlePhase { * If there is no last attacker, or they are no longer on the field, a message is displayed and the * move is marked for failure. */ - protected resolveCounterAttackTarget() { + protected resolveCounterAttackTarget(): void { if (this.targets.length === 1 && this.targets[0] === BattlerIndex.ATTACKER) { if (this.pokemon.turnData.attacksReceived.length) { this.targets[0] = this.pokemon.turnData.attacksReceived[0].sourceBattlerIndex; @@ -411,7 +412,7 @@ export class MovePhase extends BattlePhase { * * TODO: handle charge moves more gracefully */ - protected handlePreMoveFailures() { + protected handlePreMoveFailures(): void { if (this.cancelled || this.failed) { if (this.failed) { const ppUsed = this.ignorePp ? 0 : 1; From e9906ea2293171aa8b32b81ee1d1a0a77254b3f2 Mon Sep 17 00:00:00 2001 From: Mumble <171087428+frutescens@users.noreply.github.com> Date: Thu, 10 Oct 2024 08:31:10 -0700 Subject: [PATCH 051/153] [P2] Obstruct/Kings Shield/etc no longer reduce stats through Clear Body/etc (#4627) * bug fix * Add test --------- Co-authored-by: frutescens Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/data/battler-tags.ts | 2 +- src/test/moves/obstruct.test.ts | 26 +++++++++++++++++++------- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index a54a8c5f519..6307b3d28be 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -1376,7 +1376,7 @@ export class ContactStatStageChangeProtectedTag extends DamageProtectedTag { const effectPhase = pokemon.scene.getCurrentPhase(); if (effectPhase instanceof MoveEffectPhase && effectPhase.move.getMove().hasFlag(MoveFlags.MAKES_CONTACT)) { const attacker = effectPhase.getPokemon(); - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, attacker.getBattlerIndex(), true, [ this.stat ], this.levels)); + pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, attacker.getBattlerIndex(), false, [ this.stat ], this.levels)); } } diff --git a/src/test/moves/obstruct.test.ts b/src/test/moves/obstruct.test.ts index fbb5437b43a..1649c199e32 100644 --- a/src/test/moves/obstruct.test.ts +++ b/src/test/moves/obstruct.test.ts @@ -1,6 +1,7 @@ -import { Moves } from "#app/enums/moves"; -import { Stat } from "#app/enums/stat"; import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { Stat } from "#enums/stat"; import GameManager from "#test/utils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -22,13 +23,15 @@ describe("Moves - Obstruct", () => { game = new GameManager(phaserGame); game.override .battleType("single") + .enemySpecies(Species.MAGIKARP) + .enemyMoveset(Moves.TACKLE) .enemyAbility(Abilities.BALL_FETCH) .ability(Abilities.BALL_FETCH) - .moveset([ Moves.OBSTRUCT ]); + .moveset([ Moves.OBSTRUCT ]) + .starterSpecies(Species.FEEBAS); }); it("protects from contact damaging moves and lowers the opponent's defense by 2 stages", async () => { - game.override.enemyMoveset(Array(4).fill(Moves.ICE_PUNCH)); await game.classicMode.startBattle(); game.move.select(Moves.OBSTRUCT); @@ -42,7 +45,6 @@ describe("Moves - Obstruct", () => { }); it("bypasses accuracy checks when applying protection and defense reduction", async () => { - game.override.enemyMoveset(Array(4).fill(Moves.ICE_PUNCH)); await game.classicMode.startBattle(); game.move.select(Moves.OBSTRUCT); @@ -59,7 +61,7 @@ describe("Moves - Obstruct", () => { ); it("protects from non-contact damaging moves and doesn't lower the opponent's defense by 2 stages", async () => { - game.override.enemyMoveset(Array(4).fill(Moves.WATER_GUN)); + game.override.enemyMoveset(Moves.WATER_GUN); await game.classicMode.startBattle(); game.move.select(Moves.OBSTRUCT); @@ -73,7 +75,7 @@ describe("Moves - Obstruct", () => { }); it("doesn't protect from status moves", async () => { - game.override.enemyMoveset(Array(4).fill(Moves.GROWL)); + game.override.enemyMoveset(Moves.GROWL); await game.classicMode.startBattle(); game.move.select(Moves.OBSTRUCT); @@ -83,4 +85,14 @@ describe("Moves - Obstruct", () => { expect(player.getStatStage(Stat.ATK)).toBe(-1); }); + + it("doesn't reduce the stats of an opponent with Clear Body/etc", async () => { + game.override.enemyAbility(Abilities.CLEAR_BODY); + await game.classicMode.startBattle(); + + game.move.select(Moves.OBSTRUCT); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.DEF)).toBe(0); + }); }); From 51894d46c265116ee391146a10bedb16eccbc056 Mon Sep 17 00:00:00 2001 From: Mumble <171087428+frutescens@users.noreply.github.com> Date: Thu, 10 Oct 2024 08:38:17 -0700 Subject: [PATCH 052/153] [P2] Pollen Puff ally behavior fixed (#4615) * pollen puff fix * bcvbvcbfd * integerholder to numberholder * moved it back --------- Co-authored-by: frutescens --- src/data/move.ts | 4 ++-- src/field/pokemon.ts | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/data/move.ts b/src/data/move.ts index 08c00829b48..4924341870d 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -4107,11 +4107,11 @@ export class StatusCategoryOnAllyAttr extends VariableMoveCategoryAttr { * @param user {@linkcode Pokemon} using the move * @param target {@linkcode Pokemon} target of the move * @param move {@linkcode Move} with this attribute - * @param args [0] {@linkcode Utils.IntegerHolder} The category of the move + * @param args [0] {@linkcode Utils.NumberHolder} The category of the move * @returns true if the function succeeds */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const category = (args[0] as Utils.IntegerHolder); + const category = (args[0] as Utils.NumberHolder); if (user.getAlly() === target) { category.value = MoveCategory.STATUS; diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 35f389b58a4..4d85d5b8e1e 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -2684,7 +2684,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { */ apply(source: Pokemon, move: Move): HitResult { const defendingSide = this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; - if (move.category === MoveCategory.STATUS) { + const moveCategory = new Utils.NumberHolder(move.category); + applyMoveAttrs(VariableMoveCategoryAttr, source, this, move, moveCategory); + if (moveCategory.value === MoveCategory.STATUS) { const cancelled = new Utils.BooleanHolder(false); const typeMultiplier = this.getMoveEffectiveness(source, move, false, false, cancelled); From 64147e44145faa8e8f14730279e764d146797841 Mon Sep 17 00:00:00 2001 From: PigeonBar <56974298+PigeonBar@users.noreply.github.com> Date: Thu, 10 Oct 2024 11:40:14 -0400 Subject: [PATCH 053/153] [P2] Fix Battle Bond continuing to affect Water Shuriken after Greninja returns to base form (#4602) * [Bug] Fix Battle Bond continuing to buff Water Shuriken after Greninja returns to base form * Test cleanup * PR feedback * Update test to use getMultiHitType() * PR Feedback --- src/data/move.ts | 13 +++- src/test/abilities/battle_bond.test.ts | 94 +++++++++++++++++--------- 2 files changed, 73 insertions(+), 34 deletions(-) diff --git a/src/data/move.ts b/src/data/move.ts index 4924341870d..bae8eea0d8a 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -1938,12 +1938,21 @@ export class IncrementMovePriorityAttr extends MoveAttr { * @see {@linkcode apply} */ export class MultiHitAttr extends MoveAttr { + /** This move's intrinsic multi-hit type. It should never be modified. */ + private readonly intrinsicMultiHitType: MultiHitType; + /** This move's current multi-hit type. It may be temporarily modified by abilities (e.g., Battle Bond). */ private multiHitType: MultiHitType; constructor(multiHitType?: MultiHitType) { super(); - this.multiHitType = multiHitType !== undefined ? multiHitType : MultiHitType._2_TO_5; + this.intrinsicMultiHitType = multiHitType !== undefined ? multiHitType : MultiHitType._2_TO_5; + this.multiHitType = this.intrinsicMultiHitType; + } + + // Currently used by `battle_bond.test.ts` + getMultiHitType(): MultiHitType { + return this.multiHitType; } /** @@ -1957,7 +1966,7 @@ export class MultiHitAttr extends MoveAttr { * @returns True */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const hitType = new Utils.NumberHolder(this.multiHitType); + const hitType = new Utils.NumberHolder(this.intrinsicMultiHitType); applyMoveAttrs(ChangeMultiHitTypeAttr, user, target, move, hitType); this.multiHitType = hitType.value; diff --git a/src/test/abilities/battle_bond.test.ts b/src/test/abilities/battle_bond.test.ts index c7dffeb150a..283fb0d0f14 100644 --- a/src/test/abilities/battle_bond.test.ts +++ b/src/test/abilities/battle_bond.test.ts @@ -1,17 +1,19 @@ +import { allMoves, MultiHitAttr, MultiHitType } from "#app/data/move"; import { Status, StatusEffect } from "#app/data/status-effect"; -import { QuietFormChangePhase } from "#app/phases/quiet-form-change-phase"; -import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/utils/gameManager"; -import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; describe("Abilities - BATTLE BOND", () => { let phaserGame: Phaser.Game; let game: GameManager; + const baseForm = 1; + const ashForm = 2; + beforeAll(() => { phaserGame = new Phaser.Game({ type: Phaser.HEADLESS, @@ -24,40 +26,68 @@ describe("Abilities - BATTLE BOND", () => { beforeEach(() => { game = new GameManager(phaserGame); - const moveToUse = Moves.SPLASH; - game.override.battleType("single"); - game.override.ability(Abilities.BATTLE_BOND); - game.override.moveset([ moveToUse ]); - game.override.enemyMoveset([ Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE ]); + game.override.battleType("single") + .startingWave(4) // Leads to arena reset on Wave 5 trainer battle + .ability(Abilities.BATTLE_BOND) + .starterForms({ [Species.GRENINJA]: ashForm, }) + .moveset([ Moves.SPLASH, Moves.WATER_SHURIKEN ]) + .enemySpecies(Species.BULBASAUR) + .enemyMoveset(Moves.SPLASH) + .startingLevel(100) // Avoid levelling up + .enemyLevel(1000); // Avoid opponent dying before `doKillOpponents()` }); - test( - "check if fainted pokemon switches to base form on arena reset", - async () => { - const baseForm = 1; - const ashForm = 2; - game.override.startingWave(4); - game.override.starterForms({ - [Species.GRENINJA]: ashForm, - }); + it("check if fainted pokemon switches to base form on arena reset", async () => { + await game.classicMode.startBattle([ Species.MAGIKARP, Species.GRENINJA ]); - await game.startBattle([ Species.MAGIKARP, Species.GRENINJA ]); + const greninja = game.scene.getParty()[1]; + expect(greninja.formIndex).toBe(ashForm); - const greninja = game.scene.getParty().find((p) => p.species.speciesId === Species.GRENINJA); - expect(greninja).toBeDefined(); - expect(greninja!.formIndex).toBe(ashForm); + greninja.hp = 0; + greninja.status = new Status(StatusEffect.FAINT); + expect(greninja.isFainted()).toBe(true); - greninja!.hp = 0; - greninja!.status = new Status(StatusEffect.FAINT); - expect(greninja!.isFainted()).toBe(true); + game.move.select(Moves.SPLASH); + await game.doKillOpponents(); + await game.phaseInterceptor.to("TurnEndPhase"); + game.doSelectModifier(); + await game.phaseInterceptor.to("QuietFormChangePhase"); - game.move.select(Moves.SPLASH); - await game.doKillOpponents(); - await game.phaseInterceptor.to(TurnEndPhase); - game.doSelectModifier(); - await game.phaseInterceptor.to(QuietFormChangePhase); + expect(greninja.formIndex).toBe(baseForm); + }); - expect(greninja!.formIndex).toBe(baseForm); - }, - ); + it("should not keep buffing Water Shuriken after Greninja switches to base form", async () => { + await game.classicMode.startBattle([ Species.GRENINJA ]); + + const waterShuriken = allMoves[Moves.WATER_SHURIKEN]; + vi.spyOn(waterShuriken, "calculateBattlePower"); + + let actualMultiHitType: MultiHitType | null = null; + const multiHitAttr = waterShuriken.getAttrs(MultiHitAttr)[0]; + vi.spyOn(multiHitAttr, "getHitCount").mockImplementation(() => { + actualMultiHitType = multiHitAttr.getMultiHitType(); + return 3; + }); + + // Wave 4: Use Water Shuriken in Ash form + let expectedBattlePower = 20; + let expectedMultiHitType = MultiHitType._3; + + game.move.select(Moves.WATER_SHURIKEN); + await game.phaseInterceptor.to("BerryPhase", false); + expect(waterShuriken.calculateBattlePower).toHaveLastReturnedWith(expectedBattlePower); + expect(actualMultiHitType).toBe(expectedMultiHitType); + + await game.doKillOpponents(); + await game.toNextWave(); + + // Wave 5: Use Water Shuriken in base form + expectedBattlePower = 15; + expectedMultiHitType = MultiHitType._2_TO_5; + + game.move.select(Moves.WATER_SHURIKEN); + await game.phaseInterceptor.to("BerryPhase", false); + expect(waterShuriken.calculateBattlePower).toHaveLastReturnedWith(expectedBattlePower); + expect(actualMultiHitType).toBe(expectedMultiHitType); + }); }); From a778537ccadcfe23a39766abcf8afee7b287ca09 Mon Sep 17 00:00:00 2001 From: Mumble <171087428+frutescens@users.noreply.github.com> Date: Thu, 10 Oct 2024 08:43:50 -0700 Subject: [PATCH 054/153] [P2] Sketch Failure Bug involving multiple Sketch-s in a moveset (#4618) * Sketch bug fix * Added test --------- Co-authored-by: frutescens --- src/phases/turn-start-phase.ts | 2 +- src/test/moves/sketch.test.ts | 53 ++++++++++++++++++++++++++++++ src/test/utils/gameManagerUtils.ts | 2 +- 3 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 src/test/moves/sketch.test.ts diff --git a/src/phases/turn-start-phase.ts b/src/phases/turn-start-phase.ts index 95d55986185..53623f933f2 100644 --- a/src/phases/turn-start-phase.ts +++ b/src/phases/turn-start-phase.ts @@ -158,7 +158,7 @@ export class TurnStartPhase extends FieldPhase { if (!queuedMove) { continue; } - const move = pokemon.getMoveset().find(m => m?.moveId === queuedMove.move) || new PokemonMove(queuedMove.move); + const move = pokemon.getMoveset().find(m => m?.moveId === queuedMove.move && m?.ppUsed < m?.getMovePp()) || new PokemonMove(queuedMove.move); if (move.getMove().hasAttr(MoveHeaderAttr)) { this.scene.unshiftPhase(new MoveHeaderPhase(this.scene, pokemon, move)); } diff --git a/src/test/moves/sketch.test.ts b/src/test/moves/sketch.test.ts new file mode 100644 index 00000000000..2e3eb97a76c --- /dev/null +++ b/src/test/moves/sketch.test.ts @@ -0,0 +1,53 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { MoveResult } from "#app/field/pokemon"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Sketch", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.SHUCKLE) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("Sketch should not fail even if a previous Sketch failed to retrieve a valid move and ran out of PP", async () => { + game.override.moveset([ Moves.SKETCH, Moves.SKETCH ]); + + await game.classicMode.startBattle([ Species.REGIELEKI ]); + const playerPokemon = game.scene.getPlayerPokemon(); + + game.move.select(Moves.SKETCH); + await game.phaseInterceptor.to("TurnEndPhase"); + expect(playerPokemon?.getLastXMoves()[0].result).toBe(MoveResult.FAIL); + const moveSlot0 = playerPokemon?.getMoveset()[0]; + expect(moveSlot0?.moveId).toBe(Moves.SKETCH); + expect(moveSlot0?.getPpRatio()).toBe(0); + + await game.toNextTurn(); + game.move.select(Moves.SKETCH); + await game.phaseInterceptor.to("TurnEndPhase"); + expect(playerPokemon?.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); + // Can't verify if the player Pokemon's moveset was successfully changed because of overrides. + }); +}); diff --git a/src/test/utils/gameManagerUtils.ts b/src/test/utils/gameManagerUtils.ts index 700d93082d8..543ee9627fe 100644 --- a/src/test/utils/gameManagerUtils.ts +++ b/src/test/utils/gameManagerUtils.ts @@ -86,7 +86,7 @@ export function waitUntil(truth) { export function getMovePosition(scene: BattleScene, pokemonIndex: 0 | 1, move: Moves) { const playerPokemon = scene.getPlayerField()[pokemonIndex]; const moveSet = playerPokemon.getMoveset(); - const index = moveSet.findIndex((m) => m?.moveId === move); + const index = moveSet.findIndex((m) => m?.moveId === move && m?.ppUsed < m?.getMovePp()); console.log(`Move position for ${Moves[move]} (=${move}):`, index); return index; } From ba7e26152e560032792e94257b11510160ea184f Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Thu, 10 Oct 2024 08:45:02 -0700 Subject: [PATCH 055/153] [Bug] Fix substitute interactions with `PostDefendAbAttr`s (#4570) * Fixes some Substitute interactions Specifically with Disguise/Ice Face and Gulp Missile * Add tests * Fix linting * Add `hitsSubstitute()` checks to all `PostDefendAbAttr`s Also fix comment indentation in `MoveEffectPhase` * Revert `move-effect-phase.ts` changes --- src/data/ability.ts | 140 +++++++++++++----------- src/data/battler-tags.ts | 4 + src/data/move.ts | 12 +- src/test/abilities/disguise.test.ts | 16 ++- src/test/abilities/gulp_missile.test.ts | 31 +++++- src/test/abilities/ice_face.test.ts | 38 +++++-- 6 files changed, 152 insertions(+), 89 deletions(-) diff --git a/src/data/ability.ts b/src/data/ability.ts index 43d02da1733..6a391818866 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -634,15 +634,15 @@ export class ReverseDrainAbAttr extends PostDefendAbAttr { * Examples include: Absorb, Draining Kiss, Bitter Blade, etc. * Also displays a message to show this ability was activated. * @param pokemon {@linkcode Pokemon} with this ability - * @param passive N/A + * @param _passive N/A * @param attacker {@linkcode Pokemon} that is attacking this Pokemon * @param move {@linkcode PokemonMove} that is being used - * @param hitResult N/A - * @args N/A + * @param _hitResult N/A + * @param _args N/A * @returns true if healing should be reversed on a healing move, false otherwise. */ - applyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean { - if (move.hasAttr(HitHealAttr)) { + override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): boolean { + if (move.hasAttr(HitHealAttr) && !move.hitsSubstitute(attacker, pokemon)) { if (!simulated) { pokemon.scene.queueMessage(i18next.t("abilityTriggers:reverseDrain", { pokemonNameWithAffix: getPokemonNameWithAffix(attacker) })); } @@ -669,8 +669,8 @@ export class PostDefendStatStageChangeAbAttr extends PostDefendAbAttr { this.allOthers = allOthers; } - applyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean { - if (this.condition(pokemon, attacker, move)) { + override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): boolean { + if (this.condition(pokemon, attacker, move) && !move.hitsSubstitute(attacker, pokemon)) { if (simulated) { return true; } @@ -707,13 +707,13 @@ export class PostDefendHpGatedStatStageChangeAbAttr extends PostDefendAbAttr { this.selfTarget = selfTarget; } - applyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean { - const hpGateFlat: integer = Math.ceil(pokemon.getMaxHp() * this.hpGate); + override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): boolean { + const hpGateFlat: number = Math.ceil(pokemon.getMaxHp() * this.hpGate); const lastAttackReceived = pokemon.turnData.attacksReceived[pokemon.turnData.attacksReceived.length - 1]; const damageReceived = lastAttackReceived?.damage || 0; - if (this.condition(pokemon, attacker, move) && (pokemon.hp <= hpGateFlat && (pokemon.hp + damageReceived) > hpGateFlat)) { - if (!simulated ) { + if (this.condition(pokemon, attacker, move) && (pokemon.hp <= hpGateFlat && (pokemon.hp + damageReceived) > hpGateFlat) && !move.hitsSubstitute(attacker, pokemon)) { + if (!simulated) { pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, (this.selfTarget ? pokemon : attacker).getBattlerIndex(), true, this.stats, this.stages)); } return true; @@ -734,8 +734,8 @@ export class PostDefendApplyArenaTrapTagAbAttr extends PostDefendAbAttr { this.tagType = tagType; } - applyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean { - if (this.condition(pokemon, attacker, move)) { + override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): boolean { + if (this.condition(pokemon, attacker, move) && !move.hitsSubstitute(attacker, pokemon)) { const tag = pokemon.scene.arena.getTag(this.tagType) as ArenaTrapTag; if (!pokemon.scene.arena.getTag(this.tagType) || tag.layers < tag.maxLayers) { if (!simulated) { @@ -758,8 +758,8 @@ export class PostDefendApplyBattlerTagAbAttr extends PostDefendAbAttr { this.tagType = tagType; } - applyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean { - if (this.condition(pokemon, attacker, move)) { + override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): boolean { + if (this.condition(pokemon, attacker, move) && !move.hitsSubstitute(attacker, pokemon)) { if (!pokemon.getTag(this.tagType) && !simulated) { pokemon.addTag(this.tagType, undefined, undefined, pokemon.id); pokemon.scene.queueMessage(i18next.t("abilityTriggers:windPowerCharged", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: move.name })); @@ -771,8 +771,8 @@ export class PostDefendApplyBattlerTagAbAttr extends PostDefendAbAttr { } export class PostDefendTypeChangeAbAttr extends PostDefendAbAttr { - applyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean { - if (hitResult < HitResult.NO_EFFECT) { + override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, _args: any[]): boolean { + if (hitResult < HitResult.NO_EFFECT && !move.hitsSubstitute(attacker, pokemon)) { if (simulated) { return true; } @@ -787,7 +787,7 @@ export class PostDefendTypeChangeAbAttr extends PostDefendAbAttr { return false; } - getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { + override getTriggerMessage(pokemon: Pokemon, abilityName: string, ..._args: any[]): string { return i18next.t("abilityTriggers:postDefendTypeChange", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName, @@ -805,8 +805,8 @@ export class PostDefendTerrainChangeAbAttr extends PostDefendAbAttr { this.terrainType = terrainType; } - applyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean { - if (hitResult < HitResult.NO_EFFECT) { + override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, _args: any[]): boolean { + if (hitResult < HitResult.NO_EFFECT && !move.hitsSubstitute(attacker, pokemon)) { if (simulated) { return pokemon.scene.arena.terrain?.terrainType !== (this.terrainType || undefined); } else { @@ -829,8 +829,9 @@ export class PostDefendContactApplyStatusEffectAbAttr extends PostDefendAbAttr { this.effects = effects; } - applyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean { - if (move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) && !attacker.status && (this.chance === -1 || pokemon.randSeedInt(100) < this.chance)) { + override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): boolean { + if (move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) && !attacker.status + && (this.chance === -1 || pokemon.randSeedInt(100) < this.chance) && !move.hitsSubstitute(attacker, pokemon)) { const effect = this.effects.length === 1 ? this.effects[0] : this.effects[pokemon.randSeedInt(this.effects.length)]; if (simulated) { return attacker.canSetStatus(effect, true, false, pokemon); @@ -869,8 +870,8 @@ export class PostDefendContactApplyTagChanceAbAttr extends PostDefendAbAttr { this.turnCount = turnCount; } - applyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean { - if (move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) && pokemon.randSeedInt(100) < this.chance) { + override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): boolean { + if (move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) && pokemon.randSeedInt(100) < this.chance && !move.hitsSubstitute(attacker, pokemon)) { if (simulated) { return attacker.canAddTag(this.tagType); } else { @@ -893,7 +894,11 @@ export class PostDefendCritStatStageChangeAbAttr extends PostDefendAbAttr { this.stages = stages; } - applyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean { + override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): boolean { + if (move.hitsSubstitute(attacker, pokemon)) { + return false; + } + if (!simulated) { pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ this.stat ], this.stages)); } @@ -901,7 +906,7 @@ export class PostDefendCritStatStageChangeAbAttr extends PostDefendAbAttr { return true; } - getCondition(): AbAttrCondition { + override getCondition(): AbAttrCondition { return (pokemon: Pokemon) => pokemon.turnData.attacksReceived.length !== 0 && pokemon.turnData.attacksReceived[pokemon.turnData.attacksReceived.length - 1].critical; } } @@ -915,8 +920,9 @@ export class PostDefendContactDamageAbAttr extends PostDefendAbAttr { this.damageRatio = damageRatio; } - applyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean { - if (!simulated && move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) && !attacker.hasAbilityWithAttr(BlockNonDirectDamageAbAttr)) { + override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): boolean { + if (!simulated && move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) + && !attacker.hasAbilityWithAttr(BlockNonDirectDamageAbAttr) && !move.hitsSubstitute(attacker, pokemon)) { attacker.damageAndUpdate(Utils.toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)), HitResult.OTHER); attacker.turnData.damageTaken += Utils.toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)); return true; @@ -925,7 +931,7 @@ export class PostDefendContactDamageAbAttr extends PostDefendAbAttr { return false; } - getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { + override getTriggerMessage(pokemon: Pokemon, abilityName: string, ..._args: any[]): string { return i18next.t("abilityTriggers:postDefendContactDamage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName @@ -948,8 +954,8 @@ export class PostDefendPerishSongAbAttr extends PostDefendAbAttr { this.turns = turns; } - applyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean { - if (move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon)) { + override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): boolean { + if (move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) && !move.hitsSubstitute(attacker, pokemon)) { if (pokemon.getTag(BattlerTagType.PERISH_SONG) || attacker.getTag(BattlerTagType.PERISH_SONG)) { return false; } else { @@ -963,24 +969,24 @@ export class PostDefendPerishSongAbAttr extends PostDefendAbAttr { return false; } - getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { + override getTriggerMessage(pokemon: Pokemon, abilityName: string, ..._args: any[]): string { return i18next.t("abilityTriggers:perishBody", { pokemonName: getPokemonNameWithAffix(pokemon), abilityName: abilityName }); } } export class PostDefendWeatherChangeAbAttr extends PostDefendAbAttr { private weatherType: WeatherType; - protected condition: PokemonDefendCondition | null; + protected condition?: PokemonDefendCondition; constructor(weatherType: WeatherType, condition?: PokemonDefendCondition) { super(); this.weatherType = weatherType; - this.condition = condition ?? null; + this.condition = condition; } - applyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean { - if (this.condition !== null && !this.condition(pokemon, attacker, move)) { + override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): boolean { + if (this.condition && !this.condition(pokemon, attacker, move) || move.hitsSubstitute(attacker, pokemon)) { return false; } if (!pokemon.scene.arena.weather?.isImmutable()) { @@ -999,8 +1005,9 @@ export class PostDefendAbilitySwapAbAttr extends PostDefendAbAttr { super(); } - applyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean { - if (move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) && !attacker.getAbility().hasAttr(UnswappableAbilityAbAttr)) { + override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, args: any[]): boolean { + if (move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) + && !attacker.getAbility().hasAttr(UnswappableAbilityAbAttr) && !move.hitsSubstitute(attacker, pokemon)) { if (!simulated) { const tempAbilityId = attacker.getAbility().id; attacker.summonData.ability = pokemon.getAbility().id; @@ -1012,7 +1019,7 @@ export class PostDefendAbilitySwapAbAttr extends PostDefendAbAttr { return false; } - getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { + override getTriggerMessage(pokemon: Pokemon, _abilityName: string, ..._args: any[]): string { return i18next.t("abilityTriggers:postDefendAbilitySwap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }); } } @@ -1025,8 +1032,9 @@ export class PostDefendAbilityGiveAbAttr extends PostDefendAbAttr { this.ability = ability; } - applyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean { - if (move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) && !attacker.getAbility().hasAttr(UnsuppressableAbilityAbAttr) && !attacker.getAbility().hasAttr(PostDefendAbilityGiveAbAttr)) { + override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): boolean { + if (move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) && !attacker.getAbility().hasAttr(UnsuppressableAbilityAbAttr) + && !attacker.getAbility().hasAttr(PostDefendAbilityGiveAbAttr) && !move.hitsSubstitute(attacker, pokemon)) { if (!simulated) { attacker.summonData.ability = this.ability; } @@ -1037,7 +1045,7 @@ export class PostDefendAbilityGiveAbAttr extends PostDefendAbAttr { return false; } - getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { + override getTriggerMessage(pokemon: Pokemon, abilityName: string, ..._args: any[]): string { return i18next.t("abilityTriggers:postDefendAbilityGive", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName @@ -1056,8 +1064,8 @@ export class PostDefendMoveDisableAbAttr extends PostDefendAbAttr { this.chance = chance; } - applyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean { - if (attacker.getTag(BattlerTagType.DISABLED) === null) { + override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): boolean { + if (attacker.getTag(BattlerTagType.DISABLED) === null && !move.hitsSubstitute(attacker, pokemon)) { if (move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) && (this.chance === -1 || pokemon.randSeedInt(100) < this.chance)) { if (simulated) { return true; @@ -1724,17 +1732,17 @@ export class PostAttackApplyBattlerTagAbAttr extends PostAttackAbAttr { } export class PostDefendStealHeldItemAbAttr extends PostDefendAbAttr { - private condition: PokemonDefendCondition | null; + private condition?: PokemonDefendCondition; constructor(condition?: PokemonDefendCondition) { super(); - this.condition = condition ?? null; + this.condition = condition; } - applyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): Promise { + override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, _args: any[]): Promise { return new Promise(resolve => { - if (!simulated && hitResult < HitResult.NO_EFFECT && (!this.condition || this.condition(pokemon, attacker, move))) { + if (!simulated && hitResult < HitResult.NO_EFFECT && (!this.condition || this.condition(pokemon, attacker, move)) && !move.hitsSubstitute(attacker, pokemon)) { const heldItems = this.getTargetHeldItems(attacker).filter(i => i.isTransferable); if (heldItems.length) { const stolenItem = heldItems[pokemon.randSeedInt(heldItems.length)]; @@ -4476,7 +4484,7 @@ export class PostSummonStatStageChangeOnArenaAbAttr extends PostSummonStatStageC export class FormBlockDamageAbAttr extends ReceivedMoveDamageMultiplierAbAttr { private multiplier: number; private tagType: BattlerTagType; - private recoilDamageFunc: ((pokemon: Pokemon) => number) | undefined; + private recoilDamageFunc?: ((pokemon: Pokemon) => number); private triggerMessageFunc: (pokemon: Pokemon, abilityName: string) => string; constructor(condition: PokemonDefendCondition, multiplier: number, tagType: BattlerTagType, triggerMessageFunc: (pokemon: Pokemon, abilityName: string) => string, recoilDamageFunc?: (pokemon: Pokemon) => number) { @@ -4492,16 +4500,16 @@ export class FormBlockDamageAbAttr extends ReceivedMoveDamageMultiplierAbAttr { * Applies the pre-defense ability to the Pokémon. * Removes the appropriate `BattlerTagType` when hit by an attack and is in its defense form. * - * @param {Pokemon} pokemon The Pokémon with the ability. - * @param {boolean} passive n/a - * @param {Pokemon} attacker The attacking Pokémon. - * @param {PokemonMove} move The move being used. - * @param {Utils.BooleanHolder} cancelled n/a - * @param {any[]} args Additional arguments. - * @returns {boolean} Whether the immunity was applied. + * @param pokemon The Pokémon with the ability. + * @param _passive n/a + * @param attacker The attacking Pokémon. + * @param move The move being used. + * @param _cancelled n/a + * @param args Additional arguments. + * @returns `true` if the immunity was applied. */ - applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, args: any[]): boolean { - if (this.condition(pokemon, attacker, move)) { + override applyPreDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _cancelled: Utils.BooleanHolder, args: any[]): boolean { + if (this.condition(pokemon, attacker, move) && !move.hitsSubstitute(attacker, pokemon)) { if (!simulated) { (args[0] as Utils.NumberHolder).value = this.multiplier; pokemon.removeTag(this.tagType); @@ -4517,12 +4525,12 @@ export class FormBlockDamageAbAttr extends ReceivedMoveDamageMultiplierAbAttr { /** * Gets the message triggered when the Pokémon avoids damage using the form-changing ability. - * @param {Pokemon} pokemon The Pokémon with the ability. - * @param {string} abilityName The name of the ability. - * @param {...any} args n/a - * @returns {string} The trigger message. + * @param pokemon The Pokémon with the ability. + * @param abilityName The name of the ability. + * @param _args n/a + * @returns The trigger message. */ - getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { + getTriggerMessage(pokemon: Pokemon, abilityName: string, ..._args: any[]): string { return this.triggerMessageFunc(pokemon, abilityName); } } @@ -5503,7 +5511,8 @@ export function initAbilities() { .attr(NoFusionAbilityAbAttr) // Add BattlerTagType.DISGUISE if the pokemon is in its disguised form .conditionalAttr(pokemon => pokemon.formIndex === 0, PostSummonAddBattlerTagAbAttr, BattlerTagType.DISGUISE, 0, false) - .attr(FormBlockDamageAbAttr, (target, user, move) => !!target.getTag(BattlerTagType.DISGUISE) && target.getMoveEffectiveness(user, move) > 0, 0, BattlerTagType.DISGUISE, + .attr(FormBlockDamageAbAttr, + (target, user, move) => !!target.getTag(BattlerTagType.DISGUISE) && target.getMoveEffectiveness(user, move) > 0, 0, BattlerTagType.DISGUISE, (pokemon, abilityName) => i18next.t("abilityTriggers:disguiseAvoidedDamage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName: abilityName }), (pokemon) => Utils.toDmgValue(pokemon.getMaxHp() / 8)) .attr(PostBattleInitFormChangeAbAttr, () => 0) @@ -5665,7 +5674,8 @@ export function initAbilities() { .conditionalAttr(getWeatherCondition(WeatherType.HAIL, WeatherType.SNOW), PostSummonAddBattlerTagAbAttr, BattlerTagType.ICE_FACE, 0) // When weather changes to HAIL or SNOW while pokemon is fielded, add BattlerTagType.ICE_FACE .attr(PostWeatherChangeAddBattlerTagAttr, BattlerTagType.ICE_FACE, 0, WeatherType.HAIL, WeatherType.SNOW) - .attr(FormBlockDamageAbAttr, (target, user, move) => move.category === MoveCategory.PHYSICAL && !!target.getTag(BattlerTagType.ICE_FACE), 0, BattlerTagType.ICE_FACE, + .attr(FormBlockDamageAbAttr, + (target, user, move) => move.category === MoveCategory.PHYSICAL && !!target.getTag(BattlerTagType.ICE_FACE), 0, BattlerTagType.ICE_FACE, (pokemon, abilityName) => i18next.t("abilityTriggers:iceFaceAvoidedDamage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName: abilityName })) .attr(PostBattleInitFormChangeAbAttr, () => 0) .bypassFaint() diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 6307b3d28be..24c82e54427 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -2139,6 +2139,10 @@ export class GulpMissileTag extends BattlerTag { return false; } + if (moveEffectPhase.move.getMove().hitsSubstitute(attacker, pokemon)) { + return true; + } + const cancelled = new Utils.BooleanHolder(false); applyAbAttrs(BlockNonDirectDamageAbAttr, attacker, cancelled); diff --git a/src/data/move.ts b/src/data/move.ts index bae8eea0d8a..ff0c24f5032 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -4844,14 +4844,14 @@ export class GulpMissileTagAttr extends MoveEffectAttr { /** * Adds BattlerTagType from GulpMissileTag based on the Pokemon's HP ratio. - * @param {Pokemon} user The Pokemon using the move. - * @param {Pokemon} target The Pokemon being targeted by the move. - * @param {Move} move The move being used. - * @param {any[]} args Additional arguments, if any. + * @param user The Pokemon using the move. + * @param _target N/A + * @param move The move being used. + * @param _args N/A * @returns Whether the BattlerTag is applied. */ - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean | Promise { - if (!super.apply(user, target, move, args)) { + apply(user: Pokemon, _target: Pokemon, move: Move, _args: any[]): boolean { + if (!super.apply(user, _target, move, _args)) { return false; } diff --git a/src/test/abilities/disguise.test.ts b/src/test/abilities/disguise.test.ts index a295dd61443..0241aa4b9ea 100644 --- a/src/test/abilities/disguise.test.ts +++ b/src/test/abilities/disguise.test.ts @@ -1,8 +1,9 @@ +import { BattlerIndex } from "#app/battle"; +import { StatusEffect } from "#app/data/status-effect"; import { toDmgValue } from "#app/utils"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import { StatusEffect } from "#app/data/status-effect"; import { Stat } from "#enums/stat"; import GameManager from "#test/utils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -222,4 +223,17 @@ describe("Abilities - Disguise", () => { expect(mimikyu.formIndex).toBe(bustedForm); expect(mimikyu.hp).toBe(maxHp - disguiseDamage); }); + + it("doesn't trigger if user is behind a substitute", async () => { + game.override + .enemyMoveset(Moves.SUBSTITUTE) + .moveset(Moves.POWER_TRIP); + await game.classicMode.startBattle(); + + game.move.select(Moves.POWER_TRIP); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextTurn(); + + expect(game.scene.getEnemyPokemon()!.formIndex).toBe(disguisedForm); + }); }); diff --git a/src/test/abilities/gulp_missile.test.ts b/src/test/abilities/gulp_missile.test.ts index 1ca208996b5..01b68d0c89d 100644 --- a/src/test/abilities/gulp_missile.test.ts +++ b/src/test/abilities/gulp_missile.test.ts @@ -1,13 +1,14 @@ -import { BattlerTagType } from "#enums/battler-tag-type"; -import { StatusEffect } from "#enums/status-effect"; +import { BattlerIndex } from "#app/battle"; import Pokemon from "#app/field/pokemon"; -import GameManager from "#test/utils/gameManager"; import { Abilities } from "#enums/abilities"; +import { BattlerTagType } from "#enums/battler-tag-type"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; +import { Stat } from "#enums/stat"; +import { StatusEffect } from "#enums/status-effect"; +import GameManager from "#test/utils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import { Stat } from "#enums/stat"; describe("Abilities - Gulp Missile", () => { let phaserGame: Phaser.Game; @@ -40,8 +41,9 @@ describe("Abilities - Gulp Missile", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override + .disableCrits() .battleType("single") - .moveset([ Moves.SURF, Moves.DIVE, Moves.SPLASH ]) + .moveset([ Moves.SURF, Moves.DIVE, Moves.SPLASH, Moves.SUBSTITUTE ]) .enemySpecies(Species.SNORLAX) .enemyAbility(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH) @@ -234,6 +236,25 @@ describe("Abilities - Gulp Missile", () => { expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.DEF)).toBe(-1); }); + it("doesn't trigger if user is behind a substitute", async () => { + game.override + .enemyAbility(Abilities.STURDY) + .enemyMoveset([ Moves.SPLASH, Moves.POWER_TRIP ]); + await game.classicMode.startBattle([ Species.CRAMORANT ]); + + game.move.select(Moves.SURF); + await game.forceEnemyMove(Moves.SPLASH); + await game.toNextTurn(); + + expect(game.scene.getPlayerPokemon()!.formIndex).toBe(GULPING_FORM); + + game.move.select(Moves.SUBSTITUTE); + await game.forceEnemyMove(Moves.POWER_TRIP); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.toNextTurn(); + + expect(game.scene.getPlayerPokemon()!.formIndex).toBe(GULPING_FORM); + }); it("cannot be suppressed", async () => { game.override.enemyMoveset(Moves.GASTRO_ACID); diff --git a/src/test/abilities/ice_face.test.ts b/src/test/abilities/ice_face.test.ts index 723d5e8d855..1c7f7bd6093 100644 --- a/src/test/abilities/ice_face.test.ts +++ b/src/test/abilities/ice_face.test.ts @@ -1,3 +1,4 @@ +import { BattlerIndex } from "#app/battle"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; import { QuietFormChangePhase } from "#app/phases/quiet-form-change-phase"; @@ -36,7 +37,7 @@ describe("Abilities - Ice Face", () => { }); it("takes no damage from physical move and transforms to Noice", async () => { - await game.startBattle([ Species.HITMONLEE ]); + await game.classicMode.startBattle([ Species.HITMONLEE ]); game.move.select(Moves.TACKLE); @@ -52,7 +53,7 @@ describe("Abilities - Ice Face", () => { it("takes no damage from the first hit of multihit physical move and transforms to Noice", async () => { game.override.moveset([ Moves.SURGING_STRIKES ]); game.override.enemyLevel(1); - await game.startBattle([ Species.HITMONLEE ]); + await game.classicMode.startBattle([ Species.HITMONLEE ]); game.move.select(Moves.SURGING_STRIKES); @@ -78,7 +79,7 @@ describe("Abilities - Ice Face", () => { }); it("takes damage from special moves", async () => { - await game.startBattle([ Species.MAGIKARP ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); game.move.select(Moves.ICE_BEAM); @@ -92,7 +93,7 @@ describe("Abilities - Ice Face", () => { }); it("takes effects from status moves", async () => { - await game.startBattle([ Species.MAGIKARP ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); game.move.select(Moves.TOXIC_THREAD); @@ -108,7 +109,7 @@ describe("Abilities - Ice Face", () => { game.override.moveset([ Moves.QUICK_ATTACK ]); game.override.enemyMoveset([ Moves.HAIL, Moves.HAIL, Moves.HAIL, Moves.HAIL ]); - await game.startBattle([ Species.MAGIKARP ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); game.move.select(Moves.QUICK_ATTACK); @@ -130,7 +131,7 @@ describe("Abilities - Ice Face", () => { game.override.enemyMoveset([ Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE ]); game.override.moveset([ Moves.SNOWSCAPE ]); - await game.startBattle([ Species.EISCUE, Species.NINJASK ]); + await game.classicMode.startBattle([ Species.EISCUE, Species.NINJASK ]); game.move.select(Moves.SNOWSCAPE); @@ -157,7 +158,7 @@ describe("Abilities - Ice Face", () => { game.override.enemySpecies(Species.SHUCKLE); game.override.enemyMoveset([ Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE ]); - await game.startBattle([ Species.EISCUE ]); + await game.classicMode.startBattle([ Species.EISCUE ]); game.move.select(Moves.HAIL); const eiscue = game.scene.getPlayerPokemon()!; @@ -176,7 +177,7 @@ describe("Abilities - Ice Face", () => { it("persists form change when switched out", async () => { game.override.enemyMoveset([ Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK ]); - await game.startBattle([ Species.EISCUE, Species.MAGIKARP ]); + await game.classicMode.startBattle([ Species.EISCUE, Species.MAGIKARP ]); game.move.select(Moves.ICE_BEAM); @@ -205,7 +206,7 @@ describe("Abilities - Ice Face", () => { [Species.EISCUE]: noiceForm, }); - await game.startBattle([ Species.EISCUE ]); + await game.classicMode.startBattle([ Species.EISCUE ]); const eiscue = game.scene.getPlayerPokemon()!; @@ -222,10 +223,23 @@ describe("Abilities - Ice Face", () => { expect(eiscue.getTag(BattlerTagType.ICE_FACE)).not.toBe(undefined); }); + it("doesn't trigger if user is behind a substitute", async () => { + game.override + .enemyMoveset(Moves.SUBSTITUTE) + .moveset(Moves.POWER_TRIP); + await game.classicMode.startBattle(); + + game.move.select(Moves.POWER_TRIP); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.toNextTurn(); + + expect(game.scene.getEnemyPokemon()!.formIndex).toBe(icefaceForm); + }); + it("cannot be suppressed", async () => { game.override.moveset([ Moves.GASTRO_ACID ]); - await game.startBattle([ Species.MAGIKARP ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); game.move.select(Moves.GASTRO_ACID); @@ -241,7 +255,7 @@ describe("Abilities - Ice Face", () => { it("cannot be swapped with another ability", async () => { game.override.moveset([ Moves.SKILL_SWAP ]); - await game.startBattle([ Species.MAGIKARP ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); game.move.select(Moves.SKILL_SWAP); @@ -257,7 +271,7 @@ describe("Abilities - Ice Face", () => { it("cannot be copied", async () => { game.override.ability(Abilities.TRACE); - await game.startBattle([ Species.MAGIKARP ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); game.move.select(Moves.SIMPLE_BEAM); From 0996789ee6f232c45cf4d6597c78906d8e7c2cdc Mon Sep 17 00:00:00 2001 From: "Adrian T." <68144167+torranx@users.noreply.github.com> Date: Thu, 10 Oct 2024 23:54:43 +0800 Subject: [PATCH 056/153] [Refactor] Improve typing in `phaseInterceptor.ts` (#4560) * improve typing in phaseInterceptor * add more param typings --------- Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/test/utils/phaseInterceptor.ts | 126 +++++++++++++++++++++++++++-- 1 file changed, 118 insertions(+), 8 deletions(-) diff --git a/src/test/utils/phaseInterceptor.ts b/src/test/utils/phaseInterceptor.ts index d108c4cb2ea..ec9309e2405 100644 --- a/src/test/utils/phaseInterceptor.ts +++ b/src/test/utils/phaseInterceptor.ts @@ -53,6 +53,7 @@ import { } from "#app/phases/mystery-encounter-phases"; import { ModifierRewardPhase } from "#app/phases/modifier-reward-phase"; import { PartyExpPhase } from "#app/phases/party-exp-phase"; +import { ExpPhase } from "#app/phases/exp-phase"; export interface PromptHandler { phaseTarget?: string; @@ -61,7 +62,114 @@ export interface PromptHandler { expireFn?: () => void; awaitingActionInput?: boolean; } -import { ExpPhase } from "#app/phases/exp-phase"; + +type PhaseClass = + | typeof LoginPhase + | typeof TitlePhase + | typeof SelectGenderPhase + | typeof EncounterPhase + | typeof NewBiomeEncounterPhase + | typeof SelectStarterPhase + | typeof PostSummonPhase + | typeof SummonPhase + | typeof ToggleDoublePositionPhase + | typeof CheckSwitchPhase + | typeof ShowAbilityPhase + | typeof MessagePhase + | typeof TurnInitPhase + | typeof CommandPhase + | typeof EnemyCommandPhase + | typeof TurnStartPhase + | typeof MovePhase + | typeof MoveEffectPhase + | typeof DamagePhase + | typeof FaintPhase + | typeof BerryPhase + | typeof TurnEndPhase + | typeof BattleEndPhase + | typeof EggLapsePhase + | typeof SelectModifierPhase + | typeof NextEncounterPhase + | typeof NewBattlePhase + | typeof VictoryPhase + | typeof LearnMovePhase + | typeof MoveEndPhase + | typeof StatStageChangePhase + | typeof ShinySparklePhase + | typeof SelectTargetPhase + | typeof UnavailablePhase + | typeof QuietFormChangePhase + | typeof SwitchPhase + | typeof SwitchSummonPhase + | typeof PartyHealPhase + | typeof EvolutionPhase + | typeof EndEvolutionPhase + | typeof LevelCapPhase + | typeof AttemptRunPhase + | typeof SelectBiomePhase + | typeof MysteryEncounterPhase + | typeof MysteryEncounterOptionSelectedPhase + | typeof MysteryEncounterBattlePhase + | typeof MysteryEncounterRewardsPhase + | typeof PostMysteryEncounterPhase + | typeof ModifierRewardPhase + | typeof PartyExpPhase + | typeof ExpPhase; + +type PhaseString = + | "LoginPhase" + | "TitlePhase" + | "SelectGenderPhase" + | "EncounterPhase" + | "NewBiomeEncounterPhase" + | "SelectStarterPhase" + | "PostSummonPhase" + | "SummonPhase" + | "ToggleDoublePositionPhase" + | "CheckSwitchPhase" + | "ShowAbilityPhase" + | "MessagePhase" + | "TurnInitPhase" + | "CommandPhase" + | "EnemyCommandPhase" + | "TurnStartPhase" + | "MovePhase" + | "MoveEffectPhase" + | "DamagePhase" + | "FaintPhase" + | "BerryPhase" + | "TurnEndPhase" + | "BattleEndPhase" + | "EggLapsePhase" + | "SelectModifierPhase" + | "NextEncounterPhase" + | "NewBattlePhase" + | "VictoryPhase" + | "LearnMovePhase" + | "MoveEndPhase" + | "StatStageChangePhase" + | "ShinySparklePhase" + | "SelectTargetPhase" + | "UnavailablePhase" + | "QuietFormChangePhase" + | "SwitchPhase" + | "SwitchSummonPhase" + | "PartyHealPhase" + | "EvolutionPhase" + | "EndEvolutionPhase" + | "LevelCapPhase" + | "AttemptRunPhase" + | "SelectBiomePhase" + | "MysteryEncounterPhase" + | "MysteryEncounterOptionSelectedPhase" + | "MysteryEncounterBattlePhase" + | "MysteryEncounterRewardsPhase" + | "PostMysteryEncounterPhase" + | "ModifierRewardPhase" + | "PartyExpPhase" + | "ExpPhase"; + +type PhaseInterceptorPhase = PhaseClass | PhaseString; export default class PhaseInterceptor { public scene; @@ -172,7 +280,7 @@ export default class PhaseInterceptor { * @param phaseFrom - The phase to start from. * @returns The instance of the PhaseInterceptor. */ - runFrom(phaseFrom) { + runFrom(phaseFrom: PhaseInterceptorPhase): PhaseInterceptor { this.phaseFrom = phaseFrom; return this; } @@ -180,9 +288,10 @@ export default class PhaseInterceptor { /** * Method to transition to a target phase. * @param phaseTo - The phase to transition to. + * @param runTarget - Whether or not to run the target phase. * @returns A promise that resolves when the transition is complete. */ - async to(phaseTo, runTarget: boolean = true): Promise { + async to(phaseTo: PhaseInterceptorPhase, runTarget: boolean = true): Promise { return new Promise(async (resolve, reject) => { ErrorInterceptor.getInstance().add(this); if (this.phaseFrom) { @@ -219,7 +328,7 @@ export default class PhaseInterceptor { * @param skipFn - Optional skip function. * @returns A promise that resolves when the phase is run. */ - run(phaseTarget, skipFn?): Promise { + run(phaseTarget: PhaseInterceptorPhase, skipFn?: (className: PhaseClass) => boolean): Promise { const targetName = typeof phaseTarget === "string" ? phaseTarget : phaseTarget.name; this.scene.moveAnimations = null; // Mandatory to avoid crash return new Promise(async (resolve, reject) => { @@ -253,7 +362,7 @@ export default class PhaseInterceptor { }); } - whenAboutToRun(phaseTarget, skipFn?): Promise { + whenAboutToRun(phaseTarget: PhaseInterceptorPhase, skipFn?: (className: PhaseClass) => boolean): Promise { const targetName = typeof phaseTarget === "string" ? phaseTarget : phaseTarget.name; this.scene.moveAnimations = null; // Mandatory to avoid crash return new Promise(async (resolve, reject) => { @@ -311,7 +420,7 @@ export default class PhaseInterceptor { * Method to start a phase and log it. * @param phase - The phase to start. */ - startPhase(phase) { + startPhase(phase: PhaseClass) { this.log.push(phase.name); const instance = this.scene.getCurrentPhase(); this.onHold.push({ @@ -340,9 +449,10 @@ export default class PhaseInterceptor { /** * m2m to set mode. - * @param phase - The phase to start. + * @param mode - The {@linkcode Mode} to set. + * @param args - Additional arguments to pass to the original method. */ - setMode(mode: Mode, ...args: any[]): Promise { + setMode(mode: Mode, ...args: unknown[]): Promise { const currentPhase = this.scene.getCurrentPhase(); const instance = this.scene.ui; console.log("setMode", `${Mode[mode]} (=${mode})`, args); From 6ad5ba972cc7eafc451ed264bae3e1c153463fd8 Mon Sep 17 00:00:00 2001 From: ImperialSympathizer <110984302+ben-lear@users.noreply.github.com> Date: Thu, 10 Oct 2024 12:29:26 -0400 Subject: [PATCH 057/153] [Enhancement] Refactor Starter Species to use separate EggTier map (#4591) * creates table for tracking species egg tiers * creates table for tracking species egg tiers * rename EggTier enum values * replace clamp util function with Phaser function --------- Co-authored-by: ImperialSympathizer --- src/data/balance/species-egg-tiers.ts | 603 ++++++++++++++++++ src/data/egg.ts | 91 ++- .../encounters/a-trainers-test-encounter.ts | 4 +- .../the-expert-pokemon-breeder-encounter.ts | 2 +- src/enums/egg-type.ts | 6 +- src/field/pokemon.ts | 2 +- src/test/eggs/egg.test.ts | 36 +- .../a-trainers-test-encounter.test.ts | 4 +- .../the-expert-breeder-encounter.test.ts | 6 +- src/ui/battle-info.ts | 2 +- src/ui/egg-gacha-ui-handler.ts | 6 +- src/ui/text.ts | 6 +- src/utils.ts | 4 - 13 files changed, 676 insertions(+), 96 deletions(-) create mode 100644 src/data/balance/species-egg-tiers.ts diff --git a/src/data/balance/species-egg-tiers.ts b/src/data/balance/species-egg-tiers.ts new file mode 100644 index 00000000000..cd266dfcf54 --- /dev/null +++ b/src/data/balance/species-egg-tiers.ts @@ -0,0 +1,603 @@ +import { Species } from "#enums/species"; +import { EggTier } from "#enums/egg-type"; + +/** + * Map of all starters and their respective {@linkcode EggTier}, which determines the type of egg the starter hatches from. + */ +export const speciesEggTiers = { + [Species.BULBASAUR]: EggTier.COMMON, + [Species.CHARMANDER]: EggTier.COMMON, + [Species.SQUIRTLE]: EggTier.COMMON, + [Species.CATERPIE]: EggTier.COMMON, + [Species.WEEDLE]: EggTier.COMMON, + [Species.PIDGEY]: EggTier.COMMON, + [Species.RATTATA]: EggTier.COMMON, + [Species.SPEAROW]: EggTier.COMMON, + [Species.EKANS]: EggTier.COMMON, + [Species.PIKACHU]: EggTier.COMMON, + [Species.SANDSHREW]: EggTier.COMMON, + [Species.NIDORAN_F]: EggTier.COMMON, + [Species.NIDORAN_M]: EggTier.COMMON, + [Species.CLEFAIRY]: EggTier.COMMON, + [Species.VULPIX]: EggTier.COMMON, + [Species.JIGGLYPUFF]: EggTier.COMMON, + [Species.ZUBAT]: EggTier.COMMON, + [Species.ODDISH]: EggTier.COMMON, + [Species.PARAS]: EggTier.COMMON, + [Species.VENONAT]: EggTier.COMMON, + [Species.DIGLETT]: EggTier.COMMON, + [Species.MEOWTH]: EggTier.COMMON, + [Species.PSYDUCK]: EggTier.COMMON, + [Species.MANKEY]: EggTier.RARE, + [Species.GROWLITHE]: EggTier.RARE, + [Species.POLIWAG]: EggTier.COMMON, + [Species.ABRA]: EggTier.RARE, + [Species.MACHOP]: EggTier.COMMON, + [Species.BELLSPROUT]: EggTier.COMMON, + [Species.TENTACOOL]: EggTier.COMMON, + [Species.GEODUDE]: EggTier.COMMON, + [Species.PONYTA]: EggTier.COMMON, + [Species.SLOWPOKE]: EggTier.COMMON, + [Species.MAGNEMITE]: EggTier.RARE, + [Species.FARFETCHD]: EggTier.COMMON, + [Species.DODUO]: EggTier.COMMON, + [Species.SEEL]: EggTier.COMMON, + [Species.GRIMER]: EggTier.COMMON, + [Species.SHELLDER]: EggTier.RARE, + [Species.GASTLY]: EggTier.RARE, + [Species.ONIX]: EggTier.COMMON, + [Species.DROWZEE]: EggTier.COMMON, + [Species.KRABBY]: EggTier.COMMON, + [Species.VOLTORB]: EggTier.COMMON, + [Species.EXEGGCUTE]: EggTier.COMMON, + [Species.CUBONE]: EggTier.COMMON, + [Species.HITMONLEE]: EggTier.RARE, + [Species.HITMONCHAN]: EggTier.RARE, + [Species.LICKITUNG]: EggTier.COMMON, + [Species.KOFFING]: EggTier.COMMON, + [Species.RHYHORN]: EggTier.COMMON, + [Species.CHANSEY]: EggTier.COMMON, + [Species.TANGELA]: EggTier.COMMON, + [Species.KANGASKHAN]: EggTier.RARE, + [Species.HORSEA]: EggTier.COMMON, + [Species.GOLDEEN]: EggTier.COMMON, + [Species.STARYU]: EggTier.COMMON, + [Species.MR_MIME]: EggTier.COMMON, + [Species.SCYTHER]: EggTier.RARE, + [Species.JYNX]: EggTier.RARE, + [Species.ELECTABUZZ]: EggTier.RARE, + [Species.MAGMAR]: EggTier.RARE, + [Species.PINSIR]: EggTier.RARE, + [Species.TAUROS]: EggTier.RARE, + [Species.MAGIKARP]: EggTier.RARE, + [Species.LAPRAS]: EggTier.RARE, + [Species.DITTO]: EggTier.COMMON, + [Species.EEVEE]: EggTier.COMMON, + [Species.PORYGON]: EggTier.RARE, + [Species.OMANYTE]: EggTier.COMMON, + [Species.KABUTO]: EggTier.COMMON, + [Species.AERODACTYL]: EggTier.RARE, + [Species.SNORLAX]: EggTier.RARE, + [Species.ARTICUNO]: EggTier.EPIC, + [Species.ZAPDOS]: EggTier.EPIC, + [Species.MOLTRES]: EggTier.EPIC, + [Species.DRATINI]: EggTier.RARE, + [Species.MEWTWO]: EggTier.LEGENDARY, + [Species.MEW]: EggTier.EPIC, + + [Species.CHIKORITA]: EggTier.COMMON, + [Species.CYNDAQUIL]: EggTier.COMMON, + [Species.TOTODILE]: EggTier.COMMON, + [Species.SENTRET]: EggTier.COMMON, + [Species.HOOTHOOT]: EggTier.COMMON, + [Species.LEDYBA]: EggTier.COMMON, + [Species.SPINARAK]: EggTier.COMMON, + [Species.CHINCHOU]: EggTier.COMMON, + [Species.PICHU]: EggTier.COMMON, + [Species.CLEFFA]: EggTier.COMMON, + [Species.IGGLYBUFF]: EggTier.COMMON, + [Species.TOGEPI]: EggTier.COMMON, + [Species.NATU]: EggTier.COMMON, + [Species.MAREEP]: EggTier.COMMON, + [Species.MARILL]: EggTier.RARE, + [Species.SUDOWOODO]: EggTier.COMMON, + [Species.HOPPIP]: EggTier.COMMON, + [Species.AIPOM]: EggTier.COMMON, + [Species.SUNKERN]: EggTier.COMMON, + [Species.YANMA]: EggTier.COMMON, + [Species.WOOPER]: EggTier.COMMON, + [Species.MURKROW]: EggTier.COMMON, + [Species.MISDREAVUS]: EggTier.COMMON, + [Species.UNOWN]: EggTier.COMMON, + [Species.WOBBUFFET]: EggTier.COMMON, + [Species.GIRAFARIG]: EggTier.COMMON, + [Species.PINECO]: EggTier.COMMON, + [Species.DUNSPARCE]: EggTier.COMMON, + [Species.GLIGAR]: EggTier.COMMON, + [Species.SNUBBULL]: EggTier.COMMON, + [Species.QWILFISH]: EggTier.COMMON, + [Species.SHUCKLE]: EggTier.COMMON, + [Species.HERACROSS]: EggTier.RARE, + [Species.SNEASEL]: EggTier.RARE, + [Species.TEDDIURSA]: EggTier.RARE, + [Species.SLUGMA]: EggTier.COMMON, + [Species.SWINUB]: EggTier.COMMON, + [Species.CORSOLA]: EggTier.COMMON, + [Species.REMORAID]: EggTier.COMMON, + [Species.DELIBIRD]: EggTier.COMMON, + [Species.MANTINE]: EggTier.COMMON, + [Species.SKARMORY]: EggTier.RARE, + [Species.HOUNDOUR]: EggTier.COMMON, + [Species.PHANPY]: EggTier.COMMON, + [Species.STANTLER]: EggTier.COMMON, + [Species.SMEARGLE]: EggTier.COMMON, + [Species.TYROGUE]: EggTier.COMMON, + [Species.SMOOCHUM]: EggTier.COMMON, + [Species.ELEKID]: EggTier.COMMON, + [Species.MAGBY]: EggTier.COMMON, + [Species.MILTANK]: EggTier.RARE, + [Species.RAIKOU]: EggTier.EPIC, + [Species.ENTEI]: EggTier.EPIC, + [Species.SUICUNE]: EggTier.EPIC, + [Species.LARVITAR]: EggTier.RARE, + [Species.LUGIA]: EggTier.LEGENDARY, + [Species.HO_OH]: EggTier.LEGENDARY, + [Species.CELEBI]: EggTier.EPIC, + + [Species.TREECKO]: EggTier.COMMON, + [Species.TORCHIC]: EggTier.RARE, + [Species.MUDKIP]: EggTier.COMMON, + [Species.POOCHYENA]: EggTier.COMMON, + [Species.ZIGZAGOON]: EggTier.COMMON, + [Species.WURMPLE]: EggTier.COMMON, + [Species.LOTAD]: EggTier.COMMON, + [Species.SEEDOT]: EggTier.COMMON, + [Species.TAILLOW]: EggTier.COMMON, + [Species.WINGULL]: EggTier.COMMON, + [Species.RALTS]: EggTier.COMMON, + [Species.SURSKIT]: EggTier.COMMON, + [Species.SHROOMISH]: EggTier.COMMON, + [Species.SLAKOTH]: EggTier.RARE, + [Species.NINCADA]: EggTier.RARE, + [Species.WHISMUR]: EggTier.COMMON, + [Species.MAKUHITA]: EggTier.COMMON, + [Species.AZURILL]: EggTier.RARE, + [Species.NOSEPASS]: EggTier.COMMON, + [Species.SKITTY]: EggTier.COMMON, + [Species.SABLEYE]: EggTier.COMMON, + [Species.MAWILE]: EggTier.COMMON, + [Species.ARON]: EggTier.COMMON, + [Species.MEDITITE]: EggTier.COMMON, + [Species.ELECTRIKE]: EggTier.COMMON, + [Species.PLUSLE]: EggTier.COMMON, + [Species.MINUN]: EggTier.COMMON, + [Species.VOLBEAT]: EggTier.COMMON, + [Species.ILLUMISE]: EggTier.COMMON, + [Species.ROSELIA]: EggTier.COMMON, + [Species.GULPIN]: EggTier.COMMON, + [Species.CARVANHA]: EggTier.COMMON, + [Species.WAILMER]: EggTier.COMMON, + [Species.NUMEL]: EggTier.COMMON, + [Species.TORKOAL]: EggTier.COMMON, + [Species.SPOINK]: EggTier.COMMON, + [Species.SPINDA]: EggTier.COMMON, + [Species.TRAPINCH]: EggTier.COMMON, + [Species.CACNEA]: EggTier.COMMON, + [Species.SWABLU]: EggTier.COMMON, + [Species.ZANGOOSE]: EggTier.RARE, + [Species.SEVIPER]: EggTier.COMMON, + [Species.LUNATONE]: EggTier.COMMON, + [Species.SOLROCK]: EggTier.COMMON, + [Species.BARBOACH]: EggTier.COMMON, + [Species.CORPHISH]: EggTier.COMMON, + [Species.BALTOY]: EggTier.COMMON, + [Species.LILEEP]: EggTier.COMMON, + [Species.ANORITH]: EggTier.COMMON, + [Species.FEEBAS]: EggTier.RARE, + [Species.CASTFORM]: EggTier.COMMON, + [Species.KECLEON]: EggTier.COMMON, + [Species.SHUPPET]: EggTier.COMMON, + [Species.DUSKULL]: EggTier.COMMON, + [Species.TROPIUS]: EggTier.COMMON, + [Species.CHIMECHO]: EggTier.COMMON, + [Species.ABSOL]: EggTier.RARE, + [Species.WYNAUT]: EggTier.COMMON, + [Species.SNORUNT]: EggTier.COMMON, + [Species.SPHEAL]: EggTier.COMMON, + [Species.CLAMPERL]: EggTier.COMMON, + [Species.RELICANTH]: EggTier.COMMON, + [Species.LUVDISC]: EggTier.COMMON, + [Species.BAGON]: EggTier.RARE, + [Species.BELDUM]: EggTier.RARE, + [Species.REGIROCK]: EggTier.EPIC, + [Species.REGICE]: EggTier.EPIC, + [Species.REGISTEEL]: EggTier.EPIC, + [Species.LATIAS]: EggTier.EPIC, + [Species.LATIOS]: EggTier.EPIC, + [Species.KYOGRE]: EggTier.LEGENDARY, + [Species.GROUDON]: EggTier.LEGENDARY, + [Species.RAYQUAZA]: EggTier.LEGENDARY, + [Species.JIRACHI]: EggTier.EPIC, + [Species.DEOXYS]: EggTier.EPIC, + + [Species.TURTWIG]: EggTier.COMMON, + [Species.CHIMCHAR]: EggTier.COMMON, + [Species.PIPLUP]: EggTier.COMMON, + [Species.STARLY]: EggTier.COMMON, + [Species.BIDOOF]: EggTier.COMMON, + [Species.KRICKETOT]: EggTier.COMMON, + [Species.SHINX]: EggTier.COMMON, + [Species.BUDEW]: EggTier.COMMON, + [Species.CRANIDOS]: EggTier.COMMON, + [Species.SHIELDON]: EggTier.COMMON, + [Species.BURMY]: EggTier.COMMON, + [Species.COMBEE]: EggTier.COMMON, + [Species.PACHIRISU]: EggTier.COMMON, + [Species.BUIZEL]: EggTier.COMMON, + [Species.CHERUBI]: EggTier.COMMON, + [Species.SHELLOS]: EggTier.COMMON, + [Species.DRIFLOON]: EggTier.COMMON, + [Species.BUNEARY]: EggTier.COMMON, + [Species.GLAMEOW]: EggTier.COMMON, + [Species.CHINGLING]: EggTier.COMMON, + [Species.STUNKY]: EggTier.COMMON, + [Species.BRONZOR]: EggTier.COMMON, + [Species.BONSLY]: EggTier.COMMON, + [Species.MIME_JR]: EggTier.COMMON, + [Species.HAPPINY]: EggTier.COMMON, + [Species.CHATOT]: EggTier.COMMON, + [Species.SPIRITOMB]: EggTier.RARE, + [Species.GIBLE]: EggTier.RARE, + [Species.MUNCHLAX]: EggTier.RARE, + [Species.RIOLU]: EggTier.COMMON, + [Species.HIPPOPOTAS]: EggTier.COMMON, + [Species.SKORUPI]: EggTier.COMMON, + [Species.CROAGUNK]: EggTier.COMMON, + [Species.CARNIVINE]: EggTier.COMMON, + [Species.FINNEON]: EggTier.COMMON, + [Species.MANTYKE]: EggTier.COMMON, + [Species.SNOVER]: EggTier.COMMON, + [Species.ROTOM]: EggTier.RARE, + [Species.UXIE]: EggTier.EPIC, + [Species.MESPRIT]: EggTier.EPIC, + [Species.AZELF]: EggTier.EPIC, + [Species.DIALGA]: EggTier.LEGENDARY, + [Species.PALKIA]: EggTier.LEGENDARY, + [Species.HEATRAN]: EggTier.EPIC, + [Species.REGIGIGAS]: EggTier.EPIC, + [Species.GIRATINA]: EggTier.LEGENDARY, + [Species.CRESSELIA]: EggTier.EPIC, + [Species.PHIONE]: EggTier.RARE, + [Species.MANAPHY]: EggTier.EPIC, + [Species.DARKRAI]: EggTier.EPIC, + [Species.SHAYMIN]: EggTier.EPIC, + [Species.ARCEUS]: EggTier.LEGENDARY, + + [Species.VICTINI]: EggTier.EPIC, + [Species.SNIVY]: EggTier.COMMON, + [Species.TEPIG]: EggTier.COMMON, + [Species.OSHAWOTT]: EggTier.COMMON, + [Species.PATRAT]: EggTier.COMMON, + [Species.LILLIPUP]: EggTier.COMMON, + [Species.PURRLOIN]: EggTier.COMMON, + [Species.PANSAGE]: EggTier.COMMON, + [Species.PANSEAR]: EggTier.COMMON, + [Species.PANPOUR]: EggTier.COMMON, + [Species.MUNNA]: EggTier.COMMON, + [Species.PIDOVE]: EggTier.COMMON, + [Species.BLITZLE]: EggTier.COMMON, + [Species.ROGGENROLA]: EggTier.COMMON, + [Species.WOOBAT]: EggTier.COMMON, + [Species.DRILBUR]: EggTier.RARE, + [Species.AUDINO]: EggTier.COMMON, + [Species.TIMBURR]: EggTier.RARE, + [Species.TYMPOLE]: EggTier.COMMON, + [Species.THROH]: EggTier.RARE, + [Species.SAWK]: EggTier.RARE, + [Species.SEWADDLE]: EggTier.COMMON, + [Species.VENIPEDE]: EggTier.COMMON, + [Species.COTTONEE]: EggTier.COMMON, + [Species.PETILIL]: EggTier.COMMON, + [Species.BASCULIN]: EggTier.RARE, + [Species.SANDILE]: EggTier.RARE, + [Species.DARUMAKA]: EggTier.RARE, + [Species.MARACTUS]: EggTier.COMMON, + [Species.DWEBBLE]: EggTier.COMMON, + [Species.SCRAGGY]: EggTier.COMMON, + [Species.SIGILYPH]: EggTier.RARE, + [Species.YAMASK]: EggTier.COMMON, + [Species.TIRTOUGA]: EggTier.COMMON, + [Species.ARCHEN]: EggTier.COMMON, + [Species.TRUBBISH]: EggTier.COMMON, + [Species.ZORUA]: EggTier.COMMON, + [Species.MINCCINO]: EggTier.COMMON, + [Species.GOTHITA]: EggTier.COMMON, + [Species.SOLOSIS]: EggTier.COMMON, + [Species.DUCKLETT]: EggTier.COMMON, + [Species.VANILLITE]: EggTier.COMMON, + [Species.DEERLING]: EggTier.COMMON, + [Species.EMOLGA]: EggTier.COMMON, + [Species.KARRABLAST]: EggTier.COMMON, + [Species.FOONGUS]: EggTier.COMMON, + [Species.FRILLISH]: EggTier.COMMON, + [Species.ALOMOMOLA]: EggTier.RARE, + [Species.JOLTIK]: EggTier.COMMON, + [Species.FERROSEED]: EggTier.COMMON, + [Species.KLINK]: EggTier.COMMON, + [Species.TYNAMO]: EggTier.COMMON, + [Species.ELGYEM]: EggTier.COMMON, + [Species.LITWICK]: EggTier.COMMON, + [Species.AXEW]: EggTier.RARE, + [Species.CUBCHOO]: EggTier.COMMON, + [Species.CRYOGONAL]: EggTier.RARE, + [Species.SHELMET]: EggTier.COMMON, + [Species.STUNFISK]: EggTier.COMMON, + [Species.MIENFOO]: EggTier.COMMON, + [Species.DRUDDIGON]: EggTier.RARE, + [Species.GOLETT]: EggTier.COMMON, + [Species.PAWNIARD]: EggTier.RARE, + [Species.BOUFFALANT]: EggTier.RARE, + [Species.RUFFLET]: EggTier.COMMON, + [Species.VULLABY]: EggTier.COMMON, + [Species.HEATMOR]: EggTier.COMMON, + [Species.DURANT]: EggTier.RARE, + [Species.DEINO]: EggTier.RARE, + [Species.LARVESTA]: EggTier.RARE, + [Species.COBALION]: EggTier.EPIC, + [Species.TERRAKION]: EggTier.EPIC, + [Species.VIRIZION]: EggTier.EPIC, + [Species.TORNADUS]: EggTier.EPIC, + [Species.THUNDURUS]: EggTier.EPIC, + [Species.RESHIRAM]: EggTier.LEGENDARY, + [Species.ZEKROM]: EggTier.LEGENDARY, + [Species.LANDORUS]: EggTier.EPIC, + [Species.KYUREM]: EggTier.LEGENDARY, + [Species.KELDEO]: EggTier.EPIC, + [Species.MELOETTA]: EggTier.EPIC, + [Species.GENESECT]: EggTier.EPIC, + + [Species.CHESPIN]: EggTier.COMMON, + [Species.FENNEKIN]: EggTier.COMMON, + [Species.FROAKIE]: EggTier.RARE, + [Species.BUNNELBY]: EggTier.COMMON, + [Species.FLETCHLING]: EggTier.COMMON, + [Species.SCATTERBUG]: EggTier.COMMON, + [Species.LITLEO]: EggTier.COMMON, + [Species.FLABEBE]: EggTier.COMMON, + [Species.SKIDDO]: EggTier.COMMON, + [Species.PANCHAM]: EggTier.COMMON, + [Species.FURFROU]: EggTier.COMMON, + [Species.ESPURR]: EggTier.COMMON, + [Species.HONEDGE]: EggTier.RARE, + [Species.SPRITZEE]: EggTier.COMMON, + [Species.SWIRLIX]: EggTier.COMMON, + [Species.INKAY]: EggTier.COMMON, + [Species.BINACLE]: EggTier.COMMON, + [Species.SKRELP]: EggTier.COMMON, + [Species.CLAUNCHER]: EggTier.COMMON, + [Species.HELIOPTILE]: EggTier.COMMON, + [Species.TYRUNT]: EggTier.COMMON, + [Species.AMAURA]: EggTier.COMMON, + [Species.HAWLUCHA]: EggTier.RARE, + [Species.DEDENNE]: EggTier.COMMON, + [Species.CARBINK]: EggTier.COMMON, + [Species.GOOMY]: EggTier.RARE, + [Species.KLEFKI]: EggTier.COMMON, + [Species.PHANTUMP]: EggTier.COMMON, + [Species.PUMPKABOO]: EggTier.COMMON, + [Species.BERGMITE]: EggTier.COMMON, + [Species.NOIBAT]: EggTier.COMMON, + [Species.XERNEAS]: EggTier.LEGENDARY, + [Species.YVELTAL]: EggTier.LEGENDARY, + [Species.ZYGARDE]: EggTier.LEGENDARY, + [Species.DIANCIE]: EggTier.EPIC, + [Species.HOOPA]: EggTier.EPIC, + [Species.VOLCANION]: EggTier.EPIC, + [Species.ETERNAL_FLOETTE]: EggTier.RARE, + + [Species.ROWLET]: EggTier.COMMON, + [Species.LITTEN]: EggTier.COMMON, + [Species.POPPLIO]: EggTier.RARE, + [Species.PIKIPEK]: EggTier.COMMON, + [Species.YUNGOOS]: EggTier.COMMON, + [Species.GRUBBIN]: EggTier.COMMON, + [Species.CRABRAWLER]: EggTier.COMMON, + [Species.ORICORIO]: EggTier.COMMON, + [Species.CUTIEFLY]: EggTier.COMMON, + [Species.ROCKRUFF]: EggTier.COMMON, + [Species.WISHIWASHI]: EggTier.COMMON, + [Species.MAREANIE]: EggTier.COMMON, + [Species.MUDBRAY]: EggTier.COMMON, + [Species.DEWPIDER]: EggTier.COMMON, + [Species.FOMANTIS]: EggTier.COMMON, + [Species.MORELULL]: EggTier.COMMON, + [Species.SALANDIT]: EggTier.COMMON, + [Species.STUFFUL]: EggTier.COMMON, + [Species.BOUNSWEET]: EggTier.COMMON, + [Species.COMFEY]: EggTier.RARE, + [Species.ORANGURU]: EggTier.RARE, + [Species.PASSIMIAN]: EggTier.RARE, + [Species.WIMPOD]: EggTier.COMMON, + [Species.SANDYGAST]: EggTier.COMMON, + [Species.PYUKUMUKU]: EggTier.COMMON, + [Species.TYPE_NULL]: EggTier.RARE, + [Species.MINIOR]: EggTier.RARE, + [Species.KOMALA]: EggTier.COMMON, + [Species.TURTONATOR]: EggTier.RARE, + [Species.TOGEDEMARU]: EggTier.COMMON, + [Species.MIMIKYU]: EggTier.RARE, + [Species.BRUXISH]: EggTier.RARE, + [Species.DRAMPA]: EggTier.RARE, + [Species.DHELMISE]: EggTier.RARE, + [Species.JANGMO_O]: EggTier.RARE, + [Species.TAPU_KOKO]: EggTier.EPIC, + [Species.TAPU_LELE]: EggTier.EPIC, + [Species.TAPU_BULU]: EggTier.EPIC, + [Species.TAPU_FINI]: EggTier.EPIC, + [Species.COSMOG]: EggTier.EPIC, + [Species.NIHILEGO]: EggTier.EPIC, + [Species.BUZZWOLE]: EggTier.EPIC, + [Species.PHEROMOSA]: EggTier.EPIC, + [Species.XURKITREE]: EggTier.EPIC, + [Species.CELESTEELA]: EggTier.EPIC, + [Species.KARTANA]: EggTier.EPIC, + [Species.GUZZLORD]: EggTier.EPIC, + [Species.NECROZMA]: EggTier.LEGENDARY, + [Species.MAGEARNA]: EggTier.EPIC, + [Species.MARSHADOW]: EggTier.EPIC, + [Species.POIPOLE]: EggTier.EPIC, + [Species.STAKATAKA]: EggTier.EPIC, + [Species.BLACEPHALON]: EggTier.EPIC, + [Species.ZERAORA]: EggTier.EPIC, + [Species.MELTAN]: EggTier.EPIC, + [Species.ALOLA_RATTATA]: EggTier.COMMON, + [Species.ALOLA_SANDSHREW]: EggTier.COMMON, + [Species.ALOLA_VULPIX]: EggTier.COMMON, + [Species.ALOLA_DIGLETT]: EggTier.COMMON, + [Species.ALOLA_MEOWTH]: EggTier.COMMON, + [Species.ALOLA_GEODUDE]: EggTier.COMMON, + [Species.ALOLA_GRIMER]: EggTier.COMMON, + + [Species.GROOKEY]: EggTier.COMMON, + [Species.SCORBUNNY]: EggTier.RARE, + [Species.SOBBLE]: EggTier.COMMON, + [Species.SKWOVET]: EggTier.COMMON, + [Species.ROOKIDEE]: EggTier.COMMON, + [Species.BLIPBUG]: EggTier.COMMON, + [Species.NICKIT]: EggTier.COMMON, + [Species.GOSSIFLEUR]: EggTier.COMMON, + [Species.WOOLOO]: EggTier.COMMON, + [Species.CHEWTLE]: EggTier.COMMON, + [Species.YAMPER]: EggTier.COMMON, + [Species.ROLYCOLY]: EggTier.COMMON, + [Species.APPLIN]: EggTier.COMMON, + [Species.SILICOBRA]: EggTier.COMMON, + [Species.CRAMORANT]: EggTier.COMMON, + [Species.ARROKUDA]: EggTier.COMMON, + [Species.TOXEL]: EggTier.COMMON, + [Species.SIZZLIPEDE]: EggTier.COMMON, + [Species.CLOBBOPUS]: EggTier.COMMON, + [Species.SINISTEA]: EggTier.COMMON, + [Species.HATENNA]: EggTier.COMMON, + [Species.IMPIDIMP]: EggTier.COMMON, + [Species.MILCERY]: EggTier.COMMON, + [Species.FALINKS]: EggTier.RARE, + [Species.PINCURCHIN]: EggTier.COMMON, + [Species.SNOM]: EggTier.COMMON, + [Species.STONJOURNER]: EggTier.COMMON, + [Species.EISCUE]: EggTier.COMMON, + [Species.INDEEDEE]: EggTier.RARE, + [Species.MORPEKO]: EggTier.COMMON, + [Species.CUFANT]: EggTier.COMMON, + [Species.DRACOZOLT]: EggTier.RARE, + [Species.ARCTOZOLT]: EggTier.RARE, + [Species.DRACOVISH]: EggTier.RARE, + [Species.ARCTOVISH]: EggTier.RARE, + [Species.DURALUDON]: EggTier.RARE, + [Species.DREEPY]: EggTier.RARE, + [Species.ZACIAN]: EggTier.LEGENDARY, + [Species.ZAMAZENTA]: EggTier.LEGENDARY, + [Species.ETERNATUS]: EggTier.COMMON, + [Species.KUBFU]: EggTier.EPIC, + [Species.ZARUDE]: EggTier.EPIC, + [Species.REGIELEKI]: EggTier.EPIC, + [Species.REGIDRAGO]: EggTier.EPIC, + [Species.GLASTRIER]: EggTier.EPIC, + [Species.SPECTRIER]: EggTier.EPIC, + [Species.CALYREX]: EggTier.LEGENDARY, + [Species.GALAR_MEOWTH]: EggTier.COMMON, + [Species.GALAR_PONYTA]: EggTier.COMMON, + [Species.GALAR_SLOWPOKE]: EggTier.COMMON, + [Species.GALAR_FARFETCHD]: EggTier.COMMON, + [Species.GALAR_CORSOLA]: EggTier.COMMON, + [Species.GALAR_ZIGZAGOON]: EggTier.COMMON, + [Species.GALAR_DARUMAKA]: EggTier.RARE, + [Species.GALAR_YAMASK]: EggTier.COMMON, + [Species.GALAR_STUNFISK]: EggTier.COMMON, + [Species.GALAR_MR_MIME]: EggTier.COMMON, + [Species.GALAR_ARTICUNO]: EggTier.EPIC, + [Species.GALAR_ZAPDOS]: EggTier.EPIC, + [Species.GALAR_MOLTRES]: EggTier.EPIC, + [Species.HISUI_GROWLITHE]: EggTier.RARE, + [Species.HISUI_VOLTORB]: EggTier.COMMON, + [Species.HISUI_QWILFISH]: EggTier.RARE, + [Species.HISUI_SNEASEL]: EggTier.RARE, + [Species.HISUI_ZORUA]: EggTier.COMMON, + [Species.ENAMORUS]: EggTier.EPIC, + + [Species.SPRIGATITO]: EggTier.RARE, + [Species.FUECOCO]: EggTier.RARE, + [Species.QUAXLY]: EggTier.RARE, + [Species.LECHONK]: EggTier.COMMON, + [Species.TAROUNTULA]: EggTier.COMMON, + [Species.NYMBLE]: EggTier.COMMON, + [Species.PAWMI]: EggTier.COMMON, + [Species.TANDEMAUS]: EggTier.RARE, + [Species.FIDOUGH]: EggTier.COMMON, + [Species.SMOLIV]: EggTier.COMMON, + [Species.SQUAWKABILLY]: EggTier.COMMON, + [Species.NACLI]: EggTier.RARE, + [Species.CHARCADET]: EggTier.RARE, + [Species.TADBULB]: EggTier.COMMON, + [Species.WATTREL]: EggTier.COMMON, + [Species.MASCHIFF]: EggTier.COMMON, + [Species.SHROODLE]: EggTier.COMMON, + [Species.BRAMBLIN]: EggTier.COMMON, + [Species.TOEDSCOOL]: EggTier.COMMON, + [Species.KLAWF]: EggTier.COMMON, + [Species.CAPSAKID]: EggTier.COMMON, + [Species.RELLOR]: EggTier.COMMON, + [Species.FLITTLE]: EggTier.COMMON, + [Species.TINKATINK]: EggTier.RARE, + [Species.WIGLETT]: EggTier.COMMON, + [Species.BOMBIRDIER]: EggTier.COMMON, + [Species.FINIZEN]: EggTier.COMMON, + [Species.VAROOM]: EggTier.RARE, + [Species.CYCLIZAR]: EggTier.RARE, + [Species.ORTHWORM]: EggTier.RARE, + [Species.GLIMMET]: EggTier.RARE, + [Species.GREAVARD]: EggTier.COMMON, + [Species.FLAMIGO]: EggTier.RARE, + [Species.CETODDLE]: EggTier.COMMON, + [Species.VELUZA]: EggTier.RARE, + [Species.DONDOZO]: EggTier.RARE, + [Species.TATSUGIRI]: EggTier.RARE, + [Species.GREAT_TUSK]: EggTier.EPIC, + [Species.SCREAM_TAIL]: EggTier.EPIC, + [Species.BRUTE_BONNET]: EggTier.EPIC, + [Species.FLUTTER_MANE]: EggTier.EPIC, + [Species.SLITHER_WING]: EggTier.EPIC, + [Species.SANDY_SHOCKS]: EggTier.EPIC, + [Species.IRON_TREADS]: EggTier.EPIC, + [Species.IRON_BUNDLE]: EggTier.EPIC, + [Species.IRON_HANDS]: EggTier.EPIC, + [Species.IRON_JUGULIS]: EggTier.EPIC, + [Species.IRON_MOTH]: EggTier.EPIC, + [Species.IRON_THORNS]: EggTier.EPIC, + [Species.FRIGIBAX]: EggTier.RARE, + [Species.GIMMIGHOUL]: EggTier.RARE, + [Species.WO_CHIEN]: EggTier.EPIC, + [Species.CHIEN_PAO]: EggTier.EPIC, + [Species.TING_LU]: EggTier.EPIC, + [Species.CHI_YU]: EggTier.EPIC, + [Species.ROARING_MOON]: EggTier.EPIC, + [Species.IRON_VALIANT]: EggTier.EPIC, + [Species.KORAIDON]: EggTier.LEGENDARY, + [Species.MIRAIDON]: EggTier.LEGENDARY, + [Species.WALKING_WAKE]: EggTier.EPIC, + [Species.IRON_LEAVES]: EggTier.EPIC, + [Species.POLTCHAGEIST]: EggTier.RARE, + [Species.OKIDOGI]: EggTier.EPIC, + [Species.MUNKIDORI]: EggTier.EPIC, + [Species.FEZANDIPITI]: EggTier.EPIC, + [Species.OGERPON]: EggTier.EPIC, + [Species.GOUGING_FIRE]: EggTier.EPIC, + [Species.RAGING_BOLT]: EggTier.EPIC, + [Species.IRON_BOULDER]: EggTier.EPIC, + [Species.IRON_CROWN]: EggTier.EPIC, + [Species.TERAPAGOS]: EggTier.LEGENDARY, + [Species.PECHARUNT]: EggTier.EPIC, + [Species.PALDEA_TAUROS]: EggTier.RARE, + [Species.PALDEA_WOOPER]: EggTier.COMMON, + [Species.BLOODMOON_URSALUNA]: EggTier.EPIC, +}; diff --git a/src/data/egg.ts b/src/data/egg.ts index 5fffe4fcece..c475fc729e6 100644 --- a/src/data/egg.ts +++ b/src/data/egg.ts @@ -11,6 +11,7 @@ import { EggTier } from "#enums/egg-type"; import { Species } from "#enums/species"; import { EggSourceType } from "#enums/egg-source-types"; import { MANAPHY_EGG_MANAPHY_RATE, SAME_SPECIES_EGG_HA_RATE, GACHA_EGG_HA_RATE, GACHA_DEFAULT_RARE_EGGMOVE_RATE, SAME_SPECIES_EGG_RARE_EGGMOVE_RATE, GACHA_MOVE_UP_RARE_EGGMOVE_RATE, GACHA_DEFAULT_SHINY_RATE, GACHA_SHINY_UP_SHINY_RATE, SAME_SPECIES_EGG_SHINY_RATE, EGG_PITY_LEGENDARY_THRESHOLD, EGG_PITY_EPIC_THRESHOLD, EGG_PITY_RARE_THRESHOLD, SHINY_VARIANT_CHANCE, SHINY_EPIC_CHANCE, GACHA_DEFAULT_COMMON_EGG_THRESHOLD, GACHA_DEFAULT_RARE_EGG_THRESHOLD, GACHA_DEFAULT_EPIC_EGG_THRESHOLD, GACHA_LEGENDARY_UP_THRESHOLD_OFFSET, HATCH_WAVES_MANAPHY_EGG, HATCH_WAVES_COMMON_EGG, HATCH_WAVES_RARE_EGG, HATCH_WAVES_EPIC_EGG, HATCH_WAVES_LEGENDARY_EGG } from "#app/data/balance/rates"; +import { speciesEggTiers } from "#app/data/balance/species-egg-tiers"; export const EGG_SEED = 1073741824; @@ -160,7 +161,7 @@ export class Egg { // Override egg tier and hatchwaves if species was given if (eggOptions?.species) { - this._tier = this.getEggTierFromSpeciesStarterValue(); + this._tier = this.getEggTier(); this._hatchWaves = eggOptions.hatchWaves ?? this.getEggTierDefaultHatchWaves(); } // If species has no variant, set variantTier to common. This needs to @@ -261,11 +262,11 @@ export class Egg { return "Manaphy"; } switch (this.tier) { - case EggTier.GREAT: + case EggTier.RARE: return i18next.t("egg:greatTier"); - case EggTier.ULTRA: + case EggTier.EPIC: return i18next.t("egg:ultraTier"); - case EggTier.MASTER: + case EggTier.LEGENDARY: return i18next.t("egg:masterTier"); default: return i18next.t("egg:defaultTier"); @@ -336,9 +337,9 @@ export class Egg { switch (eggTier ?? this._tier) { case EggTier.COMMON: return HATCH_WAVES_COMMON_EGG; - case EggTier.GREAT: + case EggTier.RARE: return HATCH_WAVES_RARE_EGG; - case EggTier.ULTRA: + case EggTier.EPIC: return HATCH_WAVES_EPIC_EGG; } return HATCH_WAVES_LEGENDARY_EGG; @@ -347,7 +348,7 @@ export class Egg { private rollEggTier(): EggTier { const tierValueOffset = this._sourceType === EggSourceType.GACHA_LEGENDARY ? GACHA_LEGENDARY_UP_THRESHOLD_OFFSET : 0; const tierValue = Utils.randInt(256); - return tierValue >= GACHA_DEFAULT_COMMON_EGG_THRESHOLD + tierValueOffset ? EggTier.COMMON : tierValue >= GACHA_DEFAULT_RARE_EGG_THRESHOLD + tierValueOffset ? EggTier.GREAT : tierValue >= GACHA_DEFAULT_EPIC_EGG_THRESHOLD + tierValueOffset ? EggTier.ULTRA : EggTier.MASTER; + return tierValue >= GACHA_DEFAULT_COMMON_EGG_THRESHOLD + tierValueOffset ? EggTier.COMMON : tierValue >= GACHA_DEFAULT_RARE_EGG_THRESHOLD + tierValueOffset ? EggTier.RARE : tierValue >= GACHA_DEFAULT_EPIC_EGG_THRESHOLD + tierValueOffset ? EggTier.EPIC : EggTier.LEGENDARY; } private rollSpecies(scene: BattleScene): Species | null { @@ -367,7 +368,7 @@ export class Egg { */ const rand = (Utils.randSeedInt(MANAPHY_EGG_MANAPHY_RATE) !== 1); return rand ? Species.PHIONE : Species.MANAPHY; - } else if (this.tier === EggTier.MASTER + } else if (this.tier === EggTier.LEGENDARY && this._sourceType === EggSourceType.GACHA_LEGENDARY) { if (!Utils.randSeedInt(2)) { return getLegendaryGachaSpeciesForTimestamp(scene, this.timestamp); @@ -378,15 +379,15 @@ export class Egg { let maxStarterValue: integer; switch (this.tier) { - case EggTier.GREAT: + case EggTier.RARE: minStarterValue = 4; maxStarterValue = 5; break; - case EggTier.ULTRA: + case EggTier.EPIC: minStarterValue = 6; maxStarterValue = 7; break; - case EggTier.MASTER: + case EggTier.LEGENDARY: minStarterValue = 8; maxStarterValue = 9; break; @@ -398,8 +399,8 @@ export class Egg { const ignoredSpecies = [ Species.PHIONE, Species.MANAPHY, Species.ETERNATUS ]; - let speciesPool = Object.keys(speciesStarterCosts) - .filter(s => speciesStarterCosts[s] >= minStarterValue && speciesStarterCosts[s] <= maxStarterValue) + let speciesPool = Object.keys(speciesEggTiers) + .filter(s => speciesEggTiers[s] === this.tier) .map(s => parseInt(s) as Species) .filter(s => !pokemonPrevolutions.hasOwnProperty(s) && getPokemonSpecies(s).isObtainable() && ignoredSpecies.indexOf(s) === -1); @@ -430,7 +431,9 @@ export class Egg { let totalWeight = 0; const speciesWeights : number[] = []; for (const speciesId of speciesPool) { - let weight = Math.floor((((maxStarterValue - speciesStarterCosts[speciesId]) / ((maxStarterValue - minStarterValue) + 1)) * 1.5 + 1) * 100); + // Accounts for species that have starter costs outside of the normal range for their EggTier + const speciesCostClamped = Phaser.Math.Clamp(speciesStarterCosts[speciesId], minStarterValue, maxStarterValue); + let weight = Math.floor((((maxStarterValue - speciesCostClamped) / ((maxStarterValue - minStarterValue) + 1)) * 1.5 + 1) * 100); const species = getPokemonSpecies(speciesId); if (species.isRegional()) { weight = Math.floor(weight / 2); @@ -498,16 +501,16 @@ export class Egg { private checkForPityTierOverrides(scene: BattleScene): void { const tierValueOffset = this._sourceType === EggSourceType.GACHA_LEGENDARY ? GACHA_LEGENDARY_UP_THRESHOLD_OFFSET : 0; - scene.gameData.eggPity[EggTier.GREAT] += 1; - scene.gameData.eggPity[EggTier.ULTRA] += 1; - scene.gameData.eggPity[EggTier.MASTER] += 1 + tierValueOffset; + scene.gameData.eggPity[EggTier.RARE] += 1; + scene.gameData.eggPity[EggTier.EPIC] += 1; + scene.gameData.eggPity[EggTier.LEGENDARY] += 1 + tierValueOffset; // These numbers are roughly the 80% mark. That is, 80% of the time you'll get an egg before this gets triggered. - if (scene.gameData.eggPity[EggTier.MASTER] >= EGG_PITY_LEGENDARY_THRESHOLD && this._tier === EggTier.COMMON) { - this._tier = EggTier.MASTER; - } else if (scene.gameData.eggPity[EggTier.ULTRA] >= EGG_PITY_EPIC_THRESHOLD && this._tier === EggTier.COMMON) { - this._tier = EggTier.ULTRA; - } else if (scene.gameData.eggPity[EggTier.GREAT] >= EGG_PITY_RARE_THRESHOLD && this._tier === EggTier.COMMON) { - this._tier = EggTier.GREAT; + if (scene.gameData.eggPity[EggTier.LEGENDARY] >= EGG_PITY_LEGENDARY_THRESHOLD && this._tier === EggTier.COMMON) { + this._tier = EggTier.LEGENDARY; + } else if (scene.gameData.eggPity[EggTier.EPIC] >= EGG_PITY_EPIC_THRESHOLD && this._tier === EggTier.COMMON) { + this._tier = EggTier.EPIC; + } else if (scene.gameData.eggPity[EggTier.RARE] >= EGG_PITY_RARE_THRESHOLD && this._tier === EggTier.COMMON) { + this._tier = EggTier.RARE; } scene.gameData.eggPity[this._tier] = 0; } @@ -516,38 +519,24 @@ export class Egg { scene.gameData.gameStats.eggsPulled++; if (this.isManaphyEgg()) { scene.gameData.gameStats.manaphyEggsPulled++; - this._hatchWaves = this.getEggTierDefaultHatchWaves(EggTier.ULTRA); + this._hatchWaves = this.getEggTierDefaultHatchWaves(EggTier.EPIC); return; } switch (this.tier) { - case EggTier.GREAT: + case EggTier.RARE: scene.gameData.gameStats.rareEggsPulled++; break; - case EggTier.ULTRA: + case EggTier.EPIC: scene.gameData.gameStats.epicEggsPulled++; break; - case EggTier.MASTER: + case EggTier.LEGENDARY: scene.gameData.gameStats.legendaryEggsPulled++; break; } } - private getEggTierFromSpeciesStarterValue(): EggTier { - const speciesStartValue = speciesStarterCosts[this.species]; - if (speciesStartValue >= 1 && speciesStartValue <= 3) { - return EggTier.COMMON; - } - if (speciesStartValue >= 4 && speciesStartValue <= 5) { - return EggTier.GREAT; - } - if (speciesStartValue >= 6 && speciesStartValue <= 7) { - return EggTier.ULTRA; - } - if (speciesStartValue >= 8) { - return EggTier.MASTER; - } - - return EggTier.COMMON; + private getEggTier(): EggTier { + return speciesEggTiers[this.species]; } //// @@ -556,8 +545,8 @@ export class Egg { } export function getLegendaryGachaSpeciesForTimestamp(scene: BattleScene, timestamp: number): Species { - const legendarySpecies = Object.entries(speciesStarterCosts) - .filter(s => s[1] >= 8 && s[1] <= 9) + const legendarySpecies = Object.entries(speciesEggTiers) + .filter(s => s[1] === EggTier.LEGENDARY) .map(s => parseInt(s[0])) .filter(s => getPokemonSpecies(s).isObtainable()); @@ -579,17 +568,9 @@ export function getLegendaryGachaSpeciesForTimestamp(scene: BattleScene, timesta /** * Check for a given species EggTier Value - * @param species - Species for wich we will check the egg tier it belongs to + * @param pokemonSpecies - Species for wich we will check the egg tier it belongs to * @returns The egg tier of a given pokemon species */ export function getEggTierForSpecies(pokemonSpecies :PokemonSpecies): EggTier { - const speciesBaseValue = speciesStarterCosts[pokemonSpecies.getRootSpeciesId()]; - if (speciesBaseValue <= 3) { - return EggTier.COMMON; - } else if (speciesBaseValue <= 5) { - return EggTier.GREAT; - } else if (speciesBaseValue <= 7) { - return EggTier.ULTRA; - } - return EggTier.MASTER; + return speciesEggTiers[pokemonSpecies.getRootSpeciesId()]; } diff --git a/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts b/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts index f3b886ac0ac..4f3420f5194 100644 --- a/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts +++ b/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts @@ -150,7 +150,7 @@ export const ATrainersTestEncounter: MysteryEncounter = pulled: false, sourceType: EggSourceType.EVENT, eggDescriptor: encounter.misc.trainerEggDescription, - tier: EggTier.ULTRA + tier: EggTier.EPIC }; encounter.setDialogueToken("eggType", i18next.t(`${namespace}:eggTypes.epic`)); setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.SACRED_ASH ], guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ULTRA ], fillRemaining: true }, [ eggOptions ]); @@ -172,7 +172,7 @@ export const ATrainersTestEncounter: MysteryEncounter = pulled: false, sourceType: EggSourceType.EVENT, eggDescriptor: encounter.misc.trainerEggDescription, - tier: EggTier.GREAT + tier: EggTier.RARE }; encounter.setDialogueToken("eggType", i18next.t(`${namespace}:eggTypes.rare`)); setEncounterRewards(scene, { fillRemaining: false, rerollMultiplier: -1 }, [ eggOptions ]); diff --git a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts index 4515736b30a..0ac82243862 100644 --- a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts @@ -494,7 +494,7 @@ function getEggOptions(scene: BattleScene, commonEggs: number, rareEggs: number) pulled: false, sourceType: EggSourceType.EVENT, eggDescriptor: eggDescription, - tier: EggTier.GREAT + tier: EggTier.RARE }); } } diff --git a/src/enums/egg-type.ts b/src/enums/egg-type.ts index d8d0facb020..901e60b3c76 100644 --- a/src/enums/egg-type.ts +++ b/src/enums/egg-type.ts @@ -1,6 +1,6 @@ export enum EggTier { COMMON, - GREAT, - ULTRA, - MASTER + RARE, + EPIC, + LEGENDARY } diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 4d85d5b8e1e..d8fcc281d1b 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -983,7 +983,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.scene.applyModifier(PokemonIncrementingStatModifier, this.isPlayer(), this, s, statHolder); } - statHolder.value = Utils.clampInt(statHolder.value, 1, Number.MAX_SAFE_INTEGER); + statHolder.value = Phaser.Math.Clamp(statHolder.value, 1, Number.MAX_SAFE_INTEGER); this.setStat(s, statHolder.value); } diff --git a/src/test/eggs/egg.test.ts b/src/test/eggs/egg.test.ts index cf53cca5af8..6f57af63e6b 100644 --- a/src/test/eggs/egg.test.ts +++ b/src/test/eggs/egg.test.ts @@ -55,7 +55,7 @@ describe("Egg Generation Tests", () => { let gachaSpeciesCount = 0; for (let i = 0; i < EGG_HATCH_COUNT; i++) { - const result = new Egg({ scene, timestamp, sourceType: EggSourceType.GACHA_LEGENDARY, tier: EggTier.MASTER }).generatePlayerPokemon(scene).species.speciesId; + const result = new Egg({ scene, timestamp, sourceType: EggSourceType.GACHA_LEGENDARY, tier: EggTier.LEGENDARY }).generatePlayerPokemon(scene).species.speciesId; if (result === expectedSpecies) { gachaSpeciesCount++; } @@ -82,7 +82,7 @@ describe("Egg Generation Tests", () => { }); it("should return an rare tier egg", () => { const scene = game.scene; - const expectedTier = EggTier.GREAT; + const expectedTier = EggTier.RARE; const result = new Egg({ scene, tier: expectedTier }).tier; @@ -90,7 +90,7 @@ describe("Egg Generation Tests", () => { }); it("should return an epic tier egg", () => { const scene = game.scene; - const expectedTier = EggTier.ULTRA; + const expectedTier = EggTier.EPIC; const result = new Egg({ scene, tier: expectedTier }).tier; @@ -98,7 +98,7 @@ describe("Egg Generation Tests", () => { }); it("should return an legendary tier egg", () => { const scene = game.scene; - const expectedTier = EggTier.MASTER; + const expectedTier = EggTier.LEGENDARY; const result = new Egg({ scene, tier: expectedTier }).tier; @@ -200,7 +200,7 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const expectedEggTier = EggTier.COMMON; - const result = new Egg({ scene, tier: EggTier.MASTER, species: Species.BULBASAUR }).tier; + const result = new Egg({ scene, tier: EggTier.LEGENDARY, species: Species.BULBASAUR }).tier; expect(result).toBe(expectedEggTier); }); @@ -208,7 +208,7 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const expectedHatchWaves = 10; - const result = new Egg({ scene, tier: EggTier.MASTER, species: Species.BULBASAUR }).hatchWaves; + const result = new Egg({ scene, tier: EggTier.LEGENDARY, species: Species.BULBASAUR }).hatchWaves; expect(result).toBe(expectedHatchWaves); }); @@ -229,7 +229,7 @@ describe("Egg Generation Tests", () => { const result = new EggData(legacyEgg).toEgg(); - expect(result.tier).toBe(EggTier.GREAT); + expect(result.tier).toBe(EggTier.RARE); expect(result.id).toBe(legacyEgg.id); expect(result.timestamp).toBe(legacyEgg.timestamp); expect(result.hatchWaves).toBe(legacyEgg.hatchWaves); @@ -241,9 +241,9 @@ describe("Egg Generation Tests", () => { new Egg({ scene, sourceType: EggSourceType.GACHA_MOVE, pulled: true, tier: EggTier.COMMON }); - expect(scene.gameData.eggPity[EggTier.GREAT]).toBe(startPityValues[EggTier.GREAT] + 1); - expect(scene.gameData.eggPity[EggTier.ULTRA]).toBe(startPityValues[EggTier.ULTRA] + 1); - expect(scene.gameData.eggPity[EggTier.MASTER]).toBe(startPityValues[EggTier.MASTER] + 1); + expect(scene.gameData.eggPity[EggTier.RARE]).toBe(startPityValues[EggTier.RARE] + 1); + expect(scene.gameData.eggPity[EggTier.EPIC]).toBe(startPityValues[EggTier.EPIC] + 1); + expect(scene.gameData.eggPity[EggTier.LEGENDARY]).toBe(startPityValues[EggTier.LEGENDARY] + 1); }); it("should increase legendary egg pity by two", () => { const scene = game.scene; @@ -251,9 +251,9 @@ describe("Egg Generation Tests", () => { new Egg({ scene, sourceType: EggSourceType.GACHA_LEGENDARY, pulled: true, tier: EggTier.COMMON }); - expect(scene.gameData.eggPity[EggTier.GREAT]).toBe(startPityValues[EggTier.GREAT] + 1); - expect(scene.gameData.eggPity[EggTier.ULTRA]).toBe(startPityValues[EggTier.ULTRA] + 1); - expect(scene.gameData.eggPity[EggTier.MASTER]).toBe(startPityValues[EggTier.MASTER] + 2); + expect(scene.gameData.eggPity[EggTier.RARE]).toBe(startPityValues[EggTier.RARE] + 1); + expect(scene.gameData.eggPity[EggTier.EPIC]).toBe(startPityValues[EggTier.EPIC] + 1); + expect(scene.gameData.eggPity[EggTier.LEGENDARY]).toBe(startPityValues[EggTier.LEGENDARY] + 2); }); it("should not increase manaphy egg count if bulbasaurs are pulled", () => { const scene = game.scene; @@ -277,7 +277,7 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const startingRareEggsPulled = scene.gameData.gameStats.rareEggsPulled; - new Egg({ scene, sourceType: EggSourceType.GACHA_MOVE, pulled: true, tier: EggTier.GREAT }); + new Egg({ scene, sourceType: EggSourceType.GACHA_MOVE, pulled: true, tier: EggTier.RARE }); expect(scene.gameData.gameStats.rareEggsPulled).toBe(startingRareEggsPulled + 1); }); @@ -285,7 +285,7 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const startingEpicEggsPulled = scene.gameData.gameStats.epicEggsPulled; - new Egg({ scene, sourceType: EggSourceType.GACHA_MOVE, pulled: true, tier: EggTier.ULTRA }); + new Egg({ scene, sourceType: EggSourceType.GACHA_MOVE, pulled: true, tier: EggTier.EPIC }); expect(scene.gameData.gameStats.epicEggsPulled).toBe(startingEpicEggsPulled + 1); }); @@ -293,7 +293,7 @@ describe("Egg Generation Tests", () => { const scene = game.scene; const startingLegendaryEggsPulled = scene.gameData.gameStats.legendaryEggsPulled; - new Egg({ scene, sourceType: EggSourceType.GACHA_MOVE, pulled: true, tier: EggTier.MASTER }); + new Egg({ scene, sourceType: EggSourceType.GACHA_MOVE, pulled: true, tier: EggTier.LEGENDARY }); expect(scene.gameData.gameStats.legendaryEggsPulled).toBe(startingLegendaryEggsPulled + 1); }); @@ -301,8 +301,8 @@ describe("Egg Generation Tests", () => { vi.spyOn(Utils, "randInt").mockReturnValue(1); const scene = game.scene; - const expectedTier1 = EggTier.MASTER; - const expectedTier2 = EggTier.ULTRA; + const expectedTier1 = EggTier.LEGENDARY; + const expectedTier2 = EggTier.EPIC; const result1 = new Egg({ scene, sourceType: EggSourceType.GACHA_LEGENDARY, pulled: true }).tier; const result2 = new Egg({ scene, sourceType: EggSourceType.GACHA_MOVE, pulled: true }).tier; diff --git a/src/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts b/src/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts index b1aa378d82a..7d783958422 100644 --- a/src/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/a-trainers-test-encounter.test.ts @@ -128,7 +128,7 @@ describe("A Trainer's Test - Mystery Encounter", () => { expect(eggsAfter).toBeDefined(); expect(eggsBeforeLength + 1).toBe(eggsAfter.length); const eggTier = eggsAfter[eggsAfter.length - 1].tier; - expect(eggTier === EggTier.ULTRA || eggTier === EggTier.MASTER).toBeTruthy(); + expect(eggTier === EggTier.EPIC || eggTier === EggTier.LEGENDARY).toBeTruthy(); }); }); @@ -176,7 +176,7 @@ describe("A Trainer's Test - Mystery Encounter", () => { expect(eggsAfter).toBeDefined(); expect(eggsBeforeLength + 1).toBe(eggsAfter.length); const eggTier = eggsAfter[eggsAfter.length - 1].tier; - expect(eggTier).toBe(EggTier.GREAT); + expect(eggTier).toBe(EggTier.RARE); }); it("should leave encounter without battle", async () => { diff --git a/src/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts b/src/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts index 7e445ac1fe2..bbb4f249feb 100644 --- a/src/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts @@ -155,7 +155,7 @@ describe("The Expert Pokémon Breeder - Mystery Encounter", () => { expect(eggsAfter).toBeDefined(); expect(eggsBeforeLength + commonEggs + rareEggs).toBe(eggsAfter.length); expect(eggsAfter.filter(egg => egg.tier === EggTier.COMMON).length).toBe(commonEggs); - expect(eggsAfter.filter(egg => egg.tier === EggTier.GREAT).length).toBe(rareEggs); + expect(eggsAfter.filter(egg => egg.tier === EggTier.RARE).length).toBe(rareEggs); game.phaseInterceptor.superEndPhase(); await game.phaseInterceptor.to(PostMysteryEncounterPhase); @@ -213,7 +213,7 @@ describe("The Expert Pokémon Breeder - Mystery Encounter", () => { expect(eggsAfter).toBeDefined(); expect(eggsBeforeLength + commonEggs + rareEggs).toBe(eggsAfter.length); expect(eggsAfter.filter(egg => egg.tier === EggTier.COMMON).length).toBe(commonEggs); - expect(eggsAfter.filter(egg => egg.tier === EggTier.GREAT).length).toBe(rareEggs); + expect(eggsAfter.filter(egg => egg.tier === EggTier.RARE).length).toBe(rareEggs); game.phaseInterceptor.superEndPhase(); await game.phaseInterceptor.to(PostMysteryEncounterPhase); @@ -271,7 +271,7 @@ describe("The Expert Pokémon Breeder - Mystery Encounter", () => { expect(eggsAfter).toBeDefined(); expect(eggsBeforeLength + commonEggs + rareEggs).toBe(eggsAfter.length); expect(eggsAfter.filter(egg => egg.tier === EggTier.COMMON).length).toBe(commonEggs); - expect(eggsAfter.filter(egg => egg.tier === EggTier.GREAT).length).toBe(rareEggs); + expect(eggsAfter.filter(egg => egg.tier === EggTier.RARE).length).toBe(rareEggs); game.phaseInterceptor.superEndPhase(); await game.phaseInterceptor.to(PostMysteryEncounterPhase); diff --git a/src/ui/battle-info.ts b/src/ui/battle-info.ts index 79b51ba6c44..1d97998f491 100644 --- a/src/ui/battle-info.ts +++ b/src/ui/battle-info.ts @@ -593,7 +593,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { }; const updatePokemonHp = () => { - let duration = !instant ? Utils.clampInt(Math.abs((this.lastHp) - pokemon.hp) * 5, 250, 5000) : 0; + let duration = !instant ? Phaser.Math.Clamp(Math.abs((this.lastHp) - pokemon.hp) * 5, 250, 5000) : 0; const speed = (this.scene as BattleScene).hpBarSpeed; if (speed) { duration = speed >= 3 ? 0 : duration / Math.pow(2, speed); diff --git a/src/ui/egg-gacha-ui-handler.ts b/src/ui/egg-gacha-ui-handler.ts index 366f1604740..3aa009b1b31 100644 --- a/src/ui/egg-gacha-ui-handler.ts +++ b/src/ui/egg-gacha-ui-handler.ts @@ -471,9 +471,9 @@ export default class EggGachaUiHandler extends MessageUiHandler { getGuaranteedEggTierFromPullCount(pullCount: number): EggTier { switch (pullCount) { case 10: - return EggTier.GREAT; + return EggTier.RARE; case 25: - return EggTier.ULTRA; + return EggTier.EPIC; default: return EggTier.COMMON; } @@ -516,7 +516,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { const eggText = addTextObject(this.scene, 0, 14, egg.getEggDescriptor(), TextStyle.PARTY, { align: "center" }); eggText.setOrigin(0.5, 0); - eggText.setTint(getEggTierTextTint(!egg.isManaphyEgg() ? egg.tier : EggTier.ULTRA)); + eggText.setTint(getEggTierTextTint(!egg.isManaphyEgg() ? egg.tier : EggTier.EPIC)); ret.add(eggText); this.eggGachaSummaryContainer.addAt(ret, 0); diff --git a/src/ui/text.ts b/src/ui/text.ts index e6e1978118b..22dd3f4cd6a 100644 --- a/src/ui/text.ts +++ b/src/ui/text.ts @@ -356,11 +356,11 @@ export function getEggTierTextTint(tier: EggTier): integer { switch (tier) { case EggTier.COMMON: return getModifierTierTextTint(ModifierTier.COMMON); - case EggTier.GREAT: + case EggTier.RARE: return getModifierTierTextTint(ModifierTier.GREAT); - case EggTier.ULTRA: + case EggTier.EPIC: return getModifierTierTextTint(ModifierTier.ULTRA); - case EggTier.MASTER: + case EggTier.LEGENDARY: return getModifierTierTextTint(ModifierTier.MASTER); } } diff --git a/src/utils.ts b/src/utils.ts index 9cc95b00826..c2ee7100909 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -38,10 +38,6 @@ export function shiftCharCodes(str: string, shiftCount: integer) { return newStr; } -export function clampInt(value: integer, min: integer, max: integer): integer { - return Math.min(Math.max(value, min), max); -} - export function randGauss(stdev: number, mean: number = 0): number { if (!stdev) { return 0; From 5d0b36132061bae767dafdd3f27c6c1be12264df Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Thu, 10 Oct 2024 10:19:05 -0700 Subject: [PATCH 058/153] [P2] Syrup Bomb effect is removed when user leaves the field (#4606) * Syrup Bomb's effect expires when the move user leaves the field * Add test * Remove check for the affected pokemon being switched out --- src/data/battler-tags.ts | 29 +++++++++++++---------------- src/test/moves/syrup_bomb.test.ts | 26 ++++++++++++++++++++------ 2 files changed, 33 insertions(+), 22 deletions(-) diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 24c82e54427..3cc109df264 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -2640,16 +2640,16 @@ export class ImprisonTag extends MoveRestrictionBattlerTag { /** * Battler Tag that applies the effects of Syrup Bomb to the target Pokemon. * For three turns, starting from the turn of hit, at the end of each turn, the target Pokemon's speed will decrease by 1. - * The tag can also expire by taking the target Pokemon off the field. + * The tag can also expire by taking the target Pokemon off the field, or the Pokemon that originally used the move. */ export class SyrupBombTag extends BattlerTag { - constructor() { - super(BattlerTagType.SYRUP_BOMB, BattlerTagLapseType.TURN_END, 3, Moves.SYRUP_BOMB); + constructor(sourceId: number) { + super(BattlerTagType.SYRUP_BOMB, BattlerTagLapseType.TURN_END, 3, Moves.SYRUP_BOMB, sourceId); } /** * Adds the Syrup Bomb battler tag to the target Pokemon. - * @param {Pokemon} pokemon the target Pokemon + * @param pokemon - The target {@linkcode Pokemon} */ override onAdd(pokemon: Pokemon) { super.onAdd(pokemon); @@ -2658,15 +2658,16 @@ export class SyrupBombTag extends BattlerTag { /** * Applies the single-stage speed down to the target Pokemon and decrements the tag's turn count - * @param {Pokemon} pokemon the target Pokemon - * @param {BattlerTagLapseType} _lapseType - * @returns `true` if the turnCount is still greater than 0 | `false` if the turnCount is 0 or the target Pokemon has been removed from the field + * @param pokemon - The target {@linkcode Pokemon} + * @param _lapseType - N/A + * @returns `true` if the `turnCount` is still greater than `0`; `false` if the `turnCount` is `0` or the target or source Pokemon has been removed from the field */ override lapse(pokemon: Pokemon, _lapseType: BattlerTagLapseType): boolean { - if (!pokemon.isActive(true)) { + if (this.sourceId && !pokemon.scene.getPokemonById(this.sourceId)?.isActive(true)) { return false; } - pokemon.scene.queueMessage(i18next.t("battlerTags:syrupBombLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); // Custom message in lieu of an animation in mainline + // Custom message in lieu of an animation in mainline + pokemon.scene.queueMessage(i18next.t("battlerTags:syrupBombLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); pokemon.scene.unshiftPhase(new StatStageChangePhase( pokemon.scene, pokemon.getBattlerIndex(), true, [ Stat.SPD ], -1, true, false, true @@ -2677,12 +2678,8 @@ export class SyrupBombTag extends BattlerTag { /** * Retrieves a {@linkcode BattlerTag} based on the provided tag type, turn count, source move, and source ID. - * - * @param {BattlerTagType} tagType the type of the {@linkcode BattlerTagType}. - * @param turnCount the turn count. - * @param {Moves} sourceMove the source {@linkcode Moves}. - * @param sourceId the source ID. - * @returns {BattlerTag} the corresponding {@linkcode BattlerTag} object. + * @param sourceId - The ID of the pokemon adding the tag + * @returns The corresponding {@linkcode BattlerTag} object. */ export function getBattlerTag(tagType: BattlerTagType, turnCount: number, sourceMove: Moves, sourceId: number): BattlerTag { switch (tagType) { @@ -2851,7 +2848,7 @@ export function getBattlerTag(tagType: BattlerTagType, turnCount: number, source case BattlerTagType.IMPRISON: return new ImprisonTag(sourceId); case BattlerTagType.SYRUP_BOMB: - return new SyrupBombTag(); + return new SyrupBombTag(sourceId); case BattlerTagType.NONE: default: return new BattlerTag(tagType, BattlerTagLapseType.CUSTOM, turnCount, sourceMove, sourceId); diff --git a/src/test/moves/syrup_bomb.test.ts b/src/test/moves/syrup_bomb.test.ts index 7f914e45cc6..ea2f8b6bab3 100644 --- a/src/test/moves/syrup_bomb.test.ts +++ b/src/test/moves/syrup_bomb.test.ts @@ -1,4 +1,3 @@ -import { allMoves } from "#app/data/move"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { Abilities } from "#enums/abilities"; @@ -7,7 +6,7 @@ import { Stat } from "#enums/stat"; import GameManager from "#test/utils/gameManager"; import Phaser from "phaser"; import { BattlerIndex } from "#app/battle"; -import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; describe("Moves - SYRUP BOMB", () => { let phaserGame: Phaser.Game; @@ -26,20 +25,21 @@ describe("Moves - SYRUP BOMB", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .starterSpecies(Species.MAGIKARP) + .battleType("single") .enemySpecies(Species.SNORLAX) + .enemyAbility(Abilities.BALL_FETCH) + .ability(Abilities.BALL_FETCH) .startingLevel(30) .enemyLevel(100) .moveset([ Moves.SYRUP_BOMB, Moves.SPLASH ]) .enemyMoveset(Moves.SPLASH); - vi.spyOn(allMoves[Moves.SYRUP_BOMB], "accuracy", "get").mockReturnValue(100); }); //Bulbapedia Reference: https://bulbapedia.bulbagarden.net/wiki/syrup_bomb_(move) it("decreases the target Pokemon's speed stat once per turn for 3 turns", async () => { - await game.startBattle([ Species.MAGIKARP ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); const targetPokemon = game.scene.getEnemyPokemon()!; expect(targetPokemon.getStatStage(Stat.SPD)).toBe(0); @@ -66,7 +66,7 @@ describe("Moves - SYRUP BOMB", () => { it("does not affect Pokemon with the ability Bulletproof", async () => { game.override.enemyAbility(Abilities.BULLETPROOF); - await game.startBattle([ Species.MAGIKARP ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); const targetPokemon = game.scene.getEnemyPokemon()!; @@ -79,4 +79,18 @@ describe("Moves - SYRUP BOMB", () => { expect(targetPokemon.getStatStage(Stat.SPD)).toBe(0); } ); + + it("stops lowering the target's speed if the user leaves the field", async () => { + await game.classicMode.startBattle([ Species.FEEBAS, Species.MILOTIC ]); + + game.move.select(Moves.SYRUP_BOMB); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.move.forceHit(); + await game.toNextTurn(); + + game.doSwitchPokemon(1); + await game.toNextTurn(); + + expect(game.scene.getEnemyPokemon()!.getStatStage(Stat.SPD)).toBe(-1); + }); }); From 3f63c147a38ef9afb05c54bfe0983ed572d6f35b Mon Sep 17 00:00:00 2001 From: "Amani H." <109637146+xsn34kzx@users.noreply.github.com> Date: Thu, 10 Oct 2024 15:44:51 -0400 Subject: [PATCH 059/153] [P3] Fix "Stat Won't Go Any Lower/Higher" Not Appearing (#4635) --- src/enums/stat.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/enums/stat.ts b/src/enums/stat.ts index a12d53e8559..6b3f7dc6d79 100644 --- a/src/enums/stat.ts +++ b/src/enums/stat.ts @@ -50,7 +50,7 @@ export function getStatStageChangeDescriptionKey(stages: number, isIncrease: boo return isIncrease ? "battle:statRose" : "battle:statFell"; } else if (stages === 2) { return isIncrease ? "battle:statSharplyRose" : "battle:statHarshlyFell"; - } else if (stages <= 6) { + } else if (stages > 2 && stages <= 6) { return isIncrease ? "battle:statRoseDrastically" : "battle:statSeverelyFell"; } return isIncrease ? "battle:statWontGoAnyHigher" : "battle:statWontGoAnyLower"; From 407cd65dcbe7ba343b2f01e17ed67750c888e218 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Fri, 11 Oct 2024 00:20:28 -0700 Subject: [PATCH 060/153] [Misc] Enemy item override will now apply to all enemies (#4620) * Enemy item override will now apply to all enemies * Update tsdocs --- src/battle-scene.ts | 9 +++++---- src/modifier/modifier.ts | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index a586b565e13..40e3971b7fc 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -2676,7 +2676,7 @@ export default class BattleScene extends SceneBase { } /** - * Removes all modifiers from enemy of PersistentModifier type + * Removes all modifiers from enemy pokemon of {@linkcode PersistentModifier} type */ clearEnemyModifiers(): void { const modifiersToRemove = this.enemyModifiers.filter(m => m instanceof PersistentModifier); @@ -2687,10 +2687,11 @@ export default class BattleScene extends SceneBase { } /** - * Removes all modifiers from enemy of PokemonHeldItemModifier type + * Removes all modifiers from enemy pokemon of {@linkcode PokemonHeldItemModifier} type + * @param pokemon - If specified, only removes held items from that {@linkcode Pokemon} */ - clearEnemyHeldItemModifiers(): void { - const modifiersToRemove = this.enemyModifiers.filter(m => m instanceof PokemonHeldItemModifier); + clearEnemyHeldItemModifiers(pokemon?: Pokemon): void { + const modifiersToRemove = this.enemyModifiers.filter(m => m instanceof PokemonHeldItemModifier && (!pokemon || m.getPokemon(this) === pokemon)); for (const m of modifiersToRemove) { this.enemyModifiers.splice(this.enemyModifiers.indexOf(m), 1); } diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 6c9b5db1bca..dd8c82357a7 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -3635,7 +3635,7 @@ export function overrideHeldItems(scene: BattleScene, pokemon: Pokemon, isPlayer } if (!isPlayer) { - scene.clearEnemyHeldItemModifiers(); + scene.clearEnemyHeldItemModifiers(pokemon); } heldItemsOverride.forEach(item => { From 80a784ac8d83c90af4ef16490346f24380da5f86 Mon Sep 17 00:00:00 2001 From: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com> Date: Fri, 11 Oct 2024 16:24:53 +0200 Subject: [PATCH 061/153] [P3 Beta][UI] Fix loading behavior introduced with save preview (#4633) * [ui] partially revert loading behavior introduced with save preview * [beta][ui] fix scrolling issue in Load Game menu --- src/ui/save-slot-select-ui-handler.ts | 65 ++++++++++++++++----------- 1 file changed, 40 insertions(+), 25 deletions(-) diff --git a/src/ui/save-slot-select-ui-handler.ts b/src/ui/save-slot-select-ui-handler.ts index bd1a7dd9ac4..2e664db8d43 100644 --- a/src/ui/save-slot-select-ui-handler.ts +++ b/src/ui/save-slot-select-ui-handler.ts @@ -12,7 +12,8 @@ import { Mode } from "./ui"; import { addWindow } from "./ui-theme"; import { RunDisplayMode } from "#app/ui/run-info-ui-handler"; -const sessionSlotCount = 5; +const SESSION_SLOTS_COUNT = 5; +const SLOTS_ON_SCREEN = 3; export enum SaveSlotUiMode { LOAD, @@ -84,12 +85,10 @@ export default class SaveSlotSelectUiHandler extends MessageUiHandler { this.saveSlotSelectCallback = args[1] as SaveSlotSelectCallback; this.saveSlotSelectContainer.setVisible(true); - this.populateSessionSlots() - .then(() => { - this.setScrollCursor(0); - this.setCursor(0); - }); + this.populateSessionSlots(); + this.setScrollCursor(0); + this.setCursor(0); return true; } @@ -161,9 +160,9 @@ export default class SaveSlotSelectUiHandler extends MessageUiHandler { } break; case Button.DOWN: - if (this.cursor < 2) { - success = this.setCursor(this.cursor + 1, this.cursor); - } else if (this.scrollCursor < sessionSlotCount - 3) { + if (this.cursor < (SLOTS_ON_SCREEN - 1)) { + success = this.setCursor(this.cursor + 1, cursorPosition); + } else if (this.scrollCursor < SESSION_SLOTS_COUNT - SLOTS_ON_SCREEN) { success = this.setScrollCursor(this.scrollCursor + 1, cursorPosition); } break; @@ -184,13 +183,19 @@ export default class SaveSlotSelectUiHandler extends MessageUiHandler { return success || error; } - async populateSessionSlots() { - for (let s = 0; s < sessionSlotCount; s++) { + populateSessionSlots() { + for (let s = 0; s < SESSION_SLOTS_COUNT; s++) { const sessionSlot = new SessionSlot(this.scene, s); - await sessionSlot.load(); this.scene.add.existing(sessionSlot); this.sessionSlotsContainer.add(sessionSlot); this.sessionSlots.push(sessionSlot); + sessionSlot.load().then((success) => { + // If the cursor was moved to this slot while the session was loading + // call setCursor again to shift the slot position and show the arrow for save preview + if (success && (this.cursor + this.scrollCursor) === s) { + this.setCursor(s); + } + }); } } @@ -209,12 +214,12 @@ export default class SaveSlotSelectUiHandler extends MessageUiHandler { } /** - * setCursor takes user navigation as an input and positions the cursor accordingly - * @param cursor the index provided to the cursor - * @param prevCursor the previous index occupied by the cursor - optional + * Move the cursor to a new position and update the view accordingly + * @param cursor the new cursor position, between `0` and `SLOTS_ON_SCREEN - 1` + * @param prevSlotIndex index of the previous session occupied by the cursor, between `0` and `SESSION_SLOTS_COUNT - 1` - optional * @returns `true` if the cursor position has changed | `false` if it has not */ - override setCursor(cursor: integer, prevCursor?: integer): boolean { + override setCursor(cursor: integer, prevSlotIndex?: integer): boolean { const changed = super.setCursor(cursor); if (!this.cursorObj) { @@ -241,21 +246,20 @@ export default class SaveSlotSelectUiHandler extends MessageUiHandler { } this.setArrowVisibility(hasData); } - if (!Utils.isNullOrUndefined(prevCursor)) { - this.revertSessionSlot(prevCursor); + if (!Utils.isNullOrUndefined(prevSlotIndex)) { + this.revertSessionSlot(prevSlotIndex); } return changed; } /** - * Helper function that resets the session slot position to its default central position - * @param prevCursor the previous location of the cursor + * Helper function that resets the given session slot to its default central position */ - revertSessionSlot(prevCursor: integer): void { - const sessionSlot = this.sessionSlots[prevCursor]; + revertSessionSlot(slotIndex: integer): void { + const sessionSlot = this.sessionSlots[slotIndex]; if (sessionSlot) { - sessionSlot.setPosition(0, prevCursor * 56); + sessionSlot.setPosition(0, slotIndex * 56); } } @@ -270,12 +274,18 @@ export default class SaveSlotSelectUiHandler extends MessageUiHandler { } } - setScrollCursor(scrollCursor: integer, priorCursor?: integer): boolean { + /** + * Move the scrolling cursor to a new position and update the view accordingly + * @param scrollCursor the new cursor position, between `0` and `SESSION_SLOTS_COUNT - SLOTS_ON_SCREEN` + * @param prevSlotIndex index of the previous slot occupied by the cursor, between `0` and `SESSION_SLOTS_COUNT-1` - optional + * @returns `true` if the cursor position has changed | `false` if it has not + */ + setScrollCursor(scrollCursor: integer, prevSlotIndex?: integer): boolean { const changed = scrollCursor !== this.scrollCursor; if (changed) { this.scrollCursor = scrollCursor; - this.setCursor(this.cursor, priorCursor); + this.setCursor(this.cursor, prevSlotIndex); this.scene.tweens.add({ targets: this.sessionSlotsContainer, y: this.sessionSlotsContainerInitialY - 56 * scrollCursor, @@ -290,6 +300,7 @@ export default class SaveSlotSelectUiHandler extends MessageUiHandler { clear() { super.clear(); this.saveSlotSelectContainer.setVisible(false); + this.setScrollCursor(0); this.eraseCursor(); this.saveSlotSelectCallback = null; this.clearSessionSlots(); @@ -391,6 +402,10 @@ class SessionSlot extends Phaser.GameObjects.Container { load(): Promise { return new Promise(resolve => { this.scene.gameData.getSession(this.slotId).then(async sessionData => { + // Ignore the results if the view was exited + if (!this.active) { + return; + } if (!sessionData) { this.hasData = false; this.loadingLabel.setText(i18next.t("saveSlotSelectUiHandler:empty")); From 4f456339f45038cd8df5b9c788251aa6c66bdde1 Mon Sep 17 00:00:00 2001 From: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com> Date: Fri, 11 Oct 2024 16:26:47 +0200 Subject: [PATCH 062/153] [UI] Remove score display in voucher menu (#4616) --- src/ui/achvs-ui-handler.ts | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/src/ui/achvs-ui-handler.ts b/src/ui/achvs-ui-handler.ts index f90732d1fae..4e0e2feea81 100644 --- a/src/ui/achvs-ui-handler.ts +++ b/src/ui/achvs-ui-handler.ts @@ -40,7 +40,9 @@ export default class AchvsUiHandler extends MessageUiHandler { private iconsBg: Phaser.GameObjects.NineSlice; private icons: Phaser.GameObjects.Sprite[]; + private titleBg: Phaser.GameObjects.NineSlice; private titleText: Phaser.GameObjects.Text; + private scoreContainer: Phaser.GameObjects.Container; private scoreText: Phaser.GameObjects.Text; private unlockText: Phaser.GameObjects.Text; @@ -114,29 +116,31 @@ export default class AchvsUiHandler extends MessageUiHandler { const titleBg = addWindow(this.scene, 0, this.headerBg.height + this.iconsBg.height, 174, 24); titleBg.setOrigin(0, 0); + this.titleBg = titleBg; this.titleText = addTextObject(this.scene, 0, 0, "", TextStyle.WINDOW); const textSize = languageSettings[i18next.language]?.TextSize ?? this.titleText.style.fontSize; this.titleText.setFontSize(textSize); - this.titleText.setOrigin(0, 0); const titleBgCenterX = titleBg.x + titleBg.width / 2; const titleBgCenterY = titleBg.y + titleBg.height / 2; this.titleText.setOrigin(0.5, 0.5); this.titleText.setPosition(titleBgCenterX, titleBgCenterY); - const scoreBg = addWindow(this.scene, titleBg.x + titleBg.width, titleBg.y, 46, 24); + this.scoreContainer = this.scene.add.container(titleBg.x + titleBg.width, titleBg.y); + const scoreBg = addWindow(this.scene, 0, 0, 46, 24); scoreBg.setOrigin(0, 0); + this.scoreContainer.add(scoreBg); - this.scoreText = addTextObject(this.scene, 0, 0, "", TextStyle.WINDOW); - this.scoreText.setOrigin(0, 0); - this.scoreText.setPositionRelative(scoreBg, 8, 4); + this.scoreText = addTextObject(this.scene, scoreBg.width / 2, scoreBg.height / 2, "", TextStyle.WINDOW); + this.scoreText.setOrigin(0.5, 0.5); + this.scoreContainer.add(this.scoreText); - const unlockBg = addWindow(this.scene, scoreBg.x + scoreBg.width, scoreBg.y, 98, 24); + const unlockBg = addWindow(this.scene, this.scoreContainer.x + scoreBg.width, titleBg.y, 98, 24); unlockBg.setOrigin(0, 0); this.unlockText = addTextObject(this.scene, 0, 0, "", TextStyle.WINDOW); - this.unlockText.setOrigin(0, 0); - this.unlockText.setPositionRelative(unlockBg, 8, 4); + this.unlockText.setOrigin(0.5, 0.5); + this.unlockText.setPositionRelative(unlockBg, unlockBg.width / 2, unlockBg.height / 2); const descriptionBg = addWindow(this.scene, 0, titleBg.y + titleBg.height, (this.scene.game.canvas.width / 6) - 2, 42); descriptionBg.setOrigin(0, 0); @@ -157,8 +161,7 @@ export default class AchvsUiHandler extends MessageUiHandler { this.mainContainer.add(this.iconsContainer); this.mainContainer.add(titleBg); this.mainContainer.add(this.titleText); - this.mainContainer.add(scoreBg); - this.mainContainer.add(this.scoreText); + this.mainContainer.add(this.scoreContainer); this.mainContainer.add(unlockBg); this.mainContainer.add(this.unlockText); this.mainContainer.add(descriptionBg); @@ -167,8 +170,6 @@ export default class AchvsUiHandler extends MessageUiHandler { ui.add(this.mainContainer); this.currentPage = Page.ACHIEVEMENTS; - this.setCursor(0); - this.setScrollCursor(0); this.mainContainer.setVisible(false); } @@ -316,9 +317,19 @@ export default class AchvsUiHandler extends MessageUiHandler { if (update || pageChange) { switch (this.currentPage) { case Page.ACHIEVEMENTS: + if (pageChange) { + this.titleBg.width = 174; + this.titleText.x = this.titleBg.width / 2; + this.scoreContainer.setVisible(true); + } this.showAchv(achvs[Object.keys(achvs)[cursor + this.scrollCursor * this.COLS]]); break; case Page.VOUCHERS: + if (pageChange) { + this.titleBg.width = 220; + this.titleText.x = this.titleBg.width / 2; + this.scoreContainer.setVisible(false); + } this.showVoucher(vouchers[Object.keys(vouchers)[cursor + this.scrollCursor * this.COLS]]); break; } @@ -442,6 +453,7 @@ export default class AchvsUiHandler extends MessageUiHandler { this.currentPage = Page.ACHIEVEMENTS; this.mainContainer.setVisible(false); this.setScrollCursor(0); + this.setCursor(0, true); this.eraseCursor(); } From 70b9a43c8b72a555ae4e5379f07d0c4a480ca4e2 Mon Sep 17 00:00:00 2001 From: Mason S <132116525+ElizaAlex@users.noreply.github.com> Date: Fri, 11 Oct 2024 10:41:54 -0400 Subject: [PATCH 063/153] [P2] Fix first-turn status damage and arena hazards (#3528) * [Bug] Toxic Spikes implementation issues fixed Adjusted MoveEffectPhase.start() so that ENEMY_SIDE targeted moves no longer occur twice per use in double battles. Updated Toxic Orb test to no longer expect a tick of damage turn 1. Fixed Toxic/Poison dealing damage immediately when applied. Fixed Hazards not persisting through save Added unit tests Fixed flyout not displaying correct number of Spikes/Toxic Spikes after a refresh * Update Toxic Orb test * Updates Toxic Spikes tests * Apply suggestions from code review * Fix merge issues Replace `integer` with `number` in `arena-tag.ts` * Remove partial Magic Bounce implementation * Remove stray newline * Remove extra change in safeguard test --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/data/arena-tag.ts | 122 ++++++++++++-------- src/phases/check-status-effect-phase.ts | 23 ++++ src/phases/obtain-status-effect-phase.ts | 4 - src/phases/turn-start-phase.ts | 9 +- src/system/arena-data.ts | 8 +- src/system/game-data.ts | 17 ++- src/test/items/toxic_orb.test.ts | 54 ++++----- src/test/moves/toxic_spikes.test.ts | 136 +++++++++++++++++++++++ 8 files changed, 282 insertions(+), 91 deletions(-) create mode 100644 src/phases/check-status-effect-phase.ts create mode 100644 src/test/moves/toxic_spikes.test.ts diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index 6407e139a71..45d64249296 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -28,20 +28,13 @@ export enum ArenaTagSide { } export abstract class ArenaTag { - public tagType: ArenaTagType; - public turnCount: integer; - public sourceMove?: Moves; - public sourceId?: integer; - public side: ArenaTagSide; - - - constructor(tagType: ArenaTagType, turnCount: integer, sourceMove: Moves | undefined, sourceId?: integer, side: ArenaTagSide = ArenaTagSide.BOTH) { - this.tagType = tagType; - this.turnCount = turnCount; - this.sourceMove = sourceMove; - this.sourceId = sourceId; - this.side = side; - } + constructor( + public tagType: ArenaTagType, + public turnCount: number, + public sourceMove?: Moves, + public sourceId?: number, + public side: ArenaTagSide = ArenaTagSide.BOTH + ) {} apply(arena: Arena, args: any[]): boolean { return true; @@ -66,6 +59,18 @@ export abstract class ArenaTag { ? allMoves[this.sourceMove].name : null; } + + /** + * When given a arena tag or json representing one, load the data for it. + * This is meant to be inherited from by any arena tag with custom attributes + * @param {ArenaTag | any} source An arena tag + */ + loadTag(source : ArenaTag | any) : void { + this.turnCount = source.turnCount; + this.sourceMove = source.sourceMove; + this.sourceId = source.sourceId; + this.side = source.side; + } } /** @@ -73,7 +78,7 @@ export abstract class ArenaTag { * Prevents Pokémon on the opposing side from lowering the stats of the Pokémon in the Mist. */ export class MistTag extends ArenaTag { - constructor(turnCount: integer, sourceId: integer, side: ArenaTagSide) { + constructor(turnCount: number, sourceId: number, side: ArenaTagSide) { super(ArenaTagType.MIST, turnCount, Moves.MIST, sourceId, side); } @@ -117,7 +122,7 @@ export class WeakenMoveScreenTag extends ArenaTag { * @param side - The side (player or enemy) the tag affects. * @param weakenedCategories - The categories of moves that are weakened by this tag. */ - constructor(tagType: ArenaTagType, turnCount: integer, sourceMove: Moves, sourceId: integer, side: ArenaTagSide, weakenedCategories: MoveCategory[]) { + constructor(tagType: ArenaTagType, turnCount: number, sourceMove: Moves, sourceId: number, side: ArenaTagSide, weakenedCategories: MoveCategory[]) { super(tagType, turnCount, sourceMove, sourceId, side); this.weakenedCategories = weakenedCategories; @@ -148,7 +153,7 @@ export class WeakenMoveScreenTag extends ArenaTag { * Used by {@linkcode Moves.REFLECT} */ class ReflectTag extends WeakenMoveScreenTag { - constructor(turnCount: integer, sourceId: integer, side: ArenaTagSide) { + constructor(turnCount: number, sourceId: number, side: ArenaTagSide) { super(ArenaTagType.REFLECT, turnCount, Moves.REFLECT, sourceId, side, [ MoveCategory.PHYSICAL ]); } @@ -164,7 +169,7 @@ class ReflectTag extends WeakenMoveScreenTag { * Used by {@linkcode Moves.LIGHT_SCREEN} */ class LightScreenTag extends WeakenMoveScreenTag { - constructor(turnCount: integer, sourceId: integer, side: ArenaTagSide) { + constructor(turnCount: number, sourceId: number, side: ArenaTagSide) { super(ArenaTagType.LIGHT_SCREEN, turnCount, Moves.LIGHT_SCREEN, sourceId, side, [ MoveCategory.SPECIAL ]); } @@ -180,7 +185,7 @@ class LightScreenTag extends WeakenMoveScreenTag { * Used by {@linkcode Moves.AURORA_VEIL} */ class AuroraVeilTag extends WeakenMoveScreenTag { - constructor(turnCount: integer, sourceId: integer, side: ArenaTagSide) { + constructor(turnCount: number, sourceId: number, side: ArenaTagSide) { super(ArenaTagType.AURORA_VEIL, turnCount, Moves.AURORA_VEIL, sourceId, side, [ MoveCategory.SPECIAL, MoveCategory.PHYSICAL ]); } @@ -203,7 +208,7 @@ export class ConditionalProtectTag extends ArenaTag { /** Does this apply to all moves, including those that ignore other forms of protection? */ protected ignoresBypass: boolean; - constructor(tagType: ArenaTagType, sourceMove: Moves, sourceId: integer, side: ArenaTagSide, condition: ProtectConditionFunc, ignoresBypass: boolean = false) { + constructor(tagType: ArenaTagType, sourceMove: Moves, sourceId: number, side: ArenaTagSide, condition: ProtectConditionFunc, ignoresBypass: boolean = false) { super(tagType, 1, sourceMove, sourceId, side); this.protectConditionFunc = condition; @@ -265,7 +270,7 @@ export class ConditionalProtectTag extends ArenaTag { */ const QuickGuardConditionFunc: ProtectConditionFunc = (arena, moveId) => { const move = allMoves[moveId]; - const priority = new Utils.IntegerHolder(move.priority); + const priority = new Utils.NumberHolder(move.priority); const effectPhase = arena.scene.getCurrentPhase(); if (effectPhase instanceof MoveEffectPhase) { @@ -281,7 +286,7 @@ const QuickGuardConditionFunc: ProtectConditionFunc = (arena, moveId) => { * Condition: The incoming move has increased priority. */ class QuickGuardTag extends ConditionalProtectTag { - constructor(sourceId: integer, side: ArenaTagSide) { + constructor(sourceId: number, side: ArenaTagSide) { super(ArenaTagType.QUICK_GUARD, Moves.QUICK_GUARD, sourceId, side, QuickGuardConditionFunc); } } @@ -312,7 +317,7 @@ const WideGuardConditionFunc: ProtectConditionFunc = (arena, moveId) : boolean = * can be an ally or enemy. */ class WideGuardTag extends ConditionalProtectTag { - constructor(sourceId: integer, side: ArenaTagSide) { + constructor(sourceId: number, side: ArenaTagSide) { super(ArenaTagType.WIDE_GUARD, Moves.WIDE_GUARD, sourceId, side, WideGuardConditionFunc); } } @@ -334,7 +339,7 @@ const MatBlockConditionFunc: ProtectConditionFunc = (arena, moveId) : boolean => * Condition: The incoming move is a Physical or Special attack move. */ class MatBlockTag extends ConditionalProtectTag { - constructor(sourceId: integer, side: ArenaTagSide) { + constructor(sourceId: number, side: ArenaTagSide) { super(ArenaTagType.MAT_BLOCK, Moves.MAT_BLOCK, sourceId, side, MatBlockConditionFunc); } @@ -372,7 +377,7 @@ const CraftyShieldConditionFunc: ProtectConditionFunc = (arena, moveId) => { * not target all Pokemon or sides of the field. */ class CraftyShieldTag extends ConditionalProtectTag { - constructor(sourceId: integer, side: ArenaTagSide) { + constructor(sourceId: number, side: ArenaTagSide) { super(ArenaTagType.CRAFTY_SHIELD, Moves.CRAFTY_SHIELD, sourceId, side, CraftyShieldConditionFunc, true); } } @@ -384,12 +389,12 @@ class CraftyShieldTag extends ConditionalProtectTag { export class NoCritTag extends ArenaTag { /** * Constructor method for the NoCritTag class - * @param turnCount `integer` the number of turns this effect lasts + * @param turnCount `number` the number of turns this effect lasts * @param sourceMove {@linkcode Moves} the move that created this effect - * @param sourceId `integer` the ID of the {@linkcode Pokemon} that created this effect + * @param sourceId `number` the ID of the {@linkcode Pokemon} that created this effect * @param side {@linkcode ArenaTagSide} the side to which this effect belongs */ - constructor(turnCount: integer, sourceMove: Moves, sourceId: integer, side: ArenaTagSide) { + constructor(turnCount: number, sourceMove: Moves, sourceId: number, side: ArenaTagSide) { super(ArenaTagType.NO_CRIT, turnCount, sourceMove, sourceId, side); } @@ -419,7 +424,7 @@ class WishTag extends ArenaTag { private triggerMessage: string; private healHp: number; - constructor(turnCount: integer, sourceId: integer, side: ArenaTagSide) { + constructor(turnCount: number, sourceId: number, side: ArenaTagSide) { super(ArenaTagType.WISH, turnCount, Moves.WISH, sourceId, side); } @@ -460,7 +465,7 @@ export class WeakenMoveTypeTag extends ArenaTag { * @param sourceMove - The move that created the tag. * @param sourceId - The ID of the source of the tag. */ - constructor(tagType: ArenaTagType, turnCount: integer, type: Type, sourceMove: Moves, sourceId: integer) { + constructor(tagType: ArenaTagType, turnCount: number, type: Type, sourceMove: Moves, sourceId: number) { super(tagType, turnCount, sourceMove, sourceId); this.weakenedType = type; @@ -481,7 +486,7 @@ export class WeakenMoveTypeTag extends ArenaTag { * Weakens Electric type moves for a set amount of turns, usually 5. */ class MudSportTag extends WeakenMoveTypeTag { - constructor(turnCount: integer, sourceId: integer) { + constructor(turnCount: number, sourceId: number) { super(ArenaTagType.MUD_SPORT, turnCount, Type.ELECTRIC, Moves.MUD_SPORT, sourceId); } @@ -499,7 +504,7 @@ class MudSportTag extends WeakenMoveTypeTag { * Weakens Fire type moves for a set amount of turns, usually 5. */ class WaterSportTag extends WeakenMoveTypeTag { - constructor(turnCount: integer, sourceId: integer) { + constructor(turnCount: number, sourceId: number) { super(ArenaTagType.WATER_SPORT, turnCount, Type.FIRE, Moves.WATER_SPORT, sourceId); } @@ -550,8 +555,8 @@ export class IonDelugeTag extends ArenaTag { * Abstract class to implement arena traps. */ export class ArenaTrapTag extends ArenaTag { - public layers: integer; - public maxLayers: integer; + public layers: number; + public maxLayers: number; /** * Creates a new instance of the ArenaTrapTag class. @@ -562,7 +567,7 @@ export class ArenaTrapTag extends ArenaTag { * @param side - The side (player or enemy) the tag affects. * @param maxLayers - The maximum amount of layers this tag can have. */ - constructor(tagType: ArenaTagType, sourceMove: Moves, sourceId: integer, side: ArenaTagSide, maxLayers: integer) { + constructor(tagType: ArenaTagType, sourceMove: Moves, sourceId: number, side: ArenaTagSide, maxLayers: number) { super(tagType, 0, sourceMove, sourceId, side); this.layers = 1; @@ -593,6 +598,12 @@ export class ArenaTrapTag extends ArenaTag { getMatchupScoreMultiplier(pokemon: Pokemon): number { return pokemon.isGrounded() ? 1 : Phaser.Math.Linear(0, 1 / Math.pow(2, this.layers), Math.min(pokemon.getHpRatio(), 0.5) * 2); } + + loadTag(source: any): void { + super.loadTag(source); + this.layers = source.layers; + this.maxLayers = source.maxLayers; + } } /** @@ -601,7 +612,7 @@ export class ArenaTrapTag extends ArenaTag { * in damage for 1, 2, or 3 layers of Spikes respectively if they are summoned into this trap. */ class SpikesTag extends ArenaTrapTag { - constructor(sourceId: integer, side: ArenaTagSide) { + constructor(sourceId: number, side: ArenaTagSide) { super(ArenaTagType.SPIKES, Moves.SPIKES, sourceId, side, 3); } @@ -645,7 +656,7 @@ class SpikesTag extends ArenaTrapTag { class ToxicSpikesTag extends ArenaTrapTag { private neutralized: boolean; - constructor(sourceId: integer, side: ArenaTagSide) { + constructor(sourceId: number, side: ArenaTagSide) { super(ArenaTagType.TOXIC_SPIKES, Moves.TOXIC_SPIKES, sourceId, side, 2); this.neutralized = false; } @@ -703,7 +714,7 @@ class ToxicSpikesTag extends ArenaTrapTag { class DelayedAttackTag extends ArenaTag { public targetIndex: BattlerIndex; - constructor(tagType: ArenaTagType, sourceMove: Moves | undefined, sourceId: integer, targetIndex: BattlerIndex) { + constructor(tagType: ArenaTagType, sourceMove: Moves | undefined, sourceId: number, targetIndex: BattlerIndex) { super(tagType, 3, sourceMove, sourceId); this.targetIndex = targetIndex; @@ -728,7 +739,7 @@ class DelayedAttackTag extends ArenaTag { * who is summoned into the trap, based on the Rock type's type effectiveness. */ class StealthRockTag extends ArenaTrapTag { - constructor(sourceId: integer, side: ArenaTagSide) { + constructor(sourceId: number, side: ArenaTagSide) { super(ArenaTagType.STEALTH_ROCK, Moves.STEALTH_ROCK, sourceId, side, 1); } @@ -804,7 +815,7 @@ class StealthRockTag extends ArenaTrapTag { * to any Pokémon who is summoned into this trap. */ class StickyWebTag extends ArenaTrapTag { - constructor(sourceId: integer, side: ArenaTagSide) { + constructor(sourceId: number, side: ArenaTagSide) { super(ArenaTagType.STICKY_WEB, Moves.STICKY_WEB, sourceId, side, 1); } @@ -838,7 +849,7 @@ class StickyWebTag extends ArenaTrapTag { * also reversing the turn order for all Pokémon on the field as well. */ export class TrickRoomTag extends ArenaTag { - constructor(turnCount: integer, sourceId: integer) { + constructor(turnCount: number, sourceId: number) { super(ArenaTagType.TRICK_ROOM, turnCount, Moves.TRICK_ROOM, sourceId); } @@ -866,7 +877,7 @@ export class TrickRoomTag extends ArenaTag { * {@linkcode Abilities.LEVITATE} for the duration of the arena tag, usually 5 turns. */ export class GravityTag extends ArenaTag { - constructor(turnCount: integer) { + constructor(turnCount: number) { super(ArenaTagType.GRAVITY, turnCount, Moves.GRAVITY); } @@ -890,7 +901,7 @@ export class GravityTag extends ArenaTag { * Applies this arena tag for 4 turns (including the turn the move was used). */ class TailwindTag extends ArenaTag { - constructor(turnCount: integer, sourceId: integer, side: ArenaTagSide) { + constructor(turnCount: number, sourceId: number, side: ArenaTagSide) { super(ArenaTagType.TAILWIND, turnCount, Moves.TAILWIND, sourceId, side); } @@ -928,7 +939,7 @@ class TailwindTag extends ArenaTag { * Doubles the prize money from trainers and money moves like {@linkcode Moves.PAY_DAY} and {@linkcode Moves.MAKE_IT_RAIN}. */ class HappyHourTag extends ArenaTag { - constructor(turnCount: integer, sourceId: integer, side: ArenaTagSide) { + constructor(turnCount: number, sourceId: number, side: ArenaTagSide) { super(ArenaTagType.HAPPY_HOUR, turnCount, Moves.HAPPY_HOUR, sourceId, side); } @@ -942,7 +953,7 @@ class HappyHourTag extends ArenaTag { } class SafeguardTag extends ArenaTag { - constructor(turnCount: integer, sourceId: integer, side: ArenaTagSide) { + constructor(turnCount: number, sourceId: number, side: ArenaTagSide) { super(ArenaTagType.SAFEGUARD, turnCount, Moves.SAFEGUARD, sourceId, side); } @@ -955,6 +966,11 @@ class SafeguardTag extends ArenaTag { } } +class NoneTag extends ArenaTag { + constructor() { + super(ArenaTagType.NONE, 0); + } +} /** * This arena tag facilitates the application of the move Imprison * Imprison remains in effect as long as the source Pokemon is active and present on the field. @@ -1102,7 +1118,8 @@ class GrassWaterPledgeTag extends ArenaTag { } } -export function getArenaTag(tagType: ArenaTagType, turnCount: integer, sourceMove: Moves | undefined, sourceId: integer, targetIndex?: BattlerIndex, side: ArenaTagSide = ArenaTagSide.BOTH): ArenaTag | null { +// TODO: swap `sourceMove` and `sourceId` and make `sourceMove` an optional parameter +export function getArenaTag(tagType: ArenaTagType, turnCount: number, sourceMove: Moves | undefined, sourceId: number, targetIndex?: BattlerIndex, side: ArenaTagSide = ArenaTagSide.BOTH): ArenaTag | null { switch (tagType) { case ArenaTagType.MIST: return new MistTag(turnCount, sourceId, side); @@ -1163,3 +1180,16 @@ export function getArenaTag(tagType: ArenaTagType, turnCount: integer, sourceMov return null; } } + +/** + * When given a battler tag or json representing one, creates an actual ArenaTag object with the same data. + * @param {ArenaTag | any} source An arena tag + * @return {ArenaTag} The valid arena tag + */ +export function loadArenaTag(source: ArenaTag | any): ArenaTag { + const tag = getArenaTag(source.tagType, source.turnCount, source.sourceMove, source.sourceId, source.targetIndex, source.side) + ?? new NoneTag(); + tag.loadTag(source); + return tag; +} + diff --git a/src/phases/check-status-effect-phase.ts b/src/phases/check-status-effect-phase.ts new file mode 100644 index 00000000000..44918b54966 --- /dev/null +++ b/src/phases/check-status-effect-phase.ts @@ -0,0 +1,23 @@ +import { PostTurnStatusEffectPhase } from "#app/phases/post-turn-status-effect-phase"; +import { Phase } from "#app/phase"; +import { BattlerIndex } from "#app/battle"; +import BattleScene from "#app/battle-scene"; + +export class CheckStatusEffectPhase extends Phase { + private order : BattlerIndex[]; + constructor(scene : BattleScene, order : BattlerIndex[]) { + super(scene); + this.scene = scene; + this.order = order; + } + + start() { + const field = this.scene.getField(); + for (const o of this.order) { + if (field[o].status && field[o].status.isPostTurn()) { + this.scene.unshiftPhase(new PostTurnStatusEffectPhase(this.scene, o)); + } + } + this.end(); + } +} diff --git a/src/phases/obtain-status-effect-phase.ts b/src/phases/obtain-status-effect-phase.ts index bf38c432394..c396fa7ba59 100644 --- a/src/phases/obtain-status-effect-phase.ts +++ b/src/phases/obtain-status-effect-phase.ts @@ -6,7 +6,6 @@ import { StatusEffect } from "#app/enums/status-effect"; import Pokemon from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { PokemonPhase } from "./pokemon-phase"; -import { PostTurnStatusEffectPhase } from "./post-turn-status-effect-phase"; export class ObtainStatusEffectPhase extends PokemonPhase { private statusEffect?: StatusEffect | undefined; @@ -33,9 +32,6 @@ export class ObtainStatusEffectPhase extends PokemonPhase { pokemon.updateInfo(true); new CommonBattleAnim(CommonAnim.POISON + (this.statusEffect! - 1), pokemon).play(this.scene, false, () => { this.scene.queueMessage(getStatusEffectObtainText(this.statusEffect, getPokemonNameWithAffix(pokemon), this.sourceText ?? undefined)); - if (pokemon.status?.isPostTurn()) { - this.scene.pushPhase(new PostTurnStatusEffectPhase(this.scene, this.battlerIndex)); - } this.end(); }); return; diff --git a/src/phases/turn-start-phase.ts b/src/phases/turn-start-phase.ts index 53623f933f2..627cee4b06a 100644 --- a/src/phases/turn-start-phase.ts +++ b/src/phases/turn-start-phase.ts @@ -13,10 +13,10 @@ import { BerryPhase } from "./berry-phase"; import { FieldPhase } from "./field-phase"; import { MoveHeaderPhase } from "./move-header-phase"; import { MovePhase } from "./move-phase"; -import { PostTurnStatusEffectPhase } from "./post-turn-status-effect-phase"; import { SwitchSummonPhase } from "./switch-summon-phase"; import { TurnEndPhase } from "./turn-end-phase"; import { WeatherEffectPhase } from "./weather-effect-phase"; +import { CheckStatusEffectPhase } from "#app/phases/check-status-effect-phase"; import { BattlerIndex } from "#app/battle"; import { TrickRoomTag } from "#app/data/arena-tag"; import { SwitchType } from "#enums/switch-type"; @@ -206,11 +206,8 @@ export class TurnStartPhase extends FieldPhase { this.scene.pushPhase(new WeatherEffectPhase(this.scene)); - for (const o of moveOrder) { - if (field[o].status && field[o].status.isPostTurn()) { - this.scene.pushPhase(new PostTurnStatusEffectPhase(this.scene, o)); - } - } + /** Add a new phase to check who should be taking status damage */ + this.scene.pushPhase(new CheckStatusEffectPhase(this.scene, moveOrder)); this.scene.pushPhase(new BerryPhase(this.scene)); this.scene.pushPhase(new TurnEndPhase(this.scene)); diff --git a/src/system/arena-data.ts b/src/system/arena-data.ts index 5b907805372..ba37de0ed0e 100644 --- a/src/system/arena-data.ts +++ b/src/system/arena-data.ts @@ -1,5 +1,5 @@ import { Arena } from "../field/arena"; -import { ArenaTag } from "../data/arena-tag"; +import { ArenaTag, loadArenaTag } from "../data/arena-tag"; import { Biome } from "#enums/biome"; import { Weather } from "../data/weather"; import { Terrain } from "#app/data/terrain"; @@ -15,6 +15,10 @@ export default class ArenaData { this.biome = sourceArena ? sourceArena.biomeType : source.biome; this.weather = sourceArena ? sourceArena.weather : source.weather ? new Weather(source.weather.weatherType, source.weather.turnsLeft) : null; this.terrain = sourceArena ? sourceArena.terrain : source.terrain ? new Terrain(source.terrain.terrainType, source.terrain.turnsLeft) : null; - this.tags = sourceArena ? sourceArena.tags : []; + this.tags = []; + + if (source.tags) { + this.tags = source.tags.map(t => loadArenaTag(t)); + } } } diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 0d2f35ae728..b162962fac6 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -31,7 +31,7 @@ import { TrainerVariant } from "#app/field/trainer"; import { Variant } from "#app/data/variant"; import { setSettingGamepad, SettingGamepad, settingGamepadDefaults } from "#app/system/settings/settings-gamepad"; import { setSettingKeyboard, SettingKeyboard } from "#app/system/settings/settings-keyboard"; -import { TerrainChangedEvent, WeatherChangedEvent } from "#app/events/arena"; +import { TagAddedEvent, TerrainChangedEvent, WeatherChangedEvent } from "#app/events/arena"; import * as Modifier from "#app/modifier/modifier"; import { StatusEffect } from "#app/data/status-effect"; import ChallengeData from "#app/system/challenge-data"; @@ -50,6 +50,7 @@ import { applySessionDataPatches, applySettingsDataPatches, applySystemDataPatch import { MysteryEncounterSaveData } from "#app/data/mystery-encounters/mystery-encounter-save-data"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { PokerogueApiClearSessionData } from "#app/@types/pokerogue-api"; +import { ArenaTrapTag } from "#app/data/arena-tag"; export const defaultStarterSpecies: Species[] = [ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE, @@ -1085,8 +1086,18 @@ export class GameData { scene.arena.terrain = sessionData.arena.terrain; scene.arena.eventTarget.dispatchEvent(new TerrainChangedEvent(TerrainType.NONE, scene.arena.terrain?.terrainType!, scene.arena.terrain?.turnsLeft!)); // TODO: is this bang correct? - // TODO - //scene.arena.tags = sessionData.arena.tags; + + scene.arena.tags = sessionData.arena.tags; + if (scene.arena.tags) { + for (const tag of scene.arena.tags) { + if (tag instanceof ArenaTrapTag) { + const { tagType, side, turnCount, layers, maxLayers } = tag as ArenaTrapTag; + scene.arena.eventTarget.dispatchEvent(new TagAddedEvent(tagType, side, turnCount, layers, maxLayers)); + } else { + scene.arena.eventTarget.dispatchEvent(new TagAddedEvent(tag.tagType, tag.side, tag.turnCount)); + } + } + } for (const modifierData of sessionData.modifiers) { const modifier = modifierData.toModifier(scene, Modifier[modifierData.className]); diff --git a/src/test/items/toxic_orb.test.ts b/src/test/items/toxic_orb.test.ts index a83fd3655e5..63c7b6245f5 100644 --- a/src/test/items/toxic_orb.test.ts +++ b/src/test/items/toxic_orb.test.ts @@ -1,7 +1,4 @@ import { StatusEffect } from "#app/data/status-effect"; -import { EnemyCommandPhase } from "#app/phases/enemy-command-phase"; -import { MessagePhase } from "#app/phases/message-phase"; -import { TurnEndPhase } from "#app/phases/turn-end-phase"; import i18next from "#app/plugins/i18n"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; @@ -10,6 +7,7 @@ import GameManager from "#test/utils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +const TIMEOUT = 20 * 1000; describe("Items - Toxic orb", () => { let phaserGame: Phaser.Game; @@ -27,40 +25,36 @@ describe("Items - Toxic orb", () => { beforeEach(() => { game = new GameManager(phaserGame); - const moveToUse = Moves.GROWTH; - const oppMoveToUse = Moves.TACKLE; - game.override.battleType("single"); - game.override.enemySpecies(Species.RATTATA); - game.override.ability(Abilities.INSOMNIA); - game.override.enemyAbility(Abilities.INSOMNIA); - game.override.startingLevel(2000); - game.override.moveset([ moveToUse ]); - game.override.enemyMoveset([ oppMoveToUse, oppMoveToUse, oppMoveToUse, oppMoveToUse ]); - game.override.startingHeldItems([{ - name: "TOXIC_ORB", - }]); + game.override + .battleType("single") + .enemySpecies(Species.RATTATA) + .ability(Abilities.BALL_FETCH) + .enemyAbility(Abilities.BALL_FETCH) + .moveset([ Moves.SPLASH ]) + .enemyMoveset(Moves.SPLASH) + .startingHeldItems([{ + name: "TOXIC_ORB", + }]); vi.spyOn(i18next, "t"); }); - it("TOXIC ORB", async () => { - const moveToUse = Moves.GROWTH; - await game.startBattle([ - Species.MIGHTYENA, - Species.MIGHTYENA, - ]); - expect(game.scene.modifiers[0].type.id).toBe("TOXIC_ORB"); + it("badly poisons the holder", async () => { + await game.classicMode.startBattle([ Species.MIGHTYENA ]); - game.move.select(moveToUse); + const player = game.scene.getPlayerField()[0]; - // will run the 13 phase from enemyCommandPhase to TurnEndPhase - await game.phaseInterceptor.runFrom(EnemyCommandPhase).to(TurnEndPhase); + game.move.select(Moves.SPLASH); + + await game.phaseInterceptor.to("TurnEndPhase"); // Toxic orb should trigger here - await game.phaseInterceptor.run(MessagePhase); + await game.phaseInterceptor.run("MessagePhase"); expect(i18next.t).toHaveBeenCalledWith("statusEffect:toxic.obtainSource", expect.anything()); - await game.phaseInterceptor.run(MessagePhase); - expect(i18next.t).toHaveBeenCalledWith("statusEffect:toxic.activation", expect.anything()); - expect(game.scene.getParty()[0].status!.effect).toBe(StatusEffect.TOXIC); - }, 20000); + await game.toNextTurn(); + + expect(player.status?.effect).toBe(StatusEffect.TOXIC); + // Damage should not have ticked yet. + expect(player.status?.turnCount).toBe(0); + }, TIMEOUT); }); diff --git a/src/test/moves/toxic_spikes.test.ts b/src/test/moves/toxic_spikes.test.ts new file mode 100644 index 00000000000..bac1ccdccd8 --- /dev/null +++ b/src/test/moves/toxic_spikes.test.ts @@ -0,0 +1,136 @@ +import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag"; +import { StatusEffect } from "#app/data/status-effect"; +import { decrypt, encrypt, GameData, SessionSaveData } from "#app/system/game-data"; +import { Abilities } from "#enums/abilities"; +import { ArenaTagType } from "#enums/arena-tag-type"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +const TIMEOUT = 20 * 1000; + +describe("Moves - Toxic Spikes", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .battleType("single") + .startingWave(5) + .enemySpecies(Species.RATTATA) + .enemyAbility(Abilities.BALL_FETCH) + .ability(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH) + .moveset([ Moves.TOXIC_SPIKES, Moves.SPLASH, Moves.ROAR ]); + }); + + it("should not affect the opponent if they do not switch", async() => { + await game.classicMode.runToSummon([ Species.MIGHTYENA, Species.POOCHYENA ]); + + const enemy = game.scene.getEnemyField()[0]; + + game.move.select(Moves.TOXIC_SPIKES); + await game.phaseInterceptor.to("TurnEndPhase"); + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to("TurnEndPhase"); + game.doSwitchPokemon(1); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(enemy.hp).toBe(enemy.getMaxHp()); + expect(enemy.status?.effect).toBeUndefined(); + }, TIMEOUT); + + it("should poison the opponent if they switch into 1 layer", async() => { + await game.classicMode.runToSummon([ Species.MIGHTYENA ]); + + game.move.select(Moves.TOXIC_SPIKES); + await game.phaseInterceptor.to("TurnEndPhase"); + game.move.select(Moves.ROAR); + await game.phaseInterceptor.to("TurnEndPhase"); + + const enemy = game.scene.getEnemyField()[0]; + + expect(enemy.hp).toBeLessThan(enemy.getMaxHp()); + expect(enemy.status?.effect).toBe(StatusEffect.POISON); + }, TIMEOUT); + + it("should badly poison the opponent if they switch into 2 layers", async() => { + await game.classicMode.runToSummon([ Species.MIGHTYENA ]); + + game.move.select(Moves.TOXIC_SPIKES); + await game.phaseInterceptor.to("TurnEndPhase"); + game.move.select(Moves.TOXIC_SPIKES); + await game.phaseInterceptor.to("TurnEndPhase"); + game.move.select(Moves.ROAR); + await game.phaseInterceptor.to("TurnEndPhase"); + + const enemy = game.scene.getEnemyField()[0]; + expect(enemy.hp).toBeLessThan(enemy.getMaxHp()); + expect(enemy.status?.effect).toBe(StatusEffect.TOXIC); + }, TIMEOUT); + + it("should be removed if a grounded poison pokemon switches in", async() => { + game.override.enemySpecies(Species.GRIMER); + await game.classicMode.runToSummon([ Species.MIGHTYENA ]); + + game.move.select(Moves.TOXIC_SPIKES); + await game.phaseInterceptor.to("TurnEndPhase"); + game.move.select(Moves.TOXIC_SPIKES); + await game.phaseInterceptor.to("TurnEndPhase"); + game.move.select(Moves.ROAR); + await game.phaseInterceptor.to("TurnEndPhase"); + + const enemy = game.scene.getEnemyField()[0]; + expect(enemy.hp).toBe(enemy.getMaxHp()); + expect(enemy.status?.effect).toBeUndefined(); + + expect(game.scene.arena.tags.length).toBe(0); + }, TIMEOUT); + + it("shouldn't create multiple layers per use in doubles", async() => { + await game.classicMode.runToSummon([ Species.MIGHTYENA, Species.POOCHYENA ]); + + game.move.select(Moves.TOXIC_SPIKES); + await game.phaseInterceptor.to("TurnEndPhase"); + + const arenaTags = (game.scene.arena.getTagOnSide(ArenaTagType.TOXIC_SPIKES, ArenaTagSide.ENEMY) as ArenaTrapTag); + expect(arenaTags.tagType).toBe(ArenaTagType.TOXIC_SPIKES); + expect(arenaTags.layers).toBe(1); + }, TIMEOUT); + + it("should persist through reload", async() => { + game.override.startingWave(1); + const scene = game.scene; + const gameData = new GameData(scene); + + await game.classicMode.runToSummon([ Species.MIGHTYENA ]); + + game.move.select(Moves.TOXIC_SPIKES); + await game.phaseInterceptor.to("TurnEndPhase"); + game.move.select(Moves.SPLASH); + await game.doKillOpponents(); + await game.phaseInterceptor.to("BattleEndPhase"); + await game.toNextWave(); + + const sessionData : SessionSaveData = gameData["getSessionSaveData"](game.scene); + localStorage.setItem("sessionTestData", encrypt(JSON.stringify(sessionData), true)); + const recoveredData : SessionSaveData = gameData.parseSessionData(decrypt(localStorage.getItem("sessionTestData")!, true)); + gameData.loadSession(game.scene, 0, recoveredData); + + expect(sessionData.arena.tags).toEqual(recoveredData.arena.tags); + localStorage.removeItem("sessionTestData"); + }, TIMEOUT); +}); From 89d7e7ea655b8a0f103cee1a6ab696a26da4896a Mon Sep 17 00:00:00 2001 From: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com> Date: Fri, 11 Oct 2024 21:46:00 +0200 Subject: [PATCH 064/153] [P3][UI] Fix tooltip bugs in Starter Select screen (#4641) * [UI] Fix candy friendship tooltip bug in Starter Select * [UI] remove tooltip when exiting starter select screen --- src/ui/starter-select-ui-handler.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 5bbe765947e..2be89052bc1 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -2963,8 +2963,12 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.natureCursor = -1; if (this.activeTooltip === "CANDY") { - const { currentFriendship, friendshipCap } = this.getFriendship(this.lastSpecies.speciesId); - this.scene.ui.editTooltip("", `${currentFriendship}/${friendshipCap}`); + if (this.lastSpecies) { + const { currentFriendship, friendshipCap } = this.getFriendship(this.lastSpecies.speciesId); + this.scene.ui.editTooltip("", `${currentFriendship}/${friendshipCap}`); + } else { + this.scene.ui.hideTooltip(); + } } if (species?.forms?.find(f => f.formKey === "female")) { @@ -3655,6 +3659,9 @@ export default class StarterSelectUiHandler extends MessageUiHandler { StarterPrefs.save(this.starterPreferences); this.cursor = -1; this.hideInstructions(); + this.activeTooltip = undefined; + this.scene.ui.hideTooltip(); + this.starterSelectContainer.setVisible(false); this.blockInput = false; From f0cc1fc88bba1015d47ec5a34d83b224952b09c6 Mon Sep 17 00:00:00 2001 From: pom-eranian Date: Fri, 11 Oct 2024 16:08:39 -0400 Subject: [PATCH 065/153] [Sprite] Hisui Goodra, Sliggoo, Shiftry (#4642) * [Sprite][Anim] 275 Shiftree- cropped ear fix - @hamez * 705 6706 Sliggoo Hisuian Goodra [Color Fixes] - @ rival_kieran - Fix to Kalosian Sligoo (705). Front exp should now use shaders properly. - Fix to all of Hisuian Goodra's base sprites + Variants to allow them to use shaders properly (as they didn't before). .json file included. - Fix to Hisuian Goodra's back static Rare Variant which used colors from the Epic variant on accident on cheeks + spots and drips. - Hisuian Goodra's eyes on Variant (Rare, Epic) exps were mapped to the wrong color compared to the statics, this has been fixed. - All images should be indexed. * Set variants to palette, removed old files --- public/images/pokemon/275.png | Bin 10555 -> 11106 bytes public/images/pokemon/6706.png | Bin 1040 -> 1103 bytes public/images/pokemon/back/6706.png | Bin 879 -> 942 bytes public/images/pokemon/exp/6706.png | Bin 24796 -> 27836 bytes public/images/pokemon/exp/705.png | Bin 1851 -> 1913 bytes public/images/pokemon/exp/back/6706.png | Bin 8135 -> 8808 bytes public/images/pokemon/female/275.png | Bin 10686 -> 11186 bytes public/images/pokemon/shiny/275.png | Bin 10555 -> 11107 bytes public/images/pokemon/shiny/female/275.png | Bin 10686 -> 11186 bytes public/images/pokemon/variant/6706.json | 40 + public/images/pokemon/variant/6706_2.json | 41 - public/images/pokemon/variant/6706_2.png | Bin 5170 -> 0 bytes public/images/pokemon/variant/6706_3.json | 41 - public/images/pokemon/variant/6706_3.png | Bin 5177 -> 0 bytes .../images/pokemon/variant/_masterlist.json | 20 +- public/images/pokemon/variant/back/6706.json | 38 + .../images/pokemon/variant/back/6706_2.json | 41 - public/images/pokemon/variant/back/6706_2.png | Bin 4762 -> 0 bytes .../images/pokemon/variant/back/6706_3.json | 41 - public/images/pokemon/variant/back/6706_3.png | Bin 4765 -> 0 bytes public/images/pokemon/variant/exp/6706.json | 40 + public/images/pokemon/variant/exp/6706_2.json | 2015 ----------------- public/images/pokemon/variant/exp/6706_2.png | Bin 55978 -> 0 bytes public/images/pokemon/variant/exp/6706_3.json | 2015 ----------------- public/images/pokemon/variant/exp/6706_3.png | Bin 56190 -> 0 bytes public/images/pokemon/variant/exp/705.json | 33 + public/images/pokemon/variant/exp/705_2.json | 272 --- public/images/pokemon/variant/exp/705_2.png | Bin 4111 -> 0 bytes public/images/pokemon/variant/exp/705_3.json | 272 --- public/images/pokemon/variant/exp/705_3.png | Bin 4119 -> 0 bytes .../images/pokemon/variant/exp/back/6706.json | 38 + .../pokemon/variant/exp/back/6706_2.json | 776 ------- .../pokemon/variant/exp/back/6706_2.png | Bin 22444 -> 0 bytes .../pokemon/variant/exp/back/6706_3.json | 776 ------- .../pokemon/variant/exp/back/6706_3.png | Bin 22483 -> 0 bytes 35 files changed, 199 insertions(+), 6300 deletions(-) create mode 100644 public/images/pokemon/variant/6706.json delete mode 100644 public/images/pokemon/variant/6706_2.json delete mode 100644 public/images/pokemon/variant/6706_2.png delete mode 100644 public/images/pokemon/variant/6706_3.json delete mode 100644 public/images/pokemon/variant/6706_3.png create mode 100644 public/images/pokemon/variant/back/6706.json delete mode 100644 public/images/pokemon/variant/back/6706_2.json delete mode 100644 public/images/pokemon/variant/back/6706_2.png delete mode 100644 public/images/pokemon/variant/back/6706_3.json delete mode 100644 public/images/pokemon/variant/back/6706_3.png create mode 100644 public/images/pokemon/variant/exp/6706.json delete mode 100644 public/images/pokemon/variant/exp/6706_2.json delete mode 100644 public/images/pokemon/variant/exp/6706_2.png delete mode 100644 public/images/pokemon/variant/exp/6706_3.json delete mode 100644 public/images/pokemon/variant/exp/6706_3.png create mode 100644 public/images/pokemon/variant/exp/705.json delete mode 100644 public/images/pokemon/variant/exp/705_2.json delete mode 100644 public/images/pokemon/variant/exp/705_2.png delete mode 100644 public/images/pokemon/variant/exp/705_3.json delete mode 100644 public/images/pokemon/variant/exp/705_3.png create mode 100644 public/images/pokemon/variant/exp/back/6706.json delete mode 100644 public/images/pokemon/variant/exp/back/6706_2.json delete mode 100644 public/images/pokemon/variant/exp/back/6706_2.png delete mode 100644 public/images/pokemon/variant/exp/back/6706_3.json delete mode 100644 public/images/pokemon/variant/exp/back/6706_3.png diff --git a/public/images/pokemon/275.png b/public/images/pokemon/275.png index 07a6fe725adfc61aad7a862a12678b088b533a37..61f98ed16555660d553a699e2dda6d8c0b2feb6f 100644 GIT binary patch literal 11106 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 diff --git a/public/images/pokemon/6706.png b/public/images/pokemon/6706.png index 44f627acd1011076a81973d1fa47e325aa12239b..e967b5508713a8aa1802e00ca8963727797f1275 100644 GIT binary patch delta 1082 zcmV-A1jYN12+s(RB!2;OQb$4nuFf3k0000yP)t-s0000F5e-X4Pk?iOn2VUdtik5f z>G%2eVp4~ZaJjdU@>61Sj+Uy#%;DhV^fo|DQD1OYW_XK}rp3kplbCiSpRd+&l*v8AKWycm{nM zyV(7=!MrMQAY(`3IQekSw2Nqw>8#I4B|}Iz$~dKjPjB(V=jQDHm?>$f!~79p>Y$oP zFi*&tJ@S~546o5FXJU*gWtBXb87aeC6tW95sefyv zemu<_d`@o!)-!T}@`bL*f-POhXmLetoVu<)e8;B1i0zqJit33()sCaP!P$7GIj z5XE-8lUZKqf|t*O%aENK+$vI%y|nh|k=P>XGVI7nnu6@J4qeyFkjP;TTok7!Tv?v& zkbih9^%2Y51ig$OUiCKHL`38{JtsTAx~7+8ozx_t1sHpC9MnM&=r zc*ro+Le%D`;N;jKaihAsb=YlUA@0WJygnyea}pL!T95GNYR6UC%}+#)JdoJr^-{!@ zcnf$U5gjFOxs6S}5<%iRbV3w?O#3l0GJoa#X^e7E2p^^#d=Ocz7VS(N6q` zOQchADe>kvWHd$o4d0L*C5wXifrxj6oDg4=a61TBA}-{qKZ>XhzeSN*{P6Qei8FHg ziEq2I{1V9hTT&Q2gMLh^AB*XinZNq0zxs9k2jQQ9d?va*lmGw#07*qoM6N<$f>Zqx AD*ylh delta 1018 zcmVvo3VVmOcL6WgaTac zaO4(+x(sz-HF0pnm=lsvKD_hVJNd?ZLed$twBb_4ZNiCKzM3PFIA)I|=W~up^fs2y z=8z2e5JwhUa&s@|d?c+c=38VrQ<#?IOb(})ivwThnau5(nMkaQCYx@0dAmkYsrhkC zb4t=2u7B%lBgtlpiBCjho4I5!i-LU1G$o`Y8Jwe-Psk#s8G}8k=9xeeO(EAkrWt}| z+=3*Oav2jUx!SG7Gy|}b*0!f?`gp$xYfW>*U4%@BGn)O60mO~a7HQO#0>OLIzrZ$i?oRK6RS zSFLq6M&z9+?xU*LiSdIvWG49(2p1xUTowQjU?(z}^2OKbMpSf}xh#ej4_$UOz*&ES zB!BGY)M`0$ ztV6cL;|7~`K429ixnGZg6(qdFoU;*2ZMA{ET1yC;J>|rW>CE<~% zz=<$ctRTK@cnA{dU`Ms{1$0cpV~|OSYIEm2mGkuJ2VOPl>xFdQCGq1&Vu?&D0O)Lf zLsk>oU-*VpoU97)1Cj0sB>`WPTKmO&DYU6Sintt}MX{;BnaRHW;M=L}e0(lck#M=Uk@8bwbB>m(#LVGTWOb67t;NpcHb6{PW_b7c_HlPS%m4rY6LeBeQvm<} z|NsC0|NsC0|NsC0|NsC0K0n+o00097NklbBe41WMnWbBmMfs*|H$5!&b z$PP>2?p3EL%!D%%HZtxsv0+m1UpNtjJX72wODmF{Z_hURn$|7GiGl(@)q|oZb~P*J znxybrR~%^>=(U_9@htazYRAcpQ&_g;-VOMXb0BemA(SGGV8MYLmrcR|3es$vN+}4b zwiUw&OQc3_ihtY$kb`2tHJTSSOu@59zY;8en{Rj=Ikjb>xrCm8g_-qQGe0s)d@1^=uu^;B~Cexz}a!= zAvf@J`~-V7fPsPwO_2Kj!>3n!9ETuhz>UPs;ZlFL4qt#(L%Z6<3ct-eO~4mdab| zAw9+cIDhc_8-KrUdoZo5<0vkBiJR8VgUc6OtG7sRT7R|;uLj85b?ptoB0cohZQItV zh%*BW*3b}wl{(>l z1WRrN`lqnEyz*=AY=T8+ZnYx`GBx^OG>rbnsDBHxcg_bc<2})Phr!u{-L2MHP^5Pa z77X4|a9NVbj!OiSxbIz$dLF)Axw3)ta?pvm48D@8TMxVQ21P67Juf=XtGPE5N2>*O zXQmx6Ad!qW`@wMOQLk#dRS(2v`n3nudQ0r3VsVSvI`k@#yr61LIb~kIn-0J|s%T|g z_J8OOxu)dL-lu>@v{{lTjc3!ky-DdhH upl9v$>n#{pK=(rVmnrrawEyu>#4p8FcM712k!=uB!4YXOjJbx000jW4K_ebOGQspVsm0rhk$c`j+UyCaJiU^n75Jg zzpTN;%;DzK>G%2eLzd-y00001bW%=J06^y0W&i*J@JU2LR9M69*x7RHAPfdzWE2C% z>H9x!5vy3^C3oliou=_j^NkcR#uj22RU)2-kfY=oSzDQ${D1fEGuIH0aT-xl+^c<4 zX5v)yBG(KhYEyBgF)(VJBk?MC92hvmIP2Q>+;0bdxJYYBBUp|=91cQG0wrm_ zOlvKqQu~f!g%uJVCo(4hI4BpK8iha*$@A}E=$+#T#G0$Xsi&qn4rsgp)*h%sozVz{ zh8uc^ia#}mlz$P(Jr7nMsKhlI|C0j^M_xT1pj3xBXYej~HJ3g1^$mjEdnv(~5ZzIr_Iw9lq><7vF| z^<@qqfImO(_x0EVffzW-ZLe?wRRr}5?)6)hC-6{8YYo7cYkg%vs`8xY&!2kZa%F&l z4My1EDStc$-r0tsOg)I(9&ETP4TEVo(N%ZFV_aVJvEP@T1(9)9&Ntz`Hw4kz3*JYt z=2l=l3)N`1Q4Z~CZ&+ZpGWXh<0tY?D*kR^3MpJP3&E@ObRE*wfaL*UYiFg&1Wv{WX zytAOzMU+dhh}$;xXw4H+?$wz$1%tSS`4Uy^J%52=Pa{5fQ4C&GxwjMd5@B`5Pm?f{ z18r>OgT4)EnZKRPX7$mP-9f_umVz0SQYgBGtsa`D(fVx2!sgaqQH^^}~&( z<Px#JWxzjMF0Q*4-pMZMNfcpf0&DyzpTOL)9Ls5_F__pk#M=Uk@8bwbB>m(#LVH~ z^V07*naRCt{2eT#zIxQ?tPwH&)GZ^xbg|JN1Yc#97fg-48 zT`vE%|C-#k*hczv_B`0f-s|Z2%ss}tjf}5!>l>hM?EhSQKA#;nLm$`4H&aJv{#lyw zS#Ef}z3_uNdTpSGbuNax_0I)-)(P-$5&Ddzahgz{(6QNxcWKX*^q^)h{v^YDQGYSc z#c($=K#SLqXB}Ms-rE0R^i9)5`xyFdLYJ1$P|q~>Ql3=nRKg!>k4N>LM!Sjb*_uJ| zS>y0Oo(TK@GY$gvLEc;ICHAOy+N8m?dI5)_opelu0As;%u$$(dd$;~)H62ZC50AYJ zWEBw=eBEmhB34K?(K8#?zw6(Wl|UG>%8BOS_Y?*T|FF{_=cI!c??Ahm=w@| z)O*O|zz*}}GJ!hJTtLr8JJcZ4g8KP=c{O%l0G<{OXhNG-1|j>_kEA z?G`$kdp%$VG(SpfMi9pkA^ohKrjbVtb%MQYV6Z2d`)T0YM>zhhW7t>Lu)UkP)AWyZ z0=v`bj5i55%n(McQw~ zXZre_0lvr~h9DUl`{&pOEnM1r|5zAwLtH*SM?|yavaO(u0_xmlt-&9-3 z;8?~wVeJ0|`2JC5_T2}*)^B7oM*ULjYovH}YPCepW-jX|DWXGIkUF*2XV-!52GO zrilV#E(kw-7d!ZJzn=HnjNohjskC{nFa1-%@4*p_-8@U%P^V|J6a0i@SoocgkoeemQfhrsHFw$u!GDZ_-`(xN5NqH&=soz` zwu63+4dbtY?;=L|SBu~|2XLfu)zm9?>V4GKJ+s>winN>AJ>hGe2)@I9o%Vm2k&pO; zAwNqbewLkMh!}Bxi{o5r;9%g}aNI_~AL%qOwGqVa-iKo92EZQ}p%H!NXd3pH%R;b6 z7?#8X!uPxu@JVk1KZC^Z#(a%frfK9!T<6Pk9HEf*a-fWGuB3H)VB*gHpvjX@}4KV3?`D1BpRJc=ncN$^o<35UM$Q7D3EA_E{y zZtYgfqM-O>-BKsjXVBx~7*T>zhKP~JJYAVV)RrY;AHa7*-ExZv>e1VSzswhped-J0 zkKWF}Ph0_QFWkVl{IY!HaX%V*K@34BVd2lTQ%-5_c`Y}~YrH9wRe>&T`VV@De2eYxJSJPkYGDnC|a1vju z0{+Dz7>CR7+sB-PH^rWSFZK0rE5qpiJ>oeK>#hmNGV&B={KJ+<$}wPut~9-17?))Z*smCnNJ}2F zb9#^Yp?LKpzS=zBr+FoNpNNLk%?DEds6Ajn@Ynb>0OAz#CW29mXfVpe*Ai9&1K&-} z{t{sd=esa?QgAi*ZVek&HZXlk90|U*WcwV2()CM{JgiuFw(= z{-uh2O5@HaF$GGF#``_egm~~*ycQz%6HFChI_P8wj)tQQc`cRf`}MT!>&-pJO%GrD zDZtSYtcfqgpdt8;^OTb2Fph;PpmDoU2Zj)z#<>ZYA^)!Hqx4Ec;wEU<%c#i_#J+N z_st1?zln9DVbc`CBc9xOy%Zd!*99~uKP`tDrPH-c5f~zJ87Xz|Z z_fk_?SIE;QwHpr@did1VZ~|ZM^>~!ms%-Mz`iKN7gO6WugRvVAz`Lvu9I@*I%}n^O z*!htd4oVl{NCAx-zwS-w^lr{;8JED)e&ah(|i{myv{LeCubNa`j7l?F- zCU|agE!-sbijSJEBDVK37&7rYXH zSMQzR;vsXddrW#*daX*(zxbLyMUb|sBu4B=Bx+pQULm0m7*32AF@n2&@?6&8M)DO3 z#WBjP{*`Amtdpm3^r+Y^XTiDMjj`tPw9K-m9Kdf< zhVdQ)8howh!VloDAO6>`RR++nUKhG2Y)gz9VsFBVm$Zrl%b@=}xf*a=8fFAyB6K2; zy3WD~UDrFNGCp1u6v=w{`bsEbG$JioQ<28dt^F{bm@xRkKgAWhu*E8a|MA12|Ml}r zUA-`L&I~w%`&=h%%&80>6&^#lPdn&ySCFAD#-}j=l!|`XM^b zSM>Bf%=#n;hOv-zfx7+t=>xxeTMT|B%6$Ed#YE=n%a0$mM|nIP_>*&#P_-KkPTXTW zifW3{{mdUb@Dr911^Y^~M6*Tgm%Byq zC*BEg6W)nCOzI^(>Suz(#U(dEs9v-DkWkFszNELhAg=~#u+@#aOmvv+F@8EwxDZmz zmHQcgE&gOTpwIpPeSUs@-fn(&Vn9rBF>O!yutU`NvF=ghD@Bbj(Dxy}F3lDU5uAlV zC%{c;C%QgBudDi~0LPtBQskYI&wSk#@QZ_rPZPT>qRW6G`q1R^QbAu!G5E#kYw>pb z%+|zQ-}UE1nWQxXDI+3+FL9ID$91ZL?=n+JOfnpVk}~g< zx~UTq`;|~w?}i`t#bER(`n&{B0%3}gTqeAj7_Slfw|&9yE^rUn-ye4m`p+%?rXiT3 z#vU{7)N{Z9qy-YQ#n;Cw&(Y++EW>>$H%ZU>0)2#;O^GQzYTj_SG(r^EmKD0pdN1I+ z74@ZI5BjZuKsCChPSIl||4acKW^WKL3fX3UCdF&iZUMmWm#>`d|53pI`gzx}cW&dF z`*ru6Tj~7e9Y_z3BwM)GeT1i_DGG6J27O|bN!-LeEOheo`sMmihoO&hz4Eg%9O@EI zWabXL-S3)9XCS?=xyRjX-QvTt$4Eou@f!t(@5dH8enI>s0CRI;<9m-9Ic(%!dQS(W zM=@uM(65Z!Q=ApWxe{eUAKr;MjC+#usQL)wQDyX*8-Fzo`|NA-<7DjP!=lIBLZ3T< zaiRe{W{VPKZ0^b1YX|@0!t7mWjidp?#)EcM`gjyW$hhSxLfwSA0_G+&eOTDi(rxW6 zJnB<@hL==IJ*^8IyYo?e)upzr#N<n60lpfGAfeMVx&>}>367S76zsE;1#ZDT>XjZf=K(fBgzjk?UwoYNwO>8`!o$LT z3;JiR*AkJx1)s5YJH5S_>zI0df4@q&u{m4hCb$>=Cz1{LsICDP_nbQxgY&i2&Dt+M zEcmr)I&LXo#65cM^-n^-w^#e02%Ua?clR6V6S@ucdVRkJA2;x3{SS-L>HF8v{PVWK zc8*D{0iMy*X$+0AZevf&EU2^7h+l^&)89{O_$NQ#4F79j)PpZN@~F#jpc(b+frt5k z(cMdE8~^cVn=0c!7%u+dHn{YMd~|=-NUu=`MNRp^_cr{bnw}-WDj9Q(w z`e_>N=-Cv07NBfo7k7%z-yOOp>&ea zhwoo|Ducw-PfttcPNq~ghCa-#y`?m>*>0aY0RB_QUg`t#OBH(&{B}1z!>|#;YeG?< zw}BsLxo&#^eFT2DRSWhU$y%=s|30y2DdW`GMd?->D($uDbF!g_A&=Iv-_%^jTD%lk zn&rME)NU4^It)Hh=j-tptL|J;@#qw#7cpt3B{`hw*rQjgeOU)?KrXLf6vpU9|DaEe zNi)6ye0_F@e5R6?DEJfTQwtWbtM(y1xM$tpfV-GxxwN`hv3PROr_7p&cD*tU{5FVB zX*pWD_4UF?ZV-GeTBr_90E$1;ovwxTcPMmVufl|GRJVfHG~21mY0;p;4r2trNfhe+ zMmR}&xjeuWEew4sKY4S_iWBkvYr78GQ-O)ysNRYFAoz-Os4;-s9p(s80KfNvA73s# zt8xgW_6aS1qg}2N4u74l*f$G1J_$_TYPl$)1eC=VP+Amq2>ecoQcI_U;8Vf3v%M2I z1{RvR#7i>bJsIIX=rXPS|kU!3Wxw`y0n=_{>kW%K%~& zw?Xi2x?>1@TQ~#Rg$k5L=;JlG?BvIQzRX*q-4)!ZUL49@#a%Z_d`d*$uK((=U&D>D zeIC;Rep!t+mN*Fh(Od?>kGc^Fdw%bgyDy}MzLL4HUF=lhM)m4DRv5Gqe5hfR?($tN z;6smz_w$dDi$S4yb6x`8Y0qWb1_oGk>HIb8E5G!v=+w-UX80+CU#|QIm&8Sz4fJ&e zZ2{li^c4e-(~%1oRL@56V|zRJlwVkT<f|hllwSt$+~?6r7&3trpGg)@8hQQ0`L!8b}DdlzehVrG~}x% zrsLoX@4O^gilUIXWiPmofX?&8FOEJc6Q{vDOsR1V3|F-X@ilP#I27 ze0SdKE}zj*YOF3{?3wID+9KVkesx#C60?~{YUl$tq=64=mw4T8xe@TSa6$N?*8_ya zr`@(O@QHk~&?#QN4JG`h#9{9m_?o*+F#(DwG5C%CTUd*Dqq;XutOgz_ZX%w54OPGg z=#zC%vDY9;bSFPG&uj{-mE{Pvu**+_p$#_3g-Vq7A&izU$0fW~uK+V19F$y;(C6H3OV4=Jm3qdK+geJV0bqge%g*EEH`j6DRucr(Tx z^vc`Ao45iBLj=Ol4Vn1VakQ1CxKTZb1_Qfk8=*2u z-&)`U0dHM77OzJfF47z|Iw5ue@@f9=K@i-gQ-}1^b)k46FVSTWdP(4$97aTmFH-%- z|0wob`FTKkqx$`RUyz*wn@Y%)UIqH{S;MNu3zV25_Vp1`B6H;qBZ-*{D6JfP z9Vuw|LCk_1)!mhQcjQ$~pOVZ<;D-~Wb*)Lj5>2pbxR86LS;$|#z&_!lr_cv!fWlt! zo0jM=u8X9Bj?m8wUm0S48Z1SCOd)k*-~*Hr`ZIk4ij@BgY#4%1ZdCV|L9Y<~A)k`K zU*>Qq330?ipj<;R>9;qqr>i)74DB`*>1Q-nz)7xYtChRR;;R?TN`!|=p^0vK*}g}N zXA~vAL^JxaQ9mp}AHF%hQT-CG0>9IxzjgW)1s|Rw03h*z*~0h9LIj_RjKfEPXd#F{ zPZIdE_p-bhVJ@S@i##<_VtUA->5)7}4rod|qbRW@%Fw4xNG9|~^-Dyb1%A+|Pvy6) z+`x{(XNtT*SCJ_}dd}t84xXgkQP!Jv+%hB>5e`B6IeXa;5sybgpGk*CLHFRExSyKM z(*Ga^GzEK(5?i7T^dHg!#W$+^zjBu>M>09Lttvhxfxnc)2`tL1iHC*)E?yzfWs;&I z#@>JG$gu|!+Cloc>}LZdc`Oq4z+>1eMyHW*r0I<1B{`reeI%6f5-sn+)U>%_3Vyj# zJ^r1)lOMrf^(pZUVQY%=sw$vsmO;!61~p3X+X(aX?&%6{<~uM8czCpeTvMHF3Ot~JtY}X1U`=! z*=Huu!9ki}1VI#zKS(Q;4`C7=rQjo1lLVuq*F2msDx$Gzgi=HcA8H8TGminC1eCxM zy+W|K(z(JuqG5Wa`i+=%E2Pt>D2D8CB8e&2WI%JcaFC*Sp}34kqi~B^As0ciIiClG z`e_EAbxK{BV01__-fa?(#ZObg-&Yd>|55cA3rfWUH0Ws^B{XuSIy379iX`ZvPu;3? zj~z}(;6n>3S)}hg!#Lstm0k$OiLZk!yqr$YlwSBPgU94>F=JmV-$KpQVZ?NXKFEwm zIIyFZ1KTJ8xE|SVg?uEl_)2v-qC9Y-epL2b41M8nf+%{jw=Kz{5ichE8~~$R-<({8 zRRzUD=(jRbr>KIC1*2ySKJ5ARl_ZKK@MD&VafW(Kl3s42q=4_{iJFZdNh=gzsU9Ta zoDl}tBl}d1&`R*r!wIed%VYlH(MKad;InWMLPa8$FjioFd7iuRw=(eEvd0L5(a>#B zPd%cQaPfnBOb9W$h%&kOzJ~slr+ytHbfvlqzB8%%R1NzJKb$DwC&4DtVNTfsjR3g} z?pAgc@T-@ChDW8Wmxy#s()D^%1Z@+xdoCfkczh;>lhOS`Rb)bEX7{5Q}P%jEVV3f7n3Fkbrscy zW4K81f^`ydU3^>7`Wk+dc)%`tCrK*P_jdvPF@Z2R=h$ z@ct_ymMwjGxtGw1hbHk8E0oUUH=BK*kY<>(J&gL)38j@m6hWI{^Wg+g0IrL3#%v)547p!nmM~U)wFKs`IJ?-D z;)CDN#8mOmu+b;Zh8R#|IulBlgnizf?I0B|p7!B~6>0;2ai1*i+lkq4U-kg-oxwlg zQ)zmkDsPnKZOgJU74M|xt7^W7Sg|LH4syY=OB9&5fFJxuPE1n2aJ3Q$7Y2_(56mb< z>|bF;-R};24F1FFP!}&z?ZlujZWp?^iqfxF2`Iqq0Qg*$H~xHOqdD+Vz)10;)*&Pc zfn2EF7#}rD#a9wjWss4_lK9l<6M*r%-6d+WWby!-o+fYI(!5=Fq?!YyceDO&N} ziD|a*pb{^V%WOR>$xWdT&rTK{fS-4dyHibl%f7TwK-l3==>(?y75G%A;eJ)#+pRNT z0A}f8#Uo*F?zJPBIvF@g1V8ok4{XJz3yc?u%UBM(bE~BcvJrN@_%Pw*uebQuV!EJJ4GIv`+e6o5BZ!R_8Bk}?K zkJbO518Ew9{sPc1W`j?afHG!yP-ng;V#Gwz`J@p(8vE^T)7f>2slxf_YY_O*Uavc7 z3H=?U$=%*GXmq**kD@*`4E=EHjTk;tbU&n*kH&Vp^>$rCs^|_-LYpQ4{`3*sL3E%^ z>Qi0J=x3igZ11^7{4>Dse%SxI4aKKw zbFdu-X`X37*?sD`*;b=E?SH!ioR7WRlpjRN-y4Z-_)zd(@VQRAcYt$jUt&6WgFpQ~ z9(oQ)f}qFlQ*Xvz(VaUc{~kiO;6F5qs5^o`>Czu33zKyD5X8-^o07*naRMFEd ze-^ODtLY>92z(KHCgFz)Mw5vtSgDADk9^oh(-|?QY`nTczXO?A>DKri%02>!*Vxe4f+Q9 zK(7Lg_W2f+-efk|eh-y6gY{}RGCnH!1J%|Q6_4T_hi0{t3i{w9Lx{g0Zatl}VB#KS zGTX4Kwl`6U6Ik!IDI(ytS)9R-sW3HIixhAZ{H5rXMEw0Bl+qLF{v3S62Su26_7;KqQ``dPu?Q-z!s zyVWc;LQ&qvP--q^v#N%UY(@HM)_e!ik1JM)ihr7dqN>`qXGOI$>%ZrG;;H1dCz)t4 zVaX&AP!2nlI>FBtmFPAZ%^r5CO8K?&!ZXAks==m<5Fb-jzi$J-V)Oooq~~y5ap>1aXHFj6{$%d4`eA| zO|CgYKV@}R{MZ0g6&fX-fUU`uoNG@8t54Obn(a+g!s1d5tB5o7g1=zd)~t**rLj$_ zgqx<=yT*D!z6P&6u{@(K1)KDz7ciD_6 z1uP6sk#LhGz{AR)(iS4?zh9uVxMLDcU3t7l2}4=g)}%;_yPvKTUS6Xpxbbr2!@7s) z1pfr9;aw`&qoOb7Pl^;UADt-ShF4MsA78J2@s}1vVfh*INL3HC0{*3d&$cE(T6_t% z&1PvsC!1D~hNwi-r3_Z%KhUvHH zN+f~WCiq2He)lO5Q0U$S`IHd$HGayVUsJoHqb<_}S4xufAfjPcCO$*pbDm?60=C%p zcC!RH1s{K3J`uB1Bb!k0nOU?qiJOyEaVeFer0M}Y*-XWwtDzccp%UdonS_7eq8$W( zqkll?H>7~A0`NNc($BXa4Ja!PDER}%qA*+Gdm95kRu9spyP$sHi_xuWq=8D1YeX%F z8`)|VeKYvkLxIPqU9*P1m5&y&Ziz{p4ZgfJF|H+UH|dp91*OZTlE~Gx%EqU)1fP@Eg!4*(Cc^C7>MOr>T6v>j%w(lujj3HUa4*!fzO> zWc3jEL{eLk0`5Z}=rt=hUia-Hcs40MRRYSePoXS@Pc{c?M+%jgb2f?4=WLRcqg!K@ ztoBVKj7t6=Q}F%JG$~+{RQEIKy7*ILg-IZ&`m;&)DSc})&QKusLPTkxuTTk`Ovuk_ zPfheSf-(fYk9Hy4Aw%?f(|+`el2^C}s?8+K=$CAgeM;Y&bePRP#p{NgqCE1!rZxfT z7nn^-G7$qx`)E_nQRCnzmxq>ADd4Qy*f76wx#kv=utt<82q?*?DqE9IvjF@B92BNg z?V{E8s2*#BEg68RolH#GeRKAZR$Kn2rHVbH5+tDH59A~+VKjS*{u4fC!zU3c`q&Qo zkeAlI=Y8oNl@EwYAifni z7Fv|DF`iv1n?!8pkWC7eC|sg~J|;e;fIv?o{4**a+p;7Y;m22$I!8zn@L)#k*h}D7 zm;^Ekkl}{!ETRZo6K+;OeS_F1@Duv9;Voo0mB3=4#VX7u+q1zXAZ8hSR6hvcFNc3Q zRW}eN+cl(s1qpZq_V+F(F_cYOTNAt4GzaS87TH4fQ3;<-*lD@93bRQ^u}-G zQZ*Wfq6+#o@X-~ef)=cdKNjnTAPG#Ow)S<99?Yl2fMQ0U`jn)>wh|)IWD=B0_-rDa zmWOnxGic(n!m_>k^ShsLbI-?RbnB;6C1Qg~{wk!qA zat$^uoYbHvRANV;1r)Y5i9V&BK!X7nUnRvO+DZN)8`13{`ry7vNvS<~fC#;$-O27r zFD^Bg*2W&$bv8*rA^gNostUj2Q$!q;k<;u@B0j>@hPziuKw(>xnoo&l3-}85&!)9zK*1UcP1K&FZPYB)GWQv(jsbvZH z9YQaaU=n?~&S~^1YIY9j!*AKd3dEH6kF60h?Ofw0)9;h8eMiCsz*vZ5x0`Z z0*Y6{6(Hk2h15ZV(fhp^8KV+ZLKN&xpij*j{LC!*oXLO7CYK=M{*l|-^PRAqBKE0N zJnLfJ9{i%zZqWcQFzu5ogO37AJ(*DT1n*Od)vH7&nORC z=ut*0QKhFyqOa~#7SHG#sj|)P6TD{E$wn z$s`1n0{%lED4yT7&!@zliJ%TzrxKgMBsh%8{fNt)>mZk(6!O zB}%{so%S?wLB5Y*&&0Z05an#Lzk0GDyuI_OzHAbG>Q?os2_~tUUG;#2<0MfDfk{9K z(Y9F&>5U%)ccG7ih?erRPP@0c6bW#LKUHck3h+&cT$gYhk%Z-K*~B1MAD!xR*04ur z>psN}I6gs!rV}pAF*htoh~DCKibgG@clp6SWt*#82Kc{KGHKFjcS68O1^Uwqz!UJZ zwpSIQy`^lDpx3eq4JamwyEG&dtl@rjsJad+RKS`zn`Sk{(8}P0s_itND+K0TKx!G?%H0**!Rl6Sj}xP&1$p3R2U9fZvO~`>}%+iF2Q%)IPyoty=}H#@oH?y19Zvwjnq*aV^yBef3SO1UfSPoh;`L#dm6 zg(IjXZyr1yg{6Z6e)m4tHz5U2CxFBP%5+LV$z~@%@-vdu>}(-6f%m&39K}~A+$!}E zrI<}M6eH{PM^J%4-g0GYE!gjI-?guw0|hRnIkoP?AiXD`2xh%c9gb5IDs~;B5_zod zwEP!vD(F*_sf6Mx#&Poy!B4x=9QU1J2>xO0orfOgd+!M-Z!+r)-_N5GWoTkV`S`GI zOI|N`s_BTs1S*Et>4m_*_ng2rM(h{YK_iOY6Ht1S*?F1@mAIe9PfM|>dGRji&8P~K#gP>JcR{jT3ePal4RGRk^)tR46ceNQ9Ye{0|$ z9qzl@n*z!yX5U360PBt7#X~-|lm1^0eZPO0{02e-|Fk8Wj|)z+cX?MpImhgKsD$QI zADwpG&e09W-y-wy8;DehC|l7}CO2S?e)9JOtAAWOg-V>|Q?J<3eR}RU5WZw!t`}IF z6OQLU7;=W?KdZfop&an3IiA2xZUgZV56V8Kc|I+oDmu-lpnrZQc|&eW?QINY)Td@} z0P}hQ?9UpSF4KHSIQ|k~0-5BDvA#Jsy=%)e02d`&he}crjU{$tw2&!#+OL+Qy8>2EL1<4XNG{?eGJc1nQJ2HcyLB(en0u8{~?L@iq3cE(~e{kBvc0A-`)_P zg5fu9bSODJ#R1$!Y$NpoCjGY!dm5tVK3G5AGtdKmuB zdI6qQDE;TYF+T%*mP-0Fi6T_yWvT-Dn?XmuJ}1%n7nMky$|N*$dN7_8#bQIlvx=nu z8W*@5Css%$Ad~1oA%p3jaV}IA2D%`B>K`N=rW@S%uPnQ;?Ev z=)f?E-e@?qhKg(jC!|eT?iuG|RYC4J45JQx%|i)~NdH4SnT#Rzu6WYZ$nEVcU^L|4 zwxZpHCKk)nqEymWkrj}t3zanmPeq%s`enyRF41#38-8DUnDMIT=9zUGXGZznJP#bVaRH1n5x{ zZ_t#UX*fyb%>BVYBREn-U|?c8Wd_MhJw9dW^b+?H`ZjXXjXsJeip@@wz__&@MYKfY zovlSuE@}X&(jEAB4J&B1O(O)PqUvQD=7s5$)g|go@d>BAFiLBJ8UepWP6rFL9rY-1 zdwU4_o;w#2pr|P}#hIlFV6x0NPteF}i$*}pz+#rFN;ZJ%Wkc_BpU6Uvf1%^lmPw(oGj;I`Z&uKz;y6Ij3!neQ3I?ilTgXi08Wlj zHt^;61O!h>E-`4`N=%~J&MBK6tVb>U_I7ocC2q561wzjme8HozO?6@gq>AdLHyO1~ zV`Prl*W!LPJ{4jT;J*~Q+t9jIn8ac1+wla~qrkydM?Ffqyo?&N0Xsp^7x+Qxc}EfDZ%IG)KYP3FN0H`2FZNzz6X}sY$?kRIHpt>^t_4 zaZ=+?_Qn;Zj&qU}z|u&I(6hU;o5yGgd{L2p!+%PO)Qcoi2Na2)S(?(SZ!ZTZm`j4t zaTO%+yBT}~_En>}9u+Gm5&MpMRKC3(&gl%%YG$YHNhRLrRf^GqNm-Fz1WHxCoT1Gr z=*np5SHTC&B(vQ|HJ2z%LP85svu4oOjLP+>ORSt+y6aKm?d@ewP3VVF7L{)~Mw3+< z#v!W6ia-(7OFGg=GN|a1LYr}z6#U|!i0!6iqQ;Z_2SMRHB9BtDsD;Lj@|uKNkBark zbo$y+kCJY0hv-|0DNy;IZQMI8dwFXgwc{@lmsY^M1lsBi4adL z;G$cMzA@K8@=G)u5(MRIpwiq2p zB7nt!0yBvvPm|uQ)kQ&oYLZA(IFZ5EJ~=Xc8l!|0y&jeRP^p~6NtO1G?DqEi3N?f+ z!tq(+{jSDnpd>huNx(8HlBWs%x!dL=Z6RtT5`~i%_Hdv=cAg?S?GsHLPH0Jj*Q4?g zm!ZJT(T~b+KahqnoCE{dR(Wonmr=I})mPKoTDpAjbKFUuqIpc3*Na@Iken}?Q zdX#Ho<)l)NN>iHG6V!aPpf3rt3o-f=PAdo_7$hC2OV+5%0)=^?v+hs^AC*a@jhx^R zg}ykN(&y{WR)*_QJ1hcrOFS{xqayr5KL?^y8jj-O%Bct@&TJVryHiah}% z6)4{n#nV}GD1*&vfNG;(%qD?*6rWfB!(?$wmd_3>D?bmms~)AB)4;!=+uQM+hG)!J zvkT6rrXJ2iGyp0^{z}uqr;4X3Ls?C>0u%;dv%Gv75^>Nt@Q%|)OJOr}htfzOGsYP1!h4iX8Jo&6duM`Zy0 z%^wsueTp5wo>q?%u@7G#+_G#(1AIm1o7>eypsq>ym(76Tj`$p+I2E2Hqm~H8$jP;n zNcimR19VuU<){pN9_P9#*lT9btw+h&C-Ae@8x?wvvQ1bzzK#=!CPFe17gp2gl2ye% z?<_r0t6%mAb(lz$0G$?TS)~~L9_&xAM=97Z%QTf`&qTgG_*UuoXm-uuXQZHA6ipg9 zCFIw&o}QpldxTQK?;sKp{hwd?q!g@u)CB02s@eJVC=OCk>`97`67>ErH>&a8z#f7x zC6i8^mL+`@=^~Vpp14t?f_NpBB!KEfVp(H^E{jxlr=ESu`SmE$f?&@M{_Nk}3(A5) z7tzlNfZtSbN#W#H^uHKVQ(p51oYKc}0sUfwIVm=3RS?&~w-SjIq01t@S>VUvgu2wZ z^(dk3f9pxD<|FuZ>=!3T`?}m9^a7EvW)g2OB&TY6^5FMGs0$<# zB9AZ<2{(HoLQ5y5+@X|kLN_~S)}!S1@>;L%6Y&Usw7-5ZjrY4rJAU!l|8n5hlF4Mo z$$4f-P8X1#q{&6;$)GU>iG<7}ObMz)XyI5(K!3LHOHQjt$<1rMdb6*jAnbz6eZ?B@ zUv`zwBp!SN$t1t{6`8c*GG+LxO z{K%zpIFS!FPOC?WEg!$Xl7etldIk&sI^BEZd4od*`L8RK|6-ZMic^SBAqad&h4c6o z!V0NL3M9q|mB7y=QqCnUB5_L*`i1M8`r>bgll0;z)}!?1(9huC??~hQx&qBM1BFTs zRgy_eB`lNJaLVy127v^AbW(uS!yKW?E*J6$0WI@Z$A@S*pB40TJSpKst4N$#k5Zc( z?dz4XhXiQ-n7Xis7Qdl#_-H0c?sN%(5C$j|p{DznQAaq^((f1M5l4uGi<}I7AN&+< zYTK8bS&vfN4Xh?VsZ8U2vTFW9i-1WWoYn~>k`A*ZIT434>j=jL^6M3Ogi|DjYnA2_ z3z2xiRk{H1Mf6EHF=KS79;LQ@<`VD`{jBl+VUzim#+t#x5qdC~T!Oqka8g1|%toCm zohK53nJg0`5-69LiNvd{(o~6thBWZ)lW@2mRhf@FYDnX~ANe%c2o}jC9|ing(@5T4 zp(dvBMk0}z2__OCoY;v(YWZvr_?<9)2%{11n`UTKxG zOfsVWIeoxUO4P(^Qza54msp8JYH=Si#f862m7FAk{{=#v!#tFfH zJd@;6CBx964%pm@MBeDg+gz((`68s-MaKHUcXBJd+35%;C)T6X7G+xDzYiMkN5J<# zTFx`cA%Dt7d^^dZu#YlwVh<_v;!9Cc*nW!J2og_vHaq9nql7_wnO1V|({Zsz7ft*s zJu8z?{n!(zNyv9HIf?9~%a|`m$8{eL%MQeoH`Jq~F|(98F7cjPjwUB&5*m=sa;T}K zC`?X<805<#wS;ZNp?LC+dX%LNOT6cS^JsEHCP51FmvbB{*&s|})aomQf4_~8;z>_9 zc}G3U^3*YncRX;W;dB%y&P~p6s2o2~dOGS-F9QDHW(U@zwo~g-wZV_?$W)U@Q;En; z#{j=?OCQ*zY zr4et*CH@DrgO#&3JEzv8sx8-yPOuf*TQbSvX!539!d&W%ve|j{s7iC7qfdelTYOVH zBbvM=m%L@Ob7DP8ZQ?iKhpoP+y&;;Ml1tv=Qm59V#3pLJAJ%*RliCTnL^gZarOvHK z39Un}ZKR#dCEh?y-os2!ajBE*QLI(O`VI>|pH3y-#7y3nOAfo#Tk27{0kJ;e=Kv3( ze>#<527g;-;@c@M^^ST}YIW?7pnp1*aM1tzn8{n}QK4-ea&4WKPo@&lmn3s1;QtOL zaYlPrJ<7GMt@ZvK3tiQSGJsZ%nH*gHZ>(_~^{028ZMX)78a3?4)_z^~cL4oHdODJw zn6Y!<&pvg;0p4`B;aU-D)S(|jznM*X!D>;H(d_iL8VB*I^8(5l^(fbpP-7MOk%`@U zlwYN`ELfTEBOIQEVk3sDe#|Fk80__73b}I7LxrP@ThXnWrWK@ zP3i_0Y%mS~Z+dsYh94e}~WqvcI(_$TqWpeEfXf{|7+7+aOauy{=i8`~+gc zGD*v){&#f=I8>A7GZ*V?HnRXKG3qa$SO82(L*5HXx1C9}cOlBB#o$TAgk}=Q^y+4h zpg+2GEJF>09n|}7H#3z$M#Htn;cnXqlmGi7Rok>jB;$MJ z;yb4nP0`k|&jmUKzikTgQZvX23+M-^qF&)TA%&r-CM50caTl%Yl4l9LaUzjFsX>{< zMt03}nH#D@g=Sz6IQA9z|5xBE%C8aocs(#st(oT}C@G_#)&eou(j`ae*T$=|(u6$7 zB<1bLH#%~Y@84{|pJHF3QL$asD2gUE{XtZamzzyTTmWmCr?g1DVqH>_PEz+Z@Fja# zmz)i=Eq_T&#tAJ;DY%y(r8DNyPj5d+O_jEd(1#TJ7>%kXQ81f|Vi#?Y@(fXlqFNT` zGr;d;%d((kku3x2MT(dx*CnT#^etI(g_xA-1T5l`v~L$P+3i7JJ<)pB&`+w*OHQSU zMtKfpmwa{^N8gn%3#2?<*@T0i^<fQ^!!m@YZhq=(AX$}lBjl9-7f zCoQ=fLkTt7#J;|D&@2(vXE<7)r`k)u1^$9*WRppVVC~&RJ=w6DprGWMq^q)kO$~gg zOI{*LktNqf>1)Kq(Fo|IJ?L*rK#`|5wz2IfQ+mPU`0i1!ZKL2b78&KBuFbe7 zfi>?iQ9ao_N@OpfKg|O8I6EQf)3xN~q)DH7ge-z56A8>CpyqM%RxiO+e|gK+IYrZu zT$VcavaPu|e++$y^-R;%s`pL6$1HLMEYb=-rV?JXjOfYciN*H90tU)e8a0u0$)}=8 z4`s=@4w_C(AcrhInsZ5gMJe$_fF5ol9XV_4M+IBp{XO5ErxgnHn&~c8ZAvV10hD*j zm6Mi5N%=LS59JDz&@X*ar(Fc(gq7^1=#nSS17*p%D7{QfAdhf=Ktv+BR0$?rS8o%H z3ee|Z8g@Oazo?_P7=cxv9ZO0c8YzzveFA>kLGN}cl?a=Nx-}83AX!I6MT0J{@Tyb8 zUQ?GGkw`9rCld+(;)O$AGLe9}M4%$q~-aA$2mZ&yC7U?q|TvEP((6lH~2}MtK?vRq*0Qe1E za?BzpDoQUC34ugj($C|4Q-5TJmNEP@z4qg}4DcksJz@BKvgHw7t}p=vWL zg1^8GG<>WnnD|DeU#XsK9Ig3?5ZY_$lK04xKV=@lmKq=uLNIx1@g&b_Dj>jPh&;~B zBukB>cI56uU+{i51JQ3Em7Q*Uz$Svf0QVn8pHK-VC!55CO~$glXt1G6KBh^pkVpo; z6il8JEdV|^hrq`WaF}skOFpR`xku+O-Ve38lVno^{H=hGH00q7?9)uaH=$3ZUo|;d z>)K~dTGJ&T(4=pY$kBL$>j#KL(Hh78z-edhb2j$Wm;Q>qKZtV^_$%ngA7bDuAFxQb z6Nz(>cT*7rt z4t&2ep}W#8H>%kczz^=97nY}yrQ%`OLI_w1a2L{fCg2Z%(IL=MFh3_dxA zVD|jBFC`SinL8E!rRb-P2{~Sf)%Y~I#a11d}D3`%^GvK3Xo`Hh?6cR}d`=r_BUq234 zn1sCaYlj=i@EwBB4X8?>X-$rElva_+bj-tmbp= z+3zDHmjY06=~pZ#3j{^|KbKG^*kkZ3y5tR@6pzxY5mxle%ikLt$dSS}#hwfQ%DTT8 zek$08ET=6*oPx3^Pm^F{k%A-;mXieoRi#9UK`1O&)g^!Eiu5`$sglS`!)P)L!%1xe zIaJtY;C~X~UtR895p1J3d?x?@`r+pw(nv4~7ZZz=q+gMoELD?jV^5rkB@!S^?K)L} z-{jn+kw~C(-|#7HwX%V6wJzt%y{jA^i%4 zDygQV41e9Al1Q>FwTycme1$|t^sCS_tNI4=4Dg-qGtvD`SNBVggm143wk>f1ggFo# z$`zp}N%y%e{fZUjiJNkZDmBT@Bqx%FDEYRD#6%~N0DbCFPa&LuT%v9u`@m=X2~7bC zr~B9?cT)u0nAx}h${c9QuXQHTkbV_)>5;`MHHojTBobFcvte&0kp=yxSsYH34WteG zCiqzR7s~!t(60!#EnxwGIp}8+Z3RdX`~p8Qs42^lL~=}%UMG$z=CZO_9^y#TbRT=DE&&%&x18mll^vdgMw>IPEVI09Q%@S{#^UiUAs5I!*Y7Qwa`nuIX3Bt8S9 zJ<_j8OE~BfQ>!yH_|t}cOeCTxeU~PEtr{V^JmaR&YULC{K%a~-n{2#()M?G@KCAv- zu~eg7unkPYvH;0%5q!J!Ytp2j68L=KqX1ePVbzj;O=7|+l|=9-$)HhB zbb*@m3fmpkq>s@=On5WEr$hn1gU~mS)kBTSF$rz+vaj}UFW2e_>vvJ=#8Qp@f^C6D zerCD%BTOQR3BN8G{DA%Ui&zZcr#MxMBtVwD=#n?Vw_(53z*qJ;%&d9}Q9ILUmCA7o zI<5ZaL4a7}ok=z3X2U+tZPt5ty3c~}uT}arhzW;jxB=_~_?pFf7Rfi#+&)Wx?w?x^ zF$u4}plHHu+QSLjK%!Kl>>pc|ZT^H`(S8F5LDPnambz27M$6n)FDN{-`E>NhUdy$Tc%# zG=Y1kb~TD%-zTd%O+fXRNj3J|?;5Ul{0{H$h@_THI+z4p0%761EX7RPEV@V%(rG5U zxpa8No7@gf`f|Br@hFM(Pb`|~$8RCrElb{#0y7hUpC4;1KVc_jEL(WD3S zYcFwxWU_ly?muOJ;$+7dO)i;8NQLN#KBbVx>LzMltz)_e4}emQeP%*)lj{OT;*m-= z8PI;s9vZR~H)*q|YSNQkuAP`9TAI^cp*jwHLUv5i1n>xb=`-|4!QY{da(zdo8sp?n zX@v^eWK8=NO9@kx{T2mH`q2_c2q$||a$6A)PCh9!u||``BbHp-LwF zzVI)xc-SNjPMDXBiPC$jQ<4cYYIiAA-^%E}d>JJlAH>S`qgmP3+PmcXP%=3sn~<1v z)MN}!3NJY&mtdoP(FA{H8_^HoXY{AdP9m)@aDrSP(|$c8o1CmAj1$Qjyd;DZ41P8` z7)=29pLYuWqoY=C8~+J%eS-Gu(QGoGt|gok$8^drHyfQMj{bpY0@43`{hC42_dAF) zu|G$y@BC!4oUbK}6URBb+?-5els|41Fa2Mxd|trcw-Bd-f0A4uvwAd{yn&qH&~eT# zHzkt`=B49CVbXU6&K>=7YB*Lb|EJqo+OOE=L4P`#M5IxjY;?MV4a5%rJku|3&Vk++ z49_sc+F9DK$mB79I-Nwk$tbF93ZGk@0lmW=d>DG%Aa3U;lY{;wkkX?h;yp&`u?8tb zAD`82M6Bg(F9Z>r{KaK$7Z}Fu!kkV6(@@mxh=T@ZE z)%yAcU%gGy)CrpLTZ$)dae%i}I8HE%iv{NtqJ1ma4~fT%CY^M=jQ&y4cx3I5$R($= z2~{Kx7NWCGV;lQ^x!+nA8DIS3{Z@a#mgJ1)iw6bkLp9@aYwiklIyLb7&~Idsu{4rA zN`n6o{$)FIQW`nk;3X9g_y;!w*e?tIS;Ba8ud=OL3rQ z8}tomcg4RL1Aj?sXu0_xIaq4gcc9Pe35%=dKcW9*mq;q zCZ*lzs~lo9j#Oyw8_@5m93`p7@ooWD)!$J$%2JI1`^+4uT3?j@MWS6T@PXO};t<&|&}^~=6594YXJ?XDC}~>D zJLS_Xb~bb6$RyPmgrDa(NaEN)2H^5Lo`o2dqlZ@_2hK!Y9m*9Ux zVmhg5QjMZoA6fVf@E3qQ7W|Fc%-xZMx6q@7eUHUsX$0?-{qlc9Vmhf2>{Y48p#7TU zU-5>OX?6tynRS#WY%p+$jQ(;2{Q7Kc`o9Aeqtgc9zGY>q#6$hw#`7K zRi+R@@HvR=dhm^D#5I&o8`wV!jci%WGiiZ}o1^=sQYUeB(gB0!mi>Fc0g_Z>%J@~O zMm(<&e6IB!*M0tLDUGa2_|po0u0KY+s-rYTlVmY@fRRMdNEcuEM~ZcT;yC!<1pd*( ztU;+pU9c?@$e{SE@kjr^HCmK5BoX^1mPzLF9Ov`Luq> z9eoXaP}umvix3ru($Wa=_i2sOSn8n)`nD|&Oida6dg;J~enqRXQ>_nZz9y;fnEe8U zFmZ@#B>556C_K4zSQ)@4nFLydThTpAKVpWi+S_Ov3GbXK^CgzD{8lE4nTzOe4{aq!CH?Ga*%$6;z_nhYqsA^eX}%tkbkmOO$?A zGITACh_op${AZ|-+bv4i$Fy`cmW_<)OInTHQjHS$lV{a&E(~cT{KmmwO1;P@rtm+6 zAx@RFFLP32@sc;UDN1V&Wdk25Tu<<=C95^?Vc{Tcic?yGWuqfSLrtsED%D7(d&oqr zMNZ0QFN6OOBFPSw8?UpN$dtyV@|23;LyMQ3nNpNi(AUxk8e{QJ`qonge740Q2d()_ zox)1aDH6N3i`c8L#owiSo&LPRIrT@NWdXXWg`r}52=1tQEeIo)>Ns=d9!hl zB{PYe+ZH_wBlN$KJfgg_06yCMYX&{|%bdu!7l+^m zWA9eei_S*!7};d8@{v<#Il_MJIIZRx9_#FaYGs>%}!2^FVO z&@%BSztNZ0Df?=XW@rr6CcHD?O(uow*oeVO)d-T(3iyVPV)D3|RAW)=^EY=h(AmOQ z#l9nl@G4r;`Ex?3;!S>4A!k}8^d+F6&3oY`G&ZeLViGcRG%83^$9JZ@$%sC+s2sMr z#&#qq-gSd7N;N{gwxat*pa*JwP_PXWNX#Lm&kq!Df@uV;7}6y(3@@r{L4czN30U{@Z?Tqp+?TvLrO9D zyD>nVsywG|a8?i7_z?+9Ov=}FP4s{LdR>#8tf15xHpf`5FNyx*XCMZd6zP+-z#wWA zLJlR+n@SpKp|7ZigWwb_W^Yo_uY(`nxe%v3#QCA2Uo}V%+v0wt_v<<{`1{&loN`am zCXO?_eD+BBm4e`t%i;D2Q#E+>?A^5^)%PPC3s{=e#_*M1r5}fEl^*vOW5LC?N zZ$RTZzwta|kRP^PEqSRlUWckTS60a4>_x9{@pGJ!1L#-P`octLSwyA~n((K?9ZAO{ zd$U13oXUsi;6xWHCJ~ZDWq0Cw;0XI-$(Ps9~SKMJy+e%XRF@>5PD9xNmsFHjP$9$uFZkHLv8)QcWSFjT@@zktSd zu{aMHq=#*3L-Md5jSE%CR?DhQ`4ayO{=WE^C4+BJ{S6ENRyE$1kEB%-OsYFWaaoc&yNR#Pln356I=Q@jnwnVU5NT&jAa68X6i909JZ}? z@Wm>my&#lDJ#g=pxQYE%_4C&qWT|5BSzs* zxULlNI}(XESYZ(;U>nj1n?P<68mw95wUS$NGg_dRi;x`+%k?=W&<_HByy3lOUd|$s zL%i}PqF?yav-QuFO)f#-t{$$ih=dkRB({}b^QVSEcG?E_BQ5BQ(J}0?X4n0N!3T1E zHuG5VH>Hv6OA&mNdVD^5`UE==j($ocKWzfi8dkBaRq9&xJaVEzblL{Cj^I2)1^!sn zCu)74LA9%(pEaMY)(QGb8nKy-o5%QBrwsm=VL!sgcS0V?ZHeehMS812xVv>r|C-US zmyHgCPnJGbZz(F`{nqXQe1N?@ja)A2+_8{GVRa3thX<@g@cZ*fDru{vl!C7n%E0cH z7Y;P!^&+IbVYxo6+cfoJ&lu!j8d<`*V?zEqO;T*_BoPIxxxylH9?_sG)^cGhS)|d4 z7_99^q}oR9Y_wo679ovoxr9l7v5;JSrjx@1{SZRsG z&vo{u>cU?Za4@P`#EGe5uxxHw;lP0XxUiZRY*WBrr*6$>$|00A(!kzN?VJ*+ONoV7 zL1(fGNCT|q5>B`;ne&LB9cq!&5_4jD@vvXVzgdJdHKO+o!CF5ClwmlB=uRW<=xJH@ zeWC|{nG*Oul%POzx8)J=6VN5#i%=Q!NN^^9Dh^W9;lz~YuTeF!6(KFntNlUn)AS6= zx7--^4E&~5cl6{oKkibMxL?dBi8JLqQZW}JiNgxA2o0-t9&yg(ymMc!#TRu}VoOY5 z{;E}@?jmHR5w$+2*mg*?>xQtWS>$fbBd>h$81{<*dmc#|;HOCPx)kUEiGWotxF69? z&Wra>Z*a-Z)HY}Zzgji2oMo9?R_n`peaA$*u--GxBK8lCQX2I8ML;1aA2pDODPk3% z^2ohX8i_x{>)Sq;HWIP_Pd+qVQf8W&0Bukxn|K6R!p;dqag4*@8TV2j?KZ9|emlgmuR;7T~I(O_(`Y9tj7Q06z+ zAnT3FG|fjuyBLG?!k-7yh@0Qni~G_wrV(Qv30P4QK@$@kc*83ACITd;djMawXedFI zs*zZVU{#~-DE1C6q|`Hwi*^NTMDW>(fgI6(MC##LL^h=n>sQMXRuOv%siB2wv)_i^FPgu$L9c>kJODI*3&`knR@t91>q`*7?FFN#6pQrOg4j{ z5-|bn4Rxra*zXUe1DuYjvXj7Zj6*;Jz8%aWosmIrh7nr~lu87y9Gp@! ztPh zoNW*tXDEkR2V%3_Lg}!4EO?I9jw-Ct;K5MBDCyBWa<)NKiQrYEcR&v>feOu?A)fw_ z|>04vSltaWI$N&dbjmW>8#kj=KqKP7M&{gac3YX?Kg=_KN8gY-B9myOO} z^y;ND2hdMhBz=Q&;&4xHhe^b_2Km|8(esRI+bW6lSo03Sjej+11e?M~6Ag&q>mW_;UYYF-EK2!e*(-SBJ`4Oh0230QNZgLOgi`q5KUR-YgzI7*$(KxUn1kt)4^1-$0QS{#~iWkw#8N zPpCtQZL`R?^?-kR5@Cj!#S`HFt>Oni89jWSL0ge+*1_r$aq_LM{%f?w1*IE?htW^m z@ihK$LOZ=`gj$%`SUTAMFXGRk-_k{&X7Eo)B2XZuz~3-@%6{~Bf&UF>S*bzsnJC@s zF96STkZyoPDo(~H8{~iMw%}R9`oaJJ3+hQkK~(61sI1NI0Q$mybWb3^C4)Gt3a3;oT)Ah@k4DO^SuO`QmnA5=c<}8)J_~KqoNmvjLLj50a8e%#$fwu#qO!i*nOl;^p5*sK|BN!!f+rUX zdQ5To&7I)qP@R{pq<*RDKqg7yDPd1|ZjMQfTr##Fl`Z}WpGbAIc}`IkOfHoI4at9< zVAM~4QZDr`+u%?!j8on?`2T_$#fd-caeu8RkpzB9_*hT+lH|lS^z~vy+&(V&qJw?)*R~{oANpZ_ z)9jX&WdXk?nh3`jJ^rWLzMeY1asRZMZbFO5Df>yxa zuyy!bz>jMybLqUY+Jfg#MaC)9N5IVm0#VpwC5g;C_DNFslD>V9eJ>e&MeTgUzY`j{ zM)k5a5!q>tWkYT2u(cV)pVhp6-<-p0Sy_fF{ht!}g+8wO)*-+@5gAYs{Gulf*l60? zW-WP9M4M0vLL&qAnTzg!J*Bc??S->^>-({JdlRJE!y4$+@JdQP^O{%HKChWSjwF#J zDI24+P{jgT@{)+QvWXzUZY}$U`5DWGI`+Ni8NYR-QtdJ2PtzFqu_%+U&$|ah5{clK zI5MvZeLuQ1HqfA)xFn*jgAWp2s9nu-be>Q){P%(HkxOFTR`9Ws4_H-bXVxhM`IzF+ zE|;PuzG5MHG)7VFT$YqZiEbb39E%Uxdz8{azcl^t-vauj0(*^m%~t(31ir_97ItPs zal{R6p<3b)exxTpF|~8VBoO#lT+htqr(i)w|8E1|S2gCcw#p1&Z0LK~3HULPtcX7j zCJ_(6tR;Ri3{j+!0?Y9Yc#nww-v<7?E{Rnw_-a2vuUVShjR<-G@ZHRMnEav|OCsTm zwJU4=OhN-65ebk*RPbpW`GcDWYvGH_hW^IE$1|H#zBTM~EkLLx&d|3r2~ddg(Ik;b zmjd!R0jxrD^eOm%0s8Zt4t0EkTJ5ds{>H&4GYf+BND}c4Xo({sd8^R?e%?cbNJldr zwX1z3(f0pCUYpd){|;icaY6&8ua&T>eii|CWC zV%hMSBgr3e-&wn*)djTL?-+ftNkUF&Vq=zGE9fhMB+EiUDRHVLez`Q!*TP9kbbg3& zgbaMSY{+U6e|Sr)E6?v|nO_}!@V_8Emol>{OY2GGDH_BuB`NVRHU@qLeQftGut-NF ze4<-r^hKk875HFv1+8``-xoLOvxfcyV^6{NGn*+yTKZc}09FLQNQoyMd5*paKQjxB zrbPGUSdJfIa8L{Me;@d9bw#cA1t|g z3Qbxxk-;xCav$Oyut*E|Jdpg+Ev+tpw|A8CiQtFNT%r#!oMa)VJhLHG!ey~_u_y>8rD79IQ|{YFE1z7?$5UK{6hZ1g4 z$Vmi0%&e!6ais?IwJZYu$S;reQsRP^c=&HqJmIt?sr+3)CTT-2JJTQE_WAt|*soNx z_v$`t^|ON}+JVoNoG67T#=@ue4eUiVz}M?nxq6xytfCKc2}~t`M}{#*@D1BhF^&B3 z&E4qyomV~=@>r%Tk?)h0oEU{5V9hfDD~FOV75od(k;g*v{%(l#e3YI)SyHWV{3+r#!JCO)r!|OcP)bKnJvB5dr*{wDJQXy(rm) zY)FXF$RodhL6bAyk#OjxTEt(_oQ_kDt`PmA=@m9{a{)>da*7lCdM$`PW=$whA?BGV zz*^-1X z6{|oYIQaRff0?hDKz6ACCVN~`m{p^`Djd?k@ULGC{8ZSgK>znGeAEc~Ue^bL-;|SI zd@n{H7yly?af+{36NA8Z-Tg3LR8~}z=6lh~!oRq+pWm0pCW1fZ5dQ}7{hWARpE50v z=>cTC6zmr-NdL;l!rU$)iOksrAcOd7VITCQ=POjUuc2>OlomI)B?CNIJ^LNPb-zn1 z;0N?~@IT;`7a1>kTHP1Cxg-nd+7>6_nP%cLw3IFL`8e zV*iW=(U0nlT*Iw8sV};Dh-I`YgQ#Gi^`u>|eXF>;mjKrE;4H!j{^woz2@zD(wC9mO zyWKeU4E)9n@Xdq7AVLmlVGs4Br{!}GAJhJ4VXaEww~<=H5GC*-`u05XhqoKT9xePe z%6M64KwuD8%peSrr07ZS_L8cs6sc1lNrKWXpi&v~^OJ8L3;JE9h(EqD@Jrjl@4EI8 zM-dOd%pe+e0E@_~vI+hVRZzOMbUPG+(7LAdWpNo zl1NH(PiU7S{;oz9`;I91Ve#+dGO*a%u%L9=K)e9>G?9Qx#J>f5r`m<1@&N@uC;m;r zKO_Uo&>xE=<=enqI!M?{;13P;&us3eZqZa8Q1F{RIDtH*205Ya$Z^DJkc}4f#|^sDK{3Y|G%2e2!3vd00001 zbW%=J06^y0W&i+ST1iAfRCr$Om$7OaK@f%o5vWy>H*x940fSQbIaHY-gUK}OB9D|> zmEd5T)f?#AlzxWno=2I;-~A^eM5;{t@z2gTduyZF-}S$&mLv);&Jeq#-^73$08GIY zLoDn2Lm4$$^nG7y*@lX#3}htqa&W{@1A*9Y)Wn8Z9&=gv6e^XGp-5lr&`c;YkXrdY zYUIttureToicv#u#+)=44(O{kk;2k=aPI>fP#-FE^pnd5EAvbsh76(NbwBcLI_mD^ zK8rEMrLi8$-X-Cf8flg^d2zrmBlSSx*b0`eaR`5YOz_7(%N+V0-df$;KM?aQ$?!5q-U7gN}N?#ujmDD(>)UGcQvPG3T&Q%iCAUJy|%UJM9A(61p% z&MR>ZIJzQJ-f$ev6H+^&&vC<%Os1Ane;56TLIVU0`l6vuMQO$EBK@5XEj=WVY^T}B z&bnM*kINKIsG>t8*_;SAtuM(=JbmhG$KCbxa~cpyDhc{v@+`5mtLZb9?Kl%dChs`q zrcaGr85A{(GQ)sa8ueLst`AAsJu7|lgU3Q8DSan`sVfe|RK84~l0j(VhzC#W12~yx zY={A|H0tYDOcUKbi)RddhL|~$X~u@G&&5z*yl+e8qUBB>9Qq6?#au&^jQV~SiPVQl zhCWO%)A_xtY5%GI6ZG{f)+Tx;;fN6QIm1J-&?mc+ei9E-bkEnPqy%ju@hT+a>hDw4@>i{n=_l zKdI$%CaIsH4-qQnREfF1V(P4hNKzwpz|*=}r8D|muD+5bQL*7**QZGKX;G`AKC81q zgfVkTrmUti^l!FJe_bmSrG6f+I13YBZVjOv(Zugj>3`As&(v?_l6q zeuVx_dl+qc)Dez|_~_dWYmSJUhV z_~sw_Np@ceN3HK3P_!TZ{|B3KecdopT$)!C-2R-cU%l4;yZHEl-wyf}hkuxu=nhGS zc*l`h5A|3Xk~g?8U}K4E_sSL=rYiL10_{ce^0l( zn(I$@*Z0?7HPsIM;hx*L*3#!32nk;c{;k$bZ%KFN7ql28fD9ld#*m)-!8K5Kl>s_Il>}*0f74XeaJrI3LpC{zyu7~1Hb;b0oW=)HpXn9!g zV4OpWpXNhggfn-F0r@R0hrj`P^15kjR)CK~BDr=-&H#kF06+0m_tqkAf?r&E7rq)h zrq=|+{J_^9|8un=dS>`DYfQwLP%sDtNhQBRO$p=2`%?E~T#&>dShX4@d5*h|a7kWU zTLa%)!}KiK#!P|VccCVcAyEcqCS+z^qlzv3y|cpHkNH;3AMvj-sUH7)@1awLpL`d5 z>;+wSAnPg9_uWd0TTPN=_?i%L2>AL+Nf+tdW6wyj6g66|skKv5@_{%_7@aX+{jJFw zGX)}j$5dSH;3vw6LUX5}=}++!lbCx&*M6xzf7i(#e@oRfYj6ej0uP4p>lokKN`9qy zHe$55py$t-D8}sBUDscEEM>?a?05J9U2`F6SILa{V|*#20Fbx!J-W zSVe$K?Z17__Z-^|_(9F=G-6z8g+X;|FhVlN>OmCYuYzaGN>&Ya4N5|q_%SB*{Cbkv zp-6;i*%2S4NOL8f51P# zdf4FIrpCJ|Nx4<8)TR}I7gfwyj~z)V0NYoQozJdl&_K@^nLYph=@LOB#8Ag1Gx{`J z3H~h|V?_EIBaAm8X~@hhYYh4m;oG`6rwa2t07@R`Z2DP3_^1f(7-mF^*UCSelDBiT znD>c0Aw_-{wlyIa?5BzhO`F)xA$b-ME1v&VA^2wOB5lrPo>DMGQyaIGvB;b$!3fik z8Rl=Ns6BkSt(yzi*i{+&+eh^a)8Q}k7r}Nr75rL$85UX19JNvKu}{$9S=!jL0wX(v zWfH>H_sX2B$ZE#mEhm~{e6O+5=_=2P4!^F$g){3JWzfi&cyVzqUVXuP@*2rS*bdAUQFzB#>ZeV14&t9`t??GX4;&kIm!Fj7lMCJ_)kTG+br># zReT?FL&AMDG97*^LnxgjEV4_eE)21w^QOkHegPW zR|~sjlA6Y*UD+do50fP^=FBv$J(ODau`fDjE|j8a5=riRb@S68vh%nsAxRmCQ{mde zvZlQ=i|EfK$8;s(J>{ff%`TsifMYWQW47==I`_T-p!9d1r;oD{$vL+1g=$DTsv_53 zW1q;WDvT3sPpmO5OQXnbi3|sW_sr^0gv&$kSz^hWb<>6(9rPV0Nt`)?glX#W+ow4$ zWcI`GVJ-5>?%f-|F&yx5 z3Ki{=Dos{@*14T4XcaD;<33K>!=qzx8X=7FDNXUn1nGY^&EF-CAd2IA`OzfJZM~Jl zz+DVP#eYDDfmtx55EkT$fK3Rb2*|-%q}fApxOC}4AOYcEnKIX0Sg;cEf7nD3t{0oU zH@}{<$#9il-n{vI@B5w>0{-5jUo5(tZ+SlzjY1s(@s}9vHp<4vPr2m4;nXtX+qSna zF|1rU{5styVEYkP?V>SJx`>j3kJQDY=lXs0p>a>)!Xr|ia0p!)4;RvQ{sYDg5Wjuj zr;%||@Uw0=i`J9So<{?O|u1V3k0{ z=8>l98*mJOW8ml0B z^ArHbjFsBr^An65d1K7nG^hJqPo*f+Jl?KuHh%FTyjHju6Qn!|11- zCXhl^615v~4~R@bnGQ~q*LQqL_Y!1 zmPJI;mgiK~Cwv<<(ZptTuWbXq&rFc0iq2~#g;F3g{5U{52l{v{7`GCM4zj_mVKoG) zi$&3H`h7A-1vsXRjIl-6vzdWuLTTtPq&VGb4Tz`_B6&UY&Ac;|r{(=@y#nRLGv;~U zJL5Bx`k9_5YA17S9xzoWlglG6QR!Up%#142RE&GA-*bO2&_3a%uj;j1V2pESj?N%H zoGzj^&b8Q!G~HO&cv9x`G}9n~GR3O=-^`?bcJY7jWZ7Ea%e&dQ91E_3N^OCp0!AsA zjLsCT$Ioz|95JN>V;sk@vHDNDk%2UU zpDNs!cztTlqLwIT4(n-R6_O}V7>r}b_LrG6#%UM`q9{l~+r}L&K8Zn=OyLu72t;9N zDeO9klSFhJA(AC3-yrEZ23|(i%6|N;f>6Y7-+Gfjnwjoz0F-54vY<6--H-4l8_k0T zlex`(hJ7*?Ex#U-k?cKAQ`6_)UuCdp^?b&CLHC=M%=+nN+vFp`X&=1t2%cODA^4-H84^G0%3vU7+bXGXmo(v~O<8YcD7fb1q~wT}h>!bEx;~XY-lWzeatR%(tkh1qx(9Kf<9iM2}>GJoPr!LGBGsCGju*uzL{70k97xP!tPJfBqB1tJam*r0*ymqfoGudf<dBqurGHyTYAR&VOK=~yS7THY|cmkT@dtv_Nz`#yR5?wAEk>km@O#ITA;)NF)E z8sEuy+q6~5rO!}49V0(Xlun25t!TFW%iUpVM|`jt6NN(i#2<~w!Pn!rUR&U@b;}Qv zkDtHwr+0OxbARh+6T>8rsc8+oP(G(0<@i=*NaNSBhQSLXx};q?ZC&t0J0Q9PJxqOU zng%PBV|3(48lSX6T4IUe_z01}PxKOkJlVQH`Y65un&?`x461NG)5Qj1g~IVu>gYC} zn5Z_(3nPJ#ON8IXRxpGRC>+4@H44Cyi;#{bYY(3r z#Z4Ye46Tr72Y5r)ep>=Pe`91KdVtRQ5a^`@=rqUYDrWQgkOv2U{MK=N&G30E<@iky z->#4~03YXBUEaBbuaWLT&-SxT72cI+aI1eQF+29qR8TN{&G4BS&KOhpEyHJtA{(3jGD5n?Fu60*>{5kmMMEQ z+dsmdO>1yIMA_}K4d8Eo4L(X)0{}=VUcf;zOEYeUCt7LroQa2^YEAf7vYb=}mMN`2b6?>{%nCKFqcs9YKUAi|zK=;X89!gZ*XNiHD>P-ay(Zio|$5f+hT7>2)(C#aNU7{$EZS2F1h~uO5vi40Kz9g@9dE3`c z1sU}L>*9YiBfkvO1OQTqYF+%2;!pE<L2mt~Kp~A=1_nPY#v^|4$gJ^6szrE;J0D+?atTs?s*0bvyOS^6`?AwT zeRt78hIv5sXlJ*!?C^(=*Kl$0H=q2uHOcwnZzDhAhZuDNpQ;J*U8POM5&&Qzy~KEV zQRW1?JNYy5C#GLi_$>Mm$ZzpS*q3ncrHbKiTW|BpRa=vMv;Ou86M)6KJ{MM-X80^K z287X>6b1zM0wRC)D{oUs|AXqe=g0l#UPH4zH*G&B-*avg z?)OyYeI$Ap!I^w{q&G}!U^~cZr`M(`h4u@@$9RnpzqZP!0PuaDUuaWcA0%&y0SOOv zn2QTtZ-T~|9+|lBCq6MmEvX)jIRYCC@k9NCy)|ov9%~EooVO=85AP70FWi%b z$3GOMnl7k<-IlnAC&2D?wqe7Be`qKaBw@^>VnROW5k7twg)9Oa3+w;pVHH_*Ee4C0 z*RtUL;LUs(AO7#aI%^K9;?N%c9J**QnnXI-i1lrlQ+D5==gGnF((h6KYZ;B3gBH_e%>tp|h>^ zPj+I9HyYMSjG%C1Cc3sS45=n3r|1VxfbZy`3!KR(B*XXoD3qzL@GtZ z9}n*^-?(tVIx8!-in;>+v==H!7?roqK5m^+kt~b|b*;N^w62b7&5S7=`IOso#UH3M zJCom#qP3xczsAfAHFkVQNBe(VcIv;7r2+jQ{znG{0(x&@P1yf_f`^aLk~EAl<}5_B zB-#_TufyA_%>@4Ksni*EU)z453!KT{ZyK+Dz7FTTn*8F(8?U~8d+(Ne{1>_udp@s? z@!9H0_!>m%^9T;$=lxLTbODZH-Qy?G2#R$Gga4WrJs&!LU|tJ;EHwBy2a7RMov-8G1StpB>s_E1fnT|Ca;q3hJruxoV#l)ipTShb@eEd6oo) zV9@uj@gy&toW@WSx-84d?(&JjnS4TO91N_j@roiy={niaGYOsC!@B44?bOhRp>?+4r0=KAYyHmB65%DL&yj(-#+$8{w2!*j4uzpo)o(EEJ4Me=FMbgXWxXK;-lCldz6Mk02?qY@ zHj9RNSZKgMC+)}h-4?S85KlFkHh-*bQ*D`?YGwpqOvTK| z?UH4oetOh5hd48;Z?$M^ZZrs`DSow0dr8W-rFCdv&gZ*c(YR!o5Xu>*hY0^dC51Y{ z1*0$Hv)d0Njmk6Om&}m%tt#{zjKkl6pB^F75{3}4MO!GVii407vc}&jf29cg+c3>2 z(^mn$P53Z;m>$Xpr2e~IcN;5*A3lt}>_rAX^PkFy0>)?as8xlwOY{rkKqwkQU>5C? zcbQ%_!HJy^e#L^)`>ga~jd|%~#=mX&e~G#Vk=h5d+2?1pMjt;0p2YYt`o{iP`+z_m zeKS?B*lzL2=9WOjQK)B{|Nkzdh2~y*8hri5Vmd#Xtz1G&Id)+KpBd5bVjAzd+(n|?8XUv}krvgj70sTWGOiU!@k@KQmp>d+mGH)!=hkK(FOS%5JdnSf3j zq|K@+h$Y!JBT?G41|vaNi%)mm!@ob9HBWZ_WqeG(2(CM$>3LEuCdK&^hktzoK3*!) zG<|EJE%F=myD8y=-o7h|EW(PxCnt2$;cBwmFq-Fg6%;~9&uBc^bK9qz1w$p0Mh+`P3rIHF|%6V6|)$B$Zsd&2`q>EF#3hCM*Yo zUCJTt!5!&r7Q(<`5wN-5|3SgO!Fpo`J|h8@Yuk7Qu` z%{3S0Fu4EyTnELs0`A)Yw^zW;ccqaGP`Vy9SDG|n+vkTx{*mKk2V;bAxR>o0A6|A} z2K(!~-ceim9dV<1ZpC4scD1QHDCVUCu7KOE;8?t-#95dD8j!e-joWm7{wneW>Qi4d z|E_Y!?!`eW)ynjgqo@Du*X(}KmS7VfB*OwDxME>GIr%OVZWEh#UbB2Mk$>{;>#bn> zbzRG})b4%hZ&N$C@W3fp+TT_ZeU&z&6=|0`51vHldhk6<~?zAt}kcq=}0T zw+RQzp3PCwSc0{DgAANWN=qV|W*?&jvWd)u90bZghW4|9mg1wTVivuaV819V`ogT} z66mc(mfr647C>CPdV*;tvmby76b`lm_7{p0t=)aI1ej(Lj`G<*ibev2Xo4+~7Q}7s z4GN~2bQ$#XW5~)rv{V=mg@>7&!97vQWSj@~U$8Q;D0@SDnQw@KWW4(5TD9&#Qo@U} z{K;Aa;W zbc#vG=9T($cVzn(e<2tSasT}hAc-st&9e{iJ`#_LQ4pH ze8j>+8o4pJ^hXE`s)WvDlK230ga&d0a4#)1kFN@0NcgC<*<(3#LYjD(jeocajmtfViRrBvM*zV&>BkCPbX5RXFkm zlmbWsa5^urUyV+ArHk|OA363cACV-u%^6`@VnRAx5k-DdvhGtD6(N=L}E5L<< zt-{qn^FZkfmZCLcH|_5x3s9RIzo9%iC4Zv956#j~QV4h5+|G&AX=l|@qqG$-6l4?O zj>2km3QA$xa=K|5Ve4ij`h)@Ta3ypEwuu}xOx~^JoZvwzmeMC~vA8OCDw=%jYBfww z1>@|?e}AVIM?k{u0W8ci!c{k8tanM|m!GkRQKX!%`Jim5cjX7JrJi@bmoWK!!(DYr z3gHQGJ3zj|b>A#q$h1{QzKi^WjBu)s9R$P`C9r=`BJ~<(l~BD4lAv*%U z>K>5GR62!NF8s7WCc+9MtU*Tj6h}nmqfPjj7L`BHxLhdmq-duQBrze%voa&Zwat=X zDS+j|QavaQ`P;pl)fwT0<(B$3n@COhw)=QSv363;2slg~`}qNutJ$flK_I`*2=7c2 z#-7b4cB$5cn3fsGfC@*W-71PVuVqHCVG12pp=99z%O#aq+Lo_wc9aoLRu8dfvkBJk zfh1JEfFzWo;mR+y14Y3Y6^g0hY@uq12;tDepn$Lq_;i=zGgykP0QR%OD>> z5|7H!;L3)j=sV|if(g;=tZ346VpuN1S+XTx8g#EfxH==u+mCnv35Y+B!6qtA2$EPc zN5k|#IF_OVqE1K#TygGRIVZntmhR+1!P1s|={y%z8DW)QZNJecz$RRd#+~Fqepa2* zuA-$_@-I@>`8Yi2D>o3~@SK=WwB=ig$v@5r?*I>A^a-;G71ahwR2UTpfL7vN;}9vy ze9W^nW4XXl6=3$Kw#()db8kw~^`L~LdCe>=K)5O+EUE8$`|Essv59X=Qt%Fn)PB+2 zf*q6v)~ft6PGss+r(h;|5PTgzk+BqQ zrrW2)B0)DIpN#OR;Um0d@Boc`Y@#JeL>!HTj&R4ifg~=1e6pf`e4=5JE1nXG zqpJM*e6=h@zJi(jKWi!4O$Nqm;2^R5kfhc#!lQcXTtVjFq`r+!=thwzNi#3{?4NCG6$a5T<9j$|x_N7rwQl|LrUMCBdz=n+&hw;VJxg-=l0g~Hvu zg)_&?kDrkdMm~T5fF%h^pw2G;@X~NJn5i5{VwY~}!N>n>M)Q;^|EAwk$rc^Q!|NYd z^QA>%v9t3n?Mr%*V;~G(LC`^>CMmE z7-YpxxlFqhT4@=1te z6FHDXc{yxB5^<;j`IIWr1^LjHwxfA?ofIc^^AMqkbr`C&cte)CA8vHvRW3Hh1W zbAQ~P6Xbs%Bqan5Nrc#gu_X$~1F%x`X*&oGC0i>xiw zXOek$F685vaX+Vo-t)iYj^IJQRryuJ(fAQcOEOi* zGF6SGgiYn;Z{QA$=Ry80mXdYUQg_O%t4-K6G)SJt^t1}^?ed|}1>x&u<-e%`aYFA# zJtr{8uUn2rg-sadMB}Kno~b|HNez|WOZo|2QDZ4~sz%giETzA4tIE@uPR^#w|X^KBrBLF1@;rgT$fYbTzzG%I}XQBONG&;8*B`A*xZ zee0;;h-yK+digp&9d`2dIN9;uvwcGETeEVW3nS`1M`JaYsbZ&O9kl~V$fnw~_#RF4 z)v@?w-Jy9t($2$-u}sxVnJOH09pm$LCChVy{H5p*4k5?sf8NfRwQV4Z;}RD37WA4x zB)sJtghIg-ic>_1L0d4CZe5biP%wCL24xBz3MO3Jf z-TCTQaf;rx2iE*B{-56a-`~UgxmmtgM48pndyt-MJV3c@ofC3YHB*YDkcEx%@tVM0 zi3dEZ8k#3-s(t*Xj!HI_cGNn?2d(kTSjOYG`7Rr1N+Qw1%05v{7iHoI~?;CJ%ENDDbFijvCe(8uOu~9OfGht~}E6jov3} zV2M3%xAg9B2PGEPB!!GQslYo}Z=_M=EShHvvAV>g(kaEX6m;hV(S=`$+qqH@)Wl#R z61I1@^gg)bBz5}RL9vm4S}Y>C&Dfd3Te7M+G!JDj4C$0o3_44I2$9Jn%FjPZZl{)i z(soHfxO=r8&(ToDFyLxcQ~4f*J}ci>MnPyE@)R>rY}VEM{7*`0V$-D4?gr(f{+B8s ztdit)qC*$AAWxDQj)r&0a5Si?u#{~oNXRCE1T{mfDoQDlS)5jg1(xaXxdvB8w>L_D z#?5uHBtC#UN5j6Uuq29X(L6DAidgt&LGWh1zWN~3p+-02C*P1mI`90O91Z8D@;V?O zvqbZVBx`rn7pqzPP9i>Gs^!ZE9CrRWjt1XUyrqObgf?iNei1{IwWJjPcou&~`R|WO zJ~R2w91Xsy+|fLAP5WV6N(rX-;$niR+P~ymy;)j!cjIXAO~qRZ@2KL*zPsmfz)Jfbz%{(3xI5|)k8wOs)6sXz2CRDeJNW%-HZ8^7QBQ?{qjV(7rFcekMHWY5 z3s2|~V#2l1v=nzo?Ub@Lg3%JQ!HLz^G#C>+I)P+yg|j`OdB`3GV2Kb*CPy^y{3g66 z($AwfuyQYG9KinuwA6|Kdh;CwkqC?8Fk< za;-km+E9PkH43yf|8L69n6-@{h{8HJ;(Bqp{t<#J<;GP~xX3REDuPo)1Ofr2NE^uC z5rS(LjvNlS@xKtHF}P2c)6D3eZr@IFzIr+PX=i3<#J*3XGjMV1;YfIwd~gE%W}^SX z2`D$CW~T`ed%UMg+#8TH@NQktr!4q%EBMV~*R@HI%7sPCtRZzDt?+s3v2{;40 z_I*h{r3rB(5GGTIUK$a5T={XwL98aqW^@Lo&f)e@niRPa z{Rs&HzgZPitL4Op*1Xc-Thp;Sigbc zAEca6K%q!lmEdF7-+n((=0CXhu93k!maTYSKyGQtKuhxBH-jzFSqX4~{BG+S$L=h+ z5j7|;dko0&N_R@lL23>3a3l!^+G3XUx=#IOOLC=_0!m3pJ27w5vFo2ZexUe7)tuOe zo!Xl@sP0uhd7>?*t)Qi#?il7qz(^4Hr|r*7xzm8!AI<9$eDP_`WG~)+A4>A`|3p$UeG_N$oe$L0GlY}WlX^Ef0;uvD{z!3lujMD=CXJ;|4qR3!1rdCVFV)EQjGVs{Q8 zM-`G-DAo26_gBQ@5F81X-Xy33il!gmDc}y{U~P)|gw$)6@Z`>AI~DsgYUFu1gZ_+1 z66~D{S@CcrwzPf>n$v`$0p+5K&5GnBpim@}+A`Ub`$D);PgBR;+GFn;xMqSas?GP% zh!RE-pio%1iQ*CoJEEfMJZ$2Bk2Z{Tk&TI@zgn z`F$U*P|uCWVK|aAz7g1VU}Ah`7|!j{X&Tv&KS{kH_T{?I%Be5E_US$tIJH5c;Y?p? z*WN#xBTMCbIFi+3b>eZ1fFBs`Au5C6=*oB<_dW?p)I~XV`{a}fJT`E7bRWP1pQV-` zNkBB5q3vi}I7mGl$<}Zr<{&*RZ6OS_5JfN?fxu}o!Ae2_DRW)(i#O5!c?aQ;<(Qj@BHc*i&QMk*Epf!qNmzQy>G7$eY{f!!#OxBGZYX$`w-94#LgWgv{G_; z-uxy@MgA)76c(5og9U0qrRl_saess|Ax3itNAksRBxa!P{w0cFIJS~OP*f!C*yVFa z6S^JLDaAJg8C+vL4i!~z9Z>|s$;+v|lZs?f{=-Cmps$da z?vr)riy93Iks=rG{_=7DtW8Ey7;j1Ht~}HF9o?B<4^0PD}RkXe)R47n1SGDbqRf8Bh}Wd+sll4^?9Z4oWZL z;c?WWBE-gYhNu{ZBPkVLRKO!JMY4pp68X9vcw$kf68S&#i4sod74m}tWk!`$%EEl& z<erR^Rr~FFX!X8o*JvAPUL_k=9RV8Dd!4cIi7#R7)(Xd{d*BM~Pyl^D=vvpS=Ta zQN+Rk^~euX8oH5j36u*WGk}|u9a|(#+tqT~+j-{Rh?H2=n~ZAa4(SrsQEF)Yq#$bq5bk2^e8zMx-L$xJ zC71;T*Q_IK&#@Yslt$FJ)fC~Kto(MT#ZV@rXgs(CN2#G3V$qj|Sk$}UH;EEY=L=@Z z{C2|oStq~RB=UI@9>%`ICqkluF<~(u5(!44Hk8RIWVHLF(jpsN+=l{L z4_co0Q)%Vmj79!Z^gIMHqL2;4B#=D8CzlvCy{KCrh4e`S34Mh1^TeEQxyL^C;U)4T=ZiV&n6NZ9Dk;y3JqaVt~31}~w zkM;8dK}+a9Oy>*}rIibC&FShtxIM&S6aPGDU7}k-LK-bG6!MAWU=s;!3kuAd z-)=qd^D+07Z6{3U?JPMhtz10$nZEEuip8eH?ZGCFM6^7_C;e%|n24*1$iMg=8fra- z1eKQ$E^mONAQt)g7-SFaBtpyWjT#QpO60SgMJrbzYxmA{_Cj7oPNV=`i#7$}Z52s6EXmg@oi7BR&vU_X{K_4@{#OA<15ejm~UtuVrhBhl`B1?Zz6xya(j3^pI(&sM5^R@NbNZ@_awREEoz`Saj<`rY=r)Kw;&&+H7CBIJ-^;+#Wt>&L&RQToD`BFeWl* zUkNX&=?7_&@ZxrQN;hg#Y9B}0okM!$zm!;XR+67xx&9M##wt!kQ5g0%HX`hSfD>z9 zU=h;TEV!~Mg707<+ej+G#%4R&O2I~KEy6y4V4v29uvB3lLH5jClP{Za=D%y**D-Q$DE#Yh?v2QbjW2`No@xJ;IZ=P3oo5@p4U`Zr&$UbRdqcvz7fu|LeXk;WK~oQZ z*Q$96a)mFv+DVDG$FO^`GcqCB|3rzM=hv$bT)V+JS^6;j+{1s{dldt*AjFA$S0EQQ zmJ)AIIu(iy!uMrn1&Qi91J`cQPiFS${mafqv7M!U?-vSxVc65V@?9W4QYRF<1N@js zYY%VF_8+QFn%!$R>Jldx3$J~Lv*AKn`ZUptGJidm$b~vVy91~b%fX58Q}+6#f<%3? zhHIBp9V!spHy7*GaG}iFOZQqW`zEp4z!}IjxE|mR(29*5lz4$&Co1o-_}T?JX0~u) z9L6G2#Y*PLHEY{fJ#uZ}4CESGhGV2ou|Yr4iOL0%50u(ESQ%oe}L{2+FDev%Og{gIjjlbO!-*!YvI_v z)QKu@CuSo$;HDY5U=Hz|CH?@S=havh{rK&KOw}_7Kfd+{5WUb_5&h32v=hM`LJELC zKxvzZKklZqle1CU1goAoScjSsE3K5ZXeZ=p#HoX}Tg4nm0Rqj4&^B>S^nqGePaOnL z+pS^_qyPjY^$~%%M|4xZv100=@sfagqwFndXRPAL5rkouJy5!X4m*&az>$_&&cWOx zC~)Xda4?ZhsT^$Tm+)K2Iyz|>P_)Us#la>6<5zH3RZsu4s!MZb8imD3e^05ZI{3fd zfyOc`f7Q>(YQrjRQ-56yH$&k?-&u}-{Ge>%$bJLcWaA^+Q4l{X#9^Nl+^qdSa5KcB zo-93cK>j>G0NAENqCgbuI*@!L4$joEZ3}R-`4$cR%g-Fz8GIif0aYa&&(IN$Xmom; zt{QIE4a5FN;AXT*WhBFr)hhWj`~bujWYzU2)VQAGhT@~Dn>1KPdcuX8e0#dx% zz_|Gash`^Jb?(o|x2&OGy&Xw0Zgz45wxFQkAqCtlX2}*-a|NT}*vpZNgm`mJV4Pm3Qh@}pt_?4M ztJH%Z54PzGRg!9tmJeBQ(UOOn<2GSqn@b5aKxq=4_CWj;;bv|e!PWb5yw&RFyn!G% zqbrWA{QF(`m{By;6SBa#;rFylS3vt;vN&*is^ql4IumYI9cfD~2lpxV9X)k_HCrj1 z(U*w1aN6@0OZMB#?TvgyNtzDldQ(SVv@4swI9B)(G|7SKsjacZZJJ!P zHTvVVI#)T6Lvee=YOZ)`u}Uxla6?>0+9@ETkSK}(%H5~)ZTY~F(r@jb!;U_N+Jnxc z@$OhppNsN#4k>YrA` zpZ#iK{bc_ehE}b&(s{J!?a!xJCeWleo$GCUgaeVJ#K98Kfa3P-ri;Rha5Ls{1pVGi zkpz(ep-(tTL;~mvLs#JdU;Fq2#`?jte3jJVdXgSNRkDuokavSKlDlZX7kMP%nMJr6 zt;9>i)PW+&M}vw&naH5z<0Qe18wuQ`sRON4czt32KSc|Ppam5a;sp6W398ekM~E!A zXxY5in{gU$hGoLdWbHs?$P)!83120&8i{Hy>Hz=f!Y5s%-!L=H-Kd9r$3PSYx`H22 z;*5YuLMCEEzUKBoz702nd=MFM;9&W3lAu%pfzKag>Od=vz&hFgf4Yg>a3lW>4*EFD z)XgN{z(?dn61;x>hthB}tQokOl_)q#_%-BHJ*}G0sX|^c@gHNJc2R#$I6C3&v;2$q z-@_}|BKs9*Bqx$|kUz)mfu>ownJqstyUrfvgz72v6Dbiqo5|WHYcLtZS^lM8f6jd2 zNq)`l`EjTpE|6c~TY*TzhEqfS61bV2D3}46AZFhYctqHxsl!*d)RxQ|%*Jp~0W`O# zaS0#sEW_8q;EaGs!X{#+N}jm{Zl*&|J>ABn(prCho9c4GwN^egQoAJ^OR! z`eNft8;azZ@DVlBGY&=0NJbY!Qjk7Xg!&eN1R@|{Ky0ZHK>P^;OWsP*m%bMK9ZMh- z0Rex2dgpXECo^|OVV1t_Q0|%Ry=MkEAEYzvej*=gj>O}`wRSS{00aag`5F~GK%1E6 zpN$5X5^7A4NP@U=2K_2S8xJ@0Vimu4MZV*a;S)E1enf+pp|5!=e^k!|ef^PnjS8eu zap%r9XPPsj88>qzsI7*=md3)(;803E&?SyXhELphstT$PmHYszXM+B>qzt42bHCFNF`oS$u|G2t+7 zaz-e1hBh8Mr}qcRx&0kT|xKx4%ufCPak|Crbda*I-`=QhQ{&4O4( z$0N6cCvFuDMlhOBW&;FJ!sRKDAi*(#tQVR!{kMG`NOn zY>V;%5MZSsqD+tVnAoy7BbrDePvK^08_{sHgM0$tRd_4Pr$GPKyH7`PeR1m8&r+C-1scGdG<=0b*^nZ)Bn0R-N0(f)Ik zfR@&MqJz=EHs$83)Kc7@7`R!8$S@*R()LKoS6n+qBLYAnXXZ}<1Xx0FOxWr{IGRp6 zkY6rjh%^drM)@#b$9A+wzV%-?bmDc^0YCwml@LH+t>UZM`~-4FJV2Id-l>*m$k2AN zE)s6WHsQ{9xl`&Qk@1(eyi_G#J4W*EGV@mqU4Q^fI6^SI&|^X+?e9&2S||uwQ1av8 zW;~u*ygb(~87d^(*s zWe3|70XJixkjS8^Mf6A?0kX%lsqaa|lSl<%=*=nNXzW4{4C0$RqI)!O&Yf84VVOS+)`l4vY!NPhUvd zo*jjSad0#A$)S1wV>$_76=_hn&I$KwnX^O>GZI50NSPr%q7ljk)OwHm_f0aK(O`}V zB|krHei8XrN5#R-&?gsl^SU|BiS6Nc;<)M8rTl_3l0!l(6Ut0dQ33cumzy+9GMv$1 zic*isP`-b{j>5t?xEZEt-83Hj8Q300Euxzm`FSOuW-9Xk@^Z&05d%>e#|bOe35!Lr z6EENe*5C%T@B~(Fv!$)gTC7;4+EZ8r4`6AttsX*zEprBknH~NKhIwy!;MCK6Fz@AS z@=GW)?$J*rJ|g-Fa70C(WSej{xOfn5#x|WS0&g{Bd$`J$Se*E2it&G3_z*u&Gb%1Z!1kaP{rNn-SDv8Tbjyzz{~Wev^kl&qDK&mVf!mZP zFZ%q#M2WZ=2i>b1QH%IIttwYK{PPbj3AaUXM)Z6HZj;0|;cVz}GeP%Cv5FV2#)kNA z`^|^(bHN!w1u*^^%tb&J18#=yW&WPP@ zn#drF9yeo7V0%*U52*073F{Fm*{$1k3VZ+AwR z6E!nph6b3EynyXV$8Vc@w(w;_c5Cczlgy0Rp@CDS@02xOfNbWMKE5tJ6p3L@1ZKnp z4X{pBs3uLC^y**!>~jJ$qK5|Tz7ql@O5-vhGl9{i^?ECPD7K{ zicK$6Agw1!zTR!4hMGWWaW4g zC64E7WPvag2!suj_%qC6Gobwgg`<{Y(W&{Hq`y6AWoQp*y z6%Y-;raGSQNCGgWTtjJ>w$L2V7H(Zy(g}W5+ic?^x#Dqk1yge%)nQMRSK6->| ze-9pnNb2~z^A#RZA`xT@m+ex(E8G|kCPV8Fx9xrw`obf;cX-6+9U>|6-wG&}x=1Yl zD_^+uq|BdU*(5)lKlpt6A-x}C!AFV2d`s+VETz`lFN=ik#mva5Y2hL8*&JwJ*;uE% zE7Y23k;CJsRJ1&zS2lc0`!%)?z^3axg3+YWJTNo1R!!ASs?vU7r>LtUwMG^xzLKLS z=RdZs-y)LPgt*JWZPfp~Fyj%l#b_GO<@mEv)2rIXUH$+z13N|17dxfU{(S^7iAmsB z6OnlD<|1K<6y2sPl8q=7EG);qJ2RRB|4V1+-?qQ##}@R4OJJuI^W)JXg>G1tMdBbQ zB&B}JgPm;Q9Ud_i3H-0fR`E}aTwn}~er(OyDV6pG*J@;ux3e-t0)s8mZMIpm(X8-d z3)3it|MfZ$YdTTgsx(Cwsb~8K3!q#U?Hg!M;QKszQqgmf@G*HGl-fwC1+))^rzmOq zR}F3HWh=vN$VJ(=8tgAp)Izb@GkvVRk{~a>NeXx zur>|SAnB|~5;DZ^8$aCa_u$VmG({$4e+_JV#!l%<`SBDA_X5ZG)`(>GE%`b;Y2YF^ zC)y`IPGKCR>$iiXx6``&*uIz<^5z$=iKr5u9~eVAp!e*L^7p3wN#wEEej--{aE$Xt zB#&cVLI+5xfdchX%#d7sJU!}DqLuxLq>V_(V+T|TY#j9yy*(@ zdB7bjX~dbjU1%S4zrrifn!-RU8`^4$?UToL;c7}LjH4v{>*rBS+K*~D zLn4nCC<_Kh!5?uNG*Vh14e-wfmk85KgE$HzCJu$7ur7~d3;{HRfyZXWcx zPN{u9Dby54N&i3iQf5+Gq&P$#|32yYP5U3l=)>kNFxc>jyhwPf)-~-0pEmLFIB^>< zH92h(pOG{hN4i;uJbDwMcBm;K#Qn#OGs7JjxA~| zglcBVW}LV`K&v|E+dr-n{f#{OSx`IMKIFmmO@Ob}e{2zXG=bko5|5QsI3j7&TU}Zw zuozuorirlthzCbA3s?5$CPM8{QyL}v1itLBo%tTgA@cZ>3A~aE#v7GXo?Zc@=B=P2d5r9F;Zsv!lhnkc1~tK{L?r2Exf6M8Gje}1;L8p*<=4X% zp>$>P#jP1LZ#zrbz#`=lzmbbYBwz;qjUUs4Qsx~#H6Bv!?%^dL1MY1$``jyv6! zVGL8ITZft^?f*yE`Lo7xMNvFLe@K}jas)0^q)n4B#@j6$GI)tugbTS(up?+S=id7q&d-uH zsYB_O$#==%^0V9O9gKu6@?-RfLEI$#tz0X8ZybuEOWbj~cE?FAT~Pidx|3n0T44-Z zUxiFJx=Gi=Q2*nTAC5-#H5o{PI?6GidivpNAgU@qvXE-O$tz3Rn=Ti6OI_L(p|>CvzGWr}^^ZgOM)(-PBm`_Iu*tqtGjR=Q8EK}Je}X_Z zyH0H8@bYG+qnqTiCC_A0T^uBLZm<9cH<`Z-s+bD5puLs7Nj_X9_PD}n_0C2KO!BGy z{4z>>Vf~%z!uJhCGmgu5|K+&_vH`zqr@xU`(?!RPJR1*|hxPk5p|9mdEpE!pUziI2 z^O-ZrZk6n&gF?{>Hc4%i0J2b~_o$yJ7LHsi#KPf+36BZC{C<&-Jp2y&)lIy-&D!a> zpGN}+)3-11U7Jdc8@@VyK6h&Q{919B!q-6Z|RMv1+x!)v5e56ZwJj@%<0 zlhRB=?PM%4kd3ZWW{&=*ZsO%ldnwn$*puu`Aiq|2RWzWH(lj|91z)1F7Rg{}nS$(< z!z51sqj8au?L&Y70dO3-nWuGSamE6PA+9hLHz}{?Wpy=a1wY19sV@0o^3&mg$i7*xz$R_+Q>Ly;^8Z&Klv${0(1o^XC zevzg_;Zfiv9z1m(vHyvKL*h)L>3KUP)SoK=&b|{o4U=>+7Bb;l3I2?ix0jSJ>tT2B zV{Y>E(&IS7wC{Shy)X-!N1ix_z(7rcA1frFl_p-}<5^uumy|+D6tGjPn|OHx(=0~E z?UirMe==U&{8RNSfzM?!A0#ipQkvUD$&9$PNg3V+zn51&q z>JGilCX+9nd=0&gP=*$n-YbVphQ=;azfwM3B9#ID&HUU+f201KZVGrc7$ryX^{`L= z{5!};=I=OOh8~f7%ESwe&)Xg9Y^VS@=Msgwk=LYHGnEgTB;7<_jT?{~x*zq+hyE{s znW!~Ul=O(eB$4lAB%aGaKG8-Ze;S?=CH5$=N8LnTjZM;V3mv!9`~V0DWkbtm)nu|4 zm_z_GX%qmbF8Su{jPe7?$ycl8sW+ ze0RPo|5!}&yJ3hZ%K?j=D&<=33QkdYHN2F`df4&YfqL>2k~Wh-KTWbKYFb@CG08g* zVOIqlaoZ#-qL$Ugu=exY!uWTN z?6j?DBReIvd~*qLRnbWbu2o~FPB&$@M@cGl+-~_k^M}+|($gc8yYzMe1`%d2mxT2&eM#HInCX@Cru!!^-fM)RS{tSO+b01hTWrJ7{3!F4fY?d8WSl5HmDM zH;JciX>D~QkL%*PMfD1-Sp<6-)axQa>?hYqLv{Vn%N?u45k+AfcR;cTDI84Uvc5zJ z1cJ>L7AbrPLtw463Z!xSv|IWHi=7C8Ft8v9Hv0&^!MsGcdvwmox6A*)fw}b{`(5@N zKf(D?{IAV|H5R*_0ukAekXNPtopN2@t#4SW-Tv9}S>Ls?Y0@H5z~R1T>Gcpyh{jO_ zAZ9w+YY~umNb9PM>pFc+<)IY6>uZuWAzCDkHn-^Uy&i%I@q%JywaimD>SwWybw)E78K@{PXcZ3g7;9KHcRRdF3izX>`bFUPHPj}vrydGx# z1cy_6NSLBIK-H|{s&49MJ}MO6U#(;l=LGw^Efr} zB4!tmEW@f*M{EOYswhY^7qkf2reW18wt)#6(fB+gyiPd(D4sBndCIHL?_%wIIUZ#* z^L@6FEK^vJH&NFvhk0uD;_tw&^iMaSdVv+xgGS9kWPMMNt5*#oi93DxP7Y1z8Ma zd1f<_6n0<-lL%t8qFZJwf-nXhDh#_|WHO1r!Et49DQFNEI??~2GqTCT`~g9I=boxM z{rbIUAiTaz*ff3Wa&Pwp_j_y~R~}FATpVAro&N*bl!i9?<^amYuyz4W{Pw@ls=C@w zIR_q~PJ293o3zk-l;!`$olGlYQ;!PL+^)!3f+q57@?p|Q{drI64P&ZzJsxISi7k@p z$PLLAaT#$ebp_ssXVh%}c0~YU*BNhAtrUN6?H3AUB6wD02~0nMn&OIXgBe&pND-%4cPViVxNBF!CQU zb>nr0)F-y zzpJ)6qC7|g7eruNenwp1dC^k&^8lij4wmGhAhvzRKkg*9>Fil0k%caZ5mWgY@%fRS zm01&EeCHG*gl)TX(p z4a5(jm6fc8VkNPSWZ6yCra>AJQ^^&f839Of`|bT7+H*Y3IKDWd<141WUdu@ow6YO4 zP_87l5d|W&!V0Yk5mQb>HVw|R~m`g59P8DPiIKNCHvnyo_=_n05MOE&9GHYewpqZUDqrXq$udDJAxLvNeON!# zPvwjx&?fRW#EoqDS243=@r8f^_ew})+$QA<{Q_AA7X|H4gEU;}80ug~HhN6RMBZis z(7=6!>1B2a0TTfi^N+=g{rU=sfM3>5?GHd2uJj8KQ*=g@UGYcW2Jc2g06az3nORe} z!UH|Y@sFj8{Q?T~$Y_X(kPr?aV(P6Ya6yvJ2xo-6&6i+SK4kpaw%VllqBg!Z-6@JM zv#M~RUuUa#J42iPXquxNvoQqHh?x4z4+*=vm=xYshiC@yprD{>Je(u^2yL*wBawm%8dh}z(mh|=pZm9NF( zJ;s+=#bozJML@(9x(bFeNECQ1Et+rf)&6ixoCZ+h2R{BP!$0n&mdh`Ed=U~K(FUL* z5E4^UEXP>Xc-{z%q0QKR{)d!gb_6Ag;tIb^H2bCNljRGDWs)(D(0(Wa;~Bk(sYk<# z@MIa!WBHT37b^O}Dy>C8?jA+h3*swsZfgZ3A%}z-w?j>qux4=w$i?Q8A#a{vx@V{jUOLpBM2A4>RJwZ58Uk4goiyepjEkX*`U=(k(^uB7r#mp*LDcV( zCCk?*ePaUm@pJk^Hq~O;wn*YpF(TLK6%10Ji1pjzbmtwR^##c>QXmx{Q=&E*C@wrD z9@2Xv$u4nV$!vD6>t76ZWQct6x~wnygKWb)LX{busah@TP$DQUgOTbX{hCKp z9)l2BjtEHeXnd#Z%YS{m6BDW55n5k!-Nk00dJP(fI?Y=sE+5NBIimc7tUqsB8<)ST zh1}k7MkA&Z0gvT*Ji;yN(?pL%1Fez|KPWD=4^lrX>*oc}s|#gqU?I23TrMP^h*=z0 z6H%c}@K|m(iv1MXJS7`xqPSo!eDqvj9{)K1T2$7?a>sOBK@BbwMYH;;CNaoF8O83_vypq zF@iLG?bT&uA|m3kl+ecdu+Uj2Y9#(yKf5$gTmkC0fHW`3L~uZZza#V-_2bpzXnuwI z*hnIg!R#WiowvZ_0Z7AICt?GTC8F1;AFj&z%5ePR+kx0fDv?3jApB#1`h~2|3}Bh= zZ-(9aVkEf8!TbM~%#8GCPzn-RL)rjr=f8ed;RviR*Br9^hVB)rp!& zt69bDPl>Fb*QtqMhacZohyrSvCxTfuBH90}ZAqo;2WkSaowvY{(1^nKFZPMBOCu)& z8N!mA5nqQDrI)QRE>P@W453ev0hn zNPD5amEuDEU}2HPPXQpZ?=@;lafQ$Rup8xQoGC63@t_eAj%HtqD|{#*vNuOVDXx1I za5U}|*F6e28h47TQ=t@BCj*MBlL5um#em}KWI%EG$^ZNXa>)j2hlSC<00000NkvXX Hu0mjfSn$d2 diff --git a/public/images/pokemon/exp/705.png b/public/images/pokemon/exp/705.png index 3413bcd9fa35db5d1cd102176e6664c2fbfbd6e6..670e8be5d51fd8645ca363e13dcc9eca01115e36 100644 GIT binary patch delta 1886 zcmV-k2ch`84*3p{B!2;OQb$4nuFf3k0000gP)t-s0000G5D-m8O@MQNzpTIV+VW;u zfRBB%xS{1unLTFAQcj#cXU|i%@~Zf82(thH01k9gPE!E?|NsC0|NsC0|NsC0S4!Iy z000K#NklvG&G5QMdWkTy=<|8*now;87KCg)VDn13I(V}EoHh}BA~&T;%} zrB~P`c(s#3;KU{LxdeaM+v5gHIM%4YApE)Aa%(Wm37`s&Rj}KFFl(n!JI5Xks$G39 z+z!;m>^SBEE!+ITt;|U`r)6QrF6_|Jj#!DzmR~DZV%Y`Pkp#&E*oD?>Xy{S5Ey zsFf&evI`sZ%zv#_$1P64eN&{ck$Q6{DDTwSkt-2dZ9J<@Y)ZL${?%+KZXQM0Ag!6v z?j#g4d-_#=P^I!VQc8`{5-aRa*9sjw$%w`wI+!#AabYnSU66#BJ&4I3J%`KMC1PCt(C0 zN5Avt)RI7E{c=cdtMeGf|5$KK@cSKJxI$}jBG5c2v)}@`CHNgWgyw-MQ^QSgdn0Zc z{t;UgI_s2I7j4CDgqP;Ax@zb9#N9F+j?r`?eQV3hmfy`Fw*h|=qwJ*AAlc0tS{?dnU0b+~}^(%LnJ&`b>a3V4BGh$u!pru0L3GlF zCNh?e8#U}$(M|i8-P0OECv9-r#OPvn0(Y(9eDDJ3R(t&tJiVL5)}*_nj01G9{mssv z1@~uf(Ch^03Wla#%33%2ekz-3{<6r?9nRAPEKj={e&5#KvC{DH83RrGFD=f{jr1)~ zdw(2WSDqT%S#h()j_d5H*PzW!dlYySuExx_#+xi0#0d5K<=mIX|nCDPlRUXunUcLfCt z^){#1q{p)NINU3c3%^9KNfX2KK8-(=m(?h+M6XFRtyM#w3JMo>1N=8>qPOz47=H)6 zLjC77DG=)arzgceIsXm_FtDG$^Mx)#5fET{gijT~Nel!Wn9;XGW~qYjw?<4C@NEz> zRZx@dXA;Z;_aJ9m7&^^RBbrVX6truMS>P6=r`s^JZ;f~jGFQ-pTx^2^DchEzZTrsB z0;=|av?Lqb$Y2S`P_}+rD)Oz7-O3(z0%}qzmF-XEX99v*oIG7Qpb-E z9L7M|@(h+UM}(_e(~}%U)fxv?mh(VH6%!GjShsl+L~pW*5X&m=BD9u3Gk=YfG#G%) zEl)wJ0maY;fT2q93?{}zbUM?CkLX1Xl1k@uIVO_HAj-ewWe$=`0TwwXQpkC11K=>J zA@9PsmdW`n01lJVa85*nu?>KOr0|>wN&*}vRVXPZQjycx2EbubIl?05L@F|TXC8(F z943XwL>h9E+5k9E3Xh2t(tlsMvZ)Jz!=!Y9riL{cR+o!i030Z#D`;Zak+awZz=2Y_ z$-7K5LZ-+~Ls2pZO4WH6AtMw>F}4A4s1%+PiKLkC0XR@fVTMPW+xU>fq)@{ufATqp zNtM8h^m)v3YrJBGOkAsYjAZG^^AsnMIPQM0Mdr7dJ|`k4SmGJ!C4c-!gNkE68Y>9T zw0Rfdey@;76xHyl767RzIq!m!K;Q<->uuM8l^5RYN+xnXh)+zcTK z32`6j_wg7?C($4|25yFYhlGT1%@|=J4Bc~yMA{kY!Ssx!7`I6U8EMiAu{Sy%(>!jn z6S4;>-#TT(AYHnqIDay&#b;mlH6aHuaCL?TKzyaVOKR?9vN+ae(w222NC)0E=r~m$ zc()vOkW$0mNQ>*DI9X_DtT_yo9{DOD5;U*wSP@dQhn7~#yHw;oBY^}BCWS{>P!ixE zDLldglK_ZlEksyg6agUykFcO9!huXvlMD-rA{?Z(kYPblgp=3?5L3x}@t#LmP!i!F zEj+=3k_d-s;RzO$L^x0jPq3gQ!u_$_%&uL#cJ11=YuBz_yLRo`wQJX|UAuPe+V$_$ YZ@>AKSD6@q_5c6?07*qoM6N<$f^O`ZumAu6 delta 1812 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 literal 8135 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 diff --git a/public/images/pokemon/female/275.png b/public/images/pokemon/female/275.png index 7f251793a15764d2a7bb5849e65045ad7884eae3..c3c358716b2d919fc2a882d2f69e3ad524d57761 100644 GIT binary patch literal 11186 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≪pFCQ%=xE@hNoXB9038F;6HZ(ytRK>+ik2e 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 VwS#>?K2`v{tSucZ-XOf={|_}1*(Lx0 diff --git a/public/images/pokemon/variant/exp/705.json b/public/images/pokemon/variant/exp/705.json new file mode 100644 index 00000000000..a29b8f124dc --- /dev/null +++ b/public/images/pokemon/variant/exp/705.json @@ -0,0 +1,33 @@ +{ + "1": { + "101010":"101010", + "4d454d":"8a2166", + "807380":"b93f84", + "bfacbf":"e56ca6", + "f2daf2":"fbb3d2", + "665980":"4e4094", + "8f7db3":"8b69c3", + "b8a1e5":"c7a1e5", + "4d993d":"aa6a00", + "66cc52":"ffd047", + "4e9c3e":"0c5474", + "67cf53":"3aa8c4", + "b6f2aa":"63cee1" + }, + "2": { + "101010":"101010", + "4d454d":"194f51", + "807380":"2b736f", + "bfacbf":"5db6a9", + "f2daf2":"9cead8", + "665980":"274159", + "8f7db3":"2f667c", + "b8a1e5":"4a9699", + "4d993d":"007d61", + "66cc52":"49ffbf", + "4e9c3e":"842401", + "67cf53":"a34205", + "b6f2aa":"d27e26" + } +} + diff --git a/public/images/pokemon/variant/exp/705_2.json b/public/images/pokemon/variant/exp/705_2.json deleted file mode 100644 index bf9fd104c5d..00000000000 --- a/public/images/pokemon/variant/exp/705_2.json +++ /dev/null @@ -1,272 +0,0 @@ -{ - "textures": [ - { - "image": "705_2.png", - "format": "RGBA8888", - "size": { - "w": 154, - "h": 154 - }, - "scale": 1, - "frames": [ - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 46, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 58 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 46, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 58 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 45, - "h": 58 - }, - "frame": { - "x": 46, - "y": 0, - "w": 45, - "h": 58 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 45, - "h": 58 - }, - "frame": { - "x": 46, - "y": 0, - "w": 45, - "h": 58 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 45, - "h": 58 - }, - "frame": { - "x": 91, - "y": 0, - "w": 45, - "h": 58 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 42, - "h": 58 - }, - "frame": { - "x": 0, - "y": 58, - "w": 42, - "h": 58 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 42, - "h": 58 - }, - "frame": { - "x": 0, - "y": 58, - "w": 42, - "h": 58 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 58 - }, - "frame": { - "x": 42, - "y": 58, - "w": 41, - "h": 58 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 58 - }, - "frame": { - "x": 42, - "y": 58, - "w": 41, - "h": 58 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 36, - "h": 58 - }, - "frame": { - "x": 83, - "y": 58, - "w": 36, - "h": 58 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 36, - "h": 58 - }, - "frame": { - "x": 83, - "y": 58, - "w": 36, - "h": 58 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 119, - "y": 58, - "w": 35, - "h": 58 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4bf155254b23c88780e7eee282256589:82bb727988054c3064e203b6908ff464:6b57e983626c7fc9144ab67f30c66814$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/705_2.png b/public/images/pokemon/variant/exp/705_2.png deleted file mode 100644 index 8256ebc7fdbebeaff9d693aed989c4fbce61b77e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4111 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 diff --git a/public/images/pokemon/variant/exp/705_3.json b/public/images/pokemon/variant/exp/705_3.json deleted file mode 100644 index 199d7bc9c3e..00000000000 --- a/public/images/pokemon/variant/exp/705_3.json +++ /dev/null @@ -1,272 +0,0 @@ -{ - "textures": [ - { - "image": "705_3.png", - "format": "RGBA8888", - "size": { - "w": 154, - "h": 154 - }, - "scale": 1, - "frames": [ - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 46, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 58 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 46, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 58 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 45, - "h": 58 - }, - "frame": { - "x": 46, - "y": 0, - "w": 45, - "h": 58 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 45, - "h": 58 - }, - "frame": { - "x": 46, - "y": 0, - "w": 45, - "h": 58 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 45, - "h": 58 - }, - "frame": { - "x": 91, - "y": 0, - "w": 45, - "h": 58 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 42, - "h": 58 - }, - "frame": { - "x": 0, - "y": 58, - "w": 42, - "h": 58 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 42, - "h": 58 - }, - "frame": { - "x": 0, - "y": 58, - "w": 42, - "h": 58 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 58 - }, - "frame": { - "x": 42, - "y": 58, - "w": 41, - "h": 58 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 58 - }, - "frame": { - "x": 42, - "y": 58, - "w": 41, - "h": 58 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 36, - "h": 58 - }, - "frame": { - "x": 83, - "y": 58, - "w": 36, - "h": 58 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 36, - "h": 58 - }, - "frame": { - "x": 83, - "y": 58, - "w": 36, - "h": 58 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 49, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 35, - "h": 58 - }, - "frame": { - "x": 119, - "y": 58, - "w": 35, - "h": 58 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4bf155254b23c88780e7eee282256589:82bb727988054c3064e203b6908ff464:6b57e983626c7fc9144ab67f30c66814$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/705_3.png b/public/images/pokemon/variant/exp/705_3.png deleted file mode 100644 index 66b43956bdf70a75057437c951b98f1c55eef48c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4119 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 Lf*Zay@Obb);ds$n diff --git a/public/images/pokemon/variant/exp/back/6706.json b/public/images/pokemon/variant/exp/back/6706.json new file mode 100644 index 00000000000..2de5352e936 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/6706.json @@ -0,0 +1,38 @@ +{ + "1": { + "566678": "197497", + "8e96aa": "3b235c", + "929aad": "3aa8c4", + "625287": "4e4094", + "536273": "301848", + "988b98": "b24c86", + "36404c": "0c5474", + "c4cce1": "513981", + "e6d3e9": "f1a4c5", + "bfacc1": "d074a0", + "546475": "0e6296", + "c5cee3": "63cee1", + "80737f": "8a2166", + "4b454f": "6f1357", + "9170b9": "8b69c3", + "b791f2": "c7a1e5" + }, + "2": { + "566678": "a34205", + "8e96aa": "073338", + "929aad": "d27e26", + "625287": "0e3f47", + "536273": "042329", + "988b98": "2b736f", + "36404c": "842401", + "c4cce1": "0d484a", + "e6d3e9": "9cead8", + "bfacc1": "5db6a9", + "546475": "8e480b", + "c5cee3": "f7af58", + "80737f": "194f51", + "4b454f": "274159", + "9170b9": "2f667c", + "b791f2": "4a9699" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/6706_2.json b/public/images/pokemon/variant/exp/back/6706_2.json deleted file mode 100644 index 5c916aeb664..00000000000 --- a/public/images/pokemon/variant/exp/back/6706_2.json +++ /dev/null @@ -1,776 +0,0 @@ -{ - "textures": [ - { - "image": "6706_2.png", - "format": "RGBA8888", - "size": { - "w": 358, - "h": 358 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 84, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 84, - "h": 69 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 84, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 84, - "h": 69 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 83, - "h": 72 - }, - "frame": { - "x": 84, - "y": 0, - "w": 83, - "h": 72 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 83, - "h": 72 - }, - "frame": { - "x": 84, - "y": 0, - "w": 83, - "h": 72 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 83, - "h": 72 - }, - "frame": { - "x": 0, - "y": 69, - "w": 83, - "h": 72 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 83, - "h": 70 - }, - "frame": { - "x": 167, - "y": 0, - "w": 83, - "h": 70 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 83, - "h": 70 - }, - "frame": { - "x": 167, - "y": 0, - "w": 83, - "h": 70 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 83, - "h": 70 - }, - "frame": { - "x": 250, - "y": 0, - "w": 83, - "h": 70 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 83, - "h": 70 - }, - "frame": { - "x": 250, - "y": 0, - "w": 83, - "h": 70 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 82, - "h": 73 - }, - "frame": { - "x": 167, - "y": 70, - "w": 82, - "h": 73 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 82, - "h": 73 - }, - "frame": { - "x": 167, - "y": 70, - "w": 82, - "h": 73 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 82, - "h": 73 - }, - "frame": { - "x": 83, - "y": 72, - "w": 82, - "h": 73 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 82, - "h": 73 - }, - "frame": { - "x": 83, - "y": 72, - "w": 82, - "h": 73 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 82, - "h": 73 - }, - "frame": { - "x": 0, - "y": 141, - "w": 82, - "h": 73 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 82, - "h": 73 - }, - "frame": { - "x": 0, - "y": 141, - "w": 82, - "h": 73 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 82, - "h": 73 - }, - "frame": { - "x": 0, - "y": 141, - "w": 82, - "h": 73 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 82, - "h": 73 - }, - "frame": { - "x": 249, - "y": 70, - "w": 82, - "h": 73 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 82, - "h": 73 - }, - "frame": { - "x": 249, - "y": 70, - "w": 82, - "h": 73 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 81, - "h": 73 - }, - "frame": { - "x": 0, - "y": 214, - "w": 81, - "h": 73 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 81, - "h": 73 - }, - "frame": { - "x": 0, - "y": 214, - "w": 81, - "h": 73 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 81, - "h": 71 - }, - "frame": { - "x": 0, - "y": 287, - "w": 81, - "h": 71 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 81, - "h": 71 - }, - "frame": { - "x": 0, - "y": 287, - "w": 81, - "h": 71 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 81, - "h": 73 - }, - "frame": { - "x": 81, - "y": 214, - "w": 81, - "h": 73 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 81, - "h": 73 - }, - "frame": { - "x": 81, - "y": 214, - "w": 81, - "h": 73 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 81, - "h": 71 - }, - "frame": { - "x": 81, - "y": 287, - "w": 81, - "h": 71 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 81, - "h": 71 - }, - "frame": { - "x": 81, - "y": 287, - "w": 81, - "h": 71 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 82, - "h": 72 - }, - "frame": { - "x": 165, - "y": 143, - "w": 82, - "h": 72 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 82, - "h": 72 - }, - "frame": { - "x": 165, - "y": 143, - "w": 82, - "h": 72 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 82, - "h": 72 - }, - "frame": { - "x": 247, - "y": 143, - "w": 82, - "h": 72 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 82, - "h": 72 - }, - "frame": { - "x": 247, - "y": 143, - "w": 82, - "h": 72 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 80, - "h": 73 - }, - "frame": { - "x": 162, - "y": 215, - "w": 80, - "h": 73 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 80, - "h": 73 - }, - "frame": { - "x": 162, - "y": 215, - "w": 80, - "h": 73 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 81, - "h": 70 - }, - "frame": { - "x": 162, - "y": 288, - "w": 81, - "h": 70 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 81, - "h": 70 - }, - "frame": { - "x": 162, - "y": 288, - "w": 81, - "h": 70 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 80, - "h": 73 - }, - "frame": { - "x": 242, - "y": 215, - "w": 80, - "h": 73 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 80, - "h": 73 - }, - "frame": { - "x": 242, - "y": 215, - "w": 80, - "h": 73 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:5d65e2c5a6a97b7c7014a175ce3592af:3255e87f637a475d82734fc7d93baf71:d60cc2e5ae2bd18de8ee3ab0649593ee$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/6706_2.png b/public/images/pokemon/variant/exp/back/6706_2.png deleted file mode 100644 index cb79347842094431759bdf08b8d5c76eac99023a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22444 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 XiwmH!3^jqR&X^1hO!TYt>?8gU6->{8 diff --git a/public/images/pokemon/variant/exp/back/6706_3.json b/public/images/pokemon/variant/exp/back/6706_3.json deleted file mode 100644 index 3bb1dc426b2..00000000000 --- a/public/images/pokemon/variant/exp/back/6706_3.json +++ /dev/null @@ -1,776 +0,0 @@ -{ - "textures": [ - { - "image": "6706_3.png", - "format": "RGBA8888", - "size": { - "w": 358, - "h": 358 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 84, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 84, - "h": 69 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 84, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 84, - "h": 69 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 83, - "h": 72 - }, - "frame": { - "x": 84, - "y": 0, - "w": 83, - "h": 72 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 83, - "h": 72 - }, - "frame": { - "x": 84, - "y": 0, - "w": 83, - "h": 72 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 83, - "h": 72 - }, - "frame": { - "x": 0, - "y": 69, - "w": 83, - "h": 72 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 83, - "h": 70 - }, - "frame": { - "x": 167, - "y": 0, - "w": 83, - "h": 70 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 83, - "h": 70 - }, - "frame": { - "x": 167, - "y": 0, - "w": 83, - "h": 70 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 83, - "h": 70 - }, - "frame": { - "x": 250, - "y": 0, - "w": 83, - "h": 70 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 83, - "h": 70 - }, - "frame": { - "x": 250, - "y": 0, - "w": 83, - "h": 70 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 82, - "h": 73 - }, - "frame": { - "x": 167, - "y": 70, - "w": 82, - "h": 73 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 82, - "h": 73 - }, - "frame": { - "x": 167, - "y": 70, - "w": 82, - "h": 73 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 82, - "h": 73 - }, - "frame": { - "x": 83, - "y": 72, - "w": 82, - "h": 73 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 82, - "h": 73 - }, - "frame": { - "x": 83, - "y": 72, - "w": 82, - "h": 73 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 82, - "h": 73 - }, - "frame": { - "x": 0, - "y": 141, - "w": 82, - "h": 73 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 82, - "h": 73 - }, - "frame": { - "x": 0, - "y": 141, - "w": 82, - "h": 73 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 82, - "h": 73 - }, - "frame": { - "x": 0, - "y": 141, - "w": 82, - "h": 73 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 82, - "h": 73 - }, - "frame": { - "x": 249, - "y": 70, - "w": 82, - "h": 73 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 82, - "h": 73 - }, - "frame": { - "x": 249, - "y": 70, - "w": 82, - "h": 73 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 81, - "h": 73 - }, - "frame": { - "x": 0, - "y": 214, - "w": 81, - "h": 73 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 81, - "h": 73 - }, - "frame": { - "x": 0, - "y": 214, - "w": 81, - "h": 73 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 81, - "h": 71 - }, - "frame": { - "x": 0, - "y": 287, - "w": 81, - "h": 71 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 81, - "h": 71 - }, - "frame": { - "x": 0, - "y": 287, - "w": 81, - "h": 71 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 81, - "h": 73 - }, - "frame": { - "x": 81, - "y": 214, - "w": 81, - "h": 73 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 81, - "h": 73 - }, - "frame": { - "x": 81, - "y": 214, - "w": 81, - "h": 73 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 81, - "h": 71 - }, - "frame": { - "x": 81, - "y": 287, - "w": 81, - "h": 71 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 81, - "h": 71 - }, - "frame": { - "x": 81, - "y": 287, - "w": 81, - "h": 71 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 82, - "h": 72 - }, - "frame": { - "x": 165, - "y": 143, - "w": 82, - "h": 72 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 82, - "h": 72 - }, - "frame": { - "x": 165, - "y": 143, - "w": 82, - "h": 72 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 82, - "h": 72 - }, - "frame": { - "x": 247, - "y": 143, - "w": 82, - "h": 72 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 82, - "h": 72 - }, - "frame": { - "x": 247, - "y": 143, - "w": 82, - "h": 72 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 80, - "h": 73 - }, - "frame": { - "x": 162, - "y": 215, - "w": 80, - "h": 73 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 80, - "h": 73 - }, - "frame": { - "x": 162, - "y": 215, - "w": 80, - "h": 73 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 81, - "h": 70 - }, - "frame": { - "x": 162, - "y": 288, - "w": 81, - "h": 70 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 81, - "h": 70 - }, - "frame": { - "x": 162, - "y": 288, - "w": 81, - "h": 70 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 80, - "h": 73 - }, - "frame": { - "x": 242, - "y": 215, - "w": 80, - "h": 73 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 73 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 80, - "h": 73 - }, - "frame": { - "x": 242, - "y": 215, - "w": 80, - "h": 73 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:5d65e2c5a6a97b7c7014a175ce3592af:3255e87f637a475d82734fc7d93baf71:d60cc2e5ae2bd18de8ee3ab0649593ee$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/6706_3.png b/public/images/pokemon/variant/exp/back/6706_3.png deleted file mode 100644 index 6390c20799f368a4253062379b4624b3f1f0ea69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22483 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 Date: Fri, 11 Oct 2024 13:09:15 -0700 Subject: [PATCH 066/153] [P3] Fix "falsex" type hint for Sheer Cold against ice types (#4638) Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/data/move.ts | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/data/move.ts b/src/data/move.ts index ff0c24f5032..5aa6b2623c0 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -4556,18 +4556,19 @@ export class WaterSuperEffectTypeMultiplierAttr extends VariableMoveTypeMultipli export class IceNoEffectTypeAttr extends VariableMoveTypeMultiplierAttr { /** * Checks to see if the Target is Ice-Type or not. If so, the move will have no effect. - * @param {Pokemon} user N/A - * @param {Pokemon} target Pokemon that is being checked whether Ice-Type or not. - * @param {Move} move N/A - * @param {any[]} args Sets to false if the target is Ice-Type, so it should do no damage/no effect. - * @returns {boolean} Returns true if move is successful, false if Ice-Type. + * @param user n/a + * @param target The {@linkcode Pokemon} targeted by the move + * @param move n/a + * @param args `[0]` a {@linkcode Utils.NumberHolder | NumberHolder} containing a type effectiveness multiplier + * @returns `true` if this Ice-type immunity applies; `false` otherwise */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + const multiplier = args[0] as Utils.NumberHolder; if (target.isOfType(Type.ICE)) { - (args[0] as Utils.BooleanHolder).value = false; - return false; + multiplier.value = 0; + return true; } - return true; + return false; } } From cfb92b4e0874d1f6344578d5abb689e78b9c8fbf Mon Sep 17 00:00:00 2001 From: Mumble <171087428+frutescens@users.noreply.github.com> Date: Fri, 11 Oct 2024 14:44:16 -0700 Subject: [PATCH 067/153] [Move] Telekinesis + [Bug] Ingrain (#4506) * some early set up * localization * Added Wiglett family to restrictions * Added Smack Down + 1000 Arrows Interactions * Added checks for certain tags * Gravity removes telekinesis from all pokemon on the field * need to check something else real quick * mmmmmm * think this is fine? * ingrain fixes * more ingrain * Telekinesis Test + Move Fix * Test Name change * another day another try... * Test Cleanup * fsfdsfds * Revert "fsfdsfds" This reverts commit cb7abcfd9f69342ae7b1864e2e4e124029f9f67e. * whoops * Apply suggestions from code review Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Missed one * Update src/data/move.ts Co-authored-by: PigeonBar <56974298+PigeonBar@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: innerthunder <168692175+innerthunder@users.noreply.github.com> * Add separate battler tags in move attr * Update src/data/battler-tags.ts Co-authored-by: innerthunder <168692175+innerthunder@users.noreply.github.com> * removed onRemove * Documentation * Update src/data/battler-tags.ts --------- Co-authored-by: frutescens Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: PigeonBar <56974298+PigeonBar@users.noreply.github.com> Co-authored-by: innerthunder <168692175+innerthunder@users.noreply.github.com> --- src/data/arena-tag.ts | 3 +- src/data/battler-tags.ts | 39 ++++++-- src/data/move.ts | 20 ++-- src/enums/battler-tag-type.ts | 3 +- src/field/pokemon.ts | 2 +- src/phases/move-effect-phase.ts | 6 +- src/test/moves/telekinesis.test.ts | 124 +++++++++++++++++++++++++ src/test/moves/thousand_arrows.test.ts | 4 +- 8 files changed, 182 insertions(+), 19 deletions(-) create mode 100644 src/test/moves/telekinesis.test.ts diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index 45d64249296..11d28ab7e25 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -885,7 +885,8 @@ export class GravityTag extends ArenaTag { arena.scene.queueMessage(i18next.t("arenaTag:gravityOnAdd")); arena.scene.getField(true).forEach((pokemon) => { if (pokemon !== null) { - pokemon.removeTag(BattlerTagType.MAGNET_RISEN); + pokemon.removeTag(BattlerTagType.FLOATING); + pokemon.removeTag(BattlerTagType.TELEKINESIS); } }); } diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 3cc109df264..18f03ada941 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -1713,7 +1713,12 @@ export class TypeImmuneTag extends BattlerTag { } } -export class MagnetRisenTag extends TypeImmuneTag { +/** + * Battler Tag that lifts the affected Pokemon into the air and provides immunity to Ground type moves. + * @see {@link https://bulbapedia.bulbagarden.net/wiki/Magnet_Rise_(move) | Moves.MAGNET_RISE} + * @see {@link https://bulbapedia.bulbagarden.net/wiki/Telekinesis_(move) | Moves.TELEKINESIS} + */ +export class FloatingTag extends TypeImmuneTag { constructor(tagType: BattlerTagType, sourceMove: Moves) { super(tagType, sourceMove, Type.GROUND, 5); } @@ -1721,13 +1726,17 @@ export class MagnetRisenTag extends TypeImmuneTag { onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - pokemon.scene.queueMessage(i18next.t("battlerTags:magnetRisenOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + if (this.sourceMove === Moves.MAGNET_RISE) { + pokemon.scene.queueMessage(i18next.t("battlerTags:magnetRisenOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + } + } onRemove(pokemon: Pokemon): void { super.onRemove(pokemon); - - pokemon.scene.queueMessage(i18next.t("battlerTags:magnetRisenOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + if (this.sourceMove === Moves.MAGNET_RISE) { + pokemon.scene.queueMessage(i18next.t("battlerTags:magnetRisenOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + } } } @@ -2676,6 +2685,22 @@ export class SyrupBombTag extends BattlerTag { } } +/** + * Telekinesis raises the target into the air for three turns and causes all moves used against the target (aside from OHKO moves) to hit the target unless the target is in a semi-invulnerable state from Fly/Dig. + * The first effect is provided by {@linkcode FloatingTag}, the accuracy-bypass effect is provided by TelekinesisTag + * The effects of Telekinesis can be baton passed to a teammate. Unlike the mainline games, Telekinesis can be baton-passed to Mega Gengar. + * @see {@link https://bulbapedia.bulbagarden.net/wiki/Telekinesis_(move) | Moves.TELEKINESIS} + */ +export class TelekinesisTag extends BattlerTag { + constructor(sourceMove: Moves) { + super(BattlerTagType.TELEKINESIS, [ BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.AFTER_MOVE ], 3, sourceMove, undefined, true); + } + + override onAdd(pokemon: Pokemon) { + pokemon.scene.queueMessage(i18next.t("battlerTags:telekinesisOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + } +} + /** * Retrieves a {@linkcode BattlerTag} based on the provided tag type, turn count, source move, and source ID. * @param sourceId - The ID of the pokemon adding the tag @@ -2802,8 +2827,8 @@ export function getBattlerTag(tagType: BattlerTagType, turnCount: number, source return new CursedTag(sourceId); case BattlerTagType.CHARGED: return new TypeBoostTag(tagType, sourceMove, Type.ELECTRIC, 2, true); - case BattlerTagType.MAGNET_RISEN: - return new MagnetRisenTag(tagType, sourceMove); + case BattlerTagType.FLOATING: + return new FloatingTag(tagType, sourceMove); case BattlerTagType.MINIMIZED: return new MinimizeTag(); case BattlerTagType.DESTINY_BOND: @@ -2849,6 +2874,8 @@ export function getBattlerTag(tagType: BattlerTagType, turnCount: number, source return new ImprisonTag(sourceId); case BattlerTagType.SYRUP_BOMB: return new SyrupBombTag(sourceId); + case BattlerTagType.TELEKINESIS: + return new TelekinesisTag(sourceMove); case BattlerTagType.NONE: default: return new BattlerTag(tagType, BattlerTagLapseType.CUSTOM, turnCount, sourceMove, sourceId); diff --git a/src/data/move.ts b/src/data/move.ts index 5aa6b2623c0..bd3706545f9 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -7843,7 +7843,9 @@ export function initMoves() { .attr(RandomMovesetMoveAttr, true) .ignoresVirtual(), new SelfStatusMove(Moves.INGRAIN, Type.GRASS, -1, 20, -1, 0, 3) - .attr(AddBattlerTagAttr, BattlerTagType.INGRAIN, true, true), + .attr(AddBattlerTagAttr, BattlerTagType.INGRAIN, true, true) + .attr(AddBattlerTagAttr, BattlerTagType.IGNORE_FLYING, true, true) + .attr(RemoveBattlerTagAttr, [ BattlerTagType.FLOATING ], true), new AttackMove(Moves.SUPERPOWER, Type.FIGHTING, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF ], -1, true), new SelfStatusMove(Moves.MAGIC_COAT, Type.PSYCHIC, -1, 15, -1, 4, 3) @@ -8177,8 +8179,8 @@ export function initMoves() { new SelfStatusMove(Moves.AQUA_RING, Type.WATER, -1, 20, -1, 0, 4) .attr(AddBattlerTagAttr, BattlerTagType.AQUA_RING, true, true), new SelfStatusMove(Moves.MAGNET_RISE, Type.ELECTRIC, -1, 10, -1, 0, 4) - .attr(AddBattlerTagAttr, BattlerTagType.MAGNET_RISEN, true, true) - .condition((user, target, move) => !user.scene.arena.getTag(ArenaTagType.GRAVITY) && [ BattlerTagType.MAGNET_RISEN, BattlerTagType.IGNORE_FLYING, BattlerTagType.INGRAIN ].every((tag) => !user.getTag(tag))), + .attr(AddBattlerTagAttr, BattlerTagType.FLOATING, true, true) + .condition((user, target, move) => !user.scene.arena.getTag(ArenaTagType.GRAVITY) && [ BattlerTagType.FLOATING, BattlerTagType.IGNORE_FLYING, BattlerTagType.INGRAIN ].every((tag) => !user.getTag(tag))), new AttackMove(Moves.FLARE_BLITZ, Type.FIRE, MoveCategory.PHYSICAL, 120, 100, 15, 10, 0, 4) .attr(RecoilAttr, false, 0.33) .attr(HealStatusEffectAttr, true, StatusEffect.FREEZE) @@ -8403,7 +8405,11 @@ export function initMoves() { .attr(AddBattlerTagAttr, BattlerTagType.CENTER_OF_ATTENTION, true), new StatusMove(Moves.TELEKINESIS, Type.PSYCHIC, -1, 15, -1, 0, 5) .condition(failOnGravityCondition) - .unimplemented(), + .condition((_user, target, _move) => ![ Species.DIGLETT, Species.DUGTRIO, Species.ALOLA_DIGLETT, Species.ALOLA_DUGTRIO, Species.SANDYGAST, Species.PALOSSAND, Species.WIGLETT, Species.WUGTRIO ].includes(target.species.speciesId)) + .condition((_user, target, _move) => !(target.species.speciesId === Species.GENGAR && target.getFormKey() === "mega")) + .condition((_user, target, _move) => Utils.isNullOrUndefined(target.getTag(BattlerTagType.INGRAIN)) && Utils.isNullOrUndefined(target.getTag(BattlerTagType.IGNORE_FLYING))) + .attr(AddBattlerTagAttr, BattlerTagType.TELEKINESIS, false, true, 3) + .attr(AddBattlerTagAttr, BattlerTagType.FLOATING, false, true, 3), new StatusMove(Moves.MAGIC_ROOM, Type.PSYCHIC, -1, 10, -1, 0, 5) .ignoresProtect() .target(MoveTarget.BOTH_SIDES) @@ -8411,7 +8417,7 @@ export function initMoves() { new AttackMove(Moves.SMACK_DOWN, Type.ROCK, MoveCategory.PHYSICAL, 50, 100, 15, 100, 0, 5) .attr(AddBattlerTagAttr, BattlerTagType.IGNORE_FLYING, false, false, 1, 1, true) .attr(AddBattlerTagAttr, BattlerTagType.INTERRUPTED) - .attr(RemoveBattlerTagAttr, [ BattlerTagType.FLYING, BattlerTagType.MAGNET_RISEN ]) + .attr(RemoveBattlerTagAttr, [ BattlerTagType.FLYING, BattlerTagType.FLOATING, BattlerTagType.TELEKINESIS ]) .attr(HitsTagAttr, BattlerTagType.FLYING) .makesContact(false), new AttackMove(Moves.STORM_THROW, Type.FIGHTING, MoveCategory.PHYSICAL, 60, 100, 10, -1, 0, 5) @@ -8844,9 +8850,9 @@ export function initMoves() { .attr(NeutralDamageAgainstFlyingTypeMultiplierAttr) .attr(AddBattlerTagAttr, BattlerTagType.IGNORE_FLYING, false, false, 1, 1, true) .attr(HitsTagAttr, BattlerTagType.FLYING) - .attr(HitsTagAttr, BattlerTagType.MAGNET_RISEN) + .attr(HitsTagAttr, BattlerTagType.FLOATING) .attr(AddBattlerTagAttr, BattlerTagType.INTERRUPTED) - .attr(RemoveBattlerTagAttr, [ BattlerTagType.FLYING, BattlerTagType.MAGNET_RISEN ]) + .attr(RemoveBattlerTagAttr, [ BattlerTagType.FLYING, BattlerTagType.FLOATING, BattlerTagType.TELEKINESIS ]) .makesContact(false) .target(MoveTarget.ALL_NEAR_ENEMIES), new AttackMove(Moves.THOUSAND_WAVES, Type.GROUND, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6) diff --git a/src/enums/battler-tag-type.ts b/src/enums/battler-tag-type.ts index 43c849a78e0..2efae9ad359 100644 --- a/src/enums/battler-tag-type.ts +++ b/src/enums/battler-tag-type.ts @@ -54,7 +54,7 @@ export enum BattlerTagType { CURSED = "CURSED", CHARGED = "CHARGED", ROOSTED = "ROOSTED", - MAGNET_RISEN = "MAGNET_RISEN", + FLOATING = "FLOATING", MINIMIZED = "MINIMIZED", DESTINY_BOND = "DESTINY_BOND", CENTER_OF_ATTENTION = "CENTER_OF_ATTENTION", @@ -86,4 +86,5 @@ export enum BattlerTagType { IMPRISON = "IMPRISON", SYRUP_BOMB = "SYRUP_BOMB", ELECTRIFIED = "ELECTRIFIED", + TELEKINESIS = "TELEKINESIS" } diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index d8fcc281d1b..c495e0833cd 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1488,7 +1488,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } isGrounded(): boolean { - return !!this.getTag(GroundedTag) || (!this.isOfType(Type.FLYING, true, true) && !this.hasAbility(Abilities.LEVITATE) && !this.getTag(BattlerTagType.MAGNET_RISEN) && !this.getTag(SemiInvulnerableTag)); + return !!this.getTag(GroundedTag) || (!this.isOfType(Type.FLYING, true, true) && !this.hasAbility(Abilities.LEVITATE) && !this.getTag(BattlerTagType.FLOATING) && !this.getTag(SemiInvulnerableTag)); } /** diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index b2d429a4313..581cd5ff017 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -4,7 +4,7 @@ import { applyPreAttackAbAttrs, AddSecondStrikeAbAttr, IgnoreMoveEffectsAbAttr, import { ArenaTagSide, ConditionalProtectTag } from "#app/data/arena-tag"; import { MoveAnim } from "#app/data/battle-anims"; import { BattlerTagLapseType, DamageProtectedTag, ProtectedTag, SemiInvulnerableTag, SubstituteTag } from "#app/data/battler-tags"; -import { MoveTarget, applyMoveAttrs, OverrideMoveEffectAttr, MultiHitAttr, AttackMove, FixedDamageAttr, VariableTargetAttr, MissEffectAttr, MoveFlags, applyFilteredMoveAttrs, MoveAttr, MoveEffectAttr, MoveEffectTrigger, ChargeAttr, MoveCategory, NoEffectAttr, HitsTagAttr, ToxicAccuracyAttr } from "#app/data/move"; +import { MoveTarget, applyMoveAttrs, OverrideMoveEffectAttr, MultiHitAttr, AttackMove, FixedDamageAttr, VariableTargetAttr, MissEffectAttr, MoveFlags, applyFilteredMoveAttrs, MoveAttr, MoveEffectAttr, OneHitKOAttr, MoveEffectTrigger, ChargeAttr, MoveCategory, NoEffectAttr, HitsTagAttr, ToxicAccuracyAttr } from "#app/data/move"; import { SpeciesFormChangePostMoveTrigger } from "#app/data/pokemon-forms"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { Moves } from "#app/enums/moves"; @@ -404,6 +404,10 @@ export class MoveEffectPhase extends PokemonPhase { return true; } + if (target.getTag(BattlerTagType.TELEKINESIS) && !target.getTag(SemiInvulnerableTag) && !this.move.getMove().hasAttr(OneHitKOAttr)) { + return true; + } + const semiInvulnerableTag = target.getTag(SemiInvulnerableTag); if (semiInvulnerableTag && !this.move.getMove().getAttrs(HitsTagAttr).some(hta => hta.tagType === semiInvulnerableTag.tagType) diff --git a/src/test/moves/telekinesis.test.ts b/src/test/moves/telekinesis.test.ts new file mode 100644 index 00000000000..76c0d001f00 --- /dev/null +++ b/src/test/moves/telekinesis.test.ts @@ -0,0 +1,124 @@ +import { BattlerTagType } from "#enums/battler-tag-type"; +import { allMoves } from "#app/data/move"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { MoveResult } from "#app/field/pokemon"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; + +describe("Moves - Telekinesis", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.TELEKINESIS, Moves.TACKLE, Moves.MUD_SHOT, Moves.SMACK_DOWN ]) + .battleType("single") + .enemySpecies(Species.SNORLAX) + .enemyLevel(60) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset([ Moves.SPLASH ]); + }); + + it("Telekinesis makes the affected vulnerable to most attacking moves regardless of accuracy", async () => { + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const enemyOpponent = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.TELEKINESIS); + await game.phaseInterceptor.to("TurnEndPhase"); + expect(enemyOpponent.getTag(BattlerTagType.TELEKINESIS)).toBeDefined(); + expect(enemyOpponent.getTag(BattlerTagType.FLOATING)).toBeDefined(); + + await game.toNextTurn(); + vi.spyOn(allMoves[Moves.TACKLE], "accuracy", "get").mockReturnValue(0); + game.move.select(Moves.TACKLE); + await game.phaseInterceptor.to("TurnEndPhase"); + expect(enemyOpponent.isFullHp()).toBe(false); + }); + + it("Telekinesis makes the affected airborne and immune to most Ground-moves", async () => { + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const enemyOpponent = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.TELEKINESIS); + await game.phaseInterceptor.to("TurnEndPhase"); + expect(enemyOpponent.getTag(BattlerTagType.TELEKINESIS)).toBeDefined(); + expect(enemyOpponent.getTag(BattlerTagType.FLOATING)).toBeDefined(); + + await game.toNextTurn(); + vi.spyOn(allMoves[Moves.MUD_SHOT], "accuracy", "get").mockReturnValue(100); + game.move.select(Moves.MUD_SHOT); + await game.phaseInterceptor.to("TurnEndPhase"); + expect(enemyOpponent.isFullHp()).toBe(true); + }); + + it("Telekinesis can still affect Pokemon that have been transformed into invalid Pokemon", async () => { + game.override.enemyMoveset(Moves.TRANSFORM); + await game.classicMode.startBattle([ Species.DIGLETT ]); + + const enemyOpponent = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.TELEKINESIS); + await game.phaseInterceptor.to("TurnEndPhase"); + expect(enemyOpponent.getTag(BattlerTagType.TELEKINESIS)).toBeDefined(); + expect(enemyOpponent.getTag(BattlerTagType.FLOATING)).toBeDefined(); + expect(enemyOpponent.summonData.speciesForm?.speciesId).toBe(Species.DIGLETT); + }); + + it("Moves like Smack Down and 1000 Arrows remove all effects of Telekinesis from the target Pokemon", async () => { + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const enemyOpponent = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.TELEKINESIS); + await game.phaseInterceptor.to("TurnEndPhase"); + expect(enemyOpponent.getTag(BattlerTagType.TELEKINESIS)).toBeDefined(); + expect(enemyOpponent.getTag(BattlerTagType.FLOATING)).toBeDefined(); + + await game.toNextTurn(); + game.move.select(Moves.SMACK_DOWN); + await game.phaseInterceptor.to("TurnEndPhase"); + expect(enemyOpponent.getTag(BattlerTagType.TELEKINESIS)).toBeUndefined(); + expect(enemyOpponent.getTag(BattlerTagType.FLOATING)).toBeUndefined(); + }); + + it("Ingrain will remove the floating effect of Telekinesis, but not the 100% hit", async () => { + game.override.enemyMoveset([ Moves.SPLASH, Moves.INGRAIN ]); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + const enemyOpponent = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.TELEKINESIS); + await game.forceEnemyMove(Moves.SPLASH); + await game.phaseInterceptor.to("TurnEndPhase"); + expect(enemyOpponent.getTag(BattlerTagType.TELEKINESIS)).toBeDefined(); + expect(enemyOpponent.getTag(BattlerTagType.FLOATING)).toBeDefined(); + + await game.toNextTurn(); + vi.spyOn(allMoves[Moves.MUD_SHOT], "accuracy", "get").mockReturnValue(0); + game.move.select(Moves.MUD_SHOT); + await game.forceEnemyMove(Moves.INGRAIN); + await game.phaseInterceptor.to("TurnEndPhase"); + expect(enemyOpponent.getTag(BattlerTagType.TELEKINESIS)).toBeDefined(); + expect(enemyOpponent.getTag(BattlerTagType.INGRAIN)).toBeDefined(); + expect(enemyOpponent.getTag(BattlerTagType.IGNORE_FLYING)).toBeDefined(); + expect(enemyOpponent.getTag(BattlerTagType.FLOATING)).toBeUndefined(); + expect(playerPokemon.getLastXMoves()[0].result).toBe(MoveResult.SUCCESS); + }); +}); diff --git a/src/test/moves/thousand_arrows.test.ts b/src/test/moves/thousand_arrows.test.ts index 112be476955..976b4352ee4 100644 --- a/src/test/moves/thousand_arrows.test.ts +++ b/src/test/moves/thousand_arrows.test.ts @@ -85,13 +85,13 @@ describe("Moves - Thousand Arrows", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; - enemyPokemon.addTag(BattlerTagType.MAGNET_RISEN, undefined, Moves.MAGNET_RISE); + enemyPokemon.addTag(BattlerTagType.FLOATING, undefined, Moves.MAGNET_RISE); game.move.select(Moves.THOUSAND_ARROWS); await game.phaseInterceptor.to(BerryPhase, false); - expect(enemyPokemon.getTag(BattlerTagType.MAGNET_RISEN)).toBeUndefined(); + expect(enemyPokemon.getTag(BattlerTagType.FLOATING)).toBeUndefined(); expect(enemyPokemon.getTag(BattlerTagType.IGNORE_FLYING)).toBeDefined(); expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp()); } From b7eb95b7614d0df1674f4bd9e000c0e1cd80b04e Mon Sep 17 00:00:00 2001 From: PigeonBar <56974298+PigeonBar@users.noreply.github.com> Date: Sat, 12 Oct 2024 11:22:26 -0400 Subject: [PATCH 068/153] [Test] Fix several flaky tests (#4639) --- src/test/moves/safeguard.test.ts | 2 +- .../an-offer-you-cant-refuse-encounter.test.ts | 11 +++++++---- .../encounters/berries-abound-encounter.test.ts | 12 ++++++++---- .../the-pokemon-salesman-encounter.test.ts | 4 ++-- 4 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/test/moves/safeguard.test.ts b/src/test/moves/safeguard.test.ts index c180ff338a5..6505162fd04 100644 --- a/src/test/moves/safeguard.test.ts +++ b/src/test/moves/safeguard.test.ts @@ -33,7 +33,7 @@ describe("Moves - Safeguard", () => { .enemyLevel(5) .starterSpecies(Species.DRATINI) .moveset([ Moves.NUZZLE, Moves.SPORE, Moves.YAWN, Moves.SPLASH ]) - .ability(Abilities.BALL_FETCH); + .ability(Abilities.UNNERVE); // Stop wild Pokemon from potentially eating Lum Berry }); it("protects from damaging moves with additional effects", async () => { diff --git a/src/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts b/src/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts index 9883b4332b9..0585b4ce72b 100644 --- a/src/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts @@ -18,6 +18,7 @@ import { Moves } from "#enums/moves"; import { ShinyRateBoosterModifier } from "#app/modifier/modifier"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import i18next from "i18next"; +import { Abilities } from "#enums/abilities"; const namespace = "mysteryEncounters/anOfferYouCantRefuse"; /** Gyarados for Indimidate */ @@ -37,10 +38,11 @@ describe("An Offer You Can't Refuse - Mystery Encounter", () => { beforeEach(async () => { game = new GameManager(phaserGame); scene = game.scene; - game.override.mysteryEncounterChance(100); - game.override.startingWave(defaultWave); - game.override.startingBiome(defaultBiome); - game.override.disableTrainerWaves(); + game.override.mysteryEncounterChance(100) + .startingWave(defaultWave) + .startingBiome(defaultBiome) + .disableTrainerWaves() + .ability(Abilities.INTIMIDATE); // Extortion ability const biomeMap = new Map([ [ Biome.VOLCANO, [ MysteryEncounterType.MYSTERIOUS_CHALLENGERS ]], @@ -195,6 +197,7 @@ describe("An Offer You Can't Refuse - Mystery Encounter", () => { }); it("should award EXP to a pokemon with a move in EXTORTION_MOVES", async () => { + game.override.ability(Abilities.SYNCHRONIZE); // Not an extortion ability, so we can test extortion move await game.runToMysteryEncounter(MysteryEncounterType.AN_OFFER_YOU_CANT_REFUSE, [ Species.ABRA ]); const party = scene.getParty(); const abra = party.find((pkm) => pkm.species.speciesId === Species.ABRA)!; diff --git a/src/test/mystery-encounter/encounters/berries-abound-encounter.test.ts b/src/test/mystery-encounter/encounters/berries-abound-encounter.test.ts index 8e286468bea..bfa3d428bc0 100644 --- a/src/test/mystery-encounter/encounters/berries-abound-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/berries-abound-encounter.test.ts @@ -176,10 +176,12 @@ describe("Berries Abound - Mystery Encounter", () => { const encounterTextSpy = vi.spyOn(EncounterDialogueUtils, "showEncounterText"); await game.runToMysteryEncounter(MysteryEncounterType.BERRIES_ABOUND, defaultParty); + scene.getParty().forEach(pkm => { + vi.spyOn(pkm, "getStat").mockReturnValue(1); // for ease return for every stat + }); + const config = game.scene.currentBattle.mysteryEncounter!.enemyPartyConfigs[0]; const speciesToSpawn = config.pokemonConfigs?.[0].species.speciesId; - // Setting enemy's level arbitrarily high to outspeed - config.pokemonConfigs![0].dataSource!.level = 1000; await runMysteryEncounterToEnd(game, 2, undefined, true); @@ -198,10 +200,12 @@ describe("Berries Abound - Mystery Encounter", () => { const encounterTextSpy = vi.spyOn(EncounterDialogueUtils, "showEncounterText"); await game.runToMysteryEncounter(MysteryEncounterType.BERRIES_ABOUND, defaultParty); + scene.getParty().forEach(pkm => { + vi.spyOn(pkm, "getStat").mockReturnValue(1); // for ease return for every stat + }); + const config = game.scene.currentBattle.mysteryEncounter!.enemyPartyConfigs[0]; const speciesToSpawn = config.pokemonConfigs?.[0].species.speciesId; - // Setting enemy's level arbitrarily high to outspeed - config.pokemonConfigs![0].dataSource!.level = 1000; await runMysteryEncounterToEnd(game, 2, undefined, true); diff --git a/src/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts b/src/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts index f8d1ffd3ded..040381c4ac3 100644 --- a/src/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/the-pokemon-salesman-encounter.test.ts @@ -147,8 +147,8 @@ describe("The Pokemon Salesman - Mystery Encounter", () => { expect(scene.getParty().length).toBe(initialPartySize + 1); - const newlyPurchasedPokemon = scene.getParty().find(p => p.name === pokemonName); - expect(newlyPurchasedPokemon).toBeDefined(); + const newlyPurchasedPokemon = scene.getParty()[scene.getParty().length - 1]; + expect(newlyPurchasedPokemon.name).toBe(pokemonName); expect(newlyPurchasedPokemon!.moveset.length > 0).toBeTruthy(); }); From 2ac688de4bf0d4715a1aa394b3c12162073ae0fe Mon Sep 17 00:00:00 2001 From: PigeonBar <56974298+PigeonBar@users.noreply.github.com> Date: Sat, 12 Oct 2024 16:06:26 -0400 Subject: [PATCH 069/153] [Misc] More complete phase logging (#4651) --- src/battle-scene.ts | 6 +++++- src/phase.ts | 1 - 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 40e3971b7fc..850d0baab5d 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -2316,7 +2316,10 @@ export default class BattleScene extends SceneBase { } } - this.currentPhase?.start(); + if (this.currentPhase) { + console.log(`%cStart Phase ${this.currentPhase.constructor.name}`, "color:green;"); + this.currentPhase.start(); + } } overridePhase(phase: Phase): boolean { @@ -2326,6 +2329,7 @@ export default class BattleScene extends SceneBase { this.standbyPhase = this.currentPhase; this.currentPhase = phase; + console.log(`%cStart Phase ${phase.constructor.name}`, "color:green;"); phase.start(); return true; diff --git a/src/phase.ts b/src/phase.ts index 02939757112..5cf91f2c478 100644 --- a/src/phase.ts +++ b/src/phase.ts @@ -8,7 +8,6 @@ export class Phase { } start() { - console.log(`%cStart Phase ${this.constructor.name}`, "color:green;"); if (this.scene.abilityBar.shown) { this.scene.abilityBar.resetAutoHideTimer(); } From ebb76129990751aa3e92784c179a838edaaefd96 Mon Sep 17 00:00:00 2001 From: PrabbyDD <147005742+PrabbyDD@users.noreply.github.com> Date: Sat, 12 Oct 2024 15:29:36 -0700 Subject: [PATCH 070/153] [Bug] Stat Stages are now changed individually instead of all at once (#4457) Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: Adrian T. <68144167+torranx@users.noreply.github.com> --- src/phases/stat-stage-change-phase.ts | 10 ++++ src/test/abilities/competitive.test.ts | 72 ++++++++++++++++++++++++++ src/test/abilities/defiant.test.ts | 70 +++++++++++++++++++++++++ 3 files changed, 152 insertions(+) create mode 100644 src/test/abilities/competitive.test.ts create mode 100644 src/test/abilities/defiant.test.ts diff --git a/src/phases/stat-stage-change-phase.ts b/src/phases/stat-stage-change-phase.ts index 4418c38c849..bfe19ea9ca5 100644 --- a/src/phases/stat-stage-change-phase.ts +++ b/src/phases/stat-stage-change-phase.ts @@ -36,6 +36,16 @@ export class StatStageChangePhase extends PokemonPhase { } start() { + + // Check if multiple stats are being changed at the same time, then run SSCPhase for each of them + if (this.stats.length > 1) { + for (let i = 0; i < this.stats.length; i++) { + const stat = [ this.stats[i] ]; + this.scene.unshiftPhase(new StatStageChangePhase(this.scene, this.battlerIndex, this.selfTarget, stat, this.stages, this.showMessage, this.ignoreAbilities, this.canBeCopied, this.onChange)); + } + return this.end(); + } + const pokemon = this.getPokemon(); if (!pokemon.isActive(true)) { diff --git a/src/test/abilities/competitive.test.ts b/src/test/abilities/competitive.test.ts new file mode 100644 index 00000000000..ecb276a1b8d --- /dev/null +++ b/src/test/abilities/competitive.test.ts @@ -0,0 +1,72 @@ +import { Stat } from "#enums/stat"; +import { TurnInitPhase } from "#app/phases/turn-init-phase"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Competitive", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + + game.override.battleType("single") + .enemySpecies(Species.BEEDRILL) + .enemyMoveset(Moves.TICKLE) + .startingLevel(1) + .moveset([ Moves.SPLASH, Moves.CLOSE_COMBAT ]) + .ability(Abilities.COMPETITIVE); + }); + + it("lower atk and def by 1 via tickle, then increase spatk by 4 via competitive", async () => { + await game.classicMode.startBattle([ Species.FLYGON ]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to(TurnInitPhase); + + expect(playerPokemon.getStatStage(Stat.ATK)).toBe(-1); + expect(playerPokemon.getStatStage(Stat.DEF)).toBe(-1); + expect(playerPokemon.getStatStage(Stat.SPATK)).toBe(4); + }); + + it("lowering your own stats should not trigger competitive", async () => { + game.override.enemyMoveset(Moves.SPLASH); + await game.classicMode.startBattle([ Species.FLYGON ]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + game.move.select(Moves.CLOSE_COMBAT); + await game.phaseInterceptor.to(TurnInitPhase); + + expect(playerPokemon.getStatStage(Stat.SPDEF)).toBe(-1); + expect(playerPokemon.getStatStage(Stat.DEF)).toBe(-1); + expect(playerPokemon.getStatStage(Stat.SPATK)).toBe(0); + }); + + it("white herb should remove only the negative effects", async () => { + game.override.startingHeldItems([{ name: "WHITE_HERB" }]); + await game.classicMode.startBattle([ Species.FLYGON ]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to(TurnInitPhase); + + expect(playerPokemon.getStatStage(Stat.ATK)).toBe(0); + expect(playerPokemon.getStatStage(Stat.DEF)).toBe(0); + expect(playerPokemon.getStatStage(Stat.SPATK)).toBe(4); + }); +}); diff --git a/src/test/abilities/defiant.test.ts b/src/test/abilities/defiant.test.ts new file mode 100644 index 00000000000..aa8d250dad7 --- /dev/null +++ b/src/test/abilities/defiant.test.ts @@ -0,0 +1,70 @@ +import { Stat } from "#enums/stat"; +import { TurnInitPhase } from "#app/phases/turn-init-phase"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Defiant", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + + game.override.battleType("single") + .enemySpecies(Species.BEEDRILL) + .enemyMoveset(Moves.TICKLE) + .startingLevel(1) + .moveset([ Moves.SPLASH, Moves.CLOSE_COMBAT ]) + .ability(Abilities.DEFIANT); + }); + + it("lower atk and def by 1 via tickle, then increase atk by 4 via defiant", async () => { + await game.classicMode.startBattle([ Species.FLYGON ]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to(TurnInitPhase); + + expect(playerPokemon.getStatStage(Stat.ATK)).toBe(3); + expect(playerPokemon.getStatStage(Stat.DEF)).toBe(-1); + }); + + it("lowering your own stats should not trigger defiant", async () => { + game.override.enemyMoveset(Moves.SPLASH); + await game.classicMode.startBattle([ Species.FLYGON ]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + game.move.select(Moves.CLOSE_COMBAT); + await game.phaseInterceptor.to(TurnInitPhase); + + expect(playerPokemon.getStatStage(Stat.SPDEF)).toBe(-1); + expect(playerPokemon.getStatStage(Stat.DEF)).toBe(-1); + expect(playerPokemon.getStatStage(Stat.ATK)).toBe(0); + }); + + it("white herb should remove only the negative effects", async () => { + game.override.startingHeldItems([{ name: "WHITE_HERB" }]); + await game.classicMode.startBattle([ Species.FLYGON ]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to(TurnInitPhase); + + expect(playerPokemon.getStatStage(Stat.DEF)).toBe(0); + expect(playerPokemon.getStatStage(Stat.ATK)).toBe(3); + }); +}); From caf29e2ce3fe5bd194a0a42eac9b91f32b65dc89 Mon Sep 17 00:00:00 2001 From: Tempoanon <163687446+Tempo-anon@users.noreply.github.com> Date: Sat, 12 Oct 2024 23:42:20 -0400 Subject: [PATCH 071/153] [Documentation] Document all (P) moves (#4650) * Document all (P) moves * Fix some typos * Fix more typos * Address innerthunder comments * Add circle throw and dragon tail (P) --- src/data/move.ts | 81 +++++++++++++++++++++++++++--------------------- 1 file changed, 46 insertions(+), 35 deletions(-) diff --git a/src/data/move.ts b/src/data/move.ts index bd3706545f9..8e9977337cc 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -365,6 +365,14 @@ export default class Move implements Localizable { return this; } + /** + * Internal dev flag for documenting edge cases. When using this, please document the known edge case. + * @returns the called object {@linkcode Move} + */ + edgeCase(): this { + return this; + } + /** * Marks the move as "partial": appends texts to the move name * @returns the called object {@linkcode Move} @@ -7084,7 +7092,8 @@ export function initMoves() { .attr(ForceSwitchOutAttr) .ignoresSubstitute() .hidesTarget() - .windMove(), + .windMove() + .partial(), // Should force random switches new AttackMove(Moves.FLY, Type.FLYING, MoveCategory.PHYSICAL, 90, 95, 15, -1, 0, 1) .attr(ChargeAttr, ChargeAnim.FLY_CHARGING, i18next.t("moveTriggers:flewUpHigh", { pokemonName: "{USER}" }), BattlerTagType.FLYING) .condition(failOnGravityCondition) @@ -7161,7 +7170,8 @@ export function initMoves() { new StatusMove(Moves.ROAR, Type.NORMAL, -1, 20, -1, -6, 1) .attr(ForceSwitchOutAttr) .soundBased() - .hidesTarget(), + .hidesTarget() + .partial(), // Should force random switching new StatusMove(Moves.SING, Type.NORMAL, 55, 15, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.SLEEP) .soundBased(), @@ -7302,7 +7312,7 @@ export function initMoves() { .attr(StatStageChangeAttr, [ Stat.SPD ], 2, true), new AttackMove(Moves.QUICK_ATTACK, Type.NORMAL, MoveCategory.PHYSICAL, 40, 100, 30, -1, 1, 1), new AttackMove(Moves.RAGE, Type.NORMAL, MoveCategory.PHYSICAL, 20, 100, 20, -1, 0, 1) - .partial(), + .partial(), // No effect implemented new SelfStatusMove(Moves.TELEPORT, Type.PSYCHIC, -1, 20, -1, -6, 1) .attr(ForceSwitchOutAttr, true) .hidesUser(), @@ -7617,7 +7627,7 @@ export function initMoves() { new StatusMove(Moves.CHARM, Type.FAIRY, 100, 20, -1, 0, 2) .attr(StatStageChangeAttr, [ Stat.ATK ], -2), new AttackMove(Moves.ROLLOUT, Type.ROCK, MoveCategory.PHYSICAL, 30, 90, 20, -1, 0, 2) - .partial() + .partial() // Does not lock the user, also does not increase damage properly .attr(ConsecutiveUseDoublePowerAttr, 5, true, true, Moves.DEFENSE_CURL), new AttackMove(Moves.FALSE_SWIPE, Type.NORMAL, MoveCategory.PHYSICAL, 40, 100, 40, -1, 0, 2) .attr(SurviveDamageAttr), @@ -7688,7 +7698,7 @@ export function initMoves() { .ignoresSubstitute() .condition((user, target, move) => new EncoreTag(user.id).canAdd(target)), new AttackMove(Moves.PURSUIT, Type.DARK, MoveCategory.PHYSICAL, 40, 100, 20, -1, 0, 2) - .partial(), + .partial(), // No effect implemented new AttackMove(Moves.RAPID_SPIN, Type.NORMAL, MoveCategory.PHYSICAL, 50, 100, 40, 100, 0, 2) .attr(StatStageChangeAttr, [ Stat.SPD ], 1, true) .attr(RemoveBattlerTagAttr, [ @@ -7753,7 +7763,7 @@ export function initMoves() { .attr(StatStageChangeAttr, [ Stat.SPDEF ], -1) .ballBombMove(), new AttackMove(Moves.FUTURE_SIGHT, Type.PSYCHIC, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 2) - .partial() + .partial() // Complete buggy mess .attr(DelayedAttackAttr, ArenaTagType.FUTURE_SIGHT, ChargeAnim.FUTURE_SIGHT_CHARGING, i18next.t("moveTriggers:foresawAnAttack", { pokemonName: "{USER}" })), new AttackMove(Moves.ROCK_SMASH, Type.FIGHTING, MoveCategory.PHYSICAL, 40, 100, 15, 50, 0, 2) .attr(StatStageChangeAttr, [ Stat.DEF ], -1), @@ -7771,7 +7781,7 @@ export function initMoves() { .ignoresVirtual() .soundBased() .target(MoveTarget.RANDOM_NEAR_ENEMY) - .partial(), + .partial(), // Does not lock the user, does not stop Pokemon from sleeping new SelfStatusMove(Moves.STOCKPILE, Type.NORMAL, -1, 20, -1, 0, 3) .condition(user => (user.getTag(StockpilingTag)?.stockpiledCount ?? 0) < 3) .attr(AddBattlerTagAttr, BattlerTagType.STOCKPILING, true), @@ -7794,7 +7804,7 @@ export function initMoves() { .target(MoveTarget.BOTH_SIDES), new StatusMove(Moves.TORMENT, Type.DARK, 100, 15, -1, 0, 3) .ignoresSubstitute() - .partial() // Incomplete implementation because of Uproar's partial implementation + .edgeCase() // Incomplete implementation because of Uproar's partial implementation .attr(AddBattlerTagAttr, BattlerTagType.TORMENT, false, true, 1), new StatusMove(Moves.FLATTER, Type.DARK, 100, 15, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPATK ], 1) @@ -7883,7 +7893,7 @@ export function initMoves() { .unimplemented(), new AttackMove(Moves.SECRET_POWER, Type.NORMAL, MoveCategory.PHYSICAL, 70, 100, 20, 30, 0, 3) .makesContact(false) - .partial(), + .partial(), // No effect implemented new AttackMove(Moves.DIVE, Type.WATER, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 3) .attr(ChargeAttr, ChargeAnim.DIVE_CHARGING, i18next.t("moveTriggers:hidUnderwater", { pokemonName: "{USER}" }), BattlerTagType.UNDERWATER, true) .attr(GulpMissileTagAttr) @@ -7914,7 +7924,7 @@ export function initMoves() { .attr(AddArenaTagAttr, ArenaTagType.MUD_SPORT, 5) .target(MoveTarget.BOTH_SIDES), new AttackMove(Moves.ICE_BALL, Type.ICE, MoveCategory.PHYSICAL, 30, 90, 20, -1, 0, 3) - .partial() + .partial() // Does not lock the user properly, does not increase damage correctly .attr(ConsecutiveUseDoublePowerAttr, 5, true, true, Moves.DEFENSE_CURL) .ballBombMove(), new AttackMove(Moves.NEEDLE_ARM, Type.GRASS, MoveCategory.PHYSICAL, 60, 100, 15, 30, 0, 3) @@ -8057,7 +8067,7 @@ export function initMoves() { .attr(ConfuseAttr) .pulseMove(), new AttackMove(Moves.DOOM_DESIRE, Type.STEEL, MoveCategory.SPECIAL, 140, 100, 5, -1, 0, 3) - .partial() + .partial() // Complete buggy mess .attr(DelayedAttackAttr, ArenaTagType.DOOM_DESIRE, ChargeAnim.DOOM_DESIRE_CHARGING, i18next.t("moveTriggers:choseDoomDesireAsDestiny", { pokemonName: "{USER}" })), new AttackMove(Moves.PSYCHO_BOOST, Type.PSYCHIC, MoveCategory.SPECIAL, 140, 90, 5, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.SPATK ], -2, true), @@ -8467,7 +8477,7 @@ export function initMoves() { .attr(AfterYouAttr), new AttackMove(Moves.ROUND, Type.NORMAL, MoveCategory.SPECIAL, 60, 100, 15, -1, 0, 5) .soundBased() - .partial(), + .partial(), // No effect implemented new AttackMove(Moves.ECHOED_VOICE, Type.NORMAL, MoveCategory.SPECIAL, 40, 100, 15, -1, 0, 5) .attr(ConsecutiveUseMultiBasePowerAttr, 5, false) .soundBased(), @@ -8509,7 +8519,8 @@ export function initMoves() { .attr(StatStageChangeAttr, [ Stat.ATK ], 1, true) .attr(StatStageChangeAttr, [ Stat.SPD ], 2, true), new AttackMove(Moves.CIRCLE_THROW, Type.FIGHTING, MoveCategory.PHYSICAL, 60, 90, 10, -1, -6, 5) - .attr(ForceSwitchOutAttr), + .attr(ForceSwitchOutAttr) + .partial(), // Should force random switches new AttackMove(Moves.INCINERATE, Type.FIRE, MoveCategory.SPECIAL, 60, 100, 15, -1, 0, 5) .target(MoveTarget.ALL_NEAR_ENEMIES) .attr(RemoveHeldItemAttr, true), @@ -8577,7 +8588,8 @@ export function initMoves() { .attr(CritOnlyAttr), new AttackMove(Moves.DRAGON_TAIL, Type.DRAGON, MoveCategory.PHYSICAL, 60, 90, 10, -1, -6, 5) .attr(ForceSwitchOutAttr) - .hidesTarget(), + .hidesTarget() + .partial(), // Should force random switches new SelfStatusMove(Moves.WORK_UP, Type.NORMAL, -1, 30, -1, 0, 5) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], 1, true), new AttackMove(Moves.ELECTROWEB, Type.ELECTRIC, MoveCategory.SPECIAL, 55, 95, 15, 100, 0, 5) @@ -8705,7 +8717,7 @@ export function initMoves() { .ignoresVirtual(), new StatusMove(Moves.TRICK_OR_TREAT, Type.GHOST, 100, 20, -1, 0, 6) .attr(AddTypeAttr, Type.GHOST) - .partial(), + .edgeCase(), // Weird interaction with Forest's Curse, reflect type, burn up new StatusMove(Moves.NOBLE_ROAR, Type.NORMAL, 100, 30, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -1) .soundBased(), @@ -8718,7 +8730,7 @@ export function initMoves() { .triageMove(), new StatusMove(Moves.FORESTS_CURSE, Type.GRASS, 100, 20, -1, 0, 6) .attr(AddTypeAttr, Type.GRASS) - .partial(), + .edgeCase(), // Weird interaction with Trick or Treat, reflect type, burn up new AttackMove(Moves.PETAL_BLIZZARD, Type.GRASS, MoveCategory.PHYSICAL, 90, 100, 15, -1, 0, 6) .windMove() .makesContact(false) @@ -8726,7 +8738,7 @@ export function initMoves() { new AttackMove(Moves.FREEZE_DRY, Type.ICE, MoveCategory.SPECIAL, 70, 100, 20, 10, 0, 6) .attr(StatusEffectAttr, StatusEffect.FREEZE) .attr(WaterSuperEffectTypeMultiplierAttr) - .partial(), // This currently just multiplies the move's power instead of changing its effectiveness. It also doesn't account for abilities that modify type effectiveness such as tera shell. + .edgeCase(), // This currently just multiplies the move's power instead of changing its effectiveness. It also doesn't account for abilities that modify type effectiveness such as tera shell. new AttackMove(Moves.DISARMING_VOICE, Type.FAIRY, MoveCategory.SPECIAL, 40, -1, 15, -1, 0, 6) .soundBased() .target(MoveTarget.ALL_NEAR_ENEMIES), @@ -9104,15 +9116,15 @@ export function initMoves() { /* Unused */ new AttackMove(Moves.SINISTER_ARROW_RAID, Type.GHOST, MoveCategory.PHYSICAL, 180, -1, 1, -1, 0, 7) .makesContact(false) - .partial() + .edgeCase() // I assume it's because the user needs spirit shackle and decidueye .ignoresVirtual(), new AttackMove(Moves.MALICIOUS_MOONSAULT, Type.DARK, MoveCategory.PHYSICAL, 180, -1, 1, -1, 0, 7) .attr(AlwaysHitMinimizeAttr) .attr(HitsTagAttr, BattlerTagType.MINIMIZED, true) - .partial() + .edgeCase() // I assume it's because it needs darkest lariat and incineroar .ignoresVirtual(), new AttackMove(Moves.OCEANIC_OPERETTA, Type.WATER, MoveCategory.SPECIAL, 195, -1, 1, -1, 0, 7) - .partial() + .edgeCase() // I assume it's because it needs sparkling aria and primarina .ignoresVirtual(), new AttackMove(Moves.GUARDIAN_OF_ALOLA, Type.FAIRY, MoveCategory.SPECIAL, -1, -1, 1, -1, 0, 7) .unimplemented() @@ -9121,10 +9133,10 @@ export function initMoves() { .unimplemented() .ignoresVirtual(), new AttackMove(Moves.STOKED_SPARKSURFER, Type.ELECTRIC, MoveCategory.SPECIAL, 175, -1, 1, 100, 0, 7) - .partial() + .edgeCase() // I assume it's because it needs thunderbolt and Alola Raichu .ignoresVirtual(), new AttackMove(Moves.PULVERIZING_PANCAKE, Type.NORMAL, MoveCategory.PHYSICAL, 210, -1, 1, -1, 0, 7) - .partial() + .edgeCase() // I assume it's because it needs giga impact and snorlax .ignoresVirtual(), new SelfStatusMove(Moves.EXTREME_EVOBOOST, Type.NORMAL, -1, 1, -1, 0, 7) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ], 2, true) @@ -9155,13 +9167,13 @@ export function initMoves() { .attr(RechargeAttr), new AttackMove(Moves.SPECTRAL_THIEF, Type.GHOST, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 7) .ignoresSubstitute() - .partial(), + .partial(), // Does not steal stats new AttackMove(Moves.SUNSTEEL_STRIKE, Type.STEEL, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 7) .ignoresAbilities() - .partial(), + .edgeCase(), // Should not ignore abilities when called virtually (metronome) new AttackMove(Moves.MOONGEIST_BEAM, Type.GHOST, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 7) .ignoresAbilities() - .partial(), + .edgeCase(), // Should not ignore abilities when called virtually (metronome) new StatusMove(Moves.TEARFUL_LOOK, Type.NORMAL, -1, 20, -1, 0, 7) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -1), new AttackMove(Moves.ZING_ZAP, Type.ELECTRIC, MoveCategory.PHYSICAL, 80, 100, 10, 30, 0, 7) @@ -9172,7 +9184,7 @@ export function initMoves() { .attr(FormChangeItemTypeAttr), /* Unused */ new AttackMove(Moves.TEN_MILLION_VOLT_THUNDERBOLT, Type.ELECTRIC, MoveCategory.SPECIAL, 195, -1, 1, -1, 0, 7) - .partial() + .edgeCase() // I assume it's because it needs thunderbolt and pikachu in a cap .ignoresVirtual(), /* End Unused */ new AttackMove(Moves.MIND_BLOWN, Type.FIRE, MoveCategory.SPECIAL, 150, 100, 5, -1, 0, 7) @@ -9185,7 +9197,7 @@ export function initMoves() { new AttackMove(Moves.PHOTON_GEYSER, Type.PSYCHIC, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 7) .attr(PhotonGeyserCategoryAttr) .ignoresAbilities() - .partial(), + .edgeCase(), // Should not ignore abilities when called virtually (metronome) /* Unused */ new AttackMove(Moves.LIGHT_THAT_BURNS_THE_SKY, Type.PSYCHIC, MoveCategory.SPECIAL, 200, -1, 1, -1, 0, 7) .attr(PhotonGeyserCategoryAttr) @@ -9198,7 +9210,7 @@ export function initMoves() { .ignoresAbilities() .ignoresVirtual(), new AttackMove(Moves.LETS_SNUGGLE_FOREVER, Type.FAIRY, MoveCategory.PHYSICAL, 190, -1, 1, -1, 0, 7) - .partial() + .edgeCase() // I assume it needs play rough and mimikyu .ignoresVirtual(), new AttackMove(Moves.SPLINTERED_STORMSHARDS, Type.ROCK, MoveCategory.PHYSICAL, 190, -1, 1, -1, 0, 7) .attr(ClearTerrainAttr) @@ -9208,7 +9220,7 @@ export function initMoves() { .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ], 1, true, undefined, undefined, undefined, undefined, true) .soundBased() .target(MoveTarget.ALL_NEAR_ENEMIES) - .partial() + .edgeCase() // I assume it needs clanging scales and Kommo-O .ignoresVirtual(), /* End Unused */ new AttackMove(Moves.ZIPPY_ZAP, Type.ELECTRIC, MoveCategory.PHYSICAL, 50, 100, 15, -1, 2, 7) //LGPE Implementation @@ -9271,14 +9283,14 @@ export function initMoves() { new AttackMove(Moves.JAW_LOCK, Type.DARK, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 8) .attr(JawLockAttr) .bitingMove(), - new SelfStatusMove(Moves.STUFF_CHEEKS, Type.NORMAL, -1, 10, -1, 0, 8) // TODO: Stuff Cheeks should not be selectable when the user does not have a berry, see wiki + new SelfStatusMove(Moves.STUFF_CHEEKS, Type.NORMAL, -1, 10, -1, 0, 8) .attr(EatBerryAttr) .attr(StatStageChangeAttr, [ Stat.DEF ], 2, true) .condition((user) => { const userBerries = user.scene.findModifiers(m => m instanceof BerryModifier, user.isPlayer()); return userBerries.length > 0; }) - .partial(), + .edgeCase(), // Stuff Cheeks should not be selectable when the user does not have a berry, see wiki new SelfStatusMove(Moves.NO_RETREAT, Type.FIGHTING, -1, 5, -1, 0, 8) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ], 1, true) .attr(AddBattlerTagAttr, BattlerTagType.NO_RETREAT, true, false) @@ -9292,7 +9304,7 @@ export function initMoves() { new AttackMove(Moves.DRAGON_DARTS, Type.DRAGON, MoveCategory.PHYSICAL, 50, 100, 10, -1, 0, 8) .attr(MultiHitAttr, MultiHitType._2) .makesContact(false) - .partial(), + .partial(), // smart targetting is unimplemented new StatusMove(Moves.TEATIME, Type.NORMAL, -1, 10, -1, 0, 8) .attr(EatBerryAttr) .target(MoveTarget.ALL), @@ -9731,7 +9743,7 @@ export function initMoves() { .attr(StatStageChangeAttr, [ Stat.SPDEF ], -2), new AttackMove(Moves.ORDER_UP, Type.DRAGON, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 9) .makesContact(false) - .partial(), + .partial(), // No effect implemented (requires Commander) new AttackMove(Moves.JET_PUNCH, Type.WATER, MoveCategory.PHYSICAL, 60, 100, 15, -1, 1, 9) .punchingMove(), new StatusMove(Moves.SPICY_EXTRACT, Type.GRASS, -1, 15, -1, 0, 9) @@ -9943,8 +9955,7 @@ export function initMoves() { new AttackMove(Moves.UPPER_HAND, Type.FIGHTING, MoveCategory.PHYSICAL, 65, 100, 15, 100, 3, 9) .attr(FlinchAttr) .condition((user, target, move) => user.scene.currentBattle.turnCommands[target.getBattlerIndex()]?.command === Command.FIGHT && !target.turnData.acted && allMoves[user.scene.currentBattle.turnCommands[target.getBattlerIndex()]?.move?.move!].category !== MoveCategory.STATUS && allMoves[user.scene.currentBattle.turnCommands[target.getBattlerIndex()]?.move?.move!].priority > 0 ) // TODO: is this bang correct? - //TODO: Should also apply when target move priority increased by ability ex. gale wings - .partial(), + .partial(), // Should also apply when target move priority increased by ability ex. gale wings new AttackMove(Moves.MALIGNANT_CHAIN, Type.POISON, MoveCategory.SPECIAL, 100, 100, 5, 50, 0, 9) .attr(StatusEffectAttr, StatusEffect.TOXIC) ); From 8e7aea0f8990450d5d06e273f83188fffa87857e Mon Sep 17 00:00:00 2001 From: damocleas Date: Sat, 12 Oct 2024 23:51:14 -0400 Subject: [PATCH 072/153] Fixed Charizard and Kingler BST, fixed ability indexing for gmax forms (#4652) --- src/data/pokemon-species.ts | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 1ceb5971f6a..8bb23cfc208 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -975,7 +975,7 @@ export function initSpecies() { new PokemonSpecies(Species.VENUSAUR, 1, false, false, false, "Seed Pokémon", Type.GRASS, Type.POISON, 2, 100, Abilities.OVERGROW, Abilities.NONE, Abilities.CHLOROPHYLL, 525, 80, 82, 83, 100, 100, 80, 45, 50, 263, GrowthRate.MEDIUM_SLOW, 87.5, true, true, new PokemonForm("Normal", "", Type.GRASS, Type.POISON, 2, 100, Abilities.OVERGROW, Abilities.NONE, Abilities.CHLOROPHYLL, 525, 80, 82, 83, 100, 100, 80, 45, 50, 263, true, null, true), new PokemonForm("Mega", SpeciesFormKey.MEGA, Type.GRASS, Type.POISON, 2.4, 155.5, Abilities.THICK_FAT, Abilities.THICK_FAT, Abilities.THICK_FAT, 625, 80, 100, 123, 122, 120, 80, 45, 50, 263, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.GRASS, Type.POISON, 24, 999.9, Abilities.EFFECT_SPORE, Abilities.EFFECT_SPORE, Abilities.EFFECT_SPORE, 625, 120, 82, 98, 130, 115, 80, 45, 50, 263, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.GRASS, Type.POISON, 24, 999.9, Abilities.EFFECT_SPORE, Abilities.NONE, Abilities.EFFECT_SPORE, 625, 120, 82, 98, 130, 115, 80, 45, 50, 263, true), ), new PokemonSpecies(Species.CHARMANDER, 1, false, false, false, "Lizard Pokémon", Type.FIRE, null, 0.6, 8.5, Abilities.BLAZE, Abilities.NONE, Abilities.SOLAR_POWER, 309, 39, 52, 43, 60, 50, 65, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.CHARMELEON, 1, false, false, false, "Flame Pokémon", Type.FIRE, null, 1.1, 19, Abilities.BLAZE, Abilities.NONE, Abilities.SOLAR_POWER, 405, 58, 64, 58, 80, 65, 80, 45, 50, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), @@ -983,20 +983,20 @@ export function initSpecies() { new PokemonForm("Normal", "", Type.FIRE, Type.FLYING, 1.7, 90.5, Abilities.BLAZE, Abilities.NONE, Abilities.SOLAR_POWER, 534, 78, 84, 78, 109, 85, 100, 45, 50, 267, false, null, true), new PokemonForm("Mega X", SpeciesFormKey.MEGA_X, Type.FIRE, Type.DRAGON, 1.7, 110.5, Abilities.TOUGH_CLAWS, Abilities.NONE, Abilities.TOUGH_CLAWS, 634, 78, 130, 111, 130, 85, 100, 45, 50, 267), new PokemonForm("Mega Y", SpeciesFormKey.MEGA_Y, Type.FIRE, Type.FLYING, 1.7, 100.5, Abilities.DROUGHT, Abilities.NONE, Abilities.DROUGHT, 634, 78, 104, 78, 159, 115, 100, 45, 50, 267), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.FIRE, Type.FLYING, 28, 999.9, Abilities.BERSERK, Abilities.BERSERK, Abilities.BERSERK, 634, 118, 84, 93, 139, 110, 100, 45, 50, 267), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.FIRE, Type.FLYING, 28, 999.9, Abilities.BERSERK, Abilities.NONE, Abilities.BERSERK, 634, 118, 84, 93, 139, 100, 100, 45, 50, 267), ), new PokemonSpecies(Species.SQUIRTLE, 1, false, false, false, "Tiny Turtle Pokémon", Type.WATER, null, 0.5, 9, Abilities.TORRENT, Abilities.NONE, Abilities.RAIN_DISH, 314, 44, 48, 65, 50, 64, 43, 45, 50, 63, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.WARTORTLE, 1, false, false, false, "Turtle Pokémon", Type.WATER, null, 1, 22.5, Abilities.TORRENT, Abilities.NONE, Abilities.RAIN_DISH, 405, 59, 63, 80, 65, 80, 58, 45, 50, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.BLASTOISE, 1, false, false, false, "Shellfish Pokémon", Type.WATER, null, 1.6, 85.5, Abilities.TORRENT, Abilities.NONE, Abilities.RAIN_DISH, 530, 79, 83, 100, 85, 105, 78, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, new PokemonForm("Normal", "", Type.WATER, null, 1.6, 85.5, Abilities.TORRENT, Abilities.NONE, Abilities.RAIN_DISH, 530, 79, 83, 100, 85, 105, 78, 45, 50, 265, false, null, true), new PokemonForm("Mega", SpeciesFormKey.MEGA, Type.WATER, null, 1.6, 101.1, Abilities.MEGA_LAUNCHER, Abilities.NONE, Abilities.MEGA_LAUNCHER, 630, 79, 103, 120, 135, 115, 78, 45, 50, 265), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.WATER, Type.STEEL, 25, 999.9, Abilities.SHELL_ARMOR, Abilities.SHELL_ARMOR, Abilities.SHELL_ARMOR, 630, 119, 83, 135, 115, 110, 68, 45, 50, 265), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.WATER, Type.STEEL, 25, 999.9, Abilities.SHELL_ARMOR, Abilities.NONE, Abilities.SHELL_ARMOR, 630, 119, 83, 135, 115, 110, 68, 45, 50, 265), ), new PokemonSpecies(Species.CATERPIE, 1, false, false, false, "Worm Pokémon", Type.BUG, null, 0.3, 2.9, Abilities.SHIELD_DUST, Abilities.NONE, Abilities.RUN_AWAY, 195, 45, 30, 35, 20, 20, 45, 255, 50, 39, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.METAPOD, 1, false, false, false, "Cocoon Pokémon", Type.BUG, null, 0.7, 9.9, Abilities.SHED_SKIN, Abilities.NONE, Abilities.SHED_SKIN, 205, 50, 20, 55, 25, 25, 30, 120, 50, 72, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.BUTTERFREE, 1, false, false, false, "Butterfly Pokémon", Type.BUG, Type.FLYING, 1.1, 32, Abilities.COMPOUND_EYES, Abilities.NONE, Abilities.TINTED_LENS, 395, 60, 45, 50, 90, 80, 70, 45, 50, 198, GrowthRate.MEDIUM_FAST, 50, true, true, new PokemonForm("Normal", "", Type.BUG, Type.FLYING, 1.1, 32, Abilities.COMPOUND_EYES, Abilities.NONE, Abilities.TINTED_LENS, 395, 60, 45, 50, 90, 80, 70, 45, 50, 198, true, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.BUG, Type.FLYING, 17, 999.9, Abilities.COMPOUND_EYES, Abilities.COMPOUND_EYES, Abilities.COMPOUND_EYES, 495, 85, 35, 80, 120, 90, 85, 45, 50, 198, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.BUG, Type.FLYING, 17, 999.9, Abilities.COMPOUND_EYES, Abilities.NONE, Abilities.COMPOUND_EYES, 495, 85, 35, 80, 120, 90, 85, 45, 50, 198, true), ), new PokemonSpecies(Species.WEEDLE, 1, false, false, false, "Hairy Bug Pokémon", Type.BUG, Type.POISON, 0.3, 3.2, Abilities.SHIELD_DUST, Abilities.NONE, Abilities.RUN_AWAY, 195, 40, 35, 30, 20, 20, 50, 255, 70, 39, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.KAKUNA, 1, false, false, false, "Cocoon Pokémon", Type.BUG, Type.POISON, 0.6, 10, Abilities.SHED_SKIN, Abilities.NONE, Abilities.SHED_SKIN, 205, 45, 25, 50, 25, 25, 35, 120, 70, 72, GrowthRate.MEDIUM_FAST, 50, false), @@ -1025,7 +1025,7 @@ export function initSpecies() { new PokemonForm("Cute Cosplay", "cute-cosplay", Type.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom new PokemonForm("Smart Cosplay", "smart-cosplay", Type.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom new PokemonForm("Tough Cosplay", "tough-cosplay", Type.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.ELECTRIC, null, 21, 999.9, Abilities.LIGHTNING_ROD, Abilities.LIGHTNING_ROD, Abilities.LIGHTNING_ROD, 530, 125, 95, 60, 90, 70, 90, 190, 50, 112), //+100 BST from Partner Form + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.ELECTRIC, null, 21, 999.9, Abilities.LIGHTNING_ROD, Abilities.NONE, Abilities.LIGHTNING_ROD, 530, 125, 95, 60, 90, 70, 90, 190, 50, 112), //+100 BST from Partner Form ), new PokemonSpecies(Species.RAICHU, 1, false, false, false, "Mouse Pokémon", Type.ELECTRIC, null, 0.8, 30, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 485, 60, 90, 55, 90, 80, 110, 75, 50, 243, GrowthRate.MEDIUM_FAST, 50, true), new PokemonSpecies(Species.SANDSHREW, 1, false, false, false, "Mouse Pokémon", Type.GROUND, null, 0.6, 12, Abilities.SAND_VEIL, Abilities.NONE, Abilities.SAND_RUSH, 300, 50, 75, 85, 20, 30, 40, 255, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), @@ -1110,7 +1110,7 @@ export function initSpecies() { new PokemonSpecies(Species.GENGAR, 1, false, false, false, "Shadow Pokémon", Type.GHOST, Type.POISON, 1.5, 40.5, Abilities.CURSED_BODY, Abilities.NONE, Abilities.NONE, 500, 60, 65, 60, 130, 75, 110, 45, 50, 250, GrowthRate.MEDIUM_SLOW, 50, false, true, new PokemonForm("Normal", "", Type.GHOST, Type.POISON, 1.5, 40.5, Abilities.CURSED_BODY, Abilities.NONE, Abilities.NONE, 500, 60, 65, 60, 130, 75, 110, 45, 50, 250, false, null, true), new PokemonForm("Mega", SpeciesFormKey.MEGA, Type.GHOST, Type.POISON, 1.4, 40.5, Abilities.SHADOW_TAG, Abilities.NONE, Abilities.NONE, 600, 60, 65, 80, 170, 95, 130, 45, 50, 250), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.GHOST, Type.POISON, 20, 999.9, Abilities.CURSED_BODY, Abilities.CURSED_BODY, Abilities.CURSED_BODY, 600, 140, 65, 70, 140, 85, 100, 45, 50, 250), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.GHOST, Type.POISON, 20, 999.9, Abilities.CURSED_BODY, Abilities.NONE, Abilities.NONE, 600, 140, 65, 70, 140, 85, 100, 45, 50, 250), ), new PokemonSpecies(Species.ONIX, 1, false, false, false, "Rock Snake Pokémon", Type.ROCK, Type.GROUND, 8.8, 210, Abilities.ROCK_HEAD, Abilities.STURDY, Abilities.WEAK_ARMOR, 385, 35, 45, 160, 30, 45, 70, 45, 50, 77, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.DROWZEE, 1, false, false, false, "Hypnosis Pokémon", Type.PSYCHIC, null, 1, 32.4, Abilities.INSOMNIA, Abilities.FOREWARN, Abilities.INNER_FOCUS, 328, 60, 48, 45, 43, 90, 42, 190, 70, 66, GrowthRate.MEDIUM_FAST, 50, false), @@ -1118,7 +1118,7 @@ export function initSpecies() { new PokemonSpecies(Species.KRABBY, 1, false, false, false, "River Crab Pokémon", Type.WATER, null, 0.4, 6.5, Abilities.HYPER_CUTTER, Abilities.SHELL_ARMOR, Abilities.SHEER_FORCE, 325, 30, 105, 90, 25, 25, 50, 225, 50, 65, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.KINGLER, 1, false, false, false, "Pincer Pokémon", Type.WATER, null, 1.3, 60, Abilities.HYPER_CUTTER, Abilities.SHELL_ARMOR, Abilities.SHEER_FORCE, 475, 55, 130, 115, 50, 50, 75, 60, 50, 166, GrowthRate.MEDIUM_FAST, 50, false, true, new PokemonForm("Normal", "", Type.WATER, null, 1.3, 60, Abilities.HYPER_CUTTER, Abilities.SHELL_ARMOR, Abilities.SHEER_FORCE, 475, 55, 130, 115, 50, 50, 75, 60, 50, 166, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.WATER, null, 19, 999.9, Abilities.TOUGH_CLAWS, Abilities.TOUGH_CLAWS, Abilities.TOUGH_CLAWS, 575, 90, 155, 140, 50, 80, 70, 60, 50, 166), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.WATER, null, 19, 999.9, Abilities.TOUGH_CLAWS, Abilities.TOUGH_CLAWS, Abilities.TOUGH_CLAWS, 575, 90, 155, 140, 50, 70, 70, 60, 50, 166), ), new PokemonSpecies(Species.VOLTORB, 1, false, false, false, "Ball Pokémon", Type.ELECTRIC, null, 0.5, 10.4, Abilities.SOUNDPROOF, Abilities.STATIC, Abilities.AFTERMATH, 330, 40, 30, 50, 55, 55, 100, 190, 70, 66, GrowthRate.MEDIUM_FAST, null, false), new PokemonSpecies(Species.ELECTRODE, 1, false, false, false, "Ball Pokémon", Type.ELECTRIC, null, 1.2, 66.6, Abilities.SOUNDPROOF, Abilities.STATIC, Abilities.AFTERMATH, 490, 60, 50, 70, 80, 80, 150, 60, 70, 172, GrowthRate.MEDIUM_FAST, null, false), @@ -2298,25 +2298,25 @@ export function initSpecies() { new PokemonSpecies(Species.MELTAN, 7, false, false, true, "Hex Nut Pokémon", Type.STEEL, null, 0.2, 8, Abilities.MAGNET_PULL, Abilities.NONE, Abilities.NONE, 300, 46, 65, 65, 55, 35, 34, 3, 0, 150, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.MELMETAL, 7, false, false, true, "Hex Nut Pokémon", Type.STEEL, null, 2.5, 800, Abilities.IRON_FIST, Abilities.NONE, Abilities.NONE, 600, 135, 143, 143, 80, 65, 34, 3, 0, 300, GrowthRate.SLOW, null, false, true, new PokemonForm("Normal", "", Type.STEEL, null, 2.5, 800, Abilities.IRON_FIST, Abilities.NONE, Abilities.NONE, 600, 135, 143, 143, 80, 65, 34, 3, 0, 300, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.STEEL, null, 25, 999.9, Abilities.IRON_FIST, Abilities.IRON_FIST, Abilities.IRON_FIST, 700, 175, 165, 155, 85, 75, 45, 3, 0, 300), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.STEEL, null, 25, 999.9, Abilities.IRON_FIST, Abilities.NONE, Abilities.NONE, 700, 175, 165, 155, 85, 75, 45, 3, 0, 300), ), new PokemonSpecies(Species.GROOKEY, 8, false, false, false, "Chimp Pokémon", Type.GRASS, null, 0.3, 5, Abilities.OVERGROW, Abilities.NONE, Abilities.GRASSY_SURGE, 310, 50, 65, 50, 40, 40, 65, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.THWACKEY, 8, false, false, false, "Beat Pokémon", Type.GRASS, null, 0.7, 14, Abilities.OVERGROW, Abilities.NONE, Abilities.GRASSY_SURGE, 420, 70, 85, 70, 55, 60, 80, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.RILLABOOM, 8, false, false, false, "Drummer Pokémon", Type.GRASS, null, 2.1, 90, Abilities.OVERGROW, Abilities.NONE, Abilities.GRASSY_SURGE, 530, 100, 125, 90, 60, 70, 85, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, new PokemonForm("Normal", "", Type.GRASS, null, 2.1, 90, Abilities.OVERGROW, Abilities.NONE, Abilities.GRASSY_SURGE, 530, 100, 125, 90, 60, 70, 85, 45, 50, 265, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.GRASS, null, 28, 999.9, Abilities.GRASSY_SURGE, Abilities.GRASSY_SURGE, Abilities.GRASSY_SURGE, 630, 125, 150, 105, 85, 85, 80, 45, 50, 265), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.GRASS, null, 28, 999.9, Abilities.GRASSY_SURGE, Abilities.NONE, Abilities.GRASSY_SURGE, 630, 125, 150, 105, 85, 85, 80, 45, 50, 265), ), new PokemonSpecies(Species.SCORBUNNY, 8, false, false, false, "Rabbit Pokémon", Type.FIRE, null, 0.3, 4.5, Abilities.BLAZE, Abilities.NONE, Abilities.LIBERO, 310, 50, 71, 40, 40, 40, 69, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.RABOOT, 8, false, false, false, "Rabbit Pokémon", Type.FIRE, null, 0.6, 9, Abilities.BLAZE, Abilities.NONE, Abilities.LIBERO, 420, 65, 86, 60, 55, 60, 94, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.CINDERACE, 8, false, false, false, "Striker Pokémon", Type.FIRE, null, 1.4, 33, Abilities.BLAZE, Abilities.NONE, Abilities.LIBERO, 530, 80, 116, 75, 65, 75, 119, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, new PokemonForm("Normal", "", Type.FIRE, null, 1.4, 33, Abilities.BLAZE, Abilities.NONE, Abilities.LIBERO, 530, 80, 116, 75, 65, 75, 119, 45, 50, 265, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.FIRE, null, 27, 999.9, Abilities.LIBERO, Abilities.LIBERO, Abilities.LIBERO, 630, 100, 146, 80, 90, 80, 134, 45, 50, 265), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.FIRE, null, 27, 999.9, Abilities.LIBERO, Abilities.NONE, Abilities.LIBERO, 630, 100, 146, 80, 90, 80, 134, 45, 50, 265), ), new PokemonSpecies(Species.SOBBLE, 8, false, false, false, "Water Lizard Pokémon", Type.WATER, null, 0.3, 4, Abilities.TORRENT, Abilities.NONE, Abilities.SNIPER, 310, 50, 40, 40, 70, 40, 70, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.DRIZZILE, 8, false, false, false, "Water Lizard Pokémon", Type.WATER, null, 0.7, 11.5, Abilities.TORRENT, Abilities.NONE, Abilities.SNIPER, 420, 65, 60, 55, 95, 55, 90, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.INTELEON, 8, false, false, false, "Secret Agent Pokémon", Type.WATER, null, 1.9, 45.2, Abilities.TORRENT, Abilities.NONE, Abilities.SNIPER, 530, 70, 85, 65, 125, 65, 120, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, new PokemonForm("Normal", "", Type.WATER, null, 1.9, 45.2, Abilities.TORRENT, Abilities.NONE, Abilities.SNIPER, 530, 70, 85, 65, 125, 65, 120, 45, 50, 265, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.WATER, null, 40, 999.9, Abilities.SNIPER, Abilities.SNIPER, Abilities.SNIPER, 630, 95, 97, 77, 147, 77, 137, 45, 50, 265), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.WATER, null, 40, 999.9, Abilities.SNIPER, Abilities.NONE, Abilities.SNIPER, 630, 95, 97, 77, 147, 77, 137, 45, 50, 265), ), new PokemonSpecies(Species.SKWOVET, 8, false, false, false, "Cheeky Pokémon", Type.NORMAL, null, 0.3, 2.5, Abilities.CHEEK_POUCH, Abilities.NONE, Abilities.GLUTTONY, 275, 70, 55, 55, 35, 35, 25, 255, 50, 55, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.GREEDENT, 8, false, false, false, "Greedy Pokémon", Type.NORMAL, null, 0.6, 6, Abilities.CHEEK_POUCH, Abilities.NONE, Abilities.GLUTTONY, 460, 120, 95, 95, 55, 75, 20, 90, 50, 161, GrowthRate.MEDIUM_FAST, 50, false), @@ -2422,7 +2422,7 @@ export function initSpecies() { new PokemonForm("Ruby Swirl", "ruby-swirl", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), new PokemonForm("Caramel Swirl", "caramel-swirl", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), new PokemonForm("Rainbow Swirl", "rainbow-swirl", Type.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.FAIRY, null, 30, 999.9, Abilities.MISTY_SURGE, Abilities.MISTY_SURGE, Abilities.MISTY_SURGE, 595, 135, 60, 75, 130, 131, 64, 100, 50, 173), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.FAIRY, null, 30, 999.9, Abilities.MISTY_SURGE, Abilities.NONE, Abilities.MISTY_SURGE, 595, 135, 60, 75, 130, 131, 64, 100, 50, 173), ), new PokemonSpecies(Species.FALINKS, 8, false, false, false, "Formation Pokémon", Type.FIGHTING, null, 3, 62, Abilities.BATTLE_ARMOR, Abilities.NONE, Abilities.DEFIANT, 470, 65, 100, 100, 70, 60, 75, 45, 50, 165, GrowthRate.MEDIUM_FAST, null, false), new PokemonSpecies(Species.PINCURCHIN, 8, false, false, false, "Sea Urchin Pokémon", Type.ELECTRIC, null, 0.3, 1, Abilities.LIGHTNING_ROD, Abilities.NONE, Abilities.ELECTRIC_SURGE, 435, 48, 101, 95, 91, 85, 15, 75, 50, 152, GrowthRate.MEDIUM_FAST, 50, false), @@ -2444,7 +2444,7 @@ export function initSpecies() { new PokemonSpecies(Species.CUFANT, 8, false, false, false, "Copperderm Pokémon", Type.STEEL, null, 1.2, 100, Abilities.SHEER_FORCE, Abilities.NONE, Abilities.HEAVY_METAL, 330, 72, 80, 49, 40, 49, 40, 190, 50, 66, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.COPPERAJAH, 8, false, false, false, "Copperderm Pokémon", Type.STEEL, null, 3, 650, Abilities.SHEER_FORCE, Abilities.NONE, Abilities.HEAVY_METAL, 500, 122, 130, 69, 80, 69, 30, 90, 50, 175, GrowthRate.MEDIUM_FAST, 50, false, true, new PokemonForm("Normal", "", Type.STEEL, null, 3, 650, Abilities.SHEER_FORCE, Abilities.NONE, Abilities.HEAVY_METAL, 500, 122, 130, 69, 80, 69, 30, 90, 50, 175, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.STEEL, Type.GROUND, 23, 999.9, Abilities.MOLD_BREAKER, Abilities.MOLD_BREAKER, Abilities.MOLD_BREAKER, 600, 167, 155, 89, 80, 89, 20, 90, 50, 175), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.STEEL, Type.GROUND, 23, 999.9, Abilities.MOLD_BREAKER, Abilities.NONE, Abilities.MOLD_BREAKER, 600, 167, 155, 89, 80, 89, 20, 90, 50, 175), ), new PokemonSpecies(Species.DRACOZOLT, 8, false, false, false, "Fossil Pokémon", Type.ELECTRIC, Type.DRAGON, 1.8, 190, Abilities.VOLT_ABSORB, Abilities.HUSTLE, Abilities.SAND_RUSH, 505, 90, 100, 90, 80, 70, 75, 45, 50, 177, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.ARCTOZOLT, 8, false, false, false, "Fossil Pokémon", Type.ELECTRIC, Type.ICE, 2.3, 150, Abilities.VOLT_ABSORB, Abilities.STATIC, Abilities.SLUSH_RUSH, 505, 90, 100, 90, 90, 80, 55, 45, 50, 177, GrowthRate.SLOW, null, false), From 391f38c3c8bd6106f7c38f4a451883add3bac310 Mon Sep 17 00:00:00 2001 From: Tempoanon <163687446+Tempo-anon@users.noreply.github.com> Date: Sun, 13 Oct 2024 00:45:38 -0400 Subject: [PATCH 073/153] [Documentation] Document all (P) abilities (#4649) * Document partial abilities * Fix typo * Address comments * Fix typo Terapagos -> Ogerpon --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/data/ability.ts | 41 +++++++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/src/data/ability.ts b/src/data/ability.ts index 6a391818866..07fd48e2f91 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -118,6 +118,14 @@ export class Ability implements Localizable { this.nameAppend += " (N)"; return this; } + + /** + * Internal flag used for developers to document edge cases. When using this, please be sure to document the edge case. + * @returns the ability + */ + edgeCase(): this { + return this; + } } type AbAttrApplyFunc = (attr: TAttr, passive: boolean) => boolean | Promise; @@ -4906,7 +4914,7 @@ export function initAbilities() { .ignorable(), new Ability(Abilities.SHIELD_DUST, 3) .attr(IgnoreMoveEffectsAbAttr) - .partial(), + .edgeCase(), // Does not work with secret power (unimplemented) new Ability(Abilities.OWN_TEMPO, 3) .attr(BattlerTagImmunityAbAttr, BattlerTagType.CONFUSED) .attr(IntimidateImmunityAbAttr) @@ -4951,7 +4959,7 @@ export function initAbilities() { .ignorable(), new Ability(Abilities.SERENE_GRACE, 3) .attr(MoveEffectChanceMultiplierAbAttr, 2) - .partial(), + .edgeCase(), // does not work with secret power (unimplemented) new Ability(Abilities.SWIFT_SWIM, 3) .attr(StatMultiplierAbAttr, Stat.SPD, 2) .condition(getWeatherCondition(WeatherType.RAIN, WeatherType.HEAVY_RAIN)), @@ -5235,7 +5243,8 @@ export function initAbilities() { new Ability(Abilities.SHEER_FORCE, 5) .attr(MovePowerBoostAbAttr, (user, target, move) => move.chance >= 1, 5461 / 4096) .attr(MoveEffectChanceMultiplierAbAttr, 0) - .partial(), + .edgeCase() // Should disable shell bell and Meloetta's relic song transformation + .edgeCase(), // Should disable life orb, eject button, red card, kee/maranga berry if they get implemented new Ability(Abilities.CONTRARY, 5) .attr(StatStageChangeMultiplierAbAttr, -1) .ignorable(), @@ -5278,7 +5287,7 @@ export function initAbilities() { /** Rate is doubled when under sun {@link https://dex.pokemonshowdown.com/abilities/harvest} */ (pokemon) => 0.5 * (getWeatherCondition(WeatherType.SUNNY, WeatherType.HARSH_SUN)(pokemon) ? 2 : 1) ) - .partial(), + .edgeCase(), // Cannot recover berries used up by fling or natural gift (unimplemented) new Ability(Abilities.TELEPATHY, 5) .attr(MoveImmunityAbAttr, (pokemon, attacker, move) => pokemon.getAlly() === attacker && move instanceof AttackMove) .ignorable(), @@ -5357,7 +5366,7 @@ export function initAbilities() { .bypassFaint(), new Ability(Abilities.VICTORY_STAR, 5) .attr(StatMultiplierAbAttr, Stat.ACC, 1.1) - .partial(), + .partial(), // Does not boost ally's accuracy new Ability(Abilities.TURBOBLAZE, 5) .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonTurboblaze", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })) .attr(MoveAbilityBypassAbAttr), @@ -5468,7 +5477,7 @@ export function initAbilities() { .attr(UnsuppressableAbilityAbAttr) .attr(NoFusionAbilityAbAttr) .bypassFaint() - .partial(), + .partial(), // Meteor form should protect against status effects and yawn new Ability(Abilities.STAKEOUT, 7) .attr(MovePowerBoostAbAttr, (user, target, move) => user?.scene.currentBattle.turnCommands[target?.getBattlerIndex() ?? BattlerIndex.ATTACKER]?.command === Command.POKEMON, 2), new Ability(Abilities.WATER_BUBBLE, 7) @@ -5536,9 +5545,9 @@ export function initAbilities() { .attr(NoFusionAbilityAbAttr) .bypassFaint() .partial(), - new Ability(Abilities.CORROSION, 7) // TODO: Test Corrosion against Magic Bounce once it is implemented + new Ability(Abilities.CORROSION, 7) .attr(IgnoreTypeStatusEffectImmunityAbAttr, [ StatusEffect.POISON, StatusEffect.TOXIC ], [ Type.STEEL, Type.POISON ]) - .partial(), + .edgeCase(), // Should interact correctly with magic coat/bounce (not yet implemented), fling with toxic orb (not implemented yet), and synchronize (not fully implemented yet) new Ability(Abilities.COMATOSE, 7) .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) @@ -5693,7 +5702,7 @@ export function initAbilities() { new Ability(Abilities.WANDERING_SPIRIT, 8) .attr(PostDefendAbilitySwapAbAttr) .bypassFaint() - .partial(), + .edgeCase(), // interacts incorrectly with rock head. It's meant to switch abilities before recoil would apply so that a pokemon with rock head would lose rock head first and still take the recoil new Ability(Abilities.GORILLA_TACTICS, 8) .attr(GorillaTacticsAbAttr), new Ability(Abilities.NEUTRALIZING_GAS, 8) @@ -5702,7 +5711,7 @@ export function initAbilities() { .attr(UnswappableAbilityAbAttr) .attr(NoTransformAbilityAbAttr) .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonNeutralizingGas", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })) - .partial(), + .partial(), // A bunch of weird interactions with other abilities being suppressed then unsuppressed new Ability(Abilities.PASTEL_VEIL, 8) .attr(PostSummonUserFieldRemoveStatusEffectAbAttr, StatusEffect.POISON, StatusEffect.TOXIC) .attr(UserFieldStatusEffectImmunityAbAttr, StatusEffect.POISON, StatusEffect.TOXIC) @@ -5807,7 +5816,7 @@ export function initAbilities() { new Ability(Abilities.GOOD_AS_GOLD, 9) .attr(MoveImmunityAbAttr, (pokemon, attacker, move) => pokemon !== attacker && move.category === MoveCategory.STATUS) .ignorable() - .partial(), + .partial(), // Lots of weird interactions with moves and abilities such as negating status moves that target the field new Ability(Abilities.VESSEL_OF_RUIN, 9) .attr(FieldMultiplyStatAbAttr, Stat.SPATK, 0.75) .attr(PostSummonMessageAbAttr, (user) => i18next.t("abilityTriggers:postSummonVesselOfRuin", { pokemonNameWithAffix: getPokemonNameWithAffix(user), statName: i18next.t(getStatKey(Stat.SPATK)) })) @@ -5840,7 +5849,7 @@ export function initAbilities() { .attr(MovePowerBoostAbAttr, (user, target, move) => move.hasFlag(MoveFlags.SLICING_MOVE), 1.5), new Ability(Abilities.SUPREME_OVERLORD, 9) .attr(VariableMovePowerBoostAbAttr, (user, target, move) => 1 + 0.1 * Math.min(user.isPlayer() ? user.scene.currentBattle.playerFaints : user.scene.currentBattle.enemyFaints, 5)) - .partial(), + .partial(), // Counter resets every wave new Ability(Abilities.COSTAR, 9) .attr(PostSummonCopyAllyStatsAbAttr), new Ability(Abilities.TOXIC_DEBRIS, 9) @@ -5873,25 +5882,25 @@ export function initAbilities() { .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) .attr(NoTransformAbilityAbAttr) - .partial(), + .partial(), // Ogerpon tera interactions new Ability(Abilities.EMBODY_ASPECT_WELLSPRING, 9) .attr(PostBattleInitStatStageChangeAbAttr, [ Stat.SPDEF ], 1, true) .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) .attr(NoTransformAbilityAbAttr) - .partial(), + .partial(), // Ogerpon tera interactions new Ability(Abilities.EMBODY_ASPECT_HEARTHFLAME, 9) .attr(PostBattleInitStatStageChangeAbAttr, [ Stat.ATK ], 1, true) .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) .attr(NoTransformAbilityAbAttr) - .partial(), + .partial(), // Ogerpon tera interactions new Ability(Abilities.EMBODY_ASPECT_CORNERSTONE, 9) .attr(PostBattleInitStatStageChangeAbAttr, [ Stat.DEF ], 1, true) .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) .attr(NoTransformAbilityAbAttr) - .partial(), + .partial(), // Ogerpon tera interactions new Ability(Abilities.TERA_SHIFT, 9) .attr(PostSummonFormChangeAbAttr, p => p.getFormKey() ? 0 : 1) .attr(UncopiableAbilityAbAttr) From 470f9e4e19276ec341736df795949743acbcee71 Mon Sep 17 00:00:00 2001 From: innerthunder <168692175+innerthunder@users.noreply.github.com> Date: Sat, 12 Oct 2024 21:46:41 -0700 Subject: [PATCH 074/153] [P3] Fix Substitute visual error on wave transition (#4648) --- src/field/pokemon.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index c495e0833cd..136c1eb1685 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -749,9 +749,16 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const relX = newOffset[0] - initialOffset[0]; const relY = newOffset[1] - initialOffset[1]; + const subTag = this.getTag(SubstituteTag); + if (duration) { + // TODO: can this use stricter typing? + const targets: any[] = [ this ]; + if (subTag?.sprite) { + targets.push(subTag.sprite); + } this.scene.tweens.add({ - targets: this, + targets: targets, x: (_target, _key, value: number) => value + relX, y: (_target, _key, value: number) => value + relY, duration: duration, @@ -761,6 +768,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } else { this.x += relX; this.y += relY; + if (subTag?.sprite) { + subTag.sprite.x += relX; + subTag.sprite.y += relY; + } } }); } From 8a355d500a27ca8c74482665a8680528007ab727 Mon Sep 17 00:00:00 2001 From: Mumble <171087428+frutescens@users.noreply.github.com> Date: Sun, 13 Oct 2024 00:30:04 -0700 Subject: [PATCH 075/153] [Bug] Move Restriction Battler Tag bugs (#4536) * Added fixes * Revert "Added fixes" This reverts commit 3feccd792ddef0b32ddc40782b60f23f952cad23. * Added loadTag functions * Fixes * typeodcs * Torment * yawn * hsldklahdlhalhdlahldhlah * Imprison Fixes * Fixed imprison not interrupting PRE_MOVE * just kidding * Apply suggestions from code review Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Fixing what broke * added scp[es * missed a scope * Update src/data/battler-tags.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * good tp go * merge * battler tags * Apply suggestions from code review * Changed function names * publics --------- Co-authored-by: frutescens Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/data/arena-tag.ts | 68 ++++++++++++++++++++------------- src/data/battler-tags.ts | 75 ++++++++++++++++++++++++------------- src/data/move.ts | 3 +- src/field/pokemon.ts | 8 ++-- src/phases/command-phase.ts | 4 +- 5 files changed, 99 insertions(+), 59 deletions(-) diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index 11d28ab7e25..71cf11fa06f 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -4,7 +4,7 @@ import { Type } from "#app/data/type"; import * as Utils from "#app/utils"; import { MoveCategory, allMoves, MoveTarget, IncrementMovePriorityAttr, applyMoveAttrs } from "#app/data/move"; import { getPokemonNameWithAffix } from "#app/messages"; -import Pokemon, { HitResult, PlayerPokemon, PokemonMove, EnemyPokemon } from "#app/field/pokemon"; +import Pokemon, { HitResult, PokemonMove } from "#app/field/pokemon"; import { StatusEffect } from "#app/data/status-effect"; import { BattlerIndex } from "#app/battle"; import { BlockNonDirectDamageAbAttr, ChangeMovePriorityAbAttr, ProtectStatAbAttr, applyAbAttrs } from "#app/data/ability"; @@ -71,6 +71,32 @@ export abstract class ArenaTag { this.sourceId = source.sourceId; this.side = source.side; } + + /** + * Helper function that retrieves the source Pokemon + * @param scene medium to retrieve the source Pokemon + * @returns The source {@linkcode Pokemon} or `null` if none is found + */ + public getSourcePokemon(scene: BattleScene): Pokemon | null { + return this.sourceId ? scene.getPokemonById(this.sourceId) : null; + } + + /** + * Helper function that retrieves the Pokemon affected + * @param scene - medium to retrieve the involved Pokemon + * @returns list of PlayerPokemon or EnemyPokemon on the field + */ + public getAffectedPokemon(scene: BattleScene): Pokemon[] { + switch (this.side) { + case ArenaTagSide.PLAYER: + return scene.getPlayerField() ?? []; + case ArenaTagSide.ENEMY: + return scene.getEnemyField() ?? []; + case ArenaTagSide.BOTH: + default: + return scene.getField(true) ?? []; + } + } } /** @@ -978,36 +1004,24 @@ class NoneTag extends ArenaTag { * Imprison will apply to any opposing Pokemon that switch onto the field as well. */ class ImprisonTag extends ArenaTrapTag { - private source: Pokemon; - constructor(sourceId: number, side: ArenaTagSide) { super(ArenaTagType.IMPRISON, Moves.IMPRISON, sourceId, side, 1); } - /** - * Helper function that retrieves the Pokemon affected - * @param {BattleScene} scene medium to retrieve the involved Pokemon - * @returns list of PlayerPokemon or EnemyPokemon on the field - */ - private retrieveField(scene: BattleScene): PlayerPokemon[] | EnemyPokemon[] { - if (!this.source.isPlayer()) { - return scene.getPlayerField() ?? []; - } - return scene.getEnemyField() ?? []; - } - /** * This function applies the effects of Imprison to the opposing Pokemon already present on the field. * @param arena */ override onAdd({ scene }: Arena) { - this.source = scene.getPokemonById(this.sourceId!)!; - if (this.source) { - const party = this.retrieveField(scene); - party?.forEach((p: PlayerPokemon | EnemyPokemon ) => { - p.addTag(BattlerTagType.IMPRISON, 1, Moves.IMPRISON, this.sourceId); + const source = this.getSourcePokemon(scene); + if (source) { + const party = this.getAffectedPokemon(scene); + party?.forEach((p: Pokemon ) => { + if (p.isAllowedInBattle()) { + p.addTag(BattlerTagType.IMPRISON, 1, Moves.IMPRISON, this.sourceId); + } }); - scene.queueMessage(i18next.t("battlerTags:imprisonOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(this.source) })); + scene.queueMessage(i18next.t("battlerTags:imprisonOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(source) })); } } @@ -1016,8 +1030,9 @@ class ImprisonTag extends ArenaTrapTag { * @param _arena * @returns `true` if the source of the tag is still active on the field | `false` if not */ - override lapse(_arena: Arena): boolean { - return this.source.isActive(true); + override lapse({ scene }: Arena): boolean { + const source = this.getSourcePokemon(scene); + return source ? source.isActive(true) : false; } /** @@ -1026,7 +1041,8 @@ class ImprisonTag extends ArenaTrapTag { * @returns `true` */ override activateTrap(pokemon: Pokemon): boolean { - if (this.source.isActive(true)) { + const source = this.getSourcePokemon(pokemon.scene); + if (source && source.isActive(true) && pokemon.isAllowedInBattle()) { pokemon.addTag(BattlerTagType.IMPRISON, 1, Moves.IMPRISON, this.sourceId); } return true; @@ -1037,8 +1053,8 @@ class ImprisonTag extends ArenaTrapTag { * @param arena */ override onRemove({ scene }: Arena): void { - const party = this.retrieveField(scene); - party?.forEach((p: PlayerPokemon | EnemyPokemon) => { + const party = this.getAffectedPokemon(scene); + party?.forEach((p: Pokemon) => { p.removeTag(BattlerTagType.IMPRISON); }); } diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 18f03ada941..a5016746013 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -23,6 +23,7 @@ import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; import { ShowAbilityPhase } from "#app/phases/show-ability-phase"; import { StatStageChangePhase, StatStageChangeCallback } from "#app/phases/stat-stage-change-phase"; import { PokemonAnimType } from "#app/enums/pokemon-anim-type"; +import BattleScene from "#app/battle-scene"; export enum BattlerTagLapseType { FAINT, @@ -90,6 +91,15 @@ export class BattlerTag { this.sourceMove = source.sourceMove; this.sourceId = source.sourceId; } + + /** + * Helper function that retrieves the source Pokemon object + * @param scene medium to retrieve the source Pokemon + * @returns The source {@linkcode Pokemon} or `null` if none is found + */ + public getSourcePokemon(scene: BattleScene): Pokemon | null { + return this.sourceId ? scene.getPokemonById(this.sourceId) : null; + } } export interface WeatherBattlerTag { @@ -120,7 +130,7 @@ export abstract class MoveRestrictionBattlerTag extends BattlerTag { const phase = pokemon.scene.getCurrentPhase() as MovePhase; const move = phase.move; - if (this.isMoveRestricted(move.moveId)) { + if (this.isMoveRestricted(move.moveId, pokemon)) { if (this.interruptedText(pokemon, move.moveId)) { pokemon.scene.queueMessage(this.interruptedText(pokemon, move.moveId)); } @@ -136,10 +146,11 @@ export abstract class MoveRestrictionBattlerTag extends BattlerTag { /** * Gets whether this tag is restricting a move. * - * @param {Moves} move {@linkcode Moves} ID to check restriction for. - * @returns {boolean} `true` if the move is restricted by this tag, otherwise `false`. + * @param move - {@linkcode Moves} ID to check restriction for. + * @param user - The {@linkcode Pokemon} involved + * @returns `true` if the move is restricted by this tag, otherwise `false`. */ - abstract isMoveRestricted(move: Moves): boolean; + public abstract isMoveRestricted(move: Moves, user?: Pokemon): boolean; /** * Checks if this tag is restricting a move based on a user's decisions during the target selection phase @@ -327,6 +338,16 @@ export class GorillaTacticsTag extends MoveRestrictionBattlerTag { pokemon.setStat(Stat.ATK, pokemon.getStat(Stat.ATK, false) * 1.5, false); } + /** + * Loads the Gorilla Tactics Battler Tag along with its unique class variable moveId + * @override + * @param source Gorilla Tactics' {@linkcode BattlerTag} information + */ + public override loadTag(source: BattlerTag | any): void { + super.loadTag(source); + this.moveId = source.moveId; + } + /** * * @override @@ -2510,8 +2531,6 @@ export class MysteryEncounterPostSummonTag extends BattlerTag { * Torment does not interrupt the move if the move is performed consecutively in the same turn and right after Torment is applied */ export class TormentTag extends MoveRestrictionBattlerTag { - private target: Pokemon; - constructor(sourceId: number) { super(BattlerTagType.TORMENT, BattlerTagLapseType.AFTER_MOVE, 1, Moves.TORMENT, sourceId); } @@ -2523,7 +2542,6 @@ export class TormentTag extends MoveRestrictionBattlerTag { */ override onAdd(pokemon: Pokemon) { super.onAdd(pokemon); - this.target = pokemon; pokemon.scene.queueMessage(i18next.t("battlerTags:tormentOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), 1500); } @@ -2542,15 +2560,18 @@ export class TormentTag extends MoveRestrictionBattlerTag { * @param {Moves} move the move under investigation * @returns `true` if there is valid consecutive usage | `false` if the moves are different from each other */ - override isMoveRestricted(move: Moves): boolean { - const lastMove = this.target.getLastXMoves(1)[0]; + public override isMoveRestricted(move: Moves, user: Pokemon): boolean { + if (!user) { + return false; + } + const lastMove = user.getLastXMoves(1)[0]; if ( !lastMove ) { return false; } // This checks for locking / momentum moves like Rollout and Hydro Cannon + if the user is under the influence of BattlerTagType.FRENZY // Because Uproar's unique behavior is not implemented, it does not check for Uproar. Torment has been marked as partial in moves.ts const moveObj = allMoves[lastMove.move]; - const isUnaffected = moveObj.hasAttr(ConsecutiveUseDoublePowerAttr) || this.target.getTag(BattlerTagType.FRENZY) || moveObj.hasAttr(ChargeAttr); + const isUnaffected = moveObj.hasAttr(ConsecutiveUseDoublePowerAttr) || user.getTag(BattlerTagType.FRENZY) || moveObj.hasAttr(ChargeAttr); const validLastMoveResult = (lastMove.result === MoveResult.SUCCESS) || (lastMove.result === MoveResult.MISS); if (lastMove.move === move && validLastMoveResult && lastMove.move !== Moves.STRUGGLE && !isUnaffected) { return true; @@ -2602,37 +2623,39 @@ export class TauntTag extends MoveRestrictionBattlerTag { * The tag is only removed when the source-user is removed from the field. */ export class ImprisonTag extends MoveRestrictionBattlerTag { - private source: Pokemon | null; - constructor(sourceId: number) { super(BattlerTagType.IMPRISON, [ BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.AFTER_MOVE ], 1, Moves.IMPRISON, sourceId); } - override onAdd(pokemon: Pokemon) { - if (this.sourceId) { - this.source = pokemon.scene.getPokemonById(this.sourceId); - } - } - /** * Checks if the source of Imprison is still active - * @param _pokemon - * @param _lapseType + * @override + * @param pokemon The pokemon this tag is attached to * @returns `true` if the source is still active */ - override lapse(_pokemon: Pokemon, _lapseType: BattlerTagLapseType): boolean { - return this.source?.isActive(true) ?? false; + public override lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { + const source = this.getSourcePokemon(pokemon.scene); + if (source) { + if (lapseType === BattlerTagLapseType.PRE_MOVE) { + return super.lapse(pokemon, lapseType) && source.isActive(true); + } else { + return source.isActive(true); + } + } + return false; } /** * Checks if the source of the tag has the parameter move in its moveset and that the source is still active + * @override * @param {Moves} move the move under investigation * @returns `false` if either condition is not met */ - override isMoveRestricted(move: Moves): boolean { - if (this.source) { - const sourceMoveset = this.source.getMoveset().map(m => m!.moveId); - return sourceMoveset?.includes(move) && this.source.isActive(true); + public override isMoveRestricted(move: Moves, user: Pokemon): boolean { + const source = this.getSourcePokemon(user.scene); + if (source) { + const sourceMoveset = source.getMoveset().map(m => m!.moveId); + return sourceMoveset?.includes(move) && source.isActive(true); } return false; } diff --git a/src/data/move.ts b/src/data/move.ts index 8e9977337cc..d4f3b2ce3ee 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -7883,7 +7883,8 @@ export function initMoves() { .attr(SwitchAbilitiesAttr), new StatusMove(Moves.IMPRISON, Type.PSYCHIC, 100, 10, -1, 0, 3) .ignoresSubstitute() - .attr(AddArenaTagAttr, ArenaTagType.IMPRISON, 1, true, false), + .attr(AddArenaTagAttr, ArenaTagType.IMPRISON, 1, true, false) + .target(MoveTarget.ENEMY_SIDE), new SelfStatusMove(Moves.REFRESH, Type.NORMAL, -1, 20, -1, 0, 3) .attr(HealStatusEffectAttr, true, StatusEffect.PARALYSIS, StatusEffect.POISON, StatusEffect.TOXIC, StatusEffect.BURN) .condition((user, target, move) => !!user.status && (user.status.effect === StatusEffect.PARALYSIS || user.status.effect === StatusEffect.POISON || user.status.effect === StatusEffect.TOXIC || user.status.effect === StatusEffect.BURN)), diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 136c1eb1685..9ae83753e62 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -3062,8 +3062,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * * @see {@linkcode MoveRestrictionBattlerTag} */ - isMoveRestricted(moveId: Moves): boolean { - return this.getRestrictingTag(moveId) !== null; + public isMoveRestricted(moveId: Moves, pokemon?: Pokemon): boolean { + return this.getRestrictingTag(moveId, pokemon) !== null; } /** @@ -3096,7 +3096,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { */ getRestrictingTag(moveId: Moves, user?: Pokemon, target?: Pokemon): MoveRestrictionBattlerTag | null { for (const tag of this.findTags(t => t instanceof MoveRestrictionBattlerTag)) { - if ((tag as MoveRestrictionBattlerTag).isMoveRestricted(moveId)) { + if ((tag as MoveRestrictionBattlerTag).isMoveRestricted(moveId, user)) { return tag as MoveRestrictionBattlerTag; } else if (user && target && (tag as MoveRestrictionBattlerTag).isMoveTargetRestricted(moveId, user, target)) { return tag as MoveRestrictionBattlerTag; @@ -5139,7 +5139,7 @@ export class PokemonMove { * @returns `true` if the move can be selected and used by the Pokemon, otherwise `false`. */ isUsable(pokemon: Pokemon, ignorePp: boolean = false, ignoreRestrictionTags: boolean = false): boolean { - if (this.moveId && !ignoreRestrictionTags && pokemon.isMoveRestricted(this.moveId)) { + if (this.moveId && !ignoreRestrictionTags && pokemon.isMoveRestricted(this.moveId, pokemon)) { return false; } diff --git a/src/phases/command-phase.ts b/src/phases/command-phase.ts index e85c66543ac..cf66631bd96 100644 --- a/src/phases/command-phase.ts +++ b/src/phases/command-phase.ts @@ -114,8 +114,8 @@ export class CommandPhase extends FieldPhase { // Decides between a Disabled, Not Implemented, or No PP translation message const errorMessage = - playerPokemon.isMoveRestricted(move.moveId) - ? playerPokemon.getRestrictingTag(move.moveId)!.selectionDeniedText(playerPokemon, move.moveId) + playerPokemon.isMoveRestricted(move.moveId, playerPokemon) + ? playerPokemon.getRestrictingTag(move.moveId, playerPokemon)!.selectionDeniedText(playerPokemon, move.moveId) : move.getName().endsWith(" (N)") ? "battle:moveNotImplemented" : "battle:moveNoPP"; const moveName = move.getName().replace(" (N)", ""); // Trims off the indicator From e340abe75d2d27b17922cb12e90bf19a9b9a0f70 Mon Sep 17 00:00:00 2001 From: PigeonBar <56974298+PigeonBar@users.noreply.github.com> Date: Sun, 13 Oct 2024 20:08:47 -0400 Subject: [PATCH 076/153] [P1 Bug] Fix softlock when a phazing attack activates a reviver seed (#4654) * [P1 Bug] Fix softlock when a phazing attack activates a reviver seed * Polishing tests * Change approach to respect Parting Shot's targeting * Tests: Added checks for correct number of Pokemon on field --- src/data/move.ts | 13 +++---- src/test/moves/dragon_tail.test.ts | 54 ++++++++++++++++++++++++++++++ src/test/moves/u_turn.test.ts | 19 +++++++++++ 3 files changed, 80 insertions(+), 6 deletions(-) diff --git a/src/data/move.ts b/src/data/move.ts index d4f3b2ce3ee..a77e8096672 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -5484,37 +5484,38 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { */ const switchOutTarget = this.selfSwitch ? user : target; if (switchOutTarget instanceof PlayerPokemon) { + // Switch out logic for the player's Pokemon if (switchOutTarget.scene.getParty().filter((p) => p.isAllowedInBattle() && !p.isOnField()).length < 1) { return false; } - switchOutTarget.leaveField(this.switchType === SwitchType.SWITCH); if (switchOutTarget.hp > 0) { + switchOutTarget.leaveField(this.switchType === SwitchType.SWITCH); user.scene.prependToPhase(new SwitchPhase(user.scene, this.switchType, switchOutTarget.getFieldIndex(), true, true), MoveEndPhase); return true; } return false; } else if (user.scene.currentBattle.battleType !== BattleType.WILD) { + // Switch out logic for trainer battles if (switchOutTarget.scene.getEnemyParty().filter((p) => p.isAllowedInBattle() && !p.isOnField()).length < 1) { return false; } - // Switch out logic for trainer battles - switchOutTarget.leaveField(this.switchType === SwitchType.SWITCH); if (switchOutTarget.hp > 0) { // for opponent switching out + switchOutTarget.leaveField(this.switchType === SwitchType.SWITCH); user.scene.prependToPhase(new SwitchSummonPhase(user.scene, this.switchType, switchOutTarget.getFieldIndex(), (user.scene.currentBattle.trainer ? user.scene.currentBattle.trainer.getNextSummonIndex((switchOutTarget as EnemyPokemon).trainerSlot) : 0), false, false), MoveEndPhase); } } else { + // Switch out logic for everything else (eg: WILD battles) if (user.scene.currentBattle.waveIndex % 10 === 0) { return false; } - // Switch out logic for everything else (eg: WILD battles) - switchOutTarget.leaveField(false); - if (switchOutTarget.hp) { + if (switchOutTarget.hp > 0) { + switchOutTarget.leaveField(false); user.scene.queueMessage(i18next.t("moveTriggers:fled", { pokemonName: getPokemonNameWithAffix(switchOutTarget) }), null, true, 500); // in double battles redirect potential moves off fled pokemon diff --git a/src/test/moves/dragon_tail.test.ts b/src/test/moves/dragon_tail.test.ts index eb02b09fbb4..cf801eb42c1 100644 --- a/src/test/moves/dragon_tail.test.ts +++ b/src/test/moves/dragon_tail.test.ts @@ -139,4 +139,58 @@ describe("Moves - Dragon Tail", () => { expect(enemy.isFullHp()).toBe(false); }); + + it("should force a switch upon fainting an opponent normally", async () => { + game.override.startingWave(5) + .startingLevel(1000); // To make sure Dragon Tail KO's the opponent + await game.classicMode.startBattle([ Species.DRATINI ]); + + game.move.select(Moves.DRAGON_TAIL); + + await game.toNextTurn(); + + // Make sure the enemy switched to a healthy Pokemon + const enemy = game.scene.getEnemyPokemon()!; + expect(enemy).toBeDefined(); + expect(enemy.isFullHp()).toBe(true); + + // Make sure the enemy has a fainted Pokemon in their party and not on the field + const faintedEnemy = game.scene.getEnemyParty().find(p => !p.isAllowedInBattle()); + expect(faintedEnemy).toBeDefined(); + expect(game.scene.getEnemyField().length).toBe(1); + }); + + it("should not cause a softlock when activating an opponent trainer's reviver seed", async () => { + game.override.startingWave(5) + .enemyHeldItems([{ name: "REVIVER_SEED" }]) + .startingLevel(1000); // To make sure Dragon Tail KO's the opponent + await game.classicMode.startBattle([ Species.DRATINI ]); + + game.move.select(Moves.DRAGON_TAIL); + + await game.toNextTurn(); + + // Make sure the enemy field is not empty and has a revived Pokemon + const enemy = game.scene.getEnemyPokemon()!; + expect(enemy).toBeDefined(); + expect(enemy.hp).toBe(Math.floor(enemy.getMaxHp() / 2)); + expect(game.scene.getEnemyField().length).toBe(1); + }); + + it("should not cause a softlock when activating a player's reviver seed", async () => { + game.override.startingHeldItems([{ name: "REVIVER_SEED" }]) + .enemyMoveset(Moves.DRAGON_TAIL) + .enemyLevel(1000); // To make sure Dragon Tail KO's the player + await game.classicMode.startBattle([ Species.DRATINI, Species.BULBASAUR ]); + + game.move.select(Moves.SPLASH); + + await game.toNextTurn(); + + // Make sure the player's field is not empty and has a revived Pokemon + const dratini = game.scene.getPlayerPokemon()!; + expect(dratini).toBeDefined(); + expect(dratini.hp).toBe(Math.floor(dratini.getMaxHp() / 2)); + expect(game.scene.getPlayerField().length).toBe(1); + }); }); diff --git a/src/test/moves/u_turn.test.ts b/src/test/moves/u_turn.test.ts index 17e02cb50ef..b995c20f503 100644 --- a/src/test/moves/u_turn.test.ts +++ b/src/test/moves/u_turn.test.ts @@ -96,4 +96,23 @@ describe("Moves - U-turn", () => { expect(game.scene.getEnemyPokemon()!.battleData.abilityRevealed).toBe(true); // proxy for asserting ability activated expect(game.phaseInterceptor.log).not.toContain("SwitchSummonPhase"); }, 20000); + + it("still forces a switch if u-turn KO's the opponent", async () => { + game.override.startingLevel(1000); // Ensure that U-Turn KO's the opponent + await game.classicMode.startBattle([ + Species.RAICHU, + Species.SHUCKLE + ]); + const enemy = game.scene.getEnemyPokemon()!; + + // KO the opponent with U-Turn + game.move.select(Moves.U_TURN); + game.doSelectPartyPokemon(1); + await game.phaseInterceptor.to(TurnEndPhase); + expect(enemy.isFainted()).toBe(true); + + // Check that U-Turn forced a switch + expect(game.phaseInterceptor.log).toContain("SwitchSummonPhase"); + expect(game.scene.getPlayerPokemon()!.species.speciesId).toBe(Species.SHUCKLE); + }); }); From 8981f0e7a8ee63743b60f1665967859940b1a4b8 Mon Sep 17 00:00:00 2001 From: Mumble <171087428+frutescens@users.noreply.github.com> Date: Sun, 13 Oct 2024 19:20:55 -0700 Subject: [PATCH 077/153] Trainer party de-duplication checks static pokemon too (#4585) Co-authored-by: frutescens Co-authored-by: innerthunder <168692175+innerthunder@users.noreply.github.com> --- src/field/trainer.ts | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/field/trainer.ts b/src/field/trainer.ts index 2ec9d07e474..5110787452f 100644 --- a/src/field/trainer.ts +++ b/src/field/trainer.ts @@ -383,7 +383,7 @@ export default class Trainer extends Phaser.GameObjects.Container { const battle = this.scene.currentBattle; const template = this.getPartyTemplate(); - let species: PokemonSpecies; + let baseSpecies: PokemonSpecies; if (this.config.speciesPools) { const tierValue = Utils.randSeedInt(512); let tier = tierValue >= 156 ? TrainerPoolTier.COMMON : tierValue >= 32 ? TrainerPoolTier.UNCOMMON : tierValue >= 6 ? TrainerPoolTier.RARE : tierValue >= 1 ? TrainerPoolTier.SUPER_RARE : TrainerPoolTier.ULTRA_RARE; @@ -393,17 +393,17 @@ export default class Trainer extends Phaser.GameObjects.Container { tier--; } const tierPool = this.config.speciesPools[tier]; - species = getPokemonSpecies(Utils.randSeedItem(tierPool)); + baseSpecies = getPokemonSpecies(Utils.randSeedItem(tierPool)); } else { - species = this.scene.randomSpecies(battle.waveIndex, level, false, this.config.speciesFilter); + baseSpecies = this.scene.randomSpecies(battle.waveIndex, level, false, this.config.speciesFilter); } - let ret = getPokemonSpecies(species.getTrainerSpeciesForLevel(level, true, strength, this.scene.currentBattle.waveIndex)); + let ret = getPokemonSpecies(baseSpecies.getTrainerSpeciesForLevel(level, true, strength, this.scene.currentBattle.waveIndex)); let retry = false; console.log(ret.getName()); - if (pokemonPrevolutions.hasOwnProperty(species.speciesId) && ret.speciesId !== species.speciesId) { + if (pokemonPrevolutions.hasOwnProperty(baseSpecies.speciesId) && ret.speciesId !== baseSpecies.speciesId) { retry = true; } else if (template.isBalanced(battle.enemyParty.length)) { const partyMemberTypes = battle.enemyParty.map(p => p.getTypes(true)).flat(); @@ -417,7 +417,7 @@ export default class Trainer extends Phaser.GameObjects.Container { console.log("Attempting reroll of species evolution to fit specialty type..."); let evoAttempt = 0; while (retry && evoAttempt++ < 10) { - ret = getPokemonSpecies(species.getTrainerSpeciesForLevel(level, true, strength, this.scene.currentBattle.waveIndex)); + ret = getPokemonSpecies(baseSpecies.getTrainerSpeciesForLevel(level, true, strength, this.scene.currentBattle.waveIndex)); console.log(ret.name); if (this.config.specialtyTypes.find(t => ret.isOfType(t))) { retry = false; @@ -426,7 +426,7 @@ export default class Trainer extends Phaser.GameObjects.Container { } // Prompts reroll of party member species if species already present in the enemy party - if (this.checkDuplicateSpecies(ret)) { + if (this.checkDuplicateSpecies(ret, baseSpecies)) { console.log("Duplicate species detected, prompting reroll..."); retry = true; } @@ -442,13 +442,16 @@ export default class Trainer extends Phaser.GameObjects.Container { /** * Checks if the enemy trainer already has the Pokemon species in their party * @param {PokemonSpecies} species {@linkcode PokemonSpecies} + * @param {PokemonSpecies} baseSpecies {@linkcode PokemonSpecies} - baseSpecies of the Pokemon if species is forced to evolve * @returns `true` if the species is already present in the party */ - checkDuplicateSpecies(species: PokemonSpecies): boolean { + checkDuplicateSpecies(species: PokemonSpecies, baseSpecies: PokemonSpecies): boolean { + const staticPartyPokemon = (signatureSpecies[TrainerType[this.config.trainerType]] ?? []).flat(1); + const currentPartySpecies = this.scene.getEnemyParty().map(p => { return p.species.speciesId; }); - return currentPartySpecies.includes(species.speciesId); + return currentPartySpecies.includes(species.speciesId) || staticPartyPokemon.includes(baseSpecies.speciesId); } getPartyMemberMatchupScores(trainerSlot: TrainerSlot = TrainerSlot.NONE, forSwitch: boolean = false): [integer, integer][] { From 676322e80072518bd667d0513aa18136eed0e82b Mon Sep 17 00:00:00 2001 From: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com> Date: Mon, 14 Oct 2024 16:42:59 +0200 Subject: [PATCH 078/153] [QOL] Add input delay for skipping egg summary (#4644) --- src/phases/egg-lapse-phase.ts | 5 +++-- src/phases/egg-summary-phase.ts | 3 --- src/ui/abstact-option-select-ui-handler.ts | 2 ++ src/ui/confirm-ui-handler.ts | 5 +++-- src/ui/egg-summary-ui-handler.ts | 24 +++++++++++++++++----- 5 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/phases/egg-lapse-phase.ts b/src/phases/egg-lapse-phase.ts index d81d63696a5..4c57be09b79 100644 --- a/src/phases/egg-lapse-phase.ts +++ b/src/phases/egg-lapse-phase.ts @@ -33,7 +33,7 @@ export class EggLapsePhase extends Phase { if (eggsToHatchCount > 0) { if (eggsToHatchCount >= this.minEggsToSkip && this.scene.eggSkipPreference === 1) { this.scene.ui.showText(i18next.t("battle:eggHatching"), 0, () => { - // show prompt for skip + // show prompt for skip, blocking inputs for 1 second this.scene.ui.showText(i18next.t("battle:eggSkipPrompt"), 0); this.scene.ui.setModeWithoutClear(Mode.CONFIRM, () => { this.hatchEggsSkipped(eggsToHatch); @@ -41,7 +41,8 @@ export class EggLapsePhase extends Phase { }, () => { this.hatchEggsRegular(eggsToHatch); this.end(); - } + }, + null, null, null, 1000, true ); }, 100, true); } else if (eggsToHatchCount >= this.minEggsToSkip && this.scene.eggSkipPreference === 2) { diff --git a/src/phases/egg-summary-phase.ts b/src/phases/egg-summary-phase.ts index 75c6939daf1..b673eb4887b 100644 --- a/src/phases/egg-summary-phase.ts +++ b/src/phases/egg-summary-phase.ts @@ -1,7 +1,6 @@ import BattleScene from "#app/battle-scene"; import { Phase } from "#app/phase"; import { Mode } from "#app/ui/ui"; -import EggHatchSceneHandler from "#app/ui/egg-hatch-scene-handler"; import { EggHatchData } from "#app/data/egg-hatch-data"; /** @@ -11,7 +10,6 @@ import { EggHatchData } from "#app/data/egg-hatch-data"; */ export class EggSummaryPhase extends Phase { private eggHatchData: EggHatchData[]; - private eggHatchHandler: EggHatchSceneHandler; constructor(scene: BattleScene, eggHatchData: EggHatchData[]) { super(scene); @@ -26,7 +24,6 @@ export class EggSummaryPhase extends Phase { if (i >= this.eggHatchData.length) { this.scene.ui.setModeForceTransition(Mode.EGG_HATCH_SUMMARY, this.eggHatchData).then(() => { this.scene.fadeOutBgm(undefined, false); - this.eggHatchHandler = this.scene.ui.getHandler() as EggHatchSceneHandler; }); } else { diff --git a/src/ui/abstact-option-select-ui-handler.ts b/src/ui/abstact-option-select-ui-handler.ts index 9dffd3b4ad0..a12ffbc46bd 100644 --- a/src/ui/abstact-option-select-ui-handler.ts +++ b/src/ui/abstact-option-select-ui-handler.ts @@ -165,6 +165,7 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler { if (this.config.delay) { this.blockInput = true; this.optionSelectText.setAlpha(0.5); + this.cursorObj?.setAlpha(0.8); this.scene.time.delayedCall(Utils.fixedInt(this.config.delay), () => this.unblockInput()); } @@ -256,6 +257,7 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler { this.blockInput = false; this.optionSelectText.setAlpha(1); + this.cursorObj?.setAlpha(1); } getOptionsWithScroll(): OptionSelectItem[] { diff --git a/src/ui/confirm-ui-handler.ts b/src/ui/confirm-ui-handler.ts index 16dae82d091..2022508fc0d 100644 --- a/src/ui/confirm-ui-handler.ts +++ b/src/ui/confirm-ui-handler.ts @@ -76,7 +76,8 @@ export default class ConfirmUiHandler extends AbstractOptionSelectUiHandler { } } ], - delay: args.length >= 6 && args[5] !== null ? args[5] as integer : 0 + delay: args.length >= 6 && args[5] !== null ? args[5] as number : 0, + noCancel: args.length >= 7 && args[6] !== null ? args[6] as boolean : false, }; super.show([ config ]); @@ -96,7 +97,7 @@ export default class ConfirmUiHandler extends AbstractOptionSelectUiHandler { } processInput(button: Button): boolean { - if (button === Button.CANCEL && this.blockInput) { + if (button === Button.CANCEL && this.blockInput && !this.config?.noCancel) { this.unblockInput(); } diff --git a/src/ui/egg-summary-ui-handler.ts b/src/ui/egg-summary-ui-handler.ts index 519722b1505..da93168926e 100644 --- a/src/ui/egg-summary-ui-handler.ts +++ b/src/ui/egg-summary-ui-handler.ts @@ -42,6 +42,9 @@ export default class EggSummaryUiHandler extends MessageUiHandler { private scrollGridHandler : ScrollableGridUiHandler; private cursorObj: Phaser.GameObjects.Image; + /** used to add a delay before which it is not possible to exit the summary */ + private blockExit: boolean; + /** * Allows subscribers to listen for events * @@ -168,6 +171,13 @@ export default class EggSummaryUiHandler extends MessageUiHandler { this.setCursor(0); this.scene.playSoundWithoutBgm("evolution_fanfare"); + + // Prevent exiting the egg summary for 2 seconds if the egg hatching + // was skipped automatically and for 1 second otherwise + const exitBlockingDuration = (this.scene.eggSkipPreference === 2) ? 2000 : 1000; + this.blockExit = true; + this.scene.time.delayedCall(exitBlockingDuration, () => this.blockExit = false); + return true; } @@ -203,13 +213,17 @@ export default class EggSummaryUiHandler extends MessageUiHandler { const ui = this.getUi(); let success = false; - const error = false; + let error = false; if (button === Button.CANCEL) { - const phase = this.scene.getCurrentPhase(); - if (phase instanceof EggSummaryPhase) { - phase.end(); + if (!this.blockExit) { + const phase = this.scene.getCurrentPhase(); + if (phase instanceof EggSummaryPhase) { + phase.end(); + } + success = true; + } else { + error = true; } - success = true; } else { this.scrollGridHandler.processInput(button); } From e7a4d4055f2b48d1d78c1dc2cb6f3794e0c34dd2 Mon Sep 17 00:00:00 2001 From: cadi Date: Tue, 15 Oct 2024 04:39:34 +0900 Subject: [PATCH 079/153] [Move] Implement Power Trick (#2658) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add `PowerTrickTag` * modify getStat() with PowerTrickTag * implement `PowerTrickAttr` * add unit test * enhance docs and tag apply logic --------- Co-authored-by: Lugiad' Co-authored-by: José Ricardo Fleury Oliveira Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> Co-authored-by: Enoch Co-authored-by: Yonmaru40 <47717431+40chyan@users.noreply.github.com> Co-authored-by: Amani H. <109637146+xsn34kzx@users.noreply.github.com> Co-authored-by: Niccolò <123510358+NicusPulcis@users.noreply.github.com> Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/data/battler-tags.ts | 40 ++++++++++ src/data/move.ts | 5 +- src/enums/battler-tag-type.ts | 1 + src/field/pokemon.ts | 6 +- src/test/moves/power_trick.test.ts | 113 +++++++++++++++++++++++++++++ 5 files changed, 163 insertions(+), 2 deletions(-) create mode 100644 src/test/moves/power_trick.test.ts diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index a5016746013..8491307fc76 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -2724,6 +2724,44 @@ export class TelekinesisTag extends BattlerTag { } } +/** + * Tag that swaps the user's base ATK stat with its base DEF stat. + * @extends BattlerTag + */ +export class PowerTrickTag extends BattlerTag { + constructor(sourceMove: Moves, sourceId: number) { + super(BattlerTagType.POWER_TRICK, BattlerTagLapseType.CUSTOM, 0, sourceMove, sourceId, true); + } + + onAdd(pokemon: Pokemon): void { + this.swapStat(pokemon); + pokemon.scene.queueMessage(i18next.t("battlerTags:powerTrickActive", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + } + + onRemove(pokemon: Pokemon): void { + this.swapStat(pokemon); + pokemon.scene.queueMessage(i18next.t("battlerTags:powerTrickActive", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + } + + /** + * Removes the Power Trick tag and reverts any stat changes if the tag is already applied. + * @param {Pokemon} pokemon The {@linkcode Pokemon} that already has the Power Trick tag. + */ + onOverlap(pokemon: Pokemon): void { + pokemon.removeTag(this.tagType); + } + + /** + * Swaps the user's base ATK stat with its base DEF stat. + * @param {Pokemon} pokemon The {@linkcode Pokemon} whose stats will be swapped. + */ + swapStat(pokemon: Pokemon): void { + const temp = pokemon.getStat(Stat.ATK, false); + pokemon.setStat(Stat.ATK, pokemon.getStat(Stat.DEF, false), false); + pokemon.setStat(Stat.DEF, temp, false); + } +} + /** * Retrieves a {@linkcode BattlerTag} based on the provided tag type, turn count, source move, and source ID. * @param sourceId - The ID of the pokemon adding the tag @@ -2899,6 +2937,8 @@ export function getBattlerTag(tagType: BattlerTagType, turnCount: number, source return new SyrupBombTag(sourceId); case BattlerTagType.TELEKINESIS: return new TelekinesisTag(sourceMove); + case BattlerTagType.POWER_TRICK: + return new PowerTrickTag(sourceMove, sourceId); case BattlerTagType.NONE: default: return new BattlerTag(tagType, BattlerTagLapseType.CUSTOM, turnCount, sourceMove, sourceId); diff --git a/src/data/move.ts b/src/data/move.ts index a77e8096672..2d91363955a 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -6430,6 +6430,9 @@ export class TransformAttr extends MoveEffectAttr { user.summonData.gender = target.getGender(); user.summonData.fusionGender = target.getFusionGender(); + // Power Trick's effect will not preserved after using Transform + user.removeTag(BattlerTagType.POWER_TRICK); + // Copy all stats (except HP) for (const s of EFFECTIVE_STATS) { user.setStat(s, target.getStat(s, false), false); @@ -8153,7 +8156,7 @@ export function initMoves() { .attr(OpponentHighHpPowerAttr, 120) .makesContact(), new SelfStatusMove(Moves.POWER_TRICK, Type.PSYCHIC, -1, 10, -1, 0, 4) - .unimplemented(), + .attr(AddBattlerTagAttr, BattlerTagType.POWER_TRICK, true), new StatusMove(Moves.GASTRO_ACID, Type.POISON, 100, 10, -1, 0, 4) .attr(SuppressAbilitiesAttr), new StatusMove(Moves.LUCKY_CHANT, Type.NORMAL, -1, 30, -1, 0, 4) diff --git a/src/enums/battler-tag-type.ts b/src/enums/battler-tag-type.ts index 2efae9ad359..680dedb93cc 100644 --- a/src/enums/battler-tag-type.ts +++ b/src/enums/battler-tag-type.ts @@ -80,6 +80,7 @@ export enum BattlerTagType { DOUBLE_SHOCKED = "DOUBLE_SHOCKED", AUTOTOMIZED = "AUTOTOMIZED", MYSTERY_ENCOUNTER_POST_SUMMON = "MYSTERY_ENCOUNTER_POST_SUMMON", + POWER_TRICK = "POWER_TRICK", HEAL_BLOCK = "HEAL_BLOCK", TORMENT = "TORMENT", TAUNT = "TAUNT", diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 9ae83753e62..0204672cabd 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -19,7 +19,7 @@ import { initMoveAnim, loadMoveAnimAssets } from "#app/data/battle-anims"; import { Status, StatusEffect, getRandomStatus } from "#app/data/status-effect"; import { pokemonEvolutions, pokemonPrevolutions, SpeciesFormEvolution, SpeciesEvolutionCondition, FusionSpeciesFormEvolution } from "#app/data/balance/pokemon-evolutions"; import { reverseCompatibleTms, tmSpecies, tmPoolTiers } from "#app/data/balance/tms"; -import { BattlerTag, BattlerTagLapseType, EncoreTag, GroundedTag, HighestStatBoostTag, SubstituteTag, TypeImmuneTag, getBattlerTag, SemiInvulnerableTag, TypeBoostTag, MoveRestrictionBattlerTag, ExposedTag, DragonCheerTag, CritBoostTag, TrappedTag, TarShotTag, AutotomizedTag } from "../data/battler-tags"; +import { BattlerTag, BattlerTagLapseType, EncoreTag, GroundedTag, HighestStatBoostTag, SubstituteTag, TypeImmuneTag, getBattlerTag, SemiInvulnerableTag, TypeBoostTag, MoveRestrictionBattlerTag, ExposedTag, DragonCheerTag, CritBoostTag, TrappedTag, TarShotTag, AutotomizedTag, PowerTrickTag } from "../data/battler-tags"; import { WeatherType } from "#app/data/weather"; import { ArenaTagSide, NoCritTag, WeakenMoveScreenTag } from "#app/data/arena-tag"; import { Ability, AbAttr, StatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, IgnoreOpponentStatStagesAbAttr, MoveImmunityAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, ReduceStatusEffectDurationAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyStatMultiplierAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr, DamageBoostAbAttr, IgnoreTypeStatusEffectImmunityAbAttr, ConditionalCritAbAttr, applyFieldStatMultiplierAbAttrs, FieldMultiplyStatAbAttr, AddSecondStrikeAbAttr, UserFieldStatusEffectImmunityAbAttr, UserFieldBattlerTagImmunityAbAttr, BattlerTagImmunityAbAttr, MoveTypeChangeAbAttr, FullHpResistTypeAbAttr, applyCheckTrappedAbAttrs, CheckTrappedAbAttr, PostSetStatusAbAttr, applyPostSetStatusAbAttrs } from "#app/data/ability"; @@ -3048,6 +3048,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { continue; } + if (tag instanceof PowerTrickTag) { + tag.swapStat(this); + } + this.summonData.tags.push(tag); } diff --git a/src/test/moves/power_trick.test.ts b/src/test/moves/power_trick.test.ts new file mode 100644 index 00000000000..a064a43dec4 --- /dev/null +++ b/src/test/moves/power_trick.test.ts @@ -0,0 +1,113 @@ +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import Phaser from "phaser"; +import GameManager from "#app/test/utils/gameManager"; +import { Moves } from "#enums/moves"; +import { Stat } from "#enums/stat"; +import { Species } from "#enums/species"; +import { TurnEndPhase } from "#app/phases/turn-end-phase"; +import { Abilities } from "#enums/abilities"; +import { BattlerTagType } from "#enums/battler-tag-type"; + +describe("Moves - Power Trick", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .battleType("single") + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH) + .enemySpecies(Species.MEW) + .enemyLevel(200) + .moveset([ Moves.POWER_TRICK ]) + .ability(Abilities.BALL_FETCH); + }); + + it("swaps the user's ATK and DEF stats", async () => { + await game.classicMode.startBattle([ Species.SHUCKLE ]); + + const player = game.scene.getPlayerPokemon()!; + const baseATK = player.getStat(Stat.ATK, false); + const baseDEF = player.getStat(Stat.DEF, false); + + game.move.select(Moves.POWER_TRICK); + + await game.phaseInterceptor.to(TurnEndPhase); + + expect(player.getStat(Stat.ATK, false)).toBe(baseDEF); + expect(player.getStat(Stat.DEF, false)).toBe(baseATK); + expect(player.getTag(BattlerTagType.POWER_TRICK)).toBeDefined(); + }); + + it("resets initial ATK and DEF stat swap when used consecutively", async () => { + await game.classicMode.startBattle([ Species.SHUCKLE ]); + + const player = game.scene.getPlayerPokemon()!; + const baseATK = player.getStat(Stat.ATK, false); + const baseDEF = player.getStat(Stat.DEF, false); + + game.move.select(Moves.POWER_TRICK); + + await game.phaseInterceptor.to(TurnEndPhase); + + game.move.select(Moves.POWER_TRICK); + + await game.phaseInterceptor.to(TurnEndPhase); + + expect(player.getStat(Stat.ATK, false)).toBe(baseATK); + expect(player.getStat(Stat.DEF, false)).toBe(baseDEF); + expect(player.getTag(BattlerTagType.POWER_TRICK)).toBeUndefined(); + }); + + it("should pass effect when using BATON_PASS", async () => { + await game.classicMode.startBattle([ Species.SHUCKLE, Species.SHUCKLE ]); + await game.override.moveset([ Moves.POWER_TRICK, Moves.BATON_PASS ]); + + const player = game.scene.getPlayerPokemon()!; + player.addTag(BattlerTagType.POWER_TRICK); + + game.move.select(Moves.BATON_PASS); + game.doSelectPartyPokemon(1); + + await game.phaseInterceptor.to(TurnEndPhase); + + const switchedPlayer = game.scene.getPlayerPokemon()!; + const baseATK = switchedPlayer.getStat(Stat.ATK); + const baseDEF = switchedPlayer.getStat(Stat.DEF); + + expect(switchedPlayer.getStat(Stat.ATK, false)).toBe(baseDEF); + expect(switchedPlayer.getStat(Stat.DEF, false)).toBe(baseATK); + expect(switchedPlayer.getTag(BattlerTagType.POWER_TRICK)).toBeDefined(); + }); + + it("should remove effect after using Transform", async () => { + await game.classicMode.startBattle([ Species.SHUCKLE, Species.SHUCKLE ]); + await game.override.moveset([ Moves.POWER_TRICK, Moves.TRANSFORM ]); + + const player = game.scene.getPlayerPokemon()!; + player.addTag(BattlerTagType.POWER_TRICK); + + game.move.select(Moves.TRANSFORM); + + await game.phaseInterceptor.to(TurnEndPhase); + + const enemy = game.scene.getEnemyPokemon()!; + const baseATK = enemy.getStat(Stat.ATK); + const baseDEF = enemy.getStat(Stat.DEF); + + expect(player.getStat(Stat.ATK, false)).toBe(baseATK); + expect(player.getStat(Stat.DEF, false)).toBe(baseDEF); + expect(player.getTag(BattlerTagType.POWER_TRICK)).toBeUndefined(); + }); +}); From e962ac1f182d33e6f06fef1858c49b7ffb90c4b9 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Mon, 14 Oct 2024 14:47:23 -0700 Subject: [PATCH 080/153] [Beta Bug] Prevent duplicate move failure message (#4662) --- src/phases/move-phase.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index 94093188571..d3a2a3329fd 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -128,7 +128,9 @@ export class MovePhase extends BattlePhase { this.lapsePreMoveAndMoveTags(); - this.resolveFinalPreMoveCancellationChecks(); + if (!(this.failed || this.cancelled)) { + this.resolveFinalPreMoveCancellationChecks(); + } if (this.cancelled || this.failed) { this.handlePreMoveFailures(); From bb98bc2f8e296de5b27d644193d284be40062625 Mon Sep 17 00:00:00 2001 From: Blitzy <118096277+Blitz425@users.noreply.github.com> Date: Tue, 15 Oct 2024 04:17:20 -0500 Subject: [PATCH 081/153] [Balance] Evil Team Update / Penny Adjustments (#4577) * Update trainer-config.ts * Update trainer-config.ts * Update trainer-config.ts * Fixed Flare Grunt's having Noivern > Noibat * Revert Inkay change, Change Penny * Give Admin aces canonical genders * Update trainer-config.ts * Update trainer-config.ts --------- Co-authored-by: Madmadness65 Co-authored-by: damocleas --- src/data/trainer-config.ts | 63 ++++++++++++++++++++++++++++---------- 1 file changed, 46 insertions(+), 17 deletions(-) diff --git a/src/data/trainer-config.ts b/src/data/trainer-config.ts index bc6596c74bd..bbeecba84e6 100644 --- a/src/data/trainer-config.ts +++ b/src/data/trainer-config.ts @@ -574,13 +574,13 @@ export class TrainerConfig { case "magma": { return { [TrainerPoolTier.COMMON]: [ Species.GROWLITHE, Species.SLUGMA, Species.SOLROCK, Species.HIPPOPOTAS, Species.BALTOY, Species.ROLYCOLY, Species.GLIGAR, Species.TORKOAL, Species.HOUNDOUR, Species.MAGBY ], - [TrainerPoolTier.UNCOMMON]: [ Species.TRAPINCH, Species.SILICOBRA, Species.RHYHORN, Species.ANORITH, Species.LILEEP, Species.HISUI_GROWLITHE, Species.TURTONATOR, Species.ARON, Species.BARBOACH ], + [TrainerPoolTier.UNCOMMON]: [ Species.TRAPINCH, Species.SILICOBRA, Species.RHYHORN, Species.ANORITH, Species.LILEEP, Species.HISUI_GROWLITHE, Species.TURTONATOR, Species.ARON, Species.TOEDSCOOL ], [TrainerPoolTier.RARE]: [ Species.CAPSAKID, Species.CHARCADET ] }; } case "aqua": { return { - [TrainerPoolTier.COMMON]: [ Species.CORPHISH, Species.SPHEAL, Species.CLAMPERL, Species.CHINCHOU, Species.WOOPER, Species.WINGULL, Species.TENTACOOL, Species.AZURILL, Species.LOTAD, Species.WAILMER, Species.REMORAID ], + [TrainerPoolTier.COMMON]: [ Species.CORPHISH, Species.SPHEAL, Species.CLAMPERL, Species.CHINCHOU, Species.WOOPER, Species.WINGULL, Species.TENTACOOL, Species.AZURILL, Species.LOTAD, Species.WAILMER, Species.REMORAID, Species.BARBOACH ], [TrainerPoolTier.UNCOMMON]: [ Species.MANTYKE, Species.HISUI_QWILFISH, Species.ARROKUDA, Species.DHELMISE, Species.CLOBBOPUS, Species.FEEBAS, Species.PALDEA_WOOPER, Species.HORSEA, Species.SKRELP ], [TrainerPoolTier.RARE]: [ Species.DONDOZO, Species.BASCULEGION ] }; @@ -601,9 +601,9 @@ export class TrainerConfig { } case "flare": { return { - [TrainerPoolTier.COMMON]: [ Species.FLETCHLING, Species.LITLEO, Species.INKAY, Species.HELIOPTILE, Species.ELECTRIKE, Species.SKORUPI, Species.PURRLOIN, Species.CLAWITZER, Species.PANCHAM, Species.ESPURR, Species.BUNNELBY ], + [TrainerPoolTier.COMMON]: [ Species.FLETCHLING, Species.LITLEO, Species.INKAY, Species.FOONGUS, Species.HELIOPTILE, Species.ELECTRIKE, Species.SKORUPI, Species.PURRLOIN, Species.CLAWITZER, Species.PANCHAM, Species.ESPURR, Species.BUNNELBY ], [TrainerPoolTier.UNCOMMON]: [ Species.LITWICK, Species.SNEASEL, Species.PUMPKABOO, Species.PHANTUMP, Species.HONEDGE, Species.BINACLE, Species.HOUNDOUR, Species.SKRELP, Species.SLIGGOO ], - [TrainerPoolTier.RARE]: [ Species.NOIVERN, Species.HISUI_AVALUGG, Species.HISUI_SLIGGOO ] + [TrainerPoolTier.RARE]: [ Species.NOIBAT, Species.HISUI_AVALUGG, Species.HISUI_SLIGGOO ] }; } case "aether": { @@ -1504,7 +1504,7 @@ export const trainerConfigs: TrainerConfigs = { .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ Species.SLUGMA, Species.POOCHYENA, Species.NUMEL, Species.ZIGZAGOON, Species.DIGLETT, Species.MAGBY, Species.TORKOAL, Species.GROWLITHE, Species.BALTOY ], [TrainerPoolTier.UNCOMMON]: [ Species.SOLROCK, Species.HIPPOPOTAS, Species.SANDACONDA, Species.PHANPY, Species.ROLYCOLY, Species.GLIGAR, Species.RHYHORN, Species.HEATMOR ], - [TrainerPoolTier.RARE]: [ Species.TRAPINCH, Species.LILEEP, Species.ANORITH, Species.HISUI_GROWLITHE, Species.TURTONATOR, Species.ARON ], + [TrainerPoolTier.RARE]: [ Species.TRAPINCH, Species.LILEEP, Species.ANORITH, Species.HISUI_GROWLITHE, Species.TURTONATOR, Species.ARON, Species.TOEDSCOOL ], [TrainerPoolTier.SUPER_RARE]: [ Species.CAPSAKID, Species.CHARCADET ] }), [TrainerType.TABITHA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("magma_admin", "magma", [ Species.CAMERUPT ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), @@ -1540,9 +1540,9 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.FLARE_GRUNT]: new TrainerConfig(++t).setHasGenders("Flare Grunt Female").setHasDouble("Flare Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ Species.FLETCHLING, Species.LITLEO, Species.PONYTA, Species.INKAY, Species.HOUNDOUR, Species.SKORUPI, Species.SCRAFTY, Species.CROAGUNK, Species.SCATTERBUG, Species.ESPURR ], - [TrainerPoolTier.UNCOMMON]: [ Species.HELIOPTILE, Species.ELECTRIKE, Species.SKRELP, Species.PANCHAM, Species.PURRLOIN, Species.POOCHYENA, Species.BINACLE, Species.CLAUNCHER, Species.PUMPKABOO, Species.PHANTUMP ], + [TrainerPoolTier.UNCOMMON]: [ Species.HELIOPTILE, Species.ELECTRIKE, Species.SKRELP, Species.PANCHAM, Species.PURRLOIN, Species.POOCHYENA, Species.BINACLE, Species.CLAUNCHER, Species.PUMPKABOO, Species.PHANTUMP, Species.FOONGUS ], [TrainerPoolTier.RARE]: [ Species.LITWICK, Species.SNEASEL, Species.PAWNIARD, Species.SLIGGOO ], - [TrainerPoolTier.SUPER_RARE]: [ Species.NOIVERN, Species.HISUI_SLIGGOO, Species.HISUI_AVALUGG ] + [TrainerPoolTier.SUPER_RARE]: [ Species.NOIBAT, Species.HISUI_SLIGGOO, Species.HISUI_AVALUGG ] }), [TrainerType.BRYONY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("flare_admin_female", "flare", [ Species.LIEPARD ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), [TrainerType.XEROSIC]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("flare_admin", "flare", [ Species.MALAMAR ]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), @@ -1893,7 +1893,10 @@ export const trainerConfigs: TrainerConfigs = { }), [TrainerType.ROCKET_BOSS_GIOVANNI_1]: new TrainerConfig(t = TrainerType.ROCKET_BOSS_GIOVANNI_1).setName("Giovanni").initForEvilTeamLeader("Rocket Boss", []).setMixedBattleBgm("battle_rocket_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.PERSIAN, Species.ALOLA_PERSIAN ])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.PERSIAN, Species.ALOLA_PERSIAN ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.gender = Gender.MALE; + })) .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.DUGTRIO, Species.ALOLA_DUGTRIO ])) .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.HONCHKROW ])) .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.NIDOKING, Species.NIDOQUEEN ])) @@ -1945,6 +1948,7 @@ export const trainerConfigs: TrainerConfigs = { p.pokeball = PokeballType.ULTRA_BALL; p.formIndex = 1; // Mega Camerupt p.generateName(); + p.gender = Gender.MALE; })), [TrainerType.MAXIE_2]: new TrainerConfig(++t).setName("Maxie").initForEvilTeamLeader("Magma Boss", [], true).setMixedBattleBgm("battle_aqua_magma_boss").setVictoryBgm("victory_team_plasma") .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.SOLROCK, Species.TYPHLOSION ], TrainerSlot.TRAINER, true, p => { @@ -1967,6 +1971,7 @@ export const trainerConfigs: TrainerConfigs = { p.pokeball = PokeballType.ULTRA_BALL; p.formIndex = 1; // Mega Camerupt p.generateName(); + p.gender = Gender.MALE; })) .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.GROUDON ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); @@ -1985,6 +1990,7 @@ export const trainerConfigs: TrainerConfigs = { p.pokeball = PokeballType.ULTRA_BALL; p.formIndex = 1; // Mega Sharpedo p.generateName(); + p.gender = Gender.MALE; })), [TrainerType.ARCHIE_2]: new TrainerConfig(++t).setName("Archie").initForEvilTeamLeader("Aqua Boss", [], true).setMixedBattleBgm("battle_aqua_magma_boss").setVictoryBgm("victory_team_plasma") .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.EMPOLEON, Species.LUDICOLO ], TrainerSlot.TRAINER, true, p => { @@ -2010,6 +2016,7 @@ export const trainerConfigs: TrainerConfigs = { p.pokeball = PokeballType.ULTRA_BALL; p.formIndex = 1; // Mega Sharpedo p.generateName(); + p.gender = Gender.MALE; })) .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.KYOGRE ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); @@ -2031,6 +2038,7 @@ export const trainerConfigs: TrainerConfigs = { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; + p.gender = Gender.MALE; })), [TrainerType.CYRUS_2]: new TrainerConfig(++t).setName("Cyrus").initForEvilTeamLeader("Galactic Boss", [], true).setMixedBattleBgm("battle_galactic_boss").setVictoryBgm("victory_team_plasma") .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.AZELF, Species.UXIE, Species.MESPRIT ], TrainerSlot.TRAINER, true, p => { @@ -2049,6 +2057,7 @@ export const trainerConfigs: TrainerConfigs = { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; + p.gender = Gender.MALE; })) .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.DARKRAI ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); @@ -2065,6 +2074,7 @@ export const trainerConfigs: TrainerConfigs = { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; + p.gender = Gender.MALE; })), [TrainerType.GHETSIS_2]: new TrainerConfig(++t).setName("Ghetsis").initForEvilTeamLeader("Plasma Boss", [], true).setMixedBattleBgm("battle_plasma_boss").setVictoryBgm("victory_team_plasma") .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.GENESECT ], TrainerSlot.TRAINER, true, p => { @@ -2084,6 +2094,11 @@ export const trainerConfigs: TrainerConfigs = { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; + if (p.species.speciesId === Species.HYDREIGON) { + p.gender = Gender.MALE; + } else if (p.species.speciesId === Species.IRON_JUGULIS) { + p.gender = Gender.GENDERLESS; + } })) .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.KYUREM ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); @@ -2105,6 +2120,7 @@ export const trainerConfigs: TrainerConfigs = { p.pokeball = PokeballType.ULTRA_BALL; p.formIndex = 1; // Mega Gyarados p.generateName(); + p.gender = Gender.MALE; })), [TrainerType.LYSANDRE_2]: new TrainerConfig(++t).setName("Lysandre").initForEvilTeamLeader("Flare Boss", [], true).setMixedBattleBgm("battle_flare_boss").setVictoryBgm("victory_team_plasma") .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.SCREAM_TAIL, Species.FLUTTER_MANE ], TrainerSlot.TRAINER, true, p => { @@ -2124,6 +2140,7 @@ export const trainerConfigs: TrainerConfigs = { p.pokeball = PokeballType.ULTRA_BALL; p.formIndex = 1; // Mega Gyardos p.generateName(); + p.gender = Gender.MALE; })) .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.YVELTAL ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); @@ -2131,7 +2148,10 @@ export const trainerConfigs: TrainerConfigs = { p.pokeball = PokeballType.MASTER_BALL; })), [TrainerType.LUSAMINE]: new TrainerConfig(++t).setName("Lusamine").initForEvilTeamLeader("Aether Boss", []).setMixedBattleBgm("battle_aether_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.CLEFABLE ])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.CLEFABLE ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.gender = Gender.FEMALE; + })) .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.LILLIGANT, Species.HISUI_LILLIGANT ])) .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.MILOTIC, Species.PRIMARINA ])) .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GALAR_SLOWBRO, Species.GALAR_SLOWKING ])) @@ -2148,7 +2168,10 @@ export const trainerConfigs: TrainerConfigs = { p.pokeball = PokeballType.ROGUE_BALL; })) .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.MILOTIC, Species.PRIMARINA ])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.CLEFABLE ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.CLEFABLE ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.gender = Gender.FEMALE; + })) .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.STAKATAKA, Species.CELESTEELA, Species.GUZZLORD ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ROGUE_BALL; @@ -2191,6 +2214,7 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.GOLISOPOD ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); + p.gender = Gender.MALE; p.pokeball = PokeballType.ULTRA_BALL; })), [TrainerType.GUZMA_2]: new TrainerConfig(++t).setName("Guzma").initForEvilTeamLeader("Skull Boss", [], true).setMixedBattleBgm("battle_skull_boss").setVictoryBgm("victory_team_plasma") @@ -2198,6 +2222,7 @@ export const trainerConfigs: TrainerConfigs = { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.abilityIndex = 2; //Anticipation + p.gender = Gender.MALE; p.pokeball = PokeballType.ULTRA_BALL; })) .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.SCIZOR, Species.KLEAVOR ], TrainerSlot.TRAINER, true, p => { @@ -2239,6 +2264,7 @@ export const trainerConfigs: TrainerConfigs = { p.formIndex = 1; // G-Max Copperajah p.generateName(); p.pokeball = PokeballType.ULTRA_BALL; + p.gender = Gender.FEMALE; })), [TrainerType.ROSE_2]: new TrainerConfig(++t).setName("Rose").initForEvilTeamLeader("Macro Boss", [], true).setMixedBattleBgm("battle_macro_boss").setVictoryBgm("victory_team_plasma") .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.ARCHALUDON ], TrainerSlot.TRAINER, true, p => { @@ -2262,6 +2288,7 @@ export const trainerConfigs: TrainerConfigs = { p.formIndex = 1; // G-Max Copperajah p.generateName(); p.pokeball = PokeballType.ULTRA_BALL; + p.gender = Gender.FEMALE; })), [TrainerType.PENNY]: new TrainerConfig(++t).setName("Cassiopeia").initForEvilTeamLeader("Star Boss", []).setMixedBattleBgm("battle_star_boss").setVictoryBgm("victory_team_plasma") .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.VAPOREON, Species.JOLTEON, Species.FLAREON ])) @@ -2275,8 +2302,9 @@ export const trainerConfigs: TrainerConfigs = { p.formIndex = Utils.randSeedInt(5, 1); // Heat, Wash, Frost, Fan, or Mow })) .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.SYLVEON ], TrainerSlot.TRAINER, true, p => { - p.generateAndPopulateMoveset(); p.abilityIndex = 2; // Pixilate + p.generateAndPopulateMoveset(); + p.gender = Gender.FEMALE; })) .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.EEVEE ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); @@ -2290,20 +2318,21 @@ export const trainerConfigs: TrainerConfigs = { return [ modifierTypes.TERA_SHARD().generateType([], [ teraPokemon.species.type1 ])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(teraPokemon) as PersistentModifier ]; //TODO: is the bang correct? }), [TrainerType.PENNY_2]: new TrainerConfig(++t).setName("Cassiopeia").initForEvilTeamLeader("Star Boss", [], true).setMixedBattleBgm("battle_star_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.REVAVROOM ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.SYLVEON ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); - p.formIndex = Utils.randSeedInt(5, 1); //Random Starmobile form + p.abilityIndex = 2; // Pixilate p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; + p.gender = Gender.FEMALE; })) .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.ENTEI, Species.RAIKOU, Species.SUICUNE ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; })) .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.WALKING_WAKE, Species.GOUGING_FIRE, Species.RAGING_BOLT ])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.SYLVEON ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.REVAVROOM ], TrainerSlot.TRAINER, true, p => { + p.formIndex = Utils.randSeedInt(5, 1); //Random Starmobile form p.generateAndPopulateMoveset(); - p.abilityIndex = 2; // Pixilate + p.pokeball = PokeballType.ROGUE_BALL; })) .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.EEVEE ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); @@ -2318,7 +2347,7 @@ export const trainerConfigs: TrainerConfigs = { p.pokeball = PokeballType.MASTER_BALL; })) .setGenModifiersFunc(party => { - const teraPokemon = party[3]; + const teraPokemon = party[0]; return [ modifierTypes.TERA_SHARD().generateType([], [ teraPokemon.species.type1 ])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(teraPokemon) as PersistentModifier ]; //TODO: is the bang correct? }), [TrainerType.BUCK]: new TrainerConfig(++t).setName("Buck").initForStatTrainer([], true) From d5f87bbea76428677003276c033cf07beb85c151 Mon Sep 17 00:00:00 2001 From: innerthunder <168692175+innerthunder@users.noreply.github.com> Date: Tue, 15 Oct 2024 07:02:02 -0700 Subject: [PATCH 082/153] [P3][Beta] Fix missing move text when a move fails (#4664) * Fix missing move text when a move fails * Use `cancel` function instead of setting `this.cancelled` --- src/phases/move-phase.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index d3a2a3329fd..f50cfbd78ac 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -147,8 +147,9 @@ export class MovePhase extends BattlePhase { const moveQueue = this.pokemon.getMoveQueue(); if (targets.length === 0 || (moveQueue.length && moveQueue[0].move === Moves.NONE)) { + this.showMoveText(); this.showFailedText(); - this.cancelled = true; + this.cancel(); } } From 21b71595e0292a6a30503dc9d93905c8ade179bc Mon Sep 17 00:00:00 2001 From: PrabbyDD <147005742+PrabbyDD@users.noreply.github.com> Date: Tue, 15 Oct 2024 07:04:26 -0700 Subject: [PATCH 083/153] [P2] Attacks that miss against pokemon in semi invul state that have abilities such as volt absorb will not trigger (#4663) * fixing issue where abilities trigger in semi invul state * fixing targets --- src/phases/move-effect-phase.ts | 10 ++++++---- src/test/abilities/volt_absorb.test.ts | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index 581cd5ff017..e9bff882367 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -99,8 +99,9 @@ export class MoveEffectPhase extends PokemonPhase { const targetHitChecks = Object.fromEntries(targets.map(p => [ p.getBattlerIndex(), this.hitCheck(p) ])); const hasActiveTargets = targets.some(t => t.isActive(true)); - /** Check if the target is immune via ability to the attacking move */ - const isImmune = targets[0].hasAbilityWithAttr(TypeImmunityAbAttr) && (targets[0].getAbility()?.getAttrs(TypeImmunityAbAttr)?.[0]?.getImmuneType() === user.getMoveType(move)); + /** Check if the target is immune via ability to the attacking move, and NOT in semi invulnerable state */ + const isImmune = targets[0].hasAbilityWithAttr(TypeImmunityAbAttr) && (targets[0].getAbility()?.getAttrs(TypeImmunityAbAttr)?.[0]?.getImmuneType() === user.getMoveType(move)) + && !targets[0].getTag(SemiInvulnerableTag); /** * If no targets are left for the move to hit (FAIL), or the invoked move is single-target @@ -148,8 +149,9 @@ export class MoveEffectPhase extends PokemonPhase { && (hasConditionalProtectApplied.value || (!target.findTags(t => t instanceof DamageProtectedTag).length && target.findTags(t => t instanceof ProtectedTag).find(t => target.lapseTag(t.tagType))) || (this.move.getMove().category !== MoveCategory.STATUS && target.findTags(t => t instanceof DamageProtectedTag).find(t => target.lapseTag(t.tagType)))); - /** Is the pokemon immune due to an ablility? */ - const isImmune = target.hasAbilityWithAttr(TypeImmunityAbAttr) && (target.getAbility()?.getAttrs(TypeImmunityAbAttr)?.[0]?.getImmuneType() === user.getMoveType(move)); + /** Is the pokemon immune due to an ablility, and also not in a semi invulnerable state? */ + const isImmune = target.hasAbilityWithAttr(TypeImmunityAbAttr) && (target.getAbility()?.getAttrs(TypeImmunityAbAttr)?.[0]?.getImmuneType() === user.getMoveType(move)) + && !target.getTag(SemiInvulnerableTag); /** * If the move missed a target, stop all future hits against that target diff --git a/src/test/abilities/volt_absorb.test.ts b/src/test/abilities/volt_absorb.test.ts index 07907a34566..ec82b00ec5a 100644 --- a/src/test/abilities/volt_absorb.test.ts +++ b/src/test/abilities/volt_absorb.test.ts @@ -71,4 +71,23 @@ describe("Abilities - Volt Absorb", () => { await game.phaseInterceptor.to("BerryPhase", false); expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); }); + it("regardless of accuracy should not trigger on pokemon in semi invulnerable state", async () => { + game.override.moveset(Moves.THUNDERBOLT); + game.override.enemyMoveset(Moves.DIVE); + game.override.enemySpecies(Species.MAGIKARP); + game.override.enemyAbility(Abilities.VOLT_ABSORB); + + await game.classicMode.startBattle(); + + const enemyPokemon = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.THUNDERBOLT); + enemyPokemon.hp = enemyPokemon.hp - 1; + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + await game.phaseInterceptor.to("MoveEffectPhase"); + + await game.move.forceMiss(); + await game.phaseInterceptor.to("BerryPhase", false); + expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp()); + }); }); From d01d85689833dea8acb023478e42b6f6d0b2cef2 Mon Sep 17 00:00:00 2001 From: Mumble <171087428+frutescens@users.noreply.github.com> Date: Tue, 15 Oct 2024 07:05:21 -0700 Subject: [PATCH 084/153] [Refactor] Default case to display challenge name (#4656) Co-authored-by: frutescens --- src/ui/run-info-ui-handler.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ui/run-info-ui-handler.ts b/src/ui/run-info-ui-handler.ts index 39927f8e071..1976d5a997b 100644 --- a/src/ui/run-info-ui-handler.ts +++ b/src/ui/run-info-ui-handler.ts @@ -587,13 +587,13 @@ export default class RunInfoUiHandler extends UiHandler { const typeText = typeTextColor + typeShadowColor + i18next.t(`pokemonInfo:Type.${typeRule}`)! + "[/color]" + "[/shadow]"; rules.push(typeText); break; - case Challenges.FRESH_START: - rules.push(i18next.t("challenges:freshStart.name")); - break; case Challenges.INVERSE_BATTLE: - // rules.push(i18next.t("challenges:inverseBattle.shortName")); break; + default: + const localisationKey = Challenges[this.runInfo.challenges[i].id].split("_").map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join(""); + rules.push(i18next.t(`challenges:${localisationKey}.name`)); + break; } } } From 196633562775b04920956d913c5059ddb9f39a31 Mon Sep 17 00:00:00 2001 From: innerthunder <168692175+innerthunder@users.noreply.github.com> Date: Tue, 15 Oct 2024 10:13:54 -0700 Subject: [PATCH 085/153] [Refactor] Add type inference and support for simulated calls to `ArenaTag.apply` (#4659) * Add simulated support for Arena Tag application * Add type inference to ArenaTag.apply * Fix screen tests * back to `any` again lol * fix missing spread syntax (maybe) * updated docs * named imports for `Utils` --- src/data/arena-tag.ts | 189 ++++++++++++++++---------- src/data/move.ts | 4 +- src/field/arena.ts | 10 +- src/field/pokemon.ts | 4 +- src/phases/move-effect-phase.ts | 2 +- src/phases/post-summon-phase.ts | 2 +- src/phases/stat-stage-change-phase.ts | 3 +- src/phases/turn-start-phase.ts | 2 +- src/test/moves/aurora_veil.test.ts | 2 +- src/test/moves/light_screen.test.ts | 2 +- src/test/moves/reflect.test.ts | 2 +- 11 files changed, 135 insertions(+), 87 deletions(-) diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index 71cf11fa06f..2bd6ae09877 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -1,7 +1,7 @@ import { Arena } from "#app/field/arena"; import BattleScene from "#app/battle-scene"; import { Type } from "#app/data/type"; -import * as Utils from "#app/utils"; +import { BooleanHolder, NumberHolder, toDmgValue } from "#app/utils"; import { MoveCategory, allMoves, MoveTarget, IncrementMovePriorityAttr, applyMoveAttrs } from "#app/data/move"; import { getPokemonNameWithAffix } from "#app/messages"; import Pokemon, { HitResult, PokemonMove } from "#app/field/pokemon"; @@ -36,7 +36,7 @@ export abstract class ArenaTag { public side: ArenaTagSide = ArenaTagSide.BOTH ) {} - apply(arena: Arena, args: any[]): boolean { + apply(arena: Arena, simulated: boolean, ...args: unknown[]): boolean { return true; } @@ -122,10 +122,20 @@ export class MistTag extends ArenaTag { } } - apply(arena: Arena, args: any[]): boolean { - (args[0] as Utils.BooleanHolder).value = true; + /** + * Cancels the lowering of stats + * @param arena the {@linkcode Arena} containing this effect + * @param simulated `true` if the effect should be applied quietly + * @param cancelled a {@linkcode BooleanHolder} whose value is set to `true` + * to flag the stat reduction as cancelled + * @returns `true` if a stat reduction was cancelled; `false` otherwise + */ + override apply(arena: Arena, simulated: boolean, cancelled: BooleanHolder): boolean { + cancelled.value = true; - arena.scene.queueMessage(i18next.t("arenaTag:mistApply")); + if (!simulated) { + arena.scene.queueMessage(i18next.t("arenaTag:mistApply")); + } return true; } @@ -157,17 +167,15 @@ export class WeakenMoveScreenTag extends ArenaTag { /** * Applies the weakening effect to the move. * - * @param arena - The arena where the move is applied. - * @param args - The arguments for the move application. - * @param args[0] - The category of the move. - * @param args[1] - A boolean indicating whether it is a double battle. - * @param args[2] - An object of type `Utils.NumberHolder` that holds the damage multiplier - * - * @returns True if the move was weakened, otherwise false. + * @param arena the {@linkcode Arena} where the move is applied. + * @param simulated n/a + * @param moveCategory the attacking move's {@linkcode MoveCategory}. + * @param damageMultiplier A {@linkcode NumberHolder} containing the damage multiplier + * @returns `true` if the attacking move was weakened; `false` otherwise. */ - apply(arena: Arena, args: any[]): boolean { - if (this.weakenedCategories.includes((args[0] as MoveCategory))) { - (args[2] as Utils.NumberHolder).value = (args[1] as boolean) ? 2732 / 4096 : 0.5; + override apply(arena: Arena, simulated: boolean, moveCategory: MoveCategory, damageMultiplier: NumberHolder): boolean { + if (this.weakenedCategories.includes(moveCategory)) { + damageMultiplier.value = arena.scene.currentBattle.double ? 2732 / 4096 : 0.5; return true; } return false; @@ -249,38 +257,34 @@ export class ConditionalProtectTag extends ArenaTag { onRemove(arena: Arena): void { } /** - * apply(): Checks incoming moves against the condition function + * Checks incoming moves against the condition function * and protects the target if conditions are met - * @param arena The arena containing this tag - * @param args\[0\] (Utils.BooleanHolder) Signals if the move is cancelled - * @param args\[1\] (Pokemon) The Pokemon using the move - * @param args\[2\] (Pokemon) The intended target of the move - * @param args\[3\] (Moves) The parameters to the condition function - * @param args\[4\] (Utils.BooleanHolder) Signals if the applied protection supercedes protection-ignoring effects - * @returns + * @param arena the {@linkcode Arena} containing this tag + * @param simulated `true` if the tag is applied quietly; `false` otherwise. + * @param isProtected a {@linkcode BooleanHolder} used to flag if the move is protected against + * @param attacker the attacking {@linkcode Pokemon} + * @param defender the defending {@linkcode Pokemon} + * @param moveId the {@linkcode Moves | identifier} for the move being used + * @param ignoresProtectBypass a {@linkcode BooleanHolder} used to flag if a protection effect supercedes effects that ignore protection + * @returns `true` if this tag protected against the attack; `false` otherwise */ - apply(arena: Arena, args: any[]): boolean { - const [ cancelled, user, target, moveId, ignoresBypass ] = args; + override apply(arena: Arena, simulated: boolean, isProtected: BooleanHolder, attacker: Pokemon, defender: Pokemon, + moveId: Moves, ignoresProtectBypass: BooleanHolder): boolean { - if (cancelled instanceof Utils.BooleanHolder - && user instanceof Pokemon - && target instanceof Pokemon - && typeof moveId === "number" - && ignoresBypass instanceof Utils.BooleanHolder) { + if ((this.side === ArenaTagSide.PLAYER) === defender.isPlayer() + && this.protectConditionFunc(arena, moveId)) { + if (!isProtected.value) { + isProtected.value = true; + if (!simulated) { + attacker.stopMultiHit(defender); - if ((this.side === ArenaTagSide.PLAYER) === target.isPlayer() - && this.protectConditionFunc(arena, moveId)) { - if (!cancelled.value) { - cancelled.value = true; - user.stopMultiHit(target); - - new CommonBattleAnim(CommonAnim.PROTECT, target).play(arena.scene); - arena.scene.queueMessage(i18next.t("arenaTag:conditionalProtectApply", { moveName: super.getMoveName(), pokemonNameWithAffix: getPokemonNameWithAffix(target) })); + new CommonBattleAnim(CommonAnim.PROTECT, defender).play(arena.scene); + arena.scene.queueMessage(i18next.t("arenaTag:conditionalProtectApply", { moveName: super.getMoveName(), pokemonNameWithAffix: getPokemonNameWithAffix(defender) })); } - - ignoresBypass.value = ignoresBypass.value || this.ignoresBypass; - return true; } + + ignoresProtectBypass.value = ignoresProtectBypass.value || this.ignoresBypass; + return true; } return false; } @@ -296,7 +300,7 @@ export class ConditionalProtectTag extends ArenaTag { */ const QuickGuardConditionFunc: ProtectConditionFunc = (arena, moveId) => { const move = allMoves[moveId]; - const priority = new Utils.NumberHolder(move.priority); + const priority = new NumberHolder(move.priority); const effectPhase = arena.scene.getCurrentPhase(); if (effectPhase instanceof MoveEffectPhase) { @@ -460,7 +464,7 @@ class WishTag extends ArenaTag { if (user) { this.battlerIndex = user.getBattlerIndex(); this.triggerMessage = i18next.t("arenaTag:wishTagOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(user) }); - this.healHp = Utils.toDmgValue(user.getMaxHp() / 2); + this.healHp = toDmgValue(user.getMaxHp() / 2); } else { console.warn("Failed to get source for WishTag onAdd"); } @@ -497,12 +501,19 @@ export class WeakenMoveTypeTag extends ArenaTag { this.weakenedType = type; } - apply(arena: Arena, args: any[]): boolean { - if ((args[0] as Type) === this.weakenedType) { - (args[1] as Utils.NumberHolder).value *= 0.33; + /** + * Reduces an attack's power by 0.33x if it matches this tag's weakened type. + * @param arena n/a + * @param simulated n/a + * @param type the attack's {@linkcode Type} + * @param power a {@linkcode NumberHolder} containing the attack's power + * @returns `true` if the attack's power was reduced; `false` otherwise. + */ + override apply(arena: Arena, simulated: boolean, type: Type, power: NumberHolder): boolean { + if (type === this.weakenedType) { + power.value *= 0.33; return true; } - return false; } } @@ -563,13 +574,12 @@ export class IonDelugeTag extends ArenaTag { /** * Converts Normal-type moves to Electric type * @param arena n/a - * @param args - * - `[0]` {@linkcode Utils.NumberHolder} A container with a move's {@linkcode Type} + * @param simulated n/a + * @param moveType a {@linkcode NumberHolder} containing a move's {@linkcode Type} * @returns `true` if the given move type changed; `false` otherwise. */ - apply(arena: Arena, args: any[]): boolean { - const moveType = args[0]; - if (moveType instanceof Utils.NumberHolder && moveType.value === Type.NORMAL) { + override apply(arena: Arena, simulated: boolean, moveType: NumberHolder): boolean { + if (moveType.value === Type.NORMAL) { moveType.value = Type.ELECTRIC; return true; } @@ -608,16 +618,22 @@ export class ArenaTrapTag extends ArenaTag { } } - apply(arena: Arena, args: any[]): boolean { - const pokemon = args[0] as Pokemon; + /** + * Activates the hazard effect onto a Pokemon when it enters the field + * @param arena the {@linkcode Arena} containing this tag + * @param simulated if `true`, only checks if the hazard would activate. + * @param pokemon the {@linkcode Pokemon} triggering this hazard + * @returns `true` if this hazard affects the given Pokemon; `false` otherwise. + */ + override apply(arena: Arena, simulated: boolean, pokemon: Pokemon): boolean { if (this.sourceId === pokemon.id || (this.side === ArenaTagSide.PLAYER) !== pokemon.isPlayer()) { return false; } - return this.activateTrap(pokemon); + return this.activateTrap(pokemon, simulated); } - activateTrap(pokemon: Pokemon): boolean { + activateTrap(pokemon: Pokemon, simulated: boolean): boolean { return false; } @@ -651,14 +667,18 @@ class SpikesTag extends ArenaTrapTag { } } - activateTrap(pokemon: Pokemon): boolean { + override activateTrap(pokemon: Pokemon, simulated: boolean): boolean { if (pokemon.isGrounded()) { - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); + if (simulated) { + return !cancelled.value; + } + if (!cancelled.value) { const damageHpRatio = 1 / (10 - 2 * this.layers); - const damage = Utils.toDmgValue(pokemon.getMaxHp() * damageHpRatio); + const damage = toDmgValue(pokemon.getMaxHp() * damageHpRatio); pokemon.scene.queueMessage(i18next.t("arenaTag:spikesActivateTrap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); pokemon.damageAndUpdate(damage, HitResult.OTHER); @@ -702,8 +722,11 @@ class ToxicSpikesTag extends ArenaTrapTag { } } - activateTrap(pokemon: Pokemon): boolean { + override activateTrap(pokemon: Pokemon, simulated: boolean): boolean { if (pokemon.isGrounded()) { + if (simulated) { + return true; + } if (pokemon.isOfType(Type.POISON)) { this.neutralized = true; if (pokemon.scene.arena.removeTag(this.tagType)) { @@ -807,8 +830,8 @@ class StealthRockTag extends ArenaTrapTag { return damageHpRatio; } - activateTrap(pokemon: Pokemon): boolean { - const cancelled = new Utils.BooleanHolder(false); + override activateTrap(pokemon: Pokemon, simulated: boolean): boolean { + const cancelled = new BooleanHolder(false); applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); if (cancelled.value) { @@ -818,12 +841,16 @@ class StealthRockTag extends ArenaTrapTag { const damageHpRatio = this.getDamageHpRatio(pokemon); if (damageHpRatio) { - const damage = Utils.toDmgValue(pokemon.getMaxHp() * damageHpRatio); + if (simulated) { + return true; + } + const damage = toDmgValue(pokemon.getMaxHp() * damageHpRatio); pokemon.scene.queueMessage(i18next.t("arenaTag:stealthRockActivateTrap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); pokemon.damageAndUpdate(damage, HitResult.OTHER); if (pokemon.turnData) { pokemon.turnData.damageTaken += damage; } + return true; } return false; @@ -853,14 +880,20 @@ class StickyWebTag extends ArenaTrapTag { } } - activateTrap(pokemon: Pokemon): boolean { + override activateTrap(pokemon: Pokemon, simulated: boolean): boolean { if (pokemon.isGrounded()) { - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); applyAbAttrs(ProtectStatAbAttr, pokemon, cancelled); + + if (simulated) { + return !cancelled.value; + } + if (!cancelled.value) { pokemon.scene.queueMessage(i18next.t("arenaTag:stickyWebActivateTrap", { pokemonName: pokemon.getNameToRender() })); - const stages = new Utils.NumberHolder(-1); + const stages = new NumberHolder(-1); pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), false, [ Stat.SPD ], stages.value)); + return true; } } @@ -879,8 +912,15 @@ export class TrickRoomTag extends ArenaTag { super(ArenaTagType.TRICK_ROOM, turnCount, Moves.TRICK_ROOM, sourceId); } - apply(arena: Arena, args: any[]): boolean { - const speedReversed = args[0] as Utils.BooleanHolder; + /** + * Reverses Speed-based turn order for all Pokemon on the field + * @param arena n/a + * @param simulated n/a + * @param speedReversed a {@linkcode BooleanHolder} used to flag if Speed-based + * turn order should be reversed. + * @returns `true` if turn order is successfully reversed; `false` otherwise + */ + override apply(arena: Arena, simulated: boolean, speedReversed: BooleanHolder): boolean { speedReversed.value = !speedReversed.value; return true; } @@ -1087,7 +1127,7 @@ class FireGrassPledgeTag extends ArenaTag { pokemon.scene.queueMessage(i18next.t("arenaTag:fireGrassPledgeLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); // TODO: Replace this with a proper animation pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.MAGMA_STORM)); - pokemon.damageAndUpdate(Utils.toDmgValue(pokemon.getMaxHp() / 8)); + pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 8)); }); return super.lapse(arena); @@ -1111,8 +1151,15 @@ class WaterFirePledgeTag extends ArenaTag { arena.scene.queueMessage(i18next.t(`arenaTag:waterFirePledgeOnAdd${this.side === ArenaTagSide.PLAYER ? "Player" : this.side === ArenaTagSide.ENEMY ? "Enemy" : ""}`)); } - override apply(arena: Arena, args: any[]): boolean { - const moveChance = args[0] as Utils.NumberHolder; + /** + * Doubles the chance for the given move's secondary effect(s) to trigger + * @param arena the {@linkcode Arena} containing this tag + * @param simulated n/a + * @param moveChance a {@linkcode NumberHolder} containing + * the move's current effect chance + * @returns `true` if the move's effect chance was doubled (currently always `true`) + */ + override apply(arena: Arena, simulated: boolean, moveChance: NumberHolder): boolean { moveChance.value *= 2; return true; } diff --git a/src/data/move.ts b/src/data/move.ts index 2d91363955a..b0078c32f12 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -808,7 +808,7 @@ export default class Move implements Localizable { source.scene.applyModifiers(PokemonMultiHitModifier, source.isPlayer(), source, new Utils.IntegerHolder(0), power); if (!this.hasAttr(TypelessAttr)) { - source.scene.arena.applyTags(WeakenMoveTypeTag, this.type, power); + source.scene.arena.applyTags(WeakenMoveTypeTag, simulated, this.type, power); source.scene.applyModifiers(AttackTypeBoosterModifier, source.isPlayer(), source, this.type, power); } @@ -1026,7 +1026,7 @@ export class MoveEffectAttr extends MoveAttr { if (!move.hasAttr(FlinchAttr) || moveChance.value <= move.chance) { const userSide = user.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; - user.scene.arena.applyTagsForSide(ArenaTagType.WATER_FIRE_PLEDGE, userSide, moveChance); + user.scene.arena.applyTagsForSide(ArenaTagType.WATER_FIRE_PLEDGE, userSide, false, moveChance); } if (!selfEffect) { diff --git a/src/field/arena.ts b/src/field/arena.ts index 1e164903e9d..ad1846884fc 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -579,26 +579,28 @@ export class Arena { * Applies each `ArenaTag` in this Arena, based on which side (self, enemy, or both) is passed in as a parameter * @param tagType Either an {@linkcode ArenaTagType} string, or an actual {@linkcode ArenaTag} class to filter which ones to apply * @param side {@linkcode ArenaTagSide} which side's arena tags to apply + * @param simulated if `true`, this applies arena tags without changing game state * @param args array of parameters that the called upon tags may need */ - applyTagsForSide(tagType: ArenaTagType | Constructor, side: ArenaTagSide, ...args: unknown[]): void { + applyTagsForSide(tagType: ArenaTagType | Constructor, side: ArenaTagSide, simulated: boolean, ...args: unknown[]): void { let tags = typeof tagType === "string" ? this.tags.filter(t => t.tagType === tagType) : this.tags.filter(t => t instanceof tagType); if (side !== ArenaTagSide.BOTH) { tags = tags.filter(t => t.side === side); } - tags.forEach(t => t.apply(this, args)); + tags.forEach(t => t.apply(this, simulated, ...args)); } /** * Applies the specified tag to both sides (ie: both user and trainer's tag that match the Tag specified) * by calling {@linkcode applyTagsForSide()} * @param tagType Either an {@linkcode ArenaTagType} string, or an actual {@linkcode ArenaTag} class to filter which ones to apply + * @param simulated if `true`, this applies arena tags without changing game state * @param args array of parameters that the called upon tags may need */ - applyTags(tagType: ArenaTagType | Constructor, ...args: unknown[]): void { - this.applyTagsForSide(tagType, ArenaTagSide.BOTH, ...args); + applyTags(tagType: ArenaTagType | Constructor, simulated: boolean, ...args: unknown[]): void { + this.applyTagsForSide(tagType, ArenaTagSide.BOTH, simulated, ...args); } /** diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 0204672cabd..8eca37f38ac 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1538,7 +1538,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { applyMoveAttrs(VariableMoveTypeAttr, this, null, move, moveTypeHolder); applyPreAttackAbAttrs(MoveTypeChangeAbAttr, this, null, move, simulated, moveTypeHolder); - this.scene.arena.applyTags(ArenaTagType.ION_DELUGE, moveTypeHolder); + this.scene.arena.applyTags(ArenaTagType.ION_DELUGE, simulated, moveTypeHolder); if (this.getTag(BattlerTagType.ELECTRIFIED)) { moveTypeHolder.value = Type.ELECTRIC; } @@ -2605,7 +2605,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** Reduces damage if this Pokemon has a relevant screen (e.g. Light Screen for special attacks) */ const screenMultiplier = new Utils.NumberHolder(1); - this.scene.arena.applyTagsForSide(WeakenMoveScreenTag, defendingSide, move.category, this.scene.currentBattle.double, screenMultiplier); + this.scene.arena.applyTagsForSide(WeakenMoveScreenTag, defendingSide, simulated, moveCategory, screenMultiplier); /** * For each {@linkcode HitsTagAttr} the move has, doubles the damage of the move if: diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index e9bff882367..dc880f85e23 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -141,7 +141,7 @@ export class MoveEffectPhase extends PokemonPhase { const bypassIgnoreProtect = new Utils.BooleanHolder(false); /** If the move is not targeting a Pokemon on the user's side, try to apply conditional protection effects */ if (!this.move.getMove().isAllyTarget()) { - this.scene.arena.applyTagsForSide(ConditionalProtectTag, targetSide, hasConditionalProtectApplied, user, target, move.id, bypassIgnoreProtect); + this.scene.arena.applyTagsForSide(ConditionalProtectTag, targetSide, false, hasConditionalProtectApplied, user, target, move.id, bypassIgnoreProtect); } /** Is the target protected by Protect, etc. or a relevant conditional protection effect? */ diff --git a/src/phases/post-summon-phase.ts b/src/phases/post-summon-phase.ts index b99c0b90fd8..617bb8b1cfe 100644 --- a/src/phases/post-summon-phase.ts +++ b/src/phases/post-summon-phase.ts @@ -20,7 +20,7 @@ export class PostSummonPhase extends PokemonPhase { if (pokemon.status?.effect === StatusEffect.TOXIC) { pokemon.status.turnCount = 0; } - this.scene.arena.applyTags(ArenaTrapTag, pokemon); + this.scene.arena.applyTags(ArenaTrapTag, false, pokemon); // If this is mystery encounter and has post summon phase tag, apply post summon effects if (this.scene.currentBattle.isBattleMysteryEncounter() && pokemon.findTags(t => t instanceof MysteryEncounterPostSummonTag).length > 0) { diff --git a/src/phases/stat-stage-change-phase.ts b/src/phases/stat-stage-change-phase.ts index bfe19ea9ca5..4c13b883445 100644 --- a/src/phases/stat-stage-change-phase.ts +++ b/src/phases/stat-stage-change-phase.ts @@ -64,8 +64,7 @@ export class StatStageChangePhase extends PokemonPhase { const cancelled = new BooleanHolder(false); if (!this.selfTarget && stages.value < 0) { - // TODO: Include simulate boolean when tag applications can be simulated - this.scene.arena.applyTagsForSide(MistTag, pokemon.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY, cancelled); + this.scene.arena.applyTagsForSide(MistTag, pokemon.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY, false, cancelled); } if (!cancelled.value && !this.selfTarget && stages.value < 0) { diff --git a/src/phases/turn-start-phase.ts b/src/phases/turn-start-phase.ts index 627cee4b06a..25c079007fd 100644 --- a/src/phases/turn-start-phase.ts +++ b/src/phases/turn-start-phase.ts @@ -45,7 +45,7 @@ export class TurnStartPhase extends FieldPhase { // Next, a check for Trick Room is applied to determine sort order. const speedReversed = new Utils.BooleanHolder(false); - this.scene.arena.applyTags(TrickRoomTag, speedReversed); + this.scene.arena.applyTags(TrickRoomTag, false, speedReversed); // Adjust the sort function based on whether Trick Room is active. orderedTargets.sort((a: Pokemon, b: Pokemon) => { diff --git a/src/test/moves/aurora_veil.test.ts b/src/test/moves/aurora_veil.test.ts index e71d4ab9d11..243ba3a3269 100644 --- a/src/test/moves/aurora_veil.test.ts +++ b/src/test/moves/aurora_veil.test.ts @@ -111,7 +111,7 @@ const getMockedMoveDamage = (defender: Pokemon, attacker: Pokemon, move: Move) = const side = defender.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; if (defender.scene.arena.getTagOnSide(ArenaTagType.AURORA_VEIL, side)) { - defender.scene.arena.applyTagsForSide(ArenaTagType.AURORA_VEIL, side, move.category, defender.scene.currentBattle.double, multiplierHolder); + defender.scene.arena.applyTagsForSide(ArenaTagType.AURORA_VEIL, side, false, move.category, multiplierHolder); } return move.power * multiplierHolder.value; diff --git a/src/test/moves/light_screen.test.ts b/src/test/moves/light_screen.test.ts index 2308458003d..11b8144bb4e 100644 --- a/src/test/moves/light_screen.test.ts +++ b/src/test/moves/light_screen.test.ts @@ -94,7 +94,7 @@ const getMockedMoveDamage = (defender: Pokemon, attacker: Pokemon, move: Move) = const side = defender.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; if (defender.scene.arena.getTagOnSide(ArenaTagType.LIGHT_SCREEN, side)) { - defender.scene.arena.applyTagsForSide(ArenaTagType.LIGHT_SCREEN, side, move.category, defender.scene.currentBattle.double, multiplierHolder); + defender.scene.arena.applyTagsForSide(ArenaTagType.LIGHT_SCREEN, side, false, move.category, multiplierHolder); } return move.power * multiplierHolder.value; diff --git a/src/test/moves/reflect.test.ts b/src/test/moves/reflect.test.ts index 41a10988552..b18b2423895 100644 --- a/src/test/moves/reflect.test.ts +++ b/src/test/moves/reflect.test.ts @@ -94,7 +94,7 @@ const getMockedMoveDamage = (defender: Pokemon, attacker: Pokemon, move: Move) = const side = defender.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; if (defender.scene.arena.getTagOnSide(ArenaTagType.REFLECT, side)) { - defender.scene.arena.applyTagsForSide(ArenaTagType.REFLECT, side, move.category, defender.scene.currentBattle.double, multiplierHolder); + defender.scene.arena.applyTagsForSide(ArenaTagType.REFLECT, side, false, move.category, multiplierHolder); } return move.power * multiplierHolder.value; From c04d81bd65364726e252754866e0859e93f25b56 Mon Sep 17 00:00:00 2001 From: Madmadness65 <59298170+Madmadness65@users.noreply.github.com> Date: Tue, 15 Oct 2024 14:02:30 -0500 Subject: [PATCH 086/153] [Ability] Allow Power Construct to transform 10% PC Zygardes (#4626) * Allow Power Construct to transform 10% PC Zygarde * Add additional test for 10% PC Zygarde --- public/audio/cry/718-10-complete.m4a | Bin 0 -> 20709 bytes src/battle-scene.ts | 2 +- src/data/ability.ts | 14 +++++---- src/data/pokemon-forms.ts | 4 +-- src/data/pokemon-species.ts | 4 ++- src/test/abilities/power_construct.test.ts | 34 +++++++++++++++++++-- 6 files changed, 46 insertions(+), 12 deletions(-) create mode 100644 public/audio/cry/718-10-complete.m4a diff --git a/public/audio/cry/718-10-complete.m4a b/public/audio/cry/718-10-complete.m4a new file mode 100644 index 0000000000000000000000000000000000000000..94d953605539c1ef2eef1252a75a6ec5d0b63f6e GIT binary patch literal 20709 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 2) - .attr(PostSummonFormChangeAbAttr, p => p.getHpRatio() <= 0.5 || p.getFormKey() === "complete" ? 4 : 2) - .attr(PostTurnFormChangeAbAttr, p => p.getHpRatio() <= 0.5 || p.getFormKey() === "complete" ? 4 : 2) + new Ability(Abilities.POWER_CONSTRUCT, 7) + .conditionalAttr(pokemon => pokemon.formIndex === 2 || pokemon.formIndex === 4, PostBattleInitFormChangeAbAttr, () => 2) + .conditionalAttr(pokemon => pokemon.formIndex === 3 || pokemon.formIndex === 5, PostBattleInitFormChangeAbAttr, () => 3) + .conditionalAttr(pokemon => pokemon.formIndex === 2 || pokemon.formIndex === 4, PostSummonFormChangeAbAttr, p => p.getHpRatio() <= 0.5 || p.getFormKey() === "complete" ? 4 : 2) + .conditionalAttr(pokemon => pokemon.formIndex === 2 || pokemon.formIndex === 4, PostTurnFormChangeAbAttr, p => p.getHpRatio() <= 0.5 || p.getFormKey() === "complete" ? 4 : 2) + .conditionalAttr(pokemon => pokemon.formIndex === 3 || pokemon.formIndex === 5, PostSummonFormChangeAbAttr, p => p.getHpRatio() <= 0.5 || p.getFormKey() === "10-complete" ? 5 : 3) + .conditionalAttr(pokemon => pokemon.formIndex === 3 || pokemon.formIndex === 5, PostTurnFormChangeAbAttr, p => p.getHpRatio() <= 0.5 || p.getFormKey() === "10-complete" ? 5 : 3) .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) .attr(UnsuppressableAbilityAbAttr) .attr(NoFusionAbilityAbAttr) - .bypassFaint() - .partial(), + .bypassFaint(), new Ability(Abilities.CORROSION, 7) .attr(IgnoreTypeStatusEffectImmunityAbAttr, [ StatusEffect.POISON, StatusEffect.TOXIC ], [ Type.STEEL, Type.POISON ]) .edgeCase(), // Should interact correctly with magic coat/bounce (not yet implemented), fling with toxic orb (not implemented yet), and synchronize (not fully implemented yet) diff --git a/src/data/pokemon-forms.ts b/src/data/pokemon-forms.ts index 03b6b89e5b1..7cc20d50fb9 100644 --- a/src/data/pokemon-forms.ts +++ b/src/data/pokemon-forms.ts @@ -799,8 +799,8 @@ export const pokemonFormChanges: PokemonFormChanges = { [Species.ZYGARDE]: [ new SpeciesFormChange(Species.ZYGARDE, "50-pc", "complete", new SpeciesFormChangeManualTrigger(), true), new SpeciesFormChange(Species.ZYGARDE, "complete", "50-pc", new SpeciesFormChangeManualTrigger(), true), - new SpeciesFormChange(Species.ZYGARDE, "10-pc", "complete", new SpeciesFormChangeManualTrigger(), true), - new SpeciesFormChange(Species.ZYGARDE, "complete", "10-pc", new SpeciesFormChangeManualTrigger(), true) + new SpeciesFormChange(Species.ZYGARDE, "10-pc", "10-complete", new SpeciesFormChangeManualTrigger(), true), + new SpeciesFormChange(Species.ZYGARDE, "10-complete", "10-pc", new SpeciesFormChangeManualTrigger(), true) ], [Species.DIANCIE]: [ new SpeciesFormChange(Species.DIANCIE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.DIANCITE)) diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 8bb23cfc208..eb1b761e306 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -425,6 +425,7 @@ export abstract class PokemonSpeciesForm { case "hero": case "roaming": case "complete": + case "10-complete": case "10": case "10-pc": case "super": @@ -2135,7 +2136,8 @@ export function initSpecies() { new PokemonForm("10% Forme", "10", Type.DRAGON, Type.GROUND, 1.2, 33.5, Abilities.AURA_BREAK, Abilities.NONE, Abilities.NONE, 486, 54, 100, 71, 61, 85, 115, 3, 0, 300, false, null, true), new PokemonForm("50% Forme Power Construct", "50-pc", Type.DRAGON, Type.GROUND, 5, 305, Abilities.POWER_CONSTRUCT, Abilities.NONE, Abilities.NONE, 600, 108, 100, 121, 81, 95, 95, 3, 0, 300, false, "", true), new PokemonForm("10% Forme Power Construct", "10-pc", Type.DRAGON, Type.GROUND, 1.2, 33.5, Abilities.POWER_CONSTRUCT, Abilities.NONE, Abilities.NONE, 486, 54, 100, 71, 61, 85, 115, 3, 0, 300, false, "10", true), - new PokemonForm("Complete Forme", "complete", Type.DRAGON, Type.GROUND, 4.5, 610, Abilities.POWER_CONSTRUCT, Abilities.NONE, Abilities.NONE, 708, 216, 100, 121, 91, 95, 85, 3, 0, 300), + new PokemonForm("Complete Forme (50% PC)", "complete", Type.DRAGON, Type.GROUND, 4.5, 610, Abilities.POWER_CONSTRUCT, Abilities.NONE, Abilities.NONE, 708, 216, 100, 121, 91, 95, 85, 3, 0, 300), + new PokemonForm("Complete Forme (10% PC)", "10-complete", Type.DRAGON, Type.GROUND, 4.5, 610, Abilities.POWER_CONSTRUCT, Abilities.NONE, Abilities.NONE, 708, 216, 100, 121, 91, 95, 85, 3, 0, 300, false, "complete"), ), new PokemonSpecies(Species.DIANCIE, 6, false, false, true, "Jewel Pokémon", Type.ROCK, Type.FAIRY, 0.7, 8.8, Abilities.CLEAR_BODY, Abilities.NONE, Abilities.NONE, 600, 50, 100, 150, 100, 150, 50, 3, 50, 300, GrowthRate.SLOW, null, false, true, new PokemonForm("Normal", "", Type.ROCK, Type.FAIRY, 0.7, 8.8, Abilities.CLEAR_BODY, Abilities.NONE, Abilities.NONE, 600, 50, 100, 150, 100, 150, 50, 3, 50, 300, false, null, true), diff --git a/src/test/abilities/power_construct.test.ts b/src/test/abilities/power_construct.test.ts index 662f5d06258..1a9e7d4818a 100644 --- a/src/test/abilities/power_construct.test.ts +++ b/src/test/abilities/power_construct.test.ts @@ -32,7 +32,7 @@ describe("Abilities - POWER CONSTRUCT", () => { }); test( - "check if fainted pokemon switches to base form on arena reset", + "check if fainted 50% Power Construct Pokemon switches to base form on arena reset", async () => { const baseForm = 2, completeForm = 4; @@ -41,7 +41,37 @@ describe("Abilities - POWER CONSTRUCT", () => { [Species.ZYGARDE]: completeForm, }); - await game.startBattle([ Species.MAGIKARP, Species.ZYGARDE ]); + await game.classicMode.startBattle([ Species.MAGIKARP, Species.ZYGARDE ]); + + const zygarde = game.scene.getParty().find((p) => p.species.speciesId === Species.ZYGARDE); + expect(zygarde).not.toBe(undefined); + expect(zygarde!.formIndex).toBe(completeForm); + + zygarde!.hp = 0; + zygarde!.status = new Status(StatusEffect.FAINT); + expect(zygarde!.isFainted()).toBe(true); + + game.move.select(Moves.SPLASH); + await game.doKillOpponents(); + await game.phaseInterceptor.to(TurnEndPhase); + game.doSelectModifier(); + await game.phaseInterceptor.to(QuietFormChangePhase); + + expect(zygarde!.formIndex).toBe(baseForm); + }, + ); + + test( + "check if fainted 10% Power Construct Pokemon switches to base form on arena reset", + async () => { + const baseForm = 3, + completeForm = 5; + game.override.startingWave(4); + game.override.starterForms({ + [Species.ZYGARDE]: completeForm, + }); + + await game.classicMode.startBattle([ Species.MAGIKARP, Species.ZYGARDE ]); const zygarde = game.scene.getParty().find((p) => p.species.speciesId === Species.ZYGARDE); expect(zygarde).not.toBe(undefined); From 093f3d90f5a4eab68a1ffe1317d1f76a50fa0a28 Mon Sep 17 00:00:00 2001 From: innerthunder <168692175+innerthunder@users.noreply.github.com> Date: Tue, 15 Oct 2024 18:06:56 -0700 Subject: [PATCH 087/153] [Balance] Add Memory Mushroom to Shop (#4555) * Add Memory Mushroom to Shop + escape TM selection * consolidate learn move type params into an enum * Rewrite lock capsule test * Disable luck upgrades for copied SMPhases * Mem Mushroom Cost 4x Update modifier-type.ts * Add undefined cost check to `addModifier` * Increase shop options row limit * Prevent SMPhase copies from updating the seed --------- Co-authored-by: damocleas Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/battle-scene.ts | 6 +- src/modifier/modifier-type.ts | 3 +- src/modifier/modifier.ts | 9 +-- src/phases/learn-move-phase.ts | 37 +++++++++-- src/phases/select-modifier-phase.ts | 66 +++++++++++++------ src/test/items/lock_capsule.test.ts | 20 +++--- src/test/phases/select-modifier-phase.test.ts | 8 +-- src/ui/modifier-select-ui-handler.ts | 4 +- 8 files changed, 104 insertions(+), 49 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index a84baa55266..75a19b8efaa 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -4,7 +4,7 @@ import Pokemon, { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; import PokemonSpecies, { allSpecies, getPokemonSpecies, PokemonSpeciesFilter } from "#app/data/pokemon-species"; import { Constructor, isNullOrUndefined, randSeedInt } from "#app/utils"; import * as Utils from "#app/utils"; -import { ConsumableModifier, ConsumablePokemonModifier, DoubleBattleChanceBoosterModifier, ExpBalanceModifier, ExpShareModifier, FusePokemonModifier, HealingBoosterModifier, Modifier, ModifierBar, ModifierPredicate, MultipleParticipantExpBonusModifier, overrideHeldItems, overrideModifiers, PersistentModifier, PokemonExpBoosterModifier, PokemonFormChangeItemModifier, PokemonHeldItemModifier, PokemonHpRestoreModifier, PokemonIncrementingStatModifier, TerastallizeModifier, TurnHeldItemTransferModifier } from "./modifier/modifier"; +import { ConsumableModifier, ConsumablePokemonModifier, DoubleBattleChanceBoosterModifier, ExpBalanceModifier, ExpShareModifier, FusePokemonModifier, HealingBoosterModifier, Modifier, ModifierBar, ModifierPredicate, MultipleParticipantExpBonusModifier, overrideHeldItems, overrideModifiers, PersistentModifier, PokemonExpBoosterModifier, PokemonFormChangeItemModifier, PokemonHeldItemModifier, PokemonHpRestoreModifier, PokemonIncrementingStatModifier, RememberMoveModifier, TerastallizeModifier, TurnHeldItemTransferModifier } from "./modifier/modifier"; import { PokeballType } from "#app/data/pokeball"; import { initCommonAnims, initMoveAnim, loadCommonAnimAssets, loadMoveAnimAssets, populateAnims } from "#app/data/battle-anims"; import { Phase } from "#app/phase"; @@ -2425,7 +2425,7 @@ export default class BattleScene extends SceneBase { return Math.floor(moneyValue / 10) * 10; } - addModifier(modifier: Modifier | null, ignoreUpdate?: boolean, playSound?: boolean, virtual?: boolean, instant?: boolean): Promise { + addModifier(modifier: Modifier | null, ignoreUpdate?: boolean, playSound?: boolean, virtual?: boolean, instant?: boolean, cost?: number): Promise { if (!modifier) { return Promise.resolve(false); } @@ -2482,6 +2482,8 @@ export default class BattleScene extends SceneBase { } } else if (modifier instanceof FusePokemonModifier) { args.push(this.getPokemonById(modifier.fusePokemonId) as PlayerPokemon); + } else if (modifier instanceof RememberMoveModifier && !Utils.isNullOrUndefined(cost)) { + args.push(cost); } if (modifier.shouldApply(pokemon, ...args)) { diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index f20aa854bdf..32173a6fead 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -2227,7 +2227,8 @@ export function getPlayerShopModifierTypeOptionsForWave(waveIndex: integer, base ], [ new ModifierTypeOption(modifierTypes.HYPER_POTION(), 0, baseCost * 0.8), - new ModifierTypeOption(modifierTypes.MAX_REVIVE(), 0, baseCost * 2.75) + new ModifierTypeOption(modifierTypes.MAX_REVIVE(), 0, baseCost * 2.75), + new ModifierTypeOption(modifierTypes.MEMORY_MUSHROOM(), 0, baseCost * 4) ], [ new ModifierTypeOption(modifierTypes.MAX_POTION(), 0, baseCost * 1.5), diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index dd8c82357a7..689b81be82f 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -11,7 +11,7 @@ import Pokemon, { type PlayerPokemon } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import Overrides from "#app/overrides"; import { EvolutionPhase } from "#app/phases/evolution-phase"; -import { LearnMovePhase } from "#app/phases/learn-move-phase"; +import { LearnMovePhase, LearnMoveType } from "#app/phases/learn-move-phase"; import { LevelUpPhase } from "#app/phases/level-up-phase"; import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; import { achvs } from "#app/system/achv"; @@ -2235,7 +2235,7 @@ export class TmModifier extends ConsumablePokemonModifier { */ override apply(playerPokemon: PlayerPokemon): boolean { - playerPokemon.scene.unshiftPhase(new LearnMovePhase(playerPokemon.scene, playerPokemon.scene.getParty().indexOf(playerPokemon), this.type.moveId, true)); + playerPokemon.scene.unshiftPhase(new LearnMovePhase(playerPokemon.scene, playerPokemon.scene.getParty().indexOf(playerPokemon), this.type.moveId, LearnMoveType.TM)); return true; } @@ -2255,8 +2255,9 @@ export class RememberMoveModifier extends ConsumablePokemonModifier { * @param playerPokemon The {@linkcode PlayerPokemon} that should remember the move * @returns always `true` */ - override apply(playerPokemon: PlayerPokemon): boolean { - playerPokemon.scene.unshiftPhase(new LearnMovePhase(playerPokemon.scene, playerPokemon.scene.getParty().indexOf(playerPokemon), playerPokemon.getLearnableLevelMoves()[this.levelMoveIndex])); + override apply(playerPokemon: PlayerPokemon, cost?: number): boolean { + + playerPokemon.scene.unshiftPhase(new LearnMovePhase(playerPokemon.scene, playerPokemon.scene.getParty().indexOf(playerPokemon), playerPokemon.getLearnableLevelMoves()[this.levelMoveIndex], LearnMoveType.MEMORY, cost)); return true; } diff --git a/src/phases/learn-move-phase.ts b/src/phases/learn-move-phase.ts index 6480577258a..eb7cfbb65ef 100644 --- a/src/phases/learn-move-phase.ts +++ b/src/phases/learn-move-phase.ts @@ -2,24 +2,37 @@ import BattleScene from "#app/battle-scene"; import { initMoveAnim, loadMoveAnimAssets } from "#app/data/battle-anims"; import Move, { allMoves } from "#app/data/move"; import { SpeciesFormChangeMoveLearnedTrigger } from "#app/data/pokemon-forms"; -import { Moves } from "#app/enums/moves"; +import { Moves } from "#enums/moves"; import { getPokemonNameWithAffix } from "#app/messages"; +import Overrides from "#app/overrides"; import EvolutionSceneHandler from "#app/ui/evolution-scene-handler"; import { SummaryUiMode } from "#app/ui/summary-ui-handler"; import { Mode } from "#app/ui/ui"; import i18next from "i18next"; -import { PlayerPartyMemberPokemonPhase } from "./player-party-member-pokemon-phase"; +import { PlayerPartyMemberPokemonPhase } from "#app/phases/player-party-member-pokemon-phase"; import Pokemon from "#app/field/pokemon"; +import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; + +export enum LearnMoveType { + /** For learning a move via level-up, evolution, or other non-item-based event */ + LEARN_MOVE, + /** For learning a move via Memory Mushroom */ + MEMORY, + /** For learning a move via TM */ + TM +} export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { private moveId: Moves; private messageMode: Mode; - private fromTM: boolean; + private learnMoveType; + private cost: number; - constructor(scene: BattleScene, partyMemberIndex: integer, moveId: Moves, fromTM?: boolean) { + constructor(scene: BattleScene, partyMemberIndex: integer, moveId: Moves, learnMoveType: LearnMoveType = LearnMoveType.LEARN_MOVE, cost: number = -1) { super(scene, partyMemberIndex); this.moveId = moveId; - this.fromTM = fromTM ?? false; + this.learnMoveType = learnMoveType; + this.cost = cost; } start() { @@ -136,11 +149,23 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { * @param Pokemon The Pokemon learning the move */ async learnMove(index: number, move: Move, pokemon: Pokemon, textMessage?: string) { - if (this.fromTM) { + if (this.learnMoveType === LearnMoveType.TM) { if (!pokemon.usedTMs) { pokemon.usedTMs = []; } pokemon.usedTMs.push(this.moveId); + this.scene.tryRemovePhase((phase) => phase instanceof SelectModifierPhase); + } else if (this.learnMoveType === LearnMoveType.MEMORY) { + if (this.cost !== -1) { + if (!Overrides.WAIVE_ROLL_FEE_OVERRIDE) { + this.scene.money -= this.cost; + this.scene.updateMoneyText(); + this.scene.animateMoneyChanged(false); + } + this.scene.playSound("se/buy"); + } else { + this.scene.tryRemovePhase((phase) => phase instanceof SelectModifierPhase); + } } pokemon.setMove(index, this.moveId); initMoveAnim(this.scene, this.moveId).then(() => { diff --git a/src/phases/select-modifier-phase.ts b/src/phases/select-modifier-phase.ts index 159af979fa0..f9b3e978923 100644 --- a/src/phases/select-modifier-phase.ts +++ b/src/phases/select-modifier-phase.ts @@ -16,26 +16,32 @@ export class SelectModifierPhase extends BattlePhase { private rerollCount: integer; private modifierTiers?: ModifierTier[]; private customModifierSettings?: CustomModifierSettings; + private isCopy: boolean; - constructor(scene: BattleScene, rerollCount: integer = 0, modifierTiers?: ModifierTier[], customModifierSettings?: CustomModifierSettings) { + private typeOptions: ModifierTypeOption[]; + + constructor(scene: BattleScene, rerollCount: integer = 0, modifierTiers?: ModifierTier[], customModifierSettings?: CustomModifierSettings, isCopy: boolean = false) { super(scene); this.rerollCount = rerollCount; this.modifierTiers = modifierTiers; this.customModifierSettings = customModifierSettings; + this.isCopy = isCopy; } start() { super.start(); - if (!this.rerollCount) { + if (!this.rerollCount && !this.isCopy) { this.updateSeed(); - } else { + } else if (this.rerollCount) { this.scene.reroll = false; } const party = this.scene.getParty(); - regenerateModifierPoolThresholds(party, this.getPoolType(), this.rerollCount); + if (!this.isCopy) { + regenerateModifierPoolThresholds(party, this.getPoolType(), this.rerollCount); + } const modifierCount = new Utils.IntegerHolder(3); if (this.isPlayer()) { this.scene.applyModifiers(ExtraModifierModifier, true, modifierCount); @@ -54,7 +60,7 @@ export class SelectModifierPhase extends BattlePhase { } } - const typeOptions: ModifierTypeOption[] = this.getModifierTypeOptions(modifierCount.value); + this.typeOptions = this.getModifierTypeOptions(modifierCount.value); const modifierSelectCallback = (rowCursor: integer, cursor: integer) => { if (rowCursor < 0 || cursor < 0) { @@ -63,13 +69,13 @@ export class SelectModifierPhase extends BattlePhase { this.scene.ui.revertMode(); this.scene.ui.setMode(Mode.MESSAGE); super.end(); - }, () => this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), typeOptions, modifierSelectCallback, this.getRerollCost(typeOptions, this.scene.lockModifierTiers))); + }, () => this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), this.typeOptions, modifierSelectCallback, this.getRerollCost(this.scene.lockModifierTiers))); }); return false; } let modifierType: ModifierType; let cost: integer; - const rerollCost = this.getRerollCost(typeOptions, this.scene.lockModifierTiers); + const rerollCost = this.getRerollCost(this.scene.lockModifierTiers); switch (rowCursor) { case 0: switch (cursor) { @@ -79,7 +85,7 @@ export class SelectModifierPhase extends BattlePhase { return false; } else { this.scene.reroll = true; - this.scene.unshiftPhase(new SelectModifierPhase(this.scene, this.rerollCount + 1, typeOptions.map(o => o.type?.tier).filter(t => t !== undefined) as ModifierTier[])); + this.scene.unshiftPhase(new SelectModifierPhase(this.scene, this.rerollCount + 1, this.typeOptions.map(o => o.type?.tier).filter(t => t !== undefined) as ModifierTier[])); this.scene.ui.clearText(); this.scene.ui.setMode(Mode.MESSAGE).then(() => super.end()); if (!Overrides.WAIVE_ROLL_FEE_OVERRIDE) { @@ -98,13 +104,13 @@ export class SelectModifierPhase extends BattlePhase { const itemModifier = itemModifiers[itemIndex]; this.scene.tryTransferHeldItemModifier(itemModifier, party[toSlotIndex], true, itemQuantity); } else { - this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), typeOptions, modifierSelectCallback, this.getRerollCost(typeOptions, this.scene.lockModifierTiers)); + this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), this.typeOptions, modifierSelectCallback, this.getRerollCost(this.scene.lockModifierTiers)); } }, PartyUiHandler.FilterItemMaxStacks); break; case 2: this.scene.ui.setModeWithoutClear(Mode.PARTY, PartyUiMode.CHECK, -1, () => { - this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), typeOptions, modifierSelectCallback, this.getRerollCost(typeOptions, this.scene.lockModifierTiers)); + this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), this.typeOptions, modifierSelectCallback, this.getRerollCost(this.scene.lockModifierTiers)); }); break; case 3: @@ -115,21 +121,21 @@ export class SelectModifierPhase extends BattlePhase { } this.scene.lockModifierTiers = !this.scene.lockModifierTiers; const uiHandler = this.scene.ui.getHandler() as ModifierSelectUiHandler; - uiHandler.setRerollCost(this.getRerollCost(typeOptions, this.scene.lockModifierTiers)); + uiHandler.setRerollCost(this.getRerollCost(this.scene.lockModifierTiers)); uiHandler.updateLockRaritiesText(); uiHandler.updateRerollCostText(); return false; } return true; case 1: - if (typeOptions.length === 0) { + if (this.typeOptions.length === 0) { this.scene.ui.clearText(); this.scene.ui.setMode(Mode.MESSAGE); super.end(); return true; } - if (typeOptions[cursor].type) { - modifierType = typeOptions[cursor].type; + if (this.typeOptions[cursor].type) { + modifierType = this.typeOptions[cursor].type; } break; default: @@ -151,8 +157,16 @@ export class SelectModifierPhase extends BattlePhase { } const applyModifier = (modifier: Modifier, playSound: boolean = false) => { - const result = this.scene.addModifier(modifier, false, playSound); - if (cost) { + const result = this.scene.addModifier(modifier, false, playSound, undefined, undefined, cost); + // Queue a copy of this phase when applying a TM or Memory Mushroom. + // If the player selects either of these, then escapes out of consuming them, + // they are returned to a shop in the same state. + if (modifier.type instanceof RememberMoveModifierType || + modifier.type instanceof TmModifierType) { + this.scene.unshiftPhase(this.copy()); + } + + if (cost && !(modifier.type instanceof RememberMoveModifierType)) { result.then(success => { if (success) { if (!Overrides.WAIVE_ROLL_FEE_OVERRIDE) { @@ -189,7 +203,7 @@ export class SelectModifierPhase extends BattlePhase { applyModifier(modifier, true); }); } else { - this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), typeOptions, modifierSelectCallback, this.getRerollCost(typeOptions, this.scene.lockModifierTiers)); + this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), this.typeOptions, modifierSelectCallback, this.getRerollCost(this.scene.lockModifierTiers)); } }, modifierType.selectFilter); } else { @@ -216,7 +230,7 @@ export class SelectModifierPhase extends BattlePhase { applyModifier(modifier!, true); // TODO: is the bang correct? }); } else { - this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), typeOptions, modifierSelectCallback, this.getRerollCost(typeOptions, this.scene.lockModifierTiers)); + this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), this.typeOptions, modifierSelectCallback, this.getRerollCost(this.scene.lockModifierTiers)); } }, pokemonModifierType.selectFilter, modifierType instanceof PokemonMoveModifierType ? (modifierType as PokemonMoveModifierType).moveSelectFilter : undefined, tmMoveId, isPpRestoreModifier); } @@ -226,7 +240,7 @@ export class SelectModifierPhase extends BattlePhase { return !cost!;// TODO: is the bang correct? }; - this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), typeOptions, modifierSelectCallback, this.getRerollCost(typeOptions, this.scene.lockModifierTiers)); + this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), this.typeOptions, modifierSelectCallback, this.getRerollCost(this.scene.lockModifierTiers)); } updateSeed(): void { @@ -237,13 +251,13 @@ export class SelectModifierPhase extends BattlePhase { return true; } - getRerollCost(typeOptions: ModifierTypeOption[], lockRarities: boolean): number { + getRerollCost(lockRarities: boolean): number { let baseValue = 0; if (Overrides.WAIVE_ROLL_FEE_OVERRIDE) { return baseValue; } else if (lockRarities) { const tierValues = [ 50, 125, 300, 750, 2000 ]; - for (const opt of typeOptions) { + for (const opt of this.typeOptions) { baseValue += tierValues[opt.type.tier ?? 0]; } } else { @@ -271,6 +285,16 @@ export class SelectModifierPhase extends BattlePhase { return getPlayerModifierTypeOptions(modifierCount, this.scene.getParty(), this.scene.lockModifierTiers ? this.modifierTiers : undefined, this.customModifierSettings); } + copy(): SelectModifierPhase { + return new SelectModifierPhase( + this.scene, + this.rerollCount, + this.modifierTiers, + { guaranteedModifierTypeOptions: this.typeOptions, rerollMultiplier: this.customModifierSettings?.rerollMultiplier, allowLuckUpgrades: false }, + true + ); + } + addModifier(modifier: Modifier): Promise { return this.scene.addModifier(modifier, false, true); } diff --git a/src/test/items/lock_capsule.test.ts b/src/test/items/lock_capsule.test.ts index 2667ecea2dc..0b6534b5eaf 100644 --- a/src/test/items/lock_capsule.test.ts +++ b/src/test/items/lock_capsule.test.ts @@ -1,7 +1,8 @@ import { Abilities } from "#app/enums/abilities"; import { Moves } from "#app/enums/moves"; -import { ModifierTypeOption, modifierTypes } from "#app/modifier/modifier-type"; +import { ModifierTier } from "#app/modifier/modifier-tier"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; +import { Mode } from "#app/ui/ui"; import GameManager from "#test/utils/gameManager"; import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -32,15 +33,16 @@ describe("Items - Lock Capsule", () => { }); it("doesn't set the cost of common tier items to 0", async () => { - await game.startBattle(); + await game.classicMode.startBattle(); + game.scene.overridePhase(new SelectModifierPhase(game.scene, 0, undefined, { guaranteedModifierTiers: [ ModifierTier.COMMON, ModifierTier.COMMON, ModifierTier.COMMON ], fillRemaining: false })); - game.move.select(Moves.SURF); - await game.phaseInterceptor.to(SelectModifierPhase, false); + game.onNextPrompt("SelectModifierPhase", Mode.MODIFIER_SELECT, () => { + const selectModifierPhase = game.scene.getCurrentPhase() as SelectModifierPhase; + const rerollCost = selectModifierPhase.getRerollCost(true); + expect(rerollCost).toBe(150); + }); - const rewards = game.scene.getCurrentPhase() as SelectModifierPhase; - const potion = new ModifierTypeOption(modifierTypes.POTION(), 0, 40); // Common tier item - const rerollCost = rewards.getRerollCost([ potion, potion, potion ], true); - - expect(rerollCost).toBe(150); + game.doSelectModifier(); + await game.phaseInterceptor.to("SelectModifierPhase"); }, 20000); }); diff --git a/src/test/phases/select-modifier-phase.test.ts b/src/test/phases/select-modifier-phase.test.ts index ea50c7e6524..a945aff055b 100644 --- a/src/test/phases/select-modifier-phase.test.ts +++ b/src/test/phases/select-modifier-phase.test.ts @@ -63,11 +63,11 @@ describe("SelectModifierPhase", () => { new ModifierTypeOption(modifierTypes.REVIVE(), 0, 1000) ]; - const selectModifierPhase1 = new SelectModifierPhase(scene); - const selectModifierPhase2 = new SelectModifierPhase(scene, 0, undefined, { rerollMultiplier: 2 }); + const selectModifierPhase1 = new SelectModifierPhase(scene, 0, undefined, { guaranteedModifierTypeOptions: options }); + const selectModifierPhase2 = new SelectModifierPhase(scene, 0, undefined, { guaranteedModifierTypeOptions: options, rerollMultiplier: 2 }); - const cost1 = selectModifierPhase1.getRerollCost(options, false); - const cost2 = selectModifierPhase2.getRerollCost(options, false); + const cost1 = selectModifierPhase1.getRerollCost(false); + const cost2 = selectModifierPhase2.getRerollCost(false); expect(cost2).toEqual(cost1 * 2); }); diff --git a/src/ui/modifier-select-ui-handler.ts b/src/ui/modifier-select-ui-handler.ts index f7e57b53193..0bae56c03b4 100644 --- a/src/ui/modifier-select-ui-handler.ts +++ b/src/ui/modifier-select-ui-handler.ts @@ -16,7 +16,7 @@ import { ShopCursorTarget } from "#app/enums/shop-cursor-target"; import { IntegerHolder } from "./../utils"; import Phaser from "phaser"; -export const SHOP_OPTIONS_ROW_LIMIT = 6; +export const SHOP_OPTIONS_ROW_LIMIT = 7; export default class ModifierSelectUiHandler extends AwaitableUiHandler { private modifierContainer: Phaser.GameObjects.Container; @@ -211,7 +211,7 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { const row = m < SHOP_OPTIONS_ROW_LIMIT ? 0 : 1; const col = m < SHOP_OPTIONS_ROW_LIMIT ? m : m - SHOP_OPTIONS_ROW_LIMIT; const rowOptions = shopTypeOptions.slice(row ? SHOP_OPTIONS_ROW_LIMIT : 0, row ? undefined : SHOP_OPTIONS_ROW_LIMIT); - const sliceWidth = (this.scene.game.canvas.width / SHOP_OPTIONS_ROW_LIMIT) / (rowOptions.length + 2); + const sliceWidth = (this.scene.game.canvas.width / 6) / (rowOptions.length + 2); const option = new ModifierOption(this.scene, sliceWidth * (col + 1) + (sliceWidth * 0.5), ((-this.scene.game.canvas.height / 12) - (this.scene.game.canvas.height / 32) - (40 - (28 * row - 1))), shopTypeOptions[m]); option.setScale(0.375); this.scene.add.existing(option); From 50ff6e703a6ff4613e85322bf790d45c221a8e0c Mon Sep 17 00:00:00 2001 From: PigeonBar <56974298+PigeonBar@users.noreply.github.com> Date: Wed, 16 Oct 2024 10:30:38 -0400 Subject: [PATCH 088/153] [P1 Bug] Fix several Destiny Bond crashes (#4665) * [P1 Bug] Fix several Destiny Bond crashes * PR Feedback --- src/data/move.ts | 12 +- src/field/pokemon.ts | 11 +- src/phases/faint-phase.ts | 28 ++- src/test/moves/destiny_bond.test.ts | 255 ++++++++++++++++++++++++++++ 4 files changed, 291 insertions(+), 15 deletions(-) create mode 100644 src/test/moves/destiny_bond.test.ts diff --git a/src/data/move.ts b/src/data/move.ts index b0078c32f12..6d0701b79a2 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -3834,8 +3834,8 @@ export class LastMoveDoublePowerAttr extends VariablePowerAttr { for (const p of pokemonActed) { const [ lastMove ] = p.getLastXMoves(1); - if (lastMove.result !== MoveResult.FAIL) { - if ((lastMove.result === MoveResult.SUCCESS) && (lastMove.move === this.move)) { + if (lastMove?.result !== MoveResult.FAIL) { + if ((lastMove?.result === MoveResult.SUCCESS) && (lastMove?.move === this.move)) { power.value *= 2; return true; } else { @@ -4736,7 +4736,7 @@ export class AddBattlerTagAttr extends MoveEffectAttr { } canApply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - if (!super.canApply(user, target, move, args) || (this.cancelOnFail === true && user.getLastXMoves(1)[0].result === MoveResult.FAIL)) { + if (!super.canApply(user, target, move, args) || (this.cancelOnFail === true && user.getLastXMoves(1)[0]?.result === MoveResult.FAIL)) { return false; } else { return true; @@ -5174,7 +5174,7 @@ export class AddArenaTagAttr extends MoveEffectAttr { return false; } - if ((move.chance < 0 || move.chance === 100 || user.randSeedInt(100) < move.chance) && user.getLastXMoves(1)[0].result === MoveResult.SUCCESS) { + if ((move.chance < 0 || move.chance === 100 || user.randSeedInt(100) < move.chance) && user.getLastXMoves(1)[0]?.result === MoveResult.SUCCESS) { user.scene.arena.addTag(this.tagType, this.turnCount, move.id, user.id, (this.selfSideTarget ? user : target).isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY); return true; } @@ -5249,7 +5249,7 @@ export class AddArenaTrapTagHitAttr extends AddArenaTagAttr { const moveChance = this.getMoveChance(user, target, move, this.selfTarget, true); const side = (this.selfSideTarget ? user : target).isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; const tag = user.scene.arena.getTagOnSide(this.tagType, side) as ArenaTrapTag; - if ((moveChance < 0 || moveChance === 100 || user.randSeedInt(100) < moveChance) && user.getLastXMoves(1)[0].result === MoveResult.SUCCESS) { + if ((moveChance < 0 || moveChance === 100 || user.randSeedInt(100) < moveChance) && user.getLastXMoves(1)[0]?.result === MoveResult.SUCCESS) { user.scene.arena.addTag(this.tagType, 0, move.id, user.id, side); if (!tag) { return true; @@ -5386,7 +5386,7 @@ export class AddPledgeEffectAttr extends AddArenaTagAttr { override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { // TODO: add support for `HIT` effect triggering in AddArenaTagAttr to remove the need for this check - if (user.getLastXMoves(1)[0].result !== MoveResult.SUCCESS) { + if (user.getLastXMoves(1)[0]?.result !== MoveResult.SUCCESS) { return false; } diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 8eca37f38ac..f3e9c66ed15 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -2810,15 +2810,16 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (this.isFainted()) { // set splice index here, so future scene queues happen before FaintedPhase this.scene.setPhaseQueueSplice(); - this.scene.unshiftPhase(new FaintPhase(this.scene, this.getBattlerIndex(), isOneHitKo)); + if (!isNullOrUndefined(destinyTag) && dmg) { + // Destiny Bond will activate during FaintPhase + this.scene.unshiftPhase(new FaintPhase(this.scene, this.getBattlerIndex(), isOneHitKo, destinyTag, source)); + } else { + this.scene.unshiftPhase(new FaintPhase(this.scene, this.getBattlerIndex(), isOneHitKo)); + } this.destroySubstitute(); this.resetSummonData(); } - if (dmg) { - destinyTag?.lapse(source, BattlerTagLapseType.CUSTOM); - } - return result; } } diff --git a/src/phases/faint-phase.ts b/src/phases/faint-phase.ts index 66bb22899be..60dbbbfea0f 100644 --- a/src/phases/faint-phase.ts +++ b/src/phases/faint-phase.ts @@ -1,12 +1,12 @@ import BattleScene from "#app/battle-scene"; import { BattlerIndex, BattleType } from "#app/battle"; import { applyPostFaintAbAttrs, PostFaintAbAttr, applyPostKnockOutAbAttrs, PostKnockOutAbAttr, applyPostVictoryAbAttrs, PostVictoryAbAttr } from "#app/data/ability"; -import { BattlerTagLapseType } from "#app/data/battler-tags"; +import { BattlerTagLapseType, DestinyBondTag } from "#app/data/battler-tags"; import { battleSpecDialogue } from "#app/data/dialogue"; import { allMoves, PostVictoryStatStageChangeAttr } from "#app/data/move"; import { BattleSpec } from "#app/enums/battle-spec"; import { StatusEffect } from "#app/enums/status-effect"; -import { PokemonMove, EnemyPokemon, PlayerPokemon, HitResult } from "#app/field/pokemon"; +import Pokemon, { PokemonMove, EnemyPokemon, PlayerPokemon, HitResult } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { PokemonInstantReviveModifier } from "#app/modifier/modifier"; import i18next from "i18next"; @@ -19,19 +19,39 @@ import { SwitchPhase } from "./switch-phase"; import { VictoryPhase } from "./victory-phase"; import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms"; import { SwitchType } from "#enums/switch-type"; +import { isNullOrUndefined } from "#app/utils"; export class FaintPhase extends PokemonPhase { + /** + * Whether or not enduring (for this phase's purposes, Reviver Seed) should be prevented + */ private preventEndure: boolean; - constructor(scene: BattleScene, battlerIndex: BattlerIndex, preventEndure?: boolean) { + /** + * Destiny Bond tag belonging to the currently fainting Pokemon, if applicable + */ + private destinyTag?: DestinyBondTag; + + /** + * The source Pokemon that dealt fatal damage and should get KO'd by Destiny Bond, if applicable + */ + private source?: Pokemon; + + constructor(scene: BattleScene, battlerIndex: BattlerIndex, preventEndure: boolean = false, destinyTag?: DestinyBondTag, source?: Pokemon) { super(scene, battlerIndex); - this.preventEndure = preventEndure!; // TODO: is this bang correct? + this.preventEndure = preventEndure; + this.destinyTag = destinyTag; + this.source = source; } start() { super.start(); + if (!isNullOrUndefined(this.destinyTag) && !isNullOrUndefined(this.source)) { + this.destinyTag.lapse(this.source, BattlerTagLapseType.CUSTOM); + } + if (!this.preventEndure) { const instantReviveModifier = this.scene.applyModifier(PokemonInstantReviveModifier, this.player, this.getPokemon()) as PokemonInstantReviveModifier; diff --git a/src/test/moves/destiny_bond.test.ts b/src/test/moves/destiny_bond.test.ts new file mode 100644 index 00000000000..4b4c8782862 --- /dev/null +++ b/src/test/moves/destiny_bond.test.ts @@ -0,0 +1,255 @@ +import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag"; +import { allMoves } from "#app/data/move"; +import { Abilities } from "#enums/abilities"; +import { ArenaTagType } from "#enums/arena-tag-type"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { BattlerIndex } from "#app/battle"; +import { StatusEffect } from "#enums/status-effect"; +import { PokemonInstantReviveModifier } from "#app/modifier/modifier"; + + +describe("Moves - Destiny Bond", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + const defaultParty = [ Species.BULBASAUR, Species.SQUIRTLE ]; + const enemyFirst = [ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]; + const playerFirst = [ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override.battleType("single") + .ability(Abilities.UNNERVE) // Pre-emptively prevent flakiness from opponent berries + .enemySpecies(Species.RATTATA) + .enemyAbility(Abilities.RUN_AWAY) + .startingLevel(100) // Make sure tested moves KO + .enemyLevel(5) + .enemyMoveset(Moves.DESTINY_BOND); + }); + + it("should KO the opponent on the same turn", async () => { + const moveToUse = Moves.TACKLE; + + game.override.moveset(moveToUse); + await game.classicMode.startBattle(defaultParty); + + const enemyPokemon = game.scene.getEnemyPokemon(); + const playerPokemon = game.scene.getPlayerPokemon(); + + game.move.select(moveToUse); + await game.setTurnOrder(enemyFirst); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemyPokemon?.isFainted()).toBe(true); + expect(playerPokemon?.isFainted()).toBe(true); + }); + + it("should KO the opponent on the next turn", async () => { + const moveToUse = Moves.TACKLE; + + game.override.moveset([ Moves.SPLASH, moveToUse ]); + await game.classicMode.startBattle(defaultParty); + + const enemyPokemon = game.scene.getEnemyPokemon(); + const playerPokemon = game.scene.getPlayerPokemon(); + + // Turn 1: Enemy uses Destiny Bond and doesn't faint + game.move.select(Moves.SPLASH); + await game.setTurnOrder(playerFirst); + await game.toNextTurn(); + + expect(enemyPokemon?.isFainted()).toBe(false); + expect(playerPokemon?.isFainted()).toBe(false); + + // Turn 2: Player KO's the enemy before the enemy's turn + game.move.select(moveToUse); + await game.setTurnOrder(playerFirst); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemyPokemon?.isFainted()).toBe(true); + expect(playerPokemon?.isFainted()).toBe(true); + }); + + it("should fail if used twice in a row", async () => { + const moveToUse = Moves.TACKLE; + + game.override.moveset([ Moves.SPLASH, moveToUse ]); + await game.classicMode.startBattle(defaultParty); + + const enemyPokemon = game.scene.getEnemyPokemon(); + const playerPokemon = game.scene.getPlayerPokemon(); + + // Turn 1: Enemy uses Destiny Bond and doesn't faint + game.move.select(Moves.SPLASH); + await game.setTurnOrder(enemyFirst); + await game.toNextTurn(); + + expect(enemyPokemon?.isFainted()).toBe(false); + expect(playerPokemon?.isFainted()).toBe(false); + + // Turn 2: Enemy should fail Destiny Bond then get KO'd + game.move.select(moveToUse); + await game.setTurnOrder(enemyFirst); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemyPokemon?.isFainted()).toBe(true); + expect(playerPokemon?.isFainted()).toBe(false); + }); + + it("should not KO the opponent if the user dies to weather", async () => { + // Opponent will be reduced to 1 HP by False Swipe, then faint to Sandstorm + const moveToUse = Moves.FALSE_SWIPE; + + game.override.moveset(moveToUse) + .ability(Abilities.SAND_STREAM); + await game.classicMode.startBattle(defaultParty); + + const enemyPokemon = game.scene.getEnemyPokemon(); + const playerPokemon = game.scene.getPlayerPokemon(); + + game.move.select(moveToUse); + await game.setTurnOrder(enemyFirst); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemyPokemon?.isFainted()).toBe(true); + expect(playerPokemon?.isFainted()).toBe(false); + }); + + it("should not KO the opponent if the user had another turn", async () => { + const moveToUse = Moves.TACKLE; + + game.override.moveset([ Moves.SPORE, moveToUse ]); + await game.classicMode.startBattle(defaultParty); + + const enemyPokemon = game.scene.getEnemyPokemon(); + const playerPokemon = game.scene.getPlayerPokemon(); + + // Turn 1: Enemy uses Destiny Bond and doesn't faint + game.move.select(Moves.SPORE); + await game.setTurnOrder(enemyFirst); + await game.toNextTurn(); + + expect(enemyPokemon?.isFainted()).toBe(false); + expect(playerPokemon?.isFainted()).toBe(false); + expect(enemyPokemon?.status?.effect).toBe(StatusEffect.SLEEP); + + // Turn 2: Enemy should skip a turn due to sleep, then get KO'd + game.move.select(moveToUse); + await game.setTurnOrder(enemyFirst); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemyPokemon?.isFainted()).toBe(true); + expect(playerPokemon?.isFainted()).toBe(false); + }); + + it("should not KO an ally", async () => { + game.override.moveset([ Moves.DESTINY_BOND, Moves.CRUNCH ]) + .battleType("double"); + await game.classicMode.startBattle([ Species.SHEDINJA, Species.BULBASAUR, Species.SQUIRTLE ]); + + const enemyPokemon0 = game.scene.getEnemyField()[0]; + const enemyPokemon1 = game.scene.getEnemyField()[1]; + const playerPokemon0 = game.scene.getPlayerField()[0]; + const playerPokemon1 = game.scene.getPlayerField()[1]; + + // Shedinja uses Destiny Bond, then ally Bulbasaur KO's Shedinja with Crunch + game.move.select(Moves.DESTINY_BOND, 0); + game.move.select(Moves.CRUNCH, 1, BattlerIndex.PLAYER); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2 ]); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemyPokemon0?.isFainted()).toBe(false); + expect(enemyPokemon1?.isFainted()).toBe(false); + expect(playerPokemon0?.isFainted()).toBe(true); + expect(playerPokemon1?.isFainted()).toBe(false); + }); + + it("should not cause a crash if the user is KO'd by Ceaseless Edge", async () => { + const moveToUse = Moves.CEASELESS_EDGE; + vi.spyOn(allMoves[moveToUse], "accuracy", "get").mockReturnValue(100); + + game.override.moveset(moveToUse); + await game.classicMode.startBattle(defaultParty); + + const enemyPokemon = game.scene.getEnemyPokemon(); + const playerPokemon = game.scene.getPlayerPokemon(); + + game.move.select(moveToUse); + await game.setTurnOrder(enemyFirst); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemyPokemon?.isFainted()).toBe(true); + expect(playerPokemon?.isFainted()).toBe(true); + + // Ceaseless Edge spikes effect should still activate + const tagAfter = game.scene.arena.getTagOnSide(ArenaTagType.SPIKES, ArenaTagSide.ENEMY) as ArenaTrapTag; + expect(tagAfter.tagType).toBe(ArenaTagType.SPIKES); + expect(tagAfter.layers).toBe(1); + }); + + it("should not cause a crash if the user is KO'd by Pledge moves", async () => { + game.override.moveset([ Moves.GRASS_PLEDGE, Moves.WATER_PLEDGE ]) + .battleType("double"); + await game.classicMode.startBattle(defaultParty); + + const enemyPokemon0 = game.scene.getEnemyField()[0]; + const enemyPokemon1 = game.scene.getEnemyField()[1]; + const playerPokemon0 = game.scene.getPlayerField()[0]; + const playerPokemon1 = game.scene.getPlayerField()[1]; + + game.move.select(Moves.GRASS_PLEDGE, 0, BattlerIndex.ENEMY); + game.move.select(Moves.WATER_PLEDGE, 1, BattlerIndex.ENEMY); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER, BattlerIndex.PLAYER_2 ]); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemyPokemon0?.isFainted()).toBe(true); + expect(enemyPokemon1?.isFainted()).toBe(false); + expect(playerPokemon0?.isFainted()).toBe(false); + expect(playerPokemon1?.isFainted()).toBe(true); + + // Pledge secondary effect should still activate + const tagAfter = game.scene.arena.getTagOnSide(ArenaTagType.GRASS_WATER_PLEDGE, ArenaTagSide.ENEMY) as ArenaTrapTag; + expect(tagAfter.tagType).toBe(ArenaTagType.GRASS_WATER_PLEDGE); + }); + + /** + * In particular, this should prevent something like + * {@link https://github.com/pagefaultgames/pokerogue/issues/4219} + * from occurring with fainting by KO'ing a Destiny Bond user with U-Turn. + */ + it("should not allow the opponent to revive via Reviver Seed", async () => { + const moveToUse = Moves.TACKLE; + + game.override.moveset(moveToUse) + .startingHeldItems([{ name: "REVIVER_SEED" }]); + await game.classicMode.startBattle(defaultParty); + + const enemyPokemon = game.scene.getEnemyPokemon(); + const playerPokemon = game.scene.getPlayerPokemon(); + + game.move.select(moveToUse); + await game.setTurnOrder(enemyFirst); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemyPokemon?.isFainted()).toBe(true); + expect(playerPokemon?.isFainted()).toBe(true); + + // Check that the Tackle user's Reviver Seed did not activate + const revSeeds = game.scene.getModifiers(PokemonInstantReviveModifier).filter(m => m.pokemonId === playerPokemon?.id); + expect(revSeeds.length).toBe(1); + }); +}); From c6ec01958ce299b990227cfb01c98d2c9a8f02d5 Mon Sep 17 00:00:00 2001 From: PigeonBar <56974298+PigeonBar@users.noreply.github.com> Date: Wed, 16 Oct 2024 10:31:32 -0400 Subject: [PATCH 089/153] [Bug] Fix for Expert Breeder's Pokemon being invisible and IV scanner in safari zone (#4661) * [Bug] Potential fix for Expert Breeder's Pokemon being invisible * PR Feedback * Consistency with await --- src/battle-scene.ts | 2 +- .../encounters/a-trainers-test-encounter.ts | 2 +- .../encounters/absolute-avarice-encounter.ts | 6 +- .../encounters/dancing-lessons-encounter.ts | 4 +- .../encounters/dark-deal-encounter.ts | 2 +- .../encounters/fiery-fallout-encounter.ts | 3 +- .../encounters/fun-and-games-encounter.ts | 2 +- .../global-trade-system-encounter.ts | 2 +- .../encounters/lost-at-sea-encounter.ts | 2 +- .../mysterious-challengers-encounter.ts | 18 ++--- .../encounters/mysterious-chest-encounter.ts | 2 +- .../encounters/safari-zone-encounter.ts | 23 +++++-- .../shady-vitamin-dealer-encounter.ts | 4 +- .../teleporting-hijinks-encounter.ts | 2 +- .../the-expert-pokemon-breeder-encounter.ts | 6 +- .../encounters/the-strong-stuff-encounter.ts | 2 +- .../the-winstrate-challenge-encounter.ts | 4 +- .../encounters/training-session-encounter.ts | 6 +- .../encounters/trash-to-treasure-encounter.ts | 6 +- .../the-expert-breeder-encounter.test.ts | 69 ++++++++++++++++++- 20 files changed, 120 insertions(+), 47 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 75a19b8efaa..6a70688dbf1 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -789,7 +789,7 @@ export default class BattleScene extends SceneBase { } getEnemyParty(): EnemyPokemon[] { - return this.currentBattle?.enemyParty || []; + return this.currentBattle?.enemyParty ?? []; } getEnemyPokemon(): EnemyPokemon | undefined { diff --git a/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts b/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts index 4f3420f5194..56d80c9598c 100644 --- a/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts +++ b/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts @@ -154,7 +154,7 @@ export const ATrainersTestEncounter: MysteryEncounter = }; encounter.setDialogueToken("eggType", i18next.t(`${namespace}:eggTypes.epic`)); setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.SACRED_ASH ], guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ULTRA ], fillRemaining: true }, [ eggOptions ]); - return initBattleWithEnemyConfig(scene, config); + await initBattleWithEnemyConfig(scene, config); } ) .withSimpleOption( diff --git a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts index 70b2d50fe99..c53b802bb22 100644 --- a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts +++ b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts @@ -286,7 +286,7 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = ignorePp: true }); - transitionMysteryEncounterIntroVisuals(scene, true, true, 500); + await transitionMysteryEncounterIntroVisuals(scene, true, true, 500); await initBattleWithEnemyConfig(scene, encounter.enemyPartyConfigs[0]); }) .build() @@ -328,7 +328,7 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = }); await scene.updateModifiers(true); - transitionMysteryEncounterIntroVisuals(scene, true, true, 500); + await transitionMysteryEncounterIntroVisuals(scene, true, true, 500); leaveEncounterWithoutBattle(scene, true); }) .build() @@ -359,7 +359,7 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = greedent.moveset = [ new PokemonMove(Moves.THRASH), new PokemonMove(Moves.BODY_PRESS), new PokemonMove(Moves.STUFF_CHEEKS), new PokemonMove(Moves.SLACK_OFF) ]; greedent.passive = true; - transitionMysteryEncounterIntroVisuals(scene, true, true, 500); + await transitionMysteryEncounterIntroVisuals(scene, true, true, 500); await catchPokemon(scene, greedent, null, PokeballType.POKEBALL, false); leaveEncounterWithoutBattle(scene, true); }) diff --git a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts index 0f784739777..d7f71194f48 100644 --- a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts +++ b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts @@ -228,7 +228,7 @@ export const DancingLessonsEncounter: MysteryEncounter = }) .withOptionPhase(async (scene: BattleScene) => { // Learn its Dance - hideOricorioPokemon(scene); + await hideOricorioPokemon(scene); leaveEncounterWithoutBattle(scene, true); }) .build() @@ -303,7 +303,7 @@ export const DancingLessonsEncounter: MysteryEncounter = } } - hideOricorioPokemon(scene); + await hideOricorioPokemon(scene); await catchPokemon(scene, oricorio, null, PokeballType.POKEBALL, false); leaveEncounterWithoutBattle(scene, true); }) diff --git a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts index 5ad6630386f..7f199b5487c 100644 --- a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts +++ b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts @@ -182,7 +182,7 @@ export const DarkDealEncounter: MysteryEncounter = const config: EnemyPartyConfig = { pokemonConfigs: [ pokemonConfig ], }; - return initBattleWithEnemyConfig(scene, config); + await initBattleWithEnemyConfig(scene, config); }) .build() ) diff --git a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts index d44e7bae596..d306206159a 100644 --- a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts +++ b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts @@ -222,12 +222,13 @@ export const FieryFalloutEncounter: MysteryEncounter = ], }) .withPreOptionPhase(async (scene: BattleScene) => { + // Do NOT await this, to prevent player from repeatedly pressing options transitionMysteryEncounterIntroVisuals(scene, false, false, 2000); }) .withOptionPhase(async (scene: BattleScene) => { // Fire types help calm the Volcarona const encounter = scene.currentBattle.mysteryEncounter!; - transitionMysteryEncounterIntroVisuals(scene); + await transitionMysteryEncounterIntroVisuals(scene); setEncounterRewards(scene, { fillRemaining: true }, undefined, diff --git a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts index 549faa01fa1..b843a929c08 100644 --- a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts +++ b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts @@ -152,7 +152,7 @@ export const FunAndGamesEncounter: MysteryEncounter = }, async (scene: BattleScene) => { // Leave encounter with no rewards or exp - transitionMysteryEncounterIntroVisuals(scene, true, true); + await transitionMysteryEncounterIntroVisuals(scene, true, true); leaveEncounterWithoutBattle(scene, true); return true; } diff --git a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts index bafc1901e5e..376bdf0c95d 100644 --- a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts +++ b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts @@ -399,7 +399,7 @@ export const GlobalTradeSystemEncounter: MysteryEncounter = if (modifier.stackCount === 0) { scene.removeModifier(modifier); } - scene.updateModifiers(true, true); + await scene.updateModifiers(true, true); // Generate a trainer name const traderName = generateRandomTraderName(); diff --git a/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts b/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts index 8fd46982dc1..8e7ea52a967 100644 --- a/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts +++ b/src/data/mystery-encounters/encounters/lost-at-sea-encounter.ts @@ -129,7 +129,7 @@ export const LostAtSeaEncounter: MysteryEncounter = MysteryEncounterBuilder.with * * @param scene Battle scene */ -async function handlePokemonGuidingYouPhase(scene: BattleScene) { +function handlePokemonGuidingYouPhase(scene: BattleScene) { const laprasSpecies = getPokemonSpecies(Species.LAPRAS); const { mysteryEncounter } = scene.currentBattle; diff --git a/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts b/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts index fb25976ebd8..f282064bb94 100644 --- a/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts +++ b/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts @@ -147,11 +147,11 @@ export const MysteriousChallengersEncounter: MysteryEncounter = setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.TM_COMMON, modifierTypes.TM_GREAT, modifierTypes.MEMORY_MUSHROOM ], fillRemaining: true }); // Seed offsets to remove possibility of different trainers having exact same teams - let ret; + let initBattlePromise: Promise; scene.executeWithSeedOffset(() => { - ret = initBattleWithEnemyConfig(scene, config); + initBattlePromise = initBattleWithEnemyConfig(scene, config); }, scene.currentBattle.waveIndex * 10); - return ret; + await initBattlePromise!; } ) .withSimpleOption( @@ -172,11 +172,11 @@ export const MysteriousChallengersEncounter: MysteryEncounter = setEncounterRewards(scene, { guaranteedModifierTiers: [ ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.GREAT, ModifierTier.GREAT ], fillRemaining: true }); // Seed offsets to remove possibility of different trainers having exact same teams - let ret; + let initBattlePromise: Promise; scene.executeWithSeedOffset(() => { - ret = initBattleWithEnemyConfig(scene, config); + initBattlePromise = initBattleWithEnemyConfig(scene, config); }, scene.currentBattle.waveIndex * 100); - return ret; + await initBattlePromise!; } ) .withSimpleOption( @@ -200,11 +200,11 @@ export const MysteriousChallengersEncounter: MysteryEncounter = setEncounterRewards(scene, { guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.GREAT ], fillRemaining: true }); // Seed offsets to remove possibility of different trainers having exact same teams - let ret; + let initBattlePromise: Promise; scene.executeWithSeedOffset(() => { - ret = initBattleWithEnemyConfig(scene, config); + initBattlePromise = initBattleWithEnemyConfig(scene, config); }, scene.currentBattle.waveIndex * 1000); - return ret; + await initBattlePromise!; } ) .withOutroDialogue([ diff --git a/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts b/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts index 1eb1c4cb13e..693d935ae17 100644 --- a/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts +++ b/src/data/mystery-encounters/encounters/mysterious-chest-encounter.ts @@ -184,7 +184,7 @@ export const MysteriousChestEncounter: MysteryEncounter = scene.unshiftPhase(new GameOverPhase(scene)); } else { // Show which Pokemon was KOed, then start battle against Gimmighoul - transitionMysteryEncounterIntroVisuals(scene, true, true, 500); + await transitionMysteryEncounterIntroVisuals(scene, true, true, 500); setEncounterRewards(scene, { fillRemaining: true }); await initBattleWithEnemyConfig(scene, encounter.enemyPartyConfigs[0]); } diff --git a/src/data/mystery-encounters/encounters/safari-zone-encounter.ts b/src/data/mystery-encounters/encounters/safari-zone-encounter.ts index c6b04b7aca6..0fec305333e 100644 --- a/src/data/mystery-encounters/encounters/safari-zone-encounter.ts +++ b/src/data/mystery-encounters/encounters/safari-zone-encounter.ts @@ -303,13 +303,22 @@ async function summonSafariPokemon(scene: BattleScene) { scene.unshiftPhase(new SummonPhase(scene, 0, false)); encounter.setDialogueToken("pokemonName", getPokemonNameWithAffix(pokemon)); - showEncounterText(scene, getEncounterText(scene, "battle:singleWildAppeared") ?? "", null, 1500, false) - .then(() => { - const ivScannerModifier = scene.findModifier(m => m instanceof IvScannerModifier); - if (ivScannerModifier) { - scene.pushPhase(new ScanIvsPhase(scene, pokemon.getBattlerIndex(), Math.min(ivScannerModifier.getStackCount() * 2, 6))); - } - }); + // TODO: If we await this showEncounterText, then the text will display without + // the wild Pokemon on screen, but if we don't await it, then the text never + // shows up and the IV scanner breaks. For now, we place the IV scanner code + // separately so that at least the IV scanner works. + // + // showEncounterText(scene, getEncounterText(scene, "battle:singleWildAppeared") ?? "", null, 0, false) + // .then(() => { + // const ivScannerModifier = scene.findModifier(m => m instanceof IvScannerModifier); + // if (ivScannerModifier) { + // scene.pushPhase(new ScanIvsPhase(scene, pokemon.getBattlerIndex(), Math.min(ivScannerModifier.getStackCount() * 2, 6))); + // } + // }); + const ivScannerModifier = scene.findModifier(m => m instanceof IvScannerModifier); + if (ivScannerModifier) { + scene.pushPhase(new ScanIvsPhase(scene, pokemon.getBattlerIndex(), Math.min(ivScannerModifier.getStackCount() * 2, 6))); + } } function throwPokeball(scene: BattleScene, pokemon: EnemyPokemon): Promise { diff --git a/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts b/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts index c70048ade07..5b609a2b1c3 100644 --- a/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts +++ b/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts @@ -142,7 +142,7 @@ export const ShadyVitaminDealerEncounter: MysteryEncounter = encounter.setDialogueToken("newNature", getNatureName(newNature)); queueEncounterMessage(scene, `${namespace}:cheap_side_effects`); setEncounterExp(scene, [ chosenPokemon.id ], 100); - chosenPokemon.updateInfo(); + await chosenPokemon.updateInfo(); }) .build() ) @@ -204,7 +204,7 @@ export const ShadyVitaminDealerEncounter: MysteryEncounter = queueEncounterMessage(scene, `${namespace}:no_bad_effects`); setEncounterExp(scene, [ chosenPokemon.id ], 100); - chosenPokemon.updateInfo(); + await chosenPokemon.updateInfo(); }) .build() ) diff --git a/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts b/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts index 01e241f63d4..e8f11f02e18 100644 --- a/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts +++ b/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts @@ -149,7 +149,7 @@ export const TeleportingHijinksEncounter: MysteryEncounter = const magnet = generateModifierTypeOption(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [ Type.STEEL ])!; const metalCoat = generateModifierTypeOption(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [ Type.ELECTRIC ])!; setEncounterRewards(scene, { guaranteedModifierTypeOptions: [ magnet, metalCoat ], fillRemaining: true }); - transitionMysteryEncounterIntroVisuals(scene, true, true); + await transitionMysteryEncounterIntroVisuals(scene, true, true); await initBattleWithEnemyConfig(scene, config); } ) diff --git a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts index 0ac82243862..7bba603728b 100644 --- a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts @@ -245,7 +245,7 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = } encounter.onGameOver = onGameOver; - initBattleWithEnemyConfig(scene, config); + await initBattleWithEnemyConfig(scene, config); }) .withPostOptionPhase(async (scene: BattleScene) => { await doPostEncounterCleanup(scene); @@ -297,7 +297,7 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = } encounter.onGameOver = onGameOver; - initBattleWithEnemyConfig(scene, config); + await initBattleWithEnemyConfig(scene, config); }) .withPostOptionPhase(async (scene: BattleScene) => { await doPostEncounterCleanup(scene); @@ -349,7 +349,7 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = } encounter.onGameOver = onGameOver; - initBattleWithEnemyConfig(scene, config); + await initBattleWithEnemyConfig(scene, config); }) .withPostOptionPhase(async (scene: BattleScene) => { await doPostEncounterCleanup(scene); diff --git a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts index 7ee57d36027..03cf86d06a5 100644 --- a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts @@ -201,7 +201,7 @@ export const TheStrongStuffEncounter: MysteryEncounter = }); encounter.dialogue.outro = []; - transitionMysteryEncounterIntroVisuals(scene, true, true, 500); + await transitionMysteryEncounterIntroVisuals(scene, true, true, 500); await initBattleWithEnemyConfig(scene, encounter.enemyPartyConfigs[0]); } ) diff --git a/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts b/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts index c7cb23fe6f8..bf322802f81 100644 --- a/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-winstrate-challenge-encounter.ts @@ -111,8 +111,8 @@ export const TheWinstrateChallengeEncounter: MysteryEncounter = }, async (scene: BattleScene) => { // Spawn 5 trainer battles back to back with Macho Brace in rewards - scene.currentBattle.mysteryEncounter!.doContinueEncounter = (scene: BattleScene) => { - return endTrainerBattleAndShowDialogue(scene); + scene.currentBattle.mysteryEncounter!.doContinueEncounter = async (scene: BattleScene) => { + await endTrainerBattleAndShowDialogue(scene); }; await transitionMysteryEncounterIntroVisuals(scene, true, false); await spawnNextTrainerOrEndEncounter(scene); diff --git a/src/data/mystery-encounters/encounters/training-session-encounter.ts b/src/data/mystery-encounters/encounters/training-session-encounter.ts index 10bb956636b..9f80bbbffde 100644 --- a/src/data/mystery-encounters/encounters/training-session-encounter.ts +++ b/src/data/mystery-encounters/encounters/training-session-encounter.ts @@ -162,7 +162,7 @@ export const TrainingSessionEncounter: MysteryEncounter = setEncounterRewards(scene, { fillRemaining: true }, undefined, onBeforeRewardsPhase); - return initBattleWithEnemyConfig(scene, config); + await initBattleWithEnemyConfig(scene, config); }) .build() ) @@ -238,7 +238,7 @@ export const TrainingSessionEncounter: MysteryEncounter = setEncounterRewards(scene, { fillRemaining: true }, undefined, onBeforeRewardsPhase); - return initBattleWithEnemyConfig(scene, config); + await initBattleWithEnemyConfig(scene, config); }) .build() ) @@ -351,7 +351,7 @@ export const TrainingSessionEncounter: MysteryEncounter = setEncounterRewards(scene, { fillRemaining: true }, undefined, onBeforeRewardsPhase); - return initBattleWithEnemyConfig(scene, config); + await initBattleWithEnemyConfig(scene, config); }) .build() ) diff --git a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts index c2a0426bceb..2b3b38b2164 100644 --- a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts +++ b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts @@ -105,7 +105,7 @@ export const TrashToTreasureEncounter: MysteryEncounter = }) .withOptionPhase(async (scene: BattleScene) => { // Gain 2 Leftovers and 2 Shell Bell - transitionMysteryEncounterIntroVisuals(scene); + await transitionMysteryEncounterIntroVisuals(scene); await tryApplyDigRewardItems(scene); const blackSludge = generateModifierType(scene, modifierTypes.MYSTERY_ENCOUNTER_BLACK_SLUDGE, [ SHOP_ITEM_COST_MULTIPLIER ]); @@ -136,7 +136,7 @@ export const TrashToTreasureEncounter: MysteryEncounter = // Investigate garbage, battle Gmax Garbodor scene.setFieldScale(0.75); await showEncounterText(scene, `${namespace}:option.2.selected_2`); - transitionMysteryEncounterIntroVisuals(scene); + await transitionMysteryEncounterIntroVisuals(scene); const encounter = scene.currentBattle.mysteryEncounter!; @@ -222,7 +222,7 @@ async function tryApplyDigRewardItems(scene: BattleScene) { await showEncounterText(scene, i18next.t("battle:rewardGainCount", { modifierName: shellBell.name, count: 2 }), null, undefined, true); } -async function doGarbageDig(scene: BattleScene) { +function doGarbageDig(scene: BattleScene) { scene.playSound("battle_anims/PRSFX- Dig2"); scene.time.delayedCall(SOUND_EFFECT_WAIT_TIME, () => { scene.playSound("battle_anims/PRSFX- Dig2"); diff --git a/src/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts b/src/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts index bbb4f249feb..a3a43815ec6 100644 --- a/src/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/the-expert-breeder-encounter.test.ts @@ -124,10 +124,31 @@ describe("The Expert Pokémon Breeder - Mystery Encounter", () => { }); }); - it("should start battle against the trainer", async () => { + it("should start battle against the trainer with correctly loaded assets", async () => { await game.runToMysteryEncounter(MysteryEncounterType.THE_EXPERT_POKEMON_BREEDER, defaultParty); + + let successfullyLoaded = false; + vi.spyOn(scene, "getEnemyParty").mockImplementation(() => { + const ace = scene.currentBattle?.enemyParty[0]; + if (ace) { + // Pretend that loading assets takes an extra 500ms + vi.spyOn(ace, "loadAssets").mockImplementation(() => new Promise(resolve => { + setTimeout(() => { + successfullyLoaded = true; + resolve(); + }, 500); + })); + } + + return scene.currentBattle?.enemyParty ?? []; + }); + await runMysteryEncounterToEnd(game, 1, undefined, true); + // Check that assets are successfully loaded + expect(successfullyLoaded).toBe(true); + + // Check usual battle stuff expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(scene.currentBattle.trainer).toBeDefined(); expect(scene.currentBattle.mysteryEncounter?.encounterMode).toBe(MysteryEncounterMode.TRAINER_BATTLE); @@ -182,10 +203,31 @@ describe("The Expert Pokémon Breeder - Mystery Encounter", () => { }); }); - it("should start battle against the trainer", async () => { + it("should start battle against the trainer with correctly loaded assets", async () => { await game.runToMysteryEncounter(MysteryEncounterType.THE_EXPERT_POKEMON_BREEDER, defaultParty); + + let successfullyLoaded = false; + vi.spyOn(scene, "getEnemyParty").mockImplementation(() => { + const ace = scene.currentBattle?.enemyParty[0]; + if (ace) { + // Pretend that loading assets takes an extra 500ms + vi.spyOn(ace, "loadAssets").mockImplementation(() => new Promise(resolve => { + setTimeout(() => { + successfullyLoaded = true; + resolve(); + }, 500); + })); + } + + return scene.currentBattle?.enemyParty ?? []; + }); + await runMysteryEncounterToEnd(game, 2, undefined, true); + // Check that assets are successfully loaded + expect(successfullyLoaded).toBe(true); + + // Check usual battle stuff expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(scene.currentBattle.trainer).toBeDefined(); expect(scene.currentBattle.mysteryEncounter?.encounterMode).toBe(MysteryEncounterMode.TRAINER_BATTLE); @@ -240,10 +282,31 @@ describe("The Expert Pokémon Breeder - Mystery Encounter", () => { }); }); - it("should start battle against the trainer", async () => { + it("should start battle against the trainer with correctly loaded assets", async () => { await game.runToMysteryEncounter(MysteryEncounterType.THE_EXPERT_POKEMON_BREEDER, defaultParty); + + let successfullyLoaded = false; + vi.spyOn(scene, "getEnemyParty").mockImplementation(() => { + const ace = scene.currentBattle?.enemyParty[0]; + if (ace) { + // Pretend that loading assets takes an extra 500ms + vi.spyOn(ace, "loadAssets").mockImplementation(() => new Promise(resolve => { + setTimeout(() => { + successfullyLoaded = true; + resolve(); + }, 500); + })); + } + + return scene.currentBattle?.enemyParty ?? []; + }); + await runMysteryEncounterToEnd(game, 3, undefined, true); + // Check that assets are successfully loaded + expect(successfullyLoaded).toBe(true); + + // Check usual battle stuff expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(scene.currentBattle.trainer).toBeDefined(); expect(scene.currentBattle.mysteryEncounter?.encounterMode).toBe(MysteryEncounterMode.TRAINER_BATTLE); From 2caa09f246e157329fe3c73130c814db2d4410f6 Mon Sep 17 00:00:00 2001 From: Mumble <171087428+frutescens@users.noreply.github.com> Date: Wed, 16 Oct 2024 07:38:12 -0700 Subject: [PATCH 090/153] [Move] Fully Implement Secret Power (#4647) * initial work * move go * biomes for damo * more cleanup * added effect for space * test * balance change 1 * i'm silly * fixed effect cahnce * secret power atr * Apply suggestions from code review Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * got tests to work + added final balance biomes * added documentation * Apply suggestions from code review Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/data/move.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --------- Co-authored-by: frutescens Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/data/move.ts | 160 +++++++++++++++++++++++++++- src/test/moves/secret_power.test.ts | 89 ++++++++++++++++ 2 files changed, 247 insertions(+), 2 deletions(-) create mode 100644 src/test/moves/secret_power.test.ts diff --git a/src/data/move.ts b/src/data/move.ts index 6d0701b79a2..448008b733c 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -1024,7 +1024,7 @@ export class MoveEffectAttr extends MoveAttr { applyAbAttrs(MoveEffectChanceMultiplierAbAttr, user, null, false, moveChance, move, target, selfEffect, showAbility); - if (!move.hasAttr(FlinchAttr) || moveChance.value <= move.chance) { + if ((!move.hasAttr(FlinchAttr) || moveChance.value <= move.chance) && !move.hasAttr(SecretPowerAttr)) { const userSide = user.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; user.scene.arena.applyTagsForSide(ArenaTagType.WATER_FIRE_PLEDGE, userSide, false, moveChance); } @@ -2875,6 +2875,162 @@ export class StatStageChangeAttr extends MoveEffectAttr { } } +/** + * Attribute used to determine the Biome/Terrain-based secondary effect of Secret Power + */ +export class SecretPowerAttr extends MoveEffectAttr { + constructor() { + super(false); + } + + /** + * Used to determine if the move should apply a secondary effect based on Secret Power's 30% chance + * @returns `true` if the move's secondary effect should apply + */ + override canApply(user: Pokemon, target: Pokemon, move: Move, args?: any[]): boolean { + this.effectChanceOverride = move.chance; + const moveChance = this.getMoveChance(user, target, move, this.selfTarget); + if (moveChance < 0 || moveChance === 100 || user.randSeedInt(100) < moveChance) { + // effectChanceOverride used in the application of the actual secondary effect + this.effectChanceOverride = 100; + return true; + } else { + return false; + } + } + + /** + * Used to apply the secondary effect to the target Pokemon + * @returns `true` if a secondary effect is successfully applied + */ + override apply(user: Pokemon, target: Pokemon, move: Move, args?: any[]): boolean | Promise { + if (!super.apply(user, target, move, args)) { + return false; + } + let secondaryEffect: MoveEffectAttr; + const terrain = user.scene.arena.getTerrainType(); + if (terrain !== TerrainType.NONE) { + secondaryEffect = this.determineTerrainEffect(terrain); + } else { + const biome = user.scene.arena.biomeType; + secondaryEffect = this.determineBiomeEffect(biome); + } + return secondaryEffect.apply(user, target, move, []); + } + + /** + * Determines the secondary effect based on terrain. + * Takes precedence over biome-based effects. + * ``` + * Electric Terrain | Paralysis + * Misty Terrain | SpAtk -1 + * Grassy Terrain | Sleep + * Psychic Terrain | Speed -1 + * ``` + * @param terrain - {@linkcode TerrainType} The current terrain + * @returns the chosen secondary effect {@linkcode MoveEffectAttr} + */ + private determineTerrainEffect(terrain: TerrainType): MoveEffectAttr { + let secondaryEffect: MoveEffectAttr; + switch (terrain) { + case TerrainType.ELECTRIC: + default: + secondaryEffect = new StatusEffectAttr(StatusEffect.PARALYSIS, false); + break; + case TerrainType.MISTY: + secondaryEffect = new StatStageChangeAttr([ Stat.SPATK ], -1, false); + break; + case TerrainType.GRASSY: + secondaryEffect = new StatusEffectAttr(StatusEffect.SLEEP, false); + break; + case TerrainType.PSYCHIC: + secondaryEffect = new StatStageChangeAttr([ Stat.SPD ], -1, false); + break; + } + return secondaryEffect; + } + + /** + * Determines the secondary effect based on biome + * ``` + * Town, Metropolis, Slum, Dojo, Laboratory, Power Plant + Default | Paralysis + * Plains, Grass, Tall Grass, Forest, Jungle, Meadow | Sleep + * Swamp, Mountain, Temple, Ruins | Speed -1 + * Ice Cave, Snowy Forest | Freeze + * Volcano | Burn + * Fairy Cave | SpAtk -1 + * Desert, Construction Site, Beach, Island, Badlands | Accuracy -1 + * Sea, Lake, Seabed | Atk -1 + * Cave, Wasteland, Graveyard, Abyss, Space | Flinch + * End | Def -1 + * ``` + * @param biome - The current {@linkcode Biome} the battle is set in + * @returns the chosen secondary effect {@linkcode MoveEffectAttr} + */ + private determineBiomeEffect(biome: Biome): MoveEffectAttr { + let secondaryEffect: MoveEffectAttr; + switch (biome) { + case Biome.PLAINS: + case Biome.GRASS: + case Biome.TALL_GRASS: + case Biome.FOREST: + case Biome.JUNGLE: + case Biome.MEADOW: + secondaryEffect = new StatusEffectAttr(StatusEffect.SLEEP, false); + break; + case Biome.SWAMP: + case Biome.MOUNTAIN: + case Biome.TEMPLE: + case Biome.RUINS: + secondaryEffect = new StatStageChangeAttr([ Stat.SPD ], -1, false); + break; + case Biome.ICE_CAVE: + case Biome.SNOWY_FOREST: + secondaryEffect = new StatusEffectAttr(StatusEffect.FREEZE, false); + break; + case Biome.VOLCANO: + secondaryEffect = new StatusEffectAttr(StatusEffect.BURN, false); + break; + case Biome.FAIRY_CAVE: + secondaryEffect = new StatStageChangeAttr([ Stat.SPATK ], -1, false); + break; + case Biome.DESERT: + case Biome.CONSTRUCTION_SITE: + case Biome.BEACH: + case Biome.ISLAND: + case Biome.BADLANDS: + secondaryEffect = new StatStageChangeAttr([ Stat.ACC ], -1, false); + break; + case Biome.SEA: + case Biome.LAKE: + case Biome.SEABED: + secondaryEffect = new StatStageChangeAttr([ Stat.ATK ], -1, false); + break; + case Biome.CAVE: + case Biome.WASTELAND: + case Biome.GRAVEYARD: + case Biome.ABYSS: + case Biome.SPACE: + secondaryEffect = new AddBattlerTagAttr(BattlerTagType.FLINCHED, false, true); + break; + case Biome.END: + secondaryEffect = new StatStageChangeAttr([ Stat.DEF ], -1, false); + break; + case Biome.TOWN: + case Biome.METROPOLIS: + case Biome.SLUM: + case Biome.DOJO: + case Biome.FACTORY: + case Biome.LABORATORY: + case Biome.POWER_PLANT: + default: + secondaryEffect = new StatusEffectAttr(StatusEffect.PARALYSIS, false); + break; + } + return secondaryEffect; + } +} + export class PostVictoryStatStageChangeAttr extends MoveAttr { private stats: BattleStat[]; private stages: number; @@ -7898,7 +8054,7 @@ export function initMoves() { .unimplemented(), new AttackMove(Moves.SECRET_POWER, Type.NORMAL, MoveCategory.PHYSICAL, 70, 100, 20, 30, 0, 3) .makesContact(false) - .partial(), // No effect implemented + .attr(SecretPowerAttr), new AttackMove(Moves.DIVE, Type.WATER, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 3) .attr(ChargeAttr, ChargeAnim.DIVE_CHARGING, i18next.t("moveTriggers:hidUnderwater", { pokemonName: "{USER}" }), BattlerTagType.UNDERWATER, true) .attr(GulpMissileTagAttr) diff --git a/src/test/moves/secret_power.test.ts b/src/test/moves/secret_power.test.ts new file mode 100644 index 00000000000..ff0b5ae8c24 --- /dev/null +++ b/src/test/moves/secret_power.test.ts @@ -0,0 +1,89 @@ +import { Abilities } from "#enums/abilities"; +import { Biome } from "#enums/biome"; +import { Moves } from "#enums/moves"; +import { Stat } from "#enums/stat"; +import { allMoves, SecretPowerAttr } from "#app/data/move"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { StatusEffect } from "#enums/status-effect"; +import { BattlerIndex } from "#app/battle"; +import { ArenaTagType } from "#enums/arena-tag-type"; +import { ArenaTagSide } from "#app/data/arena-tag"; + +describe("Moves - Secret Power", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SECRET_POWER ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyLevel(60) + .enemyAbility(Abilities.BALL_FETCH); + }); + + it("Secret Power checks for an active terrain first then looks at the biome for its secondary effect", async () => { + game.override + .startingBiome(Biome.VOLCANO) + .enemyMoveset([ Moves.SPLASH, Moves.MISTY_TERRAIN ]); + vi.spyOn(allMoves[Moves.SECRET_POWER], "chance", "get").mockReturnValue(100); + await game.classicMode.startBattle([ Species.FEEBAS ]); + + const enemyPokemon = game.scene.getEnemyPokemon()!; + + // No Terrain + Biome.VOLCANO --> Burn + game.move.select(Moves.SECRET_POWER); + await game.forceEnemyMove(Moves.SPLASH); + await game.phaseInterceptor.to("TurnEndPhase"); + expect(enemyPokemon.status?.effect).toBe(StatusEffect.BURN); + + // Misty Terrain --> SpAtk -1 + game.move.select(Moves.SECRET_POWER); + await game.forceEnemyMove(Moves.MISTY_TERRAIN); + await game.phaseInterceptor.to("TurnEndPhase"); + expect(enemyPokemon.getStatStage(Stat.SPATK)).toBe(-1); + }); + + it("the 'rainbow' effect of fire+water pledge does not double the chance of secret power's secondary effect", + async () => { + game.override + .moveset([ Moves.FIRE_PLEDGE, Moves.WATER_PLEDGE, Moves.SECRET_POWER, Moves.SPLASH ]) + .enemyMoveset([ Moves.SPLASH ]) + .battleType("double"); + await game.classicMode.startBattle([ Species.BLASTOISE, Species.CHARIZARD ]); + + const secretPowerAttr = allMoves[Moves.SECRET_POWER].getAttrs(SecretPowerAttr)[0]; + vi.spyOn(secretPowerAttr, "getMoveChance"); + + game.move.select(Moves.WATER_PLEDGE, 0, BattlerIndex.ENEMY); + game.move.select(Moves.FIRE_PLEDGE, 1, BattlerIndex.ENEMY_2); + + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(game.scene.arena.getTagOnSide(ArenaTagType.WATER_FIRE_PLEDGE, ArenaTagSide.PLAYER)).toBeDefined(); + + game.move.select(Moves.SECRET_POWER, 0, BattlerIndex.ENEMY); + game.move.select(Moves.SPLASH, 1); + + await game.phaseInterceptor.to("BerryPhase", false); + + expect(secretPowerAttr.getMoveChance).toHaveLastReturnedWith(30); + } + ); +}); From 72c08e5cfdc64b39c46a95997df3a4ba5373e227 Mon Sep 17 00:00:00 2001 From: PigeonBar <56974298+PigeonBar@users.noreply.github.com> Date: Wed, 16 Oct 2024 11:09:48 -0400 Subject: [PATCH 091/153] [Refactor] Clean up commented safari zone code from #4661 (#4671) --- .../encounters/safari-zone-encounter.ts | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/src/data/mystery-encounters/encounters/safari-zone-encounter.ts b/src/data/mystery-encounters/encounters/safari-zone-encounter.ts index 0fec305333e..01dc29f9821 100644 --- a/src/data/mystery-encounters/encounters/safari-zone-encounter.ts +++ b/src/data/mystery-encounters/encounters/safari-zone-encounter.ts @@ -303,18 +303,7 @@ async function summonSafariPokemon(scene: BattleScene) { scene.unshiftPhase(new SummonPhase(scene, 0, false)); encounter.setDialogueToken("pokemonName", getPokemonNameWithAffix(pokemon)); - // TODO: If we await this showEncounterText, then the text will display without - // the wild Pokemon on screen, but if we don't await it, then the text never - // shows up and the IV scanner breaks. For now, we place the IV scanner code - // separately so that at least the IV scanner works. - // - // showEncounterText(scene, getEncounterText(scene, "battle:singleWildAppeared") ?? "", null, 0, false) - // .then(() => { - // const ivScannerModifier = scene.findModifier(m => m instanceof IvScannerModifier); - // if (ivScannerModifier) { - // scene.pushPhase(new ScanIvsPhase(scene, pokemon.getBattlerIndex(), Math.min(ivScannerModifier.getStackCount() * 2, 6))); - // } - // }); + const ivScannerModifier = scene.findModifier(m => m instanceof IvScannerModifier); if (ivScannerModifier) { scene.pushPhase(new ScanIvsPhase(scene, pokemon.getBattlerIndex(), Math.min(ivScannerModifier.getStackCount() * 2, 6))); From 1907824670c211ea2cf133ba0b42cab9a689c851 Mon Sep 17 00:00:00 2001 From: PigeonBar <56974298+PigeonBar@users.noreply.github.com> Date: Wed, 16 Oct 2024 11:10:35 -0400 Subject: [PATCH 092/153] [P1] Fix party UI crash from unsanitized `lastCursor` pointing to empty Pokemon slot (#4672) --- src/ui/party-ui-handler.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index e7c1b02cf01..cfc5e146f08 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -671,6 +671,9 @@ export default class PartyUiHandler extends MessageUiHandler { } else if (this.cursor === 6) { this.partyCancelButton.select(); } + if (this.lastCursor < 6 && this.lastCursor >= party.length) { + this.lastCursor = party.length - 1; + } for (const p in party) { const slotIndex = parseInt(p); From 3ea459746a06a6827901dd6138002141efe76ee3 Mon Sep 17 00:00:00 2001 From: Lugiad <2070109+Adri1@users.noreply.github.com> Date: Wed, 16 Oct 2024 20:53:25 +0200 Subject: [PATCH 093/153] [Localization] [UI/UX] Italian Type and Status icons (#4673) --- public/images/statuses_it.png | Bin 441 -> 2463 bytes public/images/types_it.png | Bin 4467 -> 6358 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/public/images/statuses_it.png b/public/images/statuses_it.png index d372b989be966007e5fccac5f54fe341457e598b..af3107018f86ccdae9b586c5bfe25268caeb70b2 100644 GIT binary patch literal 2463 zcmbVO3v|=g85VC!m$O1wU?mSBD3C*CNq$SQ^RkmU0f#Jc)&v?7S(0Nlwq+y*J6Tea zc5K*#u#M4_#4VvcC4sf9fkH~)l!Q|tD>Qx30tv}kPho+L(^6iA78tvB9QQGx-F%L$ zE9tx6|9$`e-zx?3^L`OG<tc!#+zOf%?3}{y_5w5n8Pfb-nyKVu*v?h(9wTyb-vI>XStIg< z#)@0LCeF!QYDBKECeOyyR5B!sq@}_JKLrTfoJ_-hx630@ej^g$rNB6R8$;j-M6NU< z8R39%u{9qy2_gq;6k3!a)Jj-KDhMr3D%Fp}N}SMPxDF#!C{9qgmQs;$^oM|GBI}?E z%-PXc;L3949x0k8kTA?odoea(liz`YhGA)${y{LyP!2(K)4(q8rYkti>#0ECSQ06d z;1Wa-7^qW4R9LN4jz^Md55wh{jRMqllD|_VAIBsu$4$nM+$;{zgCfF-`WaC;b4Ca4`UlUxQM+PI1iu}!N#BW9t>VC z9)|T=3gO8UNn?cUp~8`_nqLBw*$Rx z)cim8TH=>{p)JikxWZd^<=>n7=C-`s#Pu)ghoFx#s@y}LCQb{a*I1sdHytm0D&Dpw zyQTI5JHN#;J~O4DXhC~s99($epUDaR16^6?gTc^Oj?Hf-tqS)3L;u)}-+VHt4W62? zbM}t5j^i_e=Ed158-=&}#yu2Bhi)8Qckb(@LCe-bsI_ik*H+%)zM9;~tht@sTHU?n z(lS22r7o418h>thV~+bvvbipG?0~jOUupBavFWAa?Nd)(f3q`jP zo*g_EXiPeI`%}I4Owz*6)FWN1+fO#kK3o3io|`B0$`ps;qwkQzf8sPtk2gIyaJ#ai zJN_x*MD_6Q3kK<6+>PnyQSq754+baH{?tELH|xgb+RxHcO2u7c-Y@%WUBa@B9cFP? zga78WI``P_Z6CgHq9&m@_h*}KO+5Yn(4IRbiD}I}A^Dc`_0xwPLzC9K7EJo^)Pxm* zUHglA=zVTO@K$s7b)rFE>v{XhzBNttuB?LG4YO(pZK$p1TEXAuy`tU&Bu|DC4^3Sf zI?<3tJU=NnfqL!N&gVXMY}r0dH7}*V_UVG@mgA;7r5X937Z(NkL)^9A;mhNozUFIX zHG%9ZSDLo7^h(S4eerGLqHQ}L$t_vCcG01d+t-P|tkvXipIl#Xsbh8fuA=g}W4n76 zo60upJ|_0w8t7V0wO_m#d?jJqh4j9!JE-M9dFzCg?CF$qmcKr9Zg1;HNBXA@JRQ>X zpBqB{bxQcG&UY-mspSA9@y?-8yVJThfPxlP( zG&I)lS$BAFA{5%)K6oBZ+>4&`O_-6znYOleuU%8R?fI82xwLrZ_nsYoZakE}u_Jpw zQh$JKT-Ejm-;D-u+~;SmoNOy;B|7^nYim1io~rufPF+%((U9`;i{m#RNWFCRi~U!R tB_8|xye!)EUfJg1^+&(FIsf{lq^;e^<1cLQ(1$;vaTQ>G}+I zIn7o0!+Dp;xZJZk++_QIf*BQ_vO9cL>_x7%KzeP1y+B2_I7G_xHE-s8-)5{aFy1?z zvW;$NS#fE(5J*QH>;TO#qj-;m3y@V^jDKUiXB4T~am+que5?h|bD2QvJlYc8%_G~a zG}z~@!Q2dSmt873PQXLUg+O|T!QM`p^A|K=@Suc&?b@)04>kGLv3=K17yh?|Mhx#G)+hhQwMYUUT0RT>1-XbQdPI;dWdHyG07*qoM6N<$g1zg# A#sB~S diff --git a/public/images/types_it.png b/public/images/types_it.png index 8b644f1041c4236c9e729b30c529149e209a286c..3be03aeea6851671fe4360380bf760f3b04b6f8e 100644 GIT binary patch literal 6358 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 literal 4467 zcmV-(5sdDMP)Px`6G=otRCt`tU4Kwj*PZ`dd|iK}*^=FMf@w@19aKQ6Lh@$$l@@Ai16bm~240OR z?a2C^^+$F$8LSE+;i?d48<5y!qG2 z4nAzXdvPj3#3+Rc2s=~dZYcmds_}3t@GJpaU+P4an~(q~L^W0A+@L%MjyL}rC-?0e z7dIgROx9e`z7WMkldg%z$$k4^0KkJwbF^gP3T1x;6jatKZhE$V39NDGA zKhBV9V(dK}uXhr9DHLQ4Sg-aUk64^cX4@)IS_wnJH~>IH^DsieI22@w1LgG!*WTsX zxAH=y(izoLbq*+IprLsf0F*j5%b=zUC}toOj6*0Ghlb{1&-&6bsA5t|5Dh#}!-A{< zOJ+yMmPN*?1mige_>|I4S>BEFg8qdlnnh!x(f;ERb2lto8mlD>jr&Fo9{?;`{Dcnw zXxvu|W7kir$?L~^wFIyrJAf%)`NADFTD$|ea_K$!X}Ec3na=7 zQ`4W)l7-VJo-=ntLiFs0hG7^!LI^=mnhyUUgb;&tr|R7eNp~tC-Kn%1zQUJN2vB znPVNh1R>I^u9+EeZpth#k^ycv+|WLV8<9v^2Rz*LqP3fl60o4<5Csx-3EZHnC$jS_ z0gZM;yBbF)+zqH_(Gh^iP?cjRA8qrxGFkgV6jNJsS)23Pn#<;HShF}zOBQMl4M%pv zBUkn8hTr%*!$*!>C8OFfwOH`8wG9Q4RnAwx(COaw@VHqyf}*)c`O@L_4IM8$@>F3V<&G z%ee)jQYNJU0Phm0*m;#^T(@c|rf-=Jz#O4yhO0oB0k`zCGOs7nk@ZKRe<2!g>Lvme zC$^fq;mY(4TC(usi7n=Cc;(P@S^~Ix@l%HH%Ax1TZ-2U1hksl-^c*qv6lL6g-zhC_ zI%;b_HhV7ioO{dGE(+XZ>9K8I7TI|QK$S&7P@XyfVDZJ0epovmu1hf=t%xrQ+#?*B zOjkJonmV`60W%ZD5xru@P8HI<;IY|rrD@~!#$!h@t`d0ZsMsk5z=F!iT$a8e^$=WiRhxUairmgoqZO+?z-!pf^;#v1=$->^Di;-)?o@e!38)iIX_(;#Q zB>bOxp0FT2&l2OKBE2^#T-O1ksmIpdI=zv$?H!w~cNY9HHyd6S^=G>q5$eBpr^G+!(i>x%u3k*w-J^-PwHw=8+FnqlS3HfPjhYtVfJxGYLV#Tj+ziY$# z`b7YM%x|qg>YQb$uU{mUSv{F81*<0wfI0wx?%%u=kr(l5LcKBlF)s64O*Wo~bR|rk zvrHJVNKaRa@5p*a;+Rvy+S0;~k4Q9@-b87?p`KSvdW6 zlertFJ@lBCEcCs$$J`AMkq#{ZEH?5D-yzaLj-B42!#@s@4q{aH72STj;l^ZhVwOIU zius`=tIcvEy=XXT02`B=Q2InF0H9^tX;a-3#W2k{rr>^llt=>c$B( zK(R5oX>8=%%;*7o8YxFXM+^X^NVS~uoKgU+A#GEqqO$O#WYg_d0%-uzq?=-6aufbN zWZyAG91BMPwv-8K<_3|iSAW8F;Ejf{NB-xBlB_l>s~o4<5pk{oe3ppeNAy|ZjfMep zH+&?Nq$Lac8wSkX@WY`xEdksyYn|cyaHx(P{I3=r{_){Z9WmOT&eHpYMcdO^r0wY} z>*2OLmXqo6vWye;2UdwSj+PTS^RjJwI?MjNVd-~fp)4>5rQexl<9LWTRq(d9 zr8xhY!^nRIC=1L%{xd*h@7n<22ucNIfjO4F8*CXU3(RqJLOW`CbttL;RN*KAk6TGM zKOhl&RFO@$TZg=!n=K!_NY6(VS(0y4S)|8zD6^FXr+p!cnXJjBf|gf@%-ygwp?Ak71j?(dfT(Qo%<*WT6aYICUgn*uj5_K7+`u~Q-C=$%q?-N-3BW4H zWR@TrL|X!-(~v(40DHRGHmf(GX8{X-@`)y+Dzq;|G5yc$d-}fr`N-4vDa-Xdec!)3 z^7Q=&*WS?*z~}G$isAd<+B@W6yPnStKe+Y|G4}4+uK!y!1;yoPjeL5_%c8cMzME~U z;1gQwx}dS8&8ARLT#mBRB9xUD*^Y_0#+Eh|6qkG2N;BYwl9GH+jyhAZtt>090jL-NYN=J#vu#GK0b3H)z`Vegg_h9AJD_q&NxqHe z+f*J8$3p)?8aX@WLp4%_?09OztWOLoQf>t_~YAhdx>K& zSnmHPN0wO5O@1h8oo8P>Y)kQL19br4=*SHZC9SjUb|<+zWp#xCu#Q!tr+U=xwShW3 zl(Y^Z)OlD*0*J;jMW{0c$WyoBv*3DZ#wycMhC0ok{iLJao#ZT?$c};^pcR0q?)=1( zO*B#I-0WCc`$816d+=x4obMj|nYkMV;#X?PLhpqaBhMTD@)bSL8-Dj64TJph6*Btb zDINY1yYc}TBe_4+e{Bc=(>trJ*Ve)F;CaeXndd}0BAM^swh+}MJ#M}ayo{Qp$E|l8 z$BkfmXSJt}Os~S9;Jh-b@FzHoEBpzTu?#9YB0YNs23|JbX{3=X001Hpdv(tD<)tSq z0jtEP4P0qh&@|U@b~3#Re}Z!}VxybhS&fRkTIumhyA#@4~}=5Dwl{!uMi*mB{&&E4=OY10zG6r;%S-6Ur$6TonV)FX0ndqSWzfG6sZ6fP!mgk9NB+_2 zn<;w!(doDS=5BcQT|IY76TfU2zO(NV(sJymxAr99?7M^*wM|EEzi-i06lDSc^2$TV z$uG0olVJbmhF@$N)QXw;E1b3D^neg^4JEBLH?ryN!sQ^?BtXR1{?@aeRQn zb%3oQHK1HhepysC=Ajh8XNj0w8O^PttE17}4Re>5Y01LT-HqmMc=(u}-Eh&@4a0Z% z7$H@f{#WbpF+z-t9ePGj;aCTbF28|_KpCk^I3(}NGPebajLTFaRAW15XB6&*LrJB z5{BAq&E4?c!Wu1E_+xvG`ES3wo=tQdoclNKKbH2TPhEbO`0{j1{Pa(Ej`5@RM*wED z1ICdv&E$XIY!~*Ef9I&wM^aew1*p@pmKZ+I{3hX0yhC-`_ex;oH|CNIpZhN<$^vl& zA#yHoZ121=*ZP8q|C{#`wjB7{I)jB`Pxc5k+{VC^y2J+^GIBhfW(&*Ecx!3832H<7k(80;Q!pm z(!qTC=Q|KSnhpS%(ba}EesgYZA3TdS{zPmCux9=}5$-*#nSamNLX`aYY%7rD$H)Gm z_3t11G63MpU$0}u558t|I5Nc#V9-o`A%GA57Wg8g@cF;sKT_`o09=b*XukWthV_B9 zmh4N*3*v02`Kd|TFM>!9t_1`qz}W+)PU4aTTYxwni}2A*%&0aUV%7y*n6@4B0BnE5 z`CG`1XPN;3WebB?A6N@tdT=e$@`3<>zRqT(j40&02#^Im=ZabJvZBWzhlZ& z0Km7C&0l#kivIPKa37#)9-S@z4T9KnryU$E1pvff82bk8G|8$yb6PB7F8uz0!?Blh z8Q8gTA%5&zwBc!D{a^jzcjj)G`TYu87Cwr*-_zOj;fvB^A6=ed$#dTSJ^qC2R{L|G zjOlguziRwHWRS#5j^)tn0000EWmrjOO-%qQ00008000000002eQ Date: Wed, 16 Oct 2024 14:55:23 -0400 Subject: [PATCH 094/153] [Refactor] Add friendship related constants (#4657) * Add constants for friendship * Absolute path in battle-scene.ts * Address nits * Apply negative to constant --- src/battle-scene.ts | 3 ++- src/data/balance/starters.ts | 6 ++++++ src/field/pokemon.ts | 4 ++-- src/modifier/modifier.ts | 3 ++- src/phases/faint-phase.ts | 3 ++- 5 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 6a70688dbf1..ffba8e98d34 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -95,6 +95,7 @@ import { ExpPhase } from "#app/phases/exp-phase"; import { ShowPartyExpBarPhase } from "#app/phases/show-party-exp-bar-phase"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; import { ExpGainsSpeed } from "#enums/exp-gains-speed"; +import { FRIENDSHIP_GAIN_FROM_BATTLE } from "#app/data/balance/starters"; export const bypassLogin = import.meta.env.VITE_BYPASS_LOGIN === "1"; @@ -3054,7 +3055,7 @@ export default class BattleScene extends SceneBase { const pId = partyMember.id; const participated = participantIds.has(pId); if (participated && pokemonDefeated) { - partyMember.addFriendship(2); + partyMember.addFriendship(FRIENDSHIP_GAIN_FROM_BATTLE); const machoBraceModifier = partyMember.getHeldItems().find(m => m instanceof PokemonIncrementingStatModifier); if (machoBraceModifier && machoBraceModifier.stackCount < machoBraceModifier.getMaxStackCount(this)) { machoBraceModifier.stackCount++; diff --git a/src/data/balance/starters.ts b/src/data/balance/starters.ts index 0fadd992309..bf3a1f7ad56 100644 --- a/src/data/balance/starters.ts +++ b/src/data/balance/starters.ts @@ -2,6 +2,12 @@ import { Species } from "#enums/species"; export const POKERUS_STARTER_COUNT = 5; +// #region Friendship constants +export const CLASSIC_CANDY_FRIENDSHIP_MULTIPLIER = 2; +export const FRIENDSHIP_GAIN_FROM_BATTLE = 2; +export const FRIENDSHIP_GAIN_FROM_RARE_CANDY = 5; +export const FRIENDSHIP_LOSS_FROM_FAINT = 10; + /** * Function to get the cumulative friendship threshold at which a candy is earned * @param starterCost The cost of the starter, found in {@linkcode speciesStarterCosts} diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index f3e9c66ed15..9aaadf29657 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -5,7 +5,7 @@ import { variantData } from "#app/data/variant"; import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from "#app/ui/battle-info"; import Move, { HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, OneHitKOAttr, VariableMoveTypeAttr, VariableDefAttr, AttackMove, ModifiedDamageAttr, VariableMoveTypeMultiplierAttr, IgnoreOpponentStatStagesAttr, SacrificialAttr, VariableMoveCategoryAttr, CounterDamageAttr, StatStageChangeAttr, RechargeAttr, ChargeAttr, IgnoreWeatherTypeDebuffAttr, BypassBurnDamageReductionAttr, SacrificialAttrOnHit, OneHitKOAccuracyAttr, RespectAttackTypeImmunityAttr, MoveTarget, CombinedPledgeStabBoostAttr } from "#app/data/move"; import { default as PokemonSpecies, PokemonSpeciesForm, getFusedSpeciesName, getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species"; -import { getStarterValueFriendshipCap, speciesStarterCosts } from "#app/data/balance/starters"; +import { CLASSIC_CANDY_FRIENDSHIP_MULTIPLIER, getStarterValueFriendshipCap, speciesStarterCosts } from "#app/data/balance/starters"; import { starterPassiveAbilities } from "#app/data/balance/passives"; import { Constructor, isNullOrUndefined, randSeedInt } from "#app/utils"; import * as Utils from "#app/utils"; @@ -4082,7 +4082,7 @@ export class PlayerPokemon extends Pokemon { fusionStarterSpeciesId ? this.scene.gameData.starterData[fusionStarterSpeciesId] : null ].filter(d => !!d); const amount = new Utils.IntegerHolder(friendship); - const starterAmount = new Utils.IntegerHolder(Math.floor(friendship * (this.scene.gameMode.isClassic && friendship > 0 ? 2 : 1) / (fusionStarterSpeciesId ? 2 : 1))); + const starterAmount = new Utils.IntegerHolder(Math.floor(friendship * (this.scene.gameMode.isClassic && friendship > 0 ? CLASSIC_CANDY_FRIENDSHIP_MULTIPLIER : 1) / (fusionStarterSpeciesId ? 2 : 1))); if (amount.value > 0) { this.scene.applyModifier(PokemonFriendshipBoosterModifier, true, this, amount); this.scene.applyModifier(PokemonFriendshipBoosterModifier, true, this, starterAmount); diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 689b81be82f..35d1a304461 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -30,6 +30,7 @@ import { StatusEffect } from "#enums/status-effect"; import i18next from "i18next"; import { type DoubleBattleChanceBoosterModifierType, type EvolutionItemModifierType, type FormChangeItemModifierType, type ModifierOverride, type ModifierType, type PokemonBaseStatTotalModifierType, type PokemonExpBoosterModifierType, type PokemonFriendshipBoosterModifierType, type PokemonMoveAccuracyBoosterModifierType, type PokemonMultiHitModifierType, type TerastallizeModifierType, type TmModifierType, getModifierType, ModifierPoolType, ModifierTypeGenerator, modifierTypes, PokemonHeldItemModifierType } from "./modifier-type"; import { Color, ShadowColor } from "#enums/color"; +import { FRIENDSHIP_GAIN_FROM_RARE_CANDY } from "#app/data/balance/starters"; export type ModifierPredicate = (modifier: Modifier) => boolean; @@ -2213,7 +2214,7 @@ export class PokemonLevelIncrementModifier extends ConsumablePokemonModifier { playerPokemon.levelExp = 0; } - playerPokemon.addFriendship(5); + playerPokemon.addFriendship(FRIENDSHIP_GAIN_FROM_RARE_CANDY); playerPokemon.scene.unshiftPhase(new LevelUpPhase(playerPokemon.scene, playerPokemon.scene.getParty().indexOf(playerPokemon), playerPokemon.level - levelCount.value, playerPokemon.level)); diff --git a/src/phases/faint-phase.ts b/src/phases/faint-phase.ts index 60dbbbfea0f..95105337f60 100644 --- a/src/phases/faint-phase.ts +++ b/src/phases/faint-phase.ts @@ -20,6 +20,7 @@ import { VictoryPhase } from "./victory-phase"; import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms"; import { SwitchType } from "#enums/switch-type"; import { isNullOrUndefined } from "#app/utils"; +import { FRIENDSHIP_LOSS_FROM_FAINT } from "#app/data/balance/starters"; export class FaintPhase extends PokemonPhase { /** @@ -147,7 +148,7 @@ export class FaintPhase extends PokemonPhase { pokemon.faintCry(() => { if (pokemon instanceof PlayerPokemon) { - pokemon.addFriendship(-10); + pokemon.addFriendship(-FRIENDSHIP_LOSS_FROM_FAINT); } pokemon.hideInfo(); this.scene.playSound("se/faint"); From d92d63e81fc80dd08f7631af22316a61cdabe776 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Wed, 16 Oct 2024 13:10:19 -0700 Subject: [PATCH 095/153] [Misc] Restore info comment that was accidentally removed (#4674) --- .../mystery-encounters/encounters/safari-zone-encounter.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/data/mystery-encounters/encounters/safari-zone-encounter.ts b/src/data/mystery-encounters/encounters/safari-zone-encounter.ts index 01dc29f9821..0ee3c57b0a2 100644 --- a/src/data/mystery-encounters/encounters/safari-zone-encounter.ts +++ b/src/data/mystery-encounters/encounters/safari-zone-encounter.ts @@ -304,6 +304,11 @@ async function summonSafariPokemon(scene: BattleScene) { encounter.setDialogueToken("pokemonName", getPokemonNameWithAffix(pokemon)); + // TODO: If we await showEncounterText here, then the text will display without + // the wild Pokemon on screen, but if we don't await it, then the text never + // shows up and the IV scanner breaks. For now, we place the IV scanner code + // separately so that at least the IV scanner works. + const ivScannerModifier = scene.findModifier(m => m instanceof IvScannerModifier); if (ivScannerModifier) { scene.pushPhase(new ScanIvsPhase(scene, pokemon.getBattlerIndex(), Math.min(ivScannerModifier.getStackCount() * 2, 6))); From afebecd43c5bced779736dd51ec5369be8810afb Mon Sep 17 00:00:00 2001 From: Madmadness65 <59298170+Madmadness65@users.noreply.github.com> Date: Wed, 16 Oct 2024 17:16:10 -0500 Subject: [PATCH 096/153] [P2 Bug] Fix pool entry for Jynx not using baby species (#4675) --- .../encounters/the-expert-pokemon-breeder-encounter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts index 7bba603728b..945e7ee188d 100644 --- a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts @@ -61,7 +61,7 @@ const POOL_1_POKEMON: (Species | BreederSpeciesEvolution)[][] = [ const POOL_2_POKEMON: (Species | BreederSpeciesEvolution)[][] = [ [ Species.PICHU, new BreederSpeciesEvolution(Species.PIKACHU, FIRST_STAGE_EVOLUTION_WAVE), new BreederSpeciesEvolution(Species.RAICHU, FINAL_STAGE_EVOLUTION_WAVE) ], [ Species.PICHU, new BreederSpeciesEvolution(Species.PIKACHU, FIRST_STAGE_EVOLUTION_WAVE), new BreederSpeciesEvolution(Species.ALOLA_RAICHU, FINAL_STAGE_EVOLUTION_WAVE) ], - [ Species.JYNX ], + [ Species.SMOOCHUM, new BreederSpeciesEvolution(Species.JYNX, SECOND_STAGE_EVOLUTION_WAVE) ], [ Species.TYROGUE, new BreederSpeciesEvolution(Species.HITMONLEE, SECOND_STAGE_EVOLUTION_WAVE) ], [ Species.TYROGUE, new BreederSpeciesEvolution(Species.HITMONCHAN, SECOND_STAGE_EVOLUTION_WAVE) ], [ Species.TYROGUE, new BreederSpeciesEvolution(Species.HITMONTOP, SECOND_STAGE_EVOLUTION_WAVE) ], From 85b8ca6467bc0a79e0eabcbb81ef7c677b327241 Mon Sep 17 00:00:00 2001 From: "Amani H." <109637146+xsn34kzx@users.noreply.github.com> Date: Wed, 16 Oct 2024 19:48:28 -0400 Subject: [PATCH 097/153] [Dev] Bump Game Version, Overhaul Version Migration (#4388) * Bump Version, Remove "Outdated" Message * Fix `src/ui/ui.ts` * Fix `src/system/game-data.ts` * Clean Up & Organize Version Migration * Rename Methods & Session Migration Adjustment * Collapse Version Migrators to Single File as Arrays * Address NITs * Restructure Migration Initialization * Fix Spacing, Increment to v1.6.0 * Revert Back to v1.1.0 * Add `gameVersion` to Mocked Game * Add More Documentation --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- package-lock.json | 4 +- package.json | 4 +- src/phases/outdated-phase.ts | 13 -- src/system/game-data.ts | 19 +- src/system/version-converter.ts | 157 --------------- .../version_migration/version_converter.ts | 182 ++++++++++++++++++ .../version_migration/versions/v1_0_4.ts | 135 +++++++++++++ src/test/utils/gameWrapper.ts | 2 + src/ui/outdated-modal-ui-handler.ts | 47 ----- src/ui/ui.ts | 4 - 10 files changed, 329 insertions(+), 238 deletions(-) delete mode 100644 src/phases/outdated-phase.ts delete mode 100644 src/system/version-converter.ts create mode 100644 src/system/version_migration/version_converter.ts create mode 100644 src/system/version_migration/versions/v1_0_4.ts delete mode 100644 src/ui/outdated-modal-ui-handler.ts diff --git a/package-lock.json b/package-lock.json index ee2708b38f5..be946306471 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pokemon-rogue-battle", - "version": "1.0.4", + "version": "1.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pokemon-rogue-battle", - "version": "1.0.4", + "version": "1.1.0", "hasInstallScript": true, "dependencies": { "@material/material-color-utilities": "^0.2.7", diff --git a/package.json b/package.json index d8d7f5e8db8..a31296d1644 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.0.4", + "version": "1.1.0", "type": "module", "scripts": { "start": "vite", @@ -20,7 +20,7 @@ "depcruise": "depcruise src", "depcruise:graph": "depcruise src --output-type dot | node dependency-graph.js > dependency-graph.svg", "create-test": "node ./create-test-boilerplate.js", - "postinstall": "npx lefthook install && npx lefthook run post-merge" + "postinstall": "npx lefthook install && npx lefthook run post-merge" }, "devDependencies": { "@eslint/js": "^9.3.0", diff --git a/src/phases/outdated-phase.ts b/src/phases/outdated-phase.ts deleted file mode 100644 index 4baf16d2f56..00000000000 --- a/src/phases/outdated-phase.ts +++ /dev/null @@ -1,13 +0,0 @@ -import BattleScene from "#app/battle-scene"; -import { Phase } from "#app/phase"; -import { Mode } from "#app/ui/ui"; - -export class OutdatedPhase extends Phase { - constructor(scene: BattleScene) { - super(scene); - } - - start(): void { - this.scene.ui.setMode(Mode.OUTDATED); - } -} diff --git a/src/system/game-data.ts b/src/system/game-data.ts index b162962fac6..41746957d49 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -43,10 +43,9 @@ import { Species } from "#enums/species"; import { applyChallenges, ChallengeType } from "#app/data/challenge"; import { WeatherType } from "#enums/weather-type"; import { TerrainType } from "#app/data/terrain"; -import { OutdatedPhase } from "#app/phases/outdated-phase"; import { ReloadSessionPhase } from "#app/phases/reload-session-phase"; import { RUN_HISTORY_LIMIT } from "#app/ui/run-history-ui-handler"; -import { applySessionDataPatches, applySettingsDataPatches, applySystemDataPatches } from "#app/system/version-converter"; +import { applySessionVersionMigration, applySystemVersionMigration, applySettingsVersionMigration } from "./version_migration/version_converter"; import { MysteryEncounterSaveData } from "#app/data/mystery-encounters/mystery-encounter-save-data"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { PokerogueApiClearSessionData } from "#app/@types/pokerogue-api"; @@ -403,10 +402,7 @@ export class GameData { .then(error => { this.scene.ui.savingIcon.hide(); if (error) { - if (error.startsWith("client version out of date")) { - this.scene.clearPhaseQueue(); - this.scene.unshiftPhase(new OutdatedPhase(this.scene)); - } else if (error.startsWith("session out of date")) { + if (error.startsWith("session out of date")) { this.scene.clearPhaseQueue(); this.scene.unshiftPhase(new ReloadSessionPhase(this.scene)); } @@ -482,7 +478,7 @@ export class GameData { localStorage.setItem(lsItemKey, ""); } - applySystemDataPatches(systemData); + applySystemVersionMigration(systemData); this.trainerId = systemData.trainerId; this.secretId = systemData.secretId; @@ -857,7 +853,7 @@ export class GameData { const settings = JSON.parse(localStorage.getItem("settings")!); // TODO: is this bang correct? - applySettingsDataPatches(settings); + applySettingsVersionMigration(settings); for (const setting of Object.keys(settings)) { setSetting(this.scene, setting, settings[setting]); @@ -1313,7 +1309,7 @@ export class GameData { return v; }) as SessionSaveData; - applySessionDataPatches(sessionData); + applySessionVersionMigration(sessionData); return sessionData; } @@ -1354,10 +1350,7 @@ export class GameData { this.scene.ui.savingIcon.hide(); } if (error) { - if (error.startsWith("client version out of date")) { - this.scene.clearPhaseQueue(); - this.scene.unshiftPhase(new OutdatedPhase(this.scene)); - } else if (error.startsWith("session out of date")) { + if (error.startsWith("session out of date")) { this.scene.clearPhaseQueue(); this.scene.unshiftPhase(new ReloadSessionPhase(this.scene)); } diff --git a/src/system/version-converter.ts b/src/system/version-converter.ts deleted file mode 100644 index 3a4416a975e..00000000000 --- a/src/system/version-converter.ts +++ /dev/null @@ -1,157 +0,0 @@ -import { allSpecies } from "#app/data/pokemon-species"; -import { AbilityAttr, defaultStarterSpecies, DexAttr, SessionSaveData, SystemSaveData } from "./game-data"; -import { SettingKeys } from "./settings/settings"; - -const LATEST_VERSION = "1.0.5"; - -export function applySessionDataPatches(data: SessionSaveData) { - const curVersion = data.gameVersion; - - // Always sanitize money as a safeguard - data.money = Math.floor(data.money); - - if (curVersion !== LATEST_VERSION) { - switch (curVersion) { - case "1.0.0": - case "1.0.1": - case "1.0.2": - case "1.0.3": - case "1.0.4": - // --- PATCHES --- - - // Fix Battle Items, Vitamins, and Lures - data.modifiers.forEach((m) => { - if (m.className === "PokemonBaseStatModifier") { - m.className = "BaseStatModifier"; - } else if (m.className === "PokemonResetNegativeStatStageModifier") { - m.className = "ResetNegativeStatStageModifier"; - } else if (m.className === "TempBattleStatBoosterModifier") { - // Dire Hit no longer a part of the TempBattleStatBoosterModifierTypeGenerator - if (m.typeId !== "DIRE_HIT") { - m.className = "TempStatStageBoosterModifier"; - m.typeId = "TEMP_STAT_STAGE_BOOSTER"; - - // Migration from TempBattleStat to Stat - const newStat = m.typePregenArgs[0] + 1; - m.typePregenArgs[0] = newStat; - - // From [ stat, battlesLeft ] to [ stat, maxBattles, battleCount ] - m.args = [ newStat, 5, m.args[1] ]; - } else { - m.className = "TempCritBoosterModifier"; - m.typePregenArgs = []; - - // From [ stat, battlesLeft ] to [ maxBattles, battleCount ] - m.args = [ 5, m.args[1] ]; - } - - } else if (m.className === "DoubleBattleChanceBoosterModifier" && m.args.length === 1) { - let maxBattles: number; - switch (m.typeId) { - case "MAX_LURE": - maxBattles = 30; - break; - case "SUPER_LURE": - maxBattles = 15; - break; - default: - maxBattles = 10; - break; - } - - // From [ battlesLeft ] to [ maxBattles, battleCount ] - m.args = [ maxBattles, m.args[0] ]; - } - }); - - data.enemyModifiers.forEach((m) => { - if (m.className === "PokemonBaseStatModifier") { - m.className = "BaseStatModifier"; - } else if (m.className === "PokemonResetNegativeStatStageModifier") { - m.className = "ResetNegativeStatStageModifier"; - } - }); - } - - data.gameVersion = LATEST_VERSION; - } -} - -export function applySystemDataPatches(data: SystemSaveData) { - const curVersion = data.gameVersion; - if (curVersion !== LATEST_VERSION) { - switch (curVersion) { - case "1.0.0": - case "1.0.1": - case "1.0.2": - case "1.0.3": - case "1.0.4": - // --- LEGACY PATCHES --- - if (data.starterData && data.dexData) { - // Migrate ability starter data if empty for caught species - Object.keys(data.starterData).forEach(sd => { - if (data.dexData[sd]?.caughtAttr && (data.starterData[sd] && !data.starterData[sd].abilityAttr)) { - data.starterData[sd].abilityAttr = 1; - } - }); - } - - // Fix Legendary Stats - if (data.gameStats && (data.gameStats.legendaryPokemonCaught !== undefined && data.gameStats.subLegendaryPokemonCaught === undefined)) { - data.gameStats.subLegendaryPokemonSeen = 0; - data.gameStats.subLegendaryPokemonCaught = 0; - data.gameStats.subLegendaryPokemonHatched = 0; - allSpecies.filter(s => s.subLegendary).forEach(s => { - const dexEntry = data.dexData[s.speciesId]; - data.gameStats.subLegendaryPokemonSeen += dexEntry.seenCount; - data.gameStats.legendaryPokemonSeen = Math.max(data.gameStats.legendaryPokemonSeen - dexEntry.seenCount, 0); - data.gameStats.subLegendaryPokemonCaught += dexEntry.caughtCount; - data.gameStats.legendaryPokemonCaught = Math.max(data.gameStats.legendaryPokemonCaught - dexEntry.caughtCount, 0); - data.gameStats.subLegendaryPokemonHatched += dexEntry.hatchedCount; - data.gameStats.legendaryPokemonHatched = Math.max(data.gameStats.legendaryPokemonHatched - dexEntry.hatchedCount, 0); - }); - data.gameStats.subLegendaryPokemonSeen = Math.max(data.gameStats.subLegendaryPokemonSeen, data.gameStats.subLegendaryPokemonCaught); - data.gameStats.legendaryPokemonSeen = Math.max(data.gameStats.legendaryPokemonSeen, data.gameStats.legendaryPokemonCaught); - data.gameStats.mythicalPokemonSeen = Math.max(data.gameStats.mythicalPokemonSeen, data.gameStats.mythicalPokemonCaught); - } - - // --- PATCHES --- - - // Fix Starter Data - if (data.starterData && data.dexData) { - for (const starterId of defaultStarterSpecies) { - if (data.starterData[starterId]?.abilityAttr) { - data.starterData[starterId].abilityAttr |= AbilityAttr.ABILITY_1; - } - if (data.dexData[starterId]?.caughtAttr) { - data.dexData[starterId].caughtAttr |= DexAttr.FEMALE; - } - } - } - } - - data.gameVersion = LATEST_VERSION; - } -} - -export function applySettingsDataPatches(settings: Object) { - const curVersion = settings.hasOwnProperty("gameVersion") ? settings["gameVersion"] : "1.0.0"; - if (curVersion !== LATEST_VERSION) { - switch (curVersion) { - case "1.0.0": - case "1.0.1": - case "1.0.2": - case "1.0.3": - case "1.0.4": - // --- PATCHES --- - - // Fix Reward Cursor Target - if (settings.hasOwnProperty("REROLL_TARGET") && !settings.hasOwnProperty(SettingKeys.Shop_Cursor_Target)) { - settings[SettingKeys.Shop_Cursor_Target] = settings["REROLL_TARGET"]; - delete settings["REROLL_TARGET"]; - localStorage.setItem("settings", JSON.stringify(settings)); - } - } - // Note that the current game version will be written at `saveSettings` - } -} diff --git a/src/system/version_migration/version_converter.ts b/src/system/version_migration/version_converter.ts new file mode 100644 index 00000000000..f93e09b7a90 --- /dev/null +++ b/src/system/version_migration/version_converter.ts @@ -0,0 +1,182 @@ +import { SessionSaveData, SystemSaveData } from "../game-data"; +import { version } from "../../../package.json"; + +// --- v1.0.4 (and below) PATCHES --- // +import * as v1_0_4 from "./versions/v1_0_4"; + +const LATEST_VERSION = version.split(".").map(value => parseInt(value)); + +/** + * Converts incoming {@linkcode SystemSaveData} that has a version below the + * current version number listed in `package.json`. + * + * Note that no transforms act on the {@linkcode data} if its version matches + * the current version or if there are no migrations made between its version up + * to the current version. + * @param data {@linkcode SystemSaveData} + * @see {@link SystemVersionConverter} + */ +export function applySystemVersionMigration(data: SystemSaveData) { + const curVersion = data.gameVersion.split(".").map(value => parseInt(value)); + + if (!curVersion.every((value, index) => value === LATEST_VERSION[index])) { + const converter = new SystemVersionConverter(); + converter.applyStaticPreprocessors(data); + converter.applyMigration(data, curVersion); + } +} + +/** + * Converts incoming {@linkcode SessionSavaData} that has a version below the + * current version number listed in `package.json`. + * + * Note that no transforms act on the {@linkcode data} if its version matches + * the current version or if there are no migrations made between its version up + * to the current version. + * @param data {@linkcode SessionSaveData} + * @see {@link SessionVersionConverter} + */ +export function applySessionVersionMigration(data: SessionSaveData) { + const curVersion = data.gameVersion.split(".").map(value => parseInt(value)); + + if (!curVersion.every((value, index) => value === LATEST_VERSION[index])) { + const converter = new SessionVersionConverter(); + converter.applyStaticPreprocessors(data); + converter.applyMigration(data, curVersion); + } +} + +/** + * Converts incoming settings data that has a version below the + * current version number listed in `package.json`. + * + * Note that no transforms act on the {@linkcode data} if its version matches + * the current version or if there are no migrations made between its version up + * to the current version. + * @param data Settings data object + * @see {@link SettingsVersionConverter} + */ +export function applySettingsVersionMigration(data: Object) { + const gameVersion: string = data.hasOwnProperty("gameVersion") ? data["gameVersion"] : "1.0.0"; + const curVersion = gameVersion.split(".").map(value => parseInt(value)); + + if (!curVersion.every((value, index) => value === LATEST_VERSION[index])) { + const converter = new SettingsVersionConverter(); + converter.applyStaticPreprocessors(data); + converter.applyMigration(data, curVersion); + } +} + +/** + * Abstract class encapsulating the logic for migrating data from a given version up to + * the current version listed in `package.json`. + * + * Note that, for any version converter, the corresponding `applyMigration` + * function would only need to be changed once when the first migration for a + * given version is introduced. Similarly, a version file (within the `versions` + * folder) would only need to be created for a version once with the appropriate + * array nomenclature. + */ +abstract class VersionConverter { + /** + * Iterates through an array of designated migration functions that are each + * called one by one to transform the data. + * @param data The data to be operated on + * @param migrationArr An array of functions that will transform the incoming data + */ + callMigrators(data: any, migrationArr: readonly any[]) { + for (const migrate of migrationArr) { + migrate(data); + } + } + + /** + * Applies any version-agnostic data sanitation as defined within the function + * body. + * @param data The data to be operated on + */ + applyStaticPreprocessors(_data: any): void { + } + + /** + * Uses the current version the incoming data to determine the starting point + * of the migration which will cascade up to the latest version, calling the + * necessary migration functions in the process. + * @param data The data to be operated on + * @param curVersion [0] Current major version + * [1] Current minor version + * [2] Current patch version + */ + abstract applyMigration(data: any, curVersion: number[]): void; +} + +/** + * Class encapsulating the logic for migrating {@linkcode SessionSaveData} from + * a given version up to the current version listed in `package.json`. + * @extends VersionConverter + */ +class SessionVersionConverter extends VersionConverter { + override applyStaticPreprocessors(data: SessionSaveData): void { + // Always sanitize money as a safeguard + data.money = Math.floor(data.money); + } + + override applyMigration(data: SessionSaveData, curVersion: number[]): void { + const [ curMajor, curMinor, curPatch ] = curVersion; + + if (curMajor === 1) { + if (curMinor === 0) { + if (curPatch <= 4) { + console.log("Applying v1.0.4 session data migration!"); + this.callMigrators(data, v1_0_4.sessionMigrators); + } + } + } + + console.log(`Session data successfully migrated to v${version}!`); + } +} + +/** + * Class encapsulating the logic for migrating {@linkcode SystemSaveData} from + * a given version up to the current version listed in `package.json`. + * @extends VersionConverter + */ +class SystemVersionConverter extends VersionConverter { + override applyMigration(data: SystemSaveData, curVersion: number[]): void { + const [ curMajor, curMinor, curPatch ] = curVersion; + + if (curMajor === 1) { + if (curMinor === 0) { + if (curPatch <= 4) { + console.log("Applying v1.0.4 system data migraton!"); + this.callMigrators(data, v1_0_4.systemMigrators); + } + } + } + + console.log(`System data successfully migrated to v${version}!`); + } +} + +/** + * Class encapsulating the logic for migrating settings data from + * a given version up to the current version listed in `package.json`. + * @extends VersionConverter + */ +class SettingsVersionConverter extends VersionConverter { + override applyMigration(data: Object, curVersion: number[]): void { + const [ curMajor, curMinor, curPatch ] = curVersion; + + if (curMajor === 1) { + if (curMinor === 0) { + if (curPatch <= 4) { + console.log("Applying v1.0.4 settings data migraton!"); + this.callMigrators(data, v1_0_4.settingsMigrators); + } + } + } + + console.log(`System data successfully migrated to v${version}!`); + } +} diff --git a/src/system/version_migration/versions/v1_0_4.ts b/src/system/version_migration/versions/v1_0_4.ts new file mode 100644 index 00000000000..c20e2a281e7 --- /dev/null +++ b/src/system/version_migration/versions/v1_0_4.ts @@ -0,0 +1,135 @@ +import { SettingKeys } from "../../settings/settings"; +import { AbilityAttr, defaultStarterSpecies, DexAttr, SystemSaveData, SessionSaveData } from "../../game-data"; +import { allSpecies } from "../../../data/pokemon-species"; + +export const systemMigrators = [ + /** + * Migrate ability starter data if empty for caught species. + * @param data {@linkcode SystemSaveData} + */ + function migrateAbilityData(data: SystemSaveData) { + if (data.starterData && data.dexData) { + Object.keys(data.starterData).forEach(sd => { + if (data.dexData[sd]?.caughtAttr && (data.starterData[sd] && !data.starterData[sd].abilityAttr)) { + data.starterData[sd].abilityAttr = 1; + } + }); + } + }, + + /** + * Populate legendary Pokémon statistics if they are missing. + * @param data {@linkcode SystemSaveData} + */ + function fixLegendaryStats(data: SystemSaveData) { + if (data.gameStats && (data.gameStats.legendaryPokemonCaught !== undefined && data.gameStats.subLegendaryPokemonCaught === undefined)) { + data.gameStats.subLegendaryPokemonSeen = 0; + data.gameStats.subLegendaryPokemonCaught = 0; + data.gameStats.subLegendaryPokemonHatched = 0; + allSpecies.filter(s => s.subLegendary).forEach(s => { + const dexEntry = data.dexData[s.speciesId]; + data.gameStats.subLegendaryPokemonSeen += dexEntry.seenCount; + data.gameStats.legendaryPokemonSeen = Math.max(data.gameStats.legendaryPokemonSeen - dexEntry.seenCount, 0); + data.gameStats.subLegendaryPokemonCaught += dexEntry.caughtCount; + data.gameStats.legendaryPokemonCaught = Math.max(data.gameStats.legendaryPokemonCaught - dexEntry.caughtCount, 0); + data.gameStats.subLegendaryPokemonHatched += dexEntry.hatchedCount; + data.gameStats.legendaryPokemonHatched = Math.max(data.gameStats.legendaryPokemonHatched - dexEntry.hatchedCount, 0); + }); + data.gameStats.subLegendaryPokemonSeen = Math.max(data.gameStats.subLegendaryPokemonSeen, data.gameStats.subLegendaryPokemonCaught); + data.gameStats.legendaryPokemonSeen = Math.max(data.gameStats.legendaryPokemonSeen, data.gameStats.legendaryPokemonCaught); + data.gameStats.mythicalPokemonSeen = Math.max(data.gameStats.mythicalPokemonSeen, data.gameStats.mythicalPokemonCaught); + } + }, + + /** + * Unlock all starters' first ability and female gender option. + * @param data {@linkcode SystemSaveData} + */ + function fixStarterData(data: SystemSaveData) { + for (const starterId of defaultStarterSpecies) { + if (data.starterData[starterId]?.abilityAttr) { + data.starterData[starterId].abilityAttr |= AbilityAttr.ABILITY_1; + } + if (data.dexData[starterId]?.caughtAttr) { + data.dexData[starterId].caughtAttr |= DexAttr.FEMALE; + } + } + } +] as const; + +export const settingsMigrators = [ + /** + * Migrate from "REROLL_TARGET" property to {@linkcode + * SettingKeys.Shop_Cursor_Target}. + * @param data the `settings` object + */ + function fixRerollTarget(data: Object) { + if (data.hasOwnProperty("REROLL_TARGET") && !data.hasOwnProperty(SettingKeys.Shop_Cursor_Target)) { + data[SettingKeys.Shop_Cursor_Target] = data["REROLL_TARGET"]; + delete data["REROLL_TARGET"]; + localStorage.setItem("settings", JSON.stringify(data)); + } + } +] as const; + +export const sessionMigrators = [ + /** + * Converts old lapsing modifiers (battle items, lures, and Dire Hit) and + * other miscellaneous modifiers (vitamins, White Herb) to any new class + * names and/or change in reload arguments. + * @param data {@linkcode SessionSaveData} + */ + function migrateModifiers(data: SessionSaveData) { + data.modifiers.forEach((m) => { + if (m.className === "PokemonBaseStatModifier") { + m.className = "BaseStatModifier"; + } else if (m.className === "PokemonResetNegativeStatStageModifier") { + m.className = "ResetNegativeStatStageModifier"; + } else if (m.className === "TempBattleStatBoosterModifier") { + const maxBattles = 5; + // Dire Hit no longer a part of the TempBattleStatBoosterModifierTypeGenerator + if (m.typeId !== "DIRE_HIT") { + m.className = "TempStatStageBoosterModifier"; + m.typeId = "TEMP_STAT_STAGE_BOOSTER"; + + // Migration from TempBattleStat to Stat + const newStat = m.typePregenArgs[0] + 1; + m.typePregenArgs[0] = newStat; + + // From [ stat, battlesLeft ] to [ stat, maxBattles, battleCount ] + m.args = [ newStat, maxBattles, Math.min(m.args[1], maxBattles) ]; + } else { + m.className = "TempCritBoosterModifier"; + m.typePregenArgs = []; + + // From [ stat, battlesLeft ] to [ maxBattles, battleCount ] + m.args = [ maxBattles, Math.min(m.args[1], maxBattles) ]; + } + } else if (m.className === "DoubleBattleChanceBoosterModifier" && m.args.length === 1) { + let maxBattles: number; + switch (m.typeId) { + case "MAX_LURE": + maxBattles = 30; + break; + case "SUPER_LURE": + maxBattles = 15; + break; + default: + maxBattles = 10; + break; + } + + // From [ battlesLeft ] to [ maxBattles, battleCount ] + m.args = [ maxBattles, Math.min(m.args[0], maxBattles) ]; + } + }); + + data.enemyModifiers.forEach((m) => { + if (m.className === "PokemonBaseStatModifier") { + m.className = "BaseStatModifier"; + } else if (m.className === "PokemonResetNegativeStatStageModifier") { + m.className = "ResetNegativeStatStageModifier"; + } + }); + } +] as const; diff --git a/src/test/utils/gameWrapper.ts b/src/test/utils/gameWrapper.ts index 0ef5c4d4611..48c0007118b 100644 --- a/src/test/utils/gameWrapper.ts +++ b/src/test/utils/gameWrapper.ts @@ -23,6 +23,7 @@ import KeyboardPlugin = Phaser.Input.Keyboard.KeyboardPlugin; import GamepadPlugin = Phaser.Input.Gamepad.GamepadPlugin; import EventEmitter = Phaser.Events.EventEmitter; import UpdateList = Phaser.GameObjects.UpdateList; +import { version } from "../../../package.json"; Object.defineProperty(window, "localStorage", { value: mockLocalStorage(), @@ -101,6 +102,7 @@ export default class GameWrapper { injectMandatory() { this.game.config = { seed: ["test"], + gameVersion: version }; this.scene.game = this.game; this.game.renderer = { diff --git a/src/ui/outdated-modal-ui-handler.ts b/src/ui/outdated-modal-ui-handler.ts deleted file mode 100644 index fc4b93f9b8a..00000000000 --- a/src/ui/outdated-modal-ui-handler.ts +++ /dev/null @@ -1,47 +0,0 @@ -import BattleScene from "../battle-scene"; -import { ModalConfig, ModalUiHandler } from "./modal-ui-handler"; -import { addTextObject, TextStyle } from "./text"; -import { Mode } from "./ui"; - -export default class OutdatedModalUiHandler extends ModalUiHandler { - constructor(scene: BattleScene, mode: Mode | null = null) { - super(scene, mode); - } - - getModalTitle(): string { - return ""; - } - - getWidth(): number { - return 160; - } - - getHeight(): number { - return 64; - } - - getMargin(): [number, number, number, number] { - return [ 0, 0, 48, 0 ]; - } - - getButtonLabels(): string[] { - return [ ]; - } - - setup(): void { - super.setup(); - - const label = addTextObject(this.scene, this.getWidth() / 2, this.getHeight() / 2, "Your client is currently outdated.\nPlease reload to update the game.\n\nIf this error persists, please clear your browser cache.", TextStyle.WINDOW, { fontSize: "48px", align: "center" }); - label.setOrigin(0.5, 0.5); - - this.modalContainer.add(label); - } - - show(args: any[]): boolean { - const config: ModalConfig = { - buttonActions: [] - }; - - return super.show([ config ]); - } -} diff --git a/src/ui/ui.ts b/src/ui/ui.ts index 373930c5d84..63cd48ab1cd 100644 --- a/src/ui/ui.ts +++ b/src/ui/ui.ts @@ -34,7 +34,6 @@ import SaveSlotSelectUiHandler from "./save-slot-select-ui-handler"; import TitleUiHandler from "./title-ui-handler"; import SavingIconHandler from "./saving-icon-handler"; import UnavailableModalUiHandler from "./unavailable-modal-ui-handler"; -import OutdatedModalUiHandler from "./outdated-modal-ui-handler"; import SessionReloadModalUiHandler from "./session-reload-modal-ui-handler"; import { Button } from "#enums/buttons"; import i18next from "i18next"; @@ -90,7 +89,6 @@ export enum Mode { LOADING, SESSION_RELOAD, UNAVAILABLE, - OUTDATED, CHALLENGE_SELECT, RENAME_POKEMON, RUN_HISTORY, @@ -134,7 +132,6 @@ const noTransitionModes = [ Mode.LOADING, Mode.SESSION_RELOAD, Mode.UNAVAILABLE, - Mode.OUTDATED, Mode.RENAME_POKEMON, Mode.TEST_DIALOGUE, Mode.AUTO_COMPLETE, @@ -200,7 +197,6 @@ export default class UI extends Phaser.GameObjects.Container { new LoadingModalUiHandler(scene), new SessionReloadModalUiHandler(scene), new UnavailableModalUiHandler(scene), - new OutdatedModalUiHandler(scene), new GameChallengesUiHandler(scene), new RenameFormUiHandler(scene), new RunHistoryUiHandler(scene), From 2f212f52eb8808bd60c4271835ba38d89158501a Mon Sep 17 00:00:00 2001 From: Mumble <171087428+frutescens@users.noreply.github.com> Date: Wed, 16 Oct 2024 23:31:30 -0700 Subject: [PATCH 098/153] fixed effectChanceOVerrride location + removed ability tags (#4677) Co-authored-by: frutescens --- src/data/ability.ts | 6 ++---- src/data/move.ts | 4 ++-- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/data/ability.ts b/src/data/ability.ts index 6c4dededa04..5d2ccfc9d36 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -4913,8 +4913,7 @@ export function initAbilities() { .attr(TypeImmunityAddBattlerTagAbAttr, Type.FIRE, BattlerTagType.FIRE_BOOST, 1) .ignorable(), new Ability(Abilities.SHIELD_DUST, 3) - .attr(IgnoreMoveEffectsAbAttr) - .edgeCase(), // Does not work with secret power (unimplemented) + .attr(IgnoreMoveEffectsAbAttr), new Ability(Abilities.OWN_TEMPO, 3) .attr(BattlerTagImmunityAbAttr, BattlerTagType.CONFUSED) .attr(IntimidateImmunityAbAttr) @@ -4958,8 +4957,7 @@ export function initAbilities() { .attr(TypeImmunityStatStageChangeAbAttr, Type.ELECTRIC, Stat.SPATK, 1) .ignorable(), new Ability(Abilities.SERENE_GRACE, 3) - .attr(MoveEffectChanceMultiplierAbAttr, 2) - .edgeCase(), // does not work with secret power (unimplemented) + .attr(MoveEffectChanceMultiplierAbAttr, 2), new Ability(Abilities.SWIFT_SWIM, 3) .attr(StatMultiplierAbAttr, Stat.SPD, 2) .condition(getWeatherCondition(WeatherType.RAIN, WeatherType.HEAVY_RAIN)), diff --git a/src/data/move.ts b/src/data/move.ts index 448008b733c..57307b49061 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -2891,8 +2891,6 @@ export class SecretPowerAttr extends MoveEffectAttr { this.effectChanceOverride = move.chance; const moveChance = this.getMoveChance(user, target, move, this.selfTarget); if (moveChance < 0 || moveChance === 100 || user.randSeedInt(100) < moveChance) { - // effectChanceOverride used in the application of the actual secondary effect - this.effectChanceOverride = 100; return true; } else { return false; @@ -2915,6 +2913,8 @@ export class SecretPowerAttr extends MoveEffectAttr { const biome = user.scene.arena.biomeType; secondaryEffect = this.determineBiomeEffect(biome); } + // effectChanceOverride used in the application of the actual secondary effect + secondaryEffect.effectChanceOverride = 100; return secondaryEffect.apply(user, target, move, []); } From c5b3220b86579c40bac954e4d481df6787c1928b Mon Sep 17 00:00:00 2001 From: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com> Date: Thu, 17 Oct 2024 19:46:51 +0200 Subject: [PATCH 099/153] [Beta P3][UI] Fix item/cursor placement in reward screen (#4678) --- src/ui/modifier-select-ui-handler.ts | 31 ++++++++++++++++------------ 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/src/ui/modifier-select-ui-handler.ts b/src/ui/modifier-select-ui-handler.ts index 0bae56c03b4..1948d75ac4c 100644 --- a/src/ui/modifier-select-ui-handler.ts +++ b/src/ui/modifier-select-ui-handler.ts @@ -17,6 +17,9 @@ import { IntegerHolder } from "./../utils"; import Phaser from "phaser"; export const SHOP_OPTIONS_ROW_LIMIT = 7; +const SINGLE_SHOP_ROW_YOFFSET = 12; +const DOUBLE_SHOP_ROW_YOFFSET = 24; +const OPTION_BUTTON_YPOSITION = -62; export default class ModifierSelectUiHandler extends AwaitableUiHandler { private modifierContainer: Phaser.GameObjects.Container; @@ -68,7 +71,7 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { this.checkButtonWidth = context.measureText(i18next.t("modifierSelectUiHandler:checkTeam")).width; } - this.transferButtonContainer = this.scene.add.container((this.scene.game.canvas.width - this.checkButtonWidth) / 6 - 21, -64); + this.transferButtonContainer = this.scene.add.container((this.scene.game.canvas.width - this.checkButtonWidth) / 6 - 21, OPTION_BUTTON_YPOSITION); this.transferButtonContainer.setName("transfer-btn"); this.transferButtonContainer.setVisible(false); ui.add(this.transferButtonContainer); @@ -78,7 +81,7 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { transferButtonText.setOrigin(1, 0); this.transferButtonContainer.add(transferButtonText); - this.checkButtonContainer = this.scene.add.container((this.scene.game.canvas.width) / 6 - 1, -64); + this.checkButtonContainer = this.scene.add.container((this.scene.game.canvas.width) / 6 - 1, OPTION_BUTTON_YPOSITION); this.checkButtonContainer.setName("use-btn"); this.checkButtonContainer.setVisible(false); ui.add(this.checkButtonContainer); @@ -88,7 +91,7 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { checkButtonText.setOrigin(1, 0); this.checkButtonContainer.add(checkButtonText); - this.rerollButtonContainer = this.scene.add.container(16, -64); + this.rerollButtonContainer = this.scene.add.container(16, OPTION_BUTTON_YPOSITION); this.rerollButtonContainer.setName("reroll-brn"); this.rerollButtonContainer.setVisible(false); ui.add(this.rerollButtonContainer); @@ -104,7 +107,7 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { this.rerollCostText.setPositionRelative(rerollButtonText, rerollButtonText.displayWidth + 5, 1); this.rerollButtonContainer.add(this.rerollCostText); - this.lockRarityButtonContainer = this.scene.add.container(16, -64); + this.lockRarityButtonContainer = this.scene.add.container(16, OPTION_BUTTON_YPOSITION); this.lockRarityButtonContainer.setVisible(false); ui.add(this.lockRarityButtonContainer); @@ -191,7 +194,7 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { const shopTypeOptions = !removeHealShop ? getPlayerShopModifierTypeOptionsForWave(this.scene.currentBattle.waveIndex, baseShopCost.value) : []; - const optionsYOffset = shopTypeOptions.length >= SHOP_OPTIONS_ROW_LIMIT ? -8 : -24; + const optionsYOffset = shopTypeOptions.length > SHOP_OPTIONS_ROW_LIMIT ? -SINGLE_SHOP_ROW_YOFFSET : -DOUBLE_SHOP_ROW_YOFFSET; for (let m = 0; m < typeOptions.length; m++) { const sliceWidth = (this.scene.game.canvas.width / 6) / (typeOptions.length + 2); @@ -212,7 +215,7 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { const col = m < SHOP_OPTIONS_ROW_LIMIT ? m : m - SHOP_OPTIONS_ROW_LIMIT; const rowOptions = shopTypeOptions.slice(row ? SHOP_OPTIONS_ROW_LIMIT : 0, row ? undefined : SHOP_OPTIONS_ROW_LIMIT); const sliceWidth = (this.scene.game.canvas.width / 6) / (rowOptions.length + 2); - const option = new ModifierOption(this.scene, sliceWidth * (col + 1) + (sliceWidth * 0.5), ((-this.scene.game.canvas.height / 12) - (this.scene.game.canvas.height / 32) - (40 - (28 * row - 1))), shopTypeOptions[m]); + const option = new ModifierOption(this.scene, sliceWidth * (col + 1) + (sliceWidth * 0.5), ((-this.scene.game.canvas.height / 12) - (this.scene.game.canvas.height / 32) - (42 - (28 * row - 1))), shopTypeOptions[m]); option.setScale(0.375); this.scene.add.existing(option); this.modifierContainer.add(option); @@ -456,16 +459,18 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { if (this.rowCursor === 1 && options.length === 0) { // Continue button when no shop items this.cursorObj.setScale(1.25); - this.cursorObj.setPosition((this.scene.game.canvas.width / 18) + 23, (-this.scene.game.canvas.height / 12) - (this.shopOptionsRows.length > 1 ? 6 : 22)); + this.cursorObj.setPosition((this.scene.game.canvas.width / 18) + 23, (-this.scene.game.canvas.height / 12) - (this.shopOptionsRows.length > 1 ? SINGLE_SHOP_ROW_YOFFSET - 2 : DOUBLE_SHOP_ROW_YOFFSET - 2)); ui.showText(i18next.t("modifierSelectUiHandler:continueNextWaveDescription")); return ret; } const sliceWidth = (this.scene.game.canvas.width / 6) / (options.length + 2); if (this.rowCursor < 2) { - this.cursorObj.setPosition(sliceWidth * (cursor + 1) + (sliceWidth * 0.5) - 20, (-this.scene.game.canvas.height / 12) - (this.shopOptionsRows.length > 1 ? 6 : 22)); + // Cursor on free items + this.cursorObj.setPosition(sliceWidth * (cursor + 1) + (sliceWidth * 0.5) - 20, (-this.scene.game.canvas.height / 12) - (this.shopOptionsRows.length > 1 ? SINGLE_SHOP_ROW_YOFFSET - 2 : DOUBLE_SHOP_ROW_YOFFSET - 2)); } else { - this.cursorObj.setPosition(sliceWidth * (cursor + 1) + (sliceWidth * 0.5) - 16, (-this.scene.game.canvas.height / 12 - this.scene.game.canvas.height / 32) - (-16 + 28 * (this.rowCursor - (this.shopOptionsRows.length - 1)))); + // Cursor on paying items + this.cursorObj.setPosition(sliceWidth * (cursor + 1) + (sliceWidth * 0.5) - 16, (-this.scene.game.canvas.height / 12 - this.scene.game.canvas.height / 32) - (-14 + 28 * (this.rowCursor - (this.shopOptionsRows.length - 1)))); } const type = options[this.cursor].modifierTypeOption.type; @@ -475,16 +480,16 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { this.moveInfoOverlay.show(allMoves[type.moveId]); } } else if (cursor === 0) { - this.cursorObj.setPosition(6, this.lockRarityButtonContainer.visible ? -72 : -60); + this.cursorObj.setPosition(6, this.lockRarityButtonContainer.visible ? OPTION_BUTTON_YPOSITION - 8 : OPTION_BUTTON_YPOSITION + 4); ui.showText(i18next.t("modifierSelectUiHandler:rerollDesc")); } else if (cursor === 1) { - this.cursorObj.setPosition((this.scene.game.canvas.width - this.transferButtonWidth - this.checkButtonWidth) / 6 - 30, -60); + this.cursorObj.setPosition((this.scene.game.canvas.width - this.transferButtonWidth - this.checkButtonWidth) / 6 - 30, OPTION_BUTTON_YPOSITION + 4); ui.showText(i18next.t("modifierSelectUiHandler:transferDesc")); } else if (cursor === 2) { - this.cursorObj.setPosition((this.scene.game.canvas.width - this.checkButtonWidth) / 6 - 10, -60); + this.cursorObj.setPosition((this.scene.game.canvas.width - this.checkButtonWidth) / 6 - 10, OPTION_BUTTON_YPOSITION + 4); ui.showText(i18next.t("modifierSelectUiHandler:checkTeamDesc")); } else { - this.cursorObj.setPosition(6, -60); + this.cursorObj.setPosition(6, OPTION_BUTTON_YPOSITION + 4); ui.showText(i18next.t("modifierSelectUiHandler:lockRaritiesDesc")); } From de64fd77203e0c3040cb84e3afb3fa68a9073306 Mon Sep 17 00:00:00 2001 From: PigeonBar <56974298+PigeonBar@users.noreply.github.com> Date: Thu, 17 Oct 2024 23:52:46 -0400 Subject: [PATCH 100/153] [Misc] [Beta] Fix crash when loading save preview with Mystery Encounter Override active (#4683) --- src/battle-scene.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index ffba8e98d34..c6fff1e209a 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -3177,6 +3177,9 @@ export default class BattleScene extends SceneBase { let encounter: MysteryEncounter | null; if (!isNullOrUndefined(Overrides.MYSTERY_ENCOUNTER_OVERRIDE) && allMysteryEncounters.hasOwnProperty(Overrides.MYSTERY_ENCOUNTER_OVERRIDE)) { encounter = allMysteryEncounters[Overrides.MYSTERY_ENCOUNTER_OVERRIDE]; + if (canBypass) { + return encounter; + } } else if (canBypass) { encounter = allMysteryEncounters[encounterType ?? -1]; return encounter; From 39abac65be26c2004ea1ca9a686cc8d7b35efb65 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Sat, 19 Oct 2024 18:44:36 -0700 Subject: [PATCH 101/153] Add eslint rule to enforce indenting of `case` statements (#4692) --- eslint.config.js | 16 +- src/battle-scene.ts | 586 ++++----- src/data/ability.ts | 60 +- src/data/arena-tag.ts | 174 +-- src/data/balance/biomes.ts | 16 +- src/data/balance/starters.ts | 38 +- src/data/battle-anims.ts | 322 ++--- src/data/battler-tags.ts | 392 +++--- src/data/berry.ts | 198 +-- src/data/challenge.ts | 132 +- src/data/egg.ts | 136 +- src/data/exp.ts | 60 +- src/data/gender.ts | 16 +- src/data/move.ts | 1114 ++++++++--------- .../encounters/a-trainers-test-encounter.ts | 52 +- .../utils/encounter-phase-utils.ts | 26 +- src/data/nature.ts | 140 +-- src/data/pokeball.ts | 108 +- src/data/pokemon-species.ts | 200 +-- src/data/status-effect.ts | 44 +- src/data/terrain.ts | 76 +- src/data/trainer-config.ts | 314 ++--- src/data/type.ts | 628 +++++----- src/data/variant.ts | 24 +- src/data/weather.ts | 466 +++---- src/field/anims.ts | 30 +- src/field/arena.ts | 560 ++++----- src/field/damage-number-handler.ts | 30 +- src/field/pokemon.ts | 424 +++---- src/field/trainer.ts | 76 +- src/game-mode.ts | 148 +-- src/loading-scene.ts | 24 +- src/messages.ts | 32 +- src/modifier/modifier-type.ts | 226 ++-- src/modifier/modifier.ts | 30 +- src/phases/command-phase.ts | 250 ++-- src/phases/damage-phase.ts | 20 +- src/phases/encounter-phase.ts | 46 +- src/phases/faint-phase.ts | 22 +- src/phases/move-phase.ts | 34 +- src/phases/pokemon-anim-phase.ts | 28 +- src/phases/post-turn-status-effect-phase.ts | 20 +- src/phases/select-modifier-phase.ts | 136 +- src/phases/turn-start-phase.ts | 90 +- src/system/achv.ts | 254 ++-- src/system/game-data.ts | 82 +- src/system/settings/settings-gamepad.ts | 110 +- src/system/settings/settings-keyboard.ts | 92 +- src/system/settings/settings.ts | 450 +++---- src/system/unlockables.ts | 16 +- .../version_migration/versions/v1_0_4.ts | 18 +- src/system/voucher.ts | 48 +- .../mystery-encounter/encounter-test-utils.ts | 26 +- src/touch-controls.ts | 28 +- src/ui-inputs.ts | 38 +- src/ui/abstact-option-select-ui-handler.ts | 28 +- src/ui/achvs-ui-handler.ts | 130 +- src/ui/arena-flyout.ts | 144 +-- src/ui/ball-ui-handler.ts | 12 +- src/ui/challenges-select-ui-handler.ts | 98 +- src/ui/command-ui-handler.ts | 78 +- src/ui/daily-run-scoreboard.ts | 14 +- src/ui/dropdown.ts | 42 +- src/ui/egg-gacha-ui-handler.ts | 282 ++--- src/ui/fight-ui-handler.ts | 40 +- src/ui/game-stats-ui-handler.ts | 20 +- src/ui/login-form-ui-handler.ts | 24 +- src/ui/menu-ui-handler.ts | 274 ++-- src/ui/message-ui-handler.ts | 24 +- src/ui/modifier-select-ui-handler.ts | 154 +-- src/ui/mystery-encounter-ui-handler.ts | 192 +-- src/ui/party-ui-handler.ts | 272 ++-- src/ui/pokemon-icon-anim-handler.ts | 12 +- src/ui/registration-form-ui-handler.ts | 12 +- src/ui/run-history-ui-handler.ts | 66 +- src/ui/run-info-ui-handler.ts | 216 ++-- src/ui/save-slot-select-ui-handler.ts | 102 +- src/ui/scrollable-grid-handler.ts | 74 +- .../settings/abstract-binding-ui-handler.ts | 28 +- .../abstract-control-settings-ui-handler.ts | 132 +- .../settings/abstract-settings-ui-handler.ts | 98 +- src/ui/settings/navigationMenu.ts | 12 +- .../settings/settings-display-ui-handler.ts | 146 +-- src/ui/starter-select-ui-handler.ts | 754 +++++------ src/ui/summary-ui-handler.ts | 622 ++++----- src/ui/target-select-ui-handler.ts | 40 +- src/ui/text.ts | 328 ++--- src/ui/ui-theme.ts | 12 +- src/utils.ts | 58 +- 89 files changed, 6633 insertions(+), 6633 deletions(-) diff --git a/eslint.config.js b/eslint.config.js index c371f073f76..2f2b466c66f 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,5 +1,5 @@ import tseslint from '@typescript-eslint/eslint-plugin'; -import stylisticTs from '@stylistic/eslint-plugin-ts' +import stylisticTs from '@stylistic/eslint-plugin-ts'; import parser from '@typescript-eslint/parser'; import importX from 'eslint-plugin-import-x'; @@ -16,15 +16,15 @@ export default [ '@typescript-eslint': tseslint }, rules: { - "eqeqeq": ["error", "always"], // Enforces the use of === and !== instead of == and != - "indent": ["error", 2], // Enforces a 2-space indentation + "eqeqeq": ["error", "always"], // Enforces the use of `===` and `!==` instead of `==` and `!=` + "indent": ["error", 2, { "SwitchCase": 1 }], // Enforces a 2-space indentation, enforces indentation of `case ...:` statements "quotes": ["error", "double"], // Enforces the use of double quotes for strings - "no-var": "error", // Disallows the use of var, enforcing let or const instead - "prefer-const": "error", // Prefers the use of const for variables that are never reassigned + "no-var": "error", // Disallows the use of `var`, enforcing `let` or `const` instead + "prefer-const": "error", // Enforces the use of `const` for variables that are never reassigned "no-undef": "off", // Disables the rule that disallows the use of undeclared variables (TypeScript handles this) "@typescript-eslint/no-unused-vars": [ "error", { "args": "none", // Allows unused function parameters. Useful for functions with specific signatures where not all parameters are always used. - "ignoreRestSiblings": true // Allows unused variables that are part of a rest property in object destructuring. Useful for excluding certain properties from an object while using the rest. + "ignoreRestSiblings": true // Allows unused variables that are part of a rest property in object destructuring. Useful for excluding certain properties from an object while using the others. }], "eol-last": ["error", "always"], // Enforces at least one newline at the end of files "@stylistic/ts/semi": ["error", "always"], // Requires semicolons for TypeScript-specific syntax @@ -32,14 +32,14 @@ export default [ "no-extra-semi": ["error"], // Disallows unnecessary semicolons for TypeScript-specific syntax "brace-style": "off", // Note: you must disable the base rule as it can report incorrect errors "curly": ["error", "all"], // Enforces the use of curly braces for all control statements - "@stylistic/ts/brace-style": ["error", "1tbs"], + "@stylistic/ts/brace-style": ["error", "1tbs"], // Enforces the following brace style: https://eslint.style/rules/js/brace-style#_1tbs "no-trailing-spaces": ["error", { // Disallows trailing whitespace at the end of lines "skipBlankLines": false, // Enforces the rule even on blank lines "ignoreComments": false // Enforces the rule on lines containing comments }], "space-before-blocks": ["error", "always"], // Enforces a space before blocks "keyword-spacing": ["error", { "before": true, "after": true }], // Enforces spacing before and after keywords - "comma-spacing": ["error", { "before": false, "after": true }], // Enforces spacing after comma + "comma-spacing": ["error", { "before": false, "after": true }], // Enforces spacing after commas "import-x/extensions": ["error", "never", { "json": "always" }], // Enforces no extension for imports unless json "array-bracket-spacing": ["error", "always", { "objectsInArrays": false, "arraysInArrays": false }], // Enforces consistent spacing inside array brackets "object-curly-spacing": ["error", "always", { "arraysInObjects": false, "objectsInObjects": false }], // Enforces consistent spacing inside braces of object literals, destructuring assignments, and import/export specifiers diff --git a/src/battle-scene.ts b/src/battle-scene.ts index c6fff1e209a..0d482a5f1a5 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -1359,69 +1359,69 @@ export default class BattleScene extends SceneBase { } switch (species.speciesId) { - case Species.UNOWN: - case Species.SHELLOS: - case Species.GASTRODON: - case Species.BASCULIN: - case Species.DEERLING: - case Species.SAWSBUCK: - case Species.FROAKIE: - case Species.FROGADIER: - case Species.SCATTERBUG: - case Species.SPEWPA: - case Species.VIVILLON: - case Species.FLABEBE: - case Species.FLOETTE: - case Species.FLORGES: - case Species.FURFROU: - case Species.PUMPKABOO: - case Species.GOURGEIST: - case Species.ORICORIO: - case Species.MAGEARNA: - case Species.ZARUDE: - case Species.SQUAWKABILLY: - case Species.TATSUGIRI: - case Species.PALDEA_TAUROS: - return Utils.randSeedInt(species.forms.length); - case Species.PIKACHU: - return Utils.randSeedInt(8); - case Species.EEVEE: - return Utils.randSeedInt(2); - case Species.GRENINJA: - return Utils.randSeedInt(2); - case Species.ZYGARDE: - return Utils.randSeedInt(4); - case Species.MINIOR: - return Utils.randSeedInt(6); - case Species.ALCREMIE: - return Utils.randSeedInt(9); - case Species.MEOWSTIC: - case Species.INDEEDEE: - case Species.BASCULEGION: - case Species.OINKOLOGNE: - return gender === Gender.FEMALE ? 1 : 0; - case Species.TOXTRICITY: - const lowkeyNatures = [ Nature.LONELY, Nature.BOLD, Nature.RELAXED, Nature.TIMID, Nature.SERIOUS, Nature.MODEST, Nature.MILD, Nature.QUIET, Nature.BASHFUL, Nature.CALM, Nature.GENTLE, Nature.CAREFUL ]; - if (nature !== undefined && lowkeyNatures.indexOf(nature) > -1) { - return 1; - } - return 0; - case Species.GIMMIGHOUL: - // Chest form can only be found in Mysterious Chest Encounter, if this is a game mode with MEs - if (this.gameMode.hasMysteryEncounters) { - return 1; // Wandering form - } else { + case Species.UNOWN: + case Species.SHELLOS: + case Species.GASTRODON: + case Species.BASCULIN: + case Species.DEERLING: + case Species.SAWSBUCK: + case Species.FROAKIE: + case Species.FROGADIER: + case Species.SCATTERBUG: + case Species.SPEWPA: + case Species.VIVILLON: + case Species.FLABEBE: + case Species.FLOETTE: + case Species.FLORGES: + case Species.FURFROU: + case Species.PUMPKABOO: + case Species.GOURGEIST: + case Species.ORICORIO: + case Species.MAGEARNA: + case Species.ZARUDE: + case Species.SQUAWKABILLY: + case Species.TATSUGIRI: + case Species.PALDEA_TAUROS: return Utils.randSeedInt(species.forms.length); - } + case Species.PIKACHU: + return Utils.randSeedInt(8); + case Species.EEVEE: + return Utils.randSeedInt(2); + case Species.GRENINJA: + return Utils.randSeedInt(2); + case Species.ZYGARDE: + return Utils.randSeedInt(4); + case Species.MINIOR: + return Utils.randSeedInt(6); + case Species.ALCREMIE: + return Utils.randSeedInt(9); + case Species.MEOWSTIC: + case Species.INDEEDEE: + case Species.BASCULEGION: + case Species.OINKOLOGNE: + return gender === Gender.FEMALE ? 1 : 0; + case Species.TOXTRICITY: + const lowkeyNatures = [ Nature.LONELY, Nature.BOLD, Nature.RELAXED, Nature.TIMID, Nature.SERIOUS, Nature.MODEST, Nature.MILD, Nature.QUIET, Nature.BASHFUL, Nature.CALM, Nature.GENTLE, Nature.CAREFUL ]; + if (nature !== undefined && lowkeyNatures.indexOf(nature) > -1) { + return 1; + } + return 0; + case Species.GIMMIGHOUL: + // Chest form can only be found in Mysterious Chest Encounter, if this is a game mode with MEs + if (this.gameMode.hasMysteryEncounters) { + return 1; // Wandering form + } else { + return Utils.randSeedInt(species.forms.length); + } } if (ignoreArena) { switch (species.speciesId) { - case Species.BURMY: - case Species.WORMADAM: - case Species.ROTOM: - case Species.LYCANROC: - return Utils.randSeedInt(species.forms.length); + case Species.BURMY: + case Species.WORMADAM: + case Species.ROTOM: + case Species.LYCANROC: + return Utils.randSeedInt(species.forms.length); } return 0; } @@ -1886,17 +1886,17 @@ export default class BattleScene extends SceneBase { const soundDetails = sound.key.split("/"); switch (soundDetails[0]) { - case "battle_anims": - case "cry": - if (soundDetails[1].startsWith("PRSFX- ")) { - sound.setVolume(this.masterVolume * this.fieldVolume * 0.5); - } else { - sound.setVolume(this.masterVolume * this.fieldVolume); - } - break; - case "se": - case "ui": - sound.setVolume(this.masterVolume * this.seVolume); + case "battle_anims": + case "cry": + if (soundDetails[1].startsWith("PRSFX- ")) { + sound.setVolume(this.masterVolume * this.fieldVolume * 0.5); + } else { + sound.setVolume(this.masterVolume * this.fieldVolume); + } + break; + case "se": + case "ui": + sound.setVolume(this.masterVolume * this.seVolume); } } } @@ -1936,31 +1936,31 @@ export default class BattleScene extends SceneBase { const keyDetails = key.split("/"); config["volume"] = config["volume"] ?? 1; switch (keyDetails[0]) { - case "level_up_fanfare": - case "item_fanfare": - case "minor_fanfare": - case "heal": - case "evolution": - case "evolution_fanfare": + case "level_up_fanfare": + case "item_fanfare": + case "minor_fanfare": + case "heal": + case "evolution": + case "evolution_fanfare": // These sounds are loaded in as BGM, but played as sound effects // When these sounds are updated in updateVolume(), they are treated as BGM however because they are placed in the BGM Cache through being called by playSoundWithoutBGM() - config["volume"] *= (this.masterVolume * this.bgmVolume); - break; - case "battle_anims": - case "cry": - config["volume"] *= (this.masterVolume * this.fieldVolume); - //PRSFX sound files are unusually loud - if (keyDetails[1].startsWith("PRSFX- ")) { - config["volume"] *= 0.5; - } - break; - case "ui": + config["volume"] *= (this.masterVolume * this.bgmVolume); + break; + case "battle_anims": + case "cry": + config["volume"] *= (this.masterVolume * this.fieldVolume); + //PRSFX sound files are unusually loud + if (keyDetails[1].startsWith("PRSFX- ")) { + config["volume"] *= 0.5; + } + break; + case "ui": //As of, right now this applies to the "select", "menu_open", "error" sound effects - config["volume"] *= (this.masterVolume * this.uiVolume); - break; - case "se": - config["volume"] *= (this.masterVolume * this.seVolume); - break; + config["volume"] *= (this.masterVolume * this.uiVolume); + break; + case "se": + config["volume"] *= (this.masterVolume * this.seVolume); + break; } this.sound.play(key, config); return this.sound.get(key) as AnySound; @@ -1989,208 +1989,208 @@ export default class BattleScene extends SceneBase { getBgmLoopPoint(bgmName: string): number { switch (bgmName) { - case "battle_kanto_champion": //B2W2 Kanto Champion Battle - return 13.950; - case "battle_johto_champion": //B2W2 Johto Champion Battle - return 23.498; - case "battle_hoenn_champion_g5": //B2W2 Hoenn Champion Battle - return 11.328; - case "battle_hoenn_champion_g6": //ORAS Hoenn Champion Battle - return 11.762; - case "battle_sinnoh_champion": //B2W2 Sinnoh Champion Battle - return 12.235; - case "battle_champion_alder": //BW Unova Champion Battle - return 27.653; - case "battle_champion_iris": //B2W2 Unova Champion Battle - return 10.145; - case "battle_kalos_champion": //XY Kalos Champion Battle - return 10.380; - case "battle_alola_champion": //USUM Alola Champion Battle - return 13.025; - case "battle_galar_champion": //SWSH Galar Champion Battle - return 61.635; - case "battle_champion_geeta": //SV Champion Geeta Battle - return 37.447; - case "battle_champion_nemona": //SV Champion Nemona Battle - return 14.914; - case "battle_champion_kieran": //SV Champion Kieran Battle - return 7.206; - case "battle_hoenn_elite": //ORAS Elite Four Battle - return 11.350; - case "battle_unova_elite": //BW Elite Four Battle - return 17.730; - case "battle_kalos_elite": //XY Elite Four Battle - return 12.340; - case "battle_alola_elite": //SM Elite Four Battle - return 19.212; - case "battle_galar_elite": //SWSH League Tournament Battle - return 164.069; - case "battle_paldea_elite": //SV Elite Four Battle - return 12.770; - case "battle_bb_elite": //SV BB League Elite Four Battle - return 19.434; - case "battle_final_encounter": //PMD RTDX Rayquaza's Domain - return 19.159; - case "battle_final": //BW Ghetsis Battle - return 16.453; - case "battle_kanto_gym": //B2W2 Kanto Gym Battle - return 13.857; - case "battle_johto_gym": //B2W2 Johto Gym Battle - return 12.911; - case "battle_hoenn_gym": //B2W2 Hoenn Gym Battle - return 12.379; - case "battle_sinnoh_gym": //B2W2 Sinnoh Gym Battle - return 13.122; - case "battle_unova_gym": //BW Unova Gym Battle - return 19.145; - case "battle_kalos_gym": //XY Kalos Gym Battle - return 44.810; - case "battle_galar_gym": //SWSH Galar Gym Battle - return 171.262; - case "battle_paldea_gym": //SV Paldea Gym Battle - return 127.489; - case "battle_legendary_kanto": //XY Kanto Legendary Battle - return 32.966; - case "battle_legendary_raikou": //HGSS Raikou Battle - return 12.632; - case "battle_legendary_entei": //HGSS Entei Battle - return 2.905; - case "battle_legendary_suicune": //HGSS Suicune Battle - return 12.636; - case "battle_legendary_lugia": //HGSS Lugia Battle - return 19.770; - case "battle_legendary_ho_oh": //HGSS Ho-oh Battle - return 17.668; - case "battle_legendary_regis_g5": //B2W2 Legendary Titan Battle - return 49.500; - case "battle_legendary_regis_g6": //ORAS Legendary Titan Battle - return 21.130; - case "battle_legendary_gro_kyo": //ORAS Groudon & Kyogre Battle - return 10.547; - case "battle_legendary_rayquaza": //ORAS Rayquaza Battle - return 10.495; - case "battle_legendary_deoxys": //ORAS Deoxys Battle - return 13.333; - case "battle_legendary_lake_trio": //ORAS Lake Guardians Battle - return 16.887; - case "battle_legendary_sinnoh": //ORAS Sinnoh Legendary Battle - return 22.770; - case "battle_legendary_dia_pal": //ORAS Dialga & Palkia Battle - return 16.009; - case "battle_legendary_origin_forme": //LA Origin Dialga & Palkia Battle - return 18.961; - case "battle_legendary_giratina": //ORAS Giratina Battle - return 10.451; - case "battle_legendary_arceus": //HGSS Arceus Battle - return 9.595; - case "battle_legendary_unova": //BW Unova Legendary Battle - return 13.855; - case "battle_legendary_kyurem": //BW Kyurem Battle - return 18.314; - case "battle_legendary_res_zek": //BW Reshiram & Zekrom Battle - return 18.329; - case "battle_legendary_xern_yvel": //XY Xerneas & Yveltal Battle - return 26.468; - case "battle_legendary_tapu": //SM Tapu Battle - return 0.000; - case "battle_legendary_sol_lun": //SM Solgaleo & Lunala Battle - return 6.525; - case "battle_legendary_ub": //SM Ultra Beast Battle - return 9.818; - case "battle_legendary_dusk_dawn": //USUM Dusk Mane & Dawn Wings Necrozma Battle - return 5.211; - case "battle_legendary_ultra_nec": //USUM Ultra Necrozma Battle - return 10.344; - case "battle_legendary_zac_zam": //SWSH Zacian & Zamazenta Battle - return 11.424; - case "battle_legendary_glas_spec": //SWSH Glastrier & Spectrier Battle - return 12.503; - case "battle_legendary_calyrex": //SWSH Calyrex Battle - return 50.641; - case "battle_legendary_riders": //SWSH Ice & Shadow Rider Calyrex Battle - return 18.155; - case "battle_legendary_birds_galar": //SWSH Galarian Legendary Birds Battle - return 0.175; - case "battle_legendary_ruinous": //SV Treasures of Ruin Battle - return 6.333; - case "battle_legendary_kor_mir": //SV Depths of Area Zero Battle - return 6.442; - case "battle_legendary_loyal_three": //SV Loyal Three Battle - return 6.500; - case "battle_legendary_ogerpon": //SV Ogerpon Battle - return 14.335; - case "battle_legendary_terapagos": //SV Terapagos Battle - return 24.377; - case "battle_legendary_pecharunt": //SV Pecharunt Battle - return 6.508; - case "battle_rival": //BW Rival Battle - return 14.110; - case "battle_rival_2": //BW N Battle - return 17.714; - case "battle_rival_3": //BW Final N Battle - return 17.586; - case "battle_trainer": //BW Trainer Battle - return 13.686; - case "battle_wild": //BW Wild Battle - return 12.703; - case "battle_wild_strong": //BW Strong Wild Battle - return 13.940; - case "end_summit": //PMD RTDX Sky Tower Summit - return 30.025; - case "battle_rocket_grunt": //HGSS Team Rocket Battle - return 12.707; - case "battle_aqua_magma_grunt": //ORAS Team Aqua & Magma Battle - return 12.062; - case "battle_galactic_grunt": //BDSP Team Galactic Battle - return 13.043; - case "battle_plasma_grunt": //BW Team Plasma Battle - return 12.974; - case "battle_flare_grunt": //XY Team Flare Battle - return 4.228; - case "battle_aether_grunt": // SM Aether Foundation Battle - return 16.00; - case "battle_skull_grunt": // SM Team Skull Battle - return 20.87; - case "battle_macro_grunt": // SWSH Trainer Battle - return 11.56; - case "battle_star_grunt": //SV Team Star Battle - return 133.362; - case "battle_galactic_admin": //BDSP Team Galactic Admin Battle - return 11.997; - case "battle_skull_admin": //SM Team Skull Admin Battle - return 15.463; - case "battle_oleana": //SWSH Oleana Battle - return 14.110; - case "battle_star_admin": //SV Team Star Boss Battle - return 9.493; - case "battle_rocket_boss": //USUM Giovanni Battle - return 9.115; - case "battle_aqua_magma_boss": //ORAS Archie & Maxie Battle - return 14.847; - case "battle_galactic_boss": //BDSP Cyrus Battle - return 106.962; - case "battle_plasma_boss": //B2W2 Ghetsis Battle - return 25.624; - case "battle_flare_boss": //XY Lysandre Battle - return 8.085; - case "battle_aether_boss": //SM Lusamine Battle - return 11.33; - case "battle_skull_boss": //SM Guzma Battle - return 13.13; - case "battle_macro_boss": //SWSH Rose Battle - return 11.42; - case "battle_star_boss": //SV Cassiopeia Battle - return 25.764; - case "mystery_encounter_gen_5_gts": // BW GTS - return 8.52; - case "mystery_encounter_gen_6_gts": // XY GTS - return 9.24; - case "mystery_encounter_fun_and_games": // EoS Guildmaster Wigglytuff - return 4.78; - case "mystery_encounter_weird_dream": // EoS Temporal Spire - return 41.42; - case "mystery_encounter_delibirdy": // Firel Delibirdy - return 82.28; + case "battle_kanto_champion": //B2W2 Kanto Champion Battle + return 13.950; + case "battle_johto_champion": //B2W2 Johto Champion Battle + return 23.498; + case "battle_hoenn_champion_g5": //B2W2 Hoenn Champion Battle + return 11.328; + case "battle_hoenn_champion_g6": //ORAS Hoenn Champion Battle + return 11.762; + case "battle_sinnoh_champion": //B2W2 Sinnoh Champion Battle + return 12.235; + case "battle_champion_alder": //BW Unova Champion Battle + return 27.653; + case "battle_champion_iris": //B2W2 Unova Champion Battle + return 10.145; + case "battle_kalos_champion": //XY Kalos Champion Battle + return 10.380; + case "battle_alola_champion": //USUM Alola Champion Battle + return 13.025; + case "battle_galar_champion": //SWSH Galar Champion Battle + return 61.635; + case "battle_champion_geeta": //SV Champion Geeta Battle + return 37.447; + case "battle_champion_nemona": //SV Champion Nemona Battle + return 14.914; + case "battle_champion_kieran": //SV Champion Kieran Battle + return 7.206; + case "battle_hoenn_elite": //ORAS Elite Four Battle + return 11.350; + case "battle_unova_elite": //BW Elite Four Battle + return 17.730; + case "battle_kalos_elite": //XY Elite Four Battle + return 12.340; + case "battle_alola_elite": //SM Elite Four Battle + return 19.212; + case "battle_galar_elite": //SWSH League Tournament Battle + return 164.069; + case "battle_paldea_elite": //SV Elite Four Battle + return 12.770; + case "battle_bb_elite": //SV BB League Elite Four Battle + return 19.434; + case "battle_final_encounter": //PMD RTDX Rayquaza's Domain + return 19.159; + case "battle_final": //BW Ghetsis Battle + return 16.453; + case "battle_kanto_gym": //B2W2 Kanto Gym Battle + return 13.857; + case "battle_johto_gym": //B2W2 Johto Gym Battle + return 12.911; + case "battle_hoenn_gym": //B2W2 Hoenn Gym Battle + return 12.379; + case "battle_sinnoh_gym": //B2W2 Sinnoh Gym Battle + return 13.122; + case "battle_unova_gym": //BW Unova Gym Battle + return 19.145; + case "battle_kalos_gym": //XY Kalos Gym Battle + return 44.810; + case "battle_galar_gym": //SWSH Galar Gym Battle + return 171.262; + case "battle_paldea_gym": //SV Paldea Gym Battle + return 127.489; + case "battle_legendary_kanto": //XY Kanto Legendary Battle + return 32.966; + case "battle_legendary_raikou": //HGSS Raikou Battle + return 12.632; + case "battle_legendary_entei": //HGSS Entei Battle + return 2.905; + case "battle_legendary_suicune": //HGSS Suicune Battle + return 12.636; + case "battle_legendary_lugia": //HGSS Lugia Battle + return 19.770; + case "battle_legendary_ho_oh": //HGSS Ho-oh Battle + return 17.668; + case "battle_legendary_regis_g5": //B2W2 Legendary Titan Battle + return 49.500; + case "battle_legendary_regis_g6": //ORAS Legendary Titan Battle + return 21.130; + case "battle_legendary_gro_kyo": //ORAS Groudon & Kyogre Battle + return 10.547; + case "battle_legendary_rayquaza": //ORAS Rayquaza Battle + return 10.495; + case "battle_legendary_deoxys": //ORAS Deoxys Battle + return 13.333; + case "battle_legendary_lake_trio": //ORAS Lake Guardians Battle + return 16.887; + case "battle_legendary_sinnoh": //ORAS Sinnoh Legendary Battle + return 22.770; + case "battle_legendary_dia_pal": //ORAS Dialga & Palkia Battle + return 16.009; + case "battle_legendary_origin_forme": //LA Origin Dialga & Palkia Battle + return 18.961; + case "battle_legendary_giratina": //ORAS Giratina Battle + return 10.451; + case "battle_legendary_arceus": //HGSS Arceus Battle + return 9.595; + case "battle_legendary_unova": //BW Unova Legendary Battle + return 13.855; + case "battle_legendary_kyurem": //BW Kyurem Battle + return 18.314; + case "battle_legendary_res_zek": //BW Reshiram & Zekrom Battle + return 18.329; + case "battle_legendary_xern_yvel": //XY Xerneas & Yveltal Battle + return 26.468; + case "battle_legendary_tapu": //SM Tapu Battle + return 0.000; + case "battle_legendary_sol_lun": //SM Solgaleo & Lunala Battle + return 6.525; + case "battle_legendary_ub": //SM Ultra Beast Battle + return 9.818; + case "battle_legendary_dusk_dawn": //USUM Dusk Mane & Dawn Wings Necrozma Battle + return 5.211; + case "battle_legendary_ultra_nec": //USUM Ultra Necrozma Battle + return 10.344; + case "battle_legendary_zac_zam": //SWSH Zacian & Zamazenta Battle + return 11.424; + case "battle_legendary_glas_spec": //SWSH Glastrier & Spectrier Battle + return 12.503; + case "battle_legendary_calyrex": //SWSH Calyrex Battle + return 50.641; + case "battle_legendary_riders": //SWSH Ice & Shadow Rider Calyrex Battle + return 18.155; + case "battle_legendary_birds_galar": //SWSH Galarian Legendary Birds Battle + return 0.175; + case "battle_legendary_ruinous": //SV Treasures of Ruin Battle + return 6.333; + case "battle_legendary_kor_mir": //SV Depths of Area Zero Battle + return 6.442; + case "battle_legendary_loyal_three": //SV Loyal Three Battle + return 6.500; + case "battle_legendary_ogerpon": //SV Ogerpon Battle + return 14.335; + case "battle_legendary_terapagos": //SV Terapagos Battle + return 24.377; + case "battle_legendary_pecharunt": //SV Pecharunt Battle + return 6.508; + case "battle_rival": //BW Rival Battle + return 14.110; + case "battle_rival_2": //BW N Battle + return 17.714; + case "battle_rival_3": //BW Final N Battle + return 17.586; + case "battle_trainer": //BW Trainer Battle + return 13.686; + case "battle_wild": //BW Wild Battle + return 12.703; + case "battle_wild_strong": //BW Strong Wild Battle + return 13.940; + case "end_summit": //PMD RTDX Sky Tower Summit + return 30.025; + case "battle_rocket_grunt": //HGSS Team Rocket Battle + return 12.707; + case "battle_aqua_magma_grunt": //ORAS Team Aqua & Magma Battle + return 12.062; + case "battle_galactic_grunt": //BDSP Team Galactic Battle + return 13.043; + case "battle_plasma_grunt": //BW Team Plasma Battle + return 12.974; + case "battle_flare_grunt": //XY Team Flare Battle + return 4.228; + case "battle_aether_grunt": // SM Aether Foundation Battle + return 16.00; + case "battle_skull_grunt": // SM Team Skull Battle + return 20.87; + case "battle_macro_grunt": // SWSH Trainer Battle + return 11.56; + case "battle_star_grunt": //SV Team Star Battle + return 133.362; + case "battle_galactic_admin": //BDSP Team Galactic Admin Battle + return 11.997; + case "battle_skull_admin": //SM Team Skull Admin Battle + return 15.463; + case "battle_oleana": //SWSH Oleana Battle + return 14.110; + case "battle_star_admin": //SV Team Star Boss Battle + return 9.493; + case "battle_rocket_boss": //USUM Giovanni Battle + return 9.115; + case "battle_aqua_magma_boss": //ORAS Archie & Maxie Battle + return 14.847; + case "battle_galactic_boss": //BDSP Cyrus Battle + return 106.962; + case "battle_plasma_boss": //B2W2 Ghetsis Battle + return 25.624; + case "battle_flare_boss": //XY Lysandre Battle + return 8.085; + case "battle_aether_boss": //SM Lusamine Battle + return 11.33; + case "battle_skull_boss": //SM Guzma Battle + return 13.13; + case "battle_macro_boss": //SWSH Rose Battle + return 11.42; + case "battle_star_boss": //SV Cassiopeia Battle + return 25.764; + case "mystery_encounter_gen_5_gts": // BW GTS + return 8.52; + case "mystery_encounter_gen_6_gts": // XY GTS + return 9.24; + case "mystery_encounter_fun_and_games": // EoS Guildmaster Wigglytuff + return 4.78; + case "mystery_encounter_weird_dream": // EoS Temporal Spire + return 41.42; + case "mystery_encounter_delibirdy": // Firel Delibirdy + return 82.28; } return 0; diff --git a/src/data/ability.ts b/src/data/ability.ts index 5d2ccfc9d36..33f6e0522f7 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -2579,24 +2579,24 @@ export class PreSwitchOutClearWeatherAbAttr extends PreSwitchOutAbAttr { // Clear weather only if user's ability matches the weather and no other pokemon has the ability. switch (weatherType) { - case (WeatherType.HARSH_SUN): - if (pokemon.hasAbility(Abilities.DESOLATE_LAND) + case (WeatherType.HARSH_SUN): + if (pokemon.hasAbility(Abilities.DESOLATE_LAND) && pokemon.scene.getField(true).filter(p => p !== pokemon).filter(p => p.hasAbility(Abilities.DESOLATE_LAND)).length === 0) { - turnOffWeather = true; - } - break; - case (WeatherType.HEAVY_RAIN): - if (pokemon.hasAbility(Abilities.PRIMORDIAL_SEA) + turnOffWeather = true; + } + break; + case (WeatherType.HEAVY_RAIN): + if (pokemon.hasAbility(Abilities.PRIMORDIAL_SEA) && pokemon.scene.getField(true).filter(p => p !== pokemon).filter(p => p.hasAbility(Abilities.PRIMORDIAL_SEA)).length === 0) { - turnOffWeather = true; - } - break; - case (WeatherType.STRONG_WINDS): - if (pokemon.hasAbility(Abilities.DELTA_STREAM) + turnOffWeather = true; + } + break; + case (WeatherType.STRONG_WINDS): + if (pokemon.hasAbility(Abilities.DELTA_STREAM) && pokemon.scene.getField(true).filter(p => p !== pokemon).filter(p => p.hasAbility(Abilities.DELTA_STREAM)).length === 0) { - turnOffWeather = true; - } - break; + turnOffWeather = true; + } + break; } if (simulated) { @@ -4079,24 +4079,24 @@ export class PostFaintClearWeatherAbAttr extends PostFaintAbAttr { // Clear weather only if user's ability matches the weather and no other pokemon has the ability. switch (weatherType) { - case (WeatherType.HARSH_SUN): - if (pokemon.hasAbility(Abilities.DESOLATE_LAND) + case (WeatherType.HARSH_SUN): + if (pokemon.hasAbility(Abilities.DESOLATE_LAND) && pokemon.scene.getField(true).filter(p => p.hasAbility(Abilities.DESOLATE_LAND)).length === 0) { - turnOffWeather = true; - } - break; - case (WeatherType.HEAVY_RAIN): - if (pokemon.hasAbility(Abilities.PRIMORDIAL_SEA) + turnOffWeather = true; + } + break; + case (WeatherType.HEAVY_RAIN): + if (pokemon.hasAbility(Abilities.PRIMORDIAL_SEA) && pokemon.scene.getField(true).filter(p => p.hasAbility(Abilities.PRIMORDIAL_SEA)).length === 0) { - turnOffWeather = true; - } - break; - case (WeatherType.STRONG_WINDS): - if (pokemon.hasAbility(Abilities.DELTA_STREAM) + turnOffWeather = true; + } + break; + case (WeatherType.STRONG_WINDS): + if (pokemon.hasAbility(Abilities.DELTA_STREAM) && pokemon.scene.getField(true).filter(p => p.hasAbility(Abilities.DELTA_STREAM)).length === 0) { - turnOffWeather = true; - } - break; + turnOffWeather = true; + } + break; } if (simulated) { diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index 2bd6ae09877..6507d34dcfd 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -88,13 +88,13 @@ export abstract class ArenaTag { */ public getAffectedPokemon(scene: BattleScene): Pokemon[] { switch (this.side) { - case ArenaTagSide.PLAYER: - return scene.getPlayerField() ?? []; - case ArenaTagSide.ENEMY: - return scene.getEnemyField() ?? []; - case ArenaTagSide.BOTH: - default: - return scene.getField(true) ?? []; + case ArenaTagSide.PLAYER: + return scene.getPlayerField() ?? []; + case ArenaTagSide.ENEMY: + return scene.getEnemyField() ?? []; + case ArenaTagSide.BOTH: + default: + return scene.getField(true) ?? []; } } } @@ -332,11 +332,11 @@ const WideGuardConditionFunc: ProtectConditionFunc = (arena, moveId) : boolean = const move = allMoves[moveId]; switch (move.moveTarget) { - case MoveTarget.ALL_ENEMIES: - case MoveTarget.ALL_NEAR_ENEMIES: - case MoveTarget.ALL_OTHERS: - case MoveTarget.ALL_NEAR_OTHERS: - return true; + case MoveTarget.ALL_ENEMIES: + case MoveTarget.ALL_NEAR_ENEMIES: + case MoveTarget.ALL_OTHERS: + case MoveTarget.ALL_NEAR_OTHERS: + return true; } return false; }; @@ -807,24 +807,24 @@ class StealthRockTag extends ArenaTrapTag { let damageHpRatio: number = 0; switch (effectiveness) { - case 0: - damageHpRatio = 0; - break; - case 0.25: - damageHpRatio = 0.03125; - break; - case 0.5: - damageHpRatio = 0.0625; - break; - case 1: - damageHpRatio = 0.125; - break; - case 2: - damageHpRatio = 0.25; - break; - case 4: - damageHpRatio = 0.5; - break; + case 0: + damageHpRatio = 0; + break; + case 0.25: + damageHpRatio = 0.03125; + break; + case 0.5: + damageHpRatio = 0.0625; + break; + case 1: + damageHpRatio = 0.125; + break; + case 2: + damageHpRatio = 0.25; + break; + case 4: + damageHpRatio = 0.5; + break; } return damageHpRatio; @@ -1185,63 +1185,63 @@ class GrassWaterPledgeTag extends ArenaTag { // TODO: swap `sourceMove` and `sourceId` and make `sourceMove` an optional parameter export function getArenaTag(tagType: ArenaTagType, turnCount: number, sourceMove: Moves | undefined, sourceId: number, targetIndex?: BattlerIndex, side: ArenaTagSide = ArenaTagSide.BOTH): ArenaTag | null { switch (tagType) { - case ArenaTagType.MIST: - return new MistTag(turnCount, sourceId, side); - case ArenaTagType.QUICK_GUARD: - return new QuickGuardTag(sourceId, side); - case ArenaTagType.WIDE_GUARD: - return new WideGuardTag(sourceId, side); - case ArenaTagType.MAT_BLOCK: - return new MatBlockTag(sourceId, side); - case ArenaTagType.CRAFTY_SHIELD: - return new CraftyShieldTag(sourceId, side); - case ArenaTagType.NO_CRIT: - return new NoCritTag(turnCount, sourceMove!, sourceId, side); // TODO: is this bang correct? - case ArenaTagType.MUD_SPORT: - return new MudSportTag(turnCount, sourceId); - case ArenaTagType.WATER_SPORT: - return new WaterSportTag(turnCount, sourceId); - case ArenaTagType.ION_DELUGE: - return new IonDelugeTag(sourceMove); - case ArenaTagType.SPIKES: - return new SpikesTag(sourceId, side); - case ArenaTagType.TOXIC_SPIKES: - return new ToxicSpikesTag(sourceId, side); - case ArenaTagType.FUTURE_SIGHT: - case ArenaTagType.DOOM_DESIRE: - return new DelayedAttackTag(tagType, sourceMove, sourceId, targetIndex!); // TODO:questionable bang - case ArenaTagType.WISH: - return new WishTag(turnCount, sourceId, side); - case ArenaTagType.STEALTH_ROCK: - return new StealthRockTag(sourceId, side); - case ArenaTagType.STICKY_WEB: - return new StickyWebTag(sourceId, side); - case ArenaTagType.TRICK_ROOM: - return new TrickRoomTag(turnCount, sourceId); - case ArenaTagType.GRAVITY: - return new GravityTag(turnCount); - case ArenaTagType.REFLECT: - return new ReflectTag(turnCount, sourceId, side); - case ArenaTagType.LIGHT_SCREEN: - return new LightScreenTag(turnCount, sourceId, side); - case ArenaTagType.AURORA_VEIL: - return new AuroraVeilTag(turnCount, sourceId, side); - case ArenaTagType.TAILWIND: - return new TailwindTag(turnCount, sourceId, side); - case ArenaTagType.HAPPY_HOUR: - return new HappyHourTag(turnCount, sourceId, side); - case ArenaTagType.SAFEGUARD: - return new SafeguardTag(turnCount, sourceId, side); - case ArenaTagType.IMPRISON: - return new ImprisonTag(sourceId, side); - case ArenaTagType.FIRE_GRASS_PLEDGE: - return new FireGrassPledgeTag(sourceId, side); - case ArenaTagType.WATER_FIRE_PLEDGE: - return new WaterFirePledgeTag(sourceId, side); - case ArenaTagType.GRASS_WATER_PLEDGE: - return new GrassWaterPledgeTag(sourceId, side); - default: - return null; + case ArenaTagType.MIST: + return new MistTag(turnCount, sourceId, side); + case ArenaTagType.QUICK_GUARD: + return new QuickGuardTag(sourceId, side); + case ArenaTagType.WIDE_GUARD: + return new WideGuardTag(sourceId, side); + case ArenaTagType.MAT_BLOCK: + return new MatBlockTag(sourceId, side); + case ArenaTagType.CRAFTY_SHIELD: + return new CraftyShieldTag(sourceId, side); + case ArenaTagType.NO_CRIT: + return new NoCritTag(turnCount, sourceMove!, sourceId, side); // TODO: is this bang correct? + case ArenaTagType.MUD_SPORT: + return new MudSportTag(turnCount, sourceId); + case ArenaTagType.WATER_SPORT: + return new WaterSportTag(turnCount, sourceId); + case ArenaTagType.ION_DELUGE: + return new IonDelugeTag(sourceMove); + case ArenaTagType.SPIKES: + return new SpikesTag(sourceId, side); + case ArenaTagType.TOXIC_SPIKES: + return new ToxicSpikesTag(sourceId, side); + case ArenaTagType.FUTURE_SIGHT: + case ArenaTagType.DOOM_DESIRE: + return new DelayedAttackTag(tagType, sourceMove, sourceId, targetIndex!); // TODO:questionable bang + case ArenaTagType.WISH: + return new WishTag(turnCount, sourceId, side); + case ArenaTagType.STEALTH_ROCK: + return new StealthRockTag(sourceId, side); + case ArenaTagType.STICKY_WEB: + return new StickyWebTag(sourceId, side); + case ArenaTagType.TRICK_ROOM: + return new TrickRoomTag(turnCount, sourceId); + case ArenaTagType.GRAVITY: + return new GravityTag(turnCount); + case ArenaTagType.REFLECT: + return new ReflectTag(turnCount, sourceId, side); + case ArenaTagType.LIGHT_SCREEN: + return new LightScreenTag(turnCount, sourceId, side); + case ArenaTagType.AURORA_VEIL: + return new AuroraVeilTag(turnCount, sourceId, side); + case ArenaTagType.TAILWIND: + return new TailwindTag(turnCount, sourceId, side); + case ArenaTagType.HAPPY_HOUR: + return new HappyHourTag(turnCount, sourceId, side); + case ArenaTagType.SAFEGUARD: + return new SafeguardTag(turnCount, sourceId, side); + case ArenaTagType.IMPRISON: + return new ImprisonTag(sourceId, side); + case ArenaTagType.FIRE_GRASS_PLEDGE: + return new FireGrassPledgeTag(sourceId, side); + case ArenaTagType.WATER_FIRE_PLEDGE: + return new WaterFirePledgeTag(sourceId, side); + case ArenaTagType.GRASS_WATER_PLEDGE: + return new GrassWaterPledgeTag(sourceId, side); + default: + return null; } } diff --git a/src/data/balance/biomes.ts b/src/data/balance/biomes.ts index 7ef83b654db..2ce693c360b 100644 --- a/src/data/balance/biomes.ts +++ b/src/data/balance/biomes.ts @@ -13,14 +13,14 @@ export function getBiomeName(biome: Biome | -1) { return i18next.t("biome:unknownLocation"); } switch (biome) { - case Biome.GRASS: - return i18next.t("biome:GRASS"); - case Biome.RUINS: - return i18next.t("biome:RUINS"); - case Biome.END: - return i18next.t("biome:END"); - default: - return i18next.t(`biome:${Biome[biome].toUpperCase()}`); + case Biome.GRASS: + return i18next.t("biome:GRASS"); + case Biome.RUINS: + return i18next.t("biome:RUINS"); + case Biome.END: + return i18next.t("biome:END"); + default: + return i18next.t(`biome:${Biome[biome].toUpperCase()}`); } } diff --git a/src/data/balance/starters.ts b/src/data/balance/starters.ts index bf3a1f7ad56..d6a1f0c3eaf 100644 --- a/src/data/balance/starters.ts +++ b/src/data/balance/starters.ts @@ -15,25 +15,25 @@ export const FRIENDSHIP_LOSS_FROM_FAINT = 10; */ export function getStarterValueFriendshipCap(starterCost: number): number { switch (starterCost) { - case 1: - return 20; - case 2: - return 40; - case 3: - return 60; - case 4: - return 100; - case 5: - return 140; - case 6: - return 200; - case 7: - return 280; - case 8: - case 9: - return 450; - default: - return 600; + case 1: + return 20; + case 2: + return 40; + case 3: + return 60; + case 4: + return 100; + case 5: + return 140; + case 6: + return 200; + case 7: + return 280; + case 8: + case 9: + return 450; + default: + return 600; } } diff --git a/src/data/battle-anims.ts b/src/data/battle-anims.ts index 939f834cccc..03bf0809fa6 100644 --- a/src/data/battle-anims.ts +++ b/src/data/battle-anims.ts @@ -134,15 +134,15 @@ export class AnimConfig { for (const te of frameTimedEvents[fte]) { let timedEvent: AnimTimedEvent | undefined; switch (te.eventType) { - case "AnimTimedSoundEvent": - timedEvent = new AnimTimedSoundEvent(te.frameIndex, te.resourceName, te); - break; - case "AnimTimedAddBgEvent": - timedEvent = new AnimTimedAddBgEvent(te.frameIndex, te.resourceName, te); - break; - case "AnimTimedUpdateBgEvent": - timedEvent = new AnimTimedUpdateBgEvent(te.frameIndex, te.resourceName, te); - break; + case "AnimTimedSoundEvent": + timedEvent = new AnimTimedSoundEvent(te.frameIndex, te.resourceName, te); + break; + case "AnimTimedAddBgEvent": + timedEvent = new AnimTimedAddBgEvent(te.frameIndex, te.resourceName, te); + break; + case "AnimTimedUpdateBgEvent": + timedEvent = new AnimTimedUpdateBgEvent(te.frameIndex, te.resourceName, te); + break; } timedEvent && timedEvents.push(timedEvent); @@ -243,12 +243,12 @@ class AnimFrame { if (!init) { let target = AnimFrameTarget.GRAPHIC; switch (pattern) { - case -2: - target = AnimFrameTarget.TARGET; - break; - case -1: - target = AnimFrameTarget.USER; - break; + case -2: + target = AnimFrameTarget.TARGET; + break; + case -1: + target = AnimFrameTarget.USER; + break; } this.target = target; this.graphicFrame = pattern >= 0 ? pattern : 0; @@ -803,23 +803,23 @@ export abstract class BattleAnim { let scaleX = (frame.zoomX / 100) * (!frame.mirror ? 1 : -1); const scaleY = (frame.zoomY / 100); switch (frame.focus) { - case AnimFocus.TARGET: - x += targetInitialX - targetFocusX; - y += (targetInitialY - targetHalfHeight) - targetFocusY; - break; - case AnimFocus.USER: - x += userInitialX - userFocusX; - y += (userInitialY - userHalfHeight) - userFocusY; - break; - case AnimFocus.USER_TARGET: - const point = transformPoint(this.srcLine[0], this.srcLine[1], this.srcLine[2], this.srcLine[3], - this.dstLine[0], this.dstLine[1] - userHalfHeight, this.dstLine[2], this.dstLine[3] - targetHalfHeight, x, y); - x = point[0]; - y = point[1]; - if (frame.target === AnimFrameTarget.GRAPHIC && isReversed(this.srcLine[0], this.srcLine[2], this.dstLine[0], this.dstLine[2])) { - scaleX = scaleX * -1; - } - break; + case AnimFocus.TARGET: + x += targetInitialX - targetFocusX; + y += (targetInitialY - targetHalfHeight) - targetFocusY; + break; + case AnimFocus.USER: + x += userInitialX - userFocusX; + y += (userInitialY - userHalfHeight) - userFocusY; + break; + case AnimFocus.USER_TARGET: + const point = transformPoint(this.srcLine[0], this.srcLine[1], this.srcLine[2], this.srcLine[3], + this.dstLine[0], this.dstLine[1] - userHalfHeight, this.dstLine[2], this.dstLine[3] - targetHalfHeight, x, y); + x = point[0]; + y = point[1]; + if (frame.target === AnimFrameTarget.GRAPHIC && isReversed(this.srcLine[0], this.srcLine[2], this.dstLine[0], this.dstLine[2])) { + scaleX = scaleX * -1; + } + break; } const angle = -frame.angle; const key = frame.target === AnimFrameTarget.GRAPHIC ? g++ : frame.target === AnimFrameTarget.USER ? u++ : t++; @@ -993,44 +993,44 @@ export abstract class BattleAnim { spritePriorities[graphicIndex] = frame.priority; const setSpritePriority = (priority: integer) => { switch (priority) { - case 0: - scene.field.moveBelow(moveSprite as Phaser.GameObjects.GameObject, scene.getNonSwitchedEnemyPokemon() || scene.getNonSwitchedPlayerPokemon()!); // This bang assumes that if (the EnemyPokemon is undefined, then the PlayerPokemon function must return an object), correct assumption? - break; - case 1: - scene.field.moveTo(moveSprite, scene.field.getAll().length - 1); - break; - case 2: - switch (frame.focus) { - case AnimFocus.USER: - if (this.bgSprite) { - scene.field.moveAbove(moveSprite as Phaser.GameObjects.GameObject, this.bgSprite); - } else { - scene.field.moveBelow(moveSprite as Phaser.GameObjects.GameObject, this.user!); // TODO: is this bang correct? + case 0: + scene.field.moveBelow(moveSprite as Phaser.GameObjects.GameObject, scene.getNonSwitchedEnemyPokemon() || scene.getNonSwitchedPlayerPokemon()!); // This bang assumes that if (the EnemyPokemon is undefined, then the PlayerPokemon function must return an object), correct assumption? + break; + case 1: + scene.field.moveTo(moveSprite, scene.field.getAll().length - 1); + break; + case 2: + switch (frame.focus) { + case AnimFocus.USER: + if (this.bgSprite) { + scene.field.moveAbove(moveSprite as Phaser.GameObjects.GameObject, this.bgSprite); + } else { + scene.field.moveBelow(moveSprite as Phaser.GameObjects.GameObject, this.user!); // TODO: is this bang correct? + } + break; + case AnimFocus.TARGET: + scene.field.moveBelow(moveSprite as Phaser.GameObjects.GameObject, this.target!); // TODO: is this bang correct? + break; + default: + setSpritePriority(1); + break; } break; - case AnimFocus.TARGET: - scene.field.moveBelow(moveSprite as Phaser.GameObjects.GameObject, this.target!); // TODO: is this bang correct? + case 3: + switch (frame.focus) { + case AnimFocus.USER: + scene.field.moveAbove(moveSprite as Phaser.GameObjects.GameObject, this.user!); // TODO: is this bang correct? + break; + case AnimFocus.TARGET: + scene.field.moveAbove(moveSprite as Phaser.GameObjects.GameObject, this.target!); // TODO: is this bang correct? + break; + default: + setSpritePriority(1); + break; + } break; default: setSpritePriority(1); - break; - } - break; - case 3: - switch (frame.focus) { - case AnimFocus.USER: - scene.field.moveAbove(moveSprite as Phaser.GameObjects.GameObject, this.user!); // TODO: is this bang correct? - break; - case AnimFocus.TARGET: - scene.field.moveAbove(moveSprite as Phaser.GameObjects.GameObject, this.target!); // TODO: is this bang correct? - break; - default: - setSpritePriority(1); - break; - } - break; - default: - setSpritePriority(1); } }; setSpritePriority(frame.priority); @@ -1396,108 +1396,108 @@ export async function populateAnims() { const fieldName = field.slice(0, field.indexOf(":")); const fieldData = field.slice(fieldName.length + 1, field.lastIndexOf("\n")).trim(); switch (fieldName) { - case "array": - const framesData = fieldData.split(" - - - ").slice(1); - for (let fd = 0; fd < framesData.length; fd++) { - anim.frames.push([]); - const frameData = framesData[fd]; - const focusFramesData = frameData.split(" - - "); - for (let tf = 0; tf < focusFramesData.length; tf++) { - const values = focusFramesData[tf].replace(/ \- /g, "").split("\n"); - const targetFrame = new AnimFrame(parseFloat(values[0]), parseFloat(values[1]), parseFloat(values[2]), parseFloat(values[11]), parseFloat(values[3]), - parseInt(values[4]) === 1, parseInt(values[6]) === 1, parseInt(values[5]), parseInt(values[7]), parseInt(values[8]), parseInt(values[12]), parseInt(values[13]), - parseInt(values[14]), parseInt(values[15]), parseInt(values[16]), parseInt(values[17]), parseInt(values[18]), parseInt(values[19]), - parseInt(values[21]), parseInt(values[22]), parseInt(values[23]), parseInt(values[24]), parseInt(values[20]) === 1, parseInt(values[25]), parseInt(values[26]) as AnimFocus); - anim.frames[fd].push(targetFrame); + case "array": + const framesData = fieldData.split(" - - - ").slice(1); + for (let fd = 0; fd < framesData.length; fd++) { + anim.frames.push([]); + const frameData = framesData[fd]; + const focusFramesData = frameData.split(" - - "); + for (let tf = 0; tf < focusFramesData.length; tf++) { + const values = focusFramesData[tf].replace(/ \- /g, "").split("\n"); + const targetFrame = new AnimFrame(parseFloat(values[0]), parseFloat(values[1]), parseFloat(values[2]), parseFloat(values[11]), parseFloat(values[3]), + parseInt(values[4]) === 1, parseInt(values[6]) === 1, parseInt(values[5]), parseInt(values[7]), parseInt(values[8]), parseInt(values[12]), parseInt(values[13]), + parseInt(values[14]), parseInt(values[15]), parseInt(values[16]), parseInt(values[17]), parseInt(values[18]), parseInt(values[19]), + parseInt(values[21]), parseInt(values[22]), parseInt(values[23]), parseInt(values[24]), parseInt(values[20]) === 1, parseInt(values[25]), parseInt(values[26]) as AnimFocus); + anim.frames[fd].push(targetFrame); + } } - } - break; - case "graphic": - const graphic = fieldData !== "''" ? fieldData : ""; - anim.graphic = graphic.indexOf(".") > -1 - ? graphic.slice(0, fieldData.indexOf(".")) - : graphic; - break; - case "timing": - const timingEntries = fieldData.split("- !ruby/object:PBAnimTiming ").slice(1); - for (let t = 0; t < timingEntries.length; t++) { - const timingData = timingEntries[t].replace(/\n/g, " ").replace(/[ ]{2,}/g, " ").replace(/[a-z]+: ! '', /ig, "").replace(/name: (.*?),/, "name: \"$1\",") - .replace(/flashColor: !ruby\/object:Color { alpha: ([\d\.]+), blue: ([\d\.]+), green: ([\d\.]+), red: ([\d\.]+)}/, "flashRed: $4, flashGreen: $3, flashBlue: $2, flashAlpha: $1"); - const frameIndex = parseInt(/frame: (\d+)/.exec(timingData)![1]); // TODO: is the bang correct? - let resourceName = /name: "(.*?)"/.exec(timingData)![1].replace("''", ""); // TODO: is the bang correct? - const timingType = parseInt(/timingType: (\d)/.exec(timingData)![1]); // TODO: is the bang correct? - let timedEvent: AnimTimedEvent | undefined; - switch (timingType) { - case 0: - if (resourceName && resourceName.indexOf(".") === -1) { - let ext: string | undefined; - [ "wav", "mp3", "m4a" ].every(e => { - if (seNames.indexOf(`${resourceName}.${e}`) > -1) { - ext = e; - return false; + break; + case "graphic": + const graphic = fieldData !== "''" ? fieldData : ""; + anim.graphic = graphic.indexOf(".") > -1 + ? graphic.slice(0, fieldData.indexOf(".")) + : graphic; + break; + case "timing": + const timingEntries = fieldData.split("- !ruby/object:PBAnimTiming ").slice(1); + for (let t = 0; t < timingEntries.length; t++) { + const timingData = timingEntries[t].replace(/\n/g, " ").replace(/[ ]{2,}/g, " ").replace(/[a-z]+: ! '', /ig, "").replace(/name: (.*?),/, "name: \"$1\",") + .replace(/flashColor: !ruby\/object:Color { alpha: ([\d\.]+), blue: ([\d\.]+), green: ([\d\.]+), red: ([\d\.]+)}/, "flashRed: $4, flashGreen: $3, flashBlue: $2, flashAlpha: $1"); + const frameIndex = parseInt(/frame: (\d+)/.exec(timingData)![1]); // TODO: is the bang correct? + let resourceName = /name: "(.*?)"/.exec(timingData)![1].replace("''", ""); // TODO: is the bang correct? + const timingType = parseInt(/timingType: (\d)/.exec(timingData)![1]); // TODO: is the bang correct? + let timedEvent: AnimTimedEvent | undefined; + switch (timingType) { + case 0: + if (resourceName && resourceName.indexOf(".") === -1) { + let ext: string | undefined; + [ "wav", "mp3", "m4a" ].every(e => { + if (seNames.indexOf(`${resourceName}.${e}`) > -1) { + ext = e; + return false; + } + return true; + }); + if (!ext) { + ext = ".wav"; + } + resourceName += `.${ext}`; } - return true; - }); - if (!ext) { - ext = ".wav"; + timedEvent = new AnimTimedSoundEvent(frameIndex, resourceName); + break; + case 1: + timedEvent = new AnimTimedAddBgEvent(frameIndex, resourceName.slice(0, resourceName.indexOf("."))); + break; + case 2: + timedEvent = new AnimTimedUpdateBgEvent(frameIndex, resourceName.slice(0, resourceName.indexOf("."))); + break; + } + if (!timedEvent) { + continue; + } + const propPattern = /([a-z]+): (.*?)(?:,|\})/ig; + let propMatch: RegExpExecArray; + while ((propMatch = propPattern.exec(timingData)!)) { // TODO: is this bang correct? + const prop = propMatch[1]; + let value: any = propMatch[2]; + switch (prop) { + case "bgX": + case "bgY": + value = parseFloat(value); + break; + case "volume": + case "pitch": + case "opacity": + case "colorRed": + case "colorGreen": + case "colorBlue": + case "colorAlpha": + case "duration": + case "flashScope": + case "flashRed": + case "flashGreen": + case "flashBlue": + case "flashAlpha": + case "flashDuration": + value = parseInt(value); + break; + } + if (timedEvent.hasOwnProperty(prop)) { + timedEvent[prop] = value; } - resourceName += `.${ext}`; } - timedEvent = new AnimTimedSoundEvent(frameIndex, resourceName); - break; - case 1: - timedEvent = new AnimTimedAddBgEvent(frameIndex, resourceName.slice(0, resourceName.indexOf("."))); - break; - case 2: - timedEvent = new AnimTimedUpdateBgEvent(frameIndex, resourceName.slice(0, resourceName.indexOf("."))); - break; - } - if (!timedEvent) { - continue; - } - const propPattern = /([a-z]+): (.*?)(?:,|\})/ig; - let propMatch: RegExpExecArray; - while ((propMatch = propPattern.exec(timingData)!)) { // TODO: is this bang correct? - const prop = propMatch[1]; - let value: any = propMatch[2]; - switch (prop) { - case "bgX": - case "bgY": - value = parseFloat(value); - break; - case "volume": - case "pitch": - case "opacity": - case "colorRed": - case "colorGreen": - case "colorBlue": - case "colorAlpha": - case "duration": - case "flashScope": - case "flashRed": - case "flashGreen": - case "flashBlue": - case "flashAlpha": - case "flashDuration": - value = parseInt(value); - break; + if (!anim.frameTimedEvents.has(frameIndex)) { + anim.frameTimedEvents.set(frameIndex, []); } - if (timedEvent.hasOwnProperty(prop)) { - timedEvent[prop] = value; - } - } - if (!anim.frameTimedEvents.has(frameIndex)) { - anim.frameTimedEvents.set(frameIndex, []); - } anim.frameTimedEvents.get(frameIndex)!.push(timedEvent); // TODO: is this bang correct? - } - break; - case "position": - anim.position = parseInt(fieldData); - break; - case "hue": - anim.hue = parseInt(fieldData); - break; + } + break; + case "position": + anim.position = parseInt(fieldData); + break; + case "hue": + anim.hue = parseInt(fieldData); + break; } } } diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 8491307fc76..4977a8da5a9 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -919,14 +919,14 @@ export class EncoreTag extends BattlerTag { } switch (repeatableMove.move) { - case Moves.MIMIC: - case Moves.MIRROR_MOVE: - case Moves.TRANSFORM: - case Moves.STRUGGLE: - case Moves.SKETCH: - case Moves.SLEEP_TALK: - case Moves.ENCORE: - return false; + case Moves.MIMIC: + case Moves.MIRROR_MOVE: + case Moves.TRANSFORM: + case Moves.STRUGGLE: + case Moves.SKETCH: + case Moves.SLEEP_TALK: + case Moves.ENCORE: + return false; } if (allMoves[repeatableMove.move].hasAttr(ChargeAttr) && repeatableMove.result === MoveResult.OTHER) { @@ -1641,12 +1641,12 @@ export class HighestStatBoostTag extends AbilityBattlerTag { this.stat = highestStat; switch (this.stat) { - case Stat.SPD: - this.multiplier = 1.5; - break; - default: - this.multiplier = 1.3; - break; + case Stat.SPD: + this.multiplier = 1.5; + break; + default: + this.multiplier = 1.3; + break; } pokemon.scene.queueMessage(i18next.t("battlerTags:highestStatBoostOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), statName: i18next.t(getStatKey(highestStat)) }), null, false, null, true); @@ -2436,15 +2436,15 @@ export class SubstituteTag extends BattlerTag { lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { switch (lapseType) { - case BattlerTagLapseType.PRE_MOVE: - this.onPreMove(pokemon); - break; - case BattlerTagLapseType.AFTER_MOVE: - this.onAfterMove(pokemon); - break; - case BattlerTagLapseType.HIT: - this.onHit(pokemon); - break; + case BattlerTagLapseType.PRE_MOVE: + this.onPreMove(pokemon); + break; + case BattlerTagLapseType.AFTER_MOVE: + this.onAfterMove(pokemon); + break; + case BattlerTagLapseType.HIT: + this.onHit(pokemon); + break; } return lapseType !== BattlerTagLapseType.CUSTOM; // only remove this tag on custom lapse } @@ -2769,179 +2769,179 @@ export class PowerTrickTag extends BattlerTag { */ export function getBattlerTag(tagType: BattlerTagType, turnCount: number, sourceMove: Moves, sourceId: number): BattlerTag { switch (tagType) { - case BattlerTagType.RECHARGING: - return new RechargingTag(sourceMove); - case BattlerTagType.BEAK_BLAST_CHARGING: - return new BeakBlastChargingTag(); - case BattlerTagType.SHELL_TRAP: - return new ShellTrapTag(); - case BattlerTagType.FLINCHED: - return new FlinchedTag(sourceMove); - case BattlerTagType.INTERRUPTED: - return new InterruptedTag(sourceMove); - case BattlerTagType.CONFUSED: - return new ConfusedTag(turnCount, sourceMove); - case BattlerTagType.INFATUATED: - return new InfatuatedTag(sourceMove, sourceId); - case BattlerTagType.SEEDED: - return new SeedTag(sourceId); - case BattlerTagType.NIGHTMARE: - return new NightmareTag(); - case BattlerTagType.FRENZY: - return new FrenzyTag(turnCount, sourceMove, sourceId); - case BattlerTagType.CHARGING: - return new BattlerTag(tagType, BattlerTagLapseType.CUSTOM, 1, sourceMove, sourceId); - case BattlerTagType.ENCORE: - return new EncoreTag(sourceId); - case BattlerTagType.HELPING_HAND: - return new HelpingHandTag(sourceId); - case BattlerTagType.INGRAIN: - return new IngrainTag(sourceId); - case BattlerTagType.AQUA_RING: - return new AquaRingTag(); - case BattlerTagType.DROWSY: - return new DrowsyTag(); - case BattlerTagType.TRAPPED: - return new TrappedTag(tagType, BattlerTagLapseType.CUSTOM, turnCount, sourceMove, sourceId); - case BattlerTagType.NO_RETREAT: - return new NoRetreatTag(sourceId); - case BattlerTagType.BIND: - return new BindTag(turnCount, sourceId); - case BattlerTagType.WRAP: - return new WrapTag(turnCount, sourceId); - case BattlerTagType.FIRE_SPIN: - return new FireSpinTag(turnCount, sourceId); - case BattlerTagType.WHIRLPOOL: - return new WhirlpoolTag(turnCount, sourceId); - case BattlerTagType.CLAMP: - return new ClampTag(turnCount, sourceId); - case BattlerTagType.SAND_TOMB: - return new SandTombTag(turnCount, sourceId); - case BattlerTagType.MAGMA_STORM: - return new MagmaStormTag(turnCount, sourceId); - case BattlerTagType.SNAP_TRAP: - return new SnapTrapTag(turnCount, sourceId); - case BattlerTagType.THUNDER_CAGE: - return new ThunderCageTag(turnCount, sourceId); - case BattlerTagType.INFESTATION: - return new InfestationTag(turnCount, sourceId); - case BattlerTagType.PROTECTED: - return new ProtectedTag(sourceMove); - case BattlerTagType.SPIKY_SHIELD: - return new ContactDamageProtectedTag(sourceMove, 8); - case BattlerTagType.KINGS_SHIELD: - return new ContactStatStageChangeProtectedTag(sourceMove, tagType, Stat.ATK, -1); - case BattlerTagType.OBSTRUCT: - return new ContactStatStageChangeProtectedTag(sourceMove, tagType, Stat.DEF, -2); - case BattlerTagType.SILK_TRAP: - return new ContactStatStageChangeProtectedTag(sourceMove, tagType, Stat.SPD, -1); - case BattlerTagType.BANEFUL_BUNKER: - return new ContactPoisonProtectedTag(sourceMove); - case BattlerTagType.BURNING_BULWARK: - return new ContactBurnProtectedTag(sourceMove); - case BattlerTagType.ENDURING: - return new EnduringTag(sourceMove); - case BattlerTagType.STURDY: - return new SturdyTag(sourceMove); - case BattlerTagType.PERISH_SONG: - return new PerishSongTag(turnCount); - case BattlerTagType.CENTER_OF_ATTENTION: - return new CenterOfAttentionTag(sourceMove); - case BattlerTagType.TRUANT: - return new TruantTag(); - case BattlerTagType.SLOW_START: - return new SlowStartTag(); - case BattlerTagType.PROTOSYNTHESIS: - return new WeatherHighestStatBoostTag(tagType, Abilities.PROTOSYNTHESIS, WeatherType.SUNNY, WeatherType.HARSH_SUN); - case BattlerTagType.QUARK_DRIVE: - return new TerrainHighestStatBoostTag(tagType, Abilities.QUARK_DRIVE, TerrainType.ELECTRIC); - case BattlerTagType.FLYING: - case BattlerTagType.UNDERGROUND: - case BattlerTagType.UNDERWATER: - case BattlerTagType.HIDDEN: - return new SemiInvulnerableTag(tagType, turnCount, sourceMove); - case BattlerTagType.FIRE_BOOST: - return new TypeBoostTag(tagType, sourceMove, Type.FIRE, 1.5, false); - case BattlerTagType.CRIT_BOOST: - return new CritBoostTag(tagType, sourceMove); - case BattlerTagType.DRAGON_CHEER: - return new DragonCheerTag(); - case BattlerTagType.ALWAYS_CRIT: - case BattlerTagType.IGNORE_ACCURACY: - return new BattlerTag(tagType, BattlerTagLapseType.TURN_END, 2, sourceMove); - case BattlerTagType.ALWAYS_GET_HIT: - case BattlerTagType.RECEIVE_DOUBLE_DAMAGE: - return new BattlerTag(tagType, BattlerTagLapseType.PRE_MOVE, 1, sourceMove); - case BattlerTagType.BYPASS_SLEEP: - return new BattlerTag(tagType, BattlerTagLapseType.TURN_END, turnCount, sourceMove); - case BattlerTagType.IGNORE_FLYING: - return new GroundedTag(tagType, BattlerTagLapseType.CUSTOM, sourceMove); - case BattlerTagType.ROOSTED: - return new RoostedTag(); - case BattlerTagType.BURNED_UP: - return new RemovedTypeTag(tagType, BattlerTagLapseType.CUSTOM, sourceMove); - case BattlerTagType.DOUBLE_SHOCKED: - return new RemovedTypeTag(tagType, BattlerTagLapseType.CUSTOM, sourceMove); - case BattlerTagType.SALT_CURED: - return new SaltCuredTag(sourceId); - case BattlerTagType.CURSED: - return new CursedTag(sourceId); - case BattlerTagType.CHARGED: - return new TypeBoostTag(tagType, sourceMove, Type.ELECTRIC, 2, true); - case BattlerTagType.FLOATING: - return new FloatingTag(tagType, sourceMove); - case BattlerTagType.MINIMIZED: - return new MinimizeTag(); - case BattlerTagType.DESTINY_BOND: - return new DestinyBondTag(sourceMove, sourceId); - case BattlerTagType.ICE_FACE: - return new IceFaceBlockDamageTag(tagType); - case BattlerTagType.DISGUISE: - return new FormBlockDamageTag(tagType); - case BattlerTagType.STOCKPILING: - return new StockpilingTag(sourceMove); - case BattlerTagType.OCTOLOCK: - return new OctolockTag(sourceId); - case BattlerTagType.DISABLED: - return new DisabledTag(sourceId); - case BattlerTagType.IGNORE_GHOST: - return new ExposedTag(tagType, sourceMove, Type.GHOST, [ Type.NORMAL, Type.FIGHTING ]); - case BattlerTagType.IGNORE_DARK: - return new ExposedTag(tagType, sourceMove, Type.DARK, [ Type.PSYCHIC ]); - case BattlerTagType.GULP_MISSILE_ARROKUDA: - case BattlerTagType.GULP_MISSILE_PIKACHU: - return new GulpMissileTag(tagType, sourceMove); - case BattlerTagType.TAR_SHOT: - return new TarShotTag(); - case BattlerTagType.ELECTRIFIED: - return new ElectrifiedTag(); - case BattlerTagType.THROAT_CHOPPED: - return new ThroatChoppedTag(); - case BattlerTagType.GORILLA_TACTICS: - return new GorillaTacticsTag(); - case BattlerTagType.SUBSTITUTE: - return new SubstituteTag(sourceMove, sourceId); - case BattlerTagType.AUTOTOMIZED: - return new AutotomizedTag(); - case BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON: - return new MysteryEncounterPostSummonTag(); - case BattlerTagType.HEAL_BLOCK: - return new HealBlockTag(turnCount, sourceMove); - case BattlerTagType.TORMENT: - return new TormentTag(sourceId); - case BattlerTagType.TAUNT: - return new TauntTag(); - case BattlerTagType.IMPRISON: - return new ImprisonTag(sourceId); - case BattlerTagType.SYRUP_BOMB: - return new SyrupBombTag(sourceId); - case BattlerTagType.TELEKINESIS: - return new TelekinesisTag(sourceMove); - case BattlerTagType.POWER_TRICK: - return new PowerTrickTag(sourceMove, sourceId); - case BattlerTagType.NONE: - default: - return new BattlerTag(tagType, BattlerTagLapseType.CUSTOM, turnCount, sourceMove, sourceId); + case BattlerTagType.RECHARGING: + return new RechargingTag(sourceMove); + case BattlerTagType.BEAK_BLAST_CHARGING: + return new BeakBlastChargingTag(); + case BattlerTagType.SHELL_TRAP: + return new ShellTrapTag(); + case BattlerTagType.FLINCHED: + return new FlinchedTag(sourceMove); + case BattlerTagType.INTERRUPTED: + return new InterruptedTag(sourceMove); + case BattlerTagType.CONFUSED: + return new ConfusedTag(turnCount, sourceMove); + case BattlerTagType.INFATUATED: + return new InfatuatedTag(sourceMove, sourceId); + case BattlerTagType.SEEDED: + return new SeedTag(sourceId); + case BattlerTagType.NIGHTMARE: + return new NightmareTag(); + case BattlerTagType.FRENZY: + return new FrenzyTag(turnCount, sourceMove, sourceId); + case BattlerTagType.CHARGING: + return new BattlerTag(tagType, BattlerTagLapseType.CUSTOM, 1, sourceMove, sourceId); + case BattlerTagType.ENCORE: + return new EncoreTag(sourceId); + case BattlerTagType.HELPING_HAND: + return new HelpingHandTag(sourceId); + case BattlerTagType.INGRAIN: + return new IngrainTag(sourceId); + case BattlerTagType.AQUA_RING: + return new AquaRingTag(); + case BattlerTagType.DROWSY: + return new DrowsyTag(); + case BattlerTagType.TRAPPED: + return new TrappedTag(tagType, BattlerTagLapseType.CUSTOM, turnCount, sourceMove, sourceId); + case BattlerTagType.NO_RETREAT: + return new NoRetreatTag(sourceId); + case BattlerTagType.BIND: + return new BindTag(turnCount, sourceId); + case BattlerTagType.WRAP: + return new WrapTag(turnCount, sourceId); + case BattlerTagType.FIRE_SPIN: + return new FireSpinTag(turnCount, sourceId); + case BattlerTagType.WHIRLPOOL: + return new WhirlpoolTag(turnCount, sourceId); + case BattlerTagType.CLAMP: + return new ClampTag(turnCount, sourceId); + case BattlerTagType.SAND_TOMB: + return new SandTombTag(turnCount, sourceId); + case BattlerTagType.MAGMA_STORM: + return new MagmaStormTag(turnCount, sourceId); + case BattlerTagType.SNAP_TRAP: + return new SnapTrapTag(turnCount, sourceId); + case BattlerTagType.THUNDER_CAGE: + return new ThunderCageTag(turnCount, sourceId); + case BattlerTagType.INFESTATION: + return new InfestationTag(turnCount, sourceId); + case BattlerTagType.PROTECTED: + return new ProtectedTag(sourceMove); + case BattlerTagType.SPIKY_SHIELD: + return new ContactDamageProtectedTag(sourceMove, 8); + case BattlerTagType.KINGS_SHIELD: + return new ContactStatStageChangeProtectedTag(sourceMove, tagType, Stat.ATK, -1); + case BattlerTagType.OBSTRUCT: + return new ContactStatStageChangeProtectedTag(sourceMove, tagType, Stat.DEF, -2); + case BattlerTagType.SILK_TRAP: + return new ContactStatStageChangeProtectedTag(sourceMove, tagType, Stat.SPD, -1); + case BattlerTagType.BANEFUL_BUNKER: + return new ContactPoisonProtectedTag(sourceMove); + case BattlerTagType.BURNING_BULWARK: + return new ContactBurnProtectedTag(sourceMove); + case BattlerTagType.ENDURING: + return new EnduringTag(sourceMove); + case BattlerTagType.STURDY: + return new SturdyTag(sourceMove); + case BattlerTagType.PERISH_SONG: + return new PerishSongTag(turnCount); + case BattlerTagType.CENTER_OF_ATTENTION: + return new CenterOfAttentionTag(sourceMove); + case BattlerTagType.TRUANT: + return new TruantTag(); + case BattlerTagType.SLOW_START: + return new SlowStartTag(); + case BattlerTagType.PROTOSYNTHESIS: + return new WeatherHighestStatBoostTag(tagType, Abilities.PROTOSYNTHESIS, WeatherType.SUNNY, WeatherType.HARSH_SUN); + case BattlerTagType.QUARK_DRIVE: + return new TerrainHighestStatBoostTag(tagType, Abilities.QUARK_DRIVE, TerrainType.ELECTRIC); + case BattlerTagType.FLYING: + case BattlerTagType.UNDERGROUND: + case BattlerTagType.UNDERWATER: + case BattlerTagType.HIDDEN: + return new SemiInvulnerableTag(tagType, turnCount, sourceMove); + case BattlerTagType.FIRE_BOOST: + return new TypeBoostTag(tagType, sourceMove, Type.FIRE, 1.5, false); + case BattlerTagType.CRIT_BOOST: + return new CritBoostTag(tagType, sourceMove); + case BattlerTagType.DRAGON_CHEER: + return new DragonCheerTag(); + case BattlerTagType.ALWAYS_CRIT: + case BattlerTagType.IGNORE_ACCURACY: + return new BattlerTag(tagType, BattlerTagLapseType.TURN_END, 2, sourceMove); + case BattlerTagType.ALWAYS_GET_HIT: + case BattlerTagType.RECEIVE_DOUBLE_DAMAGE: + return new BattlerTag(tagType, BattlerTagLapseType.PRE_MOVE, 1, sourceMove); + case BattlerTagType.BYPASS_SLEEP: + return new BattlerTag(tagType, BattlerTagLapseType.TURN_END, turnCount, sourceMove); + case BattlerTagType.IGNORE_FLYING: + return new GroundedTag(tagType, BattlerTagLapseType.CUSTOM, sourceMove); + case BattlerTagType.ROOSTED: + return new RoostedTag(); + case BattlerTagType.BURNED_UP: + return new RemovedTypeTag(tagType, BattlerTagLapseType.CUSTOM, sourceMove); + case BattlerTagType.DOUBLE_SHOCKED: + return new RemovedTypeTag(tagType, BattlerTagLapseType.CUSTOM, sourceMove); + case BattlerTagType.SALT_CURED: + return new SaltCuredTag(sourceId); + case BattlerTagType.CURSED: + return new CursedTag(sourceId); + case BattlerTagType.CHARGED: + return new TypeBoostTag(tagType, sourceMove, Type.ELECTRIC, 2, true); + case BattlerTagType.FLOATING: + return new FloatingTag(tagType, sourceMove); + case BattlerTagType.MINIMIZED: + return new MinimizeTag(); + case BattlerTagType.DESTINY_BOND: + return new DestinyBondTag(sourceMove, sourceId); + case BattlerTagType.ICE_FACE: + return new IceFaceBlockDamageTag(tagType); + case BattlerTagType.DISGUISE: + return new FormBlockDamageTag(tagType); + case BattlerTagType.STOCKPILING: + return new StockpilingTag(sourceMove); + case BattlerTagType.OCTOLOCK: + return new OctolockTag(sourceId); + case BattlerTagType.DISABLED: + return new DisabledTag(sourceId); + case BattlerTagType.IGNORE_GHOST: + return new ExposedTag(tagType, sourceMove, Type.GHOST, [ Type.NORMAL, Type.FIGHTING ]); + case BattlerTagType.IGNORE_DARK: + return new ExposedTag(tagType, sourceMove, Type.DARK, [ Type.PSYCHIC ]); + case BattlerTagType.GULP_MISSILE_ARROKUDA: + case BattlerTagType.GULP_MISSILE_PIKACHU: + return new GulpMissileTag(tagType, sourceMove); + case BattlerTagType.TAR_SHOT: + return new TarShotTag(); + case BattlerTagType.ELECTRIFIED: + return new ElectrifiedTag(); + case BattlerTagType.THROAT_CHOPPED: + return new ThroatChoppedTag(); + case BattlerTagType.GORILLA_TACTICS: + return new GorillaTacticsTag(); + case BattlerTagType.SUBSTITUTE: + return new SubstituteTag(sourceMove, sourceId); + case BattlerTagType.AUTOTOMIZED: + return new AutotomizedTag(); + case BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON: + return new MysteryEncounterPostSummonTag(); + case BattlerTagType.HEAL_BLOCK: + return new HealBlockTag(turnCount, sourceMove); + case BattlerTagType.TORMENT: + return new TormentTag(sourceId); + case BattlerTagType.TAUNT: + return new TauntTag(); + case BattlerTagType.IMPRISON: + return new ImprisonTag(sourceId); + case BattlerTagType.SYRUP_BOMB: + return new SyrupBombTag(sourceId); + case BattlerTagType.TELEKINESIS: + return new TelekinesisTag(sourceMove); + case BattlerTagType.POWER_TRICK: + return new PowerTrickTag(sourceMove, sourceId); + case BattlerTagType.NONE: + default: + return new BattlerTag(tagType, BattlerTagLapseType.CUSTOM, turnCount, sourceMove, sourceId); } } diff --git a/src/data/berry.ts b/src/data/berry.ts index 01325ee39dd..7243c4c1b2e 100644 --- a/src/data/berry.ts +++ b/src/data/berry.ts @@ -22,42 +22,42 @@ export type BerryPredicate = (pokemon: Pokemon) => boolean; export function getBerryPredicate(berryType: BerryType): BerryPredicate { switch (berryType) { - case BerryType.SITRUS: - return (pokemon: Pokemon) => pokemon.getHpRatio() < 0.5; - case BerryType.LUM: - return (pokemon: Pokemon) => !!pokemon.status || !!pokemon.getTag(BattlerTagType.CONFUSED); - case BerryType.ENIGMA: - return (pokemon: Pokemon) => !!pokemon.turnData.attacksReceived.filter(a => a.result === HitResult.SUPER_EFFECTIVE).length; - case BerryType.LIECHI: - case BerryType.GANLON: - case BerryType.PETAYA: - case BerryType.APICOT: - case BerryType.SALAC: - return (pokemon: Pokemon) => { - const threshold = new Utils.NumberHolder(0.25); - // Offset BerryType such that LIECHI -> Stat.ATK = 1, GANLON -> Stat.DEF = 2, so on and so forth - const stat: BattleStat = berryType - BerryType.ENIGMA; - applyAbAttrs(ReduceBerryUseThresholdAbAttr, pokemon, null, false, threshold); - return pokemon.getHpRatio() < threshold.value && pokemon.getStatStage(stat) < 6; - }; - case BerryType.LANSAT: - return (pokemon: Pokemon) => { - const threshold = new Utils.NumberHolder(0.25); - applyAbAttrs(ReduceBerryUseThresholdAbAttr, pokemon, null, false, threshold); - return pokemon.getHpRatio() < 0.25 && !pokemon.getTag(BattlerTagType.CRIT_BOOST); - }; - case BerryType.STARF: - return (pokemon: Pokemon) => { - const threshold = new Utils.NumberHolder(0.25); - applyAbAttrs(ReduceBerryUseThresholdAbAttr, pokemon, null, false, threshold); - return pokemon.getHpRatio() < 0.25; - }; - case BerryType.LEPPA: - return (pokemon: Pokemon) => { - const threshold = new Utils.NumberHolder(0.25); - applyAbAttrs(ReduceBerryUseThresholdAbAttr, pokemon, null, false, threshold); - return !!pokemon.getMoveset().find(m => !m?.getPpRatio()); - }; + case BerryType.SITRUS: + return (pokemon: Pokemon) => pokemon.getHpRatio() < 0.5; + case BerryType.LUM: + return (pokemon: Pokemon) => !!pokemon.status || !!pokemon.getTag(BattlerTagType.CONFUSED); + case BerryType.ENIGMA: + return (pokemon: Pokemon) => !!pokemon.turnData.attacksReceived.filter(a => a.result === HitResult.SUPER_EFFECTIVE).length; + case BerryType.LIECHI: + case BerryType.GANLON: + case BerryType.PETAYA: + case BerryType.APICOT: + case BerryType.SALAC: + return (pokemon: Pokemon) => { + const threshold = new Utils.NumberHolder(0.25); + // Offset BerryType such that LIECHI -> Stat.ATK = 1, GANLON -> Stat.DEF = 2, so on and so forth + const stat: BattleStat = berryType - BerryType.ENIGMA; + applyAbAttrs(ReduceBerryUseThresholdAbAttr, pokemon, null, false, threshold); + return pokemon.getHpRatio() < threshold.value && pokemon.getStatStage(stat) < 6; + }; + case BerryType.LANSAT: + return (pokemon: Pokemon) => { + const threshold = new Utils.NumberHolder(0.25); + applyAbAttrs(ReduceBerryUseThresholdAbAttr, pokemon, null, false, threshold); + return pokemon.getHpRatio() < 0.25 && !pokemon.getTag(BattlerTagType.CRIT_BOOST); + }; + case BerryType.STARF: + return (pokemon: Pokemon) => { + const threshold = new Utils.NumberHolder(0.25); + applyAbAttrs(ReduceBerryUseThresholdAbAttr, pokemon, null, false, threshold); + return pokemon.getHpRatio() < 0.25; + }; + case BerryType.LEPPA: + return (pokemon: Pokemon) => { + const threshold = new Utils.NumberHolder(0.25); + applyAbAttrs(ReduceBerryUseThresholdAbAttr, pokemon, null, false, threshold); + return !!pokemon.getMoveset().find(m => !m?.getPpRatio()); + }; } } @@ -65,70 +65,70 @@ export type BerryEffectFunc = (pokemon: Pokemon) => void; export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { switch (berryType) { - case BerryType.SITRUS: - case BerryType.ENIGMA: - return (pokemon: Pokemon) => { - if (pokemon.battleData) { - pokemon.battleData.berriesEaten.push(berryType); - } - const hpHealed = new Utils.NumberHolder(Utils.toDmgValue(pokemon.getMaxHp() / 4)); - applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, false, hpHealed); - pokemon.scene.unshiftPhase(new PokemonHealPhase(pokemon.scene, pokemon.getBattlerIndex(), - hpHealed.value, i18next.t("battle:hpHealBerry", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), berryName: getBerryName(berryType) }), true)); - }; - case BerryType.LUM: - return (pokemon: Pokemon) => { - if (pokemon.battleData) { - pokemon.battleData.berriesEaten.push(berryType); - } - if (pokemon.status) { - pokemon.scene.queueMessage(getStatusEffectHealText(pokemon.status.effect, getPokemonNameWithAffix(pokemon))); - } - pokemon.resetStatus(true, true); - pokemon.updateInfo(); - }; - case BerryType.LIECHI: - case BerryType.GANLON: - case BerryType.PETAYA: - case BerryType.APICOT: - case BerryType.SALAC: - return (pokemon: Pokemon) => { - if (pokemon.battleData) { - pokemon.battleData.berriesEaten.push(berryType); - } - // Offset BerryType such that LIECHI -> Stat.ATK = 1, GANLON -> Stat.DEF = 2, so on and so forth - const stat: BattleStat = berryType - BerryType.ENIGMA; - const statStages = new Utils.NumberHolder(1); - applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, false, statStages); - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ stat ], statStages.value)); - }; - case BerryType.LANSAT: - return (pokemon: Pokemon) => { - if (pokemon.battleData) { - pokemon.battleData.berriesEaten.push(berryType); - } - pokemon.addTag(BattlerTagType.CRIT_BOOST); - }; - case BerryType.STARF: - return (pokemon: Pokemon) => { - if (pokemon.battleData) { - pokemon.battleData.berriesEaten.push(berryType); - } - const randStat = Utils.randSeedInt(Stat.SPD, Stat.ATK); - const stages = new Utils.NumberHolder(2); - applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, false, stages); - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ randStat ], stages.value)); - }; - case BerryType.LEPPA: - return (pokemon: Pokemon) => { - if (pokemon.battleData) { - pokemon.battleData.berriesEaten.push(berryType); - } - const ppRestoreMove = pokemon.getMoveset().find(m => !m?.getPpRatio()) ? pokemon.getMoveset().find(m => !m?.getPpRatio()) : pokemon.getMoveset().find(m => m!.getPpRatio() < 1); // TODO: is this bang correct? - if (ppRestoreMove !== undefined) { + case BerryType.SITRUS: + case BerryType.ENIGMA: + return (pokemon: Pokemon) => { + if (pokemon.battleData) { + pokemon.battleData.berriesEaten.push(berryType); + } + const hpHealed = new Utils.NumberHolder(Utils.toDmgValue(pokemon.getMaxHp() / 4)); + applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, false, hpHealed); + pokemon.scene.unshiftPhase(new PokemonHealPhase(pokemon.scene, pokemon.getBattlerIndex(), + hpHealed.value, i18next.t("battle:hpHealBerry", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), berryName: getBerryName(berryType) }), true)); + }; + case BerryType.LUM: + return (pokemon: Pokemon) => { + if (pokemon.battleData) { + pokemon.battleData.berriesEaten.push(berryType); + } + if (pokemon.status) { + pokemon.scene.queueMessage(getStatusEffectHealText(pokemon.status.effect, getPokemonNameWithAffix(pokemon))); + } + pokemon.resetStatus(true, true); + pokemon.updateInfo(); + }; + case BerryType.LIECHI: + case BerryType.GANLON: + case BerryType.PETAYA: + case BerryType.APICOT: + case BerryType.SALAC: + return (pokemon: Pokemon) => { + if (pokemon.battleData) { + pokemon.battleData.berriesEaten.push(berryType); + } + // Offset BerryType such that LIECHI -> Stat.ATK = 1, GANLON -> Stat.DEF = 2, so on and so forth + const stat: BattleStat = berryType - BerryType.ENIGMA; + const statStages = new Utils.NumberHolder(1); + applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, false, statStages); + pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ stat ], statStages.value)); + }; + case BerryType.LANSAT: + return (pokemon: Pokemon) => { + if (pokemon.battleData) { + pokemon.battleData.berriesEaten.push(berryType); + } + pokemon.addTag(BattlerTagType.CRIT_BOOST); + }; + case BerryType.STARF: + return (pokemon: Pokemon) => { + if (pokemon.battleData) { + pokemon.battleData.berriesEaten.push(berryType); + } + const randStat = Utils.randSeedInt(Stat.SPD, Stat.ATK); + const stages = new Utils.NumberHolder(2); + applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, false, stages); + pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ randStat ], stages.value)); + }; + case BerryType.LEPPA: + return (pokemon: Pokemon) => { + if (pokemon.battleData) { + pokemon.battleData.berriesEaten.push(berryType); + } + const ppRestoreMove = pokemon.getMoveset().find(m => !m?.getPpRatio()) ? pokemon.getMoveset().find(m => !m?.getPpRatio()) : pokemon.getMoveset().find(m => m!.getPpRatio() < 1); // TODO: is this bang correct? + if (ppRestoreMove !== undefined) { ppRestoreMove!.ppUsed = Math.max(ppRestoreMove!.ppUsed - 10, 0); pokemon.scene.queueMessage(i18next.t("battle:ppHealBerry", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: ppRestoreMove!.getName(), berryName: getBerryName(berryType) })); - } - }; + } + }; } } diff --git a/src/data/challenge.ts b/src/data/challenge.ts index 7ecdfbf36e1..a64a90e5d14 100644 --- a/src/data/challenge.ts +++ b/src/data/challenge.ts @@ -448,21 +448,21 @@ export class SingleGenerationChallenge extends Challenge { applyFixedBattle(waveIndex: Number, battleConfig: FixedBattleConfig): boolean { let trainerTypes: TrainerType[] = []; switch (waveIndex) { - case 182: - trainerTypes = [ TrainerType.LORELEI, TrainerType.WILL, TrainerType.SIDNEY, TrainerType.AARON, TrainerType.SHAUNTAL, TrainerType.MALVA, Utils.randSeedItem([ TrainerType.HALA, TrainerType.MOLAYNE ]), TrainerType.MARNIE_ELITE, TrainerType.RIKA ]; - break; - case 184: - trainerTypes = [ TrainerType.BRUNO, TrainerType.KOGA, TrainerType.PHOEBE, TrainerType.BERTHA, TrainerType.MARSHAL, TrainerType.SIEBOLD, TrainerType.OLIVIA, TrainerType.NESSA_ELITE, TrainerType.POPPY ]; - break; - case 186: - trainerTypes = [ TrainerType.AGATHA, TrainerType.BRUNO, TrainerType.GLACIA, TrainerType.FLINT, TrainerType.GRIMSLEY, TrainerType.WIKSTROM, TrainerType.ACEROLA, Utils.randSeedItem([ TrainerType.BEA_ELITE, TrainerType.ALLISTER_ELITE ]), TrainerType.LARRY_ELITE ]; - break; - case 188: - trainerTypes = [ TrainerType.LANCE, TrainerType.KAREN, TrainerType.DRAKE, TrainerType.LUCIAN, TrainerType.CAITLIN, TrainerType.DRASNA, TrainerType.KAHILI, TrainerType.RAIHAN_ELITE, TrainerType.HASSEL ]; - break; - case 190: - trainerTypes = [ TrainerType.BLUE, Utils.randSeedItem([ TrainerType.RED, TrainerType.LANCE_CHAMPION ]), Utils.randSeedItem([ TrainerType.STEVEN, TrainerType.WALLACE ]), TrainerType.CYNTHIA, Utils.randSeedItem([ TrainerType.ALDER, TrainerType.IRIS ]), TrainerType.DIANTHA, TrainerType.HAU, TrainerType.LEON, Utils.randSeedItem([ TrainerType.GEETA, TrainerType.NEMONA ]) ]; - break; + case 182: + trainerTypes = [ TrainerType.LORELEI, TrainerType.WILL, TrainerType.SIDNEY, TrainerType.AARON, TrainerType.SHAUNTAL, TrainerType.MALVA, Utils.randSeedItem([ TrainerType.HALA, TrainerType.MOLAYNE ]), TrainerType.MARNIE_ELITE, TrainerType.RIKA ]; + break; + case 184: + trainerTypes = [ TrainerType.BRUNO, TrainerType.KOGA, TrainerType.PHOEBE, TrainerType.BERTHA, TrainerType.MARSHAL, TrainerType.SIEBOLD, TrainerType.OLIVIA, TrainerType.NESSA_ELITE, TrainerType.POPPY ]; + break; + case 186: + trainerTypes = [ TrainerType.AGATHA, TrainerType.BRUNO, TrainerType.GLACIA, TrainerType.FLINT, TrainerType.GRIMSLEY, TrainerType.WIKSTROM, TrainerType.ACEROLA, Utils.randSeedItem([ TrainerType.BEA_ELITE, TrainerType.ALLISTER_ELITE ]), TrainerType.LARRY_ELITE ]; + break; + case 188: + trainerTypes = [ TrainerType.LANCE, TrainerType.KAREN, TrainerType.DRAKE, TrainerType.LUCIAN, TrainerType.CAITLIN, TrainerType.DRASNA, TrainerType.KAHILI, TrainerType.RAIHAN_ELITE, TrainerType.HASSEL ]; + break; + case 190: + trainerTypes = [ TrainerType.BLUE, Utils.randSeedItem([ TrainerType.RED, TrainerType.LANCE_CHAMPION ]), Utils.randSeedItem([ TrainerType.STEVEN, TrainerType.WALLACE ]), TrainerType.CYNTHIA, Utils.randSeedItem([ TrainerType.ALDER, TrainerType.IRIS ]), TrainerType.DIANTHA, TrainerType.HAU, TrainerType.LEON, Utils.randSeedItem([ TrainerType.GEETA, TrainerType.NEMONA ]) ]; + break; } if (trainerTypes.length === 0) { return false; @@ -891,45 +891,45 @@ export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType gameMode.challenges.forEach(c => { if (c.value !== 0) { switch (challengeType) { - case ChallengeType.STARTER_CHOICE: - ret ||= c.applyStarterChoice(args[0], args[1], args[2], args[3]); - break; - case ChallengeType.STARTER_POINTS: - ret ||= c.applyStarterPoints(args[0]); - break; - case ChallengeType.STARTER_COST: - ret ||= c.applyStarterCost(args[0], args[1]); - break; - case ChallengeType.STARTER_MODIFY: - ret ||= c.applyStarterModify(args[0]); - break; - case ChallengeType.POKEMON_IN_BATTLE: - ret ||= c.applyPokemonInBattle(args[0], args[1]); - break; - case ChallengeType.FIXED_BATTLES: - ret ||= c.applyFixedBattle(args[0], args[1]); - break; - case ChallengeType.TYPE_EFFECTIVENESS: - ret ||= c.applyTypeEffectiveness(args[0]); - break; - case ChallengeType.AI_LEVEL: - ret ||= c.applyLevelChange(args[0], args[1], args[2], args[3]); - break; - case ChallengeType.AI_MOVE_SLOTS: - ret ||= c.applyMoveSlot(args[0], args[1]); - break; - case ChallengeType.PASSIVE_ACCESS: - ret ||= c.applyPassiveAccess(args[0], args[1]); - break; - case ChallengeType.GAME_MODE_MODIFY: - ret ||= c.applyGameModeModify(gameMode); - break; - case ChallengeType.MOVE_ACCESS: - ret ||= c.applyMoveAccessLevel(args[0], args[1], args[2], args[3]); - break; - case ChallengeType.MOVE_WEIGHT: - ret ||= c.applyMoveWeight(args[0], args[1], args[2], args[3]); - break; + case ChallengeType.STARTER_CHOICE: + ret ||= c.applyStarterChoice(args[0], args[1], args[2], args[3]); + break; + case ChallengeType.STARTER_POINTS: + ret ||= c.applyStarterPoints(args[0]); + break; + case ChallengeType.STARTER_COST: + ret ||= c.applyStarterCost(args[0], args[1]); + break; + case ChallengeType.STARTER_MODIFY: + ret ||= c.applyStarterModify(args[0]); + break; + case ChallengeType.POKEMON_IN_BATTLE: + ret ||= c.applyPokemonInBattle(args[0], args[1]); + break; + case ChallengeType.FIXED_BATTLES: + ret ||= c.applyFixedBattle(args[0], args[1]); + break; + case ChallengeType.TYPE_EFFECTIVENESS: + ret ||= c.applyTypeEffectiveness(args[0]); + break; + case ChallengeType.AI_LEVEL: + ret ||= c.applyLevelChange(args[0], args[1], args[2], args[3]); + break; + case ChallengeType.AI_MOVE_SLOTS: + ret ||= c.applyMoveSlot(args[0], args[1]); + break; + case ChallengeType.PASSIVE_ACCESS: + ret ||= c.applyPassiveAccess(args[0], args[1]); + break; + case ChallengeType.GAME_MODE_MODIFY: + ret ||= c.applyGameModeModify(gameMode); + break; + case ChallengeType.MOVE_ACCESS: + ret ||= c.applyMoveAccessLevel(args[0], args[1], args[2], args[3]); + break; + case ChallengeType.MOVE_WEIGHT: + ret ||= c.applyMoveWeight(args[0], args[1], args[2], args[3]); + break; } } }); @@ -943,18 +943,18 @@ export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType */ export function copyChallenge(source: Challenge | any): Challenge { switch (source.id) { - case Challenges.SINGLE_GENERATION: - return SingleGenerationChallenge.loadChallenge(source); - case Challenges.SINGLE_TYPE: - return SingleTypeChallenge.loadChallenge(source); - case Challenges.LOWER_MAX_STARTER_COST: - return LowerStarterMaxCostChallenge.loadChallenge(source); - case Challenges.LOWER_STARTER_POINTS: - return LowerStarterPointsChallenge.loadChallenge(source); - case Challenges.FRESH_START: - return FreshStartChallenge.loadChallenge(source); - case Challenges.INVERSE_BATTLE: - return InverseBattleChallenge.loadChallenge(source); + case Challenges.SINGLE_GENERATION: + return SingleGenerationChallenge.loadChallenge(source); + case Challenges.SINGLE_TYPE: + return SingleTypeChallenge.loadChallenge(source); + case Challenges.LOWER_MAX_STARTER_COST: + return LowerStarterMaxCostChallenge.loadChallenge(source); + case Challenges.LOWER_STARTER_POINTS: + return LowerStarterPointsChallenge.loadChallenge(source); + case Challenges.FRESH_START: + return FreshStartChallenge.loadChallenge(source); + case Challenges.INVERSE_BATTLE: + return InverseBattleChallenge.loadChallenge(source); } throw new Error("Unknown challenge copied"); } diff --git a/src/data/egg.ts b/src/data/egg.ts index c475fc729e6..0f88c53b748 100644 --- a/src/data/egg.ts +++ b/src/data/egg.ts @@ -262,14 +262,14 @@ export class Egg { return "Manaphy"; } switch (this.tier) { - case EggTier.RARE: - return i18next.t("egg:greatTier"); - case EggTier.EPIC: - return i18next.t("egg:ultraTier"); - case EggTier.LEGENDARY: - return i18next.t("egg:masterTier"); - default: - return i18next.t("egg:defaultTier"); + case EggTier.RARE: + return i18next.t("egg:greatTier"); + case EggTier.EPIC: + return i18next.t("egg:ultraTier"); + case EggTier.LEGENDARY: + return i18next.t("egg:masterTier"); + default: + return i18next.t("egg:defaultTier"); } } @@ -288,19 +288,19 @@ export class Egg { public getEggTypeDescriptor(scene: BattleScene): string { switch (this.sourceType) { - case EggSourceType.SAME_SPECIES_EGG: - return this._eggDescriptor ?? i18next.t("egg:sameSpeciesEgg", { species: getPokemonSpecies(this._species).getName() }); - case EggSourceType.GACHA_LEGENDARY: - return this._eggDescriptor ?? `${i18next.t("egg:gachaTypeLegendary")} (${getPokemonSpecies(getLegendaryGachaSpeciesForTimestamp(scene, this.timestamp)).getName()})`; - case EggSourceType.GACHA_SHINY: - return this._eggDescriptor ?? i18next.t("egg:gachaTypeShiny"); - case EggSourceType.GACHA_MOVE: - return this._eggDescriptor ?? i18next.t("egg:gachaTypeMove"); - case EggSourceType.EVENT: - return this._eggDescriptor ?? i18next.t("egg:eventType"); - default: - console.warn("getEggTypeDescriptor case not defined. Returning default empty string"); - return ""; + case EggSourceType.SAME_SPECIES_EGG: + return this._eggDescriptor ?? i18next.t("egg:sameSpeciesEgg", { species: getPokemonSpecies(this._species).getName() }); + case EggSourceType.GACHA_LEGENDARY: + return this._eggDescriptor ?? `${i18next.t("egg:gachaTypeLegendary")} (${getPokemonSpecies(getLegendaryGachaSpeciesForTimestamp(scene, this.timestamp)).getName()})`; + case EggSourceType.GACHA_SHINY: + return this._eggDescriptor ?? i18next.t("egg:gachaTypeShiny"); + case EggSourceType.GACHA_MOVE: + return this._eggDescriptor ?? i18next.t("egg:gachaTypeMove"); + case EggSourceType.EVENT: + return this._eggDescriptor ?? i18next.t("egg:eventType"); + default: + console.warn("getEggTypeDescriptor case not defined. Returning default empty string"); + return ""; } } @@ -315,14 +315,14 @@ export class Egg { private rollEggMoveIndex() { let baseChance = GACHA_DEFAULT_RARE_EGGMOVE_RATE; switch (this._sourceType) { - case EggSourceType.SAME_SPECIES_EGG: - baseChance = SAME_SPECIES_EGG_RARE_EGGMOVE_RATE; - break; - case EggSourceType.GACHA_MOVE: - baseChance = GACHA_MOVE_UP_RARE_EGGMOVE_RATE; - break; - default: - break; + case EggSourceType.SAME_SPECIES_EGG: + baseChance = SAME_SPECIES_EGG_RARE_EGGMOVE_RATE; + break; + case EggSourceType.GACHA_MOVE: + baseChance = GACHA_MOVE_UP_RARE_EGGMOVE_RATE; + break; + default: + break; } const tierMultiplier = this.isManaphyEgg() ? 2 : Math.pow(2, 3 - this.tier); @@ -335,12 +335,12 @@ export class Egg { } switch (eggTier ?? this._tier) { - case EggTier.COMMON: - return HATCH_WAVES_COMMON_EGG; - case EggTier.RARE: - return HATCH_WAVES_RARE_EGG; - case EggTier.EPIC: - return HATCH_WAVES_EPIC_EGG; + case EggTier.COMMON: + return HATCH_WAVES_COMMON_EGG; + case EggTier.RARE: + return HATCH_WAVES_RARE_EGG; + case EggTier.EPIC: + return HATCH_WAVES_EPIC_EGG; } return HATCH_WAVES_LEGENDARY_EGG; } @@ -379,22 +379,22 @@ export class Egg { let maxStarterValue: integer; switch (this.tier) { - case EggTier.RARE: - minStarterValue = 4; - maxStarterValue = 5; - break; - case EggTier.EPIC: - minStarterValue = 6; - maxStarterValue = 7; - break; - case EggTier.LEGENDARY: - minStarterValue = 8; - maxStarterValue = 9; - break; - default: - minStarterValue = 1; - maxStarterValue = 3; - break; + case EggTier.RARE: + minStarterValue = 4; + maxStarterValue = 5; + break; + case EggTier.EPIC: + minStarterValue = 6; + maxStarterValue = 7; + break; + case EggTier.LEGENDARY: + minStarterValue = 8; + maxStarterValue = 9; + break; + default: + minStarterValue = 1; + maxStarterValue = 3; + break; } const ignoredSpecies = [ Species.PHIONE, Species.MANAPHY, Species.ETERNATUS ]; @@ -469,14 +469,14 @@ export class Egg { private rollShiny(): boolean { let shinyChance = GACHA_DEFAULT_SHINY_RATE; switch (this._sourceType) { - case EggSourceType.GACHA_SHINY: - shinyChance = GACHA_SHINY_UP_SHINY_RATE; - break; - case EggSourceType.SAME_SPECIES_EGG: - shinyChance = SAME_SPECIES_EGG_SHINY_RATE; - break; - default: - break; + case EggSourceType.GACHA_SHINY: + shinyChance = GACHA_SHINY_UP_SHINY_RATE; + break; + case EggSourceType.SAME_SPECIES_EGG: + shinyChance = SAME_SPECIES_EGG_SHINY_RATE; + break; + default: + break; } return !Utils.randSeedInt(shinyChance); @@ -523,15 +523,15 @@ export class Egg { return; } switch (this.tier) { - case EggTier.RARE: - scene.gameData.gameStats.rareEggsPulled++; - break; - case EggTier.EPIC: - scene.gameData.gameStats.epicEggsPulled++; - break; - case EggTier.LEGENDARY: - scene.gameData.gameStats.legendaryEggsPulled++; - break; + case EggTier.RARE: + scene.gameData.gameStats.rareEggsPulled++; + break; + case EggTier.EPIC: + scene.gameData.gameStats.epicEggsPulled++; + break; + case EggTier.LEGENDARY: + scene.gameData.gameStats.legendaryEggsPulled++; + break; } } diff --git a/src/data/exp.ts b/src/data/exp.ts index 3b332eb7cf2..c03abddadfc 100644 --- a/src/data/exp.ts +++ b/src/data/exp.ts @@ -28,24 +28,24 @@ export function getLevelTotalExp(level: integer, growthRate: GrowthRate): intege let ret: integer; switch (growthRate) { - case GrowthRate.ERRATIC: - ret = (Math.pow(level, 4) + (Math.pow(level, 3) * 2000)) / 3500; - break; - case GrowthRate.FAST: - ret = Math.pow(level, 3) * 4 / 5; - break; - case GrowthRate.MEDIUM_FAST: - ret = Math.pow(level, 3); - break; - case GrowthRate.MEDIUM_SLOW: - ret = (Math.pow(level, 3) * 6 / 5) - (15 * Math.pow(level, 2)) + (100 * level) - 140; - break; - case GrowthRate.SLOW: - ret = Math.pow(level, 3) * 5 / 4; - break; - case GrowthRate.FLUCTUATING: - ret = (Math.pow(level, 3) * ((level / 2) + 8)) * 4 / (100 + level); - break; + case GrowthRate.ERRATIC: + ret = (Math.pow(level, 4) + (Math.pow(level, 3) * 2000)) / 3500; + break; + case GrowthRate.FAST: + ret = Math.pow(level, 3) * 4 / 5; + break; + case GrowthRate.MEDIUM_FAST: + ret = Math.pow(level, 3); + break; + case GrowthRate.MEDIUM_SLOW: + ret = (Math.pow(level, 3) * 6 / 5) - (15 * Math.pow(level, 2)) + (100 * level) - 140; + break; + case GrowthRate.SLOW: + ret = Math.pow(level, 3) * 5 / 4; + break; + case GrowthRate.FLUCTUATING: + ret = (Math.pow(level, 3) * ((level / 2) + 8)) * 4 / (100 + level); + break; } if (growthRate !== GrowthRate.MEDIUM_FAST) { @@ -61,17 +61,17 @@ export function getLevelRelExp(level: integer, growthRate: GrowthRate): number { export function getGrowthRateColor(growthRate: GrowthRate, shadow?: boolean) { switch (growthRate) { - case GrowthRate.ERRATIC: - return !shadow ? "#f85888" : "#906060"; - case GrowthRate.FAST: - return !shadow ? "#f8d030" : "#b8a038"; - case GrowthRate.MEDIUM_FAST: - return !shadow ? "#78c850" : "#588040"; - case GrowthRate.MEDIUM_SLOW: - return !shadow ? "#6890f0" : "#807870"; - case GrowthRate.SLOW: - return !shadow ? "#f08030" : "#c03028"; - case GrowthRate.FLUCTUATING: - return !shadow ? "#a040a0" : "#483850"; + case GrowthRate.ERRATIC: + return !shadow ? "#f85888" : "#906060"; + case GrowthRate.FAST: + return !shadow ? "#f8d030" : "#b8a038"; + case GrowthRate.MEDIUM_FAST: + return !shadow ? "#78c850" : "#588040"; + case GrowthRate.MEDIUM_SLOW: + return !shadow ? "#6890f0" : "#807870"; + case GrowthRate.SLOW: + return !shadow ? "#f08030" : "#c03028"; + case GrowthRate.FLUCTUATING: + return !shadow ? "#a040a0" : "#483850"; } } diff --git a/src/data/gender.ts b/src/data/gender.ts index 0d4b76d8bd1..dae7723dd85 100644 --- a/src/data/gender.ts +++ b/src/data/gender.ts @@ -6,20 +6,20 @@ export enum Gender { export function getGenderSymbol(gender: Gender) { switch (gender) { - case Gender.MALE: - return "♂"; - case Gender.FEMALE: - return "♀"; + case Gender.MALE: + return "♂"; + case Gender.FEMALE: + return "♀"; } return ""; } export function getGenderColor(gender: Gender, shadow?: boolean) { switch (gender) { - case Gender.MALE: - return shadow ? "#006090" : "#40c8f8"; - case Gender.FEMALE: - return shadow ? "#984038" : "#f89890"; + case Gender.MALE: + return shadow ? "#006090" : "#40c8f8"; + case Gender.FEMALE: + return shadow ? "#984038" : "#f89890"; } return "#ffffff"; } diff --git a/src/data/move.ts b/src/data/move.ts index 57307b49061..309a2d3a7eb 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -274,16 +274,16 @@ export default class Move implements Localizable { */ isMultiTarget(): boolean { switch (this.moveTarget) { - case MoveTarget.ALL_OTHERS: - case MoveTarget.ALL_NEAR_OTHERS: - case MoveTarget.ALL_NEAR_ENEMIES: - case MoveTarget.ALL_ENEMIES: - case MoveTarget.USER_AND_ALLIES: - case MoveTarget.ALL: - case MoveTarget.USER_SIDE: - case MoveTarget.ENEMY_SIDE: - case MoveTarget.BOTH_SIDES: - return true; + case MoveTarget.ALL_OTHERS: + case MoveTarget.ALL_NEAR_OTHERS: + case MoveTarget.ALL_NEAR_ENEMIES: + case MoveTarget.ALL_ENEMIES: + case MoveTarget.USER_AND_ALLIES: + case MoveTarget.ALL: + case MoveTarget.USER_SIDE: + case MoveTarget.ENEMY_SIDE: + case MoveTarget.BOTH_SIDES: + return true; } return false; } @@ -295,13 +295,13 @@ export default class Move implements Localizable { isAllyTarget(): boolean { switch (this.moveTarget) { - case MoveTarget.USER: - case MoveTarget.NEAR_ALLY: - case MoveTarget.ALLY: - case MoveTarget.USER_OR_NEAR_ALLY: - case MoveTarget.USER_AND_ALLIES: - case MoveTarget.USER_SIDE: - return true; + case MoveTarget.USER: + case MoveTarget.NEAR_ALLY: + case MoveTarget.ALLY: + case MoveTarget.USER_OR_NEAR_ALLY: + case MoveTarget.USER_AND_ALLIES: + case MoveTarget.USER_SIDE: + return true; } return false; } @@ -320,16 +320,16 @@ export default class Move implements Localizable { } switch (type) { - case Type.GRASS: - if (this.hasFlag(MoveFlags.POWDER_MOVE)) { - return true; - } - break; - case Type.DARK: - if (user.hasAbility(Abilities.PRANKSTER) && this.category === MoveCategory.STATUS && (user.isPlayer() !== target.isPlayer())) { - return true; - } - break; + case Type.GRASS: + if (this.hasFlag(MoveFlags.POWDER_MOVE)) { + return true; + } + break; + case Type.DARK: + if (user.hasAbility(Abilities.PRANKSTER) && this.category === MoveCategory.STATUS && (user.isPlayer() !== target.isPlayer())) { + return true; + } + break; } return false; } @@ -616,26 +616,26 @@ export default class Move implements Localizable { checkFlag(flag: MoveFlags, user: Pokemon, target: Pokemon | null): boolean { // special cases below, eg: if the move flag is MAKES_CONTACT, and the user pokemon has an ability that ignores contact (like "Long Reach"), then overrides and move does not make contact switch (flag) { - case MoveFlags.MAKES_CONTACT: - if (user.hasAbilityWithAttr(IgnoreContactAbAttr) || this.hitsSubstitute(user, target)) { - return false; - } - break; - case MoveFlags.IGNORE_ABILITIES: - if (user.hasAbilityWithAttr(MoveAbilityBypassAbAttr)) { - const abilityEffectsIgnored = new Utils.BooleanHolder(false); - applyAbAttrs(MoveAbilityBypassAbAttr, user, abilityEffectsIgnored, false, this); - if (abilityEffectsIgnored.value) { + case MoveFlags.MAKES_CONTACT: + if (user.hasAbilityWithAttr(IgnoreContactAbAttr) || this.hitsSubstitute(user, target)) { + return false; + } + break; + case MoveFlags.IGNORE_ABILITIES: + if (user.hasAbilityWithAttr(MoveAbilityBypassAbAttr)) { + const abilityEffectsIgnored = new Utils.BooleanHolder(false); + applyAbAttrs(MoveAbilityBypassAbAttr, user, abilityEffectsIgnored, false, this); + if (abilityEffectsIgnored.value) { + return true; + } + } + break; + case MoveFlags.IGNORE_PROTECT: + if (user.hasAbilityWithAttr(IgnoreProtectOnContactAbAttr) + && this.checkFlag(MoveFlags.MAKES_CONTACT, user, null)) { return true; } - } - break; - case MoveFlags.IGNORE_PROTECT: - if (user.hasAbilityWithAttr(IgnoreProtectOnContactAbAttr) - && this.checkFlag(MoveFlags.MAKES_CONTACT, user, null)) { - return true; - } - break; + break; } return !!(this.flags & flag); @@ -1745,17 +1745,17 @@ export abstract class WeatherHealAttr extends HealAttr { export class PlantHealAttr extends WeatherHealAttr { getWeatherHealRatio(weatherType: WeatherType): number { switch (weatherType) { - case WeatherType.SUNNY: - case WeatherType.HARSH_SUN: - return 2 / 3; - case WeatherType.RAIN: - case WeatherType.SANDSTORM: - case WeatherType.HAIL: - case WeatherType.SNOW: - case WeatherType.HEAVY_RAIN: - return 0.25; - default: - return 0.5; + case WeatherType.SUNNY: + case WeatherType.HARSH_SUN: + return 2 / 3; + case WeatherType.RAIN: + case WeatherType.SANDSTORM: + case WeatherType.HAIL: + case WeatherType.SNOW: + case WeatherType.HEAVY_RAIN: + return 0.25; + default: + return 0.5; } } } @@ -1763,10 +1763,10 @@ export class PlantHealAttr extends WeatherHealAttr { export class SandHealAttr extends WeatherHealAttr { getWeatherHealRatio(weatherType: WeatherType): number { switch (weatherType) { - case WeatherType.SANDSTORM: - return 2 / 3; - default: - return 0.5; + case WeatherType.SANDSTORM: + return 2 / 3; + default: + return 0.5; } } } @@ -1996,33 +1996,33 @@ export class MultiHitAttr extends MoveAttr { */ getHitCount(user: Pokemon, target: Pokemon): integer { switch (this.multiHitType) { - case MultiHitType._2_TO_5: - { - const rand = user.randSeedInt(16); - const hitValue = new Utils.IntegerHolder(rand); - applyAbAttrs(MaxMultiHitAbAttr, user, null, false, hitValue); - if (hitValue.value >= 10) { - return 2; - } else if (hitValue.value >= 4) { - return 3; - } else if (hitValue.value >= 2) { - return 4; - } else { - return 5; + case MultiHitType._2_TO_5: + { + const rand = user.randSeedInt(16); + const hitValue = new Utils.IntegerHolder(rand); + applyAbAttrs(MaxMultiHitAbAttr, user, null, false, hitValue); + if (hitValue.value >= 10) { + return 2; + } else if (hitValue.value >= 4) { + return 3; + } else if (hitValue.value >= 2) { + return 4; + } else { + return 5; + } } - } - case MultiHitType._2: - return 2; - case MultiHitType._3: - return 3; - case MultiHitType._10: - return 10; - case MultiHitType.BEAT_UP: - const party = user.isPlayer() ? user.scene.getParty() : user.scene.getEnemyParty(); - // No status means the ally pokemon can contribute to Beat Up - return party.reduce((total, pokemon) => { - return total + (pokemon.id === user.id ? 1 : pokemon?.status && pokemon.status.effect !== StatusEffect.NONE ? 0 : 1); - }, 0); + case MultiHitType._2: + return 2; + case MultiHitType._3: + return 3; + case MultiHitType._10: + return 10; + case MultiHitType.BEAT_UP: + const party = user.isPlayer() ? user.scene.getParty() : user.scene.getEnemyParty(); + // No status means the ally pokemon can contribute to Beat Up + return party.reduce((total, pokemon) => { + return total + (pokemon.id === user.id ? 1 : pokemon?.status && pokemon.status.effect !== StatusEffect.NONE ? 0 : 1); + }, 0); } } } @@ -2845,26 +2845,26 @@ export class StatStageChangeAttr extends MoveEffectAttr { } let noEffect = false; switch (stat) { - case Stat.ATK: - if (this.selfTarget) { - noEffect = !user.getMoveset().find(m => m instanceof AttackMove && m.category === MoveCategory.PHYSICAL); - } - break; - case Stat.DEF: - if (!this.selfTarget) { - noEffect = !user.getMoveset().find(m => m instanceof AttackMove && m.category === MoveCategory.PHYSICAL); - } - break; - case Stat.SPATK: - if (this.selfTarget) { - noEffect = !user.getMoveset().find(m => m instanceof AttackMove && m.category === MoveCategory.SPECIAL); - } - break; - case Stat.SPDEF: - if (!this.selfTarget) { - noEffect = !user.getMoveset().find(m => m instanceof AttackMove && m.category === MoveCategory.SPECIAL); - } - break; + case Stat.ATK: + if (this.selfTarget) { + noEffect = !user.getMoveset().find(m => m instanceof AttackMove && m.category === MoveCategory.PHYSICAL); + } + break; + case Stat.DEF: + if (!this.selfTarget) { + noEffect = !user.getMoveset().find(m => m instanceof AttackMove && m.category === MoveCategory.PHYSICAL); + } + break; + case Stat.SPATK: + if (this.selfTarget) { + noEffect = !user.getMoveset().find(m => m instanceof AttackMove && m.category === MoveCategory.SPECIAL); + } + break; + case Stat.SPDEF: + if (!this.selfTarget) { + noEffect = !user.getMoveset().find(m => m instanceof AttackMove && m.category === MoveCategory.SPECIAL); + } + break; } if (noEffect) { continue; @@ -2933,19 +2933,19 @@ export class SecretPowerAttr extends MoveEffectAttr { private determineTerrainEffect(terrain: TerrainType): MoveEffectAttr { let secondaryEffect: MoveEffectAttr; switch (terrain) { - case TerrainType.ELECTRIC: - default: - secondaryEffect = new StatusEffectAttr(StatusEffect.PARALYSIS, false); - break; - case TerrainType.MISTY: - secondaryEffect = new StatStageChangeAttr([ Stat.SPATK ], -1, false); - break; - case TerrainType.GRASSY: - secondaryEffect = new StatusEffectAttr(StatusEffect.SLEEP, false); - break; - case TerrainType.PSYCHIC: - secondaryEffect = new StatStageChangeAttr([ Stat.SPD ], -1, false); - break; + case TerrainType.ELECTRIC: + default: + secondaryEffect = new StatusEffectAttr(StatusEffect.PARALYSIS, false); + break; + case TerrainType.MISTY: + secondaryEffect = new StatStageChangeAttr([ Stat.SPATK ], -1, false); + break; + case TerrainType.GRASSY: + secondaryEffect = new StatusEffectAttr(StatusEffect.SLEEP, false); + break; + case TerrainType.PSYCHIC: + secondaryEffect = new StatStageChangeAttr([ Stat.SPD ], -1, false); + break; } return secondaryEffect; } @@ -2970,62 +2970,62 @@ export class SecretPowerAttr extends MoveEffectAttr { private determineBiomeEffect(biome: Biome): MoveEffectAttr { let secondaryEffect: MoveEffectAttr; switch (biome) { - case Biome.PLAINS: - case Biome.GRASS: - case Biome.TALL_GRASS: - case Biome.FOREST: - case Biome.JUNGLE: - case Biome.MEADOW: - secondaryEffect = new StatusEffectAttr(StatusEffect.SLEEP, false); - break; - case Biome.SWAMP: - case Biome.MOUNTAIN: - case Biome.TEMPLE: - case Biome.RUINS: - secondaryEffect = new StatStageChangeAttr([ Stat.SPD ], -1, false); - break; - case Biome.ICE_CAVE: - case Biome.SNOWY_FOREST: - secondaryEffect = new StatusEffectAttr(StatusEffect.FREEZE, false); - break; - case Biome.VOLCANO: - secondaryEffect = new StatusEffectAttr(StatusEffect.BURN, false); - break; - case Biome.FAIRY_CAVE: - secondaryEffect = new StatStageChangeAttr([ Stat.SPATK ], -1, false); - break; - case Biome.DESERT: - case Biome.CONSTRUCTION_SITE: - case Biome.BEACH: - case Biome.ISLAND: - case Biome.BADLANDS: - secondaryEffect = new StatStageChangeAttr([ Stat.ACC ], -1, false); - break; - case Biome.SEA: - case Biome.LAKE: - case Biome.SEABED: - secondaryEffect = new StatStageChangeAttr([ Stat.ATK ], -1, false); - break; - case Biome.CAVE: - case Biome.WASTELAND: - case Biome.GRAVEYARD: - case Biome.ABYSS: - case Biome.SPACE: - secondaryEffect = new AddBattlerTagAttr(BattlerTagType.FLINCHED, false, true); - break; - case Biome.END: - secondaryEffect = new StatStageChangeAttr([ Stat.DEF ], -1, false); - break; - case Biome.TOWN: - case Biome.METROPOLIS: - case Biome.SLUM: - case Biome.DOJO: - case Biome.FACTORY: - case Biome.LABORATORY: - case Biome.POWER_PLANT: - default: - secondaryEffect = new StatusEffectAttr(StatusEffect.PARALYSIS, false); - break; + case Biome.PLAINS: + case Biome.GRASS: + case Biome.TALL_GRASS: + case Biome.FOREST: + case Biome.JUNGLE: + case Biome.MEADOW: + secondaryEffect = new StatusEffectAttr(StatusEffect.SLEEP, false); + break; + case Biome.SWAMP: + case Biome.MOUNTAIN: + case Biome.TEMPLE: + case Biome.RUINS: + secondaryEffect = new StatStageChangeAttr([ Stat.SPD ], -1, false); + break; + case Biome.ICE_CAVE: + case Biome.SNOWY_FOREST: + secondaryEffect = new StatusEffectAttr(StatusEffect.FREEZE, false); + break; + case Biome.VOLCANO: + secondaryEffect = new StatusEffectAttr(StatusEffect.BURN, false); + break; + case Biome.FAIRY_CAVE: + secondaryEffect = new StatStageChangeAttr([ Stat.SPATK ], -1, false); + break; + case Biome.DESERT: + case Biome.CONSTRUCTION_SITE: + case Biome.BEACH: + case Biome.ISLAND: + case Biome.BADLANDS: + secondaryEffect = new StatStageChangeAttr([ Stat.ACC ], -1, false); + break; + case Biome.SEA: + case Biome.LAKE: + case Biome.SEABED: + secondaryEffect = new StatStageChangeAttr([ Stat.ATK ], -1, false); + break; + case Biome.CAVE: + case Biome.WASTELAND: + case Biome.GRAVEYARD: + case Biome.ABYSS: + case Biome.SPACE: + secondaryEffect = new AddBattlerTagAttr(BattlerTagType.FLINCHED, false, true); + break; + case Biome.END: + secondaryEffect = new StatStageChangeAttr([ Stat.DEF ], -1, false); + break; + case Biome.TOWN: + case Biome.METROPOLIS: + case Biome.SLUM: + case Biome.DOJO: + case Biome.FACTORY: + case Biome.LABORATORY: + case Biome.POWER_PLANT: + default: + secondaryEffect = new StatusEffectAttr(StatusEffect.PARALYSIS, false); + break; } return secondaryEffect; } @@ -3309,21 +3309,21 @@ export class LessPPMorePowerAttr extends VariablePowerAttr { const power = args[0] as Utils.NumberHolder; switch (ppRemains) { - case 0: - power.value = 200; - break; - case 1: - power.value = 80; - break; - case 2: - power.value = 60; - break; - case 3: - power.value = 50; - break; - default: - power.value = 40; - break; + case 0: + power.value = 200; + break; + case 1: + power.value = 80; + break; + case 2: + power.value = 60; + break; + case 3: + power.value = 50; + break; + default: + power.value = 40; + break; } return true; } @@ -3543,24 +3543,24 @@ export class LowHpPowerAttr extends VariablePowerAttr { const hpRatio = user.getHpRatio(); switch (true) { - case (hpRatio < 0.0417): - power.value = 200; - break; - case (hpRatio < 0.1042): - power.value = 150; - break; - case (hpRatio < 0.2083): - power.value = 100; - break; - case (hpRatio < 0.3542): - power.value = 80; - break; - case (hpRatio < 0.6875): - power.value = 40; - break; - default: - power.value = 20; - break; + case (hpRatio < 0.0417): + power.value = 200; + break; + case (hpRatio < 0.1042): + power.value = 150; + break; + case (hpRatio < 0.2083): + power.value = 100; + break; + case (hpRatio < 0.3542): + power.value = 80; + break; + case (hpRatio < 0.6875): + power.value = 40; + break; + default: + power.value = 20; + break; } return true; @@ -3580,21 +3580,21 @@ export class CompareWeightPowerAttr extends VariablePowerAttr { const relativeWeight = (targetWeight / userWeight) * 100; switch (true) { - case (relativeWeight < 20.01): - power.value = 120; - break; - case (relativeWeight < 25.01): - power.value = 100; - break; - case (relativeWeight < 33.35): - power.value = 80; - break; - case (relativeWeight < 50.01): - power.value = 60; - break; - default: - power.value = 40; - break; + case (relativeWeight < 20.01): + power.value = 120; + break; + case (relativeWeight < 25.01): + power.value = 100; + break; + case (relativeWeight < 33.35): + power.value = 80; + break; + case (relativeWeight < 50.01): + power.value = 60; + break; + default: + power.value = 40; + break; } return true; @@ -3710,13 +3710,13 @@ export class AntiSunlightPowerDecreaseAttr extends VariablePowerAttr { const power = args[0] as Utils.NumberHolder; const weatherType = user.scene.arena.weather?.weatherType || WeatherType.NONE; switch (weatherType) { - case WeatherType.RAIN: - case WeatherType.SANDSTORM: - case WeatherType.HAIL: - case WeatherType.SNOW: - case WeatherType.HEAVY_RAIN: - power.value *= 0.5; - return true; + case WeatherType.RAIN: + case WeatherType.SANDSTORM: + case WeatherType.HAIL: + case WeatherType.SNOW: + case WeatherType.HEAVY_RAIN: + power.value *= 0.5; + return true; } } @@ -4113,14 +4113,14 @@ export class ThunderAccuracyAttr extends VariableAccuracyAttr { const accuracy = args[0] as Utils.NumberHolder; const weatherType = user.scene.arena.weather?.weatherType || WeatherType.NONE; switch (weatherType) { - case WeatherType.SUNNY: - case WeatherType.HARSH_SUN: - accuracy.value = 50; - return true; - case WeatherType.RAIN: - case WeatherType.HEAVY_RAIN: - accuracy.value = -1; - return true; + case WeatherType.SUNNY: + case WeatherType.HARSH_SUN: + accuracy.value = 50; + return true; + case WeatherType.RAIN: + case WeatherType.HEAVY_RAIN: + accuracy.value = -1; + return true; } } @@ -4139,10 +4139,10 @@ export class StormAccuracyAttr extends VariableAccuracyAttr { const accuracy = args[0] as Utils.NumberHolder; const weatherType = user.scene.arena.weather?.weatherType || WeatherType.NONE; switch (weatherType) { - case WeatherType.RAIN: - case WeatherType.HEAVY_RAIN: - accuracy.value = -1; - return true; + case WeatherType.RAIN: + case WeatherType.HEAVY_RAIN: + accuracy.value = -1; + return true; } } @@ -4372,21 +4372,21 @@ export class TechnoBlastTypeAttr extends VariableMoveTypeAttr { const form = user.species.speciesId === Species.GENESECT ? user.formIndex : user.fusionSpecies?.formIndex; switch (form) { - case 1: // Shock Drive - moveType.value = Type.ELECTRIC; - break; - case 2: // Burn Drive - moveType.value = Type.FIRE; - break; - case 3: // Chill Drive - moveType.value = Type.ICE; - break; - case 4: // Douse Drive - moveType.value = Type.WATER; - break; - default: - moveType.value = Type.NORMAL; - break; + case 1: // Shock Drive + moveType.value = Type.ELECTRIC; + break; + case 2: // Burn Drive + moveType.value = Type.FIRE; + break; + case 3: // Chill Drive + moveType.value = Type.ICE; + break; + case 4: // Douse Drive + moveType.value = Type.WATER; + break; + default: + moveType.value = Type.NORMAL; + break; } return true; } @@ -4406,12 +4406,12 @@ export class AuraWheelTypeAttr extends VariableMoveTypeAttr { const form = user.species.speciesId === Species.MORPEKO ? user.formIndex : user.fusionSpecies?.formIndex; switch (form) { - case 1: // Hangry Mode - moveType.value = Type.DARK; - break; - default: // Full Belly Mode - moveType.value = Type.ELECTRIC; - break; + case 1: // Hangry Mode + moveType.value = Type.DARK; + break; + default: // Full Belly Mode + moveType.value = Type.ELECTRIC; + break; } return true; } @@ -4431,15 +4431,15 @@ export class RagingBullTypeAttr extends VariableMoveTypeAttr { const form = user.species.speciesId === Species.PALDEA_TAUROS ? user.formIndex : user.fusionSpecies?.formIndex; switch (form) { - case 1: // Blaze breed - moveType.value = Type.FIRE; - break; - case 2: // Aqua breed - moveType.value = Type.WATER; - break; - default: - moveType.value = Type.FIGHTING; - break; + case 1: // Blaze breed + moveType.value = Type.FIRE; + break; + case 2: // Aqua breed + moveType.value = Type.WATER; + break; + default: + moveType.value = Type.FIGHTING; + break; } return true; } @@ -4459,22 +4459,22 @@ export class IvyCudgelTypeAttr extends VariableMoveTypeAttr { const form = user.species.speciesId === Species.OGERPON ? user.formIndex : user.fusionSpecies?.formIndex; switch (form) { - case 1: // Wellspring Mask - case 5: // Wellspring Mask Tera - moveType.value = Type.WATER; - break; - case 2: // Hearthflame Mask - case 6: // Hearthflame Mask Tera - moveType.value = Type.FIRE; - break; - case 3: // Cornerstone Mask - case 7: // Cornerstone Mask Tera - moveType.value = Type.ROCK; - break; - case 4: // Teal Mask Tera - default: - moveType.value = Type.GRASS; - break; + case 1: // Wellspring Mask + case 5: // Wellspring Mask Tera + moveType.value = Type.WATER; + break; + case 2: // Hearthflame Mask + case 6: // Hearthflame Mask Tera + moveType.value = Type.FIRE; + break; + case 3: // Cornerstone Mask + case 7: // Cornerstone Mask Tera + moveType.value = Type.ROCK; + break; + case 4: // Teal Mask Tera + default: + moveType.value = Type.GRASS; + break; } return true; } @@ -4492,23 +4492,23 @@ export class WeatherBallTypeAttr extends VariableMoveTypeAttr { if (!user.scene.arena.weather?.isEffectSuppressed(user.scene)) { switch (user.scene.arena.weather?.weatherType) { - case WeatherType.SUNNY: - case WeatherType.HARSH_SUN: - moveType.value = Type.FIRE; - break; - case WeatherType.RAIN: - case WeatherType.HEAVY_RAIN: - moveType.value = Type.WATER; - break; - case WeatherType.SANDSTORM: - moveType.value = Type.ROCK; - break; - case WeatherType.HAIL: - case WeatherType.SNOW: - moveType.value = Type.ICE; - break; - default: - return false; + case WeatherType.SUNNY: + case WeatherType.HARSH_SUN: + moveType.value = Type.FIRE; + break; + case WeatherType.RAIN: + case WeatherType.HEAVY_RAIN: + moveType.value = Type.WATER; + break; + case WeatherType.SANDSTORM: + moveType.value = Type.ROCK; + break; + case WeatherType.HAIL: + case WeatherType.SNOW: + moveType.value = Type.ICE; + break; + default: + return false; } return true; } @@ -4543,20 +4543,20 @@ export class TerrainPulseTypeAttr extends VariableMoveTypeAttr { const currentTerrain = user.scene.arena.getTerrainType(); switch (currentTerrain) { - case TerrainType.MISTY: - moveType.value = Type.FAIRY; - break; - case TerrainType.ELECTRIC: - moveType.value = Type.ELECTRIC; - break; - case TerrainType.GRASSY: - moveType.value = Type.GRASS; - break; - case TerrainType.PSYCHIC: - moveType.value = Type.PSYCHIC; - break; - default: - return false; + case TerrainType.MISTY: + moveType.value = Type.FAIRY; + break; + case TerrainType.ELECTRIC: + moveType.value = Type.ELECTRIC; + break; + case TerrainType.GRASSY: + moveType.value = Type.GRASS; + break; + case TerrainType.PSYCHIC: + moveType.value = Type.PSYCHIC; + break; + default: + return false; } return true; } @@ -4656,26 +4656,26 @@ export class CombinedPledgeTypeAttr extends VariableMoveTypeAttr { } switch (move.id) { - case Moves.FIRE_PLEDGE: - if (combinedPledgeMove === Moves.WATER_PLEDGE) { - moveType.value = Type.WATER; - return true; - } - return false; - case Moves.WATER_PLEDGE: - if (combinedPledgeMove === Moves.GRASS_PLEDGE) { - moveType.value = Type.GRASS; - return true; - } - return false; - case Moves.GRASS_PLEDGE: - if (combinedPledgeMove === Moves.FIRE_PLEDGE) { - moveType.value = Type.FIRE; - return true; - } - return false; - default: - return false; + case Moves.FIRE_PLEDGE: + if (combinedPledgeMove === Moves.WATER_PLEDGE) { + moveType.value = Type.WATER; + return true; + } + return false; + case Moves.WATER_PLEDGE: + if (combinedPledgeMove === Moves.GRASS_PLEDGE) { + moveType.value = Type.GRASS; + return true; + } + return false; + case Moves.GRASS_PLEDGE: + if (combinedPledgeMove === Moves.FIRE_PLEDGE) { + moveType.value = Type.FIRE; + return true; + } + return false; + default: + return false; } } } @@ -4920,48 +4920,48 @@ export class AddBattlerTagAttr extends MoveEffectAttr { getTagTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer | void { switch (this.tagType) { - case BattlerTagType.RECHARGING: - case BattlerTagType.PERISH_SONG: - return -16; - case BattlerTagType.FLINCHED: - case BattlerTagType.CONFUSED: - case BattlerTagType.INFATUATED: - case BattlerTagType.NIGHTMARE: - case BattlerTagType.DROWSY: - case BattlerTagType.DISABLED: - case BattlerTagType.HEAL_BLOCK: - case BattlerTagType.RECEIVE_DOUBLE_DAMAGE: - return -5; - case BattlerTagType.SEEDED: - case BattlerTagType.SALT_CURED: - case BattlerTagType.CURSED: - case BattlerTagType.FRENZY: - case BattlerTagType.TRAPPED: - case BattlerTagType.BIND: - case BattlerTagType.WRAP: - case BattlerTagType.FIRE_SPIN: - case BattlerTagType.WHIRLPOOL: - case BattlerTagType.CLAMP: - case BattlerTagType.SAND_TOMB: - case BattlerTagType.MAGMA_STORM: - case BattlerTagType.SNAP_TRAP: - case BattlerTagType.THUNDER_CAGE: - case BattlerTagType.INFESTATION: - return -3; - case BattlerTagType.ENCORE: - return -2; - case BattlerTagType.MINIMIZED: - case BattlerTagType.ALWAYS_GET_HIT: - return 0; - case BattlerTagType.INGRAIN: - case BattlerTagType.IGNORE_ACCURACY: - case BattlerTagType.AQUA_RING: - return 3; - case BattlerTagType.PROTECTED: - case BattlerTagType.FLYING: - case BattlerTagType.CRIT_BOOST: - case BattlerTagType.ALWAYS_CRIT: - return 5; + case BattlerTagType.RECHARGING: + case BattlerTagType.PERISH_SONG: + return -16; + case BattlerTagType.FLINCHED: + case BattlerTagType.CONFUSED: + case BattlerTagType.INFATUATED: + case BattlerTagType.NIGHTMARE: + case BattlerTagType.DROWSY: + case BattlerTagType.DISABLED: + case BattlerTagType.HEAL_BLOCK: + case BattlerTagType.RECEIVE_DOUBLE_DAMAGE: + return -5; + case BattlerTagType.SEEDED: + case BattlerTagType.SALT_CURED: + case BattlerTagType.CURSED: + case BattlerTagType.FRENZY: + case BattlerTagType.TRAPPED: + case BattlerTagType.BIND: + case BattlerTagType.WRAP: + case BattlerTagType.FIRE_SPIN: + case BattlerTagType.WHIRLPOOL: + case BattlerTagType.CLAMP: + case BattlerTagType.SAND_TOMB: + case BattlerTagType.MAGMA_STORM: + case BattlerTagType.SNAP_TRAP: + case BattlerTagType.THUNDER_CAGE: + case BattlerTagType.INFESTATION: + return -3; + case BattlerTagType.ENCORE: + return -2; + case BattlerTagType.MINIMIZED: + case BattlerTagType.ALWAYS_GET_HIT: + return 0; + case BattlerTagType.INGRAIN: + case BattlerTagType.IGNORE_ACCURACY: + case BattlerTagType.AQUA_RING: + return 3; + case BattlerTagType.PROTECTED: + case BattlerTagType.FLYING: + case BattlerTagType.CRIT_BOOST: + case BattlerTagType.ALWAYS_CRIT: + return 5; } } @@ -5934,19 +5934,19 @@ export class RandomMovesetMoveAttr extends OverrideMoveEffectAttr { } let selectTargets: BattlerIndex[]; switch (true) { - case (moveTargets.multiple || moveTargets.targets.length === 1): { - selectTargets = moveTargets.targets; - break; - } - case (moveTargets.targets.indexOf(target.getBattlerIndex()) > -1): { - selectTargets = [ target.getBattlerIndex() ]; - break; - } - default: { - moveTargets.targets.splice(moveTargets.targets.indexOf(user.getAlly().getBattlerIndex())); - selectTargets = [ moveTargets.targets[user.randSeedInt(moveTargets.targets.length)] ]; - break; - } + case (moveTargets.multiple || moveTargets.targets.length === 1): { + selectTargets = moveTargets.targets; + break; + } + case (moveTargets.targets.indexOf(target.getBattlerIndex()) > -1): { + selectTargets = [ target.getBattlerIndex() ]; + break; + } + default: { + moveTargets.targets.splice(moveTargets.targets.indexOf(user.getAlly().getBattlerIndex())); + selectTargets = [ moveTargets.targets[user.randSeedInt(moveTargets.targets.length)] ]; + break; + } } const targets = selectTargets; user.getMoveQueue().push({ move: move?.moveId!, targets: targets, ignorePP: true }); // TODO: is this bang correct? @@ -5990,131 +5990,131 @@ export class NaturePowerAttr extends OverrideMoveEffectAttr { let moveId; switch (user.scene.arena.getTerrainType()) { // this allows terrains to 'override' the biome move - case TerrainType.NONE: - switch (user.scene.arena.biomeType) { - case Biome.TOWN: - moveId = Moves.ROUND; + case TerrainType.NONE: + switch (user.scene.arena.biomeType) { + case Biome.TOWN: + moveId = Moves.ROUND; + break; + case Biome.METROPOLIS: + moveId = Moves.TRI_ATTACK; + break; + case Biome.SLUM: + moveId = Moves.SLUDGE_BOMB; + break; + case Biome.PLAINS: + moveId = Moves.SILVER_WIND; + break; + case Biome.GRASS: + moveId = Moves.GRASS_KNOT; + break; + case Biome.TALL_GRASS: + moveId = Moves.POLLEN_PUFF; + break; + case Biome.MEADOW: + moveId = Moves.GIGA_DRAIN; + break; + case Biome.FOREST: + moveId = Moves.BUG_BUZZ; + break; + case Biome.JUNGLE: + moveId = Moves.LEAF_STORM; + break; + case Biome.SEA: + moveId = Moves.HYDRO_PUMP; + break; + case Biome.SWAMP: + moveId = Moves.MUD_BOMB; + break; + case Biome.BEACH: + moveId = Moves.SCALD; + break; + case Biome.LAKE: + moveId = Moves.BUBBLE_BEAM; + break; + case Biome.SEABED: + moveId = Moves.BRINE; + break; + case Biome.ISLAND: + moveId = Moves.LEAF_TORNADO; + break; + case Biome.MOUNTAIN: + moveId = Moves.AIR_SLASH; + break; + case Biome.BADLANDS: + moveId = Moves.EARTH_POWER; + break; + case Biome.DESERT: + moveId = Moves.SCORCHING_SANDS; + break; + case Biome.WASTELAND: + moveId = Moves.DRAGON_PULSE; + break; + case Biome.CONSTRUCTION_SITE: + moveId = Moves.STEEL_BEAM; + break; + case Biome.CAVE: + moveId = Moves.POWER_GEM; + break; + case Biome.ICE_CAVE: + moveId = Moves.ICE_BEAM; + break; + case Biome.SNOWY_FOREST: + moveId = Moves.FROST_BREATH; + break; + case Biome.VOLCANO: + moveId = Moves.LAVA_PLUME; + break; + case Biome.GRAVEYARD: + moveId = Moves.SHADOW_BALL; + break; + case Biome.RUINS: + moveId = Moves.ANCIENT_POWER; + break; + case Biome.TEMPLE: + moveId = Moves.EXTRASENSORY; + break; + case Biome.DOJO: + moveId = Moves.FOCUS_BLAST; + break; + case Biome.FAIRY_CAVE: + moveId = Moves.ALLURING_VOICE; + break; + case Biome.ABYSS: + moveId = Moves.OMINOUS_WIND; + break; + case Biome.SPACE: + moveId = Moves.DRACO_METEOR; + break; + case Biome.FACTORY: + moveId = Moves.FLASH_CANNON; + break; + case Biome.LABORATORY: + moveId = Moves.ZAP_CANNON; + break; + case Biome.POWER_PLANT: + moveId = Moves.CHARGE_BEAM; + break; + case Biome.END: + moveId = Moves.ETERNABEAM; + break; + } break; - case Biome.METROPOLIS: + case TerrainType.MISTY: + moveId = Moves.MOONBLAST; + break; + case TerrainType.ELECTRIC: + moveId = Moves.THUNDERBOLT; + break; + case TerrainType.GRASSY: + moveId = Moves.ENERGY_BALL; + break; + case TerrainType.PSYCHIC: + moveId = Moves.PSYCHIC; + break; + default: + // Just in case there's no match moveId = Moves.TRI_ATTACK; break; - case Biome.SLUM: - moveId = Moves.SLUDGE_BOMB; - break; - case Biome.PLAINS: - moveId = Moves.SILVER_WIND; - break; - case Biome.GRASS: - moveId = Moves.GRASS_KNOT; - break; - case Biome.TALL_GRASS: - moveId = Moves.POLLEN_PUFF; - break; - case Biome.MEADOW: - moveId = Moves.GIGA_DRAIN; - break; - case Biome.FOREST: - moveId = Moves.BUG_BUZZ; - break; - case Biome.JUNGLE: - moveId = Moves.LEAF_STORM; - break; - case Biome.SEA: - moveId = Moves.HYDRO_PUMP; - break; - case Biome.SWAMP: - moveId = Moves.MUD_BOMB; - break; - case Biome.BEACH: - moveId = Moves.SCALD; - break; - case Biome.LAKE: - moveId = Moves.BUBBLE_BEAM; - break; - case Biome.SEABED: - moveId = Moves.BRINE; - break; - case Biome.ISLAND: - moveId = Moves.LEAF_TORNADO; - break; - case Biome.MOUNTAIN: - moveId = Moves.AIR_SLASH; - break; - case Biome.BADLANDS: - moveId = Moves.EARTH_POWER; - break; - case Biome.DESERT: - moveId = Moves.SCORCHING_SANDS; - break; - case Biome.WASTELAND: - moveId = Moves.DRAGON_PULSE; - break; - case Biome.CONSTRUCTION_SITE: - moveId = Moves.STEEL_BEAM; - break; - case Biome.CAVE: - moveId = Moves.POWER_GEM; - break; - case Biome.ICE_CAVE: - moveId = Moves.ICE_BEAM; - break; - case Biome.SNOWY_FOREST: - moveId = Moves.FROST_BREATH; - break; - case Biome.VOLCANO: - moveId = Moves.LAVA_PLUME; - break; - case Biome.GRAVEYARD: - moveId = Moves.SHADOW_BALL; - break; - case Biome.RUINS: - moveId = Moves.ANCIENT_POWER; - break; - case Biome.TEMPLE: - moveId = Moves.EXTRASENSORY; - break; - case Biome.DOJO: - moveId = Moves.FOCUS_BLAST; - break; - case Biome.FAIRY_CAVE: - moveId = Moves.ALLURING_VOICE; - break; - case Biome.ABYSS: - moveId = Moves.OMINOUS_WIND; - break; - case Biome.SPACE: - moveId = Moves.DRACO_METEOR; - break; - case Biome.FACTORY: - moveId = Moves.FLASH_CANNON; - break; - case Biome.LABORATORY: - moveId = Moves.ZAP_CANNON; - break; - case Biome.POWER_PLANT: - moveId = Moves.CHARGE_BEAM; - break; - case Biome.END: - moveId = Moves.ETERNABEAM; - break; - } - break; - case TerrainType.MISTY: - moveId = Moves.MOONBLAST; - break; - case TerrainType.ELECTRIC: - moveId = Moves.THUNDERBOLT; - break; - case TerrainType.GRASSY: - moveId = Moves.ENERGY_BALL; - break; - case TerrainType.PSYCHIC: - moveId = Moves.PSYCHIC; - break; - default: - // Just in case there's no match - moveId = Moves.TRI_ATTACK; - break; } user.getMoveQueue().push({ move: moveId, targets: [ target.getBattlerIndex() ], ignorePP: true }); @@ -7152,47 +7152,47 @@ export function getMoveTargets(user: Pokemon, move: Moves): MoveTargetSet { let multiple = false; switch (moveTarget) { - case MoveTarget.USER: - case MoveTarget.PARTY: - set = [ user ]; - break; - case MoveTarget.NEAR_OTHER: - case MoveTarget.OTHER: - case MoveTarget.ALL_NEAR_OTHERS: - case MoveTarget.ALL_OTHERS: - set = (opponents.concat([ user.getAlly() ])); - multiple = moveTarget === MoveTarget.ALL_NEAR_OTHERS || moveTarget === MoveTarget.ALL_OTHERS; - break; - case MoveTarget.NEAR_ENEMY: - case MoveTarget.ALL_NEAR_ENEMIES: - case MoveTarget.ALL_ENEMIES: - case MoveTarget.ENEMY_SIDE: - set = opponents; - multiple = moveTarget !== MoveTarget.NEAR_ENEMY; - break; - case MoveTarget.RANDOM_NEAR_ENEMY: - set = [ opponents[user.randSeedInt(opponents.length)] ]; - break; - case MoveTarget.ATTACKER: - return { targets: [ -1 as BattlerIndex ], multiple: false }; - case MoveTarget.NEAR_ALLY: - case MoveTarget.ALLY: - set = [ user.getAlly() ]; - break; - case MoveTarget.USER_OR_NEAR_ALLY: - case MoveTarget.USER_AND_ALLIES: - case MoveTarget.USER_SIDE: - set = [ user, user.getAlly() ]; - multiple = moveTarget !== MoveTarget.USER_OR_NEAR_ALLY; - break; - case MoveTarget.ALL: - case MoveTarget.BOTH_SIDES: - set = [ user, user.getAlly() ].concat(opponents); - multiple = true; - break; - case MoveTarget.CURSE: - set = user.getTypes(true).includes(Type.GHOST) ? (opponents.concat([ user.getAlly() ])) : [ user ]; - break; + case MoveTarget.USER: + case MoveTarget.PARTY: + set = [ user ]; + break; + case MoveTarget.NEAR_OTHER: + case MoveTarget.OTHER: + case MoveTarget.ALL_NEAR_OTHERS: + case MoveTarget.ALL_OTHERS: + set = (opponents.concat([ user.getAlly() ])); + multiple = moveTarget === MoveTarget.ALL_NEAR_OTHERS || moveTarget === MoveTarget.ALL_OTHERS; + break; + case MoveTarget.NEAR_ENEMY: + case MoveTarget.ALL_NEAR_ENEMIES: + case MoveTarget.ALL_ENEMIES: + case MoveTarget.ENEMY_SIDE: + set = opponents; + multiple = moveTarget !== MoveTarget.NEAR_ENEMY; + break; + case MoveTarget.RANDOM_NEAR_ENEMY: + set = [ opponents[user.randSeedInt(opponents.length)] ]; + break; + case MoveTarget.ATTACKER: + return { targets: [ -1 as BattlerIndex ], multiple: false }; + case MoveTarget.NEAR_ALLY: + case MoveTarget.ALLY: + set = [ user.getAlly() ]; + break; + case MoveTarget.USER_OR_NEAR_ALLY: + case MoveTarget.USER_AND_ALLIES: + case MoveTarget.USER_SIDE: + set = [ user, user.getAlly() ]; + multiple = moveTarget !== MoveTarget.USER_OR_NEAR_ALLY; + break; + case MoveTarget.ALL: + case MoveTarget.BOTH_SIDES: + set = [ user, user.getAlly() ].concat(opponents); + multiple = true; + break; + case MoveTarget.CURSE: + set = user.getTypes(true).includes(Type.GHOST) ? (opponents.concat([ user.getAlly() ])) : [ user ]; + break; } return { targets: set.filter(p => p?.isActive(true)).map(p => p.getBattlerIndex()).filter(t => t !== undefined), multiple }; diff --git a/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts b/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts index 56d80c9598c..f0155b4f2a4 100644 --- a/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts +++ b/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts @@ -44,32 +44,32 @@ export const ATrainersTestEncounter: MysteryEncounter = let spriteKeys; let trainerNameKey: string; switch (randSeedInt(5)) { - default: - case 0: - trainerType = TrainerType.BUCK; - spriteKeys = getSpriteKeysFromSpecies(Species.CLAYDOL); - trainerNameKey = "buck"; - break; - case 1: - trainerType = TrainerType.CHERYL; - spriteKeys = getSpriteKeysFromSpecies(Species.BLISSEY); - trainerNameKey = "cheryl"; - break; - case 2: - trainerType = TrainerType.MARLEY; - spriteKeys = getSpriteKeysFromSpecies(Species.ARCANINE); - trainerNameKey = "marley"; - break; - case 3: - trainerType = TrainerType.MIRA; - spriteKeys = getSpriteKeysFromSpecies(Species.ALAKAZAM, false, 1); - trainerNameKey = "mira"; - break; - case 4: - trainerType = TrainerType.RILEY; - spriteKeys = getSpriteKeysFromSpecies(Species.LUCARIO, false, 1); - trainerNameKey = "riley"; - break; + default: + case 0: + trainerType = TrainerType.BUCK; + spriteKeys = getSpriteKeysFromSpecies(Species.CLAYDOL); + trainerNameKey = "buck"; + break; + case 1: + trainerType = TrainerType.CHERYL; + spriteKeys = getSpriteKeysFromSpecies(Species.BLISSEY); + trainerNameKey = "cheryl"; + break; + case 2: + trainerType = TrainerType.MARLEY; + spriteKeys = getSpriteKeysFromSpecies(Species.ARCANINE); + trainerNameKey = "marley"; + break; + case 3: + trainerType = TrainerType.MIRA; + spriteKeys = getSpriteKeysFromSpecies(Species.ALAKAZAM, false, 1); + trainerNameKey = "mira"; + break; + case 4: + trainerType = TrainerType.RILEY; + spriteKeys = getSpriteKeysFromSpecies(Species.LUCARIO, false, 1); + trainerNameKey = "riley"; + break; } // Dialogue and tokens for trainer diff --git a/src/data/mystery-encounters/utils/encounter-phase-utils.ts b/src/data/mystery-encounters/utils/encounter-phase-utils.ts index f76dff1fec7..485b955f998 100644 --- a/src/data/mystery-encounters/utils/encounter-phase-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-phase-utils.ts @@ -1069,19 +1069,19 @@ export function calculateRareSpawnAggregateStats(scene: BattleScene, luckValue: const tier = tierValue >= 20 ? BiomePoolTier.BOSS : tierValue >= 6 ? BiomePoolTier.BOSS_RARE : tierValue >= 1 ? BiomePoolTier.BOSS_SUPER_RARE : BiomePoolTier.BOSS_ULTRA_RARE; switch (tier) { - default: - case BiomePoolTier.BOSS: - ++bossEncountersByRarity[0]; - break; - case BiomePoolTier.BOSS_RARE: - ++bossEncountersByRarity[1]; - break; - case BiomePoolTier.BOSS_SUPER_RARE: - ++bossEncountersByRarity[2]; - break; - case BiomePoolTier.BOSS_ULTRA_RARE: - ++bossEncountersByRarity[3]; - break; + default: + case BiomePoolTier.BOSS: + ++bossEncountersByRarity[0]; + break; + case BiomePoolTier.BOSS_RARE: + ++bossEncountersByRarity[1]; + break; + case BiomePoolTier.BOSS_SUPER_RARE: + ++bossEncountersByRarity[2]; + break; + case BiomePoolTier.BOSS_ULTRA_RARE: + ++bossEncountersByRarity[3]; + break; } } diff --git a/src/data/nature.ts b/src/data/nature.ts index c614be465c3..edac06f1a4f 100644 --- a/src/data/nature.ts +++ b/src/data/nature.ts @@ -37,76 +37,76 @@ export function getNatureName(nature: Nature, includeStatEffects: boolean = fals export function getNatureStatMultiplier(nature: Nature, stat: Stat): number { switch (stat) { - case Stat.ATK: - switch (nature) { - case Nature.LONELY: - case Nature.BRAVE: - case Nature.ADAMANT: - case Nature.NAUGHTY: - return 1.1; - case Nature.BOLD: - case Nature.TIMID: - case Nature.MODEST: - case Nature.CALM: - return 0.9; - } - break; - case Stat.DEF: - switch (nature) { - case Nature.BOLD: - case Nature.RELAXED: - case Nature.IMPISH: - case Nature.LAX: - return 1.1; - case Nature.LONELY: - case Nature.HASTY: - case Nature.MILD: - case Nature.GENTLE: - return 0.9; - } - break; - case Stat.SPATK: - switch (nature) { - case Nature.MODEST: - case Nature.MILD: - case Nature.QUIET: - case Nature.RASH: - return 1.1; - case Nature.ADAMANT: - case Nature.IMPISH: - case Nature.JOLLY: - case Nature.CAREFUL: - return 0.9; - } - break; - case Stat.SPDEF: - switch (nature) { - case Nature.CALM: - case Nature.GENTLE: - case Nature.SASSY: - case Nature.CAREFUL: - return 1.1; - case Nature.NAUGHTY: - case Nature.LAX: - case Nature.NAIVE: - case Nature.RASH: - return 0.9; - } - break; - case Stat.SPD: - switch (nature) { - case Nature.TIMID: - case Nature.HASTY: - case Nature.JOLLY: - case Nature.NAIVE: - return 1.1; - case Nature.BRAVE: - case Nature.RELAXED: - case Nature.QUIET: - case Nature.SASSY: - return 0.9; - } - break; + case Stat.ATK: + switch (nature) { + case Nature.LONELY: + case Nature.BRAVE: + case Nature.ADAMANT: + case Nature.NAUGHTY: + return 1.1; + case Nature.BOLD: + case Nature.TIMID: + case Nature.MODEST: + case Nature.CALM: + return 0.9; + } + break; + case Stat.DEF: + switch (nature) { + case Nature.BOLD: + case Nature.RELAXED: + case Nature.IMPISH: + case Nature.LAX: + return 1.1; + case Nature.LONELY: + case Nature.HASTY: + case Nature.MILD: + case Nature.GENTLE: + return 0.9; + } + break; + case Stat.SPATK: + switch (nature) { + case Nature.MODEST: + case Nature.MILD: + case Nature.QUIET: + case Nature.RASH: + return 1.1; + case Nature.ADAMANT: + case Nature.IMPISH: + case Nature.JOLLY: + case Nature.CAREFUL: + return 0.9; + } + break; + case Stat.SPDEF: + switch (nature) { + case Nature.CALM: + case Nature.GENTLE: + case Nature.SASSY: + case Nature.CAREFUL: + return 1.1; + case Nature.NAUGHTY: + case Nature.LAX: + case Nature.NAIVE: + case Nature.RASH: + return 0.9; + } + break; + case Stat.SPD: + switch (nature) { + case Nature.TIMID: + case Nature.HASTY: + case Nature.JOLLY: + case Nature.NAIVE: + return 1.1; + case Nature.BRAVE: + case Nature.RELAXED: + case Nature.QUIET: + case Nature.SASSY: + return 0.9; + } + break; } return 1; diff --git a/src/data/pokeball.ts b/src/data/pokeball.ts index 59ff4ed86ce..57a78e2cd61 100644 --- a/src/data/pokeball.ts +++ b/src/data/pokeball.ts @@ -8,77 +8,77 @@ export const MAX_PER_TYPE_POKEBALLS: integer = 99; export function getPokeballAtlasKey(type: PokeballType): string { switch (type) { - case PokeballType.POKEBALL: - return "pb"; - case PokeballType.GREAT_BALL: - return "gb"; - case PokeballType.ULTRA_BALL: - return "ub"; - case PokeballType.ROGUE_BALL: - return "rb"; - case PokeballType.MASTER_BALL: - return "mb"; - case PokeballType.LUXURY_BALL: - return "lb"; + case PokeballType.POKEBALL: + return "pb"; + case PokeballType.GREAT_BALL: + return "gb"; + case PokeballType.ULTRA_BALL: + return "ub"; + case PokeballType.ROGUE_BALL: + return "rb"; + case PokeballType.MASTER_BALL: + return "mb"; + case PokeballType.LUXURY_BALL: + return "lb"; } } export function getPokeballName(type: PokeballType): string { let ret: string; switch (type) { - case PokeballType.POKEBALL: - ret = i18next.t("pokeball:pokeBall"); - break; - case PokeballType.GREAT_BALL: - ret = i18next.t("pokeball:greatBall"); - break; - case PokeballType.ULTRA_BALL: - ret = i18next.t("pokeball:ultraBall"); - break; - case PokeballType.ROGUE_BALL: - ret = i18next.t("pokeball:rogueBall"); - break; - case PokeballType.MASTER_BALL: - ret = i18next.t("pokeball:masterBall"); - break; - case PokeballType.LUXURY_BALL: - ret = i18next.t("pokeball:luxuryBall"); - break; + case PokeballType.POKEBALL: + ret = i18next.t("pokeball:pokeBall"); + break; + case PokeballType.GREAT_BALL: + ret = i18next.t("pokeball:greatBall"); + break; + case PokeballType.ULTRA_BALL: + ret = i18next.t("pokeball:ultraBall"); + break; + case PokeballType.ROGUE_BALL: + ret = i18next.t("pokeball:rogueBall"); + break; + case PokeballType.MASTER_BALL: + ret = i18next.t("pokeball:masterBall"); + break; + case PokeballType.LUXURY_BALL: + ret = i18next.t("pokeball:luxuryBall"); + break; } return ret; } export function getPokeballCatchMultiplier(type: PokeballType): number { switch (type) { - case PokeballType.POKEBALL: - return 1; - case PokeballType.GREAT_BALL: - return 1.5; - case PokeballType.ULTRA_BALL: - return 2; - case PokeballType.ROGUE_BALL: - return 3; - case PokeballType.MASTER_BALL: - return -1; - case PokeballType.LUXURY_BALL: - return 1; + case PokeballType.POKEBALL: + return 1; + case PokeballType.GREAT_BALL: + return 1.5; + case PokeballType.ULTRA_BALL: + return 2; + case PokeballType.ROGUE_BALL: + return 3; + case PokeballType.MASTER_BALL: + return -1; + case PokeballType.LUXURY_BALL: + return 1; } } export function getPokeballTintColor(type: PokeballType): number { switch (type) { - case PokeballType.POKEBALL: - return 0xd52929; - case PokeballType.GREAT_BALL: - return 0x94b4de; - case PokeballType.ULTRA_BALL: - return 0xe6cd31; - case PokeballType.ROGUE_BALL: - return 0xd52929; - case PokeballType.MASTER_BALL: - return 0xa441bd; - case PokeballType.LUXURY_BALL: - return 0xffde6a; + case PokeballType.POKEBALL: + return 0xd52929; + case PokeballType.GREAT_BALL: + return 0x94b4de; + case PokeballType.ULTRA_BALL: + return 0xe6cd31; + case PokeballType.ROGUE_BALL: + return 0xd52929; + case PokeballType.MASTER_BALL: + return 0xa441bd; + case PokeballType.LUXURY_BALL: + return 0xffde6a; } } diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index eb1b761e306..947ac939989 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -238,8 +238,8 @@ export abstract class PokemonSpeciesForm { isRareRegional(): boolean { switch (this.getRegion()) { - case Region.HISUI: - return true; + case Region.HISUI: + return true; } return false; @@ -265,14 +265,14 @@ export abstract class PokemonSpeciesForm { getBaseExp(): number { let ret = this.baseExp; switch (this.getFormSpriteKey()) { - case SpeciesFormKey.MEGA: - case SpeciesFormKey.MEGA_X: - case SpeciesFormKey.MEGA_Y: - case SpeciesFormKey.PRIMAL: - case SpeciesFormKey.GIGANTAMAX: - case SpeciesFormKey.ETERNAMAX: - ret *= 1.5; - break; + case SpeciesFormKey.MEGA: + case SpeciesFormKey.MEGA_X: + case SpeciesFormKey.MEGA_Y: + case SpeciesFormKey.PRIMAL: + case SpeciesFormKey.GIGANTAMAX: + case SpeciesFormKey.ETERNAMAX: + ret *= 1.5; + break; } return ret; } @@ -346,29 +346,29 @@ export abstract class PokemonSpeciesForm { } switch (this.speciesId) { - case Species.HIPPOPOTAS: - case Species.HIPPOWDON: - case Species.UNFEZANT: - case Species.FRILLISH: - case Species.JELLICENT: - case Species.PYROAR: - ret += female ? "-f" : ""; - break; + case Species.HIPPOPOTAS: + case Species.HIPPOWDON: + case Species.UNFEZANT: + case Species.FRILLISH: + case Species.JELLICENT: + case Species.PYROAR: + ret += female ? "-f" : ""; + break; } let formSpriteKey = this.getFormSpriteKey(formIndex); if (formSpriteKey) { switch (this.speciesId) { - case Species.DUDUNSPARCE: - break; - case Species.ZACIAN: - case Species.ZAMAZENTA: - if (formSpriteKey.startsWith("behemoth")) { - formSpriteKey = "crowned"; - } - default: - ret += `-${formSpriteKey}`; - break; + case Species.DUDUNSPARCE: + break; + case Species.ZACIAN: + case Species.ZAMAZENTA: + if (formSpriteKey.startsWith("behemoth")) { + formSpriteKey = "crowned"; + } + default: + ret += `-${formSpriteKey}`; + break; } } @@ -383,15 +383,15 @@ export abstract class PokemonSpeciesForm { let speciesId = this.speciesId; if (this.speciesId > 2000) { switch (this.speciesId) { - case Species.GALAR_SLOWPOKE: - break; - case Species.ETERNAL_FLOETTE: - break; - case Species.BLOODMOON_URSALUNA: - break; - default: - speciesId = speciesId % 2000; - break; + case Species.GALAR_SLOWPOKE: + break; + case Species.ETERNAL_FLOETTE: + break; + case Species.BLOODMOON_URSALUNA: + break; + default: + speciesId = speciesId % 2000; + break; } } let ret = speciesId.toString(); @@ -403,44 +403,44 @@ export abstract class PokemonSpeciesForm { } const formKey = forms[formIndex || 0].formKey; switch (formKey) { - case SpeciesFormKey.MEGA: - case SpeciesFormKey.MEGA_X: - case SpeciesFormKey.MEGA_Y: - case SpeciesFormKey.GIGANTAMAX: - case SpeciesFormKey.GIGANTAMAX_SINGLE: - case SpeciesFormKey.GIGANTAMAX_RAPID: - case "white": - case "black": - case "therian": - case "sky": - case "gorging": - case "gulping": - case "no-ice": - case "hangry": - case "crowned": - case "eternamax": - case "four": - case "droopy": - case "stretchy": - case "hero": - case "roaming": - case "complete": - case "10-complete": - case "10": - case "10-pc": - case "super": - case "unbound": - case "pau": - case "pompom": - case "sensu": - case "dusk": - case "midnight": - case "school": - case "dawn-wings": - case "dusk-mane": - case "ultra": - ret += `-${formKey}`; - break; + case SpeciesFormKey.MEGA: + case SpeciesFormKey.MEGA_X: + case SpeciesFormKey.MEGA_Y: + case SpeciesFormKey.GIGANTAMAX: + case SpeciesFormKey.GIGANTAMAX_SINGLE: + case SpeciesFormKey.GIGANTAMAX_RAPID: + case "white": + case "black": + case "therian": + case "sky": + case "gorging": + case "gulping": + case "no-ice": + case "hangry": + case "crowned": + case "eternamax": + case "four": + case "droopy": + case "stretchy": + case "hero": + case "roaming": + case "complete": + case "10-complete": + case "10": + case "10-pc": + case "super": + case "unbound": + case "pau": + case "pompom": + case "sensu": + case "dusk": + case "midnight": + case "school": + case "dawn-wings": + case "dusk-mane": + case "ultra": + ret += `-${formKey}`; + break; } } return ret; @@ -636,19 +636,19 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali const form = this.forms[formIndex]; let key: string | null; switch (form.formKey) { - case SpeciesFormKey.MEGA: - case SpeciesFormKey.PRIMAL: - case SpeciesFormKey.ETERNAMAX: - case SpeciesFormKey.MEGA_X: - case SpeciesFormKey.MEGA_Y: - key = form.formKey; - break; - default: - if (form.formKey.indexOf(SpeciesFormKey.GIGANTAMAX) > -1) { - key = "gigantamax"; - } else { - key = null; - } + case SpeciesFormKey.MEGA: + case SpeciesFormKey.PRIMAL: + case SpeciesFormKey.ETERNAMAX: + case SpeciesFormKey.MEGA_X: + case SpeciesFormKey.MEGA_Y: + key = form.formKey; + break; + default: + if (form.formKey.indexOf(SpeciesFormKey.GIGANTAMAX) > -1) { + key = "gigantamax"; + } else { + key = null; + } } if (key) { @@ -690,18 +690,18 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali */ private getStrengthLevelDiff(strength: PartyMemberStrength): integer { switch (Math.min(strength, PartyMemberStrength.STRONGER)) { - case PartyMemberStrength.WEAKEST: - return 60; - case PartyMemberStrength.WEAKER: - return 40; - case PartyMemberStrength.WEAK: - return 20; - case PartyMemberStrength.AVERAGE: - return 8; - case PartyMemberStrength.STRONG: - return 4; - default: - return 0; + case PartyMemberStrength.WEAKEST: + return 60; + case PartyMemberStrength.WEAKER: + return 40; + case PartyMemberStrength.WEAK: + return 20; + case PartyMemberStrength.AVERAGE: + return 8; + case PartyMemberStrength.STRONG: + return 4; + default: + return 0; } } diff --git a/src/data/status-effect.ts b/src/data/status-effect.ts index ffe32a02aeb..4319985f43a 100644 --- a/src/data/status-effect.ts +++ b/src/data/status-effect.ts @@ -26,20 +26,20 @@ export class Status { function getStatusEffectMessageKey(statusEffect: StatusEffect | undefined): string { switch (statusEffect) { - case StatusEffect.POISON: - return "statusEffect:poison"; - case StatusEffect.TOXIC: - return "statusEffect:toxic"; - case StatusEffect.PARALYSIS: - return "statusEffect:paralysis"; - case StatusEffect.SLEEP: - return "statusEffect:sleep"; - case StatusEffect.FREEZE: - return "statusEffect:freeze"; - case StatusEffect.BURN: - return "statusEffect:burn"; - default: - return "statusEffect:none"; + case StatusEffect.POISON: + return "statusEffect:poison"; + case StatusEffect.TOXIC: + return "statusEffect:toxic"; + case StatusEffect.PARALYSIS: + return "statusEffect:paralysis"; + case StatusEffect.SLEEP: + return "statusEffect:sleep"; + case StatusEffect.FREEZE: + return "statusEffect:freeze"; + case StatusEffect.BURN: + return "statusEffect:burn"; + default: + return "statusEffect:none"; } } @@ -90,14 +90,14 @@ export function getStatusEffectDescriptor(statusEffect: StatusEffect): string { export function getStatusEffectCatchRateMultiplier(statusEffect: StatusEffect): number { switch (statusEffect) { - case StatusEffect.POISON: - case StatusEffect.TOXIC: - case StatusEffect.PARALYSIS: - case StatusEffect.BURN: - return 1.5; - case StatusEffect.SLEEP: - case StatusEffect.FREEZE: - return 2.5; + case StatusEffect.POISON: + case StatusEffect.TOXIC: + case StatusEffect.PARALYSIS: + case StatusEffect.BURN: + return 1.5; + case StatusEffect.SLEEP: + case StatusEffect.FREEZE: + return 2.5; } return 1; diff --git a/src/data/terrain.ts b/src/data/terrain.ts index 6db68b92239..d8ee8d67925 100644 --- a/src/data/terrain.ts +++ b/src/data/terrain.ts @@ -34,21 +34,21 @@ export class Terrain { getAttackTypeMultiplier(attackType: Type): number { switch (this.terrainType) { - case TerrainType.ELECTRIC: - if (attackType === Type.ELECTRIC) { - return 1.3; - } - break; - case TerrainType.GRASSY: - if (attackType === Type.GRASS) { - return 1.3; - } - break; - case TerrainType.PSYCHIC: - if (attackType === Type.PSYCHIC) { - return 1.3; - } - break; + case TerrainType.ELECTRIC: + if (attackType === Type.ELECTRIC) { + return 1.3; + } + break; + case TerrainType.GRASSY: + if (attackType === Type.GRASS) { + return 1.3; + } + break; + case TerrainType.PSYCHIC: + if (attackType === Type.PSYCHIC) { + return 1.3; + } + break; } return 1; @@ -56,13 +56,13 @@ export class Terrain { isMoveTerrainCancelled(user: Pokemon, targets: BattlerIndex[], move: Move): boolean { switch (this.terrainType) { - case TerrainType.PSYCHIC: - if (!move.hasAttr(ProtectAttr)) { - const priority = new Utils.IntegerHolder(move.priority); - applyAbAttrs(ChangeMovePriorityAbAttr, user, null, false, move, priority); - // Cancels move if the move has positive priority and targets a Pokemon grounded on the Psychic Terrain - return priority.value > 0 && user.getOpponents().some(o => targets.includes(o.getBattlerIndex()) && o.isGrounded()); - } + case TerrainType.PSYCHIC: + if (!move.hasAttr(ProtectAttr)) { + const priority = new Utils.IntegerHolder(move.priority); + applyAbAttrs(ChangeMovePriorityAbAttr, user, null, false, move, priority); + // Cancels move if the move has positive priority and targets a Pokemon grounded on the Psychic Terrain + return priority.value > 0 && user.getOpponents().some(o => targets.includes(o.getBattlerIndex()) && o.isGrounded()); + } } return false; @@ -71,14 +71,14 @@ export class Terrain { export function getTerrainName(terrainType: TerrainType): string { switch (terrainType) { - case TerrainType.MISTY: - return i18next.t("terrain:misty"); - case TerrainType.ELECTRIC: - return i18next.t("terrain:electric"); - case TerrainType.GRASSY: - return i18next.t("terrain:grassy"); - case TerrainType.PSYCHIC: - return i18next.t("terrain:psychic"); + case TerrainType.MISTY: + return i18next.t("terrain:misty"); + case TerrainType.ELECTRIC: + return i18next.t("terrain:electric"); + case TerrainType.GRASSY: + return i18next.t("terrain:grassy"); + case TerrainType.PSYCHIC: + return i18next.t("terrain:psychic"); } return ""; @@ -87,14 +87,14 @@ export function getTerrainName(terrainType: TerrainType): string { export function getTerrainColor(terrainType: TerrainType): [ integer, integer, integer ] { switch (terrainType) { - case TerrainType.MISTY: - return [ 232, 136, 200 ]; - case TerrainType.ELECTRIC: - return [ 248, 248, 120 ]; - case TerrainType.GRASSY: - return [ 120, 200, 80 ]; - case TerrainType.PSYCHIC: - return [ 160, 64, 160 ]; + case TerrainType.MISTY: + return [ 232, 136, 200 ]; + case TerrainType.ELECTRIC: + return [ 248, 248, 120 ]; + case TerrainType.GRASSY: + return [ 120, 200, 80 ]; + case TerrainType.PSYCHIC: + return [ 160, 64, 160 ]; } return [ 0, 0, 0 ]; diff --git a/src/data/trainer-config.ts b/src/data/trainer-config.ts index bbeecba84e6..fcc13975270 100644 --- a/src/data/trainer-config.ts +++ b/src/data/trainer-config.ts @@ -299,65 +299,65 @@ export class TrainerConfig { getDerivedType(trainerTypeToDeriveFrom: TrainerType | null = null): TrainerType { let trainerType = trainerTypeToDeriveFrom ? trainerTypeToDeriveFrom : this.trainerType; switch (trainerType) { - case TrainerType.RIVAL_2: - case TrainerType.RIVAL_3: - case TrainerType.RIVAL_4: - case TrainerType.RIVAL_5: - case TrainerType.RIVAL_6: - trainerType = TrainerType.RIVAL; - break; - case TrainerType.LANCE_CHAMPION: - trainerType = TrainerType.LANCE; - break; - case TrainerType.LARRY_ELITE: - trainerType = TrainerType.LARRY; - break; - case TrainerType.ROCKET_BOSS_GIOVANNI_1: - case TrainerType.ROCKET_BOSS_GIOVANNI_2: - trainerType = TrainerType.GIOVANNI; - break; - case TrainerType.MAXIE_2: - trainerType = TrainerType.MAXIE; - break; - case TrainerType.ARCHIE_2: - trainerType = TrainerType.ARCHIE; - break; - case TrainerType.CYRUS_2: - trainerType = TrainerType.CYRUS; - break; - case TrainerType.GHETSIS_2: - trainerType = TrainerType.GHETSIS; - break; - case TrainerType.LYSANDRE_2: - trainerType = TrainerType.LYSANDRE; - break; - case TrainerType.LUSAMINE_2: - trainerType = TrainerType.LUSAMINE; - break; - case TrainerType.GUZMA_2: - trainerType = TrainerType.GUZMA; - break; - case TrainerType.ROSE_2: - trainerType = TrainerType.ROSE; - break; - case TrainerType.PENNY_2: - trainerType = TrainerType.PENNY; - break; - case TrainerType.MARNIE_ELITE: - trainerType = TrainerType.MARNIE; - break; - case TrainerType.NESSA_ELITE: - trainerType = TrainerType.NESSA; - break; - case TrainerType.BEA_ELITE: - trainerType = TrainerType.BEA; - break; - case TrainerType.ALLISTER_ELITE: - trainerType = TrainerType.ALLISTER; - break; - case TrainerType.RAIHAN_ELITE: - trainerType = TrainerType.RAIHAN; - break; + case TrainerType.RIVAL_2: + case TrainerType.RIVAL_3: + case TrainerType.RIVAL_4: + case TrainerType.RIVAL_5: + case TrainerType.RIVAL_6: + trainerType = TrainerType.RIVAL; + break; + case TrainerType.LANCE_CHAMPION: + trainerType = TrainerType.LANCE; + break; + case TrainerType.LARRY_ELITE: + trainerType = TrainerType.LARRY; + break; + case TrainerType.ROCKET_BOSS_GIOVANNI_1: + case TrainerType.ROCKET_BOSS_GIOVANNI_2: + trainerType = TrainerType.GIOVANNI; + break; + case TrainerType.MAXIE_2: + trainerType = TrainerType.MAXIE; + break; + case TrainerType.ARCHIE_2: + trainerType = TrainerType.ARCHIE; + break; + case TrainerType.CYRUS_2: + trainerType = TrainerType.CYRUS; + break; + case TrainerType.GHETSIS_2: + trainerType = TrainerType.GHETSIS; + break; + case TrainerType.LYSANDRE_2: + trainerType = TrainerType.LYSANDRE; + break; + case TrainerType.LUSAMINE_2: + trainerType = TrainerType.LUSAMINE; + break; + case TrainerType.GUZMA_2: + trainerType = TrainerType.GUZMA; + break; + case TrainerType.ROSE_2: + trainerType = TrainerType.ROSE; + break; + case TrainerType.PENNY_2: + trainerType = TrainerType.PENNY; + break; + case TrainerType.MARNIE_ELITE: + trainerType = TrainerType.MARNIE; + break; + case TrainerType.NESSA_ELITE: + trainerType = TrainerType.NESSA; + break; + case TrainerType.BEA_ELITE: + trainerType = TrainerType.BEA; + break; + case TrainerType.ALLISTER_ELITE: + trainerType = TrainerType.ALLISTER; + break; + case TrainerType.RAIHAN_ELITE: + trainerType = TrainerType.RAIHAN; + break; } return trainerType; @@ -564,104 +564,104 @@ export class TrainerConfig { speciesPoolPerEvilTeamAdmin(team): TrainerTierPools { team = team.toLowerCase(); switch (team) { - case "rocket": { - return { - [TrainerPoolTier.COMMON]: [ Species.RATTATA, Species.KOFFING, Species.EKANS, Species.ZUBAT, Species.MAGIKARP, Species.HOUNDOUR, Species.ONIX, Species.CUBONE, Species.GROWLITHE, Species.MURKROW, Species.GASTLY, Species.EXEGGCUTE, Species.VOLTORB, Species.DROWZEE, Species.VILEPLUME ], - [TrainerPoolTier.UNCOMMON]: [ Species.PORYGON, Species.MANKEY, Species.MAGNEMITE, Species.ALOLA_SANDSHREW, Species.ALOLA_MEOWTH, Species.ALOLA_GRIMER, Species.ALOLA_GEODUDE, Species.PALDEA_TAUROS, Species.OMANYTE, Species.KABUTO, Species.MAGBY, Species.ELEKID ], - [TrainerPoolTier.RARE]: [ Species.DRATINI, Species.LARVITAR ] - }; - } - case "magma": { - return { - [TrainerPoolTier.COMMON]: [ Species.GROWLITHE, Species.SLUGMA, Species.SOLROCK, Species.HIPPOPOTAS, Species.BALTOY, Species.ROLYCOLY, Species.GLIGAR, Species.TORKOAL, Species.HOUNDOUR, Species.MAGBY ], - [TrainerPoolTier.UNCOMMON]: [ Species.TRAPINCH, Species.SILICOBRA, Species.RHYHORN, Species.ANORITH, Species.LILEEP, Species.HISUI_GROWLITHE, Species.TURTONATOR, Species.ARON, Species.TOEDSCOOL ], - [TrainerPoolTier.RARE]: [ Species.CAPSAKID, Species.CHARCADET ] - }; - } - case "aqua": { - return { - [TrainerPoolTier.COMMON]: [ Species.CORPHISH, Species.SPHEAL, Species.CLAMPERL, Species.CHINCHOU, Species.WOOPER, Species.WINGULL, Species.TENTACOOL, Species.AZURILL, Species.LOTAD, Species.WAILMER, Species.REMORAID, Species.BARBOACH ], - [TrainerPoolTier.UNCOMMON]: [ Species.MANTYKE, Species.HISUI_QWILFISH, Species.ARROKUDA, Species.DHELMISE, Species.CLOBBOPUS, Species.FEEBAS, Species.PALDEA_WOOPER, Species.HORSEA, Species.SKRELP ], - [TrainerPoolTier.RARE]: [ Species.DONDOZO, Species.BASCULEGION ] - }; - } - case "galactic": { - return { - [TrainerPoolTier.COMMON]: [ Species.BRONZOR, Species.SWINUB, Species.YANMA, Species.LICKITUNG, Species.TANGELA, Species.MAGBY, Species.ELEKID, Species.SKORUPI, Species.ZUBAT, Species.MURKROW, Species.MAGIKARP, Species.VOLTORB ], - [TrainerPoolTier.UNCOMMON]: [ Species.HISUI_GROWLITHE, Species.HISUI_QWILFISH, Species.SNEASEL, Species.DUSKULL, Species.ROTOM, Species.HISUI_VOLTORB, Species.GLIGAR, Species.ABRA ], - [TrainerPoolTier.RARE]: [ Species.URSALUNA, Species.HISUI_LILLIGANT, Species.SPIRITOMB, Species.HISUI_SNEASEL ] - }; - } - case "plasma": { - return { - [TrainerPoolTier.COMMON]: [ Species.YAMASK, Species.ROGGENROLA, Species.JOLTIK, Species.TYMPOLE, Species.FRILLISH, Species.FERROSEED, Species.SANDILE, Species.TIMBURR, Species.DARUMAKA, Species.FOONGUS, Species.CUBCHOO, Species.VANILLITE ], - [TrainerPoolTier.UNCOMMON]: [ Species.PAWNIARD, Species.VULLABY, Species.ZORUA, Species.DRILBUR, Species.KLINK, Species.TYNAMO, Species.GALAR_DARUMAKA, Species.GOLETT, Species.MIENFOO, Species.DURANT, Species.SIGILYPH ], - [TrainerPoolTier.RARE]: [ Species.HISUI_ZORUA, Species.AXEW, Species.DEINO, Species.HISUI_BRAVIARY ] - }; - } - case "flare": { - return { - [TrainerPoolTier.COMMON]: [ Species.FLETCHLING, Species.LITLEO, Species.INKAY, Species.FOONGUS, Species.HELIOPTILE, Species.ELECTRIKE, Species.SKORUPI, Species.PURRLOIN, Species.CLAWITZER, Species.PANCHAM, Species.ESPURR, Species.BUNNELBY ], - [TrainerPoolTier.UNCOMMON]: [ Species.LITWICK, Species.SNEASEL, Species.PUMPKABOO, Species.PHANTUMP, Species.HONEDGE, Species.BINACLE, Species.HOUNDOUR, Species.SKRELP, Species.SLIGGOO ], - [TrainerPoolTier.RARE]: [ Species.NOIBAT, Species.HISUI_AVALUGG, Species.HISUI_SLIGGOO ] - }; - } - case "aether": { - return { - [TrainerPoolTier.COMMON]: [ Species.BRUXISH, Species.SLOWPOKE, Species.BALTOY, Species.EXEGGCUTE, Species.ABRA, Species.ALOLA_RAICHU, Species.ELGYEM, Species.NATU, Species.BLIPBUG, Species.GIRAFARIG, Species.ORANGURU ], - [TrainerPoolTier.UNCOMMON]: [ Species.GALAR_SLOWPOKE, Species.MEDITITE, Species.BELDUM, Species.HATENNA, Species.INKAY, Species.RALTS, Species.GALAR_MR_MIME ], - [TrainerPoolTier.RARE]: [ Species.ARMAROUGE, Species.HISUI_BRAVIARY, Species.PORYGON ] - }; - } - case "skull": { - return { - [TrainerPoolTier.COMMON]: [ Species.MAREANIE, Species.ALOLA_GRIMER, Species.GASTLY, Species.ZUBAT, Species.FOMANTIS, Species.VENIPEDE, Species.BUDEW, Species.KOFFING, Species.STUNKY, Species.CROAGUNK, Species.NIDORAN_F ], - [TrainerPoolTier.UNCOMMON]: [ Species.GALAR_SLOWPOKE, Species.SKORUPI, Species.PALDEA_WOOPER, Species.VULLABY, Species.HISUI_QWILFISH, Species.GLIMMET ], - [TrainerPoolTier.RARE]: [ Species.SKRELP, Species.HISUI_SNEASEL ] - }; - } - case "macro": { - return { - [TrainerPoolTier.COMMON]: [ Species.HATENNA, Species.FEEBAS, Species.BOUNSWEET, Species.SALANDIT, Species.GALAR_PONYTA, Species.GOTHITA, Species.FROSLASS, Species.VULPIX, Species.FRILLISH, Species.ODDISH, Species.SINISTEA ], - [TrainerPoolTier.UNCOMMON]: [ Species.VULLABY, Species.MAREANIE, Species.ALOLA_VULPIX, Species.TOGEPI, Species.GALAR_CORSOLA, Species.APPLIN ], - [TrainerPoolTier.RARE]: [ Species.TINKATINK, Species.HISUI_LILLIGANT ] - }; - } - case "star_1": { - return { - [TrainerPoolTier.COMMON]: [ Species.MURKROW, Species.SEEDOT, Species.CACNEA, Species.STUNKY, Species.SANDILE, Species.NYMBLE, Species.MASCHIFF, Species.GALAR_ZIGZAGOON ], - [TrainerPoolTier.UNCOMMON]: [ Species.UMBREON, Species.SNEASEL, Species.CORPHISH, Species.ZORUA, Species.INKAY, Species.BOMBIRDIER ], - [TrainerPoolTier.RARE]: [ Species.DEINO, Species.SPRIGATITO ] - }; - } - case "star_2": { - return { - [TrainerPoolTier.COMMON]: [ Species.GROWLITHE, Species.HOUNDOUR, Species.NUMEL, Species.LITWICK, Species.FLETCHLING, Species.LITLEO, Species.ROLYCOLY, Species.CAPSAKID ], - [TrainerPoolTier.UNCOMMON]: [ Species.PONYTA, Species.FLAREON, Species.MAGBY, Species.TORKOAL, Species.SALANDIT, Species.TURTONATOR ], - [TrainerPoolTier.RARE]: [ Species.LARVESTA, Species.FUECOCO ] - }; - } - case "star_3": { - return { - [TrainerPoolTier.COMMON]: [ Species.ZUBAT, Species.GRIMER, Species.STUNKY, Species.FOONGUS, Species.MAREANIE, Species.TOXEL, Species.SHROODLE, Species.PALDEA_WOOPER ], - [TrainerPoolTier.UNCOMMON]: [ Species.GASTLY, Species.SEVIPER, Species.SKRELP, Species.ALOLA_GRIMER, Species.GALAR_SLOWPOKE, Species.HISUI_QWILFISH ], - [TrainerPoolTier.RARE]: [ Species.GLIMMET, Species.BULBASAUR ] - }; - } - case "star_4": { - return { - [TrainerPoolTier.COMMON]: [ Species.CLEFFA, Species.IGGLYBUFF, Species.AZURILL, Species.COTTONEE, Species.FLABEBE, Species.HATENNA, Species.IMPIDIMP, Species.TINKATINK ], - [TrainerPoolTier.UNCOMMON]: [ Species.TOGEPI, Species.GARDEVOIR, Species.SYLVEON, Species.KLEFKI, Species.MIMIKYU, Species.ALOLA_VULPIX ], - [TrainerPoolTier.RARE]: [ Species.GALAR_PONYTA, Species.POPPLIO ] - }; - } - case "star_5": { - return { - [TrainerPoolTier.COMMON]: [ Species.SHROOMISH, Species.MAKUHITA, Species.MEDITITE, Species.CROAGUNK, Species.SCRAGGY, Species.MIENFOO, Species.PAWMI, Species.PALDEA_TAUROS ], - [TrainerPoolTier.UNCOMMON]: [ Species.RIOLU, Species.TIMBURR, Species.HAWLUCHA, Species.PASSIMIAN, Species.FALINKS, Species.FLAMIGO ], - [TrainerPoolTier.RARE]: [ Species.JANGMO_O, Species.QUAXLY ] - }; - } + case "rocket": { + return { + [TrainerPoolTier.COMMON]: [ Species.RATTATA, Species.KOFFING, Species.EKANS, Species.ZUBAT, Species.MAGIKARP, Species.HOUNDOUR, Species.ONIX, Species.CUBONE, Species.GROWLITHE, Species.MURKROW, Species.GASTLY, Species.EXEGGCUTE, Species.VOLTORB, Species.DROWZEE, Species.VILEPLUME ], + [TrainerPoolTier.UNCOMMON]: [ Species.PORYGON, Species.MANKEY, Species.MAGNEMITE, Species.ALOLA_SANDSHREW, Species.ALOLA_MEOWTH, Species.ALOLA_GRIMER, Species.ALOLA_GEODUDE, Species.PALDEA_TAUROS, Species.OMANYTE, Species.KABUTO, Species.MAGBY, Species.ELEKID ], + [TrainerPoolTier.RARE]: [ Species.DRATINI, Species.LARVITAR ] + }; + } + case "magma": { + return { + [TrainerPoolTier.COMMON]: [ Species.GROWLITHE, Species.SLUGMA, Species.SOLROCK, Species.HIPPOPOTAS, Species.BALTOY, Species.ROLYCOLY, Species.GLIGAR, Species.TORKOAL, Species.HOUNDOUR, Species.MAGBY ], + [TrainerPoolTier.UNCOMMON]: [ Species.TRAPINCH, Species.SILICOBRA, Species.RHYHORN, Species.ANORITH, Species.LILEEP, Species.HISUI_GROWLITHE, Species.TURTONATOR, Species.ARON, Species.TOEDSCOOL ], + [TrainerPoolTier.RARE]: [ Species.CAPSAKID, Species.CHARCADET ] + }; + } + case "aqua": { + return { + [TrainerPoolTier.COMMON]: [ Species.CORPHISH, Species.SPHEAL, Species.CLAMPERL, Species.CHINCHOU, Species.WOOPER, Species.WINGULL, Species.TENTACOOL, Species.AZURILL, Species.LOTAD, Species.WAILMER, Species.REMORAID, Species.BARBOACH ], + [TrainerPoolTier.UNCOMMON]: [ Species.MANTYKE, Species.HISUI_QWILFISH, Species.ARROKUDA, Species.DHELMISE, Species.CLOBBOPUS, Species.FEEBAS, Species.PALDEA_WOOPER, Species.HORSEA, Species.SKRELP ], + [TrainerPoolTier.RARE]: [ Species.DONDOZO, Species.BASCULEGION ] + }; + } + case "galactic": { + return { + [TrainerPoolTier.COMMON]: [ Species.BRONZOR, Species.SWINUB, Species.YANMA, Species.LICKITUNG, Species.TANGELA, Species.MAGBY, Species.ELEKID, Species.SKORUPI, Species.ZUBAT, Species.MURKROW, Species.MAGIKARP, Species.VOLTORB ], + [TrainerPoolTier.UNCOMMON]: [ Species.HISUI_GROWLITHE, Species.HISUI_QWILFISH, Species.SNEASEL, Species.DUSKULL, Species.ROTOM, Species.HISUI_VOLTORB, Species.GLIGAR, Species.ABRA ], + [TrainerPoolTier.RARE]: [ Species.URSALUNA, Species.HISUI_LILLIGANT, Species.SPIRITOMB, Species.HISUI_SNEASEL ] + }; + } + case "plasma": { + return { + [TrainerPoolTier.COMMON]: [ Species.YAMASK, Species.ROGGENROLA, Species.JOLTIK, Species.TYMPOLE, Species.FRILLISH, Species.FERROSEED, Species.SANDILE, Species.TIMBURR, Species.DARUMAKA, Species.FOONGUS, Species.CUBCHOO, Species.VANILLITE ], + [TrainerPoolTier.UNCOMMON]: [ Species.PAWNIARD, Species.VULLABY, Species.ZORUA, Species.DRILBUR, Species.KLINK, Species.TYNAMO, Species.GALAR_DARUMAKA, Species.GOLETT, Species.MIENFOO, Species.DURANT, Species.SIGILYPH ], + [TrainerPoolTier.RARE]: [ Species.HISUI_ZORUA, Species.AXEW, Species.DEINO, Species.HISUI_BRAVIARY ] + }; + } + case "flare": { + return { + [TrainerPoolTier.COMMON]: [ Species.FLETCHLING, Species.LITLEO, Species.INKAY, Species.FOONGUS, Species.HELIOPTILE, Species.ELECTRIKE, Species.SKORUPI, Species.PURRLOIN, Species.CLAWITZER, Species.PANCHAM, Species.ESPURR, Species.BUNNELBY ], + [TrainerPoolTier.UNCOMMON]: [ Species.LITWICK, Species.SNEASEL, Species.PUMPKABOO, Species.PHANTUMP, Species.HONEDGE, Species.BINACLE, Species.HOUNDOUR, Species.SKRELP, Species.SLIGGOO ], + [TrainerPoolTier.RARE]: [ Species.NOIBAT, Species.HISUI_AVALUGG, Species.HISUI_SLIGGOO ] + }; + } + case "aether": { + return { + [TrainerPoolTier.COMMON]: [ Species.BRUXISH, Species.SLOWPOKE, Species.BALTOY, Species.EXEGGCUTE, Species.ABRA, Species.ALOLA_RAICHU, Species.ELGYEM, Species.NATU, Species.BLIPBUG, Species.GIRAFARIG, Species.ORANGURU ], + [TrainerPoolTier.UNCOMMON]: [ Species.GALAR_SLOWPOKE, Species.MEDITITE, Species.BELDUM, Species.HATENNA, Species.INKAY, Species.RALTS, Species.GALAR_MR_MIME ], + [TrainerPoolTier.RARE]: [ Species.ARMAROUGE, Species.HISUI_BRAVIARY, Species.PORYGON ] + }; + } + case "skull": { + return { + [TrainerPoolTier.COMMON]: [ Species.MAREANIE, Species.ALOLA_GRIMER, Species.GASTLY, Species.ZUBAT, Species.FOMANTIS, Species.VENIPEDE, Species.BUDEW, Species.KOFFING, Species.STUNKY, Species.CROAGUNK, Species.NIDORAN_F ], + [TrainerPoolTier.UNCOMMON]: [ Species.GALAR_SLOWPOKE, Species.SKORUPI, Species.PALDEA_WOOPER, Species.VULLABY, Species.HISUI_QWILFISH, Species.GLIMMET ], + [TrainerPoolTier.RARE]: [ Species.SKRELP, Species.HISUI_SNEASEL ] + }; + } + case "macro": { + return { + [TrainerPoolTier.COMMON]: [ Species.HATENNA, Species.FEEBAS, Species.BOUNSWEET, Species.SALANDIT, Species.GALAR_PONYTA, Species.GOTHITA, Species.FROSLASS, Species.VULPIX, Species.FRILLISH, Species.ODDISH, Species.SINISTEA ], + [TrainerPoolTier.UNCOMMON]: [ Species.VULLABY, Species.MAREANIE, Species.ALOLA_VULPIX, Species.TOGEPI, Species.GALAR_CORSOLA, Species.APPLIN ], + [TrainerPoolTier.RARE]: [ Species.TINKATINK, Species.HISUI_LILLIGANT ] + }; + } + case "star_1": { + return { + [TrainerPoolTier.COMMON]: [ Species.MURKROW, Species.SEEDOT, Species.CACNEA, Species.STUNKY, Species.SANDILE, Species.NYMBLE, Species.MASCHIFF, Species.GALAR_ZIGZAGOON ], + [TrainerPoolTier.UNCOMMON]: [ Species.UMBREON, Species.SNEASEL, Species.CORPHISH, Species.ZORUA, Species.INKAY, Species.BOMBIRDIER ], + [TrainerPoolTier.RARE]: [ Species.DEINO, Species.SPRIGATITO ] + }; + } + case "star_2": { + return { + [TrainerPoolTier.COMMON]: [ Species.GROWLITHE, Species.HOUNDOUR, Species.NUMEL, Species.LITWICK, Species.FLETCHLING, Species.LITLEO, Species.ROLYCOLY, Species.CAPSAKID ], + [TrainerPoolTier.UNCOMMON]: [ Species.PONYTA, Species.FLAREON, Species.MAGBY, Species.TORKOAL, Species.SALANDIT, Species.TURTONATOR ], + [TrainerPoolTier.RARE]: [ Species.LARVESTA, Species.FUECOCO ] + }; + } + case "star_3": { + return { + [TrainerPoolTier.COMMON]: [ Species.ZUBAT, Species.GRIMER, Species.STUNKY, Species.FOONGUS, Species.MAREANIE, Species.TOXEL, Species.SHROODLE, Species.PALDEA_WOOPER ], + [TrainerPoolTier.UNCOMMON]: [ Species.GASTLY, Species.SEVIPER, Species.SKRELP, Species.ALOLA_GRIMER, Species.GALAR_SLOWPOKE, Species.HISUI_QWILFISH ], + [TrainerPoolTier.RARE]: [ Species.GLIMMET, Species.BULBASAUR ] + }; + } + case "star_4": { + return { + [TrainerPoolTier.COMMON]: [ Species.CLEFFA, Species.IGGLYBUFF, Species.AZURILL, Species.COTTONEE, Species.FLABEBE, Species.HATENNA, Species.IMPIDIMP, Species.TINKATINK ], + [TrainerPoolTier.UNCOMMON]: [ Species.TOGEPI, Species.GARDEVOIR, Species.SYLVEON, Species.KLEFKI, Species.MIMIKYU, Species.ALOLA_VULPIX ], + [TrainerPoolTier.RARE]: [ Species.GALAR_PONYTA, Species.POPPLIO ] + }; + } + case "star_5": { + return { + [TrainerPoolTier.COMMON]: [ Species.SHROOMISH, Species.MAKUHITA, Species.MEDITITE, Species.CROAGUNK, Species.SCRAGGY, Species.MIENFOO, Species.PAWMI, Species.PALDEA_TAUROS ], + [TrainerPoolTier.UNCOMMON]: [ Species.RIOLU, Species.TIMBURR, Species.HAWLUCHA, Species.PASSIMIAN, Species.FALINKS, Species.FLAMIGO ], + [TrainerPoolTier.RARE]: [ Species.JANGMO_O, Species.QUAXLY ] + }; + } } console.warn(`Evil team admin for ${team} not found. Returning empty species pools.`); diff --git a/src/data/type.ts b/src/data/type.ts index 47bea8dd72b..483ec068d3c 100644 --- a/src/data/type.ts +++ b/src/data/type.ts @@ -29,260 +29,260 @@ export function getTypeDamageMultiplier(attackType: Type, defType: Type): TypeDa } switch (defType) { - case Type.NORMAL: - switch (attackType) { - case Type.FIGHTING: - return 2; - case Type.GHOST: - return 0; - default: - return 1; - } - case Type.FIGHTING: - switch (attackType) { - case Type.FLYING: - case Type.PSYCHIC: - case Type.FAIRY: - return 2; - case Type.ROCK: - case Type.BUG: - case Type.DARK: - return 0.5; - default: - return 1; - } - case Type.FLYING: - switch (attackType) { - case Type.ROCK: - case Type.ELECTRIC: - case Type.ICE: - return 2; - case Type.FIGHTING: - case Type.BUG: - case Type.GRASS: - return 0.5; - case Type.GROUND: - return 0; - default: - return 1; - } - case Type.POISON: - switch (attackType) { - case Type.GROUND: - case Type.PSYCHIC: - return 2; - case Type.FIGHTING: - case Type.POISON: - case Type.BUG: - case Type.GRASS: - case Type.FAIRY: - return 0.5; - default: - return 1; - } - case Type.GROUND: - switch (attackType) { - case Type.WATER: - case Type.GRASS: - case Type.ICE: - return 2; - case Type.POISON: - case Type.ROCK: - return 0.5; - case Type.ELECTRIC: - return 0; - default: - return 1; - } - case Type.ROCK: - switch (attackType) { - case Type.FIGHTING: - case Type.GROUND: - case Type.STEEL: - case Type.WATER: - case Type.GRASS: - return 2; case Type.NORMAL: - case Type.FLYING: - case Type.POISON: - case Type.FIRE: - return 0.5; - default: - return 1; - } - case Type.BUG: - switch (attackType) { - case Type.FLYING: - case Type.ROCK: - case Type.FIRE: - return 2; + switch (attackType) { + case Type.FIGHTING: + return 2; + case Type.GHOST: + return 0; + default: + return 1; + } case Type.FIGHTING: + switch (attackType) { + case Type.FLYING: + case Type.PSYCHIC: + case Type.FAIRY: + return 2; + case Type.ROCK: + case Type.BUG: + case Type.DARK: + return 0.5; + default: + return 1; + } + case Type.FLYING: + switch (attackType) { + case Type.ROCK: + case Type.ELECTRIC: + case Type.ICE: + return 2; + case Type.FIGHTING: + case Type.BUG: + case Type.GRASS: + return 0.5; + case Type.GROUND: + return 0; + default: + return 1; + } + case Type.POISON: + switch (attackType) { + case Type.GROUND: + case Type.PSYCHIC: + return 2; + case Type.FIGHTING: + case Type.POISON: + case Type.BUG: + case Type.GRASS: + case Type.FAIRY: + return 0.5; + default: + return 1; + } case Type.GROUND: - case Type.GRASS: - return 0.5; - default: - return 1; - } - case Type.GHOST: - switch (attackType) { + switch (attackType) { + case Type.WATER: + case Type.GRASS: + case Type.ICE: + return 2; + case Type.POISON: + case Type.ROCK: + return 0.5; + case Type.ELECTRIC: + return 0; + default: + return 1; + } + case Type.ROCK: + switch (attackType) { + case Type.FIGHTING: + case Type.GROUND: + case Type.STEEL: + case Type.WATER: + case Type.GRASS: + return 2; + case Type.NORMAL: + case Type.FLYING: + case Type.POISON: + case Type.FIRE: + return 0.5; + default: + return 1; + } + case Type.BUG: + switch (attackType) { + case Type.FLYING: + case Type.ROCK: + case Type.FIRE: + return 2; + case Type.FIGHTING: + case Type.GROUND: + case Type.GRASS: + return 0.5; + default: + return 1; + } case Type.GHOST: - case Type.DARK: - return 2; - case Type.POISON: - case Type.BUG: - return 0.5; - case Type.NORMAL: - case Type.FIGHTING: - return 0; - default: - return 1; - } - case Type.STEEL: - switch (attackType) { - case Type.FIGHTING: - case Type.GROUND: - case Type.FIRE: - return 2; - case Type.NORMAL: - case Type.FLYING: - case Type.ROCK: - case Type.BUG: + switch (attackType) { + case Type.GHOST: + case Type.DARK: + return 2; + case Type.POISON: + case Type.BUG: + return 0.5; + case Type.NORMAL: + case Type.FIGHTING: + return 0; + default: + return 1; + } case Type.STEEL: + switch (attackType) { + case Type.FIGHTING: + case Type.GROUND: + case Type.FIRE: + return 2; + case Type.NORMAL: + case Type.FLYING: + case Type.ROCK: + case Type.BUG: + case Type.STEEL: + case Type.GRASS: + case Type.PSYCHIC: + case Type.ICE: + case Type.DRAGON: + case Type.FAIRY: + return 0.5; + case Type.POISON: + return 0; + default: + return 1; + } + case Type.FIRE: + switch (attackType) { + case Type.GROUND: + case Type.ROCK: + case Type.WATER: + return 2; + case Type.BUG: + case Type.STEEL: + case Type.FIRE: + case Type.GRASS: + case Type.ICE: + case Type.FAIRY: + return 0.5; + default: + return 1; + } + case Type.WATER: + switch (attackType) { + case Type.GRASS: + case Type.ELECTRIC: + return 2; + case Type.STEEL: + case Type.FIRE: + case Type.WATER: + case Type.ICE: + return 0.5; + default: + return 1; + } case Type.GRASS: + switch (attackType) { + case Type.FLYING: + case Type.POISON: + case Type.BUG: + case Type.FIRE: + case Type.ICE: + return 2; + case Type.GROUND: + case Type.WATER: + case Type.GRASS: + case Type.ELECTRIC: + return 0.5; + default: + return 1; + } + case Type.ELECTRIC: + switch (attackType) { + case Type.GROUND: + return 2; + case Type.FLYING: + case Type.STEEL: + case Type.ELECTRIC: + return 0.5; + default: + return 1; + } case Type.PSYCHIC: + switch (attackType) { + case Type.BUG: + case Type.GHOST: + case Type.DARK: + return 2; + case Type.FIGHTING: + case Type.PSYCHIC: + return 0.5; + default: + return 1; + } case Type.ICE: + switch (attackType) { + case Type.FIGHTING: + case Type.ROCK: + case Type.STEEL: + case Type.FIRE: + return 2; + case Type.ICE: + return 0.5; + default: + return 1; + } case Type.DRAGON: - case Type.FAIRY: - return 0.5; - case Type.POISON: - return 0; - default: - return 1; - } - case Type.FIRE: - switch (attackType) { - case Type.GROUND: - case Type.ROCK: - case Type.WATER: - return 2; - case Type.BUG: - case Type.STEEL: - case Type.FIRE: - case Type.GRASS: - case Type.ICE: - case Type.FAIRY: - return 0.5; - default: - return 1; - } - case Type.WATER: - switch (attackType) { - case Type.GRASS: - case Type.ELECTRIC: - return 2; - case Type.STEEL: - case Type.FIRE: - case Type.WATER: - case Type.ICE: - return 0.5; - default: - return 1; - } - case Type.GRASS: - switch (attackType) { - case Type.FLYING: - case Type.POISON: - case Type.BUG: - case Type.FIRE: - case Type.ICE: - return 2; - case Type.GROUND: - case Type.WATER: - case Type.GRASS: - case Type.ELECTRIC: - return 0.5; - default: - return 1; - } - case Type.ELECTRIC: - switch (attackType) { - case Type.GROUND: - return 2; - case Type.FLYING: - case Type.STEEL: - case Type.ELECTRIC: - return 0.5; - default: - return 1; - } - case Type.PSYCHIC: - switch (attackType) { - case Type.BUG: - case Type.GHOST: + switch (attackType) { + case Type.ICE: + case Type.DRAGON: + case Type.FAIRY: + return 2; + case Type.FIRE: + case Type.WATER: + case Type.GRASS: + case Type.ELECTRIC: + return 0.5; + default: + return 1; + } case Type.DARK: - return 2; - case Type.FIGHTING: - case Type.PSYCHIC: - return 0.5; - default: - return 1; - } - case Type.ICE: - switch (attackType) { - case Type.FIGHTING: - case Type.ROCK: - case Type.STEEL: - case Type.FIRE: - return 2; - case Type.ICE: - return 0.5; - default: - return 1; - } - case Type.DRAGON: - switch (attackType) { - case Type.ICE: - case Type.DRAGON: + switch (attackType) { + case Type.FIGHTING: + case Type.BUG: + case Type.FAIRY: + return 2; + case Type.GHOST: + case Type.DARK: + return 0.5; + case Type.PSYCHIC: + return 0; + default: + return 1; + } case Type.FAIRY: - return 2; - case Type.FIRE: - case Type.WATER: - case Type.GRASS: - case Type.ELECTRIC: - return 0.5; - default: + switch (attackType) { + case Type.POISON: + case Type.STEEL: + return 2; + case Type.FIGHTING: + case Type.BUG: + case Type.DARK: + return 0.5; + case Type.DRAGON: + return 0; + default: + return 1; + } + case Type.STELLAR: return 1; - } - case Type.DARK: - switch (attackType) { - case Type.FIGHTING: - case Type.BUG: - case Type.FAIRY: - return 2; - case Type.GHOST: - case Type.DARK: - return 0.5; - case Type.PSYCHIC: - return 0; - default: - return 1; - } - case Type.FAIRY: - switch (attackType) { - case Type.POISON: - case Type.STEEL: - return 2; - case Type.FIGHTING: - case Type.BUG: - case Type.DARK: - return 0.5; - case Type.DRAGON: - return 0; - default: - return 1; - } - case Type.STELLAR: - return 1; } return 1; @@ -295,86 +295,86 @@ export function getTypeDamageMultiplier(attackType: Type, defType: Type): TypeDa export function getTypeDamageMultiplierColor(multiplier: TypeDamageMultiplier, side: "defense" | "offense"): string | undefined { if (side === "offense") { switch (multiplier) { - case 0: - return "#929292"; - case 0.125: - return "#FF5500"; - case 0.25: - return "#FF7400"; - case 0.5: - return "#FE8E00"; - case 1: - return undefined; - case 2: - return "#4AA500"; - case 4: - return "#4BB400"; - case 8: - return "#52C200"; + case 0: + return "#929292"; + case 0.125: + return "#FF5500"; + case 0.25: + return "#FF7400"; + case 0.5: + return "#FE8E00"; + case 1: + return undefined; + case 2: + return "#4AA500"; + case 4: + return "#4BB400"; + case 8: + return "#52C200"; } } else if (side === "defense") { switch (multiplier) { - case 0: - return "#B1B100"; - case 0.125: - return "#2DB4FF"; - case 0.25: - return "#00A4FF"; - case 0.5: - return "#0093FF"; - case 1: - return undefined; - case 2: - return "#FE8E00"; - case 4: - return "#FF7400"; - case 8: - return "#FF5500"; + case 0: + return "#B1B100"; + case 0.125: + return "#2DB4FF"; + case 0.25: + return "#00A4FF"; + case 0.5: + return "#0093FF"; + case 1: + return undefined; + case 2: + return "#FE8E00"; + case 4: + return "#FF7400"; + case 8: + return "#FF5500"; } } } export function getTypeRgb(type: Type): [ integer, integer, integer ] { switch (type) { - case Type.NORMAL: - return [ 168, 168, 120 ]; - case Type.FIGHTING: - return [ 192, 48, 40 ]; - case Type.FLYING: - return [ 168, 144, 240 ]; - case Type.POISON: - return [ 160, 64, 160 ]; - case Type.GROUND: - return [ 224, 192, 104 ]; - case Type.ROCK: - return [ 184, 160, 56 ]; - case Type.BUG: - return [ 168, 184, 32 ]; - case Type.GHOST: - return [ 112, 88, 152 ]; - case Type.STEEL: - return [ 184, 184, 208 ]; - case Type.FIRE: - return [ 240, 128, 48 ]; - case Type.WATER: - return [ 104, 144, 240 ]; - case Type.GRASS: - return [ 120, 200, 80 ]; - case Type.ELECTRIC: - return [ 248, 208, 48 ]; - case Type.PSYCHIC: - return [ 248, 88, 136 ]; - case Type.ICE: - return [ 152, 216, 216 ]; - case Type.DRAGON: - return [ 112, 56, 248 ]; - case Type.DARK: - return [ 112, 88, 72 ]; - case Type.FAIRY: - return [ 232, 136, 200 ]; - case Type.STELLAR: - return [ 255, 255, 255 ]; - default: - return [ 0, 0, 0 ]; + case Type.NORMAL: + return [ 168, 168, 120 ]; + case Type.FIGHTING: + return [ 192, 48, 40 ]; + case Type.FLYING: + return [ 168, 144, 240 ]; + case Type.POISON: + return [ 160, 64, 160 ]; + case Type.GROUND: + return [ 224, 192, 104 ]; + case Type.ROCK: + return [ 184, 160, 56 ]; + case Type.BUG: + return [ 168, 184, 32 ]; + case Type.GHOST: + return [ 112, 88, 152 ]; + case Type.STEEL: + return [ 184, 184, 208 ]; + case Type.FIRE: + return [ 240, 128, 48 ]; + case Type.WATER: + return [ 104, 144, 240 ]; + case Type.GRASS: + return [ 120, 200, 80 ]; + case Type.ELECTRIC: + return [ 248, 208, 48 ]; + case Type.PSYCHIC: + return [ 248, 88, 136 ]; + case Type.ICE: + return [ 152, 216, 216 ]; + case Type.DRAGON: + return [ 112, 56, 248 ]; + case Type.DARK: + return [ 112, 88, 72 ]; + case Type.FAIRY: + return [ 232, 136, 200 ]; + case Type.STELLAR: + return [ 255, 255, 255 ]; + default: + return [ 0, 0, 0 ]; } } diff --git a/src/data/variant.ts b/src/data/variant.ts index b7a01a4be89..13869635f1e 100644 --- a/src/data/variant.ts +++ b/src/data/variant.ts @@ -10,22 +10,22 @@ export const variantColorCache = {}; export function getVariantTint(variant: Variant): integer { switch (variant) { - case 0: - return 0xf8c020; - case 1: - return 0x20f8f0; - case 2: - return 0xe81048; + case 0: + return 0xf8c020; + case 1: + return 0x20f8f0; + case 2: + return 0xe81048; } } export function getVariantIcon(variant: Variant): integer { switch (variant) { - case 0: - return VariantTier.STANDARD; - case 1: - return VariantTier.RARE; - case 2: - return VariantTier.EPIC; + case 0: + return VariantTier.STANDARD; + case 1: + return VariantTier.RARE; + case 2: + return VariantTier.EPIC; } } diff --git a/src/data/weather.ts b/src/data/weather.ts index 8dfa17c4ef8..20c03af77c8 100644 --- a/src/data/weather.ts +++ b/src/data/weather.ts @@ -33,10 +33,10 @@ export class Weather { isImmutable(): boolean { switch (this.weatherType) { - case WeatherType.HEAVY_RAIN: - case WeatherType.HARSH_SUN: - case WeatherType.STRONG_WINDS: - return true; + case WeatherType.HEAVY_RAIN: + case WeatherType.HARSH_SUN: + case WeatherType.STRONG_WINDS: + return true; } return false; @@ -44,9 +44,9 @@ export class Weather { isDamaging(): boolean { switch (this.weatherType) { - case WeatherType.SANDSTORM: - case WeatherType.HAIL: - return true; + case WeatherType.SANDSTORM: + case WeatherType.HAIL: + return true; } return false; @@ -54,10 +54,10 @@ export class Weather { isTypeDamageImmune(type: Type): boolean { switch (this.weatherType) { - case WeatherType.SANDSTORM: - return type === Type.GROUND || type === Type.ROCK || type === Type.STEEL; - case WeatherType.HAIL: - return type === Type.ICE; + case WeatherType.SANDSTORM: + return type === Type.GROUND || type === Type.ROCK || type === Type.STEEL; + case WeatherType.HAIL: + return type === Type.ICE; } return false; @@ -65,24 +65,24 @@ export class Weather { getAttackTypeMultiplier(attackType: Type): number { switch (this.weatherType) { - case WeatherType.SUNNY: - case WeatherType.HARSH_SUN: - if (attackType === Type.FIRE) { - return 1.5; - } - if (attackType === Type.WATER) { - return 0.5; - } - break; - case WeatherType.RAIN: - case WeatherType.HEAVY_RAIN: - if (attackType === Type.FIRE) { - return 0.5; - } - if (attackType === Type.WATER) { - return 1.5; - } - break; + case WeatherType.SUNNY: + case WeatherType.HARSH_SUN: + if (attackType === Type.FIRE) { + return 1.5; + } + if (attackType === Type.WATER) { + return 0.5; + } + break; + case WeatherType.RAIN: + case WeatherType.HEAVY_RAIN: + if (attackType === Type.FIRE) { + return 0.5; + } + if (attackType === Type.WATER) { + return 1.5; + } + break; } return 1; @@ -92,10 +92,10 @@ export class Weather { const moveType = user.getMoveType(move); switch (this.weatherType) { - case WeatherType.HARSH_SUN: - return move instanceof AttackMove && moveType === Type.WATER; - case WeatherType.HEAVY_RAIN: - return move instanceof AttackMove && moveType === Type.FIRE; + case WeatherType.HARSH_SUN: + return move instanceof AttackMove && moveType === Type.WATER; + case WeatherType.HEAVY_RAIN: + return move instanceof AttackMove && moveType === Type.FIRE; } return false; @@ -120,24 +120,24 @@ export class Weather { export function getWeatherStartMessage(weatherType: WeatherType): string | null { switch (weatherType) { - case WeatherType.SUNNY: - return i18next.t("weather:sunnyStartMessage"); - case WeatherType.RAIN: - return i18next.t("weather:rainStartMessage"); - case WeatherType.SANDSTORM: - return i18next.t("weather:sandstormStartMessage"); - case WeatherType.HAIL: - return i18next.t("weather:hailStartMessage"); - case WeatherType.SNOW: - return i18next.t("weather:snowStartMessage"); - case WeatherType.FOG: - return i18next.t("weather:fogStartMessage"); - case WeatherType.HEAVY_RAIN: - return i18next.t("weather:heavyRainStartMessage"); - case WeatherType.HARSH_SUN: - return i18next.t("weather:harshSunStartMessage"); - case WeatherType.STRONG_WINDS: - return i18next.t("weather:strongWindsStartMessage"); + case WeatherType.SUNNY: + return i18next.t("weather:sunnyStartMessage"); + case WeatherType.RAIN: + return i18next.t("weather:rainStartMessage"); + case WeatherType.SANDSTORM: + return i18next.t("weather:sandstormStartMessage"); + case WeatherType.HAIL: + return i18next.t("weather:hailStartMessage"); + case WeatherType.SNOW: + return i18next.t("weather:snowStartMessage"); + case WeatherType.FOG: + return i18next.t("weather:fogStartMessage"); + case WeatherType.HEAVY_RAIN: + return i18next.t("weather:heavyRainStartMessage"); + case WeatherType.HARSH_SUN: + return i18next.t("weather:harshSunStartMessage"); + case WeatherType.STRONG_WINDS: + return i18next.t("weather:strongWindsStartMessage"); } return null; @@ -145,24 +145,24 @@ export function getWeatherStartMessage(weatherType: WeatherType): string | null export function getWeatherLapseMessage(weatherType: WeatherType): string | null { switch (weatherType) { - case WeatherType.SUNNY: - return i18next.t("weather:sunnyLapseMessage"); - case WeatherType.RAIN: - return i18next.t("weather:rainLapseMessage"); - case WeatherType.SANDSTORM: - return i18next.t("weather:sandstormLapseMessage"); - case WeatherType.HAIL: - return i18next.t("weather:hailLapseMessage"); - case WeatherType.SNOW: - return i18next.t("weather:snowLapseMessage"); - case WeatherType.FOG: - return i18next.t("weather:fogLapseMessage"); - case WeatherType.HEAVY_RAIN: - return i18next.t("weather:heavyRainLapseMessage"); - case WeatherType.HARSH_SUN: - return i18next.t("weather:harshSunLapseMessage"); - case WeatherType.STRONG_WINDS: - return i18next.t("weather:strongWindsLapseMessage"); + case WeatherType.SUNNY: + return i18next.t("weather:sunnyLapseMessage"); + case WeatherType.RAIN: + return i18next.t("weather:rainLapseMessage"); + case WeatherType.SANDSTORM: + return i18next.t("weather:sandstormLapseMessage"); + case WeatherType.HAIL: + return i18next.t("weather:hailLapseMessage"); + case WeatherType.SNOW: + return i18next.t("weather:snowLapseMessage"); + case WeatherType.FOG: + return i18next.t("weather:fogLapseMessage"); + case WeatherType.HEAVY_RAIN: + return i18next.t("weather:heavyRainLapseMessage"); + case WeatherType.HARSH_SUN: + return i18next.t("weather:harshSunLapseMessage"); + case WeatherType.STRONG_WINDS: + return i18next.t("weather:strongWindsLapseMessage"); } return null; @@ -170,10 +170,10 @@ export function getWeatherLapseMessage(weatherType: WeatherType): string | null export function getWeatherDamageMessage(weatherType: WeatherType, pokemon: Pokemon): string | null { switch (weatherType) { - case WeatherType.SANDSTORM: - return i18next.t("weather:sandstormDamageMessage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }); - case WeatherType.HAIL: - return i18next.t("weather:hailDamageMessage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }); + case WeatherType.SANDSTORM: + return i18next.t("weather:sandstormDamageMessage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }); + case WeatherType.HAIL: + return i18next.t("weather:hailDamageMessage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }); } return null; @@ -181,24 +181,24 @@ export function getWeatherDamageMessage(weatherType: WeatherType, pokemon: Pokem export function getWeatherClearMessage(weatherType: WeatherType): string | null { switch (weatherType) { - case WeatherType.SUNNY: - return i18next.t("weather:sunnyClearMessage"); - case WeatherType.RAIN: - return i18next.t("weather:rainClearMessage"); - case WeatherType.SANDSTORM: - return i18next.t("weather:sandstormClearMessage"); - case WeatherType.HAIL: - return i18next.t("weather:hailClearMessage"); - case WeatherType.SNOW: - return i18next.t("weather:snowClearMessage"); - case WeatherType.FOG: - return i18next.t("weather:fogClearMessage"); - case WeatherType.HEAVY_RAIN: - return i18next.t("weather:heavyRainClearMessage"); - case WeatherType.HARSH_SUN: - return i18next.t("weather:harshSunClearMessage"); - case WeatherType.STRONG_WINDS: - return i18next.t("weather:strongWindsClearMessage"); + case WeatherType.SUNNY: + return i18next.t("weather:sunnyClearMessage"); + case WeatherType.RAIN: + return i18next.t("weather:rainClearMessage"); + case WeatherType.SANDSTORM: + return i18next.t("weather:sandstormClearMessage"); + case WeatherType.HAIL: + return i18next.t("weather:hailClearMessage"); + case WeatherType.SNOW: + return i18next.t("weather:snowClearMessage"); + case WeatherType.FOG: + return i18next.t("weather:fogClearMessage"); + case WeatherType.HEAVY_RAIN: + return i18next.t("weather:heavyRainClearMessage"); + case WeatherType.HARSH_SUN: + return i18next.t("weather:harshSunClearMessage"); + case WeatherType.STRONG_WINDS: + return i18next.t("weather:strongWindsClearMessage"); } return null; @@ -206,33 +206,33 @@ export function getWeatherClearMessage(weatherType: WeatherType): string | null export function getTerrainStartMessage(terrainType: TerrainType): string | null { switch (terrainType) { - case TerrainType.MISTY: - return i18next.t("terrain:mistyStartMessage"); - case TerrainType.ELECTRIC: - return i18next.t("terrain:electricStartMessage"); - case TerrainType.GRASSY: - return i18next.t("terrain:grassyStartMessage"); - case TerrainType.PSYCHIC: - return i18next.t("terrain:psychicStartMessage"); - default: - console.warn("getTerrainStartMessage not defined. Using default null"); - return null; + case TerrainType.MISTY: + return i18next.t("terrain:mistyStartMessage"); + case TerrainType.ELECTRIC: + return i18next.t("terrain:electricStartMessage"); + case TerrainType.GRASSY: + return i18next.t("terrain:grassyStartMessage"); + case TerrainType.PSYCHIC: + return i18next.t("terrain:psychicStartMessage"); + default: + console.warn("getTerrainStartMessage not defined. Using default null"); + return null; } } export function getTerrainClearMessage(terrainType: TerrainType): string | null { switch (terrainType) { - case TerrainType.MISTY: - return i18next.t("terrain:mistyClearMessage"); - case TerrainType.ELECTRIC: - return i18next.t("terrain:electricClearMessage"); - case TerrainType.GRASSY: - return i18next.t("terrain:grassyClearMessage"); - case TerrainType.PSYCHIC: - return i18next.t("terrain:psychicClearMessage"); - default: - console.warn("getTerrainClearMessage not defined. Using default null"); - return null; + case TerrainType.MISTY: + return i18next.t("terrain:mistyClearMessage"); + case TerrainType.ELECTRIC: + return i18next.t("terrain:electricClearMessage"); + case TerrainType.GRASSY: + return i18next.t("terrain:grassyClearMessage"); + case TerrainType.PSYCHIC: + return i18next.t("terrain:psychicClearMessage"); + default: + console.warn("getTerrainClearMessage not defined. Using default null"); + return null; } } @@ -252,126 +252,126 @@ export function getRandomWeatherType(arena: any /* Importing from arena causes a let weatherPool: WeatherPoolEntry[] = []; const hasSun = arena.getTimeOfDay() < 2; switch (arena.biomeType) { - case Biome.GRASS: - weatherPool = [ - { weatherType: WeatherType.NONE, weight: 7 } - ]; - if (hasSun) { - weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 3 }); - } - break; - case Biome.TALL_GRASS: - weatherPool = [ - { weatherType: WeatherType.NONE, weight: 8 }, - { weatherType: WeatherType.RAIN, weight: 5 }, - ]; - if (hasSun) { - weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 8 }); - } - break; - case Biome.FOREST: - weatherPool = [ - { weatherType: WeatherType.NONE, weight: 8 }, - { weatherType: WeatherType.RAIN, weight: 5 } - ]; - break; - case Biome.SEA: - weatherPool = [ - { weatherType: WeatherType.NONE, weight: 3 }, - { weatherType: WeatherType.RAIN, weight: 12 } - ]; - break; - case Biome.SWAMP: - weatherPool = [ - { weatherType: WeatherType.NONE, weight: 3 }, - { weatherType: WeatherType.RAIN, weight: 4 }, - { weatherType: WeatherType.FOG, weight: 1 } - ]; - break; - case Biome.BEACH: - weatherPool = [ - { weatherType: WeatherType.NONE, weight: 8 }, - { weatherType: WeatherType.RAIN, weight: 3 } - ]; - if (hasSun) { - weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 5 }); - } - break; - case Biome.LAKE: - weatherPool = [ - { weatherType: WeatherType.NONE, weight: 10 }, - { weatherType: WeatherType.RAIN, weight: 5 }, - { weatherType: WeatherType.FOG, weight: 1 } - ]; - break; - case Biome.SEABED: - weatherPool = [ - { weatherType: WeatherType.RAIN, weight: 1 } - ]; - break; - case Biome.BADLANDS: - weatherPool = [ - { weatherType: WeatherType.NONE, weight: 8 }, - { weatherType: WeatherType.SANDSTORM, weight: 2 } - ]; - if (hasSun) { - weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 5 }); - } - break; - case Biome.DESERT: - weatherPool = [ - { weatherType: WeatherType.SANDSTORM, weight: 2 } - ]; - if (hasSun) { - weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 2 }); - } - break; - case Biome.ICE_CAVE: - weatherPool = [ - { weatherType: WeatherType.NONE, weight: 3 }, - { weatherType: WeatherType.SNOW, weight: 4 }, - { weatherType: WeatherType.HAIL, weight: 1 } - ]; - break; - case Biome.MEADOW: - weatherPool = [ - { weatherType: WeatherType.NONE, weight: 2 } - ]; - if (hasSun) { - weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 2 }); - } - case Biome.VOLCANO: - weatherPool = [ - { weatherType: hasSun ? WeatherType.SUNNY : WeatherType.NONE, weight: 1 } - ]; - break; - case Biome.GRAVEYARD: - weatherPool = [ - { weatherType: WeatherType.NONE, weight: 3 }, - { weatherType: WeatherType.FOG, weight: 1 } - ]; - break; - case Biome.JUNGLE: - weatherPool = [ - { weatherType: WeatherType.NONE, weight: 8 }, - { weatherType: WeatherType.RAIN, weight: 2 } - ]; - break; - case Biome.SNOWY_FOREST: - weatherPool = [ - { weatherType: WeatherType.SNOW, weight: 7 }, - { weatherType: WeatherType.HAIL, weight: 1 } - ]; - break; - case Biome.ISLAND: - weatherPool = [ - { weatherType: WeatherType.NONE, weight: 5 }, - { weatherType: WeatherType.RAIN, weight: 1 }, - ]; - if (hasSun) { - weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 2 }); - } - break; + case Biome.GRASS: + weatherPool = [ + { weatherType: WeatherType.NONE, weight: 7 } + ]; + if (hasSun) { + weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 3 }); + } + break; + case Biome.TALL_GRASS: + weatherPool = [ + { weatherType: WeatherType.NONE, weight: 8 }, + { weatherType: WeatherType.RAIN, weight: 5 }, + ]; + if (hasSun) { + weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 8 }); + } + break; + case Biome.FOREST: + weatherPool = [ + { weatherType: WeatherType.NONE, weight: 8 }, + { weatherType: WeatherType.RAIN, weight: 5 } + ]; + break; + case Biome.SEA: + weatherPool = [ + { weatherType: WeatherType.NONE, weight: 3 }, + { weatherType: WeatherType.RAIN, weight: 12 } + ]; + break; + case Biome.SWAMP: + weatherPool = [ + { weatherType: WeatherType.NONE, weight: 3 }, + { weatherType: WeatherType.RAIN, weight: 4 }, + { weatherType: WeatherType.FOG, weight: 1 } + ]; + break; + case Biome.BEACH: + weatherPool = [ + { weatherType: WeatherType.NONE, weight: 8 }, + { weatherType: WeatherType.RAIN, weight: 3 } + ]; + if (hasSun) { + weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 5 }); + } + break; + case Biome.LAKE: + weatherPool = [ + { weatherType: WeatherType.NONE, weight: 10 }, + { weatherType: WeatherType.RAIN, weight: 5 }, + { weatherType: WeatherType.FOG, weight: 1 } + ]; + break; + case Biome.SEABED: + weatherPool = [ + { weatherType: WeatherType.RAIN, weight: 1 } + ]; + break; + case Biome.BADLANDS: + weatherPool = [ + { weatherType: WeatherType.NONE, weight: 8 }, + { weatherType: WeatherType.SANDSTORM, weight: 2 } + ]; + if (hasSun) { + weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 5 }); + } + break; + case Biome.DESERT: + weatherPool = [ + { weatherType: WeatherType.SANDSTORM, weight: 2 } + ]; + if (hasSun) { + weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 2 }); + } + break; + case Biome.ICE_CAVE: + weatherPool = [ + { weatherType: WeatherType.NONE, weight: 3 }, + { weatherType: WeatherType.SNOW, weight: 4 }, + { weatherType: WeatherType.HAIL, weight: 1 } + ]; + break; + case Biome.MEADOW: + weatherPool = [ + { weatherType: WeatherType.NONE, weight: 2 } + ]; + if (hasSun) { + weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 2 }); + } + case Biome.VOLCANO: + weatherPool = [ + { weatherType: hasSun ? WeatherType.SUNNY : WeatherType.NONE, weight: 1 } + ]; + break; + case Biome.GRAVEYARD: + weatherPool = [ + { weatherType: WeatherType.NONE, weight: 3 }, + { weatherType: WeatherType.FOG, weight: 1 } + ]; + break; + case Biome.JUNGLE: + weatherPool = [ + { weatherType: WeatherType.NONE, weight: 8 }, + { weatherType: WeatherType.RAIN, weight: 2 } + ]; + break; + case Biome.SNOWY_FOREST: + weatherPool = [ + { weatherType: WeatherType.SNOW, weight: 7 }, + { weatherType: WeatherType.HAIL, weight: 1 } + ]; + break; + case Biome.ISLAND: + weatherPool = [ + { weatherType: WeatherType.NONE, weight: 5 }, + { weatherType: WeatherType.RAIN, weight: 1 }, + ]; + if (hasSun) { + weatherPool.push({ weatherType: WeatherType.SUNNY, weight: 2 }); + } + break; } if (weatherPool.length > 1) { diff --git a/src/field/anims.ts b/src/field/anims.ts index 52a15aa4f20..c73c52027c5 100644 --- a/src/field/anims.ts +++ b/src/field/anims.ts @@ -4,21 +4,21 @@ import * as Utils from "../utils"; export function addPokeballOpenParticles(scene: BattleScene, x: number, y: number, pokeballType: PokeballType): void { switch (pokeballType) { - case PokeballType.POKEBALL: - doDefaultPbOpenParticles(scene, x, y, 48); - break; - case PokeballType.GREAT_BALL: - doDefaultPbOpenParticles(scene, x, y, 96); - break; - case PokeballType.ULTRA_BALL: - doUbOpenParticles(scene, x, y, 8); - break; - case PokeballType.ROGUE_BALL: - doUbOpenParticles(scene, x, y, 10); - break; - case PokeballType.MASTER_BALL: - doMbOpenParticles(scene, x, y); - break; + case PokeballType.POKEBALL: + doDefaultPbOpenParticles(scene, x, y, 48); + break; + case PokeballType.GREAT_BALL: + doDefaultPbOpenParticles(scene, x, y, 96); + break; + case PokeballType.ULTRA_BALL: + doUbOpenParticles(scene, x, y, 8); + break; + case PokeballType.ROGUE_BALL: + doUbOpenParticles(scene, x, y, 10); + break; + case PokeballType.MASTER_BALL: + doMbOpenParticles(scene, x, y); + break; } } diff --git a/src/field/arena.ts b/src/field/arena.ts index ad1846884fc..7bfdf9a0000 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -129,18 +129,18 @@ export class Arena { if (ret.subLegendary || ret.legendary || ret.mythical) { switch (true) { - case (ret.baseTotal >= 720): - regen = level < 90; - break; - case (ret.baseTotal >= 670): - regen = level < 70; - break; - case (ret.baseTotal >= 580): - regen = level < 50; - break; - default: - regen = level < 30; - break; + case (ret.baseTotal >= 720): + regen = level < 90; + break; + case (ret.baseTotal >= 670): + regen = level < 70; + break; + case (ret.baseTotal >= 580): + regen = level < 50; + break; + default: + regen = level < 30; + break; } } } @@ -177,41 +177,41 @@ export class Arena { getSpeciesFormIndex(species: PokemonSpecies): integer { switch (species.speciesId) { - case Species.BURMY: - case Species.WORMADAM: - switch (this.biomeType) { - case Biome.BEACH: - return 1; - case Biome.SLUM: - return 2; - } - break; - case Species.ROTOM: - switch (this.biomeType) { - case Biome.VOLCANO: - return 1; - case Biome.SEA: - return 2; - case Biome.ICE_CAVE: - return 3; - case Biome.MOUNTAIN: - return 4; - case Biome.TALL_GRASS: - return 5; - } - break; - case Species.LYCANROC: - const timeOfDay = this.getTimeOfDay(); - switch (timeOfDay) { - case TimeOfDay.DAY: - case TimeOfDay.DAWN: - return 0; - case TimeOfDay.DUSK: - return 2; - case TimeOfDay.NIGHT: - return 1; - } - break; + case Species.BURMY: + case Species.WORMADAM: + switch (this.biomeType) { + case Biome.BEACH: + return 1; + case Biome.SLUM: + return 2; + } + break; + case Species.ROTOM: + switch (this.biomeType) { + case Biome.VOLCANO: + return 1; + case Biome.SEA: + return 2; + case Biome.ICE_CAVE: + return 3; + case Biome.MOUNTAIN: + return 4; + case Biome.TALL_GRASS: + return 5; + } + break; + case Species.LYCANROC: + const timeOfDay = this.getTimeOfDay(); + switch (timeOfDay) { + case TimeOfDay.DAY: + case TimeOfDay.DAWN: + return 0; + case TimeOfDay.DUSK: + return 2; + case TimeOfDay.NIGHT: + return 1; + } + break; } return 0; @@ -219,70 +219,70 @@ export class Arena { getTypeForBiome() { switch (this.biomeType) { - case Biome.TOWN: - case Biome.PLAINS: - case Biome.METROPOLIS: - return Type.NORMAL; - case Biome.GRASS: - case Biome.TALL_GRASS: - return Type.GRASS; - case Biome.FOREST: - case Biome.JUNGLE: - return Type.BUG; - case Biome.SLUM: - case Biome.SWAMP: - return Type.POISON; - case Biome.SEA: - case Biome.BEACH: - case Biome.LAKE: - case Biome.SEABED: - return Type.WATER; - case Biome.MOUNTAIN: - return Type.FLYING; - case Biome.BADLANDS: - return Type.GROUND; - case Biome.CAVE: - case Biome.DESERT: - return Type.ROCK; - case Biome.ICE_CAVE: - case Biome.SNOWY_FOREST: - return Type.ICE; - case Biome.MEADOW: - case Biome.FAIRY_CAVE: - case Biome.ISLAND: - return Type.FAIRY; - case Biome.POWER_PLANT: - return Type.ELECTRIC; - case Biome.VOLCANO: - return Type.FIRE; - case Biome.GRAVEYARD: - case Biome.TEMPLE: - return Type.GHOST; - case Biome.DOJO: - case Biome.CONSTRUCTION_SITE: - return Type.FIGHTING; - case Biome.FACTORY: - case Biome.LABORATORY: - return Type.STEEL; - case Biome.RUINS: - case Biome.SPACE: - return Type.PSYCHIC; - case Biome.WASTELAND: - case Biome.END: - return Type.DRAGON; - case Biome.ABYSS: - return Type.DARK; - default: - return Type.UNKNOWN; + case Biome.TOWN: + case Biome.PLAINS: + case Biome.METROPOLIS: + return Type.NORMAL; + case Biome.GRASS: + case Biome.TALL_GRASS: + return Type.GRASS; + case Biome.FOREST: + case Biome.JUNGLE: + return Type.BUG; + case Biome.SLUM: + case Biome.SWAMP: + return Type.POISON; + case Biome.SEA: + case Biome.BEACH: + case Biome.LAKE: + case Biome.SEABED: + return Type.WATER; + case Biome.MOUNTAIN: + return Type.FLYING; + case Biome.BADLANDS: + return Type.GROUND; + case Biome.CAVE: + case Biome.DESERT: + return Type.ROCK; + case Biome.ICE_CAVE: + case Biome.SNOWY_FOREST: + return Type.ICE; + case Biome.MEADOW: + case Biome.FAIRY_CAVE: + case Biome.ISLAND: + return Type.FAIRY; + case Biome.POWER_PLANT: + return Type.ELECTRIC; + case Biome.VOLCANO: + return Type.FIRE; + case Biome.GRAVEYARD: + case Biome.TEMPLE: + return Type.GHOST; + case Biome.DOJO: + case Biome.CONSTRUCTION_SITE: + return Type.FIGHTING; + case Biome.FACTORY: + case Biome.LABORATORY: + return Type.STEEL; + case Biome.RUINS: + case Biome.SPACE: + return Type.PSYCHIC; + case Biome.WASTELAND: + case Biome.END: + return Type.DRAGON; + case Biome.ABYSS: + return Type.DARK; + default: + return Type.UNKNOWN; } } getBgTerrainColorRatioForBiome(): number { switch (this.biomeType) { - case Biome.SPACE: - return 1; - case Biome.END: - return 0; + case Biome.SPACE: + return 1; + case Biome.END: + return 0; } return 131 / 180; @@ -424,52 +424,52 @@ export class Arena { */ getTrainerChance(): integer { switch (this.biomeType) { - case Biome.METROPOLIS: - return 2; - case Biome.SLUM: - case Biome.BEACH: - case Biome.DOJO: - case Biome.CONSTRUCTION_SITE: - return 4; - case Biome.PLAINS: - case Biome.GRASS: - case Biome.LAKE: - case Biome.CAVE: - return 6; - case Biome.TALL_GRASS: - case Biome.FOREST: - case Biome.SEA: - case Biome.SWAMP: - case Biome.MOUNTAIN: - case Biome.BADLANDS: - case Biome.DESERT: - case Biome.MEADOW: - case Biome.POWER_PLANT: - case Biome.GRAVEYARD: - case Biome.FACTORY: - case Biome.SNOWY_FOREST: - return 8; - case Biome.ICE_CAVE: - case Biome.VOLCANO: - case Biome.RUINS: - case Biome.WASTELAND: - case Biome.JUNGLE: - case Biome.FAIRY_CAVE: - return 12; - case Biome.SEABED: - case Biome.ABYSS: - case Biome.SPACE: - case Biome.TEMPLE: - return 16; - default: - return 0; + case Biome.METROPOLIS: + return 2; + case Biome.SLUM: + case Biome.BEACH: + case Biome.DOJO: + case Biome.CONSTRUCTION_SITE: + return 4; + case Biome.PLAINS: + case Biome.GRASS: + case Biome.LAKE: + case Biome.CAVE: + return 6; + case Biome.TALL_GRASS: + case Biome.FOREST: + case Biome.SEA: + case Biome.SWAMP: + case Biome.MOUNTAIN: + case Biome.BADLANDS: + case Biome.DESERT: + case Biome.MEADOW: + case Biome.POWER_PLANT: + case Biome.GRAVEYARD: + case Biome.FACTORY: + case Biome.SNOWY_FOREST: + return 8; + case Biome.ICE_CAVE: + case Biome.VOLCANO: + case Biome.RUINS: + case Biome.WASTELAND: + case Biome.JUNGLE: + case Biome.FAIRY_CAVE: + return 12; + case Biome.SEABED: + case Biome.ABYSS: + case Biome.SPACE: + case Biome.TEMPLE: + return 16; + default: + return 0; } } getTimeOfDay(): TimeOfDay { switch (this.biomeType) { - case Biome.ABYSS: - return TimeOfDay.NIGHT; + case Biome.ABYSS: + return TimeOfDay.NIGHT; } const waveCycle = ((this.scene.currentBattle?.waveIndex || 0) + this.scene.waveCycleOffset) % 40; @@ -491,35 +491,35 @@ export class Arena { isOutside(): boolean { switch (this.biomeType) { - case Biome.SEABED: - case Biome.CAVE: - case Biome.ICE_CAVE: - case Biome.POWER_PLANT: - case Biome.DOJO: - case Biome.FACTORY: - case Biome.ABYSS: - case Biome.FAIRY_CAVE: - case Biome.TEMPLE: - case Biome.LABORATORY: - return false; - default: - return true; + case Biome.SEABED: + case Biome.CAVE: + case Biome.ICE_CAVE: + case Biome.POWER_PLANT: + case Biome.DOJO: + case Biome.FACTORY: + case Biome.ABYSS: + case Biome.FAIRY_CAVE: + case Biome.TEMPLE: + case Biome.LABORATORY: + return false; + default: + return true; } } overrideTint(): [integer, integer, integer] { switch (Overrides.ARENA_TINT_OVERRIDE) { - case TimeOfDay.DUSK: - return [ 98, 48, 73 ].map(c => Math.round((c + 128) / 2)) as [integer, integer, integer]; - break; - case (TimeOfDay.NIGHT): - return [ 64, 64, 64 ]; - break; - case TimeOfDay.DAWN: - case TimeOfDay.DAY: - default: - return [ 128, 128, 128 ]; - break; + case TimeOfDay.DUSK: + return [ 98, 48, 73 ].map(c => Math.round((c + 128) / 2)) as [integer, integer, integer]; + break; + case (TimeOfDay.NIGHT): + return [ 64, 64, 64 ]; + break; + case TimeOfDay.DAWN: + case TimeOfDay.DAY: + default: + return [ 128, 128, 128 ]; + break; } } @@ -528,10 +528,10 @@ export class Arena { return this.overrideTint(); } switch (this.biomeType) { - case Biome.ABYSS: - return [ 64, 64, 64 ]; - default: - return [ 128, 128, 128 ]; + case Biome.ABYSS: + return [ 64, 64, 64 ]; + default: + return [ 128, 128, 128 ]; } } @@ -544,8 +544,8 @@ export class Arena { } switch (this.biomeType) { - default: - return [ 98, 48, 73 ].map(c => Math.round((c + 128) / 2)) as [integer, integer, integer]; + default: + return [ 98, 48, 73 ].map(c => Math.round((c + 128) / 2)) as [integer, integer, integer]; } } @@ -554,10 +554,10 @@ export class Arena { return this.overrideTint(); } switch (this.biomeType) { - case Biome.ABYSS: - case Biome.SPACE: - case Biome.END: - return this.getDayTint(); + case Biome.ABYSS: + case Biome.SPACE: + case Biome.END: + return this.getDayTint(); } if (!this.isOutside()) { @@ -565,8 +565,8 @@ export class Arena { } switch (this.biomeType) { - default: - return [ 48, 48, 98 ]; + default: + return [ 48, 48, 98 ]; } } @@ -747,77 +747,77 @@ export class Arena { getBgmLoopPoint(): number { switch (this.biomeType) { - case Biome.TOWN: - return 7.288; - case Biome.PLAINS: - return 17.485; - case Biome.GRASS: - return 1.995; - case Biome.TALL_GRASS: - return 9.608; - case Biome.METROPOLIS: - return 141.470; - case Biome.FOREST: - return 4.294; - case Biome.SEA: - return 0.024; - case Biome.SWAMP: - return 4.461; - case Biome.BEACH: - return 3.462; - case Biome.LAKE: - return 7.215; - case Biome.SEABED: - return 2.600; - case Biome.MOUNTAIN: - return 4.018; - case Biome.BADLANDS: - return 17.790; - case Biome.CAVE: - return 14.240; - case Biome.DESERT: - return 1.143; - case Biome.ICE_CAVE: - return 0.000; - case Biome.MEADOW: - return 3.891; - case Biome.POWER_PLANT: - return 9.447; - case Biome.VOLCANO: - return 17.637; - case Biome.GRAVEYARD: - return 3.232; - case Biome.DOJO: - return 6.205; - case Biome.FACTORY: - return 4.985; - case Biome.RUINS: - return 0.000; - case Biome.WASTELAND: - return 6.336; - case Biome.ABYSS: - return 5.130; - case Biome.SPACE: - return 20.036; - case Biome.CONSTRUCTION_SITE: - return 1.222; - case Biome.JUNGLE: - return 0.000; - case Biome.FAIRY_CAVE: - return 4.542; - case Biome.TEMPLE: - return 2.547; - case Biome.ISLAND: - return 2.751; - case Biome.LABORATORY: - return 114.862; - case Biome.SLUM: - return 0.000; - case Biome.SNOWY_FOREST: - return 3.047; - default: - console.warn(`missing bgm loop-point for biome "${Biome[this.biomeType]}" (=${this.biomeType})`); - return 0; + case Biome.TOWN: + return 7.288; + case Biome.PLAINS: + return 17.485; + case Biome.GRASS: + return 1.995; + case Biome.TALL_GRASS: + return 9.608; + case Biome.METROPOLIS: + return 141.470; + case Biome.FOREST: + return 4.294; + case Biome.SEA: + return 0.024; + case Biome.SWAMP: + return 4.461; + case Biome.BEACH: + return 3.462; + case Biome.LAKE: + return 7.215; + case Biome.SEABED: + return 2.600; + case Biome.MOUNTAIN: + return 4.018; + case Biome.BADLANDS: + return 17.790; + case Biome.CAVE: + return 14.240; + case Biome.DESERT: + return 1.143; + case Biome.ICE_CAVE: + return 0.000; + case Biome.MEADOW: + return 3.891; + case Biome.POWER_PLANT: + return 9.447; + case Biome.VOLCANO: + return 17.637; + case Biome.GRAVEYARD: + return 3.232; + case Biome.DOJO: + return 6.205; + case Biome.FACTORY: + return 4.985; + case Biome.RUINS: + return 0.000; + case Biome.WASTELAND: + return 6.336; + case Biome.ABYSS: + return 5.130; + case Biome.SPACE: + return 20.036; + case Biome.CONSTRUCTION_SITE: + return 1.222; + case Biome.JUNGLE: + return 0.000; + case Biome.FAIRY_CAVE: + return 4.542; + case Biome.TEMPLE: + return 2.547; + case Biome.ISLAND: + return 2.751; + case Biome.LABORATORY: + return 114.862; + case Biome.SLUM: + return 0.000; + case Biome.SNOWY_FOREST: + return 3.047; + default: + console.warn(`missing bgm loop-point for biome "${Biome[this.biomeType]}" (=${this.biomeType})`); + return 0; } } } @@ -828,32 +828,32 @@ export function getBiomeKey(biome: Biome): string { export function getBiomeHasProps(biomeType: Biome): boolean { switch (biomeType) { - case Biome.METROPOLIS: - case Biome.BEACH: - case Biome.LAKE: - case Biome.SEABED: - case Biome.MOUNTAIN: - case Biome.BADLANDS: - case Biome.CAVE: - case Biome.DESERT: - case Biome.ICE_CAVE: - case Biome.MEADOW: - case Biome.POWER_PLANT: - case Biome.VOLCANO: - case Biome.GRAVEYARD: - case Biome.FACTORY: - case Biome.RUINS: - case Biome.WASTELAND: - case Biome.ABYSS: - case Biome.CONSTRUCTION_SITE: - case Biome.JUNGLE: - case Biome.FAIRY_CAVE: - case Biome.TEMPLE: - case Biome.SNOWY_FOREST: - case Biome.ISLAND: - case Biome.LABORATORY: - case Biome.END: - return true; + case Biome.METROPOLIS: + case Biome.BEACH: + case Biome.LAKE: + case Biome.SEABED: + case Biome.MOUNTAIN: + case Biome.BADLANDS: + case Biome.CAVE: + case Biome.DESERT: + case Biome.ICE_CAVE: + case Biome.MEADOW: + case Biome.POWER_PLANT: + case Biome.VOLCANO: + case Biome.GRAVEYARD: + case Biome.FACTORY: + case Biome.RUINS: + case Biome.WASTELAND: + case Biome.ABYSS: + case Biome.CONSTRUCTION_SITE: + case Biome.JUNGLE: + case Biome.FAIRY_CAVE: + case Biome.TEMPLE: + case Biome.SNOWY_FOREST: + case Biome.ISLAND: + case Biome.LABORATORY: + case Biome.END: + return true; } return false; diff --git a/src/field/damage-number-handler.ts b/src/field/damage-number-handler.ts index ae0692da342..4ddcd2d3ee7 100644 --- a/src/field/damage-number-handler.ts +++ b/src/field/damage-number-handler.ts @@ -29,21 +29,21 @@ export default class DamageNumberHandler { let [ textColor, shadowColor ] : TextAndShadowArr = [ null, null ]; switch (result) { - case HitResult.SUPER_EFFECTIVE: - [ textColor, shadowColor ] = [ "#f8d030", "#b8a038" ]; - break; - case HitResult.NOT_VERY_EFFECTIVE: - [ textColor, shadowColor ] = [ "#f08030", "#c03028" ]; - break; - case HitResult.ONE_HIT_KO: - [ textColor, shadowColor ] = [ "#a040a0", "#483850" ]; - break; - case HitResult.HEAL: - [ textColor, shadowColor ] = [ "#78c850", "#588040" ]; - break; - default: - [ textColor, shadowColor ] = [ "#ffffff", "#636363" ]; - break; + case HitResult.SUPER_EFFECTIVE: + [ textColor, shadowColor ] = [ "#f8d030", "#b8a038" ]; + break; + case HitResult.NOT_VERY_EFFECTIVE: + [ textColor, shadowColor ] = [ "#f08030", "#c03028" ]; + break; + case HitResult.ONE_HIT_KO: + [ textColor, shadowColor ] = [ "#a040a0", "#483850" ]; + break; + case HitResult.HEAL: + [ textColor, shadowColor ] = [ "#78c850", "#588040" ]; + break; + default: + [ textColor, shadowColor ] = [ "#ffffff", "#636363" ]; + break; } if (textColor) { diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 9aaadf29657..0afbbf105e2 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -680,12 +680,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { getFieldPositionOffset(): [ number, number ] { switch (this.fieldPosition) { - case FieldPosition.CENTER: - return [ 0, 0 ]; - case FieldPosition.LEFT: - return [ -32, -8 ]; - case FieldPosition.RIGHT: - return [ 32, 0 ]; + case FieldPosition.CENTER: + return [ 0, 0 ]; + case FieldPosition.LEFT: + return [ -32, -8 ]; + case FieldPosition.RIGHT: + return [ 32, 0 ]; } } @@ -917,39 +917,39 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { let ret = statValue.value * this.getStatStageMultiplier(stat, opponent, move, ignoreOppAbility, isCritical, simulated); switch (stat) { - case Stat.ATK: - if (this.getTag(BattlerTagType.SLOW_START)) { - ret >>= 1; - } - break; - case Stat.DEF: - if (this.isOfType(Type.ICE) && this.scene.arena.weather?.weatherType === WeatherType.SNOW) { - ret *= 1.5; - } - break; - case Stat.SPATK: - break; - case Stat.SPDEF: - if (this.isOfType(Type.ROCK) && this.scene.arena.weather?.weatherType === WeatherType.SANDSTORM) { - ret *= 1.5; - } - break; - case Stat.SPD: - const side = this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; - if (this.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, side)) { - ret *= 2; - } - if (this.scene.arena.getTagOnSide(ArenaTagType.GRASS_WATER_PLEDGE, side)) { - ret >>= 2; - } + case Stat.ATK: + if (this.getTag(BattlerTagType.SLOW_START)) { + ret >>= 1; + } + break; + case Stat.DEF: + if (this.isOfType(Type.ICE) && this.scene.arena.weather?.weatherType === WeatherType.SNOW) { + ret *= 1.5; + } + break; + case Stat.SPATK: + break; + case Stat.SPDEF: + if (this.isOfType(Type.ROCK) && this.scene.arena.weather?.weatherType === WeatherType.SANDSTORM) { + ret *= 1.5; + } + break; + case Stat.SPD: + const side = this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; + if (this.scene.arena.getTagOnSide(ArenaTagType.TAILWIND, side)) { + ret *= 2; + } + if (this.scene.arena.getTagOnSide(ArenaTagType.GRASS_WATER_PLEDGE, side)) { + ret >>= 2; + } - if (this.getTag(BattlerTagType.SLOW_START)) { - ret >>= 1; - } - if (this.status && this.status.effect === StatusEffect.PARALYSIS) { - ret >>= 1; - } - break; + if (this.getTag(BattlerTagType.SLOW_START)) { + ret >>= 1; + } + if (this.status && this.status.effect === StatusEffect.PARALYSIS) { + ret >>= 1; + } + break; } const highestStatBoost = this.findTag(t => t instanceof HighestStatBoostTag && (t as HighestStatBoostTag).stat === stat) as HighestStatBoostTag; @@ -2338,14 +2338,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (opponent) { if (isCritical) { switch (stat) { - case Stat.ATK: - case Stat.SPATK: - statStage.value = Math.max(statStage.value, 0); - break; - case Stat.DEF: - case Stat.SPDEF: - statStage.value = Math.min(statStage.value, 0); - break; + case Stat.ATK: + case Stat.SPATK: + statStage.value = Math.max(statStage.value, 0); + break; + case Stat.DEF: + case Stat.SPDEF: + statStage.value = Math.min(statStage.value, 0); + break; } } if (!ignoreOppAbility) { @@ -2795,15 +2795,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // want to include is.Fainted() in case multi hit move ends early, still want to render message if (source.turnData.hitsLeft === 1 || this.isFainted()) { switch (result) { - case HitResult.SUPER_EFFECTIVE: - this.scene.queueMessage(i18next.t("battle:hitResultSuperEffective")); - break; - case HitResult.NOT_VERY_EFFECTIVE: - this.scene.queueMessage(i18next.t("battle:hitResultNotVeryEffective")); - break; - case HitResult.ONE_HIT_KO: - this.scene.queueMessage(i18next.t("battle:hitResultOneHitKO")); - break; + case HitResult.SUPER_EFFECTIVE: + this.scene.queueMessage(i18next.t("battle:hitResultSuperEffective")); + break; + case HitResult.NOT_VERY_EFFECTIVE: + this.scene.queueMessage(i18next.t("battle:hitResultNotVeryEffective")); + break; + case HitResult.ONE_HIT_KO: + this.scene.queueMessage(i18next.t("battle:hitResultOneHitKO")); + break; } } @@ -3355,53 +3355,53 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } switch (effect) { - case StatusEffect.POISON: - case StatusEffect.TOXIC: + case StatusEffect.POISON: + case StatusEffect.TOXIC: // Check if the Pokemon is immune to Poison/Toxic or if the source pokemon is canceling the immunity - const poisonImmunity = types.map(defType => { + const poisonImmunity = types.map(defType => { // Check if the Pokemon is not immune to Poison/Toxic - if (defType !== Type.POISON && defType !== Type.STEEL) { - return false; - } + if (defType !== Type.POISON && defType !== Type.STEEL) { + return false; + } - // Check if the source Pokemon has an ability that cancels the Poison/Toxic immunity - const cancelImmunity = new Utils.BooleanHolder(false); - if (sourcePokemon) { - applyAbAttrs(IgnoreTypeStatusEffectImmunityAbAttr, sourcePokemon, cancelImmunity, false, effect, defType); - if (cancelImmunity.value) { + // Check if the source Pokemon has an ability that cancels the Poison/Toxic immunity + const cancelImmunity = new Utils.BooleanHolder(false); + if (sourcePokemon) { + applyAbAttrs(IgnoreTypeStatusEffectImmunityAbAttr, sourcePokemon, cancelImmunity, false, effect, defType); + if (cancelImmunity.value) { + return false; + } + } + + return true; + }); + + if (this.isOfType(Type.POISON) || this.isOfType(Type.STEEL)) { + if (poisonImmunity.includes(true)) { return false; } } - - return true; - }); - - if (this.isOfType(Type.POISON) || this.isOfType(Type.STEEL)) { - if (poisonImmunity.includes(true)) { + break; + case StatusEffect.PARALYSIS: + if (this.isOfType(Type.ELECTRIC)) { return false; } - } - break; - case StatusEffect.PARALYSIS: - if (this.isOfType(Type.ELECTRIC)) { - return false; - } - break; - case StatusEffect.SLEEP: - if (this.isGrounded() && this.scene.arena.terrain?.terrainType === TerrainType.ELECTRIC) { - return false; - } - break; - case StatusEffect.FREEZE: - if (this.isOfType(Type.ICE) || (this.scene?.arena?.weather?.weatherType && [ WeatherType.SUNNY, WeatherType.HARSH_SUN ].includes(this.scene.arena.weather.weatherType))) { - return false; - } - break; - case StatusEffect.BURN: - if (this.isOfType(Type.FIRE)) { - return false; - } - break; + break; + case StatusEffect.SLEEP: + if (this.isGrounded() && this.scene.arena.terrain?.terrainType === TerrainType.ELECTRIC) { + return false; + } + break; + case StatusEffect.FREEZE: + if (this.isOfType(Type.ICE) || (this.scene?.arena?.weather?.weatherType && [ WeatherType.SUNNY, WeatherType.HARSH_SUN ].includes(this.scene.arena.weather.weatherType))) { + return false; + } + break; + case StatusEffect.BURN: + if (this.isOfType(Type.FIRE)) { + return false; + } + break; } const cancelled = new Utils.BooleanHolder(false); @@ -4501,35 +4501,35 @@ export class EnemyPokemon extends Pokemon { generateAndPopulateMoveset(formIndex?: integer): void { switch (true) { - case (this.species.speciesId === Species.SMEARGLE): - this.moveset = [ - new PokemonMove(Moves.SKETCH), - new PokemonMove(Moves.SKETCH), - new PokemonMove(Moves.SKETCH), - new PokemonMove(Moves.SKETCH) - ]; - break; - case (this.species.speciesId === Species.ETERNATUS): - this.moveset = (formIndex !== undefined ? formIndex : this.formIndex) - ? [ - new PokemonMove(Moves.DYNAMAX_CANNON), - new PokemonMove(Moves.CROSS_POISON), - new PokemonMove(Moves.FLAMETHROWER), - new PokemonMove(Moves.RECOVER, 0, -4) - ] - : [ - new PokemonMove(Moves.ETERNABEAM), - new PokemonMove(Moves.SLUDGE_BOMB), - new PokemonMove(Moves.FLAMETHROWER), - new PokemonMove(Moves.COSMIC_POWER) + case (this.species.speciesId === Species.SMEARGLE): + this.moveset = [ + new PokemonMove(Moves.SKETCH), + new PokemonMove(Moves.SKETCH), + new PokemonMove(Moves.SKETCH), + new PokemonMove(Moves.SKETCH) ]; - if (this.scene.gameMode.hasChallenge(Challenges.INVERSE_BATTLE)) { - this.moveset[2] = new PokemonMove(Moves.THUNDERBOLT); - } - break; - default: - super.generateAndPopulateMoveset(); - break; + break; + case (this.species.speciesId === Species.ETERNATUS): + this.moveset = (formIndex !== undefined ? formIndex : this.formIndex) + ? [ + new PokemonMove(Moves.DYNAMAX_CANNON), + new PokemonMove(Moves.CROSS_POISON), + new PokemonMove(Moves.FLAMETHROWER), + new PokemonMove(Moves.RECOVER, 0, -4) + ] + : [ + new PokemonMove(Moves.ETERNABEAM), + new PokemonMove(Moves.SLUDGE_BOMB), + new PokemonMove(Moves.FLAMETHROWER), + new PokemonMove(Moves.COSMIC_POWER) + ]; + if (this.scene.gameMode.hasChallenge(Challenges.INVERSE_BATTLE)) { + this.moveset[2] = new PokemonMove(Moves.THUNDERBOLT); + } + break; + default: + super.generateAndPopulateMoveset(); + break; } } @@ -4569,135 +4569,135 @@ export class EnemyPokemon extends Pokemon { } } switch (this.aiType) { - case AiType.RANDOM: // No enemy should spawn with this AI type in-game - const moveId = movePool[this.scene.randBattleSeedInt(movePool.length)]!.moveId; // TODO: is the bang correct? - return { move: moveId, targets: this.getNextTargets(moveId) }; - case AiType.SMART_RANDOM: - case AiType.SMART: + case AiType.RANDOM: // No enemy should spawn with this AI type in-game + const moveId = movePool[this.scene.randBattleSeedInt(movePool.length)]!.moveId; // TODO: is the bang correct? + return { move: moveId, targets: this.getNextTargets(moveId) }; + case AiType.SMART_RANDOM: + case AiType.SMART: /** * Search this Pokemon's move pool for moves that will KO an opposing target. * If there are any moves that can KO an opponent (i.e. a player Pokemon), * those moves are the only ones considered for selection on this turn. */ - const koMoves = movePool.filter(pkmnMove => { - if (!pkmnMove) { - return false; - } + const koMoves = movePool.filter(pkmnMove => { + if (!pkmnMove) { + return false; + } - const move = pkmnMove.getMove()!; - if (move.moveTarget === MoveTarget.ATTACKER) { - return false; - } + const move = pkmnMove.getMove()!; + if (move.moveTarget === MoveTarget.ATTACKER) { + return false; + } - const fieldPokemon = this.scene.getField(); - const moveTargets = getMoveTargets(this, move.id).targets - .map(ind => fieldPokemon[ind]) - .filter(p => this.isPlayer() !== p.isPlayer()); - // Only considers critical hits for crit-only moves or when this Pokemon is under the effect of Laser Focus - const isCritical = move.hasAttr(CritOnlyAttr) || !!this.getTag(BattlerTagType.ALWAYS_CRIT); + const fieldPokemon = this.scene.getField(); + const moveTargets = getMoveTargets(this, move.id).targets + .map(ind => fieldPokemon[ind]) + .filter(p => this.isPlayer() !== p.isPlayer()); + // Only considers critical hits for crit-only moves or when this Pokemon is under the effect of Laser Focus + const isCritical = move.hasAttr(CritOnlyAttr) || !!this.getTag(BattlerTagType.ALWAYS_CRIT); - return move.category !== MoveCategory.STATUS + return move.category !== MoveCategory.STATUS && moveTargets.some(p => { const doesNotFail = move.applyConditions(this, p, move) || [ Moves.SUCKER_PUNCH, Moves.UPPER_HAND, Moves.THUNDERCLAP ].includes(move.id); return doesNotFail && p.getAttackDamage(this, move, !p.battleData.abilityRevealed, false, isCritical).damage >= p.hp; }); - }, this); + }, this); - if (koMoves.length > 0) { - movePool = koMoves; - } + if (koMoves.length > 0) { + movePool = koMoves; + } - /** + /** * Move selection is based on the move's calculated "benefit score" against the * best possible target(s) (as determined by {@linkcode getNextTargets}). * For more information on how benefit scores are calculated, see `docs/enemy-ai.md`. */ - const moveScores = movePool.map(() => 0); - const moveTargets = Object.fromEntries(movePool.map(m => [ m!.moveId, this.getNextTargets(m!.moveId) ])); // TODO: are those bangs correct? - for (const m in movePool) { - const pokemonMove = movePool[m]!; // TODO: is the bang correct? - const move = pokemonMove.getMove(); + const moveScores = movePool.map(() => 0); + const moveTargets = Object.fromEntries(movePool.map(m => [ m!.moveId, this.getNextTargets(m!.moveId) ])); // TODO: are those bangs correct? + for (const m in movePool) { + const pokemonMove = movePool[m]!; // TODO: is the bang correct? + const move = pokemonMove.getMove(); - let moveScore = moveScores[m]; - const targetScores: integer[] = []; + let moveScore = moveScores[m]; + const targetScores: integer[] = []; - for (const mt of moveTargets[move.id]) { + for (const mt of moveTargets[move.id]) { // Prevent a target score from being calculated when the target is whoever attacks the user - if (mt === BattlerIndex.ATTACKER) { - break; - } + if (mt === BattlerIndex.ATTACKER) { + break; + } - const target = this.scene.getField()[mt]; - /** + const target = this.scene.getField()[mt]; + /** * The "target score" of a move is given by the move's user benefit score + the move's target benefit score. * If the target is an ally, the target benefit score is multiplied by -1. */ - let targetScore = move.getUserBenefitScore(this, target, move) + move.getTargetBenefitScore(this, target, move) * (mt < BattlerIndex.ENEMY === this.isPlayer() ? 1 : -1); - if (Number.isNaN(targetScore)) { - console.error(`Move ${move.name} returned score of NaN`); - targetScore = 0; - } - /** + let targetScore = move.getUserBenefitScore(this, target, move) + move.getTargetBenefitScore(this, target, move) * (mt < BattlerIndex.ENEMY === this.isPlayer() ? 1 : -1); + if (Number.isNaN(targetScore)) { + console.error(`Move ${move.name} returned score of NaN`); + targetScore = 0; + } + /** * If this move is unimplemented, or the move is known to fail when used, set its * target score to -20 */ - if ((move.name.endsWith(" (N)") || !move.applyConditions(this, target, move)) && ![ Moves.SUCKER_PUNCH, Moves.UPPER_HAND, Moves.THUNDERCLAP ].includes(move.id)) { - targetScore = -20; - } else if (move instanceof AttackMove) { + if ((move.name.endsWith(" (N)") || !move.applyConditions(this, target, move)) && ![ Moves.SUCKER_PUNCH, Moves.UPPER_HAND, Moves.THUNDERCLAP ].includes(move.id)) { + targetScore = -20; + } else if (move instanceof AttackMove) { /** * Attack moves are given extra multipliers to their base benefit score based on * the move's type effectiveness against the target and whether the move is a STAB move. */ - const effectiveness = target.getMoveEffectiveness(this, move, !target.battleData?.abilityRevealed); - if (target.isPlayer() !== this.isPlayer()) { - targetScore *= effectiveness; - if (this.isOfType(move.type)) { - targetScore *= 1.5; + const effectiveness = target.getMoveEffectiveness(this, move, !target.battleData?.abilityRevealed); + if (target.isPlayer() !== this.isPlayer()) { + targetScore *= effectiveness; + if (this.isOfType(move.type)) { + targetScore *= 1.5; + } + } else if (effectiveness) { + targetScore /= effectiveness; + if (this.isOfType(move.type)) { + targetScore /= 1.5; + } } - } else if (effectiveness) { - targetScore /= effectiveness; - if (this.isOfType(move.type)) { - targetScore /= 1.5; + /** If a move has a base benefit score of 0, its benefit score is assumed to be unimplemented at this point */ + if (!targetScore) { + targetScore = -20; } } - /** If a move has a base benefit score of 0, its benefit score is assumed to be unimplemented at this point */ - if (!targetScore) { - targetScore = -20; - } + targetScores.push(targetScore); } - targetScores.push(targetScore); + // When a move has multiple targets, its score is equal to the maximum target score across all targets + moveScore += Math.max(...targetScores); + + // could make smarter by checking opponent def/spdef + moveScores[m] = moveScore; } - // When a move has multiple targets, its score is equal to the maximum target score across all targets - moveScore += Math.max(...targetScores); - // could make smarter by checking opponent def/spdef - moveScores[m] = moveScore; - } + console.log(moveScores); - console.log(moveScores); - - // Sort the move pool in decreasing order of move score - const sortedMovePool = movePool.slice(0); - sortedMovePool.sort((a, b) => { - const scoreA = moveScores[movePool.indexOf(a)]; - const scoreB = moveScores[movePool.indexOf(b)]; - return scoreA < scoreB ? 1 : scoreA > scoreB ? -1 : 0; - }); - let r = 0; - if (this.aiType === AiType.SMART_RANDOM) { + // Sort the move pool in decreasing order of move score + const sortedMovePool = movePool.slice(0); + sortedMovePool.sort((a, b) => { + const scoreA = moveScores[movePool.indexOf(a)]; + const scoreB = moveScores[movePool.indexOf(b)]; + return scoreA < scoreB ? 1 : scoreA > scoreB ? -1 : 0; + }); + let r = 0; + if (this.aiType === AiType.SMART_RANDOM) { // Has a 5/8 chance to select the best move, and a 3/8 chance to advance to the next best move (and repeat this roll) - while (r < sortedMovePool.length - 1 && this.scene.randBattleSeedInt(8) >= 5) { - r++; - } - } else if (this.aiType === AiType.SMART) { + while (r < sortedMovePool.length - 1 && this.scene.randBattleSeedInt(8) >= 5) { + r++; + } + } else if (this.aiType === AiType.SMART) { // The chance to advance to the next best move increases when the compared moves' scores are closer to each other. - while (r < sortedMovePool.length - 1 && (moveScores[movePool.indexOf(sortedMovePool[r + 1])] / moveScores[movePool.indexOf(sortedMovePool[r])]) >= 0 + while (r < sortedMovePool.length - 1 && (moveScores[movePool.indexOf(sortedMovePool[r + 1])] / moveScores[movePool.indexOf(sortedMovePool[r])]) >= 0 && this.scene.randBattleSeedInt(100) < Math.round((moveScores[movePool.indexOf(sortedMovePool[r + 1])] / moveScores[movePool.indexOf(sortedMovePool[r])]) * 50)) { - r++; + r++; + } } - } - console.log(movePool.map(m => m!.getName()), moveScores, r, sortedMovePool.map(m => m!.getName())); // TODO: are those bangs correct? - return { move: sortedMovePool[r]!.moveId, targets: moveTargets[sortedMovePool[r]!.moveId] }; + console.log(movePool.map(m => m!.getName()), moveScores, r, sortedMovePool.map(m => m!.getName())); // TODO: are those bangs correct? + return { move: sortedMovePool[r]!.moveId, targets: moveTargets[sortedMovePool[r]!.moveId] }; } } @@ -4845,10 +4845,10 @@ export class EnemyPokemon extends Pokemon { } switch (this.scene.currentBattle.battleSpec) { - case BattleSpec.FINAL_BOSS: - if (!this.formIndex && this.bossSegmentIndex < 1) { - damage = Math.min(damage, this.hp - 1); - } + case BattleSpec.FINAL_BOSS: + if (!this.formIndex && this.bossSegmentIndex < 1) { + damage = Math.min(damage, this.hp - 1); + } } const ret = super.damage(damage, ignoreSegments, preventEndure, ignoreFaintPhase); diff --git a/src/field/trainer.ts b/src/field/trainer.ts index 5110787452f..b77a156f401 100644 --- a/src/field/trainer.ts +++ b/src/field/trainer.ts @@ -65,16 +65,16 @@ export default class Trainer extends Phaser.GameObjects.Container { } switch (this.variant) { - case TrainerVariant.FEMALE: - if (!this.config.hasGenders) { - variant = TrainerVariant.DEFAULT; - } - break; - case TrainerVariant.DOUBLE: - if (!this.config.hasDouble) { - variant = TrainerVariant.DEFAULT; - } - break; + case TrainerVariant.FEMALE: + if (!this.config.hasGenders) { + variant = TrainerVariant.DEFAULT; + } + break; + case TrainerVariant.DOUBLE: + if (!this.config.hasDouble) { + variant = TrainerVariant.DEFAULT; + } + break; } console.log(Object.keys(trainerPartyTemplates)[Object.values(trainerPartyTemplates).indexOf(this.getPartyTemplate())]); @@ -229,21 +229,21 @@ export default class Trainer extends Phaser.GameObjects.Container { const strength = partyTemplate.getStrength(i); switch (strength) { - case PartyMemberStrength.WEAKER: - multiplier = 0.95; - break; - case PartyMemberStrength.WEAK: - multiplier = 1.0; - break; - case PartyMemberStrength.AVERAGE: - multiplier = 1.1; - break; - case PartyMemberStrength.STRONG: - multiplier = 1.2; - break; - case PartyMemberStrength.STRONGER: - multiplier = 1.25; - break; + case PartyMemberStrength.WEAKER: + multiplier = 0.95; + break; + case PartyMemberStrength.WEAK: + multiplier = 1.0; + break; + case PartyMemberStrength.AVERAGE: + multiplier = 1.1; + break; + case PartyMemberStrength.STRONG: + multiplier = 1.2; + break; + case PartyMemberStrength.STRONGER: + multiplier = 1.25; + break; } let levelOffset = 0; @@ -515,19 +515,19 @@ export default class Trainer extends Phaser.GameObjects.Container { getPartyMemberModifierChanceMultiplier(index: integer): number { switch (this.getPartyTemplate().getStrength(index)) { - case PartyMemberStrength.WEAKER: - return 0.75; - case PartyMemberStrength.WEAK: - return 0.675; - case PartyMemberStrength.AVERAGE: - return 0.5625; - case PartyMemberStrength.STRONG: - return 0.45; - case PartyMemberStrength.STRONGER: - return 0.375; - default: - console.warn("getPartyMemberModifierChanceMultiplier not defined. Using default 0"); - return 0; + case PartyMemberStrength.WEAKER: + return 0.75; + case PartyMemberStrength.WEAK: + return 0.675; + case PartyMemberStrength.AVERAGE: + return 0.5625; + case PartyMemberStrength.STRONG: + return 0.45; + case PartyMemberStrength.STRONGER: + return 0.375; + default: + console.warn("getPartyMemberModifierChanceMultiplier not defined. Using default 0"); + return 0; } } diff --git a/src/game-mode.ts b/src/game-mode.ts index 91e8933ea6e..8f1bb9356e6 100644 --- a/src/game-mode.ts +++ b/src/game-mode.ts @@ -92,10 +92,10 @@ export class GameMode implements GameModeConfig { return Overrides.STARTING_LEVEL_OVERRIDE; } switch (this.modeId) { - case GameModes.DAILY: - return 20; - default: - return 5; + case GameModes.DAILY: + return 20; + default: + return 5; } } @@ -117,19 +117,19 @@ export class GameMode implements GameModeConfig { */ getStartingBiome(scene: BattleScene): Biome { switch (this.modeId) { - case GameModes.DAILY: - return scene.generateRandomBiome(this.getWaveForDifficulty(1)); - default: - return Overrides.STARTING_BIOME_OVERRIDE || Biome.TOWN; + case GameModes.DAILY: + return scene.generateRandomBiome(this.getWaveForDifficulty(1)); + default: + return Overrides.STARTING_BIOME_OVERRIDE || Biome.TOWN; } } getWaveForDifficulty(waveIndex: integer, ignoreCurveChanges: boolean = false): integer { switch (this.modeId) { - case GameModes.DAILY: - return waveIndex + 30 + (!ignoreCurveChanges ? Math.floor(waveIndex / 5) : 0); - default: - return waveIndex; + case GameModes.DAILY: + return waveIndex + 30 + (!ignoreCurveChanges ? Math.floor(waveIndex / 5) : 0); + default: + return waveIndex; } } @@ -186,10 +186,10 @@ export class GameMode implements GameModeConfig { isTrainerBoss(waveIndex: integer, biomeType: Biome, offsetGym: boolean): boolean { switch (this.modeId) { - case GameModes.DAILY: - return waveIndex > 10 && waveIndex < 50 && !(waveIndex % 10); - default: - return (waveIndex % 30) === (offsetGym ? 0 : 20) && (biomeType !== Biome.END || this.isClassic || this.isWaveFinal(waveIndex)); + case GameModes.DAILY: + return waveIndex > 10 && waveIndex < 50 && !(waveIndex % 10); + default: + return (waveIndex % 30) === (offsetGym ? 0 : 20) && (biomeType !== Biome.END || this.isClassic || this.isWaveFinal(waveIndex)); } } @@ -211,14 +211,14 @@ export class GameMode implements GameModeConfig { */ isWaveFinal(waveIndex: integer, modeId: GameModes = this.modeId): boolean { switch (modeId) { - case GameModes.CLASSIC: - case GameModes.CHALLENGE: - return waveIndex === 200; - case GameModes.ENDLESS: - case GameModes.SPLICED_ENDLESS: - return !(waveIndex % 250); - case GameModes.DAILY: - return waveIndex === 50; + case GameModes.CLASSIC: + case GameModes.CHALLENGE: + return waveIndex === 200; + case GameModes.ENDLESS: + case GameModes.SPLICED_ENDLESS: + return !(waveIndex % 250); + case GameModes.DAILY: + return waveIndex === 50; } } @@ -287,40 +287,40 @@ export class GameMode implements GameModeConfig { getClearScoreBonus(): integer { switch (this.modeId) { - case GameModes.CLASSIC: - case GameModes.CHALLENGE: - return 5000; - case GameModes.DAILY: - return 2500; - default: - return 0; + case GameModes.CLASSIC: + case GameModes.CHALLENGE: + return 5000; + case GameModes.DAILY: + return 2500; + default: + return 0; } } getEnemyModifierChance(isBoss: boolean): integer { switch (this.modeId) { - case GameModes.CLASSIC: - case GameModes.CHALLENGE: - case GameModes.DAILY: - return !isBoss ? 18 : 6; - case GameModes.ENDLESS: - case GameModes.SPLICED_ENDLESS: - return !isBoss ? 12 : 4; + case GameModes.CLASSIC: + case GameModes.CHALLENGE: + case GameModes.DAILY: + return !isBoss ? 18 : 6; + case GameModes.ENDLESS: + case GameModes.SPLICED_ENDLESS: + return !isBoss ? 12 : 4; } } getName(): string { switch (this.modeId) { - case GameModes.CLASSIC: - return i18next.t("gameMode:classic"); - case GameModes.ENDLESS: - return i18next.t("gameMode:endless"); - case GameModes.SPLICED_ENDLESS: - return i18next.t("gameMode:endlessSpliced"); - case GameModes.DAILY: - return i18next.t("gameMode:dailyRun"); - case GameModes.CHALLENGE: - return i18next.t("gameMode:challenge"); + case GameModes.CLASSIC: + return i18next.t("gameMode:classic"); + case GameModes.ENDLESS: + return i18next.t("gameMode:endless"); + case GameModes.SPLICED_ENDLESS: + return i18next.t("gameMode:endlessSpliced"); + case GameModes.DAILY: + return i18next.t("gameMode:dailyRun"); + case GameModes.CHALLENGE: + return i18next.t("gameMode:challenge"); } } @@ -329,42 +329,42 @@ export class GameMode implements GameModeConfig { */ getMysteryEncounterLegalWaves(): [number, number] { switch (this.modeId) { - default: - return [ 0, 0 ]; - case GameModes.CLASSIC: - return CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES; - case GameModes.CHALLENGE: - return CHALLENGE_MODE_MYSTERY_ENCOUNTER_WAVES; + default: + return [ 0, 0 ]; + case GameModes.CLASSIC: + return CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES; + case GameModes.CHALLENGE: + return CHALLENGE_MODE_MYSTERY_ENCOUNTER_WAVES; } } static getModeName(modeId: GameModes): string { switch (modeId) { - case GameModes.CLASSIC: - return i18next.t("gameMode:classic"); - case GameModes.ENDLESS: - return i18next.t("gameMode:endless"); - case GameModes.SPLICED_ENDLESS: - return i18next.t("gameMode:endlessSpliced"); - case GameModes.DAILY: - return i18next.t("gameMode:dailyRun"); - case GameModes.CHALLENGE: - return i18next.t("gameMode:challenge"); + case GameModes.CLASSIC: + return i18next.t("gameMode:classic"); + case GameModes.ENDLESS: + return i18next.t("gameMode:endless"); + case GameModes.SPLICED_ENDLESS: + return i18next.t("gameMode:endlessSpliced"); + case GameModes.DAILY: + return i18next.t("gameMode:dailyRun"); + case GameModes.CHALLENGE: + return i18next.t("gameMode:challenge"); } } } export function getGameMode(gameMode: GameModes): GameMode { switch (gameMode) { - case GameModes.CLASSIC: - return new GameMode(GameModes.CLASSIC, { isClassic: true, hasTrainers: true, hasMysteryEncounters: true }, classicFixedBattles); - case GameModes.ENDLESS: - return new GameMode(GameModes.ENDLESS, { isEndless: true, hasShortBiomes: true, hasRandomBosses: true }); - case GameModes.SPLICED_ENDLESS: - return new GameMode(GameModes.SPLICED_ENDLESS, { isEndless: true, hasShortBiomes: true, hasRandomBosses: true, isSplicedOnly: true }); - case GameModes.DAILY: - return new GameMode(GameModes.DAILY, { isDaily: true, hasTrainers: true, hasNoShop: true }); - case GameModes.CHALLENGE: - return new GameMode(GameModes.CHALLENGE, { isClassic: true, hasTrainers: true, isChallenge: true, hasMysteryEncounters: true }, classicFixedBattles); + case GameModes.CLASSIC: + return new GameMode(GameModes.CLASSIC, { isClassic: true, hasTrainers: true, hasMysteryEncounters: true }, classicFixedBattles); + case GameModes.ENDLESS: + return new GameMode(GameModes.ENDLESS, { isEndless: true, hasShortBiomes: true, hasRandomBosses: true }); + case GameModes.SPLICED_ENDLESS: + return new GameMode(GameModes.SPLICED_ENDLESS, { isEndless: true, hasShortBiomes: true, hasRandomBosses: true, isSplicedOnly: true }); + case GameModes.DAILY: + return new GameMode(GameModes.DAILY, { isDaily: true, hasTrainers: true, hasNoShop: true }); + case GameModes.CHALLENGE: + return new GameMode(GameModes.CHALLENGE, { isClassic: true, hasTrainers: true, isChallenge: true, hasMysteryEncounters: true }, classicFixedBattles); } } diff --git a/src/loading-scene.ts b/src/loading-scene.ts index d6512486d0e..4f673fd2cfc 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -477,18 +477,18 @@ export class LoadingScene extends SceneBase { this.load.on(this.LOAD_EVENTS.FILE_COMPLETE, (key: string) => { assetText.setText(i18next.t("menu:loadingAsset", { assetName: key })); switch (key) { - case "loading_bg": - bg.setTexture("loading_bg"); - if (mobile) { - bg.setVisible(true); - } - break; - case "logo": - logo.setTexture("logo"); - if (mobile) { - logo.setVisible(true); - } - break; + case "loading_bg": + bg.setTexture("loading_bg"); + if (mobile) { + bg.setVisible(true); + } + break; + case "logo": + logo.setTexture("logo"); + if (mobile) { + logo.setVisible(true); + } + break; } }); diff --git a/src/messages.ts b/src/messages.ts index 1cd6a5966b6..91f550918e5 100644 --- a/src/messages.ts +++ b/src/messages.ts @@ -13,21 +13,21 @@ export function getPokemonNameWithAffix(pokemon: Pokemon | undefined): string { } switch (pokemon.scene.currentBattle.battleSpec) { - case BattleSpec.DEFAULT: - return !pokemon.isPlayer() - ? pokemon.hasTrainer() - ? i18next.t("battle:foePokemonWithAffix", { - pokemonName: pokemon.getNameToRender(), - }) - : i18next.t("battle:wildPokemonWithAffix", { - pokemonName: pokemon.getNameToRender(), - }) - : pokemon.getNameToRender(); - case BattleSpec.FINAL_BOSS: - return !pokemon.isPlayer() - ? i18next.t("battle:foePokemonWithAffix", { pokemonName: pokemon.getNameToRender() }) - : pokemon.getNameToRender(); - default: - return pokemon.getNameToRender(); + case BattleSpec.DEFAULT: + return !pokemon.isPlayer() + ? pokemon.hasTrainer() + ? i18next.t("battle:foePokemonWithAffix", { + pokemonName: pokemon.getNameToRender(), + }) + : i18next.t("battle:wildPokemonWithAffix", { + pokemonName: pokemon.getNameToRender(), + }) + : pokemon.getNameToRender(); + case BattleSpec.FINAL_BOSS: + return !pokemon.isPlayer() + ? i18next.t("battle:foePokemonWithAffix", { pokemonName: pokemon.getNameToRender() }) + : pokemon.getNameToRender(); + default: + return pokemon.getNameToRender(); } } diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index 32173a6fead..674c5f47c88 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -78,18 +78,18 @@ export class ModifierType { } let poolTypes: ModifierPoolType[]; switch (poolType) { - case ModifierPoolType.PLAYER: - poolTypes = [ poolType, ModifierPoolType.TRAINER, ModifierPoolType.WILD ]; - break; - case ModifierPoolType.WILD: - poolTypes = [ poolType, ModifierPoolType.PLAYER, ModifierPoolType.TRAINER ]; - break; - case ModifierPoolType.TRAINER: - poolTypes = [ poolType, ModifierPoolType.PLAYER, ModifierPoolType.WILD ]; - break; - default: - poolTypes = [ poolType ]; - break; + case ModifierPoolType.PLAYER: + poolTypes = [ poolType, ModifierPoolType.TRAINER, ModifierPoolType.WILD ]; + break; + case ModifierPoolType.WILD: + poolTypes = [ poolType, ModifierPoolType.PLAYER, ModifierPoolType.TRAINER ]; + break; + case ModifierPoolType.TRAINER: + poolTypes = [ poolType, ModifierPoolType.PLAYER, ModifierPoolType.WILD ]; + break; + default: + poolTypes = [ poolType ]; + break; } // Try multiple pool types in case of stolen items for (const type of poolTypes) { @@ -502,42 +502,42 @@ export class BerryModifierType extends PokemonHeldItemModifierType implements Ge function getAttackTypeBoosterItemName(type: Type) { switch (type) { - case Type.NORMAL: - return "Silk Scarf"; - case Type.FIGHTING: - return "Black Belt"; - case Type.FLYING: - return "Sharp Beak"; - case Type.POISON: - return "Poison Barb"; - case Type.GROUND: - return "Soft Sand"; - case Type.ROCK: - return "Hard Stone"; - case Type.BUG: - return "Silver Powder"; - case Type.GHOST: - return "Spell Tag"; - case Type.STEEL: - return "Metal Coat"; - case Type.FIRE: - return "Charcoal"; - case Type.WATER: - return "Mystic Water"; - case Type.GRASS: - return "Miracle Seed"; - case Type.ELECTRIC: - return "Magnet"; - case Type.PSYCHIC: - return "Twisted Spoon"; - case Type.ICE: - return "Never-Melt Ice"; - case Type.DRAGON: - return "Dragon Fang"; - case Type.DARK: - return "Black Glasses"; - case Type.FAIRY: - return "Fairy Feather"; + case Type.NORMAL: + return "Silk Scarf"; + case Type.FIGHTING: + return "Black Belt"; + case Type.FLYING: + return "Sharp Beak"; + case Type.POISON: + return "Poison Barb"; + case Type.GROUND: + return "Soft Sand"; + case Type.ROCK: + return "Hard Stone"; + case Type.BUG: + return "Silver Powder"; + case Type.GHOST: + return "Spell Tag"; + case Type.STEEL: + return "Metal Coat"; + case Type.FIRE: + return "Charcoal"; + case Type.WATER: + return "Mystic Water"; + case Type.GRASS: + return "Miracle Seed"; + case Type.ELECTRIC: + return "Magnet"; + case Type.PSYCHIC: + return "Twisted Spoon"; + case Type.ICE: + return "Never-Melt Ice"; + case Type.DRAGON: + return "Dragon Fang"; + case Type.DARK: + return "Black Glasses"; + case Type.FAIRY: + return "Fairy Feather"; } } @@ -1149,15 +1149,15 @@ class FormChangeItemModifierTypeGenerator extends ModifierTypeGenerator { foundN_SOLAR = false; formChangeItemTriggers.forEach((fc, i) => { switch (fc.item) { - case FormChangeItem.ULTRANECROZIUM_Z: - foundULTRA_Z = true; - break; - case FormChangeItem.N_LUNARIZER: - foundN_LUNA = true; - break; - case FormChangeItem.N_SOLARIZER: - foundN_SOLAR = true; - break; + case FormChangeItem.ULTRANECROZIUM_Z: + foundULTRA_Z = true; + break; + case FormChangeItem.N_LUNARIZER: + foundN_LUNA = true; + break; + case FormChangeItem.N_SOLARIZER: + foundN_SOLAR = true; + break; } }); if (foundULTRA_Z && foundN_LUNA && foundN_SOLAR) { @@ -1975,21 +1975,21 @@ let enemyBuffIgnoredPoolIndexes = {}; // eslint-disable-line @typescript-eslint/ export function getModifierPoolForType(poolType: ModifierPoolType): ModifierPool { let pool: ModifierPool; switch (poolType) { - case ModifierPoolType.PLAYER: - pool = modifierPool; - break; - case ModifierPoolType.WILD: - pool = wildModifierPool; - break; - case ModifierPoolType.TRAINER: - pool = trainerModifierPool; - break; - case ModifierPoolType.ENEMY_BUFF: - pool = enemyBuffModifierPool; - break; - case ModifierPoolType.DAILY_STARTER: - pool = dailyStarterModifierPool; - break; + case ModifierPoolType.PLAYER: + pool = modifierPool; + break; + case ModifierPoolType.WILD: + pool = wildModifierPool; + break; + case ModifierPoolType.TRAINER: + pool = trainerModifierPool; + break; + case ModifierPoolType.ENEMY_BUFF: + pool = enemyBuffModifierPool; + break; + case ModifierPoolType.DAILY_STARTER: + pool = dailyStarterModifierPool; + break; } return pool; } @@ -2060,23 +2060,23 @@ export function regenerateModifierPoolThresholds(party: Pokemon[], poolType: Mod console.table(modifierTableData); } switch (poolType) { - case ModifierPoolType.PLAYER: - modifierPoolThresholds = thresholds; - ignoredPoolIndexes = ignoredIndexes; - break; - case ModifierPoolType.WILD: - case ModifierPoolType.TRAINER: - enemyModifierPoolThresholds = thresholds; - enemyIgnoredPoolIndexes = ignoredIndexes; - break; - case ModifierPoolType.ENEMY_BUFF: - enemyBuffModifierPoolThresholds = thresholds; - enemyBuffIgnoredPoolIndexes = ignoredIndexes; - break; - case ModifierPoolType.DAILY_STARTER: - dailyStarterModifierPoolThresholds = thresholds; - ignoredDailyStarterPoolIndexes = ignoredIndexes; - break; + case ModifierPoolType.PLAYER: + modifierPoolThresholds = thresholds; + ignoredPoolIndexes = ignoredIndexes; + break; + case ModifierPoolType.WILD: + case ModifierPoolType.TRAINER: + enemyModifierPoolThresholds = thresholds; + enemyIgnoredPoolIndexes = ignoredIndexes; + break; + case ModifierPoolType.ENEMY_BUFF: + enemyBuffModifierPoolThresholds = thresholds; + enemyBuffIgnoredPoolIndexes = ignoredIndexes; + break; + case ModifierPoolType.DAILY_STARTER: + dailyStarterModifierPoolThresholds = thresholds; + ignoredDailyStarterPoolIndexes = ignoredIndexes; + break; } } @@ -2247,15 +2247,15 @@ export function getPlayerShopModifierTypeOptionsForWave(waveIndex: integer, base export function getEnemyBuffModifierForWave(tier: ModifierTier, enemyModifiers: PersistentModifier[], scene: BattleScene): EnemyPersistentModifier { let tierStackCount: number; switch (tier) { - case ModifierTier.ULTRA: - tierStackCount = 5; - break; - case ModifierTier.GREAT: - tierStackCount = 3; - break; - default: - tierStackCount = 1; - break; + case ModifierTier.ULTRA: + tierStackCount = 5; + break; + case ModifierTier.GREAT: + tierStackCount = 3; + break; + default: + tierStackCount = 1; + break; } const retryCount = 50; @@ -2321,21 +2321,21 @@ function getNewModifierTypeOption(party: Pokemon[], poolType: ModifierPoolType, const pool = getModifierPoolForType(poolType); let thresholds: object; switch (poolType) { - case ModifierPoolType.PLAYER: - thresholds = modifierPoolThresholds; - break; - case ModifierPoolType.WILD: - thresholds = enemyModifierPoolThresholds; - break; - case ModifierPoolType.TRAINER: - thresholds = enemyModifierPoolThresholds; - break; - case ModifierPoolType.ENEMY_BUFF: - thresholds = enemyBuffModifierPoolThresholds; - break; - case ModifierPoolType.DAILY_STARTER: - thresholds = dailyStarterModifierPoolThresholds; - break; + case ModifierPoolType.PLAYER: + thresholds = modifierPoolThresholds; + break; + case ModifierPoolType.WILD: + thresholds = enemyModifierPoolThresholds; + break; + case ModifierPoolType.TRAINER: + thresholds = enemyModifierPoolThresholds; + break; + case ModifierPoolType.ENEMY_BUFF: + thresholds = enemyBuffModifierPoolThresholds; + break; + case ModifierPoolType.DAILY_STARTER: + thresholds = dailyStarterModifierPoolThresholds; + break; } if (tier === undefined) { const tierValue = randSeedInt(1024); diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 35d1a304461..2cd96496f45 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -1695,12 +1695,12 @@ export class TurnStatusEffectModifier extends PokemonHeldItemModifier { super(type, pokemonId, stackCount); switch (type.id) { - case "TOXIC_ORB": - this.effect = StatusEffect.TOXIC; - break; - case "FLAME_ORB": - this.effect = StatusEffect.BURN; - break; + case "TOXIC_ORB": + this.effect = StatusEffect.TOXIC; + break; + case "FLAME_ORB": + this.effect = StatusEffect.BURN; + break; } } @@ -2684,15 +2684,15 @@ export class PokemonMultiHitModifier extends PokemonHeldItemModifier { count.value *= (this.getStackCount() + 1); switch (this.getStackCount()) { - case 1: - power.value *= 0.4; - break; - case 2: - power.value *= 0.25; - break; - case 3: - power.value *= 0.175; - break; + case 1: + power.value *= 0.4; + break; + case 2: + power.value *= 0.25; + break; + case 3: + power.value *= 0.175; + break; } return true; diff --git a/src/phases/command-phase.ts b/src/phases/command-phase.ts index cf66631bd96..e6f2eb69ff3 100644 --- a/src/phases/command-phase.ts +++ b/src/phases/command-phase.ts @@ -84,170 +84,170 @@ export class CommandPhase extends FieldPhase { let success: boolean; switch (command) { - case Command.FIGHT: - let useStruggle = false; - if (cursor === -1 || + case Command.FIGHT: + let useStruggle = false; + if (cursor === -1 || playerPokemon.trySelectMove(cursor, args[0] as boolean) || (useStruggle = cursor > -1 && !playerPokemon.getMoveset().filter(m => m?.isUsable(playerPokemon)).length)) { - const moveId = !useStruggle ? cursor > -1 ? playerPokemon.getMoveset()[cursor]!.moveId : Moves.NONE : Moves.STRUGGLE; // TODO: is the bang correct? - const turnCommand: TurnCommand = { command: Command.FIGHT, cursor: cursor, move: { move: moveId, targets: [], ignorePP: args[0] }, args: args }; - const moveTargets: MoveTargetSet = args.length < 3 ? getMoveTargets(playerPokemon, moveId) : args[2]; - if (!moveId) { - turnCommand.targets = [ this.fieldIndex ]; - } - console.log(moveTargets, getPokemonNameWithAffix(playerPokemon)); - if (moveTargets.targets.length > 1 && moveTargets.multiple) { - this.scene.unshiftPhase(new SelectTargetPhase(this.scene, this.fieldIndex)); - } - if (moveTargets.targets.length <= 1 || moveTargets.multiple) { + const moveId = !useStruggle ? cursor > -1 ? playerPokemon.getMoveset()[cursor]!.moveId : Moves.NONE : Moves.STRUGGLE; // TODO: is the bang correct? + const turnCommand: TurnCommand = { command: Command.FIGHT, cursor: cursor, move: { move: moveId, targets: [], ignorePP: args[0] }, args: args }; + const moveTargets: MoveTargetSet = args.length < 3 ? getMoveTargets(playerPokemon, moveId) : args[2]; + if (!moveId) { + turnCommand.targets = [ this.fieldIndex ]; + } + console.log(moveTargets, getPokemonNameWithAffix(playerPokemon)); + if (moveTargets.targets.length > 1 && moveTargets.multiple) { + this.scene.unshiftPhase(new SelectTargetPhase(this.scene, this.fieldIndex)); + } + if (moveTargets.targets.length <= 1 || moveTargets.multiple) { turnCommand.move!.targets = moveTargets.targets; //TODO: is the bang correct here? - } else if (playerPokemon.getTag(BattlerTagType.CHARGING) && playerPokemon.getMoveQueue().length >= 1) { + } else if (playerPokemon.getTag(BattlerTagType.CHARGING) && playerPokemon.getMoveQueue().length >= 1) { turnCommand.move!.targets = playerPokemon.getMoveQueue()[0].targets; //TODO: is the bang correct here? - } else { - this.scene.unshiftPhase(new SelectTargetPhase(this.scene, this.fieldIndex)); - } - this.scene.currentBattle.turnCommands[this.fieldIndex] = turnCommand; - success = true; - } else if (cursor < playerPokemon.getMoveset().length) { - const move = playerPokemon.getMoveset()[cursor]!; //TODO: is this bang correct? - this.scene.ui.setMode(Mode.MESSAGE); + } else { + this.scene.unshiftPhase(new SelectTargetPhase(this.scene, this.fieldIndex)); + } + this.scene.currentBattle.turnCommands[this.fieldIndex] = turnCommand; + success = true; + } else if (cursor < playerPokemon.getMoveset().length) { + const move = playerPokemon.getMoveset()[cursor]!; //TODO: is this bang correct? + this.scene.ui.setMode(Mode.MESSAGE); - // Decides between a Disabled, Not Implemented, or No PP translation message - const errorMessage = + // Decides between a Disabled, Not Implemented, or No PP translation message + const errorMessage = playerPokemon.isMoveRestricted(move.moveId, playerPokemon) ? playerPokemon.getRestrictingTag(move.moveId, playerPokemon)!.selectionDeniedText(playerPokemon, move.moveId) : move.getName().endsWith(" (N)") ? "battle:moveNotImplemented" : "battle:moveNoPP"; - const moveName = move.getName().replace(" (N)", ""); // Trims off the indicator + const moveName = move.getName().replace(" (N)", ""); // Trims off the indicator - this.scene.ui.showText(i18next.t(errorMessage, { moveName: moveName }), null, () => { - this.scene.ui.clearText(); - this.scene.ui.setMode(Mode.FIGHT, this.fieldIndex); - }, null, true); - } - break; - case Command.BALL: - const notInDex = (this.scene.getEnemyField().filter(p => p.isActive(true)).some(p => !p.scene.gameData.dexData[p.species.speciesId].caughtAttr) && this.scene.gameData.getStarterCount(d => !!d.caughtAttr) < Object.keys(speciesStarterCosts).length - 1); - if (this.scene.arena.biomeType === Biome.END && (!this.scene.gameMode.isClassic || this.scene.gameMode.isFreshStartChallenge() || notInDex )) { - this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); - this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t("battle:noPokeballForce"), null, () => { - this.scene.ui.showText("", 0); - this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); - }, null, true); - } else if (this.scene.currentBattle.battleType === BattleType.TRAINER) { - this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); - this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t("battle:noPokeballTrainer"), null, () => { - this.scene.ui.showText("", 0); - this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); - }, null, true); - } else if (this.scene.currentBattle.isBattleMysteryEncounter() && !this.scene.currentBattle.mysteryEncounter!.catchAllowed) { - this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); - this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t("battle:noPokeballMysteryEncounter"), null, () => { - this.scene.ui.showText("", 0); - this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); - }, null, true); - } else { - const targets = this.scene.getEnemyField().filter(p => p.isActive(true)).map(p => p.getBattlerIndex()); - if (targets.length > 1) { + this.scene.ui.showText(i18next.t(errorMessage, { moveName: moveName }), null, () => { + this.scene.ui.clearText(); + this.scene.ui.setMode(Mode.FIGHT, this.fieldIndex); + }, null, true); + } + break; + case Command.BALL: + const notInDex = (this.scene.getEnemyField().filter(p => p.isActive(true)).some(p => !p.scene.gameData.dexData[p.species.speciesId].caughtAttr) && this.scene.gameData.getStarterCount(d => !!d.caughtAttr) < Object.keys(speciesStarterCosts).length - 1); + if (this.scene.arena.biomeType === Biome.END && (!this.scene.gameMode.isClassic || this.scene.gameMode.isFreshStartChallenge() || notInDex )) { this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t("battle:noPokeballMulti"), null, () => { + this.scene.ui.showText(i18next.t("battle:noPokeballForce"), null, () => { this.scene.ui.showText("", 0); this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); }, null, true); - } else if (cursor < 5) { - const targetPokemon = this.scene.getEnemyField().find(p => p.isActive(true)); - if (targetPokemon?.isBoss() && targetPokemon?.bossSegmentIndex >= 1 && !targetPokemon?.hasAbility(Abilities.WONDER_GUARD, false, true) && cursor < PokeballType.MASTER_BALL) { + } else if (this.scene.currentBattle.battleType === BattleType.TRAINER) { + this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); + this.scene.ui.setMode(Mode.MESSAGE); + this.scene.ui.showText(i18next.t("battle:noPokeballTrainer"), null, () => { + this.scene.ui.showText("", 0); + this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); + }, null, true); + } else if (this.scene.currentBattle.isBattleMysteryEncounter() && !this.scene.currentBattle.mysteryEncounter!.catchAllowed) { + this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); + this.scene.ui.setMode(Mode.MESSAGE); + this.scene.ui.showText(i18next.t("battle:noPokeballMysteryEncounter"), null, () => { + this.scene.ui.showText("", 0); + this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); + }, null, true); + } else { + const targets = this.scene.getEnemyField().filter(p => p.isActive(true)).map(p => p.getBattlerIndex()); + if (targets.length > 1) { this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t("battle:noPokeballStrong"), null, () => { + this.scene.ui.showText(i18next.t("battle:noPokeballMulti"), null, () => { this.scene.ui.showText("", 0); this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); }, null, true); - } else { - this.scene.currentBattle.turnCommands[this.fieldIndex] = { command: Command.BALL, cursor: cursor }; + } else if (cursor < 5) { + const targetPokemon = this.scene.getEnemyField().find(p => p.isActive(true)); + if (targetPokemon?.isBoss() && targetPokemon?.bossSegmentIndex >= 1 && !targetPokemon?.hasAbility(Abilities.WONDER_GUARD, false, true) && cursor < PokeballType.MASTER_BALL) { + this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); + this.scene.ui.setMode(Mode.MESSAGE); + this.scene.ui.showText(i18next.t("battle:noPokeballStrong"), null, () => { + this.scene.ui.showText("", 0); + this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); + }, null, true); + } else { + this.scene.currentBattle.turnCommands[this.fieldIndex] = { command: Command.BALL, cursor: cursor }; this.scene.currentBattle.turnCommands[this.fieldIndex]!.targets = targets; if (this.fieldIndex) { this.scene.currentBattle.turnCommands[this.fieldIndex - 1]!.skip = true; } success = true; + } } } - } - break; - case Command.POKEMON: - case Command.RUN: - const isSwitch = command === Command.POKEMON; - const { currentBattle, arena } = this.scene; - const mysteryEncounterFleeAllowed = currentBattle.mysteryEncounter?.fleeAllowed; - if (!isSwitch && (arena.biomeType === Biome.END || (!isNullOrUndefined(mysteryEncounterFleeAllowed) && !mysteryEncounterFleeAllowed))) { - this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); - this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t("battle:noEscapeForce"), null, () => { - this.scene.ui.showText("", 0); + break; + case Command.POKEMON: + case Command.RUN: + const isSwitch = command === Command.POKEMON; + const { currentBattle, arena } = this.scene; + const mysteryEncounterFleeAllowed = currentBattle.mysteryEncounter?.fleeAllowed; + if (!isSwitch && (arena.biomeType === Biome.END || (!isNullOrUndefined(mysteryEncounterFleeAllowed) && !mysteryEncounterFleeAllowed))) { this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); - }, null, true); - } else if (!isSwitch && (currentBattle.battleType === BattleType.TRAINER || currentBattle.mysteryEncounter?.encounterMode === MysteryEncounterMode.TRAINER_BATTLE)) { - this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); - this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(i18next.t("battle:noEscapeTrainer"), null, () => { - this.scene.ui.showText("", 0); - this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); - }, null, true); - } else { - const batonPass = isSwitch && args[0] as boolean; - const trappedAbMessages: string[] = []; - if (batonPass || !playerPokemon.isTrapped(trappedAbMessages)) { - currentBattle.turnCommands[this.fieldIndex] = isSwitch - ? { command: Command.POKEMON, cursor: cursor, args: args } - : { command: Command.RUN }; - success = true; - if (!isSwitch && this.fieldIndex) { - currentBattle.turnCommands[this.fieldIndex - 1]!.skip = true; - } - } else if (trappedAbMessages.length > 0) { - if (!isSwitch) { - this.scene.ui.setMode(Mode.MESSAGE); - } - this.scene.ui.showText(trappedAbMessages[0], null, () => { + this.scene.ui.setMode(Mode.MESSAGE); + this.scene.ui.showText(i18next.t("battle:noEscapeForce"), null, () => { this.scene.ui.showText("", 0); - if (!isSwitch) { - this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); - } + this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); + }, null, true); + } else if (!isSwitch && (currentBattle.battleType === BattleType.TRAINER || currentBattle.mysteryEncounter?.encounterMode === MysteryEncounterMode.TRAINER_BATTLE)) { + this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); + this.scene.ui.setMode(Mode.MESSAGE); + this.scene.ui.showText(i18next.t("battle:noEscapeTrainer"), null, () => { + this.scene.ui.showText("", 0); + this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); }, null, true); } else { - const trapTag = playerPokemon.getTag(TrappedTag); - - // trapTag should be defined at this point, but just in case... - if (!trapTag) { + const batonPass = isSwitch && args[0] as boolean; + const trappedAbMessages: string[] = []; + if (batonPass || !playerPokemon.isTrapped(trappedAbMessages)) { currentBattle.turnCommands[this.fieldIndex] = isSwitch ? { command: Command.POKEMON, cursor: cursor, args: args } : { command: Command.RUN }; - break; - } - - if (!isSwitch) { - this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); - this.scene.ui.setMode(Mode.MESSAGE); - } - this.scene.ui.showText( - i18next.t("battle:noEscapePokemon", { - pokemonName: trapTag.sourceId && this.scene.getPokemonById(trapTag.sourceId) ? getPokemonNameWithAffix(this.scene.getPokemonById(trapTag.sourceId)!) : "", - moveName: trapTag.getMoveName(), - escapeVerb: isSwitch ? i18next.t("battle:escapeVerbSwitch") : i18next.t("battle:escapeVerbFlee") - }), - null, - () => { + success = true; + if (!isSwitch && this.fieldIndex) { + currentBattle.turnCommands[this.fieldIndex - 1]!.skip = true; + } + } else if (trappedAbMessages.length > 0) { + if (!isSwitch) { + this.scene.ui.setMode(Mode.MESSAGE); + } + this.scene.ui.showText(trappedAbMessages[0], null, () => { this.scene.ui.showText("", 0); if (!isSwitch) { this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); } }, null, true); + } else { + const trapTag = playerPokemon.getTag(TrappedTag); + + // trapTag should be defined at this point, but just in case... + if (!trapTag) { + currentBattle.turnCommands[this.fieldIndex] = isSwitch + ? { command: Command.POKEMON, cursor: cursor, args: args } + : { command: Command.RUN }; + break; + } + + if (!isSwitch) { + this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); + this.scene.ui.setMode(Mode.MESSAGE); + } + this.scene.ui.showText( + i18next.t("battle:noEscapePokemon", { + pokemonName: trapTag.sourceId && this.scene.getPokemonById(trapTag.sourceId) ? getPokemonNameWithAffix(this.scene.getPokemonById(trapTag.sourceId)!) : "", + moveName: trapTag.getMoveName(), + escapeVerb: isSwitch ? i18next.t("battle:escapeVerbSwitch") : i18next.t("battle:escapeVerbFlee") + }), + null, + () => { + this.scene.ui.showText("", 0); + if (!isSwitch) { + this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex); + } + }, null, true); + } } - } - break; + break; } if (success!) { // TODO: is the bang correct? diff --git a/src/phases/damage-phase.ts b/src/phases/damage-phase.ts index 66b11512729..44e3dfd4182 100644 --- a/src/phases/damage-phase.ts +++ b/src/phases/damage-phase.ts @@ -41,16 +41,16 @@ export class DamagePhase extends PokemonPhase { applyDamage() { switch (this.damageResult) { - case HitResult.EFFECTIVE: - this.scene.playSound("se/hit"); - break; - case HitResult.SUPER_EFFECTIVE: - case HitResult.ONE_HIT_KO: - this.scene.playSound("se/hit_strong"); - break; - case HitResult.NOT_VERY_EFFECTIVE: - this.scene.playSound("se/hit_weak"); - break; + case HitResult.EFFECTIVE: + this.scene.playSound("se/hit"); + break; + case HitResult.SUPER_EFFECTIVE: + case HitResult.ONE_HIT_KO: + this.scene.playSound("se/hit_strong"); + break; + case HitResult.NOT_VERY_EFFECTIVE: + this.scene.playSound("se/hit_weak"); + break; } if (this.amount) { diff --git a/src/phases/encounter-phase.ts b/src/phases/encounter-phase.ts index 3610ffed386..84f07f3ee94 100644 --- a/src/phases/encounter-phase.ts +++ b/src/phases/encounter-phase.ts @@ -494,31 +494,31 @@ export class EncounterPhase extends BattlePhase { tryOverrideForBattleSpec(): boolean { switch (this.scene.currentBattle.battleSpec) { - case BattleSpec.FINAL_BOSS: - const enemy = this.scene.getEnemyPokemon(); - this.scene.ui.showText(this.getEncounterMessage(), null, () => { - const localizationKey = "battleSpecDialogue:encounter"; - if (this.scene.ui.shouldSkipDialogue(localizationKey)) { + case BattleSpec.FINAL_BOSS: + const enemy = this.scene.getEnemyPokemon(); + this.scene.ui.showText(this.getEncounterMessage(), null, () => { + const localizationKey = "battleSpecDialogue:encounter"; + if (this.scene.ui.shouldSkipDialogue(localizationKey)) { // Logging mirrors logging found in dialogue-ui-handler - console.log(`Dialogue ${localizationKey} skipped`); - this.doEncounterCommon(false); - } else { - const count = 5643853 + this.scene.gameData.gameStats.classicSessionsPlayed; - // The line below checks if an English ordinal is necessary or not based on whether an entry for encounterLocalizationKey exists in the language or not. - const ordinalUsed = !i18next.exists(localizationKey, { fallbackLng: []}) || i18next.resolvedLanguage === "en" ? i18next.t("battleSpecDialogue:key", { count: count, ordinal: true }) : ""; - const cycleCount = count.toLocaleString() + ordinalUsed; - const genderIndex = this.scene.gameData.gender ?? PlayerGender.UNSET; - const genderStr = PlayerGender[genderIndex].toLowerCase(); - const encounterDialogue = i18next.t(localizationKey, { context: genderStr, cycleCount: cycleCount }); - if (!this.scene.gameData.getSeenDialogues()[localizationKey]) { - this.scene.gameData.saveSeenDialogue(localizationKey); - } - this.scene.ui.showDialogue(encounterDialogue, enemy?.species.name, null, () => { + console.log(`Dialogue ${localizationKey} skipped`); this.doEncounterCommon(false); - }); - } - }, 1500, true); - return true; + } else { + const count = 5643853 + this.scene.gameData.gameStats.classicSessionsPlayed; + // The line below checks if an English ordinal is necessary or not based on whether an entry for encounterLocalizationKey exists in the language or not. + const ordinalUsed = !i18next.exists(localizationKey, { fallbackLng: []}) || i18next.resolvedLanguage === "en" ? i18next.t("battleSpecDialogue:key", { count: count, ordinal: true }) : ""; + const cycleCount = count.toLocaleString() + ordinalUsed; + const genderIndex = this.scene.gameData.gender ?? PlayerGender.UNSET; + const genderStr = PlayerGender[genderIndex].toLowerCase(); + const encounterDialogue = i18next.t(localizationKey, { context: genderStr, cycleCount: cycleCount }); + if (!this.scene.gameData.getSeenDialogues()[localizationKey]) { + this.scene.gameData.saveSeenDialogue(localizationKey); + } + this.scene.ui.showDialogue(encounterDialogue, enemy?.species.name, null, () => { + this.doEncounterCommon(false); + }); + } + }, 1500, true); + return true; } return false; } diff --git a/src/phases/faint-phase.ts b/src/phases/faint-phase.ts index 95105337f60..eee1fd52938 100644 --- a/src/phases/faint-phase.ts +++ b/src/phases/faint-phase.ts @@ -179,19 +179,19 @@ export class FaintPhase extends PokemonPhase { tryOverrideForBattleSpec(): boolean { switch (this.scene.currentBattle.battleSpec) { - case BattleSpec.FINAL_BOSS: - if (!this.player) { - const enemy = this.getPokemon(); - if (enemy.formIndex) { - this.scene.ui.showDialogue(battleSpecDialogue[BattleSpec.FINAL_BOSS].secondStageWin, enemy.species.name, null, () => this.doFaint()); - } else { + case BattleSpec.FINAL_BOSS: + if (!this.player) { + const enemy = this.getPokemon(); + if (enemy.formIndex) { + this.scene.ui.showDialogue(battleSpecDialogue[BattleSpec.FINAL_BOSS].secondStageWin, enemy.species.name, null, () => this.doFaint()); + } else { // Final boss' HP threshold has been bypassed; cancel faint and force check for 2nd phase - enemy.hp++; - this.scene.unshiftPhase(new DamagePhase(this.scene, enemy.getBattlerIndex(), 0, HitResult.OTHER)); - this.end(); + enemy.hp++; + this.scene.unshiftPhase(new DamagePhase(this.scene, enemy.getBattlerIndex(), 0, HitResult.OTHER)); + this.end(); + } + return true; } - return true; - } } return false; diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index f50cfbd78ac..0af61918636 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -167,23 +167,23 @@ export class MovePhase extends BattlePhase { let healed = false; switch (this.pokemon.status.effect) { - case StatusEffect.PARALYSIS: - if (!this.pokemon.randSeedInt(4)) { - activated = true; - this.cancelled = true; - } - break; - case StatusEffect.SLEEP: - applyMoveAttrs(BypassSleepAttr, this.pokemon, null, this.move.getMove()); - healed = this.pokemon.status.turnCount === this.pokemon.status.cureTurn; - activated = !healed && !this.pokemon.getTag(BattlerTagType.BYPASS_SLEEP); - this.cancelled = activated; - break; - case StatusEffect.FREEZE: - healed = !!this.move.getMove().findAttr(attr => attr instanceof HealStatusEffectAttr && attr.selfTarget && attr.isOfEffect(StatusEffect.FREEZE)) || !this.pokemon.randSeedInt(5); - activated = !healed; - this.cancelled = activated; - break; + case StatusEffect.PARALYSIS: + if (!this.pokemon.randSeedInt(4)) { + activated = true; + this.cancelled = true; + } + break; + case StatusEffect.SLEEP: + applyMoveAttrs(BypassSleepAttr, this.pokemon, null, this.move.getMove()); + healed = this.pokemon.status.turnCount === this.pokemon.status.cureTurn; + activated = !healed && !this.pokemon.getTag(BattlerTagType.BYPASS_SLEEP); + this.cancelled = activated; + break; + case StatusEffect.FREEZE: + healed = !!this.move.getMove().findAttr(attr => attr instanceof HealStatusEffectAttr && attr.selfTarget && attr.isOfEffect(StatusEffect.FREEZE)) || !this.pokemon.randSeedInt(5); + activated = !healed; + this.cancelled = activated; + break; } if (activated) { diff --git a/src/phases/pokemon-anim-phase.ts b/src/phases/pokemon-anim-phase.ts index 6f1bfe8bc18..26ae11d1026 100644 --- a/src/phases/pokemon-anim-phase.ts +++ b/src/phases/pokemon-anim-phase.ts @@ -25,20 +25,20 @@ export class PokemonAnimPhase extends BattlePhase { super.start(); switch (this.key) { - case PokemonAnimType.SUBSTITUTE_ADD: - this.doSubstituteAddAnim(); - break; - case PokemonAnimType.SUBSTITUTE_PRE_MOVE: - this.doSubstitutePreMoveAnim(); - break; - case PokemonAnimType.SUBSTITUTE_POST_MOVE: - this.doSubstitutePostMoveAnim(); - break; - case PokemonAnimType.SUBSTITUTE_REMOVE: - this.doSubstituteRemoveAnim(); - break; - default: - this.end(); + case PokemonAnimType.SUBSTITUTE_ADD: + this.doSubstituteAddAnim(); + break; + case PokemonAnimType.SUBSTITUTE_PRE_MOVE: + this.doSubstitutePreMoveAnim(); + break; + case PokemonAnimType.SUBSTITUTE_POST_MOVE: + this.doSubstitutePostMoveAnim(); + break; + case PokemonAnimType.SUBSTITUTE_REMOVE: + this.doSubstituteRemoveAnim(); + break; + default: + this.end(); } } diff --git a/src/phases/post-turn-status-effect-phase.ts b/src/phases/post-turn-status-effect-phase.ts index 285bbddde88..06681b733f0 100644 --- a/src/phases/post-turn-status-effect-phase.ts +++ b/src/phases/post-turn-status-effect-phase.ts @@ -26,16 +26,16 @@ export class PostTurnStatusEffectPhase extends PokemonPhase { this.scene.queueMessage(getStatusEffectActivationText(pokemon.status.effect, getPokemonNameWithAffix(pokemon))); const damage = new Utils.NumberHolder(0); switch (pokemon.status.effect) { - case StatusEffect.POISON: - damage.value = Math.max(pokemon.getMaxHp() >> 3, 1); - break; - case StatusEffect.TOXIC: - damage.value = Math.max(Math.floor((pokemon.getMaxHp() / 16) * pokemon.status.turnCount), 1); - break; - case StatusEffect.BURN: - damage.value = Math.max(pokemon.getMaxHp() >> 4, 1); - applyAbAttrs(ReduceBurnDamageAbAttr, pokemon, null, false, damage); - break; + case StatusEffect.POISON: + damage.value = Math.max(pokemon.getMaxHp() >> 3, 1); + break; + case StatusEffect.TOXIC: + damage.value = Math.max(Math.floor((pokemon.getMaxHp() / 16) * pokemon.status.turnCount), 1); + break; + case StatusEffect.BURN: + damage.value = Math.max(pokemon.getMaxHp() >> 4, 1); + applyAbAttrs(ReduceBurnDamageAbAttr, pokemon, null, false, damage); + break; } if (damage.value) { // Set preventEndure flag to avoid pokemon surviving thanks to focus band, sturdy, endure ... diff --git a/src/phases/select-modifier-phase.ts b/src/phases/select-modifier-phase.ts index f9b3e978923..38d5cfb4a10 100644 --- a/src/phases/select-modifier-phase.ts +++ b/src/phases/select-modifier-phase.ts @@ -77,78 +77,78 @@ export class SelectModifierPhase extends BattlePhase { let cost: integer; const rerollCost = this.getRerollCost(this.scene.lockModifierTiers); switch (rowCursor) { - case 0: - switch (cursor) { case 0: - if (rerollCost < 0 || this.scene.money < rerollCost) { - this.scene.ui.playError(); - return false; - } else { - this.scene.reroll = true; - this.scene.unshiftPhase(new SelectModifierPhase(this.scene, this.rerollCount + 1, this.typeOptions.map(o => o.type?.tier).filter(t => t !== undefined) as ModifierTier[])); - this.scene.ui.clearText(); - this.scene.ui.setMode(Mode.MESSAGE).then(() => super.end()); - if (!Overrides.WAIVE_ROLL_FEE_OVERRIDE) { - this.scene.money -= rerollCost; - this.scene.updateMoneyText(); - this.scene.animateMoneyChanged(false); - } - this.scene.playSound("se/buy"); - } - break; - case 1: - this.scene.ui.setModeWithoutClear(Mode.PARTY, PartyUiMode.MODIFIER_TRANSFER, -1, (fromSlotIndex: integer, itemIndex: integer, itemQuantity: integer, toSlotIndex: integer) => { - if (toSlotIndex !== undefined && fromSlotIndex < 6 && toSlotIndex < 6 && fromSlotIndex !== toSlotIndex && itemIndex > -1) { - const itemModifiers = this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier + switch (cursor) { + case 0: + if (rerollCost < 0 || this.scene.money < rerollCost) { + this.scene.ui.playError(); + return false; + } else { + this.scene.reroll = true; + this.scene.unshiftPhase(new SelectModifierPhase(this.scene, this.rerollCount + 1, this.typeOptions.map(o => o.type?.tier).filter(t => t !== undefined) as ModifierTier[])); + this.scene.ui.clearText(); + this.scene.ui.setMode(Mode.MESSAGE).then(() => super.end()); + if (!Overrides.WAIVE_ROLL_FEE_OVERRIDE) { + this.scene.money -= rerollCost; + this.scene.updateMoneyText(); + this.scene.animateMoneyChanged(false); + } + this.scene.playSound("se/buy"); + } + break; + case 1: + this.scene.ui.setModeWithoutClear(Mode.PARTY, PartyUiMode.MODIFIER_TRANSFER, -1, (fromSlotIndex: integer, itemIndex: integer, itemQuantity: integer, toSlotIndex: integer) => { + if (toSlotIndex !== undefined && fromSlotIndex < 6 && toSlotIndex < 6 && fromSlotIndex !== toSlotIndex && itemIndex > -1) { + const itemModifiers = this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.isTransferable && m.pokemonId === party[fromSlotIndex].id) as PokemonHeldItemModifier[]; - const itemModifier = itemModifiers[itemIndex]; - this.scene.tryTransferHeldItemModifier(itemModifier, party[toSlotIndex], true, itemQuantity); - } else { - this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), this.typeOptions, modifierSelectCallback, this.getRerollCost(this.scene.lockModifierTiers)); - } - }, PartyUiHandler.FilterItemMaxStacks); - break; - case 2: - this.scene.ui.setModeWithoutClear(Mode.PARTY, PartyUiMode.CHECK, -1, () => { - this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), this.typeOptions, modifierSelectCallback, this.getRerollCost(this.scene.lockModifierTiers)); - }); - break; - case 3: - if (rerollCost < 0) { - // Reroll lock button is also disabled when reroll is disabled - this.scene.ui.playError(); - return false; + const itemModifier = itemModifiers[itemIndex]; + this.scene.tryTransferHeldItemModifier(itemModifier, party[toSlotIndex], true, itemQuantity); + } else { + this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), this.typeOptions, modifierSelectCallback, this.getRerollCost(this.scene.lockModifierTiers)); + } + }, PartyUiHandler.FilterItemMaxStacks); + break; + case 2: + this.scene.ui.setModeWithoutClear(Mode.PARTY, PartyUiMode.CHECK, -1, () => { + this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), this.typeOptions, modifierSelectCallback, this.getRerollCost(this.scene.lockModifierTiers)); + }); + break; + case 3: + if (rerollCost < 0) { + // Reroll lock button is also disabled when reroll is disabled + this.scene.ui.playError(); + return false; + } + this.scene.lockModifierTiers = !this.scene.lockModifierTiers; + const uiHandler = this.scene.ui.getHandler() as ModifierSelectUiHandler; + uiHandler.setRerollCost(this.getRerollCost(this.scene.lockModifierTiers)); + uiHandler.updateLockRaritiesText(); + uiHandler.updateRerollCostText(); + return false; } - this.scene.lockModifierTiers = !this.scene.lockModifierTiers; - const uiHandler = this.scene.ui.getHandler() as ModifierSelectUiHandler; - uiHandler.setRerollCost(this.getRerollCost(this.scene.lockModifierTiers)); - uiHandler.updateLockRaritiesText(); - uiHandler.updateRerollCostText(); - return false; - } - return true; - case 1: - if (this.typeOptions.length === 0) { - this.scene.ui.clearText(); - this.scene.ui.setMode(Mode.MESSAGE); - super.end(); return true; - } - if (this.typeOptions[cursor].type) { - modifierType = this.typeOptions[cursor].type; - } - break; - default: - const shopOptions = getPlayerShopModifierTypeOptionsForWave(this.scene.currentBattle.waveIndex, this.scene.getWaveMoneyAmount(1)); - const shopOption = shopOptions[rowCursor > 2 || shopOptions.length <= SHOP_OPTIONS_ROW_LIMIT ? cursor : cursor + SHOP_OPTIONS_ROW_LIMIT]; - if (shopOption.type) { - modifierType = shopOption.type; - } - // Apply Black Sludge to healing item cost - const healingItemCost = new NumberHolder(shopOption.cost); - this.scene.applyModifier(HealShopCostModifier, true, healingItemCost); - cost = healingItemCost.value; - break; + case 1: + if (this.typeOptions.length === 0) { + this.scene.ui.clearText(); + this.scene.ui.setMode(Mode.MESSAGE); + super.end(); + return true; + } + if (this.typeOptions[cursor].type) { + modifierType = this.typeOptions[cursor].type; + } + break; + default: + const shopOptions = getPlayerShopModifierTypeOptionsForWave(this.scene.currentBattle.waveIndex, this.scene.getWaveMoneyAmount(1)); + const shopOption = shopOptions[rowCursor > 2 || shopOptions.length <= SHOP_OPTIONS_ROW_LIMIT ? cursor : cursor + SHOP_OPTIONS_ROW_LIMIT]; + if (shopOption.type) { + modifierType = shopOption.type; + } + // Apply Black Sludge to healing item cost + const healingItemCost = new NumberHolder(shopOption.cost); + this.scene.applyModifier(HealShopCostModifier, true, healingItemCost); + cost = healingItemCost.value; + break; } if (cost! && (this.scene.money < cost) && !Overrides.WAIVE_ROLL_FEE_OVERRIDE) { // TODO: is the bang on cost correct? diff --git a/src/phases/turn-start-phase.ts b/src/phases/turn-start-phase.ts index 25c079007fd..497d449912f 100644 --- a/src/phases/turn-start-phase.ts +++ b/src/phases/turn-start-phase.ts @@ -152,55 +152,55 @@ export class TurnStartPhase extends FieldPhase { } switch (turnCommand?.command) { - case Command.FIGHT: - const queuedMove = turnCommand.move; - pokemon.turnData.order = orderIndex++; - if (!queuedMove) { - continue; - } - const move = pokemon.getMoveset().find(m => m?.moveId === queuedMove.move && m?.ppUsed < m?.getMovePp()) || new PokemonMove(queuedMove.move); - if (move.getMove().hasAttr(MoveHeaderAttr)) { - this.scene.unshiftPhase(new MoveHeaderPhase(this.scene, pokemon, move)); - } - if (pokemon.isPlayer()) { - if (turnCommand.cursor === -1) { - this.scene.pushPhase(new MovePhase(this.scene, pokemon, turnCommand.targets || turnCommand.move!.targets, move));//TODO: is the bang correct here? - } else { - const playerPhase = new MovePhase(this.scene, pokemon, turnCommand.targets || turnCommand.move!.targets, move, false, queuedMove.ignorePP);//TODO: is the bang correct here? - this.scene.pushPhase(playerPhase); + case Command.FIGHT: + const queuedMove = turnCommand.move; + pokemon.turnData.order = orderIndex++; + if (!queuedMove) { + continue; } - } else { - this.scene.pushPhase(new MovePhase(this.scene, pokemon, turnCommand.targets || turnCommand.move!.targets, move, false, queuedMove.ignorePP));//TODO: is the bang correct here? - } - break; - case Command.BALL: - this.scene.unshiftPhase(new AttemptCapturePhase(this.scene, turnCommand.targets![0] % 2, turnCommand.cursor!));//TODO: is the bang correct here? - break; - case Command.POKEMON: - const switchType = turnCommand.args?.[0] ? SwitchType.BATON_PASS : SwitchType.SWITCH; - this.scene.unshiftPhase(new SwitchSummonPhase(this.scene, switchType, pokemon.getFieldIndex(), turnCommand.cursor!, true, pokemon.isPlayer())); - break; - case Command.RUN: - let runningPokemon = pokemon; - if (this.scene.currentBattle.double) { - const playerActivePokemon = field.filter(pokemon => { - if (!!pokemon) { - return pokemon.isPlayer() && pokemon.isActive(); + const move = pokemon.getMoveset().find(m => m?.moveId === queuedMove.move && m?.ppUsed < m?.getMovePp()) || new PokemonMove(queuedMove.move); + if (move.getMove().hasAttr(MoveHeaderAttr)) { + this.scene.unshiftPhase(new MoveHeaderPhase(this.scene, pokemon, move)); + } + if (pokemon.isPlayer()) { + if (turnCommand.cursor === -1) { + this.scene.pushPhase(new MovePhase(this.scene, pokemon, turnCommand.targets || turnCommand.move!.targets, move));//TODO: is the bang correct here? } else { - return; + const playerPhase = new MovePhase(this.scene, pokemon, turnCommand.targets || turnCommand.move!.targets, move, false, queuedMove.ignorePP);//TODO: is the bang correct here? + this.scene.pushPhase(playerPhase); } - }); - // if only one pokemon is alive, use that one - if (playerActivePokemon.length > 1) { - // find which active pokemon has faster speed - const fasterPokemon = playerActivePokemon[0].getStat(Stat.SPD) > playerActivePokemon[1].getStat(Stat.SPD) ? playerActivePokemon[0] : playerActivePokemon[1]; - // check if either active pokemon has the ability "Run Away" - const hasRunAway = playerActivePokemon.find(p => p.hasAbility(Abilities.RUN_AWAY)); - runningPokemon = hasRunAway !== undefined ? hasRunAway : fasterPokemon; + } else { + this.scene.pushPhase(new MovePhase(this.scene, pokemon, turnCommand.targets || turnCommand.move!.targets, move, false, queuedMove.ignorePP));//TODO: is the bang correct here? } - } - this.scene.unshiftPhase(new AttemptRunPhase(this.scene, runningPokemon.getFieldIndex())); - break; + break; + case Command.BALL: + this.scene.unshiftPhase(new AttemptCapturePhase(this.scene, turnCommand.targets![0] % 2, turnCommand.cursor!));//TODO: is the bang correct here? + break; + case Command.POKEMON: + const switchType = turnCommand.args?.[0] ? SwitchType.BATON_PASS : SwitchType.SWITCH; + this.scene.unshiftPhase(new SwitchSummonPhase(this.scene, switchType, pokemon.getFieldIndex(), turnCommand.cursor!, true, pokemon.isPlayer())); + break; + case Command.RUN: + let runningPokemon = pokemon; + if (this.scene.currentBattle.double) { + const playerActivePokemon = field.filter(pokemon => { + if (!!pokemon) { + return pokemon.isPlayer() && pokemon.isActive(); + } else { + return; + } + }); + // if only one pokemon is alive, use that one + if (playerActivePokemon.length > 1) { + // find which active pokemon has faster speed + const fasterPokemon = playerActivePokemon[0].getStat(Stat.SPD) > playerActivePokemon[1].getStat(Stat.SPD) ? playerActivePokemon[0] : playerActivePokemon[1]; + // check if either active pokemon has the ability "Run Away" + const hasRunAway = playerActivePokemon.find(p => p.hasAbility(Abilities.RUN_AWAY)); + runningPokemon = hasRunAway !== undefined ? hasRunAway : fasterPokemon; + } + } + this.scene.unshiftPhase(new AttemptRunPhase(this.scene, runningPokemon.getFieldIndex())); + break; } } diff --git a/src/system/achv.ts b/src/system/achv.ts index 7329dd41fd5..366813328e2 100644 --- a/src/system/achv.ts +++ b/src/system/achv.ts @@ -156,133 +156,133 @@ export function getAchievementDescription(localizationKey: string): string { const genderStr = PlayerGender[genderIndex].toLowerCase(); switch (localizationKey) { - case "10K_MONEY": - return i18next.t("achv:MoneyAchv.description", { context: genderStr, "moneyAmount": achvs._10K_MONEY.moneyAmount.toLocaleString("en-US") }); - case "100K_MONEY": - return i18next.t("achv:MoneyAchv.description", { context: genderStr, "moneyAmount": achvs._100K_MONEY.moneyAmount.toLocaleString("en-US") }); - case "1M_MONEY": - return i18next.t("achv:MoneyAchv.description", { context: genderStr, "moneyAmount": achvs._1M_MONEY.moneyAmount.toLocaleString("en-US") }); - case "10M_MONEY": - return i18next.t("achv:MoneyAchv.description", { context: genderStr, "moneyAmount": achvs._10M_MONEY.moneyAmount.toLocaleString("en-US") }); - case "250_DMG": - return i18next.t("achv:DamageAchv.description", { context: genderStr, "damageAmount": achvs._250_DMG.damageAmount.toLocaleString("en-US") }); - case "1000_DMG": - return i18next.t("achv:DamageAchv.description", { context: genderStr, "damageAmount": achvs._1000_DMG.damageAmount.toLocaleString("en-US") }); - case "2500_DMG": - return i18next.t("achv:DamageAchv.description", { context: genderStr, "damageAmount": achvs._2500_DMG.damageAmount.toLocaleString("en-US") }); - case "10000_DMG": - return i18next.t("achv:DamageAchv.description", { context: genderStr, "damageAmount": achvs._10000_DMG.damageAmount.toLocaleString("en-US") }); - case "250_HEAL": - return i18next.t("achv:HealAchv.description", { context: genderStr, "healAmount": achvs._250_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t(getShortenedStatKey(Stat.HP)) }); - case "1000_HEAL": - return i18next.t("achv:HealAchv.description", { context: genderStr, "healAmount": achvs._1000_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t(getShortenedStatKey(Stat.HP)) }); - case "2500_HEAL": - return i18next.t("achv:HealAchv.description", { context: genderStr, "healAmount": achvs._2500_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t(getShortenedStatKey(Stat.HP)) }); - case "10000_HEAL": - return i18next.t("achv:HealAchv.description", { context: genderStr, "healAmount": achvs._10000_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t(getShortenedStatKey(Stat.HP)) }); - case "LV_100": - return i18next.t("achv:LevelAchv.description", { context: genderStr, "level": achvs.LV_100.level }); - case "LV_250": - return i18next.t("achv:LevelAchv.description", { context: genderStr, "level": achvs.LV_250.level }); - case "LV_1000": - return i18next.t("achv:LevelAchv.description", { context: genderStr, "level": achvs.LV_1000.level }); - case "10_RIBBONS": - return i18next.t("achv:RibbonAchv.description", { context: genderStr, "ribbonAmount": achvs._10_RIBBONS.ribbonAmount.toLocaleString("en-US") }); - case "25_RIBBONS": - return i18next.t("achv:RibbonAchv.description", { context: genderStr, "ribbonAmount": achvs._25_RIBBONS.ribbonAmount.toLocaleString("en-US") }); - case "50_RIBBONS": - return i18next.t("achv:RibbonAchv.description", { context: genderStr, "ribbonAmount": achvs._50_RIBBONS.ribbonAmount.toLocaleString("en-US") }); - case "75_RIBBONS": - return i18next.t("achv:RibbonAchv.description", { context: genderStr, "ribbonAmount": achvs._75_RIBBONS.ribbonAmount.toLocaleString("en-US") }); - case "100_RIBBONS": - return i18next.t("achv:RibbonAchv.description", { context: genderStr, "ribbonAmount": achvs._100_RIBBONS.ribbonAmount.toLocaleString("en-US") }); - case "TRANSFER_MAX_STAT_STAGE": - return i18next.t("achv:TRANSFER_MAX_STAT_STAGE.description", { context: genderStr }); - case "MAX_FRIENDSHIP": - return i18next.t("achv:MAX_FRIENDSHIP.description", { context: genderStr }); - case "MEGA_EVOLVE": - return i18next.t("achv:MEGA_EVOLVE.description", { context: genderStr }); - case "GIGANTAMAX": - return i18next.t("achv:GIGANTAMAX.description", { context: genderStr }); - case "TERASTALLIZE": - return i18next.t("achv:TERASTALLIZE.description", { context: genderStr }); - case "STELLAR_TERASTALLIZE": - return i18next.t("achv:STELLAR_TERASTALLIZE.description", { context: genderStr }); - case "SPLICE": - return i18next.t("achv:SPLICE.description", { context: genderStr }); - case "MINI_BLACK_HOLE": - return i18next.t("achv:MINI_BLACK_HOLE.description", { context: genderStr }); - case "CATCH_MYTHICAL": - return i18next.t("achv:CATCH_MYTHICAL.description", { context: genderStr }); - case "CATCH_SUB_LEGENDARY": - return i18next.t("achv:CATCH_SUB_LEGENDARY.description", { context: genderStr }); - case "CATCH_LEGENDARY": - return i18next.t("achv:CATCH_LEGENDARY.description", { context: genderStr }); - case "SEE_SHINY": - return i18next.t("achv:SEE_SHINY.description", { context: genderStr }); - case "SHINY_PARTY": - return i18next.t("achv:SHINY_PARTY.description", { context: genderStr }); - case "HATCH_MYTHICAL": - return i18next.t("achv:HATCH_MYTHICAL.description", { context: genderStr }); - case "HATCH_SUB_LEGENDARY": - return i18next.t("achv:HATCH_SUB_LEGENDARY.description", { context: genderStr }); - case "HATCH_LEGENDARY": - return i18next.t("achv:HATCH_LEGENDARY.description", { context: genderStr }); - case "HATCH_SHINY": - return i18next.t("achv:HATCH_SHINY.description", { context: genderStr }); - case "HIDDEN_ABILITY": - return i18next.t("achv:HIDDEN_ABILITY.description", { context: genderStr }); - case "PERFECT_IVS": - return i18next.t("achv:PERFECT_IVS.description", { context: genderStr }); - case "CLASSIC_VICTORY": - return i18next.t("achv:CLASSIC_VICTORY.description", { context: genderStr }); - case "UNEVOLVED_CLASSIC_VICTORY": - return i18next.t("achv:UNEVOLVED_CLASSIC_VICTORY.description", { context: genderStr }); - case "MONO_GEN_ONE": - return i18next.t("achv:MONO_GEN_ONE.description", { context: genderStr }); - case "MONO_GEN_TWO": - return i18next.t("achv:MONO_GEN_TWO.description", { context: genderStr }); - case "MONO_GEN_THREE": - return i18next.t("achv:MONO_GEN_THREE.description", { context: genderStr }); - case "MONO_GEN_FOUR": - return i18next.t("achv:MONO_GEN_FOUR.description", { context: genderStr }); - case "MONO_GEN_FIVE": - return i18next.t("achv:MONO_GEN_FIVE.description", { context: genderStr }); - case "MONO_GEN_SIX": - return i18next.t("achv:MONO_GEN_SIX.description", { context: genderStr }); - case "MONO_GEN_SEVEN": - return i18next.t("achv:MONO_GEN_SEVEN.description", { context: genderStr }); - case "MONO_GEN_EIGHT": - return i18next.t("achv:MONO_GEN_EIGHT.description", { context: genderStr }); - case "MONO_GEN_NINE": - return i18next.t("achv:MONO_GEN_NINE.description", { context: genderStr }); - case "MONO_NORMAL": - case "MONO_FIGHTING": - case "MONO_FLYING": - case "MONO_POISON": - case "MONO_GROUND": - case "MONO_ROCK": - case "MONO_BUG": - case "MONO_GHOST": - case "MONO_STEEL": - case "MONO_FIRE": - case "MONO_WATER": - case "MONO_GRASS": - case "MONO_ELECTRIC": - case "MONO_PSYCHIC": - case "MONO_ICE": - case "MONO_DRAGON": - case "MONO_DARK": - case "MONO_FAIRY": - return i18next.t("achv:MonoType.description", { context: genderStr, "type": i18next.t(`pokemonInfo:Type.${localizationKey.slice(5)}`) }); - case "FRESH_START": - return i18next.t("achv:FRESH_START.description", { context: genderStr }); - case "INVERSE_BATTLE": - return i18next.t("achv:INVERSE_BATTLE.description", { context: genderStr }); - case "BREEDERS_IN_SPACE": - return i18next.t("achv:BREEDERS_IN_SPACE.description", { context: genderStr }); - default: - return ""; + case "10K_MONEY": + return i18next.t("achv:MoneyAchv.description", { context: genderStr, "moneyAmount": achvs._10K_MONEY.moneyAmount.toLocaleString("en-US") }); + case "100K_MONEY": + return i18next.t("achv:MoneyAchv.description", { context: genderStr, "moneyAmount": achvs._100K_MONEY.moneyAmount.toLocaleString("en-US") }); + case "1M_MONEY": + return i18next.t("achv:MoneyAchv.description", { context: genderStr, "moneyAmount": achvs._1M_MONEY.moneyAmount.toLocaleString("en-US") }); + case "10M_MONEY": + return i18next.t("achv:MoneyAchv.description", { context: genderStr, "moneyAmount": achvs._10M_MONEY.moneyAmount.toLocaleString("en-US") }); + case "250_DMG": + return i18next.t("achv:DamageAchv.description", { context: genderStr, "damageAmount": achvs._250_DMG.damageAmount.toLocaleString("en-US") }); + case "1000_DMG": + return i18next.t("achv:DamageAchv.description", { context: genderStr, "damageAmount": achvs._1000_DMG.damageAmount.toLocaleString("en-US") }); + case "2500_DMG": + return i18next.t("achv:DamageAchv.description", { context: genderStr, "damageAmount": achvs._2500_DMG.damageAmount.toLocaleString("en-US") }); + case "10000_DMG": + return i18next.t("achv:DamageAchv.description", { context: genderStr, "damageAmount": achvs._10000_DMG.damageAmount.toLocaleString("en-US") }); + case "250_HEAL": + return i18next.t("achv:HealAchv.description", { context: genderStr, "healAmount": achvs._250_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t(getShortenedStatKey(Stat.HP)) }); + case "1000_HEAL": + return i18next.t("achv:HealAchv.description", { context: genderStr, "healAmount": achvs._1000_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t(getShortenedStatKey(Stat.HP)) }); + case "2500_HEAL": + return i18next.t("achv:HealAchv.description", { context: genderStr, "healAmount": achvs._2500_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t(getShortenedStatKey(Stat.HP)) }); + case "10000_HEAL": + return i18next.t("achv:HealAchv.description", { context: genderStr, "healAmount": achvs._10000_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t(getShortenedStatKey(Stat.HP)) }); + case "LV_100": + return i18next.t("achv:LevelAchv.description", { context: genderStr, "level": achvs.LV_100.level }); + case "LV_250": + return i18next.t("achv:LevelAchv.description", { context: genderStr, "level": achvs.LV_250.level }); + case "LV_1000": + return i18next.t("achv:LevelAchv.description", { context: genderStr, "level": achvs.LV_1000.level }); + case "10_RIBBONS": + return i18next.t("achv:RibbonAchv.description", { context: genderStr, "ribbonAmount": achvs._10_RIBBONS.ribbonAmount.toLocaleString("en-US") }); + case "25_RIBBONS": + return i18next.t("achv:RibbonAchv.description", { context: genderStr, "ribbonAmount": achvs._25_RIBBONS.ribbonAmount.toLocaleString("en-US") }); + case "50_RIBBONS": + return i18next.t("achv:RibbonAchv.description", { context: genderStr, "ribbonAmount": achvs._50_RIBBONS.ribbonAmount.toLocaleString("en-US") }); + case "75_RIBBONS": + return i18next.t("achv:RibbonAchv.description", { context: genderStr, "ribbonAmount": achvs._75_RIBBONS.ribbonAmount.toLocaleString("en-US") }); + case "100_RIBBONS": + return i18next.t("achv:RibbonAchv.description", { context: genderStr, "ribbonAmount": achvs._100_RIBBONS.ribbonAmount.toLocaleString("en-US") }); + case "TRANSFER_MAX_STAT_STAGE": + return i18next.t("achv:TRANSFER_MAX_STAT_STAGE.description", { context: genderStr }); + case "MAX_FRIENDSHIP": + return i18next.t("achv:MAX_FRIENDSHIP.description", { context: genderStr }); + case "MEGA_EVOLVE": + return i18next.t("achv:MEGA_EVOLVE.description", { context: genderStr }); + case "GIGANTAMAX": + return i18next.t("achv:GIGANTAMAX.description", { context: genderStr }); + case "TERASTALLIZE": + return i18next.t("achv:TERASTALLIZE.description", { context: genderStr }); + case "STELLAR_TERASTALLIZE": + return i18next.t("achv:STELLAR_TERASTALLIZE.description", { context: genderStr }); + case "SPLICE": + return i18next.t("achv:SPLICE.description", { context: genderStr }); + case "MINI_BLACK_HOLE": + return i18next.t("achv:MINI_BLACK_HOLE.description", { context: genderStr }); + case "CATCH_MYTHICAL": + return i18next.t("achv:CATCH_MYTHICAL.description", { context: genderStr }); + case "CATCH_SUB_LEGENDARY": + return i18next.t("achv:CATCH_SUB_LEGENDARY.description", { context: genderStr }); + case "CATCH_LEGENDARY": + return i18next.t("achv:CATCH_LEGENDARY.description", { context: genderStr }); + case "SEE_SHINY": + return i18next.t("achv:SEE_SHINY.description", { context: genderStr }); + case "SHINY_PARTY": + return i18next.t("achv:SHINY_PARTY.description", { context: genderStr }); + case "HATCH_MYTHICAL": + return i18next.t("achv:HATCH_MYTHICAL.description", { context: genderStr }); + case "HATCH_SUB_LEGENDARY": + return i18next.t("achv:HATCH_SUB_LEGENDARY.description", { context: genderStr }); + case "HATCH_LEGENDARY": + return i18next.t("achv:HATCH_LEGENDARY.description", { context: genderStr }); + case "HATCH_SHINY": + return i18next.t("achv:HATCH_SHINY.description", { context: genderStr }); + case "HIDDEN_ABILITY": + return i18next.t("achv:HIDDEN_ABILITY.description", { context: genderStr }); + case "PERFECT_IVS": + return i18next.t("achv:PERFECT_IVS.description", { context: genderStr }); + case "CLASSIC_VICTORY": + return i18next.t("achv:CLASSIC_VICTORY.description", { context: genderStr }); + case "UNEVOLVED_CLASSIC_VICTORY": + return i18next.t("achv:UNEVOLVED_CLASSIC_VICTORY.description", { context: genderStr }); + case "MONO_GEN_ONE": + return i18next.t("achv:MONO_GEN_ONE.description", { context: genderStr }); + case "MONO_GEN_TWO": + return i18next.t("achv:MONO_GEN_TWO.description", { context: genderStr }); + case "MONO_GEN_THREE": + return i18next.t("achv:MONO_GEN_THREE.description", { context: genderStr }); + case "MONO_GEN_FOUR": + return i18next.t("achv:MONO_GEN_FOUR.description", { context: genderStr }); + case "MONO_GEN_FIVE": + return i18next.t("achv:MONO_GEN_FIVE.description", { context: genderStr }); + case "MONO_GEN_SIX": + return i18next.t("achv:MONO_GEN_SIX.description", { context: genderStr }); + case "MONO_GEN_SEVEN": + return i18next.t("achv:MONO_GEN_SEVEN.description", { context: genderStr }); + case "MONO_GEN_EIGHT": + return i18next.t("achv:MONO_GEN_EIGHT.description", { context: genderStr }); + case "MONO_GEN_NINE": + return i18next.t("achv:MONO_GEN_NINE.description", { context: genderStr }); + case "MONO_NORMAL": + case "MONO_FIGHTING": + case "MONO_FLYING": + case "MONO_POISON": + case "MONO_GROUND": + case "MONO_ROCK": + case "MONO_BUG": + case "MONO_GHOST": + case "MONO_STEEL": + case "MONO_FIRE": + case "MONO_WATER": + case "MONO_GRASS": + case "MONO_ELECTRIC": + case "MONO_PSYCHIC": + case "MONO_ICE": + case "MONO_DRAGON": + case "MONO_DARK": + case "MONO_FAIRY": + return i18next.t("achv:MonoType.description", { context: genderStr, "type": i18next.t(`pokemonInfo:Type.${localizationKey.slice(5)}`) }); + case "FRESH_START": + return i18next.t("achv:FRESH_START.description", { context: genderStr }); + case "INVERSE_BATTLE": + return i18next.t("achv:INVERSE_BATTLE.description", { context: genderStr }); + case "BREEDERS_IN_SPACE": + return i18next.t("achv:BREEDERS_IN_SPACE.description", { context: genderStr }); + default: + return ""; } } diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 41746957d49..5f9aad63408 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -67,22 +67,22 @@ const saveKey = "x0i2O7WRiANTqPmZ"; // Temporary; secure encryption is not yet n export function getDataTypeKey(dataType: GameDataType, slotId: integer = 0): string { switch (dataType) { - case GameDataType.SYSTEM: - return "data"; - case GameDataType.SESSION: - let ret = "sessionData"; - if (slotId) { - ret += slotId; - } - return ret; - case GameDataType.SETTINGS: - return "settings"; - case GameDataType.TUTORIALS: - return "tutorials"; - case GameDataType.SEEN_DIALOGUES: - return "seenDialogues"; - case GameDataType.RUN_HISTORY: - return "runHistoryData"; + case GameDataType.SYSTEM: + return "data"; + case GameDataType.SESSION: + let ret = "sessionData"; + if (slotId) { + ret += slotId; + } + return ret; + case GameDataType.SETTINGS: + return "settings"; + case GameDataType.TUTORIALS: + return "tutorials"; + case GameDataType.SEEN_DIALOGUES: + return "seenDialogues"; + case GameDataType.RUN_HISTORY: + return "runHistoryData"; } } @@ -1374,9 +1374,9 @@ export class GameData { const dataKey: string = `${getDataTypeKey(dataType, slotId)}_${loggedInUser?.username}`; const handleData = (dataStr: string) => { switch (dataType) { - case GameDataType.SYSTEM: - dataStr = this.convertSystemDataStr(dataStr, true); - break; + case GameDataType.SYSTEM: + dataStr = this.convertSystemDataStr(dataStr, true); + break; } const encryptedData = AES.encrypt(dataStr, saveKey); const blob = new Blob([ encryptedData.toString() ], { type: "text/json" }); @@ -1434,28 +1434,28 @@ export class GameData { try { dataName = GameDataType[dataType].toLowerCase(); switch (dataType) { - case GameDataType.SYSTEM: - dataStr = this.convertSystemDataStr(dataStr); - const systemData = this.parseSystemData(dataStr); - valid = !!systemData.dexData && !!systemData.timestamp; - break; - case GameDataType.SESSION: - const sessionData = this.parseSessionData(dataStr); - valid = !!sessionData.party && !!sessionData.enemyParty && !!sessionData.timestamp; - break; - case GameDataType.RUN_HISTORY: - const data = JSON.parse(dataStr); - const keys = Object.keys(data); - dataName = i18next.t("menuUiHandler:RUN_HISTORY").toLowerCase(); - keys.forEach((key) => { - const entryKeys = Object.keys(data[key]); - valid = [ "isFavorite", "isVictory", "entry" ].every(v => entryKeys.includes(v)) && entryKeys.length === 3; - }); - break; - case GameDataType.SETTINGS: - case GameDataType.TUTORIALS: - valid = true; - break; + case GameDataType.SYSTEM: + dataStr = this.convertSystemDataStr(dataStr); + const systemData = this.parseSystemData(dataStr); + valid = !!systemData.dexData && !!systemData.timestamp; + break; + case GameDataType.SESSION: + const sessionData = this.parseSessionData(dataStr); + valid = !!sessionData.party && !!sessionData.enemyParty && !!sessionData.timestamp; + break; + case GameDataType.RUN_HISTORY: + const data = JSON.parse(dataStr); + const keys = Object.keys(data); + dataName = i18next.t("menuUiHandler:RUN_HISTORY").toLowerCase(); + keys.forEach((key) => { + const entryKeys = Object.keys(data[key]); + valid = [ "isFavorite", "isVictory", "entry" ].every(v => entryKeys.includes(v)) && entryKeys.length === 3; + }); + break; + case GameDataType.SETTINGS: + case GameDataType.TUTORIALS: + valid = true; + break; } } catch (ex) { console.error(ex); diff --git a/src/system/settings/settings-gamepad.ts b/src/system/settings/settings-gamepad.ts index c96ec36f9a5..322b2baac9e 100644 --- a/src/system/settings/settings-gamepad.ts +++ b/src/system/settings/settings-gamepad.ts @@ -82,66 +82,66 @@ export const settingGamepadBlackList = [ export function setSettingGamepad(scene: BattleScene, setting: SettingGamepad, value: integer): boolean { switch (setting) { - case SettingGamepad.Gamepad_Support: + case SettingGamepad.Gamepad_Support: // if we change the value of the gamepad support, we call a method in the inputController to // activate or deactivate the controller listener - scene.inputController.setGamepadSupport(settingGamepadOptions[setting][value] !== "Disabled"); - break; - case SettingGamepad.Button_Action: - case SettingGamepad.Button_Cancel: - case SettingGamepad.Button_Menu: - case SettingGamepad.Button_Stats: - case SettingGamepad.Button_Cycle_Shiny: - case SettingGamepad.Button_Cycle_Form: - case SettingGamepad.Button_Cycle_Gender: - case SettingGamepad.Button_Cycle_Ability: - case SettingGamepad.Button_Cycle_Nature: - case SettingGamepad.Button_Cycle_Variant: - case SettingGamepad.Button_Speed_Up: - case SettingGamepad.Button_Slow_Down: - case SettingGamepad.Button_Submit: - if (value) { - if (scene.ui) { - const cancelHandler = (success: boolean = false) : boolean => { - scene.ui.revertMode(); - (scene.ui.getHandler() as SettingsGamepadUiHandler).updateBindings(); - return success; - }; - scene.ui.setOverlayMode(Mode.GAMEPAD_BINDING, { - target: setting, - cancelHandler: cancelHandler, - }); + scene.inputController.setGamepadSupport(settingGamepadOptions[setting][value] !== "Disabled"); + break; + case SettingGamepad.Button_Action: + case SettingGamepad.Button_Cancel: + case SettingGamepad.Button_Menu: + case SettingGamepad.Button_Stats: + case SettingGamepad.Button_Cycle_Shiny: + case SettingGamepad.Button_Cycle_Form: + case SettingGamepad.Button_Cycle_Gender: + case SettingGamepad.Button_Cycle_Ability: + case SettingGamepad.Button_Cycle_Nature: + case SettingGamepad.Button_Cycle_Variant: + case SettingGamepad.Button_Speed_Up: + case SettingGamepad.Button_Slow_Down: + case SettingGamepad.Button_Submit: + if (value) { + if (scene.ui) { + const cancelHandler = (success: boolean = false) : boolean => { + scene.ui.revertMode(); + (scene.ui.getHandler() as SettingsGamepadUiHandler).updateBindings(); + return success; + }; + scene.ui.setOverlayMode(Mode.GAMEPAD_BINDING, { + target: setting, + cancelHandler: cancelHandler, + }); + } } - } - break; - case SettingGamepad.Controller: - if (value) { - const gp = scene.inputController.getGamepadsName(); - if (scene.ui && gp) { - const cancelHandler = () => { - scene.ui.revertMode(); - (scene.ui.getHandler() as SettingsGamepadUiHandler).setOptionCursor(Object.values(SettingGamepad).indexOf(SettingGamepad.Controller), 0, true); - (scene.ui.getHandler() as SettingsGamepadUiHandler).updateBindings(); + break; + case SettingGamepad.Controller: + if (value) { + const gp = scene.inputController.getGamepadsName(); + if (scene.ui && gp) { + const cancelHandler = () => { + scene.ui.revertMode(); + (scene.ui.getHandler() as SettingsGamepadUiHandler).setOptionCursor(Object.values(SettingGamepad).indexOf(SettingGamepad.Controller), 0, true); + (scene.ui.getHandler() as SettingsGamepadUiHandler).updateBindings(); + return false; + }; + const changeGamepadHandler = (gamepad: string) => { + scene.inputController.setChosenGamepad(gamepad); + cancelHandler(); + return true; + }; + scene.ui.setOverlayMode(Mode.OPTION_SELECT, { + options: [ ...gp.map((g: string) => ({ + label: truncateString(g, 30), // Truncate the gamepad name for display + handler: () => changeGamepadHandler(g) + })), { + label: "Cancel", + handler: cancelHandler, + }] + }); return false; - }; - const changeGamepadHandler = (gamepad: string) => { - scene.inputController.setChosenGamepad(gamepad); - cancelHandler(); - return true; - }; - scene.ui.setOverlayMode(Mode.OPTION_SELECT, { - options: [ ...gp.map((g: string) => ({ - label: truncateString(g, 30), // Truncate the gamepad name for display - handler: () => changeGamepadHandler(g) - })), { - label: "Cancel", - handler: cancelHandler, - }] - }); - return false; + } } - } - break; + break; } return true; diff --git a/src/system/settings/settings-keyboard.ts b/src/system/settings/settings-keyboard.ts index d7cb994aca8..97990f61c86 100644 --- a/src/system/settings/settings-keyboard.ts +++ b/src/system/settings/settings-keyboard.ts @@ -135,53 +135,53 @@ export const settingKeyboardBlackList = [ export function setSettingKeyboard(scene: BattleScene, setting: SettingKeyboard, value: integer): boolean { switch (setting) { - case SettingKeyboard.Button_Up: - case SettingKeyboard.Button_Down: - case SettingKeyboard.Button_Left: - case SettingKeyboard.Button_Right: - case SettingKeyboard.Button_Action: - case SettingKeyboard.Button_Cancel: - case SettingKeyboard.Button_Menu: - case SettingKeyboard.Button_Stats: - case SettingKeyboard.Button_Cycle_Shiny: - case SettingKeyboard.Button_Cycle_Form: - case SettingKeyboard.Button_Cycle_Gender: - case SettingKeyboard.Button_Cycle_Ability: - case SettingKeyboard.Button_Cycle_Nature: - case SettingKeyboard.Button_Cycle_Variant: - case SettingKeyboard.Button_Speed_Up: - case SettingKeyboard.Button_Slow_Down: - case SettingKeyboard.Alt_Button_Up: - case SettingKeyboard.Alt_Button_Down: - case SettingKeyboard.Alt_Button_Left: - case SettingKeyboard.Alt_Button_Right: - case SettingKeyboard.Alt_Button_Action: - case SettingKeyboard.Alt_Button_Cancel: - case SettingKeyboard.Alt_Button_Menu: - case SettingKeyboard.Alt_Button_Stats: - case SettingKeyboard.Alt_Button_Cycle_Shiny: - case SettingKeyboard.Alt_Button_Cycle_Form: - case SettingKeyboard.Alt_Button_Cycle_Gender: - case SettingKeyboard.Alt_Button_Cycle_Ability: - case SettingKeyboard.Alt_Button_Cycle_Nature: - case SettingKeyboard.Alt_Button_Cycle_Variant: - case SettingKeyboard.Alt_Button_Speed_Up: - case SettingKeyboard.Alt_Button_Slow_Down: - case SettingKeyboard.Alt_Button_Submit: - if (value) { - if (scene.ui) { - const cancelHandler = (success: boolean = false) : boolean => { - scene.ui.revertMode(); - (scene.ui.getHandler() as SettingsKeyboardUiHandler).updateBindings(); - return success; - }; - scene.ui.setOverlayMode(Mode.KEYBOARD_BINDING, { - target: setting, - cancelHandler: cancelHandler, - }); + case SettingKeyboard.Button_Up: + case SettingKeyboard.Button_Down: + case SettingKeyboard.Button_Left: + case SettingKeyboard.Button_Right: + case SettingKeyboard.Button_Action: + case SettingKeyboard.Button_Cancel: + case SettingKeyboard.Button_Menu: + case SettingKeyboard.Button_Stats: + case SettingKeyboard.Button_Cycle_Shiny: + case SettingKeyboard.Button_Cycle_Form: + case SettingKeyboard.Button_Cycle_Gender: + case SettingKeyboard.Button_Cycle_Ability: + case SettingKeyboard.Button_Cycle_Nature: + case SettingKeyboard.Button_Cycle_Variant: + case SettingKeyboard.Button_Speed_Up: + case SettingKeyboard.Button_Slow_Down: + case SettingKeyboard.Alt_Button_Up: + case SettingKeyboard.Alt_Button_Down: + case SettingKeyboard.Alt_Button_Left: + case SettingKeyboard.Alt_Button_Right: + case SettingKeyboard.Alt_Button_Action: + case SettingKeyboard.Alt_Button_Cancel: + case SettingKeyboard.Alt_Button_Menu: + case SettingKeyboard.Alt_Button_Stats: + case SettingKeyboard.Alt_Button_Cycle_Shiny: + case SettingKeyboard.Alt_Button_Cycle_Form: + case SettingKeyboard.Alt_Button_Cycle_Gender: + case SettingKeyboard.Alt_Button_Cycle_Ability: + case SettingKeyboard.Alt_Button_Cycle_Nature: + case SettingKeyboard.Alt_Button_Cycle_Variant: + case SettingKeyboard.Alt_Button_Speed_Up: + case SettingKeyboard.Alt_Button_Slow_Down: + case SettingKeyboard.Alt_Button_Submit: + if (value) { + if (scene.ui) { + const cancelHandler = (success: boolean = false) : boolean => { + scene.ui.revertMode(); + (scene.ui.getHandler() as SettingsKeyboardUiHandler).updateBindings(); + return success; + }; + scene.ui.setOverlayMode(Mode.KEYBOARD_BINDING, { + target: setting, + cancelHandler: cancelHandler, + }); + } } - } - break; + break; // case SettingKeyboard.Default_Layout: // if (value && scene.ui) { // const cancelHandler = () => { diff --git a/src/system/settings/settings.ts b/src/system/settings/settings.ts index 66021845c29..be440d5d93e 100644 --- a/src/system/settings/settings.ts +++ b/src/system/settings/settings.ts @@ -76,16 +76,16 @@ const SHOP_CURSOR_TARGET_OPTIONS: SettingOption[] = [ const shopCursorTargetIndexMap = SHOP_CURSOR_TARGET_OPTIONS.map(option => { switch (option.value) { - case "Rewards": - return ShopCursorTarget.REWARDS; - case "Shop": - return ShopCursorTarget.SHOP; - case "Reroll": - return ShopCursorTarget.REROLL; - case "Check Team": - return ShopCursorTarget.CHECK_TEAM; - default: - throw new Error(`Unknown value: ${option.value}`); + case "Rewards": + return ShopCursorTarget.REWARDS; + case "Shop": + return ShopCursorTarget.SHOP; + case "Reroll": + return ShopCursorTarget.REROLL; + case "Check Team": + return ShopCursorTarget.CHECK_TEAM; + default: + throw new Error(`Unknown value: ${option.value}`); } }); @@ -699,226 +699,226 @@ export function setSetting(scene: BattleScene, setting: string, value: integer): return false; } switch (Setting[index].key) { - case SettingKeys.Game_Speed: - scene.gameSpeed = parseFloat(Setting[index].options[value].value.replace("x", "")); - break; - case SettingKeys.Master_Volume: - scene.masterVolume = value ? parseInt(Setting[index].options[value].value) * 0.01 : 0; - scene.updateSoundVolume(); - break; - case SettingKeys.BGM_Volume: - scene.bgmVolume = value ? parseInt(Setting[index].options[value].value) * 0.01 : 0; - scene.updateSoundVolume(); - break; - case SettingKeys.Field_Volume: - scene.fieldVolume = value ? parseInt(Setting[index].options[value].value) * 0.01 : 0; - scene.updateSoundVolume(); - break; - case SettingKeys.SE_Volume: - scene.seVolume = value ? parseInt(Setting[index].options[value].value) * 0.01 : 0; - scene.updateSoundVolume(); - break; - case SettingKeys.UI_Volume: - scene.uiVolume = value ? parseInt(Setting[index].options[value].value) * 0.01 : 0; - break; - case SettingKeys.Music_Preference: - scene.musicPreference = value; - break; - case SettingKeys.Damage_Numbers: - scene.damageNumbersMode = value; - break; - case SettingKeys.UI_Theme: - scene.uiTheme = value; - break; - case SettingKeys.Window_Type: - updateWindowType(scene, parseInt(Setting[index].options[value].value)); - break; - case SettingKeys.Tutorials: - scene.enableTutorials = Setting[index].options[value].value === "On"; - break; - case SettingKeys.Move_Info: - scene.enableMoveInfo = Setting[index].options[value].value === "On"; - break; - case SettingKeys.Enable_Retries: - scene.enableRetries = Setting[index].options[value].value === "On"; - break; - case SettingKeys.Hide_IVs: - scene.hideIvs = Setting[index].options[value].value === "On"; - break; - case SettingKeys.Skip_Seen_Dialogues: - scene.skipSeenDialogues = Setting[index].options[value].value === "On"; - break; - case SettingKeys.Egg_Skip: - scene.eggSkipPreference = value; - break; - case SettingKeys.Battle_Style: - scene.battleStyle = value; - break; - case SettingKeys.Show_BGM_Bar: - scene.showBgmBar = Setting[index].options[value].value === "On"; - break; - case SettingKeys.Candy_Upgrade_Notification: - if (scene.candyUpgradeNotification === value) { + case SettingKeys.Game_Speed: + scene.gameSpeed = parseFloat(Setting[index].options[value].value.replace("x", "")); break; - } - scene.candyUpgradeNotification = value; - scene.eventTarget.dispatchEvent(new CandyUpgradeNotificationChangedEvent(value)); - break; - case SettingKeys.Candy_Upgrade_Display: - scene.candyUpgradeDisplay = value; - case SettingKeys.Money_Format: - switch (Setting[index].options[value].value) { - case "Normal": - scene.moneyFormat = MoneyFormat.NORMAL; + case SettingKeys.Master_Volume: + scene.masterVolume = value ? parseInt(Setting[index].options[value].value) * 0.01 : 0; + scene.updateSoundVolume(); break; - case "Abbreviated": - scene.moneyFormat = MoneyFormat.ABBREVIATED; + case SettingKeys.BGM_Volume: + scene.bgmVolume = value ? parseInt(Setting[index].options[value].value) * 0.01 : 0; + scene.updateSoundVolume(); break; - } - scene.updateMoneyText(false); - break; - case SettingKeys.Sprite_Set: - scene.experimentalSprites = !!value; - if (value) { - scene.initExpSprites(); - } - break; - case SettingKeys.Move_Animations: - scene.moveAnimations = Setting[index].options[value].value === "On"; - break; - case SettingKeys.Show_Moveset_Flyout: - scene.showMovesetFlyout = Setting[index].options[value].value === "On"; - break; - case SettingKeys.Show_Arena_Flyout: - scene.showArenaFlyout = Setting[index].options[value].value === "On"; - break; - case SettingKeys.Show_Time_Of_Day_Widget: - scene.showTimeOfDayWidget = Setting[index].options[value].value === "On"; - break; - case SettingKeys.Time_Of_Day_Animation: - scene.timeOfDayAnimation = Setting[index].options[value].value === "Bounce" ? EaseType.BOUNCE : EaseType.BACK; - break; - case SettingKeys.Show_Stats_on_Level_Up: - scene.showLevelUpStats = Setting[index].options[value].value === "On"; - break; - case SettingKeys.Shop_Cursor_Target: - const selectedValue = shopCursorTargetIndexMap[value]; - scene.shopCursorTarget = selectedValue; - break; - case SettingKeys.EXP_Gains_Speed: - scene.expGainsSpeed = value; - break; - case SettingKeys.EXP_Party_Display: - scene.expParty = value; - break; - case SettingKeys.HP_Bar_Speed: - scene.hpBarSpeed = value; - break; - case SettingKeys.Fusion_Palette_Swaps: - scene.fusionPaletteSwaps = !!value; - break; - case SettingKeys.Player_Gender: - if (scene.gameData) { - const female = Setting[index].options[value].value === "Girl"; - scene.gameData.gender = female ? PlayerGender.FEMALE : PlayerGender.MALE; - scene.trainer.setTexture(scene.trainer.texture.key.replace(female ? "m" : "f", female ? "f" : "m")); - } else { - return false; - } - break; - case SettingKeys.Touch_Controls: - scene.enableTouchControls = Setting[index].options[value].value !== "Disabled" && hasTouchscreen(); - const touchControls = document.getElementById("touchControls"); - if (touchControls) { - touchControls.classList.toggle("visible", scene.enableTouchControls); - } - break; - case SettingKeys.Vibration: - scene.enableVibration = Setting[index].options[value].value !== "Disabled" && hasTouchscreen(); - break; - case SettingKeys.Type_Hints: - scene.typeHints = Setting[index].options[value].value === "On"; - break; - case SettingKeys.Language: - if (value) { - if (scene.ui) { - const cancelHandler = () => { - scene.ui.revertMode(); - (scene.ui.getHandler() as SettingsUiHandler).setOptionCursor(0, 0, true); - }; - const changeLocaleHandler = (locale: string): boolean => { - try { - i18next.changeLanguage(locale); - localStorage.setItem("prLang", locale); - cancelHandler(); - // Reload the whole game to apply the new locale since also some constants are translated - window.location.reload(); - return true; - } catch (error) { - console.error("Error changing locale:", error); - return false; - } - }; - scene.ui.setOverlayMode(Mode.OPTION_SELECT, { - options: [ - { - label: "English", - handler: () => changeLocaleHandler("en") - }, - { - label: "Español", - handler: () => changeLocaleHandler("es") - }, - { - label: "Italiano", - handler: () => changeLocaleHandler("it") - }, - { - label: "Français", - handler: () => changeLocaleHandler("fr") - }, - { - label: "Deutsch", - handler: () => changeLocaleHandler("de") - }, - { - label: "Português (BR)", - handler: () => changeLocaleHandler("pt-BR") - }, - { - label: "简体中文", - handler: () => changeLocaleHandler("zh-CN") - }, - { - label: "繁體中文", - handler: () => changeLocaleHandler("zh-TW") - }, - { - label: "한국어", - handler: () => changeLocaleHandler("ko") - }, - { - label: "日本語", - handler: () => changeLocaleHandler("ja") - }, - // { - // label: "Català", - // handler: () => changeLocaleHandler("ca-ES") - // }, - { - label: i18next.t("settings:back"), - handler: () => cancelHandler() - } - ], - maxOptions: 7 - }); + case SettingKeys.Field_Volume: + scene.fieldVolume = value ? parseInt(Setting[index].options[value].value) * 0.01 : 0; + scene.updateSoundVolume(); + break; + case SettingKeys.SE_Volume: + scene.seVolume = value ? parseInt(Setting[index].options[value].value) * 0.01 : 0; + scene.updateSoundVolume(); + break; + case SettingKeys.UI_Volume: + scene.uiVolume = value ? parseInt(Setting[index].options[value].value) * 0.01 : 0; + break; + case SettingKeys.Music_Preference: + scene.musicPreference = value; + break; + case SettingKeys.Damage_Numbers: + scene.damageNumbersMode = value; + break; + case SettingKeys.UI_Theme: + scene.uiTheme = value; + break; + case SettingKeys.Window_Type: + updateWindowType(scene, parseInt(Setting[index].options[value].value)); + break; + case SettingKeys.Tutorials: + scene.enableTutorials = Setting[index].options[value].value === "On"; + break; + case SettingKeys.Move_Info: + scene.enableMoveInfo = Setting[index].options[value].value === "On"; + break; + case SettingKeys.Enable_Retries: + scene.enableRetries = Setting[index].options[value].value === "On"; + break; + case SettingKeys.Hide_IVs: + scene.hideIvs = Setting[index].options[value].value === "On"; + break; + case SettingKeys.Skip_Seen_Dialogues: + scene.skipSeenDialogues = Setting[index].options[value].value === "On"; + break; + case SettingKeys.Egg_Skip: + scene.eggSkipPreference = value; + break; + case SettingKeys.Battle_Style: + scene.battleStyle = value; + break; + case SettingKeys.Show_BGM_Bar: + scene.showBgmBar = Setting[index].options[value].value === "On"; + break; + case SettingKeys.Candy_Upgrade_Notification: + if (scene.candyUpgradeNotification === value) { + break; + } + scene.candyUpgradeNotification = value; + scene.eventTarget.dispatchEvent(new CandyUpgradeNotificationChangedEvent(value)); + break; + case SettingKeys.Candy_Upgrade_Display: + scene.candyUpgradeDisplay = value; + case SettingKeys.Money_Format: + switch (Setting[index].options[value].value) { + case "Normal": + scene.moneyFormat = MoneyFormat.NORMAL; + break; + case "Abbreviated": + scene.moneyFormat = MoneyFormat.ABBREVIATED; + break; + } + scene.updateMoneyText(false); + break; + case SettingKeys.Sprite_Set: + scene.experimentalSprites = !!value; + if (value) { + scene.initExpSprites(); + } + break; + case SettingKeys.Move_Animations: + scene.moveAnimations = Setting[index].options[value].value === "On"; + break; + case SettingKeys.Show_Moveset_Flyout: + scene.showMovesetFlyout = Setting[index].options[value].value === "On"; + break; + case SettingKeys.Show_Arena_Flyout: + scene.showArenaFlyout = Setting[index].options[value].value === "On"; + break; + case SettingKeys.Show_Time_Of_Day_Widget: + scene.showTimeOfDayWidget = Setting[index].options[value].value === "On"; + break; + case SettingKeys.Time_Of_Day_Animation: + scene.timeOfDayAnimation = Setting[index].options[value].value === "Bounce" ? EaseType.BOUNCE : EaseType.BACK; + break; + case SettingKeys.Show_Stats_on_Level_Up: + scene.showLevelUpStats = Setting[index].options[value].value === "On"; + break; + case SettingKeys.Shop_Cursor_Target: + const selectedValue = shopCursorTargetIndexMap[value]; + scene.shopCursorTarget = selectedValue; + break; + case SettingKeys.EXP_Gains_Speed: + scene.expGainsSpeed = value; + break; + case SettingKeys.EXP_Party_Display: + scene.expParty = value; + break; + case SettingKeys.HP_Bar_Speed: + scene.hpBarSpeed = value; + break; + case SettingKeys.Fusion_Palette_Swaps: + scene.fusionPaletteSwaps = !!value; + break; + case SettingKeys.Player_Gender: + if (scene.gameData) { + const female = Setting[index].options[value].value === "Girl"; + scene.gameData.gender = female ? PlayerGender.FEMALE : PlayerGender.MALE; + scene.trainer.setTexture(scene.trainer.texture.key.replace(female ? "m" : "f", female ? "f" : "m")); + } else { return false; } - } - break; - case SettingKeys.Shop_Overlay_Opacity: - scene.updateShopOverlayOpacity(parseInt(Setting[index].options[value].value) * .01); - break; + break; + case SettingKeys.Touch_Controls: + scene.enableTouchControls = Setting[index].options[value].value !== "Disabled" && hasTouchscreen(); + const touchControls = document.getElementById("touchControls"); + if (touchControls) { + touchControls.classList.toggle("visible", scene.enableTouchControls); + } + break; + case SettingKeys.Vibration: + scene.enableVibration = Setting[index].options[value].value !== "Disabled" && hasTouchscreen(); + break; + case SettingKeys.Type_Hints: + scene.typeHints = Setting[index].options[value].value === "On"; + break; + case SettingKeys.Language: + if (value) { + if (scene.ui) { + const cancelHandler = () => { + scene.ui.revertMode(); + (scene.ui.getHandler() as SettingsUiHandler).setOptionCursor(0, 0, true); + }; + const changeLocaleHandler = (locale: string): boolean => { + try { + i18next.changeLanguage(locale); + localStorage.setItem("prLang", locale); + cancelHandler(); + // Reload the whole game to apply the new locale since also some constants are translated + window.location.reload(); + return true; + } catch (error) { + console.error("Error changing locale:", error); + return false; + } + }; + scene.ui.setOverlayMode(Mode.OPTION_SELECT, { + options: [ + { + label: "English", + handler: () => changeLocaleHandler("en") + }, + { + label: "Español", + handler: () => changeLocaleHandler("es") + }, + { + label: "Italiano", + handler: () => changeLocaleHandler("it") + }, + { + label: "Français", + handler: () => changeLocaleHandler("fr") + }, + { + label: "Deutsch", + handler: () => changeLocaleHandler("de") + }, + { + label: "Português (BR)", + handler: () => changeLocaleHandler("pt-BR") + }, + { + label: "简体中文", + handler: () => changeLocaleHandler("zh-CN") + }, + { + label: "繁體中文", + handler: () => changeLocaleHandler("zh-TW") + }, + { + label: "한국어", + handler: () => changeLocaleHandler("ko") + }, + { + label: "日本語", + handler: () => changeLocaleHandler("ja") + }, + // { + // label: "Català", + // handler: () => changeLocaleHandler("ca-ES") + // }, + { + label: i18next.t("settings:back"), + handler: () => cancelHandler() + } + ], + maxOptions: 7 + }); + return false; + } + } + break; + case SettingKeys.Shop_Overlay_Opacity: + scene.updateShopOverlayOpacity(parseInt(Setting[index].options[value].value) * .01); + break; } return true; diff --git a/src/system/unlockables.ts b/src/system/unlockables.ts index 983909373fd..0a666e2c755 100644 --- a/src/system/unlockables.ts +++ b/src/system/unlockables.ts @@ -10,13 +10,13 @@ export enum Unlockables { export function getUnlockableName(unlockable: Unlockables) { switch (unlockable) { - case Unlockables.ENDLESS_MODE: - return `${GameMode.getModeName(GameModes.ENDLESS)} Mode`; - case Unlockables.MINI_BLACK_HOLE: - return i18next.t("modifierType:ModifierType.MINI_BLACK_HOLE.name"); - case Unlockables.SPLICED_ENDLESS_MODE: - return `${GameMode.getModeName(GameModes.SPLICED_ENDLESS)} Mode`; - case Unlockables.EVIOLITE: - return i18next.t("modifierType:ModifierType.EVIOLITE.name"); + case Unlockables.ENDLESS_MODE: + return `${GameMode.getModeName(GameModes.ENDLESS)} Mode`; + case Unlockables.MINI_BLACK_HOLE: + return i18next.t("modifierType:ModifierType.MINI_BLACK_HOLE.name"); + case Unlockables.SPLICED_ENDLESS_MODE: + return `${GameMode.getModeName(GameModes.SPLICED_ENDLESS)} Mode`; + case Unlockables.EVIOLITE: + return i18next.t("modifierType:ModifierType.EVIOLITE.name"); } } diff --git a/src/system/version_migration/versions/v1_0_4.ts b/src/system/version_migration/versions/v1_0_4.ts index c20e2a281e7..f16b6bcb6bb 100644 --- a/src/system/version_migration/versions/v1_0_4.ts +++ b/src/system/version_migration/versions/v1_0_4.ts @@ -108,15 +108,15 @@ export const sessionMigrators = [ } else if (m.className === "DoubleBattleChanceBoosterModifier" && m.args.length === 1) { let maxBattles: number; switch (m.typeId) { - case "MAX_LURE": - maxBattles = 30; - break; - case "SUPER_LURE": - maxBattles = 15; - break; - default: - maxBattles = 10; - break; + case "MAX_LURE": + maxBattles = 30; + break; + case "SUPER_LURE": + maxBattles = 15; + break; + default: + maxBattles = 10; + break; } // From [ battlesLeft ] to [ maxBattles, battleCount ] diff --git a/src/system/voucher.ts b/src/system/voucher.ts index aca7b9fc2f2..b38fd528c9f 100644 --- a/src/system/voucher.ts +++ b/src/system/voucher.ts @@ -45,41 +45,41 @@ export class Voucher { getTier(): AchvTier { switch (this.voucherType) { - case VoucherType.REGULAR: - return AchvTier.COMMON; - case VoucherType.PLUS: - return AchvTier.GREAT; - case VoucherType.PREMIUM: - return AchvTier.ULTRA; - case VoucherType.GOLDEN: - return AchvTier.ROGUE; + case VoucherType.REGULAR: + return AchvTier.COMMON; + case VoucherType.PLUS: + return AchvTier.GREAT; + case VoucherType.PREMIUM: + return AchvTier.ULTRA; + case VoucherType.GOLDEN: + return AchvTier.ROGUE; } } } export function getVoucherTypeName(voucherType: VoucherType): string { switch (voucherType) { - case VoucherType.REGULAR: - return i18next.t("voucher:eggVoucher"); - case VoucherType.PLUS: - return i18next.t("voucher:eggVoucherPlus"); - case VoucherType.PREMIUM: - return i18next.t("voucher:eggVoucherPremium"); - case VoucherType.GOLDEN: - return i18next.t("voucher:eggVoucherGold"); + case VoucherType.REGULAR: + return i18next.t("voucher:eggVoucher"); + case VoucherType.PLUS: + return i18next.t("voucher:eggVoucherPlus"); + case VoucherType.PREMIUM: + return i18next.t("voucher:eggVoucherPremium"); + case VoucherType.GOLDEN: + return i18next.t("voucher:eggVoucherGold"); } } export function getVoucherTypeIcon(voucherType: VoucherType): string { switch (voucherType) { - case VoucherType.REGULAR: - return "coupon"; - case VoucherType.PLUS: - return "pair_of_tickets"; - case VoucherType.PREMIUM: - return "mystic_ticket"; - case VoucherType.GOLDEN: - return "golden_mystic_ticket"; + case VoucherType.REGULAR: + return "coupon"; + case VoucherType.PLUS: + return "pair_of_tickets"; + case VoucherType.PREMIUM: + return "mystic_ticket"; + case VoucherType.GOLDEN: + return "golden_mystic_ticket"; } } diff --git a/src/test/mystery-encounter/encounter-test-utils.ts b/src/test/mystery-encounter/encounter-test-utils.ts index 9fb2504c02b..f95a442d4c2 100644 --- a/src/test/mystery-encounter/encounter-test-utils.ts +++ b/src/test/mystery-encounter/encounter-test-utils.ts @@ -97,20 +97,20 @@ export async function runSelectMysteryEncounterOption(game: GameManager, optionN uiHandler.unblockInput(); // input are blocked by 1s to prevent accidental input. Tests need to handle that switch (optionNo) { - default: - case 1: + default: + case 1: // no movement needed. Default cursor position - break; - case 2: - uiHandler.processInput(Button.RIGHT); - break; - case 3: - uiHandler.processInput(Button.DOWN); - break; - case 4: - uiHandler.processInput(Button.RIGHT); - uiHandler.processInput(Button.DOWN); - break; + break; + case 2: + uiHandler.processInput(Button.RIGHT); + break; + case 3: + uiHandler.processInput(Button.DOWN); + break; + case 4: + uiHandler.processInput(Button.RIGHT); + uiHandler.processInput(Button.DOWN); + break; } if (!isNullOrUndefined(secondaryOptionSelect?.pokemonNo)) { diff --git a/src/touch-controls.ts b/src/touch-controls.ts index 786d1203d12..93032ce59fe 100644 --- a/src/touch-controls.ts +++ b/src/touch-controls.ts @@ -122,20 +122,20 @@ export default class TouchControl { const button = Button[key]; switch (eventType) { - case "keydown": - this.events.emit("input_down", { - controller_type: "keyboard", - button: button, - isTouch: true - }); - break; - case "keyup": - this.events.emit("input_up", { - controller_type: "keyboard", - button: button, - isTouch: true - }); - break; + case "keydown": + this.events.emit("input_down", { + controller_type: "keyboard", + button: button, + isTouch: true + }); + break; + case "keyup": + this.events.emit("input_up", { + controller_type: "keyboard", + button: button, + isTouch: true + }); + break; } return true; } diff --git a/src/ui-inputs.ts b/src/ui-inputs.ts index 9ea1276352a..92b1653df3d 100644 --- a/src/ui-inputs.ts +++ b/src/ui-inputs.ts @@ -168,26 +168,26 @@ export class UiInputs { return; } switch (this.scene.ui?.getMode()) { - case Mode.MESSAGE: - const messageHandler = this.scene.ui.getHandler(); - if (!messageHandler.pendingPrompt || messageHandler.isTextAnimationInProgress()) { + case Mode.MESSAGE: + const messageHandler = this.scene.ui.getHandler(); + if (!messageHandler.pendingPrompt || messageHandler.isTextAnimationInProgress()) { + return; + } + case Mode.TITLE: + case Mode.COMMAND: + case Mode.MODIFIER_SELECT: + case Mode.MYSTERY_ENCOUNTER: + this.scene.ui.setOverlayMode(Mode.MENU); + break; + case Mode.STARTER_SELECT: + this.buttonTouch(); + break; + case Mode.MENU: + this.scene.ui.revertMode(); + this.scene.playSound("ui/select"); + break; + default: return; - } - case Mode.TITLE: - case Mode.COMMAND: - case Mode.MODIFIER_SELECT: - case Mode.MYSTERY_ENCOUNTER: - this.scene.ui.setOverlayMode(Mode.MENU); - break; - case Mode.STARTER_SELECT: - this.buttonTouch(); - break; - case Mode.MENU: - this.scene.ui.revertMode(); - this.scene.playSound("ui/select"); - break; - default: - return; } } diff --git a/src/ui/abstact-option-select-ui-handler.ts b/src/ui/abstact-option-select-ui-handler.ts index a12ffbc46bd..01fc5b00014 100644 --- a/src/ui/abstact-option-select-ui-handler.ts +++ b/src/ui/abstact-option-select-ui-handler.ts @@ -222,20 +222,20 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler { } } else { switch (button) { - case Button.UP: - if (this.cursor) { - success = this.setCursor(this.cursor - 1); - } else if (this.cursor === 0) { - success = this.setCursor(options.length - 1); - } - break; - case Button.DOWN: - if (this.cursor < options.length - 1) { - success = this.setCursor(this.cursor + 1); - } else { - success = this.setCursor(0); - } - break; + case Button.UP: + if (this.cursor) { + success = this.setCursor(this.cursor - 1); + } else if (this.cursor === 0) { + success = this.setCursor(options.length - 1); + } + break; + case Button.DOWN: + if (this.cursor < options.length - 1) { + success = this.setCursor(this.cursor + 1); + } else { + success = this.setCursor(0); + } + break; } if (this.config?.supportHover) { // handle hover code if the element supports hover-handlers and the option has the optional hover-handler set. diff --git a/src/ui/achvs-ui-handler.ts b/src/ui/achvs-ui-handler.ts index 4e0e2feea81..a1ced6145eb 100644 --- a/src/ui/achvs-ui-handler.ts +++ b/src/ui/achvs-ui-handler.ts @@ -245,51 +245,51 @@ export default class AchvsUiHandler extends MessageUiHandler { const rowIndex = Math.floor(this.cursor / this.COLS); const itemOffset = (this.scrollCursor * this.COLS); switch (button) { - case Button.UP: - if (this.cursor < this.COLS) { - if (this.scrollCursor) { - success = this.setScrollCursor(this.scrollCursor - 1); - } else { + case Button.UP: + if (this.cursor < this.COLS) { + if (this.scrollCursor) { + success = this.setScrollCursor(this.scrollCursor - 1); + } else { // Wrap around to the last row - success = this.setScrollCursor(Math.ceil(this.currentTotal / this.COLS) - this.ROWS); - let newCursorIndex = this.cursor + (this.ROWS - 1) * this.COLS; - if (newCursorIndex > this.currentTotal - this.scrollCursor * this.COLS - 1) { - newCursorIndex -= this.COLS; + success = this.setScrollCursor(Math.ceil(this.currentTotal / this.COLS) - this.ROWS); + let newCursorIndex = this.cursor + (this.ROWS - 1) * this.COLS; + if (newCursorIndex > this.currentTotal - this.scrollCursor * this.COLS - 1) { + newCursorIndex -= this.COLS; + } + success = success && this.setCursor(newCursorIndex); } - success = success && this.setCursor(newCursorIndex); - } - } else { - success = this.setCursor(this.cursor - this.COLS); - } - break; - case Button.DOWN: - const canMoveDown = itemOffset + 1 < this.currentTotal; - if (rowIndex >= this.ROWS - 1) { - if (this.scrollCursor < Math.ceil(this.currentTotal / this.COLS) - this.ROWS && canMoveDown) { - // scroll down one row - success = this.setScrollCursor(this.scrollCursor + 1); } else { - // wrap back to the first row - success = this.setScrollCursor(0) && this.setCursor(this.cursor % this.COLS); + success = this.setCursor(this.cursor - this.COLS); } - } else if (canMoveDown) { - success = this.setCursor(Math.min(this.cursor + this.COLS, this.currentTotal - itemOffset - 1)); - } - break; - case Button.LEFT: - if (this.cursor % this.COLS === 0) { - success = this.setCursor(Math.min(this.cursor + this.COLS - 1, this.currentTotal - itemOffset - 1)); - } else { - success = this.setCursor(this.cursor - 1); - } - break; - case Button.RIGHT: - if ((this.cursor + 1) % this.COLS === 0 || (this.cursor + itemOffset) === (this.currentTotal - 1)) { - success = this.setCursor(this.cursor - this.cursor % this.COLS); - } else { - success = this.setCursor(this.cursor + 1); - } - break; + break; + case Button.DOWN: + const canMoveDown = itemOffset + 1 < this.currentTotal; + if (rowIndex >= this.ROWS - 1) { + if (this.scrollCursor < Math.ceil(this.currentTotal / this.COLS) - this.ROWS && canMoveDown) { + // scroll down one row + success = this.setScrollCursor(this.scrollCursor + 1); + } else { + // wrap back to the first row + success = this.setScrollCursor(0) && this.setCursor(this.cursor % this.COLS); + } + } else if (canMoveDown) { + success = this.setCursor(Math.min(this.cursor + this.COLS, this.currentTotal - itemOffset - 1)); + } + break; + case Button.LEFT: + if (this.cursor % this.COLS === 0) { + success = this.setCursor(Math.min(this.cursor + this.COLS - 1, this.currentTotal - itemOffset - 1)); + } else { + success = this.setCursor(this.cursor - 1); + } + break; + case Button.RIGHT: + if ((this.cursor + 1) % this.COLS === 0 || (this.cursor + itemOffset) === (this.currentTotal - 1)) { + success = this.setCursor(this.cursor - this.cursor % this.COLS); + } else { + success = this.setCursor(this.cursor + 1); + } + break; } } @@ -316,22 +316,22 @@ export default class AchvsUiHandler extends MessageUiHandler { if (update || pageChange) { switch (this.currentPage) { - case Page.ACHIEVEMENTS: - if (pageChange) { - this.titleBg.width = 174; - this.titleText.x = this.titleBg.width / 2; - this.scoreContainer.setVisible(true); - } - this.showAchv(achvs[Object.keys(achvs)[cursor + this.scrollCursor * this.COLS]]); - break; - case Page.VOUCHERS: - if (pageChange) { - this.titleBg.width = 220; - this.titleText.x = this.titleBg.width / 2; - this.scoreContainer.setVisible(false); - } - this.showVoucher(vouchers[Object.keys(vouchers)[cursor + this.scrollCursor * this.COLS]]); - break; + case Page.ACHIEVEMENTS: + if (pageChange) { + this.titleBg.width = 174; + this.titleText.x = this.titleBg.width / 2; + this.scoreContainer.setVisible(true); + } + this.showAchv(achvs[Object.keys(achvs)[cursor + this.scrollCursor * this.COLS]]); + break; + case Page.VOUCHERS: + if (pageChange) { + this.titleBg.width = 220; + this.titleText.x = this.titleBg.width / 2; + this.scoreContainer.setVisible(false); + } + this.showVoucher(vouchers[Object.keys(vouchers)[cursor + this.scrollCursor * this.COLS]]); + break; } } return ret; @@ -358,14 +358,14 @@ export default class AchvsUiHandler extends MessageUiHandler { } switch (this.currentPage) { - case Page.ACHIEVEMENTS: - this.updateAchvIcons(); - this.showAchv(achvs[Object.keys(achvs)[this.cursor + this.scrollCursor * this.COLS]]); - break; - case Page.VOUCHERS: - this.updateVoucherIcons(); - this.showVoucher(vouchers[Object.keys(vouchers)[this.cursor + this.scrollCursor * this.COLS]]); - break; + case Page.ACHIEVEMENTS: + this.updateAchvIcons(); + this.showAchv(achvs[Object.keys(achvs)[this.cursor + this.scrollCursor * this.COLS]]); + break; + case Page.VOUCHERS: + this.updateVoucherIcons(); + this.showVoucher(vouchers[Object.keys(vouchers)[this.cursor + this.scrollCursor * this.COLS]]); + break; } return true; } diff --git a/src/ui/arena-flyout.ts b/src/ui/arena-flyout.ts index 0c00d3403b6..a82f97244cd 100644 --- a/src/ui/arena-flyout.ts +++ b/src/ui/arena-flyout.ts @@ -215,20 +215,20 @@ export class ArenaFlyout extends Phaser.GameObjects.Container { // Creates a proxy object to decide which text object needs to be updated let textObject: Phaser.GameObjects.Text; switch (fieldEffectInfo.effecType) { - case ArenaEffectType.PLAYER: - textObject = this.flyoutTextPlayer; - break; + case ArenaEffectType.PLAYER: + textObject = this.flyoutTextPlayer; + break; - case ArenaEffectType.WEATHER: - case ArenaEffectType.TERRAIN: - case ArenaEffectType.FIELD: - textObject = this.flyoutTextField; + case ArenaEffectType.WEATHER: + case ArenaEffectType.TERRAIN: + case ArenaEffectType.FIELD: + textObject = this.flyoutTextField; - break; + break; - case ArenaEffectType.ENEMY: - textObject = this.flyoutTextEnemy; - break; + case ArenaEffectType.ENEMY: + textObject = this.flyoutTextEnemy; + break; } textObject.text += fieldEffectInfo.name; @@ -253,81 +253,81 @@ export class ArenaFlyout extends Phaser.GameObjects.Container { let foundIndex: number; switch (arenaEffectChangedEvent.constructor) { - case TagAddedEvent: - const tagAddedEvent = arenaEffectChangedEvent as TagAddedEvent; - const isArenaTrapTag = this.battleScene.arena.getTag(tagAddedEvent.arenaTagType) instanceof ArenaTrapTag; - let arenaEffectType: ArenaEffectType; + case TagAddedEvent: + const tagAddedEvent = arenaEffectChangedEvent as TagAddedEvent; + const isArenaTrapTag = this.battleScene.arena.getTag(tagAddedEvent.arenaTagType) instanceof ArenaTrapTag; + let arenaEffectType: ArenaEffectType; - if (tagAddedEvent.arenaTagSide === ArenaTagSide.BOTH) { - arenaEffectType = ArenaEffectType.FIELD; - } else if (tagAddedEvent.arenaTagSide === ArenaTagSide.PLAYER) { - arenaEffectType = ArenaEffectType.PLAYER; - } else { - arenaEffectType = ArenaEffectType.ENEMY; - } - - const existingTrapTagIndex = isArenaTrapTag ? this.fieldEffectInfo.findIndex(e => tagAddedEvent.arenaTagType === e.tagType && arenaEffectType === e.effecType) : -1; - let name: string = getFieldEffectText(ArenaTagType[tagAddedEvent.arenaTagType]); - - if (isArenaTrapTag) { - if (existingTrapTagIndex !== -1) { - const layers = tagAddedEvent.arenaTagMaxLayers > 1 ? ` (${tagAddedEvent.arenaTagLayers})` : ""; - this.fieldEffectInfo[existingTrapTagIndex].name = `${name}${layers}`; - break; - } else if (tagAddedEvent.arenaTagMaxLayers > 1) { - name = `${name} (${tagAddedEvent.arenaTagLayers})`; + if (tagAddedEvent.arenaTagSide === ArenaTagSide.BOTH) { + arenaEffectType = ArenaEffectType.FIELD; + } else if (tagAddedEvent.arenaTagSide === ArenaTagSide.PLAYER) { + arenaEffectType = ArenaEffectType.PLAYER; + } else { + arenaEffectType = ArenaEffectType.ENEMY; } - } - this.fieldEffectInfo.push({ - name, - effecType: arenaEffectType, - maxDuration: tagAddedEvent.duration, - duration: tagAddedEvent.duration, - tagType: tagAddedEvent.arenaTagType - }); - break; - case TagRemovedEvent: - const tagRemovedEvent = arenaEffectChangedEvent as TagRemovedEvent; - foundIndex = this.fieldEffectInfo.findIndex(info => info.tagType === tagRemovedEvent.arenaTagType); + const existingTrapTagIndex = isArenaTrapTag ? this.fieldEffectInfo.findIndex(e => tagAddedEvent.arenaTagType === e.tagType && arenaEffectType === e.effecType) : -1; + let name: string = getFieldEffectText(ArenaTagType[tagAddedEvent.arenaTagType]); - if (foundIndex !== -1) { // If the tag was being tracked, remove it - this.fieldEffectInfo.splice(foundIndex, 1); - } - break; + if (isArenaTrapTag) { + if (existingTrapTagIndex !== -1) { + const layers = tagAddedEvent.arenaTagMaxLayers > 1 ? ` (${tagAddedEvent.arenaTagLayers})` : ""; + this.fieldEffectInfo[existingTrapTagIndex].name = `${name}${layers}`; + break; + } else if (tagAddedEvent.arenaTagMaxLayers > 1) { + name = `${name} (${tagAddedEvent.arenaTagLayers})`; + } + } - case WeatherChangedEvent: - case TerrainChangedEvent: - const fieldEffectChangedEvent = arenaEffectChangedEvent as WeatherChangedEvent | TerrainChangedEvent; + this.fieldEffectInfo.push({ + name, + effecType: arenaEffectType, + maxDuration: tagAddedEvent.duration, + duration: tagAddedEvent.duration, + tagType: tagAddedEvent.arenaTagType + }); + break; + case TagRemovedEvent: + const tagRemovedEvent = arenaEffectChangedEvent as TagRemovedEvent; + foundIndex = this.fieldEffectInfo.findIndex(info => info.tagType === tagRemovedEvent.arenaTagType); - // Stores the old Weather/Terrain name in case it's in the array already - const oldName = + if (foundIndex !== -1) { // If the tag was being tracked, remove it + this.fieldEffectInfo.splice(foundIndex, 1); + } + break; + + case WeatherChangedEvent: + case TerrainChangedEvent: + const fieldEffectChangedEvent = arenaEffectChangedEvent as WeatherChangedEvent | TerrainChangedEvent; + + // Stores the old Weather/Terrain name in case it's in the array already + const oldName = getFieldEffectText(fieldEffectChangedEvent instanceof WeatherChangedEvent ? WeatherType[fieldEffectChangedEvent.oldWeatherType] : TerrainType[fieldEffectChangedEvent.oldTerrainType]); - // Stores the new Weather/Terrain info - const newInfo = { - name: + // Stores the new Weather/Terrain info + const newInfo = { + name: getFieldEffectText(fieldEffectChangedEvent instanceof WeatherChangedEvent ? WeatherType[fieldEffectChangedEvent.newWeatherType] : TerrainType[fieldEffectChangedEvent.newTerrainType]), - effecType: fieldEffectChangedEvent instanceof WeatherChangedEvent - ? ArenaEffectType.WEATHER - : ArenaEffectType.TERRAIN, - maxDuration: fieldEffectChangedEvent.duration, - duration: fieldEffectChangedEvent.duration }; + effecType: fieldEffectChangedEvent instanceof WeatherChangedEvent + ? ArenaEffectType.WEATHER + : ArenaEffectType.TERRAIN, + maxDuration: fieldEffectChangedEvent.duration, + duration: fieldEffectChangedEvent.duration }; - foundIndex = this.fieldEffectInfo.findIndex(info => [ newInfo.name, oldName ].includes(info.name)); - if (foundIndex === -1) { - if (newInfo.name !== undefined) { - this.fieldEffectInfo.push(newInfo); // Adds the info to the array if it doesn't already exist and is defined + foundIndex = this.fieldEffectInfo.findIndex(info => [ newInfo.name, oldName ].includes(info.name)); + if (foundIndex === -1) { + if (newInfo.name !== undefined) { + this.fieldEffectInfo.push(newInfo); // Adds the info to the array if it doesn't already exist and is defined + } + } else if (!newInfo.name) { + this.fieldEffectInfo.splice(foundIndex, 1); // Removes the old info if the new one is undefined + } else { + this.fieldEffectInfo[foundIndex] = newInfo; // Otherwise, replace the old info } - } else if (!newInfo.name) { - this.fieldEffectInfo.splice(foundIndex, 1); // Removes the old info if the new one is undefined - } else { - this.fieldEffectInfo[foundIndex] = newInfo; // Otherwise, replace the old info - } - break; + break; } this.updateFieldText(); diff --git a/src/ui/ball-ui-handler.ts b/src/ui/ball-ui-handler.ts index 0d97a79943d..9df6da36055 100644 --- a/src/ui/ball-ui-handler.ts +++ b/src/ui/ball-ui-handler.ts @@ -90,12 +90,12 @@ export default class BallUiHandler extends UiHandler { } } else { switch (button) { - case Button.UP: - success = this.setCursor(this.cursor ? this.cursor - 1 : pokeballTypeCount); - break; - case Button.DOWN: - success = this.setCursor(this.cursor < pokeballTypeCount ? this.cursor + 1 : 0); - break; + case Button.UP: + success = this.setCursor(this.cursor ? this.cursor - 1 : pokeballTypeCount); + break; + case Button.DOWN: + success = this.setCursor(this.cursor < pokeballTypeCount ? this.cursor + 1 : 0); + break; } } diff --git a/src/ui/challenges-select-ui-handler.ts b/src/ui/challenges-select-ui-handler.ts index b2c0f1a1746..e2547a626de 100644 --- a/src/ui/challenges-select-ui-handler.ts +++ b/src/ui/challenges-select-ui-handler.ts @@ -376,66 +376,66 @@ export default class GameChallengesUiHandler extends UiHandler { } else { if (this.cursorObj?.visible && !this.startCursor.visible) { switch (button) { - case Button.UP: - if (this.cursor === 0) { - if (this.scrollCursor === 0) { + case Button.UP: + if (this.cursor === 0) { + if (this.scrollCursor === 0) { // When at the top of the menu and pressing UP, move to the bottommost item. - if (this.scene.gameMode.challenges.length > rowsToDisplay) { // If there are more than 9 challenges, scroll to the bottom + if (this.scene.gameMode.challenges.length > rowsToDisplay) { // If there are more than 9 challenges, scroll to the bottom // First, set the cursor to the last visible element, preparing for the scroll to the end. - const successA = this.setCursor(rowsToDisplay - 1); - // Then, adjust the scroll to display the bottommost elements of the menu. - const successB = this.setScrollCursor(this.scene.gameMode.challenges.length - rowsToDisplay); - success = successA && successB; // success is just there to play the little validation sound effect - } else { // If there are 9 or less challenges, just move to the bottom one - success = this.setCursor(this.scene.gameMode.challenges.length - 1); + const successA = this.setCursor(rowsToDisplay - 1); + // Then, adjust the scroll to display the bottommost elements of the menu. + const successB = this.setScrollCursor(this.scene.gameMode.challenges.length - rowsToDisplay); + success = successA && successB; // success is just there to play the little validation sound effect + } else { // If there are 9 or less challenges, just move to the bottom one + success = this.setCursor(this.scene.gameMode.challenges.length - 1); + } + } else { + success = this.setScrollCursor(this.scrollCursor - 1); } } else { - success = this.setScrollCursor(this.scrollCursor - 1); + success = this.setCursor(this.cursor - 1); } - } else { - success = this.setCursor(this.cursor - 1); - } - if (success) { - this.updateText(); - } - break; - case Button.DOWN: - if (this.cursor === rowsToDisplay - 1) { - if (this.scrollCursor < this.scene.gameMode.challenges.length - rowsToDisplay) { + if (success) { + this.updateText(); + } + break; + case Button.DOWN: + if (this.cursor === rowsToDisplay - 1) { + if (this.scrollCursor < this.scene.gameMode.challenges.length - rowsToDisplay) { // When at the bottom and pressing DOWN, scroll if possible. - success = this.setScrollCursor(this.scrollCursor + 1); - } else { + success = this.setScrollCursor(this.scrollCursor + 1); + } else { // When at the bottom of a scrolling menu and pressing DOWN, move to the topmost item. // First, set the cursor to the first visible element, preparing for the scroll to the top. - const successA = this.setCursor(0); - // Then, adjust the scroll to display the topmost elements of the menu. - const successB = this.setScrollCursor(0); - success = successA && successB; // success is just there to play the little validation sound effect - } - } else if (this.scene.gameMode.challenges.length < rowsToDisplay && this.cursor === this.scene.gameMode.challenges.length - 1) { + const successA = this.setCursor(0); + // Then, adjust the scroll to display the topmost elements of the menu. + const successB = this.setScrollCursor(0); + success = successA && successB; // success is just there to play the little validation sound effect + } + } else if (this.scene.gameMode.challenges.length < rowsToDisplay && this.cursor === this.scene.gameMode.challenges.length - 1) { // When at the bottom of a non-scrolling menu and pressing DOWN, move to the topmost item. - success = this.setCursor(0); - } else { - success = this.setCursor(this.cursor + 1); - } - if (success) { - this.updateText(); - } - break; - case Button.LEFT: + success = this.setCursor(0); + } else { + success = this.setCursor(this.cursor + 1); + } + if (success) { + this.updateText(); + } + break; + case Button.LEFT: // Moves the option cursor left, if possible. - success = this.getActiveChallenge().decreaseValue(); - if (success) { - this.updateText(); - } - break; - case Button.RIGHT: + success = this.getActiveChallenge().decreaseValue(); + if (success) { + this.updateText(); + } + break; + case Button.RIGHT: // Moves the option cursor right, if possible. - success = this.getActiveChallenge().increaseValue(); - if (success) { - this.updateText(); - } - break; + success = this.getActiveChallenge().increaseValue(); + if (success) { + this.updateText(); + } + break; } } } diff --git a/src/ui/command-ui-handler.ts b/src/ui/command-ui-handler.ts index 2f65fa0b457..0f5edc28675 100644 --- a/src/ui/command-ui-handler.ts +++ b/src/ui/command-ui-handler.ts @@ -89,54 +89,54 @@ export default class CommandUiHandler extends UiHandler { if (button === Button.ACTION) { switch (cursor) { // Fight - case Command.FIGHT: - if ((this.scene.getCurrentPhase() as CommandPhase).checkFightOverride()) { - return true; - } - ui.setMode(Mode.FIGHT, (this.scene.getCurrentPhase() as CommandPhase).getFieldIndex()); - success = true; - break; + case Command.FIGHT: + if ((this.scene.getCurrentPhase() as CommandPhase).checkFightOverride()) { + return true; + } + ui.setMode(Mode.FIGHT, (this.scene.getCurrentPhase() as CommandPhase).getFieldIndex()); + success = true; + break; // Ball - case Command.BALL: - ui.setModeWithoutClear(Mode.BALL); - success = true; - break; + case Command.BALL: + ui.setModeWithoutClear(Mode.BALL); + success = true; + break; // Pokemon - case Command.POKEMON: - ui.setMode(Mode.PARTY, PartyUiMode.SWITCH, (this.scene.getCurrentPhase() as CommandPhase).getPokemon().getFieldIndex(), null, PartyUiHandler.FilterNonFainted); - success = true; - break; + case Command.POKEMON: + ui.setMode(Mode.PARTY, PartyUiMode.SWITCH, (this.scene.getCurrentPhase() as CommandPhase).getPokemon().getFieldIndex(), null, PartyUiHandler.FilterNonFainted); + success = true; + break; // Run - case Command.RUN: - (this.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.RUN, 0); - success = true; - break; + case Command.RUN: + (this.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.RUN, 0); + success = true; + break; } } else { (this.scene.getCurrentPhase() as CommandPhase).cancel(); } } else { switch (button) { - case Button.UP: - if (cursor >= 2) { - success = this.setCursor(cursor - 2); - } - break; - case Button.DOWN: - if (cursor < 2) { - success = this.setCursor(cursor + 2); - } - break; - case Button.LEFT: - if (cursor % 2 === 1) { - success = this.setCursor(cursor - 1); - } - break; - case Button.RIGHT: - if (cursor % 2 === 0) { - success = this.setCursor(cursor + 1); - } - break; + case Button.UP: + if (cursor >= 2) { + success = this.setCursor(cursor - 2); + } + break; + case Button.DOWN: + if (cursor < 2) { + success = this.setCursor(cursor + 2); + } + break; + case Button.LEFT: + if (cursor % 2 === 1) { + success = this.setCursor(cursor - 1); + } + break; + case Button.RIGHT: + if (cursor % 2 === 0) { + success = this.setCursor(cursor + 1); + } + break; } } diff --git a/src/ui/daily-run-scoreboard.ts b/src/ui/daily-run-scoreboard.ts index b535a94d35c..b9c1c6ea49a 100644 --- a/src/ui/daily-run-scoreboard.ts +++ b/src/ui/daily-run-scoreboard.ts @@ -142,13 +142,13 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container { entryContainer.add(scoreLabel); switch (this.category) { - case ScoreboardCategory.DAILY: - const waveLabel = addTextObject(this.scene, 68, 0, wave, TextStyle.WINDOW, { fontSize: "54px" }); - entryContainer.add(waveLabel); - break; - case ScoreboardCategory.WEEKLY: - scoreLabel.x -= 16; - break; + case ScoreboardCategory.DAILY: + const waveLabel = addTextObject(this.scene, 68, 0, wave, TextStyle.WINDOW, { fontSize: "54px" }); + entryContainer.add(waveLabel); + break; + case ScoreboardCategory.WEEKLY: + scoreLabel.x -= 16; + break; } return entryContainer; diff --git a/src/ui/dropdown.ts b/src/ui/dropdown.ts index eec44480c89..e16efe17036 100644 --- a/src/ui/dropdown.ts +++ b/src/ui/dropdown.ts @@ -115,18 +115,18 @@ export class DropDownOption extends Phaser.GameObjects.Container { */ private updateToggleIconColor(): void { switch (this.state) { - case DropDownState.ON: - this.toggle.setTint(this.onColor); - break; - case DropDownState.OFF: - this.toggle.setTint(this.offColor); - break; - case DropDownState.EXCLUDE: - this.toggle.setTint(this.excludeColor); - break; - case DropDownState.UNLOCKABLE: - this.toggle.setTint(this.unlockableColor); - break; + case DropDownState.ON: + this.toggle.setTint(this.onColor); + break; + case DropDownState.OFF: + this.toggle.setTint(this.offColor); + break; + case DropDownState.EXCLUDE: + this.toggle.setTint(this.excludeColor); + break; + case DropDownState.UNLOCKABLE: + this.toggle.setTint(this.unlockableColor); + break; } } @@ -500,18 +500,18 @@ export class DropDown extends Phaser.GameObjects.Container { }; switch (this.dropDownType) { - case DropDownType.MULTI: - case DropDownType.RADIAL: - return compareValues([ "val", "state" ]); + case DropDownType.MULTI: + case DropDownType.RADIAL: + return compareValues([ "val", "state" ]); - case DropDownType.HYBRID: - return compareValues([ "val", "state", "cursor" ]); + case DropDownType.HYBRID: + return compareValues([ "val", "state", "cursor" ]); - case DropDownType.SINGLE: - return compareValues([ "val", "state", "dir" ]); + case DropDownType.SINGLE: + return compareValues([ "val", "state", "dir" ]); - default: - return false; + default: + return false; } } diff --git a/src/ui/egg-gacha-ui-handler.ts b/src/ui/egg-gacha-ui-handler.ts index 3aa009b1b31..8f977ba2ac0 100644 --- a/src/ui/egg-gacha-ui-handler.ts +++ b/src/ui/egg-gacha-ui-handler.ts @@ -127,47 +127,47 @@ export default class EggGachaUiHandler extends MessageUiHandler { gachaInfoContainer.add(gachaUpLabel); switch (gachaType as GachaType) { - case GachaType.LEGENDARY: - if ([ "de", "es" ].includes(currentLanguage)) { - gachaUpLabel.setAlign("center"); - gachaUpLabel.setY(0); - } - if ([ "pt-BR" ].includes(currentLanguage)) { - gachaUpLabel.setX(legendaryLabelX - 2); - } else { - gachaUpLabel.setX(legendaryLabelX); - } - gachaUpLabel.setY(legendaryLabelY); + case GachaType.LEGENDARY: + if ([ "de", "es" ].includes(currentLanguage)) { + gachaUpLabel.setAlign("center"); + gachaUpLabel.setY(0); + } + if ([ "pt-BR" ].includes(currentLanguage)) { + gachaUpLabel.setX(legendaryLabelX - 2); + } else { + gachaUpLabel.setX(legendaryLabelX); + } + gachaUpLabel.setY(legendaryLabelY); - const pokemonIcon = this.scene.add.sprite(pokemonIconX, pokemonIconY, "pokemon_icons_0"); - if ([ "pt-BR" ].includes(currentLanguage)) { - pokemonIcon.setX(pokemonIconX - 2); - } - pokemonIcon.setScale(0.5); - pokemonIcon.setOrigin(0, 0.5); + const pokemonIcon = this.scene.add.sprite(pokemonIconX, pokemonIconY, "pokemon_icons_0"); + if ([ "pt-BR" ].includes(currentLanguage)) { + pokemonIcon.setX(pokemonIconX - 2); + } + pokemonIcon.setScale(0.5); + pokemonIcon.setOrigin(0, 0.5); - gachaInfoContainer.add(pokemonIcon); - break; - case GachaType.MOVE: - if ([ "de", "es", "fr", "pt-BR" ].includes(currentLanguage)) { - gachaUpLabel.setAlign("center"); - gachaUpLabel.setY(0); - } + gachaInfoContainer.add(pokemonIcon); + break; + case GachaType.MOVE: + if ([ "de", "es", "fr", "pt-BR" ].includes(currentLanguage)) { + gachaUpLabel.setAlign("center"); + gachaUpLabel.setY(0); + } - gachaUpLabel.setText(i18next.t("egg:moveUPGacha")); - gachaUpLabel.setX(0); - gachaUpLabel.setOrigin(0.5, 0); - break; - case GachaType.SHINY: - if ([ "de", "fr", "ko" ].includes(currentLanguage)) { - gachaUpLabel.setAlign("center"); - gachaUpLabel.setY(0); - } + gachaUpLabel.setText(i18next.t("egg:moveUPGacha")); + gachaUpLabel.setX(0); + gachaUpLabel.setOrigin(0.5, 0); + break; + case GachaType.SHINY: + if ([ "de", "fr", "ko" ].includes(currentLanguage)) { + gachaUpLabel.setAlign("center"); + gachaUpLabel.setY(0); + } - gachaUpLabel.setText(i18next.t("egg:shinyUPGacha")); - gachaUpLabel.setX(0); - gachaUpLabel.setOrigin(0.5, 0); - break; + gachaUpLabel.setText(i18next.t("egg:shinyUPGacha")); + gachaUpLabel.setX(0); + gachaUpLabel.setOrigin(0.5, 0); + break; } const gachaKnob = this.scene.add.sprite(191, 89, "gacha_knob"); @@ -470,12 +470,12 @@ export default class EggGachaUiHandler extends MessageUiHandler { getGuaranteedEggTierFromPullCount(pullCount: number): EggTier { switch (pullCount) { - case 10: - return EggTier.RARE; - case 25: - return EggTier.EPIC; - default: - return EggTier.COMMON; + case 10: + return EggTier.RARE; + case 25: + return EggTier.EPIC; + default: + return EggTier.COMMON; } } @@ -567,11 +567,11 @@ export default class EggGachaUiHandler extends MessageUiHandler { updateGachaInfo(gachaType: GachaType): void { const infoContainer = this.gachaInfoContainers[gachaType]; switch (gachaType as GachaType) { - case GachaType.LEGENDARY: - const species = getPokemonSpecies(getLegendaryGachaSpeciesForTimestamp(this.scene, new Date().getTime())); - const pokemonIcon = infoContainer.getAt(1) as Phaser.GameObjects.Sprite; - pokemonIcon.setTexture(species.getIconAtlasKey(), species.getIconId(false)); - break; + case GachaType.LEGENDARY: + const species = getPokemonSpecies(getLegendaryGachaSpeciesForTimestamp(this.scene, new Date().getTime())); + const pokemonIcon = infoContainer.getAt(1) as Phaser.GameObjects.Sprite; + pokemonIcon.setTexture(species.getIconAtlasKey(), species.getIconId(false)); + break; } } @@ -638,106 +638,106 @@ export default class EggGachaUiHandler extends MessageUiHandler { } } else { switch (button) { - case Button.ACTION: - switch (this.cursor) { - case 0: - if (!this.scene.gameData.voucherCounts[VoucherType.REGULAR] && !Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { - error = true; - this.showError(i18next.t("egg:notEnoughVouchers")); - } else if (this.scene.gameData.eggs.length < 99 || Overrides.UNLIMITED_EGG_COUNT_OVERRIDE) { - if (!Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { - this.consumeVouchers(VoucherType.REGULAR, 1); - } - this.pull(); - success = true; - } else { - error = true; - this.showError(i18next.t("egg:tooManyEggs")); - } - break; - case 2: - if (!this.scene.gameData.voucherCounts[VoucherType.PLUS] && !Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { - error = true; - this.showError(i18next.t("egg:notEnoughVouchers")); - } else if (this.scene.gameData.eggs.length < 95 || Overrides.UNLIMITED_EGG_COUNT_OVERRIDE) { - if (!Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { - this.consumeVouchers(VoucherType.PLUS, 1); - } - this.pull(5); - success = true; - } else { - error = true; - this.showError(i18next.t("egg:tooManyEggs")); - } - break; - case 1: - case 3: - if ((this.cursor === 1 && this.scene.gameData.voucherCounts[VoucherType.REGULAR] < 10 && !Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) + case Button.ACTION: + switch (this.cursor) { + case 0: + if (!this.scene.gameData.voucherCounts[VoucherType.REGULAR] && !Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { + error = true; + this.showError(i18next.t("egg:notEnoughVouchers")); + } else if (this.scene.gameData.eggs.length < 99 || Overrides.UNLIMITED_EGG_COUNT_OVERRIDE) { + if (!Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { + this.consumeVouchers(VoucherType.REGULAR, 1); + } + this.pull(); + success = true; + } else { + error = true; + this.showError(i18next.t("egg:tooManyEggs")); + } + break; + case 2: + if (!this.scene.gameData.voucherCounts[VoucherType.PLUS] && !Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { + error = true; + this.showError(i18next.t("egg:notEnoughVouchers")); + } else if (this.scene.gameData.eggs.length < 95 || Overrides.UNLIMITED_EGG_COUNT_OVERRIDE) { + if (!Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { + this.consumeVouchers(VoucherType.PLUS, 1); + } + this.pull(5); + success = true; + } else { + error = true; + this.showError(i18next.t("egg:tooManyEggs")); + } + break; + case 1: + case 3: + if ((this.cursor === 1 && this.scene.gameData.voucherCounts[VoucherType.REGULAR] < 10 && !Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) || (this.cursor === 3 && !this.scene.gameData.voucherCounts[VoucherType.PREMIUM] && !Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE)) { - error = true; - this.showError(i18next.t("egg:notEnoughVouchers")); - } else if (this.scene.gameData.eggs.length < 90 || Overrides.UNLIMITED_EGG_COUNT_OVERRIDE) { - if (this.cursor === 3) { - if (!Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { - this.consumeVouchers(VoucherType.PREMIUM, 1); + error = true; + this.showError(i18next.t("egg:notEnoughVouchers")); + } else if (this.scene.gameData.eggs.length < 90 || Overrides.UNLIMITED_EGG_COUNT_OVERRIDE) { + if (this.cursor === 3) { + if (!Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { + this.consumeVouchers(VoucherType.PREMIUM, 1); + } + } else { + if (!Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { + this.consumeVouchers(VoucherType.REGULAR, 10); + } + } + this.pull(10); + success = true; + } else { + error = true; + this.showError(i18next.t("egg:tooManyEggs")); } - } else { - if (!Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { - this.consumeVouchers(VoucherType.REGULAR, 10); + break; + case 4: + if (!this.scene.gameData.voucherCounts[VoucherType.GOLDEN] && !Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { + error = true; + this.showError(i18next.t("egg:notEnoughVouchers")); + } else if (this.scene.gameData.eggs.length < 75 || Overrides.UNLIMITED_EGG_COUNT_OVERRIDE) { + if (!Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { + this.consumeVouchers(VoucherType.GOLDEN, 1); + } + this.pull(25); + success = true; + } else { + error = true; + this.showError(i18next.t("egg:tooManyEggs")); } - } - this.pull(10); - success = true; - } else { - error = true; - this.showError(i18next.t("egg:tooManyEggs")); + break; + case 5: + ui.revertMode(); + success = true; + break; } break; - case 4: - if (!this.scene.gameData.voucherCounts[VoucherType.GOLDEN] && !Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { - error = true; - this.showError(i18next.t("egg:notEnoughVouchers")); - } else if (this.scene.gameData.eggs.length < 75 || Overrides.UNLIMITED_EGG_COUNT_OVERRIDE) { - if (!Overrides.EGG_FREE_GACHA_PULLS_OVERRIDE) { - this.consumeVouchers(VoucherType.GOLDEN, 1); - } - this.pull(25); - success = true; - } else { - error = true; - this.showError(i18next.t("egg:tooManyEggs")); - } - break; - case 5: - ui.revertMode(); + case Button.CANCEL: + this.getUi().revertMode(); success = true; break; - } - break; - case Button.CANCEL: - this.getUi().revertMode(); - success = true; - break; - case Button.UP: - if (this.cursor) { - success = this.setCursor(this.cursor - 1); - } - break; - case Button.DOWN: - if (this.cursor < 5) { - success = this.setCursor(this.cursor + 1); - } - break; - case Button.LEFT: - if (this.gachaCursor) { - success = this.setGachaCursor(this.gachaCursor - 1); - } - break; - case Button.RIGHT: - if (this.gachaCursor < Utils.getEnumKeys(GachaType).length - 1) { - success = this.setGachaCursor(this.gachaCursor + 1); - } - break; + case Button.UP: + if (this.cursor) { + success = this.setCursor(this.cursor - 1); + } + break; + case Button.DOWN: + if (this.cursor < 5) { + success = this.setCursor(this.cursor + 1); + } + break; + case Button.LEFT: + if (this.gachaCursor) { + success = this.setGachaCursor(this.gachaCursor - 1); + } + break; + case Button.RIGHT: + if (this.gachaCursor < Utils.getEnumKeys(GachaType).length - 1) { + success = this.setGachaCursor(this.gachaCursor + 1); + } + break; } } } diff --git a/src/ui/fight-ui-handler.ts b/src/ui/fight-ui-handler.ts index 78894a7bf00..ee6641a1a27 100644 --- a/src/ui/fight-ui-handler.ts +++ b/src/ui/fight-ui-handler.ts @@ -152,26 +152,26 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { } } else { switch (button) { - case Button.UP: - if (cursor >= 2) { - success = this.setCursor(cursor - 2); - } - break; - case Button.DOWN: - if (cursor < 2) { - success = this.setCursor(cursor + 2); - } - break; - case Button.LEFT: - if (cursor % 2 === 1) { - success = this.setCursor(cursor - 1); - } - break; - case Button.RIGHT: - if (cursor % 2 === 0) { - success = this.setCursor(cursor + 1); - } - break; + case Button.UP: + if (cursor >= 2) { + success = this.setCursor(cursor - 2); + } + break; + case Button.DOWN: + if (cursor < 2) { + success = this.setCursor(cursor + 2); + } + break; + case Button.LEFT: + if (cursor % 2 === 1) { + success = this.setCursor(cursor - 1); + } + break; + case Button.RIGHT: + if (cursor % 2 === 0) { + success = this.setCursor(cursor + 1); + } + break; } } diff --git a/src/ui/game-stats-ui-handler.ts b/src/ui/game-stats-ui-handler.ts index 4d7b0855092..671bed29036 100644 --- a/src/ui/game-stats-ui-handler.ts +++ b/src/ui/game-stats-ui-handler.ts @@ -351,16 +351,16 @@ export default class GameStatsUiHandler extends UiHandler { this.scene.ui.revertMode(); } else { switch (button) { - case Button.UP: - if (this.cursor) { - success = this.setCursor(this.cursor - 1); - } - break; - case Button.DOWN: - if (this.cursor < Math.ceil((Object.keys(displayStats).length - 18) / 2)) { - success = this.setCursor(this.cursor + 1); - } - break; + case Button.UP: + if (this.cursor) { + success = this.setCursor(this.cursor - 1); + } + break; + case Button.DOWN: + if (this.cursor < Math.ceil((Object.keys(displayStats).length - 18) / 2)) { + success = this.setCursor(this.cursor + 1); + } + break; } } diff --git a/src/ui/login-form-ui-handler.ts b/src/ui/login-form-ui-handler.ts index 192a6cefa7a..8be432ad6c1 100644 --- a/src/ui/login-form-ui-handler.ts +++ b/src/ui/login-form-ui-handler.ts @@ -97,18 +97,18 @@ export default class LoginFormUiHandler extends FormModalUiHandler { error = error.slice(0, colonIndex); } switch (error) { - case this.ERR_USERNAME: - return i18next.t("menu:invalidLoginUsername"); - case this.ERR_PASSWORD: - return i18next.t("menu:invalidLoginPassword"); - case this.ERR_ACCOUNT_EXIST: - return i18next.t("menu:accountNonExistent"); - case this.ERR_PASSWORD_MATCH: - return i18next.t("menu:unmatchingPassword"); - case this.ERR_NO_SAVES: - return i18next.t("menu:noSaves"); - case this.ERR_TOO_MANY_SAVES: - return i18next.t("menu:tooManySaves"); + case this.ERR_USERNAME: + return i18next.t("menu:invalidLoginUsername"); + case this.ERR_PASSWORD: + return i18next.t("menu:invalidLoginPassword"); + case this.ERR_ACCOUNT_EXIST: + return i18next.t("menu:accountNonExistent"); + case this.ERR_PASSWORD_MATCH: + return i18next.t("menu:unmatchingPassword"); + case this.ERR_NO_SAVES: + return i18next.t("menu:noSaves"); + case this.ERR_TOO_MANY_SAVES: + return i18next.t("menu:tooManySaves"); } return super.getReadableErrorMessage(error); diff --git a/src/ui/menu-ui-handler.ts b/src/ui/menu-ui-handler.ts index adebf9fb912..0f4c2d2f53e 100644 --- a/src/ui/menu-ui-handler.ts +++ b/src/ui/menu-ui-handler.ts @@ -468,148 +468,148 @@ export default class MenuUiHandler extends MessageUiHandler { } this.showText("", 0); switch (adjustedCursor) { - case MenuOptions.GAME_SETTINGS: - ui.setOverlayMode(Mode.SETTINGS); - success = true; - break; - case MenuOptions.ACHIEVEMENTS: - ui.setOverlayMode(Mode.ACHIEVEMENTS); - success = true; - break; - case MenuOptions.STATS: - ui.setOverlayMode(Mode.GAME_STATS); - success = true; - break; - case MenuOptions.RUN_HISTORY: - ui.setOverlayMode(Mode.RUN_HISTORY); - success = true; - break; - case MenuOptions.EGG_LIST: - if (this.scene.gameData.eggs.length) { + case MenuOptions.GAME_SETTINGS: + ui.setOverlayMode(Mode.SETTINGS); + success = true; + break; + case MenuOptions.ACHIEVEMENTS: + ui.setOverlayMode(Mode.ACHIEVEMENTS); + success = true; + break; + case MenuOptions.STATS: + ui.setOverlayMode(Mode.GAME_STATS); + success = true; + break; + case MenuOptions.RUN_HISTORY: + ui.setOverlayMode(Mode.RUN_HISTORY); + success = true; + break; + case MenuOptions.EGG_LIST: + if (this.scene.gameData.eggs.length) { + ui.revertMode(); + ui.setOverlayMode(Mode.EGG_LIST); + success = true; + } else { + ui.showText(i18next.t("menuUiHandler:noEggs"), null, () => ui.showText(""), Utils.fixedInt(1500)); + error = true; + } + break; + case MenuOptions.EGG_GACHA: ui.revertMode(); - ui.setOverlayMode(Mode.EGG_LIST); + ui.setOverlayMode(Mode.EGG_GACHA); success = true; - } else { - ui.showText(i18next.t("menuUiHandler:noEggs"), null, () => ui.showText(""), Utils.fixedInt(1500)); - error = true; - } - break; - case MenuOptions.EGG_GACHA: - ui.revertMode(); - ui.setOverlayMode(Mode.EGG_GACHA); - success = true; - break; - case MenuOptions.MANAGE_DATA: - if (!bypassLogin && !this.manageDataConfig.options.some(o => o.label === i18next.t("menuUiHandler:linkDiscord") || o.label === i18next.t("menuUiHandler:unlinkDiscord"))) { - this.manageDataConfig.options.splice(this.manageDataConfig.options.length - 1, 0, - { - label: loggedInUser?.discordId === "" ? i18next.t("menuUiHandler:linkDiscord") : i18next.t("menuUiHandler:unlinkDiscord"), - handler: () => { - if (loggedInUser?.discordId === "") { - const token = Utils.getCookie(Utils.sessionIdKey); - const redirectUri = encodeURIComponent(`${import.meta.env.VITE_SERVER_URL}/auth/discord/callback`); - const discordId = import.meta.env.VITE_DISCORD_CLIENT_ID; - const discordUrl = `https://discord.com/api/oauth2/authorize?client_id=${discordId}&redirect_uri=${redirectUri}&response_type=code&scope=identify&state=${token}&prompt=none`; - window.open(discordUrl, "_self"); - return true; - } else { - Utils.apiPost("/auth/discord/logout", undefined, undefined, true).then(res => { - if (!res.ok) { - console.error(`Unlink failed (${res.status}: ${res.statusText})`); - } - updateUserInfo().then(() => this.scene.reset(true, true)); - }); - return true; + break; + case MenuOptions.MANAGE_DATA: + if (!bypassLogin && !this.manageDataConfig.options.some(o => o.label === i18next.t("menuUiHandler:linkDiscord") || o.label === i18next.t("menuUiHandler:unlinkDiscord"))) { + this.manageDataConfig.options.splice(this.manageDataConfig.options.length - 1, 0, + { + label: loggedInUser?.discordId === "" ? i18next.t("menuUiHandler:linkDiscord") : i18next.t("menuUiHandler:unlinkDiscord"), + handler: () => { + if (loggedInUser?.discordId === "") { + const token = Utils.getCookie(Utils.sessionIdKey); + const redirectUri = encodeURIComponent(`${import.meta.env.VITE_SERVER_URL}/auth/discord/callback`); + const discordId = import.meta.env.VITE_DISCORD_CLIENT_ID; + const discordUrl = `https://discord.com/api/oauth2/authorize?client_id=${discordId}&redirect_uri=${redirectUri}&response_type=code&scope=identify&state=${token}&prompt=none`; + window.open(discordUrl, "_self"); + return true; + } else { + Utils.apiPost("/auth/discord/logout", undefined, undefined, true).then(res => { + if (!res.ok) { + console.error(`Unlink failed (${res.status}: ${res.statusText})`); + } + updateUserInfo().then(() => this.scene.reset(true, true)); + }); + return true; + } } - } - }, - { - label: loggedInUser?.googleId === "" ? i18next.t("menuUiHandler:linkGoogle") : i18next.t("menuUiHandler:unlinkGoogle"), - handler: () => { - if (loggedInUser?.googleId === "") { - const token = Utils.getCookie(Utils.sessionIdKey); - const redirectUri = encodeURIComponent(`${import.meta.env.VITE_SERVER_URL}/auth/google/callback`); - const googleId = import.meta.env.VITE_GOOGLE_CLIENT_ID; - const googleUrl = `https://accounts.google.com/o/oauth2/auth?client_id=${googleId}&response_type=code&redirect_uri=${redirectUri}&scope=openid&state=${token}`; - window.open(googleUrl, "_self"); - return true; - } else { - Utils.apiPost("/auth/google/logout", undefined, undefined, true).then(res => { - if (!res.ok) { - console.error(`Unlink failed (${res.status}: ${res.statusText})`); - } - updateUserInfo().then(() => this.scene.reset(true, true)); - }); - return true; + }, + { + label: loggedInUser?.googleId === "" ? i18next.t("menuUiHandler:linkGoogle") : i18next.t("menuUiHandler:unlinkGoogle"), + handler: () => { + if (loggedInUser?.googleId === "") { + const token = Utils.getCookie(Utils.sessionIdKey); + const redirectUri = encodeURIComponent(`${import.meta.env.VITE_SERVER_URL}/auth/google/callback`); + const googleId = import.meta.env.VITE_GOOGLE_CLIENT_ID; + const googleUrl = `https://accounts.google.com/o/oauth2/auth?client_id=${googleId}&response_type=code&redirect_uri=${redirectUri}&scope=openid&state=${token}`; + window.open(googleUrl, "_self"); + return true; + } else { + Utils.apiPost("/auth/google/logout", undefined, undefined, true).then(res => { + if (!res.ok) { + console.error(`Unlink failed (${res.status}: ${res.statusText})`); + } + updateUserInfo().then(() => this.scene.reset(true, true)); + }); + return true; + } } - } - }); - } - ui.setOverlayMode(Mode.MENU_OPTION_SELECT, this.manageDataConfig); - success = true; - break; - case MenuOptions.COMMUNITY: - ui.setOverlayMode(Mode.MENU_OPTION_SELECT, this.communityConfig); - success = true; - break; - case MenuOptions.SAVE_AND_QUIT: - if (this.scene.currentBattle) { + }); + } + ui.setOverlayMode(Mode.MENU_OPTION_SELECT, this.manageDataConfig); success = true; - const doSaveQuit = () => { - ui.setMode(Mode.LOADING, { - buttonActions: [], fadeOut: () => - this.scene.gameData.saveAll(this.scene, true, true, true, true).then(() => { + break; + case MenuOptions.COMMUNITY: + ui.setOverlayMode(Mode.MENU_OPTION_SELECT, this.communityConfig); + success = true; + break; + case MenuOptions.SAVE_AND_QUIT: + if (this.scene.currentBattle) { + success = true; + const doSaveQuit = () => { + ui.setMode(Mode.LOADING, { + buttonActions: [], fadeOut: () => + this.scene.gameData.saveAll(this.scene, true, true, true, true).then(() => { - this.scene.reset(true); - }) + this.scene.reset(true); + }) + }); + }; + if (this.scene.currentBattle.turn > 1) { + ui.showText(i18next.t("menuUiHandler:losingProgressionWarning"), null, () => { + if (!this.active) { + this.showText("", 0); + return; + } + ui.setOverlayMode(Mode.CONFIRM, doSaveQuit, () => { + ui.revertMode(); + this.showText("", 0); + }, false, -98); + }); + } else { + doSaveQuit(); + } + } else { + error = true; + } + break; + case MenuOptions.LOG_OUT: + success = true; + const doLogout = () => { + ui.setMode(Mode.LOADING, { + buttonActions: [], fadeOut: () => Utils.apiFetch("account/logout", true).then(res => { + if (!res.ok) { + console.error(`Log out failed (${res.status}: ${res.statusText})`); + } + Utils.removeCookie(Utils.sessionIdKey); + updateUserInfo().then(() => this.scene.reset(true, true)); + }) }); }; - if (this.scene.currentBattle.turn > 1) { + if (this.scene.currentBattle) { ui.showText(i18next.t("menuUiHandler:losingProgressionWarning"), null, () => { if (!this.active) { this.showText("", 0); return; } - ui.setOverlayMode(Mode.CONFIRM, doSaveQuit, () => { + ui.setOverlayMode(Mode.CONFIRM, doLogout, () => { ui.revertMode(); this.showText("", 0); }, false, -98); }); } else { - doSaveQuit(); + doLogout(); } - } else { - error = true; - } - break; - case MenuOptions.LOG_OUT: - success = true; - const doLogout = () => { - ui.setMode(Mode.LOADING, { - buttonActions: [], fadeOut: () => Utils.apiFetch("account/logout", true).then(res => { - if (!res.ok) { - console.error(`Log out failed (${res.status}: ${res.statusText})`); - } - Utils.removeCookie(Utils.sessionIdKey); - updateUserInfo().then(() => this.scene.reset(true, true)); - }) - }); - }; - if (this.scene.currentBattle) { - ui.showText(i18next.t("menuUiHandler:losingProgressionWarning"), null, () => { - if (!this.active) { - this.showText("", 0); - return; - } - ui.setOverlayMode(Mode.CONFIRM, doLogout, () => { - ui.revertMode(); - this.showText("", 0); - }, false, -98); - }); - } else { - doLogout(); - } - break; + break; } } else if (button === Button.CANCEL) { success = true; @@ -620,20 +620,20 @@ export default class MenuUiHandler extends MessageUiHandler { }); } else { switch (button) { - case Button.UP: - if (this.cursor) { - success = this.setCursor(this.cursor - 1); - } else { - success = this.setCursor(this.menuOptions.length - 1); - } - break; - case Button.DOWN: - if (this.cursor + 1 < this.menuOptions.length) { - success = this.setCursor(this.cursor + 1); - } else { - success = this.setCursor(0); - } - break; + case Button.UP: + if (this.cursor) { + success = this.setCursor(this.cursor - 1); + } else { + success = this.setCursor(this.menuOptions.length - 1); + } + break; + case Button.DOWN: + if (this.cursor + 1 < this.menuOptions.length) { + success = this.setCursor(this.cursor + 1); + } else { + success = this.setCursor(0); + } + break; } } diff --git a/src/ui/message-ui-handler.ts b/src/ui/message-ui-handler.ts index f1b8ed981ee..5ae4707e329 100644 --- a/src/ui/message-ui-handler.ts +++ b/src/ui/message-ui-handler.ts @@ -56,18 +56,18 @@ export default abstract class MessageUiHandler extends AwaitableUiHandler { let actionMatch: RegExpExecArray | null; while ((actionMatch = actionPattern.exec(text))) { switch (actionMatch[1]) { - case "c": - charVarMap.set(actionMatch.index, actionMatch[2]); - break; - case "d": - delayMap.set(actionMatch.index, parseInt(actionMatch[2])); - break; - case "s": - soundMap.set(actionMatch.index, actionMatch[2]); - break; - case "f": - fadeMap.set(actionMatch.index, parseInt(actionMatch[2])); - break; + case "c": + charVarMap.set(actionMatch.index, actionMatch[2]); + break; + case "d": + delayMap.set(actionMatch.index, parseInt(actionMatch[2])); + break; + case "s": + soundMap.set(actionMatch.index, actionMatch[2]); + break; + case "f": + fadeMap.set(actionMatch.index, parseInt(actionMatch[2])); + break; } text = text.slice(0, actionMatch.index) + text.slice(actionMatch.index + actionMatch[2].length + 4); } diff --git a/src/ui/modifier-select-ui-handler.ts b/src/ui/modifier-select-ui-handler.ts index 1948d75ac4c..3f89ebe415f 100644 --- a/src/ui/modifier-select-ui-handler.ts +++ b/src/ui/modifier-select-ui-handler.ts @@ -357,79 +357,79 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { } } else { switch (button) { - case Button.UP: - if (this.rowCursor === 0 && this.cursor === 3) { - success = this.setCursor(0); - } else if (this.rowCursor < this.shopOptionsRows.length + 1) { - success = this.setRowCursor(this.rowCursor + 1); - } - break; - case Button.DOWN: - if (this.rowCursor) { - success = this.setRowCursor(this.rowCursor - 1); - } else if (this.lockRarityButtonContainer.visible && this.cursor === 0) { - success = this.setCursor(3); - } - break; - case Button.LEFT: - if (!this.rowCursor) { - switch (this.cursor) { - case 0: - success = false; - break; - case 1: - if (this.lockRarityButtonContainer.visible) { - success = this.setCursor(3); - } else { - success = this.rerollButtonContainer.visible && this.setCursor(0); - } - break; - case 2: - if (this.transferButtonContainer.visible) { - success = this.setCursor(1); - } else if (this.rerollButtonContainer.visible) { - success = this.setCursor(0); - } else { - success = false; - } - break; + case Button.UP: + if (this.rowCursor === 0 && this.cursor === 3) { + success = this.setCursor(0); + } else if (this.rowCursor < this.shopOptionsRows.length + 1) { + success = this.setRowCursor(this.rowCursor + 1); } - } else if (this.cursor) { - success = this.setCursor(this.cursor - 1); - } else if (this.rowCursor === 1 && this.rerollButtonContainer.visible) { - success = this.setRowCursor(0); - } - break; - case Button.RIGHT: - if (!this.rowCursor) { - switch (this.cursor) { - case 0: - if (this.transferButtonContainer.visible) { - success = this.setCursor(1); - } else { - success = this.setCursor(2); - } - break; - case 1: - success = this.setCursor(2); - break; - case 2: - success = false; - break; - case 3: - if (this.transferButtonContainer.visible) { - success = this.setCursor(1); - } else { - success = this.setCursor(2); - } - break; + break; + case Button.DOWN: + if (this.rowCursor) { + success = this.setRowCursor(this.rowCursor - 1); + } else if (this.lockRarityButtonContainer.visible && this.cursor === 0) { + success = this.setCursor(3); } - } else if (this.cursor < this.getRowItems(this.rowCursor) - 1) { - success = this.setCursor(this.cursor + 1); - } else if (this.rowCursor === 1 && this.transferButtonContainer.visible) { - success = this.setRowCursor(0); - } - break; + break; + case Button.LEFT: + if (!this.rowCursor) { + switch (this.cursor) { + case 0: + success = false; + break; + case 1: + if (this.lockRarityButtonContainer.visible) { + success = this.setCursor(3); + } else { + success = this.rerollButtonContainer.visible && this.setCursor(0); + } + break; + case 2: + if (this.transferButtonContainer.visible) { + success = this.setCursor(1); + } else if (this.rerollButtonContainer.visible) { + success = this.setCursor(0); + } else { + success = false; + } + break; + } + } else if (this.cursor) { + success = this.setCursor(this.cursor - 1); + } else if (this.rowCursor === 1 && this.rerollButtonContainer.visible) { + success = this.setRowCursor(0); + } + break; + case Button.RIGHT: + if (!this.rowCursor) { + switch (this.cursor) { + case 0: + if (this.transferButtonContainer.visible) { + success = this.setCursor(1); + } else { + success = this.setCursor(2); + } + break; + case 1: + success = this.setCursor(2); + break; + case 2: + success = false; + break; + case 3: + if (this.transferButtonContainer.visible) { + success = this.setCursor(1); + } else { + success = this.setCursor(2); + } + break; + } + } else if (this.cursor < this.getRowItems(this.rowCursor) - 1) { + success = this.setCursor(this.cursor + 1); + } else if (this.rowCursor === 1 && this.transferButtonContainer.visible) { + success = this.setRowCursor(0); + } + break; } } @@ -527,12 +527,12 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { private getRowItems(rowCursor: integer): integer { switch (rowCursor) { - case 0: - return 3; - case 1: - return this.options.length; - default: - return this.shopOptionsRows[this.shopOptionsRows.length - (rowCursor - 1)].length; + case 0: + return 3; + case 1: + return this.options.length; + default: + return this.shopOptionsRows[this.shopOptionsRows.length - (rowCursor - 1)].length; } } diff --git a/src/ui/mystery-encounter-ui-handler.ts b/src/ui/mystery-encounter-ui-handler.ts index 0a838707432..b568f8b71de 100644 --- a/src/ui/mystery-encounter-ui-handler.ts +++ b/src/ui/mystery-encounter-ui-handler.ts @@ -159,16 +159,16 @@ export default class MysteryEncounterUiHandler extends UiHandler { } } else { switch (this.optionsContainer.getAll()?.length) { - default: - case 3: - success = this.handleTwoOptionMoveInput(button); - break; - case 4: - success = this.handleThreeOptionMoveInput(button); - break; - case 5: - success = this.handleFourOptionMoveInput(button); - break; + default: + case 3: + success = this.handleTwoOptionMoveInput(button); + break; + case 4: + success = this.handleThreeOptionMoveInput(button); + break; + case 5: + success = this.handleFourOptionMoveInput(button); + break; } this.displayOptionTooltip(); @@ -185,26 +185,26 @@ export default class MysteryEncounterUiHandler extends UiHandler { let success = false; const cursor = this.getCursor(); switch (button) { - case Button.UP: - if (cursor < this.viewPartyIndex) { - success = this.setCursor(this.viewPartyIndex); - } - break; - case Button.DOWN: - if (cursor === this.viewPartyIndex) { - success = this.setCursor(1); - } - break; - case Button.LEFT: - if (cursor > 0) { - success = this.setCursor(cursor - 1); - } - break; - case Button.RIGHT: - if (cursor < this.viewPartyIndex) { - success = this.setCursor(cursor + 1); - } - break; + case Button.UP: + if (cursor < this.viewPartyIndex) { + success = this.setCursor(this.viewPartyIndex); + } + break; + case Button.DOWN: + if (cursor === this.viewPartyIndex) { + success = this.setCursor(1); + } + break; + case Button.LEFT: + if (cursor > 0) { + success = this.setCursor(cursor - 1); + } + break; + case Button.RIGHT: + if (cursor < this.viewPartyIndex) { + success = this.setCursor(cursor + 1); + } + break; } return success; @@ -214,34 +214,34 @@ export default class MysteryEncounterUiHandler extends UiHandler { let success = false; const cursor = this.getCursor(); switch (button) { - case Button.UP: - if (cursor === 2) { - success = this.setCursor(cursor - 2); - } else { - success = this.setCursor(this.viewPartyIndex); - } - break; - case Button.DOWN: - if (cursor === this.viewPartyIndex) { - success = this.setCursor(1); - } else { - success = this.setCursor(2); - } - break; - case Button.LEFT: - if (cursor === this.viewPartyIndex) { - success = this.setCursor(1); - } else if (cursor === 1) { - success = this.setCursor(cursor - 1); - } - break; - case Button.RIGHT: - if (cursor === 1) { - success = this.setCursor(this.viewPartyIndex); - } else if (cursor < 1) { - success = this.setCursor(cursor + 1); - } - break; + case Button.UP: + if (cursor === 2) { + success = this.setCursor(cursor - 2); + } else { + success = this.setCursor(this.viewPartyIndex); + } + break; + case Button.DOWN: + if (cursor === this.viewPartyIndex) { + success = this.setCursor(1); + } else { + success = this.setCursor(2); + } + break; + case Button.LEFT: + if (cursor === this.viewPartyIndex) { + success = this.setCursor(1); + } else if (cursor === 1) { + success = this.setCursor(cursor - 1); + } + break; + case Button.RIGHT: + if (cursor === 1) { + success = this.setCursor(this.viewPartyIndex); + } else if (cursor < 1) { + success = this.setCursor(cursor + 1); + } + break; } return success; @@ -251,34 +251,34 @@ export default class MysteryEncounterUiHandler extends UiHandler { let success = false; const cursor = this.getCursor(); switch (button) { - case Button.UP: - if (cursor >= 2 && cursor !== this.viewPartyIndex) { - success = this.setCursor(cursor - 2); - } else { - success = this.setCursor(this.viewPartyIndex); - } - break; - case Button.DOWN: - if (cursor <= 1) { - success = this.setCursor(cursor + 2); - } else if (cursor === this.viewPartyIndex) { - success = this.setCursor(1); - } - break; - case Button.LEFT: - if (cursor === this.viewPartyIndex) { - success = this.setCursor(1); - } else if (cursor % 2 === 1) { - success = this.setCursor(cursor - 1); - } - break; - case Button.RIGHT: - if (cursor === 1) { - success = this.setCursor(this.viewPartyIndex); - } else if (cursor % 2 === 0 && cursor !== this.viewPartyIndex) { - success = this.setCursor(cursor + 1); - } - break; + case Button.UP: + if (cursor >= 2 && cursor !== this.viewPartyIndex) { + success = this.setCursor(cursor - 2); + } else { + success = this.setCursor(this.viewPartyIndex); + } + break; + case Button.DOWN: + if (cursor <= 1) { + success = this.setCursor(cursor + 2); + } else if (cursor === this.viewPartyIndex) { + success = this.setCursor(1); + } + break; + case Button.LEFT: + if (cursor === this.viewPartyIndex) { + success = this.setCursor(1); + } else if (cursor % 2 === 1) { + success = this.setCursor(cursor - 1); + } + break; + case Button.RIGHT: + if (cursor === 1) { + success = this.setCursor(this.viewPartyIndex); + } else if (cursor % 2 === 0 && cursor !== this.viewPartyIndex) { + success = this.setCursor(cursor + 1); + } + break; } return success; @@ -351,16 +351,16 @@ export default class MysteryEncounterUiHandler extends UiHandler { let optionText: BBCodeText; switch (this.encounterOptions.length) { - default: - case 2: - optionText = addBBCodeTextObject(this.scene, i % 2 === 0 ? 0 : 100, 8, "-", TextStyle.WINDOW, { fontSize: "80px", lineSpacing: -8 }); - break; - case 3: - optionText = addBBCodeTextObject(this.scene, i % 2 === 0 ? 0 : 100, i < 2 ? 0 : 16, "-", TextStyle.WINDOW, { fontSize: "80px", lineSpacing: -8 }); - break; - case 4: - optionText = addBBCodeTextObject(this.scene, i % 2 === 0 ? 0 : 100, i < 2 ? 0 : 16, "-", TextStyle.WINDOW, { fontSize: "80px", lineSpacing: -8 }); - break; + default: + case 2: + optionText = addBBCodeTextObject(this.scene, i % 2 === 0 ? 0 : 100, 8, "-", TextStyle.WINDOW, { fontSize: "80px", lineSpacing: -8 }); + break; + case 3: + optionText = addBBCodeTextObject(this.scene, i % 2 === 0 ? 0 : 100, i < 2 ? 0 : 16, "-", TextStyle.WINDOW, { fontSize: "80px", lineSpacing: -8 }); + break; + case 4: + optionText = addBBCodeTextObject(this.scene, i % 2 === 0 ? 0 : 100, i < 2 ? 0 : 16, "-", TextStyle.WINDOW, { fontSize: "80px", lineSpacing: -8 }); + break; } this.optionsMeetsReqs.push(option.meetsRequirements(this.scene)); diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index cfc5e146f08..e96fde8d54f 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -539,42 +539,42 @@ export default class PartyUiHandler extends MessageUiHandler { return true; } else { switch (button) { - case Button.LEFT: + case Button.LEFT: /** Decrease quantity for the current item and update UI */ - if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER) { - this.transferQuantities[option] = this.transferQuantities[option] === 1 ? this.transferQuantitiesMax[option] : this.transferQuantities[option] - 1; - this.updateOptions(); - success = this.setCursor(this.optionsCursor); /** Place again the cursor at the same position. Necessary, otherwise the cursor disappears */ - } - break; - case Button.RIGHT: + if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER) { + this.transferQuantities[option] = this.transferQuantities[option] === 1 ? this.transferQuantitiesMax[option] : this.transferQuantities[option] - 1; + this.updateOptions(); + success = this.setCursor(this.optionsCursor); /** Place again the cursor at the same position. Necessary, otherwise the cursor disappears */ + } + break; + case Button.RIGHT: /** Increase quantity for the current item and update UI */ - if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER) { - this.transferQuantities[option] = this.transferQuantities[option] === this.transferQuantitiesMax[option] ? 1 : this.transferQuantities[option] + 1; - this.updateOptions(); - success = this.setCursor(this.optionsCursor); /** Place again the cursor at the same position. Necessary, otherwise the cursor disappears */ - } - break; - case Button.UP: - /** If currently selecting items to transfer, reset quantity selection */ - if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER) { - if (option !== PartyOption.ALL) { - this.transferQuantities[option] = this.transferQuantitiesMax[option]; + if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER) { + this.transferQuantities[option] = this.transferQuantities[option] === this.transferQuantitiesMax[option] ? 1 : this.transferQuantities[option] + 1; + this.updateOptions(); + success = this.setCursor(this.optionsCursor); /** Place again the cursor at the same position. Necessary, otherwise the cursor disappears */ } - this.updateOptions(); - } - success = this.setCursor(this.optionsCursor ? this.optionsCursor - 1 : this.options.length - 1); /** Move cursor */ - break; - case Button.DOWN: + break; + case Button.UP: /** If currently selecting items to transfer, reset quantity selection */ - if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER) { - if (option !== PartyOption.ALL) { - this.transferQuantities[option] = this.transferQuantitiesMax[option]; + if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER) { + if (option !== PartyOption.ALL) { + this.transferQuantities[option] = this.transferQuantitiesMax[option]; + } + this.updateOptions(); } - this.updateOptions(); - } - success = this.setCursor(this.optionsCursor < this.options.length - 1 ? this.optionsCursor + 1 : 0); /** Move cursor */ - break; + success = this.setCursor(this.optionsCursor ? this.optionsCursor - 1 : this.options.length - 1); /** Move cursor */ + break; + case Button.DOWN: + /** If currently selecting items to transfer, reset quantity selection */ + if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER) { + if (option !== PartyOption.ALL) { + this.transferQuantities[option] = this.transferQuantitiesMax[option]; + } + this.updateOptions(); + } + success = this.setCursor(this.optionsCursor < this.options.length - 1 ? this.optionsCursor + 1 : 0); /** Move cursor */ + break; } // show move description @@ -631,28 +631,28 @@ export default class PartyUiHandler extends MessageUiHandler { const battlerCount = this.scene.currentBattle.getBattlerCount(); switch (button) { - case Button.UP: - success = this.setCursor(this.cursor ? this.cursor < 6 ? this.cursor - 1 : slotCount - 1 : 6); - break; - case Button.DOWN: - success = this.setCursor(this.cursor < 6 ? this.cursor < slotCount - 1 ? this.cursor + 1 : 6 : 0); - break; - case Button.LEFT: - if (this.cursor >= battlerCount && this.cursor <= 6) { - success = this.setCursor(0); - } - break; - case Button.RIGHT: - if (slotCount === battlerCount) { - success = this.setCursor(6); + case Button.UP: + success = this.setCursor(this.cursor ? this.cursor < 6 ? this.cursor - 1 : slotCount - 1 : 6); break; - } else if (battlerCount >= 2 && slotCount > battlerCount && this.getCursor() === 0 && this.lastCursor === 1) { - success = this.setCursor(2); + case Button.DOWN: + success = this.setCursor(this.cursor < 6 ? this.cursor < slotCount - 1 ? this.cursor + 1 : 6 : 0); break; - } else if (slotCount > battlerCount && this.cursor < battlerCount) { - success = this.setCursor(this.lastCursor < 6 ? this.lastCursor || battlerCount : battlerCount); + case Button.LEFT: + if (this.cursor >= battlerCount && this.cursor <= 6) { + success = this.setCursor(0); + } break; - } + case Button.RIGHT: + if (slotCount === battlerCount) { + success = this.setCursor(6); + break; + } else if (battlerCount >= 2 && slotCount > battlerCount && this.getCursor() === 0 && this.lastCursor === 1) { + success = this.setCursor(2); + break; + } else if (slotCount > battlerCount && this.cursor < battlerCount) { + success = this.setCursor(this.lastCursor < 6 ? this.lastCursor || battlerCount : battlerCount); + break; + } } } @@ -773,19 +773,19 @@ export default class PartyUiHandler extends MessageUiHandler { let optionsMessage = i18next.t("partyUiHandler:doWhatWithThisPokemon"); switch (this.partyUiMode) { - case PartyUiMode.MOVE_MODIFIER: - optionsMessage = i18next.t("partyUiHandler:selectAMove"); - break; - case PartyUiMode.MODIFIER_TRANSFER: - if (!this.transferMode) { - optionsMessage = i18next.t("partyUiHandler:changeQuantity"); - } - break; - case PartyUiMode.SPLICE: - if (!this.transferMode) { - optionsMessage = i18next.t("partyUiHandler:selectAnotherPokemonToSplice"); - } - break; + case PartyUiMode.MOVE_MODIFIER: + optionsMessage = i18next.t("partyUiHandler:selectAMove"); + break; + case PartyUiMode.MODIFIER_TRANSFER: + if (!this.transferMode) { + optionsMessage = i18next.t("partyUiHandler:changeQuantity"); + } + break; + case PartyUiMode.SPLICE: + if (!this.transferMode) { + optionsMessage = i18next.t("partyUiHandler:selectAnotherPokemonToSplice"); + } + break; } this.showText(optionsMessage, 0); @@ -829,64 +829,64 @@ export default class PartyUiHandler extends MessageUiHandler { if (this.partyUiMode !== PartyUiMode.MOVE_MODIFIER && this.partyUiMode !== PartyUiMode.REMEMBER_MOVE_MODIFIER && (this.transferMode || this.partyUiMode !== PartyUiMode.MODIFIER_TRANSFER)) { switch (this.partyUiMode) { - case PartyUiMode.SWITCH: - case PartyUiMode.FAINT_SWITCH: - case PartyUiMode.POST_BATTLE_SWITCH: - if (this.cursor >= this.scene.currentBattle.getBattlerCount()) { - const allowBatonModifierSwitch = + case PartyUiMode.SWITCH: + case PartyUiMode.FAINT_SWITCH: + case PartyUiMode.POST_BATTLE_SWITCH: + if (this.cursor >= this.scene.currentBattle.getBattlerCount()) { + const allowBatonModifierSwitch = this.partyUiMode !== PartyUiMode.FAINT_SWITCH && this.scene.findModifier(m => m instanceof SwitchEffectTransferModifier && (m as SwitchEffectTransferModifier).pokemonId === this.scene.getPlayerField()[this.fieldIndex].id); - const moveHistory = this.scene.getPlayerField()[this.fieldIndex].getMoveHistory(); - const isBatonPassMove = this.partyUiMode === PartyUiMode.FAINT_SWITCH && moveHistory.length && allMoves[moveHistory[moveHistory.length - 1].move].getAttrs(ForceSwitchOutAttr)[0]?.isBatonPass() && moveHistory[moveHistory.length - 1].result === MoveResult.SUCCESS; + const moveHistory = this.scene.getPlayerField()[this.fieldIndex].getMoveHistory(); + const isBatonPassMove = this.partyUiMode === PartyUiMode.FAINT_SWITCH && moveHistory.length && allMoves[moveHistory[moveHistory.length - 1].move].getAttrs(ForceSwitchOutAttr)[0]?.isBatonPass() && moveHistory[moveHistory.length - 1].result === MoveResult.SUCCESS; - // isBatonPassMove and allowBatonModifierSwitch shouldn't ever be true - // at the same time, because they both explicitly check for a mutually - // exclusive partyUiMode. But better safe than sorry. - this.options.push(isBatonPassMove && !allowBatonModifierSwitch ? PartyOption.PASS_BATON : PartyOption.SEND_OUT); - if (allowBatonModifierSwitch && !isBatonPassMove) { + // isBatonPassMove and allowBatonModifierSwitch shouldn't ever be true + // at the same time, because they both explicitly check for a mutually + // exclusive partyUiMode. But better safe than sorry. + this.options.push(isBatonPassMove && !allowBatonModifierSwitch ? PartyOption.PASS_BATON : PartyOption.SEND_OUT); + if (allowBatonModifierSwitch && !isBatonPassMove) { // the BATON modifier gives an extra switch option for // pokemon-command switches, allowing buffs to be optionally passed - this.options.push(PartyOption.PASS_BATON); + this.options.push(PartyOption.PASS_BATON); + } } - } - break; - case PartyUiMode.REVIVAL_BLESSING: - this.options.push(PartyOption.REVIVE); - break; - case PartyUiMode.MODIFIER: - this.options.push(PartyOption.APPLY); - break; - case PartyUiMode.TM_MODIFIER: - this.options.push(PartyOption.TEACH); - break; - case PartyUiMode.MODIFIER_TRANSFER: - this.options.push(PartyOption.TRANSFER); - break; - case PartyUiMode.SPLICE: - if (this.transferMode) { - if (this.cursor !== this.transferCursor) { - this.options.push(PartyOption.SPLICE); - } - } else { + break; + case PartyUiMode.REVIVAL_BLESSING: + this.options.push(PartyOption.REVIVE); + break; + case PartyUiMode.MODIFIER: this.options.push(PartyOption.APPLY); - } - break; - case PartyUiMode.RELEASE: - this.options.push(PartyOption.RELEASE); - break; - case PartyUiMode.CHECK: - if (this.scene.getCurrentPhase() instanceof SelectModifierPhase) { - formChangeItemModifiers = this.getFormChangeItemsModifiers(pokemon); - for (let i = 0; i < formChangeItemModifiers.length; i++) { - this.options.push(PartyOption.FORM_CHANGE_ITEM + i); + break; + case PartyUiMode.TM_MODIFIER: + this.options.push(PartyOption.TEACH); + break; + case PartyUiMode.MODIFIER_TRANSFER: + this.options.push(PartyOption.TRANSFER); + break; + case PartyUiMode.SPLICE: + if (this.transferMode) { + if (this.cursor !== this.transferCursor) { + this.options.push(PartyOption.SPLICE); + } + } else { + this.options.push(PartyOption.APPLY); } - } - break; - case PartyUiMode.SELECT: - this.options.push(PartyOption.SELECT); - break; + break; + case PartyUiMode.RELEASE: + this.options.push(PartyOption.RELEASE); + break; + case PartyUiMode.CHECK: + if (this.scene.getCurrentPhase() instanceof SelectModifierPhase) { + formChangeItemModifiers = this.getFormChangeItemsModifiers(pokemon); + for (let i = 0; i < formChangeItemModifiers.length; i++) { + this.options.push(PartyOption.FORM_CHANGE_ITEM + i); + } + } + break; + case PartyUiMode.SELECT: + this.options.push(PartyOption.SELECT); + break; } this.options.push(PartyOption.SUMMARY); @@ -962,33 +962,33 @@ export default class PartyUiHandler extends MessageUiHandler { optionName = "↓"; } else if ((this.partyUiMode !== PartyUiMode.REMEMBER_MOVE_MODIFIER && (this.partyUiMode !== PartyUiMode.MODIFIER_TRANSFER || this.transferMode)) || option === PartyOption.CANCEL) { switch (option) { - case PartyOption.MOVE_1: - case PartyOption.MOVE_2: - case PartyOption.MOVE_3: - case PartyOption.MOVE_4: - const move = pokemon.moveset[option - PartyOption.MOVE_1]!; // TODO: is the bang correct? - if (this.showMovePp) { - const maxPP = move.getMovePp(); - const currPP = maxPP - move.ppUsed; - optionName = `${move.getName()} ${currPP}/${maxPP}`; - } else { - optionName = move.getName(); - } - break; - default: - if (formChangeItemModifiers && option >= PartyOption.FORM_CHANGE_ITEM) { - const modifier = formChangeItemModifiers[option - PartyOption.FORM_CHANGE_ITEM]; - optionName = `${modifier.active ? i18next.t("partyUiHandler:DEACTIVATE") : i18next.t("partyUiHandler:ACTIVATE")} ${modifier.type.name}`; - } else if (option === PartyOption.UNPAUSE_EVOLUTION) { - optionName = `${pokemon.pauseEvolutions ? i18next.t("partyUiHandler:UNPAUSE_EVOLUTION") : i18next.t("partyUiHandler:PAUSE_EVOLUTION")}`; - } else { - if (this.localizedOptions.includes(option)) { - optionName = i18next.t(`partyUiHandler:${PartyOption[option]}`); + case PartyOption.MOVE_1: + case PartyOption.MOVE_2: + case PartyOption.MOVE_3: + case PartyOption.MOVE_4: + const move = pokemon.moveset[option - PartyOption.MOVE_1]!; // TODO: is the bang correct? + if (this.showMovePp) { + const maxPP = move.getMovePp(); + const currPP = maxPP - move.ppUsed; + optionName = `${move.getName()} ${currPP}/${maxPP}`; } else { - optionName = Utils.toReadableString(PartyOption[option]); + optionName = move.getName(); } - } - break; + break; + default: + if (formChangeItemModifiers && option >= PartyOption.FORM_CHANGE_ITEM) { + const modifier = formChangeItemModifiers[option - PartyOption.FORM_CHANGE_ITEM]; + optionName = `${modifier.active ? i18next.t("partyUiHandler:DEACTIVATE") : i18next.t("partyUiHandler:ACTIVATE")} ${modifier.type.name}`; + } else if (option === PartyOption.UNPAUSE_EVOLUTION) { + optionName = `${pokemon.pauseEvolutions ? i18next.t("partyUiHandler:UNPAUSE_EVOLUTION") : i18next.t("partyUiHandler:PAUSE_EVOLUTION")}`; + } else { + if (this.localizedOptions.includes(option)) { + optionName = i18next.t(`partyUiHandler:${PartyOption[option]}`); + } else { + optionName = Utils.toReadableString(PartyOption[option]); + } + } + break; } } else if (this.partyUiMode === PartyUiMode.REMEMBER_MOVE_MODIFIER) { const move = learnableLevelMoves[option]; diff --git a/src/ui/pokemon-icon-anim-handler.ts b/src/ui/pokemon-icon-anim-handler.ts index d6796d5cb5d..c7a24f69200 100644 --- a/src/ui/pokemon-icon-anim-handler.ts +++ b/src/ui/pokemon-icon-anim-handler.ts @@ -39,12 +39,12 @@ export default class PokemonIconAnimHandler { getModeYDelta(mode: PokemonIconAnimMode): number { switch (mode) { - case PokemonIconAnimMode.NONE: - return 0; - case PokemonIconAnimMode.PASSIVE: - return -1; - case PokemonIconAnimMode.ACTIVE: - return -2; + case PokemonIconAnimMode.NONE: + return 0; + case PokemonIconAnimMode.PASSIVE: + return -1; + case PokemonIconAnimMode.ACTIVE: + return -2; } } diff --git a/src/ui/registration-form-ui-handler.ts b/src/ui/registration-form-ui-handler.ts index c94d060c0b7..2f8486bcdb3 100644 --- a/src/ui/registration-form-ui-handler.ts +++ b/src/ui/registration-form-ui-handler.ts @@ -50,12 +50,12 @@ export default class RegistrationFormUiHandler extends FormModalUiHandler { error = error.slice(0, colonIndex); } switch (error) { - case "invalid username": - return i18next.t("menu:invalidRegisterUsername"); - case "invalid password": - return i18next.t("menu:invalidRegisterPassword"); - case "failed to add account record": - return i18next.t("menu:usernameAlreadyUsed"); + case "invalid username": + return i18next.t("menu:invalidRegisterUsername"); + case "invalid password": + return i18next.t("menu:invalidRegisterPassword"); + case "failed to add account record": + return i18next.t("menu:usernameAlreadyUsed"); } return super.getReadableErrorMessage(error); diff --git a/src/ui/run-history-ui-handler.ts b/src/ui/run-history-ui-handler.ts index 20de7fd832c..061f15d0956 100644 --- a/src/ui/run-history-ui-handler.ts +++ b/src/ui/run-history-ui-handler.ts @@ -118,28 +118,28 @@ export default class RunHistoryUiHandler extends MessageUiHandler { } } else if (this.runs.length > 0) { switch (button) { - case Button.UP: - if (this.cursor) { - success = this.setCursor(this.cursor - 1); - } else if (this.scrollCursor) { - success = this.setScrollCursor(this.scrollCursor - 1); - } else if (this.runs.length > 1) { + case Button.UP: + if (this.cursor) { + success = this.setCursor(this.cursor - 1); + } else if (this.scrollCursor) { + success = this.setScrollCursor(this.scrollCursor - 1); + } else if (this.runs.length > 1) { // wrap around to the bottom - success = this.setCursor(Math.min(this.runs.length - 1, this.maxRows - 1)); - success = this.setScrollCursor(Math.max(0, this.runs.length - this.maxRows)) || success; - } - break; - case Button.DOWN: - if (this.cursor < Math.min(this.maxRows - 1, this.runs.length - this.scrollCursor - 1)) { - success = this.setCursor(this.cursor + 1); - } else if (this.scrollCursor < this.runs.length - this.maxRows) { - success = this.setScrollCursor(this.scrollCursor + 1); - } else if (this.runs.length > 1) { + success = this.setCursor(Math.min(this.runs.length - 1, this.maxRows - 1)); + success = this.setScrollCursor(Math.max(0, this.runs.length - this.maxRows)) || success; + } + break; + case Button.DOWN: + if (this.cursor < Math.min(this.maxRows - 1, this.runs.length - this.scrollCursor - 1)) { + success = this.setCursor(this.cursor + 1); + } else if (this.scrollCursor < this.runs.length - this.maxRows) { + success = this.setScrollCursor(this.scrollCursor + 1); + } else if (this.runs.length > 1) { // wrap around to the top - success = this.setCursor(0); - success = this.setScrollCursor(0) || success; - } - break; + success = this.setCursor(0); + success = this.setScrollCursor(0) || success; + } + break; } } @@ -333,19 +333,19 @@ class RunEntryContainer extends Phaser.GameObjects.Container { const gameModeLabel = addTextObject(this.scene, 8, 19, "", TextStyle.WINDOW); let mode = ""; switch (data.gameMode) { - case GameModes.DAILY: - mode = i18next.t("gameMode:dailyRun"); - break; - case GameModes.SPLICED_ENDLESS: - case GameModes.ENDLESS: - mode = i18next.t("gameMode:endless"); - break; - case GameModes.CLASSIC: - mode = i18next.t("gameMode:classic"); - break; - case GameModes.CHALLENGE: - mode = i18next.t("gameMode:challenge"); - break; + case GameModes.DAILY: + mode = i18next.t("gameMode:dailyRun"); + break; + case GameModes.SPLICED_ENDLESS: + case GameModes.ENDLESS: + mode = i18next.t("gameMode:endless"); + break; + case GameModes.CLASSIC: + mode = i18next.t("gameMode:classic"); + break; + case GameModes.CHALLENGE: + mode = i18next.t("gameMode:challenge"); + break; } gameModeLabel.appendText(mode, false); if (data.gameMode === GameModes.SPLICED_ENDLESS) { diff --git a/src/ui/run-info-ui-handler.ts b/src/ui/run-info-ui-handler.ts index 1976d5a997b..0ca47241136 100644 --- a/src/ui/run-info-ui-handler.ts +++ b/src/ui/run-info-ui-handler.ts @@ -229,14 +229,14 @@ export default class RunInfoUiHandler extends UiHandler { // Wild - Single and Doubles if (this.runInfo.battleType === BattleType.WILD || (this.runInfo.battleType === BattleType.MYSTERY_ENCOUNTER && !this.runInfo.trainer)) { switch (this.runInfo.enemyParty.length) { - case 1: + case 1: // Wild - Singles - this.parseWildSingleDefeat(enemyContainer); - break; - case 2: + this.parseWildSingleDefeat(enemyContainer); + break; + case 2: //Wild - Doubles - this.parseWildDoubleDefeat(enemyContainer); - break; + this.parseWildDoubleDefeat(enemyContainer); + break; } } else if (this.runInfo.battleType === BattleType.TRAINER || (this.runInfo.battleType === BattleType.MYSTERY_ENCOUNTER && this.runInfo.trainer)) { this.parseTrainerDefeat(enemyContainer); @@ -474,33 +474,33 @@ export default class RunInfoUiHandler extends UiHandler { modeText.setPosition(7, 5); modeText.appendText(i18next.t("runHistory:mode") + ": ", false); switch (this.runInfo.gameMode) { - case GameModes.DAILY: - modeText.appendText(`${i18next.t("gameMode:dailyRun")}`, false); - break; - case GameModes.SPLICED_ENDLESS: - modeText.appendText(`${i18next.t("gameMode:endlessSpliced")}`, false); - break; - case GameModes.CHALLENGE: - modeText.appendText(`${i18next.t("gameMode:challenge")}`, false); - modeText.appendText(`${i18next.t("runHistory:challengeRules")}: `); - modeText.setWrapMode(1); // wrap by word - modeText.setWrapWidth(500); - const rules: string[] = this.challengeParser(); - if (rules) { - for (let i = 0; i < rules.length; i++) { - if (i > 0) { - modeText.appendText(" + ", false); + case GameModes.DAILY: + modeText.appendText(`${i18next.t("gameMode:dailyRun")}`, false); + break; + case GameModes.SPLICED_ENDLESS: + modeText.appendText(`${i18next.t("gameMode:endlessSpliced")}`, false); + break; + case GameModes.CHALLENGE: + modeText.appendText(`${i18next.t("gameMode:challenge")}`, false); + modeText.appendText(`${i18next.t("runHistory:challengeRules")}: `); + modeText.setWrapMode(1); // wrap by word + modeText.setWrapWidth(500); + const rules: string[] = this.challengeParser(); + if (rules) { + for (let i = 0; i < rules.length; i++) { + if (i > 0) { + modeText.appendText(" + ", false); + } + modeText.appendText(rules[i], false); } - modeText.appendText(rules[i], false); } - } - break; - case GameModes.ENDLESS: - modeText.appendText(`${i18next.t("gameMode:endless")}`, false); - break; - case GameModes.CLASSIC: - modeText.appendText(`${i18next.t("gameMode:classic")}`, false); - break; + break; + case GameModes.ENDLESS: + modeText.appendText(`${i18next.t("gameMode:endless")}`, false); + break; + case GameModes.CLASSIC: + modeText.appendText(`${i18next.t("gameMode:classic")}`, false); + break; } // If the player achieves a personal best in Endless, the mode text will be tinted similarly to SSS luck to celebrate their achievement. @@ -577,23 +577,23 @@ export default class RunInfoUiHandler extends UiHandler { for (let i = 0; i < this.runInfo.challenges.length; i++) { if (this.runInfo.challenges[i].value !== 0) { switch (this.runInfo.challenges[i].id) { - case Challenges.SINGLE_GENERATION: - rules.push(i18next.t(`runHistory:challengeMonoGen${this.runInfo.challenges[i].value}`)); - break; - case Challenges.SINGLE_TYPE: - const typeRule = Type[this.runInfo.challenges[i].value - 1]; - const typeTextColor = `[color=${TypeColor[typeRule]}]`; - const typeShadowColor = `[shadow=${TypeShadow[typeRule]}]`; - const typeText = typeTextColor + typeShadowColor + i18next.t(`pokemonInfo:Type.${typeRule}`)! + "[/color]" + "[/shadow]"; - rules.push(typeText); - break; - case Challenges.INVERSE_BATTLE: - rules.push(i18next.t("challenges:inverseBattle.shortName")); - break; - default: - const localisationKey = Challenges[this.runInfo.challenges[i].id].split("_").map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join(""); - rules.push(i18next.t(`challenges:${localisationKey}.name`)); - break; + case Challenges.SINGLE_GENERATION: + rules.push(i18next.t(`runHistory:challengeMonoGen${this.runInfo.challenges[i].value}`)); + break; + case Challenges.SINGLE_TYPE: + const typeRule = Type[this.runInfo.challenges[i].value - 1]; + const typeTextColor = `[color=${TypeColor[typeRule]}]`; + const typeShadowColor = `[shadow=${TypeShadow[typeRule]}]`; + const typeText = typeTextColor + typeShadowColor + i18next.t(`pokemonInfo:Type.${typeRule}`)! + "[/color]" + "[/shadow]"; + rules.push(typeText); + break; + case Challenges.INVERSE_BATTLE: + rules.push(i18next.t("challenges:inverseBattle.shortName")); + break; + default: + const localisationKey = Challenges[this.runInfo.challenges[i].id].split("_").map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join(""); + rules.push(i18next.t(`challenges:${localisationKey}.name`)); + break; } } } @@ -911,36 +911,36 @@ export default class RunInfoUiHandler extends UiHandler { const error = false; switch (button) { - case Button.CANCEL: - success = true; - if (this.pageMode === RunInfoUiMode.MAIN) { - this.runInfoContainer.removeAll(true); - this.runResultContainer.removeAll(true); - this.partyContainer.removeAll(true); - this.runContainer.removeAll(true); - if (this.isVictory) { - this.hallofFameContainer.removeAll(true); + case Button.CANCEL: + success = true; + if (this.pageMode === RunInfoUiMode.MAIN) { + this.runInfoContainer.removeAll(true); + this.runResultContainer.removeAll(true); + this.partyContainer.removeAll(true); + this.runContainer.removeAll(true); + if (this.isVictory) { + this.hallofFameContainer.removeAll(true); + } + super.clear(); + this.runContainer.setVisible(false); + ui.revertMode(); + } else if (this.pageMode === RunInfoUiMode.HALL_OF_FAME) { + this.hallofFameContainer.setVisible(false); + this.pageMode = RunInfoUiMode.MAIN; + } else if (this.pageMode === RunInfoUiMode.ENDING_ART) { + this.endCardContainer.setVisible(false); + this.runContainer.remove(this.endCardContainer); + this.pageMode = RunInfoUiMode.MAIN; } - super.clear(); - this.runContainer.setVisible(false); - ui.revertMode(); - } else if (this.pageMode === RunInfoUiMode.HALL_OF_FAME) { - this.hallofFameContainer.setVisible(false); - this.pageMode = RunInfoUiMode.MAIN; - } else if (this.pageMode === RunInfoUiMode.ENDING_ART) { - this.endCardContainer.setVisible(false); - this.runContainer.remove(this.endCardContainer); - this.pageMode = RunInfoUiMode.MAIN; - } - break; - case Button.DOWN: - case Button.UP: - break; - case Button.CYCLE_FORM: - case Button.CYCLE_SHINY: - case Button.CYCLE_ABILITY: - this.buttonCycleOption(button); - break; + break; + case Button.DOWN: + case Button.UP: + break; + case Button.CYCLE_FORM: + case Button.CYCLE_SHINY: + case Button.CYCLE_ABILITY: + this.buttonCycleOption(button); + break; } if (success) { @@ -960,40 +960,40 @@ export default class RunInfoUiHandler extends UiHandler { */ private buttonCycleOption(button: Button) { switch (button) { - case Button.CYCLE_FORM: - if (this.isVictory && this.pageMode !== RunInfoUiMode.HALL_OF_FAME) { - if (!this.endCardContainer || !this.endCardContainer.visible) { - this.createVictorySplash(); - this.endCardContainer.setVisible(true); - this.runContainer.add(this.endCardContainer); - this.pageMode = RunInfoUiMode.ENDING_ART; - } else { - this.endCardContainer.setVisible(false); - this.runContainer.remove(this.endCardContainer); - this.pageMode = RunInfoUiMode.MAIN; + case Button.CYCLE_FORM: + if (this.isVictory && this.pageMode !== RunInfoUiMode.HALL_OF_FAME) { + if (!this.endCardContainer || !this.endCardContainer.visible) { + this.createVictorySplash(); + this.endCardContainer.setVisible(true); + this.runContainer.add(this.endCardContainer); + this.pageMode = RunInfoUiMode.ENDING_ART; + } else { + this.endCardContainer.setVisible(false); + this.runContainer.remove(this.endCardContainer); + this.pageMode = RunInfoUiMode.MAIN; + } } - } - break; - case Button.CYCLE_SHINY: - if (this.isVictory && this.pageMode !== RunInfoUiMode.ENDING_ART) { - if (!this.hallofFameContainer.visible) { - this.hallofFameContainer.setVisible(true); - this.pageMode = RunInfoUiMode.HALL_OF_FAME; - } else { - this.hallofFameContainer.setVisible(false); - this.pageMode = RunInfoUiMode.MAIN; + break; + case Button.CYCLE_SHINY: + if (this.isVictory && this.pageMode !== RunInfoUiMode.ENDING_ART) { + if (!this.hallofFameContainer.visible) { + this.hallofFameContainer.setVisible(true); + this.pageMode = RunInfoUiMode.HALL_OF_FAME; + } else { + this.hallofFameContainer.setVisible(false); + this.pageMode = RunInfoUiMode.MAIN; + } } - } - break; - case Button.CYCLE_ABILITY: - if (this.runInfo.modifiers.length !== 0 && this.pageMode === RunInfoUiMode.MAIN) { - if (this.partyVisibility) { - this.showParty(false); - } else { - this.showParty(true); + break; + case Button.CYCLE_ABILITY: + if (this.runInfo.modifiers.length !== 0 && this.pageMode === RunInfoUiMode.MAIN) { + if (this.partyVisibility) { + this.showParty(false); + } else { + this.showParty(true); + } } - } - break; + break; } } } diff --git a/src/ui/save-slot-select-ui-handler.ts b/src/ui/save-slot-select-ui-handler.ts index 2e664db8d43..7bfecb1f99b 100644 --- a/src/ui/save-slot-select-ui-handler.ts +++ b/src/ui/save-slot-select-ui-handler.ts @@ -106,40 +106,40 @@ export default class SaveSlotSelectUiHandler extends MessageUiHandler { error = true; } else { switch (this.uiMode) { - case SaveSlotUiMode.LOAD: - this.saveSlotSelectCallback = null; - originalCallback && originalCallback(cursor); - break; - case SaveSlotUiMode.SAVE: - const saveAndCallback = () => { - const originalCallback = this.saveSlotSelectCallback; + case SaveSlotUiMode.LOAD: this.saveSlotSelectCallback = null; - ui.revertMode(); - ui.showText("", 0); - ui.setMode(Mode.MESSAGE); originalCallback && originalCallback(cursor); - }; - if (this.sessionSlots[cursor].hasData) { - ui.showText(i18next.t("saveSlotSelectUiHandler:overwriteData"), null, () => { - ui.setOverlayMode(Mode.CONFIRM, () => { - this.scene.gameData.deleteSession(cursor).then(response => { - if (response === false) { - this.scene.reset(true); - } else { - saveAndCallback(); - } - }); - }, () => { - ui.revertMode(); - ui.showText("", 0); - }, false, 0, 19, 2000); - }); - } else if (this.sessionSlots[cursor].hasData === false) { - saveAndCallback(); - } else { - return false; - } - break; + break; + case SaveSlotUiMode.SAVE: + const saveAndCallback = () => { + const originalCallback = this.saveSlotSelectCallback; + this.saveSlotSelectCallback = null; + ui.revertMode(); + ui.showText("", 0); + ui.setMode(Mode.MESSAGE); + originalCallback && originalCallback(cursor); + }; + if (this.sessionSlots[cursor].hasData) { + ui.showText(i18next.t("saveSlotSelectUiHandler:overwriteData"), null, () => { + ui.setOverlayMode(Mode.CONFIRM, () => { + this.scene.gameData.deleteSession(cursor).then(response => { + if (response === false) { + this.scene.reset(true); + } else { + saveAndCallback(); + } + }); + }, () => { + ui.revertMode(); + ui.showText("", 0); + }, false, 0, 19, 2000); + }); + } else if (this.sessionSlots[cursor].hasData === false) { + saveAndCallback(); + } else { + return false; + } + break; } success = true; } @@ -151,26 +151,26 @@ export default class SaveSlotSelectUiHandler extends MessageUiHandler { } else { const cursorPosition = this.cursor + this.scrollCursor; switch (button) { - case Button.UP: - if (this.cursor) { + case Button.UP: + if (this.cursor) { // Check to prevent cursor from accessing a negative index - success = (this.cursor === 0) ? this.setCursor(this.cursor) : this.setCursor(this.cursor - 1, cursorPosition); - } else if (this.scrollCursor) { - success = this.setScrollCursor(this.scrollCursor - 1, cursorPosition); - } - break; - case Button.DOWN: - if (this.cursor < (SLOTS_ON_SCREEN - 1)) { - success = this.setCursor(this.cursor + 1, cursorPosition); - } else if (this.scrollCursor < SESSION_SLOTS_COUNT - SLOTS_ON_SCREEN) { - success = this.setScrollCursor(this.scrollCursor + 1, cursorPosition); - } - break; - case Button.RIGHT: - if (this.sessionSlots[cursorPosition].hasData && this.sessionSlots[cursorPosition].saveData) { - this.scene.ui.setOverlayMode(Mode.RUN_INFO, this.sessionSlots[cursorPosition].saveData, RunDisplayMode.SESSION_PREVIEW); - success = true; - } + success = (this.cursor === 0) ? this.setCursor(this.cursor) : this.setCursor(this.cursor - 1, cursorPosition); + } else if (this.scrollCursor) { + success = this.setScrollCursor(this.scrollCursor - 1, cursorPosition); + } + break; + case Button.DOWN: + if (this.cursor < (SLOTS_ON_SCREEN - 1)) { + success = this.setCursor(this.cursor + 1, cursorPosition); + } else if (this.scrollCursor < SESSION_SLOTS_COUNT - SLOTS_ON_SCREEN) { + success = this.setScrollCursor(this.scrollCursor + 1, cursorPosition); + } + break; + case Button.RIGHT: + if (this.sessionSlots[cursorPosition].hasData && this.sessionSlots[cursorPosition].saveData) { + this.scene.ui.setOverlayMode(Mode.RUN_INFO, this.sessionSlots[cursorPosition].saveData, RunDisplayMode.SESSION_PREVIEW); + success = true; + } } } diff --git a/src/ui/scrollable-grid-handler.ts b/src/ui/scrollable-grid-handler.ts index f96f3c995b7..cced92a2083 100644 --- a/src/ui/scrollable-grid-handler.ts +++ b/src/ui/scrollable-grid-handler.ts @@ -106,48 +106,48 @@ export default class ScrollableGridUiHandler { const itemOffset = this.scrollCursor * this.COLUMNS; const lastVisibleIndex = Math.min(this.totalElements - 1, this.totalElements - maxScrollCursor * this.COLUMNS - 1); switch (button) { - case Button.UP: - if (currentRowIndex > 0) { - success = this.setCursor(this.cursor - this.COLUMNS); - } else if (this.scrollCursor > 0) { - success = this.setScrollCursor(this.scrollCursor - 1); - } else { + case Button.UP: + if (currentRowIndex > 0) { + success = this.setCursor(this.cursor - this.COLUMNS); + } else if (this.scrollCursor > 0) { + success = this.setScrollCursor(this.scrollCursor - 1); + } else { // wrap around to the last row - let newCursor = this.cursor + (onScreenRows - 1) * this.COLUMNS; - if (newCursor > lastVisibleIndex) { - newCursor -= this.COLUMNS; + let newCursor = this.cursor + (onScreenRows - 1) * this.COLUMNS; + if (newCursor > lastVisibleIndex) { + newCursor -= this.COLUMNS; + } + success = this.setScrollCursor(maxScrollCursor, newCursor); } - success = this.setScrollCursor(maxScrollCursor, newCursor); - } - break; - case Button.DOWN: - if (currentRowIndex < onScreenRows - 1) { + break; + case Button.DOWN: + if (currentRowIndex < onScreenRows - 1) { // Go down one row - success = this.setCursor(Math.min(this.cursor + this.COLUMNS, this.totalElements - itemOffset - 1)); - } else if (this.scrollCursor < maxScrollCursor) { + success = this.setCursor(Math.min(this.cursor + this.COLUMNS, this.totalElements - itemOffset - 1)); + } else if (this.scrollCursor < maxScrollCursor) { // Scroll down one row - success = this.setScrollCursor(this.scrollCursor + 1); - } else { + success = this.setScrollCursor(this.scrollCursor + 1); + } else { // Wrap around to the top row - success = this.setScrollCursor(0, this.cursor % this.COLUMNS); - } - break; - case Button.LEFT: - if (currentColumnIndex > 0) { - success = this.setCursor(this.cursor - 1); - } else if (this.scrollCursor === maxScrollCursor && currentRowIndex === onScreenRows - 1) { - success = this.setCursor(lastVisibleIndex); - } else { - success = this.setCursor(this.cursor + this.COLUMNS - 1); - } - break; - case Button.RIGHT: - if (currentColumnIndex < this.COLUMNS - 1 && this.cursor + itemOffset < this.totalElements - 1) { - success = this.setCursor(this.cursor + 1); - } else { - success = this.setCursor(this.cursor - currentColumnIndex); - } - break; + success = this.setScrollCursor(0, this.cursor % this.COLUMNS); + } + break; + case Button.LEFT: + if (currentColumnIndex > 0) { + success = this.setCursor(this.cursor - 1); + } else if (this.scrollCursor === maxScrollCursor && currentRowIndex === onScreenRows - 1) { + success = this.setCursor(lastVisibleIndex); + } else { + success = this.setCursor(this.cursor + this.COLUMNS - 1); + } + break; + case Button.RIGHT: + if (currentColumnIndex < this.COLUMNS - 1 && this.cursor + itemOffset < this.totalElements - 1) { + success = this.setCursor(this.cursor + 1); + } else { + success = this.setCursor(this.cursor - currentColumnIndex); + } + break; } return success; } diff --git a/src/ui/settings/abstract-binding-ui-handler.ts b/src/ui/settings/abstract-binding-ui-handler.ts index 9ee741f7bd4..9ebc3c493a4 100644 --- a/src/ui/settings/abstract-binding-ui-handler.ts +++ b/src/ui/settings/abstract-binding-ui-handler.ts @@ -170,22 +170,22 @@ export default abstract class AbstractBindingUiHandler extends UiHandler { const ui = this.getUi(); let success = false; switch (button) { - case Button.LEFT: - case Button.RIGHT: + case Button.LEFT: + case Button.RIGHT: // Toggle between action and cancel options. - const cursor = this.cursor ? 0 : 1; - success = this.setCursor(cursor); - break; - case Button.ACTION: + const cursor = this.cursor ? 0 : 1; + success = this.setCursor(cursor); + break; + case Button.ACTION: // Process actions based on current cursor position. - if (this.cursor === 0) { - this.cancelFn && this.cancelFn(); - } else { - success = this.swapAction(); - NavigationManager.getInstance().updateIcons(); - this.cancelFn && this.cancelFn(success); - } - break; + if (this.cursor === 0) { + this.cancelFn && this.cancelFn(); + } else { + success = this.swapAction(); + NavigationManager.getInstance().updateIcons(); + this.cancelFn && this.cancelFn(success); + } + break; } // Plays a select sound effect if an action was successfully processed. diff --git a/src/ui/settings/abstract-control-settings-ui-handler.ts b/src/ui/settings/abstract-control-settings-ui-handler.ts index 477eaf0a68b..69f8eb241d3 100644 --- a/src/ui/settings/abstract-control-settings-ui-handler.ts +++ b/src/ui/settings/abstract-control-settings-ui-handler.ts @@ -449,78 +449,78 @@ export default abstract class AbstractControlSettingsUiHandler extends UiHandler const cursor = this.cursor + this.scrollCursor; // Calculate the absolute cursor position. const setting = this.setting[Object.keys(this.setting)[cursor]]; switch (button) { - case Button.ACTION: - if (!this.optionCursors || !this.optionValueLabels) { - return false; // TODO: is false correct as default? (previously was `undefined`) - } - if (this.settingBlacklisted.includes(setting) || !setting.includes("BUTTON_")) { - success = false; - } else { - success = this.setSetting(this.scene, setting, 1); - } - break; - case Button.UP: // Move up in the menu. - if (!this.optionValueLabels) { - return false; - } - if (cursor) { // If not at the top, move the cursor up. - if (this.cursor) { - success = this.setCursor(this.cursor - 1); - } else {// If at the top of the visible items, scroll up. - success = this.setScrollCursor(this.scrollCursor - 1); + case Button.ACTION: + if (!this.optionCursors || !this.optionValueLabels) { + return false; // TODO: is false correct as default? (previously was `undefined`) } - } else { + if (this.settingBlacklisted.includes(setting) || !setting.includes("BUTTON_")) { + success = false; + } else { + success = this.setSetting(this.scene, setting, 1); + } + break; + case Button.UP: // Move up in the menu. + if (!this.optionValueLabels) { + return false; + } + if (cursor) { // If not at the top, move the cursor up. + if (this.cursor) { + success = this.setCursor(this.cursor - 1); + } else {// If at the top of the visible items, scroll up. + success = this.setScrollCursor(this.scrollCursor - 1); + } + } else { // When at the top of the menu and pressing UP, move to the bottommost item. // First, set the cursor to the last visible element, preparing for the scroll to the end. - const successA = this.setCursor(this.rowsToDisplay - 1); - // Then, adjust the scroll to display the bottommost elements of the menu. - const successB = this.setScrollCursor(this.optionValueLabels.length - this.rowsToDisplay); - success = successA && successB; // success is just there to play the little validation sound effect - } - break; - case Button.DOWN: // Move down in the menu. - if (!this.optionValueLabels) { - return false; - } - if (cursor < this.optionValueLabels.length - 1) { - if (this.cursor < this.rowsToDisplay - 1) { - success = this.setCursor(this.cursor + 1); - } else if (this.scrollCursor < this.optionValueLabels.length - this.rowsToDisplay) { - success = this.setScrollCursor(this.scrollCursor + 1); + const successA = this.setCursor(this.rowsToDisplay - 1); + // Then, adjust the scroll to display the bottommost elements of the menu. + const successB = this.setScrollCursor(this.optionValueLabels.length - this.rowsToDisplay); + success = successA && successB; // success is just there to play the little validation sound effect } - } else { + break; + case Button.DOWN: // Move down in the menu. + if (!this.optionValueLabels) { + return false; + } + if (cursor < this.optionValueLabels.length - 1) { + if (this.cursor < this.rowsToDisplay - 1) { + success = this.setCursor(this.cursor + 1); + } else if (this.scrollCursor < this.optionValueLabels.length - this.rowsToDisplay) { + success = this.setScrollCursor(this.scrollCursor + 1); + } + } else { // When at the bottom of the menu and pressing DOWN, move to the topmost item. // First, set the cursor to the first visible element, resetting the scroll to the top. - const successA = this.setCursor(0); - // Then, reset the scroll to start from the first element of the menu. - const successB = this.setScrollCursor(0); - success = successA && successB; // Indicates a successful cursor and scroll adjustment. - } - break; - case Button.LEFT: // Move selection left within the current option set. - if (!this.optionCursors || !this.optionValueLabels) { - return false; // TODO: is false correct as default? (previously was `undefined`) - } - if (this.settingBlacklisted.includes(setting) || setting.includes("BUTTON_")) { - success = false; - } else if (this.optionCursors[cursor]) { - success = this.setOptionCursor(cursor, this.optionCursors[cursor] - 1, true); - } - break; - case Button.RIGHT: // Move selection right within the current option set. - if (!this.optionCursors || !this.optionValueLabels) { - return false; // TODO: is false correct as default? (previously was `undefined`) - } - if (this.settingBlacklisted.includes(setting) || setting.includes("BUTTON_")) { - success = false; - } else if (this.optionCursors[cursor] < this.optionValueLabels[cursor].length - 1) { - success = this.setOptionCursor(cursor, this.optionCursors[cursor] + 1, true); - } - break; - case Button.CYCLE_FORM: - case Button.CYCLE_SHINY: - success = this.navigationContainer.navigate(button); - break; + const successA = this.setCursor(0); + // Then, reset the scroll to start from the first element of the menu. + const successB = this.setScrollCursor(0); + success = successA && successB; // Indicates a successful cursor and scroll adjustment. + } + break; + case Button.LEFT: // Move selection left within the current option set. + if (!this.optionCursors || !this.optionValueLabels) { + return false; // TODO: is false correct as default? (previously was `undefined`) + } + if (this.settingBlacklisted.includes(setting) || setting.includes("BUTTON_")) { + success = false; + } else if (this.optionCursors[cursor]) { + success = this.setOptionCursor(cursor, this.optionCursors[cursor] - 1, true); + } + break; + case Button.RIGHT: // Move selection right within the current option set. + if (!this.optionCursors || !this.optionValueLabels) { + return false; // TODO: is false correct as default? (previously was `undefined`) + } + if (this.settingBlacklisted.includes(setting) || setting.includes("BUTTON_")) { + success = false; + } else if (this.optionCursors[cursor] < this.optionValueLabels[cursor].length - 1) { + success = this.setOptionCursor(cursor, this.optionCursors[cursor] + 1, true); + } + break; + case Button.CYCLE_FORM: + case Button.CYCLE_SHINY: + success = this.navigationContainer.navigate(button); + break; } } diff --git a/src/ui/settings/abstract-settings-ui-handler.ts b/src/ui/settings/abstract-settings-ui-handler.ts index 47eceddc813..83219e1ef5a 100644 --- a/src/ui/settings/abstract-settings-ui-handler.ts +++ b/src/ui/settings/abstract-settings-ui-handler.ts @@ -224,59 +224,59 @@ export default class AbstractSettingsUiHandler extends UiHandler { } else { const cursor = this.cursor + this.scrollCursor; switch (button) { - case Button.UP: - if (cursor) { - if (this.cursor) { - success = this.setCursor(this.cursor - 1); + case Button.UP: + if (cursor) { + if (this.cursor) { + success = this.setCursor(this.cursor - 1); + } else { + success = this.setScrollCursor(this.scrollCursor - 1); + } } else { - success = this.setScrollCursor(this.scrollCursor - 1); - } - } else { // When at the top of the menu and pressing UP, move to the bottommost item. // First, set the cursor to the last visible element, preparing for the scroll to the end. - const successA = this.setCursor(this.rowsToDisplay - 1); - // Then, adjust the scroll to display the bottommost elements of the menu. - const successB = this.setScrollCursor(this.optionValueLabels.length - this.rowsToDisplay); - success = successA && successB; // success is just there to play the little validation sound effect - } - break; - case Button.DOWN: - if (cursor < this.optionValueLabels.length - 1) { - if (this.cursor < this.rowsToDisplay - 1) {// if the visual cursor is in the frame of 0 to 8 - success = this.setCursor(this.cursor + 1); - } else if (this.scrollCursor < this.optionValueLabels.length - this.rowsToDisplay) { - success = this.setScrollCursor(this.scrollCursor + 1); + const successA = this.setCursor(this.rowsToDisplay - 1); + // Then, adjust the scroll to display the bottommost elements of the menu. + const successB = this.setScrollCursor(this.optionValueLabels.length - this.rowsToDisplay); + success = successA && successB; // success is just there to play the little validation sound effect } - } else { + break; + case Button.DOWN: + if (cursor < this.optionValueLabels.length - 1) { + if (this.cursor < this.rowsToDisplay - 1) {// if the visual cursor is in the frame of 0 to 8 + success = this.setCursor(this.cursor + 1); + } else if (this.scrollCursor < this.optionValueLabels.length - this.rowsToDisplay) { + success = this.setScrollCursor(this.scrollCursor + 1); + } + } else { // When at the bottom of the menu and pressing DOWN, move to the topmost item. // First, set the cursor to the first visible element, resetting the scroll to the top. - const successA = this.setCursor(0); - // Then, reset the scroll to start from the first element of the menu. - const successB = this.setScrollCursor(0); - success = successA && successB; // Indicates a successful cursor and scroll adjustment. - } - break; - case Button.LEFT: - if (this.optionCursors[cursor]) {// Moves the option cursor left, if possible. - success = this.setOptionCursor(cursor, this.optionCursors[cursor] - 1, true); - } - break; - case Button.RIGHT: + const successA = this.setCursor(0); + // Then, reset the scroll to start from the first element of the menu. + const successB = this.setScrollCursor(0); + success = successA && successB; // Indicates a successful cursor and scroll adjustment. + } + break; + case Button.LEFT: + if (this.optionCursors[cursor]) {// Moves the option cursor left, if possible. + success = this.setOptionCursor(cursor, this.optionCursors[cursor] - 1, true); + } + break; + case Button.RIGHT: // Moves the option cursor right, if possible. - if (this.optionCursors[cursor] < this.optionValueLabels[cursor].length - 1) { - success = this.setOptionCursor(cursor, this.optionCursors[cursor] + 1, true); - } - break; - case Button.CYCLE_FORM: - case Button.CYCLE_SHINY: - success = this.navigationContainer.navigate(button); - break; - case Button.ACTION: - const setting: Setting = this.settings[cursor]; - if (setting?.activatable) { - success = this.activateSetting(setting); - } - break; + if (this.optionCursors[cursor] < this.optionValueLabels[cursor].length - 1) { + success = this.setOptionCursor(cursor, this.optionCursors[cursor] + 1, true); + } + break; + case Button.CYCLE_FORM: + case Button.CYCLE_SHINY: + success = this.navigationContainer.navigate(button); + break; + case Button.ACTION: + const setting: Setting = this.settings[cursor]; + if (setting?.activatable) { + success = this.activateSetting(setting); + } + break; } } @@ -295,9 +295,9 @@ export default class AbstractSettingsUiHandler extends UiHandler { */ activateSetting(setting: Setting): boolean { switch (setting.key) { - case SettingKeys.Move_Touch_Controls: - this.scene.inputController.moveTouchControlsHandler.enableConfigurationMode(this.getUi(), this.scene); - return true; + case SettingKeys.Move_Touch_Controls: + this.scene.inputController.moveTouchControlsHandler.enableConfigurationMode(this.getUi(), this.scene); + return true; } return false; } diff --git a/src/ui/settings/navigationMenu.ts b/src/ui/settings/navigationMenu.ts index 45209c220fa..ab86fa1569a 100644 --- a/src/ui/settings/navigationMenu.ts +++ b/src/ui/settings/navigationMenu.ts @@ -198,12 +198,12 @@ export default class NavigationMenu extends Phaser.GameObjects.Container { navigate(button: Button): boolean { const navigationManager = NavigationManager.getInstance(); switch (button) { - case Button.CYCLE_FORM: - navigationManager.navigate(this.scene, LEFT); - return true; - case Button.CYCLE_SHINY: - navigationManager.navigate(this.scene, RIGHT); - return true; + case Button.CYCLE_FORM: + navigationManager.navigate(this.scene, LEFT); + return true; + case Button.CYCLE_SHINY: + navigationManager.navigate(this.scene, RIGHT); + return true; } return false; } diff --git a/src/ui/settings/settings-display-ui-handler.ts b/src/ui/settings/settings-display-ui-handler.ts index 3d602c50a78..a25dbf87b7d 100644 --- a/src/ui/settings/settings-display-ui-handler.ts +++ b/src/ui/settings/settings-display-ui-handler.ts @@ -23,79 +23,79 @@ export default class SettingsDisplayUiHandler extends AbstractSettingsUiHandler if (languageIndex >= 0) { const currentLocale = localStorage.getItem("prLang"); switch (currentLocale) { - case "en": - this.settings[languageIndex].options[0] = { - value: "English", - label: "English", - }; - break; - case "es": - this.settings[languageIndex].options[0] = { - value: "Español", - label: "Español", - }; - break; - case "it": - this.settings[languageIndex].options[0] = { - value: "Italiano", - label: "Italiano", - }; - break; - case "fr": - this.settings[languageIndex].options[0] = { - value: "Français", - label: "Français", - }; - break; - case "de": - this.settings[languageIndex].options[0] = { - value: "Deutsch", - label: "Deutsch", - }; - break; - case "pt-BR": - this.settings[languageIndex].options[0] = { - value: "Português (BR)", - label: "Português (BR)", - }; - break; - case "zh-CN": - this.settings[languageIndex].options[0] = { - value: "简体中文", - label: "简体中文", - }; - break; - case "zh-TW": - this.settings[languageIndex].options[0] = { - value: "繁體中文", - label: "繁體中文", - }; - break; - case "ko": - case "ko-KR": - this.settings[languageIndex].options[0] = { - value: "한국어", - label: "한국어", - }; - break; - case "ja": - this.settings[languageIndex].options[0] = { - value: "日本語", - label: "日本語", - }; - break; - case "ca-ES": - this.settings[languageIndex].options[0] = { - value: "Català", - label: "Català", - }; - break; - default: - this.settings[languageIndex].options[0] = { - value: "English", - label: "English", - }; - break; + case "en": + this.settings[languageIndex].options[0] = { + value: "English", + label: "English", + }; + break; + case "es": + this.settings[languageIndex].options[0] = { + value: "Español", + label: "Español", + }; + break; + case "it": + this.settings[languageIndex].options[0] = { + value: "Italiano", + label: "Italiano", + }; + break; + case "fr": + this.settings[languageIndex].options[0] = { + value: "Français", + label: "Français", + }; + break; + case "de": + this.settings[languageIndex].options[0] = { + value: "Deutsch", + label: "Deutsch", + }; + break; + case "pt-BR": + this.settings[languageIndex].options[0] = { + value: "Português (BR)", + label: "Português (BR)", + }; + break; + case "zh-CN": + this.settings[languageIndex].options[0] = { + value: "简体中文", + label: "简体中文", + }; + break; + case "zh-TW": + this.settings[languageIndex].options[0] = { + value: "繁體中文", + label: "繁體中文", + }; + break; + case "ko": + case "ko-KR": + this.settings[languageIndex].options[0] = { + value: "한국어", + label: "한국어", + }; + break; + case "ja": + this.settings[languageIndex].options[0] = { + value: "日本語", + label: "日本語", + }; + break; + case "ca-ES": + this.settings[languageIndex].options[0] = { + value: "Català", + label: "Català", + }; + break; + default: + this.settings[languageIndex].options[0] = { + value: "English", + label: "English", + }; + break; } } diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 2be89052bc1..bb999dc736a 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -1303,119 +1303,119 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } } else if (this.startCursorObj.visible) { // this checks to see if the start button is selected switch (button) { - case Button.ACTION: - if (this.tryStart(true)) { - success = true; - } else { - error = true; - } - break; - case Button.UP: + case Button.ACTION: + if (this.tryStart(true)) { + success = true; + } else { + error = true; + } + break; + case Button.UP: // UP from start button: go to pokemon in team if any, otherwise filter - this.startCursorObj.setVisible(false); - if (this.starterSpecies.length > 0) { - this.starterIconsCursorIndex = this.starterSpecies.length - 1; - this.moveStarterIconsCursor(this.starterIconsCursorIndex); - } else { + this.startCursorObj.setVisible(false); + if (this.starterSpecies.length > 0) { + this.starterIconsCursorIndex = this.starterSpecies.length - 1; + this.moveStarterIconsCursor(this.starterIconsCursorIndex); + } else { + this.startCursorObj.setVisible(false); + this.filterBarCursor = Math.max(1, this.filterBar.numFilters - 1); + this.setFilterMode(true); + } + success = true; + break; + case Button.DOWN: + // DOWN from start button: Go to filters this.startCursorObj.setVisible(false); this.filterBarCursor = Math.max(1, this.filterBar.numFilters - 1); this.setFilterMode(true); - } - success = true; - break; - case Button.DOWN: - // DOWN from start button: Go to filters - this.startCursorObj.setVisible(false); - this.filterBarCursor = Math.max(1, this.filterBar.numFilters - 1); - this.setFilterMode(true); - success = true; - break; - case Button.LEFT: - if (numberOfStarters > 0) { - this.startCursorObj.setVisible(false); - this.cursorObj.setVisible(true); - this.setCursor(onScreenFirstIndex + (onScreenNumberOfRows - 1) * 9 + 8); // set last column success = true; - } - break; - case Button.RIGHT: - if (numberOfStarters > 0) { - this.startCursorObj.setVisible(false); - this.cursorObj.setVisible(true); - this.setCursor(onScreenFirstIndex + (onScreenNumberOfRows - 1) * 9); // set first column - success = true; - } - break; + break; + case Button.LEFT: + if (numberOfStarters > 0) { + this.startCursorObj.setVisible(false); + this.cursorObj.setVisible(true); + this.setCursor(onScreenFirstIndex + (onScreenNumberOfRows - 1) * 9 + 8); // set last column + success = true; + } + break; + case Button.RIGHT: + if (numberOfStarters > 0) { + this.startCursorObj.setVisible(false); + this.cursorObj.setVisible(true); + this.setCursor(onScreenFirstIndex + (onScreenNumberOfRows - 1) * 9); // set first column + success = true; + } + break; } } else if (this.filterMode) { switch (button) { - case Button.LEFT: - if (this.filterBarCursor > 0) { - success = this.setCursor(this.filterBarCursor - 1); - } else { - success = this.setCursor(this.filterBar.numFilters - 1); - } - break; - case Button.RIGHT: - if (this.filterBarCursor < this.filterBar.numFilters - 1) { - success = this.setCursor(this.filterBarCursor + 1); - } else { - success = this.setCursor(0); - } - break; - case Button.UP: - if (this.filterBar.openDropDown) { - success = this.filterBar.decDropDownCursor(); - } else if (this.filterBarCursor === this.filterBar.numFilters - 1 && this.starterSpecies.length > 0) { - // UP from the last filter, move to start button - this.setFilterMode(false); - this.cursorObj.setVisible(false); - this.startCursorObj.setVisible(true); - success = true; - } else if (numberOfStarters > 0) { - // UP from filter bar to bottom of Pokemon list - this.setFilterMode(false); - this.scrollCursor = Math.max(0, numOfRows - 9); - this.updateScroll(); - const proportion = (this.filterBarCursor + 0.5) / this.filterBar.numFilters; - const targetCol = Math.min(8, Math.floor(proportion * 11)); - if (numberOfStarters % 9 > targetCol) { - this.setCursor(numberOfStarters - (numberOfStarters) % 9 + targetCol); + case Button.LEFT: + if (this.filterBarCursor > 0) { + success = this.setCursor(this.filterBarCursor - 1); } else { - this.setCursor(Math.max(numberOfStarters - (numberOfStarters) % 9 + targetCol - 9, 0)); + success = this.setCursor(this.filterBar.numFilters - 1); + } + break; + case Button.RIGHT: + if (this.filterBarCursor < this.filterBar.numFilters - 1) { + success = this.setCursor(this.filterBarCursor + 1); + } else { + success = this.setCursor(0); + } + break; + case Button.UP: + if (this.filterBar.openDropDown) { + success = this.filterBar.decDropDownCursor(); + } else if (this.filterBarCursor === this.filterBar.numFilters - 1 && this.starterSpecies.length > 0) { + // UP from the last filter, move to start button + this.setFilterMode(false); + this.cursorObj.setVisible(false); + this.startCursorObj.setVisible(true); + success = true; + } else if (numberOfStarters > 0) { + // UP from filter bar to bottom of Pokemon list + this.setFilterMode(false); + this.scrollCursor = Math.max(0, numOfRows - 9); + this.updateScroll(); + const proportion = (this.filterBarCursor + 0.5) / this.filterBar.numFilters; + const targetCol = Math.min(8, Math.floor(proportion * 11)); + if (numberOfStarters % 9 > targetCol) { + this.setCursor(numberOfStarters - (numberOfStarters) % 9 + targetCol); + } else { + this.setCursor(Math.max(numberOfStarters - (numberOfStarters) % 9 + targetCol - 9, 0)); + } + success = true; + } + break; + case Button.DOWN: + if (this.filterBar.openDropDown) { + success = this.filterBar.incDropDownCursor(); + } else if (this.filterBarCursor === this.filterBar.numFilters - 1 && this.starterSpecies.length > 0) { + // DOWN from the last filter, move to Pokemon in party if any + this.setFilterMode(false); + this.cursorObj.setVisible(false); + this.starterIconsCursorIndex = 0; + this.moveStarterIconsCursor(this.starterIconsCursorIndex); + success = true; + } else if (numberOfStarters > 0) { + // DOWN from filter bar to top of Pokemon list + this.setFilterMode(false); + this.scrollCursor = 0; + this.updateScroll(); + const proportion = this.filterBarCursor / Math.max(1, this.filterBar.numFilters - 1); + const targetCol = Math.min(8, Math.floor(proportion * 11)); + this.setCursor(Math.min(targetCol, numberOfStarters)); + success = true; + } + break; + case Button.ACTION: + if (!this.filterBar.openDropDown) { + this.filterBar.toggleDropDown(this.filterBarCursor); + } else { + this.filterBar.toggleOptionState(); } success = true; - } - break; - case Button.DOWN: - if (this.filterBar.openDropDown) { - success = this.filterBar.incDropDownCursor(); - } else if (this.filterBarCursor === this.filterBar.numFilters - 1 && this.starterSpecies.length > 0) { - // DOWN from the last filter, move to Pokemon in party if any - this.setFilterMode(false); - this.cursorObj.setVisible(false); - this.starterIconsCursorIndex = 0; - this.moveStarterIconsCursor(this.starterIconsCursorIndex); - success = true; - } else if (numberOfStarters > 0) { - // DOWN from filter bar to top of Pokemon list - this.setFilterMode(false); - this.scrollCursor = 0; - this.updateScroll(); - const proportion = this.filterBarCursor / Math.max(1, this.filterBar.numFilters - 1); - const targetCol = Math.min(8, Math.floor(proportion * 11)); - this.setCursor(Math.min(targetCol, numberOfStarters)); - success = true; - } - break; - case Button.ACTION: - if (!this.filterBar.openDropDown) { - this.filterBar.toggleDropDown(this.filterBarCursor); - } else { - this.filterBar.toggleOptionState(); - } - success = true; - break; + break; } } else { @@ -1856,259 +1856,259 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } else { const props = this.scene.gameData.getSpeciesDexAttrProps(this.lastSpecies, this.getCurrentDexProps(this.lastSpecies.speciesId)); switch (button) { - case Button.CYCLE_SHINY: - if (this.canCycleShiny) { - starterAttributes.shiny = starterAttributes.shiny !== undefined ? !starterAttributes.shiny : false; + case Button.CYCLE_SHINY: + if (this.canCycleShiny) { + starterAttributes.shiny = starterAttributes.shiny !== undefined ? !starterAttributes.shiny : false; - if (starterAttributes.shiny) { + if (starterAttributes.shiny) { // Change to shiny, we need to get the proper default variant - const newProps = this.scene.gameData.getSpeciesDexAttrProps(this.lastSpecies, this.getCurrentDexProps(this.lastSpecies.speciesId)); - const newVariant = starterAttributes.variant ? starterAttributes.variant as Variant : newProps.variant; - this.setSpeciesDetails(this.lastSpecies, true, undefined, undefined, newVariant, undefined, undefined); + const newProps = this.scene.gameData.getSpeciesDexAttrProps(this.lastSpecies, this.getCurrentDexProps(this.lastSpecies.speciesId)); + const newVariant = starterAttributes.variant ? starterAttributes.variant as Variant : newProps.variant; + this.setSpeciesDetails(this.lastSpecies, true, undefined, undefined, newVariant, undefined, undefined); - this.scene.playSound("se/sparkle"); - // Set the variant label to the shiny tint - const tint = getVariantTint(newVariant); - this.pokemonShinyIcon.setFrame(getVariantIcon(newVariant)); - this.pokemonShinyIcon.setTint(tint); - this.pokemonShinyIcon.setVisible(true); - } else { - this.setSpeciesDetails(this.lastSpecies, false, undefined, undefined, 0, undefined, undefined); - this.pokemonShinyIcon.setVisible(false); - success = true; - } - } - break; - case Button.CYCLE_FORM: - if (this.canCycleForm) { - const formCount = this.lastSpecies.forms.length; - let newFormIndex = props.formIndex; - do { - newFormIndex = (newFormIndex + 1) % formCount; - if (this.lastSpecies.forms[newFormIndex].isStarterSelectable && this.speciesStarterDexEntry!.caughtAttr! & this.scene.gameData.getFormAttr(newFormIndex)) { // TODO: are those bangs correct? - break; + this.scene.playSound("se/sparkle"); + // Set the variant label to the shiny tint + const tint = getVariantTint(newVariant); + this.pokemonShinyIcon.setFrame(getVariantIcon(newVariant)); + this.pokemonShinyIcon.setTint(tint); + this.pokemonShinyIcon.setVisible(true); + } else { + this.setSpeciesDetails(this.lastSpecies, false, undefined, undefined, 0, undefined, undefined); + this.pokemonShinyIcon.setVisible(false); + success = true; } - } while (newFormIndex !== props.formIndex); - starterAttributes.form = newFormIndex; // store the selected form - this.setSpeciesDetails(this.lastSpecies, undefined, newFormIndex, undefined, undefined, undefined, undefined); - success = true; - } - break; - case Button.CYCLE_GENDER: - if (this.canCycleGender) { - starterAttributes.female = !props.female; - this.setSpeciesDetails(this.lastSpecies, undefined, undefined, !props.female, undefined, undefined, undefined); - success = true; - } - break; - case Button.CYCLE_ABILITY: - if (this.canCycleAbility) { - const abilityCount = this.lastSpecies.getAbilityCount(); - const abilityAttr = this.scene.gameData.starterData[this.lastSpecies.speciesId].abilityAttr; - const hasAbility1 = abilityAttr & AbilityAttr.ABILITY_1; - let newAbilityIndex = this.abilityCursor; - do { - newAbilityIndex = (newAbilityIndex + 1) % abilityCount; - if (newAbilityIndex === 0) { - if (hasAbility1) { + } + break; + case Button.CYCLE_FORM: + if (this.canCycleForm) { + const formCount = this.lastSpecies.forms.length; + let newFormIndex = props.formIndex; + do { + newFormIndex = (newFormIndex + 1) % formCount; + if (this.lastSpecies.forms[newFormIndex].isStarterSelectable && this.speciesStarterDexEntry!.caughtAttr! & this.scene.gameData.getFormAttr(newFormIndex)) { // TODO: are those bangs correct? break; } - } else if (newAbilityIndex === 1) { + } while (newFormIndex !== props.formIndex); + starterAttributes.form = newFormIndex; // store the selected form + this.setSpeciesDetails(this.lastSpecies, undefined, newFormIndex, undefined, undefined, undefined, undefined); + success = true; + } + break; + case Button.CYCLE_GENDER: + if (this.canCycleGender) { + starterAttributes.female = !props.female; + this.setSpeciesDetails(this.lastSpecies, undefined, undefined, !props.female, undefined, undefined, undefined); + success = true; + } + break; + case Button.CYCLE_ABILITY: + if (this.canCycleAbility) { + const abilityCount = this.lastSpecies.getAbilityCount(); + const abilityAttr = this.scene.gameData.starterData[this.lastSpecies.speciesId].abilityAttr; + const hasAbility1 = abilityAttr & AbilityAttr.ABILITY_1; + let newAbilityIndex = this.abilityCursor; + do { + newAbilityIndex = (newAbilityIndex + 1) % abilityCount; + if (newAbilityIndex === 0) { + if (hasAbility1) { + break; + } + } else if (newAbilityIndex === 1) { // If ability 1 and 2 are the same and ability 1 is unlocked, skip over ability 2 - if (this.lastSpecies.ability1 === this.lastSpecies.ability2 && hasAbility1) { - newAbilityIndex = (newAbilityIndex + 1) % abilityCount; - } - break; - } else { - if (abilityAttr & AbilityAttr.ABILITY_HIDDEN) { + if (this.lastSpecies.ability1 === this.lastSpecies.ability2 && hasAbility1) { + newAbilityIndex = (newAbilityIndex + 1) % abilityCount; + } break; + } else { + if (abilityAttr & AbilityAttr.ABILITY_HIDDEN) { + break; + } } - } - } while (newAbilityIndex !== this.abilityCursor); - starterAttributes.ability = newAbilityIndex; // store the selected ability + } while (newAbilityIndex !== this.abilityCursor); + starterAttributes.ability = newAbilityIndex; // store the selected ability - const { visible: tooltipVisible } = this.scene.ui.getTooltip(); + const { visible: tooltipVisible } = this.scene.ui.getTooltip(); - if (tooltipVisible && this.activeTooltip === "ABILITY") { - const newAbility = allAbilities[this.lastSpecies.getAbility(newAbilityIndex)]; - this.scene.ui.editTooltip(`${newAbility.name}`, `${newAbility.description}`); - } + if (tooltipVisible && this.activeTooltip === "ABILITY") { + const newAbility = allAbilities[this.lastSpecies.getAbility(newAbilityIndex)]; + this.scene.ui.editTooltip(`${newAbility.name}`, `${newAbility.description}`); + } - this.setSpeciesDetails(this.lastSpecies, undefined, undefined, undefined, undefined, newAbilityIndex, undefined); - success = true; - } - break; - case Button.CYCLE_NATURE: - if (this.canCycleNature) { - const natures = this.scene.gameData.getNaturesForAttr(this.speciesStarterDexEntry?.natureAttr); - const natureIndex = natures.indexOf(this.natureCursor); - const newNature = natures[natureIndex < natures.length - 1 ? natureIndex + 1 : 0]; - // store cycled nature as default - starterAttributes.nature = newNature as unknown as integer; - this.setSpeciesDetails(this.lastSpecies, undefined, undefined, undefined, undefined, undefined, newNature, undefined); - success = true; - } - break; - case Button.V: - if (this.canCycleVariant) { - let newVariant = props.variant; - do { - newVariant = (newVariant + 1) % 3; - if (!newVariant) { - if (this.speciesStarterDexEntry!.caughtAttr & DexAttr.DEFAULT_VARIANT) { // TODO: is this bang correct? - break; - } - } else if (newVariant === 1) { - if (this.speciesStarterDexEntry!.caughtAttr & DexAttr.VARIANT_2) { // TODO: is this bang correct? - break; - } - } else { - if (this.speciesStarterDexEntry!.caughtAttr & DexAttr.VARIANT_3) { // TODO: is this bang correct? - break; - } - } - } while (newVariant !== props.variant); - starterAttributes.variant = newVariant; // store the selected variant - this.setSpeciesDetails(this.lastSpecies, undefined, undefined, undefined, newVariant as Variant, undefined, undefined); - // Cycle tint based on current sprite tint - const tint = getVariantTint(newVariant as Variant); - this.pokemonShinyIcon.setFrame(getVariantIcon(newVariant as Variant)); - this.pokemonShinyIcon.setTint(tint); - success = true; - } - break; - case Button.UP: - if (!this.starterIconsCursorObj.visible) { - if (currentRow > 0) { - if (this.scrollCursor > 0 && currentRow - this.scrollCursor === 0) { - this.scrollCursor--; - this.updateScroll(); - } - success = this.setCursor(this.cursor - 9); - } else { - this.filterBarCursor = this.filterBar.getNearestFilter(this.filteredStarterContainers[this.cursor]); - this.setFilterMode(true); + this.setSpeciesDetails(this.lastSpecies, undefined, undefined, undefined, undefined, newAbilityIndex, undefined); success = true; } - } else { - if (this.starterIconsCursorIndex === 0) { + break; + case Button.CYCLE_NATURE: + if (this.canCycleNature) { + const natures = this.scene.gameData.getNaturesForAttr(this.speciesStarterDexEntry?.natureAttr); + const natureIndex = natures.indexOf(this.natureCursor); + const newNature = natures[natureIndex < natures.length - 1 ? natureIndex + 1 : 0]; + // store cycled nature as default + starterAttributes.nature = newNature as unknown as integer; + this.setSpeciesDetails(this.lastSpecies, undefined, undefined, undefined, undefined, undefined, newNature, undefined); + success = true; + } + break; + case Button.V: + if (this.canCycleVariant) { + let newVariant = props.variant; + do { + newVariant = (newVariant + 1) % 3; + if (!newVariant) { + if (this.speciesStarterDexEntry!.caughtAttr & DexAttr.DEFAULT_VARIANT) { // TODO: is this bang correct? + break; + } + } else if (newVariant === 1) { + if (this.speciesStarterDexEntry!.caughtAttr & DexAttr.VARIANT_2) { // TODO: is this bang correct? + break; + } + } else { + if (this.speciesStarterDexEntry!.caughtAttr & DexAttr.VARIANT_3) { // TODO: is this bang correct? + break; + } + } + } while (newVariant !== props.variant); + starterAttributes.variant = newVariant; // store the selected variant + this.setSpeciesDetails(this.lastSpecies, undefined, undefined, undefined, newVariant as Variant, undefined, undefined); + // Cycle tint based on current sprite tint + const tint = getVariantTint(newVariant as Variant); + this.pokemonShinyIcon.setFrame(getVariantIcon(newVariant as Variant)); + this.pokemonShinyIcon.setTint(tint); + success = true; + } + break; + case Button.UP: + if (!this.starterIconsCursorObj.visible) { + if (currentRow > 0) { + if (this.scrollCursor > 0 && currentRow - this.scrollCursor === 0) { + this.scrollCursor--; + this.updateScroll(); + } + success = this.setCursor(this.cursor - 9); + } else { + this.filterBarCursor = this.filterBar.getNearestFilter(this.filteredStarterContainers[this.cursor]); + this.setFilterMode(true); + success = true; + } + } else { + if (this.starterIconsCursorIndex === 0) { // Up from first Pokemon in the team > go to filter - this.starterIconsCursorObj.setVisible(false); - this.setSpecies(null); - this.filterBarCursor = Math.max(1, this.filterBar.numFilters - 1); - this.setFilterMode(true); - } else { - this.starterIconsCursorIndex--; - this.moveStarterIconsCursor(this.starterIconsCursorIndex); - } - success = true; - } - break; - case Button.DOWN: - if (!this.starterIconsCursorObj.visible) { - if (currentRow < numOfRows - 1) { // not last row - if (currentRow - this.scrollCursor === 8) { // last row of visible starters - this.scrollCursor++; + this.starterIconsCursorObj.setVisible(false); + this.setSpecies(null); + this.filterBarCursor = Math.max(1, this.filterBar.numFilters - 1); + this.setFilterMode(true); + } else { + this.starterIconsCursorIndex--; + this.moveStarterIconsCursor(this.starterIconsCursorIndex); } - success = this.setCursor(this.cursor + 9); - this.updateScroll(); - } else if (numOfRows > 1) { - // DOWN from last row of Pokemon > Wrap around to first row - this.scrollCursor = 0; - this.updateScroll(); - success = this.setCursor(this.cursor % 9); - } else { - // DOWN from single row of Pokemon > Go to filters - this.filterBarCursor = this.filterBar.getNearestFilter(this.filteredStarterContainers[this.cursor]); - this.setFilterMode(true); success = true; } - } else { - if (this.starterIconsCursorIndex <= this.starterSpecies.length - 2) { - this.starterIconsCursorIndex++; - this.moveStarterIconsCursor(this.starterIconsCursorIndex); + break; + case Button.DOWN: + if (!this.starterIconsCursorObj.visible) { + if (currentRow < numOfRows - 1) { // not last row + if (currentRow - this.scrollCursor === 8) { // last row of visible starters + this.scrollCursor++; + } + success = this.setCursor(this.cursor + 9); + this.updateScroll(); + } else if (numOfRows > 1) { + // DOWN from last row of Pokemon > Wrap around to first row + this.scrollCursor = 0; + this.updateScroll(); + success = this.setCursor(this.cursor % 9); + } else { + // DOWN from single row of Pokemon > Go to filters + this.filterBarCursor = this.filterBar.getNearestFilter(this.filteredStarterContainers[this.cursor]); + this.setFilterMode(true); + success = true; + } } else { - this.starterIconsCursorObj.setVisible(false); - this.setSpecies(null); - this.startCursorObj.setVisible(true); + if (this.starterIconsCursorIndex <= this.starterSpecies.length - 2) { + this.starterIconsCursorIndex++; + this.moveStarterIconsCursor(this.starterIconsCursorIndex); + } else { + this.starterIconsCursorObj.setVisible(false); + this.setSpecies(null); + this.startCursorObj.setVisible(true); + } + success = true; } - success = true; - } - break; - case Button.LEFT: - if (!this.starterIconsCursorObj.visible) { - if (this.cursor % 9 !== 0) { - success = this.setCursor(this.cursor - 1); - } else { + break; + case Button.LEFT: + if (!this.starterIconsCursorObj.visible) { + if (this.cursor % 9 !== 0) { + success = this.setCursor(this.cursor - 1); + } else { // LEFT from filtered Pokemon, on the left edge - if (this.starterSpecies.length === 0) { + if (this.starterSpecies.length === 0) { // no starter in team > wrap around to the last column - success = this.setCursor(this.cursor + Math.min(8, numberOfStarters - this.cursor)); + success = this.setCursor(this.cursor + Math.min(8, numberOfStarters - this.cursor)); - } else if (onScreenCurrentRow < 7) { + } else if (onScreenCurrentRow < 7) { // at least one pokemon in team > for the first 7 rows, go to closest starter - this.cursorObj.setVisible(false); - this.starterIconsCursorIndex = findClosestStarterIndex(this.cursorObj.y - 1, this.starterSpecies.length); - this.moveStarterIconsCursor(this.starterIconsCursorIndex); + this.cursorObj.setVisible(false); + this.starterIconsCursorIndex = findClosestStarterIndex(this.cursorObj.y - 1, this.starterSpecies.length); + this.moveStarterIconsCursor(this.starterIconsCursorIndex); - } else { + } else { // at least one pokemon in team > from the bottom 2 rows, go to start run button - this.cursorObj.setVisible(false); - this.setSpecies(null); - this.startCursorObj.setVisible(true); + this.cursorObj.setVisible(false); + this.setSpecies(null); + this.startCursorObj.setVisible(true); + } + success = true; } - success = true; - } - } else if (numberOfStarters > 0) { + } else if (numberOfStarters > 0) { // LEFT from team > Go to closest filtered Pokemon - const closestRowIndex = findClosestStarterRow(this.starterIconsCursorIndex, onScreenNumberOfRows); - this.starterIconsCursorObj.setVisible(false); - this.cursorObj.setVisible(true); - this.setCursor(Math.min(onScreenFirstIndex + closestRowIndex * 9 + 8, onScreenLastIndex)); - success = true; - } else { - // LEFT from team and no Pokemon in filter > do nothing - success = false; - } - break; - case Button.RIGHT: - if (!this.starterIconsCursorObj.visible) { - // is not right edge - if (this.cursor % 9 < (currentRow < numOfRows - 1 ? 8 : (numberOfStarters - 1) % 9)) { - success = this.setCursor(this.cursor + 1); - } else { - // RIGHT from filtered Pokemon, on the right edge - if (this.starterSpecies.length === 0) { - // no selected starter in team > wrap around to the first column - success = this.setCursor(this.cursor - Math.min(8, this.cursor % 9)); - - } else if (onScreenCurrentRow < 7) { - // at least one pokemon in team > for the first 7 rows, go to closest starter - this.cursorObj.setVisible(false); - this.starterIconsCursorIndex = findClosestStarterIndex(this.cursorObj.y - 1, this.starterSpecies.length); - this.moveStarterIconsCursor(this.starterIconsCursorIndex); - - } else { - // at least one pokemon in team > from the bottom 2 rows, go to start run button - this.cursorObj.setVisible(false); - this.setSpecies(null); - this.startCursorObj.setVisible(true); - } + const closestRowIndex = findClosestStarterRow(this.starterIconsCursorIndex, onScreenNumberOfRows); + this.starterIconsCursorObj.setVisible(false); + this.cursorObj.setVisible(true); + this.setCursor(Math.min(onScreenFirstIndex + closestRowIndex * 9 + 8, onScreenLastIndex)); success = true; + } else { + // LEFT from team and no Pokemon in filter > do nothing + success = false; } - } else if (numberOfStarters > 0) { + break; + case Button.RIGHT: + if (!this.starterIconsCursorObj.visible) { + // is not right edge + if (this.cursor % 9 < (currentRow < numOfRows - 1 ? 8 : (numberOfStarters - 1) % 9)) { + success = this.setCursor(this.cursor + 1); + } else { + // RIGHT from filtered Pokemon, on the right edge + if (this.starterSpecies.length === 0) { + // no selected starter in team > wrap around to the first column + success = this.setCursor(this.cursor - Math.min(8, this.cursor % 9)); + + } else if (onScreenCurrentRow < 7) { + // at least one pokemon in team > for the first 7 rows, go to closest starter + this.cursorObj.setVisible(false); + this.starterIconsCursorIndex = findClosestStarterIndex(this.cursorObj.y - 1, this.starterSpecies.length); + this.moveStarterIconsCursor(this.starterIconsCursorIndex); + + } else { + // at least one pokemon in team > from the bottom 2 rows, go to start run button + this.cursorObj.setVisible(false); + this.setSpecies(null); + this.startCursorObj.setVisible(true); + } + success = true; + } + } else if (numberOfStarters > 0) { // RIGHT from team > Go to closest filtered Pokemon - const closestRowIndex = findClosestStarterRow(this.starterIconsCursorIndex, onScreenNumberOfRows); - this.starterIconsCursorObj.setVisible(false); - this.cursorObj.setVisible(true); - this.setCursor(Math.min(onScreenFirstIndex + closestRowIndex * 9, onScreenLastIndex - (onScreenLastIndex % 9))); - success = true; - } else { + const closestRowIndex = findClosestStarterRow(this.starterIconsCursorIndex, onScreenNumberOfRows); + this.starterIconsCursorObj.setVisible(false); + this.cursorObj.setVisible(true); + this.setCursor(Math.min(onScreenFirstIndex + closestRowIndex * 9, onScreenLastIndex - (onScreenLastIndex % 9))); + success = true; + } else { // RIGHT from team and no Pokemon in filter > do nothing - success = false; - } - break; + success = false; + } + break; } } } @@ -2210,29 +2210,29 @@ export default class StarterSelectUiHandler extends MessageUiHandler { if (gamepadType === "touch") { gamepadType = "keyboard"; switch (iconSetting) { - case SettingKeyboard.Button_Cycle_Shiny: - iconPath = "R.png"; - break; - case SettingKeyboard.Button_Cycle_Form: - iconPath = "F.png"; - break; - case SettingKeyboard.Button_Cycle_Gender: - iconPath = "G.png"; - break; - case SettingKeyboard.Button_Cycle_Ability: - iconPath = "E.png"; - break; - case SettingKeyboard.Button_Cycle_Nature: - iconPath = "N.png"; - break; - case SettingKeyboard.Button_Cycle_Variant: - iconPath = "V.png"; - break; - case SettingKeyboard.Button_Stats: - iconPath = "C.png"; - break; - default: - break; + case SettingKeyboard.Button_Cycle_Shiny: + iconPath = "R.png"; + break; + case SettingKeyboard.Button_Cycle_Form: + iconPath = "F.png"; + break; + case SettingKeyboard.Button_Cycle_Gender: + iconPath = "G.png"; + break; + case SettingKeyboard.Button_Cycle_Ability: + iconPath = "E.png"; + break; + case SettingKeyboard.Button_Cycle_Nature: + iconPath = "N.png"; + break; + case SettingKeyboard.Button_Cycle_Variant: + iconPath = "V.png"; + break; + case SettingKeyboard.Button_Stats: + iconPath = "C.png"; + break; + default: + break; } } else { iconPath = this.scene.inputController?.getIconForLatestInputRecorded(iconSetting); @@ -2323,12 +2323,12 @@ export default class StarterSelectUiHandler extends MessageUiHandler { getValueLimit(): integer { const valueLimit = new Utils.IntegerHolder(0); switch (this.scene.gameMode.modeId) { - case GameModes.ENDLESS: - case GameModes.SPLICED_ENDLESS: - valueLimit.value = 15; - break; - default: - valueLimit.value = 10; + case GameModes.ENDLESS: + case GameModes.SPLICED_ENDLESS: + valueLimit.value = 15; + break; + default: + valueLimit.value = 10; } Challenge.applyChallenges(this.scene.gameMode, Challenge.ChallengeType.STARTER_POINTS, valueLimit); @@ -2532,22 +2532,22 @@ export default class StarterSelectUiHandler extends MessageUiHandler { const sort = this.filterBar.getVals(DropDownColumn.SORT)[0]; this.filteredStarterContainers.sort((a, b) => { switch (sort.val) { - default: - break; - case SortCriteria.NUMBER: - return (a.species.speciesId - b.species.speciesId) * -sort.dir; - case SortCriteria.COST: - return (a.cost - b.cost) * -sort.dir; - case SortCriteria.CANDY: - const candyCountA = this.scene.gameData.starterData[a.species.speciesId].candyCount; - const candyCountB = this.scene.gameData.starterData[b.species.speciesId].candyCount; - return (candyCountA - candyCountB) * -sort.dir; - case SortCriteria.IV: - const avgIVsA = this.scene.gameData.dexData[a.species.speciesId].ivs.reduce((a, b) => a + b, 0) / this.scene.gameData.dexData[a.species.speciesId].ivs.length; - const avgIVsB = this.scene.gameData.dexData[b.species.speciesId].ivs.reduce((a, b) => a + b, 0) / this.scene.gameData.dexData[b.species.speciesId].ivs.length; - return (avgIVsA - avgIVsB) * -sort.dir; - case SortCriteria.NAME: - return a.species.name.localeCompare(b.species.name) * -sort.dir; + default: + break; + case SortCriteria.NUMBER: + return (a.species.speciesId - b.species.speciesId) * -sort.dir; + case SortCriteria.COST: + return (a.cost - b.cost) * -sort.dir; + case SortCriteria.CANDY: + const candyCountA = this.scene.gameData.starterData[a.species.speciesId].candyCount; + const candyCountB = this.scene.gameData.starterData[b.species.speciesId].candyCount; + return (candyCountA - candyCountB) * -sort.dir; + case SortCriteria.IV: + const avgIVsA = this.scene.gameData.dexData[a.species.speciesId].ivs.reduce((a, b) => a + b, 0) / this.scene.gameData.dexData[a.species.speciesId].ivs.length; + const avgIVsB = this.scene.gameData.dexData[b.species.speciesId].ivs.reduce((a, b) => a + b, 0) / this.scene.gameData.dexData[b.species.speciesId].ivs.length; + return (avgIVsA - avgIVsB) * -sort.dir; + case SortCriteria.NAME: + return a.species.name.localeCompare(b.species.name) * -sort.dir; } return 0; }); @@ -3362,16 +3362,16 @@ export default class StarterSelectUiHandler extends MessageUiHandler { starter.label.setText(valueStr); let textStyle: TextStyle; switch (baseStarterValue - starterValue) { - case 0: - textStyle = TextStyle.WINDOW; - break; - case 1: - case 0.5: - textStyle = TextStyle.SUMMARY_BLUE; - break; - default: - textStyle = TextStyle.SUMMARY_GOLD; - break; + case 0: + textStyle = TextStyle.WINDOW; + break; + case 1: + case 0.5: + textStyle = TextStyle.SUMMARY_BLUE; + break; + default: + textStyle = TextStyle.SUMMARY_GOLD; + break; } if (baseStarterValue - starterValue > 0) { starter.label.setColor(this.getTextColor(textStyle)); diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index 86b00f512a9..b35c0ca3303 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -406,22 +406,22 @@ export default class SummaryUiHandler extends UiHandler { this.genderText.setShadowColor(getGenderColor(this.pokemon.getGender(true), true)); switch (this.summaryUiMode) { - case SummaryUiMode.DEFAULT: - const page = args.length < 2 ? Page.PROFILE : args[2] as Page; - this.hideMoveEffect(true); - this.setCursor(page); - if (args.length > 3) { - this.selectCallback = args[3]; - } - break; - case SummaryUiMode.LEARN_MOVE: - this.newMove = args[2] as Move; - this.moveSelectFunction = args[3] as Function; + case SummaryUiMode.DEFAULT: + const page = args.length < 2 ? Page.PROFILE : args[2] as Page; + this.hideMoveEffect(true); + this.setCursor(page); + if (args.length > 3) { + this.selectCallback = args[3]; + } + break; + case SummaryUiMode.LEARN_MOVE: + this.newMove = args[2] as Move; + this.moveSelectFunction = args[3] as Function; - this.showMoveEffect(true); - this.setCursor(Page.MOVES); - this.showMoveSelect(); - break; + this.showMoveEffect(true); + this.setCursor(Page.MOVES); + this.showMoveSelect(); + break; } const fromSummary = args.length >= 2; @@ -489,25 +489,25 @@ export default class SummaryUiHandler extends UiHandler { success = true; } else { switch (button) { - case Button.UP: - success = this.setCursor(this.moveCursor ? this.moveCursor - 1 : 4); - break; - case Button.DOWN: - success = this.setCursor(this.moveCursor < 4 ? this.moveCursor + 1 : 0); - break; - case Button.LEFT: - this.moveSelect = false; - this.setCursor(Page.STATS); - if (this.summaryUiMode === SummaryUiMode.LEARN_MOVE) { - this.hideMoveEffect(); - this.destroyBlinkCursor(); - success = true; + case Button.UP: + success = this.setCursor(this.moveCursor ? this.moveCursor - 1 : 4); break; - } else { - this.hideMoveSelect(); - success = true; + case Button.DOWN: + success = this.setCursor(this.moveCursor < 4 ? this.moveCursor + 1 : 0); break; - } + case Button.LEFT: + this.moveSelect = false; + this.setCursor(Page.STATS); + if (this.summaryUiMode === SummaryUiMode.LEARN_MOVE) { + this.hideMoveEffect(); + this.destroyBlinkCursor(); + success = true; + break; + } else { + this.hideMoveSelect(); + success = true; + break; + } } } } else { @@ -546,35 +546,35 @@ export default class SummaryUiHandler extends UiHandler { } else { const pages = Utils.getEnumValues(Page); switch (button) { - case Button.UP: - case Button.DOWN: - if (this.summaryUiMode === SummaryUiMode.LEARN_MOVE) { - break; - } else if (!fromPartyMode) { - break; - } - const isDown = button === Button.DOWN; - const party = this.scene.getParty(); - const partyMemberIndex = this.pokemon ? party.indexOf(this.pokemon) : -1; - if ((isDown && partyMemberIndex < party.length - 1) || (!isDown && partyMemberIndex)) { - const page = this.cursor; - this.clear(); - this.show([ party[partyMemberIndex + (isDown ? 1 : -1)], this.summaryUiMode, page ]); - } - break; - case Button.LEFT: - if (this.cursor) { - success = this.setCursor(this.cursor - 1); - } - break; - case Button.RIGHT: - if (this.cursor < pages.length - 1) { - success = this.setCursor(this.cursor + 1); - if (this.summaryUiMode === SummaryUiMode.LEARN_MOVE && this.cursor === Page.MOVES) { - this.moveSelect = true; + case Button.UP: + case Button.DOWN: + if (this.summaryUiMode === SummaryUiMode.LEARN_MOVE) { + break; + } else if (!fromPartyMode) { + break; } - } - break; + const isDown = button === Button.DOWN; + const party = this.scene.getParty(); + const partyMemberIndex = this.pokemon ? party.indexOf(this.pokemon) : -1; + if ((isDown && partyMemberIndex < party.length - 1) || (!isDown && partyMemberIndex)) { + const page = this.cursor; + this.clear(); + this.show([ party[partyMemberIndex + (isDown ? 1 : -1)], this.summaryUiMode, page ]); + } + break; + case Button.LEFT: + if (this.cursor) { + success = this.setCursor(this.cursor - 1); + } + break; + case Button.RIGHT: + if (this.cursor < pages.length - 1) { + success = this.setCursor(this.cursor + 1); + if (this.summaryUiMode === SummaryUiMode.LEARN_MOVE && this.cursor === Page.MOVES) { + this.moveSelect = true; + } + } + break; } } } @@ -730,308 +730,308 @@ export default class SummaryUiHandler extends UiHandler { } switch (page) { - case Page.PROFILE: - const profileContainer = this.scene.add.container(0, -pageBg.height); - pageContainer.add(profileContainer); + case Page.PROFILE: + const profileContainer = this.scene.add.container(0, -pageBg.height); + pageContainer.add(profileContainer); - // TODO: should add field for original trainer name to Pokemon object, to support gift/traded Pokemon from MEs - const trainerText = addBBCodeTextObject(this.scene, 7, 12, `${i18next.t("pokemonSummary:ot")}/${getBBCodeFrag(loggedInUser?.username || i18next.t("pokemonSummary:unknown"), this.scene.gameData.gender === PlayerGender.FEMALE ? TextStyle.SUMMARY_PINK : TextStyle.SUMMARY_BLUE)}`, TextStyle.SUMMARY_ALT); - trainerText.setOrigin(0, 0); - profileContainer.add(trainerText); + // TODO: should add field for original trainer name to Pokemon object, to support gift/traded Pokemon from MEs + const trainerText = addBBCodeTextObject(this.scene, 7, 12, `${i18next.t("pokemonSummary:ot")}/${getBBCodeFrag(loggedInUser?.username || i18next.t("pokemonSummary:unknown"), this.scene.gameData.gender === PlayerGender.FEMALE ? TextStyle.SUMMARY_PINK : TextStyle.SUMMARY_BLUE)}`, TextStyle.SUMMARY_ALT); + trainerText.setOrigin(0, 0); + profileContainer.add(trainerText); - const trainerIdText = addTextObject(this.scene, 174, 12, this.scene.gameData.trainerId.toString(), TextStyle.SUMMARY_ALT); - trainerIdText.setOrigin(0, 0); - profileContainer.add(trainerIdText); + const trainerIdText = addTextObject(this.scene, 174, 12, this.scene.gameData.trainerId.toString(), TextStyle.SUMMARY_ALT); + trainerIdText.setOrigin(0, 0); + profileContainer.add(trainerIdText); - const typeLabel = addTextObject(this.scene, 7, 28, `${i18next.t("pokemonSummary:type")}/`, TextStyle.WINDOW_ALT); - typeLabel.setOrigin(0, 0); - profileContainer.add(typeLabel); + const typeLabel = addTextObject(this.scene, 7, 28, `${i18next.t("pokemonSummary:type")}/`, TextStyle.WINDOW_ALT); + typeLabel.setOrigin(0, 0); + profileContainer.add(typeLabel); - const getTypeIcon = (index: integer, type: Type, tera: boolean = false) => { - const xCoord = typeLabel.width * typeLabel.scale + 9 + 34 * index; - const typeIcon = !tera - ? this.scene.add.sprite(xCoord, 42, Utils.getLocalizedSpriteKey("types"), Type[type].toLowerCase()) - : this.scene.add.sprite(xCoord, 42, "type_tera"); - if (tera) { - typeIcon.setScale(0.5); - const typeRgb = getTypeRgb(type); - typeIcon.setTint(Phaser.Display.Color.GetColor(typeRgb[0], typeRgb[1], typeRgb[2])); + const getTypeIcon = (index: integer, type: Type, tera: boolean = false) => { + const xCoord = typeLabel.width * typeLabel.scale + 9 + 34 * index; + const typeIcon = !tera + ? this.scene.add.sprite(xCoord, 42, Utils.getLocalizedSpriteKey("types"), Type[type].toLowerCase()) + : this.scene.add.sprite(xCoord, 42, "type_tera"); + if (tera) { + typeIcon.setScale(0.5); + const typeRgb = getTypeRgb(type); + typeIcon.setTint(Phaser.Display.Color.GetColor(typeRgb[0], typeRgb[1], typeRgb[2])); + } + typeIcon.setOrigin(0, 1); + return typeIcon; + }; + + const types = this.pokemon?.getTypes(false, false, true)!; // TODO: is this bang correct? + profileContainer.add(getTypeIcon(0, types[0])); + if (types.length > 1) { + profileContainer.add(getTypeIcon(1, types[1])); + } + if (this.pokemon?.isTerastallized()) { + profileContainer.add(getTypeIcon(types.length, this.pokemon.getTeraType(), true)); } - typeIcon.setOrigin(0, 1); - return typeIcon; - }; - const types = this.pokemon?.getTypes(false, false, true)!; // TODO: is this bang correct? - profileContainer.add(getTypeIcon(0, types[0])); - if (types.length > 1) { - profileContainer.add(getTypeIcon(1, types[1])); - } - if (this.pokemon?.isTerastallized()) { - profileContainer.add(getTypeIcon(types.length, this.pokemon.getTeraType(), true)); - } + if (this.pokemon?.getLuck()) { + const luckLabelText = addTextObject(this.scene, 141, 28, i18next.t("common:luckIndicator"), TextStyle.SUMMARY_ALT); + luckLabelText.setOrigin(0, 0); + profileContainer.add(luckLabelText); - if (this.pokemon?.getLuck()) { - const luckLabelText = addTextObject(this.scene, 141, 28, i18next.t("common:luckIndicator"), TextStyle.SUMMARY_ALT); - luckLabelText.setOrigin(0, 0); - profileContainer.add(luckLabelText); + const luckText = addTextObject(this.scene, 141 + luckLabelText.displayWidth + 2, 28, this.pokemon.getLuck().toString(), TextStyle.SUMMARY); + luckText.setOrigin(0, 0); + luckText.setTint(getVariantTint((Math.min(this.pokemon.getLuck() - 1, 2)) as Variant)); + profileContainer.add(luckText); + } - const luckText = addTextObject(this.scene, 141 + luckLabelText.displayWidth + 2, 28, this.pokemon.getLuck().toString(), TextStyle.SUMMARY); - luckText.setOrigin(0, 0); - luckText.setTint(getVariantTint((Math.min(this.pokemon.getLuck() - 1, 2)) as Variant)); - profileContainer.add(luckText); - } - - this.abilityContainer = { - labelImage: this.scene.add.image(0, 0, "summary_profile_ability"), - ability: this.pokemon?.getAbility(true)!, // TODO: is this bang correct? - nameText: null, - descriptionText: null }; - - const allAbilityInfo = [ this.abilityContainer ]; // Creates an array to iterate through - // Only add to the array and set up displaying a passive if it's unlocked - if (this.pokemon?.hasPassive()) { - this.passiveContainer = { - labelImage: this.scene.add.image(0, 0, "summary_profile_passive"), - ability: this.pokemon.getPassiveAbility(), + this.abilityContainer = { + labelImage: this.scene.add.image(0, 0, "summary_profile_ability"), + ability: this.pokemon?.getAbility(true)!, // TODO: is this bang correct? nameText: null, descriptionText: null }; - allAbilityInfo.push(this.passiveContainer); - // Sets up the pixel button prompt image - this.abilityPrompt = this.scene.add.image(0, 0, !this.scene.inputController?.gamepadSupport ? "summary_profile_prompt_z" : "summary_profile_prompt_a"); - this.abilityPrompt.setPosition(8, 43); - this.abilityPrompt.setVisible(true); - this.abilityPrompt.setOrigin(0, 0); - profileContainer.add(this.abilityPrompt); - } + const allAbilityInfo = [ this.abilityContainer ]; // Creates an array to iterate through + // Only add to the array and set up displaying a passive if it's unlocked + if (this.pokemon?.hasPassive()) { + this.passiveContainer = { + labelImage: this.scene.add.image(0, 0, "summary_profile_passive"), + ability: this.pokemon.getPassiveAbility(), + nameText: null, + descriptionText: null }; + allAbilityInfo.push(this.passiveContainer); - allAbilityInfo.forEach(abilityInfo => { - abilityInfo.labelImage.setPosition(17, 43); - abilityInfo.labelImage.setVisible(true); - abilityInfo.labelImage.setOrigin(0, 0); - profileContainer.add(abilityInfo.labelImage); - - abilityInfo.nameText = addTextObject(this.scene, 7, 66, abilityInfo.ability?.name!, TextStyle.SUMMARY_ALT); // TODO: is this bang correct? - abilityInfo.nameText.setOrigin(0, 1); - profileContainer.add(abilityInfo.nameText); - - abilityInfo.descriptionText = addTextObject(this.scene, 7, 69, abilityInfo.ability?.description!, TextStyle.WINDOW_ALT, { wordWrap: { width: 1224 }}); // TODO: is this bang correct? - abilityInfo.descriptionText.setOrigin(0, 0); - profileContainer.add(abilityInfo.descriptionText); - - // Sets up the mask that hides the description text to give an illusion of scrolling - const descriptionTextMaskRect = this.scene.make.graphics({}); - descriptionTextMaskRect.setScale(6); - descriptionTextMaskRect.fillStyle(0xFFFFFF); - descriptionTextMaskRect.beginPath(); - descriptionTextMaskRect.fillRect(110, 90.5, 206, 31); - - const abilityDescriptionTextMask = descriptionTextMaskRect.createGeometryMask(); - - abilityInfo.descriptionText.setMask(abilityDescriptionTextMask); - - const abilityDescriptionLineCount = Math.floor(abilityInfo.descriptionText.displayHeight / 14.83); - - // Animates the description text moving upwards - if (abilityDescriptionLineCount > 2) { - abilityInfo.descriptionText.setY(69); - this.descriptionScrollTween = this.scene.tweens.add({ - targets: abilityInfo.descriptionText, - delay: Utils.fixedInt(2000), - loop: -1, - hold: Utils.fixedInt(2000), - duration: Utils.fixedInt((abilityDescriptionLineCount - 2) * 2000), - y: `-=${14.83 * (abilityDescriptionLineCount - 2)}` - }); + // Sets up the pixel button prompt image + this.abilityPrompt = this.scene.add.image(0, 0, !this.scene.inputController?.gamepadSupport ? "summary_profile_prompt_z" : "summary_profile_prompt_a"); + this.abilityPrompt.setPosition(8, 43); + this.abilityPrompt.setVisible(true); + this.abilityPrompt.setOrigin(0, 0); + profileContainer.add(this.abilityPrompt); } - }); - // Turn off visibility of passive info by default - this.passiveContainer?.labelImage.setVisible(false); - this.passiveContainer?.nameText?.setVisible(false); - this.passiveContainer?.descriptionText?.setVisible(false); - const closeFragment = getBBCodeFrag("", TextStyle.WINDOW_ALT); - const rawNature = Utils.toReadableString(Nature[this.pokemon?.getNature()!]); // TODO: is this bang correct? - const nature = `${getBBCodeFrag(Utils.toReadableString(getNatureName(this.pokemon?.getNature()!)), TextStyle.SUMMARY_RED)}${closeFragment}`; // TODO: is this bang correct? + allAbilityInfo.forEach(abilityInfo => { + abilityInfo.labelImage.setPosition(17, 43); + abilityInfo.labelImage.setVisible(true); + abilityInfo.labelImage.setOrigin(0, 0); + profileContainer.add(abilityInfo.labelImage); - const memoString = i18next.t("pokemonSummary:memoString", { - metFragment: i18next.t(`pokemonSummary:metFragment.${this.pokemon?.metBiome === -1 ? "apparently" : "normal"}`, { - biome: `${getBBCodeFrag(getBiomeName(this.pokemon?.metBiome!), TextStyle.SUMMARY_RED)}${closeFragment}`, // TODO: is this bang correct? - level: `${getBBCodeFrag(this.pokemon?.metLevel.toString()!, TextStyle.SUMMARY_RED)}${closeFragment}`, // TODO: is this bang correct? - wave: `${getBBCodeFrag((this.pokemon?.metWave ? this.pokemon.metWave.toString()! : i18next.t("pokemonSummary:unknownTrainer")), TextStyle.SUMMARY_RED)}${closeFragment}`, - }), - natureFragment: i18next.t(`pokemonSummary:natureFragment.${rawNature}`, { nature: nature }) - }); + abilityInfo.nameText = addTextObject(this.scene, 7, 66, abilityInfo.ability?.name!, TextStyle.SUMMARY_ALT); // TODO: is this bang correct? + abilityInfo.nameText.setOrigin(0, 1); + profileContainer.add(abilityInfo.nameText); - const memoText = addBBCodeTextObject(this.scene, 7, 113, String(memoString), TextStyle.WINDOW_ALT); - memoText.setOrigin(0, 0); - profileContainer.add(memoText); - break; - case Page.STATS: - const statsContainer = this.scene.add.container(0, -pageBg.height); - pageContainer.add(statsContainer); + abilityInfo.descriptionText = addTextObject(this.scene, 7, 69, abilityInfo.ability?.description!, TextStyle.WINDOW_ALT, { wordWrap: { width: 1224 }}); // TODO: is this bang correct? + abilityInfo.descriptionText.setOrigin(0, 0); + profileContainer.add(abilityInfo.descriptionText); - PERMANENT_STATS.forEach((stat, s) => { - const statName = i18next.t(getStatKey(stat)); - const rowIndex = s % 3; - const colIndex = Math.floor(s / 3); + // Sets up the mask that hides the description text to give an illusion of scrolling + const descriptionTextMaskRect = this.scene.make.graphics({}); + descriptionTextMaskRect.setScale(6); + descriptionTextMaskRect.fillStyle(0xFFFFFF); + descriptionTextMaskRect.beginPath(); + descriptionTextMaskRect.fillRect(110, 90.5, 206, 31); - const natureStatMultiplier = getNatureStatMultiplier(this.pokemon?.getNature()!, s); // TODO: is this bang correct? + const abilityDescriptionTextMask = descriptionTextMaskRect.createGeometryMask(); - const statLabel = addTextObject(this.scene, 27 + 115 * colIndex + (colIndex === 1 ? 5 : 0), 56 + 16 * rowIndex, statName, natureStatMultiplier === 1 ? TextStyle.SUMMARY : natureStatMultiplier > 1 ? TextStyle.SUMMARY_PINK : TextStyle.SUMMARY_BLUE); - statLabel.setOrigin(0.5, 0); - statsContainer.add(statLabel); + abilityInfo.descriptionText.setMask(abilityDescriptionTextMask); - const statValueText = stat !== Stat.HP - ? Utils.formatStat(this.pokemon?.getStat(stat)!) // TODO: is this bang correct? - : `${Utils.formatStat(this.pokemon?.hp!, true)}/${Utils.formatStat(this.pokemon?.getMaxHp()!, true)}`; // TODO: are those bangs correct? + const abilityDescriptionLineCount = Math.floor(abilityInfo.descriptionText.displayHeight / 14.83); - const statValue = addTextObject(this.scene, 120 + 88 * colIndex, 56 + 16 * rowIndex, statValueText, TextStyle.WINDOW_ALT); - statValue.setOrigin(1, 0); - statsContainer.add(statValue); - }); + // Animates the description text moving upwards + if (abilityDescriptionLineCount > 2) { + abilityInfo.descriptionText.setY(69); + this.descriptionScrollTween = this.scene.tweens.add({ + targets: abilityInfo.descriptionText, + delay: Utils.fixedInt(2000), + loop: -1, + hold: Utils.fixedInt(2000), + duration: Utils.fixedInt((abilityDescriptionLineCount - 2) * 2000), + y: `-=${14.83 * (abilityDescriptionLineCount - 2)}` + }); + } + }); + // Turn off visibility of passive info by default + this.passiveContainer?.labelImage.setVisible(false); + this.passiveContainer?.nameText?.setVisible(false); + this.passiveContainer?.descriptionText?.setVisible(false); - const itemModifiers = (this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier + const closeFragment = getBBCodeFrag("", TextStyle.WINDOW_ALT); + const rawNature = Utils.toReadableString(Nature[this.pokemon?.getNature()!]); // TODO: is this bang correct? + const nature = `${getBBCodeFrag(Utils.toReadableString(getNatureName(this.pokemon?.getNature()!)), TextStyle.SUMMARY_RED)}${closeFragment}`; // TODO: is this bang correct? + + const memoString = i18next.t("pokemonSummary:memoString", { + metFragment: i18next.t(`pokemonSummary:metFragment.${this.pokemon?.metBiome === -1 ? "apparently" : "normal"}`, { + biome: `${getBBCodeFrag(getBiomeName(this.pokemon?.metBiome!), TextStyle.SUMMARY_RED)}${closeFragment}`, // TODO: is this bang correct? + level: `${getBBCodeFrag(this.pokemon?.metLevel.toString()!, TextStyle.SUMMARY_RED)}${closeFragment}`, // TODO: is this bang correct? + wave: `${getBBCodeFrag((this.pokemon?.metWave ? this.pokemon.metWave.toString()! : i18next.t("pokemonSummary:unknownTrainer")), TextStyle.SUMMARY_RED)}${closeFragment}`, + }), + natureFragment: i18next.t(`pokemonSummary:natureFragment.${rawNature}`, { nature: nature }) + }); + + const memoText = addBBCodeTextObject(this.scene, 7, 113, String(memoString), TextStyle.WINDOW_ALT); + memoText.setOrigin(0, 0); + profileContainer.add(memoText); + break; + case Page.STATS: + const statsContainer = this.scene.add.container(0, -pageBg.height); + pageContainer.add(statsContainer); + + PERMANENT_STATS.forEach((stat, s) => { + const statName = i18next.t(getStatKey(stat)); + const rowIndex = s % 3; + const colIndex = Math.floor(s / 3); + + const natureStatMultiplier = getNatureStatMultiplier(this.pokemon?.getNature()!, s); // TODO: is this bang correct? + + const statLabel = addTextObject(this.scene, 27 + 115 * colIndex + (colIndex === 1 ? 5 : 0), 56 + 16 * rowIndex, statName, natureStatMultiplier === 1 ? TextStyle.SUMMARY : natureStatMultiplier > 1 ? TextStyle.SUMMARY_PINK : TextStyle.SUMMARY_BLUE); + statLabel.setOrigin(0.5, 0); + statsContainer.add(statLabel); + + const statValueText = stat !== Stat.HP + ? Utils.formatStat(this.pokemon?.getStat(stat)!) // TODO: is this bang correct? + : `${Utils.formatStat(this.pokemon?.hp!, true)}/${Utils.formatStat(this.pokemon?.getMaxHp()!, true)}`; // TODO: are those bangs correct? + + const statValue = addTextObject(this.scene, 120 + 88 * colIndex, 56 + 16 * rowIndex, statValueText, TextStyle.WINDOW_ALT); + statValue.setOrigin(1, 0); + statsContainer.add(statValue); + }); + + const itemModifiers = (this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.pokemonId === this.pokemon?.id, this.playerParty) as PokemonHeldItemModifier[]) - .sort(modifierSortFunc); + .sort(modifierSortFunc); - itemModifiers.forEach((item, i) => { - const icon = item.getIcon(this.scene, true); + itemModifiers.forEach((item, i) => { + const icon = item.getIcon(this.scene, true); - icon.setPosition((i % 17) * 12 + 3, 14 * Math.floor(i / 17) + 15); - statsContainer.add(icon); + icon.setPosition((i % 17) * 12 + 3, 14 * Math.floor(i / 17) + 15); + statsContainer.add(icon); - icon.setInteractive(new Phaser.Geom.Rectangle(0, 0, 32, 32), Phaser.Geom.Rectangle.Contains); - icon.on("pointerover", () => (this.scene as BattleScene).ui.showTooltip(item.type.name, item.type.getDescription(this.scene), true)); - icon.on("pointerout", () => (this.scene as BattleScene).ui.hideTooltip()); - }); + icon.setInteractive(new Phaser.Geom.Rectangle(0, 0, 32, 32), Phaser.Geom.Rectangle.Contains); + icon.on("pointerover", () => (this.scene as BattleScene).ui.showTooltip(item.type.name, item.type.getDescription(this.scene), true)); + icon.on("pointerout", () => (this.scene as BattleScene).ui.hideTooltip()); + }); - const pkmLvl = this.pokemon?.level!; // TODO: is this bang correct? - const pkmLvlExp = this.pokemon?.levelExp!; // TODO: is this bang correct? - const pkmExp = this.pokemon?.exp!; // TODO: is this bang correct? - const pkmSpeciesGrowthRate = this.pokemon?.species.growthRate!; // TODO: is this bang correct? - const relLvExp = getLevelRelExp(pkmLvl + 1, pkmSpeciesGrowthRate); - const expRatio = pkmLvl < this.scene.getMaxExpLevel() ? pkmLvlExp / relLvExp : 0; + const pkmLvl = this.pokemon?.level!; // TODO: is this bang correct? + const pkmLvlExp = this.pokemon?.levelExp!; // TODO: is this bang correct? + const pkmExp = this.pokemon?.exp!; // TODO: is this bang correct? + const pkmSpeciesGrowthRate = this.pokemon?.species.growthRate!; // TODO: is this bang correct? + const relLvExp = getLevelRelExp(pkmLvl + 1, pkmSpeciesGrowthRate); + const expRatio = pkmLvl < this.scene.getMaxExpLevel() ? pkmLvlExp / relLvExp : 0; - const expLabel = addTextObject(this.scene, 6, 112, i18next.t("pokemonSummary:expPoints"), TextStyle.SUMMARY); - expLabel.setOrigin(0, 0); - statsContainer.add(expLabel); + const expLabel = addTextObject(this.scene, 6, 112, i18next.t("pokemonSummary:expPoints"), TextStyle.SUMMARY); + expLabel.setOrigin(0, 0); + statsContainer.add(expLabel); - const nextLvExpLabel = addTextObject(this.scene, 6, 128, i18next.t("pokemonSummary:nextLv"), TextStyle.SUMMARY); - nextLvExpLabel.setOrigin(0, 0); - statsContainer.add(nextLvExpLabel); + const nextLvExpLabel = addTextObject(this.scene, 6, 128, i18next.t("pokemonSummary:nextLv"), TextStyle.SUMMARY); + nextLvExpLabel.setOrigin(0, 0); + statsContainer.add(nextLvExpLabel); - const expText = addTextObject(this.scene, 208, 112, pkmExp.toString(), TextStyle.WINDOW_ALT); - expText.setOrigin(1, 0); - statsContainer.add(expText); + const expText = addTextObject(this.scene, 208, 112, pkmExp.toString(), TextStyle.WINDOW_ALT); + expText.setOrigin(1, 0); + statsContainer.add(expText); - const nextLvExp = pkmLvl < this.scene.getMaxExpLevel() - ? getLevelTotalExp(pkmLvl + 1, pkmSpeciesGrowthRate) - pkmExp - : 0; - const nextLvExpText = addTextObject(this.scene, 208, 128, nextLvExp.toString(), TextStyle.WINDOW_ALT); - nextLvExpText.setOrigin(1, 0); - statsContainer.add(nextLvExpText); + const nextLvExp = pkmLvl < this.scene.getMaxExpLevel() + ? getLevelTotalExp(pkmLvl + 1, pkmSpeciesGrowthRate) - pkmExp + : 0; + const nextLvExpText = addTextObject(this.scene, 208, 128, nextLvExp.toString(), TextStyle.WINDOW_ALT); + nextLvExpText.setOrigin(1, 0); + statsContainer.add(nextLvExpText); - const expOverlay = this.scene.add.image(140, 145, "summary_stats_overlay_exp"); - expOverlay.setOrigin(0, 0); - statsContainer.add(expOverlay); + const expOverlay = this.scene.add.image(140, 145, "summary_stats_overlay_exp"); + expOverlay.setOrigin(0, 0); + statsContainer.add(expOverlay); - const expMaskRect = this.scene.make.graphics({}); - expMaskRect.setScale(6); - expMaskRect.fillStyle(0xFFFFFF); - expMaskRect.beginPath(); - expMaskRect.fillRect(140 + pageContainer.x, 145 + pageContainer.y + 21, Math.floor(expRatio * 64), 3); + const expMaskRect = this.scene.make.graphics({}); + expMaskRect.setScale(6); + expMaskRect.fillStyle(0xFFFFFF); + expMaskRect.beginPath(); + expMaskRect.fillRect(140 + pageContainer.x, 145 + pageContainer.y + 21, Math.floor(expRatio * 64), 3); - const expMask = expMaskRect.createGeometryMask(); + const expMask = expMaskRect.createGeometryMask(); - expOverlay.setMask(expMask); - break; - case Page.MOVES: - this.movesContainer = this.scene.add.container(5, -pageBg.height + 26); - pageContainer.add(this.movesContainer); + expOverlay.setMask(expMask); + break; + case Page.MOVES: + this.movesContainer = this.scene.add.container(5, -pageBg.height + 26); + pageContainer.add(this.movesContainer); - this.extraMoveRowContainer = this.scene.add.container(0, 64); - this.extraMoveRowContainer.setVisible(false); - this.movesContainer.add(this.extraMoveRowContainer); + this.extraMoveRowContainer = this.scene.add.container(0, 64); + this.extraMoveRowContainer.setVisible(false); + this.movesContainer.add(this.extraMoveRowContainer); - const extraRowOverlay = this.scene.add.image(-2, 1, "summary_moves_overlay_row"); - extraRowOverlay.setOrigin(0, 1); - this.extraMoveRowContainer.add(extraRowOverlay); + const extraRowOverlay = this.scene.add.image(-2, 1, "summary_moves_overlay_row"); + extraRowOverlay.setOrigin(0, 1); + this.extraMoveRowContainer.add(extraRowOverlay); - const extraRowText = addTextObject(this.scene, 35, 0, this.summaryUiMode === SummaryUiMode.LEARN_MOVE && this.newMove ? this.newMove.name : i18next.t("pokemonSummary:cancel"), - this.summaryUiMode === SummaryUiMode.LEARN_MOVE ? TextStyle.SUMMARY_PINK : TextStyle.SUMMARY); - extraRowText.setOrigin(0, 1); - this.extraMoveRowContainer.add(extraRowText); + const extraRowText = addTextObject(this.scene, 35, 0, this.summaryUiMode === SummaryUiMode.LEARN_MOVE && this.newMove ? this.newMove.name : i18next.t("pokemonSummary:cancel"), + this.summaryUiMode === SummaryUiMode.LEARN_MOVE ? TextStyle.SUMMARY_PINK : TextStyle.SUMMARY); + extraRowText.setOrigin(0, 1); + this.extraMoveRowContainer.add(extraRowText); - if (this.summaryUiMode === SummaryUiMode.LEARN_MOVE) { - this.extraMoveRowContainer.setVisible(true); + if (this.summaryUiMode === SummaryUiMode.LEARN_MOVE) { + this.extraMoveRowContainer.setVisible(true); - if (this.newMove && this.pokemon) { - const spriteKey = Utils.getLocalizedSpriteKey("types"); - const moveType = this.pokemon.getMoveType(this.newMove); - const newMoveTypeIcon = this.scene.add.sprite(0, 0, spriteKey, Type[moveType].toLowerCase()); - newMoveTypeIcon.setOrigin(0, 1); - this.extraMoveRowContainer.add(newMoveTypeIcon); - } - const ppOverlay = this.scene.add.image(163, -1, "summary_moves_overlay_pp"); - ppOverlay.setOrigin(0, 1); - this.extraMoveRowContainer.add(ppOverlay); + if (this.newMove && this.pokemon) { + const spriteKey = Utils.getLocalizedSpriteKey("types"); + const moveType = this.pokemon.getMoveType(this.newMove); + const newMoveTypeIcon = this.scene.add.sprite(0, 0, spriteKey, Type[moveType].toLowerCase()); + newMoveTypeIcon.setOrigin(0, 1); + this.extraMoveRowContainer.add(newMoveTypeIcon); + } + const ppOverlay = this.scene.add.image(163, -1, "summary_moves_overlay_pp"); + ppOverlay.setOrigin(0, 1); + this.extraMoveRowContainer.add(ppOverlay); - const pp = Utils.padInt(this.newMove?.pp!, 2, " "); // TODO: is this bang correct? - const ppText = addTextObject(this.scene, 173, 1, `${pp}/${pp}`, TextStyle.WINDOW); - ppText.setOrigin(0, 1); - this.extraMoveRowContainer.add(ppText); - } - - this.moveRowsContainer = this.scene.add.container(0, 0); - this.movesContainer.add(this.moveRowsContainer); - - for (let m = 0; m < 4; m++) { - const move: PokemonMove | null = this.pokemon && this.pokemon.moveset.length > m ? this.pokemon?.moveset[m] : null; - const moveRowContainer = this.scene.add.container(0, 16 * m); - this.moveRowsContainer.add(moveRowContainer); - - if (move && this.pokemon) { - const spriteKey = Utils.getLocalizedSpriteKey("types"); - const moveType = this.pokemon.getMoveType(move.getMove()); - const typeIcon = this.scene.add.sprite(0, 0, spriteKey, Type[moveType].toLowerCase()); - typeIcon.setOrigin(0, 1); - moveRowContainer.add(typeIcon); + const pp = Utils.padInt(this.newMove?.pp!, 2, " "); // TODO: is this bang correct? + const ppText = addTextObject(this.scene, 173, 1, `${pp}/${pp}`, TextStyle.WINDOW); + ppText.setOrigin(0, 1); + this.extraMoveRowContainer.add(ppText); } - const moveText = addTextObject(this.scene, 35, 0, move ? move.getName() : "-", TextStyle.SUMMARY); - moveText.setOrigin(0, 1); - moveRowContainer.add(moveText); + this.moveRowsContainer = this.scene.add.container(0, 0); + this.movesContainer.add(this.moveRowsContainer); - const ppOverlay = this.scene.add.image(163, -1, "summary_moves_overlay_pp"); - ppOverlay.setOrigin(0, 1); - moveRowContainer.add(ppOverlay); + for (let m = 0; m < 4; m++) { + const move: PokemonMove | null = this.pokemon && this.pokemon.moveset.length > m ? this.pokemon?.moveset[m] : null; + const moveRowContainer = this.scene.add.container(0, 16 * m); + this.moveRowsContainer.add(moveRowContainer); - const ppText = addTextObject(this.scene, 173, 1, "--/--", TextStyle.WINDOW); - ppText.setOrigin(0, 1); + if (move && this.pokemon) { + const spriteKey = Utils.getLocalizedSpriteKey("types"); + const moveType = this.pokemon.getMoveType(move.getMove()); + const typeIcon = this.scene.add.sprite(0, 0, spriteKey, Type[moveType].toLowerCase()); + typeIcon.setOrigin(0, 1); + moveRowContainer.add(typeIcon); + } - if (move) { - const maxPP = move.getMovePp(); - const pp = maxPP - move.ppUsed; - ppText.setText(`${Utils.padInt(pp, 2, " ")}/${Utils.padInt(maxPP, 2, " ")}`); + const moveText = addTextObject(this.scene, 35, 0, move ? move.getName() : "-", TextStyle.SUMMARY); + moveText.setOrigin(0, 1); + moveRowContainer.add(moveText); + + const ppOverlay = this.scene.add.image(163, -1, "summary_moves_overlay_pp"); + ppOverlay.setOrigin(0, 1); + moveRowContainer.add(ppOverlay); + + const ppText = addTextObject(this.scene, 173, 1, "--/--", TextStyle.WINDOW); + ppText.setOrigin(0, 1); + + if (move) { + const maxPP = move.getMovePp(); + const pp = maxPP - move.ppUsed; + ppText.setText(`${Utils.padInt(pp, 2, " ")}/${Utils.padInt(maxPP, 2, " ")}`); + } + + moveRowContainer.add(ppText); } - moveRowContainer.add(ppText); - } + this.moveDescriptionText = addTextObject(this.scene, 2, 84, "", TextStyle.WINDOW_ALT, { wordWrap: { width: 1212 }}); + this.movesContainer.add(this.moveDescriptionText); - this.moveDescriptionText = addTextObject(this.scene, 2, 84, "", TextStyle.WINDOW_ALT, { wordWrap: { width: 1212 }}); - this.movesContainer.add(this.moveDescriptionText); + const moveDescriptionTextMaskRect = this.scene.make.graphics({}); + moveDescriptionTextMaskRect.setScale(6); + moveDescriptionTextMaskRect.fillStyle(0xFFFFFF); + moveDescriptionTextMaskRect.beginPath(); + moveDescriptionTextMaskRect.fillRect(112, 130, 202, 46); - const moveDescriptionTextMaskRect = this.scene.make.graphics({}); - moveDescriptionTextMaskRect.setScale(6); - moveDescriptionTextMaskRect.fillStyle(0xFFFFFF); - moveDescriptionTextMaskRect.beginPath(); - moveDescriptionTextMaskRect.fillRect(112, 130, 202, 46); + const moveDescriptionTextMask = moveDescriptionTextMaskRect.createGeometryMask(); - const moveDescriptionTextMask = moveDescriptionTextMaskRect.createGeometryMask(); - - this.moveDescriptionText.setMask(moveDescriptionTextMask); - break; + this.moveDescriptionText.setMask(moveDescriptionTextMask); + break; } } diff --git a/src/ui/target-select-ui-handler.ts b/src/ui/target-select-ui-handler.ts index 85b671c2617..4c55a4b960e 100644 --- a/src/ui/target-select-ui-handler.ts +++ b/src/ui/target-select-ui-handler.ts @@ -71,26 +71,26 @@ export default class TargetSelectUiHandler extends UiHandler { success = false; } else { switch (button) { - case Button.UP: - if (this.cursor < BattlerIndex.ENEMY && this.targets.findIndex(t => t >= BattlerIndex.ENEMY) > -1) { - success = this.setCursor(this.targets.find(t => t >= BattlerIndex.ENEMY)!); // TODO: is the bang correct here? - } - break; - case Button.DOWN: - if (this.cursor >= BattlerIndex.ENEMY && this.targets.findIndex(t => t < BattlerIndex.ENEMY) > -1) { - success = this.setCursor(this.targets.find(t => t < BattlerIndex.ENEMY)!); // TODO: is the bang correct here? - } - break; - case Button.LEFT: - if (this.cursor % 2 && this.targets.findIndex(t => t === this.cursor - 1) > -1) { - success = this.setCursor(this.cursor - 1); - } - break; - case Button.RIGHT: - if (!(this.cursor % 2) && this.targets.findIndex(t => t === this.cursor + 1) > -1) { - success = this.setCursor(this.cursor + 1); - } - break; + case Button.UP: + if (this.cursor < BattlerIndex.ENEMY && this.targets.findIndex(t => t >= BattlerIndex.ENEMY) > -1) { + success = this.setCursor(this.targets.find(t => t >= BattlerIndex.ENEMY)!); // TODO: is the bang correct here? + } + break; + case Button.DOWN: + if (this.cursor >= BattlerIndex.ENEMY && this.targets.findIndex(t => t < BattlerIndex.ENEMY) > -1) { + success = this.setCursor(this.targets.find(t => t < BattlerIndex.ENEMY)!); // TODO: is the bang correct here? + } + break; + case Button.LEFT: + if (this.cursor % 2 && this.targets.findIndex(t => t === this.cursor - 1) > -1) { + success = this.setCursor(this.cursor - 1); + } + break; + case Button.RIGHT: + if (!(this.cursor % 2) && this.targets.findIndex(t => t === this.cursor + 1) > -1) { + success = this.setCursor(this.cursor + 1); + } + break; } } diff --git a/src/ui/text.ts b/src/ui/text.ts index 22dd3f4cd6a..069aa8680fc 100644 --- a/src/ui/text.ts +++ b/src/ui/text.ts @@ -129,84 +129,84 @@ export function getTextStyleOptions(style: TextStyle, uiTheme: UiTheme, extraSty } switch (style) { - case TextStyle.SUMMARY: - case TextStyle.SUMMARY_ALT: - case TextStyle.SUMMARY_BLUE: - case TextStyle.SUMMARY_RED: - case TextStyle.SUMMARY_PINK: - case TextStyle.SUMMARY_GOLD: - case TextStyle.SUMMARY_GRAY: - case TextStyle.SUMMARY_GREEN: - case TextStyle.WINDOW: - case TextStyle.WINDOW_ALT: - shadowXpos = 3; - shadowYpos = 3; - break; - case TextStyle.STATS_LABEL: - let fontSizeLabel = "96px"; - switch (lang) { - case "de": + case TextStyle.SUMMARY: + case TextStyle.SUMMARY_ALT: + case TextStyle.SUMMARY_BLUE: + case TextStyle.SUMMARY_RED: + case TextStyle.SUMMARY_PINK: + case TextStyle.SUMMARY_GOLD: + case TextStyle.SUMMARY_GRAY: + case TextStyle.SUMMARY_GREEN: + case TextStyle.WINDOW: + case TextStyle.WINDOW_ALT: shadowXpos = 3; shadowYpos = 3; - fontSizeLabel = "80px"; break; - default: - fontSizeLabel = "96px"; + case TextStyle.STATS_LABEL: + let fontSizeLabel = "96px"; + switch (lang) { + case "de": + shadowXpos = 3; + shadowYpos = 3; + fontSizeLabel = "80px"; + break; + default: + fontSizeLabel = "96px"; + break; + } + styleOptions.fontSize = fontSizeLabel; break; - } - styleOptions.fontSize = fontSizeLabel; - break; - case TextStyle.STATS_VALUE: - shadowXpos = 3; - shadowYpos = 3; - let fontSizeValue = "96px"; - switch (lang) { - case "de": - fontSizeValue = "80px"; + case TextStyle.STATS_VALUE: + shadowXpos = 3; + shadowYpos = 3; + let fontSizeValue = "96px"; + switch (lang) { + case "de": + fontSizeValue = "80px"; + break; + default: + fontSizeValue = "96px"; + break; + } + styleOptions.fontSize = fontSizeValue; break; - default: - fontSizeValue = "96px"; + case TextStyle.MESSAGE: + case TextStyle.SETTINGS_LABEL: + case TextStyle.SETTINGS_LOCKED: + case TextStyle.SETTINGS_SELECTED: + break; + case TextStyle.BATTLE_INFO: + case TextStyle.MONEY: + case TextStyle.TOOLTIP_TITLE: + styleOptions.fontSize = defaultFontSize - 24; + shadowXpos = 3.5; + shadowYpos = 3.5; + break; + case TextStyle.PARTY: + case TextStyle.PARTY_RED: + styleOptions.fontSize = defaultFontSize - 30; + styleOptions.fontFamily = "pkmnems"; + break; + case TextStyle.TOOLTIP_CONTENT: + styleOptions.fontSize = defaultFontSize - 32; + shadowXpos = 3; + shadowYpos = 3; + break; + case TextStyle.MOVE_INFO_CONTENT: + styleOptions.fontSize = defaultFontSize - 40; + shadowXpos = 3; + shadowYpos = 3; + break; + case TextStyle.SMALLER_WINDOW_ALT: + styleOptions.fontSize = defaultFontSize - 36; + shadowXpos = 3; + shadowYpos = 3; + break; + case TextStyle.BGM_BAR: + styleOptions.fontSize = defaultFontSize - 24; + shadowXpos = 3; + shadowYpos = 3; break; - } - styleOptions.fontSize = fontSizeValue; - break; - case TextStyle.MESSAGE: - case TextStyle.SETTINGS_LABEL: - case TextStyle.SETTINGS_LOCKED: - case TextStyle.SETTINGS_SELECTED: - break; - case TextStyle.BATTLE_INFO: - case TextStyle.MONEY: - case TextStyle.TOOLTIP_TITLE: - styleOptions.fontSize = defaultFontSize - 24; - shadowXpos = 3.5; - shadowYpos = 3.5; - break; - case TextStyle.PARTY: - case TextStyle.PARTY_RED: - styleOptions.fontSize = defaultFontSize - 30; - styleOptions.fontFamily = "pkmnems"; - break; - case TextStyle.TOOLTIP_CONTENT: - styleOptions.fontSize = defaultFontSize - 32; - shadowXpos = 3; - shadowYpos = 3; - break; - case TextStyle.MOVE_INFO_CONTENT: - styleOptions.fontSize = defaultFontSize - 40; - shadowXpos = 3; - shadowYpos = 3; - break; - case TextStyle.SMALLER_WINDOW_ALT: - styleOptions.fontSize = defaultFontSize - 36; - shadowXpos = 3; - shadowYpos = 3; - break; - case TextStyle.BGM_BAR: - styleOptions.fontSize = defaultFontSize - 24; - shadowXpos = 3; - shadowYpos = 3; - break; } const shadowColor = getTextColor(style, true, uiTheme); @@ -257,110 +257,110 @@ export function getTextWithColors(content: string, primaryStyle: TextStyle, uiTh export function getTextColor(textStyle: TextStyle, shadow?: boolean, uiTheme: UiTheme = UiTheme.DEFAULT): string { const isLegacyTheme = uiTheme === UiTheme.LEGACY; switch (textStyle) { - case TextStyle.MESSAGE: - return !shadow ? "#f8f8f8" : "#6b5a73"; - case TextStyle.WINDOW: - case TextStyle.MOVE_INFO_CONTENT: - case TextStyle.MOVE_PP_FULL: - case TextStyle.TOOLTIP_CONTENT: - case TextStyle.SETTINGS_VALUE: - if (isLegacyTheme) { + case TextStyle.MESSAGE: + return !shadow ? "#f8f8f8" : "#6b5a73"; + case TextStyle.WINDOW: + case TextStyle.MOVE_INFO_CONTENT: + case TextStyle.MOVE_PP_FULL: + case TextStyle.TOOLTIP_CONTENT: + case TextStyle.SETTINGS_VALUE: + if (isLegacyTheme) { + return !shadow ? "#484848" : "#d0d0c8"; + } + return !shadow ? "#f8f8f8" : "#6b5a73"; + case TextStyle.MOVE_PP_HALF_FULL: + if (isLegacyTheme) { + return !shadow ? "#a68e17" : "#ebd773"; + } + return !shadow ? "#ccbe00" : "#6e672c"; + case TextStyle.MOVE_PP_NEAR_EMPTY: + if (isLegacyTheme) { + return !shadow ? "#d64b00" : "#f7b18b"; + } + return !shadow ? "#d64b00" : "#69402a"; + case TextStyle.MOVE_PP_EMPTY: + if (isLegacyTheme) { + return !shadow ? "#e13d3d" : "#fca2a2"; + } + return !shadow ? "#e13d3d" : "#632929"; + case TextStyle.WINDOW_ALT: return !shadow ? "#484848" : "#d0d0c8"; - } - return !shadow ? "#f8f8f8" : "#6b5a73"; - case TextStyle.MOVE_PP_HALF_FULL: - if (isLegacyTheme) { - return !shadow ? "#a68e17" : "#ebd773"; - } - return !shadow ? "#ccbe00" : "#6e672c"; - case TextStyle.MOVE_PP_NEAR_EMPTY: - if (isLegacyTheme) { - return !shadow ? "#d64b00" : "#f7b18b"; - } - return !shadow ? "#d64b00" : "#69402a"; - case TextStyle.MOVE_PP_EMPTY: - if (isLegacyTheme) { - return !shadow ? "#e13d3d" : "#fca2a2"; - } - return !shadow ? "#e13d3d" : "#632929"; - case TextStyle.WINDOW_ALT: - return !shadow ? "#484848" : "#d0d0c8"; - case TextStyle.BATTLE_INFO: - if (isLegacyTheme) { - return !shadow ? "#404040" : "#ded6b5"; - } - return !shadow ? "#f8f8f8" : "#6b5a73"; - case TextStyle.PARTY: - return !shadow ? "#f8f8f8" : "#707070"; - case TextStyle.PARTY_RED: - return !shadow ? "#f89890" : "#984038"; - case TextStyle.SUMMARY: - return !shadow ? "#f8f8f8" : "#636363"; - case TextStyle.SUMMARY_ALT: - if (isLegacyTheme) { + case TextStyle.BATTLE_INFO: + if (isLegacyTheme) { + return !shadow ? "#404040" : "#ded6b5"; + } + return !shadow ? "#f8f8f8" : "#6b5a73"; + case TextStyle.PARTY: + return !shadow ? "#f8f8f8" : "#707070"; + case TextStyle.PARTY_RED: + return !shadow ? "#f89890" : "#984038"; + case TextStyle.SUMMARY: return !shadow ? "#f8f8f8" : "#636363"; - } - return !shadow ? "#484848" : "#d0d0c8"; - case TextStyle.SUMMARY_RED: - case TextStyle.TOOLTIP_TITLE: - return !shadow ? "#e70808" : "#ffbd73"; - case TextStyle.SUMMARY_BLUE: - return !shadow ? "#40c8f8" : "#006090"; - case TextStyle.SUMMARY_PINK: - return !shadow ? "#f89890" : "#984038"; - case TextStyle.SUMMARY_GOLD: - case TextStyle.MONEY: - return !shadow ? "#e8e8a8" : "#a0a060"; - case TextStyle.SETTINGS_LOCKED: - case TextStyle.SUMMARY_GRAY: - return !shadow ? "#a0a0a0" : "#636363"; - case TextStyle.STATS_LABEL: - return !shadow ? "#f8b050" : "#c07800"; - case TextStyle.STATS_VALUE: - if (isLegacyTheme) { + case TextStyle.SUMMARY_ALT: + if (isLegacyTheme) { + return !shadow ? "#f8f8f8" : "#636363"; + } return !shadow ? "#484848" : "#d0d0c8"; - } - return !shadow ? "#f8f8f8" : "#6b5a73"; - case TextStyle.SUMMARY_GREEN: - return !shadow ? "#78c850" : "#306850"; - case TextStyle.SETTINGS_LABEL: - case TextStyle.PERFECT_IV: - return !shadow ? "#f8b050" : "#c07800"; - case TextStyle.SETTINGS_SELECTED: - return !shadow ? "#f88880" : "#f83018"; - case TextStyle.SMALLER_WINDOW_ALT: - return !shadow ? "#484848" : "#d0d0c8"; - case TextStyle.BGM_BAR: - return !shadow ? "#f8f8f8" : "#6b5a73"; + case TextStyle.SUMMARY_RED: + case TextStyle.TOOLTIP_TITLE: + return !shadow ? "#e70808" : "#ffbd73"; + case TextStyle.SUMMARY_BLUE: + return !shadow ? "#40c8f8" : "#006090"; + case TextStyle.SUMMARY_PINK: + return !shadow ? "#f89890" : "#984038"; + case TextStyle.SUMMARY_GOLD: + case TextStyle.MONEY: + return !shadow ? "#e8e8a8" : "#a0a060"; + case TextStyle.SETTINGS_LOCKED: + case TextStyle.SUMMARY_GRAY: + return !shadow ? "#a0a0a0" : "#636363"; + case TextStyle.STATS_LABEL: + return !shadow ? "#f8b050" : "#c07800"; + case TextStyle.STATS_VALUE: + if (isLegacyTheme) { + return !shadow ? "#484848" : "#d0d0c8"; + } + return !shadow ? "#f8f8f8" : "#6b5a73"; + case TextStyle.SUMMARY_GREEN: + return !shadow ? "#78c850" : "#306850"; + case TextStyle.SETTINGS_LABEL: + case TextStyle.PERFECT_IV: + return !shadow ? "#f8b050" : "#c07800"; + case TextStyle.SETTINGS_SELECTED: + return !shadow ? "#f88880" : "#f83018"; + case TextStyle.SMALLER_WINDOW_ALT: + return !shadow ? "#484848" : "#d0d0c8"; + case TextStyle.BGM_BAR: + return !shadow ? "#f8f8f8" : "#6b5a73"; } } export function getModifierTierTextTint(tier: ModifierTier): integer { switch (tier) { - case ModifierTier.COMMON: - return 0xf8f8f8; - case ModifierTier.GREAT: - return 0x4998f8; - case ModifierTier.ULTRA: - return 0xf8d038; - case ModifierTier.ROGUE: - return 0xdb4343; - case ModifierTier.MASTER: - return 0xe331c5; - case ModifierTier.LUXURY: - return 0xe74c18; + case ModifierTier.COMMON: + return 0xf8f8f8; + case ModifierTier.GREAT: + return 0x4998f8; + case ModifierTier.ULTRA: + return 0xf8d038; + case ModifierTier.ROGUE: + return 0xdb4343; + case ModifierTier.MASTER: + return 0xe331c5; + case ModifierTier.LUXURY: + return 0xe74c18; } } export function getEggTierTextTint(tier: EggTier): integer { switch (tier) { - case EggTier.COMMON: - return getModifierTierTextTint(ModifierTier.COMMON); - case EggTier.RARE: - return getModifierTierTextTint(ModifierTier.GREAT); - case EggTier.EPIC: - return getModifierTierTextTint(ModifierTier.ULTRA); - case EggTier.LEGENDARY: - return getModifierTierTextTint(ModifierTier.MASTER); + case EggTier.COMMON: + return getModifierTierTextTint(ModifierTier.COMMON); + case EggTier.RARE: + return getModifierTierTextTint(ModifierTier.GREAT); + case EggTier.EPIC: + return getModifierTierTextTint(ModifierTier.ULTRA); + case EggTier.LEGENDARY: + return getModifierTierTextTint(ModifierTier.MASTER); } } diff --git a/src/ui/ui-theme.ts b/src/ui/ui-theme.ts index 8ff50667248..89c56384bd0 100644 --- a/src/ui/ui-theme.ts +++ b/src/ui/ui-theme.ts @@ -10,12 +10,12 @@ export enum WindowVariant { export function getWindowVariantSuffix(windowVariant: WindowVariant): string { switch (windowVariant) { - case WindowVariant.THIN: - return "_thin"; - case WindowVariant.XTHIN: - return "_xthin"; - default: - return ""; + case WindowVariant.THIN: + return "_thin"; + case WindowVariant.XTHIN: + return "_xthin"; + default: + return ""; } } diff --git a/src/utils.ts b/src/utils.ts index c2ee7100909..8a35a4b3f07 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -194,23 +194,23 @@ export function formatLargeNumber(count: integer, threshold: integer): string { const ret = count.toString(); let suffix = ""; switch (Math.ceil(ret.length / 3) - 1) { - case 1: - suffix = "K"; - break; - case 2: - suffix = "M"; - break; - case 3: - suffix = "B"; - break; - case 4: - suffix = "T"; - break; - case 5: - suffix = "q"; - break; - default: - return "?"; + case 1: + suffix = "K"; + break; + case 2: + suffix = "M"; + break; + case 3: + suffix = "B"; + break; + case 4: + suffix = "T"; + break; + case 5: + suffix = "q"; + break; + default: + return "?"; } const digits = ((ret.length + 2) % 3) + 1; let decimalNumber = ret.slice(digits, digits + 2); @@ -487,18 +487,18 @@ export function verifyLang(lang?: string): boolean { } switch (lang) { - case "es": - case "fr": - case "de": - case "it": - case "zh-CN": - case "zh-TW": - case "pt-BR": - case "ko": - case "ja": - return true; - default: - return false; + case "es": + case "fr": + case "de": + case "it": + case "zh-CN": + case "zh-TW": + case "pt-BR": + case "ko": + case "ja": + return true; + default: + return false; } } From e6c06d57be18ef893aa19f5efab81bb67379638f Mon Sep 17 00:00:00 2001 From: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com> Date: Sun, 20 Oct 2024 23:55:07 +0200 Subject: [PATCH 102/153] [P All][Bug] Various ME bugfixes (copy) (#4695) * Mystery Encounter bugfixes * more ME bug fixes * update allowed pokemon in ME requirements * some unit test cleanup and general tidying * fix null exception on isBattleMysteryEncounter * clean up tsdocs and fix pokemon hasAbility check * fix double battle crash in challenge mode with a single eligible pokemon * apply suggestions from PR#4619's code reviews * revert fix for Keldeo crashes + implement fix suggestion from PR #4619 * fix session migration for PokemonCustomData * prevent test failure due to keldeo fix --------- Co-authored-by: ImperialSympathizer --- public/images/items.json | 10 +-- public/images/items.png | Bin 58664 -> 58527 bytes public/images/items/black_sludge.png | Bin 1026 -> 285 bytes src/battle-scene.ts | 37 ++++++-- ...pokemon-data.ts => custom-pokemon-data.ts} | 9 +- .../an-offer-you-cant-refuse-encounter.ts | 4 +- .../encounters/bug-type-superfan-encounter.ts | 13 ++- .../encounters/clowning-around-encounter.ts | 28 +++--- .../encounters/dancing-lessons-encounter.ts | 2 +- .../encounters/fight-or-flight-encounter.ts | 2 +- .../encounters/part-timer-encounter.ts | 2 +- .../shady-vitamin-dealer-encounter.ts | 2 +- .../slumbering-snorlax-encounter.ts | 6 +- .../the-expert-pokemon-breeder-encounter.ts | 28 +++--- .../encounters/the-strong-stuff-encounter.ts | 4 +- .../encounters/uncommon-breed-encounter.ts | 2 +- .../encounters/weird-dream-encounter.ts | 8 +- .../mystery-encounter-requirements.ts | 35 +++++--- .../mystery-encounters/mystery-encounter.ts | 2 +- .../utils/encounter-phase-utils.ts | 10 +-- src/field/pokemon.ts | 80 ++++++++++++------ src/modifier/modifier-type.ts | 4 +- src/modifier/modifier.ts | 2 +- src/phases/encounter-phase.ts | 10 ++- src/phases/mystery-encounter-phases.ts | 2 +- src/system/pokemon-data.ts | 19 +++-- .../version_migration/version_converter.ts | 15 ++++ .../version_migration/versions/v1_1_0.ts | 32 +++++++ .../bug-type-superfan-encounter.test.ts | 7 +- .../clowning-around-encounter.test.ts | 16 ++-- .../the-strong-stuff-encounter.test.ts | 4 +- .../encounters/weird-dream-encounter.test.ts | 2 +- 32 files changed, 263 insertions(+), 134 deletions(-) rename src/data/{mystery-encounters/mystery-encounter-pokemon-data.ts => custom-pokemon-data.ts} (68%) create mode 100644 src/system/version_migration/versions/v1_1_0.ts diff --git a/public/images/items.json b/public/images/items.json index 779823d1293..05d021b6a06 100644 --- a/public/images/items.json +++ b/public/images/items.json @@ -3416,12 +3416,12 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 24, - "h": 24 + "w": 32, + "h": 32 }, "spriteSourceSize": { - "x": 1, - "y": 2, + "x": 5, + "y": 7, "w": 22, "h": 19 }, @@ -8415,6 +8415,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:934ea4080bad980d4fea720cc771f133:ed564bc47b79b15a763de57045178e88:110e074689c9edd2c54833ce2e4d9270$" + "smartupdate": "$TexturePacker:SmartUpdate:9ef21166268f7487fc9ff8d0f9b996e4:82658ac7bdd4c2b417e1f59168179262:110e074689c9edd2c54833ce2e4d9270$" } } diff --git a/public/images/items.png b/public/images/items.png index 5f032b30cfb048c2d0cf71ec1e6ad3f051d832c9..8aaa0281c0088a4b0ded764af22c3d5456ce167f 100644 GIT binary patch literal 58527 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 literal 58664 zcmV*IKxe;+P)eEYJmOHfSv^xDv^OF=z7#$;!jQa|^)+x^qh z(?mh?`uBf(eqUf?_A4yn#q{8Yb-RK(_nD51kB$BN#I@t;o~yUGi*ks@@cH5J`n_Im zZE@4Una}n8yvqCJ!e+S4*KU@t<@){jSy=tT^Ppdp^wh5A&rWWR_Vwtazm+20;Po$_2u#ke!$(TBD2{$GJ|ic_wpqCBXi z2FdS$vh1K9c)RJ|Kv#uschagP*0Y zoWMI;Y32IToN^V0UugZv5pUc4eq_?1kXp^R3|BpEFlNMaoNVQ!MQmvdpo|<-Nye$A zT*ZeXMD;(~Cwj*OK^xwLo+5`&X7H_NSce}QEP=I#S z)wc1~7a}+xXBJnc<9G4$2C%3z}F!<~Kqn&?QZH1X8h4sf9ld~)>77d+IGz=p4fYlcj79vL=C{E~G`dX9GvQ7mB?p`%%0000AbW%=J0RR90 zd;kCbC7a7)pnCuS010qNS#tmY4#WTe4#WYKD-Ig~03ZNKL_t(|+U&gvd=*u;@1JvW zccpKI%+m=R2!sq^7$On~7@LqV6U@+`Kp;xO7%(8iRU(Rf@&W>y76L;01~q^X1Ohl9 zjev~^3W%Tx7g~sd3Q?clwiT83{psPq)*h<%uBwy7sqcOF^VZ35QkCJPzV%yc?X_3! z^7H$D_J6DC`VC*Zn)rJwMhKxF@RKmF*BdCFIR1qE&HPui@;bk7Vc)fu{=XmhbL7U4 z_?^E0nByKdHRFlf+-iMh{+_SDPP?Hy{(+`Vx?fX6OaCwX$5K*;6S5;E#Xr(}-@?ijGxP=JyYicdos9CvVVFmiIklQ1hUzneF|e(P)dpV#yA50y0ekwYc< zO|9VCF&y4@>;PUxMCJt_BI$de11>P*yZy+0gDYB=*!NF#c*56lzgAUP<@1EkUY70i z=T`Mz!$9ma5}$z>_J|!At5obF(L3V#N?Hi7Z!%J@&?#> z`Q6<5wZuz2(@XM84sB{GDLHhgsYPI92fzYcJN%Q93<80mDuxO^1lo8Nsldoi;C0VE z*PW2*I{usAF9lvUU~J#DdBCg6d7s`9cxC(exf8%^mGizEJ%QJ1AHVZy;N<{JKYaMZ zHETXRd{}Se9yce2784sQ=_@a6z<^++=ESS1d28d>;Qbi9>+E+nZ8~)M5ZL8I&CNGk ziUA}dg32p9+mx3VQAGywcWOvs|8*V<%_H;#n6B47G3SXV=IEBA zR|Tf)d#bXks}c9?bFDllE2y{gZuReh}cR)gt!+3NGFSD&};+Y6@a z?;);uJCwzxhcmzqmoC=*boq$++T#XDu~b*v!6sSv>oXaT1u?zp4wi4Jq-sQLn0z^N)LYfn{SR+g$SpcMu$DJ%?m zg{k@iTEJ=5lqs`U_3qP0)fdnLPOBf@UbcGC`SYs2fEIAt`}W(wD_(Vo1dj|ETUuIL z4ezB3;sW8LuI?$d>;WvHu}oTAW3dJ=kX4t7U|quUth{vn&>{4BbLQk9BIN6@x0V?% zno|RPyhRpU9W~C~@Tn`IdwhTZ4s+#-5di{S&(E6}XZ!lyw zdqJP^%FmJQ=NEw?v$93!BX26d^X+&vWcFTs{E9gF$9kT=Q`gt589R3S-5*zGWGpxl zxZCAgtjl{csF`~ZODv-m!-2&nnY<`20A}T-*VaN>v9sh5W*0ZFzqR$I@gi>|-`INN zMpIKwO$`8Re(>hkC39+PbszGQq8FDJrW|O9OXbC~c|v4)-E;l?b&wd?_4JCt_uYrU z^d3FtVAw)rb+>eB;_*Y^%EGXP$o6FY^;=~hlDhwXV1~SEJj%Wg$M(Ung~(?2`A+@0 zhaWzVVGEI!oiDqo?0frd$_kOa7ysutWnWB2#+_dOPd-@#|8B_GPu6_02K*k%$lSAF zK}N<{uepcuij83w0#8GQynt68@QPgF$ZJM^e#wyL%lSa8r1^4l+6|#QP*&X#fK^vl z$B=C-$*(PGa+cQ)CtgfpUdT5TUZg+R0x~j8me=*`>E{vGbt

?z@lBAUfj?z?JaC z6Z@X1+qbp}g(i;DwG$YjJtfp7?thZS=R+v1=2S_c4Ihr&fJD36<0RmQj^2L@4gC*h(KjAc?AML71x3V zqZce7oEO_cOZ9Nl2K}Eun5s-3u>Z&T+>b;=t=wf6e+U zyzM%kb-b_;bB?SmT~0TE*$(3-`aQoecYSitp3Z-`UIxsx&e zgx7oeG;a5ln|s_mF^mbN?l30FAj5c}J(p+A4@n6ofg3j-La&%_y1SbMFgjsvYiBqr^<|Nd%k-K?4#Pgpi37AEZji5)+F zaQ5uuK&v+rllF}QS~u?neF3dSNKD%I-g{^N{O3#Wy?5Zvy^NSaCFD-8r~KoOk;*4y zfy!=kPXO@pP+p&SPK!Nmk;;d1Y$h1Y4=J$cg01bd}~ zW}1q->h!w0rkb0e!c9#UTqzuvIaUVm_f?>V0*gSI1!DT4;Oe!Y*XS?-jNFI3kQO>b z^oDsCE(|A1N>ukm=N?bgC4gTa5p2|`)s)zFW#6Cw&!u03OMG)L#^@5!H|t?ITCSn) z5P;n;@4I#oUE+7EgmaYl-Plf3#8EW6Kd+9P^|$xFjWLYIGIQJvSVE(dAO-vow3Heb zXV$WCPez83UG(# z(=p#jhxp})Ych_)>IhYsT9~4FBJjHQ*T1s-Ls!#!U{wR25u=$>n9?_I#!=XJbnLuJ zElla>&*Lbpj8KKCg(=7r-^QFnrwWq_Q#$FHRKOyD|7msLhI=wHAgc&HZR~N!gor#I z2VgNFp%NIZMCIiTz#4}I7ljoVsOxbzZ|=+Acjz+rcTFI*Lzf|TrSLy+^R2I&w>A&Y zzijeCTwp1XY9uMR;DOm8sO&q`nwrb^2W3T|zBZ2)0jz=$aEIU!@vUO;&f!*G$O!Wc z8p{%9OxBfAb0G~|7|W2Eu8f+O-H%}lV;M5jl~FTz!6`bgb{yQSE2HK`s~^4>_l-i6 z>l}2{jCqC*#NK@K-`{cVFD+ymx`GyXAmEVaeYio1IT|RUuU*|6U=GVv0x^Nt zXkjCeN=<#~kZgqE12QRMjK^?DHkumd@;j|nMEwa7wRBzAbxWB;L@kGXps6rl`&Nml zg?rS(r4GFAz2RfuUJen|qWQ{^6N1X+E( zwHbK92wEx2i`Z49@`|K24J3w+(ZY+2q`>UB7%~8sZo@@+`I`JfUf2A5^YS?<0=#_w z9PqmF11D3A0>0k1Jz|DZnW^Nsf`SCEpdbNEzmb-bvKE2qpfx!1b#=pQZb)-qB{bDP zbZF!AJDaz@1*1vnUy-6fZ`2OmbQYzE1uLI(lcWuu0spg&QZji-!2I;OwKa8X*QTrmST$?w(n!j1 z;ReW|+WZnMDeioWq5}KctOXO47I?x?di-s?yqp*-py92ay#LBRAy)H3>aok)s&s zxJyi@82SQj6$SiATn#*n~KGG&{ia`Hzm+fUQPnj z0ToIM^_3z|N#eZNrY6WRlA9m=y7}hKX1T?KU`7LSX~}ib*cB<~^Tg*55Xl^IUEHi1 zKX9(9BZaaZ5!>5^M#&Z`wolERC0nKnjLe#){(0A9FOQJzW&Zu7*FuNa=_>8J10KRk z`%+#c$sD%8IWFhY-Uu&#NNGDSN~{iW>3Us?ZtIUid^eiQAkVm|1X*-#0j&laDl_S& zxP8*P!mV9udb-m$xi(L^2oGVKr-@|X5ccwKOkQ?iATJY^;6;)qB#W}Zgb5@mS>hF#0=y8H0<0BYIO!7@ zh#e+rH`<&Jk)JawAXnIk3@kNg=+Ja~dI<6|VM)9|UM4Jw7s$(mCGi4znXqJDvoHzT zmz%q9hVpNLyi8asF9%?*($c;PuN11UFM9{# z4O-t=dgH$+N|VvR%M{qq^mf*B!L@nw6ouD!{P-U^lBMw4#CKS)SPY?WXF#G#BRp1u0#fJ?L1OtB#YFg0dHv=Ak)QNpz_hwL;yZk8bjgmz zh+z`1ZY7}5l7BE-DbBpwk|+pOxq}A`7?6ikF=1{~X%mv9ziR*eF`5Rz1`;c-M4$!w zN=(d9cYR^d61*(_&>p@xFI)KHylml%^Rk66!yi&y)6sIL&)VlRd_BN2bWLNtutaJA zvxl#ZF6)suae)I&NkM0*l`wO{MLCc1)$;5lE2+dts3sQ{|5EwA)#$s5CtqFSd>eZu0S$H9e35&>7V?PrOoAEc%NEn**i{j%YU?3)4Z z5K%$Wk!$G7clfHKlorkuMp_JCcyO?;!D1Mhzy%hV(hYqf!0Oh`0hb?Hjok?9ROxL` zJOQB2QlrFf)6Et*DksrrikG$w5Y6}Ch^^^Fa`FTQi~y~Apf#|Z$hZ=tIW7lYt<F|ZwJaA&#nvpvre;;WneED&gxKQw7FS&*AMXMUd(MT3g14~K*dGzX5V$0?M7j}>+ zxH{a?jnayb=bz4Y>!8aaEH7B}nFi-!L~|Rjz~a&%PfcbFN%_E-`f{*(;}u$PMgPFc z$S)keAlcXlNg)agaLvetgq~Fqox_)jivcsn)-tahO86pD5ekl+7%>Mzt`Qih1!@`w zFxvVjA5s*TC3GRKc*+SrFkWVFA59PCK2vEFX4Mxla3Qeupsw{MuEY$6D^W}QF}PG- z7kz}UDj(siosaM})d*i?I^~o<14ha)@|uCJsT8!-c#w8oUw}UXBh>^^8jRx;W*cWB97ds&Wip?ZVqRhOepprkddk zY!*Z?YWe&2?VCOWLzoi29{bH>X82mjaV?Z;h^D-D(1#Mf%#v?XvRR-HEWyUCufQeJ z_+<%Uq>Qi((FkGRuN@bpnGO-v)vfcmVG1vZS=eWqXYDfuSx-n#njm6m(gYLN>Uzu& z*VnVZgSa4(r}DzoFi{h{D3Y#SyI!&eE;<-RBNlmGqz^NENw82~+pO-e9etSLOM->^ z5~D9Bvgsf&&>6OfvDaeC>oNK;!WR*^W-7eyQf;HGF9r-UdZ~Pf@v8)oX{#WPsZ$yB z>YXwedX1tDkVb3z>j#b=J=Q@a9NoGdJ$m4Ec_8LC#$A>^Q$h(%fImI~{2)n|aA_ZW zfZ?nDgAX)fYNa9yyJmFaM#Ao0V~wlwP33=_>$e6QpQ{xc=|~ z{0;c{fu>~iS|Zh0qQQmoiXQ~L5ZEPwv44L6_VK}9+1U)3>$};CeJ8@#wkH+aCc;-* zvSMi>d^OZ4)}Y{;p1Y6Qbd$iA2NW~2Lw5DrOeuO{{7O;HGFqNM&Eot)QZzkOapgxu zrnbk35tuBFzJ+zlzafMKYZ{9 zP5T3URC$5CC@v#>kxR&H5C8*-UAW|%*TwHt6TGUnsU~=}OH)non%bb6h1U#1W=x+h z>FcpAsy$$tjQ#<<YVyadA1=`g+fbKd9D5fUe&tV!V73=i4rb95|8SN zzr=VEyS(P!eK$=xd>x6OYr9khS7(=7Bk)T!-jQI6D>oq_!DpRU@9^fE9dzeTIHS*0 zP?6o_ju6EqGCRQCf-8=nHehu7d_)45PsK*0Ey|R~Y5hYwrKN z<~IkwDEmqhoXc_9csmDUENv~o`c?t||92y>UlS+f{Attt9b6d8@#P5r|!bb8~ZtE69}7RXQcehD9Ij-yaYV z6q0K8AKrQ^jF@q11tn%SN)&*JqeJL`HzA>mmDjMNI8xS*9=(O}y7l{>o8I2rSz0Z} zcV94{DkaKL*#L&8%OCzgY^8VQySiSY0;44k3QX{tJC|xpieJA{d68QfC-K=x7Us@X zKKrSiwM8pd*ocwD!DBAex1up(bk$H?0BrbhQ)Ut`xgV5l*Z{yj*dG)UB7l+GZzp#r zC51N@9_;}BF+S+1-j=>a z?h2D9_$>dma?UbdLSLBL8%Ld)5x;)*D-{^I#h?CxP(spJIgAO7%=Oakl>{%?RE0)X zpcPRgGOmq-FO08G9q;s-#c2k)QikB=Ww?e9_YTix#E9At+9I#J?+%Z`dCR1z@Uk+- z3vr!B=X1Ki0OsT9>H0AodA)h`80VD`^hSKi(avq+g|8EYJ>kb@1Z0rJiw(mDbya|6 z&*kwez~uF>{2$6`=N~#RHgw*+v@{|K4z_zMPsdiCK26VFLuiCBTKHjwBr!5(%$UK0 zFXYsZPaU6wrf4rCm03ncIro{aPJ_MP;fxn`jP`y|{uScd0Js7Wm#8O^+mn-$>92&( zLSCm47#O(3)2$s$TyP9hjW>_MhYqyLao|`_y^Vdr#1ji(kL`m8LOT0RiG?hx&(t#(>tmG$k1x>a7Hg0j<*&(soK~-aM)=1m>AX zBwT|pl;_l^rmh4VpCgYX|j9{mqYyD{Idpkhrdb7g|FM!U@fdfN2+t7tYziBH zAuqsWhA-|A=fOb)CkPtzZ2rA@ zuknfC3=lzLM8}9YOPXV-rE@KYT+7C+Zz4rqVy<}W~iV+jQfLC_* zvSoORa$ZeMGiT1!G#|w1SQ+b4$Bybh_(D%dcj&`Ul3{1K#o^%sUKCh7_(6P%AKAYZ zMh$uK@Dm`2{mZ{{T%jN@^oN*t_+!?=|3oFo3;iMH9bU{j*ygy!i#ak77aZI;8ugIZ zMg+DI@{RH1L0{u@$`xK#T&~=O$O{<{?zC{>LYJSffI7Az- zro23Ql(d;Xfa!YAV_-e?AMW4=J0*v~!4VOiI@#OghY5ihyci|M%M3QzhKcMhfE&j} z<>lueJI^1Fls`lt%*M0ST(UKqZHFYLr=EgWvY+RtnpBUm#CVCe>nUxZM1$cZIGO7FzWoj2nQo#;L@ z!v`>@wJBOt5iRu(9_-L19~`W~@Bx735udn(Lu8aFIqAGMXi1~qe?eNtcR;d{M&-q0 znLiU4fn=kC%8SP`FFS)5FZRTNzyQ=ds;xN23veYS<`BlKemqF$$x+7RRB?5El*tC@+#Ye`S3lVZ0LOPc(VK!7eX%;C0tsJ9g{~1rfT6sAp5V0OAs?oo{som z`q?g}CY^$5CnfNT=(JG*X6MyfA}MeBS89egoEIBQ(+w~<`u@xxf;T)3+cDkn;&Ou( zUhWU)E%tcgfEZu{Ud%P(k=lq^Va`SZSzu~?4%HXW3{o+PxAAgyLR>p?Y5c;GvtvJ~ zI3~p4#o`y>VFIJXsJy}%uceIFQqBue^`+2!93O`ZhVb_18OyEZk04YQhn-w*p6?zzcu@u6cr2 z662La&>xN;54`GASLWnm0ItCR03ZNKL_t&lE{cfaN=~ccmB;lpv&jc7b_t4w7?A44Xe|p}+-or< zhMO3#{Js1{kJ@IjqV7+r1UBSls}_ z6fuWYIS|!i%F6@pFbRSfOE+?I>IoU21HAl5IgXbZF3Ky_9>1`<5dg3RuVy1bl==%% zYHR>z;1c665L6N|>QO*1it~a2bL>(aE^~jFM;}dnwI(N8cufPn5@mo)jJd&O6jaca1Zvnlf`SXh|jb>?YlX}0-`RAiKf zxcFN2Lm97BWK@B;#CBFwB}j}x16(LBh9xHl(s;l{vjJAeXbBfqHzZyQ9eEiQUp||{ z#$SRLAc9C2j;@n_!Sln@Sl>9EZRkq?vnPmdy2u`Dfr3wN85f5IHWjTO-$FRAj)T!H zg3Kr_rnOEH5sthF(PrMq-fXwIS#b60`|rO`$6WRUR1E)ev6WX^no{sbePIB@innEZ zg%~k&VvFY`C5hq&R(r8z2)Kw+WCdPWGj!s$FdzVg)rpP2ngN%~)(t%R5(5r^^NRotZta&WezOQ0hl|FU*|0}wUJn9S)3uz8aow09&TF2O!i`T%OdLO+q*??Iyc}^cV2F$jz?w~7ERU!Cph-&j3Ng#`Eakv{Ncu5c zAb!pme-WV}W^NlWx1uiiBm?WUo9t%Iur<38SPI=_6iPRe!638zG18bBcrjpz3wY%b zD=n25q02ZhUTA_>P*CA~m&=tFl#ww%s5sr#S~}Uz-?`4x&Px=^i|3i*V!*JjG2WWw z0x!*8jN&=R!T@u)EO_zKJdrbcgI8**5)}Ycaya#i=0-N&6kFU)f|nn}Fa?;K#V)q+ zD0cD65v&(RCMq#Ti_lGM-(W0l5YQKmVK4aX&Z)dS(eU3Xf{2U>K+%u%d&Od}e7RoP#05lY z0BmI;$5p8Cx~8{s-v5B@|9o?P9k%usH`aTNdvlmE%*|2_!7I-Pua-(ywgO_OPI**Y z5fQ}9aFbZQMh+^5yi61Fnm-?a&0kr_aLt$h$!j^f?_)t%@3S2db-Q$r8r>{*I~+gD zZ)xc~ar*vl-MTrv#KD8_b4m3`QFCPjrC_2|oXjr_VD3D64f(JH%8L$~-9J4d&=j$g z)UKrrinup);3aUaTnPz1#ILk8ifd(|k#OjGj?cSIx}qY3f}*03OiSDKuv7bxr?s;1MEUPg}^m`-STf13Lw;oy1qY(9jnh zchP*qnjo4z5kE9!wisrOrLV2Les8L4ep*m^8fYv%ZKVrwiG)KhENmH<12F4$-Q!74 zN<&S>dFbcPUAi1lRtlWEP}Anll`owHxc3M=YsG>*{S9-eRc1Sr~ zuDE2c%a!Db1Ai#`nd!P~VRIW7HZGh?anb&fYyL~Vz2@tbW0?jhjN)Rv$dG5A8AE|t z1%^>;Fg_sZsJn0HV5%?R1%|NpTX`WaRG2KVVL*(H!hqH=E-y?nLVy@GELpY}h4wUo zD>62%C1P+)JROrgp0vsz49tb1VxDj%RTqt4PPmx6b#-69{G*RNkwFlnAPI~zab3Bx za;1GcCWcALm{TVuCwV;HwIZD-k&);O8?{DM*FuKNPyhDYZ*?EBYY;fY<;zFBH)#2w zL8iRI!YD8*ux@JnLO%%h8WR}J5Xp-D4?Tpy;C%(L;lfXyChzxY&P$ z!>*c|_b}ObPsTMQi~^hH6v12|D+pV!fwHhun1-)6ZhPY)l-T|iZ`gRz!*1|GU{qD~ zidR$`$Hn!PdUpBp=2W3Cpmpzg#1+Ey6?yOZ^Y{7y_Wjzm{*!>#f+L>fj-ie>*(UPJ zw|vFUF_z1>%}>B9L*b=g%Mo9@K4Pc0C(5JLdt588&?YtOb_NVsCE*zrcc9MT<$*Ce z`oTuCJ4^p|$+yF}tNu6-OD=6rZM}j0?gz!lYg3nSUc`=X3dC@PW_|?36%9Pc+l=yWL zG!+XE6qoP#rOzqq*fEV|VcyELv=u9^skB~wHQEHm7Q-F$<%17?*-}I-&VYQL-O*V8 zLdF%;J*fNg?t?yB?(vh=btNc0DE&(M{FPUf?Nnec9D#MgTja$VyhtR@`T{SHEPTl3 zrF=t&p|co^k?f9Oz^i7toM8@m2Gli1xI-&2)Ys1YCQdZVh?LhOU?wj?i&{zw@l$vu z2wn*$FAA)E>aPF&zjvj!H*j%c=oe46K+8{m4S8{3m1&-|BS)nBq9LtUUkx{SkujW> zBQC>{K|Y_6k)D1{$IPR!_?o1yAkf$HK_7MZNZ*d?3IcsynZGh!-Yy1)2fB1QaDYf- zL=qVt6&)2BmF9_5s@Qscd&uYcdGf6lS9ZteY6i*QPo9C;#oXahQTbI$9GGWdPVbU< zJwi?JB3xO7&~;acT9Fcn=o7On4Bwp^lDcabe6V&!oNU1pa(PW!v0?=POItB=aeMEP zZ7a8J(`9W%M@s@DUw%nx5eHl@S44yX?29kbGw!@IJso)&_<xI}cvNplAM@v{ z+r>+)I{*eFWnEGiF1H>@c}d9-C(-m*{OuHWNB$mi^@QbK~4RB>5?tELV~rgIV`r^1mHvi87HnoUe zEL>Tcc4S*B;zC}atsXskOpFFxJtToqUX2enHa_^}7EvcoGnUckS3oNLxE6jui~?JU>YDoGaq9O8^6D|MaNxf}zh!MAfSdTChnKYlZw#T?0b~LVY{a5w3Zw{Qj`Nhqa)dhWbu(f)X zljCNeSN*gkz?Kp_28=kWYgy(pev!v={` z5L*#bg}k18Qe^X_2S{roq#DXPQezq$8{Zl8&Q`_?Jz=MaV2r@DNw||FFrWoCZtYqX z4bTExb?%(H8EApMID584jKs&s2gMU>^dX;r{<(L1%ZuC;ZgJY*RJygP4bf5V=54sY zfwbA7s=P8K;~r7^%?2-SK6#O8y)??pqOc>F$sb>04!(fbM92`;3>Z*>y6n7yX`3+6 za>=xM(Dkw;VvJV*bJWbujMiqhgsdP&;wOUz?S%s}IX)<8@?`${KOed9ymxy`z{sxt zSq{6KhIEW*ax8dz1Lbq_E#u5+m^JJEhK3)L`Z@D5##bgc!OOta6>w!Et^-7t*O+P3 z)Y}nkJ97N^adWJU9?`Pumz@^{77=9dve07sTDw+wMNW(9>)biv6*(=Yui3M?S0sBU zPiDYgpS%~00|Rv}T(}+n>+Qb1A}Q=&xW~S;skCEhqk~J-1HEEsfWH#}@oqlAHLD@5 zfwa9t$;u07JQZF{TPCh9xPm@D=uE66uiXa@u#|&LyL_4Anr0blp4hgnz1+D+UVYWR zZh(zf1idUN2t$`yUjkvlU|=Gkf@k9pTMrz}fUx@a|NZX)6+Byo*!sifKoAz*!~;;l zvlkKD=0KCzWJ=2bMm|4(emgE8UKSn|9_3sh*j3m+t59``coF1~(vA_OvP;xOT|dy1 z7Dxx36YrQv8VDR@dh}+^DhLk`SAenNw{e>zpM?p=i`~w~%1bJ+bQvI&?r> z*_2npzFGhPhWsIu)OIw0D((8qYmbdCExS-T)n zA`&h78XF^qlt!2?QBO<5COIr52YS6a#kKY|;Pu*C3XC-1uoHkO>*&b0IgA86BVkBU!k#{gy3R zdjOZIuO^Tc2y1IZBj7Uig%h=itZsr13PWCV=G;L8?j4L5tr8T-!02jygb*t)5?K@( zsRcw53$LJ*lpq@~Nne#ircXy;@Lq|3aR#nuN_iRa3xEv)bq)D3xctag&da!T!ligZ zlh-&PX3{cvtpZ{uErZvKK+L2ic%6OyPw{6>V2szO?KlY9&Kr!Pm0Pew;Of663&$W? zyLJ&daCO`oQHl~9GDLERKnZ|(JasxNC6hVYoIAjTKcu`sU_FV9OL=18TE8APMH;{W zP;G5W3V*BhS4teCM~mU?$w?=tqr`?(o~)#Q5-Z!;EZyMo%a079>XOq#k5U$QDw#;Y zke7Mogv&+?wvC%e8BN4EHg253Yt?4TXfwvKRjUkMFHWJ1@ZLC#mf!`rg5v*_^}*`b zOobO{yd1uB{d$>KW+wPH{z2kJ>amTJpKd27B~D_-dF|d!wI#=|V`nf!9CGHE z@drJ>{`IdtQnMkLJO){_=I=+W9rg~BUP=LDE#)>=CoLT7&x2q znlfbyr^WI^;58X|0Wiwz?CTHre(#^MW>Q|Szb;-9UAhEsB}a(YE03Ho)1bI^sk|W5pty!ucusm&`9KkZFxN2#7DB(JB;?qx& z7~#AQfeBs)uy%(HO6>Z>Km?e zjF+Xp5jdOilJ5HxKRN495V^8GpuB{})f4V9M;31X5b z5M81)>I7h>Z?Ou@&nh(H@c^)Zfh3^Z#tVf-Ek)w>DbPYY@hRtZh?>Exx|%yg7QcX3 z*S%dett)(FygVqb5z7TI(&u+z2+ZVFtRXN*UM;P(=)%0ip?-*YheQ1k^A4qcNaD+~ zvL>JXz#=c<1Ic!|(t)S`mR){NFkdEttD#|&PyK^a>qJq9iWMg>NW z969&*zn{Yw?IbX_ThrVvYV4=f=Sh5g*#{rYoT)@FGsloB9q`2-2who)dv@WyQ_S43 zsS!d~L}}xYtzbhGUL={}!XW08mjKpNy@tdXFB4#du#>A{y~jAO-!fyoezzQs&T@&@?*%X$FQA3?%L1dfr&DpEz``Nb zKwMGYQDwA~oov~%r$5W%)!4PQu_Mdll|(+y#D#S!g9NAxfNj_y&-Ws+aMec|Kad9g z(1Yp%cQ~*}sc&=+qMU$RP-oL4lAiVTpMF|jPZf*xsFO6CXY~!?538l}Jfccq0;3f` zE3dtK-=@5nKm7ZVBWn;CyvDy@QxC= z{Kziwhz`7lfJe0Q!j?vlr>@S%>$N!=N^H(+E!5-{UVtlL;Ch6$zT8sp1$`kW|IUiO z@Ryx9VP3y%RC~q!BA7|z->zqI-H446d0 zCohb3lODJ50&VqcxX`e#AMqV4{K)G-%f}=$t#laqJcO=2dx*oV7Z7W*$*W73I{U>P zq~WzY=FFLM$7?OkdCBOgydW)H55O$E&<$dq;lGJFMjwTA+x=VZKBg-km9AZ-h1wy- zFzzt2oCYuRCH)aZZ(qL#<789rCF5&G zUfw0)!Y_9@O)EDw4cThrRc99$o2$fv)N60GajZ$`&8yd^rGdaaZRSOmz3_v^vUY@W zf^FSNfY_Q4>p^p$JbxZ=odk`^xU~7suf$#SIEK|Chw?A`WGuB$49RA2BW&g2eE11((5#SP~ESq<;MX*Cf!GTjXI~`&~%c*R|mSrW+S% z!a>UJ5%-cQD^rI*6%{>u_N?&q#4#p$G3G_5ba6(^3};~8<1fDW;_*Pn&52e|`8MXH zckez2O?P*9hDK@0N3V_THVhU2AbPUNlqqWNcTVVw@gld~2Ecy%QHJ^_d4?T!)k+4p z7QCQYZbkKQB8*BNHvbSNhd}FdOOtQ!?rW`ugbf^O;7x zH)|;Mjl|ur93O5-EMaQ16B83dzroiOT9!b?Un1rL0uu?6wsDIN!)-20T#O@4C<51z zYb_OX?@@H%K3n*Qv%Lt%uTidn$2C1>Cp3>=Q1lRjUOzEA%ScvQxS+F88@5$Fs9#)v zIN!^KsU9G&>6Pq$mJ=YV^kO_O>OjT`4FZBMzo@F7~pSYje`2dG@*hDHt65no zdWg(JJ!xMyZw8cpn;Y%UCzdj&dZTD)IZWIJeJ8OJCRqH@cB1Fu*40|n9EUH*ka0Wk zZaa>|*oJw>WhE6%d%A2@?=}>3s}y!?0aps>bwv#B5j#=5v`^1mZ*)5_=spGpyif+K zz6KXh;0h;Orh8$7(Utbj&0$U`qoRLSnLG*2V{%i0K$a#b4=S4ZCurv$Dx87?;w%Wt zw~)L3hSo0#k}Uo_3_i=7T%J}M>DfuJ`o_{ z4rXYayd~|1s_BWdIvH$RYdZU4NUjov6|NkB!av|jiryHSZJdL;%ZG_?3#`)dpVb{b zsoqlNa{ghnK^)C)#aDOme_Vi6-2koX!<{6MY54rKl*3ed1jfQ#8*TuO)mJnEbBrUx zAWGJ+Y+uJ=gc|fDr1w?DA_3l}a94n{fRU1l{2l#p38TO-9lU4jUvk4Ec9^tnGw(Fqo!pFNKX zXzq6|YR*plqm~%+WNABIc|R9x9F+w}kf2hhmm#oXZ+zN-;-E=_7=cb1)iC%^=U~K( zjfHPZIr(?`r44)x@;V3?A_Ev+?JW7t-Yi9 z0}cPX(;hE*B|yC8Z?K?rXoQ&38{rJ-t0I%nnRqqIPSvliCmgmaD1u0+ZsY4xg~05M zc4#?dAaSqE6*MA7{)MP_XM&7w;neSdg&OP!1`3&mc(CM=yckBO{^|bbpt9klJi2~H z>(#J}y*lgsM9rjk$|{XKbLOM`I2l9AV@aQc%;oxEA$V_TDZ!UG*F|VplEad4Wgyks zd+U+_KZ~{CyYkbMXUWz2Z%bfJJ*GW;1V%XVZx(i)h52Z*;@Yyd0mfMz!d(0!T9}Sb<3A@S1zsqvRB=r;OQfGKBvON@q~4l)v-0sZa>Vj|pt(RS z^}P2~xBC3x`KOQ8%kP%I zVfIBCNk6{?etFSrTs}3z2*b~Bu?KK5m{heah^BmlM6qIhX`ef9=Av;zF zZ_{hQW^PnEeN;|z@;RdFr4cfxmfIvHoT&Jb>o_;ux~1fy`=*yV`N~e=(E)U-kqh zK2*OS+W6_oedU6Kfy1X+`hFf$H^HT2!vq{Y`R5Rw{rP%`XA@h({Fh?tD|YsA-+9GC z(LV?(YG!s?I^Z8QwyQIK{^R4CACWch89X9^Xe#A75w2^1iMk}8kA+@a6g2BC9AS9> z!67WFiRTRs&*>E$!qWnK6gS5`?U~aSI!%HDqFR9r-U48*Mm*rry?hFJ)-DE@d!dU< zDI(SvoJG|cyg^b4ql>k^;eP9VNoXqskP4+c>5XuB=6Ar9K`|=KPrf}{ESNvG{dR;C z5I(B7Vz0@Nv38qToJKI4dk2(iL|_BhkD<+)=Gs^BA{FK-MWt#r@se zncuMe@aO5qA#B4FwA;N^JM6N92{#BBm`yPJv%z;bZrXL`j~?{1?svwnJKyJz7dl^; zU-}89=ArTSZt#Sgcrs$ca>ahL%tpMFK=Ow;p)*B2>6EsDN8Fi#zUfBQpBurwfijo) z!Cns%*9^O#`g%0Po_8JmsxEXLUiHxEgix=`}hx0vxAu z-*0Tg-5%qlOT;{+w{oqeJS+O4AwB+Fy#06twDf}{*jpOv0Zxih`=-Xo+vchrjm7T9 z%{fmmP<2@Wv%a>r;%UgTIU!zLOttNk%ffE<_7I9un%O$M&XKdDm=t6_OMaRs;PLf_ zW-@1ny8Zk6$=JvJo--_Sv?D48S&z=miUrfBF|@Gu3k6eO?!gLsdlDn-?GLrJ^W_~l zRx^)ra^4DvLv@ps&uw3M)sC~x5M<8h_;4DK3%8_xU-8)J39tii>DE)NltTF4d+3pX z&%}&K`Xb)IO3n4=$5GcuIQC8?2w-HeBsx0z{+Wp>qxl8l%vyWuX{bUJRq69*PM{6S z2eg*sr1W&DKlmT`k`SBrVC~k)JqjKO#&ZUwt9G+HOcC<|glT8@V{^{xhwd&)cPlSr z28N3Bbg_lN`x`gkyoGueRe(`xY^ON?=3^Xdke>gC{jDE2C*M7MnSGgAqm8RcKBn5{ zzdOw8F?GlLeCkg&}*F%m-U*G%aX&LAB%I1 z-CD~tR7#;LECYY0oNDB-suPpgtN_(q@jj>?@&=Wv@A_N3cXI`3#rn#(y8Q`d_02PY z-SiSZMS=T_)RN?cDff+#?hj0baZahMVI#KOc8Jj~MN zK|wQJ6p|V=WId>As-TFpDP}|kd8B;Cu!!t#(o+AR4vVCMGUnx!1hEhYIhH5ZMTRsI z!@~`Yjs2p6UtZ6ZGBItdqsx|8H7yr5ylk7sXQR@MzzAugQ@4q%IpKz79 zK#iDZ5|TIX*qC556fom?n+T%>)Xw7(0}r!U?uqtKdd4S?kIR@Ta<=R-RB+#rlNaVn zw2Th7DIg{|`QB)AINZ|iV&DozeBd_12V?RN)Qxys9T&lq)RW`*D?xjEmK8^MM2Av; zj4ygzDd<*3(10`m7Ir>iK&5cwo3jJJRKq^q%=oy38=z+nFh)~b#}IhJo0^0Y#5%TR zZ+<2y<^HQd(-AKwK^Jov#MLlwVDeoHEFmE;k6=>WQ4SRoK6-Bs#uvF)7~me;$)bYN zD1z-qaB-72+{Jr~s4g=O3BVBf&btF`45(5R@2`d2L3#_*?!kC0kZ`D`=K-d`EMjwn zuKcZ=K!in)e`>dq#i+sSS_%FL?!suG+Dhr`Vxg}nxeq@JhpcS72Fr!J<>K!`6DX)20?VQAs zM|5z+Z`$IpX&>`z4gAM?JV(hl!h%kIAo`n>`>g`7Dyu(x{ATgFHzB_ zGMHh#aku_K)*J5%Bkg>237fXTN&ZXIkkO>Pfx2`)@_rmEZ!r1FXCc?65U~{z0 zjaQo$jzZ=~gdvv~OBQbdvMGZn#s zA0IeO2bVPV$dw32a?#&8WmzW2P?zjHxr(5w(pBQ`E6B-&PLG8`etSWVN;k+u( z-{MnwLLSCmEC2pA4zMu_{?g0jAOZ5%xwM5YRH}oVg?8=nU%!MN(PaR$fJ1D0N?2e| zO&Dh*+0I1}>YIk9Ch;h2b1kqG+(qbhqUKBGOmf=?XNJu6k(<##`4wo=-#|U%ySyVaIbUk+MkmyZgKjH!rSjpNc>@);xL&~4N)?y#$Hm?Kt2 z`1)N#J3NrO0%}xWhGoLE7kKpZCg8IYJ@l5$P^*6i#Jx5z33D(&!!fN3Ml|}HhQUmq zgrvOJWTw_>GjP1#;VmW!M8UrizZ=#!GBcBU@i9Q&`(^pqDm!UJUD20~pMLxaz|~+} zEefh7LoRKxseI^uAoJJ3Zt(L2N6EY2cjGjnC8aK2aVN_HVQLsEgYvx?7*h;-5hPdXWXuaLV>Vu`6~tRz+W~tcF=!i2;n<;j6qtNpSz9)t?RC^-0*Si z7!l4;RwJd0u2tpBP6ek^oqNN?B*U`xpImT8s1_BMHnhQj6Pb?N6>J<%RGEX@pV&|X zMm5l5NwgYNe7qlXO~PF{WNq0Yyfh-XkQAEhlINF@7d22U@bxtigbV)E*l2-56?$wY zm`XLiZSDTs_)ucTPx)lIf!n8}Oj6Ku1C|s2SnEJ*_FwHYjEMbp(|rHk=eHo%LwFrr zGQFa+iF|1WzOO1M6tK_#wsIA#kf}kb;ugiq#MA@V1tvutfA71)aH`4MGw>0_j6{w$^K7L1J9FA1U|A&o3Ir z{uNerI30BVE9a;rB%yUUJDtu&+KfuWT4LIwkJr5P*ZrGUG@cB?t-JSJZ*uOnu}4NA z)Z`JoC%g*a5d3!Jq7YMYxrKUryK1<6e@w_#nF0sg_=^+Nx#;j z+QYT2VD_sY$;CHfwM z14crld{{;Gz*PmLw6(ELnD`rN+^;=^AxwN$h7CJ`ZnN}=nC9bnxe*MNb#CN)_>E1o z)rrIW#`{Ihblc6xVj6L;t{CFbxe&G(W;dj?Aw z0%rG`-P>w;ts8p>d<%(!LIW(Odw$nnz5-SZ=5i6Sdu&sLBrC9-OwQfqH#{b&eRIdU zYi|A^O^z`4GwN$TAv-G-On{W~y5ar(Utoz|Xa(5o{>>7bAULedVV|v6%W`t~uY{dwcuG|@QZVQ`QRjsgI{uKuwR@MGhTECd-@u=k zwKu9MPq-mFeF+cmXrZ5sz&Oq47Y{M{mLUlQ8H%5>oc-)fXNn68zc#wCH|8A3Ob2ZD ze4JDrn&ZZmF0%lKp+wjZ4Vm}G?+n&Gv_a9KZ}<1fS6Ox%tVUED7Lp1%bBKnI_ysVWe3%Ek~||##p@xyZ}mst zjvTdUvKlNgu~v~TR?CRVOQsU6^Kd0i#WfqW&fwLn6hR^+fo`hnpVDj}K}1B&90QUF zbhde2cJW=_qGKhgXNGlrSS2+WAs@9OL?RS)oxg_X^txz5%C+)!Ib72JH+E~`L;0$q z&nHF4op3xKg5kDCy#xEVtHxZ7vrb5&!+PJNXPBam(*L;lklr^V)|m-9##I$8lZ`g} z@TmrH98vp|fE3pCzr!_y_KsPCc$~%e5Y@bU`*O3-6*&jzf#hS{f#Wz;Cv&UK@Ejt` zY_8F+HWmMBwj{%d?={_!K(&u^;sT#XAiCzWQ^B!@d znbHjY*lnLgOoiCFA$cI80wqprBTzl5cEo#qu8(cgj8(hBu|k+%1>xu^hlzX8{rz@S zqgl8tx<84^K+kM+=lhc11+y{fI+tk!JiF4Ur9q0k$rFHEgEKVYBLTYRiyBpbkJCOb zgPDtlY^AZvY;4Mgrzi>S!~l(X>#=!hrU6X+ESkee#KZNsFAgRB-Z(tyL_aj8YQ052nMK}e1TPQ>e#fs*W%p1(vk582qSi;H4ZsF#rnzeS% zNyaN^pJ}4tCNMWGk)`T8ez>w;>0xDyk$r-2vfX?dNE%O~*F~+*eq%8|vt=MT{XQ(S z>xNW(9g*wxiGn_B7>#4Y3d74Ca`lZwS#S)5xHF=%)wgni$pW)#vyH4223of6LG&akDUhEN!_DH{FodEleIR-XpZ!{bL zM3hZJiDA9CoOoWk;FD#Os^*y{YayNcQCRU2ZA&O*mUGngn@n^ZC~M`#*yIOqm~>kCpma(m z(W@$Hrzlq-}B4SUKX$(vyCmq8wn{P-H7Fwy;K}5YcEYo=NOsITV z0pq*-o{|3pgaDKK+j9nJ&o4>(I6-EXU+DT|pK`^x#Y4%8m*3wFUfbTU1%L5#&GF$2 zv3+fl3;X8=8*)TRS3CW@DIxlg~ZAYUYt zAf(XBr<#e6Xt%Ajx!H&72)Djj@AW~Jsnk$(K2L*fV#`2KqALmAr7 zUj@b%L*6N-g}3p)9?`nh%;uR{<8JUXp!$x!U*cV8$*4eT3HTr8cmDp<8jh)`_Q&KK z6LXlh$*Oik{$Ri0UC=;JH`N=w})+d8chFx!{xlg`Wb#G9DS)HO^f~pWB4@W9# zZ}bCD`0$`g=D0uqv8(MI=4KRz@GcJZ+6E$hF?T%*j!k>q(IG>cgqmzF$GzAD;O~4k zv|Aa#j%zX8mSF5rCjsnJq{ie=xsT&C&oYCEYqoD#ChUgvh?@(?n`AJ+-8c@WV}sjh z4A)3783eL9;#k=YPs;vaBC^EC*ueZbsM$4$*8eL*8?Z)`mm|?cL}(b^6+y8oA0%fs zgI)Dq#qPk^llFWYesmO3h3(9Q$D~IIMGg8maWeko^9jRTSWZ~`%gt#d!xB9~`;}^f zhG+Z#2Jr6nBcf2!1S|S5kC!2306mBNYbK{}C&mVr%~SA0o26 zR8fhL55`UwcLF82h-8H=512pfn!9EH)ei|u^NuFsJ*+kDUlL3%SNS3otbN%mKl!;x z?`KiH2s!?$wfVQ0{$Apt+^I_BMMRtM*J=)x5hsCUqvWl9NLZO5Rj@ihD}Zedi^#GS zDo&yr-7Lpy$BNoxxA8F82rB+cM%8NUbzLk&8(i93a!O0QN{i6R!Q?}UxQ>c59{;O2 zfagU(_iX8H31wKon==j5cdM@y2w`K7)rOU@Z1cx!N%#)6E!rYMdQAknP zYV$r`(uMo<*Rtjh1qH6ZuD&_2@L4T?Uzoj_7TdyW=t#MF?xn`HV#M8HZ_vbt(y(Ru@6GqiA2p=Ai5v@qk1<4?QRc!VEMriI@?`f|faR;M7up;l5p8txQRp>BX zP?4mc%fGuLC1$U-w_d$Ht~vh3qgi5~T7~xqd0un#PHVnwyEw+;y1YFcO523}6U6=9 z{+$@;nHNEFU@|GgIsOWH9(j$eHs+q5InFG$Y8#uM!e+MH`e9&tKIZqjh{o`;$oTY1 z%y=M=zMihSFKe5={>Ms{1`e%?!Ef&hM_b?NtGrz_a&WP=E=`fE84axX8TvHkkufW@ zrZuf~J+=66#q{Cg=R;86VR%mQGwSx;_1OM{Y)RWPIOw!@h_&$&69jJymD%ckH@;Uv z$BfFNx$upGgpz~?Q-uf}#4tW-Y1IIBoX>B`7eM1|cGcq7e*vGZ#jb$VFtXQd9ps>8a_0KYNUO>B5U>iPb_3T8Bwag6c`^_`S6dG3|Uo&H_Il*B?Lfr4-(z+DzfVg3XUebU%Uz|LQGB;ks@%m+g z!0<>SO;-M^1o!Je(3g+wkiURT=&#I@zEwJYq4dxZOATluq46sz&Ih6zRu}B1@1}#1O=fRg#s$(KN~I%95e`1j`rQBCQ!{&9_%#3kxYO| z?vcmH6L+wC5OHHfX(X@!K?$G@h`yLPb{ROil7hR|hGMd5Dp-jyHkg0%JKvG5Fq_^33(m~j6b=6D{CxK#6^-&(d{vE#k5g_u{#r1J-gwSw$t;ss7&-32& z<#yXt0-n}y?5hQNYfxT!!)um#)p&e>qwan8bxYTj=#EanYWA;G1(2j-t&WPuiyB^qPhW~{DwEynmW2DOdT5j+A}iv=dRY`W3HcVG&uQhzehpzk-n>|vodmlugG1@5j<9*<`R+A+lA`4Et@g5Ni?Ye2{nih?O#TISuh-Gsf zz6GA2Z?p5Q7gc;lmo7W*v_4#wK+P5_zbb6tL&CIb7HB6gE5082?P0S~;~TrzQBLeT z>J&f8qq2ZS{(i&3XkrCT5j z+IhO!fc*|J@4vS#5q%C*;&J~Gh0DPOhp&u`<(jZ|kdO@}**Md=%@KZ`{f4@uPG31h zzB%ix86BbS~i0XtNFmhRk?S?bA9?}ugTr(@K7zshCi^oQ- zgp3Fm(afWd<>Qx(iR#N^OU0vpXAD;dd!XINRVZe{l7sG!@Id5i)UQ5;igv82AY#o> z{|k?SVe>an?89w~z*VfCMa6n$y_=Pcws1HQw)hjvFD2TpSlxV^G{@i#Y{Qy4C(aIy z!^X+V8yOY>P3x}Qxc~1}l+LHOor>*Q;TEV_-hMb>MqW5uz~5krnuLTJ847`&rElaP zGRfz^*KkRM3>fCh zAQ*AI!7e5p?e_ZYDDeu6Isls+s?R|3(p=4r@{ux~OxH!6^zD$#FXzA1nSTmp35JiH z$v71FN@xdI`OLtKe4p)icb>esYw>*tq|Zc~*C#IkY^e`h-r%cV3T>Si@?PqZe6k3sqAIUSnEGboawoE8Y}KKxain!*?$ zayBXGtNs!AIVJ!wwT1l52JtmUeRIPH)l?lH&dWE*vw9&JLKE?YrpbJYP(TD$Em;b= z^4U`Gtp3&pX1HSnReD|j%7_Xw+UK$kRXPWqlP zoIlPyIZQ#5pV7j3g-LcPD(WCX#2&Q`Ec*9hKtpp@;3qAie$#KdJ#5ewGf3)>o!IkS zAM(!si#5Q_;BD=UhEciK=1IJO3O>ADt5Doo0xl>(Ec<13Oepp-U}J&o>+}N2!ymMB zwQ9g{tY_|;Hr%{8)2G(N1n)Lf{%WI^mDO2ZhqP`BUNa!2MJmrscY_IJs`D}rD(;nQz0G<- zq+@kQ82vPFj|)nZ27xG0#GfCKpNGaBN?cspYQ%DD1%h603hx}H0p#&*>6-T|3f|#U zrUmaw`4hoa_DXnFT_D@4>X5;y0Qvk{wC~*;)V=iXYVO3^*K9X?!w7Vnf)$z|nR%KD zXmV~%Rb}x+d_q7jWV%|x#?BzTPUrC2h`*|jIIj_U*14=AgA+TUtoZK|Vp%d5n&jfD zZdKX{&*ocF0pgVN)CrVsR_lCeYkYD60BSflUXsfZkDCs zIbELs#R4v>FXk>nT~1g<&xy3PT6s`!;u7S77*ZIN!|HjAgTgP@D}^VUBjout^x2uo z0P7_3NK|8(aAxw>YgC_gzb^OQY{qpIf9qS#$3*fhUt9*Ef2IC>LjAZ2|HOU(yJg2+ zDZ0MpDoDS=`MlI<*`s{wI^=3VEahzzZch+y$1>c}I54^d-L#AUm{LwUu`Tcx_QVtL z_%}iBUzZw z`V107#dl)|6fuPg?>R%5OcsDv<$zI#sRG>u7(%haCoc3Mf5G#LpT1(UPvC*5jibvE zP#VHmfEDudZBP6=b`1YAk8p#y&ST6%Cv59m-N-T0`cSIAdUSmg1t*D&3k9&vx%A)FpKj1`s{i{eK|wIwOv|1IP$gl0G02vtIPjHDu{SgogTOAXaqh6%z;hcPuQ1$Ya~ z?`Gy}=38^eH?_N8E+L3NCZ@8D%AL>19aSAyZQX70Y4M_Hy%ZgOlbX`jY@0{hSY6yI zb5i*_jhTPTVA%ZdE#z)}pkU4431#ZAuHo*~Q(1C0tThGIs43*Nyw%ETSnetZ-9Ibj zxQ`xQiBnfsS4H0=DKUJ2J{o3bb~d5-wym(s=w^Kho0mxjE!jF7Cs-TXiV@23xsTHS zTaoqGn2$yUQ5HnF#%pV@MH>n{G4;bwzPo?7i#a%#r=^9f+5Yx!GvOa%7u%uuP~@+4 zCXlWP52y0o3fv=ctSV38*1%3CUuN9j7q$2`k>qoqh}-GeN15-?SpGcMc`z<-ggwRh zy?VqNpU9G+0==%Wu@yzSbXK)Cgcbj{m;lg;vQnOQ!_wGzl+!z}@%{w)}t`{UQ=4Shxf@$taL0SS1q8GTG z^Z~=;lcUP0iZLR>=RgQkCEr{H{y_{$6VIKdaiWIc4@#?# z(iO9Pgm$!%STwTFcvhZV9D~|4{>V<&IH&7P2p)6;+vCMJ!`2IBAvCW@_&?Agof^>j zn_S>+Deql$YQLNlV>BreFbX{VR^=dWipL&iTQ3C|8S-r}pkqQON-bO6?R7}osuVrJD0O;_dlNcHwoTA#_EDWun zsoO*>lZ~sb)OKrq+U{<)d9LceKeit~xwF4!P-G&xfarzLU#HNn;;>@+mzi>ZZ;95~ zwoz16b*_r{vC7}#s4Si!Dvwm>av-Gqq+h7&O<MV~ z3Ee0UyloHIUY*p99o+cII^c>|UEiG#k)Ja~?epU3z?5vn=&4Li{@jx~L+qt%^w@1b z$%SpAJko40ozpwmNZh3Q%3jZ6c#6Da zRzyxn{-TV@7Y)_6*_BHwQr-N=i$*i7;m(9{$%{B69g8i(o-wi|lN&BE^W?UZ537p* z?%;L6?!nqx6njx9;3PrEbi-+nO?i|jW^$`y+vg(R-;-&JixnJnOL+nV=+a~E6+bbF@m*p6w9^4B{TE7^zK6Dgq{!qR={qn36AQWDDM#+fN=Ov+H+ zW=q>5hb!r;SPctB1FnMJ37-K2a*CYX)y8<_+><)o4+dET)jP0sUDPLaVj_jCc35GK zQL$9*cwH7OIA$>x2&5z|F^q>NVu1LdyP;;N3;j#42nDIUP@paK`x2iG&)3^@gmmR# z3-8!I$tD=LnT$#(Z8VieK+f6e^mDRAeeA?nauB{HVSLUZPZEd9XfRdcWfsL#OB_f= z*H$wREfu1cCY%&4!Wl+N$sWDqsX!zQ{t%8Q%UR-d$;B%|iT4t`8S1)Wun7(qfqAV9 z!|gA+gS+Ot*ccxd8!~rR@Kr*Vs&j7P5toLI<`T0|Tv^{rJmshIRhXgV00%q#ut)GB=y_r;%>>WUzzK#W6MGJC|mV`EMQM!373#UYeqYoIKK>K~Y$jpismQ>ozFv!6Y;8{0z> zKw$2c-`|UUZ8`UM9ysyOK2+YNQgm*YHr$R(4S2vUG$H2?dG8HhKFZOxd^q@LgtwT{ zXet{$Zmk$qtCFDL>EC`zfWdEV1Ny;dK@1EW;>Luw8q^u)jl1jWy6NllQ0^f$7Er+{ z(Fy&3xMSSICvasL)pjI_v2zV-EUa2K5JSakGqf(8LYp=fj*IsP13VIR%LOh8z5jKt zGDVoei$bz82}kyjcl>fMZ7vU{^Tk}3V^Gle@LMBZniAUR8>lX_`Il=5lEeJhX%)vc z{;1j7R?o6E&h8^lNcebPRdx*tdq^T3lb55yU&h6^zOrHdNen|6UF}jNu=y1LV@VS5 zR-TTxm3JcJxT62wyrG>*kYCn?t#G_xRz#v#+8|5Oc623kq-B%W?OD|9@+(039Y!Y~ zey;L;zKHAAM8s5D_8YB*o#9YItGMKp(&i7@EdvL>FMz1K{>tye_J|(y>toIDnDZ0bZ@Y2zfyTJV4-#-&rM z`1#Je?!mj9zEMPs*!xSSo;gQL}0-9rp$0YVKO(OuG1%9GTRhVp8M?VzyZ1q zRWe^=Bz;j1M*Jy(<`NPK8_y{>obD3he41(QRogy!P3E0m&rgp#QN^=|%DbklFLLy$ zHNCi!>!t!;ytFQks8R9u{sPK9jQb$Cb)3rFLop&^84a2e1FTA8gVC6R35f64{oRH; z-PPQbl3?Ma!5udp=`)3JM!_Jmq+UWWq)qjUnC`hveSQ5@ZwmVyl~rPu-wVCu{r&y5 z08eA%9(s98%1@wlN*d{=mLX2hcl6zIaEg5f{|9l3gU}b|HrrsEHlwfm>(rW^-6ai7 z=9fg5KAC$XA=?=7NDtjD8Y#*Mk_KCONGWV)D5?C05;C`u2GltxxRu<)Fbdkk?+9Vt zZA#AIE9!WxJ|}uxSueQ_OUFc<}-=mmZ!AsXKqf%hM`crzg8*p^86pByz9F;%E6WuXx^q83A!3FH&+@b7{$ zF5oc=2)_Pmz&_<}J8Z9-GftNOrhf48P}@V?yDV^s{6EXaaz$J(6E$woNLG&H_=@Ep z)Vew|n^vz+?UZLLCzl)Xo1Q8bD9}8T#=~jWEuG2dk%O?GMn{*Y*KL{jEYOx}fy}k- zp@~wo+6W-Ozb;~j<5FI>pCBS71Ln}aMdV6i6f`Ba9wd!R)kl{U2kh`01PXz!18kT`kT4H|AEv2!c3PkGVE&g&tg*-2>oS7%7vl@c&? zMT|Mqp$-m#RC*_0=2P>Os2=`7;fRN=lX35x0W?<;JIU=ctNWc36WKq)o*y*<3k7XiQ=Vs7H4kOA$*UsgOj$LO$cU;|VmjYK*NA<<9wIkl_5|4K45 z??|+ETlm%Xofq~NA4!Njx#R)am43T4N;zfC|Eg8fVvmoSwec6ftIvy@ij+nRW=e&9 z8^}o(9JbB$oT4KM{uk3P*2HX{iVq-7Y)ZC~b6g#QP1HZU)zdrcw?yXHH+AZBsODcW zphykbvwFBPiWb7AXaQ;89$a5;|3Z4T=2Ctjsp4)sF&}oE)Bl5X z!4w-GaGJu1oa1K$t@mW)D=-3BtqAN;Nf{z&vhpMf^IliXkYjS|ZQ)^26+8+GVDA1c zy^8}}b0QL)i2Dk68~H8GfacZ`qXskFZ1xyf*&oYpc5GBJ8p^+>G01Tt?|8`oQV~ql zT^NFK^(yKGQFCe$J~%qb>7{wLJ=!JDTH8sNMV_Bu9+C7doDXS!bx2`-k+=n8_P_?c z6&hj#?F#=0f2Mfca=(8GPo&z9yICRB`EzX*P%io}+iXgoV8CR3VQ8h_$=C<(7G4@A3-Q?S71>3w^6bv0AA&#t}I95)#W1dzc1 z`af4JS0o_HOjUEe8kX%aRP5w74@KwG65!M8MNGTD*i+s#9-8)&Ij#8D_U7-4v?J88& zCq}LW&d5TJoujNPFXKY)Y;kNj4=o>b1p`RW zs4*iYkG1o>Y$__BlEBZx9NmomL?v_Lb6hTULXmES& z>qm6-7n8^`C_v~tm;%0axEwG};g4@H;?Rff*_wMXwK+B^U=u@`4&1u`cNt@OUWI3V z;M{rDT0-~SUm@>bm&|dVx<*d-|7d#ecsAen{h!!kD^aUP(OOZnc582?C5pzXy{QtL z*4~?1Ewx8%L1^r~OY9M|XsuG)FR%CS^ZhG-CAsprbKlo_o#$~J&&O>)eQ*s6{DhH! z(@Q$3>caX%gq8RWZ{`r5phpC%LVi2qg(KcwCr;l4lZMy4N#3*6j9*2SrKPyUWImIT z19?@z&?Y8Gm1-)Bz!q#+6U3vxV?(R?`b^$FSb8&d} z(?GE&4;XkWTa6zu;~3@YC6LzT4Q#0fy4##+r7tx)3ZEyj*UX+=@vUQiJc(-``e~2A zFdGCG+SV`2-}Z!)YwGCmKpi!<$Gl+AOWyuJEdWv9T!c6I#?Jh*_1GlOMk#m8Ry|2I zro7KlIl5e}cE0-`GmC8YbaEk>0BGk-6_NhpuYzgrOY{B@P(f`YES`}0Rn?y2n6GQi znNr^eDm3IIW{?v)GN8uVnQi)}iQRsAe`WWM?xO2Qc^BDfxIsDvT0c?N~U60RXVjpmK|_el8dR(ckpL>fORLBilDI6- z&TGf6!V#5?im4T1aIj8%ht0=c?a|=3gcnMZ#EQ^Zw@%`N6+f#R@kxN`l^x6}_akGq zRAx#@X*hW{c|+hryY%v(dH2^0et)R}gci(pVT)!8CjirTx6mKK6~P1~UIILY+lbuX z7J`bfaYA858ZG{&doxKpvZ)m#Kgh4zhg7UbR%noI`GDg_Xhb|!-yUQZeLqV4% z)!_0(0g>tQ$tsR_5a|{CDa7EG#HL{#GHwoLQ{4>>iLL@afCvxl_iko!W)4WaGS5M` zV;%ZkXPL04{!Yci_J|;WX?L=BiainsJMwmPL7QDS)Ey_av3|pq5IC8Hg*4QK7~bFU zWj+#YkI6aHjK&0b`Cn742Jc#V-hn7C?BD*-DoLZtPJO^MGaX=kB7c7wA)jfYX*J0$ zI2&)4=wvi#2>H6Dwks)Us~Z6nbVy(X*7SW@lrJ7v4@bH+$-`@EYN|ZDHT=23s4$jh z9L*ydL~<0z*byVr=>7W;abHpki8H2gm{&pqhj|CBr}3N2{*6mXd+i)Mr$!P44NW9O z;Z5>5$$mcZK4s8FNv->}IRC;EY^O?w{qe|yA8sgqVP9gCf5K|px$jdM_K2k6I%iks~1S$>oWv zN>V3k13E)hx!vtg3eI|V$*!5KQ?%5vF`u2l5U$>So?g7Fl6-og%u5TAcmhH~q`2JQ z2}Qn!JZzBpvuv}Y75%ubsiN_(`2pKm)?baHN_h?n^&2 z?+d5x2u6yB&a+axvxDEv`6XkQrzy`3U1mYypaq)kY=5OaFf!~+pH?%f2r)n29 z4WyV%2VK5=sku?)z?|t^lLa1o@AB?-`8}17EIo6^uOHN}eWm)Xfg@txo~w{RI;55tKbLO#8O7 z-;X&=QTwuSAPffUb`Tk7P<^EG8!KRNY3bc0Ks|;>4Lt{&y$KcN0Z+5|iW$ohn_UT$ zLzT#$Q=zXZ-)bU01dSz5=YMX>6ck!Dq%!&u=)l}Z3`!Rd50e+%QbyKs@?WS8u6w+O z5)fqd?qEA^fkIDLsmYC&PyhN{4|dRs=s3BhF|7HP-hGSX4R$wOR{eq1&H)1(U+@=i z-by^`_Ub9Z4=;&yjaD|54hH3(8R*xwe>Imr@=eC?d-3K=hf6yhj7!i!Bt#nOt1Ul2V*86?zb zd3i<55g=BkeFX3VWKW+>U0rM>^o}=eq-$r3y9(A-YG;3RT6qi$F`yRe+)wWDQa{lE zSnB1Zk7;5;8Tx+K#7qOmcjL5$7j&_KS@G;I%nE?j1VGUsK?km1zXIuA&qvc!pc52Ll4UcSYavpY{wB0=0&Q>2<@qfL+ z<%avb(~)$U^DDuGrRRvXqri-z@pOXp5Cm2ronSRr-&PjOi}Q z#TU4>5?}8po{vSGZq^5_iNZD+2Urhpz|dIA+(tqjn~70()@1x`vs z6D%c}EP>(3>5_t_MtJ$#CnkQl*xC00hV`9%yqdnE%3~K06kQ)XS>%LC03N1EW&T8k z0kZLWbb=M%q)}YtF1ZP?$eOScNE+v;>R5r*wzGP;R2Z`-9~HEsSX}f?7HWLhnq-SL zSgUzJamn+8?)-avv$ou)pN9uy>@Jb?6LlgK9dEr?OY(I-Ed8X&Yd9cYV4T@d9dXRf z@jclbEQ7v#N9@$OyheE#FF`-%y7b)95F>W>9)UZuiQqWv&?5FyFgw=U?)=W)@od}RMOwK=|m*SOFAnU8ug!au+j_SVpd#?jfb01Yz;nSQ2-)6?32?c7I&kxqAa z!r?B&i_d+5r7kT!9}WQyxS1YW^o7t-i~-%fn%ThqHox>uppg}J(*nf%=`58+SFU_@ zlKd-Pcp|Vc0Kco9j*h;QQz`lnQKzDK(6z~?f!;S~Q__aMU=quCYqnV?wi+8BPV)oL zb4gqi9A1&1$_*-qEA4(8{J9qT0J^Ef%yZAx^L=wa_hy`#fPJz*)VdSH^WLGu6|A}I zeRS-CNW0Ql)EoDWhi{_*;|MK^O?7A@{R#l}(exjg2orA0AL5>w(PyutB4`W3e966J zfUr0IYh7tv4Zknnme#jP6FMXSNye+ zIk(~m@$$9Q-WP*>N=_adGrHsE;({11f?0NQH!&4aXxF=M{WvuT4HS&k-YY(M{@-Nm zvc5^Y*=t>Vg+7=Jb`%wQO+oFZ4z;i#IoBF>UJCsE;R&pJTkm(F)e8Au+EJy?Kpe=Y z^PkG8@uA-W)sa=_zEv9wZn#-9m0*)%0<`Khf_0o*xUEtc6EA(Y8O_&IB~4)o!i2(G zOlUKCIGjhg2E-yEvs^gEBqP#ix!ySFHxmpQAdG`)D~^SL+uA}L)=r^s&i_=9B80vA zGk#nBHeKg_la=R(M_C!opHJ(g#)ho~MtGa(jcyewM^8+CQ7&K*D}D(N-KitJ?&p{X zT+_E>p)At5f4=W9-9s{$og3|^3u)cNSt6f8H-RQ0nu9SB$Yl*I?S75xEX|#jp=W;0h_@FAfJH<4 z<4?EkB`kqiR<9NRz5a0n_g!km=~3dEuoUQ1rWn!Hnjai2(e=g}Jf-kod8e>H3vqnk zqt?@i7a6rZ?b7M?%u435PgD#e{Gg#h^DR|JonRd9doG^`K1~?0nJ)`VWUP7vK$w8C z=`Oi^Gfdr;n1skYyBB7$_2j7_JB14Ml@i?%rU&Z#tEdF(tA5w@6o#*r8tNR;U_GoR z+!0V$bGWFLFItBFj$ZV4ow$mu*10e3onACTDcj>-;pL1Ehd-~twNi^22Fjn_U23m2 zsF~?NgFNyZzHKfIGSD7S-Hi)bEW)T)1G+{rjcDi-jUQ~y^-+)5ZTzxo=MrdJ z&gHHrHC{w8z&uEZvlw^DKCu6^mydnynO@k=4%IVMZ=SC@!0IWnlTm+scTHVsdOJ?F zL&*NbE0W65e@wn-8Z03u`OX(Ba+C*!>g~Rb-zrk%uCm4#Q;<5|X~@Td0F~j_;}-yP3uc-mq?p zWe)>4Kq_zq0>590uGCS-_Hp=kr;y2&5?J>M^YG9deIgy^YBNPKf+9+Qco9jVOi#$dxxl#4qZQ1dn}ZScE{F;sNp6o`9t13c6QI^=%XJ6*)(jE zpjwFfvnn!kjVsui#55U%P0XyAf3BB+=jlX@NV@J`X23eC+M+Y~ApYGA}dAA;AvgsA$tf62&K6M4f4 zqVOEF5P;j~)(kuBWr>XTpcsoWvUobwQbjGqJ23FVna*k>@4?)(E)dF|1G0(y4sW0- z;BtEkea-IHz9DlzG1_}bXrAiyRU#FM*W8t+v*jeKf-`^|bUD0v9 z{;V*swd~3C)F;OF_7*HXuV4;WOon{r*F8YAeh7jXblm0Z#b6VG{jbNiCo;6Y9NXvW zbyQc~sS{ok`>;EqtDwllm+o8=EC80>p3 zv;4v|JuTSlgI_^(-w+&G;KQK*wPc$QOYeLt>a{Zc$KX?zD+8vhE<;R zFE(uzVza;&P%s%EDO{qsX=jRjZwUMi*6^3;!bnO_)HeY;h`oq(;N_` zSq`YCj3yd`+_eN}KRmv|3hmt$zh^KD|3QTW5qojHHPjyue}ylu{FKa%1RJdUV`(?x z3o=Olh8GB0z$%VdWCq3=+piIFKm2c8lGx-NzDK9o7=I8Y6OSx-L8i^>9?*qBH^ZLOai&=#qG5nVmaf%EE!*esv|$Z9o(qPP1j#mN>rF zQWdHGyy;uJHS!{4=tOx|rsfmEo#=d!f+6P5GDFKpO;dJ$8Nt}o=z5;=571mMD2pgp1&uF8kR{!@C2yXQS}5pWm@^+ch`5Z0xNn5J;d%X@_k3Wmm;MGQ*fjLL%%Zez#w>_;-w9fWdqq|xC<)gBo5Nou2AP|%`E3*y|f>S&T}840v%t; z(Rs$bsfIs&T`UA&mM{&ZwOY;|&hB)Lj z0X63hLXQX`b3rz5Bh!N~DLoDnvnlj_QE?*_nvV99oegv&|UGosl{q6D!oDaIK zlMogLgQe;ke#-p@-dH@_S(Sjgpe3BgRmhxk0eze z(SBcJIe4nQ3)*B-hxUjC-e8Qux)fmX*Ana6qfZ*oWK;vfdX|4%dqnfbnOb(#(=6G(MmkkTIZl zNECFz{Gb1!^ZjDhL@_BOz_xu7_TM+}>h}U^6$l6YNxw7V{`CsLYLpg_egA0cz^z)7 z3?LgL8K*Mvgks0@q~zuOv^2G7xj~MjhxpvTpR_0f2s>(U12C3f4Th)5)re2A7A$;M zyJ2Aaw>Rj!Yr5)8h9%zeDObGM^c;>O4pSVhW6VqmK<ELA$)Y}6pCYCr%*>n?+-e_1U-e7aGj0D~y_)1M_`i(e(84^^;O^?T+sKU3;~b+KUcsHh4+ znAS)5=Q*PlLc+;z$}052Ea=Nqcg1jiD04)Qkva53gLYZq8&W>1l?k=J7f^BjIMBdw z_|_26ZCSlvcPEs*?_lCNRCfY%#VeQ&O>%eM`qwQXC=?&#W3W^L#>?b(Umm{UcCF^I zaG2hX6;h0Yg2#U~S~&W6BG-xtRygeHxfOn>+nY=E11mD56Xumy2 zxCfK6vb=C|oyG@X_9A+UIj}H$N0V-saQI{QEFfIO=A`#&-ZdmlR4Mvl+q zUfnMI>6i}cpb=i#zPPxssh8gibQzytNerr25Vi5`K0Q`k69{~UB%os0WP%m>(C9() z+#e+QF&||juC@);pp;*bHreDmPOx^b9gj}Ono?$m{(TrP-zuy3*JR|kpINFyG1uLJ z$q;>KWq~cGqqkL34enn1;>)aH&Z_%RN^$V2Qo2}TQl0!@_@c_VWAm7&icL-%}S*9aOWc>CRri6TL3 zG!3tyw~>%anl!NbmEuC(7Bocj_svM;1IF`5#HOW{Z|oU`46EGUwR}9BU$}dMzF%zn zr%A%K?Lu}0euFipg$#p?n+Y*mE^p2=#gF4)^cdUzwB_l z7bC@9FLpI2hQ{v;f1(3$VoglcXt}^{pGeVTN&uS;1>(jcBUx?}&de{5$+8M@U zfT<#t5gT-c`h&}Z+_?7n#jfYW^8O^y!1b6@fFb5_vGn1C6Ao~Kq-yma2^k{ZC_S#e zT0Ei$@XpuIrU&{HZV|{Qt9IF`sXxWbs)i(R(1(?)TprMWI+{qxkv>AG^jQ$B=;|>T z4^3zAD8KMH{yW__*cRebR-m=6d3Wd6ycqT`dz{_JgcO0(n)5r1m% ztgU2bSXN)IJ`@*;?0>C=WAen{?asfNOUu^6B={crAR~!$_uOr{3zDq5wW^#+A#1#A9X_!?lskVHfyr= zW!R-XYHq})AT4Mm4bog%O6_yfw_RGg>WIV?o~&yd`={>gb%RV+N+_uoKknq74L3WR zjD@y6NQgMCvtOSDa%A5ZCW9`zuX!ym{dxob%_CdAUIP}h26pCXt^ew?Qa2EwxHV1M zjhWv%VmP1&Hl6$OE*)=itu`zz0XQa`>cMaO}RHpJ16{pGx zNM)|e<2#)_V6gVi6+&9Czn7EYvTLRS5<~e15s7ZrfQo}r)^BO%SfqpsylC9GA|VUk z%hwH#R@%JZAF7W)gUwmX1~$`~EUBeplexeQl0+D~Npje&oWf4n;>a&#vJB)=hf%)s zFpn;D#g^%!%el(qAM1$pNc)?Iwge3gSR6;o{Mi!)Zv{mSrTesKVPx7U}v}0|N zhnq&zX(*bqQ)xZXgBV1NMnan zx?oTkm#g5cm5J>ch0%rdjHg1xX58>6o7SJyFEx_BVGmFBAtvO+k5i4z1r7 zw@%Dx6vc5iNK^~rhqoJzFS=*ST#(-x&u^8F7l;t&1lx^IaC?=p83y}P!%fNQ_Z-`&S*i;qB(DlSRW+ZH92pvr}%Sr8B zK8^iazVOL{R|;)~p$t#`ImNt61_ZsJdtM!f;Gy$x?C>#eL3f`xRY^s5Fow%r9V#ZV zwarn_fAOlD8BtK3fxUg*p`Wy0uRE66*PrdF;23wjhUi=>3-uAMqgggh8;w$!sFSkc z)rN1rnz8R3PDOtT(ON20>eb9YSaMRlQ2BpafR-Fmdkv1BG@dAsrXFAm~Cffgnqhk%<%)zfkczPNN&fLCxoiStEFG-XU?SjKTc~B2}HE z9Xc-9?ZpN-jDTbNqerUWMd(H2is+!@vfZ@t=2n}>UR5*I9Gz@G9~gur)NKr@?FiuU zfKs=#;8!XXhCMO@5)cGMNl$B{qaMr_DiU2>u^`UOL#p-uE)-N~UMUWV8Ag`dkB-W3 zZUZVF1sYwMzi$`>y17HuDniJj8l^t8MZotri^duf|xVT{|!{-oANSDE>7UMet@6hvMvn`iEh{0I1i>p(kl8kCW~9PXz! z+y)1SlV4u;#0NVVWjEiyYs1f*YJ$-+95ZT0?;+OQdT;G%`qS9(&(}Ul+#judN=m}1 z3OD00*CPcTB_oK9sGv3#ZJm5(;c!QZrLR@bULT*#nAy`HzEuBQTujBQSuD|MXUSpz zvNVAkJQLhN3?hk*L)*XoR}(B!dFN+6Y3AMf``gy6GE$kpb-pf)pkupJ3(x!)ZD0}r zq-dIq)}{@-umB)j@9z@K*%~Dg*8$+SQBl|OLJEKQwkJ7+hXs@F>VI~m~5vJbe zqqnzkQTE#6V!m4ezl@VM!_|&2wViL9r#0*vU%rqljaJsG?Cj&6LSOj((QDx4{gady zBKY>lurO`R`TBZ(BO0}~R0n=vlKE~{k;iXfX~Yb=E$y9&JLx`J^#p8Z5vA%p)a}46 z6S;EK`6#f|qFkzcodf#g4SgnP)JSD<6sHM!@=N)f9`KKce&#Rtz?k7Tai3RY->{PtgToh^Hd3&~wJ zdX}s%3707M7)!q!IZ%Md@Kk;Iexgv7R9H-iT>nHl`*XMC50yX?b11f9C41-d0$P+b z36laxG}gml9lVjVRWHu#i@Zl?t11FT8x4p7e8Cd<+ZD}*XcI^x)~R!LL?z2nh)dne zpRSw`MK;QJ)VZbPJMxqfiC5KZl5sqXOAg|MAApg?-lgZKF5NtgTUZp^}6v6 zpey*G{?H+S{pEH#3CPC(;__SmnO5UkE;V8`Glen3zP#ymmsXQ&1*a(}F;w6-V=;|#aN*vx%5sHd2V@a?kw`kVy z=xqI*z>{Y9^4GAdA&K>TM(OHn;G1m@mU9~IpD{^lzoXS`7Oh$02TJS zFg0Q#?cM_{*&!8l22ivlp2rFTo`SPnU$wgL%hDx-<`@8d156y{hjNbhEXM^5eLLx| z1Gblhw+Y*&FOE-qhlkvv(pswi0pH(I2)yb&<(cX^4 zfABu%gmDqA5&Vy10{kdPsY8{8TjQHIF47}57dqnh%J9;G9lX-UV)4?(NTk-aBQe9I z0~h%~2ott&rB!oP9pEegGU845nOQn<2-{~!PZv_f{}#n^F+5Z$%$A;!VcC4x!S8w*71{y!A)}8?X)m>=0DSrQjZjWM}A( z3h3%^L3xt>9!ZC%y`b*P?6H1pYC*%`w?4rxZ_dvi;?~g_5gJlCsYa~s^zGk>RM&awJJyK#q|j5dCp44UEv<81D`=A{2#ql`q08ff(GpV>X# z9QkzwxD&hGKZX7mPs9I2^jtf{P8W3`j0eQd@TJtuCYf~riqP|!Xg@M2oj)Hlh0_Rw zoXpwGY-sreSF%JU-NS(L@jMggXqYyV80`ojOm34%-sh_$fbvtoxV~b$XIfK?e&Bx* zWcKc`b=%?%Ku8wKI8)dC-F?yI)!J}nC8b>HE?eYf1bC2dKKFm^e^d|;g{^jEBjqE} z8Ah3bTAY@E=c55xe8e~XX1kfe5Ksuv$D%3Z(E_bx?{J=pP9u!Ov{3_!is=Whr756< zeC+QMgKM9U@v$o~IRQ3ITT|EA!UcII(Ls^`hHT0Pil8IhK#Twp zgr(yJG%gGT_>(<_F%H4uBYtJM)Zi=`Yy_AdV(J)o7{vJkUR&}Y-gg7I-gdl%&&&?( zDr4tu);?OlR@$Mm^J|C?P-lpnRcosnbO5+DqnGu7Ax00WF+X!!K%flc28#!2&1O7e z&XfO9(4AqXFL_wrjl~Nw{orjdhTUlFdm9-9wsNR7aphS4w*3-+yPdv8adUnC8xP7M z`B`m+7s?k2!NTlIMjfNr;c8r9-vMvO*r-$rJrb>0UMYM{_A*2#I!HMi`MjEPd;Fe_ zuc9FIuh-1_@Zy}$I<^SDR{>ta$lEQe*1fQwZO}}3l57RX$h4+e10c^%d{=wUdgCs5BZBxk8?7R0xOwbPrY9Tl~XcnqctUeG0^d~ece!am*P`eVPU zIWub_V=A=3j;I>U{?TA$eDumgYxagx>LLsd2YiNqpzA;}1=6v7xLrKHWHhz>x^O9G zcrJBN&!@LDCVPDli%s$UYT!e0r*H)@0vm%ravEb{r?9gJNMBOuKN`WQjL{0K#U^G@ zKspjpB%_Ix`QL=k4_|QD18}MW>kZ`q%lyn)&oE<^BSQp3W`|GZkAP-ow|ji(qqMvn z!EVSJ`NACwW+F*=O*Lfb*sLtgNi@ zP~2+$ym36Cf#bGGLYB`!*xA8+h|gIAOkf>X3qxv=#&T9gE^X)m1sFxI%~&kl^?#T5 zce-z&kOJe_{76?(QjQ`}*7N^Hde5Ee5G*n>dVBJz^3wl&A{`C+YZC#+R`Hsx-NE+j zKi;uYSGDT7=?aTj{XH+`w72*F>96!dswp-vrbpCx)-(mOGv+H>)hH(G`fj=YX_iRj zY`vGrbGQWbMF93%`S-(czf<7EZeWn;K-tYLM0Ett)L#;fRjt?uU>kV=;3CH;#&}<>!{P-|5+AxX;<*~L1rINcu8%{ zF_kb@`?+xPY4m{3YgCO4ggak42Wy0b=F0wR_dR2r)DFk<54F0le}Q^sDl$5f`qNZ}*cO z>*jc2xj*Ft1*TSa8D`Ow=t+@qmbCSXlxbs!M;8)Pn312ZjVv5O#{hgUFRgVNq+NtE z%nPwul*dOOG&18uT}2(t_fFK^`1siHQO?Bvv}JyTx5@_=RC$abU%ge2x2xOrAL+AJ zcIfNkQm9f(qVIvmvi7yB^MD4yGeI~NWu(S5!;`-U%MFc!_LJa)!?sHU3Jq%lDSg7!r&M0SU?PZ9{{+8pRTc0!rak1 zzLs2uN|9$S_Hf*;vPN;u8panfjyiv)Tk{Ehck+$GeC6SD{A`P{5`WcVw3#o5Abv5` zir-;Y8eeYhY)d0MpR&2#(`U(OD;l&_DCEw>m5W0NAy)8ucDLU!VarGq=&9J_h3E6| z)=4GsA{EmpYvW?Gy)@F=VqQRc^aP+eJVq~#zxaO!g5k>UY=_e?j;9#R-b@)bM)W(F zC4*ulW1`*f-{-4uiYzE&NwYzzBhR(BN0RSNC-^~7h)8b`c_DG%lhwqq z`P<1~@7jt}&i>@Gw&(kVpk7&|rCnC7pW$wYTlL{oSMKKk{u#fEZvF5}|9#N!0N)jM z*yys(miUloHys#7kf6f)5(q&K5!2+;k!2vad7-(}dZwFXZ6vU_G9R875i_cjxD`RHq+iM?4!5WmZo? zrtC)Pe<)-FE>aU3p0|@{iPv~^&a{;c@=m$E%@$9>uAZuPdu)`s_p#ug3pUH5B5T$E z%H!UjHDvkHOX;8!Oq-}WjKsDy`SRmHg)WExm>$w!alg&es7I4{HgJK^J@I%8T{=qj!bms4r6QCJOi^IwE(9t z%zS{zbqcfK01n&D>}qsGO9ipP&n#ZkUMS3u(|5V4dS#+Jroa9%SoG|Y&aXYUuwG0SzF#!ObE6blO0$o)PtEjngqI4;*+L!@&)qeda&fmdbt zAJwIfGHbUQ)I$hkSvo%aTJ~NgCns07#4Ma3HWytqGxi&CGprw?7~1AG-XsL~0IKLo zq@H6Ceg0ABokWiq%$PT=yH7Ug+S99)9l{5Y%8vqx5z#NK6rdNvYq$ri;_%iHJ^J_I zUiey~3M?{;P$ItpF7Tb_e$$DO(-^-#P{E_=6khR64Ue|+!Q2ECXSD-|4G^F zcZbN7cV;)IQoe-@SRI_)1xg*bMTeeUn^F81F?n)i>+yB zN%~*wMtxw-VK>Ow)c>OO-iVk+4Y+Sd+KG$m@2C ze|KcyV&?Bo9r6tIX6%;zh$ifvTX@S54hz(z1F2|gN+cuj+4YPViE5%1$_3$Ah5WUO zFOM1PD=t2N%4=E7_jhUu!q>{rjKnxW$wZ#e*Qe8Uab{Mrsq;F2ai1q+MjfXcJp|Ej}g44(AH zfWWr{uv@(_a5kFD`smdWU|$RM94`G>XtVbZ(lfyS#@F;8H$mTA=$-cMnZNbwgo~oV zO!;o5wPf)66!`etR=D1O$Cjp0P?s_Am&*DAgHrFThWYJ`{P+%+nK}-y2c$^XYc#DK2uzvf} z@fdD|mA&L{0u&Q`^s%dZiMmJ--aXmc(w;frTh;zV=(T@7R;)d;Mt~B929xl;Sg|X7 zgbKJ<{BhI^V;6X3$o`$l5#2{6RGh5%)xeVV`5wIjyg-&0WpJ(PI-2vi=oAMVaCTy4 zb$8!_^w=887nCsLcXjFT;X5gB#Cp7I+=F}j!lB8C?;XMSq*xa@jS>!Lm~+OTqcMN% z!f*wLTbI5EV_)h*Y6}W7#`6LmYId}u3JSLf3#FttxL}9Eu5Lxeu&yV%-#l^_EQMtK!K7GlW!!z60=DE>s<998iaK#O!6da)MWL&vL6%m$ad!YA3G zWAlH>I=(@-+WEBjl_o`u+yM(2n%qolW{QRiZS%B!;(CKND9GDd;k?Z*=>D4aC+K%8 zovIxrHcnazdi-w2noP2vFbeqNb}%L7jVvivYkYmAsCfd|*G1ujYrf&f(sR?(v8Z5` z*#C-r>{nN&)INm!;21R=B%OTE_B8f?Ov~n9TW;s|dREvOanNX9$&3%ODpaj!+NaHG zv12C0071~1m@cO4y_=JRKosc#2VAYir8gvue65!S(>C%)cx7U=#Ukbwv^3yz+e_Iy zDF2D@_AyqAj=g(+QK?&)q#<`V;ZriEIN>ptg`9L?Pk``kCXd=hd303#wzsRZR;;Ws zq3fKq+is{WoT=Sq*>1yII@#v!UGA%lgl?+yy3=xZ^Rm_)JN{GK?9T16_Ahv~NNm{L zzk6<(k^LC(CPR-iAB9w(XzJ$+LC2!6wZog32oC{YY7m335`Gtsj>ay98}=?P z`0S7jz!`StntVwJnVWFQ{+a$g(X(>i;lnT3>0?1zX;GM$0#xN2|WDXyn<&Cgj7^#(!%2kp2cfd?-f z$jfUn8BV08b+@vqIv5QP3S$jZ9wgBe$hXVZ_0 z!#XLkM%4gW5g%NktC#il@&{8}iU&_Ov1IIY12-`ggC_H&%1oWw50)cG(KstpH9A9ONoieSzl;$BwDy9P5AV~IuW1Np z)r9hk&qjw~N5I4PTI&F)?Q^iqUH>e^-#>UUyn&TX(GtVxZyhL|_+Oh*T!^p^OZ&!! zuO^}rK}N#3(=gl`!?B<$qm?!Y+{M4FYVXCtEIARhv5}g(Q4qO3aOA~u>x5UlzL$pg zU8qASFySa_iCy1A4T%HN_+53b#T^m%H}cfMmDNb9IQ-*E%C*cIZvgPFCu&(}4rZTS zyKHvEn}Ha@JF)y<6GS8=M(u1nKWhw#jiWVpBxcz0(gzd@!bh`tib{05EXp4+Sl#;u zOIt6!q&h6RRkRNkE;gYtZ+g*g33e~GGohVR>f0$A`r;;c|Ha612{4${{b zR@zxm`_Id~^_SN)olG5ft!eyjVWsWRM9@IY zU*%lKi@?u#8?w5IRIIK&2d}g)Pb&6MQ;d5nSP#+LiRZ&}eTl(Ul0R(XFpbXxfwNC0 zRN|Lteq<704cS+WWLUUKDg=U+KMw#8xBx0c_q|~K<8vH%6i0AU*U5M3rJE>x6|8d0 z+WtS#haPG!nyzd(qXbh&&Mw4+JwIFN1f2Z|ILK55b1JWh_208i3BDTceL?8G4!JY#8!F(`#qV(-qEoROw<-I!o)Xa_< zGLw20z=rPi=ZrL!#G-ipTZ8UCl9&^F$GgFyjX&pf?_^AX`KLcu-1g z0#+tAqY``dIf;#gpt%VTZH9q%>)ZCt%iBZ;W!Y^xpC#-iylY`x5JN!q`-x07Ds(X! zPkv;B@RNL7+Nt+kq$(D5jp3aGnuY~b5Whi9RwH9P)K5WW`d`4+xa3JjmuNJP$>SP< ze0=z+#v*8VkPzV$)Fe|LpvR)ZZ5JV#zh?b zKkI@)Ic~j?ab{9d!O0~jaw5htyg{cFa*6vhj(DV_oPs}0t+;VrXl!_XP_ak6g6b~H zCZtXg6E-`!mL}+4LG<$IKlM6K|chl1uF z15~P#`3xrjLTfWRqmVu1MWiGH91G7S*lwBc+^6p4o7a$Y!;!)48~2YI#{+!^%fj5s z;G%`Jq_+Bz8SVxwMh@qy&wd(dp1#Mn?@ebEHQFws1FuG4UIGGGIkU*J8}@=>4Hg9k zx0aZmpJE|9KUfJZQ=~ji2Pz`)xqW^oqrNLX4vX7u3?(o*q%zMbT0hyD>CMeROC4Q> z;H3?whXVdqFJFp`-`h`k+!qd>%DbmEpu zZH{F*jd|!%35e$ZCJr)3ty|=Q!!G7QKhMzkk9JGv@tCy<@0rY~^S=Fkz!K1}iI%xH z7@#}9dz|I!7N+g1%>DOwu#p3%aec~XG|OtmN#0v7X!+0o(*it!S$GgPP&5=P?(O_a zXib;nJxAfSJ+693sRn&mL}O&HLg@G#O(}IxfGr~0@9$pR$-cmrPU!Dq{#1YN~VD_J&<0%$-8{@dnoda?#2(ML=S26^y%GUL>-I!XrvmRSgyuH}}0Gt-; zxacEk5Ah|?=3xNT#+6ILy#C5~3NH5msy~g&Uo;8cl>bBU! zc`?ETBd|GhG+=(=tGe2w3Wu+|b=>?6J59UPXj#elY1_9iDJik@HMzBmo`Ja4b`>q{ znxYk0F)XGc)t(P#Hx>eL8^alu0^ggq6=9VRDNPV>XXMoG(E?$(UHQxo}UmX}@E9Sg1=ep*^+Hl(H>@vvsG z4a??r7x#vQOWP*KfAl5g1!HA@T*;gN^&4qVnmI?udHzdcJRZ#6{g&P)g;`culKoOf zT3jahnd!U$7!$aNR5Jg}WHDnGuj}r5KnHd$3cna*SsF0O3xElLF#`u`^}%bJ|HAet z9AueCJS<*(lfkRPBNGmetB++Ru)w1);sxGtnt$kG$xr_4H{X0Cd5zF~0YviyZyzu- z8H5!EM#wZ;2?;a^17ecbuD7LMdwUn%cUDr8I(|HDz{CZ{l4tgo{;>B<$?E}>*VkWb zwcYFG1;FUrjT<-juDj;q@&+z2z-3v(t_B!m{b&F8Y-2AnkQLt_JGxZob(6_!EAP~R zur-H4GS4i~m)dm1fAl4Ixg{Fx$tVByjb(9Q$stHz_J!@)E#M zUUmx31%|x9o+V(6%ge4Qae+~-kZMnMZMU_q%J1(NFJkE(zb6R{d4c_!fa$zMeXtet zUkmy_^xywIdcgvw^K#iA+rewG;Ke;SAhQgG8N5!a@a5jmHsZ+ z{pL6SZ_xi!li9<<;^NAio0-mQy97qO<_TcHYo6c*Hb>S6@tcevf9O!G{Y{dRv;O|~ z!%4!)OI`p>TmNP6k8Shv3tw9ubN_ubg?X}X<|eblRY7_EYs84nGI${_UWxA5F)8Vp zXRv*+2jHRx3=;o`6L0$Q*Fu|f^dn3k+WwrPo$m=&Zunyo+(vsT+URIXgq z#Zn2D+T`x~qht|dFwyY9AKUI{9v;31LI@~@(Z%w-6w?2& zIfR!Z4~A0;*FOjsSH@{#bI~Vce7%>61!*46GK4S0FE%a&mYRaE?@#4QvE-GxUrrrsm$qRuwcp)&w3+*@q10z2a{jrS|*^$DR$$%9mcm;#ariI80ps8u9si{MD znS*|v%=aU$e<)s~qoaZs;?TTw6t3>`A%J3)0IKA**TguAJ)5`y@kne* zmB1ATJ95mp$_6erd5)>*mc1Wn~wrcG?)j0z+QER={jtIQset^~WwQ z*1V#JFI!>%27FqYXLR%fhdFpb(-azdg^tdtDn4`?fh}IV81+TgzgX~EG&*|d(4l4T z($_=F9K1yADk-V;$mo@lB7C5q*8s=@^Jk*@mk33l>G5fNe3f2f=hB(gb#7PiLThGV zk{8$#ls&iI&_GH zGb*w10(eh}=Jn1y@6>iPFFs(H(}xtlK68(FeYRf#+yB{TuKBV{XI9s_UA~l~3Yg^e zkpd=pB`aVz9YX-WKj}>5`d0@M`}DBDMK98;fJt6Q6forwSz%ZIZYK1JYWs5HlZP)g zc?7O=!y&j3SXI^3#Kc4sZ#r<N>X@2MdJ2$RjS`RCE3ME&_(U_`Onb^XAV881kx^!F&=R zvBPRU3gYYQcMve-#ZMZambQw3AukbdQDCI7t5+Ww4YFlBbHr6S$Awq7YxsK75kGpt z&W?`u_IAWIC3(5+RzzaUmI+>q5SRFiJl(ZK%wk%la_~j^h^Oojy`e2Hehy75%6x2S zXIA&QU3%}c!kRzT`35WO{ZlI65DN1-(JfIxWz(swr z=SWlS%pKvYyR_Rie9Z(`=awyuOYm~tttg36W~gZ4FH+mxjmWHbh?bh$AY3?*K$ZEu zDYm?#&C$+$T|5hn6xQ6lKxQuMSz+(LFLM_Z7%9x>tC;;1772_LHa;$&6a_{K+r2wp z$KMAJ)?9VWNByha&s;VawdK{#ACB-9X@VN!TpopvPBzJFN_LZU+pQ>wefX|Ti-FZ5 zGRvk#??J-FV`V=Ab8m2CJm<^lRkNx?!vc1R&FZ8>Ok6PM=z3pY$qFQPA;rWs)2ViT zQp`C%ACI?R1appE8dvy}(0XjeOLZFcI7?r*ZrR}rc(Xz6B{w#1xH=>*;x*B(c)9OZ zWMc0+AHrZ*TWdKN>I+;n73KFo4p+_k^;K2BuBn*~FeLVoV?HWAzRNKmRZ)@RGrzw+ zwq(rwz78!~=|n#1=i|;7*|j?g<~gd1xxRxJY1@FqYQp!|n1l%O+QPUx zOg+^ZQ%z5! zq73OoOwe+?d)4s>c1=w3LSTlEU94t>&2yXF4g{UiFO`3UTRkaYP-j`^(2$sn0VBit zix-!UjKp*aT+a)L#!F32gaU&*dk`4FFSc&ps<-?@hom*JrLz-pRXv>r0Pbh*nddR7 zgGp;ntzUl%c~#j0^B^d31_R#F3-uBcx%qFqc_8Slcp)&&t6u<T$bS&Un}YK^CQ!W4(is?NTuf@K zxb;X}Oe#^_!YuqD;LmP`hH|&!|?D1ikh(qY__~EU4pPi6npMWBCS1>cQ*e*^Qzh+(v6EW zr)SCwX*HA~8HQdF{8@qR(mZd7>^|1oRysA-K{WxOjU)f(R zd7)irV6g}+;&}mX>krqS66=~S-ME3|%vistv9S?IT$6W9UYu`Ch$+~16W4_cf)^^x z28Of>>zP+(KmjA8wjU`G2Dt_=$9YUjV63oohdZ>(&^9moKv2nx>nC3lFgc%5_=aT} zzz~;Z*}$M9KmR%bLtY)stBbUSy!yK&uXh!&*fNd?=LL9<53Mt8$Rl_GI;-C8M~|6{e=9B%6-&o^YpDW`jB;^0!A7uA_<s_={PSm>!3$MNL#x>+M#sY)1w7-mw{snpMwgpBC8yo9T zyt>33PPNPrg~G1KDz6B*jt|+eY+kj(8!|3)#&pk}I}B_yf9?S>a}OODI4)j9R#Q_` zruV!^z#7WR=o8K6wKJ(c5U3Aq;*;%U1e5i})Kq(87u>toAj4lE(4fl8j~)qJe5;cN zulHpm@kd^H$Bqd!d@Fe6`F!FrzP0OJ;|xslLc7nvBrmjd1_tuYi8;shF?CQIR97>t zYL$?Tu)?lie=70{UCHDb8d~Gvb=;#84uQ+D{*ZDF#B}El1~JqcruKJK6Ms_HRLDYH z!gaCXB0y$uLoeC|P`Gy1@5Dz7>kG-mx+$N~7xPk=BB*#FF5yn$x0#P7Cm*r>^{EHJX|6 zW6rVnDd9>CX^ri1;#xCwQjAnEY+V9O=AG*gg+Ig?*0{M5*^$}+j9H$LTu$Pme#BHl zx-eh!s^`N~3-yUoP(;9r;9Ee42>2cU{J#eo7&%UIr$S&~OtSrz?Td&P#dEuwjT^1} z^tLBL*;&`SkQbMxyoH5(2^jM7@=^o|40##F`w0qUSB*?z#e@Ojo0mC3fQsRikC~-S=PJ8SEzhLDD3`NpkkPKYD(a0gvac11d>!Q@q&wjS31ZOr3!hK-cG@b zAH^}3&j-Kz_IHqyl3G-x4{-}N1krIeum#00VV;BHcT5X)qEm*=-qb?F|p%;p=3S^@q^7nS$14bcmZ98zX5;iI+!?N z&a&QRm!`Z(?AqS@D%Au(68pJ06YjKu@6U&b^^_GGHe9)K z#c||Qocp;=Zd?80(yI<`uhLSTLWR?+L9MvEU`~E4QsU)11_;YB~dNN zjvl_k)*qrnL{^l}NBC{#SPj{zs%+8TrmRfP9F}1!e^GTo*%=6k0oA5L1g5*7fWb>F zH|3Z`j#J{AA9+%7!<7{qq^+2{?3unF1KZ@x1kG&p+Feir;?V#BGn#FfytF$FP2Q#cM&xRKQbMQi7AaPk%%)mr1bG1JuQDq#D4_~Ty57BG+N?v0quuA+8 z4Zr4>DPE2)C~Bs6lUe5H`6$6FMe!;_v_!4pUeJ&iZKan-iGt>}K^xwcQ}l~dq?z?) zwbT`6xBm-XeRcP(Tf1pmh6RSd%cZqzFHx5ec}kq*g}`FrMT>e9)&7)36~Y|6j=P4h znY@U#b!^PaR=BvJPo=N2ur4S_EHe;V=GSMnND7RLz~bQRUeMMjf)ZU%@m7#swrsAU zFUiY;pafRDqw;wKb(xKbX&QN-F8S2VABu{Gf{yyv#%9$TnRuZkGcd^u?Y|iqeSiM^ zl0%2M)mm%2e~QLshOgsmj=P4h8Q|(28$(}c*}E-g)CC1tV)mg8w&O%#Caz`6 zzG6dUUx~p$^4tvym(rJqXbE}Itw-WwQXhz0Ng$8b&-^S;cfts!rM>oAYcOcnzebyz zKUVdxS6{uUfJt6^6)?q1wOWfQg3MP)Iry3Um`%3Xjo+}l`c_KZyIAx(v`9t5r6j5LP;BuGphh3LHkgZF^ zdJF{&aamTA4UFq4HZa<`w3mP(FEM|$aN#uqhP=FjSDOO%6fzFlpJM0p9%t!m-MY~5 z)fZu%6V%p*AB|~^5iVrb`;?ldpbP^vcW6qHFf#!c~xi=0wa07 zqD=}+@j_q@UI@&=3xO$tvBK8Xt9(N!tmH)zzK)(huUf4gjg1#~bKw0cb~=C3Vd3&B zckj!Iw8DtZ$+og9E72p4J+))NTpXtxFMZ_G2KI_qlsin(X7jT5)(BpZmv{Zhk?VAY zMSUe0oST+5m-fG~z-0Z4cDvaEBZaM7r{=E~vcgJAF-L7auJ_ywFZEFv$yTh=JMluZ;}M-Ws_3<~n2k3UiKI5*G{XJhxhlRbJGI=qKz9 zRY#&H;5FD6zEHImrqKj39m(ck+``0gG#nQ|Mvi6WWP~Oi#Z=cS4kwm?*DE2SR8dAU{uZ;>=(5QcH)Vz59>gGD<{M9Y{P#rjm z#Fi|I5f>lt;ANjkw=#i?+-DwyJ1ifB^74=ijk20nz-~Z1=;Scls;mra!~u|#ks}W4 z%`j(7i^~F>{UNbXTyb$xcrEiSo1T{HLR=@*HB`J*g9yZQ;)KA(w}RIzr%wx9e9Nt^ z^YYdZFnP2c)C7Y?^jyfR#;kuKuP3g59X+}z_W7u{y_QY6DQsw{#!>&;xbeBxzvdiVuwcPKqBQ3q-<=Z|WdS1b zsv=%Z$?*Q*op5HueQ?)*y*-5-P#&+jw@Hy(RNUS#O4+a)i~>4 z8za`gzMqHo{WHKNA({8-4_mrA!?e{Na)(uYRegiy>=65)uWGQ$0Jgl2iJ7=894ot| z@sbxx>jlvbL-HbEG*czkWyp1j3Bj}bg28=fg9fhBf*Qdq*Y8!pzA-FXefc}X)O=K% zVPmG{~8SU^%YZqymLwr+Lp_$6>*X1E~7=EYski_7pYwpz=XG0V#46nhvCfRRomTtqqf^V&ey#WEJ$3`afZ>& z*SyNe2|_D5#$q+|o{+Hb?Ad+B;OkeV3@kS{mm8)OM6NGCoS4|ZfB)?2%QGCqr)8r9 zwSmohz2{0!#_)!o6_r9^F!I9>AHUZX>;5lVKX3CgTAHt3y~@FBm*zDnc|kc;f%1pY z4VWPkuWm4&JT4Nh452BT7ce8ywAKr@@Sj6@7PF$;2(}CH*r0@&zg7QHeg$>H+ zfvym7-MH}tZ&4vHK42+B@Jd&_TDh%SaVsDHkZ$wJ%CdPOE(DfV3XofqRznt%*TnvZ z6Ve{eeWvRHFuh-$oxPfxvGMx{<+Wqg@Gy7RIQhN73xPe8_e}_|)lOb57`FOa2FXC; zs;fg>7J$Mf+#v=mS||VtmzLK)WQCt9elah^MJZbWS)}zg7`yh{`xp=% zMDcxY>up93_Z&83;rR9~+s*G2ld_Uj{R?@aH83#Z)w2U>A+D>Kbj;)B^Nm0J(1^U= z8+jJMFnl?AtrENjQCmo>We@E(Ky*Z@qp zIFO+$bjL*^P~({akj#M9WwFY%yoeXowJrV_;1gYs z2^URmFfg@1O01fqv2rT{Q@D>pY2FZ|k^AjYjVX=(mkP`KtRTukaqajWXf6AG8o z7dY$7AaPAkA7ImYiQGxq!x@@j1o`3C-^;>G^(>yeS$1Ppn74YAS+ zZ+7AuzWBel;ApvpTwx0bFLsB-%gq@g9~eMhg4+OqTma7#hhi!!$FArLTr{`Q+NyEw zV_3qP$s^K*@%kw{L~m%yYy5NN4?iFO(ylK{b&+Qjyd3pq@v{e}4<3+qP~;`h*?Fy` zqrk=ays+1QFY!`tvS@#Xh53f!h1W7Q^^dLUH=p+wE9~{R=E(^u_!@~d z-i`@Z94vp+^#rX5;meG7p$!7uo;|s300b`|-ww2?lUtvBfmFg-MeA&WoM;sjy?z3w z*8!ub41K-yl38CC4pHz5tuKSfOALJpUb&r}BLobuc`gqfMn=X781mx!R~7@y%2NI? z?Ap9fFnAe+cE*DQEXhBH$TDoef9lmDv>}>=L&t7?Ru)kdupw{2_Nmdv*U&+M;*($WG2te`X+uXA@5u)F8Z=`cscghQO3 zO~0?_28;*Gf|oh`+U2w#&9;9pN{T!3iLV3C@XrIYp?9?H?&l0sQWANISg!ND5zNXh zJ~Lhez_gMP7*BOP%eS7U^_Z5vnwFs?#S8uq;G)FP!7IuF#2G&`ev(5R0Em0m*WyWQ s#Iri;@P8XIc*fT;?w|Hg`~PMC1CwKU;Pi?HGynhq07*qoM6N<$f)y)S2LJ#7 diff --git a/public/images/items/black_sludge.png b/public/images/items/black_sludge.png index 39684a403108232447925646dd56e61186de91c0..37aa31de43eaa5314563d42550b2fc912c1a4210 100644 GIT binary patch literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10LMXr|#1%--S+b?Odrfh1 zx0hFxf`UTZnx~V1qKqX$e!&b5&u*jvIklcHjv*Dd-cEMxVs_*?a%|F{|N8F}72Ch0 z*iCp5)pV$BSKXZryU%a@wP4MehToe0a=of8?ui-)?*3-$W_;rpDLg~+Oy4}-)iPfE z$-E4QSsur3VBF9WyhCiZBtyVCu8tzN)puSC_$&^3y5kU|f$gXIvT(NAy`NIzYwipE ZW0)Dp%oLNzu)Ha0{(J4HS} zS3f{kKR{VPK370NT0lZnLPAhNLRmvZT0}!yL_}0XL|sHhTSY@(MMPaiMqEZjPDV#y zMo3vkNmEBeU`Iw)M@CpjNMT1wTS!G@NJd~tM^H#dS4c-$NJv#lM`1}vV@XI|Nl8^n zNm)rrU`a`0NlIKwNMcG#WlBp@N=sBqO;t-tV@pj@OHNo!OJYn*WK2w4Oig1=PGwC_ zXH8I8PE1x#Ok++>R8CK3PflV_Qe96|TTo9{QBqrGXMJdBc4=yWYHNaOYlLfRd~Ium zZES;WZFy~Ngl%tpZfu5bY>IAegl=w!Zf}KeZHI4diEnR+Z*Ychaei=diE(d+a&L=r zZ;f(qkaBQ`a&U=qaf5PleR6Vta&wGxafx$ri*#|2ba9e&a*lL!h;(#|b#sk%bB}d& ziFI~}b#{t&c8GR&jdysCcz20-d60W~k$ZcKet(yLfSG@Rm4Jbof`XfZgO!7WoP&g# zgn^=jgq?(ikc5Ssg@l`hg_VVcmxYF$g@}}fhn|LqpoWN=hlQSphMI?mqlbu}hlrtv ziJ6CrmxzU=h=!hshnk6or-_M|iHV?ziK2>#qKb)}iix0#ikgawql$~6i;J0yi=B&$ zq>PKAjEtU)jiZf@rHziKj*F>|jH8Z^rjC!OkBym+jirx{p^%ZIl98yBl&X`Itdy0m zm6orUm#~&_Lxr7i+QEB~r zPKXBfybUXo)DjaFmRaf;#+2riE%t)C$~yn}o*4_)M>rOy7iL$)P2z$3gPnt~dF_#f w4PnbC?W$sQMhO%fejYAXRskL+HU|0u0CSsUMn*K#UjP6A07*qoM6N<$g7)&aN&o-= diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 0d482a5f1a5..096a84dde3d 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -86,7 +86,7 @@ import { ToggleDoublePositionPhase } from "#app/phases/toggle-double-position-ph import { TurnInitPhase } from "#app/phases/turn-init-phase"; import { ShopCursorTarget } from "#app/enums/shop-cursor-target"; import MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; -import { allMysteryEncounters, ANTI_VARIANCE_WEIGHT_MODIFIER, AVERAGE_ENCOUNTERS_PER_RUN_TARGET, BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT, MYSTERY_ENCOUNTER_SPAWN_MAX_WEIGHT, mysteryEncountersByBiome, WEIGHT_INCREMENT_ON_SPAWN_MISS } from "#app/data/mystery-encounters/mystery-encounters"; +import { allMysteryEncounters, ANTI_VARIANCE_WEIGHT_MODIFIER, AVERAGE_ENCOUNTERS_PER_RUN_TARGET, BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT, MYSTERY_ENCOUNTER_SPAWN_MAX_WEIGHT, mysteryEncountersByBiome } from "#app/data/mystery-encounters/mystery-encounters"; import { MysteryEncounterSaveData } from "#app/data/mystery-encounters/mystery-encounter-save-data"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; @@ -1207,12 +1207,10 @@ export default class BattleScene extends SceneBase { // Check for mystery encounter // Can only occur in place of a standard (non-boss) wild battle, waves 10-180 - if (this.isWaveMysteryEncounter(newBattleType, newWaveIndex, mysteryEncounterType) || newBattleType === BattleType.MYSTERY_ENCOUNTER) { + if (this.isWaveMysteryEncounter(newBattleType, newWaveIndex) || newBattleType === BattleType.MYSTERY_ENCOUNTER) { newBattleType = BattleType.MYSTERY_ENCOUNTER; - // Reset base spawn weight + // Reset to base spawn weight this.mysteryEncounterSaveData.encounterSpawnChance = BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT; - } else if (newBattleType === BattleType.WILD) { - this.mysteryEncounterSaveData.encounterSpawnChance += WEIGHT_INCREMENT_ON_SPAWN_MISS; } } @@ -2364,6 +2362,19 @@ export default class BattleScene extends SceneBase { return false; } + /** + * Will search for a specific phase in {@linkcode phaseQueuePrepend} via filter, and remove the first result if a match is found. + * @param phaseFilter filter function + */ + tryRemoveUnshiftedPhase(phaseFilter: (phase: Phase) => boolean): boolean { + const phaseIndex = this.phaseQueuePrepend.findIndex(phaseFilter); + if (phaseIndex > -1) { + this.phaseQueuePrepend.splice(phaseIndex, 1); + return true; + } + return false; + } + /** * Tries to add the input phase to index before target phase in the phaseQueue, else simply calls unshiftPhase() * @param phase {@linkcode Phase} the phase to be added @@ -3125,18 +3136,26 @@ export default class BattleScene extends SceneBase { } } + /** + * Returns if a wave COULD spawn a {@linkcode MysteryEncounter}. + * Even if returns `true`, does not guarantee that a wave will actually be a ME. + * That check is made in {@linkcode BattleScene.isWaveMysteryEncounter} instead. + */ + isMysteryEncounterValidForWave(battleType: BattleType, waveIndex: number): boolean { + const [ lowestMysteryEncounterWave, highestMysteryEncounterWave ] = this.gameMode.getMysteryEncounterLegalWaves(); + return this.gameMode.hasMysteryEncounters && battleType === BattleType.WILD && !this.gameMode.isBoss(waveIndex) && waveIndex < highestMysteryEncounterWave && waveIndex > lowestMysteryEncounterWave; + } + /** * Determines whether a wave should randomly generate a {@linkcode MysteryEncounter}. * Currently, the only modes that MEs are allowed in are Classic and Challenge. * Additionally, MEs cannot spawn outside of waves 10-180 in those modes - * * @param newBattleType * @param waveIndex - * @param sessionDataEncounterType */ - private isWaveMysteryEncounter(newBattleType: BattleType, waveIndex: number, sessionDataEncounterType?: MysteryEncounterType): boolean { + private isWaveMysteryEncounter(newBattleType: BattleType, waveIndex: number): boolean { const [ lowestMysteryEncounterWave, highestMysteryEncounterWave ] = this.gameMode.getMysteryEncounterLegalWaves(); - if (this.gameMode.hasMysteryEncounters && newBattleType === BattleType.WILD && !this.gameMode.isBoss(waveIndex) && waveIndex < highestMysteryEncounterWave && waveIndex > lowestMysteryEncounterWave) { + if (this.isMysteryEncounterValidForWave(newBattleType, waveIndex)) { // Base spawn weight is BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT/256, and increases by WEIGHT_INCREMENT_ON_SPAWN_MISS/256 for each missed attempt at spawning an encounter on a valid floor const sessionEncounterRate = this.mysteryEncounterSaveData.encounterSpawnChance; const encounteredEvents = this.mysteryEncounterSaveData.encounteredEvents; diff --git a/src/data/mystery-encounters/mystery-encounter-pokemon-data.ts b/src/data/custom-pokemon-data.ts similarity index 68% rename from src/data/mystery-encounters/mystery-encounter-pokemon-data.ts rename to src/data/custom-pokemon-data.ts index fc6ce313d41..2e94123fc84 100644 --- a/src/data/mystery-encounters/mystery-encounter-pokemon-data.ts +++ b/src/data/custom-pokemon-data.ts @@ -1,18 +1,20 @@ import { Abilities } from "#enums/abilities"; import { Type } from "#app/data/type"; import { isNullOrUndefined } from "#app/utils"; +import { Nature } from "#enums/nature"; /** * Data that can customize a Pokemon in non-standard ways from its Species - * Currently only used by Mystery Encounters, may need to be renamed if it becomes more widely used + * Currently only used by Mystery Encounters and Mints. */ -export class MysteryEncounterPokemonData { +export class CustomPokemonData { public spriteScale: number; public ability: Abilities | -1; public passive: Abilities | -1; + public nature: Nature | -1; public types: Type[]; - constructor(data?: MysteryEncounterPokemonData | Partial) { + constructor(data?: CustomPokemonData | Partial) { if (!isNullOrUndefined(data)) { Object.assign(this, data); } @@ -20,6 +22,7 @@ export class MysteryEncounterPokemonData { this.spriteScale = this.spriteScale ?? -1; this.ability = this.ability ?? -1; this.passive = this.passive ?? -1; + this.nature = this.nature ?? -1; this.types = this.types ?? []; } } diff --git a/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts b/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts index ab892ae00f2..8dc4eca25bf 100644 --- a/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts +++ b/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts @@ -133,8 +133,8 @@ export const AnOfferYouCantRefuseEncounter: MysteryEncounter = MysteryEncounterOptionBuilder .newOptionWithMode(MysteryEncounterOptionMode.DISABLED_OR_SPECIAL) .withPrimaryPokemonRequirement(new CombinationPokemonRequirement( - new MoveRequirement(EXTORTION_MOVES), - new AbilityRequirement(EXTORTION_ABILITIES)) + new MoveRequirement(EXTORTION_MOVES, true), + new AbilityRequirement(EXTORTION_ABILITIES, true)) ) .withDialogue({ buttonLabel: `${namespace}:option.2.label`, diff --git a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts index b5d47cf6912..d316ab14cde 100644 --- a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts +++ b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts @@ -42,6 +42,8 @@ import { AttackTypeBoosterModifier, BypassSpeedChanceModifier, ContactHeldItemTransferChanceModifier, + GigantamaxAccessModifier, + MegaEvolutionAccessModifier, PokemonHeldItemModifier } from "#app/modifier/modifier"; import i18next from "i18next"; @@ -356,10 +358,17 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = }, ]; } else { - // If player has any evolution/form change items that are valid for their party, will spawn one of those items in addition to a Master Ball - const modifierOptions: ModifierTypeOption[] = [ generateModifierTypeOption(scene, modifierTypes.MASTER_BALL)!, generateModifierTypeOption(scene, modifierTypes.MAX_LURE)! ]; + // If the player has any evolution/form change items that are valid for their party, + // spawn one of those items in addition to Dynamax Band, Mega Band, and Master Ball + const modifierOptions: ModifierTypeOption[] = [ generateModifierTypeOption(scene, modifierTypes.MASTER_BALL)! ]; const specialOptions: ModifierTypeOption[] = []; + if (!scene.findModifier(m => m instanceof MegaEvolutionAccessModifier)) { + modifierOptions.push(generateModifierTypeOption(scene, modifierTypes.MEGA_BRACELET)!); + } + if (!scene.findModifier(m => m instanceof GigantamaxAccessModifier)) { + modifierOptions.push(generateModifierTypeOption(scene, modifierTypes.DYNAMAX_BAND)!); + } const nonRareEvolutionModifier = generateModifierTypeOption(scene, modifierTypes.EVOLUTION_ITEM); if (nonRareEvolutionModifier) { specialOptions.push(nonRareEvolutionModifier); diff --git a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts index be52ab42c9d..57c8aa7a561 100644 --- a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts +++ b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts @@ -28,7 +28,7 @@ import { BattlerIndex } from "#app/battle"; import { Moves } from "#enums/moves"; import { EncounterBattleAnim } from "#app/data/battle-anims"; import { MoveCategory } from "#app/data/move"; -import { MysteryEncounterPokemonData } from "#app/data/mystery-encounters/mystery-encounter-pokemon-data"; +import { CustomPokemonData } from "#app/data/custom-pokemon-data"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; import { EncounterAnim } from "#enums/encounter-anims"; import { Challenges } from "#enums/challenges"; @@ -133,7 +133,7 @@ export const ClowningAroundEncounter: MysteryEncounter = }, { // Blacephalon has the random ability from pool, and 2 entirely random types to fit with the theme of the encounter species: getPokemonSpecies(Species.BLACEPHALON), - mysteryEncounterPokemonData: new MysteryEncounterPokemonData({ ability: ability, types: [ randSeedInt(18), randSeedInt(18) ]}), + customPokemonData: new CustomPokemonData({ ability: ability, types: [ randSeedInt(18), randSeedInt(18) ]}), isBoss: true, moveSet: [ Moves.TRICK, Moves.HYPNOSIS, Moves.SHADOW_BALL, Moves.MIND_BLOWN ] }, @@ -353,15 +353,15 @@ export const ClowningAroundEncounter: MysteryEncounter = newTypes.push(secondType); // Apply the type changes (to both base and fusion, if pokemon is fused) - if (!pokemon.mysteryEncounterPokemonData) { - pokemon.mysteryEncounterPokemonData = new MysteryEncounterPokemonData(); + if (!pokemon.customPokemonData) { + pokemon.customPokemonData = new CustomPokemonData(); } - pokemon.mysteryEncounterPokemonData.types = newTypes; + pokemon.customPokemonData.types = newTypes; if (pokemon.isFusion()) { - if (!pokemon.fusionMysteryEncounterPokemonData) { - pokemon.fusionMysteryEncounterPokemonData = new MysteryEncounterPokemonData(); + if (!pokemon.fusionCustomPokemonData) { + pokemon.fusionCustomPokemonData = new CustomPokemonData(); } - pokemon.fusionMysteryEncounterPokemonData.types = newTypes; + pokemon.fusionCustomPokemonData.types = newTypes; } } }) @@ -426,15 +426,15 @@ function onYesAbilitySwap(scene: BattleScene, resolve) { // Do ability swap const encounter = scene.currentBattle.mysteryEncounter!; if (pokemon.isFusion()) { - if (!pokemon.fusionMysteryEncounterPokemonData) { - pokemon.fusionMysteryEncounterPokemonData = new MysteryEncounterPokemonData(); + if (!pokemon.fusionCustomPokemonData) { + pokemon.fusionCustomPokemonData = new CustomPokemonData(); } - pokemon.fusionMysteryEncounterPokemonData.ability = encounter.misc.ability; + pokemon.fusionCustomPokemonData.ability = encounter.misc.ability; } else { - if (!pokemon.mysteryEncounterPokemonData) { - pokemon.mysteryEncounterPokemonData = new MysteryEncounterPokemonData(); + if (!pokemon.customPokemonData) { + pokemon.customPokemonData = new CustomPokemonData(); } - pokemon.mysteryEncounterPokemonData.ability = encounter.misc.ability; + pokemon.customPokemonData.ability = encounter.misc.ability; } encounter.setDialogueToken("chosenPokemon", pokemon.getNameToRender()); scene.ui.setMode(Mode.MESSAGE).then(() => resolve(true)); diff --git a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts index d7f71194f48..55d7ce0e92d 100644 --- a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts +++ b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts @@ -236,7 +236,7 @@ export const DancingLessonsEncounter: MysteryEncounter = .withOption( MysteryEncounterOptionBuilder .newOptionWithMode(MysteryEncounterOptionMode.DISABLED_OR_SPECIAL) - .withPrimaryPokemonRequirement(new MoveRequirement(DANCING_MOVES)) // Will set option3PrimaryName and option3PrimaryMove dialogue tokens automatically + .withPrimaryPokemonRequirement(new MoveRequirement(DANCING_MOVES, true)) // Will set option3PrimaryName and option3PrimaryMove dialogue tokens automatically .withDialogue({ buttonLabel: `${namespace}:option.3.label`, buttonTooltip: `${namespace}:option.3.tooltip`, diff --git a/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts b/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts index 380662ca817..889868519d2 100644 --- a/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts +++ b/src/data/mystery-encounters/encounters/fight-or-flight-encounter.ts @@ -145,7 +145,7 @@ export const FightOrFlightEncounter: MysteryEncounter = .withOption( MysteryEncounterOptionBuilder .newOptionWithMode(MysteryEncounterOptionMode.DISABLED_OR_SPECIAL) - .withPrimaryPokemonRequirement(new MoveRequirement(STEALING_MOVES)) // Will set option2PrimaryName and option2PrimaryMove dialogue tokens automatically + .withPrimaryPokemonRequirement(new MoveRequirement(STEALING_MOVES, true)) // Will set option2PrimaryName and option2PrimaryMove dialogue tokens automatically .withDialogue({ buttonLabel: `${namespace}:option.2.label`, buttonTooltip: `${namespace}:option.2.tooltip`, diff --git a/src/data/mystery-encounters/encounters/part-timer-encounter.ts b/src/data/mystery-encounters/encounters/part-timer-encounter.ts index 17a3a366569..092d2ab2673 100644 --- a/src/data/mystery-encounters/encounters/part-timer-encounter.ts +++ b/src/data/mystery-encounters/encounters/part-timer-encounter.ts @@ -227,7 +227,7 @@ export const PartTimerEncounter: MysteryEncounter = .withOption( MysteryEncounterOptionBuilder .newOptionWithMode(MysteryEncounterOptionMode.DISABLED_OR_SPECIAL) - .withPrimaryPokemonRequirement(new MoveRequirement(CHARMING_MOVES)) // Will set option3PrimaryName and option3PrimaryMove dialogue tokens automatically + .withPrimaryPokemonRequirement(new MoveRequirement(CHARMING_MOVES, true)) // Will set option3PrimaryName and option3PrimaryMove dialogue tokens automatically .withDialogue({ buttonLabel: `${namespace}:option.3.label`, buttonTooltip: `${namespace}:option.3.tooltip`, diff --git a/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts b/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts index 5b609a2b1c3..d30c97b27de 100644 --- a/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts +++ b/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts @@ -138,7 +138,7 @@ export const ShadyVitaminDealerEncounter: MysteryEncounter = newNature = randSeedInt(25) as Nature; } - chosenPokemon.nature = newNature; + chosenPokemon.customPokemonData.nature = newNature; encounter.setDialogueToken("newNature", getNatureName(newNature)); queueEncounterMessage(scene, `${namespace}:cheap_side_effects`); setEncounterExp(scene, [ chosenPokemon.id ], 100); diff --git a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts index 3a4bf465a78..8ea19e1225b 100644 --- a/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts +++ b/src/data/mystery-encounters/encounters/slumbering-snorlax-encounter.ts @@ -18,7 +18,7 @@ import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode import { PartyHealPhase } from "#app/phases/party-heal-phase"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; import { BerryType } from "#enums/berry-type"; -import { MysteryEncounterPokemonData } from "#app/data/mystery-encounters/mystery-encounter-pokemon-data"; +import { CustomPokemonData } from "#app/data/custom-pokemon-data"; /** i18n namespace for the encounter */ const namespace = "mysteryEncounters/slumberingSnorlax"; @@ -72,7 +72,7 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = stackCount: 2 }, ], - mysteryEncounterPokemonData: new MysteryEncounterPokemonData({ spriteScale: 1.25 }), + customPokemonData: new CustomPokemonData({ spriteScale: 1.25 }), aiType: AiType.SMART // Required to ensure Snorlax uses Sleep Talk while it is asleep }; const config: EnemyPartyConfig = { @@ -143,7 +143,7 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = .withOption( MysteryEncounterOptionBuilder .newOptionWithMode(MysteryEncounterOptionMode.DISABLED_OR_SPECIAL) - .withPrimaryPokemonRequirement(new MoveRequirement(STEALING_MOVES)) + .withPrimaryPokemonRequirement(new MoveRequirement(STEALING_MOVES, true)) .withDialogue({ buttonLabel: `${namespace}:option.3.label`, buttonTooltip: `${namespace}:option.3.tooltip`, diff --git a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts index 945e7ee188d..9c10d33d019 100644 --- a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts @@ -25,6 +25,7 @@ import { achvs } from "#app/system/achv"; import { modifierTypes, PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; import { Type } from "#app/data/type"; import { getPokeballTintColor } from "#app/data/pokeball"; +import { PokemonHeldItemModifier } from "#app/modifier/modifier"; /** the i18n namespace for the encounter */ const namespace = "mysteryEncounters/theExpertPokemonBreeder"; @@ -163,7 +164,7 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = if (pokemon2CommonEggs > 0) { const eggsText = i18next.t(`${namespace}:numEggs`, { count: pokemon2CommonEggs, rarity: i18next.t("egg:defaultTier") }); pokemon2Tooltip += i18next.t(`${namespace}:eggs_tooltip`, { eggs: eggsText }); - encounter.setDialogueToken("pokemon1CommonEggs", eggsText); + encounter.setDialogueToken("pokemon2CommonEggs", eggsText); } encounter.options[1].dialogue!.buttonTooltip = pokemon2Tooltip; @@ -221,7 +222,7 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = encounter.misc.chosenPokemon = pokemon1; encounter.setDialogueToken("chosenPokemon", pokemon1.getNameToRender()); const eggOptions = getEggOptions(scene, pokemon1CommonEggs, pokemon1RareEggs); - setEncounterRewards(scene, { fillRemaining: true }, eggOptions); + setEncounterRewards(scene, { fillRemaining: true }, eggOptions, () => doPostEncounterCleanup(scene)); // Remove all Pokemon from the party except the chosen Pokemon removePokemonFromPartyAndStoreHeldItems(scene, encounter, pokemon1); @@ -247,9 +248,6 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = encounter.onGameOver = onGameOver; await initBattleWithEnemyConfig(scene, config); }) - .withPostOptionPhase(async (scene: BattleScene) => { - await doPostEncounterCleanup(scene); - }) .build() ) .withOption( @@ -273,7 +271,7 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = encounter.misc.chosenPokemon = pokemon2; encounter.setDialogueToken("chosenPokemon", pokemon2.getNameToRender()); const eggOptions = getEggOptions(scene, pokemon2CommonEggs, pokemon2RareEggs); - setEncounterRewards(scene, { fillRemaining: true }, eggOptions); + setEncounterRewards(scene, { fillRemaining: true }, eggOptions, () => doPostEncounterCleanup(scene)); // Remove all Pokemon from the party except the chosen Pokemon removePokemonFromPartyAndStoreHeldItems(scene, encounter, pokemon2); @@ -299,9 +297,6 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = encounter.onGameOver = onGameOver; await initBattleWithEnemyConfig(scene, config); }) - .withPostOptionPhase(async (scene: BattleScene) => { - await doPostEncounterCleanup(scene); - }) .build() ) .withOption( @@ -325,7 +320,7 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = encounter.misc.chosenPokemon = pokemon3; encounter.setDialogueToken("chosenPokemon", pokemon3.getNameToRender()); const eggOptions = getEggOptions(scene, pokemon3CommonEggs, pokemon3RareEggs); - setEncounterRewards(scene, { fillRemaining: true }, eggOptions); + setEncounterRewards(scene, { fillRemaining: true }, eggOptions, () => doPostEncounterCleanup(scene)); // Remove all Pokemon from the party except the chosen Pokemon removePokemonFromPartyAndStoreHeldItems(scene, encounter, pokemon3); @@ -351,9 +346,6 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = encounter.onGameOver = onGameOver; await initBattleWithEnemyConfig(scene, config); }) - .withPostOptionPhase(async (scene: BattleScene) => { - await doPostEncounterCleanup(scene); - }) .build() ) .withOutroDialogue([ @@ -521,19 +513,19 @@ function checkAchievement(scene: BattleScene) { } } -async function restorePartyAndHeldItems(scene: BattleScene) { +function restorePartyAndHeldItems(scene: BattleScene) { const encounter = scene.currentBattle.mysteryEncounter!; // Restore original party scene.getParty().push(...encounter.misc.originalParty); // Restore held items const originalHeldItems = encounter.misc.originalPartyHeldItems; - originalHeldItems.forEach(pokemonHeldItemsList => { + originalHeldItems.forEach((pokemonHeldItemsList: PokemonHeldItemModifier[]) => { pokemonHeldItemsList.forEach(heldItem => { scene.addModifier(heldItem, true, false, false, true); }); }); - await scene.updateModifiers(true); + scene.updateModifiers(true); } function onGameOver(scene: BattleScene) { @@ -609,13 +601,13 @@ function onGameOver(scene: BattleScene) { return false; } -async function doPostEncounterCleanup(scene: BattleScene) { +function doPostEncounterCleanup(scene: BattleScene) { const encounter = scene.currentBattle.mysteryEncounter!; if (!encounter.misc.encounterFailed) { // Give achievement if in Space biome checkAchievement(scene); // Give 20 friendship to the chosen pokemon encounter.misc.chosenPokemon.addFriendship(FRIENDSHIP_ADDED); - await restorePartyAndHeldItems(scene); + restorePartyAndHeldItems(scene); } } diff --git a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts index 03cf86d06a5..397d2af9522 100644 --- a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts @@ -14,7 +14,7 @@ import { BattlerIndex } from "#app/battle"; import { BattlerTagType } from "#enums/battler-tag-type"; import { BerryType } from "#enums/berry-type"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; -import { MysteryEncounterPokemonData } from "#app/data/mystery-encounters/mystery-encounter-pokemon-data"; +import { CustomPokemonData } from "#app/data/custom-pokemon-data"; import { Stat } from "#enums/stat"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; @@ -79,7 +79,7 @@ export const TheStrongStuffEncounter: MysteryEncounter = species: getPokemonSpecies(Species.SHUCKLE), isBoss: true, bossSegments: 5, - mysteryEncounterPokemonData: new MysteryEncounterPokemonData({ spriteScale: 1.25 }), + customPokemonData: new CustomPokemonData({ spriteScale: 1.25 }), nature: Nature.BOLD, moveSet: [ Moves.INFESTATION, Moves.SALT_CURE, Moves.GASTRO_ACID, Moves.HEAL_ORDER ], modifierConfigs: [ diff --git a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts index 13594f273d9..b7ce3bab48c 100644 --- a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts +++ b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts @@ -210,7 +210,7 @@ export const UncommonBreedEncounter: MysteryEncounter = .withOption( MysteryEncounterOptionBuilder .newOptionWithMode(MysteryEncounterOptionMode.DISABLED_OR_SPECIAL) - .withPrimaryPokemonRequirement(new MoveRequirement(CHARMING_MOVES)) // Will set option2PrimaryName and option2PrimaryMove dialogue tokens automatically + .withPrimaryPokemonRequirement(new MoveRequirement(CHARMING_MOVES, true)) // Will set option2PrimaryName and option2PrimaryMove dialogue tokens automatically .withDialogue({ buttonLabel: `${namespace}:option.3.label`, buttonTooltip: `${namespace}:option.3.tooltip`, diff --git a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts index 6e2f8352480..b97a22dbe51 100644 --- a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts +++ b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts @@ -12,7 +12,7 @@ import { IntegerHolder, isNullOrUndefined, randSeedInt, randSeedShuffle } from " import PokemonSpecies, { allSpecies, getPokemonSpecies } from "#app/data/pokemon-species"; import { HiddenAbilityRateBoosterModifier, PokemonFormChangeItemModifier, PokemonHeldItemModifier } from "#app/modifier/modifier"; import { achvs } from "#app/system/achv"; -import { MysteryEncounterPokemonData } from "#app/data/mystery-encounters/mystery-encounter-pokemon-data"; +import { CustomPokemonData } from "#app/data/custom-pokemon-data"; import { showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { modifierTypes } from "#app/modifier/modifier-type"; import i18next from "#app/plugins/i18n"; @@ -379,10 +379,10 @@ async function doNewTeamPostProcess(scene: BattleScene, transformations: Pokemon newType = randSeedInt(18) as Type; } newTypes.push(newType); - if (!newPokemon.mysteryEncounterPokemonData) { - newPokemon.mysteryEncounterPokemonData = new MysteryEncounterPokemonData(); + if (!newPokemon.customPokemonData) { + newPokemon.customPokemonData = new CustomPokemonData(); } - newPokemon.mysteryEncounterPokemonData.types = newTypes; + newPokemon.customPokemonData.types = newTypes; for (const item of transformation.heldItems) { item.pokemonId = newPokemon.id; diff --git a/src/data/mystery-encounters/mystery-encounter-requirements.ts b/src/data/mystery-encounters/mystery-encounter-requirements.ts index 86e04e80807..a57cedc8fa3 100644 --- a/src/data/mystery-encounters/mystery-encounter-requirements.ts +++ b/src/data/mystery-encounters/mystery-encounter-requirements.ts @@ -15,6 +15,7 @@ import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { AttackTypeBoosterModifier } from "#app/modifier/modifier"; import { AttackTypeBoosterModifierType } from "#app/modifier/modifier-type"; import { SpeciesFormKey } from "#enums/species-form-key"; +import { allAbilities } from "#app/data/ability"; export interface EncounterRequirement { meetsRequirement(scene: BattleScene): boolean; // Boolean to see if a requirement is met @@ -476,9 +477,11 @@ export class MoveRequirement extends EncounterPokemonRequirement { requiredMoves: Moves[] = []; minNumberOfPokemon: number; invertQuery: boolean; + excludeDisallowedPokemon: boolean; - constructor(moves: Moves | Moves[], minNumberOfPokemon: number = 1, invertQuery: boolean = false) { + constructor(moves: Moves | Moves[], excludeDisallowedPokemon: boolean, minNumberOfPokemon: number = 1, invertQuery: boolean = false) { super(); + this.excludeDisallowedPokemon = excludeDisallowedPokemon; this.minNumberOfPokemon = minNumberOfPokemon; this.invertQuery = invertQuery; this.requiredMoves = Array.isArray(moves) ? moves : [ moves ]; @@ -494,10 +497,15 @@ export class MoveRequirement extends EncounterPokemonRequirement { override queryParty(partyPokemon: PlayerPokemon[]): PlayerPokemon[] { if (!this.invertQuery) { - return partyPokemon.filter((pokemon) => this.requiredMoves.filter((reqMove) => pokemon.moveset.filter((move) => move?.moveId === reqMove).length > 0).length > 0); + // get the Pokemon with at least one move in the required moves list + return partyPokemon.filter((pokemon) => + (!this.excludeDisallowedPokemon || pokemon.isAllowedInBattle()) + && pokemon.moveset.some((move) => move?.moveId && this.requiredMoves.includes(move.moveId))); } else { // for an inverted query, we only want to get the pokemon that don't have ANY of the listed moves - return partyPokemon.filter((pokemon) => this.requiredMoves.filter((reqMove) => pokemon.moveset.filter((move) => move?.moveId === reqMove).length === 0).length === 0); + return partyPokemon.filter((pokemon) => + (!this.excludeDisallowedPokemon || pokemon.isAllowedInBattle()) + && !pokemon.moveset.some((move) => move?.moveId && this.requiredMoves.includes(move.moveId))); } } @@ -559,9 +567,11 @@ export class AbilityRequirement extends EncounterPokemonRequirement { requiredAbilities: Abilities[]; minNumberOfPokemon: number; invertQuery: boolean; + excludeDisallowedPokemon: boolean; - constructor(abilities: Abilities | Abilities[], minNumberOfPokemon: number = 1, invertQuery: boolean = false) { + constructor(abilities: Abilities | Abilities[], excludeDisallowedPokemon: boolean, minNumberOfPokemon: number = 1, invertQuery: boolean = false) { super(); + this.excludeDisallowedPokemon = excludeDisallowedPokemon; this.minNumberOfPokemon = minNumberOfPokemon; this.invertQuery = invertQuery; this.requiredAbilities = Array.isArray(abilities) ? abilities : [ abilities ]; @@ -577,16 +587,21 @@ export class AbilityRequirement extends EncounterPokemonRequirement { override queryParty(partyPokemon: PlayerPokemon[]): PlayerPokemon[] { if (!this.invertQuery) { - return partyPokemon.filter((pokemon) => this.requiredAbilities.some((ability) => pokemon.getAbility().id === ability)); + return partyPokemon.filter((pokemon) => + (!this.excludeDisallowedPokemon || pokemon.isAllowedInBattle()) + && this.requiredAbilities.some((ability) => pokemon.hasAbility(ability, false))); } else { - // for an inverted query, we only want to get the pokemon that don't have ANY of the listed abilitiess - return partyPokemon.filter((pokemon) => this.requiredAbilities.filter((ability) => pokemon.getAbility().id === ability).length === 0); + // for an inverted query, we only want to get the pokemon that don't have ANY of the listed abilities + return partyPokemon.filter((pokemon) => + (!this.excludeDisallowedPokemon || pokemon.isAllowedInBattle()) + && this.requiredAbilities.filter((ability) => pokemon.hasAbility(ability, false)).length === 0); } } - override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { - if (pokemon?.getAbility().id && this.requiredAbilities.some(a => pokemon.getAbility().id === a)) { - return [ "ability", pokemon.getAbility().name ]; + override getDialogueToken(_scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { + const matchingAbility = this.requiredAbilities.find(a => pokemon?.hasAbility(a, false)); + if (!isNullOrUndefined(matchingAbility)) { + return [ "ability", allAbilities[matchingAbility].name ]; } return [ "ability", "" ]; } diff --git a/src/data/mystery-encounters/mystery-encounter.ts b/src/data/mystery-encounters/mystery-encounter.ts index 7e175957e21..ee9eb159e10 100644 --- a/src/data/mystery-encounters/mystery-encounter.ts +++ b/src/data/mystery-encounters/mystery-encounter.ts @@ -325,7 +325,7 @@ export default class MysteryEncounter implements IMysteryEncounter { if (activeMon.length > 0) { this.primaryPokemon = activeMon[0]; } else { - this.primaryPokemon = scene.getParty().filter(p => !p.isFainted())[0]; + this.primaryPokemon = scene.getParty().filter(p => p.isAllowedInBattle())[0]; } return true; } diff --git a/src/data/mystery-encounters/utils/encounter-phase-utils.ts b/src/data/mystery-encounters/utils/encounter-phase-utils.ts index 485b955f998..5cd2fbffd5f 100644 --- a/src/data/mystery-encounters/utils/encounter-phase-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-phase-utils.ts @@ -27,7 +27,7 @@ import { Status, StatusEffect } from "#app/data/status-effect"; import { TrainerConfig, trainerConfigs, TrainerSlot } from "#app/data/trainer-config"; import PokemonSpecies from "#app/data/pokemon-species"; import { Egg, IEggOptions } from "#app/data/egg"; -import { MysteryEncounterPokemonData } from "#app/data/mystery-encounters/mystery-encounter-pokemon-data"; +import { CustomPokemonData } from "#app/data/custom-pokemon-data"; import HeldModifierConfig from "#app/interfaces/held-modifier-config"; import { MovePhase } from "#app/phases/move-phase"; import { EggLapsePhase } from "#app/phases/egg-lapse-phase"; @@ -71,7 +71,7 @@ export interface EnemyPokemonConfig { nickname?: string; bossSegments?: number; bossSegmentModifier?: number; // Additive to the determined segment number - mysteryEncounterPokemonData?: MysteryEncounterPokemonData; + customPokemonData?: CustomPokemonData; formIndex?: number; abilityIndex?: number; level?: number; @@ -145,7 +145,7 @@ export async function initBattleWithEnemyConfig(scene: BattleScene, partyConfig: newTrainer.setVisible(false); scene.field.add(newTrainer); scene.currentBattle.trainer = newTrainer; - loadEnemyAssets.push(newTrainer.loadAssets()); + loadEnemyAssets.push(newTrainer.loadAssets().then(() => newTrainer.initSprite())); battle.enemyLevels = scene.currentBattle.trainer.getPartyLevels(scene.currentBattle.waveIndex); } else { @@ -250,8 +250,8 @@ export async function initBattleWithEnemyConfig(scene: BattleScene, partyConfig: } // Set custom mystery encounter data fields (such as sprite scale, custom abilities, types, etc.) - if (!isNullOrUndefined(config.mysteryEncounterPokemonData)) { - enemyPokemon.mysteryEncounterPokemonData = config.mysteryEncounterPokemonData; + if (!isNullOrUndefined(config.customPokemonData)) { + enemyPokemon.customPokemonData = config.customPokemonData; } // Set Boss diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 0afbbf105e2..7f2b4ec015d 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -62,7 +62,7 @@ import { ToggleDoublePositionPhase } from "#app/phases/toggle-double-position-ph import { Challenges } from "#enums/challenges"; import { PokemonAnimType } from "#enums/pokemon-anim-type"; import { PLAYER_PARTY_MAX_SIZE } from "#app/constants"; -import { MysteryEncounterPokemonData } from "#app/data/mystery-encounters/mystery-encounter-pokemon-data"; +import { CustomPokemonData } from "#app/data/custom-pokemon-data"; import { SwitchType } from "#enums/switch-type"; import { SpeciesFormKey } from "#enums/species-form-key"; import { BASE_HIDDEN_ABILITY_CHANCE, BASE_SHINY_CHANCE, SHINY_EPIC_CHANCE, SHINY_VARIANT_CHANCE } from "#app/data/balance/rates"; @@ -114,7 +114,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { public fusionVariant: Variant; public fusionGender: Gender; public fusionLuck: integer; - public fusionMysteryEncounterPokemonData: MysteryEncounterPokemonData | null; + public fusionCustomPokemonData: CustomPokemonData | null; private summonDataPrimer: PokemonSummonData | null; @@ -122,7 +122,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { public battleData: PokemonBattleData; public battleSummonData: PokemonBattleSummonData; public turnData: PokemonTurnData; - public mysteryEncounterPokemonData: MysteryEncounterPokemonData; + public customPokemonData: CustomPokemonData; /** Used by Mystery Encounters to execute pokemon-specific logic (such as stat boosts) at start of battle */ public mysteryEncounterBattleEffects?: (pokemon: Pokemon) => void; @@ -193,7 +193,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } this.nature = dataSource.nature || 0 as Nature; this.nickname = dataSource.nickname; - this.natureOverride = dataSource.natureOverride !== undefined ? dataSource.natureOverride : -1; this.moveset = dataSource.moveset; this.status = dataSource.status!; // TODO: is this bang correct? this.friendship = dataSource.friendship !== undefined ? dataSource.friendship : this.species.baseFriendship; @@ -212,9 +211,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.fusionVariant = dataSource.fusionVariant || 0; this.fusionGender = dataSource.fusionGender; this.fusionLuck = dataSource.fusionLuck; - this.fusionMysteryEncounterPokemonData = dataSource.fusionMysteryEncounterPokemonData; + this.fusionCustomPokemonData = dataSource.fusionCustomPokemonData; this.usedTMs = dataSource.usedTMs ?? []; - this.mysteryEncounterPokemonData = new MysteryEncounterPokemonData(dataSource.mysteryEncounterPokemonData); + this.customPokemonData = new CustomPokemonData(dataSource.customPokemonData); } else { this.id = Utils.randSeedInt(4294967296); this.ivs = ivs || Utils.getIvsFromId(this.id); @@ -235,7 +234,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.variant = this.shiny ? this.generateVariant() : 0; } - this.mysteryEncounterPokemonData = new MysteryEncounterPokemonData(); + this.customPokemonData = new CustomPokemonData(); if (nature !== undefined) { this.setNature(nature); @@ -243,8 +242,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.generateNature(); } - this.natureOverride = -1; - this.friendship = species.baseFriendship; this.metLevel = level; this.metBiome = scene.currentBattle ? scene.arena.biomeType : -1; @@ -593,8 +590,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const formKey = this.getFormKey(); if (this.isMax() === true || formKey === "segin-starmobile" || formKey === "schedar-starmobile" || formKey === "navi-starmobile" || formKey === "ruchbah-starmobile" || formKey === "caph-starmobile") { return 1.5; - } else if (this.mysteryEncounterPokemonData.spriteScale > 0) { - return this.mysteryEncounterPokemonData.spriteScale; + } else if (this.customPokemonData.spriteScale > 0) { + return this.customPokemonData.spriteScale; } return 1; } @@ -1023,7 +1020,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } getNature(): Nature { - return this.natureOverride !== -1 ? this.natureOverride : this.nature; + return this.customPokemonData.nature !== -1 ? this.customPokemonData.nature : this.nature; } setNature(nature: Nature): void { @@ -1198,15 +1195,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (!types.length || !includeTeraType) { if (!ignoreOverride && this.summonData?.types && this.summonData.types.length > 0) { this.summonData.types.forEach(t => types.push(t)); - } else if (this.mysteryEncounterPokemonData.types && this.mysteryEncounterPokemonData.types.length > 0) { + } else if (this.customPokemonData.types && this.customPokemonData.types.length > 0) { // "Permanent" override for a Pokemon's normal types, currently only used by Mystery Encounters - types.push(this.mysteryEncounterPokemonData.types[0]); + types.push(this.customPokemonData.types[0]); // Fusing a Pokemon onto something with "permanently changed" types will still apply the fusion's types as normal const fusionSpeciesForm = this.getFusionSpeciesForm(ignoreOverride); if (fusionSpeciesForm) { // Check if the fusion Pokemon also had "permanently changed" types - const fusionMETypes = this.fusionMysteryEncounterPokemonData?.types; + const fusionMETypes = this.fusionCustomPokemonData?.types; if (fusionMETypes && fusionMETypes.length >= 2 && fusionMETypes[1] !== types[0]) { types.push(fusionMETypes[1]); } else if (fusionMETypes && fusionMETypes.length === 1 && fusionMETypes[0] !== types[0]) { @@ -1218,8 +1215,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } - if (types.length === 1 && this.mysteryEncounterPokemonData.types.length >= 2) { - types.push(this.mysteryEncounterPokemonData.types[1]); + if (types.length === 1 && this.customPokemonData.types.length >= 2) { + types.push(this.customPokemonData.types[1]); } } else { const speciesForm = this.getSpeciesForm(ignoreOverride); @@ -1230,7 +1227,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (fusionSpeciesForm) { // Check if the fusion Pokemon also had "permanently changed" types // Otherwise, use standard fusion type logic - const fusionMETypes = this.fusionMysteryEncounterPokemonData?.types; + const fusionMETypes = this.fusionCustomPokemonData?.types; if (fusionMETypes && fusionMETypes.length >= 2 && fusionMETypes[1] !== types[0]) { types.push(fusionMETypes[1]); } else if (fusionMETypes && fusionMETypes.length === 1 && fusionMETypes[0] !== types[0]) { @@ -1262,6 +1259,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } + // If both types are the same (can happen in weird custom typing scenarios), reduce to single type + if (types.length > 1 && types[0] === types[1]) { + types.splice(0, 1); + } + return types; } @@ -1288,14 +1290,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return allAbilities[Overrides.OPP_ABILITY_OVERRIDE]; } if (this.isFusion()) { - if (!isNullOrUndefined(this.fusionMysteryEncounterPokemonData?.ability) && this.fusionMysteryEncounterPokemonData.ability !== -1) { - return allAbilities[this.fusionMysteryEncounterPokemonData.ability]; + if (!isNullOrUndefined(this.fusionCustomPokemonData?.ability) && this.fusionCustomPokemonData.ability !== -1) { + return allAbilities[this.fusionCustomPokemonData.ability]; } else { return allAbilities[this.getFusionSpeciesForm(ignoreOverride).getAbility(this.fusionAbilityIndex)]; } } - if (!isNullOrUndefined(this.mysteryEncounterPokemonData.ability) && this.mysteryEncounterPokemonData.ability !== -1) { - return allAbilities[this.mysteryEncounterPokemonData.ability]; + if (!isNullOrUndefined(this.customPokemonData.ability) && this.customPokemonData.ability !== -1) { + return allAbilities[this.customPokemonData.ability]; } let abilityId = this.getSpeciesForm(ignoreOverride).getAbility(this.abilityIndex); if (abilityId === Abilities.NONE) { @@ -1318,8 +1320,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (Overrides.OPP_PASSIVE_ABILITY_OVERRIDE && !this.isPlayer()) { return allAbilities[Overrides.OPP_PASSIVE_ABILITY_OVERRIDE]; } - if (!isNullOrUndefined(this.mysteryEncounterPokemonData.passive) && this.mysteryEncounterPokemonData.passive !== -1) { - return allAbilities[this.mysteryEncounterPokemonData.passive]; + if (!isNullOrUndefined(this.customPokemonData.passive) && this.customPokemonData.passive !== -1) { + return allAbilities[this.customPokemonData.passive]; } let starterSpeciesId = this.species.speciesId; @@ -2018,7 +2020,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.fusionVariant = 0; this.fusionGender = 0; this.fusionLuck = 0; - this.fusionMysteryEncounterPokemonData = null; + this.fusionCustomPokemonData = null; this.generateName(); this.calculateStats(); @@ -2187,7 +2189,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.moveset.push(new PokemonMove(movePool[index][0], 0, 0)); } - this.scene.triggerPokemonFormChange(this, SpeciesFormChangeMoveLearnedTrigger); + // Trigger FormChange, except for enemy Pokemon during Mystery Encounters, to avoid crashes + if (this.isPlayer() || !this.scene.currentBattle?.isBattleMysteryEncounter() || !this.scene.currentBattle?.mysteryEncounter) { + this.scene.triggerPokemonFormChange(this, SpeciesFormChangeMoveLearnedTrigger); + } } trySelectMove(moveIndex: integer, ignorePp?: boolean): boolean { @@ -4292,12 +4297,33 @@ export class PlayerPokemon extends Pokemon { changeForm(formChange: SpeciesFormChange): Promise { return new Promise(resolve => { + const previousFormIndex = this.formIndex; this.formIndex = Math.max(this.species.forms.findIndex(f => f.formKey === formChange.formKey), 0); this.generateName(); const abilityCount = this.getSpeciesForm().getAbilityCount(); if (this.abilityIndex >= abilityCount) { // Shouldn't happen this.abilityIndex = abilityCount - 1; } + + // In cases where a form change updates the type of a Pokemon from its previous form (Arceus, Silvally, Castform, etc.), + // persist that type change in customPokemonData if necessary + const baseForm = this.species.forms[previousFormIndex]; + const baseFormTypes = [ baseForm.type1, baseForm.type2 ]; + if (this.customPokemonData.types.length > 0) { + if (this.getSpeciesForm().type1 !== baseFormTypes[0]) { + this.customPokemonData.types[0] = this.getSpeciesForm().type1; + } + + const type2 = this.getSpeciesForm().type2; + if (!isNullOrUndefined(type2) && type2 !== baseFormTypes[1]) { + if (this.customPokemonData.types.length > 1) { + this.customPokemonData.types[1] = type2; + } else { + this.customPokemonData.types.push(type2); + } + } + } + this.compatibleTms.splice(0, this.compatibleTms.length); this.generateCompatibleTms(); const updateAndResolve = () => { @@ -4334,7 +4360,7 @@ export class PlayerPokemon extends Pokemon { this.fusionVariant = pokemon.variant; this.fusionGender = pokemon.gender; this.fusionLuck = pokemon.luck; - this.fusionMysteryEncounterPokemonData = pokemon.mysteryEncounterPokemonData; + this.fusionCustomPokemonData = pokemon.customPokemonData; if ((pokemon.pauseEvolutions) || (this.pauseEvolutions)) { this.pauseEvolutions = true; } diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index 674c5f47c88..8e7853a41bb 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -1126,7 +1126,7 @@ class EvolutionItemModifierTypeGenerator extends ModifierTypeGenerator { } class FormChangeItemModifierTypeGenerator extends ModifierTypeGenerator { - constructor(rare: boolean) { + constructor(isRareFormChangeItem: boolean) { super((party: Pokemon[], pregenArgs?: any[]) => { if (pregenArgs && (pregenArgs.length === 1) && (pregenArgs[0] in FormChangeItem)) { return new FormChangeItemModifierType(pregenArgs[0] as FormChangeItem); @@ -1167,7 +1167,7 @@ class FormChangeItemModifierTypeGenerator extends ModifierTypeGenerator { } return formChangeItemTriggers; }).flat()) - ].flat().flatMap(fc => fc.item).filter(i => (i && i < 100) === rare); + ].flat().flatMap(fc => fc.item).filter(i => (i && i < 100) === isRareFormChangeItem); // convert it into a set to remove duplicate values, which can appear when the same species with a potential form change is in the party. if (!formChangeItemPool.length) { diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 2cd96496f45..b699c2483c9 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -2181,7 +2181,7 @@ export class PokemonNatureChangeModifier extends ConsumablePokemonModifier { * @returns */ override apply(playerPokemon: PlayerPokemon): boolean { - playerPokemon.natureOverride = this.nature; + playerPokemon.customPokemonData.nature = this.nature; let speciesId = playerPokemon.species.speciesId; playerPokemon.scene.gameData.dexData[speciesId].natureAttr |= 1 << (this.nature + 1); diff --git a/src/phases/encounter-phase.ts b/src/phases/encounter-phase.ts index 84f07f3ee94..b7071c4cc6f 100644 --- a/src/phases/encounter-phase.ts +++ b/src/phases/encounter-phase.ts @@ -35,6 +35,7 @@ import { getEncounterText } from "#app/data/mystery-encounters/utils/encounter-d import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; import { getGoldenBugNetSpecies } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import { Biome } from "#enums/biome"; +import { WEIGHT_INCREMENT_ON_SPAWN_MISS } from "#app/data/mystery-encounters/mystery-encounters"; export class EncounterPhase extends BattlePhase { private loaded: boolean; @@ -68,7 +69,7 @@ export class EncounterPhase extends BattlePhase { this.scene.executeWithSeedOffset(() => { const currentSessionEncounterType = battle.mysteryEncounterType; battle.mysteryEncounter = this.scene.getMysteryEncounter(currentSessionEncounterType); - }, battle.waveIndex << 4); + }, battle.waveIndex * 16); } const mysteryEncounter = battle.mysteryEncounter; if (mysteryEncounter) { @@ -251,6 +252,13 @@ export class EncounterPhase extends BattlePhase { this.scene.updateModifiers(true); }*/ + const { battleType, waveIndex } = this.scene.currentBattle; + if (this.scene.isMysteryEncounterValidForWave(battleType, waveIndex) && !this.scene.currentBattle.isBattleMysteryEncounter()) { + // Increment ME spawn chance if an ME could have spawned but did not + // Only do this AFTER session has been saved to avoid duplicating increments + this.scene.mysteryEncounterSaveData.encounterSpawnChance += WEIGHT_INCREMENT_ON_SPAWN_MISS; + } + for (const pokemon of this.scene.getParty()) { if (pokemon) { pokemon.resetBattleData(); diff --git a/src/phases/mystery-encounter-phases.ts b/src/phases/mystery-encounter-phases.ts index 0166b2d6abd..49e78fa5369 100644 --- a/src/phases/mystery-encounter-phases.ts +++ b/src/phases/mystery-encounter-phases.ts @@ -402,7 +402,7 @@ export class MysteryEncounterBattlePhase extends Phase { } } - const availablePartyMembers = scene.getParty().filter(p => !p.isFainted()); + const availablePartyMembers = scene.getParty().filter(p => p.isAllowedInBattle()); if (!availablePartyMembers[0].isOnField()) { scene.pushPhase(new SummonPhase(scene, 0)); diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index 8240b6bcf84..cddc5798872 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -12,7 +12,7 @@ import { loadBattlerTag } from "../data/battler-tags"; import { Biome } from "#enums/biome"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import { MysteryEncounterPokemonData } from "#app/data/mystery-encounters/mystery-encounter-pokemon-data"; +import { CustomPokemonData } from "#app/data/custom-pokemon-data"; export default class PokemonData { public id: integer; @@ -33,7 +33,6 @@ export default class PokemonData { public stats: integer[]; public ivs: integer[]; public nature: Nature; - public natureOverride: Nature | -1; public moveset: (PokemonMove | null)[]; public status: Status | null; public friendship: integer; @@ -54,14 +53,20 @@ export default class PokemonData { public fusionVariant: Variant; public fusionGender: Gender; public fusionLuck: integer; - public fusionMysteryEncounterPokemonData: MysteryEncounterPokemonData; public boss: boolean; public bossSegments?: integer; public summonData: PokemonSummonData; + /** Data that can customize a Pokemon in non-standard ways from its Species */ - public mysteryEncounterPokemonData: MysteryEncounterPokemonData; + public customPokemonData: CustomPokemonData; + public fusionCustomPokemonData: CustomPokemonData; + + // Deprecated attributes, needed for now to allow SessionData migration (see PR#4619 comments) + public natureOverride: Nature | -1; + public mysteryEncounterPokemonData: CustomPokemonData | null; + public fusionMysteryEncounterPokemonData: CustomPokemonData | null; constructor(source: Pokemon | any, forHistory: boolean = false) { const sourcePokemon = source instanceof Pokemon ? source : null; @@ -107,9 +112,13 @@ export default class PokemonData { this.fusionVariant = source.fusionVariant; this.fusionGender = source.fusionGender; this.fusionLuck = source.fusionLuck !== undefined ? source.fusionLuck : (source.fusionShiny ? source.fusionVariant + 1 : 0); + this.fusionCustomPokemonData = new CustomPokemonData(source.fusionCustomPokemonData); this.usedTMs = source.usedTMs ?? []; - this.mysteryEncounterPokemonData = new MysteryEncounterPokemonData(source.mysteryEncounterPokemonData); + this.customPokemonData = new CustomPokemonData(source.customPokemonData); + + this.mysteryEncounterPokemonData = new CustomPokemonData(source.mysteryEncounterPokemonData); + this.fusionMysteryEncounterPokemonData = new CustomPokemonData(source.fusionMysteryEncounterPokemonData); if (!forHistory) { this.boss = (source instanceof EnemyPokemon && !!source.bossSegments) || (!this.player && !!source.boss); diff --git a/src/system/version_migration/version_converter.ts b/src/system/version_migration/version_converter.ts index f93e09b7a90..e96afb5cbd4 100644 --- a/src/system/version_migration/version_converter.ts +++ b/src/system/version_migration/version_converter.ts @@ -4,6 +4,9 @@ import { version } from "../../../package.json"; // --- v1.0.4 (and below) PATCHES --- // import * as v1_0_4 from "./versions/v1_0_4"; +// --- v1.1.0 PATCHES --- // +import * as v1_1_0 from "./versions/v1_1_0"; + const LATEST_VERSION = version.split(".").map(value => parseInt(value)); /** @@ -131,6 +134,10 @@ class SessionVersionConverter extends VersionConverter { this.callMigrators(data, v1_0_4.sessionMigrators); } } + if (curMinor <= 1) { + console.log("Applying v1.1.0 session data migration!"); + this.callMigrators(data, v1_1_0.sessionMigrators); + } } console.log(`Session data successfully migrated to v${version}!`); @@ -153,6 +160,10 @@ class SystemVersionConverter extends VersionConverter { this.callMigrators(data, v1_0_4.systemMigrators); } } + if (curMinor <= 1) { + console.log("Applying v1.1.0 system data migraton!"); + this.callMigrators(data, v1_1_0.systemMigrators); + } } console.log(`System data successfully migrated to v${version}!`); @@ -175,6 +186,10 @@ class SettingsVersionConverter extends VersionConverter { this.callMigrators(data, v1_0_4.settingsMigrators); } } + if (curMinor <= 1) { + console.log("Applying v1.1.0 settings data migraton!"); + this.callMigrators(data, v1_1_0.settingsMigrators); + } } console.log(`System data successfully migrated to v${version}!`); diff --git a/src/system/version_migration/versions/v1_1_0.ts b/src/system/version_migration/versions/v1_1_0.ts new file mode 100644 index 00000000000..aac554c4531 --- /dev/null +++ b/src/system/version_migration/versions/v1_1_0.ts @@ -0,0 +1,32 @@ +import { SessionSaveData } from "../../game-data"; +import { CustomPokemonData } from "#app/data/custom-pokemon-data"; + +export const systemMigrators = [] as const; + +export const settingsMigrators = [] as const; + +export const sessionMigrators = [ + /** + * Converts old Pokemon natureOverride and mysteryEncounterData + * to use the new conjoined {@linkcode Pokemon.customPokemonData} structure instead. + * @param data {@linkcode SessionSaveData} + */ + function migrateCustomPokemonDataAndNatureOverrides(data: SessionSaveData) { + // Fix Pokemon nature overrides and custom data migration + data.party.forEach(pokemon => { + if (pokemon["mysteryEncounterPokemonData"]) { + pokemon.customPokemonData = new CustomPokemonData(pokemon["mysteryEncounterPokemonData"]); + pokemon["mysteryEncounterPokemonData"] = null; + } + if (pokemon["fusionMysteryEncounterPokemonData"]) { + pokemon.fusionCustomPokemonData = new CustomPokemonData(pokemon["fusionMysteryEncounterPokemonData"]); + pokemon["fusionMysteryEncounterPokemonData"] = null; + } + pokemon.customPokemonData = pokemon.customPokemonData ?? new CustomPokemonData(); + if (pokemon["natureOverride"] && pokemon["natureOverride"] >= 0) { + pokemon.customPokemonData.nature = pokemon["natureOverride"]; + pokemon["natureOverride"] = -1; + } + }); + } +] as const; diff --git a/src/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts b/src/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts index 0dc02e03c6d..e0f37c7e045 100644 --- a/src/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/bug-type-superfan-encounter.test.ts @@ -476,10 +476,11 @@ describe("Bug-Type Superfan - Mystery Encounter", () => { expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find(h => h instanceof ModifierSelectUiHandler) as ModifierSelectUiHandler; - expect(modifierSelectHandler.options.length).toEqual(3); + expect(modifierSelectHandler.options.length).toEqual(4); expect(modifierSelectHandler.options[0].modifierTypeOption.type.id).toBe("MASTER_BALL"); - expect(modifierSelectHandler.options[1].modifierTypeOption.type.id).toBe("MAX_LURE"); - expect(modifierSelectHandler.options[2].modifierTypeOption.type.id).toBe("FORM_CHANGE_ITEM"); + expect(modifierSelectHandler.options[1].modifierTypeOption.type.id).toBe("MEGA_BRACELET"); + expect(modifierSelectHandler.options[2].modifierTypeOption.type.id).toBe("DYNAMAX_BAND"); + expect(modifierSelectHandler.options[3].modifierTypeOption.type.id).toBe("FORM_CHANGE_ITEM"); }); it("should leave encounter without battle", async () => { diff --git a/src/test/mystery-encounter/encounters/clowning-around-encounter.test.ts b/src/test/mystery-encounter/encounters/clowning-around-encounter.test.ts index b92a4d96adc..82ed558e6db 100644 --- a/src/test/mystery-encounter/encounters/clowning-around-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/clowning-around-encounter.test.ts @@ -118,11 +118,11 @@ describe("Clowning Around - Mystery Encounter", () => { }); expect(config.pokemonConfigs?.[1]).toEqual({ species: getPokemonSpecies(Species.BLACEPHALON), - mysteryEncounterPokemonData: expect.anything(), + customPokemonData: expect.anything(), isBoss: true, moveSet: [ Moves.TRICK, Moves.HYPNOSIS, Moves.SHADOW_BALL, Moves.MIND_BLOWN ] }); - expect(config.pokemonConfigs?.[1].mysteryEncounterPokemonData?.types.length).toBe(2); + expect(config.pokemonConfigs?.[1].customPokemonData?.types.length).toBe(2); expect([ Abilities.STURDY, Abilities.PICKUP, @@ -139,8 +139,8 @@ describe("Clowning Around - Mystery Encounter", () => { Abilities.MAGICIAN, Abilities.SHEER_FORCE, Abilities.PRANKSTER - ]).toContain(config.pokemonConfigs?.[1].mysteryEncounterPokemonData?.ability); - expect(ClowningAroundEncounter.misc.ability).toBe(config.pokemonConfigs?.[1].mysteryEncounterPokemonData?.ability); + ]).toContain(config.pokemonConfigs?.[1].customPokemonData?.ability); + expect(ClowningAroundEncounter.misc.ability).toBe(config.pokemonConfigs?.[1].customPokemonData?.ability); await vi.waitFor(() => expect(moveInitSpy).toHaveBeenCalled()); await vi.waitFor(() => expect(moveLoadSpy).toHaveBeenCalled()); expect(onInitResult).toBe(true); @@ -219,7 +219,7 @@ describe("Clowning Around - Mystery Encounter", () => { await game.phaseInterceptor.to(NewBattlePhase, false); const leadPokemon = scene.getParty()[0]; - expect(leadPokemon.mysteryEncounterPokemonData?.ability).toBe(abilityToTrain); + expect(leadPokemon.customPokemonData?.ability).toBe(abilityToTrain); }); }); @@ -340,9 +340,9 @@ describe("Clowning Around - Mystery Encounter", () => { scene.getParty()[2].moveset = []; await runMysteryEncounterToEnd(game, 3); - const leadTypesAfter = scene.getParty()[0].mysteryEncounterPokemonData?.types; - const secondaryTypesAfter = scene.getParty()[1].mysteryEncounterPokemonData?.types; - const thirdTypesAfter = scene.getParty()[2].mysteryEncounterPokemonData?.types; + const leadTypesAfter = scene.getParty()[0].customPokemonData?.types; + const secondaryTypesAfter = scene.getParty()[1].customPokemonData?.types; + const thirdTypesAfter = scene.getParty()[2].customPokemonData?.types; expect(leadTypesAfter.length).toBe(2); expect(leadTypesAfter[0]).toBe(Type.WATER); diff --git a/src/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts b/src/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts index f64124790b7..4d95ff31d36 100644 --- a/src/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts @@ -21,7 +21,7 @@ import { BerryModifier, PokemonBaseStatTotalModifier } from "#app/modifier/modif import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { initSceneWithoutEncounterPhase } from "#test/utils/gameManagerUtils"; -import { MysteryEncounterPokemonData } from "#app/data/mystery-encounters/mystery-encounter-pokemon-data"; +import { CustomPokemonData } from "#app/data/custom-pokemon-data"; import { CommandPhase } from "#app/phases/command-phase"; import { MovePhase } from "#app/phases/move-phase"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; @@ -109,7 +109,7 @@ describe("The Strong Stuff - Mystery Encounter", () => { species: getPokemonSpecies(Species.SHUCKLE), isBoss: true, bossSegments: 5, - mysteryEncounterPokemonData: new MysteryEncounterPokemonData({ spriteScale: 1.25 }), + customPokemonData: new CustomPokemonData({ spriteScale: 1.25 }), nature: Nature.BOLD, moveSet: [ Moves.INFESTATION, Moves.SALT_CURE, Moves.GASTRO_ACID, Moves.HEAL_ORDER ], modifierConfigs: expect.any(Array), diff --git a/src/test/mystery-encounter/encounters/weird-dream-encounter.test.ts b/src/test/mystery-encounter/encounters/weird-dream-encounter.test.ts index f4d055c69aa..0d463655a52 100644 --- a/src/test/mystery-encounter/encounters/weird-dream-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/weird-dream-encounter.test.ts @@ -122,7 +122,7 @@ describe("Weird Dream - Mystery Encounter", () => { for (let i = 0; i < pokemonAfter.length; i++) { const newPokemon = pokemonAfter[i]; expect(newPokemon.getSpeciesForm().speciesId).not.toBe(pokemonPrior[i].getSpeciesForm().speciesId); - expect(newPokemon.mysteryEncounterPokemonData?.types.length).toBe(2); + expect(newPokemon.customPokemonData?.types.length).toBe(2); } const plus90To110 = bstDiff.filter(bst => bst > 80); From 75a114a89f0e7fd1d8509e6573973f61cb1bc0f7 Mon Sep 17 00:00:00 2001 From: Lugiad <2070109+Adri1@users.noreply.github.com> Date: Mon, 21 Oct 2024 04:45:12 +0200 Subject: [PATCH 103/153] [Localization][UI/UX] emerald-pro font update (#4697) * Add files via upload * Delete public/fonts/pokemon-emerald-pro.ttf * Rename pokemon-emerald-pro2.ttf to pokemon-emerald-pro.ttf --- public/fonts/pokemon-emerald-pro.ttf | Bin 132104 -> 93528 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/public/fonts/pokemon-emerald-pro.ttf b/public/fonts/pokemon-emerald-pro.ttf index 509bd1aae868ee0779cd3443c72bcbd76e3f9d21..84e49ebbc40def70813370e460324d84e021cc69 100644 GIT binary patch literal 93528 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 Date: Mon, 21 Oct 2024 02:29:21 -0700 Subject: [PATCH 104/153] Replace duplicate code with `getDoubleBattleChance()` (#4690) --- src/battle-scene.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 096a84dde3d..a21e1b09342 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -1191,10 +1191,7 @@ export default class BattleScene extends SceneBase { if (trainerConfigs[trainerType].doubleOnly) { doubleTrainer = true; } else if (trainerConfigs[trainerType].hasDouble) { - const doubleChance = new Utils.IntegerHolder(newWaveIndex % 10 === 0 ? 32 : 8); - this.applyModifiers(DoubleBattleChanceBoosterModifier, true, doubleChance); - playerField.forEach(p => applyAbAttrs(DoubleBattleChanceAbAttr, p, null, false, doubleChance)); - doubleTrainer = !Utils.randSeedInt(doubleChance.value); + doubleTrainer = !Utils.randSeedInt(this.getDoubleBattleChance(newWaveIndex, playerField)); // Add a check that special trainers can't be double except for tate and liza - they should use the normal double chance if (trainerConfigs[trainerType].trainerTypeDouble && ![ TrainerType.TATE, TrainerType.LIZA ].includes(trainerType)) { doubleTrainer = false; From f51814467a3c32a1f0653b57ae1cd7e734c58ed2 Mon Sep 17 00:00:00 2001 From: innerthunder <168692175+innerthunder@users.noreply.github.com> Date: Mon, 21 Oct 2024 07:59:23 -0700 Subject: [PATCH 105/153] [P3] Fix mistimed sound effect in `LearnMovePhase` (#4698) --- src/phases/learn-move-phase.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/phases/learn-move-phase.ts b/src/phases/learn-move-phase.ts index eb7cfbb65ef..fefda384092 100644 --- a/src/phases/learn-move-phase.ts +++ b/src/phases/learn-move-phase.ts @@ -170,13 +170,16 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { pokemon.setMove(index, this.moveId); initMoveAnim(this.scene, this.moveId).then(() => { loadMoveAnimAssets(this.scene, [ this.moveId ], true); - this.scene.playSound("level_up_fanfare"); // Sound loaded into game as is }); this.scene.ui.setMode(this.messageMode); const learnMoveText = i18next.t("battle:learnMove", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: move.name }); - textMessage = textMessage ? textMessage + "$" + learnMoveText : learnMoveText; - await this.scene.ui.showTextPromise(textMessage, this.messageMode === Mode.EVOLUTION_SCENE ? 1000 : undefined, true); - this.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeMoveLearnedTrigger, true); - this.end(); + if (textMessage) { + await this.scene.ui.showTextPromise(textMessage); + } + this.scene.playSound("level_up_fanfare"); // Sound loaded into game as is + this.scene.ui.showText(learnMoveText, null, () => { + this.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeMoveLearnedTrigger, true); + this.end(); + }, this.messageMode === Mode.EVOLUTION_SCENE ? 1000 : undefined, true); } } From 966b07f62b3e2ca71719357918b681ddbbaf4f66 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Mon, 21 Oct 2024 08:00:58 -0700 Subject: [PATCH 106/153] [Misc] Shiny overrides can now force Pokemon to not be shiny (#4699) Also fixes random shinies breaking tests --- src/field/pokemon.ts | 15 +++++-- src/overrides.ts | 8 ++-- src/test/utils/helpers/challengeModeHelper.ts | 6 ++- src/test/utils/helpers/classicModeHelper.ts | 10 +++-- src/test/utils/helpers/dailyModeHelper.ts | 6 ++- src/test/utils/helpers/overridesHelper.ts | 42 ++++++++++++++++--- 6 files changed, 69 insertions(+), 18 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 7f2b4ec015d..0ee879ebf97 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -3982,10 +3982,14 @@ export class PlayerPokemon extends Pokemon { if (Overrides.SHINY_OVERRIDE) { this.shiny = true; this.initShinySparkle(); - if (Overrides.VARIANT_OVERRIDE) { - this.variant = Overrides.VARIANT_OVERRIDE; - } + } else if (Overrides.SHINY_OVERRIDE === false) { + this.shiny = false; } + + if (Overrides.VARIANT_OVERRIDE !== null && this.shiny) { + this.variant = Overrides.VARIANT_OVERRIDE; + } + if (!dataSource) { if (this.scene.gameMode.isDaily) { this.generateAndPopulateMoveset(); @@ -4474,10 +4478,13 @@ export class EnemyPokemon extends Pokemon { if (Overrides.OPP_SHINY_OVERRIDE) { this.shiny = true; this.initShinySparkle(); + } else if (Overrides.OPP_SHINY_OVERRIDE === false) { + this.shiny = false; } + if (this.shiny) { this.variant = this.generateVariant(); - if (Overrides.OPP_VARIANT_OVERRIDE) { + if (Overrides.OPP_VARIANT_OVERRIDE !== null) { this.variant = Overrides.OPP_VARIANT_OVERRIDE; } } diff --git a/src/overrides.ts b/src/overrides.ts index 211d430a835..e1bfbd240f0 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -113,8 +113,8 @@ class DefaultOverrides { readonly STATUS_OVERRIDE: StatusEffect = StatusEffect.NONE; readonly GENDER_OVERRIDE: Gender | null = null; readonly MOVESET_OVERRIDE: Moves | Array = []; - readonly SHINY_OVERRIDE: boolean = false; - readonly VARIANT_OVERRIDE: Variant = 0; + readonly SHINY_OVERRIDE: boolean | null = null; + readonly VARIANT_OVERRIDE: Variant | null = null; // -------------------------- // OPPONENT / ENEMY OVERRIDES @@ -134,8 +134,8 @@ class DefaultOverrides { readonly OPP_STATUS_OVERRIDE: StatusEffect = StatusEffect.NONE; readonly OPP_GENDER_OVERRIDE: Gender | null = null; readonly OPP_MOVESET_OVERRIDE: Moves | Array = []; - readonly OPP_SHINY_OVERRIDE: boolean = false; - readonly OPP_VARIANT_OVERRIDE: Variant = 0; + readonly OPP_SHINY_OVERRIDE: boolean | null = null; + readonly OPP_VARIANT_OVERRIDE: Variant | null = null; readonly OPP_IVS_OVERRIDE: number | number[] = []; readonly OPP_FORM_OVERRIDES: Partial> = {}; /** diff --git a/src/test/utils/helpers/challengeModeHelper.ts b/src/test/utils/helpers/challengeModeHelper.ts index 184f11f505c..5210d942d5a 100644 --- a/src/test/utils/helpers/challengeModeHelper.ts +++ b/src/test/utils/helpers/challengeModeHelper.ts @@ -38,6 +38,10 @@ export class ChallengeModeHelper extends GameManagerHelper { async runToSummon(species?: Species[]) { await this.game.runToTitle(); + if (this.game.override.disableShinies) { + this.game.override.shiny(false).enemyShiny(false); + } + this.game.onNextPrompt("TitlePhase", Mode.TITLE, () => { this.game.scene.gameMode.challenges = this.challenges; const starters = generateStarter(this.game.scene, species); @@ -47,7 +51,7 @@ export class ChallengeModeHelper extends GameManagerHelper { }); await this.game.phaseInterceptor.run(EncounterPhase); - if (overrides.OPP_HELD_ITEMS_OVERRIDE.length === 0) { + if (overrides.OPP_HELD_ITEMS_OVERRIDE.length === 0 && this.game.override.removeEnemyStartingItems) { this.game.removeEnemyHeldItems(); } } diff --git a/src/test/utils/helpers/classicModeHelper.ts b/src/test/utils/helpers/classicModeHelper.ts index 55e995fc9dc..80d0b86de7b 100644 --- a/src/test/utils/helpers/classicModeHelper.ts +++ b/src/test/utils/helpers/classicModeHelper.ts @@ -20,9 +20,13 @@ export class ClassicModeHelper extends GameManagerHelper { * @param species - Optional array of species to summon. * @returns A promise that resolves when the summon phase is reached. */ - async runToSummon(species?: Species[]) { + async runToSummon(species?: Species[]): Promise { await this.game.runToTitle(); + if (this.game.override.disableShinies) { + this.game.override.shiny(false).enemyShiny(false); + } + this.game.onNextPrompt("TitlePhase", Mode.TITLE, () => { this.game.scene.gameMode = getGameMode(GameModes.CLASSIC); const starters = generateStarter(this.game.scene, species); @@ -32,7 +36,7 @@ export class ClassicModeHelper extends GameManagerHelper { }); await this.game.phaseInterceptor.run(EncounterPhase); - if (overrides.OPP_HELD_ITEMS_OVERRIDE.length === 0) { + if (overrides.OPP_HELD_ITEMS_OVERRIDE.length === 0 && this.game.override.removeEnemyStartingItems) { this.game.removeEnemyHeldItems(); } } @@ -42,7 +46,7 @@ export class ClassicModeHelper extends GameManagerHelper { * @param species - Optional array of species to start the battle with. * @returns A promise that resolves when the battle is started. */ - async startBattle(species?: Species[]) { + async startBattle(species?: Species[]): Promise { await this.runToSummon(species); if (this.game.scene.battleStyle === BattleStyle.SWITCH) { diff --git a/src/test/utils/helpers/dailyModeHelper.ts b/src/test/utils/helpers/dailyModeHelper.ts index e40fada8ac7..813544f85df 100644 --- a/src/test/utils/helpers/dailyModeHelper.ts +++ b/src/test/utils/helpers/dailyModeHelper.ts @@ -21,6 +21,10 @@ export class DailyModeHelper extends GameManagerHelper { async runToSummon() { await this.game.runToTitle(); + if (this.game.override.disableShinies) { + this.game.override.shiny(false).enemyShiny(false); + } + this.game.onNextPrompt("TitlePhase", Mode.TITLE, () => { const titlePhase = new TitlePhase(this.game.scene); titlePhase.initDailyRun(); @@ -33,7 +37,7 @@ export class DailyModeHelper extends GameManagerHelper { await this.game.phaseInterceptor.to(EncounterPhase); - if (overrides.OPP_HELD_ITEMS_OVERRIDE.length === 0) { + if (overrides.OPP_HELD_ITEMS_OVERRIDE.length === 0 && this.game.override.removeEnemyStartingItems) { this.game.removeEnemyHeldItems(); } } diff --git a/src/test/utils/helpers/overridesHelper.ts b/src/test/utils/helpers/overridesHelper.ts index 27fd9552fe4..ec4d8dbbe4c 100644 --- a/src/test/utils/helpers/overridesHelper.ts +++ b/src/test/utils/helpers/overridesHelper.ts @@ -19,6 +19,11 @@ import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; * Helper to handle overrides in tests */ export class OverridesHelper extends GameManagerHelper { + /** If `true`, removes the starting items from enemies at the start of each test; default `true` */ + public removeEnemyStartingItems: boolean = true; + /** If `true`, sets the shiny overrides to disable shinies at the start of each test; default `true` */ + public disableShinies: boolean = true; + /** * Override the starting biome * @warning Any event listeners that are attached to [NewArenaEvent](events\battle-scene.ts) may need to be handled down the line @@ -368,23 +373,50 @@ export class OverridesHelper extends GameManagerHelper { /** * Override player shininess - * @param shininess Whether the player's Pokemon should be shiny. + * @param shininess - `true` or `false` to force the player's pokemon to be shiny or not shiny, + * `null` to disable the override and re-enable RNG shinies. */ - shinyLevel(shininess: boolean): this { + shiny(shininess: boolean | null): this { vi.spyOn(Overrides, "SHINY_OVERRIDE", "get").mockReturnValue(shininess); - this.log(`Set player Pokemon as ${shininess ? "" : "not "}shiny!`); + if (shininess === null) { + this.log("Disabled player Pokemon shiny override!"); + } else { + this.log(`Set player Pokemon to be ${shininess ? "" : "not "}shiny!`); + } return this; } + /** * Override player shiny variant - * @param variant The player's shiny variant. + * @param variant - The player's shiny variant. */ - variantLevel(variant: Variant): this { + shinyVariant(variant: Variant): this { vi.spyOn(Overrides, "VARIANT_OVERRIDE", "get").mockReturnValue(variant); this.log(`Set player Pokemon's shiny variant to ${variant}!`); return this; } + /** + * Override enemy shininess + * @param shininess - `true` or `false` to force the enemy's pokemon to be shiny or not shiny, + * `null` to disable the override and re-enable RNG shinies. + * @param variant - (Optional) The enemy's shiny {@linkcode Variant}. + */ + enemyShiny(shininess: boolean | null, variant?: Variant): this { + vi.spyOn(Overrides, "OPP_SHINY_OVERRIDE", "get").mockReturnValue(shininess); + if (shininess === null) { + this.log("Disabled enemy Pokemon shiny override!"); + } else { + this.log(`Set enemy Pokemon to be ${shininess ? "" : "not "}shiny!`); + } + + if (variant !== undefined) { + vi.spyOn(Overrides, "OPP_VARIANT_OVERRIDE", "get").mockReturnValue(variant); + this.log(`Set enemy shiny variant to be ${variant}!`); + } + return this; + } + /** * Override the enemy (Pokemon) to have the given amount of health segments * @param healthSegments the number of segments to give From f7797603a1511177b36c57a8c9c7d413c2fb22aa Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Mon, 21 Oct 2024 08:03:12 -0700 Subject: [PATCH 107/153] [P2] Fix oversight where hazards cannnot affect Pokemon that set it (#4693) Fixes #935 --- src/data/arena-tag.ts | 2 +- src/test/moves/toxic_spikes.test.ts | 55 +++++++++++++++-------------- 2 files changed, 30 insertions(+), 27 deletions(-) diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index 6507d34dcfd..ed4c2789165 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -626,7 +626,7 @@ export class ArenaTrapTag extends ArenaTag { * @returns `true` if this hazard affects the given Pokemon; `false` otherwise. */ override apply(arena: Arena, simulated: boolean, pokemon: Pokemon): boolean { - if (this.sourceId === pokemon.id || (this.side === ArenaTagSide.PLAYER) !== pokemon.isPlayer()) { + if ((this.side === ArenaTagSide.PLAYER) !== pokemon.isPlayer()) { return false; } diff --git a/src/test/moves/toxic_spikes.test.ts b/src/test/moves/toxic_spikes.test.ts index bac1ccdccd8..a5c63a2652f 100644 --- a/src/test/moves/toxic_spikes.test.ts +++ b/src/test/moves/toxic_spikes.test.ts @@ -9,8 +9,6 @@ import GameManager from "#test/utils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; -const TIMEOUT = 20 * 1000; - describe("Moves - Toxic Spikes", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -34,10 +32,10 @@ describe("Moves - Toxic Spikes", () => { .enemyAbility(Abilities.BALL_FETCH) .ability(Abilities.BALL_FETCH) .enemyMoveset(Moves.SPLASH) - .moveset([ Moves.TOXIC_SPIKES, Moves.SPLASH, Moves.ROAR ]); + .moveset([ Moves.TOXIC_SPIKES, Moves.SPLASH, Moves.ROAR, Moves.COURT_CHANGE ]); }); - it("should not affect the opponent if they do not switch", async() => { + it("should not affect the opponent if they do not switch", async () => { await game.classicMode.runToSummon([ Species.MIGHTYENA, Species.POOCHYENA ]); const enemy = game.scene.getEnemyField()[0]; @@ -51,9 +49,9 @@ describe("Moves - Toxic Spikes", () => { expect(enemy.hp).toBe(enemy.getMaxHp()); expect(enemy.status?.effect).toBeUndefined(); - }, TIMEOUT); + }); - it("should poison the opponent if they switch into 1 layer", async() => { + it("should poison the opponent if they switch into 1 layer", async () => { await game.classicMode.runToSummon([ Species.MIGHTYENA ]); game.move.select(Moves.TOXIC_SPIKES); @@ -65,9 +63,9 @@ describe("Moves - Toxic Spikes", () => { expect(enemy.hp).toBeLessThan(enemy.getMaxHp()); expect(enemy.status?.effect).toBe(StatusEffect.POISON); - }, TIMEOUT); + }); - it("should badly poison the opponent if they switch into 2 layers", async() => { + it("should badly poison the opponent if they switch into 2 layers", async () => { await game.classicMode.runToSummon([ Species.MIGHTYENA ]); game.move.select(Moves.TOXIC_SPIKES); @@ -80,27 +78,32 @@ describe("Moves - Toxic Spikes", () => { const enemy = game.scene.getEnemyField()[0]; expect(enemy.hp).toBeLessThan(enemy.getMaxHp()); expect(enemy.status?.effect).toBe(StatusEffect.TOXIC); - }, TIMEOUT); + }); - it("should be removed if a grounded poison pokemon switches in", async() => { - game.override.enemySpecies(Species.GRIMER); - await game.classicMode.runToSummon([ Species.MIGHTYENA ]); + it("should be removed if a grounded poison pokemon switches in", async () => { + await game.classicMode.runToSummon([ Species.MUK, Species.PIDGEY ]); + + const muk = game.scene.getPlayerPokemon()!; game.move.select(Moves.TOXIC_SPIKES); - await game.phaseInterceptor.to("TurnEndPhase"); - game.move.select(Moves.TOXIC_SPIKES); - await game.phaseInterceptor.to("TurnEndPhase"); - game.move.select(Moves.ROAR); - await game.phaseInterceptor.to("TurnEndPhase"); - - const enemy = game.scene.getEnemyField()[0]; - expect(enemy.hp).toBe(enemy.getMaxHp()); - expect(enemy.status?.effect).toBeUndefined(); + await game.toNextTurn(); + // also make sure the toxic spikes are removed even if the pokemon + // that set them up is the one switching in (https://github.com/pagefaultgames/pokerogue/issues/935) + game.move.select(Moves.COURT_CHANGE); + await game.toNextTurn(); + game.doSwitchPokemon(1); + await game.toNextTurn(); + game.doSwitchPokemon(1); + await game.toNextTurn(); + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + expect(muk.isFullHp()).toBe(true); + expect(muk.status?.effect).toBeUndefined(); expect(game.scene.arena.tags.length).toBe(0); - }, TIMEOUT); + }); - it("shouldn't create multiple layers per use in doubles", async() => { + it("shouldn't create multiple layers per use in doubles", async () => { await game.classicMode.runToSummon([ Species.MIGHTYENA, Species.POOCHYENA ]); game.move.select(Moves.TOXIC_SPIKES); @@ -109,9 +112,9 @@ describe("Moves - Toxic Spikes", () => { const arenaTags = (game.scene.arena.getTagOnSide(ArenaTagType.TOXIC_SPIKES, ArenaTagSide.ENEMY) as ArenaTrapTag); expect(arenaTags.tagType).toBe(ArenaTagType.TOXIC_SPIKES); expect(arenaTags.layers).toBe(1); - }, TIMEOUT); + }); - it("should persist through reload", async() => { + it("should persist through reload", async () => { game.override.startingWave(1); const scene = game.scene; const gameData = new GameData(scene); @@ -132,5 +135,5 @@ describe("Moves - Toxic Spikes", () => { expect(sessionData.arena.tags).toEqual(recoveredData.arena.tags); localStorage.removeItem("sessionTestData"); - }, TIMEOUT); + }); }); From 467841d167de63a2adb2c9169503fc1dcabadfbd Mon Sep 17 00:00:00 2001 From: PrabbyDD <147005742+PrabbyDD@users.noreply.github.com> Date: Mon, 21 Oct 2024 18:33:41 -0700 Subject: [PATCH 108/153] [P2] Nightmare triggers at turn end instead of after move (#4702) --- src/data/battler-tags.ts | 2 +- src/test/moves/nightmare.test.ts | 54 ++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 src/test/moves/nightmare.test.ts diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 4977a8da5a9..e0616c341be 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -838,7 +838,7 @@ export class SeedTag extends BattlerTag { export class NightmareTag extends BattlerTag { constructor() { - super(BattlerTagType.NIGHTMARE, BattlerTagLapseType.AFTER_MOVE, 1, Moves.NIGHTMARE); + super(BattlerTagType.NIGHTMARE, BattlerTagLapseType.TURN_END, 1, Moves.NIGHTMARE); } onAdd(pokemon: Pokemon): void { diff --git a/src/test/moves/nightmare.test.ts b/src/test/moves/nightmare.test.ts new file mode 100644 index 00000000000..61b133a3280 --- /dev/null +++ b/src/test/moves/nightmare.test.ts @@ -0,0 +1,54 @@ +import { CommandPhase } from "#app/phases/command-phase"; +import { TurnInitPhase } from "#app/phases/turn-init-phase"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import { StatusEffect } from "#app/data/status-effect"; + +describe("Moves - Nightmare", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + + game.override.battleType("single") + .enemySpecies(Species.RATTATA) + .enemyMoveset(Moves.SPLASH) + .enemyAbility(Abilities.BALL_FETCH) + .enemyStatusEffect(StatusEffect.SLEEP) + .startingLevel(5) + .moveset([ Moves.NIGHTMARE, Moves.SPLASH ]); + }); + + it("lowers enemy hp by 1/4 each turn while asleep", async () => { + await game.classicMode.startBattle([ Species.HYPNO ]); + + const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyMaxHP = enemyPokemon.hp; + game.move.select(Moves.NIGHTMARE); + await game.phaseInterceptor.to(TurnInitPhase); + + expect(enemyPokemon.hp).toBe(enemyMaxHP - Math.floor(enemyMaxHP / 4)); + + // take a second turn to make sure damage occurs again + await game.phaseInterceptor.to(CommandPhase); + game.move.select(Moves.SPLASH); + + await game.phaseInterceptor.to(TurnInitPhase); + expect(enemyPokemon.hp).toBe(enemyMaxHP - Math.floor(enemyMaxHP / 4) - Math.floor(enemyMaxHP / 4)); + }); +}); From c2eb9de9df6cd7ba625dd73c3812274f47994731 Mon Sep 17 00:00:00 2001 From: innerthunder <168692175+innerthunder@users.noreply.github.com> Date: Mon, 21 Oct 2024 18:41:25 -0700 Subject: [PATCH 109/153] [Ability] Partially Implement Infiltrator (does not work with mist) (#4636) * Implement Infiltrator * Integration tests + Infiltrator is (P) again * Fix screen tests * Fix `hitsSubstitute` * docs for Infiltrator attr --- src/data/ability.ts | 27 ++++++- src/data/arena-tag.ts | 23 +++++- src/data/move.ts | 15 ++-- src/field/pokemon.ts | 28 +++++-- src/phases/stat-stage-change-phase.ts | 3 +- src/test/abilities/infiltrator.test.ts | 107 +++++++++++++++++++++++++ src/test/moves/aurora_veil.test.ts | 2 +- src/test/moves/light_screen.test.ts | 2 +- src/test/moves/reflect.test.ts | 2 +- 9 files changed, 190 insertions(+), 19 deletions(-) create mode 100644 src/test/abilities/infiltrator.test.ts diff --git a/src/data/ability.ts b/src/data/ability.ts index 33f6e0522f7..0d5cf2751ce 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -4342,6 +4342,30 @@ export class AlwaysHitAbAttr extends AbAttr { } /** Attribute for abilities that allow moves that make contact to ignore protection (i.e. Unseen Fist) */ export class IgnoreProtectOnContactAbAttr extends AbAttr { } +/** + * Attribute implementing the effects of {@link https://bulbapedia.bulbagarden.net/wiki/Infiltrator_(Ability) | Infiltrator}. + * Allows the source's moves to bypass the effects of opposing Light Screen, Reflect, Aurora Veil, Safeguard, Mist, and Substitute. + */ +export class InfiltratorAbAttr extends AbAttr { + /** + * Sets a flag to bypass screens, Substitute, Safeguard, and Mist + * @param pokemon n/a + * @param passive n/a + * @param simulated n/a + * @param cancelled n/a + * @param args `[0]` a {@linkcode Utils.BooleanHolder | BooleanHolder} containing the flag + * @returns `true` if the bypass flag was successfully set; `false` otherwise. + */ + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: null, args: any[]): boolean { + const bypassed = args[0]; + if (args[0] instanceof Utils.BooleanHolder) { + bypassed.value = true; + return true; + } + return false; + } +} + export class UncopiableAbilityAbAttr extends AbAttr { constructor() { super(false); @@ -5321,7 +5345,8 @@ export function initAbilities() { .attr(PostSummonTransformAbAttr) .attr(UncopiableAbilityAbAttr), new Ability(Abilities.INFILTRATOR, 5) - .unimplemented(), + .attr(InfiltratorAbAttr) + .partial(), // does not bypass Mist new Ability(Abilities.MUMMY, 5) .attr(PostDefendAbilityGiveAbAttr, Abilities.MUMMY) .bypassFaint(), diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index ed4c2789165..aa6aec6f73a 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -7,7 +7,7 @@ import { getPokemonNameWithAffix } from "#app/messages"; import Pokemon, { HitResult, PokemonMove } from "#app/field/pokemon"; import { StatusEffect } from "#app/data/status-effect"; import { BattlerIndex } from "#app/battle"; -import { BlockNonDirectDamageAbAttr, ChangeMovePriorityAbAttr, ProtectStatAbAttr, applyAbAttrs } from "#app/data/ability"; +import { BlockNonDirectDamageAbAttr, ChangeMovePriorityAbAttr, InfiltratorAbAttr, ProtectStatAbAttr, applyAbAttrs } from "#app/data/ability"; import { Stat } from "#enums/stat"; import { CommonAnim, CommonBattleAnim } from "#app/data/battle-anims"; import i18next from "i18next"; @@ -130,7 +130,18 @@ export class MistTag extends ArenaTag { * to flag the stat reduction as cancelled * @returns `true` if a stat reduction was cancelled; `false` otherwise */ - override apply(arena: Arena, simulated: boolean, cancelled: BooleanHolder): boolean { + override apply(arena: Arena, simulated: boolean, attacker: Pokemon, cancelled: BooleanHolder): boolean { + // `StatStageChangePhase` currently doesn't have a reference to the source of stat drops, + // so this code currently has no effect on gameplay. + if (attacker) { + const bypassed = new BooleanHolder(false); + // TODO: Allow this to be simulated + applyAbAttrs(InfiltratorAbAttr, attacker, null, false, bypassed); + if (bypassed.value) { + return false; + } + } + cancelled.value = true; if (!simulated) { @@ -169,12 +180,18 @@ export class WeakenMoveScreenTag extends ArenaTag { * * @param arena the {@linkcode Arena} where the move is applied. * @param simulated n/a + * @param attacker the attacking {@linkcode Pokemon} * @param moveCategory the attacking move's {@linkcode MoveCategory}. * @param damageMultiplier A {@linkcode NumberHolder} containing the damage multiplier * @returns `true` if the attacking move was weakened; `false` otherwise. */ - override apply(arena: Arena, simulated: boolean, moveCategory: MoveCategory, damageMultiplier: NumberHolder): boolean { + override apply(arena: Arena, simulated: boolean, attacker: Pokemon, moveCategory: MoveCategory, damageMultiplier: NumberHolder): boolean { if (this.weakenedCategories.includes(moveCategory)) { + const bypassed = new BooleanHolder(false); + applyAbAttrs(InfiltratorAbAttr, attacker, null, false, bypassed); + if (bypassed.value) { + return false; + } damageMultiplier.value = arena.scene.currentBattle.double ? 2732 / 4096 : 0.5; return true; } diff --git a/src/data/move.ts b/src/data/move.ts index 309a2d3a7eb..0d9c57bf094 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -8,7 +8,7 @@ import { Constructor, NumberHolder } from "#app/utils"; import * as Utils from "../utils"; import { WeatherType } from "./weather"; import { ArenaTagSide, ArenaTrapTag, WeakenMoveTypeTag } from "./arena-tag"; -import { allAbilities, AllyMoveCategoryPowerBoostAbAttr, applyAbAttrs, applyPostAttackAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, BlockItemTheftAbAttr, BlockNonDirectDamageAbAttr, BlockOneHitKOAbAttr, BlockRecoilDamageAttr, ConfusionOnStatusEffectAbAttr, FieldMoveTypePowerBoostAbAttr, FieldPreventExplosiveMovesAbAttr, ForceSwitchOutImmunityAbAttr, HealFromBerryUseAbAttr, IgnoreContactAbAttr, IgnoreMoveEffectsAbAttr, IgnoreProtectOnContactAbAttr, MaxMultiHitAbAttr, MoveAbilityBypassAbAttr, MoveEffectChanceMultiplierAbAttr, MoveTypeChangeAbAttr, ReverseDrainAbAttr, UncopiableAbilityAbAttr, UnsuppressableAbilityAbAttr, UnswappableAbilityAbAttr, UserFieldMoveTypePowerBoostAbAttr, VariableMovePowerAbAttr, WonderSkinAbAttr } from "./ability"; +import { allAbilities, AllyMoveCategoryPowerBoostAbAttr, applyAbAttrs, applyPostAttackAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, BlockItemTheftAbAttr, BlockNonDirectDamageAbAttr, BlockOneHitKOAbAttr, BlockRecoilDamageAttr, ConfusionOnStatusEffectAbAttr, FieldMoveTypePowerBoostAbAttr, FieldPreventExplosiveMovesAbAttr, ForceSwitchOutImmunityAbAttr, HealFromBerryUseAbAttr, IgnoreContactAbAttr, IgnoreMoveEffectsAbAttr, IgnoreProtectOnContactAbAttr, InfiltratorAbAttr, MaxMultiHitAbAttr, MoveAbilityBypassAbAttr, MoveEffectChanceMultiplierAbAttr, MoveTypeChangeAbAttr, ReverseDrainAbAttr, UncopiableAbilityAbAttr, UnsuppressableAbilityAbAttr, UnswappableAbilityAbAttr, UserFieldMoveTypePowerBoostAbAttr, VariableMovePowerAbAttr, WonderSkinAbAttr } from "./ability"; import { AttackTypeBoosterModifier, BerryModifier, PokemonHeldItemModifier, PokemonMoveAccuracyBoosterModifier, PokemonMultiHitModifier, PreserveBerryModifier } from "../modifier/modifier"; import { BattlerIndex, BattleType } from "../battle"; import { TerrainType } from "./terrain"; @@ -346,7 +346,11 @@ export default class Move implements Localizable { return false; } - return !user.hasAbility(Abilities.INFILTRATOR) + const bypassed = new Utils.BooleanHolder(false); + // TODO: Allow this to be simulated + applyAbAttrs(InfiltratorAbAttr, user, null, false, bypassed); + + return !bypassed.value && !this.hasFlag(MoveFlags.SOUND_BASED) && !this.hasFlag(MoveFlags.IGNORE_SUBSTITUTE); } @@ -2074,7 +2078,7 @@ export class StatusEffectAttr extends MoveEffectAttr { } } - if (user !== target && target.scene.arena.getTagOnSide(ArenaTagType.SAFEGUARD, target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY)) { + if (user !== target && target.isSafeguarded(user)) { if (move.category === MoveCategory.STATUS) { user.scene.queueMessage(i18next.t("moveTriggers:safeguard", { targetName: getPokemonNameWithAffix(target) })); } @@ -5161,7 +5165,7 @@ export class ConfuseAttr extends AddBattlerTagAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - if (!this.selfTarget && target.scene.arena.getTagOnSide(ArenaTagType.SAFEGUARD, target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY)) { + if (!this.selfTarget && target.isSafeguarded(user)) { if (move.category === MoveCategory.STATUS) { user.scene.queueMessage(i18next.t("moveTriggers:safeguard", { targetName: getPokemonNameWithAffix(target) })); } @@ -7598,6 +7602,7 @@ export function initMoves() { .ignoresVirtual(), new StatusMove(Moves.TRANSFORM, Type.NORMAL, -1, 10, -1, 0, 1) .attr(TransformAttr) + .condition((user, target, move) => !target.getTag(BattlerTagType.SUBSTITUTE)) .ignoresProtect(), new AttackMove(Moves.BUBBLE, Type.WATER, MoveCategory.SPECIAL, 40, 100, 30, 10, 0, 1) .attr(StatStageChangeAttr, [ Stat.SPD ], -1) @@ -8028,7 +8033,7 @@ export function initMoves() { .attr(RemoveScreensAttr), new StatusMove(Moves.YAWN, Type.NORMAL, -1, 10, -1, 0, 3) .attr(AddBattlerTagAttr, BattlerTagType.DROWSY, false, true) - .condition((user, target, move) => !target.status && !target.scene.arena.getTagOnSide(ArenaTagType.SAFEGUARD, target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY)), + .condition((user, target, move) => !target.status && !target.isSafeguarded(user)), new AttackMove(Moves.KNOCK_OFF, Type.DARK, MoveCategory.PHYSICAL, 65, 100, 20, -1, 0, 3) .attr(MovePowerMultiplierAttr, (user, target, move) => target.getHeldItems().filter(i => i.isTransferable).length > 0 ? 1.5 : 1) .attr(RemoveHeldItemAttr, false), diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 0ee879ebf97..94b9fd12540 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -22,7 +22,7 @@ import { reverseCompatibleTms, tmSpecies, tmPoolTiers } from "#app/data/balance/ import { BattlerTag, BattlerTagLapseType, EncoreTag, GroundedTag, HighestStatBoostTag, SubstituteTag, TypeImmuneTag, getBattlerTag, SemiInvulnerableTag, TypeBoostTag, MoveRestrictionBattlerTag, ExposedTag, DragonCheerTag, CritBoostTag, TrappedTag, TarShotTag, AutotomizedTag, PowerTrickTag } from "../data/battler-tags"; import { WeatherType } from "#app/data/weather"; import { ArenaTagSide, NoCritTag, WeakenMoveScreenTag } from "#app/data/arena-tag"; -import { Ability, AbAttr, StatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, IgnoreOpponentStatStagesAbAttr, MoveImmunityAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, ReduceStatusEffectDurationAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyStatMultiplierAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr, DamageBoostAbAttr, IgnoreTypeStatusEffectImmunityAbAttr, ConditionalCritAbAttr, applyFieldStatMultiplierAbAttrs, FieldMultiplyStatAbAttr, AddSecondStrikeAbAttr, UserFieldStatusEffectImmunityAbAttr, UserFieldBattlerTagImmunityAbAttr, BattlerTagImmunityAbAttr, MoveTypeChangeAbAttr, FullHpResistTypeAbAttr, applyCheckTrappedAbAttrs, CheckTrappedAbAttr, PostSetStatusAbAttr, applyPostSetStatusAbAttrs } from "#app/data/ability"; +import { Ability, AbAttr, StatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, IgnoreOpponentStatStagesAbAttr, MoveImmunityAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, ReduceStatusEffectDurationAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyStatMultiplierAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr, DamageBoostAbAttr, IgnoreTypeStatusEffectImmunityAbAttr, ConditionalCritAbAttr, applyFieldStatMultiplierAbAttrs, FieldMultiplyStatAbAttr, AddSecondStrikeAbAttr, UserFieldStatusEffectImmunityAbAttr, UserFieldBattlerTagImmunityAbAttr, BattlerTagImmunityAbAttr, MoveTypeChangeAbAttr, FullHpResistTypeAbAttr, applyCheckTrappedAbAttrs, CheckTrappedAbAttr, PostSetStatusAbAttr, applyPostSetStatusAbAttrs, InfiltratorAbAttr } from "#app/data/ability"; import PokemonData from "#app/system/pokemon-data"; import { BattlerIndex } from "#app/battle"; import { Mode } from "#app/ui/ui"; @@ -2610,7 +2610,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { /** Reduces damage if this Pokemon has a relevant screen (e.g. Light Screen for special attacks) */ const screenMultiplier = new Utils.NumberHolder(1); - this.scene.arena.applyTagsForSide(WeakenMoveScreenTag, defendingSide, simulated, moveCategory, screenMultiplier); + this.scene.arena.applyTagsForSide(WeakenMoveScreenTag, defendingSide, simulated, source, moveCategory, screenMultiplier); /** * For each {@linkcode HitsTagAttr} the move has, doubles the damage of the move if: @@ -3352,13 +3352,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } - const types = this.getTypes(true, true); - - const defendingSide = this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; - if (sourcePokemon && sourcePokemon !== this && this.scene.arena.getTagOnSide(ArenaTagType.SAFEGUARD, defendingSide)) { + if (sourcePokemon && sourcePokemon !== this && this.isSafeguarded(sourcePokemon)) { return false; } + const types = this.getTypes(true, true); + switch (effect) { case StatusEffect.POISON: case StatusEffect.TOXIC: @@ -3504,6 +3503,23 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } + /** + * Checks if this Pokemon is protected by Safeguard + * @param attacker the {@linkcode Pokemon} inflicting status on this Pokemon + * @returns `true` if this Pokemon is protected by Safeguard; `false` otherwise. + */ + isSafeguarded(attacker: Pokemon): boolean { + const defendingSide = this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; + if (this.scene.arena.getTagOnSide(ArenaTagType.SAFEGUARD, defendingSide)) { + const bypassed = new Utils.BooleanHolder(false); + if (attacker) { + applyAbAttrs(InfiltratorAbAttr, attacker, null, false, bypassed); + } + return !bypassed.value; + } + return false; + } + primeSummonData(summonDataPrimer: PokemonSummonData): void { this.summonDataPrimer = summonDataPrimer; } diff --git a/src/phases/stat-stage-change-phase.ts b/src/phases/stat-stage-change-phase.ts index 4c13b883445..2d4b3ce6c6f 100644 --- a/src/phases/stat-stage-change-phase.ts +++ b/src/phases/stat-stage-change-phase.ts @@ -64,7 +64,8 @@ export class StatStageChangePhase extends PokemonPhase { const cancelled = new BooleanHolder(false); if (!this.selfTarget && stages.value < 0) { - this.scene.arena.applyTagsForSide(MistTag, pokemon.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY, false, cancelled); + // TODO: add a reference to the source of the stat change to fix Infiltrator interaction + this.scene.arena.applyTagsForSide(MistTag, pokemon.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY, false, null, false, cancelled); } if (!cancelled.value && !this.selfTarget && stages.value < 0) { diff --git a/src/test/abilities/infiltrator.test.ts b/src/test/abilities/infiltrator.test.ts new file mode 100644 index 00000000000..01c5cef7796 --- /dev/null +++ b/src/test/abilities/infiltrator.test.ts @@ -0,0 +1,107 @@ +import { ArenaTagSide } from "#app/data/arena-tag"; +import { allMoves } from "#app/data/move"; +import { ArenaTagType } from "#enums/arena-tag-type"; +import { BattlerTagType } from "#enums/battler-tag-type"; +import { Stat } from "#enums/stat"; +import { StatusEffect } from "#enums/status-effect"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Infiltrator", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.TACKLE, Moves.WATER_GUN, Moves.SPORE, Moves.BABY_DOLL_EYES ]) + .ability(Abilities.INFILTRATOR) + .battleType("single") + .disableCrits() + .enemySpecies(Species.SNORLAX) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH) + .startingLevel(100) + .enemyLevel(100); + }); + + it.each([ + { effectName: "Light Screen", tagType: ArenaTagType.LIGHT_SCREEN, move: Moves.WATER_GUN }, + { effectName: "Reflect", tagType: ArenaTagType.REFLECT, move: Moves.TACKLE }, + { effectName: "Aurora Veil", tagType: ArenaTagType.AURORA_VEIL, move: Moves.TACKLE } + ])("should bypass the target's $effectName", async ({ tagType, move }) => { + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + const preScreenDmg = enemy.getAttackDamage(player, allMoves[move]).damage; + + game.scene.arena.addTag(tagType, 1, Moves.NONE, enemy.id, ArenaTagSide.ENEMY, true); + + const postScreenDmg = enemy.getAttackDamage(player, allMoves[move]).damage; + + expect(postScreenDmg).toBe(preScreenDmg); + expect(player.battleData.abilitiesApplied[0]).toBe(Abilities.INFILTRATOR); + }); + + it("should bypass the target's Safeguard", async () => { + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + game.scene.arena.addTag(ArenaTagType.SAFEGUARD, 1, Moves.NONE, enemy.id, ArenaTagSide.ENEMY, true); + + game.move.select(Moves.SPORE); + + await game.phaseInterceptor.to("BerryPhase", false); + expect(enemy.status?.effect).toBe(StatusEffect.SLEEP); + expect(player.battleData.abilitiesApplied[0]).toBe(Abilities.INFILTRATOR); + }); + + // TODO: fix this interaction to pass this test + it.skip("should bypass the target's Mist", async () => { + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + game.scene.arena.addTag(ArenaTagType.MIST, 1, Moves.NONE, enemy.id, ArenaTagSide.ENEMY, true); + + game.move.select(Moves.BABY_DOLL_EYES); + + await game.phaseInterceptor.to("MoveEndPhase"); + expect(enemy.getStatStage(Stat.ATK)).toBe(-1); + expect(player.battleData.abilitiesApplied[0]).toBe(Abilities.INFILTRATOR); + }); + + it("should bypass the target's Substitute", async () => { + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + enemy.addTag(BattlerTagType.SUBSTITUTE, 1, Moves.NONE, enemy.id); + + game.move.select(Moves.BABY_DOLL_EYES); + + await game.phaseInterceptor.to("MoveEndPhase"); + expect(enemy.getStatStage(Stat.ATK)).toBe(-1); + expect(player.battleData.abilitiesApplied[0]).toBe(Abilities.INFILTRATOR); + }); +}); diff --git a/src/test/moves/aurora_veil.test.ts b/src/test/moves/aurora_veil.test.ts index 243ba3a3269..e68117a2f59 100644 --- a/src/test/moves/aurora_veil.test.ts +++ b/src/test/moves/aurora_veil.test.ts @@ -111,7 +111,7 @@ const getMockedMoveDamage = (defender: Pokemon, attacker: Pokemon, move: Move) = const side = defender.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; if (defender.scene.arena.getTagOnSide(ArenaTagType.AURORA_VEIL, side)) { - defender.scene.arena.applyTagsForSide(ArenaTagType.AURORA_VEIL, side, false, move.category, multiplierHolder); + defender.scene.arena.applyTagsForSide(ArenaTagType.AURORA_VEIL, side, false, attacker, move.category, multiplierHolder); } return move.power * multiplierHolder.value; diff --git a/src/test/moves/light_screen.test.ts b/src/test/moves/light_screen.test.ts index 11b8144bb4e..af14d9273e6 100644 --- a/src/test/moves/light_screen.test.ts +++ b/src/test/moves/light_screen.test.ts @@ -94,7 +94,7 @@ const getMockedMoveDamage = (defender: Pokemon, attacker: Pokemon, move: Move) = const side = defender.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; if (defender.scene.arena.getTagOnSide(ArenaTagType.LIGHT_SCREEN, side)) { - defender.scene.arena.applyTagsForSide(ArenaTagType.LIGHT_SCREEN, side, false, move.category, multiplierHolder); + defender.scene.arena.applyTagsForSide(ArenaTagType.LIGHT_SCREEN, side, false, attacker, move.category, multiplierHolder); } return move.power * multiplierHolder.value; diff --git a/src/test/moves/reflect.test.ts b/src/test/moves/reflect.test.ts index b18b2423895..3bf415ea75c 100644 --- a/src/test/moves/reflect.test.ts +++ b/src/test/moves/reflect.test.ts @@ -94,7 +94,7 @@ const getMockedMoveDamage = (defender: Pokemon, attacker: Pokemon, move: Move) = const side = defender.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; if (defender.scene.arena.getTagOnSide(ArenaTagType.REFLECT, side)) { - defender.scene.arena.applyTagsForSide(ArenaTagType.REFLECT, side, false, move.category, multiplierHolder); + defender.scene.arena.applyTagsForSide(ArenaTagType.REFLECT, side, false, attacker, move.category, multiplierHolder); } return move.power * multiplierHolder.value; From 7066a15ceb2eee2df7ba13778294f198bbee9c53 Mon Sep 17 00:00:00 2001 From: Mason S <132116525+ElizaAlex@users.noreply.github.com> Date: Tue, 22 Oct 2024 02:53:00 -0400 Subject: [PATCH 110/153] [Refactor] Added `BattlerTagLapseType.AFTER_HIT` (#3655) * [Refactor] Added ON_GET_HIT BattlerTagLapseType Adjusted BeakBlastChargingTag and ShellTrapTag to use new lapse type Adjusted MoveEffectPhase to now lapse all tags with the ON_GET_HIT lapse type * [Refactor] Added ON_GET_HIT BattlerTagLapseType Adjusted BeakBlastChargingTag and ShellTrapTag to use new lapse type Adjusted MoveEffectPhase to now lapse all tags with the ON_GET_HIT lapse type * Fix nits * Rename `ON_GET_HIT` to `AFTER_HIT` Change `isOpponentTo` to `isOpponent` * Fix a couple minor nits * Remove single-use function --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/data/battler-tags.ts | 165 ++++++++++++++++++++------------ src/field/pokemon.ts | 9 ++ src/phases/move-effect-phase.ts | 6 +- 3 files changed, 113 insertions(+), 67 deletions(-) diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index e0616c341be..c3b7765d062 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -1,29 +1,44 @@ -import { ChargeAnim, CommonAnim, CommonBattleAnim, MoveChargeAnim } from "./battle-anims"; -import { getPokemonNameWithAffix } from "../messages"; -import Pokemon, { MoveResult, HitResult } from "../field/pokemon"; -import { StatusEffect } from "./status-effect"; -import * as Utils from "../utils"; -import { ChargeAttr, MoveFlags, allMoves, MoveCategory, applyMoveAttrs, StatusCategoryOnAllyAttr, HealOnAllyAttr, ConsecutiveUseDoublePowerAttr } from "./move"; -import { Type } from "./type"; -import { BlockNonDirectDamageAbAttr, FlinchEffectAbAttr, ReverseDrainAbAttr, applyAbAttrs, ProtectStatAbAttr } from "./ability"; -import { TerrainType } from "./terrain"; -import { WeatherType } from "./weather"; -import { allAbilities } from "./ability"; -import { SpeciesFormChangeManualTrigger } from "./pokemon-forms"; -import { Abilities } from "#enums/abilities"; -import { BattlerTagType } from "#enums/battler-tag-type"; -import { Moves } from "#enums/moves"; -import { Species } from "#enums/species"; -import i18next from "#app/plugins/i18n"; -import { Stat, type BattleStat, type EffectiveStat, EFFECTIVE_STATS, getStatKey } from "#app/enums/stat"; +import BattleScene from "#app/battle-scene"; +import { + allAbilities, + applyAbAttrs, + BlockNonDirectDamageAbAttr, + FlinchEffectAbAttr, + ProtectStatAbAttr, + ReverseDrainAbAttr +} from "#app/data/ability"; +import { ChargeAnim, CommonAnim, CommonBattleAnim, MoveChargeAnim } from "#app/data/battle-anims"; +import Move, { + allMoves, + applyMoveAttrs, + ChargeAttr, + ConsecutiveUseDoublePowerAttr, + HealOnAllyAttr, + MoveCategory, + MoveFlags, + StatusCategoryOnAllyAttr +} from "#app/data/move"; +import { SpeciesFormChangeManualTrigger } from "#app/data/pokemon-forms"; +import { StatusEffect } from "#app/data/status-effect"; +import { TerrainType } from "#app/data/terrain"; +import { Type } from "#app/data/type"; +import { WeatherType } from "#app/data/weather"; +import Pokemon, { HitResult, MoveResult } from "#app/field/pokemon"; +import { getPokemonNameWithAffix } from "#app/messages"; import { CommonAnimPhase } from "#app/phases/common-anim-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { MovePhase } from "#app/phases/move-phase"; import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; import { ShowAbilityPhase } from "#app/phases/show-ability-phase"; -import { StatStageChangePhase, StatStageChangeCallback } from "#app/phases/stat-stage-change-phase"; -import { PokemonAnimType } from "#app/enums/pokemon-anim-type"; -import BattleScene from "#app/battle-scene"; +import { StatStageChangeCallback, StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; +import i18next from "#app/plugins/i18n"; +import { BooleanHolder, getFrameMs, NumberHolder, toDmgValue } from "#app/utils"; +import { Abilities } from "#enums/abilities"; +import { BattlerTagType } from "#enums/battler-tag-type"; +import { Moves } from "#enums/moves"; +import { PokemonAnimType } from "#enums/pokemon-anim-type"; +import { Species } from "#enums/species"; +import { EFFECTIVE_STATS, getStatKey, Stat, type BattleStat, type EffectiveStat } from "#enums/stat"; export enum BattlerTagLapseType { FAINT, @@ -33,6 +48,7 @@ export enum BattlerTagLapseType { MOVE_EFFECT, TURN_END, HIT, + AFTER_HIT, CUSTOM } @@ -405,7 +421,7 @@ export class RechargingTag extends BattlerTag { */ export class BeakBlastChargingTag extends BattlerTag { constructor() { - super(BattlerTagType.BEAK_BLAST_CHARGING, [ BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.TURN_END ], 1, Moves.BEAK_BLAST); + super(BattlerTagType.BEAK_BLAST_CHARGING, [ BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.TURN_END, BattlerTagLapseType.AFTER_HIT ], 1, Moves.BEAK_BLAST); } onAdd(pokemon: Pokemon): void { @@ -421,16 +437,13 @@ export class BeakBlastChargingTag extends BattlerTag { * to be removed after the source makes a move (or the turn ends, whichever comes first) * @param pokemon {@linkcode Pokemon} the owner of this tag * @param lapseType {@linkcode BattlerTagLapseType} the type of functionality invoked in battle - * @returns `true` if invoked with the CUSTOM lapse type; `false` otherwise + * @returns `true` if invoked with the `AFTER_HIT` lapse type */ lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { - if (lapseType === BattlerTagLapseType.CUSTOM) { - const effectPhase = pokemon.scene.getCurrentPhase(); - if (effectPhase instanceof MoveEffectPhase) { - const attacker = effectPhase.getPokemon(); - if (effectPhase.move.getMove().checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon)) { - attacker.trySetStatus(StatusEffect.BURN, true, pokemon); - } + if (lapseType === BattlerTagLapseType.AFTER_HIT) { + const phaseData = getMoveEffectPhaseData(pokemon); + if (phaseData?.move.hasFlag(MoveFlags.MAKES_CONTACT)) { + phaseData.attacker.trySetStatus(StatusEffect.BURN, true, pokemon); } return true; } @@ -444,11 +457,10 @@ export class BeakBlastChargingTag extends BattlerTag { * @see {@link https://bulbapedia.bulbagarden.net/wiki/Shell_Trap_(move) | Shell Trap} */ export class ShellTrapTag extends BattlerTag { - public activated: boolean; + public activated: boolean = false; constructor() { - super(BattlerTagType.SHELL_TRAP, BattlerTagLapseType.TURN_END, 1); - this.activated = false; + super(BattlerTagType.SHELL_TRAP, [ BattlerTagLapseType.TURN_END, BattlerTagLapseType.AFTER_HIT ], 1); } onAdd(pokemon: Pokemon): void { @@ -459,25 +471,33 @@ export class ShellTrapTag extends BattlerTag { * "Activates" the shell trap, causing the tag owner to move next. * @param pokemon {@linkcode Pokemon} the owner of this tag * @param lapseType {@linkcode BattlerTagLapseType} the type of functionality invoked in battle - * @returns `true` if invoked with the `CUSTOM` lapse type; `false` otherwise + * @returns `true` if invoked with the `AFTER_HIT` lapse type */ lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { - if (lapseType === BattlerTagLapseType.CUSTOM) { - const shellTrapPhaseIndex = pokemon.scene.phaseQueue.findIndex( - phase => phase instanceof MovePhase && phase.pokemon === pokemon - ); - const firstMovePhaseIndex = pokemon.scene.phaseQueue.findIndex( - phase => phase instanceof MovePhase - ); + if (lapseType === BattlerTagLapseType.AFTER_HIT) { + const phaseData = getMoveEffectPhaseData(pokemon); - if (shellTrapPhaseIndex !== -1 && shellTrapPhaseIndex !== firstMovePhaseIndex) { - const shellTrapMovePhase = pokemon.scene.phaseQueue.splice(shellTrapPhaseIndex, 1)[0]; - pokemon.scene.prependToPhase(shellTrapMovePhase, MovePhase); + // Trap should only be triggered by opponent's Physical moves + if (phaseData?.move.category === MoveCategory.PHYSICAL && pokemon.isOpponent(phaseData.attacker)) { + const shellTrapPhaseIndex = pokemon.scene.phaseQueue.findIndex( + phase => phase instanceof MovePhase && phase.pokemon === pokemon + ); + const firstMovePhaseIndex = pokemon.scene.phaseQueue.findIndex( + phase => phase instanceof MovePhase + ); + + // Only shift MovePhase timing if it's not already next up + if (shellTrapPhaseIndex !== -1 && shellTrapPhaseIndex !== firstMovePhaseIndex) { + const shellTrapMovePhase = pokemon.scene.phaseQueue.splice(shellTrapPhaseIndex, 1)[0]; + pokemon.scene.prependToPhase(shellTrapMovePhase, MovePhase); + } + + this.activated = true; } - this.activated = true; return true; } + return super.lapse(pokemon, lapseType); } } @@ -641,7 +661,7 @@ export class ConfusedTag extends BattlerTag { if (pokemon.randSeedInt(3) === 0) { const atk = pokemon.getEffectiveStat(Stat.ATK); const def = pokemon.getEffectiveStat(Stat.DEF); - const damage = Utils.toDmgValue(((((2 * pokemon.level / 5 + 2) * 40 * atk / def) / 50) + 2) * (pokemon.randSeedIntRange(85, 100) / 100)); + const damage = toDmgValue(((((2 * pokemon.level / 5 + 2) * 40 * atk / def) / 50) + 2) * (pokemon.randSeedIntRange(85, 100) / 100)); pokemon.scene.queueMessage(i18next.t("battlerTags:confusedLapseHurtItself")); pokemon.damageAndUpdate(damage); pokemon.battleData.hitCount++; @@ -812,13 +832,13 @@ export class SeedTag extends BattlerTag { if (ret) { const source = pokemon.getOpponents().find(o => o.getBattlerIndex() === this.sourceIndex); if (source) { - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); if (!cancelled.value) { pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, source.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.LEECH_SEED)); - const damage = pokemon.damageAndUpdate(Utils.toDmgValue(pokemon.getMaxHp() / 8)); + const damage = pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 8)); const reverseDrain = pokemon.hasAbilityWithAttr(ReverseDrainAbAttr, false); pokemon.scene.unshiftPhase(new PokemonHealPhase(pokemon.scene, source.getBattlerIndex(), !reverseDrain ? damage : damage * -1, @@ -860,11 +880,11 @@ export class NightmareTag extends BattlerTag { pokemon.scene.queueMessage(i18next.t("battlerTags:nightmareLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, pokemon.getBattlerIndex(), undefined, CommonAnim.CURSE)); // TODO: Update animation type - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); if (!cancelled.value) { - pokemon.damageAndUpdate(Utils.toDmgValue(pokemon.getMaxHp() / 4)); + pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 4)); } } @@ -1004,7 +1024,7 @@ export class IngrainTag extends TrappedTag { new PokemonHealPhase( pokemon.scene, pokemon.getBattlerIndex(), - Utils.toDmgValue(pokemon.getMaxHp() / 16), + toDmgValue(pokemon.getMaxHp() / 16), i18next.t("battlerTags:ingrainLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), true ) @@ -1067,7 +1087,7 @@ export class AquaRingTag extends BattlerTag { new PokemonHealPhase( pokemon.scene, pokemon.getBattlerIndex(), - Utils.toDmgValue(pokemon.getMaxHp() / 16), + toDmgValue(pokemon.getMaxHp() / 16), i18next.t("battlerTags:aquaRingLapse", { moveName: this.getMoveName(), pokemonName: getPokemonNameWithAffix(pokemon) @@ -1161,11 +1181,11 @@ export abstract class DamagingTrapTag extends TrappedTag { ); pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, pokemon.getBattlerIndex(), undefined, this.commonAnim)); - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); if (!cancelled.value) { - pokemon.damageAndUpdate(Utils.toDmgValue(pokemon.getMaxHp() / 8)); + pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 8)); } } @@ -1356,7 +1376,7 @@ export class ContactDamageProtectedTag extends ProtectedTag { if (effectPhase instanceof MoveEffectPhase && effectPhase.move.getMove().hasFlag(MoveFlags.MAKES_CONTACT)) { const attacker = effectPhase.getPokemon(); if (!attacker.hasAbilityWithAttr(BlockNonDirectDamageAbAttr)) { - attacker.damageAndUpdate(Utils.toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)), HitResult.OTHER); + attacker.damageAndUpdate(toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)), HitResult.OTHER); } } } @@ -1709,7 +1729,7 @@ export class SemiInvulnerableTag extends BattlerTag { onRemove(pokemon: Pokemon): void { // Wait 2 frames before setting visible for battle animations that don't immediately show the sprite invisible pokemon.scene.tweens.addCounter({ - duration: Utils.getFrameMs(2), + duration: getFrameMs(2), onComplete: () => pokemon.setVisible(true) }); } @@ -1860,12 +1880,12 @@ export class SaltCuredTag extends BattlerTag { if (ret) { pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.SALT_CURE)); - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); if (!cancelled.value) { const pokemonSteelOrWater = pokemon.isOfType(Type.STEEL) || pokemon.isOfType(Type.WATER); - pokemon.damageAndUpdate(Utils.toDmgValue(pokemonSteelOrWater ? pokemon.getMaxHp() / 4 : pokemon.getMaxHp() / 8)); + pokemon.damageAndUpdate(toDmgValue(pokemonSteelOrWater ? pokemon.getMaxHp() / 4 : pokemon.getMaxHp() / 8)); pokemon.scene.queueMessage( i18next.t("battlerTags:saltCuredLapse", { @@ -1907,11 +1927,11 @@ export class CursedTag extends BattlerTag { if (ret) { pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.SALT_CURE)); - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); if (!cancelled.value) { - pokemon.damageAndUpdate(Utils.toDmgValue(pokemon.getMaxHp() / 4)); + pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 4)); pokemon.scene.queueMessage(i18next.t("battlerTags:cursedLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } } @@ -2173,7 +2193,7 @@ export class GulpMissileTag extends BattlerTag { return true; } - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); applyAbAttrs(BlockNonDirectDamageAbAttr, attacker, cancelled); if (!cancelled.value) { @@ -2289,7 +2309,7 @@ export class HealBlockTag extends MoveRestrictionBattlerTag { * @returns `true` if the move cannot be used because the target is an ally */ override isMoveTargetRestricted(move: Moves, user: Pokemon, target: Pokemon) { - const moveCategory = new Utils.IntegerHolder(allMoves[move].category); + const moveCategory = new NumberHolder(allMoves[move].category); applyMoveAttrs(StatusCategoryOnAllyAttr, user, target, allMoves[move], moveCategory); if (allMoves[move].hasAttr(HealOnAllyAttr) && moveCategory.value === MoveCategory.STATUS ) { return true; @@ -2506,7 +2526,7 @@ export class MysteryEncounterPostSummonTag extends BattlerTag { const ret = super.lapse(pokemon, lapseType); if (lapseType === BattlerTagLapseType.CUSTOM) { - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); applyAbAttrs(ProtectStatAbAttr, pokemon, cancelled); if (!cancelled.value) { if (pokemon.mysteryEncounterBattleEffects) { @@ -2955,3 +2975,22 @@ export function loadBattlerTag(source: BattlerTag | any): BattlerTag { tag.loadTag(source); return tag; } + +/** + * Helper function to verify that the current phase is a MoveEffectPhase and provide quick access to commonly used fields + * + * @param pokemon {@linkcode Pokemon} The Pokémon used to access the current phase + * @returns null if current phase is not MoveEffectPhase, otherwise Object containing the {@linkcode MoveEffectPhase}, and its + * corresponding {@linkcode Move} and user {@linkcode Pokemon} + */ +function getMoveEffectPhaseData(pokemon: Pokemon): {phase: MoveEffectPhase, attacker: Pokemon, move: Move} | null { + const phase = pokemon.scene.getCurrentPhase(); + if (phase instanceof MoveEffectPhase) { + return { + phase : phase, + attacker : phase.getPokemon(), + move : phase.move.getMove() + }; + } + return null; +} diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 94b9fd12540..d320880c52a 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -2290,6 +2290,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.levelExp = this.exp - getLevelTotalExp(this.level, this.species.growthRate); } + /** + * Compares if `this` and {@linkcode target} are on the same team. + * @param target the {@linkcode Pokemon} to compare against. + * @returns `true` if the two pokemon are allies, `false` otherwise + */ + public isOpponent(target: Pokemon): boolean { + return this.isPlayer() !== target.isPlayer(); + } + getOpponent(targetIndex: integer): Pokemon | null { const ret = this.getOpponents()[targetIndex]; if (ret.summonData) { diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index dc880f85e23..8d1a255d268 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -280,10 +280,8 @@ export class MoveEffectPhase extends PokemonPhase { if (!user.isPlayer() && this.move.getMove() instanceof AttackMove) { user.scene.applyShuffledModifiers(this.scene, EnemyAttackStatusEffectChanceModifier, false, target); } - target.lapseTag(BattlerTagType.BEAK_BLAST_CHARGING); - if (move.category === MoveCategory.PHYSICAL && user.isPlayer() !== target.isPlayer()) { - target.lapseTag(BattlerTagType.SHELL_TRAP); - } + target.lapseTags(BattlerTagLapseType.AFTER_HIT); + })).then(() => { // Apply the user's post-attack ability effects applyPostAttackAbAttrs(PostAttackAbAttr, user, target, this.move.getMove(), hitResult).then(() => { From 181f59882a02fcab129c45672cc2d397aaff3049 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Tue, 22 Oct 2024 09:37:13 -0700 Subject: [PATCH 111/153] [P2] Fix Early Bird (#4632) * Fix Early Bird, add tests * Update tsdocs for Early Bird's `AbAttr` Rename `turnCount` to `toxicTurnCount` and `turnsRemaining` to `sleepTurnsRemaining` in `status-effect.ts` * Fix Toxic Orb test * Redundant code :despair: * Fix status override to set the number of sleep turns --- src/data/ability.ts | 19 ++++- src/data/move.ts | 16 ++-- src/data/status-effect.ts | 24 +++--- src/field/pokemon.ts | 25 +++--- src/phases/move-phase.ts | 7 +- src/phases/obtain-status-effect-phase.ts | 14 ++-- src/phases/post-summon-phase.ts | 2 +- src/phases/post-turn-status-effect-phase.ts | 2 +- src/system/pokemon-data.ts | 2 +- src/test/abilities/early_bird.test.ts | 93 +++++++++++++++++++++ src/test/abilities/magic_guard.test.ts | 4 +- src/test/data/status-effect.test.ts | 66 ++++++++++++++- src/test/items/toxic_orb.test.ts | 23 ++--- src/test/moves/nightmare.test.ts | 10 +-- src/test/moves/will_o_wisp.test.ts | 53 ++++++++++++ 15 files changed, 292 insertions(+), 68 deletions(-) create mode 100644 src/test/abilities/early_bird.test.ts create mode 100644 src/test/moves/will_o_wisp.test.ts diff --git a/src/data/ability.ts b/src/data/ability.ts index 0d5cf2751ce..ebdd5105bb4 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -4200,6 +4200,11 @@ export class RedirectTypeMoveAbAttr extends RedirectMoveAbAttr { export class BlockRedirectAbAttr extends AbAttr { } +/** + * Used by Early Bird, makes the pokemon wake up faster + * @param statusEffect - The {@linkcode StatusEffect} to check for + * @see {@linkcode apply} + */ export class ReduceStatusEffectDurationAbAttr extends AbAttr { private statusEffect: StatusEffect; @@ -4209,9 +4214,19 @@ export class ReduceStatusEffectDurationAbAttr extends AbAttr { this.statusEffect = statusEffect; } - apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean { + /** + * Reduces the number of sleep turns remaining by an extra 1 when applied + * @param args - The args passed to the `AbAttr`: + * - `[0]` - The {@linkcode StatusEffect} of the Pokemon + * - `[1]` - The number of turns remaining until the status is healed + * @returns `true` if the ability was applied + */ + apply(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _cancelled: Utils.BooleanHolder, args: any[]): boolean { + if (!(args[1] instanceof Utils.NumberHolder)) { + return false; + } if (args[0] === this.statusEffect) { - (args[1] as Utils.IntegerHolder).value = Utils.toDmgValue((args[1] as Utils.IntegerHolder).value / 2); + args[1].value -= 1; return true; } diff --git a/src/data/move.ts b/src/data/move.ts index 0d9c57bf094..ec25844909e 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -2050,15 +2050,15 @@ export class WaterShurikenMultiHitTypeAttr extends ChangeMultiHitTypeAttr { export class StatusEffectAttr extends MoveEffectAttr { public effect: StatusEffect; - public cureTurn: integer | null; - public overrideStatus: boolean; + public turnsRemaining?: number; + public overrideStatus: boolean = false; - constructor(effect: StatusEffect, selfTarget?: boolean, cureTurn?: integer, overrideStatus?: boolean) { + constructor(effect: StatusEffect, selfTarget?: boolean, turnsRemaining?: number, overrideStatus: boolean = false) { super(selfTarget, MoveEffectTrigger.HIT); this.effect = effect; - this.cureTurn = cureTurn!; // TODO: is this bang correct? - this.overrideStatus = !!overrideStatus; + this.turnsRemaining = turnsRemaining; + this.overrideStatus = overrideStatus; } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { @@ -2085,7 +2085,7 @@ export class StatusEffectAttr extends MoveEffectAttr { return false; } if ((!pokemon.status || (pokemon.status.effect === this.effect && moveChance < 0)) - && pokemon.trySetStatus(this.effect, true, user, this.cureTurn)) { + && pokemon.trySetStatus(this.effect, true, user, this.turnsRemaining)) { applyPostAttackAbAttrs(ConfusionOnStatusEffectAbAttr, user, target, move, null, false, this.effect); return true; } @@ -2102,8 +2102,8 @@ export class StatusEffectAttr extends MoveEffectAttr { export class MultiStatusEffectAttr extends StatusEffectAttr { public effects: StatusEffect[]; - constructor(effects: StatusEffect[], selfTarget?: boolean, cureTurn?: integer, overrideStatus?: boolean) { - super(effects[0], selfTarget, cureTurn, overrideStatus); + constructor(effects: StatusEffect[], selfTarget?: boolean, turnsRemaining?: number, overrideStatus?: boolean) { + super(effects[0], selfTarget, turnsRemaining, overrideStatus); this.effects = effects; } diff --git a/src/data/status-effect.ts b/src/data/status-effect.ts index 4319985f43a..56e754ac407 100644 --- a/src/data/status-effect.ts +++ b/src/data/status-effect.ts @@ -1,4 +1,4 @@ -import * as Utils from "../utils"; +import { randIntRange } from "#app/utils"; import { StatusEffect } from "#enums/status-effect"; import i18next, { ParseKeys } from "i18next"; @@ -6,17 +6,21 @@ export { StatusEffect }; export class Status { public effect: StatusEffect; - public turnCount: integer; - public cureTurn: integer | null; + /** Toxic damage is `1/16 max HP * toxicTurnCount` */ + public toxicTurnCount: number = 0; + public sleepTurnsRemaining?: number; - constructor(effect: StatusEffect, turnCount: integer = 0, cureTurn?: integer) { + constructor(effect: StatusEffect, toxicTurnCount: number = 0, sleepTurnsRemaining?: number) { this.effect = effect; - this.turnCount = turnCount === undefined ? 0 : turnCount; - this.cureTurn = cureTurn!; // TODO: is this bang correct? + this.toxicTurnCount = toxicTurnCount; + this.sleepTurnsRemaining = sleepTurnsRemaining; } incrementTurn(): void { - this.turnCount++; + this.toxicTurnCount++; + if (this.sleepTurnsRemaining) { + this.sleepTurnsRemaining--; + } } isPostTurn(): boolean { @@ -107,7 +111,7 @@ export function getStatusEffectCatchRateMultiplier(statusEffect: StatusEffect): * Returns a random non-volatile StatusEffect */ export function generateRandomStatusEffect(): StatusEffect { - return Utils.randIntRange(1, 6); + return randIntRange(1, 6); } /** @@ -123,7 +127,7 @@ export function getRandomStatusEffect(statusEffectA: StatusEffect, statusEffectB return statusEffectA; } - return Utils.randIntRange(0, 2) ? statusEffectA : statusEffectB; + return randIntRange(0, 2) ? statusEffectA : statusEffectB; } /** @@ -140,7 +144,7 @@ export function getRandomStatus(statusA: Status | null, statusB: Status | null): } - return Utils.randIntRange(0, 2) ? statusA : statusB; + return randIntRange(0, 2) ? statusA : statusB; } /** diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index d320880c52a..a3d7429ed9b 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -22,7 +22,7 @@ import { reverseCompatibleTms, tmSpecies, tmPoolTiers } from "#app/data/balance/ import { BattlerTag, BattlerTagLapseType, EncoreTag, GroundedTag, HighestStatBoostTag, SubstituteTag, TypeImmuneTag, getBattlerTag, SemiInvulnerableTag, TypeBoostTag, MoveRestrictionBattlerTag, ExposedTag, DragonCheerTag, CritBoostTag, TrappedTag, TarShotTag, AutotomizedTag, PowerTrickTag } from "../data/battler-tags"; import { WeatherType } from "#app/data/weather"; import { ArenaTagSide, NoCritTag, WeakenMoveScreenTag } from "#app/data/arena-tag"; -import { Ability, AbAttr, StatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, IgnoreOpponentStatStagesAbAttr, MoveImmunityAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, ReduceStatusEffectDurationAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyStatMultiplierAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr, DamageBoostAbAttr, IgnoreTypeStatusEffectImmunityAbAttr, ConditionalCritAbAttr, applyFieldStatMultiplierAbAttrs, FieldMultiplyStatAbAttr, AddSecondStrikeAbAttr, UserFieldStatusEffectImmunityAbAttr, UserFieldBattlerTagImmunityAbAttr, BattlerTagImmunityAbAttr, MoveTypeChangeAbAttr, FullHpResistTypeAbAttr, applyCheckTrappedAbAttrs, CheckTrappedAbAttr, PostSetStatusAbAttr, applyPostSetStatusAbAttrs, InfiltratorAbAttr } from "#app/data/ability"; +import { Ability, AbAttr, StatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, IgnoreOpponentStatStagesAbAttr, MoveImmunityAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyStatMultiplierAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr, DamageBoostAbAttr, IgnoreTypeStatusEffectImmunityAbAttr, ConditionalCritAbAttr, applyFieldStatMultiplierAbAttrs, FieldMultiplyStatAbAttr, AddSecondStrikeAbAttr, UserFieldStatusEffectImmunityAbAttr, UserFieldBattlerTagImmunityAbAttr, BattlerTagImmunityAbAttr, MoveTypeChangeAbAttr, FullHpResistTypeAbAttr, applyCheckTrappedAbAttrs, CheckTrappedAbAttr, PostSetStatusAbAttr, applyPostSetStatusAbAttrs, InfiltratorAbAttr } from "#app/data/ability"; import PokemonData from "#app/system/pokemon-data"; import { BattlerIndex } from "#app/battle"; import { Mode } from "#app/ui/ui"; @@ -3430,7 +3430,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return true; } - trySetStatus(effect: StatusEffect | undefined, asPhase: boolean = false, sourcePokemon: Pokemon | null = null, cureTurn: integer | null = 0, sourceText: string | null = null): boolean { + trySetStatus(effect?: StatusEffect, asPhase: boolean = false, sourcePokemon: Pokemon | null = null, turnsRemaining: number = 0, sourceText: string | null = null): boolean { if (!this.canSetStatus(effect, asPhase, false, sourcePokemon)) { return false; } @@ -3444,15 +3444,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } if (asPhase) { - this.scene.unshiftPhase(new ObtainStatusEffectPhase(this.scene, this.getBattlerIndex(), effect, cureTurn, sourceText, sourcePokemon)); + this.scene.unshiftPhase(new ObtainStatusEffectPhase(this.scene, this.getBattlerIndex(), effect, turnsRemaining, sourceText, sourcePokemon)); return true; } - let statusCureTurn: Utils.IntegerHolder; + let sleepTurnsRemaining: Utils.NumberHolder; if (effect === StatusEffect.SLEEP) { - statusCureTurn = new Utils.IntegerHolder(this.randSeedIntRange(2, 4)); - applyAbAttrs(ReduceStatusEffectDurationAbAttr, this, null, false, effect, statusCureTurn); + sleepTurnsRemaining = new Utils.NumberHolder(this.randSeedIntRange(2, 4)); this.setFrameRate(4); @@ -3472,9 +3471,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } - statusCureTurn = statusCureTurn!; // tell TS compiler it's defined + sleepTurnsRemaining = sleepTurnsRemaining!; // tell TS compiler it's defined effect = effect!; // If `effect` is undefined then `trySetStatus()` will have already returned early via the `canSetStatus()` call - this.status = new Status(effect, 0, statusCureTurn?.value); + this.status = new Status(effect, 0, sleepTurnsRemaining?.value); if (effect !== StatusEffect.FAINT) { this.scene.triggerPokemonFormChange(this, SpeciesFormChangeStatusEffectTrigger, true); @@ -4001,7 +4000,7 @@ export class PlayerPokemon extends Pokemon { super(scene, 106, 148, species, level, abilityIndex, formIndex, gender, shiny, variant, ivs, nature, dataSource); if (Overrides.STATUS_OVERRIDE) { - this.status = new Status(Overrides.STATUS_OVERRIDE); + this.status = new Status(Overrides.STATUS_OVERRIDE, 0, 4); } if (Overrides.SHINY_OVERRIDE) { @@ -4481,7 +4480,7 @@ export class EnemyPokemon extends Pokemon { } if (Overrides.OPP_STATUS_OVERRIDE) { - this.status = new Status(Overrides.OPP_STATUS_OVERRIDE); + this.status = new Status(Overrides.OPP_STATUS_OVERRIDE, 0, 4); } if (Overrides.OPP_GENDER_OVERRIDE) { @@ -4490,9 +4489,11 @@ export class EnemyPokemon extends Pokemon { const speciesId = this.species.speciesId; - if (speciesId in Overrides.OPP_FORM_OVERRIDES + if ( + speciesId in Overrides.OPP_FORM_OVERRIDES && Overrides.OPP_FORM_OVERRIDES[speciesId] - && this.species.forms[Overrides.OPP_FORM_OVERRIDES[speciesId]]) { + && this.species.forms[Overrides.OPP_FORM_OVERRIDES[speciesId]] + ) { this.formIndex = Overrides.OPP_FORM_OVERRIDES[speciesId] ?? 0; } diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index 0af61918636..e9d8887e9cb 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -1,6 +1,6 @@ import { BattlerIndex } from "#app/battle"; import BattleScene from "#app/battle-scene"; -import { applyAbAttrs, applyPostMoveUsedAbAttrs, applyPreAttackAbAttrs, BlockRedirectAbAttr, IncreasePpAbAttr, PokemonTypeChangeAbAttr, PostMoveUsedAbAttr, RedirectMoveAbAttr } from "#app/data/ability"; +import { applyAbAttrs, applyPostMoveUsedAbAttrs, applyPreAttackAbAttrs, BlockRedirectAbAttr, IncreasePpAbAttr, PokemonTypeChangeAbAttr, PostMoveUsedAbAttr, RedirectMoveAbAttr, ReduceStatusEffectDurationAbAttr } from "#app/data/ability"; import { CommonAnim } from "#app/data/battle-anims"; import { BattlerTagLapseType, CenterOfAttentionTag } from "#app/data/battler-tags"; import { allMoves, applyMoveAttrs, BypassRedirectAttr, BypassSleepAttr, ChargeAttr, CopyMoveAttr, HealStatusEffectAttr, MoveFlags, PreMoveMessageAttr } from "#app/data/move"; @@ -175,7 +175,10 @@ export class MovePhase extends BattlePhase { break; case StatusEffect.SLEEP: applyMoveAttrs(BypassSleepAttr, this.pokemon, null, this.move.getMove()); - healed = this.pokemon.status.turnCount === this.pokemon.status.cureTurn; + const turnsRemaining = new NumberHolder(this.pokemon.status.sleepTurnsRemaining ?? 0); + applyAbAttrs(ReduceStatusEffectDurationAbAttr, this.pokemon, null, false, this.pokemon.status.effect, turnsRemaining); + this.pokemon.status.sleepTurnsRemaining = turnsRemaining.value; + healed = this.pokemon.status.sleepTurnsRemaining <= 0; activated = !healed && !this.pokemon.getTag(BattlerTagType.BYPASS_SLEEP); this.cancelled = activated; break; diff --git a/src/phases/obtain-status-effect-phase.ts b/src/phases/obtain-status-effect-phase.ts index c396fa7ba59..01384b932cb 100644 --- a/src/phases/obtain-status-effect-phase.ts +++ b/src/phases/obtain-status-effect-phase.ts @@ -8,26 +8,26 @@ import { getPokemonNameWithAffix } from "#app/messages"; import { PokemonPhase } from "./pokemon-phase"; export class ObtainStatusEffectPhase extends PokemonPhase { - private statusEffect?: StatusEffect | undefined; - private cureTurn?: integer | null; + private statusEffect?: StatusEffect; + private turnsRemaining?: number; private sourceText?: string | null; private sourcePokemon?: Pokemon | null; - constructor(scene: BattleScene, battlerIndex: BattlerIndex, statusEffect?: StatusEffect, cureTurn?: integer | null, sourceText?: string | null, sourcePokemon?: Pokemon | null) { + constructor(scene: BattleScene, battlerIndex: BattlerIndex, statusEffect?: StatusEffect, turnsRemaining?: number, sourceText?: string | null, sourcePokemon?: Pokemon | null) { super(scene, battlerIndex); this.statusEffect = statusEffect; - this.cureTurn = cureTurn; + this.turnsRemaining = turnsRemaining; this.sourceText = sourceText; - this.sourcePokemon = sourcePokemon; // For tracking which Pokemon caused the status effect + this.sourcePokemon = sourcePokemon; } start() { const pokemon = this.getPokemon(); if (pokemon && !pokemon.status) { if (pokemon.trySetStatus(this.statusEffect, false, this.sourcePokemon)) { - if (this.cureTurn) { - pokemon.status!.cureTurn = this.cureTurn; // TODO: is this bang correct? + if (this.turnsRemaining) { + pokemon.status!.sleepTurnsRemaining = this.turnsRemaining; } pokemon.updateInfo(true); new CommonBattleAnim(CommonAnim.POISON + (this.statusEffect! - 1), pokemon).play(this.scene, false, () => { diff --git a/src/phases/post-summon-phase.ts b/src/phases/post-summon-phase.ts index 617bb8b1cfe..3db98d9926c 100644 --- a/src/phases/post-summon-phase.ts +++ b/src/phases/post-summon-phase.ts @@ -18,7 +18,7 @@ export class PostSummonPhase extends PokemonPhase { const pokemon = this.getPokemon(); if (pokemon.status?.effect === StatusEffect.TOXIC) { - pokemon.status.turnCount = 0; + pokemon.status.toxicTurnCount = 0; } this.scene.arena.applyTags(ArenaTrapTag, false, pokemon); diff --git a/src/phases/post-turn-status-effect-phase.ts b/src/phases/post-turn-status-effect-phase.ts index 06681b733f0..2efd992a2b5 100644 --- a/src/phases/post-turn-status-effect-phase.ts +++ b/src/phases/post-turn-status-effect-phase.ts @@ -30,7 +30,7 @@ export class PostTurnStatusEffectPhase extends PokemonPhase { damage.value = Math.max(pokemon.getMaxHp() >> 3, 1); break; case StatusEffect.TOXIC: - damage.value = Math.max(Math.floor((pokemon.getMaxHp() / 16) * pokemon.status.turnCount), 1); + damage.value = Math.max(Math.floor((pokemon.getMaxHp() / 16) * pokemon.status.toxicTurnCount), 1); break; case StatusEffect.BURN: damage.value = Math.max(pokemon.getMaxHp() >> 4, 1); diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index cddc5798872..e681c995b26 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -137,7 +137,7 @@ export default class PokemonData { this.moveset = (source.moveset || [ new PokemonMove(Moves.TACKLE), new PokemonMove(Moves.GROWL) ]).filter(m => m).map((m: any) => new PokemonMove(m.moveId, m.ppUsed, m.ppUp)); if (!forHistory) { this.status = source.status - ? new Status(source.status.effect, source.status.turnCount, source.status.cureTurn) + ? new Status(source.status.effect, source.status.toxicTurnCount, source.status.sleepTurnsRemaining) : null; } diff --git a/src/test/abilities/early_bird.test.ts b/src/test/abilities/early_bird.test.ts new file mode 100644 index 00000000000..a69290fa1e4 --- /dev/null +++ b/src/test/abilities/early_bird.test.ts @@ -0,0 +1,93 @@ +import { Status } from "#app/data/status-effect"; +import { MoveResult } from "#app/field/pokemon"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { StatusEffect } from "#enums/status-effect"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Early Bird", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.REST, Moves.BELLY_DRUM, Moves.SPLASH ]) + .ability(Abilities.EARLY_BIRD) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("reduces Rest's sleep time to 1 turn", async () => { + await game.classicMode.startBattle([ Species.FEEBAS ]); + + const player = game.scene.getPlayerPokemon()!; + + game.move.select(Moves.BELLY_DRUM); + await game.toNextTurn(); + game.move.select(Moves.REST); + await game.toNextTurn(); + + expect(player.status?.effect).toBe(StatusEffect.SLEEP); + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + + expect(player.status?.effect).toBe(StatusEffect.SLEEP); + expect(player.getLastXMoves(1)[0].result).toBe(MoveResult.FAIL); + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + + expect(player.status?.effect).toBeUndefined(); + expect(player.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); + }); + + it("reduces 3-turn sleep to 1 turn", async () => { + await game.classicMode.startBattle([ Species.FEEBAS ]); + + const player = game.scene.getPlayerPokemon()!; + player.status = new Status(StatusEffect.SLEEP, 0, 4); + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + + expect(player.status?.effect).toBe(StatusEffect.SLEEP); + expect(player.getLastXMoves(1)[0].result).toBe(MoveResult.FAIL); + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + + expect(player.status?.effect).toBeUndefined(); + expect(player.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); + }); + + it("reduces 1-turn sleep to 0 turns", async () => { + await game.classicMode.startBattle([ Species.FEEBAS ]); + + const player = game.scene.getPlayerPokemon()!; + player.status = new Status(StatusEffect.SLEEP, 0, 2); + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + + expect(player.status?.effect).toBeUndefined(); + expect(player.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); + }); +}); diff --git a/src/test/abilities/magic_guard.test.ts b/src/test/abilities/magic_guard.test.ts index 614f983e76e..8075eac66f2 100644 --- a/src/test/abilities/magic_guard.test.ts +++ b/src/test/abilities/magic_guard.test.ts @@ -150,7 +150,7 @@ describe("Abilities - Magic Guard", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; - const toxicStartCounter = enemyPokemon.status!.turnCount; + const toxicStartCounter = enemyPokemon.status!.toxicTurnCount; //should be 0 await game.phaseInterceptor.to(TurnEndPhase); @@ -162,7 +162,7 @@ describe("Abilities - Magic Guard", () => { * - The enemy Pokemon's hypothetical CatchRateMultiplier should be 1.5 */ expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); - expect(enemyPokemon.status!.turnCount).toBeGreaterThan(toxicStartCounter); + expect(enemyPokemon.status!.toxicTurnCount).toBeGreaterThan(toxicStartCounter); expect(getStatusEffectCatchRateMultiplier(enemyPokemon.status!.effect)).toBe(1.5); } ); diff --git a/src/test/data/status-effect.test.ts b/src/test/data/status-effect.test.ts index bca3bd21c70..8b37da45d8d 100644 --- a/src/test/data/status-effect.test.ts +++ b/src/test/data/status-effect.test.ts @@ -1,4 +1,5 @@ import { + Status, StatusEffect, getStatusEffectActivationText, getStatusEffectDescriptor, @@ -6,14 +7,19 @@ import { getStatusEffectObtainText, getStatusEffectOverlapText, } from "#app/data/status-effect"; +import { MoveResult } from "#app/field/pokemon"; +import GameManager from "#app/test/utils/gameManager"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; import { mockI18next } from "#test/utils/testUtils"; import i18next from "i18next"; -import { afterEach, beforeAll, describe, expect, it, vi } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; const pokemonName = "PKM"; const sourceText = "SOURCE"; -describe("status-effect", () => { +describe("Status Effect Messages", () => { beforeAll(() => { i18next.init(); }); @@ -299,3 +305,59 @@ describe("status-effect", () => { vi.resetAllMocks(); }); }); + +describe("Status Effects - Sleep", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should last the appropriate number of turns", async () => { + await game.classicMode.startBattle([ Species.FEEBAS ]); + + const player = game.scene.getPlayerPokemon()!; + player.status = new Status(StatusEffect.SLEEP, 0, 4); + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + + expect(player.status.effect).toBe(StatusEffect.SLEEP); + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + + expect(player.status.effect).toBe(StatusEffect.SLEEP); + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + + expect(player.status.effect).toBe(StatusEffect.SLEEP); + expect(player.getLastXMoves(1)[0].result).toBe(MoveResult.FAIL); + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + + expect(player.status?.effect).toBeUndefined(); + expect(player.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); + }); +}); diff --git a/src/test/items/toxic_orb.test.ts b/src/test/items/toxic_orb.test.ts index 63c7b6245f5..583e302126c 100644 --- a/src/test/items/toxic_orb.test.ts +++ b/src/test/items/toxic_orb.test.ts @@ -7,8 +7,6 @@ import GameManager from "#test/utils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -const TIMEOUT = 20 * 1000; - describe("Items - Toxic orb", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -27,10 +25,10 @@ describe("Items - Toxic orb", () => { game = new GameManager(phaserGame); game.override .battleType("single") - .enemySpecies(Species.RATTATA) + .enemySpecies(Species.MAGIKARP) .ability(Abilities.BALL_FETCH) .enemyAbility(Abilities.BALL_FETCH) - .moveset([ Moves.SPLASH ]) + .moveset(Moves.SPLASH) .enemyMoveset(Moves.SPLASH) .startingHeldItems([{ name: "TOXIC_ORB", @@ -39,22 +37,19 @@ describe("Items - Toxic orb", () => { vi.spyOn(i18next, "t"); }); - it("badly poisons the holder", async () => { - await game.classicMode.startBattle([ Species.MIGHTYENA ]); + it("should badly poison the holder", async () => { + await game.classicMode.startBattle([ Species.FEEBAS ]); - const player = game.scene.getPlayerField()[0]; + const player = game.scene.getPlayerPokemon()!; + expect(player.getHeldItems()[0].type.id).toBe("TOXIC_ORB"); game.move.select(Moves.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); - // Toxic orb should trigger here - await game.phaseInterceptor.run("MessagePhase"); + await game.phaseInterceptor.to("MessagePhase"); expect(i18next.t).toHaveBeenCalledWith("statusEffect:toxic.obtainSource", expect.anything()); - await game.toNextTurn(); - expect(player.status?.effect).toBe(StatusEffect.TOXIC); - // Damage should not have ticked yet. - expect(player.status?.turnCount).toBe(0); - }, TIMEOUT); + expect(player.status?.toxicTurnCount).toBe(0); + }); }); diff --git a/src/test/moves/nightmare.test.ts b/src/test/moves/nightmare.test.ts index 61b133a3280..f4c485ff1b4 100644 --- a/src/test/moves/nightmare.test.ts +++ b/src/test/moves/nightmare.test.ts @@ -1,12 +1,10 @@ -import { CommandPhase } from "#app/phases/command-phase"; -import { TurnInitPhase } from "#app/phases/turn-init-phase"; +import { StatusEffect } from "#app/data/status-effect"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/utils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; -import { StatusEffect } from "#app/data/status-effect"; describe("Moves - Nightmare", () => { let phaserGame: Phaser.Game; @@ -39,16 +37,16 @@ describe("Moves - Nightmare", () => { const enemyPokemon = game.scene.getEnemyPokemon()!; const enemyMaxHP = enemyPokemon.hp; + game.move.select(Moves.NIGHTMARE); - await game.phaseInterceptor.to(TurnInitPhase); + await game.toNextTurn(); expect(enemyPokemon.hp).toBe(enemyMaxHP - Math.floor(enemyMaxHP / 4)); // take a second turn to make sure damage occurs again - await game.phaseInterceptor.to(CommandPhase); game.move.select(Moves.SPLASH); + await game.toNextTurn(); - await game.phaseInterceptor.to(TurnInitPhase); expect(enemyPokemon.hp).toBe(enemyMaxHP - Math.floor(enemyMaxHP / 4) - Math.floor(enemyMaxHP / 4)); }); }); diff --git a/src/test/moves/will_o_wisp.test.ts b/src/test/moves/will_o_wisp.test.ts new file mode 100644 index 00000000000..39729d331ad --- /dev/null +++ b/src/test/moves/will_o_wisp.test.ts @@ -0,0 +1,53 @@ +import { BattlerIndex } from "#app/battle"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { StatusEffect } from "#enums/status-effect"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Will-O-Wisp", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.WILL_O_WISP, Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should burn the opponent", async () => { + await game.classicMode.startBattle([ Species.FEEBAS ]); + + const enemy = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.WILL_O_WISP); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.move.forceHit(); + await game.toNextTurn(); + + expect(enemy.status?.effect).toBe(StatusEffect.BURN); + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + + expect(enemy.status?.effect).toBe(StatusEffect.BURN); + }); +}); From 5e7f2042fcba5ea38de0f6d7298499d93019a9fc Mon Sep 17 00:00:00 2001 From: Mumble <171087428+frutescens@users.noreply.github.com> Date: Tue, 22 Oct 2024 13:05:37 -0700 Subject: [PATCH 112/153] [UI][QoL] Cursor defaults to Fight at the start of each new wave (#4666) * cursors are dumb * update * fixed? * maybe solution * fix in! * Possible cursor fixes --------- Co-authored-by: frutescens Co-authored-by: Opaque02 <66582645+Opaque02@users.noreply.github.com> --- src/phases/command-phase.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/phases/command-phase.ts b/src/phases/command-phase.ts index e6f2eb69ff3..6d4d46c51c9 100644 --- a/src/phases/command-phase.ts +++ b/src/phases/command-phase.ts @@ -30,6 +30,15 @@ export class CommandPhase extends FieldPhase { start() { super.start(); + const commandUiHandler = this.scene.ui.handlers[Mode.COMMAND]; + if (commandUiHandler) { + if (this.scene.currentBattle.turn === 1 || commandUiHandler.getCursor() === Command.POKEMON) { + commandUiHandler.setCursor(Command.FIGHT); + } else { + commandUiHandler.setCursor(commandUiHandler.getCursor()); + } + } + if (this.fieldIndex) { // If we somehow are attempting to check the right pokemon but there's only one pokemon out // Switch back to the center pokemon. This can happen rarely in double battles with mid turn switching From 96e5f2d763d3bf225ae685675f54b1fb8aa5ae37 Mon Sep 17 00:00:00 2001 From: damocleas Date: Tue, 22 Oct 2024 21:07:28 -0400 Subject: [PATCH 113/153] Starmobile Stat Adjustments (#4704) Co-authored-by: Adrian T. <68144167+torranx@users.noreply.github.com> --- src/data/pokemon-species.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 947ac939989..96d1eb430fb 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -2580,11 +2580,11 @@ export function initSpecies() { new PokemonSpecies(Species.VAROOM, 9, false, false, false, "Single-Cyl Pokémon", Type.STEEL, Type.POISON, 1, 35, Abilities.OVERCOAT, Abilities.NONE, Abilities.SLOW_START, 300, 45, 70, 63, 30, 45, 47, 190, 50, 60, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.REVAVROOM, 9, false, false, false, "Multi-Cyl Pokémon", Type.STEEL, Type.POISON, 1.8, 120, Abilities.OVERCOAT, Abilities.NONE, Abilities.FILTER, 500, 80, 119, 90, 54, 67, 90, 75, 50, 175, GrowthRate.MEDIUM_FAST, 50, false, false, new PokemonForm("Normal", "", Type.STEEL, Type.POISON, 1.8, 120, Abilities.OVERCOAT, Abilities.NONE, Abilities.FILTER, 500, 80, 119, 90, 54, 67, 90, 75, 50, 175, false, null, true), - new PokemonForm("Segin Starmobile", "segin-starmobile", Type.STEEL, Type.DARK, 1.8, 240, Abilities.INTIMIDATE, Abilities.NONE, Abilities.INTIMIDATE, 600, 120, 129, 100, 59, 77, 115, 75, 50, 175), - new PokemonForm("Schedar Starmobile", "schedar-starmobile", Type.STEEL, Type.FIRE, 1.8, 240, Abilities.SPEED_BOOST, Abilities.NONE, Abilities.SPEED_BOOST, 600, 120, 129, 100, 59, 77, 115, 75, 50, 175), - new PokemonForm("Navi Starmobile", "navi-starmobile", Type.STEEL, Type.POISON, 1.8, 240, Abilities.TOXIC_DEBRIS, Abilities.NONE, Abilities.TOXIC_DEBRIS, 600, 120, 129, 100, 59, 77, 115, 75, 50, 175), - new PokemonForm("Ruchbah Starmobile", "ruchbah-starmobile", Type.STEEL, Type.FAIRY, 1.8, 240, Abilities.MISTY_SURGE, Abilities.NONE, Abilities.MISTY_SURGE, 600, 120, 129, 100, 59, 77, 115, 75, 50, 175), - new PokemonForm("Caph Starmobile", "caph-starmobile", Type.STEEL, Type.FIGHTING, 1.8, 240, Abilities.STAMINA, Abilities.NONE, Abilities.STAMINA, 600, 120, 129, 100, 59, 77, 115, 75, 50, 175), + new PokemonForm("Segin Starmobile", "segin-starmobile", Type.STEEL, Type.DARK, 1.8, 240, Abilities.INTIMIDATE, Abilities.NONE, Abilities.INTIMIDATE, 600, 110, 129, 100, 77, 79, 105, 75, 50, 175), + new PokemonForm("Schedar Starmobile", "schedar-starmobile", Type.STEEL, Type.FIRE, 1.8, 240, Abilities.SPEED_BOOST, Abilities.NONE, Abilities.SPEED_BOOST, 600, 110, 129, 100, 77, 79, 105, 75, 50, 175), + new PokemonForm("Navi Starmobile", "navi-starmobile", Type.STEEL, Type.POISON, 1.8, 240, Abilities.TOXIC_DEBRIS, Abilities.NONE, Abilities.TOXIC_DEBRIS, 600, 110, 129, 100, 77, 79, 105, 75, 50, 175), + new PokemonForm("Ruchbah Starmobile", "ruchbah-starmobile", Type.STEEL, Type.FAIRY, 1.8, 240, Abilities.MISTY_SURGE, Abilities.NONE, Abilities.MISTY_SURGE, 600, 110, 129, 100, 77, 79, 105, 75, 50, 175), + new PokemonForm("Caph Starmobile", "caph-starmobile", Type.STEEL, Type.FIGHTING, 1.8, 240, Abilities.STAMINA, Abilities.NONE, Abilities.STAMINA, 600, 110, 129, 100, 77, 79, 105, 75, 50, 175), ), new PokemonSpecies(Species.CYCLIZAR, 9, false, false, false, "Mount Pokémon", Type.DRAGON, Type.NORMAL, 1.6, 63, Abilities.SHED_SKIN, Abilities.NONE, Abilities.REGENERATOR, 501, 70, 95, 65, 85, 65, 121, 190, 50, 175, GrowthRate.MEDIUM_SLOW, 50, false), new PokemonSpecies(Species.ORTHWORM, 9, false, false, false, "Earthworm Pokémon", Type.STEEL, null, 2.5, 310, Abilities.EARTH_EATER, Abilities.NONE, Abilities.SAND_VEIL, 480, 70, 85, 145, 60, 55, 65, 25, 50, 240, GrowthRate.SLOW, 50, false), From 0fe57b44b5ca2fcc934759147a29b46e07b0f76b Mon Sep 17 00:00:00 2001 From: Blitzy <118096277+Blitz425@users.noreply.github.com> Date: Tue, 22 Oct 2024 20:13:10 -0500 Subject: [PATCH 114/153] [Balance] Add Exclusive Moves from Prior Evolutions via Memory Mushroom (#4681) --- src/data/balance/pokemon-level-moves.ts | 479 +++++++++++++++++++----- 1 file changed, 389 insertions(+), 90 deletions(-) diff --git a/src/data/balance/pokemon-level-moves.ts b/src/data/balance/pokemon-level-moves.ts index b5608093df2..53f547c4504 100644 --- a/src/data/balance/pokemon-level-moves.ts +++ b/src/data/balance/pokemon-level-moves.ts @@ -93,6 +93,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.GROWL ], [ 1, Moves.EMBER ], [ 1, Moves.SMOKESCREEN ], + [ 1, Moves.FIRE_SPIN ], // Previous Stage Move [ 12, Moves.DRAGON_BREATH ], [ 19, Moves.FIRE_FANG ], [ 24, Moves.SLASH ], @@ -174,6 +175,9 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.METAPOD]: [ [ EVOLVE_MOVE, Moves.HARDEN ], + [ RELEARN_MOVE, Moves.TACKLE ], // Previous Stage Move + [ RELEARN_MOVE, Moves.STRING_SHOT ], // Previous Stage Move + [ RELEARN_MOVE, Moves.BUG_BITE ], // Previous Stage Move [ 1, Moves.HARDEN ], ], [Species.BUTTERFREE]: [ @@ -203,10 +207,17 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.KAKUNA]: [ [ EVOLVE_MOVE, Moves.HARDEN ], + [ RELEARN_MOVE, Moves.POISON_STING ], // Previous Stage Move + [ RELEARN_MOVE, Moves.STRING_SHOT ], // Previous Stage Move + [ RELEARN_MOVE, Moves.BUG_BITE ], // Previous Stage Move [ 1, Moves.HARDEN ], ], [Species.BEEDRILL]: [ [ EVOLVE_MOVE, Moves.TWINEEDLE ], + [ 1, Moves.POISON_STING ], // Previous Stage Move + [ 1, Moves.STRING_SHOT ], // Previous Stage Move + [ 1, Moves.HARDEN ], // Previous Stage Move + [ 1, Moves.BUG_BITE ], // Previous Stage Move [ 1, Moves.FURY_ATTACK ], [ 11, Moves.FURY_CUTTER ], [ 14, Moves.RAGE ], @@ -454,6 +465,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.POISON_STING ], [ 1, Moves.DEFENSE_CURL ], [ 1, Moves.CRUSH_CLAW ], + [ 1, Moves.AGILITY ], // Previous Stage Move [ 9, Moves.ROLLOUT ], [ 12, Moves.FURY_CUTTER ], [ 15, Moves.RAPID_SPIN ], @@ -961,6 +973,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.SCRATCH ], [ 1, Moves.LEER ], [ 1, Moves.FOCUS_ENERGY ], + [ 1, Moves.COVET ], // Previous Stage Move [ 1, Moves.FLING ], [ 5, Moves.FURY_SWIPES ], [ 8, Moves.LOW_KICK ], @@ -1044,10 +1057,6 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.POLIWRATH]: [ [ EVOLVE_MOVE, Moves.DYNAMIC_PUNCH ], - [ 1, Moves.BUBBLE_BEAM ], - [ 1, Moves.BODY_SLAM ], - [ 1, Moves.HYPNOSIS ], - [ 1, Moves.WATER_SPORT ], [ RELEARN_MOVE, Moves.POUND ], [ RELEARN_MOVE, Moves.DOUBLE_EDGE ], [ RELEARN_MOVE, Moves.WATER_GUN ], @@ -1057,13 +1066,18 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ RELEARN_MOVE, Moves.MUD_SHOT ], [ RELEARN_MOVE, Moves.EARTH_POWER ], [ RELEARN_MOVE, Moves.CIRCLE_THROW ], + [ 1, Moves.BUBBLE_BEAM ], + [ 1, Moves.BODY_SLAM ], + [ 1, Moves.HYPNOSIS ], + [ 1, Moves.WATER_SPORT ], ], [Species.ABRA]: [ [ 1, Moves.TELEPORT ], - [ 1, Moves.CONFUSION ], //Custom + [ 1, Moves.CONFUSION ], // Custom ], [Species.KADABRA]: [ - [ EVOLVE_MOVE, Moves.PSYBEAM ], //LGPE + [ EVOLVE_MOVE, Moves.PSYBEAM ], // LGPE + [ 1, Moves.CONFUSION ], // Previous Stage Move, Custom [ 1, Moves.DISABLE ], [ 1, Moves.TELEPORT ], [ 1, Moves.KINESIS ], @@ -1184,10 +1198,18 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ RELEARN_MOVE, Moves.STOCKPILE ], [ RELEARN_MOVE, Moves.SWALLOW ], [ RELEARN_MOVE, Moves.SPIT_UP ], + [ RELEARN_MOVE, Moves.WRAP ], // Previous Stage Move + [ RELEARN_MOVE, Moves.GROWTH ], // Previous Stage Move + [ RELEARN_MOVE, Moves.ACID ], // Previous Stage Move + [ RELEARN_MOVE, Moves.KNOCK_OFF ], // Previous Stage Move [ RELEARN_MOVE, Moves.GASTRO_ACID ], + [ RELEARN_MOVE, Moves.POISON_JAB ], // Previous Stage Move + [ RELEARN_MOVE, Moves.SLAM ], // Previous Stage Move [ RELEARN_MOVE, Moves.POWER_WHIP ], [ 1, Moves.VINE_WHIP ], [ 1, Moves.SLEEP_POWDER ], + [ 1, Moves.POISON_POWDER ], // Previous Stage Move + [ 1, Moves.STUN_SPORE ], // Previous Stage Move [ 1, Moves.SWEET_SCENT ], [ 1, Moves.RAZOR_LEAF ], [ 44, Moves.LEAF_BLADE ], @@ -1262,6 +1284,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.TACKLE ], [ 1, Moves.DEFENSE_CURL ], [ 1, Moves.ROCK_POLISH ], + [ 1, Moves.ROLLOUT ], // Previous Stage Move [ 1, Moves.HEAVY_SLAM ], [ 16, Moves.ROCK_THROW ], [ 18, Moves.SMACK_DOWN ], @@ -1548,7 +1571,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.GASTLY]: [ [ 1, Moves.CONFUSE_RAY ], [ 1, Moves.LICK ], - [ 1, Moves.ACID ], //Custom + [ 1, Moves.ACID ], // Custom [ 4, Moves.HYPNOSIS ], [ 8, Moves.MEAN_LOOK ], [ 12, Moves.PAYBACK ], @@ -1567,6 +1590,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.HYPNOSIS ], [ 1, Moves.CONFUSE_RAY ], [ 1, Moves.LICK ], + [ 1, Moves.ACID ], // Previous Stage Move, Custom [ 1, Moves.MEAN_LOOK ], [ 12, Moves.PAYBACK ], [ 16, Moves.SPITE ], @@ -1583,6 +1607,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.HYPNOSIS ], [ 1, Moves.CONFUSE_RAY ], [ 1, Moves.LICK ], + [ 1, Moves.ACID ], // Previous Stage Move, Custom [ 1, Moves.PERISH_SONG ], [ 1, Moves.MEAN_LOOK ], [ 1, Moves.SHADOW_PUNCH ], @@ -1609,7 +1634,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 12, Moves.DRAGON_BREATH ], [ 16, Moves.CURSE ], [ 20, Moves.ROCK_SLIDE ], - [ 22, Moves.GYRO_BALL ], //Custom, from USUM + [ 22, Moves.GYRO_BALL ], // Custom, from USUM [ 24, Moves.SCREECH ], [ 28, Moves.SAND_TOMB ], [ 32, Moves.STEALTH_ROCK ], @@ -1849,7 +1874,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.LICKITUNG]: [ [ 1, Moves.DEFENSE_CURL ], [ 1, Moves.LICK ], - [ 1, Moves.TACKLE ], //Custom + [ 1, Moves.TACKLE ], // Custom [ 6, Moves.REST ], [ 12, Moves.SUPERSONIC ], [ 18, Moves.WRAP ], @@ -2090,6 +2115,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.MR_MIME]: [ [ 1, Moves.POUND ], + [ 1, Moves.TICKLE ], // Previous Stage Move [ 1, Moves.BATON_PASS ], [ 1, Moves.ENCORE ], [ 1, Moves.COPYCAT ], @@ -2122,7 +2148,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 20, Moves.DOUBLE_HIT ], [ 24, Moves.SLASH ], [ 28, Moves.FOCUS_ENERGY ], - [ 30, Moves.STEEL_WING ], //Custom + [ 30, Moves.STEEL_WING ], // Custom [ 32, Moves.AGILITY ], [ 36, Moves.AIR_SLASH ], [ 40, Moves.X_SCISSOR ], @@ -2279,6 +2305,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.VAPOREON]: [ [ EVOLVE_MOVE, Moves.BOUNCY_BUBBLE ], + [ RELEARN_MOVE, Moves.VEEVEE_VOLLEY ], // Previous Stage Move [ 1, Moves.TACKLE ], [ 1, Moves.TAKE_DOWN ], [ 1, Moves.DOUBLE_EDGE ], @@ -2306,6 +2333,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.JOLTEON]: [ [ EVOLVE_MOVE, Moves.BUZZY_BUZZ ], + [ RELEARN_MOVE, Moves.VEEVEE_VOLLEY ], // Previous Stage Move [ 1, Moves.TACKLE ], [ 1, Moves.TAKE_DOWN ], [ 1, Moves.DOUBLE_EDGE ], @@ -2333,6 +2361,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.FLAREON]: [ [ EVOLVE_MOVE, Moves.SIZZLY_SLIDE ], + [ RELEARN_MOVE, Moves.VEEVEE_VOLLEY ], // Previous Stage Move [ 1, Moves.TACKLE ], [ 1, Moves.TAKE_DOWN ], [ 1, Moves.DOUBLE_EDGE ], @@ -2463,6 +2492,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.SNORLAX]: [ [ 1, Moves.TACKLE ], [ 1, Moves.SCREECH ], + [ 1, Moves.ODOR_SLEUTH ], // Previous Stage Move [ 1, Moves.DEFENSE_CURL ], [ 1, Moves.METRONOME ], [ 1, Moves.LICK ], @@ -2632,7 +2662,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.CHIKORITA]: [ [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], - [ 5, Moves.RAZOR_LEAF ], //Custom, moved from 6 to 5 + [ 5, Moves.RAZOR_LEAF ], // Custom, moved from 6 to 5 [ 9, Moves.POISON_POWDER ], [ 12, Moves.SYNTHESIS ], [ 17, Moves.REFLECT ], @@ -2682,8 +2712,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.CYNDAQUIL]: [ [ 1, Moves.TACKLE ], [ 1, Moves.LEER ], - [ 5, Moves.EMBER ], //Custom, moved from 10 to 5 - [ 10, Moves.SMOKESCREEN ], //Custom, moved from 6 to 10 + [ 5, Moves.EMBER ], // Custom, moved from 10 to 5 + [ 10, Moves.SMOKESCREEN ], // Custom, moved from 6 to 10 [ 13, Moves.QUICK_ATTACK ], [ 19, Moves.FLAME_WHEEL ], [ 22, Moves.DEFENSE_CURL ], @@ -2737,7 +2767,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.TOTODILE]: [ [ 1, Moves.SCRATCH ], [ 1, Moves.LEER ], - [ 5, Moves.WATER_GUN ], //Custom, moved from 6 to 5 + [ 5, Moves.WATER_GUN ], // Custom, moved from 6 to 5 [ 9, Moves.BITE ], [ 13, Moves.SCARY_FACE ], [ 19, Moves.ICE_FANG ], @@ -3149,6 +3179,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.MOONBLAST ], ], [Species.MARILL]: [ + [ 1, Moves.SPLASH ], // Previous Stage Move [ 1, Moves.TACKLE ], [ 1, Moves.TAIL_WHIP ], [ 1, Moves.WATER_GUN ], @@ -3168,6 +3199,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 36, Moves.SUPERPOWER ], ], [Species.AZUMARILL]: [ + [ 1, Moves.SPLASH ], // Previous Stage Move [ 1, Moves.TACKLE ], [ 1, Moves.TAIL_WHIP ], [ 1, Moves.WATER_GUN ], @@ -3189,6 +3221,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.SUDOWOODO]: [ [ EVOLVE_MOVE, Moves.SLAM ], [ 1, Moves.ROCK_THROW ], + [ 1, Moves.TACKLE ], // Previous Stage Move, Custom [ 1, Moves.FLAIL ], [ 1, Moves.FAKE_TEARS ], [ 1, Moves.HAMMER_ARM ], @@ -3222,6 +3255,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.HYDRO_PUMP ], [ 1, Moves.BELLY_DRUM ], [ 1, Moves.POUND ], + [ 1, Moves.WATER_SPORT ], // Previous Stage Move ], [Species.HOPPIP]: [ [ 1, Moves.TACKLE ], @@ -3315,9 +3349,12 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 39, Moves.SEED_BOMB ], ], [Species.SUNFLORA]: [ + [ RELEARN_MOVE, Moves.SEED_BOMB ], // Previous Stage Move [ 1, Moves.POUND ], [ 1, Moves.TACKLE ], [ 1, Moves.GROWTH ], + [ 1, Moves.ENDEAVOR ], // Previous Stage Move + [ 1, Moves.SYNTHESIS ], // Previous Stage Move [ 4, Moves.INGRAIN ], [ 7, Moves.ABSORB ], [ 10, Moves.MEGA_DRAIN ], @@ -3382,6 +3419,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.ESPEON]: [ [ EVOLVE_MOVE, Moves.GLITZY_GLOW ], + [ RELEARN_MOVE, Moves.VEEVEE_VOLLEY ], // Previous Stage Move [ 1, Moves.TACKLE ], [ 1, Moves.TAKE_DOWN ], [ 1, Moves.DOUBLE_EDGE ], @@ -3408,6 +3446,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.UMBREON]: [ [ EVOLVE_MOVE, Moves.BADDY_BAD ], + [ RELEARN_MOVE, Moves.VEEVEE_VOLLEY ], // Previous Stage Move [ 1, Moves.TACKLE ], [ 1, Moves.TAKE_DOWN ], [ 1, Moves.DOUBLE_EDGE ], @@ -3464,6 +3503,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 15, Moves.DISABLE ], [ 18, Moves.WATER_PULSE ], [ 21, Moves.HEADBUTT ], + [ 24, Moves.ZEN_HEADBUTT ], // Previous Stage Move, Galar Slowking Level [ 27, Moves.AMNESIA ], [ 30, Moves.SURF ], [ 33, Moves.SLACK_OFF ], @@ -3562,7 +3602,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.DUNSPARCE]: [ [ 1, Moves.DEFENSE_CURL ], [ 1, Moves.FLAIL ], - [ 1, Moves.TACKLE ], //Custom + [ 1, Moves.TACKLE ], // Custom [ 4, Moves.MUD_SLAP ], [ 8, Moves.ROLLOUT ], [ 12, Moves.GLARE ], @@ -3609,6 +3649,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 12, Moves.DRAGON_BREATH ], [ 16, Moves.CURSE ], [ 20, Moves.ROCK_SLIDE ], + [ 22, Moves.GYRO_BALL ], // Custom from USUM [ 24, Moves.SCREECH ], [ 28, Moves.SAND_TOMB ], [ 32, Moves.STEALTH_ROCK ], @@ -3688,6 +3729,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 20, Moves.DOUBLE_HIT ], [ 24, Moves.SLASH ], [ 28, Moves.FOCUS_ENERGY ], + [ 30, Moves.STEEL_WING ], // Custom [ 32, Moves.IRON_DEFENSE ], [ 36, Moves.IRON_HEAD ], [ 40, Moves.X_SCISSOR ], @@ -3765,8 +3807,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.SCRATCH ], [ 1, Moves.LEER ], [ 1, Moves.LICK ], - [ 1, Moves.FAKE_TEARS ], [ 1, Moves.COVET ], + [ 1, Moves.FLING ], // Previous Stage Move + [ 1, Moves.BABY_DOLL_EYES ], // Previous Stage Move + [ 1, Moves.FAKE_TEARS ], + [ 1, Moves.CHARM ], // Previous Stage Move [ 8, Moves.FURY_SWIPES ], [ 13, Moves.PAYBACK ], [ 17, Moves.SWEET_SCENT ], @@ -3783,7 +3828,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.SLUGMA]: [ [ 1, Moves.SMOG ], [ 1, Moves.YAWN ], - [ 5, Moves.EMBER ], //Custom, Moved from Level 6 to 5 + [ 5, Moves.EMBER ], // Custom, Moved from Level 6 to 5 [ 8, Moves.ROCK_THROW ], [ 13, Moves.HARDEN ], [ 20, Moves.CLEAR_SMOG ], @@ -3898,7 +3943,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 48, Moves.SOAK ], [ 54, Moves.HYPER_BEAM ], ], - [Species.DELIBIRD]: [ //Given a custom level up learnset + [Species.DELIBIRD]: [ // Given a custom level up learnset [ 1, Moves.PRESENT ], [ 1, Moves.METRONOME ], [ 5, Moves.FAKE_OUT ], @@ -3991,6 +4036,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 62, Moves.INFERNO ], ], [Species.KINGDRA]: [ + [ RELEARN_MOVE, Moves.LASER_FOCUS ], // Previous Stage Move [ 1, Moves.LEER ], [ 1, Moves.WATER_GUN ], [ 1, Moves.SMOKESCREEN ], @@ -4025,9 +4071,17 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.DONPHAN]: [ [ EVOLVE_MOVE, Moves.FURY_ATTACK ], - [ 1, Moves.HORN_ATTACK ], + [ 1, Moves.TACKLE ], // Previous Stage Move [ 1, Moves.GROWL ], + [ 1, Moves.HORN_ATTACK ], [ 1, Moves.DEFENSE_CURL ], + [ 1, Moves.ODOR_SLEUTH ], // Previous Stage Move + [ 1, Moves.FLAIL ], // Previous Stage Move + [ 1, Moves.ENDURE ], // Previous Stage Move + [ 1, Moves.TAKE_DOWN ], // Previous Stage Move + [ 1, Moves.CHARM ], // Previous Stage Move + [ 1, Moves.LAST_RESORT ], // Previous Stage Move + [ 1, Moves.DOUBLE_EDGE ], // Previous Stage Move [ 1, Moves.THUNDER_FANG ], [ 1, Moves.FIRE_FANG ], [ 1, Moves.BULLDOZE ], @@ -4047,6 +4101,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.CONVERSION ], [ 1, Moves.RECYCLE ], [ 1, Moves.MAGNET_RISE ], + [ 1, Moves.MAGIC_COAT ], // Previous Stage Move [ 15, Moves.THUNDER_SHOCK ], [ 20, Moves.PSYBEAM ], [ 25, Moves.CONVERSION_2 ], @@ -4513,6 +4568,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.MARSHTOMP]: [ [ EVOLVE_MOVE, Moves.MUD_SHOT ], + [ RELEARN_MOVE, Moves.SURF ], // Previous Stage Move [ RELEARN_MOVE, Moves.ROCK_SMASH ], [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], @@ -4634,10 +4690,15 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.SILCOON]: [ [ EVOLVE_MOVE, Moves.HARDEN ], + [ RELEARN_MOVE, Moves.TACKLE ], // Previous Stage Move + [ RELEARN_MOVE, Moves.STRING_SHOT ], // Previous Stage Move + [ RELEARN_MOVE, Moves.POISON_STING ], // Previous Stage Move + [ RELEARN_MOVE, Moves.BUG_BITE ], // Previous Stage Move [ 1, Moves.HARDEN ], ], [Species.BEAUTIFLY]: [ [ EVOLVE_MOVE, Moves.GUST ], + [ 1, Moves.TACKLE ], // Previous Stage Move [ 1, Moves.BUG_BITE ], [ 1, Moves.GUST ], [ 1, Moves.HARDEN ], @@ -4658,10 +4719,15 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.CASCOON]: [ [ EVOLVE_MOVE, Moves.HARDEN ], + [ RELEARN_MOVE, Moves.TACKLE ], // Previous Stage Move + [ RELEARN_MOVE, Moves.STRING_SHOT ], // Previous Stage Move + [ RELEARN_MOVE, Moves.POISON_STING ], // Previous Stage Move + [ RELEARN_MOVE, Moves.BUG_BITE ], // Previous Stage Move [ 1, Moves.HARDEN ], ], [Species.DUSTOX]: [ [ EVOLVE_MOVE, Moves.GUST ], + [ 1, Moves.TACKLE ], // Previous Stage Move [ 1, Moves.BUG_BITE ], [ 1, Moves.GUST ], [ 1, Moves.HARDEN ], @@ -4701,6 +4767,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.ABSORB ], [ 1, Moves.FLAIL ], [ 1, Moves.FAKE_OUT ], + [ 1, Moves.RAIN_DANCE ], // Previous Stage Move [ 1, Moves.KNOCK_OFF ], [ 1, Moves.TEETER_DANCE ], [ 1, Moves.ASTONISH ], @@ -4728,6 +4795,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ RELEARN_MOVE, Moves.ASTONISH ], [ RELEARN_MOVE, Moves.ENERGY_BALL ], [ RELEARN_MOVE, Moves.ZEN_HEADBUTT ], + [ RELEARN_MOVE, Moves.LEECH_SEED ], // Previous Stage Move + [ RELEARN_MOVE, Moves.GIGA_DRAIN ], // Previous Stage Move [ 1, Moves.FAKE_OUT ], [ 1, Moves.BUBBLE_BEAM ], [ 1, Moves.RAIN_DANCE ], @@ -4757,8 +4826,10 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.EXPLOSION ], [ 1, Moves.TACKLE ], [ 1, Moves.HARDEN ], + [ 1, Moves.BIDE ], // Previous Stage Move [ 1, Moves.ABSORB ], [ 1, Moves.ASTONISH ], + [ 1, Moves.HEADBUTT ], // Previous Stage Move [ 9, Moves.GROWTH ], [ 12, Moves.ROLLOUT ], [ 18, Moves.MEGA_DRAIN ], @@ -4773,11 +4844,13 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ EVOLVE_MOVE, Moves.LEAF_BLADE ], [ RELEARN_MOVE, Moves.WHIRLWIND ], [ RELEARN_MOVE, Moves.TACKLE ], + [ RELEARN_MOVE, Moves.BIDE ], // Previous Stage Move [ RELEARN_MOVE, Moves.ABSORB ], [ RELEARN_MOVE, Moves.MEGA_DRAIN ], [ RELEARN_MOVE, Moves.GROWTH ], [ RELEARN_MOVE, Moves.RAZOR_LEAF ], [ RELEARN_MOVE, Moves.HARDEN ], + [ RELEARN_MOVE, Moves.HEADBUTT ], // Previous Stage Move [ RELEARN_MOVE, Moves.EXPLOSION ], [ RELEARN_MOVE, Moves.ROLLOUT ], [ RELEARN_MOVE, Moves.SWAGGER ], @@ -4930,11 +5003,17 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 38, Moves.STICKY_WEB ], ], [Species.MASQUERAIN]: [ + [ RELEARN_MOVE, Moves.BATON_PASS ], // Previous Stage Move + [ RELEARN_MOVE, Moves.STICKY_WEB ], // Previous Stage Move [ 1, Moves.WHIRLWIND ], [ 1, Moves.WATER_GUN ], [ 1, Moves.QUICK_ATTACK ], [ 1, Moves.SWEET_SCENT ], [ 1, Moves.SOAK ], + [ 1, Moves.BUBBLE_BEAM ], // Previous Stage Move + [ 1, Moves.AGILITY ], // Previous Stage Move + [ 1, Moves.MIST ], // Previous Stage Move + [ 1, Moves.HAZE ], // Previous Stage Move [ 1, Moves.OMINOUS_WIND ], [ 17, Moves.GUST ], [ 22, Moves.SCARY_FACE ], @@ -4963,6 +5042,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ EVOLVE_MOVE, Moves.MACH_PUNCH ], [ RELEARN_MOVE, Moves.SPORE ], [ 1, Moves.POISON_POWDER ], + [ 1, Moves.GIGA_DRAIN ], // Previous Stage Move [ 1, Moves.GROWTH ], [ 1, Moves.TOXIC ], [ 1, Moves.ABSORB ], @@ -4994,9 +5074,16 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 38, Moves.PLAY_ROUGH ], ], [Species.VIGOROTH]: [ + [ RELEARN_MOVE, Moves.PLAY_ROUGH ], // Previous Stage Move [ 1, Moves.SCRATCH ], + [ 1, Moves.YAWN ], // Previous Stage Move [ 1, Moves.FOCUS_ENERGY ], + [ 1, Moves.SLACK_OFF ], // Previous Stage Move [ 1, Moves.ENCORE ], + [ 1, Moves.HEADBUTT ], // Previous Stage Move + [ 1, Moves.AMNESIA ], // Previous Stage Move + [ 1, Moves.COVET ], // Previous Stage Move + [ 1, Moves.FLAIL ], // Previous Stage Move [ 1, Moves.UPROAR ], [ 14, Moves.FURY_SWIPES ], [ 17, Moves.ENDURE ], @@ -5008,11 +5095,20 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.SLAKING]: [ [ EVOLVE_MOVE, Moves.SWAGGER ], + [ RELEARN_MOVE, Moves.PLAY_ROUGH ], // Previous Stage Move + [ RELEARN_MOVE, Moves.FOCUS_PUNCH ], // Previous Stage Move [ 1, Moves.SUCKER_PUNCH ], [ 1, Moves.SCRATCH ], [ 1, Moves.YAWN ], + [ 1, Moves.FOCUS_ENERGY ], // Previous Stage Move [ 1, Moves.ENCORE ], [ 1, Moves.SLACK_OFF ], + [ 1, Moves.UPROAR ], // Previous Stage Move + [ 1, Moves.FURY_SWIPES ], // Previous Stage Move + [ 1, Moves.ENDURE ], // Previous Stage Move + [ 1, Moves.HEADBUTT ], // Previous Stage Move + [ 1, Moves.SLASH ], // Previous Stage Move + [ 1, Moves.REVERSAL ], // Previous Stage Move [ 17, Moves.AMNESIA ], [ 23, Moves.COVET ], [ 27, Moves.THROAT_CHOP ], @@ -5148,6 +5244,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.BRINE ], [ 1, Moves.TACKLE ], [ 1, Moves.FOCUS_ENERGY ], + [ 1, Moves.SAND_ATTACK ], // Previous Stage Move [ 1, Moves.ARM_THRUST ], [ 10, Moves.FAKE_OUT ], [ 13, Moves.FORCE_PALM ], @@ -5351,6 +5448,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.DETECT ], [ 1, Moves.WORK_UP ], [ 1, Moves.BIDE ], + [ 1, Moves.REVERSAL ], // Previous Stage Move [ 12, Moves.ENDURE ], [ 15, Moves.FEINT ], [ 17, Moves.FORCE_PALM ], @@ -5520,6 +5618,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.POISON_GAS ], [ 1, Moves.WRING_OUT ], [ 1, Moves.SLUDGE ], + [ 1, Moves.PAIN_SPLIT ], // Previous Stage Move [ 12, Moves.AMNESIA ], [ 17, Moves.ACID_SPRAY ], [ 20, Moves.ENCORE ], @@ -5565,7 +5664,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.WAILMER]: [ [ 1, Moves.SPLASH ], - [ 1, Moves.TACKLE ], //Custom + [ 1, Moves.TACKLE ], // Custom [ 3, Moves.GROWL ], [ 6, Moves.ASTONISH ], [ 12, Moves.WATER_GUN ], @@ -5586,6 +5685,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.SOAK ], [ 1, Moves.NOBLE_ROAR ], [ 1, Moves.SPLASH ], + [ 1, Moves.TACKLE ], // Previous Stage Move, Custom [ 1, Moves.GROWL ], [ 1, Moves.ASTONISH ], [ 1, Moves.WATER_GUN ], @@ -5620,6 +5720,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.CAMERUPT]: [ [ EVOLVE_MOVE, Moves.ROCK_SLIDE ], + [ RELEARN_MOVE, Moves.FLAMETHROWER ], // Previous Stage Move + [ RELEARN_MOVE, Moves.DOUBLE_EDGE ], // Previous Stage Move [ 1, Moves.FISSURE ], [ 1, Moves.ERUPTION ], [ 1, Moves.GROWL ], @@ -5658,7 +5760,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.SPOINK]: [ [ 1, Moves.SPLASH ], - [ 5, Moves.CONFUSION ], //Custom, Moved from Level 7 to 5 + [ 5, Moves.CONFUSION ], // Custom, Moved from Level 7 to 5 [ 10, Moves.GROWL ], [ 14, Moves.PSYBEAM ], [ 18, Moves.PSYCH_UP ], @@ -5676,6 +5778,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.BELCH ], [ 1, Moves.SPLASH ], [ 1, Moves.CONFUSION ], + [ 1, Moves.GROWL ], // Previous Stage Move [ 1, Moves.PSYBEAM ], [ 18, Moves.PSYCH_UP ], [ 22, Moves.CONFUSE_RAY ], @@ -6167,7 +6270,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.SHUPPET]: [ [ 1, Moves.ASTONISH ], - [ 1, Moves.PURSUIT ], //Custom + [ 1, Moves.PURSUIT ], // Custom [ 4, Moves.SCREECH ], [ 7, Moves.NIGHT_SHADE ], [ 10, Moves.SPITE ], @@ -6183,6 +6286,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.BANETTE]: [ [ EVOLVE_MOVE, Moves.KNOCK_OFF ], + [ 1, Moves.ASTONISH ], // Previous Stage Move + [ 1, Moves.PURSUIT ], // Previous Stage Move, Custom [ 1, Moves.SCREECH ], [ 1, Moves.NIGHT_SHADE ], [ 1, Moves.SPITE ], @@ -6199,7 +6304,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.DUSKULL]: [ [ 1, Moves.ASTONISH ], [ 1, Moves.LEER ], - [ 1, Moves.PURSUIT ], //Custom + [ 1, Moves.PURSUIT ], // Custom [ 4, Moves.DISABLE ], [ 8, Moves.SHADOW_SNEAK ], [ 12, Moves.CONFUSE_RAY ], @@ -6221,6 +6326,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.BIND ], [ 1, Moves.ASTONISH ], [ 1, Moves.LEER ], + [ 1, Moves.PURSUIT ], // Previous Stage Move, Custom [ 1, Moves.DISABLE ], [ 1, Moves.SHADOW_SNEAK ], [ 12, Moves.CONFUSE_RAY ], @@ -6252,7 +6358,10 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.CHIMECHO]: [ [ 1, Moves.HEALING_WISH ], + [ 1, Moves.LAST_RESORT ], // Previous Stage Move + [ 1, Moves.ENTRAINMENT ], // Previous Stage Move [ 1, Moves.WRAP ], + [ 1, Moves.PSYWAVE ], // Previous Stage Move, Custom [ 1, Moves.GROWL ], [ 1, Moves.ASTONISH ], [ 1, Moves.CONFUSION ], @@ -6392,6 +6501,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 50, Moves.SHELL_SMASH ], ], [Species.HUNTAIL]: [ + [ 1, Moves.CLAMP ], // Previous Stage Move [ 1, Moves.WATER_GUN ], [ 1, Moves.IRON_DEFENSE ], [ 1, Moves.SHELL_SMASH ], @@ -6412,6 +6522,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 50, Moves.HYDRO_PUMP ], ], [Species.GOREBYSS]: [ + [ 1, Moves.CLAMP ], // Previous Stage Move [ 1, Moves.WATER_GUN ], [ 1, Moves.IRON_DEFENSE ], [ 1, Moves.SHELL_SMASH ], @@ -6497,6 +6608,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.SALAMENCE]: [ [ EVOLVE_MOVE, Moves.FLY ], + [ RELEARN_MOVE, Moves.OUTRAGE ], // Previous Stage Move [ 1, Moves.PROTECT ], [ 1, Moves.DRAGON_TAIL ], [ 1, Moves.DUAL_WINGBEAT ], @@ -6712,7 +6824,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 98, Moves.DOOM_DESIRE ], ], [Species.DEOXYS]: [ - [ 1, Moves.CONFUSION ], //Custom + [ 1, Moves.CONFUSION ], // Custom [ 1, Moves.LEER ], [ 1, Moves.WRAP ], [ 7, Moves.NIGHT_SHADE ], @@ -6731,8 +6843,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.TURTWIG]: [ [ 1, Moves.TACKLE ], [ 5, Moves.WITHDRAW ], - [ 5, Moves.LEAFAGE ], //Custom, moved from 10 to 5, BDSP - [ 9, Moves.GROWTH ], //Fill empty moveslot, from BDSP level 6 + [ 5, Moves.LEAFAGE ], // Custom, moved from 10 to 5, BDSP + [ 9, Moves.GROWTH ], // Fill empty moveslot, from BDSP level 6 [ 13, Moves.RAZOR_LEAF ], [ 17, Moves.CURSE ], [ 21, Moves.BITE ], @@ -6748,6 +6860,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.ABSORB ], [ 1, Moves.WITHDRAW ], [ 1, Moves.LEAFAGE ], + [ 1, Moves.GROWTH ], // Previous Stage Move [ 13, Moves.RAZOR_LEAF ], [ 17, Moves.CURSE ], [ 22, Moves.BITE ], @@ -6763,6 +6876,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.TACKLE ], [ 1, Moves.ABSORB ], [ 1, Moves.LEAFAGE ], + [ 1, Moves.GROWTH ], // Previous Stage Move [ 1, Moves.RAZOR_LEAF ], [ 1, Moves.WITHDRAW ], [ 1, Moves.WOOD_HAMMER ], @@ -6779,7 +6893,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.CHIMCHAR]: [ [ 1, Moves.SCRATCH ], [ 1, Moves.LEER ], - [ 5, Moves.EMBER ], //Custom, moved from 7 to 5 + [ 5, Moves.EMBER ], // Custom, moved from 7 to 5 [ 9, Moves.TAUNT ], [ 15, Moves.FURY_SWIPES ], [ 17, Moves.FLAME_WHEEL ], @@ -6793,6 +6907,9 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.MONFERNO]: [ [ EVOLVE_MOVE, Moves.MACH_PUNCH ], + [ RELEARN_MOVE, Moves.NASTY_PLOT ], // Previous Stage Move + [ RELEARN_MOVE, Moves.FACADE ], // Previous Stage Move + [ RELEARN_MOVE, Moves.FLAMETHROWER ], // Previous Stage Move [ 1, Moves.SCRATCH ], [ 1, Moves.LEER ], [ 1, Moves.EMBER ], @@ -6810,7 +6927,10 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.INFERNAPE]: [ [ EVOLVE_MOVE, Moves.CLOSE_COMBAT ], [ RELEARN_MOVE, Moves.TAUNT ], + [ RELEARN_MOVE, Moves.NASTY_PLOT ], // Previous Stage Move + [ RELEARN_MOVE, Moves.FACADE ], // Previous Stage Move [ RELEARN_MOVE, Moves.SLACK_OFF ], + [ RELEARN_MOVE, Moves.FLAMETHROWER ], // Previous Stage Move [ 1, Moves.SCRATCH ], [ 1, Moves.LEER ], [ 1, Moves.EMBER ], @@ -6828,7 +6948,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.PIPLUP]: [ [ 1, Moves.POUND ], [ 4, Moves.GROWL ], - [ 5, Moves.WATER_GUN ], //Custom, moved from 8 to 5 + [ 5, Moves.WATER_GUN ], // Custom, moved from 8 to 5 [ 11, Moves.CHARM ], [ 15, Moves.PECK ], [ 18, Moves.BUBBLE_BEAM ], @@ -6845,6 +6965,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], [ 1, Moves.WATER_GUN ], + [ 1, Moves.CHARM ], // Previous Stage Move [ 15, Moves.PECK ], [ 19, Moves.BUBBLE_BEAM ], [ 24, Moves.SWAGGER ], @@ -6860,6 +6981,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], [ 1, Moves.WATER_GUN ], + [ 1, Moves.CHARM ], // Previous Stage Move [ 1, Moves.METAL_CLAW ], [ 11, Moves.SWORDS_DANCE ], [ 15, Moves.PECK ], @@ -6963,6 +7085,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], [ 1, Moves.BIDE ], + [ 1, Moves.STRUGGLE_BUG ], // Previous Stage Move + [ 1, Moves.BUG_BITE ], // Previous Stage Move [ 14, Moves.ABSORB ], [ 18, Moves.SING ], [ 22, Moves.FOCUS_ENERGY ], @@ -7113,13 +7237,14 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.BURMY]: [ [ 1, Moves.PROTECT ], - [ 1, Moves.STRUGGLE_BUG ], //Custom + [ 1, Moves.STRUGGLE_BUG ], // Custom [ 10, Moves.TACKLE ], [ 15, Moves.BUG_BITE ], [ 20, Moves.STRING_SHOT ], ], [Species.WORMADAM]: [ [ EVOLVE_MOVE, Moves.QUIVER_DANCE ], + [ 1, Moves.STRUGGLE_BUG ], // Previous Stage Move, Custom [ 1, Moves.TACKLE ], [ 1, Moves.PROTECT ], [ 1, Moves.SUCKER_PUNCH ], @@ -7140,6 +7265,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.MOTHIM]: [ [ EVOLVE_MOVE, Moves.QUIVER_DANCE ], + [ 1, Moves.STRUGGLE_BUG ], // Previous Stage Move [ 1, Moves.TACKLE ], [ 1, Moves.PROTECT ], [ 1, Moves.BUG_BITE ], @@ -7221,6 +7347,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 49, Moves.WAVE_CRASH ], ], [Species.FLOATZEL]: [ + [ 1, Moves.TACKLE ], // Previous Stage Move [ 1, Moves.GROWL ], [ 1, Moves.QUICK_ATTACK ], [ 1, Moves.CRUNCH ], @@ -7368,6 +7495,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.LOPUNNY]: [ [ EVOLVE_MOVE, Moves.RETURN ], + [ 1, Moves.FRUSTRATION ], // Previous Stage Move [ 1, Moves.POUND ], [ 1, Moves.DEFENSE_CURL ], [ 1, Moves.SPLASH ], @@ -7389,6 +7517,16 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 56, Moves.HIGH_JUMP_KICK ], ], [Species.MISMAGIUS]: [ + // Previous Stage Relearn Learnset + [ RELEARN_MOVE, Moves.CONFUSION ], + [ RELEARN_MOVE, Moves.CONFUSE_RAY ], + [ RELEARN_MOVE, Moves.MEAN_LOOK ], + [ RELEARN_MOVE, Moves.HEX ], + [ RELEARN_MOVE, Moves.PSYBEAM ], + [ RELEARN_MOVE, Moves.PAIN_SPLIT ], + [ RELEARN_MOVE, Moves.PAYBACK ], + [ RELEARN_MOVE, Moves.SHADOW_BALL ], + [ RELEARN_MOVE, Moves.PERISH_SONG ], [ 1, Moves.GROWL ], [ 1, Moves.SPITE ], [ 1, Moves.PSYWAVE ], @@ -7400,11 +7538,18 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.MYSTICAL_FIRE ], ], [Species.HONCHKROW]: [ - [ 1, Moves.WING_ATTACK ], - [ 1, Moves.HAZE ], + [ 1, Moves.PECK ], // Previous Stage Move [ 1, Moves.ASTONISH ], + [ 1, Moves.GUST ], // Previous Stage Move + [ 1, Moves.HAZE ], + [ 1, Moves.WING_ATTACK ], + [ 1, Moves.NIGHT_SHADE ], // Previous Stage Move + [ 1, Moves.ASSURANCE ], // Previous Stage Move + [ 1, Moves.TAUNT ], // Previous Stage Move + [ 1, Moves.MEAN_LOOK ], // Previous Stage Move [ 1, Moves.SUCKER_PUNCH ], [ 1, Moves.NIGHT_SLASH ], + [ 1, Moves.TORMENT ], // Previous Stage Move [ 1, Moves.QUASH ], [ 1, Moves.PURSUIT ], [ 25, Moves.SWAGGER ], @@ -7449,7 +7594,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.CHINGLING]: [ [ 1, Moves.WRAP ], - [ 1, Moves.PSYWAVE ], //Custom + [ 1, Moves.PSYWAVE ], // Custom [ 4, Moves.GROWL ], [ 7, Moves.ASTONISH ], [ 10, Moves.CONFUSION ], @@ -7482,6 +7627,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.SMOKESCREEN ], [ 1, Moves.POISON_GAS ], [ 1, Moves.FEINT ], + [ 1, Moves.ACID_SPRAY ], // Previous Stage Move [ 12, Moves.FURY_SWIPES ], [ 15, Moves.FOCUS_ENERGY ], [ 18, Moves.BITE ], @@ -7533,7 +7679,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.BONSLY]: [ [ 1, Moves.FAKE_TEARS ], [ 1, Moves.COPYCAT ], - [ 1, Moves.TACKLE ], //Custom + [ 1, Moves.TACKLE ], // Custom [ 4, Moves.FLAIL ], [ 8, Moves.ROCK_THROW ], [ 12, Moves.BLOCK ], @@ -7554,11 +7700,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 4, Moves.BATON_PASS ], [ 8, Moves.ENCORE ], [ 12, Moves.CONFUSION ], - [ 16, Moves.MIMIC ], //Custom, swapped with Role Play to be closer to USUM + [ 16, Moves.MIMIC ], // Custom, swapped with Role Play to be closer to USUM [ 20, Moves.PROTECT ], [ 24, Moves.RECYCLE ], [ 28, Moves.PSYBEAM ], - [ 32, Moves.ROLE_PLAY ], //Custom, swapped with Mimic + [ 32, Moves.ROLE_PLAY ], // Custom, swapped with Mimic [ 36, Moves.LIGHT_SCREEN ], [ 36, Moves.REFLECT ], [ 36, Moves.SAFEGUARD ], @@ -7696,6 +7842,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.LUCARIO]: [ [ EVOLVE_MOVE, Moves.AURA_SPHERE ], [ 1, Moves.QUICK_ATTACK ], + [ 1, Moves.ENDURE ], // Previous Stage Move [ 1, Moves.SCREECH ], [ 1, Moves.REVERSAL ], [ 1, Moves.DETECT ], @@ -7836,7 +7983,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.CARNIVINE]: [ [ 1, Moves.BIND ], [ 1, Moves.GROWTH ], - [ 1, Moves.LEAFAGE ], //Custom + [ 1, Moves.LEAFAGE ], // Custom [ 7, Moves.BITE ], [ 11, Moves.VINE_WHIP ], [ 17, Moves.SWEET_SCENT ], @@ -7973,6 +8120,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.SUPERSONIC ], [ 1, Moves.DEFENSE_CURL ], [ 1, Moves.LICK ], + [ 1, Moves.TACKLE ], // Previous Stage Move, Custom [ 1, Moves.ROLLOUT ], [ 1, Moves.WRING_OUT ], [ 6, Moves.REST ], @@ -8086,7 +8234,9 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ RELEARN_MOVE, Moves.HYPNOSIS ], [ 1, Moves.TACKLE ], [ 1, Moves.DOUBLE_TEAM ], + [ 1, Moves.AIR_CUTTER ], // Previous Stage Move [ 1, Moves.NIGHT_SLASH ], + [ 1, Moves.WING_ATTACK ], // Previous Stage Move [ 1, Moves.AIR_SLASH ], [ 1, Moves.BUG_BUZZ ], [ 14, Moves.QUICK_ATTACK ], @@ -8102,6 +8252,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.LEAFEON]: [ [ EVOLVE_MOVE, Moves.SAPPY_SEED ], + [ RELEARN_MOVE, Moves.VEEVEE_VOLLEY ], // Previous Stage Move [ 1, Moves.TACKLE ], [ 1, Moves.TAKE_DOWN ], [ 1, Moves.DOUBLE_EDGE ], @@ -8129,6 +8280,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.GLACEON]: [ [ EVOLVE_MOVE, Moves.FREEZY_FROST ], + [ RELEARN_MOVE, Moves.VEEVEE_VOLLEY ], // Previous Stage Move [ 1, Moves.TACKLE ], [ 1, Moves.TAKE_DOWN ], [ 1, Moves.DOUBLE_EDGE ], @@ -8154,8 +8306,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 60, Moves.LAST_RESORT ], ], [Species.GLISCOR]: [ + [ 1, Moves.POISON_STING ], // Previous Stage Move [ 1, Moves.SAND_ATTACK ], [ 1, Moves.HARDEN ], + [ 1, Moves.POISON_TAIL ], // Previous Stage Move + [ 1, Moves.SLASH ], // Previous Stage Move [ 1, Moves.POISON_JAB ], [ 1, Moves.THUNDER_FANG ], [ 1, Moves.ICE_FANG ], @@ -8248,8 +8403,10 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.PROBOPASS]: [ [ EVOLVE_MOVE, Moves.TRI_ATTACK ], [ 1, Moves.TACKLE ], + [ 1, Moves.HARDEN ], // Previous Stage Move [ 1, Moves.IRON_DEFENSE ], [ 1, Moves.BLOCK ], + [ 1, Moves.ROCK_THROW ], // Previous Stage Move [ 1, Moves.GRAVITY ], [ 1, Moves.MAGNET_RISE ], [ 1, Moves.WIDE_GUARD ], @@ -8275,6 +8432,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.LEER ], [ 1, Moves.DISABLE ], [ 1, Moves.ASTONISH ], + [ 1, Moves.PURSUIT ], // Previous Stage Move, Custom [ 1, Moves.SHADOW_PUNCH ], [ 1, Moves.GRAVITY ], [ 1, Moves.SHADOW_SNEAK ], @@ -8298,6 +8456,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.POWDER_SNOW ], [ 1, Moves.PROTECT ], [ 1, Moves.DESTINY_BOND ], + [ 1, Moves.WEATHER_BALL ], // Previous Stage Move [ 1, Moves.CRUNCH ], [ 1, Moves.ASTONISH ], [ 1, Moves.ICE_FANG ], @@ -8538,7 +8697,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.DARKRAI]: [ [ 1, Moves.DISABLE ], [ 1, Moves.OMINOUS_WIND ], - [ 1, Moves.PURSUIT ], //Custom + [ 1, Moves.PURSUIT ], // Custom [ 11, Moves.QUICK_ATTACK ], [ 20, Moves.HYPNOSIS ], [ 29, Moves.SUCKER_PUNCH ], @@ -8551,7 +8710,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 93, Moves.DARK_PULSE ], ], [Species.SHAYMIN]: [ - [ 1, Moves.LEAFAGE ], //Custom + [ 1, Moves.LEAFAGE ], // Custom [ 1, Moves.GROWTH ], [ 10, Moves.MAGICAL_LEAF ], [ 19, Moves.LEECH_SEED ], @@ -8603,7 +8762,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.SNIVY]: [ [ 1, Moves.TACKLE ], [ 4, Moves.LEER ], - [ 5, Moves.VINE_WHIP ], //Custom, moved from 7 to 5 + [ 5, Moves.VINE_WHIP ], // Custom, moved from 7 to 5 [ 10, Moves.WRAP ], [ 13, Moves.GROWTH ], [ 16, Moves.MAGICAL_LEAF ], @@ -8651,7 +8810,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.TEPIG]: [ [ 1, Moves.TACKLE ], [ 3, Moves.TAIL_WHIP ], - [ 5, Moves.EMBER ], //Custom, moved from 7 to 5 + [ 5, Moves.EMBER ], // Custom, moved from 7 to 5 [ 9, Moves.ENDURE ], [ 13, Moves.DEFENSE_CURL ], [ 15, Moves.FLAME_CHARGE ], @@ -8705,7 +8864,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.OSHAWOTT]: [ [ 1, Moves.TACKLE ], [ 5, Moves.TAIL_WHIP ], - [ 5, Moves.WATER_GUN ], //Custom, moved from 7 to 5 + [ 5, Moves.WATER_GUN ], // Custom, moved from 7 to 5 [ 11, Moves.SOAK ], [ 13, Moves.FOCUS_ENERGY ], [ 17, Moves.RAZOR_SHELL ], @@ -8776,6 +8935,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.WATCHOG]: [ [ EVOLVE_MOVE, Moves.CONFUSE_RAY ], + [ RELEARN_MOVE, Moves.WORK_UP ], // Previous Stage Move [ 1, Moves.TACKLE ], [ 1, Moves.LEER ], [ 1, Moves.BITE ], @@ -8895,6 +9055,19 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 43, Moves.CRUNCH ], ], [Species.SIMISAGE]: [ + // Previous Stage Relearn Learnset + [ RELEARN_MOVE, Moves.SCRATCH ], + [ RELEARN_MOVE, Moves.PLAY_NICE ], + [ RELEARN_MOVE, Moves.VINE_WHIP ], + [ RELEARN_MOVE, Moves.LEECH_SEED ], + [ RELEARN_MOVE, Moves.BITE ], + [ RELEARN_MOVE, Moves.TORMENT ], + [ RELEARN_MOVE, Moves.FLING ], + [ RELEARN_MOVE, Moves.ACROBATICS ], + [ RELEARN_MOVE, Moves.GRASS_KNOT ], + [ RELEARN_MOVE, Moves.RECYCLE ], + [ RELEARN_MOVE, Moves.NATURAL_GIFT ], + [ RELEARN_MOVE, Moves.CRUNCH ], [ 1, Moves.LEER ], [ 1, Moves.LICK ], [ 1, Moves.FURY_SWIPES ], @@ -8919,6 +9092,19 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 43, Moves.CRUNCH ], ], [Species.SIMISEAR]: [ + // Previous Stage Relearn Learnset + [ RELEARN_MOVE, Moves.SCRATCH ], + [ RELEARN_MOVE, Moves.PLAY_NICE ], + [ RELEARN_MOVE, Moves.INCINERATE ], + [ RELEARN_MOVE, Moves.YAWN ], + [ RELEARN_MOVE, Moves.BITE ], + [ RELEARN_MOVE, Moves.AMNESIA ], + [ RELEARN_MOVE, Moves.FLING ], + [ RELEARN_MOVE, Moves.ACROBATICS ], + [ RELEARN_MOVE, Moves.FIRE_BLAST ], + [ RELEARN_MOVE, Moves.RECYCLE ], + [ RELEARN_MOVE, Moves.NATURAL_GIFT ], + [ RELEARN_MOVE, Moves.CRUNCH ], [ 1, Moves.LEER ], [ 1, Moves.LICK ], [ 1, Moves.FURY_SWIPES ], @@ -8943,6 +9129,19 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 43, Moves.CRUNCH ], ], [Species.SIMIPOUR]: [ + // Previous Stage Relearn Learnset + [ RELEARN_MOVE, Moves.SCRATCH ], + [ RELEARN_MOVE, Moves.PLAY_NICE ], + [ RELEARN_MOVE, Moves.WATER_GUN ], + [ RELEARN_MOVE, Moves.WATER_SPORT ], + [ RELEARN_MOVE, Moves.BITE ], + [ RELEARN_MOVE, Moves.TAUNT ], + [ RELEARN_MOVE, Moves.FLING ], + [ RELEARN_MOVE, Moves.ACROBATICS ], + [ RELEARN_MOVE, Moves.BRINE ], + [ RELEARN_MOVE, Moves.RECYCLE ], + [ RELEARN_MOVE, Moves.NATURAL_GIFT ], + [ RELEARN_MOVE, Moves.CRUNCH ], [ 1, Moves.LEER ], [ 1, Moves.LICK ], [ 1, Moves.FURY_SWIPES ], @@ -8967,6 +9166,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 52, Moves.WONDER_ROOM ], ], [Species.MUSHARNA]: [ + [ 1, Moves.PSYWAVE ], // Previous Stage Move [ 1, Moves.PSYBEAM ], [ 1, Moves.PSYCHIC ], [ 1, Moves.HYPNOSIS ], @@ -9295,7 +9495,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 70, Moves.HYDRO_PUMP ], ], [Species.THROH]: [ - [ 1, Moves.ROCK_SMASH ], //Custom + [ 1, Moves.ROCK_SMASH ], // Custom [ 1, Moves.LEER ], [ 1, Moves.BIDE ], [ 1, Moves.MAT_BLOCK ], @@ -9355,9 +9555,15 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.LEAVANNY]: [ [ EVOLVE_MOVE, Moves.SLASH ], [ RELEARN_MOVE, Moves.BUG_BITE ], + [ RELEARN_MOVE, Moves.STICKY_WEB ], // Previous Stage Move + [ RELEARN_MOVE, Moves.BUG_BUZZ ], // Previous Stage Move + [ 1, Moves.PROTECT ], // Previous Stage Move [ 1, Moves.TACKLE ], [ 1, Moves.RAZOR_LEAF ], [ 1, Moves.STRING_SHOT ], + [ 1, Moves.GRASS_WHISTLE ], // Previous Stage Move + [ 1, Moves.ENDURE ], // Previous Stage Move + [ 1, Moves.FLAIL ], // Previous Stage Move [ 1, Moves.FALSE_SWIPE ], [ 22, Moves.STRUGGLE_BUG ], [ 29, Moves.FELL_STINGER ], @@ -9890,6 +10096,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.TORMENT ], [ 1, Moves.U_TURN ], [ 1, Moves.HONE_CLAWS ], + [ 1, Moves.SCARY_FACE ], // Previous Stage Move [ 1, Moves.PURSUIT ], [ 12, Moves.FURY_SWIPES ], [ 20, Moves.TAUNT ], @@ -9964,6 +10171,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 28, Moves.FAKE_TEARS ], [ 34, Moves.HEAL_BLOCK ], [ 35, Moves.PSYCH_UP ], + [ 40, Moves.PSYCHIC ], // Previous Stage Move, Gothitelle Level [ 46, Moves.FLATTER ], [ 52, Moves.FUTURE_SIGHT ], [ 58, Moves.MAGIC_ROOM ], @@ -10081,7 +10289,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.VANILLITE]: [ [ 1, Moves.HARDEN ], [ 1, Moves.ASTONISH ], - [ 1, Moves.POWDER_SNOW ], //Custom + [ 1, Moves.POWDER_SNOW ], // Custom [ 4, Moves.TAUNT ], [ 8, Moves.MIST ], [ 12, Moves.ICY_WIND ], @@ -10100,6 +10308,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.HARDEN ], [ 1, Moves.TAUNT ], [ 1, Moves.ASTONISH ], + [ 1, Moves.POWDER_SNOW ], // Previous Stage Move, Custom [ 12, Moves.ICY_WIND ], [ 16, Moves.AVALANCHE ], [ 20, Moves.HAIL ], @@ -10116,6 +10325,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.HARDEN ], [ 1, Moves.TAUNT ], [ 1, Moves.ASTONISH ], + [ 1, Moves.POWDER_SNOW ], // Previous Stage Move, Custom [ 1, Moves.WEATHER_BALL ], [ 1, Moves.ICICLE_CRASH ], [ 1, Moves.FREEZE_DRY ], @@ -10428,6 +10638,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.EELEKTRIK]: [ [ EVOLVE_MOVE, Moves.CRUNCH ], + [ 1, Moves.TACKLE ], // Previous Stage Move [ 1, Moves.HEADBUTT ], [ 1, Moves.THUNDER_WAVE ], [ 1, Moves.SPARK ], @@ -10445,7 +10656,15 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 74, Moves.THRASH ], ], [Species.EELEKTROSS]: [ + [ RELEARN_MOVE, Moves.THUNDERBOLT ], // Previous Stage Move + [ RELEARN_MOVE, Moves.ACID_SPRAY ], // Previous Stage Move + [ 1, Moves.TACKLE ], // Previous Stage Move [ 1, Moves.HEADBUTT ], + [ 1, Moves.THUNDER_WAVE ], // Previous Stage Move + [ 1, Moves.SPARK ], // Previous Stage Move + [ 1, Moves.CHARGE_BEAM ], // Previous Stage Move + [ 1, Moves.ION_DELUGE ], // Previous Stage Move + [ 1, Moves.BIND ], // Previous Stage Move [ 1, Moves.THRASH ], [ 1, Moves.ACID ], [ 1, Moves.ZAP_CANNON ], @@ -10688,6 +10907,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.BODY_SLAM ], [ 1, Moves.ACID ], [ 1, Moves.ABSORB ], + [ 1, Moves.PROTECT ], // Previous Stage Move [ 1, Moves.QUICK_ATTACK ], [ 1, Moves.DOUBLE_TEAM ], [ 1, Moves.ACID_ARMOR ], @@ -10881,6 +11101,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.BRAVIARY]: [ [ EVOLVE_MOVE, Moves.SUPERPOWER ], + [ RELEARN_MOVE, Moves.BRAVE_BIRD ], // Previous Stage Move [ 1, Moves.WING_ATTACK ], [ 1, Moves.LEER ], [ 1, Moves.PECK ], @@ -11422,6 +11643,10 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.GROWL ], [ 1, Moves.WATER_GUN ], [ 1, Moves.QUICK_ATTACK ], + [ 1, Moves.ROUND ], // Previous Stage Move + [ 1, Moves.FLING ], // Previous Stage Move + [ 1, Moves.SMACK_DOWN ], // Previous Stage Move + [ 1, Moves.BOUNCE ], // Previous Stage Move [ 1, Moves.HAZE ], [ 1, Moves.MAT_BLOCK ], [ 1, Moves.ROLE_PLAY ], @@ -11529,10 +11754,19 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.SPEWPA]: [ [ EVOLVE_MOVE, Moves.PROTECT ], + [ RELEARN_MOVE, Moves.TACKLE ], // Previous Stage Move + [ RELEARN_MOVE, Moves.STRING_SHOT ], // Previous Stage Move + [ RELEARN_MOVE, Moves.STUN_SPORE ], // Previous Stage Move + [ RELEARN_MOVE, Moves.BUG_BITE ], // Previous Stage Move [ 1, Moves.HARDEN ], ], [Species.VIVILLON]: [ [ EVOLVE_MOVE, Moves.GUST ], + [ 1, Moves.PROTECT ], // Previous Stage Move + [ 1, Moves.TACKLE ], // Previous Stage Move + [ 1, Moves.STRING_SHOT ], // Previous Stage Move + [ 1, Moves.HARDEN ], // Previous Stage Move + [ 1, Moves.BUG_BITE ], // Previous Stage Move [ 1, Moves.POISON_POWDER ], [ 1, Moves.STUN_SPORE ], [ 1, Moves.SLEEP_POWDER ], @@ -11615,6 +11849,10 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 58, Moves.SOLAR_BEAM ], ], [Species.FLORGES]: [ + [ 1, Moves.VINE_WHIP ], // Previous Stage Move + [ 1, Moves.TACKLE ], // Previous Stage Move + [ 1, Moves.FAIRY_WIND ], // Previous Stage Move + [ 1, Moves.RAZOR_LEAF ], // Previous Stage Move [ 1, Moves.SOLAR_BEAM ], [ 1, Moves.PETAL_DANCE ], [ 1, Moves.SAFEGUARD ], @@ -12106,6 +12344,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.SYLVEON]: [ [ EVOLVE_MOVE, Moves.SPARKLY_SWIRL ], + [ RELEARN_MOVE, Moves.VEEVEE_VOLLEY ], // Previous Stage Move [ 1, Moves.TACKLE ], [ 1, Moves.TAKE_DOWN ], [ 1, Moves.DOUBLE_EDGE ], @@ -12216,6 +12455,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.TACKLE ], [ 1, Moves.WATER_GUN ], [ 1, Moves.ABSORB ], + [ 1, Moves.ACID_ARMOR ], // Previous Stage Move [ 1, Moves.DRAGON_BREATH ], [ 1, Moves.POISON_TAIL ], [ 1, Moves.FEINT ], @@ -12225,6 +12465,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 20, Moves.FLAIL ], [ 25, Moves.WATER_PULSE ], [ 30, Moves.RAIN_DANCE ], + [ 35, Moves.DRAGON_PULSE ], // Previous Stage Move, NatDex / Hisui Goodra Level [ 43, Moves.CURSE ], [ 49, Moves.BODY_SLAM ], [ 58, Moves.MUDDY_WATER ], @@ -12285,7 +12526,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.PUMPKABOO]: [ [ 1, Moves.ASTONISH ], [ 1, Moves.TRICK_OR_TREAT ], - [ 1, Moves.LEAFAGE ], //Custom + [ 1, Moves.LEAFAGE ], // Custom [ 4, Moves.SHADOW_SNEAK ], [ 8, Moves.CONFUSE_RAY ], [ 12, Moves.RAZOR_LEAF ], @@ -12302,6 +12543,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.CONFUSE_RAY ], [ 1, Moves.EXPLOSION ], [ 1, Moves.ASTONISH ], + [ 1, Moves.LEAFAGE ], // Previous Stage Move, Custom [ 1, Moves.SHADOW_SNEAK ], [ 1, Moves.TRICK_OR_TREAT ], [ 1, Moves.MOONBLAST ], @@ -12813,11 +13055,14 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.CRABOMINABLE]: [ [ EVOLVE_MOVE, Moves.ICE_PUNCH ], + [ RELEARN_MOVE, Moves.CRABHAMMER ], // Previous Stage Move + [ 1, Moves.VISE_GRIP ], // Previous Stage Move [ 1, Moves.LEER ], [ 1, Moves.PROTECT ], [ 1, Moves.ROCK_SMASH ], [ 1, Moves.BUBBLE ], [ 1, Moves.PURSUIT ], + [ 1, Moves.PAYBACK ], // Previous Stage Move [ 17, Moves.BUBBLE_BEAM ], [ 22, Moves.BRICK_BREAK ], [ 25, Moves.SLAM ], @@ -13006,6 +13251,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.BUG_BITE ], [ 1, Moves.WIDE_GUARD ], [ 1, Moves.INFESTATION ], + [ 1, Moves.WATER_SPORT ], // Previous Stage Move [ 1, Moves.SPIDER_WEB ], [ 12, Moves.BUBBLE_BEAM ], [ 16, Moves.AQUA_RING ], @@ -13154,7 +13400,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.BOUNSWEET]: [ [ 1, Moves.SPLASH ], - [ 1, Moves.LEAFAGE ], //Custom + [ 1, Moves.LEAFAGE ], // Custom [ 4, Moves.PLAY_NICE ], [ 8, Moves.RAPID_SPIN ], [ 12, Moves.RAZOR_LEAF ], @@ -13165,6 +13411,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 32, Moves.AROMATIC_MIST ], ], [Species.STEENEE]: [ + [ 1, Moves.LEAFAGE ], // Previous Stage Move, Custom [ 1, Moves.RAZOR_LEAF ], [ 1, Moves.SPLASH ], [ 1, Moves.FLAIL ], @@ -13179,6 +13426,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.TSAREENA]: [ [ EVOLVE_MOVE, Moves.TROP_KICK ], + [ 1, Moves.LEAFAGE ], // Previous Stage Move, Custom [ 1, Moves.RAZOR_LEAF ], [ 1, Moves.SPLASH ], [ 1, Moves.FLAIL ], @@ -13303,7 +13551,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 68, Moves.SANDSTORM ], ], [Species.PYUKUMUKU]: [ - [ 1, Moves.COUNTER ], //Custom, Moved from Level 20 to 1 + [ 1, Moves.COUNTER ], // Custom, Moved from Level 20 to 1 [ 1, Moves.HARDEN ], [ 1, Moves.BATON_PASS ], [ 1, Moves.BIDE ], @@ -13312,7 +13560,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 5, Moves.HELPING_HAND ], [ 10, Moves.TAUNT ], [ 15, Moves.SAFEGUARD ], - [ 20, Moves.MIRROR_COAT ], //Custom + [ 20, Moves.MIRROR_COAT ], // Custom [ 25, Moves.PURIFY ], [ 30, Moves.CURSE ], [ 35, Moves.GASTRO_ACID ], @@ -13629,15 +13877,19 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.COSMOG]: [ [ 1, Moves.TELEPORT ], [ 1, Moves.SPLASH ], - [ 1, Moves.STORED_POWER ], //Custom + [ 1, Moves.STORED_POWER ], // Custom ], [Species.COSMOEM]: [ [ EVOLVE_MOVE, Moves.COSMIC_POWER ], [ 1, Moves.TELEPORT ], + [ 1, Moves.SPLASH ], // Previous Stage Move + [ 1, Moves.STORED_POWER ], // Previous Stage Move, Custom ], [Species.SOLGALEO]: [ [ EVOLVE_MOVE, Moves.SUNSTEEL_STRIKE ], [ 1, Moves.TELEPORT ], + [ 1, Moves.SPLASH ], // Previous Stage Move + [ 1, Moves.STORED_POWER ], // Previous Stage Move, Custom [ 1, Moves.METAL_CLAW ], [ 1, Moves.COSMIC_POWER ], [ 1, Moves.NOBLE_ROAR ], @@ -13660,6 +13912,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.CONFUSION ], [ 1, Moves.HYPNOSIS ], [ 1, Moves.TELEPORT ], + [ 1, Moves.SPLASH ], // Previous Stage Move + [ 1, Moves.STORED_POWER ], // Previous Stage Move, Custom [ 1, Moves.COSMIC_POWER ], [ 7, Moves.NIGHT_SHADE ], [ 14, Moves.CONFUSE_RAY ], @@ -13826,7 +14080,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.MAGEARNA]: [ [ 1, Moves.HELPING_HAND ], [ 1, Moves.GYRO_BALL ], - [ 1, Moves.DISARMING_VOICE ], //Custom + [ 1, Moves.DISARMING_VOICE ], // Custom [ 1, Moves.CRAFTY_SHIELD ], [ 1, Moves.GEAR_UP ], [ 6, Moves.DEFENSE_CURL ], @@ -13867,7 +14121,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 99, Moves.CLOSE_COMBAT ], ], [Species.POIPOLE]: [ - [ RELEARN_MOVE, Moves.DRAGON_PULSE ], //Custom, made relearn + [ RELEARN_MOVE, Moves.DRAGON_PULSE ], // Custom, made relearn [ 1, Moves.GROWL ], [ 1, Moves.ACID ], [ 1, Moves.PECK ], @@ -13986,7 +14240,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.GROOKEY]: [ [ 1, Moves.SCRATCH ], [ 1, Moves.GROWL ], - [ 5, Moves.BRANCH_POKE ], //Custom, moved from 6 to 5 + [ 5, Moves.BRANCH_POKE ], // Custom, moved from 6 to 5 [ 8, Moves.TAUNT ], [ 12, Moves.RAZOR_LEAF ], [ 17, Moves.SCREECH ], @@ -14031,7 +14285,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.SCORBUNNY]: [ [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], - [ 5, Moves.EMBER ], //Custom, moved from 6 to 5 + [ 5, Moves.EMBER ], // Custom, moved from 6 to 5 [ 8, Moves.QUICK_ATTACK ], [ 12, Moves.DOUBLE_KICK ], [ 17, Moves.FLAME_CHARGE ], @@ -14073,7 +14327,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.SOBBLE]: [ [ 1, Moves.POUND ], [ 1, Moves.GROWL ], - [ 5, Moves.WATER_GUN ], //Custom, moved from 6 to 5 + [ 5, Moves.WATER_GUN ], // Custom, moved from 6 to 5 [ 8, Moves.BIND ], [ 12, Moves.WATER_PULSE ], [ 17, Moves.TEARFUL_LOOK ], @@ -14400,10 +14654,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.APPLIN]: [ [ 1, Moves.WITHDRAW ], [ 1, Moves.ASTONISH ], - [ 1, Moves.LEAFAGE ], //Custom + [ 1, Moves.LEAFAGE ], // Custom ], [Species.FLAPPLE]: [ [ EVOLVE_MOVE, Moves.WING_ATTACK ], + [ 1, Moves.LEAFAGE ], // Previous Stage Move, Custom [ 1, Moves.GROWTH ], [ 1, Moves.WITHDRAW ], [ 1, Moves.TWISTER ], @@ -14423,6 +14678,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.APPLETUN]: [ [ EVOLVE_MOVE, Moves.HEADBUTT ], + [ 1, Moves.LEAFAGE ], // Previous Stage Move, Custom [ 1, Moves.GROWTH ], [ 1, Moves.WITHDRAW ], [ 1, Moves.SWEET_SCENT ], @@ -14443,7 +14699,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.SILICOBRA]: [ [ 1, Moves.SAND_ATTACK ], [ 1, Moves.WRAP ], - [ 1, Moves.MUD_SLAP ], //Custom + [ 1, Moves.MUD_SLAP ], // Custom [ 5, Moves.MINIMIZE ], [ 10, Moves.BRUTAL_SWING ], [ 15, Moves.BULLDOZE ], @@ -14458,6 +14714,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.SANDACONDA]: [ [ 1, Moves.SAND_ATTACK ], [ 1, Moves.WRAP ], + [ 1, Moves.MUD_SLAP ], // Previous Stage Move, Custom [ 1, Moves.MINIMIZE ], [ 1, Moves.BRUTAL_SWING ], [ 15, Moves.BULLDOZE ], @@ -14605,7 +14862,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.SINISTEA]: [ [ 1, Moves.WITHDRAW ], [ 1, Moves.ASTONISH ], - [ 1, Moves.ABSORB ], //Custom + [ 1, Moves.ABSORB ], // Custom [ 6, Moves.AROMATIC_MIST ], [ 12, Moves.MEGA_DRAIN ], [ 24, Moves.SUCKER_PUNCH ], @@ -14618,6 +14875,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.POLTEAGEIST]: [ [ EVOLVE_MOVE, Moves.TEATIME ], + [ 1, Moves.ABSORB ], // Previous Stage Move, Custom [ 1, Moves.MEGA_DRAIN ], [ 1, Moves.WITHDRAW ], [ 1, Moves.ASTONISH ], @@ -14805,6 +15063,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.MR_RIME]: [ [ 1, Moves.POUND ], + [ 1, Moves.BARRIER ], // Previous Stage Move + [ 1, Moves.TICKLE ], // Previous Stage Move [ 1, Moves.MIMIC ], [ 1, Moves.LIGHT_SCREEN ], [ 1, Moves.REFLECT ], @@ -15133,6 +15393,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.DRAGAPULT]: [ [ EVOLVE_MOVE, Moves.DRAGON_DARTS ], + [ RELEARN_MOVE, Moves.DRAGON_PULSE ], // Previous Stage Move [ 1, Moves.BITE ], [ 1, Moves.QUICK_ATTACK ], [ 1, Moves.DRAGON_BREATH ], @@ -15339,6 +15600,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.WYRDEER]: [ [ EVOLVE_MOVE, Moves.PSYSHIELD_BASH ], [ 1, Moves.TACKLE ], + [ 1, Moves.ME_FIRST ], // Previous Stage Move [ 3, Moves.LEER ], [ 7, Moves.ASTONISH ], [ 10, Moves.HYPNOSIS ], @@ -15355,6 +15617,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.KLEAVOR]: [ [ EVOLVE_MOVE, Moves.STONE_AXE ], + [ 1, Moves.WING_ATTACK ], // Previous Stage Move + [ 1, Moves.AIR_SLASH ], // Previous Stage Move [ 1, Moves.LEER ], [ 1, Moves.QUICK_ATTACK ], [ 4, Moves.FURY_CUTTER ], @@ -15364,6 +15628,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 20, Moves.DOUBLE_HIT ], [ 24, Moves.SLASH ], [ 28, Moves.FOCUS_ENERGY ], + [ 30, Moves.STEEL_WING ], // Custom [ 32, Moves.AGILITY ], [ 36, Moves.ROCK_SLIDE ], [ 40, Moves.X_SCISSOR ], @@ -15374,8 +15639,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.SCRATCH ], [ 1, Moves.LEER ], [ 1, Moves.LICK ], - [ 1, Moves.FAKE_TEARS ], [ 1, Moves.COVET ], + [ 1, Moves.FLING ], // Previous Stage Move + [ 1, Moves.BABY_DOLL_EYES ], // Previous Stage Move + [ 1, Moves.FAKE_TEARS ], + [ 1, Moves.CHARM ], // Previous Stage Moves [ 8, Moves.FURY_SWIPES ], [ 13, Moves.PAYBACK ], [ 17, Moves.SWEET_SCENT ], @@ -15390,6 +15658,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 64, Moves.HAMMER_ARM ], ], [Species.BASCULEGION]: [ + [ RELEARN_MOVE, Moves.FINAL_GAMBIT ], // Previous Stage Move, White Stripe currently shares moveset with other forms [ 1, Moves.TAIL_WHIP ], [ 1, Moves.WATER_GUN ], [ 1, Moves.SHADOW_BALL ], @@ -15949,10 +16218,12 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.GARGANACL]: [ [ EVOLVE_MOVE, Moves.HAMMER_ARM ], + [ RELEARN_MOVE, Moves.IRON_DEFENSE ], // Previous Stage Move [ 1, Moves.TACKLE ], [ 1, Moves.HARDEN ], [ 1, Moves.BLOCK ], [ 1, Moves.ROCK_BLAST ], + [ 1, Moves.SMACK_DOWN ], // Previous Stage Move [ 1, Moves.WIDE_GUARD ], [ 5, Moves.ROCK_THROW ], [ 7, Moves.MUD_SHOT ], @@ -16140,6 +16411,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ EVOLVE_MOVE, Moves.DOODLE ], [ 1, Moves.SCRATCH ], [ 1, Moves.LEER ], + [ 1, Moves.BITE ], // Previous Stage Move [ 5, Moves.ACID_SPRAY ], [ 8, Moves.FURY_SWIPES ], [ 11, Moves.SWITCHEROO ], @@ -16294,6 +16566,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.TACKLE ], [ 1, Moves.CONFUSION ], [ 1, Moves.DEFENSE_CURL ], + [ 1, Moves.MUD_SHOT ], // Previous Stage Move + [ 1, Moves.DIG ], // Previous Stage Move [ 4, Moves.SAND_ATTACK ], [ 7, Moves.STRUGGLE_BUG ], [ 11, Moves.ROLLOUT ], @@ -16717,6 +16991,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.LEER ], [ 1, Moves.COUNTER ], [ 1, Moves.FOCUS_ENERGY ], + [ 1, Moves.COVET ], // Previous Stage Move [ 1, Moves.FLING ], [ 5, Moves.FURY_SWIPES ], [ 8, Moves.LOW_KICK ], @@ -16734,6 +17009,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.CLODSIRE]: [ [ EVOLVE_MOVE, Moves.AMNESIA ], + [ 1, Moves.TACKLE ], // Previous Stage Move [ 1, Moves.TAIL_WHIP ], [ 1, Moves.POISON_STING ], [ 4, Moves.TOXIC_SPIKES ], @@ -16768,6 +17044,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.DUDUNSPARCE]: [ [ 1, Moves.DEFENSE_CURL ], [ 1, Moves.FLAIL ], + [ 1, Moves.TACKLE ], // Previous Stage Move, Custom [ 4, Moves.MUD_SLAP ], [ 8, Moves.ROLLOUT ], [ 12, Moves.GLARE ], @@ -16864,7 +17141,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.CONFUSE_RAY ], [ 1, Moves.SPITE ], [ 1, Moves.ASTONISH ], - [ 1, Moves.PSYBEAM ], //Custom, moved from 7 to 1 + [ 1, Moves.PSYBEAM ], // Custom, moved from 7 to 1 [ 14, Moves.MEAN_LOOK ], [ 21, Moves.MEMENTO ], [ 28, Moves.WISH ], @@ -16939,7 +17216,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.IRON_BUNDLE]: [ [ RELEARN_MOVE, Moves.ELECTRIC_TERRAIN ], [ 1, Moves.PRESENT ], - [ 1, Moves.WATER_GUN ], //Custom + [ 1, Moves.WATER_GUN ], // Custom [ 7, Moves.POWDER_SNOW ], [ 14, Moves.WHIRLPOOL ], [ 21, Moves.TAKE_DOWN ], @@ -17058,6 +17335,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 18, Moves.FOCUS_ENERGY ], [ 24, Moves.BITE ], [ 29, Moves.ICE_FANG ], + [ 32, Moves.DRAGON_CLAW ], // Previous Stage Move, Frigibax Level [ 40, Moves.TAKE_DOWN ], [ 45, Moves.ICE_BEAM ], [ 50, Moves.CRUNCH ], @@ -17305,6 +17583,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.DIPPLIN]: [ [ EVOLVE_MOVE, Moves.DOUBLE_HIT ], [ RELEARN_MOVE, Moves.DRAGON_CHEER ], // Custom + [ 1, Moves.LEAFAGE ], [ 1, Moves.WITHDRAW ], [ 1, Moves.SWEET_SCENT ], [ 1, Moves.RECYCLE ], @@ -17324,7 +17603,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.STUN_SPORE ], [ 1, Moves.WITHDRAW ], [ 1, Moves.ASTONISH ], - [ 5, Moves.ABSORB ], //Custom, Moved from Level 6 to 5 + [ 5, Moves.ABSORB ], // Custom, Moved from Level 6 to 5 [ 12, Moves.LIFE_DEW ], [ 18, Moves.FOUL_PLAY ], [ 24, Moves.MEGA_DRAIN ], @@ -17337,6 +17616,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.SINISTCHA]: [ [ EVOLVE_MOVE, Moves.MATCHA_GOTCHA ], + [ RELEARN_MOVE, Moves.GIGA_DRAIN ], // Previous Stage Move [ 1, Moves.STUN_SPORE ], [ 1, Moves.WITHDRAW ], [ 1, Moves.ASTONISH ], @@ -17419,6 +17699,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.ARCHALUDON]: [ [ EVOLVE_MOVE, Moves.ELECTRO_SHOT ], + [ RELEARN_MOVE, Moves.LASER_FOCUS ], // Previous Stage Move [ 1, Moves.LEER ], [ 1, Moves.METAL_CLAW ], [ 6, Moves.ROCK_SMASH ], @@ -17438,6 +17719,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ RELEARN_MOVE, Moves.YAWN ], [ RELEARN_MOVE, Moves.DOUBLE_HIT ], [ RELEARN_MOVE, Moves.INFESTATION ], + [ RELEARN_MOVE, Moves.DRAGON_CHEER ], // Previous Stage Move, Custom + [ 1, Moves.LEAFAGE ], // Previous Stage Move, Custom [ 1, Moves.WITHDRAW ], [ 1, Moves.SWEET_SCENT ], [ 1, Moves.RECYCLE ], @@ -17809,6 +18092,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.DEFENSE_CURL ], [ 1, Moves.CHARGE ], [ 1, Moves.ROCK_POLISH ], + [ 1, Moves.ROLLOUT ], // Previous Stage Move [ 1, Moves.HEAVY_SLAM ], [ 12, Moves.SPARK ], [ 16, Moves.ROCK_THROW ], @@ -18051,6 +18335,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.GALAR_MR_MIME]: [ [ 1, Moves.POUND ], + [ 1, Moves.BARRIER ], // Previous Stage Move + [ 1, Moves.TICKLE ], // Previous Stage Move [ 1, Moves.MIMIC ], [ 1, Moves.LIGHT_SCREEN ], [ 1, Moves.REFLECT ], @@ -18411,6 +18697,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.TACKLE ], [ 1, Moves.TAIL_WHIP ], [ 1, Moves.WATER_GUN ], + [ 1, Moves.SOAK ], // Previous Stage Move [ 1, Moves.SLASH ], [ 1, Moves.MEGAHORN ], [ 1, Moves.SUCKER_PUNCH ], @@ -18436,6 +18723,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.STUN_SPORE ], [ 1, Moves.SLEEP_POWDER ], [ 1, Moves.GIGA_DRAIN ], + [ 1, Moves.CHARM ], // Previous Stage Move [ 1, Moves.SYNTHESIS ], [ 1, Moves.SUNNY_DAY ], [ 1, Moves.HELPING_HAND ], @@ -18487,6 +18775,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.HISUI_BRAVIARY]: [ [ EVOLVE_MOVE, Moves.ESPER_WING ], + [ RELEARN_MOVE, Moves.BRAVE_BIRD ], // Previous Stage Move [ 1, Moves.WING_ATTACK ], [ 1, Moves.LEER ], [ 1, Moves.PECK ], @@ -18511,6 +18800,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.ABSORB ], [ 1, Moves.ACID_ARMOR ], [ 1, Moves.DRAGON_BREATH ], + [ 1, Moves.BODY_SLAM ], // Previous Stage Move [ 15, Moves.PROTECT ], [ 20, Moves.FLAIL ], [ 25, Moves.WATER_PULSE ], @@ -18525,6 +18815,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.TACKLE ], [ 1, Moves.WATER_GUN ], [ 1, Moves.ABSORB ], + [ 1, Moves.ACID_ARMOR ], // Previous Stage Move [ 1, Moves.DRAGON_BREATH ], [ 1, Moves.FEINT ], [ 1, Moves.ACID_SPRAY ], @@ -18565,9 +18856,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.HISUI_DECIDUEYE]: [ [ EVOLVE_MOVE, Moves.TRIPLE_ARROWS ], + [ RELEARN_MOVE, Moves.NASTY_PLOT ], // Previous Stage Move [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], [ 1, Moves.U_TURN ], + [ 1, Moves.ASTONISH ], // Previous Stage Move [ 1, Moves.LEAF_STORM ], [ 1, Moves.LEAFAGE ], [ 9, Moves.PECK ], @@ -18633,7 +18926,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { }; export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { - [Species.PIKACHU]: { //Custom + [Species.PIKACHU]: { // Custom 1: [ [ 1, Moves.TAIL_WHIP ], [ 1, Moves.GROWL ], @@ -18648,14 +18941,14 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { [ 8, Moves.DOUBLE_TEAM ], [ 12, Moves.ELECTRO_BALL ], [ 16, Moves.FEINT ], - [ 20, Moves.ZIPPY_ZAP ], //Custom + [ 20, Moves.ZIPPY_ZAP ], // Custom [ 24, Moves.AGILITY ], [ 28, Moves.IRON_TAIL ], [ 32, Moves.DISCHARGE ], - [ 34, Moves.FLOATY_FALL ], //Custom + [ 34, Moves.FLOATY_FALL ], // Custom [ 36, Moves.THUNDERBOLT ], [ 40, Moves.LIGHT_SCREEN ], - [ 42, Moves.SPLISHY_SPLASH ], //Custom + [ 42, Moves.SPLISHY_SPLASH ], // Custom [ 44, Moves.THUNDER ], [ 48, Moves.PIKA_PAPOW ], ], @@ -18816,19 +19109,19 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { [ 8, Moves.DOUBLE_TEAM ], [ 12, Moves.ELECTRO_BALL ], [ 16, Moves.FEINT ], - [ 20, Moves.ZIPPY_ZAP ], //Custom + [ 20, Moves.ZIPPY_ZAP ], // Custom [ 24, Moves.AGILITY ], [ 28, Moves.IRON_TAIL ], [ 32, Moves.DISCHARGE ], - [ 34, Moves.FLOATY_FALL ], //Custom + [ 34, Moves.FLOATY_FALL ], // Custom [ 36, Moves.THUNDERBOLT ], [ 40, Moves.LIGHT_SCREEN ], - [ 42, Moves.SPLISHY_SPLASH ], //Custom + [ 42, Moves.SPLISHY_SPLASH ], // Custom [ 44, Moves.THUNDER ], [ 48, Moves.PIKA_PAPOW ], ], }, - [Species.EEVEE]: { //Custom + [Species.EEVEE]: { // Custom 1: [ [ 1, Moves.TACKLE ], [ 1, Moves.TAIL_WHIP ], @@ -18838,21 +19131,21 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { [ 5, Moves.SAND_ATTACK ], [ 10, Moves.QUICK_ATTACK ], [ 15, Moves.BABY_DOLL_EYES ], - [ 18, Moves.BOUNCY_BUBBLE ], //Custom - [ 18, Moves.SIZZLY_SLIDE ], //Custom - [ 18, Moves.BUZZY_BUZZ ], //Custom + [ 18, Moves.BOUNCY_BUBBLE ], // Custom + [ 18, Moves.SIZZLY_SLIDE ], // Custom + [ 18, Moves.BUZZY_BUZZ ], // Custom [ 20, Moves.SWIFT ], [ 25, Moves.BITE ], [ 30, Moves.COPYCAT ], - [ 33, Moves.BADDY_BAD ], //Custom - [ 33, Moves.GLITZY_GLOW ], //Custom + [ 33, Moves.BADDY_BAD ], // Custom + [ 33, Moves.GLITZY_GLOW ], // Custom [ 35, Moves.BATON_PASS ], - [ 40, Moves.VEEVEE_VOLLEY ], //Custom, replaces Take Down - [ 43, Moves.FREEZY_FROST ], //Custom - [ 43, Moves.SAPPY_SEED ], //Custom + [ 40, Moves.VEEVEE_VOLLEY ], // Custom, replaces Take Down + [ 43, Moves.FREEZY_FROST ], // Custom + [ 43, Moves.SAPPY_SEED ], // Custom [ 45, Moves.CHARM ], [ 50, Moves.DOUBLE_EDGE ], - [ 53, Moves.SPARKLY_SWIRL ], //Custom + [ 53, Moves.SPARKLY_SWIRL ], // Custom [ 55, Moves.LAST_RESORT ], ], 2: [ @@ -18864,27 +19157,27 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { [ 5, Moves.SAND_ATTACK ], [ 10, Moves.QUICK_ATTACK ], [ 15, Moves.BABY_DOLL_EYES ], - [ 18, Moves.BOUNCY_BUBBLE ], //Custom - [ 18, Moves.SIZZLY_SLIDE ], //Custom - [ 18, Moves.BUZZY_BUZZ ], //Custom + [ 18, Moves.BOUNCY_BUBBLE ], // Custom + [ 18, Moves.SIZZLY_SLIDE ], // Custom + [ 18, Moves.BUZZY_BUZZ ], // Custom [ 20, Moves.SWIFT ], [ 25, Moves.BITE ], [ 30, Moves.COPYCAT ], - [ 33, Moves.BADDY_BAD ], //Custom - [ 33, Moves.GLITZY_GLOW ], //Custom + [ 33, Moves.BADDY_BAD ], // Custom + [ 33, Moves.GLITZY_GLOW ], // Custom [ 35, Moves.BATON_PASS ], - [ 40, Moves.VEEVEE_VOLLEY ], //Custom, replaces Take Down - [ 43, Moves.FREEZY_FROST ], //Custom - [ 43, Moves.SAPPY_SEED ], //Custom + [ 40, Moves.VEEVEE_VOLLEY ], // Custom, replaces Take Down + [ 43, Moves.FREEZY_FROST ], // Custom + [ 43, Moves.SAPPY_SEED ], // Custom [ 45, Moves.CHARM ], [ 50, Moves.DOUBLE_EDGE ], - [ 53, Moves.SPARKLY_SWIRL ], //Custom + [ 53, Moves.SPARKLY_SWIRL ], // Custom [ 55, Moves.LAST_RESORT ], ], }, [Species.DEOXYS]: { 1: [ - [ 1, Moves.CONFUSION ], //Custom + [ 1, Moves.CONFUSION ], // Custom [ 1, Moves.WRAP ], [ 1, Moves.LEER ], [ 7, Moves.NIGHT_SHADE ], @@ -18901,7 +19194,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { [ 73, Moves.HYPER_BEAM ], ], 2: [ - [ 1, Moves.CONFUSION ], //Custom + [ 1, Moves.CONFUSION ], // Custom [ 1, Moves.WRAP ], [ 1, Moves.LEER ], [ 7, Moves.NIGHT_SHADE ], @@ -18920,7 +19213,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { [ 73, Moves.MIRROR_COAT ], ], 3: [ - [ 1, Moves.CONFUSION ], //Custom + [ 1, Moves.CONFUSION ], // Custom [ 1, Moves.WRAP ], [ 1, Moves.LEER ], [ 7, Moves.NIGHT_SHADE ], @@ -18940,6 +19233,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { [Species.WORMADAM]: { 1: [ [ EVOLVE_MOVE, Moves.QUIVER_DANCE ], + [ 1, Moves.STRUGGLE_BUG ], // Previous Stage Move, Custom [ 1, Moves.TACKLE ], [ 1, Moves.PROTECT ], [ 1, Moves.SUCKER_PUNCH ], @@ -18960,6 +19254,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { ], 2: [ [ EVOLVE_MOVE, Moves.QUIVER_DANCE ], + [ 1, Moves.STRUGGLE_BUG ], // Previous Stage Move, Custom [ 1, Moves.METAL_BURST ], [ 1, Moves.TACKLE ], [ 1, Moves.PROTECT ], @@ -19064,7 +19359,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { }, [Species.SHAYMIN]: { 1: [ - [ 1, Moves.LEAFAGE ], //Custom + [ 1, Moves.LEAFAGE ], // Custom [ 1, Moves.GROWTH ], [ 10, Moves.MAGICAL_LEAF ], [ 19, Moves.LEECH_SEED ], @@ -19166,6 +19461,10 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { [ 1, Moves.GROWL ], [ 1, Moves.WATER_GUN ], [ 1, Moves.QUICK_ATTACK ], + [ 1, Moves.ROUND ], // Previous Stage Move + [ 1, Moves.FLING ], // Previous Stage Move + [ 1, Moves.SMACK_DOWN ], // Previous Stage Move + [ 1, Moves.BOUNCE ], // Previous Stage Move [ 1, Moves.HAZE ], [ 1, Moves.ROLE_PLAY ], [ 1, Moves.NIGHT_SLASH ], From 1ad4f3b376a60f33f55a734a061d0dec9b74bc40 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Tue, 22 Oct 2024 20:11:02 -0700 Subject: [PATCH 115/153] [Test] Add `STATUS_ACTIVATION_OVERRIDE` to `overrides.ts` (#4689) This applies to Paralysis and Freeze Added Paralysis test to demonstrate usage - Consolidate `this.cancel()` calls --- src/overrides.ts | 2 + src/phases/move-phase.ts | 18 ++- src/test/data/status-effect.test.ts | 118 ++++++++++------ src/test/utils/helpers/moveHelper.ts | 36 +++-- src/test/utils/helpers/overridesHelper.ts | 157 ++++++++++++---------- 5 files changed, 203 insertions(+), 128 deletions(-) diff --git a/src/overrides.ts b/src/overrides.ts index e1bfbd240f0..6760db79205 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -75,6 +75,8 @@ class DefaultOverrides { readonly ITEM_UNLOCK_OVERRIDE: Unlockables[] = []; /** Set to `true` to show all tutorials */ readonly BYPASS_TUTORIAL_SKIP_OVERRIDE: boolean = false; + /** Set to `true` to force Paralysis and Freeze to always activate, or `false` to force them to not activate */ + readonly STATUS_ACTIVATION_OVERRIDE: boolean | null = null; // ---------------- // PLAYER OVERRIDES diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index e9d8887e9cb..66dbd06f5be 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -11,6 +11,7 @@ import { getTerrainBlockMessage } from "#app/data/weather"; import { MoveUsedEvent } from "#app/events/battle-scene"; import Pokemon, { MoveResult, PokemonMove, TurnMove } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; +import Overrides from "#app/overrides"; import { BattlePhase } from "#app/phases/battle-phase"; import { CommonAnimPhase } from "#app/phases/common-anim-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; @@ -168,10 +169,7 @@ export class MovePhase extends BattlePhase { switch (this.pokemon.status.effect) { case StatusEffect.PARALYSIS: - if (!this.pokemon.randSeedInt(4)) { - activated = true; - this.cancelled = true; - } + activated = (!this.pokemon.randSeedInt(4) || Overrides.STATUS_ACTIVATION_OVERRIDE === true) && Overrides.STATUS_ACTIVATION_OVERRIDE !== false; break; case StatusEffect.SLEEP: applyMoveAttrs(BypassSleepAttr, this.pokemon, null, this.move.getMove()); @@ -180,16 +178,22 @@ export class MovePhase extends BattlePhase { this.pokemon.status.sleepTurnsRemaining = turnsRemaining.value; healed = this.pokemon.status.sleepTurnsRemaining <= 0; activated = !healed && !this.pokemon.getTag(BattlerTagType.BYPASS_SLEEP); - this.cancelled = activated; break; case StatusEffect.FREEZE: - healed = !!this.move.getMove().findAttr(attr => attr instanceof HealStatusEffectAttr && attr.selfTarget && attr.isOfEffect(StatusEffect.FREEZE)) || !this.pokemon.randSeedInt(5); + healed = + !!this.move.getMove().findAttr((attr) => + attr instanceof HealStatusEffectAttr + && attr.selfTarget + && attr.isOfEffect(StatusEffect.FREEZE)) + || (!this.pokemon.randSeedInt(5) && Overrides.STATUS_ACTIVATION_OVERRIDE !== true) + || Overrides.STATUS_ACTIVATION_OVERRIDE === false; + activated = !healed; - this.cancelled = activated; break; } if (activated) { + this.cancel(); this.scene.queueMessage(getStatusEffectActivationText(this.pokemon.status.effect, getPokemonNameWithAffix(this.pokemon))); this.scene.unshiftPhase(new CommonAnimPhase(this.scene, this.pokemon.getBattlerIndex(), undefined, CommonAnim.POISON + (this.pokemon.status.effect - 1))); } else if (healed) { diff --git a/src/test/data/status-effect.test.ts b/src/test/data/status-effect.test.ts index 8b37da45d8d..1b1a97fc51f 100644 --- a/src/test/data/status-effect.test.ts +++ b/src/test/data/status-effect.test.ts @@ -8,10 +8,10 @@ import { getStatusEffectOverlapText, } from "#app/data/status-effect"; import { MoveResult } from "#app/field/pokemon"; -import GameManager from "#app/test/utils/gameManager"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; import { mockI18next } from "#test/utils/testUtils"; import i18next from "i18next"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -306,58 +306,98 @@ describe("Status Effect Messages", () => { }); }); -describe("Status Effects - Sleep", () => { - let phaserGame: Phaser.Game; - let game: GameManager; +describe("Status Effects", () => { + describe("Paralysis", () => { + let phaserGame: Phaser.Game; + let game: GameManager; - beforeAll(() => { - phaserGame = new Phaser.Game({ - type: Phaser.HEADLESS, + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + + game.override + .enemySpecies(Species.MAGIKARP) + .enemyMoveset(Moves.SPLASH) + .enemyAbility(Abilities.BALL_FETCH) + .moveset([ Moves.QUICK_ATTACK ]) + .ability(Abilities.BALL_FETCH) + .statusEffect(StatusEffect.PARALYSIS); + }); + + it("causes the pokemon's move to fail when activated", async () => { + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.QUICK_ATTACK); + await game.move.forceStatusActivation(true); + await game.toNextTurn(); + + expect(game.scene.getEnemyPokemon()!.isFullHp()).toBe(true); + expect(game.scene.getPlayerPokemon()!.getLastXMoves(1)[0].result).toBe(MoveResult.FAIL); }); }); - afterEach(() => { - game.phaseInterceptor.restoreOg(); - }); + describe("Sleep", () => { + let phaserGame: Phaser.Game; + let game: GameManager; - beforeEach(() => { - game = new GameManager(phaserGame); - game.override - .moveset([ Moves.SPLASH ]) - .ability(Abilities.BALL_FETCH) - .battleType("single") - .disableCrits() - .enemySpecies(Species.MAGIKARP) - .enemyAbility(Abilities.BALL_FETCH) - .enemyMoveset(Moves.SPLASH); - }); + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); - it("should last the appropriate number of turns", async () => { - await game.classicMode.startBattle([ Species.FEEBAS ]); + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); - const player = game.scene.getPlayerPokemon()!; - player.status = new Status(StatusEffect.SLEEP, 0, 4); + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); - game.move.select(Moves.SPLASH); - await game.toNextTurn(); + it("should last the appropriate number of turns", async () => { + await game.classicMode.startBattle([ Species.FEEBAS ]); - expect(player.status.effect).toBe(StatusEffect.SLEEP); + const player = game.scene.getPlayerPokemon()!; + player.status = new Status(StatusEffect.SLEEP, 0, 4); - game.move.select(Moves.SPLASH); - await game.toNextTurn(); + game.move.select(Moves.SPLASH); + await game.toNextTurn(); - expect(player.status.effect).toBe(StatusEffect.SLEEP); + expect(player.status.effect).toBe(StatusEffect.SLEEP); - game.move.select(Moves.SPLASH); - await game.toNextTurn(); + game.move.select(Moves.SPLASH); + await game.toNextTurn(); - expect(player.status.effect).toBe(StatusEffect.SLEEP); - expect(player.getLastXMoves(1)[0].result).toBe(MoveResult.FAIL); + expect(player.status.effect).toBe(StatusEffect.SLEEP); - game.move.select(Moves.SPLASH); - await game.toNextTurn(); + game.move.select(Moves.SPLASH); + await game.toNextTurn(); - expect(player.status?.effect).toBeUndefined(); - expect(player.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); + expect(player.status.effect).toBe(StatusEffect.SLEEP); + expect(player.getLastXMoves(1)[0].result).toBe(MoveResult.FAIL); + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + + expect(player.status?.effect).toBeUndefined(); + expect(player.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); + }); }); }); diff --git a/src/test/utils/helpers/moveHelper.ts b/src/test/utils/helpers/moveHelper.ts index a0667d91f4c..73fe63395fd 100644 --- a/src/test/utils/helpers/moveHelper.ts +++ b/src/test/utils/helpers/moveHelper.ts @@ -1,12 +1,13 @@ import { BattlerIndex } from "#app/battle"; -import { Moves } from "#app/enums/moves"; +import Overrides from "#app/overrides"; import { CommandPhase } from "#app/phases/command-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Command } from "#app/ui/command-ui-handler"; import { Mode } from "#app/ui/ui"; +import { Moves } from "#enums/moves"; +import { getMovePosition } from "#test/utils/gameManagerUtils"; +import { GameManagerHelper } from "#test/utils/helpers/gameManagerHelper"; import { vi } from "vitest"; -import { getMovePosition } from "../gameManagerUtils"; -import { GameManagerHelper } from "./gameManagerHelper"; /** * Helper to handle a Pokemon's move @@ -17,7 +18,7 @@ export class MoveHelper extends GameManagerHelper { * {@linkcode MoveEffectPhase.hitCheck | hitCheck}'s return value to `true`. * Used to force a move to hit. */ - async forceHit(): Promise { + public async forceHit(): Promise { await this.game.phaseInterceptor.to(MoveEffectPhase, false); vi.spyOn(this.game.scene.getCurrentPhase() as MoveEffectPhase, "hitCheck").mockReturnValue(true); } @@ -26,9 +27,9 @@ export class MoveHelper extends GameManagerHelper { * Intercepts {@linkcode MoveEffectPhase} and mocks the * {@linkcode MoveEffectPhase.hitCheck | hitCheck}'s return value to `false`. * Used to force a move to miss. - * @param firstTargetOnly Whether the move should force miss on the first target only, in the case of multi-target moves. + * @param firstTargetOnly - Whether the move should force miss on the first target only, in the case of multi-target moves. */ - async forceMiss(firstTargetOnly: boolean = false): Promise { + public async forceMiss(firstTargetOnly: boolean = false): Promise { await this.game.phaseInterceptor.to(MoveEffectPhase, false); const hitCheck = vi.spyOn(this.game.scene.getCurrentPhase() as MoveEffectPhase, "hitCheck"); @@ -40,12 +41,12 @@ export class MoveHelper extends GameManagerHelper { } /** - * Select the move to be used by the given Pokemon(-index). Triggers during the next {@linkcode CommandPhase} - * @param move the move to use - * @param pkmIndex the pokemon index. Relevant for double-battles only (defaults to 0) - * @param targetIndex The {@linkcode BattlerIndex} of the Pokemon to target for single-target moves, or `null` if a manual call to `selectTarget()` is required - */ - select(move: Moves, pkmIndex: 0 | 1 = 0, targetIndex?: BattlerIndex | null) { + * Select the move to be used by the given Pokemon(-index). Triggers during the next {@linkcode CommandPhase} + * @param move - the move to use + * @param pkmIndex - the pokemon index. Relevant for double-battles only (defaults to 0) + * @param targetIndex - The {@linkcode BattlerIndex} of the Pokemon to target for single-target moves, or `null` if a manual call to `selectTarget()` is required + */ + public select(move: Moves, pkmIndex: 0 | 1 = 0, targetIndex?: BattlerIndex | null) { const movePosition = getMovePosition(this.game.scene, pkmIndex, move); this.game.onNextPrompt("CommandPhase", Mode.COMMAND, () => { @@ -59,4 +60,15 @@ export class MoveHelper extends GameManagerHelper { this.game.selectTarget(movePosition, targetIndex); } } + + /** + * Forces the Paralysis or Freeze status to activate on the next move by temporarily mocking {@linkcode Overrides.STATUS_ACTIVATION_OVERRIDE}, + * advancing to the next `MovePhase`, and then resetting the override to `null` + * @param activated - `true` to force the status to activate, `false` to force the status to not activate (will cause Freeze to heal) + */ + public async forceStatusActivation(activated: boolean): Promise { + vi.spyOn(Overrides, "STATUS_ACTIVATION_OVERRIDE", "get").mockReturnValue(activated); + await this.game.phaseInterceptor.to("MovePhase"); + vi.spyOn(Overrides, "STATUS_ACTIVATION_OVERRIDE", "get").mockReturnValue(null); + } } diff --git a/src/test/utils/helpers/overridesHelper.ts b/src/test/utils/helpers/overridesHelper.ts index ec4d8dbbe4c..404f5c34a26 100644 --- a/src/test/utils/helpers/overridesHelper.ts +++ b/src/test/utils/helpers/overridesHelper.ts @@ -29,7 +29,7 @@ export class OverridesHelper extends GameManagerHelper { * @warning Any event listeners that are attached to [NewArenaEvent](events\battle-scene.ts) may need to be handled down the line * @param biome the biome to set */ - startingBiome(biome: Biome): this { + public startingBiome(biome: Biome): this { this.game.scene.newArena(biome); this.log(`Starting biome set to ${Biome[biome]} (=${biome})!`); return this; @@ -38,9 +38,9 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the starting wave (index) * @param wave the wave (index) to set. Classic: `1`-`200` - * @returns this + * @returns `this` */ - startingWave(wave: number): this { + public startingWave(wave: number): this { vi.spyOn(Overrides, "STARTING_WAVE_OVERRIDE", "get").mockReturnValue(wave); this.log(`Starting wave set to ${wave}!`); return this; @@ -49,9 +49,9 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the player (pokemon) starting level * @param level the (pokemon) level to set - * @returns this + * @returns `this` */ - startingLevel(level: Species | number): this { + public startingLevel(level: Species | number): this { vi.spyOn(Overrides, "STARTING_LEVEL_OVERRIDE", "get").mockReturnValue(level); this.log(`Player Pokemon starting level set to ${level}!`); return this; @@ -62,7 +62,7 @@ export class OverridesHelper extends GameManagerHelper { * @param value the XP multiplier to set * @returns `this` */ - xpMultiplier(value: number): this { + public xpMultiplier(value: number): this { vi.spyOn(Overrides, "XP_MULTIPLIER_OVERRIDE", "get").mockReturnValue(value); this.log(`XP Multiplier set to ${value}!`); return this; @@ -71,9 +71,9 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the player (pokemon) starting held items * @param items the items to hold - * @returns this + * @returns `this` */ - startingHeldItems(items: ModifierOverride[]) { + public startingHeldItems(items: ModifierOverride[]): this { vi.spyOn(Overrides, "STARTING_HELD_ITEMS_OVERRIDE", "get").mockReturnValue(items); this.log("Player Pokemon starting held items set to:", items); return this; @@ -82,9 +82,9 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the player (pokemon) {@linkcode Species | species} * @param species the (pokemon) {@linkcode Species | species} to set - * @returns this + * @returns `this` */ - starterSpecies(species: Species | number): this { + public starterSpecies(species: Species | number): this { vi.spyOn(Overrides, "STARTER_SPECIES_OVERRIDE", "get").mockReturnValue(species); this.log(`Player Pokemon species set to ${Species[species]} (=${species})!`); return this; @@ -92,9 +92,9 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the player (pokemon) to be a random fusion - * @returns this + * @returns `this` */ - enableStarterFusion(): this { + public enableStarterFusion(): this { vi.spyOn(Overrides, "STARTER_FUSION_OVERRIDE", "get").mockReturnValue(true); this.log("Player Pokemon is a random fusion!"); return this; @@ -103,9 +103,9 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the player (pokemon) fusion species * @param species the fusion species to set - * @returns this + * @returns `this` */ - starterFusionSpecies(species: Species | number): this { + public starterFusionSpecies(species: Species | number): this { vi.spyOn(Overrides, "STARTER_FUSION_SPECIES_OVERRIDE", "get").mockReturnValue(species); this.log(`Player Pokemon fusion species set to ${Species[species]} (=${species})!`); return this; @@ -114,9 +114,9 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the player (pokemons) forms * @param forms the (pokemon) forms to set - * @returns this + * @returns `this` */ - starterForms(forms: Partial>): this { + public starterForms(forms: Partial>): this { vi.spyOn(Overrides, "STARTER_FORM_OVERRIDES", "get").mockReturnValue(forms); const formsStr = Object.entries(forms) .map(([ speciesId, formIndex ]) => `${Species[speciesId]}=${formIndex}`) @@ -128,9 +128,9 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the player's starting modifiers * @param modifiers the modifiers to set - * @returns this + * @returns `this` */ - startingModifier(modifiers: ModifierOverride[]): this { + public startingModifier(modifiers: ModifierOverride[]): this { vi.spyOn(Overrides, "STARTING_MODIFIER_OVERRIDE", "get").mockReturnValue(modifiers); this.log(`Player starting modifiers set to: ${modifiers}`); return this; @@ -139,9 +139,9 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the player (pokemon) {@linkcode Abilities | ability} * @param ability the (pokemon) {@linkcode Abilities | ability} to set - * @returns this + * @returns `this` */ - ability(ability: Abilities): this { + public ability(ability: Abilities): this { vi.spyOn(Overrides, "ABILITY_OVERRIDE", "get").mockReturnValue(ability); this.log(`Player Pokemon ability set to ${Abilities[ability]} (=${ability})!`); return this; @@ -150,9 +150,9 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the player (pokemon) **passive** {@linkcode Abilities | ability} * @param passiveAbility the (pokemon) **passive** {@linkcode Abilities | ability} to set - * @returns this + * @returns `this` */ - passiveAbility(passiveAbility: Abilities): this { + public passiveAbility(passiveAbility: Abilities): this { vi.spyOn(Overrides, "PASSIVE_ABILITY_OVERRIDE", "get").mockReturnValue(passiveAbility); this.log(`Player Pokemon PASSIVE ability set to ${Abilities[passiveAbility]} (=${passiveAbility})!`); return this; @@ -161,9 +161,9 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the player (pokemon) {@linkcode Moves | moves}set * @param moveset the {@linkcode Moves | moves}set to set - * @returns this + * @returns `this` */ - moveset(moveset: Moves | Moves[]): this { + public moveset(moveset: Moves | Moves[]): this { vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue(moveset); if (!Array.isArray(moveset)) { moveset = [ moveset ]; @@ -178,7 +178,7 @@ export class OverridesHelper extends GameManagerHelper { * @param statusEffect the {@linkcode StatusEffect | status-effect} to set * @returns */ - statusEffect(statusEffect: StatusEffect): this { + public statusEffect(statusEffect: StatusEffect): this { vi.spyOn(Overrides, "STATUS_OVERRIDE", "get").mockReturnValue(statusEffect); this.log(`Player Pokemon status-effect set to ${StatusEffect[statusEffect]} (=${statusEffect})!`); return this; @@ -186,9 +186,9 @@ export class OverridesHelper extends GameManagerHelper { /** * Override each wave to not have standard trainer battles - * @returns this + * @returns `this` */ - disableTrainerWaves(): this { + public disableTrainerWaves(): this { const realFn = getGameMode; vi.spyOn(GameMode, "getGameMode").mockImplementation((gameMode: GameModes) => { const mode = realFn(gameMode); @@ -201,9 +201,9 @@ export class OverridesHelper extends GameManagerHelper { /** * Override each wave to not have critical hits - * @returns this + * @returns `this` */ - disableCrits() { + public disableCrits(): this { vi.spyOn(Overrides, "NEVER_CRIT_OVERRIDE", "get").mockReturnValue(true); this.log("Critical hits are disabled!"); return this; @@ -212,9 +212,9 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the {@linkcode WeatherType | weather (type)} * @param type {@linkcode WeatherType | weather type} to set - * @returns this + * @returns `this` */ - weather(type: WeatherType): this { + public weather(type: WeatherType): this { vi.spyOn(Overrides, "WEATHER_OVERRIDE", "get").mockReturnValue(type); this.log(`Weather set to ${Weather[type]} (=${type})!`); return this; @@ -223,9 +223,9 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the seed * @param seed the seed to set - * @returns this + * @returns `this` */ - seed(seed: string): this { + public seed(seed: string): this { vi.spyOn(this.game.scene, "resetSeed").mockImplementation(() => { this.game.scene.waveSeed = seed; Phaser.Math.RND.sow([ seed ]); @@ -239,9 +239,9 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the battle type (single or double) * @param battleType battle type to set - * @returns this + * @returns `this` */ - battleType(battleType: "single" | "double" | null): this { + public battleType(battleType: "single" | "double" | null): this { vi.spyOn(Overrides, "BATTLE_TYPE_OVERRIDE", "get").mockReturnValue(battleType); this.log(`Battle type set to ${battleType} only!`); return this; @@ -250,9 +250,9 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the enemy (pokemon) {@linkcode Species | species} * @param species the (pokemon) {@linkcode Species | species} to set - * @returns this + * @returns `this` */ - enemySpecies(species: Species | number): this { + public enemySpecies(species: Species | number): this { vi.spyOn(Overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(species); this.log(`Enemy Pokemon species set to ${Species[species]} (=${species})!`); return this; @@ -260,9 +260,9 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the enemy (pokemon) to be a random fusion - * @returns this + * @returns `this` */ - enableEnemyFusion(): this { + public enableEnemyFusion(): this { vi.spyOn(Overrides, "OPP_FUSION_OVERRIDE", "get").mockReturnValue(true); this.log("Enemy Pokemon is a random fusion!"); return this; @@ -271,9 +271,9 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the enemy (pokemon) fusion species * @param species the fusion species to set - * @returns this + * @returns `this` */ - enemyFusionSpecies(species: Species | number): this { + public enemyFusionSpecies(species: Species | number): this { vi.spyOn(Overrides, "OPP_FUSION_SPECIES_OVERRIDE", "get").mockReturnValue(species); this.log(`Enemy Pokemon fusion species set to ${Species[species]} (=${species})!`); return this; @@ -282,9 +282,9 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the enemy (pokemon) {@linkcode Abilities | ability} * @param ability the (pokemon) {@linkcode Abilities | ability} to set - * @returns this + * @returns `this` */ - enemyAbility(ability: Abilities): this { + public enemyAbility(ability: Abilities): this { vi.spyOn(Overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(ability); this.log(`Enemy Pokemon ability set to ${Abilities[ability]} (=${ability})!`); return this; @@ -293,9 +293,9 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the enemy (pokemon) **passive** {@linkcode Abilities | ability} * @param passiveAbility the (pokemon) **passive** {@linkcode Abilities | ability} to set - * @returns this + * @returns `this` */ - enemyPassiveAbility(passiveAbility: Abilities): this { + public enemyPassiveAbility(passiveAbility: Abilities): this { vi.spyOn(Overrides, "OPP_PASSIVE_ABILITY_OVERRIDE", "get").mockReturnValue(passiveAbility); this.log(`Enemy Pokemon PASSIVE ability set to ${Abilities[passiveAbility]} (=${passiveAbility})!`); return this; @@ -304,9 +304,9 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the enemy (pokemon) {@linkcode Moves | moves}set * @param moveset the {@linkcode Moves | moves}set to set - * @returns this + * @returns `this` */ - enemyMoveset(moveset: Moves | Moves[]): this { + public enemyMoveset(moveset: Moves | Moves[]): this { vi.spyOn(Overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue(moveset); if (!Array.isArray(moveset)) { moveset = [ moveset ]; @@ -319,9 +319,9 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the enemy (pokemon) level * @param level the level to set - * @returns this + * @returns `this` */ - enemyLevel(level: number): this { + public enemyLevel(level: number): this { vi.spyOn(Overrides, "OPP_LEVEL_OVERRIDE", "get").mockReturnValue(level); this.log(`Enemy Pokemon level set to ${level}!`); return this; @@ -332,7 +332,7 @@ export class OverridesHelper extends GameManagerHelper { * @param statusEffect the {@linkcode StatusEffect | status-effect} to set * @returns */ - enemyStatusEffect(statusEffect: StatusEffect): this { + public enemyStatusEffect(statusEffect: StatusEffect): this { vi.spyOn(Overrides, "OPP_STATUS_OVERRIDE", "get").mockReturnValue(statusEffect); this.log(`Enemy Pokemon status-effect set to ${StatusEffect[statusEffect]} (=${statusEffect})!`); return this; @@ -341,9 +341,9 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the enemy (pokemon) held items * @param items the items to hold - * @returns this + * @returns `this` */ - enemyHeldItems(items: ModifierOverride[]) { + public enemyHeldItems(items: ModifierOverride[]): this { vi.spyOn(Overrides, "OPP_HELD_ITEMS_OVERRIDE", "get").mockReturnValue(items); this.log("Enemy Pokemon held items set to:", items); return this; @@ -354,7 +354,7 @@ export class OverridesHelper extends GameManagerHelper { * @param unlockable The Unlockable(s) to enable. * @returns `this` */ - enableUnlockable(unlockable: Unlockables[]) { + public enableUnlockable(unlockable: Unlockables[]): this { vi.spyOn(Overrides, "ITEM_UNLOCK_OVERRIDE", "get").mockReturnValue(unlockable); this.log("Temporarily unlocked the following content: ", unlockable); return this; @@ -363,9 +363,9 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the items rolled at the end of a battle * @param items the items to be rolled - * @returns this + * @returns `this` */ - itemRewards(items: ModifierOverride[]) { + public itemRewards(items: ModifierOverride[]): this { vi.spyOn(Overrides, "ITEM_REWARD_OVERRIDE", "get").mockReturnValue(items); this.log("Item rewards set to:", items); return this; @@ -375,8 +375,9 @@ export class OverridesHelper extends GameManagerHelper { * Override player shininess * @param shininess - `true` or `false` to force the player's pokemon to be shiny or not shiny, * `null` to disable the override and re-enable RNG shinies. + * @returns `this` */ - shiny(shininess: boolean | null): this { + public shiny(shininess: boolean | null): this { vi.spyOn(Overrides, "SHINY_OVERRIDE", "get").mockReturnValue(shininess); if (shininess === null) { this.log("Disabled player Pokemon shiny override!"); @@ -389,8 +390,9 @@ export class OverridesHelper extends GameManagerHelper { /** * Override player shiny variant * @param variant - The player's shiny variant. + * @returns `this` */ - shinyVariant(variant: Variant): this { + public shinyVariant(variant: Variant): this { vi.spyOn(Overrides, "VARIANT_OVERRIDE", "get").mockReturnValue(variant); this.log(`Set player Pokemon's shiny variant to ${variant}!`); return this; @@ -420,23 +422,38 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the enemy (Pokemon) to have the given amount of health segments * @param healthSegments the number of segments to give - * default: 0, the health segments will be handled like in the game based on wave, level and species - * 1: the Pokemon will not be a boss - * 2+: the Pokemon will be a boss with the given number of health segments - * @returns this + * - `0` (default): the health segments will be handled like in the game based on wave, level and species + * - `1`: the Pokemon will not be a boss + * - `2`+: the Pokemon will be a boss with the given number of health segments + * @returns `this` */ - enemyHealthSegments(healthSegments: number) { + public enemyHealthSegments(healthSegments: number): this { vi.spyOn(Overrides, "OPP_HEALTH_SEGMENTS_OVERRIDE", "get").mockReturnValue(healthSegments); this.log("Enemy Pokemon health segments set to:", healthSegments); return this; } + /** + * Override statuses (Paralysis and Freeze) to always or never activate + * @param activate - `true` to force activation, `false` to force no activation, `null` to disable the override + * @returns `this` + */ + public statusActivation(activate: boolean | null): this { + vi.spyOn(Overrides, "STATUS_ACTIVATION_OVERRIDE", "get").mockReturnValue(activate); + if (activate !== null) { + this.log(`Paralysis and Freeze forced to ${activate ? "always" : "never"} activate!`); + } else { + this.log("Status activation override disabled!"); + } + return this; + } + /** * Override the encounter chance for a mystery encounter. * @param percentage the encounter chance in % - * @returns spy instance + * @returns `this` */ - mysteryEncounterChance(percentage: number) { + public mysteryEncounterChance(percentage: number): this { const maxRate: number = 256; // 100% const rate = maxRate * (percentage / 100); vi.spyOn(Overrides, "MYSTERY_ENCOUNTER_RATE_OVERRIDE", "get").mockReturnValue(rate); @@ -446,10 +463,10 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the encounter chance for a mystery encounter. - * @returns spy instance - * @param tier + * @param tier - The {@linkcode MysteryEncounterTier} to encounter + * @returns `this` */ - mysteryEncounterTier(tier: MysteryEncounterTier) { + public mysteryEncounterTier(tier: MysteryEncounterTier): this { vi.spyOn(Overrides, "MYSTERY_ENCOUNTER_TIER_OVERRIDE", "get").mockReturnValue(tier); this.log(`Mystery encounter tier set to ${tier}!`); return this; @@ -457,10 +474,10 @@ export class OverridesHelper extends GameManagerHelper { /** * Override the encounter that spawns for the scene - * @param encounterType - * @returns spy instance + * @param encounterType - The {@linkcode MysteryEncounterType} of the encounter + * @returns `this` */ - mysteryEncounter(encounterType: MysteryEncounterType) { + public mysteryEncounter(encounterType: MysteryEncounterType): this { vi.spyOn(Overrides, "MYSTERY_ENCOUNTER_OVERRIDE", "get").mockReturnValue(encounterType); this.log(`Mystery encounter override set to ${encounterType}!`); return this; From a0baf892977b9d78d14b73c1c652d909b0a331a6 Mon Sep 17 00:00:00 2001 From: bjparker1226 <32974077+bjparker1226@users.noreply.github.com> Date: Wed, 23 Oct 2024 11:04:37 -0400 Subject: [PATCH 116/153] [P2] Fix dark deal reducing transformed Pokemon's held item stack to 1 (#4707) --- src/data/mystery-encounters/encounters/dark-deal-encounter.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts index 7f199b5487c..2c13086ccb8 100644 --- a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts +++ b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts @@ -172,7 +172,8 @@ export const DarkDealEncounter: MysteryEncounter = isBoss: true, modifierConfigs: bossModifiers.map(m => { return { - modifier: m + modifier: m, + stackCount: m.getStackCount(), }; }) }; From 16b71943669eda5a1d3519e58e3dba5b959e9d89 Mon Sep 17 00:00:00 2001 From: Moka <54149968+MokaStitcher@users.noreply.github.com> Date: Wed, 23 Oct 2024 17:05:13 +0200 Subject: [PATCH 117/153] [P3] Fix Egg Summary not showing new abilities in blue (#4712) --- src/ui/pokemon-info-container.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/ui/pokemon-info-container.ts b/src/ui/pokemon-info-container.ts index 242e59c599b..5c3a22639dd 100644 --- a/src/ui/pokemon-info-container.ts +++ b/src/ui/pokemon-info-container.ts @@ -279,11 +279,8 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { this.pokemonAbilityText.setColor(getTextColor(abilityTextStyle, false, this.scene.uiTheme)); this.pokemonAbilityText.setShadowColor(getTextColor(abilityTextStyle, true, this.scene.uiTheme)); - - const ownedAbilityAttrs = pokemon.scene.gameData.starterData[pokemon.species.getRootSpeciesId()].abilityAttr; - // Check if the player owns ability for the root form - const playerOwnsThisAbility = pokemon.checkIfPlayerHasAbilityOfStarter(ownedAbilityAttrs); + const playerOwnsThisAbility = pokemon.checkIfPlayerHasAbilityOfStarter(starterEntry.abilityAttr); if (!playerOwnsThisAbility) { this.pokemonAbilityLabelText.setColor(getTextColor(TextStyle.SUMMARY_BLUE, false, this.scene.uiTheme)); From 03025b267464d6e306dd30fc92042fef11490c3b Mon Sep 17 00:00:00 2001 From: innerthunder <168692175+innerthunder@users.noreply.github.com> Date: Wed, 23 Oct 2024 08:08:40 -0700 Subject: [PATCH 118/153] [P2] Fix various charge move bugs (#4595) * Add charge move classes and phase * Integrate `MoveChargePhase` in battle phase sequence * Fix Protean + charge move interaction * Fix effect chance applying to semi-invulnerability * Remove `ChargeAttr` and fix ChargeAnim loading * Restore move history entry for charge phases * Gravity now cancels Fly, etc. after charge turn * Dig integration tests * Fly integration tests * Dive integration test + fix Dive in Harsh Sun bug * Solar Beam integration tests + `CHARGING` tag fixes * Fix dive test * Electro Shot integration tests * fix import in MoveChargePhase * Electro Shot Multi Lens test * Geomancy integration tests * Fix duplicate move queue * Update import * Docs + Fix Meteor Beam being boosted by Sheer Force * Fix volt absorb test * Apply PigeonBar's suggested move-phase changes Co-authored-by: PigeonBar <56974298+PigeonBar@users.noreply.github.com> * Make Electro Shot Sheer Force boosted again * Apply PigeonBar's feedback pt. 2 * Apply suggestions from code review Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Fix mistimed/dupe showMoveText and leftover TODO --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: PigeonBar <56974298+PigeonBar@users.noreply.github.com> --- src/data/ability.ts | 8 +- src/data/arena-tag.ts | 3 + src/data/battle-anims.ts | 31 +- src/data/battler-tags.ts | 7 +- src/data/move.ts | 390 +++++++++++++++---------- src/field/pokemon.ts | 4 +- src/phases/move-charge-phase.ts | 84 ++++++ src/phases/move-effect-phase.ts | 163 +++++------ src/phases/move-phase.ts | 59 ++-- src/test/abilities/volt_absorb.test.ts | 4 +- src/test/arena/arena_gravity.test.ts | 80 +++-- src/test/moves/dig.test.ts | 114 ++++++++ src/test/moves/dive.test.ts | 137 +++++++++ src/test/moves/electro_shot.test.ts | 104 +++++++ src/test/moves/fly.test.ts | 122 ++++++++ src/test/moves/geomancy.test.ts | 78 +++++ src/test/moves/solar_beam.test.ts | 102 +++++++ src/test/moves/whirlwind.test.ts | 3 +- 18 files changed, 1188 insertions(+), 305 deletions(-) create mode 100644 src/phases/move-charge-phase.ts create mode 100644 src/test/moves/dig.test.ts create mode 100644 src/test/moves/dive.test.ts create mode 100644 src/test/moves/electro_shot.test.ts create mode 100644 src/test/moves/fly.test.ts create mode 100644 src/test/moves/geomancy.test.ts create mode 100644 src/test/moves/solar_beam.test.ts diff --git a/src/data/ability.ts b/src/data/ability.ts index ebdd5105bb4..cc95045f8b7 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -7,7 +7,7 @@ import { Weather, WeatherType } from "./weather"; import { BattlerTag, GroundedTag } from "./battler-tags"; import { StatusEffect, getNonVolatileStatusEffects, getStatusEffectDescriptor, getStatusEffectHealText } from "./status-effect"; import { Gender } from "./gender"; -import Move, { AttackMove, MoveCategory, MoveFlags, MoveTarget, FlinchAttr, OneHitKOAttr, HitHealAttr, allMoves, StatusMove, SelfStatusMove, VariablePowerAttr, applyMoveAttrs, IncrementMovePriorityAttr, VariableMoveTypeAttr, RandomMovesetMoveAttr, RandomMoveAttr, NaturePowerAttr, CopyMoveAttr, MoveAttr, MultiHitAttr, ChargeAttr, SacrificialAttr, SacrificialAttrOnHit, NeutralDamageAgainstFlyingTypeMultiplierAttr, FixedDamageAttr } from "./move"; +import Move, { AttackMove, MoveCategory, MoveFlags, MoveTarget, FlinchAttr, OneHitKOAttr, HitHealAttr, allMoves, StatusMove, SelfStatusMove, VariablePowerAttr, applyMoveAttrs, IncrementMovePriorityAttr, VariableMoveTypeAttr, RandomMovesetMoveAttr, RandomMoveAttr, NaturePowerAttr, CopyMoveAttr, MoveAttr, MultiHitAttr, SacrificialAttr, SacrificialAttrOnHit, NeutralDamageAgainstFlyingTypeMultiplierAttr, FixedDamageAttr } from "./move"; import { ArenaTagSide, ArenaTrapTag } from "./arena-tag"; import { BerryModifier, PokemonHeldItemModifier } from "../modifier/modifier"; import { TerrainType } from "./terrain"; @@ -1139,7 +1139,9 @@ export class MoveEffectChanceMultiplierAbAttr extends AbAttr { apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): boolean { // Disable showAbility during getTargetBenefitScore this.showAbility = args[4]; - if ((args[0] as Utils.NumberHolder).value <= 0 || (args[1] as Move).id === Moves.ORDER_UP) { + + const exceptMoves = [ Moves.ORDER_UP, Moves.ELECTRO_SHOT ]; + if ((args[0] as Utils.NumberHolder).value <= 0 || exceptMoves.includes((args[1] as Move).id)) { return false; } @@ -1329,7 +1331,6 @@ export class AddSecondStrikeAbAttr extends PreAttackAbAttr { */ const exceptAttrs: Constructor[] = [ MultiHitAttr, - ChargeAttr, SacrificialAttr, SacrificialAttrOnHit ]; @@ -1345,6 +1346,7 @@ export class AddSecondStrikeAbAttr extends PreAttackAbAttr { /** Also check if this move is an Attack move and if it's only targeting one Pokemon */ return numTargets === 1 + && !move.isChargingMove() && !exceptAttrs.some(attr => move.hasAttr(attr)) && !exceptMoves.some(id => move.id === id) && move.category !== MoveCategory.STATUS; diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index aa6aec6f73a..d2c95b7ccdf 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -970,6 +970,9 @@ export class GravityTag extends ArenaTag { if (pokemon !== null) { pokemon.removeTag(BattlerTagType.FLOATING); pokemon.removeTag(BattlerTagType.TELEKINESIS); + if (pokemon.getTag(BattlerTagType.FLYING)) { + pokemon.addTag(BattlerTagType.INTERRUPTED); + } } }); } diff --git a/src/data/battle-anims.ts b/src/data/battle-anims.ts index 03bf0809fa6..37900a3ab5a 100644 --- a/src/data/battle-anims.ts +++ b/src/data/battle-anims.ts @@ -1,6 +1,6 @@ //import { battleAnimRawData } from "./battle-anim-raw-data"; import BattleScene from "../battle-scene"; -import { AttackMove, BeakBlastHeaderAttr, ChargeAttr, DelayedAttackAttr, MoveFlags, SelfStatusMove, allMoves } from "./move"; +import { AttackMove, BeakBlastHeaderAttr, DelayedAttackAttr, MoveFlags, SelfStatusMove, allMoves } from "./move"; import Pokemon from "../field/pokemon"; import * as Utils from "../utils"; import { BattlerIndex } from "../battle"; @@ -476,8 +476,11 @@ export function initMoveAnim(scene: BattleScene, move: Moves): Promise { } else { const loadedCheckTimer = setInterval(() => { if (moveAnims.get(move) !== null) { - const chargeAttr = allMoves[move].getAttrs(ChargeAttr)[0] || allMoves[move].getAttrs(DelayedAttackAttr)[0]; - if (chargeAttr && chargeAnims.get(chargeAttr.chargeAnim) === null) { + const chargeAnimSource = (allMoves[move].isChargingMove()) + ? allMoves[move] + : (allMoves[move].getAttrs(DelayedAttackAttr)[0] + ?? allMoves[move].getAttrs(BeakBlastHeaderAttr)[0]); + if (chargeAnimSource && chargeAnims.get(chargeAnimSource.chargeAnim) === null) { return; } clearInterval(loadedCheckTimer); @@ -507,11 +510,12 @@ export function initMoveAnim(scene: BattleScene, move: Moves): Promise { } else { populateMoveAnim(move, ba); } - const chargeAttr = allMoves[move].getAttrs(ChargeAttr)[0] - || allMoves[move].getAttrs(DelayedAttackAttr)[0] - || allMoves[move].getAttrs(BeakBlastHeaderAttr)[0]; - if (chargeAttr) { - initMoveChargeAnim(scene, chargeAttr.chargeAnim).then(() => resolve()); + const chargeAnimSource = (allMoves[move].isChargingMove()) + ? allMoves[move] + : (allMoves[move].getAttrs(DelayedAttackAttr)[0] + ?? allMoves[move].getAttrs(BeakBlastHeaderAttr)[0]); + if (chargeAnimSource) { + initMoveChargeAnim(scene, chargeAnimSource.chargeAnim).then(() => resolve()); } else { resolve(); } @@ -638,11 +642,12 @@ export function loadMoveAnimAssets(scene: BattleScene, moveIds: Moves[], startLo return new Promise(resolve => { const moveAnimations = moveIds.map(m => moveAnims.get(m) as AnimConfig).flat(); for (const moveId of moveIds) { - const chargeAttr = allMoves[moveId].getAttrs(ChargeAttr)[0] - || allMoves[moveId].getAttrs(DelayedAttackAttr)[0] - || allMoves[moveId].getAttrs(BeakBlastHeaderAttr)[0]; - if (chargeAttr) { - const moveChargeAnims = chargeAnims.get(chargeAttr.chargeAnim); + const chargeAnimSource = (allMoves[moveId].isChargingMove()) + ? allMoves[moveId] + : (allMoves[moveId].getAttrs(DelayedAttackAttr)[0] + ?? allMoves[moveId].getAttrs(BeakBlastHeaderAttr)[0]); + if (chargeAnimSource) { + const moveChargeAnims = chargeAnims.get(chargeAnimSource.chargeAnim); moveAnimations.push(moveChargeAnims instanceof AnimConfig ? moveChargeAnims : moveChargeAnims![0]); // TODO: is the bang correct? if (Array.isArray(moveChargeAnims)) { moveAnimations.push(moveChargeAnims[1]); diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index c3b7765d062..d671c56ab26 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -11,7 +11,6 @@ import { ChargeAnim, CommonAnim, CommonBattleAnim, MoveChargeAnim } from "#app/d import Move, { allMoves, applyMoveAttrs, - ChargeAttr, ConsecutiveUseDoublePowerAttr, HealOnAllyAttr, MoveCategory, @@ -949,10 +948,6 @@ export class EncoreTag extends BattlerTag { return false; } - if (allMoves[repeatableMove.move].hasAttr(ChargeAttr) && repeatableMove.result === MoveResult.OTHER) { - return false; - } - this.moveId = repeatableMove.move; return true; @@ -2591,7 +2586,7 @@ export class TormentTag extends MoveRestrictionBattlerTag { // This checks for locking / momentum moves like Rollout and Hydro Cannon + if the user is under the influence of BattlerTagType.FRENZY // Because Uproar's unique behavior is not implemented, it does not check for Uproar. Torment has been marked as partial in moves.ts const moveObj = allMoves[lastMove.move]; - const isUnaffected = moveObj.hasAttr(ConsecutiveUseDoublePowerAttr) || user.getTag(BattlerTagType.FRENZY) || moveObj.hasAttr(ChargeAttr); + const isUnaffected = moveObj.hasAttr(ConsecutiveUseDoublePowerAttr) || user.getTag(BattlerTagType.FRENZY); const validLastMoveResult = (lastMove.result === MoveResult.SUCCESS) || (lastMove.result === MoveResult.MISS); if (lastMove.move === move && validLastMoveResult && lastMove.move !== Moves.STRUGGLE && !isUnaffected) { return true; diff --git a/src/data/move.ts b/src/data/move.ts index ec25844909e..cf88fad0ac5 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -289,10 +289,9 @@ export default class Move implements Localizable { } /** - * Getter function that returns if the move targets itself or an ally + * Getter function that returns if the move targets the user or its ally * @returns boolean */ - isAllyTarget(): boolean { switch (this.moveTarget) { case MoveTarget.USER: @@ -306,6 +305,10 @@ export default class Move implements Localizable { return false; } + isChargingMove(): this is ChargingMove { + return false; + } + /** * Checks if the move is immune to certain types. * Currently looks at cases of Grass types with powder moves and Dark types with moves affected by Prankster. @@ -893,6 +896,85 @@ export class SelfStatusMove extends Move { } } +type SubMove = new (...args: any[]) => Move; + +function ChargeMove(Base: TBase) { + return class extends Base { + /** The animation to play during the move's charging phase */ + public readonly chargeAnim: ChargeAnim = ChargeAnim[`${Moves[this.id]}_CHARGING`]; + /** The message to show during the move's charging phase */ + private _chargeText: string; + + /** Move attributes that apply during the move's charging phase */ + public chargeAttrs: MoveAttr[] = []; + + override isChargingMove(): this is ChargingMove { + return true; + } + + /** + * Sets the text to be displayed during this move's charging phase. + * References to the user Pokemon should be written as "{USER}", and + * references to the target Pokemon should be written as "{TARGET}". + * @param chargeText the text to set + * @returns this {@linkcode Move} (for chaining API purposes) + */ + chargeText(chargeText: string): this { + this._chargeText = chargeText; + return this; + } + + /** + * Queues the charge text to display to the player + * @param user the {@linkcode Pokemon} using this move + * @param target the {@linkcode Pokemon} targeted by this move (optional) + */ + showChargeText(user: Pokemon, target?: Pokemon): void { + user.scene.queueMessage(this._chargeText + .replace("{USER}", getPokemonNameWithAffix(user)) + .replace("{TARGET}", getPokemonNameWithAffix(target)) + ); + } + + /** + * Gets all charge attributes of the given attribute type. + * @param attrType any attribute that extends {@linkcode MoveAttr} + * @returns Array of attributes that match `attrType`, or an empty array if + * no matches are found. + */ + getChargeAttrs(attrType: Constructor): T[] { + return this.chargeAttrs.filter((attr): attr is T => attr instanceof attrType); + } + + /** + * Checks if this move has an attribute of the given type. + * @param attrType any attribute that extends {@linkcode MoveAttr} + * @returns `true` if a matching attribute is found; `false` otherwise + */ + hasChargeAttr(attrType: Constructor): boolean { + return this.chargeAttrs.some((attr) => attr instanceof attrType); + } + + /** + * Adds an attribute to this move to be applied during the move's charging phase + * @param ChargeAttrType the type of {@linkcode MoveAttr} being added + * @param args the parameters to construct the given {@linkcode MoveAttr} with + * @returns this {@linkcode Move} (for chaining API purposes) + */ + chargeAttr>(ChargeAttrType: T, ...args: ConstructorParameters): this { + const chargeAttr = new ChargeAttrType(...args); + this.chargeAttrs.push(chargeAttr); + + return this; + } + }; +} + +export class ChargingAttackMove extends ChargeMove(AttackMove) {} +export class ChargingSelfStatusMove extends ChargeMove(SelfStatusMove) {} + +export type ChargingMove = ChargingAttackMove | ChargingSelfStatusMove; + /** * Base class defining all {@linkcode Move} Attributes * @abstract @@ -2574,6 +2656,63 @@ export class OneHitKOAttr extends MoveAttr { } } +/** + * Attribute that allows charge moves to resolve in 1 turn under a given condition. + * Should only be used for {@linkcode ChargingMove | ChargingMoves} as a `chargeAttr`. + * @extends MoveAttr + */ +export class InstantChargeAttr extends MoveAttr { + /** The condition in which the move with this attribute instantly charges */ + protected readonly condition: UserMoveConditionFunc; + + constructor(condition: UserMoveConditionFunc) { + super(true); + this.condition = condition; + } + + /** + * Flags the move with this attribute as instantly charged if this attribute's condition is met. + * @param user the {@linkcode Pokemon} using the move + * @param target n/a + * @param move the {@linkcode Move} associated with this attribute + * @param args + * - `[0]` a {@linkcode Utils.BooleanHolder | BooleanHolder} for the "instant charge" flag + * @returns `true` if the instant charge condition is met; `false` otherwise. + */ + override apply(user: Pokemon, target: Pokemon | null, move: Move, args: any[]): boolean { + const instantCharge = args[0]; + if (!(instantCharge instanceof Utils.BooleanHolder)) { + return false; + } + + if (this.condition(user, move)) { + instantCharge.value = true; + return true; + } + return false; + } +} + +/** + * Attribute that allows charge moves to resolve in 1 turn while specific {@linkcode WeatherType | Weather} + * is active. Should only be used for {@linkcode ChargingMove | ChargingMoves} as a `chargeAttr`. + * @extends InstantChargeAttr + */ +export class WeatherInstantChargeAttr extends InstantChargeAttr { + constructor(weatherTypes: WeatherType[]) { + super((user, move) => { + const currentWeather = user.scene.arena.weather; + + if (Utils.isNullOrUndefined(currentWeather?.weatherType)) { + return false; + } else { + return !currentWeather?.isEffectSuppressed(user.scene) + && weatherTypes.includes(currentWeather?.weatherType); + } + }); + } +} + export class OverrideMoveEffectAttr extends MoveAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean | Promise { //const overridden = args[0] as Utils.BooleanHolder; @@ -2582,111 +2721,6 @@ export class OverrideMoveEffectAttr extends MoveAttr { } } -export class ChargeAttr extends OverrideMoveEffectAttr { - public chargeAnim: ChargeAnim; - private chargeText: string; - private tagType: BattlerTagType | null; - private chargeEffect: boolean; - public followUpPriority: integer | null; - - constructor(chargeAnim: ChargeAnim, chargeText: string, tagType?: BattlerTagType | null, chargeEffect: boolean = false) { - super(); - - this.chargeAnim = chargeAnim; - this.chargeText = chargeText; - this.tagType = tagType!; // TODO: is this bang correct? - this.chargeEffect = chargeEffect; - } - - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise { - return new Promise(resolve => { - const lastMove = user.getLastXMoves().find(() => true); - if (!lastMove || lastMove.move !== move.id || (lastMove.result !== MoveResult.OTHER && lastMove.turn !== user.scene.currentBattle.turn)) { - (args[0] as Utils.BooleanHolder).value = true; - new MoveChargeAnim(this.chargeAnim, move.id, user).play(user.scene, false, () => { - user.scene.queueMessage(this.chargeText.replace("{TARGET}", getPokemonNameWithAffix(target)).replace("{USER}", getPokemonNameWithAffix(user))); - if (this.tagType) { - user.addTag(this.tagType, 1, move.id, user.id); - } - if (this.chargeEffect) { - applyMoveAttrs(MoveEffectAttr, user, target, move); - } - user.pushMoveHistory({ move: move.id, targets: [ target.getBattlerIndex() ], result: MoveResult.OTHER }); - user.getMoveQueue().push({ move: move.id, targets: [ target.getBattlerIndex() ], ignorePP: true }); - user.addTag(BattlerTagType.CHARGING, 1, move.id, user.id); - resolve(true); - }); - } else { - user.lapseTag(BattlerTagType.CHARGING); - resolve(false); - } - }); - } - - usedChargeEffect(user: Pokemon, target: Pokemon | null, move: Move): boolean { - if (!this.chargeEffect) { - return false; - } - // Account for move history being populated when this function is called - const lastMoves = user.getLastXMoves(2); - return lastMoves.length === 2 && lastMoves[1].move === move.id && lastMoves[1].result === MoveResult.OTHER; - } -} - -export class SunlightChargeAttr extends ChargeAttr { - constructor(chargeAnim: ChargeAnim, chargeText: string) { - super(chargeAnim, chargeText); - } - - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise { - return new Promise(resolve => { - const weatherType = user.scene.arena.weather?.weatherType; - if (!user.scene.arena.weather?.isEffectSuppressed(user.scene) && (weatherType === WeatherType.SUNNY || weatherType === WeatherType.HARSH_SUN)) { - resolve(false); - } else { - super.apply(user, target, move, args).then(result => resolve(result)); - } - }); - } -} - -export class ElectroShotChargeAttr extends ChargeAttr { - private statIncreaseApplied: boolean; - constructor() { - super(ChargeAnim.ELECTRO_SHOT_CHARGING, i18next.t("moveTriggers:absorbedElectricity", { pokemonName: "{USER}" }), null, true); - // Add a flag because ChargeAttr skills use themselves twice instead of once over one-to-two turns - this.statIncreaseApplied = false; - } - - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise { - return new Promise(resolve => { - const weatherType = user.scene.arena.weather?.weatherType; - if (!user.scene.arena.weather?.isEffectSuppressed(user.scene) && (weatherType === WeatherType.RAIN || weatherType === WeatherType.HEAVY_RAIN)) { - // Apply the SPATK increase every call when used in the rain - const statChangeAttr = new StatStageChangeAttr([ Stat.SPATK ], 1, true); - statChangeAttr.apply(user, target, move, args); - // After the SPATK is raised, execute the move resolution e.g. deal damage - resolve(false); - } else { - if (!this.statIncreaseApplied) { - // Apply the SPATK increase only if it hasn't been applied before e.g. on the first turn charge up animation - const statChangeAttr = new StatStageChangeAttr([ Stat.SPATK ], 1, true); - statChangeAttr.apply(user, target, move, args); - // Set the flag to true so that on the following turn it doesn't raise SPATK a second time - this.statIncreaseApplied = true; - } - super.apply(user, target, move, args).then(result => { - if (!result) { - // On the second turn, reset the statIncreaseApplied flag without applying the SPATK increase - this.statIncreaseApplied = false; - } - resolve(result); - }); - } - }); - } -} - export class DelayedAttackAttr extends OverrideMoveEffectAttr { public tagType: ArenaTagType; public chargeAnim: ChargeAnim; @@ -4878,6 +4912,37 @@ export const frenzyMissFunc: UserMoveConditionFunc = (user: Pokemon, move: Move) return true; }; +/** + * Attribute that grants {@link https://bulbapedia.bulbagarden.net/wiki/Semi-invulnerable_turn | semi-invulnerability} to the user during + * the associated move's charging phase. Should only be used for {@linkcode ChargingMove | ChargingMoves} as a `chargeAttr`. + * @extends MoveEffectAttr + */ +export class SemiInvulnerableAttr extends MoveEffectAttr { + /** The type of {@linkcode SemiInvulnerableTag} to grant to the user */ + public tagType: BattlerTagType; + + constructor(tagType: BattlerTagType) { + super(true); + this.tagType = tagType; + } + + /** + * Grants a {@linkcode SemiInvulnerableTag} to the associated move's user. + * @param user the {@linkcode Pokemon} using the move + * @param target n/a + * @param move the {@linkcode Move} being used + * @param args n/a + * @returns `true` if semi-invulnerability was successfully granted; `false` otherwise. + */ + override apply(user: Pokemon, target: Pokemon, move: Move, args?: any[]): boolean { + if (!super.apply(user, target, move, args)) { + return false; + } + + return user.addTag(this.tagType, 1, move.id, user.id); + } +} + export class AddBattlerTagAttr extends MoveEffectAttr { public tagType: BattlerTagType; public turnCountMin: integer; @@ -6138,7 +6203,7 @@ const lastMoveCopiableCondition: MoveConditionFunc = (user, target, move) => { return false; } - if (allMoves[copiableMove].hasAttr(ChargeAttr)) { + if (allMoves[copiableMove].isChargingMove()) { return false; } @@ -6286,7 +6351,7 @@ const targetMoveCopiableCondition: MoveConditionFunc = (user, target, move) => { return false; } - if (allMoves[copiableMove.move].hasAttr(ChargeAttr) && copiableMove.result === MoveResult.OTHER) { + if (allMoves[copiableMove.move].isChargingMove() && copiableMove.result === MoveResult.OTHER) { return false; } @@ -6985,6 +7050,20 @@ function applyMoveAttrsInternal(attrFilter: MoveAttrFilter, user: Pokemon | null }); } +function applyMoveChargeAttrsInternal(attrFilter: MoveAttrFilter, user: Pokemon | null, target: Pokemon | null, move: ChargingMove, args: any[]): Promise { + return new Promise(resolve => { + const chargeAttrPromises: Promise[] = []; + const chargeMoveAttrs = move.chargeAttrs.filter(a => attrFilter(a)); + for (const attr of chargeMoveAttrs) { + const result = attr.apply(user, target, move, args); + if (result instanceof Promise) { + chargeAttrPromises.push(result); + } + } + Promise.allSettled(chargeAttrPromises).then(() => resolve()); + }); +} + export function applyMoveAttrs(attrType: Constructor, user: Pokemon | null, target: Pokemon | null, move: Move, ...args: any[]): Promise { return applyMoveAttrsInternal((attr: MoveAttr) => attr instanceof attrType, user, target, move, args); } @@ -6993,6 +7072,10 @@ export function applyFilteredMoveAttrs(attrFilter: MoveAttrFilter, user: Pokemon return applyMoveAttrsInternal(attrFilter, user, target, move, args); } +export function applyMoveChargeAttrs(attrType: Constructor, user: Pokemon | null, target: Pokemon | null, move: ChargingMove, ...args: any[]): Promise { + return applyMoveChargeAttrsInternal((attr: MoveAttr) => attr instanceof attrType, user, target, move, args); +} + export class MoveCondition { protected func: MoveConditionFunc; @@ -7237,8 +7320,8 @@ export function initMoves() { new AttackMove(Moves.GUILLOTINE, Type.NORMAL, MoveCategory.PHYSICAL, 200, 30, 5, -1, 0, 1) .attr(OneHitKOAttr) .attr(OneHitKOAccuracyAttr), - new AttackMove(Moves.RAZOR_WIND, Type.NORMAL, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 1) - .attr(ChargeAttr, ChargeAnim.RAZOR_WIND_CHARGING, i18next.t("moveTriggers:whippedUpAWhirlwind", { pokemonName: "{USER}" })) + new ChargingAttackMove(Moves.RAZOR_WIND, Type.NORMAL, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 1) + .chargeText(i18next.t("moveTriggers:whippedUpAWhirlwind", { pokemonName: "{USER}" })) .attr(HighCritAttr) .windMove() .ignoresVirtual() @@ -7258,8 +7341,9 @@ export function initMoves() { .hidesTarget() .windMove() .partial(), // Should force random switches - new AttackMove(Moves.FLY, Type.FLYING, MoveCategory.PHYSICAL, 90, 95, 15, -1, 0, 1) - .attr(ChargeAttr, ChargeAnim.FLY_CHARGING, i18next.t("moveTriggers:flewUpHigh", { pokemonName: "{USER}" }), BattlerTagType.FLYING) + new ChargingAttackMove(Moves.FLY, Type.FLYING, MoveCategory.PHYSICAL, 90, 95, 15, -1, 0, 1) + .chargeText(i18next.t("moveTriggers:flewUpHigh", { pokemonName: "{USER}" })) + .chargeAttr(SemiInvulnerableAttr, BattlerTagType.FLYING) .condition(failOnGravityCondition) .ignoresVirtual(), new AttackMove(Moves.BIND, Type.NORMAL, MoveCategory.PHYSICAL, 15, 85, 20, -1, 0, 1) @@ -7408,8 +7492,9 @@ export function initMoves() { .makesContact(false) .slicingMove() .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.SOLAR_BEAM, Type.GRASS, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 1) - .attr(SunlightChargeAttr, ChargeAnim.SOLAR_BEAM_CHARGING, i18next.t("moveTriggers:tookInSunlight", { pokemonName: "{USER}" })) + new ChargingAttackMove(Moves.SOLAR_BEAM, Type.GRASS, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 1) + .chargeText(i18next.t("moveTriggers:tookInSunlight", { pokemonName: "{USER}" })) + .chargeAttr(WeatherInstantChargeAttr, [ WeatherType.SUNNY, WeatherType.HARSH_SUN ]) .attr(AntiSunlightPowerDecreaseAttr) .ignoresVirtual(), new StatusMove(Moves.POISON_POWDER, Type.POISON, 75, 35, -1, 0, 1) @@ -7458,8 +7543,9 @@ export function initMoves() { .attr(OneHitKOAccuracyAttr) .attr(HitsTagAttr, BattlerTagType.UNDERGROUND) .makesContact(false), - new AttackMove(Moves.DIG, Type.GROUND, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 1) - .attr(ChargeAttr, ChargeAnim.DIG_CHARGING, i18next.t("moveTriggers:dugAHole", { pokemonName: "{USER}" }), BattlerTagType.UNDERGROUND) + new ChargingAttackMove(Moves.DIG, Type.GROUND, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 1) + .chargeText(i18next.t("moveTriggers:dugAHole", { pokemonName: "{USER}" })) + .chargeAttr(SemiInvulnerableAttr, BattlerTagType.UNDERGROUND) .ignoresVirtual(), new StatusMove(Moves.TOXIC, Type.POISON, 90, 10, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.TOXIC) @@ -7555,9 +7641,9 @@ export function initMoves() { .attr(TrapAttr, BattlerTagType.CLAMP), new AttackMove(Moves.SWIFT, Type.NORMAL, MoveCategory.SPECIAL, 60, -1, 20, -1, 0, 1) .target(MoveTarget.ALL_NEAR_ENEMIES), - new AttackMove(Moves.SKULL_BASH, Type.NORMAL, MoveCategory.PHYSICAL, 130, 100, 10, -1, 0, 1) - .attr(ChargeAttr, ChargeAnim.SKULL_BASH_CHARGING, i18next.t("moveTriggers:loweredItsHead", { pokemonName: "{USER}" }), null, true) - .attr(StatStageChangeAttr, [ Stat.DEF ], 1, true) + new ChargingAttackMove(Moves.SKULL_BASH, Type.NORMAL, MoveCategory.PHYSICAL, 130, 100, 10, -1, 0, 1) + .chargeText(i18next.t("moveTriggers:loweredItsHead", { pokemonName: "{USER}" })) + .chargeAttr(StatStageChangeAttr, [ Stat.DEF ], 1, true) .ignoresVirtual(), new AttackMove(Moves.SPIKE_CANNON, Type.NORMAL, MoveCategory.PHYSICAL, 20, 100, 15, -1, 0, 1) .attr(MultiHitAttr) @@ -7594,8 +7680,8 @@ export function initMoves() { .triageMove(), new StatusMove(Moves.LOVELY_KISS, Type.NORMAL, 75, 10, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.SLEEP), - new AttackMove(Moves.SKY_ATTACK, Type.FLYING, MoveCategory.PHYSICAL, 140, 90, 5, 30, 0, 1) - .attr(ChargeAttr, ChargeAnim.SKY_ATTACK_CHARGING, i18next.t("moveTriggers:isGlowing", { pokemonName: "{USER}" })) + new ChargingAttackMove(Moves.SKY_ATTACK, Type.FLYING, MoveCategory.PHYSICAL, 140, 90, 5, 30, 0, 1) + .chargeText(i18next.t("moveTriggers:isGlowing", { pokemonName: "{USER}" })) .attr(HighCritAttr) .attr(FlinchAttr) .makesContact(false) @@ -8060,9 +8146,10 @@ export function initMoves() { new AttackMove(Moves.SECRET_POWER, Type.NORMAL, MoveCategory.PHYSICAL, 70, 100, 20, 30, 0, 3) .makesContact(false) .attr(SecretPowerAttr), - new AttackMove(Moves.DIVE, Type.WATER, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 3) - .attr(ChargeAttr, ChargeAnim.DIVE_CHARGING, i18next.t("moveTriggers:hidUnderwater", { pokemonName: "{USER}" }), BattlerTagType.UNDERWATER, true) - .attr(GulpMissileTagAttr) + new ChargingAttackMove(Moves.DIVE, Type.WATER, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 3) + .chargeText(i18next.t("moveTriggers:hidUnderwater", { pokemonName: "{USER}" })) + .chargeAttr(SemiInvulnerableAttr, BattlerTagType.UNDERWATER) + .chargeAttr(GulpMissileTagAttr) .ignoresVirtual(), new AttackMove(Moves.ARM_THRUST, Type.FIGHTING, MoveCategory.PHYSICAL, 15, 100, 20, -1, 0, 3) .attr(MultiHitAttr), @@ -8195,8 +8282,9 @@ export function initMoves() { .attr(RechargeAttr), new SelfStatusMove(Moves.BULK_UP, Type.FIGHTING, -1, 20, -1, 0, 3) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF ], 1, true), - new AttackMove(Moves.BOUNCE, Type.FLYING, MoveCategory.PHYSICAL, 85, 85, 5, 30, 0, 3) - .attr(ChargeAttr, ChargeAnim.BOUNCE_CHARGING, i18next.t("moveTriggers:sprangUp", { pokemonName: "{USER}" }), BattlerTagType.FLYING) + new ChargingAttackMove(Moves.BOUNCE, Type.FLYING, MoveCategory.PHYSICAL, 85, 85, 5, 30, 0, 3) + .chargeText(i18next.t("moveTriggers:sprangUp", { pokemonName: "{USER}" })) + .chargeAttr(SemiInvulnerableAttr, BattlerTagType.FLYING) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .condition(failOnGravityCondition) .ignoresVirtual(), @@ -8551,8 +8639,9 @@ export function initMoves() { new AttackMove(Moves.OMINOUS_WIND, Type.GHOST, MoveCategory.SPECIAL, 60, 100, 5, 10, 0, 4) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.DEF, Stat.SPATK, Stat.SPDEF, Stat.SPD ], 1, true) .windMove(), - new AttackMove(Moves.SHADOW_FORCE, Type.GHOST, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 4) - .attr(ChargeAttr, ChargeAnim.SHADOW_FORCE_CHARGING, i18next.t("moveTriggers:vanishedInstantly", { pokemonName: "{USER}" }), BattlerTagType.HIDDEN) + new ChargingAttackMove(Moves.SHADOW_FORCE, Type.GHOST, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 4) + .chargeText(i18next.t("moveTriggers:vanishedInstantly", { pokemonName: "{USER}" })) + .chargeAttr(SemiInvulnerableAttr, BattlerTagType.HIDDEN) .ignoresProtect() .ignoresVirtual(), new SelfStatusMove(Moves.HONE_CLAWS, Type.DARK, -1, 15, -1, 0, 5) @@ -8675,12 +8764,13 @@ export function initMoves() { .attr( MovePowerMultiplierAttr, (user, target, move) => target.status || target.hasAbility(Abilities.COMATOSE) ? 2 : 1), - new AttackMove(Moves.SKY_DROP, Type.FLYING, MoveCategory.PHYSICAL, 60, 100, 10, -1, 0, 5) - .partial() // Should immobilize the target, Flying types should take no damage. cf https://bulbapedia.bulbagarden.net/wiki/Sky_Drop_(move) and https://www.smogon.com/dex/sv/moves/sky-drop/ - .attr(ChargeAttr, ChargeAnim.SKY_DROP_CHARGING, i18next.t("moveTriggers:tookTargetIntoSky", { pokemonName: "{USER}", targetName: "{TARGET}" }), BattlerTagType.FLYING) // TODO: Add 2nd turn message + new ChargingAttackMove(Moves.SKY_DROP, Type.FLYING, MoveCategory.PHYSICAL, 60, 100, 10, -1, 0, 5) + .chargeText(i18next.t("moveTriggers:tookTargetIntoSky", { pokemonName: "{USER}", targetName: "{TARGET}" })) + .chargeAttr(SemiInvulnerableAttr, BattlerTagType.FLYING) .condition(failOnGravityCondition) .condition((user, target, move) => !target.getTag(BattlerTagType.SUBSTITUTE)) - .ignoresVirtual(), + .ignoresVirtual() + .partial(), // Should immobilize the target, Flying types should take no damage. cf https://bulbapedia.bulbagarden.net/wiki/Sky_Drop_(move) and https://www.smogon.com/dex/sv/moves/sky-drop/ new SelfStatusMove(Moves.SHIFT_GEAR, Type.STEEL, -1, 10, -1, 0, 5) .attr(StatStageChangeAttr, [ Stat.ATK ], 1, true) .attr(StatStageChangeAttr, [ Stat.SPD ], 2, true), @@ -8830,12 +8920,12 @@ export function initMoves() { new AttackMove(Moves.FIERY_DANCE, Type.FIRE, MoveCategory.SPECIAL, 80, 100, 10, 50, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPATK ], 1, true) .danceMove(), - new AttackMove(Moves.FREEZE_SHOCK, Type.ICE, MoveCategory.PHYSICAL, 140, 90, 5, 30, 0, 5) - .attr(ChargeAttr, ChargeAnim.FREEZE_SHOCK_CHARGING, i18next.t("moveTriggers:becameCloakedInFreezingLight", { pokemonName: "{USER}" })) + new ChargingAttackMove(Moves.FREEZE_SHOCK, Type.ICE, MoveCategory.PHYSICAL, 140, 90, 5, 30, 0, 5) + .chargeText(i18next.t("moveTriggers:becameCloakedInFreezingLight", { pokemonName: "{USER}" })) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) .makesContact(false), - new AttackMove(Moves.ICE_BURN, Type.ICE, MoveCategory.SPECIAL, 140, 90, 5, 30, 0, 5) - .attr(ChargeAttr, ChargeAnim.ICE_BURN_CHARGING, i18next.t("moveTriggers:becameCloakedInFreezingAir", { pokemonName: "{USER}" })) + new ChargingAttackMove(Moves.ICE_BURN, Type.ICE, MoveCategory.SPECIAL, 140, 90, 5, 30, 0, 5) + .chargeText(i18next.t("moveTriggers:becameCloakedInFreezingAir", { pokemonName: "{USER}" })) .attr(StatusEffectAttr, StatusEffect.BURN) .ignoresVirtual(), new AttackMove(Moves.SNARL, Type.DARK, MoveCategory.SPECIAL, 55, 95, 15, 100, 0, 5) @@ -8877,8 +8967,9 @@ export function initMoves() { .target(MoveTarget.ENEMY_SIDE), new AttackMove(Moves.FELL_STINGER, Type.BUG, MoveCategory.PHYSICAL, 50, 100, 25, -1, 0, 6) .attr(PostVictoryStatStageChangeAttr, [ Stat.ATK ], 3, true ), - new AttackMove(Moves.PHANTOM_FORCE, Type.GHOST, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6) - .attr(ChargeAttr, ChargeAnim.PHANTOM_FORCE_CHARGING, i18next.t("moveTriggers:vanishedInstantly", { pokemonName: "{USER}" }), BattlerTagType.HIDDEN) + new ChargingAttackMove(Moves.PHANTOM_FORCE, Type.GHOST, MoveCategory.PHYSICAL, 90, 100, 10, -1, 0, 6) + .chargeText(i18next.t("moveTriggers:vanishedInstantly", { pokemonName: "{USER}" })) + .chargeAttr(SemiInvulnerableAttr, BattlerTagType.HIDDEN) .ignoresProtect() .ignoresVirtual(), new StatusMove(Moves.TRICK_OR_TREAT, Type.GHOST, 100, 20, -1, 0, 6) @@ -8988,8 +9079,8 @@ export function initMoves() { .ignoresSubstitute() .powderMove() .unimplemented(), - new SelfStatusMove(Moves.GEOMANCY, Type.FAIRY, -1, 10, -1, 0, 6) - .attr(ChargeAttr, ChargeAnim.GEOMANCY_CHARGING, i18next.t("moveTriggers:isChargingPower", { pokemonName: "{USER}" })) + new ChargingSelfStatusMove(Moves.GEOMANCY, Type.FAIRY, -1, 10, -1, 0, 6) + .chargeText(i18next.t("moveTriggers:isChargingPower", { pokemonName: "{USER}" })) .attr(StatStageChangeAttr, [ Stat.SPATK, Stat.SPDEF, Stat.SPD ], 2, true) .ignoresVirtual(), new StatusMove(Moves.MAGNETIC_FLUX, Type.ELECTRIC, -1, 20, -1, 0, 6) @@ -9198,8 +9289,9 @@ export function initMoves() { .attr(StatStageChangeAttr, [ Stat.ATK ], -1) .condition((user, target, move) => target.getStatStage(Stat.ATK) > -6) .triageMove(), - new AttackMove(Moves.SOLAR_BLADE, Type.GRASS, MoveCategory.PHYSICAL, 125, 100, 10, -1, 0, 7) - .attr(SunlightChargeAttr, ChargeAnim.SOLAR_BLADE_CHARGING, i18next.t("moveTriggers:isGlowing", { pokemonName: "{USER}" })) + new ChargingAttackMove(Moves.SOLAR_BLADE, Type.GRASS, MoveCategory.PHYSICAL, 125, 100, 10, -1, 0, 7) + .chargeText(i18next.t("moveTriggers:isGlowing", { pokemonName: "{USER}" })) + .chargeAttr(WeatherInstantChargeAttr, [ WeatherType.SUNNY, WeatherType.HARSH_SUN ]) .attr(AntiSunlightPowerDecreaseAttr) .slicingMove(), new AttackMove(Moves.LEAFAGE, Type.GRASS, MoveCategory.PHYSICAL, 40, 100, 40, -1, 0, 7) @@ -9625,9 +9717,9 @@ export function initMoves() { .attr(StatStageChangeAttr, [ Stat.DEF ], -1, true, null, true, false, MoveEffectTrigger.HIT, false, true) .attr(MultiHitAttr) .makesContact(false), - new AttackMove(Moves.METEOR_BEAM, Type.ROCK, MoveCategory.SPECIAL, 120, 90, 10, 100, 0, 8) - .attr(ChargeAttr, ChargeAnim.METEOR_BEAM_CHARGING, i18next.t("moveTriggers:isOverflowingWithSpacePower", { pokemonName: "{USER}" }), null, true) - .attr(StatStageChangeAttr, [ Stat.SPATK ], 1, true) + new ChargingAttackMove(Moves.METEOR_BEAM, Type.ROCK, MoveCategory.SPECIAL, 120, 90, 10, -1, 0, 8) + .chargeText(i18next.t("moveTriggers:isOverflowingWithSpacePower", { pokemonName: "{USER}" })) + .chargeAttr(StatStageChangeAttr, [ Stat.SPATK ], 1, true) .ignoresVirtual(), new AttackMove(Moves.SHELL_SIDE_ARM, Type.POISON, MoveCategory.SPECIAL, 90, 100, 10, 20, 0, 8) .attr(ShellSideArmCategoryAttr) @@ -10079,8 +10171,10 @@ export function initMoves() { .attr(IvyCudgelTypeAttr) .attr(HighCritAttr) .makesContact(false), - new AttackMove(Moves.ELECTRO_SHOT, Type.ELECTRIC, MoveCategory.SPECIAL, 130, 100, 10, 100, 0, 9) - .attr(ElectroShotChargeAttr) + new ChargingAttackMove(Moves.ELECTRO_SHOT, Type.ELECTRIC, MoveCategory.SPECIAL, 130, 100, 10, 100, 0, 9) + .chargeText(i18next.t("moveTriggers:absorbedElectricity", { pokemonName: "{USER}" })) + .chargeAttr(StatStageChangeAttr, [ Stat.SPATK ], 1, true) + .chargeAttr(WeatherInstantChargeAttr, [ WeatherType.RAIN, WeatherType.HEAVY_RAIN ]) .ignoresVirtual(), new AttackMove(Moves.TERA_STARSTORM, Type.NORMAL, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 9) .attr(TeraMoveCategoryAttr) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index a3d7429ed9b..6c4ae3b7ff9 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -3,7 +3,7 @@ import BattleScene, { AnySound } from "#app/battle-scene"; import { Variant, VariantSet, variantColorCache } from "#app/data/variant"; import { variantData } from "#app/data/variant"; import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from "#app/ui/battle-info"; -import Move, { HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, OneHitKOAttr, VariableMoveTypeAttr, VariableDefAttr, AttackMove, ModifiedDamageAttr, VariableMoveTypeMultiplierAttr, IgnoreOpponentStatStagesAttr, SacrificialAttr, VariableMoveCategoryAttr, CounterDamageAttr, StatStageChangeAttr, RechargeAttr, ChargeAttr, IgnoreWeatherTypeDebuffAttr, BypassBurnDamageReductionAttr, SacrificialAttrOnHit, OneHitKOAccuracyAttr, RespectAttackTypeImmunityAttr, MoveTarget, CombinedPledgeStabBoostAttr } from "#app/data/move"; +import Move, { HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, OneHitKOAttr, VariableMoveTypeAttr, VariableDefAttr, AttackMove, ModifiedDamageAttr, VariableMoveTypeMultiplierAttr, IgnoreOpponentStatStagesAttr, SacrificialAttr, VariableMoveCategoryAttr, CounterDamageAttr, StatStageChangeAttr, RechargeAttr, IgnoreWeatherTypeDebuffAttr, BypassBurnDamageReductionAttr, SacrificialAttrOnHit, OneHitKOAccuracyAttr, RespectAttackTypeImmunityAttr, MoveTarget, CombinedPledgeStabBoostAttr } from "#app/data/move"; import { default as PokemonSpecies, PokemonSpeciesForm, getFusedSpeciesName, getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species"; import { CLASSIC_CANDY_FRIENDSHIP_MULTIPLIER, getStarterValueFriendshipCap, speciesStarterCosts } from "#app/data/balance/starters"; import { starterPassiveAbilities } from "#app/data/balance/passives"; @@ -2121,7 +2121,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // Trainers get a weight bump to stat buffing moves movePool = movePool.map(m => [ m[0], m[1] * (allMoves[m[0]].getAttrs(StatStageChangeAttr).some(a => a.stages > 1 && a.selfTarget) ? 1.25 : 1) ]); // Trainers get a weight decrease to multiturn moves - movePool = movePool.map(m => [ m[0], m[1] * (!!allMoves[m[0]].hasAttr(ChargeAttr) || !!allMoves[m[0]].hasAttr(RechargeAttr) ? 0.7 : 1) ]); + movePool = movePool.map(m => [ m[0], m[1] * (!!allMoves[m[0]].isChargingMove() || !!allMoves[m[0]].hasAttr(RechargeAttr) ? 0.7 : 1) ]); } // Weight towards higher power moves, by reducing the power of moves below the highest power. diff --git a/src/phases/move-charge-phase.ts b/src/phases/move-charge-phase.ts new file mode 100644 index 00000000000..d1dc340b81b --- /dev/null +++ b/src/phases/move-charge-phase.ts @@ -0,0 +1,84 @@ +import BattleScene from "#app/battle-scene"; +import { BattlerIndex } from "#app/battle"; +import { MoveChargeAnim } from "#app/data/battle-anims"; +import { applyMoveChargeAttrs, MoveEffectAttr, InstantChargeAttr } from "#app/data/move"; +import Pokemon, { MoveResult, PokemonMove } from "#app/field/pokemon"; +import { BooleanHolder } from "#app/utils"; +import { MovePhase } from "#app/phases/move-phase"; +import { PokemonPhase } from "#app/phases/pokemon-phase"; +import { BattlerTagType } from "#enums/battler-tag-type"; +import { MoveEndPhase } from "#app/phases/move-end-phase"; + +/** + * Phase for the "charging turn" of two-turn moves (e.g. Dig). + * @extends {@linkcode PokemonPhase} + */ +export class MoveChargePhase extends PokemonPhase { + /** The move instance that this phase applies */ + public move: PokemonMove; + /** The field index targeted by the move (Charging moves assume single target) */ + public targetIndex: BattlerIndex; + + constructor(scene: BattleScene, battlerIndex: BattlerIndex, targetIndex: BattlerIndex, move: PokemonMove) { + super(scene, battlerIndex); + this.move = move; + this.targetIndex = targetIndex; + } + + public override start() { + super.start(); + + const user = this.getUserPokemon(); + const target = this.getTargetPokemon(); + const move = this.move.getMove(); + + // If the target is somehow not defined, or the move is somehow not a ChargingMove, + // immediately end this phase. + if (!target || !(move.isChargingMove())) { + console.warn("Invalid parameters for MoveChargePhase"); + return super.end(); + } + + new MoveChargeAnim(move.chargeAnim, move.id, user).play(this.scene, false, () => { + move.showChargeText(user, target); + + applyMoveChargeAttrs(MoveEffectAttr, user, target, move).then(() => { + user.addTag(BattlerTagType.CHARGING, 1, move.id, user.id); + this.end(); + }); + }); + } + + /** Checks the move's instant charge conditions, then ends this phase. */ + public override end() { + const user = this.getUserPokemon(); + const move = this.move.getMove(); + + if (move.isChargingMove()) { + const instantCharge = new BooleanHolder(false); + + applyMoveChargeAttrs(InstantChargeAttr, user, null, move, instantCharge); + + if (instantCharge.value) { + // this MoveEndPhase will be duplicated by the queued MovePhase if not removed + this.scene.tryRemovePhase((phase) => phase instanceof MoveEndPhase && phase.getPokemon() === user); + // queue a new MovePhase for this move's attack phase + this.scene.unshiftPhase(new MovePhase(this.scene, user, [ this.targetIndex ], this.move, false)); + } else { + user.getMoveQueue().push({ move: move.id, targets: [ this.targetIndex ]}); + } + + // Add this move's charging phase to the user's move history + user.pushMoveHistory({ move: this.move.moveId, targets: [ this.targetIndex ], result: MoveResult.OTHER }); + } + super.end(); + } + + public getUserPokemon(): Pokemon { + return (this.player ? this.scene.getPlayerField() : this.scene.getEnemyField())[this.fieldIndex]; + } + + public getTargetPokemon(): Pokemon | undefined { + return this.scene.getField(true).find((p) => this.targetIndex === p.getBattlerIndex()); + } +} diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index 8d1a255d268..2b898f7d66b 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -4,7 +4,7 @@ import { applyPreAttackAbAttrs, AddSecondStrikeAbAttr, IgnoreMoveEffectsAbAttr, import { ArenaTagSide, ConditionalProtectTag } from "#app/data/arena-tag"; import { MoveAnim } from "#app/data/battle-anims"; import { BattlerTagLapseType, DamageProtectedTag, ProtectedTag, SemiInvulnerableTag, SubstituteTag } from "#app/data/battler-tags"; -import { MoveTarget, applyMoveAttrs, OverrideMoveEffectAttr, MultiHitAttr, AttackMove, FixedDamageAttr, VariableTargetAttr, MissEffectAttr, MoveFlags, applyFilteredMoveAttrs, MoveAttr, MoveEffectAttr, OneHitKOAttr, MoveEffectTrigger, ChargeAttr, MoveCategory, NoEffectAttr, HitsTagAttr, ToxicAccuracyAttr } from "#app/data/move"; +import { MoveTarget, applyMoveAttrs, OverrideMoveEffectAttr, MultiHitAttr, AttackMove, FixedDamageAttr, VariableTargetAttr, MissEffectAttr, MoveFlags, applyFilteredMoveAttrs, MoveAttr, MoveEffectAttr, OneHitKOAttr, MoveEffectTrigger, MoveCategory, NoEffectAttr, HitsTagAttr, ToxicAccuracyAttr } from "#app/data/move"; import { SpeciesFormChangePostMoveTrigger } from "#app/data/pokemon-forms"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import { Moves } from "#app/enums/moves"; @@ -24,10 +24,10 @@ export class MoveEffectPhase extends PokemonPhase { super(scene, battlerIndex); this.move = move; /** - * In double battles, if the right Pokemon selects a spread move and the left Pokemon dies - * with no party members available to switch in, then the right Pokemon takes the index - * of the left Pokemon and gets hit unless this is checked. - */ + * In double battles, if the right Pokemon selects a spread move and the left Pokemon dies + * with no party members available to switch in, then the right Pokemon takes the index + * of the left Pokemon and gets hit unless this is checked. + */ if (targets.includes(battlerIndex) && this.move.getMove().moveTarget === MoveTarget.ALL_NEAR_OTHERS) { const i = targets.indexOf(battlerIndex); targets.splice(i, i + 1); @@ -49,9 +49,9 @@ export class MoveEffectPhase extends PokemonPhase { } /** - * Does an effect from this move override other effects on this turn? - * e.g. Charging moves (Fly, etc.) on their first turn of use. - */ + * Does an effect from this move override other effects on this turn? + * e.g. Charging moves (Fly, etc.) on their first turn of use. + */ const overridden = new Utils.BooleanHolder(false); /** The {@linkcode Move} object from {@linkcode allMoves} invoked by this phase */ const move = this.move.getMove(); @@ -66,10 +66,10 @@ export class MoveEffectPhase extends PokemonPhase { user.lapseTags(BattlerTagLapseType.MOVE_EFFECT); /** - * If this phase is for the first hit of the invoked move, - * resolve the move's total hit count. This block combines the - * effects of the move itself, Parental Bond, and Multi-Lens to do so. - */ + * If this phase is for the first hit of the invoked move, + * resolve the move's total hit count. This block combines the + * effects of the move itself, Parental Bond, and Multi-Lens to do so. + */ if (user.turnData.hitsLeft === -1) { const hitCount = new Utils.IntegerHolder(1); // Assume single target for multi hit @@ -86,16 +86,16 @@ export class MoveEffectPhase extends PokemonPhase { } /** - * Log to be entered into the user's move history once the move result is resolved. - * Note that `result` (a {@linkcode MoveResult}) logs whether the move was successfully - * used in the sense of "Does it have an effect on the user?". - */ + * Log to be entered into the user's move history once the move result is resolved. + * Note that `result` (a {@linkcode MoveResult}) logs whether the move was successfully + * used in the sense of "Does it have an effect on the user?". + */ const moveHistoryEntry = { move: this.move.moveId, targets: this.targets, result: MoveResult.PENDING, virtual: this.move.virtual }; /** - * Stores results of hit checks of the invoked move against all targets, organized by battler index. - * @see {@linkcode hitCheck} - */ + * Stores results of hit checks of the invoked move against all targets, organized by battler index. + * @see {@linkcode hitCheck} + */ const targetHitChecks = Object.fromEntries(targets.map(p => [ p.getBattlerIndex(), this.hitCheck(p) ])); const hasActiveTargets = targets.some(t => t.isActive(true)); @@ -104,11 +104,10 @@ export class MoveEffectPhase extends PokemonPhase { && !targets[0].getTag(SemiInvulnerableTag); /** - * If no targets are left for the move to hit (FAIL), or the invoked move is single-target - * (and not random target) and failed the hit check against its target (MISS), log the move - * as FAILed or MISSed (depending on the conditions above) and end this phase. - */ - + * If no targets are left for the move to hit (FAIL), or the invoked move is single-target + * (and not random target) and failed the hit check against its target (MISS), log the move + * as FAILed or MISSed (depending on the conditions above) and end this phase. + */ if (!hasActiveTargets || (!move.hasAttr(VariableTargetAttr) && !move.isMultiTarget() && !targetHitChecks[this.targets[0]] && !targets[0].getTag(ProtectedTag) && !isImmune)) { this.stopMultiHit(); if (hasActiveTargets) { @@ -154,9 +153,9 @@ export class MoveEffectPhase extends PokemonPhase { && !target.getTag(SemiInvulnerableTag); /** - * If the move missed a target, stop all future hits against that target - * and move on to the next target (if there is one). - */ + * If the move missed a target, stop all future hits against that target + * and move on to the next target (if there is one). + */ if (!isImmune && !isProtected && !targetHitChecks[target.getBattlerIndex()]) { this.stopMultiHit(target); this.scene.queueMessage(i18next.t("battle:attackMissed", { pokemonNameWithAffix: getPokemonNameWithAffix(target) })); @@ -177,23 +176,23 @@ export class MoveEffectPhase extends PokemonPhase { } /** - * Since all fail/miss checks have applied, the move is considered successfully applied. - * It's worth noting that if the move has no effect or is protected against, this assignment - * is overwritten and the move is logged as a FAIL. - */ + * Since all fail/miss checks have applied, the move is considered successfully applied. + * It's worth noting that if the move has no effect or is protected against, this assignment + * is overwritten and the move is logged as a FAIL. + */ moveHistoryEntry.result = MoveResult.SUCCESS; /** - * Stores the result of applying the invoked move to the target. - * If the target is protected, the result is always `NO_EFFECT`. - * Otherwise, the hit result is based on type effectiveness, immunities, - * and other factors that may negate the attack or status application. - * - * Internally, the call to {@linkcode Pokemon.apply} is where damage is calculated - * (for attack moves) and the target's HP is updated. However, this isn't - * made visible to the user until the resulting {@linkcode DamagePhase} - * is invoked. - */ + * Stores the result of applying the invoked move to the target. + * If the target is protected, the result is always `NO_EFFECT`. + * Otherwise, the hit result is based on type effectiveness, immunities, + * and other factors that may negate the attack or status application. + * + * Internally, the call to {@linkcode Pokemon.apply} is where damage is calculated + * (for attack moves) and the target's HP is updated. However, this isn't + * made visible to the user until the resulting {@linkcode DamagePhase} + * is invoked. + */ const hitResult = !isProtected ? target.apply(user, move) : HitResult.NO_EFFECT; /** Does {@linkcode hitResult} indicate that damage was dealt to the target? */ @@ -211,9 +210,9 @@ export class MoveEffectPhase extends PokemonPhase { } /** - * If the move has no effect on the target (i.e. the target is protected or immune), - * change the logged move result to FAIL. - */ + * If the move has no effect on the target (i.e. the target is protected or immune), + * change the logged move result to FAIL. + */ if (hitResult === HitResult.NO_EFFECT) { moveHistoryEntry.result = MoveResult.FAIL; } @@ -222,43 +221,41 @@ export class MoveEffectPhase extends PokemonPhase { const lastHit = (user.turnData.hitsLeft === 1 || !this.getTarget()?.isActive()); /** - * If the user can change forms by using the invoked move, - * it only changes forms after the move's last hit - * (see Relic Song's interaction with Parental Bond when used by Meloetta). - */ + * If the user can change forms by using the invoked move, + * it only changes forms after the move's last hit + * (see Relic Song's interaction with Parental Bond when used by Meloetta). + */ if (lastHit) { this.scene.triggerPokemonFormChange(user, SpeciesFormChangePostMoveTrigger); } /** - * Create a Promise that applys *all* effects from the invoked move's MoveEffectAttrs. - * These are ordered by trigger type (see {@linkcode MoveEffectTrigger}), and each trigger - * type requires different conditions to be met with respect to the move's hit result. - */ + * Create a Promise that applys *all* effects from the invoked move's MoveEffectAttrs. + * These are ordered by trigger type (see {@linkcode MoveEffectTrigger}), and each trigger + * type requires different conditions to be met with respect to the move's hit result. + */ applyAttrs.push(new Promise(resolve => { // Apply all effects with PRE_MOVE triggers (if the target isn't immune to the move) applyFilteredMoveAttrs((attr: MoveAttr) => attr instanceof MoveEffectAttr && attr.trigger === MoveEffectTrigger.PRE_APPLY && (!attr.firstHitOnly || firstHit) && (!attr.lastHitOnly || lastHit) && hitResult !== HitResult.NO_EFFECT, user, target, move).then(() => { // All other effects require the move to not have failed or have been cancelled to trigger if (hitResult !== HitResult.FAIL) { - /** Are the move's effects tied to the first turn of a charge move? */ - const chargeEffect = !!move.getAttrs(ChargeAttr).find(ca => ca.usedChargeEffect(user, this.getTarget() ?? null, move)); /** - * If the invoked move's effects are meant to trigger during the move's "charge turn," - * ignore all effects after this point. - * Otherwise, apply all self-targeted POST_APPLY effects. - */ - Utils.executeIf(!chargeEffect, () => applyFilteredMoveAttrs((attr: MoveAttr) => attr instanceof MoveEffectAttr && attr.trigger === MoveEffectTrigger.POST_APPLY - && attr.selfTarget && (!attr.firstHitOnly || firstHit) && (!attr.lastHitOnly || lastHit), user, target, move)).then(() => { + * If the invoked move's effects are meant to trigger during the move's "charge turn," + * ignore all effects after this point. + * Otherwise, apply all self-targeted POST_APPLY effects. + */ + applyFilteredMoveAttrs((attr: MoveAttr) => attr instanceof MoveEffectAttr && attr.trigger === MoveEffectTrigger.POST_APPLY + && attr.selfTarget && (!attr.firstHitOnly || firstHit) && (!attr.lastHitOnly || lastHit), user, target, move).then(() => { // All effects past this point require the move to have hit the target if (hitResult !== HitResult.NO_EFFECT) { // Apply all non-self-targeted POST_APPLY effects applyFilteredMoveAttrs((attr: MoveAttr) => attr instanceof MoveEffectAttr && (attr as MoveEffectAttr).trigger === MoveEffectTrigger.POST_APPLY && !(attr as MoveEffectAttr).selfTarget && (!attr.firstHitOnly || firstHit) && (!attr.lastHitOnly || lastHit), user, target, this.move.getMove()).then(() => { /** - * If the move hit, and the target doesn't have Shield Dust, - * apply the chance to flinch the target gained from King's Rock - */ + * If the move hit, and the target doesn't have Shield Dust, + * apply the chance to flinch the target gained from King's Rock + */ if (dealsDamage && !target.hasAbilityWithAttr(IgnoreMoveEffectsAbAttr) && !move.hitsSubstitute(user, target)) { const flinched = new Utils.BooleanHolder(false); user.scene.applyModifiers(FlinchChanceModifier, user.isPlayer(), user, flinched); @@ -267,7 +264,7 @@ export class MoveEffectPhase extends PokemonPhase { } } // If the move was not protected against, apply all HIT effects - Utils.executeIf(!isProtected && !chargeEffect, () => applyFilteredMoveAttrs((attr: MoveAttr) => attr instanceof MoveEffectAttr && (attr as MoveEffectAttr).trigger === MoveEffectTrigger.HIT + Utils.executeIf(!isProtected, () => applyFilteredMoveAttrs((attr: MoveAttr) => attr instanceof MoveEffectAttr && (attr as MoveEffectAttr).trigger === MoveEffectTrigger.HIT && (!attr.firstHitOnly || firstHit) && (!attr.lastHitOnly || lastHit) && (!attr.firstTargetOnly || firstTarget), user, target, this.move.getMove()).then(() => { // Apply the target's post-defend ability effects (as long as the target is active or can otherwise apply them) return Utils.executeIf(!target.isFainted() || target.canApplyAbility(), () => applyPostDefendAbAttrs(PostDefendAbAttr, target, user, this.move.getMove(), hitResult).then(() => { @@ -286,9 +283,9 @@ export class MoveEffectPhase extends PokemonPhase { // Apply the user's post-attack ability effects applyPostAttackAbAttrs(PostAttackAbAttr, user, target, this.move.getMove(), hitResult).then(() => { /** - * If the invoked move is an attack, apply the user's chance to - * steal an item from the target granted by Grip Claw - */ + * If the invoked move is an attack, apply the user's chance to + * steal an item from the target granted by Grip Claw + */ if (this.move.getMove() instanceof AttackMove) { this.scene.applyModifiers(ContactHeldItemTransferChanceModifier, this.player, user, target); } @@ -343,12 +340,12 @@ export class MoveEffectPhase extends PokemonPhase { end() { const user = this.getUserPokemon(); /** - * If this phase isn't for the invoked move's last strike, - * unshift another MoveEffectPhase for the next strike. - * Otherwise, queue a message indicating the number of times the move has struck - * (if the move has struck more than once), then apply the heal from Shell Bell - * to the user. - */ + * If this phase isn't for the invoked move's last strike, + * unshift another MoveEffectPhase for the next strike. + * Otherwise, queue a message indicating the number of times the move has struck + * (if the move has struck more than once), then apply the heal from Shell Bell + * to the user. + */ if (user) { if (user.turnData.hitsLeft && --user.turnData.hitsLeft >= 1 && this.getTarget()?.isActive()) { this.scene.unshiftPhase(this.getNewHitPhase()); @@ -447,9 +444,9 @@ export class MoveEffectPhase extends PokemonPhase { } /** - * Removes the given {@linkcode Pokemon} from this phase's target list - * @param target {@linkcode Pokemon} the Pokemon to be removed - */ + * Removes the given {@linkcode Pokemon} from this phase's target list + * @param target {@linkcode Pokemon} the Pokemon to be removed + */ removeTarget(target: Pokemon): void { const targetIndex = this.targets.findIndex(ind => ind === target.getBattlerIndex()); if (targetIndex !== -1) { @@ -458,19 +455,19 @@ export class MoveEffectPhase extends PokemonPhase { } /** - * Prevents subsequent strikes of this phase's invoked move from occurring - * @param target {@linkcode Pokemon} if defined, only stop subsequent - * strikes against this Pokemon - */ + * Prevents subsequent strikes of this phase's invoked move from occurring + * @param target {@linkcode Pokemon} if defined, only stop subsequent + * strikes against this Pokemon + */ stopMultiHit(target?: Pokemon): void { /** If given a specific target, remove the target from subsequent strikes */ if (target) { this.removeTarget(target); } /** - * If no target specified, or the specified target was the last of this move's - * targets, completely cancel all subsequent strikes. - */ + * If no target specified, or the specified target was the last of this move's + * targets, completely cancel all subsequent strikes. + */ if (!target || this.targets.length === 0 ) { this.getUserPokemon()!.turnData.hitCount = 1; // TODO: is the bang correct here? this.getUserPokemon()!.turnData.hitsLeft = 1; // TODO: is the bang correct here? diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index 66dbd06f5be..a516fd8593d 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -3,13 +3,13 @@ import BattleScene from "#app/battle-scene"; import { applyAbAttrs, applyPostMoveUsedAbAttrs, applyPreAttackAbAttrs, BlockRedirectAbAttr, IncreasePpAbAttr, PokemonTypeChangeAbAttr, PostMoveUsedAbAttr, RedirectMoveAbAttr, ReduceStatusEffectDurationAbAttr } from "#app/data/ability"; import { CommonAnim } from "#app/data/battle-anims"; import { BattlerTagLapseType, CenterOfAttentionTag } from "#app/data/battler-tags"; -import { allMoves, applyMoveAttrs, BypassRedirectAttr, BypassSleepAttr, ChargeAttr, CopyMoveAttr, HealStatusEffectAttr, MoveFlags, PreMoveMessageAttr } from "#app/data/move"; +import { allMoves, applyMoveAttrs, BypassRedirectAttr, BypassSleepAttr, CopyMoveAttr, HealStatusEffectAttr, MoveFlags, PreMoveMessageAttr } from "#app/data/move"; import { SpeciesFormChangePreMoveTrigger } from "#app/data/pokemon-forms"; import { getStatusEffectActivationText, getStatusEffectHealText } from "#app/data/status-effect"; import { Type } from "#app/data/type"; import { getTerrainBlockMessage } from "#app/data/weather"; import { MoveUsedEvent } from "#app/events/battle-scene"; -import Pokemon, { MoveResult, PokemonMove, TurnMove } from "#app/field/pokemon"; +import Pokemon, { MoveResult, PokemonMove } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import Overrides from "#app/overrides"; import { BattlePhase } from "#app/phases/battle-phase"; @@ -23,6 +23,7 @@ import { BattlerTagType } from "#enums/battler-tag-type"; import { Moves } from "#enums/moves"; import { StatusEffect } from "#enums/status-effect"; import i18next from "i18next"; +import { MoveChargePhase } from "#app/phases/move-charge-phase"; export class MovePhase extends BattlePhase { protected _pokemon: Pokemon; @@ -135,6 +136,8 @@ export class MovePhase extends BattlePhase { if (this.cancelled || this.failed) { this.handlePreMoveFailures(); + } else if (this.move.getMove().isChargingMove() && !this.pokemon.getTag(BattlerTagType.CHARGING)) { + this.chargeMove(); } else { this.useMove(); } @@ -226,12 +229,15 @@ export class MovePhase extends BattlePhase { this.showMoveText(); - // TODO: Clean up implementation of two-turn moves. if (moveQueue.length > 0) { // Using .shift here clears out two turn moves once they've been used this.ignorePp = moveQueue.shift()?.ignorePP ?? false; } + if (this.pokemon.getTag(BattlerTagType.CHARGING)?.sourceMove === this.move.moveId) { + this.pokemon.lapseTag(BattlerTagType.CHARGING); + } + // "commit" to using the move, deducting PP. if (!this.ignorePp) { const ppUsed = 1 + this.getPpIncreaseFromPressure(targets); @@ -295,6 +301,9 @@ export class MovePhase extends BattlePhase { } this.showFailedText(failedText); + + // Remove the user from its semi-invulnerable state (if applicable) + this.pokemon.lapseTags(BattlerTagLapseType.MOVE_EFFECT); } // Handle Dancer, which triggers immediately after a move is used (rather than waiting on `this.end()`). @@ -306,6 +315,35 @@ export class MovePhase extends BattlePhase { } } + /** Queues a {@linkcode MoveChargePhase} for this phase's invoked move. */ + protected chargeMove() { + const move = this.move.getMove(); + const targets = this.getActiveTargetPokemon(); + + if (move.applyConditions(this.pokemon, targets[0], move)) { + // Protean and Libero apply on the charging turn of charge moves + applyPreAttackAbAttrs(PokemonTypeChangeAbAttr, this.pokemon, null, this.move.getMove()); + + this.showMoveText(); + this.scene.unshiftPhase(new MoveChargePhase(this.scene, this.pokemon.getBattlerIndex(), this.targets[0], this.move)); + } else { + this.pokemon.pushMoveHistory({ move: this.move.moveId, targets: this.targets, result: MoveResult.FAIL, virtual: this.move.virtual }); + + let failedText: string | undefined; + const failureMessage = move.getFailedText(this.pokemon, targets[0], move, new BooleanHolder(false)); + + if (failureMessage) { + failedText = failureMessage; + } + + this.showMoveText(); + this.showFailedText(failedText); + + // Remove the user from its semi-invulnerable state (if applicable) + this.pokemon.lapseTags(BattlerTagLapseType.MOVE_EFFECT); + } + } + /** * Queues a {@linkcode MoveEndPhase} if the move wasn't a {@linkcode followUp} and {@linkcode canMove()} returns `true`, * then ends the phase. @@ -419,8 +457,6 @@ export class MovePhase extends BattlePhase { * - Lapses `AFTER_MOVE` tags: * - This handles the effects of {@link Moves.SUBSTITUTE Substitute} * - Removes the second turn of charge moves - * - * TODO: handle charge moves more gracefully */ protected handlePreMoveFailures(): void { if (this.cancelled || this.failed) { @@ -452,18 +488,7 @@ export class MovePhase extends BattlePhase { return; } - if (this.move.getMove().hasAttr(ChargeAttr)) { - const lastMove = this.pokemon.getLastXMoves() as TurnMove[]; - if (!lastMove.length || lastMove[0].move !== this.move.getMove().id || lastMove[0].result !== MoveResult.OTHER) { - this.scene.queueMessage(i18next.t("battle:useMove", { - pokemonNameWithAffix: getPokemonNameWithAffix(this.pokemon), - moveName: this.move.getName() - }), 500); - return; - } - } - - if (this.pokemon.getTag(BattlerTagType.RECHARGING || BattlerTagType.INTERRUPTED)) { + if (this.pokemon.getTag(BattlerTagType.RECHARGING) || this.pokemon.getTag(BattlerTagType.INTERRUPTED)) { return; } diff --git a/src/test/abilities/volt_absorb.test.ts b/src/test/abilities/volt_absorb.test.ts index ec82b00ec5a..4fee7653b99 100644 --- a/src/test/abilities/volt_absorb.test.ts +++ b/src/test/abilities/volt_absorb.test.ts @@ -52,6 +52,7 @@ describe("Abilities - Volt Absorb", () => { expect(playerPokemon.getTag(BattlerTagType.CHARGED)).toBeDefined(); expect(game.phaseInterceptor.log).not.toContain("ShowAbilityPhase"); }); + it("should activate regardless of accuracy checks", async () => { game.override.moveset(Moves.THUNDERBOLT); game.override.enemyMoveset(Moves.SPLASH); @@ -71,6 +72,7 @@ describe("Abilities - Volt Absorb", () => { await game.phaseInterceptor.to("BerryPhase", false); expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); }); + it("regardless of accuracy should not trigger on pokemon in semi invulnerable state", async () => { game.override.moveset(Moves.THUNDERBOLT); game.override.enemyMoveset(Moves.DIVE); @@ -84,9 +86,7 @@ describe("Abilities - Volt Absorb", () => { game.move.select(Moves.THUNDERBOLT); enemyPokemon.hp = enemyPokemon.hp - 1; await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); - await game.phaseInterceptor.to("MoveEffectPhase"); - await game.move.forceMiss(); await game.phaseInterceptor.to("BerryPhase", false); expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp()); }); diff --git a/src/test/arena/arena_gravity.test.ts b/src/test/arena/arena_gravity.test.ts index b6982896571..13e9c23a35c 100644 --- a/src/test/arena/arena_gravity.test.ts +++ b/src/test/arena/arena_gravity.test.ts @@ -1,8 +1,8 @@ +import { BattlerIndex } from "#app/battle"; import { allMoves } from "#app/data/move"; -import { Abilities } from "#app/enums/abilities"; -import { ArenaTagType } from "#app/enums/arena-tag-type"; -import { MoveEffectPhase } from "#app/phases/move-effect-phase"; -import { TurnEndPhase } from "#app/phases/turn-end-phase"; +import { Abilities } from "#enums/abilities"; +import { ArenaTagType } from "#enums/arena-tag-type"; +import { BattlerTagType } from "#enums/battler-tag-type"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/utils/gameManager"; @@ -31,7 +31,8 @@ describe("Arena - Gravity", () => { .ability(Abilities.UNNERVE) .enemyAbility(Abilities.BALL_FETCH) .enemySpecies(Species.SHUCKLE) - .enemyMoveset(Moves.SPLASH); + .enemyMoveset(Moves.SPLASH) + .enemyLevel(5); }); // Reference: https://bulbapedia.bulbagarden.net/wiki/Gravity_(move) @@ -42,102 +43,121 @@ describe("Arena - Gravity", () => { vi.spyOn(moveToCheck, "calculateBattleAccuracy"); // Setup Gravity on first turn - await game.startBattle([ Species.PIKACHU ]); + await game.classicMode.startBattle([ Species.PIKACHU ]); game.move.select(Moves.GRAVITY); - await game.phaseInterceptor.to(TurnEndPhase); + await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.arena.getTag(ArenaTagType.GRAVITY)).toBeDefined(); // Use non-OHKO move on second turn await game.toNextTurn(); game.move.select(Moves.TACKLE); - await game.phaseInterceptor.to(MoveEffectPhase); + await game.phaseInterceptor.to("MoveEffectPhase"); - expect(moveToCheck.calculateBattleAccuracy).toHaveReturnedWith(100 * 1.67); + expect(moveToCheck.calculateBattleAccuracy).toHaveLastReturnedWith(100 * 1.67); }); it("OHKO move accuracy is not affected", async () => { - game.override.startingLevel(5); - game.override.enemyLevel(5); - /** See Fissure {@link https://bulbapedia.bulbagarden.net/wiki/Fissure_(move)} */ const moveToCheck = allMoves[Moves.FISSURE]; vi.spyOn(moveToCheck, "calculateBattleAccuracy"); // Setup Gravity on first turn - await game.startBattle([ Species.PIKACHU ]); + await game.classicMode.startBattle([ Species.PIKACHU ]); game.move.select(Moves.GRAVITY); - await game.phaseInterceptor.to(TurnEndPhase); + await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.arena.getTag(ArenaTagType.GRAVITY)).toBeDefined(); // Use OHKO move on second turn await game.toNextTurn(); game.move.select(Moves.FISSURE); - await game.phaseInterceptor.to(MoveEffectPhase); + await game.phaseInterceptor.to("MoveEffectPhase"); - expect(moveToCheck.calculateBattleAccuracy).toHaveReturnedWith(30); + expect(moveToCheck.calculateBattleAccuracy).toHaveLastReturnedWith(30); }); describe("Against flying types", () => { it("can be hit by ground-type moves now", async () => { game.override - .startingLevel(5) - .enemyLevel(5) .enemySpecies(Species.PIDGEOT) .moveset([ Moves.GRAVITY, Moves.EARTHQUAKE ]); - await game.startBattle([ Species.PIKACHU ]); + await game.classicMode.startBattle([ Species.PIKACHU ]); const pidgeot = game.scene.getEnemyPokemon()!; vi.spyOn(pidgeot, "getAttackTypeEffectiveness"); // Try earthquake on 1st turn (fails!); game.move.select(Moves.EARTHQUAKE); - await game.phaseInterceptor.to(TurnEndPhase); + await game.phaseInterceptor.to("TurnEndPhase"); - expect(pidgeot.getAttackTypeEffectiveness).toHaveReturnedWith(0); + expect(pidgeot.getAttackTypeEffectiveness).toHaveLastReturnedWith(0); // Setup Gravity on 2nd turn await game.toNextTurn(); game.move.select(Moves.GRAVITY); - await game.phaseInterceptor.to(TurnEndPhase); + await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.arena.getTag(ArenaTagType.GRAVITY)).toBeDefined(); // Use ground move on 3rd turn await game.toNextTurn(); game.move.select(Moves.EARTHQUAKE); - await game.phaseInterceptor.to(TurnEndPhase); + await game.phaseInterceptor.to("TurnEndPhase"); - expect(pidgeot.getAttackTypeEffectiveness).toHaveReturnedWith(1); + expect(pidgeot.getAttackTypeEffectiveness).toHaveLastReturnedWith(1); }); it("keeps super-effective moves super-effective after using gravity", async () => { game.override - .startingLevel(5) - .enemyLevel(5) .enemySpecies(Species.PIDGEOT) .moveset([ Moves.GRAVITY, Moves.THUNDERBOLT ]); - await game.startBattle([ Species.PIKACHU ]); + await game.classicMode.startBattle([ Species.PIKACHU ]); const pidgeot = game.scene.getEnemyPokemon()!; vi.spyOn(pidgeot, "getAttackTypeEffectiveness"); // Setup Gravity on 1st turn game.move.select(Moves.GRAVITY); - await game.phaseInterceptor.to(TurnEndPhase); + await game.phaseInterceptor.to("TurnEndPhase"); expect(game.scene.arena.getTag(ArenaTagType.GRAVITY)).toBeDefined(); // Use electric move on 2nd turn await game.toNextTurn(); game.move.select(Moves.THUNDERBOLT); - await game.phaseInterceptor.to(TurnEndPhase); + await game.phaseInterceptor.to("TurnEndPhase"); - expect(pidgeot.getAttackTypeEffectiveness).toHaveReturnedWith(2); + expect(pidgeot.getAttackTypeEffectiveness).toHaveLastReturnedWith(2); }); }); + + it("cancels Fly if its user is semi-invulnerable", async () => { + game.override + .enemySpecies(Species.SNORLAX) + .enemyMoveset(Moves.FLY) + .moveset([ Moves.GRAVITY, Moves.SPLASH ]); + + await game.classicMode.startBattle([ Species.CHARIZARD ]); + + const charizard = game.scene.getPlayerPokemon()!; + const snorlax = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.SPLASH); + + await game.toNextTurn(); + expect(snorlax.getTag(BattlerTagType.FLYING)).toBeDefined(); + + game.move.select(Moves.GRAVITY); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + + await game.phaseInterceptor.to("MoveEffectPhase"); + expect(snorlax.getTag(BattlerTagType.INTERRUPTED)).toBeDefined(); + + await game.phaseInterceptor.to("TurnEndPhase"); + expect(charizard.hp).toBe(charizard.getMaxHp()); + }); }); diff --git a/src/test/moves/dig.test.ts b/src/test/moves/dig.test.ts new file mode 100644 index 00000000000..4c6b5d3b75d --- /dev/null +++ b/src/test/moves/dig.test.ts @@ -0,0 +1,114 @@ +import { BattlerIndex } from "#app/battle"; +import { allMoves } from "#app/data/move"; +import { Abilities } from "#enums/abilities"; +import { BattlerTagType } from "#enums/battler-tag-type"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { StatusEffect } from "#enums/status-effect"; +import { MoveResult } from "#app/field/pokemon"; +import { describe, beforeAll, afterEach, beforeEach, it, expect } from "vitest"; +import GameManager from "#test/utils/gameManager"; + +describe("Moves - Dig", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset(Moves.DIG) + .battleType("single") + .startingLevel(100) + .enemySpecies(Species.SNORLAX) + .enemyLevel(100) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.TACKLE); + }); + + it("should make the user semi-invulnerable, then attack over 2 turns", async () => { + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.DIG); + + await game.phaseInterceptor.to("TurnEndPhase"); + expect(playerPokemon.getTag(BattlerTagType.UNDERGROUND)).toBeDefined(); + expect(enemyPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.MISS); + expect(playerPokemon.hp).toBe(playerPokemon.getMaxHp()); + expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); + expect(playerPokemon.getMoveQueue()[0].move).toBe(Moves.DIG); + + await game.phaseInterceptor.to("TurnEndPhase"); + expect(playerPokemon.getTag(BattlerTagType.UNDERGROUND)).toBeUndefined(); + expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp()); + expect(playerPokemon.getMoveHistory()).toHaveLength(2); + + const playerDig = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.DIG); + expect(playerDig?.ppUsed).toBe(1); + }); + + it("should not allow the user to evade attacks from Pokemon with No Guard", async () => { + game.override.enemyAbility(Abilities.NO_GUARD); + + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.DIG); + + await game.phaseInterceptor.to("TurnEndPhase"); + expect(playerPokemon.hp).toBeLessThan(playerPokemon.getMaxHp()); + expect(enemyPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); + }); + + it("should not expend PP when the attack phase is cancelled", async () => { + game.override + .enemyAbility(Abilities.NO_GUARD) + .enemyMoveset(Moves.SPORE); + + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + + game.move.select(Moves.DIG); + + await game.phaseInterceptor.to("TurnEndPhase"); + expect(playerPokemon.getTag(BattlerTagType.UNDERGROUND)).toBeUndefined(); + expect(playerPokemon.status?.effect).toBe(StatusEffect.SLEEP); + + const playerDig = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.DIG); + expect(playerDig?.ppUsed).toBe(0); + }); + + it("should cause the user to take double damage from Earthquake", async () => { + await game.classicMode.startBattle([ Species.DONDOZO ]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; + + const preDigEarthquakeDmg = playerPokemon.getAttackDamage(enemyPokemon, allMoves[Moves.EARTHQUAKE]).damage; + + game.move.select(Moves.DIG); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + + await game.phaseInterceptor.to("MoveEffectPhase"); + + const postDigEarthquakeDmg = playerPokemon.getAttackDamage(enemyPokemon, allMoves[Moves.EARTHQUAKE]).damage; + // these hopefully get avoid rounding errors :shrug: + expect(postDigEarthquakeDmg).toBeGreaterThanOrEqual(2 * preDigEarthquakeDmg); + expect(postDigEarthquakeDmg).toBeLessThan(2 * (preDigEarthquakeDmg + 1)); + }); +}); diff --git a/src/test/moves/dive.test.ts b/src/test/moves/dive.test.ts new file mode 100644 index 00000000000..b60416d7740 --- /dev/null +++ b/src/test/moves/dive.test.ts @@ -0,0 +1,137 @@ +import { BattlerTagType } from "#enums/battler-tag-type"; +import { StatusEffect } from "#enums/status-effect"; +import { MoveResult } from "#app/field/pokemon"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; +import { WeatherType } from "#enums/weather-type"; + +describe("Moves - Dive", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset(Moves.DIVE) + .battleType("single") + .startingLevel(100) + .enemySpecies(Species.SNORLAX) + .enemyLevel(100) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.TACKLE); + }); + + it("should make the user semi-invulnerable, then attack over 2 turns", async () => { + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.DIVE); + + await game.phaseInterceptor.to("TurnEndPhase"); + expect(playerPokemon.getTag(BattlerTagType.UNDERWATER)).toBeDefined(); + expect(enemyPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.MISS); + expect(playerPokemon.hp).toBe(playerPokemon.getMaxHp()); + expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); + expect(playerPokemon.getMoveQueue()[0].move).toBe(Moves.DIVE); + + await game.phaseInterceptor.to("TurnEndPhase"); + expect(playerPokemon.getTag(BattlerTagType.UNDERWATER)).toBeUndefined(); + expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp()); + expect(playerPokemon.getMoveHistory()).toHaveLength(2); + + const playerDive = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.DIVE); + expect(playerDive?.ppUsed).toBe(1); + }); + + it("should not allow the user to evade attacks from Pokemon with No Guard", async () => { + game.override.enemyAbility(Abilities.NO_GUARD); + + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.DIVE); + + await game.phaseInterceptor.to("TurnEndPhase"); + expect(playerPokemon.hp).toBeLessThan(playerPokemon.getMaxHp()); + expect(enemyPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); + }); + + it("should not expend PP when the attack phase is cancelled", async () => { + game.override + .enemyAbility(Abilities.NO_GUARD) + .enemyMoveset(Moves.SPORE); + + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + + game.move.select(Moves.DIVE); + + await game.phaseInterceptor.to("TurnEndPhase"); + expect(playerPokemon.getTag(BattlerTagType.UNDERWATER)).toBeUndefined(); + expect(playerPokemon.status?.effect).toBe(StatusEffect.SLEEP); + + const playerDive = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.DIVE); + expect(playerDive?.ppUsed).toBe(0); + }); + + it("should trigger on-contact post-defend ability effects", async () => { + game.override + .enemyAbility(Abilities.ROUGH_SKIN) + .enemyMoveset(Moves.SPLASH); + + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.DIVE); + + await game.phaseInterceptor.to("TurnEndPhase"); + + await game.phaseInterceptor.to("MoveEndPhase"); + expect(playerPokemon.hp).toBeLessThan(playerPokemon.getMaxHp()); + expect(enemyPokemon.battleData.abilitiesApplied[0]).toBe(Abilities.ROUGH_SKIN); + }); + + it("should cancel attack after Harsh Sunlight is set", async () => { + game.override.enemyMoveset(Moves.SPLASH); + + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.DIVE); + + await game.phaseInterceptor.to("TurnEndPhase"); + await game.phaseInterceptor.to("TurnStartPhase", false); + game.scene.arena.trySetWeather(WeatherType.HARSH_SUN, false); + + await game.phaseInterceptor.to("MoveEndPhase"); + expect(playerPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.FAIL); + expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); + expect(playerPokemon.getTag(BattlerTagType.UNDERWATER)).toBeUndefined(); + + const playerDive = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.DIVE); + expect(playerDive?.ppUsed).toBe(1); + }); +}); diff --git a/src/test/moves/electro_shot.test.ts b/src/test/moves/electro_shot.test.ts new file mode 100644 index 00000000000..1373b4941eb --- /dev/null +++ b/src/test/moves/electro_shot.test.ts @@ -0,0 +1,104 @@ +import { BattlerTagType } from "#enums/battler-tag-type"; +import { Stat } from "#enums/stat"; +import { WeatherType } from "#enums/weather-type"; +import { MoveResult } from "#app/field/pokemon"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; + +describe("Moves - Electro Shot", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset(Moves.ELECTRO_SHOT) + .battleType("single") + .startingLevel(100) + .enemySpecies(Species.SNORLAX) + .enemyLevel(100) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should increase the user's Sp. Atk on the first turn, then attack on the second turn", async () => { + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.ELECTRO_SHOT); + + await game.phaseInterceptor.to("TurnEndPhase"); + expect(playerPokemon.getTag(BattlerTagType.CHARGING)).toBeDefined(); + expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); + expect(playerPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.OTHER); + expect(playerPokemon.getStatStage(Stat.SPATK)).toBe(1); + + await game.phaseInterceptor.to("TurnEndPhase"); + expect(playerPokemon.getTag(BattlerTagType.CHARGING)).toBeUndefined(); + expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp()); + expect(playerPokemon.getMoveHistory()).toHaveLength(2); + expect(playerPokemon.getStatStage(Stat.SPATK)).toBe(1); + expect(playerPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); + + const playerElectroShot = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.ELECTRO_SHOT); + expect(playerElectroShot?.ppUsed).toBe(1); + }); + + it.each([ + { weatherType: WeatherType.RAIN, name: "Rain" }, + { weatherType: WeatherType.HEAVY_RAIN, name: "Heavy Rain" } + ])("should fully resolve in one turn if $name is active", async ({ weatherType }) => { + game.override.weather(weatherType); + + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.ELECTRO_SHOT); + + await game.phaseInterceptor.to("MoveEffectPhase", false); + expect(playerPokemon.getStatStage(Stat.SPATK)).toBe(1); + + await game.phaseInterceptor.to("MoveEndPhase"); + expect(playerPokemon.getTag(BattlerTagType.CHARGING)).toBeUndefined(); + expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp()); + expect(playerPokemon.getMoveHistory()).toHaveLength(2); + expect(playerPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); + + const playerElectroShot = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.ELECTRO_SHOT); + expect(playerElectroShot?.ppUsed).toBe(1); + }); + + it("should only increase Sp. Atk once with Multi-Lens", async () => { + game.override + .weather(WeatherType.RAIN) + .startingHeldItems([{ name: "MULTI_LENS", count: 1 }]); + + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + + game.move.select(Moves.ELECTRO_SHOT); + + await game.phaseInterceptor.to("MoveEndPhase"); + expect(playerPokemon.turnData.hitCount).toBe(2); + expect(playerPokemon.getStatStage(Stat.SPATK)).toBe(1); + }); +}); diff --git a/src/test/moves/fly.test.ts b/src/test/moves/fly.test.ts new file mode 100644 index 00000000000..6ae758fe3dc --- /dev/null +++ b/src/test/moves/fly.test.ts @@ -0,0 +1,122 @@ +import { BattlerTagType } from "#enums/battler-tag-type"; +import { StatusEffect } from "#enums/status-effect"; +import { MoveResult } from "#app/field/pokemon"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; +import { BattlerIndex } from "#app/battle"; +import { allMoves } from "#app/data/move"; + +describe("Moves - Fly", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset(Moves.FLY) + .battleType("single") + .startingLevel(100) + .enemySpecies(Species.SNORLAX) + .enemyLevel(100) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.TACKLE); + + vi.spyOn(allMoves[Moves.FLY], "accuracy", "get").mockReturnValue(100); + }); + + it("should make the user semi-invulnerable, then attack over 2 turns", async () => { + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.FLY); + + await game.phaseInterceptor.to("TurnEndPhase"); + expect(playerPokemon.getTag(BattlerTagType.FLYING)).toBeDefined(); + expect(enemyPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.MISS); + expect(playerPokemon.hp).toBe(playerPokemon.getMaxHp()); + expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); + expect(playerPokemon.getMoveQueue()[0].move).toBe(Moves.FLY); + + await game.phaseInterceptor.to("TurnEndPhase"); + expect(playerPokemon.getTag(BattlerTagType.FLYING)).toBeUndefined(); + expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp()); + expect(playerPokemon.getMoveHistory()).toHaveLength(2); + + const playerFly = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.FLY); + expect(playerFly?.ppUsed).toBe(1); + }); + + it("should not allow the user to evade attacks from Pokemon with No Guard", async () => { + game.override.enemyAbility(Abilities.NO_GUARD); + + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.FLY); + + await game.phaseInterceptor.to("TurnEndPhase"); + expect(playerPokemon.hp).toBeLessThan(playerPokemon.getMaxHp()); + expect(enemyPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); + }); + + it("should not expend PP when the attack phase is cancelled", async () => { + game.override + .enemyAbility(Abilities.NO_GUARD) + .enemyMoveset(Moves.SPORE); + + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + + game.move.select(Moves.FLY); + + await game.phaseInterceptor.to("TurnEndPhase"); + expect(playerPokemon.getTag(BattlerTagType.FLYING)).toBeUndefined(); + expect(playerPokemon.status?.effect).toBe(StatusEffect.SLEEP); + + const playerFly = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.FLY); + expect(playerFly?.ppUsed).toBe(0); + }); + + it("should be cancelled when another Pokemon uses Gravity", async () => { + game.override.enemyMoveset([ Moves.SPLASH, Moves.GRAVITY ]); + + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.FLY); + + await game.forceEnemyMove(Moves.SPLASH); + + await game.toNextTurn(); + await game.forceEnemyMove(Moves.GRAVITY); + await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); + + await game.phaseInterceptor.to("TurnEndPhase"); + expect(playerPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.FAIL); + expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); + + const playerFly = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.FLY); + expect(playerFly?.ppUsed).toBe(0); + }); +}); diff --git a/src/test/moves/geomancy.test.ts b/src/test/moves/geomancy.test.ts new file mode 100644 index 00000000000..6e2f40b9144 --- /dev/null +++ b/src/test/moves/geomancy.test.ts @@ -0,0 +1,78 @@ +import { EffectiveStat, Stat } from "#enums/stat"; +import { MoveResult } from "#app/field/pokemon"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; + +describe("Moves - Geomancy", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset(Moves.GEOMANCY) + .battleType("single") + .startingLevel(100) + .enemySpecies(Species.SNORLAX) + .enemyLevel(100) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should boost the user's stats on the second turn of use", async () => { + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const player = game.scene.getPlayerPokemon()!; + const affectedStats: EffectiveStat[] = [ Stat.SPATK, Stat.SPDEF, Stat.SPD ]; + + game.move.select(Moves.GEOMANCY); + + await game.phaseInterceptor.to("TurnEndPhase"); + affectedStats.forEach((stat) => expect(player.getStatStage(stat)).toBe(0)); + expect(player.getLastXMoves(1)[0].result).toBe(MoveResult.OTHER); + + await game.phaseInterceptor.to("TurnEndPhase"); + affectedStats.forEach((stat) => expect(player.getStatStage(stat)).toBe(2)); + expect(player.getMoveHistory()).toHaveLength(2); + expect(player.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); + + const playerGeomancy = player.getMoveset().find((mv) => mv && mv.moveId === Moves.GEOMANCY); + expect(playerGeomancy?.ppUsed).toBe(1); + }); + + it("should execute over 2 turns between waves", async () => { + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const player = game.scene.getPlayerPokemon()!; + const affectedStats: EffectiveStat[] = [ Stat.SPATK, Stat.SPDEF, Stat.SPD ]; + + game.move.select(Moves.GEOMANCY); + + await game.phaseInterceptor.to("MoveEndPhase", false); + await game.doKillOpponents(); + + await game.toNextWave(); + + await game.phaseInterceptor.to("TurnEndPhase"); + affectedStats.forEach((stat) => expect(player.getStatStage(stat)).toBe(2)); + expect(player.getMoveHistory()).toHaveLength(2); + expect(player.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); + + const playerGeomancy = player.getMoveset().find((mv) => mv && mv.moveId === Moves.GEOMANCY); + expect(playerGeomancy?.ppUsed).toBe(1); + }); +}); diff --git a/src/test/moves/solar_beam.test.ts b/src/test/moves/solar_beam.test.ts new file mode 100644 index 00000000000..ebec338932a --- /dev/null +++ b/src/test/moves/solar_beam.test.ts @@ -0,0 +1,102 @@ +import { allMoves } from "#app/data/move"; +import { BattlerTagType } from "#enums/battler-tag-type"; +import { WeatherType } from "#enums/weather-type"; +import { MoveResult } from "#app/field/pokemon"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; + +describe("Moves - Solar Beam", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset(Moves.SOLAR_BEAM) + .battleType("single") + .startingLevel(100) + .enemySpecies(Species.SNORLAX) + .enemyLevel(100) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should deal damage in two turns if no weather is active", async () => { + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.SOLAR_BEAM); + + await game.phaseInterceptor.to("TurnEndPhase"); + expect(playerPokemon.getTag(BattlerTagType.CHARGING)).toBeDefined(); + expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); + expect(playerPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.OTHER); + + await game.phaseInterceptor.to("TurnEndPhase"); + expect(playerPokemon.getTag(BattlerTagType.CHARGING)).toBeUndefined(); + expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp()); + expect(playerPokemon.getMoveHistory()).toHaveLength(2); + expect(playerPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); + + const playerSolarBeam = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.SOLAR_BEAM); + expect(playerSolarBeam?.ppUsed).toBe(1); + }); + + it.each([ + { weatherType: WeatherType.SUNNY, name: "Sun" }, + { weatherType: WeatherType.HARSH_SUN, name: "Harsh Sun" } + ])("should deal damage in one turn if $name is active", async ({ weatherType }) => { + game.override.weather(weatherType); + + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const playerPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.SOLAR_BEAM); + + await game.phaseInterceptor.to("TurnEndPhase"); + expect(playerPokemon.getTag(BattlerTagType.CHARGING)).toBeUndefined(); + expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp()); + expect(playerPokemon.getMoveHistory()).toHaveLength(2); + expect(playerPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS); + + const playerSolarBeam = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.SOLAR_BEAM); + expect(playerSolarBeam?.ppUsed).toBe(1); + }); + + it.each([ + { weatherType: WeatherType.RAIN, name: "Rain" }, + { weatherType: WeatherType.HEAVY_RAIN, name: "Heavy Rain" } + ])("should have its power halved in $name", async ({ weatherType }) => { + game.override.weather(weatherType); + + await game.classicMode.startBattle([ Species.MAGIKARP ]); + + const solarBeam = allMoves[Moves.SOLAR_BEAM]; + + vi.spyOn(solarBeam, "calculateBattlePower"); + + game.move.select(Moves.SOLAR_BEAM); + + await game.phaseInterceptor.to("TurnEndPhase"); + await game.phaseInterceptor.to("TurnEndPhase"); + expect(solarBeam.calculateBattlePower).toHaveLastReturnedWith(60); + }); +}); diff --git a/src/test/moves/whirlwind.test.ts b/src/test/moves/whirlwind.test.ts index cc31b2591a2..c16f38111f2 100644 --- a/src/test/moves/whirlwind.test.ts +++ b/src/test/moves/whirlwind.test.ts @@ -41,7 +41,8 @@ describe("Moves - Whirlwind", () => { const staraptor = game.scene.getPlayerPokemon()!; game.move.select(move); - await game.toNextTurn(); + + await game.phaseInterceptor.to("BerryPhase", false); expect(staraptor.findTag((t) => t.tagType === BattlerTagType.FLYING)).toBeDefined(); expect(game.scene.getEnemyPokemon()!.getLastXMoves(1)[0].result).toBe(MoveResult.MISS); From fd38ab4cb48cca69ac40bda26fdfe49fe334647c Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Wed, 23 Oct 2024 08:10:43 -0700 Subject: [PATCH 119/153] [P2] Missing Minior form (violet) now spawns in the wild (#4711) --- src/battle-scene.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index a21e1b09342..3cbf4d7b422 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -1387,7 +1387,7 @@ export default class BattleScene extends SceneBase { case Species.ZYGARDE: return Utils.randSeedInt(4); case Species.MINIOR: - return Utils.randSeedInt(6); + return Utils.randSeedInt(7); case Species.ALCREMIE: return Utils.randSeedInt(9); case Species.MEOWSTIC: From 958d79140c704e76b0d20165e1130e3bb6e5dff5 Mon Sep 17 00:00:00 2001 From: schmidtc1 <62030095+schmidtc1@users.noreply.github.com> Date: Wed, 23 Oct 2024 11:12:53 -0400 Subject: [PATCH 120/153] [P2] Fixes Transform/Imposter not updating type/battle stat changes immediately; set move PP to 5 when transforming (#3462) * Adds updateInfo to transform move/ability, mirrors Transform functionality in Imposter * Implements functionality for reducing pp to 5 or less for each move when transforming * Refactors to async/await pattern, adds back removed anims/sounds from last commit * Eslint fix attempt * Update src/data/ability.ts per DayKev's suggestion Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Merge and fix conflicts * Adds unit tests for pp-change with transform/imposter * Updates to consistency in syntax/deprecated code --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- public/locales | 2 +- src/data/ability.ts | 22 ++++++---- src/data/move.ts | 67 ++++++++++++++++------------- src/test/abilities/imposter.test.ts | 22 +++++++--- src/test/moves/transform.test.ts | 22 +++++++--- 5 files changed, 84 insertions(+), 51 deletions(-) diff --git a/public/locales b/public/locales index fc4a1effd51..3ccef8472dd 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit fc4a1effd5170def3c8314208a52cd0d8e6913ef +Subproject commit 3ccef8472dd7cc7c362538489954cb8fdad27e5f diff --git a/src/data/ability.ts b/src/data/ability.ts index cc95045f8b7..d761657f5cd 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -2422,11 +2422,12 @@ export class PostSummonTransformAbAttr extends PostSummonAbAttr { super(true); } - applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + async applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): Promise { const targets = pokemon.getOpponents(); if (simulated || !targets.length) { return simulated; } + const promises: Promise[] = []; let target: Pokemon; if (targets.length > 1) { @@ -2435,7 +2436,7 @@ export class PostSummonTransformAbAttr extends PostSummonAbAttr { target = targets[0]; } - target = target!; // compiler doesn't know its guranteed to be defined + target = target!; pokemon.summonData.speciesForm = target.getSpeciesForm(); pokemon.summonData.fusionSpeciesForm = target.getFusionSpeciesForm(); pokemon.summonData.ability = target.getAbility().id; @@ -2452,18 +2453,23 @@ export class PostSummonTransformAbAttr extends PostSummonAbAttr { pokemon.setStatStage(s, target.getStatStage(s)); } - pokemon.summonData.moveset = target.getMoveset().map(m => new PokemonMove(m?.moveId ?? Moves.NONE, m?.ppUsed, m?.ppUp)); + pokemon.summonData.moveset = target.getMoveset().map(m => { + const pp = m?.getMove().pp ?? 0; + // if PP value is less than 5, do nothing. If greater, we need to reduce the value to 5 using a negative ppUp value. + const ppUp = pp <= 5 ? 0 : (5 - pp) / Math.max(Math.floor(pp / 5), 1); + return new PokemonMove(m?.moveId ?? Moves.NONE, 0, ppUp); + }); pokemon.summonData.types = target.getTypes(); + promises.push(pokemon.updateInfo()); - + pokemon.scene.queueMessage(i18next.t("abilityTriggers:postSummonTransform", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), targetName: target!.name, })); pokemon.scene.playSound("battle_anims/PRSFX- Transform"); - - pokemon.loadAssets(false).then(() => { + promises.push(pokemon.loadAssets(false).then(() => { pokemon.playAnim(); pokemon.updateInfo(); - }); + })); - pokemon.scene.queueMessage(i18next.t("abilityTriggers:postSummonTransform", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), targetName: target.name, })); + await Promise.all(promises); return true; } diff --git a/src/data/move.ts b/src/data/move.ts index cf88fad0ac5..efdd4568927 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -6643,42 +6643,49 @@ export class SuppressAbilitiesIfActedAttr extends MoveEffectAttr { } export class TransformAttr extends MoveEffectAttr { - apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise { - return new Promise(resolve => { - if (!super.apply(user, target, move, args)) { - return resolve(false); - } + async apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise { + if (!super.apply(user, target, move, args)) { + return false; + } - user.summonData.speciesForm = target.getSpeciesForm(); - user.summonData.fusionSpeciesForm = target.getFusionSpeciesForm(); - user.summonData.ability = target.getAbility().id; - user.summonData.gender = target.getGender(); - user.summonData.fusionGender = target.getFusionGender(); + const promises: Promise[] = []; + user.summonData.speciesForm = target.getSpeciesForm(); + user.summonData.fusionSpeciesForm = target.getFusionSpeciesForm(); + user.summonData.ability = target.getAbility().id; + user.summonData.gender = target.getGender(); + user.summonData.fusionGender = target.getFusionGender(); - // Power Trick's effect will not preserved after using Transform - user.removeTag(BattlerTagType.POWER_TRICK); + // Power Trick's effect will not preserved after using Transform + user.removeTag(BattlerTagType.POWER_TRICK); - // Copy all stats (except HP) - for (const s of EFFECTIVE_STATS) { - user.setStat(s, target.getStat(s, false), false); - } + // Copy all stats (except HP) + for (const s of EFFECTIVE_STATS) { + user.setStat(s, target.getStat(s, false), false); + } - // Copy all stat stages - for (const s of BATTLE_STATS) { - user.setStatStage(s, target.getStatStage(s)); - } + // Copy all stat stages + for (const s of BATTLE_STATS) { + user.setStatStage(s, target.getStatStage(s)); + } - user.summonData.moveset = target.getMoveset().map(m => new PokemonMove(m?.moveId!, m?.ppUsed, m?.ppUp)); // TODO: is this bang correct? - user.summonData.types = target.getTypes(); - - user.scene.queueMessage(i18next.t("moveTriggers:transformedIntoTarget", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target) })); - - user.loadAssets(false).then(() => { - user.playAnim(); - user.updateInfo(); - resolve(true); - }); + user.summonData.moveset = target.getMoveset().map(m => { + const pp = m?.getMove().pp ?? 0; + // if PP value is less than 5, do nothing. If greater, we need to reduce the value to 5 using a negative ppUp value. + const ppUp = pp <= 5 ? 0 : (5 - pp) / Math.max(Math.floor(pp / 5), 1); + return new PokemonMove(m?.moveId!, 0, ppUp); }); + user.summonData.types = target.getTypes(); + promises.push(user.updateInfo()); + + user.scene.queueMessage(i18next.t("moveTriggers:transformedIntoTarget", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target) })); + + promises.push(user.loadAssets(false).then(() => { + user.playAnim(); + user.updateInfo(); + })); + + await Promise.all(promises); + return true; } } diff --git a/src/test/abilities/imposter.test.ts b/src/test/abilities/imposter.test.ts index b7b8e0c5cca..7aaac5ca8c4 100644 --- a/src/test/abilities/imposter.test.ts +++ b/src/test/abilities/imposter.test.ts @@ -36,9 +36,7 @@ describe("Abilities - Imposter", () => { }); it("should copy species, ability, gender, all stats except HP, all stat stages, moveset, and types of target", async () => { - await game.startBattle([ - Species.DITTO - ]); + await game.classicMode.startBattle([ Species.DITTO ]); game.move.select(Moves.SPLASH); await game.phaseInterceptor.to(TurnEndPhase); @@ -78,9 +76,7 @@ describe("Abilities - Imposter", () => { it("should copy in-battle overridden stats", async () => { game.override.enemyMoveset([ Moves.POWER_SPLIT ]); - await game.startBattle([ - Species.DITTO - ]); + await game.classicMode.startBattle([ Species.DITTO ]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; @@ -97,4 +93,18 @@ describe("Abilities - Imposter", () => { expect(player.getStat(Stat.SPATK, false)).toBe(avgSpAtk); expect(enemy.getStat(Stat.SPATK, false)).toBe(avgSpAtk); }); + + it("should set each move's pp to a maximum of 5", async () => { + game.override.enemyMoveset([ Moves.SWORDS_DANCE, Moves.GROWL, Moves.SKETCH, Moves.RECOVER ]); + + await game.classicMode.startBattle([ Species.DITTO ]); + const player = game.scene.getPlayerPokemon()!; + + game.move.select(Moves.TACKLE); + await game.phaseInterceptor.to(TurnEndPhase); + + player.getMoveset().forEach(move => { + expect(move!.getMovePp()).toBeLessThanOrEqual(5); + }); + }); }); diff --git a/src/test/moves/transform.test.ts b/src/test/moves/transform.test.ts index 079fdfa5685..8c0f5eda7b2 100644 --- a/src/test/moves/transform.test.ts +++ b/src/test/moves/transform.test.ts @@ -36,9 +36,7 @@ describe("Moves - Transform", () => { }); it("should copy species, ability, gender, all stats except HP, all stat stages, moveset, and types of target", async () => { - await game.startBattle([ - Species.DITTO - ]); + await game.classicMode.startBattle([ Species.DITTO ]); game.move.select(Moves.TRANSFORM); await game.phaseInterceptor.to(TurnEndPhase); @@ -78,9 +76,7 @@ describe("Moves - Transform", () => { it("should copy in-battle overridden stats", async () => { game.override.enemyMoveset([ Moves.POWER_SPLIT ]); - await game.startBattle([ - Species.DITTO - ]); + await game.classicMode.startBattle([ Species.DITTO ]); const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; @@ -97,4 +93,18 @@ describe("Moves - Transform", () => { expect(player.getStat(Stat.SPATK, false)).toBe(avgSpAtk); expect(enemy.getStat(Stat.SPATK, false)).toBe(avgSpAtk); }); + + it ("should set each move's pp to a maximum of 5", async () => { + game.override.enemyMoveset([ Moves.SWORDS_DANCE, Moves.GROWL, Moves.SKETCH, Moves.RECOVER ]); + + await game.classicMode.startBattle([ Species.DITTO ]); + const player = game.scene.getPlayerPokemon()!; + + game.move.select(Moves.TRANSFORM); + await game.phaseInterceptor.to(TurnEndPhase); + + player.getMoveset().forEach(move => { + expect(move!.getMovePp()).toBeLessThanOrEqual(5); + }); + }); }); From c7e9eaf43510919e97051e9bcd6dfde97dde0b20 Mon Sep 17 00:00:00 2001 From: innerthunder <168692175+innerthunder@users.noreply.github.com> Date: Wed, 23 Oct 2024 08:24:50 -0700 Subject: [PATCH 121/153] [P2] Fix binding, etc. not being removed when switching with Baton Pass (#4709) * Fix binding, etc. not being removed when switching with Baton Pass * New baton pass test --- src/phases/switch-summon-phase.ts | 3 ++- src/test/moves/baton_pass.test.ts | 28 ++++++++++++++++++++++++++-- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/phases/switch-summon-phase.ts b/src/phases/switch-summon-phase.ts index 07761b10d6e..37652b3cfa4 100644 --- a/src/phases/switch-summon-phase.ts +++ b/src/phases/switch-summon-phase.ts @@ -65,8 +65,9 @@ export class SwitchSummonPhase extends SummonPhase { const pokemon = this.getPokemon(); + (this.player ? this.scene.getEnemyField() : this.scene.getPlayerField()).forEach(enemyPokemon => enemyPokemon.removeTagsBySourceId(pokemon.id)); + if (this.switchType === SwitchType.SWITCH) { - (this.player ? this.scene.getEnemyField() : this.scene.getPlayerField()).forEach(enemyPokemon => enemyPokemon.removeTagsBySourceId(pokemon.id)); const substitute = pokemon.getTag(SubstituteTag); if (substitute) { this.scene.tweens.add({ diff --git a/src/test/moves/baton_pass.test.ts b/src/test/moves/baton_pass.test.ts index 5e6e4be21ba..9d4a9358715 100644 --- a/src/test/moves/baton_pass.test.ts +++ b/src/test/moves/baton_pass.test.ts @@ -34,7 +34,7 @@ describe("Moves - Baton Pass", () => { .disableCrits(); }); - it("transfers all stat stages when player uses it", async() => { + it("transfers all stat stages when player uses it", async () => { // arrange await game.classicMode.startBattle([ Species.RAICHU, Species.SHUCKLE ]); @@ -91,7 +91,7 @@ describe("Moves - Baton Pass", () => { ]); }, 20000); - it("doesn't transfer effects that aren't transferrable", async() => { + it("doesn't transfer effects that aren't transferrable", async () => { game.override.enemyMoveset([ Moves.SALT_CURE ]); await game.classicMode.startBattle([ Species.PIKACHU, Species.FEEBAS ]); @@ -106,4 +106,28 @@ describe("Moves - Baton Pass", () => { expect(player2.findTag((t) => t.tagType === BattlerTagType.SALT_CURED)).toBeUndefined(); }, 20000); + + it("doesn't allow binding effects from the user to persist", async () => { + game.override.moveset([ Moves.FIRE_SPIN, Moves.BATON_PASS ]); + + await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); + + const enemy = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.FIRE_SPIN); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.move.forceHit(); + + await game.toNextTurn(); + + expect(enemy.getTag(BattlerTagType.FIRE_SPIN)).toBeDefined(); + + game.move.select(Moves.BATON_PASS); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + + expect(enemy.getTag(BattlerTagType.FIRE_SPIN)).toBeUndefined(); + }); }); From a13550ec4464b9147622aa87d9ce32fc32446d34 Mon Sep 17 00:00:00 2001 From: Moka <54149968+MokaStitcher@users.noreply.github.com> Date: Wed, 23 Oct 2024 21:46:57 +0200 Subject: [PATCH 122/153] [Balance][ME] Various ME Balance changes (#4700) * balance changes and updates to various MEs * fix import to new item * fix import to new item * Update src/data/mystery-encounters/utils/encounter-pokemon-utils.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/phases/select-modifier-phase.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/modifier/modifier.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/modifier/modifier.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * revert item atlas changes * eslint * revert 'revert item atlas' * update locale repo to latest commit * Fix fiery fallout missing argument * [balance] Training session ME does not update Seen/Defeated GameStats * [balance] update Weird Dream ME maximum spawn wave * [ME] update CombinationRequirements to allow AND or OR combinations * refactor: CombinationPokemonRequirement `.Some()` and `Every()` * chore: rename `orRequirements` to `requirements` * fix: returns of `Some()` and `Any()` * apply `Some()` / `Any()` pattern to `CombinationSceneRequirement` too * revert 'offer you can't refuse' giving Silver Pokeball' * Apply code review suggestions * [me] Weird Dream: apply same old gateau logic to team in options 1 and 2 --------- Co-authored-by: ImperialSympathizer Co-authored-by: ImperialSympathizer <110984302+ben-lear@users.noreply.github.com> Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> Co-authored-by: innerthunder --- public/images/items.json | 797 +++++++++--------- public/images/items.png | Bin 58527 -> 58657 bytes public/images/items/pb_silver.png | Bin 0 -> 556 bytes public/images/trainer/future_self_f.json | 41 + public/images/trainer/future_self_f.png | Bin 0 -> 664 bytes public/images/trainer/future_self_m.json | 41 + public/images/trainer/future_self_m.png | Bin 0 -> 695 bytes public/locales | 2 +- src/data/balance/pokemon-evolutions.ts | 6 +- .../an-offer-you-cant-refuse-encounter.ts | 15 +- .../encounters/bug-type-superfan-encounter.ts | 26 +- .../encounters/clowning-around-encounter.ts | 15 +- .../encounters/dark-deal-encounter.ts | 10 +- .../encounters/delibirdy-encounter.ts | 25 +- .../encounters/fiery-fallout-encounter.ts | 78 +- .../mysterious-challengers-encounter.ts | 8 +- .../shady-vitamin-dealer-encounter.ts | 2 +- .../the-expert-pokemon-breeder-encounter.ts | 27 +- .../encounters/training-session-encounter.ts | 1 + .../encounters/trash-to-treasure-encounter.ts | 2 +- .../encounters/weird-dream-encounter.ts | 381 ++++++--- .../mystery-encounter-requirements.ts | 127 ++- .../mystery-encounters/mystery-encounter.ts | 14 + .../requirements/requirement-groups.ts | 17 + .../utils/encounter-pokemon-utils.ts | 20 + src/data/trainer-config.ts | 18 +- src/enums/trainer-type.ts | 2 + src/field/pokemon.ts | 2 - src/modifier/modifier-type.ts | 9 +- src/modifier/modifier.ts | 66 +- src/phases/select-modifier-phase.ts | 11 +- src/phases/victory-phase.ts | 9 +- src/system/game-data.ts | 4 + src/system/pokemon-data.ts | 3 +- .../encounters/delibirdy-encounter.test.ts | 48 +- .../fiery-fallout-encounter.test.ts | 47 +- .../trash-to-treasure-encounter.test.ts | 2 +- .../encounters/weird-dream-encounter.test.ts | 67 +- 38 files changed, 1244 insertions(+), 699 deletions(-) create mode 100644 public/images/items/pb_silver.png create mode 100644 public/images/trainer/future_self_f.json create mode 100644 public/images/trainer/future_self_f.png create mode 100644 public/images/trainer/future_self_m.json create mode 100644 public/images/trainer/future_self_m.png diff --git a/public/images/items.json b/public/images/items.json index 05d021b6a06..3c9cff7a35a 100644 --- a/public/images/items.json +++ b/public/images/items.json @@ -6583,7 +6583,7 @@ } }, { - "filename": "rb", + "filename": "pb_silver", "rotated": false, "trimmed": true, "sourceSize": { @@ -6666,6 +6666,27 @@ "h": 19 } }, + { + "filename": "rb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 254, + "y": 320, + "w": 20, + "h": 20 + } + }, { "filename": "smooth_meteorite", "rotated": false, @@ -6680,27 +6701,6 @@ "w": 20, "h": 20 }, - "frame": { - "x": 254, - "y": 320, - "w": 20, - "h": 20 - } - }, - { - "filename": "strange_ball", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, "frame": { "x": 274, "y": 325, @@ -6709,7 +6709,7 @@ } }, { - "filename": "ub", + "filename": "strange_ball", "rotated": false, "trimmed": true, "sourceSize": { @@ -6751,7 +6751,7 @@ } }, { - "filename": "apicot_berry", + "filename": "ub", "rotated": false, "trimmed": true, "sourceSize": { @@ -6761,13 +6761,13 @@ "spriteSourceSize": { "x": 6, "y": 6, - "w": 19, + "w": 20, "h": 20 }, "frame": { "x": 221, "y": 337, - "w": 19, + "w": 20, "h": 20 } }, @@ -6793,7 +6793,7 @@ } }, { - "filename": "big_mushroom", + "filename": "apicot_berry", "rotated": false, "trimmed": true, "sourceSize": { @@ -6804,13 +6804,13 @@ "x": 6, "y": 6, "w": 19, - "h": 19 + "h": 20 }, "frame": { "x": 343, "y": 287, "w": 19, - "h": 19 + "h": 20 } }, { @@ -6834,6 +6834,27 @@ "h": 20 } }, + { + "filename": "big_mushroom", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 19 + }, + "frame": { + "x": 318, + "y": 306, + "w": 19, + "h": 19 + } + }, { "filename": "hard_stone", "rotated": false, @@ -6849,33 +6870,12 @@ "h": 20 }, "frame": { - "x": 318, - "y": 306, + "x": 314, + "y": 325, "w": 19, "h": 20 } }, - { - "filename": "miracle_seed", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 19, - "h": 19 - }, - "frame": { - "x": 337, - "y": 306, - "w": 19, - "h": 19 - } - }, { "filename": "wl_ability_urge", "rotated": false, @@ -6891,12 +6891,33 @@ "h": 18 }, "frame": { - "x": 314, - "y": 326, + "x": 337, + "y": 307, "w": 20, "h": 18 } }, + { + "filename": "miracle_seed", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 19, + "h": 19 + }, + "frame": { + "x": 333, + "y": 325, + "w": 19, + "h": 19 + } + }, { "filename": "wl_antidote", "rotated": false, @@ -6912,12 +6933,54 @@ "h": 18 }, "frame": { - "x": 356, + "x": 357, "y": 307, "w": 20, "h": 18 } }, + { + "filename": "wl_awakening", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 352, + "y": 325, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_burn_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 241, + "y": 340, + "w": 20, + "h": 18 + } + }, { "filename": "golden_egg", "rotated": false, @@ -6933,33 +6996,12 @@ "h": 20 }, "frame": { - "x": 376, - "y": 307, + "x": 372, + "y": 325, "w": 17, "h": 20 } }, - { - "filename": "wl_awakening", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 393, - "y": 241, - "w": 20, - "h": 18 - } - }, { "filename": "toxic_orb", "rotated": false, @@ -6975,96 +7017,12 @@ "h": 18 }, "frame": { - "x": 413, - "y": 258, + "x": 377, + "y": 307, "w": 18, "h": 18 } }, - { - "filename": "wl_burn_heal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 393, - "y": 259, - "w": 20, - "h": 18 - } - }, - { - "filename": "ampharosite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 377, - "y": 243, - "w": 16, - "h": 16 - } - }, - { - "filename": "audinite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 377, - "y": 259, - "w": 16, - "h": 16 - } - }, - { - "filename": "relic_gold", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 11, - "w": 15, - "h": 11 - }, - "frame": { - "x": 377, - "y": 275, - "w": 15, - "h": 11 - } - }, { "filename": "lucky_egg", "rotated": false, @@ -7080,8 +7038,8 @@ "h": 20 }, "frame": { - "x": 381, - "y": 286, + "x": 389, + "y": 325, "w": 17, "h": 20 } @@ -7101,8 +7059,8 @@ "h": 18 }, "frame": { - "x": 398, - "y": 277, + "x": 352, + "y": 343, "w": 20, "h": 18 } @@ -7122,8 +7080,8 @@ "h": 18 }, "frame": { - "x": 398, - "y": 295, + "x": 372, + "y": 345, "w": 20, "h": 18 } @@ -7143,8 +7101,8 @@ "h": 18 }, "frame": { - "x": 393, - "y": 313, + "x": 392, + "y": 345, "w": 20, "h": 18 } @@ -7164,14 +7122,14 @@ "h": 18 }, "frame": { - "x": 240, - "y": 340, + "x": 378, + "y": 241, "w": 20, "h": 18 } }, { - "filename": "banettite", + "filename": "relic_gold", "rotated": false, "trimmed": true, "sourceSize": { @@ -7179,16 +7137,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 + "x": 9, + "y": 11, + "w": 15, + "h": 11 }, "frame": { - "x": 413, - "y": 313, - "w": 16, - "h": 16 + "x": 398, + "y": 241, + "w": 15, + "h": 11 } }, { @@ -7206,8 +7164,8 @@ "h": 18 }, "frame": { - "x": 202, - "y": 358, + "x": 377, + "y": 259, "w": 20, "h": 18 } @@ -7227,8 +7185,8 @@ "h": 18 }, "frame": { - "x": 201, - "y": 376, + "x": 381, + "y": 277, "w": 20, "h": 18 } @@ -7248,8 +7206,8 @@ "h": 18 }, "frame": { - "x": 201, - "y": 394, + "x": 397, + "y": 259, "w": 20, "h": 18 } @@ -7269,33 +7227,12 @@ "h": 18 }, "frame": { - "x": 201, - "y": 412, + "x": 401, + "y": 277, "w": 20, "h": 18 } }, - { - "filename": "beedrillite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 222, - "y": 357, - "w": 16, - "h": 16 - } - }, { "filename": "wl_ice_heal", "rotated": false, @@ -7311,14 +7248,14 @@ "h": 18 }, "frame": { - "x": 238, - "y": 358, + "x": 395, + "y": 295, "w": 20, "h": 18 } }, { - "filename": "blastoisinite", + "filename": "ampharosite", "rotated": false, "trimmed": true, "sourceSize": { @@ -7332,8 +7269,29 @@ "h": 16 }, "frame": { - "x": 222, - "y": 373, + "x": 415, + "y": 295, + "w": 16, + "h": 16 + } + }, + { + "filename": "audinite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 415, + "y": 311, "w": 16, "h": 16 } @@ -7353,12 +7311,33 @@ "h": 18 }, "frame": { - "x": 221, - "y": 389, + "x": 406, + "y": 327, "w": 20, "h": 18 } }, + { + "filename": "banettite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 412, + "y": 345, + "w": 16, + "h": 16 + } + }, { "filename": "wl_item_urge", "rotated": false, @@ -7375,7 +7354,7 @@ }, "frame": { "x": 221, - "y": 407, + "y": 357, "w": 20, "h": 18 } @@ -7396,7 +7375,7 @@ }, "frame": { "x": 241, - "y": 376, + "y": 358, "w": 20, "h": 18 } @@ -7416,8 +7395,8 @@ "h": 18 }, "frame": { - "x": 241, - "y": 394, + "x": 201, + "y": 360, "w": 20, "h": 18 } @@ -7437,8 +7416,8 @@ "h": 18 }, "frame": { - "x": 241, - "y": 412, + "x": 201, + "y": 378, "w": 20, "h": 18 } @@ -7458,8 +7437,8 @@ "h": 18 }, "frame": { - "x": 258, - "y": 358, + "x": 221, + "y": 375, "w": 20, "h": 18 } @@ -7479,8 +7458,8 @@ "h": 18 }, "frame": { - "x": 261, - "y": 376, + "x": 201, + "y": 396, "w": 20, "h": 18 } @@ -7500,8 +7479,8 @@ "h": 18 }, "frame": { - "x": 261, - "y": 394, + "x": 221, + "y": 393, "w": 20, "h": 18 } @@ -7521,8 +7500,8 @@ "h": 18 }, "frame": { - "x": 261, - "y": 412, + "x": 241, + "y": 376, "w": 20, "h": 18 } @@ -7542,12 +7521,33 @@ "h": 18 }, "frame": { - "x": 278, - "y": 345, + "x": 241, + "y": 394, "w": 20, "h": 18 } }, + { + "filename": "beedrillite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 201, + "y": 414, + "w": 16, + "h": 16 + } + }, { "filename": "wl_super_potion", "rotated": false, @@ -7563,12 +7563,33 @@ "h": 18 }, "frame": { - "x": 298, + "x": 261, "y": 345, "w": 20, "h": 18 } }, + { + "filename": "blastoisinite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 261, + "y": 363, + "w": 16, + "h": 16 + } + }, { "filename": "blazikenite", "rotated": false, @@ -7584,8 +7605,8 @@ "h": 16 }, "frame": { - "x": 318, - "y": 344, + "x": 281, + "y": 345, "w": 16, "h": 16 } @@ -7605,8 +7626,8 @@ "h": 16 }, "frame": { - "x": 334, - "y": 326, + "x": 261, + "y": 379, "w": 16, "h": 16 } @@ -7626,8 +7647,8 @@ "h": 16 }, "frame": { - "x": 334, - "y": 342, + "x": 297, + "y": 345, "w": 16, "h": 16 } @@ -7647,8 +7668,8 @@ "h": 16 }, "frame": { - "x": 350, - "y": 325, + "x": 261, + "y": 395, "w": 16, "h": 16 } @@ -7668,8 +7689,8 @@ "h": 16 }, "frame": { - "x": 350, - "y": 341, + "x": 313, + "y": 345, "w": 16, "h": 16 } @@ -7689,8 +7710,8 @@ "h": 16 }, "frame": { - "x": 366, - "y": 327, + "x": 217, + "y": 414, "w": 16, "h": 16 } @@ -7710,8 +7731,8 @@ "h": 16 }, "frame": { - "x": 366, - "y": 343, + "x": 233, + "y": 412, "w": 16, "h": 16 } @@ -7731,8 +7752,8 @@ "h": 16 }, "frame": { - "x": 382, - "y": 331, + "x": 249, + "y": 412, "w": 16, "h": 16 } @@ -7752,8 +7773,8 @@ "h": 16 }, "frame": { - "x": 398, - "y": 331, + "x": 265, + "y": 411, "w": 16, "h": 16 } @@ -7773,8 +7794,8 @@ "h": 16 }, "frame": { - "x": 414, - "y": 329, + "x": 329, + "y": 345, "w": 16, "h": 16 } @@ -7794,8 +7815,8 @@ "h": 16 }, "frame": { - "x": 382, - "y": 347, + "x": 277, + "y": 363, "w": 16, "h": 16 } @@ -7815,8 +7836,8 @@ "h": 16 }, "frame": { - "x": 398, - "y": 347, + "x": 277, + "y": 379, "w": 16, "h": 16 } @@ -7836,8 +7857,8 @@ "h": 16 }, "frame": { - "x": 414, - "y": 345, + "x": 277, + "y": 395, "w": 16, "h": 16 } @@ -7857,8 +7878,8 @@ "h": 16 }, "frame": { - "x": 281, - "y": 363, + "x": 293, + "y": 361, "w": 16, "h": 16 } @@ -7878,8 +7899,8 @@ "h": 16 }, "frame": { - "x": 281, - "y": 379, + "x": 309, + "y": 361, "w": 16, "h": 16 } @@ -7899,8 +7920,8 @@ "h": 16 }, "frame": { - "x": 297, - "y": 363, + "x": 293, + "y": 377, "w": 16, "h": 16 } @@ -7920,8 +7941,8 @@ "h": 16 }, "frame": { - "x": 281, - "y": 395, + "x": 325, + "y": 361, "w": 16, "h": 16 } @@ -7941,8 +7962,8 @@ "h": 16 }, "frame": { - "x": 297, - "y": 379, + "x": 293, + "y": 393, "w": 16, "h": 16 } @@ -7961,6 +7982,90 @@ "w": 16, "h": 16 }, + "frame": { + "x": 309, + "y": 377, + "w": 16, + "h": 16 + } + }, + { + "filename": "mawilite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 309, + "y": 393, + "w": 16, + "h": 16 + } + }, + { + "filename": "medichamite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 325, + "y": 377, + "w": 16, + "h": 16 + } + }, + { + "filename": "metagrossite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, + "frame": { + "x": 325, + "y": 393, + "w": 16, + "h": 16 + } + }, + { + "filename": "mewtwonite_x", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 16 + }, "frame": { "x": 281, "y": 411, @@ -7968,90 +8073,6 @@ "h": 16 } }, - { - "filename": "mawilite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 297, - "y": 395, - "w": 16, - "h": 16 - } - }, - { - "filename": "medichamite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 297, - "y": 411, - "w": 16, - "h": 16 - } - }, - { - "filename": "metagrossite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 313, - "y": 363, - "w": 16, - "h": 16 - } - }, - { - "filename": "mewtwonite_x", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 16 - }, - "frame": { - "x": 313, - "y": 379, - "w": 16, - "h": 16 - } - }, { "filename": "mewtwonite_y", "rotated": false, @@ -8067,8 +8088,8 @@ "h": 16 }, "frame": { - "x": 313, - "y": 395, + "x": 297, + "y": 409, "w": 16, "h": 16 } @@ -8089,7 +8110,7 @@ }, "frame": { "x": 313, - "y": 411, + "y": 409, "w": 16, "h": 16 } @@ -8109,8 +8130,8 @@ "h": 16 }, "frame": { - "x": 350, - "y": 357, + "x": 329, + "y": 409, "w": 16, "h": 16 } @@ -8130,8 +8151,8 @@ "h": 16 }, "frame": { - "x": 366, - "y": 359, + "x": 341, + "y": 361, "w": 16, "h": 16 } @@ -8151,8 +8172,8 @@ "h": 16 }, "frame": { - "x": 334, - "y": 358, + "x": 341, + "y": 377, "w": 16, "h": 16 } @@ -8172,8 +8193,8 @@ "h": 16 }, "frame": { - "x": 382, - "y": 363, + "x": 341, + "y": 393, "w": 16, "h": 16 } @@ -8193,8 +8214,8 @@ "h": 16 }, "frame": { - "x": 398, - "y": 363, + "x": 345, + "y": 409, "w": 16, "h": 16 } @@ -8214,7 +8235,7 @@ "h": 16 }, "frame": { - "x": 414, + "x": 412, "y": 361, "w": 16, "h": 16 @@ -8235,8 +8256,8 @@ "h": 16 }, "frame": { - "x": 329, - "y": 374, + "x": 357, + "y": 363, "w": 16, "h": 16 } @@ -8256,8 +8277,8 @@ "h": 16 }, "frame": { - "x": 329, - "y": 390, + "x": 357, + "y": 379, "w": 16, "h": 16 } @@ -8277,8 +8298,8 @@ "h": 16 }, "frame": { - "x": 329, - "y": 406, + "x": 373, + "y": 363, "w": 16, "h": 16 } @@ -8298,8 +8319,8 @@ "h": 16 }, "frame": { - "x": 345, - "y": 374, + "x": 373, + "y": 379, "w": 16, "h": 16 } @@ -8319,8 +8340,8 @@ "h": 16 }, "frame": { - "x": 345, - "y": 390, + "x": 389, + "y": 363, "w": 16, "h": 16 } @@ -8340,8 +8361,8 @@ "h": 16 }, "frame": { - "x": 345, - "y": 406, + "x": 389, + "y": 379, "w": 16, "h": 16 } @@ -8361,8 +8382,8 @@ "h": 16 }, "frame": { - "x": 361, - "y": 375, + "x": 405, + "y": 377, "w": 16, "h": 16 } @@ -8383,7 +8404,7 @@ }, "frame": { "x": 361, - "y": 391, + "y": 395, "w": 16, "h": 16 } @@ -8403,8 +8424,8 @@ "h": 16 }, "frame": { - "x": 361, - "y": 407, + "x": 377, + "y": 395, "w": 16, "h": 16 } @@ -8415,6 +8436,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:9ef21166268f7487fc9ff8d0f9b996e4:82658ac7bdd4c2b417e1f59168179262:110e074689c9edd2c54833ce2e4d9270$" + "smartupdate": "$TexturePacker:SmartUpdate:875c6d67e72590dfc6d319101aa31cfa:dd2bb865ecbc5ac7b975ddf70b993334:110e074689c9edd2c54833ce2e4d9270$" } } diff --git a/public/images/items.png b/public/images/items.png index 8aaa0281c0088a4b0ded764af22c3d5456ce167f..1bd7b3af9c3314850fba4eed749f7e3aaf46d8f0 100644 GIT binary patch literal 58657 zcmXtf1ymeO)9&If!4`M7#U(%p8k|6ISsX%eOITcjyE_CAx_FQU7I#g826uP2pZB}x z&Y7;R>7Hqs)6*qSO~gmF4>*|Qm;e9(M^Qmm697Pf{+G~^UP~4m%lQESB)~@%Ejbli zm)8xvU_jYy;ZXceX z7M>?%>+5PQO?)1p(0)sssVb%CyT_G(OG_7bu~9K2vkT9c#m{qpeh*~D_g)A3`ZWzs z-QC^^OFTT98xs76ay z|GAjDd{DKsyX#(C*xq&wi)`B6e%h*h-1fb?F!}j|a6QIpGUe^R8Sw6?tZeW7eW&RS z3)}f{SBjoUr{CRoDWQj#i}KXIuC9*4ABraaU)xg{N7qk(3=E$vC-n5)MSr$iT)9&f z2BnaZ`L7yWx>z`r&3L$eyRDm1E+`Gxs%(p~A7>_!NxfP&R++r*d8qWhPZDdtc)rg~ z*r>i(mSFUKFP7(0i$;M{r)Sts9<+6&_uc4{GS+L$>6;@Ob_}&@@ z`nI>xlQJJOu+jTCOv z#e4aetV-A;h3jX+E%C1*ldq5OZ2IR4@m^jC z`adQc$@62+v>%G@ZVGGBka#YAzaS+Ap83uHGHwOGXud(mLMzzrlFPz-{QxlCHPt== zURV6<@%YTK`6VX!wG_iyLEjAkz%%!^`Au)yZ5fS@+Up3%w@;9N zFI$XK9e^LkN;?~vs=fx^Q_Q_N^2_^`_dK&8^LJU>BT?kad*#9Bz*3}a*jcml9@==l zQ1KN7<>}?xzrxl)`G;}Xtv7`{dOpo*5)X8?B8sJ2lFpz1h1dZ$t^^Le@f%Fw2^Q9?o7|{XrglE_rJ$9lCdj1%FF^3sxM!TUaVg9thX_xhxz#1YqzCt zLc@?imM9bM1M0VH!6wqOk#(g_2r7ncOtd^)f{d$yv*v|JG(G)22>!8JeQ3xf9#I}I zIb3a_euRIXC2|#NT*?4UqQrS6d?LA%lOH!X16d-d2b{jxcFY_;UMzG44@BXiBXr0EEWVbfScQdcWYCM}h-8M|%8cw(2qDYoaWExX<{k&M~&pn@#;!O<_LbG^@0`9QdU!vfZWiKkhowV0Pl zuF}uTuT%_L( z9uq0zH%1YJ!wWc~#$B#Lm4AZ-?!r+PHV_mxe%1vAujy}!ylIq1V`Sz=QC6YE-(MBP z@%;NYB~^&3JIzw*2wxQUC;VBwvUqD^?6P+n@s!;#A+8x2bW*JRR)%D}1>%vG%%FBk z&k;DgD4g(`?CLPs2)eL8Ba{N~ud=SCOP?OJeG#};FR#}7bUUj>ymkHpC(Faqv`pe) z`~RzPx7{41N((()uG+_XeJm$Vyv<=JF_T=|Oy|~Ak%0F@bM=nG{k8|77{r8rLGMaGg#7w z>#@9oft{h6^-!1T^x0-YCxEWLB56X1z00TqN+b5w-kko&g198_x<8xL!P$}wJbpeF zZ8@{(krL8mjX}z{*i^)9G$h=RnAl}HXm6}IBqAyse|uY&ufrCIoE6%1?)qCAHo`@H5E8QiD?E73+}cB(XF;CemdUaYd9>! z$leLz+1>FQu4%att{1W0We#scPJOW^k`|s3AqD z|6S{2qZqb$M4z=Og>U`Dh<1cDsak%R5AL-Jmaq+z?UOu_G{Q^ik!Sqc#B z<860C_fgo#&+Dwl7@{8gc8u3o9nhP={K?*TT-V2KWc6d;oR%Nc3|A?4vLw^Orm(_| z7tSXBR;cI6=STQ*{Y8>8P|ihx9Q|vmY9R|@zD{Ud2?9|*k_{fzdmQ*Z7!qaP-8B5E zj##wB^Qf=0JK!qt{4+^}Y*y+$8Y1vC{QL^e2%c$u6 z6(Jf}%wwOk!}w`&y;EDubiCHH76LdKFFiXrHoS0>`!Eq!`fbJG`CqaB@iR+@@5S^U zoea+osi-F4H!5yrz7v-qmvXA<_}O4R;#|IyB*z{0il1Sf*iCQtOq7 zSD$EVn;n8jU_;4XyzMR=TUO}kb|$#5yhFk7-N@Dmtd;~s1SW=iL^D$4?CcbXXWm^dHo6TAzP)wtu_YUs3b*Z9W8V%~%xEkklyD{&7e4X0yp6ZfI$yo@pn1@%G()86T) zMBePaHF3STGskMCML$bb3+W#ZI|F{zzAHm={KbEW?Afk^p&UsYb^XJuPuzQ`n4G9q zB^LMjtC0a83IOsmw4kC8+&ArJUBf9B;fVyQ-uV~Lz>=%OJ4B`#b+wenPTwbLS)R)n z1^e2%6B0|x3*iYg$Pu}iiQ<9aQI<0QL$LBAi-KKT{gNI<FuKJuR}sE|MgPS%v&6QE zFN~GC^>Boyt>WEehcf+_HR?v^vLhmm5vx3X@rD;Qhh2<6X(zn~AC{(C29hFC6~*~v zK6x^o-Vv(@4OO5#6U}Es4pP~6M~SzcemCW|?9ejC_Ms``tz$VlcFaGTUDTNUl_m2s zD?zB`(7y|-8MpgkHUv!BMxLSh`!`P{GIG#vKU2^y8+P4^|5->b_y_TSwE2JZ|MCB$ zNdBazLUO-rwgr+uAI&j%LPS9N^0~Pf$%M|zyF=d^1gxwR_YJdJI)e$B-1@AeX1iMX zE7d$sMP`ZsBprf;#hf5>-I`&J>=}W0(zo&yAOh7uQ5RlI0Ow+0)H$ZWT?nii8D*Q; zSrge4RkQmC7JtmD z>BCwvp~+god#4#(33n2vSd@wYx1=Jf9E6wl7|l9QMR<@v{GTdfo=p_JEZu+Q%o!Zt zDQM$qNocY^{S!YVmkS}};NsH63IIx&aZb8Yf^&!=auAtQdcRId?(vtE^iW6s$I?B+ zEXkc@;KtwI{dN~shFMd1j^J9v+&6=wnWThAp2oIp;Rottf8Gc&@RlKje6($uCV(2M zl&0S!I`rLjvT&y{oE19$BKUj#WPIb_X5aI1UWmukH7jxqGO5D|75?-sB`pgs@E*nK z_fO&EQbrfB{V-jC){@E&oY4f`ADB#xr31iibaB{)Xr*k-KyROa8xglNbX_ZQMc>~BQ}gYivO2|YTEiWVVl?a_ z5gFJrTA{DB?*Csf#b&2 zS&lkfW^Uk{0W2H-9!$d76~*YyAHJ8Q;2PSiJb?@jS4NmY1!Z4Oc^vYTIof`EC+jy_ z8KC078n`rioGI?Xj_;O`hN8TVa$aYu2>Y*v2;ksI5Yt5@obhK340alQ?i2{))MI}& zjP65mzOlksQ4$ln0uZ=CtegzN3NUjRZ(kUn1LB3JC3qaSm&9P@Rhg9}DjsrNwZgF9 z-^71t`O$eftq=kPx$F@WM-hW(@2>m%J20VSJ`dH#ikML5@rnjmeDVib+2phj*$Lxv zPaAP3TAuA}7vxSCE3J_Su{a}p-w5Ty*MmTbs$ehX(?~Wyq`!)q%K_@I~P|BtHdWgboFrO zFm|Xn7Z}|hW=4ttao~Z_(T9#`Qf#DPG_!)<-CP>umbSsf$Jf4n{HUX&lVzGs;pWye zY3}eax+(_=d3-uCQOR9?3r#~jEk}n}@B*O5K|t!4>2rRY@#NIp4E|F5+~)K9xh^}H z8AJ}0I=by48flSi)$1%3vh?VEhg(urC?tzt$O}fbr7) z=mc588Yj&a3ah7$Mrl-0WIc>vC!%2KC_G++jAPhB5-YkkL>dj7 z^kcv$-Uw=CTm2z@{Xl<=JyTLZC7MeYF;>x9MC(DN;(^-u$TnWiTGWN>chLCAn+_4s zhg-fUx<2hl9Wc2DDUZ+62%me8DXd2J3!+;nbSsuy9}6fxGAe8HnTX%5M@|$E`_K6y zGe_A(va09$Wy9fj<3CnB;JR)VqaQUjb4FP*unW%8KFIt9j?FCr>~Kx_v@Q(PHA3Bi z3>Do9=LlM77k2Zqxs?VZvuS`)`JcZaeFyDL+MJU1hl1n35Cy{n<|#Nst=^s<|7&qu zeNO?hZ1j7Q0kMvX1Hy-tE;B->LGzal9H2MT&9JwZ@yPwoA;fDex0Kc!SAD?saN25c zd$`->6=4`?6QvnWl`5l26Oe{(V)=NBikxbP&QKKs;?*377s|_q3`b>zBEVRAb&VED zxf+w?#J*J*_3|je@wnZN_-t<|W)vXPCJaXb& ze4RCZA0_g^MAG4wKEwu2MbEDAc39OH1=j>8dHQzcwXaZ+xQO1YDQ~oA3;c3acoK+M zDZK35MJ)T(TsY{h_QFvJ5b)<-HERZHq8{P#yOKnNon^`s%5fv6Bk#9hP3=#}+w4(u%K(v4u=S3aa=OR}$u$S0;d2e-M@4jIT%j zlVc1e?X2Co491OuZc>W)9U2cYZV9h`>`x}Bk1{IYFkGrSw&+P&nXe*YZgknL+1U$hU z>-#0Cbh;88bN{d!+1wEzb7B4qaC-_((Nb2x2b+He?YXCy+#8F4S~ z!y&m87}o$Jlty3qrfiJ7C=O?vpfzRTs?!qND;JqmjHSPAF7L zP!P4YL3&HhCF7o+L)Q_}h>6Mjx>Amny3oL3Oss4>gEcVGvsIRd+|oaZd23VSlhk-(pMdID###HOGfV_=%7=n z*rja%R;cy?IBs_<5T5 zW9!@I`|c8~rtBh%buxT5mk4E?n=)UTyiFm6X{$o#}E|NZ4kiZ&NZhoHx zi9tI;08&KNKf?6cVgO9dSXcEFGb2B9)#HbvAO)2Fdo~+a%H>sWR{4@$R`fG2Y?HiT zB)d8?>f9X3>Y9H){I1(8o)}iuxoYGHubN1=$zt>(gGYx0wj=09XAE!O9W1Q4^`3(Ar923f&{^CIXAu0cM`WfZUbyY@Qkr4Fiqo zT`adA$1EW;>_YhMOyP$&x)NK&ypNqG7gl>XwTu zV&Kwo&;d%}#r;)YwSS?Baj6;;6KjpkzPKKTZ8n<g?Gl;f-9?^(ok?t@n2WO8x)Jogp|Gyrq?pglDXVBE9#WR-?rLXkMa=< znQ$>xPRZY8e^HJ!k^BTnNF!r8n^z&3>kYjVRXD1Qp%5OIik6LOZqKj7iFs3B5xS0O z%Aupjm*hG0^n+1?DnR1Ai3atMk`(gfQO7AND#$4)3L$1&zW^3}06RKTcNk)}JzW!y zrxjiOi`}Sp^VlJUV%1MdrrsVjTwijz>ZT_U*F4Vli;j3=_?ms0h`V=ow0^vwpU^Vh zv;sXL)qWo}-Qr;uIH&MJO<)fK+Luc+ToUw)e39*M^pTaZurerIv?D1cV{QtX?k2^(jDhGB5Rr+zoMiJZ3r;H1#pU%m#K zMzbx(FrM#$Vx#vRWC-(&XXZUMs!K$soiyVcx@b|lJTGCI(y-byv)Z#WertS1=NgF$ zc0VI+A8`q9)%-WzpVz`%5_>0aqDiOXHRsd&BlXI!r_<%+wp{Yc@1&ZeB?Z1)s8S%inTtri8)aaHgic48fx=G`hdd&bWlQ23xG+HemK8 z9TT3rW7UqI3RrW@Qdo)ii4xvIM`mnjcTXoRGL~ltHj@0<@)a^@XZ4@jYn|-_bRMyp z$Z|8aQOJ=D&g7=QDsjBa-Ny>F>LtXO4G)DS4>vU2bdi7BOu%q8m#@4PT<_%ytbqNi zqWQDlx0TZBK%p!O&?SBKU3QD`xY9$>equ4`Ek`uPm0X*$B$KSSe*E?Ps)~g*T;HJh zcV4EpNf^AfY<6CS+2EPMIE}>p@++|ydMubI!Ej_X=g?US8a_d}%vl7LRph9;x}qb- zcNW=}WMpR~&^O7t7D`M8%MUSpAS5X^mSS9({J-_%_=BiM;KGB{P$E+}N96f=DZwW& z21Yr2Fv6$2iW&l8K?WH-BNK)z7!BwZK*e(YYrAqMt*-lx6t12a=2>XWO9e#$VOAnP(!T49 zJ6tI*4TXi)`xFK%a;9%YqCoN`dtp6M`e-kN+HxYEENAK8EX`)Rgg^#usSHRiU0udn zs-P@1@W`7v*Fj-&3MrEqHV7t2jJw@O{9L-9K`oj_5{!pAho`jcM-qKba2D0tgIpAH z(oOf)lZu`7$30&tDxk#nY!z*y&u(R@E5=zFS4PIdyw%;MX-JY0+4|f(nH0n^_qZ&e zvAhe9*(l({JP+;jK2w0uMM5GPCG3oRNN|$z`_dB!VhoAYxsYtR42U{^zRf*Dlpl-& z)C~XJ`@P~6O^Vd&DlC>*Sibz>l?~(p{tBjgGe$k~POdQ2V zXFB3I#Rd`JW|&pLMLebX68?tU_&h&fo)!OKx;Oy2mx+?TPc5$R-fUI z-U&84hd;S*PZ|(ex?s@jiNGzA`~9rEh^pWEk)DxjcpS@R z$@gZ7L6#%nSZ|tFX1|HKtW3-BwbIOt(F4Drpcl26U?EHq5)#71f(5oR#9K?Y=*q9M z;^;KV#IGIUWqc+ql{0cCL;aMF8GXJV%{;7|T3|0IlslnJ5uBplOMyC1S41(0rHT6v z6G?i5R_wbw5=3g4PTnkec0rDnzn7TCWXv<+=iZ5~{F{D`FZcFQKt<(|5w|sunm0DyP0@)X1e35lIj^hY?NmG+GXQ& zD*~!a4d*f5#;mm^C!%=(jwkPI_=hi|)*);o7?y#yDQsFMoGY}p>Ahl}do1|6X|Cj* z&YOn|cnjwe)z6V}rnC*i*Cq=gS-ovG;`!d`&uP}s-*4U#+Urc% z*Oipr)&vV4kK5?tY%s#ASEk4O1dC~seXYkB zR`KN?5fwvROoQJWnhlBjAwd86MCl^T&Q8i8e6EF)$8Z1tSODdZ_PywXkyGRp-lFS# zOrcq%P|K-sITf>4$7-&&0B!|^ zX*zvL4Le$afilD@Kujf+wtqS%Iax`X{8NA~{!q^uUymH5SabuZBm5S?*;O&Gf?xbB zoos-r;T&-WL}$-PzheCX?1yv(h;ovJjr^k_nHu~X#Sm5vIq{Ijt(E8 zkeE(n&?P3LD6uiiQ_xNrL~mtqMEHs+K$K7x&)71q@qHIdg}?CIw_cnb8?89C4U2RU zPW0Kjm+0e(!XIE6@1QbXE~ZKf$3F1$mrcDMmK7^SW)*>>+zprth@>9pc82*5%yMdDxnxx7C*AV)3;AxqB-}b-+z*q|Hh;- z`BIgiJ|8=s+o{3vVa$F31Z`r`x{D znVujCtzNzRVb>P_uj6Q(j60j#r9@IAR4eh@HC8o`?OxSoaHP+&Xc@`oyD4TgwzsD8 zD?eGIZ9-8*61wHKU7|Y!NDGvd2Jx$13PW7@A*$Kw z?LWwCJaU==(@ivfe|;)s+OHiOuUZ;2HVDoobW_gIAyf7mh^Xh%9)GVM?8`8g*N-NUGv^N8;5`-6*WN{zakj%d_n$o1GOO=f&7Od@vnA^rXE$-Y z{Mlq~9-gwsT<;Y_spWZ^=z;;^(gVP0oq3J0HvP|)B1vxbYP@y#svOgfH463n9Md*z z9=NJ2$bV{{dtk!0!H{7)4 zPt2^XHxD%W|6BAc$xFT4uRNwiK z4e@{cr2p=|<>LA%WLPP%CycEBbWK4e)9Dxj`qSk5@5>VVAgt3J%<{Hlxd06a?!^Pl<~q^o6xPx*}bKkMoe&w^Ow zFq8;Be@~zZOLP8C!nKbZi2oh5+W3R~4>N&RmHGZ3co!Bcau@^9lOAKVg(}ctrGqG7 zFUoz+_~&30whY)={1syPyb7jeJ^#%R%lqtiUOL#bTW@Vb=(Dja1(+g=Z%}wU@>Qkig*;fKL)UuZb%R%nt+*<%DPc2J zhBv#Ph|>D7o@tDbI4o%or}J1?F4r8l(aT*_sK$@a#x&_sJd4TQ&8`c)Suk0&JHG6-FXWExTiM zokRkqT+!2=t7!9~Ydy|_<$+Ewu0MFZC9F9FaicLt`2!wgv(?wmG3jkF6tMA_r`ji`uO(eC@igA!+YA@wAB?*M`Tx zF5$9;Rohs>!z@?mPs0lGGOF8BMPO!nJvD1Yz$2QL^(t(lc6750RMzO%ISqc-HECA} zoJR@OuoHPlyO-W%J?C5wT15%1S#G+JHu}k z6i!SnR48cftl~38hCf-+!Oue_*C)RApk*xJ*Rp1QtaEa;TX-;Y*ZqWFNQ;5poo z*Kne)IX#LzijY!_$u3$~Dqr9fb^;~jA+1x^^wjUWi1S)0w<~hR#h+R~fG7QCh;lA% zO@mWsabD!KUjEZOd7%uCIPD&yC4VlC0=5g)5CFVPW`TrK8_=gG^j=Eukw0nHk^;)H zpxppZ2SitB5!c z_chI0jornzN4kAwl8dTB5!|s^j)%$;#mtV473&{^s_@|MyF&j60`G^x&uAd8IaM%v zba^EBEK+Hsxw&Jy-YDLfSG#1aE|mnj>q}TOdBL)f_C3FVS>+B&{Hefw&f8t z-?+E>#BbiXOntp;y29|3V}mttu&vwqQi-+ucD*ZJE|ipf@(_6VimEa)tkBQTUg4ZM zgmvM48H}UzE%jP;OZfU?lcLM+V!7RWwkqqx1kkNH^Y)ARYtWmC$C{ik{W&}5pRom^ z)AJiM=CeBKw(nRUOg*rHNIERTv??ZJC$}%pYV}1Rz_ooCk0}WW_I^3ePf(SY!!Jwd z#IGNc*@I*j7E}Zbz45y2%+WI(G^p1#@nh;u=Quc_95Tr|eAe7W14GwvbO?%kf1goYiJwJ6hql{X_VU^fsEt`BtOHxQ z!LZwXIzS3Kv+n*)lHOj|2NUYLO`ihy7N<^0Aiq_>jFdLMfobX_9jV%ETNIh7 z!4zjt-z?r>cslrLjq|X;F!x(o|K(GW?%T~}&evD*(QjQLr1vRL7Nlk<1`&ZJP@uUa zuZA(}(S4@i?C(ewqioXqz6G7nD7MN8Kr|h}9$jM%x+QfS+xBaN%%LbFqK0?w#%jHl zmuj(*!{Z$VX4@LPXOTtRlDk;b``~wbiyFp$le3qzc@x+3POM11SihV=y~P@%y!04x zSW!I!!@z2-+Qwn2_=$_xbs$#VR(Rv+r}XT1&fd$tjcXGz4AoqRizB&t8LwX<2zEs| zTfLEA0>@LCFkNox8{;Sq(_5A$cNG~32ccZM-Jx~2A^z!WfVE^kGLFw9p z43Fjvqeow0M>iXYjV#Eg!(w1qNkpCY;^(EYhBE@s@W{R2X2^M_>3Jek30`5w=;=Jm z>~5qaGT}YF@mwETx?^*+8j=Yw(dYIFAr{rfr^4U|S;+`^d4(@=g)WT<9HQaiakA{| zlFh{9dX}Oa>buJfDzZ8YlED&16%?i3e@jvMwp63W9kCe^CXXzn+N#Z}nh%)8e(?W> z!sB7og#C|RoOgn7RgT8{W+LHwQD>v$~3@aRI$rwo?3)FeB_0^^&Z`mBC z+rC)iw{GTQM|vI9)x%zEy!TOIBI>3`@G_4_YA~=|snmm2BECa}J7Mg_F2Dif9Ra1! zrh@%pbmW0;fSuquqQh8@*tf5gtC<`a(dTbP4>yO*Ui>t`I|a(0RnoSEz^^umdrpbF zqT>ZQ2 zK%@^BYd}MQP|`Lzg7Z*GGL_|96!lO1ZEI%XUD3$dglOg;Ch0oj_TSbV3S2!PL&kEJ ze6Q^m7^RF9tqiUqBMRbPPq>;C1Qre8{&OWTumqO)@D%9)UWljxX zp0%)&?x84PSeJKi7}SW-`rmmywHY&??Yj!+3>)NijgEj#UR!gZr* zgNEeB%=Ebg@|=PBK)@SakGqQ}usv6?x;_IJiAz6hC9HAh;=KJ=mATqCTCRdoHa$$HYv;z~ex0Opk&6IdF`fQ;Q71 zRRjHcSmOYWi5hs<Pf~K2Z zfUcaQY7?R(*X8EU)*(ASbW2w41Tn$uADs_38jk2|L({?v0EiN~T#H=^H~?8BEQSJw#|~f_WQ=>xk|@BP(clZz=+G_Xg|d2xsFmyBcN(>cAg9s9#L_{2}g zHG+$)p{&fT_d5;)XWCC~U0sXa=?1yhiBb)t5aqzxX=%)8fwdaK0JekO!C#_@&pf!R z#YplH1dh%;#7|d(-?(`pfpnD^(X+lcDUrJ=tn0HgZ-7|5Xk3rfe)Az|`xq#oA0a|n zzL|ni7l;O*K@OG;9qX_Fk_CmY8`}fa7BIlveP2}Pqb9%t_O7(q`4-8>9gUb&G)j4~ z^JaP8H(+F17i$pnyN87=(rVph2w`Km{Q_5ZqZIhz=B5zg7tMxT1+s*tse9u)>F^xj ztFXfpe*2w}0_1O9veKnIt^4;o4h23bOn1%1DDogf6Kws6XiB(hly&OsjFNyS3XLj& z<#Xgtt_xy?>o=%?O%QmaQil$BX|1OSU>(LUvx!bzrqQ$T2^aj!mN?O9cG9Guh9v{hM_UJfXP15qM5q>c z+;%1;1+a6BjBYwvfs1>mIy*_nXG&%r-$$taEUzl?KmTRgX|snKXCh^ZsGXKgeV<&{ zY&ax~7z*Pyi25P=xvNRPo~>}6bijIy58``8VD*X#)j~V?AQD1}eB==>hqVKY;D8a6 z^VvQ@lj>id2t47&NWN?>l<6>~#rfm#3NgSUOS^SEaDCy`W?%YTI~Iz_!~Z!+`fHDv zA2^*;n%Ff|j$#qb1(gJXk+5p0Ry)KuSx7C1ZSZk;`Qd!}XR`uJ8i zoNWDjx7#+&rNqT3KMBt{AYB|aL)1+(q`ha^YFfEWi%1jvikogXc=9@;ZCy<(gIo-J zF1`%gZ4M@6lZ@a6&Z4ZMz*(VAvr&||=0HUYVMV6%cFifOjx-qvTMMc+*;KM_l=2B? zt1N#Yl*_2q-PR#VPc<2BZv1i9Bc>{x7qWj*>{q z3)G(eqHN08-qe(e&(ywa_Exs6#!Rhwr?|L?$jY53Iyo6uKqMNp^~oh=>hfdv-?kgE z6I$MG2o)OPt55%8p#CXHPT(<5#k8taBfUr6aHA+YRuCO%4N1xj$sq;zoO%nTEOht)^?#XiFtSUi)0t^|^^t;jw7F-#@!jSU(>!k-ZM z^m*j;bmaOb_EgluFevH7_+(RV>@tj*o4S(~WR!4{JrpIxYQa%F(HjE)30IKoV@YE6 z4FWBwno`G^c^dqk!z-IeN=$SR6zsf%PjU{8n?CoKp;#kdSk4%$GGLdR;5i%)A1Z}?^mOIL|7VL9{4dp*y~>-M7l z1Jcq~Jsf$i_p>cv?(nN#!rSXz@tku+cWlxf6rl)2hS+W7!ls$qE+9@5pBKQ?bfvuc zJ6x}rfy-`DXxNShe?(OI6#Q26%iJWO_f>S7j&qiVW^NNUPl62QiL&?h8X4hF2$U^! zL$qW>dIn11P*vlD^>xzf=4KC_r_(2?=-D4PXWDUP#P{Xo3{}vmS79+6?s6;@Ab4vu zk&BnR0n0UgRWJQ7>nGlMYpn|!1KdtuH(E)q8UoT#-->nVz+$QLz-G-lRL8=c!_D@a z>#Z7baE!4qd4WFlia7@vrjcG6pJG5OK+mgHd?l)PT8qZ^`Td*Q9&9aOb5F8JamUoW zx+sFMzs(3k;;q%lGQ?({uZex;Rakwo6`I(m=%yJ@8@>oHXCWl50xUp$ujk#8ffr#( z?CjR`Jf1O0hcMFWZ#Z!l1_Mj~%yU{hLM}*{Dd)Tl0ekU_bSU(?ItDX4JYTKzH`{$r z+S4{T&zCS)7LzV*yOK+dlbTcJ$*^j#}oZNbS~}0`X@zKHb@KX*FOTf zz@#7X0tE|SXAS^(-h!Jh_?%D`P;bOP*m3W8;aU?j;YP1x(#O5Kq5PdTD4gC+klh>& zk}^H%?m?8tp2p-#)BAv_sQD@1!%O)lF(IJJt0%Ic|5Y?H0|ox!MM|2$NSEo z&N1do4s|eA84MFGDv|(|2i=5ILKaNI&Ca8xCmj@%Hb8pMgv6|YK8R&uoX6q-dvB@Ms^0N3Xn9~Fm1Mdf!}(4#K2t-eqY%~2U=J=x-C{!emGj`>|B|i*@juV zYk}iQN)UJ`K<>fmHlDM*1EfFVkDL7~eh*;x7xH=5G<*~*BHd=a(jbRbrU_t#`||yc zsMsC>bpeAQ3q2#AbrVVI@8$;z;nEJoB+P;tELpCgjQ9NK=iC@TKgg1UK})e!Hx3%q zR?VfhMTt{^t9@p?mibgk%1Dm3Ci?3Iy@i->X>BE8ezxM`Hv(EA{y>o+T~(aba+H{% z=IFg+XfNRn<5%Loj1}zIct+xG23spa5!wB=qnkwA760@01tCOkebs+y?3hJRaiibm zKYxaAZdr-^qidD&S(qn*E0jJ-+WsmqEUZ0aT1T`N%>B^>fkboB)`)n1G;N;L_^pJv zzTZzt?xVfO*UKFk$x{rf&R+oz#g{RPGDo#Qw(8U$!V}s&J*F7 zNl-yI;Aj)<3Y*ppH*F{mv9CX7svpb9C8ko-6AVX=wF$H}k1hGtcB3jWOUAV-7}0!z z=}fKYTi`mvs^3(3PSw&Z_fB;9h|upJb?!}9iE2xWMv_<3wRVzG(_7^Iz-E+)wKh!d zBw#HQb?!Sw#efRD&!Y_IHI9lL{8(**RlV*OOsXP-O(E;x*Wdoidh!YidcyF4Rd0Pr z{VyyM;#!KMZ0IMNkuGxmUbP6dg970NMGkOBjOft#@pJ3eF{&I{@=Q@rQRC_AaFpLB zjjXy5y2{woyEpf*{=*(Tq#8USxvo5|K(kQem+BmBM~Ri8nx)A71Xj`%aq}lS72Lp? zw$Qp={vE*_cP2~_Iyf9Fohf5pUh|hD2Nu7SVY*Z0=q8MWyRt0*o6SFFnw;`W?cm5r z9RzNpvY=PNAJIIBcoKA&>iW?L9Xl`kD?S66{>J)%KH*?RWF#lJNEZqoIh|yKb$rsz znifB~M1)5fX2GJr9jv^f;9hZKQyy!7e&^z{`hPr~WmH>D1Fa#ryE_zVk>Fn3wa_Ak5Ufxr?!l$Sy|@=E zPVlA>++7L;Yl}m1ce#1LyYBs$A6e^6PUfsLv-h+2knsAZSrssJ?O_(;d8z;hJa&`` zjSLJ*iHZ#SF1(^^S9Dp~(#S5y=zoky?N>oN0Q&fJ#BURg0x;J{1UZq+HEP@i>os2v zxd_he>++h~>0>%(3?LbzH-wwY?XheG&p32(uQ`8K$2gDZ$Jr5kNbFgRU}*Q7pWeF} zSKZL$csPo&k+ok-->7w;Q*^B6p0#6rkp0WfYg5w8sNcpxy92TBy6XXr!|0bN}3T1_(vTqtkT6+3dEr`{vV(w}xL;z$Ef+uaImnJ?;qS-K6_SNn0 zfelPYmcx(WL#V*V%rp|0KkRM>(@6#mUFp0z=^l3`m;|*0X89W6I0uyb8Q~t zcSJkmilCpVM(Y74DtOZH*C7;(MvY7MX zV^>eTW%+kiP#BSCxWq5Wf*YGBts8n#C~*% zBJV?F&9f_6t+s-_L~+vpV*z|$o{qkKUUCSjVie{W-G4ZrM5{gjCO}4o(#9m%o1mt7 zA_&5?>x%W2Uln0!OmG~)ix>&?b95_r+X5DBb$$H`c}zMTF|#{mHAw1JY;nunXn@=j zFR&LtL6`%gpF2v%C1dbh14Yi7?7AdtxM5v1q(Xl~PHcu~ux#NeTu_^U-psrD)OnO6 zazVi;hrQ6$^#?GVO(4)}qrX7%p6Hp3C!>_k@F8q992T$qyCz{So&=ABUP=EMOKz}mbUixO_l1=!FzF#?X{;Q zNI1&M3a$l066E@4X&F_x9*fmzjDfEfjLMX;D0li@ZJ7Ds?8R9O?qGcCtPj+Yp@??5 zxZhHKM=OVyXqd)u{AOo0wTNME9l;}#8pV%i4VO$;N7~J$13=w&J#$k$#%T`VhBTj7 z063!v!Iro(X<~NTA()~7$QU^V1n*&=zV^r3*%Gj*K1isl!%;L^8%bjY$URtHe_cDp zgR{67Wd)Gzjd7H^tMTf;Wx#zaiUzcI+wmAtWnS2v2@0C`U76Km(pRe2PaJ;n3U+ouhlj#|9!I3VwnY z=JdYMBFrcu3vvi=Quk#r&04BEEviZi6FXQV-AAD^vnX-3DfIH97$>T4tw-*G%cD3V zJ`-RYFFIMo|3!Mp~q#Ge9klBO}76$;(`_uPlb~I;-+#$*GDN_u8{HXxF z8&kegC$yhx;uI1X$4_GX{au~Z;kLm9qNdwOHD;S`XrDB5F4*p@VLbzDo$^IQGcI3J zMy;Y1b?x#1_@AEAs(YHz=Pj69otB%8$2fYF7arAD=6jPBd}^lP>EArlTs^a{#Nvvk zNBJ3%|Cn243@ls5B{yueY~aRN5aMChi`t-XHTeH(kBK`PB0p#X*xHY1g|S^PTVqdg zS(kqhp@5fv;DLQrUvi;6SVb7U$`b^ezimAKdZxJQ6^)eF4c|_&WS`=t^!hC=maK+t z65EAqn&M1_^$|BHY7unPwGLMmYWQejWDbhTRpUYM(!yt9!O~;rH@*C4?ms8+hNq?t zKfJ<$)1Zsa?T0s6?%5BKb&|qS^bIlJymf2u_+;RHeN<&w^A*BU(RS3MyG;-$BqY`8 z2#1-|h*n$+*`m~1{Qc7=HZC7fJU!Yc;*GM^Z1!3m1nD0b7(D-BjC38M z5-2xJRi7>SL^kJ^Q;i-S9vNQd>^$7=_)A8pH@QZYmJ`#}MqsuEy+Kpn@(b0FD$6!` z317=KqQI;T@%b`5`q?t`eB|AV^kC~M4(3={{U2^#$d@d6>D3Yal+%Nw#W+KsMit$m z_BcwPV6=gRaddEAXr>@e`r4)BB?TSbsH_@XIyfdOA>k%Pb+&l+saO3w4hSHT*tW{?7MSL#^Mc?(M|zsW+9rI=IqdKed%+ zaO|qT!WgCTuN*N%F9ovbzldc1eZ7w0c}=t_^5zE|Rm@Ohbu$tY5-1$NWM}=Q_<5?t zW_|DP->k+^v4elv!(K{OdQI+JYe?1qb$p0JP#PKajQg66`S;o5GI&y^fspqFQwzoM zQsZKc8B@wJkExTwRb;3kBef99Z_Aww5^8(vBkqJ4?)2}Gq_sw190Fyl>XiOJ!9(Z1 z=L2Z9G%fdrclVMJU&@=pXtQT_Hn7oMZEPoWT^h{rs{Z=Bw2)D=R2gZGrp`z;=-77Y zeCIe%puL_cbwbVJ;n#4u+$&nEGBO=a z<*O}60i_W1^@m~{$-Zd2JHTyW$VDnOH`0b9 z^%2oz>=r1y4zgS5D-Y(TjML{MXIq7ZqZyq=tF31^0bH%DKu-pSywuc^TyF+RVbRKK zAr6&Jl*d`al$;J94>IKl@0yB#v|Hi%Cx3`!`b$fa5UqcZi0T{mzmZ2tXBuxI^50KU z0Lz1r%jP?x`w^%RY;tRL^eiH>fMx|3+WBC!`{w*pF0=cS^bSQD8!DPfsqS@XjhdF^ zi=?Sv$9Y4Y6c9Hlb(3lK@=^W}D%KRpEe)`9jC-h&KB~O|)NjxyLxp1@SJm<4o`Q~V zS6XuM`a2363>39&0A*zR*f5Mo;3kJ|6JhxNr6 z#@c8kBhW%VU86eKqrCt1r~MpiwgIEABYNNfp1Wtv34J}*1oM(} zsL&91mN$79m;}tNr+r<&-Y^?L4({RIvo9Yof;O;l)hlP5TL2tf&*v@W{sn+GNzkOw zmsvnB>>JPcc=4;RuiqDyZz4TTB5Rn@+N7-~3JWM46zRE*DKL4GZFzI}}Hw*D?;M};ASN+-J=^9Fq12uDybhA2cj=)SoU=er9 zJkBPbYMP{4ilA8IM5^PpSj~okti|Bw?Mt{oLEp;1vX}1s<1FPPLqdYU7gseRtz~c& zg!xU8SVxDC%-_(~x}bqh{@)qx_5U zIItO+{;#FYEdf$9cSUV9=uI@oMynRAOA8bj{gQvCh7MfS5*P1puGu_iJ8fde_E&Rfri(RI(Q59GHcW#oh~H;$ z)$DM`;Wk%D&W(ub(*P+uI&8-s&6fe0oTo+pd_=Up27`OWKp~J^tRLmqnL=PMM$=tP zcu?DPbM4)wzaqxAK!E)I;q~jH8s}2=d(~YqmqzUu*4K2R_;cPf zC=?mbW$ca4cYaCs=?2{I3A`}4=|w+KvJ0m=l=%W;o0^IpuIlK>-)QB5l$N-HkTd`B z?lrpY#+HCi4Va+gjZ@&S@L@EeIkHy(kMtm7YNgu1vf7w6!ISJT`1efs6dh~r@DAs( z6>N$Db9-xly4ZR!ft+e$&hkRi{R<{5p!&PxdpfH#07#9*Vi?}=uZa5hzc4(OzM9|) zD^xQX6;u^{34YfIdrIJ)itn@-FsB0l_b1IQo5UfAh~#r7dt6ogoBRV zEqkC%h3%C9$qLX}AQsfk)hB(V5vp zLR&&IP9mKVWWFuVziIaj7rtGKLv|R_onDBDOn=DlnC@JH98ha-|D%&4yua=|ePj1S z!lN~u^7BxMrk)`ipM`hj_?>ziM|;V5T!w^jDct=n5BMDzKSPbg43ee>=i=l4qbK*< zM2DONmI>buNsG6w@(p9KB)4x6NS4`8(7#t!^=SW=Bi0}AI!-a2*SK!1V}(dPO{?U* z7C~mo9da)I$%t_Bp_j?_Q?60qYhnkDo=L}!z zidAPr5B*pXJ*`*6s=+skp28^Bori+3-jWyFL=|0jb}o(|o|16m5JAU0Nq5g09RbwBjd!pR`XZ#RF*}c`}c&=GfqGwa&j$ zsDoOIZwRb7A|(cHHFPW!FjSYFj)J(w2$ZQc8jPW5lriG&uQZ!shx5UWJwy3!XjV+nM*9{ zKjRd_>c}aq))oHow+vOa4bM+^q5~Ae+r{0iOf^3JeT>djTxlWkWw4!7oKd>3JmtCl zF`7}FJW-D;3~$}03cR18_)fB*IL1Vo^F$mmB4Lg`wDEetka&R)Qf}5WFxbo#{7~O) zNB6U;m?)&MZ>ZinL9^VWmz;Ox?a!K(&TavFT}f|G24PS9;R%7FhO`7s(lg zFZ&Kf1|L1IfT;Y;EeE%vZY;%I0g3CnE62Kh5oXq6&S)T}XshF`(OjyjnD4iie>;#L z_T;cEN^auCn8#84hj7jFb93LCqxYoMc~y~o9HiJ>JQv_wvVA1~xlfIz;%e-vRg?Q= zD**vl+!J5i&h@H*SvmL4&*V3uDW}!pn?HNI<~@JK-PX^6mBAA>_4Fm4!XvR6 zPro>it~rYuQ>BK6-VN=_-YE&io~y-8YZN_}8?T^%Qw`aCWciT+6s`YuCTMG|a4+r~ zh2AW_a3520nCVk`S^Mji zMtzSn$ye_~?#b+#0xzZ$7=)r#RL880^htSDaZJR)&Lvx1v6M)MUmezQ!z#D@E{XH# z%%+P1i}tNsV2ewE9`~Aph0M2pbX(KHZ=~qyC`3Ot8?{+w?YeWWE&%9f?GphH`HS4= zO;;xke+zaskXK*|+=Rn^8%jBlu4OHZyc<|LMYXqwwCVPt`3n zIRTeHvA(onX2`2|iyo0&kg@Eq&dL7b#l;h}ej>F+5QxBxJH2BH#<*t^1b*k;$Ly2S z^pMK?`obj4xVX5$nmi#@eOcQ%U!2Vu!FLiR>O0qQ%kiHHf#af=_(?AVt5p88Ln052Mo_rx0$u_H zK~gFS^glnNZJcQ&&95n#%pSZ~8k_2~dt=y;Xlf=r|nla!7lQqCdccQTFn!Toxym;(VGqMqt_9e!dqyyX$U z@&)}QO2;=42QV5Ld233|2XFmL{Su-r=^eM8t>oC`*r%pt$F)Jhi^jHTByj7wko#OU ze^jYy9XS2&C2v?ECxlt@iKz5ZfMs-8%=7NqZY)qzio1!9_E~ z?YwWJD!Bf?8$fkmT~Ec%PQPxZ(UANmE6G(H;kw>q6Y9YZI*~-@i$>Nq_U((`I3{Un za;Sjgqb=bm8D6^9-@FDfN2+u?Fvdz{W8wyMdV3T~CCFWIz*yB)l_JEM7;$@enB5Pb z;qcv8@R;DV<`T`xM-Q9j$y%-z^;mjM@1-w+oB^<3564f}(x0Al79b>Hc?`CHGKn+l z=C;0;h+WTBDxv_2`BLWv2KJR-E{FW5jfatCc)YhL8qz$;PJQExU;Q;OYh{X<_dF)S zcG)~I4ehiAs}lb~U<$ zFXZxe=cF4h;}qPPk8I}YWI9BnhkaR=vl_&>;3$zPeV&0APlf$5KkIwdD=4~H!hHg8f}-2abgcImLj79B{?wHvKt5j zBYP6`-5x{#QyV5_p9f`=s7d};!SkiV5&kDNV);YL6oNybURAs{5_=-)w1_n>&CHdi zU@oX-GCe|(FmXu%+(8vMn9x47ug45s8R>OK6xQ2>{@8X-do{2nE7qvU#%2KGRG#bq zrT8^&Aex1DAa>o)YqzS&JyZ`myO;;c2>@3dGCxSFAnB zcxy4M1^UG;pm<;=k!Or-RZ&595y4LAP$+kl-5x*nLTCBJs$?tKX4c`7Wh!^Ly{v4# zeH1z3h-5-o1nob?;Ey}uU1K~X4)F4t;@~$&x|^GGx?2Wg8&qOHPzQ5*Sa87)&1vBg zqzRhqTPBw$)cl6t;5V8cgf|Stt-Bv^&C}V$u1_e%Km(gqDV#pKVznc%I(r8jOrg-x z-9HSyMmE<+2Ywlwo3oq+TBUu+zc}-M3t@vZR8cW?aX!z= z1C~$Ig(&!eEQ}&+gugj^<0fT1pkR3&XkF1?d}|xTQ`kk75oZ~iup$Fb1{9=TVoMpr zU3P!*@7Ed|1|~dTNzo$J5N#{`nuai*nVf1N`2%fAIsDAY%-KDdyl%ul7YYvTLZLb- z8igjYW8U-@cA|k&5ntJ_Dyq{Q7w}VqoXm7D9IAp~uFM-Et}JV7np<;3zCW)hG_StH z-X|R9R3GFIX}@)b1LkRIxVQY>)@+R8y*qK6II1M@(lQQTsiMhkQDa`c&w&T%7WD)W zq*88Rlr2vcl1wYDTAeAx_-rn>tyDj8c}66jH)p7Qpr%eUqBe7(Jn!*La41&VPHpkqC(nYHjyE$rfFq0|~%;c+vOD(Xh?;}}D z9tgbWBAf{?@8SW=kR!tym?=~@HGSA)gaRVc%#sdAu#E(Qq_O4Jm9ZzTgxFE;F@Dx8 zc!1>%w>>zDki_-pkR~JWdFl8g{6P@P+;DjAbfOXl_yQamoi^f$g#P%mK8{=a_e+^q zryQ(9SJsrdh0%I)^Y#AWOS}}Lq|b;8dbrTC=fr5_spk46Q?8MfQj>tNa4JV+QKM}y zW;(6&oBv%|i-3u$D&7^jr>P(Xs_jNfHV|L|#RAt*A0Iqe<2zP*GTNaFckdmO0yTxv zBsy_aM{Z)H?hi48`hrB05SyG=;^~fV$y6uVe;6#bv^s;@?>%dQBwf_J`7R+sC28e- zNoZJO6SRGEgA1;M3>q0Zi%iNXiuG5d>fxJHav+%j?)J*cJvjIj;`a+m8^ECqIbV zW)h1c>+8d}W~M*lQCwhyHWfc)gJhsAz-OBYXpV84p$rxKCMtxIu#&g6L z!2^$02rBb{dd&`}zKulADIvf0Fv9^a)HY!?!Y4EBD1A#sv>8_r-5k zlPx_17x@)t)#I2cj7pF$#kAN+Y=<8Bx$E7N$Mwlvqq#0)2Q{?*7%ntFP$jhP_hvhs z>#C=`zewb6Gguy83ZTd>3QWQQ+Dv z)#L`wOYX)s+OuKKRlK}M$9;K=f*wUPS{Na^H#(yg`_3Q+ayGd1+!!tR>|@wf$-csG z4AK}qPAmoBL4u2d9~84H-<5T2Pw;NT2WAs&e%RXv_FquIqtSpr&*H`hdH$BuT921V zD3Tx%qDYj{_{(zOBO!=xGOqgxy_OaX_o^lxz*gvtD`Vqx9vAUcM%07`qpfv|Kg$Sg${RHdw z(K-UImUdBfa=OGq9d#W_|L1WE$s*SE?pO4Z9e zM5U2@Zb6jJ`{f;SPD>TvJ!$?bP>UK|Hx7ZC^Fnij)s!2y=lB`gJ~&uDW@v%mPUIx zgsYD`aRE8_L{+Mp?AY@VYiV1DyWb%UX$S8M+C8#3>sqnS?o%#zaApxNm_G!fj z2TySsvYdke6=K78M zMt(6_CU)2MS|qtAc_*~4kE8Hbt3oH@3vD)+Lc57mw2lCI+AGQ3aC`Ea3NX21MP&lb@kf)& zK-2RM6_-C*zJLE+od0|7oL|cLc)TOM^MWt$IhcJy!k6C7z2mk9d3J)saeN#0G+Os4 ztM4sd_2NEHwuhmREy|XT2u{REJ*Vv1?ni$(qn(*6(a=OSnhDkgpBQ9cUsFJ;Z?bi8nJoRqQii)2*T<)@kEgdrHs4^Ew%3tUi<9HaP zOsQgrukmOELxV&U7ggwAxzN>580;#4R7)$LJrQ;G4UB+=yvO=S5K7Vma1z)or7f<9 z;WaTU;uE}f4LJvZCf^+9#G@JK8evyKBcD&w@BCE37Fj>DR5;0XMfuDm6-@&r;M5-s ztL}d6PcCVDLtY2UqAG$W8$-_1hW;^GU_!6=s9ww>IAK={8d{DP1ZvtbaW%*gnSMHxANuOf?a z@71I?o|~_6aRn=wVLQ%!IEhTT7nC&r_jIognv`YAMaVv}gjC!ZBsQ%k?%#wdVFqt= zynq$NEDHWs2P^(VOJ#6^3m3J5MP zH&bHu%vK2tc;>eyrYLHqlR{yH^b2e;qP-I=z=(-Do$b8LslWPAh`a+s|EJ%MQBG^v%EKT-FeDziEzfy}DT7-vVpZxV~xT-9jBIuv) zHcK^JAyBErm8Jgm#apd{iMPG~GHK^4vYrH&J1`)DfWBS(pLVzJk94@sA_Ai*m7tm? zEvF=vcq^9A9V2wI&(b^WZrZtOa1QUp7II|ddPwcGBG2dZzcv5xrD-XYD%6?yp9G#^ zgvFl|0oP0o%QUz=a?dOn$PVu@#%nW=$zLK2bn<6=SMRZeGG6$~n`B~j;e!eJjtKP3 zyDA6rgO2FgBL$E9*3fn?hdHtFeGRs)z3sdePItF@!vDOfaA=S@kq2w7X{cvK`5S4! z>ryix9v)s-VFH?xaoE|EsYqwz_E5f{UnM7@#+x@83K}(j2w(vwa^8+u?q0rxC|&DE z9S-mR3Vfisfaao(v>ZyGQf$I zJ`v_TBxg52@p~zyuhzJh6$a>PUZd&eCd*|pD0L6+QNVjwW>-n*0V=*XU!-c-?6OqxKaJa4aN8;`ysLK`O3R_ z7&e#^K>UMQV9aw(@ zP>!a)DEpSp8nygE4u|GNxV6waMUPUUn5_B!7b{Z%0pVPhojE4ALa_%fY-ltsU!+lq z^tjkeG}z+ucutr26z>cY^oGgYds*DbVf^G+_QS!|4Ftto${IEQ%dq9ozb!9$E>`i7 zHk$KK57B_T{;H%P6*4yK0B({wCa>M3k9@;E`(hspEEbvtXNzI;w9#`Pat`0ny{OYg zhq_)wzLRvUnJb!jXJGKtRZnuV6k`Z55n}S2Q$q+MKN4!a^`UIZ;qhY+U`Q;#qM+_u zWIxu330I~im} zoVsv&+}kxs`Mm}&R~bsr#T-pUd#QqA5QZOLPaBp(8F5OF(>f4rENimSh%S{ED)ZPd zm3?>zhQ~f$^1nOU1P7-ki0AqB%xc> ztT##yJv$rpzuUll4I#GkQU(`d){9uMG+|D6V>BVTYAxMFARh02QHu^MsD(G=aW_yn zi2Sj>!Qv40$l>_oatj)Mm|l}0Nfydf7SB5RO2dRJcs}@wOIhDg-ri`!VO35#=MxRZ z%k*)EN6ucRPdkF=RY^mCCjtw1QUbhxs>b6q5X6}iceS!Y-)xa1s%btgE3zzNXSJ8k zch4cu=usMexLFW{jFCg1li*Jq$H5PY+o%rHJqBC_6WW_08QFqP_18}&!aBBb5*8EMpI>uWIJ0rrlm7;Y6 zm`?3jwh3t$h1PyMZ#vFx9%yJguYGwiq)@-_HGJ_D(&Qegh;DoAs=GmBf` znR>g5LvMun^CZ;F65D<{$iUic&EC&@xh2TVx#e)0V|($RS}>VytOpyPy2WuU`Sf1+ z-CpUOe>+58rXXpmSh!HtNW_Y9f$>dqS&nSITunG6{}(W58vdl%NktIF@9mbx5DU#!$hR{k)J{qRi4C z{C3IzOoPGl?;fHe>&JH0$DCs!OZmSNCP$8uyQ$wUitpUtrJ9lT!(GGIym_l19j2W1^Q&Z{1SPl~~{{}nhm<1Wm<0?P7TjGooExty<-vTo+rK7$FJ zD9Wp@%l%SKn{eB{1t+5}HEYK&pM)(IHdWwD^B)RQ{P8!*_?ZVlFz+KzA4y4A&t^AI zhML7OR(|cprm{q!e0LZIUNuLyt@F3%De2@qE6Q(vEU7c`pH~>>DM_mX?{OWv$tLo( zVXNlbgUhGpR+JEeEVomHfHGE`rfb0OKk4fc^~Ptau4fLf6@A`Ddh1i zIWM<37>WPvJE>o*96iikooi9?{wV>MT(B*+JX>lGaoEuj17cC(;8PfynlgT&3M2*I zrLre5mX@0Ndf!;bo9Spb9@>|Y?|o(sV36KjHBlS^6d0SD;uSiKrb{{a^5JyNw3U$6 zPTi>GA^wK{gI^Jld_Vo<)_Nx#!fL@P@uA8H&%(kh1dm+hOu^C#uMCAU$fkOMIN`NS zTu8H1EKEs?e6{DZfh0BH^WTx?lp7r?BcD@Sj_-cr?qU6aO|pV47}(%AU;!$ITn^9~DA zqLLd9Npk~!{Aj{Y+x%~hNrCS z_i;BIj)GGr;=ZXi5qp?j?=%qQx~lv#auWlFVtmE_N}-~X^Q@@jL??#Iv>p&Lr)4GL zAOar4%aHnqWipw3_{S;Bc^c{~6Y|PYij}o+Dj5Il^%Ar_nwQr4c7qhY-s+Vj%Dc;) zI%g^INjongRQdhh43;6tQ&RS&Fx9T9}O6G!l$_d z`r>Ge_~qd}p5VpaOzifr8Q+xqGQabow|E@xR0IR47(Xtd^R1?(rCoyh-@KUT0oU>dpcs*64ad3} zc3y4U#Pc<%=5(P$oqy|i<$M?E!K}#=ZItVyhB}MKl8Xcy3?d5$;d{CTGKa4e50N#n z|J1r2`k?7OP@L1SZz9NI`E_sh+@ajwmY05r+dq@DCqpe`1?F-?xVYPsJ3o<}XjsT$ zZj*QTJF3&OzS7Cy!yv*71Jtev!nqI(kS_UpEI;9e4QU1*^;;OIi;_2t7>4aTPFLe{ zJL=YcaK!ttwoQMhs2p;*9N9+?<~F>cBBLR$s@i}vD^_oO$!Jcl6?iW@a^7pmuf>U=HKRRli|O{u8C&npL%?$~C^kGe$R_nWb|7 zlsq96Wk33jNr&(zyYhfz_~>fshWjb)`GQ@SNH%0V=ZD%31`HHm_i#+uzld@$RoUf4 zfUxCVpUghhoE0;i{c-X=zK>ssyb0p9F%m_?|HRtX5c{?-Tv_D*GDL4K92}?P+{Se( zllM&8OiCL>@SKQ1Tb7o;+y3fLocpdDgbuyJB&b>7-Fd5EeX3gxA+BuN+JFa~t>|fk z$2V=_8Q(V9UF;SK6q78lcE^r7WSg_`Jesj@G9My+Aj!V$e8o?c&_+dJvddnIOK!lP z2PccrsQB6@0TjdnhT~w(*?iP3&>1e|@v9?}Notb0`ELs^lH$!;o#&9pgafhhUsZ@A zr9P>ojv+-0wTD|p_C>7gDi8^SNkZ_PQ*}Kd6qK~F;hsKr@bG!*5CdU9Bmr%6Ch1j~ z(?*j16jSioaFOuRpdzS!`9~s+OaLU#oC03d^O+U;C;^XX8$IteC9b8Em)@I@?1WJ> z>X000Kw#8?1d5<{OW48k!`xpkkAB~y2|~U>w8NTQIZ;gahq$Hu*Or=(o|R4j7GDwH zaJ9rD_U>ka?>)ixQQWMo<7;Vs;ro7eBDf+Fuaz= zT}jK1+b)8%?)V6`sCRIu@!V=KLu>dUHb4+;O3Qh4w793I$Q2Ndu5w5FWpRL+q7!h2 zd-~Ir1gHYDKsPil4`BfUt^}!Q-%eLyhay>2>Jt-Tm;4C_6R|PEcopOS^d5Hjge+YZ&^K(a|XeGP?ybN198K zAU?HtAL5QP*n0emW&zgW1HRL<&H$nh4Uw`6POy?Jm;@#{xfX7zwBFO)=?6)MofK-Q z?!+S-Gnw~|g(trfCbQIv)0NYh0$BN04Ho(MYJV4MU|W!Pq96vc{MF3;ubPW#6*}?;;-bz>F_L)xndeOmE^dB%nqo z<{j%NXNAgR?NpA==z;Qofua72J!w6jkwd!Q%WzWyL!|JiMc$ZOr_ub6laS!2v2&7eoq866Iqy$Z{r)7crda5NFtHbN2A-`=Z;gIF$v1v=DAWr0L>i zcUGv%aejgU7ahRIdUHsEKv`mpJ7=}Zr95@tSnooa22_a*hD)BKY{%xmUOww;_Ox$0 zHlJoJ)m~~rx6(5c1~HPQD@MT2C#2R@CU?$fTzS7HXjaDcw^9rkYzX^0fs(cyrZ8Bz#>))6E3Ko=ieIXw4y%b0Y^*0XakiT@BCwN@oSt{YH74@Y za-3O+bwTf^?L+xM)uAS^)QYvh#Qg6(+patN?Wwz2*aeWo85P|>@Q=G9z+6@5z7NyI`f;{J#5Z;zxIyOdG zcToP6u=Cn$3o64nI-?&}@aU@g={Xh*m}5y=#^&&7w%gOg`?}u9kJP;MChL z8LV{$>R<}(n_i5lDv@ov8eUD*Uh_d^NH)o3y!ztHXTw$+HCEcSyV`%&I>I zkBYJuHi%qTE;WT7|615Rad%}GAPTk{7ti&&IdJ;%+xw{+jpw4gF@M*t{PX_bCjyDv zrKT~C7-9Atgok^EAQK0{-QS4i-3x2mZ^vu-sa_R1E6DR^y? zpc*@4{~D7tCjB+#twb;W`Kv}%c6Ro7T6Sdl+|Cd6DFEmfI`p(_KOYYz7Ld8xza(sE zB$m3l;O*s=6Y;4#mi=~3gP`r?S3!cBwoMNmB8rg*b2om}Ip(guZ32I>CHa?JCd}x@wubpowu{9yrHg9V z$0h68;S=Hq4d05#SmV^qu28usVy#M(tyNZ@9xynGRHx;Sq}mVsvWc+{*dHfTnwksu z=UWjXY)ELOSYg6N+BgHE1o80%MOz%YtL_n_NZE!AjxxJ;zC+XoVP`9w^3^a;fCI4O zL|hc@51~v?8oyMgi2>V^1V1VS^HfbD?gVT7C(7guqi7zFDIfS&1S@G}3W9Aj>t}aj zy&sz->t4ho+S_rcW&l2FNH2Gj4oR|}*qer(Io60R+)P8y-BY23JUAxY-)@2ES)ih57&8?%u-#PaRJ>l>H>s@H@%QV;oe6YUj7CbKz$ih%<$5yy^s`T;UuH;f3GqmfcPQI^{IA|XkW2voqntHHw zv;PRgVugm4FV1`e$PA3Kkc%B#zpJd}llKahsy1ZM|HlU!s%l3c@MVw*zBqC6>*(%9 zNdFlV)y3e4{FVg%>`5rBT=@6t=39U2-=IqhSwg(`g&4@EU*=|YZR6qJki%bMghb^< z6KAGBB$$l$#+URsTf1AnK{cMrLfN0Q*GQnCvvNbS;ol#BvF^mM3h7l=A8hzh_XDwA zO_wY+@@6Sk)QbKerp`L3jXzrZxCOW1TA*lfiWjG7p+$-WcZUKA#akST6fMveZP7rn z6ao$IP@oW?xVyW)`Q1Br=KUv`OlFeJX1}{<&v~BbLoy;$`xf;yXQr%7g@W#=kRlb= z3{vYFgdOxTAH-;mQLs=NGWapKAHPlo+JmM=LF z4Y|(zO7>5x(+5j1hn=-09%Md>>MxFi$1sznT7zg@c-3lJ4%^;Qt!Q=huW?#{*;h@% zSrO0S2W8k6Pte$tSM#wo43n9W!WSp}uHi^c8-K+N!u#dAO|OaG!M+5AIA91m5GSU_ zNIoH7PhUsFeKGX5inSU8fdQ<+O`?D)Ig3>Lz3!$0t(7<)Aa$wWWD^sRE4eASa1rkt2qrrk47RTh7bYWk4y_)Yv`Hs<^C z&gPF3sUWJBt1hZN-kSEV-Odqg{2*+*%A2z9SI~gV9KW-;XXP*4Z`>o@;N{27pNshn z-Cr4ur!M3^6O_I&tO=hY8nePdm+%tdNUgVE7F|o^of8hdK=tBUow1&Zt?oVw#sDm_ix;H$^4)dLJV$i+}Cvf zc%hip-@h3Cu8WK7-j2+|7p4_iiVi2V_3i44Ppc979cM<8!B*oMJ8M=jJR<4M@A5~g z%VC(g(4ykHQds&%CjVpZXUsa5C8~8cVyH+5E@w?Ii}uk!Re<+)(Ylh$j=04plM#j_ zY2bP(>1>)H>ufaRsMESN);YxJ)X0AvQG=v_Rad3GHfaBG$6;yBA|7B{bd$J*t z-ejEeW}~r}WJB^uu~cc6aea?Z{s;aCe1tAcp^5|c9>CJ9OlK|~ygmR+Bp1`nkFNMy zM5I6tWv@=i)uThs5!oek)_i|%w*7qf^7p1Wq42C&>oa+Net`3JhAw%Q^qh_5r`0sh zmVrsO-56RkRH@YH;Obad((lq8ec>XK-_7{9xV}+BbU&WmDEn|lBFd@sM{R%FxA%B^ zX~GRH<{@Z4=|;(sk_gN9<;*;!+$u*-48 zQiI$?Sqo|-&Fay|ZOzqk#-x^yO;nGO*r9SbgIF9}3-XeDqN042EtdmpXnF7|>u^=c zaTb@rK%7;I`*d7@%pYH_Gp4MT@15Ad1`QG{)AvLBtoT$g-3NqOqx&1#8V9FA^jXTA ziw{YOz^PV!{7KkLBl4V4KB`8~Qo|SQ({F<_H0xjZB5FSUxaH!b6VXJ#T9MB4(0O^u zOh|XMnwh8RSI$bshhsmx)e9fm0d2HoWr>j8rt~W6O>^HCySsc3TTWo0E_8*cMt|wm z`>$!pyx{jeL-}rQZnA;KNblCsk^FRfVQc@ROF$`XQJzfDL@#~HHC?&5-UbMeF+ zJIGHhem2Z*@Lg9i7SkGQr(Jim!hC9WeEgJhHH(tc*-kvQ!9SU1GpVOJqIMMB7Ti^A zhEh~#g-}65W21hs$Uj}jaGiWcK!r>CfQ6Y;;l_s{H2Rg`Od>nQW47L`8KjZ?CxH`~k3`)}L}UdLrH3ORMEaM8TgCDf5w-Y;AzKiR36s*aWgRGfKOe}t zcCsz4v*NpEl(%Xr8JAj53!+7ko7$s;SVjLduhZ5dsi-g37O}9g!TYR1TLl#(ZY&DH z&m2$n6-6`>68tv)sME|h4?D5!8?2Ypvz?9sOB92T4MzAmmPMDF^TK180>5|KTw_|> zq=ur)o{w&G&sZH9K))+bIVv{Vj>L^aEU6x=A5<>BD@w2ef!Xi1H;r)Nl_L$J+Ql~- zGLA9X43Sc6*as`Ned~Td?*_OTs=E_DJrTm7?I+{zrYcyAv~WZH;n5Cwg9)|ym%K_r z0X$KT>erI^^I1&SUBDI#+k!{m)oDAT@`i5}%WhFs)j~ZX_9`0E?FzqRDqJP)CnGXr z02!?!-QVX|D-0u=OJ6^-AKkq2w%Ew=jCDD({y0dHZDeGAi?>u>p0O&tmhr_-(SI={ zok@rq+jFmZsD1AxDEHX{xsRaMI7Dr{z4#s@vl9@0?-BB%Akf&R!7Aq@r6<7~6UHMB zMjMuWy#%n}BYBwU&5}WgX1s{G8kSmv|GthE{Z?b@;t8hAS}Ga)$rh}8_A4P46MrS> zk=>0b>tK}LmycrBwi#JzMs8}9!4ML~aK1_-O?`RmVZH}O>Q;dFFiuPXb5^#q80w$V#jmm^pjA>fubDhciH zAHd+EX?;wQhydI}rDlS$r19tm5`HxwE&RZ$vtF9><>z7+$Oi`5ysY$Ax>L3=oz+AQ za#Nb%*d>Gm!`@i7tFIu~Rh%H&rFG#9c*81R=g#fp!pPA}fFiT3dYQZh14R`N#LC4R z=ddue-W%%I&T3@gZ`#++8gXwehO|EQX?+T%Uj+f!q6&^zr34f$$UCzc0({Jt=tB%r z)o=SNC)!1DwzSWX=jW);iok}n_V+oxKVqi-`7hkCZ_)^zWjv%SEa`3b@~^FZXlZ3% zA+kwGmt~UnwYRtTW%>jchmr^iFg1r}{YE|$8q}0P{-IL1Kk96Sb|@tkohlg#kmjw3 zzhroP{K$-Ly`E)yP5<6xk%IG?Q1fNjU}Yk)e;d?ZJ^JD+z#`=>0T?v#4yPW&EWH3$ z%AYp8t@y;^a*^!t5M|XeN=uffANJHYNRw*3Ho%z_-Wk>AJDzmjB|?;y0%ZOG%uJkN zFO6Ozk$}>WG6${nr~Upl5hNuvlE8sp`DUwXdMPW@dD3!z>pRNUJfrUNP+vFE#eu@Z z*v|}Ygo9B4&KrfD28k5xA>{clt+n;!!`1pDN2aH2JKSfi4877K0gri4yZjZ8;$1yS z%a}da{TGyXy8KCJ*jtuBm`k8VrSf{<`T})r*BrfvHRB4qM8?MtusP9XQqYu~-Z1&-{?QmP zw6;#A;^YjG($ki8&Y6Ea&y&6k`!kG2SR*Ypc>lIkE*VJ1Df!UD*%qH$ypALKt(IjH zYvhXstztE^P3*k$W``~4UmC-|KqC9syh%L-M8in6_Mfr3FxmAIO!sR$eI)d!fK75f zsiCMac?S!`h%msISdT&|;9KkxTc=Guv$8KC7te0S8G>X69dKow?jgtp9_ar4A5!e3hRgii~3$Ci&{Dt-c1OSeif1EaBpOMAfZ z+E^r)I)iyTD~k%cyhos;jnRF_+UG1>MCUXPdZX?f7M@@P>!1_1AkXSjuK#7&egjvv zl*H^nbw5@`f8$;3^&X()$o%!r#AFn*t&R0=`M$rWpcO== zod3tfHybMK5_|sSS(jxPda)rMywcyA?z0w(FECYM39UuhIe55H>xeen1Q0CzNd^8_ z=Zl#qeKi`hZPywKHFDGx<9@s6e6)fT_?ldpFNQhwbs}iLAu^JyhwL*+@lQod_|e4Y zO7}qD^?%R;>QT&fB5W|))6|n<@^gV^F?4iNH#Z{tO-h2h%RfQRH-1!9ts@mgdDZk- zY_wT>P4p_U=S>~INxJRdZY>6|gDUA8^?jDHM43=j**?}$@6m_~AIUYepvI~n;FDn` z6IY}6#YT7dySUpFiI4xD^GQ6OY1>vD6=zXlUWVJ#Y7}^PmIg{g?fi-5Ibc+SrpsdR z`JNqH4c`@;^&a*GCgv@}YsVi6&gX5AW7}JKna(~_zG8NfeSbyaXVc(0-RI{EGVkAY zS)T2>@2{Mg#f{Y5Pm+^?#b2vim%~MLJq577__Q(geL}Da$`K+*=8lNP%<+F6$aGDP zNxX{dwJ4Mpgcet$yzBd+yix2z7Q|g~Ava~1LrzjGvW{6=7IUnj;X7D?&w7#m{uA8` zz~#$x*V~E__CuTgv@ASglp=(}PJpaM=7g^0It7J;^GI*Y=X7e&`P)pZ~nq54TrdXfas23XVmZ$zW#fh|Vzf99~O^{X%2L>)XEm zmKUv*Qf7$3 zCs<~BPQ$s8DC~sI9R*R47xAXUX62Bb?hv0OaC#tyMeEpnn{0Lk{^ifRJ|8=Ze+{(+ zYiL5~F9iE)ex3DAJF7tl7Q(EcYGcXpWQF~(kdkhoB6-{-W-sciqb%0@C3NiAn^sM- z7w8zxj_Wq`TlJn`+H4fg;fvcO_}FwJz1Y=>*~qR0({Iq5pC4Me zp=c)P#`w;sMUA60(lI9!=8E!iPy?5c*5}&2GVTLDyWya4mFS2_}6B__Ay=dz*))U``%;f z=s&ynBW)b_%luAUpg6aOyTofSLe+5#Ke1HY(b{h-k^aTe*n3_uRu&KFFK{u&;5hO> zXXT_wD?|4_b|>S(jNfDmum{A_YHLYl^sV}rqLQuV00rHC$mb@((Mi^B_3%n^lievd z)Bv-o`4ARI;LsNmvq*fZwFtE{qXgQGNw&7rXm1i3#-c<3@w$Z7%qAE~4N|mDoZ7iq z+P`3;D?RN4SS(YLvmDz-W?@VzEu|rZrE$!Rdg6kZvMb*FkiU${11@oZ)7|Ue>b_2u z!m*8YJFviz{NhWx(jYiG&l-i8q7=eX$5OG7Kg<@6I8AfLFd3Cyas{lGALY|p_+0Dd zC`pA?ej_7}K(RRtZ>m++P_Hjc5zvurjbS%5P%vH=Bf;;`2<2sju*#DV2Pe0BCU6Nk zeCM9j?85ul1e1=CxV2y{Bair3u=c;aAGTg?ab3a_)^O~dtFPaX!f5V>`Sw9FhXu02 zKQIXuifp*8;-%u&S+XxBkGc1z5Q(b@)R}=@>$yb^2670FftH(Er;5r-O3I9sZj0z* zwI+b)9<|0*Z^7Wrbm8^^MR(i3JGDL-al~*R@V!So7zm22fxIAss-f&}-x$}^@nuP} z)a4q?^MG^Va01|QNB>b~HuDaZk?@7G?G~OijI!G;(JGAk2urI9Dk1%pF8uBs@xIk2kNb_~3o~vABC2#{;y;o1+%}ItPVAe!(g) zcT%C1$%h8rcNa_5uy>MP8{2p*Kle>5(S}wdapTZa-EKFLO$o=LY>$7w?sbasgB21& zxxSEs)qlF~OZPnBtsAqsT5}78%I4(Cug##s!zW;Px;e(_axHUfvxeA0T5;${4c00? zPOwi2w=hz|KK8RdK3Jq_zQ<=w{(*qLN>t&|;s?On!{s47H3GQTJ{?ZK1i;LiP0T!Y zZwp^F>wq3(;KAXFcW(>c#walM3}E`?M77DATq34&FXCLo{Oi_e;^5AemAbFvW}|aa zjUNAuH>?Ak1^5}+eSE-j!9HN5W7A9OO*P=5cQys=9vzCl&l}>Tf3-rUY{}{I&i*p1 zh%nob&U0)8-6Z)dTK6BB?aCmU7%c$nnY%cA3}u|TK5gpG>t@AFyKa~Le~5}{ zSVPpu@#UlR--4wJDND{Z*kMyux)yR?hcmBkI(gGjxgQ8$EWdB)D{^%3+!aaA=OmGDVr!)!5JRaZz&M=c^fYl9@)2zZ;M%|5-^Qqz_ob>l4ybmJd=( zrtq>}fuLhIhIM>g+}54*N{LQ@Y{`H)9BQH{R8G{2r?X7t{YUhEaBgl+t9=l&F(*9= zk!_rUZ7bNBm>)W0(G7_30kbEra)3wpp07<>Ix^bU6JJMrA`?!Mq%PZD{0#B~DM0)V zsoMb&FR(4T+`>RZ5mm=YGsr zu*G!Ya9vRK^XF+9m?n(ZYa*IY?ZHMx7y2STx@>`x%eo^jpw07*biyCqoMP=4BWpE| zBX?BCCxS~kHlTD=XbNi3NTI(X@g};$d6{q&3U4N#PBB;_)98<8RMUZ7@|i{WsHv{4 zm#9(Gsu$lcU3Dh?fE7PMbBW<+hxC=K$a_%W8l`Yo##fl&2ls~+rk*^}bUv>}bz5mW zV!<@UztP}eRSBE;2`uKC^k-_r@16GtF~$p@;>N2eQx#ZCp^1crpd?xS!}ZwJ~i19fk**?^iLL7;&A- zV2!qtGxBgW?2R=WQ{tN%{5e``?ch-2qq9OO&3Dr|{6ok)=AS3ENi0YZl=L+{&G-kz zM!AnIM?dm4XLy?@I{WuT20Z$%f15-{>Swb|-nH-7&4#c@$8x@D+ku}BsuYLz6juNo z?tOw^Dp+`JDZw1i&1%BGGp3N2X4?MWeL_jKK_&gEs8R^W5r+ka&hg6Rcg)~38e6P7 zi>bf<`6yrRw4}M<(baS1$|P9uY5Y34BKOTKDVe!bPub$Ig$~n_hS!+#`1s&~px)m4 zF5~4FZ_;Zcq_CNi%VE$s@_Jah)v6Pe+iO+%>Wjxb;2#y(Fie z{l!m?bLdkxsEQn-mUOlx@g68i3^slfn&)}_Q{G|lPP%#ca&hg6&MM8OKZ4~C)~(~J zx}6k8_++)Xm{^^gVngLfe0=jnvl!pN&(BhETMo0^9!jtWn{D7FYw86qtDs+m0T)rM zkx^U|Nj_TZZ&-nm&4iVPF8)90Hz87J7qwX8;@mKHVCaI7Ka@s65l_F7{xsO;L#-g! zRsvA+t+jFJqv%yi=AzZf=P(rQRf^=JP#9P`-o(KnZ$A*h^8I{3UG%#VOG7uX!GE78 z036#~_w5@pQZdNn*PTO2!=aR)<1v|4@Nv|)^KM|6_kxrTNeCSx&-FF^VRFY#a0UaG z@|m*57Kv0Yf^K}}q~jg8H$|D#l{^5M@UfBiZ?cvR_6I5PG?A1nZ0%Lt6JKj6x$a-CO+$||b~L$L!divLnzZNNh=z+$qU;_R&E_;a{uXuv zJBTI5gNa1_9Bn%*v~WRH=vb=**4S|@drxSqn95Bj{h=l}>|XVzQ~zP7pC2^*_=E#o zaOwPgX!OwQ=(7N1_-j~JdqvYfBf+NqmGwN}7e2F`+zM8hQ$!6I>Tn2tj+@-311qMWqLn=8+|hSZAjZX#cPdb<%KE~+GC));DZ$PIUjx0JZa{q1NCGA z|49!@gJf`Mdk1EZgQk8u!1nGP>7goRV%h@+tf@}p*((*Rfl3+ z5dOncvfAldg9Jgbtn`3;fDmFpSX~4F>!fgxBbdHE%)Cj(OW!94$yjbb_Hi{d{dQq|47a{Y6 zNVtE5xWNgQ)DQ3dSsmn)>eZ_>h#y(+`jKz=HXQ7z+jcL-UZMmRds0nL3e$g5t&f0Q zPmTRDcq@6K-NxPX=3!a;=mcPu2dtsw5m{d&fTm`_hDJwWfA6EuhegrXvejv+#i!tX zEs=@7u7A}Q;B>FI^yt=ER;uOeHcWV^-J_$}=J|B?a55p72)$-R!k|e_Pe9nH!E*8I zMf;vMsy!!rDLrCHci1^iui9lED!QESW5R(vq+~$-`gKxP#tce)P&W7lI1qYl%RAWa zJ|ym2jKG3G2WK_W3FPM7&SO&HTf@w@CcH3m9r1(ouekA9_qmJSXjV`(r1mxr*!G2s z9NFj%PSAL>n!ni5jRswz>6>=aguppe1?oY};7@G2Fgx6D&Vm#BM!{UYx-Mw?N_cRI2f7AixJlUUX^6z8c?(f+h#Lb1S z1jJw^IB7YdB+;COwo%T3>8itL*!PllgL%W&vgZw^pvR_hZLG?w7BU5e(~wRA@t{B; z8|My>wDj=IR*xNzpNgdhdKXAlW*v~TOyRG0bG=(u)=l~Ye0S77K8~MELjQB?ncuQ# zxO7h*3%SDroC!>n?XaS?&*)&OaYdv}FXhQpbJDZ^26hfx2}-iLcOBRh`NHPeLs^Xx z{XiZe$ZmSM_`B;rT0Lzt2e`t7!2JFvOY6>~ETh7+njmUAJkT(!3=$4cGoQ3~@Cgz5 zW^}Xk-irwvtnt@OGD6!t;79ECIaqCwGlvK21Ae5*HnAcDJ79L8XeDlx!w7adiaP;l zoBVv&ybS%K_@~E`eHnic!{oCyt#ghB3gI=P_7eYhjS z{QUe;zdswcyNyx2F|!E_TtRZk&JS1nDRif1@uCqV+_2Yc4j*7Y9~{0cyA4{JuWe~x zsq~4<0l&1Nj!QkW2E&x6Qp1lw*u{MuT%Odr>NH+O1CS&T_lxnUf8o3PNQ9xL#Tv02 zF_aMeM7R-~i;A8;E>O1GPnbL<%j${)e9a*67iHfhJEzR*dlrSS`;jq=(z@6dy5hP~ zUXJDRu!sRYJ{GllV>1AVXjr-KxjHWD8vF|_n?AV+leVv zfHDj^i`Dvrd%{C9ZJ)e?L@*NILIG0fkAu6*KHicr%M^3r;L!HT?r=HgX9-B*6Igvx z6m|beY}GnHRa{gj(-t!|W<+!Fr+|#+{q5U7^1)x{wAwB|PiLBrb>s#-7`@(HdZw;D zNo;mi!NIqYsR-Kt-5n;~!BYFdS`giPaX}H#{^m|2@r@SEaq>bOvxQup-aJ%qcVZpe z22G@-%JewKI{IRvm)xabU{>n2tZjf zw*B6%{(uv{Aqb0~A7?$N7KUO9(;j6lcJsfAhB0pCV4H=Y_`$|LDjE?Lb}F@Xy3!cC z7}C^2X84~NWiV>y?(XL9v|RrxfpcU8TUY_6*7->rit4QE4KbM}z+-~iEypeb+N;k| zIe17>6_MH??56pb2pN*whg+K?%)eND{Fd}UI!4)x3`}e=Ciu~fU}!TT_K3a#%4||f zU?qhd1TO~O-<*f6ThBchsc1ZzsLg)AATASCC+d`mu`*ahUxoh7E<@ zQ&&YshWeh^8OAKW6<#=G+!UWVTrKV9o|l71cnkpWHD$ zRfUzk6=9drd7$hCL0vB5$AW3%2AIIsG&qSlVwo;_V&R-HotrIL!&QIz`xpglT*+|$ zp`ZKMB(^#4Ix%yxIlB}Ko<}DGP_v(r)gC)Irh3(o)<@FxS(|gGgQ&|n(en)o8RM;beeimf%Yq*u$ zl>RA^faP&NKjQWb%!>?c%@(fe`ACzK=~^`cVh9%_B5wn_Kx>oD4(lXijUjW1Va-I0 zQ!y^9m<1I!zE2OiJ8@`%p<5sBEmzM~RIoc_kkEo+8EX_s_77%B0ISD*cv>OYIx|OG zR%F~L*98H|YFfiZ()FINx0~6phW)Y*&`kN|&=Ez?x}f-0tS*aNFTwXz%WE=zwea0d zZI5r1(H$(+%R2e>2bSOJpB?)KBTA03pwcxuV1;+9>w`;xbv!g}RrsgJ2+?62FskzI z8MluQ`|-lQ0JqO^MULqd`P9b~5=j?BcLxW7kqDoN2oTOoR!#v`b)>WB41?l=MAJ~{ z!)Xl53U+zSb9({nCNs??W+_j+fAMF=wY7*NO4=#D*2vJ;&5WeU6(Hw?ZhRlxu2JfyDeAR4|_?EQ{mybe(I;=D$0@mjl`x zjOm{ByC!VVh;>R~^#yW+kZYg)tgZxGy07LeUO9e);k%oPRx7=On`lTwmg)A};I;tk zk`k6KPh|k9HieT{O263qw1{bbH9R5K6*Qq*v%u^=p%ZMa8^`)L z+X*?uFpP&zp_QuZy)&9sowxWO5Gf`Op_xg4eQ)iFpwM+jEfwr=((y}HT z;4YU5nM9A4qbfek`p~UVYO6oPxq37w1)+GCL&tgJ&#AV zwQ4AzcF=u-yXW%jV4cP(eZ@@FEqhuXK6-nQ0QZV#GF>vR5H272BbG#9b0cugCHh^7 zM@@|OhfkLGm~Ww@IGgennhiMwRYE^;H5xG1lfdPykv(k}4j!DOSkaYB>Ko38U7)rB zv&^&M&B8yq$;iJ%SjoXGIO;@$_ep(HFJCpteX!{`u5IUkvl;d7C1wdfnZnh}^ry== zCl{$r^Dz~An?BZUhRYEYrY4w)m`{8j#A$x`p7D(-Gg2`LYg2)cVGWyqy!s6r)@@OLM_HqHn9$d<6YR3c0VS!C8V| zX3m9BSXfcWzyh?a;(@uotjFcg!9=LKQ5FsrTb(5iLyEgECd?q+(a#UhPJ(WawT&ml z2GLrQb1R0bvcrRE5r0>u`aQ=BfK{4Fp%mypd=(M zEa-VFV$4&Ibg#7+eo2Hr`;XUqNZZX`$wa=CaJ0dx_}tUN|C80V*WCJHBdRWuFyE z(!BaF&$BZ-0Vw!%Knz-|;VX-fJwMQ3;f)QwwB*~g^t*~I@LgQZ@>ujI1z}rdd@N#n z(ihKgKn)D8oD9C-$XqAAGjH<51#?J$&|Gjw>rgs(Q$!(8A!<)wA((E3gh82NF5}x1 z-O|!JAkU+7D;I7MvSHN{E%$#FxcBraTL}6qPR{pRj^R>5vv7{JUWv1KKq67=;@nT; zy%t}!kFAm$W9BXTOC1rhu&-#v-#I6kph7tT%r3ym`FaAl`QHt%TF40!AkS{kw1_(a z9DLE_L6uE*IgdQIa!kVZ_W$lpC*f2TM-0} z)9_KNLpe5S7R&#;+l_8}TGE8IJP@a^j}9I9o`DQ5Q>gvchfgNqbal`YxJUvIM|~t? z&DjCAeN+sd6APB$mK->ufxK_LXa9nr)25?i{hGO?Ctd2)6&0v^jK$Aw&Cyt`txE%lH@sG+dC*C;46i`Pb+)_;l>2EHvrU>j5ku7` zZu$eXO^RI_bt}(8QB@D2TkYz4vekL(H#6hmQ#^Z-7wZ2V(twanjJFX{0)JDFPx4$SRI z;8Iof1|KsBOYY6R9jWlpy^!{J=h6=NBKv{YObAS3ylU>%Dxn=PJSG-tLPjl2jr!#5 za%(Ri-=&6jUE#)kMRt>CtJ=8+&6@mvS9vEpV z;;&!#O7cDfs89mnEfEhDl9is(Ywv!+TUoZW#h9HLT{C{MKe5y5<3j-O3@(qcA#z|4 z(8=%abe4K`7DJg8=s><}@J;X=jr&cog3lBs}P+Z~@QQI3sfp!Siw{igK_!*RuYkn@L7yF*z z;;JUc;hpK!-2`vlz1c~eo@s6Sp~JVO5zlZKw-mo()fWTHvkOm@TO0YI+bHy|2|ZuH zz*4cEoNPv@hQWdadJAQRrBp4XBC^It9oJ%VX<#N)cs*Uji7yxlXxSm`HG7{KYE^31 zqL3HeU3&>HI;AF;8|Ih0yU(ZQKGM(>gP60hbB zE2lT^64xu$Arkh0_07$nOQ*KF=d8Ah=GRp+pbhkO1k8NJXLn42?em}D?|;14J+peF zJt`8hz$Gl}TQ;#o)_SsJ4LW5+BO?N`hUG-S8~FY#iwLOLfbZim&p1#3L;v=RG6664Z& zN7cG@{v^FxS=rE1_j)%~3_*|%adZJX0;+Vvt~vfzgk*V?Sv46KhCX1lrB#GLGXGRQ zWj&+iCjdQ`B3O~Z;EyoEus*B97P|nepRJlvtK7z^qkZbVcdKrvM zWcx3towRW4;NJqS#%U!p3ovB#tp%GfVPgMySh;ImJ2ue}cgpkkoX2j*LbHF%UJW;R z^4gFJD1u$wrWuMIV~0$@mL%|jbpt*D8Y}rQn_FhEi^#F0eY6XXj<|BZivLUsy`#RO zlujRDAx%732>nJ10}*tY+j;g+bcJ?r6qYu-rsbzss%`DY*>GdwD7W>2j6n)hH?S$= zwe~-SZkN_JturiD4wz|r7Ixwbv-d2FPawKruKVTk{$D3gkOcp@txwT8 z(JyG5l{!`In=l_;BV};5EZR&>JHTI=(e74wK*mmJ?NT&B3?pa<_+Zw#8qjDqjOIym zhNen-(QeBh6YDzF9t%v7u^ndGm z&(b=1G_JiQEnO8>xrC_9_@IqZmp-91OKN5_qX5)r&HTWv++)&e4qhhOtl zxYPw0S_>#0uV76;{B4*_UJxo`t4c)Rtaf7^%sJ=4&7uS+7gHtF$UDYgTD#@-$N9D( z{G5(rPl`F-XWe|qE`ubjm&6i$m)D{W8sq%pS50a-8fDSefHJ1YcEJ!3qu=?weYCQD zM-*=4Ve(t8-f`IXSlN2;*!)Vb_2C8-b}iFnRKX&@<_Bq5+5Dwv-`uPTPBW<%Mcd7| zR5fEXvFu0<+bf*rEawFE-rZqchzwQJr-J$jW|{P zPrWm=QWFa#+KX}du19E={3YmYOoQw`JVucMW*lh}7=t3#0Bb6vfPsPWCdwFSOPW?_ zHSwREd&%(lMe%uIqGhz@OzTM5)QxSPuC)#I4VnnI+Zn zyV_NQ#-yfM&!o~*q2C)!QT)$ICo^)2NH3DJURvc%DYj9c#IM6MIYo%96?Jacd0i@4 zLh2JwKhwSVWX5C?Sn5skwO~yRVf=!+;u%O1#LFJBx`KFXQI=++?{M^I4LAGf>+N`A zD8}JE**!XhIja8on$^zB`Lg88_d z6ild#|G!E!s~_ONB}F&sGwe}0mBeHAu$%y?74KWs5F<7}!ieAnuam>eb0|*5+T)Tzq62PPOuTG$0mHs2tVtR9}221}(;}ewnI_0Ue&?(R>EO zSVl*PvB0iK_0)Ev(NTq58grFbDPf@( zqv@lZr7tmh&`K6DykFi>T|sORPBb3b(PD`!JT}W6D*|0(R;nH*Mc(}q#>!`B!N}x( zS6r#?rfHS=oSrR#k_l8Nsm2^c>~mA?G_> zK4rR-_#{$cc5|-=E6F1YxZ>WN36(J!X9<<5QxOEla&0)ODl8KpL-2c9o7dLc`PGuz z!cE4YblgSxim+26^#od#^C=v>`cfy<(o48wGx#$2{;#-M^Z0&xXv4U_b=kN{y-Fe% zaS#R73t)|P$?J;q*(tYeDrc8+%FF}LWTCPy-K$bSl^?byKU%T zG2~HO>DIyv? zTQ9UP_p*9}iI#UJ2hVf=2EeeBa;xuys$EUl@a||^JqL>h>sq)@tGRllV$DW zG&lj>E$~lA>!T0f!3KG!y88&f5o-wa11Q#tO4l#Gm5Hvo^Rx(Cr=~1avd5BrhP*w2 zd;LnB!XVLPyx<)g^2Z}EGvi#OsxNEor zFAyJL+YHE{)g&pIareB_rbp^hMF}(0Bd@rSX`Yw%CWfzmpWy{KqJjhAvOxF_D-39P0Am+r6dts@bIp)6GpL2pO_ zf|dZRkM17OeOhOgUt2U6ZBcz}MopEOpTqpp#uM`j-mdJ$9W3LH$M4OY9<*?#(tWBA z~FN)1J zJGBN29Y^(e1tqvl&eiSh_3sd}qCbn4qUx(t*hL}$3#@HvstRBP2?cM8OytP!3Tdt;LuL6A)OaEn>UyvFgBg(iwbzJ#qaIwH*VaY zIz7)~PhAC}M&l7BzcQXSF#CSR&&z3A)_-ysZqTw%Yta_`<^Tyup{}{b1x2I1t4Ci5 zEgGvZvH$;veSG5ej5#WWw8LmJ_L?w`|IA~L-;rv?JxA}fmwtKxg%=4&04x+BEXNP9 zUmhFrNB-FRg}cwK-z{TDh>TC^9P{v&#cWypZ?GzSwJ2p$@Z$@MJHBoKxtiBYL|Jf- zW#&%7YX{k=Ue6Y!n^}c16L8)S?185p_6(lX4+zgelzv8FWVZvtf1wWsBy%KMryG|L zP668zDf*K2aCB{8SLhGMs3Zg@p+}DQG7*qS z0}RX)FXOEK&J`h&Vw5H1UQSIn*k9ImKILlRp@d~uQu1kVfP3}SKcaSLhbWCUu9A-` z&{q|j^s)ynGx5!I@rh8g&4|f(PJM4sXbYC(3(V*d0x_AJzi)Tw)XPJ@F=kop?~Ue z()$i9E&D;b-WVXKpg+sF#>z+>P)(Jgbsu1l7mFLRjQ1C3s2kvYu4>Hy`^x7Bk=A%4 zgFp&V)hrvEg#itH}~ZNc!Jkr~3QK$|jd^ z`>qP1&e7*55rkkP%IyA%W-RJ}K>e5h>89EEbgekm*+Bp4RL*y$VV6&8xFN$H!n!9N zxKU&&zo1E9U#}uXAxcMR9=LnXXjx#|`BrN2$+aKiPl8)?z1|Phb*bSzd3Ix2dKJXT z)#F*>X}oyF>H#z4p66K#$~w-iW~reKeg($CJA4e%^6>oK3dF(&i>KB2`BI|Y=|8u3 z$H!YJ=;W--m4{`FscMO2gg|1aB< ze-zFmTv57V{2ry(T`?`R(1Jd9$yBX6lJw%DcZ$5l4*$Qc4;?wwD-ND~T+p0*17eA( zwe4@AR7}VUcufj=)Wa@gXxi_de z3CfE8i`@^OC5J!eZq$~g?;;IxH)jDsmAXDQIy&q#*&n~>C-|&=QIF_f zv(Z`b%7Dg8Q}7qTHX*Jknqd1}gp9E!SlE{vY@%*jP;eKrKRL+Yg9}YEBO_wf!IRzz znhn9njV5XdmOj1Vd(#g2qweC^YIx{cuP`k>yL9Aqa05oG+>?pn26jMnGC;nvM5-1lVsWh^4~puTPl(F))prSg?3}R&YgX*o zA4|PiiHtELU_4ASNlG(0{uvPppB5NMxHtKYv*UGYp?;`8SH+0*|K}0L?w1KQ#n=&` zm#Yaae$nkne)?6PFxWID0eCPJ{r8NMMWOQMrJ||vQFAgnqN>D$3$qB6nlr5Se_DV~ zs47FSu<=E224t_UZ2XJZ|7+>0!Cdbd3h3RAPj*bPI}zNRI*1-Q7}xARrAQ zARrPWBpo;!q(mf?8Zkf#M@sX%e7?W^@qYH)=RVKweZ9AxbI<#{&&xacI0F&qYjw2K zd>~n0>e~F{yT3qNgGdGIQP%9}mHJFz-EgiB3baZS{YzpjA zH8kXpHj3n>qf8d)ZL%@Jj>C4r?$X~Bed>DF74m}4w$r8sg^>OI{gz?4`c0Ah$Vu9y z*N&g8Z5*kmo=~O;5%lIIVL>SOXz?U{;thPxIN{j!|Ni;U$nlZT+0n^Yl@s2H>EWR} zsMBfDmA;gTFC6~MBXm-_Np-=JBMYmhHDvY6XEx;wf6%fyXs1cHW^ZPm{bAzJ3JdFV zP0Oe(qvFoD!8;AJu6cwy`4Y~V%89yk6mh)|*6%-^3Jy3_inZgOukn^1qH|8GJ8x*1cMPjeWGzcP&ROoAf$y06l-Hyz zR);w^I^o%XEewEW?N{Zhr-D3xN(VTxSVVw9?>C0Yxgp@l`r<5QnAIVP$SqLxO8p=9 z>UXfqELHaUR&kjsJIZO|v?rpPQAeYVD z3tktfrojlr1LTcd_rOSEI00XW@)eIT_{4ayIouHCUQ%7LMh&QqeyKrqZ+Tabi;f>^zolX} zlneo**0qp8M%_*%q4(|pH!YKn7Lz{~BaJ=egE3)?TXk=c17SPF*8``>(ZR&O1@EzT zY1I;_?kwl*&#^hhkjb_&DtfXKDd%XJLtahGg+Z~ryPiO6fn@d-bd83;DtC@8KK5Q> zJ^2oFsjrg=W8ICt(n~H)cg9y-Ln98C*)&WTi~P_qD~-xlyvhM^qu{!5Ad$iAbeS6n zWH>J}3btddcMbS-5Z!emz(+waj3vUDqX8@s0W|ZFaF=RsxyQ%fnO}EFqYC6UeY^(~ z>$YbL7dt{*HU#bapNfT(JB0EDGQeQohzQl)C#jXtxi47!ONx?}VTbRc=J+7}<)GC4 zCqwryRS>(9UPSgbmvc4qg@a*dvx@!s>NVV&kG3c5@8V6>zTjOBHpVzY@Zxi?QUJ_+ zc@6){0Q?6bz;x&|9+A~vplO2#76S=c)JEd3wuOZkUV+|Rg*VUbh5KzCE6$vJgpvnr zr(t{$BBytIF6#F8=uz0EA$?=Al8NtCKw=e(9o~BO$~}0UlMa`&?TN8RBv6v!vTAiS zVrCCRbpq22#khX);X6v|MwOUXrS)WvNfUoBavNeR?ytVj=Ix%U^l3 zv$Kj3=FXohC94x0SgGyH-P`57YFW=;?>|F}|HXH+e^#s~v0W>`4B^9$->##_ zWX1yVTQGtdV~>2v0%D|Q3I|bW(L)X#nlbRcg@wfsd}X}`$A}2o`Z|hOdt734%knpB z|D%F`@=CF0T+?v0oSGD;^WWXZXII*ODMOWPR{>~@iOg_6rJi$}qX`9XAO49ksdEYZ;yi0(?GqX*ueR5v7VnaK0L zgt;W^^D&W-J29T-l4vI%bF*gR=oRI6enxm&Tb%&?=Rdz+QNaKFQCSLrNZyU`e=dM< z2e@bbtdH-VnfUUuw>eH@^8FwGcq?A~mZ?{b8#RPZ5At`-Kfkq%_Wui~ow3}}MhMYn zV;jxE>6EGTQ~IUL6i;S;#3up#r300^OKdbl@tabrIt^IV_P?Hg`5S^gH`BUg|53%> zBc&e7f{lh9r=@ES`?*O&U<9n3R159F|5RS9-!^06;6SX>qwiZJ3R|x2-Yk3d8urcf z&H|yNsg7seV}USc9(tv^e@TpmJz za_Rh@kHkE-VrOU0Cjoelq(la{mt~^1)nYi@%Zf|n>C7wEv2V?a4UPt~z}fGckN5VT zL5S^3zkC)1kq7(^rF)G0P&+#MFev1>&B4BddUL}yV7`gH!!9^3%xbe?%x%8SbygC? zK#$&%q$IH(%JN1e62QKolV^usXDfet_R@?uiF8F&7UKTlXpRs;HL8tV=eVD3*UuSu zt8A|pXKuB?Ew+FqV-2t*K44bby0izwBNQN4mavMswp7b^+Zc@n&+%W}^k*^46j@O$t*yJP}Q-aZqa} z<_D&Djm-HDih-o&*O};+c&HnXk}X7+@gG=ZqAdJ#5nUyalbAg%SNKH{@cXzRkri!= zBLm07Vw@T2`%7;m{vCGx8y0JPR=QU5UqK#GQUip~*)18iX(dy;we?L{Ov%N_ejwzB z-f-AjaqEXWsM!N6=8jt<)(uRbAHHi=(BTUpQkT;H{Hj}~ZfS^52;4;enwd|?DUor^ z9_UmIVf`4=EyVuo$M0{jRe(QwcPR0Ct;44 zxm({bleFJHWB7D0tw4i)>W7hfj7*4VN2+r(JFA?z8Ika+uYcaE?PpJEem|Ki-raiJ z*v7|&D_s>IhIMt?AHHYI6(7s!MoM294u$;qUP?zeK2-B=;k(ej{_d_+-r-7B6(Ay< zqm6&|n#)Hn2A3>am!YMrZ9n@1!JWY-kiZkt>FiMf>yGbhrQedM%|sO6?&oqAg}w=E z8|kVVkzeodyZtL6mH#}@F5R|zzJBFMqf#4@WLy-pYh8X+FXEqoe$mv|M_`0kdFrK7 zp_Md|3xY)~ciyKpFe2t27^vpDQrNRhHQoHR4HIF9%Sh0WB^9thkVzTlGakx9C-!DU z)t@`+L@^Q^r9ow+IQ^nFkogYKk!fwD@H4MS6J6H@3DvEps3bg{V*ZSL(HW}k<3FL3 znhN<2`BTrmzC+f+d?uU5FUAMZyxyUsi(&3b&fFH4fbDtcrw6sl(JZA+ZYyZ)#LUd` z@v)@j^jH2cuFD3;_B%FSZAQJedGohXdJ4*st?HWP1xksF?@dgVA92D%j7?gD|5aw7 zzS5=OB-*bofh!E0OUqo_KWzLou(C49usOXb7Z%dA`*ku9`RkdOuVY{$V|7)fO~VR9 z!s$IAtya=y=CeP_siITZWyJ<|eibs?wCm}-6K=^RHQfL|nARGVNa}hbBbEPsVj>-U zv&i6n-rC6T6I(u94&b|Y}{!9+rD zcSbaFitE;DF;a4h4m+#+S0oF0skO-GX+&;oxE4;bF@4fO54K3g_yY$zjXGAlToWipso4IZL{7c(rWo@ysu}m+W z|K2Hp^|Jb(bgj9{3KypAgJW_q5zl@*E@znCjx3Tfc=9BlhUIBCTJXfSul!KKa%)X- zjzSLxMZ~@7H0bl}Jd}(C31f>Q5<*~?%l8*0B##h?g(v@#JfH z+Wanh-}(h~2h;Xh0_oyF?Lun4%!Pe|#vW~c{>xMS?g(c@5A=JXMv`S=iCV~@xXL?s zUm{K< zUwaKxYoEl(;l{p>Zi>OSsbD-%?+KV-Oq<)hNc`R9G_VeVXQY6x?vL3$@hKKAf2UPR zvB9A<%QZA(_@zwQlj9ZZak9PFJ-i3Kr>9eL1)IApsTgCgJt-JGtYoiSY*E5$&-5-J zeAohb>H83@ioh={RDB4bo8UhWHC&Vpuh{w?sH6cV1o~7L#I|T?1l7=@6mGaQp_LGP zg6Y#@I}|svo`sXzOy2=FMP5>fDR_@HspuZh`(wy-|GhP$HZJL(*tmh+Q%pB<-}~LA zavsO0A>#H3QGWB$w_m>o0TkffNktlfSC3D&G;UE@6#P?7LKQWR{4@w$2v1Lw70 z{X73YI;qL8tCIy7+lKV#QrqhexaPSSGKh$@VNC5(gnj+t%NGp2~G??Q8{J_}l| z1_nadAW#&gN4y}aCYhy*0EH$+s|e(y{zKhwhH>IWe4t3}SX=)^Wi zUqF%m#MY3Tpcx>-B>6^B5WWEUH<-8Is(EBw-MYu&T8by_q7M{doL}RzO&3)^)?CwyeNN(ocUu%J#4l~)vEYH z)WxBjx>mJOv~0dJ_JtQ1*0iit_}A=RK!FDTz=O%;CsibohqWkXX*FWagNrZhyhyCH z#l|Dn!TzU4e-}nP$GO*WlFrU*T~DS+*>0hZBRT}@Q0_9|Xq`7&&I0M_7l6Td-04=% z-`s5K6X9!r?Z*df(Ev*cKEh`x-WGxQVU<9k!ROv%lQ%_j{@%T<>Iy>X*yc}bZI7i+ z#;+2ARbxua*G0{2$KU?UWVm}19Tf#5As7%mjB|kpbyIZJTFzsAq#p3VYhH#PjUhG5D1<>EYry(=gAK#`Z1fWb7`X*2!&mee)@LPRox5Voa;v5!g^BCoZxS z1I$DXt^c^G*rk`uZmSxqX%SX2b+4HpVQuQG$zbCAnDoc zxhcX+4xFU^@-_~qDI#BHx8|lzlj4UHTi(tPGSd64#LlcRKmdN?@Hp{M1o-uhgio5R zmDD$s3-0R^5e<^Oxgw4%>U!Ey`A(PTjWjBj##Y{__uo3M@%?O*U)p@;(zrRES|Nlz zr|j}Ig)2tcnNYfi0_Y(pPM%7xQProRC!7v^Enk2(??LtfX9#1&~z$F6{RxbLL^M|}HF>$T5h zWbusCoPGOqEQl|%DhLbq&Iqx|N=(iuiSoz|ISc6j^toSn)`o z0Z)r1i^p7Ct3@~aCx;QfxbwG1ak#|}u6yCPFh8*n7L2#{V4 zDAfvCsP`2b$k0_SrWPAhI`{;kV)^`u<;?fu#&PvkmdUbU9}0S*BOapz_w1`&enGpY zmgCbmG4))*r%M7=m(*;xYP&oX(qdmJDL{x%(Cx4KSC+)%K%_X-fbi}17%#q$^br-p zw{=%~haT#`1;L~rMLL7>?octma=wx>y<%X75k!k71@|z=qQ0G~dKwaQ`)wv2LTb?+ z4_#)~mc;2eAa;JrOLXnh&HAPvC1$?`jzgJf+eEHe_n<(RVJ2^?I4;Y+*f8tV`s2=6 zP*7CK=`N1UJ|^t^!iJ5;tL~$2d)F7 zuRy8DkLc~|=Vux0df`~8nTc7W7vx*aJIo?avwCy3G`f zj^yQOYT|ZrO9AB#UBlrFq352V7bcAeK_`};-XJLK>){j2QjXYl9vQhyFN}>L@6NIIv-TUEm ze{R$I?9=-QQ!A!xX@?1>i>w01pu5Pb50fHY5u$!i<@h-k^G>~-l6$P{n9OSQ^ji*= zHiv7(o4TjjJQ)1_qTu(2Co{eOM0IIdua!{@_p z%B>+eUte!X>^}=-sPIFC{RVf)@yCRXb=NSJFi%nJSCUt~qZN!?Dudi+Tn9KZV>bJ2 zx5o&$03EoS1$2_}5%@%#|J@m%NQ(s8Lf?~B;G;IuLz8CRr*Fwo3t3fayNJgtR7tFz zpo)t%tE*GKQRD#}#pe;A%`j_BXX$~-V@2|nq*emsBo2XS_6@wD!SgHena=2?ZTX}} zK(^7#k{|boo^N!uswUFA`b49LC7AMIV=_bU8_t0Y-w2cc#1_GfYq3T7Kggs52uD?6 zL<}HZ0Tj-qhJ(gP_S-4Fc)p@_okw7XNU*tJzOhS3>f#hJN1eFSY{XBQN8d*HzjKCl z`F3AN;Wdx{xMBi=ZUOqYb&a$xrsf*%|SG1`r$XGRRXVY(sb5Vd-b@O7USD>#wFDa)z#9A zwVe|EQ;&msgN>U-T8>TsyznN_vZXc3!InBf@I&gO%mI-W+< zWuYwBTQ>A7X*~AL%T^mT0eL8hN8~rPwp9iEYe2MspjJ!3C6vK${LTtRO>NjbJLS=J zJ(?ksQi!@b6O&cCU44j0>e;aP4yDdq)q9>*mFTKVa?E8ChR=l7pwp^je2Q@@K3Y^S zSAb+WHh=D({4GnVkhEe&E}-2!pB>A8i%y zOhIZ7SgWc(nnq)=ziM!s(mKGERpk69CNPqdA+9Ba-o#n;u&Q|asl~#Q00}Be4t1o* zsNFd;=a0#GRU~FJT4pzhS3qEsVQw)}G3T<<5ep6kp>}s^6OEp)1KzDq|2hYwXCDUQ z{26B@TDA9q#8^5ez&TH{ZoB%{+}>o6dUWWQH!W9%21TIpG_hbSelOrQG(Ql@WFSF+dGWY^P z!dZ!TfB-PJox${9^~G}jDxRWEvf_6pT1}@kI~(=1ms&Pb_xBK4n3~}BTQSVfxRn5= zV)2J&|OV)Ox-rK!p8Qd|jmQ&G`6 z=xnc{(f8;*{pa+zeSNwH5%K80R3m+D8qfq!->Ca~&pmT4)cLY#usNw9KR<~>tGPMS zWl$EZ@ds>H&N!>k;k{lrDbz4IdV+@SJ0&Rp6@V)TNYEi&ogf}$ERhxl!R}Q=)@Re7 zs$W^d)uzaMrZ^c|sF|o)+x|gXAUqc`h_ZvS2)BonK5;7&D-t`jUhxuDc60JIpnZ3K zYgu8!oebBmfKjMhvH1%f(j*~eWOr+8cPoF~I0Pkkc`E1s=feM87 z_IxJkg>W+6&Jc%thxd%vN~UToCK$Jq9(eET0}2EQ=Um=O$PXWM?#l_lr)40z=hfXW z{mN28x);PEkZQm#cqai=F*vx*Qd1{7n{3GjQ;U`1fcYxhiWU!@v{}WIzhdvcrwmwY z7IzmT!w)Gbvao>1QIH5#+p$OEoo*!oR(!0$L$=>e6BvosHBN(h!&;pK(4cH2{$u2l z?z%7j{A4hCePlaio3&Fc63R|f1W;az61wMd-$ZK+1k%|L!@}GB_78!bPnmDts8LA2 z$8<@K7KDbKaPpC89PabMt4jk74C-R0onK~|;jMXH@+*FA?vvkATlIbG$e)t%LSUr# zGg<(V#H9b4=BvP{=jkWzM=LRy{G6OoT_VCe&d z+{UD@oWoh%)AZ>yUOss2?CmO_n&*NQb0*1s#cy=pDv+$5FDE7^>oP z{%yb4MobI!IOHZ2Hg;+n+@y971Ya1XXH4HgAo? z(+gzf7zmbA=g`mH5?ff*UX`(~;mH5o6+k5f(z-TF>qtQ;@| zSyqC&j}*A1d=3gE$tjqyVo98oOyri&5WV?Xte=QJJ;E4M6wcvMc6{c7tD>=1YT1e7 zH~TX(@0!i!5BF{WK4CsMsT5nl6^U7Gjq(y=hTM=-=+=&75mre7G*z^FvHa3-F1t8rEaTvf zR?)lZc8>ATa!CSa?1K!nSFi35N&-IdR1ehovFKjZScr*aJM>wv!U-{c@$>SKLnN7ks_k;^Ah~PZ?AB7U>zB z#6dI5IXc$!zp3*3g5LPmxOVmr_nQ{_-EF~#_bW^I|5J+8+4GO}dji8zcr@QM9bUHY zaMg!W3+a=@`jwxR+Wj`76i^HfYaomd5l>97FK6UfEOyzeA(wWC+y+vs&1#OjAy_ld z+KFfb6(6eKgzp<_hPLw@F}?Ld?2D(9$CIyTp%6d|$?NGLZXxf6 z^qpVEHZKC{QGm!37`PaAFy7qaln9AM*LK4|HV^c|z#7gEAR<_G=eA7hT3(&^iasYH zXVgHNzv)y!`MxWl6D*tj@a!FSJEkQg^b}?L`lDS8+~BPFi7YU(h8BC{J{Ug!TF@87 z@F|8t3sg79o@vB>n479-4kVZHePoLe(rWx4ebU_nZ(c89&6t4u0xwb^e#R5&miSvH z<*zYnXwQhhGX0*rhHM{dlk*fB3;6DC8T;TG`9}Rns!6-E6c%D6No(bTqnZmm5tSQt z^8)_hg3!n}-Ehaj%s)9mASGR7PRq_;ID9cBSUwG7Y`v^QL*PyxtH#kC^y0L+cZ zh@)Cm0s2Bd0j6O&u?0&MVvBsIR3!s`LPBj+kKa{zVyqdLP2L-H=kZLP&F=Ur&YTWr z|68@5FW;z5GGt_X>jnZ&X?EisoStbvh;Am|8N`;KZRzW3!gY{QahRflK$4JNuhiIp zWBcjCu2=z1_3+!Ng0RRz{G>GjcMQdS*{Xw76>vHz6hv(RU=gJS$?%yij9TFCwnvWq z4A)wK(8m^OR7;D*`7KXV!RN;h;E$x@P^|^?i5RAUPD3oUXU+Z2GoHT+_xcN7_N0mV z@`6!B!2M+iMQX=sk!?P_R!L@lhS6|d!!aSD^+@Hn^hFc_s17uAaZlFhVg`42yY>hf zylwnu{kUL*8e}K6ol8Ifvd~sjemcXV*4NnU6IePCrw}rN+uCNGZO78Kzk^e=+@GJ} zD0qnMI_FFL5?<(aj7glzXGuut2b?v_I%3y|zOZm(+~8&kz2A{bqti>UXunXT&Ts9d z)6dy|Z8s>F#J`dc3h#Obo&U>jzxRDMsH3UZT8|IDiX#HT zJfwo8_`cbk8JuljGmSVZBKWoL(r73#No4JQU>YnP8hjKt8mVr>_W=Lh{R^VuS0?}V zA~dZyIpo~?%;5ac>QhAa%0PEO1BqA_V<)Pb`jtBcZ;s<(xDkqjl@H6}7D-xvY VnKdzxs!0I6wACM})u>HkJz_A)z9D zP}fyZcX0cMC@X*9U}mSMr|0A2dwF?ToSQxVd-?Ce*YEqt_|)RYhPslfj<)X8-QDia z-t&%mO-*fjW=3CspOv}a!`;CA)!oxYd1QRt^V5R0#mB?Dhll!#k*Uq`Dz)z*QP<>} z0V~`4qph5xs^rXau$S+xmR4y#^+xZdisW18)T`G1xrw#ATTZUEdDAH+`Di=)r`fst zcF^;v3jAoWY_Pv2RP+x!?Ib*X{c7)GCndG*;l695LR+a5a@)MOdv)dBnac2ZVgB%P zQIM@GAtG`Q8&c}I`xFt`d-im5{ut~C*y?e(S*-NjG~e#lkg{|fPZx{rKh*KOI#}vH z_F`AbQ%a#E-MN6SMY%j6-rN;L*8aH-sIQ3(2+FN)iPEiZI?G~r{hpr`@gY(s{JqN4 zmLHcpZ_?5;w011-D){O98}0o3TrhD4k$`PmADu)p>(Y@yp%!l=*L8e4G}%xgHyR zav(Y_A^w^yluuoEm*v!J0#o{4HYbU>n~;#Fd-jm3wHU;1u3c6LOwhkzKtiKtqy@)R z(&lNoyEtXo{g)e%z0_s#v3&kuBBig%wLfpiFkd^WMSovC_xSHr^4*WpZ{bk)ET@NQ z|12IMixI7z7Qvgi$pDMgP)$C|=E2tu2y0oQJF7rCM&+#AjqV!9=K&J`!=H$x+nn=< zAW`SF_TMUbt@^HYOp#r83rM7WHMTRO+x%}D(mRfRI2hJyf9w3+`%ze_5~~~Nuss$u zZvYwfZMlb-FvLU(I*x@~{;52BF{{07Y7XU2yB!-3p%4n}8L}=_BkEHA=AXo_q!hhs zz%?B3zN;v7D@Sg7+gFqa|J^9W!jia_g2oxV^ja72WLA5pNtgd&X>Pv<(_?RX0Y4@3 zp_Q^wTt^B~S7jzMsqIq0ez$P#)geT{fS03{1@)t#CdZq2B*Mfg$GzHEL!kVd0N5Vd z8ahb-zW9H~UD9Z#0A}nDgwEn^%uM$XzOoSPX=k(nXh5y>R4m~rq>rhD- z(x4Oq>dTdzuPxs4z0&;L8$`i76R`07C zuNNx3?(Uvmu3yR>jO(FhzaQ&qm_o;ax9<&=l_Pm`Tb>E-BJQB}yPhCN>(!2?6?5tb zWs{QwzekPLfKku*h|IfQYo|u(`mdTcHfHrZW3|v7gz3cWgN+NfXmeshRBI~((T)jj zR4f{35Ic82?uDPcBQ^ye)5tJ$2A|K#C_~d?!O2Z3$bsmrBYxfKPU?m8XWT`r=HX51 z!^vmfjP1>^mcM7AK?({;-={JCsk+v{-90^t$**#I7kus-oAg0t9?w2iWqVd`^>nR< zrqkp2)luJ0`P~>#&)Eckx5O&ao&Zyet{r5C8%@)>rrzqSM;}e|0f_l}f@~g}|52o& z`NQCfr61();#)}bpH-hLfWh*g(*JiE30DxP%NqW`4Bj|97b`2G0qFi3FK^Et5i9-}Zb`Mh}^C0MoYjJMovz~vhS#UbbGe0{QH}M+;&N-DpB7c|Mi=!2N0SzU|r3zVnrX99u?z* z&--+XAucp6g@Z>yd2b|CoKzo{0N5$Tsqa>zwIsQ*QW;x%iST9iYW*%G^LURe*kK{H zJGQ$U_o2g(?|p@mY3(({uS=-P|D?z7M(XowGqw5@r#Is7ikai8H<|j>wR!u^!Hi$d zht%WP{3iE|ozfwtQ3Nf)yXb=9^P31eOD)DvVe#?bXt2qt-$*TWRUm_N-gw`-DhPHk z>wNmX#rOloQDy4Ny6Uob(*HDbP7K)%3&gMrDHZ&fm~9gImv}4$9XN>wqZJSTC;BF; zgR(@UfwK_!VaEfN@3a3iq`V`L+?8{5a86r{nMrO2P#m_?jbo2o+Fq!Xc0zM~+Vej* zEIMkZ5VgNBQK#-(c!5$++3cc_}*kgTbD@#>lBPCB&V^~6A zpN5q#=o_*C5Pp?8#+b$j0G*oK_|W)lQ4Hhg>YGUTt@moT9U3>^NxzbF5|(Ujl64zd zNTZa4C(NfZP&OaeuT$|`p`m)QirnX^*7*Hhx3n0n^dH>{8h&AlpVfFJXPYwR$YheT zn&Eu{gjesFwYNzFUG~}UI{W(i>=%|=fv{7LuKa`abW5`wxt9{QcBl_F7v(P|e-vBy> zm|N7?z+k%t4q`g4k;8w!825U{4j(>0oDAe3?(xyRZ!bjsu9s%&Eq6vSJmNOkk8yhU z(0j3)Nu819@}nTey=z^uMo;+QJD4 zM9T`^v|pM3F;%cKxOwq;c~*!S7tajPjESVA5V#p&WW97b8%(rnUWBuWxhUuLP|9=f`_fnCxh~$52t_5mue7=#cWOP>6sW~ z_r|55RL8qh@*;UT?PcAxW6{m;-v~?IZ9yo83@#PD}Tq1Qr3;h@El=b`8u|*+t;>lol#wJ=iW8`*D43m~GO?ixVH9QR?k*e7V~7 zdx@os`MdlQV{S2aHY!-s%Sikx)rVl)1+pF{XVEixWt7>-wtDz2rssIY-!VRdE!>i5 znkKwB^CJbY0l+qYAs1}4*6MS?TVRlF-TKS+gTWKK1$ss}{^+}pzX5;9<}Vdk)h${d zdlN8Y((qxpaX1}6VHDN#n4?sFDU7A_#qqC$pzsQgo3B>Ii@4% zY6qCK?=a(jqlDZspkG_Hyv;+5nT38tEi(7Pcm2)3nLKN}lr34#(VkMW;oFv)yJ8v- zs&}c!GvFPt`Igf404b$rui;=9q?sZ>H@N({H(!fF(MspTz~d3QhbQg)NtIPqb$Yyh z@i7-~em;S7?4>nn)^TCJTazI;-$mYva=0U5Zf{R|Hcy;{`i*5TU5b#_6#2PRW1@W|yIrwW21vnh*@(-ibRmmR%% zr_sQ6=nTR8vJzSBZkBafCQW08wt?@TQ`EK%jAi5nTe z6QS1bpM4mG8MAQ*lYak(6qGO!(sjxuveaMklhS{=%!6>QZ=;}~p!3uiWBeDG*Q|b+ z=BqCkb37o%35J1GxkQK#I1MHepkrHfV}Q<2)aqDSqXVVu2$w9KICiLu2|G>QmLm#l zFl5O}$V-GUjnmx;%lR7l!W`b#l)w6eiJiq~6%2DZ)PEh8GF5v4YUC@PncZNoO!^S^ zGmPUn!!EZgTdoj08C!=ciiC@K8)*LQw5b%vcVYCa#u;1-94usSOnf3~a*fgVO&79?Wt>zabrGESiQAD> zP%qN9({4xrnxG)Q)F%v}nDORJ9IA=1&9o#$bca$Xby-5L+TDH-^8yzy^6Bo+%T=t$ zeKKblKlJm;DnFk=D{j(_fOhX0?HiX-eBEQspXz45}_v3v#xTDU2rXS;2>mF1of*Z+=iW!4zFf1~fE7hwX_S50i4K?{XKYs#glD--Ge->jr zfKrh|jcLR(Q=0fe+}K;%?XM?!!*He0T4J1`qp|-a=MYMq#!DCKB0a>%)GkGHB zxITr5m};}0wgIN9EaRz3{TCfdU&|8Y+6r|aIm2Dy@tUm|Rd3aqcLPg5TCK}vmw7r>=}P1K(xBWk6ClX6-khsFRa2OFTcvr|0Y1 za*9`vf9T>8(nXreJpAHLorRQ+VI0D=Iz64f#QhsWX5Eb`;<6n!`yMb(*+l$?_i|3e zRM*@i`?LIcgB$}fH4a>(b)(>c;lVXW*TK5_X4P&r-fA$$N+1t2K7C2od^J4_XNzho z`S5Vcz3LOGD$WnfnL=W=K{#beBkfd?iYkSNWy$)9i!{t*gG-xq@ApD}#8?4Zy~Vb> zbCSmo!L@)UEmd+LR(js-wBhPBrre5eO@9em5*O)?61@yJ?|o5=@G(k3_ooGZE>C*) zDnjF%FSMW>G9LvWxl=~#fjB&T+6U?MaA!gPsmsFUm)-Ax%@n6iz13;myj=ViD(b1M z1FWsr{+Cr|lHRv`k&ZTwj#T>6?@X)Y4RjC!2F4qnG5e%C=0B>|YFA0pMiOtenjb#Z zo?Tu1b$Lk639(rm3LJ9c6xo$ANtBiS;%VU1ilvUKdm2P`+i&WlO1#^5FCrISOBJ-= zwuQ5PVx>qzNI0H)SWwHQJ+>=j5qj$p+-(|wSg9&MTm1=`6z7`~=)H!Q)6bXpUaOHf zCprc5cz%m(3fuStYBgvw==}-E**TZE%6XCwim1tX;s9#f;+d?yPIKQ+KxVjQY2Jjf z*LuLwQFly#Ptb+kK4YN*H%hr=Qqevb7BLkhfTA>wDVIhm^y1%vF)I!jnlvdquxPtkaVKpW6ZZ5JL_pA`OG?Sm_AkkOBUrdwHeJLp zWg}%2eh4v#S^{{#6^`S^0bf{0cTmcycD$`>?YSeo(BEHyoPHuaz}qZZ0r3E zK`3@rL=1DuoKh8?A8=jHL{{oo8I!di*jqD6GIZ0F!?$F3j}Lx<^{tfcWF}gw=9fb8kN2+Y?a}L|$qwCxJfNIZz|BXZS z8@wO(7e?>@6XweYBJ9uwg>Zx3VLve_AE7Do6aCXgmwC^V?J-8}KQVUn7}W8;Ar}l+ zfvs?3gprH#8Mpq0NhGmj>iKjJ#M4P*m0DT7O`Vk0F77;dd_oRKh6_aDRAY_|<>N32{w|9pQB-neWy3N@Ry;RDrmtDF9)`4MT6B?sGA z(}=mK+oc{m-Tv=wjnHo`6{Me;tBqqh}TL>)zPd2nkA zYG0XhEnE~-TbDYD)I<0$zni}%E{$ih`n!KtXLKxgkl(567yJ>*eolU``RkmR;oAro zy$&%&51DSn>Y87|H$*hqMkIYTs6EpC@`@w^xP{&Vry-ZoJ_$*~G-u|i!U|fp$7FH} z1M+KYzzY@S!#L3d@le59R@E(>lst{e3U9tj0{`%x!+md>5`64YWw-~>;ovvO->jnn zR;qU)EppcxQbsee35Ef1~mq(QCPGUmf8!uybA? z`=3a@$G1%GR>*U>WsbF{)p;+HhT-!G#afx%7K4-AbAJ5>_Q(y7x#wq%cA`^2M zJ2%|30h8EQU%`XGoSYY9RPtT`s`>p?p@@-`gUPD5Qm#7xFx;7f0#2B&9{Z!^$cek1 zgB>I0tj;*z-k1F*L$#3aS4U(NPS6#S=ap-hjX%(o6WT7-ZIB;-O18)3Zzj+KFj5fD z5yNJ(q41$m_(GcAeJJR2+2@7~biXYQg=*dhFh&5a!u&2{u}V5(PdXmrhAQ&&yGr^P5sV0sB>S$w?pBC22GZO?N;FBbiX`~a^nLS7M4m4+G{pZi7o}_Z=#2r$<_6528 zi``5ewDBgA5NwzEp}>kQlT-_`y(_EFqxblxjNi2LJXT<~z<&NCVRC9!L;0@S1}z<0J_$ z(l>cc@;LHCWwl8HjWO}LxlI+Fc*3E<3&tUa#`)(3E$WcOl9B;r1JKI#@q7Cnm&m)G zo>%z2{fY#C<-l$EnUo#jWwzl^`kB#F&zMh;hhe9I1P2S7!U>7&gK0$jjqy58*bG{& z+D=MVrD3(?eRm>&CV+*R{aXMo#kuzKNVd4Ua`B#iN?ly|ZalOdH+-Y}#4%nP3i^4Z z)o-Tl8$?_RMfwq@Jb~-R)3suFYwXBQ*`BD}ncj!j&voLq76xy^iRI@x4tTBf$QjEjkgO(b0A*@k6NXgl;LE10aKG;@tC zy*zWx^Cw7{8d@0o+N@D^5@B~z;q}W&;9deeBrKmMZbk;!?!y>9dKr8<&J=lhT-bD6 z-+c5R2xhK^lt?aO=BKl_>QVzatug?~fQRqk?YHU< z1vAR=DT>AU_u>@|N972+oShFBZy72bMrMO~-1p1f4+Xd9!#|K=^T=#B`eA)b76H9e z>)KX2|6t~`ND18dZjcv@l4|fEMl3z+^%J{#jJH{7t<)aIv`%WE<>l4%M*@1iwa}>f z>2Hp!ZQjpeE_vK3{!k8>7Xqb{<(Er)qgV5q!nT3~i)tZo6z}2fvsgbLcC5=&4;`Ta z_cqz`ZUE>aE5`gggar$@(efH5gcnajIF*YwC9z_sO2arJVE>7oAQ!8kEd@&*7AmoW zwf~qF9aEz@#E>KxK}$Yy_~K^Di!O4D2(cg5w}QK2?XZbr{UNvYyP(=R8(8%}RdJe6 z_VLl=ovMxiltgeV6p2TS9?mYO*#B}dV~kH1=TV6whJHb`-{HaTRK9hj2pY%NruY7M$u_#pa7$^S3Xye?~Mn z)=`4YrWza(OH>uvPI}zp>hH-Ul7sZLee^P0g2Oo2X0BmhOSZSK>e2L($VVo>p-kZ4 z*5^Hq4uzOy}vs~VX~#4Wve!A6)=)1$*!K{kV#eV+#Do= zr+l}%qLaF%k4<;`gwA3stcr_9q7*TX?BeBBmxC}%>%<77Oc)Xb5r8W8vYJb>8jRyk zIxM90RKMrf-N~ML7}bS}sh$jLUM*^%E2_OFO<$WSC74Nl-TC!ekdne^L@esWwhqoJ zGJ5j$lU>!zWHG)Kv)jh+_vpv=vFT>QqyQu}ji!&RXGsq-LrE-1M{!Kn$w_E@lZ{*) z>|AP5svKOuvMNEpoAG0D@Z)+k)hyT7y(P?(uE%&^d((9KXP+7SQ9fC(%#9c;-IKR+ zsbiiQJv;7Z+rUCQ_!@VW+6hFtzCIn>3v8b4!cOT(cSG**0vWD$Z!S4I7wqImT)zEmgG#SlEhKZf!LQZ5sZkV{Z zrdFnYuXLtnD`m6?0&;J*k{gC=_gZ`?t^FWfTlZQ1>$_7t7V$X73DdhytIxMysb2{7 zf#?zJ8)=q&AY^1)HO)b7F_Cv%ym~6(sMWe5{ek+XISo0J)QJ4I{S{Q1Bv=_XQ;aHZg+R_=5Y| z=bk5~XFoVRy>_i?_osc#|L)qb2zY#&H2HgNzn`$)9dvPh9C}vgdUlK6b}nj95Wh_% zheRUQHJy;q^6n=|j487E8rosCX<}0{_KEfoYy~?8AwOKfiItok{1~Dq07RAHU@NZP zRB&0M`2wlEmi3cn&ydR5D1h~s5bA(bRLbFlF(hS882x?i>|h?*i!Lq{_d7Ns#F^Rr zK)hpIN7MCv@SE6*TVCf&DxW%tA1!)6cE=Mfo21-UJ;&$AFc@JnWqXTUY)A;E2BG^j zd~~rgFn+NME4aTJe$Dk-O(6_%XoHPvYC}d=7|9IW(o4bo%EezxudtKi^5^wcimw1B zw>UG}GvFQd&n)+Z>#rZq_X@o+z1cTWbYs(zFkr0edn+^@>T576D%;VY$_R$0PEXz0VYXZFrzzz}RafPeX1=JL{VJW+Ad5h+&5%_MzSLYs94P>!M__ z(Kj_~+@ZR7=duBjJ_BT<5_3CRBdKm5>3PLk3R^IoJA7zSvR>UO>XGeLaB`Th+YA&# zUq`_b&U$&7l;WnJ{I5fjnBs%AK#X6tywgJ)PIbiOUqQoFlFK?`jidq{5W{gHDQ3UE zz7n0_5yvH<;PYax`>W+3d7jcj~U z)msb*{Np!1RpBHbg19bcRVL$MF`BEXTy%BZUk5);J;x8I2F}#3qW> zq$HOD*HMwOugrE==qTJWEzE|&rnRGqEtf9IOhUw`+>6B#K$l~0IV{KsdYb&g@&X^N;)Y?w$Y{^ zNKB@nO-x9}l9~`qEe0(ss}ty|cxlDR{*pcITK!URlEx~p>53a=@Wr?n{ogzb`w3@< zI@|B>%U7Y#IewPROB1>0T2)pi{TPwpOb`5wr@1}0r~3ajW$|A2*mGkMY@6^FPEKM9 zU{cGvg$$!5j98Sr8Qj%1_Q!i&7<|f>=Z|tu6-7A^nDY1O2P@E)@oQq4z^w%`?l$@* z8dP9Qum35(G~flJ;TaJVL*THX6dOt2JDSW!yIP#Lsr_k^CEH6I1&VC8!vW8REvPYX zzyJKh(YHrTOqhQeo|3ttJ+GcU7q^c=f!kH>8emvEdPsxbi$r~DRZSE>EjfyvyhAjI zqJy1O)&aIn2v&iGq^+R4LF$tFfv?4XU57+l%c_I8zarDJ@~OrSbA_F8TEm9LfbuhW zvKMatro0s0tJ1-I#!QTS=5kgoQR{7YJKzoNOJ>yc4h%8yP|IY1;Y<$NyV2kqjg7Ld zNO5K|rOcYA=mr|aQGyULNp|8fDKhtxjF>XkxD zmY%4%I=$-p+kwXh2L&~4$l)ATtQBAA%Wb}=0hTN&(fCuHnOVpPwNubwkIGVUX_UOf zTz!5`#)Y(C0+5Q%0%O`( z^at#50Q#cLASN@P3^H@6tnPmEU_g1^_u?OiMK5c2mak_;H(1l}iQ(B;1rfY;1I9nr zvSvD|>FA_Ur1!OTr#BI&??W%5^CF#zJ}Nr!S9wzM!BYSX{Q*mVq+U0-iVJ_9+szBm z7%&|}6=D?<@`%kb_*AZassx#slr_tN_~lUWyIYNL4iC$_q2h#=A;A^CGjg4FXXaBw z6OobWD|tUZ&S1BAC`p&G->Sm2<=X+9x~inv!CD-*y3?Yp>hObbVbBhowH4_?eFNb$ z;X)3S*480`?B)pDlaWClR-zO|`5{+%?t%;1D^DE!i5q_oWuc_FyDd9JZ+Nl<(TwZq zO8%|7yK@>kI=->gKqV=xU>t_(MW|`*7{yqHtm=9>F$qaUxpMUTQ}_rO05yDY4ykfx zg9Y?1c)nxg$udbV*N)?rA<7eH6CJm7pRP=0>#p{JQ9=C>##I*Afp7hn!9 zt{b!-4a9)GZ9|sYLcv$*s5_r*x@IF5qb0dZL1}@Ph7JT}vVBo>IagKDDnJQTRnGr9 zu^<+dIk(|J2z#Ut=YUIcd)0<1)y5daSxiu5l=V{Z$colNNNO8o-kA%<8NrYY0g5== zVK7}|Y#=FMTUdR)c%YZQCL|CKOoQfe3`ly@v@G6}l9ZIRp&met_mlbL2%s+FurEhizx_}TkAyZxGv<8~i62H~Oejtv zUcE=xNGwUIEe>c&9c11Ay;>9LGr#q$+`@GaG}Fbs3^7sFB-QNYZYtZcTP{G$0LiSbFcK5t4#ZsVGP zWm1uQiECUu)H%lQvD}{gGVT85aN}e#cA|=991#Jwc6KKlg*Auva<6Ts*CK!{8knnJ1!;CPM$p#5y1GO>g2I zTk@2o%}#n=p#spLIK2k#L-<5#y#GEk{CMkvAo&>V zFz3ZwvQgJz1nU>Rqti9#-S#Fg$9{Zb z#t7^!XP`Yzvb0If^M{k0h|f9a0+{0A7SiuAv$QQ#j9x_4|2E zJby@PsQD2noNW2)Shn%cNF<{)K5!kA$9S3sg#ptX?g&9Cd(V6s$Ti}9ih?bZIEbFB zjN>&nqLNirgD3)*smV$A@leRnIbfzuj;{@6KebgCX0OgKwr#G=UW`4;o!zkGm&GD$raCf0=>e*gV_Kk`ZE>zAoSv zWH3vtVv)?M(!%QI6V%bq+W_WyUD2?OPN9`ZgQO?~y^vybUUrJx{)|L~BIm@w+wW+u zy`T2rZxgYrz|i8B@ikfG;A=oLQzJnBf?Yi)<-h}ZX9iIRJ&*&hDcc9X!W#nK zOx7_{3@u+w(z5X><0F$)lQCb;u;CdLW}Xc~Z87T+*0;su^2F(Ok~dLedEMLFO4>;Y z6twC^EZ#?`)q(5*NV6jR-1odmSD{F z;o9%!#p}T(z;TF6Bo(C)<*=$Bco||LmjSmAS5AFKqGm-AfjCJ?sY0k$ z0OkmY|EARmW`x<$&;$Sc9B^~^TQU5)MS+jzBf6y{J3G!2(|gguie>XBGS#C*8>j?$ zqR07M)W8_HQKG*rg!h#Y6>6eJRt+MwIPtKk! zLb`R|WG6|i~eep4GE#+||2KaY10QlB?bp6wjT5ati$ag3Va1}M^ zxTC&Y`5qZM{&$oaq;H?*x{mo7(9;)qOl(6~0v#skU%8YiE&?K5+rJ~_i#dPgxqUm0 zXzWO9OA7eP_NXk~9B;&5a3r8Pxc$v<>=HV^N z*X_WPg0-NHbDGYEyXUhrPi~wGeZ&lp*{3Xf@ZGir4uuJ>_cFl2!MuTtsGgW1&(2$D zw&S~7*fsWXV>>_|0?n(ezREBD7qqB}`qzWzHPA~oF+a1fFanpi6d2ujUaxJZgvEzI zA(K9J;9829#4ba56wuJ(Hm=|e%LjzSI{q>IgSo>E(A+tNhy&`~#SIE3Z!|qz@r*TS zT1#;{D}a-iz-~HUZu~fK-kWAq-1lXR*xxzGB?4aQo9$MO3`R0xSEZS2@cSfsW~XxT zP9+|z87HJ08b{Z3JbqE0l~OUw{{d94@bf9AQ}PT8?wEDCEtz)g%*TC9QV_J`HI^^p zXN zTPbD*6IFA|?zM5rS1Du3Uq^>-MPY_Y0Ndx0Ex?BFgzk?i(IEJt|?STY!r9`RLYzQ(h9kdo1T&&iN{SCK(V8Ob0 z2N3vEklrL#bMyiYJTVXhT+rBkOPaoqPX_X(+6uerF)^!-pMu=UttnJ~em1u>Ud0Z0 z0Ur>*iSU3BWUaFUe}qlS0JR8lzygR&Iiv;n z!Ww+%|IsXGu|Ocf`h!jYEp!Mx@l}P{K?dYk2KaTf7FIs#K%;t742)Czc=1B~OMhJx zNM2q27xvsv+8YLYXW}?pX+(?LGOLVI2r0$S3B`u+WXUWf8kB0>4t3n;@_LFXPHJ#PmFVemD?s`L zJr#0~Ve#j(4m`WCcNUde?q)=%3k?oafWy%&m;9zSi>#TzJiDy2lzOvhU|OP01*!oL6L{iYP_EFshEO1$Idt6uh+kh1FN_%ZEH%>+c|wp=Pu zDd4v5R_#z91quWOKyoO6s5~n@VsH*VI^MtcA}@Yt!WHe8mtnC9`aV(ARYbSq!P5I% zZ07VIC&eX#s5>h#_irwKD#fRM@6Dxj*uL{CQO^)CHJX=l{uwZL|4j(YW4j-|cGXLw zsqDC%;C47$++}xJf-?i~9vgV;U zp8nG!EE+(7+>|oMZ_%q~#>5)C7s|XxLJho-C@GXRSLzFULi&6#F(+uJZt+poLkMZH z5UIkDO1~u$1DNh?qsPod{A!xN1oX>V7K>wPF&x!aiBNncG&@!KU z$uN?A(D7TJ$)?uVfOtq1%ydEh{QSIshsf`eL0nwiAlKP1F^eIu?bv0d^=B*Ugx233 z8jhS@8mHBD7^`ys+k(ri_n;;Jb4I@cyy20O8r;#XKfFyC|AIO3kCC4+aLeAAX@J%n z-c#7`3sn8|Xy=ZiC?s=F%4}%OhF-C&Le%pi~YIZBs=4AnP z9+`^5yBv|)xj9JX()7$xEZ^s3=HQjB&ErKnm23DlBhTf_1!CtOD}3gcFw>?EgxoUx z2)2VVh`I7Zd4ImGQ}1G^(Vjm}iAv&bf1-bY z7dGa4u{U8N?e8RX6)tNxcqm!tyPGqtiq9Q?X4PV=EA>7YH8|ub4N&_qi6&4@SBDs$`1GVZQ{nZP&8b#%v7o2!x{GK47ni0cm^p2WmJy_Qb}bY)9Q}$eUDgR z8a~A~dZnx!2cMq##V$!QfTEjf4E*+XO_!+MO5stW*-n-J+8+==(0SCYb`=^77?(B4 z{cXPt_d(`qsEVMdYR~=$Q9m&hUQunL!&im|=h{t>tYNt&Ev~nyb{>J)vEzDwrJsbX zan|ZCXK?FKES(mnP+GVl>+()0^p5aWs^P=ls0Vv^d;D2}Ua&ePg;`ZRq1CPeV+a$| zw?Jj9O|r}^>Vq|w{R-dPay?93sfsfoZQqqT2T<@Ua?QGHHQtNVKh6Q`m}3sR%U(2F z19%y!m)n>X+Wu~|z~fS3%|O?_e)a&7Hjh-pBs1hivh9ko5}iZ>lo@@;^Qd!9IEQP;w&0%kF&;>MJUvLxg$W!?b6=T0x(PAc&Z! zDdVipUd!Ud|9burc9&=K7)z zTZ^WcIz2s2SWpDWD3SY)O}!K9_uNoa6t;rYqpUh?p3baPgQaU4;o!@@ez0&ALXbeQ z4tqvn1!ur5=9D%88wbrhw`ZHDDX6HXHd$Y6?=nh%x_7TrHyuVsZtf+h!0Sy&g8#r{7{W@5e4)#dnp+E z^)%(|AKO9y(HMy-`K-+u&Gu|qfH0j4+N5th&41#`L29+K-b4xhSr70@p``qi2W=cu zyM1@wV7d?2d6^0^k?J#*>kiwje&1svVp(n3qX5JD8K^ep0re+9&q(9o+c!WX&hL6)~M-K8P48BKo=LMquado%bPtajs^KAkZ z3H1$hgBZm+CGI;{O3HTxIX!u@OpT|WDxQgPpy6Y#?P$jK^oJ=J3gBLWE6cd9$X4as zYm%R8qs-1@gu<#Y(z%8rf9QKNNJt1}_1ap8{?lnzSS+I3#ePvKZrnhaOF89(9H`P+ zC3e#hNxyS*e%>+89Td-R4J&UlZ};{5)q5z8JlZv4f%E3E0ls&$IQiuD12B#787#Y{AeK4AL&QbYKd512v! z%g15()5Qa)I6Kh9UUY;hsU*GqUR9e*1A>fhe$;?xKA4J!5AauQIy={Dn5}mE;E>=S(U>4%Vd7&34|=j}4^Q!V z+2(Ie@#KA_+T=cW{xsjfv646dG)8Ngq^YW9`}7GZqjoEF!6ua>g3k!FhZoj%4j`6J zF<{>$ zHB9@Z-&u&C)&vrTG{}sw%qA)dlyyuJq)?)y(TQWyPJ|&` zPb0lRnN9X(2uDwxtWK{zEL0XRD|>2TpD@50wsK~8P09A+LHiHj*7VP;0^p;K*)L-R zFlz?%%nOzRehYZ0wVg71l2^b&r3eM4(*EP20>~&hM^{(-N32KhU!k&Uoetqxo86dv z{ujuH9Aq6(zshhi??{WCyT%_s=O0q%qOp}C$afqe-w-%N@6Dt+r;=#s@^O3hlg@WF ziiGViwXxuG{8Ply`0HZl z(ykF-71W@)p;isk#+Tbyx3YYiN?^)nkIwB>lQut6!?LRWewnMCp^_!Fencz`rq&(y zBDp70wX`JZpB!QkqGS5Gnixl04(Q=pi3Lj{M931RH}}8>BiW#i+=ue)c9YjRXpz4? zmpBJ6e4KdJ?q3VBZVHIBbP~tE@XYCvetzZ?lNBf`LuZ2 zN+s!LUOt%CabEgf&J;)GYX@Q-e*$k~%DD+iF*o}q*^8@9n2P%4ohiI>b`v25jMqX& z!3lqb9*#pZBT7Vwu-zeiMTGDhdi3*9a$F3mOUN*|3hw|nUP& zL^6*$Z+9zD=`msg8AQueU(mhB>x#^cYr2M;C6#NuIxQ6G+w1k028t0o{f1;anAtGX8ZWacUwV#qk^dsKA zC2XeWAJuZrfJO40oq9ljBAYJDSkop(IMGgDx^3>FSsFWk-Xa}U*^#Vkmc#jac!z3}yQ=gwshUi*mJ=}xlipNH zhYm4}5A%Ol$P^>$G*R}8tm)C#%V2%X{i}GhW^o#s3M+BOKsC%_@CX{CqK^81G+lQ%+|Sq5+bU64 z??kj!LUhr42w~MFL@!Z-)q9IBL<=HX)YUB(t9OasdoR&j5Z?X%p6C5*|NG2+W@cyZ zJ@=e5AP9R^OUqr~^wb>26)b>S4z^AJ(0emgkOy~GHbs$hv2_XQp4Ev&a4=VW@(7JR zCqt@&-0xK|$#Lb0;Vo@d<0o{?qn>tHReoqd<%p^dJs+Zx&Y>TbkV7>evhs^$gB9t3 zyGvBwKaPc?u>H&SU$@MyNFxgfjmpYtj`QrCx|6cAQ)D@w;4obmViERJWohJG;S~f6 zD1{pm(zUT+usXU4#@_-KXFI(*~SF1u#E2Cr2)J-i7Ohn3=SfM;6FpreX;ZF0Uc43=zjw#j$7>524{G zg$6S#?53N<89BG3EtCA}(2sO-zJeD^bb(UMoDAgU>Pr5v{;m3_< zi8vxE6~0@|lAl>wm<>3c$Ugk}xJovz(R+2C%(e!Yc1Y>JRi5nx8k-CTu~nyVXs9O{ zBr=L|VSN-Eb}f8h=j=mM4URp>um}Zv-SG(sGv%jBFEKg8k!UwV(aj|R3*o_ zzumk`JUkpdn?iH8UTy7__%c`cWRArrF^O8AR{E!5JE7< z1_q>OgjgJgsi;YMkMgWQ|8oYxiQ;aruX(9Bq2fZXrEY!X>|RQbc% z4^pL0@PGU}%n|u{IC_eWt)o=vlSfAQ;QFU6rQbBy)ETSI@ufs`Frx6gu@TL5LtOY8 z5i763XR@=y0n!Q=`Wk3uRYA=9f!La7fjgt#i}#`#2k$cKX?$qVcob(TAxRGG7DpJS z`<(nkfO7?&;N)q{afX#gKdi|9{6)<*kzr$+h;I^U&sdNDbT)9DwHV@gz1``px89)} zI8+cQfBL;;-3$8PAtDQQ4MDZ($huX{82sdfw6XZXJ`IKmbhyJ5v!YcrOf|;?q#L&8 zvDxUGo1iXBd`?==4B9FjTf5=qiwi*p#n}?>kwzn1L>zBltY`3j@~4#CT*jz;jlxJN ze`mTzEi&r;tNZD4bTDjH7!vqlXXFftYISt-JW*g<2b)tgC8k3ub?Yut&K1_KSVX=6 zD~rD?yxatGMsd{FsdZwbj*`!*jbw!prSI{JBiD$Qx2AO~C5tgetPa^`{vslVNFA1B z`_80fh?ODyvpy^|5(@;e%rUp&{O|f89U9gBn-7Dh7i(PzhxRXs8#C3zJhbnHd&$-3VYyb7& z`snYk{-l)aNwZ7U%zN`iVRmmi<>&K9DENve-Q6lzj=UT0Fxwknn%dPBOk{6W7f7{j zO>HXLK?~E$X03aB1e?o!mm(9X_ka~z3*_#madhK8qSdE*T6$64j zK!5SF*H&-tww&kY?V@@kgByi!{85?HvcXsk^+7J;|)D#utmq~oHxBT8>in3%W)PC`U%c7#PcF6di^#-kA?s-;e zE;~Phm33p|Rz(p7jgT^d`kE3R6~5*&!>WoA>X4Nk)p;p>{nZbWk!l>M+ep_0A{D)FaE>AxsU zEpj*^HIJkljevpI&TlHG*=b6N=lznV zsvLhwt19&lZ0Lm-fhCscBY~K5Yf4%h)+g58sDJP@ikdKCqlpusRGq!rMXqKxK0XfX zAU3zN3NLv2U1+_r&^Ve|7xHSvYjjJ3t)_>pf?ge7mi{|e8R=QPfKO=Od|C_ALuvB2 zBYG;bY6_mJ+n}?_qb`5$GW<&x9mrE;za2Slhiskg5w}(~)5jg=#rM+m%Vp0?Vya77hG~%3i2=PW>n+*A7`!$3A`bq&^J*ckg`CYcYtiQe3rpNx{o7z!qdbtB3&~VNiyKLyDhTV)SC8T-QkXJ#hpOBhXOk>O zQ8S?}@zycq#F5|8+H&45Q}bD7zxg~kloE{oy-Q~ZA09zv%s75=hwxcnzu0N3BKFko zN{>)?pl32KfQYMNV3d_j-P4e7`Y`>QGWe1m*b>OD6zTPTYXFc6^zB+?T1?PTV}Y%D zT4S&UmmR(N6qO48+yxMd7sPV{Y)*F{$R4qDym>mdefTv%hnh5?^J!UmHtNnOh<&H; z28l5uLs1PJRJ`Xt_Y^7!HK#uDYCj7BHn|lNnT57gYpNxyA>?UbI+?(@j^Me&i+85w z^WJskxOQo&-xyz*t1~=HN}XcUM^}#f`%Cu3Yr4EY+Q{NuUipd*^o`MH=Q2}x6$1bL z<9s0j)zfl%i__!z9Bmj>B0)Z!$_f(Gk1=dF*B+1G%4$&;$ihrmtD!Dhpu> z3uD@jmesii@Ig6jtkb@dmEXsoVML%1P+X=AgeEGl%icsTS_T8ZP?NmZG#@C{%l`qA z`UdN889o^}m<|loH9>!W=z}S6nC0w%rfF{)(B1?PNUUMD=?ujdiP?3VTE9WC<==dPeSw_S#yeIZS!r}_rACQZ>v^fh)Cbd&L3?7&wF5cdcWSfw(y~GA00HeC41W%gYsCH7 zl=|zneFlOt?6x7mkE;)4|2EPct&fcO3zbvvPweJCr`siX4H4vn9CEG(-S)wr zSWaJ=QOIXpQb^67bzjp5y-I>nX`oCW%}Lc@CW-g^)mm5pP52L1f(pr>j{U@P$x>(N z*nM+fzrNudd*qn)5|vG{REA{~F6u69ZwoTI4ibqFAvV;s`aH8-Lo(sM&-5$`&1G9O z^-fmW{-palV}-P#kpK)eh9f?LzJn;>aHL(}PyQht{+^;OCsZG~|jFD?i)RU6*WzZ@(Z%?3NKu)Ouh z2uTaA=i=uU@OvUFx*C0E6}|8-AUn-@sSjFnsy~o5PvDF`a)G3{F=c!iS)P#AlV<}D zp0U4^Nx|?HFnwJf1+QvmGIu@IqRi+wtZ`!#vn2=agd$5L#%poRo62*4Z(P0nJiOCP zKuWDYPfj;~8+(3tci0|a4FPafVcWhY;F#huMrhVmP1_H+8x;^t9;mO|rd{y}(2bwvXwQd!Vy$|^$kox;)?nLGaAWm3H3R%Ko z{aRXTkK0ueRQl<`%t92xh)K+ME8lRX1>__dd8hpoZ^YPy)o1A@`JRQj54~i%O(<~$Tvjn;chF*a=}hdv;UMLj!0=>$#YOGx3loDLR5(Z zSM2I^9mOZf3q!7?8n0Rs0MNmNb`?43&Bw~I=kAr_6uPEpn(qpH*{`e-cg6^@D)Xm1 zP5fWtVxYkh1G%-{vK))>?eiq34>g|5onNndM>QdmP89goJ#*X$r+*sXfM{Q!=?|J{%rT3ZKCWSYb)Jf&SNq~~*SVtVz^%2jk1I)hvD@JThIWX1 z+(n#VB&((Wa8g9UQq{|MYEhhRg`;ul;xCI3p|45QT;+RbR9Ox)$m**`w(0DJURmwwR$^#cg2)nSA#zylswi7(GIUf z8{7Pu3~vs4x;Kr#;C_K_$>wT6e9a4%>u+S1;LT4~K>m{A+ z_}+{My7@c*_Ey2;Z$RXmFv*J2_m4>gago<$+&d(tNW3i?W)Ol6n{qCD=W-Z8XAaF5 z=yUCzUO9g|t3m>yIF#KwiyZ{m^Cba9L?K@hDHtz6`-HDeW4?#8ysWeskL6^M6t(jD zsnZiD0H{+qjg*I^0^7{C**IZD7#S&Ug?Nw`s|6Jm==@t(-Zke>gjhKE{c$wHa0TAi z7D=uY6cl)nHWptN*r|A{ml1;5Mb0u~KNL{T_$b1lV}|RvdCA^&5II1C-(B?E5~EJD zGfmMkY9dkBw4RLe_B&b_!prH{r9#5rFh3ejMl?W3Q~lpAR%HHlixcu5ORqfH)O6J` zc^R%Sr3sm|9YKQ#+dSL^0U!zl1i@grPI7HL$oHzie`wT!haHDnmYh+7eE<;rm)p$k z?9|k)-@;o4pM%npT#m8wECwf1YNjC4NxB8Q`QT+9J_$^?&>zfs-kG43G)g-Zq@Dfh zqfJ^jgHZ1v=i(rmrcJ0qE#-MY}el_kwNUu>Q7=xpEew z0FlmUw{yokmJT#|X*q68&J^ zP*Rw%oEMENFr;DnNigMFf79rEwM4t0E$3a9`1(e<_T`=&I78XOTQCSdd>JM1F2QJ> zE%Ao>LdW7%r!_pDQk=)2VxWc@F+C4J>R4{g+cKo<;Nre8PAzd?ga?ILP2_$$K9aE8 zqc_a5X8+2~K*a8fyW5~pY*#~6&%AJ-jz<0LelOe0jio^GL32xc=|sCH(u|FmrTSG5 zlXO7V1%~mNNCiVK>KFYJnzC2hU(P}r3vZ+KVRCXkco(qhyUzt-kR-qCuT~y+WQB(A zfXOc*3#=%mUu9|JzQCb1rrg@3F&SKw$J!Ib30$yW6>TQm7 zqX>>vwZ+cphu1@ENRJ|i#jDt&zzcqAt2p3=t5vI<7tU`jGKi=*uR0z{=AKe~ z1f7k9FpaYo_t{}({L%X2cjCUAs+skxTRUe_`CuZbVm88E=AO`XJGd|W75gtsuV{F# zuR)9uBb&>a$w7K~120HIJh zt7{IEA0Oiq657YD`Xhk79MO-xP2@yF8b*?_6(+j}+r=ZF6N4;IX=*{HWWnDNa~?!~~xKqTk@I zMr(8&rhz>@9A_BD*sl-&MD)mMa4JKxgd$KPHxele<&IUty$%n7a&;r5>0N;;qZci| zapB7-4F1kT6UTKAA}ky9g1fu>)u*wJf#KMdc<|Y(Gv9uSbWpt0#XMz%ie0kR9cgy; z$57C#%#-69zfx&sCj?&S7_sn2!gG?WU3aw!TNC%G!(sfm79HbXLJ)1Wd7S?t-{0Wh zhB3&MAfdC1a@cTPc5|RqLlFmLhmz@6W5*>KHqN}@@7lY9K;hsE4AU^&`{P7bpWvaD zVF3Iq@B7Eo#g9zY*FTXDug#hHUP4(*0T$B#Uiu5dw6j-*=@`3qZVCf}g^NA1<&NOU z72A{JGrwl(H|9s@;u|?jp1@@2-}^i-n$1vzd!v6bMCX1+PvBkP0Uv11_bUdQfjeG( z=r>yHVT@HVe>g?^)}D1VT^Ron!NJBby!$(gJ|`7Z-dCG*U;Ckoy*;Dx*M}2DLXB6i zI`Wa#vJR&fH;-J6X}m*+%BHSzRUzY>f?$ zOY6<6_LobXiGTn>h{ukA1=jO#_z(P$ci}a)0RByfv1z`>m-Oz?DXQ~xneBk<`4Xr! z!4@S#Z0wK3%SPVQX1ZT$l$&W$qes70RY_;n-g=&0CKdj0vs8^mB}x5s)Dd$W2wcBHUC?>Plk14{GN zfn{u`{giT%CEHQbbttsk>m2znW$I=Xh=B=NVzfO8Mvd@*1xn23{fRnJS{<0SF&Hmn z(Eb>yQmzMh?+k#j&5e&58()}H-S(}!M+9+TE06YEDWcm%n*nl}sX*#+<0(*dey9OX zwHWC0;Va3Y&2rf?;fW1IOHsHF5IZ6QJ0_Fw+o2%_+=fQOM%rRG0y)A<>WKJR34E+t z${QFgFBvM&=m)vDU?$u|C{Q479ka<9--z+Yq&rS`{|6WQ$nlMeuX(@T`|;(4zfr>4 z8eGE#9*0c_9C*ah!nQbjBR$g+~z~VqHu;uv=l~lCy zT8%IaEeI;QR#|Q)3qi=5onDu2uz|V`H_11RVBnhZ`Q2ga>?e~Ks6N{v&!O)R7&}CT z8pd{v*b#=X`}C1syB_l3#MiXKq#mjLqK!X^p(&V0vyvbG4iFlF`%bs{VvDzReSQ>( zOEbF%xGcflI^)qsb#RAyfPAbkrg%-Qsz))}buEyGR4=iV?HhC;P?OVBJ9)PdBJKjg zm?1}3x_@tx+(ESFZ5Scw{A)_-<}8y$r%`o`Xr`&Nm;2YH6-rKXgsJVdD8OW>jET`` z6k2IB6!M?%Pz=KK{xgT4`4VscwSs|{_EzzWR}dM;__(z5x^(`(zxTG{Upt0m)#>=m zSGm7Lo1*Tf#x&Q0teEJ$U!hWuJqw+5o~hV_vbqZTtS|q#Z$dd&jk(gA`^AK>|NJ%- zyCR-p0fC2aW^E?{D+TaB-s*F0V=c*dq?~BKwCV!|iCZaugPr#J%-?^eOyq+8yqId;Jb6_1;lloJAqnl4 z;{Io>A&E>~lPx76)76r^QJ_iU*>R|MM{NnOCM1v;q8;Z$a)duN9DAm*(U5TA%Pg^y zLCN^$OSc?-=U9#;?#I5P-)*u4dfoPx4Jg;nAs(d-Z2W(`Dvj%F+r=QM@7l6jh2!Za zx3xEvCQm@R535w8ug93Wl7${wHv(Hjm}>Hfwi?!Iycska;V7q6X+au`c%O~78&28I zD-I0mg5C=v*T{OZtJiBBETAnBsE4NDI7t`6sp8TJ=@lZukXO%AQP=9 z<>_e$A=uOc4d;lkL_jaHd4^=UJG~BO_|PxX5uFHR7#h8!MPl-a5qUR-;8i0-zIhGR!EkDswz(BwZs~^)%uh*EvzLJNG@ocfx$wi@6!OSG*9U9wzyV zPbC%$_GN-6JpOzQ03PsgQM!?K`S4{XAapDVs<@EqG4owO4qJf5hh83;B^DBMLhKcs zwwL#bq0P$;>ojTNSljsAu+7#_d?{gOAy!?ly5qoQ&j9v#dj+A)3v zpta$dzP8=d(2iKbtJ~}f6m=R3m~L#~uERNUbWHfLP~U{B3yJCM{1^n|w8@)PkhKY- z_)}lZR^7Nm-B2UoO#?E2+1U;J!^0TjC^Gn%lmx|U>}$D+ z&@-1xeEwmKp04Ws_VyYe=bw{#2oe$z)$;OG{Mp>>=`$X2ZE^$}_&4&2?&hi`7ZQAZ zSMcKpVc5Ro(HtJPK;F&syKPWfsk-NZ<7k%U7>~FumI-0}73C!ORE8L_H6$#`ROeqH zF`uQ@9LroO?lDEDE?0&Q?|N;;UFF?zH)ObmyqanDP>v6GJYH(XBV5vU)zSGrET7?$ zfAq9MtJ@w8fOInRNO__R1rt6;>(<^io@f`E^Bcqs508U2U0U{wZ&o`7i~UtDYJNKL znzt{_?AxcJ(nnFv-m5vVc?hU}Rdi$0V;2cjZ;H=|MdIM#k`NNta=u&`6Hvo8l$_jb z$383Q=B%l)sr!nPp%_Tr$za*9`K!GmYf$4459bMHW%dzddEWnMm;s73V-iDS9Ond4 z%b{0co4?Q}&>k(x!>FSDoq>uU+1xmMy&c%dt8#4ahVqrDY3`yjX<2n2{x0YB5_TyR z2jNK-#l4s2T0HeAWJ^w#%ECn4ntiOtLtWTw)z#5VA?XD$YOEbEh(vZ`0HHHUDwCK1 z??|;@H|!Zuz)$mkwM76ot(_RZr+oL_-wL|A+FF;(IajT3co>yQA<4(V02$mD`0G48 zzRO|8?Y7v-_SV+(RHSTHmVF8FgP(Zc0_G=He>>UAv1g>Q%G~W0)YR07CmJI&2H~c# z=axjGGJejVm`dVLvR``@HcVi;0m!;Bw;Op~Lu%Hh!JTXiTh>$l|3sjQ`VhI9@IDUf zb!TmTDhX>242&wZFTtHXF=Qa5$j=JGkTfH~+v037n4j;Jap%WOIeT=_U&hoAi=~2A z_9KI-_LvpCHgp~DBGHmNlarM-3p3Tj+AXb^M0}JKvDhkqMn~g02G09PlUjXxfIm+5 zgE^RqcyNtz>Hj&w0ME~#!> zS#S?qmr0xMxn>XD<2RBpx$iKR;DNR0O?x zRB~`fjR5wP2=@*tuN``P5^v7Kg)AkP4=DA%q*m>eq{ZP9jRxwxESeDPHMs*TXbLr8 zi3qoM@`!L`myVB&EZ&}{%sz-FkP{cj&-hP%%F2pe&H8KbCBQKY40|$mJozW(C%Y?- zi@5y9m*n9u)wPcJWn0-W3-S9XTKX>-J-pmsHv_Hj`Uu^E2T9Iaxv=20(JOQR^P{f0 z)Yy11^*KK-D9$na0m4v_;z=&S{;mtS>B! ziqLo;Ayl&cJ6Hdp7?JRm4>G$v$&+#d@w2Ub(`_ckzLM8-U0?)Rsai71Ue%l!Vnu0D zp?grSt6d#Lj4>Qe;=kNUCv&p!YX>!-u@kVIYg&z~Z9O2$vQL6PDLu2*0v)PYz8U$) z_8xz3@72)t;sFYujhzzt{!Q064x*B%o6;Gq@Ab!CkTNqh_0w)n-k)S-^lY!D%5#eC zNOO0KUmus|GB3zbt5LEOEc;EtegY~$Hk1h5puxdrZaBCjXC#mDBn}E4C~J1%>RKURPASkt;f7<(l)U zX+&JRF*v88+P+tEW<1Q9wq)Sy9_wok2$Nv)utF{A$uxe0MP~zOu*$3z2i{I`oRmgZ zt@mB1ioX+3hz(~4bsMIUGUkqtvnnHujae-%S&faIAQ{d_FOwEphrCWIYLZ0^YNg=M zp*3&7{AVP#eiYK+ka9h1;A6hjz?Z9=4$P{Gyr(7e@;+xV(XNKPc$O;QDs_Cda(XEn zD*#A#PyUZ8iTtet977LJO zNZby1Ke4nX<|F+tna)MN7{P6X4o`AXP1crtD>hX~GhP2)Gy5Q5qH7#YbJKcrW98Wu zc7?+TC2EVgLya3p)&^ps0oODbsE8oE3H?VpC*d38!y$mS{GuxH10=4GAOIXiT<&^O zrcWg>0k*LCe)}UKJw8V=tyYhXQ49M$fQ;DnGhW;kfXnA(OT}umHOUdQwH_J$kN=W+;n!cfx=EAwhfQ|zq zqXjhAC<$I)V_oxo2e#2Vza)x;(P%IldBn;sw21t(b5Dzc!)@V3&n4TWP!{Qo7)hPg2`OTu=& z^2I-=1hBF73Li38Z47al@)7hH4|23Q=8L_yaUPY#r&faf%IHz|Fkg7{R&1-~O?~~7 zWR%H1z3rv%l|!HYnGPF*?fDF;n-Sv8!ePuC90^N)GG!b;)Bay zZ(m6Yl(av~EQ7JYXZn1f5vJ9(`0bt{%MTB|m*kKcJk>AsJ|8iWW!hz(C4V9BzMW}& zj{!`%Yakl&V5__hB!1`N9Ca5rX&G2udzirxxPKLdpMK$2YqW1BEEL-No)hQwk7;{< z1!IMuhlOpqdxaG$`rwj9M%)kYt*n65oEH~8=LGK{9c+{L^K;!d?;mQJ6del= z_#j3`K_|!YhY4#I-=`^kmh(wXFsWWUK65sG?RdVG@$Fkr`}=_BCMM5G`6nrmftND0 zpwBCYnH|??yA4MB#rBwC78EX-(VA#`@>p&dE~G#)kd;#hFS~WB&GMj+R$hXw-k)OD z-eW{4$;+Uh--btE@~lBjHxX4N=NU%)j+~uORu7?QGpLc@i}#8+`exdIR7Ej9dx^}$ zIkm?^xM=dI=YhwReLB@|Z@SSPhV{Y!F z_gWeY*4O0sNy10bH%^fJf&B!)*Y+gdeL(eFG^@$ynyc}M(_xok2H!u9>K)^TQtIi; zB{xjmBZ+(E@RPd3^}ZI*R9(C-gH zuM)Y`ST}OxmBH~*O3@3af7`OFfRR4%3>(H6gVglL5Qqg23-l;8@|NT%$7(L$)#1PW zgKg!6KIuy~`IqbOPj`QVGip=pKmIg7*a`|pv+Q;vd8*m|ILJ88l;aUXjqYy`E?!9a zo2`vH0aMXzsHcm(S6)o`JWhQDm_A;MV23P!cw)hPyBv~S?l^0~*uPh!)rO`IgIHTz zx6M$HzNQbU87xLx@ARm6#lQ23L9@9y$oK1JOaZt4>23rVii`7!R@&xazY9JrKXNk4 zpGR2ukW<^oIX8*|Z05F<5s|ZnOlf|E6yyTTef03LoH~>IZ*Yw5PTnvzi#mU8aLf6R zZ|(K*;2D(e-NC-4C@;*O0?Wb*} zKd{OQAU66LrgXcZG9109G=!0dcjAI)*6Jm#LL&{pv=IN|fd@9Uj0;N_$OZ?JyeEKp z;Wjd%>0oKHM>!oDpc7V5xmsVmAyOCldQybe*o4pC$Mo;O0z=eaY=i8NPOzh<;JPjr z&dJc#@DI{i-?bu4J=gK7og@!L*~a;Kl*?hvEroEnz-E7e=avrBLBgQ)2S;IQ<>Agw z^^k&6r_n5-@ad^{1_p~gS+{6$TEq%5O3KP!7Q7>YW{l>|E9lrXRZv}UfY1GetJ4+|CFBZ4N!PZ->IaWwy-BC8G)4NF*Nq*ZVA~hnagicz{ zU(TP{x_dCYyU6}{R?-SYq?flhG8snJ8z1EZ&m{uxUY0aK&n(AciKJT}j&|CRvAV>A z02B@9vh!VdZCUO>xo~E0EQ2gD(&1}O))fJ0CvrIRlI~L+`y9e2@|dbEYd7F$*UN$* zzUe-Ra<0bje}RvC)NyE6;8-wr)r7D|n3S~Mxz$%o~0*vOSZl@!7~ z)^&!Pe~prq)a~XkM72T-L2q)4R`pIO2gqh%=Yog}UA74!j=KmI{FJvOqs~^bnq^N1 zP>ee}h-_1RI}TQ`R0ta_-$sUDCJ0S6d+gQ%0g#dso9@MMsN8P}K)Wkf6Q@KKc587$ z)zA0t7rUc~^1#`n`9!i>6{Z~N?A_Y_c{dC%m-)L*U9+BH%5;e*krS8Svp#4u<>?qB zyS_irwBLn_=5e`+2Mfjw<5v`7$y?x`XPJC=`8({!;3nGjdDjHtV&>-mpanjlr{IJ9 z{i`~%iNL1=Qv-x z`IFx@YPceQ;}pE)Dmc?%0(~X^gxv`+TmO5}M&JyQnIX@wm%>LqpB9%%#UGy@Iy~sO zriUF|9t<7LG5LYQt`n3EA3q+ZXreW`teSjW&Yf^*?a}gmAiIj+NEeKr68_kYWOZ}o<#{ZT5E2VZW-t3WfcEz_O8-^Tk?T&5*ut_p$dh9-PB3X zBoYV4fY%bT+G8b4q%lFPy*ZM+&OTxw#AYg(&W8pY(>tAl;)u~O7^#j0VgbRF4ey#P z2jn);fv3j(#(4@3CsF+4)aL=OS?MEkyS*wji-RueKcSBmfq>E25`f$dMGK=EH2co>1UUk zUylWrALYB#tw{vZ4+u*7N{e_OFO_(m;6O|*BB$SvmuOdcXuN(%4~PaVzekM55@miy zIn+mjG)t6}v8DZ?$W3=C{gP6O|lq>0(8 zVePfSX@pDhNCJXf3-XQpSz}gL_vgXWWcI_`rWZT*xr@TY(^O1+2mmr1s|$d7+BAT zw1n>IB?_JKqv63|H-BB-hZajb3yKc3*=>lPnz>#HF||;z&$w=kn(?=}M06)uqu@KD z33t)C5goU)ANUJrm7nj~g7&5#lG7;JLewB)#>MD$eTU8uc^^^Ecy@1nw1c;m#?ANc zuXa|FTsyYEU*G^9n8o2^~_iFUyc;LHyo@yPi8UJH|k zj)4IfWr!S_;V1nWTGM2th~;17BX`7&2^o(K0UM>NigT^6!6h~j*3t9 zLv1KVluS)6RBl^ZmQ0;BkO4^_*eex$dV$Z|8jkt4BFL-;0LcaabFTzKt!tp|^F?h%ou5sZJc6_lG=@dV2?+RH-&TC@ zp$)>`)FenFo_@4Z75XA&Lc+^wkDjCPiiyr( zXFOjz4flifszeCt2?*_?3$``Ts-k1teijT@7f zI3gci=$`~}@-D4_W}j&Rl9vC=?#X1o=0Sl-*D(){salc)T9xO=O21n^#`fUZZ8!^> z1KNiAcaH`!5Nn@3Dd;&rG2t_Px*B@m!3Zh>#LofO&ISj4`0mpWY4yx{A`HuMGfGo_ z@~_gqh`&488?jlx5>=56s@(jgLR9R61rVdn0oOj-fVZ?Zd9_+n!0>)ZvmW< zY8`MvghqvnvX%*lLFCQn^)HwPl`St!wy{&!N_ro|KkZ=QB+rwt3|dhqENh~JpKHT= zV{0BB{BJ~Q&8>n73!E8rHCY;CKOmN*7$^=qTgDe3dk+&Quc)Uv_1T);9VZpAiX6f85Z6^+j zCODMa@clBOkUgtB@Jw*>w7wAj2|&Q1B-AlWG(ZA~o?dF^czlj!IMEVtf87g&Ek?l^ zi=Dz6W71KyUd{@tzbM-!)u;r0#bG88ra=DJ^8O#@;i|LbkBP<;7ugd4x^`Xxb4F!#z(s| zc?+n?b{-h*v<&Ah3&=g%_u>2#!8vsONBIi;Jfhh-4sP8|y?Zju|>SS{Nck ziS`N#6bM{1RUH+}ctD#S?YEZXhGxq__I&g|D;YnQUHNGDoV@x`6+9b)H~ToIO7Gy) zF^_=JVMhwi+VRmSLk@MU4((v(!}*wH=;?x9Z%>U!^=C;pXCG7;lM%U2y-WsdRfZ$4 zEQz`?B0u)ODUfXN?&A-f9upCRJ@|tmw;qkbMu=MT(uxWxw~e$R+fR_-at+|EOnkg3 zhz`u{aTe7VG_5q{+;Uje+CKLIv$dcHqW#W2D*o`ML*-3wG$yV;nn&-p*D{`~GuDd= z;n6O}nL?CbPgeuUa1=pbsUA9Yag=~7gwMxwEmN6t_o}eNpV8Afm|PK3(=+5N6wG1w zsU+}EPR+1e+IC(<`VnuighnxnY6Ru#j^qmka}e;*L34gqj5I-KAdN|24LbV>2$n-jJc)+re%5; z6&J5~rX#VDN8Vq)W5XHA5kkSU!q3sDumw6}J?)p;rD5EoFPlD|q%@hGT9!iKx)|nv z=YPE^DHK>II%H+lG56#!#|uIK-b~tq4_6vVyCUkbzBoreqEe=hK=N9i zsCabO0OK@eADslTHtP+8^L#086<;>o=&uoQJDh~_*rj=;U8rlB^@bD`=QjAy;>bC6 zTO~?2%AJSKMdZZJa|w(ANJ5>LavO7sJjbD={6DPMg|z50&djq#)0{q+m&dl2Z&hg# z{0}49rR?-kTB3rq*!ZeK7VP0NPds;>(_i85EK`{lRu@&;W|8O0o~PP@KT2rVbCl`+ zw7GfGGE|vi2W6C@)%n!e)2Tw3`K#@v&`w6X|>)CJZa*MIGb6yZveF_;kx*!QyYaohvnW zQ@-Z6*B@40yhx(7RF-Y@b*j$S7m;E-8F8K9POK9xLf6oTdgdv^lc?YdcSNMXExKP) z7em4@i*#2G8DeS{-X)!9KG?=6XCn2AH)`_?)NnfJzc{R&F~BnO4vlxJYyVz)I+t}9 zrAo@nXUQeZG1wl@24eR`2GU3f@&R{_mq^lUYVA6 zwW-Gln9A@#i>h>Wn~x`p-ON?tNno5v{>un7!XH2qi;BR4fg%S7q@o1uW*Id0ZIH=}dQWprxq$Y{VOxDS5|oAij%X&zk|-ro2T zChr*{x#V&+v@7Py0z)UG-qpWRQd>52Xz%QvHC-7Ioh7h1Md(A^BN!C)YcPpUJ#y#RLr!`;>ZkshTCtWJL*Ip7Oay zpfzoqlrjiIm&(A0FZ+iFV2bge&>PR<*t%)qPs{^aW6#_@ks-h&_?XyZ^&h71b(gX% zDJXyKC)ZH(hPwtU(|0X0_3iU2#YhoJQBwT{*Wu1*o`#UxHv5?C#hQ16dEIaJ#A*); zL_DM!RDWe_4^E-zu9x9UPK#5&weqg;^=iU+Fus-z$@p{u%;9EY|MKDV+&%hm8USv z92zbq9LBM03!cs$0p9eLAPx`NxIO-F?9j08epc@BekRpHNzR(3!=ytv8uT#6Cy!av zDh)U{B=Y#i4WdD^(Dh{I>hU3Fv2<=d`EKSeEmk6XQc`_i$ZK%>Rio%55dj%)tXlOF zt_I1b%B815+TTL>W~2fM>}hG;hqFkTvUyk-KFa^b`+r)1%xq?5JA%ed9D0%t21-+w zy{TTswGUfJFLs;U?~U6Uh-(_c!InA)Uu*{kw%Qb8CB@W44mW8w=!FxLsTN_Xy(dzL z_g9E5b3x2UYctKkLU|2Z3I8Wh^-r1nnAzwpL)-m4Af`?|xpBE+aIpIg4j5!3;JPY^ zN!_y<7jL}Z*DBwn^2?2;&NXiSi;4`-$le5F z%P5-~r1j5$68Il&PN#<0C}waGOQr^^bWL|oCdDEZC&0L%zHfOk7XEnFhs+K{U1Mm24p#zGHR$VwDPA3)nHG*lL{Jvo0&7~i5wdk@!Il{QY z>z{O5;OOx-Ee(y4tOC!E2`Hw}J`&d~3Xaa)4>M^{ip9tML;$5PNbCSX$>a6ZI*^AwnK6)FDueA{PD!Bs+3xyMEQgO(3^ptN5#qwh}!vQhSb*K zJbo%)#~WmsM|$+G-zj+9_V3_4%@_9 zB_bw1!y$l}N#!ZA+C&=aj&D|4)H!`lE61;{ z{8N~$%yqB$6Q5tF3|UV3Gi902*EwtMZ*jpmbkqzC)I^PkC_{l`oapZcTa5I_=I!2V zUB;KbETRqs`Ox||3CgxZANnW86))%9cP3+bCnueH9PDlW_Mr=0!T!)n?G4YnatHvQHkE?_>Ahki*`D5{FC$@#&g;iJbXB*uy`FN#bqQR+d)^7o8Bte+x&yfShFcL_Rxz>HSSk zH63*Q?3vD*#6_{D0#1Y0^MzwFp`4YGOWw*Xq zQv*UTw4*`m>!@_^Ts65H;jJ!QwEscw7;%Iaq+ehIm5A1Stp{n9JLhRk0CG-YQh}6{ zJ5MbSlpJc-Uf#>7=ou?p=+b5z5Mh0k|HTk1(iL5rl-AjCSL&ZfxSk;F8$(*W=^ZbG zh{WE|zJwD%65sZ($`xT&eOi8GuQX?N)|abo8jo2U4Lo9tL^e#bsVDrVwIP2_;8*e7 z?!)`P2uRjBM(xI$b&5e*>W^!Q(Xg=_Z7nFE&1yLr2&AINHsHNU==b$a%zmnu$oktR zaP0;TLKGFbr&OM$XJjgB^SS>(S^Z@|SZsB@(t>I46rjmKLpk8`A&uQ#H_f{N@LFEg(3@9d8!;lHEYe)9Bwf|(EY#E&@sRM|Ta zMHFnJqN3X&OqFEFO7FPR3Y&7k#)?_p^ClJs0w>3JzSF`LQiFUqK^$h*^;y_3!3#?n zYjH_${nHiVuFC!C~A3@wgV=xZTdXUzd z1ZF;4?^j;K!0n;wXmqU=fU=)gU#HGZe;J960P)_}TwSKEA1|k-UY;~As$iC_)#DGH z&i?f_zv5z~p$KKXA#d8qqYrl07GDp-4^(TBh&3W>c_Zh=E=g}JHS$%DunKh*Wp=6z zi7eD|8d>lCz|`jg{O4uVUWk3x*Yt)cZqLV-4ZImW>2~R^EjmXtzaDdj_5Ulbh%$T! zowaP%kC+3UD3$v(RMq{?Ip4%YW)u}0LuinPrW!*pZEQrA?Cj)Q^mJrga=weX4t+Qg zd-L3P=tDrCetdiU%ZlJvou%$nvFlUb&)O+@$exgrv>RpuhAJo?lxHvQI$g+#xw-5HM^VmZ5{GP@b@1J8odF>c%XD6QW`^+6W|8tpuJmB4yh@swGEag}>Ci+cz-C}@c;L?z& zI=nt!N+_hJ`kj^pKv)!e>P{-HS~Z2)k-;bw*fChl)(<-yc)gE1D4&7s(X@Yj)m`;p zH($rFI*^g5XSr4yOg@_dQy<*llxDb~tH(Oz zKkT;F8F=uLlh#NhX37Q3Yev8-xjy0l9vHx6)dL%aF3$Q9OT(}Ie;+UU&cj?wG=2)0 z)!F@-qLrZhGqyS8dx#UKRGPz|i23+E?!4UqztKHyR(Qw8Cs;%_Bo#&|I{KM@W~N8A z=FA*dub%{yLWk&LK9L<=VQw`|oG}S8c1s1#kihl*SFuEyX0=D8>$*CD;)#>`w5uN= zd3yk71V_Q|F?F?8HZ{}X3#p@>AoO%c#~ATKro!4%Yp<%t0{`p_OJ-TWg9KDTuwKqN zhIydk7q)FPJi9OgEVmePtUjl@M>y_3KLj|r>~fg@cngTG?t(LIbvbFLQnOD{{r58~ zkj0v({wuQYf_o&+-%8GSL+`Qk*G`Qwg-|XPiRkL}KKptq+yb9wrhyC;n;;4gEwp$_ zB6iET*&425dCx4CxrRYJdU(g-k104f{E~jXtM_T%TmmhFaLTW%wOFTwp6HugQAfNl z#EWY*q_fH4hh~lT^F^=avX1J=q2wf)C>k4gra3PwQ!jhdewRK^4%^A}7n9A%khRlr zfxo$GIYq1WuCZ*wEFe}Do0+F9MWFS00<5;64OHGks)CQw?E*FAl!)TvV&KmoV%bTs zK&{B=a_rixxGR4o|M@UR^%Dil&Wp)d)+q1?d_l4En3q;ZiL*a1#$QLcF$gy>ajd4J zqJT7=oLry9usuJX$Ld*z2iS2-1+P@?r0-D@PId!G#qnB^U$avwaAJ@gj}OLjm53l4Urvo!W$b#~^58ip zin&dqRdXgbz}DvdWmY?Ug08>mhYcoxgcBKrI9oDJ5lmyNa%B6ff(*?HgWWTGvj|45tmW!mul9{IS9+RF)Kr z1NJdkGtMYz_au3b5ZQy^IS?Q795cX76LO{&NmvX9h@sD)S#CVD5p#!3F&>(Ulh%cf zLv6Qso^Xods8jB$(jKq(gk4lw*W6DdHoB2u-Hw6?tCs>Y z16HgWsaq7Q?#2|!-97%b9eHY)-XiYP#uqYBWF#4=zK+NDYjW}%;#uw5K$a(>T^p_H z^cy#^OnhuTzQuXGtV=`5>4XYt2`y}=n@~)o1IJmU(o2R{7!@OT`^P6xYkybX)xUti zkSO6W+jAnqct2gE$ktO?b`efT;>1fuW`#G6_OBkvk=83)e*Fr-9BC~mnr|5?zO_{l zG~xst!tv=QSLU03AZ||bTVnVr6~F$;!ihQEwSNSnKjwJp@Xj9sLDSbvAM~5{_}XNT zJq9o-u&04NFhYQ_MIWhi+OtmBliV61(M`E{qd&nzhj~{-Xx8r zUmqIAwsGU#VFM7`a_~%c#Kn79L>iFZ{kQF?zqxsG-A=@PK0(SCBJ~0Op64TI^q3IVY4>XOCJMq5PeoNAQ;?< ze#G&IKNNG43Sjo}QXmyiWnF&t_8wu_d~p9P^#P@{sFt84<6TgnDq( z&@)C3V+`jH4-tTl6Fgo9*5F#6h5h*VaC@}laDyQIT(z{r{>10PGtBr(ultW&nh74u zRqEQwJY=shbz&mbsRQu$Ras&^hOqIeS^KFI9=CemV-dIux2kr+8cxYR(l^~?a;6SM zFz)yxv?c-i3x$cF`1aWVFia7aUlOr0e}SauD;E!QX)bKlM?HLt>rq1jx3B7*u$&S1 z7n}X)o(a-7kdAc}8lvMX#E%Wxn?FXwZq*{g!_i z&s+#9u;UrLEubZWQt+<*`3ls}oIHA>PNp&E+ekTg!k<@~w)$+stBypFBTdUAv;V?* z0c}+XbCOmzy@xf%+|6K4aWHR)LJRf^FAsvbhd&=%Cp>3m^&7tYr@tj7AwTEnEPIF} zLjNg*L@$J&`eFOzIC0KQ9>nu8@c%nWp+oSE?Ey-EMj6r3pYTi{Xs?~yyHR516?r>s zgwl!f?CjwobbWn^5ApU>_%d@S_es~UV9Z3KDqH66M_MBf3M@et-@M`~o=EN88x+EY zc+dX4wzOT)f;3k8++H$)mcE=2zw9BNh2QKsIIiN}ie!1yg|M&IOBOrIe+*CFFz7pv273^(o@em7}YN+t(}h-SnIZFuM423ZF@{S2-0_O{Cn2w8t7* z<+g7t1o`CzeS9GDAwCeaQ^5-rgX0w>7S8B~te2$5&paNJlfG zZozpOFq(GCbT5U7S(YX&QwQ!2pdy;RcAS%vkBY~@e;d-#PgbSxv?Z4Nm%>U57G%I1IUuc(ZE;iBHTcZd}ebj8sbL0 z8A#OtkeSWZx;ssfQz|TKmgBH7*l&y1$79m#(}!vLFKiZ9m$^T= zKb?l=c1^HSA<9Vl-fNWf^~K)A#9RUyHt{PSze@?JV;&?X#n_b=467&r<-$ zXhWhmPX%~X7yiJvUZE)HcW^N~8v}n;VWgR6j7avlJUS(vjsR^jeoDE`bGW#cMx9+F zAEIWtH{7u;d-mFdMAAO(??%_WayuSqBe?Wz;#G_xV_~oU zUOQ@hhyO^>rWfJh8+y{W#7>e;J;0px0lCdNIYjJMg70I;?;15_VO1{uV?DYJZlQBdZ1JG)m|)|4^j1KHZZ6tzu|u?nvGX8(KX2m*>mS4-H-Z7xr^K zMjzc5+GQJhI*8vhY`F9uBK(-d+c5&`=RoSlzuX;V!>K=H4*A(8aBt(o>3T3#Ev&@Y;`Bz``7Ys;8(w zfcerl48JgeiqXZFelL5Sc2_8RzW(^j?X4SfGw@MF=$Jna-`@C-?$?Zp*Q?aFtZaza z1N_vlL-EzE+wF4(V8i_H=_P)I4#IxoPSBqcIZByl{CsR`^ot&Q~4-6wh7&=aN$#6ALNpQ=LFcy@I3 zWVLUL@UG+o<$47eBN_<09)V^qW@S#*>o7VOIn#~%DL{_s!lPzu7sM?g9T5Iedz`j^ zVFoeS7W~AI?v>y%|9W^Ipx95>>r!W9_&=~<)g9Tj54+sd{*j}0p%kJp_Vrz9pOcc; zNCW+i4OauEA$b(8a@6xiYcbZZ^tlQuPEOxRF{5b!$W&hfvHATk4x0P=twuz7!if z31RPk>IT)RvX@Kcu;Ow>z)_Gmf>hYtHvtXv#uSEu5Q<#Klco`5Bi?3iv&Ik|iYeX3 zz}bxpti<#d(+&^m*+ zyXKz-k`#xi`-Y^up42Ni&hGPm8NFQItL(8%xEKC3TJ%90w=;pA#w< z6F`2X1BaIP`f3mZIs}gdGoD$#T)^S425zb|%8sGs5K{eS=)q_`kB5c!1PJV2flj;% z{P+fjQ~0%bRg~=NdKOXxflGnL5>6$G{s?Kw-fzaLq|u4 z^s4x6=CGC6C#<%b+w{BZp-ld$nN0rhW@{;3QU!X{zN?Y-FDVjqH9MOsxF>q~7$J#> zs^ICOr8PzyS>^-jSw|0dXY87Z*V}3Uq^44%v<_#Dw8?>F)3N(yU?j@jtQK(NGB7Jy zSz0os#Cp-V_3sgyTUv8*P4SD?){G2Zb>jB7kYmNq^n=`Ha1K*we{K|?daa1{km67p4)TQ_#j*x40APZ-ixL#Zec z6K#!#ef=v{C%KOUM++3RHzbz-e96jox~3W<)~6M04>VAKjAPh-zkeI5@Hr~DigIB= zJTe0LM{l-RCP1(+T&MLMzKY+@DYK$INIC49MaL;c645Vc%RrJ zBQDL`V3$Nk^*Wz1bH?PrlC#?d1{BEXWov^s zSTj-Te^6yI$t|y5dX@>Up?*`CG4TTvj7Jw2UbBc=ZZ95xCrzkNxb&;jgi4{BvJh;~ z8sk{W+5&}u`3=XCCfxQpRN{Rz=@R1l$3@oCT@-Q48xab zK$e63%XB3lJ|d76<>ZD+HIYGfbIA+QeWU~L1uCrKHcsqbkM2(Q5PK7v^B@L$_~)rI zDIedn2W!)>V|k8rsqw2d+x&|}tKG_J8Ag0H_nF$9xp*#hq_8m0x^)xI$WXxfI&C0V zOe|EoheuwDh(E4o!}aZPEBq|#xb%#H3%X`Vy1AExjf+^d>#Uj+I%h{rKOHG+GXJeJ zF*I^l`E#}yBhljaw}v2O6;IGo1*Fg`ZmF603+WD#6s9$$cDva6C(>;G7?4fKVV(63 zH)M<@6*YX73NnA>42=bM4)gz4%V_8Ie8_sTsRn76R#a>^yI}0w4YD&z@o~R!g_(xX zIWgp1`HRAVUGTu(&ThWHvE`H$eL;K%f=MIF@q~i3kL$f{U)V374heIDNli11b2ooP zn=|JtD8F5Z`*rNIQ^5Vqc02&z9|)U6y>uuJN$46LAekQZCbv$9i-k~vCH)Dr<8#z= zKfuYsUi4f&RqgGNi6XDmOfIH%2VMk*t~g8Pr&2ob8K`3w{k99V-rHw^qU+4J%A0*C zRFAnAS_B9FK}v(={UW^A{q=-VW2i=op8t*v1KpjlOP>MU>cgo%$bBLvROYuD8v3z>F;Aqtd{ZsKBpR>&bwd&2eye8yBf-h;>^`l<1O=VVPF%a}&}Fy$V^4tia#Y z7ToqP;mEM?j8oeY*3LrNZ0^HMRrNP7ZV56?U0mY&U{pJdB-ZY(m+5FUmtjLE$f;#; zi7`9iH_ZQ$Gj8LDe2e05yq1LYr}Kp9AZB->!s zs)D@Dw1$+_ps9gW6J$Gm1eRsQek498c-tTE$*SmcGF_s?M9I~Yq~UEqvFB&WUTBr{ zk-$3Au%V$LGE+`yHmD|mcGiPr&)CpO{{+WpQcoC@Rv6qQemVAnXdj>qohnjAqltDLJ&?dSD( zP4RsgCjIG9T_A4Y85LsDlnI1?nc2HXi3{KCeGHOT3B=|8bt)SU$(U^(V=~j+@zDJn zBZ)9^ooPn-MLxTlf=07}1w$lO7WNt1-zLoiWAH9k<+8Qb8{9!FTH!RtF4D0XG=6`K(gHoleWy?zn5XL-j_viza1fTo z$XQZiV&VGhFR1Fj*B7ROZOJhx**{3x_?Cz*l4w*MyoU=)8<3pBie24@2JI3W`jjs6 zft{~_agSd^*DTFaS>-gTH8*ib+nE*I?1C+91wX%v4z>|Xo-*E8tN54cCUep9YGW$l zU8F8b9VP(Tb=aBcU5puWt~{>iXI#S&ke9cdXk|%8bz#z5ZZtm3@#YaiwVdhM8&ux= zLy`cvn%#8Ec=Dr+iI3PnHXToHT7+5A@+_Hf0jXO8YhRXW_hb_5jq=x$VdhoIV=hoo zO|Jnhi}>$ne0WOInu0v2kgtK#5N08~J37I;^gX5svc{p9m61T-kSG9%FDXc|EC3DLb6xtrh#Aq$w%fHsidF z$HZ=>pH~HaoP++zrggPO$9DfE- zp)45P3uPBnEO~0@LAG?bwnqo86jMuOd;`%=7-$FJk@fW~AunR?bpZ#;q zV+-Le`2Ygvv=)<5(X~5#zSr(uZr?0=A&YZSyb0c%`&@UB&KcIUl;G5IX z*+Z$m|#fApl z_@>7FkUnuvAq>giZhh%^r1gQ5c$hgLb}^=~eGW;JwDy~a^K!bHor2rSY7zm)bJ(+a zHwXb&5*@JK9DA;+h8Tk zVx)SvA_^9GKO(wC_j?F)WI@l$3q9i)&% zM4NRdo?kXdY?oAK6|+3|po>7Ocj04+4UHm(NAoq^cgEfzVJwuzv$NKQBX;k8E2b4f zaTSsB>VIX_lHh1#_gucZqIaA^c`kB1Aw}cg9FyJFl%;HH`h!@T=w_?vqhOED)?(9U zjpO&eSVP{P$v3I_P3vaNzVB~A$2JnC=s;u!laAR1xnKQyHnjNi1;zsm*j~$CJzM}R zC(4=GJdn2Q3p&x8APVh+*YmBIT>b(D1I)$w^nbn#(m+td7C`Pu;)X0e6aW5d=WY>( zlJ79!Onx2McC4XbI2z84c|7k<4>XP*76SB}qlni{6FqZ*a+?U83MbXs*%ASRXf~4@ zC0)dZBGX>KF$vT`@i;hgiNy1p8`Jv-rBuVF%#NibpKU9u)eODhrNM? zZ5{Xd>eHMVmOAh#sK?lQK8hOcif%k7i4bgremkf=DQ@!ghCKh6R41$wh-vSe!3uHo z*aQZ@8w?22C{sPX`o1dIDF5G6M|37J19dO8U(}PYT_%x;*H~CC3fa-W*aKB~!OO%< zDgSqseUjis8=I6l#I^Su#w72Z5Snr#99aJ^xajS#v7Jsr4lxXq zu`_73sv}p9rpH7zA{v!y>T~A}9QoGm!OndHq|B%@(p7(Dpy&DZeL{mQy@k~%ZdN20 z#LW}>HM%Nc-iLmj>U-JK;Sqeh$Lb~X2W?95%fgq<39H)z^%J~5qV=yoarr>5rR-yH zoP=3X@)T{}_p@>D-_HaLc^~JlzB2{vF0&)dGF0+*k)jV++-7>usu$Ozk%3%95ra)w zIjbaUuUb}9Q&w884&EKQA{s;2hm@wqwwpkE|E~j_GzMKRldqsCgj^+)=M(kKHgBUE`DZY?|Ta}nbB)vEvUb!E?d*w9sE*W=V&O$aM5Y--q4!(;{ zCVZ1jjRiVZHkxLF>;6uIE41X3vc2tqNzEFBTEE?6<0Iw!F>iM`&CG|C|xi&a2G zjFv{+EKRW<*23kg%hhw9V15j?mx*tE7^Xzebsv#4GY7Ze9L1;|E5Gp4>1=WT0Nye zZnpRdBNKe6N?}Daugp}yKMj=%0`jRud4*>d){Xl-^FV?;425TQ+jMw};Q(_QzasYZ*ddmU7O;@xfJmaR6nCFzl& zx%N%#+VR%l=yy~v^Q?Je1nX?V04?41M~kcufs=H5L^|d9%WYyyu7N#d@}Bg`E}hCp zKOf5homGa@N-hKj9=i-dYp)M;S&*?F6*pa#O_Jhu`C8)&xZezAVW*UDbIGl z!yC=}CW!j5q+b$$PD5a2ltd?}wG7V_^t6tGMjGn{=Q_c|l8wqRLVXJ}{0 zU~~ikz|R)uF-#$e#=82t)m7eQO#D-^ zn~18!oihxQH+L&{N&C_=5!w>r z1wW<=kfPs1=5x|H=x9ohqxtS)|BD%VmjGK?k=$MrvG)r=Ml0?gm!g$JwE}*N30m&G zNpYFx>T;t3nHDx{FhAGdDc&yLo$d+=5}-14$@#R4Iz2Tynw`llD6jSObY1i-l4$Xi z-MLsBH?RhNDSR1l1PvZqT4-$VhcYvKZzjfF2t$V!DXgRl{pD+9Y2!X#kQfm`vg$ua zmtF4s-b^27Rn?hMo+gAX#j00~eQOmdyfiUNWc|9;|IgG=h`2$Q3?v#<6_>D%qN25N zKc1w`n?26;Bc{*VIo+}k7KUZLGcA}TfVhY0KO(z2(PlR1-mX;f`5u{-3bxK5pX6dG zKlXp285@Vr{^C!0>KOUgSlF@!BNiAZ1}^{y5t;Q1h2ABkH)K?o0k`>o z_^w1?H`_cV^1)61?%~$%ylE}LiP7O|cfE0D9)E^IaBSqJhRoE+8xrxkHu)7`Dqcfc ze?rZxoYu4O(}jn8Ip#1w!!#|<-Vs$%>4hqc{F`HjB>f@u$EXrwS6WG?#8=vUd;IyL zogMP%5f!{CwbeUrx9ochfcuW3hl8}AO@p3eV;AaOGY-CnkBFg^Aj72l*p%6%pm$;e_^1&&hsXW{5q*XkR2kB zq^;zC%HeVE^l(?8@U5M|R7w$h;n|7};qtA{j9dh?Y=gqRRq@lCRNa~mzs&|#Di9|B zBhj8mZuu6B^`ba2S@RaBt(-nqR4CEE`-J^oWZwVtxs6|JW}Z9G8ku?Z|-5=J>ojkxTt~f8?NTpU;1W@kCPVw05k-KoR*z zpEVR6V&bE(rH6mM3k>~ovYrMU#xnF3bGYvvrP}%8MAV*@+!iPq1Zaq^!^{U#YZu6qDmmfjdt2S0wo(h+C(*x13^MS$EQD{4_ zz0)#A_if?Rm^6dpKiE)?btkN^iN`m(OkN~JN>zsbKf9`M_s3;Z6YPiL0kuWk@$ zX2%2dfu8iRCmd40>vZ|xP)FlH>#TW3X2dj-&{9+46MXr|!L_SJ$o;_qn7l7r;=7e)e~2+C!tAIE#<%{7M++*r{h?z8dd}JSx>H_f>4^4<>JY+9<Z zqcKjQFj~XzkdSJ0FXD~mNIKj*#zb_57V1wByWmL&whz7bCW8eMMna49@1ysP8V@}9 z_#|=h@x7uLOMg)pPN^om@zA=wb`MV9Y1!KH>iB-!(&1QxEi7Qy_gvaZlDZ$Fssn@I zkzB8;m}>@a)ug^KsB;=+*rDdITqSl?Vmy*)gc@8$CDsX%HFQ@H=|C_^47(Uc$T}Id z0Yd8C-G4@c|6PMW(xpJ439U%9tRJa!;KJy-G0UKj;4?dp2x#*8pKj>A;|lK|G(VB^ zns^>j;(?t1?)SgT@6zDeH(hQz%IV{uKJm=DVGI5E86k2xQ4+v?&AIK?6t~hz*)MSx z+6W*{{<}iv zf7CPFfJ}K!WTSEEcv{Y6>5|*P2?kQOzyD?V`%yEI(6X!&BLmoYixP-Z;?^mOd5wG6ONlNsf!tPr&r7w>_ zf8+r=l+d&qrtmKU33?xc*Vr$wJ5OD0^Fsu-Pfx!ze@oMpU^x5f4CftNF6mJjaJvuc zQv3MZ2cpE3hDv6VsXwAQI3APKf>3ly`fn;7{|vs>BU}KLonhIWXN27@JZx><`(TR+ z0ST4=!XBgPhs})}hhW+7Kxf~4iwiegS*Hv_)n<&I66idQtobT7At1)jg)46d`_nai zgZNPy2-_;H;AvCPrU{yS%+iFQGf#=ORGjgsA{Y^8VD`bl0Z=Gx&`4H+9VAljoJkhz z;h3N$^p-_AWdP%cz#(}goM%5uOrV)$Vy%fwr%PG6%X>+5WtTEA5?IOkz!-fYe>7N) zooir1e7mWcy?&;@3%?;G{a#52M$e(>onBPik@80bOM+8!rqa`=QXQM;2Jfo(W}RiA zxcZ>!1=$(}ZId8V7gOR56l<07mQ^+F9_u2MA_Z<=yi6oaVUyW-uERvyG< z1%sAOn|a*&sq5HR?`v-%tDH+Rpv%aFi~!-!w0N!X-sb+5K>P^wf%SY}#MI{Hg7o;ba#D$o0ZBYMQ`l0B_UbSM=f}CtcEhf+C0G}>84wJ29Wv$ z2rNlGcAeX{AQ6m`kKcyw2i@S9W1V)av`P68l>AYd0F{-zZ~yDH*k@~~<{cO)eLRnY z`qC|f_$^#0JVgBm7t%%hb{jQ7{tVcWx?}ad_4Be~@CiR_h#Nxy79B1cIIq9N>ibDn z$s?~?s=J5w*iXl2onmMMHJt-ze+m<}Mz+t-D>D#c=ag zUHPkQ`10lIAtL-m^U`nR>mN_P(Q259Qxd=H|2($5Vb!OjY3n=|*KGVY%95kMm%K(b zT0#@5a0Q~@Taz`UqPJ*0zlp+~_4%L=Sm8zi9e1=L9+oLh?Ta*J4Cq!RHD?|?hT<>BHUsnyUVo{4ViRxOFNJF6u*lnUfb0%2o#MBM-m+Zo;y|*vr8@;?< z(a5UEV+cIE)O?h5lV@UIx+VwU0SISc^)bBNjwydwLH0k&zAo%h=d`=zZS7dM`l)yk z>7S>?-p-6Dn{KyGjx>@(N6Lq@AKHCGYKxd}wUjU>wx`oE(z zj&hsbX2lNzEp2{Nf{r8LYDD~k5;+R-e0l6FM>e-A zu_((x|2lPRbd?=7Nyen4$4lsSv9Xz1+)Zv-qC#@5CZe;@dz9$nuhN?eazU#>g%XHA zi<#>meoOYgf^bEyt?MedP^P6_Sk-Q8mmXzR%O&pxq@_kWd(;0hmPxoMK_bniE^I^! z+0}e$>FS|HB-1ZdY7Q@Oe&18-6f27m8qguOW}Xj7Ee1<^v3PS>ELm@D$qC|^w*_F= zS+(tRD+SiA0{Tr)OnZ%FrgYSe8G4aSpy@)bM_Ndep&-2d%y_ja@|U6ZVo3W?0V_ea zy<%@Lf3l=t(8b>)9$}+7v2pM4SOC@JvD6yzE9kDw$ZMc%y3UWM=sVjCe+VUl0+()A zC%L^f0721sQ-!*_Bg>aYC~x(+=cRB$etzi`u#7T&=_!w2iJ$exa&1jDv0RBa z%5*SBN7+Vm4_B1+wryoMq}2BTxV7xlJK^@PHmN?P{gSnKDm2-()%7uE(7c7*tJ^C0@vkv6Fn)3)4?_b9yx$)HHGWd)MWFV72E9qkSM>11!pI72% z_4SV%1#}XBz2Ms93QYSyDe1yO`_E5bi!$u>=e@cbgO@cm162f%WT8%u_i9xd&y+i+ zR~E2zV&%Tl_)lzPz)7r&QjE=8l4stAm()PRps&W#p2Sho6A2g#tU3l?V${(-5)K7hEx#`Mg1xh%wW0t96ZyuOlEQt#IkR=!H(5@qdSV zH>-1B7Y^I>lUoi&o|Dqs%kA;+hHj^LWWVTBcOT`s); zdtj`Nai{ey2Pgc(*1q?8q4EaCMvkRYfBhw%<7RK-qH)kwNlCP{DhSB;>ud0Sx8ggF zDm^Wk-zT8ML!HGyZM6u{?|io$glLGBCV~h{}xr% z?{#Yh!3+_mSRndU(a}gLti-R!*8$_E5X14Yd|pcD30f145+?cIC)DkCe;?fpXUcE8 zbwh#=nruUk2mdSk4a@a#NQ!4Ci&50O71Q5<`M9YE1h@^LKkb{nMa84PV`5^wArH=U zwPU6T-3`=Jql9+l(0r?;#){w_A0Xcz1{zf z-&#CK1joO2Maw%&gOM62f^53>)7H)SV}IgQe_~cYMv+jM!$^YH(MtX8Fg7qxAv^DIlI~Z(#wB-{yG`v8G6#nZ_P(? zNCdHZq8%>%mH5PNYfAwxxEH_WOGSTtqYm_soy_Oo0(-b_C$WCO6Pvq_bR^n`EB{hV z68iXV6pycWQjFrZWYR$xXTwznk){?P=mi4@F@t9MNP=g(Y zFqSQJ;5fC@`)}FIZ!9&gjQ7wlk7JrqE_C8OKbu83ZC3mqwi#iw#D(QdCyq$sJ%a{FE;d%2Rvg5aGQ^ALole)h?)jXU!0=Z2} z7AeYH3Y#eJ$rnk4jZ-OPihP@Ds5cov!7n51Gc8*u{;>Wv=Ov^>=!a^2rNwBSS34#8 zN^8~~9R8Mn;PU2eES*sFEOyo_6rQHd6nlD?UNY@9`^?5O+sEq1L3eXirU4wns}d$# zxM*>p;5fzlsE@uo`BFVKk_DRR8vS8{xWsC1-Y&2`X0O?1`8Zp56NHu+F^7)HmR_=b zifg~e4;m5chX)$S8tbqTx)nAuG_X<9d3`ZW&cq%BoHa1h^t3HguU z(31q%0!_b9@0!&v7am}&V~`|4aD9L)MWTUB;MLoIOBzIS&{O(`y%W-;$GT3&pMW<* z8G`#y%w^&q+cPTqs)~xkg%*auP(7e3p%d;vo$~o-pv-9Mm3>dm<*K)VaWCY5_Jyhz zyb-(CwjE)WCW_%e2CL6#>J*{>doMmU7K2|#Lydt}M)ThEJ6rpk>~^L#6z!%W*1ym(DiMA) z)I`oN783ziSwg{u~ZN!}PEo*QxKag*WFS88=9GzAfpxpFuwJ^W5t@X^DFYBu8ruL^F^-=GEzGj|?@4sFt3ajI9~!-f zt!^15O@D+2fzB$`T>t&e*XFSBjx%dEpn5pjz`h#C0EE;xe^VNk$pe-jDXx6O7M1a)!?#%A}YwzKP|EC2Y zR=0sdiG&fy#uofH6r@!}~!{Xtuh%wUZr}Qjy=IT>cQ5Yvt#4RM(?})fC?6ulP ztx+zjvCbl96*=a41F2039QOf7*5~qT*tR>jy5t(UtCU0upA!!A5>$>pDOH}``lm?9 zZI1kMc>9_lQcmS-ui>;sN3)25ch@46N85OopESlCa0Wd>bXrc|f#QEIUO%+*RsN+L z@2OZpS?7x?YLa|d%*JTfk&?)qM!q1G!a`(6%#!$cqe-7xTJE4_x46{|e*f!!l(4=j zNDu*%09D&!iHcPGOb>0QI3th}$9$YHzkI-g%tS+wogI2}BK~E&j!h4s^Q-Os*PGOO zO`tiMzl#`!27-2JPJP-|C6wSyH?#*Btr8Pu$VhCHaK%kUHUR;q?dg{gD-42LrBM$3r0B|MHSN zJ-Di27&3$9c*BY&-!>trk`VUc?G*+(7#*ANv}XmKExtfupm;D$;9H)m%~!4BiqC7+ z=$NnWZhVti<3T;31$g?NJPRujQUfgC(7wYD)x=ZAJ4KiU)B>CDZ4L_w`OPERMuG}S z0vP&~D|z~m-jAEJ64%Gy^Oy-IAw~h40>yZbX|CDMZE$B?fSa1V6UD^$vlkX}dkf#> zIxYfpSd#03F@8)-x_nk^02gs>tB%KrKTtYVDruq-mxUqAJT1K#5xwKu5-8n@mZ83fmP?^zsY^(kHE z(L6gwrV(CdQp2k*>@)y@z+2oLXR=YFYyN`TddP9wd?obv$;mWuTApFnReYu1c4b8c zZfHHF)33$JKp&2!W$}5Ph%Mc4*p9<}3YU^r1o92j`;ePJ;2#=%;pD=CY`wfbC{a)j za`*Y0HBmB*+Z_f|6859=L{DP?;v*%*U+C&7ZHnMX1hcWw zYG2*@G^@fYC7qSwaLNu%a>O}*P6M+iy zKL5YG9~=#iZ#(+V5OO}jfZgtJ3A=Y;H+zv05QVz#Xgf@Z!9PBcuW*2oQQ@-|M5vj^ z!eBMr))ej>g2OKA@= zhRD5@ctujwwQq}9a4T;AF`pK|F4}H_7UvTmiYGxW?)Za0yqxTbSW;$uRSkJ>BqvUk znnJC*n5C6rJBa+EZ^$>!mvaLMwZSKfy-4A^QSRektAF_%T$eUKPi7(V1Uw(9VMHT5 z62y(GAuj`2ZQ%hYk!U=g5+Va|df8Ec1F!>#a|PU(7fQ~jvUWbz7rSHGoi-TC*oV>9 zImu+^f$+Rt!1yx^7kX^&yLwApi~ZM9;TO^UVgoEM15x%^$F5$;p(?zFc1yk-2!o6t zg{Us-Bs#28exm5ft+2CxRM0w9F=F*oZ0?uO=HtfQ3~2`%n6>{NNmU1y>#_)Fz&`xu z`UAI!{rv1bmUikRhev)G8K`FcXMEhRn+~6_g%~SUWdz=IglV55e?D-02wVWbdM$GWET{WVEs`OQ zw1Fu3AKlIc!6;o|wEd=?uUggqDn~*pCHmI8hAW0BySlD;)GBT8Nv%wYsWX+QSx{eZ zuP<(0^mkHrPd+=t_ByT!*t0#{U2jmg4%%0{*xH0h;DRRBLq zk4a)s1PZ#CbEjN7Zm;I^AvoWr&06e1??+LIz>{zsV0{J6Czcl>S)icCnfC0U>+ZBn zCHgAQZaOp(;1y?%{(K+hk+D)bAG`7sYBQg57ZIW86LclpAB8SwK!7S&Tsw{jnk0Jg zWlQk_;%(>EW7U=!tG|aTsytgC@g@UGB3(d0j4Y(%QW?O4&W^~fUwJk_zx8<^iDPzKsBKOH`e|U* zzP+(CGgeq{bG*lFC0S2qW;#wBs7MSP4ieGVMO)Nh&eVenZN11A{!3+1jw)tyP?4*Z zLSD>?o7Yn$W4$mBDFV*#Fu7KDd9dSeyAqHoOme4r!VB;Sm-a8j=MideP7Fy{s`?F6 zi-$54BT=orzR#mj2TNP??Ky6e5Zruh603G(Eb}EVNnRlFK*dR7YUZq(wHqHu_^`Ne z79V?GN0H!tzz;y3g|@i|G~h_!`!;1SWdV$snrte0a8DF4XnNyjta1-{rxD><&KbfY zKDRj#C3qe8{F^m1OT)TWTxWJSw1V6zam~Y`;1``h#uUzkr z)khBcA6^xf0gIISAaeewy1aCyNce+)b{XW2uN_LYP`fH^ehR&8#pBL{B3Shf2Q~51 zUCbaTNV~&8!_CHd?#pJMaRCtP=YSp4a#Y98RwkJQcVoXKSA+fN$;Y$O*w`cX!|jYd z3ns!zY^+}y!&zYnyY#iG(^l=MyTo0j@Wwfj_!IcM?l%a@%A&i5nj{Rjcq1{53{|jX z=tyAEa9OGS-s{b>5fSBrKr^pQ^tRS;EGaY6bprj%mqXQg$#6H>sOmOr_3;Tu`tx+{ z=v{MDXtPgWONhygR_X_j;oMeG$vs%OWxmz{{l#s~&#juUC(qj2Lbta@Zzh^BpXtWG zR#<2&R}Rl%_*Xkwwks)r`l8O&w5Xo^WS9-DQIyLlVe;bXUN}fnfs|cILBiYVpz|I1 zb7EXD=)f;WewkW-N09=%cCj$pS38&bikQs&c@BM@6q1MAUI58)LA%R343R>$C50-tI!709=sK#m+PQ%zbOD_P#N3Uhur8%Iu~Lf&Xs zvH?ro5%~akC%uw$1U1<^sG-G}vR^)Cr}*6yIByYh+Z_lPPu{1dDL)$^)>3$S+Ev0HOFpCgX8^vhBkiey72KibF1sU*Fv0MYz?}`O@4uCR7^mN&ax~9_bultY z$cSDfa;^&Emezmw7v9jOpp>7>&xveAm^&q7ghKGHWcp(cW{_G@64s?!(L3qsauN~@ zVIYXp7pUir1~BF$M1{i5`bw>#omjC#nL{)3~kOZu*?ng7i-l!p}MdIKkGL zEOWtagqDI=7B^-}5fSPd8tT9~oTZ9bHZ@y?h|SH-h)o5$`mN17DXPRKZ0DJRcg_Bl zDb%>N4*tCs7TPza82OQ=pYsSv^S~?%1wW940Kl0qlBE_(6{LO*WGgH&I{)4zrRG$6 zj}66PUsmv*ST8nnseFFEcn`-VZ0+Vq^Flsh1dDx7$5~Zs2Wy~1%h6ZU8?)FiSi)DZ zAmT^|6aFXgW^Qq}h^J3Cn~PTiC!j_j>k5rzV=CGT+@70Y+@!c{KlaOtuXsPpZ+1ES zP75q`#CO?HVa(SYnrBo0TS++jh9DkKV5Gh#_j73k0;aQTUa{ZcqwL#kT(w>Hg2E_P z^k18%7t@&3+WY+08}XatK^J6G%;%nF`y*|ZAj#!z6bTXuMP)8{@)2)SMx3i_ps&7d zc*8q4jemPNl6yBM^QDhK>|agaY3<2!{VNGEw#|E!srVkE&-y1ShUg&&hO zX29`xB7$jcZC}B^{_wfo4M1@jz6(!cu~Y$>?y*KI*f(zHS(|FqJDI6@d}5UI+#pGW zu00m~cD${~f#EzZ4SnaXFv(?G0ZRY-=iNi9deZzWmEc=ms_(&MTKrWXg6>2JvF+X= zZRKICA}OK4PH#>8bi}+Bjyl%D{3v2I2fD<9l!I*k)cfAPjTV^>*lUxnl+!le-MoiB z9pGabR3V(&K1_&`O0}QKXrdVm#HEiS^+3rOQYH!6H0mDv2OD3Vup`mHj%(16L47n| zze!-gjcr2?aws-f!8Z=aj-z&HUQivn9*`)SWzqJD8fl8&b$_93tIsp9JApAYJ^bOc zmHoIuj)KlI|MX#~2BW&g)^)cKNTdHLO&{@{WqXIc#1B0fp(2@r&BVUBk@ zrJspYd1=czEs*84>KPvbPufxn!P{A3VH(m53({(ernLyMP&y9n0X@7eQRqkw!C2iRiSILJ;z@+(+56bhBr&wAm-{4fm4g;96Hu$)qXUmeio=1pDW!io9iNAsEGz$}3rCz7EIr)W|1y8i%q7FO z?DsO@H2+I)C!>U~b?*BLR8vEc&Xnx0g#i z_UK4d_;So(PCMx9lKe%W{N)EcMAFtW+l4Y$FA`x}oMYbZ{6@dHSPl5kU0(7MZYR%v zslE){<9E3o->YZwEK(<+TjOZ|_(}G0R96T1W~JB?ZPV#hO?^>MoYwTkxw?S*vaK&! z+Un73r2uRyi)K`W*B%&M9cWXvv96(8kWg+=>VGdYT_F-q_2&tD|KTFN1wq6FAl?J`yl~60|0-bKy0i z?E6iT#__-hGLL^B#a?(5n;(jXNoMi3Cp{ zM4?KLqn2pHm?94)gR@>DCFiE5SPfI1g){=UWp3nOYMX=CLm#vj-VWUq7V28+9X5EF ztHSlbFh)e|Z=vl8;IHs~IH-dP-!^I4gk|CyyrE)?nobzwb39(pAzq z<-JiTr*^k5!zPyuLbS02#=h@)^^}}s)oQ~j09*;`Ydb@-IX+NyaZTZBCp_o_*RbTCLb4fj6pv7@^9eqb|0!3CgK2 ze(T}!L_)i?lsAQQZyJle3@{V9J9DlavKy%Ly6ZAQo8t`C+2*v(3`9!-AX-j^&`DgL z|0rwb;P7cU~n@hv3xqJy^b{kBM0{ke#VGvyc;TEuemPgcZ-Ik zO2SbTVeJgcF8Oe5^28?Jet%vGqe7KtWafeR1Uq{{f2}Q{58% z#w-Ro(bBXnixx~}Z|rh$S)zMKQ*kRjZq;kG=$VRlGF0j7+=~{uEF7oHh#n)OXsf3K z8|=jxD*huu6td@FX$Oeahc@WhQD%Uo9N0GFsBT13h(OXV4Qsl9_E?;%`w632TFW(l zC*;R#6THWI1X`27<|R^WYEq89(c0}poy_O{Y}Hun-P~k5{7N5j`8tE5<_5Sx>L?{; zJ>RyzxV^OD2A((|<{xL~qLWa(mes}nm{f~apcXT1_=S?t{*2ZI0%~KU=6Xa*bnwG5 zV{`r%8rZAO-x1|{z0q8E_dca_4ko>r3&;Ma^<4e5TogIP!sb=cio!3J_=du$e^|<($|i;D5gpiuW$drINm$X?;Sfs zmh2QiSOJ`LF_&TMwkimrgasxToR2WU?23}&VSck{d1Dp zJX#||+NI4gDN+*66W;yC3d z_)cKKcw(5h_gGQ&ig>d|HmA)@bA4ATR9=3^Vy&;K_A$OTET+LZDm~2{A5TuTAZdch z_GF{&fmjbr99o*sa@kQ&NsDanh@i3sNOwr<={F;i21A zNjUtzM^oZ(2_U}Blo&bSoM8e2<^AC2>#O~I?&RY;IlH41hl>TT^Is6A&W7?zsX9eO zd-F~S&gQq+t{2T~>%BquD%zg^75}GKshm3^`L1Q|8_|o#nf~jBg#CBvDyG>vH5+H)-!Ob%4#;IQfJr~eUFfG4B>w5v+?T;KWV3m~IUf`^3%c}TUYt18Bb=f{eC|M;};M!+L_BFwwU zpJ#5ECm0%2Rce_^?{OLpFL#Ue^8ejHc8ECpuN~!wPDtcDu~3 zINc&bk#&bE3k5yS0%Mvjh(W|b%H?*xDH;C-m z@#(0aWlL`1BzDj@adYkG)#Rfdb1SRUuK*u27`hM)hki|l(oj9?z7OqAU!p3_4xPV*3YrF>b?QfWj_pLB!hn&3GVo7npsIyUww6r)~8_9>fVE?a8 z(58jIXN|5MRlc((UyH%gp};979Z(%2g&u_fU;-;hFCALX5Xaf>2MQ9PhNVFaj?X4b3-Obc`|rVN&1w$8l-}0>OA7Z;RE{_`3>8*5D!HYPHgsL5c!2Im>+qy zltq7$f%72Gc&eDP%i4U%pkDgfEAKzJWzorKwlpH~VX06cY5(tG2v!Zhd0)Tx@m*J5 ziHz&aCss2bD*od~QBqhIVCGf|elN!%$XB$g9itk5lMm$@RH2tDi{*LlCw7}B(6Jc0 z5J_QEP<|-`8Kpc##Zrl0sEYVtFl#j)kC}+*N-1`uE2B9zSx>uQ5-)-*k3cA6^hTAp z(3*hq^G|N?bng4e;d75?>DXMP|4vbbm<&G3HBZr(JPd?t(kiGgh|57!+Z_E-c59k@ zS5+NF3h{^<7#?LK=BfetNjBY59{}&mxa*plh(Kr9g8Cvn?`UYeZoDr;rOXRUXM|`+ zE!{Fee3*Yi*q@xb=@a}krFsX7VLy9C=$O@>ENi~1S=SU4mh`BlTpLaxuQbXxT7 zL}2%iKv)cTdW|MA4aodENR&`M@j;{<8;}qB=#$fuQqg(KarS``YVIj9Z~?_`e)0-n zxE8ExV2XBtHVi|=wN{J$UfBM)oSm}JQJ4ZT?Vv0smdVO4g<{U zeFsW_Rw^f#8jZ1?=jmf@FYHpYCXSK{Ld9d}hUnIbP-C}pLhnJbeEUhwZI?1P>ZF{) z7->b^#k27BtlETX;GWVq1HkaaSKQRina>)Z&(;aS&tsoxZlnpI06fyx24$2O{GUWL zioIfE?zt1ovfe?sOgSGd$>xbrcDIks{zUIeB6(f(-c2B;iwZ|=B^e3v#KeixF8$qU z4!c!Q$ADP>Z#6P>YtH|gvQR0Csj}NcFFEb5e;b)Tii8x9WBgZdNq3A;CnB^q(!l)! zk?rYFd)GY$0K=6MmJ8n9?571xtTi!YQ}Jv=T-t3HCA!kE`B_(+$8IW*3t8-6%5QyQ z)IMyn2Rh{g{?4hXaf|;473aJ`+-y7N3{ukHsjiwy5BOTLC}^Q?75L$$SeROu$@>AGm6EmDe@OjRi>Aq>f)u>QN$ljM0_m?>w*1q?+BG+%_#%h61{tA7W z_))x<7{G-k#34h#@xVU|ZP6VtqCy|;Dlm=Ybp&Q#mWi2HYBE(~-TQ;e$g;E2w~r0; zSOHQs8&FsjtEl1Fd1=l4%r;o&uA?}_HP}vcGP}Q`f&mHj98W9BeUK8 zf7N^WJ+aS97g%|ON75&nkD=`3_`lHcQK>^I*N#+$KjSfzds=4J_@p=VHn|d%{{6GN z!JQH>I$Wl?KK4wP6He?3-0*(nsnF1mJ%#PZGL-?JkABuu3EYFNToZ{?QE^~aMAg_& zr00O diff --git a/public/images/items/pb_silver.png b/public/images/items/pb_silver.png new file mode 100644 index 0000000000000000000000000000000000000000..f60a8348a94de2e587a94a66e2d0b4336b25763d GIT binary patch literal 556 zcmV+{0@MA8P)Px$=1D|BR9J=Wmd{G#Kpe+E{iBGD(%MtqOM6a2)4_jWw)gr4>f6Ol_aguOTIA7OlIcy{p6R)B;d-G zt0BwN=Q{CT@tiIY09vK(U-z{yK0N*bAUPd!9M=he(2b)ZC{#NGbzcYK_E(v;WZZUa zZ$IYdT9*_E0`MU+&2c6NZ$Bo-03uVazH0gwgsQ5xA#7zp4{T1m-q-g*zp?@_?%r%_ zu1A}_ixw9WwzFV&54;Ky4Yi9IqFSjKZB$amH3g=GcpxCq4On!Csb0>foV~!fNOt%2uJLj)H z7V`c9cAihl`lomP@z86!>@@t)3%E1ZZ$Xq}(@q~tZb!%L{a6Pv74CM0a}_L8or}6S zR5KZdt6hxImEv~SXcV_9sEwLssV*q=9$Dv{RdLb(Fzpv}GoeqE?kk_+TiBkx-&UIb&JYavlC?UY0EQ#Z8z3`e9qoXIwH>x=pqd z%35Sq>qmzv^CTe%oUfV}4yqwAZUt~i>7)61sNM}8P;br=s$(ZrlZK(vjAsUWM38U+ zr&)QP->kiGTmg*mJkJS+I`+I}KRnc`C{xKEdPLC}N;Oxf^~q{$aPvAo1Q<7u@*{@)RdMQ0{*wIZpce-YC+`B66=Hm#rS9 z%i`PcuPXOyFj)A1^nUO+-SD3k=fyMMs?i6of6#jWc(z?l<@v@Jr5k>0zjZ1vyuJtA y#ewheyXsUbi|VYIH!R!g?3LP&(Df*KfBywl*SaLA^$+XOa?;Me&zBUz_3=2Cwf6C~&~@LKwZ?SJ zE(wE97~16d?B;4H%K^`)c55OY#&D;a_3RAJ4PYgU)7YFM01p}4=;Tsp4yDdsA_GOq zHj$VF9zG>>tstHXDJ3?7#^!Pg8o5$8Hjza&V;TW-x*eovM&aRY_k_*ADM*R)`H4*PKWf!0(48sQn?===)i~112hN$mX3T1 zNb3q!MRVcoU^0@=a@~8`qj7$9tK=(GH*ofDuGS$J!DH*KY9U?MJ4kNh9R#?q2=(Ox zNzfGNF1y`8%XW2_-5!@i-9byY%H4I)C89N=CYraJyuF3a)e5zv?x3~#Z`4wE(AL~V zXGd>`^r#Le$9#<-=Y5X`@BKC?AC;htZMXHmsR`xnlLY!?+^B&cr~V77S8({jvAJ@F d&VQ%0%pa{9Auo9qX&wLo002ovPDHLkV1n*=KDGb= literal 0 HcmV?d00001 diff --git a/public/locales b/public/locales index 3ccef8472dd..87615556d8a 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit 3ccef8472dd7cc7c362538489954cb8fdad27e5f +Subproject commit 87615556d8a2bd7eef7abac818f84423a8a13b03 diff --git a/src/data/balance/pokemon-evolutions.ts b/src/data/balance/pokemon-evolutions.ts index c838f6b2c49..7d0d86fadbf 100644 --- a/src/data/balance/pokemon-evolutions.ts +++ b/src/data/balance/pokemon-evolutions.ts @@ -10,7 +10,7 @@ import { Biome } from "#enums/biome"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { TimeOfDay } from "#enums/time-of-day"; -import { DamageMoneyRewardModifier, ExtraModifierModifier, MoneyMultiplierModifier } from "#app/modifier/modifier"; +import { DamageMoneyRewardModifier, ExtraModifierModifier, MoneyMultiplierModifier, TempExtraModifierModifier } from "#app/modifier/modifier"; import { SpeciesFormKey } from "#enums/species-form-key"; @@ -1652,11 +1652,11 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesFormEvolution(Species.GHOLDENGO, "chest", "", 1, null, new SpeciesEvolutionCondition(p => p.evoCounter + p.getHeldItems().filter(m => m instanceof DamageMoneyRewardModifier).length + p.scene.findModifiers(m => m instanceof MoneyMultiplierModifier - || m instanceof ExtraModifierModifier).length > 9), SpeciesWildEvolutionDelay.VERY_LONG), + || m instanceof ExtraModifierModifier || m instanceof TempExtraModifierModifier).length > 9), SpeciesWildEvolutionDelay.VERY_LONG), new SpeciesFormEvolution(Species.GHOLDENGO, "roaming", "", 1, null, new SpeciesEvolutionCondition(p => p.evoCounter + p.getHeldItems().filter(m => m instanceof DamageMoneyRewardModifier).length + p.scene.findModifiers(m => m instanceof MoneyMultiplierModifier - || m instanceof ExtraModifierModifier).length > 9), SpeciesWildEvolutionDelay.VERY_LONG) + || m instanceof ExtraModifierModifier || m instanceof TempExtraModifierModifier).length > 9), SpeciesWildEvolutionDelay.VERY_LONG) ] }; diff --git a/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts b/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts index 8dc4eca25bf..1e20b73e351 100644 --- a/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts +++ b/src/data/mystery-encounters/encounters/an-offer-you-cant-refuse-encounter.ts @@ -1,4 +1,4 @@ -import { leaveEncounterWithoutBattle, setEncounterExp, updatePlayerMoney, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import { generateModifierType, leaveEncounterWithoutBattle, setEncounterExp, updatePlayerMoney, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { modifierTypes } from "#app/modifier/modifier-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { Species } from "#enums/species"; @@ -14,6 +14,7 @@ import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { ModifierRewardPhase } from "#app/phases/modifier-reward-phase"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import i18next from "i18next"; /** the i18n namespace for this encounter */ const namespace = "mysteryEncounters/anOfferYouCantRefuse"; @@ -98,6 +99,8 @@ export const AnOfferYouCantRefuseEncounter: MysteryEncounter = } } + const shinyCharm = generateModifierType(scene, modifierTypes.SHINY_CHARM); + encounter.setDialogueToken("itemName", shinyCharm?.name ?? i18next.t("modifierType:ModifierType.SHINY_CHARM.name")); encounter.setDialogueToken("liepardName", getPokemonSpecies(Species.LIEPARD).getName()); return true; @@ -123,7 +126,7 @@ export const AnOfferYouCantRefuseEncounter: MysteryEncounter = return true; }) .withOptionPhase(async (scene: BattleScene) => { - // Give the player a Shiny charm + // Give the player a Shiny Charm scene.unshiftPhase(new ModifierRewardPhase(scene, modifierTypes.SHINY_CHARM)); leaveEncounterWithoutBattle(scene, true); }) @@ -132,9 +135,11 @@ export const AnOfferYouCantRefuseEncounter: MysteryEncounter = .withOption( MysteryEncounterOptionBuilder .newOptionWithMode(MysteryEncounterOptionMode.DISABLED_OR_SPECIAL) - .withPrimaryPokemonRequirement(new CombinationPokemonRequirement( - new MoveRequirement(EXTORTION_MOVES, true), - new AbilityRequirement(EXTORTION_ABILITIES, true)) + .withPrimaryPokemonRequirement( + CombinationPokemonRequirement.Some( + new MoveRequirement(EXTORTION_MOVES, true), + new AbilityRequirement(EXTORTION_ABILITIES, true) + ) ) .withDialogue({ buttonLabel: `${namespace}:option.2.label`, diff --git a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts index d316ab14cde..e24eadb56c7 100644 --- a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts +++ b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts @@ -193,12 +193,14 @@ const WAVE_LEVEL_BREAKPOINTS = [ 30, 50, 70, 100, 120, 140, 160 ]; export const BugTypeSuperfanEncounter: MysteryEncounter = MysteryEncounterBuilder.withEncounterType(MysteryEncounterType.BUG_TYPE_SUPERFAN) .withEncounterTier(MysteryEncounterTier.GREAT) - .withPrimaryPokemonRequirement(new CombinationPokemonRequirement( - // Must have at least 1 Bug type on team, OR have a bug item somewhere on the team - new HeldItemRequirement([ "BypassSpeedChanceModifier", "ContactHeldItemTransferChanceModifier" ], 1), - new AttackTypeBoosterHeldItemTypeRequirement(Type.BUG, 1), - new TypeRequirement(Type.BUG, false, 1) - )) + .withPrimaryPokemonRequirement( + CombinationPokemonRequirement.Some( + // Must have at least 1 Bug type on team, OR have a bug item somewhere on the team + new HeldItemRequirement([ "BypassSpeedChanceModifier", "ContactHeldItemTransferChanceModifier" ], 1), + new AttackTypeBoosterHeldItemTypeRequirement(Type.BUG, 1), + new TypeRequirement(Type.BUG, false, 1) + ) + ) .withMaxAllowedEncounters(1) .withSceneWaveRangeRequirement(...CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES) .withIntroSpriteConfigs([]) // These are set in onInit() @@ -405,11 +407,13 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = .build()) .withOption(MysteryEncounterOptionBuilder .newOptionWithMode(MysteryEncounterOptionMode.DISABLED_OR_DEFAULT) - .withPrimaryPokemonRequirement(new CombinationPokemonRequirement( - // Meets one or both of the below reqs - new HeldItemRequirement([ "BypassSpeedChanceModifier", "ContactHeldItemTransferChanceModifier" ], 1), - new AttackTypeBoosterHeldItemTypeRequirement(Type.BUG, 1) - )) + .withPrimaryPokemonRequirement( + CombinationPokemonRequirement.Some( + // Meets one or both of the below reqs + new HeldItemRequirement([ "BypassSpeedChanceModifier", "ContactHeldItemTransferChanceModifier" ], 1), + new AttackTypeBoosterHeldItemTypeRequirement(Type.BUG, 1) + ) + ) .withDialogue({ buttonLabel: `${namespace}:option.3.label`, buttonTooltip: `${namespace}:option.3.tooltip`, diff --git a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts index 57c8aa7a561..c4b03660bde 100644 --- a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts +++ b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts @@ -11,7 +11,7 @@ import { Species } from "#enums/species"; import { TrainerType } from "#enums/trainer-type"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { Abilities } from "#enums/abilities"; -import { applyModifierTypeToPlayerPokemon } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; +import { applyAbilityOverrideToPokemon, applyModifierTypeToPlayerPokemon } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import { Type } from "#app/data/type"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; @@ -425,17 +425,8 @@ function onYesAbilitySwap(scene: BattleScene, resolve) { const onPokemonSelected = (pokemon: PlayerPokemon) => { // Do ability swap const encounter = scene.currentBattle.mysteryEncounter!; - if (pokemon.isFusion()) { - if (!pokemon.fusionCustomPokemonData) { - pokemon.fusionCustomPokemonData = new CustomPokemonData(); - } - pokemon.fusionCustomPokemonData.ability = encounter.misc.ability; - } else { - if (!pokemon.customPokemonData) { - pokemon.customPokemonData = new CustomPokemonData(); - } - pokemon.customPokemonData.ability = encounter.misc.ability; - } + + applyAbilityOverrideToPokemon(pokemon, encounter.misc.ability); encounter.setDialogueToken("chosenPokemon", pokemon.getNameToRender()); scene.ui.setMode(Mode.MESSAGE).then(() => resolve(true)); }; diff --git a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts index 2c13086ccb8..8a814b58248 100644 --- a/src/data/mystery-encounters/encounters/dark-deal-encounter.ts +++ b/src/data/mystery-encounters/encounters/dark-deal-encounter.ts @@ -14,6 +14,7 @@ import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode import { ModifierRewardPhase } from "#app/phases/modifier-reward-phase"; import { PokemonFormChangeItemModifier, PokemonHeldItemModifier } from "#app/modifier/modifier"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { Challenges } from "#enums/challenges"; /** i18n namespace for encounter */ const namespace = "mysteryEncounters/darkDeal"; @@ -141,6 +142,7 @@ export const DarkDealEncounter: MysteryEncounter = // Removes random pokemon (including fainted) from party and adds name to dialogue data tokens // Will never return last battle able mon and instead pick fainted/unable to battle const removedPokemon = getRandomPlayerPokemon(scene, true, false, true); + // Get all the pokemon's held items const modifiers = removedPokemon.getHeldItems().filter(m => !(m instanceof PokemonFormChangeItemModifier)); scene.removePokemonFromPlayerParty(removedPokemon); @@ -160,7 +162,13 @@ export const DarkDealEncounter: MysteryEncounter = scene.unshiftPhase(new ModifierRewardPhase(scene, modifierTypes.ROGUE_BALL)); // Start encounter with random legendary (7-10 starter strength) that has level additive - const bossTypes: Type[] = encounter.misc.removedTypes; + // If this is a mono-type challenge, always ensure the required type is filtered for + let bossTypes: Type[] = encounter.misc.removedTypes; + const singleTypeChallenges = scene.gameMode.challenges.filter(c => c.value && c.id === Challenges.SINGLE_TYPE); + if (scene.gameMode.isChallenge && singleTypeChallenges.length > 0) { + bossTypes = singleTypeChallenges.map(c => (c.value - 1) as Type); + } + const bossModifiers: PokemonHeldItemModifier[] = encounter.misc.modifiers; // Starter egg tier, 35/50/10/5 %odds for tiers 6/7/8/9+ const roll = randSeedInt(100); diff --git a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts index 5686d0f6ce5..d5f9388b56c 100644 --- a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts +++ b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts @@ -45,10 +45,13 @@ export const DelibirdyEncounter: MysteryEncounter = .withEncounterTier(MysteryEncounterTier.GREAT) .withSceneWaveRangeRequirement(...CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES) .withSceneRequirement(new MoneyRequirement(0, DELIBIRDY_MONEY_PRICE_MULTIPLIER)) // Must have enough money for it to spawn at the very least - .withPrimaryPokemonRequirement(new CombinationPokemonRequirement( // Must also have either option 2 or 3 available to spawn - new HeldItemRequirement(OPTION_2_ALLOWED_MODIFIERS), - new HeldItemRequirement(OPTION_3_DISALLOWED_MODIFIERS, 1, true) - )) + .withPrimaryPokemonRequirement( + CombinationPokemonRequirement.Some( + // Must also have either option 2 or 3 available to spawn + new HeldItemRequirement(OPTION_2_ALLOWED_MODIFIERS), + new HeldItemRequirement(OPTION_3_DISALLOWED_MODIFIERS, 1, true) + ) + ) .withIntroSpriteConfigs([ { spriteKey: "", @@ -196,7 +199,7 @@ export const DelibirdyEncounter: MysteryEncounter = const encounter = scene.currentBattle.mysteryEncounter!; const modifier: BerryModifier | HealingBoosterModifier = encounter.misc.chosenModifier; - // Give the player a Candy Jar if they gave a Berry, and a Healing Charm for Reviver Seed + // Give the player a Candy Jar if they gave a Berry, and a Berry Pouch for Reviver Seed if (modifier instanceof BerryModifier) { // Check if the player has max stacks of that Candy Jar already const existing = scene.findModifier(m => m instanceof LevelIncrementBoosterModifier) as LevelIncrementBoosterModifier; @@ -211,8 +214,8 @@ export const DelibirdyEncounter: MysteryEncounter = scene.unshiftPhase(new ModifierRewardPhase(scene, modifierTypes.CANDY_JAR)); } } else { - // Check if the player has max stacks of that Healing Charm already - const existing = scene.findModifier(m => m instanceof HealingBoosterModifier) as HealingBoosterModifier; + // Check if the player has max stacks of that Berry Pouch already + const existing = scene.findModifier(m => m instanceof PreserveBerryModifier) as PreserveBerryModifier; if (existing && existing.getStackCount() >= existing.getMaxStackCount(scene)) { // At max stacks, give the first party pokemon a Shell Bell instead @@ -221,7 +224,7 @@ export const DelibirdyEncounter: MysteryEncounter = scene.playSound("item_fanfare"); await showEncounterText(scene, i18next.t("battle:rewardGain", { modifierName: shellBell.name }), null, undefined, true); } else { - scene.unshiftPhase(new ModifierRewardPhase(scene, modifierTypes.HEALING_CHARM)); + scene.unshiftPhase(new ModifierRewardPhase(scene, modifierTypes.BERRY_POUCH)); } } @@ -290,8 +293,8 @@ export const DelibirdyEncounter: MysteryEncounter = const encounter = scene.currentBattle.mysteryEncounter!; const modifier = encounter.misc.chosenModifier; - // Check if the player has max stacks of Berry Pouch already - const existing = scene.findModifier(m => m instanceof PreserveBerryModifier) as PreserveBerryModifier; + // Check if the player has max stacks of Healing Charm already + const existing = scene.findModifier(m => m instanceof HealingBoosterModifier) as HealingBoosterModifier; if (existing && existing.getStackCount() >= existing.getMaxStackCount(scene)) { // At max stacks, give the first party pokemon a Shell Bell instead @@ -300,7 +303,7 @@ export const DelibirdyEncounter: MysteryEncounter = scene.playSound("item_fanfare"); await showEncounterText(scene, i18next.t("battle:rewardGain", { modifierName: shellBell.name }), null, undefined, true); } else { - scene.unshiftPhase(new ModifierRewardPhase(scene, modifierTypes.BERRY_POUCH)); + scene.unshiftPhase(new ModifierRewardPhase(scene, modifierTypes.HEALING_CHARM)); } // Remove the modifier if its stacks go to 0 diff --git a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts index d306206159a..5c16e5d8564 100644 --- a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts +++ b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts @@ -4,24 +4,30 @@ import { AttackTypeBoosterModifierType, modifierTypes, } from "#app/modifier/mod import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import BattleScene from "#app/battle-scene"; import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; -import { TypeRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; +import { AbilityRequirement, CombinationPokemonRequirement, TypeRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements"; import { Species } from "#enums/species"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { Gender } from "#app/data/gender"; import { Type } from "#app/data/type"; import { BattlerIndex } from "#app/battle"; -import { PokemonMove } from "#app/field/pokemon"; +import Pokemon, { PokemonMove } from "#app/field/pokemon"; import { Moves } from "#enums/moves"; import { EncounterBattleAnim } from "#app/data/battle-anims"; import { WeatherType } from "#app/data/weather"; import { isNullOrUndefined, randSeedInt } from "#app/utils"; import { StatusEffect } from "#app/data/status-effect"; import { queueEncounterMessage } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; -import { applyDamageToPokemon, applyModifierTypeToPlayerPokemon } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; +import { applyAbilityOverrideToPokemon, applyDamageToPokemon, applyModifierTypeToPlayerPokemon } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; import { EncounterAnim } from "#enums/encounter-anims"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { Abilities } from "#enums/abilities"; +import { BattlerTagType } from "#enums/battler-tag-type"; +import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; +import { Stat } from "#enums/stat"; +import { Ability } from "#app/data/ability"; +import { FIRE_RESISTANT_ABILITIES } from "#app/data/mystery-encounters/requirements/requirement-groups"; /** the i18n namespace for the encounter */ const namespace = "mysteryEncounters/fieryFallout"; @@ -62,16 +68,24 @@ export const FieryFalloutEncounter: MysteryEncounter = { species: volcaronaSpecies, isBoss: false, - gender: Gender.MALE + gender: Gender.MALE, + tags: [ BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON ], + mysteryEncounterBattleEffects: (pokemon: Pokemon) => { + pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ Stat.SPDEF, Stat.SPD ], 1)); + } }, { species: volcaronaSpecies, isBoss: false, - gender: Gender.FEMALE + gender: Gender.FEMALE, + tags: [ BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON ], + mysteryEncounterBattleEffects: (pokemon: Pokemon) => { + pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ Stat.SPDEF, Stat.SPD ], 1)); + } } ], doubleBattle: true, - disableSwitch: true + disableSwitch: true, }; encounter.enemyPartyConfigs = [ config ]; @@ -139,7 +153,7 @@ export const FieryFalloutEncounter: MysteryEncounter = async (scene: BattleScene) => { // Pick battle const encounter = scene.currentBattle.mysteryEncounter!; - setEncounterRewards(scene, { fillRemaining: true }, undefined, () => giveLeadPokemonCharcoal(scene)); + setEncounterRewards(scene, { fillRemaining: true }, undefined, () => giveLeadPokemonAttackTypeBoostItem(scene)); encounter.startOfBattleEffects.push( { @@ -153,18 +167,6 @@ export const FieryFalloutEncounter: MysteryEncounter = targets: [ BattlerIndex.PLAYER_2 ], move: new PokemonMove(Moves.FIRE_SPIN), ignorePp: true - }, - { - sourceBattlerIndex: BattlerIndex.ENEMY, - targets: [ BattlerIndex.ENEMY ], - move: new PokemonMove(Moves.QUIVER_DANCE), - ignorePp: true - }, - { - sourceBattlerIndex: BattlerIndex.ENEMY_2, - targets: [ BattlerIndex.ENEMY_2 ], - move: new PokemonMove(Moves.QUIVER_DANCE), - ignorePp: true }); await initBattleWithEnemyConfig(scene, scene.currentBattle.mysteryEncounter!.enemyPartyConfigs[0]); } @@ -180,7 +182,7 @@ export const FieryFalloutEncounter: MysteryEncounter = ], }, async (scene: BattleScene) => { - // Damage non-fire types and burn 1 random non-fire type member + // Damage non-fire types and burn 1 random non-fire type member + give it Heatproof const encounter = scene.currentBattle.mysteryEncounter!; const nonFireTypes = scene.getParty().filter((p) => p.isAllowedInBattle() && !p.getTypes().includes(Type.FIRE)); @@ -198,7 +200,11 @@ export const FieryFalloutEncounter: MysteryEncounter = if (chosenPokemon.trySetStatus(StatusEffect.BURN)) { // Burn applied encounter.setDialogueToken("burnedPokemon", chosenPokemon.getNameToRender()); + encounter.setDialogueToken("abilityName", new Ability(Abilities.HEATPROOF, 3).name); queueEncounterMessage(scene, `${namespace}:option.2.target_burned`); + + // Also permanently change the burned Pokemon's ability to Heatproof + applyAbilityOverrideToPokemon(chosenPokemon, Abilities.HEATPROOF); } } @@ -209,8 +215,12 @@ export const FieryFalloutEncounter: MysteryEncounter = .withOption( MysteryEncounterOptionBuilder .newOptionWithMode(MysteryEncounterOptionMode.DISABLED_OR_SPECIAL) - .withPrimaryPokemonRequirement(new TypeRequirement(Type.FIRE, true, 1)) // Will set option3PrimaryName dialogue token automatically - .withSecondaryPokemonRequirement(new TypeRequirement(Type.FIRE, true, 1)) // Will set option3SecondaryName dialogue token automatically + .withPrimaryPokemonRequirement( + CombinationPokemonRequirement.Some( + new TypeRequirement(Type.FIRE, true, 1), + new AbilityRequirement(FIRE_RESISTANT_ABILITIES, true) + ) + ) // Will set option3PrimaryName dialogue token automatically .withDialogue({ buttonLabel: `${namespace}:option.3.label`, buttonTooltip: `${namespace}:option.3.tooltip`, @@ -233,26 +243,32 @@ export const FieryFalloutEncounter: MysteryEncounter = { fillRemaining: true }, undefined, () => { - giveLeadPokemonCharcoal(scene); + giveLeadPokemonAttackTypeBoostItem(scene); }); const primary = encounter.options[2].primaryPokemon!; - const secondary = encounter.options[2].secondaryPokemon![0]; - setEncounterExp(scene, [ primary.id, secondary.id ], getPokemonSpecies(Species.VOLCARONA).baseExp * 2); + setEncounterExp(scene, [ primary.id ], getPokemonSpecies(Species.VOLCARONA).baseExp * 2); leaveEncounterWithoutBattle(scene); }) .build() ) .build(); -function giveLeadPokemonCharcoal(scene: BattleScene) { - // Give first party pokemon Charcoal for free at end of battle +function giveLeadPokemonAttackTypeBoostItem(scene: BattleScene) { + // Give first party pokemon attack type boost item for free at end of battle const leadPokemon = scene.getParty()?.[0]; if (leadPokemon) { - const charcoal = generateModifierType(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [ Type.FIRE ]) as AttackTypeBoosterModifierType; - applyModifierTypeToPlayerPokemon(scene, leadPokemon, charcoal); - scene.currentBattle.mysteryEncounter!.setDialogueToken("leadPokemon", leadPokemon.getNameToRender()); - queueEncounterMessage(scene, `${namespace}:found_charcoal`); + // Generate type booster held item, default to Charcoal if item fails to generate + let boosterModifierType = generateModifierType(scene, modifierTypes.ATTACK_TYPE_BOOSTER) as AttackTypeBoosterModifierType; + if (!boosterModifierType) { + boosterModifierType = generateModifierType(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [ Type.FIRE ]) as AttackTypeBoosterModifierType; + } + applyModifierTypeToPlayerPokemon(scene, leadPokemon, boosterModifierType); + + const encounter = scene.currentBattle.mysteryEncounter!; + encounter.setDialogueToken("itemName", boosterModifierType.name); + encounter.setDialogueToken("leadPokemon", leadPokemon.getNameToRender()); + queueEncounterMessage(scene, `${namespace}:found_item`); } } diff --git a/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts b/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts index f282064bb94..7fdd29d36a2 100644 --- a/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts +++ b/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts @@ -56,7 +56,13 @@ export const MysteriousChallengersEncounter: MysteryEncounter = // Hard difficulty trainer is another random trainer, but with AVERAGE_BALANCED config // Number of mons is based off wave: 1-20 is 2, 20-40 is 3, etc. capping at 6 after wave 100 - const hardTrainerType = scene.arena.randomTrainerType(scene.currentBattle.waveIndex); + let retries = 0; + let hardTrainerType = scene.arena.randomTrainerType(scene.currentBattle.waveIndex); + while (retries < 5 && hardTrainerType === normalTrainerType) { + // Will try to use a different trainer from the normal trainer type + hardTrainerType = scene.arena.randomTrainerType(scene.currentBattle.waveIndex); + retries++; + } const hardTemplate = new TrainerPartyCompoundTemplate( new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER, false, true), new TrainerPartyTemplate( diff --git a/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts b/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts index d30c97b27de..8dd730492b1 100644 --- a/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts +++ b/src/data/mystery-encounters/encounters/shady-vitamin-dealer-encounter.ts @@ -21,7 +21,7 @@ import i18next from "i18next"; const namespace = "mysteryEncounters/shadyVitaminDealer"; const VITAMIN_DEALER_CHEAP_PRICE_MULTIPLIER = 1.5; -const VITAMIN_DEALER_EXPENSIVE_PRICE_MULTIPLIER = 3.5; +const VITAMIN_DEALER_EXPENSIVE_PRICE_MULTIPLIER = 5; /** * Shady Vitamin Dealer encounter. diff --git a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts index 9c10d33d019..610209f8aad 100644 --- a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts @@ -222,7 +222,10 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = encounter.misc.chosenPokemon = pokemon1; encounter.setDialogueToken("chosenPokemon", pokemon1.getNameToRender()); const eggOptions = getEggOptions(scene, pokemon1CommonEggs, pokemon1RareEggs); - setEncounterRewards(scene, { fillRemaining: true }, eggOptions, () => doPostEncounterCleanup(scene)); + setEncounterRewards(scene, + { guaranteedModifierTypeFuncs: [ modifierTypes.SOOTHE_BELL ], fillRemaining: true }, + eggOptions, + () => doPostEncounterCleanup(scene)); // Remove all Pokemon from the party except the chosen Pokemon removePokemonFromPartyAndStoreHeldItems(scene, encounter, pokemon1); @@ -271,7 +274,10 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = encounter.misc.chosenPokemon = pokemon2; encounter.setDialogueToken("chosenPokemon", pokemon2.getNameToRender()); const eggOptions = getEggOptions(scene, pokemon2CommonEggs, pokemon2RareEggs); - setEncounterRewards(scene, { fillRemaining: true }, eggOptions, () => doPostEncounterCleanup(scene)); + setEncounterRewards(scene, + { guaranteedModifierTypeFuncs: [ modifierTypes.SOOTHE_BELL ], fillRemaining: true }, + eggOptions, + () => doPostEncounterCleanup(scene)); // Remove all Pokemon from the party except the chosen Pokemon removePokemonFromPartyAndStoreHeldItems(scene, encounter, pokemon2); @@ -320,7 +326,10 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = encounter.misc.chosenPokemon = pokemon3; encounter.setDialogueToken("chosenPokemon", pokemon3.getNameToRender()); const eggOptions = getEggOptions(scene, pokemon3CommonEggs, pokemon3RareEggs); - setEncounterRewards(scene, { fillRemaining: true }, eggOptions, () => doPostEncounterCleanup(scene)); + setEncounterRewards(scene, + { guaranteedModifierTypeFuncs: [ modifierTypes.SOOTHE_BELL ], fillRemaining: true }, + eggOptions, + () => doPostEncounterCleanup(scene)); // Remove all Pokemon from the party except the chosen Pokemon removePokemonFromPartyAndStoreHeldItems(scene, encounter, pokemon3); @@ -454,12 +463,16 @@ function calculateEggRewardsForPokemon(pokemon: PlayerPokemon): [number, number] } // Maximum of 30 points - const totalPoints = Math.min(pointsFromStarterTier + pointsFromBst, 30); + let totalPoints = Math.min(pointsFromStarterTier + pointsFromBst, 30); - // 1 Rare egg for every 6 points - const numRares = Math.floor(totalPoints / 6); + // First 5 points go to Common eggs + let numCommons = Math.min(totalPoints, 5); + totalPoints -= numCommons; + + // Then, 1 Rare egg for every 4 points + const numRares = Math.floor(totalPoints / 4); // 1 Common egg for every point leftover - const numCommons = totalPoints % 6; + numCommons += totalPoints % 4; return [ numCommons, numRares ]; } diff --git a/src/data/mystery-encounters/encounters/training-session-encounter.ts b/src/data/mystery-encounters/encounters/training-session-encounter.ts index 9f80bbbffde..03341a713f2 100644 --- a/src/data/mystery-encounters/encounters/training-session-encounter.ts +++ b/src/data/mystery-encounters/encounters/training-session-encounter.ts @@ -37,6 +37,7 @@ export const TrainingSessionEncounter: MysteryEncounter = .withScenePartySizeRequirement(2, 6, true) // Must have at least 2 unfainted pokemon in party .withFleeAllowed(false) .withHideWildIntroMessage(true) + .withPreventGameStatsUpdates(true) // Do not count the Pokemon as seen or defeated since it is ours .withIntroSpriteConfigs([ { spriteKey: "training_session_gear", diff --git a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts index 2b3b38b2164..d3c16ce2122 100644 --- a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts +++ b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts @@ -71,7 +71,7 @@ export const TrashToTreasureEncounter: MysteryEncounter = moveSet: [ Moves.PAYBACK, Moves.GUNK_SHOT, Moves.STOMPING_TANTRUM, Moves.DRAIN_PUNCH ] }; const config: EnemyPartyConfig = { - levelAdditiveModifier: 1, + levelAdditiveModifier: 0.5, pokemonConfigs: [ pokemonConfig ], disableSwitch: true }; diff --git a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts index b97a22dbe51..2ecba6ce658 100644 --- a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts +++ b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts @@ -4,23 +4,30 @@ import { Species } from "#enums/species"; import BattleScene from "#app/battle-scene"; import MysteryEncounter, { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; -import { leaveEncounterWithoutBattle, setEncounterRewards, } from "../utils/encounter-phase-utils"; +import { EnemyPartyConfig, EnemyPokemonConfig, generateModifierType, initBattleWithEnemyConfig, leaveEncounterWithoutBattle, setEncounterRewards, } from "../utils/encounter-phase-utils"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; -import { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; +import Pokemon, { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; import { IntegerHolder, isNullOrUndefined, randSeedInt, randSeedShuffle } from "#app/utils"; import PokemonSpecies, { allSpecies, getPokemonSpecies } from "#app/data/pokemon-species"; import { HiddenAbilityRateBoosterModifier, PokemonFormChangeItemModifier, PokemonHeldItemModifier } from "#app/modifier/modifier"; import { achvs } from "#app/system/achv"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; import { showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; -import { modifierTypes } from "#app/modifier/modifier-type"; +import { modifierTypes, PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; import i18next from "#app/plugins/i18n"; import { doPokemonTransformationSequence, TransformationScreenPosition } from "#app/data/mystery-encounters/utils/encounter-transformation-sequence"; import { getLevelTotalExp } from "#app/data/exp"; import { Stat } from "#enums/stat"; -import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; import { Challenges } from "#enums/challenges"; +import { ModifierTier } from "#app/modifier/modifier-tier"; +import { PlayerGender } from "#enums/player-gender"; +import { TrainerType } from "#enums/trainer-type"; +import PokemonData from "#app/system/pokemon-data"; +import { Nature } from "#enums/nature"; +import HeldModifierConfig from "#app/interfaces/held-modifier-config"; +import { trainerConfigs, TrainerPartyTemplate } from "#app/data/trainer-config"; +import { PartyMemberStrength } from "#enums/party-member-strength"; /** i18n namespace for encounter */ const namespace = "mysteryEncounters/weirdDream"; @@ -80,10 +87,11 @@ const EXCLUDED_TRANSFORMATION_SPECIES = [ const SUPER_LEGENDARY_BST_THRESHOLD = 600; const NON_LEGENDARY_BST_THRESHOLD = 570; -const GAIN_OLD_GATEAU_ITEM_BST_THRESHOLD = 450; + +const OLD_GATEAU_STATS_UP = 20; /** 0-100 */ -const PERCENT_LEVEL_LOSS_ON_REFUSE = 12.5; +const PERCENT_LEVEL_LOSS_ON_REFUSE = 10; /** * Value ranges of the resulting species BST transformations after adding values to original species @@ -105,7 +113,8 @@ export const WeirdDreamEncounter: MysteryEncounter = MysteryEncounterBuilder.withEncounterType(MysteryEncounterType.WEIRD_DREAM) .withEncounterTier(MysteryEncounterTier.ROGUE) .withDisallowedChallenges(Challenges.SINGLE_TYPE, Challenges.SINGLE_GENERATION) - .withSceneWaveRangeRequirement(...CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES) + // TODO: should reset minimum wave to 10 when there are more Rogue tiers in pool. Matching Dark Deal minimum for now. + .withSceneWaveRangeRequirement(30, 140) .withIntroSpriteConfigs([ { spriteKey: "weird_dream_woman", @@ -131,6 +140,15 @@ export const WeirdDreamEncounter: MysteryEncounter = .withQuery(`${namespace}:query`) .withOnInit((scene: BattleScene) => { scene.loadBgm("mystery_encounter_weird_dream", "mystery_encounter_weird_dream.mp3"); + + // Calculate all the newly transformed Pokemon and begin asset load + const teamTransformations = getTeamTransformations(scene); + const loadAssets = teamTransformations.map(t => (t.newPokemon as PlayerPokemon).loadAssets()); + scene.currentBattle.mysteryEncounter!.misc = { + teamTransformations, + loadAssets + }; + return true; }) .withOnVisualsStart((scene: BattleScene) => { @@ -156,13 +174,10 @@ export const WeirdDreamEncounter: MysteryEncounter = doShowDreamBackground(scene); }); - // Calculate all the newly transformed Pokemon and begin asset load - const teamTransformations = getTeamTransformations(scene); - const loadAssets = teamTransformations.map(t => (t.newPokemon as PlayerPokemon).loadAssets()); - scene.currentBattle.mysteryEncounter!.misc = { - teamTransformations, - loadAssets - }; + for (const transformation of scene.currentBattle.mysteryEncounter!.misc.teamTransformations) { + scene.removePokemonFromPlayerParty(transformation.previousPokemon, false); + scene.getParty().push(transformation.newPokemon); + } }) .withOptionPhase(async (scene: BattleScene) => { // Starts cutscene dialogue, but does not await so that cutscene plays as player goes through dialogue @@ -193,7 +208,7 @@ export const WeirdDreamEncounter: MysteryEncounter = await showEncounterText(scene, `${namespace}:option.1.dream_complete`); await doNewTeamPostProcess(scene, transformations); - setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.MEMORY_MUSHROOM, modifierTypes.ROGUE_BALL, modifierTypes.MINT, modifierTypes.MINT ]}); + setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [ modifierTypes.MEMORY_MUSHROOM, modifierTypes.ROGUE_BALL, modifierTypes.MINT, modifierTypes.MINT, modifierTypes.MINT ], fillRemaining: false }); leaveEncounterWithoutBattle(scene, true); }) .build() @@ -209,7 +224,88 @@ export const WeirdDreamEncounter: MysteryEncounter = ], }, async (scene: BattleScene) => { - // Reduce party levels by 20% + // Battle your "future" team for some item rewards + const transformations: PokemonTransformation[] = scene.currentBattle.mysteryEncounter!.misc.teamTransformations; + + // Uses the pokemon that player's party would have transformed into + const enemyPokemonConfigs: EnemyPokemonConfig[] = []; + for (const transformation of transformations) { + const newPokemon = transformation.newPokemon; + const previousPokemon = transformation.previousPokemon; + + await postProcessTransformedPokemon(scene, previousPokemon, newPokemon, newPokemon.species.getRootSpeciesId(), true); + + const dataSource = new PokemonData(newPokemon); + dataSource.player = false; + + // Copy held items to new pokemon + const newPokemonHeldItemConfigs: HeldModifierConfig[] = []; + for (const item of transformation.heldItems) { + newPokemonHeldItemConfigs.push({ + modifier: item.clone() as PokemonHeldItemModifier, + stackCount: item.getStackCount(), + isTransferable: false + }); + } + // Any pokemon that is below 570 BST gets +20 permanent BST to 3 stats + if (shouldGetOldGateau(newPokemon)) { + const stats = getOldGateauBoostedStats(newPokemon); + newPokemonHeldItemConfigs.push({ + modifier: generateModifierType(scene, modifierTypes.MYSTERY_ENCOUNTER_OLD_GATEAU, [ OLD_GATEAU_STATS_UP, stats ]) as PokemonHeldItemModifierType, + stackCount: 1, + isTransferable: false + }); + } + + const enemyConfig: EnemyPokemonConfig = { + species: transformation.newSpecies, + isBoss: newPokemon.getSpeciesForm().getBaseStatTotal() > NON_LEGENDARY_BST_THRESHOLD, + level: previousPokemon.level, + dataSource: dataSource, + modifierConfigs: newPokemonHeldItemConfigs + }; + + enemyPokemonConfigs.push(enemyConfig); + } + + const genderIndex = scene.gameData.gender ?? PlayerGender.UNSET; + const trainerConfig = trainerConfigs[genderIndex === PlayerGender.FEMALE ? TrainerType.FUTURE_SELF_F : TrainerType.FUTURE_SELF_M].clone(); + trainerConfig.setPartyTemplates(new TrainerPartyTemplate(transformations.length, PartyMemberStrength.STRONG)); + const enemyPartyConfig: EnemyPartyConfig = { + trainerConfig: trainerConfig, + pokemonConfigs: enemyPokemonConfigs, + female: genderIndex === PlayerGender.FEMALE + }; + + const onBeforeRewards = () => { + // Before battle rewards, unlock the passive on a pokemon in the player's team for the rest of the run (not permanently) + // One random pokemon will get its passive unlocked + const passiveDisabledPokemon = scene.getParty().filter(p => !p.passive); + if (passiveDisabledPokemon?.length > 0) { + const enablePassiveMon = passiveDisabledPokemon[randSeedInt(passiveDisabledPokemon.length)]; + enablePassiveMon.passive = true; + enablePassiveMon.updateInfo(true); + } + }; + + setEncounterRewards(scene, { guaranteedModifierTiers: [ ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.GREAT, ModifierTier.GREAT ], fillRemaining: false }, undefined, onBeforeRewards); + + await showEncounterText(scene, `${namespace}:option.2.selected_2`, null, undefined, true); + await initBattleWithEnemyConfig(scene, enemyPartyConfig); + } + ) + .withSimpleOption( + { + buttonLabel: `${namespace}:option.3.label`, + buttonTooltip: `${namespace}:option.3.tooltip`, + selected: [ + { + text: `${namespace}:option.3.selected`, + }, + ], + }, + async (scene: BattleScene) => { + // Leave, reduce party levels by 10% for (const pokemon of scene.getParty()) { pokemon.level = Math.max(Math.ceil((100 - PERCENT_LEVEL_LOSS_ON_REFUSE) / 100 * pokemon.level), 1); pokemon.exp = getLevelTotalExp(pokemon.level, pokemon.species.growthRate); @@ -235,7 +331,7 @@ interface PokemonTransformation { function getTeamTransformations(scene: BattleScene): PokemonTransformation[] { const party = scene.getParty(); // Removes all pokemon from the party - const alreadyUsedSpecies: PokemonSpecies[] = []; + const alreadyUsedSpecies: PokemonSpecies[] = party.map(p => p.species); const pokemonTransformations: PokemonTransformation[] = party.map(p => { return { previousPokemon: p @@ -250,11 +346,11 @@ function getTeamTransformations(scene: BattleScene): PokemonTransformation[] { // First, roll 2 of the party members to new Pokemon at a +90 to +110 BST difference // Then, roll the remainder of the party members at a +40 to +50 BST difference const numPokemon = party.length; + const removedPokemon = randSeedShuffle(party.slice(0)); for (let i = 0; i < numPokemon; i++) { - const removed = party[randSeedInt(party.length)]; + const removed = removedPokemon[i]; const index = pokemonTransformations.findIndex(p => p.previousPokemon.id === removed.id); pokemonTransformations[index].heldItems = removed.getHeldItems().filter(m => !(m instanceof PokemonFormChangeItemModifier)); - scene.removePokemonFromPlayerParty(removed, false); const bst = removed.calculateBaseStats().reduce((a, b) => a + b, 0); let newBstRange: [number, number]; @@ -276,14 +372,13 @@ function getTeamTransformations(scene: BattleScene): PokemonTransformation[] { pokemonTransformations[index].newSpecies = newSpecies; + console.log("New species: " + JSON.stringify(newSpecies)); alreadyUsedSpecies.push(newSpecies); } for (const transformation of pokemonTransformations) { const newAbilityIndex = randSeedInt(transformation.newSpecies.getAbilityCount()); - const newPlayerPokemon = scene.addPlayerPokemon(transformation.newSpecies, transformation.previousPokemon.level, newAbilityIndex, undefined); - transformation.newPokemon = newPlayerPokemon; - scene.getParty().push(newPlayerPokemon); + transformation.newPokemon = scene.addPlayerPokemon(transformation.newSpecies, transformation.previousPokemon.level, newAbilityIndex, undefined); } return pokemonTransformations; @@ -296,109 +391,20 @@ async function doNewTeamPostProcess(scene: BattleScene, transformations: Pokemon const newPokemon = transformation.newPokemon; const speciesRootForm = newPokemon.species.getRootSpeciesId(); - // Roll HA a second time - if (newPokemon.species.abilityHidden) { - const hiddenIndex = newPokemon.species.ability2 ? 2 : 1; - if (newPokemon.abilityIndex < hiddenIndex) { - const hiddenAbilityChance = new IntegerHolder(256); - scene.applyModifiers(HiddenAbilityRateBoosterModifier, true, hiddenAbilityChance); - - const hasHiddenAbility = !randSeedInt(hiddenAbilityChance.value); - - if (hasHiddenAbility) { - newPokemon.abilityIndex = hiddenIndex; - } - } + if (await postProcessTransformedPokemon(scene, previousPokemon, newPokemon, speciesRootForm)) { + atLeastOneNewStarter = true; } - // Roll IVs a second time - newPokemon.ivs = newPokemon.ivs.map(iv => { - const newValue = randSeedInt(31); - return newValue > iv ? newValue : iv; - }); - - // For pokemon at/below 570 BST or any shiny pokemon, unlock it permanently as if you had caught it - if (newPokemon.getSpeciesForm().getBaseStatTotal() <= NON_LEGENDARY_BST_THRESHOLD || newPokemon.isShiny()) { - if (newPokemon.getSpeciesForm().abilityHidden && newPokemon.abilityIndex === newPokemon.getSpeciesForm().getAbilityCount() - 1) { - scene.validateAchv(achvs.HIDDEN_ABILITY); - } - - if (newPokemon.species.subLegendary) { - scene.validateAchv(achvs.CATCH_SUB_LEGENDARY); - } - - if (newPokemon.species.legendary) { - scene.validateAchv(achvs.CATCH_LEGENDARY); - } - - if (newPokemon.species.mythical) { - scene.validateAchv(achvs.CATCH_MYTHICAL); - } - - scene.gameData.updateSpeciesDexIvs(newPokemon.species.getRootSpeciesId(true), newPokemon.ivs); - const newStarterUnlocked = await scene.gameData.setPokemonCaught(newPokemon, true, false, false); - if (newStarterUnlocked) { - atLeastOneNewStarter = true; - await showEncounterText(scene, i18next.t("battle:addedAsAStarter", { pokemonName: getPokemonSpecies(speciesRootForm).getName() })); - } - } - - // If the previous pokemon had pokerus, transfer to new pokemon - newPokemon.pokerus = previousPokemon.pokerus; - - // Transfer previous Pokemon's luck value - newPokemon.luck = previousPokemon.getLuck(); - - // If the previous pokemon had higher IVs, override to those (after updating dex IVs > prevents perfect 31s on a new unlock) - newPokemon.ivs = newPokemon.ivs.map((iv, index) => { - return previousPokemon.ivs[index] > iv ? previousPokemon.ivs[index] : iv; - }); - - // For pokemon that the player owns (including ones just caught), gain a candy - if (!!scene.gameData.dexData[speciesRootForm].caughtAttr) { - scene.gameData.addStarterCandy(getPokemonSpecies(speciesRootForm), 1); - } - - // Set the moveset of the new pokemon to be the same as previous, but with 1 egg move and 1 (attempted) STAB move of the new species - newPokemon.generateAndPopulateMoveset(); - // Store a copy of a "standard" generated moveset for the new pokemon, will be used later for finding a favored move - const newPokemonGeneratedMoveset = newPokemon.moveset; - - newPokemon.moveset = previousPokemon.moveset; - - const newEggMoveIndex = await addEggMoveToNewPokemonMoveset(scene, newPokemon, speciesRootForm); - - // Try to add a favored STAB move (might fail if Pokemon already knows a bunch of moves from newPokemonGeneratedMoveset) - addFavoredMoveToNewPokemonMoveset(newPokemon, newPokemonGeneratedMoveset, newEggMoveIndex); - - // Randomize the second type of the pokemon - // If the pokemon does not normally have a second type, it will gain 1 - const newTypes = [ newPokemon.getTypes()[0] ]; - let newType = randSeedInt(18) as Type; - while (newType === newTypes[0]) { - newType = randSeedInt(18) as Type; - } - newTypes.push(newType); - if (!newPokemon.customPokemonData) { - newPokemon.customPokemonData = new CustomPokemonData(); - } - newPokemon.customPokemonData.types = newTypes; - + // Copy old items to new pokemon for (const item of transformation.heldItems) { item.pokemonId = newPokemon.id; await scene.addModifier(item, false, false, false, true); } - - // Any pokemon that is at or below 450 BST gets +20 permanent BST to 3 stats: HP (halved, +10), lowest of Atk/SpAtk, and lowest of Def/SpDef - if (newPokemon.getSpeciesForm().getBaseStatTotal() <= GAIN_OLD_GATEAU_ITEM_BST_THRESHOLD) { - const stats: Stat[] = [ Stat.HP ]; - const baseStats = newPokemon.getSpeciesForm().baseStats.slice(0); - // Attack or SpAtk - stats.push(baseStats[Stat.ATK] < baseStats[Stat.SPATK] ? Stat.ATK : Stat.SPATK); - // Def or SpDef - stats.push(baseStats[Stat.DEF] < baseStats[Stat.SPDEF] ? Stat.DEF : Stat.SPDEF); + // Any pokemon that is below 570 BST gets +20 permanent BST to 3 stats + if (shouldGetOldGateau(newPokemon)) { + const stats = getOldGateauBoostedStats(newPokemon); const modType = modifierTypes.MYSTERY_ENCOUNTER_OLD_GATEAU() - .generateType(scene.getParty(), [ 20, stats ]) + .generateType(scene.getParty(), [ OLD_GATEAU_STATS_UP, stats ]) ?.withIdFromFunc(modifierTypes.MYSTERY_ENCOUNTER_OLD_GATEAU); const modifier = modType?.newModifier(newPokemon); if (modifier) { @@ -406,9 +412,6 @@ async function doNewTeamPostProcess(scene: BattleScene, transformations: Pokemon } } - // Enable passive if previous had it - newPokemon.passive = previousPokemon.passive; - newPokemon.calculateStats(); await newPokemon.updateInfo(); } @@ -427,6 +430,138 @@ async function doNewTeamPostProcess(scene: BattleScene, transformations: Pokemon } } +/** + * Applies special changes to the newly transformed pokemon, such as passing previous moves, gaining egg moves, etc. + * Returns whether the transformed pokemon unlocks a new starter for the player. + * @param scene + * @param previousPokemon + * @param newPokemon + * @param speciesRootForm + * @param forBattle Default `false`. If false, will perform achievements and dex unlocks for the player. + */ +async function postProcessTransformedPokemon(scene: BattleScene, previousPokemon: PlayerPokemon, newPokemon: PlayerPokemon, speciesRootForm: Species, forBattle: boolean = false): Promise { + let isNewStarter = false; + // Roll HA a second time + if (newPokemon.species.abilityHidden) { + const hiddenIndex = newPokemon.species.ability2 ? 2 : 1; + if (newPokemon.abilityIndex < hiddenIndex) { + const hiddenAbilityChance = new IntegerHolder(256); + scene.applyModifiers(HiddenAbilityRateBoosterModifier, true, hiddenAbilityChance); + + const hasHiddenAbility = !randSeedInt(hiddenAbilityChance.value); + + if (hasHiddenAbility) { + newPokemon.abilityIndex = hiddenIndex; + } + } + } + + // Roll IVs a second time + newPokemon.ivs = newPokemon.ivs.map(iv => { + const newValue = randSeedInt(31); + return newValue > iv ? newValue : iv; + }); + + // Roll a neutral nature + newPokemon.nature = [ Nature.HARDY, Nature.DOCILE, Nature.BASHFUL, Nature.QUIRKY, Nature.SERIOUS ][randSeedInt(5)]; + + // For pokemon at/below 570 BST or any shiny pokemon, unlock it permanently as if you had caught it + if (!forBattle && (newPokemon.getSpeciesForm().getBaseStatTotal() <= NON_LEGENDARY_BST_THRESHOLD || newPokemon.isShiny())) { + if (newPokemon.getSpeciesForm().abilityHidden && newPokemon.abilityIndex === newPokemon.getSpeciesForm().getAbilityCount() - 1) { + scene.validateAchv(achvs.HIDDEN_ABILITY); + } + + if (newPokemon.species.subLegendary) { + scene.validateAchv(achvs.CATCH_SUB_LEGENDARY); + } + + if (newPokemon.species.legendary) { + scene.validateAchv(achvs.CATCH_LEGENDARY); + } + + if (newPokemon.species.mythical) { + scene.validateAchv(achvs.CATCH_MYTHICAL); + } + + scene.gameData.updateSpeciesDexIvs(newPokemon.species.getRootSpeciesId(true), newPokemon.ivs); + const newStarterUnlocked = await scene.gameData.setPokemonCaught(newPokemon, true, false, false); + if (newStarterUnlocked) { + isNewStarter = true; + await showEncounterText(scene, i18next.t("battle:addedAsAStarter", { pokemonName: getPokemonSpecies(speciesRootForm).getName() })); + } + } + + // If the previous pokemon had pokerus, transfer to new pokemon + newPokemon.pokerus = previousPokemon.pokerus; + + // Transfer previous Pokemon's luck value + newPokemon.luck = previousPokemon.getLuck(); + + // If the previous pokemon had higher IVs, override to those (after updating dex IVs > prevents perfect 31s on a new unlock) + newPokemon.ivs = newPokemon.ivs.map((iv, index) => { + return previousPokemon.ivs[index] > iv ? previousPokemon.ivs[index] : iv; + }); + + // For pokemon that the player owns (including ones just caught), gain a candy + if (!forBattle && !!scene.gameData.dexData[speciesRootForm].caughtAttr) { + scene.gameData.addStarterCandy(getPokemonSpecies(speciesRootForm), 1); + } + + // Set the moveset of the new pokemon to be the same as previous, but with 1 egg move and 1 (attempted) STAB move of the new species + newPokemon.generateAndPopulateMoveset(); + // Store a copy of a "standard" generated moveset for the new pokemon, will be used later for finding a favored move + const newPokemonGeneratedMoveset = newPokemon.moveset; + + newPokemon.moveset = previousPokemon.moveset.slice(0); + + const newEggMoveIndex = await addEggMoveToNewPokemonMoveset(scene, newPokemon, speciesRootForm, forBattle); + + // Try to add a favored STAB move (might fail if Pokemon already knows a bunch of moves from newPokemonGeneratedMoveset) + addFavoredMoveToNewPokemonMoveset(newPokemon, newPokemonGeneratedMoveset, newEggMoveIndex); + + // Randomize the second type of the pokemon + // If the pokemon does not normally have a second type, it will gain 1 + const newTypes = [ newPokemon.getTypes()[0] ]; + let newType = randSeedInt(18) as Type; + while (newType === newTypes[0]) { + newType = randSeedInt(18) as Type; + } + newTypes.push(newType); + if (!newPokemon.customPokemonData) { + newPokemon.customPokemonData = new CustomPokemonData(); + } + newPokemon.customPokemonData.types = newTypes; + + // Enable passive if previous had it + newPokemon.passive = previousPokemon.passive; + + return isNewStarter; +} + +/** + * @returns `true` if a given Pokemon has valid BST to be given an Old Gateau + */ +function shouldGetOldGateau(pokemon: Pokemon): boolean { + return pokemon.getSpeciesForm().getBaseStatTotal() < NON_LEGENDARY_BST_THRESHOLD; +} + +/** + * Get the lowest of HP/Spd, lowest of Atk/SpAtk, and lowest of Def/SpDef + * @returns Array of 3 {@linkcode Stat}s to boost + */ +function getOldGateauBoostedStats(pokemon: Pokemon): Stat[] { + const stats: Stat[] = []; + const baseStats = pokemon.getSpeciesForm().baseStats.slice(0); + // HP or Speed + stats.push(baseStats[Stat.HP] < baseStats[Stat.SPD] ? Stat.HP : Stat.SPD); + // Attack or SpAtk + stats.push(baseStats[Stat.ATK] < baseStats[Stat.SPATK] ? Stat.ATK : Stat.SPATK); + // Def or SpDef + stats.push(baseStats[Stat.DEF] < baseStats[Stat.SPDEF] ? Stat.DEF : Stat.SPDEF); + return stats; +} + + function getTransformedSpecies(originalBst: number, bstSearchRange: [number, number], hasPokemonBstHigherThan600: boolean, hasPokemonBstBetween570And600: boolean, alreadyUsedSpecies: PokemonSpecies[]): PokemonSpecies { let newSpecies: PokemonSpecies | undefined; while (isNullOrUndefined(newSpecies)) { @@ -550,7 +685,7 @@ function doSideBySideTransformations(scene: BattleScene, transformations: Pokemo * @param newPokemon * @param speciesRootForm */ -async function addEggMoveToNewPokemonMoveset(scene: BattleScene, newPokemon: PlayerPokemon, speciesRootForm: Species): Promise { +async function addEggMoveToNewPokemonMoveset(scene: BattleScene, newPokemon: PlayerPokemon, speciesRootForm: Species, forBattle: boolean = false): Promise { let eggMoveIndex: null | number = null; const eggMoves = newPokemon.getEggMoves()?.slice(0); if (eggMoves) { @@ -576,7 +711,7 @@ async function addEggMoveToNewPokemonMoveset(scene: BattleScene, newPokemon: Pla } // For pokemon that the player owns (including ones just caught), unlock the egg move - if (!isNullOrUndefined(randomEggMoveIndex) && !!scene.gameData.dexData[speciesRootForm].caughtAttr) { + if (!forBattle && !isNullOrUndefined(randomEggMoveIndex) && !!scene.gameData.dexData[speciesRootForm].caughtAttr) { await scene.gameData.setEggMoveUnlocked(getPokemonSpecies(speciesRootForm), randomEggMoveIndex, true); } } diff --git a/src/data/mystery-encounters/mystery-encounter-requirements.ts b/src/data/mystery-encounters/mystery-encounter-requirements.ts index a57cedc8fa3..91ea0c5be19 100644 --- a/src/data/mystery-encounters/mystery-encounter-requirements.ts +++ b/src/data/mystery-encounters/mystery-encounter-requirements.ts @@ -37,31 +37,58 @@ export abstract class EncounterSceneRequirement implements EncounterRequirement abstract getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string]; } +/** + * Combination of multiple {@linkcode EncounterSceneRequirement | EncounterSceneRequirements} (OR/AND possible. See {@linkcode isAnd}) + */ export class CombinationSceneRequirement extends EncounterSceneRequirement { - orRequirements: EncounterSceneRequirement[]; + /** If `true`, all requirements must be met (AND). If `false`, any requirement must be met (OR) */ + private isAnd: boolean; + requirements: EncounterSceneRequirement[]; - constructor(... orRequirements: EncounterSceneRequirement[]) { + public static Some(...requirements: EncounterSceneRequirement[]): CombinationSceneRequirement { + return new CombinationSceneRequirement(false, ...requirements); + } + + public static Every(...requirements: EncounterSceneRequirement[]): CombinationSceneRequirement { + return new CombinationSceneRequirement(true, ...requirements); + } + + private constructor(isAnd: boolean, ...requirements: EncounterSceneRequirement[]) { super(); - this.orRequirements = orRequirements; + this.isAnd = isAnd; + this.requirements = requirements; } + /** + * Checks if all/any requirements are met (depends on {@linkcode isAnd}) + * @param scene The {@linkcode BattleScene} to check against + * @returns true if all/any requirements are met (depends on {@linkcode isAnd}) + */ override meetsRequirement(scene: BattleScene): boolean { - for (const req of this.orRequirements) { - if (req.meetsRequirement(scene)) { - return true; - } - } - return false; + return this.isAnd + ? this.requirements.every(req => req.meetsRequirement(scene)) + : this.requirements.some(req => req.meetsRequirement(scene)); } + /** + * Retrieves a dialogue token key/value pair for the given {@linkcode EncounterSceneRequirement | requirements}. + * @param scene The {@linkcode BattleScene} to check against + * @param pokemon The {@linkcode PlayerPokemon} to check against + * @returns A dialogue token key/value pair + * @throws An {@linkcode Error} if {@linkcode isAnd} is `true` (not supported) + */ override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { - for (const req of this.orRequirements) { - if (req.meetsRequirement(scene)) { - return req.getDialogueToken(scene, pokemon); + if (this.isAnd) { + throw new Error("Not implemented (Sorry)"); + } else { + for (const req of this.requirements) { + if (req.meetsRequirement(scene)) { + return req.getDialogueToken(scene, pokemon); + } } - } - return this.orRequirements[0].getDialogueToken(scene, pokemon); + return this.requirements[0].getDialogueToken(scene, pokemon); + } } } @@ -90,44 +117,74 @@ export abstract class EncounterPokemonRequirement implements EncounterRequiremen abstract getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string]; } +/** + * Combination of multiple {@linkcode EncounterPokemonRequirement | EncounterPokemonRequirements} (OR/AND possible. See {@linkcode isAnd}) + */ export class CombinationPokemonRequirement extends EncounterPokemonRequirement { - orRequirements: EncounterPokemonRequirement[]; + /** If `true`, all requirements must be met (AND). If `false`, any requirement must be met (OR) */ + private isAnd: boolean; + private requirements: EncounterPokemonRequirement[]; - constructor(...orRequirements: EncounterPokemonRequirement[]) { + public static Some(...requirements: EncounterPokemonRequirement[]): CombinationPokemonRequirement { + return new CombinationPokemonRequirement(false, ...requirements); + } + + public static Every(...requirements: EncounterPokemonRequirement[]): CombinationPokemonRequirement { + return new CombinationPokemonRequirement(true, ...requirements); + } + + private constructor(isAnd: boolean, ...requirements: EncounterPokemonRequirement[]) { super(); + this.isAnd = isAnd; this.invertQuery = false; this.minNumberOfPokemon = 1; - this.orRequirements = orRequirements; + this.requirements = requirements; } + /** + * Checks if all/any requirements are met (depends on {@linkcode isAnd}) + * @param scene The {@linkcode BattleScene} to check against + * @returns true if all/any requirements are met (depends on {@linkcode isAnd}) + */ override meetsRequirement(scene: BattleScene): boolean { - for (const req of this.orRequirements) { - if (req.meetsRequirement(scene)) { - return true; - } - } - return false; + return this.isAnd + ? this.requirements.every(req => req.meetsRequirement(scene)) + : this.requirements.some(req => req.meetsRequirement(scene)); } + /** + * Queries the players party for all party members that are compatible with all/any requirements (depends on {@linkcode isAnd}) + * @param partyPokemon The party of {@linkcode PlayerPokemon} + * @returns All party members that are compatible with all/any requirements (depends on {@linkcode isAnd}) + */ override queryParty(partyPokemon: PlayerPokemon[]): PlayerPokemon[] { - for (const req of this.orRequirements) { - const result = req.queryParty(partyPokemon); - if (result?.length > 0) { - return result; - } + if (this.isAnd) { + return this.requirements.reduce((relevantPokemon, req) => req.queryParty(relevantPokemon), partyPokemon); + } else { + const matchingRequirement = this.requirements.find(req => req.queryParty(partyPokemon).length > 0); + return matchingRequirement ? matchingRequirement.queryParty(partyPokemon) : []; } - - return []; } + /** + * Retrieves a dialogue token key/value pair for the given {@linkcode EncounterPokemonRequirement | requirements}. + * @param scene The {@linkcode BattleScene} to check against + * @param pokemon The {@linkcode PlayerPokemon} to check against + * @returns A dialogue token key/value pair + * @throws An {@linkcode Error} if {@linkcode isAnd} is `true` (not supported) + */ override getDialogueToken(scene: BattleScene, pokemon?: PlayerPokemon): [string, string] { - for (const req of this.orRequirements) { - if (req.meetsRequirement(scene)) { - return req.getDialogueToken(scene, pokemon); + if (this.isAnd) { + throw new Error("Not implemented (Sorry)"); + } else { + for (const req of this.requirements) { + if (req.meetsRequirement(scene)) { + return req.getDialogueToken(scene, pokemon); + } } - } - return this.orRequirements[0].getDialogueToken(scene, pokemon); + return this.requirements[0].getDialogueToken(scene, pokemon); + } } } diff --git a/src/data/mystery-encounters/mystery-encounter.ts b/src/data/mystery-encounters/mystery-encounter.ts index ee9eb159e10..c045ee51bd7 100644 --- a/src/data/mystery-encounters/mystery-encounter.ts +++ b/src/data/mystery-encounters/mystery-encounter.ts @@ -53,6 +53,7 @@ export interface IMysteryEncounter { hasBattleAnimationsWithoutTargets: boolean; skipEnemyBattleTurns: boolean; skipToFightInput: boolean; + preventGameStatsUpdates: boolean; onInit?: (scene: BattleScene) => boolean; onVisualsStart?: (scene: BattleScene) => boolean; @@ -150,6 +151,10 @@ export default class MysteryEncounter implements IMysteryEncounter { * If true, will skip COMMAND input and go straight to FIGHT (move select) input menu */ skipToFightInput: boolean; + /** + * If true, will prevent updating {@linkcode GameStats} for encountering and/or defeating Pokemon + */ + preventGameStatsUpdates: boolean; // #region Event callback functions @@ -548,6 +553,7 @@ export class MysteryEncounterBuilder implements Partial { hasBattleAnimationsWithoutTargets: boolean = false; skipEnemyBattleTurns: boolean = false; skipToFightInput: boolean = false; + preventGameStatsUpdates: boolean = false; maxAllowedEncounters: number = 3; expMultiplier: number = 1; @@ -735,6 +741,14 @@ export class MysteryEncounterBuilder implements Partial { return Object.assign(this, { skipToFightInput }); } + /** + * If true, will prevent updating {@linkcode GameStats} for encountering and/or defeating Pokemon + * Default `false` + */ + withPreventGameStatsUpdates(preventGameStatsUpdates: boolean): this & Required> { + return Object.assign(this, { preventGameStatsUpdates }); + } + /** * Sets the maximum number of times that an encounter can spawn in a given Classic run * @param maxAllowedEncounters diff --git a/src/data/mystery-encounters/requirements/requirement-groups.ts b/src/data/mystery-encounters/requirements/requirement-groups.ts index 63c899fc5e9..76bbb8f03a7 100644 --- a/src/data/mystery-encounters/requirements/requirement-groups.ts +++ b/src/data/mystery-encounters/requirements/requirement-groups.ts @@ -118,3 +118,20 @@ export const EXTORTION_ABILITIES = [ Abilities.SUCTION_CUPS, Abilities.STICKY_HOLD ]; + +/** + * Abilities that signify resistance to fire + */ +export const FIRE_RESISTANT_ABILITIES = [ + Abilities.FLAME_BODY, + Abilities.FLASH_FIRE, + Abilities.WELL_BAKED_BODY, + Abilities.HEATPROOF, + Abilities.THERMAL_EXCHANGE, + Abilities.THICK_FAT, + Abilities.WATER_BUBBLE, + Abilities.MAGMA_ARMOR, + Abilities.WATER_VEIL, + Abilities.STEAM_ENGINE, + Abilities.PRIMORDIAL_SEA +]; diff --git a/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts b/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts index 5fa8af95f4d..b1adc478ab0 100644 --- a/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts @@ -21,6 +21,8 @@ import { Gender } from "#app/data/gender"; import { PermanentStat } from "#enums/stat"; import { VictoryPhase } from "#app/phases/victory-phase"; import { SummaryUiMode } from "#app/ui/summary-ui-handler"; +import { CustomPokemonData } from "#app/data/custom-pokemon-data"; +import { Abilities } from "#enums/abilities"; /** Will give +1 level every 10 waves */ export const STANDARD_ENCOUNTER_BOOSTED_LEVEL_MODIFIER = 1; @@ -833,3 +835,21 @@ export function isPokemonValidForEncounterOptionSelection(pokemon: Pokemon, scen return null; } + +/** + * Permanently overrides the ability (not passive) of a pokemon. + * If the pokemon is a fusion, instead overrides the fused pokemon's ability. + */ +export function applyAbilityOverrideToPokemon(pokemon: Pokemon, ability: Abilities) { + if (pokemon.isFusion()) { + if (!pokemon.fusionCustomPokemonData) { + pokemon.fusionCustomPokemonData = new CustomPokemonData(); + } + pokemon.fusionCustomPokemonData.ability = ability; + } else { + if (!pokemon.customPokemonData) { + pokemon.customPokemonData = new CustomPokemonData(); + } + pokemon.customPokemonData.ability = ability; + } +} diff --git a/src/data/trainer-config.ts b/src/data/trainer-config.ts index fcc13975270..bc69b611075 100644 --- a/src/data/trainer-config.ts +++ b/src/data/trainer-config.ts @@ -2500,6 +2500,22 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.BUG_TYPE_SUPERFAN]: new TrainerConfig(++t).setMoneyMultiplier(2.25).setEncounterBgm(TrainerType.ACE_TRAINER) .setPartyTemplates(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE)), [TrainerType.EXPERT_POKEMON_BREEDER]: new TrainerConfig(++t).setMoneyMultiplier(3).setEncounterBgm(TrainerType.ACE_TRAINER).setLocalizedName("Expert Pokemon Breeder") - .setPartyTemplates(new TrainerPartyTemplate(3, PartyMemberStrength.STRONG)) + .setPartyTemplates(new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE)), + [TrainerType.FUTURE_SELF_M]: new TrainerConfig(++t) + .setMoneyMultiplier(0) + .setEncounterBgm("mystery_encounter_weird_dream") + .setBattleBgm("mystery_encounter_weird_dream") + .setMixedBattleBgm("mystery_encounter_weird_dream") + .setVictoryBgm("mystery_encounter_weird_dream") + .setLocalizedName("Future Self M") + .setPartyTemplates(new TrainerPartyTemplate(6, PartyMemberStrength.STRONG)), + [TrainerType.FUTURE_SELF_F]: new TrainerConfig(++t) + .setMoneyMultiplier(0) + .setEncounterBgm("mystery_encounter_weird_dream") + .setBattleBgm("mystery_encounter_weird_dream") + .setMixedBattleBgm("mystery_encounter_weird_dream") + .setVictoryBgm("mystery_encounter_weird_dream") + .setLocalizedName("Future Self F") + .setPartyTemplates(new TrainerPartyTemplate(6, PartyMemberStrength.STRONG)) }; diff --git a/src/enums/trainer-type.ts b/src/enums/trainer-type.ts index cb7509067b5..708faf69196 100644 --- a/src/enums/trainer-type.ts +++ b/src/enums/trainer-type.ts @@ -116,6 +116,8 @@ export enum TrainerType { VITO, BUG_TYPE_SUPERFAN, EXPERT_POKEMON_BREEDER, + FUTURE_SELF_M, + FUTURE_SELF_F, BROCK = 200, MISTY, diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 6c4ae3b7ff9..d41c1f9eefa 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -93,7 +93,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { public stats: integer[]; public ivs: integer[]; public nature: Nature; - public natureOverride: Nature | -1; public moveset: (PokemonMove | null)[]; public status: Status | null; public friendship: integer; @@ -4283,7 +4282,6 @@ export class PlayerPokemon extends Pokemon { if (newEvolution.condition?.predicate(this)) { const newPokemon = this.scene.addPlayerPokemon(this.species, this.level, this.abilityIndex, this.formIndex, undefined, this.shiny, this.variant, this.ivs, this.nature); - newPokemon.natureOverride = this.natureOverride; newPokemon.passive = this.passive; newPokemon.moveset = this.moveset.slice(); newPokemon.moveset = this.copyMoveset(); diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index 8e7853a41bb..3e475c62590 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -10,7 +10,9 @@ import { getStatusEffectDescriptor, StatusEffect } from "#app/data/status-effect import { Type } from "#app/data/type"; import Pokemon, { EnemyPokemon, PlayerPokemon, PokemonMove } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; -import { AddPokeballModifier, AddVoucherModifier, AttackTypeBoosterModifier, BaseStatModifier, BerryModifier, BoostBugSpawnModifier, BypassSpeedChanceModifier, ContactHeldItemTransferChanceModifier, CritBoosterModifier, DamageMoneyRewardModifier, DoubleBattleChanceBoosterModifier, EnemyAttackStatusEffectChanceModifier, EnemyDamageBoosterModifier, EnemyDamageReducerModifier, EnemyEndureChanceModifier, EnemyFusionChanceModifier, EnemyStatusEffectHealChanceModifier, EnemyTurnHealModifier, EvolutionItemModifier, EvolutionStatBoosterModifier, EvoTrackerModifier, ExpBalanceModifier, ExpBoosterModifier, ExpShareModifier, ExtraModifierModifier, FlinchChanceModifier, FusePokemonModifier, GigantamaxAccessModifier, HealingBoosterModifier, HealShopCostModifier, HiddenAbilityRateBoosterModifier, HitHealModifier, IvScannerModifier, LevelIncrementBoosterModifier, LockModifierTiersModifier, MapModifier, MegaEvolutionAccessModifier, MoneyInterestModifier, MoneyMultiplierModifier, MoneyRewardModifier, MultipleParticipantExpBonusModifier, PokemonAllMovePpRestoreModifier, PokemonBaseStatFlatModifier, PokemonBaseStatTotalModifier, PokemonExpBoosterModifier, PokemonFormChangeItemModifier, PokemonFriendshipBoosterModifier, PokemonHeldItemModifier, PokemonHpRestoreModifier, PokemonIncrementingStatModifier, PokemonInstantReviveModifier, PokemonLevelIncrementModifier, PokemonMoveAccuracyBoosterModifier, PokemonMultiHitModifier, PokemonNatureChangeModifier, PokemonNatureWeightModifier, PokemonPpRestoreModifier, PokemonPpUpModifier, PokemonStatusHealModifier, PreserveBerryModifier, RememberMoveModifier, ResetNegativeStatStageModifier, ShinyRateBoosterModifier, SpeciesCritBoosterModifier, SpeciesStatBoosterModifier, SurviveDamageModifier, SwitchEffectTransferModifier, TempCritBoosterModifier, TempStatStageBoosterModifier, TerastallizeAccessModifier, TerastallizeModifier, TmModifier, TurnHealModifier, TurnHeldItemTransferModifier, TurnStatusEffectModifier, type EnemyPersistentModifier, type Modifier, type PersistentModifier } from "#app/modifier/modifier"; +import { + AddPokeballModifier, AddVoucherModifier, AttackTypeBoosterModifier, BaseStatModifier, BerryModifier, BoostBugSpawnModifier, BypassSpeedChanceModifier, ContactHeldItemTransferChanceModifier, CritBoosterModifier, DamageMoneyRewardModifier, DoubleBattleChanceBoosterModifier, EnemyAttackStatusEffectChanceModifier, EnemyDamageBoosterModifier, EnemyDamageReducerModifier, EnemyEndureChanceModifier, EnemyFusionChanceModifier, EnemyStatusEffectHealChanceModifier, EnemyTurnHealModifier, EvolutionItemModifier, EvolutionStatBoosterModifier, EvoTrackerModifier, ExpBalanceModifier, ExpBoosterModifier, ExpShareModifier, ExtraModifierModifier, FlinchChanceModifier, FusePokemonModifier, GigantamaxAccessModifier, HealingBoosterModifier, HealShopCostModifier, HiddenAbilityRateBoosterModifier, HitHealModifier, IvScannerModifier, LevelIncrementBoosterModifier, LockModifierTiersModifier, MapModifier, MegaEvolutionAccessModifier, MoneyInterestModifier, MoneyMultiplierModifier, MoneyRewardModifier, MultipleParticipantExpBonusModifier, PokemonAllMovePpRestoreModifier, PokemonBaseStatFlatModifier, PokemonBaseStatTotalModifier, PokemonExpBoosterModifier, PokemonFormChangeItemModifier, PokemonFriendshipBoosterModifier, PokemonHeldItemModifier, PokemonHpRestoreModifier, PokemonIncrementingStatModifier, PokemonInstantReviveModifier, PokemonLevelIncrementModifier, PokemonMoveAccuracyBoosterModifier, PokemonMultiHitModifier, PokemonNatureChangeModifier, PokemonNatureWeightModifier, PokemonPpRestoreModifier, PokemonPpUpModifier, PokemonStatusHealModifier, PreserveBerryModifier, RememberMoveModifier, ResetNegativeStatStageModifier, ShinyRateBoosterModifier, SpeciesCritBoosterModifier, SpeciesStatBoosterModifier, SurviveDamageModifier, SwitchEffectTransferModifier, TempCritBoosterModifier, TempStatStageBoosterModifier, TerastallizeAccessModifier, TerastallizeModifier, TmModifier, TurnHealModifier, TurnHeldItemTransferModifier, TurnStatusEffectModifier, type EnemyPersistentModifier, type Modifier, type PersistentModifier, TempExtraModifierModifier +} from "#app/modifier/modifier"; import { ModifierTier } from "#app/modifier/modifier-tier"; import Overrides from "#app/overrides"; import { Unlockables } from "#app/system/unlockables"; @@ -1561,6 +1563,7 @@ export const modifierTypes = { VOUCHER_PREMIUM: () => new AddVoucherModifierType(VoucherType.PREMIUM, 1), GOLDEN_POKEBALL: () => new ModifierType("modifierType:ModifierType.GOLDEN_POKEBALL", "pb_gold", (type, _args) => new ExtraModifierModifier(type), undefined, "se/pb_bounce_1"), + SILVER_POKEBALL: () => new ModifierType("modifierType:ModifierType.SILVER_POKEBALL", "pb_silver", (type, _args) => new TempExtraModifierModifier(type, 100), undefined, "se/pb_bounce_1"), ENEMY_DAMAGE_BOOSTER: () => new ModifierType("modifierType:ModifierType.ENEMY_DAMAGE_BOOSTER", "wl_item_drop", (type, _args) => new EnemyDamageBoosterModifier(type, 5)), ENEMY_DAMAGE_REDUCTION: () => new ModifierType("modifierType:ModifierType.ENEMY_DAMAGE_REDUCTION", "wl_guard_spec", (type, _args) => new EnemyDamageReducerModifier(type, 2.5)), @@ -1577,13 +1580,13 @@ export const modifierTypes = { if (pregenArgs) { return new PokemonBaseStatTotalModifierType(pregenArgs[0] as number); } - return new PokemonBaseStatTotalModifierType(randSeedInt(20)); + return new PokemonBaseStatTotalModifierType(randSeedInt(20, 1)); }), MYSTERY_ENCOUNTER_OLD_GATEAU: () => new ModifierTypeGenerator((party: Pokemon[], pregenArgs?: any[]) => { if (pregenArgs) { return new PokemonBaseStatFlatModifierType(pregenArgs[0] as number, pregenArgs[1] as Stat[]); } - return new PokemonBaseStatFlatModifierType(randSeedInt(20), [ Stat.HP, Stat.ATK, Stat.DEF ]); + return new PokemonBaseStatFlatModifierType(randSeedInt(20, 1), [ Stat.HP, Stat.ATK, Stat.DEF ]); }), MYSTERY_ENCOUNTER_BLACK_SLUDGE: () => new ModifierTypeGenerator((party: Pokemon[], pregenArgs?: any[]) => { if (pregenArgs) { diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index b699c2483c9..11f16f103a5 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -404,6 +404,14 @@ export abstract class LapsingPersistentModifier extends PersistentModifier { this.battleCount = this.maxBattles; } + /** + * Updates an existing modifier with a new `maxBattles` and `battleCount`. + */ + setNewBattleCount(count: number): void { + this.maxBattles = count; + this.battleCount = count; + } + getMaxBattles(): number { return this.maxBattles; } @@ -960,7 +968,7 @@ export class EvoTrackerModifier extends PokemonHeldItemModifier { this.stackCount = pokemon ? pokemon.evoCounter + pokemon.getHeldItems().filter(m => m instanceof DamageMoneyRewardModifier).length - + pokemon.scene.findModifiers(m => m instanceof MoneyMultiplierModifier || m instanceof ExtraModifierModifier).length + + pokemon.scene.findModifiers(m => m instanceof MoneyMultiplierModifier || m instanceof ExtraModifierModifier || m instanceof TempExtraModifierModifier).length : this.stackCount; const text = scene.add.bitmapText(10, 15, "item-count", this.stackCount.toString(), 11); @@ -975,7 +983,7 @@ export class EvoTrackerModifier extends PokemonHeldItemModifier { getMaxHeldItemCount(pokemon: Pokemon): number { this.stackCount = pokemon.evoCounter + pokemon.getHeldItems().filter(m => m instanceof DamageMoneyRewardModifier).length - + pokemon.scene.findModifiers(m => m instanceof MoneyMultiplierModifier || m instanceof ExtraModifierModifier).length; + + pokemon.scene.findModifiers(m => m instanceof MoneyMultiplierModifier || m instanceof ExtraModifierModifier || m instanceof TempExtraModifierModifier).length; return 999; } } @@ -3288,6 +3296,60 @@ export class ExtraModifierModifier extends PersistentModifier { } } +/** + * Modifier used for timed boosts to the player's shop item rewards. + * @extends LapsingPersistentModifier + * @see {@linkcode apply} + */ +export class TempExtraModifierModifier extends LapsingPersistentModifier { + constructor(type: ModifierType, maxBattles: number, battleCount?: number, stackCount?: number) { + super(type, maxBattles, battleCount, stackCount); + } + + /** + * Goes through existing modifiers for any that match Silver Pokeball, + * which will then add the max count of the new item to the existing count of the current item. + * If no existing Silver Pokeballs are found, will add a new one. + * @param modifiers {@linkcode PersistentModifier} array of the player's modifiers + * @param _virtual N/A + * @param scene + * @returns true if the modifier was successfully added or applied, false otherwise + */ + add(modifiers: PersistentModifier[], _virtual: boolean, scene: BattleScene): boolean { + for (const modifier of modifiers) { + if (this.match(modifier)) { + const modifierInstance = modifier as TempExtraModifierModifier; + const newBattleCount = this.getMaxBattles() + modifierInstance.getBattleCount(); + + modifierInstance.setNewBattleCount(newBattleCount); + scene.playSound("se/restore"); + return true; + } + } + + modifiers.push(this); + return true; + } + + clone() { + return new TempExtraModifierModifier(this.type, this.getMaxBattles(), this.getBattleCount(), this.stackCount); + } + + match(modifier: Modifier): boolean { + return (modifier instanceof TempExtraModifierModifier); + } + + /** + * Increases the current rewards in the battle by the `stackCount`. + * @returns `true` if the shop reward number modifier applies successfully + * @param count {@linkcode NumberHolder} that holds the resulting shop item reward count + */ + apply(count: NumberHolder): boolean { + count.value += this.getStackCount(); + return true; + } +} + export abstract class EnemyPersistentModifier extends PersistentModifier { constructor(type: ModifierType, stackCount?: number) { super(type, stackCount); diff --git a/src/phases/select-modifier-phase.ts b/src/phases/select-modifier-phase.ts index 38d5cfb4a10..e5a60692bb4 100644 --- a/src/phases/select-modifier-phase.ts +++ b/src/phases/select-modifier-phase.ts @@ -1,7 +1,7 @@ import BattleScene from "#app/battle-scene"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { regenerateModifierPoolThresholds, ModifierTypeOption, ModifierType, getPlayerShopModifierTypeOptionsForWave, PokemonModifierType, FusePokemonModifierType, PokemonMoveModifierType, TmModifierType, RememberMoveModifierType, PokemonPpRestoreModifierType, PokemonPpUpModifierType, ModifierPoolType, getPlayerModifierTypeOptions } from "#app/modifier/modifier-type"; -import { ExtraModifierModifier, HealShopCostModifier, Modifier, PokemonHeldItemModifier } from "#app/modifier/modifier"; +import { ExtraModifierModifier, HealShopCostModifier, Modifier, PokemonHeldItemModifier, TempExtraModifierModifier } from "#app/modifier/modifier"; import ModifierSelectUiHandler, { SHOP_OPTIONS_ROW_LIMIT } from "#app/ui/modifier-select-ui-handler"; import PartyUiHandler, { PartyUiMode, PartyOption } from "#app/ui/party-ui-handler"; import { Mode } from "#app/ui/ui"; @@ -45,6 +45,7 @@ export class SelectModifierPhase extends BattlePhase { const modifierCount = new Utils.IntegerHolder(3); if (this.isPlayer()) { this.scene.applyModifiers(ExtraModifierModifier, true, modifierCount); + this.scene.applyModifiers(TempExtraModifierModifier, true, modifierCount); } // If custom modifiers are specified, overrides default item count @@ -274,7 +275,13 @@ export class SelectModifierPhase extends BattlePhase { // Otherwise, continue with custom multiplier multiplier = this.customModifierSettings.rerollMultiplier; } - return Math.min(Math.ceil(this.scene.currentBattle.waveIndex / 10) * baseValue * Math.pow(2, this.rerollCount) * multiplier, Number.MAX_SAFE_INTEGER); + + const baseMultiplier = Math.min(Math.ceil(this.scene.currentBattle.waveIndex / 10) * baseValue * (2 ** this.rerollCount) * multiplier, Number.MAX_SAFE_INTEGER); + + // Apply Black Sludge to reroll cost + const modifiedRerollCost = new NumberHolder(baseMultiplier); + this.scene.applyModifier(HealShopCostModifier, true, modifiedRerollCost); + return modifiedRerollCost.value; } getPoolType(): ModifierPoolType { diff --git a/src/phases/victory-phase.ts b/src/phases/victory-phase.ts index e900ff97fc6..1faa31655df 100644 --- a/src/phases/victory-phase.ts +++ b/src/phases/victory-phase.ts @@ -25,12 +25,17 @@ export class VictoryPhase extends PokemonPhase { start() { super.start(); - this.scene.gameData.gameStats.pokemonDefeated++; + const isMysteryEncounter = this.scene.currentBattle.isBattleMysteryEncounter(); + + // update Pokemon defeated count except for MEs that disable it + if (!isMysteryEncounter || !this.scene.currentBattle.mysteryEncounter?.preventGameStatsUpdates) { + this.scene.gameData.gameStats.pokemonDefeated++; + } const expValue = this.getPokemon().getExpValue(); this.scene.applyPartyExp(expValue, true); - if (this.scene.currentBattle.isBattleMysteryEncounter()) { + if (isMysteryEncounter) { handleMysteryEncounterVictory(this.scene, false, this.isExpOnly); return this.end(); } diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 5f9aad63408..c00159a7fd7 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -1569,6 +1569,10 @@ export class GameData { } setPokemonSeen(pokemon: Pokemon, incrementCount: boolean = true, trainer: boolean = false): void { + // Some Mystery Encounters block updates to these stats + if (this.scene.currentBattle?.isBattleMysteryEncounter() && this.scene.currentBattle.mysteryEncounter?.preventGameStatsUpdates) { + return; + } const dexEntry = this.dexData[pokemon.species.speciesId]; dexEntry.seenAttr |= pokemon.getDexAttr(); if (incrementCount) { diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index e681c995b26..421739a9da1 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -92,7 +92,6 @@ export default class PokemonData { this.stats = source.stats; this.ivs = source.ivs; this.nature = source.nature !== undefined ? source.nature : 0 as Nature; - this.natureOverride = source.natureOverride !== undefined ? source.natureOverride : -1; this.friendship = source.friendship !== undefined ? source.friendship : getPokemonSpecies(this.species).baseFriendship; this.metLevel = source.metLevel || 5; this.metBiome = source.metBiome !== undefined ? source.metBiome : -1; @@ -117,6 +116,8 @@ export default class PokemonData { this.customPokemonData = new CustomPokemonData(source.customPokemonData); + // Deprecated, but needed for session data migration + this.natureOverride = source.natureOverride; this.mysteryEncounterPokemonData = new CustomPokemonData(source.mysteryEncounterPokemonData); this.fusionMysteryEncounterPokemonData = new CustomPokemonData(source.fusionMysteryEncounterPokemonData); diff --git a/src/test/mystery-encounter/encounters/delibirdy-encounter.test.ts b/src/test/mystery-encounter/encounters/delibirdy-encounter.test.ts index 69c0a114645..66d628ef82f 100644 --- a/src/test/mystery-encounter/encounters/delibirdy-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/delibirdy-encounter.test.ts @@ -206,7 +206,7 @@ describe("Delibird-y - Mystery Encounter", () => { expect(candyJarAfter?.stackCount).toBe(1); }); - it("Should remove Reviver Seed and give the player a Healing Charm", async () => { + it("Should remove Reviver Seed and give the player a Berry Pouch", async () => { await game.runToMysteryEncounter(MysteryEncounterType.DELIBIRDY, defaultParty); // Set 1 Reviver Seed on party lead @@ -220,11 +220,11 @@ describe("Delibird-y - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 2, { pokemonNo: 1, optionNo: 1 }); const reviverSeedAfter = scene.findModifier(m => m instanceof PokemonInstantReviveModifier); - const healingCharmAfter = scene.findModifier(m => m instanceof HealingBoosterModifier); + const berryPouchAfter = scene.findModifier(m => m instanceof PreserveBerryModifier); expect(reviverSeedAfter).toBeUndefined(); - expect(healingCharmAfter).toBeDefined(); - expect(healingCharmAfter?.stackCount).toBe(1); + expect(berryPouchAfter).toBeDefined(); + expect(berryPouchAfter?.stackCount).toBe(1); }); it("Should give the player a Shell Bell if they have max stacks of Candy Jars", async () => { @@ -256,13 +256,13 @@ describe("Delibird-y - Mystery Encounter", () => { expect(shellBellAfter?.stackCount).toBe(1); }); - it("Should give the player a Shell Bell if they have max stacks of Healing Charms", async () => { + it("Should give the player a Shell Bell if they have max stacks of Berry Pouches", async () => { await game.runToMysteryEncounter(MysteryEncounterType.DELIBIRDY, defaultParty); - // 5 Healing Charms + // 3 Berry Pouches scene.modifiers = []; - const healingCharm = generateModifierType(scene, modifierTypes.HEALING_CHARM)!.newModifier() as HealingBoosterModifier; - healingCharm.stackCount = 5; + const healingCharm = generateModifierType(scene, modifierTypes.BERRY_POUCH)!.newModifier() as PreserveBerryModifier; + healingCharm.stackCount = 3; await scene.addModifier(healingCharm, true, false, false, true); // Set 1 Reviver Seed on party lead @@ -275,12 +275,12 @@ describe("Delibird-y - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 2, { pokemonNo: 1, optionNo: 1 }); const reviverSeedAfter = scene.findModifier(m => m instanceof PokemonInstantReviveModifier); - const healingCharmAfter = scene.findModifier(m => m instanceof HealingBoosterModifier); + const healingCharmAfter = scene.findModifier(m => m instanceof PreserveBerryModifier); const shellBellAfter = scene.findModifier(m => m instanceof HitHealModifier); expect(reviverSeedAfter).toBeUndefined(); expect(healingCharmAfter).toBeDefined(); - expect(healingCharmAfter?.stackCount).toBe(5); + expect(healingCharmAfter?.stackCount).toBe(3); expect(shellBellAfter).toBeDefined(); expect(shellBellAfter?.stackCount).toBe(1); }); @@ -347,7 +347,7 @@ describe("Delibird-y - Mystery Encounter", () => { }); }); - it("Should decrease held item stacks and give the player a Berry Pouch", async () => { + it("Should decrease held item stacks and give the player a Healing Charm", async () => { await game.runToMysteryEncounter(MysteryEncounterType.DELIBIRDY, defaultParty); // Set 2 Soul Dew on party lead @@ -361,14 +361,14 @@ describe("Delibird-y - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1 }); const soulDewAfter = scene.findModifier(m => m instanceof PokemonNatureWeightModifier); - const berryPouchAfter = scene.findModifier(m => m instanceof PreserveBerryModifier); + const healingCharmAfter = scene.findModifier(m => m instanceof HealingBoosterModifier); expect(soulDewAfter?.stackCount).toBe(1); - expect(berryPouchAfter).toBeDefined(); - expect(berryPouchAfter?.stackCount).toBe(1); + expect(healingCharmAfter).toBeDefined(); + expect(healingCharmAfter?.stackCount).toBe(1); }); - it("Should remove held item and give the player a Berry Pouch", async () => { + it("Should remove held item and give the player a Healing Charm", async () => { await game.runToMysteryEncounter(MysteryEncounterType.DELIBIRDY, defaultParty); // Set 1 Soul Dew on party lead @@ -382,20 +382,20 @@ describe("Delibird-y - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1 }); const soulDewAfter = scene.findModifier(m => m instanceof PokemonNatureWeightModifier); - const berryPouchAfter = scene.findModifier(m => m instanceof PreserveBerryModifier); + const healingCharmAfter = scene.findModifier(m => m instanceof HealingBoosterModifier); expect(soulDewAfter).toBeUndefined(); - expect(berryPouchAfter).toBeDefined(); - expect(berryPouchAfter?.stackCount).toBe(1); + expect(healingCharmAfter).toBeDefined(); + expect(healingCharmAfter?.stackCount).toBe(1); }); - it("Should give the player a Shell Bell if they have max stacks of Berry Pouches", async () => { + it("Should give the player a Shell Bell if they have max stacks of Healing Charms", async () => { await game.runToMysteryEncounter(MysteryEncounterType.DELIBIRDY, defaultParty); // 5 Healing Charms scene.modifiers = []; - const healingCharm = generateModifierType(scene, modifierTypes.BERRY_POUCH)!.newModifier() as PreserveBerryModifier; - healingCharm.stackCount = 3; + const healingCharm = generateModifierType(scene, modifierTypes.HEALING_CHARM)!.newModifier() as HealingBoosterModifier; + healingCharm.stackCount = 5; await scene.addModifier(healingCharm, true, false, false, true); // Set 1 Soul Dew on party lead @@ -408,12 +408,12 @@ describe("Delibird-y - Mystery Encounter", () => { await runMysteryEncounterToEnd(game, 3, { pokemonNo: 1, optionNo: 1 }); const soulDewAfter = scene.findModifier(m => m instanceof PokemonNatureWeightModifier); - const berryPouchAfter = scene.findModifier(m => m instanceof PreserveBerryModifier); + const healingCharmAfter = scene.findModifier(m => m instanceof HealingBoosterModifier); const shellBellAfter = scene.findModifier(m => m instanceof HitHealModifier); expect(soulDewAfter).toBeUndefined(); - expect(berryPouchAfter).toBeDefined(); - expect(berryPouchAfter?.stackCount).toBe(3); + expect(healingCharmAfter).toBeDefined(); + expect(healingCharmAfter?.stackCount).toBe(5); expect(shellBellAfter).toBeDefined(); expect(shellBellAfter?.stackCount).toBe(1); }); diff --git a/src/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts b/src/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts index a4f303d121f..5a270f1cbec 100644 --- a/src/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/fiery-fallout-encounter.test.ts @@ -12,7 +12,7 @@ import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encount import { runMysteryEncounterToEnd, runSelectMysteryEncounterOption, skipBattleRunMysteryEncounterRewardsPhase } from "#test/mystery-encounter/encounter-test-utils"; import { Moves } from "#enums/moves"; import BattleScene from "#app/battle-scene"; -import { PokemonHeldItemModifier } from "#app/modifier/modifier"; +import { AttackTypeBoosterModifier, PokemonHeldItemModifier } from "#app/modifier/modifier"; import { Type } from "#app/data/type"; import { Status, StatusEffect } from "#app/data/status-effect"; import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; @@ -22,6 +22,8 @@ import { initSceneWithoutEncounterPhase } from "#test/utils/gameManagerUtils"; import { CommandPhase } from "#app/phases/command-phase"; import { MovePhase } from "#app/phases/move-phase"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; +import { BattlerTagType } from "#enums/battler-tag-type"; +import { Abilities } from "#enums/abilities"; import i18next from "i18next"; const namespace = "mysteryEncounters/fieryFallout"; @@ -42,10 +44,11 @@ describe("Fiery Fallout - Mystery Encounter", () => { beforeEach(async () => { game = new GameManager(phaserGame); scene = game.scene; - game.override.mysteryEncounterChance(100); - game.override.startingWave(defaultWave); - game.override.startingBiome(defaultBiome); - game.override.disableTrainerWaves(); + game.override.mysteryEncounterChance(100) + .startingWave(defaultWave) + .startingBiome(defaultBiome) + .disableTrainerWaves() + .moveset([ Moves.PAYBACK, Moves.THUNDERBOLT ]); // Required for attack type booster item generation vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( new Map([ @@ -109,12 +112,16 @@ describe("Fiery Fallout - Mystery Encounter", () => { { species: getPokemonSpecies(Species.VOLCARONA), isBoss: false, - gender: Gender.MALE + gender: Gender.MALE, + tags: [ BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON ], + mysteryEncounterBattleEffects: expect.any(Function) }, { species: getPokemonSpecies(Species.VOLCARONA), isBoss: false, - gender: Gender.FEMALE + gender: Gender.FEMALE, + tags: [ BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON ], + mysteryEncounterBattleEffects: expect.any(Function) } ], doubleBattle: true, @@ -157,12 +164,11 @@ describe("Fiery Fallout - Mystery Encounter", () => { expect(enemyField[0].gender).not.toEqual(enemyField[1].gender); // Should be opposite gender const movePhases = phaseSpy.mock.calls.filter(p => p[0] instanceof MovePhase).map(p => p[0]); - expect(movePhases.length).toBe(4); + expect(movePhases.length).toBe(2); expect(movePhases.filter(p => (p as MovePhase).move.moveId === Moves.FIRE_SPIN).length).toBe(2); // Fire spin used twice before battle - expect(movePhases.filter(p => (p as MovePhase).move.moveId === Moves.QUIVER_DANCE).length).toBe(2); // Quiver Dance used twice before battle }); - it("should give charcoal to lead pokemon", async () => { + it("should give attack type boosting item to lead pokemon", async () => { await game.runToMysteryEncounter(MysteryEncounterType.FIERY_FALLOUT, defaultParty); await runMysteryEncounterToEnd(game, 1, undefined, true); await skipBattleRunMysteryEncounterRewardsPhase(game); @@ -172,8 +178,8 @@ describe("Fiery Fallout - Mystery Encounter", () => { const leadPokemonId = scene.getParty()?.[0].id; const leadPokemonItems = scene.findModifiers(m => m instanceof PokemonHeldItemModifier && (m as PokemonHeldItemModifier).pokemonId === leadPokemonId, true) as PokemonHeldItemModifier[]; - const charcoal = leadPokemonItems.find(i => i.type.name === "Charcoal"); - expect(charcoal).toBeDefined; + const item = leadPokemonItems.find(i => i instanceof AttackTypeBoosterModifier); + expect(item).toBeDefined; }); }); @@ -193,7 +199,7 @@ describe("Fiery Fallout - Mystery Encounter", () => { }); }); - it("should damage all non-fire party PKM by 20% and randomly burn 1", async () => { + it("should damage all non-fire party PKM by 20%, and burn + give Heatproof to a random Pokemon", async () => { await game.runToMysteryEncounter(MysteryEncounterType.FIERY_FALLOUT, defaultParty); const party = scene.getParty(); @@ -210,7 +216,8 @@ describe("Fiery Fallout - Mystery Encounter", () => { burnablePokemon.forEach((pkm) => { expect(pkm.hp, `${pkm.name} should have received 20% damage: ${pkm.hp} / ${pkm.getMaxHp()} HP`).toBe(pkm.getMaxHp() - Math.floor(pkm.getMaxHp() * 0.2)); }); - expect(burnablePokemon.some(pkm => pkm?.status?.effect === StatusEffect.BURN)).toBeTruthy(); + expect(burnablePokemon.some(pkm => pkm.status?.effect === StatusEffect.BURN)).toBeTruthy(); + expect(burnablePokemon.some(pkm => pkm.customPokemonData.ability === Abilities.HEATPROOF)); notBurnablePokemon.forEach((pkm) => expect(pkm.hp, `${pkm.name} should be full hp: ${pkm.hp} / ${pkm.getMaxHp()} HP`).toBe(pkm.getMaxHp())); }); @@ -241,17 +248,15 @@ describe("Fiery Fallout - Mystery Encounter", () => { }); }); - it("should give charcoal to lead pokemon", async () => { + it("should give attack type boosting item to lead pokemon", async () => { await game.runToMysteryEncounter(MysteryEncounterType.FIERY_FALLOUT, defaultParty); await runMysteryEncounterToEnd(game, 3); await game.phaseInterceptor.to(SelectModifierPhase, false); expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); - const leadPokemonId = scene.getParty()?.[0].id; - const leadPokemonItems = scene.findModifiers(m => m instanceof PokemonHeldItemModifier - && (m as PokemonHeldItemModifier).pokemonId === leadPokemonId, true) as PokemonHeldItemModifier[]; - const charcoal = leadPokemonItems.find(i => i.type.name === "Charcoal"); - expect(charcoal).toBeDefined; + const leadPokemonItems = scene.getParty()?.[0].getHeldItems() as PokemonHeldItemModifier[]; + const item = leadPokemonItems.find(i => i instanceof AttackTypeBoosterModifier); + expect(item).toBeDefined; }); it("should leave encounter without battle", async () => { @@ -264,7 +269,7 @@ describe("Fiery Fallout - Mystery Encounter", () => { }); it("should be disabled if not enough FIRE types are in party", async () => { - await game.runToMysteryEncounter(MysteryEncounterType.FIERY_FALLOUT, [ Species.MAGIKARP, Species.ARCANINE ]); + await game.runToMysteryEncounter(MysteryEncounterType.FIERY_FALLOUT, [ Species.MAGIKARP ]); await game.phaseInterceptor.to(MysteryEncounterPhase, false); const encounterPhase = scene.getCurrentPhase(); diff --git a/src/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts b/src/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts index d761f2d1b21..8286c6a694b 100644 --- a/src/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts @@ -86,7 +86,7 @@ describe("Trash to Treasure - Mystery Encounter", () => { expect(TrashToTreasureEncounter.enemyPartyConfigs).toEqual([ { - levelAdditiveModifier: 1, + levelAdditiveModifier: 0.5, disableSwitch: true, pokemonConfigs: [ { diff --git a/src/test/mystery-encounter/encounters/weird-dream-encounter.test.ts b/src/test/mystery-encounter/encounters/weird-dream-encounter.test.ts index 0d463655a52..c1fa6d83a18 100644 --- a/src/test/mystery-encounter/encounters/weird-dream-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/weird-dream-encounter.test.ts @@ -5,7 +5,7 @@ import { Species } from "#app/enums/species"; import GameManager from "#app/test/utils/gameManager"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import { runMysteryEncounterToEnd } from "#test/mystery-encounter/encounter-test-utils"; +import { runMysteryEncounterToEnd, skipBattleRunMysteryEncounterRewardsPhase } from "#test/mystery-encounter/encounter-test-utils"; import BattleScene from "#app/battle-scene"; import { Mode } from "#app/ui/ui"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; @@ -15,6 +15,8 @@ import { initSceneWithoutEncounterPhase } from "#test/utils/gameManagerUtils"; import { WeirdDreamEncounter } from "#app/data/mystery-encounters/encounters/weird-dream-encounter"; import * as EncounterTransformationSequence from "#app/data/mystery-encounters/utils/encounter-transformation-sequence"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; +import { CommandPhase } from "#app/phases/command-phase"; +import { ModifierTier } from "#app/modifier/modifier-tier"; const namespace = "mysteryEncounters/weirdDream"; const defaultParty = [ Species.MAGBY, Species.HAUNTER, Species.ABRA ]; @@ -70,7 +72,7 @@ describe("Weird Dream - Mystery Encounter", () => { expect(WeirdDreamEncounter.dialogue.encounterOptionsDialogue?.title).toBe(`${namespace}:title`); expect(WeirdDreamEncounter.dialogue.encounterOptionsDialogue?.description).toBe(`${namespace}:description`); expect(WeirdDreamEncounter.dialogue.encounterOptionsDialogue?.query).toBe(`${namespace}:query`); - expect(WeirdDreamEncounter.options.length).toBe(2); + expect(WeirdDreamEncounter.options.length).toBe(3); }); it("should initialize fully", async () => { @@ -132,7 +134,7 @@ describe("Weird Dream - Mystery Encounter", () => { expect(plus40To50.length).toBe(1); }); - it("should have 1 Memory Mushroom, 5 Rogue Balls, and 2 Mints in rewards", async () => { + it("should have 1 Memory Mushroom, 5 Rogue Balls, and 3 Mints in rewards", async () => { await game.runToMysteryEncounter(MysteryEncounterType.WEIRD_DREAM, defaultParty); await runMysteryEncounterToEnd(game, 1); await game.phaseInterceptor.to(SelectModifierPhase, false); @@ -141,11 +143,12 @@ describe("Weird Dream - Mystery Encounter", () => { expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); const modifierSelectHandler = scene.ui.handlers.find(h => h instanceof ModifierSelectUiHandler) as ModifierSelectUiHandler; - expect(modifierSelectHandler.options.length).toEqual(4); + expect(modifierSelectHandler.options.length).toEqual(5); expect(modifierSelectHandler.options[0].modifierTypeOption.type.id).toEqual("MEMORY_MUSHROOM"); expect(modifierSelectHandler.options[1].modifierTypeOption.type.id).toEqual("ROGUE_BALL"); expect(modifierSelectHandler.options[2].modifierTypeOption.type.id).toEqual("MINT"); expect(modifierSelectHandler.options[3].modifierTypeOption.type.id).toEqual("MINT"); + expect(modifierSelectHandler.options[3].modifierTypeOption.type.id).toEqual("MINT"); }); it("should leave encounter without battle", async () => { @@ -158,7 +161,7 @@ describe("Weird Dream - Mystery Encounter", () => { }); }); - describe("Option 2 - Leave", () => { + describe("Option 2 - Battle Future Self", () => { it("should have the correct properties", () => { const option = WeirdDreamEncounter.options[1]; expect(option.optionMode).toBe(MysteryEncounterOptionMode.DEFAULT); @@ -174,17 +177,63 @@ describe("Weird Dream - Mystery Encounter", () => { }); }); - it("should reduce party levels by 12.5%", async () => { + it("should start a battle against the player's transformation team", async () => { + await game.runToMysteryEncounter(MysteryEncounterType.WEIRD_DREAM, defaultParty); + await runMysteryEncounterToEnd(game, 2, undefined, true); + + const enemyField = scene.getEnemyField(); + expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); + expect(enemyField.length).toBe(1); + expect(scene.getEnemyParty().length).toBe(scene.getParty().length); + }); + + it("should have 2 Rogue/2 Ultra/2 Great items in rewards", async () => { + await game.runToMysteryEncounter(MysteryEncounterType.WEIRD_DREAM, defaultParty); + await runMysteryEncounterToEnd(game, 2, undefined, true); + await skipBattleRunMysteryEncounterRewardsPhase(game); + await game.phaseInterceptor.to(SelectModifierPhase, false); + expect(scene.getCurrentPhase()?.constructor.name).toBe(SelectModifierPhase.name); + await game.phaseInterceptor.run(SelectModifierPhase); + + expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); + const modifierSelectHandler = scene.ui.handlers.find(h => h instanceof ModifierSelectUiHandler) as ModifierSelectUiHandler; + expect(modifierSelectHandler.options.length).toEqual(6); + expect(modifierSelectHandler.options[0].modifierTypeOption.type.tier - modifierSelectHandler.options[0].modifierTypeOption.upgradeCount).toEqual(ModifierTier.ROGUE); + expect(modifierSelectHandler.options[1].modifierTypeOption.type.tier - modifierSelectHandler.options[1].modifierTypeOption.upgradeCount).toEqual(ModifierTier.ROGUE); + expect(modifierSelectHandler.options[2].modifierTypeOption.type.tier - modifierSelectHandler.options[2].modifierTypeOption.upgradeCount).toEqual(ModifierTier.ULTRA); + expect(modifierSelectHandler.options[3].modifierTypeOption.type.tier - modifierSelectHandler.options[3].modifierTypeOption.upgradeCount).toEqual(ModifierTier.ULTRA); + expect(modifierSelectHandler.options[4].modifierTypeOption.type.tier - modifierSelectHandler.options[4].modifierTypeOption.upgradeCount).toEqual(ModifierTier.GREAT); + expect(modifierSelectHandler.options[5].modifierTypeOption.type.tier - modifierSelectHandler.options[5].modifierTypeOption.upgradeCount).toEqual(ModifierTier.GREAT); + }); + }); + + describe("Option 3 - Leave", () => { + it("should have the correct properties", () => { + const option = WeirdDreamEncounter.options[2]; + expect(option.optionMode).toBe(MysteryEncounterOptionMode.DEFAULT); + expect(option.dialogue).toBeDefined(); + expect(option.dialogue).toStrictEqual({ + buttonLabel: `${namespace}:option.3.label`, + buttonTooltip: `${namespace}:option.3.tooltip`, + selected: [ + { + text: `${namespace}:option.3.selected`, + }, + ], + }); + }); + + it("should reduce party levels by 10%", async () => { const leaveEncounterWithoutBattleSpy = vi.spyOn(EncounterPhaseUtils, "leaveEncounterWithoutBattle"); await game.runToMysteryEncounter(MysteryEncounterType.WEIRD_DREAM, defaultParty); const levelsPrior = scene.getParty().map(p => p.level); - await runMysteryEncounterToEnd(game, 2); + await runMysteryEncounterToEnd(game, 3); const levelsAfter = scene.getParty().map(p => p.level); for (let i = 0; i < levelsPrior.length; i++) { - expect(Math.max(Math.ceil(0.8875 * levelsPrior[i]), 1)).toBe(levelsAfter[i]); + expect(Math.max(Math.ceil(0.9 * levelsPrior[i]), 1)).toBe(levelsAfter[i]); expect(scene.getParty()[i].levelExp).toBe(0); } @@ -195,7 +244,7 @@ describe("Weird Dream - Mystery Encounter", () => { const leaveEncounterWithoutBattleSpy = vi.spyOn(EncounterPhaseUtils, "leaveEncounterWithoutBattle"); await game.runToMysteryEncounter(MysteryEncounterType.WEIRD_DREAM, defaultParty); - await runMysteryEncounterToEnd(game, 2); + await runMysteryEncounterToEnd(game, 3); expect(leaveEncounterWithoutBattleSpy).toBeCalled(); }); From a2419c4fc3d8556cc359edba4d7eb4761e7877a3 Mon Sep 17 00:00:00 2001 From: Opaque02 <66582645+Opaque02@users.noreply.github.com> Date: Thu, 24 Oct 2024 06:00:07 +1000 Subject: [PATCH 123/153] [Misc] Add admin for (un)linking 3rd party accounts (#4198) * Updated admin panel to allow the concept of unlinking accounts * Don't look too hard at this commit, nothing to see here * Admin stuff * Fixed linking and unlinking and updated menu options * Undid some changes and cleaned up some code * Updated some logic and added some comments * Updates to admin panel logic * Stupid promises everyone hates them and they deserver to die * Promise stuff still * Promises working thanks to Ydarissep on discord - pushing with debug code before it decides to stop working again * Removed debugging code * All discord functionality seems to be working here?? Not sure what happened but yay * Fixed up some bugs and code * Added registered date to the panel * Fixed and updated some minor error message related stuff * Minor changes * Fixed some minor bugs, made the save related errors have error codes, and added updated icons * Updated search field error * Missed a couple of things to push * Fixed linting and doc errors * Revert dev related code and clean up dev comments * Reverting utils * Updating front end to match back end from Pancakes' comments * make getFields and getInputFieldConfigs a single function of FormUiHandler * remove outdated doc * Apply suggestions from code review Moka review changes Co-authored-by: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com> * Added docs * eslint fixes * Fixed error not showing up in certain conditions --------- Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> Co-authored-by: MokaStitcher Co-authored-by: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com> Co-authored-by: innerthunder --- public/images/ui/legacy/link_icon.png | Bin 0 -> 209 bytes public/images/ui/legacy/unlink_icon.png | Bin 0 -> 219 bytes public/images/ui/link_icon.png | Bin 0 -> 209 bytes public/images/ui/unlink_icon.png | Bin 0 -> 219 bytes src/loading-scene.ts | 2 + src/ui/admin-ui-handler.ts | 357 +++++++++++++++++++++--- src/ui/form-modal-ui-handler.ts | 57 ++-- src/ui/login-form-ui-handler.ts | 25 +- src/ui/menu-ui-handler.ts | 44 ++- src/ui/modal-ui-handler.ts | 3 + src/ui/registration-form-ui-handler.ts | 14 +- src/ui/rename-form-ui-handler.ts | 10 +- src/ui/test-dialogue-ui-handler.ts | 13 +- 13 files changed, 437 insertions(+), 88 deletions(-) create mode 100644 public/images/ui/legacy/link_icon.png create mode 100644 public/images/ui/legacy/unlink_icon.png create mode 100644 public/images/ui/link_icon.png create mode 100644 public/images/ui/unlink_icon.png diff --git a/public/images/ui/legacy/link_icon.png b/public/images/ui/legacy/link_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..56081261b9c699571cd9faf1e242b708031a2188 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~(Ey(iS0F7S zBBGF@8~)z!6O!-hwX9tpn8k_Jk!mjw9*GyDgGrS;2x1BJppT^vIsrl$4>@*Pm% zaninU@BfKwmd1~MJyrHlcqDW3Lvre_D{FF2N-+OwVOYVqdCPK>IBtJ6t?$y}>T-NB yd;YT(r&d;#F$)^F-d(vS#eCYwSud6APOEbkF@Ah05PJ(~1%s!npUXO@geCwUuu3cd literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/unlink_icon.png b/public/images/ui/legacy/unlink_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f0da5f8e3eda4fdf27c6e07b11fffa17af715976 GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~p#Yx{S0JsU zsp;?U-__N%VZ(+;j~-2EH(3D`Wh)8t3ugEa0#%g{{sBc&JzX3_B&O!}ALKn?z`@LW zk*)tNn$K+b3IboFyt I=akR{02#wdng9R* literal 0 HcmV?d00001 diff --git a/public/images/ui/link_icon.png b/public/images/ui/link_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..56081261b9c699571cd9faf1e242b708031a2188 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~(Ey(iS0F7S zBBGF@8~)z!6O!-hwX9tpn8k_Jk!mjw9*GyDgGrS;2x1BJppT^vIsrl$4>@*Pm% zaninU@BfKwmd1~MJyrHlcqDW3Lvre_D{FF2N-+OwVOYVqdCPK>IBtJ6t?$y}>T-NB yd;YT(r&d;#F$)^F-d(vS#eCYwSud6APOEbkF@Ah05PJ(~1%s!npUXO@geCwUuu3cd literal 0 HcmV?d00001 diff --git a/public/images/ui/unlink_icon.png b/public/images/ui/unlink_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f0da5f8e3eda4fdf27c6e07b11fffa17af715976 GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~p#Yx{S0JsU zsp;?U-__N%VZ(+;j~-2EH(3D`Wh)8t3ugEa0#%g{{sBc&JzX3_B&O!}ALKn?z`@LW zk*)tNn$K+b3IboFyt I=akR{02#wdng9R* literal 0 HcmV?d00001 diff --git a/src/loading-scene.ts b/src/loading-scene.ts index 4f673fd2cfc..26936bcdaad 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -165,6 +165,8 @@ export class LoadingScene extends SceneBase { this.loadImage("discord", "ui"); this.loadImage("google", "ui"); this.loadImage("settings_icon", "ui"); + this.loadImage("link_icon", "ui"); + this.loadImage("unlink_icon", "ui"); this.loadImage("default_bg", "arenas"); // Load arena images diff --git a/src/ui/admin-ui-handler.ts b/src/ui/admin-ui-handler.ts index c73c02e66c2..6249e54d8c3 100644 --- a/src/ui/admin-ui-handler.ts +++ b/src/ui/admin-ui-handler.ts @@ -2,37 +2,83 @@ import BattleScene from "#app/battle-scene"; import { ModalConfig } from "./modal-ui-handler"; import { Mode } from "./ui"; import * as Utils from "../utils"; -import { FormModalUiHandler } from "./form-modal-ui-handler"; +import { FormModalUiHandler, InputFieldConfig } from "./form-modal-ui-handler"; import { Button } from "#app/enums/buttons"; +import { TextStyle } from "./text"; export default class AdminUiHandler extends FormModalUiHandler { + private adminMode: AdminMode; + private adminResult: AdminSearchInfo; + private config: ModalConfig; + + private readonly buttonGap = 10; + // http response from the server when a username isn't found in the server + private readonly httpUserNotFoundErrorCode: number = 404; + private readonly ERR_REQUIRED_FIELD = (field: string) => { + if (field === "username") { + return `${Utils.formatText(field)} is required`; + } else { + return `${Utils.formatText(field)} Id is required`; + } + }; + // returns a string saying whether a username has been successfully linked/unlinked to discord/google + private readonly SUCCESS_SERVICE_MODE = (service: string, mode: string) => { + return `Username and ${service} successfully ${mode.toLowerCase()}ed`; + }; + private readonly ERR_USERNAME_NOT_FOUND: string = "Username not found!"; + private readonly ERR_GENERIC_ERROR: string = "There was an error"; + constructor(scene: BattleScene, mode: Mode | null = null) { super(scene, mode); } - setup(): void { - super.setup(); - } - - getModalTitle(config?: ModalConfig): string { + override getModalTitle(): string { return "Admin panel"; } - getFields(config?: ModalConfig): string[] { - return [ "Username", "Discord ID" ]; + override getWidth(): number { + return this.adminMode === AdminMode.ADMIN ? 180 : 160; } - getWidth(config?: ModalConfig): number { - return 160; + override getMargin(): [number, number, number, number] { + return [ 0, 0, 0, 0 ]; } - getMargin(config?: ModalConfig): [number, number, number, number] { - return [ 0, 0, 48, 0 ]; + override getButtonLabels(): string[] { + switch (this.adminMode) { + case AdminMode.LINK: + return [ "Link Account", "Cancel" ]; + case AdminMode.SEARCH: + return [ "Find account", "Cancel" ]; + case AdminMode.ADMIN: + return [ "Back to search", "Cancel" ]; + default: + return [ "Activate ADMIN", "Cancel" ]; + } } - getButtonLabels(config?: ModalConfig): string[] { - return [ "Link account", "Cancel" ]; + override getInputFieldConfigs(): InputFieldConfig[] { + const inputFieldConfigs: InputFieldConfig[] = []; + switch (this.adminMode) { + case AdminMode.LINK: + inputFieldConfigs.push( { label: "Username" }); + inputFieldConfigs.push( { label: "Discord ID" }); + break; + case AdminMode.SEARCH: + inputFieldConfigs.push( { label: "Username" }); + break; + case AdminMode.ADMIN: + const adminResult = this.adminResult ?? { username: "", discordId: "", googleId: "", lastLoggedIn: "", registered: "" }; + // Discord and Google ID fields that are not empty get locked, other fields are all locked + inputFieldConfigs.push( { label: "Username", isReadOnly: true }); + inputFieldConfigs.push( { label: "Discord ID", isReadOnly: adminResult.discordId !== "" }); + inputFieldConfigs.push( { label: "Google ID", isReadOnly: adminResult.googleId !== "" }); + inputFieldConfigs.push( { label: "Last played", isReadOnly: true }); + inputFieldConfigs.push( { label: "Registered", isReadOnly: true }); + break; + } + return inputFieldConfigs; } processInput(button: Button): boolean { @@ -45,44 +91,281 @@ export default class AdminUiHandler extends FormModalUiHandler { } show(args: any[]): boolean { + this.config = args[0] as ModalConfig; // config + this.adminMode = args[1] as AdminMode; // admin mode + this.adminResult = args[2] ?? { username: "", discordId: "", googleId: "", lastLoggedIn: "", registered: "" }; // admin result, if any + const isMessageError = args[3]; // is the message shown a success or error + + const fields = this.getInputFieldConfigs(); + const hasTitle = !!this.getModalTitle(); + + this.updateFields(fields, hasTitle); + this.updateContainer(this.config); + + const labels = this.getButtonLabels(); + for (let i = 0; i < labels.length; i++) { + this.buttonLabels[i].setText(labels[i]); // sets the label text + } + + this.errorMessage.setPosition(10, (hasTitle ? 31 : 5) + 20 * (fields.length - 1) + 16 + this.getButtonTopMargin()); // sets the position of the message dynamically + if (isMessageError) { + this.errorMessage.setColor(this.getTextColor(TextStyle.SUMMARY_PINK)); + this.errorMessage.setShadowColor(this.getTextColor(TextStyle.SUMMARY_PINK, true)); + } else { + this.errorMessage.setColor(this.getTextColor(TextStyle.SUMMARY_GREEN)); + this.errorMessage.setShadowColor(this.getTextColor(TextStyle.SUMMARY_GREEN, true)); + } + if (super.show(args)) { - const config = args[0] as ModalConfig; + this.populateFields(this.adminMode, this.adminResult); const originalSubmitAction = this.submitAction; this.submitAction = (_) => { this.submitAction = originalSubmitAction; + const adminSearchResult: AdminSearchInfo = this.convertInputsToAdmin(); // this converts the input texts into a single object for use later + const validFields = this.areFieldsValid(this.adminMode); + if (validFields.error) { + this.scene.ui.setMode(Mode.LOADING, { buttonActions: []}); // this is here to force a loading screen to allow the admin tool to reopen again if there's an error + return this.showMessage(validFields.errorMessage ?? "", adminSearchResult, true); + } this.scene.ui.setMode(Mode.LOADING, { buttonActions: []}); - const onFail = error => { - this.scene.ui.setMode(Mode.ADMIN, Object.assign(config, { errorMessage: error?.trim() })); - this.scene.ui.playError(); - }; - if (!this.inputs[0].text) { - return onFail("Username is required"); + if (this.adminMode === AdminMode.LINK) { + this.adminLinkUnlink(adminSearchResult, "discord", "Link") // calls server to link discord + .then(response => { + if (response.error) { + return this.showMessage(response.errorType, adminSearchResult, true); // error or some kind + } else { + return this.showMessage(this.SUCCESS_SERVICE_MODE("discord", "link"), adminSearchResult, false); // success + } + }); + } else if (this.adminMode === AdminMode.SEARCH) { + this.adminSearch(adminSearchResult) // admin search for username + .then(response => { + if (response.error) { + return this.showMessage(response.errorType, adminSearchResult, true); // failure + } + this.updateAdminPanelInfo(response.adminSearchResult ?? adminSearchResult); // success + }); + } else if (this.adminMode === AdminMode.ADMIN) { + this.updateAdminPanelInfo(adminSearchResult, AdminMode.SEARCH); } - if (!this.inputs[1].text) { - return onFail("Discord Id is required"); - } - Utils.apiPost("admin/account/discord-link", `username=${encodeURIComponent(this.inputs[0].text)}&discordId=${encodeURIComponent(this.inputs[1].text)}`, "application/x-www-form-urlencoded", true) - .then(response => { - if (!response.ok) { - console.error(response); - } - this.inputs[0].setText(""); - this.inputs[1].setText(""); - this.scene.ui.revertMode(); - }) - .catch((err) => { - console.error(err); - this.scene.ui.revertMode(); - }); return false; }; return true; } return false; + } + showMessage(message: string, adminResult: AdminSearchInfo, isError: boolean) { + this.scene.ui.setMode(Mode.ADMIN, Object.assign(this.config, { errorMessage: message?.trim() }), this.adminMode, adminResult, isError); + if (isError) { + this.scene.ui.playError(); + } else { + this.scene.ui.playSelect(); + } + } + + /** + * This is used to update the fields' text when loading in a new admin ui handler. It uses the {@linkcode adminResult} + * to update the input text based on the {@linkcode adminMode}. For a linking adminMode, it sets the username and discord. + * For a search adminMode, it sets the username. For an admin adminMode, it sets all the info from adminResult in the + * appropriate text boxes, and also sets the link/unlink icons for discord/google depending on the result + */ + private populateFields(adminMode: AdminMode, adminResult: AdminSearchInfo) { + switch (adminMode) { + case AdminMode.LINK: + this.inputs[0].setText(adminResult.username); + this.inputs[1].setText(adminResult.discordId); + break; + case AdminMode.SEARCH: + this.inputs[0].setText(adminResult.username); + break; + case AdminMode.ADMIN: + Object.keys(adminResult).forEach((aR, i) => { + this.inputs[i].setText(adminResult[aR]); + if (aR === "discordId" || aR === "googleId") { // this is here to add the icons for linking/unlinking of google/discord IDs + const nineSlice = this.inputContainers[i].list.find(iC => iC.type === "NineSlice"); + const img = this.scene.add.image(this.inputContainers[i].x + nineSlice!.width + this.buttonGap, this.inputContainers[i].y + (Math.floor(nineSlice!.height / 2)), adminResult[aR] === "" ? "link_icon" : "unlink_icon"); + img.setName(`adminBtn_${aR}`); + img.setOrigin(0.5, 0.5); + img.setInteractive(); + img.on("pointerdown", () => { + const service = aR.toLowerCase().replace("id", ""); // this takes our key (discordId or googleId) and removes the "Id" at the end to make it more url friendly + const mode = adminResult[aR] === "" ? "Link" : "Unlink"; // this figures out if we're linking or unlinking a service + const validFields = this.areFieldsValid(this.adminMode, service); + if (validFields.error) { + this.scene.ui.setMode(Mode.LOADING, { buttonActions: []}); // this is here to force a loading screen to allow the admin tool to reopen again if there's an error + return this.showMessage(validFields.errorMessage ?? "", adminResult, true); + } + this.adminLinkUnlink(this.convertInputsToAdmin(), service, mode).then(response => { // attempts to link/unlink depending on the service + if (response.error) { + this.scene.ui.setMode(Mode.LOADING, { buttonActions: []}); + return this.showMessage(response.errorType, adminResult, true); // fail + } else { // success, reload panel with new results + this.scene.ui.setMode(Mode.LOADING, { buttonActions: []}); + this.adminSearch(adminResult) + .then(response => { + if (response.error) { + return this.showMessage(response.errorType, adminResult, true); + } + return this.showMessage(this.SUCCESS_SERVICE_MODE(service, mode), response.adminSearchResult ?? adminResult, false); + }); + } + }); + }); + this.addInteractionHoverEffect(img); + this.modalContainer.add(img); + } + }); + break; + } + } + + private areFieldsValid(adminMode: AdminMode, service?: string): { error: boolean; errorMessage?: string; } { + switch (adminMode) { + case AdminMode.LINK: + if (!this.inputs[0].text) { // username missing from link panel + return { + error: true, + errorMessage: this.ERR_REQUIRED_FIELD("username") + }; + } + if (!this.inputs[1].text) { // discordId missing from linking panel + return { + error: true, + errorMessage: this.ERR_REQUIRED_FIELD("discord") + }; + } + break; + case AdminMode.SEARCH: + if (!this.inputs[0].text) { // username missing from search panel + return { + error: true, + errorMessage: this.ERR_REQUIRED_FIELD("username") + }; + } + break; + case AdminMode.ADMIN: + if (!this.inputs[1].text && service === "discord") { // discordId missing from admin panel + return { + error: true, + errorMessage: this.ERR_REQUIRED_FIELD(service) + }; + } + if (!this.inputs[2].text && service === "google") { // googleId missing from admin panel + return { + error: true, + errorMessage: this.ERR_REQUIRED_FIELD(service) + }; + } + break; + } + return { + error: false + }; + } + + private convertInputsToAdmin(): AdminSearchInfo { + return { + username: this.inputs[0]?.node ? this.inputs[0].text : "", + discordId: this.inputs[1]?.node ? this.inputs[1]?.text : "", + googleId: this.inputs[2]?.node ? this.inputs[2]?.text : "", + lastLoggedIn: this.inputs[3]?.node ? this.inputs[3]?.text : "", + registered: this.inputs[4]?.node ? this.inputs[4]?.text : "" + }; + } + + private async adminSearch(adminSearchResult: AdminSearchInfo) { + try { + const adminInfo = await Utils.apiFetch(`admin/account/adminSearch?username=${encodeURIComponent(adminSearchResult.username)}`, true); + if (!adminInfo.ok) { // error - if adminInfo.status === this.httpUserNotFoundErrorCode that means the username can't be found in the db + return { adminSearchResult: adminSearchResult, error: true, errorType: adminInfo.status === this.httpUserNotFoundErrorCode ? this.ERR_USERNAME_NOT_FOUND : this.ERR_GENERIC_ERROR }; + } else { // success + const adminInfoJson: AdminSearchInfo = await adminInfo.json(); + return { adminSearchResult: adminInfoJson, error: false }; + } + } catch (err) { + console.error(err); + return { error: true, errorType: err }; + } + } + + private async adminLinkUnlink(adminSearchResult: AdminSearchInfo, service: string, mode: string) { + try { + const response = await Utils.apiPost(`admin/account/${service}${mode}`, `username=${encodeURIComponent(adminSearchResult.username)}&${service}Id=${encodeURIComponent(service === "discord" ? adminSearchResult.discordId : adminSearchResult.googleId)}`, "application/x-www-form-urlencoded", true); + if (!response.ok) { // error - if response.status === this.httpUserNotFoundErrorCode that means the username can't be found in the db + return { adminSearchResult: adminSearchResult, error: true, errorType: response.status === this.httpUserNotFoundErrorCode ? this.ERR_USERNAME_NOT_FOUND : this.ERR_GENERIC_ERROR }; + } else { // success! + return { adminSearchResult: adminSearchResult, error: false }; + } + } catch (err) { + console.error(err); + return { error: true, errorType: err }; + } + } + + private updateAdminPanelInfo(adminSearchResult: AdminSearchInfo, mode?: AdminMode) { + mode = mode ?? AdminMode.ADMIN; + this.scene.ui.setMode(Mode.ADMIN, { + buttonActions: [ + // we double revert here and below to go back 2 layers of menus + () => { + this.scene.ui.revertMode(); + this.scene.ui.revertMode(); + }, + () => { + this.scene.ui.revertMode(); + this.scene.ui.revertMode(); + } + ] + }, mode, adminSearchResult); } clear(): void { super.clear(); + + // this is used to remove the existing fields on the admin panel so they can be updated + + const itemsToRemove: string[] = [ "formLabel", "adminBtn" ]; // this is the start of the names for each element we want to remove + const removeArray: any[] = []; + const mC = this.modalContainer.list; + for (let i = mC.length - 1; i >= 0; i--) { + /* This code looks for a few things before destroying the specific field; first it looks to see if the name of the element is %like% the itemsToRemove labels + * this means that anything with, for example, "formLabel", will be true. + * It then also checks for any containers that are within this.modalContainer, and checks if any of its child elements are of type rexInputText + * and if either of these conditions are met, the element is destroyed. + */ + if (itemsToRemove.some(iTR => mC[i].name.includes(iTR)) || (mC[i].type === "Container" && (mC[i] as Phaser.GameObjects.Container).list.find(m => m.type === "rexInputText"))) { + removeArray.push(mC[i]); + } + } + + while (removeArray.length > 0) { + this.modalContainer.remove(removeArray.pop(), true); + } } } + +export enum AdminMode { + LINK, + SEARCH, + ADMIN +} + +export function getAdminModeName(adminMode: AdminMode): string { + switch (adminMode) { + case AdminMode.LINK: + return "Link"; + case AdminMode.SEARCH: + return "Search"; + default: + return ""; + } +} + +interface AdminSearchInfo { + username: string; + discordId: string; + googleId: string; + lastLoggedIn: string; + registered: string; +} diff --git a/src/ui/form-modal-ui-handler.ts b/src/ui/form-modal-ui-handler.ts index 331154263ad..65ee9f2db10 100644 --- a/src/ui/form-modal-ui-handler.ts +++ b/src/ui/form-modal-ui-handler.ts @@ -5,7 +5,6 @@ import { TextStyle, addTextInputObject, addTextObject } from "./text"; import { WindowVariant, addWindow } from "./ui-theme"; import InputText from "phaser3-rex-plugins/plugins/inputtext"; import * as Utils from "../utils"; -import i18next from "i18next"; import { Button } from "#enums/buttons"; export interface FormModalConfig extends ModalConfig { @@ -19,6 +18,7 @@ export abstract class FormModalUiHandler extends ModalUiHandler { protected errorMessage: Phaser.GameObjects.Text; protected submitAction: Function | null; protected tween: Phaser.Tweens.Tween; + protected formLabels: Phaser.GameObjects.Text[]; constructor(scene: BattleScene, mode: Mode | null = null) { super(scene, mode); @@ -26,12 +26,18 @@ export abstract class FormModalUiHandler extends ModalUiHandler { this.editing = false; this.inputContainers = []; this.inputs = []; + this.formLabels = []; } - abstract getFields(): string[]; + /** + * Get configuration for all fields that should be part of the modal + * Gets used by {@linkcode updateFields} to add the proper text inputs and labels to the view + * @returns array of {@linkcode InputFieldConfig} + */ + abstract getInputFieldConfigs(): InputFieldConfig[]; getHeight(config?: ModalConfig): number { - return 20 * this.getFields().length + (this.getModalTitle() ? 26 : 0) + ((config as FormModalConfig)?.errorMessage ? 12 : 0) + this.getButtonTopMargin() + 28; + return 20 * this.getInputFieldConfigs().length + (this.getModalTitle() ? 26 : 0) + ((config as FormModalConfig)?.errorMessage ? 12 : 0) + this.getButtonTopMargin() + 28; } getReadableErrorMessage(error: string): string { @@ -45,37 +51,50 @@ export abstract class FormModalUiHandler extends ModalUiHandler { setup(): void { super.setup(); - const fields = this.getFields(); + const config = this.getInputFieldConfigs(); const hasTitle = !!this.getModalTitle(); - fields.forEach((field, f) => { - const label = addTextObject(this.scene, 10, (hasTitle ? 31 : 5) + 20 * f, field, TextStyle.TOOLTIP_CONTENT); + if (config.length >= 1) { + this.updateFields(config, hasTitle); + } - this.modalContainer.add(label); + this.errorMessage = addTextObject(this.scene, 10, (hasTitle ? 31 : 5) + 20 * (config.length - 1) + 16 + this.getButtonTopMargin(), "", TextStyle.TOOLTIP_CONTENT); + this.errorMessage.setColor(this.getTextColor(TextStyle.SUMMARY_PINK)); + this.errorMessage.setShadowColor(this.getTextColor(TextStyle.SUMMARY_PINK, true)); + this.errorMessage.setVisible(false); + this.modalContainer.add(this.errorMessage); + } + + protected updateFields(fieldsConfig: InputFieldConfig[], hasTitle: boolean) { + this.inputContainers = []; + this.inputs = []; + this.formLabels = []; + fieldsConfig.forEach((config, f) => { + const label = addTextObject(this.scene, 10, (hasTitle ? 31 : 5) + 20 * f, config.label, TextStyle.TOOLTIP_CONTENT); + label.name = "formLabel" + f; + + this.formLabels.push(label); + this.modalContainer.add(this.formLabels[this.formLabels.length - 1]); const inputContainer = this.scene.add.container(70, (hasTitle ? 28 : 2) + 20 * f); inputContainer.setVisible(false); const inputBg = addWindow(this.scene, 0, 0, 80, 16, false, false, 0, 0, WindowVariant.XTHIN); - const isPassword = field.includes(i18next.t("menu:password")) || field.includes(i18next.t("menu:confirmPassword")); - const input = addTextInputObject(this.scene, 4, -2, 440, 116, TextStyle.TOOLTIP_CONTENT, { type: isPassword ? "password" : "text", maxLength: isPassword ? 64 : 20 }); + const isPassword = config?.isPassword; + const isReadOnly = config?.isReadOnly; + const input = addTextInputObject(this.scene, 4, -2, 440, 116, TextStyle.TOOLTIP_CONTENT, { type: isPassword ? "password" : "text", maxLength: isPassword ? 64 : 20, readOnly: isReadOnly }); input.setOrigin(0, 0); inputContainer.add(inputBg); inputContainer.add(input); - this.modalContainer.add(inputContainer); this.inputContainers.push(inputContainer); + this.modalContainer.add(inputContainer); + this.inputs.push(input); }); - - this.errorMessage = addTextObject(this.scene, 10, (hasTitle ? 31 : 5) + 20 * (fields.length - 1) + 16 + this.getButtonTopMargin(), "", TextStyle.TOOLTIP_CONTENT); - this.errorMessage.setColor(this.getTextColor(TextStyle.SUMMARY_PINK)); - this.errorMessage.setShadowColor(this.getTextColor(TextStyle.SUMMARY_PINK, true)); - this.errorMessage.setVisible(false); - this.modalContainer.add(this.errorMessage); } show(args: any[]): boolean { @@ -149,3 +168,9 @@ export abstract class FormModalUiHandler extends ModalUiHandler { } } } + +export interface InputFieldConfig { + label: string, + isPassword?: boolean, + isReadOnly?: boolean +} diff --git a/src/ui/login-form-ui-handler.ts b/src/ui/login-form-ui-handler.ts index 8be432ad6c1..26a2a225ec6 100644 --- a/src/ui/login-form-ui-handler.ts +++ b/src/ui/login-form-ui-handler.ts @@ -1,4 +1,4 @@ -import { FormModalUiHandler } from "./form-modal-ui-handler"; +import { FormModalUiHandler, InputFieldConfig } from "./form-modal-ui-handler"; import { ModalConfig } from "./modal-ui-handler"; import * as Utils from "../utils"; import { Mode } from "./ui"; @@ -17,9 +17,9 @@ interface BuildInteractableImageOpts { export default class LoginFormUiHandler extends FormModalUiHandler { private readonly ERR_USERNAME: string = "invalid username"; - private readonly ERR_PASSWORD: string = "invalid password"; - private readonly ERR_ACCOUNT_EXIST: string = "account doesn't exist"; - private readonly ERR_PASSWORD_MATCH: string = "password doesn't match"; + private readonly ERR_PASSWORD: string = "invalid password"; + private readonly ERR_ACCOUNT_EXIST: string = "account doesn't exist"; + private readonly ERR_PASSWORD_MATCH: string = "password doesn't match"; private readonly ERR_NO_SAVES: string = "No save files found"; private readonly ERR_TOO_MANY_SAVES: string = "Too many save files found"; @@ -75,10 +75,6 @@ export default class LoginFormUiHandler extends FormModalUiHandler { return i18next.t("menu:login"); } - override getFields(_config?: ModalConfig): string[] { - return [ i18next.t("menu:username"), i18next.t("menu:password") ]; - } - override getWidth(_config?: ModalConfig): number { return 160; } @@ -106,14 +102,21 @@ export default class LoginFormUiHandler extends FormModalUiHandler { case this.ERR_PASSWORD_MATCH: return i18next.t("menu:unmatchingPassword"); case this.ERR_NO_SAVES: - return i18next.t("menu:noSaves"); + return "P01: " + i18next.t("menu:noSaves"); case this.ERR_TOO_MANY_SAVES: - return i18next.t("menu:tooManySaves"); + return "P02: " + i18next.t("menu:tooManySaves"); } return super.getReadableErrorMessage(error); } + override getInputFieldConfigs(): InputFieldConfig[] { + const inputFieldConfigs: InputFieldConfig[] = []; + inputFieldConfigs.push({ label: i18next.t("menu:username") }); + inputFieldConfigs.push({ label: i18next.t("menu:password"), isPassword: true }); + return inputFieldConfigs; + } + override show(args: any[]): boolean { if (super.show(args)) { @@ -164,7 +167,7 @@ export default class LoginFormUiHandler extends FormModalUiHandler { [ this.discordImage, this.googleImage, this.usernameInfoImage ].forEach((img) => img.off("pointerdown")); } - private processExternalProvider(config: ModalConfig) : void { + private processExternalProvider(config: ModalConfig): void { this.externalPartyTitle.setText(i18next.t("menu:orUse") ?? ""); this.externalPartyTitle.setX(20 + this.externalPartyTitle.text.length); this.externalPartyTitle.setVisible(true); diff --git a/src/ui/menu-ui-handler.ts b/src/ui/menu-ui-handler.ts index 0f4c2d2f53e..301d54daa3a 100644 --- a/src/ui/menu-ui-handler.ts +++ b/src/ui/menu-ui-handler.ts @@ -13,6 +13,7 @@ import { GameDataType } from "#enums/game-data-type"; import BgmBar from "#app/ui/bgm-bar"; import AwaitableUiHandler from "./awaitable-ui-handler"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; +import { AdminMode, getAdminModeName } from "./admin-ui-handler"; enum MenuOptions { GAME_SETTINGS, @@ -387,16 +388,41 @@ export default class MenuUiHandler extends MessageUiHandler { communityOptions.push({ label: "Admin", handler: () => { - ui.playSelect(); - ui.setOverlayMode(Mode.ADMIN, { - buttonActions: [ - () => { - ui.revertMode(); - }, - () => { - ui.revertMode(); + + const skippedAdminModes: AdminMode[] = [ AdminMode.ADMIN ]; // this is here so that we can skip the menu populating enums that aren't meant for the menu, such as the AdminMode.ADMIN + const options: OptionSelectItem[] = []; + Object.values(AdminMode).filter((v) => !isNaN(Number(v)) && !skippedAdminModes.includes(v as AdminMode)).forEach((mode) => { // this gets all the enums in a way we can use + options.push({ + label: getAdminModeName(mode as AdminMode), + handler: () => { + ui.playSelect(); + ui.setOverlayMode(Mode.ADMIN, { + buttonActions: [ + // we double revert here and below to go back 2 layers of menus + () => { + ui.revertMode(); + ui.revertMode(); + }, + () => { + ui.revertMode(); + ui.revertMode(); + } + ] + }, mode); // mode is our AdminMode enum + return true; } - ] + }); + }); + options.push({ + label: "Cancel", + handler: () => { + ui.revertMode(); + return true; + } + }); + this.scene.ui.setOverlayMode(Mode.OPTION_SELECT, { + options: options, + delay: 0 }); return true; }, diff --git a/src/ui/modal-ui-handler.ts b/src/ui/modal-ui-handler.ts index 60204f18c4a..79f1e8afeed 100644 --- a/src/ui/modal-ui-handler.ts +++ b/src/ui/modal-ui-handler.ts @@ -15,12 +15,14 @@ export abstract class ModalUiHandler extends UiHandler { protected titleText: Phaser.GameObjects.Text; protected buttonContainers: Phaser.GameObjects.Container[]; protected buttonBgs: Phaser.GameObjects.NineSlice[]; + protected buttonLabels: Phaser.GameObjects.Text[]; constructor(scene: BattleScene, mode: Mode | null = null) { super(scene, mode); this.buttonContainers = []; this.buttonBgs = []; + this.buttonLabels = []; } abstract getModalTitle(config?: ModalConfig): string; @@ -75,6 +77,7 @@ export abstract class ModalUiHandler extends UiHandler { const buttonContainer = this.scene.add.container(0, buttonTopMargin); + this.buttonLabels.push(buttonLabel); this.buttonBgs.push(buttonBg); this.buttonContainers.push(buttonContainer); diff --git a/src/ui/registration-form-ui-handler.ts b/src/ui/registration-form-ui-handler.ts index 2f8486bcdb3..fc9eb85cbaf 100644 --- a/src/ui/registration-form-ui-handler.ts +++ b/src/ui/registration-form-ui-handler.ts @@ -1,4 +1,4 @@ -import { FormModalUiHandler } from "./form-modal-ui-handler"; +import { FormModalUiHandler, InputFieldConfig } from "./form-modal-ui-handler"; import { ModalConfig } from "./modal-ui-handler"; import * as Utils from "../utils"; import { Mode } from "./ui"; @@ -24,10 +24,6 @@ export default class RegistrationFormUiHandler extends FormModalUiHandler { return i18next.t("menu:register"); } - getFields(config?: ModalConfig): string[] { - return [ i18next.t("menu:username"), i18next.t("menu:password"), i18next.t("menu:confirmPassword") ]; - } - getWidth(config?: ModalConfig): number { return 160; } @@ -61,6 +57,14 @@ export default class RegistrationFormUiHandler extends FormModalUiHandler { return super.getReadableErrorMessage(error); } + override getInputFieldConfigs(): InputFieldConfig[] { + const inputFieldConfigs: InputFieldConfig[] = []; + inputFieldConfigs.push({ label: i18next.t("menu:username") }); + inputFieldConfigs.push({ label: i18next.t("menu:password"), isPassword: true }); + inputFieldConfigs.push({ label: i18next.t("menu:confirmPassword"), isPassword: true }); + return inputFieldConfigs; + } + setup(): void { super.setup(); diff --git a/src/ui/rename-form-ui-handler.ts b/src/ui/rename-form-ui-handler.ts index 078177cafb1..6e4c4c6809d 100644 --- a/src/ui/rename-form-ui-handler.ts +++ b/src/ui/rename-form-ui-handler.ts @@ -1,4 +1,4 @@ -import { FormModalUiHandler } from "./form-modal-ui-handler"; +import { FormModalUiHandler, InputFieldConfig } from "./form-modal-ui-handler"; import { ModalConfig } from "./modal-ui-handler"; import i18next from "i18next"; import { PlayerPokemon } from "#app/field/pokemon"; @@ -8,10 +8,6 @@ export default class RenameFormUiHandler extends FormModalUiHandler { return i18next.t("menu:renamePokemon"); } - getFields(config?: ModalConfig): string[] { - return [ i18next.t("menu:nickname") ]; - } - getWidth(config?: ModalConfig): number { return 160; } @@ -33,6 +29,10 @@ export default class RenameFormUiHandler extends FormModalUiHandler { return super.getReadableErrorMessage(error); } + override getInputFieldConfigs(): InputFieldConfig[] { + return [{ label: i18next.t("menu:nickname") }]; + } + show(args: any[]): boolean { if (super.show(args)) { const config = args[0] as ModalConfig; diff --git a/src/ui/test-dialogue-ui-handler.ts b/src/ui/test-dialogue-ui-handler.ts index 34fb80ecc89..bf0e7f6723f 100644 --- a/src/ui/test-dialogue-ui-handler.ts +++ b/src/ui/test-dialogue-ui-handler.ts @@ -1,4 +1,4 @@ -import { FormModalUiHandler } from "./form-modal-ui-handler"; +import { FormModalUiHandler, InputFieldConfig } from "./form-modal-ui-handler"; import { ModalConfig } from "./modal-ui-handler"; import i18next from "i18next"; import { PlayerPokemon } from "#app/field/pokemon"; @@ -43,10 +43,6 @@ export default class TestDialogueUiHandler extends FormModalUiHandler { return "Test Dialogue"; } - getFields(config?: ModalConfig): string[] { - return [ "Dialogue" ]; - } - getWidth(config?: ModalConfig): number { return 300; } @@ -68,8 +64,15 @@ export default class TestDialogueUiHandler extends FormModalUiHandler { return super.getReadableErrorMessage(error); } + override getInputFieldConfigs(): InputFieldConfig[] { + return [{ label: "Dialogue" }]; + } + show(args: any[]): boolean { const ui = this.getUi(); + const hasTitle = !!this.getModalTitle(); + this.updateFields(this.getInputFieldConfigs(), hasTitle); + this.updateContainer(args[0] as ModalConfig); const input = this.inputs[0]; input.setMaxLength(255); From 414e0a5447dfe1ef119291a57a1fc53cc45ec29b Mon Sep 17 00:00:00 2001 From: innerthunder <168692175+innerthunder@users.noreply.github.com> Date: Wed, 23 Oct 2024 23:17:55 -0700 Subject: [PATCH 124/153] [Balance] Change Tyrogue to move-based evolutions (#4694) --- src/data/balance/pokemon-evolutions.ts | 19 +++++++++++++++---- src/data/balance/pokemon-level-moves.ts | 9 +++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/data/balance/pokemon-evolutions.ts b/src/data/balance/pokemon-evolutions.ts index 7d0d86fadbf..4a6e44e0d51 100644 --- a/src/data/balance/pokemon-evolutions.ts +++ b/src/data/balance/pokemon-evolutions.ts @@ -1,7 +1,6 @@ import { Gender } from "#app/data/gender"; import { PokeballType } from "#app/data/pokeball"; import Pokemon from "#app/field/pokemon"; -import { Stat } from "#enums/stat"; import { Type } from "#app/data/type"; import * as Utils from "#app/utils"; import { WeatherType } from "#app/data/weather"; @@ -271,9 +270,21 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.MAROWAK, 28, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY)) ], [Species.TYROGUE]: [ - new SpeciesEvolution(Species.HITMONLEE, 20, null, new SpeciesEvolutionCondition(p => p.stats[Stat.ATK] > p.stats[Stat.DEF])), - new SpeciesEvolution(Species.HITMONCHAN, 20, null, new SpeciesEvolutionCondition(p => p.stats[Stat.ATK] < p.stats[Stat.DEF])), - new SpeciesEvolution(Species.HITMONTOP, 20, null, new SpeciesEvolutionCondition(p => p.stats[Stat.ATK] === p.stats[Stat.DEF])) + /** + * Custom: Evolves into Hitmonlee, Hitmonchan or Hitmontop at level 20 + * if it knows Low Sweep, Mach Punch, or Rapid Spin, respectively. + * If Tyrogue knows multiple of these moves, its evolution is based on + * the first qualifying move in its moveset. + */ + new SpeciesEvolution(Species.HITMONLEE, 20, null, new SpeciesEvolutionCondition(p => + p.getMoveset(true).find(move => move && [ Moves.LOW_SWEEP, Moves.MACH_PUNCH, Moves.RAPID_SPIN ].includes(move?.moveId))?.moveId === Moves.LOW_SWEEP + )), + new SpeciesEvolution(Species.HITMONCHAN, 20, null, new SpeciesEvolutionCondition(p => + p.getMoveset(true).find(move => move && [ Moves.LOW_SWEEP, Moves.MACH_PUNCH, Moves.RAPID_SPIN ].includes(move?.moveId))?.moveId === Moves.MACH_PUNCH + )), + new SpeciesEvolution(Species.HITMONTOP, 20, null, new SpeciesEvolutionCondition(p => + p.getMoveset(true).find(move => move && [ Moves.LOW_SWEEP, Moves.MACH_PUNCH, Moves.RAPID_SPIN ].includes(move?.moveId))?.moveId === Moves.RAPID_SPIN + )), ], [Species.KOFFING]: [ new SpeciesEvolution(Species.GALAR_WEEZING, 35, null, new SpeciesEvolutionCondition(p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT)), diff --git a/src/data/balance/pokemon-level-moves.ts b/src/data/balance/pokemon-level-moves.ts index 53f547c4504..71d98fb4fc2 100644 --- a/src/data/balance/pokemon-level-moves.ts +++ b/src/data/balance/pokemon-level-moves.ts @@ -1835,6 +1835,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.LOW_SWEEP ], [ 1, Moves.JUMP_KICK ], [ 1, Moves.ROLLING_KICK ], + [ 1, Moves.MACH_PUNCH ], // Previous Stage Move, Custom + [ 1, Moves.RAPID_SPIN ], // Previous Stage Move, Custom [ 4, Moves.DOUBLE_KICK ], [ 8, Moves.LOW_KICK ], [ 12, Moves.ENDURE ], @@ -1857,6 +1859,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.FEINT ], [ 1, Moves.PURSUIT ], [ 1, Moves.COMET_PUNCH ], + [ 1, Moves.LOW_SWEEP ], // Previous Stage Move, Custom + [ 1, Moves.RAPID_SPIN ], // Previous Stage Move, Custom [ 4, Moves.MACH_PUNCH ], [ 8, Moves.VACUUM_WAVE ], [ 12, Moves.DETECT ], @@ -4148,6 +4152,9 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.FOCUS_ENERGY ], [ 1, Moves.FAKE_OUT ], [ 1, Moves.HELPING_HAND ], + [ 10, Moves.LOW_SWEEP ], // Custom + [ 10, Moves.MACH_PUNCH ], // Custom + [ 10, Moves.RAPID_SPIN ], // Custom ], [Species.HITMONTOP]: [ [ EVOLVE_MOVE, Moves.TRIPLE_KICK ], @@ -4159,6 +4166,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.FEINT ], [ 1, Moves.PURSUIT ], [ 1, Moves.ROLLING_KICK ], + [ 1, Moves.LOW_SWEEP ], // Previous Stage Move, Custom + [ 1, Moves.MACH_PUNCH ], // Previous Stage Move, Custom [ 4, Moves.QUICK_ATTACK ], [ 8, Moves.GYRO_BALL ], [ 12, Moves.DETECT ], From a50763cd897b431b2be80ee34026464dc0a13800 Mon Sep 17 00:00:00 2001 From: Frederico Santos Date: Fri, 25 Oct 2024 23:29:20 +0100 Subject: [PATCH 125/153] updating locales --- public/locales | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/locales b/public/locales index 87615556d8a..71390cba88f 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit 87615556d8a2bd7eef7abac818f84423a8a13b03 +Subproject commit 71390cba88f4103d0d2273d59a6dd8340a4fa54f From 6418f46bf7e97ee986e26b54aaa125a930c74248 Mon Sep 17 00:00:00 2001 From: chaosgrimmon <31082757+chaosgrimmon@users.noreply.github.com> Date: Fri, 25 Oct 2024 19:02:05 -0400 Subject: [PATCH 126/153] [Sprite] Fix transparency of pixels on Fletchinder (#4720) * [Sprite] Front Fletchinder * [Sprite] Back Fletchinder * [Sprite] Shiny front Fletchinder * [Sprite] Shiny back Fletchinder --- public/images/pokemon/exp/662.png | Bin 1718 -> 1869 bytes public/images/pokemon/exp/back/662.png | Bin 1439 -> 1526 bytes public/images/pokemon/exp/back/shiny/662.png | Bin 1439 -> 1526 bytes public/images/pokemon/exp/shiny/662.png | Bin 1721 -> 1870 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/public/images/pokemon/exp/662.png b/public/images/pokemon/exp/662.png index 090e6e4c91f61b1d7b93064474bdd46e2de2f04a..e47863f724b8998808b7a4f7377497dafdfe38f4 100644 GIT binary patch delta 1812 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 br{ga%y@t7ye^)2~0000~c1m8>n zbv1fNW?nAh_J241Lso6On6`od)D%#2Q&UFn_&()gY`1SXuGLBcFx%gI4Ny<1d0W$| zOSoNetDZEX_8zSfd^Jr}041iz8qZq=Qy^lShF0o2ar7eO*1{zv_vk%^i=fpCZ{ z6b!_({ePn=lU2hknmP_qx?w;f7rxzNtf6*K(2<3Lfr=f)Sb2Ko5|vOekfI@@rDg^Y z^++&qk^$1xt=SbpM?Dk__?H(uz755?#7~JdQtiSM2Eyy~?FLIMBa+W#YncNB{`K{K zE!-s3=CiwJTX-!>hIw(1HD2D%Kh zAhfZ}YQMb#lLDW)*;w|n@ir0+eBkExmAe#ftiV12Iw-meVydhqx&R;gHI_O30Pz@F zEq_|(JOYTv$ZF>b>>=Q@L1-Wt5RZ}7&_E8@www2L2qhep|4hU{%zQteQ~49tJz~G? zq&WfaM?%Cu$4GMm-j9SxeqR&j1i4Aogdn2E50QNPN^^qTq-sJCQDcWlBS>?4L@m8O z7U#r;D#e!mYNBg?T@B@hh{|Vn6(r7yt$&tQ&#tx}ijMZ2E6fRXW2qgKs0njI)!v-t znESOPI(bNP!rU5aS))`{O^_3+RxPKe?LIzpA3&N@FSl5ZYHEUK((s|Hs6cYD<{}3OhL65t9woYzbwFQ`;s&#kzN*n)i5f^ zNuZV;FUw6gTBIk)=@YfGLxu_RbAP(tDytU@Q{(4!vsq3r)>AoMit&1}dgg?l7u{~;LdMuGEjj#zq!ds1@8RjCL%}s_WaF;hX8K%Hp-rQuA0(W^glwk_o<=s$5DR5U(8l}Kpq%;fM zopTcS%>uVbEjwO5DRB2KQ(eshH{kYpF?hHFcT??87r3J%f%dTq-0kU}1#S+7=Y-1z zuUX(m+-8AWVm4}lTX3_H6CAX_EzgM`VAkG$ePn- delta 1421 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℞~o8>&TJ>+IN4{d9Iwpq?Y-3{rU z^N=F+XS{3G&fml#%Xzf)H*rXE2~GV?0(_l~{Y?VE%}=!UHI(dfn z{-#czp}oJUl4t1PZz|*&B7gJQ%-=kmXNdewBlFqL-#nIQNZ+5iHxv#0&4YP{)ZYwG zlDfZnEYHx--#nCO=;&{M9?3KG^fwRW8M^wL2l5PE{Y`nEp|8Iw&olJ(H^q5|-u|XE z&(Pc7l;#Izsb)toaAqE_q#aH-{kFgai+h?+3(_9f0MCq#i{;uCS%`|f#Glc5?FVt;!i5VLE?l^9K_CABwqvb_T8_8?00000NkvXXu0mjf DmMNn4 delta 1663 zcmYk7dtB1@9>%eLnqpvzr4unzC@+PqoHcI=s2R#7FOi$Wa%M)Nm{jV^BuQn}EVQ{Z zymX+vwJ5EH}isGnEZoFBmKc|6s(r7PfJWAnEs{C z;l0r1_b9ak3l_x-8**L$ISyR|AEi_d-dtLI$rj`IR>Ja>(9!fAVq$(rUSOZkGWVaR ze$?O8n3>t_)Ju;GyBi6iWf6VZHgwCc5-ni!lIa)Ee-BncTJuVk#JP3H z#M3$HM`OLR9a_0EJs;2*9<_`i-EBbEQ8O7!;W-16RnPs)B?ZNme z`*B0<4*D>=I#-hH=oP;a|BH52WVDfoOG;ufOwAp~vWx7NI5pAZiKAs^$*ZSY+g-2s z?PxwOU1+#OV-y=>Uvyb-wLX|fJ=xkGwk9}ezVTFZ=H1o&j!3_*D=sdOK+!J28=K1y zNkz?FU0eR$EWG<=8`X)noDtjMCCRwTez@i1p$qN7-ccNzoT8u%^tq}|>E0V-u2UK# zv;ES*N)mGD;g{AZq)9WbjvpmI4gZ%BOR~P*JDa_a)yN66BJGiCZ^7X#H1}P=swh3uwV#cDP^F}#sC%?0Vl%4K# z!GaGir$zH`pB>3g=Z6Q2KNVan0TD#Lp2{44`ilA=s$_FF)0Kp%C+`UY$wXt-yTdXA z9}}EJ=qcEP?Y4#naB$s+D8KA6XqX8+OD@RfeQtYQ<``>>l(U8IIBntAiDjl!t>qwX zX$e8Fz)7+c2ttfQtgVw=I1*xom!v@oAMr%^Nz>2n720M$M-Z-iGrG4e7`VuVWz4bM ztz|H@maHdpzu$M>a{Fsa=xhMbPjN2>L4Zrmkvt+lh`Y&&1BAL;X|rcp_NRF7_^I3i z`8GCIF@5AlSQ>Yj2H|wxn@RJ3fX7be*emDf@hM;j?a?lVTaf!ZVyD*+;r6c#ul*5= z8G;&8fNQL6P!s~3E2Z%;_xn)}2(Uy!<1rm|rqMc$7jyw_{+dGRaSRgZQ-QHXRm!y! zWX@~gKeWl|Eog;3jaJ^t#uEi0a^Y+roC9#*LUY)TERQ<8F#5aFffY)s9mcl~KR0-? z!PC-?TY{Jn#zxUefu3%}$i27TA*#GAwNh-N6`^Cloy*lZxI1nq#k^=1d7auGqS@8$559ij)G}-03*Z z8QFt4PM=06>!LVL@Y^DjTCMHc#-Fv3hcF>YyBkvvw5!z~u)#NRn`}-vWT+|bFtNIt fDqe}G+t~82k(Nec(Nw+mrvV)eAo Date: Fri, 25 Oct 2024 19:34:40 -0400 Subject: [PATCH 127/153] [Beta] Stop Transform giving copied moves negative fractional `ppUp` (#4722) * [Beta] Stop Transform giving copied moves negative fractional `ppUp` * Remove some bangs/etc --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/data/ability.ts | 15 +++++++------ src/data/move.ts | 13 +++++++----- src/field/pokemon.ts | 33 +++++++++++++++++++---------- src/modifier/modifier-type.ts | 2 +- src/modifier/modifier.ts | 2 +- src/system/pokemon-data.ts | 2 +- src/test/abilities/imposter.test.ts | 15 ++++++++++--- src/test/moves/transform.test.ts | 17 +++++++++++---- 8 files changed, 67 insertions(+), 32 deletions(-) diff --git a/src/data/ability.ts b/src/data/ability.ts index d761657f5cd..01e99966ff8 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -2453,16 +2453,19 @@ export class PostSummonTransformAbAttr extends PostSummonAbAttr { pokemon.setStatStage(s, target.getStatStage(s)); } - pokemon.summonData.moveset = target.getMoveset().map(m => { - const pp = m?.getMove().pp ?? 0; - // if PP value is less than 5, do nothing. If greater, we need to reduce the value to 5 using a negative ppUp value. - const ppUp = pp <= 5 ? 0 : (5 - pp) / Math.max(Math.floor(pp / 5), 1); - return new PokemonMove(m?.moveId ?? Moves.NONE, 0, ppUp); + pokemon.summonData.moveset = target.getMoveset().map((m) => { + if (m) { + // If PP value is less than 5, do nothing. If greater, we need to reduce the value to 5. + return new PokemonMove(m.moveId, 0, 0, false, Math.min(m.getMove().pp, 5)); + } else { + console.warn(`Imposter: somehow iterating over a ${m} value when copying moveset!`); + return new PokemonMove(Moves.NONE); + } }); pokemon.summonData.types = target.getTypes(); promises.push(pokemon.updateInfo()); - pokemon.scene.queueMessage(i18next.t("abilityTriggers:postSummonTransform", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), targetName: target!.name, })); + pokemon.scene.queueMessage(i18next.t("abilityTriggers:postSummonTransform", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), targetName: target.name, })); pokemon.scene.playSound("battle_anims/PRSFX- Transform"); promises.push(pokemon.loadAssets(false).then(() => { pokemon.playAnim(); diff --git a/src/data/move.ts b/src/data/move.ts index efdd4568927..9979b24cc24 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -6668,11 +6668,14 @@ export class TransformAttr extends MoveEffectAttr { user.setStatStage(s, target.getStatStage(s)); } - user.summonData.moveset = target.getMoveset().map(m => { - const pp = m?.getMove().pp ?? 0; - // if PP value is less than 5, do nothing. If greater, we need to reduce the value to 5 using a negative ppUp value. - const ppUp = pp <= 5 ? 0 : (5 - pp) / Math.max(Math.floor(pp / 5), 1); - return new PokemonMove(m?.moveId!, 0, ppUp); + user.summonData.moveset = target.getMoveset().map((m) => { + if (m) { + // If PP value is less than 5, do nothing. If greater, we need to reduce the value to 5. + return new PokemonMove(m.moveId, 0, 0, false, Math.min(m.getMove().pp, 5)); + } else { + console.warn(`Transform: somehow iterating over a ${m} value when copying moveset!`); + return new PokemonMove(Moves.NONE); + } }); user.summonData.types = target.getTypes(); promises.push(user.updateInfo()); diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index d41c1f9eefa..a708b2067a7 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -4431,7 +4431,7 @@ export class PlayerPokemon extends Pokemon { this.scene.removePartyMemberModifiers(fusedPartyMemberIndex); this.scene.getParty().splice(fusedPartyMemberIndex, 1)[0]; const newPartyMemberIndex = this.scene.getParty().indexOf(this); - pokemon.getMoveset(true).map(m => this.scene.unshiftPhase(new LearnMovePhase(this.scene, newPartyMemberIndex, m!.getMove().id))); // TODO: is the bang correct? + pokemon.getMoveset(true).map((m: PokemonMove) => this.scene.unshiftPhase(new LearnMovePhase(this.scene, newPartyMemberIndex, m.getMove().id))); pokemon.destroy(); this.updateFusionPalette(); resolve(); @@ -4452,8 +4452,12 @@ export class PlayerPokemon extends Pokemon { /** Returns a deep copy of this Pokemon's moveset array */ copyMoveset(): PokemonMove[] { const newMoveset : PokemonMove[] = []; - this.moveset.forEach(move => - newMoveset.push(new PokemonMove(move!.moveId, 0, move!.ppUp, move!.virtual))); // TODO: are those bangs correct? + this.moveset.forEach((move) => { + // TODO: refactor `moveset` to not accept `null`s + if (move) { + newMoveset.push(new PokemonMove(move.moveId, 0, move.ppUp, move.virtual, move.maxPpOverride)); + } + }); return newMoveset; } @@ -5180,15 +5184,22 @@ export interface DamageCalculationResult { **/ export class PokemonMove { public moveId: Moves; - public ppUsed: integer; - public ppUp: integer; + public ppUsed: number; + public ppUp: number; public virtual: boolean; - constructor(moveId: Moves, ppUsed?: integer, ppUp?: integer, virtual?: boolean) { + /** + * If defined and nonzero, overrides the maximum PP of the move (e.g., due to move being copied by Transform). + * This also nullifies all effects of `ppUp`. + */ + public maxPpOverride?: number; + + constructor(moveId: Moves, ppUsed: number = 0, ppUp: number = 0, virtual: boolean = false, maxPpOverride?: number) { this.moveId = moveId; - this.ppUsed = ppUsed || 0; - this.ppUp = ppUp || 0; - this.virtual = !!virtual; + this.ppUsed = ppUsed; + this.ppUp = ppUp; + this.virtual = virtual; + this.maxPpOverride = maxPpOverride; } /** @@ -5225,7 +5236,7 @@ export class PokemonMove { } getMovePp(): integer { - return this.getMove().pp + this.ppUp * Utils.toDmgValue(this.getMove().pp / 5); + return this.maxPpOverride || (this.getMove().pp + this.ppUp * Utils.toDmgValue(this.getMove().pp / 5)); } getPpRatio(): number { @@ -5242,6 +5253,6 @@ export class PokemonMove { * @return {PokemonMove} A valid pokemonmove object */ static loadMove(source: PokemonMove | any): PokemonMove { - return new PokemonMove(source.moveId, source.ppUsed, source.ppUp, source.virtual); + return new PokemonMove(source.moveId, source.ppUsed, source.ppUp, source.virtual, source.maxPpOverride); } } diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index 3e475c62590..f4b59b9d882 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -384,7 +384,7 @@ export class PokemonPpUpModifierType extends PokemonMoveModifierType { (_pokemon: PlayerPokemon) => { return null; }, (pokemonMove: PokemonMove) => { - if (pokemonMove.getMove().pp < 5 || pokemonMove.ppUp >= 3) { + if (pokemonMove.getMove().pp < 5 || pokemonMove.ppUp >= 3 || pokemonMove.maxPpOverride) { return PartyUiHandler.NoEffectMessage; } return null; diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 11f16f103a5..36f94b99b20 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -2166,7 +2166,7 @@ export class PokemonPpUpModifier extends ConsumablePokemonMoveModifier { override apply(playerPokemon: PlayerPokemon): boolean { const move = playerPokemon.getMoveset()[this.moveIndex]; - if (move) { + if (move && !move.maxPpOverride) { move.ppUp = Math.min(move.ppUp + this.upPoints, 3); } diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index 421739a9da1..c8756e4dd7f 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -135,7 +135,7 @@ export default class PokemonData { } } } else { - this.moveset = (source.moveset || [ new PokemonMove(Moves.TACKLE), new PokemonMove(Moves.GROWL) ]).filter(m => m).map((m: any) => new PokemonMove(m.moveId, m.ppUsed, m.ppUp)); + this.moveset = (source.moveset || [ new PokemonMove(Moves.TACKLE), new PokemonMove(Moves.GROWL) ]).filter(m => m).map((m: any) => new PokemonMove(m.moveId, m.ppUsed, m.ppUp, m.virtual, m.maxPpOverride)); if (!forHistory) { this.status = source.status ? new Status(source.status.effect, source.status.toxicTurnCount, source.status.sleepTurnsRemaining) diff --git a/src/test/abilities/imposter.test.ts b/src/test/abilities/imposter.test.ts index 7aaac5ca8c4..3445b3b322c 100644 --- a/src/test/abilities/imposter.test.ts +++ b/src/test/abilities/imposter.test.ts @@ -60,18 +60,19 @@ describe("Abilities - Imposter", () => { const playerMoveset = player.getMoveset(); const enemyMoveset = player.getMoveset(); + expect(playerMoveset.length).toBe(enemyMoveset.length); for (let i = 0; i < playerMoveset.length && i < enemyMoveset.length; i++) { - // TODO: Checks for 5 PP should be done here when that gets addressed expect(playerMoveset[i]?.moveId).toBe(enemyMoveset[i]?.moveId); } const playerTypes = player.getTypes(); const enemyTypes = enemy.getTypes(); + expect(playerTypes.length).toBe(enemyTypes.length); for (let i = 0; i < playerTypes.length && i < enemyTypes.length; i++) { expect(playerTypes[i]).toBe(enemyTypes[i]); } - }, 20000); + }); it("should copy in-battle overridden stats", async () => { game.override.enemyMoveset([ Moves.POWER_SPLIT ]); @@ -104,7 +105,15 @@ describe("Abilities - Imposter", () => { await game.phaseInterceptor.to(TurnEndPhase); player.getMoveset().forEach(move => { - expect(move!.getMovePp()).toBeLessThanOrEqual(5); + // Should set correct maximum PP without touching `ppUp` + if (move) { + if (move.moveId === Moves.SKETCH) { + expect(move.getMovePp()).toBe(1); + } else { + expect(move.getMovePp()).toBe(5); + } + expect(move.ppUp).toBe(0); + } }); }); }); diff --git a/src/test/moves/transform.test.ts b/src/test/moves/transform.test.ts index 8c0f5eda7b2..adb97b42af7 100644 --- a/src/test/moves/transform.test.ts +++ b/src/test/moves/transform.test.ts @@ -60,18 +60,19 @@ describe("Moves - Transform", () => { const playerMoveset = player.getMoveset(); const enemyMoveset = player.getMoveset(); + expect(playerMoveset.length).toBe(enemyMoveset.length); for (let i = 0; i < playerMoveset.length && i < enemyMoveset.length; i++) { - // TODO: Checks for 5 PP should be done here when that gets addressed expect(playerMoveset[i]?.moveId).toBe(enemyMoveset[i]?.moveId); } const playerTypes = player.getTypes(); const enemyTypes = enemy.getTypes(); + expect(playerTypes.length).toBe(enemyTypes.length); for (let i = 0; i < playerTypes.length && i < enemyTypes.length; i++) { expect(playerTypes[i]).toBe(enemyTypes[i]); } - }, 20000); + }); it("should copy in-battle overridden stats", async () => { game.override.enemyMoveset([ Moves.POWER_SPLIT ]); @@ -94,7 +95,7 @@ describe("Moves - Transform", () => { expect(enemy.getStat(Stat.SPATK, false)).toBe(avgSpAtk); }); - it ("should set each move's pp to a maximum of 5", async () => { + it("should set each move's pp to a maximum of 5", async () => { game.override.enemyMoveset([ Moves.SWORDS_DANCE, Moves.GROWL, Moves.SKETCH, Moves.RECOVER ]); await game.classicMode.startBattle([ Species.DITTO ]); @@ -104,7 +105,15 @@ describe("Moves - Transform", () => { await game.phaseInterceptor.to(TurnEndPhase); player.getMoveset().forEach(move => { - expect(move!.getMovePp()).toBeLessThanOrEqual(5); + // Should set correct maximum PP without touching `ppUp` + if (move) { + if (move.moveId === Moves.SKETCH) { + expect(move.getMovePp()).toBe(1); + } else { + expect(move.getMovePp()).toBe(5); + } + expect(move.ppUp).toBe(0); + } }); }); }); From 61cf937cab471d083f78f483c6d22aefaac72e3d Mon Sep 17 00:00:00 2001 From: Smewkie <168606612+Smewkie@users.noreply.github.com> Date: Fri, 25 Oct 2024 18:38:12 -0500 Subject: [PATCH 128/153] [Balance] Ferroseed HA Ferroseed HA --- src/data/pokemon-species.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 96d1eb430fb..a93c35829ea 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -1864,7 +1864,7 @@ export function initSpecies() { new PokemonSpecies(Species.ALOMOMOLA, 5, false, false, false, "Caring Pokémon", Type.WATER, null, 1.2, 31.6, Abilities.HEALER, Abilities.HYDRATION, Abilities.REGENERATOR, 470, 165, 75, 80, 40, 45, 65, 75, 70, 165, GrowthRate.FAST, 50, false), new PokemonSpecies(Species.JOLTIK, 5, false, false, false, "Attaching Pokémon", Type.BUG, Type.ELECTRIC, 0.1, 0.6, Abilities.COMPOUND_EYES, Abilities.UNNERVE, Abilities.SWARM, 319, 50, 47, 50, 57, 50, 65, 190, 50, 64, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.GALVANTULA, 5, false, false, false, "EleSpider Pokémon", Type.BUG, Type.ELECTRIC, 0.8, 14.3, Abilities.COMPOUND_EYES, Abilities.UNNERVE, Abilities.SWARM, 472, 70, 77, 60, 97, 60, 108, 75, 50, 165, GrowthRate.MEDIUM_FAST, 50, false), - new PokemonSpecies(Species.FERROSEED, 5, false, false, false, "Thorn Seed Pokémon", Type.GRASS, Type.STEEL, 0.6, 18.8, Abilities.IRON_BARBS, Abilities.NONE, Abilities.IRON_BARBS, 305, 44, 50, 91, 24, 86, 10, 255, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), + new PokemonSpecies(Species.FERROSEED, 5, false, false, false, "Thorn Seed Pokémon", Type.GRASS, Type.STEEL, 0.6, 18.8, Abilities.IRON_BARBS, Abilities.NONE, Abilities.ANTICIPATION, 305, 44, 50, 91, 24, 86, 10, 255, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.FERROTHORN, 5, false, false, false, "Thorn Pod Pokémon", Type.GRASS, Type.STEEL, 1, 110, Abilities.IRON_BARBS, Abilities.NONE, Abilities.ANTICIPATION, 489, 74, 94, 131, 54, 116, 20, 90, 50, 171, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.KLINK, 5, false, false, false, "Gear Pokémon", Type.STEEL, null, 0.3, 21, Abilities.PLUS, Abilities.MINUS, Abilities.CLEAR_BODY, 300, 40, 55, 70, 45, 60, 30, 130, 50, 60, GrowthRate.MEDIUM_SLOW, null, false), new PokemonSpecies(Species.KLANG, 5, false, false, false, "Gear Pokémon", Type.STEEL, null, 0.6, 51, Abilities.PLUS, Abilities.MINUS, Abilities.CLEAR_BODY, 440, 60, 80, 95, 70, 85, 50, 60, 50, 154, GrowthRate.MEDIUM_SLOW, null, false), From 51b2a4d7fe1922a8e161e87558c3ce7f9b8c3af1 Mon Sep 17 00:00:00 2001 From: Frederico Santos Date: Sat, 26 Oct 2024 17:14:17 +0100 Subject: [PATCH 129/153] Something (#4728) * [Feature] Add event-based friendship multiplier and update TrainerConfig for event modifiers * [UI][Dev] Improve event banner placement (#4726) * [ui] automatically place event banner and timer in the title screen * add new event banner * ugh * [Refactor] Clean up TrainerConfig and remove unused timed event --------- Co-authored-by: Moka <54149968+MokaStitcher@users.noreply.github.com> --- .../images/events/halloween2024-event-de.png | Bin 0 -> 26601 bytes .../images/events/halloween2024-event-en.png | Bin 0 -> 15451 bytes .../images/events/halloween2024-event-es.png | Bin 0 -> 15661 bytes .../images/events/halloween2024-event-fr.png | Bin 0 -> 26235 bytes .../images/events/halloween2024-event-it.png | Bin 0 -> 15648 bytes .../images/events/halloween2024-event-ja.png | Bin 0 -> 25884 bytes .../images/events/halloween2024-event-ko.png | Bin 0 -> 16086 bytes .../events/halloween2024-event-pt-BR.png | Bin 0 -> 25936 bytes .../events/halloween2024-event-zh-CN.png | Bin 0 -> 86594 bytes src/data/trainer-config.ts | 14 ++++ src/field/pokemon.ts | 6 +- src/loading-scene.ts | 4 +- src/modifier/modifier-type.ts | 14 ++-- src/phases/trainer-victory-phase.ts | 6 ++ src/timed-event-manager.ts | 72 +++++++++++++----- src/ui/title-ui-handler.ts | 1 + 16 files changed, 88 insertions(+), 29 deletions(-) create mode 100644 public/images/events/halloween2024-event-de.png create mode 100644 public/images/events/halloween2024-event-en.png create mode 100644 public/images/events/halloween2024-event-es.png create mode 100644 public/images/events/halloween2024-event-fr.png create mode 100644 public/images/events/halloween2024-event-it.png create mode 100644 public/images/events/halloween2024-event-ja.png create mode 100644 public/images/events/halloween2024-event-ko.png create mode 100644 public/images/events/halloween2024-event-pt-BR.png create mode 100644 public/images/events/halloween2024-event-zh-CN.png diff --git a/public/images/events/halloween2024-event-de.png b/public/images/events/halloween2024-event-de.png new file mode 100644 index 0000000000000000000000000000000000000000..a56053c73cc2bb91d44922d758e3741db85a579a GIT binary patch literal 26601 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 I?YQggAHc&^w63AMp}Lv`!r77E66tJ(;`esE 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 A7ytkO literal 0 HcmV?d00001 diff --git a/public/images/events/halloween2024-event-fr.png b/public/images/events/halloween2024-event-fr.png new file mode 100644 index 0000000000000000000000000000000000000000..21df18c747140955e0daa1274125d5076a6da81a GIT binary patch literal 26235 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 literal 0 HcmV?d00001 diff --git a/public/images/events/halloween2024-event-it.png b/public/images/events/halloween2024-event-it.png new file mode 100644 index 0000000000000000000000000000000000000000..ce2316b2ce50349754a15014b050bef5ffc622b9 GIT binary patch literal 15648 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

nAIwHJ3bf`UEe7eh>v)TwZU$R zgeYy&WkLyqh#ef*fiZ0A2+xm(@ih=;IFQDsI=;*f6dNMOHF9ae&E?QM-2B0#Jk4ut zJOHHSrtPNXrsbjKvG#O{JLO`mV+qa@PV>5CSvxzUR{>uA8e&w{s<90`bT%fy{$5H! zRVc9hH76ar#z3ro`WBz3h1pKEb7X~%_gtbIi)2G=Bm0Im^tX4WZJwyj+ov|tJd1Ga z5KE&)suDfllH~xNPRj`3i0ApZG5x#uI`joQ^AB0{Rji?IU8foxy!sU*y;~vfGIz$S zGE1*4mY#GH$ga&FyAtkvv8g3mjrvmueI)U_BAU5iYu`6VE>}N^YYqO{nk(^K#)5tE z_c*Zh!X-4HUtH{3Ja|+~pxJ_rtap;4h>10B2D4Lf=OW6`9kE*FWV$1lFwgzq32E(n zJ3F5=tf79X-GemVItC*e96ru=sK+Der)yM`H#cn3 z!Pah0BHLRSV->FB+4W>^&#o?K$HQt9UC4%$A+{=3^8Zl=se=r_ z=A;#L=m7@SeN@>&alc0MbQ48jZ}FP1Q19413);#e5&+-!%y}GVbdxg;qNXRDCF*kY z&EVW{!<5=keYy$t-_(x>@_li9f3zyPenu)G9Ty_$hnppY)`uTzR96W6o>IOI4IL^1{Ea1GOSjnq#?NTLXF272{Il?l1C?J&QMjZrVn+up>cI;z4^rMPK2RM3+54MB&I3LCjBHOmmguUY57 z0dz(XrSwPi<}j?!HR5>Vl-3na+3mF4I!zhQa+ZEZ%v|x!c3k$InTW;*=+%E8y3!>Y zn1L6^H@&tub~L2W9(Jvy>#Aan@f0WLe%o1gUNJQ7!YtCUMO5UBg@f2V-o5DUAsf8j ze<$ld{!YiLqU%$iiS(=pS;jn{DmGsmS#k^c590kt<<)V#&P66Fi+TFN;ehzVsmS%R zx$1%abTY^>NIM+>I2YCXQFWA}HmxdZ;!_8@K^4;6FuoT&DIQW6rfeRrn{KBJaVV~{ z%9JqTj@5-7*J+lLk^h24nI~u*=7hDLjj3#jtD7{Tvj5U&sj5_LSe$#-jyh^pe3t$j zd}MG}T|Q_q#BX|cfI1t!>OY*)FKD{wjV88OEBqYswv8a?teRX%3ULnzNAcYrC+9x1 zcIeeozI0dqWn+MNy|r-V?7QBk$J;0l?hN#@kI#zv2i{;v6ZfTS=Gjl0+Qw|RMchBv zo}oT8d*A!QCc>=yK`k2jbV@HA^3K>cXhJs@j5lnI0@M$+)39_W0P&>Im0QmYs2#aS zzl3Y4CECxz#caQPHtCrNJM8ck>Y&4lcOq%9^%1mY-uo4sv0IZOF#K#7xlR?uQKzr8 zZtD)v%AY%f^ZLkhc=Pq_V`+$=9oe_XIrbJy6fX#q!?io%`36$^pyZllkJ;8ynC-52 z5!07WHIXtKmbyj4vH=V52}ZYud!*H&H|>w{cA;lH`F(RmMVljmp1zJpFeDbIusue4 z%w36Z5y#Hj?DpQb|8h;J(wwz+4SX9w8Hq4-Ak*Z${9Uw-L&b+|3ZFK2>$`J+<#t`H zO;eVBURiX)-=#kdymnpt*vYwfRh!`9u%^#E<|t|&{xJ8U@Rd~$$+ES8UKvoPQR0X* zJn)nu(^PF^m1&04y0OvsA|}LOl*Bi)r6vWZ#1p1`TK7K0A8{AY8V_m{h03!O_A(`k%_NDkU-kPVRYpaBna``nMi`t4w z>9^WO=HXX1q7ntX1(|>TOuOPtRSx4~;~k$X9u<(ql|d z!18Gb_mg3N_3ohDo<3a2pQ&eKTIK;XS$K4pN;lAz&pYx)=gl<9J(}&=Nod z-`PYw7HCpEOKB$V_Cw#EG?nP4%=R@+kPS9S**%Q5K~ThCh5GFWVixX-_>e@j4Q06j z3BeXVSn5yt9QdFgB~ETJ+ZP#UPh)1z&%zfezXo1)>;wyjYZGBjMAW~2BN}|lc!RiH z{`>r+u}1EU?u(4TG5q}wS?I?dRS}>Fe_nY|1aTWk`TBKEoj-cP_uWarAu8DVely42 z)`xy*R3UbNA*p0%xc#?$z6Je|VP1Jx`}u@X6R6ZYvq~g!^NHp2J+WwJL<*LY{L33* ziE#3mA0^k`tr~-r(!u)WAsiMgPsaV`+j}j6mSC83QAbZl$M-b>*gw>ZNh7_PVby-v z_EH(q6+@o=h7=ceTgG+3@lmeHJRQVvPHj#T9bZm2{$vu^pe^0(I-ZYntbyg_2Xn{u zXkPM3O}yS4q)97VVt=P=IOK`-BkQuB4g5(;@wR_zhSZG9s|CvEi`To~Ybt&G`UZUB zQ@)S{a@t_A!sZ1?aC`dhF8u<1b;FFwJ(-S8p$S^YFd60yBTmSo-#={_^4kl+aP8#VE7$i)y~QYK4~mP| zLyw$B`c$<;SRLoKSwrmts~$5dASgdQ9Vx?d|al zq5K}O;4sONttn0shI&?uwBIO|>({<4q`1WMEY!KXgD#zG@Ay845-)d|Y|T9@@r6_B zzMZ9viCW2z7mf4n?yPCGvP@9_5Hf_;L3&pY91(_W&#Lx_U`c9`icLXc3D56sKj%?4 zRm(u#0bZ|>KT0v3^|8{6oGTb+k+E<`(5^*PtwQ{6i-Z*ef>i6eD@qCD(^NPk76%k$ zEgisQ1@=0!E_NxMv^OddsL+}2GEeA6DjFB^=)>)TWe8cbMr+~9hC^D5g>3SEvYR

@kG6{LzePz=~&5n?>mCcTD+M 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

2dWyc)DM8a?ZyzUd=1qr?bH1yOY)r2t# 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 d00008000000002eQ ModifierTypeFunc)[]): TrainerConfig { + this.eventRewardFuncs = modifierTypeFuncs.map(func => () => { + const modifierTypeFunc = func(); + const modifierType = modifierTypeFunc(); + modifierType.withIdFromFunc(modifierTypeFunc); + return modifierType; + }); + return this; + } + + setModifierRewardFuncs(...modifierTypeFuncs: (() => ModifierTypeFunc)[]): TrainerConfig { this.modifierRewardFuncs = modifierTypeFuncs.map(func => () => { const modifierTypeFunc = func(); @@ -1828,10 +1840,12 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.RIVAL]: new TrainerConfig((t = TrainerType.RIVAL)).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setStaticParty().setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival").setMixedBattleBgm("battle_rival").setPartyTemplates(trainerPartyTemplates.RIVAL) .setModifierRewardFuncs(() => modifierTypes.SUPER_EXP_CHARM, () => modifierTypes.EXP_SHARE) + .setEventModifierRewardFuncs(() => modifierTypes.SHINY_CHARM, () => modifierTypes.ABILITY_CHARM) .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE, Species.CHIKORITA, Species.CYNDAQUIL, Species.TOTODILE, Species.TREECKO, Species.TORCHIC, Species.MUDKIP, Species.TURTWIG, Species.CHIMCHAR, Species.PIPLUP, Species.SNIVY, Species.TEPIG, Species.OSHAWOTT, Species.CHESPIN, Species.FENNEKIN, Species.FROAKIE, Species.ROWLET, Species.LITTEN, Species.POPPLIO, Species.GROOKEY, Species.SCORBUNNY, Species.SOBBLE, Species.SPRIGATITO, Species.FUECOCO, Species.QUAXLY ], TrainerSlot.TRAINER, true)) .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.PIDGEY, Species.HOOTHOOT, Species.TAILLOW, Species.STARLY, Species.PIDOVE, Species.FLETCHLING, Species.PIKIPEK, Species.ROOKIDEE, Species.WATTREL ], TrainerSlot.TRAINER, true)), [TrainerType.RIVAL_2]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setStaticParty().setMoneyMultiplier(1.25).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival").setMixedBattleBgm("battle_rival").setPartyTemplates(trainerPartyTemplates.RIVAL_2) .setModifierRewardFuncs(() => modifierTypes.EXP_SHARE) + .setEventModifierRewardFuncs(() => modifierTypes.SHINY_CHARM) .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.IVYSAUR, Species.CHARMELEON, Species.WARTORTLE, Species.BAYLEEF, Species.QUILAVA, Species.CROCONAW, Species.GROVYLE, Species.COMBUSKEN, Species.MARSHTOMP, Species.GROTLE, Species.MONFERNO, Species.PRINPLUP, Species.SERVINE, Species.PIGNITE, Species.DEWOTT, Species.QUILLADIN, Species.BRAIXEN, Species.FROGADIER, Species.DARTRIX, Species.TORRACAT, Species.BRIONNE, Species.THWACKEY, Species.RABOOT, Species.DRIZZILE, Species.FLORAGATO, Species.CROCALOR, Species.QUAXWELL ], TrainerSlot.TRAINER, true)) .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.PIDGEOTTO, Species.HOOTHOOT, Species.TAILLOW, Species.STARAVIA, Species.TRANQUILL, Species.FLETCHINDER, Species.TRUMBEAK, Species.CORVISQUIRE, Species.WATTREL ], TrainerSlot.TRAINER, true)) .setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)), diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index a708b2067a7..4cb8390d4f4 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -4114,7 +4114,11 @@ export class PlayerPokemon extends Pokemon { fusionStarterSpeciesId ? this.scene.gameData.starterData[fusionStarterSpeciesId] : null ].filter(d => !!d); const amount = new Utils.IntegerHolder(friendship); - const starterAmount = new Utils.IntegerHolder(Math.floor(friendship * (this.scene.gameMode.isClassic && friendship > 0 ? CLASSIC_CANDY_FRIENDSHIP_MULTIPLIER : 1) / (fusionStarterSpeciesId ? 2 : 1))); + let candyFriendshipMultiplier = CLASSIC_CANDY_FRIENDSHIP_MULTIPLIER; + if (this.scene.eventManager.isEventActive()) { + candyFriendshipMultiplier *= this.scene.eventManager.getFriendshipMultiplier(); + } + const starterAmount = new Utils.IntegerHolder(Math.floor(friendship * (this.scene.gameMode.isClassic && friendship > 0 ? candyFriendshipMultiplier : 1) / (fusionStarterSpeciesId ? 2 : 1))); if (amount.value > 0) { this.scene.applyModifier(PokemonFriendshipBoosterModifier, true, this, amount); this.scene.applyModifier(PokemonFriendshipBoosterModifier, true, this, starterAmount); diff --git a/src/loading-scene.ts b/src/loading-scene.ts index 26936bcdaad..578b9aba4fc 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -246,9 +246,9 @@ export class LoadingScene extends SceneBase { } const availableLangs = [ "en", "de", "it", "fr", "ja", "ko", "es", "pt-BR", "zh-CN" ]; if (lang && availableLangs.includes(lang)) { - this.loadImage("egg-update_" + lang, "events"); + this.loadImage("halloween2024-event-" + lang, "events"); } else { - this.loadImage("egg-update_en", "events"); + this.loadImage("halloween2024-event-en", "events"); } this.loadAtlas("statuses", ""); diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index f4b59b9d882..cf2d74483f9 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -1301,13 +1301,12 @@ function lureWeightFunc(maxBattles: number, weight: number): WeightedModifierTyp return !(party[0].scene.gameMode.isClassic && party[0].scene.currentBattle.waveIndex === 199) && (lures.length === 0 || lures.filter(m => m.getMaxBattles() === maxBattles && m.getBattleCount() >= maxBattles * 0.6).length === 0) ? weight : 0; }; } - class WeightedModifierType { public modifierType: ModifierType; public weight: integer | WeightedModifierTypeWeightFunc; - public maxWeight: integer; + public maxWeight: integer | WeightedModifierTypeWeightFunc; - constructor(modifierTypeFunc: ModifierTypeFunc, weight: integer | WeightedModifierTypeWeightFunc, maxWeight?: integer) { + constructor(modifierTypeFunc: ModifierTypeFunc, weight: integer | WeightedModifierTypeWeightFunc, maxWeight?: integer | WeightedModifierTypeWeightFunc) { this.modifierType = modifierTypeFunc(); this.modifierType.id = Object.keys(modifierTypes).find(k => modifierTypes[k] === modifierTypeFunc)!; // TODO: is this bang correct? this.weight = weight; @@ -1694,7 +1693,10 @@ const modifierPool: ModifierPool = { new WeightedModifierType(modifierTypes.EVOLUTION_ITEM, (party: Pokemon[]) => { return Math.min(Math.ceil(party[0].scene.currentBattle.waveIndex / 15), 8); }, 8), - new WeightedModifierType(modifierTypes.MAP, (party: Pokemon[]) => party[0].scene.gameMode.isClassic && party[0].scene.currentBattle.waveIndex < 180 ? 1 : 0, 1), + new WeightedModifierType(modifierTypes.MAP, + (party: Pokemon[]) => party[0].scene.gameMode.isClassic && party[0].scene.currentBattle.waveIndex < 180 ? party[0].scene.eventManager.isEventActive() ? 2 : 1 : 0, + (party: Pokemon[]) => party[0].scene.eventManager.isEventActive() ? 2 : 1), + new WeightedModifierType(modifierTypes.SOOTHE_BELL, (party: Pokemon[]) => party[0].scene.eventManager.isEventActive() ? 3 : 0), new WeightedModifierType(modifierTypes.TM_GREAT, 3), new WeightedModifierType(modifierTypes.MEMORY_MUSHROOM, (party: Pokemon[]) => { if (!party.find(p => p.getLearnableLevelMoves().length)) { @@ -1762,7 +1764,7 @@ const modifierPool: ModifierPool = { new WeightedModifierType(modifierTypes.CANDY_JAR, skipInLastClassicWaveOrDefault(5)), new WeightedModifierType(modifierTypes.ATTACK_TYPE_BOOSTER, 9), new WeightedModifierType(modifierTypes.TM_ULTRA, 11), - new WeightedModifierType(modifierTypes.RARER_CANDY, 4), + new WeightedModifierType(modifierTypes.RARER_CANDY, (party: Pokemon[]) => party[0].scene.eventManager.isEventActive() ? 6 : 4), new WeightedModifierType(modifierTypes.GOLDEN_PUNCH, skipInLastClassicWaveOrDefault(2)), new WeightedModifierType(modifierTypes.IV_SCANNER, skipInLastClassicWaveOrDefault(4)), new WeightedModifierType(modifierTypes.EXP_CHARM, skipInLastClassicWaveOrDefault(8)), @@ -1785,7 +1787,7 @@ const modifierPool: ModifierPool = { new WeightedModifierType(modifierTypes.BATON, 2), new WeightedModifierType(modifierTypes.SOUL_DEW, 7), //new WeightedModifierType(modifierTypes.OVAL_CHARM, 6), - new WeightedModifierType(modifierTypes.SOOTHE_BELL, 4), + new WeightedModifierType(modifierTypes.SOOTHE_BELL, (party: Pokemon[]) => party[0].scene.eventManager.isEventActive() ? 0 : 4), new WeightedModifierType(modifierTypes.ABILITY_CHARM, skipInClassicAfterWave(189, 6)), new WeightedModifierType(modifierTypes.FOCUS_BAND, 5), new WeightedModifierType(modifierTypes.KINGS_ROCK, 3), diff --git a/src/phases/trainer-victory-phase.ts b/src/phases/trainer-victory-phase.ts index fd48b91b1a1..dc1b962f47e 100644 --- a/src/phases/trainer-victory-phase.ts +++ b/src/phases/trainer-victory-phase.ts @@ -27,6 +27,12 @@ export class TrainerVictoryPhase extends BattlePhase { this.scene.unshiftPhase(new ModifierRewardPhase(this.scene, modifierRewardFunc)); } + if (this.scene.eventManager.isEventActive()) { + for (const rewardFunc of this.scene.currentBattle.trainer?.config.eventRewardFuncs!) { + this.scene.unshiftPhase(new ModifierRewardPhase(this.scene, rewardFunc)); + } + } + const trainerType = this.scene.currentBattle.trainer?.config.trainerType!; // TODO: is this bang correct? if (vouchers.hasOwnProperty(TrainerType[trainerType])) { if (!this.scene.validateVoucher(vouchers[TrainerType[trainerType]]) && this.scene.currentBattle.trainer?.config.isBoss) { diff --git a/src/timed-event-manager.ts b/src/timed-event-manager.ts index 513d21bd2f3..953ac0566f6 100644 --- a/src/timed-event-manager.ts +++ b/src/timed-event-manager.ts @@ -5,13 +5,13 @@ import i18next from "i18next"; export enum EventType { SHINY, - GENERIC + NO_TIMER_DISPLAY } interface EventBanner { bannerKey?: string; - xPosition?: number; - yPosition?: number; + xOffset?: number; + yOffset?: number; scale?: number; availableLangs?: string[]; } @@ -20,19 +20,20 @@ interface TimedEvent extends EventBanner { name: string; eventType: EventType; shinyMultiplier?: number; + friendshipMultiplier?: number; startDate: Date; endDate: Date; } const timedEvents: TimedEvent[] = [ { - name: "Egg Skip Update", - eventType: EventType.GENERIC, - startDate: new Date(Date.UTC(2024, 8, 8, 0)), - endDate: new Date(Date.UTC(2024, 8, 12, 0)), - bannerKey: "egg-update", - xPosition: 19, - yPosition: 120, + name: "Halloween Update", + eventType: EventType.SHINY, + shinyMultiplier: 2, + friendshipMultiplier: 2, + startDate: new Date(Date.UTC(2024, 9, 25, 0)), + endDate: new Date(Date.UTC(2024, 10, 4, 0)), + bannerKey: "halloween2024-event-", scale: 0.21, availableLangs: [ "en", "de", "it", "fr", "ja", "ko", "es", "pt-BR", "zh-CN" ] } @@ -61,6 +62,16 @@ export class TimedEventManager { return activeEvents.length > 0; } + getFriendshipMultiplier(): number { + let multiplier = 1; + const friendshipEvents = timedEvents.filter((te) => this.isActive(te)); + friendshipEvents.forEach((fe) => { + multiplier *= fe.friendshipMultiplier ?? 1; + }); + + return multiplier; + } + getShinyMultiplier(): number { let multiplier = 1; const shinyEvents = timedEvents.filter((te) => te.eventType === EventType.SHINY && this.isActive(te)); @@ -80,42 +91,63 @@ export class TimedEventDisplay extends Phaser.GameObjects.Container { private event: TimedEvent | nil; private eventTimerText: Phaser.GameObjects.Text; private banner: Phaser.GameObjects.Image; - private bannerShadow: Phaser.GameObjects.Rectangle; + private availableWidth: number; private eventTimer: NodeJS.Timeout | null; constructor(scene: BattleScene, x: number, y: number, event?: TimedEvent) { super(scene, x, y); + this.availableWidth = scene.scaledCanvas.width; this.event = event; this.setVisible(false); } + /** + * Set the width that can be used to display the event timer and banner. By default + * these elements get centered horizontally in that space, in the bottom left of the screen + */ + setWidth(width: number) { + if (width !== this.availableWidth) { + this.availableWidth = width; + const xPosition = this.availableWidth / 2 + (this.event?.xOffset ?? 0); + if (this.banner) { + this.banner.x = xPosition; + } + if (this.eventTimerText) { + this.eventTimerText.x = xPosition; + } + } + } + setup() { const lang = i18next.resolvedLanguage; if (this.event && this.event.bannerKey) { let key = this.event.bannerKey; if (lang && this.event.availableLangs && this.event.availableLangs.length > 0) { if (this.event.availableLangs.includes(lang)) { - key += "_" + lang; + key += lang; } else { - key += "_en"; + key += "en"; } } console.log(this.event.bannerKey); - this.banner = new Phaser.GameObjects.Image(this.scene, this.event.xPosition ?? 29, this.event.yPosition ?? 64, key); + const padding = 5; + const showTimer = this.event.eventType !== EventType.NO_TIMER_DISPLAY; + const yPosition = this.scene.game.canvas.height / 6 - padding - (showTimer ? 10 : 0) - (this.event.yOffset ?? 0); + this.banner = new Phaser.GameObjects.Image(this.scene, this.availableWidth / 2, yPosition - padding, key); this.banner.setName("img-event-banner"); - this.banner.setOrigin(0.08, -0.35); + this.banner.setOrigin(0.5, 1); this.banner.setScale(this.event.scale ?? 0.18); - if (this.event.eventType !== EventType.GENERIC) { + if (showTimer) { this.eventTimerText = addTextObject( this.scene, - this.banner.x + 8, - this.banner.y + 100, + this.banner.x, + this.banner.y + 2, this.timeToGo(this.event.endDate), TextStyle.WINDOW ); this.eventTimerText.setName("text-event-timer"); this.eventTimerText.setScale(0.15); - this.eventTimerText.setOrigin(0, 0); + this.eventTimerText.setOrigin(0.5, 0); this.add(this.eventTimerText); } @@ -161,7 +193,7 @@ export class TimedEventDisplay extends Phaser.GameObjects.Container { } updateCountdown() { - if (this.event && this.event.eventType !== EventType.GENERIC) { + if (this.event && this.event.eventType !== EventType.NO_TIMER_DISPLAY) { this.eventTimerText.setText(this.timeToGo(this.event.endDate)); } } diff --git a/src/ui/title-ui-handler.ts b/src/ui/title-ui-handler.ts index f7972af2cc2..3bfba71ef08 100644 --- a/src/ui/title-ui-handler.ts +++ b/src/ui/title-ui-handler.ts @@ -103,6 +103,7 @@ export default class TitleUiHandler extends OptionSelectUiHandler { const ui = this.getUi(); if (this.scene.eventManager.isEventActive()) { + this.eventDisplay.setWidth(this.scene.scaledCanvas.width - this.optionSelectBg.width - this.optionSelectBg.x); this.eventDisplay.show(); } From 39362389c7a2cfc37ae79649b1367524dc5bbdeb Mon Sep 17 00:00:00 2001 From: pom-eranian Date: Sat, 26 Oct 2024 13:06:07 -0400 Subject: [PATCH 130/153] [Sprite] October Variant Update (#4608) * 40 Wigglytuff (base fix) @ hanniel * 39 40 174 variant icons * 39 40 174 - Variant Palettes * 359 - Absol Mega Absol [Base Fixes] - @ rival_kieran * 359 Absol Variant icons * 359 Absol Variant palettes * 359 Absol [_masterlist.json] Enabled variants for absol & mega absol * [Sprite][Anim] 275 Shiftree- cropped ear fix - @hamez * Honchcrow Murkrow [Base fixes] * Murkrow Honchkrow - Icons for variant & female murkrow * 198 430 Murkrow Honchkrow Variants [Epic Rare] * [fix] 359 - masterlist - removed ghost entry for exp absol * 527 528 Woobat Swoobat [Epic Rare] @ rival_kieran base fix on woobat back, swoobat front, back palette files for front, back added to masterlist variant icons * [fix] masterlist -removed incorrect entry * 590 591 Foongus Amoongus @ Omniv variant icons variant palettes fixes for base front and back * 587 Emolga [Rare Epic] @ bagonganda icons variants front back base fix variant palettes * [fix] masterlist Added missiing variants. Added Qwuilfish variants Qwilfish icons variant palettes Enabled variants for pokemon in title. 39 40 174 Jigglypff Wigglytuff Igglybuff 587 Emolga 211 Qwilfish * 377 378 379 486 894 895 Regirock Regice Registeel Regigigas Regieleki Regidrago @greenninja757 @_vari_ @splashceles @gonfold @sphinx_sage variant icons variant palettes base fixes for regigigas, regieleki & registeel added all to masterlist * 684 685 Swirlix Slurpuff [Rare Epic] - @ gerolau * 682 683 - Sprizee Aromatisse [Rare Epic] - @ Koda_want_to_sleep * 378 Regice [Base shiny + replacement] - @ Vari * 501 502 503 6503 - Oshawott Dewott Samurott [Base Fix Rare Epic] - @Omniv @yepitscaio * 152 153 154 - Chikorita Bayleef Meganium [Base Fix Rare Epic] - @ corsola_bandit * 807 Zeraora [Epic Rare] - @ luckyluckylucky * 194 195 Wooper Quagsire [Rare Epic] - @ OfficerPorkchops cleaned up wooper's face variant icons added to masterlist palette files * 616 617 Shelmet Accelgor [Base fix, Rare, Epic] - @ Vari shelmet base fixes variant icons variant palettes added to masterlist * 588 589 Karrablast Escavalier [Rare, Epic] - @ Vari variant palettes variant icons added to masterlist * 170 171 Chinchou Lanturn [Rare, Epic] - @ thetruegge variant icons variant palettes added to masterlist * 158 159 160 Totodile Croconaw Feraligatr [Rare, Epic] - @ Dingosig @ Ashhawk variant icons variant palettes added to masterlist * [128] Tauros [Rare Epic] - @ Bibble variant icons variant palettes added to masterlist * 509 510 Purrloin Liepard [Basefix, Rare, Epic] - @ MeganiumOpus variant icons variant palettes base fix 510 liepard added to masterlist * 390 391 392 Chimchar Monferno Infernape [Base Fix, Rare, Epic] @ hanniel.15 base fix all variant icons variant palettes added to masterlist * [fix] masterlist erroneous value on chinchou, lanturn * 455 Carnivine [Base Fix Rare Epic] - @ hamez base fix for front, back variant icons variant palettes added to masterlist * 944 945 Shroodle Grafaiai [Base fix, Shiny fix, Rare, Epic] - @ Vari * 167 168 Spinarak Ariados [Rare, Epic] - @ Thorn @ wormhood * 676 Furfrou [BaseFix Rare Epic] - @ gerolau * Variant removed 509 510 Purrloin Liepard This reverts commit 90ab203708491626ee14a1234d2e5f27a77d129b. * 621 - Druddigon [Rare Epic] - @ Koda_want_to_sleep variant palettes variant icons added to masterlist * Fix misplaced Gen4 variant icons * Remove misplaced Gen4 variant icons * More icon fixes - Shiny Milotic antenna recolour - Shaded variant Eevees and added Partner variants - Swapped Golbat common and rare - Added variant Centiskorch and Gmax * Move misclassified Gen9 icons Also fixes a stray pixel on Fuecoco. * 102 103 2103 Exeggcute Exeggutor [Rare. Epic] - @ clickonflareblitz variant palettes variant icons added to masterlist * 276 277 Taillow Swellow [BaseFix Rare Epic] - @ peng06 variant icons variant palettes base fixes on all spritesheets added to masterlist * [QoL] reordered key for 6713 exp * reformat of masterlist with less whitespace * 1012 1013 Poltchageist, Sinistcha icons, variants, base fixes, my sanity * 172 Pichu [basefix rare epic] * 26 raichu [basefix rare epic] * 25-gmax pikachu [basefix rare epic] * 25 raichu [basefix] added missing female back * 25-beauty-cosplay pikachu * 25-tough-cosplay pikachu [epic rare] * 25-smart-cosplay pikachu * 25-cute-cosplay pikachu * 25-cool-cosplay pikachu * 25-partner pikachu * 25 pikachu * 25-cosplay pikachu * 2026 alolan raichu [basefix rare epic] * 25 pikachu - corrected icon colors, shiny correct colors * 25 other icons * 656 657 froakie frogadier * removed variant images included in commits for 25 26 172 2026, 1012 1013, 656 657 * [masterlist] added 25 26 172 2025 pikachu raichu pichu a-raichu * [masterlist] added 1012 1013 poltchaageist sinistcha * [masterlist] added 656 657 froakie frogadier [GRENINJA MISSING] * 688 689 Binacle Barbaracle [Base Fix, Rare, Epic] - @ saltedcarriemel replaced front static by first frame of exp base fixes variant palettes variant icons added to masterlist * [658] ash-greninja static front variants * 658 greninja, ash greninja [rare epic] base fixes animation standardized front / back variant palettes variant icons added to masterlist * [fix][icons] torchic, combusken, blaziken gender icons * [fix] 658 corrected color error white on knees * Updated variant icon sheets * Reverted override file pushed By Mistake WHY WAS IT THERE. * [fix] icon sheet v1 - removed ".png" from file names --------- Co-authored-by: chaosgrimmon <31082757+chaosgrimmon@users.noreply.github.com> --- public/images/pokemon/1012-counterfeit.png | Bin 673 -> 744 bytes public/images/pokemon/1013-unremarkable.png | Bin 694 -> 1128 bytes public/images/pokemon/154.png | Bin 8824 -> 15328 bytes public/images/pokemon/172-spiky.png | Bin 397 -> 448 bytes public/images/pokemon/172.png | Bin 2785 -> 3026 bytes public/images/pokemon/194.png | Bin 2043 -> 2162 bytes public/images/pokemon/198.png | Bin 2645 -> 2779 bytes public/images/pokemon/2026.png | Bin 874 -> 876 bytes public/images/pokemon/25-beauty-cosplay.png | Bin 777 -> 836 bytes public/images/pokemon/25-cool-cosplay.png | Bin 673 -> 1847 bytes public/images/pokemon/25-cosplay.png | Bin 582 -> 608 bytes public/images/pokemon/25-cute-cosplay.png | Bin 719 -> 734 bytes public/images/pokemon/25-gigantamax.png | Bin 1058 -> 1139 bytes public/images/pokemon/25-partner.png | Bin 7629 -> 8050 bytes public/images/pokemon/25-smart-cosplay.png | Bin 732 -> 762 bytes public/images/pokemon/25-tough-cosplay.png | Bin 626 -> 680 bytes public/images/pokemon/25.png | Bin 7629 -> 8050 bytes public/images/pokemon/26.png | Bin 11356 -> 12547 bytes public/images/pokemon/276.png | Bin 2274 -> 2409 bytes public/images/pokemon/277.png | Bin 8543 -> 9567 bytes public/images/pokemon/359-mega.png | Bin 1077 -> 1136 bytes public/images/pokemon/359.png | Bin 14915 -> 15672 bytes public/images/pokemon/379.png | Bin 8787 -> 9848 bytes public/images/pokemon/390.png | Bin 8022 -> 8258 bytes public/images/pokemon/391.png | Bin 12533 -> 13446 bytes public/images/pokemon/392.png | Bin 14753 -> 16793 bytes public/images/pokemon/40.png | Bin 6948 -> 7262 bytes public/images/pokemon/430.png | Bin 6743 -> 7158 bytes public/images/pokemon/455.png | Bin 12549 -> 13690 bytes public/images/pokemon/486.png | Bin 15358 -> 16248 bytes public/images/pokemon/501.png | Bin 5569 -> 7603 bytes public/images/pokemon/502.png | Bin 4264 -> 5996 bytes public/images/pokemon/503.png | Bin 13682 -> 21811 bytes public/images/pokemon/528.png | Bin 11068 -> 12314 bytes public/images/pokemon/587.png | Bin 11900 -> 13160 bytes public/images/pokemon/590.png | Bin 2697 -> 3705 bytes public/images/pokemon/591.png | Bin 7862 -> 11218 bytes public/images/pokemon/616.png | Bin 3680 -> 3846 bytes public/images/pokemon/6503.png | Bin 1228 -> 1456 bytes public/images/pokemon/656.png | Bin 476 -> 515 bytes public/images/pokemon/657.png | Bin 741 -> 772 bytes public/images/pokemon/658-ash.png | Bin 1324 -> 1244 bytes public/images/pokemon/658.png | Bin 1049 -> 1043 bytes public/images/pokemon/676-dandy.png | Bin 765 -> 787 bytes public/images/pokemon/676-debutante.png | Bin 802 -> 822 bytes public/images/pokemon/676-diamond.png | Bin 807 -> 824 bytes public/images/pokemon/676-heart.png | Bin 813 -> 836 bytes public/images/pokemon/676-kabuki.png | Bin 842 -> 873 bytes public/images/pokemon/676-la-reine.png | Bin 726 -> 746 bytes public/images/pokemon/676-matron.png | Bin 777 -> 798 bytes public/images/pokemon/676-pharaoh.png | Bin 770 -> 793 bytes public/images/pokemon/676-star.png | Bin 838 -> 862 bytes public/images/pokemon/682.png | Bin 412 -> 444 bytes public/images/pokemon/683.png | Bin 758 -> 794 bytes public/images/pokemon/684.png | Bin 391 -> 412 bytes public/images/pokemon/685.png | Bin 543 -> 577 bytes public/images/pokemon/688.json | 58 +- public/images/pokemon/688.png | Bin 618 -> 884 bytes public/images/pokemon/689.json | 58 +- public/images/pokemon/689.png | Bin 1409 -> 1436 bytes public/images/pokemon/894.png | Bin 1033 -> 1108 bytes public/images/pokemon/945.png | Bin 851 -> 954 bytes .../images/pokemon/back/1012-counterfeit.png | Bin 516 -> 568 bytes .../images/pokemon/back/1013-unremarkable.png | Bin 594 -> 636 bytes public/images/pokemon/back/172-spiky.png | Bin 366 -> 389 bytes public/images/pokemon/back/172.png | Bin 2412 -> 2665 bytes public/images/pokemon/back/198.png | Bin 2495 -> 2725 bytes public/images/pokemon/back/2026.png | Bin 753 -> 780 bytes .../images/pokemon/back/25-beauty-cosplay.png | Bin 619 -> 652 bytes .../images/pokemon/back/25-cool-cosplay.png | Bin 576 -> 632 bytes public/images/pokemon/back/25-cosplay.png | Bin 501 -> 516 bytes .../images/pokemon/back/25-cute-cosplay.png | Bin 585 -> 615 bytes public/images/pokemon/back/25-gigantamax.png | Bin 911 -> 2208 bytes public/images/pokemon/back/25-partner.png | Bin 7035 -> 7897 bytes .../images/pokemon/back/25-smart-cosplay.png | Bin 571 -> 604 bytes .../images/pokemon/back/25-tough-cosplay.png | Bin 550 -> 581 bytes public/images/pokemon/back/25.png | Bin 7035 -> 7897 bytes public/images/pokemon/back/26.png | Bin 13005 -> 14492 bytes public/images/pokemon/back/276.png | Bin 2203 -> 2370 bytes public/images/pokemon/back/277.png | Bin 8311 -> 8903 bytes public/images/pokemon/back/379.png | Bin 8137 -> 9936 bytes public/images/pokemon/back/390.png | Bin 7912 -> 8402 bytes public/images/pokemon/back/391.png | Bin 13082 -> 15156 bytes public/images/pokemon/back/392.png | Bin 17452 -> 21205 bytes public/images/pokemon/back/430.png | Bin 8461 -> 9435 bytes public/images/pokemon/back/455.png | Bin 11412 -> 12330 bytes public/images/pokemon/back/486.png | Bin 17450 -> 20756 bytes public/images/pokemon/back/502.png | Bin 2652 -> 4683 bytes public/images/pokemon/back/503.png | Bin 9891 -> 16015 bytes public/images/pokemon/back/527.png | Bin 2436 -> 2519 bytes public/images/pokemon/back/528.png | Bin 8784 -> 10016 bytes public/images/pokemon/back/587.png | Bin 11060 -> 13434 bytes public/images/pokemon/back/590.png | Bin 2468 -> 3724 bytes public/images/pokemon/back/591.png | Bin 7888 -> 11446 bytes public/images/pokemon/back/616.png | Bin 2997 -> 3372 bytes public/images/pokemon/back/6503.png | Bin 1271 -> 1532 bytes public/images/pokemon/back/656.png | Bin 373 -> 405 bytes public/images/pokemon/back/657.png | Bin 665 -> 690 bytes public/images/pokemon/back/658-ash.png | Bin 1043 -> 1114 bytes public/images/pokemon/back/658.png | Bin 895 -> 899 bytes public/images/pokemon/back/676-dandy.png | Bin 715 -> 736 bytes public/images/pokemon/back/676-debutante.png | Bin 782 -> 802 bytes public/images/pokemon/back/676-diamond.png | Bin 696 -> 723 bytes public/images/pokemon/back/676-heart.png | Bin 730 -> 761 bytes public/images/pokemon/back/676-kabuki.png | Bin 729 -> 761 bytes public/images/pokemon/back/676-la-reine.png | Bin 655 -> 682 bytes public/images/pokemon/back/676-matron.png | Bin 740 -> 752 bytes public/images/pokemon/back/676-pharaoh.png | Bin 725 -> 754 bytes public/images/pokemon/back/676-star.png | Bin 741 -> 761 bytes public/images/pokemon/back/682.png | Bin 366 -> 374 bytes public/images/pokemon/back/683.png | Bin 553 -> 588 bytes public/images/pokemon/back/684.png | Bin 325 -> 340 bytes public/images/pokemon/back/685.png | Bin 453 -> 498 bytes public/images/pokemon/back/688.png | Bin 549 -> 755 bytes public/images/pokemon/back/894.png | Bin 994 -> 1050 bytes public/images/pokemon/back/945.png | Bin 679 -> 767 bytes public/images/pokemon/back/female/198.png | Bin 2457 -> 2634 bytes .../pokemon/back/female/25-beauty-cosplay.png | Bin 618 -> 654 bytes .../pokemon/back/female/25-cool-cosplay.png | Bin 582 -> 631 bytes .../images/pokemon/back/female/25-cosplay.png | Bin 501 -> 516 bytes .../pokemon/back/female/25-cute-cosplay.png | Bin 589 -> 611 bytes .../images/pokemon/back/female/25-partner.png | Bin 7097 -> 8317 bytes .../pokemon/back/female/25-smart-cosplay.png | Bin 571 -> 600 bytes .../pokemon/back/female/25-tough-cosplay.png | Bin 550 -> 584 bytes public/images/pokemon/back/female/25.png | Bin 7097 -> 8317 bytes public/images/pokemon/back/female/26.png | Bin 12536 -> 13997 bytes public/images/pokemon/back/shiny/378.png | Bin 7060 -> 10333 bytes public/images/pokemon/back/shiny/658-ash.png | Bin 1043 -> 1116 bytes public/images/pokemon/back/shiny/658.png | Bin 895 -> 899 bytes public/images/pokemon/back/shiny/688.png | Bin 549 -> 755 bytes public/images/pokemon/back/shiny/944.png | Bin 338 -> 2999 bytes public/images/pokemon/back/shiny/945.png | Bin 678 -> 767 bytes public/images/pokemon/exp/2026.png | Bin 57895 -> 67494 bytes public/images/pokemon/exp/359-mega.png | Bin 5065 -> 5305 bytes public/images/pokemon/exp/6503.png | Bin 14944 -> 19998 bytes public/images/pokemon/exp/656.png | Bin 932 -> 1034 bytes public/images/pokemon/exp/657.png | Bin 1593 -> 1656 bytes public/images/pokemon/exp/658-ash.json | 968 +- public/images/pokemon/exp/658-ash.png | Bin 1807 -> 2468 bytes public/images/pokemon/exp/658.png | Bin 2061 -> 2403 bytes public/images/pokemon/exp/682.png | Bin 1797 -> 1927 bytes public/images/pokemon/exp/683.png | Bin 1589 -> 1689 bytes public/images/pokemon/exp/684.png | Bin 2759 -> 2998 bytes public/images/pokemon/exp/685.png | Bin 1657 -> 1736 bytes public/images/pokemon/exp/894.png | Bin 6128 -> 6739 bytes public/images/pokemon/exp/945.png | Bin 1608 -> 4529 bytes public/images/pokemon/exp/back/2026.png | Bin 2773 -> 2911 bytes public/images/pokemon/exp/back/359-mega.png | Bin 4040 -> 4379 bytes public/images/pokemon/exp/back/6503.png | Bin 5601 -> 7916 bytes public/images/pokemon/exp/back/656.png | Bin 778 -> 757 bytes public/images/pokemon/exp/back/657.png | Bin 1268 -> 1201 bytes public/images/pokemon/exp/back/658-ash.json | 341 +- public/images/pokemon/exp/back/658-ash.png | Bin 1385 -> 1755 bytes public/images/pokemon/exp/back/658.json | 278 +- public/images/pokemon/exp/back/658.png | Bin 1367 -> 1653 bytes public/images/pokemon/exp/back/682.png | Bin 1242 -> 1313 bytes public/images/pokemon/exp/back/683.png | Bin 1471 -> 1559 bytes public/images/pokemon/exp/back/684.png | Bin 2223 -> 2345 bytes public/images/pokemon/exp/back/685.png | Bin 1495 -> 1582 bytes public/images/pokemon/exp/back/894.png | Bin 5821 -> 6409 bytes public/images/pokemon/exp/back/944.png | Bin 480 -> 3148 bytes public/images/pokemon/exp/back/945.png | Bin 2498 -> 2697 bytes .../pokemon/exp/back/shiny/658-ash.json | 341 +- .../images/pokemon/exp/back/shiny/658-ash.png | Bin 1385 -> 1755 bytes public/images/pokemon/exp/back/shiny/658.json | 278 +- public/images/pokemon/exp/back/shiny/658.png | Bin 1356 -> 1653 bytes public/images/pokemon/exp/back/shiny/944.png | Bin 480 -> 3148 bytes public/images/pokemon/exp/back/shiny/945.png | Bin 2498 -> 2697 bytes public/images/pokemon/exp/shiny/658-ash.json | 968 +- public/images/pokemon/exp/shiny/658-ash.png | Bin 1807 -> 2468 bytes public/images/pokemon/exp/shiny/658.png | Bin 2061 -> 2403 bytes public/images/pokemon/exp/shiny/684.png | Bin 2730 -> 2998 bytes public/images/pokemon/exp/shiny/944.png | Bin 708 -> 3483 bytes public/images/pokemon/exp/shiny/945.png | Bin 1606 -> 4529 bytes public/images/pokemon/female/154.png | Bin 8625 -> 15026 bytes public/images/pokemon/female/194.png | Bin 1879 -> 2024 bytes public/images/pokemon/female/198.png | Bin 2674 -> 2796 bytes .../pokemon/female/25-beauty-cosplay.png | Bin 770 -> 837 bytes .../images/pokemon/female/25-cool-cosplay.png | Bin 662 -> 1851 bytes public/images/pokemon/female/25-cosplay.png | Bin 574 -> 606 bytes .../images/pokemon/female/25-cute-cosplay.png | Bin 707 -> 743 bytes public/images/pokemon/female/25-partner.png | Bin 7413 -> 8109 bytes .../pokemon/female/25-smart-cosplay.png | Bin 721 -> 760 bytes .../pokemon/female/25-tough-cosplay.png | Bin 615 -> 679 bytes public/images/pokemon/female/25.png | Bin 7413 -> 8109 bytes public/images/pokemon/female/26.png | Bin 10960 -> 11924 bytes .../pokemon/icons/1/25-beauty-cosplay.png | Bin 454 -> 723 bytes .../pokemon/icons/1/25-cool-cosplay.png | Bin 396 -> 538 bytes public/images/pokemon/icons/1/25-cosplay.png | Bin 360 -> 470 bytes .../pokemon/icons/1/25-cute-cosplay.png | Bin 418 -> 613 bytes .../images/pokemon/icons/1/25-gigantamax.png | Bin 411 -> 724 bytes .../pokemon/icons/1/25-smart-cosplay.png | Bin 418 -> 566 bytes .../pokemon/icons/1/25-tough-cosplay.png | Bin 386 -> 549 bytes .../pokemon/icons/1/25s-beauty-cosplay.png | Bin 454 -> 801 bytes .../pokemon/icons/1/25s-cool-cosplay.png | Bin 396 -> 605 bytes public/images/pokemon/icons/1/25s-cosplay.png | Bin 360 -> 522 bytes .../pokemon/icons/1/25s-cute-cosplay.png | Bin 418 -> 707 bytes .../pokemon/icons/1/25s-smart-cosplay.png | Bin 418 -> 611 bytes .../pokemon/icons/1/25s-tough-cosplay.png | Bin 386 -> 601 bytes public/images/pokemon/icons/2/172s.png | Bin 302 -> 258 bytes public/images/pokemon/icons/2/198-f.png | Bin 0 -> 301 bytes public/images/pokemon/icons/2/198s-f.png | Bin 0 -> 362 bytes public/images/pokemon/icons/3/350s.png | Bin 491 -> 850 bytes public/images/pokemon/icons/3/378s.png | Bin 601 -> 3361 bytes public/images/pokemon/icons/7/2026.png | Bin 387 -> 670 bytes public/images/pokemon/icons/7/2026s.png | Bin 418 -> 705 bytes .../images/pokemon/icons/9/1012-artisan.png | Bin 353 -> 332 bytes .../pokemon/icons/9/1012-counterfeit.png | Bin 403 -> 332 bytes .../pokemon/icons/9/1013-unremarkable.png | Bin 396 -> 695 bytes .../images/pokemon/icons/variant/1/102_2.png | Bin 0 -> 650 bytes .../images/pokemon/icons/variant/1/102_3.png | Bin 0 -> 663 bytes .../images/pokemon/icons/variant/1/103_2.png | Bin 0 -> 748 bytes .../images/pokemon/icons/variant/1/103_3.png | Bin 0 -> 752 bytes .../images/pokemon/icons/variant/1/128_2.png | Bin 0 -> 785 bytes .../images/pokemon/icons/variant/1/128_3.png | Bin 0 -> 775 bytes .../pokemon/icons/variant/1/133-partner_2.png | Bin 0 -> 697 bytes .../pokemon/icons/variant/1/133-partner_3.png | Bin 0 -> 692 bytes .../images/pokemon/icons/variant/1/133_2.png | Bin 479 -> 576 bytes .../images/pokemon/icons/variant/1/133_3.png | Bin 476 -> 581 bytes .../icons/variant/1/25-beauty-cosplay_2.png | Bin 0 -> 360 bytes .../icons/variant/1/25-beauty-cosplay_3.png | Bin 0 -> 360 bytes .../icons/variant/1/25-cool-cosplay_2.png | Bin 0 -> 590 bytes .../icons/variant/1/25-cool-cosplay_3.png | Bin 0 -> 599 bytes .../pokemon/icons/variant/1/25-cosplay_2.png | Bin 0 -> 276 bytes .../pokemon/icons/variant/1/25-cosplay_3.png | Bin 0 -> 276 bytes .../icons/variant/1/25-cute-cosplay_2.png | Bin 0 -> 688 bytes .../icons/variant/1/25-cute-cosplay_3.png | Bin 0 -> 737 bytes .../icons/variant/1/25-gigantamax_2.png | Bin 0 -> 341 bytes .../icons/variant/1/25-gigantamax_3.png | Bin 0 -> 345 bytes .../pokemon/icons/variant/1/25-partner_2.png | Bin 0 -> 316 bytes .../pokemon/icons/variant/1/25-partner_3.png | Bin 0 -> 316 bytes .../icons/variant/1/25-smart-cosplay_2.png | Bin 0 -> 646 bytes .../icons/variant/1/25-smart-cosplay_3.png | Bin 0 -> 679 bytes .../icons/variant/1/25-tough-cosplay_2.png | Bin 0 -> 602 bytes .../icons/variant/1/25-tough-cosplay_3.png | Bin 0 -> 622 bytes .../images/pokemon/icons/variant/1/25_2.png | Bin 0 -> 277 bytes .../images/pokemon/icons/variant/1/25_3.png | Bin 0 -> 515 bytes .../images/pokemon/icons/variant/1/26_2.png | Bin 0 -> 683 bytes .../images/pokemon/icons/variant/1/26_3.png | Bin 0 -> 684 bytes .../images/pokemon/icons/variant/1/39_2.png | Bin 0 -> 272 bytes .../images/pokemon/icons/variant/1/39_3.png | Bin 0 -> 272 bytes .../images/pokemon/icons/variant/1/40_2.png | Bin 0 -> 288 bytes .../images/pokemon/icons/variant/1/40_3.png | Bin 0 -> 294 bytes .../images/pokemon/icons/variant/1/42_1.png | Bin 578 -> 554 bytes .../images/pokemon/icons/variant/1/42_2.png | Bin 554 -> 578 bytes .../images/pokemon/icons/variant/2/152_2.png | Bin 0 -> 1852 bytes .../images/pokemon/icons/variant/2/152_3.png | Bin 0 -> 1846 bytes .../images/pokemon/icons/variant/2/153_2.png | Bin 0 -> 1909 bytes .../images/pokemon/icons/variant/2/153_3.png | Bin 0 -> 1908 bytes .../pokemon/icons/variant/2/154-f_2.png | Bin 0 -> 1960 bytes .../pokemon/icons/variant/2/154-f_3.png | Bin 0 -> 2147 bytes .../images/pokemon/icons/variant/2/154_2.png | Bin 0 -> 2156 bytes .../images/pokemon/icons/variant/2/154_3.png | Bin 0 -> 1950 bytes .../images/pokemon/icons/variant/2/158_2.png | Bin 0 -> 630 bytes .../images/pokemon/icons/variant/2/158_3.png | Bin 0 -> 619 bytes .../images/pokemon/icons/variant/2/159_2.png | Bin 0 -> 788 bytes .../images/pokemon/icons/variant/2/159_3.png | Bin 0 -> 739 bytes .../images/pokemon/icons/variant/2/160_2.png | Bin 0 -> 937 bytes .../images/pokemon/icons/variant/2/160_3.png | Bin 0 -> 911 bytes .../images/pokemon/icons/variant/2/167_3.png | Bin 0 -> 564 bytes .../images/pokemon/icons/variant/2/168_3.png | Bin 0 -> 345 bytes .../images/pokemon/icons/variant/2/170_2.png | Bin 0 -> 540 bytes .../images/pokemon/icons/variant/2/170_3.png | Bin 0 -> 534 bytes .../images/pokemon/icons/variant/2/171_2.png | Bin 0 -> 669 bytes .../images/pokemon/icons/variant/2/171_3.png | Bin 0 -> 654 bytes .../pokemon/icons/variant/2/172-spiky_2.png | Bin 0 -> 251 bytes .../pokemon/icons/variant/2/172-spiky_3.png | Bin 0 -> 251 bytes .../images/pokemon/icons/variant/2/172_2.png | Bin 0 -> 244 bytes .../images/pokemon/icons/variant/2/172_3.png | Bin 0 -> 467 bytes .../images/pokemon/icons/variant/2/174_2.png | Bin 0 -> 257 bytes .../images/pokemon/icons/variant/2/174_3.png | Bin 0 -> 246 bytes .../images/pokemon/icons/variant/2/194_2.png | Bin 0 -> 270 bytes .../images/pokemon/icons/variant/2/194_3.png | Bin 0 -> 266 bytes .../images/pokemon/icons/variant/2/195_2.png | Bin 0 -> 280 bytes .../images/pokemon/icons/variant/2/195_3.png | Bin 0 -> 280 bytes .../pokemon/icons/variant/2/198-f_2.png | Bin 0 -> 293 bytes .../pokemon/icons/variant/2/198-f_3.png | Bin 0 -> 293 bytes .../images/pokemon/icons/variant/2/198_2.png | Bin 0 -> 293 bytes .../images/pokemon/icons/variant/2/198_3.png | Bin 0 -> 293 bytes .../images/pokemon/icons/variant/2/211_2.png | Bin 0 -> 386 bytes .../images/pokemon/icons/variant/2/211_3.png | Bin 0 -> 362 bytes .../images/pokemon/icons/variant/3/255_2.png | Bin 534 -> 526 bytes .../images/pokemon/icons/variant/3/255_3.png | Bin 540 -> 542 bytes .../images/pokemon/icons/variant/3/256_2.png | Bin 751 -> 743 bytes .../images/pokemon/icons/variant/3/256_3.png | Bin 750 -> 735 bytes .../images/pokemon/icons/variant/3/257_3.png | Bin 990 -> 1001 bytes .../images/pokemon/icons/variant/3/276_2.png | Bin 0 -> 468 bytes .../images/pokemon/icons/variant/3/276_3.png | Bin 0 -> 460 bytes .../images/pokemon/icons/variant/3/277_2.png | Bin 0 -> 601 bytes .../images/pokemon/icons/variant/3/277_3.png | Bin 0 -> 590 bytes .../pokemon/icons/variant/3/359-mega_2.png | Bin 0 -> 358 bytes .../pokemon/icons/variant/3/359-mega_3.png | Bin 0 -> 354 bytes .../images/pokemon/icons/variant/3/359_2.png | Bin 0 -> 317 bytes .../images/pokemon/icons/variant/3/359_3.png | Bin 0 -> 319 bytes .../images/pokemon/icons/variant/3/377_2.png | Bin 0 -> 813 bytes .../images/pokemon/icons/variant/3/377_3.png | Bin 0 -> 792 bytes .../images/pokemon/icons/variant/3/378_1.png | Bin 0 -> 3404 bytes .../images/pokemon/icons/variant/3/378_2.png | Bin 0 -> 688 bytes .../images/pokemon/icons/variant/3/378_3.png | Bin 0 -> 644 bytes .../images/pokemon/icons/variant/3/379_2.png | Bin 0 -> 773 bytes .../images/pokemon/icons/variant/3/379_3.png | Bin 0 -> 714 bytes .../images/pokemon/icons/variant/3/427_2.png | Bin 575 -> 0 bytes .../images/pokemon/icons/variant/3/427_3.png | Bin 579 -> 0 bytes .../pokemon/icons/variant/3/428-mega_2.png | Bin 728 -> 0 bytes .../images/pokemon/icons/variant/3/428_2.png | Bin 576 -> 0 bytes .../images/pokemon/icons/variant/3/429_1.png | Bin 684 -> 0 bytes .../images/pokemon/icons/variant/3/429_2.png | Bin 698 -> 0 bytes .../images/pokemon/icons/variant/3/429_3.png | Bin 680 -> 0 bytes .../pokemon/icons/variant/3/475-mega_3.png | Bin 529 -> 0 bytes .../images/pokemon/icons/variant/3/475_3.png | Bin 430 -> 0 bytes .../images/pokemon/icons/variant/4/390_2.png | Bin 0 -> 760 bytes .../images/pokemon/icons/variant/4/390_3.png | Bin 0 -> 748 bytes .../images/pokemon/icons/variant/4/391_2.png | Bin 0 -> 766 bytes .../images/pokemon/icons/variant/4/391_3.png | Bin 0 -> 777 bytes .../images/pokemon/icons/variant/4/392_2.png | Bin 0 -> 934 bytes .../images/pokemon/icons/variant/4/392_3.png | Bin 0 -> 938 bytes .../images/pokemon/icons/variant/4/427_2.png | Bin 376 -> 575 bytes .../images/pokemon/icons/variant/4/427_3.png | Bin 371 -> 579 bytes .../pokemon/icons/variant/4/428-mega_2.png | Bin 463 -> 728 bytes .../images/pokemon/icons/variant/4/428_2.png | Bin 414 -> 576 bytes .../images/pokemon/icons/variant/4/429_1.png | Bin 612 -> 684 bytes .../images/pokemon/icons/variant/4/429_2.png | Bin 606 -> 698 bytes .../images/pokemon/icons/variant/4/429_3.png | Bin 595 -> 680 bytes .../images/pokemon/icons/variant/4/430_2.png | Bin 0 -> 358 bytes .../images/pokemon/icons/variant/4/430_3.png | Bin 0 -> 357 bytes .../images/pokemon/icons/variant/4/455_2.png | Bin 0 -> 331 bytes .../images/pokemon/icons/variant/4/455_3.png | Bin 0 -> 331 bytes .../images/pokemon/icons/variant/4/486_2.png | Bin 0 -> 963 bytes .../images/pokemon/icons/variant/4/486_3.png | Bin 0 -> 1005 bytes .../images/pokemon/icons/variant/5/501_2.png | Bin 0 -> 358 bytes .../images/pokemon/icons/variant/5/501_3.png | Bin 0 -> 590 bytes .../images/pokemon/icons/variant/5/502_2.png | Bin 0 -> 407 bytes .../images/pokemon/icons/variant/5/502_3.png | Bin 0 -> 721 bytes .../images/pokemon/icons/variant/5/503_2.png | Bin 0 -> 486 bytes .../images/pokemon/icons/variant/5/503_3.png | Bin 0 -> 1008 bytes .../images/pokemon/icons/variant/5/527_2.png | Bin 0 -> 292 bytes .../images/pokemon/icons/variant/5/527_3.png | Bin 0 -> 292 bytes .../images/pokemon/icons/variant/5/528_2.png | Bin 0 -> 368 bytes .../images/pokemon/icons/variant/5/528_3.png | Bin 0 -> 365 bytes .../images/pokemon/icons/variant/5/587_2.png | Bin 0 -> 294 bytes .../images/pokemon/icons/variant/5/587_3.png | Bin 0 -> 294 bytes .../images/pokemon/icons/variant/5/588_2.png | Bin 0 -> 468 bytes .../images/pokemon/icons/variant/5/588_3.png | Bin 0 -> 468 bytes .../images/pokemon/icons/variant/5/589_2.png | Bin 0 -> 708 bytes .../images/pokemon/icons/variant/5/589_3.png | Bin 0 -> 729 bytes .../images/pokemon/icons/variant/5/590_2.png | Bin 0 -> 319 bytes .../images/pokemon/icons/variant/5/590_3.png | Bin 0 -> 325 bytes .../images/pokemon/icons/variant/5/591_2.png | Bin 0 -> 391 bytes .../images/pokemon/icons/variant/5/591_3.png | Bin 0 -> 393 bytes .../images/pokemon/icons/variant/5/616_2.png | Bin 0 -> 513 bytes .../images/pokemon/icons/variant/5/616_3.png | Bin 0 -> 508 bytes .../images/pokemon/icons/variant/5/617_2.png | Bin 0 -> 687 bytes .../images/pokemon/icons/variant/5/617_3.png | Bin 0 -> 669 bytes .../images/pokemon/icons/variant/5/621_2.png | Bin 0 -> 714 bytes .../images/pokemon/icons/variant/5/621_3.png | Bin 0 -> 720 bytes .../images/pokemon/icons/variant/6/656_2.png | Bin 0 -> 633 bytes .../images/pokemon/icons/variant/6/656_3.png | Bin 0 -> 639 bytes .../images/pokemon/icons/variant/6/657_2.png | Bin 0 -> 642 bytes .../images/pokemon/icons/variant/6/657_3.png | Bin 0 -> 714 bytes .../pokemon/icons/variant/6/658-ash_2.png | Bin 0 -> 954 bytes .../pokemon/icons/variant/6/658-ash_3.png | Bin 0 -> 948 bytes .../images/pokemon/icons/variant/6/658_2.png | Bin 0 -> 774 bytes .../images/pokemon/icons/variant/6/658_3.png | Bin 0 -> 783 bytes .../pokemon/icons/variant/6/676-dandy_2.png | Bin 0 -> 893 bytes .../pokemon/icons/variant/6/676-dandy_3.png | Bin 0 -> 884 bytes .../icons/variant/6/676-debutante_2.png | Bin 0 -> 897 bytes .../icons/variant/6/676-debutante_3.png | Bin 0 -> 900 bytes .../pokemon/icons/variant/6/676-diamond_2.png | Bin 0 -> 868 bytes .../pokemon/icons/variant/6/676-diamond_3.png | Bin 0 -> 842 bytes .../pokemon/icons/variant/6/676-heart_2.png | Bin 0 -> 828 bytes .../pokemon/icons/variant/6/676-heart_3.png | Bin 0 -> 812 bytes .../pokemon/icons/variant/6/676-kabuki_2.png | Bin 0 -> 815 bytes .../pokemon/icons/variant/6/676-kabuki_3.png | Bin 0 -> 917 bytes .../icons/variant/6/676-la-reine_2.png | Bin 0 -> 872 bytes .../icons/variant/6/676-la-reine_3.png | Bin 0 -> 868 bytes .../pokemon/icons/variant/6/676-matron_2.png | Bin 0 -> 810 bytes .../pokemon/icons/variant/6/676-matron_3.png | Bin 0 -> 884 bytes .../pokemon/icons/variant/6/676-pharaoh_2.png | Bin 0 -> 908 bytes .../pokemon/icons/variant/6/676-pharaoh_3.png | Bin 0 -> 928 bytes .../pokemon/icons/variant/6/676-star_2.png | Bin 0 -> 940 bytes .../pokemon/icons/variant/6/676-star_3.png | Bin 0 -> 948 bytes .../images/pokemon/icons/variant/6/676_2.png | Bin 0 -> 821 bytes .../images/pokemon/icons/variant/6/676_3.png | Bin 0 -> 831 bytes .../images/pokemon/icons/variant/6/682_2.png | Bin 0 -> 474 bytes .../images/pokemon/icons/variant/6/682_3.png | Bin 0 -> 480 bytes .../images/pokemon/icons/variant/6/683_2.png | Bin 0 -> 726 bytes .../images/pokemon/icons/variant/6/683_3.png | Bin 0 -> 732 bytes .../images/pokemon/icons/variant/6/684_2.png | Bin 0 -> 467 bytes .../images/pokemon/icons/variant/6/684_3.png | Bin 0 -> 245 bytes .../images/pokemon/icons/variant/6/685_2.png | Bin 0 -> 688 bytes .../images/pokemon/icons/variant/6/685_3.png | Bin 0 -> 306 bytes .../images/pokemon/icons/variant/6/688_2.png | Bin 0 -> 326 bytes .../images/pokemon/icons/variant/6/688_3.png | Bin 0 -> 326 bytes .../images/pokemon/icons/variant/6/689_2.png | Bin 0 -> 434 bytes .../images/pokemon/icons/variant/6/689_3.png | Bin 0 -> 434 bytes .../images/pokemon/icons/variant/7/2026_2.png | Bin 0 -> 719 bytes .../images/pokemon/icons/variant/7/2026_3.png | Bin 0 -> 738 bytes .../images/pokemon/icons/variant/7/2103_2.png | Bin 0 -> 901 bytes .../images/pokemon/icons/variant/7/2103_3.png | Bin 0 -> 882 bytes .../images/pokemon/icons/variant/7/807_2.png | Bin 0 -> 780 bytes .../images/pokemon/icons/variant/7/807_3.png | Bin 0 -> 780 bytes .../images/pokemon/icons/variant/8/6503_2.png | Bin 0 -> 491 bytes .../images/pokemon/icons/variant/8/6503_3.png | Bin 0 -> 1024 bytes .../icons/variant/8/851-gigantamax.png | Bin 0 -> 893 bytes .../icons/variant/8/851-gigantamax_2.png | Bin 0 -> 891 bytes .../icons/variant/8/851-gigantamax_3.png | Bin 0 -> 907 bytes .../icons/variant/8/851s-gigantamax.png | Bin 0 -> 879 bytes .../images/pokemon/icons/variant/8/894_2.png | Bin 0 -> 859 bytes .../images/pokemon/icons/variant/8/894_3.png | Bin 0 -> 784 bytes .../images/pokemon/icons/variant/8/895_2.png | Bin 0 -> 753 bytes .../images/pokemon/icons/variant/8/895_3.png | Bin 0 -> 751 bytes .../images/pokemon/icons/variant/8/909_2.png | Bin 543 -> 0 bytes .../images/pokemon/icons/variant/8/909_3.png | Bin 560 -> 0 bytes .../pokemon/icons/variant/{8 => 9}/1003_2.png | Bin .../pokemon/icons/variant/{8 => 9}/1003_3.png | Bin .../pokemon/icons/variant/{8 => 9}/1006_2.png | Bin .../pokemon/icons/variant/{8 => 9}/1006_3.png | Bin .../pokemon/icons/variant/{8 => 9}/1010_2.png | Bin .../pokemon/icons/variant/{8 => 9}/1010_3.png | Bin .../icons/variant/9/1012-counterfeit_2.png | Bin 0 -> 334 bytes .../icons/variant/9/1012-counterfeit_3.png | Bin 0 -> 338 bytes .../icons/variant/9/1013-unremarkable_2.png | Bin 0 -> 686 bytes .../icons/variant/9/1013-unremarkable_3.png | Bin 0 -> 701 bytes .../images/pokemon/icons/variant/9/909_2.png | Bin 554 -> 543 bytes .../images/pokemon/icons/variant/9/909_3.png | Bin 568 -> 560 bytes .../pokemon/icons/variant/{8 => 9}/912_2.png | Bin .../pokemon/icons/variant/{8 => 9}/912_3.png | Bin .../pokemon/icons/variant/{8 => 9}/913_2.png | Bin .../pokemon/icons/variant/{8 => 9}/913_3.png | Bin .../pokemon/icons/variant/{8 => 9}/914_2.png | Bin .../pokemon/icons/variant/{8 => 9}/914_3.png | Bin .../pokemon/icons/variant/{8 => 9}/940_2.png | Bin .../pokemon/icons/variant/{8 => 9}/940_3.png | Bin .../pokemon/icons/variant/{8 => 9}/941_2.png | Bin .../pokemon/icons/variant/{8 => 9}/941_3.png | Bin .../images/pokemon/icons/variant/9/944_2.png | Bin 0 -> 3246 bytes .../images/pokemon/icons/variant/9/944_3.png | Bin 0 -> 3229 bytes .../images/pokemon/icons/variant/9/945_2.png | Bin 0 -> 3584 bytes .../images/pokemon/icons/variant/9/945_3.png | Bin 0 -> 3582 bytes .../pokemon/icons/variant/{8 => 9}/953_2.png | Bin .../pokemon/icons/variant/{8 => 9}/953_3.png | Bin .../pokemon/icons/variant/{8 => 9}/954_2.png | Bin .../pokemon/icons/variant/{8 => 9}/954_3.png | Bin .../pokemon/icons/variant/{8 => 9}/981_2.png | Bin .../pokemon/icons/variant/{8 => 9}/981_3.png | Bin public/images/pokemon/shiny/194.png | Bin 2044 -> 2171 bytes public/images/pokemon/shiny/378.png | Bin 7086 -> 10359 bytes public/images/pokemon/shiny/658-ash.png | Bin 1150 -> 1247 bytes public/images/pokemon/shiny/658.png | Bin 1048 -> 1043 bytes public/images/pokemon/shiny/688.json | 58 +- public/images/pokemon/shiny/688.png | Bin 618 -> 884 bytes public/images/pokemon/shiny/689.json | 58 +- public/images/pokemon/shiny/689.png | Bin 1408 -> 1436 bytes public/images/pokemon/shiny/944.png | Bin 373 -> 3042 bytes public/images/pokemon/shiny/945.png | Bin 851 -> 953 bytes public/images/pokemon/shiny/female/194.png | Bin 1880 -> 2026 bytes .../pokemon/variant/1012-counterfeit.json | 44 + .../pokemon/variant/1013-unremarkable.json | 48 + public/images/pokemon/variant/102.json | 20 + public/images/pokemon/variant/103.json | 28 + public/images/pokemon/variant/128.json | 32 + public/images/pokemon/variant/152.json | 28 + public/images/pokemon/variant/153.json | 28 + public/images/pokemon/variant/154.json | 30 + public/images/pokemon/variant/158.json | 27 + public/images/pokemon/variant/159.json | 33 + public/images/pokemon/variant/160.json | 27 + public/images/pokemon/variant/167.json | 31 + public/images/pokemon/variant/168.json | 32 + public/images/pokemon/variant/170.json | 34 + public/images/pokemon/variant/171.json | 30 + public/images/pokemon/variant/172-spiky.json | 30 + public/images/pokemon/variant/172.json | 29 + public/images/pokemon/variant/174.json | 20 + public/images/pokemon/variant/194.json | 24 + public/images/pokemon/variant/195.json | 26 + public/images/pokemon/variant/198.json | 34 + public/images/pokemon/variant/2026.json | 34 + public/images/pokemon/variant/2103.json | 28 + public/images/pokemon/variant/211.json | 28 + .../pokemon/variant/25-beauty-cosplay.json | 49 + .../pokemon/variant/25-cool-cosplay.json | 49 + public/images/pokemon/variant/25-cosplay.json | 36 + .../pokemon/variant/25-cute-cosplay.json | 53 + .../images/pokemon/variant/25-gigantamax.json | 35 + public/images/pokemon/variant/25-partner.json | 36 + .../pokemon/variant/25-smart-cosplay.json | 42 + .../pokemon/variant/25-tough-cosplay.json | 43 + public/images/pokemon/variant/25.json | 36 + public/images/pokemon/variant/26.json | 36 + public/images/pokemon/variant/276.json | 32 + public/images/pokemon/variant/277.json | 34 + public/images/pokemon/variant/359-mega.json | 30 + public/images/pokemon/variant/359.json | 34 + public/images/pokemon/variant/377.json | 28 + public/images/pokemon/variant/378.json | 38 + public/images/pokemon/variant/379.json | 30 + public/images/pokemon/variant/39.json | 26 + public/images/pokemon/variant/390.json | 34 + public/images/pokemon/variant/391.json | 40 + public/images/pokemon/variant/392.json | 54 + public/images/pokemon/variant/40.json | 27 + public/images/pokemon/variant/430.json | 40 + public/images/pokemon/variant/455.json | 35 + public/images/pokemon/variant/486.json | 41 + public/images/pokemon/variant/501.json | 33 + public/images/pokemon/variant/502.json | 33 + public/images/pokemon/variant/503.json | 37 + public/images/pokemon/variant/527.json | 28 + public/images/pokemon/variant/528.json | 38 + public/images/pokemon/variant/587.json | 33 + public/images/pokemon/variant/588.json | 33 + public/images/pokemon/variant/589.json | 32 + public/images/pokemon/variant/590.json | 30 + public/images/pokemon/variant/591.json | 42 + public/images/pokemon/variant/616.json | 30 + public/images/pokemon/variant/617.json | 30 + public/images/pokemon/variant/621.json | 28 + public/images/pokemon/variant/6503.json | 34 + public/images/pokemon/variant/656.json | 32 + public/images/pokemon/variant/657.json | 32 + public/images/pokemon/variant/658-ash.json | 44 + public/images/pokemon/variant/658.json | 34 + public/images/pokemon/variant/676-dandy.json | 30 + .../images/pokemon/variant/676-debutante.json | 30 + .../images/pokemon/variant/676-diamond.json | 28 + public/images/pokemon/variant/676-heart.json | 28 + public/images/pokemon/variant/676-kabuki.json | 36 + .../images/pokemon/variant/676-la-reine.json | 32 + public/images/pokemon/variant/676-matron.json | 30 + .../images/pokemon/variant/676-pharaoh.json | 30 + public/images/pokemon/variant/676-star.json | 28 + public/images/pokemon/variant/676.json | 21 + public/images/pokemon/variant/682.json | 26 + public/images/pokemon/variant/683.json | 32 + public/images/pokemon/variant/684.json | 24 + public/images/pokemon/variant/685.json | 28 + public/images/pokemon/variant/688.json | 33 + public/images/pokemon/variant/689.json | 31 + public/images/pokemon/variant/807.json | 28 + public/images/pokemon/variant/894.json | 28 + public/images/pokemon/variant/895.json | 32 + public/images/pokemon/variant/944.json | 42 + public/images/pokemon/variant/945.json | 53 + .../images/pokemon/variant/_masterlist.json | 13563 +++------------- .../variant/back/1012-counterfeit.json | 34 + .../variant/back/1013-unremarkable.json | 36 + public/images/pokemon/variant/back/102.json | 20 + public/images/pokemon/variant/back/103.json | 28 + public/images/pokemon/variant/back/128.json | 30 + public/images/pokemon/variant/back/152.json | 26 + public/images/pokemon/variant/back/153.json | 26 + public/images/pokemon/variant/back/154.json | 26 + public/images/pokemon/variant/back/158.json | 29 + public/images/pokemon/variant/back/159.json | 29 + public/images/pokemon/variant/back/160.json | 29 + public/images/pokemon/variant/back/167.json | 24 + public/images/pokemon/variant/back/168.json | 29 + public/images/pokemon/variant/back/170.json | 30 + public/images/pokemon/variant/back/171.json | 30 + .../pokemon/variant/back/172-spiky.json | 23 + .../pokemon/variant/back/172-spiky_2.png | Bin 0 -> 389 bytes .../pokemon/variant/back/172-spiky_3.png | Bin 0 -> 389 bytes public/images/pokemon/variant/back/172.json | 23 + public/images/pokemon/variant/back/172_2.png | Bin 0 -> 2665 bytes public/images/pokemon/variant/back/172_3.png | Bin 0 -> 2665 bytes public/images/pokemon/variant/back/174.json | 14 + public/images/pokemon/variant/back/194.json | 20 + public/images/pokemon/variant/back/195.json | 26 + public/images/pokemon/variant/back/198.json | 26 + public/images/pokemon/variant/back/2026.json | 31 + public/images/pokemon/variant/back/2103.json | 28 + public/images/pokemon/variant/back/211.json | 22 + .../variant/back/25-beauty-cosplay.json | 30 + .../pokemon/variant/back/25-cool-cosplay.json | 31 + .../pokemon/variant/back/25-cosplay.json | 26 + .../pokemon/variant/back/25-cute-cosplay.json | 32 + .../pokemon/variant/back/25-gigantamax.json | 30 + .../pokemon/variant/back/25-partner.json | 26 + .../variant/back/25-smart-cosplay.json | 32 + .../variant/back/25-tough-cosplay.json | 35 + public/images/pokemon/variant/back/25.json | 26 + public/images/pokemon/variant/back/26.json | 34 + public/images/pokemon/variant/back/276.json | 32 + public/images/pokemon/variant/back/277.json | 36 + .../images/pokemon/variant/back/359-mega.json | 24 + public/images/pokemon/variant/back/359.json | 24 + public/images/pokemon/variant/back/377.json | 26 + public/images/pokemon/variant/back/378.json | 29 + public/images/pokemon/variant/back/379.json | 26 + public/images/pokemon/variant/back/39.json | 16 + public/images/pokemon/variant/back/390.json | 32 + public/images/pokemon/variant/back/391.json | 36 + public/images/pokemon/variant/back/392.json | 42 + public/images/pokemon/variant/back/40.json | 17 + public/images/pokemon/variant/back/430.json | 34 + public/images/pokemon/variant/back/455.json | 34 + public/images/pokemon/variant/back/486.json | 32 + public/images/pokemon/variant/back/501.json | 24 + public/images/pokemon/variant/back/502.json | 28 + public/images/pokemon/variant/back/503.json | 33 + public/images/pokemon/variant/back/527.json | 20 + public/images/pokemon/variant/back/528.json | 30 + public/images/pokemon/variant/back/587.json | 28 + public/images/pokemon/variant/back/588.json | 20 + public/images/pokemon/variant/back/589.json | 30 + public/images/pokemon/variant/back/590.json | 30 + public/images/pokemon/variant/back/591.json | 28 + public/images/pokemon/variant/back/616.json | 26 + public/images/pokemon/variant/back/617.json | 30 + public/images/pokemon/variant/back/621.json | 26 + public/images/pokemon/variant/back/6503.json | 38 + public/images/pokemon/variant/back/656.json | 24 + public/images/pokemon/variant/back/657.json | 24 + .../images/pokemon/variant/back/658-ash.json | 38 + public/images/pokemon/variant/back/658.json | 26 + .../pokemon/variant/back/676-dandy.json | 28 + .../pokemon/variant/back/676-debutante.json | 28 + .../pokemon/variant/back/676-diamond.json | 30 + .../pokemon/variant/back/676-heart.json | 30 + .../pokemon/variant/back/676-kabuki.json | 36 + .../pokemon/variant/back/676-la-reine.json | 28 + .../pokemon/variant/back/676-matron.json | 29 + .../pokemon/variant/back/676-pharaoh.json | 30 + .../images/pokemon/variant/back/676-star.json | 30 + public/images/pokemon/variant/back/676.json | 23 + public/images/pokemon/variant/back/682.json | 20 + public/images/pokemon/variant/back/683.json | 20 + public/images/pokemon/variant/back/684.json | 18 + public/images/pokemon/variant/back/685.json | 28 + public/images/pokemon/variant/back/688.json | 30 + public/images/pokemon/variant/back/689.json | 31 + public/images/pokemon/variant/back/807.json | 28 + public/images/pokemon/variant/back/894.json | 24 + public/images/pokemon/variant/back/895.json | 26 + public/images/pokemon/variant/back/944.json | 44 + public/images/pokemon/variant/back/945.json | 38 + .../pokemon/variant/back/female/154.json | 26 + .../pokemon/variant/back/female/194.json | 20 + .../pokemon/variant/back/female/195.json | 24 + .../pokemon/variant/back/female/198.json | 26 + .../back/female/25-beauty-cosplay.json | 32 + .../variant/back/female/25-cool-cosplay.json | 31 + .../variant/back/female/25-cosplay.json | 26 + .../variant/back/female/25-cute-cosplay.json | 32 + .../variant/back/female/25-partner.json | 26 + .../variant/back/female/25-smart-cosplay.json | 32 + .../variant/back/female/25-tough-cosplay.json | 35 + .../pokemon/variant/back/female/25.json | 26 + .../pokemon/variant/back/female/26.json | 33 + public/images/pokemon/variant/exp/2026.json | 34 + public/images/pokemon/variant/exp/2103.json | 28 + .../images/pokemon/variant/exp/359-mega.json | 34 + public/images/pokemon/variant/exp/6503.json | 37 + public/images/pokemon/variant/exp/656.json | 32 + public/images/pokemon/variant/exp/657.json | 32 + .../images/pokemon/variant/exp/658-ash.json | 44 + public/images/pokemon/variant/exp/658.json | 34 + public/images/pokemon/variant/exp/676.json | 22 + public/images/pokemon/variant/exp/682.json | 28 + public/images/pokemon/variant/exp/683.json | 32 + public/images/pokemon/variant/exp/684.json | 30 + public/images/pokemon/variant/exp/685.json | 28 + public/images/pokemon/variant/exp/688.json | 33 + public/images/pokemon/variant/exp/689.json | 31 + public/images/pokemon/variant/exp/807.json | 36 + public/images/pokemon/variant/exp/894.json | 27 + public/images/pokemon/variant/exp/895.json | 34 + public/images/pokemon/variant/exp/944.json | 42 + public/images/pokemon/variant/exp/945.json | 53 + .../images/pokemon/variant/exp/back/2026.json | 31 + .../images/pokemon/variant/exp/back/2103.json | 28 + .../pokemon/variant/exp/back/359-mega.json | 24 + .../images/pokemon/variant/exp/back/6503.json | 35 + .../images/pokemon/variant/exp/back/656.json | 24 + .../images/pokemon/variant/exp/back/657.json | 24 + .../pokemon/variant/exp/back/658-ash.json | 38 + .../images/pokemon/variant/exp/back/658.json | 26 + .../images/pokemon/variant/exp/back/676.json | 21 + .../images/pokemon/variant/exp/back/682.json | 21 + .../images/pokemon/variant/exp/back/683.json | 20 + .../images/pokemon/variant/exp/back/684.json | 22 + .../images/pokemon/variant/exp/back/685.json | 26 + .../images/pokemon/variant/exp/back/688.json | 30 + .../images/pokemon/variant/exp/back/689.json | 31 + .../images/pokemon/variant/exp/back/807.json | 38 + .../images/pokemon/variant/exp/back/894.json | 24 + .../images/pokemon/variant/exp/back/895.json | 28 + .../images/pokemon/variant/exp/back/944.json | 34 + .../images/pokemon/variant/exp/back/945.json | 43 + public/images/pokemon/variant/female/154.json | 30 + public/images/pokemon/variant/female/194.json | 24 + public/images/pokemon/variant/female/195.json | 25 + public/images/pokemon/variant/female/198.json | 34 + .../variant/female/25-beauty-cosplay.json | 49 + .../variant/female/25-cool-cosplay.json | 49 + .../pokemon/variant/female/25-cosplay.json | 36 + .../variant/female/25-cute-cosplay.json | 43 + .../pokemon/variant/female/25-partner.json | 36 + .../variant/female/25-smart-cosplay.json | 42 + .../variant/female/25-tough-cosplay.json | 43 + public/images/pokemon/variant/female/25.json | 36 + public/images/pokemon/variant/female/26.json | 39 + public/images/pokemon_icons_1v.json | 4037 +++-- public/images/pokemon_icons_1v.png | Bin 50464 -> 58708 bytes public/images/pokemon_icons_2v.json | 5867 +++++-- public/images/pokemon_icons_2v.png | Bin 29126 -> 37175 bytes public/images/pokemon_icons_3v.json | 6070 +++++-- public/images/pokemon_icons_3v.png | Bin 39375 -> 44779 bytes public/images/pokemon_icons_4v.json | 5797 +++++-- public/images/pokemon_icons_4v.png | Bin 37578 -> 42411 bytes public/images/pokemon_icons_5v.json | 5979 +++++-- public/images/pokemon_icons_5v.png | Bin 35204 -> 41975 bytes public/images/pokemon_icons_6v.json | 4929 ++++-- public/images/pokemon_icons_6v.png | Bin 26654 -> 35860 bytes public/images/pokemon_icons_7v.json | 3935 +++-- public/images/pokemon_icons_7v.png | Bin 25764 -> 27054 bytes public/images/pokemon_icons_8v.json | 5419 ++++-- public/images/pokemon_icons_8v.png | Bin 41393 -> 46264 bytes public/images/pokemon_icons_9v.json | 4341 +++-- public/images/pokemon_icons_9v.png | Bin 32551 -> 35130 bytes 721 files changed, 46008 insertions(+), 24828 deletions(-) create mode 100644 public/images/pokemon/icons/2/198-f.png create mode 100644 public/images/pokemon/icons/2/198s-f.png create mode 100644 public/images/pokemon/icons/variant/1/102_2.png create mode 100644 public/images/pokemon/icons/variant/1/102_3.png create mode 100644 public/images/pokemon/icons/variant/1/103_2.png create mode 100644 public/images/pokemon/icons/variant/1/103_3.png create mode 100644 public/images/pokemon/icons/variant/1/128_2.png create mode 100644 public/images/pokemon/icons/variant/1/128_3.png create mode 100644 public/images/pokemon/icons/variant/1/133-partner_2.png create mode 100644 public/images/pokemon/icons/variant/1/133-partner_3.png create mode 100644 public/images/pokemon/icons/variant/1/25-beauty-cosplay_2.png create mode 100644 public/images/pokemon/icons/variant/1/25-beauty-cosplay_3.png create mode 100644 public/images/pokemon/icons/variant/1/25-cool-cosplay_2.png create mode 100644 public/images/pokemon/icons/variant/1/25-cool-cosplay_3.png create mode 100644 public/images/pokemon/icons/variant/1/25-cosplay_2.png create mode 100644 public/images/pokemon/icons/variant/1/25-cosplay_3.png create mode 100644 public/images/pokemon/icons/variant/1/25-cute-cosplay_2.png create mode 100644 public/images/pokemon/icons/variant/1/25-cute-cosplay_3.png create mode 100644 public/images/pokemon/icons/variant/1/25-gigantamax_2.png create mode 100644 public/images/pokemon/icons/variant/1/25-gigantamax_3.png create mode 100644 public/images/pokemon/icons/variant/1/25-partner_2.png create mode 100644 public/images/pokemon/icons/variant/1/25-partner_3.png create mode 100644 public/images/pokemon/icons/variant/1/25-smart-cosplay_2.png create mode 100644 public/images/pokemon/icons/variant/1/25-smart-cosplay_3.png create mode 100644 public/images/pokemon/icons/variant/1/25-tough-cosplay_2.png create mode 100644 public/images/pokemon/icons/variant/1/25-tough-cosplay_3.png create mode 100644 public/images/pokemon/icons/variant/1/25_2.png create mode 100644 public/images/pokemon/icons/variant/1/25_3.png create mode 100644 public/images/pokemon/icons/variant/1/26_2.png create mode 100644 public/images/pokemon/icons/variant/1/26_3.png create mode 100644 public/images/pokemon/icons/variant/1/39_2.png create mode 100644 public/images/pokemon/icons/variant/1/39_3.png create mode 100644 public/images/pokemon/icons/variant/1/40_2.png create mode 100644 public/images/pokemon/icons/variant/1/40_3.png create mode 100644 public/images/pokemon/icons/variant/2/152_2.png create mode 100644 public/images/pokemon/icons/variant/2/152_3.png create mode 100644 public/images/pokemon/icons/variant/2/153_2.png create mode 100644 public/images/pokemon/icons/variant/2/153_3.png create mode 100644 public/images/pokemon/icons/variant/2/154-f_2.png create mode 100644 public/images/pokemon/icons/variant/2/154-f_3.png create mode 100644 public/images/pokemon/icons/variant/2/154_2.png create mode 100644 public/images/pokemon/icons/variant/2/154_3.png create mode 100644 public/images/pokemon/icons/variant/2/158_2.png create mode 100644 public/images/pokemon/icons/variant/2/158_3.png create mode 100644 public/images/pokemon/icons/variant/2/159_2.png create mode 100644 public/images/pokemon/icons/variant/2/159_3.png create mode 100644 public/images/pokemon/icons/variant/2/160_2.png create mode 100644 public/images/pokemon/icons/variant/2/160_3.png create mode 100644 public/images/pokemon/icons/variant/2/167_3.png create mode 100644 public/images/pokemon/icons/variant/2/168_3.png create mode 100644 public/images/pokemon/icons/variant/2/170_2.png create mode 100644 public/images/pokemon/icons/variant/2/170_3.png create mode 100644 public/images/pokemon/icons/variant/2/171_2.png create mode 100644 public/images/pokemon/icons/variant/2/171_3.png create mode 100644 public/images/pokemon/icons/variant/2/172-spiky_2.png create mode 100644 public/images/pokemon/icons/variant/2/172-spiky_3.png create mode 100644 public/images/pokemon/icons/variant/2/172_2.png create mode 100644 public/images/pokemon/icons/variant/2/172_3.png create mode 100644 public/images/pokemon/icons/variant/2/174_2.png create mode 100644 public/images/pokemon/icons/variant/2/174_3.png create mode 100644 public/images/pokemon/icons/variant/2/194_2.png create mode 100644 public/images/pokemon/icons/variant/2/194_3.png create mode 100644 public/images/pokemon/icons/variant/2/195_2.png create mode 100644 public/images/pokemon/icons/variant/2/195_3.png create mode 100644 public/images/pokemon/icons/variant/2/198-f_2.png create mode 100644 public/images/pokemon/icons/variant/2/198-f_3.png create mode 100644 public/images/pokemon/icons/variant/2/198_2.png create mode 100644 public/images/pokemon/icons/variant/2/198_3.png create mode 100644 public/images/pokemon/icons/variant/2/211_2.png create mode 100644 public/images/pokemon/icons/variant/2/211_3.png create mode 100644 public/images/pokemon/icons/variant/3/276_2.png create mode 100644 public/images/pokemon/icons/variant/3/276_3.png create mode 100644 public/images/pokemon/icons/variant/3/277_2.png create mode 100644 public/images/pokemon/icons/variant/3/277_3.png create mode 100644 public/images/pokemon/icons/variant/3/359-mega_2.png create mode 100644 public/images/pokemon/icons/variant/3/359-mega_3.png create mode 100644 public/images/pokemon/icons/variant/3/359_2.png create mode 100644 public/images/pokemon/icons/variant/3/359_3.png create mode 100644 public/images/pokemon/icons/variant/3/377_2.png create mode 100644 public/images/pokemon/icons/variant/3/377_3.png create mode 100644 public/images/pokemon/icons/variant/3/378_1.png create mode 100644 public/images/pokemon/icons/variant/3/378_2.png create mode 100644 public/images/pokemon/icons/variant/3/378_3.png create mode 100644 public/images/pokemon/icons/variant/3/379_2.png create mode 100644 public/images/pokemon/icons/variant/3/379_3.png delete mode 100644 public/images/pokemon/icons/variant/3/427_2.png delete mode 100644 public/images/pokemon/icons/variant/3/427_3.png delete mode 100644 public/images/pokemon/icons/variant/3/428-mega_2.png delete mode 100644 public/images/pokemon/icons/variant/3/428_2.png delete mode 100644 public/images/pokemon/icons/variant/3/429_1.png delete mode 100644 public/images/pokemon/icons/variant/3/429_2.png delete mode 100644 public/images/pokemon/icons/variant/3/429_3.png delete mode 100644 public/images/pokemon/icons/variant/3/475-mega_3.png delete mode 100644 public/images/pokemon/icons/variant/3/475_3.png create mode 100644 public/images/pokemon/icons/variant/4/390_2.png create mode 100644 public/images/pokemon/icons/variant/4/390_3.png create mode 100644 public/images/pokemon/icons/variant/4/391_2.png create mode 100644 public/images/pokemon/icons/variant/4/391_3.png create mode 100644 public/images/pokemon/icons/variant/4/392_2.png create mode 100644 public/images/pokemon/icons/variant/4/392_3.png create mode 100644 public/images/pokemon/icons/variant/4/430_2.png create mode 100644 public/images/pokemon/icons/variant/4/430_3.png create mode 100644 public/images/pokemon/icons/variant/4/455_2.png create mode 100644 public/images/pokemon/icons/variant/4/455_3.png create mode 100644 public/images/pokemon/icons/variant/4/486_2.png create mode 100644 public/images/pokemon/icons/variant/4/486_3.png create mode 100644 public/images/pokemon/icons/variant/5/501_2.png create mode 100644 public/images/pokemon/icons/variant/5/501_3.png create mode 100644 public/images/pokemon/icons/variant/5/502_2.png create mode 100644 public/images/pokemon/icons/variant/5/502_3.png create mode 100644 public/images/pokemon/icons/variant/5/503_2.png create mode 100644 public/images/pokemon/icons/variant/5/503_3.png create mode 100644 public/images/pokemon/icons/variant/5/527_2.png create mode 100644 public/images/pokemon/icons/variant/5/527_3.png create mode 100644 public/images/pokemon/icons/variant/5/528_2.png create mode 100644 public/images/pokemon/icons/variant/5/528_3.png create mode 100644 public/images/pokemon/icons/variant/5/587_2.png create mode 100644 public/images/pokemon/icons/variant/5/587_3.png create mode 100644 public/images/pokemon/icons/variant/5/588_2.png create mode 100644 public/images/pokemon/icons/variant/5/588_3.png create mode 100644 public/images/pokemon/icons/variant/5/589_2.png create mode 100644 public/images/pokemon/icons/variant/5/589_3.png create mode 100644 public/images/pokemon/icons/variant/5/590_2.png create mode 100644 public/images/pokemon/icons/variant/5/590_3.png create mode 100644 public/images/pokemon/icons/variant/5/591_2.png create mode 100644 public/images/pokemon/icons/variant/5/591_3.png create mode 100644 public/images/pokemon/icons/variant/5/616_2.png create mode 100644 public/images/pokemon/icons/variant/5/616_3.png create mode 100644 public/images/pokemon/icons/variant/5/617_2.png create mode 100644 public/images/pokemon/icons/variant/5/617_3.png create mode 100644 public/images/pokemon/icons/variant/5/621_2.png create mode 100644 public/images/pokemon/icons/variant/5/621_3.png create mode 100644 public/images/pokemon/icons/variant/6/656_2.png create mode 100644 public/images/pokemon/icons/variant/6/656_3.png create mode 100644 public/images/pokemon/icons/variant/6/657_2.png create mode 100644 public/images/pokemon/icons/variant/6/657_3.png create mode 100644 public/images/pokemon/icons/variant/6/658-ash_2.png create mode 100644 public/images/pokemon/icons/variant/6/658-ash_3.png create mode 100644 public/images/pokemon/icons/variant/6/658_2.png create mode 100644 public/images/pokemon/icons/variant/6/658_3.png create mode 100644 public/images/pokemon/icons/variant/6/676-dandy_2.png create mode 100644 public/images/pokemon/icons/variant/6/676-dandy_3.png create mode 100644 public/images/pokemon/icons/variant/6/676-debutante_2.png create mode 100644 public/images/pokemon/icons/variant/6/676-debutante_3.png create mode 100644 public/images/pokemon/icons/variant/6/676-diamond_2.png create mode 100644 public/images/pokemon/icons/variant/6/676-diamond_3.png create mode 100644 public/images/pokemon/icons/variant/6/676-heart_2.png create mode 100644 public/images/pokemon/icons/variant/6/676-heart_3.png create mode 100644 public/images/pokemon/icons/variant/6/676-kabuki_2.png create mode 100644 public/images/pokemon/icons/variant/6/676-kabuki_3.png create mode 100644 public/images/pokemon/icons/variant/6/676-la-reine_2.png create mode 100644 public/images/pokemon/icons/variant/6/676-la-reine_3.png create mode 100644 public/images/pokemon/icons/variant/6/676-matron_2.png create mode 100644 public/images/pokemon/icons/variant/6/676-matron_3.png create mode 100644 public/images/pokemon/icons/variant/6/676-pharaoh_2.png create mode 100644 public/images/pokemon/icons/variant/6/676-pharaoh_3.png create mode 100644 public/images/pokemon/icons/variant/6/676-star_2.png create mode 100644 public/images/pokemon/icons/variant/6/676-star_3.png create mode 100644 public/images/pokemon/icons/variant/6/676_2.png create mode 100644 public/images/pokemon/icons/variant/6/676_3.png create mode 100644 public/images/pokemon/icons/variant/6/682_2.png create mode 100644 public/images/pokemon/icons/variant/6/682_3.png create mode 100644 public/images/pokemon/icons/variant/6/683_2.png create mode 100644 public/images/pokemon/icons/variant/6/683_3.png create mode 100644 public/images/pokemon/icons/variant/6/684_2.png create mode 100644 public/images/pokemon/icons/variant/6/684_3.png create mode 100644 public/images/pokemon/icons/variant/6/685_2.png create mode 100644 public/images/pokemon/icons/variant/6/685_3.png create mode 100644 public/images/pokemon/icons/variant/6/688_2.png create mode 100644 public/images/pokemon/icons/variant/6/688_3.png create mode 100644 public/images/pokemon/icons/variant/6/689_2.png create mode 100644 public/images/pokemon/icons/variant/6/689_3.png create mode 100644 public/images/pokemon/icons/variant/7/2026_2.png create mode 100644 public/images/pokemon/icons/variant/7/2026_3.png create mode 100644 public/images/pokemon/icons/variant/7/2103_2.png create mode 100644 public/images/pokemon/icons/variant/7/2103_3.png create mode 100644 public/images/pokemon/icons/variant/7/807_2.png create mode 100644 public/images/pokemon/icons/variant/7/807_3.png create mode 100644 public/images/pokemon/icons/variant/8/6503_2.png create mode 100644 public/images/pokemon/icons/variant/8/6503_3.png create mode 100644 public/images/pokemon/icons/variant/8/851-gigantamax.png create mode 100644 public/images/pokemon/icons/variant/8/851-gigantamax_2.png create mode 100644 public/images/pokemon/icons/variant/8/851-gigantamax_3.png create mode 100644 public/images/pokemon/icons/variant/8/851s-gigantamax.png create mode 100644 public/images/pokemon/icons/variant/8/894_2.png create mode 100644 public/images/pokemon/icons/variant/8/894_3.png create mode 100644 public/images/pokemon/icons/variant/8/895_2.png create mode 100644 public/images/pokemon/icons/variant/8/895_3.png delete mode 100644 public/images/pokemon/icons/variant/8/909_2.png delete mode 100644 public/images/pokemon/icons/variant/8/909_3.png rename public/images/pokemon/icons/variant/{8 => 9}/1003_2.png (100%) rename public/images/pokemon/icons/variant/{8 => 9}/1003_3.png (100%) rename public/images/pokemon/icons/variant/{8 => 9}/1006_2.png (100%) rename public/images/pokemon/icons/variant/{8 => 9}/1006_3.png (100%) rename public/images/pokemon/icons/variant/{8 => 9}/1010_2.png (100%) rename public/images/pokemon/icons/variant/{8 => 9}/1010_3.png (100%) create mode 100644 public/images/pokemon/icons/variant/9/1012-counterfeit_2.png create mode 100644 public/images/pokemon/icons/variant/9/1012-counterfeit_3.png create mode 100644 public/images/pokemon/icons/variant/9/1013-unremarkable_2.png create mode 100644 public/images/pokemon/icons/variant/9/1013-unremarkable_3.png rename public/images/pokemon/icons/variant/{8 => 9}/912_2.png (100%) rename public/images/pokemon/icons/variant/{8 => 9}/912_3.png (100%) rename public/images/pokemon/icons/variant/{8 => 9}/913_2.png (100%) rename public/images/pokemon/icons/variant/{8 => 9}/913_3.png (100%) rename public/images/pokemon/icons/variant/{8 => 9}/914_2.png (100%) rename public/images/pokemon/icons/variant/{8 => 9}/914_3.png (100%) rename public/images/pokemon/icons/variant/{8 => 9}/940_2.png (100%) rename public/images/pokemon/icons/variant/{8 => 9}/940_3.png (100%) rename public/images/pokemon/icons/variant/{8 => 9}/941_2.png (100%) rename public/images/pokemon/icons/variant/{8 => 9}/941_3.png (100%) create mode 100644 public/images/pokemon/icons/variant/9/944_2.png create mode 100644 public/images/pokemon/icons/variant/9/944_3.png create mode 100644 public/images/pokemon/icons/variant/9/945_2.png create mode 100644 public/images/pokemon/icons/variant/9/945_3.png rename public/images/pokemon/icons/variant/{8 => 9}/953_2.png (100%) rename public/images/pokemon/icons/variant/{8 => 9}/953_3.png (100%) rename public/images/pokemon/icons/variant/{8 => 9}/954_2.png (100%) rename public/images/pokemon/icons/variant/{8 => 9}/954_3.png (100%) rename public/images/pokemon/icons/variant/{8 => 9}/981_2.png (100%) rename public/images/pokemon/icons/variant/{8 => 9}/981_3.png (100%) create mode 100644 public/images/pokemon/variant/1012-counterfeit.json create mode 100644 public/images/pokemon/variant/1013-unremarkable.json create mode 100644 public/images/pokemon/variant/102.json create mode 100644 public/images/pokemon/variant/103.json create mode 100644 public/images/pokemon/variant/128.json create mode 100644 public/images/pokemon/variant/152.json create mode 100644 public/images/pokemon/variant/153.json create mode 100644 public/images/pokemon/variant/154.json create mode 100644 public/images/pokemon/variant/158.json create mode 100644 public/images/pokemon/variant/159.json create mode 100644 public/images/pokemon/variant/160.json create mode 100644 public/images/pokemon/variant/167.json create mode 100644 public/images/pokemon/variant/168.json create mode 100644 public/images/pokemon/variant/170.json create mode 100644 public/images/pokemon/variant/171.json create mode 100644 public/images/pokemon/variant/172-spiky.json create mode 100644 public/images/pokemon/variant/172.json create mode 100644 public/images/pokemon/variant/174.json create mode 100644 public/images/pokemon/variant/194.json create mode 100644 public/images/pokemon/variant/195.json create mode 100644 public/images/pokemon/variant/198.json create mode 100644 public/images/pokemon/variant/2026.json create mode 100644 public/images/pokemon/variant/2103.json create mode 100644 public/images/pokemon/variant/211.json create mode 100644 public/images/pokemon/variant/25-beauty-cosplay.json create mode 100644 public/images/pokemon/variant/25-cool-cosplay.json create mode 100644 public/images/pokemon/variant/25-cosplay.json create mode 100644 public/images/pokemon/variant/25-cute-cosplay.json create mode 100644 public/images/pokemon/variant/25-gigantamax.json create mode 100644 public/images/pokemon/variant/25-partner.json create mode 100644 public/images/pokemon/variant/25-smart-cosplay.json create mode 100644 public/images/pokemon/variant/25-tough-cosplay.json create mode 100644 public/images/pokemon/variant/25.json create mode 100644 public/images/pokemon/variant/26.json create mode 100644 public/images/pokemon/variant/276.json create mode 100644 public/images/pokemon/variant/277.json create mode 100644 public/images/pokemon/variant/359-mega.json create mode 100644 public/images/pokemon/variant/359.json create mode 100644 public/images/pokemon/variant/377.json create mode 100644 public/images/pokemon/variant/378.json create mode 100644 public/images/pokemon/variant/379.json create mode 100644 public/images/pokemon/variant/39.json create mode 100644 public/images/pokemon/variant/390.json create mode 100644 public/images/pokemon/variant/391.json create mode 100644 public/images/pokemon/variant/392.json create mode 100644 public/images/pokemon/variant/40.json create mode 100644 public/images/pokemon/variant/430.json create mode 100644 public/images/pokemon/variant/455.json create mode 100644 public/images/pokemon/variant/486.json create mode 100644 public/images/pokemon/variant/501.json create mode 100644 public/images/pokemon/variant/502.json create mode 100644 public/images/pokemon/variant/503.json create mode 100644 public/images/pokemon/variant/527.json create mode 100644 public/images/pokemon/variant/528.json create mode 100644 public/images/pokemon/variant/587.json create mode 100644 public/images/pokemon/variant/588.json create mode 100644 public/images/pokemon/variant/589.json create mode 100644 public/images/pokemon/variant/590.json create mode 100644 public/images/pokemon/variant/591.json create mode 100644 public/images/pokemon/variant/616.json create mode 100644 public/images/pokemon/variant/617.json create mode 100644 public/images/pokemon/variant/621.json create mode 100644 public/images/pokemon/variant/6503.json create mode 100644 public/images/pokemon/variant/656.json create mode 100644 public/images/pokemon/variant/657.json create mode 100644 public/images/pokemon/variant/658-ash.json create mode 100644 public/images/pokemon/variant/658.json create mode 100644 public/images/pokemon/variant/676-dandy.json create mode 100644 public/images/pokemon/variant/676-debutante.json create mode 100644 public/images/pokemon/variant/676-diamond.json create mode 100644 public/images/pokemon/variant/676-heart.json create mode 100644 public/images/pokemon/variant/676-kabuki.json create mode 100644 public/images/pokemon/variant/676-la-reine.json create mode 100644 public/images/pokemon/variant/676-matron.json create mode 100644 public/images/pokemon/variant/676-pharaoh.json create mode 100644 public/images/pokemon/variant/676-star.json create mode 100644 public/images/pokemon/variant/676.json create mode 100644 public/images/pokemon/variant/682.json create mode 100644 public/images/pokemon/variant/683.json create mode 100644 public/images/pokemon/variant/684.json create mode 100644 public/images/pokemon/variant/685.json create mode 100644 public/images/pokemon/variant/688.json create mode 100644 public/images/pokemon/variant/689.json create mode 100644 public/images/pokemon/variant/807.json create mode 100644 public/images/pokemon/variant/894.json create mode 100644 public/images/pokemon/variant/895.json create mode 100644 public/images/pokemon/variant/944.json create mode 100644 public/images/pokemon/variant/945.json create mode 100644 public/images/pokemon/variant/back/1012-counterfeit.json create mode 100644 public/images/pokemon/variant/back/1013-unremarkable.json create mode 100644 public/images/pokemon/variant/back/102.json create mode 100644 public/images/pokemon/variant/back/103.json create mode 100644 public/images/pokemon/variant/back/128.json create mode 100644 public/images/pokemon/variant/back/152.json create mode 100644 public/images/pokemon/variant/back/153.json create mode 100644 public/images/pokemon/variant/back/154.json create mode 100644 public/images/pokemon/variant/back/158.json create mode 100644 public/images/pokemon/variant/back/159.json create mode 100644 public/images/pokemon/variant/back/160.json create mode 100644 public/images/pokemon/variant/back/167.json create mode 100644 public/images/pokemon/variant/back/168.json create mode 100644 public/images/pokemon/variant/back/170.json create mode 100644 public/images/pokemon/variant/back/171.json create mode 100644 public/images/pokemon/variant/back/172-spiky.json create mode 100644 public/images/pokemon/variant/back/172-spiky_2.png create mode 100644 public/images/pokemon/variant/back/172-spiky_3.png create mode 100644 public/images/pokemon/variant/back/172.json create mode 100644 public/images/pokemon/variant/back/172_2.png create mode 100644 public/images/pokemon/variant/back/172_3.png create mode 100644 public/images/pokemon/variant/back/174.json create mode 100644 public/images/pokemon/variant/back/194.json create mode 100644 public/images/pokemon/variant/back/195.json create mode 100644 public/images/pokemon/variant/back/198.json create mode 100644 public/images/pokemon/variant/back/2026.json create mode 100644 public/images/pokemon/variant/back/2103.json create mode 100644 public/images/pokemon/variant/back/211.json create mode 100644 public/images/pokemon/variant/back/25-beauty-cosplay.json create mode 100644 public/images/pokemon/variant/back/25-cool-cosplay.json create mode 100644 public/images/pokemon/variant/back/25-cosplay.json create mode 100644 public/images/pokemon/variant/back/25-cute-cosplay.json create mode 100644 public/images/pokemon/variant/back/25-gigantamax.json create mode 100644 public/images/pokemon/variant/back/25-partner.json create mode 100644 public/images/pokemon/variant/back/25-smart-cosplay.json create mode 100644 public/images/pokemon/variant/back/25-tough-cosplay.json create mode 100644 public/images/pokemon/variant/back/25.json create mode 100644 public/images/pokemon/variant/back/26.json create mode 100644 public/images/pokemon/variant/back/276.json create mode 100644 public/images/pokemon/variant/back/277.json create mode 100644 public/images/pokemon/variant/back/359-mega.json create mode 100644 public/images/pokemon/variant/back/359.json create mode 100644 public/images/pokemon/variant/back/377.json create mode 100644 public/images/pokemon/variant/back/378.json create mode 100644 public/images/pokemon/variant/back/379.json create mode 100644 public/images/pokemon/variant/back/39.json create mode 100644 public/images/pokemon/variant/back/390.json create mode 100644 public/images/pokemon/variant/back/391.json create mode 100644 public/images/pokemon/variant/back/392.json create mode 100644 public/images/pokemon/variant/back/40.json create mode 100644 public/images/pokemon/variant/back/430.json create mode 100644 public/images/pokemon/variant/back/455.json create mode 100644 public/images/pokemon/variant/back/486.json create mode 100644 public/images/pokemon/variant/back/501.json create mode 100644 public/images/pokemon/variant/back/502.json create mode 100644 public/images/pokemon/variant/back/503.json create mode 100644 public/images/pokemon/variant/back/527.json create mode 100644 public/images/pokemon/variant/back/528.json create mode 100644 public/images/pokemon/variant/back/587.json create mode 100644 public/images/pokemon/variant/back/588.json create mode 100644 public/images/pokemon/variant/back/589.json create mode 100644 public/images/pokemon/variant/back/590.json create mode 100644 public/images/pokemon/variant/back/591.json create mode 100644 public/images/pokemon/variant/back/616.json create mode 100644 public/images/pokemon/variant/back/617.json create mode 100644 public/images/pokemon/variant/back/621.json create mode 100644 public/images/pokemon/variant/back/6503.json create mode 100644 public/images/pokemon/variant/back/656.json create mode 100644 public/images/pokemon/variant/back/657.json create mode 100644 public/images/pokemon/variant/back/658-ash.json create mode 100644 public/images/pokemon/variant/back/658.json create mode 100644 public/images/pokemon/variant/back/676-dandy.json create mode 100644 public/images/pokemon/variant/back/676-debutante.json create mode 100644 public/images/pokemon/variant/back/676-diamond.json create mode 100644 public/images/pokemon/variant/back/676-heart.json create mode 100644 public/images/pokemon/variant/back/676-kabuki.json create mode 100644 public/images/pokemon/variant/back/676-la-reine.json create mode 100644 public/images/pokemon/variant/back/676-matron.json create mode 100644 public/images/pokemon/variant/back/676-pharaoh.json create mode 100644 public/images/pokemon/variant/back/676-star.json create mode 100644 public/images/pokemon/variant/back/676.json create mode 100644 public/images/pokemon/variant/back/682.json create mode 100644 public/images/pokemon/variant/back/683.json create mode 100644 public/images/pokemon/variant/back/684.json create mode 100644 public/images/pokemon/variant/back/685.json create mode 100644 public/images/pokemon/variant/back/688.json create mode 100644 public/images/pokemon/variant/back/689.json create mode 100644 public/images/pokemon/variant/back/807.json create mode 100644 public/images/pokemon/variant/back/894.json create mode 100644 public/images/pokemon/variant/back/895.json create mode 100644 public/images/pokemon/variant/back/944.json create mode 100644 public/images/pokemon/variant/back/945.json create mode 100644 public/images/pokemon/variant/back/female/154.json create mode 100644 public/images/pokemon/variant/back/female/194.json create mode 100644 public/images/pokemon/variant/back/female/195.json create mode 100644 public/images/pokemon/variant/back/female/198.json create mode 100644 public/images/pokemon/variant/back/female/25-beauty-cosplay.json create mode 100644 public/images/pokemon/variant/back/female/25-cool-cosplay.json create mode 100644 public/images/pokemon/variant/back/female/25-cosplay.json create mode 100644 public/images/pokemon/variant/back/female/25-cute-cosplay.json create mode 100644 public/images/pokemon/variant/back/female/25-partner.json create mode 100644 public/images/pokemon/variant/back/female/25-smart-cosplay.json create mode 100644 public/images/pokemon/variant/back/female/25-tough-cosplay.json create mode 100644 public/images/pokemon/variant/back/female/25.json create mode 100644 public/images/pokemon/variant/back/female/26.json create mode 100644 public/images/pokemon/variant/exp/2026.json create mode 100644 public/images/pokemon/variant/exp/2103.json create mode 100644 public/images/pokemon/variant/exp/359-mega.json create mode 100644 public/images/pokemon/variant/exp/6503.json create mode 100644 public/images/pokemon/variant/exp/656.json create mode 100644 public/images/pokemon/variant/exp/657.json create mode 100644 public/images/pokemon/variant/exp/658-ash.json create mode 100644 public/images/pokemon/variant/exp/658.json create mode 100644 public/images/pokemon/variant/exp/676.json create mode 100644 public/images/pokemon/variant/exp/682.json create mode 100644 public/images/pokemon/variant/exp/683.json create mode 100644 public/images/pokemon/variant/exp/684.json create mode 100644 public/images/pokemon/variant/exp/685.json create mode 100644 public/images/pokemon/variant/exp/688.json create mode 100644 public/images/pokemon/variant/exp/689.json create mode 100644 public/images/pokemon/variant/exp/807.json create mode 100644 public/images/pokemon/variant/exp/894.json create mode 100644 public/images/pokemon/variant/exp/895.json create mode 100644 public/images/pokemon/variant/exp/944.json create mode 100644 public/images/pokemon/variant/exp/945.json create mode 100644 public/images/pokemon/variant/exp/back/2026.json create mode 100644 public/images/pokemon/variant/exp/back/2103.json create mode 100644 public/images/pokemon/variant/exp/back/359-mega.json create mode 100644 public/images/pokemon/variant/exp/back/6503.json create mode 100644 public/images/pokemon/variant/exp/back/656.json create mode 100644 public/images/pokemon/variant/exp/back/657.json create mode 100644 public/images/pokemon/variant/exp/back/658-ash.json create mode 100644 public/images/pokemon/variant/exp/back/658.json create mode 100644 public/images/pokemon/variant/exp/back/676.json create mode 100644 public/images/pokemon/variant/exp/back/682.json create mode 100644 public/images/pokemon/variant/exp/back/683.json create mode 100644 public/images/pokemon/variant/exp/back/684.json create mode 100644 public/images/pokemon/variant/exp/back/685.json create mode 100644 public/images/pokemon/variant/exp/back/688.json create mode 100644 public/images/pokemon/variant/exp/back/689.json create mode 100644 public/images/pokemon/variant/exp/back/807.json create mode 100644 public/images/pokemon/variant/exp/back/894.json create mode 100644 public/images/pokemon/variant/exp/back/895.json create mode 100644 public/images/pokemon/variant/exp/back/944.json create mode 100644 public/images/pokemon/variant/exp/back/945.json create mode 100644 public/images/pokemon/variant/female/154.json create mode 100644 public/images/pokemon/variant/female/194.json create mode 100644 public/images/pokemon/variant/female/195.json create mode 100644 public/images/pokemon/variant/female/198.json create mode 100644 public/images/pokemon/variant/female/25-beauty-cosplay.json create mode 100644 public/images/pokemon/variant/female/25-cool-cosplay.json create mode 100644 public/images/pokemon/variant/female/25-cosplay.json create mode 100644 public/images/pokemon/variant/female/25-cute-cosplay.json create mode 100644 public/images/pokemon/variant/female/25-partner.json create mode 100644 public/images/pokemon/variant/female/25-smart-cosplay.json create mode 100644 public/images/pokemon/variant/female/25-tough-cosplay.json create mode 100644 public/images/pokemon/variant/female/25.json create mode 100644 public/images/pokemon/variant/female/26.json diff --git a/public/images/pokemon/1012-counterfeit.png b/public/images/pokemon/1012-counterfeit.png index 2482debd312adb3c6c904f44faa54e225f53c515..32d9c1790c94c5efc57b8387f8a75c202b348fb8 100644 GIT binary patch delta 720 zcmV;>0x$ic1?UBkB!2;OQb$4nuFf3k0000#P)t-s0000G5D+FA86_JVVLur{GBQmz zHB34>IcFtlL>q#8bX}fGc*J9%mr#d-c!z|3r@C^?!*uuBXTiCy?djyE$5RFX000$q zQchC<|NsC0|NsC0|NsC0|NsC0|NsC0P_X(h0006uNklIZXBa8o-T!rE~6ZtGqhH23X?+01G-EKO@D#PWTbPLe@W-( z6LL$N=C0M?m4BMYtdS{zSMai=UbDBGBm@`V3|*8nqw@u$2*yC{WMWBi#f$$u%O`_uMo#c{Upv^gvk>Vf2SvP(?6EYpr+p>~#}SniHw@Vg?zB&&dniiYpE-gDb)W8L z+}v`dy&qS`+_}?DU_)Gf59h+o`LS`^|Hps)QG5aCqb+$h-dy3;eD`okce;;?&ZFt596FPl^tWl~t#@8tO2Zd))bUF?&a=rq zP3f+Ukd4CQamSL3Rtn7nK-WZ^ui!^}T;qokM3 zY1E{~O3LvOvCbcGc}-Q-leWC|jS|T@MxG?b>5egu8x;j8NmS2fG3IFrckD%*MS>6(fOP znrMjYc0{ua<)EGxv6blldhX$J`ktawQTa51M9yf%HS5yJC#zKSC+4lDG;bX_cJBWGpviFC2AbK;a9eXRG|EI9KIY#ZD?Q4t~`$ zocqDqAFSmaQ@CF^ViwBU_dM!LLb^4Rl-eb`8={j`Y*%>GEB?V;r4FjH!p*an0SI{_L z&FcG{qgzO=$}hTvon7da`z;HfX)tIy6@hP#0000*P=8ERMF0Q*5D*Y48Vw~I8#E*Z zKrk>xHa00z7imNrYFi+9V^n)@Y+as8dxvCr#ABeBP@aW!n2B|#x^m3Jbobh4!MU#H z;oH7C z)Z2QaAb%7EU@;;G5n>SE|53ZwMytup2s#(N=t^5{K7KX_v1#@gPIEIRAa}iqxq7(g zO+--tM|t=Ac=%5qGQaoS7_LnC=FXWs`uL;O@17YWgXAM)?`Rujl$d~(H_B6O=xC+9 zzIVpNAag=~X)r;I_K8%)N!k|(`WUmf%5L?caFKYzQA|wj=bws+tN2e zpMQE9x%%dA)#P(uigbZHtrS4Gn$J=N!ecyxjhvG3|vyUYux`Ij|7zo@GrM z&N-J?z*;YVBn`ufZW`f~5{ei2lcz*DiBsN)USQ2>mvlO27zQb+k8|BT`ktyg)%Uc{ z1Kzd+l9q+AOzHHQWv;yN#CsO&A6%?lq<<@L@NOkKGj8V|FM z0QSLoksqEJV3zIUp7TcU_+uVhCB!wvupa!v3^5NJR(NNAJ{jXC7KYU^K3jZ--e)tycqh9U+l?we;1(PX1=b!;~Bhf zk}I0MnI9tOw$Zo1?7j1Ri8tDvdBZV!!rVFD;0Nu_IFT^7E9CtZFEPpocN^XK9!oI& zYutGebB$5lN9~HLCV!2?9O$iU)-s7LOQaGo547d>DUAeL2X-7^t<&X#Q`d9qE z*xC4sg?~EZsp?3nMEltHneX{m8p64cJ@p~%neX&Kp=P|Tb<+OryB+*MnMcfAwgA1c zZL1}b(rbvv?GTy{qfKKqCULhbTJ|^z-O&ow__X2ZT4%hzCFU4UGT*002ovPDHLk FV1jj6REq!r diff --git a/public/images/pokemon/154.png b/public/images/pokemon/154.png index 74370115aa66d814debcf04544624ff11c066809..7547d4c573a3471a35748e9a76d99afc6f9101f1 100644 GIT binary patch literal 15328 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 Nm6cSIr~w;){BP&Z+C=~W literal 8824 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 diff --git a/public/images/pokemon/172-spiky.png b/public/images/pokemon/172-spiky.png index 2a02c6fb268c00847a77c6c73d3c305caea3e0a9..f74c65743447d1c7203888c873096c6e2bfd96d6 100644 GIT binary patch delta 422 zcmeBWKEOOdrJk`k$lZxy-8q?;3=9lr0X`wFKw3aRKvPpQ*-M}$O0!2%(cZ~TTwL*S zN@J~zjH05UlT*;rYL2681-?HE`u={(^Xe)8|Nq}~DN78fQ>Y}!FPH(yM+I>Q+w2$^ z7^OU2978O6doRD9)uO<`_JG5@-i*8G-TyT43vXwtoqQPHzTIDS?y?0Oi_G&Iwk^EX zurDx<`PvmXm;Ma-Wtu{T-+RggAO7W5DGGI&?z!sGysXuklZsqzpKh{Sx^9-wo1%4{ zMb6<*6Z7S-Z#Zu^XSGoEJfTen%r)N*-i`?M`pWh3n$ii~p38+YQ$Nm~o7g_}OhRV8 z;|%r8v--(<4K_TI+RC64bSkz|RsNzFW7jDu%?i)e?xv?tGA+qs%>4VxcVFno@AmtZ zG~F&oU5SjCB%+j>?b*ck^WzlB13k`5Z!4y|%#Ns#3Uz#TW=+>8F~h(9Rx30w?U$A{ z`;s=ZNi*%ngtOkE@|o5bd*83Wz3yNCr;QA^6y-Zs&Fu<2?pM3>FSAspNP~i6x&km5 O89ZJ6T-G@yGywp7LcuKn delta 370 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 delta 2777 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 diff --git a/public/images/pokemon/194.png b/public/images/pokemon/194.png index 589c2ae155a9f341d7b9ccdb44fe87b6c1674b5e..d126190685b872adad900c846fd5b49122e5edc3 100644 GIT binary patch delta 2114 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%0D58V!OM`ajW_`s zpuT%02xjI)GJH1heg*&w`gL{!v>G6ulY~#Z21pBIQU*iWD3ueSAxbKit4YH4VipPC zG5m(o3(#hW5`*2VkRTeIX3|g@Px*W5FP@PAYJ)`b0gv13jd1wZ!4JM-B%bdKhc5yAApD`I4z27+)kLh-v%X!h}Tue=R;uK<8R5CX)5V-ll7 zcpLIwp=O~%{A`S35t{9GiXA3km$PliB$DJDBH=LS>JQ!SGW3&Zgk&g=gu@U!>;4)r zCD24jI1KCDHC#*}N$zu)nNU)J1d$H&e!XAs*ZcK9YQ?-03rs@d00000NkvXXu0mjf DHmB-g diff --git a/public/images/pokemon/2026.png b/public/images/pokemon/2026.png index 78c881eb10ddccd14f8316d7c80453cde619e524..fde7405f65a385f7b4e00cb75a5ac396706840ab 100644 GIT binary patch delta 865 zcmV-n1D^cq2J8lq7=H)@0000&1;UE}0004VQb$4nuFf3k0000sP)t-s0000G5D*te zfM6^nWML%fz7&LOTmJMzRVN^vR4^KI%(P!6;^EN!lal}d z01|XkPE!E?|NsC0|NsC0|NsC0|NsC0UcrVw0008UNkl`B5!#i-C`?LN2SU#?1gJiZA_(NXAHa1?N3fODrz68aEgbi=t3L{(O!6H%1a zK)gd97Imc{`1#x#5BQ*lY>X~MRcvkv_SJ-n9g%FvuX}^bE4^Z?(T6}TO~{<1B8d0n zyQ_*dCghlBJAc#|sfrY@1V=?W4es042t0e}WxEaOmc79W;t0Wt2~VF-_fI*rFh)?A z=if6UbR>u4MtJ_KNI4u;Oz`u&Hs|fXK}-hBoT2yo{RP5`2!2k+xRQ`C8)JO<5vh?7 zPsl{ktu#}O4DUTmaakPRE9skzZxqjA77iEhl*ug%Gk?bWMkq!nLJT8q7<8QoNI_@j zqd{-}&|$p2?a0?*NJ!+^Ku-Q~Khjf-4pTS85*5Kd;{nm-zKl^(IxlS#9*nKhH*0|h z*X)f|>7Dr?LqXlEApNTclCfuGlt)$|6lCKJR)m#h7ghNMk&rPPYLAYD3*@zlWP}ss z^xF1%eSbC~&M-m*Y(kt-fa6|rfvd)b~%KV}ldD2UBFX3*!!8G;8x_J8h|<5Lu>!2v1hAS1x*O*OD&SlkBQ z9iy*}u{EPiSwvd4tzqdbx)ajfPP&0^X!Mg5PKz<;8#NPQ<+IP1tpyTjZ$NXE&zlyv zu!y-mt5MS#NU4@x!#Ua!kw9-o*jUA6G&M;~rBgJ>v_+h12xIYx#3^zDHN_QN^Di}J z-C8@e!JrqUK>+y+tZPF{!C?bgUNogJA0LU6hXDz%HVM rE{x=0nZo7=Hu<0001o^)HG5001peOjJex|NmrRB>wb65D*aQz7&>NA(=cN zXDAlqh%FaJfV5vF|NZ+KbIgQmTkP1kHAuS900001bW%=J06^y0W&i*J>q$gGRCr#6 z)xm2MK@`B@4Fl#>aJL1|J6*6e7^a;KEddK|RwzORZI@j2Qhz;3L2F7qsZhr)^lYuC zR?<3xKoAg?=I*WcV1P!TSh|0MGqbyyO?HOkJ zLfYgVgal~`dDc3)hVVEE(ZruK<+&sY&eFS=os|M$e}A=|l919jQB)ltGf_D`D^npT zrN@zyM5kq%^{S#Epb~XnXX2P1MxBRfoOsdC9ZL7&IOOOsjt9ng{qyCJi^P15V^knZ zGbB8Tc^8!BO&f(KmWddWjX^~MDA|sa{xNc7D5}$~s5{(*R0JGi_L)7Z0X77D(2OKmX4I0i3d24gp82Q zA;*iml7uKXMC$rpDt?iW=E!P}(2Rss61j&3XdH79i!WM3e&l`&07)XNw_k8V1#uhc zD^(jIw2d)d-~<6*5X&AVAi1H=i7QA6+Ub8J34cl@_64yR0ZldWeIM~5(3bbgMF3}{ zWC>DhZpd>zr(poM;W>;n_#-O_2!^KQR?lPX`b*X71J^fA&x6U^QVSlLiI|Klr_sP) z>2#}qUAD=ADFL-LX!5K(m%XSr@Ozc0*JZ>@rwHRgQAT=#c#e~tBFvnZk#2w9=?lmo zHdsN@@RTt9t9TB=>HgKgf@$(~2Ljm`bBS>(yu3ZgNa76Q)rJv*v_Itf9;t p?z@MTpkzvb3}vn!$dg5R@E@-l%6z3@sNw(s002ovPDHLkV1ggCi#z}T diff --git a/public/images/pokemon/25-beauty-cosplay.png b/public/images/pokemon/25-beauty-cosplay.png index a0c4c5717b29a88a8cc210a40a110b4bc4e3706a..0db73184c8e0dfca3378f572b95f5a70af1570e1 100644 GIT binary patch delta 813 zcmV+|1JeA72E+!CB!2;OQb$4nuFf3k0000>P)t-s0000G5D+9IBPl5Wl$Hew;-yUddcy-R^tnJ#fEU^^FDnj#OOuGa$Kig(YjueWh2#zX>z@4b zVQ0v1xK8j%;D7eKV1oC8XE?>u3MZ(>9O4thDb-s4csyeCI)Rz@g7bNYSLKyfL8QRU zvyqJ+$5k+~SjgMB;VJ+>OIro#jTfzx0DLts;weyGQ)b6;FJK~r^`vN*Z#hYfil+qL z`d6NH6-2&QUgUC$E6)_$xcc8u5bOm$t>5Ble6+w<_kSBd$b@}AZ3}?i@5D1*#LfLU z$`(^wwUll=$22W^yL)$MZk`jNjfc=D}Yrej84nQPa^& zI2-Tn*B5!;+z+Cw)TE%SwswF(>1g22MpJmj4@Mce3rQhY=<5+;=&{ubeiNReY_uW{c8BMK!I2xRK|Luyvm|VH zcV-k_HI{9Rbg@Gf&;2tIt94Qh3VKN_X;ZNR?tf9K2b-T=5EK>T5q4ORhF9stgIK_$ zg^ijBUzA2%J)R@ZiQYl{;jW|G)O#i>66;O@GQvJ85$+0)j5f)RNos zYziB6b9)x3St(RFo%xYRyp&p@Af9vLmptN`J}U$nc&6R+GH?jABoTSW;eOz)X{rJU}4fo}r6@`44P1xGlUTc(){v=DCb#Bg#`waOhZUm$E3!Ma}Y=DgD` zC=`Tk3rB_4lz-NhJOWqxIYC6bzk2Jz+NxnkuJ*V zJ|#IK>aeN}oO~1x&{|GB{TvDC%ZjP)J0-U7dx(*|A%7SB?VfwJp>_CyXrxlE5>@I<=c#L1g+%#ilytnn8;xr8wT z>I-z6O=dtNxq!zB=n%aXZs-NCTPq=iR5~AJ>jGV-IDpJe3YavB2Y)9BaYL2p-%lRl z?viH}W`Df&Zp7GFWJ&lF<28yl=W~cwiv`S&<6H2KxTy}$hhW^vfPQj*V@v3?Ivbj< z1)f4kkSlaN&d)?-tI`4*y86t7h74Gv+-`~=(JKhW{P5v~NynQ^;z2CnK?OHq^NG`l zYsT{p`ql3se(~8Ky-ok}@P#}DmkOA~XXSMf<7zD*Sr-+*i5QNyPT%@(glfgs*2?gC z+uiY=0J|Xj0h;;f$K+l7JaPSkyO?J@z4G`*w)BaozC@bw{q~e}rE^3_yQleugw1kc jx21dda;g6IF#G#I#-lCbzBQbz00000NkvXXu0mjfNeOSI diff --git a/public/images/pokemon/25-cool-cosplay.png b/public/images/pokemon/25-cool-cosplay.png index 209509f12fc653b0c817c2b8f85f0f4283b8c9b0..123ae257598396c4f774832a0ee7c3fa63d65afe 100644 GIT binary patch delta 1843 zcmV-32h8}P1-A~68Gi-<0039HD>ncD00DDSM?wIu&K&6g00!|%L_t(&fz_E`Xj|7A zz<&x}+6)F)%0RizO0XPQ?ox_enz&{Z7IpN&g-|5N54j2#yG=?BL5 z&v(xGo$q|-`@VAp0TPWy&7kKmlkD<7h(@F4!Gj8tB)!z|KJXulv;;qVIQ~*w-32b( z{8H*Wq*Emi@?qc$73cy?r+P!_X4<`>pgt9xMlE;RxgTwvig%+XcUge%#SXg z=d*KT0F1<9wq^Ilmr*l6<+sBJb_5#M@$ru?pQrXi%)XyUVooG63&&$-dhjRq^O0E0 zJki_5iQX;%)bS)J-Q2km*%4?L_(&{f<{}YBhy49bB!4lV&UBiCn#Q1}0r0c z8yon>+!EP;#9eKj@DCp@t_!`<&FgXm0WdnW#H(*Kp9@&8{C9Dj6TMyBm|FtyK|6tg zb%DXPC(PB=)t34;_{HVr5MVF4fN3Wa=l=)ztt>?T)$F>!0(!Ig!)0*+4^8U>JgZLm z8h&_G4%?|-~YI2^X2wX?TCFS&F?qME;d4{y@i zC^UMBFIIoEskTA_)64w*d#*Y~9Z&j|lx~bi&D(0u(hnCTjHxhk3Ny%EY-ng$yLFNR z%j)%d-Pe~3Ty&~>8f#~7Srf=~2D*-b23Yv@9B)m$8VKQp2DWT%2(WlHS0g-Fwg4Lu z0)OC8S>c~Kc--lkgkGXN_srLEBGHGgmrPyPLqX60XQFqv4Da*t@|kpM3 zq08gHpO20)ieN#qL_-Jm_hpLc#=E$C!C4iQf2E?vyBFz#8EplIb-VW4eTwJqMS zrn${Ydr-C5i(2drYU2ZT%ImMaZC`&pGHPGDVtoVBy8E3XO0DsUS zNs{Tbl5=nYCETV}mJ<^euuk|dXRcrv20+VrZ>`4crb^viwOTE7buw>TXFKG)tC+@T~Sj+FMP1+p^ zHzFMXS10qpuxn5la=DDt->sc5@qhcllZ_|Cd^vN4_um_G0p}tS3YCiO0v2f5R5P6o zw=0`lh3^oZUY*RFr_;k+oy;T4GGK)>r`5=W(TZipPIV#cyHV?Pj_wIDFqyYi48!31 z{=I>NNs?r$na$NTt;C+~NGxU+DiyBp-^;+tnyrwFM9^M&gI;9GfPf4FNB$*-+ZS-8)7TgK%oIua?yfsK;)9#Be^Pfe(C3BI8 z&#y&WS(fcpa%RsL1$RXi;j=x{x9w-w_wVJq{AGSVe2zCy|B`=w^8)~He$v6w3s&eG zSXrYmUBTOz^V&{Ivwsq>u|leyxGXLP6C2K%EjJ>%w@h`20N;*{2`vuGB1$MNK212K z9jsTj3mQBY|Mc@~T)LRuuD)$C3}aiNA>hNl(>J$Eb{rg<(IsdCu7ax}>rHegpuywg z;#Y;EdqNDX_#s;Wv`r>E0S%t&P!vQ$oR!^10K9#O_B#RZ^DJ@a{bmOg?VY9Vz{=Xr hgKw8O4X{(L@_)1dcZU@Qa&-Uz002ovPDHLkV1glMmi+(# delta 660 zcmV;F0&D%Z4xt5*8Gi!+003ZT+XVms05DKYR7C&)01yxm5)u+ADJd(jBT`aYZ)}c) zA|jkp0H&?B#UUByT0-}|A@}A||M#W;{px$vhN=Jn00DGTPE!Ct=GbNc000SaNLh0L z01FcU01FcV0GgZ_0006CNklyo4(3FR}M>OGW6Zi+i*PZ|7Zg+Nto}8%H0n zxSVb9>3_Mwj78xd;N9~6`{D|q*@`G7BdXz6E=?{&_7I`(Nj uZl-!9;N?Mn*OzNBjC}w7m-eYMe*yi09$9C&UJXzH0000?C)E;1>46izqs0c-?!wg+b%MBw-y}>nkp>@qbz`+Q&dWCAjha0Qbd}=Cc!` zXg~WHaGwNYz&VH01=sYZQ}4CV@uPb2$jri+EEV{|g>8~mGp3~j^)gy=YJ<Z~002ovPDHLkV1m!dBuM}O delta 557 zcmV+|0@D591jYoAB!4PUOjJbx000mW5E2p+DJdyZQd(m%2%J&?#UUBqlmO;hLifEP z_vTXn_oe^+>b~Ano&W#<0d!JMQvg8b*k%9#010qNS#tmY3ljhU3ljkVnw%H_00Fg0 zL_t(Y$FXtg_i7!OO;X*oNs~?yKUQSRM5_wJ#NdqBz8VUJr+T9VY(pY46b$!}pBg*niB z7lRJk_Z1h|xoW4Q4b0R0EI3!dgX`q#?_hR96x+|*27g>T!5Q$JLvwunK0;4@)I!%E zjpC7+g>iOraL0wclT9;DO9!fDoXP2IeCEZ$37PpCCRV)flzZt^&ljlAXq$z1Ky@K0 zb!4aM5vhGha72Q|5jkpIwoA5ST1hRd3x#ABxV&s;n%B1#_!n$fEbwoQ$aF0lpdBAf vAGB{0-X_)|Zii2`0QUb|f^Y6|fTjKgu;L$8`u_(100000NkvXXu0mjf0BHxG diff --git a/public/images/pokemon/25-cute-cosplay.png b/public/images/pokemon/25-cute-cosplay.png index 5c4adce23040786e54e3f7be0193525c05a0c06d..17fdfd32609d627982d7c0f673bfb0b768dbbf4b 100644 GIT binary patch delta 710 zcmV;%0y+K91>OaaB!2;OQb$4nuFf3k0000yP)t-s0000G5D+OTDMCU@Qc_yQAsNIm zDV$OOg)&FxT0-V&Q_n|m_q`$a=2CSl(7LIZ>Vl^K_oef?&j0`a6{p>80000KbW%=J z0RR90|NsC0|NsC0|NsC0|NsC0y5VD~0006oNkl(T%J z*S#RW;#E3hW*jTd5r!)uA-GYvWAt^4zm4DFLEptW1d+>gJf7oGIY_Pa&c+yLZ>6ZJ zpc|dwIBbTi;V19R`k4mKBB`WG%xrLmeWC?MmCRbpSsiwsHu{t@VyNI*n_J%P1S91g zZ&i|L-f4P=gMTOeb@HAHZ7vldW#n=M%_HX%Pl-qe{{3rwKGFJ)i$zYqx&{1gZ`yIr ztM`qE^T5Wij$rJ@JG~viic4F76CaA?*9&T{^zM8;1H%W)tSkL`D6MpkSDc7n3V-~3 z+75ld9Ct4l@7AXLu%ZF}WZVzj-v&RIdKkF!&yV5Y)qikb=XD34tB2okGYZ@Ca>gT~ z!S6JbIo4Nr!w*aSaQ`0+JgMkt68lKKZ^2Js;7t~*ds!Be)Vkxw^8|K0EvTL)C9*p1 zqYppu)T?zW5n6>RaCFR?(G;(yl@#&nt-S-MO|A(JX%R}pWh(cI_M-JLrjsK_6mr28 zBiyG9Nq@#kOf%((N+YyBl@_gA6>+J~2PfL8MC%VlRYhxDkq(V`76~R&Z-hSbfivzM zG>%}xQ%bdhr*3jrn@vd7V4C6!Esz_VOg}9A2DlK$HVm}(La5IAE9IHHU1Y3<<&L!Xiau>$RBiq s$tf{OXur=qyvqA`?7#CrJ{K{Bf2g1)M7^WXK>z>%07*qoM6N<$f)-?6`Tzg` delta 695 zcmV;o0!aPd1 z=2}APf~NDj&iB0`_vTXn_oaK%qUZns00DGTPE!Ct=GbNc000SaNLh0L01FcU01FcV z0GgZ_0006tNkl=bXWdHn;j?1KzNW$#ct`SnCf>@9^fEe%;hlq#>zr zsbVkFY3X~u@qd(v^m4c%f1o|-5u?|j;W;%O4u@C0;ZiU4!9yG`graD7#s>MJhxo;F z+kwAiMx>r6qIuC%ydQ$$ofXlGJ`bgfu9FUb94C@fp(n>-EA)Ul?ke&o?qw>6B@OUH zFizax2Az+5=(x&x8V+6!_j$cm$US@H4L750Oh3+erhhO*293zf`6oQ^X{k(k`ZtRy zDQhnh`$?q?=V@6Wjd#m?-gn~EisQ!1x)(G~JF;g_i7byxufqqPO14TRLa9&&j*7W< zw8XQ;iX&UL*IWv48sS>t2rXP`xGc&gqrB)kjAiGj0f`)Og#h_f5t4oq%bg0U2$g{= zwqVt&@PA8n-8fNBF<5;lvMN~NG8e>1WZ7p@X@olRhSSFa8b`3;DW#mjQ?YPo>rL3I z!L-D8+7WInviM=*1K>!q$^bmyT`L*v%@4N`woI28o43d2tGt(y(X`I47y#h!)>rw= zV0rk|7}NW&3wPu&2H41WONy6rN+SxfT%4|}+o z7y^ltwv&!D|CqLJ{cyP$$S#*|SZn*gd_C+meX<2R&GYA4@Vbu=wLtu5T3~u;;LR+OMZ^9+iA7d-@|Z@|5BagDYPD4d>_>lKcJ%I zeY9~G=lB6J`P3B?Z$@L%Q~F1F#O&ubax*z~O8QZ+-{j5sB7aec+}Au-`uGj=X&xQ;6C+q_9brDmFMqyE_9w?mj{0<(=Xje(u*do2 zOZ3YbKKkQ+&!mcX#`nO6J)-u@=_FsTo)Hy*!dj0N^*FyuR^8^?HNU(px>LMHfTFgH zZhp^KSa261{c}?XZga)E>~FxckLj1Z>^7?5I#;~9UT-(nXOuqiRI&xUa=G4SDENA4 zeFKX4w0{=}4?)Te{uA4KU^$)o{Lu2^^SjH6iwQpOfC|S6q(NJavI)b1{+Z`(^2hiZbXmZwegC6BX~BeLwRi z^Ik{l7p2tL=0!e)o;CiRd5Y3*u2p@KC};k@?@9uMw=J{J?YlaE-Q@RuUoIhL%rxD! z>%O2r>1dGK(FfNd;v;6}*VEGPw#ycfa(BERPWjVidM2W)D(SeY&4|MI6-_D&+;Vy|)6uzN?aOfYn5DsH58dpy# zK~V$l*SwlZakpPk>Yc{ZN7IL%k&+%OaWnPg)8M?ocTx|0Sadkz8U7N7a3_P5!x?`+ k0q^_m<}*Bf!egED55v~Ba}L6+&;S4c07*qoM6N<$g5M5IlmGw# delta 1037 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 literal 7629 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 YA_jl;HW|J@{QH$vRnk(dm$!=eKizk9ivR!s diff --git a/public/images/pokemon/25-smart-cosplay.png b/public/images/pokemon/25-smart-cosplay.png index edafa4d2a21640ca1e5401a034b943766337a96c..603837dd34fdef4c04bed6ec36c71ac7480e6bef 100644 GIT binary patch delta 738 zcmV<80v-L_1^NY$B!2;OQb$4nuFf3k0000yP)t-s0000G5D+OTDV$OO_q`$a=290I z7a<`bQc_yQAsOacLb@d-<5E&zG&GfCTQ+7jV6{_JR9v^Eng9Lj7R2c|0000KbW%=J z0RR90|NsC0|NsC0|NsC0|NsC0y5VD~0006^NklEr+Z zbxzU(9V~ZwCreT4PR!%9OjEOE`X5^!^aq?^pW)z%66^y9&<}+f_JM;22TY2SI_&Gq zum!*!Ra$vA9_;h^Tn2x&Je+ex-mKPZtl9_%E#8L^@b&;i+&yi$4-LmfX4ox_Ximb3 z(>zz6&YCZ{Wq+|-#XA@!ceD=zNE{dp>H<$z^wQH|hf+xyU!73!`#;y3mkv+4q(+xg z7_qg4mggJJ1(*tk@tJ#kletAdc<&j(3nO>+J8Z>Dwy{ycTfq%Zxl^4uyYBq!mPFQ|9qwA&O z8W?)hrpl2Eygfz3PXp~}Gu+#R;UTrH8Ua7JtLa{J2<2QqW2yq5@3^#BhZUG8wKF z-Qlbe^?&35UdYn1>;}9cDP-)EVqf!t%X_I`mOz4NBcy2wHGBY1U*8eG&k{p~CNnbE z+z9ya+yG7)lNMD2cq(?XGA29V(Y;s*I*O`7>+!&$X( zbx2yB9RS?gs5jcwoZECeBkP)WkLy{m_pvtf%3G7AqT%YZruyb|(AV%(7pXoxsNEm% zTeY@>`LxsJ=1JJ-&aWQDBNmdejkfPc`WLFSc7!{Cu~qn<*A#x=r}Js~iH(!_0lcp& Ua_2|_K>z>%07*qoM6N<$f>P&VwEzGB delta 708 zcmV;#0z3Ws1>6OYB!4haOjJbx000mW5E2p+DJdy7W;Ie$T3<9YV6{_~V_Te30Jo)? z#UUByT0-}|A@}A||NZL2MjHVD0004WQchCnt*%zVK^X`$1tHHK|HLiaN~_{a^IZQ-+A@m2P2eef|dj5mhw zsyFZ$mo=@2ap%_+o^ywGZ)Q%xEoJ|?N2q@AC9YG)SCuXMt?m(J5nlNb0R4>}ao1j1vBOF^hJy@YRcIZfPqmqtGg81&$$jZUb6gAIip zS6<#`LG$Rgf=rphJC8bKa40c6Q3r(#w;q1MSuN`10N%*lG4Ce4At4v^NwcqI;PUgR zA9Em}Xnzw*(;Vvf1YSN{!tcAJoKTYmo~v&Jd^$IPQ$eOhs{uSUo2-n?PIyEwH9{RF ztwMALY==!-W;*V1I)qz<702Ml(!#?0gIY?@?mhk3)9Cs58FBPr zK6x@%)STZnu3N&OpXSLo$uAG;>jD2bt#vS;ay_cN+=QLJ==ms~UuA5KcJw3thW3f9 q_AVQ>{&J723-|TwJ@aZ{vilcAS|pmci=OfT00003`frHUIzt>PbXFR7i=n z)$4kKFboD@l9qYcv-M!>?*C5rB`H|2%*P*#Q-{0_J%ln%(=<=-#QZ`3%HQ$O?{Xgf zJ`bk=+&yvF)9Ex1t~!4>xASTxM%?W0#Oc+x@dIC7g#Nql&8nr+Oz4<*$sd29M6@tt-9PTxRyC896! zD`(%b_da})OSPgSj>wgA3#(ohpyQzuSLwC)1tY#(7LNs3l6PwmN-a3SPUa8#axT=g zKMnY$ddGadN{f0%DA&auWj|M`g6pTOZpZa%$g`^l2#;t7MN)EXdhjLOXquyO>LeHs@(y5pxQrZqrc zc}me5-0xB5p>cY;G^10kY~enCduY$G*V(kL@l{k z#(TVPP=6*(ia)sw4v;vb@i;m50YV*VV(+A>%Ncjb*z0~olr`G7Y){0;ywtW#wY1GF z2Od^Hux#e*g5^R7BSm!CbBluqiuJbnhd$!XXYn<^)bP}1g($q%s4jU9P;09H|EW>t q9nhQPuf9;+9>c%$9H-;X`~qBKB@+0I+LizS00{s|MNUMnLSTYy*GZ@V delta 601 zcmV-f0;c__1@Z)tB!4YXOjJbx000mW5E2p+DJdyZQd*5G9h_1C#UUBa%DLlp5$0M# z_q`$a=2H8sGynbSh`b8-00001bW%=J06^y0W&i*H32;bRa{vGf6951U69E94oEQKA z0p3YOK~zY`wbko-gCGnBU^5_q*xdi+?n?kg3+vM#OLwUF5`Q_nZQDlMH$jg6m4D-* zzvVnBNAaBd!V~MgpFNd)DGzT}W5&yaGnchKd9Z*!5KE2w;34FfMGnVNJyCDjlZPz$ zRNr{V8@loE;gv;dBqEYjY?K^%*=`ZyALyzkv(0{G%|HeC{KaMAID-eaPs zk4yWX&UZNqbBtO;BEq;$F25z;LKIyEao5=$xIGPd9_yiUl?%lW!G}*nhR1&I@c@r>$g+J8Nsh}S$xn00000NkvXXu0mjfdN>=V diff --git a/public/images/pokemon/25.png b/public/images/pokemon/25.png index 7b1104a3a55cb93288c5cb0fe0131d6364f662ff..f1cb33f9701bae9f6d8aec0100e3ce7f84dade99 100644 GIT binary patch literal 8050 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 literal 7629 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 YA_jl;HW|J@{QH$vRnk(dm$!=eKizk9ivR!s diff --git a/public/images/pokemon/26.png b/public/images/pokemon/26.png index ae0a7aeab62ae1191d26be02c33c94985dd1f06f..f2cdf63c718f05081e0e2396cb01acdf53bd481d 100644 GIT binary patch literal 12547 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 Z{{vfxw_<4eE8PG9002ovPDHLkV1lR+7v literal 11356 zcmXwf1yCH#6Yt^f?(XgoAh;jy1os4YNC@tP;I6@4F1Q{phXy^|Aq02l@%`U>TeUUY z^6Tx9p5CpVXbm+53{+B7004lYq$sNe0Kho@cf-TIb4VNVV%{5W4WN$Pd;5NU_#kb> z!eV9R;33WP!wNe^TDpq_xyy)W{Tt7ISJ+(*%Uc)VZQbbYY=M1{r|}&Cl4UpVl zvIPLxmX&0sbbL)ua?c#-6|xTaM0Mx6J4|`!*8~aI9DTMV3L4v3^99;_c^}~_u?_nH zMwKkANZD0Gad&#v3g+g3{TiO%@)LkEJW~^*?c0~HU}7sF?a38rsU`+_dN|T7EM}Ft zhzs3EqEj}C86khbaBVbo` z=&;)-ecCb^+2JW;r#xHXH+ecy*V!C5M~z+2A&-$Xm1y7;fyafI>&}uor`S;L=BeK%ea~`7p)tYDHggMlJmGzs;#cII_)dbO1 zK>5T#OjkxKRbnV}jM}=_V-c}Og|)W$i6qW0mLKa!L;X5t^n+NJ6$&|Q-U*_Trp{Mo z+2Q0kbC;jt(R91XUVS2lMtCqK75-UYW)@k$#-lzCX~B2pO*O8NjNo9sF<4sB5nEYQ zjw)7h1Z+qqFzQa99^!wW!P*Xw)yV=nk8Wovv?zh+M7!kvB!n9-@A-_J?tIWHDI~k& zU}V$BzdneC*wW4uHs9A7{G58*6HM)L7J-|%d^pmL*C~F?8S$pZOB+D>GHWSC>%F3)8lgjgPr@g4i;iWKzgp0< zM2ka|yc6f@(>9t=8A7YgIPx*_*hkH9@pV>C?13IVQU$pGr0C_?p+QJQ8lgc%|ta`PXO7LzSkUs>s^jq?S!ag%AO>XO+Jp*|=XDK-G|y9zYL z@KCvbMjy9ADs$z4YV{VDzxSAmI7X|!f7Ad9W|CX&@H>3#{FeqP<*8On9vzSY3o}~L z%cmTG^Ui;N&ze8%ZL{S41zXvq`V*h;^%#MS|4@9RZ>b106^1;rpneN!l*hWaVgp<6 z>lmzDcX{c~VfmGs?R4&0PwgUKSu>s0*$I5%+^0bi)&|-#?_LZ4d+RMAzJ|eiq?@?r z-l*ZBFtL%vYY77-bgurI2cFU^01@QeX(TvSTLK9$gRU)K&@(~QBb3zA#!C++-W)!32 z)ipTrSBg*?YQY>X>s{`3%Zz=e9!C)85p^0}uk@}VF&(csH&nZ=`-4|ss1f$iJX^4D zDdoZd3eXGMAe1{f?o2&Z!JZ=ZnM^_+59c(TUZC>HbXI6{n0UxBQ8uZ{II{AwIjG4! z(UQxUg5ZlAB=D%+o&58ko}f5eKbp{4UeB}{maxUiaImvGm}pcfKP`4@88E@4G}dWJ zE`HpgpLMytTXUK+S#yKn(~N}Dx+`-U6h;txdSsvGAVC)(J$Q7T^SR$LPp__cdRDQ* zOdxUG^J^+vFAlOpqpzx@y0yqsl=z9-po}YKrmX!?gQV2lVuQG{G#ji~9Li{OhV5*~ zb{VGi z=xI6bGRke+>lCzqIdRx=Z;w`0bN)3F%rU6dG7J9>LCFGavE6(MgED(Ga?iUszw zZ(Nk)arB&{*g4C@4Wi1;P*@6VvQmt4D7M!SA4R~SpENe2YG{z~vxXzSpYCXIu_$|_y*RhlvB=(H(~pWx3DI~Et6XMTg8r2wvx5-H}}q8IMU z7n6>aKIeHz6ya?Y^Gy8a?b&a@&K(~v~wQfw+^3u#u{tGaNFOz4RW;swIfZ@ zj8odImL=x}io^jlv#ge3xE8f(*ti3nMko_{3v>aOcJSG@jp9>Ho-u_i_|ZHv)`d#O zy3yR}DWxj}ACg*YAeba<9*gD@KC6!_hawNa#c%C_nh+n=n;~IqvwZ{ zclrZayB@E)p2Xn-N6YJxOIR+TM#m5IDAjzx(ePDt>D*PG^<6q*f0C5q!HyPirVntDv=O(hQ?X;nZ zX*BM5poy{^FYWsoH_c+lxAVu2=@SN6Oi%Zc28nfj z1=$KV_c2$?H`Vsn6RMVJN7FB@CIVQqJTvADcP5MQzY)x7-Y-)wWnzDQVfvafBJ6&- zmpkWR527GP7avp>0JS8k?Oeen0FPFM&pDurp9*w87rK#QmFEzD{WQT0g_;U$uenp? z;BNl=>JR#n zO&hlX{GQShKtl;UH@P0v!}nW1pga|3KwK-UYT+0hQA3F-9!~FRaD^*}*+)$OZi@VH zs^6(ZD@jtxZicu!ZCda#M*9-MWX&Vcd>|d+s}u}39j}$)IJ1j*wJEY(Tja*Q_anq_1M54U0nBLzDe z)Pi%1Fj3WDbZ|RRjWc<$i34FfUR&DQ%0*z5HK`4Y6BSexcy|>wg6LU3RhSZ|?LOzh zrpVh5qQ=uGiki2_k!k*@qF-Kkl#-FGTl`bRYh{zBPQf1loVUXZb0WiiR%|psnnOpw zUJ$lN*`Z&c36iM8@XjCnBTb=c`3l`q@>W(OMJ?^t4hqlLz}6$^CpmbL4!IblrNLWt z_V5gkr?!_7O!!2xiO%~(FUo)f7*nOL&Z#vt_rKeifaLLcqgr2yJ;o@}S$7iNCJ;ef?;c$+s+C*kVk3BR2gdsgnj;v&K23(QO z@sevH?VLZ?nr65E)Z-Wn!fEqy{u{WH^qoxDM;si52OGXRSvhUHhE^bDu>{qBFt|_s zabbfO;S_9kqLqgpb@ui3hCuNV2K8MtBHW4mRBXquwl_UqOaN)3xAX9tZ4QN+SqYB! zW?;hlDxbsTqjnlX5Z}2RI=OQ>VwPbDSKT*deiD@@oB9<(>tU0B>ZU2MO*HFp7O@J1 z$81I{b;v>`LAJ`&?ByN}iJ%N7*;~X3gf(<{0vj2e&#P`ku?L2@U=k_5SS~f;)iXoh ztO^*5H%E+&xnYLe4b(ziP=+3?0IN^Nsjy}m(%Ok#f0`yn3~zPU%#AZ%Ak z^4VbPbte~~#Kp=eNlo8F7nP8a$n~4M7T34GiN^21mpvPj!WIzkeN?yJaV=_+e4FX$r2SMY)(VcuhZk?Y?x9tV~JUX0@XEjN87r8euEv7w-w*PlBW6N|q7z87H>o}s%6uHkVQVOW{rGUOtd)s8=)?f2E z0>nEID_pZMv!oX)mvsiXwG>4o|-;-nhnmyBR0o#pOI)Zs`A;*88{6AmD^8y*2IHt$#U~|yx>p-@w@!k1d5M^0(DfKGb80`YVOG*au!!%CaQm?$3gWPXh?2aS*Z=B^PuPA z@E*qkb5R6wQJN+{N#-*X=nd?%>l|@kw3>2(k9qg=V7bl-&At?!$;v0&?JLk(-EXH< zYWD>plb}P&^IMA9cmG3N?3BXjC8$*VVfTcPce~tg@-ys#x7vGeOcV~v)1GT^>AL|~ zHRlMW4vcDn_10k=G+I0@VKYLtzv7YgkvTv|zoj=mNM0_~(@G*&O)#1gk+IJC;J4=; zu}0oP6y)|C9(x8zVkZAK%TxGi`>H9iAe(!9(;z z2r>4eC*%5CRkiF$Qu0ZI&F}t+Gx~%Fg6VNYiRSh1XBf@pWbsj7uLEJ2$Rf%V2-9D} zQCVHZ*B=^XM`$&`w=|ztF}#@=lADYvkkI+@+ToI-I8WmG=f80TQh*q8j_2XWv%q+}LeaO1y6k>-QCg5xHGiy_hK9+c2 zX_2h1@FsY#@i=9oW$YlCNp@&$OT*;2Se8-*;JYVF+N$jIb;-!t3zPV&1nKAGe0$Z8 zJ1;u@Z_MnM)7U~D8x4)js_mH!L2)w zfr;9XYV$WyG-BT|ie>+N_?ru5`q9Z? z%2$3??H6?Yxb#jR5S-oV~ie*Prs6Kq&e9bQ_kC7E~@kEuC*8*HI@&8r=_9A{jx zg{lev%+HZu!r`uQ>-8Ak3H^pC=x&Jy$ zb+21n_zw0+T!PK^ngL!*p#Q=<+Ahgl)}3>-blPvR!Cpq^hP?F1mkrp6mraNN`G0&} ziB}?<@>6J}$%3C4w+hm-wtdL-^MXFw?LwS;SX@Yw&fIg=8ZbCddIv;VBV z!FKtUx)KOv8!R5Qh?4Y)WV#F2DZib$9ZGxu$K@JzaoL|4uM7K<4R}SI6~{J_bI35T zx*wz!7%N)1w6`rj@93!o+;4fYK58%UHKaW_mF440b?yb*Y85tCFF668lV5x`ykzet z4E2XDkFpFP&$pb|5(HTyZF^%59v?)4Bw}7|g%UR95Yp`U8w9Ubpez73)?b->^~NLxXX?iEGU1c5(c z#%EH~gj<98gbkg!PSQD!*{aoC{Vsvq+rE)u1i6MK_KcIb;% zfoSN!^84gXbP=Ox@p;pX0Qd^D`|7*~<(DN)uVj5SL6ly>wHd0_6VHOmA`)1BybPRb z&*`IS=yPLWNNd}Dyw(yxkRQ=Am< z-`KMt_M(9#Ul%%ISiGB=eQ~POnJI{l7<`!#%TUhV6zwG!K-PYCJjm;VVc^Qe(lV_m z%IRIa>Ytn>%`wIM?%HlkaO-kj*?w(}dHgI$n$AK2-+)rCRdVn1dzUU&B=O)fJN7{) zzI_r-tD1mkWp=EenIX{v*8KyIf1U-GcY(XL9Ne{^v&VG+J?nXRaEuGv9&_upLoT7I zc&!d7gvGZI)}W0adn~He@fMaQ!5fHd`n$FI+G7+rQmY&;#c7`qAaG2a_x}2uEvc&l zB1+XuAupggMfP&qv@!wU`yw$iNLV$lagY+%7{Ibh|$96rpygNa7fT9L7Z%b_9b_lJ`RM9lo5?_A@$xVC;^wf9PU1I@%Mq= z(4~0>d&YlL1B2E*A;6Dtqy}?trGRdbw{;OOUp3$YM|jLqE-DUoq0AbV09IFBt^^^N z7U1SkkqtH{YqZpcM#OQmp zxDwi?8VRw--PK~6(9rAnUmQc*>x6)&X&cTFp*f#xj|viqt7~euz9FL!;1!Q_eF^B` zgVhi*)#u=F$?B|?(*KCXjB@j=e8youZ9IJsRPybB-LB+6EMCft5%u`8y@F`B_28ik zZ0ARcYC$!j0p+XsO`8ftz?AbkNXFm50)xev;c$fCJxYgfq`57>VT|vx&EO*@t|NQW^t@b`z zv)xl(k#V|x3REq~9^v-gZ%>2%%RD{-fF=-g6HI*j_u8NWITG|E(|-H4cvGtojf6A; zMK!x_voF(7_L$M0twIJ53S;N<4ZUysmj=HVf75sTM(M@?HBeoWaT1j`uLp=md`Y!C zWndnW>c!OE{C2+PIHK3N1p-ev*KY(kUyloDCm4_buZWqGf3eMBdhv(YSVL(n_4Vvr zN&LyytpBHQ{+Qa(Im>L#PqVBT&~NivgV66N-W?}0p4S$tqM5**-?SjeAgVKxw&7~% zQ&SMg;!jrJ3FT{fFfS;fw)mL+{o-4VdE|#LR-%nAtr=XL<~O!e#v=>A3bEWx1Cd0s zVyu)ppB!AL!7ah_p>R6H=axPK<;<;NQepsRcu^hCo_*}h|4`-h=)M*xZ1t9iI@ePE ziIyl5Y)ik=0M5d)y5~;jH(P#fFkI{wFkB=WGZ&V5+wN4Gv3K1Z6h;r&y5N>QWp8tK zG?gWI(?3Opl0vqCaN+c(2MzBZ&HfUBQOn@TiF?6wIpTA7VXCzHpmarRb4j^u6y%au zu-NCdtydusLxwB{Hy~iz8N#x;fO6_-M zp4$5Sp}~3eqo~lNq-ZX96@yi$1Fk_kBOUx!@`OU#?Aaf`_2ptBqZopZrAUw{)X!_- zu_bEB*mqHWhYj9xGV3@<%iRexN4T7$38w8F>n3iKahAuA*or2jZ>%$|;I=-L;St*G zwOUoTjTjduH`OoD`f`5mblKl~gW{}Y$78B}xm^sND400sP7j*Wi;+)+9iPC9?X2&M zBJZV$N(Q(pSY*A<7|y0*}JsO%ns1izR52x8y!zM z&|}929Xd*|4~y{2 zzINtastW%;9QyM`h((h;zTL>5EDN6SkH>>&6vgdCjPkPvO2_4WJy=L{!e_FY z<5{fd(`VKjUKN;j&<8sl=~9f8KPegiYlcBOVu7=rNWsN_&rtQ}`)lttsZi zFt)hI+1R;}2ZPI_S>3k#xVyEO9x?vhr4bXuaL;NQxgKW{@%@M-#4T}@uI3?mbszX?d1q7O_Z~$_o~>Nyc^VZ=nxM`3{Um}|I8*vx z&6SrseaoB7n<2r7%#s|X4n!3~7l_<4DE(jF;OP`diBsIWO*in@RWevR5gWcw&h zO!0U{d$r}52j*yXJa%3|E;sMsXsR36%}H!8J{qOX1>wke>OVe@7{~V5s4>I#ScS*e zjV~1*d|bBjauYHEJPLdZjK|&I2X{#^O{)>zZ7BDNJa)^-{xT}~7L{UhA?{Yf!dTuy z1ho%*1B?DY-3c0>6KP{{>or4RMa^mz+-B82s8u+3@`@KeIh*js?f19Itnl#GW{o*X zz%bQn!6QUT_!0Rg9>+gVajqt{lB!d>c}+CXO&#m8X@w z)?c`s6QP!0D^q?Ski6HNE|8Q9$!}FdE-H~Bs4?;V{yiQ%u$K3fBDk+v>pFe(Vhia@AmkEjEmINp0}J>$2~t-I$k_Tu-QWq_$w`mJI@Y;=Zb}JzfQJ zVWMLvw7lwXfCo~u@kD+BgCv{BTP(W-8azlkk20vKbC!^fUEFiVS+J=SYPLV+XUFEg zZOU~x6%aka{f@NadoSmDT(u3Y(89pdtL%Te5aYEt0JO$k7eWs~E0LeHEI+pV2j#e` z>AM>FksG?PFdZvjq~g01f54*J!iY_6eu?kTmZuMD zab6P?J+b5mb^04>sx#(Y3!xTULcm-_hDTl^q}%v1G}*yWWeF0=YOT}gLcumon;2yX z2EZ_X+5a@L)Yi#2G4L%d&@A9>?T;X&0P=TNiN=yEnFE`8b7S1UibOP!Q{3}AqbQ#n zMXGov^85b$I@-;gJugi!Dd`h`KmV!KR?5i)RrH|6Cc_TFXOS5RFlB7mGW!eEGb#Pp zM|3!a505OViK?|v(7J=j-kHS&&Sc5_M@bPk)b_*>a|77GTdAOrPj&^S{6HMQl0)ywA zrE1;=V5zb^I2PePVoa*mwSUnUL=N>DwM&q5SS+ze~kNt6&GdRX`;!cJtwYI(3( z(9i>jDZcH=3;hkE47yu|*dYN0yYKQtMB;GSi7MHw4rrP#$gidsX`ZY$w|&6`_urud z4GJ@Zp^A@+U0rc#xCXW7a9f}y5rf{rAS%K}22oc|4X6~VOUOo9&8NPSCD?XG;eFJh ztIbbURtHydSzM{&s%~yel}21{htKLB^LZo2sNJ`io*ZWxq8j(ldi|5VQds5mv}9o7 z57c+^2;hG0b+|vRx!BZ_i<=qWN_q3@LUZxv8&?gR8hV-UXdNdroM9;oz0}97)vpF} zKe>*7A1mh|fz*WN3W<0MDGCc|oSt;XUOccz9E+hbp=0}e#sl-Di~K?>VD{AMdw-h` zA2d)5+p-VA>oGTu9c`RoMc5b~*KIfxK1gJod5RGfTTqUm(TM7e358<|zj_P87$PG$ zUI;&ClBPs(L*kAcZ7#n$w&P_sA``W<*OG2i|Ba#ck6TSIB6gb?!S&%p@&J1oarGoU zJa4CU{nZ=j-w+$;4pjky=Q%}5rfz5l7Pf3y)GE@IpCC3&H<)B;zz^T0XfyoSwL z{5YrGcRhM%J?xrcaFFQ-q3XY&*L)sx-p675ttZ!EI>a?n#$Uye8IJGK*<5LHaGr|c zQX_6l=J?_iaqrl{d`H4@M@oaWafKCcY60l6gWfd@0HrgJN715P6Y!_VggSTa3adP6_uV zOTJ`4cdA8Oj!PGsy~@yJuM3>0{*@oS*FVzFz!7=63-L^UMNVt?-CL8nu@U+p7lf7W zW!M*;h+MNps{`VcsUmXgKN&UBbTFGOXHE8N)GOokK`rnrYM&hnu6ex!%)yg1*%yA^ zv4V{0aWjygISy@AK4%OX#t<<5NIPHi+NII`(i`qln@n*555&n|1gy^em-$N(9|15V z*riDf;C$2IQAJ|2d6Hfwt7$m4I|8L_sc>u~W$YbjNy9Wh_=I>&4lsjtaqhahtE$nO z54fM?hmwq)n_RK-p}ePtB@r)-NJsMnt%k_leCxQ1O+1;vYl~%syJ#{;8^&ItiyH8x z_TqV8B)PS2K;RsNyY^}Ci(nsE)#eT*LqApN+{3>Lo7&>QHEj6I33|MW5-BcZ#e{#X z7R4vDtQ)mp+4d{MMZo+(y9C);pV1`G9a*fe}Mi`;96O>-ESL@+Xa(hK(Mnd#*1E$MgXfPn~D9xR4WA(kWIS9nyW zu^(2%?!k)sgiRr`i;nwSsj?Hb^BGYtJoAv#q#^-IYWvLOk+wsmjz53UWAolA09t?a-|tgU z2Zkr^c!p+K485(R=Z8!rCc-Q49|3BOmPD)}1!QtUtgW_iVr;Z1$+ei9mC?BlKgdzK zoI-@>IVB`1};%C%gQ0|6Y~`f(dqpLth~AZBJO z;N}FRIy5evHhUCgA1upCg>#N3wn^fuIcuJ^v5_$Q91=;j$QQ*pCbW?xos0SxwV!gE znWzb;#F0ulS0DAUipdxLp+ZYp+kwGI-RnULztDrY}E*~w%4;JBH(5&BUqxi{1-{s(5 zlhbmUhPu%!=Rd0hVuH2JdI5UO*j6(;sDp@HNCm{!rv&Kt>dHT(2xg&=D<<{`oNcPn~U5 z0)7t#n(9S|HnPe_uI5g-m?jF$HcYEZMT_|SM~!*vF>^50{YMZw-nRT|ZeMZwXluD%2Sj>Bo|A@J`0ZRZUD7QPE4 Ufs9iAcSu-CPEEE}+C1d{0Dt1~b^rhX diff --git a/public/images/pokemon/276.png b/public/images/pokemon/276.png index 1b24f59d105e741fd97909420f398bd7eaae7202..a191440497c617f1435391d107a8d0eb662582c2 100644 GIT binary patch delta 2398 zcmV-k38D7l5$O_;B!2;OQb$4nuFf3k0000mP)t-s0000G5D+>#F;Yq?At_QZN_(Yq zF_bz|&Qf#clo0Q|V_IvRy}ix7z0Uvt{{R2~f8~3d0000GbW%=J0RR90|NsC0|NsC0 z|NsC0z)*`r000QfNklyqOr424aCW2fEey#L!SV1F(W2#`GRYfVkn_RO9> zy7)#utFkP9t!^!>HA~BJJGN~*4vym`?Z2n!?2c{U_w_JK&(RJ^R9m-wbFmLKN87E5 zk>;`c_KO1XK4Wz5b8qWgV~9wYv&1KL;=I{RRre(9c6nC7;}JdJ_1gxz#MLv1RG zjGd&Q{_ANjYLB6J6Y)4waO7!Cp>_pD#q%`9PExugElpGJyN`_WTw#|&?Fwj-Sf8QS z737(uYk!g|Ldwf?-P5wUrH1O*&CpK0V{z14jfO`+AeHC&g?Yx~~UhiK9!hn6Q+s_2x-~P7f88@zLo8vdOhEIeYbzxX+!g)mTbO2%1v}pF3+E*`stnK0}*k|;{vt^oc!%LX^qBpCyw*BZl zQ*L+>a}O|k?UnDMb4H45FJbN;W;=q= zel6sq_f6U11Als{)(FxOhOH~h#l>+9jo=?lNjnNPD)(SLK( zg3MRL=Z*sAZnr7V7scEQVdW)4LFTLB3r7KSUlt39trnY>a6U#yri5W7Jf)N{cjdLn zv=pZ3(3B+eWO!Q1XYLMrC*&1XAI}{UgmkI-0+MZ!ecm|D<#am zit=;f?v!VER8K+XVf2pj8gtK3{#rF{BX4NQS9Y0u73J4WiF)9Up^_)1sjhT zhLQ==TPVL;5LA_)Dp2W-%4HzEf$}Q_8DTR~TzV@}8AxZMd{mI)m)=%NKsuKupPoK? z>(xYdh?;O*0@9g?IJa!jaeuZ_0@ArCKgal=Ivr;#Wz3z2@+nJD4>(L6B|b}p%$K+N6#k7AHwJJC!Qsk09amt(kbis6AJyKyW4D^UW@?NA1Ux z{26?H7|EZ_=YMCA{3(2X2FZ`VF=HlvJjtKJ=SPzK^V((wWec5_Z8`WmYfdT8)a`u+ zBL6FVzRUc5@PWvm&*wG!D{DaTQON%apYNLb;Mb9VtsoAc&!*>F%%5L6H@bw+|9NT8 z6ixZJE!okVd>%hrA5Iyj=kc8cDRm4^@cC9Gc2=Ofzes45-W#8%vG+gW`6_f@N|YXj{PFogcwRab&sUDc z^Vf#rXDFMJUl;T*nI|`p8(xQ;`w{s>t6S|*S+p_uY29=UiZ4!z5b8uKhxV%f#sv| QhX4Qo07*qoM6N<$f<>R_ApigX delta 2262 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 diff --git a/public/images/pokemon/277.png b/public/images/pokemon/277.png index 3c4475e5fcee4189cd907a00fd75674064e3c860..2ec0b9b8a9a49e9130c0703c5005fd23f52117a9 100644 GIT binary patch literal 9567 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 literal 8543 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 ONl{K!wp7N{?|%T^BMk}w diff --git a/public/images/pokemon/359-mega.png b/public/images/pokemon/359-mega.png index 99e95151b793a16c6302fcc7d9bdd87f3b0517c2..9c026d7877941ddaf45ff890ecb962fc75b066be 100644 GIT binary patch delta 1127 zcmV-t1ep7^2=EAy7=H)@0000+@DjEF0004VQb$4nuFf3k0000jP)t-s00000003fQ zgNuu-w6xXL-tPVV{V6#)K}u>;T6=SQta~Xj%_$)N|Nkd7HCVVzMF0Q*4|GyaQvm<} z|NsC0|NsC0|NsC0<&B=E000BlNkl57-_I3eB6 zl-b!NHXL7F1Sr|IODp+$?ekV1{~g0TD1VRP)G$i<2N|KjuqRX`)bt0L0VEVCbkVa=cE|grRh3JYxn0 zf$=da9@gw9ikS7eJu8logfDYt7l7GIIbl+;2T%*W2}vRnqnzhTpr%qp-wye#Nl6Dv z#mL#=szxb>i5^}9kzL)mVWJMlKM}eZtQ>lj8B=n5IDZ)>an~XaVLD-4PRAsJl-%qz zj0Vk}GTND=<_MWHnItAr$e>v7DPvw!T)c3mqB)d(P^=zwcW2HeCWI9olgh6WCnX(I zmqDzyJcDc-0WXI6`u+VaaX|EjLPGbr#`(Odi+GN1U0?g-`x>H0RLg*HwaYpfM10^(F(&Xq~(q-H(3cD8v zCdj~4PNbJI=C~>cls@GSipZWEe1y?8;Y*^6aZLCGvr)z1 z;eR|>P17=_J-v&;+8N%gmCel+4Z?RFLh;pCXwKsTfFm!{h>qsU^KqQHAv3(4B}nxQ-A@Pgp=eQ|O_(JEBn z%|uz2(lMyn?D+B|$yxI-=ptLD)VfBuLw6OFQUaA6?oYZ~%w`8~wL%v+p=w#gpkSho zj+vU$Xs2^|ao0!-Z1FEnmko1uinOOzEFxLU^!VmG`5R2hvhRx8fAF)1ozd!KF-1T5 tEe9UzW@i=I>dfAuJj0fg{+9Du_dhwQDVhwu1y}$8002ovPDHLkV1hSP9nb&( delta 1068 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%0DAz9t#P!TCp^YhL+|+ z2dg$DinPyYc;g%I{O_?#zu;IMy5vuDjgE_<)etC5$;Zsc058YIFfr6!ML1h z#culxy<#-?VU!6}D41j!LqME6Y78W_M@!~*?|qxlsi6#X3_p4?mVi9@Fv#hwWO7Za zS}C=tfTAR+BFxw7I{bJ|Q^5iz63+77Lx7$pmUu?2p+$mNZA-`_d+ffIAsV}H!&kC^aBec}Wx8CT-$pj9D z5SrAs3SV)H+lu%QeFakU3pm9=C>t4f@J>?BT@-8!dH2Xz853k zHLYBCvDwHrc+s!UIX<93er^5^SR9up*F5rNfwXe%)oSHo#td#tch|34T#3ZE@ob>) z{@5&V#!6zF)HbzP+6?Xu>i&jedaBfj8`S1!mhLF#nflbIOMh)Y(9Yx2qwJwqcI}2| zU%zCiUYDFSLfWBZJez8EhL>|J6o0ZsERL(c@bzY`GOCsyZ0B_=O4uv;6SZB|U;I)L zIFr5hVz8pCaF)cGeYFmERTyShHjM*YVaAlo`>g#vdA!~X{=Ft;9V}GIq8hADN@Be= zmn_CHK=>q<1-0iNY|pjAe#X8~n=lzinni>eMRfZ&x_gG33)~mGmD4fEL0^MoU|Hx7 zUY^6SDR?7?1Bx&M#B32YzVfMA65YjM!n}LIppz0y>W_ogGn$+aD0ORXl99W@y>FxL z>oVIvUA+|@!@{az4;mHt6lF)&?mQhd4`RvZ63f)7EEw?2+7=&WwiO2b@a{J<)8i)Iwg{B8#O-HriZgU(VU(jmWT z?x_7!&vX|CDOMq}d9j1;QdzXAyPOo|M!XV*pb;tml*G zAn_iwSwM<+2s#O{FI?^Tvh^V~$Ott$HHbL_V4_F}x`ib379gq&?<_QNKT{-uS6Y}- zZ*t`$3a)2gk-6uECHC0!S)YKV<&VUpH$}M3wlc6eizWH+KpFnoA}>5Ceu7r}A1v{A{PjkB!rUsB3<32< zsl7|P`pl=(O<^^i3?KU$;1w{$ArblV(HcWoIs~=)z_nL0I>1YySG0xx;7lKl+w`$Q z3Hc3>@H%-29Y2BfZnnE5Zg&$mwA+yBBpk!%i1cHNjgwP3t9iULsJW3n=ChBT6LD7P zR^YPACBt7oObEUMU*K)I#1a40+~;GFe; zmAIft1U*dLe(gS8DjEiTsqp-Dcc+#0TG4L}tN916_q6sqbUHHcNGO~AxwwgkVLU#S z%Gn2#d2eWidAU?@zut1)uB>y@Udk}~i}TWsD-46B$KH2tOI-$3`zl!yACwoH%Rz-e z_uUl|#3S+!WuQ-@d&i0_H)gf$=(+(dWG7V@V_B#x$jrS{yHMPUHly!dISkWf=d1v# zA7$TIL3j;J;^J+wL?>R0Vj<5^vgoO|oaSh9?OT}Z2EY45X9`7E1imp_GWfFJ>3c=H z75V+?Ux9wL574J{?9#$-Zp%pWbB#WuZXw)}D~K1CQYZ3KL17w?r0hK>fm;w#&`p}@ z3{fIH$4f-$JA7U3AoO+;Oyi&5 za7SZ60)9gu3FY1oXG1f*iZJoKK(r93#r-T@wA^(w%#kANY#r#1a7Rb;!GEi!=AjxJ z@voVh0ZlKTVcl;r*W#>EW<91Jns1&$WuZ@AsvQ5NMaGhTC_P@!B*R~ZW8HPnF@0up z!+>{oK32li>nWzG&E!Nbw5NUBXXf=kNAzwr_C4F0K-fIT84{O#4{on+w6wj(BRp&|s397^C~F39?K@oGHIWGt!V(K-zdJrS zw>X28&tRBH(F<#GDHu-#!T2xH<&~E6Jr71kBRpRF^pfiyrsUC``a0@&U^M2&Hb$KW H_a6Tbc%dsg literal 8787 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 MlvS0fk}?hYAAvn2uK)l5 delta 8007 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 diff --git a/public/images/pokemon/391.png b/public/images/pokemon/391.png index 480894c93734476c831a4be3df822d163394a9f2..bb6abefada7aa2b3d297d7fcad78e3cdfaba5d85 100644 GIT binary patch literal 13446 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Ȧ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 literal 6948 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 diff --git a/public/images/pokemon/430.png b/public/images/pokemon/430.png index 07aca365e02fb03dd7ab02db4708b62cf6b66cfe..5ed0fb19c203f54273f3f56dbaef7a98e1b13435 100644 GIT binary patch literal 7158 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 Da=X10 literal 6743 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%0Ad^2))g$gV$j!77mM zcL4R;$1Y6s%qoaK{bPMO^~Wyq!Qh8u`S+swxMY6pqIP7whGnz`m$Z#t)DEa=8EwZU z?PC}9!)_UEr;=-rUDOY|Wwf12zWcF@>Xy+%gZ~;T`L4$i%@+y?HoBjCH zDHh9U#t94IIsEr*R&VU0evnV2#WI>bKBOYO?o zk1ReOm03m`GyyTegy%rjNaB)r69!8zwT#yLlOQKR9xu(ZyA=OGI~*5VM(gl2V^)Cw z&hALKF$snkiY%jVVqqR)E070O&-h)6Pnr@qh9b-8n@E9=$V~yLn%6zkWr_dZX(W;s$XQ0`#ACojoGNx%Yyw%}Xq!O#r^@k5=(t)mnENJ4x&f#=O8XdL51(1djWmOZe|hf~o}5-nn>UD0q=& z^h&%j9w6X&aE6LuPN1s7CGT21#i+nCdM#k=1;j49v_}M06}x=Lu`dmddEPR*fa7$Q z>~eM}spPv3HXwuJ9$&YN&P5P-M<6C4vCG$|ie0|*094;a^{bZA`5;Qs%dyLM9j);= zM)j>=X&KE6T{wW`_aLPt*Wi+O-8h2*8IyY5g=KVaNxZEZmT<;Fh12TYy>Mf2+}AeN zUp_)0PYY&Ep69|OyZpSRh{L-NP2KiDLAzJY0JQiZFJ9$5Y6kpu5f2o+p~WwuT_&Nn zLUtL!>$}&T7xw7txx58D^u!xMJSqfxzYK!cO*{#Ef#RwEJFWdBCa$d*?Cp0!-`bt4 zHo~sZ##%#d8XYYLd&!twPkG#R7-7=JxmFsgWc|D}>HXf6(tFI)* zT#Sw$KlxgNy?FFN@7?`91q!>m;td9YpDbLQSMk#8ZzR~u8$|7a{DCIm z@z+56^-#dC{t6EygzXa;7Ow)~m=Xy|9R34>aQ%VYASC`>YbRmf2oZKbDDE}(J+F)C zYaAQ#ciwFVJOgR7ao4YHz+F&d bcOU-_0JJv~Sfaxb00000NkvXXu0mjf2P)&L diff --git a/public/images/pokemon/486.png b/public/images/pokemon/486.png index aaee1287a47f2cb425ded31f80d30de8a7289d4f..328ed80c995926a91e77568891ca35ca11b2d84e 100644 GIT binary patch literal 16248 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%0A>m-55UZL0Bu~A}S0rw#IgL?$e)UJvM0i zi(Hzu)mb4$Xd9F$)28?lE2mf|AK=A;ZhpBYC`e)6Ao(k!mE#r_+=j{?GoZ_(Fl0{A zGs`p5*EG`r?{}0woP$+=oM_}AXDql3BAm}{%LXpr_0rgQn`04IcZ=l+84j~H>0V^e z;6L_b$^AheHl|dNS^^?i9pCrtsEjQ%b}U^Jo4d1l@=keKWm|Y({sbEp-Ik#VoIzj& z+$7hkS7^sLJTcR5!$rPWD@0X>zJP?aDto;(;YwYw9wh*xa9fUPEIIJdXYbcgmDx!7 zv;`K8KSD*e84GlzFXGd8zwYm-2gkz&#$Jbzn#JB1_*mpx0uQ;UF&cl} zXT9@Z_+cgfE?jR|(o!}{`NoxyCv~qCPsUK}Xo(L}U+6l^jTq#B&poQ(}3PJ48!tNRYoKmJRHx%!?y+;APb{8!@#Bat?nK+A)}I>p&Agx6+9B zju%^cJF0Xypo9Yc>F$1AKx4i7YRBP+?KY2>ymdr_M=yknqu#Yh`n7WGdF$J>RnM;H zta6SR+OOb4-G~eLJ+m*A#j)~s+2n8$9&4-x<+q?c1{TA_Kw9O*8XTJ63f7iw^zTGN^a5;HN?oqmdj z?l|6Yg|0+Z-PK&0&Ca$I(~0f~@|?PVU&LF7N$EIOrNTuo!#zc~Z~docqzMM9$m zG|7+il$dLQ8C%_Mqo7&*e$3AZ1&?=_7A-NiK9_j0)}kW`P>` z2nvC_zk&HYkR`55LF5nA&fnJo>B1Zq#G{C=*2OPHDmW1f<$*1tz=J+%qX-L~H3UIF zFi36Xh*dK!7*MAapUt1$HpFbounnu z%0-mfF4??%tQzTd{p=R3X{(WcP*Wr&O#kFa#z`6mU}PVll1_V}Jq#QD`8qzbBSrO{ zMis01IWuqkD$e8MeBVMnpRk6$rkSCFJ^1yF_=?-8{Jn5Ms0FTar0XAkf9rj$ zjm=rn+o6PDP>I?L2oKQ;Hg*q4zOfB&7_v4T?UMi3R2t5Q%v#F-R8vS>+1#dtC=I`B z=B29mclSuXQ4YJp9Sj-9cfM9%#3_iyM{?7D7yPVrdiM6Jcjdi>_I}q|^y9|~w7*dw zopcZWFm3UlxXNYT*Duyo zDM<$B>pv_v*X(J}Rio(NTY)R(mM`@g zXf2zZjZi4y%jRr0hJI3V)9M!z?zL}{?dIA7q*>U>pTVEkLL;YYLl5}eR#jYxR_%PgxQPQ? zIND*YsAv|*^0PSGOe+Y&WG5(Njusb~fCe&Ex%(5A>$0e|VeprNHe6w!4~NrhEyp^FtK5~Of<%A1#l@-0^7e50&cU}Twe zk{{95u|xWSL~xgpqnh;+CRX2-~ z$6P%^mBtD&M~Qj!?Gi2Sk-~wJH+9`4c)I3(bXo^Z1x9zPzg7M%dmSw<3$b_^#=pTU z$t{|ArH3-VpcbU6tmf|O=G2w-!VP(eU^%=vnKtcIcGl|qB5@7SG`cxW`k3mSrlqR9 ze6-Ft%(03pu0n-=MK}W}-~E@u>jbtp>}gL`qeP}p4h+w2;PZrLBKOEEMj-KZ@Ul3dVCb+vW*cX6W7uOEeyP zECjO3yVWvQq-ox+=&`Ni0@3jD@~9+{u3lEc)Rt;=Hd_OY$@RasCNmQcn3k1kzUFZy ztLWYeN!(R7&N?$E>8Lowt2Injaxj40a}fd3x^yCO+aNCXvqfFU!N=t1Ko=edIef{^Q=)g8tfDKYHR;fl2moiRu7cTuvXFRv>&B+6>f<)YTyi%uvSu1YDk zla5o{Uw|II1!$8!CjF|92vitk=T8&dTB>sfH12Bbg4#hPR4fs(CgxmAJ8Tu@sa6Zl zWaxKlq0X@_MSnUc&nm*M=y!dw5?bdI(X*~hCTBg2bY;X|Mi)uyuH!w}&<1BHq%BTuTc=^uD^^q+-xVp@?g z$7r^wfU{&h-UD(b=MIU$1ThScBQu2*aCY}#{aWXii2L!k(hU+Vb2Pbtoo`YRoU|k!!%A>Nk7O z&p(OxJVd!7EEkVr6Ef3j!10PO@)(F??#cPjcwEr?i+?+`YqBDa6)+J$c~X7}1;~=? zyN0&5GkK-MRakq3{cm3P!+*Q@;S2XRAM7gu;$kT#00 zOj)TN(WSeoRKq#btjNON-H(e|c0Hgon8QoO!|y$E9U%Yxb-@c zIaoxf#qWos^>{yyuxWNkJ=eqbSUaZ3IDSwm0--tG=UUI6lX+3tppjjr$=5lW1kmE1%KE78TX{l()BQ7&Kn30@uX*hXfrZA(-r+ckylB=_~=WeNo zNH*~VZIy%{UE51n&fSVLH`okU7@xsiBZ$?_=j`x13uIb{Y)xZkQ5Htoq;9*RnJM1R z;~8p`wfO}Q_FIRPHe^bWM!!i@C0&ZNP2lXRZLA3|1E+9I1k#R+3%%g)x_SpukGn@~D8Sze>c9Ruj zSV7_L$25rNkpiWyrMrBdyuAVsCk)TQ&YdpxkOA$nxeQ)-(rEc0$}e;On=<4jciF zkAtvMsyPGqV>q|b;FABM6qROCx5SP|imebZ2zoE@|3ohOJFqP$4pGWBC-V|-@G=A| zIWr~Vy4l>$^g1QzG+%}4z)oYLpY+B(_R^}`KjTjt${(R=1T^PtI^9bX7@hu_U zU7EL}!(7*SnmH)prNw+>i#hG{hSpN|-|-7PX<$bIv92yVOPl$B%tS8$l3qN3bcQE(U5-ndV*ReeS47OTI83T@LZ6%tXQA4 z4{=halBwHJ`)26)#ZJ0AId4b9KR(c>zliXRw8lFbfA^h5-dr5ld;BWQ+tKn5k9Fs& zYmX>>+i9%^zYDGX%0P#guUi-va21)1Vf4jLYJwVgkyD!1Jsb(@<%=XhX3>;LjLnoy z-xgG2V~OD5o4gtmJ{Ch7;ckhNO5GL&{6~~)Y#00KsJn+SStQK%VrB^n_B@;7J6l|R z%iQDJzwg3-W8=8aFA2Ox2JiU*UhTSRxI>=>hA>=mE!a=dEJ5OcAzYvqA^iC5x%9*= zP&k~Bqu;m4R2SRDIy;)?l*$gu$Oqc=VRCLfGCvwPi@qvuOaEP2H$;@0r&RC)tM#NlSMJ%;mZBoLz{R{~!_s?Ni-{JzY@<+_hQjG)mJm4V?uhNj)`GWWKS zFeaw&bSz%MVW5Ak)m*vjnXG?*=O=#R;8PH$X^r{v)$#;x{2yTP#J4eP4whZw$7CjO zzGlXxZ+}{m{09Kr^y*&mKOGl6(gI(&Y5WCx*X-Xy{>9Ca7Gg#)N|1_xYop_BK_Ksl zG~%9l&Z!@AJ}dB!f6zzjnrBNw^@f(}OiqS*Y~GPjssoN`FU$5=vLcgv^bO?A{9xQi zF<=KGeNs;;*>WT(6`AI-J^p$Oj(eb6%hWBK;4OjU8k1HTnnfPWoUWl!*qPMpedaMM zJ&~NLCU%Xthkmax`jyElu85W2E>2-~TsF53)9u{DbNb@%4);h}{B?vm3GaYT0HICD zCeP>%+TwU*u0B#<*J$I#W0$7>^T+Qa_f&c)Babk=12zE-_+6EilbU<|?AIc++5s)q z%)iC8wp4498eL~e+7r{S2g-7JZ2ZM>>F$PAg2icgVsSWRc$MaQ5KMcNMivzQ#`NR%eMdl@Ud=rq7a{r87)mr% z8I?5xD&UjEKLO)C;L=l>-q*O9O_@faEpiy2+5wTqmJdX#7IEWmzn@TQO)Wv6luhuy z0+KKjpXv1)m^L*&0&l|-w8h6BRlhII8eldHSjTBE*?hv7zbKsIUmUOg9AeQ-Iy-() zVi*Ba(kVKMsl5`}WWsww=vj-#JwllOs7+2{d91nDm_)c4Zj5B|#IQJS^f}qL-RBJn z=oK5Pj4W>gDWp^@L_5^isX*D!n#VJAgPSaNNxX*Z862w_PW^DLSa+=V|TJ%aKuVk%aS zM=U_(W!Wl1?yaqo-xhK@%|UOgT=r<+$wHc~7JCbEOBIHVvl5R?B6CT$%?I=%h~$2< zk(ZtkWViw1lgkhg|`jZ;&6hmuY6OX&AFc&3>J?NndlZ z33qxST4KdkE_!XutSR9P@cgdjIKk21{e8uwX{HkmtD*msDTl-!lV;XK@}9P`77OA# zDN_EjIPCo*EzWeBQ<8=Ulo8;Le~8|DA+1is%if8>u*wh|tyvxR?J(7Ki%1B|kH3EZ z=@Vk^6VRsn)A224aeNXTsGztQDKi1NOn=1Be?&U=&=`3X)MXPCWfzpzVWH)Q3|WB= z!a#-LGx1J18~l_TByT4i*L_NvVlVIiB)m(q@C`~2pkEEJz3rek6+s9M`{HqiT}6~R zx~u4#xw60kv`6SVb?9%CCcDy}VYC)CpxW43Q3_?w&uSv?LqAbnpWw=gQgF{R%2H02pCxq^TF<|;VlA`sWe4j;# z#Wp zU%p3LqrVRbGUzWlP}H;%kbgjgbKCAhJ_lA4KfR!2oFZcb?0icl6lI^Z!JeWU!Q@{? z_4O0y3L}!?+Y`UO{87y%^Yi|%{H1`Y$S|W_=s}%OAbZ4=;ba!i1`CXULzj)k8VY-1k^4v7vHeFDN55xjs4-te{~|t@C=AuYwEp7 z&L$*vEYNaHy33w2>8Y>Y)S**enWF)-V_3h}ed?)Pwq@q9+a5F1feR%W+z&BOvNm4)Qv%0)5P zgJAN7UUeLJ6#&3)j|yPrbD6O3TqJ#Hd`W4Ixh^kv(WCTN!_cyPRsVDwm8aC^(?WiO z`3{Dl*S57T3jyz99`|<~j4drEr|nhKF*ebGypcOQ#>qVD*0ZylbM!*>l^&L64)Yz= zL6;Lg%^JLAr!kJRpYo|J+ae-Be+by5M}AXirYW$QRAO?h5_l6;f{ctKdVQhs7l!MFzBIj? z?711x<|KEWbcZe`jq4JJ14O{VOr$w!`E5{cO&)KeRvgLe2BQ&K24b0hdqupnn_)kf zcK6&m2|$-&{1OHVc6YT-w z;@1+CTaBS(vsz}04^`yTf7802{DGT&WshS5lfyHmyS@ zEJH%e^)n)>cG=SEE_UVXAlj#C0I^jk+i!S}1 z?nh2~ny=GXV)jQQ z2&mF0h4#v@P*UPD)`Wk*Pt_ju)LxWc{jrJ5OwP{ZZBzn4+TVu#0egU7u0c%dape~9w6 z;@cUgj|FB-#T~}a+`0yM#T{`bvFkJH)hjD~aTjnm^XC`)a12+mqX8ck;AWwvK%j}w zS+Qj)=zfs`A6)}m-KT+4O)8gbQ%g*Udn=N&N4NfVQm1= zRe!ij=Xl$Oy6^9#X+|383?Fmv#N^(zgt3xvbkysr(LX*~n|)KqcMu(TV6>DKyEXwI znFQ`CDxxTRP^n0tG#E~Qy9uzVu4kH6%1H6m5_A}3&(S&=xf@n=*Gyq$AmAY1y3=P| zPBnk~>0n4$@))W$XN}-+mE3Jr;W*Dn9w9LS4k6jtxC-SeJ1KH!)K{xsvMcj9OdTLB zY3kjtUc}N zjz{8TtX1FGi`yotH4@GbNrD3#r{JO1&Ny}Mq}*uqsGZaSm@+Q$qt6cU*YA4`%KBP) z>jSfRwjbL0Gnt_0pBRWiKOQx>@oIp&w>|yOfi?)D<&&P!?c0@fOcbrZXET+ z5OdxQ$Yi70sn4&Qk;R+2G|WXBr`P(--~?X=SIXXRKnB+!W%>_*s0NC%`1!e(%am~) zL;R5stKX;xqvcPZ>;EW#G-mVk+n4l=Di$MuwV~zzR7Fl}*Y4;xPNKCQ+CM*iUaZ*Q zAO34jznTu#+cWQl{c-)LCnA+fBmIsf2`;7eI8S-+274w^=FVEi|n{$=N}`LJ3P#2zxD>I_{nDKbRf~8uaoJZ zk%j^z5nG%^hf1YftoD6{O1`=K7J*V=v=uhVHhOX8_@e4OG3;kn*L2K$y#)s5s zXym_ZfBt{8#5EajR`(p|(5Jn!HI1qCw`mWz*3={|dtyoB+D~~Y9VWd0V-mCv+R!J@ zT9S%bZy=V{oE6kWW5KI;qRd(nide7z-xOcwX0pNeHI&8H;V25)z=&F67o&(j!&SV*zx_XcPMFbd9f-H{eb@kLrS+4 literal 15358 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 diff --git a/public/images/pokemon/501.png b/public/images/pokemon/501.png index ac4c5d9fbf06d657889d2373bdf9ea1c652779bb..79a012cadd5a7bb4ea2bf460eccd0ec66894eb6e 100644 GIT binary patch literal 7603 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 Vbx|Z=Y{>us002ovPDHLkV1oBGO&$OM literal 5569 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 diff --git a/public/images/pokemon/502.png b/public/images/pokemon/502.png index 8a7c2636894d025f59b57dd78c104655d0f4dcfc..ef1291a25202fff519ff851b42aa2afb4b4adcda 100644 GIT binary patch literal 5996 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 E4<&drod5s; diff --git a/public/images/pokemon/503.png b/public/images/pokemon/503.png index d9cf94f3c6f1a5bbd13c71ed6793499306091815..3571e64156c038015bdd894ed1f521615a0687b5 100644 GIT binary patch literal 21811 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 diff --git a/public/images/pokemon/528.png b/public/images/pokemon/528.png index d1806f17f7009a66196ef6e79e02415e68cb07da..fd6e0c54a771b4e0aa89343d79de24d295a76cdd 100644 GIT binary patch literal 12314 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 literal 11068 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 MCNEkiVi^2?0C~i((*OVf literal 11900 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�gw}8$f_KMeF#1jn7G~4}An>pMk<8+3o5x(|+ z-&N;9C9r*?*O2}ZG{F201*^&HJyz66OP;taR(l{Ub&WYtTslWL-CX_X2u(6Uj~9=U z`aLtK$Jt`jtctFBASMikxHD1)bkUg4C0~IYH3HGY_A*T<6t37u>&h6QuCe<^01&yw zC=_f^{GBdn04)p#yE8IbVH3hZYDD8I`5z4+R#DAW;@BvqqGq0g4j&PL8x06`ma)Qe z3e5QaPkjmW1PT{#T8nb;?o7<3peZ+ds1>{nT%%6c!zH8wog7iEkNB(PHHdU#PPhN- z8G(REb;gKm>nOtb@UWD`<;}t)uhFGI{1pa1`eJB~K+2Se_`W#Y=uF>j=U)Cf>6>n+ zFqn;1f~f^(Q`Chcni!^@&=qk7nZuhi>33f$aL>|RV+Z_)k)F#aZMphSfCmzoe+$@VM(fN2XfAQ-IWNOtURG1oi&(mN&=l&M zoOd>rRf6s#u_0Xqnha7Cn?+Y%OM{jh>zh0+R6fgL&_MbKGLRz8#~CBwC<6?}y_F@o zTg>>D{W}%Hq*i0(C=qC+(Z%@(-Re_M#M=g0Fy}*Cn&L}=-s!N8&GoePf(Bx|>80W5 zwVeS?&L0d&Z6$?Vq!WnI;i-dghe6wY$+4GXxe|1dBcFls*jc)PfEw}8STmIfl()4C zkh_EISy!WJRw=T&M1meW9ukuBPidU~*F`#OTra(Z4=M2JS zO6Y;~)_i9&p+-r=UxfqN0mxUee}j-U-q~t?gaiX3gsbF16gr}9%@neO|1o0L3Mml& zS+}Tjm1p+eRJ&;LfA&RFOc|VP?nb_tUAVcKIa|2@(c%vgl{DucxRn+Py5+O@3=3+J zkPZe)aiOJD_qEa~`*qHQ{E3OX!@U7`s#@AJ=5{SEwKbGr$DCGgjGTa%yWbMBh)B3y zjYG_QJh0C9!2>=`C&-_nrLYIIBn15bY85V>5 z>cC}6#5++cyW&e)gKO0eibL={^Mz8fG^GV`rrIPl`NGvB5-Td9TeC)ca3#>H{*=eT zWNIm(hq7ZtqDpl~M!+;?Q2u%KQSp{Gc{V42LW7RjCh6>iO34{=ihU+9gO5qZ8Dg-g zQ&4Z<^@bqlaVMDCRXv^_%FQigV)+6*tPJ5ZgOV^KMgZ)tIZy!;JsL0PMI9O$x&Q_W zy!1h|?$d$wY!!hF-S{HNlr=;tITJfZPTqVik?^{T5Xo~SKO&s8dotpdnn(|8XeDdY z1OWLUrW6cUGfl7u?>Q^Ws&jo{jROCAxHWuW`dUJ#P^M=p!72aJGPsA#iLf@fW8|MC zElSZ}vg|kPHZf67Px}8AJddjx%~tt>7<#LI9EY|F?rE;|><90T(Y<^>JAt$GlS4SQ z+cf;xvSsILh3l_o?heD%{=d9UHIZUKPNDy$J>*~N0{3LuB;2!?Fa58SF0hs_(S|SO z(ZG6^%KsIz11ThGL~rH)OUmEnt57Gz>1l;~I%P^`rO%(4){T1l^gj&27~Sq!m(af@ z%sJPG)m9b>0bV($nI}#!eva*<$);seeBT8Gg8B&MP z5#;Rfj?ry=9~fy+3YqBXs#%@`hlCTR-@6ZDW$1dQ=nH0^4Ri_BD~0_Vlp|QJGUWV+ zNig=~*9!asE3qUl>bMK4)pR{I*T2Y4aBVZO^#8H?z*ncoE0f5O=W=A!NjjfX?V%#Y z#c9UC>l>#m?qTjSAaYPZVdYe|K~KE SFLy1(fKrfAm9CI94*Gv>37h}` diff --git a/public/images/pokemon/590.png b/public/images/pokemon/590.png index 2cf97f1fe69038b81056f18010e90e71261d2d0a..0908b46cd833885ef9b10e390f53264cf6c655d6 100644 GIT binary patch literal 3705 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 XTDZ#Ceovx+00000NkvXXu0mjf&fL1= literal 2697 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 literal 7862 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 diff --git a/public/images/pokemon/616.png b/public/images/pokemon/616.png index 5d4e04e31fd2e1e1b637e3d44de8a458eece1a26..aff43388faf86fd5645cca688449e49365a64a0a 100644 GIT binary patch literal 3846 zcmV+h5BczkP)Px#Fi=cXMF0Q*5D*YCF)?ERAt^ChT3UOxAxhpcWB*EfLcK9MghG^*t)HK^y1LE9 z#n%7-|FS>I)&Kwi5Oh*bQvm<}|NsC0|NsC0|NsC0|G-d-LjV8{Xh}ptRCt`tU5j$# zI1V&IQpuQ(^8bH(d=mg)pe%14Yco4jX+kXkQtWO+c|7i1#{Fk*jd+cQ5wkF-InPtJ z!5Deq9jphRfrSWs=B3wh6L5*#!x9o}d<8E#n-Q{;%prEgVa;NM?$p$b;(~P*6=E+_ zHV+LC0K>o)?pat$+VqhQYqSOm9%2QI`*1Lh5*Ta8l#K@WJrU&xe0>>u<;W=mh$zFE zK|1}V^hZHE8eb%JJnjh(igi)+8jEw_O6~GiN^MN0!GW5b5P%0)(mA-N@%80tq)WJo zi)aL}3uGf!&#-lqFZJm+necy;zFN5EDS&(ciY_!fY3&o@Rs@+QZUzUeo@4VCnzufQ z#Mm;*KJ7jmW{^6c2$#OFPir1nMR2G|$eML)fF(TIycH4{tz(L|503 z&XyCUfz|g>!6naqELw(_+U*Nij@HJVzOhYf*cdsdS$+TfRL+ic=#Bitj6fgo^Mk-& z5o{9Jaqmh)`Lvrwf27j-$J`SsiDOffzB|~@YsW559nh{dm3#?trOH_7O8{c4h7*>e0&M z33UUZ?6FFzf_*vcvyaW~S%|a5Q5OE^W4H$y_vNo*2tT7-TGN?Puy0aTI3KTyImP;HxjLIbJiPccltvpjeS?ziV;><6fymP>2={du zFfQ1C|K?bT#kT04JZJF$;QedO;Otz|oOpX70+`NykT0hn7@q z-$};@Q@1O&f09QpaWI#;8Ru@|H|&oww5RzG61S4MH3fIhPhOER6zo*<=ZWJo_e8k{ zGdsT(=Ls~3?b5_8Wp0}0>G{n$PoWTXYat6JbI-)~ql%p59O8%<;sjta4YGTO)yqi0vMWImh>C zgTNW}1?2)sMoF)Dp2bft;8(D)G|gPaC*fM5BY3gh_QZB5>MJ%A27xQ*>;q9#g+i(1 zAN+wT0&D70L|p{x5mbB^oSThn`1$l8X2Y85Jap_2;sceSx`h_WziR$f={lK9QB#-1 zcBZytu|4YYMa5^vgVs1OH-a>h&Y7!HXw=Lp1w~h6iAy4P>?7B#S!_2|--Rl+M?oB& zA2l9u;GPjQa#eg}A38^dz@s`LEO9-RJG4e3jKub$c&1A*o*%ZxP~hTFAae)x26a^m z3oQ9Nc+DJ690cL|AiDKHY_GaJ3VisI*fwy$s@y`^+!;9~L2GA{Kb8rzzLa`7GAN;}({-5eF9e zIdCb;?Fg&fD`6f-CV}f4XjNKBF>`0k0Y~=sz>~A+!@qxj|KRm{%_x_W^nC|gu91vG zX`6GX`nk6U6jE(^_CT(SSGkwM`~wAk^#haUOlg}J4^#e*{=fnb>5lMxK9|CLqWl{J z4|7qCpyN;Cs?fy!E)pje+nd18rx^z>%_(wKV&aNDFiqT+*uE1OnL7ekB_{6cOOUut zu{{O$r?;wzgJyGQUA&FN?TPJBPjDGHLSw%zi?`=!Y>4d}fh$xAinp7%vtc`G3VGm7 zr)1Zq5R2^_f%iFx6NhQ9#rB~gr~QV7KMjldT;?7I{~v3(=(1*hbKOCb~6Hv;c+ zxZqOA#P*HAmpFXRrPv6(%VCzdw}kl(`{O>Rghq0V1CwKTkAb;0A}>@d~TRMHVp~=^*YQFRN z^iF{5?yj{kzp>)&oz02GgHKWru2nX@gYq_@yb|UG%jiPb;6%?3{)ppn;nl*4rue96 z!*@xA`PHg}Vg`=`&ikwm9FgfAOrmR*NQLUMy&CsU`oy1jpCE@8$vToym^mAJHOXn2Q_ z=(-e_<`Tw?L)GACw`u^;BQeO^CB=Vu=<8MMkXVggY^v?UNSCYDkXS3%R}}xjkuO(` zkPx^Om(=#|x?VMnM`5IgyG!wZt7@BhyGw0N74;oW-jclW6iS(yX{Qpb9Z2r2|1v_#7kk8*QncQr+>rg?-c&+& zETQASjF6j@n@5cGr%>X!(Qyo>5;||%TK{E)+~&+5G1i?zsSiz>OeGK^9sgy3+*(I@ z#F$!4p#XkP)?g}uF)scKF*62FvXQPfb>k@%z^-t#cB)U(>NVAWp>Bpy*%>Y}sU@01 zp~D>Gu>@qm5I5sp#yNFrUT-Sn_r?<1M^0e_rZS#N-J8rwy(g5rV+s5okc}~u|IAlL z4t&eoeh`&=FqXi0gqIbT7%-N&8TSYkpgQH|_k7`40x6&`)Z7n4iww^}MZ_O8Psm)!5ORGPs1 zMU+eKcUdY8>FpxQCHEUG6}GMwQ7*ZE$Qrm%MEPCzL*o4BiumcZTST!}azC)Fts;sY zko$obm)HThAJ}Y^)kf@q+z)IB%W5OG6Yd9&_n|%8Po4S?Dfer$mixy-+x@`lHul>` zI=@k5?SR}5l%43vEaBq0|3xv~m;$ThilzF$8u zTVrCN`|hI|cIW~7t7mKQ-zie`{^cW_^26!Um0Bl8uvL%~2eqggc@d&5;fo$6c9^rI9u)A5lNesOoczKD%^P7PG1M=P{{DH(`?*IS*07*qo IM6N<$g7_C{oB#j- delta 3679 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 diff --git a/public/images/pokemon/6503.png b/public/images/pokemon/6503.png index 906fcb9115b21456711fb871d2b99fe897be61db..71d6e27d85589dc931dc0a5972a5e07d560979ba 100644 GIT binary patch delta 1438 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 rW-3Q2gNh`qrYa^|8sM5 zzrVlCy>R&W`2XyT^&Z~H00001bW%=J06^y0W&i*IX-PyuRCr!p(XnfTKokaWMd<8n zO{^J1|A2%uBy>A`me4KegLF$EL^6g_#W9dBZZ44<0~y4>vVV8iTtfQ|p8R}IKhTnK z*hn3WS+`6mkrGlmGUB8$jVvcdN^bOiQ8e%3)KFNpaU`$Zk<8|-tG+c|?$kaXxivdf zZR%d>^}JTpA9Q%9T2b(y;1A8t>+o?X7hAqEy;}cs_%esVh38jdRoRHI<)J#_^mojm zr4XW_szXY)ntysknwCeRG|*!n(T7|l6%0;_?3hfDmzpeyi81LZa=*BK6A+OhDk-kb zvayFUAjK5Riah}Ii>$~^{fE3z$)|G2B+L|UqGEObAN@=eTON;}3{4i%PBa_rh3Fdc zP?MJ!a#9c9M2-hgmz|icHB$r1{;FVT5 z-LpiOVAWBDr~y+-51>V`v+-wk8?PTSXoMh1zTXS2E4gF&HENLDYw1xZaeo=&3F(AqvJy7uJd_enju|{4k>-8Loaa)Ic0t)^{~%Ynf|H|KntDX~ z;0DL>k?f1yCQ>u?Ztjq8P^Fisu9HPWo3tHL4^!2eREJjR6T095`>`WZaVeG7$S)|) z%WCUTw-PvrG1j(*n0eapqKJ{(3DN_JM?^8ck_E5a3x5>imR%YH>mD$Zp|G&L8LGRD zB@a*DP@~Bjlsb!c3qoR z;9HH_$C$k0U5=st*Few?p+KL@QL6lq2>uGVeLFv!jh?-$_#U2Z8bf`9vFoS)rv!bl qLAp)-@0douoM#&IugU-QZ`L0oHXlQkgsFW1000002IU2i7=Hu<00015s3t7{001XYOjJbx0000iSO9CL0G-tfN_q=cY7h_* zD3-NB%=L3~bHBg8`1tt$>~aJxe%k;500DGTPE!Ct=GbNc00L}DL_t(|Uft47Yui8& z24MRl@U2o!3cY!vIxX~+e_*jF5OT<&vfP_ml2u~o(t^Ay^nV&_j-iJJx#t?ZJ_Sl3 z(zW!IAJx(7!&@uApmVbPFz?Q+)X}SJc3QPpn>B1%cUakTa9d~%tG+`BT8%I)4d_Q3 zT{R29Q>kDEMIQsWOxs8ubRIZEDQ|YL4`7=6hj9W^Dc9)^I<_;|KS2EaQp)8{Z+|ob z3tl5811XE%RDVZSU`$B4gq!?EL(3sV6b$wVWu8B1dpefw0E&}G$5oiEH3Vw_@b&oW zk+C9ov(bj?+LQ_>vl?ZV(M-MaVCr)K-d@(YR0}QF6;dkLf3AKXxoQ=)kd%Qsa%2Ng z>m!Tj1V6oWNm`+OXR$(=kF$Kaz7<|i%2ck3RKvdOZ+{%h^^wzxp@`9YpLTfp-an35 z<^YS4{~+W%MvPADRg4e7>?6G98$t@>=ZM!^r6(Lu>1y&!o#gqNb~xw7%{-_P72~I8 zjV{S((v(-&@nO)YvCi|1-$u-BE*u6;D^0o*LcG(^XX2M5UL`IK2^9n%kMi4dO~=F zh}UZRz@V!vYqAg#oyvKQ%C{(Z@f0GeT)igqP)+g_8WyT*dNpe#Tr44N`vrFL?R2fjj2^pa}K{%JI(`NL)X2HLG8ycMg>@L$wlV!#-Hdd{N400000 LNkvXXu0mjf%!5)` diff --git a/public/images/pokemon/658-ash.png b/public/images/pokemon/658-ash.png index 8daaaa02063d6e4d5f81bd8e86dd780deb5e118f..a122df859bd0ed45c2bd78ee2d024b343a4cdc88 100644 GIT binary patch delta 1224 zcmV;(1ULJv3fu{hB!2;OQb$4nuFf3k0000&P)t-s0000G5D= z02XvoPE!E?|NsC0|NsC0|NsC0|NsC0|NsC0RDq47000CgNq1KH-FFizThPX6g_84+~%AU&t^v< z@LXk62tc5EZw2Lif^DBI{fj{kr`&zTQOl8l#3w(&Q*~DtI6iu|h6j$50vngh^T{CUuBy@`T^Bs!B(lI60!ib6#}Vio2~0Q@g&eT&~#7sQFoj5jrP1TPu1vpvn-f6f8;})-aAstpS4B@ z@~ZYA4C47iKY^E|FQ&Xpdk`skJr$NzMfTw7REFBjo4y|fWG@^m{UAAeun;de-U&V3 z%75Sz=kLKC*qFdF#4}F!RX;Kqvkm8ziUB0?r}K-e^tcpDt=Ic_?x~Z(!sDcOZHy$X z%eC;Nq-L!f-$m7Jm+m8l7;ACZng#dKim&CKi`VEo5(~$o!Q!qnlBHE-`;mTxJ>P+$ z%)AW+a>A^rQPQVvxu(nglB2>O+d0A{E`RD3EjNsOIA=*;f-q4#N8IE)SM+JJCo7VE zxRXm{e-mJcYh6L=c9=J@P&65}#oTu|#98g)Vt`Ye1>)iYtrI~k>;IDXDmg|l`-E{T z^3&~pgge7)8mAUeQid;F0?W@VP2TRV%&P?v_FO*iMSxWx@~aI!UU5V8_=88a$A5jx zu2ud5@=o7APz6$Je14tw&GI>hyZfpx6|dHUY-E2Bu~!k{r6<$zQO-HplQkfoUq!P< z`Kkw1&FXc4TogW{ZR*v4*Vl0W@8r`~9eC#{>A(LtuKF*at^e|muEjgCBEY@3E+U?r z4IZ~k>v|}t*(E54$JGP(oL-6t4?)B5hey?ZPfYpv{BWDToGxF-X%_4)Yxpju_1o5y mC;d0f4{WJiHKXdK){H;EL{~BP?1+^B0000PoDJhOe5zSxpzF*$WbG=$|Gl<^oprQj+%4d@_q$sF-FsjqvqWA zykEZqwbKdYsDD*%*>lc3>CFQ<^Gq|&H4pmA6A@lhPZcl@h|W~Ofi{Q5Wu_U38jst2<*Q-6$GTv%_pW}H~`DrmttCRX*3 z$YqKZYMP9^48pmn+yPR!E~Q>+`D8;%$wAbnUXbF&*fYfq@Wm!|%(yfRL-rKd*8o+; z$P0jh?wuUud_dxAi7})^kmI;kgZZQJI0-;6U+ys@wAp%+J&=?Aw2>En0%`a&9vIha zA?KWE4}Zg`88_oKA%KHK=LRkc=6N`uDT;B-wR!J9E_W!Nab!?91J9;0VGHL~umJN0 z_fCUx^iC(A4yO4Jbk%v!!)4b3pqEK{7{HGX*7IY@BNvSOXj}Ip2jp;rKMyVzm0LI8 z?&G7y4fIrv#3>o-TJgv&do0*^AGpzre$&(7+<)=B$En9s5+VN)I)iLK>jjBil13io2#|qEDYtFUGnMZI_z!(?jYshWg zdwzX%S9^JB?m$6CFz`Neu6|# zxT_sh^z^u7M(`y`ZkwZ)L2Lz-MxLs1Hl%}*(ujQUn##Ec{#VE#J!RNzv^VY!{w0n* zUu!5F&r3-iK_`yRaPmYtQVjeiG8Ot=U>x6$Y~E^?s=f>Jn*n+ojXs_i->WQND8V)-bg-&5r3(3 z9zjnI2ar}2kCssLsyOF0TcB_XTF^UK?gCAI!WwUzMIbxCo!jL9RdQEwk6iUugVhs^Igoobpkj@ufQn<(o_b=f_ACJ^HU%YF0)i{N znL8tzxgoIu3e0;<=JtaBkcnAPD1YAb2&#}{Vmy{Sg7O-KdBYzMYGKiv-~51qEV-wc z_XyIP6JeThDBydZlOW?FFyj$a*{@AhgyO8n0oQwn3q|W~kDPe~8J>E=2drRgI3GBq<^wKiQ|8gT97NnD_Ewub@cUTx7(Ff6+g`mL@Ap42hZ6V8Nmlle P00000NkvXXu0mjf5)E+s diff --git a/public/images/pokemon/658.png b/public/images/pokemon/658.png index 095b8c0039da9d5214529adfad8bb4431a904aff..ed730c8b81c2d4936aaecffdade4dd352c9fddc3 100644 GIT binary patch literal 1043 zcmV+u1nm2XP)0{{R3+N8Pe00001b5ch_0Itp) z=>Px#Fi=cXMF0Q*5D*X>Dp|=cE`T#Yzf540e`&w5X)Z~bJz>o9d5vb-|NpYT!oj@% z@TT|o_ldI~W&i*H5Oh*bQvm<}|NsC0|NsC0|NsC0|G-d-LjV8+bxA})R9JToIuKoDSAw*c$ar6@1^FUl)_x&XC97gXUqthRUx!+p? zRzG4?RP8W#G@{~uSACT=m4BkDtN6;EtBMM{RfTo#mdf5dlQ$KnJqz=R3%iabKM_+g_Z?lw$fej1r}}Op4_n+*jzwV%WOf# zggR+Nxc^c}YGey8(4wM+-^Y$!RAUR>1-7Lna$~?tRy*#X)5UC`t6inVF#I>#KQY6>^rN{UtY7z=E5qRRi9XIXlYR{ zvi$^WRVP8!R?%1hL$gXYk+O~Go|#}RH_GaQC-wRY6+>$nNW}mvNRj=4Dzz;>Hf)Pu zPSJ~M>TC#4SXFyfkvDy+a^V+h&#DZYONn*%iHh;zE2=(_0vD*L-tVfElm2h|>!+T} zfU-en7X3YS#4{!#_%rfgxwP&Q)!$Y#1?*B8|t6NO!s#SuPF7 z<^Y9@#YNOESmoAGywRP6U)1iTPYtY0o^z|?6xQ47o$k9US3RdslhqZgqNZyh=?(D= z_4$?$+joyQ;-wThzPvbM{gXn zor<2j7*jarCDdz8TSw!Lh}osdeB&XoRVk&6y}~=IeT-$leAzkM_y<}9Jiqj()^q>> N002ovPDHLkV1nO{{!#z{ literal 1049 zcmV+!1m^pRP)002t_0{{R3%3x>N0000mP)t-s0000G z5D*(GSuRPLJz>md+5dBDKXY?)fHOe9OklsUX}`a}@_CK;`1t>_zyI*2;?Hh@00001 zbW%=J06^y0W&i*Kmq|oHRCr$P)G=ryM-+hJ)fPFGJCX<}%5l1xv9C!mJ5RBTRMx(8 z`XuU;6e+GT!67P)!CbWtBEhM$;3g{F7&#C_78BgXupC^PBZzHM2Z3E2#?9o-NcKvr zl`dt9yh6=<{BKspIFoUme>FS@zWl71<&-XDZab%5JBwMSiervcGm2ux%pXUaR#9vj zb47Eku8Nh5mI*ah+FQT^pE(W(Masq&vJR^R(0ohV*b??}0FT-Bk{FHfI}%iE$3=Ph?#wjR>Td=Bc4-BL0F=-uRQ>=6f0(MdTqHm(; z5P3uumvb<~yjk{P`~6?_0Wn^W4sC!{C^ucK5Zib!{q5$Gm{W=EO7o!}rpJ!by zXd!k2@W>^jQ6Y1A$480yDS~fS(A|pOL3$rPVZ;yvn-9bN`FGHjW*cNIKV39C&9(rP zORBpA{+xR7$}ks+0r=Td(ypQj%dVjyyNHDu-2vv4y`jUSILj#;T&@q8kWX8 z6swpBYouoY`K=P0=7#ZrYQi3t7%O0HgLmVBU&$H_{6fYUtHRWo%;j7(tONk-eR0p+ zmdLZFWor9cfS0i^X1B_gtuywv#O%b~JQi#^CgojXigCGl+lS0Cv31W}-n?reKGOZ{ zyGtOS5z7xT#wr=(eCt;F&fG9&f3o;?A2*#hjKpm%5xqAsmvfe5OQ`eTpa16{m0+N! T7qt$&00000NkvXXu0mjfz>x3( diff --git a/public/images/pokemon/676-dandy.png b/public/images/pokemon/676-dandy.png index 1e9f9b7bb2c628114633e12e560aa1ceb1621208..54e36574b2a968815bba68def23982630afeb01c 100644 GIT binary patch delta 763 zcmV@!tdAbPXNiDBe;0LWm&$y ze-;vG3bc%gM*_lP5nwZ6?wNoiK!n80AVh2%jsX)cM$m$#mO+!pf7Z1HGFk$KyRSik z`!`MjG~t365-=j(2?lfodcSUjE?`1R{z||>fCaR^dw(2S^BaxJO2F+>z}N$N0=2-{ z79igVvJFTR#AXR#^SBEc{ozoeL`z7!Q1%`ExbJ3OTX92(bek$5WAXyfoj6x_;Wi)y z-)M?VNIr5Jy{wfuz3i_9wYl<_sSU6vX$PU5FGZNJ>Hc#nq6@qT=iBHA03t~3Sn{U? zL8?&lMSp;Cfu9P?tXbAK2M;75zT~<-@50C_7uO`MiUg)i;4Yu_z}W+0ibsJHsB{JM2l+iAq^$pBfOa0r)GJ-0G`G4( zasou>TvVqo@Ys{!LI_Tst{`Jopz%eZFX;!$wYH#R9SeM@b43997VKI_022rZOK@c| t^nfSVx_gd=bBiM(9uh7OsC{d2^dC_dK>=L_6vqGn002ovPDHLkV1khnSAYNj delta 741 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 O00{s|MNUMnLSTY^22s@j diff --git a/public/images/pokemon/676-heart.png b/public/images/pokemon/676-heart.png index 99327208605e08ffee8ffaf85b7239299978cbd9..9e6950cc36cc53ec6d6f8fcfd91c641bed457412 100644 GIT binary patch delta 813 zcmV+|1JeAh2E+!CB!2;OQb$4nuFf3k0000pP)t-s0000G5D-N)G&f>*SxrV{UR8U0 zd#F4y{yZ_KKTm;fWZ+b6xV*3Ng_y?1#_{s*|NsA#it2y>000qmQchC<|NsC0|NsC0 z|NsC0|NsC05EVe70007_NklY0g|L33`PAk?5u#}+<*VHlY~UkwFT@=S(X;? z2m$glO}hoQ=>rR4W%~e90Brb}@Q@K|0x`xRVa*3b9)=uUc(R&H!Vuz`FvR!|2%LuI zVFapC%8=hYg2*|~Gd=UpAPXZ4A;Oa8Wl5+JdBBYcJbYPpMh=4vkQ2ocvO0lbL^6UI zeT9*g6gN^rg?|WPG#H5tuUDDe)-i&Z+)OUK$jA|}i4#@&q8*plJ1AXjhZz6-eEocT zIPX1sQzt-P=qy3MX7B=t5aZY1@5qQ4aa@HAE+K!%fQx1!@HdW;uuXrD5Q-Ak^#Xw& z1O>wtf*?*SLD~rE2H^v5gc8odFh;r|5Q2AMtq^r*B!9JA0`KHogfZ^U+8Gf~B7i1= z5p+vy#Hj=L3N;8GCI4M}!Q1YePH4I@#QBc7djhvx-n4_dF|_7rAS%KcQS>@Y?w{!N zAea#}my!)5ydZ)jV}N*aXQ&YHLJ)*=diB;O(c0Qt rX(mUicb?cq7f=0Rjh!~yf0}*))ObOt`AYkj00000NkvXXu0mjf&i#C{ delta 790 zcmV+x1L^$42CW8=B!4PUOjJcoX>sxL?hp_VxV*1{Ze-w8Y*|f4@r9U0G&E#hRi{5s zH)40FJTd+}F_wPQ-2eap0d!JMQvg8b*k%9#010qNS#tmY4#WTe4#WYKD-Ig~00Nvz zL_t(o!>yK!j_V){M3doBlimCOzk6+CCnQP>q-#}GE8sA^Jbzx6BZ|cGMU=8id;zHd z34Bd>$S5s=8F(NeoDg9ea+dI9HMfK*#64k(@dpT8hK6Ybno-8kzhMRuLfAI`YzKp* z%q)Znue7~h2`wUo8HNmhy$(hwlMJwk8VSKfU>cE};K9Gj%u1?^l+Ykbnca-UfuEl` zxvygevCzg6et$Sv2qaWQlfL-G_3Is!A2uPzvi`0igL2NIrcHpd&`me}o*@fhLX5xv zLKH-dIIltn*DZg?07Z{dkR@U2;K~;1Vvm{g0vIT2ShG%5JtFe zhBML!0wd%U)&|jbMzZ)wkdu6iaK@**c16UC37|_51b@HM7I8f?c|uE1M9qKqD&*L6 zSA?Y-M_k_+eI`h|=S{z;JHu)Y>WMgv;DV@rT^5SNA{vA+ise#{X+%~;Ar1kkl8;%d zK_DwZ5k&U%)-L0W(9lQXkGIB*3_0PQup@f*2DDX@+N>jD3GQ*2^Y?>s*yK|L)~ATz zyP+l-s((#(JDCw2E|0MxAIEQB`2$OP)pw6h%nq79j()2qmQ2)?;XAMR0#dP`y~z z)~`|I!w9*Z*Q$s^pO-5*E zT(BA%k0BwmB_z-VmT?*IS)`g_K80000KbW%=J z0RR90|NsC0|NsC0|NsC0|NsC0y5VD~0008JNkl`yO5r0w>0VVksf5>xyMnFf^58#1E$hp9v`X)d}O6R?Y*NYIS>jNYi1%T%a z=O^!9Owfu1(`NwflM@0!=cZ}$e?Nb}UI3;i*Rnh^0P7HOodDC%zu!p!5jJWvu+2rU z>L~&6QyvCb)#5?SJMCK>>Os*TSAqig;sPx}gJ%ztt~=;K#$z0KiZMl+ven6+i}|I8Y;4N0-*pYZcP_ zV;|%%wdO(JhXUxS3hB^Fw!Na30+{>0ha^of&GVd&y=Vo5Y7u1TTNf=Yy#@$%{TVL+A@&JzhbyN*zKtkqe=pRSGlDl!e_v{T>3G$Tf=w=;xF;i+jLTd*=oS z1NYEG1lFem;F6GX50z@B4}Bv5NN3&f2)H1C4l%6j8&63EKt+E8u$M2l0sE2i)@(av zcS}lD?*W!&1CU}+n`(|g3Cm(j4wQ>wSg6l6JAZHh*l#5?9`maB0PK(XRu`cByhAtu zc7!$n9pTGB6BYpd&zqa(Ccrq3sK>YhkRFVL<+&9wZVyoy*&SePlM5WeD63|`Jr~pg z@gSQQ7n%rax4Q?J3ym>w1UZC~gf)gs7tDcCLNIG^&WQ&N05Q!GWDocT>tM8Zrvxz- z083eC06nBX$nVYoYU)@|x3x@gKu;mRI|qOPNKf}>XD-N%)83sPZl$wR)+Vv&K7ytkO delta 819 zcmV-31I+yC2FeDIB!4haOjJcoX>s&RJ@NAH5)u-;z_X7bAfRWyNK>&CTQR@s?h7cD81lXxLz&01Zf(r*}Da`;MwK@o8r{QH1js7?iRKSG=9)cG_ z^cj$jarhg+X^ZcKi70)=!4Ckd%CaGEh_65tHRU|u+bNUJAQe7u@Lfj9323p zQ$St%*q;J8fU1Erf>m@aEo)wd*njPV@=HB)u&z`AE3ZO4l#+d|IGY04)^&xbMKEsL z7W+#8oi2jze5<0hq@MwZE`AHwfP7)lYDFx+*oUxIz~^`c)!Io-bR$>7x@9SB((^1d z2X#LZz<*tFlUX#ty2U87*aCi)cPW4{N)3%n5PduVeiCA-p}Ly!OYZ~#>#Q2~&j^s4 z2A=Dkr(_1eiT(kgmCug>ZHr}V`cBzqNL|%ufO*~lbTPP0xiiRwdA1=(o{Mpuxz4!_ z902w`6P(9enZP1E3-J0DOecBY$^T0sOaYZth)xVHhwU;~9YbU|_8D zUcj(FL}3s+AXo%v3WJVX0M9IB1L~lJR|_sej%)4#X2F?*WKdG5lkmymrv)=GXbKh$ z(=@3A2S7th2E~EgU?&*t9o*klIaC20T>$)$KTzJmySQ) diff --git a/public/images/pokemon/676-la-reine.png b/public/images/pokemon/676-la-reine.png index e649e6d74c8e5b58c64ba6139fa69e29524b39dc..c2f0eb72d755cefa2d2d97f6c68582e646c69543 100644 GIT binary patch delta 722 zcmV;@0xkX41?mNmB!2;OQb$4nuFf3k0000sP)t-s0000G5D-N)G&f>*OG`#sO-86Z zG5$O;fo^1qeR(f)hcTzSR?*m;pOn17v&P28@$&Bf|Njb)Ia&Y!01|XkPE!E?|NsC0 z|NsC0|NsC0|NsC0UcrVw0006+Nkl-WcHegNmNGuhYo&+K5K*b59T9?YB#!a_EbyC^80mS2DL z$acR5cg-WFM!Vo`K&m|`PX#D(ZL{?vGvYm&R4<$h@WwBA+A$!!ly3=T0!@Bd5?}8f zc;o(xx6H3C-q(5A@a&`~X<0w;N?(N+o}6sGev+HmWqV+0a=IyRDlR@SKm_=_TG2z+FTco$Z985@ptX4>_Y4FQ*ftGF8;{utp!0E{vJ{H;LpEO_Ibqsw~lj!S1x5T2YfPZ#MAROOCWPsZsz%w!&1 zx?z&Q4G+o_?q+9l{%oq!7=dcW%!c{>z{>Y-@Q2RRAEmKKSpVE>UH||907*qoM6N<$ Ef@LpYtN;K2 delta 702 zcmV;v0zv)i1=asxL?hp_VF{is$(b&Aevr9`xoS&30bB9??Mv8rT zMKm;lZe%xNcc?ru{yZ^FCZI+D0004WQchC)N|27@otgKY9|ojv=1&M7hzaM@4NKUxc1{*>vVTf8w8L1!HebuaH%F-X?q3v46PMGc&Z_`YO8@+&K=wTF zDaOc`?cNnHo=~2h3(pt%52kX(o2TIX9+nD^m^W{vEO5cYc*f%^rm}xAQ@I&|W+}ar k@Y{h^?zR3JX?Gs}0I=d1eaBLD3IG5A07*qoM6N<$f=Dq=hyVZp diff --git a/public/images/pokemon/676-matron.png b/public/images/pokemon/676-matron.png index 98142c41661283e63d867c4f88f6638ad5224a73..1f93b11a27796805ff8ce42794645b301f16eb14 100644 GIT binary patch delta 774 zcmV+h1Nr=k2A&3xB!2;OQb$4nuFf3k0000pP)t-s0000I5)wr;G&f>*SxrV?Sy8Aw zG5$O;hdNtOsY>?q)#<)S?^ z@{!0$;_KCnMaS#k2GOoVS9rP%5i{?30J_Wr9nz?NhvxB2hY(voy%9w>;djJ1a|fh@ zGiQ#c{N>+NU|oQl4D?5o|FP?j*nGN!Mc0TU4o;(HFGHi6-lL3u_U4Zj7Rx;IWyGtO z6*z10(PA$nU4K0}=O{E;Yvx03o}35Z39%#{$2VR*d5`z|4UZCaUW<3D_rl-a9MS@q z$y_X6Ze3UZ^Y!yB(bYZ3Tylo+_3O{~nv=(q%;DEEyloxk_Pj1ov`4NN540|zw}0>_ zSZbSXb>V|!dc|XORiC&X%CV+PPF4}R3oKcG@><8j{eS(aX5sXkAG+g>r?OLc@$)>@ z$z?xtaKrh=+s4&W^FKMyaSB<98+1PNhjiXq(Ly-x|o>)`8`bHEvxl$~M<(n-1a7_jJ8+lHi?lVSbgsdHk_*Irl-{Z{LqT9%P%BOob4r?~q zKjEC75P#hw;2BS)I!%{%Bj{U^{Z0J$5xQMr+dsxpy9QnU@Y|)H;oH{m)Fzxmd5FiQ zGx=>R{asrXmKf)P7hib(Y<{j`;gU~x%Z8(Vp7&S0_-8ktYgGtanD&s#;lw$Ws315M zx>4WM*^BIR{h{piar&OnsTitBxm2ncax65wSATF`WiIEcWwB7gbGO>*poXWq@xdp8 zcQ|!Dow)TBIW?|u>W0^ejn-JHs`Z_t1T*5)u-*TZ6c~uU}bFhdNtXO-4mDG@PH5 zfo^0sVt1%KG5$O;UN!T<00001bW%=J06^y0W&i*H32;bRa{vGi!~g&e!~vBn4jTXf z0(D75K~zY`t(Mz%>mUq70|OS=Y5)IoDN?cDHVhBuxw1f!XcTKkyMji;P5`L1i} z9P`%>ffIm4h<~-|IG=dqDJ49gPbAc;>ooKEN{R7jQVt~nuvQz7d|g*^UoLWW;Wj$w zp27I_^&Ky39y^^QT{V&}9oE*oC8%_Q>BR;u31s>&d{5{OUFwRveLTk8=o>DZa!%7n zoKz8p2@a#*@up)QV>&QSzwsA6;1w^j19#`w@uHK5yMN;d9Ud@RxF$9K6Ax=R`A@j0 zb*1MxRg;Jin>EE(1HqqS!=J3;>T;2nxv6bQAY%A89$?j9Z;AWQxlLt2^L7j9y-Jpe znW8|=@iCIhhLei6d_L&#vC_gkj?6I(U*gN$6^ELQ@jG}ZUx+Lbu!k3^F2nh31UVJy zZ^5xNd4JAuy0>^~mz%1#@#jZ+1wYRYFE)`gqFa^D!k=gLcd;rQF|HM_e8ug*@@s~L zkNC1%b~qmU{3pEfdy_Y<^8WP8Jb17_?n+s{XNHT=VR}UKMXPzSYc1Viz+pp}PFKoih_dPR+4!Ufi<~b$ j9^Xr0bewKGRWAr4 zxM|uXicB9$tRfNYtoOd*wHC7ipL6yrU#&dhIRpJFpKO55XDF-&RTz0Tj69nrC3ZeR z5}tLSFD5=E`qcVi1S24xAg}SW^3`WDzsApY0+=|$H|J4>jmPslcy9_I6gvI`Z*pMe zfkMEnk>~RVcz?a1@+FFtMg|Ay@I!c^fbfOnsRDq>!90iGuiu{lW}dc<_&k4o|I8yE zOGL-Mo0}kC@DE&Z&v&%z!X7UbLwd#~HG4iq-a`nQ1!ub9eZF{L>D(UX(~wUjltJYG z*}p7&>hKtFyg|ehO#yhvqlrGxNxYWuGoQ%(fA}ONs(+8)^8E9F=LlQ^2m^cq#gS)v zzUDq3PnXXtuMOZ`0`&2esC^J$w1k2*ac$?`kML~vzVM3YcFm5p6czX(570pWj;}DT=XAJSACy1i$PbGdaB_L>BIj1pDG28caDMsL z1+M%MSAP}h)Wc2u1Qo8P7X!bXVa(f2ygl4y>!RJ`rV-59p4lf0|2{$#|j`T-&PZ!f$>54+IX&myZQ;*)AFeJ z?#w5?gS+=PU8&5?C*3~?#g3=PXUjJ#?C4C&PkJIij;{a2z&4aP0=F+xvEn894*{U+ zdLICGQ^U6g&^f2A^G<=RZ0{W99X10TmboFXE0M>=O#u$lN9RVot|T1WuWLL6onQqc z9+XEs%)zMx{3O%4@%}-@x!G;}ac+QrxESRRsN+4fk^V*{00000NkvXXu0mjf?pksxL?hp_VA%DcYz_TS)oM>lUBsy=LpOk@aWJNSI zSxrVaVt1%KG5$O;f%2ms00001bW%=J06^y0W&i*H32;bRa{vGi!~g&e!~vBn4jTXf z0&Yn}K~zY`rI(3zgdhw><*_MF`~RQYB!J5ZXl%~3Jr!;uA%DCu)3jU2Hodf9vIXeb z7-PkaacT$AS{pas;010i_?LV00utWBi5qgEtn3ow0 zAl$=l`P1?yS`NSEPqzb9IGL}DCl@-N_V2WMRRZC7`%k=T0UHlafv`$m_8<6sVB`=5 zE+fSPc=JQ}kbfcbjt!6TDPdWH`7v&Vn&;Ohd|7^e-7?}yB0BNYQjK^=e{jX4oYC$Q zj<_?FQnVDJTNOdxVO>iV08N1z@Ge5Eb9#jLL*BD-1@Zb@0zDBM zUWzz$aDKGI*yTFxypu+H9JzUq$VQ>vSEBN^u)&<3N zLL3~N@PDDy@$=402MNLHcq;aKg#~rQnaZfqZ@G;6Xo8dYT=H?;*UGGkCav^O3UBeEj`|Fvp2}`KGGj~nwgje>O6$CHkZ0C=PT>Gwg*4+g9UmNm5{Stsy~XB+%!N(+VvpF~P41R@J;pp8ODl3<0{6p#Q;-i&0# z?4rQwh9=Lk>wh5hXL5H4LGL#~0?_UaF*_JQLLvfqy`atDw}9A12$3MZI6%4s_?X}# z@T~U;ZWsU|{(Sv>NA4bbz`I9C{%~-7{rf&5#ArlYhtb#lCW~<7VB$Dn-+ggBkFxAt zLzFDYKY1?8WFk!%K{JVPs%1;k%tcM3Z-ltZLYy`vTYr}3c9RD6c1qAWti;ED;B8|F z-3Yo4Z5F=>i|%d>Dsb)gwYjD-BN(xtmB4l{gT_!$A~|6@5wA@Ixlh7sE16?Hk8psFs3#Dip90#O{@4OWbc2aC+yB_NDD?TNp^y=}Y0Gw z4=2XkGaIpP2hK!lnHh0`kW(3Q;$Vcv0^#!q^?&-Q0nN1&{lj!fh#}uOXwJ|HM5)F; z5|FJCrTX6@c*~1jz1<3~j6gx0k~V>_gdDes4fn z<3PZK?9SjPY5>_-`QC^CCxX<=(q3NNa&I&jc6zWCj&OXm2grBlVzvFY{RbgpI|FI( RY={5=002ovPDHLkV1oC%gmM4? delta 815 zcmV+~1JL~52F3=EB!4PUOjJcoX>sxL?hp_VK90YEZe+N;uYJPkSxrVdPSYC*Tb1cZ76IV8r!n4N->2J7B*f zG=6N-zW#+RB1R|rJj{9De~BV(r3tZZIF7tIxNQ4=zZf2d3i_Y2mUS_i28?8pM671{ zmUL^;!nik5Jai*gpOSA&zm_cw!YyGZx)PW3AjifL`hP{Redwe3MtH;hJfhu*OkBbk z5u7;IMsR`!9BsOf~Fe(_PT*>MB3oD=|&*p zTm@`2{cr@FxKDgUwT^Vhkj4cy3V{a5sz?&hrosb(76qt8pgS1+@});XiDvZ2C=+`9 z29jqBqkj`Bu{{%g7#XqjIZn6{DpK-q6^0DW73Vffl=qA~VUVaLS$`dQB5{teX5U{* z*%s3bvDCbMSW(v>@hzdL*UGa9G0qTTluBsXGeGV~CgSMZO0K3}N~Ffc5=NXLv?`+n z4kxTl5PAL3KEE}vTn+GhLJfWApfST1kTn~lTz?%UH2eQrMEXoF?>d&mbGp~D8UUFw zKv=@cZ!LFIz(st<&l&6DNZLcO-)UIO<8ku zbMi?^nLU8NU!Tlyho+{c|CzJp<>mkX|La@A>;M1&4|GyaQvm<}|NsC0|NsC0|NsC0 z<&B=E0003ZNklco3!~Yreol8Z_0t@E&eK7>ErYqa0#Tao%nn766?ZqlKS@$h6ieruYa(VS%9-kS zl6j5gPGfVYlq_NlE{ivrStU9smFU0d!JMQvg8b*k%9#0U$|4K~y-)t<=GmgCGnAP!mZVALjpm zw}ya#g5AtJuF5UMoZzy&1$bZeb?6I&p2DIfK*atLIb0H zMDS1_PZekAVWOuv2oX(8a+As%6GDjf)EPSB5k5`*GDh(@0znnzZmh^uN_S?5PEZuO zH{d@@R&*&?=bP7LF3?nP)$e5UDC*8mY>`^;Q)yydR*vk-60WL1B56nQ8Q_>o3q2Ca z=ZcRC*VYrGbb7QNi?Ue>chi#xLjYA{?wD`Jr$+!F?Z}oJxn?Z0+n@p+vW_^rAZps~ zo0Dcu3TX$C@^23YNXsbwjcP4^Ib?AE3CNFEA;WJ35pDK7FW4>Xwr<cKtMo$OlNJ%GPopUiNFrlzLciDB3 z3Hdl(bz};jD1W8%hg`D)#i*oW2uV|IfUp1q8`WB+F5F5ZgCNUHeFB6)W!u=gnru8M z6d0TPWHwNJK1*%j>-F492&*Jf(d`dxj&k?)+Co4jaY#c#jy61jjh%#-3{bK}oSa+a zQ(|QCSee{{W0e9TY=E-hmpsDC;7u=JUEg=T%xqtx~QOzpyyFCKiojf**H@| zRjJG5WPdMBK@D`t-b3?GaP)mDdLu7_vQNj+Es!MY*>uPQXcw0P_fX#C5qW^CyNSxd z>IZw3QH|i;bD5XqC#X9}E3%*AkrUm(9-04T4E&IJurH8vhm-@GFKG8HD4OqN)ElGF zFij;zKIP0#rl^dE+l{u79(TNu(I#UD1yc(u|9kS6LGzSop<(gI^J1X0hRX8#RpHj+ z>;|i|&?0WqK4MP7;6W2DjL2Ss{W`gvBz%L${7D!asQIkkUR~dDds1NG?L>8XEf{x| z{0>z3bOg9~=sT!8g8v}BhrcAx)P76e7Macd1rZ=Q_sbVc2LJ#707*qoM6N<$f<{tv APyhe` delta 734 zcmV<40wMjH2KEJzB!4haOjJbx000mW5I{gcW*;AGIaPm6S(!a@rlzK|Ha5&snaps9 z<->mE<>m58N&lI%|L~^Bh*co~0004WQchC|ndy`@d~~xZ6s#qCQjP7f_r%9wCVM=*eKpW|^sNfW+|l4}YrqG3X{Ol72-Nr}7y30h1c-`)>Q9 ztu;1Cw#?8cKz~ZKE{j_4MHU^bloW$W#Y3X~`CRu3zFyB|O=*@SI=bwz1ghQFYe@;6 z#4Zht8f|)l8V3n48=z&0$fFV>DC8QkD!C-jeq2Ievrg_;G9~Z>8tyG~0<|}CUH9dw zT}V)(9o{j^h4duAz_jZ5Eb9u1ir~;CdnFjDpa~)xihofGx#JlqN?Tz>`Uo?Ul|mNi zlzY8h0QG*jJ6B20SvsT_{PnVw^Z?kmR#bjOo3l6mu{8+G{V3#d;7R^)nGcQRFqdd8 z)-F2eBWQWF%#ScIb2S!Xbd|g0AX{k~TEGyA9v1%uN86{PH}WEA=X4y>3Abj`AP=C; zTpHX$vwuL3JRsE4KFN>gbO`TP6tQ6khx6e1`0)OsQucHfaht^Ld7z) z!C(t&%llVF+Y)CpSf7O&ah3WJ3lcgHnrWd&W>@KcyuR&I$VtL)&@7*Xv4Wn@?CtgS z120bs$m~DVKz(`NFzq_|JFvVG)e+$2p>Lq!2>wAv5C2G>sr{AwRv>-(0_8I{p5GDg Qod5s;07*qoM6N<$f`e^bQ2+n{ diff --git a/public/images/pokemon/684.png b/public/images/pokemon/684.png index 8bf8f765465c17e58f45f4e4307e3571513b4aec..a3f7e544f89659804614b264c165e3974e47a144 100644 GIT binary patch delta 398 zcmV;90df9^1Dpep7=H)@0002i-e{@-0004VQb$4nuFf3k0000XP)t-s0000G5D@tI z`2X_qfLUYz%-PJDre+!~n+a3v^OWQvm<}|NsC0|NsC0eRh4- z0003JNkll$&N7_Qxi1j-( zTNKIGt+=(;czzhRPI8-R+NZ4-AQ-pwfa21fv)_YsdR4@&qjuRM-3YZ4vFx!e>nd+Z z7Hmw2Mn-9yqJIK26Wd@?zS=^N47u;ofY+681fU4cs+?gcRezrl1N5stBR%eJs2V!e z7ztj9rs9JLBB(SD2XspKFgjyq6s?hCc8R3+dB(uM0wml>L1YwCOj8lOlN7cqhp<+x sOZ9j3`A8-IgM~e$JwlOt#ea-1n{W|*NWbRD00000Ne4wvM6N<$g1BR}1ONa4 delta 376 zcmV-;0f+va1BU~U7=Hu<0000JE`_TA0016POjJbx000mW5P(@@rYT9xnWoIGt>rmn z`1tt$%-R3)@^!t~U;qFB0d!JMQvg8b*k%9#0T)R`K~#8Njn6@9!!Qs9P+2FiiUV0D z#wpdht1J_A0ShLe3nb(i$;w^UMWz3?ondU%-u3V1@n?{XrhjdBW)<54X&m0hp9YDs5hJK$y8}U(CJz6=I|K}Hq WoVXLA#z>(60000!KMi)#xD8A7?TlDY>Ddv8^uNOzcQR= z>1Kk64VB5�nWnu^m|<)2D8rAIyThqT1;1#*A~0$WWBAjZy>ZjpQd|i1bL)j%rkz zK^MWODEVL4Du4gU6?%+Dc~Mo-8V17a@TaHr;OLMCQPo0M#-SMOR+cBq<7hHiYD%9X=uZM*dGoK<%Oqskkh-3@rpI-?jRYaezH#mr!zmI1fK+uB!47OOjJbx000mW5M~-JfLUXvDM`$krp&Fad`1t>fssGH` z|MK#J{X8@P0004WQchC zPzX87*yugJ8O^u3i1$6Rh|s81!4@G1yVcoRVOa*EqiDQSRZZH$eeGPr9gfq3<4YOD zR|}mPLu#m7S${5+$FXdv%q?Axjm_j1%&PTN3$hwwFnmHblKc^)gG$QKc*Kw_B;3Yb zkp?u+REY8U(a8PsduYGjLmm{my#vOXZZY!4dSe`bR_XQ+02%3m9on@&h7Q#4I3O~q zcUF;FF!S5KX2Ql)ow^P!4kN?=YEZ0`=X*l{@^gJ8NPeo!PjBRCc3UvMoCxi1ARKi@ zHD1?#+d&*7Lw*=C06m%^l7~hUla%IAYlh7VXc*?X%%hhBAz=BUqHi@_L{`{c@$L-P8U6xKt=a?d;~+00000NkvXX Hu0mjf*~|9Q diff --git a/public/images/pokemon/688.json b/public/images/pokemon/688.json index 84ec62d4211..069d176730e 100644 --- a/public/images/pokemon/688.json +++ b/public/images/pokemon/688.json @@ -1,41 +1,19 @@ -{ - "textures": [ - { - "image": "688.png", - "format": "RGBA8888", - "size": { - "w": 52, - "h": 52 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 52 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:f328f72c414efc6cf463a1254afa75ac:50168e1a7077626f41bdaf5d0b35af74:176060351d0044923af938ba7932a6ef$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 64, "h": 63 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 64, "h": 63 }, + "sourceSize": { "w": 64, "h": 63 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-x64", + "format": "I8", + "size": { "w": 64, "h": 63 }, + "scale": "1" + } } diff --git a/public/images/pokemon/688.png b/public/images/pokemon/688.png index 2ac1b5d5fb14a0a4b9b0c219b62ef99d646bd66e..2e65d4beb6fd8fa22f1f7c159aca85eefacc44dd 100644 GIT binary patch literal 884 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 diff --git a/public/images/pokemon/945.png b/public/images/pokemon/945.png index 280ad17b15212599278e918cfb97dabcf13853a7..74c43b6d32ee0a03a96c71e9faaeab3b5f4ce9af 100644 GIT binary patch delta 932 zcmV;V16%yl2D%53B!2;OQb$4nuFf3k0000^P)t-s0000F4-X$EH7F!BPe?y9JxXU4 zL_j}J6G3%pRdq{YYmFgM*En@pMwonRgd~BmIKA4erkSLXq@|gtio&AK+N#{#!{*}Q z>*V6#>+waMWz_%x02*{sPE!E?|NsC0|NsC0|NsC0|NsC0|9}7g|NsC0{|8e2AOHXY z^hrcPR9J=W*4uWfFc1b{CLyQ@DtJhJ{}NC6RbocX2NH}?j#t| z+!|TKFvzujtbZ2-3BhY6 zEpTdJA@o`TSD?bp?$V}P7Sdc2+V?sQVF;O!ttJ^`mVb*#LI&JyKGWLHIk!mAT@tJ< z02Zc!gu%{%Kv=qiAZ{LoJ3@tG9=`)jplb+sEBz^P*O&`D1|`ntb4CDw(37;b*bNcr z=PT)4Aol)pIZG%(_~}V&z}CcaDlmSpz!*aFYJZ6_tuBoeD#qp>Wn1?n7iVV`glS-6 zPm~F$0)O*KDrk&+s);DALQY62RY_QHJ-VbU-*O%ZG>F zTpF32;2HpQU6ZDg^d!e;Itxr__Y?-22~;&5Mt{=kk(bRd9YPxcA!rh~;WP~1%^l3P zZH=ykk!%wlMgagpx++Vru&`zzP$-#Ja$BPt!?_@Y@)v~(;`}FyVE~@p8C*$-!y)hP zjnO_?(0D$>;3(yP3>91eo-Jx-WBtD|+!}%|Hy0x_M>5Cj1(YB=&&cn@Yiu?MT)#6Y z8h=kA6%<}ARFrMIT-ZXGf-rG#>jkbqZad5YMFB+fE-OpVk54>*GNAG~^b+vb(zAR5f!Z4n3O#o@d1K728ehJ z`Ac$bB#tnK{bj$MNETj8zZ3T7;syI7A|0Qhzxa#)HU0r_%|E>sSa}Qp0000>vF3w420Qr z42cQx`@ikc#RfwNg`9t#YC6y%(#Pszo38s{<7l@ycHbIa#($98_k`Cg+AUs=jpgNr z&>OBMBSB-Vh)U4QCH>{?5^a}r1ez^~4dG`5qnScHHcHeuj&_Z&^8|ww#HeOh#atjn zOJHnGG1%l=bKWIHSXi-&K@DE~ctnUXr>vGL1RYmSKM>}{A0CELT!kkD+b_*y7;wcEIdnG)@oUp3nJ3tX6 zh47@k&k;|zEkSc|MBn!ff`kwTm^Wn_Dqz@lGK7K%`G0on%^U&w8{isrFowYa>0JQ{ zNJGP|+T2|v6vfCn*;o%r-MLXv%Akk>XjHXMzx+U~jR#Pq)MrLXjU14ng$>vxrfE z@*?F5L(JP64v$fw&$+Lbb4d<~JpBz~girvvM}L4a&VRUovgD#Vgkd$a2at}^8H<)O4#}3Fj+BN`C zay4iV$t4S{R+`m=+FM_x7t4vn diff --git a/public/images/pokemon/back/1012-counterfeit.png b/public/images/pokemon/back/1012-counterfeit.png index 8ab1941187dd7b87c2dd685feed566511babcd30..e6deb02c70cf41c447394f804080f347a4b69cc8 100644 GIT binary patch delta 543 zcmV+)0^t3G1h@o{B!2;OQb$4nuFf3k0000mP)t-s0000G5D+CB8z~+hVLus6IyyOL zC22$(R6syoo=SMcW1yE%hlGC2!*s#9uIAy}7S3=n0000GbW%=J0RR90|NsC0|NsC0 z|NsC0z)*`r0004+NklZJL6P7BbzGK zPmug*@GU-)eVW8LWA@0|hY9sU$UfYgbXOs;8Z`SE9#j?zj<+!HWz)8#-@rf9-8A8VJ!AKEfRJU#rDTT73UT;!2ht$$pUThAXygz8J5l+O07;F!0* zw%u@W$vtCY)XxrRr*q?IiCc)iOZ+lPX~pxKC&D2-kx~TK@YzVIlKJraBDDzWaEbWOyvWE%`$65``R{g`=&IX0(0E@iXf-D(BJJwsgp0nHh-OHV+YPE$B^5BG;e4 g4rvZ>e%JjmKbW=?joS+;ySb-}r==Hc7amdlF(000qmQchC<|NsC0|NsC0 z|NsC0|NsC05EVe70005nNklTTW#Oc$oJ~T4MU}fP5fSMdD5hG zQ*C^r`eA?;EO#0apa~DwcGDf>NlVW%Mm<+dB)v1Q)Jljo4}rDCb;6=sigQKO(yA+q zn@Dt3acdSS#(%FaE^a_Da~+9oN%2l%z_hl{f8a_B{7BxI=%Gk=-S}DZ4$<09bRPE{ z_HW6UXnka!06eig?)q`TyjmDFa@Sx0kn?AL(PNNMO!C!y#kr=wQ^=R^H3ZY=oOEtv z*=pkXK;Pwbw81rW!2Dybc4xXz#z@oWXYS*AiH28TJ%6ScvY0h_-=zbroZATVj83o? z_g)8B#$c`s$ZcCQKBvjAS-RC_vqSwkqpf%vrXl@5tLdOivFLsA9lp}E!@H?m=uPnh zzSI;mIHw=rybtpWLO*d{JLlI|`-olkJ1p8cI>CG@{}oqm#fefjr$D=)@3Tt~l;D+b ztaH-@6=IP1kwbMB!4PUOjJbx000FA1tl9BIcFtIIyzmRN@+wJYFi+9#AAnqexR37 z!MU!?!*u51+ty|n+5i9m0d!JMQvg8b*k%9#0oF-GK~zY`#nxN4gCGnAPy@suw)3Cv z%|k7|5b)!kk1kug2@zc~40j>P&>2dSUQg-6Vc(?{Gyey@;D498Z{qZ-?N^$3tzIk` zDJAOS?`q4PCZ)S-(}&cj1f3V0hyc29vbMWcj3+HU%NXrkF{1R&oZ9Ej7%34_YjK^h z=$_(Sk+ihx#^NS2-BjF~C5-W>tBV^D%v?ueTT?tp44BsT`2(J`z^`PcOs6Ux!t`A; z`)F-vx{OB-`+r$7Wm<2U4**Z>7CXUVoK_r>C~9QYAOXnv@SrCz!IC~5q4>6YkavqSy4pnt7+9;QD3UetKfwOI7A_yIp@ zJmAAr9`vsG2|sF#1zgetu=mRYf|t0goeSHeeSwSbVbGfbZ!n)Kzr~eXam3SYSEZfT z=hU}oXkrgMn%(v!LhIQ`n5|ivZQ}lmz(&GyF#Y&LaV8K=JRME{-7Tvx}HjizooX#5Owr9ltH(oGZD@n;VNUC*BQTVHi zMjU^3X$A6zybP#z^Ahj~Enn1j^-1BH0NtR=)plXd^Ws)c{+c~?wiidL4d3qdwidY@ zrpvA@K2>r1Fb}`7a+aV{Qh`g(^g=NW{%zGQN2^SKor2FU`6eE$bic==pqh@x1GrZ(jPZo0DVnfIpg*ccD9j SYCbR!7(8A5T-G@yGywqqpQfn* delta 351 zcmV-l0igbc1MUKl7=Hu<0000tustvU001FSOjJcoX>rA^5FsHk5D*YjLPGcEQiNJ5 zrF#ftN)Xm_W9EC5u3qAE00001bW%=J06^y0W&i*H`$J1f-+c?Xtl6>)mjha zraJSID{Bpra+cG@h`dc3x-w?1oBL@xoBQE`Xga7O6J#He0lP61&i!nz;(|hDf&VbCV2XkgMa;QGM7&0fieI9002ovPDHLkV1oDjp)vpf diff --git a/public/images/pokemon/back/172.png b/public/images/pokemon/back/172.png index 9f4c8f4f1bd0fa090b78f8c68eedf518b2dd2a2e..775a42dd948e67c074afd005be358924a86ddf96 100644 GIT binary patch delta 2642 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 T4hkhg00000NkvXXu0mjfP9sz% diff --git a/public/images/pokemon/back/198.png b/public/images/pokemon/back/198.png index dbae4ffdfed467112884b501cc98bc3692d17515..dc92c8b1d5912469fbc17f5475939771ea354dcc 100644 GIT binary patch literal 2725 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 diff --git a/public/images/pokemon/back/2026.png b/public/images/pokemon/back/2026.png index 4e1e16c62076d04b0c138cb644b5babd4ea298a3..1f0411ffcd840f6a63d0a773f4798ad254416c6c 100644 GIT binary patch delta 768 zcmV+b1ONQ-1&jue7=H)@0000+@DjEF0004VQb$4nuFf3k0000mP)t-s0000G5D--- zAYd#cWML$kJRp`>A+%p5glk*rz7*q#E#JUH{`5on?Vs$}xBvb7l=y800000GbW%=J z0RR90|NsC0|NsC0|NsC0z)*`r0007RNkli_@kCIJ-$ zta0|7%}d*;yXr=g3)gjT$4$PbJ;;{GLnvQ384VXj$R=LTp2*I z*cXm**H~US&?w~m8|KfC+G%TY?nlqqE@PBRuO=!=!FcZn%%V^r#LahGqhr>vZP06t zGm_|2W{sg+llNPE{6tVT%VKzt_f;w;Zd+K_rw$Ru`hQj8glN;CrmfEz;3lkl91uP2 zaaAzn*pn%pz<)kf$g$EH@9VmpQ?%w&uDwf}-8-cT%?1eVY-dELG_x)1Muia5nQdlN z$eGN=Q8VtC?C+Rkvdf~B`{!`Fb?N+nraVd~W*RV48P^1=bCel4hDXk2TqLN@W0Ve^ zu;`i!$$tctAyUbN^2lrCq$W2zh$$0w6)a5^vpdu#u;QefO=lXtuF_RKhueg#7=|GA zfYY#}2eWYU+Xl*S1c^gKZR&v}H&99k^3j(nLh(?>WkJlL(x$`EehALvl5@ZE+I0A! zcqAtOFdF7eM-IU0rzkq6bPf;q)_muLH1{f|>v96ztfy{`5ot{rmdg>ZAYw00DGTPE!Ct=GbNc00MYPL_t(|UbWP*Z__{& z2JpM&AMmB5#bPmssAP2s3T*}!21}J9mMHR$6?BxbN>rB-A%7t=#z>W}o+?=IhPTv= zjQyi{cR9z7d@o_)n>_sV-Fs&zq@4~Ydvj8H`$$J(ro$Viup7TjJ@X_p%w%QZ8N)Fn z0j*6MX7+(xDN8+TNA5CEq|I~8bfhlYX{a`ZF%H2G(}r^}SW&8Om~%hF4D9TenFn)W zcL?eE^5jNDV1N8ym~mx#bCG;fNA5Bg$=Z1MH}Ne=k{I^m4rZtv0f{d^$R$C;Vx3F& z_$_L>vB~up)EvcC{>5bIVWW*HQS-hw1BB3clgw^{*A4U8UXuOk?lnIj4r}u=u$p{T zufBM*a;!bcXc3%iGJo}OduP3z`MW&NHM;ovJGYvn`F}V!=sLN#8+xV94^@=h=C6q@ zhl?N>gHidIJNO$lQ^$Aco2cU;CI~i!As^3J4XiUq2zg|-QU)P(k*k~=gN`%aYanLo zE8Nr>{4dk-jF~q~cc@dDCq?z+8dYXEJPmb*rqL~R(a}{jH3-Cn>4eiYa-}Zn3eleq zbqNUbPJdZ{YD@-2oC*>3!y$+eL>1cCMN~o&Ex8b95eq@EsJZXdn9QTHJQg!1U`(~tg0u__1jq&GK&cQj0IkD%60!uy!JOF*l`1|Uj~pNd4l_xg z3dmp^RoidSF=mLng=SVmWsSJV2HVD5S5MaA_g>#yrj4Fi_JUBifeNo-x)ahuzCyfx zR1>8NmAtAtfSNX1GKC7Q=t1a^EmRH8jN{si=Bto^<{K Xt?!oiE_Wh!00000NkvXXu0mjfN-$M; diff --git a/public/images/pokemon/back/25-beauty-cosplay.png b/public/images/pokemon/back/25-beauty-cosplay.png index 30c51863f9fcc8b01a41f21ea1830da58dc6b010..8a57b642aa7dff1630d3df21984b4197010460bb 100644 GIT binary patch delta 627 zcmV-(0*w9Z1dIicB!2;OQb$4nuFf3k0000pP)t-s0000G5D*>}CM_pzPen{#UTd6E z0G3-0_q`$a%rE!mQupX!IZ&NVh{Vpyx&QjV|NZJW6?~)s000qmQchC<|NsC0|NsC0 z|NsC0|NsC05EVe70005%NklkhY-uu`8@AN#+KMR!Jw(Unjrgw?$D^DddzHc+W(7Qz<{J;y<5O z_Pm0}lmCokQBZ{@eURF`DC7gl@I)!uOY-B+XM7x4`4R*T!QthhCLj3Xk+VxN$$RY7 z!bhI?;1Qz<;D0@(4nKw>&{8-?;l1+vuABYDWdRXL1PS?|=x2G01uALq<0OJ`geZg; zc8+mQ7mqss6qu+8WF4;t$8}xm4otut6b~$o22zpM#Zu0lAHW7rR)=jAk>&}YCqDou zt#vFK>ZS;!U#|E!vuT^G`n+ChgaWl zu22-Kn>xJZgmz%Nn}4sX3q4+OW}M@oGo*rc@tRKYa9Bxp@Tu)SN_xg+Jrzllceb6( zOC5T0J8T7+gH`$?-uUIftBL6FHBrw`lg}=?BmS53>=%uyPyA^R(hHt1>86NH;0hZ<@GVVp|$1*@DId}DqnQC4&eX* N002ovPDHLkV1k_WHADaa delta 594 zcmV-Y0h)?;s$$EUyxg<$rgH)LP|#=zZURG&p^j z_OCpja{SmUeW8y~Vfuk@v^(f4-{U4a(kuUnjweYP@F}GS?`Xl3%79PS40lioyl^S; zviOMxxJkgDVuB1$QWEh9XO){Lk4~132pv4aS*kRiRKt)&xIFj^w*^iEQV~_-1^jW~ zpAK``W*7Io@@;SD%p9Z%uPZEj_cHx`e__g8PL`?Xe=;vq1dlz%lGaVk# zpIKk{XG?>qyx{054VyWDb6gZ3@dpd!fCtfWW0hw|oTc;X9ZrKS(F6*&&+L>(hseYE g`n0^Ez2`gl528XGGizQ2egFUf07*qoM6N<$f>VAL*#H0l diff --git a/public/images/pokemon/back/25-cool-cosplay.png b/public/images/pokemon/back/25-cool-cosplay.png index fe8e67a27cdeb8d9e2e8867b07ee1ac782fc5f6f..1c9528eb350ec0356c78b172aa96abe16694d3b3 100644 GIT binary patch delta 607 zcmV-l0-*iC1o#AyB!2;OQb$4nuFf3k0000yP)t-s0000G5D*s^7bhz#DJdz0A|g9G zK%7zlRaIV=TMoJ_BgG*Z^~x`0Z-&`hMfbfSrLea5=2G?lKa@7c+xFAee4ZV1`d^#uqWkE^Vi@*19 zsZBCOA&UFHmw(L=v0I(Fq{VCRdnNo_`CLp}Rpo>82HoYCCAG%JYg{`}dS&&__xwV9 ztHrM)ap1fGS27y&Eie7D#%;#97@bqtIilA|fO>siY~yeo!HL8F-0M8lNw7MOlz53C ziVGoJ`3Y=-nWjqELJngt6#_WuS_p@5?U;-jop>n1)_=om!-ClWya)pGXOmBDSnqjC zy?&~~(dXrfC2LZ6H8#Tzz~CjpRVw&l_#v&!6K8@9GXM4(&Gese5ztqGKSKeMV2^AP zKd27#K2-=*$mt-u0S|gWJ;5oV!5fizR)z7=LIk_s6Z|^ zfTh674OnkLN85dxhUka=(z*cDxCv%do+7v!=gTnu1q0KDyZga|Y)CoFw;Oz#FqJ;J t+JyGyeB!mod9%{sI{~V3htFnJ`~fm(B&raS9$)|f002ovPDHLkV1mm{CRzXh delta 551 zcmV+?0@(fd1i%E4B!4GROjJbx000mW5Gg4sQc_xPY>tE?BAikHrmeQcAsOacLifEP z_vTXn_oXd!#A^Tm00DGTPE!Ct=GbNc000SaNLh0L01FcU01FcV0GgZ_00059NklODNB)!W3;#v<%eUcM?tL7cu+adQ=&N$!GQk)RB~jj=!DBqI z{qrAx;xd75&VLJkv_!|VR&qz2@^JCGUyNZz4BE;D%dB~G1h$*45;}@O9r+0f2Cc@{ zj=As}QI!y5eDVu$frZYUu*MpQuf{p)UWlhKYPEdhp$Y2w<(J2!%sLZRh>pcR|Qi6Q}mfpPIfS7qO1RRRRCm3V%P(R|e)^8UDk+F}&te z+VG{6=^scehc6O*vIOBNEO|Ip(5)Au7}oq{NC|Na;P7e?AmStb0I0Y)_zp$E4Thhnjd{$U#D+UQ zk3_>c0B_a{UVrxM&J%qG1N7@BnhiwsGY+*H5UD;zq52QvI1ew=)CK zXjU*o)8dTr+)&T=S|7>gc!oE}jQc##0^{|d#Ey3l*b&h1!Ls3rB1BPjSa)5%W*)8V zXd!rGyaFIZ;r~UV_jwkP!D4+~p@W)g5Iu901uK5eF gHORvKHNc$EFN&WNt!#F=zW@LL07*qoM6N<$g6d`HkpKVy delta 475 zcmV<10VMu}1oZ=uB!47OOjJbx000mW5Gg4sQc_xDF$kPe0L390-jo35T0-}|A@}A| z|M#WxVt`=)0004WQchCg3fuN?G@F9fL zRFN>J<2WqY9j|7ZLL_qbad?7Iys?%Zqt}L)&knsiBG!Ne*+!c&A^*tyJB!U$-2s1TN$C%ZIa$cf2a% z>-`y4?SY3iTqj(-(J-I<`!TPlOiTkw7Z1_p^FCNI{Vq3vD}d&XENLzU{R0WF8!QFE Rs&xPW002ovPDHLkV1iCL(*ytj diff --git a/public/images/pokemon/back/25-cute-cosplay.png b/public/images/pokemon/back/25-cute-cosplay.png index 9436bad08639ab9601dbb054be3e43f248afb81e..64b180067d593f402a6b673d2c8d80940d638443 100644 GIT binary patch delta 590 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 delta 899 zcmV-}1AP3T5swFu8Gi!+007i6B5D8t04-2VR7C&)01yxmDJdyIK}upV2y=6ToKgVA zAQ;}10Ondj_PrqX=2H0lOaA`;|MsMEw2GPl0004WQchCvotR3;@4|rprgc9%JOuGygift%*J%256a8l}!C%+0O*_6Q&X7D_} zt`Fn>#VKn;#M2NrI)^bMn}oY|{q^`RmlislSeLXW7rduC-_Y^2NpZ0%rYl8m&eS%s z=unT##osq9a^a0(;AjgNaC0(Ba(qd~dx`KdZ>sqEl$;qQuDiSn1+R;q za3tpjI)9utxit8Q9`KhXFQ3T(+ZsVSH-~jel3n#xQkjF$ZSs=xX)jJ%S9TZjdP<42 zp%9PSNpE+s$_xi08%G-nWRnJ>5?uXgjE{W9dpCpK6+-JVZxwG^31fUz;n6_9UZ9bF zF;vh%_sgv0%q#S9NX09igDV1FcPYm<%2>)!zkgK~Ul)$e!|g(t0Qx0}h+mAv(JREj zPxZ7Jf?GAe*yTb!nTHm*__2=uKP4_i58~ycP1%129N>|<>`mmCbko5(c%(*dJ zM3?*hN;ZPb7rHCtFRn4a?Pm+fsyf@{Te>=Wa#^28wN-zE_fIbOnr-;K%B1c)yLNaz Z#2-V7lQW8!sc8TJ002ovPDHLkV1j#dwK@O* diff --git a/public/images/pokemon/back/25-partner.png b/public/images/pokemon/back/25-partner.png index 8085a963e28bca24a51b1378ff62fb0fe113b748..ae6133aefffdfe971789764fdeb107c9b0ea8575 100644 GIT binary patch literal 7897 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 literal 7035 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 R+D-rf002ovPDHLkV1k?n6R`jQ delta 546 zcmV+-0^R-G1iJ)~B!4GROjJbx000mW5Gg4sHfA+aQd(a$G+?z;m1A3+QUJH5nfJXR z_vTXn{pxWkAWi@P00DGTPE!Ct=GbNc000SaNLh0L01FcU01FcV0GgZ_00054NklmYV6bFwxRpG#d4!NObO^TcQ30{lz}tINS|wfu1t)M-;H6vW67k1JL6K>1 zgco>Q-A+W4B7cphub^!D1c`9Vh5&^vT*v3jV7;CV60IwBCasRa$#|mmMN1cHp5unB zh}YFrqaHRPjWt?R`bI=|MTPEp zdMNeX#p-gV@mIk~%u!ubo19j9ki#L@m}o;hkVeMz6XS1!2P;#f#BB?rj7y6+qqQ-SXtEvL7pHb> zm?k8$ozn1sj65ZBNi*F|4(F!~g&Q diff --git a/public/images/pokemon/back/25-tough-cosplay.png b/public/images/pokemon/back/25-tough-cosplay.png index e70757866a597961e0d7f32c91f5798ce62ab47b..cfc9392efe879abe12a1060f5ffc4253643cac79 100644 GIT binary patch delta 556 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 literal 7035 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%0DK@549Ok6TV=~MRke_JVvWwn1kJpRhcuaTpxxb4 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 dJYPJJ@PDP;0=6A!-DF3 zZmIA7kNNpAf0^grAfnIb^)i2%zmKDKDQjM@kNNNNjh9)|VsRz=ejC%yQ<9GkK&^|-r~ZvE)uQkX?<@I_Xm;Li?f`!Nz43ef zEp`1&VWH!%9-U{d>F2Rku!8%-E+^^f*cT{-t(4JoS+e4nXtWM+c&X%u^$5mA=0( z0`tk*kbL{EmM`{Hi64B@LV4a&l8+8x<+GvdLtU{6jNoFJHw3c9#48qfd#4zlJ!&Cez(o2 zwaQTC@NfEWx(B=W!aM`-Oa;_Y<;1Mpu$wUOh^^wP44yoCaN7@CU9?*5s&bOb(19^k z-s%b+{Z3IR$5>oPty>Bmr%!{dBX>P6QENz{gEwA4$8Sj-R%=k9$rfq1hTN^VmReU7 znrzWaYslS>qiT&Qbgoc7UqS9p98zmkp?__Kb}Pu;i$iKHROp0`zqH8W0<}gJI;CA& zgmDG6ZYy+3$J8$0ilb_cDl}op-RIi@wZ;^hu=3y+K~SM7$|rGCaup;FsCB1Re=p0* zO$Cm{;$pQfsPfIRKA+HW#-(7KO~E{czGXL~>wY}Zc*Ry3lhAVF z9-Ih=&3c5m$0ovIvmPLBcp|)~(0{#2=yp7*PST0+GAm<~(4BZ(J;fXTM7Thq+qa;D z)`h8T)`N?Pm8o$Hx@cYS@Hdmz1gvbTw}64xwE=RGT60+WICDna9JG!*b;q*EdVrM+ z#LYo#if#e&p8$}RgSWp~D+_C*HN__4@4?Rf%L=e^_@QIgWN?~?*6G6BWq;k-{7+kaPRx`KsHL0%Utv|+@fw{-ju2MhE1RD}-hK3tT?aHv$$GLvqjTK<8--S$vpyJf7ICZX4D!e_yCP)PdOL#% zWEnDRy`4b%fJAo0?fG?hH~a$iGls+8uJ>u38f%Yfl*(GV37+?y7aV_9jEO&3X~<48l|EZ0#+E zZVy_Ehu4{EeXX6z(2YTB5;`znt*Oe;1%-yp`n}=33TLO|I}kB6GmML+Y<4=vU6O>~ zl3oR~(@lnEh546tbbofb$FbFr=hT_S|<#h{Ezo*hQg|94KlQ*S%YfbVrWar!l1CW zTDKWGxd)x_0R6Dk`n&}^hK9nE)EZ*wNoFl%XwnN$R_i}DYkw4u`4Fv*)(+V1gh^|4 zw7zxODyy|RS}#N^d-(`NtD|+y){1Jaj@EI-Uats5Yom3-)}1?rK(snqr^3z$_8g)c zW0@Lgov!}NZ}o;~(-lq?v`#2^2X5*O(Z+PqQh?UETE_*Qu)`1?ij^8#chuSe`)fhf zI+Q@-3HP{KAAk4h$DnHc3=md*71(iwsn*ARir#)4wGP3m=&Mo*Zmad%KUwl1dds&J z_N_|y27%O?WW&?E0j{)H=UZ*V2l-ieJ`wYVFp2&W@FM6&kdjtk(Vm`ZCLP zU~iE5YVH4)5G}#Z6SBQQW~p^Jm}~rYtELFSz}_J9)qmPId;a#*$lf6H)%sl09h2`3 zGGDE)UfEka|D{?J)%SLmd|^>kYsz`Gwn+y5SUslJjp6BFPk$QT8)T|l2fTWG#E$I^ zqO8{G`BnD@QC4dsFRZWDg5hb^y+I(g#)qdh_XZhPYtHcWoI&fE5H0BNU(!IQotJ!u R(f|Me00>D%PDHLkV1nyZV_g6M diff --git a/public/images/pokemon/back/277.png b/public/images/pokemon/back/277.png index 0e173bc54fb1a357bf987be7e77ff8bdadb45b9c..ced72a75a7313a3863869a6fa0576ddb25ae295a 100644 GIT binary patch literal 8903 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 literal 8311 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 diff --git a/public/images/pokemon/back/379.png b/public/images/pokemon/back/379.png index 586a19a59168da78e57cc6f37cff7e981f87a248..b4f282d5989939791837dffe2f63b34e6994f5ef 100644 GIT binary patch literal 9936 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 literal 7912 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 W$_)*j@pE()L`FhEyjs*S@c#h7c-kfa literal 13082 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 diff --git a/public/images/pokemon/back/392.png b/public/images/pokemon/back/392.png index e15396669ce0b340541f19fb5acab882c6810121..2e7466294dae2b91ab051ddacc4974d7aef466c2 100644 GIT binary patch literal 21205 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 literal 17452 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 diff --git a/public/images/pokemon/back/430.png b/public/images/pokemon/back/430.png index 6c0fc8a5166984f1e0c2c7c5f84f8c717e7fbd48..383685fa816bc2cb2d281d48533787cb7d34796f 100644 GIT binary patch literal 9435 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 LS*lLLB;@}9iUb*k literal 8461 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 QQUCw|07*qoM6N<$f|^VmCjbBd literal 11412 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 diff --git a/public/images/pokemon/back/486.png b/public/images/pokemon/back/486.png index 041b03e5790c955e003f491ba192f6a9fffcf1ab..4df438f6320fda09c18e58e27656b97a58b31d54 100644 GIT binary patch literal 20756 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 Rv1I@N002ovPDHLkV1maN$(;ZI diff --git a/public/images/pokemon/back/502.png b/public/images/pokemon/back/502.png index 4857186bd7e2b4dc1d6cc19d70ef1a1d8d4d0127..5225cb803e0f1034456c5131e495a8c48f5a89aa 100644 GIT binary patch literal 4683 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 KMNUMnLSTYRDLIS) diff --git a/public/images/pokemon/back/503.png b/public/images/pokemon/back/503.png index 96a901b2bdccd0bc855b2ca89a33de7fa86fd543..8b38780da275cd516d080e73ad6c81d0a3b3bc38 100644 GIT binary patch literal 16015 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 literal 9891 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 literal 2436 zcmZ8jS6Gwj8vFxDFIjrYh9a;85DZ17NH>^(p~+G-(iRqoA`pl)5fqe!Dn@WY4Xc8% zn9vL*!GK6_QY4`(uto!9OxnnIb$3pG-Og%A64t1 z4mD#`-uDUzWfj79b6M|;y@nYi$K8OhbT=cXOm<;q1Bj|LD|_)PND6lNj>$L4{L@~t(V* zaTmFie=ge~&#@1++dm+HlgY#iSm1C<+sgPBEWuoMoq$oA0BJhUH2u|hwV>qSpV!x) zzU%O>s^4)|ny}XV$D~{{m~GA}=qMpHM1Pp|1dNi;cem*OZPA)QBwH&V&?-2Pt2`UM zW^%Z=vyGQ@S(x4m1fP+gteVG#XB1ppU0ZK|32(EI;ld)*Wr~1H-z$_wh#Mt~=gkJa zZCZ@XkPqgeKy&4@Oh#ro3=y2+Cq5K;T;6tB;kM?YKQtv72ya0Z?AVHathEBntxK2i zZ(97Qw|J@VLCQ>Rggq5sh#8fj(`?$NH>aVei7d{P6VT z8`D>P*H3XU@f+inr*6fDk|zo$JnqtB86t2A^1`>!N<>)Vwv5u1E2qd#B2|8w#7HP! za&yvxEFaLKDD(7*!N3(XvdWK>xgB;`XR-W(^QaOrz3)E^vVD2h{!V`-NtAUFb?wt7x!MAht>L-Vh;4gcN*u;^;!n`4Dy2SHVbROA`ZQ~0 z+ZB3%)TjJw09Lt14v}Z`eRHBduVY7H{$Q8h9vKW^Enb?d-AI(#enrRV_G1Cl+pRAv z@rfLS^gvR<#g)>JS=63SlO%!u15Za!9Q}`bm+&=$R+xbs^Evu%p8I{|3x|C7!Xtl@ zWRfFAe8heGoOICzzZuW^_cKy;nem29M?X$B?w0XGLv{Om;mHz;&EwBx@c}yOQ~f8p z`PSXn;{Ys(mD=&?QLT@%Ec0!`an;YdskE$T#Y{!Q%t&p3ule2d`a)?I-RFY@HWO*5 zI&+v9PcTp=Y|rnGfmzF?5_9l!&T^zfhUD)qX}aRRoK7>j#&Jn_V}7Y9E69F2ZBW!o zt>y9CaVOgPbtTylV(6C6nrkZT{a_vEe3on8S{eBCm+3l2z3CTMqU-uE`|D{j=tbhA zKOd*J+5EUHzMbND5ix^QIujqWC7D7faKiPR>D6=cMPCpRj?c+B*&EwU9kY z)d_NLNbZydc)J*<%7E4!d`iCYtJohL(O&17wj>p($zlzP^Pm`pan zT5rlO*wLefZH7z&jq46RHU!Gq!di_bCK+dtI)R&S(ih36UDMKMA0YRNB+Vd3DQ8G8 z++#KJwC~hQAx$ey^3jfLlTZq*VLLO#$dAst?a?Pkmt26;oD%U!7IIkb2v7`VvavYILf+W=Jv3CVNxF-OqO++jKAuI3khlOHj58ZOX^R#E>szr5JH$=3pfZP7w*!$ZnyGoo-A zEO7S|80BYDs6$(o+H)FN`Z_Quoeh&_D%U%t+E_g>|8*0_besYQT>ahRC&T^#8K(j7 zY!^XfhqaV>J3qx59x$dXLJDGHAz#S;S+7iXJvS)LMx}T z$MnQkwD~UsqlQpJE{j2HFpyE)f7$RdWb_)e2Lp_{K;7j2V*anSz1+CR5^Ziv`dLnV zr5-JSpLxzH2%r7d)vWil27e;@Y`KHXon|U*-i}eyTmtVQM)7BaVZlHMpA4N@DPk!G7S8)e&^H!(4P1hZ#Vgpg8UsqP; zMDfel%E3qosSZoOGCLXgi>qM_@o@|tldeb))NPA9S*5@ZV~0X`X-N1t|U=zZ?9Df>h-|cTaBZzSdHNh$1jC&*|<4@dJ*J;8t@)(^DeHfS; z%zk&pAXPyxah|&{Qm*M6whr5n?z2mqpiQP$d{^TX(03mC6k!}LfA6lCqK@e$hQt`X z!>>EMtN+Bsnog6teQ>6o=Y+AvLASmPOv}WC@9;I|Qg@k0Vwtnn2V{YPd8C)foJZor z=cJBmeC7jurka>9*ZPuJd;U6^CgvhuGaiXJ?;bd6f(B)2?{r^>qp>o|Sa#@L>UZ?8 zHztJhuof$9Ie^vO74k0M^|frcQAml({iLedDrYeI-D| z1c8O*-sO0oq;1)p>@K2l?=NUk`FOCv|HDN_2`yhWowa96jAi^v+#DyRes43|!iDL9uKH1Mgwh|0vXXND k2lg#<5rT-N$nM;x#E+x^d8bug^3lHvc@Awyweh|EAF4Wzi2wiq diff --git a/public/images/pokemon/back/528.png b/public/images/pokemon/back/528.png index 1b7733cd4db0ce20e185b0bd54b16e66846661a7..81fc8414dd84cde38cde0633982d721509c6f3b4 100644 GIT binary patch literal 10016 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 C#;c|P literal 11060 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 z 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 Y%M+0yY;fwg+yDRo07*qoM6N<$f@K4oumAu6 diff --git a/public/images/pokemon/back/591.png b/public/images/pokemon/back/591.png index af87fdf527e7484b5f9761f6a81d0a1924870f7e..2f2d9f34f08b665ae739894f3dbf9fe1290bb29e 100644 GIT binary patch literal 11446 zcmV;nEJ@ReP)Px#1ZP1_K>z@;j|==^1poj5Cs0gOMM5z#V@g7tl!VU3#cMH2-cpRMF=GG#0Ao!; zLNhUAOhPFc82|tP7U!})0000DbW%=J|NsC0|NsC0|NsC006pj;h5!Hn32;bRa{vGi z!2kdb!2!6DYwZ94EB{GEK~#8N?Ols@G(vzpZMoZd#D7S@KtM*!Ci@3K^cJWO=pMCxn1$RFSY%ujWcfs4&+@6lkz>WM*Xv*Z_D~kfgog6Ks;O6t)Cr^-{qF==gnsT4JH#eIKD1rZ82yE*>MwSPFXraly3! z`1b{XBC$}I`+bdehIzJE=}rs-aZ_Mo7>K(W%xVVJB~}UtjwQpI33hGR&vNfesOQI} zz({We)+-X2l)SYfzsE4fN#$Oq8yW`swm@iDB>?{I5hGx_ORN=Q_70q>kxAKZr2F}! z4_U9LOM#JoQ(#guH1;h27Q+fI)5Xs{kzpAZ0s;M=Kx}!Vu~dlJTQH*C!2o^dg37@@ zgQdmxE@Dy`1Ok3Q4+JtV${@5nY3OTF82K@K4{q2GMM5YBV?kB0As*Xb;uW~UC@}IP zdLZDvrx`?sNh3>G-#CL~!{T%;QWKAjKR$+nT_F@`^9|{1flgs!dD7?%BZdqj_8#2n zkL;MmTGspH6~uFeKw!)^Om{92WDr>nd^8f?zvIu@TX4fLHb2siuEW@1EH;-XRnF6mDe`AkXJyz@rfk4CeKfqlIH0!8USfG}u z6bk>$uF5dx>z)w^=0_E@8vQtYmAVkH)$Au%0wE^%g9=NDYx*VHtXI)2*vALwjs`3! zcqQP;J{KtEYE4IMVJcDFS_>@Evyha_7kuEN2g7pG6xZwtBL)H$|CvCe08AIPLlV}> z(D5$?76>?ymY{+Nc%jLD*^S}Nf@kr-Xa)F6cO}4nekcK+7i0lIe^BNQq{EPml9JTl=>K-C)j%0xgCHb?we)W-t*fMJX#1$;L?73)%kT(8ALCLpN$cL`wCe4=1pvMw#WUKoKBiDOZVe=e{O zGYo7GCWSAG4R~{O_?;&jJ1_WDfaTgP2MW401W45-)e!ODrQWxuM{C%Tzzz74d^h1tt;PHO_3Mk^F+0;5i*_oYdc`I1 zb|m)u=NshrkDp(@+|ZY!1BGLO8*syR!X>;@SFiV2!1%&j@7`8?8BSP#DI5#jKsLsHOvs#`OnAp8NXIv>DRqvLCb5!iznmL%Rg;X)h>B!$<1 zj1Q3ETpnUhINz3ZFLo@j1vd<^cy%}g@n~(h2~Gu20SEn~2(saB*S(7JV$RL}1weI$sKq;Zz;ns`gl5g~71DLB4q5 zsHi00toB%7fzhzPL%w{ybtd6gZvdn-fhhvR`fz^n4vqyRaaQQDK#b5Z;5gi|z~2-z z!~Pb~EH(I*yKwen{)oAfM*{r9O*r|aR(|-w;TLbAR`@o@CPGcNPl~Q{ed3w;F@i3+zjD z3eG;AWUXP7bUhTY3g_&3slX~uk@Hl;ub?>}H^d6t+e9644Qc9`xT*=_gR zyN{S9tOsgcg$fTWulB82D0tsTD28pPJINM)JA3UnFjv?bv6W$`d$W8$EqwA3Uj}&kqtXcm-NKGqE9WihmVP8mMaaHc(O=#Pz<|~Ze$o~ z#@;Y2+Bf2!LR>O5lEhNs8w|Ub?oe+t!7iuA)Ub@p45k}>B&-!e_7-ZxGA`2{4J&r- zR2yuxp<4o=Z?yb@VXmRCYlUOO?xj1_+sw~v!|(&+RXjf=?(#R6tRsS`J*?Y)_P0}5s1@-2o zpzmyV5~~gQ!JkJyQVK3%oyFcr!7$mkqQ`{2g+$y>m#tmB&HU`?9iOe?rv~`oviJ~M zOUx{nMkV3Bfgy$Gf6q#W&C}he*XO7Cwep)ye6-nlEttZ%Z^b8O=|&2UTt-pgXFTl4 zuwd^XPtAF{1!{@v_4z5(x3DHzkx8E|2Y))g%>dZ89H=FnQbVl=^Q$s!ny$ltbsFcY zf%O@xUQVjud_|f51*hInpq*C4GKGXnqF3NWs4-{DHMT) z#HxZ#^o!$pEOc1<4L%I>nad0Ht=B%g0@#^*+hLVLD?o`+;oL321F%>-8q>AU;CSN& z*wbkRSs*_?Y!CETnyeRIe)<$KAxEv?=!ZEF_!313N*D!pA!a?D1?gw-wXV)q@RI;w znBm3-oR6#a1RlQXkN;WJ%SB7NsD~sBm4e~pgXAWKD*=7ebs`Yh21&Au$d*;n966f) zt_>{1u|~@>f&Bh~{?;%ye17>=du*ve$-ok5QaBdaMlwv(Ih7DZ^KC^+Fog3<89Ads zfNgn25+#}?U}N;V7(+f&U;aFfFV7OnJ&Q`+^4fW~KJqyNin`oF#oSoT# z$v!S-nD`V#FefMjnGB+G;L;T@A!m?nuTwY{*oPY?`7}CpG)WW5Fh8}|IbFk50XlGw z=fecEZ1s-H?qax>hsWz>tptrs&#^biLuL|n3daKbuzf2m6zWtB^JpblwQ-HTWYBED z3@d|cy@9l81^9Ys%3}#uZvs_}(<0TIezvSrI2G838J4FrM`yZCM-_}^BN!_dU)SUT zFVR%!@nQxHgJXQ$TBDOU$swwG(THj4oCdZ}huLoDIfZk9eYjz1I?qSP4YMoR)r)KVkFJLT9u!HWonQb@;ap%J^-bTf84W${h6noRmuA=Xz9^qR)q~-h zL`{SekeY1cP^wIzlFJ+mYy-orU4VVF0SUzQNcR#kgr#eLB_Gb8p$vKp3$|&v4Xr! zhdJB7$k|0)_U@i$1zg<8FWSbzP;C@qp<=mXfi)__h)J||n+`ea#~E}Cwk>y(@vdvs z+c*?#WRP$yutZ-(5N>4w%J6;=u(rc9Id`yiyPn71-X`E$M&<&AsEsdKQ0LKCgjQ5oiO<=@Z$yRHc z2Lg5O9x)G;nhMRXsP?ceZrTn1coW{)z495Z!M1}ztPVg(+pkp?w z=i~bx{V{e;#tX2MvdX* z@{6}^0fmC)xLx%b`!>dHMeKA^a*z&pVKF8_!;Qb|SvSGKzGHX9zBO9+Fxysy2VvOJ zux1w)k<;l`-r+_x+a;fFV{;ewWIv}^Jw_HZ4%-`6c3~0EAU3d(_G}}Xy^;^NvAGT3 z2|>?dG*ED04BHtdg^urB;wtUcMl?Gm=g~4;jrJ+rFQ6@10S!ac*07|I`DJB0mT4P( z9IwriW%r%YK1BUgtj8KF?xQw_6~`m0!MjGt^lrR1OCCl`a4PZ5j=dgjY*HKc0{~px8YfuT{zIXbD%NeTMomVn*{I1KOyaVM$>wFim=EyyhhrzxGG_2zn~kQ)b9G zA}}|sD69k~NpFtVtmMva?>*of9owB?3&X&4g_S^@^TY8<=(4}beu6sTwP9`0%CM~! z3Dh2EJRC1aZ@2di@Li4}Uw`7-Lr%vCsDsvqWrejsWZ2X3a%|iEU5?cOFGJ1@+srxM zF#_DgzB68i8+Lz_V>B#-5tkwBIZ_TQjgH(TtNv<4a*YVyA}{L+VkPoc=0z7ZN=lhDuouN{|$yA<;lJ#eMq*}HCNU(64v{( zE?HFl{mdB|H^-~vyWgYXBwwWe7qd&};P*EmCB z!*|ku4wjn(<{@gPH!x3DgcY>Tu@HctsV5hFAP)`X{KWZC<8QFaYtE zh5@xo1Lg|DT$xwe#W4#nR0YQ+hlU$;Mfg^`h-tAx{Kxy=FsgJi_7Mp-<;Nw5jXH>$ z=ly_oyylo0UcCNpyHx7TGc`pKN5cTztqMsG?CAs0yr?4HtOGZ+UJ!lB3xPK8HNz44 z3G|B30`r}j@Q=_`5gU&}!+akW8kJy%*%RNI0Fhw;Xia!S9ex3Hb3%*1!Y%iURb-0{ zC>CGRE*JbmypT@)J5loTN82ixVRXvTJV(Jench_G$#~NQ>S29w6pXi;z8UljL$A-3 z*7a(h;JQCbma}oo^p#m6t75=g)EcXeI>4rTxiB7Oh+S1YzU^Jo^Zmdv(x1W&!wu&1 zBi=Uxpk4VcESlmoVNOkE>V`nc=#F*`v9*mLE1$y#}i+wp+j(Id$|?;*kCrjH^me zEsIhl6=!h6>_n!SR~%91;2(K5!$QMF4mRo_ot7s0#BQRW-^3yPF%Z{==Ie8|Zv+FT zXSW%ZG~ZQ#m-N7rrkESfiy706Ix4znc&Ct$By^T6Zw@av)E>7n+XGk@{t>i=cbC_YmwPwCH5413QC{`&e#GmOBUlZIKwO8L=79Tr$-6FWQiqzO)eL;7P##@MC=TEvQdYJO$gbZ5!A~* zL6u<#^b@EIZafnkmUcEVyXdSUnqf`O6MixbKlE{JmTW2D+}RAtbta&v#XqJWz#QXE z*=2k14pDCeV}>Q7T%=!f!{Q7{=Kyem&fKnyuzhcQf}hh5pxYSznv@JPs-0li7o_~! zey~vo>BgRueSZ7SJ^14B&*>*XXfrGdjEm((PBW}AELlkbXY{ClYfz)mmt-K1R|@|P z^dofJAQb2VCb2T3VJTwu=HU589b{AVf;`(M=#YK{ShCy(L5?9V0=9<9F<$iEo@fPJ zoaShLd&P5dGr=pdL;4XAd$kRMrZtb#Ez=FNq|y3tqYm@Co!%W;755X|aY#SG!HbIB<$3RqnINf1StIyuF42E6J&=q#bJe_27NPh}C#>j#n%_9u=rK62Hn&~Yj z(2_a9XHtjsr{L6P7=jU(5dy<*&CnJ{IX3fm@ zak?V^&*;x!gTzk^;)`F4uxK-Z3&a0^0A=zIQ3?DTi?@Kz+rF`@N1h$)T>q1BHH;u=W)S< zutm*3`HJrc-s1wsXH?>5)j9ZWw!6hdeUN|r+RC{4l)aFq7<2G0HM)dkcTKPOu|SVz zUlmW?n=Wy07n~a1D4Wa{^$+`8ZL=bC4gtS2tp3Xqhh|?DKxdnl-P{GIpkGya zknzpCOmMODLr`#QnA>fB>qrn+*oaR;9_y6)hGWAfA$8&2XM#T(qw7J&4D~)C7?KZE zw3dnK80fWOX7}K?Qw_@-gW?-sovYNn#~hx!F~n&KU)60hbF!*dZd*)36rzllqi0u! zWqM`Vz+a7766h>9+Nxq83NDBZ%%h4rqY*P|@vEEJ4LWu)tfRLvYh1@SzQIY0iish( z!@0ydY`d(Sk`Pm$?fj4pt5R0ziQhyRzl1NDw;FTDs?<~Pfj#2~!xStF?_8sP4mczw zwB%%1oil@a=LyCHs_>+T@n?>8sqc=p&`r%r*#WbDFrR}oH>_owVXx+~>kB?GCQ!o9 z*%QO|Qy&F3msQBjL9b>=WZ1u}q&H^R_@FvyPG7LSZ-?#F1H-|ssJpX-xKnUlts6#K zqCYXLDtf{8&MoQ*b`g50x(a(|Spl3PDd^>j8Vs|?)Klb3KHuuJj=i9;k$5mgSoD7C zoq*+S0CRhm0En8&SJb9lGmPxSC;eiA;jLk3Shjl|J#eg=B-g3;hJmsb7Z?)WkJ^;W zBeGli+Awx#;%|@i#ITGd8EEBuT|LKlO1dg3`-C@XC3e*(Ek27Z=?X! z>=8}YMDkkS>da$wRk!QH`-J#x?;;-7_~e#4hltI(AT6(?70ryH~7vvvIY#0MoZ-@690bKC~z zm3Cn0G7sl=J59!gk-Pap0b5(cJSbMp`RaSSaQtSIcvZVS*+mC+jfOF`%X9m z=n@}!7QNzDnFs9FuzsAqA88F$ylz!gVcA?&oQ`z4w@Zf6?Ur4YoM6|etOFU<(E!tzIQ8=6PS!M`Hf}3$d1Uyd9bVu9H?o{6HaZISr#bxr$U-t zE3#p%SJ(NW_Lb*x+UbKQA57nSj!^sni4hpKTvkLLDT?SWo}h~rtG!*fXXwYy&KD8D z90xx?t_b80ek-b7V|b=v+zJvk{T|BN-R9ZdO+rv@WpnfY0YEIMd8A~Td6a;9=NlQc zhB+#t1A!~UaDj%gMo7JJ&p-r*{^fhBc*6Zy4RF73Uo`(y8n?j zVP03xw;bKXI}sZg;h3MM5qb2^hU{O$ta!m(8fMxRkXptSj=;NHJ}ztOLj( zrgsLSQwwZ`wUCmVY>e{y!Dq%TPQK@mngPRB6{p1OwB;3{IqM@`P>L>9S8uD_FlKdU z{~Y6`k-{sEcW)uXhK&sLL@uu}VKd=ZN?Sb>IK{Xx3UX7B;+R{=FCSMGd*XJ%3`@X? z0uea%Bjqh%hC92Rqv&E2MF%z0x#P0($Uao@W5C+UAW`{d9dwqA#VEsUF>8{=TW$P& z%P!6^GfdO5)ck&ZzP?h)yx@nPwfwU4E^PveugO4jgAxGjH!ZQclVeb@s_*TeQ$+?A zI~ioJ`2_AEtc4ZmK@NQs}SuTWQCBxnot$L)yZM zo!5p{?W@uReTA1BSd}Vd-aqFx@qS9f>_?9MjUK&;G*e@q&X{3{(Y9P+p2=>yhLtj>j%fZ4F zv8DlOBZG9mGU{O1)Gs$|fCOxgdB+wux2@!ax6hGM@tWO&saxoh{4{GIM@B#NFNWzh zf`8UJfGa6m!y6HqcGFK6QPn*3#4!H+ONH6gZsxYbW;eMAo>sKCbqLs{>g4#%{c|d+ zUc+KCatbywFvE1++NO0QyhR#8iN(||X=7#JfA|lCLN&YRbhW&>$wycE&c;PIjPZLa0Cwb9*~y^a$UwIe4HL_-H)4bbtbmJMuo_ntm#h_i z$U9ycgu-f|3%_AwyqD|BxTKD8cXl%1S-xqSVT74Bi>>HGvq?G+tH935xZLLh@_-*#hLMWMP2nYXoL=mVvRyF~3es+Bb}G4P zoRHh1=+LpWu1Ga2`f&ol^=I21_PBY_(@+_vxA4=!g49fdxUAT-jw=pVhM|m8uG-HF zF4q;Zn|eUU$QSan`QA99HjJ1K*2T^!%ZjV4Rd1lwu8f3o?^PF`gtc6*t7cVoz);$} zA^})*1xCZh!j*O~unl%97W||G$C-VJnp=;P*df1W3s(HH@(R#(-aNsC!LUE8!lgkV z{8j9oidP`tM!0|%9mRa}RaxUN(CJ36l!fy=LS;Yiv^}6@NW{Ca3EV{*Cd>e4$mm`F2 z2%2)f8($2OpHys+#zXECG*8&`Pc;0Eu(u7EnR%46$p6KPj}Yx!p|9TF;bO)9(}0QX zN4prdGT;=`dFK&%Y z(>vb~02K{vls%7p#hq-bf^SP|_RG^Is?-g=Kx^0^L1@LkcFgwM@QqcB=u|(wsCpH7 z&Go=Fw~9Nbb`RK(UKu)p#xS>B^i*{ndy%(O38z<((9URQD*HEX&$&7B5Le78wSIcA z^d7M=tQ0+oJXIB&}@hSj0F*v=%v=-T!o zqpBHMT#|`t)lMX4k=u18bj8O^GK{#KU_Ct<27Z|%^)UC&2hrPIFRbKvz%Gln(Ds&Q zh&-~J4NAxf;~pB;^4+j{g1SIlau8nA%O1kh(JFk9yVDITZWOvodl5H^+A(L<3N=3& zCZgz90)2FQFg9^7M{7yHO5HgL%>-Lq(Bfi`$k@W!?(z1^ZF{#EKua_Hu_mvuNy30G0^2B$ctBl%s5 z27kZiCbVK-j8^YA;-=6y-EOAI1-D~5P2b2|CXF|Qfnfy~bfAi!LVM;{v57kOcBpPe z?$W;EwoEK$Wi_1j|^HWuxjXDEh`q1TIwsMt->cOyHK+zo1B5+9bg;ufw_Z}Mkb^Or(1%*mO4 zRdW^GBiq6vx8xm6Z(%6fL*I+sWW7Oc4dWA*Di;bQTOUfaGH7c5Iw2V=x-!gr&uXq; zH5fUCZVV&!lAYYnRePVE$nhkZFh83m>1mG-*nc);wM2%w-BvdHIAKzA^QuvYu5V$+ zyJF}0$uEVx6}g%u4K-r6DHA@>2+xB=E&xO5|N3PzWP9jtf(Fsqp^pBtCy2r2w}w1s z-mz7*SA7|o?R8|YIiN<&&M>6StI4pMk-P%NKNh+S*_OBZIWd2!Asu50FaF6E*OFgO z=IkE0R&&GFl{~@bk=5FAz2=eH$5nH0Shj46@NcUo!@s+-OB*|?nXS#MhW^a`S;g)d z2~bsg_vw_xTt-$CFnqE_?1Ab>4mHL*cPuQc+-j`WiHfedW6__?#~NGT$z^wIGl(IG zww~i@unbXT1N#M47w$*}ye<9=(Tkr_9Xzv7NaQE4=?#%i@o$(Uf=6u11-higWv3u= zhgUsn4*MKN&$YN0MmuV%(*O-rZMFAq;A4$ey!I6E<82`OlR~-4PHC9&jComf7g=1x zTO-qiu7IZC!-KMm;5_r50Z5)>Nma@dHlx#B%e;Wsc$s}rkNfU(%%3%~E;vB{sAl9u zDN$<3Fg+fMuSN%)q}k1H5tGpT;%K6u3XelC++sBQ7LU}5oPsldJ&Q@05rUpJ&yS}< zOpcjhZ}bF_68THPwQ|KvVxO(x} zS%kS)k<%Th2FX6wvnTAK4_$XDOC4ue(0e8*a7MG@bu()UK*x*6_54u0R=a#o+Ni`F8wceMrl#V&vueg z=3LMu4_s8~H}1SzTgyt}6TixCFnrFHe6W&X4os4Znweb{80?A=?TpeGhN3gq0*mcK zb#Esb_Y2j~vYM+JiG1JAZ!g3&l)_`feq!FII~f0gjaoXxI7wDnr_oAjlk780MdzDm zK~*xB2DwJIz=@5Mn>)#nF9JL-WPB}f!|X(_c9mn7hW(5lu!jJMmbJb<+6_ie5#g@k zueMGz6f%d}$V$5;Ojz{>ocfX144~{pE`D3yFzk(SjsP~IvLr%mk%`a$oFlEpQz z@9rd1vE48}M;xWSaG8Cz+fz5t7XZ@cRviGLm5v%P?{CB-YC~DBWPq1J8DY;g2(*e@t$>-o42> zbHy_}-ATsjvD<#n%s@w5R~e8n!y?Q0QlbDF7X)hz^Eu{yTUcOAJ0a}`LzriKNfU3p z9}_Qyy@=c*FDs|t-*BiwG7RvZ0?)bI0=_B5#H?lslAgp}?gnFcVWhmJL%?lHPIm)u z>o8$kXwtc+QM0%8Fxh^?p$64c?j86nG1D`i6D@Izy@*@##=7FGMt}R{KzWZIxFz!& zCX3c2{(T+BvI!Pm4sKMkZcRn49zG5>>B4)$TGSAv?U6b8l z2-G!Y`_3qZ%)~QKRbR8wE~*)p*q~l-IP^p9M4Ph#8vhBOy#Djg)DBkuO;I&VHfnaX zSqqD#^;W7US8NEc*z28SRE;-y{|dMmZ8+3GkM{%anU3|yXX?w+%dZ1#!$j~|-ID3pdSeuiO~d-Qh8NsHOMyKeTYmf4U@&Z+ zbr~rehFWm3F-lKn#eL#e`>MF#DRvW?Q@>kL8Mf(#*ugkC=(#^ZT#hDowT4|}jkir` z$~8BV8(h5FLI6C3XPFtWebRY!=VniC7_M-D!UbTBx=L9vmRq#b1}sdH8QLz z*{S4$q2A7q*(|fOtlI*DXY*NuWea@+XRKci(HM4-HIqilQPxv#G7MyJ_nYP?xJttzoOIO~{7t+MSjS8l4U2;NMRO-T$up%^x zo?&b2y7~vG4BN_jHVPANJw;|zqAodcdAzrijOesT$TuQy{9d$%U1vSRj0;pH`}Y7% z$qruFtXj7q^e0H256vlR!;Z3!x%lsP$xh|Ljj~~ph%)Q1atmk-JIXrb?r*(QO3oU0 z>!wqHpZ!H>4Li#^;NDE11k)hbFaEvI8wQ+YeZozU#^2K|ATUfg$@+x*x5vz|-?VF2b`!r1yNTb1-NbLhZsNCLH}TuBoA_9xvgEP)00DGTPE!Ct=GbNc03KjTL_t(| z+U=d&a_lItfUTg$?)QJ;J@E+%B#@9hsrB#pVyY&!bVOhqqpz3c?|SA+<%%l!Ef1Ec zyvr7rYszAZ$)}X?ISn7rSxPBy=amt0L&RAHGxB?^%mc3qs$utFb4K8HcPrQNe-49{ z0II;z*22nv>p3rf@$fjeWTHI#2K*N)(#e7J&vf=eD|6%-B7 zA9(F1ITrVARvhXicggN4KsrBMX&M9tOnxyc$hwB%z&G1V*(mNz8L&;ec9(dcjrX@c zJ?WZ)V>TNVh!+gw?W%wW(>1hq7)uGS0ZTpwr?c}4O1S;c*{X_?tp~q{gJ3QJT)w7j zu4w^F3W)ri0;b{qs@_W(ASPXYsKA}GbPniw<(%()9SZ~Y9{w5y*`R<%^sNBcbt||& z6StF^rvw`Lp#pD`YU8_+`?}&i%j0;xfX5U7q?8hgnG4f+&(Flwq;3=>rvhibc4N!! zKQ`79F?Bo$VoC`fQUK+k4s;ce8fB9@tiV}br>V2e`h0sAS8yC&$#=k- zf>NV=Qil~x9JMLNmb4K&beA$AdDAHIMiszy*axpar7dr@0;Dy{Cv{kXdp=%Mc zQ{;{puQv`P@jjs-=ah5W|AgAU@^_79GO1yCM1eP9`8Kv|NXka|@l1f%E8Z1wRKa(+ z$C8uIKP7c1KA|wD!wTF5mJ%}uYP{RFrSHQ34t7t^QwnlA|Fp*-$s;Mz+$Jofz@IT> z=EP_*Eqi9RGv17J35qD#{>-^3#d2QeG(4bSI$<4iTgEEhBqVG~ zL0PkV;u|^Dcm8W^7X3*Dv4pAh0UKmE-gwy9gcTGGsIAzS_&KMlMIo-heVfFwxeZ}~ z1yahG$wTS`3a%14bU^0|KLEg)8MXk06?k_ijOOTD8{b?ADWDGq8M1!J;Fy2dED8@O z@Yk5p+;Z)_d_ch^uPMl((_%5HNx>hF{SNa-ul>+4(CaYqX)aIgKp>@OVoy+ps<4*+2W z{*3*uzx$ikEt(PlOne55DEMJ>aev|ba5w$D6jl&1_Zte%XUkv^pU>34>+j!HP9^;_ zsE?<}DD(Eofu*R1^!aQ>xguHYq;K0H21q>oRbQ5tuBSP~tqVx@GvnjU*f>R5~_SpUy0 z|9r+8cb!<09$3Xj>3A!k504KzD&*-R)7-TM{G#ce!)!?Cj7mok6@t&_t1)J5{(Zg2 zV3kqI-!kX}XH>|bkB^X1h`V+yNd@Vc0IM|Qi|p^%2G&RIwC{bJ3Ay`vN5Lv)tUx#A zW2^u^mamYzul4=5kyTXA#~KHHtUm_&u)C`h5Uf4!7#p!(!c5$XpDnNsNXATIz|n}! zl2O2vFnqeeCftS915rS235}(kaw|R!`f$06{Q{e#PWUw7Xjz!0L(NRcvAd~TU{hcf zC$~ZceY}4L^xdG6)NZ> zPDat)wP8tsqK z>A7o&_af1Bu_lFlp?=Dg!54Ni3g=eHlkp)kN{`bq#**v1JHtjTUA4N|6T3}p+e zgQ&NG3kBD}*)3U6K@v&kf>z+R<+Jms?O?v! zihJ>1@0Qesr~>zlyvn(Y=^(}kxQ1|V@;S?}c?;bWmT*gj@{z=Z;eJ!wR89wdG%4(y zumX3&GLA-vaah{&mp!IMaUrZ=B4K%i>AQ2Qe#f&E39+HZDqO=&zU2eMuN#I`)t? zTG70MxkZ0W6(QEHS#>Od$;L&=+x{<*7Z_s#s2B$nQ%~V45e4&eGMlV5;2RurQMT=7 zM%-K{_O5YFRSn|+6a-U|bHWNHN(|3OBa5{j_y$JQ3aO)?l(~*^fWtRL+(bG{NWt8L zh0R(PU{(e$%K01w33MhvALD?9YtoQ&!V0`E-+4%#*tj*i;L=49Mn^zk(U|~UjKdBJ zp*`g+-mrqHb-!mV1H-Uz@J+gJlX}8&3>8QnjKc{ExtGCu0SYVd))?LilRwT^)|%Z0 zBS~hkFUK$rvIj{e=Y$owx5RX7xw58!Zww@vQJEooYi~gzaNd>0aKj25d(_8{17^V- z!E_wYsnT68;SEOdlVqqS?0c{PV27L&R^Zy#SEv&d(*fd5?k>?;lFY41z&JFZkRCZF ztiYEv*&4@mh#y4`8g-u}V_Y4+s{5|dgU1v&7qiBi5!11Qs2?ETFpR?t*d(mLyZUqL zgdfupCEpN?!yMQotiYWyYR!r1c!GRWVI2HmlduB+N6N4J@~)0y6b-p&&x1|E3Z|@0 zVLBcn-@tj#o(7wQ70j5Mx|cjjz6o^%C(HphiD6he#EALvs?$9~-Er4f2yAkC zZ9*%h=f?};)SdbHIOay6HX}_w%fyJ#czL)#50Qpyu89+DQt9X^5Fs6J4~Pas>3#wO z^9Y9JOjy&BZ(%;L@$!Rc;-DjU!c+{4V^XaGh9yhL2zYwDeB7V>09RV$nrPS>GloTg zAV_DjyyG>>H@Y}BQ(L+s*F*)u=m~2vEP2d)aE(`PK{TjS8au};iTM`6KX&&gGKT9M2FgPYicDO%NV{;%FUStJlTwUk4N)gl{a%kl7g6;&7ZZIJ7jB3?0-lz~`h2`Dqq)u836=CEgBwUk`vUya+an8))M})!>K0?p$5SKKu-0s z1xZ6mm=Dx(pnE{76w{F>A|3(%`15t*O?ba(O}P*-DnU>O+_g=X20EWPxkp$4ba5Dp z2NSk!n3K$nIMbEe-&Tr&I>>=o=%o8PIU#X|0^*^BUCsSB*`x(^2o#klsDsuv=;_w# zJ18DW*p2Ja_U$-DB{iiv1?pg>U2%e1ii^k@3W&#M+zZw zkGx0T53Ic@MM*G8a@h^)sL?%sa!*A3ff_@F8vzms<^fPgh3+wPf=I#w;^BA6oFL~e z*<{-&TWxs&)WJ&B$O)=BL-XR{jCC*w0I*RI%tN4#o85ypat|-?sCaZ4>thfI38v;w z1VA0-(ZEXXX*fdx@nDVhF$j#J@))Rt+;4iql-z?AS0x}G%$R~UIUjOVib@RB0SrW= z3Tv34pm=mzb}HvY<(^6de1wJnx zO4ta409p@r4AikV;SPmWOi)lfR$>%wB47~ud*lI7hf3}t!W~RdP&_gxBN&7bsKX-M z!2|`xBN@BVCVmV;2-LyKTNdtp1qzCX9$*>Q1b(VQqvib!BxLFnc)^;$e1-Z!9pUm0 ziHDC3%-IToI%4G=75}X(1nLNtcUU}n{SK%D;5WsmGnEb)`gG2IjvVpp7b8DRfecbn zvFFUIAcY4zR3=`jy3gF%V}2%!k|SIS(scx4ChlvbrUFkBco2#F-~kyV&PBP%5grBf z#EUcP+qherjPi{KF?p<#A8go)RG%@;1oUAdDX^{x9~Whwf>VvM1Lh)?p00qp#TT=NqZG>-7+=kV0*YIFAgHe=0P@)AGT4r6=@?Y=N!5U)(I?% z0tqp!2Cr97tS4H5HnOt=xZ!kodx(YcGA{=bB*e%?k*1ZAWDp`h5SQ0M&m;EDuS$LP z2qSB4+{{I>Oe;%ces(sQgQLk_Zrf%I2hqNP|KKKOOiwE_XhW7}ZP(*I^;U(2s-oi` zjIQJCwCa!W1o;704+ueOR5w9FVg)8TZk$%FtS8_k`s``!?|}il35zg7V0v18mx!7C zkVKzv%i|f@boPUds-oU4CK(~H+Gzx-vAWKK40h?&%n4~b`yn)`rWqkHJ*`|;rEn|p ze!`kV-{z545;h6Jaop&(EhWL~TDMJ0AcXdeJM)==BSerw+mLsI6oxS?tAQC3lC;S@ ztP(!0PO}nfLjoZ{d&6J>-zRSskV4aoivm@}m@pqCBt0~(z(anJ!==*ne767wXunS+ ziK-%0XN!UHK|+{(J2C9jiegQMM-m%7OWs)~&H5a#48B*Z+eP+UcBvwreJ!b%$DmHv>=(rrVgsu;*n zK1c|YS7x)AFX5NIL{x^2{BSjCuS&);>2*I(e$yd48lW4hO4D$uwFk{YLav$7C(x*2 zbF*IZ!`09KraL4J8KAToV08#OB~De52Mp8?-8M*wFf&$Z&9A4G8gw7?G5kQ^$AqvC z4LR}OKjs;0@bcIh=kpkav~M_oga8JnRTuMNBtLwM3mVQ-A&gp4H8Afz+dcd0YH)w> zoq>d05<`B<}qq>O}`jFC5I^?f{1tOn}j1XT@Gt2ox zqtqaSi)3H}8HivM(t1}qOiQ28v5uXh3Z+9F=A+;IoZ^_Nd>;SmDI6piaT)2%E6y?? zAcGe4A%P5PN|k`xz*O2hn_or8t6>TR(Lus)c0@_HCZ5{mgdDy*PogOEsyZ4|u?%GH z#G-->PGFB(V0(d*US6f07pvahHeuZDL%1|W17%h;RFvgD5+qNoR4*hQKuFCpuz@~q zas*splrv`v7zJ=kHMN5GKl9>lBEB5w?c$_?6K=Ts~MAL!%Yd~BrO z0;|`^8zqyDCVSfL!yyi76mf3cX4&3^=lmjmJuC1Uo#E$jFn~@nP&o+SRh_RQOB(m$ z;-Z`s20kSbGTb2x9GE4QQ&Y_CGuxmc7|7kK0m07lb9mddPBIWV2p37_Ldhs(6g)UG zTPiCKbGb8CrNDT^q(L4a19Y~f%iL(3w=yfI`8kYb&>uNyg6h z_}rIHH0laWHO0>vi=qlLfTKjlD4F9O=R^j!&r;eVbnL_@^*v0b;idoePN%n z5Vez^Q&hcP~~67>W>rwmqyWN?n{ z#z6*k!T_8Hr3xsdSKAD0LdjAIeT)yX`UdzpCGI}wLjoC8D4Fa{*wG!-A*z7*hyr!C zvst=gUd-@wZqX6vLjW1vKI4ESvvv1MdXSEisJsIdHx7qN$;SA=EJi)U&$(p>Bm)U# z05yDPb8zNQIwygnpv;WBvX7~8%R{w?ILFV~g~ucV1!Mpc zorGKOfdxhpFSpkyb6K=S^c<(X5-^JxnOT0$X?ei;(0gs6kCGXXQOpr5ZnKyhip&AQ zL7TLlpR>eB22cmi_5sr%VS|WIuQe=+Ff(d`O_FEx65;18Pk<2Q!5WZJx)B5WM7}H{ z`RA*8x@n#RK*tP(_&HI|hcZ}0@{S?m&Sx_^GcBJ+EM5ST{E#3Cj$!%wh@&MWfia-y$)9wift_?{UP z1e@TzV%&;}oCQ!av53bvhfiD$w_*bH@dQd{`8O_!Tj2zK{KJ=jI=xhGg%<{s0#2vE z5;{+kIaVU4U9rR74*H;`r(&+KKkgq^U?iCtsETjtF6;+iXMWeT^KqSD4MbL5EcnR%QhcGTbVYxjNY{?f-nH^i9n%<0Xle@g>(eZpkT>_TT zJh5uK13*X&^s!rRO&f7AuUF~kMUm>_4%&FbdbR8bV%G$JSZ6>VCFLtEPHG!XqouKb z45Lj+GS(ZG%2XMcjldt8pf&!E-c<2k6}Aa=Wtomz|L*=$?G8X40r*2}`t7@IfY8%> z|1|Lw#>QcJeGiB%T5tX|%ixk<#R4+`T{!hZC!-jGCL|f5Wl0{X^*uvmiGe;iJmOGb zW+^~v!W%YjYhCiQ+=^;m;U`EkW3PQvnn5qdqtz83x!x-G-mHtD0KFKHp_nua+H08@UcC!Q5278(Q z&_2Z-vdvOg3u8{OeGYB#FfZ|=WnGA++#h`_mc z02L%8EBWHmd(f-Va?6roBh|4heOwrWK6-8A-_p&4L00ospD~4ESp@g+m|-|I1j`an zf{&E847Hi&DVt$^07$l_n47!CdF~rJ*jcu@kIi{tlu0sKpmwzPD;Pj%%1Wfw$v9g{ zI(U;3U=Kl^QCS49E@F8XE90=n2P7Ga?9lNj>PTsszD|*-L;}6RUMQ04>7WOLxJe2y zDsTj$#=9gL^J1b56iu~qKr0cmDACC}_2nEgvJ3Iu#CbX%9&<18@+G zs6k8Tr)rPRCk94=8eCCznpZR!Ic5NPoJte%iJssDpp#&vvU3b1nSQoTr__<^a%fKD zYKJ{8yu+R|915O<2YvBe^q;I|ppQhsC;%B?0Km~nG6oV2l=E|}%+h$>rj3s(xFVs} zVXxC*pxXgbgFe7RMj4T0U_g?gz@cS9sK;pl9NH@-b^3X+Zm`EB7Kt}z)>4?Kgy%>y z95~eCTn50Q61du7FSeS8XfO?|W9ug@Ezgl;g216s?=|fgXRYR88VufTeW@j*u#i*2 zg!hr0C`l#=92zHV(;MugG?=}M2mlgkm}&M261hdoBjqB=#DGK0{$SHGx1f(04JI8< zt4x-XY$hBe$%KGI_dOQ-?fJB|zvT^0&|p}Z4Dyx9`Ihgo3X)_Zz#)Fufnj?-Z#9q5 zU`o27D|-M+Zdq)nq?;rY0S@tZ!alfS+xz-i<8_1vbN&=%?#zlrCo^41VkDUmaEN5A z+hD)l4feT(KTOeJuIG&Y&4xif_VSFAWFo+!I$>IyJ1DK@5gN?ZHez7Ge1ar12^^xk zpPerE1ahl+ga%V`W@o`*!c@N}%#dWJfkW(pKdT+~sr1)Zk`Wrrm2)QxrXHyolFT%4 zi0?pVy~Fpav|Mb3Pw$e-s5XO_G@h4zb9U&g;6tzHMNerNJEXLo!Mc zCJhTQlFT%4h?fc~9rk4ZUfdlI&|tb`6kHhDq#o%INoEo_L_I(ILe&m?wbeXAgMlvT z=z{)aWhDuaWM+Xwti-41)gE7crM%34l07+&N zIK=MoQyumZ8q8SsAi*eXlORcE8aQ+*nCq~Q&|p;A8wv%Gvj&n0l4K&lAwIXAP?QJ_ zMwKm4sPesH6tbTr69S`5UlAINB1=o8H-IscOdO0do3MErj3&#Uxcc$|uF5ZgQ6gT; zvS##7n5z;5qs(S3;I$}gNAEnqRe|5&WkkFdWPgFH^7B{3>wl3X^I+EgUq$?P{at_8 u-}QI>U4Pf#^>_VUf7jpjcl})-y8aKPx#Cs0gOMF0Q*5D*Y!03j(cT3T9rwINF0F=PKqdpd+dl$5QXpSHTX&BevmJH&#T z0000DbW%=J0RR90|NsC0|NsC0|1AVTtpETFnn^@KRCt{2or`v(I1E55aGJ8s|9|h| zCzdVAQeq~wr#@%4)9gjIz!30_G9Mqmu({BF9^JNeeT1fqa2>ke{85@B!gXkA^S!MX zrPp<|b=Z81P0^i9x7|&o_x}ZQBCzGHbA+xtP|^TRcQa|X|1PHj8*Vt0wmXqt+unE@ z0Q58@T0SW4=0t$1JD&EiXE#vM`;m^cVk92k>1}h$O!ljI3a~l|S@hk>beQH&rW5R3 z3-h#pe+jfQkv0ACKm2yC1aNBF|4Jot&>2qWc7T@w9nStOq`mBIl*xMhcXh{=5O+7A zSC_lvVi(vS?o8iqi%4(I(|#N~d%rQMG~4^53S}R}0C8+oZ!H~u|0uml^jgvPJJ583 z*J>OI9wg%NbxTt;Zg>EuDTw`bNff>7~4ppBoV2K_;u;XodC?!t_Sb z4)rF|dA@l1-X3mG?{I!8?b99h$3!u?{Pxwr@-gwf0o_|mZ>YBc?FxPWTtqre+>fwF zcbLqj*&grVqql|Zt*6sW4zNu7|G*OIkhw%}iM|(F$Rr+ra(kjThK41azwLbC=-VyP z=o}R2&zdAvQ5h|n8N$KGH}!}k*C9f$Eq0=*Aq0bt%AQ2?g5&)l1au6h$`7wLeH zN0R7I;a$Ey4K2O#^wFD0!}ota^nokrMY>%9aoPxI8)HlC< zhXBmrdU}V^ESBi+udf@RNzc;&Utb;<6H#n$>dg|nd1K(|^{c1HsX+b-{(ZRHej?qC z%tjAW*~0Tfer@g60j@)jQ$ekNc)kv8Or?J#x(-dHLPYSlM)VQA4lU=B9vwiMnAf4{ z2r)#yWc(DmZ~Jp~SRsLM$1N|&T#2Rvq=N{m9dR96Xy7c{Ux%gws4jTdqkmbuj&J+3 zb8+)y_4Gx9*1v=CH1&RGqovI$52UB}9ok-M1e)+6HkwQ%-5<08I_)&1A6lA#jda%} zC)Q~vfu^(*ODDzj3Qc8#TQ8|}bg)Lvy#-5?lFCL86G;K0(RyGJ#L(?MLjo0e?*Y?Q;h@7SQMTNuOkB}zS!sokcS5&tGIS zWI9VK+5~ZQC1=D;k`qfWR7#8WPMD5xFchCE`r~jji;7m6Al6bTy^{-b;P6hpl|*!e zqnnAkMM1~YePn_dCnomRHQ3?go%+}m9ZXQvEehI;oMjnZx)>+69KDU{VuC2T-${uE zY9t)ZKSC;dyHj+#=UNlg&_L6lCYsBm4bWziofbW~?vTJY_D(V#Efr;gcv|VSi0Kk6 z744mfspxyFJCkEaOGQd11ubU6I5A*8utn0WHtOD{zFSFUqX(&+YN=o@ZO8;DC&tkb zXHa|1r4l{| z6`G=UP7fR6K8MPg;3n42$*>{rv#22vv35>?4RP(L>Sp)|qo|!DVIbd#=b)~owxd(7tSs+t`YSx9)uy2;6&Qx{;jI( zYvKHR8Q^h&n1I%KC>|UYVc;Xz^)+yvGnx$3&@>Jgw4W^#z#%GQIx2<>rZMhmHyoZG zEvG71Bim=f*tud%k<9G{Se!6nCOiga&VZ(C*FFlaMwZKjNTk%x$(fYTNThRf7Me!E z*2r?HbYXI(9uOZbVHQ3q0m`Axha)%?_!?O<6KZlfD0O{fIBuYd8`18AIwb0V|6l}@ z3F&_SV@v0ViQu5W9pKS>_em=X1^DDY7{R8}9^6zr$K2GneL8e^I6|xaET9lS+Mqb& z6`oO7I_I?wngIi}-p?!waZZ%kZA&FDE7R3*G`z(}06YUkH16j`LLmvl+alG-3Zol1 zF%kw69--{9-s%zPv>Y7=weHEl0H1?Cok}-D4e&XroC*<$bz%ni98{Z&!igE+bI?&P z>6($k%!1EBrDk$s2KXFQ9-YOB8Q^nJRWms;1AGoD$FW`a^jV*R{@P|#V<%L?O_6gZ zH5OM{XIH|_k#i+&Oa2q{a|Ccn8+Uog?S$b}sO`;pyVek#jaXw>};M`efWm za?WJu>O^9ve4qNbGWm2OlAXglFR;GM?!~wQnVRmF_=q#Mb7*BM{S43hM7^&*E=ii@ zoXO7BT^0is&VSd<2Yp|ChSsji*$r{srmDe?(9r?YdMoLfsGVJDNtsG{|w z$!FvorN;70hZxIWx`|9jZQS|E9t!suMEXl{day;Q{wlU5)Tu6yW`;<(bGLe9BTof;MwRdH{vQ0C>F zAro#603+vC*ALIj>9k@vj@t=kNzRSG8BSy8xG&x8_nvQYl;gM`olq9!+;pqF7GOEh=FutFcDTp-w5~ zR%tCcZaC82oTcU5a$gijqzPn_bL18CxM>yRBIPEL={z0#(r$Fsiuq8^wUv7NujmPY zjoT=g?TH8#n(snLo{?DIu{IL<4^?HRPmBz`R;A!LTF^Hk3px98B#lg00P zA)L%GleXzcH=}g!09|?ZEa#T#^D|o&DTm_TVWDTonG8^ra$Li#t`nQ#4F)|G6yrv^ zL%ar=JsMfrN1{$71LO`36r9Y%@aZEIs4{MnJFGq08vi{tEy|Kf%HVpgHGE?+X=F#4 z)W)s5+;nW&fn6>Fir;&YbU2JwYHoAcO{(==SK}7lA^GX#nx(UrQI72ONia-aWsGm~ zn?QAqn+sp+>qhJ&q3DF>Q8pD$1U*>=h*z8aEM+Wc%|62P-!D6?W~@=i{BxpgCh@PY zWD+B3It{bmAD4cmp45!>p+@tN@Dni&#T5))En7|H!k;WbB{t5PeTZ${C}Y3KI(5!z z>6Ru2UAjER5nG)EV>wqJYV=Pw(t63MZo=>`q0Tpd{YWz#ST>{OddZ{ZQ1>Gs{|Ugb zPHU_PqH5>LDF*}Am115uK=Yw)&3%l5S5?DW-p<;lR~QYm(%gRPhw^Az)Rn{6PTDwl zoJRbMHIt2=r^lrOhUlh2k6gmxYXb#+avUA~;xG=>PcT+f^{G@>%MqGhCw3<4e3O?q z<)Z={xMSx?|15Slr-dCPU0(TAjH~tC(T(@t>!ikA+t0#5-~~1 zNu6Hg?l|%A`y<`6+FKMN7b**Sk_xl>m3lZJE)h?yNTRP>P0^T1dR9Fg8p6;osdCA4 zUxCi8hx6aQ9zTZbkLL^G0g!JK@7qqRhg)6#S{eF_e{^lt`nEIc;i?b5SjOH(seGFp z=#BMowq}q||GpmXtTwG4Zcd%n``e^Ct@pP{by{z4ld7BE-ze4cGc|U8}yT_<&8e8x~-XqasIH3T3PA=lQIbK4(dNV8`U%W9ZwD{QkghW0pOURdRmL=qi zH_H<8#oN59jVrWSwGQuZ(`p^w-`>0MdP*}dy#5b8XD&*28w4u=0000OO(r>3k;w$ZLltFdXiFMn;$beOQcI%)cxGUJiXWvM z#s(k9aEw@oE^G=@fUU{mcxm8W2m^>yJToaS0esxb!v^vEY`yZgY~5F6?AXVhG5nCE z0?!fNE|IFp;{ECrrz!%mzW*55l7hDHuu%5g&C16S=rcU$VdZcx2=9ym<(`p0`9GE^ zL@-S-xp3$9x$yB6?*Pwv7{KBeN=GBR3P<$wTef8j$;90)ojb*8an8dkviSLk7jjg* zs_w1xRba~;>@3{5t7nF%?i|C3#lNjiajKFJXLsu)p)_=VIo1-*5P;oAtUI*~@y2Sj-K-xbe_2+dP{Fh!W z=2r$%+RRps-wN|@hQ=J;3iEGY~(SJfEvFg=4++^TB*0geB=lKzjPOvCYnoi z4lwTm(+uz?`v9T??9Vxf&M-}1c7VH`AI3Kb;(@Bhjk3n^V5UR(_nD~2T1pcAboj#+pEGf-z{CT3D<5JqO5VO z5eL$8c>UKZTx)y~bhuF%0~rLv{}0CZ!}xv}-w)&aVSGQu@w?hAkG40y0gBJ#ySglo zwl_XJ$fp~P_Zlkf|n^Tps1%MeES|AIHF%lkC z(Xy2JhK`Tq$$nj05%ja#6l+*?5haFfpBvwtI=-h59*Q46eopIy&UI7mjEoYHv(&L(rFJJjbV|?vLZwsXOPG;^! zt-H>t+^y^QK9$;&zV5d7aPYhhFD!zcplCs(1g@yut?T%ny`w2E0pVvC5ypF76h~9J zThsC7SI2IUj)LY{oU0X&UXbZm7$3}SWmvv8-6JLh&tm$8N9TCs;VnRp{7;f$NRK#` zl#S_uS1T6Pf3i2;YwY;QE0NL?%8rgp@=tzLU+nFTH+tn!Q|W_N~3B#=EdL z-q`V-E+1JuRL?A{rTQhmdOnTH(N=w=a<{?wXt^%1Qhs)1vlA~06m2#>E>}Avg4vpA zv+?oeGMuf9eyj2Ik7rZZs&KY0+H8Dub_)PQTFtV-Xe;CE%c6i5by*&5X?%lN4kzqC zC6;B;md0lc+#qlz(&2re@_y$eI zABQcCkLbg=F3Vwi<1^WgD9eUmYvUUjvbcsU!Pdq%%Su@sH)aX8GCnd=q~m^V)`QgV zHXC0_A#tUh8q{RD22L(B@r}mkXk0XZ*>YT+^)*nb*cj2u_>gJ`CzV-G15*{F*@$m2 zzKb={tyQ~6lfA3R3SR?p0+vJ;cQn46m(pKKw=;2+iHhvk5MY;;wARJk%r~|aEsYex z4o}Vw71@x?A+2;VGQKM;MNf{Vu!yw^X4hUDh+(9?X5%~CJbM&kdv8hvvU_h!`NL{* zF}Sd;X-OmfYF*K8X9UZNP42-|#enkKY<#v9^<_~h1t3_qclE*`z|SweX5;(vbga_p zvh5$1y;yIa83etlHa=<+@1G@7=9N;i?9Vw~F2Rys*uOpAcowI#qOR;0l^|J(J2`ArVe4Hjw zoejfg<6~40Rc)5TX5;hd7O|+wa@flF`h_iOAopR}5NvIHBMC4`2(xSuw(a=(=yA-j zSeC)o9iOs>^`R+Cu&wcN!{S*E+Z$hVmcvdb<|y3IwP^Er(6DGznb*F}Yjh-P=oSQ8 zwt0%Wx0*2|Z0*`SVz6sidDv0macItrVXK@UX0+dOXzfGP`_(saUV;oL4$gMbHGS!8YATzcnI z*NVlFap`K~(}oO^sFg)^`oQvy2s#xjyD~M?^sY4IcGPxz8fVwAHZNNgkgUy35*rij zE2+0bgFJX12!?i3o3|tA6;>%ES*GiZZ)X;f^Hic1KC0w_wiLcWeSY7o#aNTbT`X2J z;nSVjs;Tf_+dM7}gKi5z(-uq}7&Td}=EB>8$z@7gNH+kqY;dtONt5B&r+7Kh0kJP= zRMERAbz4naRDzEj69uY8wYLQp?slb%PBm>ARBZYBTB8&_^;F{)$}T^6ZC(tqrUtEy zx=N_3N}|w0O#y^QV`W=bugzOTJEM*o5X*AOXlE+*C7uAyoZOCJD!evtq3jxRn!-53 z{R@STBZcpFjQk~!$GDykVJogA5b>qB}sZNdYojade8c*ZwNWmS{ z&D@tHGJy)?gSmXYR-%r`!tLmd&dYDxZI?i!!#lhb)mkGe4Fhf79C7(=6P?nQTCq&w z1A^9Vo;)gluvDP#jLNfiZ60O0Q1LaaJZsnH$-cBgRbM9c3$;tXzs(!O%08yPePe3Z zy3KRf*I-G7+Py)W*E~|ZX`9zP&21hNs!oT5s?#B%>U2nTx*SrS4!c)U9c8xTZdQ=$ zxMn2nW(`Tm1PZb3U`P)%0DVU9YD@W%IyQ$6R*-}g&S|BgyDi(JS z`zJokf>JokeHU+*$k=Pzfg`MzgtI00000NkvXXu0mjf9wW@= diff --git a/public/images/pokemon/back/6503.png b/public/images/pokemon/back/6503.png index 3953d5d6c66684f6f9c72769b3bbdf9094f1c46c..c88de28046ed1f18cd2ab8b4654f7a67c9a452d8 100644 GIT binary patch delta 1526 zcmV3m;n!05M-1aT5xzoQUS!>^wygzi^?q077vfFYaKyib6g+cvz9fFuTluj_vX9Q>L@ zBL1L?cLEs41%J_Cpw_(a0G+b}vRI^(zyylpri(G2U9tng8yi=ghdZZ%A`&=8vudJpWQQVI=Nsv=;{Pt!EdKKJ!Xts|flvEOv%QZ1ssb>Gi1`V~#0Yn}M5|pnh>g1d!e)!;z=A|!kavM1GVObmK$NM=fV4@iA^`dD z34cu^Dl_7N2nSWOTrZ#Fz)ai_4k6i2m=k*ufe;WU0Bp(O#>GWIi>zC3D7Z6l$Im2$ zCQhJ1%!rYau2wroz*i#PAGR?b|Cmt&GDgu^lI8k<#~5M~fs+x#v@P_${E- z1oU(lAKo`0jszkV%=bJin?$@bjN$q8u77~K$G~O>BTK?9*RtVEe8Tkkyjw3aQPu>= z9OUSQ#Qd#dAs@|#_a~Hrkl)EX2D|{*&^(fn3m}kaf>)dsF?1t8K32qPAX(f!hNVK; z$v6{OZ-JGUQU+R;Ct(iefrZcMcR(UDlZ_3YfH)lGBDVjMxOxJR#?0ha97b`WI)Cvl zinrr;z>L}9**J+>GXvRb(ci-qB_NO;-fn*k%r~qNd%iY}d|7eJq!zgE;G%3I-cAO- z&JI5XE@KK8rB&fH-2+}B+7-u$-k?4JCZYrR@;Klt);4v5;gO zTvlT41-!+`juH>59s$LGqb&`pa(@uWVIRns4VP$?4_S^4h^uu7L>w1+PC)IZtmI(^ zVtHcVKPPJ}5x)b3i`>&Vy=~AV2CmQ6pjM4MH^c(0d6=Ax3Q=#|EfK@Z!r2DGEOjd& zcU$s?!x#h;d9Gb_prVt-3Avw%2v-3nB1YT7v38SUy;2pPw?rI}Xc_nfIe(5X)Rl_~ zSn<#=M}fx@Ts#yRZCzBVL0keE44FaV4c;k>XW_ub3h3jog@^XpPdRYG8+@`^tHY=) zeitw!jCTCo@j(ab7UTqz+K|zefGW?B5$%&~@Sijcs2hBk##YKimSR1}V+|VjpoR#{ zJdJFrCbqM%kZIz{n1}#+3UBt@lQMA$gzU#B{uV(ZPC=#M5C>^-+PzgqlNfNG-ek~2 z%I+M=oaFbHH4#b-CFOe(QAtf1-O>r5Eqkgmx}`HfF3U1%@!!-bppeSx>hnG8B# ckN0~02R=qKsty6a(f|Me07*qoM6N<$f@5^O?*IS* delta 1263 zcmVlA9XVniB2FG#nkU(}HQ4PsZ-kw}?yRN?jO^WT z__ja_YgXD(utnTtvNP;N+nQODL1Iy>JS~S6l7lU2Ox|QLiXgJf;eoWXYRapZKuROH zy!qzt?xw9aVSgoCQyL?f#8M`=(XSK-WpG(PkhjqwiY}5Zci1Ah+`o+?>_m7rYnD0I z$KI)}x_SU1bo>koxfo@laeg2tJ!-n1ZQ^q{DWbT;Ly$ z1wcdCOn)UlXE177la-QHL01AK13nh2S6o^RQ*F8lrX;Ilf-N!k&^Zw_?}S)btdWBC z0*CEtny$qCO3bk#poWePWVA9h8fUtr_V=k8A>78?Vy5}ZYTRd6ox^CT+*5r?HALlsik6rvI6r{uV^tS2he;}jtPxQuuYsmcf=^}mNV`|@(*D(E^bN?I^pQOaYuGML-OHgvEVHlD;p=QnvY!>9F42JYB zPin8@zSVhP!(!%F()v=lPfks@u3%ASFf_{N(5=TUf*aD&hsX4wFVJ<^MJs9+Bq*4V z!`;BYcql-o57(fN@a5rR6B@Gtv7T&&et(wkK4K#6Vsj3&csHKOWE0LF4Ajp^8=b*XWgwSLGB{T+cg+){rjO& zrH+DsPB!0|n&YmxV`CyS6z0f4&Ir@6MiGC*7oa>xR%2h@@Nw0{Hx zeHA|7a#(=Az9bE$hK$1DAj-Qv(`;+#tM2%bpo(-c&hMv!8iIL8Anf*%nr*uA>~`=9 z15?a&AZfpb(p8YD8%kcG8<^t#tY1GJK@;hI9&}%zV*>ApfR6D3F#ms5Jp9(rq-&Ba z05E-O1=LWj7lz?o{>uR?AHBlNKxjttmpgf*<8^U9CNd$YCGc3riGus&sB$B+N6-vN znZy)HJFGd=2N-l;CCH@`0J+P{VXvQ86h&Unk7?K4L*+lHU3U*SvAj!mGP8mF>kY2B Zo|AT{+oSenY&F26A{~tyVy8r+H3v^OWQvm<}|NsC0|NsC0eRh4- z0003CNkl`vA%|WELRwZW{ic4c|zs zJb{tAEp~+0nt!lQRfE(Ev2i?u_>=KUY8M*ecloD@FyXP!x}Kd79LHr0Br=2+MGc>Z znOM{73Z$#nIMBm}(dUPtmmd1wc@xQg^RQuT4uF-+iT40ZK=an?Q4a01ga2X6r1M56 k_-@*`49hN_0RY&*2WNy4EdVOvH~;_u07*qoM6N<$f?1iiJpcdz delta 358 zcmV-s0h#`l1N8!s7=Hu<0002UX%_JS000|MOjJbx000mW5GG=PE@E>`qrYa^|8sM5 zzrVlu`1tt~0BisN00DGTPE!Ct=GbNc009U|L_t(|UX{_oYJ@Nl24EM#bHWB6z(UVk zv=1N|m)`5#OIKr`z~tJC&SQ6`Np|b8KjiX}f&7y~Qnr`kn12r6k6t3;r6>oqSzdpo z6Mx8Pqo*Oj5o|e#XW`iBQBFxX|CCmrvq%h}ZJtDOnR*_ZW*8q*h5hr{&4~A@FCrIc zL(DZQA_{zFkzT}6%*rr|R3XXcxQ1d`C}*EQ7YCu0L4>D5noF-)Xcq}dWXyZd!sqr! z0`1tAdxxb<+V3DoIrb8O{H=bY@1E7U~aMRB$k z1iGHD*MY?VXaQ(jCau^FD6N&TL;7U#xPItWlI%Ld4=Ck(k-R?OVE_OC07*qoM6N<$ Eg7KoHmjD0& diff --git a/public/images/pokemon/back/657.png b/public/images/pokemon/back/657.png index c7655a643b205dcde938f750f923104e34cf3b48..1e61b595e4988e59a1f1b6b1db3e66782d9a88c6 100644 GIT binary patch delta 678 zcmV;X0$Kf;1+oQ@7=H)@0000fyph`g0004VQb$4nuFf3k0000XP)t-s0000G5D)+? zSPM#e0BfcTR%$4gwL#4Fb8~aQzrXnS_=wdePXGV_3v^OWQvm<}|NsC0|NsC0eRh4- z0006gNkld!FEcT##@@V6etz8;^p6J|Av+%B}%jO zq~<={rAwW(RDZ1B(4d~$u;5AV{g%EHo2T$Zm%yoqKjtA5+Bo(7^_xm{(v(DsHcd5M zxm$%&9#c3FW3&RNR+)+I4e$r2lo>@?$M&>`++#53!s<1ebodUI7Vj(w{Em)2L}-!+d#!GQ>U9{m7I>>w zi!RkMXIBU5TB{fIW*PJ_cKu?kEjTPsGzrd0V@P+s$2DkfQ+{D`T-W7o$O5Hd)OGl@ zPP;Z~M(@Czr7f_pQS4Fc1b{vFPBD zr?#@?DLw<)Qz7l@6oS*W0sI4$8q6Fduve!;A!pO3QmdMLY!ZDEVR+u5IH9ZeIMmShFNQ?`Kj>KN3Uj2 zhZvr6737I?b$>%`wDw#OS?a~;%5yKKTKHZP<&KU$s%NjfW~Us0k1kQ)UoDYw5F*A0 zF4VeX;r3dqv6lLGCOePGmJq24MaY>@xz}&ZJ*RT30D%1xXOkDAx8T%^N8m%4 zpyC@cp6~Jdm~o5DySc|nbknti@nd`2 zE&G;zyyzIOZn$0T+pp}G(78ao5~NRj7L427=7@6{8`(JLJ`1A8M`rSCE(O%nW9E&L zX`0qPrMSedYvedfc`9ud7Z>@ibEVXJ`M|!BM=#<+x2sN-%hp95T}T1cc)Dp_u{Vj! zdXHOm$bSQOSZ6^SA)E55Nfyb#kKpPG;J_cV#eg&LzB!Q^dtU$B&2ds?Zo$5B>0{Ldeu&j$cY7oq(C0000iv^Ly4$~ z1&?1)#e(l&O3q~}N$%mNQUfXCHF1~=w>K18C{+rj6BQ4Poqk4AM{!Vvx=0xsr4=Qg zDTqX gL|Nq>_5Crb(FXEY5pD5AWB6v4xf^B4)>@5jTr-8NSP&?WGELb_NewG?>o zzkj?3ggnNxcMwMPd~zC|*J((SR|;?TEXhB}*=?Vwh?H2A3$p4+mY|UGN_`XMJV9N` zDNlXV^s{F7+CPqkALA_l-JZveqbV)68c8AK{*gl;ihqO9Nn)oPff^c8q4rN7WkX=- zGRfhxWkKy{q{j!IQ*g(&S?eiGgz)+A7ar7{;f*06Wr*1}rvU|vJ-IBG5mha|)jJC4 zP9q>wTT3(hn%nM$ zT0UXGn18$7yN2s;V+wn?l5=e|WcCCd2SAN#jWR}ttbrUtDJGyf@%3faVp8W`Q;iT! zd|qBGZRR~>jKTQP!M$hzDYcomis6i+1UJ|9tZW?bBvTcFpoMU)H9Js@l=MmGT122* z2knQA%_bHjUomnxhqck9bD^68_Ou<2A!J&I1AlixB@NB@)KD_p$ze!W{_b>khAL?X z2U6!qCY>yNTE4paf>JQI`c%uZlpNtU=V&EcVWodiHl0fq&`3s?H+D_d*-iHZ>8a(p zL^C#9aV(iU*PQgs0g_}- zKYtY!*B;U`xph!m(Wu0`LSI#gHLAWcRFlSDy4A&-nE#H7Luw)D1Vz5@GRFolpk6oZcMeC%Ufy!H5JjK1U;0R z#rByrhX&MZDIQ%-+-=wZ>k`EN+Dj#xF?pL=hc41BSHf>Xx+G#+M!;V|bBRyFye3zm zX_m0UQYhA(zNnDqor_6x&9_TV=Z+i{<4-l zyNcAlpq9TMf-J`c@@hEvsv*C1E=jdo!H3Vrc;#i}x=DTZy-)u%Xgl$1>B{~E^k1}p X-OW<-Hw&&d00000NkvXXu0mjf2;mZa delta 1034 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 diff --git a/public/images/pokemon/back/676-diamond.png b/public/images/pokemon/back/676-diamond.png index 9498e4e75beb7d8c9b839bcff0dbc9c83c882d7d..436d9b6dbde5b4f5bf174ed6a5d8875a5d13580d 100644 GIT binary patch delta 699 zcmV;s0!00|1=9tPB!2;OQb$4nuFf3k0000pP)t-s0000G5D+078AUWSH)3~LO-5v1 zRjNKKs5~+LJTci@H-Tvn@63;;9AzL% z&lClQ6AS?oloG)eoy(L+5K`*d^dP95klA-2P(1b-h<^~#%F?Ffor!BRbH8au7KPi5 zG7MPzsqeKTywF@lR_n;%=MAfaKdAz-(($tBgs`F|r!+W4$eM>eLJ3ES2yv=3j!^J$ z6&k46n2%74c1g(I&~hMWHAmtT;)TsG7$sv(H*$nR_mXUwJ_JnJ0HryxCE`GvAT%P@ z!J%M1hJR^5%bfxdYas9yE#PcqWC{pg z1H`AmM<7#$j0G}+6oC*j5J;Sj79-KPPDx)Nok+1;X}@L!_emd;Z%ll&c1*{n!#*L@ zMsPGCxrVvm@O+LvN7lD&J)P9rAt1UzIgq1205tE|$4g&&7$C2XE1L{|BQoOiv`4s~ hH@tKe4^6A<-9N>~KGrM>`b7W$002ovPDHLkV1fn&I!XWl delta 672 zcmV;R0$=^p1-J!}B!4haOjJcoX>qu`uMiLr@$&B3TQ}y4O@VG?sy-`OO-5v1RYf#3 zoS&2-8yPoZcc?ru{yZ@vn+4JU0004WQchC@fboN=rsKqA%tl( z!aUD|48Y701`^5yDJ+c{1ByiQs>Y4~Ks2?5^Uv$50_I#*)q=pVVvLboKaxX_9ERbX zQd)Y%Krkj~QaK^?AtVO$%i&K$h^(&}L^z{S0|kI-7#Z1N6PgWor-ZzmCu6-+0MBuN z_YX|BkXtXx8GrHKM?b%3|9ZilaaPWi1#1zZxXXkQseB+dJ`fYE>qYs3Jhe$dR``Ab zEhA5D@rj&{pk?I=S(33xWZyO>wyh08Ww{s=cvMm}BBWr*M55m*3rr^&4M}~?>XrSV9J+nm4WL!`qM=JC#sYcKt5aa-Ct%;M!0zM?66LAY13ZBQb4Cr}NAmSX9WawUi zJp9_<6n|{Ex<`DH@uzw4#YuxWNOwv^r1bz-qayiY!e@Z(Mx=2dV~LC)A`wCc63MIa z%}6%BmqeF{5)s`>{aO+16CF}tOnkK}mgCB0U$+>?2u5#B#ES{<=R9*_Z@bDD6C}iU zC`>4;wnY#P_VdI9zT00006P8}6SfUgF5*`T) z?dd{6)MTco+HeZOK}}!sH1&GH+d=_I;Z3E{%n3LNCxmz2)(!BAJaD>FeOW-S>}szI zVarFswtv!8PL`h)94!WgOwFY7RS9H)lbQIC;Tg%XIMrGffCPHL+1vw=d&h@L3VjIB zr1(%Mg}fNz4CHIw!QS}U8^D#gp+yDi5C}km>Mhg|I3KeDm;3-ND0P1J{Q2qA~m-%ExB>_VWfbB9)tL0VKHjDqu`ukrHk5D*aHRBWd|PgzYyfo^2+g_vYsRYf#3 zAsZQ-pOiOZcc?ru{yZ^N1V7;b0004WQchCAPfdz@D~v1?s@;WJxRETUE2nBGk;^JGQ($xaxvz0L=Lka zF>V~|2DTRQx4;^K5m*@s^|zy7XVbVQuriW6VT!l~rU(|S#Ij(AI0Y;UY}iTS2{`k> zZ-HeY{*l1dSQJo(!T-#a9L^p5`$`DuO@9J*3P)EX?gYH40rnoZ0s|zxE88jTxEY2BAsHQk zn_5l@XR3HK;Gqysq6_djm#-=o;DgYJAq9GQS@zwBPAJ4sZV?_5N`Z;-eUXs41``5J zn)H;y_$E|>zX&dcC>g6EgPDRX37|7!PK z5u}(_CVv^tk&=rC^Z*OI!KKmyl-6WsgtH5HP%R2_~3cjHoi4Fc>qD_QU7Dm!`bM>$r~Lp86^E4fRL*09%m)t6aM omHjKM4HHLldMuCTso`_~|3vy4d(^b07*qoM6N<$g0ze@2mk;8 diff --git a/public/images/pokemon/back/676-kabuki.png b/public/images/pokemon/back/676-kabuki.png index 2aa6fccce61c3171cb7a74999a928987401b3404..d602c60764346224836147ace4e9036a69dad2f7 100644 GIT binary patch delta 737 zcmV<70v`R@1^ES#B!2;OQb$4nuFf3k0000sP)t-s0001JXI%gP|MBwfk0BxSOFhsp zE)o(Fyuh!3;?Hl|6bZvamytw)Fx;0ZHAz!`YVT5I?Q zAYu%#p(SDI9|WZM!ZE!9oZ^GhT?AYM*7gcjpqu#L!q+po=>FxrGM2@E7L84rC4e_% zp?Iy<2B3=r0DnSTs5wQz^A~(~C0dc7OJh>T7zK_RKm2+AtgqK40TfFwmEZ5X0PDI| zYT#h`CwC1s7C?(o8v{QV0d9rrQY7JA0t@oO&3;P4MG4ln1&{$CA?i&~v@b+3YfXSK z1yTkSfS-FWFyPnWMnF{&coa4aqB;!Fu?Rc~yt!Kf6MuMmXH+;^D#31X5DzO4s}nH+ zUJ2G4QUcu`v=((CuR`$$DFVpFAs5iLZT9APNQ83qzI@nnRoQe0-W@O*ak?-21b=cI zLVi__2xQQNBF$Ze*qV1YAi8icUI>0JTLL&+wkTLxi*^ZDmjwTk0QrAV$P1Du?O!l; zL5L2a2!EOjk8YsPgrjSopnlF~f=iiaS5(sXtC-LA7{VOP!+?V*05~|r4}_V&a5p3f z5QU>_MA-K<4fD~p!%q8g?*aUw7y^<&2PO6Hx`Q~b2M!1Ta)+T)qb)?hP{bbk5V2pt zDCi{k4&)xwQv*uETtFgycPgtrh$16JA7)#?Fj|H@V>SwHT7TbUgGd==G1)ZQG=(^b zlo8V6_&c*t;7U?Py0=1ErdK#+s&RJ-ooP@$&8x5)#laE{`E0oS&3vXI!uv8dF0< zihX%mO-46jcRblsO#lD@0d!JMQvg8b*k%9#010qNS#tmY4#WTe4#WYKD-Ig~00Kx! zL_t(o!_Al5)~p~1fYU(J>3{#%-2&!e%B1FIb1}0P$_FTlEq}|MY$VHTNyaP5TShj2 z&uHwKu`JI00!RpFjQa(U5cmWE>jl9W1HS+W@eE+IR6^7z0oA_api=|vrRakII}j~l z2v8&bZ^F+j8I68BuNX0=V=*a8*D~PCJlPw!PXMO703b^w@s0qP4h9UuAX}c)CF&5- zfhXa?71#am?|%{jWJ{C!^ZQMJecuN$u(ABKTqI!v7$J;u;Bg_qEn&D7m2eJ$2{PfP zo+{xY1Z(F6kOTrj+!w)7T?hfA8%H49!2i$zVk80sQdQg#f*TMx3!9S|rU9k|5l#dy z?iqm*;WXzd;gA}F{gfnDD}!;o8R3dx6GK9v?m>GIXMY7@a^V5h9y^!DAr0vB`PiE` zKt(uD^W|VmtFq8O0W^qHztj=Z&2bRgR{2GM+3iRR8v1VAAwJXI4I%hb$1a4lmNNqQ ztAi;R+JIyPmiGifC(La z4{VSDffab)GEV@+@)-dbLeLXJA(%=?iohDw#1O<`O9+HaYE*pP97%K@$@*Z<2_fgu zdTg>VIQzb7lBgbKGnt77L6e01q4_Nf#bNI; nX{p$?Z+cXFyo=<4$1MK<&Dk0nBgDQo00000NkvXXu0mjf-qZ^6vlt|InAU8~^|S4|GyaQvm<}|NsC0|NsC0|NsC0 z<&B=E0006INkl`o4*_`E zzsOVhKJH+jw?zOoA6fc4KJDLp0tKE8 zwL3i^Sl+);`@0J$Am20a5TFB!`)7yK=Mpff&}ex84u3DmO@I{)3sgoMu)w1Nu|a`{ zZN*znU-V*lg7H>>zD&z!-W!u!UX7>YUCr*MUtWB;9Lv$)9a*XTo$wF-o(y{3LBiX0 z^k@C5>iu@3arXG^+G)JhDX*x?Raxx(a0s2&6~Kk&2_?iG3Qus+6Z0w*3<;m`!e^I| zuj6Cw)On04htEFpSR44&`{C{x zR+Dk7K=Rl)U3U4~>cY39vCqTi)h$1Nz)wC!!;OE5c#Z~Sm!0!T;Nq{<;b6k2RsVXMF0Q* delta 630 zcmV-+0*U>q1&;-gB!4PUOjJcoX>q*3vk(vv@$&95r@L0s*qon~OG`#CbBBt3d09h($0d!JMQvg8b*k%9#010qNS#tmY4#WTe4#WYKD-Ig~00I6< zL_t(Y$EB8yvVf0 zz}%XDgqvh~0jzM9@F8e;v$NSR3!dY~sCZ*~0>ixN@|fQ7(>osHynDxY7XZ!uaqsw! z0F(u=6M(h^f#&G_?+@hDv=5Xua3jI|n?K*L<_w&J^e-+(e8`}}V~nKX5NQb!Iyzs0 z#2XTd=9CU>SAV>;qEmcfJ1X$zk;Wa5CEH#AF*;rYr9Z^)1Yl_Y5>M%yw1a)#RskH- z=ii+6FPbynp7NqmCcr6Q1T32L$M`Bhf7o3g;p6oLVm=#Mw-gX;-oLZ@+X_(4?#f2f>tx>&e zR^i8{g>w~f+&tlxxI^U$u6k*w{lzfwK;YYrFbNB-fDFd(K{iNkP*^6(K zr_w+0L2n$)-_|~Lo)FO7Hjs<_%-_{d?w4|GyaQvm<}|NsC0|NsC0|NsC0 z<&B=E00073Nkli1Vragn~EM}Ln6xbPL)(hpuLum(u5M)&DQ1v1eh>=~eQ_6?t3GU+;QnM?BWaeRM% zA0Hpf`AghG%#r~8xkDGwE?3bIe4~2JT{lWL&Dp5C;ik_$v$uivUhn~y%wI>EVxULtt zAC`Zt%;(;VDuZA8tMCxD;W%L(>!H1wXpR)#AqZ`9L>? z)q@gmGk>Xj!I=)%!nF*}v)~hsTljh610BcQDt*TK$q9)N)9vCIp8tXKJ2ASem9uxp z>^=zd# z@C=3GnZE`@=Na>$8xriwndW7#{K|kX$ z#$644u*Cv!0cFPwr(a`%%iQczWw*!ISnQOG-5B1CHOOH(RC_&MBeKa%DE0000< KMNUMnLSTZwu53^M delta 716 zcmV;-0yF*a1>^;gB!4PUOjJcoX>qw*gSfn}5)u;l`S;L$sb5)9hdNuFpOjfmMuBc* zH)40FJTd+}F-*@eZ2$lO0d!JMQvg8b*k%9#010qNS#tmY4#WTe4#WYKD-Ig~00L7< zL_t(Y$Gw(|j^iKU zz=b1LH#c4~uzvzbK(y}8@I3=Dw9+-mt#kH`??2e$CeS07;N{~e-{tuF!UEn75eowP zbA`^(D%YVQ_(Jv?yEaO-nS-URGd$h!ZCk{J=Ta%3;>!EH9P%%tz)K~D6IB~0AK|Dj z^cMRZzvz?yXZZA_>D6J=YL-3$6iJRPZw>=p%YpSpwH@( ze;d(~V~0~;&Hcqcq#QT}8&-9MyTHaW9*;xM<@#O|10H>@XFLvz-*;woLcX#`h=soUnROwrw`*-f*T}6}XmR z-*bDx+kXzw zD{po0bZKU|IZt#gmKk$t>Zsjp9QnLG-QP5mUPX8JH($70JjQsRhJCU50{Q@D#SEt( yeW8!J*`>;EkMF)%DHprgZ7Aq#5JTA4DSrW1_81b}74wz=0000te$o2!(fC;#Sn|{oi(gmw!Z?cxm}*0Bk8fB56bXw8vFE;;MqoiOrQ!7%P6Ly8uUcC1r&dlAap7@5`WOX;GBS#QXfFCWiSm$1hhv< zhY3K=0amL&o`5|M0ISg56O>?_d8VobQsD9t9-+TzfQ(d=dA1g$)U_iGHWj4y8?FG# zm;#vaLP&spxGI_C-y#%1`#ze^@GQc4p0#fn0$$p1goFebt_L-s8m;&gAcXOLQqOZ+ z0qku*9De}v(bTfb&F6?~eU-;7!29CCG#)E<)!(B4*t-DN0V*1n0H6wxk5&Lw?k5L1 zvik3w*im6(Q}btl*Ivy7gJ!D83xX@o2XD)nM;vL`YE1h zD4LG?aRx|Fmf|h(5GSS(Xxs~;gs%MvxE%a<{!=<01rSrn0J>N{?g1y!E5KmY$Kij( zs{s2NAjXsFl#XZsC>uf>FKs_GZb&HM>Ugqe8Z)~j&&TWJu@EoYKQ|CP()(CJ%m4rY M07*qoM6N<$g2w4ly#N3J delta 701 zcmV;u0z&=r1=R(RB!4YXOjJcoX>q*3vn5rW5D*aY^6nvj#GId$BsyP!#|dy7La@UG5Pb>Oj;8=e#jG`w0){165iWfL?nziwAl#HN z0ZhPs4V{Q!!*~_Y#w3SuLxQ4W6ybq}xf-7Uo~K~OpP@#C@cDxr9$#iYD0Gif3n7Hr z&!74AejgH8o`3ll;f;YBi?{Z*m)LOzu+jKe1*Z5zY>hZ`FMu6EC18q#1UPdq{=0vh z0uajx>c5=70W76Jbqetjuma3-PS8s!*9(At!xex)`)|;OvcQS804sqiKq{k@M$}-r z11SC?fx*-u0MjWTjmT>N{gy#DAQP}Z$~tra)*Rqt^?#=mi02m|D)^~IV9Rr^S|A55 zkFXfu=)$bk#Pi;amU`?+zS+lP`!z>^$mjyF`5|OLXs$|}{r89npwL_~;6wzs>*U*S z;Ndo$ASMHNtdCct6;A<5XzwTWJogpAqhqKX0oJ3gWmlTdH?DV89=!nPiigl-toTuX zhXN4q0)HF_MA0w=09AnXXaqpzes<6!AOD>lJ1RIeHMa%0*sEn=P)`*(MM%XtJ+l900000NkvXXu0mjf7DPDc diff --git a/public/images/pokemon/back/676-star.png b/public/images/pokemon/back/676-star.png index 9b0824883810c9744021ec2e569cd9cc9521a274..5b188f33498cf9c298150ae38bb66057bae0eb5c 100644 GIT binary patch delta 737 zcmV<70v`S41^ES#B!2;OQb$4nuFf3k0000pP)t-s0000G5D+078AUWSI#75wVs}|h zMr2-9s5~+LJTZZ8WIm3+eZuIRpOm<~ukrHk|Ns9;MLm)L000qmQchC<|NsC0|NsC0 z|NsC0|NsC05EVe700074NkliV~tcH*O;|h3y&Aa>&SIVLlNSHi_GbKn5xj!lVIPA3Rt- zaGTgZ;WJAN!WLvIPm(CaOf3dN7nn<8&4UlA@>MEnjkxa7sg!A(E#2V{5Zd+ zp%MCYe{(|q0)I36;sr1m{Q3O{ukQ@v?lBDO3J?JN-|wIQ`T1tx+9TuU+#p8pJjY2E z>)IouK}2+?fD()phHDW<;drBBt;TMtA+CmXF#c_a7wUIq7k%)OJ9m};>bYE1b?83Py-|~K-eN%o4!FKL5HCJ z5=ufuFwF}UBM!&tfS^NI3CU?uAul%WSNwF6|ou0}OX z0vUQ7z1QkVH4)q1H8d?3cSc+^jXD_v0j>~!Pw0lRbWU25EF2m(qJdX~ed>P>3=c$5)z+mFr_dD1_5D zG`2n7BWOOdyjDW~VkV%V;0+C{2y`ZC406v@p%He04DNVXl8{z7O>}2c(&Dw95;7qd zK{Jg93>%SK9Mp-WWNLXkp%R*uwQbgE)J6;A3tBVLr%{NjTd1E1HUh>MMxu6WIGUP) zXbnF>E2p{t?+Mv5EFCK*y*r2K3O9)kUT%r9pCf9Fdb`)f;HTmt_A5X3zt TqNigx00000NkvXXu0mjf%FRQt delta 717 zcmV;;0y6#i1?2^hB!4haOjJcoX>qu`uMiLrSxrVhj=wrkczwd?@$&A0Ze(O$RYf#3 zAsZQ-pOiOZcc?ru{yZ^nb2tP50004WQchC;5M;rahoLuVTrPo zCqWcqCKm&t8_X#Ids)V3goJQF?h%AEK`Mhc1|~BR8$kv?&hKe#gg)IbPRKt1rj7^< z27iA4!Rs@F_GZ2|yE}2FS<&VY`$z{enh<4u3)YBb0!MV46271RRdh2|N7C3EcxKVo4pH2GHH8hDjhpkE3&%J;^3wt6f9W zO5tFHUBjr0F%Xan;f{nBjHPqZmSo}7un}zt;X1?CzI(zIfeVz!GEK;e_Wt|9>^g+l z`%BFnM1LBII89U|l>&_*jo5Y<3Q<;*_)3#^<@%Tq3Xyb%-ffTf2wIP9ua%Jhm+8CTyVcXSw@<*DoVeHe!|rMj|7)zpH2t1Lk2aS zUS25^K0n)Pl*_2E$2>9f{hcp$?5{1E_zL_70rwpKZbeS100000NkvXXu0mjf`foVV diff --git a/public/images/pokemon/back/682.png b/public/images/pokemon/back/682.png index a801a3be1d4b98d46ffe59a2f2619639153fa1a3..60f869b2f2c93fa6f5564d1aff286a6437738b92 100644 GIT binary patch delta 359 zcmaFI^o?nPL_G&H0|Ub+hYN;4im^Dz-HBn{IhmJ0j$(jMh%1m55D>_=O!D>ht@n*A zE-s#F+i<3!ec7^Q|7UJ~`t&Kg)*~;VBJPqPzhH*{a8O%Tdle}B#?!?y#G<$Na-0R26VDG%+*xn?I%MB+)s#y+HYa|o z^xKwj?&j}E*6(e(@_m+1Pu2JRjM!^+Ybn!_kZ%%3Vq7B6Q=9xMm!8UcmgK#Z`IT3{ zal*Aajb+#FxqS7!Y}@knZ#UPmgaDJuw-0tUi6tAl~zCPiow&3qlR~2K||0~VEEWdT^n`&Kit?>RCx3j(gea_(N>gTe~DWM4f DnI@&1 delta 351 zcmV-l0igc&0`3Bk7=Hu<0000tustvU001FSOjJbx000mW5KT=@StLhuKTLCTbD2GQ zrlzLMaEImP<^P$pIc(W700001bW%=J06^y0W&i*H`$FH6_ z$XiKuHWpefF<48Pe`>YTJ)Z-3e0KL&^^d;!k*y|9~Q%Y^^{002ovPDHLkV1jBno*DoE diff --git a/public/images/pokemon/back/683.png b/public/images/pokemon/back/683.png index 2183bc34796c3d86bf9d1d89abc9bfa75f2d891e..38247067a2551c5a124bb4c40c00bbba10ca8dd2 100644 GIT binary patch delta 575 zcmV-F0>J&L1k41G7=H)@0002H#&fp-0004VQb$4nuFf3k0000RP)t-s0000G5D;rQ zVn9GZe@$7LJ%GPopUiNF|CzJZDsZ^~000SeQchC<|NsC0|NsC0Hv*f~0005XNkl3N%%shCR(0j-UE|FB&@$?vdxDihoqDcnPlS`88l-+c0 zaOD4zaZmOljUDMixeGYZcyn8jMQ&OF;9A!cjNcVdu@jpni&22&8Nf!b!(qsAR<|ao z->Vmh#p(;lz<)6L;06szKF>gI1o|BJf{g;TMzCpVEr%>5jleW$Ct)cU7Xt@b17Mk;an*munt%<@w^Q(dNZbZ%)}HARTQ(diU!J_krvIhIF*G2 zmt(ADEpxNG?C3~YYZ`qp!gmtC<)W? zkcnQo-MyuHoY}0}lLI_T^+nbj$GgX1TGL|DCkcANr%HQUAA*I4CkQckRj!{ql}%0k zJCIAuT{wHl9?8ZX@4!Po!BRyo?C|5ak}VwI8#u`0D>)ACGdbr7$v<=QA&?Oiye|L% N002ovPDHLkV1f$z1GxYI delta 540 zcmV+%0^|M61gQj&7=Hu<0001fHlDTs000|MOjJbx000mW5I{gcYdKYaO<9>ea?Dbh z%y5VQnX_f@`T76=00DGTPE!Ct=GbNc00F#7L_t(|UVYHPYU3~v2H+9d2k>O0Xs^u^ zBp5F}rV#L6jhTIcP~QcD@ikD0AA3i2gGSOe|4G*8UlIe7O@9k1oAwA*jfOr|)}_+)PAy&AmZna0 zEHtK@rs=&U`LouM1cgbGD_EjjqGj#WZnp2MFeb#;1CUhcYE#ix7w z3g1%I)z$g-Ouc$koijYsk3zj;j}N?;x_#m8!L2yYN`L!R{o$d!+#nl<(Drb6;jngn zQn%_MDqkY2IU3d)`p9}zebSzNJ}R?|w{7FSjy*cju;{YS-yG&%l@ULufw-cqZwM(y z+A57{Kt*~F2~veTh~U23J-Y^~IP2I2_Ut{>F?R3<8L>%K&4UNyX;7e*q=eKwQS+Sw eLZNlA&=r4`s~-4OUSDAV0000@bouE^00008bW%=J0RR90|NsC0)yh;d0002iNklHq)n0ZH>lHFNe$WorPfl=h(JusjoDre|lwf`1${IjUz( z5rX1qRsDCMj!e<;M(^rEy*jc|NLM;((UBmxenAinWn~f?B1o=seo!~c5;91)QYI$} z*LQ2o5}3;19X`1O82aJCR5z6{CA-O53-3NQ!vSdk8u1ZV1>(y-T|Oh99madu%%AxI X(~u0D8-2aN00000NkvXXu0mjfCY+7! delta 310 zcmV-60m=T<0>uK57=Hu<0000JE`_TA000$GOjJbx000mW5P(@@%$cUlt*!se+5htL z`<`Vt00001bW%=J06^y0W&i*H-bqA3RCr#E&tGc9AP~S|^#n0)`z&JnzUv8A1`n`c z53rcI{}DP9H7b4S5AuhPj7-Fpa#pMFK-20-hpDO73sLG|v z`^dI`)F>VK)d_n!+e&zK3>sBZlaxxI4aQ~?r(&md(9zs_yvlZ^$aF(YGkp*xEGGa- zIY~k)iKGC~#q^RM01^vlg&~5exCs-ohq+D25FURixRr!qbJy^b|B#Ftb8LF0Gp%>W z;CZgqHjBJf%P;7i>8Z`2aKDk55bm9JdZz=!L{jUG@BH{@zf(eeT_&PY;s5{u07*qo IM6N<$g51@O_y7O^ diff --git a/public/images/pokemon/back/685.png b/public/images/pokemon/back/685.png index b1a186941936cfcb0f2c8cdc8f0c23b8c244f298..eab453253ccfd09d0706327307700fb63a13799b 100644 GIT binary patch delta 472 zcmV;}0Vn>&1M&lqB!2;OQb$4nuFf3k0000dP)t-s0001hS!2wZrvJ>@W*RM~DM{ry zWdDq*|MK$8t*v`kVEFj>5D*Y$E7wB+000eiQchC<|NsC0|NsC0|NsC0Ed)WW0004C zNklv*1;#m?%b02)UiJ+B?NtJL{1Ynoa!BU zLPHYO6m@&4%J-Vgk!2>eGYKO%I4E+H66E!D$2(1v|7zFAYt(G7P;L5mW`d~7BBt9= zys?-21EWy7u77UVMi8}cPyUc*COm;y_9d4X(}sGxTKyRo*b{8prwa7`x->EgAcLzz#oWtjNH91^l(rML zt%;z%286QXyH=VEl89*voJBgbXM=H5P)>Ql$XPb;#ZhQPbV$V)W;}^ZeCY;d?ltclH}_QAw8)KRckJkp5(Tw<=F#>QZGn(?*?U#?{>gj1OE@usvYf}mOrfk O0000d`1t>fssGH` z|MK#J{X8@P0004WQchC zlSoB8nO@i@2HIGGw{OIGm9`M@0{{jHJ V7|;a}$Z`Mx002ovPDHLkV1nXD%4+}s diff --git a/public/images/pokemon/back/688.png b/public/images/pokemon/back/688.png index 33602c624a7eda12bf60cd4de52bb39a6e62751c..bb22ceed75e0eb09e4b5a78047ada56813de4eb0 100644 GIT binary patch literal 755 zcmVPx#Fi=cXMF0Q*5D*af`1rrSzx@CI(9qC;fPji^MQczyH!dgdiB-2{KfvJVh``8L zkgzydV5}ilBme*a5Oh*bQvm<}|NsC0|NsC0|NsC0|G-d-LjV8*RY^oaR7i=n)Qgg< zAPfLdvlf&h^8bIkd4b`f-Ok+0Y+Dv`AOzcGsm=T4+vZiI&i6oHcGVpbr3e8udO>r!ksEsSws2bd4ATf)M$$DcE2f8SgPR>>-9t zUrVtmLGu>gkB>tfxMAexPHS7BG({Chchmnw3 zS0aOv;tUn#x%Jr$Nmnz;ZGH)@X%P=UnsKr$bz@56?_AnL$~JEbJr8M#{^5F#rKtuW zr<9M{PI0*RodHOxA&7FOp*(p$*s#F)qivLH%JUKcgERH!$g#e&*YKtVrq~WR7#&aBKuPqza41mJ{9MN=r+kNdmZN(kQ_f3LP6J~AhoVL z76bxvHHX|ICz`d=r(~VYKBJKbLXU|}4%j4TO)gXy l)d*bywB3NZTZy=h{RPAWMO>*_@8SRe002ovPDHLkV1fjiT_XSh literal 549 zcmV+=0^0qFP)#`i0K9*NVCVe< zWP^e|eh~ugg(yrkh?ze?(I6QlOfb?bOo2oXCWK;!Sh=A4IVkc0xr{T(H;Bd54ppF- z&A6ff4bQRWfKnr*uG%xt8sM0i6JtsVF#+P~YWY3K8MNMnDY%b%qB8%FU*5LEV6Xs0_y%mkA-GmZOOlI;oLRmO7wXipHz_E;S2P nQj<&w04+cO6W>;C^&0;H^K%)8@&T@C00000NkvXXu0mjf+raBN diff --git a/public/images/pokemon/back/894.png b/public/images/pokemon/back/894.png index 337cba1cc71496d17a6820e9c8ff79490beb3eff..b4cc4974ce2d172db8e8b4a36bf2ad86361106fd 100644 GIT binary patch delta 1041 zcmV+s1n&Fd2bu_w7=H)@0002+ubS}y0004VQb$4nuFf3k0000XP)t-s0000G5D})s3;@sqHe~$&2M@o1B!nb=NRt-pYJa!7OAn4QkoNVu9{$F) zx5MKPd5=HT3y$$uJmEjn8OQi--jU~hRQ=1mi@w-`3txTz`ACjL!}+!P{u>SIa1~K~ zu9Xz+i@N!IH~!-lw$r=tpRTYOj{ei-J53!w-5XBye;EI|zV6?z>)ld6>6mx6OyBKP zGd-w&bFuoWPk-Rk0id;B{q%Af0!LwEzfq9bjRX?cgIw2pL_QW72EJ-zT@rkAw@%meV{^!lEj z4tUiw#+-9G1Iq|lUgcZ-TqhCL&k}d^*F+B~1jt2YK7T78@9>AEA$`TmJ>23kx|yCt zHy)`zS9IVgmzVku`LY8LpCoydnsff~ymPqIBIObe_#k=$tfi*`c!uMNFFIXM%`xJg zC6B^$WG)W-bDb}yY#JXlhCE6>n$xMSw~Cg%6oMldFM6F-)}{YvdWXjhj;6N5&3EiO zkaBBNDt|xGL9*aWGnP%nIp@-bcTWCZF1K0jI`dcuo|{%l-lM3@gxNi~?s{t)nNxk+ zfvsgx-1L&CPAc8Svbg>&rb`n~_*KdEevRkc$zS8F*NpVlnAeSzqK=}vmZS{e-10sw$&fBu^e(P2@5XX(#__*HXp&l4{Q&wu0GH?9}xL>ez z@7*fj=wKVmHgz4L>9Vbl0$OX1blJT|dg($h+oXd7yZZKY*6S7D7UspD8NHx%568Ip z`_e$R^Kq2AqmFTm;~an0GXnMWrlpp1n}4!V*-<{U(=cbBlk}{r$pctT+TtJb4zGM8 zX|*ZIi$%%jv1@vn)Y6+&p$oOiGO_h=ILNv2UPn2#W!1{_Wt^jL>HHu{k2RNd{bK*T zEUNRad|j8ggj<>6CVnq|tG`Y<<)7BK4-Zc~@x&8PJn_VT8-D@MkUK9mZNJ_C015yA LNkvXXu0mjf#pxcr delta 984 zcmV;}11J2N2;v8j7=Hu<0000rUw7~T001FSOjJbx000mW5H2}qH&c~Pe93)ODvqq( zyo)c_tqtYw8vgpng;ECR00001bW%=J06^y0W&i*KZ%IT!RCr$P);(|IMi2(zRRDr1 zwI>8t8A~uO?U_1UZ6KGLXJ--Kzt9!NGOBC?gl5^LAgtXkX@71tzcMov%@0vL9f73t z6oLUg!}lE-5F}1cAjVA+kKzH0^9dB=9zV_}0QP$eO=6*T2%AU@}tg&kxfIqTb#o&C?vyFSUp7@t5q&Szp&eTe@nAH*Yl5%=q7 zX1LGiqVKQBtAD|OUY*5za~l+c0r8Q4iW2+#)u2y`xa*f6q4@3Nu(w4#Kk|30WY7l+ zI{s<(-rT7y7K4)<`%J;D7~uib>gR9xtnFtJ`R%uS@YMBJTL8Tl0$|9$>-yZ_ey3B! zhtmtUUH>-qwBT^i|IqQv#m0Gud-A)}{>SCK?XTbN(SIOi;Qn-gnRR?bo&vzQ6F$^B zwX;^CyXz>TLOId`?x5!ZtotWw0-nf!FlZ3bVU|a{zhokiF^o)FFEFRYq@^mkTnAE|Bkao&vf) zq)>!>D}N-Za(`D!DzNCUR^AtE4DAOW6jaxa>b9eHnFe8}g%JYE4P_V8z12ORk{N6h^pKLC(F zL4P@a)!rMVG5d#?_UQAkRk)P;OUWOnwcmiTjSqA3xUK76uz!@qn+0!N+XJ+Ga4)62 zAl_MUxW~$)haBsVPX%8%gH&h1p?ABgJ{PL}Ts?|OIu-q|gPaR#jlfg;31niDsrbnI z>VPn%GFt2QPnvk%{{hN{@VTspj9dQGR8gwOULh*&*o#p2ezJ-=^R5R=h3eL4y-30O zlU|UQqVKmlC4YLReXrLdd=_J7v={n+_TeCSo!5Dt*ZCJKQjiv(3;AOJ0000 z+Z4t@0000KbW%=J0RR90|NsC0|NsC0|NsC0|NsC0y5VD~0Dk}iQAtEWR9J=W)!B0D zFboFZNRIId#gLZwf7fd9q9i6boV!jm(-!FX%WrvM82T%Y>2Hh&Ms1XNRAipVPl-5; z^BiFq3F%WD*Cq(e%#bBo4|AbfNRdWziYUt5r6{wI#yLs~K~k8vZH7xJg)~Dc5afM> zjB{bfQ38G)Gk?Q* zV6Yp;7bOJfYBA*gqA!F8s7y1?hR$IEc%KMDyouI`Jl-HKUHecjFQCp0 zmdSky!VCqH=Fx>DgFrv2_k;Slo|Dgv4gs0W^pF3Mhi$LX8YVO7YZ~bRIbYK>6{l5| zfqaW527jFHK*Hb)V4}U*!9cn)kT)R^;~=C>#`}yI*kg*KjL%Fco0`uB_oIW+W@{K> zZp45&U$i)~u)9n-Vj4!1WJNY9ty%CpUvyX$?vsX*18Xj^=kp<(eV-}Y+DpSZd_5tw z5gyN{KzrZ1Sf4@r6oWGAfSwV_^myH0uH`dO=4>IShYx`Mpq{pUXBAFv&;fz>qdcbE z&_@_Ouy|+Yj{07aLyDeQsJn^Ro*HxzNz{U&IbE-aA5eNh7cyM$TpvX;q`&`2{g;!% leKf7J&N}O?v(EYp^$StqDt+G`4RQbg002ovPDHLkV1m3(YgqsQ delta 667 zcmV;M0%ZOF1*Zj&7=Hu<0001k0ROiD001OVOjJbx000jU4=5xwGCfK-z1l!OPfKBI zjUiF2rkU3`b==&;=HlVQ@9pXU0004WQchC1;wOX^q5@PFmRK@CgLwI%#3wLji+Ps%sKbrZ_NLrhoOzWoEo~VoT>XjXw|u z`{!@}jKpjn*ZAzj&5UdDIKJN!y9Yl!jD9@@N@Zc8_s@QK^?NxrMcXJg<1qTI_rJuP zXWP%*GG%rp@9l*>T@acde9S(-cQL zdcVW({t>Zq&VMR4?J*k^;S_ZlvZrUEvO%zu|eh2#ZmAj8`!`%x0g0aPZUL?NMo6suq?8T=*5qaUuuAz@iaY=h|y^%QNco_>C} z{BB*C3Qdg$avWmu1aD?)B$}1!#$<_yS-eDV%S%HwqI8x_r+Kmx@LUMA)eJ129U;0UdmH$2{W(4R6vM^j=x5k!1dsnJa46O4AP z`d9$~NweAQGI2AIemfj~i`$6+!eakF_uO;O9~6p47GO@Wu6Y0e002ovPDHLkV1h8> BF+2bO diff --git a/public/images/pokemon/back/female/198.png b/public/images/pokemon/back/female/198.png index 4f3f5d5c1a4e3843edd9ffca9f93dfdb5ca23b36..01489a05fb0a81052b81e1fa95501947a7047a6a 100644 GIT binary patch literal 2634 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 literal 2457 zcmV;K31;?*P)4TDlnf70+`-4K(HhCVN9{UHG=DN-SgXAK)v#40@fU zZ2;ytaebtHyTmj)soLe7wBN;a5e6DgddTK;G@|I#CWG54_Al5Ppe?!(18v#ECZ-Tc zrKcq6v~Iz54L|`ijG5D@ZU@trx~NHto(GApL5yx?!P^+poNVuIT6bZST8B9w7b!FX zq{fJJ0|N%5%n~pGH;R_Kr0WZpsJ`Os7~8jYOTfezwJu=|8_70`M`{adKup45#6Zt| zB7MYQ9Ye+%#F!EfZ}?)8+`yDm>o&R@7%?f##>W_vR^3!m2%oXIW){_}uaiQIe-PDa zRuhxU6^!U6Of4IZWUN_|vj~!r4r;9Nm=2@b*Ys*{O|+H_mY52VLUrKC82uDsprJX; zhQ$;!%0GVcm|1j=emW(v7I4(|Yhg$kes(og6yZok3DBQl`5+ilhQVQqIKok#81((L z>az5B|4(|m9zBN5qhvAOwGtZD**0}qzIQj1Cqf5;vggNec?2(+j=tV~goE`4&{9E5 zsu%E!=|gzI6G5pdyj_VSC!)4w9S!$v{iQq!2Jn2l*=I-CsmXX^Z%EN`9?!WaKR?bf zMH)NmE&=KiLEXzo@Evq$y-;c=Z>{Ph znf)I0HFJ}5%!IFJ5`eE@s9ThU`RlR=iy=Nkbe0fl(ecQr0{GR!>fnbtV?IOl#{}Cg z2T3UXagMRiX&p@fF)@fR0J$vDXt_lH1~p<AXPaz;(96DgPJ)W?v-=I{W-~o}ndRwl<#b^mhDk^#RS?2R+>HpWi|>W-Ei- z&&T`YCG2v`$Z#C4bMzBUFpJ0G@%wQY9wFv@%|Ks zK^9iLUFe5w5#EO3WeTy~Tabm9HG(W3|A#B3Q;6*{oqfx=thM`AXGp)%D~Zh{jB2-uuR1m^ad==O z1h1P(H3fDPk45JHKU5b4ubWAMEgx`riyM?n6`{}FiEzJ^3rYE==IcXy^ z$=_w7%&iMtagowYamyw=mq00)IYBB`i1 zKiN0NA1Kx&?_}Sd%%^n$*F5EEsj>b!vA+$Nq)+g(<5ede&}IIYzg*IbldDeOn+6zBpu^w1)9oQ-Z$btO#xzyn>G zxd2&U1$FnEkKnZF9EOc#)D=LCtwL-!EoYKT3y^b>^f)FyrUaYRGlc6-BKJWVhqN?Dk!i!QSs?S5I{n zwd|Za=^%QtlbZbSGIChvmB9Qc`P<7h)(FEPaaE>B(I+n*#J?t#`p$ON=m%uDpPlk( zFum(+@Y5|Ul8&dl?R;MN!DYz2@_5G}Lo6L(;yQr1h{ibzhK`;0Jj#kL!r*q^ISPi{u{$-(uwOLnNknum zQZ%h)&r3*${Z2)-u|AT&b^7zfWlYMXb)&u}oQ4Zw2u96M&f>4`4y%>|)Tc~9 zZH`YK-jR~|F1^XZBaWssA=hX{4`=#hg;SW!dJClqLFvFG;Qvd1G1Zzu+724<+FR#IxQ@$;#ia)vKLHqQu=FxiBPF#^y~0yJb%hRU@1KA~&4 zA>xdna3C88h46^O*Th-66b>BNIXpd~z!WgdTB zU4f@3IF=dJf3g%dj!y{1(~~R4QHD#);jjCrCok8%3_0)jPEU@bj$mdLCB)n)-9J4+ z9ofjd>io&+$pv*J$b5*ZvwwQ>I%Inps?PrD34PtoP<8fCPm)8N5zJ6^P-OmB}CM_pzPen{#UTd6E z0G3-0_q`$a%rE!mQupX!IZ&NVh{Vpyx&QjV|NZJW6?~)s000qmQchC<|NsC0|NsC0 z|NsC0|NsC05EVe70005(Nkl-wX?=uNc#%Ttx%+dAPNdUF-R5ByG>1OM_ZF2aUK{;Rr; z5YgdZuh$oEXwe6y!@u6|w>eN8FI0-Zq(08P;v!bQil7o4Q6B2@i9bB7x-?T_#CGQ0 zz$5QGa&`k^qPKqa%i6&B$_Qlf9nIFIokKTtb6p_|RpesKB z2d#a~Dos-iGGFcgv;u>N(()qXWd;_}c@G_q12+StIe)@=$r^{OP-{RC$8g`K0@SXr8M@Uw1t3)0G(-Yw#TIjxXH6he4}{Fy8Q* z8;%jGV+rF8?=_(_@YS{d%M#KZuQ)S~?Vx)|4gKb|oZ@MZlKkLPKYi5lj8F7bEnPnN zax%}Y^ls$dG~@|3<##>t^Nu$=;)ZXDcK>vFOEK*FZs$5*bhmp{2?aD@FXP>4|$b0PhOp@9TD0;`7lV8#*=Cok_eX%KDGVS!+=&q)p!BF z@A&bK+X7}Vsej4-um-F3ZV|vT;2Eb^o6I5Adf%&REpMLs`c=jH3K2Y3UAJxRCkTUx z0#~s?6~lm6O#8_%BmvjxBQ}Z|b(HwdFGMGeK2`{6GE4>if9${#q4d1Td7Ho^T4s(D zcLP~-Oy$luhYiykD4WB68r}gxC~{eWwoE*I5>VYdIe+K3Wy{ki1nroZ*Y&XAD?i{q zu1)By!)u;hUkZbq22{^^cHNO1ohuxUE!PPjH3<{M?)v}RmUYGhx7&9f2b>`o#?7M~ zaBWd?TzuvUALWJK(eq&$@;SD%KMihSo-`B*cIBI%__g8PiJ0&`(Vw3o?&TVVVDCr$3tNA}{Cb f)AEG&o*%$JrUe`Z*upJh00000NkvXXu0mjf*INyj diff --git a/public/images/pokemon/back/female/25-cool-cosplay.png b/public/images/pokemon/back/female/25-cool-cosplay.png index e672040eaab69e1efc6e75c408839ce392ac0f63..d10328785c8adcf5bb907cbddc148dadb985e898 100644 GIT binary patch delta 606 zcmV-k0-^oJ1os4xB!2;OQb$4nuFf3k0000yP)t-s0000G5D*s^7bhz#DJdz0A|g9G zK%7zlRaIV=TMoJ_BgG*Z^~x`0Z-&`hMfbfSrLea5=2Gu!0j|Ao)3IE}r2#@&~Z}@qhTRz4CKg;A7#R^Y$ zyjEFmHJ&9A`uqfm=lgbAmTH3IvLmDwEZP*UdN^B!I@ z1F8_kZQIIZh=172PRS(zkG*Y`@O9;LGHsQW1Lp~P!*it4*m#Ym0&^0q-uay`wS5ua zYVm7J>^M)rnT*E#m6v*1<5pu_jLs?S9MStEKs`PWwsJU*;KboS_dYju60Ei(C0-(k z;z9^legd0drl}Ivki(cuh5&ZD7Q!xEDs4M}G?yTPXkQ|gne sMQC5nCthouCo2WM6QF8$I3}y&2Y}NgjJ_%tE?BAikHrmeQcAsOacLifEP z_vTXn_oXd!#A^Tm00DGTPE!Ct=GbNc000SaNLh0L01FcU01FcV0GgZ_0005FNkla0nz{e-rfXId|+!co$WGv4hax(nub9%eSZlGfj;t|g#YkggwOoC zzVLM0J@D(w1DY-OSyAJ&j%#(LRzCYp2+%^?R&g-^qEt!biaFkvRD42WOI$@Cq9MSK}fg{26%$GuSy@uYa zFZ25^zw>o^B!95Ox#8EA*l{GlPOi*<*0@PfeJg@ZM13nJAfHFg}^5 zv7srUOOt=Pf*3sXcw)11iR8x2aAf!yyjC{ z@HywR@(1@Ef4Qy37Jf(@9rgl2uA$65+^PJ zWLOKl&THhEKYw_)YUaN%4LHByX4Qz;-V$>Mi~9?|0aduZ76BLgxqV<LIL43guWB;c7dWHnQGcQL?KP`zdkA%mF}0GL^P z_XW$5pB9W@*+5%w$V>AChqm5A(}pTeBr&{0&Ik1>?o{O-^@izaCU6;VoIV_RJmXc7 zAMekwYCm{b!*#;7H)`Ie_V!>Ea=VyzPSr)Bkbn diff --git a/public/images/pokemon/back/female/25-cute-cosplay.png b/public/images/pokemon/back/female/25-cute-cosplay.png index 998a41f739639909e788959cf8656aa0e8a57e5f..552d816e142d64fef4ba5ba02dbfe7dd496edc5e 100644 GIT binary patch delta 586 zcmV-Q0=50k1mgsdB!2;OQb$4nuFf3k0000mP)t-s0000G5D=VF0QbEi_vTXn_oXQ* zDN<5ea9~q)E6{~9N4lw)&qr|Tf~NDj&iC(^JzCM90000GbW%=J0RR90|NsC0|NsC0 z|NsC0z)*`r0005SNklSDg#U@jWG5Xz#7qvn7irl3l>DR%yL)ZzF#=LoN|1>$6CBqwh z>6n!T_G&WRYQCcrLfbwm6GD?-ZnYA6w}I8z4=(J<^$B+#4;TYoMY*bYw($aT`~f=F zh_~wH{6m@MKXx!mdAWGr4B$K~fKd;^4EGV3^K^vZ=;SnhQQCQZlUro|+zF8N`c6YP Y-^NfENj_uJa{vGU07*qoM6N<$f-HR~zyJUM delta 564 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 E4^)FQTL1t6 literal 7097 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 AjsO4v diff --git a/public/images/pokemon/back/female/25-smart-cosplay.png b/public/images/pokemon/back/female/25-smart-cosplay.png index 983f49e7024d341b26d0788ec4e194e3691eb9a3..c84c0b556aa3c6f2f1ffdead9102c6e0d500b0fa 100644 GIT binary patch delta 575 zcmV-F0>J&d1lRR&W8m1A2rW;I~7Q&UluYybcN4|GyaQvm<}|NsC0|NsC0|NsC0 z<&B=E0005LNklYrInKB)L+Y?66#e7Z`-JB zw9bN(61XDp$A7ODDn^fw5+iBb2%TVOc56oL88PfnMP~Xj2*OuZ1Sq{yqkVRQAkSBW zp!fUMsE5%ry%-I8e{P1(Iq2hxyiuRKDTu9&onz+?;s}7KafygCfN+MKx0eqloQ0@`v0P&D)AT+l!y5s4lD2np>?{?_4a-l7BklP#mp_i|i&(E8fZOkToV; z5iLZ8S&XBL!D~jY=o!XAluO?{?1n^BVx*i(AJ^j<8SF1_yg!98zq1Z?i~OC N002ovPDHLkV1g*m6CMBn delta 546 zcmV+-0^R-C1iJ)~B!4GROjJbx000mW5Gg4sHfA+aQd(a$G+?z;m1A3+QUJH5nfJXR z_vTXn{pxWkAWi@P00DGTPE!Ct=GbNc000SaNLh0L01FcU01FcV0GgZ_00054NklXS_K8J#<`hurmq_UR<~_fz<+kP;2eH1x6!ZWF8ax& zv@rOXEKN!>5n_E@Osv#Q)OqijlnUp}>4 zBUq3iv5S%a7>p<*&Ee k1kMwRTN}Ukri-Zc2a_isBKpg1*8l(j07*qoM6N<$g8uRSf&c&j diff --git a/public/images/pokemon/back/female/25-tough-cosplay.png b/public/images/pokemon/back/female/25-tough-cosplay.png index a043231f1721ce835474af425e7aca123971bd36..73be0c8fb853156e6e849fae81da894efaa94377 100644 GIT binary patch delta 559 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 E4^)FQTL1t6 literal 7097 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 AjsO4v diff --git a/public/images/pokemon/back/female/26.png b/public/images/pokemon/back/female/26.png index 40d395896604b727dde67a0259285c293a0d4d82..2a6a3e41b2f8101c05b0ef17531ad8093ef217f6 100644 GIT binary patch literal 13997 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�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 HWyJpjFgxiR diff --git a/public/images/pokemon/back/shiny/378.png b/public/images/pokemon/back/shiny/378.png index ecaa26564c3bfc9e83d0ba96f104a86f7e6ad7b0..7bb24f1edfec550a614b10705d65af4946744168 100644 GIT binary patch literal 10333 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 literal 7060 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 diff --git a/public/images/pokemon/back/shiny/658-ash.png b/public/images/pokemon/back/shiny/658-ash.png index e41efb2c7ad2b5d6dac96ae995fbba561e480a07..6e10e8347316920ec2d8ef173f36d7bb2347c148 100644 GIT binary patch delta 1107 zcmV-Z1g!g$2;2ye7=H)@0000+t^4i(0004VQb$4nuFf3k0000sP)t-s0000G5D|MqZF4mMT>{T1q>F`8OM&

+YFI%3F=Z# zdFq>{pEbMJ{&6h)7-#wK_B?hRO=+>!ND3kMj~x0?9DjsP5zKEs^s?4+;%V2 z@(BaR+<)!fHC%riQ`p0moNJ>YvnS{{0BTfglrb`74df6?F#*kquP?I}lREdBYJ_Ow z^YUV8Gw&f|491TR?nMJgsm;7q3}+N2xVf%pW#f1!nW_*3Ere^W*@0rDq)$56A_Cny zXg_RhHnAA_ijl)Ptc@m}3*8j3r|obIA=5e>xPJ>OX=uKuhLYJ%4nw-~cc-&6R7pEH zkUB>)>15&4^3~NBl!Cd{r&^Y!0GLSMl!m*v1_usXAHgZwoGQ&TG?m9yDsz?xOV1~kqIR%7ceB+c%X9(hgshbakR*Hh zseh=r_K=pzt%KT%MkU@A`l>>#QT3G}@4D-goW4Reg+u;iOu17)RE1=UCHj`NVcILy zIgzRXm6-A}iaagL!8j}~+m0b~=&Y`XmOaQ3YcP5RY66N8?@MKYfSy{oPwj^^4t4wz z(K?A9TQ*5h&&otsDUA#8uElh;kW@87*?+u%XSwd7{LmtCW2)U;-cl2&sfZRO=%Lgs zw$G$FG@xEf@#t#eZo>vxmmv1nUMkUy$=l32bdhek5`GiXB@xpy0{#k`OMDjO9d!ko zW(g7~6l+djR7msAf$kh~yX184$U!mv1m1-4i8L-iCf85;mbO;002ovPDHLkV1j+K85sZo delta 1034 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 literal 549 zcmV+=0^0qFP)$TWoigciDHs$kxYPaQOK6|An1%>)Fo$0004WQchCY%b%qB8%FU*5LEV6XxeUh|mkA-GmZOOmKB;C^&0;HCKVe4LtI^}00000NkvXXu0mjf70T#3 diff --git a/public/images/pokemon/back/shiny/944.png b/public/images/pokemon/back/shiny/944.png index 24957073d468f643015e8709cfb2c212693c8eec..a33c2a39c2fde80457d5cdcbe5ef7bdb012bb7f7 100644 GIT binary patch delta 2994 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 o6LN6mIlsV9V6ZP z&Z+}OUMJsU2YBz%;ShoVU?%#7l2hdv=^OWw0N<{7b$)=*>bjZ}(*#FE7ptmQrpGi< zyp9N>*vyru7@6@gHU?{W|5sLH&~ZE}?`^7dzf;i;=NQX?f%IHD41#mK6qZ&+fB>}j zZJY~L-5)AdjWNZj1l(YAh(T$d=Nn&+8MX7GpxL}W=9zl8y0TtxbP!Z7olj^00000< KMNUMnLSTY`5R_8@ diff --git a/public/images/pokemon/back/shiny/945.png b/public/images/pokemon/back/shiny/945.png index a1cc685f008905870de8489a4bf22e28b744c781..38be3590480a677669b6ba43b77924acbbadf4d3 100644 GIT binary patch delta 755 zcmV!(;G5^^=goILZVuXBZgq2U$q>-ehnW(P5$HTMD=HlV&A=Bf7heMi;|e&(7R4F(-!FX%WrvM82T$t>2Hh&Ms1XNQe>W|Pl-58 z^BiHA2 zjB{bfQv!Y+Gk?QmrI^L=&QjET_pvDMXXrQG+juPu-ut+F{ z?uBykt9UEOBGuU_jk1xJh|SXjy;Ric31gUs5<-8RwEECw`lkhL1&_sPhe6CQ;5|_p z7wm??qJ#ilEr#4*hlN0Z$~5C_=o}^hVj>7Z6Ri=)uYW%(VFIKQtIp7E8Shtz!B-`q zsWd@eEq4PuMh~@L&{<&ya}XPbnIG_*g26aTg??|sP~&euuyW{myg_`r_Mu!}K%E&Z zllu~c844uLqYFs}fqqi&2ld^0PM8@T0y3HLAO9l{+g_tJOlBO`G|~fdzQ%DZPOB;d z`4&wKcz@l2guxfUNPDw`fpld!-h@DmhmbZI?=xaxk12{Wn3+&EHJ=OaM+c+L)-b}{ zhyioHXmMm=cbRg;G>j(6ifmF^vw%Babgn4eCk-P9)?8xG=R-F8K2x?eO2avPJt4Fa z9?z#hd*8aQK7;nD3(BYidPXGE<8^1o?{R^j9Z9USm}l*g1C z`Us;3*4>%8JAJRnAw^Ft)ZN5uPYpVVBx=FXoUT{rKA`l1E@Zggxju?yNW6bb{mMz< lKAP59XPtG{S!ex)`VYJ-EL41$$7=up002ovPDHLkV1i_uW?%pS delta 666 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%0AZy$Zx~-&{Px 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 literal 57895 zcmV)EK)}C=P)l?9OV`Ds@|Qgj5D%bWQ@j~{jDL+We*pV=%UOE5(0A@NQ|NsAuw&zE5 z%%yTJ|ERuVnce@DumA4VtY%ZW00001bW%=J06^y0W&i-;jY&j7RCr$On9Y{!HVlKk z0ZGYDGC#NN`@d;p#SR=PokXM-T@23LMHcfNkOG){X1eQFzxtI6}<5_3-+Em9L#5k&94V&#eGXJTyt|e?54qMz15~X?`lz$Evv&elV3}N{|`eal+ zNAJ)0aOoLQPux;O?2I{vpA{vkKKB#~8xoEmX@bGNhQdCGJiO3}F z#YH!&unN65ZEPPzWD&`Nd@O*OIj0+6fTI)AA}k(qgAZhgc9LPE1`S6~(b>4Au#zQ9 z$>ge>7s)c|@!*=F2bDIITv1Y22^|!Xya{Sotu|Mk21axwYf4;FwWUD?5XlrTZeQT6NUG=-pKEr}VMwGc zfSKWhLg}-lM;dgqWa-4|Tt~yE<~>e`vXrCdRdB^1Rn?pH;KaqNi-ELfNdOUw-gm% zW=npMmI9Q(br)c1NF{FeJ_`3jQds4yw=~0*>5RA08CsK71%PNo43kvfC0ae-b`n>KdIL!oFTXo>ZX?Mx)EdlQjc{!7u}V)1S7 zCC+T$r?9bIyoJZn{)Z2!oiB0ckUmBBpFB zC3-O>R}{B2Lc+73^ZYe0IVWF8gsCs6&pBRzW&M<1g{!0=09b(565S!Zu!jdxD^m5b z>MogfqlBPiMl>bG6iXXyOPjgw#N6aoJ3ST3N5_^tvHjfn%Q}3yxK7m95w+fKX90x& z{V9Harj+zg)B3{(&{12-fTT33{ll>Vt}1;z=@Q`aRONP+_JVGtHf^d1FADH@5140upa-c}WW!&3utrS?D5X3j-btyFsISP~P#DuJA!B;5ilS8e$8)_Y!_dzB(* zm6+NBc`yF}Kiu<=qa~Kf)yZ~9YNoyS1)1>dZTnfEr<$XHW4IJe8z!kt1w8Qu<>3z* zQ@y45i^`ure}BJx1tx9H+T|S*yb)Wj5bB5fPrzyafK@_EB6mxkP8ML23|2}CZ~mC) z-XZZ1Ru3Fhyj{ZWQpr;gvNsE|ljfPEj^Q$gqvq~*3&3-j^S18~?t6^r^qU9wjGqAi z5_4|5aldDwNmdJr zu9pm3e|#Cr&Pe}?12QUpe!8ML{~tU&s?jO5=b>-P;3&0T62fTF~@Wzc`(d zFmt#pD)^)ra|1L;@O{AEW84`4=ofYEcKy!L-#P*S6XZTo)#EX}l(mJfk}?g}2etrM zB*RK1VTl5KK@-cxkKu+S7I7g&bbAX7c}+ME19>QiJwlcwC&_hq)V0hh+2NK%;W!-d z2zi3(if$Ja++%+UnI3x}0lQy1?WH43ZI6VR0Gv5=ET&M@_58O705hi$u&BsgD?FCQ zT0{Qi(H4z4;M)o%tsUvDc`Zu{A%jRkALF3}vu4jgMjAhyiV{{viKx?{2rq+jkYcb2 z_Q!_UEdjW)Z9u>m(_a7{fMnzGG4&yya*YCTR+Khk@e89N0qS_GlQ8HcGLtPPz*j13 ztTiO#cnAr70Pq?0nR^?D)FqST9+?68xQ&I|<|fAB1g?zx+XuyKEFh=bFVO;-_<3K4 zEJkaDXy0;6839+X94!Fgbi`grgWHtU`6>Yp&e>EUC2@?R5zheZrlr}2NQbOhVLbt0 z_I~8@OEnMP0R*NfCwXr%>NPJ1jrw1zFNt}G1ZJ)@O^He-sV(K-;(tCm5#er=3fgNt zS-Ale-}`v1jJug$1bls$1|$O3iktvfL^?5nYJdR6N8enT77;N8KU<-Qag|9yE8Geq zgXl>^IE;O4LACW!0Rvu3%+DoZDBc!;MYn+{(euLv3_NoChhwQ*0$?GFu?zr-pSuYV zx0c`A6+p*h9i>gxKDC>=9{_}qNyQ{GJ=&e5=pucn_W#CcKLWWRi-6Mb!uu^%+bZXD?S z21-&dVl7GTx5K;WJMD}^4nSUA4CI2~0chv{{-&(9$T^-#VP0es&+M09+;Qt=ZeQ>A!{h{8m32`2|)xwQ>SmMfWl(O4UuTs^-mKDf0AZF@;)c#RP z0M26ck2hZpfJvfmCeMI20HMT9_k$?h6s5aBv_xt(r5-5&(@DBN0A3xt9T&cM-ZucC zUSO{MMu~+7bXO_IiT~{hKs`_q0F`t8uYK=d^`fXPs3ay-+ns09W4eD$+h*F@lG-e- zgTj=gu%O7R?p?52l;l~$Hv}M6z6~U9bHDFsM)*}b{AuC=z~Qxe`ubZSB!4`I`gac7u5q zKy!b6&2LHFW_H7_h34gwa1=af7FYZv)W6ZS8;ZNGbDl---7SN@_|s_f9I$mPlnn@?LUO zolLhp;RNunpifEKYj)ZFHKmnaQmp`L=@PJBdSEM@6KSF%ll18lEk2OmoC+m1sk zF|tUJrXVMM8zq`8uZbv<6qRpoJm4CoSODB?o&6u2{gX+;V6}DQ-P;SA09zJxO^NLf(|CbGL0kdw=}z$Jh|q1NrN;xD zCf-Ii>)Qz^;gPd+_n^FS38JRFq=B>-mRprF+wx}sRyQ1wPEtUJ*IDsY;siw*MZMCn zXYp}9{}XdAh&PmhOX243Ha8q2$VrwZl&?YNkp=?tQKF=;x@+HP0)j(S;&N)TFq-Yp zZ>zs7BLRve&6bkYXgEg^!~`@v{0$yE>5ia|V5 zNV2u=n<~1}VJ)5Eh|N}Y5|dQ3NwVxy(6^G%ahmM)SIyn#wkNfXqP)3^RBzwq zB;gJy@%pO}#P6dbT)>pt+;6C;QIQz=hjr zH?zM4N=X3&yBc2x=9;AIEgeelO+l@-X>%JkY{2G{HXiPKMPKYC{Rw9atE~ynxROZ4 zgZqrznxu#b1CSGRUy(1#7C&X-*q|W>WCQfGy*B$;kwV)lDU!q`(-~S3rMcP6ZN5ee zEIR~2MX4r}wAU1d1zby}wlz|~UTjX)4Vu=~j*=)01OhPMp5-z?OJQ@9?xJ2U$y)p> z1x1<_INKJ%@xsV8Wm*YWt;MP8HUKv@@o`tNDFbqX4mVSg*17#T9?J20zoX_O(iby; zr+cI$X_83Vyuxhbu#!X$#=V~Uo|1N0&}LBz+d82;ZBoOTeWN)72~tfI6$6bx(zh1# z4~7LfZ{1On26u5uc;WSeOQNEDMdBEMqJ13OZRAWV##s-n9-{TWD7w)lWd#9bD)Qoj zgxfQa#+8OQE z4Z|=rKrSO2=#a<#|DO)Bq_8%kd3Gms?R`3+CNj$G0sXro>__18ygk_!@cF-hiRe1# z3Mv=LwkFwl{!`HJK~Sky@=pP{&a1;G^C zL93ch*Cf=m0Fp=0*${F$5_J;E;q4Yst8o_{F^^g4NH|&pakK=@C;KaahEmXp(|+ln zmV=7O1eH9vua+e_gl?06NjEiFbNUU%NWsZLI2dn&ig#zt6(LC`npDwd0#rAxMzdi# zNA2+@S_R-H!H%YIhLm;xixd}x6F~sx_8(SqBmnAKk>PlEz60)lv{29q_pOmoW+03^ zpn*`LLQyF*RO|pe%LHv?r)et8Qkk^J70_wIsAIHW5@N0a`ZC|j-=Ew;1X%>R zAgyYWrXHzWCP|j6cbCza00b=2L`BIeVQ*}1B-J)MRdr;zod7)AwAn4!@=`^hMGQgv z)r*n^L0Z0q_5#TSu=v*eg}}+XQSLU{I~^@SC_2|-jBL9<-1<~-sHj?*NfOd%Tj0&N zL1GH>wRC`zMosYFvqwg<0|-hrc@lf)p+68NYqoT}db}wS2By zqdNbeJWS=Z)F}17KfDLi<9sz+=8+(M2T7U&kc8ePWh3)e+XwRbExiF)J{F#Y2D202Vj?=~gX z(wal-Et7=G1l%h(KbUP^R4p33hA13KhqN29^pZElj1qxET0h`bNpJ@VJ zOTflyEGaD^us4k@OkT>jur$phB*$Nr0;kAI@+AoI2uXE3V_2*QbyY< zv*+Yls*u)%HRruGi2fvoaY{4|&D|f~b^9v0M-Y0_vnPfB_e$#n6=RCFPC+pkEou!y zcMwCz?$oQQHAQ2MiuO@!}7x0V7TQQ0PWy+bm)0d$)Zch)!LFg@(8YmS{gtK`m`YdFAo zw%Go#cW$c@!!Qu_%Vccm=Knvp5C?{k3rJ&^g+^sxPX~M?xl2d`SyHAbtL>YWt8RTM znwJOwjWilZs$Cf*c-%DsfL*mH=+^P%D3o!#XAmdH0?I=R??D5<1!YEIh_@Kyn+kTS zO-^Bk{8Pd1Z5LOD_+bBV-||h9X#O<;gL46CvwFRPz4h$w_OV3KMGY9*n3ue_$i{C1 zk!5DB^Ux?j|Ja3*p&HsZO>dH41!8Ms#2o=5DaedsL-}tt$}xG?IV=+GqeF^Hlf;q#0nWjbET|`{rSv>G$z`VB>@L|!iwHK*oKn5!%orqA2@RBtplSXrsgaD1BZ!YCY#TYw3MK1< z;h`~yiRNn2A6XlF=7_A9EVR< zP~{M0AW_oNBH2K`N7Ed$9IlNsuN)X($M*Tq22K5$lil2oAt}gPN7mm|ZsO2uOfNy^ zT^^tS<78R^OFpgb!B&KI-pZml^@sY5b|c7BBj7<&i<0@Y2z(2Na>!{<1`C7*B4xhV z%HwN@?#K;R>0Pg>8DM-n)qBG2>j7XXSfV_G32xo z!81ik;c5S;c7StdFU=yh0-z~Z(mAl50g&n8RK+|Qo5H!Y2Ecxwem4QI+cplOBn=`d z%!yX0)!OKyr9+wVa{&INI*Kh2EViiZP@oz7&QIy~c-(e9KhK*t&9E*xbb*faOZi@FY=^f#l%CD-@a!4l%Bdd_-)kwbN`#k=)aOf1v_Q zU0DfoUjel{$)!nB&Y7UmNz#%?3O*V+11iM%5H64BC86m~PTN+&wY4-`@@p54BhP^m z?22UmPCiYN(g`#;Nm>#~F-}&TV1+{S!63%HPA>_EN8DTT)>`qC$m2LNpN9YxVDCzn zb>01v6liRcw4wnZLxueF!7L_VTR9C$@0Q#+ECIE9c&A}t2tY}tlq6_fS>E6O-j8@Y z-!}*vog}R&01^Ypt|zpQc*MAUoAYS^5a8);D*+7~z-6%?&QP`lJsaJk?B+*Z)|+9pZNKc1nmGVBUJ{EW8Di=!lXQ*} zCTyo3*=IrB3{8hKk&;SUV~y|WE|#42<0YV=U!r66eWF1VdX!e74hl;jgaVU$`y6~9 z=Rf7SeV*OV2833<7G*bo697*FfJsCw9;qGKz7@v>xOLnD-2mWul8zz}mce%g*V#aXm*gNi7Er*tRq<(@>MTqAR44w3+1bFgj9A~W#WBsq62hg^iHkEc}?%o!x8=%N@ zHPIW0%kE?X>n(7%mo1Q;M0;~9We}jC8?qTGgZ5CGHlk2gT<~P(G)_oC&S~o$I#WK; z0e4**;T6FX1C#=UYja)pnwTFM04%7pF38rVzi0kS7jDsJMN->HvX{v}ChxGv;k|r1 zL9TyKs;P#? z{C???i<4Y!yY>SZ-bixt1}kT+179v1K!&8ZS7nQ}Lp5l7TY-b_KVbv3FV>mJ7NK-b zQjl{>5fD?L7$xNnM^1ErX}L+pmesqHf+ur6v9eD%!AOQCQ!WPDg=4B|(J_7_G4(%> zR8D5u0CEcmW3q781rJh_YmoK7K{h=BDaL~C#4)~+ss{#Omq-om<48deU~ z2zL{Tb50TtZKi#ANvXdRCmE;-2&usdlsPdaBG%jGStX1pcg86{=j`rBQ!YlM+v|c< zL5gsUun9r^Nt>T6KnywHb{%g(>ci|%EpbdH;EJZIwbj%?11F7zcDYUh$v6?^2P|_>I!7$9&e?>M@=29l zqTJc&zT$nY6$%u(TZREZmAD>YsZ%dDA~CY09+u;Y{Ig0N2BK;pA5IxHH^9E^fVpr( z4nWFbY5@0St#v4U>yBfl2@OC(2|AglW?YrifSW!@61wYmYak+SqM%g-IL=m4tqS-9wr+%cJM$Fb29 zr*fo(j=QX|QyFODBm@S7{9kIxpU1egiId!u|C+N+3yY!3eIDI}@F0;fhs3Lta+LD= z`kJW!^F0AXZz|EH1-)qT9RpMin9}-bAl>-h?ye^ji{*k7*t2jEyv_AZ4%Lp=>!8Hh z_bP$oPrUe}6q!rbUIja7;v_|Af0gtS5}-N>BuQxRQmR72cBpIRGdl_RE2pk-G{%Lw za`jV{I~v_E17wU!U*m;RUJ3A119-US(hBz#j61ysyBk0_S6<-oP1L;{w#DL*gsTZ5 zs2`6HoWE&1qt@187z$T0r}dz)NB{qSdKFc&X1TeF0}*A=mk+uAPU6|?;@Vd8gv<2r z0kD4~*njGE$*B&~C{0NsDWP~(AYS0+j=m-2;`Q~R?5~2x%u@&iJ-hA>8VapvP|BJ6l}m3OZ%C!2B~{GYe+zATHw^#Dl4e!BhXrW&|Ut~j*W z+j?lelMX;s+Sc}$hKMQWKxOWTw4)Fu;2w_ON?u<_wz0;Wa;h-W$AQik(dPpqVO-Qd zx1_aM-0=)Vmv2Zw0b`{2(6BI;Gy&za2zp)_+g#Wy*;F%2qPS*>dz;K`0;1M-+qR8C z)>clM%@t9KB?+j4!i^mF-v>4)yC??(<0wZqV7Ntxe490nFQ z>Ja5USRiBhrdqT_Dr9@f+Z-gtpcRsXVv-{0e$HQWeP9kc$Ei|5B4~>A;{k3CfI0?@ z-r6d60c4#T)NUev8_5&k6`&93vD)}2>Qe^Xcz0gj=S#9#T$0l9s3u&5d0G}gAlvOA z#;k#i<4NkO09P8i%$dyvJlf7lbL1G>Ak$K_w?rpSo2_&S?07(GLAWu?a$~Df} zAXN{Nn=6wa`bl!sIfWQ9VDPxBaO|z`-JS$R-*gYBR_2@rd63+G!AkvVA%1B@5-Oh1%v=Rn$!+j*v5ji6RWFl#|je*m`;}M%YJqssRs(- zTqXB}bUmwU(Isykga~3bc2a4VL4`p{l5XWNA|$(3=ajaVBj+?yOe=!9Pk$Hp$lLl# z0P%ubFeHgVA{)+fw4Jbbqs8p}OCug-Ee!p@??^Z$3K@q0In;k7-sYemA@PeY%x?hk zD|B?7LyH`UykoMZNHDaNqnV@K{A2G7ciV=680=M`Paf9(-TS}kbdeQq7F?LQNLY&y zHc-dF2NfaD2T4hmaiVcM-?qBF*;PzB_|31^->97JDrYUjxdot>c{XU&g#gh1Zh2m= z<;a`1uu^T3SQtCs>L8MckwL{M9;1rkfTnTyBw>(>Y9fmkF-MJ4nw}j~5EJ zo3&rL?hCHJfFyBfTcCeHUE88gQjK6rU?7p|79MF~W$$R;mY{D5iijW~Nh3Mi#$;Fb z>p~GZZ+A@0{e-)?r|6+DR(2@&rhOfkQQNim}AWRRHZ|IWB# z0e{$XXpF9V0fA6p6gZSf0MNfquLL;soWvMJG2WUIBMx03NnGgNf0Ajv=?Ft8J(MU? zCw+9gkRRZX9}H2DLWm2qVnmXuBZ&)p*>>|&c!(3Pxj1j$X@5c3wTueDZkA_p5MmG# z9LeMuaq!l$U3qu_;=M9K!O#LA1a&l=@tmvP78w!G5tI>d3mJl41PU>eVnmKvfDsKq z+`8Ka$3<%{nrtb@{~>(tIfX+|&(Q)9wp>raHY!GXkUGYU1O%Gfi9nyUJk8>TMP}(n2{aRPFulRi=MwA>Q zwwT>3MfgJX*2Y40`#(7Vd2OO^X%>m|lN|X$g2r$;Lv$`F4xx~p<0sS@fsc`gV&tk` zub2k$rrGj4{`uK&Qu-Tms$ht*hsj5yyz3 zT!Otb-@2zH9?CsNspW!&l3Hp@PgMfR$g(0!jQp2NHCyT56@YBMiY~9vKj%M<4or?yGZfTyQm)rV@Lk9Aa}oZ>bNM%2R@E)8gi~c! zbo3P)0o48UfC)7P01`x07Fv`RFX#H0BY!e^b+6xkO%6mYxdI@UJZ3q|e`T&NOazy* zMK7i7Ze;tvWIK5E05|&|PVT|Fx*W0)e&^r>F_;^-g|=yF@?!Eae46`BmKfg6B>qzXqXeS;AAv8%e~`X?5tI9izW`QTi8jkT z2XnI&k|_fEalZttK_Er9U5jkxLDeB5> zmME9wbT~nCV-zs0>~Wj^Z)BZ$jMzHLUuoCA~Y9 z_mn3$gb=isay+qGLj^zu)Ql>(mT>N+84#S1xIoUBJig9|A0w7x3+W>c2r$9ml3?#H zs+lzgV=<-lw~4J|u%z&aT8b^#UqA$v1Cs}p2b7k|hWJohzDOHAMl8h^(lgFLSWMnB zwleZ_cGVaK^wv1qQ<>Qtj57P8i2jls$~icI(&lP$H(m8lV-9WkAgwVdM_FDdB+Ic3 z$zbxDv3`hPP_6aryxbZEwWvKR~z?A$o42nN?2NBe%2`{bJe-dLTxFQRKF#Rc@m{L9{g9GJH^Bi*y6 z`+8phYbhIMiz6j7A(n8C5Fqu>RKQ0R>d02(9Y=!k7ffpZwksTQ1lJg1JvjmB39m=? z7D!1^0aAEG9bK-pwGGf8_TELyaU4k!6_aHEp=O3=r)O9H|ED+T4$??EB)o#D>bd0| zQJE2a(hen=;o(o6B-qScEHGii8JmS9lyiCw@d@3Y{Yb1`2N?-YT1LP_ak41up^hjUj=KToQ7laV9oTib zltWN2*6tFYS^t654hA@I_1@B5;yLXT0V4=2lqRIElCTB~%34D2E)KK8hOS=k`!qQWefka z3Xs)lw-@Y40-YFD?ggmfe0NZl7vnjDaR$OeX^U(+6Q7fw>TpP5_4 zItP(t09ohU0`qRY6$s!UM^z21j06S9qkz{DiaG)VlydH2ntAKENZ!f+I-nYNaNL{i zu~axB3Q*!p%8X+Q@dx5XvICsWt;dHK#8vWA0~W}_@c6>fuTb|*lmLl)WbSxBGWX@u zeRkjj;i)JDat?UMelm`7R2^9vm7s7NIW02IEkMo*jKN63wDWf6B3VhZ_kLWwTK*4e zApdna{3bpk+9J%|@%?^HyeO}L07sgTal!2_dMj}mrO~yUghN~?i9;9w>+wYp4$f{t zBFlLE@cqKEddCXaO-WKeTXv zRf7P){cxRdn&U;nnbUvz0Q3|A$iKAdE~WJ4y{ab6{a9C)L`o8ALZU409AKsXN-zNI z5Udh7;1Gz!eF8kVuN(f^8&4n?6AjPA9-pczc{nHla`An}& zktPWZxOq-}I?f4S)c|`^RR!#E4B-T4UYXCK$0=twVG_ih7emR?O&EhS3d$?a5g{w1 zS`=PKtf&d#W4lDYO>IWr0=PG11S(x9-lzaNvf|Eepn&7@f7%UzXIS{}?g^{9ztTT_ zANL`e)v>lS?C+ZZR0Joc7zM1`$?nXJ3~v=Ewc^f}`Dq-&j7Q>vuYxdT98aH)?DFJAp17FLK;y`j`;9#q>>+i<6y?ZV@AGRe zVGbrBW|lHRS?rtsRD(tAno}d zJ$1*dka*HPcqLx#s){x~+wQN{KTQE_M<4((MrjsEfWo8#)c6tSiOVRZ#TiN5mpF72 z5GK#uDHN@_X_(>HHx+(8pDE7O%P170aCM-l73Ldc<^PX1iG#Y|P7AjS3zvCxPpj?HJR3HDdG_Sug(>F4;fdn~Z*|=! zarHA6JMjOPu9as>#CM3vY?it&m`nEONJkjTQ82!t2$4g1FCz#_epI#Ro3m4qfDC4A zW51ENX5mg8-AP#3-5nt;x5_908Wek;0WSYU{VSqbb7!crK>-YO;tb@rRwC zXQS*F;(DIB<*$!DZ{-#8L*5i{V#@M0@VcmH_s!KUAa=DBOEY&un94}E!BEuC1>@Vo zMABtY-pdHSY*ahu)f6MD=qUoYVDf~x1J4V$ljFQ@0Z8PoC3BE~r=vH_y2Ai2|2yZz zUw`2RaSc?14~XvaglidiAa`&fO}IEMwtYCV#}AX7wo}CA(JBqJ@-41%a$TfN@$w41 zq8!O`WbOobpn`NX0K<9#CF#mg(lRPS!IXFyAgbu80{GDr5NUf}xZRU?SL40JNf7i) zzwigoVhhqaorCAXv;fXJ3ZXn{G9Tx8z4r6qa%?U)4`M4%=0Vt|#HEqA08$?^agHCd z;&9-M+H1=BGg&Ynm`egwkPgf5hSmR4L^|YUge(d|NIr{z{8~_kpQpd2E%$(@!`XRb zkL!<;xZGU(;^w~_yarD{4(fEElkW0Ub_rlU8##{3T@}g`5|>AA z%a?aJ6F*~JJyeA_BOG z|M@^Roj1I_T4!iFUdq#;8V;Ai+zkyj&UtqdAuh?j=atjZudGJzrJUS1cX^B#Df`pJ zea5@$nYhm(lpMJ&&J=A}7dbB6B|wxCkyhr`knVsJ#D)eG%1BTsqf!*L^kP$f zC^{yv*g*iksI@s0256Fd30KutHxVro-}3fBF|7)D;_6#-Chia_R&I+EruZ3$*SE#I zB=^iEKn)IEExsz?gfw#jf8)dC4LCl`ygtk@&qTS%Y%oMkcwx$d3@o;%rx-oOYgln`N{;K=dGi}&RenbW9aK_=fZ5ICuNv`boO`IbR0UBT^Bf_*G$-@|wi_Lm* z`M2}j)BvCai)3|AF&_`A#4G?Yds5ZL{3<|0@1-v#N?fS-yai9nrIx@!d`D1AIZCOG z{e$39Bj&l`Ad*&SSF$l^a$)gr77E3uJz`2ni{Pz*6*eV|nUaqZ_H zx0`gE84ZdAj3bsSa1sA~L?FQFN`m6* zD*!1kcTa4^C(dsl1oHhj<~crZfBuQMY@ctgh`dEL|3`v(&7R4ef0%o(2!~_TVSmah zfCjAYxhK8cLo5G%D(2e?^iuhPxSvPE8Z+8Uc(HfLvV15t!(@slXaBjw7(G>EwTDaygbQ0J4Wrp7RVL zntxlzB?7SCxnbz%e~P!tHuA6)NIa`S^b5c@y)2)3 z!UjcJSzlmWwZ{#g#BDFe^nTBOpfG1ezWFol28@2!f3Wn9BtHI6@;4%;i?{oK;9=nrrr$z=H0p2Jh|7PI`1dHv7adLrR1;*0OUsS zbWx9C!pUyHwVq{`{118yn8O=tlka@fd%N*IfyFsPBWhyA7EwA@E5 zNb4$Nk*-|wmHU>ssKzoNT>onnKoLj^9nF6t>ZE*|aC2&Hyd}_zBkx$$J8{Z&wBfiG z90=k33&#Df6aW$+Q`HU-rZAoK2+H~j0a(s<-hMIBnyxND$e91*;VTku9X2pKA1lLz zZxzJF3CG=4<4qe0aRjCs2jQe6GLAZGI=axIfm-(X>G(KP?c=m_mezdd4q?(S(w|YZ zehDA|_?Q5cZfbSBrQwX@m4nMW){oEV?y4f9v_8&#JqBOq0!7p+xzA&JzW~svTc~-!OXUc<;#WXI8I_@Rr1;jdGDRHP z!a{h$^x$~n)ajZQccd^?A6=Z?*Fx{(z_$SPpE%GiC)!o6`R>r7_w}#S-G7L;nW=s4 zI1nR1t**)4N+p5kD9R|JbU)7BR|55)TKbAi!86P4d1*S|7^`!EiH`WaUVgekR=;K!DS zi`P=BUQeBP3$7BBy+22%4WiP3>y>{zCQnvumS0R%;G{}!B;dqns& z&N4!WIK6u8Sh~sF4?NCCTNQBCw!aFM&`1Zc{DQQ=g|9}(@)lSOKpo*0#)*>jzlLz1 z##v;2$EWm2x^^(P|8e^1+X+Aj>t6cmDL=6VD2|I= z>mTR(JE!+w4MnOp#0K=a?}3&;olAyQh+Vff&HwX1|4;cw!hIe`Ew7`;g?hZJS?2c3 z`f~zcEq+Vd4W{PcG9)+SNK&+k$-M|HHb!Xv{cq(73HN!N&G4G|S~C3*>(k>ST59P& zGq)0^e|hNddC*>q&mvXlZca+WrZ&zp+uf-hUFfR2iwAgcJ&yYhn792g<0!*uesgwfH=sIJcY!V;bMSvZbZ`gjuos zf~U6l6|E)UF)Kh0h?G;NSmMs*#JwrV%9TeJC$Y+4Wg0dkQk@=G)<%>gOekiqg=t%6 z;>uuT)YtQ%u@;|2s>g&ty>7CYr!~8Zaw1rTccMSC0@>gV-^|oX>=!oxDuOdminy@E z6(C^aN(3TKIN>~>`{!8+2C)~-!@iQbeo0#*QAio)R>9m8_EJR@5-5QSdLB$@N#$m~ z@Iu)J0XUcN-Vm(HJJIW(#w>K#G5XJqx6hSvq?Q;5PI8Ug13iNRjRXn=LIe`#%MS{! zK*YHVjuRa7KmZoXCEG zdfz`4vuA=;1w;OiFVA(@!@#^Zy%_^dRsDo;$3+{lw-wMfyEyH> z4DIo&j>rm>UC(ghn@lc_i*00Wl5a&oz>1V5uHpp2Q6Rw)1vmvjwt*_QHuofo!hqC5 z`gsy(mqkbC6C%oB_%zOq)HI*wv^W?;zX1HSbr>+U_-z@n5bH^HxAjgPj^&QX3L?8K z-=2{mq+C`23v(?Huo5>9q&NZuj!_OyaNe{3*gzGLVLJr`dyoPWCr7l;0m@7dj5LoGh?2e|$$b##P_dIBrpfkRDY^>offf*?1sfItVN1xAQV ziX`oE+~yseQbSFFMCbrsLPYkP4T%ciL29KOUhvi)-A7LK=Zz$|Vi+e+bC4sS28sb7 z`O12aK<7JWOD#SDIuu~N_xx*LxTq_zBD{J&0rE{xRRA7uSj#1j$_Ab=Ktf!+TedeK z;$V+6nl~vO4gk_STQnDcu~E(#&Rp;-W($%R&w{c%^NzvbII%E=OEfQVBdjgaR0KKLV1J z6QmOip!W!OdKTqwAq*cz)yVBJf;<41Kxn@*(TOzw`|q4+B-`x1A$i>RNOED?JJHO4 z+K#t#hP0$g1_|%o-2e#Wy?>1ZDJ1o44|%rG21q#S2#5zV!nkiE#U6Sz81rA`M>9aXk^Pp$%S|ozkOCAk#6S&cQ;6OODFe_ zZ@wu}&W!W^_8JK{FAy7j1<0yMTlu}g@#1^a9`Z4C{?}jh8yYJn5oLfhF zHz(*eFNVnr-TeB;*0LSAAp!IX2|gl)NM8X01jw|qe1$X2%oz~~sFiMQe4K-DeSBR> zB*fcpVmm5^;lluLmKnc?p^nnl-(diiAhUBy*wy8jO=QxYdA-6TI>a~keNS2}o!s|B zoF}>u-Mhpa(E$0T#GQ`^j&Ys`u|s=vrJSj+t^^VkMYxj%35O@Q0K?oo49&eupRwR+Y+r%5ufaP1Xjc&ijkrTLIGv5NyEYP%41TUlZc^rkvo1hpSsUpc)!FvM; z@Z@fon}=aJqFEibhuO9@qExc~`cmYTwfhwHulJ{)$QBCV8KM9LVD8A8w@z-xT?6M& z0!Sp@s04O=!@`O)-A0{3|BW|gj*A3JAf12!)GzrKzP+VL4(K@&s1PR&q&OA*G+t~ZqN9qbHNc8P<}NGuI80LphWwAJo|6wV zaCOMqr#cLTP?$5%<)3P}MFlMUpOXS;P&S?1R6s1T*|`4z-sBxXNMJsiS?HzFNzN{aGA;42RaN;NM%d+F{fGM zcofkL3-Z;X?1YnBOv5}6UNWtL8-U@P?(Qq*knN>i1B7w`s3mZSQq5e&8AV7%9rAg2 zArMz?Q6pjU=R>u_n==-!4zy2n7;wPJo9gc29?}Bf@^5~UdNTZ6{0cxK?y6xPBBnEV z&cq$WglqtY2sjVfCb@+`g~SDNI7F#qE`{`KK?+5j^JMN~cI75a*}0AeKp%#y!;hQ0 zp{2usRj_dFt|r9L@CYE(wa5R|Zb0HPyQI=BoA+|(yT8T)@)O@=P5U*D!#vBcFg(Xu zKI<&g`hhG`KMs%GYDP$9mE1_c2*?t1jvGWT>p{0 z4bYs)u4UO^O#%abYBtPsGS7TTo5BF$n_e;Fng)0b5{nvYB$))d5vT@ ze$kDR7^3?fs2FWZ7$}C=%$2)L0aSH#AIZa9#s4j0(Rb&B9Cj9KC0HdtJ zxfK5$aZY6#uBgil^A7Y(N}!GZk}5_E%)430k2K%ZhV4=}47IfF2ci*2FzRr~TrRrG z|F|O+0>Q4`f)ST)GPe+js#aJ&Oq1n_8|3WLcjtt%^M2y36DRx$>{#`Y&aIjS=(#hN z4d%MckpIbO={Pg*V2!CW??&t$-}EE(yI*ElawQOPZY?+)bIqa~hH}awtVWo?rJFE? zlMxRtF+JE_$N#5f1w;YZJ7?tyDCojX;z}wvVs0S|Lvc(6vT)83g;+7WJlAE02@L6| zt4&}~FLi;#J8s6mZhc0ePvVfecF_$OzO4@ikfocdM%yBcQ<#=+U`+{ zkffIQxNtJAD6k=JrE13&mRWMgV zO(tDHc4}sfRS<4`cGH$XpT!|{x#$}9S07$@veTveGpj=tZ{6*7KD&!9nwn%==I)#> z#~LI5dWtHH_tIP?p!By0Faltd=a?^0_hI*L#un)FIHayFx`zF2Yxf6K-E59d7jjK2 zGl4s@t$lL>80ToX9g=ReqTy|VN~+okWdDmE3ZMW?U`33PMGa5>W55qBx`g?ts(T7v zd3n_k77APY5^260{;M62KmL7m1oK$|v!0~L{!E(9Ay!2|SX46}ml{ zchF)0yv{u9>JZe~mz3=FJBkT+ReoScNrSF{4 ziaG>a?nVLVty4akIEEl=XACN!xXTQ~rROtG>p>MF0H@}+5&O$A#y1Ly1jY?IOxAZz zQue-Ns*jaSMv476{rj4a&XbE2ptg739K4RmwDvUuU`rUMqJr1Yy(szwce*+A7*)_^ z#yaPWce=lWu;Ws$gOKZlv?*z&Kap;}W|DI299f!wIUvz)4AK|B{ttE#b~hZ3MBW$USS1M%HPAHF3c>Kd znR1Jw14oiK@SmH4VEIBE>e~MLDgoG1WHlJCqj9>tT)m&;aRYEqr9V)%M>_GQf z?=xLyuJp}eN=&T@d;9uoRMHAWq>4$({rtDY_4QD`ABRi_uHk>)>p1UhWq;o3V#!PP zy5$P`#JC-Nfdc-I&pn2BdN9M3=`wSr!E_Kl(>Am!i7%^|EMYnc0EDO*Bt_kzb0oRN zL1@771Zf^vXRX%j$iJe(=|b|VA^y0q7vyfy3FsN^c#($fGShE;BexB0Ta@GtP|Z*) z=bZk=Otos{za8(~j}uS>GvQkPTLrki*KwZdyRUJ&@X)WWN5ryw?D>zpD?#~A2nqr% zi@y*4G696Jj&BV>8xTieE@-lPqi~Y4juO|Vte!)C8U!%iI=2$iJc(1Kqsj1}%D%=# z0QB4dymVGNT}W0pZbx{JZHWU4dKJitCqj4?MAU;5`ul3Pn!lujaGasAP;LU6ltd}{ zX(cZzZqi0X-&Wc%oHP|EG5rAQPf~#BmoU87)Zv6F=+3qwVXNGuvM)H^E{5}^lK@$# z3oWu2sBo-jqVP@nBc<{fIcOOmb}d4LFXjp5Sj##+)5^(lDIn*x8abu z4Lcj>)m`HOBHyWi{iTy`$BK7jVK3;jpTv~91+6;Nu-LR2R1c(oodDqNMT5TSwhqFP zxFBhJdU2x~$quEBYk3__EZ>B1avrP1u{%=S*H9_Qle8z!NWYN(YNubI#&<~rNjj}o z-XCd78UUlA*02iG1sXdD+o?@GN@@af=|04@FhJy+b#6_e4(H{Lgvu?+0!0N}y8+PY z!aFD3j;+Zdq<=s~s}7pHhgD8F3kY;ZRoFqeaB9=_O3E~l?+I^!J4yA9)Q^L-k6?nw zbpntqAo^{#JExmkV@^E%kpJZZNE;uc&BtdGX3*O~n4G&nN$r!A`?nHw3z9gUNIYp? zC;-GuCSzCf<1{t69X;8vRuLsd3;Xk4Wh6B=p?l~&5&p1}Ty~Ih|5nlu(|r|Dgd1>W9{T1(?*U?9|Br`e^c(?I3Ju+oPlp4N~skN(j@3 zL!`?UU;|I_-s-t-17JV|sKGm0wSoYUr2u+rEFfw;_>^0tieD8g<@HM9O}gtM!L6iw zFL6IN+h4w}6oBQc7c<;#xOn;w1RA1s>fVNnpo**v@+|gsPuLAlz}0BGUrF{RZ7vem z>?PO3aN4fwnOe9`0GN#RkrxI*yzn0|`qWJNPSpnBw7Y47wQ_iQx*DLDN&?{i_*AR> zQ2u_H9%)kxxUM^5n*FPx9#9EpZm%COhD&YQ8ERe;hhL6_T6?yK3ZR!t0(-w#U!^U+iDP`nUPMQ>jYp8@Lh;x{{>xdx)U#JR0*B6?ILYSTn^nX$1y@0_ey$p zJEdOr@>2s~`&rfv<$ur&OxCwWklU(A;-uFs0$pY3X1_%Q0>m!qj?tfZiAq7s^bc94 zEpeT5)i@R?P)UV0-%}RMY%^g$u(tDKKg;q!7+Fg#Ss_&k@?iwo>Taeg`f73T#|2(Ic53{j2Y|1&&6_CpBEY2c=xWjW!nvKDH} z-TL?y6y*17K_;DK@3$lBvCRPBqYj&V*BhEw`?@mm(k|VJ2EttAYH(fwxx1@UCFTVt z=rG!m2QpOvwtgOu)boLiTX6CU05;Z|PV~e{SO@??1V=z%1o<8bH@rLAiM1<$k*6O` zujsN>kp?$J!=FpM1YBxr(>nn?;`(%kAx;h`zXRxz3d9I1faeVlF~IP~3P7(PFNup) zOJr>lXO274(;Z+$kZi7|IL3^UoIAUl@jPf|-AO>&awqw``Hc6owKsqdG_?AZ8-pqk z-df@U$y4r2rwisE5%OB6i6gV zFR_^s4d8)9V+P=p3b41=uFj^24H7ba&zgM7jRLSUYbH zJ0S(3YGfRVt2D!FArT7T4xl)jAcNo(3erJj6P{E6XGF76VRk3!??~N+lmPQp%$?3z zoQ=(DQi+!VJ?$fp)BiaCGOkQW?#vmWy8w}tpq3W6)FscwY7=vkBFqaH=7~EbZnPb7 ziS>g14~ugY{Y6K+{zaR+g0F>AETE?d*Jg1#)Ay`3w>;d@ z-9UAIvU{XbA8&4*cs)huNg!|^`9|BE_w*@~DK93;S^@aAnOS5%EPb3?c9Ff5NZj{P zW#Ej1r^1lB?sb?Xtw<;G+wW}xA`WC8e9~I#<$o|2P9NmIU)}B-`fggYI2-$(ef?Z% z1?H4(t>fRWOphWUUO5%=_VSYFJq2(cqzUatE;g;r%p&_=EfF{hDNS6zcRd0HIAW>p zf)67|!T_=Z;0WW~3;^%6)WLtAT9RE&LuV20&DYl;rn5L>lcfR_I=Nk4q3UaA@=U`F zY$H1eR<_n>0g3_4MA{> zAPo$FCk)Jt6!kaun}=#|9b(H8Q6+%a?wbj{No-X;HlWUFmk5_W@p^B66f+(ZYZ0z9D}1;hkM(Dg_|dsd3ypr(;UOjfO*5QU6H5 z;W+q%KNUM&2t@JZm8590mGCV-4|bEe4#O}G!>}uP1~S!qFNjMe5e&)ZAh|7R7!1za z$8vKLMu$V(&PThyxRZ1bY!lAT&Yh<<0B9`26%9}TJiNEJ&-A`Rjo8@Ey;Oe1#53sG z`j9b3mrH8y!EA;$RXJU#ojp)i0gIM60(=tyP5J+8)Pb;utHv^0i7M$diUCbHzgC<{ z6qIiaes&YDGb=Dn{(Q7UFZ(%Z!8v!D*04Tydl4@EmwJ0ecNS+;wDcK31;pQB4Jm@Y zOCWu6_ue*8_1k=&dhUZo06=U9*0gZ^H~A2%miP)LVz#ctP@)al@umm0!n}^ z4iy zgj2R7`Gm4%ClMiW;s4>PcxOB=!rBG_yy#iHeB+O|&vYt)M7We8MPz)J`mree)!06g zLz~nlEZ-KkL`h!E9C5``jlCF`ApezbLqNzf#0n{`B;SogMdq29#F3pugmlGVEKY2* zjpnERwnpsjTLcCGKiNJL$#7|;zlF28zHFes@Ra>iy;HmyfgAJtaDY|P6K5q+OLUf; z5kUc{#Zv-j;ujqi5faR$l0-@&0L?fGM4ZAc$q0LvokX-$UaHmC))(5_4WVBEtV1us zf<_>_I|Jl>(*WMyIk7u(Put864z1Z(j1aOXgN#oZ0cj z2>D?naV#M%nS78{Qr>$>2|%xy<2cN-{$iPlFAHzE``apMj!GJ-qziE@j4I%u?6{MB zTXCDJ=DyZ6bQj^$P^cz^SUCO@?K8!r_R6W8Vt$M&3jJ~5f8flH5#Y!g>7O0MijT^i zeq)tX;=ZH=bvBX6E6l9VEaql4uTkJ1TaC&Dv3CGlLc0N zEQ7!4zZ=98In>60sH9n0NF{aPpcV%q8Y0j*#9s~TCwJxiTe5%I5Spq+=)P(7U%J>i z1ikGuz2AH0Y)r*Z(>}~k-=*2C5NH!E1lkw|SgH{#UoNCZ;9C%2N}QvNe`rFBzHSajdC`7fPRY|Y4b1}KirjMk^jpvu{K zS=6t63N(5gixgl*5aNcQU_h+^#v?C=T9N>ul9mlI!VJ$!q!Z4q8ix`fP;8DrXa&Wk z0-y}cfxES_V~hWCkzZN>sPA~1j;Z|G1y!uuzCZ#r8|4`zjnbV54qdV^f!E zM9Z#Ec}u4Y%!lCQP#aTWoZ7IzO-Qnh_*;vZ^6O&1l0J{q4Ak1#x19emISZh_9N!o~ zS7TEOz%-&|YmBZS&&-(0a6wF^PDmF-^*^a30(}6cUjRq@`g*te3;&NfW3l%=@Dm}m zME_W}#;7=JoWrHZe1S;+f9xM~p=QA4u?9!aKv;vU=yG3L0hrbpmB(!cXJ&*oUqEhH zLr2%gAQ80BTmJ}=f6Toa+XlQ|{t1A{f2lIz9HIUlz$EZUuZ}l8HeN`8!I>ZiMkiYg zVAtwy^J0DUuj`+EeP1-HrMf1M?iIQ^U0~NzuX&hRj3ZO|Vx)(iUb@``l zKZa!o2=3^*vgVSe_llyLNp_=xl!+8r3dL6d|64E)BxV_$k z;^Su<(cVsdXy10o{=qbom<8w543jG~05A)pdxVIQRU2>ng_OX#`Dz@(WQ5df_T(PT zxo1?sky~0s$mQSE3!CvjLGXck0h|(<=V$_iR3BPi%C8B|Fu{%ud*xSwR(@R2t%On{ zU3}2=?3NysKvOfPjF5=bhXZspmxU2huhDt$?&rXh>B zf5(?V1JK(08c-x!VTnC%Zrw(_K*+Cuqp~lW@X89Q21p62R976+(Y|pw7HXfTKk($> z?rd5Q98dp$y==98zPmb+(i`_BXFs%cVkX>SVoAA2yMO9@h`a+(FC{|N?j_3q{YIi! z^r>durjR_GYZj6n>Z3RdP;GxT3R~^wRFU$^eqSyCS`>ge{d@oTt{zO{X!iYCO474F z$$kLHwh+gS9h3=^9=!~_y`cFY7r>$buMNb0qaBItWsy!1QJhP)b86{kyhl=5*S5v{ zAsnb4c|p31B2`KJgfCY>WS?37y??XSgEhGHU!Iu@tn7btc#n;kv;8y8%!b-XC;c|9 z4SPM8xX$KDLBD@bK;b=NHW-sx|J#J5N^0{FSVeX{4;Ke2`)UE~@0|~vqKs3{eW}J0 zbVLNK4*Z<|()J#=0`Puq5wCba)faGs4XxQ5zCEZM>093$OL-*B&O8PL4RZ~h-L*RL^}Ebr*P6cn?Kyb6V#ozjz!4U{pem&K_ZBvTvk zO=T>n{_MVbZe>lw-s`2rc20MJkiRxoAEkBlaU3<`TrUB47J%5o$YQFv(Rgo+0FLg< zL_;?=P)7V|l|x$wJtTV+6pzu-=W!O)D+ORzZ<5!= zV@ISv@~H$A4Tv$0Q2-nyNB8CH4$4^U)IgSbi%p5ll<dG2o^RQb|O3eqUf0s8QdpzFv zbL|n53+86ihSLhuZ|>xJ92Y(V6<1)Vc|cAf2uK0grQa$b(~7w}lYf?wwx-jgjQ>kY zlWBON-RjD#U=WoA3SifW42xaicUR(X$>&i7R!9{GGGg@OJo;gX(=Pz^Jt}>Haonhj zqDC(9wi*#O=M5&#e#^1s4g1^8xw&z4F+vdDrW;=9Pn9hQ+V>J##X(Al&jM=Ezy(6; z!D)mcP6X-~fF61_r#uSz&j^;>RuzGAfD^9415K^S`-fvHS8RF}$_l4Ls^JBv&KL4O zgnjd{ky}a4UP7CT{N-!v?UsA461YG}Nt|0fP7#d70dZPQobTfZtj?NAEPwuC1j~EG zgNk2F<-q)f>YgF%$ewQcr)L+J00-fwOZO{fyVAxM1Y_l1LW7jcwPP2*g9V9gQUvkZ)Q9Kj4iBwF0gIY#*-Py-Q_`uV#;e}~g?F!E= zY#wI!61G0AoNX)r#wiF<*g7MhdaFWm#X`EJghU*dqHZP5oWcQ6h|^^&cg0j*)?Dbv}0>Scz^&jDYq6$#<1BU)a0GMOvZPzL! z;)EbD#G#OCaol|*jv^Q0^qco}%ReJnNxPt%MSJ!!4fo!5rDLuC-rd+dtbH$`0K)UE zfS_Y$9oDpStJ*si| zx<Zsi*lAaj<1 z$D7>qbMFkqg*$W$NoY$P3aJlAVN}<7oMwA*bV1MjL$d#4{AX;Pql+5_knUHCB+a68 z`bE#Lv;gYEU|8&k!%mB@-G)GVC+QUuVbnGuHQ@w<10ajjvjNc3Zkv_}7T`PEep{>U zkL?2UN~HXxQ2=75;l%+4Q0A)v@<&1e#fK@zdLEgbggD96Tc(}^2_ZcJbPCD21tJ`9 zqL3r141Hc|A;F>z~1W#70cL_h|u$ zCMPD{>VE-~dwz|OlEUuB8DHc4WpI8>0O$@U^b4S~Lp%U5^X8B>Yz5F(?hG>jW!F;f z0j77%bHA5p>+9_pg-uOh#FPhCXZ=zl%wZT3skeqA9YXp5&bQUz^p7y_hwUGpHKBJx zLOlE2X&w3HI5iE}lwel<)p~p)hjVh$)CZxqWaK@j)88SHC5U&@&8)@aSN zthRdzFu!YkZ3TdscOoz+{*Q4cZ1w_IBBWmwQXkH9#kqCjJc;vZyRr*2f_DC9hivk{ zs?)rE~{S zxE%su1gpCBJx8$+q4*B)yjzcQ)w}2?c575)x5kBba#~wdum9DCFR=>cm6XOEju-xm zl;kJ2e&;@-Vlvku%!8QHKLp|bLcQEj!1qF$=XxO#hqmF2?KtBBXRc>|FLO2E5E=(% z+S!*K)97^8LX7~JoVyc15Luvhf{@mW3f#tjw(H$EuzZWXP?Fh86lxSDv2~2T?c7Un zLu#(wayR@nj>A0bZ{kq!i~w>%f(oe2H7&49=ze2hy{-(H6q84*ZTH z-aE1m>HO46W+;X_0kBykyOnP3dMEfAB<>|5ro&z`p}g}uupQM0zn==8;z^5;2-Jyl z`v4BDe>nGqI{tff^52dS5<^qyYBY&eOwl#|7X8kYy0Kd++x0f=C9r$RgsK5wDu6L_ zG-wvme>4uQe>gX4BUrc22$mfo)FuEV=C;NRU0r2?8?!loZ@I_IPgcNI0u}vAiNnUf zW-qDEK#xb`U!4S?kp6RV`US9cPj;NmP2zS&umU4ke{vcZn8AO_(0%CF1FT@d`VEF} zZJ`efCMx@tf*5c1lDa@=-`Us->32%-GgR$W%^oLZ** z$C}2En2y8Q^^}0Mx@IpHXEzy}dr9prXUN=n+lBO>kJB^b+xhL&A#X2;U|l_p%jSzk z6SiafwgB7%UP%BEp~5msssigj8(Sg$ufpk>@y#js3_Nv3uq@E^BZRzX?a4_1Lk>xk z?^ETT%YWP3HR6SoK3RW3A^j)g^a~(8<2y{9qYDZ2hertcCF;6{6!&Q*QZi!S-F%a! z^_)cNcWVF$g7;ze|6`b55ZAY~ed-7593jNKgBVg|@zpSD$w-+1t}&bueQZlGH5TFjQPJ|^+i`%5|MsFNS-kLIK7FP z{fr~!`XX4hu8rCeLiA)RX_eKH?a{3Z@XK zm2i9@pG2u6?rWT@n#?*OYfIfF*RHykwrwX>t0YLAi z5x_V|<-bcbz28bs4;2HFOEd`$ialf@uZv?HR>wCl?`WJ8%0V zSeXv-Qs4*zAVzIrho3NmXUprIq76?Se?J^DFXekpJx0anLI&Z2veEkD3y}Y)Bpke< zf4=~HXvRUiuG>y7T(~p5y*h#gW&6{e2S_l98NjO%2@v;vh!#VNzc&7F-k>n8In3L4 zYr{q#ngr0fm4JLmrd#w74lTU(glWbh*LyOG+fFWAxHG)HID*9n@l*giWZyV#;dSdA z#%?vDIMD{J7%@v;Pqk0|2b{U%wPrA4PZZQC2^k&rWfV_MIM?%^CztNw+%|&M0Aw4) zvyMxXnDL10N5*@(D&X7nJ`gmyLn}tOTXzb;`{o6%Pf4(hz{CVb)Dmv$BphHFik5`R zpTPORaPIyH7EK2~90cH`jKzWMw?^+}I_-dph=oQ#tpF?~JektHk<>{EF~G>o^M(vY zIt+l6kciVI$cpCy1f~+FUjSUV$=grG6CBteUQKYE!#nmrjQ29F07L$!rOEQYQve|v znlsODF@v#kp@eLXo?XbOqbebNg9yxua}XqIa1k$$S z2^<)lMr8vQsNb+G&J+N14&`D9kfW z^wL?slepb2??xqc@}H|#KjA)^Qf%#-J^rcTRkB}fbV24OTLIV+mz02sU@?RnG=z0y z2$#r40G|D^lcN?k`d`qr{px;=RDg3kFt_!-4)p@)CyM(|#_8VyzRi*UVnP0(08;7q zoLu-eg0)Q@X9)NGlzTs=JH&HD0vG@OTmK^ElTl z;29UAC(Wq}(k!FXk;#{DBUnz%u-}3{c+tcxmLAyv_@A0P%-G zMMFjb0DAdPAvI^7QwzknTuGnD>9@4s-8nh6BxjfN`bq)h16VWgc9zg@;Mk(h4CNgn z9%qDf^S`!XHA~#Oj~rG=^p;$jdET$2&*NM#fTw1jov!e4cDX&e=L1;j`9B7N$A^lJ669(^r z(g7?AfQ9AzQChG8A&yAE;vMA3hPiX@u${(Tvof*Vll9Im8$h>^n0e0pEz0@&8jjE7 z^jns=`_u!LpqR7!5$M#Ae~b|o9(_upkp8AP%`IfPZj=8n>u(SAw*f3W zy}vYn0RRHKH-rH7d=B5%m&Mkadq&=JXYMW=W#fQG0elt4U6uH39TOdH#3@#i6;eCS z<4TZ3IBaH*vwi3(& za)?r3{H#LQQ>NU z4PQm?4Uigvm;mC?aln6IM1sw*ot7tQ z=zdDQ-4bu7=%J1&aDS06ydZPm;3|&XKd`x6rmuP2$t%F)B8VT z%wn?=C{`qNm3C{=_}E!D{SyjsP6dEn?9zz=!0Rdw1~1J{LLs@lkRB9L8izuv!EtGv z;^%2L=hU6B2_R@`{W$kRoKF6$;rI(g{uiMm>>^l&ZqMrr8eL%KLRO_;Xs{E4C8KFN`iXi3V(DN;U=)4Jzt4NfQo&CYQlh>KI!@#UVCI7n_lW$Vk zrzt6UO<2(9JoeEg+PQW-`33 z0>XJOQ6#t<#3BxWH;pr5vl%XXM(SJ1z|o{@=cRk;T}X`F81NV;3;`{81bhZ2`KcNih5 zlY<3vX&~}HglzAa{Gqj9NT0{)H|{*-{*Th%{|x^p*lNbY95(z!8YlPnQ_&D{azkqf zl&(H~gL0@oMX-s7<7j%vWInexAzhDSVGPbC{I?dO;Uf_&J9vbkHskefdV}DvmW=I49r{N;Ve;j_KwLDfH2J9HBFdi z;3GH$GB{TqveN5w0Jq_?zgm7zj6=*N<#q{U$ z4FEb?*zK;bEduaT>@0RFc7CdFA_iXdzd<{`h!xgf3vm`6d$BXl%>n^7@em;(ABF4} z()Bo4feg-N0ufdikTpsN(%+^L#Z`kbJ2{)apJ97WwV{68vy2h&k5XG5Tg^B5ML zonumWJoXKkh?C2{JtQ8+A!xbYF||VK!a*YrfySW`r(Xd0F$X^E?<(`O_a!8%fGK2K z=`-pY?t1~S-mhj0I+nVfik)M4Mu?x4(xLqHETzNjk9_tm6AyhZ2w5p4D(M3_dmt0jv4^quZUoAs(O1hmvl-j9Xtq4GCP<_JuCH29}c(x=$aTJWl_GB&;S@E6>GDh zbw*xDRMLlV2t>*g=L*ww!^nN$M>m#~10PNNXE|^1zDz|3>$C%!3o)~^(nr7pu5JnR zISv!xEBbSBD*?P0Ahm(J$W@7lc_Doshd_U}je`Ej@n(~X=a@YDP{3bbqpUcZxPVMZ{lH>kUozi zKt%eFGmg$Dfag^8wpQY-X9sFB7|4E3ZBpKEY5a^gE#KG@7^naqa3?V-b{5_g(4Rou zN>WM!p}Oq@Li!+1zj^Pk5P-WmcZy(Db!2AuSQ=29!C-UGq;1p#Y_AG{&KCew01m$B zUtzOly&DQnj_>dQ6!$NFQo_IH6hLr*)xts!j))dFy9G2_4f zOBK-4_1EUG0XMu&X4XA`63_$gK2BcB*vwWUp{L;!xrT)LAk61=?M>Aq!rqv@)8W9s zAv*8_Y8xqYmPEe*=5+35w$UCS3;qxQ_|`xP0JD`WSU}&lof&}KEu?-J?|%sAaslvj zqP2~?H~l!*9iWseTP>HQLO9+ADwYwG!XuVHx#$t-0#EUAD@iJ;fBLscIO!2mKa4!j z58+VQ7gpV3vUw5xvp}KK&^=1G4d$Mz@MfP zG`7!?1)s)p_6jd76L=N_X7$1^M-U&4$@dHI*+4VNf0E<#{1-zR|F0L4&pZxp{W#Z* zi_{ccIcJMO7EiseP9|*IGEWz=<^)yK~A(qW3p$C}F@!o<17 zK<<*(TkGciB^v;kmyIihl!vj8a}7?vLC@y)u%bb$RsjS#vA0FApq}` z6;k%Ec{i&7#5lK=Wi0Oux)(PJfC~D-T*Ew3t{0Lo;%z?;u1Q&N&ImwbR_N=-sj#(^ zKoN8v!dl8$UCv7ZFzR|tJbMls?*9j^IQo{sz%64wa;;TUzL0OoPa z;e>BFFLDED%Np^o^+SJoajv0r+vrPuwu!v$6jD{*;y1_vMu`>GMVMZkO9TKn+k6|e zVL1`c*L|G?s_i)cHCJK+rcE{{sg!T+jJi&n4LY%@Z55Am&zu^GyJd~|R<8>keW(zC zbLQkav0AiKNL9pzfzb*$Ccj*U({Bg<|KAP;;3@uld~N>w*p9P0iEYuOok&qz%Xo;o zPP-IN`9(wS@qu-7GHs;Q?MOd&IaAzh{mh<3=@e23=z(!}3i48%emjhh_^;yj`DSVl zB2lryk^Ujn3Ba_8=OmS?%p1wyIoL2XC*A`Gt~i%U8)*@MuaCO}%6}VbWDQ22kfsS; zFz`{3=zE+MX1a8UC^OE!&ntOvJA0N<1CYzBiC-!GO9YT4wQDNxzWL z4Ra?*C(fmnqE62}Qg-5s=GH#wkJ<|$=rmpB|IvNl+>QAl03pn$j9jr7#)_;FOkxMG zONjQnP5|r|KrNs*Z}$T*T{!*bn6$8;A@n{|nEXFp0-SP$tR-BH0kdhyf5ltT&lN9T zI}OsHE%M&rFK54i?Ci^aA@#%b<6OS1>FWCb=(T(euq^+e7#;_x2=?shMr%vCqLk+Q z416s8%yMNDK$t4R=AfIS#qCI((J7=4z_j7?n_Cqi z{LkDwba*YrfLsJ?tW#`^Ue zv87vOnH`$B(!5xn%+t|by>Gk4{%wjS`i1lvn0}mo0mQi~NC`l1dQ<}nB3Nq#7Ztf6 zTF9c6T+xR86qT*3$pQ-gyl9|2{f5QkZCv5%RDF}~_m{i%+{)>%d@+{^sUPNg99m`j z1+`JaO#$|k1;}{D0#fr&+9SAFoFOb^*)<~{Ws1sB(97XbDu5t{R<3Y$>UVRX*=m6{x#JUV4q3E};Vs)9Y8MEp8b+HDtM%%dAjT@&FDU;-03iy1?2zlH zS^twefC*p~2XNVoJle{4Ddkz=UpY+Kz0 zT|(MfD~vn}jX+J0qgZVkz%zDVn7IKwosL!6c4q1f*gHcrBj6|jMsO@4o}Z!-)*0oeRAn$M@7F~>D3 zz;dPA%|V<-{-0U~0DB++E8A`Wct)%i(l<_uxTP@sXl&aJfIww9d>&#^NHqq%p5C4E zKbk{$Lf%+5(R@4rP{e=zg%^mk?Z&x8aA(vtI~e9s*nTMGeM)Ip5c4Vn?K{ICq?XEXlY}ko^y(h`lA{g>+)Bm?3Tjj7BYq zK|}6w6o!Tu&r`1e2>*jSO0T z?97Mo&~`o#`6B&o=a<74z%uKCU6OS^XTu%fys_(V(lp4lzu=DH#%=mp43hJ6GmLvD zB>L<&D5RPD4koNHd>qs~4sooIlt>n*)*x>f1+X*WzX|}41OHR!20v*4%gvO)eBi%) z8V~)#gT@R7)0lUn4G|~SGESH#gh`x6e=Q0?`~n^?6ENX!Oh8`oe;4kO;l8d-BhPip zxe!91yQIPG=&s)-EPR-lB|#vNVyAaP(-pgX&8>9<>O@Bc4-_dBqH?+ zAn1C*1Rh!>F4up?j(`-$C;-gH0Fd{`o0I^^KsUd+z$4Hmu`o@GqGD|?0Bq4O+6|du z9qXBUk-$`5fdb9(j>H{zMB%d0=e}&(0E8A)z_#Q*Nw*h%6J?wg5-Asv1t`zlGz?Mj z{&5a_w#8u(2?au`HNf4H0^riUXpStIc+X12ul&u;&s6}>zfed_VteebQr3wD1R9S- z+i(isRm#Z52Zh55mQBOm94|^{pMUncFLA4k7&#Y&AOQzo+d>vDkuUgmTyZ0g6;g2D zI2q=yKoFb*j3dg6$9dQ$+|J+#%z|s!Z@r<9zHnGt0JALrOwvSa1taP*L2MJ z#cOT&)+{6ZPL!I-)@$-+KWxWdujas*9ojnNCHRZ zg7hzivCp$0pyP48r;v!#DFB*cy7@V(0CLkp01?1AE+4ELM|BDTUMB!M zZoVY}6Z4sJBXO#{H%0*==*`cmrvr$`-Grl?d^CCI+W<_7od?=v*;XhdHAN$FffP;x zhS@Ckd1z%g!ytzWPc#b2ShoNosMAj3I&SEFQYwNf0L$_({8w{&pI&>)da-H&c;6|2 z`7o`fHTmYulrbZK$K$p8lD9niFV$h5cXTfw$ITtH4%eMq;)i6~gfvCUgcJgyNZb^R zw=i1~$CQ5_+AEyrH_k$RLQzORt$+>I=`yvsObmBT{0hK0V&lI8%rgRQT4WF&iy6`?lnSU zE>RkWk3*RFG}4(h^E_12OPp^Y3Y#PSe_8;J0^kndBL5KrN`~!iAzZhK7)t#qY^%y- zG8i7$jFVu|zw64t2j+9J&;6L?BrMtTj%g|PC61T8#U2c}zxKN`ux$h&6EH_fnhn|2 zu}(;N7>lz$&9CQ>c^o3W!5M$;g>;cY1n?Yr0+QrV*#N|V;zpd4c!eTeL=^je4lVYQ5|MY|kA0dG4aY1GdxC*+Uy2zwhrA8Bh!KM>nAI4y;Q+vVw6I@D z7KS+cr-?@(U!lh|4uy1`xpjj_{Lzi$NCA}2(As1mSK=oH&^`>Yr<&dEr*)`>mP^3A zH{O`mHZ8Du15`kX*X1nzN7C(%5U2nSL57ZieF{}Fi&eLfER5pN0K})!VI)AIkkU8` zL?K;e?zt}649CJp{sYCGXyIcV7vqQ#PJcp&06MDKS;)xzJ>0jMLN**{$WtIgjcJ$`l^w67C@8Q0O+XaiVtU70-SubUWr<9RP{CUNeD!btGWj_#93X4{D&0%5W?UE4#`6QXyF!zN+gL zfN?y~-^74xXw!dV3ELD;;#Lfk;NsuI|7r5{5v&T>vOHc;U%5{YZ_@2ZM<3me6HrLH zVZE{qfR~=CLmg89oOL9g77D2t=Lkcb(STIRIto%!A^wN~;ODMZz5dft*DV?YuWgcsZy5dR~TUsP$&a)y?H-HYgzy4zV9?!&W@UCLRy#VOd(^#BwfD{ zo=&o;hnO>?*VbLq*bDE?(eF-2cMSDZzGZ_V&A)mGKpp*pZx_;yFn!~wINV%T144a_ z{vq5x!hh1wEd{;ja&{CK{Xe%FYo;HUi~5k+F^Z3D5x}a4amKU@e(z)6Hym-^ILy_C z+O{R>w%Yud?TvAS z_pJT_{WkA%v=H7p%*Q2SR8If=LR~MUkHT1-53TzP`)Mr!T)G$FQwsCGeKP6nu#WK$ z#l0U@0H$35D)_G^E`kw&{IC`Oh?@#1c01D19e>56{AY|p`aBGAK47Fi*$?I)!#B^}GSbVNN$6`TsHd z#|-@&6L<{&)q-C!(K}A4xSSnN$;mq^z@6u915Dvp2M$GW>eEGoYzHGMPJ6%$zq@ul zYB{q0oc&|o(7!GH4idpTtv6=Vw; z***tguR0tqu_6Kc@YbrMga94gd#+UQzrRw*LdpM*@QVfiRjJ9;Q+Z!aWdJ6WbhV-D zleMilZ%*xmJ)vou3eA@e)V~+y{}&c z`H%L{!sD8oADb+QeM|vBPw>k7bsGA-{ASPp3IPO8kZ23zBF3C-{RykKa#_r_SDgkZ z0es3~ZUtcJjB5USgHZ*;cgS}hd?AN$w>GleZ3+HQ2>?Jl45rCBUSDG?PDXHRt9g6M z*>RrNF|zW%Zqy9aH0|c|j_wz8&pbU1)x1q!*ig?NPv~a;PkRD!5BA|o5da7X5bMKn z^L#qCuieNS`0r$#5X;%C1Yk>E)k^qJ0esl+o?qtq+h+cQylpzKBAkKHc%XpNp9YVK zNSE#drtQ(sbt0@>|5?rJ&I9EtTnLzx0?6<$<}p(MAF!4U038cAkmNrqSSvWZ_z7u= z)X>YDCg3#Qa6Vv-&U4f@%FXg$p=cKhpnroAt|k;vwVy8b<+f=;?%xDMO%^k@#G7^T zAD?3!H>od{JzHZAzZj5MbNy%i+m`=E0QH2M#N5W)8)ql*yjqImojb913Ox9BpCD+s zbZ6}qfcoxDLw=7M4axN4ZJJPRIXknMS@5bhJlA$L(^`Q$1=gT*@?ekG{rUh_SkuH4 zOLq<7K>n*auf*jB&~R}jYZu=BMyCM0SE%V~{`=6^g$l6F`_**=)ZM2R2~a?l%GZPle#y);yM-G8i5!cQ)>bXN*MKrC^mfa!`)`Q4)( zCs!!|wShf0)CN}IHoM&!{lrhy3i&z(xH-9UPXW!mC2>8_>-$3+4oO4)0Pubaz@_~6 zDTi(GsVk0m!q$scTXEKguUN;$sdUxV?95_j;>|<_=)~cg3S9Hnq~4!CCEe;WZ!o=F zaoc%I;*td&K+W^4H2$vyQs*Cdh`!8_pt`S!t3S2ULp8jGPrb64D`P!Hw{N1w{Ig`y8|%7xhCGMY2MSIKi5SkJ>Q1(`_tFzPUzn&06i)LpWv;Y z+>b~1MkIFg76KXH$K?V*>*wo&9Naj(ERF7OW$^y zxlJ8a@YX~!0KPvRt?tmme-c*-_hH`ho1?#q1!!_!sQvDi{xohJGbvymrxf0#4S zmU`g81O}j*xMt=45N~;M=hd(6I9 zfK<*v@O*!o0$6^_8AA(kcPqCMKqqhe4=x6$rk(w`UqO{Ym2mxKEW8$1fgDJy-kZgm z3b{-%`*F}7M-9tgFKyZ3%=^O&ZF{miGZ-ob(B*8VWq8|pa<3c@1g`$0SwhL6D(j6b z0@WDj8K7aY76GX3i`fyUGU~U?C6zDz(|NoUzK)?4=cd+0ZMlvR9c^@>L9;#pZ$0CBVmK~j;ev%j6 zGU7hlyWrmOdd@J%cR#Ysl|jaMBc$BHohO%y%OBg>JLSLH*uZ2@n0q;wjjrO<`9KL%Fp2V4t-IVAw+Fjo#F+6H%Wj@&RFnkk^7mjgnY z|2ovAHt=L4ue|}>dK{DuJ_CC`0=DB|%< zwg+&V7aDbcj?Z@r5T@EHH?}=p>3=4!{D2hu1xxo@!pO;;Fx>bhZs|@q6w+dw1So(P z6iOfM1k7wEjc(lj4;VIpRU-fd>wd^(;_&>l>#99Q$kuEC57YM-Ps)}EhIHiNoO!vLE0V3SX*SV z`2(i+=G2N4FMJcCWLwF|LdJMzVI}X|PQ#D%C19ohxqzI8(!f(^EitrFPK-s~iJat;Y`jw>H`B&1=ew|PzoU?vccc2-CY26qQo z#nMv7Lc^>U9r)wZbRrbJZX4LmEeKt7AX`RO#4 zy)^LDo-<e{dsxikvmD;bsKrHldyq&yfnW$xntE4kl(VE zLIyBTjXLPn4krs@rMbXKv@=9EFtF_6bU%%jlnm9CaL#9 zhVn8Twy3GR*PdV%`XDRbpz8y;&aEy+JNV}DU>qxPjRouowY1j)>o$V4lt?%30I8EZ z9(c1Oam%(#sNg6Ml>Z8pQBtw-Em&4I1{S+=qHrX>8X(WT8Gb|Uwh1E=Hyr91e@(WM zm!|yHp}gDK66Mh+_Ry&aJoV?d!q;Ki16{&|_exjHOKg!tHnfT2mL)ZWdVH&_f-go_DAK zeJ2*$L;IPCO#ngb@|;8i#R9me3|$#B)KQC!fbhgAUEI0ZV0k4h>3`n;ktFWI+Sfv| zQUYd!6C?L;HECFD<|xmDdcX&xNV_Ffo1Otp7q*Tn9Jif$ClP_y)olw-k`636h_+&I;QbnUyA9*o+YGO`&%1r4A?BIhlU9f2_X5C45P1NYp>&+Tey;5Ofiwo7P5|{A zz~fPhgIhTeC18DpN;&Zkc(Ex2Hhqi$8RE{*NZeauCy7EbVCUSGc~tsKOUeXKk~~v%LLsGqX!wfxg%^PmTuLD1yUuDxL*+|w-et~mEA*5(~aT)`| zPRERaS3N5DvCu6=0fZHYLQ;Qb0>lJ5Nu*Q3M4Wsu3gZghyLRP15_j7}{8Rvklh;q5 zWn>@v6)hvA_002Yj2ff|JW42Wv`d3E)p6MvMpZNNn_EGk$g(sc`s`mPb6Ec+)Z!@J z&12M<<O_LZYyh@@q%$O#tKK0gn5r`!Iuo!^8c7tKOv^tCmM!G-6^(=EJJGE=ZBnL9oLP2NC3q zL;g>ZZlu35R~T2Y_>*u7M8DmRxGQHZn8jI-?#GjhhAvM#5;DhVr94khyO_{XkP3H! z0G@X#K}KCG+EoDK!jy5u!u80QMF7*zdC&bztafGZh`u&vF+c>M#>gvsQ~+RrwbJZwr<4riyepy_)?hLjk8F+ z(pYci6jI?a+RKtJll1l2AoHy#$Zo>q>$sdQc;(a#YN7y);|Rq4U{o}0+-Lk3H6GSR z53lh2t3UecG-e9hqvD|k0J&+a4B&z=>m*#56rLmy7n^P2mW0{m7aQdQiqsxW@s^mlDbmsEBbS zuE3DEO1Ux^JBuWyvlQuw!e-P{V5otrlGd&&7M_9J8`u5QK6Si&loXKsk(=MKVMf0%dW+ ze#xI`4db>uyHGhfm*UMQ@=!ZVfFcO;+yDY9<5#wogZE7*APtWu1yFSabM9ED;}QY{h}bvokSabzt}1$5BCIS6{YQUGH6g-MEVXwlDYqdXZ20HGm% zOT6^n;d57G_ie!~FN0BTNI6We>v1sd@HZ(l-YX8@=M`v}u}|U21v&vBtPA%q zA(`F}$^II`@z7&fTY2wAqdex5SvenK1h@IgDIwG1 zO~1Z!yj{MNSswCJs9qv$(u_!ek$$GkB;AEcA!)ihQ+Vh%Cyupk`q=>ZCPx{NBCdXD z)i~TcEc=@!U~w+o0w{qU|G^kfzMzvLxbZXTFszM}Py7$G(jXsqHa7mKYSsuV08Kp* zuQwz8uU+1Z-&!0^cPH}&BeQYi$7>TajH(C$n&_}fpt#=j))Owz$ zuZ(M+vHl2_g=WG$*N&`F>lJ`WKoiKqgaOzsa!XS$iu5CdgaB3?feQ68ev`Q0LAibu z;`E!rxz^ywdF}{8{5K?fTZhB$C9Q_@NR}ILNKkBwax0oEU;d*E=d;D684|a|U2cR# znBjsr=Ra0k$hgYSl(FP`Y*_ktN9}-j%}gesv0bm)T(u7|^B|TBVi!IlaWeuq;t0}A z9F22+!u~P0)NvITGO{;0@HT+!yZ0s2%Ry)qrr*==;$p_0Zl#R$Zz*Fl824O?|H_Dq zpoTf(#1tN!lFuruP_Hy`vVGuj{3isUwSFM~(*p1&%2UVx{*f#yfr`PTm~*Wr^Tf3& zV~l%}xMd31a8yVE3yxfd0n|pxFJ%7$j|(2B1ICLaFEF=J1N_Y*0KdK$ww{ypPxC*m z0FCu@&XQPm0H8h5>Fq3uSfplndrBE&&SL4%ZQw-)!-|83EGhqEY)_`3p!0D^+#VPz z@)E_fjFBC&z0-_XFut>^=ghmPqX3Y2349f;BU$RkGD0t%sVp`cz+>I=t!3y&0BXa! z53OnHsB$#jgTly(3v@I4}F#Us;}c z%Vv3COBq8ZKczi^p??EFsHR*5LIUJBsvoD5x&DvxpFTbsH-slfgtjs?<-Y?{7%-Ld zUnByEjOwjnZp?MP>ZnWh{K(k#`3oQ=T9z4mU9%ulxd6b&=^`#+YM!V6ZA?l4 zXgzpA=dmz_0lZ1%UIk*4oI8GGBuh`bQcwWbSU>+?31F(^|CHneDi=~R*ATb;Rbkp- zt`b060xk5X0NiYw@lVo>KQDl15CQa$WKkCh+m)8{|G_kmzo`jBJ#cesh!`qp1c8~H!Kovzg}Hfhr=E!YWoU-5 zoe|suIHv;(X7r6@VY}W_yHd|~r3`XQ4K6F$(|I1gCGvU=3Re2lT%-yQ9mS0EI~=c) zAmJJxhfjkZ7$=KoW$^QgGPHgH6elpaSj(QAC4uU8y*}Blbe=IyY_%$pmd9VLdB#Pl z2Sn*tKysh0qYB74qNpg)`8W#06MZ8LyyA55|N1htd=3Lx*p)ZuBLA)3YVK3hbZ%F= zEcT3YABT;xStDLiw>#T~DD^P;xqmHG5yn}R3FygOCl0R?Ew73|h3Cf4mZ8}c1{#1` zlyox_JYAiGm+eX=&SBe?PK*c?_^7+GU5L^H!#Aj(DnLp{K<}6aZt~UDOSsTL276T}_od3=ukU#5!R(LF(^sz%u|plfsbh zW}>~ns~xaq=K^JkY0(u_j12CU7=%j}=g~2taFtC}4 z?d7moor8Cx*> z3_T+|##I2}=~}M#?6NuqELIofBXyBx?u0HCg*q4>G<)`0QmzY!k8>T&N6gpu1K^V{}2|PpQW(%Uvxe4m90YKpy=T=+l_8{(yqTxfjzR$treg3P_gPY>H+yO;!1hHdXK?Rrvmh8Oj-) zHy@XUQESdzY=p6|s>||)5~>H(L~xHG!OodA6o4JfF1h<`W^$1+%iB^HH7GzbZLBV9 zhJ*iTuc*RqFNul#37mI~>wvLX`Bz1l{HwZx|KR%1pBo~$Ve#OjzLMR}tceA@0219y z$jEFSz9DU0QsLw$10eT|fcNoOwJGD70gorlT4s!KYPuK;!3 z$oH%j(-2wv$c`rm7ChFW1;=hCK$Jy#De%GnxBy7qAAvz#v!gNrKzRbN%{P#tuC7-= zl5qy+_46RDA_@syx(QV78A^;XM&$Ajhzt_Z~}G`RxI6u>Fx&^f}8at7v&9s`hKt|GDfl7$%$D0>(H znHP1<4!}4~n*cP4r*mWn2NswXT}Ay$Ii*|{hmUhofT$=aOhn3UNT-*jkFufwr62kad;FXWVkPk& z%$*V3&9A~X8I_* zf-@WTVt7S4;t+_>LlC8IgdtLDBe5{lwG)&FUsdL5dW}bU8X)X1@^_#xf=he6?d7m* zUM6cd z6V7G-y>cJObe!zSdqDi&KoV?X#K4GVlvbx-R=dD_0|z2JwV6rDF-0=IQl$! z=92wfu`EpbRV}uEReYL0v)8o${_p>56fmJCg+XmrQwggx4A{i40TC=F5}*Ls%S6;? zdYMeqv6~6{#EJIY_G>pl@s-w)~J8+2*h4VwJ8kqcpS&V3c}(%0S+)?**p`V{=HOq9MOi>)Dv&7Hjs%X=*|Ed61R%mwOz^PO#00~JIl0u(d% zEXTBtR37P9CA!YNs(u6D9C%1Qws-aufSweFmH9xzvCN1dr~uo`1X6Gu0_$3ua`4wg z{>qN4sLA)@Ev+JpEuX|juHcv}xGXor5QkV=%I1%(8{@{vI7|~^4CBg~TRLRU%M!(> ziLYt_5nT_YJ}$}s*QWf~1aNmviyda#K7|2`Wl|U(=Q7@DwZL8`Vhsv#`&t%!LsquY zL{Yw%O&nGYFTM9C=xy z>xgiXAv{$9x<#|CNjwapJ%yom9t*yM=8i9!D@fTj%DyUnSy9)3zg=Z` zF1(VaNHQs~R_52Y>AbpaKw+t|p5L z<`}C-(cFiI6o!X{0~rx{B>^Cq%R_f2KYG&7n5RYRn#5s~@ECRD433KsZ?o78SB7Er zG7J$==NQ8m#@x?mRx*x<&2HxU(pIkLr@=wim!5#MrO90dpj}NQQ1h>u0?5x}F)0jh z=CM2&q9pxIF9)`3M_0dgqW}P?%RV~779(=AVn?0+Des}9)!4*4z-2)B~#Ge$5l z{E}n;I0%))5M7ukxkHo>P0*5fWS4EV|iIOZyqX07N$ti_F z=dq~a=nj_u{6)@OWz0Zk3O;L4I?~UWeG}RLZrtR<=8YY2zJZv1mdW=bRpJrjIjq0n z0Qwr{lDeV*GOm=kd>r{|WG--mQP^!j{~zPOrtusF5c2#_r7$Gsu}qj+S`&KT8`{1% z*Rqhfc*3T+zIJhN+@#4HOXa%&D9iUERWxv`RKY@(iV55Z3F?w?<4}(kI7EVh z0sL(s%%$esp*pT!0Euxd%wcf#DGX$P=U_P(LPsqND}8`m)>t~+Ao%Cp_3_@BMzxwlJ5l``r&)J|5@tR6AnD`{OTbtfEDH^ydQlHnGOHT zHq_KO7KCWNo&Ub;1jGig%{3^eR&~+eU6VI#g+!c%ETn!(z84^ejGn^*088B_gFFr8 z*lwAV)3ts7Ol5>v>pT|q`T*#eJPaQpd!*ghN0!7r+Po4slQ*0Ln$u}B1vVI_e3rW7 zlf?Z1OsAP@-jyu1XUenzT_cPQA-r<#t2_aj8TbUOZdOX0H{#YM4im?u&8+k<)}}dQ ze3rU=oKM48t1jkco(j-Aj|I(9ychfr-UqMXO^N(w187N`+=$DS8zGlCY?ZW2n`ujU zyo7U~x6ccJW9d*gkA(*K9$!C)N1TsEG&JQg-%;y`f+=+)ak+9MmpE(`uuq%e8T=pn zzzN7IAoiLG&+3`;(J$9)nAGrcr$NcAnRWq?xh8FLN8FmkVNW2F$60;Z|A1T?p2qvH z55Uk`JMxd(Yo@ZP;U!I~;nd7s11K%zvTZbL_@7Et+!1#wOB_Dom^@Ctpi=+XMa-r3 zJq_DWUJTQ3T$he5-DC^+tN`5PoEb}`HkI)|I5*l%{yG`jM8%D`&zi(x3&ixBx~oz) zJlL?P`#+n> zkM!tYP9nhJ57JzC; zynom7nl$Ry5t^R{8RB-r^c#=2K303rhz0GG0B+p^Fs~7f(^M#cOsDEh`#;SKf^axE#sACj`2s7LNnf9+j{d6HB1wi65X>27f@UiT()S?LEAM4jq>(dZ~N7V~pdW_dQ z*72UaqH%>38K8IAJS9=H0obWT0P32wU`+L`ylvx8fZVVd0N`C!+5frhGg9TH047|b zqx{o2HOBDSeewdBZj0E{>i8LP5CAxEYL&sGX9Fmn$pZY?SR$vv4O@YN#VUr)06~++ z0Qiq*pXt#RAXS7cYQ<~;dURx;h5?&(iar@|9Zdf`>}kZYlHGf_?E-)s9*EVc+Rgu) z9OdBPuZp8r&j2u!-;5J#&0}Ww%k1qYHEaev^M5@143pR~M99_hcNKHJ(NX2G8}VVR zvx4fn6sCJ8#X|mZe8NZCxD!brB7ih&jWT!?c8sas03dD~U@hh98YhHwBLBNm#;w24 z^sn=_)vxApcv; zPrGhbNdVk9=02Cm#vPz^Uvjt0l0R+YRKR1d<{!2O%Q>2j^Vnv~3Apg*(1_iy7Jecs7ar%U2vU z=BLBx2H@qb{!;!2w8sd^75@iyM1x^2-E~*O^qZ|`cU!jt=o|W41b8=L2-=k2=@QP~ zL3#c@@;dUpU%CZw2N%n$b(9ZTnytDM=K4J# zu$Pb6j4*yCS^CF%sX~AYb(9ZT+K5d*%=HqWVLy>>FM`xU_fi1PomLe=;|`Fq zB>y2F&aL!F0Pm*>O#+|-0*^qY3Sjo}#F@2&^8d&3kE!hH6j}1WQULui!hRhQCl#@IpKJI- zFlrwVh?{3E3GhDesM{22v z4PlZ)l*!yK7`5Bq%Z_Pm+k`H(HmjxrTyW0ShB!3)nCx$<@896){3` zg_Nt+QNI7GHM||10Cpbef)OLk-^BLA<~gCO3L@RD+PORGqkO}+u}!J(YSNW1)<9kQ zEm78l_h|~~V_XPXu8?vW9n~H>zU~PlKyrvO);Z#RFdW17;M8X*YQ?O$S-5d`ZMtRYd&zhttem;a|R&KIOMoO%GK(~9y%HxCo@Dj4TB8KWeV_3 zV<{W}eBHM!ws^E`N#r*Q7!?GKagI*I&((Yohv~k)a&^csEefEN?+VQ^lxaRtg?`i<_oV{=}VG~uBF%&^tQJbvz0(F4WO&pU2NqUJ(ET5?E;eduKTf`1V_X>#5bS z3HY??+%qUK+?jDfa8|m#WZZAVe*rO<0Fw9ZMgskO_l?Ebev<4@-%yme#7VYsUB~DX z<_vNT{{v35O7jBHO#Y+*P+iGoTk_ACAtoO%N0H(;qP?wC)4?*{w+o=ZRwM1{s}(>v zHhdg+ODtb@Q`TdZ-t0G>jOJ>ldFN|hw{lZ?|f zmpbB^!*Vx$=z!An(0_GnKPeDN+A4E#cjLjD94mMh+RaPOfC z=A9w_1U2%WmP=5D@}E1v2Z}W)qb?K|+XjGCS!bC%-cW^%Q-figi!1Jv8%e%rjN6ub zDoLZum<_<2&I2oqZQ}~0afotF%Q!+)5ZN6-Lb#kU&{5Xrgz?IH_Ug(T*QRvg8v#C$ zIZPRKpg2Idf<0AqsYC(g$bW7mCmp@nNNmp-2uOf+S)0#`LzFG29VqLgklw*u)pX;K z_~HwL^}zF-!`31Ie-r>BxGPjZdI#7S_R##dNvV(jGnvDVI%RGMLy5JXEcf+lr+vZl#oX1zFZneZvV_aISVRcjt^N42dM}{g=`0Q)A;u0GP z7aA_z+(N7N|mk6XORHrqyV1ft>zEyiN;L;?AA4{ zyW#R5S(>&>-YcH~n1PTQHyMB{YCaxsbYx)4v(LQu3C0b>VeZm|G*_}ZI&LJ2m1G{D zCeeRydmK&?r?tVbgU9v8rasQ;2}mS}h6JARzWUZsRm<*#{7*NIvg$iF>k0>xrAhYY zcm80UBe4FoQeIN?!32D(BLh>Cea4CNXR65P$*tShWF|V4uiV3FBblIT)a(w_(;q8!f6iY8zJuzo<9gipK}H<{_C z-&w5jy5{5G7ABwa&P$SI$~fxW`pA{CZgi<7cRXz*sF@@Oa%|cy1O%u$MJ!03;%Ie;qfHmihMp_&9u;HkfgPp^z>$IVvAp`h?PybsQ4d=vOGIW3+YV zi%n`yw}a=?3IF{K-Sbw}itBliOz{JLw&o+B@{SNl6?S|C+kKVYY5WTv)odjCGz2=1 zzvtrsRWNfB<}%+;zNL?{5WuZe0hGX4TMrL}%_bUTI~dukr7w|(^HxIz|D7c3GPuE; zO^&%%0EgNU;D(~ic}D4lZfnQK{oHzCZn39N`9>X8ZX}$4zdeou^KnT3QkWqHgFjc# z&LUoNWwG-7osl-Hp3sXfhcDBa`yZ zcSl;D?m9jWLX<+naU&5w%T7m?8ws21O9$3%j(*r4hY*c0&-oAWA8y~$=U&^=M}70_ zVnY6_X(~4!i1ye_5@U@7-k8x+`?$#os7%3sQUT1>y`iG!L-|h>!BH5&$fUfp+tJ95 zkNS&eoIP1JAvB>QrEUTJ&Et%R#~C^Q{%V+h0}$LD;-?OGQ`6$}^p|G*qTf{ln#IgC zX4>zaX@{5s2_QCgs8)9WxJl;xQUOZbm^f2d^8t0Mom>POCJ7D(!=$_)=XU=(%$pzP z8m7SNsCFZ%c$|Kiiw)3PE)J$U8u9>a#4P*iY8=OfXb)}#5Kkdeg{Tt0Z&gWp-w!=d| zhkt+PYUzP_t`fi~1-!$WuPKVqxJp49|C<|jo2r8>Lg*jIO{!%w(5mvh7qPF!8pXr~uMs8znFysh??1s4;K#0+MCpb3ggKKgP(c-d zefP)cQKMT~ekI{7=JIDt+55+nx@QQ&FXZ!h@?hsIzunCFnwk&b30N5o1N?dYdIhL4bxd=Iduu+1 zK|-I*zxkdXtugsaY)>{1Z1j6YCe8w@%LOBK4ZQUz<+WB;K`H%Kt~qa!kV?72U@12Q`!Go zrj4rpMt+E2MhsWOefY^tytEUn_e0 zbLloUDD5>Lr;?8V)DorTov{rwq6={Dk$_gKIyE1G0B#7CW0d<}S*@F+ucHq&fOW_! zO@4{?CXGn&e?r^1NeZB}N|Vf`K?ERx%$%%*0j5b+r1{4{A5nY@OK_Z6;NsJ&cefHJ zaDdL;aY6Lr{%aefOkrFvfM>F!Pc@Pz@WiiZH}o`V^hkM}&@pe7^CoMGHReG~sS7Z5 z7-)e>*L<`S#kY*xgVLXd8#`u@w=F2npA4K7cwPRuTf=K(X~08iz4E z&q?B!W^TY41w>f>5?`x`fO4A24K{S*M8b&4!o_+8}zje$Bi((&T2bfD4CtqE-Q8f3;FS3{phl$oa+ri6D00ei{5LCirPGt+uNM=qQj_T~K09 zf8YTZ&VrF{(9eYwQ39mN4+_AyA5rZGjmqPlHC_5Qvj8wfYP|HeSRSXJC=<}yFN4+6 z;vfLf2&77C8~lM+E8azUa0r6#;y4ykr9}WavNzn(T-;6V2i-Vs5;K5p;5N`OZS3<# zqFAOFfbzjNt>w~ofKCriGIjl$8VTm7Z0*h<9HHqV$%A0KpN;|C$_@Iz|4%$w(tPFW zgwwdaRRFZl3!srG{d2oH_$E^>-7-K2KQxRP7Z$@G1)yvPjt$-LfLisSRm*==?yEdl z(rN>7Q2^MIm0Vr{57VgP;zAAY(Mgo5_0|r)X)Tww19XUU=`iMgTSF)GkT5fdev*a% ztABj)j4WSSWS-Q`pt0&@Wpgc5z8_x3O`hgWdhc@s_jHQ?!|*>`sQ@1WK0uT&Gx+9n zIQ_$z8xJb6`~LC`1psEw3Y0xTMX)-^f9FI1o5BG=r1!9Y=d&}w4_54Tm? zT=#xpdNFU($AOcR%-P#4JRW~>+@8GHs|4^Oj~^c(%2#S!2RP8G%#grYBA%x1x^)=y z)e4w^QNE^F2J!Zgpm8El0%`WS$%!3jf7K^y&4P00bpYiTd^>N_bKoTVkeF$EuM+UP z>d?vdqH3q>i2}^90+8!#c>)Xou=7j;$N*eCjG0!Kr9NR&^OLTT@syA@;08({ox-#A z8FeCn%1;@%MS$gEwYn&Z1VG7|d6Uz`fs;G_YoR`aVHLHuzBs-|q;w$*{wz^|`+T2m z!vJmFSS&{YAkK%TT^F(u8A}8;;V`oD}G zC2g_?If=3l`k@$7509fF2B~k3ac_(jXdSXoop|m_+ zCrg}h$X+9))?v)~m(}0Rf(#Lx5!CczP|?xQ=7z5~(qi)7lUB|&1Uqli4x9{iq3sFX z{1-#I-lLN!Z&_k;ToDJ;2ye+;mP?lzq-Mkk{b`xH>+WI9_GR@;fXCs{@r0BHeq27(1NH*lWbUFZqj-Jh1Y4mJE& z7=t4~&Ncd^Xld#vURI|BXyOxf>mhjp8yea$7?G&XcI&a;whIy*P;c00{t?C0i>^X)VShTkR>W-@q~ zsZuL|r`=UYz8y__8-M_j_z%@!Me0`dAyKM(P)CAWTkrv3PBP^Q(qu6pIg5(ag-f^0 zcs2Np*)RvGIm~4^i7~lm8vl5lAZHfR< zc5e-eacptzuGvSXlz*%oB|UF@VT!ytD^1c#XF0I#`~D zDKc+%?#ZLK5b_;;`_Vhj-&g$2v0Kw5AGA03?6rWqsD@ z%#{Ql*PN*0xT&7s4fppbLGcYsxA1>9I6&>**(-79K zXDNG^(6!s*Jfm$m1bK0IR~$QxUj^XQ&FYF?Rljk9SBEdj-M27hJO#B0U^b^pSJ|g1 zpUmH1pAWPjq#9f$WJ(C9#X)|9$K$O#)Lj?#*ZwDGnl$)u~*j|4PB3$RZJ~Aa7-WypRoO?I7 z8_0DGSbyR*f_QlWSVO*&5X5l+hw<;n@ng1A#LcVfv3$yJO$Nhk^A{+99tFg6)$ua^ zc*wW@QPHI9Q^k5l0M$5LD&2YFJj*^a1LtWo4O=m+$&1aqUCy*GtGj+YKpgRVho>1v zo*c%^SM^c;TkmDZq)97)#f)D;rz(j(z(ISD7@>P5?2y>-7W=xq2FvawokDVP;5J?` z#nW>0=5Jd2N4A20&Eyt6T5%W-I0up(fbnHi2Rsc%}^ZZXLpppMk0i5n7 zE!`H@FJJU1OI$*~MF{zNEB!5he{Btx-ATHI1cWD$VhTA@IBy=umH{qD+($Y9iV7Uo zodOYu|Hup@AHEG{inw8auYrk*mMK0IER=}*@;Z{Plk^J7&A^E%N)=4UG9RD->nX>d9C5kiux8HU+zd|Y@U8~DYSFwOMlPci z&Qrv3Rc#my{cD=LOMb1ezaxX^<|%;rD1brUQ~ip6(Ad#1l?(x^b~RjIgJpM;oRHe) zZIda={UTI1vSUE97S?;OR|(P<$N$^nc*p%Ho?T9dcSC={Nlj7KSqj_By0|*{B~Jp1 zjzG-dX-eW`H?%+)g)+Oi$t)C^Hjf&tRMHG>EGAUa1YDgcXZ zgM}*ipMGVSOd4}*4OWu?tdQ;~u6ZI;NR`>n+cs2rL)?)qGj48I44Y>ydE<$*(9~}@ z2awV!%In?_oy5s8$`>l&WwvkC(aYJq@GVQFs$JZWPc2e2M$W+$;iLSZS_`+3_OxSijwN!)RCTgwctt zePw=2!T$~P7VG7g?nl1rwYZea&f6XmOaW@TCXE=^mKok{%lKLfRndC`;}~(K6OON# zqWsN%9ie%iqI@O&nWSQQ!g`OU1fE4o(LGu(fMtw?m*((P#O4t5Qm5<}_ryY$$T#B! zwXcjLu&OeUTdQ!X$D9E2rCfI2_Gp=cs-`g$fVE`?dt^F&iz{)Ez$pVlP}8%ox_uT4 z!|LG;_@mjroK3@%a%uS1TmmG84X(-?73XNp%lp93R~ERlO`Cr%dgyF~COL9s3YGll zKEmRh{L(F(K&I*y*l&=pOS$a4ZS{OAQ=Y<3)$o{AH_NV=6O<@w$}D&f8w7V&`pF5|;+nh6AOz~Fo0rd$yrZ8x(t>M)%TEn#2p!}yxf#I;~R|ZZ$EHp&EJIb0RC_Co9TDtlEB&uE& z=jm4Vzbxg-&f6waT9_LSK1+0T-k<>uQ3; z69@)fEaC1W+%JY0H8D5myvZz;GqOGgGXP_md4KmJaag01{-kh z<|AK%a{bT|i=x#^*w-p)wGv3&OyV$<>cMnk6Z?iKFXiIE?XLSF)Iwyw?miXKpxV@QAa*0_5AeK+VT)J~kxz2lJR+JP_K(H;+saE?_Ge4ayxefWlHP z+VDgE5#aX!SA%{a=*;#-*k$mH%wc2vwkU`53Tu63RsiY7H^oJ`>?G@~0*fSF^=t7Fvuk zgGW->G=WDlJEXKoES82c6sCcmYnoLwzcMR;g9-h$UX{ePD|f!?RgKBFK*hMpuCbLw z;u=G2F*JEq2?if(PcsHZ6hZrG0Z2D1-23Jn?=yIqz{3olK$}9)p}ZOjQ|sb?|160- zK{nzZ%k|`hm(QFh&g}@qeWd!_|8isWRb#iwcHh!6fEH_LoZ5LyDAxe6gE7LoWM*Dc z0ADSe-yp|?fdW{Q)=7UXUt!XrylMbY*Q}*3i%m3MmcDKmtW4IQ2Vq(6xA_Y@*zlgO;Bb^D?BV%(Bc1Cb9&=3+}-FRuAG!vNE? z?IS}5CDZP%k-Ox7=it^GY)Rok0RTE+rl6IHmzZBOkr!%E{-itTDn?6g?z|kj+y{8In`vdrHc?TYp&tgfk>yW^C`IjWeT?9XPXrfU$@ zhGPD|#=)>|Bvo_^8ft_yYd1H5x^_5r^jUjJq5c)nqH^@X+^w(hdI6|8ylFsnt?@>5 zI1=tZ<=<$_VjGL9-P9wRs6kwb3tw5RYHrPtA(xly&oxH&WWtiA0!01x!R zh+Ryxd9EIF9OoR@Ck6JOEA=i(0W_v@zTrM|Gg38(b7PxIixWY(krW#^Zm)0c1_Zc|L!^UmyVakc-_M-kUT|GYItM9A`5YalQ2Z>MZ%giW32v z+8%)XH*5FQ^%iq;Y^%Jpg-8AEbPEHV^!rSBAy51HHe17MGg}MVDgy7jyWb_$_z%VJgZ!bW4Fi8%q+8& zcRhtigfaC?mm2nIF0_sMP|G&sC(+YW>52sawyNNTh|P*Bsx)mHv*w?vA6~hy%qMJ* zeXx_$M=zbMyz41EB8;hDy4L2sp<&E%egp79t-MwrE-bvCn^q@gFjxU>9f)Ig;nmFl zd?%;tFP&doP2u@ShB}-i%;f@rnU-8O=9tbx%k?RwUY)@z6}VZ7ttp>qvL)hPobkj=#u`IewF; z<K2oTE_CLX zp`-UbB&5Cf!;#7%)`Io@0oBuLKTiPLDYjcX@W=q*;uM zGrFA%sa7p*Z3>uu85J=|r;5t-Gh3f*Cn;CgAm(xU`yE{$2)l=Sc-8j3;skWo(Q_w& zYmPu1bL>VAIX;bfO^-Rgm5jW+F^9i8PhAMlx1@P-I%i)ZrZG40AC{j$py4u{{(eV~ zH=`ed|>lt9Sgbht}i-q{WVhcnksts+G!47B3tI3RSrz0EHK zxibn$V62Xurse0Jr(-;}&|Sw`>X~O11oqT#EDxRCZIcnI{8H%YRYYUhRlf(Y z-aC%@cH^jL9=GYCtrLZF^C@|O6)fc#cQa28UuX$j?XoW^fwuZ&*~M5rJMnB+i^C$^ zJUuFbXJ{ zx5`_my}YUd3ShVc(2@!D#32;HBa8^ir7Kg2@#=9p1fXNSby_m#9COU8Z==6WRIf(i zsJ& z+QHpix;NgEDuyWM!-6#a2*))yUOJ!76~U-!_RP!i2>@~4F&84Fmpa1R9v)~E0BxcP z>(SWF$4P3IQ9x6Zji*t7Y|pn(7+zG*a^!r4hoEzGJ@l<`hqou_SsZq3r5!jd7AOE3 z&r+o@>6$90)(A?($p{G)k}2Oq!~hDj(ykwKoKI7v0sV#g46S^`;O1n*j@mUsVJuDs z4Ax`Hjwo)OTf9*vLljPIN|u8c!q}1$(tj8RQ4uVT?LCmzQG^*di!cq6;s5nxj%hA1 zHH(Sr=kYUOkIG7~-_d?WQd!B6UZ;pIQl+l&kdZwGhT86l>05?0P-O5J42C z6H`a3qzz{L#vw@Zc{2RJc+4?v%VFLU)!P!xF{cFJ+&q6S1K%1x1ml$c!5w(J_Pcvs z>wogf5W}3hi(qJ`b1Jm!^*Fqe5tZ};=hQqKuP_MGY7pxib8NE||IIx07OKEBs<@yy zqO0?h7<&2N2IIhnk5qvBw)w@l)g(_q2y=Tag|W;PI%?Gsy>DjGPBZs)^X!{_9>E|; zr{QOCwj5@W0rS-RJ5`Jy7C?XTY`+2sLIId@lc{m5^qimhhIu@lx`~p9q3KzDQx3ac zAAoX7I<_D_!+1g9^DrRrVY4|ZGt+b%1z;Ohyb-`dzB}yt;#uOzml*$wmTf!bFPV`X zw+fWK%>p4_<1!c;;*@kdAXH6pqL2uch8f2Q!{Ut%fzN}_u|L1S9kTfAiNfp9K>(+n z8QVcHem|}hz|6~iU*{+1vJ9l^_OowOwz8?0BaCG)%htuZc>rU$t!0q4;py46BkEXRb z`pw*`ON=#$pX~g^wK7rdujJXNfWTEv!%W;cBFu_2P(pv> zMjgSBzoV}UQmtCBri17fU~6-Ls}#T*#2@MWR8!~1vz?hXIUlCBDs%IzHen6|0B)YQ zPQsLA_xagK3I81LzKfe`o5GQbz7)KAM&%_-@^+>x#1%V3Ce zfZ=iMZ><2t!XTTZSX-vdI(^U~2NgixE>i$6Hw7hFyqlENAf`c93;;Mxt)v3hZWjPZ z-8@wYvme>C7;l|qTv0}`oszy-h~|r6i1XZV_9%bv?tMb~LrEKHQdg$wDFBcgR|=rN z2GN#$yr@-jHI*!!BCZmMYbA&6t=%rp)CJ0yT#kO)kNz7G}SH#e{$!FefB!MaUNZ-q`!nhYWoZFh2TB$2Hi5rIJO5M7tmAt(Q3~!xi84fKNHS8yj zK_Upn_;=p|+&MZKo;3>K#(Zv6;au$M@4a8XeY`AqAJ* z&j_->Y@Ld{_aUa1aI(uKhFB{eaI75^(VLPFOI(Wsg9EG}C>dKx;&NzZ%hbwk^wak9 zxAo3P2RvEZiSr+0Zibz<7qiss1YjFgOlzm2z>QJsXtx}#-&aLRIB{MMc~rn!f+Dni zS@N+GmpIQiI4=))tib}P05TWwLj`pS!$VIy5TCBZQp@J zqYAMZY@h?ROLs^+avnV0tx5S0yzL+_#4W*b4^)h;)TLXP+e8(@1Z^77#az&c(E%fe z+y6Lob4mg3+Xx_Z<(XZ+7dtHhr$!a*RFv*ecfC0$#D%TFdYPZ9tObe7(e(f{JB0mj9%A|7PSo z{OXxi$5dk8DslW9oXMYBaRYz-CoawZ2!O`!Fc}98sDPIeKnS1NtNk>+Ag+cc&W zsfUBp*S`o}cJQ!4!3ET1pF?QQ_}qPqmzDv00NnBXT=>Aw=1GklASGbmd(D?T{#aV_L^XytE;5;eCqp@nUTquX|x)ce+6<*l+= zctfCio;lCLZEiHap{{iFTxSR_4%&)LXkmL6gq?i%-JFKCl=`<(ethFuQvdUT!@h7; zr*)WI{B$IjXGS=4iAfMwO%0{n`cr&)a>aT^$Q zz|S1Cb(XLsfSR*hl+i(|_H!6T4gQQq!#%VYSZtBuSEd1NdQWmfq>2!2kdN07*qoM6N<$g6X`KWdHyG diff --git a/public/images/pokemon/exp/359-mega.png b/public/images/pokemon/exp/359-mega.png index 8b6d0dd2b4a8f41ac01bfc78b5bc9218201cb8cd..10787a35a8bd614597238251d09ae5f3a416c642 100644 GIT binary patch literal 5305 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 literal 5065 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 T7pp7&`;jxyGeMGcF^~QOVW4qo diff --git a/public/images/pokemon/exp/6503.png b/public/images/pokemon/exp/6503.png index 28d3a366fefc565e1a445a2bdf8dc3ca5b7ec166..d1a698254cbeae038bd038b6bbbef98540570d4d 100644 GIT binary patch literal 19998 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 diff --git a/public/images/pokemon/exp/657.png b/public/images/pokemon/exp/657.png index 6cfff5af3f71e5ef92fd2b0e6eab76e2e69f750e..404fb30a2b227a9e1fe95306a754885b377c4175 100644 GIT binary patch delta 1639 zcmV-t2AKJ|4EPL?B!2;OQb$4nuFf3k0000jP)t-s0000G5D)+?SPM#e0BfcIoz)9g zYABYqLCp1Yb92AHzxeq0;h;M2##8_7awo@}mH+?%4|GyaQvm<}|NsC0|NsC0|NsC0 z<&B=E000HvNkl%@P7~rve2mLq8lr&&UAC8+eSb1Q779XLnz2HJ5%dTouA7>S0NB3D~k-F zFv~vI#!SwYKQ_KSDNa^K!iy|2giMyFn``=@xz_see9RNsxWPrA7n45A+zs;~3k@M% z%4N|ro9erIy&g32{$`1rDSMJ}$$gxa6=tD&s_l{`aewO_S!8agcva_RnJf=CI+ta3 zS>`F9`5eth5W{6qD4spsn@tHa%f@!RDrGkcV*EK$p{km+{cSev;lk5tOtmat>ey~v;uvSSCY};9ol4cpVzsVH zUpHao%jF*2yJ;|qo6cHUJj(VNgL4R(OmG|WLEIAtUWg42!0$I99tku_+U4N-{-?1zUn=Z>ol)!Z6W!Wq|mhYwK z_GNc+BTH)+dvOgVl8kx?V42|-34Vwn0vqXkPk%e$F&8|^UR^+)Tc|(z*;;#gyQ7UC=Pd~}~HDJ?{ zD1VqNW9mk?U*=LzP?q9DfD1+pcP&PhLmMLc^ zSDU}B^DiY235lWj7WOi0YF`0?;{BPd2;RBz@MxS%<|vT2bflB}mtJgTs>*u%zlbDlI5nLEM1DfX3_S9x3HmoR$p1pRr#HgoLr8U75GADTcGUU ztr5%yG#$ZgK+`eI1~VPOY(UcjW&=dQKu`g*8N`pmY$D5Sy7QwT2pY$1>P<_S4S$v; zV;W;w^BhGz`w$pV>zs3%=GKSEGX zHVep)&Q*wd()9^~YWPt%X5%a|5Ja+`%!UgDL0;C0*?3P31bLbK-p*|N=w<{2iOe1; zTbYeB`PfLd@S_H11B0M|tex3lAb%(*3o)CDV<`{>MPvbHQ*lTJf}p7Eo7q(001yO4 zWdUYW90mkIQ5@IAY(NkcmIawj)p7zs(6=nWY?_Gx2!aC4reBmg5EN!Mtx-UJWxB5oy0^fk2QOgX1JOVKyB&2?m1Boa83V#lb|5Tagr0W>A*=EK#*{fo!P(v&IN;@os)EBHXsPvISKFDyKxc}1dZS%4IrpL zCjkaHgiRcAss=cOO<OTTaX}l(&kAfq8GlkBMi`r=C!0XCj9?R34Pg^Nj0tZ;=^aHLZ6nx3brLzE z#@bLimpZ;CbY>H^bvbM9%O^lYljZ lO~7FW^>Dy({)HZn{{T~SigyRP_o@H@002ovPDHLkV1iyR8wmga delta 1576 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 A&;S4c literal 1807 zcmV+q2k`ibP)jGz`%?V5fLDJq+-4Q|D?2@H86L?=?Jqt9cmwg3M|oyw}|a9cf_)+8m2!~>o>{FLvdYSM0=FBXb5Gz@DMPEFeFROkbFD+VnM{lgPQmRSiw z8qbPae#4f-Ls5dyUj-)AYOrc+=pUY1pTCNhS(#rpmTv{Tv^4Z9GB7RmlIc}Z<%j(1 zgJ-WmGuBYbY1nKKB0o+-rKB99i z)!xuQJhen}K}|VlfL4@ptQs2f@GeWTTA5Y}3JSa3m(y-GDOv>@I)`Tthb+^ySWVet zTJyZK%xhqvP(%Ollo|$^USAi~>mv41P;>duLaAUw@9+c-8o66(rpc^^1GV@z!wuQd z^EwaHb!}Lrrg60QFdh!(13E<;Qp$&o!+E-13rjIa{b?B151@)wfKbDxk|VXQ*Xwam zt#QyBS`GwsX-F6_9j&4kJQmb=J)GB&)vqD{o~!S(SQW2vxSkiSaU5GK1{&5@88S_F zc%_XaRBJS;!;IF$M;g{zxv+9Buk`xoc|0hGs1{bdA+>P9q*j*G{)&TgG(>f8D3TK{ z)H~N#3j01cRgZ& zYyqtt*8T7=v4(QgV;M=sAfj}9<^5g0to~&~9zNR8&Ll=EKv~S*Z@1g~`|YkJ7Ox=> zA8N>dm>cP+Kr>UVw_>&UW|+GVYE*p#z(cX& zGZri^Dr-`as?vOlsqjBTW*HpQ42H~w7Po@BW){G-Ib_sJId)K z0$^(tyAqXhddiX{IGs*=kpzuwh+>FR))SZ%VeC&vOIafwQ2g_!WdEb`Ey0ppg3VDR z?N7!kFw~ERpGKeyN{plsrR4P&KnO#n(gT$>3BcZ1djN@*n2snO7WEHZQ2sZ92x$7E zd?*t}{of)$A5{MlUK|ylsKrt75ngXpe4-XWISEhH+EISN_(Uy$stax~QS(uL!7V0g zKFTY&!9*>N+HEmWi=(i~L@kcmV4@a4RaWtdS`ftm+fCGblwUADQ468Wsl!CgK{*9u z6SWwMRz$@oYH^g)FfdUIq1dq3M9oJzu)stuirQp^7f1CU;rXcGL~R&3QR}pJ^CxP` z8d@i6OnmLexxnsmqBaaaAK?)dUc2os!ikz*Ylw{S;%hf*JxtVwdZN~U&qpnHq84Af zb)2XXWm*oZ<3x?92~)`m5T8?_3x z>M$z{v*NR|I4eFY>(BCMWpUPD x8_;ECm}ZS|FbYP&C>RB!U=)mkQ7{Td0RW;v>_E!X@caM(002ovPDHLkV1m=UM(6+l diff --git a/public/images/pokemon/exp/658.png b/public/images/pokemon/exp/658.png index ab2e30592f6c0b5075c2bff885d3b9590e002373..83b2f5fab8966782cfe1f468e3e10e7f978bf825 100644 GIT binary patch literal 2403 zcmZWrdpOhW8()f|iBvi`l*5!myrM0KIfbz#hncUEu|`6qq8u`ZhB$At}^ACAE9`VsZpN%`$o$Q@K>;Jo+IwYS2fwn!jwKPZF zygPTVKez0Jw54s1WGjcezTQAfz4h8cjJSH;xbxc-DapSb@GLYUlkrfgLLL9KSPT?& zqRIdnCD1j08q5w}(9AgcBeK}3aw5gpxc7>aknZ}!Vn zYDmLlL*ba6?SqnXxbpDN8Jr86)GCm8HrqA8@ePq=BMnOWs#_h${cmDFh} zAGxn@u`#CTuIy1aN`D@gqW4KNDayok(x;YNu(|cmIq?db0H=mAJnZ_Z%XNog#&F6C zA2rQ;mo=Q35f*!fs-0Jj(r5Q9f2+`Xm({Kym|L0mtgJ##Xzmm+5JBk=M={B33NJ&E zY=1)@=nP4_uo}gPlNzf>G(_25^r+38F6AecMJ#``a;`P9lW*MDh@mYt@{!(!FblZb zYFuj(IE0@eL+;K&^sf!yJK20E@Qlf=nu9K%iqGnO9HIZ&lBSB!k?#Rt6Q|lM4bBMW z>2b^jteam9Cx0x;r1`V{0pOlR)QMWB;R@!$m%qdaBztAkku~SL-4%Jfmk>35P$;V8p+LP%c{iQSflFq_|TbBa1 zYMbd$h}DMnMV9_NpOQ-lwl+B1HfbL0qZWK8>$QiXa)&18-RfNIb$c%1XW98fa(Mm0{&@V0YU|xO92Sv;CaQy!3YR5&~+=To5WAJn@t z=*VbJR~ZPvGpL3SaK>PaJP;VHY=4I4&cYkrj zUITX$QxbybeebHL`OawCq= zhpefUGReoVqB%gxPR&Y|NGf0sk@aOsXwc16&<;e=1N2yAfcrW4;u0lKX1hKX^0Sc4 zQm%8+g~*a|QUrJe%wB6%*@f$>;*TQm233 zGZPq;6q^tM>kSvaWi`J(c>X5-bkl@p1xqcK;wXcB9jU1cfu35FoDW?9t9Cw&mMN^} zFE_xmyC%Gmv*QKT(K6fnBFD3Vk_k-`OXN7l03ut)?@*_kvELQ%fMf%C8(t#EN2ku- zqUC8E-luZS5BmHz;6C;XTL^$Vm%s(9$jSyPLH|x9Kro5k`dBaZo=AQQ09+*iJ}R=g z<bJCW=~j3DNV5uVew9TVO;{ z>;D&5g(=mIRBxh{b)Ya9g9?NH2;bi)IH7p3kqQtB*6*4JDFBWo#Bbiv8yNd9-q2f8 z0o>0nZ+~_9>9AoXY-dI2O$FG~Inmgl;lX9wd>(ZfNn_p_fQHJ=C(E^u2I*8*%b% w*zVjCqqNZ;j9R+LuIq?Z=G~QQqZf;NwV-;~^h~R1;b#YAYh`a)W#Jk7FOu7*H2?qr literal 2061 zcmZ9Ndpy(oAIB+4MQn+R=rAhDI6HDFbCkt|$z_&t#*WCCeuc11<>b0wNxBTNPGZ{T zvSeh7E=y(O{Ax{1qZG-VSu=~Bug>}F_s8e+et({y*Zckc+#Zilet^H1-ui9pH8eEz zklvnwfPK5tbXEhsNMp$cFb4vBgAsr=FfcGYl4WLx{yF}B_UmDOYw7s(^Z%kExzYbY z-FjVoE{^?mK`89_cs}a^yHcT0sMYFOI&HbLUF!@#8i?0S4)hPw_;sW=MnhxmIi#mY zaN2K^<^75M-Ugl#Qolgs!K+K^a}nRJyyYM1w`A8`YnVyzJQTPVRvrDa!=qxk-4r}I zw>hHh3suJ+hgXu1PPbRzVWOrMia@|&`>_Xo+n--*=_1q!9bbPE$ z@{__Ks7Ggrx>SVKrlW^KX6@4;ZDAw&*@mCzLn1#1 zNWaMTCAkC{&L~fpj7*P{&Lb{;G;wMRlh1#PbNoOV-YXhcwdTLN6s-RR+m#3s73Ik2 zf|OETy~&dVyD^zxOyRomn;VWn-^Goz?K8I#<8*g0NaSj`x}3X7bV+q*V~E(VQ8iKP z>>zEazm&@uL%nYxaEg?kQ&f8jXlFH6(KH6r^0@d z=$E#<4KsJ@27_Z@S|Y81sx*iGxe3(NHHGt#a%`}YH~W(i1=(U zMCtP~6{5;6e8Z@w)9Ok_Jg&+p4{Mkv0$PN<-vxXJzM|VT{pMgHq9w9aGv*%kt@IVt zID&T9yNN(5bM9(v9fu#)C?fRz@{`>d0mF^3e^gX65`508B|^_Yq_yR%O2>AUnq+SD zF|<{>J+I|Oa=$5AnL+G2lBDn!7LT0vOem?dH;3o^xx7tTrt+Qib)PrVOG@nR__}p4 z(|R={jaYX(;MzW2zoez{oU&>!({(bE4N8`~Mm5I@sp!vPW54t%!h6f z?VQxb(G!CQ!k+u0n%g-C#P7Xyjb;I+=c&O)}#dh?toByj`bgJ)@HV5;FqlD*Y_i)8Bu1PZJw=Feq+v9xAqd{o{>+T!?dJXm1NE~KvD)jx0~a>5QVQEA0KYsl8W$)7_^ z0CJTvdlB-@48eluOWX6rJK2g|csX)ndjW#EoK8miMRDJcH|$wFE&gqIe5R10ne}PBW#{7svRrF1fR0R zZicYKK@>~{2#y8z+CXs*^o?OILO3KQ^)Iv>nZV+Qa~LSRNbL21zmB!LXD55zl~_Vv zJSXhA1i~p-9>#{VLSx#1h=Tq;hU3pT5Ac!bwve{Yj3!{6N^7Ptw3t5z!vTjC+XkG9 zAmcjH7K+}05Nl+_~WC1yJ&$%_cLA_vq|#^Rvkxt z2e?3h#}S!cxc<4(c&r(j$jnuv@J%b~e*#wo02Wl%6Xif=BQj{kO~2SwtDF8K^9ubx zckMf4cF&a0{DRK1NuevKaQ%rFm5#nvLq|2U(t=YS9Hw?YuOtzuKK#m6RN$rkB!&5k zpXJ_LlHwe%+Beltx?M0c-yJp9JzKLpd~w#EnHH=|+kg4{=gXlp&~yvQj_&5(0^ncP NKqCA->kdX{{SC>>Cl~+# diff --git a/public/images/pokemon/exp/682.png b/public/images/pokemon/exp/682.png index 35ab3a5c315786a8621f199f1136730d40579d9d..104dc1436774e50adbab4003263e4e2aef9b8b91 100644 GIT binary patch delta 1896 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 Xq6em%8*e5p00000NkvXXu0mjfa4mAd diff --git a/public/images/pokemon/exp/683.png b/public/images/pokemon/exp/683.png index 5e8ff5acd30bfc8cf6573780635f152c1b6179ed..d657a0ee5fd2f73cf6c68fe00643d1b935431a90 100644 GIT binary patch delta 1673 zcmV;426p+i44Dm(B!2;OQb$4nuFf3k0000sP)t-s0000C3=9wu5N01AYdK;-KtO*@ zS+h1a@<~bM!+x1PfWKd#%y5UMrl$Xyv;Xj><>lr7|Nka8%vb;b01|XkPE!E?|NsC0 z|NsC0|NsC0|NsC0UcrVw000H^NklUI$-e)~9%$~;4UI?k z+e|i7*54vQr1tTM%^35bTlMN8@|e+fiIkfBct*=6)(=@N-j{%xHT+U$(7KDgSd*c1AIuk9&oS+Ah%c2p*f8^Du@2 zO0^^6xfw%w%xFi%=!KJ)+8B=+E!V&w8m!##Q@<~|C^&n}XgfUE)X)CG!+-9teYFFz zt$Iew0|8d>2jZ)5U;CkfbJa829&&~6vc$ueW%>TBv41m}(aL$&WL;j*;Iceluf=|1 zJshw(N2di!D+b!70j#fo@8$P(CjZ{g_X}%wSEW5mMoV@F-RzjNCeQb>`l7vwo3+T1 zV6{MMq3I14xWQ_VTz|Lmz=}ptP0-yPUYZpTXqyd@XL+VbO4!*X%THtQH!r zlfy0ox_{Hyj2(H-WL>{*;C;WbL#uHUW@|<(ytjTH*SJ=FTA2->D)na!DJJg;) zm>Ad9L=-l6*R!}(xc`jOZf=n7;x9(N17sL@Z-?8V(UnSr_h3^g1w7^drhYv9dDnFV zly{2U=irrE#M4?u-r){(CwXk`~cP8-Jw|qURmz0%jSStI|6E8d9j^=J^8p#^#OmhgDy;>i|+J?9LN|DKr1!` zuYVZgTy_-e|f0|a1JhR$#cEy?}Yn*ubzxal#LMG<%87E@8g4Y|cs z6mdsxF%?DJkXuYe5qIPkQ&Genxy4izaZ7G76-C^VTTDd}H{=#mQN#_o#Z(k=M{Y3{ zMck8HbYcslPbV@C9>~QOgw0IG(SIS*u|>N=n#?$;=2jwnY|-2+<}wbdSqsI+7EL#a zGmak6P4Z-H;TOB*BZmF92{Vonk&i7-JJ7w1Lj-ifjgBp#;f0BY%{U~FZN+4KiY+j; zXdX0s8HX$@NihkXTAWMfGY;w@=n>0}byTcx|G9n)g zG*JY^gSk>#TI)535;08qm17#Kg z&^i#On1I71=s^VoCGbI5)Dg!iDiOER1)Bf1({@WvIHG!*7_WM==q#dh4(4~+!$Z&H zW;CQxBFQ3R!toHPX$yQT;Ss_q<0ea>D?8e*y0Z0R2Fe1x%dy1ZSHp9 TlYDXj0000VM2=TTSl!E`MA95%;z2CU#m(dCX|L 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 m0r0000 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 FV1mv3V|V}n diff --git a/public/images/pokemon/exp/685.png b/public/images/pokemon/exp/685.png index cfccc4f119b541d1071dde53a91dbff6c65db905..2a1ab94bc226ab0782274795969861d16547e1db 100644 GIT binary patch delta 1732 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 B|EK@} diff --git a/public/images/pokemon/exp/back/2026.png b/public/images/pokemon/exp/back/2026.png index 007e4bee3e08a26537849a3f6b0433f8860eef44..0624bb2c5e7db7a851e34ccaf0a96f66da3f65c2 100644 GIT binary patch delta 2904 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 TPx#Ay7Ue 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 Vr64gyh=~9I002ovPDHLkV1mq-Q7!-g literal 4040 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 vZnoJq!N%-aXk>tdWQ%s6Vm3Pg#-jZfht$o z|AT{+oSenY&F26A{~tyVy8r+H3v^OWQvm<}|NsC0|NsC0eRh4-0007ONklFAP?V6HO_;`1$jv6GF!}Rd(+XxG^2-=w z0N@LZ554?}aGt06xQRp7GKC>0%76Ds(_!6pIeVVgdR#mT?Q+y6d-<^*#&7R?%vO_7 zE+=mV2VtYhMt@8imr|H9dXsfmGqP+fDQZ(s2{8}J6upT?n9C6q|I0!XIalp=94ZdM zLKBBVnM+YO!l+G>3KKEmovIT{Zz?cOC_I*$6I5?1IcW$@%~@#T0bX^DL6~r+O&)_W zW^JVKq2v_pG-VDE5|5l!fV}@avnDt~Q;zVh$fWJVWq&ItC&(25F*0eoBh2ux`&MMq zDGuNdG{i{LB%9hRMdIxd;D+G+eC8Wwj#N!C0+1s9b6BH%<98Ul=c+_<(;ye4 za9^ucN*=6`#UVt>ramGLRI1cOlg!;Tj2w{~69OA)k`^g~&knQ@`9JdmCeKB?SxZE= P00000NkvXXu0mjf*gZ+Y delta 737 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 KMNUMnLSTZ&NPbrU diff --git a/public/images/pokemon/exp/back/658-ash.json b/public/images/pokemon/exp/back/658-ash.json index 9c2e394a89d..8e360497b8d 100644 --- a/public/images/pokemon/exp/back/658-ash.json +++ b/public/images/pokemon/exp/back/658-ash.json @@ -1,188 +1,155 @@ -{ - "textures": [ - { - "image": "658-ash.png", - "format": "RGBA8888", - "size": { - "w": 150, - "h": 150 - }, - "scale": 1, - "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 75, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 62 - }, - "frame": { - "x": 0, - "y": 0, - "w": 75, - "h": 62 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 75, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 62 - }, - "frame": { - "x": 0, - "y": 0, - "w": 75, - "h": 62 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 75, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 62 - }, - "frame": { - "x": 0, - "y": 0, - "w": 75, - "h": 62 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 75, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 62 - }, - "frame": { - "x": 0, - "y": 0, - "w": 75, - "h": 62 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 75, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 62 - }, - "frame": { - "x": 75, - "y": 0, - "w": 75, - "h": 62 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 75, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 62 - }, - "frame": { - "x": 75, - "y": 0, - "w": 75, - "h": 62 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 75, - "h": 61 - }, - "frame": { - "x": 0, - "y": 62, - "w": 75, - "h": 61 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 75, - "h": 61 - }, - "frame": { - "x": 75, - "y": 62, - "w": 75, - "h": 61 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:0121f3850f8a57a4a046524a1a5974dd:168ffc856b6fea872641e8672304766c:f09eeed5adc5ec50aec50218e03662c2$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 73, "h": 73 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 73, "h": 73 }, + "sourceSize": { "w": 73, "h": 73 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 0, "w": 73, "h": 73 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 73, "h": 73 }, + "sourceSize": { "w": 73, "h": 73 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 0, "w": 73, "h": 73 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 73, "h": 73 }, + "sourceSize": { "w": 73, "h": 73 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 0, "y": 0, "w": 73, "h": 73 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 73, "h": 73 }, + "sourceSize": { "w": 73, "h": 73 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 73, "y": 0, "w": 73, "h": 73 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 73, "h": 73 }, + "sourceSize": { "w": 73, "h": 73 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 73, "y": 0, "w": 73, "h": 73 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 73, "h": 73 }, + "sourceSize": { "w": 73, "h": 73 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 73, "y": 0, "w": 73, "h": 73 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 73, "h": 73 }, + "sourceSize": { "w": 73, "h": 73 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 73, "y": 0, "w": 73, "h": 73 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 73, "h": 73 }, + "sourceSize": { "w": 73, "h": 73 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 0, "y": 73, "w": 73, "h": 73 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 73, "h": 73 }, + "sourceSize": { "w": 73, "h": 73 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 73, "w": 73, "h": 73 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 73, "h": 73 }, + "sourceSize": { "w": 73, "h": 73 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 73, "w": 73, "h": 73 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 73, "h": 73 }, + "sourceSize": { "w": 73, "h": 73 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 73, "w": 73, "h": 73 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 73, "h": 73 }, + "sourceSize": { "w": 73, "h": 73 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 73, "y": 0, "w": 73, "h": 73 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 73, "h": 73 }, + "sourceSize": { "w": 73, "h": 73 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 73, "y": 0, "w": 73, "h": 73 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 73, "h": 73 }, + "sourceSize": { "w": 73, "h": 73 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 73, "y": 0, "w": 73, "h": 73 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 73, "h": 73 }, + "sourceSize": { "w": 73, "h": 73 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 73, "y": 0, "w": 73, "h": 73 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 73, "h": 73 }, + "sourceSize": { "w": 73, "h": 73 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-x64", + "image": "658-ash.png", + "format": "I8", + "size": { "w": 146, "h": 146 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/658-ash.png b/public/images/pokemon/exp/back/658-ash.png index 8921ea6527062c526425aadb37d29d9a03507d4f..5d8794a1c0f233fbd1834692c41398bc7a648277 100644 GIT binary patch literal 1755 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 diff --git a/public/images/pokemon/exp/back/658.json b/public/images/pokemon/exp/back/658.json index 2fa50a7d23f..453f6c16dc6 100644 --- a/public/images/pokemon/exp/back/658.json +++ b/public/images/pokemon/exp/back/658.json @@ -1,188 +1,92 @@ -{ - "textures": [ - { - "image": "658.png", - "format": "RGBA8888", - "size": { - "w": 150, - "h": 150 - }, - "scale": 1, - "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 75, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 62 - }, - "frame": { - "x": 0, - "y": 0, - "w": 75, - "h": 62 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 75, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 62 - }, - "frame": { - "x": 0, - "y": 0, - "w": 75, - "h": 62 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 75, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 62 - }, - "frame": { - "x": 0, - "y": 0, - "w": 75, - "h": 62 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 75, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 62 - }, - "frame": { - "x": 0, - "y": 0, - "w": 75, - "h": 62 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 75, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 62 - }, - "frame": { - "x": 75, - "y": 0, - "w": 75, - "h": 62 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 75, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 62 - }, - "frame": { - "x": 75, - "y": 0, - "w": 75, - "h": 62 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 75, - "h": 61 - }, - "frame": { - "x": 0, - "y": 62, - "w": 75, - "h": 61 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 75, - "h": 61 - }, - "frame": { - "x": 0, - "y": 62, - "w": 75, - "h": 61 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:63845d55db2350ed7cd6956836dc9510:7129df11a518cdd74572c2016d5f8ed8:5affcab976148657d36bf4ff3410f92d$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "sourceSize": { "w": 77, "h": 77 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "sourceSize": { "w": 77, "h": 77 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "sourceSize": { "w": 77, "h": 77 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 77, "y": 0, "w": 77, "h": 77 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "sourceSize": { "w": 77, "h": 77 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 77, "y": 0, "w": 77, "h": 77 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "sourceSize": { "w": 77, "h": 77 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 77, "w": 77, "h": 77 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "sourceSize": { "w": 77, "h": 77 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 77, "w": 77, "h": 77 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "sourceSize": { "w": 77, "h": 77 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 77, "y": 0, "w": 77, "h": 77 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "sourceSize": { "w": 77, "h": 77 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 77, "y": 0, "w": 77, "h": 77 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "sourceSize": { "w": 77, "h": 77 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-x64", + "image": "658.png", + "format": "I8", + "size": { "w": 154, "h": 154 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/658.png b/public/images/pokemon/exp/back/658.png index edcfa15b9f371aed9eba31c93ca2d9c329ebd526..07b9084c43eb29c28d23cbddfb1a52f50efcec04 100644 GIT binary patch literal 1653 zcmai#Yg7^l7RPBEr)*@*vc~sg$5*N8h@psPazs>26dhM3Q%eC0w4}w%RVQDoLpZkh zB9LiMGa)HvU|O1?Wu=Hb1~q{=qop_|nr}@Hu{2-yivdE7V*(*2?Ts8 z=EX!glv*hoEjF^(-<>L4m|41UMW2E zJrnjdK}fuyeU_Kf)r~#hJ6h2U`|MLzrz&bAdQVeR&&15Jr>at`x7`-O{^ZM$U>nLC z6dx~Tny3P;{c!cf0U({WI2n#F=td1?FP76AEo+M1a7i8e*m>V^;G0hmBJuAaFXBUj zl2B~h7-8x>a#(7T;%Fn`uy!Tr;m5Sfk^Z9W5m#lui=}vYt@)gcf1_Y9_+yFfPyqjM zAtaz8e0*c{^N{1f6~f(pg1^T+NrJh9P88Cv^DBX!?~p!B`C$Ahdj>Oz@n!=Yl>e&o zMCWs)4~r%V{6)U%(}1Fy_SHkGu3zNYrIoHQuX&I;skR!qQ!u@PUtFPHaS5Q&lnMWA zyAdr37s__(A-#>Ke&MY!iy|LXHXvaVPPODpNVX+v~#+B|oAwsB9rVCg1xp z;k7SKcytd%M=3QAI*w{NF&%s>9@Z@mWX-(TB6V2~Noj=`Gd?R~S&y*xz zmSeF%%N$N7_YW)yo3ZXW7TR1GP#L*`}VNv88XygBo{4a`U*l7T~wnaL#T zqfpYxxA}f+;IVVipSxsH;^j6FrKmXa-gfo-UU>z?I9P<6`qQQS&$yLV!9;3P{4#46 z8+Q#FH{RXr<927fODH(FY+fU+g>3lJU&_AG-iDmG)sh=VSCp|!+Z}w_9Uc-eBSP9k zAXExDX&GLaMGVN?B~#V<%Jog5-MC1san>bV#O`11`NeWe+PZVTk)ufDWx+LR)Vgn^fGD|6KiZ6WZs{WUnC={P&p#F> zxE||*x}5=7qx$CmVVck%4na@xpa}-hQglet5IQ8qK*AJS-%(Sz?G~j=;?2dG>BBe< ztzFS+|)-n6%yp$fZuF=lC$57Ds-ohKcV@=n!faSl0dU00@nHS2C` z#rhuJZs;A`h}XxVZdv)$BTFTG)9gC++E)v?lFOCsvt+aP%$cWTZnh!Y+55yj4Wx(|v^2Z|KqNdStR0qK`d?VwP(lCz literal 1367 zcmV-d1*rOoP)G->3aKyTr;edkc@5TPgzXT>1DgXcg0d!JM zQvg8b*k%9#1lUPLK~#9!?V8(`oFEiLDbO*kGx`6|je;N|B4DYLwX8hMt+Trhcj*%1 z9zm((pZ`3=Ler#R__>(Xb^WL)D*-D)m9x6;TdVK8&8uYshMx^9fhuKb(%(_zm#&Mk z8pS}BvF7?_*oFqVDiR(QL%=#f)vy+AeaWRrc-0o8N?7<#!=R*wnIhr!0*0Xsb&eJK zl5&OxtO+&zDM1ymvV18e<&2U`Ck&$?N_}Or1P=RAs&<4av0|wjQ~_(ES@kg(lvHgy z(kAJ8N68iu(h;hNwW9VBUsAJ-V85?I)v=b2*!AVUuS3iz|Kg(gdWs(^pvPc2y9LuMf+OR;U zpHPoF#WFM8)`_KHM;iu-a@1*-8=T#$Tn|=`;;`JPUCD!q=UC|aP>v;@W5Eqgv)6g7 z+JPG4M)MkFj9ZK4q8WiRMado@9BXxy%Li7|TN~tv~M|jclG{S%~tsu^H8r zHa(ApElCfG9_;1b-1W!r{7wnb!ZQJei@Lf*}SjIdN>C!0vJ$kquKcD4r~0+Y9~ z5Z@jUg*EB5beE+{S?je0tBn@1Dj}*^s)z;G*uj!Jqc$)c4Xg-j-nH{t2x){ka!P4%Jsuw;&w?SS(&46eYuFleU?Ak)6YX`7VKz9q83vJCsG`~qJVXD|AlaE zWU&B172W`CdU1iBK&@Db0bK-Sp&V=anCvWT?g9?VeU7b^I!yy;D50P9Gf&~iFdk}g zhF^seInQ>Fpl%m4-Ndv-OgE8zm8P4B+6_t-r<OviuuY-B;D*QKas@ql@oZYNF;Ig?L<(jI*~*)*dO^S zN+hxSbjMe5B8g}$5|pY>B(Z(1jGag%F@1$WsZ)t0;s6VSQs)v$7Z@WYl9-Eyv%pFu zQP){wx`}9xm~P_EOIo^#ZHts{BHLmmlDNKj>85LJolYcCeG$`5TwAns6K_rBrJJZt z#Y;DFdytk$qK_<6x`{mxN$DnrnCT{>DPFpX=!%$bBDx}`o4B@U>849uolZBA7X?89&!ok}+`UGdUQm)Sa(Zo1$!x=kd-TkJ|(?sMXFA}L}FSC4YFjH1}`4cCGP z=_dB%8wR+yjrm%PrP58@Lwk@&LgKnaB-2fNW2Rp+4h4rnB6?3|yw#niL}4Q7bo8g_ zs;z8aBII?5cZAjwDX+scM~wcEtvzr=Ephhyk}>~tUgy=TSFc{ZdiCnnt5>gHy?S+z Z{sFcBU?Yu*A+-Pi002ovPDHLkV1ldkh0Oo} diff --git a/public/images/pokemon/exp/back/682.png b/public/images/pokemon/exp/back/682.png index 9f713bfb828732416931a658c251d102640be91d..d926cdc22a8ed0fca7ce2a090338f21cb3be6d0e 100644 GIT binary patch delta 1294 zcmV+p1@ZdY384y*B!2;OQb$4nuFf3k0000XP)t-s0000G5D;rQVogm=PfSmLO<8ku zbD2GW%y5VQnX~2P<;t;64FCWD3v^OWQvm<}|NsC0|NsC0eRh4-000D+NklqM}pt%k+wIuYw>vJyk|!#or%# z5!_SH=;MSaM(E^}>67C2-PICh!SiNEPTqc=K9*5jzh#h?2ISU=HMR)4Um?3{1o(3)x4Wh_L-{D#x1%EyGS=1kKr^C~w{Z+_G1R7<1D*VnJkujlu~ z79poIJ&it|kxqnL@_cln|FoqCx?6RkpI9o!%$$e@F=o^@abg+-qS0)=(<$t2F=mFw z&p6rG8!%>u#*q`k-heSPG>)7Q(I$+UacG$nVSmhwLra}p#>_ah(rK$6V`dy$=mZ!u zqB3MR%eyrRI%Fcw6qynw7LMJKB=T2njlXAM%!F;PkkAP zwttP5U3LGy?ejh1AlfvF=9&tXs|ja7w1sQ8yTnrk zb4}A9{{j%bLIjgmFDe5cNB0R(bTl~~4yk;4$L&>dFUb8?u<{Iut~Cef*`n14RsP)F zo%Y;e2`kTl=$b%hH?!(TqbAm8CfYq8W!K zDo4XXG~>`hC%~8)hn6|vwq58eb9%#;5MyQ>TIcj8rK8NMQYD#nQEpk1Sr_HjC7E@3 zZ&{LAm-kjBnT1hqRgzg4<(4Ixg;8!*l35w$X51I`B#UyZlFVo}x&TpmGJVl6l7#yQiTA zsFKWtS9_X;j?X_;zse?O{)S?wA%9*kOERyt+B~fh3U4kzlVo15fNHk=X`N8`HwkjL zrTK*7nHe63(-wZr7QhIy(bIBTJ=^}YITOy{__veHMFQQO4I*?=l35t#)+U*CdGGfM zSIfBXi=*7A?kM+NcinZ@U3cAe*Ijqrb=O^Y{fPPt)@I&yZ!3y%00000Ne4wvM6N<$ Eg0QrKl>h($ delta 1222 zcmV;%1UdVm3fc*fB!3}LOjJbx000mW5HJuhPfSl>ATVrfZ-_*9pPZk#Xm8xy-|vr~ zSMQFbqV61a?vW{|C1gtt&}j8LvEP zO3ZX74?9Z$xg!Z%>FJ-UmL|{)_rN!zx5!TbgO5`}+ z?J^PCR5764ZkLIA9y(Li#Y=zRt`PzK=x(gT&zloZguT8GwYS}zc%t6RW@ggb0850u z1LWW&H7A}3e}4y5OMiXxMcwbpqtR!FNELJnZzRXZbo+MoL|KrMLQc_sQc}-I*RKqu zr35*}EwzpE*OUgaig&F?yO{y*g| z_xneCmw&Mca_Z^n;S(A0L~u(VZxj8aEltqV$`k#M#bV5uld%{x)HdRTX&?{{%@#X# zVQ-HyV`#j`$;aLRW5&=prQ z%ovA`RjQt5dubvd+R;3X0$M$*Tz=e1ePiew(CVxbkk!7@(q<$W7>!9K3ZfC@34l>) zu&yKZ#Xz)gwCp-Mu6W>T)E5TPG4vG!RN|vrvk3>$5<*W2$gnA(ksc5&5%i5{wJdKg z@qf850YtA5!KKxU%E8APz5&i4x;UhOp0(r7Dy{c>fR#NUTFypC=vkxHg)0Bvm12i` zSlI)jj~u$>$2D4AQK?QM9`El0(c=Fhqe`oTzq!ctB8bK~G@|k}Js=w6(1<^;DLLSLHGH*5)F%ovB}Ie+~)%FHTOl9?CfrX`tqQEpz6nV0vbC7F47 zZ&s3-80BUqnTb(uT9TO<JBfg%WlS|u9*GPGNl&=f7+~~C@??2{Y8I~K<&(D}>>`net2Pxyc zcdp-H?40;{Ou#K3&JX79KR@+Vx%-BBp2w84AG8q9=4W!pBloNi!*l1+s7UcuXtyECRqQ*It<`7&*xWw#S$^yMQ}i~`FX)(UB!+H zEyLoLrqlC+XHv`?N~NM77wSiogPHxOkLKsDr3=WCp;X}aC!hu#mHITI+afeGA-5ea7g3nS#%Ly zTse=b?tc~zXf{27);Hsq;oyiS(`yE=(-5hnz!6QR*ACXn?Qv+lP3P&wg1=rzhC50Q zcBt?`)!z=*cp$qcI5fPSj^Jk@eaU!u$Aix#ka_qtOcsG`9sGK|wr7IZAJUVp<6`%J zo5?%2fiFPYhoXYZGSEB}Tt=_xrRd;ZhKA2ff`3_jx3rSW7ouhzw#8#rb?kI3dB1Gx zr*$@iuR21>+g~b^+93E|yk0^C{y-p`=-;lFt)?y_2a|`M3%po5sk1eBHEe4VkpXl>uz^4K{y3t}J zInfu=1?T8?i=pJZbVrMSrH&5zhjj#_^;2OBj?uB`{uMRaKMLPiD%A za;D*=3}C2npGcKE%9(|K>KIED7;V%hQ{_xKqwur|A1Y&>S({ds`^p)GXKil}l`+r0 z8CC_Ss~zQx!ksf^%rj{ds&ZF3gYeNgQ@}jKHlZqal`{xG&ILYGz&yh?JylMh$bXR5 z#%Ibi+7(F)rZ2c4oSi9Pv~im@Q}4rtApK4E^qO@~{n0J$!zHfj>f9d%JP4{pEFc>*6p zvL=BluWkn3<5jf4^MpPPWlc7%TcM~O`wh-h+vt5&m5ch6z8H10jDTfbn|~6%=KDt- zQNz(Xme4%zDe5l#meBq|9U-F~Qq$Ch$;v2+bLrhLi#(T%8mT~p8o!w{QfI-{9{EOgF|)v raQ#Y^KkHe~de*a^^{i(-3$FhF`NqYGD@su+00000NkvXXu0mjf8^#cu delta 1453 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 P00000NkvXXu0mjfzV&&Y literal 2223 zcmV;g2vGNlP)i0000RP)t-s00000 z002-#S#@oPxTCnytk>Vt+WGhR`pfZea5{wm0004WQchC^1jmNXsKkGekG-Zj^S@w>E&|CxyGKfR`gwZx@K>8+XzHmneF~sE=`o;J6JVQW{;0d(Gwm$~w7D|wbfo3_8Sp8|e5{^F zACJ#1Ak*>@aM~rAkL4Id3&^zG25fhpDGunN1x(OY0PmB`$Lkx=hZZnFd$7aTG{aE{ z#ekqZ{=PlOK>4QlQde1qri2ydo9@!g4|Pa11q5A=+JuAcO)?I_gew{nt$dWQT3Er;;{xLcG{8! z+O!#hsHNONrbWm$i^X4e^(mA1xHk1^Q=Al2YO3Ww>r~VAt%;i|G>N9`J3~ziEk9vO zB}~}17O3b5aTF5KRJz7Y!wA-YfNH9TM2!g#l9MzqV(5Bn$%CVk3OHQH)Hvv#^dmD3 z^P#HV`g*f)sg*)^6sSbw;HCx)8KM|Aij8r!&^FRkvp2^4@Kla!JoKdjQ;2v~y%k&y z(OK`SN}lWc`(eWjRRPp1x*<`3pxFfUy1yI!dOvg)GogYt1l=V7Y&(4qe ziLzd&>+{YJ%6grwzvTQ(S+CF5v-9(Bs0Kzbq1DtXT^|3Lsj8-4gWVCI7W8UHRx_btKf2Z7w~T+d>d z7J1&%$Gdae;V?SuYym}YFNu7YUdUVLRp@TUZ zMQqfBPhoBM{3P;f*RHs3%}w< zO_Zs~)^9A9nIY0|1x9Oj!^?lo)N;RP-`4J+e=6;uw2GG33gb2Vhj+p9-voKFGwX%c zs@1w?ui}lmLceB*^OMMvGxJ7014-oPi!cv0KX|CTUiV282FTVY^qTxOv%BZ|KC@Bh z-93-b^=z`BbW(bJuHUm>!*3zI5Mdgh>yZk*hTlSZA;LU9*CQ2r4Znr-LWFtzxE`s{ zYxpgs7b48#vz{XrdJVsY^g@Kwp}{X9nBA#K?~>ztc!-P#ATeQta_DMUQ*OQ@(&XVS21p)HzXd^{;cd}_U4LNJv&lZIWZ^d|4bKPghx z&>9jvp)hIeq@R*^f+zKsb~QY4B?%L?*yL?*sobd^(gjR8sB|7;G0tIV-_2~1q2 z)u#SgXH>LuYj%wPj_*XeRvJb~1!<*-O?uGrJ>fekjPcT1<)xL!=R3(uYoBpZz7vZ4 zQZ|1l9J!@z{!VhiOWFC+1xwlXrFu@|aVe{UIxpatSjvi^&IUM4KUwdVbUT<(smf&Tpz4#JYItrfNe*BDR_NO>Mxi<`3$v7lx%SIX{fu xN;bz;CkCAprgq*zhBY@Tx9a@=*Mct}{{q5J<|~8B0Hgo_002ovPDHLkV1kfVT)+ST diff --git a/public/images/pokemon/exp/back/685.png b/public/images/pokemon/exp/back/685.png index c791e4e92d751fe1efe732579b1c768a55551c13..d05cf54fb638039d98c5cef4c65b2989e86c2882 100644 GIT binary patch delta 1565 zcmV+&2IBeG3$6^1B!2;OQb$4nuFf3k0000aP)t-s0001hS!2wZrvJ>@W*RM~DM{ry zWdDq*|MK$8t*!X@_z(~fCMnLd0000CbW%=J0RR90|NsC0|NsC03B*t)000G`NklK_=RBWJ;h(-Sj`;I@ z-D8&VihJTCYNu1O-NqAN*dG^d-bPn^hJSu7bWOII)A%V1HU0O;?DF$#f!*;1j^^M< zp29=?+~ry6m)Rw}M@AP{{PS7y=Nx{$%jD$va-J#`7{Z5wBJyw>BN z@iK$mMb~g)BcnRAjXaLhA28iThRy?AeB3~G8%I1zA9>sFbk%&IQ94}E$M5_$a(MU^ z5BNzQ2dL&Fo!-*$FL2!hgpGJqe^B*`x49qW<@HHHGiT_QeqA)Zh0|@^G2Rd0lUTg~ zICF+>*MH;5hDQ~=jYXZu(cbQD7bWwaPM=1{eYQPMCLgP3_qgQ(eqHBT-t-OaqGV3# zn-5PJkLG-Oy@<-`Hyz6(k0(Z-;e?Nl)}WY=bdZ5^uP|f>^KKjO{0rZ;JlooQw-L6p zrSs;5-mnW3owCCMvWsyaS-#E--tRZe;xUb7^nYyVx3PuOm&m$IR7P_W+-KiUPSxw> zb<(#!hri%@v%AQpN1C{l3xvz=%{e|SsrdQkc2P19G{LzaH)Q^%caZ9W^X$ZVbDkDH zh_DO2mz6%b%8ws)5%XDEf#cTFXxXKXO}&i8CHV|5(~$0Sxh%U_yuB`;sr#~L>7S|l zvVSKFK2#?siuyn_(H5}ZA9>Uvo_FH$0P<7i=McV{5*NUD*XUG-eLSM%+U+4d?p0lBQsC;>tPDvm<{760Rqxg`20#F`~Fg|%qzF6&l z>lnWbj`PQbqhp+f~9iLbq zjpmacZm8i@9K}z2wccfd`)WAqZlJM@L7lJRRDHV(-gQgI$JTJdC6F$pY=ds&4d!~s zcL+6{jMpNz-$tG$=5kY3UJX~n6@Oe)KT2(z8acy=>Aqb~Rkar)_3UpV7Je zCLJGF39>aDp^-XU#GV4(o9i9lSi^AzB8Y9~mMT7p?##DI$2Zh)N`ZKliwtdJJWR@T z@6w90ksoU~1t+_h3hGPl8zbA9U#*>D>qc6`we*I|yU4XooejAFgo>{fh<{=Who2>= zw;s0aqE0h4?4-2oYB;6MtUYY&goU~>(Y^USttd0pjrCqDr*RD;*~Z)y2{0C~yjTgo zx?;8Ab;Y2L+U67|!GWDuJh+A8oZ6=pIz?K@WzOxRx?_np^r`5$*HfhYJ^v;1i>p5M1s}JQzHn#72U`5d ztN)9LNq1Fzh348!ZW|8=ym>3Wj-J2JLc^TK-%40Y!A>0=OZD)w=kf0n-4@tNLB8UH zT@APPhdIz*3VPFB{b2;Oho7deS+i!%nl)?ItXZ>W&6+i9)~s2xMi!rcB22YhnFO)$ P00000NkvXXu0mjfO>`+9 delta 1477 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 X02j^Eyq`G}00000NkvXXu0mjf8d+Z2 literal 5821 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 Hu0mjfU(;M% diff --git a/public/images/pokemon/exp/back/944.png b/public/images/pokemon/exp/back/944.png index 1f4139b4128777ee27ee5e751ab8c9db1b92e085..5162fa285bea0d9c50af788a3ecd3f77b8b1e7df 100644 GIT binary patch literal 3148 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 IM6N<$g7y*A2><{9 diff --git a/public/images/pokemon/exp/back/945.png b/public/images/pokemon/exp/back/945.png index 98e56cc2468ebe49bbf8f2bd92a58ecdb8f46476..74d4e56a598fb996eea657d8398052f5e551f86b 100644 GIT binary patch delta 2688 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 diff --git a/public/images/pokemon/exp/back/shiny/658.json b/public/images/pokemon/exp/back/shiny/658.json index 8dc315c768e..453f6c16dc6 100644 --- a/public/images/pokemon/exp/back/shiny/658.json +++ b/public/images/pokemon/exp/back/shiny/658.json @@ -1,188 +1,92 @@ -{ - "textures": [ - { - "image": "658.png", - "format": "RGBA8888", - "size": { - "w": 150, - "h": 150 - }, - "scale": 1, - "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 75, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 62 - }, - "frame": { - "x": 0, - "y": 0, - "w": 75, - "h": 62 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 75, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 62 - }, - "frame": { - "x": 0, - "y": 0, - "w": 75, - "h": 62 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 75, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 62 - }, - "frame": { - "x": 0, - "y": 0, - "w": 75, - "h": 62 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 75, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 62 - }, - "frame": { - "x": 0, - "y": 0, - "w": 75, - "h": 62 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 75, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 62 - }, - "frame": { - "x": 75, - "y": 0, - "w": 75, - "h": 62 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 75, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 62 - }, - "frame": { - "x": 75, - "y": 0, - "w": 75, - "h": 62 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 75, - "h": 61 - }, - "frame": { - "x": 0, - "y": 62, - "w": 75, - "h": 61 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 75, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 75, - "h": 61 - }, - "frame": { - "x": 0, - "y": 62, - "w": 75, - "h": 61 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:661efcc0c742bc0d4b4e26900a59332f:d0aa0f579971d046660bf77b4044aa35:5affcab976148657d36bf4ff3410f92d$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "sourceSize": { "w": 77, "h": 77 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "sourceSize": { "w": 77, "h": 77 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "sourceSize": { "w": 77, "h": 77 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 77, "y": 0, "w": 77, "h": 77 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "sourceSize": { "w": 77, "h": 77 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 77, "y": 0, "w": 77, "h": 77 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "sourceSize": { "w": 77, "h": 77 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 77, "w": 77, "h": 77 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "sourceSize": { "w": 77, "h": 77 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 77, "w": 77, "h": 77 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "sourceSize": { "w": 77, "h": 77 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 77, "y": 0, "w": 77, "h": 77 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "sourceSize": { "w": 77, "h": 77 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 77, "y": 0, "w": 77, "h": 77 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "sourceSize": { "w": 77, "h": 77 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-x64", + "image": "658.png", + "format": "I8", + "size": { "w": 154, "h": 154 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/658.png b/public/images/pokemon/exp/back/shiny/658.png index 416f11454633db4ea8e9ce8929793954678f20d5..bb0ee7accdf38a7037d7e261afe99f781b70d51c 100644 GIT binary patch literal 1653 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 O0000f6Xi@@54ZTQ_E-Enz5K6$1 z03tR-RB%L5k){YTDBysjLy@r}iiH7DvFijGMAUI`6dRUFWUU$Bym{}eS9UO(Z2>7`&z9wUXbV-Il z#&6`Y8GKGQ04S2&F6MJnWNa;Ck|;8QE#r9r;7G||@X{|>%+C|c55>;RS}qbKr-&IQ zTvLXPlM{>K&(BTgi^a?^4mXV>;xX8n8Ce|RasXz}{8imI52H3ZN4bf ze_i~WlJ|C&UW9+{8AKoW!}eExnGFE2re(F+`iE_46#!l90Z_aBhs|Iw0E)7{bq;-T z9=d#9QpDmcXDh4R++0fmpKB>E=%LdZt9g z$j;($`3&Zthxi`{{&gM}5&R^+h%b~yM9Zd3AWW9ETgVfL1(`yIK=_}U_z%PWq}jQa ziQ4!P(3V&Nr6C$XejWfQDiI(Fdt@un?|lo#M+5oIi_w{wo%_#%{(V=tO#a9gB!7-$ zM?^BX5>d|Vn*3S!?g~$*UQipUP zL&zMmg;!4Do9IA%up=Rh?=qPj=x&RGBx1dpI68aT- z2O}^EromdU5o`ssU{5#*j)WJ%$?!5bA1;Eoz?EiTr=n?cd`V|I)p<|3O zju?MT93~aB0<#&j8`F+Cg&D?-VWzQItUA^l>xvDRIYI4MQ`g1<+DyrL=EogS06Xii({|v`U^zjmmKqDIK93(F5q| z^fLNk`gQs{RV`IdRle#b)i%{Ds;|}NsClUI)k@Ub)kf6bsWa4l)YH_rsduU0(?DsM zX@qO!YV6TCtMPOWZH~(v?wpc2hv(eZgf-1HBQ#fN?$aF5oYvCT^3%%Fs?s{6^;Da# z?V+8jy+iwi_M{F~$4y6|vqR^k&SQoO!;_KDsATjprgSxR{dFa}^}2()GkV5)QF?`X z?Rxk03HmJkB>f%wz4}uIItC#I1qQ7Kw+-=zEW;GTU55RJuZ@h2VvIHzbs0S}Rx=JT z&Npr~zH34@aW`3J(qMAU6l2OVO*7qXdf5y%vo}jIt1%lghs_<#1?IcWhb_<+P8LFo z28$a^64R5J!)#@aTGB0pEekEXET35!SjAgyv+B3{Xl-wuZrx~o$A)4PXj5p@WAm%6 znJw40#`fA=@?77!tLJvleQsxN$G6*KchjC~A7a13zSsVPgQJ7Uq0M2^(ZDg$vDWbh zi^d9LZDyT!LOXdmt#&%*^w!zIS?qk+`4<X~g?%562@eae34a)26HyS+zks@6 z$%2*zuOhu7%OdYYnM6sVdZQJi6QY}=U&naIl*dS8tzuWkUW(I*6U24LW8oFzvR(TOpMEs5_rp_~TJ^wNN(wM(bC zZ0;`Z6P^ce2XB(^$}i_nB)KM)Cp}7bP2Qe7nc|*Ok@8f)7E}wKr~0SXrM^xJP1~RL zDLp2=Jp-4Km~m7{5vB?IGPN`FGKaIwvx>8%%bb_(Ts9>N5;bK**^9Ef#WdN^)PTf9 zvR*Qp{o-l7TcBI8wqSIn=gRt3(5j`Y zdRObOE?Pal#&6AmwS={4Ykw%TE-Wv6xh`g1Pmxy9nxe7we(PI{6^cd0H#WFzsN0Cz zDA+i-Y3`<~O&?2mB^OJrODjs>Z{}{k_?699m0x|@lC)*8%%N=0R?Jr6*6Z8cw;d=~ zF3&F?+a9vLa|dHb$&Qyhm+ZVyVOLSNi?B>BD~E ze(8aT1AWbo&CM;EEoH56tE6@EV8X%6-*|u1-NtOIZ>P7H9s-9XhaP{M`0e$>L5F*f zu#U8SXZT%h2eqT56Y5;vIn|ZYCGC#u9zGg)w718lr{jCe@An_mJyvsE<#^c%!il02 zpHAkVoIaIx>gnm^(__6$dheWxJ#(!uyl?Pq(Ao3ne9xWf_v}A;-u3*k3(gmgUSwVD zy5w-FbHIL};|Kd6ItCpEJBJ*Hx-UCj?irppeBz4xmD5+fub#UWaP88_{E^}7QP*$Y zNVp-r$-DXJR{E{yw{vdK+*xxMeYfPE(!GlNn)e%iH2tw%>L5Kn>ODH}V8MesW8ASP zKV|>)e!S=*`C-L`&P4Mg+egPHeJ3wJUif(YN!F8@r^P=j|6Kdbc>FRj6+1Ql zT=e|YubW?}zu5oM?q%TjV*hCm8hSR zwxyYb~V(0Zs0cYdgaeAUq31tZ*5SHlQ*&#)=R z_&rkX0$SW8Fu+}%h7;Tcnj%O@oqLvx5hTQWUv^8l`1LsKSIAw2I~*rYj}6FvDDFbs zQS#81^V}`sCW`y%8gb&dYr{zjz|$trB`J5o0uGtUnTK9^Qg~oLuXBDkeXg<&BgXMS znAiI@-8`>BwqN}ml0A-idpr>OkQaruU&FS(4`qlCPZj3}U mpfyHSJYa5&m4TPMZGQp_a6ZLp+2bw%0000j+w37uMR60b6*^lAhZaRA^bd1l$WMw5$XB z^TPB9Eacn^b$@9zTGoCGUI-Y13hYX*X{AX7uD}MlTL-|VaucwLTs`TqHJ7r-IRMU* zE9Kx?un@?mx!I%EREonn#}ITEQVtd;^l>)qJe+b2KzA&}=<|cV9}k6G$;H6&NCaZA zhKfAEyMZ8kHxS_6K#;u~2=HzI_|JD^dpB_Ba5v&R?@QlfExz-94{M2?2etUlv6kF9 z)=>HLu<8FdHgo6Oov-tIPAQfL{9XEDfOF;yg7hvC{Pp+z3rrnJkBUl@ZU6uP07*qo IM6N<$f)ys!l>h($ diff --git a/public/images/pokemon/exp/back/shiny/945.png b/public/images/pokemon/exp/back/shiny/945.png index dabe70fdb315fc10f625fbf6e2c194f81e4d717a..71644f574792c7602e8762e6205932047f31540d 100644 GIT binary patch delta 2688 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 B>LvgH literal 1807 zcmV+q2k`ibP)jGz`%?V5fLDJq+-4Q|D?2@H86L?=?Jqt9cmwg3M|oyw}|a9cf_)+8m2!~>o>{FLvdYSM0=FBXb5Gz@DMPEFeFROkbFD+VnM{lgPQmRSiw z8qbPae#4f-Ls5dyUj-)AYOrc+=pUY1pTCNhS(#rpmTv{Tv^4Z9GB7RmlIc}Z<%j(1 zgJ-WmGuBYbY1nKKB0o+-rKB99i z)!xuQJhen}K}|VlfL4@ptQs2f@GeWTTA5Y}3JSa3m(y-GDOv>@I)`Tthb+^ySWVet zTJyZK%xhqvP(%Ollo|$^USAi~>mv41P;>duLaAUw@9+c-8o66(rpc^^1GV@z!wuQd z^EwaHb!}Lrrg60QFdh!(13E<;Qp$&o!+E-13rjIa{b?B151@)wfKbDxk|VXQ*Xwam zt#QyBS`GwsX-F6_9j&4kJQmb=J)GB&)vqD{o~!S(SQW2vxSkiSaU5GK1{&5@88S_F zc%_XaRBJS;!;IF$M;g{zxv+9Buk`xoc|0hGs1{bdA+>P9q*j*G{)&TgG(>f8D3TK{ z)H~N#3j01cRgZ& zYyqtt*8T7=v4(QgV;M=sAfj}9<^5g0to~&~9zNR8&Ll=EKv~S*Z@1g~`|YkJ7Ox=> zA8N>dm>cP+Kr>UVw_>&UW|+GVYE*p#z(cX& zGZri^Dr-`as?vOlsqjBTW*HpQ42H~w7Po@BW){G-Ib_sJId)K z0$^(tyAqXhddiX{IGs*=kpzuwh+>FR))SZ%VeC&vOIafwQ2g_!WdEb`Ey0ppg3VDR z?N7!kFw~ERpGKeyN{plsrR4P&KnO#n(gT$>3BcZ1djN@*n2snO7WEHZQ2sZ92x$7E zd?*t}{of)$A5{MlUK|ylsKrt75ngXpe4-XWISEhH+EISN_(Uy$stax~QS(uL!7V0g zKFTY&!9*>N+HEmWi=(i~L@kcmV4@a4RaWtdS`ftm+fCGblwUADQ468Wsl!CgK{*9u z6SWwMRz$@oYH^g)FfdUIq1dq3M9oJzu)stuirQp^7f1CU;rXcGL~R&3QR}pJ^CxP` z8d@i6OnmLexxnsmqBaaaAK?)dUc2os!ikz*Ylw{S;%hf*JxtVwdZN~U&qpnHq84Af zb)2XXWm*oZ<3x?92~)`m5T8?_3x z>M$z{v*NR|I4eFY>(BCMWpUPD x8_;ECm}ZS|FbYP&C>RB!U=)mkQ7{Td0RW;v>_E!X@caM(002ovPDHLkV1m=UM(6+l diff --git a/public/images/pokemon/exp/shiny/658.png b/public/images/pokemon/exp/shiny/658.png index 999bc74c6591ea208a51e3b2054adbdad34c25a6..e7278458f2c583b021a9ab03593c6ce4c944d514 100644 GIT binary patch literal 2403 zcmZWrdpOhW8()e_6RC7?sLYf@yqdNg=9C!=nP$F9#+oHWCCVW}i#dBkqEHe$VH#ef z6{|NgB&#`AZ^*Gk%xHS2tA5w-cm1C0`aGY{{oMESx$o=w>!G?hqZQS7g(CO-m-+p+_~uLd<^vCf7cV2#F>u9v!+^9n0vvRx z+yoOXF|vMgo_~HuFJu4rs6yAWkrZ>U*SE=x8mQy!#mB^3#T`}r+{q%fg4%F6f!(Qh z!wEe*yw-P_CZBhVzPYg66JEWxS~rCjh+~iYJpN}-#5sl5-S2`2u3HboPq(>a61Bgh z1;)N4gf`;-hf#v@Hut3<0U4}29ckRCDCE4Q>({bzPP6Xcgq}d734!`GuxeCf5RuMo z^ZAs(`P$%vqX^c{W-G~)5(a&~WJof7%J?J28Y7IN#mkTH?U3_*WhToB$B9n)PktFo z4Xu4-Djl<}rB6YXR1)zyLvTuuS*|>y7w)pEF?9D>CNrvk-xjf-`VQRjIs3$R_tv6< z&EMVxcq#e`LQhUvL#UI7Uo&ookVD&}N>cpoHjcK)rqJFz7N*fACNpVsD-F~^x= z%=Yfty4Zr-D*HVcJ-I>#?2}$nw1xX9xk{L~y6MlU^`$HcNtZM5TQud2-Pd*Yv^rfee>y1 z6%SFdd|;%P(fg{0E%)-aGt!HD*T3D^+JzKwAHwdIk3QluwI7e~>$x`}E^5o)wRSFW zt$~#xgIZzgTwog@A{U+6xwiJ0L%rUvZf4#B9o7Uz6RlS>HVb`_J71_EtCj?GkOI@W z$?SjvNp#g5@%`-_f-@sHUv>CeJP-Cfy{;KiiSqLf-7;w@Ge4?uEs}P#C{{rAj=9tf zj}7}gqQpqMuihef${8-^7o*(Jf04=w+JylON%SR4wC0H(Rn1-%toq(QRdSwAKycS$ zAC}XQ4(Sby;V@0_lgyDO{Q!EFd(zE0sPfEUY7m4ZDmm^GYX6~3t)~LXS(soQOjo z{$tl0)+uge*<5%OG1q?pRo8%gm#~dQ8Ori^Y*RH$4oxq-WwU{zO?qWKnN+|Us^Z6!*JWEl@Gex@o$NSFpyvtX>>MLkd4n+#`m>PE z)2wzgf~wG1Njhx%vu=)5ls|)r(RV$OjU{IG(sPxQyYZ(7_6Li+GJ41BBQ5r2A?3UA zwe=G0xyMTx8@lm`hAAuvPyE!Y%l2oOVVFDQffWy{KKPxNOqR^qKDEjv-uq`IE3z4s z3iw@G1BMar4j4^qG41p@W*Z!%?DV^8_`3u6{yduo#fQE;UG1}5{rc=$0wDM^8Y}Yo z3st*7RyfD4=xqM=c|*dFnr?cAImsFt#$vr`{U($r5^f1sBszs@-&;VcqykPu*xWx(|3YI`0Qg;L- z=WCH!?IXUJ$>F?;tI8X?qlUA9q7gkBPv#)O1gcUjZq;F1@!uA1gk}M`D_$}O-;Eu= z!pha%yB!kZ4}W$I@ErPuH59;8ND+b|Dk?#H;D0AlpoBzUW1^2vXOuVv04`7fGDIb( zL@Bav(}tI}iCh05`s|4+qO4uJ6rI2L+zr5c4T36b z_y6L8G^MqY>Pke}1xbS;xHR~W@cVs2l8XB)sX(dV{jRy60+4u8{N@$Cf}#K76}=`E zApPv}=2w@W4l7pDb|^|$D!?DlzDf*EE-EpvH+*nivBzWx>sd4WDmS-vPr4=qn(mdc zKipW;WAK}Usr^tnU=jYU)t1*i?yo?FthbvKK@(~G+D8A4utb_uf8&p&h5Rke)Y0SN vTXKrb(%y9vw9{oaUqml)Z!cDuJ)hmC4~G%cGg0Hx&ko1|w@UN&2(98anp7rbiApM%3(??+(u7wMom_HMNUbJC9<#3F zO>wK7!~iogwb2AkDh<3XNQs7}B_^615+N%0XET4zALqR9`JC^&oOAv-j4({#`gNPv zfk2@3=pg@a!1k{W(>1^>1ugFe%z?0wNEBc#EiGX%n6K}lu&@(kxj`rtirQGIc6LoL zSU_=CYHI4&uU{pSCu1noeSWQ0t1bV*-C!`RJQEtz4;%vGjncv~5uiiL0Wt`*HV5tR z7x`<<=c=Kkp&(2DC`D+v9kIk!9i5*lUws znMA~Sd367Hg~Zkh3Aei!b4MznQ<0Gz;l@Len#GVKD?XmkI(sc@3x`udZjuu`NNs0` z_7+jHng=7YDX5wuaUXGn286UupBCT1F!!I}jvQ}3=&QMgjttEW+*<%NtT08EaW{WS zZp!bA&r<0N@EsS{h|<&oZwFP{qJL3ZR1>>raV(@All-93c5f9lILVN6DsNv_ZKYY>Ohj6Q(q2>Bs(0 z+045ulrJ#zf&FxRsFgPTLR(LxGME$ZS?KUUoYv7u?;1r4-oI12YkSS##sTN?>Vyec z3SZf6?BsGCW3DDA2~JVVDMk5J)n}I&HPvxJsW9f|7Z^2JONm*q#Hy7^qT2T*I^CvM z3Bxovx#>-7+1+ukV0LCI$Hi%QIHsF>!oBb0*-jGjY0u=4dNT16nYA`fczMQc=IPw7 zecArVnX#9xv3;gKiDk;!t2dDX30dtWtn-FnXOSOb={ZK0d9;N2fN05MdZmorI~D0ey+j*c!~QS?6Q3JZiAYvnziZM0 z{n%t3qRe?DVS{;h*vHJ$Spf?r<;gwD*B%)~AJh6?lwKTM&Zd<^tCBz6Aox@PL^2T#)T$Z zu`_YnQ@ptr1g(K9l(S-XGwnX9j-87MTv~?@l3lA*j;HaIFt3HrKUG;cT9!zPU~A4 zKS`qvZ6E3;z(*cEtlp5YayRzfTd9-b#-`pPDGC$OAzSL>+73{Xux}baS0VQ=B8qVy zQt9VL7wjGja8)3!aXZ@px2+yb>aXan(;5!n+SArc&8Wbv43yJWic%2}pK~=ttfBm= z`{NPN!;N_giLF@x9OAq|7{~H@qaE%}BDV{US3JFs7CxWo3o6Kfgn715q-2IcF>5)IFKCw*2rtIS0vTkW*}Ct~RJj@R4Vr1REGX8qCC3gOLQ_ zth3y`;UQ%1BCI8gTlO5MK_~J=(JdS-NxH}XzR2w1uGc&GW>?}V1*cnnd^`wisnP`y zqIrm)1%O{TBX=Q&Li$64{#ls6&^WbBr#1wWpnpCvbxs&m4b)C|s};1>V7HIL%0 zMAE>{*UJIGyOM6%P5^V+-}Ci0{49#4^G?!Hs#QV~~+m@Bx%mbxsd-iXSKz7uz~b6Qss_kxO9!vInHQTI%rn1bUZwwV*B*2ubtpy5t5^NI$i0*qsOfhvEeQP19mU&vq%FRTlW!4`-!7!U z;#6Tn*~Y%!;g9;OJ{(&Xn|+AG&DC#2W;p07d{%OEK$OCPn_u6$`~v*TAT$c&f9G)Q G`Tqmg+Z-nV diff --git a/public/images/pokemon/exp/shiny/684.png b/public/images/pokemon/exp/shiny/684.png index 96fbea5e3951fc2624e2aa28452b49502b650971..ed7b392cd6d27d7470175946ede1ea2f4f5c9bba 100644 GIT binary patch literal 2998 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 diff --git a/public/images/pokemon/exp/shiny/944.png b/public/images/pokemon/exp/shiny/944.png index fdb0f2ecb689489bd27962152da3b6ceca747b09..ee13a988a2b6c7ef37636dbaacefc0aaaac94048 100644 GIT binary patch delta 3482 zcmV;L4Q2Ag1)Cd?BYz4vX+uL$b5ch_AW20-HZeIiHZ3wPF#rHaiJg{rR8!d&htIt? zy-<=6ij>f6Xi@@54ZTQ_E-Enz5K6$103tR-RB%L5k){YTDBysjLy@r}iiH7DvFijG zMAUI`6dRUFWUU$Bym{}n6@-c&M->OB3XhmR+Dq`EL(i`nPm?-^D=}y8Ow9d;$`sU z+$ZCWITF5%k$+$r7v~80xiY>cV}o=_hCs$|GJ-AR zc>v%@$zSl&FIdda6Uz_9&dgda5+tXH875p)hK-XGi{a1DP3Mcn%rFi&jU(bQ*qIqw z9N}^RX3zXt6nSkKvLZX!I5{{lZ7prSDAa#l{F{>Zc7K*$gn#ZCL?8IW_E&zH4FIsF zWwqJ*hiz#U0A1?=P`mwy&0sG8in6|S4t;SRx_n+z#NsSxE34exTuT9;Ybh`2@A{t( ze?wn<&r-hK@8w~5^OHD|bTLC-H*RKnrbNWZ&f;+S4CbGQ_#X%UbsiQG{3O1JFO)?@ z%ce{qOn;WOTgVfL1(`yIK=_}U_z%PWq}jQaiQ4!P(3V&Nr6C$XejWfQDiI(Fdt@un z?|lo#M+5oIi_w{wo%_#%{(V=tO#a9gB!7-$M?^BX5>d|Vn*3Spb<2KHgFhpfn(q_ zI0r6)%U}fD0a7pyo`5Ov3d}$dgoVfu6;g+EAVbI;vV~ZX8{`88LlICMln5n5LP!D? zK>Y--nTj(fs8oB@tL${z&XcGDrdIuvg38ukXun}wpvtUm+2#$mo!O8G4 zIDa25g15kxa07f0?u1Xnm*5dt3O|9T5r7a8I--j(5f;KmLXmhR2@xTykP@TC$XgT!MMW`COq2`C9~Fh-qL!gnp*EwcQ3p_+s6NzH)F^5S^$|@*Yog83 z&gcMiEIJvTi!Mf2pqtPg=(Fe%^f>wz27iO0V~jD57=KJ0CKa;+vl+7+(~dcX8ODrZ zrmGU%CVfuCYJ5?=JPgTC^Ce=38 zE2^*6=BRn7@zqMy+SNwX-l;Rxebm#`x2boj-_t;8m}!J-LZ@rEqJ6vJJH{eOn9jf{@^*$g(bH%l?AF&i?6%^l1I=DW>@EzlND7D9^#iyKT5)03IQY-NsG(k+86 z3oW}WpII4L#anH&>bLr6ZEu}!-DrKshGG+FQ)ts;^Q*0yE!Vcj_J7)3@?77!tLJvl zeQsxN$G6*KchjC~A7a13zSsVPgQJ7Uq0M2^(ZDg$vDWbhi^d9LZDyT!LOXdmt#&%* z^w!zIS?qk+`4<^t z4d)BzcZGt`fY9xs_ri?BmW6#EjtLJ7uL*w`VG~gh(Z7JYV1LPimIbdOy&}sZ??jnI zNuqkA6{8cPo1V8I2F~=-fTgudr?_nHF76Ya2X6;&lJCkd z=T9WLCY2{WN`H1u-kv;};+|5G@>IYUR12P``lr^VzD^5G+n@F+Jtn<91DBDQaa2eV zrV0BpwKMZFhqKJHinFB4oR{rfHYExYHDyEDi?X}LG}+J8fW$Z{}{k_?699m0x|@lC)*8%%N=0R?Jr6*6Z8cw;d=~F3&F?+a9vLa|dHb z$&Qyhmw)WMP+?b5w~Me#vP)VST-jY^P_?z{eRWFpNR3xbd#z^errOuLdAqOd@z~Q= zr&U*4_inFX@6CF@`pyQUhKhZdeL4FcHbyu0f6e;3xk;m`wCTfs;eP3Xhy#7ij?K+2 znk{9maI2(s@?gTj%inl^)7{2wt8b^bmmUI#B!7nEzR6y-RxUoQXYituMT9@NCf8^XGieo$2@NKY8Bu{ILtp7mi+JUF^E#aH(^^exTzA z`+pxg1|0@Fha88xFFRfC8J;(M;)?r~(^tK(p1T%s?b68nk>Tr6*KgiPxFNmCyZPu= z`mN`;b8gSvS#uYCx8$DEy^8yq_ZxmR{jpu@AU!_nJv#7U!Gk+v+_5J=W&iYkyyzkM zVa0^bMDrutN5>|8Coex<_;~zD){~j1#eY95|6Kdbc>FRj6+1QlT=e|YubW?} zzu5oM?q%ATY7%)s35(ev-<`HQbbK>z>%6LeBeQvm<}|NsC0|NsC0|NsC0|NsC0 zK0n+o0008JNklB(d%yh%h8Kx20BDb+J4a+-YhDF`Jk-HO$+_uUt*sEKE2Y<5Tf?9Z3NcM$9_58-Qc0VTCbhH)X;Mj>kS2As329PEn}3idm9zkR~CH%E5J-gg7b&54Kbp>?Px<7(8ts@DbE9nuIti1_xpYg+g>fGl-*{ zINV%*4>SpJRLTXo32{_91b~|mN9Eu;ZbBTb1jieU!%c{z4Z#_1^0dj|C``_2^5?WE z(WFG1dxIp8g*BSY|9{_(n-B|Iu#p$S!vBPgydXj8XcNMujyBpF07*qo IM6N<$g1dXNa{vGU delta 685 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 P00000NkvXXu0mjfm`29_ delta 1601 zcmV-H2EO^RBgPDn7=Hu<0001nI8omK001yhOjJbx000jU4>CPUOJQqNR6SlYlz)F< zlwsbbnW(9$;;g2bwn|{t%>Ufn!{*}Q|LRs)qeUnH0004WQchCOn^gflZOat4TPM4kTRJcVwtsuXgcybnLOXI^8N)Cz z40z1KICAMWmbj<0t>(QC9rD1j6V0dq44f z`tY>>I`8djT8{_d(T{eu`YsQ^JISF|KV$%CRwL*nTlK_P-DLpS7JIVfC*##I4=6@$ z0iAJ@)W!^;n171rxllU1=p@E02m#P^!Z7fl5GF^_{iD5PjGT%9*ieX9Pm*2~^`gDx z>C97c03RCGlSpMRdYWwqaS@>OP(O-fRn`p6^VFaK2eP>2&~TEblduOJFU%5<05$Y! z3Y}^E{9aTIFXE#>nV|vn8tEWS<9PpZR4WX{0W1{&ynoO?NC%TiygwY?yX?>a7Cn@k zG+v~G!8A_a>=-nF50#}xJV^)fK6D-javU8lY*}^*0ADp&`|GzLke$&8I-!bbxio-A54^Qer_=d* zA1b3iFMm2d>_G!~s;#w`wN7|9{vA4hg!vwpO9L}<&B-<~#4}jLpT?un%U|+6EVT&* z6!Y=9<2b7I6MU1O{u;+GJkiPauv;QO6$fVIlXHk6OCk`^f&A>Xgt}SyxcpQcn3a|D zGm#C|yWOg8g--)TszS4uz6{hFq#`<*{jCb}FqM0A*SpH1MG~P|R1GJ6Wmfdo5R<(tjjz*|hUh z5da_h?Zcg_+$XGgoxqiyzGYjM5LLK{{8SXcHodd+z>}8?*Be6VZXY&*3x-QF-TYJx zz<-7scQzk5F5E3N!qBhuA+Ye#8KZsZ7GGW4q8<-=={Q>7J&K;Ooqr-=AoeFCK2w zK#7PS(qjWUgVSTJ^5f1X4U~xx1^{~Fw5nCU*)|ve9$i4Ox_#|aHh>m4SI)Qq-hVka z&zJz7l`qd2XHS1f@tusjzIvlmr9`ojX1`*vb5$=@03eeqdMN_ndMO;>dnp3odMO3`54;os@Vyic@Vyic@Vyic z@Vyic@Vyic@Vyib@V%7wPI{@Oms)zMrI%WIsil{SG!643{L~|`L<=7(Eq}?@A}97h zWJyah)_MzE^JptGMB060aYJ*NWAKJzkBt0_p|s4ILm?gBFKdXn3W*=CA-dwzCMqn2 zM1}RVi3;m!6BX9eCMv9_O;lJZ-`h5X;G=PVW{pIr3?|nOO-K1b2@sda)xM5FICPE z&FiJg8=~@FieZRIFU2rK428rF-w^Q?(%aA9H~9JUo&E|G00000NkvXXu0mjfz)$ov diff --git a/public/images/pokemon/female/154.png b/public/images/pokemon/female/154.png index 4921f1556aae06bccd9162e6106e3de5f4cdec97..f671d6b75aa3ffba1f2b1c7b95afd62f698fd25a 100644 GIT binary patch literal 15026 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 Bk%|BS literal 8625 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 JPDHLkV1jzJ&U63( delta 1829 zcmV+=2io}P57!Qm7zqRe00014Fv*RPE;D}tbW%=J06^y0W&i*N;Ymb6RCr#Um_KjZ zRusi40t_z+8FO!wbPJDP8C0u5FvH*SgH3=4H!na@TJ= zQZ3ed74NEM+fMwL==$!iiLJ?hjhS*+VN)m7|E=}vrD-Zmd~f2-`4;h~kZ!S8*-h<4 zC(%T`YMRg8$5~VSI(q8FCEa4KvYUTyD>soObLe*AykYH?dKE{{+cy48TeV*EpcK!v zve}!xy7mwBCQnSZx~Wx;Kb&p#NE*p?m6=VOip;yrhO65@m2wYM1=)M^JfEC|)tkrV zr$cpns18Y4y)>UA5_c(OtHWQf*UDW*zBl%p_}xe`;?ED~O1(QAUSI!B)GB{IH`co^ z>DBFl(j<8=Jr7+?6Cv3n;$5l=l4-2{gQC@+#iJ@{VwEcIwa>GJJx@s|2w4>%Umge z^xREM)v~{PAdU6RIB`;WArc|FN?~jXEwpK!usR8viWAk-66Gd}_{92C886CV4N71n zc4mV94Qo)C?fU?2C4Ry{jsO~INPQd=x#v@W4kaY+{UewJG$an_dpQVbOoZf5b&Ts0 z>kk1Mk~h+*Osy^X>tBC}2jhT-1j1&Pe)-S3pr87HUK>DTVvpG^KR&J<`7I{8fUYwF zG$w-C?d284oo@fzLf#h8wUiFfm(-K{(Yby)tv7r>OFPt_w*6Eub;c0UB{3 z&QospgHpUd20mUIiStg zDbx^R&yMkV5OF|z;ph^aknS!KZX^dZpe-1nyLaUSfQEJibSU}tBDQf3XinG#B}d zOfnNQNJD=On)4kMxP&y&poeI@6SO3x@dnLl9GM9Pq^SlC8e?KCzM(;n(fE5CG-wRu zqmxWEXwVq85kN!cG=>e*WP?VWO&o2|oW_`#jy7mcW8R?W(+!%_7!5j}Y|xy>p>NQl zh^GO~X&fq#{P>3eJ=^4C4SJHsB8H8TcN)3?G{b)>gE^o(0%+j$#4G__4rrG4Fps)v zXAY(SooRdk!nS<(Ru1UaiVrXme20w#y7I4&bMt{&3(R(Ww`H9J8vUD+{@wQ-tp#Q~ zzJD>)1fX37M*JqDq*YZ6qZGqB4QN;aSXeorIbmauKG0MN0G59PniIAMXa&Gd0GhXD%1IgtY>omNZ5h_h zC2%+Z=#kgix>%Gs;vCSUZ8@y<{XPd^8KB48a(GoNbPm9d0vc@@fYrLp0aylT-j;I^ z$bOG1L4zIuGzi-VbXZ6s@(T=PfF5njp~`3Y6Z>{RgT^5N`G)~5V){1@=>Gx#qrefe TO_R|+00000NkvXXu0mjfqDpGO diff --git a/public/images/pokemon/female/198.png b/public/images/pokemon/female/198.png index 29bf2a296a5bbd97491d8bc2dbf98241973c0dec..9cead4fcbe04464292da5ba2b94a204e4e477c7b 100644 GIT binary patch literal 2796 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 diff --git a/public/images/pokemon/female/25-beauty-cosplay.png b/public/images/pokemon/female/25-beauty-cosplay.png index 018d00112548c7048179a1d06c6a5b8e0fa07b91..2688746855936a1313a6cdaaa8c523fd8b9ade2b 100644 GIT binary patch delta 814 zcmV+}1JV3~2E_)DB!2;OQb$4nuFf3k0000>P)t-s0000G5D+9IBPl5ja+!(|;>3nBZ9O45v6+;RMx~UEDI9Ql0aU$0J6s6PS5VV5{;;MNh}KB}zM2>D6ezDLbEDc*z(fY;NzpFfa*`MoPYJy9 z?>y@&hVJNlU=WLaKWz(u-S5ORUBuNr zO}2;{?3`b5@>x7y&vE?2a{=z|qj&ClrNrNEHg`^UX z2S9CtW`DiTG$x@zSahZ4)xLgs*6?b<_HMF*z(L81#?gv(bv!*&Ut_21jmi2KA);%#v{3 z-I-Bz)i|~>(!~x{JonE;tag%WP|!-Yzxb?=TBiSb_$mkpmkJom=ZV)v&bxdD6DHA{h~Z4N(YyXD zp=Cj8mxbZ;w%g-%0jz?u&*nB0q>C$3&_FQzN*UU?jm*}mhpO<{X{yFJCe(j}v! s)hAOYe$^NiHXE9U50~m+552#C0PCPb9&$z9b^rhX07*qoM6N<$f@yV`(EtDd delta 746 zcmV1?M&I=Z}7d*qs+%nBvpoOr+6T`_()hc(ue1UMR1gSaivLhF5IFyjD`@Z5r+^!2YNTk0ZkN(==vcc? zo_z(UZSW##FN5b6Yw7;447h-4f-|=0h-dg$;KTj3z$OWG->(EE*pbsmidY+Wnd7dFg@`hZ#{WE?&@qf<1pO{MPIC(}*M<3x_yy@dX z-nx4v<~)mlwz@VO0?`k?OyWllbIUf)Ec>iT?fM5$-N|R$<0V z??#M`MSqrrKQUgTXmdV?Xth|t{5XCD?}$Zpcs>N}{LV{eO z<8gi_B3qRf(9qRqCNyNg8s)YqenhVz6!XJ}6DA#RGKmMVfCm-agv}>TBd!_GH|STt zgZRZ~fAlu}pNB8xDY#U?Bt9#zix`)DWL;GJCSzha+B&`T-w4%;t*w>e^R`>@o&dWb z`vIEy=*Q$LexA5~!M&MhJiYSxMvnA}r@lm*@%{Fc^iJo9j&@J;3kjR$!fspl@Z(bb c_AvYV580(DMW;%g4gdfE07*qoM6N<$g0I(T2><{9 diff --git a/public/images/pokemon/female/25-cool-cosplay.png b/public/images/pokemon/female/25-cool-cosplay.png index 5936a9042edfab79073d447fa2ea567b26e9c185..ae1e7c76d443a2114597d70a4deb65eea543f00c 100644 GIT binary patch delta 1847 zcmV-72gvxA1-lNA8Gi-<0039HD>ncD00DDSM?wIu&K&6g00#9*L_t(&fz_E`Xj|7A zz<&x}+6)F)NRjD_lK(`8^aJDj z=R4>8&Ue1^ec!o)0EtGUX3+B&Np^W3M59r&vr|Emq!$|A2mVu$hTw+|#b0QvyTFB; z{1l|AtK<@umJSw;MosbeynVGfZ>rTQ0JpP`0nqZ#+r2wNc~;Y`R;yGhmC$zjbv2SC z$uy?JE(I-L-bC(-_h;0Dcia1HjXN zV*_8GUnc#}xT~!b{=tK#mOz8YRRqA;@G>v|rv6;OdgXsh6CCg9;QIVBfDhUU3~UJO z+{kNdYfW`+@Cz#|A;4a80n?T_1u<#y-}wbyvyPO9_rQycv_zJHT?AK zIJr^@fPb`J0Hw=%p%>8dMKW{Jrd(n&iTU}OKl0Qj(GcFZIrqg^NMAO&KEKTP(Q#6L z^5=@wU*i1Z`$Lq=WdP*9a{Z;!wIygZ)xMEhpae!0xv$KJ%gdxMn{`WiWZ~Xj!r?H7 z-+Fsn15YL~)rllpz8Luan{V`{?E}FNzx6iZaDUi_*3R4nz2MRjiE82AUA#$av(V@T zK41G?piXC}LT9Ja@N5v6UKZ}%b=4{AMAEOMbYVQK-&pc$I#oT5wKF%Z38dNsT}MCzEdF+$Hzr>Wgm6Lw4XwQy@mai_sSqA2 zT7Q7G2mx@gsPL~0JZkq$LN8F9f9mTvk?2L&3#P8?p&)30)6qNIhWGh+alW=GYCi4V z^#_ZN(B<*_v96<5n|u%b>L37$qL_-Jm_hpLM3URt$DEGd;dJy)AYh|R8v;lsPnZC` zT;&!g0MJtNE=4V0q&M0Jz^%1u--HD04S#LQhQ4?q%}1kST)dEGal*4ILD9;w!a&oo zYFoTt9pn}#>_OFh4{E+AsErTUDX+cyrhWa<=$L)&iuE-}?+T!Fp-v>p%t;&O0+){q z=+|C-lkTGjxuH$f0aNX0`Dy!FK=-SIsQEf@_tArPoBLlr0^r?uhHLOyf9MqON`Kd; zO9X&6Ns>&bm7IeMDB(7ZvYeQ(fOW!uF?$)qFaR3Hduui3wp2Cls#GeWD^pq9I<1iV zUq13#JLvo>_mz?R%2XiFya~%hFvb>^nZ72=S%!?=tS+w2w%)z=G}LOUBH=0gj}g)yMP5+ zG}Tml&FzZjcH!GZr&p%3=BdFEu1sZ-Wf`!-nbT^d!f5#-<0m_i_1&n|Do6H&7?{f1 zDu!WjZU5fD!6ZpC)zsGNnnq&Jb~F|rDE1X@!B+bszLsPfWXR589mDbs1MU%tWm7;r;gxyI{l$06aUt8-QG? zWTo}R0)KnsmmG-4xaNR8vd3Z(|AU~dXd(ey|M28W`Nw-Y`09z3o!?*lmhZBcNF;hO z41;IqcQby{Iu#j)K_byhzkfQ2qIB{8;41pdRo!R%t^LhzdC5|2j^-D5$)aaO^2m>{j_7>40WCX2HQx?bRhHsyi_Y~KfLAJ_6la*0YyzJCIT0J|gSz}+(o z7!MP6;p5Gka$nhgFZY#QZH0(E0#+QCB*_$sXtU?irr=I^=LEWE7OX*Pn|5D(h5s)3 zEt!c#e10w3%Cc;)k~4cgFSskJ2%qhqxn)1Qwtp|*WiRo{$XQ-L^((&q&yN7S{&5>e z&Rd~xV0E3`ObKsa&VOq=Da}d1<_f81;7t?^vzbuj)Oxzx&%$YRdCg0qlxYW zG{|6F}dP>rFJ8A#`002ovPDHLkV1oTbs1pDH delta 649 zcmV;40(Sko4weOw8Gi!+003ZT+XVms04-2VR7C&)01yxmDJdx{uOm`YT5oKQgd!rG zQUIo{w#6YC=2}Acy&?DJQvdg*|NZK#D(zJO0004WQchCBl;q z2+91aKDi*3N6Hlg2(N&AQ3gB{2<7x}jS?_j z^L$kKT&r%tv6*qgam^M!nipStxuwGJ(8WA853k2nby%s`#;{*mncxVovrSI%M$o8W z4PjbPRey=0&Erg>JyjHWi;nV`pQFKYO-L1!oO+47lI__xIa-X6{W701X{8! zU&3t+eO|(^mPU*BJmV$3+v^Vsl@vAl_OZFam+@%n^^o6n&SN^ZY28mkJqz%3A%Dx| j9E@hY|NTpQmCP>!s2Y(FJ7GEi0000;352msLF$bXXA=l_4UK*S|O+T%lc zsJ7>dB+yt&DN{KU(*^#OpYf{Ca?JidrCTsvX8Gc3=Xsuzw@$N2=iORlTslr9W4&^+ zuuIh#>QYcS5nr#@TDfWSFxW2TY}kFohQD?QxpsPwZHEq=LJ5FaL0cKr*1Y$~hAiG6 zcv2>42d~J6(4~+{wpT^aTalfz26SSWPI&cdp zaohFS1Dap8&gXXD0~fYQR?V1}4z!ffl2aRe=D|q-k$HWM z@Az?2_N9~lJNp8ctB=jV8;HY*LVNa%$0@LeI7g&>0z`UUhvO3C7*;~d=z~I%MY`o% z`YuMBZa&@~(5`6U-x`r=-84WwJ~(es)7B*1?Sp?EeyauW_`4=J^BsrLcczpdxilL; T6rN*#00000NkvXXu0mjflN=$M delta 549 zcmV+=0^0rF1il22B!4GROjJbx000mW5Gg4sQc_xDF$kPe0L390-jo35T0-}|A@}A| z|M#W;{pxW(K(hb<00DGTPE!Ct=GbNc000SaNLh0L01FcU01FcV0GgZ_00057Nkl7siB z?&)cxQ4u{3Wq<5jqK=OqU{FZh=wlb?1*i#rh~=Yww^pg_7J=58C^R z3)pehi4GeWPx&l3E8xLxbL~6GCPcA*HXCqrf@8or4u6B=>-z{g<1;TN0rbq*GEwo_DR=4A<_olI*k-{yK&_C}>Bvs$h}1bG za72Q|hRXQk7!I#5Wmz~y0+(Y!vbz+bSgSm56@BGXkgKpP)SztG+!ywxF2 nhu^dS&L00Q!8hkPz>@v}s977O;ogwN00000NkvXXu0mjfNx2Cs diff --git a/public/images/pokemon/female/25-cute-cosplay.png b/public/images/pokemon/female/25-cute-cosplay.png index f559198f7ac7518c3fc9acf6159d7bafa7750a15..675a141b0fd6fcdfe3929f1b3badc07d384deb1c 100644 GIT binary patch delta 719 zcmV;=0x?uYUjl z02XvoPE!E?|NsC0|NsC0|NsC0|NsC0|NsC0RDq470006pNq!d}q|qe5o4Ta4nc^E9GM zDd1UdZgIB*K7T8ut!P$>J59e}Q|RP9FSNN7gcNa>BMk0mKJk=^q~l*d#>W#a&$wFT z^dnoqU$)bZbL`%y1E;{ou=HST;GNzQu)5ba11CNdiH`@=T%PcGX_!e5} zn65YxKLq~xezz6!4RhSRT)YRo`P+&H_?lXZ|hyyj9t?qT6Npq`?8_xsS z@jRn?=A5a)YVX4rJk?^IN`zLS0vsK)o@j^{(@Gch>MgYbr%kQ_4rvie!(%Gfg7%^{ z8N-_+CVv$2f+r=o&k>UJObk!T36(}@eOg+wZWY8OGQK#`PD`@>5L8vN##OD*h)0p& zMyid_M}Fb-v4Tbl20Z0l3V5m}H`KJjVH)By&5#?5Og~I~0K5>7DgeLF?kgMYmmfYC z*sxrd#Z*BmeU+5}z6~B%7x2~=d;2P%89c78;7APh4Sb2aekHmu@Dw`6UgLk!P+nYf zkJe;Ihx|cjn4S)%8SVF)hgW_6#`<^u$HyXu@DDqpAD0+LlFtAD002ovPDHLkV1fZQ BWC8#H delta 683 zcmV;c0#yCy1;Yi9B!4haOjJbx000mW5Gg4sQc_xVE6{~9N1Rdsx~Z7OAsNp{aOPS< z>Vl^8y3Y5#A@}A||M#UCM*E@w0004WQchCUwZ3WkfX$(kdWy75Dwb5Smtz^y_k7|h z5$U$zhWvr{L4WHNXInWn-4`5Q^@L09>aPPQyby|_eKB^EH@zRgCeLjK{*uFyx~_0@ zqc`#Q85rJK5#8u@QQGJl?l_UG3O!jCo1qKBaaXyiTbasYNdtTl+z;H}2Ax|zbX;X! z4F|7=`?zj1BzIYlI zNaNY^p68i3wc@z(GVTS9(~RtyQzFab((CYnr;@EwiBKw(fumx!9S!kpUU6j0_L@rp zPP<(L9M)nf4VSrGGRlj#!x(ms8j#2lR|t?#6_)gq817V1MW_s1u?4GE#ky3-jT7Y* zgVl#3tABzOE^~oLBEvqDN+Z;fH=KSipm78Po>IygJQcG$TW`Wv4W=PJ(+s;Y$^65> zZ-67oCTv)7002ovPDHLkV1j^rLTms4 diff --git a/public/images/pokemon/female/25-partner.png b/public/images/pokemon/female/25-partner.png index e500db2a3bed79907db93400456cc8842f0b23c1..8ce8d01c9378f6a5b6c8acef2d1692f998b3e0a2 100644 GIT binary patch literal 8109 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 Bt6~5E diff --git a/public/images/pokemon/female/25-smart-cosplay.png b/public/images/pokemon/female/25-smart-cosplay.png index b5c979e78ece5b04daa2d6ae4e8e5d21ee3d6100..8306fb17deaa9864426b9dd8e1212f0ae4b1570e 100644 GIT binary patch delta 736 zcmV<60w4X+1^5M!B!2;OQb$4nuFf3k0000yP)t-s0000G5D+OTDV$OO_q`$a=290I z7a<`bQc_yQAsOacLb@d-<5E&zG&GfCTQ+7jV6{_JR9v^Eng9Lj7R2c|0000KbW%=J z0RR90|NsC0|NsC0|NsC0|NsC0y5VD~0006?NklTsPht=AeZYY66oTg^W^gp&d=npu-KEuHiCD;cJpdSh|>;nf44ww`tb=cRJ zVF`dcsd+|}>Ey`Q$Y?G32mw+)$dgJ$Imuj{Nmh68Zf zaq9sVLJ-!3MbI9IW?k2pgPud!VvN+|SlGOml^HV77k{eqg1Jr2nsC7h%P(hiy;NKS zLvLDCIdXxwr)c_aNW@z z&Kglq4u9ZcfND{QQOvmAsHLAeIDswsM1;y?f}N9@I9|7{Ju};)AAD=C-VcxfGSFM S|1!z|0000O#|BgqZ$;6XZJ_ zJW+srp#Yi{#s`0)pvD2K79LRO`&f?gP|0cK*?9Y>Fp2?%S}RdB@$(vMXBpt2CB~dH z-VuOEeWwkNx#M`q26?4ntx7&|+BWCkVkFhP*v0V^zC|cz0VLI3c)}W?E1h>Jv{3N1 z3gx)}v!9tScz-A@bh@?1u&qbvem-z+z-$kn<%-X;x%Jcg7#YSJ!*|s?@EE5#&3gje z{5->R?$D-u<8|FM$4~$+J8n6^M$W?Oun5wFn62x&RMd0Mb4rP>I5y@OWo1Sg=nGL< zAaz!;B;0Vq_EL@ZhvRA(^`=3U!xv~rN`{{Ty3%ZTw0{gkLp-c%0YB8cXfIZns`Z*< z@&cdaMu&o$KzM9%DF}6@m+%K&P7|MXNk=~&FzACH7BQg)b~Y4tTzPq$1y>|!J)+PL>&||+XcJ1)9P0Q0 zo|ZM?_kT@NPN>NO&(${qKAZ%=sUXv$)c~HFO;$!`2Rx#e8ljGoRv|hAw!^9|GaUCg z9l|ZbieqqNY2o3bwLlN!rTGBh9!6bgP)q6A{Y*dhG+O;zzcwzt^RV4s|%m& f*L&vGz+m?WaoZqf)JGW?00000NkvXXu0mjfRe(qv diff --git a/public/images/pokemon/female/25-tough-cosplay.png b/public/images/pokemon/female/25-tough-cosplay.png index 2896e27c8a989332c5c345185037d267c70ebdfd..a12d4a40a88a65aecd30f1fa677e0f01ff3a52fb 100644 GIT binary patch delta 655 zcmV;A0&xB31g8a%B!2;OQb$4nuFf3k0000;P)t-s0000G5D=VF0QbEi_vTV5DJd{8 zFj7)l#UUByT0*!eE89vpC?GIGLPG!l|BWjhCo3yWO-3`frHUIzt=}AOER7i=n z)$3Y=FboD@k`{OH(H_>$`@d7aBn8S=+_N8MI%T{KZ5r4#P18KR6Y~fCD}TpBzsq^_ z`8+HExO?KTr_*U3Ty_3%?!l{-7;*Q&nccBodC-9Nh(nF@;34FjMh@Par-O2_3%TND zzVQt|RVdtYt$)f(HQ!^Y(4Hf=>6FBWZ5nKA?tLh!X31OAH;M1G8*ust!YdJdiC;N; z%f6d^_#&5T#Y7yDE9Dkey=*|2K2+i=v-ZAV#h1(Cu>rjBZ4W}J1t-`^{h%-BLQVVA zfM2S2%-5@osAq(7-P}?3bCoW*e#-84T(5>a5B*>qpMT4{_~OVqLkGwR?)xDW*F`A~ zXSp3cG=v7ZT`+AN1D;xqBKJ7PWip6CUs6hK020Tj-2AYK!4Y8gZe0B6j-RHO)&PCw zDMcG_zelM<y(@`KT_)v*TJxvO0}cO00;eB^S&1 z9X|;ulYb_~k6Z=^NSrZvoE*;qLLX^j?_{XU8F$Fo>+^^xYqY=ecp^ULrM7LVr9I4Y z;9&;@%VxeVST1z1QbdWr0+H9NO^bv19i?8{mhNo5)qVQUyyX1R-+ED%fPmMP3 pfZim3&4uFr82+8_aXOyNFNJ#~?}SEHmH+?%00>D%PDHLkV1lc1NhAOO delta 590 zcmV-U0Uqq3VE_OC0d!JMQvg8b*k%9#010qNS#tmY3ljhU3ljkVnw%H_00GuX zL_t(Y$F-H=y22m`hKGtejQhXc^MS5yrShBvv{B&uQ|LVqNsJkpas0&tN}8dz=BtrhHe-wz%E-~&Hnkct*`u$ccq@43*RTb$s# zHet@$MrejP?!ld@XSFQIyG8ec`)ts8$%l@k-R{O0p`IB&z(z3L{4N(OMbOLR=_Mh~ zoIH)`#4+G4)hO^4_M>~WO!ATt20nztIO)8A9rs9wet#c@fkk+l@ZpRG&~H5Qst?FH zm>&jCvcLfupZDEE+4tJr#d93tKIksbE5AVJhPx+wd6*t z!2^UV2G7M&2MBrO!cASY!fYZ z3cIM+VMmJ!*;hOGlV0J2uf}WrN`t526{7T=Mt0eIfW}b&|B<$L7Tp@cr?pVHKQG@i cOMz9_9}Tw|ZI~l=*Z=?k07*qoM6N<$f^8=ofdBvi diff --git a/public/images/pokemon/female/25.png b/public/images/pokemon/female/25.png index e500db2a3bed79907db93400456cc8842f0b23c1..8ce8d01c9378f6a5b6c8acef2d1692f998b3e0a2 100644 GIT binary patch literal 8109 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 Bt6~5E diff --git a/public/images/pokemon/female/26.png b/public/images/pokemon/female/26.png index 3f8c46ac761d9a5dafead708c06913b855cd6101..242785a81cc8907a5f1a2dd6bd653e8ed09124be 100644 GIT binary patch literal 11924 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

RWHcOwd;(ATv?9{Fx-5j)EG$ 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 O002ovP6b4+LSTa7#`I$V delta 380 zcmbQm(!)GKvYwfNfgzK5&3holSRCZ;#IWw1%u67LCEd~2k%3`jKlh(RRv=$Dz$e7j zz`!6NAmG3PjR_6`Ga4K|TrfCcpwQ6Jv0}xBA3uJ4NC?<5L196LLBn_&*9@xN>L4LZB39fk%C0F#`kNVGw3Kp1&dmD0dlUeB3jZ%=wmX(>OY}OFpX2_{n)PVY`&wqA7O9 zE>k2dr~S@vVNid3t&Ek`_F2e7hUn_uj08NW`ay=MRdhMNz3$l zaLma)2+~%0cIjF?koF?eahx<;>>tA`_9yFUeuX|}7 P&}R&uu6{1-oD!MU|B zLV%r}ot>Q|h-e_9VXHcyw>YiaOPP6f9Wx_TGD$F&5XtwHmw#xL0ccUlV+pM?oEv*T zNqjKI9G)iVXw4CTS%}T2zKwo<)D%zC`P2q32_hP#$stWX*4E`*t}a`M2-c(r0IQ08 zIju4l+xYHsy(QAmw5qy5ga_ytdX*-mcm!(#vd002ovPDHLkV1fW=&{_Zh delta 344 zcmcb{{DNtMWIZzj14AbBn)g78u{g-xiDBJ2nU_EgOS+@4BLl<6e(pbstU$hEfKQ04 zfq_9lK)`_o8Z#OkK3p*P@#Dvbgn%6r6gCuSEXXhbs`}AhA_=6pOM?7@|HA=;mp|ht zpfG2FM`SSr1K(i~W;~w1B88!zfnleoi(`m||JzHBV$BLXEEhPJWbOUmXw4a>sPL6x zZttEa<_%)M5C3^+B6}oqXV^3j#rs@OVxpdHc*WK+We<}AXYp3+8Ig?3Pl^=vS%z92 zGTOVO(PI^t)zaiwX`7cNd^+*U~>8ETb*U>aW~bnrhF`~Iq$dqnf$>o6XK7mwYjzE)jp5Ez-J|O!?|sXe!s%g jjVp{=7TdJ^{>Rwju3owK%=S4zzcF~a`njxgN@xNAc6F2O diff --git a/public/images/pokemon/icons/1/25-cute-cosplay.png b/public/images/pokemon/icons/1/25-cute-cosplay.png index 76488be18fe8accc22a5ffa9404f5ab048960042..71822acab8b64a6a74d42a1cb1cb18ea94252cd7 100644 GIT binary patch delta 599 zcmV-d0;v6>1LXve8Gi-<003UyT-^Ww00DDSM?wIu&K&6g00JLLL_t(oh3%FvkfSgd zM_+GFAd$$($Vem-i9}W+E0IWKB@&55A}f)R$VenIE-QLryS>}n!tUOgz8QugWF~KZ zU;e?9Cr_R{`4mD3Cxmcc)$g7k`?OvMjiTt`eo+*$RdSc0R)3|_s@$B0XN%-!L9I$B z>l}c#3TSLXALf6Q@K0L>Yx~wDfBx-f9LEk|9LIx~i&DjMnE(jS8BwYT6NxTyO4kQJ zurK{Q&yRS#%ZCXzHX)8<=Vil0G7lO#R%;(GEQD~n57B+N%H5_1P!|jHJY$SGJRxpt9vRIe=qjAC`Ma&`ZKKky{CKOaTz>K-Y)l z+47}w4-0yH32)KbqSUKQ*N4=t0eB<1M-Dcu;`ij@T%&#^2dpU?V-Cm4uI+6VY~BMm z33|HQd8PuSl-zIDeV8MJaQBjX_;iT@IE(B1WY&2p>wg?sWNVrKNr{^iq(!i<=zGjD zrO!hAM&5@xW(;=A!Hxtgbt07!!!#qZ2GbYhMM6>)TrL*?>iSG!#Z@{JOl?6mEZ>{p zJ$aE}`hrwOBvrxCSnL#&B*`i_4;rP^ZaLVIVApj_^|-eAG@H2tpifS3P8uoYZn@2Z zUUHhQM^IarH*Z9NRc`DQW(+=+-fsLYWgJI0j^lc3vDP|kt-G|+En4lmpni+!?YCB? lo6GM1%e}|mtNoMj;sq4UVMc?)hlGF~6BHU6Iu>LYoH%g;s7dZX zttXHYC<*cl{*MY69w^63GBDILa29w(7BevL9R^{>+%!>pZuY}xNpmgvFFE+k>L{G7_5Q&%qqD|hud33m>LRqK9JTxzm2RCC zu)Z%j#wo)3rsHzP?36iGHLrH8TBKY5w8YRME}6o!i3bxf>QFp4!CQ-=*}4RGiD$=Chmavtnz3~zlO=R1RCFo^@7|2T zcu291Ou^|;aG}wXUI+IbXUQ%;>HI)gI-PVsz3<*1r(oHLNPmXMgb=B??|YmKXKFgs zu#=m)SJ)ldSR%d=k-Yc!q?CUm$GyKN=Xun`9@zp7TOi6P?2Z!23#mIc2y_HC8WA7!lWun)H%!%`0SW<`DaHx%8r)(t$E-eFlLzixzhkSozEyVza z9?Wm&0YLJ?VSfNyk*k|=kX)Uv&jleO$z{%Fc{7rLh~(AjIso9!yI*RYJ;~tzJdNw` z*O7asvK#LaB9i&-JidK-sm8K9=K!XSLgjF629Ck}K^@th^VI_CGCEHy0DxfZMdlTD zM;LZ;>er$6^h2^aV?g6Q=ujK2<^;jmLooK#wGJnQNPjULg9V}t-yebVqxFCyBH4ZY zR&s*o<3rLv5oZ9y>@FtXfN>-`GO&>?Sfl3_?WGw9>?`#noC`ozH{Q z182s5e}6Rc;L;Ma_reP=0?|K!gT)`zmtD>raGq5T*JeP%ut)nF>cfVe9D=cDoUDxi zTg?f+_MfP0@8Us4bgMa;f$eqg;JN|y`W&ajF>1HC4)=NvTsMGQ$^e*p(z|$=LX|S; zb??-3ZYh(f^@`mroLp`K0FDoCadNqd+nmI=HPrP1gQ-Edoz!e*q>Vx~Pu2x}g97002ovPDHLkV1jrgS|I+wpwa@>i*4quH#f;@`*#(I^7`4Ci#?5pT+tRRXYC6Y`?)+2U#z%@j@pYXK zNY^#I>Y-F8(Q)I9@m%#g)yHQV^sUHu+;V64cHbR+$^3F%OAqqeHwV7@Y}rs!e@knX zt&Z`(?z`$63>RE3u1?q&E11)@rAjI@@zust1}5wa-c?MTeTD5_5c^}MqlwOG`xWC) z#4p(T_|Mfpi#b*WzL~?Z;e={{%g4F18z!f)tCkC_q diff --git a/public/images/pokemon/icons/1/25-smart-cosplay.png b/public/images/pokemon/icons/1/25-smart-cosplay.png index 7eb69c5a17ededcaf06b45c65d6f4667de991119..90aba5ddbf09ef58ac44d7f47a7565f7b9f66a2a 100644 GIT binary patch delta 552 zcmV+@0@wYb1GWT^8Gi-<003UyT-^Ww00DDSM?wIu&K&6g00HnxL_t(oh3%Fvu$(Xu z#=q-SAWtG!Mn;~jM4m(uR8F?~t<&)>A$V>Qh)6NBYPw|;#mL2k& zZ`mclp+kob9oj4+8i{E9-??*rOUIfHlu{<;N-2>FxfyT`@PDrSQ##IcKv5JiW{d#< zIOk4l2(2=-y;!`%S{rl!rSDtd=3qe~W{epDU|Ifq>M>EtC3eo8j4@zlFmsGEGmJ6N zDueCMFZmmIj{9%e6G5+D(cwm+k38ffJ(Fwk`! z82MAKV}_J+0jX7%JdTn8g9`ca*JlBok;g_@JDI8^%Y%zSl_F^6fR=oqcCpL@`{vOq z`^^1<691|_l(pU!t=uBV+6TI>!@&MKEZYKYFW`o3(|>Oc*x+E;2WKv&A2DTFqU*Z2 z7gdh4;W&(o delta 403 zcmdnSvWR(tWIZzj14AbBn)g78u{g-xiDBJ2nU_EgOS+@4BLl<6e(pbstU$g&fKQ04 zfq_9lKtM)D#(@PIA1)YlWCYx}aU&zZ;>V94Ga4K|Bn0f3pir?PV?l<&jtv`tnjEk9 z%>+^cB|(0{|4{+M1Lasr28MbD&H|6fVg?4j!ywFfJby(BP{(~w7sn6_|F@SJ`3@=Y zuwD@BS}lD1Z~p7|X03;|yy1m-ed`zdsY+uv1SPq}S2Mo!ZUrA4%I-%o$;@d^i_7+P`>T_%7N-OxU z@b0X-?j$4@W@hnl&huWC^SnvfS`*R*gxsD|&KI@kP>pf8gq-=_0xUoMmt`Mrvd_jkE;%;fyd nG6&!JZ+I#o_f$>iDYN!V%Y#zJ&mwq$o@MZK^>bP0l+XkK1H!7w diff --git a/public/images/pokemon/icons/1/25-tough-cosplay.png b/public/images/pokemon/icons/1/25-tough-cosplay.png index 45c95ada80e0db55baed51686f03ba6e711435a5..18101b5b497fb89f40dc6db4f5bdebc33d43d51a 100644 GIT binary patch delta 535 zcmV+y0_gpM1EmCz8Gi-<003UyT-^Ww00DDSM?wIu&K&6g00G}gL_t(oh3%FtmzzKo zK<{=}AQ2Ua6;C2ojEu}rh>S!=A|oo0k;oMlBPvEBBP%OMjvQHuSb?JgNJzG4PZ$!% zHE=i&=JMW~4_H`OSXh{ah_oWo-Yf2!Z(&;JL6uTB$0?w5S0t#Iiy@$#u`0o8=}84ssWm6#&}DY&Z2?3v;9lh?pW zf&kl1jq?fG$7tVWD@{|BQmoeJ{(H{^5oxa_Lzvuyzo%+4O%L2%6YBy$hBhY)(SUw9P% Z06`4(sSuV`1uOsn002ovPDHLkV1f!-{B!^S delta 370 zcmZ3=(!@MLvYwfNfgzK5&3holSRCZ;#IWw1%u67LCEd~2k%3`jKlh(RRv=$1z$e7j zz`!6NAmG3PjTsFNA1)aD0D=VuJ0>XX0CE!o4tPW?$S^o@;sj9ntd5?kK#H#<$S?Rm zGGK5$a0jG-v%n*=n1P|5?=Vo+VaDV6D^h@>$30yfLoEE?UP@$YR^VVw5IB7E)xYa^ zmA40#tYd!j*XYlp4H^4q+Rs_mToSf!>QU!M{;fY^qMmKIRXV}RLd!)&V&^t%jTHjB zK8iTa=oaMLP@#fs#y6zS(Qmz^N091$cvl1bZIE@Om=caq`TblJjT1tY(*o zQs1I}=elOI+$l3QbDc~5_TmVmQTmRl^Veou%NcXrHrzD*-@ZBB(X;KDK2E>JeRI!e z0ipYR$Nvf6>dw2hTTbce^#V!96W`TL=`ne*wzYYM$RhGq!>qgqFyGn6$C_IEY=?kPO@Bre8w zP$`uv7OPCpYZQ8Wbn6+^RAE%>01Rb~;ZR~2Mt{&pN{K=zEi}?XOXT9xIRV#u^Hg|_ z6*D%rJ@h6La`L%xLRx4+KdYtR*sK4f#0S<^t4=XvW7g7u=a!T*09%A>m8MI>K|%*1 zdi)v;Or#vrY}NxnAI{$flfbP6co(eWIKgvGyLK=M9IOd2ti^-vy2roQvib#*x^`K? Tv<`~z00000NkvXXu0mjfuB~_W delta 439 zcmZ3;c8qy~WIZzj14AbBn)g78u{g-xiDBJ2nU_EgOS+@4BLl<6e(pbstU$hQfKQ04 zfq}t~4-anKIMC40ap1s$fPjDl3p6YWcKrD9qhrI34;Ks!0w&C8aQKiA0Mzlw;Y%Zs z;x7sE3;vG+7_Quzu@ET5S>RD0S)KP>pWa39O1C05#jUdfd~p6eFciSfOYoS~`vzbS<4 zQs31hs=fzSyPVm3^DL)eNWy$m_Ui9acUOomTd_)frO}m}*DI_-!zX@K_+QU(cf~3t zrU|R+zn3}p7x)#0GIjXr9T$DJ*3^V6$j~K^K{`p+q&w!v*5c64qdOiJ&h~iAI%&sD z#fT$$4qk62=HBixOy-PX;O36Hb0%U#@c#75Rn-f1RxdsB%=$>gIoXcG+a}EvJ-J9t zNa=9+jpB){iLd6!Ux=1Zi2KBJYR>Mr1{Ygbmrdy4u4LwD{5o6g{db-gHm+Gs#|h~q0q6TOTm;*X(z{Es7;Ku(39@d?@5n?jEszoj8q6A=6^zn`L62Ld5}zNxv5er zcAZiRTgg;{ao8qgBl*yFGp%*btow~TFy`31Tdd#6^X_M`jwBvF>n>s^D1?|d#b%3s z-#*%?i?%c^)-7I_Yru&mBX2ze ztpp91gZ*%QDEE+3uKcZU2hWjG0x%klY#*OoP-~qlwSQ(S2>}c{1-cIW{aW0($B4pz zYVk!A>b)YrMt`=}nDk6?uG>XS-NbTWF=mV;1hcSQ9Rtfhy51|IRAr_9=*tCdp?G$n zdGpOrB$?=~gb?$iw!_pF9Mm*ZSMd48BouwU7)R~J+_V|YI}=n&g>q4z`pb32_o(?K zmIKSff=FSp;T#W|3%?%@VR8`6#kNr3Z8=F;koe6E(b=|sI7ri4Lu$b&(F5!*n_&*9@xN>L4LZB39fk%C0F#`kNVGw3Kp1&dmD0dlUeB3jZ%=wmX(>OY}OFpX2_{n)PVY`&wqA7O9 zE>k2dr~S@vVNid3t&Ek`_F2e7hUn_uj08NW`ay=MRdhMNz3$l zaLma)2+~%0cIjF?koF?eahx<;>>tA`_9yFUeuX|}7 P&}R&uu6{1-oD!M<03W0~ diff --git a/public/images/pokemon/icons/1/25s-cosplay.png b/public/images/pokemon/icons/1/25s-cosplay.png index 74f0b993ce46b34924f9c3ac2b33b880378045fb..218977fd454cde134e96266abb2e79349d9a2fee 100644 GIT binary patch delta 507 zcmVZD+sCzfTwMZwSi%Y@LW)U1j+}y;a;-H}}7MH7kL7i$` z;!rLosYr8)PI=RDT#}dH-FY9qe6(8#|a@wDw#^q zlq8b#X+F}ad%%E(D*h_bse7~^Chbt-zU#V$KNHkEe=Y%|DY59(4~*Y$G{xa`POnDj zB&3vnuUVki{0`=@5|ulw3{XljOL_n^4T{Tk>K^Omg`lt2n)rsrY{#0C187_nXO>GW zs1y2$ZokCd>VJEta*)9;eth`=2;{o`5=to=7txJlB9}<;r}Q3QKG-;T3Z^(L>bhpQiYD ze}wH=!Mgj6o4YYW2wvZc#&Tegpl<7Abh)t|i}T&#)O0hpW3jWWIJw72(&(?Wtd?v) ztORml(VM$5XR4g2Fvm%K)B&9D4zV38Xlu4M7dg5$mxB}uLNvwj$)d3xD^+@sQV^o+ xGQPuWEkBi9=IC4V_;StY_WUoHUhQ-KiZ8&Z)-!YMOl<%F002ovPDHLkV1lqY_vQcq delta 344 zcmeBTdBHS6vYwfNfgzK5&3holSRCZ;#IWw1%u67LCEd~2k%3`jKlh(RRv=$7z$e7j zz`!6NAmG3PjTsFNA1)aD`0?XILcop*3L6SE7GxLzRsCo$kpxoQB|(0{|KWha%b)QR zP?)p8BeIx*f$uN~Gak=hk-|{Vz_8QP#WBRf|LrA5v1SDxmJ6IqviAOOwB`&`RQSp; zw|CDI^9HfshyOe@kv$T*Gi(}%;(e|sF;UMpykhH^vWH25vv{lZj7Y}iCq;_-EJLjh z8SP!t=&_2+YH9MTw9U&BKAre_p)E~Lafg)H_f70?er*>{oUL_a&uQz5Ifaoi=K{CI z9p!sbFuDBot`6Rso-`204l#9z?dG9i z5USBbjz}WF`@z7@n+Nmbdpk1^x_{}Wn{K)}Q5?t7j^pUl zn%ACl*;v1CDy8gro|KZb$V|XcR&*#UsoO9~gG>z!Wkrjc3&7$;AJtgk=iR>|%&|Dp zXUEevdEs9dl~NkO_x+r~6-tubl?Z@~FYi+*N%BQOSV7CMmNPdtOCN?|Cypa?Y=hNU zpp?=En=cBQjeigkRP7uCb{t1<%nYzGGhlJ8?EyR**(3}@;yBKA0z7t-Qc5q4ZL|Dh z`~V!z+9fsZMHLUV>sc7U;PlQPIDpZ)y^e7m0Syuk8fisrKD`UT)hF**Snp^2`u9`C zbqq8yOW2xEQNpn3wdV`#{nX}TfJ4YEI7smnABDR){ePLk=^Z;}T8!g3H#)ax#}_C1 zQojRJ0ZkUx`|a;x(Tfm*_LsGvcX1p?weksMTgECk_Cya){>3R2#cz`;fH9Ef?8ZouniRxb-SaW83Jr zw{cz9;+l;RDP?9HWN6UyJfd1)$4r|(D*)7md+19egvg9b4K&CoI{37CZv7Axu(*#i zLu`HPIZ=C=V|FP)5a=KX?5-tA5}hQ8{_t#2?=QU?%Ctc}6KLysC@Z>I@%}&VsAS#R ccXL+x1(bU{rq_=%?*IS*07*qoM6N<$f_t-0QUCw| delta 403 zcmX@ix`=s#WIZzj14AbBn)g78u{g-xiDBJ2nU_EgOS+@4BLl<6e(pbstU$g&fKQ04 zfq_9lK)?lqiXS^J99W?7qGH95A3r`^Fjx>UVMc?)hlGF~6BHU6Iu>LYoH%g;s7dZX zttXHYC<*cl{*MY69w^63GBDILa29w(7BevL9R^{>+%!>pZuY}xNpmgvFFE+k>L{G7_5Q&%qqD|hud33m>LRqK9JTxzm2RCC zu)Z%j#wo)3rsHzP?36iGHLrH8TBKtD7 diff --git a/public/images/pokemon/icons/1/25s-smart-cosplay.png b/public/images/pokemon/icons/1/25s-smart-cosplay.png index 7eb69c5a17ededcaf06b45c65d6f4667de991119..5742bb2718a54165121e43f441302c3ba485387d 100644 GIT binary patch delta 597 zcmV-b0;>I@1LFjc8Gi-<003UyT-^Ww00DDSM?wIu&K&6g00JFJL_t(oh3%HHixWW@ zM_)uZ(|O%?nJ!xn3L&NCVjqFX*g2&X0BM>wwk2l6CX;2m^dCu**xG;bu!>w!%wXn}QW-$G z{Wq@5Se#p&rfEYdh1MFawVl^mqm*JcY;t{mYUj^7Wx2D?&EDxjg%%4TvQZ#eY}`na z1fV3=o3?i30DoS+|FyRqIJQ^_ktwB!qKK}ynfIi}>&{Or2D`~sk%I$w@j^qYHE;WO zJn&a z{Pi~@uJP<>I1D{YUX(O{5& zj>iDUI|qxhN-4g7c*$hhX5L@Zc>dXnhGA%Hja-q@c)XY7!Gf2o3jkJ^c~mAv!>2#* z=%N_hLr#K5Qc8(G@Jf=!#GVBKzVF-bt{debK_h9##S4N-()ayJyVu}+o7rY-aeEAz j)DDq53RSQ6HOJyNpg05x7OLF-00000NkvXXu0mjfMeQNi delta 403 zcmaFNvWR(tWIZzj14AbBn)g78u{g-xiDBJ2nU_EgOS+@4BLl<6e(pbstU$g&fKQ04 zfq_9lKtM)D#(@PIA1)YlWCYx}aU&zZ;>V94Ga4K|Bn0f3pir?PV?l<&jtv`tnjEk9 z%>+^cB|(0{|4{+M1Lasr28MbD&H|6fVg?4j!ywFfJby(BP{(~w7sn6_|F@SJ`3@=Y zuwD@BS}lD1Z~p7|X03;|yy1m-ed`zdsY+uv1SPq}S2Mo!ZUrA4%I-%o$;@d^i_7+P`>T_%7N-OxU z@b0X-?j$4@W@hnl&huWC^SnvfS`*R*gxsD|&KI@kP>pf8gq-=_0xUoMmt`Mrvd_jkE;%;fyd nG6&!JZ+I#o_f$>iDYN!V%Y#zJ&mwq$o@MZK^>bP0l+XkKN|~zm diff --git a/public/images/pokemon/icons/1/25s-tough-cosplay.png b/public/images/pokemon/icons/1/25s-tough-cosplay.png index 45c95ada80e0db55baed51686f03ba6e711435a5..7e49d4945734dd70f8f2c890adccbd53a97d98d8 100644 GIT binary patch delta 587 zcmV-R0<`^t1K9+S8Gi-<003UyT-^Ww00DDSM?wIu&K&6g00I+9L_t(oh3%HVYg0iS zz(3J~$M(04`NCuPb z9NiKrG!4jeIA8LTO3AyIIK9vEZuq{t&wao53lb6%5)xt|gn#gb5dNy-7P(`mH5*h) zxpbVAlBklg1Z{~Txe;fORyhLdTICFlj%kN7?rW`6YZDCUO|pQ#AvRz7fpz~@ zf`LS%vx8EKAQM6e|NGH>0A9a0u?M^JatFHu3a3{rlRbc?f)?fa{XYKJ7o>ifD!PY5 z00KE9xP3zoh<_v(Sul{B!`lO(sU3>B(MsjOvc%!+eH)tWl>{`q4gg9i3d(GbIC2o- zm=QwwwUXfC==q#nzS5_192PZSt#zt!dNuvORn9~{10x9n6muhblPpc`(9|YduInPD z&8ufZTmK?;mi~kPl zODU&^azvxEgXeiBz}o|aZTC~GXBH4%m!9V#`xOB8Ka1GegB1vd3BP1kA-5K6pY{ps Z;t%^%`3i*2%|8GD002ovPDHLkV1mg$7OemP delta 370 zcmcb~(!@MLvYwfNfgzK5&3holSRCZ;#IWw1%u67LCEd~2k%3`jKlh(RRv=$1z$e7j zz`!6NAmG3PjTsFNA1)aD0D=VuJ0>XX0CE!o4tPW?$S^o@;sj9ntd5?kK#H#<$S?Rm zGGK5$a0jG-v%n*=n1P|5?=Vo+VaDV6D^h@>$30yfLoEE?UP@$YR^VVw5IB7E)xYa^ zmA40#tYd!j*XYlp4H^4q+Rs_mToSf!>QU!M{;fY^qMmKIRXV}RLd!)&V&^t%jTHjB zK8iTa=oaMLP@#fs#y6zS(Qmz^N091$cvl1bZIE@Om=caq`TblJjT1tY(*o zQs1I}=elOI+$l3QbDc~5_TmVmQTmRl^Veou%NcXrHrzD*-@ZBB(X;KDK2E>JeRI!e z0ipYR$Nvf6>dw2hTTbce^#V!96WXLo9mVUfRfa*nxxj zf<)GwKmYlsXA7?k?zyti+t$93|L(TGpR*1#1kZ5pl<^8M=Jd?(_`QoaS?~s5$Gnqy z4(wYueX%{V(Ab2z(6IPdyO&jg?cEZVZ+8!;oR2y8rft*bT}viUjTCvHvZ-rg^WC0~ li`!W;`u;kmzq@V2s5+O)~^TZ3H) zo^8aN9eB12FE-(I4Taed!6>YvLEU_Hy{B>k2svO2bQ>b33vkuBMyDA?0umL62S@5 k%;CV+ZVd&Fj~6DXHyFDI$Kap%w*UYD07*qoM6N<$g2EVkfdBvi diff --git a/public/images/pokemon/icons/2/198-f.png b/public/images/pokemon/icons/2/198-f.png new file mode 100644 index 0000000000000000000000000000000000000000..bfc3e9bea4cc26625afbb7dc3f767c99823052c9 GIT binary patch literal 301 zcmV+|0n+}7P)X0002=Nklvps*W`ud^CpXdk3m>;y?QNeBrS z+Y1Dt(@YfGl$ljP)9LB1`w06?`%jV%?r-A_w`01w)r2Q+00000NkvXXu0mjfL5_qQ literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/2/198s-f.png b/public/images/pokemon/icons/2/198s-f.png new file mode 100644 index 0000000000000000000000000000000000000000..ccc258cafac7ff9acb4795e8a3f3e639a2f57938 GIT binary patch literal 362 zcmV-w0hRuVP)X0003oNklOb|*$#Ux1XD42qliUnAMnkJ%P2?`1}U;;|Rv-HsAuoD{pNZ8VoV=GcV zy}Pq7jkUHZSxp73fEDmx0Dl>6+gfPsy=Z{fP4^LDaYqE}7CcbnP(5&>VfFW1qTnwPk(WD`+znuZS09XIfKHMzlE&u=k07*qo IM6N<$g3Hq)$ literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/3/350s.png b/public/images/pokemon/icons/3/350s.png index eaed5c4bd11d8b70a937285fe2f4c2db6127255e..4f5de9f5d5747867eef4e3ce2cba6b5e213d0b1f 100644 GIT binary patch delta 828 zcmV-C1H=651JVYNBYyw^b5ch_0Itp)=>Px&3`s;mR9J=WmOn@vQ5?rVR|*|P0xnka z4qS@cIS4ISN{9-DV!5SDT+CL4I%uPi5Dci8p#|yGWHC#ZkkH9LNNJ&k4Bk@2@m^5J zAdXJgA-?Nfa*4S%bZNfR-TV8w@B7{F_h6ub2KtXAgm8oq&VOBP{nWi)2MQsaqlXUy z`|N`hUdVnz_XMcm;ukkaDK&5Vr}xhS=h%}``T^OqgPk<>XsWGEN~!55^+3p0r-PpR z0@&(a>oIqlV^!;J2n0R1&bi+UjFeJ~b9>A*7qJgg0A#*CW^6RV`DKH|`e#a;FPi<6 zQA{TS)Z5mxs(*Ei`6$D=X$&JmAyetNx7M*IK;9o^ytwSb0qhr-04Qq>08A%>Wm#^_ z3LzZBFx)Yw6Y-5LYYp_1x-Z5di5B23I>-H&MN3p7P z@`*IYd=zL82c^(4sN7OA41>(apLkP_VHntxQDSBiZz@r1NGY`@nEwO*8qf=At{qZ4 ztFgK;#DDXVcY$LI@`#mE4y#%xD9@?BZuv8G3_{bPiMcF0dszTh7lzz1W1|sHfuxB0 zKmcMU9G44@ax9-n-??X~%YuE7a^YI#EqQZ`yIk28`9zw0B2B7RLIEkqVrJ3>@1~v{ zR7uucJ7jKgm-EX8r~6q}7lzo`yAG_!0KenxhJPbUtdJw0NE0)YF0@gOc8$TFDv1!n zS^x0eeOHOuTsy>@b^!My05)Gg@l}$TnFMg*-i}NJCiKvNY6G`awLor+f&>VgK+<8IOarX-MM}V!MUUk|ysO$~&uk;I{0+j^G9P$hR0000>!Fn`W45qlrQ#gJ4rd`^q(WGz!kUx8vuE9U6&C_ zj;OBYI2Z`T&G0f}Zih``;5xtF@6;2m?KGMLOStEU%Mds`zJJdm{}c$E14~Fvhp5~P zsJ#~<75Md(5(4GV%~56wMCB$qs6B@|KycRksO$Sa1WuTXv$4%i-JwAC3L%Ok2BFuE zV;jP7)^at_^Nzsr0pHgOQ=Il5F$PH5}=ag>9;V5t1k!V&)WksFagh-vme`5I|`-P?3&7Szn+D z&~uH;h5|X0@$e{!@nNn8a%hQjAn)lqNWk0a@m^07+ytnLEO!mUblHg(YK9_l#xLH%Cs$eaQfJFMz;`!JNSWAL&H_^%B!51ujg)g#`_;RCP zGz|T)DE%TdS*ZCfI0y5#KHQ7^llbA=S?R&QX;TGU|BDN;1sc;;PRP{^i~s-t07*qo IM6N<$f)zg7F8}}l diff --git a/public/images/pokemon/icons/3/378s.png b/public/images/pokemon/icons/3/378s.png index e2fc99bbc87014303a15eb099a81d9d2d2726279..b52709493e7ddd94b9d4754bbf0bdd8ed9a4f387 100644 GIT binary patch delta 3358 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 delta 576 zcmV-G0>AyC8rcMpB!2;OQb$4nuFf3k0006LNkl1v18*wDeWTqxF zn>b`FxL(G|9Te`QI;uW5P+1K}L?9xViAZoU8P*&Tw-u*L7Y?TZvJ;ipFw8Q`!~6a0 z2R!u9L-&)EQcEed%RN82+DJ;NlO)0SecF%)dbgNs3?kez*=j3-){i-dC#a2ODVMwg46SN0KWeC*|^$ZN-5$v zMhJmYYH%)o9)AOuBnjK?mTymj-EPNI{sO@3?_U5+r&G@7GndPSIF13BOeV}`Gxq!a zpj;f}pn+Sj*8rX21z0YZD5VI)5cpR>?a(^~v~v!qo#}$J)voTYMt(D38}1_+xIEAC zJdZ5P8tYwdI{^d+!L?m%Ylw?i0YBQv25!Tdu)1*ZOMjn-O#d>P&*vPEN5U|qD2hh% z_br4diU9PrioROz#zAw~YyD=ZefXPdwIS^fYCmH>A_xM~H2rVe>D`YEs5!EP5OvdS z!vI&;s;a8*od9+Lw?`;*_S$ZpPA3kB1Mn8sG);Sf8THD+E*U2mi$x7kRaHH~7~L`` z+yvMK3_0&7923gF>sO1yxw_hrlv1x&D<}UaH&4`ecf^%k|J^+_R(}8(bRx@1Wxc!r O0000Px%SV=@dR9J=Gmn)OoFcgJPItxMr%_LY@ zL9-ezTtl-BOrY5YIxNtIEellOLPJCOCrB)?G|UC69Lae~N@hAeGnt8HN&bAUu5=Cj z?;?csgpmGO^M8pMObF>^%fJ}Jvmm1Yjd=ZtS3rxboBhd_ zk}V2fu0c0LObBs~rc3K-n$EE-KLO}9Xw-I7pxdI#DSuYn@0bH_gm?@$z6St|G1Qw^ zEXz-D&H(^&n;zl*Dq9ptv&uWn!C9=7nkc0v!m72T)c;7pJm9C;dpmen=S%C3*Sa8B|I*j>=5@H&{Mb5u?JV}G553;TcI@l-*#NiM zd;kE-a(@lLbx+CzIwWwGf>R$}KWT#YLE8adv%x_C_;`nNZD4nDcJl3V&lw%OQIBEm zaC6Qfr2wT2Ri2_l5(F0wIIfya6m17Jd>C9bAaMS> ze$Te7$Mypdo5#>&OzD7 z{bYdp#ryW903l8c?H=`W$U6l9A!Gi1ngy4{#XB#=GX(7WeuqR~!X*py9Tx$y%+JI6 zC*6a((4@^nOJXRsAVL9>(tr{!S$!xSlW;Nb=E-yq&T&V{Rv&5?WoUJupjHu)WdXOs zO-Iq%(D=g1L3K{*%EqnqIxFujFt@+IE6}1&AFSo*ug`woB>^|0H3~*!00000NkvXX Hu0mjf@wJPx%dr3q=R9J=Gm%obJKoG`1g_L@LTw_*^ zN!on?gRcq1rND&_@&vAIH$hyLh%~l~;8%zX!<0I><_vy-O?lwPiyP$u+$)6`o&H$D zTImAG2LkU(TL1WFXLbbq?-D}9LWuaa)_>FHWg$d-+(<|%@qb#7tpHgx?_!n9G6rP# z06;x=##7SUwhO3dKz^uyCL4aOwbf+()_?%uc7QevND}P&llxprC&`}*MD(jZxDL9_ObkH-}PK`q>gs64Ty*Yy-I|peB2efdI zB0D$s){mff-vK0$d;fdIstg&@0MGv7h_E3L3%G6=G}5@40u%m zt=c`O!1j=81O&Zr$fWYN_RVBwu%21QOur(m74kOeAjMW(+>rzQF0sCk42Vl@O;4aK& Qz5oCK07*qoM6N<$g5h~Zv;Y7A delta 393 zcmV;40e1eu1)>9xBYy#DNkl43lrSubII3Tn+ zKnd4hHw*~4IR}}i)_1}It%V6ir>!3no`cdM0%)+Rfak+*6n_>&1>cVQFG)DeLtYw$ z0Aeu>1`&pE@^dvn3r+*hh4ycN5|Vid*Q)?}a2k?fWzJRw)Ww03PJI!$s)Lq`fRmy9 zE1*}!B|t)k0T!DuLi%y+^}LVLIVhho9|ovjJZ)bJ5Mp6i#j|=Jv|h*%b0;AjM+wez zF$7RvZ6h>YPUKb|Fwg2aG`+Ky~C1qaS8=o n0y_8aLlr=;C57FKx1cu%uC7$R>mB|80000;-gMxy>-c|Ge|M?JPW1Z&j-+Cec*}bcOU(D|>Ei4ELjF}U2d~v)- zz_T)-Qr?mvzhH*{NI;jxaV=0{m#2$kh(+()%cq47D{!y|=yO~-{=YuoarbJ^8SA{& z(u&yvJT?D!Fia>uGG$`MnLG1TJ7(GUTiVvkyV^W!aY`Sz|s@cX%s_!c_rpXYd_sVU~7fBnMdb-Rzf`=Iu8)@|FJGmOm-%{b}l jzspAFWWB_j?-k5EQ&_xBzq`Kx`h&sK)z4*}Q$iB}C}fAe delta 308 zcmV-40n7f(0^tIXHh&->Ah@KN|NQV$Qc`nsbA`}v3Ha=WMU@xSU|+FX!vgsmr$PuwP& z18AO^x$Qd$GgCKyZ^d^%(Jb<{1&~-uE{tLS1M-{^W2&Zl^^F%skPvjsDTxWe@&uAA zrGl9Y`$5k&iW-Z0eOnHe&KjW;u;xx8Cn)S1E!TGK-E5oWoW*B|SYo@|AC^&4d?8rk zGf34sYn&Cfk}da{;<~xm70-%o#NJPBk^2F7U=3z68!t>WoyqqA0000U)VZC~QPlzi61A~Hs!roQ$|Nr?AWMiG?@85bM|Jl8(e_zb+FD)zx35=N& zb9`~UN5Hc(pi5|f)YVCze zuhy$9Fg7m#%FKW7yyU8Fi^A?Qt=E6aF?F{jr)5p7V|lX9joOu^)9qArB&@Q&9G`o% ztbYdkjx6bmZBKR|yZQF6LGb&zkN6fk>!0U%q^T+9qJRCu=5@P|z5Af{bk=R#oimKh o56w8~=`Xv>M(1Sxo9`9OJX2V_O~1Rp0Q!T$)78&qol`;+09lKO%>V!Z delta 363 zcmX@ZG?{sVVLeN_qpu?a!^VE@KZ&di3=HZ4J|V6O3JN=x%>4i7Lr_pqadC0$h5X02 zFa3Qn|NpP&Q>ILbnGhp~VOkm4-~@(cct1Q={zD7674I14-?iy0XB4uLSE zsD@VqQ1FhYi(`m||J_Lkg_;$3>Rp6|G#32-zxS?!mcllt?t9U}j zt{*}wWj4ykB|3}!)Sd_^r5&76@lEi@#>_{S4OvqIqwSlQtV%j$Gs*TvsIA>)bAbqs z2j6_t!v%EBu9mIo9wP+;4nPq?d4r|L>F|Cr$evZNBj@sYohi zo9!f@13}gX`3j4(vv#uS+&ywaQ}s@7>9pF}Yd@<6MI?zF?h!KO`>GIgI(E9c=cOpV z1q;7Ey`=P3cwa+%#>=AZ4-Wig*m60ml%KDPW8G_M9%+3aMi%8tpidb*UHx3vIVCg! E0NP`qod5s; diff --git a/public/images/pokemon/icons/9/1013-unremarkable.png b/public/images/pokemon/icons/9/1013-unremarkable.png index 3aa144b6d5c94698b01081a117c02c507e7881ae..9f4ec0cce34cc881e6cfadc99671ce8f14308126 100644 GIT binary patch delta 672 zcmV;R0$=@%1Gfc`BYy#HX+uL$X=7sm04R}lk-JO7P!z_0Rz>mEK?f0sA}S6RL_r*- zf-dS%EBIQHv}uJjh9pIbtKi~La1dR54gLqZ3a$!*pa>$4&b}5Y@!VFZNWJ0a{P^zu z4kuqAG;JAKuWlT&w(rKLVv&W#rAWgIO|%oDjULVLoSC`F1b_do&pT>Vy^X3~|KF>+ znv*HdfSN|(QNwY4VVQ>Mb>C6EE!<&bw50H%@SrOL3STK*FY~kFbeZ23yNUP&gjCN+ z`WNfJ*vPn9;Q`^^td%o<=22hLlCtOLq;|>f#v{%YF(T;XSjEC8D%FYsw(tq&S@pjZfkucII+ z9z*RTT-X)=n&dS0A$p;r^&UWY6V5Ixn!XF?ThRI7Xs%Y0YGsE^6JAfDbrITcplP|B z)z3L6_mJ3-Uvv$7`_M1}=Hc6ea87{$000eiQchC<|NsC0|NsC0|NsC0Ed)WW z0002FNklZ8FBcfB768ghng? delta 370 zcmdna+QU3Sxt@WsILO_JVcj{ImkbOHEa{HEjtmSN`?>!lvI6-k0X`wFii(OsK|%lT z&Mz)5-di6SGbd(VQFQBt0@n(kDO09AzI_R(@Ff3E9U#S1666>B9|0JI?w>mc6z44P zh%9Dc;5!7ujG`J|4M4%0o-U5{Ar}5;Ck67gDDb#guU)$O-v52p3Tdp0zjpfjUbS0x zP~*4vKQ9qUy?uK{R`i|Oz2d+LnT{usA{$*xD@9nl_0swmX*}L@W?$~#Uvq4~D`^ES zH&e3rb?JN3IptR7RymJ3N>!VEOL`|oy7;Z{J@Yh9s3}v>PyERGH2t7c2R;@acgc3y z@X~TZ>w#rSD(6?u(2Hx-rzF(Z`011b1XTVIeOy^?X^XvYooMH zEVp#jF25!$$QLVFo_*z)^PJuCd)9qz`f$HOb<)F6)Axvc|I4kdrS;p!)m;MUO$JX_ KKbLh*2~7Z+prJzm diff --git a/public/images/pokemon/icons/variant/1/102_2.png b/public/images/pokemon/icons/variant/1/102_2.png new file mode 100644 index 0000000000000000000000000000000000000000..9d96f0879195e609da9c83649f486bf2a32b2717 GIT binary patch literal 650 zcmV;50(Jd~P)X00001b5ch_0Itp) z=>Px%L`g(JR9J=WmcNVQKpe$C9%q*=1PkpZ#lj-^quu-!S1p_e!nXE;Se)2|73-^y z3!H+L-Teu+UIaN1HtE(vu-NG=a)rzoH@EC$-MuQWN+#dTynNq#Gl2{lGGxe*;T+`N zdO{&Yq^`p-JbV6+=MssN5JE&{cYs_-tcC@>esnI$53eOxb_ZPCbTm;lW>@k6*p)nG zcW~0t|3Xj^`4;*7sNdtvT!au&?&_9}7Xnai7FdpV$c0S2o0jmaB$f*a^~3eNyT+Nh z`q{j@=KAgu;2<*{#B>w^$GT5FW9d`*Lv>G)l>SzeiDTYfQ)&r)zwyG8x?r{Eq1QJG zQEG{mjMCq7|LdzBUygSy$Gd;lTeadzjq<4pj0p-MB4_4ueRruz+P1A1_J?i!VH@D2 z1`eJC@P}<4rz3vWKN|4ZxS*6P%fgGx1E81q?l? zx(8?(rN5=r5(&8!In_a{R;1c2Bz$S=!5333gorL~I+~pFo-^^-cp^yj-?P~qv8qB^)7?{tUL9Dgr%Fbu=oVWaKn1>{2VI2|1q>h*ORb62+nt37rl zPq5nK58K$bO%MdB!lCCgEquBqJlBQ94?_&5!HC27s7o`kBB$(-HW+cd`Trmsldn3M kutW;H3qdfqM27dqUs&llZH*GdKmY&$07*qoM6N<$g6l;q3jhEB literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/1/102_3.png b/public/images/pokemon/icons/variant/1/102_3.png new file mode 100644 index 0000000000000000000000000000000000000000..65272284ea8fcefd177e531de8c8ac3e3444f239 GIT binary patch literal 663 zcmV;I0%-k-P)X00001b5ch_0Itp) z=>Px%QAtEWR9J=WmN9E0K^TUg9QPX*@jzw^gO%E)Ik3AR#3F*}QU`3jLc&3~(#|4> zC~PO#DQKaM=>!|A)2-wzRss>(A8~tyH-=M%Bg8~A~-8H9w zpDVoReCM%F0TPd7!k-c7*O;86?gOFv!`47K>m=~laRJEQ!sv2dM&Qb&eiYs zWVjW#Sh?E%3|wMaM%$S&8huma{i#iVYX37nX{NSfq)&CE4Jd^0tkRgf%WDN`nx`e(IeAP3(Va$ zgHcf}RPE$dH^yQ&%A1RoORbs3G))}G3Dg`?+B?}j5?;!}?uEgxLoN^6T^wX$2`B9k xv@!g8^ZOt?cfQQvt|fx#T>wGf5~1E(e*k|xI|AIaW(WWP002ovPDHLkV1h3JFuVW& literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/1/103_2.png b/public/images/pokemon/icons/variant/1/103_2.png new file mode 100644 index 0000000000000000000000000000000000000000..046d2b1bb6a929893a935531824b6998e99be07d GIT binary patch literal 748 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 P00000NkvXXu0mjfU_D^w literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/1/128_3.png b/public/images/pokemon/icons/variant/1/128_3.png new file mode 100644 index 0000000000000000000000000000000000000000..8f6b25c2c18138916bf8766b88728eb5d423e34e GIT binary patch literal 775 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 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/1/25-cool-cosplay_3.png b/public/images/pokemon/icons/variant/1/25-cool-cosplay_3.png new file mode 100644 index 0000000000000000000000000000000000000000..7a603219649d70c087d3c2ae68de57254fca3a81 GIT binary patch literal 599 zcmV-d0;v6oP)X00001b5ch_0Itp) z=>Px%5lKWrR9J=W)-h-kQ5?tdZ$v2sB1l0=hVq~)!AQ9hf(~6W=~6+6gi^>XZg1(< zLDDJ9ZK8vV+IFZ=NI~4Pgp%5!BGx4>91enDDR^2?k#o4d%Uv&pyt||>_nYqW{_o|( z|Gm2ek|arzBuT6YAsiuuGpxFkITwx9`_e5rHE`XQoI)2F3phynfpm~sK>xx*2q$gS zD7TDLYgK*PsCl33c5+~#5W^sWmK6#&-J3!KmKPj=ZnMG@bCGtg9>S@kpo0UAEw(Hx zWww5~CWQlLzAVyhR*rESv~zWe9m&JVKcO{raaur?cCH@4J(9Bk9_~};I{b*T`hX0kG|Zz%{_( z(e~MN&=0(nE_t}qlF5wo`Rm)rxX3^VZZ`xwr|zrSO`h&w_&>mtP$2Z{5f=wT0Qw_@ la1?SFxRE64U;8AZ%0DT7_nNC|3%~#X002ovPDHLkV1mlj7i0hc literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/1/25-cosplay_2.png b/public/images/pokemon/icons/variant/1/25-cosplay_2.png new file mode 100644 index 0000000000000000000000000000000000000000..c47e9ef7d18f89b64e39e74e5346edcfc430ad3f GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a-;)%LR^8g zf`Wnt5SY3iN-WW@m>aQt-pu1`e*E~+c5iz=P@1zO$S;`TKNOfV&AtK@oaE`^7-G@; z_VPx)W&<9U3v+zW{rN9`y^LX{R-weLwc95=d^zXDqOJ9HLJvNdycW6csr{4hxsb}S zh=8pxWCZRlQ~ffpAnlz@(W{KKg7iZtu0*zJn&Yb2OnyOaEbHqT<=5!@&6 Q6X-eyPgg&ebxsLQ0E>fl;{X5v literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/1/25-cosplay_3.png b/public/images/pokemon/icons/variant/1/25-cosplay_3.png new file mode 100644 index 0000000000000000000000000000000000000000..16332db904171f8e8bdb6a7b1e49bccf8741c2d6 GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a-;)%LR^8g zf`WpDg@sl?-OGu7zb}<&JI@KNUiIV0kJB#-mjR_YOM?7@8U90oIn(SbK*33#E{-7< zy>BmXX00001b5ch_0Itp) z=>Px%YDq*vR9J=W)<0+yVHn5pZ^Snp@A6)~9QTr{LknOZuWLwL_5ZEfz-X1X6_ zxXT0g;d$QoAb>5zS>>?cjbHR|A3x;fW zL&Xl#HZT_qnd8Yh0Hhu#cHt~5zQF?#>L>NM_1vDWwTeC=@&j=N}33^Yv!{ z?xol8j|AzP7$yhi&HP)B`mh>(dArn#ZA7DGOKMJpd8bC~ucA48zk3@W>)5rMaGoFf&^L;M13cHB!~R_j5@e{`h9W0CX*~ z4+l_)F13tn38;_&<#M?J(Yu%i;Me0RHjFCQMfb7dS_Z195!R<3rk)GYC4dH`6CBvs z#fRZu-oA^jMXYxUYZ!({K^3+m2la+gZNT{be!O09L(PhB5Fv!wjC7K=M+|WJc>#d$ z52Up&$CGpTZcSQa?#PIx9w+@M#XG%nU`_90nipLm)IqLxyHgxE=-|~W^CX7$nE!f) zb6OX>*&SAw2N;`PU_Db?i!-wo5<`0coS(czc&mEy9c<3(@&LQp9TG!(j7={v^&~>> z58Sz*vT()CJka3|e*BQK4sF2d=I_cY05Uf;iko?^J(~hxG!Su&vkk0A0{ftVg$r-h zc6&SBa|BdK00kWl)YhJQ4sX>CZ(VDzdu^xrmMnxYbHR{Viam97d+tb_UhUnSRQ>|q W^dX00001b5ch_0Itp) z=>Px%n@L1LR9J=W)=x;2aU93-_o6P(Nhro6A^Z-3W3#dT`k+k6lnx$(Aqa&NgzT^& z|ILFC3EZ?;?rUN9v_$Fo@eH1AJ}2P z{l@cpzQ6D9`8`ldDW#NBN>LF)7(xi+xaQ^Olrz@;MHjmK1o%YX+rh2T)j|9Ka<9%@$W8qVY&3xW644s&VT@Cu56*9?cMEG4l^;y?8q{WJ(mGY zun@wyc6Vs+pD(E%OJc1az>N<9w!b|mlgYRW0UkL?(==n|MK6(_UjQVML*|m2)ti`P z{p~jUI9QzO`wIuy!W9IRNPuiMdjOH$i~*pQ#Ym@D@cF8a6$b@w5?$9_vJb6M%VPZg z*$iOf(&-fwQ!K7vAmsNKCT96{KZ{d+=9q+LG8vZ@sRY8dpMkc3R+JUv@pw>G^}w8p zCIumck&ko|TO~iNiU6-#z5;M3e%2IbZg%tV*)E~hVd~lv0L;wI1I1PF$de>L<0Eb&J(u`s z87p_^mL8xbdXbsAdE%V|wD@mP)7a}62R1he@a|Nx&Q~N7VjLOA(}gbi>aO? zphN;lXiZ};*6$6`BtBmii&K3?;fhZFTe1+s2u8fd*qeKf-kwh+PG9Xy`Cs`1LX<6A TUvC!E00000NkvXXu0mjf{GM1Y literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/1/25-gigantamax_2.png b/public/images/pokemon/icons/variant/1/25-gigantamax_2.png new file mode 100644 index 0000000000000000000000000000000000000000..6bc267b55fabb5d0bd1ba35b6ca2869377044a1f GIT binary patch literal 341 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4$prX>xB_Vf z1qBNrFm*kYSfXDsH)8p`na9_(+*$np|G!W}j~bu~u96_XV21xNP}eCE1{6K->Eak- z(YyBYMZRVO4%UGDXovs*+mE}RF;ZU3uY6PP3y((X?Qa4JHhXuhzMIUsQNCw;!CSu{ zyFSSatJS>J2sd%tp3v^syhEd)VbnN>9t0Sh-^_H)y9?{&>IA z_uQ1J!johK*e#oN*Dm;{?zAGx;_BXep8K-`y-JsFW-Yoo%PjTGcXp+^?1yPO*Q|fu e`TL=|hM|g)?fb(;HO4@%F?hQAxvX+eg1Cwx_bP0l+XkKS_zfh literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/1/25-partner_2.png b/public/images/pokemon/icons/variant/1/25-partner_2.png new file mode 100644 index 0000000000000000000000000000000000000000..eaa2cfb610fff5c478197f782c3ee2e0dde13159 GIT binary patch literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4aufr6LR^8g zf`Wp6#oUPH^Bf%=ElgbxC6>%QzUEu?lK)5F{r~@ez5Q2Tpd#*)AirP+ARh{9%WAIz zg*SP+IEGmCzP)^qui1cu?ZLm+zG>gY1Dj_rPb8^Sy*f*DV{ z$2nhR3pHLJe&UMZ>h-+V-_M*qxzEQff9JGkC1-a|^W?krbJL=OqKOkK`ir^y&z-!N zlgamyYjRVy)cm98d&TDGoLT#O(I43w@zsAk?Mn7{noF)?6H8Xj*$#9)gQu&X%Q~lo FCIBiugwp^3 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/1/25-partner_3.png b/public/images/pokemon/icons/variant/1/25-partner_3.png new file mode 100644 index 0000000000000000000000000000000000000000..1faf330ef51d5dd3c311e84e80f4e27013ec8f06 GIT binary patch literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4aufr6LR^8g zf`WpwO_f$aoui}U%ZYx!FO`H=uliQKHuesI>#NU47*zWhYAX00001b5ch_0Itp) z=>Px%KuJVFR9J=WmcMV)Koo$#AZEl;>Bf_)O6leZ31u`}BpAX3VJON{F@chX(kvOe z7}1o_kt~5O8MY)#4BW=RatqQ)NC@>GFoSg$CmD$2rjx(v{Pe8*{GRUz6ciK` z6s(PuGL}-t*PWZ@R(7q~gkozaQ?A(BA*mV=BfmQu#2 z=VML|Thu+_;@ZI9C;N$5E0L7#{oHbpa}`gNK^sHmO@{~a4x?6|x+kc6f@$|Sw_GMc zDP`Op_c=Li(HwM`C_@xQq&n@;#vsJJWHsnz-i|T}I?-3lt+QBhWs?6=Yh7BbzE5+|VRtxXcQ|#qbx$CKKuQ@`gC1~0Ev^PVMy)=V`pQYBxztxgQN%Ym`~hZ_292;hXX3TFDE#nS=c)8l6V_`XjRMQ-dLdE5<++m2qp8vt;ymux*7+XvIK zr{`lXe*Hk74QUQKJg+=*qQ39DTq~F6V6U-~WNyK4e?9{cy-iLPTSd#4uiux%;07va zC4~_9N8X%dx?&ISS16au?m6p1$t7qd?O2G}>0&EcE|=F@y_U7ETWJ<1kL`JEtCmM@ gBdmM1FW40S0KOLnA(@{Yga7~l07*qoM6N<$f_*F}cK`qY literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/1/25-smart-cosplay_3.png b/public/images/pokemon/icons/variant/1/25-smart-cosplay_3.png new file mode 100644 index 0000000000000000000000000000000000000000..ea41daf34e6b35377cb30341fde676bbe5072fa4 GIT binary patch literal 679 zcmV;Y0$BZtP)X00001b5ch_0Itp) z=>Px%VM#T}pi78V>9xUBe+y-q*D;^Jbq76btR zaU7S1CCZM+L9H|Jjys!Qv)F%ey@*_1%wX1nAV>l7?XMl!X6a)s7{_rb2!d1y0f6H; z0CYMXk|d$*cvP#i!1lSEGw^)vz~QXpk5oM<&|)cN>ia%QscbDt5&-7cbhh^5=Jo|S zz)B7*D=4K*pZRZ4s*cuunJ9{QzV`!w)BPp@HSu6ECf&aY{nsyZ_Z4U|%ZVaV3j)`i$8iV#8!NR}PXdOLywL-Ok{tuq*L z=zW)Q9G4`1T6R3!G#MjTFplHW=hy0dLVGf<>oT*@U}vSx&PqFr)mkHjKuVd(T}g|} zj>qYKlWzAUlg!iYo)Cs1N-4C~eA``SDro^^!nT4Vx7f7n3?T98(yPqz+b8^H3DrDXGz17sbZ) z*2v{q_f|)e99wW{`W*oG9~}Y^=BfzrzWwEb7+gUGjieBQk1y{HNaic{@b)b#l}dJR zJ1Aob8cB0)&S&UXvQnuOnqGtTJ~+%!^3X00001b5ch_0Itp) z=>Px%6iGxuR9J=WmOp3{Q5?rV6^HKO;6wrs;ow{foeW5!4$`Fo10p0KiGw&O6#@~n zWayHDB~VeYiZthtgDwS=rIUgn*@EB@=<=XTpwz)h5IKi33h ze}C>ls#K{`rAj0rgeQdX<`p-s3wl_Sq^4m-jx!C5xR8kebrlElVv;1eW&?mxeRC#6 zuGv7gTmTfuJt^hFzw#t@uw5vf0aHsFr3Ge53($8*wp?u6#&<#p;nm%3>hAU=wpt9| ztri)b91+Dm&?vDG!W#~U^lw$TeBA@Caq}%65CWTq^UwYIW@I>k$bl-Hs^e#60J1d) zXV3#+Z)5k2b2@O^fD`xN$J)3D7Y{pRYYqUmZ3E-sNCF2jdeDcf9CSi(*3ugJJC6fU z-%%;$LSLEgT(c2-2gU*fa0Wfvg%a7C6LQNmEI$AG8N|J+2!s&cG^CDVmslNy^71;) zpvTqMeE=?9IVM|kSY62jFgiI3%KTqS+}+<{Z)2Aa@;fkgw7k3?#HesvnM|+)b>Tq6 zLI11{K)X<4btTWe=MRAK6o>9ri`tM{U**HTyKx(UCttt(6>ck&;pypVti?Q6z*)bs zH!mM?|KW>7aFF1!@F%Hf8dk8BWy|H`r!FvAH%X=aWxmwD?C$Tdc-R5p?)z_v-Gey* os`6n?!X00001b5ch_0Itp) z=>Px%C`m*?R9J=WmN94(Q5b-~sGyvXEg?_}uR|sWLqSM~6j4%L3YoMZ2_;ZCQVv|S zlOPla6+t+91PVbSO2^s`rV*>8U_%GV;*`PDS}AlZSS$$Vklf{xCg8nGo$i|+y!YSx z?*HHW?;s!`ARxdOLI_I;VGV0tFK6VmI-6D(QvbZJx{$)Fq%T2Pyhw)pY@#G`030>S zn5G%(owvtIBFE~DuU+v|kGD?5^y8eY;2>-VGaF-lGd>8{E zbYBErn?%!VyuRI%d-U)!s*xr$odsauRc6@|pYV?Mo0*$yYY+k zo7uR}<;weyRPJp7t+M;g9t=UyjV&9C#D^kxD#-rY2b>mv0sc1x4c`(JH2?qr07*qo IM6N<$f&pk8+5i9m literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/1/25_2.png b/public/images/pokemon/icons/variant/1/25_2.png new file mode 100644 index 0000000000000000000000000000000000000000..5e987ffe777dc2ef70419b0dd5d252d965598bb3 GIT binary patch literal 277 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a-;)%LR^8g zf`Wnt5SY3iN-WW@m>aQt-pu1`{{R0Uv}I8rP@1zO$S;@y$Oi*+rrB43f|EU6978O6 z-(K1%)MCKFazTgV_5b>htR{TqxAXo?Iaaj^KhJSD*-iiOTEMns zzV{Br8LQf6J1O)ztg3oBC*{4T*V`Ezr|wP=+4_&uyZjjQ+DRSDS_)3=Qt4Mt{mFln z-DG1@eTU?)6OlWn>~!+X3c9~YBJ5q^tCY_#_UxH}SPgg&ebxsLQ00wSyYybcN literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/1/25_3.png b/public/images/pokemon/icons/variant/1/25_3.png new file mode 100644 index 0000000000000000000000000000000000000000..b04af012bec60b467ebadfeda08d03ab88b1df32 GIT binary patch literal 515 zcmV+e0{s1nP)X00001b5ch_0Itp) z=>Px$y-7qtR9J=WmN84iKp2Lfh*QPRS(NMAigc-T6~TWXf|X8=E;@8^5}Z2Z7dVL( zba5AgYqX1l$tDD{1jiJ+#-Uuu)grxI3xav3T#`$kyx-+ZproXvq{IjzL@IwMjZF%r~42$8lreJaf^I+B*j4J*wq0OPkC!Z5U^kLSm&P9NWY&&IRn z%wn~upu`$&Dq|^@Fa7D~u_C8KA;Ek)UmsUl60(dFZUNYRZUU;@yy-!K63fyy8e7@E z;h+ah$|#9khs56hF<(bcTTo3%CGZmJ?dn41U;%HjTw78u@Dk!UX8d+zET<(nD?Q(T z$A7%cN}LxB!_dl0>b4hcK}p~x*>AwH~ literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/1/26_2.png b/public/images/pokemon/icons/variant/1/26_2.png new file mode 100644 index 0000000000000000000000000000000000000000..f21ebe42b165bc6092cbed375b9e05539aaa7551 GIT binary patch literal 683 zcmV;c0#yBpP)X00001b5ch_0Itp) z=>Px%Wl2OqR9J=Wmc47+P!z?FO7=ie2199|ml8pzze!dhkh2Wfu1YB(STpb)|;=N@Ot;;W5S7WZ?Qh%}z#^B^U1Fw8w6gvIyp zu?+X)^fb~dlFGr(_&1haaKgXXd5*1Z9s8}8=f0>){0^#|ZUeCsPPo$RSD|oGT#W4? z7nGGlNF3VZood4c2OyPmtXK{TA*^z{j&i&1nUhl5=abthfQ3UrE`_<6X^K@&ha6Aw z{g(;#SBFvxM5H-i0burLCbv^;ZR?>mBRk0MEo(TM0GKT~L#o^Y4uET!d&Ofz;=ak#;ob;@!ii0Dv>o#D1$4__)Y`M5J}94dBBY*LXgk zhm;bfn>&xaws(H%TZflAiV~-|_~;1$VDM)IW%L0of&$FLb8>(J05lEHch{Nj zAjNW!h_tJw0i_f^zi$Hol+lMAPrYz+-RB}J3^I0#iAWIw7E_6o#Z6*h717RZ-x!+6sMR0ov!(fWd`WHW`IJi zVvp^eUwYcHpawQm!22YGu()a9rS{tg<0vygzb@Oap^dA|9dur&gO002ovPDHLkV1iWrK;!@b literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/1/26_3.png b/public/images/pokemon/icons/variant/1/26_3.png new file mode 100644 index 0000000000000000000000000000000000000000..adbe9c212b36ee5c10669c8338da78332a8ac52a GIT binary patch literal 684 zcmV;d0#p5oP)X00001b5ch_0Itp) z=>Px%W=TXrR9J=WmOp3{Q5?s=Cq=NGieS44@2JbUDA#thRSq1oI0!;1q=SYo734~w z2u?16(9orWq+NnoaFH%S3W3s&Z4X_{($EKzq`G7(g3CF`@8@0axOab&LC6;Z_kQp0 zcb|OU{eJHOBaQT*O9<7=50>CwRDN)*)9#{KuY~r>quM$a@|(&kPXs80 zaE+Xe8<&Ut&3V;3+w;Yb_s{YB=etk{T7DH^>MCAa9LL(?ID_@Wb=qCb%uT?^*^zs) zN{Ilalv=Z1f#W!MTiIo}jmMJ#I8y8MDl(^PCrRv}lv0yYYL4Uh;;T15GjLqEI4)*t z)UQ9Z@Wy`5y{~t+hhNhVd46VYg0IsaZd2`(bSR*P3;>_rZ!@%4RK;OM5vNd61A4~< zVB~C$wN9@B6`ZD6GMzN~Mf)rOUh1$um_!2u3_E3q9cYtk;0}7nS>Z++g#G~3&_7#R SWSQy!0000m- zTmJul^e9AD-*MHhtKQR;)sLmD-Cw6DIJ2;!FQRdlXVFZ+9X{cN$R*u$nPlrp1{j~M(C*P z@wuy3cHH|Au}SQBZ}Iaz{+-j8t;}MxyLsx<*Mp1J3TJM6miHi;eYEq=bozjOMsm04_dH&1=~dT`NN;mmE%vVX|#yTZL`2h+nHCBM!C Poyp+o>gTe~DWM4fRX}pU literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/1/40_2.png b/public/images/pokemon/icons/variant/1/40_2.png new file mode 100644 index 0000000000000000000000000000000000000000..09ffdcd5757b9281138580196fe21f75eb345c74 GIT binary patch literal 288 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7raRPioT!FNLg2K_Gd;kCc-*{+; zRZ7v(*H@K2Ll)NEv^1>f3Z0@1RKZme4- zT=4lLS@fU#I$PAnO~Iv?9g_|x%W&Epo6mBi^|NO8^?3plm{vW~Yw}>#T~f_p!99Iy zNqKkF;^_wSW@|1oc*iQUAZ^zniMN_B3$GgZc|5a}F8?8WO?^p=W!NX7Pdd??4rQw< zikx&S%w1rx>~!Rf13q=qx~k90i;9@z6s6PmEV!okKdUBTyPfCc+%=LX*5)2LcH{ep dyKn#L>i@TAap?(KnE-S$gQu&X%Q~loCIF$jcP9V< literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/1/40_3.png b/public/images/pokemon/icons/variant/1/40_3.png new file mode 100644 index 0000000000000000000000000000000000000000..09333136c195158164e08c1cbc6c4a04e9ce8ef1 GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQi=gSA+A7LK|x`UpUQ<2%dbbG zPc|BUebG|sz;GlcWhdS_)0 z%-FGF$xPn$vRg!ceKr({d-0vcEI@g;lYFjXX5G^Z{vO9H&EIXXKI4Dl<+F%`!6!E7 zoP8Q+%(>9R#P2e%NKnqaR%waO{KYF>{`-}QJrFH=%%;C$XZL<7`5n>o7aZiuX4|x- jSEHwve|_Hf{7S}%JeHg<7Dpn0j%M(5^>bP0l+XkKMz47# literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/1/42_1.png b/public/images/pokemon/icons/variant/1/42_1.png index 17c82d9dd9efa95fdd4900c1f5c341400998a355..91d7fae345d6419450b92bd12fde3fd0b23c2edd 100644 GIT binary patch delta 468 zcmV;_0W1E(1gZp(V1KnqL_t(oh3(hBOT$1E2k>te7pJ-?2+}vUqtJgMj$Oo#{t3D{ zyXl|c7$`zVGda5m9qo9bAlSuDA{68t!b{#=(#9kg4cIp&N1FTez1%NPYmGLCw*}UW zEwFAl0TPi`N_h@EnWzmUBE1?!*m>@v3FNN;iOA@r%pYkSNPk4SGmMP3<)oWj7hx*_ ze(Qb~gh9b%x&P#CX@?cx2q?{k{_LtskM+ zOWQa*b_X(hucrZK!9xa_JbQ6fKZBe-St0B2HK->dZR%^P)gzW(!*ko3gEkaEg0x{au&AVs10|9(rEag2`?BkG z<&`81L-@XLv`eI%6Rpppc_4S1jMV#hG}}v>iycm_%}s(maZ4OWU8IxU3=o%BuFtIj z0_pmE@DgKOZepFCN$f3HXBZhv-=70zv>ph!J4pSHV`r1mdf+!aX_(Z{?G#1;0000< KMNUMnLSTYRhSqEV delta 492 zcmVvj#1a_U6q#Uo79;|L0E1{k_78xV z1pWaO0t|8puoFlW<^%==2|*w*2+U<95LBCNB#4P3mRDYHKT6jtG+|G*m#z2dy}Nr? zCkO)MIh-jlWlVu-!wQgy0kqqqmUf4EUuKXCA7$`>!01Bl#{Lgoki}PcFuhluY+iv7p zxBI7&`(gi|2>4N0!9sO0Y~#@}JCLKddb|g9t_F}C*Sj0(N03KPrU(FD-kz{|ax~D1 z2?Q_{ISQ8uNPk3uQVLr;7bAb;wOf#LlX0CTil8KN94;}?T#XMm2OuJ7t+Bjzh_3I2 zb2Bcr+-42PNUb%92ta>vj#1a_U6q#Uo79;|L0E1{k_78xV z1pWaO0t|8puoFlW<^%==2|*w*2+U<95LBCNB#4P3mRDYHKT6jtG+|G*m#z2dy}Nr? zCkO)MIh-jlWlVu-!wQgy0kqqqmUf4EUuKXCA7$`>!01Bl#{Lgoki}PcFuhluY+iv7p zxBI7&`(gi|2>4N0!9sO0Y~#@}JCLKddb|g9t_F}C*Sj0(N03KPrU(FD-kz{|ax~D1 z2?Q_{ISQ8uNPk3uQVLr;7bAb;wOf#LlX0CTil8KN94;}?T#XMm2OuJ7t+Bjzh_3I2 zb2Bcr+-42PNUb%92ta>te7pJ-?2+}vUqtJgMj$Oo#{t3D{ zyXl|c7$`zVGda5m9qo9bAlSuDA{68t!b{#=(#9kg4cIp&N1FTez1%NPYmGLCw*}UW zEwFAl0TPi`N_h@EnWzmUBE1?!*m>@v3FNN;iOA@r%pYkSNPk4SGmMP3<)oWj7hx*_ ze(Qb~gh9b%x&P#CX@?cx2q?{k{_LtskM+ zOWQa*b_X(hucrZK!9xa_JbQ6fKZBe-St0B2HK->dZR%^P)gzW(!*ko3gEkaEg0x{au&AVs10|9(rEag2`?BkG z<&`81L-@XLv`eI%6Rpppc_4S1jMV#hG}}v>iycm_%}s(maZ4OWU8IxU3=o%BuFtIj z0_pmE@DgKOZepFCN$f3HXBZhv-=70zv>ph!J4pSHV`r1mdf+!aX_(Z{?G#1;0000< KMNUMnLSTYRhSqEV diff --git a/public/images/pokemon/icons/variant/2/152_2.png b/public/images/pokemon/icons/variant/2/152_2.png new file mode 100644 index 0000000000000000000000000000000000000000..3815a4dbf493afced5100b7d6082cc9c4334d316 GIT binary patch literal 1852 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 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/2/153_2.png b/public/images/pokemon/icons/variant/2/153_2.png new file mode 100644 index 0000000000000000000000000000000000000000..020fc80d8b98631ec637233f065074ffee7403a8 GIT binary patch literal 1909 zcmbVNd2AF_9G+gLR3R8ptBG|SAhyEn9DB~B+jD!FZYk|XR!!8mGjDe%-JKa`rh8OO zD#ky+q7f*GM`8+S6}3PkV%4T4*aSjpJc5bFSV@RNJer!&U>dA%_M$cAh?C5`_vU@? z`+dJ-ezUW^t!ZV+10@)St!!!bbfB>u-DSlE=qVL^ID>{q+gp7NXk1uWc!qvnsd>An z^NUL7Kg(Pszl@HK;y8{ly?bWn5PFr-(bkEU*DtJL{KwO1XNB7Q zgpOf%t}*XC?2WfdF|24(^7#$Fx0M%^s0D~h09q1J6`?V#vO1vxp$i�EQ&lP0V~g zM&Od@CbrtWv{$W%VX3)CgPlEXKB1>e;6$Rj3a?D?h#(3LfG466S?3dOBE`$2x%rwR z@D#-8auc z5y+e-2Kf$8W5yU-xrwl0s60i*<8e#eYEiTh#c&))(JaNXBtnpSQZ_(>l=XF41`pH) zO;Qa>k#Um|1e9*WO(3ahAEIiGR@O6dLJ^}9K&2Q9ZTge~ib4*jc59K8aZ#XP1V*83 z=m^W?uxeN_6g{lmfI7Fm!~lw|*PFAktd?jrXF@j`V#tk5K$b=8zN8AN4yY^LngAPO zNai}z8fdVm4lgqb#yp-G1E(Hzg% zd6qNtN7HGjR}rOPaycluh#*Ns(1-&K)`n2*Ze3l}jnwNP zc605wm&>%M<+LxU#{Z=~6Br>3W2wDG9VrV(ZO)wL8Z27m zS~QdqwT2q-@R_OCQS)AC@znZUyC?RYluzNSJ=1~VnD5HM*vBOk`!1i{RaiPW(!ckm zvfn`L-ua88_xyD6pEZ4Z-Fb75lsAt%4s84Ko7vYIZBs{g7w$Y~soAhT|IK3?jIqP- zttT6~SNe#Lq=B->l{?OR2fI#G{qSJlVJtR0Sk!;+@27`%HAXJA`hOMzb1M$j9q&KL zU3>DoMq%~w{NJCm)p-9HIxul54=;XU?p<}d?nOUd|L~rtjtP^6_iqv(+wy^N*Mv~9 z-@P&aLhPN{%iN!Nhqk|e_hiMY@y*Jw$+c@Ywlm+KJ-dD6p-+#D%%8uC6`vmXtoFWv uZzoH`)t?+`x^QM{2U9ROo1D+PTGV^O|LV1)LsjOFtfisNGgSBNj(-83A&?{h literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/2/153_3.png b/public/images/pokemon/icons/variant/2/153_3.png new file mode 100644 index 0000000000000000000000000000000000000000..681acfa2db15449df46abde71083ab45d2b0a4f2 GIT binary patch literal 1908 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 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/2/154_3.png b/public/images/pokemon/icons/variant/2/154_3.png new file mode 100644 index 0000000000000000000000000000000000000000..aef1e4d633eb13ce00f362f499b109b7342fa501 GIT binary patch literal 1950 zcmbVNYitx%6rQ?j0aM%HpMr^ugQkUab{@O4yE9=awOiX#c4^u*RJ5tLckb>E-JO}v z%syJd5S1Wke~^~MD3Ugs8XuGp(NIMJwFrcY5=ihBe3XcY!5@NABI}*)b}et>B(wL< z-0ytnJC8ZLp*d7vGHdQEf*?v78v-qOt;F|zGaUF=alCyFFKqL&a2;N=+3eZ)`r}Kx zcM52rvc0;rBK2x`=%A6k^vypPcJ15U|MySN{Wd0(B#Dus!J(7brp#&ywc^L=7xDf4 z_Br@$rrz+VNf3A4W8X!@OIykb;*P^gxXo${E|Z{^Z~|HDM9xe?$7q6BRGrZQ>_QgV ziK2??r_Oz_hawf(PpuGwY*4R7F{Po`K&`!@FzoGuqD)mUCKqKSOprhpATx=$YDyVD zmE)E0-hRzcWDa6=`KcP)A=wseCTleVk)o5MA4O((j|sTr_;`~%c&Vrh7(1RVR?qA4EZaTp=FxyzuqX=Gr5n}TI1MKmJ;aKuUiL=mH_ zQHm_&QL5GAnt>hL>T)WAL8(zSEuccw81Pd#Xs4pc5{nSe0UpslD7fi}+bz;S^zt;4 z1)mSPWZvcBrtAY6OxmTj?I+t@)*$Bi&ub?V1Z*MF5f5%X4|02LHi70mBJy~}h>LZ3 zr`VPo3jWeSd^)SGO2&*nH_wX^2xy;=6KEc}-86um5t@e{w@c)%=OfpAa!Hyw^qwZQCDfdvK#-G_IzSs45(3rhbKeX(J=OunJf!)WyNx5(l%Wi-20e!~eiEL?d;el91 z@rrm6b#Uw2Gpkb3M~)U}-#YfuiL9f2nmWGk&P7{LCTP zr1r)f>j_7wE;2DZ>KI;oep9Hb|C5e)FLsU3p2&Qip0nqL_ix)gudnOD(PE0cShH%! z{Uh6d_x7${KBMKrVEdBC${Nls2rl`2@QAvIIQFGh-QjIIIae5I+Pm`2^tb!UzXH2A zl4H!^!cl37Yx60qd_1tNwBOiz!RmN-h27kw!Le(Qv08-u`U!CdFY9!{{>sRpv(XO literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/2/158_2.png b/public/images/pokemon/icons/variant/2/158_2.png new file mode 100644 index 0000000000000000000000000000000000000000..c6b75ed6c20f834ab8ec45b42014751d9663a8c9 GIT binary patch literal 630 zcmV-+0*U>JP)X00001b5ch_0Itp) z=>Px%FiAu~R9J=WmOp3{VHn1LXEUB#2OWC%){sD;Aa=;6g0v2a;C3BEhhml%2d5OA zLf=(F>NI;vA=F81lgbW=T&f&bnwhrdL=ycEY9rxb*J>T=b z&-)#uNRc8%iWE99bQ6e30HBmIqILAFn;Rgb^Rb8ojeAQBnm)Ha5U<-qgBk?WAgM(V zhzUjHE^fZVu2)c_Lp+GpO`89dEOZF(Dbp3)-UsPw0ba+Nd`?nCg*y603N^pNcHLxVrD3pEFkR9^RI>=p`%4)VrM5h zS=3WbF3X!U1ukC*&CzIe_U`>-J)D zukYT8$+=!XCI_(Y%;V&;eE+7{TFy_jm-ZZdc={^ihj`sy;$b}%g2xf53TWRX|AZhMRdrfFuPKt?CrN4V6Zk~a QAOHXW07*qoM6N<$f@pssQ2+n{ literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/2/158_3.png b/public/images/pokemon/icons/variant/2/158_3.png new file mode 100644 index 0000000000000000000000000000000000000000..073e3faa2e229ce11830c854c366606ca6379512 GIT binary patch literal 619 zcmV-x0+juUP)X00009a7bBm000XT z000XT0n*)m`~Uy|8+1ijbW?9;ba!ELWdK8EY;$>YAX9X8WNB|8RBvx=!KdMT0005@ zNklX2ZnN?zTcmlOp2E(Zw!0%m?hm(UO;!*MoBW-p0V(qF8xrOyqgQv+ZwD}f8>M#I5 zsx{kQr;^V499yips!7i&-e13jlfjUxrn8EzvizpawY_HAg ziJ@tp<=&CbD!~C>x4Zj%l-_|P{ZD=Yuv0bwC@xJ=C{;+rqpl~6FP8-&gmn>10r2$Y zdD~<$^#+GW#{jO?^A#|aQvqx^XHZPN!C>Z5M=i$}i&Ht3ow7kXtJp9yAhH*BI!%02 z(0M*hc9Doj0XRH5rstp)+$3>pdEk?z6IE{|;Jta1`~$wJYSb};09pV5002ovPDHLk FV1kI|7DE64 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/2/159_2.png b/public/images/pokemon/icons/variant/2/159_2.png new file mode 100644 index 0000000000000000000000000000000000000000..95d74728073c1002ecb85c7fd40e267afa694f8a GIT binary patch literal 788 zcmV+v1MB>WP)X00001b5ch_0Itp) z=>Px%&PhZ;R9J=Wmp^DzQ51*2T1jwFI)p|7sW+Mggk%uJLK9Qy;vhx}7E-6uBD6&X zp(LtkYH=)?Hg>Lmdqb0T6Zg zL7)PZ%jGVsfVLcQ)ZuT7byz!O3!pdH*LJ;Itk|(FVDX4`?G`KCzrBwq;0B;t+GjIu z$If6WM}!b+)Zs^&IrGQ8YN{IlRF> zmf29vLK+4XLa1MtZp!#zTg$gd{sNVqEIyx4LJs!tGn?PAhNRbAI7ltLJ0NY zySFkPcs&8Y+{GydVpjp!%6(zJdyQ(TMqv+T^L5k5Y^q2aGt;={7BrZ#MGf@Gnrf*A zK=^$7??MPe1!L%~gb?b=NG|}{Z%zOSs;ezEl)E#+)>SUuK_SQ+yj8m)iMlc z3*gxo6Y_dBqDc1+%M)<3({LJw0~@B9m62ZAjITa@20$>oL_E}z`M931nQqpW=fSp- z>g974K=aRwZ%=DUI}PVCPya^=A=HnLuc?(+w^S>`g5{5z<8&Cxj*q7knbj|clp!{N Sxj5wj0000X00009a7bBm000XT z000XT0n*)m`~Uy|8+1ijbW?9;ba!ELWdK8EY;$>YAX9X8WNB|8RBvx=!KdMT0007R zNklE)YJ)?hR~jWLjVVP$7jY12mO=*yr_QAiAssB897SQLI@)l^D#ENhLe!C0i|j^3D^pii}?W13u{b2|8w67 zP)7ju!Wv$G6VU5-PDw`q4~A5+rxbj$JIti_8~|y(#+P`hHvkiJ@a}S;vnj@m|4D1Us-vzJqjl-UyC zz{Gu(yT^0@3dsR3Tpa>nd!s^R-XN{lC}pa)%4`X6hl^a982{%p+Zz@9Q#&ee9XVzX z6s7=Wc>zAecL6#;zpZ@Y=8Q|_(&e%j6LXjv;#~s@A&l@+fV5s~yDmXx{0&YP(oewO{pNLxt(R#W9RH>dTQGFE@3(Y3QJ^`LyY5W@I1cmqHgWM+Dc zv|eK?=Vi0}mWA-Ba(h(E0}u>(y50&cZ*{HXCZ2FBIDmMX00001b5ch_0Itp) z=>Px&V@X6oR9J=WmO)4xSs2HE*|dc{1VZsrm*^X`g}7RBn3J>t-P0-vDeb`=SA?{} z9z^M43wtuOL~>ICi{febu%!VPz3nc9WlsYe6uM9Y8RD@XggI3hW)JCm&NzwAjN6?2 zLzu}o-^}~H|C{fd2iNMcgb+?I$NM5ovJk?V9i3E=y?_k`DD~jhun)GIt~!ZGfT?=} z4D}Coz3z56$RsY(jUY*KfCsmRRqW33O}O1TcXo7=U--ju=SNjw2WLko0XTZ!0@^MD zV9YWA>pBPC@}H_H^b0PiHU?GNb_?2?IkP zqi_WW6hb)vY)xa-ZH&6j#A6MBZ1I4>^j94HG(+Fo2IE;>K}rXgm+zx%316j$`4R={ zgMb19uo^9DD`TYQU-G1~&3KpmKi@RbGja4xl0q&?w#ZpO6*%&E(eih7P_~Wo)Ci^0 zJ^-cCK31beYJLZx4VTr`J>~dY0F0(ZskE<_S~^;u8X=!fp&(sjb>r|kD3i-mBc8a` zXwkQ}!5iT3$~NQKqQ|-8rDyP|irp2yynG)(xoI@d?im>RNLd?UaqnF>K5risLO7e7 z>-@g<3SCQh5{;(C&;K6r{qAp``0>&+50q4;dg6J8o{6itiha7ixc9DWmHUF7Amt2A z(~L=n^XZfi3fcvtXW|{*I}d#sTt`3&>HdHI0rK56nijg2Q12R`Kvwr^R2QZ_F(5Qx z$09LJGv@wvf|HU<*RIyMiocl3l3U-!Xj-bM3b`ak(+UjN74RxD>Nb6A8w#?JORA$A zEC?Kg*etl^cF|~Byr21wa{Mhu-Nsya-OgEm?r~HqTRaH$*$eHUEFvjgOK@*zi$(j9 z56)e&QQ#nggF*-=pHA`3(htndEwH({&fMHW8}|8+F6*n;`keX?ln|n0{_j2700000 LNkvXXu0mjfFo3>m literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/2/160_3.png b/public/images/pokemon/icons/variant/2/160_3.png new file mode 100644 index 0000000000000000000000000000000000000000..62a4ab22fd258b632d4e3d950ea66f5bd08dcbd2 GIT binary patch literal 911 zcmV;A191F_P)X00009a7bBm000XT z000XT0n*)m`~Uy|8+1ijbW?9;ba!ELWdK8EY;$>YAX9X8WNB|8RBvx=!KdMT0009T zNklNr ztq$s7$e^3xp&437iJcrNiHcL?Z4l+5(V-C%g#vB>9^YR^kFq|mIkWolOr5809XvxsbezgJ>yjX+M66K z2J0-iaMZ9s_3v$)%j$SlfRDyn2}ccF?M_C#UGxr2vN5|tLuZQx8BgWt_S7h3xwvEH z;G?ltb@CB!7fEBDw#{WOhcYyDw($M4i=kng1({A{0W3xI*MUL^^Yz<@49?8}Fyie3 z;7-SLRwEv!e%YCL=>*_w`U^wDHsYzAnmaf*LpqTysPt0rL?r|Dku>H3@O$H2ywb%P z*SP|q#L1=3uk@br{m;XYMS-$8dx9>~i7eBjetHKc2?gBvy>TYzx)~la6%L^PZq`!G zp@3UOv)fanmVN5Rj-_}GYe5A-9VSOQktGyxTb5FX0eoEgz>~4Mg0?d~>IYEK3`Y$G z?0e_H)$Sw}NtXr`LYT4G1i=@BxZ0hTi87B)U%gcT0}jOL{~?!JMi)@Omkcb1OhwXa z8DxaNakc=Zx0qtl%fIl$a7A-aBIGz|w<2@X)$UaJB_kD%8f?t2(DC%9<(M9|KLQ?A z)iOV2Zsre(kxg80=6V#5!c_zqPvzK7y7{rYpek9v{e`0jyK6foZyw5eXws1jksPOL zFR1>vo!o<*ziwE1pxz6Qb5|)Vg0a{H&z8dKm_*9fBXRi~iR0qR2HKk(L>`Rb^Ys&p zP2ltO1Msu<63u-(7M$KzLIHQ>BdAw-{{1w+`t41Qf*kdG;|L*2MppE}UAquVH6Lep lQ(xiK$8UrPYvZ*YawY%(002ovPDHLkV1f`NrXTX00001b5ch_0Itp) z=>Px$?ny*JR9J=Wl`&`&Q5=WAh%Lw!!6k0y38h9%C=RK_!6g|&qhJxGQW~%b9mGj= zagvN}AP|cPg@blzX*o?nf{TI{B6WLsv?*jbveiW>2%^JtsPCGZ3f_fAg!fJN?*8xI z$M65%9T*G-gTY`h{Le&=;-x|erLR5D>uQazCTkHbp~s^?PWv^rz8%_Yf^xhYF#xCD z^l~LpB=Y_zD$yhGUST4=Ih2=x%Riq3h7^=nnR+8^uKk?@JosQ=XxkW`v<_hC9+70QYW{);RabMoS^2*=YxAKQ?+sGO`be^ zOQvd*jmCVrsWpd_SMRd>YTn--M<(cbUPR031EJgK$`u8MYX5%zEumTr`+o+@8UUc* zN&@ioTLaJYB04!;+dl3oI-%dw=_a+FaG12=U+@zd6U)}C8w1Gz0000;6J1-*ojnyIB)aL(okL&d zcsOu|x`g%`&pPG7wANJ9h4br{6M_3vH@$x47SdyDsm3-zR@FIM^$l~-wTZ>6&-6~) zVDwF-C$2+ZSyz$cVA>g3XSX0005uNkl?rGdgR@%&9=h^ZBqBS404-%Wegoxic^;pm_OT6I7q1c>7}BDZB(bXS<8K6{6tEJ6l+oy}Dk z-WEn_y={_K-w!F3{|tP&kjPg-t|og7fMZ)9LK#3ZAj81|n1^5Ya~A>-p#!N5D7S`T z8Sd%onYxBL34nm>nV1sGH#TQzWqGgufZX=&WRn2vu%q-+C<#CWpcoEgD2P_;cu`A1 zx$O+ebC<(w#7`1Hr_*uKX2j`IqU__rl(HX<09i@=0#ptt1~>!&PZpcS|JIgxeF5Dr z5j+Su`Edti-CO)aGHKxVxO?q$n>TK;Thh=2vNz?&J?Iw@AG{_C{`RFV9P-o@Fo@T@ e)`lMN8@mhzE+pJOL;wH)07*qoM6N<$f&c&xqvHqw literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/2/170_3.png b/public/images/pokemon/icons/variant/2/170_3.png new file mode 100644 index 0000000000000000000000000000000000000000..01cb78568ed68ce32317744f7d463d32334373a5 GIT binary patch literal 534 zcmV+x0_pvUP)X0005qNkl8HbX1 z4#>FR^oVGgYN=w2v^y|Jn$y!wv1Ni-_%0Tserrhp-}C1*mB}>A%&=wu`mdfpt7pZW z3{^Q8@;ydC#>aDSj{6RjF6lH-X+ql$#Dai4og9g^$2T@m23 zeeIbh17idraBH>3flBULl-SRAAIN17e=G=C^6-%oTN46^0TknKjRa9@onF*RP%b+o zc`gxtCH^D<8jsG3GGolIHctB9MOwKZjewjaegTyS5(5qcz+j|-8y@O1(C!eS2Z576 z?m%|E#NQ&5E?Rxuou0FsH!iW=qMiqGZ^|EcxBr0n#XFMV&%V^fVV#Zw-SnE%y`Bet Y0W6OOF1X7$yZ`_I07*qoM6N<$f;5`%1ONa4 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/2/171_2.png b/public/images/pokemon/icons/variant/2/171_2.png new file mode 100644 index 0000000000000000000000000000000000000000..3ff5792e2d2f0cf8eb088abc2d065e97fc6d0285 GIT binary patch literal 669 zcmV;O0%HA%P)X0007GNklflD&h71HX1zhLxUZU>=WqYtW2T7m+=}v?j|zaf zdZ?gaLBXI3ghHV!tVyTSM#9I)CIDiv-i0UhwDvLeM7|k;Gy({?k2PWH+fUNxL>EP? zK9FTu_Y261LA`jfMRS+70Mc#;WSV_8e#K!ChC zAaDQ-t_?q`6m8X^?)5qF(Y9^pK->^+^#B+DlAu?y3USTBWJoVS%*olsOeNnMesF(=R>k!98!rST z1Ilnn3>fZfqku9fHh(*N<4&j-K0lz%g>7mZ{p|}VXRXe4$Y&~DEC&-O4XeX(hoqVB zFQb8ya+-S`anwUigds6>%Zj@i+zQaIq^#`iQtQyAGu+zQB-+Ch>z+m4Zy&io5Fi%1 zYvb4OFR|at#s^vFq4rIUM@4^0teF}*29An&D+#T4(s<@G1bzUo~{fq;u4h%Y;_kh>;Bwj9D2_O6b0000X00072Nkl+@JiVTk(C8ab{00|k&WFHjVvsPn%yLmN0jU(vlt7aER~1_ zGLy+lY%L`EpZadcb+2=-IWdd*R_C7Q@BY8XIeC=jmY3yxlmpDvLpcR=3VKz*=ktAF zO)8Z#5E<6} zkO5KG*n-zLq6q82@fwEQKTc3zSC8oabHK&s0_!KH&tJa?%7EOd3y1m2EQX57WYRhi zH-ue1z+FdAsi>hsTyroP(g_fAGIlXj$+w0Z+}+BsnBKCS5ReQg!yz$XxUY=@%AnXh zT3l`^3iY<%rsy($Mjhb?S3o&yb*@7`Kb{n z#Lz7(_G<7eK(~_ec$B2E=QnG3AlN3_Rh{FGMc!>6x!)5Y7TRm$VQX0I7YPl0I}f!l zeX=V03j>8zTOUx?y^IueN*eUx!Qf=5dw7Q3Ufqb{KLfPG$XU*?45#}>baS_77pvk% ohShnksP;1ss5;Q=c-8}c0tmTZE=#`EfvirQ*eHS`EfvirQ*eHS^^xz`-2AUGn?C{j{`qRvtDL8=s3GIQRP3=fnoRFUwlYRhw)%CviWj$vY(ASn2$3 z8m}AcN{{)9YV%zT1!jw0fU~vEd literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/2/172_3.png b/public/images/pokemon/icons/variant/2/172_3.png new file mode 100644 index 0000000000000000000000000000000000000000..95f0c9bdc6d777d7c7340ce6a0c5a7c35fd9e95d GIT binary patch literal 467 zcmV;^0WAKBP)X00001b5ch_0Itp) z=>Px$jY&j7R9J=WmZ49>Kop06BXbi-1cKL9PA*|;V#C&uAQ3oN!ra1CF;z=&6$Q7T zk+ZC#LC~ZK66Cf{><^eRiUomeB*lW4uSe)Dn!hetlnyLcbpSwb(FEY8-jfs$!>}NkM=Z#UgVCBy z7={II584d?fMKUE;3tSy#X^V27jYz6cINlN{o`PShuRc|?fy*!lX9!`mGtsBRhdGT zBt#TVCX>`_n-Nus9-xrLnx=hwZ5)i?IVNU)U;6kM(JTIV?%?Waf35HF<{X-)q297k zuIiZi^2}8hEa}&U%_QN7-k;3@02N17O+k=3SiA#R3f5cJSMMB^le;*2$?}uAV5xSB zZgGg)mwDV*ao*xK5k-kw7)d0Rz7Zmd>MaZ1;t&AuDoZ@ajN8eAy{+U#L22b|`y> zSfvy>7uWv(|G(IK^Sa45^9`au_8*yHvrZPMj;AEZFPH%+2Lqf(0@Q%w4W2HJAr`%F zFKy&IpuoX$K~7!k?f?Jz3*Q~Ow9qrZplWAFg-rcEVFpvRLrpDP8g{m599|~WXOmO; zkh%I2$IDHV&ODy5x~Sf>M>Cdt>VXoY#}DM9c08OD&2fyE*P#6NPR375B&W{W+aGuF wSlA7p@T+$!m;T?BqwjqzU@8C355IRZ`iL?9NM`x80_YY7Pgg&ebxsLQ0G6?Cx&QzG literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/2/174_3.png b/public/images/pokemon/icons/variant/2/174_3.png new file mode 100644 index 0000000000000000000000000000000000000000..58d98aab99adfc5c36fd89b2860f4519d8919c30 GIT binary patch literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7raRPioT!FNLg2LAqEnkmBS2{2( z%r-dLX!!sC|6~S+Blh-HbCM;2D!595{DK*Pq7YEmDG~-0t@U(q46*2adub!z0R;}0 zfPUer|NlR1dUxp3LeKnys+}D-Zq0ws;?Ucjr#<~FI7L_-NWzqlu literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/2/194_2.png b/public/images/pokemon/icons/variant/2/194_2.png new file mode 100644 index 0000000000000000000000000000000000000000..043c11ce065e6f242dea1525fda8623769d19ec4 GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4aufr6LR^8g z0uXqHm_|pvm|=T0L+}6LP_NaCitpe4c7MfQW7W&=mFEBzahC-71vC7IgW9s%t3crv zPZ!4!i{7`F9QlqaaIgd%=b2jcpZWjAZP5lV*ZrLQ;uR}v?%VnPth>)$+z@2p_#t3M z(2oAPInO6e^RkRFm@aIW_}%A_TGKSnv`K=KrP{48%@W~N{yoDa+hfWrm+zv!&nx+3 zw#=|@Ivx6c=ec>&PcyRAX4sz%y{Pl5{-eykpZCj7?LE)mz{K?9xB_Vz zaa#oig)rY$4F)pjCtJTf9b|7_7n63RzW(ur&^JXu6mT-QyW4c~{@)Uz*u4uDtgZdII^nvdR2Y{!ha6Wh*Y}J4 zpJR-IG~1=06&*5vGtcvg%LT53K9_PXJt%OGn!HFXMSgM`Z)ecl7yA~yw3*-7EmquK zxbv0m^_#`3Wt`7Sd|tj&+b!a+{=LKI|8M*4ykE?CJB^vMwfoU@pnDiRUHx3vIVCg! E0ABKJhX4Qo literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/2/195_2.png b/public/images/pokemon/icons/variant/2/195_2.png new file mode 100644 index 0000000000000000000000000000000000000000..7fd5ba2792f24456e5c93c43f198b02d01d120a8 GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a-;)%LR^8g zf`US|jIMk};RXwrJ6XPO=lQ4IJNWJXiqzlJgMreVB|(0{4F93PoN4wIpx`u57sn8b z-nW+=`C1J)SOVIazW!4$TQF-!X6B>#e}&19xLMy6{`ve{VbkF`8z)Vg`+Py`Vcyv3 zlUUEbU$bzT3$JgA%$s|wHn(;j%04kG^5Tpn=MCytZ~kifJfCHI%cBY3)Gq_*- WF@Lkr30DKUkipZ{&t;ucLK6U8o_JRP literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/2/195_3.png b/public/images/pokemon/icons/variant/2/195_3.png new file mode 100644 index 0000000000000000000000000000000000000000..99da4dfe12e25319a9a51e0a6660f5793bdcae67 GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a-;)%LR^8g z3WtG$f`XS+T!Vqk%hN%gR=q{u%V(q=UyhFV0AE-k^T<=C7vD^I5jHoLX-BrO%VSKvIuu zdtc>h4vm*So8xCXEPbNa9)G6q$GS;v`rXkY&Cf1qecii6K-c_V$%dz!UQGKvgWFYv VWxlXNu|Lp-44$rjF6*2UngCplblLy_ literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/2/198-f_2.png b/public/images/pokemon/icons/variant/2/198-f_2.png new file mode 100644 index 0000000000000000000000000000000000000000..35e5c2e75ea0ec0832a71dd1e42a86130c429cdb GIT binary patch literal 293 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a#R9*LR^8g zf`WpUsF0hsLZ**Fm4M7zJrz||>+rDr=7t&n|Nq}SBl~4WwG~huPf3tpFauBs1~`ud zr~$>Nd%8G=SoFS~4e{RBzh)3xUl!R^V~1LwomO5zPP+CWq|jCso?Uu`-);oSWLxzkPjF6F*8 gJy7tr!2T7l&SR#n8Q-5)0-ea<>FVdQ&MBb@0PM7SA^-pY literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/2/198-f_3.png b/public/images/pokemon/icons/variant/2/198-f_3.png new file mode 100644 index 0000000000000000000000000000000000000000..f2920cd1d0e5edf861878086210c8488fc804d84 GIT binary patch literal 293 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a#R9*LR^8g zf`S64oEV?8v231uq~*$uDbM^QMOz(p4;5Mc|NnoFcMIEbrUIZko{}KHUoj_jGX#vFLp}$x+D3ki&U))3ir_-)je?|9i#U7k&Bd>)pE&u=k literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/2/198_2.png b/public/images/pokemon/icons/variant/2/198_2.png new file mode 100644 index 0000000000000000000000000000000000000000..35e5c2e75ea0ec0832a71dd1e42a86130c429cdb GIT binary patch literal 293 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a#R9*LR^8g zf`WpUsF0hsLZ**Fm4M7zJrz||>+rDr=7t&n|Nq}SBl~4WwG~huPf3tpFauBs1~`ud zr~$>Nd%8G=SoFS~4e{RBzh)3xUl!R^V~1LwomO5zPP+CWq|jCso?Uu`-);oSWLxzkPjF6F*8 gJy7tr!2T7l&SR#n8Q-5)0-ea<>FVdQ&MBb@0PM7SA^-pY literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/2/198_3.png b/public/images/pokemon/icons/variant/2/198_3.png new file mode 100644 index 0000000000000000000000000000000000000000..f2920cd1d0e5edf861878086210c8488fc804d84 GIT binary patch literal 293 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a#R9*LR^8g zf`S64oEV?8v231uq~*$uDbM^QMOz(p4;5Mc|NnoFcMIEbrUIZko{}KHUoj_jGX#vFLp}$x+D3ki&U))3ir_-)je?|9i#U7k&Bd>)pE&u=k literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/2/211_2.png b/public/images/pokemon/icons/variant/2/211_2.png new file mode 100644 index 0000000000000000000000000000000000000000..c042910bc17c2c9c7ea61835755fa10d40d2c306 GIT binary patch literal 386 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a$*B~LR^8g zf`US>j!uxQp~t@V22JlfQ&Z1>UUNFHOrR-`2{lo&B6oR zJ?Dx7m9Fq~aSXBOeLLwi7qcRd>)tdW`Tze9?iEfoGhH~_N!(URNhZ%E>eT#rMiudI zi&Ts+Zge%ao~6UWf9RWukTts%Ao< zD0*&#vCWhfRiV#{gtrM?n)PB&v1-1l-mKzP!IPgm@1C{8)NQMw(dMfUXDsbhdowrt y%OmAq`;C@AyH_L`*0293Oy17k;PmIx{b#uEw6QES(0kSn3L8&XKbLh*2~7Ys*pE{H literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/2/211_3.png b/public/images/pokemon/icons/variant/2/211_3.png new file mode 100644 index 0000000000000000000000000000000000000000..3548893b6ec063490cee4c5020223a250204ca75 GIT binary patch literal 362 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a=Zh4LR^8g zf`WpadbFHQ!pig46IS2RwyQq%?{D|bcV;1z{{R0ER6rz1loh`UR4Q2#%^8f!I+$)@FX1Z{;len#tl1!dS)T#OLj4I;a z7O5Ct+~{g-Jxhm$|IjxRA!~Lk#%(LgL_&9!xF3A5;*+fBv{kZS7DXSnjhrZzJ)_D! zQ1sjeW1A@}szRR?32zg)H0#BlV%2<8y;;Spf+s(B-aTuFsoPdVqs>tY806n7p06!RgPX`_FLSX=7Pvp!cjD6b7EIelF{r5}E+C^onHw literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/3/255_2.png b/public/images/pokemon/icons/variant/3/255_2.png index adf8c6ea8bcafb7822ac98337abffc61219a92c2..b40b8f1607cf8472629aa64e34e356f085769178 100644 GIT binary patch delta 440 zcmV;p0Z0Cp1dardV1JoOL_t(oh3(hBO9EjW$MLs>?Sd&52oE%gAT&vvAgv8S5KT>i z1fDbs4Z)3)($v(V1kFJZfzS{)Js^ma@N9)C`Ugl{gFJ^A75Jzp%?v1naFtR4A%BFMuG;`Onc{K)HOk2p z(YUtk(mO8$W>uUiP^T@sZ0~FU=2e^vP)AqMH=te&%8GHce@5B9!YUSM%P#TS3sOq| z=AaP5RaVS4mEAwT?KFp^pLioy@dbN_kx^s*6(I!5ih1*K;XsYN+lo-B<~?L85hB-* zBc=4JYl1TZYUIu48UU$8=v#ZPA7{OEV6<5q1JiYzw(RooSOxI*L4A^#Zq~*piLRoq zV52qQwsz^^?9#Q-UO2O(ZhWX4t%3LK>l~a!>Klz-ATf>Bz@L-kCm@WjR^!;ExDQTd i9BbOw|NJMJWxfCpS2xr-T-(S10000X2+sGprN30YG`V>K?tHicqGIoc8S1G=UMbj_~-MZ|Whwf0>4>KIT&0}TNOJBG^zMyMpq^pZH`s^6`+Z!VrW3K7!uhunfwLw!3sIgr{b4MJx`*P z3U3aINRY^;?R`mAiO)qTsVV^RxhM~(n%9%#zpr2`?z`MC?S})@TC@Ii@#DKCRpn*x zsBL81K!Cx66o1ed&aMLv9;CR+-vY4QH_Pm%0FW8qKtxDn({?`oInW?8BSXZN#w;>2 zJwWXI2Bnm(t_#iyXpsF|+Wwo@}bTS`R?KaeoS$uB*0000i5D5w*|ibXUVX0j-V zGa5vTScXN5EDV!_1-lEPK@0|0W^vmkalAwDz`=qb>SS;Rd54t?p}`{fb~+j zHGm4WUMiz-mQx|s@dTJvv8g~6%c(FD=mgBG_$xpaRYlK$YBLlvY0e^11~*r^*-2nI z6|Bc9SN>P;)}Ro=Eo9RA-p=L-hC|rd900*^h>PSAtEt1kuV6jyyNpgoya7rnd2+6Q zeAmwAm|crCjDKtx2yh&a0Uy)Za=_zwjEDFE053DsOhxAa=njk{grJZ~>-G5OK!x0T z?new&H8MCh!1DejrQ35|T@#!UP$3gb3jhSi20lICUfgAVxXY+n8w2-x{8&zfxx@y5 z?t|(iF>ThyCyA<}s-T@O@^*5naT6;Mqh8pwqpo(U?LmA|UwgU+>ygR6UZQvRdV|>c yqBkeWS3vmqw5r9n#P?u*YO$tc{m*}rX67AtbUM_lxx`5T0000mD<#Y)LrvURRjs&Qps^}R|ZH7jr%uOQ6(ou?slLD60 z#bTB_f6KcyD1>kum9oCKt2ILLD0a05KqwyNws=9Rbo%!d?8p6-$Xdc1pp=pq=l<7s z?P`t9gUrClfq#Jjm-!6vIh|t%yv%2KE}R4Kv>sz4xdp&2*ZG4ibDyj{xsc_NNzXI@bUECmCiw09g_@)B&}g-v9sr07*qoM6N<$f>~?XZvX%Q diff --git a/public/images/pokemon/icons/variant/3/256_2.png b/public/images/pokemon/icons/variant/3/256_2.png index b372f1ff9819b1fb28764a75d56c7d758a6c053c..43919a2db0677aed889b9c1ff85c9b389623d3df 100644 GIT binary patch delta 659 zcmV;E0&M;71?L5jV1IH+L_t(oh3(i+NEA^V!13>(&>@iydk~`NciDAOG8ZK1AJi=m z6)b{KxKU8v3hGe)J1N^CqlKW5F3LtkEgK$II>y$)3^Q9%yUem8*gp!f+sf-;Z=G>h zT%1{Vp?;^~&3m&Se((L>yjepjMJ0#vALuY#2Z~7Ufu?C1PJf^03Q$CpX_|(Js6&&_ z0hkK3RR&O_rUGqfoCfM}0(A}eAvRBQ&<9|<24~rH1*p3FX%6~`f9fR}NpbIS9DpC0 zMHbFoFK-4l(j2a5d3K3J{3p+zzQ|3n({<`=3FTdZ~)X<+w{Im$ZY|) z!a;=slaUmQzkjP}@A8))`0>^rYW;OK+}F$R3D#U(>$8(U>+4I0KkFg!#IxRTVvJbg zOAfd^yF}BSU!|{N5m8~EV(;$NTwC~E9lNF<0&AOc+8aeeb6g5V={?oIKGuaS76rU< z(?J#X=obF~Gs9o20!_4t&0lH{Gr0zthq1Ef1QEr0AHeE(+=BO)?V5 za+V;qr&|C>d!r;HDO*-0GzUP~r)cl;uicL=AR?s$>JtpW^4J88eJ26POsp`yde@d! zW1uIuUVi~h)8s+;6@x>aI|H;LGZQQ9Z>h;)^|d~7{awpNXK&lULP%qv2Y`Jq@8|Wk zo(T&Toa;alQHLAO05Co?3Sa|Rk!3ruTGmwFkBf-%XFb$59btTCwEQRPjiER9H*XUh tJK9=wK@^ITeYm^zef;nJv*3380lZAL)QK=U!VCZa002ovPDHLkV1f{-Je2?d delta 667 zcmV;M0%ZN?1@8rrV1If^L_t(oh3(j1NK;W9!13=CW6~db5C%pMhY@T!2owrRnEB8{ zMIZwq+89K%iTYHbWDg^>^uebZsr1nBjwqOc#K5T4pdJ)`b2N}~AHu-5BB4Rn?V--) zUN>=g@0?J-r@Oz4IW$dUFNfnl&|=sQ6hi0&s(-5LusWVCKp}*ts;WZ> zp?!Sb0)V$Ww>N+iVgSBkh0vu{{5*%=|c>FFgCBw_s zcL02Po9Eo4pS8`PL{2ZK$gZrDo?GNiXGWi5tLxAbP*&{pa>~>m@&#-u5U>E0S=%b? zLhcB-9S-&=Fn^|G`2MAivA&Ml1FyYE;6HZ2gzGsP!sTBDb~%H_*Ov_MMiaO5llt%W z{jH?ZYdSEyvd-hKaP_NL2%$Ac`)NGTc8$IDbABHMPsb!FJUwr`mX*tw4#~ zJg^W#a}V|s3wDe@3s2%4JmLhvlSmR%GN!DCd;tKOqy3Eabr4fBypG&N2vI$tJi!2bTPs>lHv%RUY1-V|*&QJ3u2cyU>9D=ndpib}LyjyJ z0eIC@U((ljCM;KQwgZI_+NqXH0L2}002ovPDHLkV1m3i BM#lgE diff --git a/public/images/pokemon/icons/variant/3/256_3.png b/public/images/pokemon/icons/variant/3/256_3.png index 0c529f838ba8c06e4e7ef5738ddcb87a18e20af3..bb1cbfe08090c20d47c823dec757cc1158d6487a 100644 GIT binary patch delta 651 zcmV;60(AZE1>XgbV1H^!L_t(oh3(i)XcIvc!0~^eNFf$QEu?tq;0NZA7L-Cwl>`hn zXT5j`SPu#oMWwU{MGpl%M5KyPL5~&`(TjRWLQ5^y8bJfe3h@Kkij*S85Hx`v#Ptwn z*=-XV+({GAciIfQvp?R<+kG3CVHh-Xxc&njhH{_~!kkdob$^%B`IG>K5QeVnE+K@W zXJ^V|-avBzB}#Y$NSp-9Z~|2Zyn5~u!(*cWwqtOXO(np=aDd^lQC=K7MMleU^7VZH zQtif4fpfrE&6U>1lBl%*4LMeo?;tkLY?OCzI%^}PNz*^ zM#~W`E!Mw^g%Cz)sh!=MTgieLUz-&5h8<)+&YJb%%m)d%rQlLaGpSV(?SW&W? zt6^(}I;vuT;{KiZ3wh=?Zd$S2Hzw!V(9&8JS_{(An`Fe@LE5v9Z96&v@E7uAw45!g zk)#GdXsMlnpoff>27ANWPP)HA-Q2LJ#707*qoL&%HV7i$Uc-qsWg#foU2y`I3Ist&GRCQ8v+Ju z>hX`yI*|P(Gqf~>38m6`&r|#H>CU;rKByINdUD7yu78??^{QDdwf#I#feN|$!Xjce zuT)WYyfkONy_(m;ZWQXOiUGc#-AgEyW^CW?oaOF*^%4KCJvmSxPBu7fEF8N z*YgEOR)2eABi4Qe2-MV*noqI#?e*pW?MN*)N?pSl3#*P*%VjUPg6_e5$lh4Cn~py0 z$eC;J3G)@4=RgrL?_bF7v$kOazyYu$i`KBJJ(cg~B4P%X%ei*(2W`Vf@jL3(AtL73 zos*0|d&{YFhY8(&S-fwOwZg0K@gT<4+ObXXr##XV&)ap0zM3d zsLoG|fa@9!Gw~(Fr9vY>Tp)D=c8!MFYc$X}GQl2$0f6>EkdpO_F&P)i_C>B2fc}8d z1(+RL#`Yz1cz+lQMZtwF=>TL656eEjfsdRU9@GV?D^aT|s@5I|a;5Dw02z6?066WA z2uRT9a$O3-WV8Zu-5IR+s7tG1)uA&u?GEO+Udujz;_{dPwW;KR^D;M2oZ|J!a(1Vs z&>jeK{b~-D^N(;{*u|AoIJ$H`nfBu{U;rvJ&1_292teb=1Owm3;^$&*`Nu(p5X!~n zYY1D?qf$%QlFpmfTh#UU(ROk-&!3G+$hfV+-@&VJLn*ne4tk;>0bT}QVYTJc-QnZ; zvoX0uVwppC9)!t=wwBfN*moOmr-zKZT$%r7AAc#N-*!W)xNS!&IRz#;M()|Z#3(3) zP#!ohN7VJYdMLG3$g*@jE;;s9f zJF+hV7A6CvEj$l^x}64c3QUPpPzzag?F~iiKGFI%8DC$MOg$>3x6=bmZhyj&_=DE^YZ`q>tm+vJHI|g;}B9JGmroP002ovPDHLkV1oXIz4QP8 delta 908 zcmV;719SZ82i^yeV1H>zL_t(oh27X+NLyDN!0~TZ7_zi(P-tgcT#wK+;A}^2E0IbK zlyz$#R-~0GPNdHI(uay7s|1TdEx1XfPpw;q$Pkgyl|t|C*-kSR0}6zfBv zwao~FdHWE~;ijoExlP>Y?6qS_%;C8y=kYH@d4P_8w)e5Nl&fM}lz4<-tuDXQV=_1GTM2&fuB~J;cZzZ?f zS7>SI!xWBkB7ZBRp)l93+OS`~i>Ko&c2`}(KjEdNp?{Csyxh2XBs85RUl%BZ(7fHn z08EVqu$5bx8Vk^TKccc|?`vSo!Z?i`kJPx@yj-I8Lgt6P6m9<)0RQp}&Xj$o&Pip- zlL949!s;9g0L-l}6AT7T`j!Lm<4+d>Xldx9vf4&{dlPP_3qUQo9+?p!fVaDtI>!Qy z$6nEVKYtQ8sSrZ5e6XF`yj%vCR)ARc_Bqd~f&n;gtyD`sxU`}!G8t}NpdKmX%}Iq2 zTIbF^MD2wMttDzNWMpWHdw~&dTsXn?2b&c#WB1^Cc!_)ZQ7Hv~dlQfl%h*8YE~dr; zTz{}RC4{IuT+<*Ry%3|ZOSJ=v}YL3#jne1dx2%+6_ zUx_<5?eS6H-lRUeoi0@%_3cd@w^lOHxr;i-f_lx^J(vtQ?eTHgUc$7;2SDeqH*wUQ zio-&zK;~AL0qFhGjIG?7y$tG+9sRR>y(h|@`5b0^!>aX2q<_K-#I`?SIjX*g4DTds zA%BZY&c+?nBZG6}_$Ry!`!;d5qi zf7=hf4f)sXpX}X#Amwak?YUUuBuF3WEOk~N+~qcS@VjP)`dg_!-@_k2_h!FQr;7v( iRWQ7de|>CpyasJINaK1>aCZOz002ovP6b4+LSTZ7&c9dy diff --git a/public/images/pokemon/icons/variant/3/276_2.png b/public/images/pokemon/icons/variant/3/276_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d7e8a3aa9ca6344e6e3c55efb3d80135def3994d GIT binary patch literal 468 zcmV;_0W1EAP)X00001b5ch_0Itp) z=>Px$j!8s8R9J=WmcL8GKoo$#iimV5wy1Qla1|UxD7sj(IXGD-!9^UUlejqfNB9pE zK@hisTT2JU%~HBZhmIzYr9Y%CD$=QOC`prAgiER}_f5&WBk#NSa>s!}p-?Ck3dMgR zgs_AVR*-MZOiN}QA%qpyGT&md!m~jH#$$$IgnpVI)-rsS3sQM}3EIhSvo9RyR!4CP zmSGqnx6Gt>nOxE>cFT0K6* zQD?lTcbRKENmmbiZjw&1NvGHZU~8wydG6IS-fx*SDz(6JAXz~ngmrZo^TbZ_9bnjA zfJUW8Je_i$BLma7oV1`Vd6`|L`q*Q4GXlW<^BXts+w@zeBj?7wb7f_Ht!(^1Jj;Io zP%kl2(2eX)_I(cO`6U5{_IvopLG`M9ju_i#-BGEPx2`u)l^@o{rqF5cKwX00001b5ch_0Itp) z=>Px$hDk(0R9J=WmcL5^Q5?WOMqrS61h(D56GM)shPH@?rh>-ipe=$RXlN1qC!)o{ zmaumFL!2TK56U4Q1yO1+T@OVz?etmd}4+P`LR`w)PZ*CAu9`}Hla zL!VFO(Tgm&naTig^LWm|)*0DsmPVuD3)bIX0mxbTSaQmOK{?4=uLX>!cPy8)^8Rx& zJ%}u)EGQ)}%NIPI-jiBe0igHY=PR*_*L8ilAiX00001b5ch_0Itp) z=>Px%6G=otR9J=Wma%ISaTLct4I*uk(i9_CFz~LMh@k`_Tu13-H^I$CG#$J77pOQn zxoO13P2v{l(8H``z!}FYj~j_ulUX za^=dED_1T65iufSZ1)u=<$M%`h?w_puBFzp0G|m^oy>Y`=$Hf^wXYv|m@bS1rSro= z8K+hOVAfmXxZR4!ewaJ=cL{=E%GRG1phoHOjSj9?qTBvKz2O7k)G9IDC=grV%zz5_ zcKr)b;@-<8U&wdk>}+qd@zqP&>anY)uaud0izD;&%zz5{eEl*2 zuBU|(<)+TVjvrq={lIf4d)8Ntbrsheeox*d3uh1CZJIeYqJzXYC1g%?-h?v7dnO6^g;d-SM+^0=a z$7~BV5x}{VJpiuWE(7pAJiY#&-TY0xF%#R2(}TwbR7mX%$@OG~uRb^$t7`w7M8s@8 ns+#0@-b^Va|G1tvOD@%4PeJ{r0Dwn)00000NkvXXu0mjfH!mCX literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/3/277_3.png b/public/images/pokemon/icons/variant/3/277_3.png new file mode 100644 index 0000000000000000000000000000000000000000..69ccce9069bce5800465135e2f5c76c3693ec1ce GIT binary patch literal 590 zcmV-U0X00001b5ch_0Itp) z=>Px%2uVaiR9J=WmN94(Q5b-~h7JMKo(VbX5aAyLgF|))r%vM5SOlji(nWA~un^Iq z;v|TL;?Svr76c_Ox``mT>0mdHkfnGSP95U(9OQqz_Acq&CDP@-<=wseU*32Bd;h&a zK|w)5K>>h>7!fg9$CYL^`6LMuF;9EzvA#6IQwi!M4X=r|uJELBhlR&6pGQis%Pdj% zssJ>+CWC0twufbIT)IaP1an#E%Ot2-T6wfg%dheI`wzA{y8zU^s+F50l2tghpvrZ3 zRsrZKhpvoy>G$f3M2Si=;r8KL0pJll-32t231mMYfk3qD@ z*KZ$r+*`BHwOEqIs+_)1T2d{sh?p~#x|MwUIgL4b2q@E0JzgGCel})@wKUdZMH$=odxP8aC?QuKBaR0a- cw@ZQY7l()Q$^I^I1poj507*qoM6N<$f@Vk;aR2}S literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/3/359-mega_2.png b/public/images/pokemon/icons/variant/3/359-mega_2.png new file mode 100644 index 0000000000000000000000000000000000000000..35290c15aa94d73a4ce9030288cf3fd44fb3d875 GIT binary patch literal 358 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4$prX>xB_Vf z1qCg`G89cl-^;va2a8Gn3v-S6k0qvh(i0%9QJ8eQ!FvTz6`Z!$-DD zzMaM2v`V-+cI@`tdcdUoL68m8L${YRl#?F!-%<@`lPx?nGxg=HTSjc$=aoM-EV-`c z{fzNV!9BM}jMhu$+F$6+-NBr{;@VTuGbiI4&)%M6Wu_?#;M0@X{ zbr+Ug%6D}%%WyfQ-S+fZ=cSdY)rX`{KUy@U>s8;T>SMxQp?W*Kc*NgF7N03?XP(79 yt@BfE+RCY4zlzMS`gNmFaJKe7_w9H3pL5o3VrSYWAUOf(R|Zd4KbLh*2~7a_%%0f* literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/3/359-mega_3.png b/public/images/pokemon/icons/variant/3/359-mega_3.png new file mode 100644 index 0000000000000000000000000000000000000000..5a3250b944de9f3b6d69088caa04fefb7f9b89b9 GIT binary patch literal 354 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a-;)%LR^8g zf`US%qIJ8b{X8@4&66s%rk(rx@$~=y|3ky9nt{@sB|(0{3_v~@m^0130u+4U>Eak- z(YtlhL%zcb94)6Ci{Jl0V(qY9?NQREGygWeJ$`U*+;#iubBg{>&~aGlwN!sW1mmRF zkFw8cJuy>ANYk=px_YKz=}zuLQKi{p8+-1U%tHhJ4v_q&W#yo zp9(x!wzF9#z&2x=#x`?*iG@zdHi<{KSvn>?e&P{k=ohf5xXIe}xy|`67rzT{voJcD x@ML!SN$u=v@$y~K)(>OM*8PyII`Vf%+}3WE-sLlbR|5UY;OXk;vd$@?2>?q+oc90# literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/3/359_2.png b/public/images/pokemon/icons/variant/3/359_2.png new file mode 100644 index 0000000000000000000000000000000000000000..0fa229141fda96e09701b071b7123f4f98f6b0de GIT binary patch literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a-;)%LR^8g zf`WpUVREFpU%ONK$tLgbhjLvTrzNgf&GlB24Jgf7666=m@E;1ynPy)B3hwrFaSXBO zy?Xf|-(dp|<_ot{TL1rlB)Q9V*0l{W$5#f$H#=W?{9`}UhU3R>G@dNG8{R$j_lXrM z-zPY@`0V1~F?O4}xVWik@e{q0^Y315Xu3M9q+Cm*_xt9iOy5U>J`z0Z+`4>9=YzO!$yd#Q3^-nwhPhpO5uFaNs4`b>^xd)-mHJMXKQGW%E_YaRKK3G@bor>mdK II;Vst0Qkd+xB_Vf z1qCM|-BNvrd1lu9&J(q!ojbX%aoW58Uq7BcU!?E_sDi5`$S;`TKMd4$ii810cY3-w zhFJ7oy?l_b*?@;R;7yA5-~aOSgtvKJzIEYsk<+7zGXnY^|K~a&_qvvy?RKfXa@afV z#gon`GM3Ai2uiHIxS40F@RZk@|UsSBsfji9)uC0$~-@RV^hduL)4PPbS0zJXt>FVdQ I&MBb@0I|Y^g8%>k literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/3/377_2.png b/public/images/pokemon/icons/variant/3/377_2.png new file mode 100644 index 0000000000000000000000000000000000000000..f90f337c32e6c0f0449d0680b4fcd3c15423e77f GIT binary patch literal 813 zcmV+|1JeA7P)X00001b5ch_0Itp) z=>Px%=Sf6CR9J=WmcL6IVHn3hIVzR5v>i$bF85BQg`OZ-r=}oM=+>!`(6vj^!J$a{ z7eu5(5Q0lqDJGMf5RO9Qq7eiWs5r>oQY4d>CL{>C4(EH`op;HdHCw*R!TaOh@ALgW z&-1=8!U!V_2SNx-2w@HT9OWjPgb>!u@&wAf%CJe^iMv6P+c(FURxjAQ9CNQR3?mV? zx8MA&5cH#?Bw5^81E7@KLQQE<$Xb39GB5yExi%k$SQfhvIX^z*=eM3i4j}#YJ!Z9z zwy+Xtyd`yWC}QW6dEa6_hr+Nh^( zR});>EXnnQESTDQo;P1?9rn#JPmln;O|x%R$I3x%VTE?N>kt?OsiefTdJ*+F2eH~r zZQaf@cUuA5RtYz8HKoyP=&?z;5y@g9g!ORpqhp!d-rb!Ok5bRy{Q%%-d)DrWK)sM< zW_iM?erfX{dm)0wveKFj9kW{J>B~8anY3q(R8W%hqoX9*Tm9|iUQ}{0z+#zqX0?uX zsor?+6vHqQ#Z21jC`n#@zN+3*&L-(r4{-K~O{`DfO91RXISIUR{0LRhO->#r$$)*I zj`vP6t92*u)Re~2_N?bW^+ML8R4KO=slX&c*~`3>P*a-cFd>B1QIg#Ia2J3Fzg|0m z$e{e|rFsCxOgfUqk=u;FWq_?{yWFK+?(+A=jx*kD=uX84kt^l4LhoxoLUYhCjD%pr zQSr~=MqtF!_S$-$8s0YKE~cQC6a@n%?)Qe1c?!0|&4zyMhAC#!$Tf1E-~N6W*r@yc z#4wBmg{))KqRU3GRqH58&zPFh0@Ec7H+s#uVHidtCX00001b5ch_0Itp) z=>Px%(n&-?R9J=WmcdIKK@`S+k&>ECtPzD)kuniP5Tplbaw-%APoBKmqkmS8J$v#h z1ah)LYzPRcViqe}p}|cwtMTCWu)cM7v)SxwbIW&G*m*Pa&G)_cW?+O7Mi>s1QkGK6 z8umV8FPWs2vNp9G`R)wECYgvkLCBq7-!MNl!H(JJiP3dEa9ue}zwscviA&HAvz4N- zz6C(NT1HD}P+<8<$iV=1RPT5{#Io4E$)#cO{qm1P4q)li7tGEr+3D3l>nn{m0GnDa za%w~-sFbqu-5Dy4HkC%3*{m(VVr|d!4a4W$JI=3fqHY1|gYy*%zISjmU{OGHoo1APWWWc^pwaGio&aIPoS~|n-W74yZ(LC@d zRj-yK6__AYLCGy4>E28!WtpuM`EC<{pHFQ?OJ|&U{&-OjptfIpy~ROf-I!Zgru02s2cB4LFP$ENuMN42DX1ky z!9a<_-f)tqU@L4~o%P%>wf!OzBXRz83By2(!xqtXJ)yw4@C)nPp7DCMjM++&oqqo3 z&e14%(QC#HUDp#qhmgBio4mtl9(cz3rArWEKl#Jpwj6q^SpLU(^8Z(YuOTwRu<#G_ W{)z&DMCNq>0000X00004XF*Lt006O% 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%0Dy!50Qvv` z0D$NK0Cg|`0P0`>06Lfe02gqax=}m;000SaNLh0L01FZT01FZU(%pXi0000RbVXQn zQ*UN;cVTj607GSLb9r+hQ*?D?X>TA@Z*OeDr{R1600LM^L_t(oh3(fdXcJK!$MJ6< zLxP~BG#vsdJW4xAq|~Y6-e7_>dj=6IM!~_ci)+EfK}ajQ-kws@(oPakZ_!d(Iz&pq zzzuCN=#mV=b13ii?sBnrmx~tcf4n^MKKZ@(fAjrRkA;6KF+f$HpX12Z%80L+Q0KHOou?darTQuGB>U8^c} zBTMH;n_|A)cjmdv3s~PaDCWz)I@))FahYQ*J99Gyt4S4>&Fg3OKSi$)A8~QuhtV-mO9i`A;sa?n%R@H4>m#U3wsd iTTZX~zy24GqJ9I&kPG7}Is3W*0000X00001b5ch_0Itp) z=>Px%YDq*vR9J=Wm%(e(P#niUbA@@BAY10H4=U6a*~wNYRCd_OW5=W*9(I|3!YU}E z?6QABFFgr`;x2*%nY20>xZY}M%wd>oZS2K@3|8Wyyl2v7Ytn`)*zYAg@_6~=`}@7` zOJJ(0rkb3D5VjD){@Wa$5<=MauP=7x-op!!5_}Z+Yhl5C)8Ark?E+BL5=a;!gk8&| z$oHZntvxoNgyZ9T0Pe=;U68d*iZ|6C#FpnK4=9ANi&_Ez>-Fag_w&6d8~ew^mgm^C znwX|J6Z9F8aR8;NnQhnDXq^G{UF)FWoIU6lHt-us${JZo&r$1 z^WAlII$E&~09apLq?}C$?!`cW5>ED*S9t-nS1%~&b;{W^fQp~N(uWG@ge!Fn<%}1c zQxZ|I2 zrQ~jvYUo|p3k}YZu9mZDl1C?3#*XhilA!X)%J-rwbO&LeUtajryQPjnZXrggW3Urn zVbf}=xuF1h0ZSL14>nq7tgkMrdC%T8IlR%&zgi|m^611D*w}y)a_#550swdE0nDX{ za$N!jIY~nKngNF!j-wDzr8G@*#?Ph*U0yLHgs|IB9)X00001b5ch_0Itp) z=>Px%K1oDDR9J=Wm%WbKKomw#LJG&##8L{Vu3Wl7a_N$i^eOTTJXD%cr$YM_AcRB{ z$r>7E?i{|kb7u?>J@nAqNklRc$@`hr`nRsblaFvj3{9zf>%KKuP1*L6wL zv~m7U4vI+j0>a^NxO(q64oWFp*Ck03wASyMj?vjcfcbo0dOn>_0JyFTki!*gur6$C z2kq3t^RyN(*L8C^tu3bc--nT5I56 z?FK=>cDp4A0<_j7Nm7jM4p;>oh9N*{;M3{EXf(>>cDo(t^BDl&_le`U7MNA*!@^7Q zY%mybKA%}GmjGC3D_du64ho$BFI5;cKY~@fzgchpMOAG`M6$_b(#!Wr=Oh1{JJOf> e{X00001b5ch_0Itp) z=>Px%zez+vR9J=WmoaD)Q5eU6QK1AJN>PiRk3nVg>-Yr)+f|*+8R#DGz$Rw0l*7?DVql3C?KVp z-PGf7Xic+#Wi@cz4#iw10KSiBq<;Iw4)LFq-a7c}Jq2Z&1xioKf#0Gi7NC?eRjr=_ z!ISLn9W%c8sPFufS4VNS0}`B|lrnYFzNA_|)sW+hkLd0lUpvolny`VcQ{p-(gy=oJ ze+TeNOnU2p%aw&duK8h<)4{8eQB87l5ID!}@bI3XdH$JiAF}+IctHF88@_z}N~?82 zt98Nj)Fj#Q+Z66j@baBYw)C7&=WpqDyDy^b6)VI-h@KFlXY9QOpqR^0vzt_mJY&sW zz$-V7+hKZYlIf{QJ-1pvMM{}Ev$vTsmLu21$Yn;=K+9_2tSmq-6KS3@RXC(G#xk(o zx70)e^cQG=)g^=ZbGMr@T2$m70ijmhjsPp$%NwOCo zM*>XTuu3UY`=B9-qJg*sT@} z@tXvKhG{u%YIgI=TSEvDsf+n1fC|8WJzt* literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/3/379_3.png b/public/images/pokemon/icons/variant/3/379_3.png new file mode 100644 index 0000000000000000000000000000000000000000..acb86b4f66553f2182f75a2bb6b17c630cf6c6b6 GIT binary patch literal 714 zcmV;*0yX`KP)X00001b5ch_0Itp) z=>Px%gh@m}R9J=Wm$7OpK@^7n)eBx$B)!$xDI^3GU%?TMYzwfjbO8lkj7^S zDJ)V<6Rd9G3y6ZG&~8souz+h5H#`DrPfp(^GX2?vN z)ToVTHUMC;*#Q9f?+ToDfPU*OwI?fNE(_eS^p1M?6XThUP9r*kyS>UM;8MJ4rSeo) zKTP3x)52h4ClR960ZyvZhyWmY06<)ST^wSRmqvgpkkn{>h}6fc?KC2cXEqj_9d57k zdsvYckBr4Skj7X1H+6@-PuFAwJBEfmNp}GT?~`47v>P~8Y<3G8_?*A8DlYHEcSgLfUuU) z+J;+>;IxBeZn4?nx)>h85s_7KmI!!F+Y_|`r3VJQh8OQa`=Purm%yp>x{z8vcrfS! zFcDr?ah3o8-m(DX;o=ZQw;UyKDws?S6KNZ@GmU|L1E9WF9SC?<&7)tHCM|N1@7GW1 zX0)!Dh^z!ifs>Uym=sc-jFdX3<}Lv3LOF}g0BIYMa?25ZCTIJ00MZ>c wt#%l#?W4B_)9hlt1yBO0zt8yrbx{`m0pVIz!)^Nz5&!@I07*qoM6N<$f|r9uX#fBK literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/3/427_2.png b/public/images/pokemon/icons/variant/3/427_2.png deleted file mode 100644 index ceaf11acb480a405c269216b5c1cf44c965b376b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 575 zcmV-F0>J%=P)X00001b5ch_0Itp) z=>Px$`AI}UR9J=Wma%KwKorJ*Zo5>S3=&jX3dM`(Th$ImgCX(K*|UfK3xVPq4Baw2 zv*$u_10t9V!GsPz4_&;Jf``;l2}}d^(vZubp5nNM)VfR3g1<$l_c-ah_ulvJ!3G;_ z@PDI_ccbh0O0SdoH1~II!h<}UT*p^&y+$Mg;(F~GS=(6q+vkD=BVQN{Am%5#=IsJVQ>-XuN*~q&4|Zqa)R*Uu24Fd}J3BqE?H2WXOd z{Mt=E17;#IzKa3mX00001b5ch_0Itp) z=>Px${YgYYR9J=Wm$6G6K@`Tni>ZWQC1kDMG+G~`DUN`RAlM$UFlDehY____!USUB zouF%B{(%rUuDB#{a3BY=3Ua&Kip@-OT1fta1fIn)<9KPZJ9~J+`&GO9nAvaNzW420 zV8Vn6|2KuK3yFyJu~I7YJ|lsMn3*|_`^?O2i+ysmxM4;m@O^;*#G$adpvLyFRNv5?3tFnV6Ik zLJ0oXSMHQSohe(KO>uP*weZ&E7MRMqkce1HiHl!<$F|>i*!%buzyAP!$%E&;GBF`U zs)ljOpthS~PNxU2RA=yg5CM3wr8GFzpl*bf#!qz1>i__MVIaKHmiV^w1sl6t03IGD zt=%|zldi#}6PY>;)&ypktC)W~IKMuNaCiARvky9(r`^R#CwdeMYh?g#CY_7B6A|Z` zH5+H6))}X00001b5ch_0Itp) z=>Px%l1W5CR9J=Wmm!ZDK^TUgX_}L5&TQ@y45phitN=^!)L<}(3dEk_2Q>W!n5O2; ztyqbrkiGJ6_|np z3c+nUQAYJP-RTT~u@cWw_mh}yY|tx~;`W1WK%(>WmQxf(RD zWY{73`GwCPt9q_CN~zskA%ejAQL1UA@9X`vD4>k`K2hJlgDX39FH*vu%eULFOAEZ# z03k9X;&BY1<_SRL*HlUk?e03Q0u;5kSto`)SJe$+*C$&D zQcFCJNt&)s{W?8VgJz9b&sJUbj1y!57M2~rY6`szm`&r2vaBdW@=Qgx84En>`*1zi z5LT_09m^dPQu@Ab7{F?_cpU2t?FtBXVQ0ak%cW!Qo_$ZRGcOvdZUGB&7eEWvabD?{ zlcQ4&xwu@ciX+WNyf4lB0Mu|NN2dV%{_~63?E9uM@|m#oe0RP~wrhHO*+gsS?JdRT zMHPx4X{)sLjXEbGfj0DEbR$+Dz7le4i))0000< KMNUMnLSTYf^-}Wy diff --git a/public/images/pokemon/icons/variant/3/428_2.png b/public/images/pokemon/icons/variant/3/428_2.png deleted file mode 100644 index 5b325f3256aa678f60d9087f9e41703b53342157..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 576 zcmV-G0>AxX00001b5ch_0Itp) z=>Px$`bk7VR9J=WmOXCUFc^j(3f+aSy+M{N79cI2v~~-OEFA>~f-ewv@|Ik{2rPKa z5(Mc9>MY6N0Me4h#|V0XvV%ohR3t-xNQU|a49l-5^6~reM{v|pNBy5t6~D{gAaXi9 zqm-1e2U6*^B)zsh1_JH^Sd_}a0PtN0K>4nNN|!JIWM@Dnr3PYpwKBf%I&97(f-oKg zvTuS$8gg?US^iK-wv|#+DkY`zT}P>Ox%)18<|Ae2IoWBE=+XvvD>mz!>Q+f+F0<`h zhhe%)rQ?Z}QdN4!>zQKP1XVho)ZVO2w2)+JdupUFO~C*(-1POq0@e~kcG%p!uj)w_0WQygrY3Bnj51OVCZ?unJv1W3Hc-*pu1%BeNIT4^xdw?4b=fs>>W zLmNQY|7$_MA1+SM>~v>Q8L|?v1X|0{7SMv#iH=Ub8nd|72=Bt2&4+XdvezOhCI|M3 zk<4#dejmT{+p153ke57vAs`527PE-#d5fI?FkW4P+4jxM=ehyX00001b5ch_0Itp) z=>Px%W=TXrR9J=Wmp^C|Q5?s=kwcMCN@>I*w7fRW?&?qoI>f~xB1H(K4k-ocP;ju> z-0Gm4TW^W*I!MLgh7z%G;?SioZK1<6>7!i&27+V~4$dLG*SqW0=KZlc_+8%R?w6O( z{eJKJdoRF${UaiTgklueHgv_tB!rOgXuBjwo3a8ZB;fi^9=5V*44BMXVeu!r%~{iF zrL+K}>+NW}ggbAG@)=vdhUt4vaLzM-1u(ka07$sx7>ze6w^jxZwmkHmJSG;_V)q5y z#KM{cGc}DC;Nth!7sm9RJZv~x36KyH_MQBNag4g~R}OKo>j4;Xa^;J~IchO~^P#xa|0DOIZ8^FNn&P-9p>%b~E>S#$3Y0LtOQ5VaV zRp9>Mer~RWZuI-`LzU8NmpIy#y=)ouGl!QgV{B?tI$MllJN)qQqw?=419HwYLED#b z0>aCd&%_ogwKI@^9B>##vnaGv_3_}4sXB7}rtYe_mYZQOrzD;9I<`d#Y~FED%ei4maDd2pDL1#SOwORFLqrTqn-oh&?J SHQwO>0000X00001b5ch_0Itp) z=>Px%bV)=(R9J=Wmp^C|Q5?rV@efs;Dy1$hJVcBYjMzv8Y1{&FmV=N%0!lLEz(sT^ zghCesZq1OQv<^Zs2{<@JiU=)O2U{_VR6(9(5lMBD#6iyCyvya1+TObhcJK?~cbEKf z?~~vAec#K2|Jo-KLKs%Gu7l8lARZ!wFvj0+*fB^20%*yCYo;>0}&Jcv7Jpl?KjAlBsYhJEaW;hl_zIwykdnIOsu?aaPd{ z2PWW7Kq}Sq3<#Yy&&%maCPy znn?x%2RO( z$iNrsep3qAQ0C(NjMLNR`;o~o{K*HX7Iec4q_T^hi*h?vq4e}K?No*AXvB856|L>? zN%*kmaXbS`DMQtQZo^p+?Np^Fx0uj+AO{Y(7dfkF>B0Hq9K4bB+=EJhQp!+18E59l zCjhDiy>A26iX>XjfrU2y)y!c%NLniTvr`p guyR*;Un&T=-`;jK6^d*66aWAK07*qoM6N<$g3L=v)c^nh diff --git a/public/images/pokemon/icons/variant/3/429_3.png b/public/images/pokemon/icons/variant/3/429_3.png deleted file mode 100644 index bb9b2384514dae857194a96ae362d4af3ff67f80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 680 zcmV;Z0$2TsP)X00001b5ch_0Itp) z=>Px%Vo5|nR9J=Wmp^C|Q5?rV5fP~csewRJ3Qw>^I~3Z@T!tf}PEruEWD%Xj40TE% z?kNe<$w;Ayn}`l2NI{W=A~uuQMF^ovA1$d<%^=i2%Q=L1m*f)L`%|02FC4$)-Q(_a z-}ipM9}oU(NF;RxPq${qb8Wzm;V&- z=jXQv&e4NSyuyJ)Kp}*o2b%}Z%N43DE-%okuW&nl(R9=e;7KQN?In$pD^y9wC)rrv zVMd#E~FkP-Sgz+!L6Rr(S&Oi6mF3c7f#zRjyUO`vM0Z z9E7%urMVF^Io9^ZS&EEtcemvWoM%9=Ai>Jwd^X`aDSGAE!KKI;&wqU~$MV?(;pA%` zgwFBo%vr$OQoGuNs?X}dCe!yrM7BqH`r$W`?NI>UXtO{&(@S$B=6pBZ#BrhSUQ%mZ zL8;$;pJO*9Dm0#pp-I@ zF7KOg3PMYTZFBS4gbnh@0S}{27nQ;{9y5FMk>iAM1t_Hq#4-&|U$_cDy1d^v0xT{s z5X&?;f9Z;Ewee8uJ!1BY-#$J(-UHO%N{9M^)%mI6JII6G;h~ftaDM=-JWH3aFX`F< O0000_K>!3d|ptpv31X<8(jQFFTR;FzZ4W`t?78@w480#&+-XZ8kCE; z;~JQQetkMrgoS!OC}@+Up5sw{W=WVG()#3{co-j%*Q_jz@Fm&zvT zcY8lx_}2Wf>@WNDzn#;>^j60KLz*u&!ZXd+mq822<^W<4xD-4YM0vXUxvX^!ZS|Ns9N7Z(Qw1t};f0NFCrLgoV1^OOYn1p~P-z#w%0+&Q2)XMsm#F#`j) zFbFd;%$g$s6#VDu;uvDl+dJiARkMPGvp>tmy6XSox!Qec;<3?=cfNT2?DKrW|EjzA zdch=X{$tN>E(liO4ij>6IsWMgpNMjJC$#*G%OpNLBP`xL)U0-BdAMZ|4os z@JQ>!8u1BpPpVuyd+zuw?~ZJhP8YW&e#)w4 zS>3}_(AnR>n0?2jqFf{|n4u|P)vSBpJ{}WtI&pM;rd)&1nMrA0w>Pt0F<{nsbHXh7 z|C+J`;_|n``3~&;^fLYwf8?LA2CvIge1Rdsmm1-j=IhI#1!QvoF$i1=o(!TqUHx3v IIVCg!08#(5;{X5v diff --git a/public/images/pokemon/icons/variant/4/390_2.png b/public/images/pokemon/icons/variant/4/390_2.png new file mode 100644 index 0000000000000000000000000000000000000000..f29d3561210260686e3f9f2c0017dcffbe6c753d GIT binary patch literal 760 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 Hu0mjfGx}Gq literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/4/392_2.png b/public/images/pokemon/icons/variant/4/392_2.png new file mode 100644 index 0000000000000000000000000000000000000000..0550a20e94df93dbf9a16e3100a0f78f67a054de GIT binary patch literal 934 zcmV;X16lluP)X00001b5ch_0Itp) z=>Px&U`a$lR9J=WmrqC(Q5?rVn?`NaMulOl)l1FX$U1C)3^Oatg@~+!WS2k)1_@-r zuv4c%DmpAd$VL=&GPVvv6uXImvSe6?N*b}usWy^83NIoS(_x$E%(|;P<8}$Zr}_Qf zm?h4sm;Af7-ROfdk0518AraH(!BQM}Gk2+-hHm z!Zg1dUrIQDC$--p>>LhYi4(wHHG(oQ4ZyATm9(`sB?EWvmUB)N_fj9I#;bH$!0f<* z!wecS!vVClHgT=}E{|?Mran+@0fYG~Hk}+5$*}rp&N&Bt4b%s!c^!F1zh~MJm?2vk z6hi2$lsai|Y`7qwzeKLjf~zU;&_6YvaV@i*=_MR*@y3P=tgqT+u?hzKkdBHZ6%LSguNt8%+Q+Vj!-S);S(!-(H!}JyW2~$*D1^}81xq;+ z>SMi$lIkzSO|Kf^S2zfO8c%S3AUSP}Nt8hHYD!l$^C{~p)-=sE7n}j6#uHTBdm!O7 zO>-H=@Ge+NrSREmXdU11<^vDVcKIY?=RUMIFL-$8h4dS6wPh9DIF>vfM?zoe*VL?H zFX&r5IQ)To_mf|fy3?15-M=K^Mn=C`ilG~Hb@g(5RYi!2UyS|jE9Z-mla3l@x@z+! z+!|`3%y(RlRZc9WroaQh)v57+*AJSZQhm*<-{bQoxALs_6nJLFY6?7Dof_xjvULjy zyD$kM^p0(Qy>abUyOaK4?07*qo IM6N<$f*R+wga7~l literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/4/392_3.png b/public/images/pokemon/icons/variant/4/392_3.png new file mode 100644 index 0000000000000000000000000000000000000000..7a66926b5338913a9046956109da96332ce264af GIT binary patch literal 938 zcmV;b16BNqP)X00001b5ch_0Itp) z=>Px&WJyFpR9J=WmrZCBTNKBC5fOr7(4u{`(%!0z&LWG}+V>E(ZTujDMO;WWQlUx( z-6#*-i4S=q)P>!cg(!%)u!>(4F&kTBR5Y#WB4Av!W(-)WwUuflBF}eS40D}n5}ip~ z1?eA#+>bN&{&Ma;CnqqcIsIl5LdajuP*g$)dHd!EDTGi@F}v^0TjiN95P+`h9wCH0 z)0ND#Ie5sAuInD_J6CU{snrZNf9*=!{Iq34ncgxzX12|ze^AN~pZ=HqgVN^FspCJ| z&lR~4LRK{$AQKH^dTV+0B5F0s{m4gKAK-b)!<(1cf@@9nY%$Gq188b8R|dew;6iFO z$@TU|-d<_3!2xUyHcShyWWb4dfVWp#0Jz@XNZU!H{p{3QWm8qX7Jo3r?)}X+FgI`j z^Gg9VWrYK1JK4g;_C^lfmH2}p8yHYhFt~m}2qDwaUEj4?+SrRf7{d2{5y`>MX+^0k z4+ME5@^!ONH+`-hy0FhXN;D&nsT2-SqH@ydtdv(WA@Hhta*Bw#)2anF%(nvDW zt=gx%&l22FPb8KAP>=v_;lO2(Ja}{-pLZOe_uKJI=E_Ko43NFlW*EKfLJK`3H8P;y zGw+;n?Bg?^sEq|XrO%sxSA;-n6%9g0IYP-#ej-y!D zbx)y)oXnLm5f1& z^{a6cℜSzWYX7t7zce>!-61>18Gi-<003UyT-^Ww00DDSM?wIu&K&6g00H?)L_t(oh3%HHYui8+ z#(!?RRGkbGR9Onei|1R_4n~6^@zU9|hyDwJ;u;LyGCQ;9LU98km<+*$4n7ZEyp)26 z)KCdb1NG97%b=d(xQ5iaOVWbBMW^>T>AUyd_wK<48*K1@qkoWhqwDxeuao&S_jhi> zgFKsD$5(N^MkE5_dhHrn+gSVLn%pwHZtqqinJa>;5Fa;hC6a3sOy<*q*X;oy$1?!- zqlsNs3$P-R!@-b?!?yrbTUV*RDf=J_BYVF}{ldVe`)qofBPcinP>E5?EnA&50qc`gDD6|ah3%61p`IEfFanwLI@;S;1OBO zz`%D9gc)~C%zg_L-0tb(7-CWHe|OSBzQYC_&aw+k{{KJPyk@SOLge|+OILkPN)h?e z{wrM|;%<+f)K*r>9FuTgF@@l$9a4C2)i1Kvxb6Mw<&;$T(eTnG+ diff --git a/public/images/pokemon/icons/variant/4/427_3.png b/public/images/pokemon/icons/variant/4/427_3.png index a3f90ea6dfaf903b680bad10c41f8120750ea52d..5972f5e94898f8fc0f99d74109ec22005dff0e8d 100644 GIT binary patch delta 565 zcmV-50?PgK0>cE58Gi-<003UyT-^Ww00DDSM?wIu&K&6g00I3;L_t(oh3%KIOB_KI z#=ncHgkU9Pt==?RAEGIafQ=y79jYhnI@5IC;5Byeyb2eJxs zyW5J*OmkXD{(=Oa#WCY}X|g+ec)|NsyZe~gZ{NQ6?OR~NgntSDH-)SViHP;FQY!O4 zBY}vRnK_R8%*nOdMysvv{_03^u`0O0uGd%mhHa%qyr zhX4mNuK@sIt!$cRY#ND(xcBJ?ZyxnbEfNv$Uor1rvALe51ahlEoxzgd013{3=rK>O^;*#G$adpvLyFRNv5?3tFnV6IkLJ0oXSMHQSohe(KO>uP* zweZ&E7MRMqkce1HiHl!<$F|>i*!%buzyAP!$%E&;GBF`Us)ljOpthS~PNxU2RA=yg z5CM3wr8GFzpl*bf#!qz1>i__MVIaKHmiV^w1sl6t0Dm4HCav8#d6TZeq!XDs4Aul@ zm#dh6J2<~Si*R@OIkOKso2T8yNhf*~3u|QnZYG_JyAu)TnKc_{qt+R;+1TB}>~eJ^ z!$WF_h?m}-nAtFn`yA9;<})`oB8Lg;E#5rpJ-tXG;yCWJEi$OLIHT|NqaOd)jm3fAr)tXIi$HhRp;@a=vN>so^LI@(Ttk00D-3&3hw3QUxB7#S9F5 zhd`K7RKu$QD7ekj#WBRf|L!F3dZEJx9L`78fBZAo+mX3UVoq9YuF=H#M>`CUIsY~0 zc$1eVe`Jf|WL~bXDa>BpX~u4^g$+*0tje1f_I2B234x0}W(%s86wk>P70^;L+v&1y zLAr0i7daN+3At)@^6MU08>VT0l+`He5J>t_o82+Japf(k!aDuR?EB|8xr8&ii^n|A z5|W+b6?S-r#i}{~IK<3z0 lpTc;cANW!uJkxxA8MJ_G4j=}BOTm*tl&7no%Q~loCICwuhNb`j diff --git a/public/images/pokemon/icons/variant/4/428-mega_2.png b/public/images/pokemon/icons/variant/4/428-mega_2.png index 43dfa05d4389c6d1e2d64ec1bfcdea391a6958ff..32c3293a796f0b810192dca0df468dcb3ba331d9 100644 GIT binary patch delta 715 zcmV;+0yO>41K0(S8Gi-<003UyT-^Ww00DDSM?wIu&K&6g00NRpL_t(oh3%Iij~YQ3 zhM#GglWopy?h*{9n=`BcOYqcSFo+7op5X^H{RNn&=FF{FiMgb~9Evt=&hCn>AzM*I zFKL6p*G$DSb2H1qvA|s`c-8JO!}suh-#0VBK?fbQcgd#=_J6G4d?|e&mLX+sEdRc> ziUMZQZAdAjOJsDZ!KCl!=R7SSKvZvQIHgLdp}>eIb1J0<>3J^pn7(!008h> z1Cpkz-@DTp$*^NO`y_xs=8ma6oHt5IhMjGhENufQYByH^Bu&?XizjouQObum@9|m# zy}+zb3c6Xii+=$b^?kfisv#AaO6$uP!O}uipGBKT6oHHCZFqf5_afC`-RVp_m`|rkiGJ6_|np3c+nUQAYJP-RTT~u@cWw_mh}yY|tx~;`W1WK%(>WmQxqliouVmOE`T2#E>cT8j!BxXPW?JPRD))X zSkG2n_J52MWC0eI9l&Y|y$hI4kRD*2zFs-!K2HiWAC1QPp>mC8mevq3vw4g3)XR7>6eqEQw_PeT&#*C%|^U0 z&HDh15#WiL4LtNK?q>jbVlbqP?WR4 zBeIx*f$ty)Gwzs}{T65;muJ0;V~Bb#XU7oO;M{=Fh8H9Hqe~&Tjn^Y@SQnZVND~UdO^S-Sb>){XDzZ zT2F${KmVm|(#ak?@6&gsG?B2+h3Zq2+U(QjNB`X>a7t#H(*_ZtUB~9Zz|Ic8V8)Nr#d)dC;b+6@TIV&8V8#Z@0Ftqqm eBRtc5eHpZXYz`m>flI-YL6oPfpUXO@geCx45V%wT diff --git a/public/images/pokemon/icons/variant/4/428_2.png b/public/images/pokemon/icons/variant/4/428_2.png index 1e42720c78b97a695980cf888d7b0fee9b76fcbf..5b325f3256aa678f60d9087f9e41703b53342157 100644 GIT binary patch delta 562 zcmV-20?qxN1Hc538Gi-<003UyT-^Ww00DDSM?wIu&K&6g00H_*L_t(oh3%F-Zrd;z zh93&ug|59pmMj(^EuOS?3ydrs1qOmI5O?yHT)+q{c+3(6=?UsA$>0FelEudedV#Wo zMOsuOLw`ty`UMQjuPE~I`|(F`)KN$MpHdaS%ibVzIy|G4lz*@XQt7oMy|z6D0`3A> zl*+*X@LdN$`L2UXmoNZiXFw&T24Z@(GQRIRY|bNsFdhW5Z-Pb|a&sP8{!mG_l~PhF zC8hFRN2zqV`!0FrBW33~*=dpJ(gt@cHtU<}R!L?qv+Y}lVY*ADe~kcG z%p!uj)w_0WQygrY3Bnj51OVCZ?unJv1W3Hc-*pu1%BeNIT4^xdw?4b=fq#>v5knh5*#B!mz8@}5&+K$( zQ5mulumoDm(H78x)rpQyz8bT*)d=sxoXv-H2(s5ADJBQ@iIL22S$-eC^V_OVf{>Ry ze<2_UV-~ZB?0Jiv|1e%%g4y=X%;&lR`ff7<5W>442xDW)Zzm-4TY%b?4EEIc2<^}4 z{9LB+hAUn4D(-(AB)ipJ1z-Vx23%2}4sev#Klbh&Q$#yorT_o{07*qoM6N<$f?XH` AumAu6 delta 399 zcmX@WGLLzJWIZzj14AbBn)g78u{g-xiDBJ2nU_EgOS+@4BLl<6e(pbstU$h8fKP}k zkggZ@^tUgPSmOX3ulhiNJRGP6qXVXartyGb}+D9hErX85m8n7a=zVE(D zh|AX-&Re8xezU*W&vYp%J?7h#^mBqr6GZ3E(8{{MxLZ_9;aW(S{T&CM{;M88LnfW? zjajH3`Y_4<*^5Tm?{yybzfW@{Rg^w(-LXr#Vuopw#1ZF+*U~!g6cs$>|IPqPx%W=TXrR9J=Wmp^C|Q5?s=kwcMCN@>I* zw7fRW?&?qoI>f~xB1H(K4k-ocP;ju>-0Gm4TW^W*I!MLgh7z%G;?SioZK1<6>7!i& z27+V~4$dLG*SqW0=KZlc_+8%R?w6O({eJKJdoRF${UaiTgnwcb*EV#;#w3K0@Myav zN1L(&C?w$eP9CoXLe+4kQ z-T+9rj6!@K+9Tuz%$tSNbM1sslLmLMDWSqNI$v7@L{|0OaQ4Sz^>hp;Alz+-cO6&Eu#9 zr>Xm;DX)9SC$VQqSRE<7O*D&1IA8#H9*|D{OsSMAe`Fv;@uRaD1!(Pf`d9p422 ze0_c!z`*IwOi{+`z$!QDXh{)i%mRv07t57Z;Qru#ZmxuG^!xBbmC|dMINFrGY#H=3 zhnFp5Y=3G}I$MllJN)qQqw?=419HwYLED#b0>aCd&%_ogwKI@^9B>##vnaGv_3_}< zRb^*u0dmeWokkt&H=Y3ig0`PJ0)W4Ah)$z!^>4sXB7}rtYe_mYZQOrzD;9I<`d#Y~ vFED%ei4maDd2pDL1#SOwORFLqrTqn-oh&?JH4fh400000NkvXXu0mjfjpjea delta 588 zcmV-S0<-^*fBYy%bNklBI=RW@08(JQZ^)%DuVoEp2l@pcVU@ zll#HV@1Aqdx%UD8^+ZHOEUoS0~Wn@c{;?0 z{;un?N>+gSd7F-QaCtgZW6dza`t})w5T!=})Xy6L1y{8Ce3x)rhq%|6VYolf^+~wl z{#=2%CXE$f(M!wJYs}yyqm2NGh8tXn4dBWLnTS}1G)*!Dt?Hd{ z`k3C1;<9n_cz>;fX_EcZzH1|^%4j#b7nkWiARF%ihJe7L2Hpp%D~ihiU|koji>XYQ zWgbhD3}1e|b^?=fI)fW;N4ayCCK=Ks!@JMFy}&t(hDQS_pL76*Z=pq$nmffwazIy(o9u z6`Y(4blMdJt*SbU#haxWM#leR3@C&sMR8fdNeJCzQaY@yyxzr9%fNiUv>y}^F;BXx z{*C+foJAdkH6Hit%#$wr{uDI=)W1)PmM7iZ92;4OSO`&C-#*K=bt|>X>-$ku^zf6E a54am~M=k69kGY`$0000Px%bV)=(R9J=Wmp^C|Q5?rV@efs;Dy1$h zJVcBYjMzv8Y1{&FmV=N%0!lLEz(sT^ghCesZq1OQv<^Zs2{<@JiU=)O2U{_VR6(9( z5lMBD#6iyCyvya1+TObhcJK?~cbEKf?~~vAec#K2|Jo-KLVp-mw625Dfgm0tgfPb6 zZ`d(N1p;Wvf@`KT1XV@ffbObIEv|FnZr1N({mI#HvDUWn==Db<*4nmT|Fj34{RVLJ z-8cG0XTBfckP6_hhb6wRZBR^TJLct+alq`$#zYh;rRT9gu?Odlo!m92na&V|qdfr% zA&h1^vuj?iR)1zV7Dc{#!`pi$W|vo#UA^bB3n7fz(G3SC;7&j))$6_yV)!YpXjlc7j~3+y$1amARTp1_B2@Dt`!O6|dcyx6LuKw7{x9#FhD< zfx!6&gbpNhTwF|O%BFD3*D@o7Fjn;;&N`NtVnXBkrBi$u`@&;PL-_$!0<@gmOlNpG zt#Rx2Ip)?{%*2jDLZfm23}8CFzPUxUpxe91z!&O%QwrEn=HmQ})6?erk;yRp$p@$w zbi)gzvVV)6i*h?vq4e}K?No*AXvB856|L>?N%*kmaXbS`DMQtQZo^p+?Np^Fx0uj+ zAO{Y(7dfkF>B0Hq9K4bB+=EJhQp!+18E59lCjhDiy>A26iX>XjfrU2y)y!c%NLniTvr`pupDw%cwZ_AxZmD(G!=?#`V;^F002ov JPDHLkV1kI{NgDtF delta 582 zcmV-M0=fOV1>OXZBYy%VNkl2fXTqh=^)A%FiM6Cd48{RIgugHHK6WKq(1VCK*Dx=zk4px+caG^bT_0WtE%& z^>|yq;t=CWb8l-C*Bdc}5S?cM)Z-0+f-^^bzRz|$Z*iGqxH}und?(@V&ISt1H))&z zO_$nKCK*Cxv=tx`)n$_XcV1O+l_;0r2g*?wz=Z>uh-$f|Rl(6^@q=*sJ^eaLbL->@ zS_i9w&s{(CB7cj@>TPrv+w>Tai+g}2Akfsn$3S&O>AzTXt&7gZR3=QDV^zVia(?Os zCgl}_Z`W35;;t$>Y+|gzKaC z0GdpvG*?~37SNvNve*k;E-ulbE$k|@n<8%XCY){FA6Kf>VWFAV!5bXlxo z(d;a=wQ2nvYd|4HCrWb#Cn1LY(cD}e)>T1!u~ZwF>q*<~Jb3S-+%nnD%n<;32RWiN z5BfJ?AwLmO&8D~NINvt1>FvxM7dh8KAw&lo@m%>ZT@vF7BG-pJrA&ukq(Z>`1+j`F UOe49kc>n+a07*qoM6N<$f;qht&;S4c diff --git a/public/images/pokemon/icons/variant/4/429_3.png b/public/images/pokemon/icons/variant/4/429_3.png index 48f7068ced82ffc0748886e2b5185089ea76fb74..bb9b2384514dae857194a96ae362d4af3ff67f80 100644 GIT binary patch delta 657 zcmV;C0&e}&1gHg&BYyw^b5ch_0Itp)=>Px%Vo5|nR9J=Wmp^C|Q5?rV5fP~csewRJ z3Qw>^I~3Z@T!tf}PEruEWD%Xj40TE%?kNe<$w;Ayn}`l2NI{W=A~uuQMF^ovA1$d< z%^=i2%Q=L1m*f)L`%|02FC4$)-Q(_a-}ipM9}oU(NF;)t$YWh%A%wA2ub7ZuU)`f$?40if z*wr3v)mPAiO=`tx*SLbK6{9AY+L!+n@aN~Z2hP!hO}xT^LqH*fp$D4>&dU|5EG{q5 zs;_W6e$jN)4S(QCCvfd0jgl)=NyaDHSl?kro3O#$;pJO*9Dm0#pp-I@F7KOg3PMYTZFBS4gbnh@0S}{27nQ;{ z9y5FMk>iAM1t_Hq#4-&|U$_cDy1d^v0xT{s5X&?;f9Z;Ewee8uJ!1BY-#$J(-UHO% rN{9M^)%mI6JII6G;h~ftaDM=-JWH3aFX`F<015yANkvXXu0mjf2V+1g delta 571 zcmV-B0>u5O1=9qOBYy%KNklWCh$KfouZ@UE%G>W!ji%oH%G8Sh;AVCS0O)s`sDDisIct2R$=G-nOF^k{ z48_N@b}H42;L+S^@J}DpJ4GL{&II z6Of2xzteoOo$JT=^mzgRc>m7MGFk?3LkEt#)b(S8f%70-7&uE=P9{TGb|i%m4IMzE zKIr=K()B|>vVW?y{zlDWksbrG>-q>04N0qlmKM$gel6H>&N)= z?N24J$|559;p-3S47xH+#xhOD(iwE6Gw8~*-+$||q9LLMFd~u{`+N0(V=<%(nkHjo zkd?*<5y_7`Eu6mom)#2k2d%whc-vbz+q^gRD&ufvqkqnW0r%ys7aZa0?FmkPrtr46 z007fB7J&Iox9lj(rY@{DV7{WT7|Qiygpq@u@{DRpy49p~B~eXzH1%+GEijsT2m>br z&sUaK`%wEk+JHichGjDtBO<3@%2bDqmR*=-XO zK5wQ?tiRTkU{8J-HMS!XJM%Qw_#R^GJgdun{ZQ_09)rzcUzd9qdTLHQ`*Mxi!rSgH zrgPSui+U*YSK2mi_3rR)3mE|$zv*Y=?IwAxVc)W`IP!bitm{QDzZ908ZQ|c?XUVJm u{JY**74F)s?81F|?Ox_PcT@JSQ9tj__IC4@&!#|sF?hQAxvX?-oBv(N;&@Lq%45_wN1w|G$iQh`(vy^yovz9=Ck?;$N{YUC6q=uYSe_ptl%2UHx3vIVCg!0JdS6od5s; literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/4/455_2.png b/public/images/pokemon/icons/variant/4/455_2.png new file mode 100644 index 0000000000000000000000000000000000000000..206ba13205f6c4280baa86276dd5a0e6ca868514 GIT binary patch literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a#R9*LR^8g zf`Wpvv2l5@p_8WMX0N6f4XbNngLlmBd4F@)|NsA+(h}~zi46m)<0%R93uXWc!2sux z05zcaUQZXt5R2Zsmv8g6DDbcZERWIo^#A{E=k9mSN-6T&+h)vod_n5Yw*7hu7hg(= zv|c?kQFOKB`!!QvcnjZMIcts4q~+FpUrz+8t+JNTIUoB;GHK=g1D|BteI$6owncc$ z>|nd8ocJ}HrMOH|@@kmGxx@)4RWlw~9pBM=S(#N!sjAlD^$RuO2}0j$#rHk=`IB$^ zvY_7{dY%{mGPmB}QN3-JjM5QP&*`e)?#3r7@F;!0+|6)ms(sVqWKOBLR{QJhivrk0 U@*iBk4D<+tr>mdKI;Vst049BmHvj+t literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/4/455_3.png b/public/images/pokemon/icons/variant/4/455_3.png new file mode 100644 index 0000000000000000000000000000000000000000..199976e2f674eb2fd76d2b2572fbcdec46842616 GIT binary patch literal 331 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a#R9*LR^8g zf`Wpvv9UvT3a^@)d1F_}-LooQu1>yrX_X8A|NpOR;J57c>Qg{*?YcV$pl|@@>8r1s;}w$SZ{fQuXRR@swA`BS>xn?MRn`(Z=VL!fCat`G;FCX00001b5ch_0Itp) z=>Px&eMv+?R9J=WmrrODc@)P#6ZT+xD6}aADqVhENK5H@$fhkl^&;!S>ct8o7}ASu z@UXi9*{ak~muyi2vSAgLLKjKN!He-^ZzAMW65B#cSk@jgFdzi_2X#A zO=6o{-(_ar{NC^P`F(%yy=36nj_uf5V@fGoDP^~Moi9EoNGW9(WBmY(%we0RX?S5x z(=-l`2fo9=-QJ0kUn`@OvU8y}im`rjp*F_f`#CCgKTAP@yMF63&xidKW5e3tJK9Se zi#Tmeum|Z?xEXbuQqZX$K^z8{%;>4N+#I8A=7On$9Q^vkeajP+}Un^E^bKq-P+ zlUW6e2j?<$&V0+vyAA-H;J0_81Ve)W-1>T$dsqDcEIxd(x3MN5YaX#zsgXHsfbsYK zsC=D$XB8~c%k7*#QKlFh#wu9!d~a|qxkWteju9}48!i1r zfj{`~(eGM4flDv9?*;jG8v?9(!~&N}7(9F1$F)DV0C=_dy5?9>%_>-|mnuZ(!#p^b z(PQLj1um5^Seou`=$NYjP17_cR(Hu{yIlVDQbkWL3q|L{td}ZS1q-WS)mux)1570w ztCK1~rIanXCX-~cT|9f+2f*0uCVAhUq8-`uRh#(km#?@n6VW~|xXhVK7?c-+byci+ z#HobAWMo_4i%qQVx_a2ZktbS3vA{qlcYn?5=k#(rr-lNomny`=Z}jE@1D$$}rU9pt zHmQU`-nXSE%KNr7oN1ayUvvY2%0D|*@uIAxiKK*VaBOyy$;dXDY*$?sYj$)AaQ*@~ zm6J4Z=IO$fWuo)$@)r29*-f1D$$UR-r*GvD$be;h$O?SKE zr0C=-J}=~<0R<8ue&;b8tA7&=4U)cj0oX4jrIfui-RX00001b5ch_0Itp) z=>Px&r%6OXR9J=Wmr-b2RT#&Ab;Hn=(FRjSb02yft+tKGXdHVPUX(G4qb=gb?5i(J zR@!Souu#ZYpmh4uCPJIN`6PoC)Q0U<;y_VJL0D3UVcf#9OczL|l&ykZAIdqq_asE8^WES1pYQu_0tY(Kfm$OWge8QqTK$~1-7FG9Sl1R70GNqHFio?~4Qra_ zu421&crS4ClVL8LKEX|}jM*qXJ}<>mnU!b)gs}DlvgrU4aDFn(+0!R@qz!ZK?URl< z#Zno7_*@L2%Hd|fn{v?Z9>Cpu8~C(gVEd@$cRfC@au?u-tuAY7;fjKf&&3*c_oWxX z>{JNFQkjXRi}>DspF3ZF1%MrVelm=|+q(^S=Mhs&+i z1)yzpRn2wH!|gD56x{GoUn5Ko9oh-5SSs`7C!bR~+QH>Z9}#%#6zy+5;G1ZQp?6O4 zZ^s`z-gueUdNpPu5zdT^aAstLVyVo3$9l>C{3F(8mvZlD#}NQlq6u=}{lwpgpHZn) zuGRyrdBn03gNDZa8@Ku5@^+k8U-_WsTHUXZ&q!>d+b-XF6Gpi8(hW=8XBR+@wzV7JmR3CkqW2PXQ}vH z%+bSceRe^)DCHmM!*hK|-LFIw3=j3OmdkTKHmx@2ALvuhXc{mRFAy{|3Z9AzRPa<3 zoN1bE$&bGU;Nfris`b)YnIv%l{)_6d+H5S3$iId3HQe9z1+RGp|1TC$5oyIjD-S@b+YK>RgSqK_Y5c@ z0R}tUdHA@DzuU|Dlc&J*LJ~q)W1)bf=VjsrRaEvCCg<#14!S|@U~*i-1L)I1(uoZI zZZCiR=~3%t?n+l>A?+LBi@-bod8U4DxwZb}DWS#jhTvKPC?R3zG-&4kOG^OVp!FaQ b)JpviDz*5WqP99k00000NkvXXu0mjfg4^rp literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/501_2.png b/public/images/pokemon/icons/variant/5/501_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d92f57a83993fe7793356e745aea1465b4ae8630 GIT binary patch literal 358 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`bpw1tTon`){$Duv|NsBh6Mh#L7q{D=$(C_ip%Xo2>C&K}prX7<-T~Qv zFMt0xeHT#2u41niAjMx2_@+?lZuD8*Ue5n0T@z;_UY8Fx&~ehU;_?&;zf zV&VVx(nY?*3LLBf2X4M|dj7xu-G*ID1dV@hS$u5_Lcu@l5dUhvNWXyb3QMXUMRQT`C$?3S|{6^TP>Zu^v(*b3z+j_ri_&n p|I!NeWd%PBbb~EU`$n9S)_r1?@@_WEQ=pR>JYD@<);T3K0RX=omsS7( literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/501_3.png b/public/images/pokemon/icons/variant/5/501_3.png new file mode 100644 index 0000000000000000000000000000000000000000..50bbb59a545249c7c56ff51f3efd3c3887ed9131 GIT binary patch literal 590 zcmV-U0X00001b5ch_0Itp) z=>Px$?ny*JR9J=WmOn@wK@^9-J5qRV7Yu@2@s2CPaoZi7fdme0LI`LOk%KF)GnIj) zkwi$B$kkT_l@PW|5rPU5loXL5_=oG(h=n-CVz3D*+<29fLT+7+A#rCDoBd#6XLjD( zAMd?+GmwywkdTmILMkptBBH}%rBrObjSvwnB6@jtMf(Sb+CMnd%d;!GGk@jcs;{O3 zVdtO6wI{|R)21R{5076se|KtvuXk>kx{oeUMD)z0^T%~t>+Uc0c^Ql%czdw)+iy!x z8+bb&s|ziYUzn%3w?0B|eIytc`|aTUd2!U#eRP3JsZ_DwW}s4Gpi(&_5(pwU_M&do za*QJwW_6*(%%sDckMjV0_%v_q^IB9x5z$-gE+sn$!26f)0C@E5G?H!0GH%#L#v-D- ze4lb5&&KvH0Odj+fQ{{4x-%KRrPC;-QsJF^8PUeaQAcEVCW9?~xN0AO&zoNWDA_sM zmPPi#{lLbXTl{O0vD9F>kf-W2`F?MRs?)@lz9982caJXLkL){g4Tf>mKK8k}av@L2 z&e2mFrKfh%ZoIig;6J8VMD(qRhpaWGxqf_1)oJp!esc8vI69(jS!dQq*)XxxV0hd~ zXB;~iV!RK+X+*spkL=AXYmMovZ8H}UwVfpVD}DlIH^iXon6$_M000hUSV?A0O#mtY c000O800000007cclK=n!07*qoM6N<$g1YJnmH+?% literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/502_2.png b/public/images/pokemon/icons/variant/5/502_2.png new file mode 100644 index 0000000000000000000000000000000000000000..3d327da21297171b28c529c5a4144f5fe0aa3d21 GIT binary patch literal 407 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`wE}!XTon`)QbNki4TB904Fg>gEKLixOgZuQ^7j=w(b+Oi?e=HpR$l)% zeHT#qCWG8`AjMY_X00001b5ch_0Itp) z=>Px%aY;l$R9J=WmQ8CDQ51%ssuU@q)G!2-U_JRDbWsgvBke+jeh_dcEx|?m2l@lL z=fG zymtnA>ZzxHD-m&{T<=0u3yFv;BJRTMbfl1%qF6+O?KsUSmh&kvV5dtXL;X0lItc)* z2(W%B5TJ;-v7}H)#u>}`ft*^Mk)eJNag|biVF3g8poW{7t1vTH@y2t7EOLDqh$b*b z4(c10N~JF6I+ZJAi5-1Ey9PozY3yL5vEn;kU#+sfTJ4%wNXCOQ`D6sBlx8`P?t(6)h8luxtK@o?lF)Z^+My+>ZsklNZ^bC z&jT)%N+f<9b98ag`_@i28Y`h818>v-3$xPzIJM)pgBGeCl6Ig%?}NtwOg}{c`uFQ3 z;+K8F(0cgfIl%uZu`X?_c>utT+cyDNt8M`Bpi=gM>YmkOCeVRO+`fT3v9`?V;*tk9 zDk&f6w{(_RQV{T52eYS3pnXt8+=;bi_FudL;Qi}&9vr}}>SIPFMIjldkc`s_XR5#@ zzB7FF+;c}$_W(#wj&r)WM9Vq@uN{5?pmnH>N^I<)4oS;O@pA7o16N|+2OzQel=S4d zH$T=qz_x8#hsqcZ0;X91{=NCj#XJBfUt8Y%mX*S`?Z9ac{X*HPPFVdy8wL&{2Gk0= zrS$YS^b_Xm``?P)@-zSd01jnXNoGw=04e|g00;m8000000Mb*F00000NkvXXu0mjf D7UxND literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/503_2.png b/public/images/pokemon/icons/variant/5/503_2.png new file mode 100644 index 0000000000000000000000000000000000000000..b3611139d87db4700619a7182d910422de484a72 GIT binary patch literal 486 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`wE}!XTon`){{R2~_wx6D(|6rUo{$n!78De;)h8j)CE?q-o5vP!znwZ^ zj*}Hox!=~8j6jO7B*-rqs09HSTo2qi0hHk^@Q5r1D%cOgj25iHDnJKld%8G=SomL^ z_b0#D0fRlz0u{=c4gm*uG6Tc7{)WVKCx-e}P{-v4X)gU>h5uTVK6cj)7^sfsT? z>{gp06tGn4>sb09^Ox!A V*4#K?rvnU222WQ%mvv4FO#uIE+Z+G@ literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/503_3.png b/public/images/pokemon/icons/variant/5/503_3.png new file mode 100644 index 0000000000000000000000000000000000000000..da3aa967ab57c4e0c856f3601116df88a0125ddf GIT binary patch literal 1008 zcmVX00001b5ch_0Itp) z=>Px&kV!;AR9J=WmQ83IM;L}5i8hBIFivtvEF{J~L{>1ADxz_*NGl5yC^YocR0*^P z;a+kHn2<}!7p>Z$9vFj2IE40Z$i4YhcT+sGl zW|;MAW%;M=#V-gnJKuiu%=^vH!l4dzsQ*Sn2 zDFX`R)CV5}5Ki^c6^#I}JT=3a%fmFR3cueNLrNLgo*VEy-xZ)rlpG)9{nU8?zP-VXo1c+LBsAP$ zw3oqXuZ~-un$hotQ+>LfDdat+?;W{9rjYkcbXR~<%7B`EF`J`gmFd2I)dgbe%;jO- zXSxYnOF;&yN|3Fo>IT&H_+JyUy1TS5rD;go3>Z5t@ zXX+{-eA<)y?;D>35CN8?&8uM0V@6v*DPERUuTfS&}w@h9VejyPJ31#edvB$FB0U(v2AEiNv0bi}j;6hb(v%xb_;&Gy8tpXhOcEqwJWcdcO!cdGiQ?o)BG z^yB>lDoC^4J935Rt82V1EtaH>NG4ry8w=9qwh3iUwEOy1>JyVpPfzdfpl$`6NF;PS z|B+4ZzPr4wz%~}7j#EnnXnD(Q*Nz9Z36~rnBUH1A$Kx6x9*U? z9^q6Uu(OLD0V+5p^X!7Hwb}UkM*#XokKWbb-m&T?0eI`)_kjDJ-V>k@!ujFDm)y06 zxfY$_lLyBE?+pWBPQuS66}vsBA7n>>X1m>Nl|!nG>WTxeQ=R7Zz3MsvY8fkpvm|Z$ zdB`$o7x$WXSI11JGRp{bR7yYnD}YL^KA(0Ac&PpAAI-AOsp&-}000004rN$LW=%~1 eDgXcg2mk;800000(o>TF0000mdKI;Vst0M{IXLI3~& literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/527_3.png b/public/images/pokemon/icons/variant/5/527_3.png new file mode 100644 index 0000000000000000000000000000000000000000..39b54a23b1ef97514152ffc75cc3e8489d3e6c35 GIT binary patch literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a&!ZHLR^8g zf`WpgTtK*zLyM%;})Z{+$>8DPMbdL1CN!Lcew=&vyC97gK-o78m!oo>|X**q`U-V!N0(0w>=@ z&)eHSaoI{Esp;bG(zzF2rma~k5`DYX&3JcRMb7MqB6Ecgd)GZY`BtTIdW)HHVZtZ& bzh~K%7clp~eABQ6=qd(JS3j3^P6)FM;1!@*93GxeO0P@j*o&6nMp!6|M7sn8b-nWxZiycznaVhmuaX5J4|NjW~ z=+etSEab}5YIl07$?*OE<;wWJ>1pt%R;i9u)t?VIxvnPf(ey6yJY#v^bIPN0+^3CC zN=qzuPMWuwS2b)Qzf^BXSHjyj6Hcu13Ol;N^q#*cx8qZ*pw|(V0o8&Fowp0EPWDSr zUvh1>-gCyVO0lw8LHUd81&n{VyLboZFIVO1bNevW{hOM%fS-oqLiPVm0%4|H&ad}P yeA3Vnc;oxxN(~VZfs9X3P|$w+(q#p4w_9w#KZvn3ZK{sjzjyE62U})sYkKhh<;nm5 z|38&nyA7yQs3gcQm;uN~1#t)4?0~YzJzX3_EPCHgI$gx9$iwnhQrIEjz`y_J)28&! zJ$F^<#~~XzW1`x({yOC+>)O((crG#Ot7Y@t zi@)9^7f+h{{ZQU?v)$k2O`L07zLd@Un=O6rB*)&a6E}DAW;yk>-F(EYRk&$Z%i{Al zG%hJ73Y~kL@ox^>+2uU)wef#C=KX#0{;GLf8he$W@;YUpml!-<{an^LB{Ts5Y96O8 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/587_2.png b/public/images/pokemon/icons/variant/5/587_2.png new file mode 100644 index 0000000000000000000000000000000000000000..1e522a316762f56acd879de94594e416c58a5f74 GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4awGzLLR^8g zf`Wo}ti7zM)(R)(?yGmMMoUJ`-!B#Pt`#W9Q4-`A%D4KMzg^C{fUba`?tRwLxEd6H#c{oa5B&hB=TCbZl*?xqlU-Yl?b zWy$Vq{dZMZr^-0HDsAt(nIrs4hG*L0|29@ODSf)H?)lWDp1LFO*UC>_(YT1c*tIa8 i@9xeC%kS-6U$@`Rt()n)VX-*KuMD29elF{r5}E)W1ae>i literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/587_3.png b/public/images/pokemon/icons/variant/5/587_3.png new file mode 100644 index 0000000000000000000000000000000000000000..c26066605cd8d7d7f02ff23264075252e386ee0a GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4awGzLLR^8g zf`USvRhzk1bn5i8M^gK`PraM%Q1m1?g9j+bQ4-`A%D4KMzg^C{fUba`?tRwLxEd6H#c{oa5B&hB=TCbZl*?xqlU-Yl?b zWy$Vq{dZMZr^-0HDsAt(nIrs4hG*L0|29@ODSf)H?)lWDp1LFO*UC>_(YT1c*tIa8 i@9xeC%kS-6U$@`Rt()n)VX-*KuMD29elF{r5}E)jK68lx literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/588_2.png b/public/images/pokemon/icons/variant/5/588_2.png new file mode 100644 index 0000000000000000000000000000000000000000..df99218ceddcf3f1f6ae145bf0ba179a600a47ef GIT binary patch literal 468 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3HGb?#A2&Qk(@Ik;M!Q+(IDCcYWa7k%OX1+p5etyou=;bvl^Wv}4CE5$jO)yItKEj&4<$60qsU!d+7pR?Oy8+7YP{!o00? z!;yN2@H;RueXzG_5tdx&?PREh;sRb92~xOt$!;@6a0D8QNXHzg}zEgeV8a zmNzBN^H%*`@yzVg8Qp1_w%cFspP#MV%XHUG?zrFP`@0Tn|8VmwOj;n|l(w`tdATHy zJ;RFcOgiPFJIkBHKQR6c%VzAJ$;B>SdFu1d75j=xj=g=yrn&sc<673^evkL>_3OF9 zR>zlhk#pWY7Qrw^##`44emS%P?c|$Yocwi4aM!x@Ye}qUyk=MFORTPDwU-OF>AI5_ z#~5&XrQ7!;#+LjiFXDW+pDS4L=Oq7Xrt^Qije3vB{a`(qD|SVI(IXHTBMhFdelF{r G5}E)AoWjWf literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/588_3.png b/public/images/pokemon/icons/variant/5/588_3.png new file mode 100644 index 0000000000000000000000000000000000000000..3d9277308c7b36178cbe49d462547fbb512eec48 GIT binary patch literal 468 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3HGb?#A2&Qk(@Ik;M!Q+(IDCcYWa7k%OX1+p5etyoubhEcqAu$ zTp~5+!G_1I5xguvWXi?)ubjw>-?%w^*2?hHM;}yW>RvnGV&wn&;_Q|C_xBt!JbL*= z)LOO!wVxGth;u3YQCR-HYL{=D^K<{Y2-Av}@snItz8uIGk>I(q;O=J&V2m($y85}S Ib4q9e09H1}SO5S3 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/589_2.png b/public/images/pokemon/icons/variant/5/589_2.png new file mode 100644 index 0000000000000000000000000000000000000000..ada32c980c187270e9fe2df9c985c8bc711c5cb9 GIT binary patch literal 708 zcmV;#0z3VQP)X00009a7bBm000XT z000XT0n*)m`~Uy|8+1ijbW?9;ba!ELWdK8EY;$>YAX9X8WNB|8RBvx=!KdMT0006{ zNkl3W+Zr6r4Ipm83%!MYw-JY=z<=6bB(|vUuVa$81Fq zgOlJ82xc%tdo-m(C!vDnrIp-VC*g*i!|}d-FTK$Fk%U5hmdm~5?mqXt@AE!M&i8$; zbL9R5GsevT3LzqIBBjh_y>}*{f*rnC(PKZq|JI*3qz7b!rUnWjd<8R6QL!Pt)W}po zg}Vx7Mp|TI;51xs6ila8%hMf<0eG@pxE{dX$iu4TDOJmy?VajlcQDS3Oaz?7=_2S? z7`FB`OvPj-7YZ~VCWP=65};Hq>ucJ!Ts-jp&PgP$R4r3nE8-rwq3hbVq!T22zCZ<1 z4^p_vFoA7bV%73Is6Py@f8-=WX5OejKMo!~Z0+l#itb>{+ioRhbjt4!c{GQ1(jIa=1`p;!*>J5dJ4o(A@)|eiR^Es{%j+At)4eu3o0&#jEI4 zRjhDo8X=g2$#EuxyMCqB~g8QF2E?TV~fz3+D6QmNLmmx11h9>u9koTn&)Y8nSf?Y qE`eF$W(G7PZjX%{H{*}{JmVia!5!mXAh`Yj00005P)X00009a7bBm000XT z000XT0n*)m`~Uy|8+1ijbW?9;ba!ELWdK8EY;$>YAX9X8WNB|8RBvx=!KdMT0007H zNklT!E-S3n6fepc1kkHV4qys;Sv+(8`!g%EuS(@|Ej zu^D%abOe;Rt6+LKMcM`q!=UILAOCM1T8ZUUd(E z&w&#F)>~cx1%&fNk>~PdPTR(0fI3btBb+bg_Sqi*-kfzYIx~b9VydI)Xgi5wyACEZ zS#mpjCY+q9POZhg-XRY~1b{DxJ>a5~q_Szk3$e)nhs_*tsm&$AZGKg27@ZmQ-PPD* zN52n80!p0Td#!MKwgTL`6Qh*>#`25jw(Fm5AYASqdX2LxC02cVB0wu}G_htHlVwDI z3A+g~HlRf6=W+{3pnmQY=L)FD;1(DcZfrn3M(weq#?AQSKFRn8e1jq5lqDHB00000 LNkvXXu0mjf#L_@0 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/590_2.png b/public/images/pokemon/icons/variant/5/590_2.png new file mode 100644 index 0000000000000000000000000000000000000000..66c3767024b85bce59e3da5e7a5055099366926a GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`r2~9ITon`)X8t^`v1rw=pF2{IP7$5iI_qy&P!Pzpnl*mgfD~s*kYDhB zC}0TouMh$W7I;J!GcfQS24TkI`72U@f-^i_978Pp-%j%8J8Zzg`cw7mU;jJos%yEX zJx&#$%gf}}u=v7_C;ECnH77Rt*j?cg+S=B#=i^kq83{n)tAa}SnW{d4Bl$qL5+=j`5|{0_MVQ-8ZCGk;fF z7oxUW{G3ba#`ABIY8Lc%CceAVap_I@oX%piqlWXAswrkhu3oGKbR&bOtDnm{r-UW| D7CnH7 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/590_3.png b/public/images/pokemon/icons/variant/5/590_3.png new file mode 100644 index 0000000000000000000000000000000000000000..d18ccb42e21e8955f51d67e9630a79af643f58cf GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{174DbnYRZvjKIrJY0e(ir1H~;+B0~dc3-v|l{x_0dvP)S}L*C!ywRTAVE z3{nIJ44cmAoCk_>7I;J!GcfQS24TkI`72U@g0nnb978Pp-%j%8J8Zzg`ct*{ef>i_ zjm*#uLi)R3*Nf9%{gb(R!vv3 znXyl5O4u=R#beK`1-~;+jxF6U@>lgh`Sj~G=?1Z;_M6L$<_TQ65T*QBdJ%iZQ@e{N z4(#pF=2u%Se(uQOqjsCSKQ@Y~we2iY_S$^EQ0-i#$ngrMqn4@-2X=7V0bR-9>FVdQ I&MBb@0GsH6KL7v# literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/591_2.png b/public/images/pokemon/icons/variant/5/591_2.png new file mode 100644 index 0000000000000000000000000000000000000000..dad56af2559ea75310f5edc72cad1882df6ab59c GIT binary patch literal 391 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{174DbnYRZviv`SW<{(J2~>R?Yg`_3P)3prD}t|NmdRb`7Y+O?CHbAjMS@ z(0UOHTbX`pq>4ZZ1#xFjO)6%alzJWIny#- z*&}{1?Kr{n_?yJ8TV??PT}QP-RZg?GJ6>6(@txr=@3mKK|IT$cJzREq$@fcp8<}rj z`ts6y@9tE+}W7^kvs;Wueb*e-2);JyPLuQJt^kS5D)Ovl-_9t&_DkIbAB%n74cH e?L95ef3jYvQM_e%sZ9~+PX literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/591_3.png b/public/images/pokemon/icons/variant/5/591_3.png new file mode 100644 index 0000000000000000000000000000000000000000..a407a14b83aaf52ca5ffe58affc533e521337120 GIT binary patch literal 393 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{174DbnYRZvjKIrKkn{`vp^|Nkhy@oWF9prD`!zkgl3b`7XRq)qY!km4!{ z@(TtkfB=R~XLQa3ML7#RB8wRq_zr_GYWa7k%OX1+p5etyouU?GATqkIajsH{C9qi?c~eUbubf+cS$OyXLDenHM}Y z-p@W|LxT5rZL#R1isGxD8h>O`UDI(kQ2F`clW)RxzRVJnzi|7Qk{N@0uT1+>_HvmX zmqQKFI_CBV-hQ-Y@Mhm^7bB2W`fJYpnnl;QRQPQy-_N@6o?%Tm--D-rn=khoioII@ zG1l0LBRw}sXbP0l+XkKWM$XM literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/616_3.png b/public/images/pokemon/icons/variant/5/616_3.png new file mode 100644 index 0000000000000000000000000000000000000000..b1767da8fddd7ab6549e76d28a0940b23d424004 GIT binary patch literal 508 zcmVX00009a7bBm000XT z000XT0n*)m`~Uy|8+1ijbW?9;ba!ELWdK8EY;$>YAX9X8WNB|8RBvx=!KdMT0004p zNklt4*?hqhBT`8o{+u+?YO~U=$P|@^bKfl zX)Jq&mWVT&%mC05@!tbVn7gIjdXx3-9Sf=@;=uwXEV`LOFX|4QOt;=7lg|YQw6`(3 znF2sB>hzv^*4Q11gcY|~ZhnB5=P>}uqkRX?4INEpe7(Jr$>)MO#rFN?hT6xls2srO z$2+^(W9FS&aMz3w!d%v literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/617_2.png b/public/images/pokemon/icons/variant/5/617_2.png new file mode 100644 index 0000000000000000000000000000000000000000..fff02c3f3446e10240ff660e7f6fcf39fb94f528 GIT binary patch literal 687 zcmV;g0#N;lP)X00009a7bBm000XT z000XT0n*)m`~Uy|8+1ijbW?9;ba!ELWdK8EY;$>YAX9X8WNB|8RBvx=!KdMT0006y zNkl128|Q zD4*KQ&#CbNdL2C9Y0-?gUEdS;lv3S9D$Ca9THmw$K>7lVuC8$RUPRvsptSermtQoF zN*Yic18_PCmv8fxr})#y2I0IxC49o0$5SkCpAlIyX&jXRNTjm7-g`DMi0x&9w{L=m*vpU}VXp_4NnvZ=Do2W_a|f13+p2(A82o zJ7Juy4-8NqY9=kcO2k3vx#%tGoM50Yi*h#%(ib3rnY4hOTj@+rPiZ=nb7gK2q!$*3 zx7k;V6R9k3KkQQ4Kh#jpHDV?$+O?{y@E|A0vInJ@5skUrGn1Ac3^Qrz9D1FU^Vp_X z3P~14UN^X00009a7bBm000XT z000XT0n*)m`~Uy|8+1ijbW?9;ba!ELWdK8EY;$>YAX9X8WNB|8RBvx=!KdMT0006g zNklr#tt&48cd)Psz{W*~gM~#l zE;`8ph8-+zU$ei~4SY}BQ%d>eT!E#zQI;r>kpNF>uXwpy(02kT?LBP#V6QpQfZ`Z{ z=_K5~&3B&S?vEL@C8qG0k3c06;lc;KQ%;v01!z!6<-XxJtDTAeloc zg`Kf@oqo>JTeUa%eev{2fx{ww=|Tw zM(VCd>&goh9_M5tdr*qm87tsk-SzZf)Ll>KFzlq96PscwBv}-N-4que**C7^2r00000NkvXXu0mjf DCDtq< literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/5/621_2.png b/public/images/pokemon/icons/variant/5/621_2.png new file mode 100644 index 0000000000000000000000000000000000000000..dbaa26325d8fb05074d8ee78b903872545504fc0 GIT binary patch literal 714 zcmV;*0yX`KP)X00001b5ch_0Itp) z=>Px%gh@m}R9HvtmqANZQ5c4gB_Sm^(89$aGt;Ihgo4}|B+<@=(OU5r1g)f8LjR+ zrprf9m-CtbfO#Fd+zOV<h?tC4s(S0x$iEP)X00001b5ch_0Itp) z=>Px%iAh93R9HvtmpyA#K@^5hG==^E3%lJSg&>OC#70!Mix}{$6BI&4!QDczu&|7UqC6w-FuA+;&fL98Sj5v@c6RQ}Gw*xO zncWc^@)#L%KKlv?z$bc(!v1F%^b41n-3l2dH@d$C>Q_?O})AvnNhFWl&>UKv}%{R#n91gQ4y)&tu%eb_!7*>7V@ z&)pgt15lP;9y`%fIM~h_%xkyXzSX4k#X`XEJB~Rh0x)~G*WPbhvdIr0-B{Mvoo64p z@#fZ!1137f{QJ*`1t&z_eEC9vJo5@XGirdubECjmTozgtaILB&~)+ zyj_@Z&-nvCqSYMjgV|h^O#nQe`TP2%**EdpGp)3Gm~pZF>LZiVm=2VZaASU|{ttk>)Q8TPd7A+Z0{#RWG%rT0}*ke9>% z9{qlZh6SaAXwwY=ER#c3|41dbnKDpoId|v*{{SRHwJ!e&pgjNp002ovPDHLkV1fV= CmPwib literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/6/656_2.png b/public/images/pokemon/icons/variant/6/656_2.png new file mode 100644 index 0000000000000000000000000000000000000000..612386a5d1eeeaad80f5b07648009cbf61ef1eab GIT binary patch literal 633 zcmV-<0*3vGP)X00001b5ch_0Itp) z=>Px%Gf6~2R9Hvt)=wydVH^kWpPO=V7MNo<>TC>Edyj1o@M2 zTfmTY!U0|nL?~k2(CU$&-(wzgE8A=D;3nm^4Qz84lfOC0z=Oyxja`l=9Y6+_e92@} z21E&SGiw?184z=l;`Dlu?q4?9X0lGT69i5Y^SJY=aMVNn)$X00001b5ch_0Itp) z=>Px%I7vi7R9Hvt)=wydVH^kWA14PTR>}dhiW=1LxJ=t3Gyf5 zmVn{ogXaK!UfSBepzfO!e#`SdF9pL7@8BlowhVL?6;rs@$-sr!9rfR?zd3wfaxF(* zlT8{BC9F=^81osB=U!6mor}?`Ex|UEb*h~paFSSgSuWA^EL9IQF~Bu)_=Z-1Gv`Bm zzNoZW8)*!5jJNPbLsbLRQJ+Vn^XDYs*HZetgaid>g471$B1rLgcZwbND;tziQ_07% zwn>Wgjghk;ha#s}^^Ps0swi@17^T$|z|KXr=cfK4PRc&1Hk zKmiHnt3>2}4ImOv`X*6Z%4f&29MGIAhC2Bpx_1$yP4XQ~J+GD=^SbNr*MT~J=Bv*> Z0XgG2E|R)YCIA2c07*qoM6N<$f&ibdA*}!a literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/6/657_2.png b/public/images/pokemon/icons/variant/6/657_2.png new file mode 100644 index 0000000000000000000000000000000000000000..9f26c5f85bfe2ef051d39c8073e670221f8ffc04 GIT binary patch literal 642 zcmV-|0)737P)X00001b5ch_0Itp) z=>Px%J4r-AR9Hvtmp@BGF%-qq$%=wHh(#PaS%hNI$;C-f>)>E<68r!Pf;c#qjt(LS z`T+zd(ZRug;2QwNb22Ne|Sq@2Kc+&Y5 zwaqas8FR7WISqDLx>w8H(~k9@E1MN_!^>Ju@@27%y{`2=)v>+i z#NW=_nMwpl$^fD4>TOn?oaW0Q0ml&V%4}bNSPYP~^YQw?Ss$?oNT`QoK^y`OZEGyz z+gc+9If-#76N6(+5X9O{Jgn8DV)d#fRrRf)oGdE_`w7P1P|qt7YT0ZJ$QXlKXiyB# z0K?e70YW`yE{_jF0t)uiZWC**Vvxx~z|K%qeH1cfP7#oC3Rn}XjVxv+Qy~HZ7!Bv) zzW_2Ra6k`@&ua@=&ZLR}jfP`-oGP2BhmWmWLBJvCui^=om(B0IR+0Ro)tQP`eLpFNOVpSsyc%Hj}D0 c>d(|KN49k?IZdhs00000NkvXXu0mjf0CQX%yZ`_I literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/6/657_3.png b/public/images/pokemon/icons/variant/6/657_3.png new file mode 100644 index 0000000000000000000000000000000000000000..fde76bb8d1ce68a1c10f26849625eb6be6ef688e GIT binary patch literal 714 zcmV;*0yX`KP)X00001b5ch_0Itp) z=>Px%f=NU{R9HvtmN95kQ51$x!~`dCu^_DhNx(RyQ0S0BY7r?886=a61Ox|%f(mtL zmypH9Lh9xmBz6iJGDs<+(xHeDFoO{igs2E+NGS*<5taWW=Xu{Fd3o>Nly=Bn`f^|I zz2E!)bIv^hI_4vA%=u^nXzI{J!HI&V3Ye}pj=|u?#NY1cUE_U*eTdPEpfQ}_I(8cY;y@K9{P-3#G@riYc{f1$m{AIA0g8HnIUPU8 zQ2W&%w0p8aiQf^P1LUy7vA&Z}^SV$vKlK0b-UtvN0E1GsLq7HB*HqtER@>i&G~U ztX6wViH8}>`g%M#FgHe7D~o(ttj6BY+hK}UyZ_^FBTKQ^6&v8}gC|sMm58bp8>CnD zd@G0rfD}8IE?u?`<|Nt3vU*6CmFMqza72_kd&3rU5}#hmjxPmeLy1E*G2|VUF z9togiFADV5ryWZb%&RH_bpF~jTa0I@tfQVU1^E`Kq;7dkI&W!x5&=DyL=@gnU)t9wE9EOfD(J6gtMQM50L8*fYJ@4{h5ZMClY=hp%At+`0000X00001b5ch_0Itp) z=>Px&bV)=(R9HvtmRm>^VHC%YK_yYJDrGK_OWw)LgIHJ+K^Jd(_d3(|8qR}quFotkMDG$3vUND0HiA}SnQNwZFr+NZbd-oO% zPq^sJjsyAu@i4JilytOTVutpXqjY?zk;dwuE7oHEbiy8L*j>wO?m0W?ZEO~00*33sz-d~n$e{v7H6kuPZKAyux5v5zU z1yoMfhSX-D=&$Tzip+4^DR3AA5OC;=t?zqjyVXV!kNQ1S1Y{_1K`SVBLqXV9X|JG~ zI=52DL&TuVN!6X_sCzV=vQ6I^Fy(L(z1!8yd**dtW}5>Qh1$8000ok5eBxw4ffK;K z%*AxWUa6>udB7n`7DiCR!x|ok@_7u&VtG4Q4anAF3nd#9S-lZ+DqoJHTtYFS2TGCP z9DwF)rM#wKS$e?Fqplp3HnC`6oKV>X`6h-WbD81{<`6b(l`@z0@dM{3!o1PKM^RIK z?n~LA6$IR|>lc)V;`1hUtMjI{ZPcw&zKJ2lTFXES&tsoJc_`n|@A2a?B?Ym$t??%9 z%veLHY6SY7g!D_mNkB0`#xF6Fb%i@Gz15tOf@+m8mL`sebiH^?uj0~_CE=!TWV}C2 zQHJH5qsTqv9jX{1PKXOyMH95eYCyoD*CFzX&hl~9NFTX2#q)UbYO}Ij*0Jq>i(^{8 z#omg^xi=j88-5%RQV42AWIdWVzARWjt!+mA%jGX`w0_Hw0w@N+2dY?KqG(!-2g^;H zVqBEg^F`@<>R)|-YO8Yn+a07*qoM6N<$f)+u*VE_OC literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/6/658-ash_3.png b/public/images/pokemon/icons/variant/6/658-ash_3.png new file mode 100644 index 0000000000000000000000000000000000000000..52ac4fe0ede22e7f72822f08978b4d92411ff498 GIT binary patch literal 948 zcmV;l155mgP)X00001b5ch_0Itp) z=>Px&ZAnByR9HvtmRm?vQ51&PfS@2jUuFDkw-J!7hXk zQ=(!D`4ANtNe|M65Rp>G7%4OmbW9S_N`o%MWD42kA%qc%iGRsD>@&@rxv1fT>t)W~ zv(Gu-`Tw=n-WFQrVOiyTv5u}|A7A&K*zS-GGszy$(aXD#GhMf~y%n5J3SfOr@nC1T1O$z}genlpjb1Dr(qSx-Rq1nhE;gZhTv zkh`fndO*BPEEXj{yT+MeVDL5#`X;Eg&aGRE`2tHOCBAIpH76?jXgFpoZPK#%!`^Sq zB>}_#;lP<%tjnQ*q8bs+FZ$?sZ7W|xJ%HY;ui)`~!!i9*Y>yFHEMEt!0a?}GPN`Ztt5@GM!+(FVmlBEzJy41SV*t+W za`2k6qzxgr$Eb2p+QgQxBZSJ{vB%1g<(7Qi8O*Wu)lPlRbzq)z6Y

fqz9!bsR|9 zuoVPcp5vhYQfzMsD5=Kl=N=vc6p&(V;`K(J$9)2&DqmZiY&duO0~MfuyQJ+~yFnoCm9Ad}J?p@y^SF;!b~^d*@yLv%DLmNK+7&QatZ z@(xvu5GTY1v!V&xVigcYf?kIxEI7@-&Aw53FuTClKfH?tgOGK&mf~2Jz1Uwd8T-Sb zzv1A3kU~%uk@aZe*jccCS=)?yn_}fuhakl002ovPDHLkV1fW1xwp>% literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/6/658_2.png b/public/images/pokemon/icons/variant/6/658_2.png new file mode 100644 index 0000000000000000000000000000000000000000..eaf9da8a9cee7749b97f3eb4bc5e7934f40f4f39 GIT binary patch literal 774 zcmV+h1Nr=kP)X00001b5ch_0Itp) z=>Px%zDYzuR9HvtmQ6@iK@`W2i!!4{X`#51jCkM+g0ga>1X7xdHf_p2#7#szS_FZc zUSD2 z+Qik~yHedzYknt%V{X9|1DEZ;V-^VV$Cso>(-{Y@B!CL3o|*hJErW*!jasUnD);l; zLm8R>^wfvWRkTd;+LN?0bWf_Q596Bae6{{DS z1T2uJDz{ibK(7UhVCSctt5a7$6^4!+_OohhOaDv zJJQ)8`3nQa67C+kYJgfisv?lU;Wt843fTC>M{xnM0nxUh#co?s$KZ-ntbi1Yfgsi0 z7p)-l5iT5l#hZkG;<#=93}<{IK!xOql5PM-_^H*!b(2?HSmj3p^ASE|VnBtYqKW2? z)0UHMh`@ImdZ}!ootFrLx{<0#?!ERN?^ zoMN{am`pWth3|Uw*IxIde3a(@$P|ZFToNUcLjD7}m!&QxWX00001b5ch_0Itp) z=>Px%$4Nv%R9HvtmQP4jQ543{kS)TEQPQeG2!e^qMY&NE+BHmp1yMw93i<=0&|<`( zRp5{dL07qHW5sL=VT#wPpvE>OA_N0M5Mu~oVT+_7qxepJm+SS-yyts4x|p+h@7{Os zJ-_#zbMCzf+2WSi;(SsEj2of4f^`MsDiC*mtQ<@=H2f~Dte7>>29Vu{cBTF>@R0%G z^p%&DW9eZ9a@%x{{?25l6wAdm;57lf@P3!f_YMePVF0FzghP8n0IP+JKmZ(?D@sc` zrC?~oX2xcu`^QIpj|zvm6+;ZT9sN0V@O^Y}Rd^WAFmN>iBqVd@@#0r$emkUUQ9Ua6 zaNie6^_TyPdQ}y)tB*>eZ{C}gms58Y@Pk(}p~bhwqc^o*=l+A7KAl+;fiT6vF`=rM zxrj-C1!QS7X#fG*cxyt}T)y37{EtsANlgIlKL+gQ{pZCyv240gAW#o*J!1ty3XB{% zsow$Um&ajM45gq8*f#k<`kv>to7GDdb5l=cup^^@gxfSg!T|t)2dfpdiV zN}}BefI0h|00JN3uCW?b#+|R=kTvLa{tp$eP8(YH_R}O!@D1(t5|FWUAWzId70=trR%Z~ z+)FGVv5BXjH44W26+X00001b5ch_0Itp) z=>Px&H%UZ6R9J=WmrY0;K@`XTX+*6DB|)r-2@L6}AQco!dr-v9K?)v&MRQ2-&=BZH z4z;EY^rEJuhg77&fKm@i#ayKAAwm{JZw2cI!BeAq5Ft_{6)LqDwuf|v-DK6>ZS2WE z1ZHR6?*8)Ly!Up1EB%`cdT%6zh|+685OhE5Jn4EUAw+a!bLg(GV{nhCyrvee)Q$4vF-dBHU%@!hcyD zP7(^SG3Rt*sfy=g`_Hmr8+Czdf)(+A*O1znDHg~5v>+8tbqV>1Ag|SV9m8vum%Dw+)8j- zq^T4TLc~Zgh}q-&*cfZaw#@{?%2#kTb-439$n55(;{YJ@UL;sp=bTQ}-UBq&!O`eA zP66~{9Sb`<0Dun*p8*s?&h$65GzlEp946jR!{_yYPo>np5`cyzX?e1OUb3#ZKH1kV zYkSG>Kd^nn3~70ybAYyXsLF$aAQ&*#E`HlR1OU8D%#_%qk4|JsGa4Po=0+OksTcsj zR#}a0jc|a5BoPF`@Y7~OPiP1uE;mM8ZdB~=VZ`Nz@9i5|QrIf1G1=FT+bzv(PATKd z3P>U6rsL=d4Y9db?;<63XTfwF9;+(Ox&dh?_%!@l2F5v^iuSvY{j$2K$BUW(l_Z6u zFat|VNTk;gGa9jMs$usLH zurfI5eT$o0SlryYe86J)ydKut0H9)j534*c%hooIgVI=yG=~@fP8+NYW-uIPU)g*r zRg%#(%r63u*tM2-={__S0~GHwEguBuNtXweUQG8F^=i2eO=UYCYCUUQ>3``DdqtH# T_E{#B00000NkvXXu0mjflmwR= literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/6/676-dandy_3.png b/public/images/pokemon/icons/variant/6/676-dandy_3.png new file mode 100644 index 0000000000000000000000000000000000000000..ac05ae8dd3a1adddd20d00f71114b9625f44425f GIT binary patch literal 884 zcmV-)1B?8LP)X00001b5ch_0Itp) z=>Px&E=fc|R9J=WmrqEOVI0RlN;?%%hmj1&9)rfywF3CJA^#gtso5!fk}sbVaT^ z8$gtQdQ8f1-cH&tGjet)2~UO$(dZr-@+ICJVOU~Wkvgc_@r^y{Xt za(Mu=AvNW~YAWRJQs4l#SOo-7pWj7Z{DI_jGv9WR`Q%(4aFy4^yB9I!_cMmYWy9H# zt$HPdP$LdMgVjEM&qvv_qmx%3dpUpjD$;>weO&kB4giDoA`U;0Ni3_@0~;0;LZ~B` zUjuLhXzPjq@OG+1d)dtrW0xu?8b~2!m1!y***>1&7A{0|eWyWk`Eygsfmg~>1Y`=%=apR^oQvU(PUxyBLAEtf)0000< KMNUMnLSTYX7ohzB literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/6/676-debutante_2.png b/public/images/pokemon/icons/variant/6/676-debutante_2.png new file mode 100644 index 0000000000000000000000000000000000000000..9ec13ca1964e455e0376d47b9e2ba5b618a37ece GIT binary patch literal 897 zcmV-{1AhF8P)X00001b5ch_0Itp) z=>Px&J4r-AR9J=Wm%nQpXBfvns$B#U$VimBY8-fohu}tSL0*!f9wI~f4`fP6+O1?M zSy~JMcdDtD5Q>d8S%$hMZH#Iv{dRzRQnGy$Qv1^@Wcb)&aoi?hW>Q%MusVW{gv(a zHY^a3i0H*iMK4w=`t0d5`t0d5ddqd~`Fl`eQDrBdl^_ibQHZ86|8&WZ+wv| zjgJTVkDV+A-kog9db3`u#e#fe*uyr%{AL?~$>}lxvvXB`yLA(Q^A|4CeDDZ>(R4Bt z4v6K?eLIPWzOu8k??40EEk78%@}3_s4&=U@L@AY+35j5%-3fqntG?Y~dng-Nyc;f# z-snN4R6;40aIz^H?T&?e_Cp;fo1*&ZG3Nhi^6}NHc>n!NA(MO!E=+Mgailb(lu96? zf4u(lUduynKYk3rFSmaO;L8sN0JyTV!^~cyHXcrUEjw53-n}SG#sd@){rR_l01s`O z0Si;wYXv==&oFkf$mDdH@1~|=<-|y7Mk$q8z3~NWs}0sx8=-y7=QsDX*W%9K&+PA` z>11p;h;foAr4qkZEBZw9DSSTxKrx?VW%DV;e2(Sq4uwq8Uh|u6nlE0l6f#MiIAnW@ z6hS}a#$b;7KTX-TVm=pn{8;Px(VQekBBD=xlxJfw7XT}bkK?Sb*xYD7^W}WTJ_Dfz zMo$65WRAJ>7cSzguUHUgeTA96KAda{xpob}-j7t~Tt3x5ptoFCmyaK}MZ#jGqPJYv z77+dd!TjcLkD>#YKq8{kUMp~-cq7BMh%h@g>=fyFq7H*APfRd7SEc^o5rgk*nlBPu ze&R7ZS7qa`&DQ|#uI&~P=RW%+)>^SWXy9PC0eMpEZ9Ld!ja1#)$ZsWRz35=TmOUfP7(DI X#n{vIvww2l00000NkvXXu0mjfyHcxO literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/6/676-debutante_3.png b/public/images/pokemon/icons/variant/6/676-debutante_3.png new file mode 100644 index 0000000000000000000000000000000000000000..aef6da0a1fd97a4f75cffaeb12dba2410638b015 GIT binary patch literal 900 zcmV-~1AF|5P)X00001b5ch_0Itp) z=>Px&K1oDDR9J=WmrqDkK^(_F>q?=C8^Iov>9QWggAmlh2Elglm{OqPpNm9W5FIuw z4_yK&S~_@WCA?Iy8x(r!@D6%=xGL%rx{!KsFhL{>g;+t{rh~k3-?lFMcGnK!_wwGG zH@|tG_nY7R<~MMv|6HzejD--&x|dRxHP&$|X;2I7ds8d!Mjrqd#)g4IP$7h>6tLq# zgb*qlEL)l76}%~fwVB6Uy7IgtUac<0sHbXz7>9setFHlg|N90#RTK0M1$4hkgn%PJ zA%u!q0P#bx=xCV4qzUl}qN8C#{So}Z0PFi6YFhk9wiv3E>8~mlEZZ9Zy`5L}y+0VR z^>?>KZO`76p<{Dx<}tZr6;i=J$+sAOeRvCi8EFRKU3{A8Xc&M{e}p&l=K!?#a^V0+ z@p)_~A%yzb{@_?c3p7{RU~m+B*?>+U9eXgdyi#z$y<~!hGrP8r=fXJwEEt1QN|%(< z)M+aDmthV_aCSl{<(yTqhf%qN`z3L#WmTbr%T0?ViMeUB}M>o{E5 zW~7;}LDNxAEGo@NDP7~^<1DRiu(Z07w~sab)^&Z~L$&cyzprWWJBBM7(1QH>Ji!I{ELI~B`Tups?(+1`b2FN5sIyYL=T-VWOOG~AA(Gg%iS=(HwKSCxM(jb{+hzn!G zcvA+(Kw_I6&yj5Jf9-lXBou5QcKr7O>E_a}9J(SYH(Z55u|R#UNV zWj(8{5j7R-R%&ZRsjU%P{b<#bPE!n&d1wOi##v(0ENRy`F=cx-*L&rvVt@EA&d8@K aMSlS6leUtplAsO%0000X00001b5ch_0Itp) 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 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/6/676-la-reine_2.png b/public/images/pokemon/icons/variant/6/676-la-reine_2.png new file mode 100644 index 0000000000000000000000000000000000000000..5d4cb6bbea0be60537992950bb7aed9a16f1ba11 GIT binary patch literal 872 zcmV-u1DE`XP)X00001b5ch_0Itp) z=>Px&B1uF+R9J=Wm%UFDVI0RlwGiwPz#>9aGXPVE_ZFc-nFn8zSG@vzvp?r&+p~? z{0>g>pCeSuWFds*eAhIsruE99u9``b*qCYBW2u}0N8`syH1I+~2+K*V7^$4Wd{j9$ zk`+Bz97Zp40P*Gq=4&M7gy$)R5LRDr+%oKXTssKUK9b-prQx2wzuu)?pTae z&LH00;5jFiGa#yzj0+(wMQNcs76Y*SkUZn{QPZ@Lu4n0v#pI&AztB;cTp1LRqpvq! zl0M~7(St{)w2b}2T9fsMp7!|zok(4&_W+w*5crmv+xdJ+XqS?20T_IG-8Jr~ik+$B z1>aI2gs_G(x=nH>9Oi3Rl+eNllB!CFW!dA!0J_uD{O6Vqw85;g%U`p@4a{q z!1Ba6o12>eBvsY^p2`_C?imOnEKSowGRKU43q^rw>p9jpQh@&|_AC+!A%vBfSg_v* zrlv`%DoIskU~0NRI-MbZpmV>Y*`70Inv9tyll6xTkBpK@?*<|V0Yg0c;2{A03AZ*b zPmJ3ke)%)Ur3RCM)~L%Sl{4s^oaD*lM}cmbK*mA{Yv9*!y3V%(u#?^Ae9KwB@1$*; zRU=I7)(x5#=SoQaOT4`hxLH_HdsqSP{>cFF`bU;Kovo~0><1tQG%e1Roja7#;V3^( zjNs*OUjTU3-bUk|QOG&Vg0;`KCs))S+s=9ORC7-UBB*Iv2q6lhy>CHR6dcXNirV8k z#7sC0QHA)C&A+ZdFI3eMN%N9q)pSW69+2-1#K-LpA2%^&Elf+#Kq zDbx~vMH+nSU^#N~ZiYhTO7E4kRg@NnM@AVQ84bKwV1iC^vylk1kqCQTQI^}=Y@0FD zbag7ap2himB0}vXCSo literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/6/676-la-reine_3.png b/public/images/pokemon/icons/variant/6/676-la-reine_3.png new file mode 100644 index 0000000000000000000000000000000000000000..57488ba17e2b800ca89c80ed26003126e163f694 GIT binary patch literal 868 zcmV-q1DpJbP)X00001b5ch_0Itp) z=>Px&9!W$&R9J=WmQP5NVI0Rl(=HVuQWEKO&kjb>Mb^X$MDQ}9OMlQqUA)x9gOCtG z79FfW2n7%6=om%Kv<@EHMTqDSO%cL~Mfgra?B?^Lg4kmwVpLI)q;sd*A2z zz0dP~zP~@u54Q22!&S=1LI|1tZdq1I>*d3aVm?yDX3iYZW2yKW0g$k@L>(_Agpk?9 za*>L!5tvSF8OeeQ=DKk+asXAH3YbomNb5H?J*5yr&PV%fV_$DSGg{a;F_%|GbzoD4 z%L*AJq961RGA=BHKiLQ&@-djfR;bnf1>sr|L*v)pWJ$UCRVIe~GRIl1yPlK@%pKiCC8^!#_*xJeeP zkSTsifAgA0r)OTN#YwijgC5od$J(XC3 z#1gS&n)!GffL@PB&!^&RJglkY97xNuTq?#?c(k8BhSz^fAKGM3BO@V%Ec?;OWf9e5 zv1A&6g9plqCDSCntO5`Uw&0tX1MD^P@vC?IXsBg4vf!wQ8!4Dk0~t&H)T9m`D7V>! zf-L~NfBlKZ)QWyrXm!^xHM{8ehB1mkMe=D`8Hq2e#FA-Z$uzC*8m(S1^nzgM1pwjr zkbYLE@>DReY*hMeaNH~mj(2DNFFpdGy>>5Sz~IbvZPVeol=s`nQ8$70`21@Gd(Ykl zGTGYx`5T9ts=3}&O|P$C$Kl|3x3){g*K~O*=AL#$(6THSLdc##9mj!lkp*U`*7HhT zMNTKnIzf|bG8aX)M5=s5j=BM~LMrZVwl&y_wGcuoTQDo+3Pm-n*)>iP3k6$r=H}~U zYmZhUwSd@Z0XBXKyyQsX00001b5ch_0Itp) z=>Px%v-BHu%$}uFDg6R1 zok}QVj;E3>Lx(KR5K}t2#6c9NLvmP#5C}Ck*hDEt9h8%0M~NjlZK32hNiTQObN9aQ zPbaw7f3Cp*7LmdFw7(cw%+SGF}-cV9{>*g03n36FrNpYcBBtL0u)c% zJc&&Ku%Fb%hV(Vrok|6#^z3_e;9hT=R66FJL5@tZf*S_AN%{B`m5xc{@`CK-bXYD& zBUd)u2wtEn)y2~`0O<*f?Bw*nN%2jfMybqNCJw;vdCS>71sS&EANU#MrP`712?y}} zQ38O*>FYNG@q@2lu643X zw>!2OjRy9`K!*h>WdtEC-oN8GopNfbZWz8+y3*`|5LOV#Kt8C7{y3dN(-PDTgSuhd zIDRb?w@*1&%EzaOUDc;w9}I2OZgsn@YcXq1uo;bB`Jt`7#U;S*W=%`@GV4Hq?$ju# zZnwpHuZJ}!D4w?2nn|%WlXCn{N*URVM%i0jqHY-ERtwY(!?zy>Zj#~HO0(-+S2`xS z)dFC9o!3{yy*NL$80tg~ebcR!%A_YO&VEH~vo4kG0okM{6xiQnud?vcSSMe~I$S81Hh<(wLGr#UECXux4euR04-W1|$R2EAUapcdxy o)D3Uz38OpvkNq3}$oC4P-^fF1&!z9<5dZ)H07*qoM6N<$g2ESiMF0Q* literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/6/676-matron_3.png b/public/images/pokemon/icons/variant/6/676-matron_3.png new file mode 100644 index 0000000000000000000000000000000000000000..a8870d9ed2078b62293b5ae13d1c456a23ac61c7 GIT binary patch literal 884 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 O0000 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/6/676-star_3.png b/public/images/pokemon/icons/variant/6/676-star_3.png new file mode 100644 index 0000000000000000000000000000000000000000..7c4fdc4efb1a628849f599d58ff7bc5d55ece27a GIT binary patch literal 948 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 JPDHLkV1mDGiT3~i literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/6/682_2.png b/public/images/pokemon/icons/variant/6/682_2.png new file mode 100644 index 0000000000000000000000000000000000000000..59c05cce665a57e54fda56d733553faee5fa8adc GIT binary patch literal 474 zcmV<00VV#4P)X00001b5ch_0Itp) z=>Px$lu1NER9Hu2WEkXtage)@VbpNt>osu%)tkVdy7*gZE&_cMUlAetJEq}YMTjzbQyLG3_lIgTn( z3{HD4dJG!w!jLH5`IdoU&m}N>z@r%CIKgyF25}V*hL?AKfE@*5BRiB*N0OZeVUF7p z*MpK-laJM)@F|UMiX3?K=uxaC3CNMKs2-3I1ce^D-W`KnvH5^HD z2x4{I-YkaT4a^K{1O9?(5cn3!4=)#C!AwqQQslsc2M>bnj{LKdL9y;4!~G_GumkU# zvcoeDJkyX_aFgsnkb_{=T3cHiJPoSv?qO*CsK79J@?-{|MI|UX8dk&5B?OUk1<0Yu zjIm#{v&YN^&w;A&Blsu!D?@7|sd(fjjK|%;RunW1ONa4 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/6/682_3.png b/public/images/pokemon/icons/variant/6/682_3.png new file mode 100644 index 0000000000000000000000000000000000000000..a7c73e94eef95c88e8b61a8496a73722be66f840 GIT binary patch literal 480 zcmV<60U!Q}P)X00001b5ch_0Itp) z=>Px$m`OxIR9Hu2WEkXtage)@VbpNt>osu%)t(5^U6uzTDVeP;l%K{PcSNwEWw9furZgW7@AavW8n z7!-m{5}z0>+{D2Fcw*N}hPoGgVD^AVG01U?&3-Y6Yw$C?yzvq2C=eUjp_Dq3>@)~- z+=`FBD48|i{16JC(&(nhf!^xwSW6O+BVkcJAR!0}J#@!S*)fCR_F^-JiA#+bV4+A2 zN0JK}L9lAgK*A872D`GJFjQ=iWsv+T$`HZ786`)kr6|{vjcF4#hzk=`-Pm4gJ~u!iqXp! zP)N=w31^Vf)?#>e^%_G)&q}J)B2)=Mm}6n-l3G<9RYMSKX-y?TszfoB+=A5@0GXhz WACceDKmY&$07*qoM6N<$f&c&l{>YU8 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/6/683_2.png b/public/images/pokemon/icons/variant/6/683_2.png new file mode 100644 index 0000000000000000000000000000000000000000..7f64665f9d758c86ec0516e22f823c1bb0090273 GIT binary patch literal 726 zcmV;{0xA88P)X00001b5ch_0Itp) z=>Px%k4Z#9R9Hvtmpy1xQ545daL^2*v4exOiC>TmHG*_#QAjelR8Wx$7Mrn>tq5YZ zkYY+Dq#$k~xCK)|aZ?0`gwVl3hem}2nwXE$p@T-~5FJGMUpTLq=S#@F`5=^@<-NRn z-@Cv2|DSW-i;V_6Yy-|m`+%J~w09MBxmpyr$jq&n9~s;gIF!bzyL!)X;t;K0p%Q=elkX@cRv!22%K}UYVrp9 zq96m7%Vo;v^OkNgD3nCNepNVa1yLl<6X&S9^_fzs6geCY1JdL1kniGEia(1QY9bXd zSEpwx=O9-wlu6BGsdg>C3-{>(oebxw9PyGbA^Nx|Af4RfhbjZIy-;xK)@2F=0^(Wq zdYvXpF#-5>)=86ZkI>`TeR{W4G&ayzi`^@JYCQcetW2lV^yZ$S=gvALoreC|3;^$?wP}74Bt}A(bpf{;_h%EwqvAp$mk?5rF=AY~9E^ zzyqAeF-H|r8!&$58-?DSBKzEsAs8&rEdMc@G63aqRXF7~!wTX?z{rd9H5{$raece^ zi|UCFN;WGg$Q2Bmn+3oTW_Z9IKXa(J7BisZ&bU~tRWOh|2Nok#8n&{6vWhZ<83+Y~ zK!ND0r<{Yb8vFqYy8(cJsyH7>o)s+zEv6RS5M!#j$7^XRXa(xE2SqbR;GDk=<*)3P zIniXWV?efC&Mkgl>%7{`oLvF5+I+YEMD+|%$4;wz1|IMqmV0_GsMAZ300000NkvXX Iu0mjf08q9^MF0Q* literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/6/683_3.png b/public/images/pokemon/icons/variant/6/683_3.png new file mode 100644 index 0000000000000000000000000000000000000000..b09a0be5fd21957e7820eb787397139a1935f639 GIT binary patch literal 732 zcmV<20wev2P)X00001b5ch_0Itp) z=>Px%l}SWFR9HvtmrqC(Q5?sA8zff59uf4HeDojCu0w}cL9f@l2X&Ikq@$bEdN|;gzr=)lEs?iR2h)%g@WCEZS-}1 zMLcUG^@C=nPYJ-uuA|gG;-=E#vlN+sW^5p*7Js;TjGCe+gq0VsUZPjeBLe7d^Xflv zQ2W}ghq<#Da67g4MB*dA5L08lMjw=`hKr=|bC~KUwv{23EJpsZa>y;Tk&c=$VQ~bY zueZN2@(%C-=XqSC3aJfvvT==mzVp#+>y{xHEDv>T7)=>~^1LdXa+_fVaU)>l#d!=z zD|n25|CXW~O9e_cD=Eko44cyhz!7G6z@5I}cGhABd~^A?SS(X8kbDg+MyNDwWd&sw zWe7763I>4!(N#}52W2(*0~B@x00C8T?(P~CEe9X00001b5ch_0Itp) z=>Px$jY&j7R9J=WmN7`fKoo}mO4mZ2%ph`uLn(B~5>P>CCmkGP!6Bm%ox8Y{E-sx# z5T_0W&FJD(w+dN;1WJYup;MeJq)VX?2e~8FD(2kM)& zGdaQ5V*2C#IEdgmE{4r&u4T?7xGFuq|2_+sDjIatK&hfp-LeaEJjX@1SQa9G2}w{l z4S0?V&v8Y9-C}vE&G8%;0LaUnNiYn zN*^m+E)F8ZL4?DLIi5FeaCC4^c?|$!E#{Tv;qeOh*4wwwjr|F%(M+@{#|`;>N-x*2 zSrz@qy>$S002ov JPDHLkV1iDb&RPHf literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/6/684_3.png b/public/images/pokemon/icons/variant/6/684_3.png new file mode 100644 index 0000000000000000000000000000000000000000..9c09475db49b4abb2b79c9fa4b256e42501b6b7e GIT binary patch literal 245 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4awGzLLR^8g zf`US#y1R{jptna^N#=~n*Up{(cFV+~JQXO%Q4-`A%vC&Nh5J6LuQj-gzB~|F_q$Xf#dK}8OQrE48`&e1j%5nzopr08L?C{r~^~ literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/6/685_2.png b/public/images/pokemon/icons/variant/6/685_2.png new file mode 100644 index 0000000000000000000000000000000000000000..8f52850dd2deab45d132a0d9d1352b6dce24a3a8 GIT binary patch literal 688 zcmV;h0#E&kP)X00001b5ch_0Itp) z=>Px%YDq*vR9J=WmqADyK@^66OTa)CJSbQQaSoxCz#i;D!Ss;iQ1lQ=3qeRhkRnBT zC=|RXw4|UHq2Qs2N+}c!m_SSD!GN&#3O&pkJ8X<)l27lP6AT#*z^;b0rgrH+j~hI1rM-)e}wnH`S{>cC-qtt@AJ=voNU@b zP18D7c4EA}y_dw+V&{c%8(nkwoOx@2VsiKP31_xYlKh9H0N_CYxl|VW(Gk>(6?6~w z^Kn~?ofw}xgN%$l6S>6&3D-fkJx9R<3`K{LOJz~Ymr*ZP0Dy0Ia`Lw=Fec%wB81TV zt1xCykD;oE_~IQv_h3Kj#R^LKG7=AO0|1s>J*XEe2$p{u%8zI^O96iHcfqH4@!IF+ zZw=<$+Q3adc6D7vID7}OPv0Q_3<~0zV3k<_0000 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/6/685_3.png b/public/images/pokemon/icons/variant/6/685_3.png new file mode 100644 index 0000000000000000000000000000000000000000..ebad502551e085552b5fbf8867d3cce2f0b45ed6 GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4aufr6LR^8g zi-d)Ofxw3DT>tu^Q14PETMDqR+U7G&AJ|R;@YegYwe_awx&tg}yB=((F~<)|lzP u^7k{jS8)&C&-qiB;&c7`)#@j8r??YlvL#%~`)&esGlQqApUXO@geCyws)14f literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/6/688_2.png b/public/images/pokemon/icons/variant/6/688_2.png new file mode 100644 index 0000000000000000000000000000000000000000..6fe8ba9c770dda5ab617197595fc47490f8d9c7b GIT binary patch literal 326 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a?}HSLR^8g zf`Wp%(Nra_FxT*{uCvw@oH>7aPtVz|fEQ1XZQXkG#pUY%|Nrmox)%>r%3BiT7t8?U z!+|b~<65A^7Ec$)5R2Zcm#z5@8}Kk+@R;)C{onJ^THfY29hP%BE@Piv^62@`{en9~ zF6AxZdH8wG$_0sAwzzv*6fny&>n7$N)v+e*_!XL0T1&9k10>y|2-eAq0kbT#Zes3H9UF7|(n%{lUj~#<%Jo_$xivKKXi{G2(Up^3 za-Owp7KjoJZj$7cymH!ENGf>G+y`6Fob-DYb?BvC;=zAup>9X+F_z6*dU~$%j`A`m z&T6-qdGCKof7@sA!L?>eM8ogOlk=us=C7A}ew6)t?6*&5_wL@h|BRVMljVlimr40R P_cM69`njxgN@xNANvDo| literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/6/689_2.png b/public/images/pokemon/icons/variant/6/689_2.png new file mode 100644 index 0000000000000000000000000000000000000000..66305ef69e84dddbcbc4474a76ada7620ea5397a GIT binary patch literal 434 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a?}HSLR^8g zf`Wo;_*NyZFxOdY3eKFryr-u(z~F3Gz>BBHURGAr`$`CtoZ&s=(pGyn2zz|NnbquiW-?H`-gPF>{ZK`iAb=uYXl{ z#(WY}YrZc1;DXsL#!tUno~YX2>s%lkyu>tgsb6be$SsFOZYMNvEM~JxpWv*-&LuXr zZz4nCEr_Xz1P~S^1%wZrJEn?9eSDeVq-zXgu6K(PcAg!$$Dfk@!Z4DZr2R@ zvbxy??>SwsJT5DIYXQGY{?%k#p0{-xQ^aIf`e)gie>t__$f3nNuQzP=VL86gfN%Nq znP+rTg+nIUzG)G3Ye`|d6f9v-R5~&8!1gO&FBkk2uJJj#y)E`?z#R32T literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/6/689_3.png b/public/images/pokemon/icons/variant/6/689_3.png new file mode 100644 index 0000000000000000000000000000000000000000..2bdfea0ddd006de394bd27b29f72ad21bec1bba5 GIT binary patch literal 434 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a?}HSLR^8g zf`Y=gcYo~It&J5uz0C9K*7$idSQN|0oO)Hh+@bl*wllZar%S(%vH&XOEeY}qX84Z; zbXgqN0?k$Mba4!^=-oQ`V$o3r4j1Oti%kCi-y3`7wx7Gv-dc^BdsNgnbkBbMtGYAh zlbBlbb?FBe%x*D$`rYzG)&5@R0@>gtrlCvyTJu6~IV^HJp?PC5n^pP*XC-znv8jE# z99@;FwWM0&pUhb>OV7#evh)#WwS&=iMdu8=rbXwOm96+SS3hiy)?IH^<||#ro$*U{ z&h~xhd9Nt>-dgLu)?SqlR>&>g{8;bM%d{683nC`m&G~q8p$SjcBZG3ZdHS>am?_+9d^CfoA7t<#tyCcDx<%hvqMsRc(4E#`T>VY3g*@r4F_%csvg zqmwEeGRgK$i=bOe3frY%34@~2iIE4kU-^2u;HPkn&(ZB|nUAmUH&3%me}3h|{;!-y Xm)O0V=f3#>3`7P`S3j3^P6X00001b5ch_0Itp) z=>Px%iAh93R9J=Gmp^C|Q5?rVCvF8Z1RN~V*8@8`8z=-y47i0TU3wja(%zV%6eN(6 zV3tf7uchFUNoWw<+7J+gtP*f(A$=v(q2OS36674}J1>_%y}Xx#_=SVy-OKU0@B9AV z`vv}Y2_bwTgnwJlzhm-aA%x%9a~* zftQ+}I7j7FCkA)5$wG4WJfxJ?C@=u!^q;x@sJSx-lu}yGp655VT%0ZgMIxoN!Vxf0 z>^B)DA%t(+HvURxVEpW0pJ+b4)cjbdCrR5uA%wrUu}L&kR=YI-r}C*=NLodr;BHd5 zcz$%>PwgJes7RtJ9UldIqqFA$Xu*L-2IIJAwOhgGUazMO2L}6K7y_VOe8u|5*8un{ znc!O7*fcr@rv{W#T4x9QLzVmH*&L0ZPiQVI(Og*4?yqX15+UUXQ`zL_N?PFFX+O&k}K=^XW+p%-23+M@z8voLWwnbTz0mX*8pgK z=>P;v3{a>x#==EAA7j8MXfmDS<*&H_P91BdX00001b5ch_0Itp) z=>Px%oJmAMR9J=Gm$6G*K^(_FPYXpH`X}U!p;)`9OS9PO(808WAQZt4;;vA-NuY~# z=xDY=a_;OC&MChU&nhxn*?>!UE-9;$^ z--G{MLWrgiqIp;A_xao`glIl`xlA&dhmxRo#DX4!PWdJ@0W)4^^=8GlP8onI<(gLTYNng{7^WtrtQx*XD)*NR6lTxPq(i zR`poDQYX9Ba0+!-4yu+)6=PL|^ObpvNa-m*x+c_p?mpS-zY-vZsDYaaDW5Wh` zv|CcjKuQ^eVW`KBYOV9l^Gu}F_=NaYyW6>F{syo%H^gCLMTZz*X*`+#yL8ijITz|UtQqc!*=3GuA&(y>d9eF| z^2LA?oHt;+Ypzv)Xh>78aNd9l5@O#S9put_c>^ll1nSch_6$&|T}krk2mg8f1}WJ+ Uw*b}uV*mgE07*qoM6N<$f(LG5$p8QV literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/2103_2.png b/public/images/pokemon/icons/variant/7/2103_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d3795c35070cb1ff48ffb2c8e73f203334f7a346 GIT binary patch literal 901 zcmV;01A6?4P)X00001b5ch_0Itp) z=>Px&KS@MER9J<*m|sX!Q5?rVS`RfNqKD!})^Uk}iG)P7mjv_0j0m(`WDyjBK~DuD zNHGc{=qVvX3nhw#6b2DK@xNKQg$@^Y3Pmv@b*p(055w}0Q7zT1%PRquJ!}i=mt)0Y~Q@zU&_SnGN%i` z?fvzB9{@pwbPK6v!L>k@lvVBZzVE-ZEa-ZI0v!(c*wO4?0cnSum|f1Br{ijEKvf3|`?s;-(TNoxh3*9iMzeYK|7JluoYM2&zPvF{ z_KyK@=}Qv;OADh~v8M&7Ag|mSx8RO8pXJ!8Y5*eP1n*wI03bAQ8-QdiO@F9S8&W$_ z+u@S2G%an=-^TOa zKDJhsv6x)q+_eq>-oG|Ue7dZCNIU^5NPx2KEo`kSv)VHspIYU0O*3mr2qBFl7l0g` z7bv@29g=^^s5Ah`d@SCYMFq^HGR0gDSSJgrI5kbP#9m%EKp}*zYwujug6e4oxd*Gg z>;$qXr?{@Yb4B~~vwN166r_6T1fyBU7Sz6r?JBgKs@vTejAjW}oZ<7HS9G;S9N*2J zTx_?V9nz>YFe*El438lM62LfefyLw!>~*(?=NQbSGJk*!t8Fqo_7~Qc8@t*f06ci} z(DC}(F{l#re0+xTnuAvRYW0mjVtFSRoS$M(G5Fy{i1M0)%*SUiDh=l2GaNqElxI-| zr=Zl&=^olHHchjnqM|~oMW&y{U`y?aSS;qP;#um^8VKH$QcAhI=A`HUW{UP$P$~rS b`e^tKXK}RdEVBRc00000NkvXXu0mjfO-QL( literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/2103_3.png b/public/images/pokemon/icons/variant/7/2103_3.png new file mode 100644 index 0000000000000000000000000000000000000000..e24ba1eb917e80e521172af4145ada3411909f2a GIT binary patch literal 882 zcmV-&1C9KNP)X00001b5ch_0Itp) z=>Px&EJ;K`R9J<@m|sX!Q5?rVhOh?%5g`Iek3@4DS@sf0=m_aSBqSg7K@gH0=u;#` zBSl3mNRlWp7*^m*I1mXDK^YRG2EAm7x+b!VJtTpM4?YOd>0zAf*;LrQ*FRqv`<-*{ zz2~#<@BGd^3~WdUA%zf9Zy$EeL1R{Q#_o;Y;zkqVaqCkufxX3zJZ^nT=9pFGSh-kD zbiS~Hf;=|>TRRB~^4xez3Ym<)0pLzmI{>le7yuia3ji2~VQD^qTq|&DVtw+0JU3fA z37|3!Tpw3`5SCUUZ8>-tsFHG3Z*Oca*mBVF4GPp-+=!>7a37=&mvVMbc2aE{P{rQj zMiV9zOm|WJ7=X#>o2(%%0}3HzFu$JavLf!Tec1<+nO=aE^>AAI*c{a1l!DPn+BLhE zt^(j%{SLr_>!+=?XA4k4&Rp*>;cCx$xL5B3VD#fMGk@X$Otduskce+n`*p-Nr0tDb zhfBn_Inx&~otkQV@FDt( zG1rvsB5?$$AOR|N%NXqMH2doY0%q)Fo3WhYOqr7l%qp!L2snb$*1^&wEZsDmFb*n>*-us5A(LYgUYjlR^Own-_4Fvth=W}`uyc2{V`tmh8X6( z1eop$G2T5z?lrHaIUKLSq|W7OQNOluE+eve@oIq!I$N~_D++a+s2DWzN*ot3Ye`=ng`ZGNlI(&((? ze-<1c7WDRm8+X&(^ZCous`=EVyDFuWubTT#*TI973FOqh|02tjZ*6N+{{R3007*qo IM6N<$g1!iuTL1t6 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/807_2.png b/public/images/pokemon/icons/variant/7/807_2.png new file mode 100644 index 0000000000000000000000000000000000000000..6e070af347d0832789515716373d188f0dacb73a GIT binary patch literal 780 zcmV+n1M~ceP)X00009a7bBm000XT z000XT0n*)m`~Uy|8+1ijbW?9;ba!ELWdK8EY;$>YAX9X8WNB|8RBvx=!KdMT0007) zNkl=RDbi()!a9@(BUlj>3|AecgIH91aF)P-R0N|Q2^#*gb+s4#A}|^U&2YGEuav>ICneBT%U%n>n;-q zNT5^ER00Cb^=X(m6A0i`H1h^pamDEs3Y)9tvp1u!xNzf27WSV3i_aAJK;X1KU17u;cMARS>*=;m}u{zVJOVE zv3K&BuiVGY-pfizrEl=%`xzRB!X!06sZ@&YKr9Q_Gg1%0+S;0Jr0spMps0!yC8tDV2dn&Xk=7wu%L|B4_P7KweO#!$Lt(6_tTT7GmQPm(={Y zMGYJJw2Ydy`{WB%>cyFOkZ|h+lRua6A1R@0I0S&(^%1wI$=VBr5C%XlbT6b*FV4h+ zY#5~sw1wyz4#}c1f#+{EZ|leAd^75MA#DK@iBUQ`yYaL{Scr`STZNHm@8S5_3cfEs zr8YXrWH(sJ`W%du1U=g?A}34;J&5Ux)6}{jTIDC0kF9~ zuZ&X$<}R%3I=*Xnn0?WU5Moy#{P||>__fpg?bOZga9!N@WBdXq`vl{j{gV9v0000< KMNUMnLSTZ|ad9F5 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/7/807_3.png b/public/images/pokemon/icons/variant/7/807_3.png new file mode 100644 index 0000000000000000000000000000000000000000..19e59272f8641d0768ad5ce0d9aaff9547a7ed34 GIT binary patch literal 780 zcmV+n1M~ceP)X00009a7bBm000XT z000XT0n*)m`~Uy|8+1ijbW?9;ba!ELWdK8EY;$>YAX9X8WNB|8RBvx=!KdMT0007) zNklF|9KiAK2uocILo>l8e40{pTP@94E9lb2B+-+{*g9AsF06q^4=%0+ z;>E#ky99~-*^2}nVxz)xy#?lyoa%I(yufC$z-Hv^T?Z%#s&rVG9GD;w8blBGNnA=xFf|tE z>djUeHGB6d6spvVH_8`ydMUv5M=yBXd4-kw1^{jh2bda*=j??-2ooS5x*Jld7jKj= zFy5-mol+R zt=Yos#W_4BA9JFZ%~Z&D9j(Z?A3eHApq1*w#u3{4I{@UtHKiqhojZsH+_Mzh7Xos=vB`l60NVRI zlySj-T}+gxC=Xf4*6}e(kh=yLGcWSQq!b7{37R6b0isXDKfL0000< KMNUMnLSTaXhhbL$ literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/8/6503_2.png b/public/images/pokemon/icons/variant/8/6503_2.png new file mode 100644 index 0000000000000000000000000000000000000000..0098615187e6ce376dcf4f790dcd8dc9d81bbab6 GIT binary patch literal 491 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`)dPG&Ton`)epjvjcJAih=(?bwpe-H!DIsO&qFMr75`O&nv3Kv*>gsBs zT8oXx{sJl9k|4j}|44wr_JvX#P=d3-BeIx*f$s_xFoe)BA&Wud6y3JXk0wy_)OZ zVO7o4NQahPy`t+^m2}P!4P}$vF zcxX|sLd6xGhs%Qw=FXYtkRbA0v3=3C0D%?F#ow(pe76W}^10BplJQfOwOo;J(K)TN zXQP-sWv;N!DRVcNp3FVdQ&MBb@0D+0lB>(^b literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/8/6503_3.png b/public/images/pokemon/icons/variant/8/6503_3.png new file mode 100644 index 0000000000000000000000000000000000000000..64428182df0eb0e7497f6396dc89c20d894a72c0 GIT binary patch literal 1024 zcmV+b1poVqP)X00001b5ch_0Itp) z=>Px&ph-kQR9J=WmtSaGRUF4ZcdRB4-D1;%Bp}=?qoc4QM>iOgLFqc7g(A$C#69d` zPD*8~L_q?AnJ;CaWmwpQb+|rA_EZGlv@J@(7B;}g!oQM0 z2;nU+EQN;bl&>WqKzb&pC#uP<0x1}PYm?Xateg(Q}WsT_%rvX@A zSYl4DXkSy-w4Z`JdHI4aP5}rZyum{e3Y#^Q0G$BaF0oQjni2Auoj}rzU|E(9e91hm z{iPXUZFXM&J~29_zx&%o`JaFPrk<j0AWvSt zKt7Yha9v*c|-M^E$VTNicCppqQ{gP^KfpaD+VoLnKF$x)BS=-S@E-@^*D zyIkbh)vSj5;p(LJDQwo701t+N^CvWAjk7}|di>&>uL3YJIt51>=dR7plNwKP`}5mc z!NEfj*594hKI^iG*V_v;s|O*LxE_rG(6zn6waM#x?E51R$Y*k_uCDUhi$iSnC2<@F z<*(*gmZjlTp@!>fsCHnX0ZWxCeMu95{zROK(J3Ar{FV1UxI!=%rT@#Jq$wY+757D_<{m!8SdT`n>(Fu=W11%R=!F%t2fCOD<0dKs<@ zfN}UC(u{CoWH40T& zqyN4RKCy(2yQf_o#)6Pxd+o8BdbFxK6|d@4yf5ayZu-v>*8b6oS^@oMRQ%uA@5T)N ug{eZDc>n+a4rN$LW=%~1DgXcg2mk;800000(o>TF0000X00001b5ch_0Itp) z=>Px&H%UZ6R9J=WSHEl9P!Rr7iW4-{AUrf4YR*Hv*ibOVkPHDs$3O|0oPfbYCQr_g zCG=15VowmZ-}^en|v;*<_OFp{Nvci;Q& z*AuV+AtGLcofi=zVs=;fr9i%V&SE0sTjzdJSVHAl07de}RVbyF7GcYjCjlfPehzy{ z(joD#bzu48DggNG&2y}jS|TELS}7FU53yK({SD(S-+B*DuYr1Hs-TDS<~JnQL-ZDKn}cw0 z^@ zchhO!O{e)=^}}K(j{p?sZl}QPu1xPshs?~6f|E512d6ucD-kj8Y5Y?j|d~iC0`v2I# zB`j{Iz?dh1im38Bj z8~~5$^Q{uj)LkI#(r)&T2B?+SPy+xw;4EU(GnATi%ZS^{E~8dn^Y!#x3Om`HZ@2nnIc_#}t@qXDia zd8KbcFE&{p)dM3#EXAQuf?_+op>`>QVtWV&(@ TDEpzC00000NkvXXu0mjfgx{GP literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/8/851-gigantamax_2.png b/public/images/pokemon/icons/variant/8/851-gigantamax_2.png new file mode 100644 index 0000000000000000000000000000000000000000..081d8284b3d9888d89d363cef05b672527e645ac GIT binary patch literal 891 zcmV->1BCpEP)X00001b5ch_0Itp) z=>Px&HAzH4R9J=WmoZ2iQ5eVn)^>3Tq)8X27Y-qai*Rj*!;TIe9K_*5tGf_7C|CzY z>X0rSLZFjSh@l=>hYk*1y&FO+?HG{5o4RO0TwF@{I>hhs?&Z$h#e^>XAb4KB_r2fy zzwdkB3orx|LeMbcjKqWx)S^=w7372a3>HGr!TI5^SR(CSfNXYQ2|*By4I`Fr0|5#l z=sxPDNr#7n1ZOb2umk{7y?zr1K`21##<5Lj;;FsIj z!glIHN}M+;oDP<2RB^SiD}8t7-$*!K4Eq7V@8!+JIh%TmZy}{(tWf347V4G(zud;o z*LMJbPT@vEF<4qlRe790uRr_&&{fDUx8?Vt?QCr$*Qkb|7}i)jM(ff8fWAs5u3{ks zEzV8h+v-o$Rv$&e`Q^5RJ2*cKZ6(9iEdv0sI5(Aa>SS>1EAzCzGEYQAG_ygb>yYU> z)U@}>bRD9Z4cSqmI*Sm3jO;WS*=e$$z8Y@lVL+bTbRBBZseGoH4I-jD;dso@;nYd^ zuMmQo_C7W3eF>Tb&UBs80jiTRB!5&$)mQy)P`KD*h6CwUR<{h;+Iv2BxKjYY`1J$; zpyK&3){bESXkB_CAAL;Xe$GmkhJ@Kj;Qdh6?{sl^F zkP8T@r^PPiEg;|hpW`P6jJmo?*kNY$4WWzfmu1%9=kgzkdX00001b5ch_0Itp) z=>Px&MM*?KR9J=Omp@1wQ5?rVmM#uKiV9g@Xdw994ZCTt(JDEU|gg_=~N_+ zwnGoMb}4i*LNnMxw}gO;23%^h)Iq_LTLW<^fw~B)~KrIfyi zdP&mZ`gxoSSSH^9FzTJPvFo}$N-14Q=b56YS1oT5(>9eatvIfmI!Z zbN}JX%NdK}RGM^QVMiAhb_{47xV_Qk#DM2261y7xjoWTP^4or4+!RNW&_*tl4eUIM z$}d?f&ysK3weHVc?;CP?Q49NQ#25qLWdv%N|wr?;eaGtf?GPZhl#oFrmRZXm56r6qPK{d^< zpLP0DLG|F@I9nbHe7AYL%jWAFk$XicerlVEs#+OaGO{E@w)Lf&9XaUlp`zY=yUEI7 zJ${=BgN2j)^up#{xdzoVxMd`SV*WM)USAw*SAle(*nmhlI3ow`z9y%ayt4DhfA`Be zHIs|B&9|EdOnTtC00mN>?Hh3zq<^g_DxmZ2CabA*;4XOD6o~~G1snE9DQx`t?JTvf h+~g*7)g1qq{RId*ZA!i{kAwgK002ovPDHLkV1j_ZxS0R| literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/8/851s-gigantamax.png b/public/images/pokemon/icons/variant/8/851s-gigantamax.png new file mode 100644 index 0000000000000000000000000000000000000000..73fb57b8a5ad10fe3252dfb598709f1fb8f23113 GIT binary patch literal 879 zcmV-#1CacQP)X00001b5ch_0Itp) z=>Px&DM>^@R9J=WS21hbP!Rr7Od2%QU_3O1)SMyFVnHAjLjnmYbS!kplmrYKGI

JLOpeea62S}@g@%?a2@1(etMQ-$#I}V4}@gt-h1Es z?z_8ZU;;)&Jc)T8#fXSGnBm6)`Q#ykiHNUTHO{3EIlZy4+IN*|iT`#>H9&~&W-fLBqfy{}N znn4|$39Pj@jh%yA<@@2yq5>zI5kCN_*#j~%2mm2Sjj=vMhbX~v+d!>~?JwT}0Oyri z1xkQrwM-fm{aD|ghcAvVfLe9npojD77es4f0`}|4Gt~VK0E}cZbrus5=T_HY9lk?v z?KU1s^X+invT8cZ_e17W;`Ly;e5uKXD@O7B5$T%M}2pv1=tUp2%PlIQh2R?P7Cj0d>ElN{VUcg~E^q z^%^Sd?an#4J3Ad8pqM^^9-g}2frL=3cT~d8!7a}Fy3#kHC!35X00001b5ch_0Itp) z=>Px&6-h)vR9J=WS4~J8K@|Q{i_l9E5qgSbB--=`=|L}2L@EWNlok&aC8Y-;2M-oX z)k8%wNI?U=d0FvPQCetd4~d>cB=pb*ilJ(3BqLoY2qG~74+WVX^o^U%COe7POZ{Nk z-I+Ht-@JM6d%M6T{%0`81Y=B`*XBI9VrQ_D+JKRO6(O@tAv=}6lED}gTpY;>jqmhK z7qv0Q#K2b8l7x9aJ6u&U3MP*8+E!8#(V)b#b2!l^uh0I;6P0svYUCnO=dw=PcPk(-%(B;U*NUdaRr zYrW%=5Z$djxSq*En_fkgryK4-xGeoEiJ&&U3jc5$u60%C^%*^Aj6VR-d@g7{7u)2nS%z@w%pAb^XtnGT(AC#{e?NW17T=B7l0FK8uC;im^dywCiBQ~aU>qT+swHe zOWN#VR5ZVy%(-R{qvHA3kJ83CeqbvrxHu|U3e8XwYAew0-`sm9<%hC7y1j?Bo>x+! zDGcZYf^cHUQ-LLgb!?NwT*i#CLmudfJj^>3)S~R31itv-b==GDGB5WvmKSO%s~VGERO(y zEN%M>bC#J($LbD*rA!sd>VgD~@5SVRJh?O0C6j_YOKru*s;+Y`n12aWB}4^f)nYR) lZ08q+i~P&G#3lYU{sNJC0YXI~OE>@k002ovPDHLkV1i>lhtvQ7 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/8/894_3.png b/public/images/pokemon/icons/variant/8/894_3.png new file mode 100644 index 0000000000000000000000000000000000000000..cc5baef46cc5df8546c1d941a1cc080dab64a224 GIT binary patch literal 784 zcmV+r1MmEaP)X00001b5ch_0Itp) z=>Px%%1J~)R9J=WS21YYKoor`-n(?_Q1ZP68{(xDYC=i3Qc`e-#Gp0lkb;Nek_`4x zyrfV%1Y#PJp^G6Yv;hUup^zmg6tc)fiZ>~ACF6x_@_1 zU+@2a0&ej?gNT@jcvzcZaHpSv=XuZxgb@nbMA^j|OAI1nW>yR8eQ68i84BU2jKe%|#O~nvrvg**vx!3vMX|-}lFeh06~#CXFxz(Rfs8&>z2?!mVH zu9vQ57uyZ9-A<>|9M_w%jEIOm&qLLz!!4zdyMGV%??1?_UZR-Ici8H|;g(YPw*LxM zr>=-row|^W^~w7h=;UMro#e%whsXH`9diz?U%0!ShJCsM!z?Qgx@aPUNw{bZtjR8N z%*>VJwT`=9()KDRT$o<(xb`Y1{Lc8QZ1njK+bY4w(PJVF>X5g8-FU9jk3{*A-@@m^ zvP#e*1Nj2QERexutbO`Mv0g2T*?fm~!~@31XZZ2c#gX4qX00001b5ch_0Itp) z=>Px%t4TybR9J=Wm$6G5Q5?rVDW%dOLWkhcc6b@;8VsH4QgkXLg!~6F6v5zB*HXle zp-WM)aON+lhD4-;A&VUqhb|8FhUy?Uh~5yI!RsLJ@$S6K<$19#e&Kk>@7}%pyzlRR z_uj#S?pZO)Z1*xa|HsC|wpu_DpJIt15SS~CA@Ui+t^*eFK04TOD z065y)P}e4>=ZqmAn{*Ds>0nYXGJjdI`W&`bdHU?B@7mGc29wiso(bfwibTTgA7=nm z3$SAK`PBXzdGFEQhSBE5>=F9FDB9R-@t zI#h~j^=<;pmS$)-w$;%)?{U~(9oofM2lauZdjRVT2h6Wc0WiNdMLz2Q*Y98$q&!R& z3pi-D>k9|Ib{Ls1gOPyxXQf^(qksS8yCxmfV*rhoJFrkpAY&cW3uCw0p;An<(>-PX zIK%qF0sF_9(1KYmEUGl?K&EMq1=QhQIUV%@)(b;Q#wx`$m15dAM$olk3ndcJw(V4| zQ1ii^x#IwQv45vltUeRzOHQ0I)yi{Sxk8Oxq2_}O12zWKwPbAq@V@&;Emd1wapsQG zXt_7~H(D-@mdl%JDRi<@!?+l`5=d^sTo=a^`XmxMXeKfRI}+-KAikIKafx|K8-e{3i*fPrnvy?*wiT jbW~iQ%%Hvx8kPP5rhk{W(nh;L00000NkvXXu0mjf3*KsI literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/8/895_3.png b/public/images/pokemon/icons/variant/8/895_3.png new file mode 100644 index 0000000000000000000000000000000000000000..9ac023e2e89d0c35a7541ad2868a9a807f97dce6 GIT binary patch literal 751 zcmVX00001b5ch_0Itp) z=>Px%sYygZR9J=Wmp^D)K^(`wN(jCn9fS@KOYnkqNx@A?Gj-_e=;W9}hD?QSLCDZC zAe}Qg2xe@Tj6MsU8d16kX(+~e5^CPoArzjJ;&qTa?)~%qGtH7O$UE;H=jXonyWj5w z9(2zlgs}T&@Dw40HQs$!uMJLm?fXRCQ<_})}dW9Fe&mHfMPY*&l8R-;rxU*gg0K`*<^U~2? zBUJqk1<2jwP?hq`0w=eDMHy^<{1E0R99n8MA%w}nt|}U?wl8pavW{WCkHV;Afvc2f z(69euP@h{|lutTeV9-kA>!7?Hd~yINj7k{h`v8DpzK=?I1_01D*HEk_(aE$eQ2Y~C zzJNPh`<^kw9h9B)Q`j=-2`Hx(RnZ{lKOSq`LAeirV~gWJ`Z_2djEONtv6jTJb&IoJ z3WZS#XT6l`f$3!0Vw>G!aAklp+(zpXKdL_gKmhUBllzLbB#O19We&S*%R)z%?p{h{i>n~XNRp@06^jOBPi-`m_{0`wka0pbpy(& z*`+x#^0kPsoZkTrQ+Gh{EtFldkMRSHeC4NX00001b5ch_0Itp) z=>Px$*-1n}R9J=Wma$9YP#niUiWD8hA)`=uZiP@#>Sk{$^dIQdq5I*|gWAPxI%Uvo zHy)Rvo6FImg45w97$~^7HFy9-fpk-9g88c^Zupwm9(K=AXCC+wI)E`!|465)RX00001b5ch_0Itp) z=>Px$>PbXFR9J=Wma%KwKorJ*Zi*Wyf^t(lnNzeFFA+Ffx)rYl+q21(E#S%jKsRSG zWXlkU_beHUw`NP=x^!~l!$U|W5fFvckg9{x#Yzf|PD-YQ#ud^hJ>4(L_9Y-%k@>Q1PA6K`DXDMa0tZW{zCaAS8eSd!r zER>W|Mn=&bkx4;-z#Ri1M8(ANRMDEClrm~`YMf5b5Y20Z5QyeAo>#~7>ba4$y4X_6 z=yZDaB;MT#;oQW6&lLi9Y~3uWlBAT8=hXpl zoN{7sW&Mu(%hd!q$0-wrb3+o+4;EH71K|5Uv)N5zuUcI*1Y>fKk=A;wjT+$Xmj(cD zK3*kA0?cMN2qA!l?F}CFD+%%o zX84Z`!o6;b0A+S~x;Tbd^uE39&39OVhb2I*<-x5V|E|B4*rm<6;x%8_4V#;PCS9@@ zWT-xOr%a`5_w=nTkq;xTrPy}sWIHV~u0Czt(lLeOxjUz5VBIFhlTnLz+Z8;jJQt8_ zdwptqL%pYxOx?D$<$`kM6ZD?*tqwnQu`0+wG28Bi-})!Xy?f5xl)AZlCU3?a(`R{a zj@`{#D^|{NwyN4qV6(Wp{*143Zo4^-amjmqE4Pl*v#XQL*?YfsJOAZp_TQ@Sbp^An UIsE-}8qg06p00i_>zopr00B{wdH?_b literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/9/1012-counterfeit_3.png b/public/images/pokemon/icons/variant/9/1012-counterfeit_3.png new file mode 100644 index 0000000000000000000000000000000000000000..04f74b0fd3af32503ac8bfe33546617b3ab1ab34 GIT binary patch literal 338 zcmeAS@N?(olHy`uVBq!ia0vp^8bB<^!3-obnb*7rQjEnx?oJHr&dIz4a&!ZHLR^8g zf`USAbpM>{i#a>;#AFS;v|Z=l4hypK@9bN+WBE-*tsn#QG+pabr-F!W4CQ%14g4iR ze!&d?QNYvQdCP!OJ3L(+Lo9mVUiRiYtiZz(pyse4XU=c=?aV3RLIKxhMK)G$`l;Gd zAI0#-viSDI6Yu6-7fPF%969;xn$$?)OIDk=?{V(%$b0xlYoXF9e=~*1wI$Da)#p9u zxq7R3-uHbE<0o;nFOSldeE5~+Wzw4s6^b%z)mfPr9c$LBRFt1^-7;FaI(#!@uRyVR zS@F)PL2K?Rn!I`}skl+aU0>p>mEK?f0sA}S6RL_r*-f-dS%EBIQHv}uJjh9pIbtKi~La1dR5 z4gLqZ3a$!*pa>$4&b}5Y@!VFZNWJ0a{P^zu4kuqAG;JAKuWlT&w(rKLVv&W#rAWgI zO|%oDjULVLoSC`F1pltjJ8D$DjjCS%->bTslPS-DnnvMK!*P9KnTF|g-%-3R++k$2 zr0}8epeq9kUnyNL^Rwb~nco$=iTDJBRL@BI7wf;+$hcYI0pZ@Pl{0?kQD4%MvghZd zcFFF>BhC~tBIx8;#lj~l)t1bv`-V!sS=Pj3$lD>0D~>c7@eYcblddVLrsyeoEb=P% zzj=D*$Z)xPOAP9tg5a$W8g`&q2!gMpASfO~?IT>+75|##H1;8Sp`!I3KzI|*E-RY8 z3+G$V`QT`-R+4IEhfEV*PoZ@Y+Has~xt!I{IVbm!*pOdz4SW00FZaVM-~7L52*(@PG+APfZ14B+qm58Q#IOA}U=YDZZ; z*?{cp`o{op<~;LABHfQ9GEYhZ!q)N%**8VR-{5rfWAE+N>AL%Z>9V1K_lSO1b=jR1 z@rAyVfc0R_`I5|0K}ZYhgud(;R>%b{R=5qf61HeYNoy-aOBiD9QB6b(NZHt(zZI&z zytS&bU|TPq+DmxLra3d~f{(l%b2}N7`M{S60ta^%Jy;wV#yHy=&c@jyPWyxS0AOtf U;sk4xsQ>@~07*qoM6N<$f=Xyg$^ZZW literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/9/1013-unremarkable_3.png b/public/images/pokemon/icons/variant/9/1013-unremarkable_3.png new file mode 100644 index 0000000000000000000000000000000000000000..acdb6716ab80d2b5938a392f2de8a24acc28bac1 GIT binary patch literal 701 zcmV;u0z&mEK?f0sA}S6RL_r*-f-dS%EBIQHv}uJjh9pIbtKi~La1dR5 z4gLqZ3a$!*pa>$4&b}5Y@!VFZNWJ0a{P^zu4kuqAG;JAKuWlT&w(rKLVv&W#rAWgI zO|%oDjULVLoSC`F1pltjJ8D$DjjCS%->bTslPS-DnnvMK!*P9KnTF|g-%-3R++k$2 zr0}8epeq9kUnyNL^Rwb~nco$=iTDJBRL@BI7wf;+$hcYI0pZ@Pl{0?kQD4%MvghZd zcFFF>BhC~tBIx8;#lj~l)t1bv`-V!sS=Pj3$lD>0D~>c7@eYcblddVLrsyeoEb=P% zzj=D*$Z)xPOAP9tg5a$W8g`&q2!gMpASfO~?IT>+75|##H1;8Sp`!I3KzI|*E-RY8 z3+G$V`QT`-R+4IEhfEV*PoZ@Y+Has~xt!I{IVbm!*pOdz4SW00FZaVM-~7L52V;U4eR9r>>&Z!?fV( zk>?5k000hjQchC<|NsC0|NsC0|NsC0|5r-e6aWAKyGcYrR5*>*(?JdcAqWM~3IVae z{jb}vGhO1iYEqcY>g5v+zFz-WM0Dm@6nh+DzkTaYBNKiuNxP8m++EqGF$4vTV4*m-3&;%;llIP*Cb-Zz}X3=+vS6 z;nIWJ#cVod&}=szm!X@>(V>FV;U*X;w-qjM)G>n`qGm7-@*YX!@{*JjF5fBn{oe2K z$?v`2FFz<%s#K{`A6hF}1BDQgeD-}m^FB+H5F)ym&!da^Jb#MA7OmAh!T!TT;#~-_ zR9I~-W^ozW%#}faL9+?KvuP?@k&wBHq|vG2*e;(wTPgp`E`!|465)R|8^IGjuXI2#NSkO247 zDI43{z+2mKY?p(b{pDv+0zR82TlG3mqmioM#Up;ayW{4^Hx738foyYQ?t#_!{grq# uUhj4ZgMf-*sNR_8cUSl%{NX3<|4y%3`N|z^Zc7#b0000Tihw&f54Lm zcP?36aJ)oYGigXPq;xFN;4MqYkU*x8El`2UW{99TqlQpI6Ae{{aED}-!s%qvf_{_q z-o4|~yL(R$DpjiVS1l9`6hb8OISj+X`^-&3h~#KGO^&A1B!3NCwiZo-!~6TpyAWco zu-cl<;ykixltF+&s|CQLZ7W-ukVZw)?9}mGpZ6b~od5UPSt-R+XagZca(Q!=v-gKR zzW-cR?`1%0AF<5brn8^(d9KgJ*Ig5yoC@7R&-Hm2jWV`0@VhrZo;Po|jqhV2!2YmD zvs0%(>?vCs*ne|<6Q+z_=`5CaZ`0Z5eD@Oo0TT{~pJ{gLYF)tOWdNll9Kg17!g(rV z5*Swh5UDTi3ajtzBmj0C06!nSil97W3JIu3(Yt8g`I1qmUN#daHjnq_5tb{ueB zdz*o)Sr%~=DM-*CEVRE$R^?K+%iVaK@hvwR3Q)q$N_@9B7H-r4Tc@W0>j41h52#8z_QuQ#_edv=}cDI9s|EuLaw) z$&@YN$^Sq%XE9{U5Qz6I8H=}OOW?Y6a^k~7NG1^wh18I$gVDuG3XM)m+d* zY#y*CsI@MAe}4`vl$26NM$sIRNkM?X9Rnal#l-Sd(VC!?GHP^coKDXW&1-}Zh~_n( zSI6_}xskNG*iy>qbb9tA-s^X{{rd3D7Z=|$cX;aLSh@SlRrZe$etTxSxt$w9s}c_f zBa~8!*lv5rtbgBa`~=9Q)K&z0{Vt78jb6WNV#|bwgHaYv38XUW`0nktcT9N|6OQ_y zXmo1koMQ5C2*y~xdxz~k_KzPFiwWo8V1PxFv|6nQU}gR8NhuW*4%>T#;oQW6&lLi9 zY~3uWlBAT8=hXploN{7sW&Mu(%hd!q$0-wrb3+o+4}TU`HUr@MKC{_PVy{|VGX!ID zkCE1Ttc@Dr?Ux1sZ$4fnNCM1eHwYnsh3yOnBevYlmsc<*C`5&7bq%GI>EOpD4uXJ_ z^Aon*O~7t$%sjAatxL;h?E5}pILC3y#v8NzO>!SH|JI~k;JNq(@kPX8YeA}*00000 MNkvXXt^-0~f)C*SV*mgE delta 530 zcmV+t0`2{<1h@o{F@N$&L_t(oh3%HHPuoBghrg66MM9RUo5&QM@e*ahQrPHLWv!HC z4oqxFneq>G3ri&E(gCU2Ss1HqWdrHDbPB}EfMBwaEF_2o?hyHi0k!hkl%f7j=Xdw4 z&+pxPevm6yu0N_^>L{fQqqXOG#_#!?-llODYKnQ`TU*I@Z z9H*KYq|wEeQiez4<0tk`x6Rehhi^VT{gt}H6FWzdyE|KC_u%WZXEy7bnE@K5xZfL~ zl#1E5n_GJQet-2IAd^%Z0d~4=YOM;LZd=>tf&0Bd8m5>MHR|Z@Z8x`cdKDwSbw5*U zRrEQ<=yd=i&ELKK<_^0D4-t!iGw5J|L6I~XjSygA<>pB$6(jbWI|RX0+x+h(e0ykI zEQy??l%eBP0kEuMY;R%ZhP$)H7@TDl34*DHgye&TQGc5Oa9x+lb6t1Tbqm{oa6ed+p^T7y$}VqFi1^DWxm;af*H4=kVl^ zb$bmkn;TOPte)o;=9{tWx&*-#%PQ*LnC5Si`H=aqChc7RkM{PyY`iu@t~B}$!cfM2 U`fuDv01E&B07*qoM6N<$g8j<~X#fBK diff --git a/public/images/pokemon/icons/variant/8/912_2.png b/public/images/pokemon/icons/variant/9/912_2.png similarity index 100% rename from public/images/pokemon/icons/variant/8/912_2.png rename to public/images/pokemon/icons/variant/9/912_2.png diff --git a/public/images/pokemon/icons/variant/8/912_3.png b/public/images/pokemon/icons/variant/9/912_3.png similarity index 100% rename from public/images/pokemon/icons/variant/8/912_3.png rename to public/images/pokemon/icons/variant/9/912_3.png diff --git a/public/images/pokemon/icons/variant/8/913_2.png b/public/images/pokemon/icons/variant/9/913_2.png similarity index 100% rename from public/images/pokemon/icons/variant/8/913_2.png rename to public/images/pokemon/icons/variant/9/913_2.png diff --git a/public/images/pokemon/icons/variant/8/913_3.png b/public/images/pokemon/icons/variant/9/913_3.png similarity index 100% rename from public/images/pokemon/icons/variant/8/913_3.png rename to public/images/pokemon/icons/variant/9/913_3.png diff --git a/public/images/pokemon/icons/variant/8/914_2.png b/public/images/pokemon/icons/variant/9/914_2.png similarity index 100% rename from public/images/pokemon/icons/variant/8/914_2.png rename to public/images/pokemon/icons/variant/9/914_2.png diff --git a/public/images/pokemon/icons/variant/8/914_3.png b/public/images/pokemon/icons/variant/9/914_3.png similarity index 100% rename from public/images/pokemon/icons/variant/8/914_3.png rename to public/images/pokemon/icons/variant/9/914_3.png diff --git a/public/images/pokemon/icons/variant/8/940_2.png b/public/images/pokemon/icons/variant/9/940_2.png similarity index 100% rename from public/images/pokemon/icons/variant/8/940_2.png rename to public/images/pokemon/icons/variant/9/940_2.png diff --git a/public/images/pokemon/icons/variant/8/940_3.png b/public/images/pokemon/icons/variant/9/940_3.png similarity index 100% rename from public/images/pokemon/icons/variant/8/940_3.png rename to public/images/pokemon/icons/variant/9/940_3.png diff --git a/public/images/pokemon/icons/variant/8/941_2.png b/public/images/pokemon/icons/variant/9/941_2.png similarity index 100% rename from public/images/pokemon/icons/variant/8/941_2.png rename to public/images/pokemon/icons/variant/9/941_2.png diff --git a/public/images/pokemon/icons/variant/8/941_3.png b/public/images/pokemon/icons/variant/9/941_3.png similarity index 100% rename from public/images/pokemon/icons/variant/8/941_3.png rename to public/images/pokemon/icons/variant/9/941_3.png diff --git a/public/images/pokemon/icons/variant/9/944_2.png b/public/images/pokemon/icons/variant/9/944_2.png new file mode 100644 index 0000000000000000000000000000000000000000..70af4937c8f74b6a22667ae9c724f919c73e8dd3 GIT binary patch literal 3246 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%0Dy!50Qvv` z0D$NK0Cg|`0P0`>06Lfe02gqax=}m;000SaNLh0L01m?d01m?e$8V@)0000RbVXQn zQ*UN;cVTj607GSLb9r+hQ*?D?X>TA@Z*OeDr{R1600Fv5L_t(oh3(coXcJ)^$MJ7K z2-%85LJJA@KeQ2w4nn2LQ0SncRf>xQLCj?O6hQ*ELUB-Vv9v-cR!|UJLMA~Z zgNTDzFghH0fff$}*@6&w9KxLm*1>z8#zOBmKKJlEAO6qVg_KepbO*|r@rHXsIpBBHK;TIK1fo0voz0lK*2wuAHHH9t$XF{Cz7L{z+x zV|F46KylmQ`-7K6Ds=#Ds1aa0nPBnx0sxOLJ>g9I0uqe@Q22O93#kPZ5f#n|<0pst z@TLL4(6J-l_iWSBM*0T2l{-Bj2jJW1-97tdo7VpWhBNX| zq;>`2_p+u(@~q!YW8E+JA+t>j+xfx!+T(vl`U37%y`#0W9G^<{we?of56%~`_h7jD zu2t)eue6reH}J%*G|)X5t!f8=8!KCV{WjLF(5iMAyM2+y z)rW&UB)$6&@Gj+cGU4q<7apn92Y(NWh_c^hkm(Z8eJw=98z^4L0ccfD3+N&LGP#R2 g@g5(p|H1vpFK|N=)Q%b1tpET307*qoM6N<$g4HP)o&W#< literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/9/944_3.png b/public/images/pokemon/icons/variant/9/944_3.png new file mode 100644 index 0000000000000000000000000000000000000000..ef7618c9a9c43bb7a5b2eda2203b86175b425542 GIT binary patch literal 3229 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%0Dy!50Qvv` z0D$NK0Cg|`0P0`>06Lfe02gqax=}m;000SaNLh0L01m?d01m?e$8V@)0000RbVXQn zQ*UN;cVTj607GSLb9r+hQ*?D?X>TA@Z*OeDr{R1600F5QxN=dlE1R0KMM-VeY0G78 zNqK1;G-EgGV4m?(=68JN>3Kf=pSSTChQVKs#|0|J1**mcs>TJX#s#Xz1**nTpokdh zblT(CfH(*g5#unGrp+ffiF5>L;*$C`^Gn;@r&b+9Dg#Bt2*(a+(rN)n>etLntx$Hi z3!n^j1o%=JAbu19prv(&>Bmd7s&W8AHz_5g5>P~p3f}~EO%0rG?E~PgskXjHa|van zZJ=4X#{LcfE|X^^`$cn!-vd_oCO)(WJN*D`?i~X#a&?GSRc;%pTtRqW)?lZfx$$Ne z))Ga?XfA<%`^@sg#g~z`fTgPEeS)rDe^Fau746_`0Sga?x$p9sETdz6tcM2}p4|W- zG}O$F)}yq%wt?E{8t`^7@|i3E@smhVzwY27`An9`@+7l^?LT`+3ilsiUCJ+&0c$^+ z@UpwzpT7r1#HiN-oa^teg@{-Kg<}T*N|jRrn#j*4H?dB<$N%ep@H_Gf9GMu@mPc3z P00000NkvXXu0mjf@j?^L literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/9/945_2.png b/public/images/pokemon/icons/variant/9/945_2.png new file mode 100644 index 0000000000000000000000000000000000000000..5a4a7c6ebe5cf631ebcb7407dc0d8f4734873353 GIT binary patch literal 3584 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%0Dy!50Qvv` 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%0Dy!50Qvv` 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 J)<~O%{6AIMPiO!D literal 7086 zcmZvh2Q=IN_y23uo{gFneLjh6gO_%pw`q-HM((w!1(G( zOoUfnIP9zAUpNhPOw{nN_y-FM3nwS1h=_=?va;6DrInS{^VP%H*x1a=%Lf`I^mqq> zuaTbd4aL<-#~U};9%-s7nfO21%2e`Pvhe9qg9$a3sPr}FJGnjG+dswU^PsK<4YHq7EHvSvt&-%UBj$V41UWuh!P03|1RZVJF6o(V z$<p`fcK^iDi2^=H#MMLrNc z5RuaE+BW^BXo|(oWmELXEsM$>G7~htJD?j37BPMUh z#N+4tfY)zV{|qX&Z?!u0D!#!5Kl9lyEqk`VVlP6x z-2Cr*aA;Fw=%jZxNHh!}aPmqvzpRYmPx-z}tyQfaDKj-z z)hGGlr6O`9pn$4^jF7`sBWg$xX0x>?BP(rtka2vfawMnC!=p@{dRW2>F;W?S_5;`= z&wCyXQatQX(sVC^v`k?eS3*zMComVg917=UFe6j_bW}}D(8Jpll~2skaMh006TOp+ z`OrmFk{(o{G>C#ITvAY9*11^0{wxtd+y|wE#KLNGSJL%=8dL?md?VlZb2&hluuDh3 zJyIKn_>d7YMl%%HtKb*rFB zD8jIL^jP7Ed$HP^u|2g-jfO77z2be0O-F(LupK%vP+hNW{WsHm-=nm z{)=-IR6PHLC2_H|0?69@*3=VWSjfjK5>cZ`Jp8f%EHcHDR_)ftVVm}3TkVQd`P8j^x z*S(s}1lK|=j7KJ?xN<@}*m$Z~0RD4fWS)r?F%B7g6;Rc+iyjNZG}WZK$)w$P*&1hr zH7X-AXl@~rve=<}xqup;ADpGhTC+Oc|GE)9x1mMa94dCMcp##nx2uf~Sz1|^TLl6? z3c{0g{Q|H+DXh1aI3`zf`d3C((O4#*L|n0oh`C3J`dIF~;NXF*8wJ-RfMNw^xK106 z(5oGQ*Vkf8JA1aEd1zSH_qAlMLWZ;^&^~m`HQPbUux7=6a~$V9=KEfc@pgBBo(%iT zp_V;Se||3uw#c^-Jg}T|Jz;DVG1W92 z57J2ykfU&{w9SWQJ7k%0tR_)*g9Vdq?jaQj$-Yg^x-~T!9OwwU?r&r)`!@BPRtPN~ z6RWTjh^h&U09rPL`1^k>Ay&&}&Fn*oxAp7OC*lM098omyv$<+*vU$`*hb9^nzf4H+ z9$tclw!B7R@gqxa4qiXtS+IcNMpqAOt^{9*4+By`a6QAeh|hfEHZ?eFx=X{x@7SVn zwOYeaggKV^jd#yG3AlfR zLFwHZFd=-I=F*LyFi|x(w??!QMw;%JW2IipP4n_HX*6oVAg|4?ZjBXGe-~T6_<1^Ju)sygrGs}F+e%Ec9R1Ns6 zg&^PZm}Bm8I~qlJn=a0x*a)JV~$OFrPnb&uXNIC<&77C~$51cGoHAuo1&KLku_GHY% z1A3coRI0b==U?BE6e9sk{WNC$uIB|v%3Y6K)o%dTLq;5tgpJA)F*{f$aaNY7N)9InKzUbEo01Qjcw(*10)Hs-BEqt z@}A_l;yu;bF-mj#Z<;)zvujVdlKpSffm#kOYA zYI5qTt|;j|>C{=ukVtlA}PU4s}f|k!Y7V9W|qwDvZu&PVU>Fs!N)^0D~8-Wh9 zt(WVorPH~l7!X&n>g7z8yPRYb=rQt8L=}o$LWE29FCDnAv$i`O44h|~^+c#Ql56!_ zQ42S+uvZadi}LP*+qPccJD6A>afMj0P*RuNpHcn@bW?WYg7ceRVCYg^vKyrptVZk&W+O3%k?&~TLo)1^y`z4`XM0A%L&ofG+$&6N*L z{+;9y`4J8NwMR1DX5t)*dgI>(2ZYlKCqY=yr>HMVfYI`yOY;q$FCdTD57u4K&2oL| zKo*qu=t)j!h{uoy;&QkAVqGEG3>3O&GPjebb|@JJ`b3^}n9FpkK|8MfLf3l2Ov?V0 z;Hn$Ell-!dA4r3^7{Ih$u6tsZcIsb&0WCs}?7GhRwNYCJQFAE51Bf+1PrIH({9~@P zD8*=cX_*VGR$HQNYZ0@EkwCJ{v-V7R0h|d>({Z_;l8E+MF>eTMtAmN*0x2FVa0*vaRj?fQ&@spWm~jIowztgpxmCZNJ38X{ zSH;fh$rty8?_s*n5l#F{f-_xXQM!DjrfN6Q!u&rw;f8M``jeK=kY3z*L^e`OY^*z8 zfEBBZm#H4-jq1*QyH80`WBe2kZ5;3AM>cO!S-cybF$4VImk0w*f=;rl_tv)C#87IP zL~QESpR|m(Kf5<=Qdul_D}B^^p%>5vGRSr(+<#HSH=re1Z9*}r5#4i>-zj05mWiDK zyO?WewUFXCr<*H_As&78>bIrK?JXG%ep@2!g*(Nlztg&rQyi;h2d9-libY`a$-%@h zet(SW?~^kl%aKXfK7B!?oW{aLceD0-Er4O{o{5Y*j}}#lozEe74m->jKS`V}RTHIv z{W^U(()55%waWC-sQmm3{@}<^mkz#qw79Q=Z?4_iqq4Xp3z+=KCvq`wdw}u#&>7Rq zmyT4gSj*)2tSAw~Ul`)4l-q;l?ur?utVf@{)ul>j_TU--!Y*{7MJ$pS{7*isQ zQWg{PO(pMwZN6;-a=$Y4UGdx?k)qV^^0NEGlv+wnPk~4=q|7OcQBNn!T8r733nHmo z_2BkXfOGiPz~g3qzT&M8Tm-FE`QbsGikg0l*%wr)S$VNi`FQt87I8yV+lxcf>}hk8 zgubC4wep2#af&vZB`RtT4d{IBEH`9MVFg3I&oK0bVNf?{SZ^D;_i5O9xX%6!i^h(x zJdwCFQa#HV7uDbjk(*he=Sc=)QvM~)uvjidw|wMuc&Ig7^%Y{(PlfWl@*$TI%l{{(>nUouJ2kjSE5c+XasNm!`!Xdhu|tF5USXV39iP!88VOAJQWu>=qx54 z4JcCE+rRhYi#J;%MUK`->*kWT3i~%C79;LgB z|2+CPL^kOuO1sOkzXY^c<*{&HG|{rdZBeYVYD`O5pIU`m z$O)sA+p`z;025Qw*@q>jI=CYM?2<7WK3|vh!C1EFG+IZADs{y(tP|wpmVeLF{50SL z5wL3MOaO{p#9hv}am+?5zjXmCgAc3GOu%)S zSWt9(cGpw8zM;IEk3YYNh|9=cxfDf|2~26=37kPcOJ+XcNT<4BPeeaN=Ca#Uuo0%!;=C^!0E(RHAuNb4F+n3nfGDZ?(oxQb+(_$Q036N_Y&K zr3zsZZrm&k%kCbY2jJW@ZmS7`Le9I(?vpdhf(9XpTWPwqq@qeuj|B~$gwcFe5~J53 z*Jq+xj3eUXtU0<_>_UgzQyEX`)Hirzyl_$z6fToV@jc~S4<8bo)L_W5UIL1c!$(T& zdN+R!gz%Phmfi@S+98HX-Od$0&B>)H{)%%r{{M$r_$=XXhf4rz!Q^G@rr%$5%N5#( z?4+g#&(`uV9Zy-o8f zk7*h7vYMa>nUk7FLban2Yd9#?GM||Dnm%5o4sL9LBA$PlI5s@c1qskad zqUMl?jaQ)RFmA0AqkCki%}U&#t8NTz8u3;%I8I4_9#36Ok`ax$P5i62fj0R&CBdHuxh*n?nMxcY8(@ zS44MKiK{Ob_S*r+H~$^{vC&&QKST;qFpD3e$L8-`OZ>!bQ1*xK@BCM?yOQL-r#!+- zPp(~)|6EI`lrMe=^}mwhwQI=4XBG+cyE@KAqPPOO%}Q~y4sId2QNVlxUJh>5P1tclBri@r%vH`7#!d= zAtMJ5XEhQ1Zb(5C#uWw^eVf`kxC1ukdD5mAZydC#nrqR%2*l!Vs$ga=Q0?hmi*c1` zMe-h{vh3E(rAnk%IQ&jTn62e2S8=F;?5C*y0%eFq-)CqrmKY~RL4*^88tB!Mbcb8b z(oQ}8a!+cyX&$1UnG95Ude_nNNDN=|2V|18R()@zPpDN_Up>Bkge(iX0_}?2ckH>AwK{VVxfY(AZCSC@pV zOP)1Udav{IxXgngB78sGm4RO1AR1GC^&F(;-#XvAheqMrB zdQVQ!mDV%kP3E6$Mr3@$kcwWAe#~^|%qk~uYq8qalKa6s0A?)zaJSyFH)_YlFdkPQ z5UYjvz$+St>`bmWA6xzd1kOvu7)I@Q8V=ye@m+p3SG^eRZsF^J>+ZG8Y4{#E4bP08 z-mas%lFJ6dgWfK`f^YB{*~dJsZEAvnGqSH$Jr%$&5S$NU@CeI4B)2s~>NdeDwv70p zYj&w!6UqL@jwl_5REGsN+#5z*qG3LiIxIkA1z>3VA;J^IaWWd4Xagl1Bq~cKCp^$t zU<>!1$R}A@z;m_@)iSjRYwrh%DzU=F_&6q537=zB7>QS_ze-}YldoC<;k~?!0+g8M zR*k+&abm|Ql|!ahLr8%=-dnrLd77dgoOX>5f3sXtQB)0R=rzOmVW!{i+_s~=cn{iHI~+9N4?i9aNEBK4NO^mLxlRcX>%6PNPq15Jo6k_J%$CL#bC73z~>VU)$t! z`(XJg$F-7X-oq6{qd#!19jNubDRvOBwp~Ssc5wyKUdypqi`NqiE@>1@sR6M2Ur%@I zbRsAROa8s`wv>2e@``hWk0LjVt5&Zuy(b&9U zf?oq)z(9K$gMNeUre<6Sz_;}O1F3in8*{}KwqMOCf1Qp|!7VnGmDO&D;1uxPWY2`n zhy-+o=N~kb9^r>yTnMdZHOSkcwogU;Ke6Yb?b%g>ub0onbDK;_pW^lxToUky^3Z@( zi=sz1jGk6M=IRW>ZlsxY_}|H9#Gm)E1D_%9L*}Z^F_G@h%V)S&BAYJTGyK}ugRndI zF~@g~5q5W;J`;!CHOfK<;%^f_aGt50o%rz_3M#nz1b;uG-yC(jD)M>c`ftFlcY0Fs zf({a#=+<%#+KE92YfK@*d{glMt!5)D$CxnoH-ubQ?{s73#TsHGq64u1TTk*D%~mp* zaCNU17yPPO>7r+b@V|Z!WUkLc$c*ElrLR)H@faKGFY^o~6(*hkkg5FR#sXGzrD)=8 zx}HKjU~s_&{J=H2T_@%|H3p4ROjYNf*$^6lyY4@cmt~)O5dDp85EP#_BF6TlB61}* zK*T}q+t$w?T_IlnaA`ZU2d1%LdOl#U9bs+1Q)djC_}5)~r$^;Kxq!TonVgHB@%!l5r|Ku5kQPD~GVPq1E>yLBxIRQH(ulHVkQ3}oL)ekzeHx=7e( z{3^?254KU)^xk#O11;^=eZjjvmvag$N%t@(=L-AXbhNtk59mQDOCWg1dXUGFZ6dHq zLL12dEM17Y_gPkYD!1Q9hX^B(MQNk zZ>xa*Ir~aZeNYH*YJ#Lvu>L?=d7oF3zH=`C0~qX82_E%fL_ggIJ*S>JB^KQ`fYfL5 zz*4{TS*sk%b;Qb|XzMZsyRQhR*|v{?SW=5&gQT>KK{5O5>hlK!QwCm14p3A1j==*1 zgcZ9Xh`iSyYPPnwO-d5bp$SRh$!p)E!*{ R)2qMTG}ZJ}E0t}-{|D^z=luWx diff --git a/public/images/pokemon/shiny/658-ash.png b/public/images/pokemon/shiny/658-ash.png index 0d65f0bb90089fc43d9c9375c0df738ed7b97f88..f5de608708eb8b505f1e837a4a697ad7e2c3f4cd 100644 GIT binary patch delta 1240 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 N002ovPDHLkV1i==_zD03 literal 1048 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 t54P?&D82Vfiw diff --git a/public/images/pokemon/shiny/945.png b/public/images/pokemon/shiny/945.png index f458bf630d6cc0cf7ae86fcc968348c3c47994b2..ab3fb485bb28d9010d5c42660ee71410d89929c5 100644 GIT binary patch delta 931 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 LNkvXXu0mjf${xup delta 1830 zcmV+>2if@Q57-Wn7zqRe00014Fv*RPE;D}tbW%=J06^y0W&i*N;z>k7RCr#Un7wY? zMihm)1OdC`0AiGKHIlK2x?rnxD|onI87iE`092Mq=V86K_uEh~Gzai@nNj zY9~60Cf3(Y^R4?hTZ*5B_no++Tg-n|cGJ0Z6G<|MZWqoQRbHvC3JtAJDx*(ax+FvMI{ZTyVf+osTx84Ok+Bw-$?Cw8E^hT-l zLLcI1BD~XDDW!Gm4HtHy=MR1$PAs&p_u6})lO9ObZi_yfzC0 z5sB1D{G{4hcep;fNp%hl6X`(dTGze!W|u;P&DvpuwZD8;shy4yhs{6Gv6Y5=?r7UO zD@pTK*eH#W9c!v@Vrc71-BzUek+217hmo+le<*0T^)Juyz4R9%Tgh^|r?TS5!%S|_Ydf~Mm{_q0U2i6TC-{#3^6a#({B z7>S*kpr2t43bXw`KwF8QC{QDSMjBEd$3*Vc6rdvoiF^MJCIJnJ1Nun~0vZz``6CbU zy2ScJfQICaG%C|uOa6cAcjCb~pdo>udT$bHn>kdO%l&qJb9BnCJkF zxDcnQUM>mH=NEg!_hxQ@c4Nc!-UHfAbbxje5Saqd#CK@{T`GU$-XEX>4P(I=K+0d(>@O56QGacGod&20nmZ;fTny2?!B|f_khkhVa-LJ?;Ow^`Te{#g6|yA z=Ia!C2(c%J_$mlFpuKQ#2~J3Nmxy+X0~*j44A9-X@&Q0YI{-RT{CW}FI0rN*>>3hu zaw5(E4GAP>*3W-qfCgc|4`{uMhX4%;aR%rj7z8w=Ahio|K#O5OL!u=&*b+K`$N=4y zid5?>5;&kC0MJZIFmW2tT*Aa31~jC%02)#}0_bTPdkzmb=usL+Dl;Qd<9LG}p|K)P z?Tb|>&KvYFjg?g@L$Xi~H|QZ6*RDaMfDbq5Xt+U_`6Yh}_)vqchZ;0VAS`dtpm872 z5u_I}+Mq$>DuXv`B|})=psTHG(4NM9K+hpr!lFU%X)Ub^$8iC$t2dQ;m|`UVZY?|T*4ORPb=eCZJhz5~#9;?qH54VvV#CG5Kc z-zzZ5Ow4~E4K--acU0gK(m;bAqVYn|l90w5G^cTBCKQmS8Z>B(iLv;B20cdOH#BIP z$s07b9Ba^^F>E7%hRkUU8>GnwjX0Y)+Mqd&F)09_7fmi90Y zyJ=?*rU0GQ_yB}$`R=V8(5)38U?TVq8wa%Xua9%{fmsX8c6_&GodX*Eo09(B_a&_b zW;?#W8fpU2t^y-|kx|ktPw|G<0<%5e8wo(0(+BheC9RAX_X|r{&v)9?0vZiE@5JQ; ziSBy_UHpmwE%x$IiNXVdw|ve>;#~BTc(_%k-+9CpwX6L z-Q56(1ArcRon05}GDn;PdbBM^RsFQj0aym;@wOb@7VA0(U`GLswhX{hk;(yB258=v za}daWk2*nv9so25+Xr-1C?WDI3}k>FZOf6)XZRKSaX^E{5drzlfEF?Rj05^Vr_>V3 U@Lgu+8~^|S07*qoM6N<$f@HN?761SM diff --git a/public/images/pokemon/variant/1012-counterfeit.json b/public/images/pokemon/variant/1012-counterfeit.json new file mode 100644 index 00000000000..114c3811ba1 --- /dev/null +++ b/public/images/pokemon/variant/1012-counterfeit.json @@ -0,0 +1,44 @@ +{ + "1": { + "5d9e4a": "dda08a", + "a09750": "acbedf", + "423232": "626a96", + "827b74": "848fb8", + "613f19": "7b86ad", + "ccc374": "def7ff", + "a7ba72": "c87079", + "c1b9ae": "c8ddf1", + "69441b": "3a44a4", + "878278": "8a96c0", + "f7da67": "94386a", + "78c463": "f7dfc5", + "ede9e4": "f5fdff", + "261919": "222078", + "396725": "b0654a", + "251b1b": "404ec8", + "4d3635": "174593", + "87847e": "a1b0e6", + "4c3a3a": "667fe9" + }, + "2": { + "5d9e4a": "978dc7", + "a09750": "1b2556", + "423232": "020109", + "827b74": "6fbb45", + "613f19": "0d1030", + "ccc374": "242f66", + "a7ba72": "647c9a", + "c1b9ae": "111039", + "69441b": "44244b", + "878278": "070722", + "f7da67": "0f5627", + "78c463": "c3b4e0", + "ede9e4": "212b5e", + "261919": "1c0b1f", + "396725": "7a5aa7", + "251b1b": "37183f", + "4d3635": "aae16c", + "87847e": "443666", + "4c3a3a": "563f5b" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/1013-unremarkable.json b/public/images/pokemon/variant/1013-unremarkable.json new file mode 100644 index 00000000000..cd988febd87 --- /dev/null +++ b/public/images/pokemon/variant/1013-unremarkable.json @@ -0,0 +1,48 @@ +{ + "1": { + "5d9e4a": "dda08a", + "786354": "7987bd", + "403030": "1c4b9c", + "7b8764": "c58c85", + "ccc374": "eefbff", + "a7ba72": "b75267", + "7b6f6c": "939ec4", + "c1b9ae": "cbe1f5", + "69441b": "3a44a4", + "342405": "616a8a", + "78c463": "f7dfc5", + "453636": "667fe9", + "988975": "acbedf", + "295217": "b0654a", + "e6e1db": "e6f9ff", + "9e8574": "b36171", + "251b1b": "404ec8", + "6a5b20": "8a96c0", + "a09750": "c3d7eb", + "291a0d": "222078", + "f7da67": "94386a" + }, + "2": { + "5d9e4a": "978dc7", + "786354": "5fb352", + "403030": "aae16c", + "7b8764": "716d99", + "ccc374": "263665", + "a7ba72": "647c9a", + "7b6f6c": "0f102d", + "c1b9ae": "111039", + "69441b": "44244b", + "342405": "08081f", + "78c463": "c3b4e0", + "453636": "563f5b", + "988975": "212e57", + "295217": "7a5aa7", + "e6e1db": "212b5e", + "9e8574": "585d81", + "251b1b": "37183f", + "6a5b20": "0b0c21", + "a09750": "131238", + "291a0d": "170d26", + "f7da67": "0f5627" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/102.json b/public/images/pokemon/variant/102.json new file mode 100644 index 00000000000..987f6046458 --- /dev/null +++ b/public/images/pokemon/variant/102.json @@ -0,0 +1,20 @@ +{ + "1": { + "ffce4a": "cea573", + "e69c00": "a0694c", + "ffe6ce": "7ae49f", + "943131": "193662", + "ffb58c": "369b96", + "ef8463": "26647e", + "ffd6ad": "4fba94" + }, + "2": { + "ffce4a": "92394b", + "e69c00": "6d2341", + "ffe6ce": "ebb6f8", + "943131": "414189", + "ffb58c": "9475ce", + "ef8463": "6c5fb6", + "ffd6ad": "b98fe4" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/103.json b/public/images/pokemon/variant/103.json new file mode 100644 index 00000000000..2b6a1f13f79 --- /dev/null +++ b/public/images/pokemon/variant/103.json @@ -0,0 +1,28 @@ +{ + "1": { + "ffde6b": "a3c4ed", + "e6ad5a": "869fdc", + "8c7342": "283f5b", + "73ad31": "dea44c", + "526329": "c8592a", + "9cd64a": "f4e774", + "a56b21": "6072ba", + "b59c4a": "426378", + "734210": "373e85", + "ffefa5": "d3efff", + "524210": "131d33" + }, + "2": { + "ffde6b": "eb748d", + "e6ad5a": "c84e7f", + "8c7342": "d59cba", + "73ad31": "3d324b", + "526329": "1f1a31", + "9cd64a": "6a5b73", + "a56b21": "83295f", + "b59c4a": "ffdbe7", + "734210": "4e1044", + "ffefa5": "ffa29d", + "524210": "925b81" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/128.json b/public/images/pokemon/variant/128.json new file mode 100644 index 00000000000..cd6a7d64f3a --- /dev/null +++ b/public/images/pokemon/variant/128.json @@ -0,0 +1,32 @@ +{ + "1": { + "dea54a": "56b393", + "634a31": "173e0d", + "9c9cad": "997059", + "e6c57b": "8fcaaa", + "4a3a29": "072b05", + "8c6321": "215c72", + "8c6b52": "355816", + "b58431": "2e8a85", + "ad8c73": "5f722a", + "3a3a4a": "4d2324", + "6b6b84": "75413b", + "cecede": "c2a082", + "523a10": "102d4b" + }, + "2": { + "dea54a": "872b3b", + "634a31": "bc9681", + "9c9cad": "edda95", + "e6c57b": "a84d52", + "4a3a29": "966959", + "8c6321": "461029", + "8c6b52": "d6c3aa", + "b58431": "5e172e", + "ad8c73": "faf9ed", + "3a3a4a": "996537", + "6b6b84": "cca45e", + "cecede": "fffcc1", + "523a10": "2f0e21" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/152.json b/public/images/pokemon/variant/152.json new file mode 100644 index 00000000000..f3c1d446fa7 --- /dev/null +++ b/public/images/pokemon/variant/152.json @@ -0,0 +1,28 @@ +{ + "1": { + "efffc5": "f7f1fb", + "849452": "7373b4", + "c52929": "77b3af", + "b5ce6b": "aca1d7", + "d6f78c": "ded2f1", + "84e631": "8074fa", + "ef7b7b": "9bd5c1", + "6bb529": "6f4be2", + "425a19": "505d8d", + "426319": "5d2398", + "638c29": "6633bc" + }, + "2": { + "efffc5": "f4b2ad", + "849452": "a62775", + "c52929": "4eac60", + "b5ce6b": "c83c74", + "d6f78c": "e7617d", + "84e631": "feeeaf", + "ef7b7b": "71cf71", + "6bb529": "f0d187", + "425a19": "801a69", + "426319": "b4814b", + "638c29": "d8a864" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/153.json b/public/images/pokemon/variant/153.json new file mode 100644 index 00000000000..3456ca16513 --- /dev/null +++ b/public/images/pokemon/variant/153.json @@ -0,0 +1,28 @@ +{ + "1": { + "ffff8c": "cbe0fa", + "a58419": "5961ce", + "6b5200": "493fa6", + "ad3100": "47d0d1", + "8cbd31": "8251dc", + "debd29": "7b8ce6", + "527b08": "4d36be", + "6b9c10": "6740c9", + "295208": "232699", + "f7e64a": "a2bbf8", + "d68c52": "80f5e6" + }, + "2": { + "ffff8c": "f5c095", + "a58419": "a8244d", + "6b5200": "891b4f", + "ad3100": "439227", + "8cbd31": "fae084", + "debd29": "ca333d", + "527b08": "e8bc5e", + "6b9c10": "edc870", + "295208": "c58c48", + "f7e64a": "ea704a", + "d68c52": "8ec349" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/154.json b/public/images/pokemon/variant/154.json new file mode 100644 index 00000000000..90311122029 --- /dev/null +++ b/public/images/pokemon/variant/154.json @@ -0,0 +1,30 @@ +{ + "1": { + "634a00": "519aa7", + "f7a59c": "739ed4", + "e6ad00": "7bcfc6", + "ff3a5a": "3542a7", + "ffde21": "b1f2dc", + "ce213a": "27217d", + "63bd42": "9d86d9", + "bdff7b": "dadffe", + "7b103a": "23124e", + "107b31": "8057b2", + "fefefe": "9cfeff", + "9ce652": "b7afee" + }, + "2": { + "634a00": "488939", + "f7a59c": "fff6a9", + "e6ad00": "6bac4b", + "ff3a5a": "f9db74", + "ffde21": "92c462", + "ce213a": "e5b650", + "63bd42": "a31f60", + "bdff7b": "f57382", + "7b103a": "b7873b", + "107b31": "761858", + "fefefe": "ffffee", + "9ce652": "cd3b6b" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/158.json b/public/images/pokemon/variant/158.json new file mode 100644 index 00000000000..779c7ea69b4 --- /dev/null +++ b/public/images/pokemon/variant/158.json @@ -0,0 +1,27 @@ +{ + "1": { + "7b1900": "4f0332", + "6bb5e6": "dd8e59", + "94d6ff": "fdc17e", + "ffc552": "99d4d9", + "ad8429": "4798ab", + "3184c5": "ae5139", + "e67b7b": "749e9e", + "b54a52": "1d5d6c", + "ce4221": "772c52", + "315a84": "73131e" + }, + "2": { + "000000": "ffffff", + "7b1900": "a66b14", + "6bb5e6": "97ac5b", + "94d6ff": "ccd198", + "ffc552": "2f5365", + "ad8429": "1c314f", + "3184c5": "4f854a", + "e67b7b": "e4b843", + "b54a52": "c48b27", + "ce4221": "ce8c20", + "315a84": "2b4a30" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/159.json b/public/images/pokemon/variant/159.json new file mode 100644 index 00000000000..c6563e4204c --- /dev/null +++ b/public/images/pokemon/variant/159.json @@ -0,0 +1,33 @@ +{ + "1": { + "3a4a84": "973027", + "e64221": "749e9e", + "ce293a": "682c4e", + "5aade6": "e5a354", + "84ceff": "ffcf72", + "cebd63": "56b3bd", + "ffe68c": "a9e4e5", + "840008": "4f1037", + "3184c5": "cd6537", + "6b5200": "085d75", + "840009": "1d5d6c", + "ff8c84": "926877", + "f7525a": "774860" + }, + "2": { + "000000": "ffffff", + "3a4a84": "26472b", + "e64221": "e4b843", + "ce293a": "ce8c20", + "5aade6": "8fa54e", + "84ceff": "c2c78a", + "cebd63": "1c314f", + "ffe68c": "2f5365", + "840008": "a66b14", + "3184c5": "468040", + "6b5200": "112034", + "840009": "c48b27", + "ff8c84": "fff284", + "f7525a": "f3b649" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/160.json b/public/images/pokemon/variant/160.json new file mode 100644 index 00000000000..adb897ae5f5 --- /dev/null +++ b/public/images/pokemon/variant/160.json @@ -0,0 +1,27 @@ +{ + "1": { + "8cd6ff": "ffcf72", + "6b5200": "085d75", + "5ab5f7": "eda857", + "cebd63": "56b3bd", + "ffe68c": "a9e4e5", + "840008": "4f1037", + "294a8c": "973027", + "3a8cce": "d26738", + "ff8c84": "926877", + "f7525a": "774860" + }, + "2": { + "000000": "ffffff", + "8cd6ff": "d1d692", + "6b5200": "112034", + "5ab5f7": "9ab350", + "cebd63": "1c314f", + "ffe68c": "2f5365", + "840008": "a66b14", + "294a8c": "274c2d", + "3a8cce": "498a42", + "ff8c84": "fff284", + "f7525a": "f3b649" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/167.json b/public/images/pokemon/variant/167.json new file mode 100644 index 00000000000..20f954a4a55 --- /dev/null +++ b/public/images/pokemon/variant/167.json @@ -0,0 +1,31 @@ +{ + "1": { + "52b56b": "e06c19", + "b5424a": "861d1d", + "ef5a5a": "b92222", + "7b3142": "651218", + "c5b519": "3f2e71", + "314a10": "732202", + "846b29": "231a58", + "8ce631": "f1b940", + "527b29": "d54f19", + "ffe64a": "624095", + "adef63": "f5da68" + }, + "2": { + "52b56b": "8c2848", + "b5424a": "1f1d3f", + "bdc5c5": "a1b7de", + "ef5a5a": "313659", + "7b3142": "181729", + "c5b519": "7d95b9", + "314a10": "481229", + "846b29": "565e8d", + "8ce631": "b54158", + "527b29": "6a1b37", + "ffe64a": "aac3d6", + "ffffff": "cde6fc", + "6b6b73": "62657d", + "adef63": "dd7081" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/168.json b/public/images/pokemon/variant/168.json new file mode 100644 index 00000000000..4c8fcf5f4f5 --- /dev/null +++ b/public/images/pokemon/variant/168.json @@ -0,0 +1,32 @@ +{ + "1": { + "c54242": "62b943", + "6b5219": "043435", + "63319c": "af4900", + "9c5ac5": "e28220", + "bdbdbd": "b5d3dc", + "ffffff": "fffef9", + "ff8c73": "dce24b", + "c5b54a": "15463c", + "ff5a4a": "a8d919", + "ffde42": "186c45", + "8c2100": "317945", + "bd84e6": "f1b940", + "6b6b6b": "552718" + }, + "2": { + "c54242": "7ca5c6", + "6b5219": "161437", + "63319c": "291013", + "9c5ac5": "96304a", + "bdbdbd": "c09fa1", + "ffffff": "fae8e7", + "ff8c73": "c4e8e7", + "c5b54a": "1f2150", + "ff5a4a": "a3c8d1", + "ffde42": "313b60", + "8c2100": "2d3d72", + "bd84e6": "c8545d", + "6b6b6b": "3e538a" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/170.json b/public/images/pokemon/variant/170.json new file mode 100644 index 00000000000..c83ca6836db --- /dev/null +++ b/public/images/pokemon/variant/170.json @@ -0,0 +1,34 @@ +{ + "1": { + "08295a": "691f03", + "ffce52": "a1dbba", + "b50000": "efde5a", + "94cee6": "ffeabf", + "295294": "a14713", + "ffef84": "ccffd7", + "5a73c5": "bf6924", + "c59400": "609a8a", + "522919": "052b38", + "ffffde": "f2fff5", + "7bbde6": "f6e37f", + "846352": "45757a", + "6ba5e6": "dda13d", + "e6b529": "84bda9" + }, + "2": { + "08295a": "1b072f", + "ffce52": "e25765", + "b50000": "f0d050", + "94cee6": "a15b8d", + "295294": "321648", + "ffef84": "f97f7f", + "5a73c5": "441e56", + "c59400": "931b3c", + "522919": "720b3a", + "ffffde": "ffc4be", + "7bbde6": "89498d", + "846352": "720b3a", + "6ba5e6": "693373", + "e6b529": "b62b51" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/171.json b/public/images/pokemon/variant/171.json new file mode 100644 index 00000000000..8a9cafe4265 --- /dev/null +++ b/public/images/pokemon/variant/171.json @@ -0,0 +1,30 @@ +{ + "1": { + "a5314a": "bf882c", + "4a7bce": "bc3c4c", + "423110": "05333a", + "ef635a": "efde5a", + "7badef": "f6907f", + "a5ceff": "fbcdb3", + "e6b552": "82ca4f", + "6394e6": "e86062", + "ffde63": "c3e875", + "ad9442": "2a8d3d", + "293173": "872341", + "7b634a": "0c5540" + }, + "2": { + "a5314a": "c3851d", + "4a7bce": "9781b3", + "423110": "040529", + "ef635a": "f0d050", + "7badef": "eecfed", + "a5ceff": "fbf5fa", + "e6b552": "3294b8", + "6394e6": "c5a5d0", + "ffde63": "4dd5d9", + "ad9442": "23689e", + "293173": "4b426c", + "7b634a": "0c1d4c" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/172-spiky.json b/public/images/pokemon/variant/172-spiky.json new file mode 100644 index 00000000000..81a1d9bdcd6 --- /dev/null +++ b/public/images/pokemon/variant/172-spiky.json @@ -0,0 +1,30 @@ +{ + "1": { + "f7ef94": "c4e3c3", + "7d1c1c": "992424", + "e77b94": "bd4d5e", + "e36481": "d45976", + "292929": "242424", + "c5ad10": "6cab9a", + "845a29": "45818a", + "f7e652": "a3d1a8", + "a57b08": "5ca390", + "634a10": "30536b" + }, + "2": { + "f7ef94": "8aa5ad", + "7d1c1c": "c38218", + "212131": "d48d61", + "e77b94": "f5dd94", + "e36481": "b35b6d", + "292929": "242424", + "c5ad10": "4a6a90", + "845a29": "283567", + "8c2121": "772c49", + "424252": "e7c17c", + "f7e652": "7095ab", + "171721": "9a4440", + "a57b08": "486a8e", + "634a10": "2f335b" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/172.json b/public/images/pokemon/variant/172.json new file mode 100644 index 00000000000..7df41b99457 --- /dev/null +++ b/public/images/pokemon/variant/172.json @@ -0,0 +1,29 @@ +{ + "1": { + "f7ef94": "c4e3c3", + "a57b08": "5ca390", + "d1667f": "d45976", + "e77b94": "bd4d5e", + "292929": "242424", + "c5ad10": "6cab9a", + "845a29": "45818a", + "f7e652": "a3d1a8", + "7d1c1c": "992424", + "634a10": "30536b" + }, + "2": { + "f7ef94": "8aa5ad", + "a57b08": "486a8e", + "d1667f": "b35b6d", + "8c2121": "772c49", + "e77b94": "f5dd94", + "c5ad10": "4a6a90", + "845a29": "283567", + "212131": "d48d61", + "424252": "e7c17c", + "f7e652": "7095ab", + "7d1c1c": "c38218", + "171721": "9a4440", + "634a10": "2f335b" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/174.json b/public/images/pokemon/variant/174.json new file mode 100644 index 00000000000..65b9af81dde --- /dev/null +++ b/public/images/pokemon/variant/174.json @@ -0,0 +1,20 @@ +{ + "1": { + "9c1952": "3a6472", + "e6849c": "81c2b8", + "bd0000": "f18fc4", + "630000": "6f305b", + "b55273": "43737d", + "e62910": "ae93d9", + "ffced6": "e5ffec", + "ffadbd": "c5ebd5" + }, + "2": { + "9c1952": "9c5200", + "e6849c": "f5c45b", + "b55273": "a16b30", + "e62910": "c43f3f", + "ffced6": "fff9bf", + "ffadbd": "f5e884" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/194.json b/public/images/pokemon/variant/194.json new file mode 100644 index 00000000000..47604b8228d --- /dev/null +++ b/public/images/pokemon/variant/194.json @@ -0,0 +1,24 @@ +{ + "1": { + "104a84": "7a150a", + "b54242": "23768d", + "ff6b73": "52c1e0", + "633a6b": "204954", + "3a7bc5": "d5682e", + "ef73e6": "81e2f7", + "73bdff": "ffc355", + "d65ad6": "65b1c2", + "529ce6": "e8983d" + }, + "2": { + "104a84": "180d42", + "b54242": "b96228", + "ff6b73": "e9cb52", + "633a6b": "80301c", + "3a7bc5": "3f377e", + "ef73e6": "e9cb52", + "73bdff": "5c66c4", + "d65ad6": "cf933b", + "529ce6": "564daa" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/195.json b/public/images/pokemon/variant/195.json new file mode 100644 index 00000000000..3bf5ea7844a --- /dev/null +++ b/public/images/pokemon/variant/195.json @@ -0,0 +1,26 @@ +{ + "1": { + "ade6ff": "f6dfa8", + "84d6f7": "ed9e4f", + "f7f7f7": "fffbea", + "637ba5": "936e66", + "639cbd": "dc6a4d", + "3194a5": "81e2f7", + "19423a": "204954", + "425284": "b03844", + "195a6b": "54aec2", + "6b5a8c": "23768d" + }, + "2": { + "ade6ff": "9864c2", + "84d6f7": "724ba7", + "f7f7f7": "e8b6ff", + "637ba5": "6f2d4b", + "639cbd": "493a8d", + "3194a5": "e9cb52", + "19423a": "b96228", + "425284": "240830", + "195a6b": "cf933b", + "6b5a8c": "80301c" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/198.json b/public/images/pokemon/variant/198.json new file mode 100644 index 00000000000..ab9084619f3 --- /dev/null +++ b/public/images/pokemon/variant/198.json @@ -0,0 +1,34 @@ +{ + "1": { + "d94352": "7a101c", + "314263": "462b20", + "d64252": "b3986b", + "73293a": "755237", + "ffad8c": "ad2e24", + "73283a": "630c17", + "d6404f": "8c1b23", + "efd684": "a6a6b3", + "42639c": "694c30", + "5a4a21": "25253b", + "292942": "2a1512", + "b59c21": "57566f", + "752a3c": "4d0419", + "d6bd52": "838098" + }, + "2": { + "d94352": "5939a9", + "314263": "0e4333", + "d64252": "bc4b84", + "73293a": "7b2363", + "ffad8c": "b164e6", + "73283a": "630c17", + "d6404f": "8c1b23", + "efd684": "c2723a", + "42639c": "1d6e47", + "5a4a21": "4e1915", + "292942": "091e16", + "b59c21": "85412d", + "752a3c": "1e1764", + "d6bd52": "9a5524" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/2026.json b/public/images/pokemon/variant/2026.json new file mode 100644 index 00000000000..995e3a1a6e8 --- /dev/null +++ b/public/images/pokemon/variant/2026.json @@ -0,0 +1,34 @@ +{ + "1": { + "e3882d": "3d7375", + "965821": "2f4e6b", + "846b5b": "467f85", + "fffdfb": "d6d9ca", + "552720": "142c48", + "602c24": "162f4b", + "fef443": "c48081", + "b45f25": "2d5261", + "fef652": "eb999a", + "1a73cc": "b85346", + "174680": "2b1307", + "e9be14": "945c7b", + "646124": "492652", + "9c5430": "1d3a57", + "ecd8b7": "b4c2a5" + }, + "2": { + "e3882d": "d3b06f", + "965821": "9cb3ca", + "846b5b": "202746", + "fffdfb": "6d8297", + "552720": "43617f", + "fef443": "3a5873", + "b45f25": "bd8551", + "fef652": "faee9e", + "1a73cc": "c26400", + "174680": "2b0606", + "e9be14": "1a3551", + "646124": "122140", + "ecd8b7": "5a6f90" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/2103.json b/public/images/pokemon/variant/2103.json new file mode 100644 index 00000000000..2e97727835a --- /dev/null +++ b/public/images/pokemon/variant/2103.json @@ -0,0 +1,28 @@ +{ + "1": { + "2f9934": "dea44c", + "9f6b41": "426378", + "70442e": "283f5b", + "e6ac5a": "869fdc", + "522f16": "131d33", + "9cbd4a": "9977dd", + "fff68b": "a3c4ed", + "36cc36": "f4e774", + "2d5826": "c8592a", + "7b5210": "373e85", + "ffffcd": "d3efff" + }, + "2": { + "2f9934": "3d324b", + "9f6b41": "ffdbe7", + "70442e": "d59cba", + "e6ac5a": "c84e7f", + "522f16": "925b81", + "9cbd4a": "824a96", + "fff68b": "eb748d", + "36cc36": "6a5b73", + "2d5826": "1f1a31", + "7b5210": "4e1044", + "ffffcd": "ffa29d" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/211.json b/public/images/pokemon/variant/211.json new file mode 100644 index 00000000000..cc2b3ba9209 --- /dev/null +++ b/public/images/pokemon/variant/211.json @@ -0,0 +1,28 @@ +{ + "1": { + "940000": "1c6449", + "194a52": "321128", + "dede94": "f1c17c", + "428494": "80294b", + "c5c57b": "dc9565", + "a5ad6b": "ad6643", + "3a6363": "611a42", + "d65263": "48be87", + "ffa594": "9ee79b", + "6b5231": "6d2c2c", + "73adb5": "a0415e" + }, + "2": { + "940000": "385881", + "194a52": "1c2f5b", + "dede94": "365492", + "428494": "60abdc", + "c5c57b": "2b3e7b", + "a5ad6b": "1e275b", + "3a6363": "396796", + "d65263": "a9cfd7", + "ffa594": "cafefd", + "6b5231": "181f46", + "73adb5": "8bd9ee" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/25-beauty-cosplay.json b/public/images/pokemon/variant/25-beauty-cosplay.json new file mode 100644 index 00000000000..0e5a6a1bad2 --- /dev/null +++ b/public/images/pokemon/variant/25-beauty-cosplay.json @@ -0,0 +1,49 @@ +{ + "1": { + "c52119": "ad4e76", + "5e5e6b": "6c6e60", + "f7e652": "a3d1a8", + "52525a": "4f454c", + "cecab9": "cfc8aa", + "e65137": "c95578", + "fffabf": "f4f7ab", + "b52821": "ad4469", + "292929": "1e1526", + "39509d": "47449c", + "f7e860": "f2ea50", + "e65a42": "cf6182", + "4d88c4": "7976c6", + "f7bd21": "79b5a5", + "2d276d": "2f2768", + "242323": "282030", + "585861": "443e6c", + "fff7a5": "c4e3c3", + "9c5200": "315c75", + "f7cc2f": "f7bd21", + "fffdea": "f8ffe3" + }, + "2": { + "c52119": "ebc67c", + "5e5e6b": "8a2554", + "f7e652": "577b98", + "52525a": "f1b571", + "cecab9": "b84084", + "e65137": "b95b6e", + "fffabf": "f5efd1", + "b52821": "6a253f", + "292929": "a45233", + "39509d": "9ec4cd", + "f7e860": "eddc78", + "e65a42": "eedd9c", + "4d88c4": "e4f6f1", + "f7bd21": "486689", + "2d276d": "454a61", + "242323": "282030", + "585861": "3f4246", + "fff7a5": "7b96aa", + "9c5200": "283361", + "965b0e": "96500e", + "f7cc2f": "d5ac44", + "fffdea": "ea82a6" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/25-cool-cosplay.json b/public/images/pokemon/variant/25-cool-cosplay.json new file mode 100644 index 00000000000..de4a138b690 --- /dev/null +++ b/public/images/pokemon/variant/25-cool-cosplay.json @@ -0,0 +1,49 @@ +{ + "1": { + "171717": "2a1d36", + "e8b127": "f5ca2f", + "52525a": "55555e", + "c52119": "ad4e76", + "842222": "7b1f18", + "f7e652": "a3d1a8", + "fff7a5": "c4e3c3", + "2baf23": "76a848", + "f7bd21": "79b5a5", + "e65a42": "cf6182", + "ba2b23": "b73850", + "f5e193": "f4f7ab", + "e66953": "b95b6e", + "6f6c8e": "656f86", + "a6adb6": "a5b0b6", + "8c4e22": "965b0e", + "9c5200": "1c4f75", + "c43129": "6a253f", + "d95b45": "cf6887", + "45484d": "443e6c", + "3b3b40": "4a3e46", + "292929": "272b2b" + }, + "2": { + "171717": "a45233", + "e8b127": "e7b432", + "52525a": "8f4b32", + "c52119": "ebc67c", + "842222": "1e1e43", + "f7e652": "577b98", + "fff7a5": "7b96aa", + "2baf23": "572626", + "f7bd21": "445f8a", + "e65a42": "eedd9c", + "ba2b23": "2c2c47", + "f5e193": "eadbb3", + "e66953": "b95b6e", + "6f6c8e": "cf752b", + "a6adb6": "f0b541", + "8c4e22": "b1632b", + "9c5200": "22325c", + "c43129": "6a253f", + "d95b45": "3a3f5e", + "3b3b40": "f1b571", + "292929": "7d3833" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/25-cosplay.json b/public/images/pokemon/variant/25-cosplay.json new file mode 100644 index 00000000000..e324c094019 --- /dev/null +++ b/public/images/pokemon/variant/25-cosplay.json @@ -0,0 +1,36 @@ +{ + "1": { + "f7e652": "a3d1a8", + "212121": "30263b", + "c43129": "6a253f", + "171717": "1e1526", + "292929": "282030", + "e65a42": "cf6182", + "c52119": "ad4e76", + "42424a": "443e6c", + "fff7a5": "c4e3c3", + "f7bd21": "79b5a5", + "45454a": "4f454c", + "9c5200": "315c75", + "633108": "09406b", + "e66953": "b95b6e", + "de9400": "338087" + }, + "2": { + "f7e652": "577b98", + "212121": "d8805b", + "c43129": "6a253f", + "171717": "a45233", + "292929": "282030", + "e65a42": "eedd9c", + "c52119": "ebc67c", + "42424a": "3f4246", + "fff7a5": "7b96aa", + "f7bd21": "445f8a", + "45454a": "f1b571", + "9c5200": "23345e", + "633108": "22244f", + "e66953": "b95b6e", + "de9400": "324472" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/25-cute-cosplay.json b/public/images/pokemon/variant/25-cute-cosplay.json new file mode 100644 index 00000000000..251530a0892 --- /dev/null +++ b/public/images/pokemon/variant/25-cute-cosplay.json @@ -0,0 +1,53 @@ +{ + "1": { + "e65a42": "cf6182", + "cf4770": "cf4a59", + "52525a": "30263b", + "c52119": "ad4e76", + "292929": "30263b", + "fff7a5": "f0eaa8", + "9c5200": "255e8a", + "752bd0": "5452b7", + "e66953": "b95b6e", + "c43129": "6a253f", + "42424a": "443e6c", + "f7e652": "a3d1a8", + "ea82a6": "e8848e", + "29292a": "1e1526", + "f3bace": "f2bbbb", + "853247": "85323c", + "52525c": "bab699", + "fff7a6": "c4e3c3", + "101011": "101010", + "baa998": "bab699", + "f7bd21": "79b5a5", + "101010": "1e1526", + "52525b": "4f454c" + }, + "2": { + "e65a42": "eedd9c", + "cf4770": "739b55", + "52525a": "d8805b", + "52525d": "d3ab5a", + "c52119": "ebc67c", + "292929": "d8805b", + "fff7a5": "ebe7b7", + "9c5200": "1e2d52", + "752bd0": "7751c2", + "e66953": "b95b6e", + "c43129": "6a253f", + "42424a": "373d45", + "f7e652": "577b98", + "ea82a6": "a4b95f", + "29292a": "a45233", + "f3bace": "c5cc85", + "853247": "254b30", + "52525c": "706053", + "fff7a6": "7b96aa", + "101011": "101010", + "baa998": "d3ab5a", + "f7bd21": "445f8a", + "101010": "a45233", + "52525b": "f1b571" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/25-gigantamax.json b/public/images/pokemon/variant/25-gigantamax.json new file mode 100644 index 00000000000..554b93c5bfa --- /dev/null +++ b/public/images/pokemon/variant/25-gigantamax.json @@ -0,0 +1,35 @@ +{ + "1": { + "212121": "1e1526", + "c52018": "ad4e76", + "f6e652": "a3d1a8", + "f6bd20": "79b5a5", + "fff9c2": "b8ffd9", + "e65a41": "cf6182", + "de9400": "338087", + "623108": "09406b", + "fff6a4": "c4e3c3", + "292929": "282030", + "323133": "30263b", + "f8fc4b": "5bc28b", + "9c5200": "315c75", + "41414a": "4f454c", + "61616d": "443e6c" + }, + "2": { + "212121": "a45233", + "c52018": "ebc67c", + "f6e652": "577b98", + "f6bd20": "445f8a", + "fff9c2": "83b1d2", + "e65a41": "eedd9c", + "de9400": "324472", + "623108": "09406b", + "fff6a4": "7b96aa", + "323133": "d8805b", + "695d65": "737383", + "f8fc4b": "326a9f", + "9c5200": "23345e", + "41414a": "d99362" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/25-partner.json b/public/images/pokemon/variant/25-partner.json new file mode 100644 index 00000000000..4363facf947 --- /dev/null +++ b/public/images/pokemon/variant/25-partner.json @@ -0,0 +1,36 @@ +{ + "1": { + "212121": "30263b", + "c52119": "ad4e76", + "fff7a5": "c4e3c3", + "f7e652": "a3d1a8", + "633108": "09406b", + "de9400": "338087", + "42424a": "443e6c", + "c43129": "6a253f", + "45454a": "4f454c", + "9c5200": "315c75", + "e66953": "b95b6e", + "e65a42": "cf6182", + "171717": "1e1526", + "f7bd21": "79b5a5", + "292929": "282030" + }, + "2": { + "212121": "d8805b", + "c52119": "ebc67c", + "fff7a5": "7b96aa", + "f7e652": "577b98", + "633108": "22244f", + "de9400": "324472", + "42424a": "3f4246", + "c43129": "6a253f", + "45454a": "f1b571", + "9c5200": "23345e", + "e66953": "b95b6e", + "e65a42": "eedd9c", + "171717": "a45233", + "f7bd21": "445f8a", + "292929": "282030" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/25-smart-cosplay.json b/public/images/pokemon/variant/25-smart-cosplay.json new file mode 100644 index 00000000000..4ba98883f16 --- /dev/null +++ b/public/images/pokemon/variant/25-smart-cosplay.json @@ -0,0 +1,42 @@ +{ + "1": { + "212121": "30263b", + "b7a599": "bab699", + "60b553": "76a848", + "366635": "3e5b2f", + "e35252": "d16b9a", + "c52119": "ad4e76", + "292929": "272b2b", + "9c5200": "315c75", + "f7e652": "a3d1a8", + "95635b": "91685f", + "171717": "1e1526", + "ba2525": "993f70", + "e65a42": "cf6182", + "54545c": "55555e", + "52525a": "4f454c", + "fffdea": "f8ffe3", + "f7bd21": "79b5a5", + "5f3434": "573b38" + }, + "2": { + "212121": "d8805b", + "b7a599": "a7b6b9", + "60b553": "dfb053", + "366635": "ab5130", + "e35252": "3a3f5e", + "c52119": "ebc67c", + "292929": "202937", + "9c5200": "23345e", + "f7e652": "577b98", + "95635b": "a09ea3", + "171717": "a45233", + "ba2525": "2b2b45", + "e65a42": "eedd9c", + "54545c": "45525c", + "52525a": "f1b571", + "fffdea": "f2f0df", + "f7bd21": "445f8a", + "5f3434": "666060" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/25-tough-cosplay.json b/public/images/pokemon/variant/25-tough-cosplay.json new file mode 100644 index 00000000000..620ac882643 --- /dev/null +++ b/public/images/pokemon/variant/25-tough-cosplay.json @@ -0,0 +1,43 @@ +{ + "1": { + "e37511": "d1694f", + "bf2629": "bf3638", + "303030": "30263b", + "b8282b": "753652", + "8d2b1d": "8e2525", + "424242": "443e6c", + "c52119": "ad4e76", + "292929": "1e1526", + "f7bd21": "79b5a5", + "fbab33": "de9764", + "db4a37": "ad4c60", + "e65a42": "cf6182", + "9c5200": "315c75", + "db5b42": "cf6a59", + "52525a": "4f454c", + "cecab9": "cfc8aa", + "f7e652": "a3d1a8" + }, + "2": { + "e37511": "644794", + "bf2629": "8e6fa1", + "f8ffe3": "e8e3e4", + "303030": "d8805b", + "b8282b": "6a253f", + "8d2b1d": "242866", + "424242": "3f4246", + "c52119": "e8be68", + "292929": "a45233", + "f7bd21": "445f8a", + "fbab33": "845ea1", + "db4a37": "b95b6e", + "e65a42": "edda8c", + "9c5200": "23345e", + "db5b42": "624780", + "52525a": "f1b571", + "4d4d4d": "2b3340", + "272b2b": "162231", + "cecab9": "cfc0c3", + "f7e652": "577b98" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/25.json b/public/images/pokemon/variant/25.json new file mode 100644 index 00000000000..0542587ba6d --- /dev/null +++ b/public/images/pokemon/variant/25.json @@ -0,0 +1,36 @@ +{ + "1": { + "42424a": "443e6c", + "fff7a5": "c4e3c3", + "c52119": "ad4e76", + "de9400": "338087", + "e65a42": "cf6182", + "f7e652": "a3d1a8", + "e66953": "b95b6e", + "45454a": "4f454c", + "292929": "282030", + "c43129": "6a253f", + "212121": "30263b", + "171717": "1e1526", + "f7bd21": "79b5a5", + "9c5200": "315c75", + "633108": "09406b" + }, + "2": { + "42424a": "3f4246", + "fff7a5": "7b96aa", + "c52119": "ebc67c", + "de9400": "324472", + "e65a42": "eedd9c", + "f7e652": "577b98", + "e66953": "b95b6e", + "45454a": "f1b571", + "292929": "282030", + "c43129": "6a253f", + "212121": "d8805b", + "171717": "a45233", + "f7bd21": "445f8a", + "9c5200": "23345e", + "633108": "22244f" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/26.json b/public/images/pokemon/variant/26.json new file mode 100644 index 00000000000..c078c38570f --- /dev/null +++ b/public/images/pokemon/variant/26.json @@ -0,0 +1,36 @@ +{ + "1": { + "ffefd6": "c8d4ba", + "bd1908": "ad4e76", + "944242": "395a80", + "bd5a31": "386d82", + "e6bd84": "a4bda7", + "ffbd00": "b3596b", + "5a2929": "293059", + "3a3a42": "30263b", + "8c6310": "8c3c4c", + "ffde5a": "cf7878", + "8d5911": "983e50", + "734231": "6e2f33", + "63636b": "4f454c", + "de7b31": "539190", + "f7ad29": "76a68b" + }, + "2": { + "ffefd6": "cfc4b5", + "542127": "905331", + "bd1908": "a44c5d", + "944242": "2d3b80", + "bd5a31": "375681", + "e6bd84": "a6b5ab", + "ffbd00": "f3cf91", + "5a2929": "202a60", + "8c6310": "c79b5a", + "ffde5a": "f2e4b6", + "8d5911": "dea96e", + "734231": "bd8447", + "de7b31": "4d6f98", + "f7ad29": "6385ab", + "643034": "2e4685" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/276.json b/public/images/pokemon/variant/276.json new file mode 100644 index 00000000000..d7c6c1268ec --- /dev/null +++ b/public/images/pokemon/variant/276.json @@ -0,0 +1,32 @@ +{ + "1": { + "bdbdce": "26523c", + "ffffff": "3c6a3d", + "efbd63": "e7a562", + "524a29": "4b210d", + "bdbdcd": "b5b5d5", + "a57331": "784524", + "212952": "12223d", + "3a3a31": "3e3e3e", + "314a7b": "1a385a", + "e69410": "bc7532", + "943a52": "ad8634", + "5a6b9c": "2a596b", + "ce5273": "cebf49" + }, + "2": { + "bdbdce": "453f63", + "ffffff": "635d81", + "efbd63": "89787c", + "524a29": "381f2c", + "bdbdcd": "b5b5d5", + "a57331": "4a323a", + "212952": "191222", + "3a3a31": "442c34", + "314a7b": "282037", + "e69410": "63414f", + "943a52": "8ec08b", + "5a6b9c": "3c2f48", + "ce5273": "bcd59d" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/277.json b/public/images/pokemon/variant/277.json new file mode 100644 index 00000000000..84d689cab9a --- /dev/null +++ b/public/images/pokemon/variant/277.json @@ -0,0 +1,34 @@ +{ + "1": { + "dea531": "bc7532", + "425a7b": "2a596b", + "ffffff": "3c6a3d", + "b5b5d6": "26523c", + "9c3152": "ad8634", + "945a10": "784524", + "5a5a5a": "b58251", + "63213a": "603c1d", + "c55a73": "cebf49", + "31313a": "89572a", + "e6b563": "e7a562", + "524221": "4b210d", + "292952": "12223d", + "294263": "1a385a" + }, + "2": { + "dea531": "63414f", + "425a7b": "3c2f48", + "ffffff": "635d81", + "b5b5d6": "453f63", + "9c3152": "8ec08b", + "945a10": "4a323a", + "5a5a5a": "5d454d", + "63213a": "5d9469", + "c55a73": "bcd59d", + "31313a": "442c34", + "e6b563": "89787c", + "524221": "381f2c", + "292952": "191222", + "294263": "282037" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/359-mega.json b/public/images/pokemon/variant/359-mega.json new file mode 100644 index 00000000000..3e76a8e6ee6 --- /dev/null +++ b/public/images/pokemon/variant/359-mega.json @@ -0,0 +1,30 @@ +{ + "1": { + "273535": "2b3266", + "7b2931": "c9824b", + "414a6a": "421e4a", + "b4b4d5": "458196", + "cd2920": "f7c26d", + "293939": "27122b", + "fdfdfd": "61a8ab", + "525a7b": "59274e", + "d5deee": "589aa6", + "737bac": "874267", + "8b8bac": "3b6987", + "626283": "2a3163" + }, + "2": { + "273535": "420918", + "7b2931": "0f4391", + "414a6a": "b39279", + "b4b4d5": "752f40", + "cd2920": "2a96ce", + "293939": "996e5f", + "fdfdfd": "9e363b", + "525a7b": "e0c79f", + "d5deee": "8f2f41", + "737bac": "f5f1cb", + "8b8bac": "59213b", + "626283": "42122d" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/359.json b/public/images/pokemon/variant/359.json new file mode 100644 index 00000000000..936b3567c67 --- /dev/null +++ b/public/images/pokemon/variant/359.json @@ -0,0 +1,34 @@ +{ + "1": { + "424a6b": "421e4a", + "293a3a": "27122b", + "ce2921": "f7c26d", + "7b2931": "c9824b", + "ff7b73": "fff291", + "737bad": "874267", + "d6deef": "589aa6", + "283838": "101f30", + "525a7b": "612b54", + "b5b5d6": "458196", + "636384": "2a3163", + "7179ab": "2b3266", + "ffffff": "61a8ab", + "8c8cad": "3b6987" + }, + "2": { + "424a6b": "b39279", + "293a3a": "996e5f", + "ce2921": "2a96ce", + "7b2931": "0f4391", + "ff7b73": "96eeff", + "737bad": "f5f1cb", + "d6deef": "8f2f41", + "283838": "31101f", + "525a7b": "e0c79f", + "b5b5d6": "752f40", + "636384": "42122d", + "7179ab": "7d1d36", + "ffffff": "9e363b", + "8c8cad": "59213b" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/377.json b/public/images/pokemon/variant/377.json new file mode 100644 index 00000000000..84f8851b9a8 --- /dev/null +++ b/public/images/pokemon/variant/377.json @@ -0,0 +1,28 @@ +{ + "1": { + "b54200": "13512f", + "efad6b": "aac669", + "948c73": "2e4e7b", + "cec5ad": "4d8ba8", + "bd633a": "22773f", + "ef733a": "72b645", + "ef843a": "56963a", + "524a29": "182238", + "e6dead": "659db5", + "b5ad94": "3d6d8d", + "efe6de": "84c7ca" + }, + "2": { + "b54200": "3d0933", + "efad6b": "a54c5e", + "948c73": "262847", + "cec5ad": "303353", + "bd633a": "561934", + "ef733a": "c1271f", + "ef843a": "722a41", + "524a29": "161129", + "e6dead": "383e6a", + "b5ad94": "394170", + "efe6de": "4d5784" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/378.json b/public/images/pokemon/variant/378.json new file mode 100644 index 00000000000..c7d2816a024 --- /dev/null +++ b/public/images/pokemon/variant/378.json @@ -0,0 +1,38 @@ +{ + "0": { + "ffffff": "d7b6f1", + "293a7b": "101238", + "9cceff": "6f66a7", + "ceb521": "ca5846", + "6bb5d6": "414184", + "ffffad": "ffd6a7", + "ffe600": "e58b64", + "5a84ad": "282e64", + "3a6b8c": "191d4c", + "bdefff": "9983c4" + }, + "1": { + "6bb5d6": "bf344a", + "bdefff": "ffb88d", + "293a7b": "400b1c", + "ffe600": "7a5d98", + "5a84ad": "981d43", + "ffffff": "fff7d3", + "ffffad": "c39bd0", + "ceb521": "43356c", + "3a6b8c": "64132c", + "9cceff": "eb5d56" + }, + "2": { + "6bb5d6": "323232", + "bdefff": "5b5b5b", + "293a7b": "100f17", + "ffe600": "73e6f6", + "5a84ad": "212121", + "ffffff": "8c8c8c", + "ffffad": "e5fffd", + "ceb521": "319ce2", + "3a6b8c": "14131a", + "9cceff": "424242" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/379.json b/public/images/pokemon/variant/379.json new file mode 100644 index 00000000000..926acc7d987 --- /dev/null +++ b/public/images/pokemon/variant/379.json @@ -0,0 +1,30 @@ +{ + "1": { + "4a5a5a": "34366f", + "ff4242": "5cbed3", + "3a4252": "292960", + "ff9ca5": "d2d3c9", + "d6ced6": "cc9c65", + "b5adad": "a66f52", + "ffffff": "fff3aa", + "dedede": "f0d185", + "848c84": "4c5c91", + "4a4a4a": "533329", + "84847b": "80503b", + "bdbdbd": "7a9ee5" + }, + "2": { + "4a5a5a": "df8533", + "ff4242": "1e1e1e", + "3a4252": "e29631", + "ff9ca5": "a0a0a0", + "d6ced6": "cd5521", + "b5adad": "ad2d1e", + "ffffff": "ffb056", + "dedede": "e87537", + "848c84": "ffcd49", + "4a4a4a": "521328", + "84847b": "81222b", + "bdbdbd": "ffff7e" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/39.json b/public/images/pokemon/variant/39.json new file mode 100644 index 00000000000..c72887bdf9d --- /dev/null +++ b/public/images/pokemon/variant/39.json @@ -0,0 +1,26 @@ +{ + "1": { + "d63a31": "f18fc4", + "a53100": "6f305b", + "ffada5": "c5ebd5", + "e67384": "81c2b8", + "10b5ef": "a17ed9", + "ffcec5": "e5ffec", + "104a8c": "393178", + "1973c5": "604ea1", + "a51021": "3a6472", + "6b5263": "153427", + "ceefff": "d9d3e3" + }, + "2": { + "ffada5": "f5e884", + "e67384": "f5c45b", + "10b5ef": "d14b4b", + "ffcec5": "fff9bf", + "104a8c": "8a2f2f", + "1973c5": "c45c54", + "a51021": "9c5200", + "6b5263": "737454", + "ceefff": "ffe9ed" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/390.json b/public/images/pokemon/variant/390.json new file mode 100644 index 00000000000..ba0119974de --- /dev/null +++ b/public/images/pokemon/variant/390.json @@ -0,0 +1,34 @@ +{ + "1": { + "e63131": "1db978", + "b56b29": "64464d", + "9c3131": "174c48", + "947308": "a86256", + "7b4210": "382029", + "ef6b6b": "5db95b", + "ffd631": "eafe67", + "f06e6e": "81dc3f", + "ffe6ad": "edc6a4", + "7e4410": "994943", + "ffad52": "a88d8d", + "e63a42": "2d8766", + "de8400": "876766", + "deb552": "cc9176" + }, + "2": { + "e63131": "b5b0f3", + "b56b29": "293b69", + "9c3131": "422e6f", + "947308": "818596", + "7b4210": "171f46", + "ef6b6b": "cb96e5", + "ffd631": "f3f8fe", + "f06e6e": "cbcfff", + "ffe6ad": "d3d5e0", + "7e4410": "626678", + "ffad52": "6995b5", + "e63a42": "8457b0", + "de8400": "3e5f8a", + "deb552": "a5a9b8" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/391.json b/public/images/pokemon/variant/391.json new file mode 100644 index 00000000000..c3503dec40a --- /dev/null +++ b/public/images/pokemon/variant/391.json @@ -0,0 +1,40 @@ +{ + "1": { + "8c7342": "994943", + "dfe5e7": "dac99d", + "c59463": "cc9176", + "cf3419": "2d8766", + "9c5219": "64464d", + "ffffff": "faf7d4", + "735a10": "a86256", + "cf2b19": "c9537e", + "ffce47": "f69044", + "efa542": "cd5528", + "ffce42": "eafe67", + "1052b5": "751a2f", + "1073de": "cc3140", + "6b3a08": "382029", + "d68c29": "876766", + "ce4219": "1db978", + "efce94": "edc6a4" + }, + "2": { + "8c7342": "818596", + "dfe5e7": "dca15d", + "c59463": "a5a9b8", + "cf3419": "8457b0", + "9c5219": "293b69", + "ffffff": "ffe175", + "735a10": "626678", + "cf2b19": "552b94", + "ffce47": "e8fdff", + "efa542": "b0cbd4", + "ffce42": "f3f8fe", + "1052b5": "e09f2f", + "1073de": "ffd745", + "6b3a08": "171f46", + "d68c29": "3e5f8a", + "ce4219": "b5b0f3", + "efce94": "d3d5e0" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/392.json b/public/images/pokemon/variant/392.json new file mode 100644 index 00000000000..78a9777736a --- /dev/null +++ b/public/images/pokemon/variant/392.json @@ -0,0 +1,54 @@ +{ + "1": { + "000000": "ffffff", + "a96442": "1a8251", + "a56240": "10916d", + "e68c5a": "876766", + "6b3a10": "382029", + "cfa423": "c9601e", + "bdc5de": "dac99d", + "a56342": "64464d", + "c9a022": "b7e350", + "737384": "9f8876", + "e63a42": "1db978", + "c59c21": "cd5528", + "875d08": "b03813", + "ffde4a": "e8a82a", + "ffde52": "f69044", + "e6353e": "2d8766", + "19427b": "581225", + "f88c49": "5db95b", + "ffffff": "faf7d4", + "845a08": "9b2719", + "3a73a5": "972733", + "f78c4a": "81dc3f", + "ffde4d": "eafe67", + "842931": "174c48" + }, + "2": { + "000000": "ffffff", + "a96442": "4c2985", + "a56240": "9595db", + "e68c5a": "3e5f8a", + "6b3a10": "171f46", + "cfa423": "c8af9b", + "bdc5de": "dca15d", + "a56342": "293b69", + "c9a022": "cbd0e3", + "737384": "a15a34", + "e63a42": "b5b0f3", + "c59c21": "a0c0cd", + "875d08": "8a5954", + "ffde4a": "fff8e5", + "ffde52": "e8fdff", + "e6353e": "8457b0", + "19427b": "4d5196", + "f88c49": "cb96e5", + "ffffff": "ffe175", + "845a08": "617995", + "3a73a5": "9c96e2", + "f78c4a": "cbcfff", + "ffde4d": "f3f8fe", + "842931": "422e6f" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/40.json b/public/images/pokemon/variant/40.json new file mode 100644 index 00000000000..9ec866694ca --- /dev/null +++ b/public/images/pokemon/variant/40.json @@ -0,0 +1,27 @@ +{ + "1": { + "737373": "1f2e3b", + "ffb3db": "f18fc4", + "9c6b21": "153139", + "8c4242": "3a6472", + "52a58c": "a17ed9", + "f77b94": "81c2b8", + "734219": "214f4f", + "ffadbd": "c5ebd5", + "ce6b63": "82b8a9", + "215a63": "393178" + }, + "2": { + "737373": "3b1f24", + "e6dee6": "bc4e24", + "9c6b21": "612719", + "8c4242": "9c5200", + "52a58c": "c45c54", + "f77b94": "f5c45b", + "ffffff": "d07439", + "734219": "68311a", + "ffadbd": "f5e884", + "ce6b63": "e6a54c", + "215a63": "8a2f2f" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/430.json b/public/images/pokemon/variant/430.json new file mode 100644 index 00000000000..e6771e34524 --- /dev/null +++ b/public/images/pokemon/variant/430.json @@ -0,0 +1,40 @@ +{ + "1": { + "31313a": "1d1d2b", + "efeff7": "b9382d", + "8c313a": "b3986b", + "5a5a3a": "1e1e2c", + "545454": "3c3b4d", + "29213a": "271b1a", + "3a5a9c": "694c30", + "8c3039": "9e2933", + "de5057": "bd392d", + "a3a3b5": "60606c", + "a5a5b5": "7a1e21", + "de525a": "f3e3b3", + "4a2121": "755237", + "ad943a": "3f3e50", + "3a3a5a": "422e26", + "525252": "380514", + "f7de3a": "61616d" + }, + "2": { + "31313a": "521a16", + "efeff7": "975bc2", + "8c313a": "bc4b84", + "5a5a3a": "4e1915", + "545454": "87432e", + "29213a": "091e16", + "3a5a9c": "1d6e47", + "8c3039": "9e2933", + "de5057": "bd392d", + "a3a3b5": "c4743b", + "a5a5b5": "4f358e", + "de525a": "f17f9c", + "4a2121": "7b2363", + "ad943a": "85412d", + "3a3a5a": "0e4333", + "525252": "1c1754", + "f7de3a": "c2723a" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/455.json b/public/images/pokemon/variant/455.json new file mode 100644 index 00000000000..1483b02ef5b --- /dev/null +++ b/public/images/pokemon/variant/455.json @@ -0,0 +1,35 @@ +{ + "1": { + "f7ce31": "7c5d53", + "c59c31": "4d3432", + "9c214a": "451e14", + "2b453d": "523b3c", + "3a5a3a": "b34a82", + "5a6342": "826660", + "8c9452": "b89d8c", + "846b31": "301e20", + "bdc57b": "efd9ba", + "422919": "300c0c", + "e62919": "775331", + "63843a": "e880ab", + "29423a": "7e3b67", + "8f9653": "e2b0bc" + }, + "2": { + "f7ce31": "518078", + "ffffff": "affffe", + "c59c31": "244a45", + "9c214a": "1e4340", + "2b453d": "151926", + "3a5a3a": "37818a", + "5a6342": "2d304e", + "8c9452": "424d6e", + "846b31": "122e2f", + "bdc57b": "6679a1", + "422919": "0d2626", + "e62919": "406b64", + "63843a": "74ddcd", + "29423a": "123247", + "8f9653": "3d909b" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/486.json b/public/images/pokemon/variant/486.json new file mode 100644 index 00000000000..32082b03337 --- /dev/null +++ b/public/images/pokemon/variant/486.json @@ -0,0 +1,41 @@ +{ + "1": { + "364859": "611d2a", + "adadc5": "ca7426", + "374859": "6b76a4", + "3a4a5a": "5e1e33", + "4aa563": "e2f2ff", + "5f6d7d": "7b2a19", + "ef7b8c": "7741a1", + "b5bdc5": "0d6696", + "5ac5f7": "5f94d9", + "d6ced6": "e89b34", + "3c4d5e": "3f031d", + "ffffff": "eb8746", + "21846b": "90a7cd", + "fafafa": "ffc245", + "c59c52": "a12612", + "f7d65a": "ce5129", + "7b6321": "3d021b", + "8c94ad": "13081a" + }, + "2": { + "364859": "24293f", + "adadc5": "4f673a", + "374859": "2f1a18", + "3a4a5a": "3b1930", + "4aa563": "755648", + "5f6d7d": "374427", + "ef7b8c": "811745", + "b5bdc5": "f1c832", + "5ac5f7": "d3271a", + "d6ced6": "6e884b", + "ffffff": "a8afaf", + "21846b": "492f29", + "fafafa": "88b06f", + "c59c52": "5d717a", + "f7d65a": "8f9b9e", + "7b6321": "384751", + "8c94ad": "494922" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/501.json b/public/images/pokemon/variant/501.json new file mode 100644 index 00000000000..e70d0319842 --- /dev/null +++ b/public/images/pokemon/variant/501.json @@ -0,0 +1,33 @@ +{ + "1": { + "c59429": "ff9ef3", + "efce84": "f2d5ee", + "294252": "241e44", + "c49529": "b73891", + "215a63": "1e1a35", + "c5c5ce": "e3c2ca", + "4a6bad": "9660d1", + "21949c": "373049", + "29bdc5": "5d4a70", + "8c5a31": "af62ac", + "31426b": "4b349e", + "8a5830": "681d49" + }, + "2": { + "8c8c9c": "8f7491", + "c59429": "4e8787", + "efce84": "8abfb1", + "4a4a4a": "715b72", + "294252": "104432", + "c49529": "4e8787", + "215a63": "000000", + "c5c5ce": "ba9bc1", + "4a6bad": "589787", + "21949c": "321e1e", + "ffffff": "f5e9f4", + "29bdc5": "5e3e38", + "8c5a31": "0c4848", + "31426b": "3c706b", + "8a5830": "0c4848" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/502.json b/public/images/pokemon/variant/502.json new file mode 100644 index 00000000000..4227d277216 --- /dev/null +++ b/public/images/pokemon/variant/502.json @@ -0,0 +1,33 @@ +{ + "1": { + "7b5a10": "d877cd", + "31528c": "9d5bc9", + "4a4a4a": "20193d", + "efd68c": "f2d5ee", + "293a6b": "503e8e", + "c5525a": "b73891", + "52bdbd": "624060", + "c59429": "ff9ef3", + "733a3a": "6b1d42", + "313131": "120f33", + "315a73": "1e1624", + "218c94": "39273d", + "fffdfd": "ebb9c4" + }, + "2": { + "7b5a10": "0d5656", + "31528c": "5e3e38", + "4a4a4a": "2c3940", + "efd68c": "63c7bd", + "293a6b": "321e1e", + "c5525a": "519785", + "52bdbd": "8b7566", + "c59429": "488383", + "733a3a": "377667", + "313131": "1f2b36", + "315a73": "483026", + "218c94": "684f44", + "fffdfd": "ffffc2", + "ffffff": "ffffc2" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/503.json b/public/images/pokemon/variant/503.json new file mode 100644 index 00000000000..16447be5cca --- /dev/null +++ b/public/images/pokemon/variant/503.json @@ -0,0 +1,37 @@ +{ + "1": { + "84a5a5": "563785", + "4a4a4a": "5e283e", + "215a9c": "4c234a", + "c5c5ce": "b57ea1", + "8aa3a3": "a05982", + "d65263": "b73891", + "8da8a8": "a58b90", + "7b6342": "975fad", + "fffeff": "ebb9c4", + "213a63": "28142c", + "4a4a4c": "6b3e51", + "d6c57b": "f2d5ee", + "5a7373": "332a59", + "ad945a": "db87d1" + }, + "2": { + "84a5a5": "41857b", + "4a4a4a": "c2700d", + "215a9c": "5e3e38", + "c5c5ce": "efa838", + "8aa3a3": "d3a51f", + "d65263": "41857b", + "8da8a8": "bdbdbd", + "7b6342": "0d5656", + "fdfdff": "ffffff", + "fffeff": "f9df58", + "213a63": "321e1e", + "4a4a4c": "c2700d", + "d6c57b": "63c7bd", + "5a7373": "2a5c57", + "9ab2af": "2a5c57", + "494644": "1a5451", + "ad945a": "488383" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/527.json b/public/images/pokemon/variant/527.json new file mode 100644 index 00000000000..460a954874f --- /dev/null +++ b/public/images/pokemon/variant/527.json @@ -0,0 +1,28 @@ +{ + "1": { + "191921": "24224f", + "424a5a": "866ca1", + "6b94ad": "6e315e", + "f7adb5": "8ffff9", + "73adc5": "853d6f", + "292931": "55457a", + "ce2942": "a3ffed", + "8c4a52": "4874b8", + "84193a": "5fd4d0", + "c56b7b": "6bc7e8", + "4a6b7b": "361538", + "addef7": "914a6e" + }, + "2": { + "191921": "45234d", + "424a5a": "bf3f75", + "6b94ad": "db843d", + "f7adb5": "b682e0", + "73adc5": "e8b04f", + "292931": "8c2961", + "8c4a52": "393582", + "c56b7b": "7b5ebf", + "4a6b7b": "994d22", + "addef7": "f7e05c" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/528.json b/public/images/pokemon/variant/528.json new file mode 100644 index 00000000000..86dd66a4344 --- /dev/null +++ b/public/images/pokemon/variant/528.json @@ -0,0 +1,38 @@ +{ + "1": { + "bdbdce": "76debd", + "313131": "55457a", + "ceefff": "a6ffd7", + "425aa5": "451b41", + "4a4a52": "866ca1", + "2b2b2b": "2b4182", + "2e2e2e": "2f1236", + "f7a59c": "8ffff9", + "317b94": "6e315e", + "54546d": "582253", + "de8c84": "6bc7e8", + "19a5ce": "914a6e", + "944a4a": "4874b8", + "494950": "3b53a3", + "6b7b84": "439ca1", + "363636": "2e6f7a" + }, + "2": { + "bdbdce": "db843d", + "313131": "701c4c", + "ceefff": "f7e05c", + "425aa5": "d6a178", + "4a4a52": "bf3f75", + "2b2b2b": "1d1c4f", + "2e2e2e": "a6705e", + "f7a59c": "b682e0", + "317b94": "e0b49a", + "54546d": "a87354", + "de8c84": "7b5ebf", + "19a5ce": "f9fae3", + "944a4a": "393582", + "494950": "1b1f4d", + "6b7b84": "994d22", + "363636": "6b2314" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/587.json b/public/images/pokemon/variant/587.json new file mode 100644 index 00000000000..34831752444 --- /dev/null +++ b/public/images/pokemon/variant/587.json @@ -0,0 +1,33 @@ +{ + "1": { + "d6a531": "a84223", + "fffbf6": "8bd5dc", + "917d53": "16223d", + "ffd600": "d55b19", + "313131": "1d352a", + "212121": "091814", + "b58c08": "681c0e", + "cec5ad": "5a9fbf", + "6b5a31": "3b1c1b", + "a09478": "406da4", + "414141": "2b5d3f", + "434141": "2b5d3f" + }, + "2": { + "c56b63": "5046a7", + "d6a531": "6597cd", + "fffbf6": "c4658e", + "917d53": "321832", + "ffd600": "8bcaee", + "943a42": "462060", + "313131": "372a5b", + "212121": "15132f", + "e69484": "8166c6", + "b58c08": "4879af", + "cec5ad": "9b4072", + "6b5a31": "28273d", + "a09478": "7b3760", + "414141": "5e3a86", + "434141": "5e3a86" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/588.json b/public/images/pokemon/variant/588.json new file mode 100644 index 00000000000..86aa0e118f7 --- /dev/null +++ b/public/images/pokemon/variant/588.json @@ -0,0 +1,33 @@ +{ + "1": { + "213a5a": "2f185b", + "316bff": "8150a7", + "73d6ff": "e8aa48", + "313131": "38131d", + "736321": "8188b0", + "c55200": "b9262c", + "528cff": "c682d6", + "b59c19": "b8c5e5", + "4a4a4a": "64242d", + "000000": "ffffff", + "3a5284": "492c72", + "ffde19": "eef5ff", + "4294ad": "cd6a31" + }, + "2": { + "213a5a": "44446f", + "316bff": "d2cdeb", + "73d6ff": "ffe28d", + "313131": "182138", + "736321": "6f1b34", + "c55200": "ffe8c3", + "528cff": "f9f3ff", + "ce5263": "df6b99", + "b59c19": "a42641", + "4a4a4a": "28334f", + "000000": "ffffff", + "3a5284": "7777a7", + "ffde19": "d0413f", + "4294ad": "d9a35c" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/589.json b/public/images/pokemon/variant/589.json new file mode 100644 index 00000000000..486088d13d3 --- /dev/null +++ b/public/images/pokemon/variant/589.json @@ -0,0 +1,32 @@ +{ + "1": { + "c5c5c5": "f9c347", + "ef2952": "eb8343", + "e65a10": "614593", + "bd2152": "c44126", + "736321": "7b8bb3", + "840808": "931119", + "000000": "ffffff", + "6b6b6b": "b34516", + "bd9c19": "b8c5e5", + "195abd": "7436a4", + "94949c": "dc862d", + "ffde19": "eef5ff", + "3a424a": "69130d" + }, + "2": { + "c5c5c5": "6e8e99", + "ef2952": "f7efff", + "e65a10": "ffe8c3", + "bd2152": "beb7df", + "736321": "6f1b34", + "840808": "72709e", + "000000": "ffffff", + "6b6b6b": "293a52", + "bd9c19": "a42641", + "195abd": "4f3d33", + "94949c": "3f6372", + "ffde19": "d0413f", + "3a424a": "1b253d" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/590.json b/public/images/pokemon/variant/590.json new file mode 100644 index 00000000000..d17924e966c --- /dev/null +++ b/public/images/pokemon/variant/590.json @@ -0,0 +1,30 @@ +{ + "1": { + "826b61": "348999", + "9c3a3a": "71de8c", + "846b63": "348999", + "6b4a31": "0d9999", + "684b30": "0d9999", + "422929": "0a5870", + "9c3a7b": "88af70", + "de5a52": "e6ffc1", + "d6639c": "f4ebba", + "7b3131": "49ad77", + "c5b59c": "47d1b5", + "fff7e6": "afecc6" + }, + "2": { + "826b61": "86b8cc", + "9c3a3a": "e098cd", + "846b63": "404f6b", + "6b4a31": "f2f7f9", + "684b30": "2b5caf", + "422929": "b9d9e5", + "9c3a7b": "b1c4dd", + "de5a52": "ffbfcb", + "d6639c": "f2f7f9", + "7b3131": "ce88bb", + "c5b59c": "498cd3", + "fff7e6": "6ac2e2" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/591.json b/public/images/pokemon/variant/591.json new file mode 100644 index 00000000000..d0290501b39 --- /dev/null +++ b/public/images/pokemon/variant/591.json @@ -0,0 +1,42 @@ +{ + "1": { + "423231": "0c7588", + "533f3a": "094164", + "604740": "0b7f79", + "6b314a": "49ad77", + "423131": "0a5870", + "8c735a": "348999", + "cec5c5": "afecc6", + "634b42": "094164", + "9c9484": "47d1b5", + "423331": "0c7588", + "634c42": "348999", + "291919": "094164", + "ad3163": "71de8c", + "de8ca5": "d8cfa0", + "634a42": "0d9999", + "6b314c": "749660", + "ffadce": "f4ebba", + "de528c": "e6ffc1" + }, + "2": { + "423231": "404f6b", + "533f3a": "223656", + "604740": "3b6aa0", + "6b314a": "ad629a", + "423131": "9bb6c1", + "8c735a": "2b5caf", + "cec5c5": "6ac2e2", + "634b42": "223656", + "9c9484": "56a1e2", + "423331": "9bb6c1", + "634c42": "3f7dc7", + "291919": "5e718e", + "ad3163": "e098cd", + "de8ca5": "b1c4dd", + "634a42": "f2f7f9", + "6b314c": "65788e", + "ffadce": "f4f8f9", + "de528c": "ffbfcb" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/616.json b/public/images/pokemon/variant/616.json new file mode 100644 index 00000000000..184360b3734 --- /dev/null +++ b/public/images/pokemon/variant/616.json @@ -0,0 +1,30 @@ +{ + "1": { + "3a8442": "4e3671", + "42bd31": "775998", + "313131": "491722", + "c5c5d6": "f9c347", + "9494ad": "dc862d", + "ff4a7b": "6ba779", + "630021": "204b4f", + "b5214a": "346c65", + "de3163": "4a8474", + "000000": "ffffff", + "29315a": "69130d", + "5a5a7b": "b34516" + }, + "2": { + "3a8442": "dfa75c", + "42bd31": "fff07e", + "313131": "171e2f", + "c5c5d6": "6e8e99", + "9494ad": "3f6372", + "ff4a7b": "8cb0d6", + "630021": "2e3469", + "b5214a": "4f62a4", + "de3163": "6b8bbf", + "000000": "ffffff", + "29315a": "1b253d", + "5a5a7b": "293a52" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/617.json b/public/images/pokemon/variant/617.json new file mode 100644 index 00000000000..7c2951b5571 --- /dev/null +++ b/public/images/pokemon/variant/617.json @@ -0,0 +1,30 @@ +{ + "1": { + "ffffff": "fff47e", + "a5846b": "5a6675", + "42b55a": "4e3671", + "c53a6b": "427b6b", + "bdbdce": "df9847", + "527b42": "362658", + "732931": "214c49", + "ff4a7b": "6ba779", + "6b84c5": "eef5ff", + "3a2919": "192638", + "000000": "ffffff", + "293a6b": "69719e", + "5a6384": "b8c5e5" + }, + "2": { + "a5846b": "637974", + "42b55a": "415c69", + "c53a6b": "dcaa47", + "527b42": "1d2a3b", + "732931": "8a5727", + "ff4a7b": "ffee72", + "6b84c5": "b43d40", + "3a2919": "2a2235", + "000000": "ffffff", + "293a6b": "461b2e", + "5a6384": "7b2c3d" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/621.json b/public/images/pokemon/variant/621.json new file mode 100644 index 00000000000..1c347dcadc8 --- /dev/null +++ b/public/images/pokemon/variant/621.json @@ -0,0 +1,28 @@ +{ + "1": { + "d6bd6b": "ac8b5e", + "940042": "1a2248", + "635231": "605127", + "104a8c": "7e231b", + "8c7b5a": "73654b", + "efc500": "5c7886", + "103163": "601111", + "521031": "0f1330", + "d60042": "26335d", + "316bad": "a13b2c", + "d65273": "be5b5e" + }, + "2": { + "d6bd6b": "ffbc30", + "940042": "177297", + "635231": "be6e18", + "104a8c": "c9bb9a", + "8c7b5a": "da8921", + "efc500": "ffd437", + "103163": "a0896b", + "521031": "0f4973", + "d60042": "24aec0", + "316bad": "e3ddbd", + "d65273": "c583a5" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/6503.json b/public/images/pokemon/variant/6503.json new file mode 100644 index 00000000000..c6cc21b45db --- /dev/null +++ b/public/images/pokemon/variant/6503.json @@ -0,0 +1,34 @@ +{ + "1": { + "282f62": "f7d9de", + "c4c5cf": "e3c2ca", + "84a4a7": "563785", + "a82c47": "d45b9e", + "8aa3a3": "6b415b", + "494a48": "3d2439", + "1d3962": "28142c", + "d75063": "b73891", + "1e224e": "dc95ae", + "1e5b9b": "4d244b", + "181531": "a26579", + "6b1c34": "8f3396", + "597471": "332a59", + "8da8a8": "a58b90" + }, + "2": { + "282f62": "efdfee", + "c4c5cf": "232d2e", + "84a4a7": "41857b", + "a82c47": "8abfb1", + "8aa3a3": "181f20", + "faf9f9": "2c3940", + "494a48": "0b0f18", + "1d3962": "321e1e", + "d75063": "8f65d8", + "1e224e": "ba9bc1", + "1e5b9b": "5e3e38", + "181531": "715b72", + "6b1c34": "6d9d9a", + "597471": "2a5c57" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/656.json b/public/images/pokemon/variant/656.json new file mode 100644 index 00000000000..68743a4c9f1 --- /dev/null +++ b/public/images/pokemon/variant/656.json @@ -0,0 +1,32 @@ +{ + "1": { + "838394": "4d7dc5", + "62ace6": "8363af", + "7bcdff": "9c75c2", + "ffec8c": "ddfff9", + "a1a1c4": "7ab7ec", + "c9b241": "97d6e2", + "dfcf77": "bae7e8", + "174592": "37408c", + "fdfdfd": "b1e5ff", + "9c9cc5": "5385c7", + "cdcde6": "7eb7e8", + "396a83": "362864", + "5a94cd": "7054a4" + }, + "2": { + "838394": "cc6845", + "62ace6": "c44848", + "7bcdff": "dd6155", + "ffec8c": "ddfff9", + "a1a1c4": "f7c685", + "c9b241": "97d6e2", + "dfcf77": "bae7e8", + "174592": "198158", + "fdfdfd": "fff4bd", + "9c9cc5": "c96a48", + "cdcde6": "f7b785", + "396a83": "5c0d33", + "5a94cd": "a92f3f" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/657.json b/public/images/pokemon/variant/657.json new file mode 100644 index 00000000000..773b4d2efc1 --- /dev/null +++ b/public/images/pokemon/variant/657.json @@ -0,0 +1,32 @@ +{ + "1": { + "f8f8f8": "8dcfff", + "efc653": "abd7db", + "737373": "0f3f82", + "0b566a": "281f52", + "ffec72": "c9fff5", + "002c58": "1c0726", + "bfbfbf": "4386df", + "006ba6": "4e1852", + "009dd5": "61255e", + "0b4a7a": "340f3d", + "e1a03a": "78c7c7", + "41ccf5": "7755a7", + "2896b5": "4b3578" + }, + "2": { + "f8f8f8": "fff6c7", + "efc653": "abd7db", + "737373": "df6a50", + "0b566a": "7e1628", + "ffec72": "ddfff9", + "002c58": "0c3b54", + "bfbfbf": "ffc996", + "006ba6": "239c91", + "009dd5": "37b8ac", + "0b4a7a": "156f78", + "e1a03a": "86abbb", + "41ccf5": "dd7355", + "2896b5": "a92f3a" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/658-ash.json b/public/images/pokemon/variant/658-ash.json new file mode 100644 index 00000000000..29b5bd2560b --- /dev/null +++ b/public/images/pokemon/variant/658-ash.json @@ -0,0 +1,44 @@ +{ + "1": { + "265595": "432b6c", + "3f4447": "466698", + "de3431": "3fca9f", + "f8f8f8": "a1e9f0", + "7b282e": "0e3e81", + "6b1d1d": "206d74", + "4ebdd9": "41a7b0", + "bfb169": "165e78", + "bfbfbf": "8cc7d4", + "ffb2bf": "b7e9ff", + "bf4c60": "4386df", + "fff0a6": "271f4c", + "3e7acc": "6b4592", + "18335c": "170738", + "f2798d": "8dcfff", + "f01818": "39b88f", + "7ddeff": "7ddcd6", + "268794": "1c3e58", + "282c35": "271f4c" + }, + "2": { + "265595": "cc7251", + "3f4447": "466698", + "de3431": "9ceec6", + "f8f8f8": "89d2b8", + "7b282e": "152a5c", + "6b1d1d": "356e8d", + "4ebdd9": "2f6e74", + "bfb169": "431022", + "bfbfbf": "8cc7d4", + "ffb2bf": "86d6b6", + "bf4c60": "32738b", + "fff0a6": "4d2637", + "3e7acc": "ecbb7a", + "18335c": "9f2727", + "f2798d": "5eb4a9", + "f01818": "ffe88d", + "7ddeff": "46988d", + "268794": "1c3e58", + "282c35": "4d2637" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/658.json b/public/images/pokemon/variant/658.json new file mode 100644 index 00000000000..25a6dad359d --- /dev/null +++ b/public/images/pokemon/variant/658.json @@ -0,0 +1,34 @@ +{ + "1": { + "ffb2bf": "b7e9ff", + "bf4c60": "4386df", + "66d9ff": "7ddcd6", + "3d61cc": "6b4592", + "fff0a6": "208698", + "c92e2e": "73c5ff", + "937f69": "406695", + "c2c1bc": "89b0d7", + "f2798d": "8dcfff", + "f7f7f7": "d8ffff", + "2e4999": "432b6c", + "bfb169": "165e78", + "803340": "0e3e81", + "1b2a59": "170738" + }, + "2": { + "ffb2bf": "86d6b6", + "bf4c60": "32738b", + "66d9ff": "48968c", + "3d61cc": "ecbb7a", + "fff0a6": "652240", + "c92e2e": "63bf9b", + "937f69": "466698", + "c2c1bc": "8cc7d4", + "f2798d": "5eb4a9", + "f7f7f7": "d7eff4", + "2e4999": "cc7251", + "bfb169": "431022", + "803340": "152a5c", + "1b2a59": "9f2727" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/676-dandy.json b/public/images/pokemon/variant/676-dandy.json new file mode 100644 index 00000000000..ac18c8446d9 --- /dev/null +++ b/public/images/pokemon/variant/676-dandy.json @@ -0,0 +1,30 @@ +{ + "1": { + "594d46": "788087", + "30552b": "423839", + "b8bcaf": "5e0f16", + "f1f2ee": "8a1d1d", + "376277": "4f8fe3", + "9c9f94": "42090e", + "4b4b46": "2b040f", + "508a3c": "aa9999", + "816e64": "a6afb3", + "6eb92b": "eddddd", + "453434": "313439" + }, + "2": { + "594d46": "9c7aca", + "30552b": "6a102e", + "b8bcaf": "ce9ede", + "f1f2ee": "e6c3f8", + "376277": "314173", + "fe3c31": "8362b4", + "9c9f94": "ad76bc", + "4b4b46": "6b3f77", + "508a3c": "ac254b", + "a83c31": "473085", + "816e64": "ae95dc", + "6eb92b": "e44a62", + "453434": "593173" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/676-debutante.json b/public/images/pokemon/variant/676-debutante.json new file mode 100644 index 00000000000..bf3d0dfe212 --- /dev/null +++ b/public/images/pokemon/variant/676-debutante.json @@ -0,0 +1,30 @@ +{ + "1": { + "594d46": "788087", + "376277": "4f8fe3", + "9c9f94": "42090e", + "f8f9f7": "8a1d1d", + "dfb76a": "aa9999", + "4b4b46": "2b040f", + "bcc0b3": "5e0f16", + "453434": "313439", + "816e64": "a6afb3", + "ac6d40": "423839", + "fbf588": "e3d6d6" + }, + "2": { + "594d46": "48a7d0", + "376277": "717171", + "fe3c31": "762ea8", + "9c9f94": "122a39", + "f8f9f7": "0e728e", + "dfb76a": "c6a65c", + "4b4b46": "021a2f", + "bcc0b3": "0b4b68", + "453434": "122a39", + "a83c31": "521073", + "816e64": "74ccec", + "ac6d40": "684d24", + "fbf588": "ffe998" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/676-diamond.json b/public/images/pokemon/variant/676-diamond.json new file mode 100644 index 00000000000..72e19d6a853 --- /dev/null +++ b/public/images/pokemon/variant/676-diamond.json @@ -0,0 +1,28 @@ +{ + "1": { + "594d46": "788087", + "aa3e2b": "423839", + "b8bcaf": "5e0f16", + "f1f2ee": "8a1d1d", + "376277": "4f8fe3", + "645e55": "2b040f", + "d95b37": "aa9999", + "e68a4d": "eddddd", + "453434": "313439", + "816e64": "a6afb3" + }, + "2": { + "594d46": "bd9462", + "aa3e2b": "642c0a", + "b8bcaf": "319c6a", + "f1f2ee": "6abd81", + "376277": "c56e34", + "fe3c31": "b37e47", + "645e55": "1b684b", + "d95b37": "935927", + "e68a4d": "b37e47", + "453434": "6c4b2d", + "a83c31": "642c0a", + "816e64": "eed59c" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/676-heart.json b/public/images/pokemon/variant/676-heart.json new file mode 100644 index 00000000000..895b5b49e99 --- /dev/null +++ b/public/images/pokemon/variant/676-heart.json @@ -0,0 +1,28 @@ +{ + "1": { + "594d46": "788087", + "f18598": "48474c", + "b8bcaf": "5e0f16", + "f1f2ee": "8a1d1d", + "e0546c": "2a2a2f", + "376277": "4f8fe3", + "645e55": "2b040f", + "453434": "313439", + "816e64": "a6afb3", + "a73f4f": "19181f" + }, + "2": { + "594d46": "aca49c", + "f18598": "5f5953", + "b8bcaf": "bfc7e8", + "f1f2ee": "e4eafc", + "e0546c": "4c413c", + "376277": "1b1c21", + "fe3c31": "9475de", + "645e55": "7a81b7", + "453434": "837373", + "a83c31": "7249b7", + "816e64": "dadace", + "a73f4f": "2c2320" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/676-kabuki.json b/public/images/pokemon/variant/676-kabuki.json new file mode 100644 index 00000000000..9d57fc830be --- /dev/null +++ b/public/images/pokemon/variant/676-kabuki.json @@ -0,0 +1,36 @@ +{ + "1": { + "816e64": "a6afb3", + "8f2121": "19181f", + "b01a1a": "2a2a2f", + "d02f2e": "262629", + "594d46": "788087", + "f44b3d": "48474c", + "376277": "4f8fe3", + "68675c": "2b040f", + "453434": "313439", + "8a7d79": "a6afb3", + "9c9f94": "42090e", + "534343": "313439", + "bcc0b3": "5e0f16", + "f1f2ee": "8a1d1d" + }, + "2": { + "816e64": "506e7b", + "8f2121": "1b1d39", + "b01a1a": "305d9e", + "d02f2e": "48578e", + "594d46": "3e5368", + "f66559": "9890ec", + "f44b3d": "4c89d9", + "376277": "436ca1", + "68675c": "192b42", + "453434": "17242f", + "8a7d79": "425a70", + "9c9f94": "468197", + "534343": "233342", + "bcc0b3": "549ab8", + "f1f2ee": "6bcfd9", + "b32524": "8067c6" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/676-la-reine.json b/public/images/pokemon/variant/676-la-reine.json new file mode 100644 index 00000000000..ae73038cfb2 --- /dev/null +++ b/public/images/pokemon/variant/676-la-reine.json @@ -0,0 +1,32 @@ +{ + "1": { + "816e64": "a6afb3", + "31a7bb": "aa9999", + "594d46": "788087", + "2f7387": "423839", + "453434": "313439", + "4b4b46": "2b040f", + "8a7d79": "a6afb3", + "9c9f94": "42090e", + "376277": "4f8fe3", + "56d1d8": "eddddd", + "bcc0b3": "5e0f16", + "f1f2ee": "8a1d1d" + }, + "2": { + "816e64": "973721", + "a83c31": "3041b7", + "31a7bb": "e3b876", + "594d46": "711e1e", + "2f7387": "8e673e", + "453434": "360608", + "4b4b46": "550b0c", + "8a7d79": "a11e24", + "9c9f94": "c63b31", + "376277": "221755", + "56d1d8": "ffec9b", + "bcc0b3": "d9533c", + "f1f2ee": "ee724b", + "fe3c31": "4b77e1" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/676-matron.json b/public/images/pokemon/variant/676-matron.json new file mode 100644 index 00000000000..8fdf48c14a8 --- /dev/null +++ b/public/images/pokemon/variant/676-matron.json @@ -0,0 +1,30 @@ +{ + "1": { + "594d46": "788087", + "b8bcaf": "5e0f16", + "873a5b": "19181f", + "376277": "4f8fe3", + "9c9f94": "42090e", + "f8f9f7": "8a1d1d", + "d07da9": "48474c", + "5f5951": "2b040f", + "816e64": "a6afb3", + "453434": "313439", + "b95b83": "2a2a2f" + }, + "2": { + "594d46": "d0b5b5", + "b8bcaf": "d95e7e", + "873a5b": "1b447b", + "376277": "2246aa", + "fe3c31": "64edf3", + "9c9f94": "bd4d6a", + "f8f9f7": "fa8c9f", + "d07da9": "64c8f3", + "5f5951": "8a2843", + "a83c31": "45a6d0", + "816e64": "e3d6d6", + "453434": "715456", + "b95b83": "528fcc" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/676-pharaoh.json b/public/images/pokemon/variant/676-pharaoh.json new file mode 100644 index 00000000000..cf6694aa348 --- /dev/null +++ b/public/images/pokemon/variant/676-pharaoh.json @@ -0,0 +1,30 @@ +{ + "1": { + "594d46": "788087", + "25559c": "2a2a2f", + "217fc4": "48474c", + "f1f2ee": "8a1d1d", + "376277": "4f8fe3", + "9c9f94": "42090e", + "bcc0b3": "5e0f16", + "68675c": "2b040f", + "453434": "313439", + "816e64": "a6afb3", + "243a6f": "19181f" + }, + "2": { + "594d46": "1c1c30", + "25559c": "d0902d", + "217fc4": "eed552", + "f1f2ee": "5e5e75", + "376277": "5e0808", + "fe3c31": "ec4d3e", + "9c9f94": "332b48", + "bcc0b3": "3b3955", + "68675c": "17122f", + "453434": "130b1c", + "a83c31": "a11717", + "816e64": "312c42", + "243a6f": "a15317" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/676-star.json b/public/images/pokemon/variant/676-star.json new file mode 100644 index 00000000000..e0b0e330676 --- /dev/null +++ b/public/images/pokemon/variant/676-star.json @@ -0,0 +1,28 @@ +{ + "1": { + "594d46": "788087", + "376277": "4f8fe3", + "645e55": "2b040f", + "b8bcaf": "5e0f16", + "3e8ebf": "2a2a2f", + "f1f2ee": "8a1d1d", + "453434": "313439", + "3a5078": "19181f", + "816e64": "a6afb3", + "7dc2e8": "48474c" + }, + "2": { + "594d46": "d7bc4d", + "376277": "647bb1", + "fe3c31": "b5e0f3", + "645e55": "848e75", + "a83c31": "6192aa", + "b8bcaf": "d6dec2", + "3e8ebf": "ac802f", + "f1f2ee": "fcfef5", + "453434": "836329", + "3a5078": "613d11", + "816e64": "f7e784", + "7dc2e8": "cdac4a" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/676.json b/public/images/pokemon/variant/676.json new file mode 100644 index 00000000000..8c9199960c9 --- /dev/null +++ b/public/images/pokemon/variant/676.json @@ -0,0 +1,21 @@ +{ + "1": { + "bcbca8": "5e0f16", + "606056": "2b040f", + "8e8e7b": "42090e", + "f2f2da": "8a1d1d", + "3f6273": "4f8fe3", + "494340": "788087", + "736b67": "a6afb3" + }, + "2": { + "bcbca8": "a4624a", + "cc2929": "3a240e", + "606056": "4a281b", + "8e8e7b": "805145", + "f2f2da": "c18960", + "3f6273": "4a281b", + "494340": "e6c594", + "736b67": "ffe6ac" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/682.json b/public/images/pokemon/variant/682.json new file mode 100644 index 00000000000..03337345194 --- /dev/null +++ b/public/images/pokemon/variant/682.json @@ -0,0 +1,26 @@ +{ + "1": { + "661f1f": "cd6132", + "bf5f9f": "7c48a1", + "6b3962": "30185d", + "cc7087": "318759", + "993d80": "4f297e", + "ff99b3": "48ab61", + "f24949": "ffa24f", + "7f4d59": "20644e" + }, + "2": { + "661f1f": "daa235", + "bf5f9f": "f0ebdd", + "6b3962": "b89477", + "cc7087": "c3561a", + "993d80": "d2bfa1", + "ff99b3": "da7e29", + "a6a6a6": "503851", + "f24949": "ffe664", + "e5e5e5": "6b4767", + "737373": "422f46", + "4d4d4d": "332539", + "7f4d59": "a23812" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/683.json b/public/images/pokemon/variant/683.json new file mode 100644 index 00000000000..42abc0856ad --- /dev/null +++ b/public/images/pokemon/variant/683.json @@ -0,0 +1,32 @@ +{ + "1": { + "661f1f": "b64d29", + "cc7087": "318759", + "ff99b3": "48ab61", + "fff0a6": "fec04b", + "f24949": "ffa24f", + "6b3962": "30185d", + "e5c37e": "d6872c", + "993d80": "4f297e", + "404040": "2c283b", + "b33636": "f4863f", + "7f4d59": "20644e", + "bf5f9f": "7c48a1" + }, + "2": { + "661f1f": "c78925", + "cc7087": "c3561a", + "ff99b3": "da7e29", + "fff0a6": "6d8719", + "a6a6a6": "503851", + "f24949": "ffe664", + "6b3962": "b89477", + "e5c37e": "376d11", + "993d80": "d2bfa1", + "e5e5e5": "6b4767", + "404040": "2a2234", + "b33636": "f0c150", + "7f4d59": "a23812", + "bf5f9f": "f0ebdd" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/684.json b/public/images/pokemon/variant/684.json new file mode 100644 index 00000000000..df4240c57d6 --- /dev/null +++ b/public/images/pokemon/variant/684.json @@ -0,0 +1,24 @@ +{ + "1": { + "805963": "2d0c42", + "661a2d": "205025", + "e53964": "689b52", + "ffccd9": "814db1", + "f8f8f8": "caff90", + "cc99a6": "613b84", + "fff2f2": "f39f62", + "7b5760": "b13924", + "ccadad": "df6b40" + }, + "2": { + "805963": "679baa", + "661a2d": "26061b", + "e53964": "612747", + "ffccd9": "cbf6da", + "f8f8f8": "e4819d", + "cc99a6": "93d6ce", + "fff2f2": "746998", + "7b5760": "3c2f51", + "ccadad": "4b4876" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/685.json b/public/images/pokemon/variant/685.json new file mode 100644 index 00000000000..99d52263178 --- /dev/null +++ b/public/images/pokemon/variant/685.json @@ -0,0 +1,28 @@ +{ + "1": { + "f8f8f8": "caff90", + "661a2d": "13391c", + "7b5760": "b13924", + "a62949": "26592b", + "ffccd9": "8961c6", + "ff8ca9": "8dbe6d", + "cc99a6": "613b84", + "e53964": "689b52", + "fff2f2": "f39f62", + "ccadad": "df6b40", + "805963": "2d0c42" + }, + "2": { + "f8f8f8": "e4819d", + "661a2d": "26061b", + "7b5760": "3c2f51", + "a62949": "441838", + "ffccd9": "cbf6da", + "ff8ca9": "8c4264", + "cc99a6": "93d6ce", + "e53964": "612747", + "fff2f2": "746998", + "ccadad": "4b4876", + "805963": "679baa" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/688.json b/public/images/pokemon/variant/688.json new file mode 100644 index 00000000000..e5749f6bb3f --- /dev/null +++ b/public/images/pokemon/variant/688.json @@ -0,0 +1,33 @@ +{ + "1": { + "5890b0": "a9582e", + "385860": "70240f", + "372e27": "220a56", + "6b503b": "373295", + "d0d0d0": "d3bc8c", + "c0e0e8": "e8d37b", + "8a6d45": "4557b5", + "101010": "37160a", + "b7653f": "459aac", + "fcffff": "e8e5c6", + "808080": "7c582e", + "88c0c8": "cd8a50", + "ef8955": "70cccf" + }, + "2": { + "5890b0": "4b0038", + "385860": "2c052a", + "372e27": "1e1324", + "6b503b": "ba9fba", + "d0d0d0": "7eac4e", + "c0e0e8": "a74083", + "8a6d45": "f6eefc", + "101010": "0a391b", + "b7653f": "332149", + "fcffff": "caea77", + "f8f8f8": "ffffff", + "808080": "2a5524", + "88c0c8": "731f5c", + "ef8955": "4a376e" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/689.json b/public/images/pokemon/variant/689.json new file mode 100644 index 00000000000..cd6db09c8d2 --- /dev/null +++ b/public/images/pokemon/variant/689.json @@ -0,0 +1,31 @@ +{ + "1": { + "bfeaff": "e8d37b", + "f2f2f2": "e8e5c6", + "5b8da6": "8d5030", + "595959": "7c582e", + "403410": "220a56", + "3f6273": "672e1e", + "b3b3b3": "d3bc8c", + "cc7f70": "459aac", + "85b4cc": "cd8a50", + "ff9f8c": "70cccf", + "66541f": "373295", + "997e2e": "4557b5" + }, + "2": { + "bfeaff": "a74083", + "f2f2f2": "caea77", + "5b8da6": "4b0038", + "595959": "2a5524", + "403410": "3f2a4b", + "3f6273": "3e073b", + "b3b3b3": "7eac4e", + "cc7f70": "332149", + "85b4cc": "731f5c", + "f8f8f8": "dbaf67", + "ff9f8c": "4a376e", + "66541f": "ccb6cc", + "997e2e": "f6eefc" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/807.json b/public/images/pokemon/variant/807.json new file mode 100644 index 00000000000..bfb72f3cd42 --- /dev/null +++ b/public/images/pokemon/variant/807.json @@ -0,0 +1,28 @@ +{ + "1": { + "ef8a4e": "4f7bb6", + "484f57": "243058", + "000000": "ffffff", + "727678": "3e5277", + "2759a5": "736599", + "5bd0f2": "ebceff", + "daa936": "5a96b6", + "9d682d": "3c648d", + "f9e455": "7fc7d9", + "2394d8": "b298d8", + "31343e": "14193f" + }, + "2": { + "ef8a4e": "834b95", + "484f57": "cda4cb", + "000000": "ffffff", + "727678": "e8cae3", + "2759a5": "a4378a", + "5bd0f2": "e17197", + "daa936": "331b53", + "9d682d": "1d1044", + "f9e455": "56306f", + "2394d8": "c05192", + "31343e": "a981b1" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/894.json b/public/images/pokemon/variant/894.json new file mode 100644 index 00000000000..99756eea4d5 --- /dev/null +++ b/public/images/pokemon/variant/894.json @@ -0,0 +1,28 @@ +{ + "1": { + "fffbfc": "fefaef", + "e5ee1a": "6ad7f3", + "8eacdd": "caffd1", + "7d542a": "2769aa", + "fefac7": "dffff6", + "bc8b2f": "124b78", + "fffbfb": "dffff6", + "2e3967": "357b84", + "4e7cc9": "9bf1c4", + "375395": "5fcaad", + "ff9dc2": "2c3072", + "d7ad0d": "45a3d6" + }, + "2": { + "e5ee1a": "d4ffd0", + "8eacdd": "c693d8", + "7d542a": "429877", + "fefac7": "ffffff", + "bc8b2f": "2a6f5d", + "2e3967": "514199", + "4e7cc9": "b67cd6", + "375395": "815bad", + "ff9dc2": "382875", + "d7ad0d": "7cd395" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/895.json b/public/images/pokemon/variant/895.json new file mode 100644 index 00000000000..90e3ec96f99 --- /dev/null +++ b/public/images/pokemon/variant/895.json @@ -0,0 +1,32 @@ +{ + "1": { + "641e2c": "722123", + "b63650": "bc623e", + "872c3c": "93372d", + "608d99": "fae5bf", + "2b3d40": "754f47", + "2261ca": "561a5b", + "4b6f78": "f1d4b6", + "e05276": "ef8429", + "242e35": "512c25", + "f27a99": "efb55a", + "76dff5": "ffe8f7", + "3f545f": "ad8473", + "139ee1": "9b407f" + }, + "2": { + "641e2c": "15553b", + "b63650": "3bb349", + "872c3c": "227843", + "608d99": "9b7ebc", + "2b3d40": "241951", + "2261ca": "640e0b", + "4b6f78": "5a4382", + "e05276": "8aea41", + "242e35": "0f0c1e", + "f27a99": "dfff75", + "76dff5": "fffcdf", + "3f545f": "3a2a67", + "139ee1": "98301c" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/944.json b/public/images/pokemon/variant/944.json new file mode 100644 index 00000000000..56fc21986f7 --- /dev/null +++ b/public/images/pokemon/variant/944.json @@ -0,0 +1,42 @@ +{ + "1": { + "b5eab2": "75a0d0", + "d4eac7": "8bcfe5", + "bdb2bd": "53a164", + "ceceb7": "3ec295", + "726766": "4f985c", + "4a4860": "372869", + "8ce1b2": "6383c4", + "564a49": "286943", + "000000": "ffffff", + "4ca391": "3a4a8a", + "a571e6": "ffe269", + "774d9b": "d09139", + "97859b": "3f8d59", + "afc6d8": "8056a7", + "efeee1": "88eeab", + "869fad": "5e4090", + "918772": "1c9b8d", + "3a2b2f": "18493f" + }, + "2": { + "b5eab2": "a9c6dc", + "d4eac7": "e2f8ff", + "bdb2bd": "78b0c2", + "ceceb7": "abc1df", + "726766": "5386b9", + "4a4860": "4f133f", + "8ce1b2": "8397c4", + "564a49": "2c4f8a", + "000000": "ffffff", + "4ca391": "6974ad", + "a571e6": "4c5372", + "774d9b": "2c2c46", + "97859b": "5582a4", + "afc6d8": "c23f4f", + "efeee1": "e2f3ff", + "869fad": "902a4b", + "918772": "6777aa", + "3a2b2f": "1e3072" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/945.json b/public/images/pokemon/variant/945.json new file mode 100644 index 00000000000..e22743030f9 --- /dev/null +++ b/public/images/pokemon/variant/945.json @@ -0,0 +1,53 @@ +{ + "1": { + "403f4f": "357747", + "1f2635": "1c193d", + "dcdcc3": "5ddcb2", + "282434": "14463f", + "ebe4e2": "ade273", + "a491a4": "499833", + "e6e2e1": "fffbf3", + "671544": "0f4e67", + "584698": "18153d", + "134175": "a74d2a", + "4f483f": "1b727b", + "323d4a": "2e2452", + "000000": "ffffff", + "8ac2a2": "1a355d", + "d73875": "29ad89", + "e0ebf1": "7ddfee", + "2481b0": "d09139", + "4b616b": "473869", + "38bdda": "ffe269", + "695575": "16613d", + "aca699": "2db3a4", + "8d2151": "157375", + "cedaaa": "2f5b7b" + }, + "2": { + "403f4f": "3b6b9e", + "1f2635": "3b091c", + "dcdcc3": "edf0f1", + "282434": "2d427e", + "ebe4e2": "c23f4f", + "a491a4": "902a4b", + "e6e2e1": "ebf4f9", + "671544": "223969", + "584698": "1f1e43", + "134175": "1c182f", + "4f483f": "5d7487", + "323d4a": "580f1d", + "000000": "ffffff", + "a599a8": "bf888f", + "8ac2a2": "8397c4", + "7c6a84": "965b6f", + "d73875": "68adca", + "2481b0": "2c2c46", + "4b616b": "8a2029", + "38bdda": "494e64", + "695575": "4f133f", + "aca699": "acbfc7", + "8d2151": "4676aa", + "cedaaa": "bad4e8" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/_masterlist.json b/public/images/pokemon/variant/_masterlist.json index 60ef635b862..11f8e9cb7ec 100644 --- a/public/images/pokemon/variant/_masterlist.json +++ b/public/images/pokemon/variant/_masterlist.json @@ -1,11113 +1,2474 @@ { - "1": [ - 0, - 1, - 1 - ], - "2": [ - 0, - 2, - 1 - ], - "3-gigantamax": [ - 0, - 1, - 1 - ], - "3-mega": [ - 0, - 2, - 2 - ], - "3": [ - 0, - 1, - 1 - ], - "4": [ - 0, - 1, - 1 - ], - "5": [ - 0, - 1, - 1 - ], - "6-mega-x": [ - 0, - 1, - 2 - ], - "6-gigantamax": [ - 0, - 1, - 2 - ], - "6-mega-y": [ - 0, - 1, - 2 - ], - "6": [ - 0, - 2, - 2 - ], - "7": [ - 0, - 2, - 2 - ], - "8": [ - 0, - 2, - 2 - ], - "9-gigantamax": [ - 0, - 1, - 2 - ], - "9-mega": [ - 0, - 2, - 2 - ], - "9": [ - 0, - 2, - 2 - ], - "19": [ - 0, - 1, - 1 - ], - "20": [ - 0, - 1, - 1 - ], - "23": [ - 0, - 1, - 1 - ], - "24": [ - 0, - 1, - 1 - ], - "29": [ - 0, - 1, - 1 - ], - "30": [ - 0, - 1, - 1 - ], - "31": [ - 1, - 1, - 1 - ], - "35": [ - 0, - 1, - 2 - ], - "36": [ - 0, - 1, - 1 - ], - "37": [ - 0, - 1, - 1 - ], - "38": [ - 0, - 1, - 1 - ], - "41": [ - 0, - 1, - 1 - ], - "42": [ - 0, - 1, - 1 - ], - "43": [ - 0, - 1, - 1 - ], - "44": [ - 0, - 1, - 1 - ], - "45": [ - 0, - 1, - 1 - ], - "46": [ - 1, - 1, - 1 - ], - "47": [ - 1, - 1, - 1 - ], - "50": [ - 0, - 1, - 1 - ], - "51": [ - 0, - 1, - 1 - ], - "52-gigantamax": [ - 1, - 1, - 1 - ], - "52": [ - 1, - 1, - 1 - ], - "53": [ - 1, - 1, - 1 - ], - "56": [ - 1, - 2, - 2 - ], - "57": [ - 2, - 2, - 2 - ], - "69": [ - 0, - 2, - 2 - ], - "70": [ - 0, - 1, - 1 - ], - "71": [ - 0, - 1, - 1 - ], - "77": [ - 0, - 1, - 1 - ], - "78": [ - 0, - 1, - 1 - ], - "79": [ - 1, - 1, - 1 - ], - "80": [ - 0, - 1, - 1 - ], - "80-mega": [ - 0, - 1, - 1 - ], - "81": [ - 0, - 1, - 1 - ], - "82": [ - 0, - 1, - 1 - ], - "83": [ - 0, - 2, - 2 - ], - "84": [ - 1, - 1, - 1 - ], - "85": [ - 1, - 1, - 1 - ], - "86": [ - 1, - 1, - 1 - ], - "87": [ - 1, - 1, - 1 - ], - "92": [ - 2, - 2, - 2 - ], - "93": [ - 1, - 1, - 1 - ], - "94-gigantamax": [ - 1, - 2, - 2 - ], - "94-mega": [ - 2, - 2, - 2 - ], - "94": [ - 1, - 1, - 1 - ], - "98": [ - 0, - 1, - 1 - ], - "99": [ - 0, - 1, - 1 - ], - "99-gigantamax": [ - 0, - 1, - 1 - ], - "100": [ - 0, - 1, - 1 - ], - "101": [ - 0, - 1, - 1 - ], - "111": [ - 0, - 1, - 1 - ], - "112": [ - 0, - 1, - 1 - ], - "113": [ - 2, - 2, - 2 - ], - "114": [ - 0, - 1, - 1 - ], - "116": [ - 0, - 1, - 1 - ], - "117": [ - 0, - 1, - 1 - ], - "118": [ - 1, - 1, - 1 - ], - "119": [ - 1, - 1, - 1 - ], - "120": [ - 0, - 1, - 1 - ], - "121": [ - 0, - 1, - 1 - ], - "123": [ - 1, - 1, - 1 - ], - "125": [ - 1, - 1, - 2 - ], - "126": [ - 0, - 2, - 1 - ], - "127-mega": [ - 0, - 1, - 1 - ], - "127": [ - 0, - 1, - 1 - ], - "129": [ - 0, - 1, - 1 - ], - "130-mega": [ - 0, - 1, - 1 - ], - "130": [ - 0, - 1, - 1 - ], - "131-gigantamax": [ - 0, - 1, - 1 - ], - "131": [ - 0, - 1, - 1 - ], - "132": [ - 0, - 1, - 1 - ], - "133": [ - 0, - 1, - 1 - ], - "133-partner": [ - 0, - 1, - 1 - ], - "134": [ - 0, - 1, - 1 - ], - "135": [ - 1, - 1, - 1 - ], - "136": [ - 1, - 1, - 1 - ], - "137": [ - 0, - 1, - 1 - ], - "138": [ - 0, - 1, - 1 - ], - "139": [ - 0, - 1, - 2 - ], - "140": [ - 0, - 1, - 1 - ], - "141": [ - 0, - 2, - 2 - ], - "142-mega": [ - 0, - 1, - 1 - ], - "142": [ - 0, - 1, - 1 - ], - "144": [ - 1, - 2, - 2 - ], - "145": [ - 1, - 1, - 1 - ], - "146": [ - 1, - 1, - 1 - ], - "147": [ - 0, - 1, - 1 - ], - "148": [ - 0, - 1, - 1 - ], - "149": [ - 0, - 1, - 1 - ], - "150-mega-x": [ - 0, - 1, - 1 - ], - "150-mega-y": [ - 0, - 1, - 1 - ], - "150": [ - 0, - 1, - 1 - ], - "151": [ - 0, - 1, - 1 - ], - "161": [ - 0, - 1, - 2 - ], - "162": [ - 0, - 1, - 1 - ], - "163": [ - 0, - 1, - 1 - ], - "164": [ - 0, - 2, - 2 - ], - "169": [ - 0, - 1, - 1 - ], - "173": [ - 0, - 1, - 2 - ], - "175": [ - 1, - 1, - 1 - ], - "176": [ - 1, - 1, - 1 - ], - "177": [ - 0, - 1, - 1 - ], - "178": [ - 0, - 2, - 2 - ], - "179": [ - 0, - 1, - 1 - ], - "180": [ - 0, - 2, - 2 - ], - "181-mega": [ - 0, - 1, - 2 - ], - "181": [ - 0, - 1, - 1 - ], - "182": [ - 0, - 1, - 1 - ], - "183": [ - 0, - 1, - 2 - ], - "184": [ - 0, - 2, - 2 - ], - "185": [ - 0, - 1, - 1 - ], - "190": [ - 0, - 1, - 1 - ], - "193": [ - 0, - 1, - 1 - ], - "196": [ - 1, - 1, - 1 - ], - "197": [ - 0, - 1, - 1 - ], - "199": [ - 2, - 1, - 1 - ], - "200": [ - 1, - 1, - 1 - ], - "201-m": [ - 0, - 1, - 1 - ], - "201-question": [ - 0, - 1, - 1 - ], - "201-j": [ - 0, - 1, - 1 - ], - "201-l": [ - 0, - 1, - 1 - ], - "201-h": [ - 0, - 1, - 1 - ], - "201-x": [ - 0, - 1, - 1 - ], - "201-exclamation": [ - 0, - 1, - 1 - ], - "201-q": [ - 0, - 1, - 1 - ], - "201-s": [ - 0, - 1, - 1 - ], - "201-c": [ - 0, - 1, - 1 - ], - "201-u": [ - 0, - 1, - 1 - ], - "201-t": [ - 0, - 1, - 1 - ], - "201-z": [ - 0, - 1, - 1 - ], - "201-d": [ - 0, - 1, - 1 - ], - "201-b": [ - 0, - 1, - 1 - ], - "201-g": [ - 0, - 1, - 1 - ], - "201-k": [ - 0, - 1, - 1 - ], - "201-i": [ - 0, - 1, - 1 - ], - "201-p": [ - 0, - 1, - 1 - ], - "201-e": [ - 0, - 1, - 1 - ], - "201-y": [ - 0, - 1, - 1 - ], - "201-r": [ - 0, - 1, - 1 - ], - "201-f": [ - 0, - 1, - 1 - ], - "201-n": [ - 0, - 1, - 1 - ], - "201-v": [ - 0, - 1, - 1 - ], - "201-a": [ - 0, - 1, - 1 - ], - "201-w": [ - 0, - 1, - 1 - ], - "201-o": [ - 0, - 1, - 1 - ], - "203": [ - 0, - 1, - 1 - ], - "206": [ - 0, - 1, - 1 - ], - "207": [ - 0, - 1, - 1 - ], - "212-mega": [ - 1, - 1, - 1 - ], - "212": [ - 1, - 1, - 1 - ], - "213": [ - 0, - 1, - 1 - ], - "215": [ - 0, - 1, - 1 - ], - "216": [ - 1, - 1, - 1 - ], - "217": [ - 1, - 1, - 1 - ], - "222": [ - 0, - 1, - 1 - ], - "226": [ - 0, - 2, - 2 - ], - "227": [ - 0, - 1, - 1 - ], - "228": [ - 0, - 1, - 1 - ], - "229": [ - 0, - 1, - 1 - ], - "229-mega": [ - 0, - 1, - 1 - ], - "230": [ - 0, - 1, - 1 - ], - "231": [ - 0, - 1, - 1 - ], - "232": [ - 0, - 1, - 1 - ], - "233": [ - 0, - 1, - 1 - ], - "235": [ - 0, - 1, - 1 - ], - "239": [ - 1, - 1, - 2 - ], - "240": [ - 0, - 1, - 1 - ], - "242": [ - 2, - 2, - 2 - ], - "243": [ - 0, - 1, - 1 - ], - "244": [ - 0, - 2, - 2 - ], - "245": [ - 0, - 1, - 1 - ], - "246": [ - 0, - 1, - 1 - ], - "247": [ - 0, - 1, - 1 - ], - "248": [ - 0, - 1, - 1 - ], - "248-mega": [ - 0, - 2, - 1 - ], - "249": [ - 0, - 2, - 2 - ], - "250": [ - 0, - 2, - 2 - ], - "251": [ - 0, - 1, - 1 - ], - "255": [ - 0, - 1, - 1 - ], - "256": [ - 0, - 1, - 1 - ], - "257": [ - 0, - 1, - 2 - ], - "257-mega": [ - 0, - 1, - 1 - ], - "261": [ - 0, - 1, - 1 - ], - "262": [ - 0, - 1, - 1 - ], - "263": [ - 0, - 1, - 1 - ], - "264": [ - 0, - 1, - 1 - ], - "278": [ - 1, - 1, - 1 - ], - "279": [ - 1, - 1, - 1 - ], - "280": [ - 0, - 1, - 1 - ], - "281": [ - 0, - 1, - 1 - ], - "282-mega": [ - 0, - 2, - 2 - ], - "282": [ - 0, - 1, - 1 - ], - "285": [ - 0, - 1, - 1 - ], - "286": [ - 0, - 1, - 1 - ], - "290": [ - 1, - 1, - 1 - ], - "291": [ - 2, - 2, - 2 - ], - "292": [ - 2, - 1, - 2 - ], - "298": [ - 0, - 2, - 2 - ], - "300": [ - 1, - 1, - 1 - ], - "301": [ - 1, - 1, - 1 - ], - "302": [ - 0, - 1, - 1 - ], - "302-mega": [ - 0, - 1, - 1 - ], - "303-mega": [ - 1, - 1, - 1 - ], - "303": [ - 0, - 1, - 1 - ], - "304": [ - 1, - 1, - 1 - ], - "305": [ - 1, - 1, - 1 - ], - "306-mega": [ - 1, - 1, - 1 - ], - "306": [ - 1, - 1, - 1 - ], - "307": [ - 0, - 1, - 1 - ], - "308-mega": [ - 0, - 1, - 1 - ], - "308": [ - 0, - 2, - 1 - ], - "309": [ - 0, - 1, - 1 - ], - "310-mega": [ - 0, - 1, - 1 - ], - "310": [ - 0, - 1, - 1 - ], - "311": [ - 1, - 1, - 1 - ], - "312": [ - 0, - 1, - 1 - ], - "315": [ - 0, - 1, - 1 - ], - "320": [ - 0, - 1, - 1 - ], - "321": [ - 0, - 1, - 1 - ], - "327": [ - 0, - 1, - 1 - ], - "328": [ - 0, - 1, - 1 - ], - "329": [ - 0, - 1, - 2 - ], - "330": [ - 0, - 1, - 1 - ], - "333": [ - 0, - 1, - 1 - ], - "334-mega": [ - 0, - 2, - 1 - ], - "334": [ - 0, - 2, - 2 - ], - "335": [ - 0, - 2, - 2 - ], - "336": [ - 0, - 1, - 1 - ], - "337": [ - 0, - 1, - 1 - ], - "338": [ - 0, - 1, - 1 - ], - "339": [ - 0, - 1, - 1 - ], - "340": [ - 0, - 1, - 2 - ], - "341": [ - 0, - 2, - 2 - ], - "342": [ - 0, - 2, - 2 - ], - "351-rainy": [ - 1, - 2, - 2 - ], - "351-snowy": [ - 1, - 1, - 1 - ], - "351-sunny": [ - 1, - 2, - 2 - ], - "351": [ - 0, - 2, - 2 - ], - "352": [ - 1, - 1, - 1 - ], - "353": [ - 0, - 1, - 1 - ], - "354": [ - 0, - 1, - 1 - ], - "354-mega": [ - 0, - 1, - 1 - ], - "357": [ - 0, - 1, - 1 - ], - "358": [ - 2, - 1, - 1 - ], - "361": [ - 0, - 1, - 1 - ], - "362": [ - 0, - 2, - 2 - ], - "362-mega": [ - 0, - 1, - 1 - ], - "369": [ - 0, - 1, - 1 - ], - "370": [ - 0, - 1, - 1 - ], - "371": [ - 0, - 1, - 1 - ], - "372": [ - 0, - 1, - 1 - ], - "373-mega": [ - 0, - 2, - 2 - ], - "373": [ - 0, - 1, - 1 - ], - "374": [ - 0, - 1, - 1 - ], - "375": [ - 0, - 1, - 1 - ], - "376-mega": [ - 0, - 1, - 1 - ], - "376": [ - 0, - 1, - 1 - ], - "380-mega": [ - 0, - 1, - 1 - ], - "380": [ - 0, - 1, - 1 - ], - "381-mega": [ - 0, - 1, - 1 - ], - "381": [ - 0, - 1, - 1 - ], - "382-primal": [ - 0, - 1, - 1 - ], - "382": [ - 0, - 1, - 1 - ], - "383-primal": [ - 0, - 1, - 1 - ], - "383": [ - 0, - 1, - 1 - ], - "384-mega": [ - 0, - 2, - 1 - ], - "384": [ - 0, - 1, - 1 - ], - "385": [ - 1, - 1, - 1 - ], - "387": [ - 0, - 1, - 1 - ], - "388": [ - 0, - 1, - 1 - ], - "389": [ - 0, - 1, - 1 - ], - "393": [ - 0, - 1, - 1 - ], - "394": [ - 0, - 1, - 1 - ], - "395": [ - 0, - 1, - 1 - ], - "399": [ - 0, - 1, - 1 - ], - "400": [ - 0, - 1, - 1 - ], - "401": [ - 0, - 1, - 1 - ], - "402": [ - 0, - 1, - 1 - ], - "406": [ - 0, - 1, - 1 - ], - "407": [ - 0, - 1, - 1 - ], - "412-sandy": [ - 2, - 2, - 2 - ], - "412-plant": [ - 1, - 1, - 1 - ], - "412-trash": [ - 1, - 1, - 1 - ], - "413-plant": [ - 2, - 2, - 2 - ], - "413-trash": [ - 1, - 1, - 1 - ], - "413-sandy": [ - 1, - 1, - 1 - ], - "414": [ - 0, - 1, - 1 - ], - "418": [ - 0, - 1, - 1 - ], - "419": [ - 0, - 1, - 1 - ], - "422-west": [ - 1, - 1, - 1 - ], - "422-east": [ - 1, - 1, - 1 - ], - "423-west": [ - 1, - 1, - 1 - ], - "423-east": [ - 1, - 1, - 1 - ], - "424": [ - 0, - 1, - 1 - ], - "425": [ - 0, - 1, - 1 - ], - "426": [ - 0, - 1, - 1 - ], - "427": [ - 0, - 1, - 1 - ], - "428-mega": [ - 0, - 1, - 1 - ], - "428": [ - 0, - 1, - 1 - ], - "429": [ - 1, - 1, - 1 - ], - "433": [ - 1, - 1, - 1 - ], - "436": [ - 0, - 1, - 1 - ], - "437": [ - 0, - 1, - 1 - ], - "438": [ - 0, - 1, - 1 - ], - "440": [ - 1, - 1, - 2 - ], - "441": [ - 0, - 1, - 1 - ], - "442": [ - 0, - 1, - 1 - ], - "443": [ - 1, - 1, - 1 - ], - "444": [ - 1, - 1, - 1 - ], - "445-mega": [ - 1, - 1, - 1 - ], - "445": [ - 1, - 1, - 1 - ], - "447": [ - 1, - 1, - 1 - ], - "448-mega": [ - 1, - 1, - 1 - ], - "448": [ - 1, - 1, - 1 - ], - "453": [ - 0, - 1, - 1 - ], - "454": [ - 0, - 1, - 1 - ], - "456": [ - 0, - 1, - 1 - ], - "457": [ - 0, - 1, - 1 - ], - "458": [ - 0, - 1, - 1 - ], - "461": [ - 0, - 1, - 1 - ], - "462": [ - 0, - 1, - 1 - ], - "464": [ - 0, - 1, - 1 - ], - "465": [ - 0, - 1, - 1 - ], - "466": [ - 1, - 1, - 2 - ], - "467": [ - 0, - 1, - 1 - ], - "468": [ - 1, - 1, - 1 - ], - "469": [ - 0, - 1, - 1 - ], - "470": [ - 1, - 1, - 1 - ], - "471": [ - 1, - 2, - 2 - ], - "472": [ - 0, - 1, - 1 - ], - "474": [ - 0, - 1, - 1 - ], - "475-mega": [ - 0, - 2, - 2 - ], - "475": [ - 0, - 1, - 1 - ], - "478": [ - 0, - 2, - 1 - ], - "479-heat": [ - 0, - 1, - 1 - ], - "479-wash": [ - 0, - 1, - 1 - ], - "479-mow": [ - 0, - 1, - 1 - ], - "479-frost": [ - 0, - 1, - 1 - ], - "479": [ - 0, - 1, - 1 - ], - "479-fan": [ - 0, - 1, - 1 - ], - "480": [ - 1, - 1, - 1 - ], - "481": [ - 1, - 1, - 1 - ], - "482": [ - 1, - 1, - 1 - ], - "485": [ - 0, - 1, - 1 - ], - "487-altered": [ - 0, - 1, - 1 - ], - "487-origin": [ - 0, - 1, - 1 - ], - "488": [ - 0, - 1, - 1 - ], - "489": [ - 1, - 1, - 1 - ], - "490": [ - 1, - 1, - 1 - ], - "491": [ - 0, - 1, - 1 - ], - "492-land": [ - 0, - 2, - 1 - ], - "492-sky": [ - 0, - 1, - 1 - ], - "494": [ - 0, - 1, - 1 - ], - "495": [ - 0, - 1, - 1 - ], - "496": [ - 0, - 1, - 1 - ], - "497": [ - 0, - 1, - 1 - ], - "517": [ - 0, - 1, - 1 - ], - "518": [ - 0, - 1, - 1 - ], - "524": [ - 0, - 1, - 1 - ], - "525": [ - 0, - 1, - 1 - ], - "526": [ - 0, - 2, - 2 - ], - "529": [ - 0, - 2, - 2 - ], - "530": [ - 0, - 2, - 2 - ], - "531": [ - 0, - 1, - 1 - ], - "531-mega": [ - 0, - 1, - 1 - ], - "532": [ - 0, - 1, - 1 - ], - "533": [ - 0, - 1, - 1 - ], - "534": [ - 0, - 1, - 1 - ], - "538": [ - 0, - 1, - 1 - ], - "539": [ - 0, - 2, - 2 - ], - "540": [ - 0, - 1, - 1 - ], - "541": [ - 0, - 1, - 1 - ], - "542": [ - 0, - 1, - 1 - ], - "543": [ - 0, - 1, - 2 - ], - "544": [ - 0, - 1, - 2 - ], - "545": [ - 0, - 1, - 1 - ], - "546": [ - 0, - 1, - 1 - ], - "547": [ - 0, - 1, - 1 - ], - "548": [ - 1, - 1, - 1 - ], - "549": [ - 0, - 1, - 2 - ], - "551": [ - 0, - 1, - 1 - ], - "552": [ - 0, - 1, - 1 - ], - "553": [ - 0, - 1, - 1 - ], - "556": [ - 0, - 1, - 1 - ], - "559": [ - 1, - 1, - 1 - ], - "560": [ - 1, - 1, - 1 - ], - "562": [ - 0, - 1, - 1 - ], - "563": [ - 0, - 1, - 1 - ], - "568": [ - 0, - 2, - 2 - ], - "569-gigantamax": [ - 0, - 1, - 1 - ], - "569": [ - 0, - 1, - 1 - ], - "570": [ - 0, - 1, - 1 - ], - "571": [ - 0, - 1, - 1 - ], - "572": [ - 0, - 1, - 1 - ], - "577": [ - 1, - 1, - 1 - ], - "578": [ - 1, - 1, - 1 - ], - "579": [ - 1, - 1, - 1 - ], - "585-autumn": [ - 2, - 0, - 0 - ], - "585-spring": [ - 2, - 0, - 0 - ], - "585-summer": [ - 2, - 0, - 0 - ], - "585-winter": [ - 2, - 0, - 0 - ], - "586-autumn": [ - 1, - 0, - 0 - ], - "586-spring": [ - 1, - 0, - 0 - ], - "586-summer": [ - 1, - 0, - 0 - ], - "586-winter": [ - 1, - 0, - 0 - ], - "592": [ - 0, - 1, - 2 - ], - "593": [ - 0, - 1, - 1 - ], - "594": [ - 0, - 1, - 2 - ], - "595": [ - 0, - 1, - 1 - ], - "596": [ - 0, - 1, - 1 - ], - "602": [ - 0, - 1, - 1 - ], - "603": [ - 0, - 1, - 1 - ], - "604": [ - 0, - 1, - 1 - ], - "605": [ - 1, - 1, - 1 - ], - "606": [ - 1, - 1, - 1 - ], - "607": [ - 0, - 1, - 1 - ], - "608": [ - 0, - 1, - 1 - ], - "609": [ - 0, - 1, - 1 - ], - "610": [ - 0, - 1, - 1 - ], - "611": [ - 0, - 1, - 1 - ], - "612": [ - 0, - 1, - 2 - ], - "618": [ - 0, - 1, - 1 - ], - "619": [ - 0, - 1, - 1 - ], - "620": [ - 0, - 1, - 1 - ], - "622": [ - 0, - 1, - 1 - ], - "623": [ - 0, - 1, - 1 - ], - "631": [ - 0, - 2, - 2 - ], - "632": [ - 0, - 1, - 1 - ], - "633": [ - 0, - 1, - 1 - ], - "634": [ - 0, - 1, - 1 - ], - "635": [ - 0, - 1, - 1 - ], - "636": [ - 0, - 1, - 1 - ], - "637": [ - 0, - 1, - 1 - ], - "640": [ - 0, - 1, - 1 - ], - "647-resolute": [ - 0, - 1, - 1 - ], - "647-ordinary": [ - 0, - 1, - 1 - ], - "648-aria": [ - 0, - 1, - 1 - ], - "648-pirouette": [ - 0, - 1, - 1 - ], - "649-burn": [ - 0, - 1, - 1 - ], - "649-chill": [ - 0, - 1, - 1 - ], - "649-douse": [ - 0, - 1, - 1 - ], - "649-shock": [ - 0, - 1, - 1 - ], - "649": [ - 0, - 1, - 1 - ], - "653": [ - 0, - 1, - 1 - ], - "654": [ - 0, - 1, - 1 - ], - "655": [ - 0, - 1, - 1 - ], - "664": [ - 0, - 1, - 1 - ], - "665": [ - 0, - 1, - 1 - ], - "666-archipelago": [ - 0, - 1, - 1 - ], - "666-continental": [ - 0, - 1, - 2 - ], - "666-elegant": [ - 0, - 1, - 1 - ], - "666-fancy": [ - 0, - 2, - 2 - ], - "666-garden": [ - 0, - 1, - 1 - ], - "666-high-plains": [ - 0, - 1, - 1 - ], - "666-icy-snow": [ - 0, - 1, - 1 - ], - "666-jungle": [ - 0, - 1, - 1 - ], - "666-marine": [ - 0, - 1, - 1 - ], - "666-meadow": [ - 0, - 1, - 1 - ], - "666-modern": [ - 0, - 1, - 1 - ], - "666-monsoon": [ - 0, - 1, - 1 - ], - "666-ocean": [ - 0, - 1, - 1 - ], - "666-poke-ball": [ - 0, - 1, - 2 - ], - "666-polar": [ - 0, - 1, - 1 - ], - "666-river": [ - 0, - 2, - 1 - ], - "666-sandstorm": [ - 0, - 1, - 1 - ], - "666-savanna": [ - 0, - 1, - 1 - ], - "666-sun": [ - 0, - 1, - 1 - ], - "666-tundra": [ - 0, - 1, - 1 - ], - "669-red": [ - 0, - 2, - 1 - ], - "669-blue": [ - 0, - 2, - 2 - ], - "669-white": [ - 0, - 1, - 1 - ], - "669-yellow": [ - 0, - 2, - 1 - ], - "669-orange": [ - 0, - 2, - 1 - ], - "670-white": [ - 0, - 2, - 2 - ], - "670-blue": [ - 0, - 2, - 2 - ], - "670-orange": [ - 0, - 2, - 2 - ], - "670-red": [ - 0, - 2, - 2 - ], - "670-yellow": [ - 0, - 2, - 2 - ], - "671-red": [ - 0, - 1, - 2 - ], - "671-blue": [ - 0, - 1, - 2 - ], - "671-yellow": [ - 0, - 1, - 2 - ], - "671-white": [ - 0, - 1, - 2 - ], - "671-orange": [ - 0, - 1, - 1 - ], - "672": [ - 0, - 1, - 2 - ], - "673": [ - 0, - 1, - 1 - ], - "677": [ - 0, - 1, - 1 - ], - "678-female": [ - 0, - 1, - 1 - ], - "678": [ - 0, - 1, - 1 - ], - "690": [ - 0, - 1, - 1 - ], - "691": [ - 0, - 1, - 1 - ], - "696": [ - 0, - 1, - 1 - ], - "697": [ - 0, - 1, - 1 - ], - "698": [ - 0, - 1, - 1 - ], - "699": [ - 0, - 1, - 1 - ], - "700": [ - 0, - 1, - 1 - ], - "702": [ - 0, - 1, - 1 - ], - "703": [ - 0, - 1, - 1 - ], - "704": [ - 0, - 1, - 1 - ], - "705": [ - 0, - 1, - 1 - ], - "706": [ - 0, - 1, - 1 - ], - "708": [ - 0, - 1, - 1 - ], - "709": [ - 0, - 1, - 1 - ], - "710": [ - 0, - 1, - 1 - ], - "711": [ - 1, - 1, - 1 - ], - "712": [ - 0, - 1, - 1 - ], - "713": [ - 0, - 1, - 1 - ], - "714": [ - 0, - 1, - 1 - ], - "715": [ - 0, - 2, - 2 - ], - "716-active": [ - 0, - 1, - 1 - ], - "716-neutral": [ - 0, - 1, - 1 - ], - "717": [ - 0, - 1, - 1 - ], - "720-unbound": [ - 1, - 1, - 1 - ], - "720": [ - 1, - 1, - 1 - ], - "728": [ - 0, - 1, - 1 - ], - "729": [ - 0, - 1, - 1 - ], - "730": [ - 0, - 1, - 1 - ], - "734": [ - 0, - 1, - 1 - ], - "735": [ - 0, - 1, - 1 - ], - "742": [ - 0, - 2, - 2 - ], - "743": [ - 0, - 2, - 2 - ], - "747": [ - 0, - 1, - 1 - ], - "748": [ - 0, - 1, - 1 - ], - "751": [ - 0, - 1, - 1 - ], - "752": [ - 0, - 1, - 1 - ], - "753": [ - 0, - 1, - 1 - ], - "754": [ - 0, - 1, - 1 - ], - "755": [ - 0, - 1, - 1 - ], - "756": [ - 0, - 1, - 2 - ], - "761": [ - 0, - 1, - 1 - ], - "762": [ - 0, - 1, - 1 - ], - "763": [ - 0, - 1, - 1 - ], - "767": [ - 0, - 1, - 1 - ], - "768": [ - 0, - 1, - 1 - ], - "771": [ - 0, - 1, - 1 - ], - "772": [ - 0, - 1, - 1 - ], - "773-fighting": [ - 0, - 1, - 1 - ], - "773-psychic": [ - 0, - 1, - 1 - ], - "773-poison": [ - 0, - 1, - 1 - ], - "773-ground": [ - 0, - 1, - 1 - ], - "773-ghost": [ - 0, - 1, - 1 - ], - "773-steel": [ - 0, - 1, - 1 - ], - "773-rock": [ - 0, - 1, - 1 - ], - "773-grass": [ - 0, - 1, - 1 - ], - "773-dragon": [ - 0, - 1, - 1 - ], - "773-bug": [ - 0, - 1, - 1 - ], - "773-ice": [ - 0, - 1, - 1 - ], - "773-dark": [ - 0, - 1, - 1 - ], - "773": [ - 0, - 1, - 1 - ], - "773-fairy": [ - 0, - 1, - 1 - ], - "773-water": [ - 0, - 1, - 1 - ], - "773-electric": [ - 0, - 1, - 1 - ], - "773-flying": [ - 0, - 1, - 1 - ], - "773-fire": [ - 0, - 1, - 1 - ], - "776": [ - 0, - 1, - 1 - ], - "777": [ - 0, - 1, - 1 - ], - "778-busted": [ - 0, - 1, - 1 - ], - "778-disguised": [ - 0, - 1, - 1 - ], - "779": [ - 0, - 1, - 1 - ], - "789": [ - 1, - 1, - 1 - ], - "790": [ - 0, - 1, - 1 - ], - "791-radiant-sun": [ - 0, - 1, - 1 - ], - "791": [ - 2, - 1, - 1 - ], - "792-full-moon": [ - 0, - 1, - 1 - ], - "792": [ - 0, - 1, - 1 - ], - "793": [ - 0, - 1, - 1 - ], - "797": [ - 0, - 1, - 1 - ], - "798": [ - 0, - 1, - 1 - ], - "800-dawn-wings": [ - 0, - 1, - 1 - ], - "800-dusk-mane": [ - 0, - 1, - 1 - ], - "800-ultra": [ - 0, - 1, - 1 - ], - "800": [ - 0, - 1, - 1 - ], - "802": [ - 1, - 1, - 1 - ], - "803": [ - 0, - 1, - 1 - ], - "804": [ - 0, - 1, - 1 - ], - "808": [ - 0, - 1, - 1 - ], - "809-gigantamax": [ - 0, - 1, - 1 - ], - "809": [ - 0, - 1, - 1 - ], - "816": [ - 0, - 1, - 1 - ], - "817": [ - 0, - 1, - 1 - ], - "818-gigantamax": [ - 1, - 1, - 1 - ], - "818": [ - 0, - 1, - 1 - ], - "821": [ - 0, - 1, - 1 - ], - "822": [ - 0, - 1, - 1 - ], - "823-gigantamax": [ - 0, - 2, - 2 - ], - "823": [ - 0, - 1, - 1 - ], - "829": [ - 0, - 1, - 1 - ], - "830": [ - 0, - 1, - 1 - ], - "835": [ - 0, - 1, - 1 - ], - "836": [ - 0, - 2, - 2 - ], - "850": [ - 0, - 1, - 1 - ], - "851-gigantamax": [ - 0, - 1, - 1 - ], - "851": [ - 0, - 1, - 1 - ], - "854": [ - 0, - 1, - 1 - ], - "855": [ - 0, - 1, - 1 - ], - "856": [ - 0, - 1, - 1 - ], - "857": [ - 0, - 2, - 2 - ], - "858-gigantamax": [ - 0, - 1, - 1 - ], - "858": [ - 0, - 1, - 1 - ], - "859": [ - 0, - 2, - 2 - ], - "860": [ - 0, - 1, - 1 - ], - "861-gigantamax": [ - 0, - 1, - 1 - ], - "861": [ - 0, - 1, - 1 - ], - "862": [ - 0, - 1, - 1 - ], - "863": [ - 0, - 1, - 1 - ], - "864": [ - 0, - 1, - 1 - ], - "867": [ - 0, - 1, - 1 - ], - "872": [ - 1, - 1, - 1 - ], - "873": [ - 1, - 1, - 1 - ], - "876-female": [ - 0, - 1, - 1 - ], - "876": [ - 0, - 1, - 1 - ], - "877-hangry": [ - 1, - 1, - 1 - ], - "877": [ - 1, - 1, - 1 - ], - "880": [ - 0, - 1, - 1 - ], - "881": [ - 0, - 1, - 1 - ], - "882": [ - 0, - 1, - 1 - ], - "883": [ - 0, - 1, - 1 - ], - "884-gigantamax": [ - 0, - 1, - 1 - ], - "884": [ - 0, - 1, - 1 - ], - "885": [ - 1, - 1, - 1 - ], - "886": [ - 1, - 1, - 1 - ], - "887": [ - 2, - 1, - 1 - ], - "888": [ - 0, - 1, - 1 - ], - "888-crowned": [ - 0, - 1, - 1 - ], - "889": [ - 0, - 1, - 1 - ], - "889-crowned": [ - 0, - 1, - 1 - ], - "890-eternamax": [ - 0, - 1, - 1 - ], - "890": [ - 0, - 1, - 1 - ], - "891": [ - 1, - 1, - 1 - ], - "892-gigantamax-rapid": [ - 1, - 2, - 2 - ], - "892-rapid-strike": [ - 1, - 1, - 1 - ], - "892": [ - 1, - 1, - 1 - ], - "892-gigantamax-single": [ - 1, - 2, - 2 - ], - "896": [ - 1, - 1, - 1 - ], - "897": [ - 2, - 1, - 1 - ], - "898": [ - 1, - 1, - 1 - ], - "898-ice": [ - 1, - 1, - 1 - ], - "898-shadow": [ - 1, - 1, - 1 - ], - "900": [ - 0, - 1, - 1 - ], - "901": [ - 0, - 1, - 2 - ], - "903": [ - 0, - 1, - 1 - ], - "909": [ - 0, - 2, - 2 - ], - "910": [ - 0, - 2, - 2 - ], - "911": [ - 0, - 1, - 1 - ], - "912": [ - 0, - 1, - 1 - ], - "913": [ - 0, - 2, - 2 - ], - "914": [ - 0, - 2, - 1 - ], - "919": [ - 1, - 1, - 1 - ], - "920": [ - 2, - 2, - 2 - ], - "924": [ - 1, - 1, - 1 - ], - "925-four": [ - 1, - 1, - 1 - ], - "925-three": [ - 1, - 1, - 1 - ], - "932": [ - 0, - 1, - 2 - ], - "933": [ - 0, - 1, - 1 - ], - "934": [ - 0, - 1, - 1 - ], - "935": [ - 2, - 2, - 2 - ], - "936": [ - 2, - 2, - 2 - ], - "937": [ - 2, - 2, - 2 - ], - "940": [ - 0, - 1, - 1 - ], - "941": [ - 0, - 1, - 1 - ], - "948": [ - 0, - 1, - 1 - ], - "949": [ - 0, - 1, - 1 - ], - "951": [ - 0, - 1, - 1 - ], - "952": [ - 0, - 1, - 1 - ], - "953": [ - 0, - 1, - 1 - ], - "954": [ - 0, - 1, - 1 - ], - "957": [ - 1, - 2, - 2 - ], - "958": [ - 2, - 2, - 1 - ], - "959": [ - 2, - 2, - 2 - ], - "962": [ - 1, - 1, - 1 - ], - "967": [ - 0, - 1, - 1 - ], - "968": [ - 0, - 2, - 2 - ], - "969": [ - 0, - 1, - 1 - ], - "970": [ - 0, - 1, - 1 - ], - "973": [ - 2, - 2, - 2 - ], - "974": [ - 0, - 1, - 1 - ], - "975": [ - 0, - 2, - 2 - ], - "978-curly": [ - 0, - 2, - 2 - ], - "978-droopy": [ - 0, - 2, - 2 - ], - "978-stretchy": [ - 0, - 2, - 2 - ], - "979": [ - 2, - 2, - 2 - ], - "981": [ - 0, - 1, - 1 - ], - "982": [ - 0, - 1, - 1 - ], - "982-three-segment": [ - 0, - 1, - 1 - ], - "987": [ - 1, - 1, - 1 - ], - "988": [ - 0, - 1, - 2 - ], - "993": [ - 0, - 1, - 1 - ], - "994": [ - 0, - 1, - 1 - ], - "995": [ - 0, - 1, - 1 - ], - "996": [ - 0, - 1, - 1 - ], - "997": [ - 0, - 1, - 1 - ], - "998": [ - 0, - 1, - 1 - ], - "999": [ - 1, - 1, - 1 - ], - "1000": [ - 1, - 1, - 1 - ], - "1001": [ - 0, - 1, - 1 - ], - "1003": [ - 0, - 1, - 1 - ], - "1004": [ - 0, - 1, - 1 - ], - "1006": [ - 0, - 2, - 1 - ], - "1007-apex-build": [ - 0, - 2, - 2 - ], - "1008-ultimate-mode": [ - 1, - 1, - 1 - ], - "1010": [ - 0, - 1, - 1 - ], - "1018": [ - 0, - 1, - 1 - ], - "1022": [ - 0, - 1, - 1 - ], - "1023": [ - 0, - 1, - 1 - ], - "2027": [ - 0, - 1, - 1 - ], - "2028": [ - 0, - 1, - 1 - ], - "2052": [ - 0, - 1, - 1 - ], - "2053": [ - 0, - 1, - 1 - ], - "2670": [ - 0, - 1, - 1 - ], - "4052": [ - 0, - 1, - 1 - ], - "4077": [ - 0, - 1, - 1 - ], - "4078": [ - 0, - 1, - 1 - ], - "4079": [ - 0, - 1, - 1 - ], - "4080": [ - 2, - 1, - 1 - ], - "4144": [ - 0, - 1, - 1 - ], - "4145": [ - 0, - 1, - 1 - ], - "4146": [ - 0, - 1, - 1 - ], - "4199": [ - 2, - 1, - 1 - ], - "4222": [ - 0, - 1, - 1 - ], - "4263": [ - 0, - 1, - 1 - ], - "4264": [ - 0, - 1, - 1 - ], - "4562": [ - 0, - 1, - 1 - ], - "6100": [ - 0, - 1, - 1 - ], - "6101": [ - 0, - 1, - 1 - ], - "6215": [ - 0, - 1, - 1 - ], - "6549": [ - 0, - 1, - 1 - ], - "6570": [ - 0, - 1, - 1 - ], - "6571": [ - 0, - 1, - 1 - ], - "6705": [ - 0, - 1, - 1 - ], - "6706": [ - 0, - 1, - 1 - ], - "6713": [ - 0, - 1, - 1 - ], - "8901": [ - 1, - 1, - 1 - ], + "1": [0, 1, 1], + "2": [0, 2, 1], + "3-gigantamax": [0, 1, 1], + "3-mega": [0, 2, 2], + "3": [0, 1, 1], + "4": [0, 1, 1], + "5": [0, 1, 1], + "6-mega-x": [0, 1, 2], + "6-gigantamax": [0, 1, 2], + "6-mega-y": [0, 1, 2], + "6": [0, 2, 2], + "7": [0, 2, 2], + "8": [0, 2, 2], + "9-gigantamax": [0, 1, 2], + "9-mega": [0, 2, 2], + "9": [0, 2, 2], + "19": [0, 1, 1], + "20": [0, 1, 1], + "23": [0, 1, 1], + "24": [0, 1, 1], + "25": [0, 1, 1], + "25-beauty-cosplay": [0, 1, 1], + "25-cool-cosplay": [0, 1, 1], + "25-cosplay": [0, 1, 1], + "25-cute-cosplay": [0, 1, 1], + "25-gigantamax": [0, 1, 1], + "25-partner": [0, 1, 1], + "25-smart-cosplay": [0, 1, 1], + "25-tough-cosplay": [0, 1, 1], + "26": [0, 1, 1], + "29": [0, 1, 1], + "30": [0, 1, 1], + "31": [1, 1, 1], + "35": [0, 1, 2], + "36": [0, 1, 1], + "37": [0, 1, 1], + "38": [0, 1, 1], + "39": [0, 1, 1], + "40": [0, 1, 1], + "41": [0, 1, 1], + "42": [0, 1, 1], + "43": [0, 1, 1], + "44": [0, 1, 1], + "45": [0, 1, 1], + "46": [1, 1, 1], + "47": [1, 1, 1], + "50": [0, 1, 1], + "51": [0, 1, 1], + "52-gigantamax": [1, 1, 1], + "52": [1, 1, 1], + "53": [1, 1, 1], + "56": [1, 2, 2], + "57": [2, 2, 2], + "69": [0, 2, 2], + "70": [0, 1, 1], + "71": [0, 1, 1], + "77": [0, 1, 1], + "78": [0, 1, 1], + "79": [1, 1, 1], + "80": [0, 1, 1], + "80-mega": [0, 1, 1], + "81": [0, 1, 1], + "82": [0, 1, 1], + "83": [0, 2, 2], + "84": [1, 1, 1], + "85": [1, 1, 1], + "86": [1, 1, 1], + "87": [1, 1, 1], + "92": [2, 2, 2], + "93": [1, 1, 1], + "94-gigantamax": [1, 2, 2], + "94-mega": [2, 2, 2], + "94": [1, 1, 1], + "98": [0, 1, 1], + "99": [0, 1, 1], + "99-gigantamax": [0, 1, 1], + "100": [0, 1, 1], + "101": [0, 1, 1], + "102": [0, 1, 1], + "103": [0, 1, 1], + "111": [0, 1, 1], + "112": [0, 1, 1], + "113": [2, 2, 2], + "114": [0, 1, 1], + "116": [0, 1, 1], + "117": [0, 1, 1], + "118": [1, 1, 1], + "119": [1, 1, 1], + "120": [0, 1, 1], + "121": [0, 1, 1], + "123": [1, 1, 1], + "125": [1, 1, 2], + "126": [0, 2, 1], + "127-mega": [0, 1, 1], + "127": [0, 1, 1], + "128": [0, 1, 1], + "129": [0, 1, 1], + "130-mega": [0, 1, 1], + "130": [0, 1, 1], + "131-gigantamax": [0, 1, 1], + "131": [0, 1, 1], + "132": [0, 1, 1], + "133": [0, 1, 1], + "133-partner": [0, 1, 1], + "134": [0, 1, 1], + "135": [1, 1, 1], + "136": [1, 1, 1], + "137": [0, 1, 1], + "138": [0, 1, 1], + "139": [0, 1, 2], + "140": [0, 1, 1], + "141": [0, 2, 2], + "142-mega": [0, 1, 1], + "142": [0, 1, 1], + "144": [1, 2, 2], + "145": [1, 1, 1], + "146": [1, 1, 1], + "147": [0, 1, 1], + "148": [0, 1, 1], + "149": [0, 1, 1], + "150-mega-x": [0, 1, 1], + "150-mega-y": [0, 1, 1], + "150": [0, 1, 1], + "151": [0, 1, 1], + "152": [0, 1, 1], + "153": [0, 1, 1], + "154": [0, 1, 1], + "158": [0, 1, 1], + "159": [0, 1, 1], + "160": [0, 1, 1], + "161": [0, 1, 2], + "162": [0, 1, 1], + "163": [0, 1, 1], + "164": [0, 2, 2], + "167": [0, 1, 1], + "168": [0, 1, 1], + "169": [0, 1, 1], + "170": [0, 1, 1], + "171": [0, 1, 1], + "172": [0, 1, 1], + "172-spiky": [0, 1, 1], + "173": [0, 1, 2], + "174": [0, 1, 1], + "175": [1, 1, 1], + "176": [1, 1, 1], + "177": [0, 1, 1], + "178": [0, 2, 2], + "179": [0, 1, 1], + "180": [0, 2, 2], + "181-mega": [0, 1, 2], + "181": [0, 1, 1], + "182": [0, 1, 1], + "183": [0, 1, 2], + "184": [0, 2, 2], + "185": [0, 1, 1], + "190": [0, 1, 1], + "193": [0, 1, 1], + "194": [0, 1, 1], + "195": [0, 1, 1], + "196": [1, 1, 1], + "197": [0, 1, 1], + "198": [0, 1, 1], + "199": [2, 1, 1], + "200": [1, 1, 1], + "201-m": [0, 1, 1], + "201-question": [0, 1, 1], + "201-j": [0, 1, 1], + "201-l": [0, 1, 1], + "201-h": [0, 1, 1], + "201-x": [0, 1, 1], + "201-exclamation": [0, 1, 1], + "201-q": [0, 1, 1], + "201-s": [0, 1, 1], + "201-c": [0, 1, 1], + "201-u": [0, 1, 1], + "201-t": [0, 1, 1], + "201-z": [0, 1, 1], + "201-d": [0, 1, 1], + "201-b": [0, 1, 1], + "201-g": [0, 1, 1], + "201-k": [0, 1, 1], + "201-i": [0, 1, 1], + "201-p": [0, 1, 1], + "201-e": [0, 1, 1], + "201-y": [0, 1, 1], + "201-r": [0, 1, 1], + "201-f": [0, 1, 1], + "201-n": [0, 1, 1], + "201-v": [0, 1, 1], + "201-a": [0, 1, 1], + "201-w": [0, 1, 1], + "201-o": [0, 1, 1], + "203": [0, 1, 1], + "206": [0, 1, 1], + "207": [0, 1, 1], + "211": [0, 1, 1], + "212-mega": [1, 1, 1], + "212": [1, 1, 1], + "213": [0, 1, 1], + "215": [0, 1, 1], + "216": [1, 1, 1], + "217": [1, 1, 1], + "222": [0, 1, 1], + "226": [0, 2, 2], + "227": [0, 1, 1], + "228": [0, 1, 1], + "229": [0, 1, 1], + "229-mega": [0, 1, 1], + "230": [0, 1, 1], + "231": [0, 1, 1], + "232": [0, 1, 1], + "233": [0, 1, 1], + "235": [0, 1, 1], + "239": [1, 1, 2], + "240": [0, 1, 1], + "242": [2, 2, 2], + "243": [0, 1, 1], + "244": [0, 2, 2], + "245": [0, 1, 1], + "246": [0, 1, 1], + "247": [0, 1, 1], + "248": [0, 1, 1], + "248-mega": [0, 2, 1], + "249": [0, 2, 2], + "250": [0, 2, 2], + "251": [0, 1, 1], + "255": [0, 1, 1], + "256": [0, 1, 1], + "257": [0, 1, 2], + "257-mega": [0, 1, 1], + "261": [0, 1, 1], + "262": [0, 1, 1], + "263": [0, 1, 1], + "264": [0, 1, 1], + "276": [0, 1, 1], + "277": [0, 1, 1], + "278": [1, 1, 1], + "279": [1, 1, 1], + "280": [0, 1, 1], + "281": [0, 1, 1], + "282-mega": [0, 2, 2], + "282": [0, 1, 1], + "285": [0, 1, 1], + "286": [0, 1, 1], + "290": [1, 1, 1], + "291": [2, 2, 2], + "292": [2, 1, 2], + "298": [0, 2, 2], + "300": [1, 1, 1], + "301": [1, 1, 1], + "302": [0, 1, 1], + "302-mega": [0, 1, 1], + "303-mega": [1, 1, 1], + "303": [0, 1, 1], + "304": [1, 1, 1], + "305": [1, 1, 1], + "306-mega": [1, 1, 1], + "306": [1, 1, 1], + "307": [0, 1, 1], + "308-mega": [0, 1, 1], + "308": [0, 2, 1], + "309": [0, 1, 1], + "310-mega": [0, 1, 1], + "310": [0, 1, 1], + "311": [1, 1, 1], + "312": [0, 1, 1], + "315": [0, 1, 1], + "320": [0, 1, 1], + "321": [0, 1, 1], + "327": [0, 1, 1], + "328": [0, 1, 1], + "329": [0, 1, 2], + "330": [0, 1, 1], + "333": [0, 1, 1], + "334-mega": [0, 2, 1], + "334": [0, 2, 2], + "335": [0, 2, 2], + "336": [0, 1, 1], + "337": [0, 1, 1], + "338": [0, 1, 1], + "339": [0, 1, 1], + "340": [0, 1, 2], + "341": [0, 2, 2], + "342": [0, 2, 2], + "351-rainy": [1, 2, 2], + "351-snowy": [1, 1, 1], + "351-sunny": [1, 2, 2], + "351": [0, 2, 2], + "352": [1, 1, 1], + "353": [0, 1, 1], + "354": [0, 1, 1], + "354-mega": [0, 1, 1], + "357": [0, 1, 1], + "358": [2, 1, 1], + "359": [0, 1, 1], + "359-mega": [0, 1, 1], + "361": [0, 1, 1], + "362": [0, 2, 2], + "362-mega": [0, 1, 1], + "369": [0, 1, 1], + "370": [0, 1, 1], + "371": [0, 1, 1], + "372": [0, 1, 1], + "373-mega": [0, 2, 2], + "373": [0, 1, 1], + "374": [0, 1, 1], + "375": [0, 1, 1], + "376-mega": [0, 1, 1], + "376": [0, 1, 1], + "377": [0, 1, 1], + "378": [1, 1, 1], + "379": [0, 1, 1], + "380-mega": [0, 1, 1], + "380": [0, 1, 1], + "381-mega": [0, 1, 1], + "381": [0, 1, 1], + "382-primal": [0, 1, 1], + "382": [0, 1, 1], + "383-primal": [0, 1, 1], + "383": [0, 1, 1], + "384-mega": [0, 2, 1], + "384": [0, 1, 1], + "385": [1, 1, 1], + "387": [0, 1, 1], + "388": [0, 1, 1], + "389": [0, 1, 1], + "390": [0, 1, 1], + "391": [0, 1, 1], + "392": [0, 1, 1], + "393": [0, 1, 1], + "394": [0, 1, 1], + "395": [0, 1, 1], + "399": [0, 1, 1], + "400": [0, 1, 1], + "401": [0, 1, 1], + "402": [0, 1, 1], + "406": [0, 1, 1], + "407": [0, 1, 1], + "412-sandy": [2, 2, 2], + "412-plant": [1, 1, 1], + "412-trash": [1, 1, 1], + "413-plant": [2, 2, 2], + "413-trash": [1, 1, 1], + "413-sandy": [1, 1, 1], + "414": [0, 1, 1], + "418": [0, 1, 1], + "419": [0, 1, 1], + "422-west": [1, 1, 1], + "422-east": [1, 1, 1], + "423-west": [1, 1, 1], + "423-east": [1, 1, 1], + "424": [0, 1, 1], + "425": [0, 1, 1], + "426": [0, 1, 1], + "427": [0, 1, 1], + "428-mega": [0, 1, 1], + "428": [0, 1, 1], + "429": [1, 1, 1], + "430": [0, 1, 1], + "433": [1, 1, 1], + "436": [0, 1, 1], + "437": [0, 1, 1], + "438": [0, 1, 1], + "440": [1, 1, 2], + "441": [0, 1, 1], + "442": [0, 1, 1], + "443": [1, 1, 1], + "444": [1, 1, 1], + "445-mega": [1, 1, 1], + "445": [1, 1, 1], + "447": [1, 1, 1], + "448-mega": [1, 1, 1], + "448": [1, 1, 1], + "453": [0, 1, 1], + "454": [0, 1, 1], + "455": [0, 1, 1], + "456": [0, 1, 1], + "457": [0, 1, 1], + "458": [0, 1, 1], + "461": [0, 1, 1], + "462": [0, 1, 1], + "464": [0, 1, 1], + "465": [0, 1, 1], + "466": [1, 1, 2], + "467": [0, 1, 1], + "468": [1, 1, 1], + "469": [0, 1, 1], + "470": [1, 1, 1], + "471": [1, 2, 2], + "472": [0, 1, 1], + "474": [0, 1, 1], + "475-mega": [0, 2, 2], + "475": [0, 1, 1], + "478": [0, 2, 1], + "479-heat": [0, 1, 1], + "479-wash": [0, 1, 1], + "479-mow": [0, 1, 1], + "479-frost": [0, 1, 1], + "479": [0, 1, 1], + "479-fan": [0, 1, 1], + "480": [1, 1, 1], + "481": [1, 1, 1], + "482": [1, 1, 1], + "485": [0, 1, 1], + "486": [0, 1, 1], + "487-altered": [0, 1, 1], + "487-origin": [0, 1, 1], + "488": [0, 1, 1], + "489": [1, 1, 1], + "490": [1, 1, 1], + "491": [0, 1, 1], + "492-land": [0, 2, 1], + "492-sky": [0, 1, 1], + "494": [0, 1, 1], + "495": [0, 1, 1], + "496": [0, 1, 1], + "497": [0, 1, 1], + "501": [0, 1, 1], + "502": [0, 1, 1], + "503": [0, 1, 1], + "517": [0, 1, 1], + "518": [0, 1, 1], + "524": [0, 1, 1], + "525": [0, 1, 1], + "526": [0, 2, 2], + "527": [0, 1, 1], + "528": [0, 1, 1], + "529": [0, 2, 2], + "530": [0, 2, 2], + "531": [0, 1, 1], + "531-mega": [0, 1, 1], + "532": [0, 1, 1], + "533": [0, 1, 1], + "534": [0, 1, 1], + "538": [0, 1, 1], + "539": [0, 2, 2], + "540": [0, 1, 1], + "541": [0, 1, 1], + "542": [0, 1, 1], + "543": [0, 1, 2], + "544": [0, 1, 2], + "545": [0, 1, 1], + "546": [0, 1, 1], + "547": [0, 1, 1], + "548": [1, 1, 1], + "549": [0, 1, 2], + "551": [0, 1, 1], + "552": [0, 1, 1], + "553": [0, 1, 1], + "556": [0, 1, 1], + "559": [1, 1, 1], + "560": [1, 1, 1], + "562": [0, 1, 1], + "563": [0, 1, 1], + "568": [0, 2, 2], + "569-gigantamax": [0, 1, 1], + "569": [0, 1, 1], + "570": [0, 1, 1], + "571": [0, 1, 1], + "572": [0, 1, 1], + "577": [1, 1, 1], + "578": [1, 1, 1], + "579": [1, 1, 1], + "585-autumn": [2, 0, 0], + "585-spring": [2, 0, 0], + "585-summer": [2, 0, 0], + "585-winter": [2, 0, 0], + "586-autumn": [1, 0, 0], + "586-spring": [1, 0, 0], + "586-summer": [1, 0, 0], + "586-winter": [1, 0, 0], + "587": [0, 1, 1], + "588": [0, 1, 1], + "589": [0, 1, 1], + "590": [0, 1, 1], + "591": [0, 1, 1], + "592": [0, 1, 2], + "593": [0, 1, 1], + "594": [0, 1, 2], + "595": [0, 1, 1], + "596": [0, 1, 1], + "602": [0, 1, 1], + "603": [0, 1, 1], + "604": [0, 1, 1], + "605": [1, 1, 1], + "606": [1, 1, 1], + "607": [0, 1, 1], + "608": [0, 1, 1], + "609": [0, 1, 1], + "610": [0, 1, 1], + "611": [0, 1, 1], + "612": [0, 1, 2], + "616": [0, 1, 1], + "617": [0, 1, 1], + "618": [0, 1, 1], + "619": [0, 1, 1], + "620": [0, 1, 1], + "621": [0, 1, 1], + "622": [0, 1, 1], + "623": [0, 1, 1], + "631": [0, 2, 2], + "632": [0, 1, 1], + "633": [0, 1, 1], + "634": [0, 1, 1], + "635": [0, 1, 1], + "636": [0, 1, 1], + "637": [0, 1, 1], + "640": [0, 1, 1], + "647-resolute": [0, 1, 1], + "647-ordinary": [0, 1, 1], + "648-aria": [0, 1, 1], + "648-pirouette": [0, 1, 1], + "649-burn": [0, 1, 1], + "649-chill": [0, 1, 1], + "649-douse": [0, 1, 1], + "649-shock": [0, 1, 1], + "649": [0, 1, 1], + "653": [0, 1, 1], + "654": [0, 1, 1], + "655": [0, 1, 1], + "656": [0, 1, 1], + "657": [0, 1, 1], + "658": [0, 1, 1], + "658-ash": [0, 1, 1], + "664": [0, 1, 1], + "665": [0, 1, 1], + "666-archipelago": [0, 1, 1], + "666-continental": [0, 1, 2], + "666-elegant": [0, 1, 1], + "666-fancy": [0, 2, 2], + "666-garden": [0, 1, 1], + "666-high-plains": [0, 1, 1], + "666-icy-snow": [0, 1, 1], + "666-jungle": [0, 1, 1], + "666-marine": [0, 1, 1], + "666-meadow": [0, 1, 1], + "666-modern": [0, 1, 1], + "666-monsoon": [0, 1, 1], + "666-ocean": [0, 1, 1], + "666-poke-ball": [0, 1, 2], + "666-polar": [0, 1, 1], + "666-river": [0, 2, 1], + "666-sandstorm": [0, 1, 1], + "666-savanna": [0, 1, 1], + "666-sun": [0, 1, 1], + "666-tundra": [0, 1, 1], + "669-red": [0, 2, 1], + "669-blue": [0, 2, 2], + "669-white": [0, 1, 1], + "669-yellow": [0, 2, 1], + "669-orange": [0, 2, 1], + "670-white": [0, 2, 2], + "670-blue": [0, 2, 2], + "670-orange": [0, 2, 2], + "670-red": [0, 2, 2], + "670-yellow": [0, 2, 2], + "671-red": [0, 1, 2], + "671-blue": [0, 1, 2], + "671-yellow": [0, 1, 2], + "671-white": [0, 1, 2], + "671-orange": [0, 1, 1], + "672": [0, 1, 2], + "673": [0, 1, 1], + "676": [0, 1, 1], + "676-dandy": [0, 1, 1], + "676-debutante": [0, 1, 1], + "676-diamond": [0, 1, 1], + "676-heart": [0, 1, 1], + "676-kabuki": [0, 1, 1], + "676-la-reine": [0, 1, 1], + "676-matron": [0, 1, 1], + "676-pharaoh": [0, 1, 1], + "676-star": [0, 1, 1], + "677": [0, 1, 1], + "678-female": [0, 1, 1], + "678": [0, 1, 1], + "682": [0, 1, 1], + "683": [0, 1, 1], + "684": [0, 1, 1], + "685": [0, 1, 1], + "688": [0, 1, 1], + "689": [0, 1, 1], + "690": [0, 1, 1], + "691": [0, 1, 1], + "696": [0, 1, 1], + "697": [0, 1, 1], + "698": [0, 1, 1], + "699": [0, 1, 1], + "700": [0, 1, 1], + "702": [0, 1, 1], + "703": [0, 1, 1], + "704": [0, 1, 1], + "705": [0, 1, 1], + "706": [0, 1, 1], + "708": [0, 1, 1], + "709": [0, 1, 1], + "710": [0, 1, 1], + "711": [1, 1, 1], + "712": [0, 1, 1], + "713": [0, 1, 1], + "714": [0, 1, 1], + "715": [0, 2, 2], + "716-active": [0, 1, 1], + "716-neutral": [0, 1, 1], + "717": [0, 1, 1], + "720-unbound": [1, 1, 1], + "720": [1, 1, 1], + "728": [0, 1, 1], + "729": [0, 1, 1], + "730": [0, 1, 1], + "734": [0, 1, 1], + "735": [0, 1, 1], + "742": [0, 2, 2], + "743": [0, 2, 2], + "747": [0, 1, 1], + "748": [0, 1, 1], + "751": [0, 1, 1], + "752": [0, 1, 1], + "753": [0, 1, 1], + "754": [0, 1, 1], + "755": [0, 1, 1], + "756": [0, 1, 2], + "761": [0, 1, 1], + "762": [0, 1, 1], + "763": [0, 1, 1], + "767": [0, 1, 1], + "768": [0, 1, 1], + "771": [0, 1, 1], + "772": [0, 1, 1], + "773-fighting": [0, 1, 1], + "773-psychic": [0, 1, 1], + "773-poison": [0, 1, 1], + "773-ground": [0, 1, 1], + "773-ghost": [0, 1, 1], + "773-steel": [0, 1, 1], + "773-rock": [0, 1, 1], + "773-grass": [0, 1, 1], + "773-dragon": [0, 1, 1], + "773-bug": [0, 1, 1], + "773-ice": [0, 1, 1], + "773-dark": [0, 1, 1], + "773": [0, 1, 1], + "773-fairy": [0, 1, 1], + "773-water": [0, 1, 1], + "773-electric": [0, 1, 1], + "773-flying": [0, 1, 1], + "773-fire": [0, 1, 1], + "776": [0, 1, 1], + "777": [0, 1, 1], + "778-busted": [0, 1, 1], + "778-disguised": [0, 1, 1], + "779": [0, 1, 1], + "789": [1, 1, 1], + "790": [0, 1, 1], + "791-radiant-sun": [0, 1, 1], + "791": [2, 1, 1], + "792-full-moon": [0, 1, 1], + "792": [0, 1, 1], + "793": [0, 1, 1], + "797": [0, 1, 1], + "798": [0, 1, 1], + "800-dawn-wings": [0, 1, 1], + "800-dusk-mane": [0, 1, 1], + "800-ultra": [0, 1, 1], + "800": [0, 1, 1], + "802": [1, 1, 1], + "803": [0, 1, 1], + "804": [0, 1, 1], + "807": [0, 1, 1], + "808": [0, 1, 1], + "809-gigantamax": [0, 1, 1], + "809": [0, 1, 1], + "816": [0, 1, 1], + "817": [0, 1, 1], + "818-gigantamax": [1, 1, 1], + "818": [0, 1, 1], + "821": [0, 1, 1], + "822": [0, 1, 1], + "823-gigantamax": [0, 2, 2], + "823": [0, 1, 1], + "829": [0, 1, 1], + "830": [0, 1, 1], + "835": [0, 1, 1], + "836": [0, 2, 2], + "850": [0, 1, 1], + "851-gigantamax": [0, 1, 1], + "851": [0, 1, 1], + "854": [0, 1, 1], + "855": [0, 1, 1], + "856": [0, 1, 1], + "857": [0, 2, 2], + "858-gigantamax": [0, 1, 1], + "858": [0, 1, 1], + "859": [0, 2, 2], + "860": [0, 1, 1], + "861-gigantamax": [0, 1, 1], + "861": [0, 1, 1], + "862": [0, 1, 1], + "863": [0, 1, 1], + "864": [0, 1, 1], + "867": [0, 1, 1], + "872": [1, 1, 1], + "873": [1, 1, 1], + "876-female": [0, 1, 1], + "876": [0, 1, 1], + "877-hangry": [1, 1, 1], + "877": [1, 1, 1], + "880": [0, 1, 1], + "881": [0, 1, 1], + "882": [0, 1, 1], + "883": [0, 1, 1], + "884-gigantamax": [0, 1, 1], + "884": [0, 1, 1], + "885": [1, 1, 1], + "886": [1, 1, 1], + "887": [2, 1, 1], + "888": [0, 1, 1], + "888-crowned": [0, 1, 1], + "889": [0, 1, 1], + "889-crowned": [0, 1, 1], + "890-eternamax": [0, 1, 1], + "890": [0, 1, 1], + "891": [1, 1, 1], + "892-gigantamax-rapid": [1, 2, 2], + "892-rapid-strike": [1, 1, 1], + "892": [1, 1, 1], + "892-gigantamax-single": [1, 2, 2], + "894": [0, 1, 1], + "895": [0, 1, 1], + "896": [1, 1, 1], + "897": [2, 1, 1], + "898": [1, 1, 1], + "898-ice": [1, 1, 1], + "898-shadow": [1, 1, 1], + "900": [0, 1, 1], + "901": [0, 1, 2], + "903": [0, 1, 1], + "909": [0, 2, 2], + "910": [0, 2, 2], + "911": [0, 1, 1], + "912": [0, 1, 1], + "913": [0, 2, 2], + "914": [0, 2, 1], + "919": [1, 1, 1], + "920": [2, 2, 2], + "924": [1, 1, 1], + "925-four": [1, 1, 1], + "925-three": [1, 1, 1], + "932": [0, 1, 2], + "933": [0, 1, 1], + "934": [0, 1, 1], + "935": [2, 2, 2], + "936": [2, 2, 2], + "937": [2, 2, 2], + "940": [0, 1, 1], + "941": [0, 1, 1], + "944": [0, 1, 1], + "945": [0, 1, 1], + "948": [0, 1, 1], + "949": [0, 1, 1], + "951": [0, 1, 1], + "952": [0, 1, 1], + "953": [0, 1, 1], + "954": [0, 1, 1], + "957": [1, 2, 2], + "958": [2, 2, 1], + "959": [2, 2, 2], + "962": [1, 1, 1], + "967": [0, 1, 1], + "968": [0, 2, 2], + "969": [0, 1, 1], + "970": [0, 1, 1], + "973": [2, 2, 2], + "974": [0, 1, 1], + "975": [0, 2, 2], + "978-curly": [0, 2, 2], + "978-droopy": [0, 2, 2], + "978-stretchy": [0, 2, 2], + "979": [2, 2, 2], + "981": [0, 1, 1], + "982": [0, 1, 1], + "982-three-segment": [0, 1, 1], + "987": [1, 1, 1], + "988": [0, 1, 2], + "993": [0, 1, 1], + "994": [0, 1, 1], + "995": [0, 1, 1], + "996": [0, 1, 1], + "997": [0, 1, 1], + "998": [0, 1, 1], + "999": [1, 1, 1], + "1000": [1, 1, 1], + "1001": [0, 1, 1], + "1003": [0, 1, 1], + "1004": [0, 1, 1], + "1006": [0, 2, 1], + "1007-apex-build": [0, 2, 2], + "1008-ultimate-mode": [1, 1, 1], + "1010": [0, 1, 1], + "1012-counterfeit": [0, 1, 1], + "1013-unremarkable": [0, 1, 1], + "1018": [0, 1, 1], + "1022": [0, 1, 1], + "1023": [0, 1, 1], + "2026": [0, 1, 1], + "2027": [0, 1, 1], + "2028": [0, 1, 1], + "2052": [0, 1, 1], + "2053": [0, 1, 1], + "2103": [0, 1, 1], + "2670": [0, 1, 1], + "4052": [0, 1, 1], + "4077": [0, 1, 1], + "4078": [0, 1, 1], + "4079": [0, 1, 1], + "4080": [2, 1, 1], + "4144": [0, 1, 1], + "4145": [0, 1, 1], + "4146": [0, 1, 1], + "4199": [2, 1, 1], + "4222": [0, 1, 1], + "4263": [0, 1, 1], + "4264": [0, 1, 1], + "4562": [0, 1, 1], + "6100": [0, 1, 1], + "6101": [0, 1, 1], + "6215": [0, 1, 1], + "6503": [0, 1, 1], + "6549": [0, 1, 1], + "6570": [0, 1, 1], + "6571": [0, 1, 1], + "6705": [0, 1, 1], + "6706": [0, 1, 1], + "6713": [0, 1, 1], + "8901": [1, 1, 1], "female": { - "3": [ - 0, - 2, - 1 - ], - "19": [ - 0, - 1, - 1 - ], - "20": [ - 0, - 1, - 1 - ], - "41": [ - 0, - 1, - 1 - ], - "42": [ - 0, - 1, - 1 - ], - "44": [ - 0, - 1, - 1 - ], - "45": [ - 0, - 1, - 1 - ], - "84": [ - 1, - 1, - 1 - ], - "85": [ - 1, - 1, - 1 - ], - "111": [ - 0, - 1, - 1 - ], - "112": [ - 0, - 1, - 1 - ], - "118": [ - 0, - 1, - 1 - ], - "119": [ - 0, - 1, - 1 - ], - "123": [ - 1, - 1, - 1 - ], - "129": [ - 0, - 1, - 1 - ], - "130": [ - 0, - 1, - 1 - ], - "178": [ - 0, - 2, - 2 - ], - "185": [ - 0, - 1, - 1 - ], - "190": [ - 0, - 1, - 1 - ], - "203": [ - 0, - 1, - 1 - ], - "207": [ - 0, - 1, - 1 - ], - "215": [ - 0, - 1, - 1 - ], - "217": [ - 1, - 1, - 1 - ], - "229": [ - 0, - 1, - 1 - ], - "232": [ - 0, - 1, - 1 - ], - "255": [ - 0, - 1, - 1 - ], - "256": [ - 0, - 1, - 1 - ], - "257": [ - 0, - 1, - 1 - ], - "307": [ - 0, - 1, - 1 - ], - "308": [ - 0, - 1, - 1 - ], - "315": [ - 0, - 1, - 1 - ], - "369": [ - 0, - 1, - 1 - ], - "399": [ - 0, - 1, - 1 - ], - "400": [ - 0, - 1, - 1 - ], - "401": [ - 0, - 1, - 1 - ], - "402": [ - 0, - 2, - 2 - ], - "407": [ - 0, - 1, - 1 - ], - "418": [ - 0, - 1, - 1 - ], - "419": [ - 0, - 2, - 1 - ], - "424": [ - 0, - 1, - 1 - ], - "443": [ - 1, - 1, - 1 - ], - "444": [ - 1, - 1, - 1 - ], - "445": [ - 1, - 1, - 1 - ], - "453": [ - 0, - 1, - 1 - ], - "454": [ - 0, - 1, - 1 - ], - "456": [ - 0, - 1, - 1 - ], - "457": [ - 0, - 1, - 1 - ], - "461": [ - 0, - 1, - 1 - ], - "464": [ - 0, - 1, - 1 - ], - "465": [ - 0, - 1, - 1 - ], - "592": [ - 1, - 1, - 1 - ], - "593": [ - 1, - 1, - 1 - ], - "6215": [ - 0, - 1, - 1 - ] + "3": [0, 2, 1], + "19": [0, 1, 1], + "20": [0, 1, 1], + "25": [0, 1, 1], + "25-beauty-cosplay": [0, 1, 1], + "25-cool-cosplay": [0, 1, 1], + "25-cosplay": [0, 1, 1], + "25-cute-cosplay": [0, 1, 1], + "25-partner": [0, 1, 1], + "25-smart-cosplay": [0, 1, 1], + "25-tough-cosplay": [0, 1, 1], + "26": [0, 1, 1], + "41": [0, 1, 1], + "42": [0, 1, 1], + "44": [0, 1, 1], + "45": [0, 1, 1], + "84": [1, 1, 1], + "85": [1, 1, 1], + "111": [0, 1, 1], + "112": [0, 1, 1], + "118": [0, 1, 1], + "119": [0, 1, 1], + "123": [1, 1, 1], + "129": [0, 1, 1], + "130": [0, 1, 1], + "154": [0, 1, 1], + "178": [0, 2, 2], + "185": [0, 1, 1], + "190": [0, 1, 1], + "194": [0, 1, 1], + "195": [0, 1, 1], + "198": [0, 1, 1], + "203": [0, 1, 1], + "207": [0, 1, 1], + "215": [0, 1, 1], + "217": [1, 1, 1], + "229": [0, 1, 1], + "232": [0, 1, 1], + "255": [0, 1, 1], + "256": [0, 1, 1], + "257": [0, 1, 1], + "307": [0, 1, 1], + "308": [0, 1, 1], + "315": [0, 1, 1], + "369": [0, 1, 1], + "399": [0, 1, 1], + "400": [0, 1, 1], + "401": [0, 1, 1], + "402": [0, 2, 2], + "407": [0, 1, 1], + "418": [0, 1, 1], + "419": [0, 2, 1], + "424": [0, 1, 1], + "443": [1, 1, 1], + "444": [1, 1, 1], + "445": [1, 1, 1], + "453": [0, 1, 1], + "454": [0, 1, 1], + "456": [0, 1, 1], + "457": [0, 1, 1], + "461": [0, 1, 1], + "464": [0, 1, 1], + "465": [0, 1, 1], + "592": [1, 1, 1], + "593": [1, 1, 1], + "6215": [0, 1, 1] }, "back": { - "1": [ - 0, - 1, - 1 - ], - "2": [ - 0, - 1, - 1 - ], - "3-gigantamax": [ - 0, - 1, - 1 - ], - "3-mega": [ - 0, - 2, - 2 - ], - "3": [ - 0, - 1, - 1 - ], - "4": [ - 0, - 1, - 1 - ], - "5": [ - 0, - 1, - 1 - ], - "6-mega-x": [ - 0, - 1, - 2 - ], - "6-gigantamax": [ - 0, - 1, - 2 - ], - "6-mega-y": [ - 0, - 1, - 2 - ], - "6": [ - 0, - 2, - 2 - ], - "7": [ - 0, - 2, - 2 - ], - "8": [ - 0, - 2, - 2 - ], - "9-gigantamax": [ - 0, - 1, - 2 - ], - "9-mega": [ - 0, - 2, - 2 - ], - "9": [ - 0, - 2, - 2 - ], - "19": [ - 0, - 1, - 1 - ], - "20": [ - 0, - 1, - 1 - ], - "23": [ - 0, - 1, - 1 - ], - "24": [ - 0, - 1, - 1 - ], - "29": [ - 0, - 1, - 1 - ], - "30": [ - 0, - 1, - 1 - ], - "31": [ - 1, - 1, - 1 - ], - "35": [ - 0, - 1, - 1 - ], - "36": [ - 0, - 2, - 1 - ], - "37": [ - 0, - 1, - 1 - ], - "38": [ - 0, - 1, - 1 - ], - "41": [ - 0, - 1, - 1 - ], - "42": [ - 0, - 1, - 1 - ], - "43": [ - 0, - 1, - 1 - ], - "44": [ - 0, - 1, - 1 - ], - "45": [ - 0, - 1, - 1 - ], - "46": [ - 1, - 1, - 1 - ], - "47": [ - 1, - 1, - 1 - ], - "50": [ - 0, - 1, - 1 - ], - "51": [ - 0, - 1, - 1 - ], - "52-gigantamax": [ - 1, - 1, - 1 - ], - "52": [ - 1, - 1, - 1 - ], - "53": [ - 1, - 1, - 1 - ], - "56": [ - 1, - 1, - 1 - ], - "57": [ - 1, - 1, - 1 - ], - "69": [ - 0, - 1, - 1 - ], - "70": [ - 0, - 1, - 1 - ], - "71": [ - 0, - 1, - 1 - ], - "77": [ - 0, - 1, - 1 - ], - "78": [ - 0, - 1, - 1 - ], - "79": [ - 1, - 1, - 1 - ], - "80": [ - 0, - 1, - 1 - ], - "80-mega": [ - 0, - 1, - 1 - ], - "81": [ - 0, - 1, - 1 - ], - "82": [ - 0, - 1, - 1 - ], - "83": [ - 0, - 2, - 2 - ], - "84": [ - 1, - 1, - 1 - ], - "85": [ - 1, - 1, - 1 - ], - "86": [ - 1, - 1, - 1 - ], - "87": [ - 1, - 1, - 1 - ], - "92": [ - 2, - 2, - 2 - ], - "93": [ - 1, - 1, - 1 - ], - "94-gigantamax": [ - 1, - 1, - 1 - ], - "94-mega": [ - 1, - 1, - 1 - ], - "94": [ - 1, - 1, - 1 - ], - "98": [ - 0, - 1, - 1 - ], - "99": [ - 0, - 1, - 1 - ], - "99-gigantamax": [ - 0, - 1, - 1 - ], - "100": [ - 0, - 1, - 1 - ], - "101": [ - 0, - 1, - 1 - ], - "111": [ - 0, - 1, - 1 - ], - "112": [ - 0, - 1, - 1 - ], - "113": [ - 1, - 1, - 1 - ], - "114": [ - 0, - 1, - 1 - ], - "116": [ - 0, - 1, - 1 - ], - "117": [ - 0, - 1, - 1 - ], - "118": [ - 1, - 1, - 1 - ], - "119": [ - 1, - 1, - 1 - ], - "120": [ - 0, - 1, - 1 - ], - "121": [ - 0, - 1, - 1 - ], - "123": [ - 1, - 1, - 1 - ], - "125": [ - 1, - 1, - 2 - ], - "126": [ - 0, - 2, - 1 - ], - "127-mega": [ - 0, - 1, - 1 - ], - "127": [ - 0, - 1, - 1 - ], - "129": [ - 0, - 1, - 1 - ], - "130-mega": [ - 0, - 1, - 1 - ], - "130": [ - 0, - 1, - 1 - ], - "131-gigantamax": [ - 0, - 1, - 1 - ], - "131": [ - 0, - 1, - 1 - ], - "132": [ - 0, - 1, - 1 - ], - "133": [ - 0, - 1, - 1 - ], - "133-partner": [ - 0, - 1, - 1 - ], - "134": [ - 0, - 1, - 1 - ], - "135": [ - 1, - 1, - 1 - ], - "136": [ - 1, - 1, - 1 - ], - "137": [ - 0, - 1, - 1 - ], - "138": [ - 0, - 1, - 1 - ], - "139": [ - 0, - 1, - 1 - ], - "140": [ - 0, - 1, - 1 - ], - "141": [ - 0, - 1, - 1 - ], - "142-mega": [ - 0, - 1, - 1 - ], - "142": [ - 0, - 1, - 1 - ], - "144": [ - 1, - 1, - 1 - ], - "145": [ - 1, - 1, - 1 - ], - "146": [ - 1, - 1, - 1 - ], - "147": [ - 0, - 1, - 1 - ], - "148": [ - 0, - 1, - 1 - ], - "149": [ - 0, - 1, - 1 - ], - "150-mega-x": [ - 0, - 1, - 1 - ], - "150-mega-y": [ - 0, - 1, - 1 - ], - "150": [ - 0, - 1, - 1 - ], - "151": [ - 0, - 1, - 1 - ], - "161": [ - 0, - 1, - 1 - ], - "162": [ - 0, - 1, - 1 - ], - "163": [ - 0, - 1, - 1 - ], - "164": [ - 0, - 1, - 1 - ], - "169": [ - 0, - 1, - 1 - ], - "173": [ - 0, - 1, - 1 - ], - "175": [ - 1, - 1, - 1 - ], - "176": [ - 1, - 1, - 1 - ], - "177": [ - 0, - 1, - 1 - ], - "178": [ - 0, - 2, - 2 - ], - "179": [ - 0, - 1, - 1 - ], - "180": [ - 0, - 1, - 2 - ], - "181-mega": [ - 0, - 1, - 2 - ], - "181": [ - 0, - 1, - 1 - ], - "182": [ - 0, - 1, - 1 - ], - "183": [ - 0, - 1, - 1 - ], - "184": [ - 0, - 1, - 1 - ], - "185": [ - 0, - 1, - 1 - ], - "190": [ - 0, - 1, - 1 - ], - "193": [ - 0, - 1, - 1 - ], - "196": [ - 1, - 1, - 1 - ], - "197": [ - 0, - 1, - 1 - ], - "199": [ - 2, - 1, - 1 - ], - "200": [ - 1, - 2, - 2 - ], - "201-m": [ - 0, - 1, - 1 - ], - "201-question": [ - 0, - 1, - 1 - ], - "201-j": [ - 0, - 1, - 1 - ], - "201-l": [ - 0, - 1, - 1 - ], - "201-h": [ - 0, - 1, - 1 - ], - "201-x": [ - 0, - 1, - 1 - ], - "201-exclamation": [ - 0, - 1, - 1 - ], - "201-q": [ - 0, - 1, - 1 - ], - "201-s": [ - 0, - 1, - 1 - ], - "201-c": [ - 0, - 1, - 1 - ], - "201-u": [ - 0, - 1, - 1 - ], - "201-t": [ - 0, - 1, - 1 - ], - "201-z": [ - 0, - 1, - 1 - ], - "201-d": [ - 0, - 1, - 1 - ], - "201-b": [ - 0, - 1, - 1 - ], - "201-g": [ - 0, - 1, - 1 - ], - "201-k": [ - 0, - 1, - 1 - ], - "201-i": [ - 0, - 1, - 1 - ], - "201-p": [ - 0, - 1, - 1 - ], - "201-e": [ - 0, - 1, - 1 - ], - "201-y": [ - 0, - 1, - 1 - ], - "201-r": [ - 0, - 1, - 1 - ], - "201-f": [ - 0, - 1, - 1 - ], - "201-n": [ - 0, - 1, - 1 - ], - "201-v": [ - 0, - 1, - 1 - ], - "201-a": [ - 0, - 1, - 1 - ], - "201-w": [ - 0, - 1, - 1 - ], - "201-o": [ - 0, - 1, - 1 - ], - "203": [ - 0, - 1, - 1 - ], - "206": [ - 0, - 1, - 1 - ], - "207": [ - 0, - 1, - 1 - ], - "212-mega": [ - 1, - 2, - 1 - ], - "212": [ - 1, - 1, - 1 - ], - "213": [ - 0, - 1, - 1 - ], - "215": [ - 0, - 1, - 1 - ], - "216": [ - 1, - 1, - 1 - ], - "217": [ - 1, - 1, - 1 - ], - "222": [ - 0, - 1, - 1 - ], - "226": [ - 0, - 1, - 1 - ], - "227": [ - 0, - 1, - 1 - ], - "228": [ - 0, - 1, - 1 - ], - "229": [ - 0, - 1, - 1 - ], - "229-mega": [ - 0, - 1, - 1 - ], - "230": [ - 0, - 1, - 1 - ], - "231": [ - 0, - 1, - 1 - ], - "232": [ - 0, - 1, - 1 - ], - "233": [ - 0, - 1, - 1 - ], - "235": [ - 0, - 1, - 1 - ], - "239": [ - 1, - 1, - 2 - ], - "240": [ - 0, - 1, - 1 - ], - "242": [ - 1, - 1, - 1 - ], - "243": [ - 0, - 1, - 1 - ], - "244": [ - 0, - 2, - 2 - ], - "245": [ - 0, - 1, - 1 - ], - "246": [ - 0, - 1, - 1 - ], - "247": [ - 0, - 1, - 1 - ], - "248": [ - 0, - 1, - 1 - ], - "248-mega": [ - 0, - 1, - 1 - ], - "249": [ - 0, - 1, - 1 - ], - "250": [ - 0, - 1, - 1 - ], - "251": [ - 0, - 1, - 1 - ], - "255": [ - 0, - 1, - 1 - ], - "256": [ - 0, - 1, - 1 - ], - "257": [ - 0, - 1, - 1 - ], - "257-mega": [ - 0, - 1, - 1 - ], - "261": [ - 0, - 1, - 1 - ], - "262": [ - 0, - 1, - 1 - ], - "263": [ - 0, - 1, - 1 - ], - "264": [ - 0, - 1, - 1 - ], - "278": [ - 1, - 1, - 1 - ], - "279": [ - 1, - 1, - 1 - ], - "280": [ - 0, - 1, - 1 - ], - "281": [ - 0, - 1, - 1 - ], - "282-mega": [ - 0, - 1, - 1 - ], - "282": [ - 0, - 1, - 1 - ], - "285": [ - 0, - 1, - 1 - ], - "286": [ - 0, - 1, - 1 - ], - "290": [ - 1, - 1, - 1 - ], - "291": [ - 2, - 2, - 2 - ], - "292": [ - 2, - 2, - 2 - ], - "298": [ - 0, - 1, - 1 - ], - "300": [ - 1, - 1, - 1 - ], - "301": [ - 1, - 1, - 1 - ], - "302": [ - 0, - 1, - 1 - ], - "302-mega": [ - 0, - 1, - 1 - ], - "303-mega": [ - 1, - 1, - 1 - ], - "303": [ - 1, - 1, - 1 - ], - "304": [ - 1, - 1, - 1 - ], - "305": [ - 1, - 1, - 1 - ], - "306-mega": [ - 1, - 1, - 1 - ], - "306": [ - 1, - 1, - 1 - ], - "307": [ - 0, - 1, - 1 - ], - "308-mega": [ - 0, - 1, - 1 - ], - "308": [ - 0, - 1, - 1 - ], - "309": [ - 0, - 1, - 1 - ], - "310-mega": [ - 0, - 1, - 1 - ], - "310": [ - 0, - 1, - 1 - ], - "311": [ - 1, - 1, - 1 - ], - "312": [ - 0, - 1, - 1 - ], - "315": [ - 0, - 1, - 1 - ], - "320": [ - 0, - 1, - 1 - ], - "321": [ - 0, - 1, - 1 - ], - "327": [ - 0, - 1, - 1 - ], - "328": [ - 0, - 1, - 1 - ], - "329": [ - 0, - 1, - 1 - ], - "330": [ - 0, - 1, - 1 - ], - "333": [ - 0, - 1, - 1 - ], - "334-mega": [ - 0, - 1, - 1 - ], - "334": [ - 0, - 1, - 1 - ], - "335": [ - 0, - 2, - 2 - ], - "336": [ - 0, - 1, - 1 - ], - "337": [ - 0, - 1, - 1 - ], - "338": [ - 0, - 1, - 1 - ], - "339": [ - 0, - 2, - 1 - ], - "340": [ - 0, - 1, - 2 - ], - "341": [ - 0, - 1, - 1 - ], - "342": [ - 0, - 2, - 2 - ], - "351-rainy": [ - 1, - 1, - 1 - ], - "351-snowy": [ - 1, - 1, - 1 - ], - "351-sunny": [ - 1, - 1, - 2 - ], - "351": [ - 0, - 1, - 1 - ], - "352": [ - 1, - 1, - 1 - ], - "353": [ - 0, - 1, - 1 - ], - "354": [ - 0, - 1, - 1 - ], - "354-mega": [ - 0, - 1, - 1 - ], - "357": [ - 0, - 1, - 1 - ], - "358": [ - 1, - 1, - 1 - ], - "361": [ - 0, - 1, - 1 - ], - "362": [ - 0, - 1, - 1 - ], - "362-mega": [ - 0, - 1, - 1 - ], - "369": [ - 0, - 2, - 2 - ], - "370": [ - 0, - 2, - 2 - ], - "371": [ - 0, - 1, - 1 - ], - "372": [ - 0, - 1, - 1 - ], - "373-mega": [ - 0, - 1, - 1 - ], - "373": [ - 0, - 1, - 1 - ], - "374": [ - 0, - 1, - 1 - ], - "375": [ - 0, - 1, - 1 - ], - "376-mega": [ - 0, - 1, - 1 - ], - "376": [ - 0, - 1, - 1 - ], - "380-mega": [ - 0, - 1, - 1 - ], - "380": [ - 0, - 1, - 1 - ], - "381-mega": [ - 0, - 1, - 1 - ], - "381": [ - 0, - 1, - 1 - ], - "382-primal": [ - 0, - 1, - 1 - ], - "382": [ - 0, - 1, - 1 - ], - "383-primal": [ - 0, - 1, - 1 - ], - "383": [ - 0, - 1, - 1 - ], - "384-mega": [ - 0, - 1, - 1 - ], - "384": [ - 0, - 1, - 1 - ], - "385": [ - 1, - 1, - 1 - ], - "387": [ - 0, - 2, - 1 - ], - "388": [ - 0, - 1, - 1 - ], - "389": [ - 0, - 1, - 1 - ], - "393": [ - 0, - 1, - 1 - ], - "394": [ - 0, - 1, - 1 - ], - "395": [ - 0, - 1, - 1 - ], - "399": [ - 0, - 2, - 1 - ], - "400": [ - 0, - 1, - 1 - ], - "401": [ - 0, - 1, - 1 - ], - "402": [ - 0, - 1, - 1 - ], - "406": [ - 0, - 1, - 1 - ], - "407": [ - 0, - 1, - 1 - ], - "412-sandy": [ - 2, - 2, - 2 - ], - "412-plant": [ - 1, - 1, - 1 - ], - "412-trash": [ - 1, - 1, - 1 - ], - "413-plant": [ - 1, - 1, - 1 - ], - "413-trash": [ - 1, - 1, - 1 - ], - "413-sandy": [ - 1, - 1, - 1 - ], - "414": [ - 0, - 1, - 1 - ], - "418": [ - 0, - 1, - 1 - ], - "419": [ - 0, - 1, - 1 - ], - "422-west": [ - 1, - 1, - 1 - ], - "422-east": [ - 1, - 1, - 1 - ], - "423-west": [ - 1, - 1, - 1 - ], - "423-east": [ - 1, - 1, - 1 - ], - "424": [ - 0, - 1, - 1 - ], - "425": [ - 0, - 1, - 1 - ], - "426": [ - 0, - 1, - 1 - ], - "427": [ - 0, - 1, - 1 - ], - "428-mega": [ - 0, - 1, - 1 - ], - "428": [ - 0, - 1, - 1 - ], - "429": [ - 1, - 1, - 1 - ], - "433": [ - 1, - 1, - 1 - ], - "436": [ - 0, - 1, - 1 - ], - "437": [ - 0, - 1, - 1 - ], - "438": [ - 0, - 1, - 1 - ], - "440": [ - 1, - 1, - 1 - ], - "441": [ - 0, - 1, - 2 - ], - "442": [ - 0, - 1, - 1 - ], - "443": [ - 1, - 1, - 1 - ], - "444": [ - 1, - 1, - 1 - ], - "445-mega": [ - 1, - 1, - 1 - ], - "445": [ - 1, - 1, - 1 - ], - "447": [ - 1, - 1, - 1 - ], - "448-mega": [ - 1, - 1, - 1 - ], - "448": [ - 1, - 1, - 1 - ], - "453": [ - 0, - 1, - 1 - ], - "454": [ - 0, - 1, - 1 - ], - "456": [ - 0, - 1, - 1 - ], - "457": [ - 0, - 2, - 1 - ], - "458": [ - 0, - 2, - 2 - ], - "461": [ - 0, - 1, - 1 - ], - "462": [ - 0, - 1, - 1 - ], - "464": [ - 0, - 1, - 1 - ], - "465": [ - 0, - 1, - 1 - ], - "466": [ - 2, - 1, - 1 - ], - "467": [ - 0, - 1, - 1 - ], - "468": [ - 1, - 1, - 1 - ], - "469": [ - 0, - 1, - 1 - ], - "470": [ - 2, - 2, - 1 - ], - "471": [ - 1, - 1, - 1 - ], - "472": [ - 0, - 1, - 1 - ], - "474": [ - 0, - 1, - 1 - ], - "475-mega": [ - 0, - 2, - 2 - ], - "475": [ - 0, - 1, - 1 - ], - "478": [ - 0, - 2, - 1 - ], - "479-heat": [ - 0, - 1, - 1 - ], - "479-wash": [ - 0, - 1, - 1 - ], - "479-mow": [ - 0, - 1, - 1 - ], - "479-frost": [ - 0, - 1, - 1 - ], - "479": [ - 0, - 1, - 1 - ], - "479-fan": [ - 0, - 1, - 1 - ], - "480": [ - 1, - 1, - 1 - ], - "481": [ - 1, - 1, - 1 - ], - "482": [ - 1, - 1, - 1 - ], - "485": [ - 0, - 1, - 1 - ], - "487-altered": [ - 0, - 1, - 1 - ], - "487-origin": [ - 0, - 1, - 1 - ], - "488": [ - 0, - 1, - 1 - ], - "489": [ - 1, - 1, - 1 - ], - "490": [ - 1, - 1, - 1 - ], - "491": [ - 0, - 1, - 1 - ], - "492-land": [ - 0, - 1, - 1 - ], - "492-sky": [ - 0, - 1, - 1 - ], - "494": [ - 0, - 1, - 1 - ], - "495": [ - 0, - 1, - 1 - ], - "496": [ - 0, - 1, - 1 - ], - "497": [ - 0, - 1, - 1 - ], - "517": [ - 0, - 1, - 1 - ], - "518": [ - 0, - 1, - 1 - ], - "524": [ - 0, - 1, - 1 - ], - "525": [ - 0, - 1, - 1 - ], - "526": [ - 0, - 1, - 1 - ], - "529": [ - 0, - 2, - 2 - ], - "530": [ - 0, - 1, - 2 - ], - "531": [ - 0, - 1, - 1 - ], - "531-mega": [ - 0, - 1, - 1 - ], - "532": [ - 0, - 1, - 1 - ], - "533": [ - 0, - 1, - 1 - ], - "534": [ - 0, - 1, - 1 - ], - "538": [ - 0, - 1, - 1 - ], - "539": [ - 0, - 2, - 2 - ], - "540": [ - 0, - 1, - 1 - ], - "541": [ - 0, - 1, - 1 - ], - "542": [ - 0, - 1, - 1 - ], - "543": [ - 0, - 1, - 1 - ], - "544": [ - 0, - 1, - 1 - ], - "545": [ - 0, - 1, - 1 - ], - "546": [ - 0, - 1, - 1 - ], - "547": [ - 0, - 1, - 1 - ], - "548": [ - 1, - 1, - 1 - ], - "549": [ - 0, - 1, - 1 - ], - "551": [ - 0, - 1, - 1 - ], - "552": [ - 0, - 1, - 1 - ], - "553": [ - 0, - 1, - 1 - ], - "556": [ - 0, - 1, - 1 - ], - "559": [ - 1, - 1, - 1 - ], - "560": [ - 1, - 1, - 1 - ], - "562": [ - 0, - 1, - 1 - ], - "563": [ - 0, - 1, - 1 - ], - "568": [ - 0, - 1, - 1 - ], - "569-gigantamax": [ - 0, - 1, - 1 - ], - "569": [ - 0, - 1, - 1 - ], - "570": [ - 0, - 1, - 1 - ], - "571": [ - 0, - 1, - 1 - ], - "572": [ - 0, - 1, - 1 - ], - "577": [ - 1, - 1, - 1 - ], - "578": [ - 1, - 1, - 1 - ], - "579": [ - 1, - 1, - 1 - ], - "585-autumn": [ - 2, - 0, - 0 - ], - "585-spring": [ - 2, - 0, - 0 - ], - "585-summer": [ - 1, - 0, - 0 - ], - "585-winter": [ - 2, - 0, - 0 - ], - "586-autumn": [ - 1, - 0, - 0 - ], - "586-spring": [ - 1, - 0, - 0 - ], - "586-summer": [ - 1, - 0, - 0 - ], - "586-winter": [ - 1, - 0, - 0 - ], - "592": [ - 0, - 1, - 2 - ], - "593": [ - 0, - 1, - 1 - ], - "594": [ - 0, - 1, - 2 - ], - "595": [ - 0, - 1, - 1 - ], - "596": [ - 0, - 1, - 1 - ], - "602": [ - 0, - 1, - 1 - ], - "603": [ - 0, - 1, - 1 - ], - "604": [ - 0, - 1, - 1 - ], - "605": [ - 1, - 1, - 1 - ], - "606": [ - 1, - 1, - 1 - ], - "607": [ - 0, - 1, - 1 - ], - "608": [ - 0, - 1, - 1 - ], - "609": [ - 0, - 1, - 1 - ], - "610": [ - 0, - 1, - 1 - ], - "611": [ - 0, - 1, - 1 - ], - "612": [ - 0, - 1, - 1 - ], - "618": [ - 0, - 2, - 2 - ], - "619": [ - 0, - 1, - 1 - ], - "620": [ - 0, - 1, - 1 - ], - "622": [ - 0, - 1, - 1 - ], - "623": [ - 0, - 1, - 1 - ], - "631": [ - 0, - 2, - 2 - ], - "632": [ - 0, - 1, - 1 - ], - "633": [ - 0, - 1, - 1 - ], - "634": [ - 0, - 1, - 1 - ], - "635": [ - 0, - 1, - 1 - ], - "636": [ - 0, - 1, - 1 - ], - "637": [ - 0, - 1, - 1 - ], - "640": [ - 0, - 1, - 1 - ], - "641-incarnate": [ - 0, - 0, - 0 - ], - "641-therian": [ - 0, - 0, - 0 - ], - "642-incarnate": [ - 0, - 0, - 0 - ], - "642-therian": [ - 0, - 0, - 0 - ], - "645-incarnate": [ - 0, - 0, - 0 - ], - "645-therian": [ - 0, - 0, - 0 - ], - "647-resolute": [ - 0, - 1, - 1 - ], - "647-ordinary": [ - 0, - 1, - 1 - ], - "648-aria": [ - 0, - 1, - 1 - ], - "648-pirouette": [ - 0, - 1, - 1 - ], - "649-burn": [ - 0, - 1, - 1 - ], - "649-chill": [ - 0, - 1, - 1 - ], - "649-douse": [ - 0, - 1, - 1 - ], - "649-shock": [ - 0, - 1, - 1 - ], - "649": [ - 0, - 1, - 1 - ], - "653": [ - 0, - 1, - 1 - ], - "654": [ - 0, - 1, - 1 - ], - "655": [ - 0, - 1, - 1 - ], - "664": [ - 0, - 1, - 1 - ], - "665": [ - 0, - 1, - 1 - ], - "666-archipelago": [ - 0, - 1, - 1 - ], - "666-continental": [ - 0, - 1, - 1 - ], - "666-elegant": [ - 0, - 1, - 1 - ], - "666-fancy": [ - 0, - 2, - 2 - ], - "666-garden": [ - 0, - 1, - 1 - ], - "666-high-plains": [ - 0, - 1, - 1 - ], - "666-icy-snow": [ - 0, - 1, - 1 - ], - "666-jungle": [ - 0, - 1, - 1 - ], - "666-marine": [ - 0, - 1, - 1 - ], - "666-meadow": [ - 0, - 1, - 1 - ], - "666-modern": [ - 0, - 1, - 1 - ], - "666-monsoon": [ - 0, - 1, - 1 - ], - "666-ocean": [ - 0, - 1, - 1 - ], - "666-poke-ball": [ - 0, - 1, - 1 - ], - "666-polar": [ - 0, - 1, - 1 - ], - "666-river": [ - 0, - 2, - 1 - ], - "666-sandstorm": [ - 0, - 1, - 1 - ], - "666-savanna": [ - 0, - 1, - 1 - ], - "666-sun": [ - 0, - 1, - 1 - ], - "666-tundra": [ - 0, - 1, - 1 - ], - "669-red": [ - 0, - 1, - 1 - ], - "669-blue": [ - 0, - 1, - 1 - ], - "669-white": [ - 0, - 1, - 1 - ], - "669-yellow": [ - 0, - 1, - 1 - ], - "669-orange": [ - 0, - 1, - 1 - ], - "670-white": [ - 0, - 1, - 1 - ], - "670-blue": [ - 0, - 1, - 1 - ], - "670-orange": [ - 0, - 1, - 1 - ], - "670-red": [ - 0, - 1, - 1 - ], - "670-yellow": [ - 0, - 1, - 1 - ], - "671-red": [ - 0, - 1, - 1 - ], - "671-blue": [ - 0, - 1, - 1 - ], - "671-yellow": [ - 0, - 1, - 1 - ], - "671-white": [ - 0, - 1, - 1 - ], - "671-orange": [ - 0, - 1, - 1 - ], - "672": [ - 0, - 1, - 1 - ], - "673": [ - 0, - 1, - 1 - ], - "677": [ - 0, - 1, - 1 - ], - "678-female": [ - 0, - 1, - 1 - ], - "678": [ - 0, - 1, - 1 - ], - "690": [ - 0, - 1, - 1 - ], - "691": [ - 0, - 1, - 1 - ], - "696": [ - 0, - 1, - 1 - ], - "697": [ - 0, - 1, - 1 - ], - "698": [ - 0, - 1, - 1 - ], - "699": [ - 0, - 1, - 1 - ], - "700": [ - 0, - 1, - 1 - ], - "702": [ - 0, - 1, - 1 - ], - "703": [ - 0, - 1, - 1 - ], - "704": [ - 0, - 1, - 1 - ], - "705": [ - 0, - 1, - 1 - ], - "706": [ - 0, - 1, - 1 - ], - "708": [ - 0, - 1, - 1 - ], - "709": [ - 0, - 1, - 1 - ], - "710": [ - 0, - 1, - 1 - ], - "711": [ - 1, - 1, - 1 - ], - "712": [ - 0, - 1, - 1 - ], - "713": [ - 0, - 1, - 1 - ], - "714": [ - 0, - 1, - 1 - ], - "715": [ - 0, - 2, - 2 - ], - "716-active": [ - 0, - 1, - 1 - ], - "716-neutral": [ - 0, - 1, - 1 - ], - "717": [ - 0, - 1, - 1 - ], - "720-unbound": [ - 1, - 1, - 1 - ], - "720": [ - 1, - 1, - 1 - ], - "728": [ - 0, - 1, - 1 - ], - "729": [ - 0, - 1, - 1 - ], - "730": [ - 0, - 1, - 1 - ], - "734": [ - 0, - 1, - 1 - ], - "735": [ - 0, - 1, - 1 - ], - "742": [ - 0, - 2, - 2 - ], - "743": [ - 0, - 2, - 2 - ], - "747": [ - 0, - 1, - 1 - ], - "748": [ - 0, - 1, - 1 - ], - "751": [ - 0, - 1, - 1 - ], - "752": [ - 0, - 1, - 1 - ], - "753": [ - 0, - 1, - 1 - ], - "754": [ - 0, - 2, - 2 - ], - "755": [ - 0, - 1, - 1 - ], - "756": [ - 0, - 1, - 1 - ], - "761": [ - 0, - 1, - 1 - ], - "762": [ - 0, - 1, - 1 - ], - "763": [ - 0, - 1, - 1 - ], - "767": [ - 0, - 1, - 1 - ], - "768": [ - 0, - 1, - 1 - ], - "771": [ - 0, - 1, - 1 - ], - "772": [ - 0, - 1, - 1 - ], - "773-fighting": [ - 0, - 1, - 1 - ], - "773-psychic": [ - 0, - 1, - 1 - ], - "773-poison": [ - 0, - 1, - 1 - ], - "773-ground": [ - 0, - 1, - 1 - ], - "773-ghost": [ - 0, - 1, - 1 - ], - "773-steel": [ - 0, - 1, - 1 - ], - "773-rock": [ - 0, - 1, - 1 - ], - "773-grass": [ - 0, - 1, - 1 - ], - "773-dragon": [ - 0, - 1, - 1 - ], - "773-bug": [ - 0, - 1, - 1 - ], - "773-ice": [ - 0, - 1, - 1 - ], - "773-dark": [ - 0, - 1, - 1 - ], - "773": [ - 0, - 1, - 1 - ], - "773-fairy": [ - 0, - 1, - 1 - ], - "773-water": [ - 0, - 1, - 1 - ], - "773-electric": [ - 0, - 1, - 1 - ], - "773-flying": [ - 0, - 1, - 1 - ], - "773-fire": [ - 0, - 1, - 1 - ], - "776": [ - 0, - 1, - 1 - ], - "777": [ - 0, - 1, - 1 - ], - "778-busted": [ - 0, - 1, - 1 - ], - "778-disguised": [ - 0, - 1, - 1 - ], - "779": [ - 0, - 1, - 1 - ], - "789": [ - 1, - 1, - 1 - ], - "790": [ - 0, - 1, - 1 - ], - "791-radiant-sun": [ - 0, - 1, - 1 - ], - "791": [ - 2, - 1, - 1 - ], - "792-full-moon": [ - 0, - 1, - 1 - ], - "792": [ - 0, - 1, - 1 - ], - "793": [ - 0, - 1, - 1 - ], - "797": [ - 0, - 1, - 1 - ], - "798": [ - 0, - 1, - 1 - ], - "800-dawn-wings": [ - 0, - 1, - 1 - ], - "800-dusk-mane": [ - 0, - 1, - 1 - ], - "800-ultra": [ - 0, - 1, - 1 - ], - "800": [ - 0, - 1, - 1 - ], - "802": [ - 1, - 1, - 1 - ], - "803": [ - 0, - 1, - 1 - ], - "804": [ - 0, - 1, - 1 - ], - "808": [ - 0, - 1, - 1 - ], - "809-gigantamax": [ - 0, - 1, - 1 - ], - "809": [ - 0, - 1, - 1 - ], - "816": [ - 0, - 1, - 1 - ], - "817": [ - 0, - 1, - 1 - ], - "818-gigantamax": [ - 1, - 1, - 1 - ], - "818": [ - 0, - 1, - 1 - ], - "821": [ - 0, - 1, - 1 - ], - "822": [ - 0, - 1, - 1 - ], - "823-gigantamax": [ - 0, - 2, - 2 - ], - "823": [ - 0, - 1, - 1 - ], - "829": [ - 0, - 1, - 1 - ], - "830": [ - 0, - 1, - 1 - ], - "835": [ - 0, - 1, - 1 - ], - "836": [ - 0, - 1, - 1 - ], - "850": [ - 0, - 1, - 1 - ], - "851-gigantamax": [ - 0, - 1, - 1 - ], - "851": [ - 0, - 1, - 1 - ], - "854": [ - 0, - 1, - 1 - ], - "855": [ - 0, - 1, - 1 - ], - "856": [ - 0, - 1, - 1 - ], - "857": [ - 0, - 2, - 2 - ], - "858-gigantamax": [ - 0, - 1, - 1 - ], - "858": [ - 0, - 1, - 1 - ], - "859": [ - 0, - 1, - 1 - ], - "860": [ - 0, - 1, - 1 - ], - "861-gigantamax": [ - 0, - 1, - 1 - ], - "861": [ - 0, - 1, - 1 - ], - "862": [ - 0, - 1, - 1 - ], - "863": [ - 0, - 1, - 1 - ], - "864": [ - 0, - 1, - 1 - ], - "867": [ - 0, - 1, - 1 - ], - "872": [ - 1, - 1, - 1 - ], - "873": [ - 1, - 1, - 1 - ], - "876-female": [ - 0, - 1, - 1 - ], - "876": [ - 0, - 1, - 1 - ], - "877-hangry": [ - 1, - 1, - 1 - ], - "877": [ - 1, - 1, - 1 - ], - "880": [ - 0, - 1, - 1 - ], - "881": [ - 0, - 2, - 2 - ], - "882": [ - 0, - 1, - 1 - ], - "883": [ - 0, - 1, - 1 - ], - "884-gigantamax": [ - 0, - 1, - 1 - ], - "884": [ - 0, - 1, - 1 - ], - "885": [ - 1, - 1, - 1 - ], - "886": [ - 1, - 1, - 1 - ], - "887": [ - 1, - 1, - 1 - ], - "888": [ - 0, - 1, - 1 - ], - "888-crowned": [ - 0, - 1, - 1 - ], - "889": [ - 0, - 1, - 1 - ], - "889-crowned": [ - 0, - 1, - 1 - ], - "890-eternamax": [ - 0, - 1, - 1 - ], - "890": [ - 0, - 1, - 1 - ], - "891": [ - 1, - 1, - 1 - ], - "892-gigantamax-rapid": [ - 1, - 2, - 2 - ], - "892-rapid-strike": [ - 1, - 1, - 1 - ], - "892": [ - 1, - 1, - 1 - ], - "892-gigantamax-single": [ - 1, - 2, - 2 - ], - "896": [ - 1, - 1, - 1 - ], - "897": [ - 1, - 1, - 1 - ], - "898": [ - 1, - 1, - 1 - ], - "898-ice": [ - 1, - 1, - 1 - ], - "898-shadow": [ - 1, - 1, - 1 - ], - "900": [ - 0, - 1, - 1 - ], - "901": [ - 0, - 1, - 1 - ], - "903": [ - 0, - 1, - 1 - ], - "909": [ - 0, - 1, - 1 - ], - "910": [ - 0, - 2, - 2 - ], - "911": [ - 0, - 1, - 1 - ], - "912": [ - 0, - 1, - 1 - ], - "913": [ - 0, - 1, - 1 - ], - "914": [ - 0, - 1, - 1 - ], - "919": [ - 1, - 1, - 1 - ], - "920": [ - 1, - 1, - 1 - ], - "924": [ - 1, - 1, - 1 - ], - "925-four": [ - 1, - 1, - 1 - ], - "925-three": [ - 1, - 1, - 1 - ], - "932": [ - 0, - 1, - 1 - ], - "933": [ - 0, - 1, - 1 - ], - "934": [ - 0, - 1, - 1 - ], - "935": [ - 2, - 2, - 2 - ], - "936": [ - 1, - 1, - 1 - ], - "937": [ - 1, - 1, - 1 - ], - "940": [ - 0, - 1, - 1 - ], - "941": [ - 0, - 1, - 1 - ], - "948": [ - 0, - 1, - 1 - ], - "949": [ - 0, - 1, - 1 - ], - "951": [ - 0, - 1, - 1 - ], - "952": [ - 0, - 1, - 1 - ], - "953": [ - 0, - 1, - 1 - ], - "954": [ - 0, - 1, - 1 - ], - "957": [ - 1, - 1, - 1 - ], - "958": [ - 1, - 1, - 1 - ], - "959": [ - 1, - 1, - 1 - ], - "962": [ - 1, - 1, - 1 - ], - "967": [ - 0, - 1, - 1 - ], - "968": [ - 0, - 1, - 1 - ], - "969": [ - 0, - 1, - 1 - ], - "970": [ - 0, - 1, - 1 - ], - "973": [ - 1, - 1, - 1 - ], - "974": [ - 0, - 1, - 1 - ], - "975": [ - 0, - 1, - 1 - ], - "978-curly": [ - 0, - 2, - 2 - ], - "978-droopy": [ - 0, - 2, - 2 - ], - "978-stretchy": [ - 0, - 1, - 1 - ], - "979": [ - 1, - 1, - 1 - ], - "981": [ - 0, - 1, - 1 - ], - "982": [ - 0, - 1, - 2 - ], - "982-three-segment": [ - 0, - 1, - 2 - ], - "987": [ - 1, - 1, - 1 - ], - "988": [ - 0, - 1, - 1 - ], - "993": [ - 0, - 1, - 1 - ], - "994": [ - 0, - 1, - 1 - ], - "995": [ - 0, - 1, - 1 - ], - "996": [ - 0, - 1, - 1 - ], - "997": [ - 0, - 1, - 1 - ], - "998": [ - 0, - 1, - 1 - ], - "999": [ - 1, - 1, - 1 - ], - "1000": [ - 1, - 1, - 1 - ], - "1001": [ - 0, - 1, - 1 - ], - "1003": [ - 0, - 1, - 1 - ], - "1004": [ - 0, - 1, - 1 - ], - "1006": [ - 0, - 2, - 1 - ], - "1007-apex-build": [ - 0, - 2, - 2 - ], - "1008-ultimate-mode": [ - 1, - 1, - 1 - ], - "1010": [ - 0, - 1, - 1 - ], - "1018": [ - 0, - 1, - 1 - ], - "1022": [ - 0, - 2, - 2 - ], - "1023": [ - 0, - 1, - 1 - ], - "2027": [ - 0, - 1, - 1 - ], - "2028": [ - 0, - 1, - 1 - ], - "2052": [ - 0, - 1, - 1 - ], - "2053": [ - 0, - 1, - 1 - ], - "2670": [ - 0, - 1, - 1 - ], - "4052": [ - 0, - 1, - 1 - ], - "4077": [ - 0, - 1, - 1 - ], - "4078": [ - 0, - 1, - 1 - ], - "4079": [ - 0, - 1, - 1 - ], - "4080": [ - 2, - 1, - 1 - ], - "4144": [ - 0, - 1, - 1 - ], - "4145": [ - 0, - 1, - 1 - ], - "4146": [ - 0, - 1, - 1 - ], - "4199": [ - 2, - 1, - 1 - ], - "4222": [ - 0, - 1, - 1 - ], - "4263": [ - 0, - 1, - 1 - ], - "4264": [ - 0, - 1, - 1 - ], - "4562": [ - 0, - 1, - 1 - ], - "6100": [ - 0, - 1, - 1 - ], - "6101": [ - 0, - 1, - 1 - ], - "6215": [ - 0, - 1, - 1 - ], - "6549": [ - 0, - 1, - 1 - ], - "6570": [ - 0, - 1, - 1 - ], - "6571": [ - 0, - 1, - 1 - ], - "6705": [ - 0, - 1, - 1 - ], - "6706": [ - 0, - 1, - 1 - ], - "6713": [ - 0, - 1, - 1 - ], - "8901": [ - 1, - 1, - 1 - ], + "1": [0, 1, 1], + "2": [0, 1, 1], + "3-gigantamax": [0, 1, 1], + "3-mega": [0, 2, 2], + "3": [0, 1, 1], + "4": [0, 1, 1], + "5": [0, 1, 1], + "6-mega-x": [0, 1, 2], + "6-gigantamax": [0, 1, 2], + "6-mega-y": [0, 1, 2], + "6": [0, 2, 2], + "7": [0, 2, 2], + "8": [0, 2, 2], + "9-gigantamax": [0, 1, 2], + "9-mega": [0, 2, 2], + "9": [0, 2, 2], + "19": [0, 1, 1], + "20": [0, 1, 1], + "23": [0, 1, 1], + "24": [0, 1, 1], + "25": [0, 1, 1], + "25-beauty-cosplay": [0, 1, 1], + "25-cool-cosplay": [0, 1, 1], + "25-cosplay": [0, 1, 1], + "25-cute-cosplay": [0, 1, 1], + "25-gigantamax": [0, 1, 1], + "25-partner": [0, 1, 1], + "25-smart-cosplay": [0, 1, 1], + "25-tough-cosplay": [0, 1, 1], + "26": [0, 1, 1], + "29": [0, 1, 1], + "30": [0, 1, 1], + "31": [1, 1, 1], + "35": [0, 1, 1], + "36": [0, 2, 1], + "37": [0, 1, 1], + "38": [0, 1, 1], + "39": [0, 1, 1], + "40": [0, 1, 1], + "41": [0, 1, 1], + "42": [0, 1, 1], + "43": [0, 1, 1], + "44": [0, 1, 1], + "45": [0, 1, 1], + "46": [1, 1, 1], + "47": [1, 1, 1], + "50": [0, 1, 1], + "51": [0, 1, 1], + "52-gigantamax": [1, 1, 1], + "52": [1, 1, 1], + "53": [1, 1, 1], + "56": [1, 1, 1], + "57": [1, 1, 1], + "69": [0, 1, 1], + "70": [0, 1, 1], + "71": [0, 1, 1], + "77": [0, 1, 1], + "78": [0, 1, 1], + "79": [1, 1, 1], + "80": [0, 1, 1], + "80-mega": [0, 1, 1], + "81": [0, 1, 1], + "82": [0, 1, 1], + "83": [0, 2, 2], + "84": [1, 1, 1], + "85": [1, 1, 1], + "86": [1, 1, 1], + "87": [1, 1, 1], + "92": [2, 2, 2], + "93": [1, 1, 1], + "94-gigantamax": [1, 1, 1], + "94-mega": [1, 1, 1], + "94": [1, 1, 1], + "98": [0, 1, 1], + "99": [0, 1, 1], + "99-gigantamax": [0, 1, 1], + "100": [0, 1, 1], + "101": [0, 1, 1], + "102": [0, 1, 1], + "103": [0, 1, 1], + "111": [0, 1, 1], + "112": [0, 1, 1], + "113": [1, 1, 1], + "114": [0, 1, 1], + "116": [0, 1, 1], + "117": [0, 1, 1], + "118": [1, 1, 1], + "119": [1, 1, 1], + "120": [0, 1, 1], + "121": [0, 1, 1], + "123": [1, 1, 1], + "125": [1, 1, 2], + "126": [0, 2, 1], + "127-mega": [0, 1, 1], + "127": [0, 1, 1], + "128": [0, 1, 1], + "129": [0, 1, 1], + "130-mega": [0, 1, 1], + "130": [0, 1, 1], + "131-gigantamax": [0, 1, 1], + "131": [0, 1, 1], + "132": [0, 1, 1], + "133": [0, 1, 1], + "133-partner": [0, 1, 1], + "134": [0, 1, 1], + "135": [1, 1, 1], + "136": [1, 1, 1], + "137": [0, 1, 1], + "138": [0, 1, 1], + "139": [0, 1, 1], + "140": [0, 1, 1], + "141": [0, 1, 1], + "142-mega": [0, 1, 1], + "142": [0, 1, 1], + "144": [1, 1, 1], + "145": [1, 1, 1], + "146": [1, 1, 1], + "147": [0, 1, 1], + "148": [0, 1, 1], + "149": [0, 1, 1], + "150-mega-x": [0, 1, 1], + "150-mega-y": [0, 1, 1], + "150": [0, 1, 1], + "151": [0, 1, 1], + "152": [0, 1, 1], + "153": [0, 1, 1], + "154": [0, 1, 1], + "158": [0, 1, 1], + "159": [0, 1, 1], + "160": [0, 1, 1], + "161": [0, 1, 1], + "162": [0, 1, 1], + "163": [0, 1, 1], + "164": [0, 1, 1], + "167": [0, 1, 1], + "168": [0, 1, 1], + "169": [0, 1, 1], + "170": [0, 1, 1], + "171": [0, 1, 1], + "172": [0, 1, 1], + "172-spiky": [0, 1, 1], + "173": [0, 1, 1], + "174": [0, 1, 1], + "175": [1, 1, 1], + "176": [1, 1, 1], + "177": [0, 1, 1], + "178": [0, 2, 2], + "179": [0, 1, 1], + "180": [0, 1, 2], + "181-mega": [0, 1, 2], + "181": [0, 1, 1], + "182": [0, 1, 1], + "183": [0, 1, 1], + "184": [0, 1, 1], + "185": [0, 1, 1], + "190": [0, 1, 1], + "193": [0, 1, 1], + "194": [0, 1, 1], + "195": [0, 1, 1], + "196": [1, 1, 1], + "197": [0, 1, 1], + "198": [0, 1, 1], + "199": [2, 1, 1], + "200": [1, 2, 2], + "201-m": [0, 1, 1], + "201-question": [0, 1, 1], + "201-j": [0, 1, 1], + "201-l": [0, 1, 1], + "201-h": [0, 1, 1], + "201-x": [0, 1, 1], + "201-exclamation": [0, 1, 1], + "201-q": [0, 1, 1], + "201-s": [0, 1, 1], + "201-c": [0, 1, 1], + "201-u": [0, 1, 1], + "201-t": [0, 1, 1], + "201-z": [0, 1, 1], + "201-d": [0, 1, 1], + "201-b": [0, 1, 1], + "201-g": [0, 1, 1], + "201-k": [0, 1, 1], + "201-i": [0, 1, 1], + "201-p": [0, 1, 1], + "201-e": [0, 1, 1], + "201-y": [0, 1, 1], + "201-r": [0, 1, 1], + "201-f": [0, 1, 1], + "201-n": [0, 1, 1], + "201-v": [0, 1, 1], + "201-a": [0, 1, 1], + "201-w": [0, 1, 1], + "201-o": [0, 1, 1], + "203": [0, 1, 1], + "206": [0, 1, 1], + "207": [0, 1, 1], + "211": [0, 1, 1], + "212-mega": [1, 2, 1], + "212": [1, 1, 1], + "213": [0, 1, 1], + "215": [0, 1, 1], + "216": [1, 1, 1], + "217": [1, 1, 1], + "222": [0, 1, 1], + "226": [0, 1, 1], + "227": [0, 1, 1], + "228": [0, 1, 1], + "229": [0, 1, 1], + "229-mega": [0, 1, 1], + "230": [0, 1, 1], + "231": [0, 1, 1], + "232": [0, 1, 1], + "233": [0, 1, 1], + "235": [0, 1, 1], + "239": [1, 1, 2], + "240": [0, 1, 1], + "242": [1, 1, 1], + "243": [0, 1, 1], + "244": [0, 2, 2], + "245": [0, 1, 1], + "246": [0, 1, 1], + "247": [0, 1, 1], + "248": [0, 1, 1], + "248-mega": [0, 1, 1], + "249": [0, 1, 1], + "250": [0, 1, 1], + "251": [0, 1, 1], + "255": [0, 1, 1], + "256": [0, 1, 1], + "257": [0, 1, 1], + "257-mega": [0, 1, 1], + "261": [0, 1, 1], + "262": [0, 1, 1], + "263": [0, 1, 1], + "264": [0, 1, 1], + "276": [0, 1, 1], + "277": [0, 1, 1], + "278": [1, 1, 1], + "279": [1, 1, 1], + "280": [0, 1, 1], + "281": [0, 1, 1], + "282-mega": [0, 1, 1], + "282": [0, 1, 1], + "285": [0, 1, 1], + "286": [0, 1, 1], + "290": [1, 1, 1], + "291": [2, 2, 2], + "292": [2, 2, 2], + "298": [0, 1, 1], + "300": [1, 1, 1], + "301": [1, 1, 1], + "302": [0, 1, 1], + "302-mega": [0, 1, 1], + "303-mega": [1, 1, 1], + "303": [1, 1, 1], + "304": [1, 1, 1], + "305": [1, 1, 1], + "306-mega": [1, 1, 1], + "306": [1, 1, 1], + "307": [0, 1, 1], + "308-mega": [0, 1, 1], + "308": [0, 1, 1], + "309": [0, 1, 1], + "310-mega": [0, 1, 1], + "310": [0, 1, 1], + "311": [1, 1, 1], + "312": [0, 1, 1], + "315": [0, 1, 1], + "320": [0, 1, 1], + "321": [0, 1, 1], + "327": [0, 1, 1], + "328": [0, 1, 1], + "329": [0, 1, 1], + "330": [0, 1, 1], + "333": [0, 1, 1], + "334-mega": [0, 1, 1], + "334": [0, 1, 1], + "335": [0, 2, 2], + "336": [0, 1, 1], + "337": [0, 1, 1], + "338": [0, 1, 1], + "339": [0, 2, 1], + "340": [0, 1, 2], + "341": [0, 1, 1], + "342": [0, 2, 2], + "351-rainy": [1, 1, 1], + "351-snowy": [1, 1, 1], + "351-sunny": [1, 1, 2], + "351": [0, 1, 1], + "352": [1, 1, 1], + "353": [0, 1, 1], + "354": [0, 1, 1], + "354-mega": [0, 1, 1], + "357": [0, 1, 1], + "358": [1, 1, 1], + "359": [0, 1, 1], + "359-mega": [0, 1, 1], + "361": [0, 1, 1], + "362": [0, 1, 1], + "362-mega": [0, 1, 1], + "369": [0, 2, 2], + "370": [0, 2, 2], + "371": [0, 1, 1], + "372": [0, 1, 1], + "373-mega": [0, 1, 1], + "373": [0, 1, 1], + "374": [0, 1, 1], + "375": [0, 1, 1], + "376-mega": [0, 1, 1], + "376": [0, 1, 1], + "377": [0, 1, 1], + "378": [1, 1, 1], + "379": [0, 1, 1], + "380-mega": [0, 1, 1], + "380": [0, 1, 1], + "381-mega": [0, 1, 1], + "381": [0, 1, 1], + "382-primal": [0, 1, 1], + "382": [0, 1, 1], + "383-primal": [0, 1, 1], + "383": [0, 1, 1], + "384-mega": [0, 1, 1], + "384": [0, 1, 1], + "385": [1, 1, 1], + "387": [0, 2, 1], + "388": [0, 1, 1], + "389": [0, 1, 1], + "390": [0, 1, 1], + "391": [0, 1, 1], + "392": [0, 1, 1], + "393": [0, 1, 1], + "394": [0, 1, 1], + "395": [0, 1, 1], + "399": [0, 2, 1], + "400": [0, 1, 1], + "401": [0, 1, 1], + "402": [0, 1, 1], + "406": [0, 1, 1], + "407": [0, 1, 1], + "412-sandy": [2, 2, 2], + "412-plant": [1, 1, 1], + "412-trash": [1, 1, 1], + "413-plant": [1, 1, 1], + "413-trash": [1, 1, 1], + "413-sandy": [1, 1, 1], + "414": [0, 1, 1], + "418": [0, 1, 1], + "419": [0, 1, 1], + "422-west": [1, 1, 1], + "422-east": [1, 1, 1], + "423-west": [1, 1, 1], + "423-east": [1, 1, 1], + "424": [0, 1, 1], + "425": [0, 1, 1], + "426": [0, 1, 1], + "427": [0, 1, 1], + "428-mega": [0, 1, 1], + "428": [0, 1, 1], + "429": [1, 1, 1], + "430": [0, 1, 1], + "433": [1, 1, 1], + "436": [0, 1, 1], + "437": [0, 1, 1], + "438": [0, 1, 1], + "440": [1, 1, 1], + "441": [0, 1, 2], + "442": [0, 1, 1], + "443": [1, 1, 1], + "444": [1, 1, 1], + "445-mega": [1, 1, 1], + "445": [1, 1, 1], + "447": [1, 1, 1], + "448-mega": [1, 1, 1], + "448": [1, 1, 1], + "453": [0, 1, 1], + "454": [0, 1, 1], + "455": [0, 1, 1], + "456": [0, 1, 1], + "457": [0, 2, 1], + "458": [0, 2, 2], + "461": [0, 1, 1], + "462": [0, 1, 1], + "464": [0, 1, 1], + "465": [0, 1, 1], + "466": [2, 1, 1], + "467": [0, 1, 1], + "468": [1, 1, 1], + "469": [0, 1, 1], + "470": [2, 2, 1], + "471": [1, 1, 1], + "472": [0, 1, 1], + "474": [0, 1, 1], + "475-mega": [0, 2, 2], + "475": [0, 1, 1], + "478": [0, 2, 1], + "479-heat": [0, 1, 1], + "479-wash": [0, 1, 1], + "479-mow": [0, 1, 1], + "479-frost": [0, 1, 1], + "479": [0, 1, 1], + "479-fan": [0, 1, 1], + "480": [1, 1, 1], + "481": [1, 1, 1], + "482": [1, 1, 1], + "485": [0, 1, 1], "486": [0, 1 , 1 + ] ,"487-altered": [0, 1, 1], + "487-origin": [0, 1, 1], + "488": [0, 1, 1], + "489": [1, 1, 1], + "490": [1, 1, 1], + "491": [0, 1, 1], + "492-land": [0, 1, 1], + "492-sky": [0, 1, 1], + "494": [0, 1, 1], + "495": [0, 1, 1], + "496": [0, 1, 1], + "497": [0, 1, 1], + "501": [0, 1, 1], + "502": [0, 1, 1], + "503": [0, 1, 1], + "517": [0, 1, 1], + "518": [0, 1, 1], + "524": [0, 1, 1], + "525": [0, 1, 1], + "526": [0, 1, 1], + "527": [0, 1, 1], + "528": [0, 1, 1], + "529": [0, 2, 2], + "530": [0, 1, 2], + "531": [0, 1, 1], + "531-mega": [0, 1, 1], + "532": [0, 1, 1], + "533": [0, 1, 1], + "534": [0, 1, 1], + "538": [0, 1, 1], + "539": [0, 2, 2], + "540": [0, 1, 1], + "541": [0, 1, 1], + "542": [0, 1, 1], + "543": [0, 1, 1], + "544": [0, 1, 1], + "545": [0, 1, 1], + "546": [0, 1, 1], + "547": [0, 1, 1], + "548": [1, 1, 1], + "549": [0, 1, 1], + "551": [0, 1, 1], + "552": [0, 1, 1], + "553": [0, 1, 1], + "556": [0, 1, 1], + "559": [1, 1, 1], + "560": [1, 1, 1], + "562": [0, 1, 1], + "563": [0, 1, 1], + "568": [0, 1, 1], + "569-gigantamax": [0, 1, 1], + "569": [0, 1, 1], + "570": [0, 1, 1], + "571": [0, 1, 1], + "572": [0, 1, 1], + "577": [1, 1, 1], + "578": [1, 1, 1], + "579": [1, 1, 1], + "585-autumn": [2, 0, 0], + "585-spring": [2, 0, 0], + "585-summer": [1, 0, 0], + "585-winter": [2, 0, 0], + "586-autumn": [1, 0, 0], + "586-spring": [1, 0, 0], + "586-summer": [1, 0, 0], + "586-winter": [1, 0, 0], + "587": [0, 1, 1], + "588": [0, 1, 1], + "589": [0, 1, 1], + "590": [0, 1, 1], + "591": [0, 1, 1], + "592": [0, 1, 2], + "593": [0, 1, 1], + "594": [0, 1, 2], + "595": [0, 1, 1], + "596": [0, 1, 1], + "602": [0, 1, 1], + "603": [0, 1, 1], + "604": [0, 1, 1], + "605": [1, 1, 1], + "606": [1, 1, 1], + "607": [0, 1, 1], + "608": [0, 1, 1], + "609": [0, 1, 1], + "610": [0, 1, 1], + "611": [0, 1, 1], + "612": [0, 1, 1], + "616": [0, 1, 1], + "617": [0, 1, 1], + "618": [0, 2, 2], + "619": [0, 1, 1], + "620": [0, 1, 1], + "621": [0, 1, 1], + "622": [0, 1, 1], + "623": [0, 1, 1], + "631": [0, 2, 2], + "632": [0, 1, 1], + "633": [0, 1, 1], + "634": [0, 1, 1], + "635": [0, 1, 1], + "636": [0, 1, 1], + "637": [0, 1, 1], + "640": [0, 1, 1], + "641-incarnate": [0, 0, 0], + "641-therian": [0, 0, 0], + "642-incarnate": [0, 0, 0], + "642-therian": [0, 0, 0], + "645-incarnate": [0, 0, 0], + "645-therian": [0, 0, 0], + "647-resolute": [0, 1, 1], + "647-ordinary": [0, 1, 1], + "648-aria": [0, 1, 1], + "648-pirouette": [0, 1, 1], + "649-burn": [0, 1, 1], + "649-chill": [0, 1, 1], + "649-douse": [0, 1, 1], + "649-shock": [0, 1, 1], + "649": [0, 1, 1], + "653": [0, 1, 1], + "654": [0, 1, 1], + "655": [0, 1, 1], + "656": [0, 1, 1], + "657": [0, 1, 1], + "658": [0, 1, 1], + "658-ash": [0, 1, 1], + "664": [0, 1, 1], + "665": [0, 1, 1], + "666-archipelago": [0, 1, 1], + "666-continental": [0, 1, 1], + "666-elegant": [0, 1, 1], + "666-fancy": [0, 2, 2], + "666-garden": [0, 1, 1], + "666-high-plains": [0, 1, 1], + "666-icy-snow": [0, 1, 1], + "666-jungle": [0, 1, 1], + "666-marine": [0, 1, 1], + "666-meadow": [0, 1, 1], + "666-modern": [0, 1, 1], + "666-monsoon": [0, 1, 1], + "666-ocean": [0, 1, 1], + "666-poke-ball": [0, 1, 1], + "666-polar": [0, 1, 1], + "666-river": [0, 2, 1], + "666-sandstorm": [0, 1, 1], + "666-savanna": [0, 1, 1], + "666-sun": [0, 1, 1], + "666-tundra": [0, 1, 1], + "669-red": [0, 1, 1], + "669-blue": [0, 1, 1], + "669-white": [0, 1, 1], + "669-yellow": [0, 1, 1], + "669-orange": [0, 1, 1], + "670-white": [0, 1, 1], + "670-blue": [0, 1, 1], + "670-orange": [0, 1, 1], + "670-red": [0, 1, 1], + "670-yellow": [0, 1, 1], + "671-red": [0, 1, 1], + "671-blue": [0, 1, 1], + "671-yellow": [0, 1, 1], + "671-white": [0, 1, 1], + "671-orange": [0, 1, 1], + "672": [0, 1, 1], + "673": [0, 1, 1], + "676": [0, 1, 1], + "676-dandy": [0, 1, 1], + "676-debutante": [0, 1, 1], + "676-diamond": [0, 1, 1], + "676-heart": [0, 1, 1], + "676-kabuki": [0, 1, 1], + "676-la-reine": [0, 1, 1], + "676-matron": [0, 1, 1], + "676-pharaoh": [0, 1, 1], + "676-star": [0, 1, 1], + "677": [0, 1, 1], + "678-female": [0, 1, 1], + "678": [0, 1, 1], + "682": [0, 1, 1], + "683": [0, 1, 1], + "684": [0, 1, 1], + "685": [0, 1, 1], + "688": [0, 1, 1], + "689": [0, 1, 1], + "690": [0, 1, 1], + "691": [0, 1, 1], + "696": [0, 1, 1], + "697": [0, 1, 1], + "698": [0, 1, 1], + "699": [0, 1, 1], + "700": [0, 1, 1], + "702": [0, 1, 1], + "703": [0, 1, 1], + "704": [0, 1, 1], + "705": [0, 1, 1], + "706": [0, 1, 1], + "708": [0, 1, 1], + "709": [0, 1, 1], + "710": [0, 1, 1], + "711": [1, 1, 1], + "712": [0, 1, 1], + "713": [0, 1, 1], + "714": [0, 1, 1], + "715": [0, 2, 2], + "716-active": [0, 1, 1], + "716-neutral": [0, 1, 1], + "717": [0, 1, 1], + "720-unbound": [1, 1, 1], + "720": [1, 1, 1], + "728": [0, 1, 1], + "729": [0, 1, 1], + "730": [0, 1, 1], + "734": [0, 1, 1], + "735": [0, 1, 1], + "742": [0, 2, 2], + "743": [0, 2, 2], + "747": [0, 1, 1], + "748": [0, 1, 1], + "751": [0, 1, 1], + "752": [0, 1, 1], + "753": [0, 1, 1], + "754": [0, 2, 2], + "755": [0, 1, 1], + "756": [0, 1, 1], + "761": [0, 1, 1], + "762": [0, 1, 1], + "763": [0, 1, 1], + "767": [0, 1, 1], + "768": [0, 1, 1], + "771": [0, 1, 1], + "772": [0, 1, 1], + "773-fighting": [0, 1, 1], + "773-psychic": [0, 1, 1], + "773-poison": [0, 1, 1], + "773-ground": [0, 1, 1], + "773-ghost": [0, 1, 1], + "773-steel": [0, 1, 1], + "773-rock": [0, 1, 1], + "773-grass": [0, 1, 1], + "773-dragon": [0, 1, 1], + "773-bug": [0, 1, 1], + "773-ice": [0, 1, 1], + "773-dark": [0, 1, 1], + "773": [0, 1, 1], + "773-fairy": [0, 1, 1], + "773-water": [0, 1, 1], + "773-electric": [0, 1, 1], + "773-flying": [0, 1, 1], + "773-fire": [0, 1, 1], + "776": [0, 1, 1], + "777": [0, 1, 1], + "778-busted": [0, 1, 1], + "778-disguised": [0, 1, 1], + "779": [0, 1, 1], + "789": [1, 1, 1], + "790": [0, 1, 1], + "791-radiant-sun": [0, 1, 1], + "791": [2, 1, 1], + "792-full-moon": [0, 1, 1], + "792": [0, 1, 1], + "793": [0, 1, 1], + "797": [0, 1, 1], + "798": [0, 1, 1], + "800-dawn-wings": [0, 1, 1], + "800-dusk-mane": [0, 1, 1], + "800-ultra": [0, 1, 1], + "800": [0, 1, 1], + "802": [1, 1, 1], + "803": [0, 1, 1], + "804": [0, 1, 1], + "807": [0, 1, 1], + "808": [0, 1, 1], + "809-gigantamax": [0, 1, 1], + "809": [0, 1, 1], + "816": [0, 1, 1], + "817": [0, 1, 1], + "818-gigantamax": [1, 1, 1], + "818": [0, 1, 1], + "821": [0, 1, 1], + "822": [0, 1, 1], + "823-gigantamax": [0, 2, 2], + "823": [0, 1, 1], + "829": [0, 1, 1], + "830": [0, 1, 1], + "835": [0, 1, 1], + "836": [0, 1, 1], + "850": [0, 1, 1], + "851-gigantamax": [0, 1, 1], + "851": [0, 1, 1], + "854": [0, 1, 1], + "855": [0, 1, 1], + "856": [0, 1, 1], + "857": [0, 2, 2], + "858-gigantamax": [0, 1, 1], + "858": [0, 1, 1], + "859": [0, 1, 1], + "860": [0, 1, 1], + "861-gigantamax": [0, 1, 1], + "861": [0, 1, 1], + "862": [0, 1, 1], + "863": [0, 1, 1], + "864": [0, 1, 1], + "867": [0, 1, 1], + "872": [1, 1, 1], + "873": [1, 1, 1], + "876-female": [0, 1, 1], + "876": [0, 1, 1], + "877-hangry": [1, 1, 1], + "877": [1, 1, 1], + "880": [0, 1, 1], + "881": [0, 2, 2], + "882": [0, 1, 1], + "883": [0, 1, 1], + "884-gigantamax": [0, 1, 1], + "884": [0, 1, 1], + "885": [1, 1, 1], + "886": [1, 1, 1], + "887": [1, 1, 1], + "888": [0, 1, 1], + "888-crowned": [0, 1, 1], + "889": [0, 1, 1], + "889-crowned": [0, 1, 1], + "890-eternamax": [0, 1, 1], + "890": [0, 1, 1], + "891": [1, 1, 1], + "892-gigantamax-rapid": [1, 2, 2], + "892-rapid-strike": [1, 1, 1], + "892": [1, 1, 1], + "892-gigantamax-single": [1, 2, 2], + "894": [0, 1, 1], + "895": [0, 1, 1], + "896": [1, 1, 1], + "897": [1, 1, 1], + "898": [1, 1, 1], + "898-ice": [1, 1, 1], + "898-shadow": [1, 1, 1], + "900": [0, 1, 1], + "901": [0, 1, 1], + "903": [0, 1, 1], + "909": [0, 1, 1], + "910": [0, 2, 2], + "911": [0, 1, 1], + "912": [0, 1, 1], + "913": [0, 1, 1], + "914": [0, 1, 1], + "919": [1, 1, 1], + "920": [1, 1, 1], + "924": [1, 1, 1], + "925-four": [1, 1, 1], + "925-three": [1, 1, 1], + "932": [0, 1, 1], + "933": [0, 1, 1], + "934": [0, 1, 1], + "935": [2, 2, 2], + "936": [1, 1, 1], + "937": [1, 1, 1], + "940": [0, 1, 1], + "941": [0, 1, 1], + "944": [0, 1, 1], + "945": [0, 1, 1], + "948": [0, 1, 1], + "949": [0, 1, 1], + "951": [0, 1, 1], + "952": [0, 1, 1], + "953": [0, 1, 1], + "954": [0, 1, 1], + "957": [1, 1, 1], + "958": [1, 1, 1], + "959": [1, 1, 1], + "962": [1, 1, 1], + "967": [0, 1, 1], + "968": [0, 1, 1], + "969": [0, 1, 1], + "970": [0, 1, 1], + "973": [1, 1, 1], + "974": [0, 1, 1], + "975": [0, 1, 1], + "978-curly": [0, 2, 2], + "978-droopy": [0, 2, 2], + "978-stretchy": [0, 1, 1], + "979": [1, 1, 1], + "981": [0, 1, 1], + "982": [0, 1, 2], + "982-three-segment": [0, 1, 2], + "987": [1, 1, 1], + "988": [0, 1, 1], + "993": [0, 1, 1], + "994": [0, 1, 1], + "995": [0, 1, 1], + "996": [0, 1, 1], + "997": [0, 1, 1], + "998": [0, 1, 1], + "999": [1, 1, 1], + "1000": [1, 1, 1], + "1001": [0, 1, 1], + "1003": [0, 1, 1], + "1004": [0, 1, 1], + "1006": [0, 2, 1], + "1007-apex-build": [0, 2, 2], + "1008-ultimate-mode": [1, 1, 1], + "1010": [0, 1, 1], + "1012-counterfeit": [0, 1, 1], + "1013-unremarkable": [0, 1, 1], + "1018": [0, 1, 1], + "1022": [0, 2, 2], + "1023": [0, 1, 1], + "2026": [0, 1, 1], + "2027": [0, 1, 1], + "2028": [0, 1, 1], + "2052": [0, 1, 1], + "2053": [0, 1, 1], + "2103": [0, 1, 1], + "2670": [0, 1, 1], + "4052": [0, 1, 1], + "4077": [0, 1, 1], + "4078": [0, 1, 1], + "4079": [0, 1, 1], + "4080": [2, 1, 1], + "4144": [0, 1, 1], + "4145": [0, 1, 1], + "4146": [0, 1, 1], + "4199": [2, 1, 1], + "4222": [0, 1, 1], + "4263": [0, 1, 1], + "4264": [0, 1, 1], + "4562": [0, 1, 1], + "6100": [0, 1, 1], + "6101": [0, 1, 1], + "6215": [0, 1, 1], + "6503": [0, 1, 1], + "6549": [0, 1, 1], + "6570": [0, 1, 1], + "6571": [0, 1, 1], + "6705": [0, 1, 1], + "6706": [0, 1, 1], + "6713": [0, 1, 1], + "8901": [1, 1, 1], "female": { - "3": [ - 0, - 1, - 1 - ], - "19": [ - 0, - 1, - 1 - ], - "20": [ - 0, - 1, - 1 - ], - "41": [ - 0, - 1, - 1 - ], - "42": [ - 0, - 1, - 1 - ], - "44": [ - 0, - 1, - 1 - ], - "45": [ - 0, - 1, - 1 - ], - "84": [ - 1, - 1, - 1 - ], - "85": [ - 1, - 1, - 1 - ], - "111": [ - 0, - 1, - 1 - ], - "112": [ - 0, - 1, - 1 - ], - "118": [ - 0, - 1, - 1 - ], - "119": [ - 0, - 1, - 1 - ], - "123": [ - 1, - 1, - 1 - ], - "129": [ - 0, - 1, - 1 - ], - "130": [ - 0, - 1, - 1 - ], - "178": [ - 0, - 2, - 2 - ], - "185": [ - 0, - 1, - 1 - ], - "190": [ - 0, - 1, - 1 - ], - "203": [ - 0, - 1, - 1 - ], - "207": [ - 0, - 1, - 1 - ], - "215": [ - 0, - 1, - 1 - ], - "217": [ - 1, - 1, - 1 - ], - "229": [ - 0, - 1, - 1 - ], - "232": [ - 0, - 1, - 1 - ], - "255": [ - 0, - 1, - 1 - ], - "256": [ - 0, - 1, - 1 - ], - "257": [ - 0, - 1, - 1 - ], - "307": [ - 0, - 1, - 1 - ], - "308": [ - 0, - 1, - 1 - ], - "315": [ - 0, - 1, - 1 - ], - "369": [ - 0, - 1, - 1 - ], - "399": [ - 0, - 2, - 1 - ], - "400": [ - 0, - 1, - 1 - ], - "401": [ - 0, - 1, - 1 - ], - "402": [ - 0, - 1, - 1 - ], - "407": [ - 0, - 1, - 1 - ], - "418": [ - 0, - 2, - 2 - ], - "419": [ - 0, - 1, - 1 - ], - "424": [ - 0, - 1, - 1 - ], - "443": [ - 1, - 1, - 1 - ], - "444": [ - 1, - 1, - 1 - ], - "445": [ - 1, - 1, - 1 - ], - "453": [ - 0, - 1, - 1 - ], - "454": [ - 0, - 1, - 1 - ], - "456": [ - 0, - 1, - 1 - ], - "457": [ - 0, - 1, - 1 - ], - "461": [ - 0, - 1, - 1 - ], - "464": [ - 0, - 1, - 1 - ], - "465": [ - 0, - 1, - 1 - ], - "592": [ - 1, - 1, - 1 - ], - "593": [ - 1, - 1, - 1 - ], - "6215": [ - 0, - 1, - 1 - ] + "3": [0,1, 1], + "19": [0, 1, 1], + "20": [0, 1, 1], + "25": [0, 1, 1], + "25-beauty-cosplay": [0, 1, 1], + "25-cool-cosplay": [0, 1, 1], + "25-cosplay": [0, 1, 1], + "25-cute-cosplay": [0, 1, 1], + "25-partner": [0, 1, 1], + "25-smart-cosplay": [0, 1, 1], + "25-tough-cosplay": [0, 1, 1], + "26": [0, 1, 1], + "41": [0, 1, 1], + "42": [0, 1, 1], + "44": [0, 1, 1], + "45": [0, 1, 1], + "84": [1, 1, 1], + "85": [1, 1, 1], + "111": [0, 1, 1], + "112": [0, 1, 1], + "118": [0, 1, 1], + "119": [0, 1, 1], + "123": [1, 1, 1], + "129": [0, 1, 1], + "130": [0, 1, 1], + "154": [0, 1, 1], + "178": [0, 2, 2], + "185": [0, 1, 1], + "190": [0, 1, 1], + "194": [0, 1, 1], + "195": [0, 1, 1], + "198": [0, 1, 1], + "203": [0, 1, 1], + "207": [0, 1, 1], + "215": [0, 1, 1], + "217": [1, 1, 1], + "229": [0, 1, 1], + "232": [0, 1, 1], + "255": [0, 1, 1], + "256": [0, 1, 1], + "257": [0, 1, 1], + "307": [0, 1, 1], + "308": [0, 1, 1], + "315": [0, 1, 1], + "369": [0, 1, 1], + "399": [0, 2, 1], + "400": [0, 1, 1], + "401": [0, 1, 1], + "402": [0, 1, 1], + "407": [0, 1, 1], + "418": [0, 2, 2], + "419": [0, 1, 1], + "424": [0, 1, 1], + "443": [1, 1, 1], + "444": [1, 1, 1], + "445": [1, 1, 1], + "453": [0, 1, 1], + "454": [0, 1, 1], + "456": [0, 1, 1], + "457": [0, 1, 1], + "461": [0, 1, 1], + "464": [0, 1, 1], + "465": [0, 1, 1], + "592": [1, 1, 1], + "593": [1, 1, 1], + "6215": [0, 1, 1] } }, "exp": { - "3-mega": [ - 0, - 2, - 2 - ], - "6-mega-x": [ - 0, - 2, - 2 - ], - "6-mega-y": [ - 0, - 2, - 2 - ], - "80-mega": [ - 0, - 1, - 1 - ], - "94-mega": [ - 2, - 2, - 2 - ], - "127-mega": [ - 0, - 1, - 1 - ], - "130-mega": [ - 0, - 1, - 1 - ], - "142-mega": [ - 0, - 1, - 1 - ], - "150-mega-x": [ - 0, - 1, - 1 - ], - "150-mega-y": [ - 0, - 1, - 1 - ], - "181-mega": [ - 0, - 1, - 2 - ], - "212-mega": [ - 1, - 1, - 2 - ], - "229-mega": [ - 0, - 1, - 1 - ], - "248-mega": [ - 0, - 1, - 1 - ], - "257-mega": [ - 0, - 1, - 1 - ], - "282-mega": [ - 0, - 2, - 2 - ], - "302-mega": [ - 0, - 1, - 1 - ], - "303-mega": [ - 0, - 1, - 1 - ], - "306-mega": [ - 1, - 1, - 1 - ], - "308-mega": [ - 0, - 1, - 1 - ], - "310-mega": [ - 0, - 1, - 1 - ], - "334-mega": [ - 0, - 2, - 1 - ], - "354-mega": [ - 0, - 1, - 1 - ], - "362-mega": [ - 0, - 1, - 1 - ], - "373-mega": [ - 0, - 1, - 1 - ], - "376-mega": [ - 0, - 1, - 1 - ], - "380-mega": [ - 0, - 1, - 1 - ], - "381-mega": [ - 0, - 1, - 1 - ], - "382-primal": [ - 0, - 1, - 1 - ], - "383-primal": [ - 0, - 1, - 1 - ], - "384-mega": [ - 0, - 2, - 1 - ], - "428-mega": [ - 0, - 1, - 1 - ], - "445-mega": [ - 1, - 1, - 1 - ], - "448-mega": [ - 1, - 1, - 1 - ], - "475-mega": [ - 0, - 2, - 2 - ], - "531-mega": [ - 0, - 1, - 1 - ], - "653": [ - 0, - 1, - 1 - ], - "654": [ - 0, - 1, - 1 - ], - "655": [ - 0, - 1, - 1 - ], - "664": [ - 0, - 1, - 1 - ], - "665": [ - 0, - 1, - 1 - ], - "666-archipelago": [ - 0, - 1, - 1 - ], - "666-continental": [ - 0, - 1, - 1 - ], - "666-elegant": [ - 0, - 1, - 1 - ], - "666-fancy": [ - 0, - 2, - 2 - ], - "666-garden": [ - 0, - 1, - 1 - ], - "666-high-plains": [ - 0, - 1, - 1 - ], - "666-icy-snow": [ - 0, - 1, - 1 - ], - "666-jungle": [ - 0, - 1, - 1 - ], - "666-marine": [ - 0, - 1, - 1 - ], - "666-meadow": [ - 0, - 2, - 2 - ], - "666-modern": [ - 0, - 1, - 1 - ], - "666-monsoon": [ - 0, - 1, - 1 - ], - "666-ocean": [ - 0, - 1, - 1 - ], - "666-poke-ball": [ - 0, - 1, - 2 - ], - "666-polar": [ - 0, - 1, - 1 - ], - "666-river": [ - 0, - 2, - 1 - ], - "666-sandstorm": [ - 0, - 1, - 1 - ], - "666-savanna": [ - 0, - 1, - 1 - ], - "666-sun": [ - 0, - 1, - 1 - ], - "666-tundra": [ - 0, - 1, - 1 - ], - "669-red": [ - 0, - 2, - 2 - ], - "669-blue": [ - 0, - 1, - 1 - ], - "669-white": [ - 0, - 1, - 1 - ], - "669-yellow": [ - 0, - 1, - 1 - ], - "669-orange": [ - 0, - 2, - 2 - ], - "670-white": [ - 0, - 1, - 1 - ], - "670-blue": [ - 0, - 1, - 1 - ], - "670-orange": [ - 0, - 1, - 1 - ], - "670-red": [ - 0, - 1, - 1 - ], - "670-yellow": [ - 0, - 1, - 1 - ], - "671-red": [ - 0, - 1, - 2 - ], - "671-blue": [ - 0, - 1, - 2 - ], - "671-yellow": [ - 0, - 1, - 1 - ], - "671-white": [ - 0, - 1, - 2 - ], - "671-orange": [ - 0, - 1, - 2 - ], - "672": [ - 0, - 1, - 1 - ], - "673": [ - 0, - 1, - 1 - ], - "677": [ - 0, - 1, - 1 - ], - "678-female": [ - 0, - 1, - 1 - ], - "678": [ - 0, - 1, - 1 - ], - "690": [ - 0, - 1, - 1 - ], - "691": [ - 0, - 1, - 1 - ], - "696": [ - 0, - 1, - 1 - ], - "697": [ - 0, - 1, - 1 - ], - "698": [ - 0, - 1, - 1 - ], - "699": [ - 0, - 1, - 1 - ], - "700": [ - 0, - 1, - 1 - ], - "702": [ - 0, - 1, - 1 - ], - "703": [ - 0, - 1, - 1 - ], - "704": [ - 0, - 1, - 1 - ], - "705": [ - 0, - 1, - 1 - ], - "706": [ - 0, - 1, - 1 - ], - "708": [ - 0, - 1, - 1 - ], - "709": [ - 0, - 1, - 1 - ], - "710": [ - 0, - 1, - 1 - ], - "711": [ - 1, - 1, - 1 - ], - "712": [ - 0, - 1, - 1 - ], - "713": [ - 0, - 1, - 1 - ], - "714": [ - 0, - 1, - 1 - ], - "715": [ - 0, - 2, - 1 - ], - "716-active": [ - 0, - 1, - 1 - ], - "716-neutral": [ - 0, - 1, - 1 - ], - "717": [ - 0, - 2, - 2 - ], - "720-unbound": [ - 1, - 1, - 1 - ], - "720": [ - 1, - 1, - 1 - ], - "728": [ - 0, - 1, - 1 - ], - "729": [ - 0, - 2, - 2 - ], - "730": [ - 0, - 2, - 1 - ], - "734": [ - 0, - 1, - 1 - ], - "735": [ - 0, - 1, - 1 - ], - "742": [ - 0, - 2, - 2 - ], - "743": [ - 0, - 2, - 2 - ], - "747": [ - 0, - 2, - 2 - ], - "748": [ - 0, - 1, - 1 - ], - "751": [ - 0, - 1, - 1 - ], - "752": [ - 0, - 1, - 1 - ], - "753": [ - 0, - 1, - 1 - ], - "754": [ - 0, - 2, - 2 - ], - "755": [ - 0, - 1, - 1 - ], - "756": [ - 0, - 1, - 1 - ], - "761": [ - 0, - 1, - 1 - ], - "762": [ - 0, - 1, - 1 - ], - "763": [ - 0, - 1, - 1 - ], - "767": [ - 0, - 1, - 1 - ], - "768": [ - 0, - 1, - 1 - ], - "770": [ - 0, - 0, - 0 - ], - "771": [ - 0, - 2, - 2 - ], - "772": [ - 0, - 1, - 1 - ], - "773-fighting": [ - 0, - 1, - 1 - ], - "773-psychic": [ - 0, - 1, - 1 - ], - "773-poison": [ - 0, - 1, - 1 - ], - "773-ground": [ - 0, - 1, - 1 - ], - "773-ghost": [ - 0, - 1, - 1 - ], - "773-steel": [ - 0, - 1, - 1 - ], - "773-rock": [ - 0, - 1, - 1 - ], - "773-grass": [ - 0, - 1, - 1 - ], - "773-dragon": [ - 0, - 1, - 1 - ], - "773-bug": [ - 0, - 1, - 1 - ], - "773-ice": [ - 0, - 1, - 1 - ], - "773-dark": [ - 0, - 1, - 1 - ], - "773": [ - 0, - 1, - 1 - ], - "773-fairy": [ - 0, - 1, - 1 - ], - "773-water": [ - 0, - 1, - 1 - ], - "773-electric": [ - 0, - 1, - 1 - ], - "773-flying": [ - 0, - 1, - 1 - ], - "773-fire": [ - 0, - 1, - 1 - ], - "776": [ - 0, - 1, - 1 - ], - "777": [ - 0, - 1, - 1 - ], - "778-busted": [ - 0, - 1, - 1 - ], - "778-disguised": [ - 0, - 1, - 1 - ], - "779": [ - 0, - 1, - 1 - ], - "789": [ - 1, - 1, - 1 - ], - "790": [ - 0, - 1, - 1 - ], - "791": [ - 2, - 1, - 1 - ], - "792": [ - 0, - 1, - 1 - ], - "793": [ - 0, - 2, - 2 - ], - "797": [ - 0, - 1, - 1 - ], - "798": [ - 0, - 1, - 1 - ], - "800-dawn-wings": [ - 0, - 1, - 1 - ], - "800-dusk-mane": [ - 0, - 1, - 1 - ], - "800-ultra": [ - 0, - 1, - 1 - ], - "800": [ - 0, - 1, - 1 - ], - "802": [ - 1, - 1, - 1 - ], - "803": [ - 0, - 1, - 1 - ], - "804": [ - 0, - 1, - 1 - ], - "808": [ - 0, - 1, - 1 - ], - "809": [ - 0, - 1, - 1 - ], - "816": [ - 0, - 1, - 1 - ], - "817": [ - 0, - 1, - 1 - ], - "818": [ - 1, - 1, - 1 - ], - "821": [ - 0, - 2, - 2 - ], - "822": [ - 0, - 1, - 1 - ], - "823": [ - 0, - 1, - 1 - ], - "829": [ - 0, - 1, - 1 - ], - "830": [ - 0, - 1, - 1 - ], - "835": [ - 0, - 1, - 1 - ], - "836": [ - 0, - 2, - 2 - ], - "850": [ - 0, - 1, - 1 - ], - "851": [ - 0, - 1, - 1 - ], - "854": [ - 0, - 1, - 1 - ], - "855": [ - 0, - 1, - 1 - ], - "856": [ - 0, - 1, - 1 - ], - "857": [ - 0, - 2, - 2 - ], - "858": [ - 0, - 1, - 1 - ], - "859": [ - 0, - 1, - 1 - ], - "860": [ - 0, - 1, - 1 - ], - "861": [ - 0, - 1, - 1 - ], - "862": [ - 0, - 1, - 1 - ], - "863": [ - 0, - 1, - 1 - ], - "864": [ - 0, - 1, - 1 - ], - "867": [ - 0, - 1, - 1 - ], - "872": [ - 1, - 1, - 1 - ], - "873": [ - 1, - 1, - 1 - ], - "876-female": [ - 0, - 1, - 1 - ], - "876": [ - 0, - 1, - 1 - ], - "877-hangry": [ - 1, - 1, - 1 - ], - "877": [ - 1, - 1, - 1 - ], - "880": [ - 0, - 1, - 1 - ], - "881": [ - 0, - 1, - 1 - ], - "882": [ - 0, - 2, - 1 - ], - "883": [ - 0, - 1, - 1 - ], - "884": [ - 0, - 1, - 1 - ], - "885": [ - 1, - 1, - 1 - ], - "886": [ - 1, - 1, - 1 - ], - "887": [ - 1, - 1, - 1 - ], - "888": [ - 0, - 1, - 1 - ], - "888-crowned": [ - 0, - 1, - 1 - ], - "889": [ - 0, - 1, - 1 - ], - "889-crowned": [ - 0, - 1, - 1 - ], - "890": [ - 0, - 2, - 1 - ], - "890-eternamax": [ - 0, - 1, - 1 - ], - "891": [ - 1, - 1, - 1 - ], - "892-rapid-strike": [ - 1, - 1, - 1 - ], - "892": [ - 1, - 1, - 1 - ], - "896": [ - 1, - 1, - 1 - ], - "897": [ - 1, - 1, - 1 - ], - "898": [ - 1, - 1, - 1 - ], - "898-ice": [ - 1, - 1, - 1 - ], - "898-shadow": [ - 1, - 1, - 1 - ], - "900": [ - 0, - 1, - 1 - ], - "901": [ - 0, - 1, - 1 - ], - "903": [ - 0, - 1, - 1 - ], - "909": [ - 0, - 1, - 1 - ], - "910": [ - 0, - 2, - 2 - ], - "911": [ - 0, - 2, - 2 - ], - "912": [ - 0, - 1, - 2 - ], - "913": [ - 0, - 1, - 2 - ], - "914": [ - 0, - 2, - 1 - ], - "919": [ - 1, - 1, - 1 - ], - "920": [ - 1, - 1, - 1 - ], - "924": [ - 1, - 1, - 1 - ], - "925-four": [ - 1, - 2, - 2 - ], - "925-three": [ - 1, - 2, - 2 - ], - "932": [ - 0, - 2, - 2 - ], - "933": [ - 0, - 2, - 2 - ], - "934": [ - 0, - 1, - 1 - ], - "935": [ - 1, - 1, - 2 - ], - "936": [ - 2, - 2, - 2 - ], - "937": [ - 2, - 2, - 2 - ], - "940": [ - 0, - 1, - 1 - ], - "941": [ - 0, - 1, - 1 - ], - "948": [ - 0, - 1, - 1 - ], - "949": [ - 0, - 1, - 1 - ], - "951": [ - 0, - 1, - 1 - ], - "952": [ - 0, - 1, - 1 - ], - "953": [ - 0, - 1, - 1 - ], - "954": [ - 0, - 1, - 1 - ], - "957": [ - 2, - 2, - 2 - ], - "958": [ - 2, - 2, - 2 - ], - "959": [ - 2, - 2, - 2 - ], - "962": [ - 1, - 1, - 1 - ], - "967": [ - 0, - 1, - 1 - ], - "968": [ - 0, - 1, - 1 - ], - "969": [ - 0, - 1, - 1 - ], - "970": [ - 0, - 1, - 1 - ], - "973": [ - 1, - 1, - 1 - ], - "974": [ - 0, - 1, - 1 - ], - "975": [ - 0, - 1, - 1 - ], - "978-curly": [ - 0, - 2, - 2 - ], - "978-droopy": [ - 0, - 2, - 2 - ], - "978-stretchy": [ - 0, - 2, - 2 - ], - "979": [ - 2, - 2, - 2 - ], - "981": [ - 0, - 1, - 1 - ], - "982": [ - 0, - 1, - 1 - ], - "982-three-segment": [ - 0, - 1, - 1 - ], - "987": [ - 1, - 1, - 1 - ], - "988": [ - 0, - 1, - 2 - ], - "993": [ - 0, - 1, - 1 - ], - "994": [ - 0, - 1, - 2 - ], - "995": [ - 0, - 1, - 1 - ], - "996": [ - 0, - 1, - 1 - ], - "997": [ - 0, - 2, - 2 - ], - "998": [ - 0, - 2, - 2 - ], - "999": [ - 2, - 1, - 1 - ], - "1000": [ - 1, - 1, - 1 - ], - "1001": [ - 0, - 1, - 1 - ], - "1003": [ - 0, - 1, - 1 - ], - "1004": [ - 0, - 1, - 1 - ], - "1006": [ - 0, - 2, - 1 - ], - "1007-apex-build": [ - 0, - 2, - 2 - ], - "1008-ultimate-mode": [ - 1, - 1, - 1 - ], - "2027": [ - 0, - 1, - 1 - ], - "2028": [ - 0, - 1, - 1 - ], - "2052": [ - 0, - 1, - 1 - ], - "2053": [ - 0, - 1, - 0 - ], - "4052": [ - 0, - 1, - 1 - ], - "4077": [ - 0, - 1, - 1 - ], - "4078": [ - 0, - 1, - 1 - ], - "4079": [ - 0, - 1, - 1 - ], - "4080": [ - 2, - 1, - 1 - ], - "4144": [ - 0, - 1, - 1 - ], - "4145": [ - 0, - 1, - 1 - ], - "4146": [ - 0, - 1, - 1 - ], - "4199": [ - 2, - 1, - 1 - ], - "4222": [ - 0, - 1, - 1 - ], - "4263": [ - 0, - 1, - 1 - ], - "4264": [ - 0, - 1, - 1 - ], - "4562": [ - 0, - 1, - 1 - ], - "6100": [ - 0, - 1, - 1 - ], - "6101": [ - 0, - 1, - 1 - ], - "6215": [ - 0, - 1, - 1 - ], - "6549": [ - 0, - 1, - 1 - ], - "6570": [ - 0, - 1, - 1 - ], - "6571": [ - 0, - 1, - 1 - ], - "6705": [ - 0, - 1, - 1 - ], - "6706": [ - 0, - 1, - 1 - ], + "3-mega": [0, 2, 2], + "6-mega-x": [0, 2, 2], + "6-mega-y": [0, 2, 2], + "80-mega": [0, 1, 1], + "94-mega": [2, 2, 2], + "127-mega": [0, 1, 1], + "130-mega": [0, 1, 1], + "142-mega": [0, 1, 1], + "150-mega-x": [0, 1, 1], + "150-mega-y": [0, 1, 1], + "181-mega": [0, 1, 2], + "212-mega": [1, 1, 2], + "229-mega": [0, 1, 1], + "248-mega": [0, 1, 1], + "257-mega": [0, 1, 1], + "282-mega": [0, 2, 2], + "302-mega": [0, 1, 1], + "303-mega": [0, 1, 1], + "306-mega": [1, 1, 1], + "308-mega": [0, 1, 1], + "310-mega": [0, 1, 1], + "334-mega": [0, 2, 1], + "354-mega": [0, 1, 1], + "359-mega": [0, 1, 1], + "362-mega": [0, 1, 1], + "373-mega": [0, 1, 1], + "376-mega": [0, 1, 1], + "380-mega": [0, 1, 1], + "381-mega": [0, 1, 1], + "382-primal": [0, 1, 1], + "383-primal": [0, 1, 1], + "384-mega": [0, 2, 1], + "428-mega": [0, 1, 1], + "445-mega": [1, 1, 1], + "448-mega": [1, 1, 1], + "475-mega": [0, 2, 2], + "531-mega": [0, 1, 1], + "653": [0, 1, 1], + "654": [0, 1, 1], + "655": [0, 1, 1], + "656": [0, 1, 1], + "657": [0, 1, 1], + "658": [0, 1, 1], + "658-ash": [0, 1, 1], + "664": [0, 1, 1], + "665": [0, 1, 1], + "666-archipelago": [0, 1, 1], + "666-continental": [0, 1, 1], + "666-elegant": [0, 1, 1], + "666-fancy": [0, 2, 2], + "666-garden": [0, 1, 1], + "666-high-plains": [0, 1, 1], + "666-icy-snow": [0, 1, 1], + "666-jungle": [0, 1, 1], + "666-marine": [0, 1, 1], + "666-meadow": [0, 2, 2], + "666-modern": [0, 1, 1], + "666-monsoon": [0, 1, 1], + "666-ocean": [0, 1, 1], + "666-poke-ball": [0, 1, 2], + "666-polar": [0, 1, 1], + "666-river": [0, 2, 1], + "666-sandstorm": [0, 1, 1], + "666-savanna": [0, 1, 1], + "666-sun": [0, 1, 1], + "666-tundra": [0, 1, 1], + "669-red": [0, 2, 2], + "669-blue": [0, 1, 1], + "669-white": [0, 1, 1], + "669-yellow": [0, 1, 1], + "669-orange": [0, 2, 2], + "670-white": [0, 1, 1], + "670-blue": [0, 1, 1], + "670-orange": [0, 1, 1], + "670-red": [0, 1, 1], + "670-yellow": [0, 1, 1], + "671-red": [0, 1, 2], + "671-blue": [0, 1, 2], + "671-yellow": [0, 1, 1], + "671-white": [0, 1, 2], + "671-orange": [0, 1, 2], + "672": [0, 1, 1], + "673": [0, 1, 1], + "676": [0, 1, 1], + "677": [0, 1, 1], + "678-female": [0, 1, 1], + "678": [0, 1, 1], + "682": [0, 1, 1], + "683": [0, 1, 1], + "684": [0, 1, 1], + "685": [0, 1, 1], + "688": [0, 1, 1], + "689": [0, 1, 1], + "690": [0, 1, 1], + "691": [0, 1, 1], + "696": [0, 1, 1], + "697": [0, 1, 1], + "698": [0, 1, 1], + "699": [0, 1, 1], + "700": [0, 1, 1], + "702": [0, 1, 1], + "703": [0, 1, 1], + "704": [0, 1, 1], + "705": [0, 1, 1], + "706": [0, 1, 1], + "708": [0, 1, 1], + "709": [0, 1, 1], + "710": [0, 1, 1], + "711": [1, 1, 1], + "712": [0, 1, 1], + "713": [0, 1, 1], + "714": [0, 1, 1], + "715": [0, 2, 1], + "716-active": [0, 1, 1], + "716-neutral": [0, 1, 1], + "717": [0, 2, 2], + "720-unbound": [1, 1, 1], + "720": [1, 1, 1], + "728": [0, 1, 1], + "729": [0, 2, 2], + "730": [0, 2, 1], + "734": [0, 1, 1], + "735": [0, 1, 1], + "742": [0, 2, 2], + "743": [0, 2, 2], + "747": [0, 2, 2], + "748": [0, 1, 1], + "751": [0, 1, 1], + "752": [0, 1, 1], + "753": [0, 1, 1], + "754": [0, 2, 2], + "755": [0, 1, 1], + "756": [0, 1, 1], + "761": [0, 1, 1], + "762": [0, 1, 1], + "763": [0, 1, 1], + "767": [0, 1, 1], + "768": [0, 1, 1], + "770": [0, 0, 0], + "771": [0, 2, 2], + "772": [0, 1, 1], + "773-fighting": [0, 1, 1], + "773-psychic": [0, 1, 1], + "773-poison": [0, 1, 1], + "773-ground": [0, 1, 1], + "773-ghost": [0, 1, 1], + "773-steel": [0, 1, 1], + "773-rock": [0, 1, 1], + "773-grass": [0, 1, 1], + "773-dragon": [0, 1, 1], + "773-bug": [0, 1, 1], + "773-ice": [0, 1, 1], + "773-dark": [0, 1, 1], + "773": [0, 1, 1], + "773-fairy": [0, 1, 1], + "773-water": [0, 1, 1], + "773-electric": [0, 1, 1], + "773-flying": [0, 1, 1], + "773-fire": [0, 1, 1], + "776": [0, 1, 1], + "777": [0, 1, 1], + "778-busted": [0, 1, 1], + "778-disguised": [0, 1, 1], + "779": [0, 1, 1], + "789": [1, 1, 1], + "790": [0, 1, 1], + "791": [2, 1, 1], + "792": [0, 1, 1], + "793": [0, 2, 2], + "797": [0, 1, 1], + "798": [0, 1, 1], + "800-dawn-wings": [0, 1, 1], + "800-dusk-mane": [0, 1, 1], + "800-ultra": [0, 1, 1], + "800": [0, 1, 1], + "802": [1, 1, 1], + "803": [0, 1, 1], + "804": [0, 1, 1], + "807": [0, 1, 1], + "808": [0, 1, 1], + "809": [0, 1, 1], + "816": [0, 1, 1], + "817": [0, 1, 1], + "818": [1, 1, 1], + "821": [0, 2, 2], + "822": [0, 1, 1], + "823": [0, 1, 1], + "829": [0, 1, 1], + "830": [0, 1, 1], + "835": [0, 1, 1], + "836": [0, 2, 2], + "850": [0, 1, 1], + "851": [0, 1, 1], + "854": [0, 1, 1], + "855": [0, 1, 1], + "856": [0, 1, 1], + "857": [0, 2, 2], + "858": [0, 1, 1], + "859": [0, 1, 1], + "860": [0, 1, 1], + "861": [0, 1, 1], + "862": [0, 1, 1], + "863": [0, 1, 1], + "864": [0, 1, 1], + "867": [0, 1, 1], + "872": [1, 1, 1], + "873": [1, 1, 1], + "876-female": [0, 1, 1], + "876": [0, 1, 1], + "877-hangry": [1, 1, 1], + "877": [1, 1, 1], + "880": [0, 1, 1], + "881": [0, 1, 1], + "882": [0, 2, 1], + "883": [0, 1, 1], + "884": [0, 1, 1], + "885": [1, 1, 1], + "886": [1, 1, 1], + "887": [1, 1, 1], + "888": [0, 1, 1], + "888-crowned": [0, 1, 1], + "889": [0, 1, 1], + "889-crowned": [0, 1, 1], + "890": [0, 2, 1], + "890-eternamax": [0, 1, 1], + "891": [1, 1, 1], + "892-rapid-strike": [1, 1, 1], + "892": [1, 1, 1], + "894": [0, 1, 1], + "895": [0, 1, 1], + "896": [1, 1, 1], + "897": [1, 1, 1], + "898": [1, 1, 1], + "898-ice": [1, 1, 1], + "898-shadow": [1, 1, 1], + "900": [0, 1, 1], + "901": [0, 1, 1], + "903": [0, 1, 1], + "909": [0, 1, 1], + "910": [0, 2, 2], + "911": [0, 2, 2], + "912": [0, 1, 2], + "913": [0, 1, 2], + "914": [0, 2, 1], + "919": [1, 1, 1], + "920": [1, 1, 1], + "924": [1, 1, 1], + "925-four": [1, 2, 2], + "925-three": [1, 2, 2], + "932": [0, 2, 2], + "933": [0, 2, 2], + "934": [0, 1, 1], + "935": [1, 1, 2], + "936": [2, 2, 2], + "937": [2, 2, 2], + "940": [0, 1, 1], + "941": [0, 1, 1], + "944": [0, 1, 1], + "945": [0, 1, 1], + "948": [0, 1, 1], + "949": [0, 1, 1], + "951": [0, 1, 1], + "952": [0, 1, 1], + "953": [0, 1, 1], + "954": [0, 1, 1], + "957": [2, 2, 2], + "958": [2, 2, 2], + "959": [2, 2, 2], + "962": [1, 1, 1], + "967": [0, 1, 1], + "968": [0, 1, 1], + "969": [0, 1, 1], + "970": [0, 1, 1], + "973": [1, 1, 1], + "974": [0, 1, 1], + "975": [0, 1, 1], + "978-curly": [0, 2, 2], + "978-droopy": [0, 2, 2], + "978-stretchy": [0, 2, 2], + "979": [2, 2, 2], + "981": [0, 1, 1], + "982": [0, 1, 1], + "982-three-segment": [0, 1, 1], + "987": [1, 1, 1], + "988": [0, 1, 2], + "993": [0, 1, 1], + "994": [0, 1, 2], + "995": [0, 1, 1], + "996": [0, 1, 1], + "997": [0, 2, 2], + "998": [0, 2, 2], + "999": [2, 1, 1], + "1000": [1, 1, 1], + "1001": [0, 1, 1], + "1003": [0, 1, 1], + "1004": [0, 1, 1], + "1006": [0, 2, 1], + "1007-apex-build": [0, 2, 2], + "1008-ultimate-mode": [1, 1, 1], + "2026": [0, 1, 1], + "2027": [0, 1, 1], + "2028": [0, 1, 1], + "2052": [0, 1, 1], + "2053": [0, 1, 0], + "2103": [0, 1, 1], + "4052": [0, 1, 1], + "4077": [0, 1, 1], + "4078": [0, 1, 1], + "4079": [0, 1, 1], + "4080": [2, 1, 1], + "4144": [0, 1, 1], + "4145": [0, 1, 1], + "4146": [0, 1, 1], + "4199": [2, 1, 1], + "4222": [0, 1, 1], + "4263": [0, 1, 1], + "4264": [0, 1, 1], + "4562": [0, 1, 1], + "6100": [0, 1, 1], + "6101": [0, 1, 1], + "6215": [0, 1, 1], + "6503": [0, 1, 1], + "6549": [0, 1, 1], + "6570": [0, 1, 1], + "6571": [0, 1, 1], + "6705": [0, 1, 1], + "6706": [0, 1, 1], + "6713": [0, 1, 1], "female": {}, "back": { - "3-mega": [ - 0, - 2, - 2 - ], - "6-mega-x": [ - 0, - 2, - 2 - ], - "6-mega-y": [ - 0, - 1, - 2 - ], - "80-mega": [ - 0, - 1, - 1 - ], - "94-mega": [ - 1, - 1, - 1 - ], - "127-mega": [ - 0, - 1, - 1 - ], - "130-mega": [ - 0, - 1, - 1 - ], - "142-mega": [ - 0, - 1, - 1 - ], - "150-mega-x": [ - 0, - 1, - 1 - ], - "150-mega-y": [ - 0, - 1, - 1 - ], - "181-mega": [ - 0, - 1, - 2 - ], - "212-mega": [ - 1, - 2, - 2 - ], - "229-mega": [ - 0, - 1, - 1 - ], - "248-mega": [ - 0, - 2, - 1 - ], - "257-mega": [ - 0, - 1, - 1 - ], - "282-mega": [ - 0, - 1, - 1 - ], - "302-mega": [ - 0, - 1, - 1 - ], - "303-mega": [ - 0, - 1, - 1 - ], - "306-mega": [ - 1, - 1, - 1 - ], - "308-mega": [ - 0, - 1, - 1 - ], - "310-mega": [ - 0, - 1, - 1 - ], - "334-mega": [ - 0, - 1, - 1 - ], - "354-mega": [ - 0, - 1, - 1 - ], - "362-mega": [ - 0, - 1, - 1 - ], - "373-mega": [ - 0, - 1, - 1 - ], - "376-mega": [ - 0, - 1, - 1 - ], - "380-mega": [ - 0, - 1, - 1 - ], - "381-mega": [ - 0, - 1, - 1 - ], - "382-primal": [ - 0, - 1, - 1 - ], - "383-primal": [ - 0, - 1, - 1 - ], - "384-mega": [ - 0, - 1, - 1 - ], - "428-mega": [ - 0, - 1, - 1 - ], - "445-mega": [ - 1, - 1, - 1 - ], - "448-mega": [ - 1, - 1, - 1 - ], - "475-mega": [ - 0, - 2, - 2 - ], - "531-mega": [ - 0, - 1, - 1 - ], - "653": [ - 0, - 1, - 1 - ], - "654": [ - 0, - 1, - 1 - ], - "655": [ - 0, - 1, - 1 - ], - "664": [ - 0, - 1, - 1 - ], - "665": [ - 0, - 2, - 1 - ], - "666-archipelago": [ - 0, - 2, - 2 - ], - "666-continental": [ - 0, - 2, - 2 - ], - "666-elegant": [ - 0, - 2, - 2 - ], - "666-fancy": [ - 0, - 2, - 2 - ], - "666-garden": [ - 0, - 2, - 2 - ], - "666-high-plains": [ - 0, - 2, - 2 - ], - "666-icy-snow": [ - 0, - 2, - 2 - ], - "666-jungle": [ - 0, - 2, - 2 - ], - "666-marine": [ - 0, - 2, - 2 - ], - "666-meadow": [ - 0, - 2, - 2 - ], - "666-modern": [ - 0, - 2, - 2 - ], - "666-monsoon": [ - 0, - 2, - 2 - ], - "666-ocean": [ - 0, - 2, - 2 - ], - "666-poke-ball": [ - 0, - 2, - 2 - ], - "666-polar": [ - 0, - 2, - 2 - ], - "666-river": [ - 0, - 2, - 2 - ], - "666-sandstorm": [ - 0, - 2, - 2 - ], - "666-savanna": [ - 0, - 2, - 2 - ], - "666-sun": [ - 0, - 2, - 2 - ], - "666-tundra": [ - 0, - 2, - 2 - ], - "669-red": [ - 0, - 2, - 2 - ], - "669-blue": [ - 0, - 2, - 2 - ], - "669-white": [ - 0, - 2, - 2 - ], - "669-yellow": [ - 0, - 2, - 2 - ], - "669-orange": [ - 0, - 2, - 2 - ], - "670-white": [ - 0, - 1, - 1 - ], - "670-blue": [ - 0, - 2, - 2 - ], - "670-orange": [ - 0, - 1, - 1 - ], - "670-red": [ - 0, - 1, - 1 - ], - "670-yellow": [ - 0, - 1, - 1 - ], - "671-red": [ - 0, - 1, - 1 - ], - "671-blue": [ - 0, - 1, - 1 - ], - "671-yellow": [ - 0, - 1, - 1 - ], - "671-white": [ - 0, - 1, - 1 - ], - "671-orange": [ - 0, - 1, - 1 - ], - "672": [ - 0, - 1, - 1 - ], - "673": [ - 0, - 1, - 1 - ], - "677": [ - 0, - 1, - 1 - ], - "678-female": [ - 0, - 1, - 1 - ], - "678": [ - 0, - 1, - 1 - ], - "690": [ - 0, - 1, - 1 - ], - "691": [ - 0, - 1, - 1 - ], - "696": [ - 0, - 1, - 1 - ], - "697": [ - 0, - 1, - 1 - ], - "698": [ - 0, - 1, - 1 - ], - "699": [ - 0, - 2, - 2 - ], - "700": [ - 0, - 1, - 1 - ], - "702": [ - 0, - 1, - 1 - ], - "703": [ - 0, - 1, - 1 - ], - "704": [ - 0, - 1, - 1 - ], - "705": [ - 0, - 1, - 1 - ], - "706": [ - 0, - 1, - 1 - ], - "708": [ - 0, - 1, - 1 - ], - "709": [ - 0, - 1, - 1 - ], - "710": [ - 0, - 1, - 1 - ], - "711": [ - 1, - 1, - 1 - ], - "712": [ - 0, - 1, - 1 - ], - "713": [ - 0, - 1, - 1 - ], - "714": [ - 0, - 1, - 1 - ], - "715": [ - 0, - 1, - 1 - ], - "716-active": [ - 0, - 1, - 1 - ], - "716-neutral": [ - 0, - 1, - 1 - ], - "717": [ - 0, - 1, - 1 - ], - "720-unbound": [ - 1, - 1, - 1 - ], - "720": [ - 1, - 1, - 1 - ], - "728": [ - 0, - 1, - 1 - ], - "729": [ - 0, - 2, - 2 - ], - "730": [ - 0, - 2, - 1 - ], - "734": [ - 0, - 1, - 1 - ], - "735": [ - 0, - 1, - 1 - ], - "742": [ - 0, - 2, - 2 - ], - "743": [ - 0, - 2, - 2 - ], - "747": [ - 0, - 2, - 2 - ], - "748": [ - 0, - 1, - 1 - ], - "751": [ - 0, - 1, - 1 - ], - "752": [ - 0, - 1, - 1 - ], - "753": [ - 0, - 1, - 1 - ], - "754": [ - 0, - 2, - 2 - ], - "755": [ - 0, - 1, - 1 - ], - "756": [ - 0, - 1, - 1 - ], - "761": [ - 0, - 1, - 1 - ], - "762": [ - 0, - 1, - 1 - ], - "763": [ - 0, - 1, - 1 - ], - "767": [ - 0, - 1, - 1 - ], - "768": [ - 0, - 1, - 1 - ], - "771": [ - 0, - 1, - 1 - ], - "772": [ - 0, - 1, - 1 - ], - "773-fighting": [ - 0, - 1, - 1 - ], - "773-psychic": [ - 0, - 1, - 1 - ], - "773-poison": [ - 0, - 1, - 1 - ], - "773-ground": [ - 0, - 1, - 1 - ], - "773-ghost": [ - 0, - 1, - 1 - ], - "773-steel": [ - 0, - 1, - 1 - ], - "773-rock": [ - 0, - 1, - 1 - ], - "773-grass": [ - 0, - 1, - 1 - ], - "773-dragon": [ - 0, - 1, - 1 - ], - "773-bug": [ - 0, - 1, - 1 - ], - "773-ice": [ - 0, - 1, - 1 - ], - "773-dark": [ - 0, - 1, - 1 - ], - "773": [ - 0, - 1, - 1 - ], - "773-fairy": [ - 0, - 1, - 1 - ], - "773-water": [ - 0, - 1, - 1 - ], - "773-electric": [ - 0, - 1, - 1 - ], - "773-flying": [ - 0, - 1, - 1 - ], - "773-fire": [ - 0, - 1, - 1 - ], - "776": [ - 0, - 2, - 2 - ], - "777": [ - 0, - 1, - 1 - ], - "778-busted": [ - 0, - 1, - 1 - ], - "778-disguised": [ - 0, - 1, - 1 - ], - "779": [ - 0, - 1, - 1 - ], - "789": [ - 1, - 1, - 1 - ], - "790": [ - 0, - 1, - 1 - ], - "791": [ - 1, - 1, - 1 - ], - "792": [ - 0, - 1, - 1 - ], - "793": [ - 0, - 1, - 1 - ], - "797": [ - 0, - 1, - 1 - ], - "798": [ - 0, - 1, - 1 - ], - "800-dawn-wings": [ - 0, - 1, - 1 - ], - "800-dusk-mane": [ - 0, - 1, - 1 - ], - "800-ultra": [ - 0, - 1, - 1 - ], - "800": [ - 0, - 1, - 1 - ], - "802": [ - 1, - 1, - 1 - ], - "803": [ - 0, - 1, - 1 - ], - "804": [ - 0, - 1, - 1 - ], - "808": [ - 0, - 1, - 1 - ], - "809": [ - 0, - 1, - 1 - ], - "816": [ - 0, - 1, - 1 - ], - "817": [ - 0, - 1, - 1 - ], - "818": [ - 0, - 1, - 1 - ], - "821": [ - 0, - 1, - 1 - ], - "822": [ - 0, - 1, - 1 - ], - "823": [ - 0, - 1, - 1 - ], - "829": [ - 0, - 1, - 1 - ], - "830": [ - 0, - 1, - 1 - ], - "835": [ - 0, - 1, - 1 - ], - "836": [ - 0, - 1, - 1 - ], - "850": [ - 0, - 1, - 1 - ], - "851": [ - 0, - 1, - 1 - ], - "854": [ - 0, - 1, - 1 - ], - "855": [ - 0, - 1, - 1 - ], - "856": [ - 0, - 1, - 1 - ], - "857": [ - 0, - 2, - 2 - ], - "858": [ - 0, - 1, - 1 - ], - "859": [ - 0, - 1, - 1 - ], - "860": [ - 0, - 1, - 1 - ], - "861": [ - 0, - 1, - 1 - ], - "862": [ - 0, - 1, - 1 - ], - "863": [ - 0, - 1, - 1 - ], - "864": [ - 0, - 1, - 1 - ], - "867": [ - 0, - 1, - 1 - ], - "872": [ - 1, - 1, - 1 - ], - "873": [ - 1, - 1, - 1 - ], - "876-female": [ - 0, - 1, - 1 - ], - "876": [ - 0, - 1, - 1 - ], - "877-hangry": [ - 1, - 1, - 1 - ], - "877": [ - 1, - 1, - 1 - ], - "880": [ - 0, - 1, - 1 - ], - "881": [ - 0, - 1, - 1 - ], - "882": [ - 0, - 1, - 1 - ], - "883": [ - 0, - 1, - 1 - ], - "884": [ - 0, - 1, - 1 - ], - "885": [ - 1, - 1, - 1 - ], - "886": [ - 1, - 1, - 1 - ], - "887": [ - 1, - 1, - 1 - ], - "888": [ - 0, - 1, - 1 - ], - "888-crowned": [ - 0, - 1, - 1 - ], - "889": [ - 0, - 1, - 1 - ], - "889-crowned": [ - 0, - 1, - 1 - ], - "890": [ - 0, - 1, - 1 - ], - "891": [ - 1, - 1, - 1 - ], - "892-rapid-strike": [ - 1, - 1, - 1 - ], - "892": [ - 1, - 1, - 1 - ], - "896": [ - 1, - 1, - 1 - ], - "897": [ - 1, - 1, - 1 - ], - "898": [ - 1, - 1, - 1 - ], - "898-ice": [ - 1, - 1, - 1 - ], - "898-shadow": [ - 1, - 1, - 1 - ], - "900": [ - 0, - 1, - 1 - ], - "901": [ - 0, - 1, - 1 - ], - "903": [ - 0, - 1, - 1 - ], - "909": [ - 0, - 1, - 1 - ], - "910": [ - 0, - 2, - 2 - ], - "911": [ - 0, - 1, - 1 - ], - "912": [ - 0, - 1, - 1 - ], - "913": [ - 0, - 1, - 1 - ], - "914": [ - 0, - 2, - 2 - ], - "919": [ - 1, - 1, - 1 - ], - "920": [ - 1, - 1, - 1 - ], - "924": [ - 1, - 1, - 1 - ], - "925-four": [ - 1, - 2, - 2 - ], - "925-three": [ - 1, - 2, - 2 - ], - "932": [ - 0, - 1, - 1 - ], - "933": [ - 0, - 1, - 1 - ], - "934": [ - 0, - 1, - 1 - ], - "935": [ - 2, - 2, - 2 - ], - "936": [ - 2, - 2, - 2 - ], - "937": [ - 2, - 2, - 2 - ], - "940": [ - 0, - 1, - 1 - ], - "941": [ - 0, - 1, - 1 - ], - "948": [ - 0, - 1, - 1 - ], - "949": [ - 0, - 1, - 1 - ], - "951": [ - 0, - 1, - 1 - ], - "952": [ - 0, - 2, - 1 - ], - "953": [ - 0, - 1, - 1 - ], - "954": [ - 0, - 1, - 1 - ], - "957": [ - 1, - 1, - 1 - ], - "958": [ - 1, - 1, - 1 - ], - "959": [ - 1, - 1, - 1 - ], - "962": [ - 1, - 1, - 1 - ], - "967": [ - 0, - 1, - 1 - ], - "968": [ - 0, - 2, - 2 - ], - "969": [ - 0, - 1, - 1 - ], - "970": [ - 0, - 1, - 1 - ], - "973": [ - 1, - 1, - 1 - ], - "974": [ - 0, - 1, - 1 - ], - "975": [ - 0, - 1, - 1 - ], - "978-curly": [ - 0, - 2, - 2 - ], - "978-droopy": [ - 0, - 2, - 2 - ], - "978-stretchy": [ - 0, - 1, - 1 - ], - "979": [ - 1, - 1, - 1 - ], - "981": [ - 0, - 1, - 1 - ], - "982": [ - 0, - 1, - 1 - ], - "982-three-segment": [ - 0, - 1, - 1 - ], - "987": [ - 1, - 1, - 1 - ], - "988": [ - 0, - 1, - 1 - ], - "993": [ - 0, - 1, - 1 - ], - "994": [ - 0, - 1, - 1 - ], - "995": [ - 0, - 1, - 1 - ], - "996": [ - 0, - 1, - 1 - ], - "997": [ - 0, - 1, - 1 - ], - "998": [ - 0, - 1, - 1 - ], - "999": [ - 1, - 1, - 1 - ], - "1000": [ - 1, - 1, - 1 - ], - "1001": [ - 0, - 1, - 1 - ], - "1003": [ - 0, - 1, - 1 - ], - "1004": [ - 0, - 1, - 1 - ], - "1006": [ - 0, - 2, - 2 - ], - "1007-apex-build": [ - 0, - 2, - 2 - ], - "1008-ultimate-mode": [ - 1, - 1, - 1 - ], - "2027": [ - 0, - 1, - 1 - ], - "2028": [ - 0, - 1, - 1 - ], - "2052": [ - 0, - 1, - 1 - ], - "2053": [ - 0, - 1, - 1 - ], - "4052": [ - 0, - 1, - 1 - ], - "4077": [ - 0, - 1, - 1 - ], - "4078": [ - 0, - 1, - 1 - ], - "4079": [ - 0, - 1, - 1 - ], - "4080": [ - 2, - 2, - 2 - ], - "4144": [ - 0, - 1, - 1 - ], - "4145": [ - 0, - 1, - 1 - ], - "4146": [ - 0, - 1, - 1 - ], - "4199": [ - 2, - 1, - 1 - ], - "4222": [ - 0, - 1, - 1 - ], - "4263": [ - 0, - 1, - 1 - ], - "4264": [ - 0, - 1, - 1 - ], - "4562": [ - 0, - 1, - 1 - ], - "6100": [ - 0, - 1, - 1 - ], - "6101": [ - 0, - 1, - 1 - ], - "6215": [ - 0, - 1, - 1 - ], - "6549": [ - 0, - 1, - 1 - ], - "6570": [ - 0, - 1, - 1 - ], - "6571": [ - 0, - 1, - 1 - ], - "6705": [ - 0, - 1, - 1 - ], - "6706": [ - 0, - 1, - 1 - ], - "6713": [ - 0, - 1, - 1 - ] - }, - "6713": [ - 0, - 1, - 1 - ] + "3-mega": [0, 2, 2], + "6-mega-x": [0, 2, 2], + "6-mega-y": [0, 1, 2], + "80-mega": [0, 1, 1], + "94-mega": [1, 1, 1], + "127-mega": [0, 1, 1], + "130-mega": [0, 1, 1], + "142-mega": [0, 1, 1], + "150-mega-x": [0, 1, 1], + "150-mega-y": [0, 1, 1], + "181-mega": [0, 1, 2], + "212-mega": [1, 2, 2], + "229-mega": [0, 1, 1], + "248-mega": [0, 2, 1], + "257-mega": [0, 1, 1], + "282-mega": [0, 1, 1], + "302-mega": [0, 1, 1], + "303-mega": [0, 1, 1], + "306-mega": [1, 1, 1], + "308-mega": [0, 1, 1], + "310-mega": [0, 1, 1], + "334-mega": [0, 1, 1], + "354-mega": [0, 1, 1], + "359-mega": [0, 1, 1], + "362-mega": [0, 1, 1], + "373-mega": [0, 1, 1], + "376-mega": [0, 1, 1], + "380-mega": [0, 1, 1], + "381-mega": [0, 1, 1], + "382-primal": [0, 1, 1], + "383-primal": [0, 1, 1], + "384-mega": [0, 1, 1], + "428-mega": [0, 1, 1], + "445-mega": [1, 1, 1], + "448-mega": [1, 1, 1], + "475-mega": [0, 2, 2], + "531-mega": [0, 1, 1], + "653": [0, 1, 1], + "654": [0, 1, 1], + "655": [0, 1, 1], + "656": [0, 1, 1], + "657": [0, 1, 1], + "658": [0, 1, 1], + "658-ash": [0, 1, 1], + "664": [0, 1, 1], + "665": [0, 2, 1], + "666-archipelago": [0, 2, 2], + "666-continental": [0, 2, 2], + "666-elegant": [0, 2, 2], + "666-fancy": [0, 2, 2], + "666-garden": [0, 2, 2], + "666-high-plains": [0, 2, 2], + "666-icy-snow": [0, 2, 2], + "666-jungle": [0, 2, 2], + "666-marine": [0, 2, 2], + "666-meadow": [0, 2, 2], + "666-modern": [0, 2, 2], + "666-monsoon": [0, 2, 2], + "666-ocean": [0, 2, 2], + "666-poke-ball": [0, 2, 2], + "666-polar": [0, 2, 2], + "666-river": [0, 2, 2], + "666-sandstorm": [0, 2, 2], + "666-savanna": [0, 2, 2], + "666-sun": [0, 2, 2], + "666-tundra": [0, 2, 2], + "669-red": [0, 2, 2], + "669-blue": [0, 2, 2], + "669-white": [0, 2, 2], + "669-yellow": [0, 2, 2], + "669-orange": [0, 2, 2], + "670-white": [0, 1, 1], + "670-blue": [0, 2, 2], + "670-orange": [0, 1, 1], + "670-red": [0, 1, 1], + "670-yellow": [0, 1, 1], + "671-red": [0, 1, 1], + "671-blue": [0, 1, 1], + "671-yellow": [0, 1, 1], + "671-white": [0, 1, 1], + "671-orange": [0, 1, 1], + "672": [0, 1, 1], + "673": [0, 1, 1], + "676": [0, 1, 1], + "677": [0, 1, 1], + "678-female": [0, 1, 1], + "678": [0, 1, 1], + "682": [0, 1, 1], + "683": [0, 1, 1], + "684": [0, 1, 1], + "685": [0, 1, 1], + "688": [0, 1, 1], + "689": [0, 1, 1], + "690": [0, 1, 1], + "691": [0, 1, 1], + "696": [0, 1, 1], + "697": [0, 1, 1], + "698": [0, 1, 1], + "699": [0, 2, 2], + "700": [0, 1, 1], + "702": [0, 1, 1], + "703": [0, 1, 1], + "704": [0, 1, 1], + "705": [0, 1, 1], + "706": [0, 1, 1], + "708": [0, 1, 1], + "709": [0, 1, 1], + "710": [0, 1, 1], + "711": [1, 1, 1], + "712": [0, 1, 1], + "713": [0, 1, 1], + "714": [0, 1, 1], + "715": [0, 1, 1], + "716-active": [0, 1, 1], + "716-neutral": [0, 1, 1], + "717": [0, 1, 1], + "720-unbound": [1, 1, 1], + "720": [1, 1, 1], + "728": [0, 1, 1], + "729": [0, 2, 2], + "730": [0, 2, 1], + "734": [0, 1, 1], + "735": [0, 1, 1], + "742": [0, 2, 2], + "743": [0, 2, 2], + "747": [0, 2, 2], + "748": [0, 1, 1], + "751": [0, 1, 1], + "752": [0, 1, 1], + "753": [0, 1, 1], + "754": [0, 2, 2], + "755": [0, 1, 1], + "756": [0, 1, 1], + "761": [0, 1, 1], + "762": [0, 1, 1], + "763": [0, 1, 1], + "767": [0, 1, 1], + "768": [0, 1, 1], + "771": [0, 1, 1], + "772": [0, 1, 1], + "773-fighting": [0, 1, 1], + "773-psychic": [0, 1, 1], + "773-poison": [0, 1, 1], + "773-ground": [0, 1, 1], + "773-ghost": [0, 1, 1], + "773-steel": [0, 1, 1], + "773-rock": [0, 1, 1], + "773-grass": [0, 1, 1], + "773-dragon": [0, 1, 1], + "773-bug": [0, 1, 1], + "773-ice": [0, 1, 1], + "773-dark": [0, 1, 1], + "773": [0, 1, 1], + "773-fairy": [0, 1, 1], + "773-water": [0, 1, 1], + "773-electric": [0, 1, 1], + "773-flying": [0, 1, 1], + "773-fire": [0, 1, 1], + "776": [0, 2, 2], + "777": [0, 1, 1], + "778-busted": [0, 1, 1], + "778-disguised": [0, 1, 1], + "779": [0, 1, 1], + "789": [1, 1, 1], + "790": [0, 1, 1], + "791": [1, 1, 1], + "792": [0, 1, 1], + "793": [0, 1, 1], + "797": [0, 1, 1], + "798": [0, 1, 1], + "800-dawn-wings": [0, 1, 1], + "800-dusk-mane": [0, 1, 1], + "800-ultra": [0, 1, 1], + "800": [0, 1, 1], + "802": [1, 1, 1], + "803": [0, 1, 1], + "804": [0, 1, 1], + "807": [0, 1, 1], + "808": [0, 1, 1], + "809": [0, 1, 1], + "816": [0, 1, 1], + "817": [0, 1, 1], + "818": [0, 1, 1], + "821": [0, 1, 1], + "822": [0, 1, 1], + "823": [0, 1, 1], + "829": [0, 1, 1], + "830": [0, 1, 1], + "835": [0, 1, 1], + "836": [0, 1, 1], + "850": [0, 1, 1], + "851": [0, 1, 1], + "854": [0, 1, 1], + "855": [0, 1, 1], + "856": [0, 1, 1], + "857": [0, 2, 2], + "858": [0, 1, 1], + "859": [0, 1, 1], + "860": [0, 1, 1], + "861": [0, 1, 1], + "862": [0, 1, 1], + "863": [0, 1, 1], + "864": [0, 1, 1], + "867": [0, 1, 1], + "872": [1, 1, 1], + "873": [1, 1, 1], + "876-female": [0, 1, 1], + "876": [0, 1, 1], + "877-hangry": [1, 1, 1], + "877": [1, 1, 1], + "880": [0, 1, 1], + "881": [0, 1, 1], + "882": [0, 1, 1], + "883": [0, 1, 1], + "884": [0, 1, 1], + "885": [1, 1, 1], + "886": [1, 1, 1], + "887": [1, 1, 1], + "888": [0, 1, 1], + "888-crowned": [0, 1, 1], + "889": [0, 1, 1], + "889-crowned": [0, 1, 1], + "890": [0, 1, 1], + "891": [1, 1, 1], + "892-rapid-strike": [1, 1, 1], + "892": [1, 1, 1], + "894": [0, 1, 1], + "895": [0, 1, 1], + "896": [1, 1, 1], + "897": [1, 1, 1], + "898": [1, 1, 1], + "898-ice": [1, 1, 1], + "898-shadow": [1, 1, 1], + "900": [0, 1, 1], + "901": [0, 1, 1], + "903": [0, 1, 1], + "909": [0, 1, 1], + "910": [0, 2, 2], + "911": [0, 1, 1], + "912": [0, 1, 1], + "913": [0, 1, 1], + "914": [0, 2, 2], + "919": [1, 1, 1], + "920": [1, 1, 1], + "924": [1, 1, 1], + "925-four": [1, 2, 2], + "925-three": [1, 2, 2], + "932": [0, 1, 1], + "933": [0, 1, 1], + "934": [0, 1, 1], + "935": [2, 2, 2], + "936": [2, 2, 2], + "937": [2, 2, 2], + "940": [0, 1, 1], + "941": [0, 1, 1], + "944": [0, 1, 1], + "945": [0, 1, 1], + "948": [0, 1, 1], + "949": [0, 1, 1], + "951": [0, 1, 1], + "952": [0, 2, 1], + "953": [0, 1, 1], + "954": [0, 1, 1], + "957": [1, 1, 1], + "958": [1, 1, 1], + "959": [1, 1, 1], + "962": [1, 1, 1], + "967": [0, 1, 1], + "968": [0, 2, 2], + "969": [0, 1, 1], + "970": [0, 1, 1], + "973": [1, 1, 1], + "974": [0, 1, 1], + "975": [0, 1, 1], + "978-curly": [0, 2, 2], + "978-droopy": [0, 2, 2], + "978-stretchy": [0, 1, 1], + "979": [1, 1, 1], + "981": [0, 1, 1], + "982": [0, 1, 1], + "982-three-segment": [0, 1, 1], + "987": [1, 1, 1], + "988": [0, 1, 1], + "993": [0, 1, 1], + "994": [0, 1, 1], + "995": [0, 1, 1], + "996": [0, 1, 1], + "997": [0, 1, 1], + "998": [0, 1, 1], + "999": [1, 1, 1], + "1000": [1, 1, 1], + "1001": [0, 1, 1], + "1003": [0, 1, 1], + "1004": [0, 1, 1], + "1006": [0, 2, 2], + "1007-apex-build": [0, 2, 2], + "1008-ultimate-mode": [1, 1, 1], + "2026": [0, 1, 1], + "2027": [0, 1, 1], + "2028": [0, 1, 1], + "2052": [0, 1, 1], + "2053": [0, 1, 1], + "2103": [0, 1, 1], + "4052": [0, 1, 1], + "4077": [0, 1, 1], + "4078": [0, 1, 1], + "4079": [0, 1, 1], + "4080": [2, 2, 2], + "4144": [0, 1, 1], + "4145": [0, 1, 1], + "4146": [0, 1, 1], + "4199": [2, 1, 1], + "4222": [0, 1, 1], + "4263": [0, 1, 1], + "4264": [0, 1, 1], + "4562": [0, 1, 1], + "6100": [0, 1, 1], + "6101": [0, 1, 1], + "6215": [0, 1, 1], + "6503": [0, 1, 1], + "6549": [0, 1, 1], + "6570": [0, 1, 1], + "6571": [0, 1, 1], + "6705": [0, 1, 1], + "6706": [0, 1, 1], + "6713": [0, 1, 1] + } } } diff --git a/public/images/pokemon/variant/back/1012-counterfeit.json b/public/images/pokemon/variant/back/1012-counterfeit.json new file mode 100644 index 00000000000..10255311fe0 --- /dev/null +++ b/public/images/pokemon/variant/back/1012-counterfeit.json @@ -0,0 +1,34 @@ +{ + "1": { + "291e1e": "404ec8", + "87847e": "8a96c0", + "78c463": "f7dfc5", + "4c3a3a": "667fe9", + "5d9e4a": "dda08a", + "251b1b": "222078", + "a09750": "acbedf", + "e6e1db": "f5fdff", + "396725": "b0654a", + "ccc374": "e9f4f7", + "613f19": "7b86ad", + "544040": "626a96", + "c1b9ae": "c8ddf1", + "69441b": "3a44a4" + }, + "2": { + "291e1e": "37183f", + "87847e": "070722", + "78c463": "c3b4e0", + "4c3a3a": "563f5b", + "5d9e4a": "978dc7", + "251b1b": "1c0b1f", + "a09750": "1b2556", + "e6e1db": "212b5e", + "396725": "7a5aa7", + "ccc374": "293363", + "613f19": "0d1030", + "544040": "020109", + "c1b9ae": "111039", + "69441b": "44244b" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/1013-unremarkable.json b/public/images/pokemon/variant/back/1013-unremarkable.json new file mode 100644 index 00000000000..2a6de98db5a --- /dev/null +++ b/public/images/pokemon/variant/back/1013-unremarkable.json @@ -0,0 +1,36 @@ +{ + "1": { + "5d9e4a": "dda08a", + "a09750": "c3d7eb", + "251b1b": "404ec8", + "7b6f6c": "acbedf", + "c1b9ae": "cbe1f5", + "69441b": "3a44a4", + "342405": "565e7a", + "78c463": "f7dfc5", + "9e8574": "b36171", + "988975": "939ec4", + "295217": "b0654a", + "e6e1db": "e6f9ff", + "6a5b20": "8a96c0", + "291a0d": "222078", + "453636": "667fe9" + }, + "2": { + "5d9e4a": "978dc7", + "a09750": "263665", + "251b1b": "37183f", + "7b6f6c": "0f102d", + "c1b9ae": "111039", + "69441b": "44244b", + "342405": "0b0c21", + "78c463": "c3b4e0", + "9e8574": "585d81", + "988975": "212e57", + "295217": "7a5aa7", + "e6e1db": "212b5e", + "6a5b20": "171542", + "291a0d": "170d26", + "453636": "563f5b" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/102.json b/public/images/pokemon/variant/back/102.json new file mode 100644 index 00000000000..61035a495c9 --- /dev/null +++ b/public/images/pokemon/variant/back/102.json @@ -0,0 +1,20 @@ +{ + "1": { + "943131": "193662", + "e69c00": "a0694c", + "ffe6ce": "7ae49f", + "ffce4a": "cea573", + "ffb58c": "369b96", + "ef8463": "26647e", + "ffd6ad": "4fba94" + }, + "2": { + "943131": "414189", + "e69c00": "6d2341", + "ffe6ce": "ebb6f8", + "ffce4a": "92394b", + "ffb58c": "9475ce", + "ef8463": "6c5fb6", + "ffd6ad": "b98fe4" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/103.json b/public/images/pokemon/variant/back/103.json new file mode 100644 index 00000000000..492bc14b102 --- /dev/null +++ b/public/images/pokemon/variant/back/103.json @@ -0,0 +1,28 @@ +{ + "1": { + "ffde6b": "a3c4ed", + "e6ad5a": "869fdc", + "73ad31": "dea44c", + "8c7342": "283f5b", + "526329": "c8592a", + "9cd64a": "f4e774", + "a56b21": "6072ba", + "b59c4a": "426378", + "734210": "373e85", + "ffefa5": "d3efff", + "524210": "131d33" + }, + "2": { + "ffde6b": "eb748d", + "e6ad5a": "c84e7f", + "73ad31": "3d324b", + "8c7342": "d59cba", + "526329": "1f1a31", + "9cd64a": "6a5b73", + "a56b21": "83295f", + "b59c4a": "ffdbe7", + "734210": "4e1044", + "ffefa5": "ffa29d", + "524210": "925b81" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/128.json b/public/images/pokemon/variant/back/128.json new file mode 100644 index 00000000000..ef61b186930 --- /dev/null +++ b/public/images/pokemon/variant/back/128.json @@ -0,0 +1,30 @@ +{ + "1": { + "dea54a": "56b393", + "634a31": "173e0d", + "9c9cad": "997059", + "6b6b84": "75413b", + "b58431": "2e8a85", + "8c6b52": "355816", + "523a10": "102d4b", + "ad8c73": "5f722a", + "4a3a29": "072b05", + "8c6321": "215c72", + "cecede": "c2a082", + "3a3a4a": "4d2324" + }, + "2": { + "dea54a": "872b3b", + "634a31": "bc9681", + "9c9cad": "edda95", + "6b6b84": "cca45e", + "b58431": "5e172e", + "8c6b52": "d6c3aa", + "523a10": "2f0e21", + "ad8c73": "faf9ed", + "4a3a29": "966959", + "8c6321": "461029", + "cecede": "fffcc1", + "3a3a4a": "996537" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/152.json b/public/images/pokemon/variant/back/152.json new file mode 100644 index 00000000000..2460f5977d5 --- /dev/null +++ b/public/images/pokemon/variant/back/152.json @@ -0,0 +1,26 @@ +{ + "1": { + "849452": "7373b4", + "b5ce6b": "aca1d7", + "d6f78c": "ded2f1", + "84e631": "8074fa", + "ef7b7b": "9bd5c1", + "c52929": "77b3af", + "6bb529": "6f4be2", + "425a19": "505d8d", + "638c29": "6633bc", + "426319": "5d2398" + }, + "2": { + "849452": "a62775", + "b5ce6b": "c83c74", + "d6f78c": "e7617d", + "84e631": "feeeaf", + "ef7b7b": "71cf71", + "c52929": "4eac60", + "6bb529": "f0d187", + "425a19": "801a69", + "638c29": "d8a864", + "426319": "b4814b" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/153.json b/public/images/pokemon/variant/back/153.json new file mode 100644 index 00000000000..8495177fbaa --- /dev/null +++ b/public/images/pokemon/variant/back/153.json @@ -0,0 +1,26 @@ +{ + "1": { + "a58419": "5961ce", + "ad3100": "47d0d1", + "295208": "232699", + "8cbd31": "8251dc", + "debd29": "7b8ce6", + "527b08": "4d36be", + "6b9c10": "6b41cc", + "f7e64a": "a2bbf8", + "6b5200": "493fa6", + "d68c52": "80f5e6" + }, + "2": { + "a58419": "a8244d", + "ad3100": "439227", + "295208": "c58c48", + "8cbd31": "fae084", + "debd29": "ca333d", + "527b08": "e8bc5e", + "6b9c10": "edc870", + "f7e64a": "ea704a", + "6b5200": "891b4f", + "d68c52": "8ec349" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/154.json b/public/images/pokemon/variant/back/154.json new file mode 100644 index 00000000000..a667f36b9c1 --- /dev/null +++ b/public/images/pokemon/variant/back/154.json @@ -0,0 +1,26 @@ +{ + "1": { + "634a00": "519aa7", + "ff3a5a": "3542a7", + "e6ad00": "7bcfc6", + "ce213a": "27217d", + "63bd42": "9d86d9", + "f7a59c": "72d1da", + "7b103a": "23124e", + "107b31": "8057b2", + "ffde21": "b1f2dc", + "9ce652": "b7afee" + }, + "2": { + "634a00": "488939", + "ff3a5a": "f9db74", + "e6ad00": "6bac4b", + "ce213a": "e5b650", + "63bd42": "a31f60", + "f7a59c": "fff6a9", + "7b103a": "b7873b", + "107b31": "761858", + "ffde21": "92c462", + "9ce652": "cd3b6b" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/158.json b/public/images/pokemon/variant/back/158.json new file mode 100644 index 00000000000..a6c54577e98 --- /dev/null +++ b/public/images/pokemon/variant/back/158.json @@ -0,0 +1,29 @@ +{ + "1": { + "b54a52": "1d5d6c", + "6bb5e6": "dd8e59", + "94d6ff": "fdc17e", + "ffc552": "99d4d9", + "ad8429": "4798ab", + "ce4221": "772c52", + "3184c5": "ae5139", + "e67b7b": "749e9e", + "ef735a": "ad5778", + "7b1900": "4f0332", + "315a84": "73131e" + }, + "2": { + "000000": "ffffff", + "b54a52": "c48b27", + "6bb5e6": "97ac5b", + "94d6ff": "ccd198", + "ffc552": "2f5365", + "ad8429": "1c314f", + "ce4221": "ce8c20", + "3184c5": "4f854a", + "e67b7b": "e4b843", + "ef735a": "f3b649", + "7b1900": "a66b14", + "315a84": "2b4a30" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/159.json b/public/images/pokemon/variant/back/159.json new file mode 100644 index 00000000000..c1124bb8d42 --- /dev/null +++ b/public/images/pokemon/variant/back/159.json @@ -0,0 +1,29 @@ +{ + "1": { + "3a4a84": "973027", + "e64221": "749e9e", + "ce293a": "682c4e", + "5aade6": "e5a354", + "ffe68c": "a9e4e5", + "840008": "4f1037", + "3184c5": "cd6537", + "cebd63": "56b3bd", + "6b5200": "085d75", + "840009": "1d5d6c", + "f7525a": "774860" + }, + "2": { + "000000": "ffffff", + "3a4a84": "26472b", + "e64221": "e4b843", + "ce293a": "ce8c20", + "5aade6": "8fa54e", + "ffe68c": "2f5365", + "840008": "a66b14", + "3184c5": "468040", + "cebd63": "1c314f", + "6b5200": "112034", + "840009": "c48b27", + "f7525a": "f3b649" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/160.json b/public/images/pokemon/variant/back/160.json new file mode 100644 index 00000000000..ac9067df672 --- /dev/null +++ b/public/images/pokemon/variant/back/160.json @@ -0,0 +1,29 @@ +{ + "1": { + "8cd6ff": "ffcf72", + "6b5200": "085d75", + "ce293a": "682c4e", + "5ab5f7": "eda857", + "cebd63": "56b3bd", + "ffe68c": "a9e4e5", + "840008": "4f1037", + "294a8c": "973027", + "3a8cce": "d26738", + "ff8c84": "926877", + "f7525a": "774860" + }, + "2": { + "000000": "ffffff", + "8cd6ff": "d1d692", + "6b5200": "112034", + "ce293a": "ce8c20", + "5ab5f7": "9ab350", + "cebd63": "1c314f", + "ffe68c": "2f5365", + "840008": "a66b14", + "294a8c": "274c2d", + "3a8cce": "498a42", + "ff8c84": "fff284", + "f7525a": "f3b649" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/167.json b/public/images/pokemon/variant/back/167.json new file mode 100644 index 00000000000..65a2a2dedf9 --- /dev/null +++ b/public/images/pokemon/variant/back/167.json @@ -0,0 +1,24 @@ +{ + "1": { + "52b56b": "e5812a", + "000000": "ffffff", + "c5b519": "3f2e71", + "314a10": "641218", + "8ce631": "f2ba40", + "527b29": "d54f1a", + "846b29": "221b57", + "ffe64a": "624095" + }, + "2": { + "52b56b": "b54158", + "bdc5c5": "a1b7de", + "c5b519": "7d95b9", + "314a10": "481229", + "ffffff": "cde6fc", + "8ce631": "dd7081", + "527b29": "8c2848", + "846b29": "565e8d", + "ffe64a": "aac3d6", + "6b6b73": "62657d" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/168.json b/public/images/pokemon/variant/back/168.json new file mode 100644 index 00000000000..7a4270ff9c0 --- /dev/null +++ b/public/images/pokemon/variant/back/168.json @@ -0,0 +1,29 @@ +{ + "1": { + "c54242": "62b943", + "6b5219": "043435", + "63319c": "e28220", + "bdbdbd": "b5d3dc", + "520000": "317945", + "ff5a4a": "a8d919", + "c5b54a": "15463c", + "ffde42": "186c45", + "ff8c73": "dce24b", + "bd84e6": "f1b940", + "6b6b6b": "5f7980" + }, + "2": { + "c54242": "7ca5c6", + "6b5219": "161437", + "63319c": "96304a", + "bdbdbd": "c09fa1", + "520000": "2d3d72", + "ff5a4a": "a3c8d1", + "c5b54a": "1f2150", + "ffffff": "fae8e7", + "ffde42": "313b60", + "ff8c73": "c4e8e7", + "bd84e6": "c8545d", + "6b6b6b": "605050" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/170.json b/public/images/pokemon/variant/back/170.json new file mode 100644 index 00000000000..6f6317314fb --- /dev/null +++ b/public/images/pokemon/variant/back/170.json @@ -0,0 +1,30 @@ +{ + "1": { + "08295a": "691f03", + "ffce52": "a1dbba", + "295294": "a14713", + "ffef84": "ccffd7", + "5a73c5": "dda13d", + "94cee6": "ffeabf", + "522919": "052b38", + "ffffde": "f2fff5", + "c59400": "84bda9", + "7bbde6": "ffe0a2", + "846352": "45757a", + "6ba5e6": "f6e37f" + }, + "2": { + "08295a": "1b072f", + "ffce52": "e25765", + "295294": "441e56", + "ffef84": "f97f7f", + "5a73c5": "693373", + "94cee6": "a15b8d", + "522919": "720b3a", + "ffffde": "ffc4be", + "c59400": "b62b51", + "7bbde6": "9f5a9b", + "846352": "931b3c", + "6ba5e6": "89498d" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/171.json b/public/images/pokemon/variant/back/171.json new file mode 100644 index 00000000000..8a9cafe4265 --- /dev/null +++ b/public/images/pokemon/variant/back/171.json @@ -0,0 +1,30 @@ +{ + "1": { + "a5314a": "bf882c", + "4a7bce": "bc3c4c", + "423110": "05333a", + "ef635a": "efde5a", + "7badef": "f6907f", + "a5ceff": "fbcdb3", + "e6b552": "82ca4f", + "6394e6": "e86062", + "ffde63": "c3e875", + "ad9442": "2a8d3d", + "293173": "872341", + "7b634a": "0c5540" + }, + "2": { + "a5314a": "c3851d", + "4a7bce": "9781b3", + "423110": "040529", + "ef635a": "f0d050", + "7badef": "eecfed", + "a5ceff": "fbf5fa", + "e6b552": "3294b8", + "6394e6": "c5a5d0", + "ffde63": "4dd5d9", + "ad9442": "23689e", + "293173": "4b426c", + "7b634a": "0c1d4c" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/172-spiky.json b/public/images/pokemon/variant/back/172-spiky.json new file mode 100644 index 00000000000..f4c5e28b61a --- /dev/null +++ b/public/images/pokemon/variant/back/172-spiky.json @@ -0,0 +1,23 @@ +{ + "1": { + "c5ad10": "6cab9a", + "845a29": "45818a", + "a57b08": "5ca390", + "7d1c1c": "992424", + "e77b94": "bd4d5e", + "634a10": "30536b", + "f7e652": "a3d1a8" + }, + "2": { + "c5ad10": "4a6a90", + "845a29": "283567", + "171721": "9a4440", + "a57b08": "486a8e", + "212131": "d48d61", + "7d1c1c": "c38218", + "424252": "e7c17c", + "e77b94": "f5dd94", + "634a10": "2b2f54", + "f7e652": "7095ab" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/172-spiky_2.png b/public/images/pokemon/variant/back/172-spiky_2.png new file mode 100644 index 0000000000000000000000000000000000000000..9e9994d6b195de553dd74a31c8a785843da7670b GIT binary patch literal 389 zcmeAS@N?(olHy`uVBq!ia0vp^svyk43?x4}TrdPujKx9jP7LeL$-D$|R04cLT!FNJ zfPg`8wrgXTxVYj>6%|EALno)8n8g!vR?k{|am8NWIMX-#z5>hMoCk8P=(&Kl>oXT<(DUNBuN zNy#=ys&!3K_^XRX9DjCc1@eZx45)VV67UEuU(|N>N#U9R-Jr|Wc45x*;#N-nnmu*4 z7e}fM-|qFc7P%az%dRXwRdM?;55KZe%!% zqvqrK$eK-i&ig(5@ko5C%e?Il>t?Lj@KWj<-yAQ^x*IL)AMNP*e0K4?>zZ#~`mdXl cWAlJNnw58Cxb@kV~Q_jz}n*&tGQxfDC%46oJhr8BI%}NUo)P=sc)@h7 zBqiG*sn#_`;jb`s>u$8Hf3&0L^V!Aou4}$|>A!AH cj?Dx9Xja~Z?hLB=z#w4oboFyt=akR{07nw4=>Px# literal 0 HcmV?d00001 diff --git a/public/images/pokemon/variant/back/172.json b/public/images/pokemon/variant/back/172.json new file mode 100644 index 00000000000..18c7f5bdee4 --- /dev/null +++ b/public/images/pokemon/variant/back/172.json @@ -0,0 +1,23 @@ +{ + "1": { + "c5ad10": "6cab9a", + "845a29": "45818a", + "a57b08": "5ca390", + "7d1c1c": "992424", + "e77b94": "bd4d5e", + "634a10": "30536b", + "f7e652": "a3d1a8" + }, + "2": { + "c5ad10": "4a6a90", + "845a29": "283567", + "171721": "9a4440", + "a57b08": "486a8e", + "212131": "d48d61", + "7d1c1c": "c38218", + "424252": "e7c17c", + "e77b94": "f5dd94", + "634a10": "2f335b", + "f7e652": "7095ab" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/172_2.png b/public/images/pokemon/variant/back/172_2.png new file mode 100644 index 0000000000000000000000000000000000000000..84a35b18eadfeb785b1d2808f6ec388cc367d1be GIT binary patch literal 2665 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 XHIE%v?7uS700000NkvXXu0mjf#XIp$ literal 0 HcmV?d00001 diff --git a/public/images/pokemon/variant/back/172_3.png b/public/images/pokemon/variant/back/172_3.png new file mode 100644 index 0000000000000000000000000000000000000000..b94789940f50821171cf3d763d6dfb4988e7e728 GIT binary patch literal 2665 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 XHIE%v?7uS700000NkvXXu0mjf*1Pk1 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/variant/back/174.json b/public/images/pokemon/variant/back/174.json new file mode 100644 index 00000000000..eaabbbc574d --- /dev/null +++ b/public/images/pokemon/variant/back/174.json @@ -0,0 +1,14 @@ +{ + "1": { + "9c1952": "3a6472", + "b55273": "43737d", + "e6849c": "81c2b8", + "ffadbd": "c5ebd5" + }, + "2": { + "9c1952": "9c5200", + "b55273": "a16b30", + "e6849c": "f5c45b", + "ffadbd": "f5e884" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/194.json b/public/images/pokemon/variant/back/194.json new file mode 100644 index 00000000000..83297ce4e5b --- /dev/null +++ b/public/images/pokemon/variant/back/194.json @@ -0,0 +1,20 @@ +{ + "1": { + "529ce6": "e8983d", + "9463a5": "65b1c2", + "633a6b": "204954", + "3a7bc5": "d5682e", + "73bdff": "ffc355", + "d65ad6": "81e2f7", + "104a84": "7a150a" + }, + "2": { + "529ce6": "564daa", + "9463a5": "cf933b", + "633a6b": "80301c", + "3a7bc5": "3f377e", + "73bdff": "5c66c4", + "d65ad6": "e9cb52", + "104a84": "180d42" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/195.json b/public/images/pokemon/variant/back/195.json new file mode 100644 index 00000000000..f79c398dc81 --- /dev/null +++ b/public/images/pokemon/variant/back/195.json @@ -0,0 +1,26 @@ +{ + "1": { + "ade6ff": "f6dfa8", + "84d6f7": "ed9e4f", + "637ba5": "936e66", + "639cbd": "dc6a4d", + "3194a5": "81e2f7", + "6b5a8c": "23768d", + "425284": "b03844", + "426b84": "af4237", + "195a6b": "54aec2", + "19423a": "204954" + }, + "2": { + "ade6ff": "9864c2", + "84d6f7": "724ba7", + "637ba5": "692d5d", + "639cbd": "493a8d", + "3194a5": "e9cb52", + "6b5a8c": "742f3d", + "425284": "240830", + "426b84": "3d237b", + "195a6b": "cf933b", + "19423a": "b96228" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/198.json b/public/images/pokemon/variant/back/198.json new file mode 100644 index 00000000000..eed8404265c --- /dev/null +++ b/public/images/pokemon/variant/back/198.json @@ -0,0 +1,26 @@ +{ + "1": { + "d94352": "8c1b23", + "314263": "462b20", + "efd684": "a6a6b3", + "d64252": "b3986b", + "42639c": "694c30", + "5a4a21": "25253b", + "292942": "2a1512", + "b59c21": "57566f", + "73293a": "755237", + "d6bd52": "838098" + }, + "2": { + "d94352": "8c1b23", + "314263": "0e4333", + "efd684": "c2723a", + "d64252": "bc4b84", + "42639c": "1d6e47", + "5a4a21": "4e1915", + "292942": "091e16", + "b59c21": "85412d", + "73293a": "7b2363", + "d6bd52": "9a5524" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/2026.json b/public/images/pokemon/variant/back/2026.json new file mode 100644 index 00000000000..4fb224dd489 --- /dev/null +++ b/public/images/pokemon/variant/back/2026.json @@ -0,0 +1,31 @@ +{ + "1": { + "b45f25": "2d5261", + "552720": "162f4b", + "f9ed9f": "eb999a", + "e9be14": "945c7b", + "e3882d": "3d7375", + "646124": "492652", + "ecd8b7": "b4c2a5", + "fffdfb": "d6d9ca", + "846b5b": "467f85", + "965821": "2f4e6b", + "dfc043": "d17577", + "602c24": "162f4b", + "fef443": "c48081", + "993c20": "1d3a57" + }, + "2": { + "b45f25": "bd8551", + "552720": "43617f", + "e9be14": "1a3551", + "e3882d": "d3b06f", + "646124": "122140", + "ecd8b7": "5a6f90", + "fffdfb": "6d8297", + "846b5b": "202746", + "965821": "9cb3ca", + "fef443": "3a5873", + "993c20": "965636" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/2103.json b/public/images/pokemon/variant/back/2103.json new file mode 100644 index 00000000000..2e97727835a --- /dev/null +++ b/public/images/pokemon/variant/back/2103.json @@ -0,0 +1,28 @@ +{ + "1": { + "2f9934": "dea44c", + "9f6b41": "426378", + "70442e": "283f5b", + "e6ac5a": "869fdc", + "522f16": "131d33", + "9cbd4a": "9977dd", + "fff68b": "a3c4ed", + "36cc36": "f4e774", + "2d5826": "c8592a", + "7b5210": "373e85", + "ffffcd": "d3efff" + }, + "2": { + "2f9934": "3d324b", + "9f6b41": "ffdbe7", + "70442e": "d59cba", + "e6ac5a": "c84e7f", + "522f16": "925b81", + "9cbd4a": "824a96", + "fff68b": "eb748d", + "36cc36": "6a5b73", + "2d5826": "1f1a31", + "7b5210": "4e1044", + "ffffcd": "ffa29d" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/211.json b/public/images/pokemon/variant/back/211.json new file mode 100644 index 00000000000..01ae33500a4 --- /dev/null +++ b/public/images/pokemon/variant/back/211.json @@ -0,0 +1,22 @@ +{ + "1": { + "a5ad6b": "ad6643", + "194a52": "321128", + "dede94": "f1c17c", + "428494": "80294b", + "c5c57b": "dc9565", + "3a6363": "611a42", + "6b5231": "6d2c2c", + "73adb5": "a0415e" + }, + "2": { + "a5ad6b": "1e275b", + "194a52": "1c2f5b", + "dede94": "365492", + "428494": "60abdc", + "c5c57b": "2b3e7b", + "3a6363": "396796", + "6b5231": "181f46", + "73adb5": "8bd9ee" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/25-beauty-cosplay.json b/public/images/pokemon/variant/back/25-beauty-cosplay.json new file mode 100644 index 00000000000..216262b149b --- /dev/null +++ b/public/images/pokemon/variant/back/25-beauty-cosplay.json @@ -0,0 +1,30 @@ +{ + "1": { + "5e5e6b": "6c6e60", + "f7e652": "a3d1a8", + "cecab9": "cfc8aa", + "f7e860": "eddc78", + "4d88c4": "7976c6", + "f7bd21": "79b5a5", + "2d276d": "2f2768", + "9c5200": "315c75", + "39509d": "47449c", + "fffdea": "f8ffe3", + "f7cc2f": "d5ac44" + }, + "2": { + "1e1526": "a45233", + "5e5e6b": "8a2554", + "f7e652": "577b98", + "cecab9": "b84084", + "f7e860": "eddc78", + "4d88c4": "e4f6f1", + "f7bd21": "486689", + "2d276d": "454a61", + "9c5200": "283361", + "39509d": "9ec4cd", + "fffdea": "ea82a6", + "4f454c": "f1b571", + "f7cc2f": "d5ac44" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/25-cool-cosplay.json b/public/images/pokemon/variant/back/25-cool-cosplay.json new file mode 100644 index 00000000000..278feb070bd --- /dev/null +++ b/public/images/pokemon/variant/back/25-cool-cosplay.json @@ -0,0 +1,31 @@ +{ + "1": { + "171717": "2a1d36", + "c52119": "ad4e76", + "842222": "7b1f18", + "f7e652": "a3d1a8", + "fff7a5": "c4e3c3", + "f7bd21": "79b5a5", + "ba2b23": "b73850", + "9c5200": "1c4f75", + "d95b45": "cf6887", + "3b3b40": "4a3e46" + }, + "2": { + "171717": "a45233", + "656f86": "cf752b", + "a5b0b6": "f0b541", + "c52119": "ebc67c", + "842222": "1e1e43", + "f7e652": "577b98", + "fff7a5": "7b96aa", + "f7bd21": "445f8a", + "ba2b23": "2c2c47", + "55555e": "8f4b32", + "9c5200": "22325c", + "f4f7ab": "eadbb3", + "d95b45": "3a3f5e", + "3b3b40": "f1b571", + "272b2b": "7d3833" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/25-cosplay.json b/public/images/pokemon/variant/back/25-cosplay.json new file mode 100644 index 00000000000..c574d63d743 --- /dev/null +++ b/public/images/pokemon/variant/back/25-cosplay.json @@ -0,0 +1,26 @@ +{ + "1": { + "f7e652": "a3d1a8", + "fff7a5": "c4e3c3", + "c52119": "ad4e76", + "f7bd21": "79b5a5", + "52525a": "4f454c", + "9c5200": "315c75", + "292929": "1e1526", + "633108": "09406b", + "e65a42": "cf6182", + "de9400": "338087" + }, + "2": { + "f7e652": "577b98", + "fff7a5": "7b96aa", + "c52119": "ebc67c", + "f7bd21": "445f8a", + "52525a": "f1b571", + "9c5200": "23345e", + "292929": "a45233", + "633108": "22244f", + "e65a42": "eedd9c", + "de9400": "324472" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/25-cute-cosplay.json b/public/images/pokemon/variant/back/25-cute-cosplay.json new file mode 100644 index 00000000000..7b26b79d08f --- /dev/null +++ b/public/images/pokemon/variant/back/25-cute-cosplay.json @@ -0,0 +1,32 @@ +{ + "1": { + "752bd0": "5452b7", + "baa998": "bab699", + "fff7a5": "c4e3c3", + "f7e652": "a3d1a8", + "ea82a6": "e8848e", + "cf4770": "cf4a59", + "f3bace": "f2bbbb", + "853247": "85323c", + "f7ef97": "f0eaa8", + "52525a": "4f454c", + "292929": "30263b", + "f7bd21": "79b5a5", + "9c5200": "255e8a" + }, + "2": { + "752bd0": "7751c2", + "baa998": "d3ab5a", + "fff7a5": "7b96aa", + "f7e652": "577b98", + "ea82a6": "a4b95f", + "cf4770": "739b55", + "f3bace": "c5cc85", + "853247": "254b30", + "f7ef97": "ebe7b7", + "52525a": "f1b571", + "292929": "a45233", + "f7bd21": "445f8a", + "9c5200": "23345e" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/25-gigantamax.json b/public/images/pokemon/variant/back/25-gigantamax.json new file mode 100644 index 00000000000..1c47104e04d --- /dev/null +++ b/public/images/pokemon/variant/back/25-gigantamax.json @@ -0,0 +1,30 @@ +{ + "1": { + "623108": "09406b", + "c52018": "ad4e76", + "de9400": "338087", + "fefefe": "ffffff", + "f6bd20": "79b5a5", + "fff6a4": "c4e3c3", + "fff9c2": "b8ffd9", + "e65a41": "cf6182", + "9c5200": "315c75", + "f8fc4b": "5bc28b", + "f6e652": "a3d1a8" + }, + "2": { + "623108": "22244f", + "c52018": "ebc67c", + "de9400": "324472", + "fefefe": "ffffff", + "f6bd20": "445f8a", + "fff6a4": "7b96aa", + "fff9c2": "83b1d2", + "e65a41": "eedd9c", + "9c5200": "23345e", + "f8fc4b": "326a9f", + "695d65": "f1b571", + "f6e652": "577b98", + "323133": "d99362" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/25-partner.json b/public/images/pokemon/variant/back/25-partner.json new file mode 100644 index 00000000000..c20fae48a34 --- /dev/null +++ b/public/images/pokemon/variant/back/25-partner.json @@ -0,0 +1,26 @@ +{ + "1": { + "45454a": "4f454c", + "9c5200": "315c75", + "de9400": "338087", + "171717": "1e1526", + "c52119": "ad4e76", + "633108": "09406b", + "e65a42": "cf6182", + "f7e652": "a3d1a8", + "fff7a5": "c4e3c3", + "f7bd21": "79b5a5" + }, + "2": { + "45454a": "f1b571", + "9c5200": "23345e", + "de9400": "324472", + "171717": "a45233", + "c52119": "ebc67c", + "633108": "22244f", + "e65a42": "eedd9c", + "f7e652": "577b98", + "fff7a5": "7b96aa", + "f7bd21": "445f8a" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/25-smart-cosplay.json b/public/images/pokemon/variant/back/25-smart-cosplay.json new file mode 100644 index 00000000000..50749b31d8b --- /dev/null +++ b/public/images/pokemon/variant/back/25-smart-cosplay.json @@ -0,0 +1,32 @@ +{ + "1": { + "fffdea": "f8ffe3", + "b7a599": "bab699", + "60b553": "76a848", + "f7e652": "a3d1a8", + "366635": "3e5b2f", + "95635b": "91685f", + "171717": "1e1526", + "5f3434": "573b38", + "54545c": "55555e", + "52525a": "4f454c", + "292929": "272b2b", + "f7bd21": "79b5a5", + "9c5200": "315c75" + }, + "2": { + "fffdea": "f2f0df", + "b7a599": "a7b6b9", + "60b553": "dfb053", + "f7e652": "577b98", + "366635": "ab5130", + "95635b": "a09ea3", + "171717": "a45233", + "5f3434": "666060", + "54545c": "45525c", + "52525a": "f1b571", + "292929": "202937", + "f7bd21": "445f8a", + "9c5200": "23345e" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/25-tough-cosplay.json b/public/images/pokemon/variant/back/25-tough-cosplay.json new file mode 100644 index 00000000000..49c50d17ad2 --- /dev/null +++ b/public/images/pokemon/variant/back/25-tough-cosplay.json @@ -0,0 +1,35 @@ +{ + "1": { + "e37511": "d1694f", + "bf2629": "cf6a59", + "8d2b1d": "bf3638", + "c52119": "ad4e76", + "46464d": "2b3340", + "292929": "1e1526", + "f7bd21": "79b5a5", + "fbab33": "de9764", + "e65a42": "cf6182", + "cecab9": "cfc8aa", + "52525a": "4f454c", + "f7e652": "a3d1a8", + "9c5200": "315c75" + }, + "2": { + "e37511": "60448d", + "bf2629": "826694", + "f8ffe3": "e8e3e4", + "8d2b1d": "3d3f7d", + "c52119": "ebc67c", + "46464d": "2b3340", + "292929": "a45233", + "f7bd21": "445f8a", + "fbab33": "845ea1", + "e65a42": "eedd9c", + "cecab9": "beb1b4", + "8e2525": "242866", + "52525a": "f1b571", + "f7e652": "577b98", + "272b2b": "162231", + "9c5200": "23345e" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/25.json b/public/images/pokemon/variant/back/25.json new file mode 100644 index 00000000000..c20fae48a34 --- /dev/null +++ b/public/images/pokemon/variant/back/25.json @@ -0,0 +1,26 @@ +{ + "1": { + "45454a": "4f454c", + "9c5200": "315c75", + "de9400": "338087", + "171717": "1e1526", + "c52119": "ad4e76", + "633108": "09406b", + "e65a42": "cf6182", + "f7e652": "a3d1a8", + "fff7a5": "c4e3c3", + "f7bd21": "79b5a5" + }, + "2": { + "45454a": "f1b571", + "9c5200": "23345e", + "de9400": "324472", + "171717": "a45233", + "c52119": "ebc67c", + "633108": "22244f", + "e65a42": "eedd9c", + "f7e652": "577b98", + "fff7a5": "7b96aa", + "f7bd21": "445f8a" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/26.json b/public/images/pokemon/variant/back/26.json new file mode 100644 index 00000000000..758faf12c97 --- /dev/null +++ b/public/images/pokemon/variant/back/26.json @@ -0,0 +1,34 @@ +{ + "1": { + "63636b": "4f454c", + "101011": "293059", + "944242": "395a80", + "bd5a31": "386d82", + "e6bd84": "a4bda7", + "ffbd00": "b3596b", + "5a2929": "293059", + "3a3a42": "30263b", + "8c6310": "8c3c4c", + "ffde5a": "cf7878", + "f7ad29": "76a68b", + "734231": "6e2f33", + "ffefd6": "c8d4ba", + "de7b31": "539190" + }, + "2": { + "542127": "905331", + "101011": "202a60", + "944242": "2d3b80", + "bd5a31": "375681", + "e6bd84": "a6b5ab", + "ffbd00": "f3cf91", + "5a2929": "202a60", + "8c6310": "c79b5a", + "ffde5a": "f2e4b6", + "f7ad29": "6385ab", + "734231": "bf8445", + "ffefd6": "cfc4b5", + "de7b31": "4d6f98", + "643034": "2e4685" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/276.json b/public/images/pokemon/variant/back/276.json new file mode 100644 index 00000000000..e0fb6b93467 --- /dev/null +++ b/public/images/pokemon/variant/back/276.json @@ -0,0 +1,32 @@ +{ + "1": { + "bdbdcc": "b5b5d5", + "bdbdce": "26523c", + "943a52": "ad8634", + "ffffff": "3c6a3d", + "a57331": "784524", + "212952": "12223d", + "3a3a31": "3e3e3e", + "5a6b9c": "2a596b", + "e69410": "bc7532", + "524a29": "4b210d", + "fffffd": "fffffe", + "314a7b": "1a385a", + "ce5273": "cebf49" + }, + "2": { + "bdbdcc": "b5b5d5", + "bdbdce": "453f63", + "943a52": "8ec08b", + "ffffff": "635d81", + "a57331": "4a323a", + "212952": "191222", + "3a3a31": "442c34", + "5a6b9c": "3c2f48", + "e69410": "63414f", + "524a29": "381f2c", + "fffffd": "fffffe", + "314a7b": "282037", + "ce5273": "bcd59d" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/277.json b/public/images/pokemon/variant/back/277.json new file mode 100644 index 00000000000..5a3e049f5f5 --- /dev/null +++ b/public/images/pokemon/variant/back/277.json @@ -0,0 +1,36 @@ +{ + "1": { + "dea531": "bc7532", + "425a7b": "2a596b", + "ffffff": "3c6a3d", + "b5b5d6": "26523c", + "9c3152": "ad8634", + "945a10": "784524", + "5a5a5a": "b58251", + "63213a": "603c1d", + "c55a73": "cebf49", + "294263": "1a385a", + "292952": "12223d", + "fffffd": "fffffe", + "524221": "4b210d", + "b5b5d4": "b5b5d5", + "31313a": "89572a" + }, + "2": { + "dea531": "63414f", + "425a7b": "3c2f48", + "ffffff": "635d81", + "b5b5d6": "453f63", + "9c3152": "8ec08b", + "945a10": "4a323a", + "5a5a5a": "5d454d", + "63213a": "5d9469", + "c55a73": "bcd59d", + "294263": "282037", + "292952": "191222", + "fffffd": "fffffe", + "524221": "381f2c", + "b5b5d4": "b5b5d5", + "31313a": "442c34" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/359-mega.json b/public/images/pokemon/variant/back/359-mega.json new file mode 100644 index 00000000000..d81d313a1de --- /dev/null +++ b/public/images/pokemon/variant/back/359-mega.json @@ -0,0 +1,24 @@ +{ + "1": { + "ffffff": "61a8ab", + "414a6a": "421e4a", + "b4b4d5": "458196", + "293939": "27122b", + "8b8bac": "3b6987", + "525a7b": "59274e", + "d5deee": "589aa6", + "737bac": "874267", + "626283": "2a3163" + }, + "2": { + "ffffff": "9e363b", + "414a6a": "b39279", + "b4b4d5": "752f40", + "293939": "996e5f", + "8b8bac": "59213b", + "525a7b": "dfd1ae", + "d5deee": "8f2f41", + "737bac": "f5f1cb", + "626283": "42122d" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/359.json b/public/images/pokemon/variant/back/359.json new file mode 100644 index 00000000000..4ccca6800b3 --- /dev/null +++ b/public/images/pokemon/variant/back/359.json @@ -0,0 +1,24 @@ +{ + "1": { + "424a6b": "421e4a", + "293a3a": "27122b", + "737bad": "874267", + "d6deef": "589aa6", + "525a7b": "612b54", + "8c8cad": "3b6987", + "636384": "2a3163", + "b5b5d6": "458196", + "ffffff": "61a8ab" + }, + "2": { + "424a6b": "b39279", + "293a3a": "996e5f", + "737bad": "f5f1cb", + "d6deef": "8f2f41", + "525a7b": "e0c79f", + "8c8cad": "59213b", + "636384": "42122d", + "b5b5d6": "752f40", + "ffffff": "9e363b" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/377.json b/public/images/pokemon/variant/back/377.json new file mode 100644 index 00000000000..1ab9bce073f --- /dev/null +++ b/public/images/pokemon/variant/back/377.json @@ -0,0 +1,26 @@ +{ + "1": { + "b54200": "13512f", + "efad6b": "aac669", + "948c73": "2e4e7b", + "cec5ad": "4d8ba8", + "bd633a": "22773f", + "ef843a": "56963a", + "b5ad94": "3d6d8d", + "e6dead": "659db5", + "524a29": "182238", + "efe6de": "84c7ca" + }, + "2": { + "b54200": "3d0933", + "efad6b": "a54c5e", + "948c73": "262847", + "cec5ad": "303353", + "bd633a": "561934", + "ef843a": "722a41", + "b5ad94": "394170", + "e6dead": "383e6a", + "524a29": "161129", + "efe6de": "4d5784" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/378.json b/public/images/pokemon/variant/back/378.json new file mode 100644 index 00000000000..74ef70cbcec --- /dev/null +++ b/public/images/pokemon/variant/back/378.json @@ -0,0 +1,29 @@ +{ + "0": { + "ffffff": "d7b6f1", + "6bb5d6": "414184", + "293a7b": "101238", + "9cceff": "6f66a7", + "3a6b8c": "191d4c", + "bdefff": "9983c4", + "5a84ad": "282e64" + }, + "1": { + "6bb5d6": "bf344a", + "bdefff": "ffb88d", + "9cceff": "eb5d56", + "293a7b": "400b1c", + "ffffff": "fff7d3", + "3a6b8c": "64132c", + "5a84ad": "981d43" + }, + "2": { + "6bb5d6": "323232", + "bdefff": "5b5b5b", + "9cceff": "424242", + "293a7b": "100f17", + "ffffff": "8c8c8c", + "3a6b8c": "14131a", + "5a84ad": "212121" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/379.json b/public/images/pokemon/variant/back/379.json new file mode 100644 index 00000000000..e99b7d8c171 --- /dev/null +++ b/public/images/pokemon/variant/back/379.json @@ -0,0 +1,26 @@ +{ + "1": { + "4a5a5a": "34366f", + "3a4252": "292960", + "d6ced6": "cc9c65", + "848c84": "4c5c91", + "ffffff": "fff3aa", + "dedede": "f0d185", + "b5adad": "a66f52", + "4a4a4a": "533329", + "84847b": "80503b", + "3e4f4f": "542618" + }, + "2": { + "4a5a5a": "df8533", + "3a4252": "e29631", + "d6ced6": "cd5521", + "848c84": "ffcd49", + "ffffff": "ffb056", + "dedede": "e87537", + "b5adad": "ad2d1e", + "4a4a4a": "521328", + "84847b": "81222b", + "3e4f4f": "54051f" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/39.json b/public/images/pokemon/variant/back/39.json new file mode 100644 index 00000000000..59d78f7958a --- /dev/null +++ b/public/images/pokemon/variant/back/39.json @@ -0,0 +1,16 @@ +{ + "1": { + "6b5263": "153427", + "ffada5": "c5ebd5", + "e67384": "81c2b8", + "a51021": "3a6472", + "ffcec5": "e5ffec" + }, + "2": { + "6b5263": "737454", + "ffada5": "f5e884", + "e67384": "f5c45b", + "a51021": "9c5200", + "ffcec5": "fff9bf" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/390.json b/public/images/pokemon/variant/back/390.json new file mode 100644 index 00000000000..94bfe837547 --- /dev/null +++ b/public/images/pokemon/variant/back/390.json @@ -0,0 +1,32 @@ +{ + "1": { + "7a410f": "994943", + "e63131": "1db978", + "b56b29": "64464d", + "9c3131": "2d8766", + "947308": "a86256", + "7b4210": "382029", + "ef6b6b": "81dc3f", + "f06e6e": "76c96d", + "ffd631": "eafe67", + "ffe6ad": "edc6a4", + "e63a42": "5db95b", + "de8400": "876766", + "deb552": "cc9176" + }, + "2": { + "7a410f": "626678", + "e63131": "b5b0f3", + "b56b29": "293b69", + "9c3131": "422e6f", + "947308": "818596", + "7b4210": "171f46", + "ef6b6b": "cbcfff", + "f06e6e": "cb96e5", + "ffd631": "f3f8fe", + "ffe6ad": "d3d5e0", + "e63a42": "8457b0", + "de8400": "3e5f8a", + "deb552": "a5a9b8" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/391.json b/public/images/pokemon/variant/back/391.json new file mode 100644 index 00000000000..6c21033ceba --- /dev/null +++ b/public/images/pokemon/variant/back/391.json @@ -0,0 +1,36 @@ +{ + "1": { + "8c7342": "a86256", + "cf451b": "2d8766", + "c59463": "cc9176", + "dee6e6": "dac99d", + "9c5219": "64464d", + "ffffff": "faf7d4", + "735a10": "6b2b28", + "efce94": "edc6a4", + "ffce42": "eafe67", + "ffcd45": "f69044", + "1052b5": "ba2342", + "6b3a08": "382029", + "d68c29": "876766", + "ce4219": "1db978", + "efa542": "cd5528" + }, + "2": { + "8c7342": "818596", + "cf451b": "8457b0", + "c59463": "a5a9b8", + "dee6e6": "dca15d", + "9c5219": "293b69", + "ffffff": "ffe175", + "735a10": "626678", + "efce94": "d3d5e0", + "ffce42": "f3f8fe", + "ffcd45": "e8fdff", + "1052b5": "e09f2f", + "6b3a08": "171f46", + "d68c29": "3e5f8a", + "ce4219": "b5b0f3", + "efa542": "b0cbd4" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/392.json b/public/images/pokemon/variant/back/392.json new file mode 100644 index 00000000000..44c2930f77d --- /dev/null +++ b/public/images/pokemon/variant/back/392.json @@ -0,0 +1,42 @@ +{ + "1": { + "e68c5a": "876766", + "6b3a10": "382029", + "e63740": "2d8766", + "bdc5de": "dac99d", + "a56342": "64464d", + "845a08": "9b2719", + "737384": "9f8876", + "ffdf4f": "eafe67", + "e63a42": "1db978", + "c59c21": "cd5528", + "ffde52": "f69044", + "ffdd47": "e8a82a", + "c79e22": "cf8021", + "ffffff": "faf7d4", + "19427b": "581225", + "f78c4a": "81dc3f", + "3a73a5": "972733", + "842931": "174c48" + }, + "2": { + "e68c5a": "3e5f8a", + "6b3a10": "171f46", + "e63740": "8457b0", + "bdc5de": "dca15d", + "a56342": "293b69", + "845a08": "617995", + "737384": "a15a34", + "ffdf4f": "f3f8fe", + "e63a42": "b5b0f3", + "c59c21": "a0c0cd", + "ffde52": "e8fdff", + "ffdd47": "fff8e5", + "c79e22": "ccbdab", + "ffffff": "ffe175", + "19427b": "4d5196", + "f78c4a": "cbcfff", + "3a73a5": "9c96e2", + "842931": "422e6f" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/40.json b/public/images/pokemon/variant/back/40.json new file mode 100644 index 00000000000..21e5ef69cd1 --- /dev/null +++ b/public/images/pokemon/variant/back/40.json @@ -0,0 +1,17 @@ +{ + "1": { + "f77b94": "81c2b8", + "ce6b63": "82b8a9", + "8c4242": "3a6472", + "ffadbd": "c5ebd5" + }, + "2": { + "737373": "3b1f24", + "f77b94": "f5c45b", + "ffffff": "d07439", + "ce6b63": "e6a54c", + "e6dee6": "bc4e24", + "8c4242": "9c5200", + "ffadbd": "f5e884" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/430.json b/public/images/pokemon/variant/back/430.json new file mode 100644 index 00000000000..2edd26708c9 --- /dev/null +++ b/public/images/pokemon/variant/back/430.json @@ -0,0 +1,34 @@ +{ + "1": { + "31313a": "280113", + "8c313a": "b3986b", + "5a5a3a": "1e1e2c", + "545454": "3c3b4d", + "a3a3b5": "7a1e21", + "3a5a9c": "694c30", + "525151": "380514", + "a7a7b8": "60606c", + "efeff8": "b9382d", + "4a2121": "755237", + "ad943a": "3f3e50", + "f7de3a": "61616d", + "3a3a5a": "422e26", + "29213a": "271b1a" + }, + "2": { + "31313a": "080735", + "8c313a": "bc4b84", + "5a5a3a": "4e1915", + "545454": "85412d", + "a3a3b5": "4f358e", + "3a5a9c": "1d6e47", + "525151": "1c1754", + "a7a7b8": "c27238", + "efeff8": "975bc2", + "4a2121": "7b2363", + "ad943a": "85402c", + "f7de3a": "c2723a", + "3a3a5a": "0e4333", + "29213a": "091e16" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/455.json b/public/images/pokemon/variant/back/455.json new file mode 100644 index 00000000000..d10a2ff0741 --- /dev/null +++ b/public/images/pokemon/variant/back/455.json @@ -0,0 +1,34 @@ +{ + "1": { + "f7ce31": "7c5d53", + "9c214a": "451e14", + "2b453d": "523b3c", + "3a5a3a": "b34a82", + "5a6342": "826660", + "8c9452": "b89d8c", + "846b31": "301e20", + "bdc57b": "efd9ba", + "e62919": "775331", + "63843a": "e880ab", + "8f9653": "e2b0bc", + "29423a": "7e3b67", + "c59c31": "4d3432" + }, + "2": { + "f7ce31": "518078", + "ffffff": "affffe", + "9c214a": "1e4340", + "2b453d": "151926", + "3a5a3a": "37818a", + "5a6342": "2d304e", + "8c9452": "424d6e", + "846b31": "122e2f", + "bdc57b": "6679a1", + "e62919": "406b64", + "63843a": "74ddcd", + "422919": "0d2626", + "8f9653": "3d909b", + "29423a": "123247", + "c59c31": "244a45" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/486.json b/public/images/pokemon/variant/back/486.json new file mode 100644 index 00000000000..36a343a2966 --- /dev/null +++ b/public/images/pokemon/variant/back/486.json @@ -0,0 +1,32 @@ +{ + "1": { + "fafafa": "ffc245", + "adadc5": "ca7426", + "8c94ad": "13081a", + "374859": "6b76a4", + "d6ced6": "e89b34", + "f7d65a": "ce5129", + "5f6d7d": "7b2a19", + "ffffff": "eb8746", + "21846b": "90a7cd", + "3a4a5a": "5e1e33", + "c59c52": "a12612", + "7b6321": "3d021b", + "4aa563": "e2f2ff" + }, + "2": { + "fafafa": "88b06f", + "adadc5": "4f673a", + "8c94ad": "494922", + "374859": "2f1a18", + "d6ced6": "6e884b", + "f7d65a": "8f9b9e", + "5f6d7d": "374427", + "ffffff": "a8afaf", + "21846b": "492f29", + "3a4a5a": "3b1930", + "c59c52": "5d717a", + "7b6321": "384751", + "4aa563": "755648" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/501.json b/public/images/pokemon/variant/back/501.json new file mode 100644 index 00000000000..3476b2710b1 --- /dev/null +++ b/public/images/pokemon/variant/back/501.json @@ -0,0 +1,24 @@ +{ + "1": { + "215a63": "1e1a35", + "c5c5ce": "e3c2ca", + "4a6bad": "9660d1", + "294252": "241e44", + "21949c": "373049", + "29bdc5": "5d4a70", + "31426b": "4b349e", + "212142": "241e44" + }, + "2": { + "8c8c9c": "8f7491", + "4a4a4a": "715b72", + "215a63": "000000", + "c5c5ce": "ba9bc1", + "4a6bad": "589787", + "21949c": "321e1e", + "29bdc5": "5e3e38", + "31426b": "3c706b", + "ffffff": "f5e9f4", + "212142": "104432" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/502.json b/public/images/pokemon/variant/back/502.json new file mode 100644 index 00000000000..26772013df7 --- /dev/null +++ b/public/images/pokemon/variant/back/502.json @@ -0,0 +1,28 @@ +{ + "1": { + "4a4a4a": "20193d", + "31528c": "9d5bc9", + "293a6b": "503e8e", + "7b5a10": "d877cd", + "52bdbd": "624060", + "c59429": "ff9ef3", + "efd68c": "f2d5ee", + "313131": "120f33", + "315a73": "1e1624", + "218c94": "39273d", + "fffdfd": "ebb9c4" + }, + "2": { + "4a4a4a": "2c3940", + "31528c": "5e3e38", + "293a6b": "321e1e", + "7b5a10": "0d5656", + "52bdbd": "8b7566", + "c59429": "488383", + "efd68c": "63c7bd", + "313131": "1f2b36", + "315a73": "483026", + "218c94": "684f44", + "fffdfd": "ffffc2" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/503.json b/public/images/pokemon/variant/back/503.json new file mode 100644 index 00000000000..9eb2168dd5b --- /dev/null +++ b/public/images/pokemon/variant/back/503.json @@ -0,0 +1,33 @@ +{ + "1": { + "84a5a5": "563785", + "4a4a4a": "5e283e", + "215a9c": "4d244b", + "8aa3a3": "a05982", + "d65263": "b73891", + "ad945a": "db87d1", + "7b6342": "975fad", + "474a46": "2b1838", + "fffeff": "ebb9c4", + "213a63": "28142c", + "4a4a4c": "6b3e51", + "d6c57b": "f2d5ee", + "5a7373": "332a59", + "8da8a8": "a58b90" + }, + "2": { + "4a4a4a": "c2700d", + "215a9c": "5e3e38", + "8aa3a3": "efa838", + "d65263": "41857b", + "ad945a": "488383", + "7b6342": "0d5656", + "474a46": "462d27", + "fffeff": "f9df58", + "213a63": "321e1e", + "4a4a4c": "c2700d", + "d6c57b": "63c7bd", + "5a7373": "2a5c57", + "8da8a8": "84a5a5" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/527.json b/public/images/pokemon/variant/back/527.json new file mode 100644 index 00000000000..67767eefcb3 --- /dev/null +++ b/public/images/pokemon/variant/back/527.json @@ -0,0 +1,20 @@ +{ + "1": { + "424a5a": "866ca1", + "6b94ad": "6e315e", + "73adc5": "853e66", + "292931": "55457a", + "addef7": "914a6e", + "4a6b7b": "562259", + "27272f": "361538" + }, + "2": { + "424a5a": "bf3f75", + "6b94ad": "db843d", + "73adc5": "e8b04f", + "292931": "8c2961", + "addef7": "f7e05c", + "4a6b7b": "994d22", + "27272f": "7c3622" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/528.json b/public/images/pokemon/variant/back/528.json new file mode 100644 index 00000000000..fb91d0318a5 --- /dev/null +++ b/public/images/pokemon/variant/back/528.json @@ -0,0 +1,30 @@ +{ + "1": { + "317b94": "6e315e", + "4c4c54": "582253", + "313131": "55457a", + "de8c84": "6bc7e8", + "6b7b84": "439ca1", + "ceefff": "a6ffd7", + "bdbdce": "76debd", + "19a5ce": "914a6e", + "944a4a": "4874b8", + "313132": "451b41", + "4a4a52": "866ca1", + "47474f": "2e6f7a" + }, + "2": { + "317b94": "e0b49a", + "4c4c54": "a6705e", + "313131": "701c4c", + "de8c84": "7b5ebf", + "6b7b84": "994d22", + "ceefff": "f7e05c", + "bdbdce": "db843d", + "19a5ce": "f9fae3", + "944a4a": "393582", + "313132": "a87354", + "4a4a52": "bf3f75", + "47474f": "6b2314" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/587.json b/public/images/pokemon/variant/back/587.json new file mode 100644 index 00000000000..85c4c20f4f0 --- /dev/null +++ b/public/images/pokemon/variant/back/587.json @@ -0,0 +1,28 @@ +{ + "1": { + "212121": "1d352a", + "d6a531": "a84223", + "b58c08": "681c0e", + "bda573": "5a9fbf", + "6b5a31": "16223d", + "cec5ad": "8bd5dc", + "7f6b0d": "3b1c1b", + "846e07": "35708c", + "ffd600": "d55b19", + "9c9c73": "406da4", + "313131": "2b5d3f" + }, + "2": { + "212121": "372a5b", + "d6a531": "6597cd", + "b58c08": "4879af", + "bda573": "9b4072", + "6b5a31": "321832", + "cec5ad": "c4658e", + "7f6b0d": "355c90", + "846e07": "723158", + "ffd600": "8bcaee", + "9c9c73": "7b3760", + "313131": "5e3a86" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/588.json b/public/images/pokemon/variant/back/588.json new file mode 100644 index 00000000000..c00f1886940 --- /dev/null +++ b/public/images/pokemon/variant/back/588.json @@ -0,0 +1,20 @@ +{ + "1": { + "213a5a": "2f185b", + "316bff": "8150a7", + "4a4a4a": "64242d", + "313131": "38131d", + "000000": "ffffff", + "528cff": "c682d6", + "3a5284": "492c72" + }, + "2": { + "213a5a": "44446f", + "316bff": "d2cdeb", + "4a4a4a": "28334f", + "313131": "182138", + "000000": "ffffff", + "528cff": "f9f3ff", + "3a5284": "7777a7" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/589.json b/public/images/pokemon/variant/back/589.json new file mode 100644 index 00000000000..b499504daa3 --- /dev/null +++ b/public/images/pokemon/variant/back/589.json @@ -0,0 +1,30 @@ +{ + "1": { + "c5c5c5": "f9c347", + "ef2952": "eb8343", + "bd2152": "c44126", + "840808": "931119", + "bd9c19": "b8c5e5", + "e65a10": "614593", + "6b6b6b": "b34516", + "294a84": "7436a4", + "195abd": "9448bf", + "94949c": "dc862d", + "000000": "ffffff", + "3a424a": "69130d" + }, + "2": { + "c5c5c5": "6e8e99", + "ef2952": "f7efff", + "bd2152": "beb7df", + "840808": "72709e", + "bd9c19": "a42641", + "e65a10": "ffe8c3", + "6b6b6b": "293a52", + "294a84": "4f3d33", + "195abd": "785442", + "94949c": "3f6372", + "000000": "ffffff", + "3a424a": "1b253d" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/590.json b/public/images/pokemon/variant/back/590.json new file mode 100644 index 00000000000..7d19153ec2c --- /dev/null +++ b/public/images/pokemon/variant/back/590.json @@ -0,0 +1,30 @@ +{ + "1": { + "684c30": "0d9999", + "9c3a3a": "71de8c", + "846b63": "0fad9a", + "9c3a7b": "88af70", + "6b4a31": "0d9999", + "422929": "0a5870", + "7b3131": "49ad77", + "de5a52": "e6ffc1", + "d6639c": "f4ebba", + "7a3730": "49aa87", + "c5b59c": "47d1b5", + "fff7e6": "afecc6" + }, + "2": { + "684c30": "2b5caf", + "9c3a3a": "e098cd", + "846b63": "64a3bc", + "9c3a7b": "b1c4dd", + "6b4a31": "f2f7f9", + "422929": "b9d9e5", + "7b3131": "ad629a", + "de5a52": "ffbfcb", + "d6639c": "f2f7f9", + "7a3730": "404f6b", + "c5b59c": "498cd3", + "fff7e6": "6ac2e2" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/591.json b/public/images/pokemon/variant/back/591.json new file mode 100644 index 00000000000..0d369a42c02 --- /dev/null +++ b/public/images/pokemon/variant/back/591.json @@ -0,0 +1,28 @@ +{ + "1": { + "cec5c5": "afecc6", + "291919": "094164", + "de528c": "e6ffc1", + "634c42": "348999", + "423331": "094164", + "9c9484": "47d1b5", + "634d42": "0c7588", + "634a42": "0d9999", + "423131": "0a5870", + "6b314a": "49ad77", + "ad3163": "71de8c" + }, + "2": { + "cec5c5": "6ac2e2", + "291919": "5e718e", + "de528c": "ffbfcb", + "634c42": "3f7dc7", + "423331": "223656", + "9c9484": "56a1e2", + "634d42": "2b5caf", + "634a42": "f2f7f9", + "423131": "9bb6c1", + "6b314a": "ad629a", + "ad3163": "e098cd" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/616.json b/public/images/pokemon/variant/back/616.json new file mode 100644 index 00000000000..a883b42edc8 --- /dev/null +++ b/public/images/pokemon/variant/back/616.json @@ -0,0 +1,26 @@ +{ + "1": { + "3a8442": "4e3671", + "5a5a7b": "b34516", + "9494ad": "dc862d", + "630021": "204b4f", + "b5214a": "346c65", + "ff4a7b": "6ba779", + "de3163": "4a8474", + "29315a": "69130d", + "c5c5d6": "f9c347", + "000000": "ffffff" + }, + "2": { + "3a8442": "d6aa53", + "5a5a7b": "293a52", + "9494ad": "3f6372", + "630021": "2e3469", + "b5214a": "4f62a4", + "ff4a7b": "8cb0d6", + "de3163": "6b8bbf", + "29315a": "1b253d", + "c5c5d6": "6e8e99", + "000000": "ffffff" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/617.json b/public/images/pokemon/variant/back/617.json new file mode 100644 index 00000000000..93310065d35 --- /dev/null +++ b/public/images/pokemon/variant/back/617.json @@ -0,0 +1,30 @@ +{ + "1": { + "ffffff": "fff47e", + "a5846b": "5a6675", + "42b55a": "4e3671", + "c53a6b": "427b6b", + "636363": "c46d31", + "bdbdce": "df9847", + "527b42": "362658", + "732931": "214c49", + "ff4a7b": "6ba779", + "6b84c5": "eef5ff", + "293a6b": "69719e", + "000000": "ffffff", + "3a2919": "192638", + "5a6384": "b8c5e5" + }, + "2": { + "a5846b": "637974", + "42b55a": "415c69", + "c53a6b": "dcaa47", + "527b42": "2d3d52", + "ff4a7b": "ffee72", + "6b84c5": "b43d40", + "293a6b": "461b2e", + "000000": "ffffff", + "3a2919": "2a2235", + "5a6384": "7b2c3d" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/621.json b/public/images/pokemon/variant/back/621.json new file mode 100644 index 00000000000..cf80562d31f --- /dev/null +++ b/public/images/pokemon/variant/back/621.json @@ -0,0 +1,26 @@ +{ + "1": { + "8c7b5a": "73654b", + "940042": "1a2248", + "104a8c": "7e231b", + "635231": "605127", + "efc500": "5c7886", + "103163": "601111", + "521031": "0f1330", + "d60042": "26335d", + "316bad": "a13b2c", + "d65273": "be5b5e" + }, + "2": { + "8c7b5a": "da8921", + "940042": "177297", + "104a8c": "c9bb9a", + "635231": "be6e18", + "efc500": "ffd437", + "103163": "a0896b", + "521031": "0f4973", + "d60042": "24aec0", + "316bad": "e3ddbd", + "d65273": "c583a5" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/6503.json b/public/images/pokemon/variant/back/6503.json new file mode 100644 index 00000000000..455b06a69d6 --- /dev/null +++ b/public/images/pokemon/variant/back/6503.json @@ -0,0 +1,38 @@ +{ + "1": { + "282f62": "f7d9de", + "84a5a5": "563785", + "a82c47": "d45b9e", + "8aa3a3": "d3a0bb", + "faf9f9": "f6f4f4", + "494a48": "3d2439", + "1d3962": "28142c", + "474a46": "2b1838", + "d75063": "b73891", + "fbfcfa": "fafcf9", + "324149": "363442", + "1e224e": "dc95ae", + "6b1c34": "8f3396", + "181531": "a26579", + "5a7373": "332a59", + "8da8a8": "a58b90", + "1e5b9b": "4d244b" + }, + "2": { + "282f62": "efdfee", + "84a5a5": "41857b", + "a82c47": "8abfb1", + "8aa3a3": "232d2e", + "faf9f9": "2c3940", + "494a48": "181f20", + "1d3962": "321e1e", + "474a46": "181f20", + "d75063": "8f65d8", + "fbfcfa": "fcfdfc", + "1e224e": "ba9bc1", + "6b1c34": "6d9d9a", + "181531": "715b72", + "5a7373": "2a5c57", + "1e5b9b": "5e3e38" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/656.json b/public/images/pokemon/variant/back/656.json new file mode 100644 index 00000000000..34b11bfab78 --- /dev/null +++ b/public/images/pokemon/variant/back/656.json @@ -0,0 +1,24 @@ +{ + "1": { + "838394": "4d7dc5", + "7bcdff": "9c75c2", + "62ace6": "8363af", + "ffffff": "b1e5ff", + "396a83": "362864", + "9c9cc5": "5385c7", + "cdcde6": "7eb7e8", + "174592": "198158", + "5a94cd": "7054a4" + }, + "2": { + "838394": "cc6845", + "7bcdff": "dd6155", + "62ace6": "c44848", + "ffffff": "fff4bd", + "396a83": "5c0d33", + "9c9cc5": "c96a48", + "cdcde6": "f7b785", + "174592": "198158", + "5a94cd": "a92f3f" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/657.json b/public/images/pokemon/variant/back/657.json new file mode 100644 index 00000000000..083a9dba0a6 --- /dev/null +++ b/public/images/pokemon/variant/back/657.json @@ -0,0 +1,24 @@ +{ + "1": { + "f8f8f8": "8dcfff", + "737373": "0f3f82", + "0b566a": "281f52", + "002c58": "1c0726", + "bfbfbf": "4386df", + "006ba6": "4e1852", + "0b4a7a": "340f3d", + "41ccf5": "7755a7", + "2896b5": "4b3578" + }, + "2": { + "f8f8f8": "fff6c7", + "737373": "df6a50", + "0b566a": "7e1628", + "002c58": "0c3b54", + "bfbfbf": "ffc996", + "006ba6": "239c91", + "0b4a7a": "156f78", + "41ccf5": "dd7355", + "2896b5": "a92f3a" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/658-ash.json b/public/images/pokemon/variant/back/658-ash.json new file mode 100644 index 00000000000..370d5df8081 --- /dev/null +++ b/public/images/pokemon/variant/back/658-ash.json @@ -0,0 +1,38 @@ +{ + "1": { + "265595": "432b6c", + "de3431": "3fca9f", + "f8f8f8": "a1e9f0", + "7b282e": "0e3e81", + "6b1d1d": "206d74", + "134e52": "062e3c", + "bfb169": "165e78", + "ffb2bf": "b7e9ff", + "bf4c60": "4386df", + "282c35": "271f4c", + "f2798d": "8dcfff", + "268794": "1c3e58", + "3e7acc": "6b4592", + "7ddeff": "7ddcd6", + "4ebdd9": "41a7b0", + "18335c": "170738" + }, + "2": { + "265595": "cc7251", + "de3431": "9ceec6", + "f8f8f8": "89d2b8", + "7b282e": "152a5c", + "6b1d1d": "356e8d", + "134e52": "0d1e3e", + "bfb169": "4d2637", + "ffb2bf": "86d6b6", + "bf4c60": "32738b", + "282c35": "4d2637", + "f2798d": "5eb4a9", + "268794": "1c3e58", + "3e7acc": "ecbb7a", + "7ddeff": "46988d", + "4ebdd9": "2f6e74", + "18335c": "9f2727" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/658.json b/public/images/pokemon/variant/back/658.json new file mode 100644 index 00000000000..c1bb4222ce4 --- /dev/null +++ b/public/images/pokemon/variant/back/658.json @@ -0,0 +1,26 @@ +{ + "1": { + "ffb2bf": "b7e9ff", + "bf4c60": "4386df", + "3d61cc": "6b4592", + "fff0a6": "208698", + "2e4999": "432b6c", + "f2798d": "8dcfff", + "803340": "0e3e81", + "1b2a59": "170738", + "66d9ff": "7ddcd6", + "bfb169": "165e78" + }, + "2": { + "ffb2bf": "86d6b6", + "bf4c60": "32738b", + "3d61cc": "ecbb7a", + "fff0a6": "652240", + "2e4999": "cc7251", + "f2798d": "5eb4a9", + "803340": "152a5c", + "1b2a59": "9f2727", + "66d9ff": "48968c", + "bfb169": "431022" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/676-dandy.json b/public/images/pokemon/variant/back/676-dandy.json new file mode 100644 index 00000000000..f73bd90f690 --- /dev/null +++ b/public/images/pokemon/variant/back/676-dandy.json @@ -0,0 +1,28 @@ +{ + "1": { + "594d46": "788087", + "376277": "4f8fe3", + "9c9f94": "42090e", + "30552b": "423839", + "b8bcaf": "5e0f16", + "508a3c": "aa9999", + "f1f2ee": "8a1d1d", + "816e64": "a6afb3", + "6eb92b": "eddddd", + "4b4b46": "2b040f" + }, + "2": { + "594d46": "9c7aca", + "376277": "314173", + "fe3c31": "8362b4", + "9c9f94": "ad76bc", + "30552b": "6a102e", + "b8bcaf": "ce9ede", + "508a3c": "ac254b", + "f1f2ee": "e6c3f8", + "a83c31": "473085", + "816e64": "ae95dc", + "6eb92b": "e44a62", + "4b4b46": "6b3f77" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/676-debutante.json b/public/images/pokemon/variant/back/676-debutante.json new file mode 100644 index 00000000000..cad1f7792f0 --- /dev/null +++ b/public/images/pokemon/variant/back/676-debutante.json @@ -0,0 +1,28 @@ +{ + "1": { + "594d46": "788087", + "376277": "4f8fe3", + "9c9f94": "42090e", + "dfb76a": "aa9999", + "4b4b46": "2b040f", + "bcc0b3": "5e0f16", + "816e64": "a6afb3", + "ac6d40": "423839", + "f8f9f7": "8a1d1d", + "fbf588": "eddddd" + }, + "2": { + "594d46": "48a7d0", + "376277": "717171", + "fe3c31": "762ea8", + "9c9f94": "0b374f", + "dfb76a": "c6a65c", + "4b4b46": "021a2f", + "bcc0b3": "0b4b68", + "a83c31": "521073", + "816e64": "74ccec", + "ac6d40": "684d24", + "f8f9f7": "0e728e", + "fbf588": "ffe998" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/676-diamond.json b/public/images/pokemon/variant/back/676-diamond.json new file mode 100644 index 00000000000..35876619287 --- /dev/null +++ b/public/images/pokemon/variant/back/676-diamond.json @@ -0,0 +1,30 @@ +{ + "1": { + "594d46": "788087", + "aa3e2b": "423839", + "b8bcaf": "5e0f16", + "f1f2ee": "8a1d1d", + "376277": "4f8fe3", + "645e55": "2b040f", + "d95b37": "aa9999", + "e68a4d": "eddddd", + "453434": "313439", + "816e64": "a6afb3", + "9c9f94": "42090e" + }, + "2": { + "594d46": "bd9462", + "aa3e2b": "642c0a", + "b8bcaf": "319c6a", + "f1f2ee": "6abd81", + "376277": "c56e34", + "fe3c31": "b37e47", + "645e55": "10573c", + "d95b37": "935927", + "e68a4d": "b37e47", + "453434": "6c4b2d", + "a83c31": "642c0a", + "816e64": "eed59c", + "9c9f94": "288c66" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/676-heart.json b/public/images/pokemon/variant/back/676-heart.json new file mode 100644 index 00000000000..abb8ed1a9b3 --- /dev/null +++ b/public/images/pokemon/variant/back/676-heart.json @@ -0,0 +1,30 @@ +{ + "1": { + "594d46": "788087", + "f18598": "48474c", + "b8bcaf": "5e0f16", + "f1f2ee": "8a1d1d", + "e0546c": "2a2a2f", + "376277": "4f8fe3", + "645e55": "2b040f", + "453434": "313439", + "816e64": "a6afb3", + "a73f4f": "19181f", + "9c9f94": "42090e" + }, + "2": { + "594d46": "aca49c", + "f18598": "5f5953", + "b8bcaf": "bfc7e8", + "f1f2ee": "e4eafc", + "e0546c": "4c413c", + "376277": "1b1c21", + "fe3c31": "9475de", + "645e55": "7a81b7", + "453434": "837373", + "a83c31": "7249b7", + "816e64": "dadace", + "a73f4f": "2c2320", + "9c9f94": "9fa7c8" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/676-kabuki.json b/public/images/pokemon/variant/back/676-kabuki.json new file mode 100644 index 00000000000..54e87ca19b2 --- /dev/null +++ b/public/images/pokemon/variant/back/676-kabuki.json @@ -0,0 +1,36 @@ +{ + "1": { + "811d1d": "240b12", + "8f2121": "19181f", + "b01a1a": "17161c", + "d02f2e": "2a2a2f", + "594d46": "a6afb3", + "f66559": "fe3c31", + "f44b3d": "313439", + "376277": "436ca1", + "8a7d79": "788087", + "68675c": "2b040f", + "9c9f94": "42090e", + "534343": "360513", + "bcc0b3": "5e0f16", + "f1f2ee": "8a1d1d", + "b32524": "a83c31" + }, + "2": { + "811d1d": "181a38", + "8f2121": "191b38", + "b01a1a": "48578e", + "d02f2e": "305d9e", + "594d46": "3e5368", + "f66559": "9890ec", + "f44b3d": "4c89d9", + "376277": "436ca1", + "8a7d79": "233342", + "68675c": "1b1d39", + "9c9f94": "468197", + "534343": "192b42", + "bcc0b3": "549ab8", + "f1f2ee": "6bcfd9", + "b32524": "8067c6" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/676-la-reine.json b/public/images/pokemon/variant/back/676-la-reine.json new file mode 100644 index 00000000000..a464639a025 --- /dev/null +++ b/public/images/pokemon/variant/back/676-la-reine.json @@ -0,0 +1,28 @@ +{ + "1": { + "8a7d79": "788087", + "376277": "4f8fe3", + "31a7bb": "aa9999", + "594d46": "a6afb3", + "4b4b46": "2b040f", + "9c9f94": "42090e", + "56d1d8": "eddddd", + "bcc0b3": "5e0f16", + "2f7387": "423839", + "f1f2ee": "8a1d1d" + }, + "2": { + "a83c31": "3041b7", + "8a7d79": "a11e24", + "376277": "221755", + "31a7bb": "e3b876", + "594d46": "973721", + "4b4b46": "550b0c", + "9c9f94": "c63b31", + "56d1d8": "ffec9b", + "bcc0b3": "d9533c", + "2f7387": "8e673e", + "f1f2ee": "ee724b", + "fe3c31": "4b77e1" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/676-matron.json b/public/images/pokemon/variant/back/676-matron.json new file mode 100644 index 00000000000..70a32e09a19 --- /dev/null +++ b/public/images/pokemon/variant/back/676-matron.json @@ -0,0 +1,29 @@ +{ + "1": { + "873a5b": "19181f", + "376277": "4f8fe3", + "9c9f94": "42090e", + "594d46": "788087", + "b8bcaf": "5e0f16", + "5f5951": "2b040f", + "121212": "101010", + "b95b83": "2a2a2f", + "816e64": "a6afb3", + "f8f9f7": "8a1d1d", + "d07da9": "313439" + }, + "2": { + "873a5b": "1b447b", + "376277": "2246aa", + "fe3c31": "64edf3", + "9c9f94": "bd4d6a", + "594d46": "d0b5b5", + "b8bcaf": "d95e7e", + "5f5951": "8a2843", + "b95b83": "528fcc", + "816e64": "e3d6d6", + "a83c31": "45a6d0", + "f8f9f7": "fa8c9f", + "d07da9": "64c8f3" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/676-pharaoh.json b/public/images/pokemon/variant/back/676-pharaoh.json new file mode 100644 index 00000000000..fa9c60533b6 --- /dev/null +++ b/public/images/pokemon/variant/back/676-pharaoh.json @@ -0,0 +1,30 @@ +{ + "1": { + "594d46": "788087", + "376277": "4f8fe3", + "9c9f94": "42090e", + "bcc0b3": "5e0f16", + "25559c": "2a2a2f", + "484640": "2b040f", + "217fc4": "313439", + "68675c": "2b040f", + "816e64": "42090e", + "243a6f": "19181f", + "f1f2ee": "8a1d1d" + }, + "2": { + "594d46": "22172f", + "376277": "5e0808", + "fe3c31": "ec4d3e", + "9c9f94": "332b42", + "bcc0b3": "3b3955", + "25559c": "d0902d", + "484640": "17122f", + "217fc4": "eed552", + "68675c": "17122f", + "a83c31": "a11717", + "816e64": "332b42", + "243a6f": "a15317", + "f1f2ee": "5a5a71" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/676-star.json b/public/images/pokemon/variant/back/676-star.json new file mode 100644 index 00000000000..f6bdec0ca9e --- /dev/null +++ b/public/images/pokemon/variant/back/676-star.json @@ -0,0 +1,30 @@ +{ + "1": { + "594d46": "788087", + "b8bcaf": "5e0f16", + "f1f2ee": "8a1d1d", + "3a5078": "19181f", + "376277": "4f8fe3", + "645e55": "2b040f", + "3e8ebf": "2a2a2f", + "9c9f94": "42090e", + "453434": "48474c", + "816e64": "a6afb3", + "7dc2e8": "313439" + }, + "2": { + "594d46": "d7bc4d", + "b8bcaf": "d6dec2", + "f1f2ee": "fcfef5", + "3a5078": "613d11", + "376277": "647bb1", + "fe3c31": "b5e0f3", + "645e55": "848e75", + "3e8ebf": "ac802f", + "9c9f94": "c3cdab", + "453434": "836329", + "a83c31": "6192aa", + "816e64": "f7e784", + "7dc2e8": "cdac4a" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/676.json b/public/images/pokemon/variant/back/676.json new file mode 100644 index 00000000000..9a8ab0f7aa3 --- /dev/null +++ b/public/images/pokemon/variant/back/676.json @@ -0,0 +1,23 @@ +{ + "1": { + "bcbca8": "5e0f16", + "606056": "2b040f", + "8e8e7b": "42090e", + "f2f2da": "8a1d1d", + "3f6273": "2b040f", + "736b67": "a6afb3", + "494340": "788087", + "3f6274": "4f8fe3" + }, + "2": { + "bcbca8": "a4624a", + "cc2929": "3a240e", + "606056": "4a281b", + "8e8e7b": "805145", + "f2f2da": "c18960", + "3f6273": "4a281b", + "736b67": "ffe6ac", + "494340": "e6c594", + "3f6274": "4a2e23" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/682.json b/public/images/pokemon/variant/back/682.json new file mode 100644 index 00000000000..5b3a6821f1f --- /dev/null +++ b/public/images/pokemon/variant/back/682.json @@ -0,0 +1,20 @@ +{ + "1": { + "6b3962": "30185d", + "cc7087": "318759", + "993d80": "4f297e", + "ff99b3": "48ab61", + "7f4d59": "20644e" + }, + "2": { + "6b3962": "b89477", + "cc7087": "c3561a", + "993d80": "d2bfa1", + "ff99b3": "da7e29", + "7f4d59": "a23812", + "a6a6a6": "503851", + "737373": "422f46", + "4d4d4d": "332539", + "e5e5e5": "6b4767" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/683.json b/public/images/pokemon/variant/back/683.json new file mode 100644 index 00000000000..9d7f4682b9a --- /dev/null +++ b/public/images/pokemon/variant/back/683.json @@ -0,0 +1,20 @@ +{ + "1": { + "6b3962": "30185d", + "cc7087": "318759", + "993d80": "4f297e", + "ff99b3": "48ab61", + "404040": "2c283b", + "7f4d59": "20644e", + "bf5f9f": "7c48a1" + }, + "2": { + "6b3962": "b89477", + "cc7087": "c3561a", + "993d80": "d2bfa1", + "ff99b3": "da7e29", + "404040": "2a2234", + "7f4d59": "a23812", + "bf5f9f": "f0ebdd" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/684.json b/public/images/pokemon/variant/back/684.json new file mode 100644 index 00000000000..18afd91b4a2 --- /dev/null +++ b/public/images/pokemon/variant/back/684.json @@ -0,0 +1,18 @@ +{ + "1": { + "805963": "3c195b", + "7b5760": "8f1d15", + "cc99a6": "814db1", + "ffccd9": "8961c6", + "fff2f2": "f39f62", + "ccadad": "e6774a" + }, + "2": { + "805963": "679baa", + "7b5760": "3c2f51", + "cc99a6": "93d6ce", + "ffccd9": "cbf6da", + "fff2f2": "746998", + "ccadad": "4b4876" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/685.json b/public/images/pokemon/variant/back/685.json new file mode 100644 index 00000000000..87b0bad9422 --- /dev/null +++ b/public/images/pokemon/variant/back/685.json @@ -0,0 +1,28 @@ +{ + "1": { + "f8f8f8": "caff90", + "661a2d": "13391c", + "805963": "2d0c42", + "7b5760": "b13924", + "ffccd9": "8961c6", + "ff8ca9": "8dbe6d", + "cc99a6": "613b84", + "e53964": "689b52", + "fff2f2": "f39f62", + "ccadad": "df6b40", + "a62949": "26592b" + }, + "2": { + "f8f8f8": "e4819d", + "661a2d": "26061b", + "805963": "679baa", + "7b5760": "3c2f51", + "ffccd9": "cbf6da", + "ff8ca9": "8c4264", + "cc99a6": "93d6ce", + "e53964": "612747", + "fff2f2": "746998", + "ccadad": "4b4876", + "a62949": "441838" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/688.json b/public/images/pokemon/variant/back/688.json new file mode 100644 index 00000000000..ac388cd384e --- /dev/null +++ b/public/images/pokemon/variant/back/688.json @@ -0,0 +1,30 @@ +{ + "1": { + "b7653f": "459aac", + "385860": "70240f", + "6b503b": "373295", + "372e27": "220a56", + "c0e0e8": "e8d37b", + "8a6d45": "4557b5", + "808080": "7c582e", + "5890b0": "a9582e", + "fcffff": "e8e5c6", + "d0d0d0": "d3bc8c", + "88c0c8": "cd8a50", + "ef8955": "70cccf" + }, + "2": { + "b7653f": "332149", + "385860": "2c052a", + "6b503b": "ba9fba", + "372e27": "1e1324", + "c0e0e8": "a74083", + "8a6d45": "f6eefc", + "808080": "4d6a09", + "5890b0": "4b0038", + "fcffff": "d1ec8c", + "d0d0d0": "94c268", + "88c0c8": "731f5c", + "ef8955": "4a376e" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/689.json b/public/images/pokemon/variant/back/689.json new file mode 100644 index 00000000000..6c47b57f35b --- /dev/null +++ b/public/images/pokemon/variant/back/689.json @@ -0,0 +1,31 @@ +{ + "1": { + "cc7f70": "459aac", + "f2f2f2": "e8e5c6", + "5b8da6": "8d5030", + "595959": "7c582e", + "403410": "220a56", + "3f6273": "672e1e", + "b3b3b3": "d3bc8c", + "bfeaff": "e8d37b", + "85b4cc": "cd8a50", + "ff9f8c": "70cccf", + "66541f": "373295", + "997e2e": "4557b5" + }, + "2": { + "cc7f70": "332149", + "f2f2f2": "caea77", + "5b8da6": "4b0038", + "595959": "2a5524", + "403410": "3f2a4b", + "3f6273": "3e073b", + "b3b3b3": "7eac4e", + "bfeaff": "a74083", + "85b4cc": "731f5c", + "f8f8f8": "dbaf67", + "ff9f8c": "4a376e", + "66541f": "ccb6cc", + "997e2e": "f6eefc" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/807.json b/public/images/pokemon/variant/back/807.json new file mode 100644 index 00000000000..4471a1b5b50 --- /dev/null +++ b/public/images/pokemon/variant/back/807.json @@ -0,0 +1,28 @@ +{ + "1": { + "484f57": "243058", + "5bd0f2": "ebceff", + "2759a5": "736599", + "727678": "3f5277", + "daa936": "5c96b4", + "ef8a4e": "517bb5", + "f9e455": "80c7d7", + "9d682d": "3d648c", + "000000": "ffffff", + "2394d8": "b298d8", + "31343e": "14193f" + }, + "2": { + "484f57": "cba3ca", + "5bd0f2": "df7298", + "2759a5": "a3378a", + "727678": "e7c9e2", + "daa936": "351d53", + "ef8a4e": "844c94", + "f9e455": "58326f", + "9d682d": "1f1144", + "000000": "ffffff", + "2394d8": "be5293", + "31343e": "a880b0" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/894.json b/public/images/pokemon/variant/back/894.json new file mode 100644 index 00000000000..d213b87dcf4 --- /dev/null +++ b/public/images/pokemon/variant/back/894.json @@ -0,0 +1,24 @@ +{ + "1": { + "e5ee1a": "6ad7f3", + "7d542a": "2769aa", + "bc8b2f": "124b78", + "fefac7": "dffff6", + "2e3967": "357b84", + "8eacdd": "caffd1", + "375395": "5fcaad", + "4e7cc9": "9bf1c4", + "d7ad0d": "45a3d6" + }, + "2": { + "e5ee1a": "d4ffd0", + "7d542a": "429877", + "bc8b2f": "2a6f5d", + "fefac7": "ffffff", + "2e3967": "514199", + "8eacdd": "c693d8", + "375395": "815bad", + "4e7cc9": "b67cd6", + "d7ad0d": "7cd395" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/895.json b/public/images/pokemon/variant/back/895.json new file mode 100644 index 00000000000..d9a7f49ae44 --- /dev/null +++ b/public/images/pokemon/variant/back/895.json @@ -0,0 +1,26 @@ +{ + "1": { + "641e2c": "722123", + "b63650": "bc623e", + "608d99": "fae5bf", + "2b3d40": "754f47", + "4b6f78": "f1d4b6", + "e05276": "ef8429", + "f27a99": "efb55a", + "3f545f": "ad8473", + "872c3c": "93372d", + "242e35": "512c25" + }, + "2": { + "641e2c": "15553b", + "b63650": "3bb349", + "608d99": "9b7ebc", + "2b3d40": "241951", + "4b6f78": "5a4382", + "e05276": "8aea41", + "f27a99": "dfff75", + "3f545f": "3a2a67", + "872c3c": "227843", + "242e35": "0f0c1e" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/944.json b/public/images/pokemon/variant/back/944.json new file mode 100644 index 00000000000..6f41f91c4d6 --- /dev/null +++ b/public/images/pokemon/variant/back/944.json @@ -0,0 +1,44 @@ +{ + "1": { + "b5eab2": "75a0d0", + "d4eac7": "8bcfe5", + "bdb2bd": "53a164", + "ceceb7": "3ec295", + "726766": "4f985c", + "4a4860": "372869", + "8ce1b2": "6383c4", + "564a49": "286943", + "000000": "ffffff", + "4ca391": "3a4a8a", + "97859b": "3f8d59", + "a571e6": "ffe269", + "774d9b": "d09139", + "efeee1": "88eeab", + "afc6d8": "8056a7", + "c9e1f4": "b782cd", + "918772": "1c9b8d", + "869fad": "5e4090", + "3a2b2f": "18493f" + }, + "2": { + "b5eab2": "a9c6dc", + "d4eac7": "e2f8ff", + "bdb2bd": "78b0c2", + "ceceb7": "abc1df", + "726766": "5386b9", + "4a4860": "4f133f", + "8ce1b2": "8397c4", + "564a49": "2c4f8a", + "000000": "ffffff", + "4ca391": "6974ad", + "97859b": "5582a4", + "a571e6": "4c5372", + "774d9b": "2c2c46", + "efeee1": "e2f3ff", + "afc6d8": "c23f4f", + "c9e1f4": "f98381", + "918772": "6777aa", + "869fad": "902a4b", + "3a2b2f": "1e3072" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/945.json b/public/images/pokemon/variant/back/945.json new file mode 100644 index 00000000000..500e68e3812 --- /dev/null +++ b/public/images/pokemon/variant/back/945.json @@ -0,0 +1,38 @@ +{ + "1": { + "403f4f": "357747", + "1f2635": "1c193d", + "dcdcc3": "5ddcb2", + "d6d3ca": "499833", + "e0ebf1": "7ddfee", + "e6e2e1": "fffbf3", + "8d2151": "4676aa", + "4f483f": "1b727b", + "323d4a": "2e2452", + "000000": "ffffff", + "d73875": "68adca", + "aebec7": "62b0d0", + "38bdda": "494e64", + "282434": "14463f", + "aca699": "2db3a4", + "a4988b": "16613d", + "4b616b": "473869" + }, + "2": { + "403f4f": "3b6b9e", + "1f2635": "3b091c", + "dcdcc3": "edf0f1", + "e6e2e1": "ebf4f9", + "8d2151": "4676aa", + "4f483f": "5d7487", + "323d4a": "580f1d", + "000000": "ffffff", + "a599a8": "bf888f", + "d73875": "68adca", + "7c6a84": "965b6f", + "38bdda": "494e64", + "282434": "2d427e", + "aca699": "acbfc7", + "4b616b": "8a2029" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/154.json b/public/images/pokemon/variant/back/female/154.json new file mode 100644 index 00000000000..d7463ebee9d --- /dev/null +++ b/public/images/pokemon/variant/back/female/154.json @@ -0,0 +1,26 @@ +{ + "1": { + "634a00": "6da0df", + "ff3a5a": "234d81", + "e6ad00": "90c6f8", + "ce213a": "192e5e", + "63bd42": "9d86d9", + "f7a59c": "78d38b", + "7b103a": "111c44", + "107b31": "8057b2", + "ffde21": "b9e2ff", + "9ce652": "b7afee" + }, + "2": { + "634a00": "144627", + "ff3a5a": "9ed662", + "e6ad00": "1e632b", + "ce213a": "81c65c", + "63bd42": "a31f60", + "f7a59c": "ddf2b5", + "7b103a": "59ac45", + "107b31": "761858", + "ffde21": "288028", + "9ce652": "cd3b6b" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/194.json b/public/images/pokemon/variant/back/female/194.json new file mode 100644 index 00000000000..db649381d14 --- /dev/null +++ b/public/images/pokemon/variant/back/female/194.json @@ -0,0 +1,20 @@ +{ + "1": { + "529ce6": "e8983d", + "9463a5": "2ea380", + "633a6b": "09484f", + "3a7bc5": "d5682e", + "73bdff": "ffc355", + "d65ad6": "44d77f", + "104a84": "7a150a" + }, + "2": { + "529ce6": "564daa", + "9463a5": "aeccdf", + "633a6b": "444c7e", + "3a7bc5": "3f377e", + "73bdff": "5c66c4", + "d65ad6": "e8faff", + "104a84": "180d42" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/195.json b/public/images/pokemon/variant/back/female/195.json new file mode 100644 index 00000000000..a097ea3eac4 --- /dev/null +++ b/public/images/pokemon/variant/back/female/195.json @@ -0,0 +1,24 @@ +{ + "1": { + "ade6ff": "f6dfa8", + "84d6f7": "ed9e4f", + "637ba5": "816251", + "639cbd": "dc6a4d", + "3194a5": "44d77f", + "6b5a8c": "1b5a55", + "425284": "b03844", + "426b84": "b8453b", + "195a6b": "2ea380" + }, + "2": { + "ade6ff": "9864c2", + "84d6f7": "724ba7", + "637ba5": "504a8a", + "639cbd": "493a8d", + "3194a5": "ebf5ff", + "6b5a8c": "5e649b", + "425284": "240830", + "195a6b": "aebbdf", + "19423a": "747aae" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/198.json b/public/images/pokemon/variant/back/female/198.json new file mode 100644 index 00000000000..eed8404265c --- /dev/null +++ b/public/images/pokemon/variant/back/female/198.json @@ -0,0 +1,26 @@ +{ + "1": { + "d94352": "8c1b23", + "314263": "462b20", + "efd684": "a6a6b3", + "d64252": "b3986b", + "42639c": "694c30", + "5a4a21": "25253b", + "292942": "2a1512", + "b59c21": "57566f", + "73293a": "755237", + "d6bd52": "838098" + }, + "2": { + "d94352": "8c1b23", + "314263": "0e4333", + "efd684": "c2723a", + "d64252": "bc4b84", + "42639c": "1d6e47", + "5a4a21": "4e1915", + "292942": "091e16", + "b59c21": "85412d", + "73293a": "7b2363", + "d6bd52": "9a5524" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/25-beauty-cosplay.json b/public/images/pokemon/variant/back/female/25-beauty-cosplay.json new file mode 100644 index 00000000000..34a087f71cd --- /dev/null +++ b/public/images/pokemon/variant/back/female/25-beauty-cosplay.json @@ -0,0 +1,32 @@ +{ + "1": { + "f7cc2f": "d5ac44", + "9c5200": "315c75", + "f7e860": "eddc78", + "cecab9": "b84084", + "2d276d": "454a61", + "4d88c4": "e4f6f1", + "39509d": "9ec4cd", + "fffdea": "ea82a6", + "f7e652": "a3d1a8", + "f7bd21": "79b5a5", + "5e5e6b": "8a2554" + }, + "2": { + "4f454c": "f1b571", + "f7cc2f": "d5ac44", + "fffabf": "f5efd1", + "9c5200": "283361", + "f7e860": "eddc78", + "965b0e": "96500e", + "cecab9": "b84084", + "2d276d": "454a61", + "4d88c4": "e4f6f1", + "39509d": "9ec4cd", + "fffdea": "ea82a6", + "1e1526": "a45233", + "f7e652": "577b98", + "f7bd21": "486689", + "5e5e6b": "8a2554" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/25-cool-cosplay.json b/public/images/pokemon/variant/back/female/25-cool-cosplay.json new file mode 100644 index 00000000000..278feb070bd --- /dev/null +++ b/public/images/pokemon/variant/back/female/25-cool-cosplay.json @@ -0,0 +1,31 @@ +{ + "1": { + "171717": "2a1d36", + "c52119": "ad4e76", + "842222": "7b1f18", + "f7e652": "a3d1a8", + "fff7a5": "c4e3c3", + "f7bd21": "79b5a5", + "ba2b23": "b73850", + "9c5200": "1c4f75", + "d95b45": "cf6887", + "3b3b40": "4a3e46" + }, + "2": { + "171717": "a45233", + "656f86": "cf752b", + "a5b0b6": "f0b541", + "c52119": "ebc67c", + "842222": "1e1e43", + "f7e652": "577b98", + "fff7a5": "7b96aa", + "f7bd21": "445f8a", + "ba2b23": "2c2c47", + "55555e": "8f4b32", + "9c5200": "22325c", + "f4f7ab": "eadbb3", + "d95b45": "3a3f5e", + "3b3b40": "f1b571", + "272b2b": "7d3833" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/25-cosplay.json b/public/images/pokemon/variant/back/female/25-cosplay.json new file mode 100644 index 00000000000..c574d63d743 --- /dev/null +++ b/public/images/pokemon/variant/back/female/25-cosplay.json @@ -0,0 +1,26 @@ +{ + "1": { + "f7e652": "a3d1a8", + "fff7a5": "c4e3c3", + "c52119": "ad4e76", + "f7bd21": "79b5a5", + "52525a": "4f454c", + "9c5200": "315c75", + "292929": "1e1526", + "633108": "09406b", + "e65a42": "cf6182", + "de9400": "338087" + }, + "2": { + "f7e652": "577b98", + "fff7a5": "7b96aa", + "c52119": "ebc67c", + "f7bd21": "445f8a", + "52525a": "f1b571", + "9c5200": "23345e", + "292929": "a45233", + "633108": "22244f", + "e65a42": "eedd9c", + "de9400": "324472" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/25-cute-cosplay.json b/public/images/pokemon/variant/back/female/25-cute-cosplay.json new file mode 100644 index 00000000000..7b26b79d08f --- /dev/null +++ b/public/images/pokemon/variant/back/female/25-cute-cosplay.json @@ -0,0 +1,32 @@ +{ + "1": { + "752bd0": "5452b7", + "baa998": "bab699", + "fff7a5": "c4e3c3", + "f7e652": "a3d1a8", + "ea82a6": "e8848e", + "cf4770": "cf4a59", + "f3bace": "f2bbbb", + "853247": "85323c", + "f7ef97": "f0eaa8", + "52525a": "4f454c", + "292929": "30263b", + "f7bd21": "79b5a5", + "9c5200": "255e8a" + }, + "2": { + "752bd0": "7751c2", + "baa998": "d3ab5a", + "fff7a5": "7b96aa", + "f7e652": "577b98", + "ea82a6": "a4b95f", + "cf4770": "739b55", + "f3bace": "c5cc85", + "853247": "254b30", + "f7ef97": "ebe7b7", + "52525a": "f1b571", + "292929": "a45233", + "f7bd21": "445f8a", + "9c5200": "23345e" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/25-partner.json b/public/images/pokemon/variant/back/female/25-partner.json new file mode 100644 index 00000000000..affebee3c8b --- /dev/null +++ b/public/images/pokemon/variant/back/female/25-partner.json @@ -0,0 +1,26 @@ +{ + "1": { + "9c5200": "315c75", + "171717": "1e1526", + "fff7a5": "c4e3c3", + "f7bd21": "79b5a5", + "f7e652": "a3d1a8", + "c52119": "ad4e76", + "e65a42": "cf6182", + "633108": "09406b", + "45454a": "4f454c", + "de9400": "338087" + }, + "2": { + "9c5200": "23345e", + "171717": "a45233", + "fff7a5": "7b96aa", + "f7bd21": "445f8a", + "f7e652": "577b98", + "c52119": "ebc67c", + "e65a42": "eedd9c", + "633108": "22244f", + "45454a": "f1b571", + "de9400": "324472" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/25-smart-cosplay.json b/public/images/pokemon/variant/back/female/25-smart-cosplay.json new file mode 100644 index 00000000000..50749b31d8b --- /dev/null +++ b/public/images/pokemon/variant/back/female/25-smart-cosplay.json @@ -0,0 +1,32 @@ +{ + "1": { + "fffdea": "f8ffe3", + "b7a599": "bab699", + "60b553": "76a848", + "f7e652": "a3d1a8", + "366635": "3e5b2f", + "95635b": "91685f", + "171717": "1e1526", + "5f3434": "573b38", + "54545c": "55555e", + "52525a": "4f454c", + "292929": "272b2b", + "f7bd21": "79b5a5", + "9c5200": "315c75" + }, + "2": { + "fffdea": "f2f0df", + "b7a599": "a7b6b9", + "60b553": "dfb053", + "f7e652": "577b98", + "366635": "ab5130", + "95635b": "a09ea3", + "171717": "a45233", + "5f3434": "666060", + "54545c": "45525c", + "52525a": "f1b571", + "292929": "202937", + "f7bd21": "445f8a", + "9c5200": "23345e" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/25-tough-cosplay.json b/public/images/pokemon/variant/back/female/25-tough-cosplay.json new file mode 100644 index 00000000000..49c50d17ad2 --- /dev/null +++ b/public/images/pokemon/variant/back/female/25-tough-cosplay.json @@ -0,0 +1,35 @@ +{ + "1": { + "e37511": "d1694f", + "bf2629": "cf6a59", + "8d2b1d": "bf3638", + "c52119": "ad4e76", + "46464d": "2b3340", + "292929": "1e1526", + "f7bd21": "79b5a5", + "fbab33": "de9764", + "e65a42": "cf6182", + "cecab9": "cfc8aa", + "52525a": "4f454c", + "f7e652": "a3d1a8", + "9c5200": "315c75" + }, + "2": { + "e37511": "60448d", + "bf2629": "826694", + "f8ffe3": "e8e3e4", + "8d2b1d": "3d3f7d", + "c52119": "ebc67c", + "46464d": "2b3340", + "292929": "a45233", + "f7bd21": "445f8a", + "fbab33": "845ea1", + "e65a42": "eedd9c", + "cecab9": "beb1b4", + "8e2525": "242866", + "52525a": "f1b571", + "f7e652": "577b98", + "272b2b": "162231", + "9c5200": "23345e" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/25.json b/public/images/pokemon/variant/back/female/25.json new file mode 100644 index 00000000000..affebee3c8b --- /dev/null +++ b/public/images/pokemon/variant/back/female/25.json @@ -0,0 +1,26 @@ +{ + "1": { + "9c5200": "315c75", + "171717": "1e1526", + "fff7a5": "c4e3c3", + "f7bd21": "79b5a5", + "f7e652": "a3d1a8", + "c52119": "ad4e76", + "e65a42": "cf6182", + "633108": "09406b", + "45454a": "4f454c", + "de9400": "338087" + }, + "2": { + "9c5200": "23345e", + "171717": "a45233", + "fff7a5": "7b96aa", + "f7bd21": "445f8a", + "f7e652": "577b98", + "c52119": "ebc67c", + "e65a42": "eedd9c", + "633108": "22244f", + "45454a": "f1b571", + "de9400": "324472" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/female/26.json b/public/images/pokemon/variant/back/female/26.json new file mode 100644 index 00000000000..6a29870fc8b --- /dev/null +++ b/public/images/pokemon/variant/back/female/26.json @@ -0,0 +1,33 @@ +{ + "1": { + "63636b": "4f454c", + "944242": "395a80", + "bd5a31": "386d82", + "e6bd84": "a4bda7", + "ffbd00": "b3596b", + "5a2929": "293059", + "3a3a42": "30263b", + "8c6310": "8c3c4c", + "ffde5a": "cf7878", + "f7ad29": "76a68b", + "734231": "6e2f33", + "ffefd6": "c8d4ba", + "de7b31": "539190" + }, + "2": { + "101010": "000000", + "542127": "905331", + "944242": "2d3b80", + "bd5a31": "375681", + "e6bd84": "a6b5ab", + "ffbd00": "f3cf91", + "5a2929": "202a60", + "8c6310": "c79b5a", + "ffde5a": "f2e4b6", + "f7ad29": "6385ab", + "734231": "bf8445", + "ffefd6": "cfc4b5", + "de7b31": "4d6f98", + "643034": "2e4685" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/2026.json b/public/images/pokemon/variant/exp/2026.json new file mode 100644 index 00000000000..287b16fb52b --- /dev/null +++ b/public/images/pokemon/variant/exp/2026.json @@ -0,0 +1,34 @@ +{ + "1": { + "ecd8b7": "b4c2a5", + "646124": "492652", + "602c24": "162f4b", + "fef652": "eb999a", + "846b5b": "467f85", + "1a73cc": "b85346", + "9c5430": "1d3a57", + "174680": "2b1307", + "fef443": "c48081", + "b45f25": "2d5261", + "fffdfb": "d6d9ca", + "e9be14": "945c7b", + "e3882d": "3d7375", + "965821": "2f4e6b", + "552720": "142c48" + }, + "2": { + "ecd8b7": "5a6f90", + "646124": "122140", + "fef652": "faee9e", + "846b5b": "202746", + "1a73cc": "c26400", + "174680": "2b0606", + "fef443": "3a5873", + "b45f25": "bd8551", + "fffdfb": "6d8297", + "e9be14": "1a3551", + "e3882d": "d3b06f", + "965821": "9cb3ca", + "552720": "43617f" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/2103.json b/public/images/pokemon/variant/exp/2103.json new file mode 100644 index 00000000000..2e97727835a --- /dev/null +++ b/public/images/pokemon/variant/exp/2103.json @@ -0,0 +1,28 @@ +{ + "1": { + "2f9934": "dea44c", + "9f6b41": "426378", + "70442e": "283f5b", + "e6ac5a": "869fdc", + "522f16": "131d33", + "9cbd4a": "9977dd", + "fff68b": "a3c4ed", + "36cc36": "f4e774", + "2d5826": "c8592a", + "7b5210": "373e85", + "ffffcd": "d3efff" + }, + "2": { + "2f9934": "3d324b", + "9f6b41": "ffdbe7", + "70442e": "d59cba", + "e6ac5a": "c84e7f", + "522f16": "925b81", + "9cbd4a": "824a96", + "fff68b": "eb748d", + "36cc36": "6a5b73", + "2d5826": "1f1a31", + "7b5210": "4e1044", + "ffffcd": "ffa29d" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/359-mega.json b/public/images/pokemon/variant/exp/359-mega.json new file mode 100644 index 00000000000..084ba24477b --- /dev/null +++ b/public/images/pokemon/variant/exp/359-mega.json @@ -0,0 +1,34 @@ +{ + "1": { + "ffffff": "61a8ab", + "253334": "27122b", + "253333": "2b3266", + "273636": "101f30", + "7b2931": "c9824b", + "414a6a": "421e4a", + "b4b4d5": "458196", + "cd2920": "f7c26d", + "293939": "27122b", + "525a7b": "59274e", + "d5deee": "589aa6", + "737bac": "874267", + "8b8bac": "3b6987", + "626283": "2a3163" + }, + "2": { + "ffffff": "9e363b", + "253334": "996e5f", + "253333": "420b26", + "273636": "420918", + "7b2931": "0f4391", + "414a6a": "b39279", + "b4b4d5": "752f40", + "cd2920": "2a96ce", + "293939": "996e5f", + "525a7b": "e0c79f", + "d5deee": "8f2f41", + "737bac": "f5f1cb", + "8b8bac": "59213b", + "626283": "42122d" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/6503.json b/public/images/pokemon/variant/exp/6503.json new file mode 100644 index 00000000000..62c6cb628b2 --- /dev/null +++ b/public/images/pokemon/variant/exp/6503.json @@ -0,0 +1,37 @@ +{ + "1": { + "282f62": "f7d9de", + "c4c5cf": "e3c2ca", + "84a4a7": "563785", + "a82c47": "d45b9e", + "8aa3a3": "6b415b", + "8da8a8": "a58b90", + "1d3962": "28142c", + "d75063": "b73891", + "d9cacd": "f7d9de", + "808280": "020501", + "1e224e": "dc95ae", + "1e5b9b": "4d244b", + "181531": "a26579", + "6b1c34": "8f3396", + "597471": "332a59", + "494a48": "3d2439" + }, + "2": { + "282f62": "efdfee", + "c4c5cf": "232d2e", + "84a4a7": "41857b", + "a82c47": "8abfb1", + "8aa3a3": "181f20", + "faf9f9": "2c3940", + "8da8a8": "bdbdbd", + "1d3962": "321e1e", + "d75063": "8f65d8", + "1e224e": "ba9bc1", + "1e5b9b": "5e3e38", + "181531": "715b72", + "6b1c34": "6d9d9a", + "597471": "2a5c57", + "494a48": "0b0f18" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/656.json b/public/images/pokemon/variant/exp/656.json new file mode 100644 index 00000000000..68743a4c9f1 --- /dev/null +++ b/public/images/pokemon/variant/exp/656.json @@ -0,0 +1,32 @@ +{ + "1": { + "838394": "4d7dc5", + "62ace6": "8363af", + "7bcdff": "9c75c2", + "ffec8c": "ddfff9", + "a1a1c4": "7ab7ec", + "c9b241": "97d6e2", + "dfcf77": "bae7e8", + "174592": "37408c", + "fdfdfd": "b1e5ff", + "9c9cc5": "5385c7", + "cdcde6": "7eb7e8", + "396a83": "362864", + "5a94cd": "7054a4" + }, + "2": { + "838394": "cc6845", + "62ace6": "c44848", + "7bcdff": "dd6155", + "ffec8c": "ddfff9", + "a1a1c4": "f7c685", + "c9b241": "97d6e2", + "dfcf77": "bae7e8", + "174592": "198158", + "fdfdfd": "fff4bd", + "9c9cc5": "c96a48", + "cdcde6": "f7b785", + "396a83": "5c0d33", + "5a94cd": "a92f3f" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/657.json b/public/images/pokemon/variant/exp/657.json new file mode 100644 index 00000000000..773b4d2efc1 --- /dev/null +++ b/public/images/pokemon/variant/exp/657.json @@ -0,0 +1,32 @@ +{ + "1": { + "f8f8f8": "8dcfff", + "efc653": "abd7db", + "737373": "0f3f82", + "0b566a": "281f52", + "ffec72": "c9fff5", + "002c58": "1c0726", + "bfbfbf": "4386df", + "006ba6": "4e1852", + "009dd5": "61255e", + "0b4a7a": "340f3d", + "e1a03a": "78c7c7", + "41ccf5": "7755a7", + "2896b5": "4b3578" + }, + "2": { + "f8f8f8": "fff6c7", + "efc653": "abd7db", + "737373": "df6a50", + "0b566a": "7e1628", + "ffec72": "ddfff9", + "002c58": "0c3b54", + "bfbfbf": "ffc996", + "006ba6": "239c91", + "009dd5": "37b8ac", + "0b4a7a": "156f78", + "e1a03a": "86abbb", + "41ccf5": "dd7355", + "2896b5": "a92f3a" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/658-ash.json b/public/images/pokemon/variant/exp/658-ash.json new file mode 100644 index 00000000000..96b60b02adf --- /dev/null +++ b/public/images/pokemon/variant/exp/658-ash.json @@ -0,0 +1,44 @@ +{ + "1": { + "265595": "432b6c", + "3f4447": "466698", + "de3431": "3fca9f", + "f8f8f8": "a1e9f0", + "7b282e": "0e3e81", + "6b1d1d": "206d74", + "4ebdd9": "41a7b0", + "bfb169": "165e78", + "bfbfbf": "8cc7d4", + "ffb2bf": "b7e9ff", + "bf4c60": "4386df", + "fff0a6": "208698", + "3e7acc": "6b4592", + "18335c": "170738", + "f2798d": "8dcfff", + "f01818": "39b88f", + "7ddeff": "7ddcd6", + "268794": "1c3e58", + "282c35": "271f4c" + }, + "2": { + "265595": "cc7251", + "3f4447": "466698", + "de3431": "9ceec6", + "f8f8f8": "89d2b8", + "7b282e": "152a5c", + "6b1d1d": "356e8d", + "4ebdd9": "2f6e74", + "bfb169": "431022", + "bfbfbf": "8cc7d4", + "ffb2bf": "86d6b6", + "bf4c60": "32738b", + "fff0a6": "472333", + "3e7acc": "ecbb7a", + "18335c": "9f2727", + "f2798d": "5eb4a9", + "f01818": "ffe88d", + "7ddeff": "46988d", + "268794": "1c3e58", + "282c35": "4d2637" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/658.json b/public/images/pokemon/variant/exp/658.json new file mode 100644 index 00000000000..826e31b4e21 --- /dev/null +++ b/public/images/pokemon/variant/exp/658.json @@ -0,0 +1,34 @@ +{ + "1": { + "ffb2bf": "b7e9ff", + "bf4c60": "4386df", + "66d9ff": "7ddcd6", + "3d61cc": "6b4592", + "fff0a6": "208698", + "c92e2e": "73c5ff", + "937f69": "406695", + "c2c1bc": "89b0d7", + "f2798d": "8dcfff", + "f7f7f7": "d8ffff", + "bfb169": "165e78", + "1b2a59": "170738", + "803340": "0e3e81", + "2e4999": "432b6c" + }, + "2": { + "ffb2bf": "86d6b6", + "bf4c60": "32738b", + "66d9ff": "48968c", + "3d61cc": "ecbb7a", + "fff0a6": "652240", + "c92e2e": "63bf9b", + "937f69": "466698", + "c2c1bc": "8cc7d4", + "f2798d": "5eb4a9", + "f7f7f7": "d7eff4", + "bfb169": "431022", + "1b2a59": "9f2727", + "803340": "152a5c", + "2e4999": "cc7251" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/676.json b/public/images/pokemon/variant/exp/676.json new file mode 100644 index 00000000000..d5ec3013e8e --- /dev/null +++ b/public/images/pokemon/variant/exp/676.json @@ -0,0 +1,22 @@ +{ + "1": { + "a8a592": "42090e", + "376277": "2b040f", + "ccc8b1": "5e0f16", + "59463c": "aaaec1", + "97362c": "a83c31", + "68675c": "2b040f", + "fc362c": "cc2929", + "efeeda": "8a1d1d" + }, + "2": { + "a8a592": "805145", + "376277": "4a281b", + "ccc8b1": "a4624a", + "59463c": "ffe6ac", + "97362c": "3a240e", + "68675c": "4a281b", + "fc362c": "50351b", + "efeeda": "c18960" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/682.json b/public/images/pokemon/variant/exp/682.json new file mode 100644 index 00000000000..a8a7caf46b1 --- /dev/null +++ b/public/images/pokemon/variant/exp/682.json @@ -0,0 +1,28 @@ +{ + "1": { + "661f1f": "cd6132", + "bf5f9f": "7c48a1", + "ff99b3": "48ab61", + "f24949": "ffa24f", + "6b3962": "30185d", + "993d80": "4f297e", + "ffb6c2": "62c45f", + "7f4d59": "20644e", + "cc7087": "318759" + }, + "2": { + "661f1f": "daa235", + "bf5f9f": "f0ebdd", + "ff99b3": "da7e29", + "a6a6a6": "503851", + "737373": "422f46", + "f24949": "ffe664", + "6b3962": "b89477", + "993d80": "d2bfa1", + "ffb6c2": "ed9f3a", + "e5e5e5": "6b4767", + "7f4d59": "a23812", + "4d4d4d": "332539", + "cc7087": "c3561a" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/683.json b/public/images/pokemon/variant/exp/683.json new file mode 100644 index 00000000000..f9485702936 --- /dev/null +++ b/public/images/pokemon/variant/exp/683.json @@ -0,0 +1,32 @@ +{ + "1": { + "661f1f": "b64d29", + "cc7087": "318759", + "ff99b3": "48ab61", + "fff0a6": "fec04b", + "f24949": "ffa24f", + "6b3962": "30185d", + "e5c37e": "d6872c", + "993d80": "4f297e", + "7f4d59": "20644e", + "404040": "2c283b", + "b33636": "f4863f", + "bf5f9f": "7c48a1" + }, + "2": { + "661f1f": "c78925", + "cc7087": "c3561a", + "ff99b3": "da7e29", + "fff0a6": "6d8719", + "e5e5e5": "6b4767", + "f24949": "ffe664", + "6b3962": "b89477", + "e5c37e": "376d11", + "993d80": "d2bfa1", + "7f4d59": "a23812", + "a6a6a6": "503851", + "404040": "2a2234", + "b33636": "f0c150", + "bf5f9f": "f0ebdd" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/684.json b/public/images/pokemon/variant/exp/684.json new file mode 100644 index 00000000000..fb88bb28c70 --- /dev/null +++ b/public/images/pokemon/variant/exp/684.json @@ -0,0 +1,30 @@ +{ + "1": { + "805963": "2d0c42", + "553a41": "8f1d15", + "661a2d": "13391c", + "e53964": "8dbe6d", + "ffccd9": "8961c6", + "5e4048": "260b37", + "cc99a6": "613b84", + "f8f8f8": "caff90", + "fff2f2": "f39f62", + "a62949": "689b52", + "7b5760": "b13924", + "ccadad": "df6b40" + }, + "2": { + "805963": "6796aa", + "553a41": "1d1426", + "661a2d": "26061b", + "e53964": "8c4264", + "ffccd9": "cbf6da", + "5e4048": "52718e", + "cc99a6": "93d6ce", + "f8f8f8": "ffe5ec", + "fff2f2": "746998", + "a62949": "612747", + "7b5760": "3c2f51", + "ccadad": "4b4876" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/685.json b/public/images/pokemon/variant/exp/685.json new file mode 100644 index 00000000000..24ead59428a --- /dev/null +++ b/public/images/pokemon/variant/exp/685.json @@ -0,0 +1,28 @@ +{ + "1": { + "f8f8f8": "caff90", + "661a2d": "13391c", + "7b5760": "b13924", + "ffccd9": "8961c6", + "ff8ca9": "8dbe6d", + "cc99a6": "613b84", + "e53964": "689b52", + "fff2f2": "f39f62", + "a62949": "26592b", + "ccadad": "df6b40", + "805963": "2d0c42" + }, + "2": { + "f8f8f8": "e4819d", + "661a2d": "26061b", + "7b5760": "3c2f51", + "ffccd9": "cbf6da", + "ff8ca9": "8c4264", + "cc99a6": "93d6ce", + "e53964": "612747", + "fff2f2": "746998", + "a62949": "441838", + "ccadad": "4b4876", + "805963": "52718e" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/688.json b/public/images/pokemon/variant/exp/688.json new file mode 100644 index 00000000000..e5749f6bb3f --- /dev/null +++ b/public/images/pokemon/variant/exp/688.json @@ -0,0 +1,33 @@ +{ + "1": { + "5890b0": "a9582e", + "385860": "70240f", + "372e27": "220a56", + "6b503b": "373295", + "d0d0d0": "d3bc8c", + "c0e0e8": "e8d37b", + "8a6d45": "4557b5", + "101010": "37160a", + "b7653f": "459aac", + "fcffff": "e8e5c6", + "808080": "7c582e", + "88c0c8": "cd8a50", + "ef8955": "70cccf" + }, + "2": { + "5890b0": "4b0038", + "385860": "2c052a", + "372e27": "1e1324", + "6b503b": "ba9fba", + "d0d0d0": "7eac4e", + "c0e0e8": "a74083", + "8a6d45": "f6eefc", + "101010": "0a391b", + "b7653f": "332149", + "fcffff": "caea77", + "f8f8f8": "ffffff", + "808080": "2a5524", + "88c0c8": "731f5c", + "ef8955": "4a376e" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/689.json b/public/images/pokemon/variant/exp/689.json new file mode 100644 index 00000000000..cd6db09c8d2 --- /dev/null +++ b/public/images/pokemon/variant/exp/689.json @@ -0,0 +1,31 @@ +{ + "1": { + "bfeaff": "e8d37b", + "f2f2f2": "e8e5c6", + "5b8da6": "8d5030", + "595959": "7c582e", + "403410": "220a56", + "3f6273": "672e1e", + "b3b3b3": "d3bc8c", + "cc7f70": "459aac", + "85b4cc": "cd8a50", + "ff9f8c": "70cccf", + "66541f": "373295", + "997e2e": "4557b5" + }, + "2": { + "bfeaff": "a74083", + "f2f2f2": "caea77", + "5b8da6": "4b0038", + "595959": "2a5524", + "403410": "3f2a4b", + "3f6273": "3e073b", + "b3b3b3": "7eac4e", + "cc7f70": "332149", + "85b4cc": "731f5c", + "f8f8f8": "dbaf67", + "ff9f8c": "4a376e", + "66541f": "ccb6cc", + "997e2e": "f6eefc" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/807.json b/public/images/pokemon/variant/exp/807.json new file mode 100644 index 00000000000..8344e88090b --- /dev/null +++ b/public/images/pokemon/variant/exp/807.json @@ -0,0 +1,36 @@ +{ + "1": { + "53e4f9": "d7a7de", + "ef8a4e": "4f7bb6", + "2759a5": "736599", + "14bdea": "c987e3", + "2394d8": "b298d8", + "31343e": "14193f", + "1f73b4": "995fc0", + "4cf4fe": "f4a7ff", + "484f57": "243058", + "000000": "ffffff", + "727678": "3e5277", + "9d682d": "3c648d", + "f9e455": "7fc7d9", + "daa936": "5a96b6", + "5bd0f2": "ebceff" + }, + "2": { + "53e4f9": "d967a2", + "ef8a4e": "834b95", + "2759a5": "a4378a", + "14bdea": "c02f8d", + "2394d8": "c05192", + "31343e": "a981b1", + "1f73b4": "9a1d82", + "4cf4fe": "e3418f", + "484f57": "cda4cb", + "000000": "ffffff", + "727678": "e8cae3", + "9d682d": "1d1044", + "f9e455": "56306f", + "daa936": "331b53", + "5bd0f2": "e17197" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/894.json b/public/images/pokemon/variant/exp/894.json new file mode 100644 index 00000000000..dd270f3bc0e --- /dev/null +++ b/public/images/pokemon/variant/exp/894.json @@ -0,0 +1,27 @@ +{ + "1": { + "e5ee1a": "6ad7f3", + "ff9dc2": "2c3072", + "7d542a": "2769aa", + "8eacdd": "caffd1", + "bc8b2f": "124b78", + "fffbfb": "dffff6", + "2e3967": "357b84", + "fefac7": "dffff6", + "375395": "5fcaad", + "4e7cc9": "9bf1c4", + "d7ad0d": "45a3d6" + }, + "2": { + "e5ee1a": "d4ffd0", + "ff9dc2": "382875", + "7d542a": "429877", + "8eacdd": "c693d8", + "bc8b2f": "2a6f5d", + "2e3967": "514199", + "fefac7": "ffffff", + "375395": "815bad", + "4e7cc9": "b67cd6", + "d7ad0d": "7cd395" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/895.json b/public/images/pokemon/variant/exp/895.json new file mode 100644 index 00000000000..7c37283fee7 --- /dev/null +++ b/public/images/pokemon/variant/exp/895.json @@ -0,0 +1,34 @@ +{ + "1": { + "2261ca": "561a5b", + "641e2c": "722123", + "ff92ae": "edca71", + "242e35": "512c25", + "608d99": "fae5bf", + "2b3d40": "754f47", + "76dff5": "ffe8f7", + "4b6f78": "f1d4b6", + "e05276": "ef8429", + "b63650": "bc623e", + "f27a99": "efb55a", + "872c3c": "93372d", + "3f545f": "ad8473", + "139ee1": "9b407f" + }, + "2": { + "2261ca": "640e0b", + "641e2c": "15553b", + "ff92ae": "f1ff8d", + "242e35": "0f0c1e", + "608d99": "9b7ebc", + "2b3d40": "241951", + "76dff5": "fffcdf", + "4b6f78": "5a4382", + "e05276": "8aea41", + "b63650": "3bb349", + "f27a99": "dfff75", + "872c3c": "227843", + "3f545f": "3a2a67", + "139ee1": "98301c" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/944.json b/public/images/pokemon/variant/exp/944.json new file mode 100644 index 00000000000..4f1707ae85c --- /dev/null +++ b/public/images/pokemon/variant/exp/944.json @@ -0,0 +1,42 @@ +{ + "1": { + "b5eab2": "75a0d0", + "d4eac7": "8bcfe5", + "bdb2bd": "53a164", + "ceceb7": "3ec295", + "726766": "4f985c", + "4a4860": "372869", + "8ce1b2": "6383c4", + "564a49": "286943", + "000000": "ffffff", + "4ca391": "3a4a8a", + "a571e6": "ffe269", + "774d9b": "d09139", + "97859b": "3f8d59", + "afc6d8": "8056a7", + "efeee1": "88eeab", + "869fad": "5e4090", + "918772": "1c9b8d", + "3a2b2f": "18493f" + }, + "2": { + "b5eab2": "a9c6dc", + "d4eac7": "e2f8ff", + "bdb2bd": "78b0c2", + "ceceb7": "abc1df", + "726766": "5386b9", + "4a4860": "4f133f", + "8ce1b2": "8397c4", + "564a49": "2c4f8a", + "000000": "ffffff", + "4ca391": "3a4a8a", + "a571e6": "4c5372", + "774d9b": "2c2c46", + "97859b": "5582a4", + "afc6d8": "c23f4f", + "efeee1": "e2f3ff", + "869fad": "902a4b", + "918772": "6777aa", + "3a2b2f": "1e3072" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/945.json b/public/images/pokemon/variant/exp/945.json new file mode 100644 index 00000000000..e22743030f9 --- /dev/null +++ b/public/images/pokemon/variant/exp/945.json @@ -0,0 +1,53 @@ +{ + "1": { + "403f4f": "357747", + "1f2635": "1c193d", + "dcdcc3": "5ddcb2", + "282434": "14463f", + "ebe4e2": "ade273", + "a491a4": "499833", + "e6e2e1": "fffbf3", + "671544": "0f4e67", + "584698": "18153d", + "134175": "a74d2a", + "4f483f": "1b727b", + "323d4a": "2e2452", + "000000": "ffffff", + "8ac2a2": "1a355d", + "d73875": "29ad89", + "e0ebf1": "7ddfee", + "2481b0": "d09139", + "4b616b": "473869", + "38bdda": "ffe269", + "695575": "16613d", + "aca699": "2db3a4", + "8d2151": "157375", + "cedaaa": "2f5b7b" + }, + "2": { + "403f4f": "3b6b9e", + "1f2635": "3b091c", + "dcdcc3": "edf0f1", + "282434": "2d427e", + "ebe4e2": "c23f4f", + "a491a4": "902a4b", + "e6e2e1": "ebf4f9", + "671544": "223969", + "584698": "1f1e43", + "134175": "1c182f", + "4f483f": "5d7487", + "323d4a": "580f1d", + "000000": "ffffff", + "a599a8": "bf888f", + "8ac2a2": "8397c4", + "7c6a84": "965b6f", + "d73875": "68adca", + "2481b0": "2c2c46", + "4b616b": "8a2029", + "38bdda": "494e64", + "695575": "4f133f", + "aca699": "acbfc7", + "8d2151": "4676aa", + "cedaaa": "bad4e8" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/2026.json b/public/images/pokemon/variant/exp/back/2026.json new file mode 100644 index 00000000000..5758dcc8c6c --- /dev/null +++ b/public/images/pokemon/variant/exp/back/2026.json @@ -0,0 +1,31 @@ +{ + "1": { + "552720": "162f4b", + "ecd8b7": "b4c2a5", + "dfc043": "d17577", + "fffdfb": "d6d9ca", + "993c20": "1d3a57", + "b45f25": "2d5261", + "965821": "2f4e6b", + "e9be14": "945c7b", + "846b5b": "467f85", + "602c24": "162f4b", + "f9ed9f": "eb999a", + "e3882d": "3d7375", + "646124": "492652", + "fef443": "c48081" + }, + "2": { + "552720": "43617f", + "ecd8b7": "5a6f90", + "fffdfb": "6d8297", + "993c20": "965636", + "b45f25": "bd8551", + "965821": "9cb3ca", + "e9be14": "1a3551", + "846b5b": "202746", + "e3882d": "d3b06f", + "646124": "122140", + "fef443": "3a5873" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/2103.json b/public/images/pokemon/variant/exp/back/2103.json new file mode 100644 index 00000000000..2e97727835a --- /dev/null +++ b/public/images/pokemon/variant/exp/back/2103.json @@ -0,0 +1,28 @@ +{ + "1": { + "2f9934": "dea44c", + "9f6b41": "426378", + "70442e": "283f5b", + "e6ac5a": "869fdc", + "522f16": "131d33", + "9cbd4a": "9977dd", + "fff68b": "a3c4ed", + "36cc36": "f4e774", + "2d5826": "c8592a", + "7b5210": "373e85", + "ffffcd": "d3efff" + }, + "2": { + "2f9934": "3d324b", + "9f6b41": "ffdbe7", + "70442e": "d59cba", + "e6ac5a": "c84e7f", + "522f16": "925b81", + "9cbd4a": "824a96", + "fff68b": "eb748d", + "36cc36": "6a5b73", + "2d5826": "1f1a31", + "7b5210": "4e1044", + "ffffcd": "ffa29d" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/359-mega.json b/public/images/pokemon/variant/exp/back/359-mega.json new file mode 100644 index 00000000000..5ae5a7477e7 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/359-mega.json @@ -0,0 +1,24 @@ +{ + "1": { + "ffffff": "61a8ab", + "414a6a": "421e4a", + "b4b4d5": "458196", + "293939": "27122b", + "525a7b": "59274e", + "d5deee": "589aa6", + "737bac": "874267", + "626283": "2a3163", + "8b8bac": "3b6987" + }, + "2": { + "ffffff": "9e363b", + "414a6a": "b39279", + "b4b4d5": "752f40", + "293939": "996e5f", + "525a7b": "e0c79f", + "d5deee": "8f2f41", + "737bac": "f5f1cb", + "626283": "42122d", + "8b8bac": "59213b" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/6503.json b/public/images/pokemon/variant/exp/back/6503.json new file mode 100644 index 00000000000..a977e095e71 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/6503.json @@ -0,0 +1,35 @@ +{ + "1": { + "181531": "a26579", + "fafcf9": "f6f4f4", + "84a4a7": "563785", + "a82c47": "d45b9e", + "8aa3a3": "d3a0bb", + "494a48": "3d2439", + "1d3962": "28142c", + "474a46": "2b1838", + "d75063": "b73891", + "6b1c34": "8f3396", + "1e224e": "dc95ae", + "1e5b9b": "4d244b", + "8da8a8": "a58b90", + "597471": "332a59", + "282f62": "f7d9de" + }, + "2": { + "181531": "715b72", + "fafcf9": "2c3940", + "84a4a7": "41857b", + "a82c47": "8abfb1", + "8aa3a3": "232d2e", + "494a48": "181f20", + "1d3962": "321e1e", + "474a46": "181f20", + "d75063": "8f65d8", + "6b1c34": "6d9d9a", + "1e224e": "ba9bc1", + "1e5b9b": "5e3e38", + "597471": "2a5c57", + "282f62": "efdfee" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/656.json b/public/images/pokemon/variant/exp/back/656.json new file mode 100644 index 00000000000..34b11bfab78 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/656.json @@ -0,0 +1,24 @@ +{ + "1": { + "838394": "4d7dc5", + "7bcdff": "9c75c2", + "62ace6": "8363af", + "ffffff": "b1e5ff", + "396a83": "362864", + "9c9cc5": "5385c7", + "cdcde6": "7eb7e8", + "174592": "198158", + "5a94cd": "7054a4" + }, + "2": { + "838394": "cc6845", + "7bcdff": "dd6155", + "62ace6": "c44848", + "ffffff": "fff4bd", + "396a83": "5c0d33", + "9c9cc5": "c96a48", + "cdcde6": "f7b785", + "174592": "198158", + "5a94cd": "a92f3f" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/657.json b/public/images/pokemon/variant/exp/back/657.json new file mode 100644 index 00000000000..083a9dba0a6 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/657.json @@ -0,0 +1,24 @@ +{ + "1": { + "f8f8f8": "8dcfff", + "737373": "0f3f82", + "0b566a": "281f52", + "002c58": "1c0726", + "bfbfbf": "4386df", + "006ba6": "4e1852", + "0b4a7a": "340f3d", + "41ccf5": "7755a7", + "2896b5": "4b3578" + }, + "2": { + "f8f8f8": "fff6c7", + "737373": "df6a50", + "0b566a": "7e1628", + "002c58": "0c3b54", + "bfbfbf": "ffc996", + "006ba6": "239c91", + "0b4a7a": "156f78", + "41ccf5": "dd7355", + "2896b5": "a92f3a" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/658-ash.json b/public/images/pokemon/variant/exp/back/658-ash.json new file mode 100644 index 00000000000..370d5df8081 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/658-ash.json @@ -0,0 +1,38 @@ +{ + "1": { + "265595": "432b6c", + "de3431": "3fca9f", + "f8f8f8": "a1e9f0", + "7b282e": "0e3e81", + "6b1d1d": "206d74", + "134e52": "062e3c", + "bfb169": "165e78", + "ffb2bf": "b7e9ff", + "bf4c60": "4386df", + "282c35": "271f4c", + "f2798d": "8dcfff", + "268794": "1c3e58", + "3e7acc": "6b4592", + "7ddeff": "7ddcd6", + "4ebdd9": "41a7b0", + "18335c": "170738" + }, + "2": { + "265595": "cc7251", + "de3431": "9ceec6", + "f8f8f8": "89d2b8", + "7b282e": "152a5c", + "6b1d1d": "356e8d", + "134e52": "0d1e3e", + "bfb169": "4d2637", + "ffb2bf": "86d6b6", + "bf4c60": "32738b", + "282c35": "4d2637", + "f2798d": "5eb4a9", + "268794": "1c3e58", + "3e7acc": "ecbb7a", + "7ddeff": "46988d", + "4ebdd9": "2f6e74", + "18335c": "9f2727" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/658.json b/public/images/pokemon/variant/exp/back/658.json new file mode 100644 index 00000000000..c1bb4222ce4 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/658.json @@ -0,0 +1,26 @@ +{ + "1": { + "ffb2bf": "b7e9ff", + "bf4c60": "4386df", + "3d61cc": "6b4592", + "fff0a6": "208698", + "2e4999": "432b6c", + "f2798d": "8dcfff", + "803340": "0e3e81", + "1b2a59": "170738", + "66d9ff": "7ddcd6", + "bfb169": "165e78" + }, + "2": { + "ffb2bf": "86d6b6", + "bf4c60": "32738b", + "3d61cc": "ecbb7a", + "fff0a6": "652240", + "2e4999": "cc7251", + "f2798d": "5eb4a9", + "803340": "152a5c", + "1b2a59": "9f2727", + "66d9ff": "48968c", + "bfb169": "431022" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/676.json b/public/images/pokemon/variant/exp/back/676.json new file mode 100644 index 00000000000..7e64f6b0f61 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/676.json @@ -0,0 +1,21 @@ +{ + "1": { + "f2f2da": "8a1d1d", + "3f6273": "2b040f", + "595350": "788087", + "736b67": "a6afb3", + "ccccb8": "5e0f16", + "66665c": "2b040f", + "a6a695": "42090e" + }, + "2": { + "cc2929": "3a240e", + "f2f2da": "c18960", + "3f6273": "4a281b", + "595350": "e6c594", + "736b67": "ffe6ac", + "ccccb8": "a4624a", + "66665c": "4a281b", + "a6a695": "805145" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/682.json b/public/images/pokemon/variant/exp/back/682.json new file mode 100644 index 00000000000..bc2111153cf --- /dev/null +++ b/public/images/pokemon/variant/exp/back/682.json @@ -0,0 +1,21 @@ +{ + "1": { + "6b3962": "30185d", + "cc7087": "318759", + "993d80": "4f297e", + "ff99b3": "48ab61", + "7f4d59": "20644e", + "4d4d4d": "a6a6a6" + }, + "2": { + "4f4c4f": "332539", + "6b3962": "b89477", + "cc7087": "c3561a", + "993d80": "d2bfa1", + "ff99b3": "da7e29", + "7f4d59": "a23812", + "e5e5e5": "6b4767", + "4d4d4d": "503851", + "737373": "422f46" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/683.json b/public/images/pokemon/variant/exp/back/683.json new file mode 100644 index 00000000000..9d7f4682b9a --- /dev/null +++ b/public/images/pokemon/variant/exp/back/683.json @@ -0,0 +1,20 @@ +{ + "1": { + "6b3962": "30185d", + "cc7087": "318759", + "993d80": "4f297e", + "ff99b3": "48ab61", + "404040": "2c283b", + "7f4d59": "20644e", + "bf5f9f": "7c48a1" + }, + "2": { + "6b3962": "b89477", + "cc7087": "c3561a", + "993d80": "d2bfa1", + "ff99b3": "da7e29", + "404040": "2a2234", + "7f4d59": "a23812", + "bf5f9f": "f0ebdd" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/684.json b/public/images/pokemon/variant/exp/back/684.json new file mode 100644 index 00000000000..25de3aa838f --- /dev/null +++ b/public/images/pokemon/variant/exp/back/684.json @@ -0,0 +1,22 @@ +{ + "1": { + "805963": "2d0c42", + "553a41": "8f1d15", + "ffccd9": "8961c6", + "cc99a6": "613b84", + "fff2f2": "f39f62", + "5e4048": "260b37", + "ccadad": "df6b40", + "7b5760": "b13924" + }, + "2": { + "805963": "6796aa", + "553a41": "1d1426", + "ffccd9": "cbf6da", + "cc99a6": "93d6ce", + "fff2f2": "746998", + "5e4048": "52718e", + "ccadad": "4b4876", + "7b5760": "3c2f51" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/685.json b/public/images/pokemon/variant/exp/back/685.json new file mode 100644 index 00000000000..a144e0d45ff --- /dev/null +++ b/public/images/pokemon/variant/exp/back/685.json @@ -0,0 +1,26 @@ +{ + "1": { + "f8f8f8": "caff90", + "661a2d": "13391c", + "805963": "2d0c42", + "ffccd9": "8961c6", + "ff8ca9": "8dbe6d", + "cc99a6": "613b84", + "e53964": "689b52", + "fff2f2": "f39f62", + "ccadad": "df6b40", + "a62949": "26592b" + }, + "2": { + "f8f8f8": "e4819d", + "661a2d": "26061b", + "805963": "679baa", + "ffccd9": "cbf6da", + "ff8ca9": "8c4264", + "cc99a6": "93d6ce", + "e53964": "612747", + "fff2f2": "746998", + "ccadad": "4b4876", + "a62949": "441838" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/688.json b/public/images/pokemon/variant/exp/back/688.json new file mode 100644 index 00000000000..e3d15e60fed --- /dev/null +++ b/public/images/pokemon/variant/exp/back/688.json @@ -0,0 +1,30 @@ +{ + "1": { + "bfeaff": "e8d37b", + "f2f2f2": "e8e5c6", + "5b8da6": "a9582e", + "595959": "7c582e", + "403410": "220a56", + "3f6273": "70240f", + "b3b3b3": "d3bc8c", + "ffac59": "70cccf", + "85b4cc": "cd8a50", + "997e2e": "4557b5", + "cc8a47": "459aac", + "66541f": "373295" + }, + "2": { + "bfeaff": "a74083", + "f2f2f2": "d1ec8c", + "5b8da6": "4b0038", + "595959": "4d6a09", + "403410": "1e1324", + "3f6273": "2c052a", + "b3b3b3": "94c268", + "ffac59": "4a376e", + "85b4cc": "731f5c", + "997e2e": "f6eefc", + "cc8a47": "332149", + "66541f": "ba9fba" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/689.json b/public/images/pokemon/variant/exp/back/689.json new file mode 100644 index 00000000000..6c47b57f35b --- /dev/null +++ b/public/images/pokemon/variant/exp/back/689.json @@ -0,0 +1,31 @@ +{ + "1": { + "cc7f70": "459aac", + "f2f2f2": "e8e5c6", + "5b8da6": "8d5030", + "595959": "7c582e", + "403410": "220a56", + "3f6273": "672e1e", + "b3b3b3": "d3bc8c", + "bfeaff": "e8d37b", + "85b4cc": "cd8a50", + "ff9f8c": "70cccf", + "66541f": "373295", + "997e2e": "4557b5" + }, + "2": { + "cc7f70": "332149", + "f2f2f2": "caea77", + "5b8da6": "4b0038", + "595959": "2a5524", + "403410": "3f2a4b", + "3f6273": "3e073b", + "b3b3b3": "7eac4e", + "bfeaff": "a74083", + "85b4cc": "731f5c", + "f8f8f8": "dbaf67", + "ff9f8c": "4a376e", + "66541f": "ccb6cc", + "997e2e": "f6eefc" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/807.json b/public/images/pokemon/variant/exp/back/807.json new file mode 100644 index 00000000000..aff6a52c9b2 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/807.json @@ -0,0 +1,38 @@ +{ + "1": { + "53e4f9": "eac1eb", + "ef8a4e": "4f7bb6", + "2759a5": "736599", + "5bd0f2": "ebceff", + "2394d8": "b298d8", + "31343e": "14193f", + "1f73b4": "995fc0", + "4cf4fe": "f4a7ff", + "484f57": "243058", + "daa936": "5c96b4", + "727678": "3e5277", + "30cff1": "d7a7de", + "f9e455": "80c7d7", + "000000": "ffffff", + "9d682d": "3d648c", + "14bdea": "c987e3" + }, + "2": { + "53e4f9": "e688af", + "ef8a4e": "844c94", + "2759a5": "a3378a", + "5bd0f2": "df7298", + "2394d8": "be5293", + "31343e": "a880b0", + "1f73b4": "9a1d82", + "4cf4fe": "e3418f", + "484f57": "cba3ca", + "daa936": "351d53", + "727678": "e7c9e2", + "30cff1": "d967a2", + "f9e455": "58326f", + "000000": "ffffff", + "9d682d": "1f1144", + "14bdea": "c02f8d" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/894.json b/public/images/pokemon/variant/exp/back/894.json new file mode 100644 index 00000000000..276133a842a --- /dev/null +++ b/public/images/pokemon/variant/exp/back/894.json @@ -0,0 +1,24 @@ +{ + "1": { + "e5ee1a": "6ad7f3", + "7d542a": "2769aa", + "bc8b2f": "124b78", + "8eacdd": "caffd1", + "2e3967": "357b84", + "fefac7": "dffff6", + "375395": "5fcaad", + "4e7cc9": "9bf1c4", + "d7ad0d": "45a3d6" + }, + "2": { + "e5ee1a": "d4ffd0", + "7d542a": "429877", + "bc8b2f": "2a6f5d", + "8eacdd": "c693d8", + "2e3967": "514199", + "fefac7": "ffffff", + "375395": "815bad", + "4e7cc9": "b67cd6", + "d7ad0d": "7cd395" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/895.json b/public/images/pokemon/variant/exp/back/895.json new file mode 100644 index 00000000000..d6859edafb3 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/895.json @@ -0,0 +1,28 @@ +{ + "1": { + "641e2c": "722123", + "b63650": "bc623e", + "608d99": "fae5bf", + "2b3d40": "754f47", + "4b6f78": "f1d4b6", + "e05276": "ef8429", + "f27a99": "efb55a", + "ff92ae": "edca71", + "3f545f": "ad8473", + "872c3c": "93372d", + "242e35": "512c25" + }, + "2": { + "641e2c": "15553b", + "b63650": "3bb349", + "608d99": "9b7ebc", + "2b3d40": "241951", + "4b6f78": "5a4382", + "e05276": "8aea41", + "f27a99": "dfff75", + "ff92ae": "f1ff8d", + "3f545f": "3a2a67", + "872c3c": "227843", + "242e35": "0f0c1e" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/944.json b/public/images/pokemon/variant/exp/back/944.json new file mode 100644 index 00000000000..6de6bc5e833 --- /dev/null +++ b/public/images/pokemon/variant/exp/back/944.json @@ -0,0 +1,34 @@ +{ + "1": { + "403f4f": "33784a", + "dcdcc3": "88eeab", + "484441": "286943", + "282434": "16402d", + "2f2826": "18493f", + "774d9b": "d09139", + "8095a8": "5e4090", + "e6e2e1": "53a164", + "a599a8": "3f8d59", + "211e28": "103833", + "bbd2e3": "8056a7", + "aca699": "3ec295", + "000000": "ffffff", + "6c5c4d": "1c9b8d" + }, + "2": { + "403f4f": "395d87", + "dcdcc3": "e2f3ff", + "484441": "2c4f8a", + "282434": "1d2f5b", + "2f2826": "1e3072", + "774d9b": "4c5372", + "8095a8": "902a4b", + "e6e2e1": "78b0c2", + "a599a8": "5582a4", + "211e28": "17255b", + "bbd2e3": "c23f4f", + "aca699": "abc1df", + "000000": "ffffff", + "6c5c4d": "6777aa" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/945.json b/public/images/pokemon/variant/exp/back/945.json new file mode 100644 index 00000000000..6590d0b67ed --- /dev/null +++ b/public/images/pokemon/variant/exp/back/945.json @@ -0,0 +1,43 @@ +{ + "1": { + "403f4f": "357747", + "1f2635": "1c193d", + "dcdcc3": "5ddcb2", + "282434": "14463f", + "a491a4": "499833", + "e6e2e1": "fffbf3", + "671544": "0f4e67", + "134175": "a74d2a", + "4f483f": "1b727b", + "323d4a": "2e2452", + "000000": "ffffff", + "4b616b": "473869", + "d73875": "29ad89", + "2481b0": "d09139", + "38bdda": "ffe269", + "695575": "16613d", + "aca699": "2db3a4", + "8d2151": "157375" + }, + "2": { + "403f4f": "3b6b9e", + "1f2635": "3b091c", + "dcdcc3": "edf0f1", + "282434": "2d427e", + "a491a4": "902a4b", + "e6e2e1": "ebf4f9", + "671544": "223969", + "134175": "1c182f", + "4f483f": "5d7487", + "323d4a": "580f1d", + "000000": "ffffff", + "4b616b": "8a2029", + "a599a8": "bf888f", + "d73875": "68adca", + "2481b0": "2c2c46", + "38bdda": "494e64", + "695575": "4f133f", + "aca699": "acbfc7", + "8d2151": "4676aa" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/female/154.json b/public/images/pokemon/variant/female/154.json new file mode 100644 index 00000000000..c02d214d834 --- /dev/null +++ b/public/images/pokemon/variant/female/154.json @@ -0,0 +1,30 @@ +{ + "1": { + "634a00": "6da0df", + "f7a59c": "3c88ac", + "e6ad00": "90c6f8", + "ff3a5a": "234d81", + "ffde21": "b9e2ff", + "ce213a": "192e5e", + "63bd42": "9d86d9", + "bdff7b": "dadffe", + "7b103a": "111c44", + "107b31": "8057b2", + "fefefe": "a6f5af", + "9ce652": "b7afee" + }, + "2": { + "634a00": "144627", + "f7a59c": "ddf2b5", + "e6ad00": "1e632b", + "ff3a5a": "9ed662", + "ffde21": "288028", + "ce213a": "81c65c", + "63bd42": "a31f60", + "bdff7b": "f57382", + "7b103a": "59ac45", + "107b31": "761858", + "fefefe": "f6ffdf", + "9ce652": "cd3b6b" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/female/194.json b/public/images/pokemon/variant/female/194.json new file mode 100644 index 00000000000..5824dec5029 --- /dev/null +++ b/public/images/pokemon/variant/female/194.json @@ -0,0 +1,24 @@ +{ + "1": { + "104a84": "7a150a", + "b54242": "1a6a62", + "ff6b73": "4db983", + "633a6b": "09484f", + "3a7bc5": "d5682e", + "ef73e6": "44d77f", + "73bdff": "ffc355", + "529ce6": "e8983d", + "d65ad6": "2ea380" + }, + "2": { + "104a84": "180d42", + "b54242": "8a9fc2", + "ff6b73": "e8faff", + "633a6b": "444c7e", + "3a7bc5": "3f377e", + "ef73e6": "e8faff", + "73bdff": "5c66c4", + "529ce6": "564daa", + "d65ad6": "aeccdf" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/female/195.json b/public/images/pokemon/variant/female/195.json new file mode 100644 index 00000000000..ff25261d120 --- /dev/null +++ b/public/images/pokemon/variant/female/195.json @@ -0,0 +1,25 @@ +{ + "1": { + "ade6ff": "f6dfa8", + "84d6f7": "ed9e4f", + "f7f7f7": "fffbea", + "637ba5": "816251", + "639cbd": "dc6a4d", + "3194a5": "44d77f", + "425284": "b03844", + "195a6b": "2ea380", + "6b5a8c": "1b5a55" + }, + "2": { + "ade6ff": "9864c2", + "84d6f7": "724ba7", + "f7f7f7": "e8b6ff", + "637ba5": "504a8a", + "639cbd": "493a8d", + "3194a5": "ebf5ff", + "19423a": "747aae", + "425284": "240830", + "195a6b": "aebbdf", + "6b5a8c": "5e649b" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/female/198.json b/public/images/pokemon/variant/female/198.json new file mode 100644 index 00000000000..b0386502899 --- /dev/null +++ b/public/images/pokemon/variant/female/198.json @@ -0,0 +1,34 @@ +{ + "1": { + "d94352": "b3986b", + "314263": "462b20", + "d64252": "7a101c", + "73293a": "4d0419", + "ffad8c": "ad2e24", + "73283a": "630c17", + "d6404f": "8c1b23", + "efd684": "a6a6b3", + "42639c": "694c30", + "5a4a21": "25253b", + "292942": "2a1512", + "b59c21": "57566f", + "752a3c": "755237", + "d6bd52": "838098" + }, + "2": { + "d94352": "bc4b84", + "314263": "0e4333", + "d64252": "5939a9", + "73293a": "1e1764", + "ffad8c": "b164e6", + "73283a": "630c17", + "d6404f": "8c1b23", + "efd684": "c2723a", + "42639c": "1d6e47", + "5a4a21": "4e1915", + "292942": "091e16", + "b59c21": "85412d", + "752a3c": "7b2363", + "d6bd52": "9a5524" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/female/25-beauty-cosplay.json b/public/images/pokemon/variant/female/25-beauty-cosplay.json new file mode 100644 index 00000000000..0e5a6a1bad2 --- /dev/null +++ b/public/images/pokemon/variant/female/25-beauty-cosplay.json @@ -0,0 +1,49 @@ +{ + "1": { + "c52119": "ad4e76", + "5e5e6b": "6c6e60", + "f7e652": "a3d1a8", + "52525a": "4f454c", + "cecab9": "cfc8aa", + "e65137": "c95578", + "fffabf": "f4f7ab", + "b52821": "ad4469", + "292929": "1e1526", + "39509d": "47449c", + "f7e860": "f2ea50", + "e65a42": "cf6182", + "4d88c4": "7976c6", + "f7bd21": "79b5a5", + "2d276d": "2f2768", + "242323": "282030", + "585861": "443e6c", + "fff7a5": "c4e3c3", + "9c5200": "315c75", + "f7cc2f": "f7bd21", + "fffdea": "f8ffe3" + }, + "2": { + "c52119": "ebc67c", + "5e5e6b": "8a2554", + "f7e652": "577b98", + "52525a": "f1b571", + "cecab9": "b84084", + "e65137": "b95b6e", + "fffabf": "f5efd1", + "b52821": "6a253f", + "292929": "a45233", + "39509d": "9ec4cd", + "f7e860": "eddc78", + "e65a42": "eedd9c", + "4d88c4": "e4f6f1", + "f7bd21": "486689", + "2d276d": "454a61", + "242323": "282030", + "585861": "3f4246", + "fff7a5": "7b96aa", + "9c5200": "283361", + "965b0e": "96500e", + "f7cc2f": "d5ac44", + "fffdea": "ea82a6" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/female/25-cool-cosplay.json b/public/images/pokemon/variant/female/25-cool-cosplay.json new file mode 100644 index 00000000000..de4a138b690 --- /dev/null +++ b/public/images/pokemon/variant/female/25-cool-cosplay.json @@ -0,0 +1,49 @@ +{ + "1": { + "171717": "2a1d36", + "e8b127": "f5ca2f", + "52525a": "55555e", + "c52119": "ad4e76", + "842222": "7b1f18", + "f7e652": "a3d1a8", + "fff7a5": "c4e3c3", + "2baf23": "76a848", + "f7bd21": "79b5a5", + "e65a42": "cf6182", + "ba2b23": "b73850", + "f5e193": "f4f7ab", + "e66953": "b95b6e", + "6f6c8e": "656f86", + "a6adb6": "a5b0b6", + "8c4e22": "965b0e", + "9c5200": "1c4f75", + "c43129": "6a253f", + "d95b45": "cf6887", + "45484d": "443e6c", + "3b3b40": "4a3e46", + "292929": "272b2b" + }, + "2": { + "171717": "a45233", + "e8b127": "e7b432", + "52525a": "8f4b32", + "c52119": "ebc67c", + "842222": "1e1e43", + "f7e652": "577b98", + "fff7a5": "7b96aa", + "2baf23": "572626", + "f7bd21": "445f8a", + "e65a42": "eedd9c", + "ba2b23": "2c2c47", + "f5e193": "eadbb3", + "e66953": "b95b6e", + "6f6c8e": "cf752b", + "a6adb6": "f0b541", + "8c4e22": "b1632b", + "9c5200": "22325c", + "c43129": "6a253f", + "d95b45": "3a3f5e", + "3b3b40": "f1b571", + "292929": "7d3833" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/female/25-cosplay.json b/public/images/pokemon/variant/female/25-cosplay.json new file mode 100644 index 00000000000..e324c094019 --- /dev/null +++ b/public/images/pokemon/variant/female/25-cosplay.json @@ -0,0 +1,36 @@ +{ + "1": { + "f7e652": "a3d1a8", + "212121": "30263b", + "c43129": "6a253f", + "171717": "1e1526", + "292929": "282030", + "e65a42": "cf6182", + "c52119": "ad4e76", + "42424a": "443e6c", + "fff7a5": "c4e3c3", + "f7bd21": "79b5a5", + "45454a": "4f454c", + "9c5200": "315c75", + "633108": "09406b", + "e66953": "b95b6e", + "de9400": "338087" + }, + "2": { + "f7e652": "577b98", + "212121": "d8805b", + "c43129": "6a253f", + "171717": "a45233", + "292929": "282030", + "e65a42": "eedd9c", + "c52119": "ebc67c", + "42424a": "3f4246", + "fff7a5": "7b96aa", + "f7bd21": "445f8a", + "45454a": "f1b571", + "9c5200": "23345e", + "633108": "22244f", + "e66953": "b95b6e", + "de9400": "324472" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/female/25-cute-cosplay.json b/public/images/pokemon/variant/female/25-cute-cosplay.json new file mode 100644 index 00000000000..26bebb4143d --- /dev/null +++ b/public/images/pokemon/variant/female/25-cute-cosplay.json @@ -0,0 +1,43 @@ +{ + "1": { + "212121": "30263b", + "e65a42": "cf6182", + "fff7a5": "c4e3c3", + "45454a": "4f454c", + "c52119": "ad4e76", + "9c5200": "255e8a", + "752bd0": "5452b7", + "f3bace": "f2bbbb", + "f7e652": "a3d1a8", + "ea82a6": "e8848e", + "e66953": "b95b6e", + "853247": "85323c", + "c43129": "6a253f", + "baa998": "bab699", + "42424a": "443e6c", + "fff9ba": "f0eaa8", + "f7bd21": "79b5a5", + "cf4770": "cf4a59" + }, + "2": { + "212121": "d8805b", + "e65a42": "eedd9c", + "fff7a5": "7b96aa", + "45454a": "f1b571", + "c52119": "ebc67c", + "9c5200": "1e2d52", + "752bd0": "7751c2", + "f3bace": "c5cc85", + "f7e652": "577b98", + "ea82a6": "a4b95f", + "e66953": "b95b6e", + "171717": "a45233", + "853247": "254b30", + "c43129": "6a253f", + "baa998": "d3ab5a", + "42424a": "373d45", + "fff9ba": "ebe7b7", + "f7bd21": "445f8a", + "cf4770": "739b55" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/female/25-partner.json b/public/images/pokemon/variant/female/25-partner.json new file mode 100644 index 00000000000..0542587ba6d --- /dev/null +++ b/public/images/pokemon/variant/female/25-partner.json @@ -0,0 +1,36 @@ +{ + "1": { + "42424a": "443e6c", + "fff7a5": "c4e3c3", + "c52119": "ad4e76", + "de9400": "338087", + "e65a42": "cf6182", + "f7e652": "a3d1a8", + "e66953": "b95b6e", + "45454a": "4f454c", + "292929": "282030", + "c43129": "6a253f", + "212121": "30263b", + "171717": "1e1526", + "f7bd21": "79b5a5", + "9c5200": "315c75", + "633108": "09406b" + }, + "2": { + "42424a": "3f4246", + "fff7a5": "7b96aa", + "c52119": "ebc67c", + "de9400": "324472", + "e65a42": "eedd9c", + "f7e652": "577b98", + "e66953": "b95b6e", + "45454a": "f1b571", + "292929": "282030", + "c43129": "6a253f", + "212121": "d8805b", + "171717": "a45233", + "f7bd21": "445f8a", + "9c5200": "23345e", + "633108": "22244f" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/female/25-smart-cosplay.json b/public/images/pokemon/variant/female/25-smart-cosplay.json new file mode 100644 index 00000000000..4ba98883f16 --- /dev/null +++ b/public/images/pokemon/variant/female/25-smart-cosplay.json @@ -0,0 +1,42 @@ +{ + "1": { + "212121": "30263b", + "b7a599": "bab699", + "60b553": "76a848", + "366635": "3e5b2f", + "e35252": "d16b9a", + "c52119": "ad4e76", + "292929": "272b2b", + "9c5200": "315c75", + "f7e652": "a3d1a8", + "95635b": "91685f", + "171717": "1e1526", + "ba2525": "993f70", + "e65a42": "cf6182", + "54545c": "55555e", + "52525a": "4f454c", + "fffdea": "f8ffe3", + "f7bd21": "79b5a5", + "5f3434": "573b38" + }, + "2": { + "212121": "d8805b", + "b7a599": "a7b6b9", + "60b553": "dfb053", + "366635": "ab5130", + "e35252": "3a3f5e", + "c52119": "ebc67c", + "292929": "202937", + "9c5200": "23345e", + "f7e652": "577b98", + "95635b": "a09ea3", + "171717": "a45233", + "ba2525": "2b2b45", + "e65a42": "eedd9c", + "54545c": "45525c", + "52525a": "f1b571", + "fffdea": "f2f0df", + "f7bd21": "445f8a", + "5f3434": "666060" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/female/25-tough-cosplay.json b/public/images/pokemon/variant/female/25-tough-cosplay.json new file mode 100644 index 00000000000..620ac882643 --- /dev/null +++ b/public/images/pokemon/variant/female/25-tough-cosplay.json @@ -0,0 +1,43 @@ +{ + "1": { + "e37511": "d1694f", + "bf2629": "bf3638", + "303030": "30263b", + "b8282b": "753652", + "8d2b1d": "8e2525", + "424242": "443e6c", + "c52119": "ad4e76", + "292929": "1e1526", + "f7bd21": "79b5a5", + "fbab33": "de9764", + "db4a37": "ad4c60", + "e65a42": "cf6182", + "9c5200": "315c75", + "db5b42": "cf6a59", + "52525a": "4f454c", + "cecab9": "cfc8aa", + "f7e652": "a3d1a8" + }, + "2": { + "e37511": "644794", + "bf2629": "8e6fa1", + "f8ffe3": "e8e3e4", + "303030": "d8805b", + "b8282b": "6a253f", + "8d2b1d": "242866", + "424242": "3f4246", + "c52119": "e8be68", + "292929": "a45233", + "f7bd21": "445f8a", + "fbab33": "845ea1", + "db4a37": "b95b6e", + "e65a42": "edda8c", + "9c5200": "23345e", + "db5b42": "624780", + "52525a": "f1b571", + "4d4d4d": "2b3340", + "272b2b": "162231", + "cecab9": "cfc0c3", + "f7e652": "577b98" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/female/25.json b/public/images/pokemon/variant/female/25.json new file mode 100644 index 00000000000..0542587ba6d --- /dev/null +++ b/public/images/pokemon/variant/female/25.json @@ -0,0 +1,36 @@ +{ + "1": { + "42424a": "443e6c", + "fff7a5": "c4e3c3", + "c52119": "ad4e76", + "de9400": "338087", + "e65a42": "cf6182", + "f7e652": "a3d1a8", + "e66953": "b95b6e", + "45454a": "4f454c", + "292929": "282030", + "c43129": "6a253f", + "212121": "30263b", + "171717": "1e1526", + "f7bd21": "79b5a5", + "9c5200": "315c75", + "633108": "09406b" + }, + "2": { + "42424a": "3f4246", + "fff7a5": "7b96aa", + "c52119": "ebc67c", + "de9400": "324472", + "e65a42": "eedd9c", + "f7e652": "577b98", + "e66953": "b95b6e", + "45454a": "f1b571", + "292929": "282030", + "c43129": "6a253f", + "212121": "d8805b", + "171717": "a45233", + "f7bd21": "445f8a", + "9c5200": "23345e", + "633108": "22244f" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/female/26.json b/public/images/pokemon/variant/female/26.json new file mode 100644 index 00000000000..40921512c4b --- /dev/null +++ b/public/images/pokemon/variant/female/26.json @@ -0,0 +1,39 @@ +{ + "1": { + "101010": "000000", + "ffefd6": "c8d4ba", + "bd1908": "ad4e76", + "944242": "643034", + "bd5a31": "386d82", + "e6bd84": "a4bda7", + "ffbd00": "b3596b", + "5a2929": "293059", + "3a3a42": "30263b", + "8c6310": "8c3c4c", + "ffde5a": "cf7878", + "8d5911": "983e50", + "734231": "6e2f33", + "63636b": "4f454c", + "de7b31": "539190", + "f7ad29": "76a68b", + "643034": "395a80" + }, + "2": { + "101010": "000000", + "ffefd6": "cfc4b5", + "542127": "905331", + "bd1908": "a44c5d", + "944242": "2e4685", + "bd5a31": "375681", + "e6bd84": "a6b5ab", + "ffbd00": "f3cf91", + "5a2929": "202a60", + "8c6310": "c79b5a", + "ffde5a": "f2e4b6", + "8d5911": "dea96e", + "734231": "bd8447", + "de7b31": "4d6f98", + "f7ad29": "6385ab", + "643034": "2d3b80" + } +} \ No newline at end of file diff --git a/public/images/pokemon_icons_1v.json b/public/images/pokemon_icons_1v.json index 4400b9d0213..de66db65eb7 100644 --- a/public/images/pokemon_icons_1v.json +++ b/public/images/pokemon_icons_1v.json @@ -1,1740 +1,2299 @@ -{ "frames": { - "100_2": { - "frame": { "x": 390, "y": 53, "w": 14, "h": 14 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 13, "y": 14, "w": 14, "h": 14 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "100_3": { - "frame": { "x": 328, "y": 30, "w": 14, "h": 14 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 13, "y": 14, "w": 14, "h": 14 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "101_2": { - "frame": { "x": 287, "y": 172, "w": 16, "h": 16 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 12, "y": 12, "w": 16, "h": 16 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "101_3": { - "frame": { "x": 263, "y": 156, "w": 16, "h": 16 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 12, "y": 12, "w": 16, "h": 16 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "111_2": { - "frame": { "x": 211, "y": 226, "w": 24, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 8, "w": 24, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "111_3": { - "frame": { "x": 265, "y": 233, "w": 24, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 8, "w": 24, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "112_2": { - "frame": { "x": 347, "y": 125, "w": 25, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 5, "w": 25, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "112_3": { - "frame": { "x": 322, "y": 125, "w": 25, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 5, "w": 25, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "113_1": { - "frame": { "x": 421, "y": 158, "w": 19, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 8, "w": 19, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "113_2": { - "frame": { "x": 299, "y": 277, "w": 19, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 8, "w": 19, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "113_3": { - "frame": { "x": 280, "y": 276, "w": 19, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 8, "w": 19, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "114_2": { - "frame": { "x": 212, "y": 297, "w": 19, "h": 18 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 10, "w": 19, "h": 18 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "114_3": { - "frame": { "x": 336, "y": 298, "w": 19, "h": 18 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 10, "w": 19, "h": 18 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "116_2": { - "frame": { "x": 142, "y": 303, "w": 18, "h": 17 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 11, "w": 18, "h": 17 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "116_3": { - "frame": { "x": 17, "y": 303, "w": 18, "h": 17 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 11, "w": 18, "h": 17 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "117_2": { - "frame": { "x": 92, "y": 226, "w": 24, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 8, "w": 24, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "117_3": { - "frame": { "x": 376, "y": 223, "w": 24, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 8, "w": 24, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "118_1": { - "frame": { "x": 400, "y": 241, "w": 24, "h": 19 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 9, "w": 24, "h": 19 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "118_2": { - "frame": { "x": 20, "y": 242, "w": 24, "h": 19 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 9, "w": 24, "h": 19 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "118_3": { - "frame": { "x": 372, "y": 243, "w": 24, "h": 19 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 9, "w": 24, "h": 19 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "119_1": { - "frame": { "x": 400, "y": 200, "w": 25, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 8, "w": 25, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "119_2": { - "frame": { "x": 196, "y": 199, "w": 25, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 8, "w": 25, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "119_3": { - "frame": { "x": 0, "y": 199, "w": 25, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 8, "w": 25, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "120_2": { - "frame": { "x": 77, "y": 306, "w": 17, "h": 17 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 12, "y": 11, "w": 17, "h": 17 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "120_3": { - "frame": { "x": 94, "y": 311, "w": 17, "h": 17 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 12, "y": 11, "w": 17, "h": 17 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "121_2": { - "frame": { "x": 355, "y": 300, "w": 19, "h": 18 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 10, "w": 19, "h": 18 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "121_3": { - "frame": { "x": 58, "y": 296, "w": 19, "h": 18 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 10, "w": 19, "h": 18 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "123_1": { - "frame": { "x": 148, "y": 284, "w": 19, "h": 19 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 9, "w": 19, "h": 19 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "123_2": { - "frame": { "x": 0, "y": 284, "w": 19, "h": 19 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 9, "w": 19, "h": 19 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "123_3": { - "frame": { "x": 173, "y": 283, "w": 19, "h": 19 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 9, "w": 19, "h": 19 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "125_1": { - "frame": { "x": 69, "y": 235, "w": 21, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 6, "w": 21, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "125_2": { - "frame": { "x": 311, "y": 235, "w": 21, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 6, "w": 21, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "125_3": { - "frame": { "x": 235, "y": 234, "w": 21, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 6, "w": 21, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "126_2": { - "frame": { "x": 287, "y": 188, "w": 22, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 5, "w": 22, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "126_3": { - "frame": { "x": 378, "y": 178, "w": 22, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 5, "w": 22, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "127-mega_2": { - "frame": { "x": 0, "y": 54, "w": 31, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 4, "w": 31, "h": 25 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "127-mega_3": { - "frame": { "x": 359, "y": 53, "w": 31, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 4, "w": 31, "h": 25 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "127_2": { - "frame": { "x": 0, "y": 219, "w": 23, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 7, "w": 23, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "127_3": { - "frame": { "x": 46, "y": 223, "w": 23, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 7, "w": 23, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "129_2": { - "frame": { "x": 213, "y": 175, "w": 22, "h": 24 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 5, "w": 22, "h": 24 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "129_3": { - "frame": { "x": 418, "y": 0, "w": 22, "h": 24 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 5, "w": 22, "h": 24 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "130-mega_2": { - "frame": { "x": 30, "y": 25, "w": 30, "h": 29 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 1, "w": 30, "h": 29 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "130-mega_3": { - "frame": { "x": 0, "y": 25, "w": 30, "h": 29 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 1, "w": 30, "h": 29 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "130_2": { - "frame": { "x": 210, "y": 30, "w": 29, "h": 28 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 2, "w": 29, "h": 28 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "130_3": { - "frame": { "x": 239, "y": 30, "w": 29, "h": 28 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 2, "w": 29, "h": 28 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "131-gigantamax_2": { - "frame": { "x": 373, "y": 25, "w": 31, "h": 28 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 0, "w": 31, "h": 28 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "131-gigantamax_3": { - "frame": { "x": 342, "y": 25, "w": 31, "h": 28 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 0, "w": 31, "h": 28 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "131_2": { - "frame": { "x": 172, "y": 198, "w": 24, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 7, "w": 24, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "131_3": { - "frame": { "x": 354, "y": 194, "w": 24, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 7, "w": 24, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "132_2": { - "frame": { "x": 231, "y": 311, "w": 16, "h": 13 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 12, "y": 15, "w": 16, "h": 13 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "132_3": { - "frame": { "x": 247, "y": 312, "w": 16, "h": 13 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 12, "y": 15, "w": 16, "h": 13 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "133_2": { - "frame": { "x": 0, "y": 303, "w": 17, "h": 18 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 12, "y": 10, "w": 17, "h": 18 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "133_3": { - "frame": { "x": 35, "y": 305, "w": 17, "h": 18 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 12, "y": 10, "w": 17, "h": 18 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "134_2": { - "frame": { "x": 165, "y": 219, "w": 23, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 7, "w": 23, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "134_3": { - "frame": { "x": 69, "y": 214, "w": 23, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 7, "w": 23, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "135_1": { - "frame": { "x": 20, "y": 261, "w": 20, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 7, "w": 20, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "135_2": { - "frame": { "x": 153, "y": 263, "w": 20, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 7, "w": 20, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "135_3": { - "frame": { "x": 396, "y": 260, "w": 20, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 7, "w": 20, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "136_1": { - "frame": { "x": 23, "y": 221, "w": 23, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 7, "w": 23, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "136_2": { - "frame": { "x": 400, "y": 220, "w": 23, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 7, "w": 23, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "136_3": { - "frame": { "x": 142, "y": 217, "w": 23, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 7, "w": 23, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "137_2": { - "frame": { "x": 280, "y": 296, "w": 19, "h": 18 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 10, "w": 19, "h": 18 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "137_3": { - "frame": { "x": 299, "y": 297, "w": 19, "h": 18 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 10, "w": 19, "h": 18 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "138_2": { - "frame": { "x": 415, "y": 301, "w": 18, "h": 18 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 10, "w": 18, "h": 18 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "138_3": { - "frame": { "x": 167, "y": 302, "w": 18, "h": 18 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 10, "w": 18, "h": 18 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "139_2": { - "frame": { "x": 47, "y": 201, "w": 22, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 6, "w": 22, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "139_3": { - "frame": { "x": 243, "y": 212, "w": 22, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 6, "w": 22, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "140_2": { - "frame": { "x": 263, "y": 312, "w": 16, "h": 13 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 12, "y": 15, "w": 16, "h": 13 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "140_3": { - "frame": { "x": 424, "y": 239, "w": 16, "h": 13 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 12, "y": 15, "w": 16, "h": 13 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "141_2": { - "frame": { "x": 261, "y": 276, "w": 19, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 7, "w": 19, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "141_3": { - "frame": { "x": 214, "y": 276, "w": 19, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 7, "w": 19, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "142-mega_2": { - "frame": { "x": 268, "y": 56, "w": 32, "h": 24 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 5, "w": 32, "h": 24 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "142-mega_3": { - "frame": { "x": 62, "y": 57, "w": 32, "h": 24 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 5, "w": 32, "h": 24 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "142_2": { - "frame": { "x": 322, "y": 103, "w": 29, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 5, "w": 29, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "142_3": { - "frame": { "x": 351, "y": 103, "w": 29, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 5, "w": 29, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "144_1": { - "frame": { "x": 304, "y": 168, "w": 27, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 7, "w": 27, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "144_2": { - "frame": { "x": 49, "y": 158, "w": 27, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 7, "w": 27, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "144_3": { - "frame": { "x": 394, "y": 158, "w": 27, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 7, "w": 27, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "145_1": { - "frame": { "x": 77, "y": 155, "w": 29, "h": 19 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 7, "w": 29, "h": 19 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "145_2": { - "frame": { "x": 130, "y": 153, "w": 29, "h": 19 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 7, "w": 29, "h": 19 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "145_3": { - "frame": { "x": 159, "y": 153, "w": 29, "h": 19 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 7, "w": 29, "h": 19 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "146_1": { - "frame": { "x": 70, "y": 196, "w": 28, "h": 18 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 8, "w": 28, "h": 18 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "146_2": { - "frame": { "x": 122, "y": 195, "w": 28, "h": 18 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 8, "w": 28, "h": 18 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "146_3": { - "frame": { "x": 258, "y": 194, "w": 28, "h": 18 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 8, "w": 28, "h": 18 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "147_2": { - "frame": { "x": 192, "y": 287, "w": 20, "h": 18 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 10, "w": 20, "h": 18 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "147_3": { - "frame": { "x": 38, "y": 287, "w": 20, "h": 18 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 10, "w": 20, "h": 18 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "148_2": { - "frame": { "x": 98, "y": 204, "w": 22, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 6, "w": 22, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "148_3": { - "frame": { "x": 378, "y": 201, "w": 22, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 6, "w": 22, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "149_2": { - "frame": { "x": 188, "y": 155, "w": 25, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 6, "w": 25, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "149_3": { - "frame": { "x": 24, "y": 156, "w": 25, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 6, "w": 25, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "150-mega-x_2": { - "frame": { "x": 106, "y": 155, "w": 21, "h": 26 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 2, "w": 21, "h": 26 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "150-mega-x_3": { - "frame": { "x": 242, "y": 156, "w": 21, "h": 26 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 2, "w": 21, "h": 26 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "150-mega-y_2": { - "frame": { "x": 175, "y": 107, "w": 20, "h": 30 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 0, "w": 20, "h": 30 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "150-mega-y_3": { - "frame": { "x": 407, "y": 108, "w": 20, "h": 30 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 0, "w": 20, "h": 30 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "150_2": { - "frame": { "x": 352, "y": 236, "w": 20, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 12, "y": 5, "w": 20, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "150_3": { - "frame": { "x": 332, "y": 235, "w": 20, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 12, "y": 5, "w": 20, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "151_2": { - "frame": { "x": 195, "y": 130, "w": 23, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 2, "w": 23, "h": 25 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "151_3": { - "frame": { "x": 231, "y": 127, "w": 23, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 2, "w": 23, "h": 25 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "19_2": { - "frame": { "x": 321, "y": 258, "w": 20, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 7, "w": 20, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "19_3": { - "frame": { "x": 0, "y": 263, "w": 20, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 7, "w": 20, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "1_2": { - "frame": { "x": 338, "y": 279, "w": 20, "h": 19 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 9, "w": 20, "h": 19 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "1_3": { - "frame": { "x": 318, "y": 279, "w": 20, "h": 19 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 9, "w": 20, "h": 19 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "20_2": { - "frame": { "x": 174, "y": 177, "w": 25, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 7, "w": 25, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "20_3": { - "frame": { "x": 23, "y": 178, "w": 25, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 7, "w": 25, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "23_2": { - "frame": { "x": 416, "y": 280, "w": 18, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 7, "w": 18, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "23_3": { - "frame": { "x": 20, "y": 282, "w": 18, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 7, "w": 18, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "24_2": { - "frame": { "x": 138, "y": 238, "w": 20, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 5, "w": 20, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "24_3": { - "frame": { "x": 0, "y": 240, "w": 20, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 5, "w": 20, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "29_1": { - "frame": { "x": 130, "y": 133, "w": 18, "h": 19 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 9, "w": 18, "h": 19 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "29_2": { - "frame": { "x": 397, "y": 299, "w": 18, "h": 19 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 9, "w": 18, "h": 19 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "29_3": { - "frame": { "x": 379, "y": 299, "w": 18, "h": 19 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 9, "w": 18, "h": 19 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "2_2": { - "frame": { "x": 362, "y": 262, "w": 21, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 8, "w": 21, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "2_3": { - "frame": { "x": 173, "y": 263, "w": 21, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 8, "w": 21, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "3-gigantamax_2": { - "frame": { "x": 214, "y": 0, "w": 32, "h": 30 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 32, "h": 30 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "3-gigantamax_3": { - "frame": { "x": 246, "y": 0, "w": 32, "h": 30 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 32, "h": 30 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "3-mega_2": { - "frame": { "x": 181, "y": 58, "w": 29, "h": 26 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 2, "w": 29, "h": 26 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "3-mega_3": { - "frame": { "x": 152, "y": 57, "w": 29, "h": 26 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 2, "w": 29, "h": 26 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "30_2": { - "frame": { "x": 87, "y": 267, "w": 19, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 6, "w": 19, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "30_3": { - "frame": { "x": 40, "y": 265, "w": 19, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 6, "w": 19, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "31_1": { - "frame": { "x": 331, "y": 168, "w": 23, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 5, "w": 23, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "31_2": { - "frame": { "x": 0, "y": 172, "w": 23, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 5, "w": 23, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "31_3": { - "frame": { "x": 127, "y": 172, "w": 23, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 5, "w": 23, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "35_2": { - "frame": { "x": 318, "y": 298, "w": 18, "h": 19 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 12, "y": 9, "w": 18, "h": 19 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "35_3": { - "frame": { "x": 124, "y": 299, "w": 18, "h": 19 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 12, "y": 9, "w": 18, "h": 19 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "36_2": { - "frame": { "x": 178, "y": 240, "w": 20, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 5, "w": 20, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "36_3": { - "frame": { "x": 158, "y": 240, "w": 20, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 5, "w": 20, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "37_2": { - "frame": { "x": 194, "y": 267, "w": 20, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 8, "w": 20, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "37_3": { - "frame": { "x": 241, "y": 274, "w": 20, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 8, "w": 20, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "38_2": { - "frame": { "x": 370, "y": 149, "w": 24, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 5, "w": 24, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "38_3": { - "frame": { "x": 218, "y": 152, "w": 24, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 5, "w": 24, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "3_2": { - "frame": { "x": 0, "y": 79, "w": 30, "h": 24 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 4, "w": 30, "h": 24 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "3_3": { - "frame": { "x": 240, "y": 80, "w": 30, "h": 24 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 4, "w": 30, "h": 24 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "41_1": { - "frame": { "x": 341, "y": 259, "w": 21, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 7, "w": 21, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "41_2": { - "frame": { "x": 416, "y": 260, "w": 21, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 7, "w": 21, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "41_3": { - "frame": { "x": 132, "y": 261, "w": 21, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 7, "w": 21, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "42_1": { - "frame": { "x": 104, "y": 133, "w": 26, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 5, "w": 26, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "42_2": { - "frame": { "x": 25, "y": 134, "w": 26, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 5, "w": 26, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "42_3": { - "frame": { "x": 51, "y": 136, "w": 26, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 5, "w": 26, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "43_2": { - "frame": { "x": 423, "y": 220, "w": 17, "h": 19 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 13, "y": 9, "w": 17, "h": 19 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "43_3": { - "frame": { "x": 423, "y": 178, "w": 17, "h": 19 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 13, "y": 9, "w": 17, "h": 19 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "44_2": { - "frame": { "x": 116, "y": 235, "w": 22, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 7, "w": 22, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "44_3": { - "frame": { "x": 289, "y": 235, "w": 22, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 7, "w": 22, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "45_2": { - "frame": { "x": 100, "y": 181, "w": 22, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 5, "w": 22, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "45_3": { - "frame": { "x": 48, "y": 178, "w": 22, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 5, "w": 22, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "46_1": { - "frame": { "x": 65, "y": 257, "w": 22, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 8, "w": 22, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "46_2": { - "frame": { "x": 299, "y": 257, "w": 22, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 8, "w": 22, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "46_3": { - "frame": { "x": 78, "y": 113, "w": 22, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 8, "w": 22, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "47_1": { - "frame": { "x": 25, "y": 199, "w": 22, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 6, "w": 22, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "47_2": { - "frame": { "x": 308, "y": 213, "w": 22, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 6, "w": 22, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "47_3": { - "frame": { "x": 120, "y": 213, "w": 22, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 6, "w": 22, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "4_2": { - "frame": { "x": 59, "y": 277, "w": 21, "h": 19 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 9, "w": 21, "h": 19 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "4_3": { - "frame": { "x": 106, "y": 277, "w": 21, "h": 19 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 9, "w": 21, "h": 19 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "50_2": { - "frame": { "x": 425, "y": 138, "w": 15, "h": 14 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 13, "y": 14, "w": 15, "h": 14 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "50_3": { - "frame": { "x": 425, "y": 197, "w": 15, "h": 14 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 13, "y": 14, "w": 15, "h": 14 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "51_2": { - "frame": { "x": 286, "y": 211, "w": 22, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 6, "w": 22, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "51_3": { - "frame": { "x": 221, "y": 204, "w": 22, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 6, "w": 22, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "52-gigantamax_1": { - "frame": { "x": 77, "y": 83, "w": 23, "h": 30 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 0, "w": 23, "h": 30 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "52-gigantamax_2": { - "frame": { "x": 54, "y": 81, "w": 23, "h": 30 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 0, "w": 23, "h": 30 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "52-gigantamax_3": { - "frame": { "x": 417, "y": 78, "w": 23, "h": 30 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 0, "w": 23, "h": 30 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "52_1": { - "frame": { "x": 44, "y": 244, "w": 21, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 7, "w": 21, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "52_2": { - "frame": { "x": 90, "y": 246, "w": 21, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 7, "w": 21, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "52_3": { - "frame": { "x": 198, "y": 246, "w": 21, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 7, "w": 21, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "53_1": { - "frame": { "x": 235, "y": 182, "w": 23, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 6, "w": 23, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "53_2": { - "frame": { "x": 400, "y": 178, "w": 23, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 6, "w": 23, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "53_3": { - "frame": { "x": 309, "y": 191, "w": 23, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 6, "w": 23, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "56_1": { - "frame": { "x": 342, "y": 148, "w": 28, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 8, "w": 28, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "56_2": { - "frame": { "x": 314, "y": 148, "w": 28, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 8, "w": 28, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "56_3": { - "frame": { "x": 397, "y": 138, "w": 28, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 8, "w": 28, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "57_1": { - "frame": { "x": 150, "y": 83, "w": 28, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 5, "w": 28, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "57_2": { - "frame": { "x": 294, "y": 103, "w": 28, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 5, "w": 28, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "57_3": { - "frame": { "x": 0, "y": 103, "w": 28, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 5, "w": 28, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "5_2": { - "frame": { "x": 332, "y": 191, "w": 22, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 5, "w": 22, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "5_3": { - "frame": { "x": 150, "y": 194, "w": 22, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 5, "w": 22, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "6-gigantamax_2": { - "frame": { "x": 270, "y": 80, "w": 24, "h": 30 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 0, "w": 24, "h": 30 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "6-gigantamax_3": { - "frame": { "x": 30, "y": 81, "w": 24, "h": 30 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 0, "w": 24, "h": 30 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "6-mega-x_2": { - "frame": { "x": 40, "y": 0, "w": 40, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 25 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "6-mega-x_3": { - "frame": { "x": 0, "y": 0, "w": 40, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 0, "y": 2, "w": 40, "h": 25 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "6-mega-y_2": { - "frame": { "x": 380, "y": 0, "w": 38, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 2, "w": 38, "h": 25 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "6-mega-y_3": { - "frame": { "x": 342, "y": 0, "w": 38, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 2, "w": 38, "h": 25 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "69_2": { - "frame": { "x": 173, "y": 137, "w": 20, "h": 15 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 13, "w": 20, "h": 15 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "69_3": { - "frame": { "x": 185, "y": 305, "w": 20, "h": 15 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 13, "w": 20, "h": 15 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "6_2": { - "frame": { "x": 60, "y": 29, "w": 32, "h": 27 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 1, "w": 32, "h": 27 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "6_3": { - "frame": { "x": 404, "y": 25, "w": 32, "h": 27 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 1, "w": 32, "h": 27 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "70_2": { - "frame": { "x": 277, "y": 256, "w": 22, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 8, "w": 22, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "70_3": { - "frame": { "x": 219, "y": 256, "w": 22, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 8, "w": 22, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "71_2": { - "frame": { "x": 178, "y": 84, "w": 28, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 5, "w": 28, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "71_3": { - "frame": { "x": 210, "y": 83, "w": 28, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 5, "w": 28, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "77_2": { - "frame": { "x": 280, "y": 149, "w": 24, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 5, "w": 24, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "77_3": { - "frame": { "x": 0, "y": 149, "w": 24, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 5, "w": 24, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "78_2": { - "frame": { "x": 123, "y": 57, "w": 29, "h": 26 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 2, "w": 29, "h": 26 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "78_3": { - "frame": { "x": 94, "y": 57, "w": 29, "h": 26 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 2, "w": 29, "h": 26 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "79_1": { - "frame": { "x": 265, "y": 212, "w": 21, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 7, "w": 21, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "79_2": { - "frame": { "x": 256, "y": 253, "w": 21, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 7, "w": 21, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "79_3": { - "frame": { "x": 111, "y": 256, "w": 21, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 7, "w": 21, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "7_2": { - "frame": { "x": 233, "y": 294, "w": 21, "h": 17 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 11, "w": 21, "h": 17 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "7_3": { - "frame": { "x": 80, "y": 289, "w": 21, "h": 17 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 11, "w": 21, "h": 17 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "80-mega_2": { - "frame": { "x": 125, "y": 83, "w": 25, "h": 26 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 2, "w": 25, "h": 26 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "80-mega_3": { - "frame": { "x": 100, "y": 83, "w": 25, "h": 26 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 2, "w": 25, "h": 26 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "80_2": { - "frame": { "x": 238, "y": 104, "w": 27, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 5, "w": 27, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "80_3": { - "frame": { "x": 380, "y": 103, "w": 27, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 5, "w": 27, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "81_2": { - "frame": { "x": 101, "y": 296, "w": 23, "h": 15 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 12, "w": 23, "h": 15 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "81_3": { - "frame": { "x": 254, "y": 297, "w": 23, "h": 15 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 12, "w": 23, "h": 15 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "82_2": { - "frame": { "x": 354, "y": 172, "w": 24, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 5, "w": 24, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "82_3": { - "frame": { "x": 76, "y": 174, "w": 24, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 5, "w": 24, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "83_2": { - "frame": { "x": 78, "y": 133, "w": 26, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 6, "w": 26, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "83_3": { - "frame": { "x": 254, "y": 134, "w": 26, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 6, "w": 26, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "84_1": { - "frame": { "x": 358, "y": 282, "w": 21, "h": 18 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 10, "w": 21, "h": 18 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "84_2": { - "frame": { "x": 383, "y": 281, "w": 21, "h": 18 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 10, "w": 21, "h": 18 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "84_3": { - "frame": { "x": 127, "y": 281, "w": 21, "h": 18 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 10, "w": 21, "h": 18 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "85_1": { - "frame": { "x": 388, "y": 78, "w": 29, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 3, "w": 29, "h": 25 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "85_2": { - "frame": { "x": 359, "y": 78, "w": 29, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 3, "w": 29, "h": 25 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "85_3": { - "frame": { "x": 330, "y": 78, "w": 29, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 3, "w": 29, "h": 25 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "86_1": { - "frame": { "x": 53, "y": 113, "w": 25, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 5, "w": 25, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "86_2": { - "frame": { "x": 28, "y": 111, "w": 25, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 5, "w": 25, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "86_3": { - "frame": { "x": 148, "y": 130, "w": 25, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 5, "w": 25, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "87_1": { - "frame": { "x": 372, "y": 126, "w": 25, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 5, "w": 25, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "87_2": { - "frame": { "x": 0, "y": 126, "w": 25, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 5, "w": 25, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "87_3": { - "frame": { "x": 289, "y": 126, "w": 25, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 5, "w": 25, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "8_2": { - "frame": { "x": 150, "y": 172, "w": 24, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 6, "w": 24, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "8_3": { - "frame": { "x": 263, "y": 172, "w": 24, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 6, "w": 24, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "9-gigantamax_2": { - "frame": { "x": 181, "y": 30, "w": 29, "h": 28 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 0, "w": 29, "h": 28 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "9-gigantamax_3": { - "frame": { "x": 152, "y": 29, "w": 29, "h": 28 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 0, "w": 29, "h": 28 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "9-mega_2": { - "frame": { "x": 122, "y": 29, "w": 30, "h": 28 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 1, "w": 30, "h": 28 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "9-mega_3": { - "frame": { "x": 92, "y": 29, "w": 30, "h": 28 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 1, "w": 30, "h": 28 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "92_1": { - "frame": { "x": 188, "y": 219, "w": 23, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 7, "w": 23, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "92_2": { - "frame": { "x": 330, "y": 214, "w": 23, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 7, "w": 23, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "92_3": { - "frame": { "x": 353, "y": 215, "w": 23, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 7, "w": 23, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "93_1": { - "frame": { "x": 404, "y": 52, "w": 30, "h": 26 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 2, "w": 30, "h": 26 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "93_2": { - "frame": { "x": 268, "y": 30, "w": 30, "h": 26 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 2, "w": 30, "h": 26 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "93_3": { - "frame": { "x": 298, "y": 30, "w": 30, "h": 26 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 2, "w": 30, "h": 26 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "94-gigantamax_1": { - "frame": { "x": 182, "y": 0, "w": 32, "h": 30 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 32, "h": 30 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "94-gigantamax_2": { - "frame": { "x": 310, "y": 0, "w": 32, "h": 30 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 32, "h": 30 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "94-gigantamax_3": { - "frame": { "x": 278, "y": 0, "w": 32, "h": 30 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 32, "h": 30 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "94-mega_1": { - "frame": { "x": 148, "y": 0, "w": 34, "h": 29 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 34, "h": 29 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "94-mega_2": { - "frame": { "x": 114, "y": 0, "w": 34, "h": 29 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 34, "h": 29 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "94-mega_3": { - "frame": { "x": 80, "y": 0, "w": 34, "h": 29 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 34, "h": 29 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "94_1": { - "frame": { "x": 265, "y": 110, "w": 24, "h": 24 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 4, "w": 24, "h": 24 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "94_2": { - "frame": { "x": 124, "y": 109, "w": 24, "h": 24 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 4, "w": 24, "h": 24 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "94_3": { - "frame": { "x": 100, "y": 109, "w": 24, "h": 24 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 4, "w": 24, "h": 24 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "98_2": { - "frame": { "x": 240, "y": 58, "w": 28, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 7, "w": 28, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "98_3": { - "frame": { "x": 300, "y": 56, "w": 28, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 7, "w": 28, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "99-gigantamax_2": { - "frame": { "x": 328, "y": 53, "w": 31, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 3, "w": 31, "h": 25 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "99-gigantamax_3": { - "frame": { "x": 31, "y": 56, "w": 31, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 3, "w": 31, "h": 25 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "99_2": { - "frame": { "x": 300, "y": 78, "w": 30, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 5, "w": 30, "h": 25 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "99_3": { - "frame": { "x": 210, "y": 58, "w": 30, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 5, "w": 30, "h": 25 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "9_2": { - "frame": { "x": 150, "y": 106, "w": 25, "h": 24 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 4, "w": 25, "h": 24 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "9_3": { - "frame": { "x": 206, "y": 106, "w": 25, "h": 24 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 4, "w": 25, "h": 24 }, - "sourceSize": { "w": 40, "h": 30 } - } - }, - "meta": { - "app": "https://www.aseprite.org/", - "version": "1.3.7-dev", - "image": "pokemon_icons_1v.png", - "format": "RGBA8888", - "size": { "w": 440, "h": 328 }, - "scale": "1" - } +{ + "textures": [ + { + "image": "pokemon_icons_1v.png", + "format": "RGBA8888", + "size": { + "w": 600, + "h": 600 + }, + "scale": 1, + "frames": [ + { + "filename": "1_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 0, "y": 0, "w": 40, "h": 30} + }, + { + "filename": "1_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 40, "y": 0, "w": 40, "h": 30} + }, + { + "filename": "2_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 80, "y": 0, "w": 40, "h": 30} + }, + { + "filename": "2_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 120, "y": 0, "w": 40, "h": 30} + }, + { + "filename": "3-gigantamax_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 160, "y": 0, "w": 40, "h": 30} + }, + { + "filename": "3-gigantamax_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 200, "y": 0, "w": 40, "h": 30} + }, + { + "filename": "3-mega_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 240, "y": 0, "w": 40, "h": 30} + }, + { + "filename": "3-mega_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 280, "y": 0, "w": 40, "h": 30} + }, + { + "filename": "3_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 320, "y": 0, "w": 40, "h": 30} + }, + { + "filename": "3_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 360, "y": 0, "w": 40, "h": 30} + }, + { + "filename": "4_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 400, "y": 0, "w": 40, "h": 30} + }, + { + "filename": "4_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 440, "y": 0, "w": 40, "h": 30} + }, + { + "filename": "5_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 480, "y": 0, "w": 40, "h": 30} + }, + { + "filename": "5_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 520, "y": 0, "w": 40, "h": 30} + }, + { + "filename": "6-gigantamax_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 560, "y": 0, "w": 40, "h": 30} + }, + { + "filename": "6-gigantamax_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 0, "y": 30, "w": 40, "h": 30} + }, + { + "filename": "6-mega-x_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 40, "y": 30, "w": 40, "h": 30} + }, + { + "filename": "6-mega-x_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 80, "y": 30, "w": 40, "h": 30} + }, + { + "filename": "6-mega-y_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 120, "y": 30, "w": 40, "h": 30} + }, + { + "filename": "6-mega-y_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 160, "y": 30, "w": 40, "h": 30} + }, + { + "filename": "6_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 200, "y": 30, "w": 40, "h": 30} + }, + { + "filename": "6_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 240, "y": 30, "w": 40, "h": 30} + }, + { + "filename": "7_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 280, "y": 30, "w": 40, "h": 30} + }, + { + "filename": "7_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 320, "y": 30, "w": 40, "h": 30} + }, + { + "filename": "8_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 360, "y": 30, "w": 40, "h": 30} + }, + { + "filename": "8_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 400, "y": 30, "w": 40, "h": 30} + }, + { + "filename": "9-gigantamax_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 440, "y": 30, "w": 40, "h": 30} + }, + { + "filename": "9-gigantamax_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 480, "y": 30, "w": 40, "h": 30} + }, + { + "filename": "9-mega_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 520, "y": 30, "w": 40, "h": 30} + }, + { + "filename": "9-mega_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 560, "y": 30, "w": 40, "h": 30} + }, + { + "filename": "9_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 0, "y": 60, "w": 40, "h": 30} + }, + { + "filename": "9_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 40, "y": 60, "w": 40, "h": 30} + }, + { + "filename": "19_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 80, "y": 60, "w": 40, "h": 30} + }, + { + "filename": "19_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 120, "y": 60, "w": 40, "h": 30} + }, + { + "filename": "20_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 160, "y": 60, "w": 40, "h": 30} + }, + { + "filename": "20_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 200, "y": 60, "w": 40, "h": 30} + }, + { + "filename": "23_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 240, "y": 60, "w": 40, "h": 30} + }, + { + "filename": "23_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 280, "y": 60, "w": 40, "h": 30} + }, + { + "filename": "24_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 320, "y": 60, "w": 40, "h": 30} + }, + { + "filename": "24_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 360, "y": 60, "w": 40, "h": 30} + }, + { + "filename": "25-beauty-cosplay_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 400, "y": 60, "w": 40, "h": 30} + }, + { + "filename": "25-beauty-cosplay_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 440, "y": 60, "w": 40, "h": 30} + }, + { + "filename": "25-cool-cosplay_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 480, "y": 60, "w": 40, "h": 30} + }, + { + "filename": "25-cool-cosplay_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 520, "y": 60, "w": 40, "h": 30} + }, + { + "filename": "25-cosplay_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 560, "y": 60, "w": 40, "h": 30} + }, + { + "filename": "25-cosplay_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 0, "y": 90, "w": 40, "h": 30} + }, + { + "filename": "25-cute-cosplay_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 40, "y": 90, "w": 40, "h": 30} + }, + { + "filename": "25-cute-cosplay_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 80, "y": 90, "w": 40, "h": 30} + }, + { + "filename": "25-gigantamax_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 120, "y": 90, "w": 40, "h": 30} + }, + { + "filename": "25-gigantamax_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 160, "y": 90, "w": 40, "h": 30} + }, + { + "filename": "25-partner_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 200, "y": 90, "w": 40, "h": 30} + }, + { + "filename": "25-partner_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 240, "y": 90, "w": 40, "h": 30} + }, + { + "filename": "25-smart-cosplay_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 280, "y": 90, "w": 40, "h": 30} + }, + { + "filename": "25-smart-cosplay_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 320, "y": 90, "w": 40, "h": 30} + }, + { + "filename": "25-tough-cosplay_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 360, "y": 90, "w": 40, "h": 30} + }, + { + "filename": "25-tough-cosplay_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 400, "y": 90, "w": 40, "h": 30} + }, + { + "filename": "25_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 440, "y": 90, "w": 40, "h": 30} + }, + { + "filename": "25_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 480, "y": 90, "w": 40, "h": 30} + }, + { + "filename": "26_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 520, "y": 90, "w": 40, "h": 30} + }, + { + "filename": "26_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 560, "y": 90, "w": 40, "h": 30} + }, + { + "filename": "29_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 0, "y": 120, "w": 40, "h": 30} + }, + { + "filename": "29_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 40, "y": 120, "w": 40, "h": 30} + }, + { + "filename": "29_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 80, "y": 120, "w": 40, "h": 30} + }, + { + "filename": "30_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 120, "y": 120, "w": 40, "h": 30} + }, + { + "filename": "30_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 160, "y": 120, "w": 40, "h": 30} + }, + { + "filename": "31_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 200, "y": 120, "w": 40, "h": 30} + }, + { + "filename": "31_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 240, "y": 120, "w": 40, "h": 30} + }, + { + "filename": "31_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 280, "y": 120, "w": 40, "h": 30} + }, + { + "filename": "35_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 320, "y": 120, "w": 40, "h": 30} + }, + { + "filename": "35_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 360, "y": 120, "w": 40, "h": 30} + }, + { + "filename": "36_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 400, "y": 120, "w": 40, "h": 30} + }, + { + "filename": "36_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 440, "y": 120, "w": 40, "h": 30} + }, + { + "filename": "37_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 480, "y": 120, "w": 40, "h": 30} + }, + { + "filename": "37_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 520, "y": 120, "w": 40, "h": 30} + }, + { + "filename": "38_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 560, "y": 120, "w": 40, "h": 30} + }, + { + "filename": "38_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 0, "y": 150, "w": 40, "h": 30} + }, + { + "filename": "39_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 40, "y": 150, "w": 40, "h": 30} + }, + { + "filename": "39_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 80, "y": 150, "w": 40, "h": 30} + }, + { + "filename": "40_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 120, "y": 150, "w": 40, "h": 30} + }, + { + "filename": "40_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 160, "y": 150, "w": 40, "h": 30} + }, + { + "filename": "41_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 200, "y": 150, "w": 40, "h": 30} + }, + { + "filename": "41_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 240, "y": 150, "w": 40, "h": 30} + }, + { + "filename": "41_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 280, "y": 150, "w": 40, "h": 30} + }, + { + "filename": "42_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 320, "y": 150, "w": 40, "h": 30} + }, + { + "filename": "42_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 360, "y": 150, "w": 40, "h": 30} + }, + { + "filename": "42_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 400, "y": 150, "w": 40, "h": 30} + }, + { + "filename": "43_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 440, "y": 150, "w": 40, "h": 30} + }, + { + "filename": "43_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 480, "y": 150, "w": 40, "h": 30} + }, + { + "filename": "44_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 520, "y": 150, "w": 40, "h": 30} + }, + { + "filename": "44_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 560, "y": 150, "w": 40, "h": 30} + }, + { + "filename": "45_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 0, "y": 180, "w": 40, "h": 30} + }, + { + "filename": "45_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 40, "y": 180, "w": 40, "h": 30} + }, + { + "filename": "46_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 80, "y": 180, "w": 40, "h": 30} + }, + { + "filename": "46_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 120, "y": 180, "w": 40, "h": 30} + }, + { + "filename": "46_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 160, "y": 180, "w": 40, "h": 30} + }, + { + "filename": "47_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 200, "y": 180, "w": 40, "h": 30} + }, + { + "filename": "47_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 240, "y": 180, "w": 40, "h": 30} + }, + { + "filename": "47_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 280, "y": 180, "w": 40, "h": 30} + }, + { + "filename": "50_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 320, "y": 180, "w": 40, "h": 30} + }, + { + "filename": "50_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 360, "y": 180, "w": 40, "h": 30} + }, + { + "filename": "51_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 400, "y": 180, "w": 40, "h": 30} + }, + { + "filename": "51_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 440, "y": 180, "w": 40, "h": 30} + }, + { + "filename": "52-gigantamax_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 480, "y": 180, "w": 40, "h": 30} + }, + { + "filename": "52-gigantamax_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 520, "y": 180, "w": 40, "h": 30} + }, + { + "filename": "52-gigantamax_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 560, "y": 180, "w": 40, "h": 30} + }, + { + "filename": "52_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 0, "y": 210, "w": 40, "h": 30} + }, + { + "filename": "52_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 40, "y": 210, "w": 40, "h": 30} + }, + { + "filename": "52_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 80, "y": 210, "w": 40, "h": 30} + }, + { + "filename": "53_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 120, "y": 210, "w": 40, "h": 30} + }, + { + "filename": "53_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 160, "y": 210, "w": 40, "h": 30} + }, + { + "filename": "53_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 200, "y": 210, "w": 40, "h": 30} + }, + { + "filename": "56_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 240, "y": 210, "w": 40, "h": 30} + }, + { + "filename": "56_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 280, "y": 210, "w": 40, "h": 30} + }, + { + "filename": "56_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 320, "y": 210, "w": 40, "h": 30} + }, + { + "filename": "57_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 360, "y": 210, "w": 40, "h": 30} + }, + { + "filename": "57_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 400, "y": 210, "w": 40, "h": 30} + }, + { + "filename": "57_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 440, "y": 210, "w": 40, "h": 30} + }, + { + "filename": "69_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 480, "y": 210, "w": 40, "h": 30} + }, + { + "filename": "69_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 520, "y": 210, "w": 40, "h": 30} + }, + { + "filename": "70_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 560, "y": 210, "w": 40, "h": 30} + }, + { + "filename": "70_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 0, "y": 240, "w": 40, "h": 30} + }, + { + "filename": "71_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 40, "y": 240, "w": 40, "h": 30} + }, + { + "filename": "71_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 80, "y": 240, "w": 40, "h": 30} + }, + { + "filename": "77_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 120, "y": 240, "w": 40, "h": 30} + }, + { + "filename": "77_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 160, "y": 240, "w": 40, "h": 30} + }, + { + "filename": "78_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 200, "y": 240, "w": 40, "h": 30} + }, + { + "filename": "78_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 240, "y": 240, "w": 40, "h": 30} + }, + { + "filename": "79_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 280, "y": 240, "w": 40, "h": 30} + }, + { + "filename": "79_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 320, "y": 240, "w": 40, "h": 30} + }, + { + "filename": "79_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 360, "y": 240, "w": 40, "h": 30} + }, + { + "filename": "80-mega_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 400, "y": 240, "w": 40, "h": 30} + }, + { + "filename": "80-mega_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 440, "y": 240, "w": 40, "h": 30} + }, + { + "filename": "80_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 480, "y": 240, "w": 40, "h": 30} + }, + { + "filename": "80_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 520, "y": 240, "w": 40, "h": 30} + }, + { + "filename": "81_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 560, "y": 240, "w": 40, "h": 30} + }, + { + "filename": "81_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 0, "y": 270, "w": 40, "h": 30} + }, + { + "filename": "82_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 40, "y": 270, "w": 40, "h": 30} + }, + { + "filename": "82_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 80, "y": 270, "w": 40, "h": 30} + }, + { + "filename": "83_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 120, "y": 270, "w": 40, "h": 30} + }, + { + "filename": "83_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 160, "y": 270, "w": 40, "h": 30} + }, + { + "filename": "84-f_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 200, "y": 270, "w": 40, "h": 30} + }, + { + "filename": "84-f_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 240, "y": 270, "w": 40, "h": 30} + }, + { + "filename": "84-f_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 280, "y": 270, "w": 40, "h": 30} + }, + { + "filename": "84_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 320, "y": 270, "w": 40, "h": 30} + }, + { + "filename": "84_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 360, "y": 270, "w": 40, "h": 30} + }, + { + "filename": "84_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 400, "y": 270, "w": 40, "h": 30} + }, + { + "filename": "85-f_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 440, "y": 270, "w": 40, "h": 30} + }, + { + "filename": "85-f_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 480, "y": 270, "w": 40, "h": 30} + }, + { + "filename": "85-f_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 520, "y": 270, "w": 40, "h": 30} + }, + { + "filename": "85_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 560, "y": 270, "w": 40, "h": 30} + }, + { + "filename": "85_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 0, "y": 300, "w": 40, "h": 30} + }, + { + "filename": "85_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 40, "y": 300, "w": 40, "h": 30} + }, + { + "filename": "86_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 80, "y": 300, "w": 40, "h": 30} + }, + { + "filename": "86_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 120, "y": 300, "w": 40, "h": 30} + }, + { + "filename": "86_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 160, "y": 300, "w": 40, "h": 30} + }, + { + "filename": "87_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 200, "y": 300, "w": 40, "h": 30} + }, + { + "filename": "87_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 240, "y": 300, "w": 40, "h": 30} + }, + { + "filename": "87_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 280, "y": 300, "w": 40, "h": 30} + }, + { + "filename": "92_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 320, "y": 300, "w": 40, "h": 30} + }, + { + "filename": "92_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 360, "y": 300, "w": 40, "h": 30} + }, + { + "filename": "92_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 400, "y": 300, "w": 40, "h": 30} + }, + { + "filename": "93_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 440, "y": 300, "w": 40, "h": 30} + }, + { + "filename": "93_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 480, "y": 300, "w": 40, "h": 30} + }, + { + "filename": "93_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 520, "y": 300, "w": 40, "h": 30} + }, + { + "filename": "94-gigantamax_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 560, "y": 300, "w": 40, "h": 30} + }, + { + "filename": "94-gigantamax_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 0, "y": 330, "w": 40, "h": 30} + }, + { + "filename": "94-gigantamax_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 40, "y": 330, "w": 40, "h": 30} + }, + { + "filename": "94-mega_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 80, "y": 330, "w": 40, "h": 30} + }, + { + "filename": "94-mega_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 120, "y": 330, "w": 40, "h": 30} + }, + { + "filename": "94-mega_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 160, "y": 330, "w": 40, "h": 30} + }, + { + "filename": "94_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 200, "y": 330, "w": 40, "h": 30} + }, + { + "filename": "94_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 240, "y": 330, "w": 40, "h": 30} + }, + { + "filename": "94_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 280, "y": 330, "w": 40, "h": 30} + }, + { + "filename": "98_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 320, "y": 330, "w": 40, "h": 30} + }, + { + "filename": "98_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 360, "y": 330, "w": 40, "h": 30} + }, + { + "filename": "99-gigantamax_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 400, "y": 330, "w": 40, "h": 30} + }, + { + "filename": "99-gigantamax_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 440, "y": 330, "w": 40, "h": 30} + }, + { + "filename": "99_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 480, "y": 330, "w": 40, "h": 30} + }, + { + "filename": "99_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 520, "y": 330, "w": 40, "h": 30} + }, + { + "filename": "100_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 560, "y": 330, "w": 40, "h": 30} + }, + { + "filename": "100_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 0, "y": 360, "w": 40, "h": 30} + }, + { + "filename": "101_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 40, "y": 360, "w": 40, "h": 30} + }, + { + "filename": "101_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 80, "y": 360, "w": 40, "h": 30} + }, + { + "filename": "102_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 120, "y": 360, "w": 40, "h": 30} + }, + { + "filename": "102_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 160, "y": 360, "w": 40, "h": 30} + }, + { + "filename": "103_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 200, "y": 360, "w": 40, "h": 30} + }, + { + "filename": "103_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 240, "y": 360, "w": 40, "h": 30} + }, + { + "filename": "111_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 280, "y": 360, "w": 40, "h": 30} + }, + { + "filename": "111_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 320, "y": 360, "w": 40, "h": 30} + }, + { + "filename": "112_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 360, "y": 360, "w": 40, "h": 30} + }, + { + "filename": "112_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 400, "y": 360, "w": 40, "h": 30} + }, + { + "filename": "113_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 440, "y": 360, "w": 40, "h": 30} + }, + { + "filename": "113_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 480, "y": 360, "w": 40, "h": 30} + }, + { + "filename": "113_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 520, "y": 360, "w": 40, "h": 30} + }, + { + "filename": "114_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 560, "y": 360, "w": 40, "h": 30} + }, + { + "filename": "114_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 0, "y": 390, "w": 40, "h": 30} + }, + { + "filename": "116_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 40, "y": 390, "w": 40, "h": 30} + }, + { + "filename": "116_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 80, "y": 390, "w": 40, "h": 30} + }, + { + "filename": "117_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 120, "y": 390, "w": 40, "h": 30} + }, + { + "filename": "117_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 160, "y": 390, "w": 40, "h": 30} + }, + { + "filename": "118_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 200, "y": 390, "w": 40, "h": 30} + }, + { + "filename": "118_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 240, "y": 390, "w": 40, "h": 30} + }, + { + "filename": "118_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 280, "y": 390, "w": 40, "h": 30} + }, + { + "filename": "119_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 320, "y": 390, "w": 40, "h": 30} + }, + { + "filename": "119_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 360, "y": 390, "w": 40, "h": 30} + }, + { + "filename": "119_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 400, "y": 390, "w": 40, "h": 30} + }, + { + "filename": "120_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 440, "y": 390, "w": 40, "h": 30} + }, + { + "filename": "120_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 480, "y": 390, "w": 40, "h": 30} + }, + { + "filename": "121_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 520, "y": 390, "w": 40, "h": 30} + }, + { + "filename": "121_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 560, "y": 390, "w": 40, "h": 30} + }, + { + "filename": "123_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 0, "y": 420, "w": 40, "h": 30} + }, + { + "filename": "123_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 40, "y": 420, "w": 40, "h": 30} + }, + { + "filename": "123_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 80, "y": 420, "w": 40, "h": 30} + }, + { + "filename": "125_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 120, "y": 420, "w": 40, "h": 30} + }, + { + "filename": "125_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 160, "y": 420, "w": 40, "h": 30} + }, + { + "filename": "125_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 200, "y": 420, "w": 40, "h": 30} + }, + { + "filename": "126_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 240, "y": 420, "w": 40, "h": 30} + }, + { + "filename": "126_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 280, "y": 420, "w": 40, "h": 30} + }, + { + "filename": "127-mega_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 320, "y": 420, "w": 40, "h": 30} + }, + { + "filename": "127-mega_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 360, "y": 420, "w": 40, "h": 30} + }, + { + "filename": "127_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 400, "y": 420, "w": 40, "h": 30} + }, + { + "filename": "127_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 440, "y": 420, "w": 40, "h": 30} + }, + { + "filename": "128_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 480, "y": 420, "w": 40, "h": 30} + }, + { + "filename": "128_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 520, "y": 420, "w": 40, "h": 30} + }, + { + "filename": "129_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 560, "y": 420, "w": 40, "h": 30} + }, + { + "filename": "129_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 0, "y": 450, "w": 40, "h": 30} + }, + { + "filename": "130-mega_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 40, "y": 450, "w": 40, "h": 30} + }, + { + "filename": "130-mega_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 80, "y": 450, "w": 40, "h": 30} + }, + { + "filename": "130_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 120, "y": 450, "w": 40, "h": 30} + }, + { + "filename": "130_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 160, "y": 450, "w": 40, "h": 30} + }, + { + "filename": "131-gigantamax_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 200, "y": 450, "w": 40, "h": 30} + }, + { + "filename": "131-gigantamax_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 240, "y": 450, "w": 40, "h": 30} + }, + { + "filename": "131_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 280, "y": 450, "w": 40, "h": 30} + }, + { + "filename": "131_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 320, "y": 450, "w": 40, "h": 30} + }, + { + "filename": "132_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 360, "y": 450, "w": 40, "h": 30} + }, + { + "filename": "132_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 400, "y": 450, "w": 40, "h": 30} + }, + { + "filename": "133-partner_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 440, "y": 450, "w": 40, "h": 30} + }, + { + "filename": "133-partner_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 480, "y": 450, "w": 40, "h": 30} + }, + { + "filename": "133_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 520, "y": 450, "w": 40, "h": 30} + }, + { + "filename": "133_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 560, "y": 450, "w": 40, "h": 30} + }, + { + "filename": "134_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 0, "y": 480, "w": 40, "h": 30} + }, + { + "filename": "134_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 40, "y": 480, "w": 40, "h": 30} + }, + { + "filename": "135_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 80, "y": 480, "w": 40, "h": 30} + }, + { + "filename": "135_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 120, "y": 480, "w": 40, "h": 30} + }, + { + "filename": "135_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 160, "y": 480, "w": 40, "h": 30} + }, + { + "filename": "136_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 200, "y": 480, "w": 40, "h": 30} + }, + { + "filename": "136_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 240, "y": 480, "w": 40, "h": 30} + }, + { + "filename": "136_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 280, "y": 480, "w": 40, "h": 30} + }, + { + "filename": "137_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 320, "y": 480, "w": 40, "h": 30} + }, + { + "filename": "137_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 360, "y": 480, "w": 40, "h": 30} + }, + { + "filename": "138_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 400, "y": 480, "w": 40, "h": 30} + }, + { + "filename": "138_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 440, "y": 480, "w": 40, "h": 30} + }, + { + "filename": "139_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 480, "y": 480, "w": 40, "h": 30} + }, + { + "filename": "139_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 520, "y": 480, "w": 40, "h": 30} + }, + { + "filename": "140_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 560, "y": 480, "w": 40, "h": 30} + }, + { + "filename": "140_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 0, "y": 510, "w": 40, "h": 30} + }, + { + "filename": "141_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 40, "y": 510, "w": 40, "h": 30} + }, + { + "filename": "141_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 80, "y": 510, "w": 40, "h": 30} + }, + { + "filename": "142-mega_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 120, "y": 510, "w": 40, "h": 30} + }, + { + "filename": "142-mega_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 160, "y": 510, "w": 40, "h": 30} + }, + { + "filename": "142_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 200, "y": 510, "w": 40, "h": 30} + }, + { + "filename": "142_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 240, "y": 510, "w": 40, "h": 30} + }, + { + "filename": "144_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 280, "y": 510, "w": 40, "h": 30} + }, + { + "filename": "144_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 320, "y": 510, "w": 40, "h": 30} + }, + { + "filename": "144_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 360, "y": 510, "w": 40, "h": 30} + }, + { + "filename": "145_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 400, "y": 510, "w": 40, "h": 30} + }, + { + "filename": "145_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 440, "y": 510, "w": 40, "h": 30} + }, + { + "filename": "145_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 480, "y": 510, "w": 40, "h": 30} + }, + { + "filename": "146_1", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 520, "y": 510, "w": 40, "h": 30} + }, + { + "filename": "146_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 560, "y": 510, "w": 40, "h": 30} + }, + { + "filename": "146_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 0, "y": 540, "w": 40, "h": 30} + }, + { + "filename": "147_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 40, "y": 540, "w": 40, "h": 30} + }, + { + "filename": "147_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 80, "y": 540, "w": 40, "h": 30} + }, + { + "filename": "148_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 120, "y": 540, "w": 40, "h": 30} + }, + { + "filename": "148_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 160, "y": 540, "w": 40, "h": 30} + }, + { + "filename": "149_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 200, "y": 540, "w": 40, "h": 30} + }, + { + "filename": "149_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 240, "y": 540, "w": 40, "h": 30} + }, + { + "filename": "150-mega-x_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 280, "y": 540, "w": 40, "h": 30} + }, + { + "filename": "150-mega-x_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 320, "y": 540, "w": 40, "h": 30} + }, + { + "filename": "150-mega-y_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 360, "y": 540, "w": 40, "h": 30} + }, + { + "filename": "150-mega-y_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 400, "y": 540, "w": 40, "h": 30} + }, + { + "filename": "150_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 440, "y": 540, "w": 40, "h": 30} + }, + { + "filename": "150_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 480, "y": 540, "w": 40, "h": 30} + }, + { + "filename": "151_2", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 520, "y": 540, "w": 40, "h": 30} + }, + { + "filename": "151_3", + "rotated": false, + "trimmed": false, + "sourceSize": {"w": 40, "h": 30}, + "spriteSourceSize": {"x": 0, "y": 0, "w": 40, "h": 30}, + "frame": {"x": 560, "y": 540, "w": 40, "h": 30} + } + ] + } + ], + "meta": { + "app": "texturepacker", + "version": "3.0" + } } diff --git a/public/images/pokemon_icons_1v.png b/public/images/pokemon_icons_1v.png index 2aa0433b3f6619f253e21d15a85328fcce6e9f2f..d6b1bc0cf7e2e4122c62151cdc92d31b1ff9f1a1 100644 GIT binary patch literal 58708 zcmYhicQjnz_dc#fFCl958ev8R5kwcgCd$lUFhmz(i0IKJO4R5?qBCQR(MGSMm*}E* z(L=PTKdquY_jRy2*9hr z=Ky6<9tl6y+&@7@9Bew#PoLdh?i=}*e)FA>7Z+7ig>Z%&%Bw5lRwsK@qLTp^rtJX(@Sp?XfV~?8^=Ru4MbZ z-}A%6a}Oyc2jP$I{B(A9uGQ5`Fc9zJw?`DZ>%0Z$5NZsKDo8e&D zGM~2oVf&lMu646d(h3VxjI@>h)t5Hyp0crqA@#Y>!l)Ifge2dkI~oTZHbveZ)@rJ% z+M9f9kL^FbyyAHNdZMmSGCJ@X;Bi)k^7Y^ADC72sx52_(0`B~(?oZ+*LcegUz3Y#y zg$U{*a6|Iy>eqjE3$)!~-MO()M-797$UtX%0A$d``xyX!WL5ODaWgKhBEr?ozpZ&{ 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

|Cv=6; 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

    <^t64Sf3~?pQ&@#1eNH0>u9n;2TXolEm_~R6n=X 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%0Da&H7CP&7@n&dF9mJ>V)MFMP_^t5R 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%0AdL(?@5lKT`mC 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

    TcfY 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 BU8(>8 literal 39375 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 PfcY^tFxRitb)x(q$5Ont literal 37578 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 From 4be0214d5ad335295eacffb3665bc786049125e6 Mon Sep 17 00:00:00 2001 From: pom-eranian Date: Sat, 26 Oct 2024 16:09:19 -0400 Subject: [PATCH 131/153] [fix] added missing rare icons for spinarak, ariados. added to icon sheet (#4729) --- .../images/pokemon/icons/variant/2/167_2.png | Bin 0 -> 575 bytes .../images/pokemon/icons/variant/2/168_2.png | Bin 0 -> 716 bytes public/images/pokemon_icons_2v.json | 250 ++++++++++-------- public/images/pokemon_icons_2v.png | Bin 37175 -> 37450 bytes 4 files changed, 146 insertions(+), 104 deletions(-) create mode 100644 public/images/pokemon/icons/variant/2/167_2.png create mode 100644 public/images/pokemon/icons/variant/2/168_2.png diff --git a/public/images/pokemon/icons/variant/2/167_2.png b/public/images/pokemon/icons/variant/2/167_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a6bd15c0eef64f115de5526af4211aa7fbf525ea GIT binary patch literal 575 zcmV-F0>J%=P)X00001b5ch_0Itp) z=>Px$-$_J4R9Hvtl}$?mK^Vs$SIC6$)TIzxG3XRhhwxTxw*spVVN%!d);Ex@h4~eN z$X+hdLUid=NDvf-TL@jEHzF(0;y>{$%bJJT$?&jqab}lse*FH=GaH}|AAt_%BOg#T zA>W{HP}P9ye!m8NgQ^Bp_xm;2kp^{L|6(x9vXoL%+RPvf!Rvv@oGtF=WmC+(f_egU z8md$(6pzOR1cR0Gr#4_ZHzMW$^#Umk2)N*9it1g*;$Q%prb+Xe44tgST9zC@y+BF< z0uGjN5Wof#30f}}$uJB$pY0cL(Z!)AdocRAeL)jDA!&=!fNU?QX;d1nQTi+_fY{#X z!mT~$cmas#^+uz;fB+E@YnnK$T+o{$g{jHCuz~8YIj($A0MAr{jRDInN7SUWX-7E#j z5#tvSXb3KT#E!v$E6>YxczGm%&{);`JG=AS3dlvrcOk%5i3nC1e7YPWL(d6wd{JX< zT6rmZ_&;fb&aMC?*W||28|_EB#cLRHUP-*>cP%f=UtTByIwN-<4nVKgoSe#lt!%iz z(=yin1<)&ydtciO{uSUiBLwLmbAU740000EWmrjOO-%qQ00008000000002eQfs literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/2/168_2.png b/public/images/pokemon/icons/variant/2/168_2.png new file mode 100644 index 0000000000000000000000000000000000000000..cf34c26be21ff24387f93c8c1b814e37fa497acf GIT binary patch literal 716 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 DuuDNg literal 37175 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 Date: Sat, 26 Oct 2024 21:30:05 +0100 Subject: [PATCH 132/153] Updated date --- src/timed-event-manager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/timed-event-manager.ts b/src/timed-event-manager.ts index 953ac0566f6..4c56ada1c94 100644 --- a/src/timed-event-manager.ts +++ b/src/timed-event-manager.ts @@ -31,7 +31,7 @@ const timedEvents: TimedEvent[] = [ eventType: EventType.SHINY, shinyMultiplier: 2, friendshipMultiplier: 2, - startDate: new Date(Date.UTC(2024, 9, 25, 0)), + startDate: new Date(Date.UTC(2024, 9, 27, 0)), endDate: new Date(Date.UTC(2024, 10, 4, 0)), bannerKey: "halloween2024-event-", scale: 0.21, From 4fb1f37baa22376d6315bdc5cd9e627cf11a6ac2 Mon Sep 17 00:00:00 2001 From: Madmadness65 Date: Sat, 26 Oct 2024 16:13:05 -0500 Subject: [PATCH 133/153] [Sprite] Fix Berry Juice item sprite Sprite will now be centered properly. --- public/images/items.json | 10 +++++----- public/images/items.png | Bin 58657 -> 58629 bytes public/images/items/berry_juice.png | Bin 318 -> 390 bytes 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/public/images/items.json b/public/images/items.json index 3c9cff7a35a..9d84476a8a0 100644 --- a/public/images/items.json +++ b/public/images/items.json @@ -3353,12 +3353,12 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 24, - "h": 23 + "w": 32, + "h": 32 }, "spriteSourceSize": { - "x": 1, - "y": 1, + "x": 5, + "y": 5, "w": 22, "h": 21 }, @@ -8436,6 +8436,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:875c6d67e72590dfc6d319101aa31cfa:dd2bb865ecbc5ac7b975ddf70b993334:110e074689c9edd2c54833ce2e4d9270$" + "smartupdate": "$TexturePacker:SmartUpdate:d91a46c431ace3f09f5ca68916a2171e:1e84369d9a13e1416fa58028d629d116:110e074689c9edd2c54833ce2e4d9270$" } } diff --git a/public/images/items.png b/public/images/items.png index 1bd7b3af9c3314850fba4eed749f7e3aaf46d8f0..cb4f8fa7d065f53b4861bc32eb0867b9eda94b5d 100644 GIT binary patch literal 58629 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 literal 58657 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 VnKdzxs!0I6wACM})ufhyx&`VZf{G= z6sxs+lY6S2fSR7i3jP980wqCy!T(VK!vp15NuV5Ofk$L90|U1(2s1Lwnj--eJnZS> z7-Hdn_u^~5W(6MB1ijWSk;?zu@2+%CNZNG&wxQy!&r3NkUeW)VYH;lQfr#t(<~4pi z7ypQJ!TQ)U4JR_UtS`OmaE^_)$~(8M#KFvk_g98`A>$(fbC$o`jvhFz8{@S9eO5tR z3Hy{_hs93kC;aMSix_9XZQh2)x9m(cWuyl@ZfSrOQhI>!_BJ2XAH#ziO`;_L literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^5dmR!KK*shpv+vr1Zd!JR$t)%Tk3Y|hC38E9K7xbKjbyLUv(`U$f`BaU8KWAJ!~ z>XY^@w$fb%7 From 22865c010a5edcd084863d2c777e272bd456c458 Mon Sep 17 00:00:00 2001 From: Moka <54149968+MokaStitcher@users.noreply.github.com> Date: Sat, 26 Oct 2024 23:16:37 +0200 Subject: [PATCH 134/153] fix oversight with save migration (#4731) --- src/system/pokemon-data.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index c8756e4dd7f..485c1d90c1d 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -118,8 +118,8 @@ export default class PokemonData { // Deprecated, but needed for session data migration this.natureOverride = source.natureOverride; - this.mysteryEncounterPokemonData = new CustomPokemonData(source.mysteryEncounterPokemonData); - this.fusionMysteryEncounterPokemonData = new CustomPokemonData(source.fusionMysteryEncounterPokemonData); + this.mysteryEncounterPokemonData = source.mysteryEncounterPokemonData ? new CustomPokemonData(source.mysteryEncounterPokemonData) : null; + this.fusionMysteryEncounterPokemonData = source.fusionMysteryEncounterPokemonData ? new CustomPokemonData(source.fusionMysteryEncounterPokemonData) : null; if (!forHistory) { this.boss = (source instanceof EnemyPokemon && !!source.bossSegments) || (!this.player && !!source.boss); From a9a73863e89caf979f28c4e97be61ff160a0116a Mon Sep 17 00:00:00 2001 From: Frederico Santos Date: Sat, 26 Oct 2024 22:43:15 +0100 Subject: [PATCH 135/153] Comment out startGame call on manifest fetch failure --- src/main.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.ts b/src/main.ts index 8a69d3f1b72..d9472fce50c 100644 --- a/src/main.ts +++ b/src/main.ts @@ -103,7 +103,7 @@ fetch("/manifest.json") game["manifest"] = jsonResponse.manifest; }).catch(() => { // Manifest not found (likely local build) - startGame(); + // startGame(); }); export default game; From 9a56f080db2405010240ff0273328973ec3c78b5 Mon Sep 17 00:00:00 2001 From: innerthunder <168692175+innerthunder@users.noreply.github.com> Date: Sat, 26 Oct 2024 19:34:48 -0700 Subject: [PATCH 136/153] [Hotfix] Fix status damage triggering before berry usage (#4732) * Fix status damage triggering before berry usage * Bump version number * Revert "Bump version number" This reverts commit 64b194f5a7c7507b4253c96ed5b9cc028bc80ab6. * Bump version number for real this time --- package-lock.json | 4 ++-- package.json | 2 +- src/phases/turn-start-phase.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index be946306471..bbe52272f92 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pokemon-rogue-battle", - "version": "1.1.0", + "version": "1.1.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pokemon-rogue-battle", - "version": "1.1.0", + "version": "1.1.1", "hasInstallScript": true, "dependencies": { "@material/material-color-utilities": "^0.2.7", diff --git a/package.json b/package.json index a31296d1644..4666ffb7587 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.1.0", + "version": "1.1.1", "type": "module", "scripts": { "start": "vite", diff --git a/src/phases/turn-start-phase.ts b/src/phases/turn-start-phase.ts index 497d449912f..dc3ee3f660a 100644 --- a/src/phases/turn-start-phase.ts +++ b/src/phases/turn-start-phase.ts @@ -205,11 +205,11 @@ export class TurnStartPhase extends FieldPhase { } this.scene.pushPhase(new WeatherEffectPhase(this.scene)); + this.scene.pushPhase(new BerryPhase(this.scene)); /** Add a new phase to check who should be taking status damage */ this.scene.pushPhase(new CheckStatusEffectPhase(this.scene, moveOrder)); - this.scene.pushPhase(new BerryPhase(this.scene)); this.scene.pushPhase(new TurnEndPhase(this.scene)); /** From dfb42e44a695040c2a7ae9b76e8564572ed89c0d Mon Sep 17 00:00:00 2001 From: PigeonBar <56974298+PigeonBar@users.noreply.github.com> Date: Sun, 27 Oct 2024 00:04:57 -0400 Subject: [PATCH 137/153] [Hotfix] Fix Eternatus egg tier (#4734) --- package-lock.json | 4 ++-- package.json | 2 +- src/data/balance/species-egg-tiers.ts | 2 +- src/data/egg.ts | 10 ++++++--- src/test/eggs/egg.test.ts | 30 ++++++++++++++++++++++++++- 5 files changed, 40 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index bbe52272f92..0c36f9cfee9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pokemon-rogue-battle", - "version": "1.1.1", + "version": "1.1.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pokemon-rogue-battle", - "version": "1.1.1", + "version": "1.1.2", "hasInstallScript": true, "dependencies": { "@material/material-color-utilities": "^0.2.7", diff --git a/package.json b/package.json index 4666ffb7587..aef6e7b2ba0 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.1.1", + "version": "1.1.2", "type": "module", "scripts": { "start": "vite", diff --git a/src/data/balance/species-egg-tiers.ts b/src/data/balance/species-egg-tiers.ts index cd266dfcf54..27baa18151a 100644 --- a/src/data/balance/species-egg-tiers.ts +++ b/src/data/balance/species-egg-tiers.ts @@ -497,7 +497,7 @@ export const speciesEggTiers = { [Species.DREEPY]: EggTier.RARE, [Species.ZACIAN]: EggTier.LEGENDARY, [Species.ZAMAZENTA]: EggTier.LEGENDARY, - [Species.ETERNATUS]: EggTier.COMMON, + [Species.ETERNATUS]: EggTier.LEGENDARY, [Species.KUBFU]: EggTier.EPIC, [Species.ZARUDE]: EggTier.EPIC, [Species.REGIELEKI]: EggTier.EPIC, diff --git a/src/data/egg.ts b/src/data/egg.ts index 0f88c53b748..f7d109dfa62 100644 --- a/src/data/egg.ts +++ b/src/data/egg.ts @@ -544,11 +544,15 @@ export class Egg { //// } -export function getLegendaryGachaSpeciesForTimestamp(scene: BattleScene, timestamp: number): Species { - const legendarySpecies = Object.entries(speciesEggTiers) +export function getValidLegendaryGachaSpecies() : Species[] { + return Object.entries(speciesEggTiers) .filter(s => s[1] === EggTier.LEGENDARY) .map(s => parseInt(s[0])) - .filter(s => getPokemonSpecies(s).isObtainable()); + .filter(s => getPokemonSpecies(s).isObtainable() && s !== Species.ETERNATUS); +} + +export function getLegendaryGachaSpeciesForTimestamp(scene: BattleScene, timestamp: number): Species { + const legendarySpecies = getValidLegendaryGachaSpecies(); let ret: Species; diff --git a/src/test/eggs/egg.test.ts b/src/test/eggs/egg.test.ts index 6f57af63e6b..aebb196ff5e 100644 --- a/src/test/eggs/egg.test.ts +++ b/src/test/eggs/egg.test.ts @@ -1,4 +1,7 @@ -import { Egg, getLegendaryGachaSpeciesForTimestamp } from "#app/data/egg"; +import { speciesEggTiers } from "#app/data/balance/species-egg-tiers"; +import { speciesStarterCosts } from "#app/data/balance/starters"; +import { Egg, getLegendaryGachaSpeciesForTimestamp, getValidLegendaryGachaSpecies } from "#app/data/egg"; +import { allSpecies } from "#app/data/pokemon-species"; import { EggSourceType } from "#app/enums/egg-source-types"; import { EggTier } from "#app/enums/egg-type"; import { VariantTier } from "#app/enums/variant-tier"; @@ -64,6 +67,12 @@ describe("Egg Generation Tests", () => { expect(gachaSpeciesCount).toBeGreaterThan(0.4 * EGG_HATCH_COUNT); expect(gachaSpeciesCount).toBeLessThan(0.6 * EGG_HATCH_COUNT); }); + it("should never be allowed to generate Eternatus via the legendary gacha", () => { + const validLegendaryGachaSpecies = getValidLegendaryGachaSpecies(); + expect(validLegendaryGachaSpecies.every(s => speciesEggTiers[s] === EggTier.LEGENDARY)).toBe(true); + expect(validLegendaryGachaSpecies.every(s => allSpecies[s].isObtainable())).toBe(true); + expect(validLegendaryGachaSpecies.includes(Species.ETERNATUS)).toBe(false); + }); it("should hatch an Arceus. Set from species", () => { const scene = game.scene; const expectedSpecies = Species.ARCEUS; @@ -376,4 +385,23 @@ describe("Egg Generation Tests", () => { expect(diffShiny).toBe(true); expect(diffAbility).toBe(true); }); + + // For now, we are using this test to detect oversights in egg tiers. + // Delete this test if the balance team rebalances species costs independently of egg tiers. + it("should have correct egg tiers based on species costs", () => { + const getExpectedEggTier = (starterCost) => + starterCost <= 3 ? EggTier.COMMON + : starterCost <= 5 ? EggTier.RARE + : starterCost <= 7 ? EggTier.EPIC + : EggTier.LEGENDARY; + + allSpecies.forEach(pokemonSpecies => { + const rootSpecies = pokemonSpecies.getRootSpeciesId(); + const speciesCost = speciesStarterCosts[rootSpecies]; + const expectedEggTier = getExpectedEggTier(speciesCost); + const actualEggTier = speciesEggTiers[rootSpecies]; + + expect(actualEggTier).toBe(expectedEggTier); + }); + }); }); From 41380b39b950f9eeb49b31a48c0e7f5a25232de3 Mon Sep 17 00:00:00 2001 From: Moka <54149968+MokaStitcher@users.noreply.github.com> Date: Sun, 27 Oct 2024 21:32:30 +0100 Subject: [PATCH 138/153] [Hotfix] Fix manifest getting loaded before the game is initialized (#4739) * Fix manifest being used before the game is initialized * bump game version * make manifest fix more future proof * Revert "make manifest fix more future proof" This reverts commit 32591b35d0438dac99eb2ea29cd6757e3086008a. * fix locales path for offline builds --- package-lock.json | 4 ++-- package.json | 2 +- src/main.ts | 10 ++++++---- src/plugins/i18n.ts | 2 +- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0c36f9cfee9..5c134ae70dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pokemon-rogue-battle", - "version": "1.1.2", + "version": "1.1.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pokemon-rogue-battle", - "version": "1.1.2", + "version": "1.1.3", "hasInstallScript": true, "dependencies": { "@material/material-color-utilities": "^0.2.7", diff --git a/package.json b/package.json index aef6e7b2ba0..4a8743745b9 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.1.2", + "version": "1.1.3", "type": "module", "scripts": { "start": "vite", diff --git a/src/main.ts b/src/main.ts index d25ff08222d..993bd1018ae 100644 --- a/src/main.ts +++ b/src/main.ts @@ -44,7 +44,7 @@ document.fonts.load("16px emerald").then(() => document.fonts.load("10px pkmnems let game; -const startGame = async () => { +const startGame = async (manifest?: any) => { await initI18n(); const LoadingScene = (await import("./loading-scene")).LoadingScene; const BattleScene = (await import("./battle-scene")).default; @@ -94,16 +94,18 @@ const startGame = async () => { version: version }); game.sound.pauseOnBlur = false; + if (manifest) { + game["manifest"] = manifest; + } }; fetch("/manifest.json") .then(res => res.json()) .then(jsonResponse => { - startGame(); - game["manifest"] = jsonResponse.manifest; + startGame(jsonResponse.manifest); }).catch(() => { // Manifest not found (likely local build) - // startGame(); + startGame(); }); export default game; diff --git a/src/plugins/i18n.ts b/src/plugins/i18n.ts index d24484bbf9d..91a67b9414c 100644 --- a/src/plugins/i18n.ts +++ b/src/plugins/i18n.ts @@ -164,7 +164,7 @@ export async function initI18n(): Promise { } else { fileName = camelCaseToKebabCase(ns); } - return `/locales/${lng}/${fileName}.json?v=${pkg.version}`; + return `./locales/${lng}/${fileName}.json?v=${pkg.version}`; }, }, defaultNS: "menu", From 33f5f4c33ba82621a5e95dcbf02092b8757569af Mon Sep 17 00:00:00 2001 From: chaosgrimmon <31082757+chaosgrimmon@users.noreply.github.com> Date: Sun, 27 Oct 2024 18:23:09 -0400 Subject: [PATCH 139/153] [Sprite] Hotfix cut off Binacle sprite (#4741) * Trim 688.json duration * Trim 688.json duration * Fix cut off Binacle back * Fix cut off shiny Binacle back * Bump version * Bump version * Revert cutting off hair * Revert cutting off hair * Remove trailing comma * Remove trailing comma --- package-lock.json | 4 +- package.json | 2 +- public/images/pokemon/688.json | 3 +- public/images/pokemon/back/688.json | 58 +++++++---------------- public/images/pokemon/back/shiny/688.json | 58 +++++++---------------- public/images/pokemon/shiny/688.json | 3 +- 6 files changed, 41 insertions(+), 87 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5c134ae70dd..a8b0718bb15 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pokemon-rogue-battle", - "version": "1.1.3", + "version": "1.1.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pokemon-rogue-battle", - "version": "1.1.3", + "version": "1.1.4", "hasInstallScript": true, "dependencies": { "@material/material-color-utilities": "^0.2.7", diff --git a/package.json b/package.json index 4a8743745b9..17a66e32286 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.1.3", + "version": "1.1.4", "type": "module", "scripts": { "start": "vite", diff --git a/public/images/pokemon/688.json b/public/images/pokemon/688.json index 069d176730e..3d9aa902a54 100644 --- a/public/images/pokemon/688.json +++ b/public/images/pokemon/688.json @@ -5,8 +5,7 @@ "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, "w": 64, "h": 63 }, - "sourceSize": { "w": 64, "h": 63 }, - "duration": 100 + "sourceSize": { "w": 64, "h": 63 } } ], "meta": { diff --git a/public/images/pokemon/back/688.json b/public/images/pokemon/back/688.json index 872fbc1f9db..d9f30db34a8 100644 --- a/public/images/pokemon/back/688.json +++ b/public/images/pokemon/back/688.json @@ -1,41 +1,19 @@ -{ - "textures": [ - { - "image": "688.png", - "format": "RGBA8888", - "size": { - "w": 52, - "h": 52 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 52 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:ea462f2b1b46327e3b8fcb7ec5e44f08:2d2598cc03dec73182dbea237ad83b34:176060351d0044923af938ba7932a6ef$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 51, "h": 65 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 51, "h": 65 }, + "sourceSize": { "w": 51, "h": 65 } + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-dev", + "image": "688.png", + "format": "I8", + "size": { "w": 51, "h": 65 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/shiny/688.json b/public/images/pokemon/back/shiny/688.json index 56cf47aab5a..d9f30db34a8 100644 --- a/public/images/pokemon/back/shiny/688.json +++ b/public/images/pokemon/back/shiny/688.json @@ -1,41 +1,19 @@ -{ - "textures": [ - { - "image": "688.png", - "format": "RGBA8888", - "size": { - "w": 52, - "h": 52 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 52 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:0261b6c9242bba728fcfbfc515875b27:de0d9ddceed9311b33ae50ba86e969d1:176060351d0044923af938ba7932a6ef$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 51, "h": 65 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 51, "h": 65 }, + "sourceSize": { "w": 51, "h": 65 } + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-dev", + "image": "688.png", + "format": "I8", + "size": { "w": 51, "h": 65 }, + "scale": "1" + } } diff --git a/public/images/pokemon/shiny/688.json b/public/images/pokemon/shiny/688.json index 069d176730e..3d9aa902a54 100644 --- a/public/images/pokemon/shiny/688.json +++ b/public/images/pokemon/shiny/688.json @@ -5,8 +5,7 @@ "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, "w": 64, "h": 63 }, - "sourceSize": { "w": 64, "h": 63 }, - "duration": 100 + "sourceSize": { "w": 64, "h": 63 } } ], "meta": { From 5797f265a415cdaabdc639bdcf9ce949f01c24f7 Mon Sep 17 00:00:00 2001 From: pom-eranian Date: Sun, 27 Oct 2024 22:32:36 -0400 Subject: [PATCH 140/153] [Sprite][hotfix] Fixed cropping on 658 static greninja and ash greninja (#4743) * [Sprite][hotfix] Fixed cropping on static greninja and ash greninja * bump version number --- package-lock.json | 4 +- package.json | 2 +- public/images/pokemon/658-ash.json | 58 ++++++------------- public/images/pokemon/658.json | 58 ++++++------------- public/images/pokemon/back/658-ash.json | 58 ++++++------------- public/images/pokemon/back/658.json | 58 ++++++------------- public/images/pokemon/back/shiny/658-ash.json | 58 ++++++------------- public/images/pokemon/back/shiny/658.json | 58 ++++++------------- public/images/pokemon/shiny/658-ash.json | 58 ++++++------------- public/images/pokemon/shiny/658.json | 58 ++++++------------- 10 files changed, 147 insertions(+), 323 deletions(-) diff --git a/package-lock.json b/package-lock.json index a8b0718bb15..17108c86ba8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pokemon-rogue-battle", - "version": "1.1.4", + "version": "1.1.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pokemon-rogue-battle", - "version": "1.1.4", + "version": "1.1.5", "hasInstallScript": true, "dependencies": { "@material/material-color-utilities": "^0.2.7", diff --git a/package.json b/package.json index 17a66e32286..657bf7a5cd4 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.1.4", + "version": "1.1.5", "type": "module", "scripts": { "start": "vite", diff --git a/public/images/pokemon/658-ash.json b/public/images/pokemon/658-ash.json index 8fbe19f5ccb..c2b8eede9ef 100644 --- a/public/images/pokemon/658-ash.json +++ b/public/images/pokemon/658-ash.json @@ -1,41 +1,19 @@ -{ - "textures": [ - { - "image": "658-ash.png", - "format": "RGBA8888", - "size": { - "w": 79, - "h": 79 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 79, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 79, - "h": 74 - }, - "frame": { - "x": 0, - "y": 0, - "w": 79, - "h": 74 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:936f62fa49ba4d6e402bb2e2eaf2afd0:ed00ba047a44b4bf1309bc147dd000e3:bfbf521a5c7bd80bcd95a96d9789c0dd$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 79, "h": 74 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 79, "h": 74 }, + "sourceSize": { "w": 79, "h": 74 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-x64", + "format": "I8", + "size": { "w": 79, "h": 74 }, + "scale": "1" + } } diff --git a/public/images/pokemon/658.json b/public/images/pokemon/658.json index 4fd918e0f50..219645ec240 100644 --- a/public/images/pokemon/658.json +++ b/public/images/pokemon/658.json @@ -1,41 +1,19 @@ -{ - "textures": [ - { - "image": "658.png", - "format": "RGBA8888", - "size": { - "w": 75, - "h": 75 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 75, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 65 - }, - "frame": { - "x": 0, - "y": 0, - "w": 75, - "h": 65 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:e0b10df331bd4ce6760edab61dee144b:061561c45beff89a92bf0158d065204f:5affcab976148657d36bf4ff3410f92d$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 85, "h": 67 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 85, "h": 67 }, + "sourceSize": { "w": 85, "h": 67 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-x64", + "format": "I8", + "size": { "w": 85, "h": 67 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/658-ash.json b/public/images/pokemon/back/658-ash.json index 4ddab1765b2..51a722070b3 100644 --- a/public/images/pokemon/back/658-ash.json +++ b/public/images/pokemon/back/658-ash.json @@ -1,41 +1,19 @@ -{ - "textures": [ - { - "image": "658-ash.png", - "format": "RGBA8888", - "size": { - "w": 73, - "h": 73 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 73, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 73, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 73, - "h": 69 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4f38801bb3afeda5faff04bdcf6a666f:0c78ce2715e7510bf55da0a92b42661c:bfbf521a5c7bd80bcd95a96d9789c0dd$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 73, "h": 73 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 73, "h": 73 }, + "sourceSize": { "w": 73, "h": 73 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-x64", + "format": "I8", + "size": { "w": 73, "h": 73 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/658.json b/public/images/pokemon/back/658.json index 119002876a6..050b63e3592 100644 --- a/public/images/pokemon/back/658.json +++ b/public/images/pokemon/back/658.json @@ -1,41 +1,19 @@ -{ - "textures": [ - { - "image": "658.png", - "format": "RGBA8888", - "size": { - "w": 77, - "h": 77 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 77, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 77, - "h": 65 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 65 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:acdb9925f3f23b947504eec7cc28c92d:1a13d9d418f6c107bb9e5d621d9154bb:5affcab976148657d36bf4ff3410f92d$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "sourceSize": { "w": 77, "h": 77 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-x64", + "format": "I8", + "size": { "w": 77, "h": 77 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/shiny/658-ash.json b/public/images/pokemon/back/shiny/658-ash.json index a796ad08246..51a722070b3 100644 --- a/public/images/pokemon/back/shiny/658-ash.json +++ b/public/images/pokemon/back/shiny/658-ash.json @@ -1,41 +1,19 @@ -{ - "textures": [ - { - "image": "658-ash.png", - "format": "RGBA8888", - "size": { - "w": 73, - "h": 73 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 73, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 73, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 73, - "h": 69 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:d474b821316a87dfe09b397bdc2db5ef:497de0c2ec59ceba163e870b3226c76c:bfbf521a5c7bd80bcd95a96d9789c0dd$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 73, "h": 73 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 73, "h": 73 }, + "sourceSize": { "w": 73, "h": 73 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-x64", + "format": "I8", + "size": { "w": 73, "h": 73 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/shiny/658.json b/public/images/pokemon/back/shiny/658.json index cc5d3c5b9ff..050b63e3592 100644 --- a/public/images/pokemon/back/shiny/658.json +++ b/public/images/pokemon/back/shiny/658.json @@ -1,41 +1,19 @@ -{ - "textures": [ - { - "image": "658.png", - "format": "RGBA8888", - "size": { - "w": 77, - "h": 77 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 77, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 77, - "h": 65 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 65 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:5891f87a78022cde3402e7d9714cc7bf:756360084290e39c139e3fef91c81759:5affcab976148657d36bf4ff3410f92d$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "sourceSize": { "w": 77, "h": 77 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-x64", + "format": "I8", + "size": { "w": 77, "h": 77 }, + "scale": "1" + } } diff --git a/public/images/pokemon/shiny/658-ash.json b/public/images/pokemon/shiny/658-ash.json index 7ac419b1686..c2b8eede9ef 100644 --- a/public/images/pokemon/shiny/658-ash.json +++ b/public/images/pokemon/shiny/658-ash.json @@ -1,41 +1,19 @@ -{ - "textures": [ - { - "image": "658-ash.png", - "format": "RGBA8888", - "size": { - "w": 79, - "h": 79 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 79, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 79, - "h": 74 - }, - "frame": { - "x": 0, - "y": 0, - "w": 79, - "h": 74 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:3dd081ba5490f090a73de8423aac2f6b:f088fafaea755476f2abf488e7340cab:bfbf521a5c7bd80bcd95a96d9789c0dd$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 79, "h": 74 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 79, "h": 74 }, + "sourceSize": { "w": 79, "h": 74 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-x64", + "format": "I8", + "size": { "w": 79, "h": 74 }, + "scale": "1" + } } diff --git a/public/images/pokemon/shiny/658.json b/public/images/pokemon/shiny/658.json index 92f9b29175c..219645ec240 100644 --- a/public/images/pokemon/shiny/658.json +++ b/public/images/pokemon/shiny/658.json @@ -1,41 +1,19 @@ -{ - "textures": [ - { - "image": "658.png", - "format": "RGBA8888", - "size": { - "w": 75, - "h": 75 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 75, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 65 - }, - "frame": { - "x": 0, - "y": 0, - "w": 75, - "h": 65 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:be07c062265a19e890f1e2d2d1b5527d:ad4583a5a0498c496e9a93574c55ee03:5affcab976148657d36bf4ff3410f92d$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 85, "h": 67 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 85, "h": 67 }, + "sourceSize": { "w": 85, "h": 67 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-x64", + "format": "I8", + "size": { "w": 85, "h": 67 }, + "scale": "1" + } } From b4cc9d7892a7d8b548c857f3acca40d5cf5defba Mon Sep 17 00:00:00 2001 From: innerthunder <168692175+innerthunder@users.noreply.github.com> Date: Mon, 28 Oct 2024 06:02:10 -0700 Subject: [PATCH 141/153] [Hotfix] Fix crash when Mist would block a stat drop (#4746) * Fix crash when Mist would block a stat drop * Bump version * Bump version (again) --- package-lock.json | 4 +-- package.json | 2 +- src/data/arena-tag.ts | 1 + src/phases/stat-stage-change-phase.ts | 2 +- src/test/moves/mist.test.ts | 49 +++++++++++++++++++++++++++ 5 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 src/test/moves/mist.test.ts diff --git a/package-lock.json b/package-lock.json index 17108c86ba8..9e512884922 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pokemon-rogue-battle", - "version": "1.1.5", + "version": "1.1.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pokemon-rogue-battle", - "version": "1.1.5", + "version": "1.1.6", "hasInstallScript": true, "dependencies": { "@material/material-color-utilities": "^0.2.7", diff --git a/package.json b/package.json index 657bf7a5cd4..f106fb1a773 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.1.5", + "version": "1.1.6", "type": "module", "scripts": { "start": "vite", diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index d2c95b7ccdf..43de6e02dcb 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -126,6 +126,7 @@ export class MistTag extends ArenaTag { * Cancels the lowering of stats * @param arena the {@linkcode Arena} containing this effect * @param simulated `true` if the effect should be applied quietly + * @param attacker the {@linkcode Pokemon} using a move into this effect. * @param cancelled a {@linkcode BooleanHolder} whose value is set to `true` * to flag the stat reduction as cancelled * @returns `true` if a stat reduction was cancelled; `false` otherwise diff --git a/src/phases/stat-stage-change-phase.ts b/src/phases/stat-stage-change-phase.ts index 2d4b3ce6c6f..ce6ebea2442 100644 --- a/src/phases/stat-stage-change-phase.ts +++ b/src/phases/stat-stage-change-phase.ts @@ -65,7 +65,7 @@ export class StatStageChangePhase extends PokemonPhase { if (!this.selfTarget && stages.value < 0) { // TODO: add a reference to the source of the stat change to fix Infiltrator interaction - this.scene.arena.applyTagsForSide(MistTag, pokemon.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY, false, null, false, cancelled); + this.scene.arena.applyTagsForSide(MistTag, pokemon.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY, false, null, cancelled); } if (!cancelled.value && !this.selfTarget && stages.value < 0) { diff --git a/src/test/moves/mist.test.ts b/src/test/moves/mist.test.ts new file mode 100644 index 00000000000..cd338f79412 --- /dev/null +++ b/src/test/moves/mist.test.ts @@ -0,0 +1,49 @@ +import { Stat } from "#enums/stat"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Mist", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.MIST, Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .battleType("double") + .disableCrits() + .enemySpecies(Species.SNORLAX) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.GROWL); + }); + + it("should prevent the user's side from having stats lowered", async () => { + await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); + + const playerPokemon = game.scene.getPlayerField(); + + game.move.select(Moves.MIST, 0); + game.move.select(Moves.SPLASH, 1); + + await game.phaseInterceptor.to("BerryPhase"); + + playerPokemon.forEach(p => expect(p.getStatStage(Stat.ATK)).toBe(0)); + }); + + it.todo("should be ignored by opponents with Infiltrator"); +}); From 3241332a3ce0e4307e196d29de947dc5a0d6345d Mon Sep 17 00:00:00 2001 From: PrabbyDD <147005742+PrabbyDD@users.noreply.github.com> Date: Mon, 28 Oct 2024 13:49:04 -0700 Subject: [PATCH 142/153] [Ability] Implementing Friend Guard (#4718) * implementing friend guard ability * Update src/data/ability.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/data/ability.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/data/ability.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/test/abilities/friend_guard.test.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/field/pokemon.ts Co-authored-by: innerthunder <168692175+innerthunder@users.noreply.github.com> * more tests and fixing other issues * more tests and fixing other issues * Update Friend Guard test with damage mocks --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: innerthunder <168692175+innerthunder@users.noreply.github.com> Co-authored-by: innerthunder --- src/data/ability.ts | 28 +++++- src/field/pokemon.ts | 8 +- src/test/abilities/friend_guard.test.ts | 120 ++++++++++++++++++++++++ 3 files changed, 153 insertions(+), 3 deletions(-) create mode 100644 src/test/abilities/friend_guard.test.ts diff --git a/src/data/ability.ts b/src/data/ability.ts index 01e99966ff8..58824603bc3 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -330,6 +330,30 @@ export class ReceivedMoveDamageMultiplierAbAttr extends PreDefendAbAttr { } } +/** + * Reduces the damage dealt to an allied Pokemon. Used by Friend Guard. + * @see {@linkcode applyPreDefend} + */ +export class AlliedFieldDamageReductionAbAttr extends PreDefendAbAttr { + private damageMultiplier: number; + + constructor(damageMultiplier: number) { + super(); + this.damageMultiplier = damageMultiplier; + } + + /** + * Handles the damage reduction + * @param args + * - `[0]` {@linkcode Utils.NumberHolder} - The damage being dealt + */ + override applyPreDefend(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _attacker: Pokemon, _move: Move, _cancelled: Utils.BooleanHolder, args: any[]): boolean { + const damage = args[0] as Utils.NumberHolder; + damage.value = Utils.toDmgValue(damage.value * this.damageMultiplier); + return true; + } +} + export class ReceivedTypeDamageMultiplierAbAttr extends ReceivedMoveDamageMultiplierAbAttr { constructor(moveType: Type, damageMultiplier: number) { super((target, user, move) => user.getMoveType(move) === moveType, damageMultiplier); @@ -5310,8 +5334,8 @@ export function initAbilities() { new Ability(Abilities.HEALER, 5) .conditionalAttr(pokemon => pokemon.getAlly() && Utils.randSeedInt(10) < 3, PostTurnResetStatusAbAttr, true), new Ability(Abilities.FRIEND_GUARD, 5) - .ignorable() - .unimplemented(), + .attr(AlliedFieldDamageReductionAbAttr, 0.75) + .ignorable(), new Ability(Abilities.WEAK_ARMOR, 5) .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => move.category === MoveCategory.PHYSICAL, Stat.DEF, -1) .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => move.category === MoveCategory.PHYSICAL, Stat.SPD, 2), diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 4cb8390d4f4..278a28937ef 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -22,7 +22,7 @@ import { reverseCompatibleTms, tmSpecies, tmPoolTiers } from "#app/data/balance/ import { BattlerTag, BattlerTagLapseType, EncoreTag, GroundedTag, HighestStatBoostTag, SubstituteTag, TypeImmuneTag, getBattlerTag, SemiInvulnerableTag, TypeBoostTag, MoveRestrictionBattlerTag, ExposedTag, DragonCheerTag, CritBoostTag, TrappedTag, TarShotTag, AutotomizedTag, PowerTrickTag } from "../data/battler-tags"; import { WeatherType } from "#app/data/weather"; import { ArenaTagSide, NoCritTag, WeakenMoveScreenTag } from "#app/data/arena-tag"; -import { Ability, AbAttr, StatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, IgnoreOpponentStatStagesAbAttr, MoveImmunityAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyStatMultiplierAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr, DamageBoostAbAttr, IgnoreTypeStatusEffectImmunityAbAttr, ConditionalCritAbAttr, applyFieldStatMultiplierAbAttrs, FieldMultiplyStatAbAttr, AddSecondStrikeAbAttr, UserFieldStatusEffectImmunityAbAttr, UserFieldBattlerTagImmunityAbAttr, BattlerTagImmunityAbAttr, MoveTypeChangeAbAttr, FullHpResistTypeAbAttr, applyCheckTrappedAbAttrs, CheckTrappedAbAttr, PostSetStatusAbAttr, applyPostSetStatusAbAttrs, InfiltratorAbAttr } from "#app/data/ability"; +import { Ability, AbAttr, StatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, IgnoreOpponentStatStagesAbAttr, MoveImmunityAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyStatMultiplierAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr, DamageBoostAbAttr, IgnoreTypeStatusEffectImmunityAbAttr, ConditionalCritAbAttr, applyFieldStatMultiplierAbAttrs, FieldMultiplyStatAbAttr, AddSecondStrikeAbAttr, UserFieldStatusEffectImmunityAbAttr, UserFieldBattlerTagImmunityAbAttr, BattlerTagImmunityAbAttr, MoveTypeChangeAbAttr, FullHpResistTypeAbAttr, applyCheckTrappedAbAttrs, CheckTrappedAbAttr, PostSetStatusAbAttr, applyPostSetStatusAbAttrs, InfiltratorAbAttr, AlliedFieldDamageReductionAbAttr } from "#app/data/ability"; import PokemonData from "#app/system/pokemon-data"; import { BattlerIndex } from "#app/battle"; import { Mode } from "#app/ui/ui"; @@ -2667,9 +2667,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.scene.applyModifiers(EnemyDamageReducerModifier, false, damage); } + /** Apply this Pokemon's post-calc defensive modifiers (e.g. Fur Coat) */ if (!ignoreAbility) { applyPreDefendAbAttrs(ReceivedMoveDamageMultiplierAbAttr, this, source, move, cancelled, simulated, damage); + + /** Additionally apply friend guard damage reduction if ally has it. */ + if (this.scene.currentBattle.double && this.getAlly()?.isActive(true)) { + applyPreDefendAbAttrs(AlliedFieldDamageReductionAbAttr, this.getAlly(), source, move, cancelled, simulated, damage); + } } // This attribute may modify damage arbitrarily, so be careful about changing its order of application. diff --git a/src/test/abilities/friend_guard.test.ts b/src/test/abilities/friend_guard.test.ts new file mode 100644 index 00000000000..4ce64468c43 --- /dev/null +++ b/src/test/abilities/friend_guard.test.ts @@ -0,0 +1,120 @@ +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { Abilities } from "#enums/abilities"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { BattlerIndex } from "#app/battle"; +import { allAbilities } from "#app/data/ability"; +import { allMoves, MoveCategory } from "#app/data/move"; + +describe("Moves - Friend Guard", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .battleType("double") + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset([ Moves.TACKLE, Moves.SPLASH, Moves.DRAGON_RAGE ]) + .enemySpecies(Species.SHUCKLE) + .moveset([ Moves.SPLASH ]) + .startingLevel(100); + }); + + it("should reduce damage that other allied Pokémon receive from attacks (from any Pokémon) by 25%", async () => { + await game.classicMode.startBattle([ Species.BULBASAUR, Species.CHARMANDER ]); + const [ player1, player2 ] = game.scene.getPlayerField(); + const spy = vi.spyOn(player1, "getAttackDamage"); + + const enemy1 = game.scene.getEnemyField()[0]; + + game.move.select(Moves.SPLASH); + game.move.select(Moves.SPLASH, 1); + await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); + await game.forceEnemyMove(Moves.SPLASH); + await game.toNextTurn(); + + // Get the last return value from `getAttackDamage` + const turn1Damage = spy.mock.results[spy.mock.results.length - 1].value.damage; + // Making sure the test is controlled; turn 1 damage is equal to base damage (after rounding) + expect(turn1Damage).toBe(Math.floor(player1.getBaseDamage(enemy1, allMoves[Moves.TACKLE], MoveCategory.PHYSICAL))); + + vi.spyOn(player2, "getAbility").mockReturnValue(allAbilities[Abilities.FRIEND_GUARD]); + + game.move.select(Moves.SPLASH); + game.move.select(Moves.SPLASH, 1); + await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); + await game.forceEnemyMove(Moves.SPLASH); + await game.toNextTurn(); + + // Get the last return value from `getAttackDamage` + const turn2Damage = spy.mock.results[spy.mock.results.length - 1].value.damage; + // With the ally's Friend Guard, damage should have been reduced from base damage by 25% + expect(turn2Damage).toBe(Math.floor(player1.getBaseDamage(enemy1, allMoves[Moves.TACKLE], MoveCategory.PHYSICAL) * 0.75)); + }); + + it("should NOT reduce damage to pokemon with friend guard", async () => { + await game.classicMode.startBattle([ Species.BULBASAUR, Species.CHARMANDER ]); + + const player2 = game.scene.getPlayerField()[1]; + const spy = vi.spyOn(player2, "getAttackDamage"); + + game.move.select(Moves.SPLASH); + game.move.select(Moves.SPLASH, 1); + await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); + await game.forceEnemyMove(Moves.SPLASH); + await game.toNextTurn(); + + const turn1Damage = spy.mock.results[spy.mock.results.length - 1].value.damage; + + vi.spyOn(player2, "getAbility").mockReturnValue(allAbilities[Abilities.FRIEND_GUARD]); + + game.move.select(Moves.SPLASH); + game.move.select(Moves.SPLASH, 1); + await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); + await game.forceEnemyMove(Moves.SPLASH); + await game.toNextTurn(); + + const turn2Damage = spy.mock.results[spy.mock.results.length - 1].value.damage; + expect(turn2Damage).toBe(turn1Damage); + }); + + it("should NOT reduce damage from fixed damage attacks", async () => { + await game.classicMode.startBattle([ Species.BULBASAUR, Species.CHARMANDER ]); + + const [ player1, player2 ] = game.scene.getPlayerField(); + const spy = vi.spyOn(player1, "getAttackDamage"); + + game.move.select(Moves.SPLASH); + game.move.select(Moves.SPLASH, 1); + await game.forceEnemyMove(Moves.DRAGON_RAGE, BattlerIndex.PLAYER); + await game.forceEnemyMove(Moves.SPLASH); + await game.toNextTurn(); + + const turn1Damage = spy.mock.results[spy.mock.results.length - 1].value.damage; + expect(turn1Damage).toBe(40); + + vi.spyOn(player2, "getAbility").mockReturnValue(allAbilities[Abilities.FRIEND_GUARD]); + + game.move.select(Moves.SPLASH); + game.move.select(Moves.SPLASH, 1); + await game.forceEnemyMove(Moves.DRAGON_RAGE, BattlerIndex.PLAYER); + await game.forceEnemyMove(Moves.SPLASH); + await game.toNextTurn(); + + const turn2Damage = spy.mock.results[spy.mock.results.length - 1].value.damage; + expect(turn2Damage).toBe(40); + }); +}); From 13377806ff74508e358e51f0d9cdfaed1d81ef54 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Mon, 28 Oct 2024 18:58:46 -0400 Subject: [PATCH 143/153] [Refactor] Change attack type booster names to enum (#4725) --- src/modifier/modifier-type.ts | 62 ++++++++++++----------------------- 1 file changed, 21 insertions(+), 41 deletions(-) diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index cf2d74483f9..e68e9a06fae 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -502,45 +502,25 @@ export class BerryModifierType extends PokemonHeldItemModifierType implements Ge } } -function getAttackTypeBoosterItemName(type: Type) { - switch (type) { - case Type.NORMAL: - return "Silk Scarf"; - case Type.FIGHTING: - return "Black Belt"; - case Type.FLYING: - return "Sharp Beak"; - case Type.POISON: - return "Poison Barb"; - case Type.GROUND: - return "Soft Sand"; - case Type.ROCK: - return "Hard Stone"; - case Type.BUG: - return "Silver Powder"; - case Type.GHOST: - return "Spell Tag"; - case Type.STEEL: - return "Metal Coat"; - case Type.FIRE: - return "Charcoal"; - case Type.WATER: - return "Mystic Water"; - case Type.GRASS: - return "Miracle Seed"; - case Type.ELECTRIC: - return "Magnet"; - case Type.PSYCHIC: - return "Twisted Spoon"; - case Type.ICE: - return "Never-Melt Ice"; - case Type.DRAGON: - return "Dragon Fang"; - case Type.DARK: - return "Black Glasses"; - case Type.FAIRY: - return "Fairy Feather"; - } +enum AttackTypeBoosterItem { + SILK_SCARF, + BLACK_BELT, + SHARP_BEAK, + POISON_BARB, + SOFT_SAND, + HARD_STONE, + SILVER_POWDER, + SPELL_TAG, + METAL_COAT, + CHARCOAL, + MYSTIC_WATER, + MIRACLE_SEED, + MAGNET, + TWISTED_SPOON, + NEVER_MELT_ICE, + DRAGON_FANG, + BLACK_GLASSES, + FAIRY_FEATHER } export class AttackTypeBoosterModifierType extends PokemonHeldItemModifierType implements GeneratedPersistentModifierType { @@ -548,7 +528,7 @@ export class AttackTypeBoosterModifierType extends PokemonHeldItemModifierType i public boostPercent: integer; constructor(moveType: Type, boostPercent: integer) { - super("", `${getAttackTypeBoosterItemName(moveType)?.replace(/[ \-]/g, "_").toLowerCase()}`, + super("", `${AttackTypeBoosterItem[moveType]?.toLowerCase()}`, (_type, args) => new AttackTypeBoosterModifier(this, (args[0] as Pokemon).id, moveType, boostPercent)); this.moveType = moveType; @@ -556,7 +536,7 @@ export class AttackTypeBoosterModifierType extends PokemonHeldItemModifierType i } get name(): string { - return i18next.t(`modifierType:AttackTypeBoosterItem.${getAttackTypeBoosterItemName(this.moveType)?.replace(/[ \-]/g, "_").toLowerCase()}`); + return i18next.t(`modifierType:AttackTypeBoosterItem.${AttackTypeBoosterItem[this.moveType]?.toLowerCase()}`); } getDescription(scene: BattleScene): string { From 38a6bf07e3955348b797890c76c363cea7d2caed Mon Sep 17 00:00:00 2001 From: geeilhan <107366005+geeilhan@users.noreply.github.com> Date: Tue, 29 Oct 2024 16:36:24 +0100 Subject: [PATCH 144/153] [Bug] Fix enemy faint causing Frenzy moves to mishandle paralysis (#4680) * [BUG] Added frenzy reset function during move phase should move be cancelled (#4227) * Revert [P2 BUG] Fix since it does not work and is faulty * [P2 BUG] Implemented correct frenzy Tag and Movequeue reset should frenzy move fail (#4277) * Cleaned up Bug Fix using frenzyMissFunc * Added automated test case for frenzy move edge case * Improvement to frenzy move reset test case speed * Fix test * Add missing import --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/phases/move-phase.ts | 6 +- src/test/phases/frenzy-move-reset.test.ts | 72 +++++++++++++++++++++++ 2 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 src/test/phases/frenzy-move-reset.test.ts diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index a516fd8593d..5c6c339ffa5 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -3,7 +3,7 @@ import BattleScene from "#app/battle-scene"; import { applyAbAttrs, applyPostMoveUsedAbAttrs, applyPreAttackAbAttrs, BlockRedirectAbAttr, IncreasePpAbAttr, PokemonTypeChangeAbAttr, PostMoveUsedAbAttr, RedirectMoveAbAttr, ReduceStatusEffectDurationAbAttr } from "#app/data/ability"; import { CommonAnim } from "#app/data/battle-anims"; import { BattlerTagLapseType, CenterOfAttentionTag } from "#app/data/battler-tags"; -import { allMoves, applyMoveAttrs, BypassRedirectAttr, BypassSleepAttr, CopyMoveAttr, HealStatusEffectAttr, MoveFlags, PreMoveMessageAttr } from "#app/data/move"; +import { allMoves, applyMoveAttrs, BypassRedirectAttr, BypassSleepAttr, CopyMoveAttr, frenzyMissFunc, HealStatusEffectAttr, MoveFlags, PreMoveMessageAttr } from "#app/data/move"; import { SpeciesFormChangePreMoveTrigger } from "#app/data/pokemon-forms"; import { getStatusEffectActivationText, getStatusEffectHealText } from "#app/data/status-effect"; import { Type } from "#app/data/type"; @@ -470,6 +470,10 @@ export class MovePhase extends BattlePhase { this.scene.eventTarget.dispatchEvent(new MoveUsedEvent(this.pokemon?.id, this.move.getMove(), ppUsed)); } + if (this.cancelled && this.pokemon.summonData?.tags?.find(t => t.tagType === BattlerTagType.FRENZY)) { + frenzyMissFunc(this.pokemon, this.move.getMove()); + } + this.pokemon.pushMoveHistory({ move: Moves.NONE, result: MoveResult.FAIL }); this.pokemon.lapseTags(BattlerTagLapseType.MOVE_EFFECT); diff --git a/src/test/phases/frenzy-move-reset.test.ts b/src/test/phases/frenzy-move-reset.test.ts new file mode 100644 index 00000000000..db9ec2bfe66 --- /dev/null +++ b/src/test/phases/frenzy-move-reset.test.ts @@ -0,0 +1,72 @@ +import { BattlerIndex } from "#app/battle"; +import { Abilities } from "#enums/abilities"; +import { BattlerTagType } from "#enums/battler-tag-type"; +import { StatusEffect } from "#enums/status-effect"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; + +describe("Frenzy Move Reset", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .battleType("single") + .disableCrits() + .starterSpecies(Species.MAGIKARP) + .moveset(Moves.THRASH) + .statusEffect(StatusEffect.PARALYSIS) + .enemyMoveset(Moves.SPLASH) + .enemyLevel(100) + .enemySpecies(Species.SHUCKLE) + .enemyAbility(Abilities.BALL_FETCH); + }); + + /* + * Thrash (or frenzy moves in general) should not continue to run if attack fails due to paralysis + * + * This is a 3-turn Thrash test: + * 1. Thrash is selected and succeeds to hit the enemy -> Enemy Faints + * + * 2. Thrash is automatically selected but misses due to paralysis + * Note: After missing the Pokemon should stop automatically attacking + * + * 3. At the start of the 3rd turn the Player should be able to select a move/switch Pokemon/etc. + * Note: This means that BattlerTag.FRENZY is not anymore in pokemon.summonData.tags and pokemon.summonData.moveQueue is empty + * + */ + it("should cancel frenzy move if move fails turn 2", async () => { + await game.classicMode.startBattle(); + + const playerPokemon = game.scene.getPlayerPokemon()!; + + game.move.select(Moves.THRASH); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.move.forceStatusActivation(false); + await game.toNextTurn(); + + expect(playerPokemon.summonData.moveQueue.length).toBe(2); + expect(playerPokemon.summonData.tags.some(tag => tag.tagType === BattlerTagType.FRENZY)).toBe(true); + + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.move.forceStatusActivation(true); + await game.toNextTurn(); + + expect(playerPokemon.summonData.moveQueue.length).toBe(0); + expect(playerPokemon.summonData.tags.some(tag => tag.tagType === BattlerTagType.FRENZY)).toBe(false); + }); +}); From fb2d3e45d617164eab37f4c70d30ad7cd1215e59 Mon Sep 17 00:00:00 2001 From: Mumble <171087428+frutescens@users.noreply.github.com> Date: Tue, 29 Oct 2024 10:10:37 -0700 Subject: [PATCH 145/153] [Move][Ability] Fully Implement Forest's Curse / Trick Or Treat / Mimicry (#4682) * addedType variable * basic mimicry implementation * eslint * rage * quick change * made files * added mimicry activation message * test for moves done * hahahhaha * done? for now? * laklhaflhasd * Apply suggestions from code review Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * time to start... ughhh * reflect type * Added new message * Update src/field/pokemon.ts Co-authored-by: PigeonBar <56974298+PigeonBar@users.noreply.github.com> * Update src/data/ability.ts Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> * added overrides * some checks * removed comments * Apply suggestions from code review Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --------- Co-authored-by: frutescens Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: PigeonBar <56974298+PigeonBar@users.noreply.github.com> Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> --- src/data/ability.ts | 80 ++++++++++++++++++++++- src/data/move.ts | 23 +++---- src/field/arena.ts | 10 ++- src/field/pokemon.ts | 6 ++ src/test/abilities/mimicry.test.ts | 91 +++++++++++++++++++++++++++ src/test/moves/forests_curse.test.ts | 47 ++++++++++++++ src/test/moves/reflect_type.test.ts | 59 +++++++++++++++++ src/test/moves/trick_or_treat.test.ts | 47 ++++++++++++++ 8 files changed, 350 insertions(+), 13 deletions(-) create mode 100644 src/test/abilities/mimicry.test.ts create mode 100644 src/test/moves/forests_curse.test.ts create mode 100644 src/test/moves/reflect_type.test.ts create mode 100644 src/test/moves/trick_or_treat.test.ts diff --git a/src/data/ability.ts b/src/data/ability.ts index 58824603bc3..29bca792653 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -4703,6 +4703,84 @@ export class PreventBypassSpeedChanceAbAttr extends AbAttr { } } +/** + * This applies a terrain-based type change to the Pokemon. + * Used by Mimicry. + */ +export class TerrainEventTypeChangeAbAttr extends PostSummonAbAttr { + constructor() { + super(true); + } + + override apply(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _cancelled: Utils.BooleanHolder, _args: any[]): boolean { + if (pokemon.isTerastallized()) { + return false; + } + const currentTerrain = pokemon.scene.arena.getTerrainType(); + const typeChange: Type[] = this.determineTypeChange(pokemon, currentTerrain); + if (typeChange.length !== 0) { + if (pokemon.summonData.addedType && typeChange.includes(pokemon.summonData.addedType)) { + pokemon.summonData.addedType = null; + } + pokemon.summonData.types = typeChange; + pokemon.updateInfo(); + } + return true; + } + + /** + * Retrieves the type(s) the Pokemon should change to in response to a terrain + * @param pokemon + * @param currentTerrain {@linkcode TerrainType} + * @returns a list of type(s) + */ + private determineTypeChange(pokemon: Pokemon, currentTerrain: TerrainType): Type[] { + const typeChange: Type[] = []; + switch (currentTerrain) { + case TerrainType.ELECTRIC: + typeChange.push(Type.ELECTRIC); + break; + case TerrainType.MISTY: + typeChange.push(Type.FAIRY); + break; + case TerrainType.GRASSY: + typeChange.push(Type.GRASS); + break; + case TerrainType.PSYCHIC: + typeChange.push(Type.PSYCHIC); + break; + default: + pokemon.getTypes(false, false, true).forEach(t => { + typeChange.push(t); + }); + break; + } + return typeChange; + } + + /** + * Checks if the Pokemon should change types if summoned into an active terrain + * @returns `true` if there is an active terrain requiring a type change | `false` if not + */ + override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean | Promise { + if (pokemon.scene.arena.getTerrainType() !== TerrainType.NONE) { + return this.apply(pokemon, passive, simulated, new Utils.BooleanHolder(false), []); + } + return false; + } + + override getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]) { + const currentTerrain = pokemon.scene.arena.getTerrainType(); + const pokemonNameWithAffix = getPokemonNameWithAffix(pokemon); + if (currentTerrain === TerrainType.NONE) { + return i18next.t("abilityTriggers:pokemonTypeChangeRevert", { pokemonNameWithAffix }); + } else { + const moveType = i18next.t(`pokemonInfo:Type.${Type[this.determineTypeChange(pokemon, currentTerrain)[0]]}`); + return i18next.t("abilityTriggers:pokemonTypeChange", { pokemonNameWithAffix, moveType }); + } + } +} + async function applyAbAttrsInternal( attrType: Constructor, pokemon: Pokemon | null, @@ -5767,7 +5845,7 @@ export function initAbilities() { new Ability(Abilities.POWER_SPOT, 8) .attr(AllyMoveCategoryPowerBoostAbAttr, [ MoveCategory.SPECIAL, MoveCategory.PHYSICAL ], 1.3), new Ability(Abilities.MIMICRY, 8) - .unimplemented(), + .attr(TerrainEventTypeChangeAbAttr), new Ability(Abilities.SCREEN_CLEANER, 8) .attr(PostSummonRemoveArenaTagAbAttr, [ ArenaTagType.AURORA_VEIL, ArenaTagType.LIGHT_SCREEN, ArenaTagType.REFLECT ]), new Ability(Abilities.STEELY_SPIRIT, 8) diff --git a/src/data/move.ts b/src/data/move.ts index 9979b24cc24..7d89a4144eb 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -5858,6 +5858,9 @@ export class RemoveTypeAttr extends MoveEffectAttr { const userTypes = user.getTypes(true); const modifiedTypes = userTypes.filter(type => type !== this.removedType); + if (modifiedTypes.length === 0) { + modifiedTypes.push(Type.UNKNOWN); + } user.summonData.types = modifiedTypes; user.updateInfo(); @@ -5880,7 +5883,11 @@ export class CopyTypeAttr extends MoveEffectAttr { return false; } - user.summonData.types = target.getTypes(true); + const targetTypes = target.getTypes(true); + if (targetTypes.includes(Type.UNKNOWN) && targetTypes.indexOf(Type.UNKNOWN) > -1) { + targetTypes[targetTypes.indexOf(Type.UNKNOWN)] = Type.NORMAL; + } + user.summonData.types = targetTypes; user.updateInfo(); user.scene.queueMessage(i18next.t("moveTriggers:copyType", { pokemonName: getPokemonNameWithAffix(user), targetPokemonName: getPokemonNameWithAffix(target) })); @@ -5889,7 +5896,7 @@ export class CopyTypeAttr extends MoveEffectAttr { } getCondition(): MoveConditionFunc { - return (user, target, move) => target.getTypes()[0] !== Type.UNKNOWN; + return (user, target, move) => target.getTypes()[0] !== Type.UNKNOWN || target.summonData.addedType !== null; } } @@ -5947,11 +5954,7 @@ export class AddTypeAttr extends MoveEffectAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const types = target.getTypes().slice(0, 2).filter(t => t !== Type.UNKNOWN); // TODO: Figure out some way to actually check if another version of this effect is already applied - if (this.type !== Type.UNKNOWN) { - types.push(this.type); - } - target.summonData.types = types; + target.summonData.addedType = this.type; target.updateInfo(); user.scene.queueMessage(i18next.t("moveTriggers:addType", { typeName: i18next.t(`pokemonInfo:Type.${Type[this.type]}`), pokemonName: getPokemonNameWithAffix(target) })); @@ -8983,8 +8986,7 @@ export function initMoves() { .ignoresProtect() .ignoresVirtual(), new StatusMove(Moves.TRICK_OR_TREAT, Type.GHOST, 100, 20, -1, 0, 6) - .attr(AddTypeAttr, Type.GHOST) - .edgeCase(), // Weird interaction with Forest's Curse, reflect type, burn up + .attr(AddTypeAttr, Type.GHOST), new StatusMove(Moves.NOBLE_ROAR, Type.NORMAL, 100, 30, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -1) .soundBased(), @@ -8996,8 +8998,7 @@ export function initMoves() { .target(MoveTarget.ALL_NEAR_OTHERS) .triageMove(), new StatusMove(Moves.FORESTS_CURSE, Type.GRASS, 100, 20, -1, 0, 6) - .attr(AddTypeAttr, Type.GRASS) - .edgeCase(), // Weird interaction with Trick or Treat, reflect type, burn up + .attr(AddTypeAttr, Type.GRASS), new AttackMove(Moves.PETAL_BLIZZARD, Type.GRASS, MoveCategory.PHYSICAL, 90, 100, 15, -1, 0, 6) .windMove() .makesContact(false) diff --git a/src/field/arena.ts b/src/field/arena.ts index 7bfdf9a0000..09faee49d56 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -10,7 +10,14 @@ import Move from "#app/data/move"; import { ArenaTag, ArenaTagSide, ArenaTrapTag, getArenaTag } from "#app/data/arena-tag"; import { BattlerIndex } from "#app/battle"; import { Terrain, TerrainType } from "#app/data/terrain"; -import { applyPostTerrainChangeAbAttrs, applyPostWeatherChangeAbAttrs, PostTerrainChangeAbAttr, PostWeatherChangeAbAttr } from "#app/data/ability"; +import { + applyAbAttrs, + applyPostTerrainChangeAbAttrs, + applyPostWeatherChangeAbAttrs, + PostTerrainChangeAbAttr, + PostWeatherChangeAbAttr, + TerrainEventTypeChangeAbAttr +} from "#app/data/ability"; import Pokemon from "#app/field/pokemon"; import Overrides from "#app/overrides"; import { TagAddedEvent, TagRemovedEvent, TerrainChangedEvent, WeatherChangedEvent } from "#app/events/arena"; @@ -387,6 +394,7 @@ export class Arena { this.scene.getField(true).filter(p => p.isOnField()).map(pokemon => { pokemon.findAndRemoveTags(t => "terrainTypes" in t && !(t.terrainTypes as TerrainType[]).find(t => t === terrain)); applyPostTerrainChangeAbAttrs(PostTerrainChangeAbAttr, pokemon, terrain); + applyAbAttrs(TerrainEventTypeChangeAbAttr, pokemon, null, false); }); return true; diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 278a28937ef..5c49e18058b 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1258,6 +1258,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } + // the type added to Pokemon from moves like Forest's Curse or Trick Or Treat + if (!ignoreOverride && this.summonData && this.summonData.addedType && !types.includes(this.summonData.addedType)) { + types.push(this.summonData.addedType); + } + // If both types are the same (can happen in weird custom typing scenarios), reduce to single type if (types.length > 1 && types[0] === types[1]) { types.splice(0, 1); @@ -5100,6 +5105,7 @@ export class PokemonSummonData { public moveset: (PokemonMove | null)[]; // If not initialized this value will not be populated from save data. public types: Type[] = []; + public addedType: Type | null = null; } export class PokemonBattleData { diff --git a/src/test/abilities/mimicry.test.ts b/src/test/abilities/mimicry.test.ts new file mode 100644 index 00000000000..4e62ddc0b76 --- /dev/null +++ b/src/test/abilities/mimicry.test.ts @@ -0,0 +1,91 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { Type } from "#app/data/type"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Mimicry", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.MIMICRY) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyMoveset(Moves.SPLASH); + }); + + it("Mimicry activates after the Pokémon with Mimicry is switched in while terrain is present, or whenever there is a change in terrain", async () => { + game.override.enemyAbility(Abilities.MISTY_SURGE); + await game.classicMode.startBattle([ Species.FEEBAS, Species.ABRA ]); + + const [ playerPokemon1, playerPokemon2 ] = game.scene.getParty(); + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + expect(playerPokemon1.getTypes().includes(Type.FAIRY)).toBe(true); + + game.doSwitchPokemon(1); + await game.toNextTurn(); + + expect(playerPokemon2.getTypes().includes(Type.FAIRY)).toBe(true); + }); + + it("Pokemon should revert back to its original, root type once terrain ends", async () => { + game.override + .moveset([ Moves.SPLASH, Moves.TRANSFORM ]) + .enemyAbility(Abilities.MIMICRY) + .enemyMoveset([ Moves.SPLASH, Moves.PSYCHIC_TERRAIN ]); + await game.classicMode.startBattle([ Species.REGIELEKI ]); + + const playerPokemon = game.scene.getPlayerPokemon(); + game.move.select(Moves.TRANSFORM); + await game.forceEnemyMove(Moves.PSYCHIC_TERRAIN); + await game.toNextTurn(); + expect(playerPokemon?.getTypes().includes(Type.PSYCHIC)).toBe(true); + + if (game.scene.arena.terrain) { + game.scene.arena.terrain.turnsLeft = 1; + } + + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.SPLASH); + await game.toNextTurn(); + expect(playerPokemon?.getTypes().includes(Type.ELECTRIC)).toBe(true); + }); + + it("If the Pokemon is under the effect of a type-adding move and an equivalent terrain activates, the move's effect disappears", async () => { + game.override + .enemyMoveset([ Moves.FORESTS_CURSE, Moves.GRASSY_TERRAIN ]); + await game.classicMode.startBattle([ Species.FEEBAS ]); + + const playerPokemon = game.scene.getPlayerPokemon(); + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.FORESTS_CURSE); + await game.toNextTurn(); + + expect(playerPokemon?.summonData.addedType).toBe(Type.GRASS); + + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.GRASSY_TERRAIN); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(playerPokemon?.summonData.addedType).toBeNull(); + expect(playerPokemon?.getTypes().includes(Type.GRASS)).toBe(true); + }); +}); diff --git a/src/test/moves/forests_curse.test.ts b/src/test/moves/forests_curse.test.ts new file mode 100644 index 00000000000..c49bdab5255 --- /dev/null +++ b/src/test/moves/forests_curse.test.ts @@ -0,0 +1,47 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { Type } from "#app/data/type"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Forest's Curse", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.FORESTS_CURSE, Moves.TRICK_OR_TREAT ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("will replace the added type from Trick Or Treat", async () => { + await game.classicMode.startBattle([ Species.FEEBAS ]); + + const enemyPokemon = game.scene.getEnemyPokemon(); + game.move.select(Moves.TRICK_OR_TREAT); + await game.phaseInterceptor.to("TurnEndPhase"); + expect(enemyPokemon!.summonData.addedType).toBe(Type.GHOST); + + game.move.select(Moves.FORESTS_CURSE); + await game.phaseInterceptor.to("TurnEndPhase"); + expect(enemyPokemon?.summonData.addedType).toBe(Type.GRASS); + }); +}); diff --git a/src/test/moves/reflect_type.test.ts b/src/test/moves/reflect_type.test.ts new file mode 100644 index 00000000000..0e47d4b00fc --- /dev/null +++ b/src/test/moves/reflect_type.test.ts @@ -0,0 +1,59 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { Type } from "#app/data/type"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Reflect Type", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemyAbility(Abilities.BALL_FETCH); + }); + + it("will make the user Normal/Grass if targetting a typeless Pokemon affected by Forest's Curse", async () => { + game.override + .moveset([ Moves.FORESTS_CURSE, Moves.REFLECT_TYPE ]) + .startingLevel(60) + .enemySpecies(Species.CHARMANDER) + .enemyMoveset([ Moves.BURN_UP, Moves.SPLASH ]); + await game.classicMode.startBattle([ Species.FEEBAS ]); + + const playerPokemon = game.scene.getPlayerPokemon(); + const enemyPokemon = game.scene.getEnemyPokemon(); + + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.BURN_UP); + await game.toNextTurn(); + + game.move.select(Moves.FORESTS_CURSE); + await game.forceEnemyMove(Moves.SPLASH); + await game.toNextTurn(); + expect(enemyPokemon?.getTypes().includes(Type.UNKNOWN)).toBe(true); + expect(enemyPokemon?.getTypes().includes(Type.GRASS)).toBe(true); + + game.move.select(Moves.REFLECT_TYPE); + await game.forceEnemyMove(Moves.SPLASH); + await game.phaseInterceptor.to("TurnEndPhase"); + expect(playerPokemon?.getTypes()[0]).toBe(Type.NORMAL); + expect(playerPokemon?.getTypes().includes(Type.GRASS)).toBe(true); + }); +}); diff --git a/src/test/moves/trick_or_treat.test.ts b/src/test/moves/trick_or_treat.test.ts new file mode 100644 index 00000000000..7ecd00ed076 --- /dev/null +++ b/src/test/moves/trick_or_treat.test.ts @@ -0,0 +1,47 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { Type } from "#app/data/type"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Trick Or Treat", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.FORESTS_CURSE, Moves.TRICK_OR_TREAT ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("will replace added type from Forest's Curse", async () => { + await game.classicMode.startBattle([ Species.FEEBAS ]); + + const enemyPokemon = game.scene.getEnemyPokemon(); + game.move.select(Moves.FORESTS_CURSE); + await game.phaseInterceptor.to("TurnEndPhase"); + expect(enemyPokemon!.summonData.addedType).toBe(Type.GRASS); + + game.move.select(Moves.TRICK_OR_TREAT); + await game.phaseInterceptor.to("TurnEndPhase"); + expect(enemyPokemon?.summonData.addedType).toBe(Type.GHOST); + }); +}); From 13ff80fb95996e6f65d955a2ff90b6749852549a Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Tue, 29 Oct 2024 10:59:28 -0700 Subject: [PATCH 146/153] Mark Last Respects as partial (#4749) --- src/data/ability.ts | 2 +- src/data/move.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/data/ability.ts b/src/data/ability.ts index 29bca792653..780c4a515cd 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -6002,7 +6002,7 @@ export function initAbilities() { .attr(MovePowerBoostAbAttr, (user, target, move) => move.hasFlag(MoveFlags.SLICING_MOVE), 1.5), new Ability(Abilities.SUPREME_OVERLORD, 9) .attr(VariableMovePowerBoostAbAttr, (user, target, move) => 1 + 0.1 * Math.min(user.isPlayer() ? user.scene.currentBattle.playerFaints : user.scene.currentBattle.enemyFaints, 5)) - .partial(), // Counter resets every wave + .partial(), // Counter resets every wave instead of on arena reset new Ability(Abilities.COSTAR, 9) .attr(PostSummonCopyAllyStatsAbAttr), new Ability(Abilities.TOXIC_DEBRIS, 9) diff --git a/src/data/move.ts b/src/data/move.ts index 7d89a4144eb..f9fb61ba447 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -10006,6 +10006,7 @@ export function initMoves() { .attr(ConfuseAttr) .recklessMove(), new AttackMove(Moves.LAST_RESPECTS, Type.GHOST, MoveCategory.PHYSICAL, 50, 100, 10, -1, 0, 9) + .partial() // Counter resets every wave instead of on arena reset .attr(MovePowerMultiplierAttr, (user, target, move) => 1 + Math.min(user.isPlayer() ? user.scene.currentBattle.playerFaints : user.scene.currentBattle.enemyFaints, 100)) .makesContact(false), new AttackMove(Moves.LUMINA_CRASH, Type.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 9) From 65269f935f00b6b2ce122487eede8112382b048b Mon Sep 17 00:00:00 2001 From: Blitzy <118096277+Blitz425@users.noreply.github.com> Date: Tue, 29 Oct 2024 15:19:42 -0500 Subject: [PATCH 147/153] [Balance] Change Bouncy Bubble's Attributes (#4757) * Change Bouncy Bubble's Healing * Move comment to what is custom about Bouncy Bubble --------- Co-authored-by: damocleas --- src/data/move.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/move.ts b/src/data/move.ts index f9fb61ba447..c4e920b773a 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -9492,7 +9492,7 @@ export function initMoves() { .edgeCase() // I assume it needs clanging scales and Kommo-O .ignoresVirtual(), /* End Unused */ - new AttackMove(Moves.ZIPPY_ZAP, Type.ELECTRIC, MoveCategory.PHYSICAL, 50, 100, 15, -1, 2, 7) //LGPE Implementation + new AttackMove(Moves.ZIPPY_ZAP, Type.ELECTRIC, MoveCategory.PHYSICAL, 50, 100, 15, -1, 2, 7) // LGPE Implementation .attr(CritOnlyAttr), new AttackMove(Moves.SPLISHY_SPLASH, Type.WATER, MoveCategory.SPECIAL, 90, 100, 15, 30, 0, 7) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) @@ -9502,7 +9502,7 @@ export function initMoves() { new AttackMove(Moves.PIKA_PAPOW, Type.ELECTRIC, MoveCategory.SPECIAL, -1, -1, 20, -1, 0, 7) .attr(FriendshipPowerAttr), new AttackMove(Moves.BOUNCY_BUBBLE, Type.WATER, MoveCategory.SPECIAL, 60, 100, 20, -1, 0, 7) - .attr(HitHealAttr, 1.0) + .attr(HitHealAttr) // Custom .triageMove() .target(MoveTarget.ALL_NEAR_ENEMIES), new AttackMove(Moves.BUZZY_BUZZ, Type.ELECTRIC, MoveCategory.SPECIAL, 60, 100, 20, 100, 0, 7) From 1cbe8b15052053765127d444582101d50f4b6789 Mon Sep 17 00:00:00 2001 From: Opaque02 <66582645+Opaque02@users.noreply.github.com> Date: Wed, 30 Oct 2024 07:30:20 +1000 Subject: [PATCH 148/153] [P3] Fixing form name being incorrect for some evolved pokemon (#4742) * Fixing form name being incorrect for some evolved pokemon * Updated to include showing the root speciesId if the speciesId locale key doesn't exist --- src/ui/pokemon-info-container.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/ui/pokemon-info-container.ts b/src/ui/pokemon-info-container.ts index 5c3a22639dd..6cc70bd598f 100644 --- a/src/ui/pokemon-info-container.ts +++ b/src/ui/pokemon-info-container.ts @@ -237,14 +237,20 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { const formKey = (pokemon.species?.forms?.[pokemon.formIndex!]?.formKey); const formText = Utils.capitalizeString(formKey, "-", false, false) || ""; - const speciesName = Utils.capitalizeString(Species[pokemon.species.getRootSpeciesId()], "_", true, false); + const speciesName = Utils.capitalizeString(Species[pokemon.species.speciesId], "_", true, false); let formName = ""; if (pokemon.species.speciesId === Species.ARCEUS) { formName = i18next.t(`pokemonInfo:Type.${formText?.toUpperCase()}`); } else { const i18key = `pokemonForm:${speciesName}${formText}`; - formName = i18next.exists(i18key) ? i18next.t(i18key) : formText; + if (i18next.exists(i18key)) { + formName = i18next.t(i18key); + } else { + const rootSpeciesName = Utils.capitalizeString(Species[pokemon.species.getRootSpeciesId()], "_", true, false); + const i18RootKey = `pokemonForm:${rootSpeciesName}${formText}`; + formName = i18next.exists(i18RootKey) ? i18next.t(i18RootKey) : formText; + } } if (formName) { From f9fe59239e6e0976c83cbd19263c7922b8faaf10 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Tue, 29 Oct 2024 17:31:02 -0400 Subject: [PATCH 149/153] [TMs] Remove Sacred Sword, add Secret Power TM, fix Reflect compatibility (#4713) --- src/data/balance/tms.ts | 1085 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 1064 insertions(+), 21 deletions(-) diff --git a/src/data/balance/tms.ts b/src/data/balance/tms.ts index 1a509637e05..7b65ae65ec4 100644 --- a/src/data/balance/tms.ts +++ b/src/data/balance/tms.ts @@ -12318,6 +12318,7 @@ export const tmSpecies: TmSpecies = { Species.TURTWIG, Species.GROTLE, Species.TORTERRA, + Species.BASTIODON, Species.CHINGLING, Species.BRONZOR, Species.BRONZONG, @@ -12325,6 +12326,7 @@ export const tmSpecies: TmSpecies = { Species.WEAVILE, Species.MAGNEZONE, Species.TANGROWTH, + Species.ELECTIVIRE, Species.TOGEKISS, Species.MAMOSWINE, Species.GALLADE, @@ -12357,6 +12359,8 @@ export const tmSpecies: TmSpecies = { Species.CRYOGONAL, Species.MIENFOO, Species.MIENSHAO, + Species.GOLETT, + Species.GOLURK, Species.HYDREIGON, Species.COBALION, Species.TERRAKION, @@ -40233,6 +40237,1065 @@ export const tmSpecies: TmSpecies = { Species.HISUI_ZORUA, Species.HISUI_ZOROARK, ], + [Moves.SECRET_POWER]: [ + Species.BULBASAUR, + Species.IVYSAUR, + Species.VENUSAUR, + Species.CHARMANDER, + Species.CHARMELEON, + Species.CHARIZARD, + Species.SQUIRTLE, + Species.WARTORTLE, + Species.BLASTOISE, + Species.BUTTERFREE, + Species.BEEDRILL, + Species.PIDGEY, + Species.PIDGEOTTO, + Species.PIDGEOT, + Species.RATTATA, + Species.RATICATE, + Species.SPEAROW, + Species.FEAROW, + Species.EKANS, + Species.ARBOK, + Species.PIKACHU, + Species.RAICHU, + Species.SANDSHREW, + Species.SANDSLASH, + Species.NIDORAN_F, + Species.NIDORINA, + Species.NIDOQUEEN, + Species.NIDORAN_M, + Species.NIDORINO, + Species.NIDOKING, + Species.CLEFAIRY, + Species.CLEFABLE, + Species.VULPIX, + Species.NINETALES, + Species.JIGGLYPUFF, + Species.WIGGLYTUFF, + Species.ZUBAT, + Species.GOLBAT, + Species.ODDISH, + Species.GLOOM, + Species.VILEPLUME, + Species.PARAS, + Species.PARASECT, + Species.VENONAT, + Species.VENOMOTH, + Species.DIGLETT, + Species.DUGTRIO, + Species.MEOWTH, + Species.PERSIAN, + Species.PSYDUCK, + Species.GOLDUCK, + Species.MANKEY, + Species.PRIMEAPE, + Species.GROWLITHE, + Species.ARCANINE, + Species.POLIWAG, + Species.POLIWHIRL, + Species.POLIWRATH, + Species.ABRA, + Species.KADABRA, + Species.ALAKAZAM, + Species.MACHOP, + Species.MACHOKE, + Species.MACHAMP, + Species.BELLSPROUT, + Species.WEEPINBELL, + Species.VICTREEBEL, + Species.TENTACOOL, + Species.TENTACRUEL, + Species.GEODUDE, + Species.GRAVELER, + Species.GOLEM, + Species.PONYTA, + Species.RAPIDASH, + Species.SLOWPOKE, + Species.SLOWBRO, + Species.MAGNEMITE, + Species.MAGNETON, + Species.FARFETCHD, + Species.DODUO, + Species.DODRIO, + Species.SEEL, + Species.DEWGONG, + Species.GRIMER, + Species.MUK, + Species.SHELLDER, + Species.CLOYSTER, + Species.GASTLY, + Species.HAUNTER, + Species.GENGAR, + Species.ONIX, + Species.DROWZEE, + Species.HYPNO, + Species.KRABBY, + Species.KINGLER, + Species.VOLTORB, + Species.ELECTRODE, + Species.EXEGGCUTE, + Species.EXEGGUTOR, + Species.CUBONE, + Species.MAROWAK, + Species.HITMONLEE, + Species.HITMONCHAN, + Species.LICKITUNG, + Species.KOFFING, + Species.WEEZING, + Species.RHYHORN, + Species.RHYDON, + Species.CHANSEY, + Species.TANGELA, + Species.KANGASKHAN, + Species.HORSEA, + Species.SEADRA, + Species.GOLDEEN, + Species.SEAKING, + Species.STARYU, + Species.STARMIE, + Species.MR_MIME, + Species.SCYTHER, + Species.JYNX, + Species.ELECTABUZZ, + Species.MAGMAR, + Species.PINSIR, + Species.TAUROS, + Species.GYARADOS, + Species.LAPRAS, + Species.EEVEE, + Species.VAPOREON, + Species.JOLTEON, + Species.FLAREON, + Species.PORYGON, + Species.OMANYTE, + Species.OMASTAR, + Species.KABUTO, + Species.KABUTOPS, + Species.AERODACTYL, + Species.SNORLAX, + Species.ARTICUNO, + Species.ZAPDOS, + Species.MOLTRES, + Species.DRATINI, + Species.DRAGONAIR, + Species.DRAGONITE, + Species.MEWTWO, + Species.MEW, + Species.CHIKORITA, + Species.BAYLEEF, + Species.MEGANIUM, + Species.CYNDAQUIL, + Species.QUILAVA, + Species.TYPHLOSION, + Species.TOTODILE, + Species.CROCONAW, + Species.FERALIGATR, + Species.SENTRET, + Species.FURRET, + Species.HOOTHOOT, + Species.NOCTOWL, + Species.LEDYBA, + Species.LEDIAN, + Species.SPINARAK, + Species.ARIADOS, + Species.CROBAT, + Species.CHINCHOU, + Species.LANTURN, + Species.PICHU, + Species.CLEFFA, + Species.IGGLYBUFF, + Species.TOGEPI, + Species.TOGETIC, + Species.NATU, + Species.XATU, + Species.MAREEP, + Species.FLAAFFY, + Species.AMPHAROS, + Species.BELLOSSOM, + Species.MARILL, + Species.AZUMARILL, + Species.SUDOWOODO, + Species.POLITOED, + Species.HOPPIP, + Species.SKIPLOOM, + Species.JUMPLUFF, + Species.AIPOM, + Species.SUNKERN, + Species.SUNFLORA, + Species.YANMA, + Species.WOOPER, + Species.QUAGSIRE, + Species.ESPEON, + Species.UMBREON, + Species.MURKROW, + Species.SLOWKING, + Species.MISDREAVUS, + Species.GIRAFARIG, + Species.PINECO, + Species.FORRETRESS, + Species.DUNSPARCE, + Species.GLIGAR, + Species.STEELIX, + Species.SNUBBULL, + Species.GRANBULL, + Species.QWILFISH, + Species.SCIZOR, + Species.SHUCKLE, + Species.HERACROSS, + Species.SNEASEL, + Species.TEDDIURSA, + Species.URSARING, + Species.SLUGMA, + Species.MAGCARGO, + Species.SWINUB, + Species.PILOSWINE, + Species.CORSOLA, + Species.REMORAID, + Species.OCTILLERY, + Species.DELIBIRD, + Species.MANTINE, + Species.SKARMORY, + Species.HOUNDOUR, + Species.HOUNDOOM, + Species.KINGDRA, + Species.PHANPY, + Species.DONPHAN, + Species.PORYGON2, + Species.STANTLER, + Species.TYROGUE, + Species.HITMONTOP, + Species.SMOOCHUM, + Species.ELEKID, + Species.MAGBY, + Species.MILTANK, + Species.BLISSEY, + Species.RAIKOU, + Species.ENTEI, + Species.SUICUNE, + Species.LARVITAR, + Species.PUPITAR, + Species.TYRANITAR, + Species.LUGIA, + Species.HO_OH, + Species.CELEBI, + Species.TREECKO, + Species.GROVYLE, + Species.SCEPTILE, + Species.TORCHIC, + Species.COMBUSKEN, + Species.BLAZIKEN, + Species.MUDKIP, + Species.MARSHTOMP, + Species.SWAMPERT, + Species.POOCHYENA, + Species.MIGHTYENA, + Species.ZIGZAGOON, + Species.LINOONE, + Species.BEAUTIFLY, + Species.DUSTOX, + Species.LOTAD, + Species.LOMBRE, + Species.LUDICOLO, + Species.SEEDOT, + Species.NUZLEAF, + Species.SHIFTRY, + Species.TAILLOW, + Species.SWELLOW, + Species.WINGULL, + Species.PELIPPER, + Species.RALTS, + Species.KIRLIA, + Species.GARDEVOIR, + Species.SURSKIT, + Species.MASQUERAIN, + Species.SHROOMISH, + Species.BRELOOM, + Species.SLAKOTH, + Species.VIGOROTH, + Species.SLAKING, + Species.NINCADA, + Species.NINJASK, + Species.SHEDINJA, + Species.WHISMUR, + Species.LOUDRED, + Species.EXPLOUD, + Species.MAKUHITA, + Species.HARIYAMA, + Species.AZURILL, + Species.NOSEPASS, + Species.SKITTY, + Species.DELCATTY, + Species.SABLEYE, + Species.MAWILE, + Species.ARON, + Species.LAIRON, + Species.AGGRON, + Species.MEDITITE, + Species.MEDICHAM, + Species.ELECTRIKE, + Species.MANECTRIC, + Species.PLUSLE, + Species.MINUN, + Species.VOLBEAT, + Species.ILLUMISE, + Species.ROSELIA, + Species.GULPIN, + Species.SWALOT, + Species.CARVANHA, + Species.SHARPEDO, + Species.WAILMER, + Species.WAILORD, + Species.NUMEL, + Species.CAMERUPT, + Species.TORKOAL, + Species.SPOINK, + Species.GRUMPIG, + Species.SPINDA, + Species.TRAPINCH, + Species.VIBRAVA, + Species.FLYGON, + Species.CACNEA, + Species.CACTURNE, + Species.SWABLU, + Species.ALTARIA, + Species.ZANGOOSE, + Species.SEVIPER, + Species.LUNATONE, + Species.SOLROCK, + Species.BARBOACH, + Species.WHISCASH, + Species.CORPHISH, + Species.CRAWDAUNT, + Species.BALTOY, + Species.CLAYDOL, + Species.LILEEP, + Species.CRADILY, + Species.ANORITH, + Species.ARMALDO, + Species.FEEBAS, + Species.MILOTIC, + Species.CASTFORM, + Species.KECLEON, + Species.SHUPPET, + Species.BANETTE, + Species.DUSKULL, + Species.DUSCLOPS, + Species.TROPIUS, + Species.CHIMECHO, + Species.ABSOL, + Species.SNORUNT, + Species.GLALIE, + Species.SPHEAL, + Species.SEALEO, + Species.WALREIN, + Species.CLAMPERL, + Species.HUNTAIL, + Species.GOREBYSS, + Species.RELICANTH, + Species.LUVDISC, + Species.BAGON, + Species.SHELGON, + Species.SALAMENCE, + Species.METANG, + Species.METAGROSS, + Species.REGIROCK, + Species.REGICE, + Species.REGISTEEL, + Species.LATIAS, + Species.LATIOS, + Species.KYOGRE, + Species.GROUDON, + Species.RAYQUAZA, + Species.JIRACHI, + Species.DEOXYS, + Species.TURTWIG, + Species.GROTLE, + Species.TORTERRA, + Species.CHIMCHAR, + Species.MONFERNO, + Species.INFERNAPE, + Species.PIPLUP, + Species.PRINPLUP, + Species.EMPOLEON, + Species.STARLY, + Species.STARAVIA, + Species.STARAPTOR, + Species.BIDOOF, + Species.BIBAREL, + Species.KRICKETUNE, + Species.SHINX, + Species.LUXIO, + Species.LUXRAY, + Species.BUDEW, + Species.ROSERADE, + Species.CRANIDOS, + Species.RAMPARDOS, + Species.SHIELDON, + Species.BASTIODON, + Species.WORMADAM, + Species.MOTHIM, + Species.VESPIQUEN, + Species.PACHIRISU, + Species.BUIZEL, + Species.FLOATZEL, + Species.CHERUBI, + Species.CHERRIM, + Species.SHELLOS, + Species.GASTRODON, + Species.AMBIPOM, + Species.DRIFLOON, + Species.DRIFBLIM, + Species.BUNEARY, + Species.LOPUNNY, + Species.MISMAGIUS, + Species.HONCHKROW, + Species.GLAMEOW, + Species.PURUGLY, + Species.CHINGLING, + Species.STUNKY, + Species.SKUNTANK, + Species.BRONZOR, + Species.BRONZONG, + Species.BONSLY, + Species.MIME_JR, + Species.HAPPINY, + Species.CHATOT, + Species.SPIRITOMB, + Species.GIBLE, + Species.GABITE, + Species.GARCHOMP, + Species.MUNCHLAX, + Species.RIOLU, + Species.LUCARIO, + Species.HIPPOPOTAS, + Species.HIPPOWDON, + Species.SKORUPI, + Species.DRAPION, + Species.CROAGUNK, + Species.TOXICROAK, + Species.CARNIVINE, + Species.FINNEON, + Species.LUMINEON, + Species.MANTYKE, + Species.SNOVER, + Species.ABOMASNOW, + Species.WEAVILE, + Species.MAGNEZONE, + Species.LICKILICKY, + Species.RHYPERIOR, + Species.TANGROWTH, + Species.ELECTIVIRE, + Species.MAGMORTAR, + Species.TOGEKISS, + Species.YANMEGA, + Species.LEAFEON, + Species.GLACEON, + Species.GLISCOR, + Species.MAMOSWINE, + Species.PORYGON_Z, + Species.GALLADE, + Species.PROBOPASS, + Species.DUSKNOIR, + Species.FROSLASS, + Species.ROTOM, + Species.UXIE, + Species.MESPRIT, + Species.AZELF, + Species.DIALGA, + Species.PALKIA, + Species.HEATRAN, + Species.REGIGIGAS, + Species.GIRATINA, + Species.CRESSELIA, + Species.PHIONE, + Species.MANAPHY, + Species.DARKRAI, + Species.SHAYMIN, + Species.ARCEUS, + Species.VICTINI, + Species.SNIVY, + Species.SERVINE, + Species.SERPERIOR, + Species.TEPIG, + Species.PIGNITE, + Species.EMBOAR, + Species.OSHAWOTT, + Species.DEWOTT, + Species.SAMUROTT, + Species.PATRAT, + Species.WATCHOG, + Species.LILLIPUP, + Species.HERDIER, + Species.STOUTLAND, + Species.PURRLOIN, + Species.LIEPARD, + Species.PANSAGE, + Species.SIMISAGE, + Species.PANSEAR, + Species.SIMISEAR, + Species.PANPOUR, + Species.SIMIPOUR, + Species.MUNNA, + Species.MUSHARNA, + Species.PIDOVE, + Species.TRANQUILL, + Species.UNFEZANT, + Species.BLITZLE, + Species.ZEBSTRIKA, + Species.ROGGENROLA, + Species.BOLDORE, + Species.GIGALITH, + Species.WOOBAT, + Species.SWOOBAT, + Species.DRILBUR, + Species.EXCADRILL, + Species.AUDINO, + Species.TIMBURR, + Species.GURDURR, + Species.CONKELDURR, + Species.TYMPOLE, + Species.PALPITOAD, + Species.SEISMITOAD, + Species.THROH, + Species.SAWK, + Species.SEWADDLE, + Species.SWADLOON, + Species.LEAVANNY, + Species.VENIPEDE, + Species.WHIRLIPEDE, + Species.SCOLIPEDE, + Species.COTTONEE, + Species.WHIMSICOTT, + Species.PETILIL, + Species.LILLIGANT, + Species.BASCULIN, + Species.SANDILE, + Species.KROKOROK, + Species.KROOKODILE, + Species.DARUMAKA, + Species.DARMANITAN, + Species.MARACTUS, + Species.DWEBBLE, + Species.CRUSTLE, + Species.SCRAGGY, + Species.SCRAFTY, + Species.SIGILYPH, + Species.YAMASK, + Species.COFAGRIGUS, + Species.TIRTOUGA, + Species.CARRACOSTA, + Species.ARCHEN, + Species.ARCHEOPS, + Species.TRUBBISH, + Species.GARBODOR, + Species.ZORUA, + Species.ZOROARK, + Species.MINCCINO, + Species.CINCCINO, + Species.GOTHITA, + Species.GOTHORITA, + Species.GOTHITELLE, + Species.SOLOSIS, + Species.DUOSION, + Species.REUNICLUS, + Species.DUCKLETT, + Species.SWANNA, + Species.VANILLITE, + Species.VANILLISH, + Species.VANILLUXE, + Species.DEERLING, + Species.SAWSBUCK, + Species.EMOLGA, + Species.KARRABLAST, + Species.ESCAVALIER, + Species.FOONGUS, + Species.AMOONGUSS, + Species.FRILLISH, + Species.JELLICENT, + Species.ALOMOMOLA, + Species.JOLTIK, + Species.GALVANTULA, + Species.FERROSEED, + Species.FERROTHORN, + Species.KLINK, + Species.KLANG, + Species.KLINKLANG, + Species.EELEKTRIK, + Species.EELEKTROSS, + Species.ELGYEM, + Species.BEHEEYEM, + Species.LITWICK, + Species.LAMPENT, + Species.CHANDELURE, + Species.AXEW, + Species.FRAXURE, + Species.HAXORUS, + Species.CUBCHOO, + Species.BEARTIC, + Species.CRYOGONAL, + Species.SHELMET, + Species.ACCELGOR, + Species.STUNFISK, + Species.MIENFOO, + Species.MIENSHAO, + Species.DRUDDIGON, + Species.GOLETT, + Species.GOLURK, + Species.PAWNIARD, + Species.BISHARP, + Species.BOUFFALANT, + Species.RUFFLET, + Species.BRAVIARY, + Species.VULLABY, + Species.MANDIBUZZ, + Species.HEATMOR, + Species.DURANT, + Species.DEINO, + Species.ZWEILOUS, + Species.HYDREIGON, + Species.LARVESTA, + Species.VOLCARONA, + Species.COBALION, + Species.TERRAKION, + Species.VIRIZION, + Species.TORNADUS, + Species.THUNDURUS, + Species.RESHIRAM, + Species.ZEKROM, + Species.LANDORUS, + Species.KYUREM, + Species.KELDEO, + Species.MELOETTA, + Species.GENESECT, + Species.CHESPIN, + Species.QUILLADIN, + Species.CHESNAUGHT, + Species.FENNEKIN, + Species.BRAIXEN, + Species.DELPHOX, + Species.FROAKIE, + Species.FROGADIER, + Species.GRENINJA, + Species.BUNNELBY, + Species.DIGGERSBY, + Species.FLETCHLING, + Species.FLETCHINDER, + Species.TALONFLAME, + Species.VIVILLON, + Species.LITLEO, + Species.PYROAR, + Species.FLABEBE, + Species.FLOETTE, + Species.FLORGES, + Species.SKIDDO, + Species.GOGOAT, + Species.PANCHAM, + Species.PANGORO, + Species.FURFROU, + Species.ESPURR, + Species.MEOWSTIC, + Species.HONEDGE, + Species.DOUBLADE, + Species.AEGISLASH, + Species.SPRITZEE, + Species.AROMATISSE, + Species.SWIRLIX, + Species.SLURPUFF, + Species.INKAY, + Species.MALAMAR, + Species.BINACLE, + Species.BARBARACLE, + Species.SKRELP, + Species.DRAGALGE, + Species.CLAUNCHER, + Species.CLAWITZER, + Species.HELIOPTILE, + Species.HELIOLISK, + Species.TYRUNT, + Species.TYRANTRUM, + Species.AMAURA, + Species.AURORUS, + Species.SYLVEON, + Species.HAWLUCHA, + Species.DEDENNE, + Species.CARBINK, + Species.GOOMY, + Species.SLIGGOO, + Species.GOODRA, + Species.KLEFKI, + Species.PHANTUMP, + Species.TREVENANT, + Species.PUMPKABOO, + Species.GOURGEIST, + Species.BERGMITE, + Species.AVALUGG, + Species.NOIBAT, + Species.NOIVERN, + Species.XERNEAS, + Species.YVELTAL, + Species.ZYGARDE, + Species.DIANCIE, + Species.HOOPA, + Species.VOLCANION, + Species.ROWLET, + Species.DARTRIX, + Species.DECIDUEYE, + Species.LITTEN, + Species.TORRACAT, + Species.INCINEROAR, + Species.POPPLIO, + Species.BRIONNE, + Species.PRIMARINA, + Species.PIKIPEK, + Species.TRUMBEAK, + Species.TOUCANNON, + Species.YUNGOOS, + Species.GUMSHOOS, + Species.GRUBBIN, + Species.CHARJABUG, + Species.VIKAVOLT, + Species.CRABRAWLER, + Species.CRABOMINABLE, + Species.ORICORIO, + Species.CUTIEFLY, + Species.RIBOMBEE, + Species.ROCKRUFF, + Species.LYCANROC, + Species.WISHIWASHI, + Species.MAREANIE, + Species.TOXAPEX, + Species.MUDBRAY, + Species.MUDSDALE, + Species.DEWPIDER, + Species.ARAQUANID, + Species.FOMANTIS, + Species.LURANTIS, + Species.MORELULL, + Species.SHIINOTIC, + Species.SALANDIT, + Species.SALAZZLE, + Species.STUFFUL, + Species.BEWEAR, + Species.BOUNSWEET, + Species.STEENEE, + Species.TSAREENA, + Species.COMFEY, + Species.ORANGURU, + Species.PASSIMIAN, + Species.WIMPOD, + Species.GOLISOPOD, + Species.SANDYGAST, + Species.PALOSSAND, + Species.TYPE_NULL, + Species.SILVALLY, + Species.MINIOR, + Species.KOMALA, + Species.TURTONATOR, + Species.TOGEDEMARU, + Species.MIMIKYU, + Species.BRUXISH, + Species.DRAMPA, + Species.DHELMISE, + Species.JANGMO_O, + Species.HAKAMO_O, + Species.KOMMO_O, + Species.TAPU_KOKO, + Species.TAPU_LELE, + Species.TAPU_BULU, + Species.TAPU_FINI, + Species.SOLGALEO, + Species.LUNALA, + Species.NIHILEGO, + Species.BUZZWOLE, + Species.PHEROMOSA, + Species.XURKITREE, + Species.CELESTEELA, + Species.KARTANA, + Species.GUZZLORD, + Species.NECROZMA, + Species.MAGEARNA, + Species.MARSHADOW, + Species.POIPOLE, + Species.NAGANADEL, + Species.STAKATAKA, + Species.BLACEPHALON, + Species.ZERAORA, + Species.MELTAN, + Species.MELMETAL, + Species.GROOKEY, + Species.THWACKEY, + Species.RILLABOOM, + Species.SCORBUNNY, + Species.RABOOT, + Species.CINDERACE, + Species.SOBBLE, + Species.DRIZZILE, + Species.INTELEON, + Species.SKWOVET, + Species.GREEDENT, + Species.ROOKIDEE, + Species.CORVISQUIRE, + Species.CORVIKNIGHT, + Species.DOTTLER, + Species.ORBEETLE, + Species.NICKIT, + Species.THIEVUL, + Species.GOSSIFLEUR, + Species.ELDEGOSS, + Species.WOOLOO, + Species.DUBWOOL, + Species.CHEWTLE, + Species.DREDNAW, + Species.YAMPER, + Species.BOLTUND, + Species.ROLYCOLY, + Species.CARKOL, + Species.COALOSSAL, + Species.FLAPPLE, + Species.APPLETUN, + Species.SILICOBRA, + Species.SANDACONDA, + Species.CRAMORANT, + Species.ARROKUDA, + Species.BARRASKEWDA, + Species.TOXEL, + Species.TOXTRICITY, + Species.SIZZLIPEDE, + Species.CENTISKORCH, + Species.CLOBBOPUS, + Species.GRAPPLOCT, + Species.SINISTEA, + Species.POLTEAGEIST, + Species.HATENNA, + Species.HATTREM, + Species.HATTERENE, + Species.IMPIDIMP, + Species.MORGREM, + Species.GRIMMSNARL, + Species.OBSTAGOON, + Species.PERRSERKER, + Species.CURSOLA, + Species.SIRFETCHD, + Species.MR_RIME, + Species.RUNERIGUS, + Species.MILCERY, + Species.ALCREMIE, + Species.FALINKS, + Species.PINCURCHIN, + Species.SNOM, + Species.FROSMOTH, + Species.STONJOURNER, + Species.EISCUE, + Species.INDEEDEE, + Species.MORPEKO, + Species.CUFANT, + Species.COPPERAJAH, + Species.DRACOZOLT, + Species.ARCTOZOLT, + Species.DRACOVISH, + Species.ARCTOVISH, + Species.DURALUDON, + Species.DREEPY, + Species.DRAKLOAK, + Species.DRAGAPULT, + Species.ZACIAN, + Species.ZAMAZENTA, + Species.ETERNATUS, + Species.KUBFU, + Species.URSHIFU, + Species.ZARUDE, + Species.REGIELEKI, + Species.REGIDRAGO, + Species.GLASTRIER, + Species.SPECTRIER, + Species.CALYREX, + Species.WYRDEER, + Species.KLEAVOR, + Species.URSALUNA, + Species.BASCULEGION, + Species.SNEASLER, + Species.OVERQWIL, + Species.ENAMORUS, + Species.SPRIGATITO, + Species.FLORAGATO, + Species.MEOWSCARADA, + Species.FUECOCO, + Species.CROCALOR, + Species.SKELEDIRGE, + Species.QUAXLY, + Species.QUAXWELL, + Species.QUAQUAVAL, + Species.LECHONK, + Species.OINKOLOGNE, + Species.TAROUNTULA, + Species.SPIDOPS, + Species.NYMBLE, + Species.LOKIX, + Species.PAWMI, + Species.PAWMO, + Species.PAWMOT, + Species.TANDEMAUS, + Species.MAUSHOLD, + Species.FIDOUGH, + Species.DACHSBUN, + Species.SMOLIV, + Species.DOLLIV, + Species.ARBOLIVA, + Species.SQUAWKABILLY, + Species.NACLI, + Species.NACLSTACK, + Species.GARGANACL, + Species.CHARCADET, + Species.ARMAROUGE, + Species.CERULEDGE, + Species.TADBULB, + Species.BELLIBOLT, + Species.WATTREL, + Species.KILOWATTREL, + Species.MASCHIFF, + Species.MABOSSTIFF, + Species.SHROODLE, + Species.GRAFAIAI, + Species.BRAMBLIN, + Species.BRAMBLEGHAST, + Species.TOEDSCOOL, + Species.TOEDSCRUEL, + Species.KLAWF, + Species.CAPSAKID, + Species.SCOVILLAIN, + Species.RELLOR, + Species.RABSCA, + Species.FLITTLE, + Species.ESPATHRA, + Species.TINKATINK, + Species.TINKATUFF, + Species.TINKATON, + Species.WIGLETT, + Species.WUGTRIO, + Species.BOMBIRDIER, + Species.FINIZEN, + Species.PALAFIN, + Species.VAROOM, + Species.REVAVROOM, + Species.CYCLIZAR, + Species.ORTHWORM, + Species.GLIMMET, + Species.GLIMMORA, + Species.GREAVARD, + Species.HOUNDSTONE, + Species.FLAMIGO, + Species.CETODDLE, + Species.CETITAN, + Species.VELUZA, + Species.DONDOZO, + Species.TATSUGIRI, + Species.ANNIHILAPE, + Species.CLODSIRE, + Species.FARIGIRAF, + Species.DUDUNSPARCE, + Species.KINGAMBIT, + Species.GREAT_TUSK, + Species.SCREAM_TAIL, + Species.BRUTE_BONNET, + Species.FLUTTER_MANE, + Species.SLITHER_WING, + Species.SANDY_SHOCKS, + Species.IRON_TREADS, + Species.IRON_BUNDLE, + Species.IRON_HANDS, + Species.IRON_JUGULIS, + Species.IRON_MOTH, + Species.IRON_THORNS, + Species.FRIGIBAX, + Species.ARCTIBAX, + Species.BAXCALIBUR, + Species.GIMMIGHOUL, + Species.GHOLDENGO, + Species.WO_CHIEN, + Species.CHIEN_PAO, + Species.TING_LU, + Species.CHI_YU, + Species.ROARING_MOON, + Species.IRON_VALIANT, + Species.KORAIDON, + Species.MIRAIDON, + Species.WALKING_WAKE, + Species.IRON_LEAVES, + Species.DIPPLIN, + Species.POLTCHAGEIST, + Species.SINISTCHA, + Species.OKIDOGI, + Species.MUNKIDORI, + Species.FEZANDIPITI, + Species.OGERPON, + Species.ARCHALUDON, + Species.HYDRAPPLE, + Species.GOUGING_FIRE, + Species.RAGING_BOLT, + Species.IRON_BOULDER, + Species.IRON_CROWN, + Species.TERAPAGOS, + Species.PECHARUNT, + Species.ALOLA_RATTATA, + Species.ALOLA_RATICATE, + Species.ALOLA_RAICHU, + Species.ALOLA_SANDSHREW, + Species.ALOLA_SANDSLASH, + Species.ALOLA_VULPIX, + Species.ALOLA_NINETALES, + Species.ALOLA_DIGLETT, + Species.ALOLA_DUGTRIO, + Species.ALOLA_MEOWTH, + Species.ALOLA_PERSIAN, + Species.ALOLA_GEODUDE, + Species.ALOLA_GRAVELER, + Species.ALOLA_GOLEM, + Species.ALOLA_GRIMER, + Species.ALOLA_MUK, + Species.ALOLA_EXEGGUTOR, + Species.ALOLA_MAROWAK, + Species.ETERNAL_FLOETTE, + Species.GALAR_MEOWTH, + Species.GALAR_PONYTA, + Species.GALAR_RAPIDASH, + Species.GALAR_SLOWPOKE, + Species.GALAR_SLOWBRO, + Species.GALAR_FARFETCHD, + Species.GALAR_WEEZING, + Species.GALAR_MR_MIME, + Species.GALAR_ARTICUNO, + Species.GALAR_ZAPDOS, + Species.GALAR_MOLTRES, + Species.GALAR_SLOWKING, + Species.GALAR_CORSOLA, + Species.GALAR_ZIGZAGOON, + Species.GALAR_LINOONE, + Species.GALAR_DARUMAKA, + Species.GALAR_DARMANITAN, + Species.GALAR_YAMASK, + Species.GALAR_STUNFISK, + Species.HISUI_GROWLITHE, + Species.HISUI_ARCANINE, + Species.HISUI_VOLTORB, + Species.HISUI_ELECTRODE, + Species.HISUI_TYPHLOSION, + Species.HISUI_QWILFISH, + Species.HISUI_SNEASEL, + Species.HISUI_SAMUROTT, + Species.HISUI_LILLIGANT, + Species.HISUI_ZORUA, + Species.HISUI_ZOROARK, + Species.HISUI_BRAVIARY, + Species.HISUI_SLIGGOO, + Species.HISUI_GOODRA, + Species.HISUI_AVALUGG, + Species.HISUI_DECIDUEYE, + Species.PALDEA_TAUROS, + Species.PALDEA_WOOPER, + Species.BLOODMOON_URSALUNA, + ], [Moves.DIVE]: [ Species.SQUIRTLE, Species.WARTORTLE, @@ -59529,26 +60592,6 @@ export const tmSpecies: TmSpecies = { Species.HISUI_SAMUROTT, Species.PALDEA_TAUROS, ], - [Moves.SACRED_SWORD]: [ - Species.GALLADE, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.KELDEO, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.KARTANA, - Species.ZACIAN, - Species.CHIEN_PAO, - Species.IRON_LEAVES, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.HISUI_SAMUROTT, - ], [Moves.RAZOR_SHELL]: [ Species.SLOWBRO, Species.SHELLDER, @@ -67389,6 +68432,7 @@ export const tmPoolTiers: TmPoolTiers = { [Moves.ENDEAVOR]: ModifierTier.COMMON, [Moves.SKILL_SWAP]: ModifierTier.COMMON, [Moves.IMPRISON]: ModifierTier.COMMON, + [Moves.SECRET_POWER]: ModifierTier.COMMON, [Moves.DIVE]: ModifierTier.GREAT, [Moves.FEATHER_DANCE]: ModifierTier.COMMON, [Moves.BLAZE_KICK]: ModifierTier.GREAT, @@ -67517,7 +68561,6 @@ export const tmPoolTiers: TmPoolTiers = { [Moves.ELECTROWEB]: ModifierTier.GREAT, [Moves.WILD_CHARGE]: ModifierTier.GREAT, [Moves.DRILL_RUN]: ModifierTier.GREAT, - [Moves.SACRED_SWORD]: ModifierTier.ULTRA, [Moves.RAZOR_SHELL]: ModifierTier.GREAT, [Moves.HEAT_CRASH]: ModifierTier.GREAT, [Moves.TAIL_SLAP]: ModifierTier.GREAT, From 921d4fa18c3e4cb62968ea16f18ae27bf30ad567 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Tue, 29 Oct 2024 14:31:37 -0700 Subject: [PATCH 150/153] [P2] Chloroblast & Struggle should not recoil if the move failed (#4719) * Chloroblast & Struggle should not recoil if no damage was dealt * Protect against missing move entry Co-authored-by: PigeonBar <56974298+PigeonBar@users.noreply.github.com> --------- Co-authored-by: PigeonBar <56974298+PigeonBar@users.noreply.github.com> --- src/data/move.ts | 5 ++++ src/test/moves/chloroblast.test.ts | 42 ++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 src/test/moves/chloroblast.test.ts diff --git a/src/data/move.ts b/src/data/move.ts index c4e920b773a..529a9508acf 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -1420,6 +1420,11 @@ export class RecoilAttr extends MoveEffectAttr { return false; } + // Chloroblast and Struggle should not deal recoil damage if the move was not successful + if (this.useHp && [ MoveResult.FAIL, MoveResult.MISS ].includes(user.getLastXMoves(1)[0]?.result)) { + return false; + } + const damageValue = (!this.useHp ? user.turnData.damageDealt : user.getMaxHp()) * this.damageRatio; const minValue = user.turnData.damageDealt ? 1 : 0; const recoilDamage = Utils.toDmgValue(damageValue, minValue); diff --git a/src/test/moves/chloroblast.test.ts b/src/test/moves/chloroblast.test.ts new file mode 100644 index 00000000000..5e55bf46958 --- /dev/null +++ b/src/test/moves/chloroblast.test.ts @@ -0,0 +1,42 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Chloroblast", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.CHLOROBLAST ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.PROTECT); + }); + + it("should not deal recoil damage if the opponent uses protect", async () => { + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.CHLOROBLAST); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getPlayerPokemon()!.isFullHp()).toBe(true); + }); +}); From fd1aa41d095a1d53a653b3ad33ddc653e1c0132b Mon Sep 17 00:00:00 2001 From: innerthunder <168692175+innerthunder@users.noreply.github.com> Date: Tue, 29 Oct 2024 14:32:07 -0700 Subject: [PATCH 151/153] [P2] Fix AI targeting allies with status effect moves (#4717) --- src/data/move.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/data/move.ts b/src/data/move.ts index 529a9508acf..c5b14304fb2 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -2182,7 +2182,10 @@ export class StatusEffectAttr extends MoveEffectAttr { getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { const moveChance = this.getMoveChance(user, target, move, this.selfTarget, false); - return !(this.selfTarget ? user : target).status && (this.selfTarget ? user : target).canSetStatus(this.effect, true, false, user) ? Math.floor(moveChance * -0.1) : 0; + const score = (moveChance < 0) ? -10 : Math.floor(moveChance * -0.1); + const pokemon = this.selfTarget ? user : target; + + return !pokemon.status && pokemon.canSetStatus(this.effect, true, false, user) ? score : 0; } } @@ -2202,7 +2205,10 @@ export class MultiStatusEffectAttr extends StatusEffectAttr { getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { const moveChance = this.getMoveChance(user, target, move, this.selfTarget, false); - return !(this.selfTarget ? user : target).status && (this.selfTarget ? user : target).canSetStatus(this.effect, true, false, user) ? Math.floor(moveChance * -0.1) : 0; + const score = (moveChance < 0) ? -10 : Math.floor(moveChance * -0.1); + const pokemon = this.selfTarget ? user : target; + + return !pokemon.status && pokemon.canSetStatus(this.effect, true, false, user) ? score : 0; } } @@ -2233,7 +2239,7 @@ export class PsychoShiftEffectAttr extends MoveEffectAttr { } getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { - return !(this.selfTarget ? user : target).status && (this.selfTarget ? user : target).canSetStatus(user.status?.effect, true, false, user) ? Math.floor(move.chance * -0.1) : 0; + return !target.status && target.canSetStatus(user.status?.effect, true, false, user) ? -10 : 0; } } /** From afe6d2900d1b540de672ae7632a57e3c58f68144 Mon Sep 17 00:00:00 2001 From: PrabbyDD <147005742+PrabbyDD@users.noreply.github.com> Date: Tue, 29 Oct 2024 14:38:33 -0700 Subject: [PATCH 152/153] [P2] Fix for Speed Boost is Activated on the Turn a Pokemon is Switched In, and When a Pokemon Fails to Escape #4353 (#4676) * fixing speed boost for pokemon being switched in and for if failed escape * adding unit tests * adding failed run away test case * adding failed run away test case modification * refactoring solution to be more consistent with coding style * more fixes for consistency * more fixes for consistency * adding new AbAttr in abiliity.ts for posterity * removing uneccesary variables * fixing a merge conflict --- src/data/ability.ts | 19 ++-- src/enums/switch-type.ts | 2 + src/field/pokemon.ts | 2 + src/phases/attempt-run-phase.ts | 7 +- src/phases/check-switch-phase.ts | 2 +- src/phases/switch-summon-phase.ts | 9 +- src/test/abilities/speed_boost.test.ts | 125 +++++++++++++++++++++++++ 7 files changed, 150 insertions(+), 16 deletions(-) create mode 100644 src/test/abilities/speed_boost.test.ts diff --git a/src/data/ability.ts b/src/data/ability.ts index 780c4a515cd..3c73bb47c47 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -3614,22 +3614,19 @@ export class MoodyAbAttr extends PostTurnAbAttr { } } -export class PostTurnStatStageChangeAbAttr extends PostTurnAbAttr { - private stats: BattleStat[]; - private stages: number; +export class SpeedBoostAbAttr extends PostTurnAbAttr { - constructor(stats: BattleStat[], stages: number) { + constructor() { super(true); - - this.stats = Array.isArray(stats) - ? stats - : [ stats ]; - this.stages = stages; } applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { if (!simulated) { - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, this.stats, this.stages)); + if (!pokemon.turnData.switchedInThisTurn && !pokemon.turnData.failedRunAway) { + pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ Stat.SPD ], 1)); + } else { + return false; + } } return true; } @@ -5011,7 +5008,7 @@ export function initAbilities() { .attr(PostSummonWeatherChangeAbAttr, WeatherType.RAIN) .attr(PostBiomeChangeWeatherChangeAbAttr, WeatherType.RAIN), new Ability(Abilities.SPEED_BOOST, 3) - .attr(PostTurnStatStageChangeAbAttr, [ Stat.SPD ], 1), + .attr(SpeedBoostAbAttr), new Ability(Abilities.BATTLE_ARMOR, 3) .attr(BlockCritAbAttr) .ignorable(), diff --git a/src/enums/switch-type.ts b/src/enums/switch-type.ts index b25ba6ad119..752c0902636 100644 --- a/src/enums/switch-type.ts +++ b/src/enums/switch-type.ts @@ -3,6 +3,8 @@ * or {@linkcode SwitchSummonPhase} will carry out. */ export enum SwitchType { + /** Switchout specifically for when combat starts and the player is prompted if they will switch Pokemon */ + INITIAL_SWITCH, /** Basic switchout where the Pokemon to switch in is selected */ SWITCH, /** Transfers stat stages and other effects from the returning Pokemon to the switched in Pokemon */ diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 5c49e18058b..321532fffa7 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -5143,6 +5143,8 @@ export class PokemonTurnData { public statStagesDecreased: boolean = false; public moveEffectiveness: TypeDamageMultiplier | null = null; public combiningPledge?: Moves; + public switchedInThisTurn: boolean = false; + public failedRunAway: boolean = false; } export enum AiType { diff --git a/src/phases/attempt-run-phase.ts b/src/phases/attempt-run-phase.ts index e0dd7fa72fd..b4768dc9a26 100644 --- a/src/phases/attempt-run-phase.ts +++ b/src/phases/attempt-run-phase.ts @@ -10,6 +10,10 @@ import { NewBattlePhase } from "./new-battle-phase"; import { PokemonPhase } from "./pokemon-phase"; export class AttemptRunPhase extends PokemonPhase { + + /** For testing purposes: this is to force the pokemon to fail and escape */ + public forceFailEscape = false; + constructor(scene: BattleScene, fieldIndex: number) { super(scene, fieldIndex); } @@ -28,7 +32,7 @@ export class AttemptRunPhase extends PokemonPhase { applyAbAttrs(RunSuccessAbAttr, playerPokemon, null, false, escapeChance); - if (playerPokemon.randSeedInt(100) < escapeChance.value) { + if (playerPokemon.randSeedInt(100) < escapeChance.value && !this.forceFailEscape) { this.scene.playSound("se/flee"); this.scene.queueMessage(i18next.t("battle:runAwaySuccess"), null, true, 500); @@ -51,6 +55,7 @@ export class AttemptRunPhase extends PokemonPhase { this.scene.pushPhase(new BattleEndPhase(this.scene)); this.scene.pushPhase(new NewBattlePhase(this.scene)); } else { + playerPokemon.turnData.failedRunAway = true; this.scene.queueMessage(i18next.t("battle:runAwayCannotEscape"), null, true, 500); } diff --git a/src/phases/check-switch-phase.ts b/src/phases/check-switch-phase.ts index 8849d304435..5e459d0e6b5 100644 --- a/src/phases/check-switch-phase.ts +++ b/src/phases/check-switch-phase.ts @@ -51,7 +51,7 @@ export class CheckSwitchPhase extends BattlePhase { this.scene.ui.setMode(Mode.CONFIRM, () => { this.scene.ui.setMode(Mode.MESSAGE); this.scene.tryRemovePhase(p => p instanceof PostSummonPhase && p.player && p.fieldIndex === this.fieldIndex); - this.scene.unshiftPhase(new SwitchPhase(this.scene, SwitchType.SWITCH, this.fieldIndex, false, true)); + this.scene.unshiftPhase(new SwitchPhase(this.scene, SwitchType.INITIAL_SWITCH, this.fieldIndex, false, true)); this.end(); }, () => { this.scene.ui.setMode(Mode.MESSAGE); diff --git a/src/phases/switch-summon-phase.ts b/src/phases/switch-summon-phase.ts index 37652b3cfa4..c7e7bbe011e 100644 --- a/src/phases/switch-summon-phase.ts +++ b/src/phases/switch-summon-phase.ts @@ -64,10 +64,8 @@ export class SwitchSummonPhase extends SummonPhase { } const pokemon = this.getPokemon(); - (this.player ? this.scene.getEnemyField() : this.scene.getPlayerField()).forEach(enemyPokemon => enemyPokemon.removeTagsBySourceId(pokemon.id)); - - if (this.switchType === SwitchType.SWITCH) { + if (this.switchType === SwitchType.SWITCH || this.switchType === SwitchType.INITIAL_SWITCH) { const substitute = pokemon.getTag(SubstituteTag); if (substitute) { this.scene.tweens.add({ @@ -186,6 +184,11 @@ export class SwitchSummonPhase extends SummonPhase { } } + if (this.switchType !== SwitchType.INITIAL_SWITCH) { + pokemon.resetTurnData(); + pokemon.turnData.switchedInThisTurn = true; + } + this.lastPokemon?.resetSummonData(); this.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeActiveTrigger, true); diff --git a/src/test/abilities/speed_boost.test.ts b/src/test/abilities/speed_boost.test.ts new file mode 100644 index 00000000000..dd2e83aaa88 --- /dev/null +++ b/src/test/abilities/speed_boost.test.ts @@ -0,0 +1,125 @@ +import { Stat } from "#enums/stat"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import { CommandPhase } from "#app/phases/command-phase"; +import { Command } from "#app/ui/command-ui-handler"; +import { AttemptRunPhase } from "#app/phases/attempt-run-phase"; + +describe("Abilities - Speed Boost", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + + game.override + .battleType("single") + .enemySpecies(Species.DRAGAPULT) + .ability(Abilities.SPEED_BOOST) + .enemyMoveset(Moves.SPLASH) + .moveset([ Moves.SPLASH, Moves.U_TURN ]); + }); + + it("should increase speed by 1 stage at end of turn", + async () => { + await game.classicMode.startBattle(); + + const playerPokemon = game.scene.getPlayerPokemon()!; + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + + expect(playerPokemon.getStatStage(Stat.SPD)).toBe(1); + }); + + it("should not trigger this turn if pokemon was switched into combat via attack, but the turn after", + async () => { + await game.classicMode.startBattle([ + Species.SHUCKLE, + Species.NINJASK + ]); + + game.move.select(Moves.U_TURN); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + const playerPokemon = game.scene.getPlayerPokemon()!; + expect(playerPokemon.getStatStage(Stat.SPD)).toBe(0); + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + expect(playerPokemon.getStatStage(Stat.SPD)).toBe(1); + }); + + it("checking back to back swtiches", + async () => { + await game.classicMode.startBattle([ + Species.SHUCKLE, + Species.NINJASK + ]); + + game.move.select(Moves.U_TURN); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + let playerPokemon = game.scene.getPlayerPokemon()!; + expect(playerPokemon.getStatStage(Stat.SPD)).toBe(0); + + game.move.select(Moves.U_TURN); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + playerPokemon = game.scene.getPlayerPokemon()!; + expect(playerPokemon.getStatStage(Stat.SPD)).toBe(0); + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + expect(playerPokemon.getStatStage(Stat.SPD)).toBe(1); + }); + + it("should not trigger this turn if pokemon was switched into combat via normal switch, but the turn after", + async () => { + await game.classicMode.startBattle([ + Species.SHUCKLE, + Species.NINJASK + ]); + + game.doSwitchPokemon(1); + await game.toNextTurn(); + const playerPokemon = game.scene.getPlayerPokemon()!; + expect(playerPokemon.getStatStage(Stat.SPD)).toBe(0); + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + expect(playerPokemon.getStatStage(Stat.SPD)).toBe(1); + }); + + it("should not trigger if pokemon fails to escape", + async () => { + await game.classicMode.startBattle([ Species.SHUCKLE ]); + + const commandPhase = game.scene.getCurrentPhase() as CommandPhase; + commandPhase.handleCommand(Command.RUN, 0); + const runPhase = game.scene.getCurrentPhase() as AttemptRunPhase; + runPhase.forceFailEscape = true; + await game.phaseInterceptor.to(AttemptRunPhase); + await game.toNextTurn(); + + const playerPokemon = game.scene.getPlayerPokemon()!; + expect(playerPokemon.getStatStage(Stat.SPD)).toBe(0); + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + expect(playerPokemon.getStatStage(Stat.SPD)).toBe(1); + }); +}); From 15dedf06eda9b1cf1e012bc15c9df3c662dc0b28 Mon Sep 17 00:00:00 2001 From: PrabbyDD <147005742+PrabbyDD@users.noreply.github.com> Date: Tue, 29 Oct 2024 14:38:57 -0700 Subject: [PATCH 153/153] [P2] No Exp Gained after Switching in a Pokemon as the Opponent Faints (#4687) * fixing the exp bug * fixing the exp bug * dont think need to reset turn data there * changing a little bit * Update src/phases/faint-phase.ts Co-authored-by: innerthunder <168692175+innerthunder@users.noreply.github.com> --------- Co-authored-by: innerthunder <168692175+innerthunder@users.noreply.github.com> --- src/phases/faint-phase.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/phases/faint-phase.ts b/src/phases/faint-phase.ts index eee1fd52938..8eb84beded5 100644 --- a/src/phases/faint-phase.ts +++ b/src/phases/faint-phase.ts @@ -65,6 +65,15 @@ export class FaintPhase extends PokemonPhase { } } + /** In case the current pokemon was just switched in, make sure it is counted as participating in the combat */ + this.scene.getPlayerField().forEach((pokemon, i) => { + if (pokemon?.isActive(true)) { + if (pokemon.isPlayer()) { + this.scene.currentBattle.addParticipant(pokemon as PlayerPokemon); + } + } + }); + if (!this.tryOverrideForBattleSpec()) { this.doFaint(); }

    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 QH2?qr07*qoM6N<$f@rYXJpcdz literal 26654 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 Hu0mjf&82b3 diff --git a/public/images/pokemon_icons_8v.json b/public/images/pokemon_icons_8v.json index 002957bba0c..a33f88e9d9b 100644 --- a/public/images/pokemon_icons_8v.json +++ b/public/images/pokemon_icons_8v.json @@ -1,1306 +1,4115 @@ -{ "frames": { - "4052_2": { - "frame": { "x": 85, "y": 209, "w": 21, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 4, "w": 21, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "4052_3": { - "frame": { "x": 106, "y": 210, "w": 21, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 4, "w": 21, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "4077_2": { - "frame": { "x": 203, "y": 112, "w": 24, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 4, "w": 24, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "4077_3": { - "frame": { "x": 48, "y": 112, "w": 24, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 4, "w": 24, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "4078_2": { - "frame": { "x": 230, "y": 133, "w": 27, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 3, "w": 27, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "4078_3": { - "frame": { "x": 203, "y": 133, "w": 27, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 3, "w": 27, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "4079_2": { - "frame": { "x": 79, "y": 250, "w": 26, "h": 14 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 8, "w": 26, "h": 14 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "4079_3": { - "frame": { "x": 351, "y": 250, "w": 26, "h": 14 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 8, "w": 26, "h": 14 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "4080_1": { - "frame": { "x": 352, "y": 161, "w": 24, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 3, "w": 24, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "4080_2": { - "frame": { "x": 23, "y": 161, "w": 24, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 3, "w": 24, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "4080_3": { - "frame": { "x": 328, "y": 160, "w": 24, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 3, "w": 24, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "4144_2": { - "frame": { "x": 146, "y": 230, "w": 22, "h": 19 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 5, "w": 22, "h": 19 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "4144_3": { - "frame": { "x": 85, "y": 231, "w": 22, "h": 19 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 5, "w": 22, "h": 19 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "4145_2": { - "frame": { "x": 228, "y": 110, "w": 28, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 3, "w": 28, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "4145_3": { - "frame": { "x": 97, "y": 89, "w": 28, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 3, "w": 28, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "4146_2": { - "frame": { "x": 240, "y": 200, "w": 28, "h": 18 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 6, "w": 28, "h": 18 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "4146_3": { - "frame": { "x": 212, "y": 200, "w": 28, "h": 18 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 6, "w": 28, "h": 18 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "4199_1": { - "frame": { "x": 360, "y": 30, "w": 20, "h": 27 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 1, "w": 20, "h": 27 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "4199_2": { - "frame": { "x": 96, "y": 182, "w": 20, "h": 27 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 1, "w": 20, "h": 27 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "4199_3": { - "frame": { "x": 192, "y": 179, "w": 20, "h": 27 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 1, "w": 20, "h": 27 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "4222_2": { - "frame": { "x": 309, "y": 228, "w": 21, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 5, "w": 21, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "4222_3": { - "frame": { "x": 330, "y": 228, "w": 21, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 5, "w": 21, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "4263_2": { - "frame": { "x": 216, "y": 258, "w": 22, "h": 16 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 7, "w": 22, "h": 16 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "4263_3": { - "frame": { "x": 304, "y": 265, "w": 22, "h": 16 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 7, "w": 22, "h": 16 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "4264_2": { - "frame": { "x": 287, "y": 210, "w": 22, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 5, "w": 22, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "4264_3": { - "frame": { "x": 160, "y": 210, "w": 22, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 5, "w": 22, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "4562_2": { - "frame": { "x": 76, "y": 264, "w": 22, "h": 16 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 7, "w": 22, "h": 16 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "4562_3": { - "frame": { "x": 351, "y": 264, "w": 22, "h": 16 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 7, "w": 22, "h": 16 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "6100_2": { - "frame": { "x": 168, "y": 230, "w": 14, "h": 14 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 13, "y": 14, "w": 14, "h": 14 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "6100_3": { - "frame": { "x": 49, "y": 277, "w": 14, "h": 14 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 13, "y": 14, "w": 14, "h": 14 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "6101_2": { - "frame": { "x": 312, "y": 187, "w": 16, "h": 16 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 12, "y": 12, "w": 16, "h": 16 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "6101_3": { - "frame": { "x": 266, "y": 271, "w": 16, "h": 16 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 12, "y": 12, "w": 16, "h": 16 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "6215_2": { - "frame": { "x": 182, "y": 251, "w": 17, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 12, "y": 7, "w": 17, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "6215_3": { - "frame": { "x": 126, "y": 250, "w": 17, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 12, "y": 7, "w": 17, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "6549_2": { - "frame": { "x": 288, "y": 249, "w": 16, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 12, "y": 5, "w": 16, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "6549_3": { - "frame": { "x": 286, "y": 58, "w": 16, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 12, "y": 5, "w": 16, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "6570_2": { - "frame": { "x": 146, "y": 249, "w": 18, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 12, "y": 6, "w": 18, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "6570_3": { - "frame": { "x": 333, "y": 248, "w": 18, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 12, "y": 6, "w": 18, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "6571_2": { - "frame": { "x": 193, "y": 156, "w": 25, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 5, "w": 25, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "6571_3": { - "frame": { "x": 23, "y": 138, "w": 25, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 5, "w": 25, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "6705_2": { - "frame": { "x": 125, "y": 89, "w": 15, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 13, "y": 6, "w": 15, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "6705_3": { - "frame": { "x": 34, "y": 271, "w": 15, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 13, "y": 6, "w": 15, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "6706_2": { - "frame": { "x": 234, "y": 85, "w": 26, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 4, "w": 26, "h": 25 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "6706_3": { - "frame": { "x": 260, "y": 85, "w": 26, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 4, "w": 26, "h": 25 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "6713_2": { - "frame": { "x": 257, "y": 133, "w": 27, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 5, "w": 27, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "6713_3": { - "frame": { "x": 48, "y": 134, "w": 27, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 5, "w": 27, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "816_2": { - "frame": { "x": 0, "y": 188, "w": 22, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 3, "w": 22, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "816_3": { - "frame": { "x": 290, "y": 187, "w": 22, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 3, "w": 22, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "817_2": { - "frame": { "x": 308, "y": 136, "w": 24, "h": 24 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 3, "w": 24, "h": 24 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "817_3": { - "frame": { "x": 332, "y": 136, "w": 24, "h": 24 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 3, "w": 24, "h": 24 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "818-gigantamax_2": { - "frame": { "x": 214, "y": 28, "w": 30, "h": 30 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 0, "w": 30, "h": 30 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "818-gigantamax_3": { - "frame": { "x": 348, "y": 0, "w": 30, "h": 30 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 0, "w": 30, "h": 30 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "818_2": { - "frame": { "x": 75, "y": 134, "w": 22, "h": 27 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 1, "w": 22, "h": 27 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "818_3": { - "frame": { "x": 123, "y": 135, "w": 22, "h": 27 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 1, "w": 22, "h": 27 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "821_2": { - "frame": { "x": 139, "y": 271, "w": 19, "h": 16 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 7, "w": 19, "h": 16 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "821_3": { - "frame": { "x": 158, "y": 271, "w": 19, "h": 16 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 7, "w": 19, "h": 16 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "822_2": { - "frame": { "x": 0, "y": 231, "w": 22, "h": 19 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 5, "w": 22, "h": 19 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "822_3": { - "frame": { "x": 287, "y": 230, "w": 22, "h": 19 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 5, "w": 22, "h": 19 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "823-gigantamax_2": { - "frame": { "x": 302, "y": 28, "w": 32, "h": 27 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 1, "w": 32, "h": 27 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "823-gigantamax_3": { - "frame": { "x": 0, "y": 30, "w": 32, "h": 27 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 1, "w": 32, "h": 27 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "823_2": { - "frame": { "x": 140, "y": 87, "w": 27, "h": 24 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 3, "w": 27, "h": 24 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "823_3": { - "frame": { "x": 201, "y": 88, "w": 27, "h": 24 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 3, "w": 27, "h": 24 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "829_2": { - "frame": { "x": 270, "y": 231, "w": 17, "h": 18 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 6, "w": 17, "h": 18 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "829_3": { - "frame": { "x": 122, "y": 271, "w": 17, "h": 18 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 6, "w": 17, "h": 18 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "830_2": { - "frame": { "x": 42, "y": 226, "w": 19, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 3, "w": 19, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "830_3": { - "frame": { "x": 233, "y": 218, "w": 19, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 3, "w": 19, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "835_2": { - "frame": { "x": 211, "y": 218, "w": 22, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 5, "w": 22, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "835_3": { - "frame": { "x": 0, "y": 211, "w": 22, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 5, "w": 22, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "836_2": { - "frame": { "x": 189, "y": 206, "w": 22, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 4, "w": 22, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "836_3": { - "frame": { "x": 138, "y": 205, "w": 22, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 4, "w": 22, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "850_2": { - "frame": { "x": 194, "y": 276, "w": 21, "h": 10 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 10, "w": 21, "h": 10 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "850_3": { - "frame": { "x": 233, "y": 275, "w": 21, "h": 10 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 10, "w": 21, "h": 10 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "851_2": { - "frame": { "x": 113, "y": 0, "w": 37, "h": 30 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 0, "w": 37, "h": 30 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "851_3": { - "frame": { "x": 76, "y": 0, "w": 37, "h": 30 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 0, "w": 37, "h": 30 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "854_2": { - "frame": { "x": 98, "y": 274, "w": 17, "h": 14 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 8, "w": 17, "h": 14 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "854_3": { - "frame": { "x": 177, "y": 272, "w": 17, "h": 14 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 8, "w": 17, "h": 14 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "855_2": { - "frame": { "x": 116, "y": 187, "w": 22, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 3, "w": 22, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "855_3": { - "frame": { "x": 167, "y": 187, "w": 22, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 3, "w": 22, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "856_2": { - "frame": { "x": 127, "y": 227, "w": 19, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 3, "w": 19, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "856_3": { - "frame": { "x": 182, "y": 228, "w": 19, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 3, "w": 19, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "857_2": { - "frame": { "x": 312, "y": 206, "w": 22, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 4, "w": 22, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "857_3": { - "frame": { "x": 44, "y": 204, "w": 22, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 4, "w": 22, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "858-gigantamax_2": { - "frame": { "x": 273, "y": 28, "w": 29, "h": 30 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 0, "w": 29, "h": 30 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "858-gigantamax_3": { - "frame": { "x": 244, "y": 28, "w": 29, "h": 30 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 0, "w": 29, "h": 30 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "858_2": { - "frame": { "x": 47, "y": 179, "w": 22, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 2, "w": 22, "h": 25 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "858_3": { - "frame": { "x": 74, "y": 161, "w": 22, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 2, "w": 22, "h": 25 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "859_2": { - "frame": { "x": 326, "y": 270, "w": 17, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 5, "w": 17, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "859_3": { - "frame": { "x": 0, "y": 271, "w": 17, "h": 20 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 5, "w": 17, "h": 20 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "860_2": { - "frame": { "x": 22, "y": 184, "w": 22, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 3, "w": 22, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "860_3": { - "frame": { "x": 69, "y": 186, "w": 22, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 3, "w": 22, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "861-gigantamax_2": { - "frame": { "x": 0, "y": 57, "w": 26, "h": 30 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 0, "w": 26, "h": 30 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "861-gigantamax_3": { - "frame": { "x": 302, "y": 55, "w": 26, "h": 30 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 0, "w": 26, "h": 30 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "861_2": { - "frame": { "x": 286, "y": 85, "w": 25, "h": 26 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 2, "w": 25, "h": 26 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "861_3": { - "frame": { "x": 72, "y": 83, "w": 25, "h": 26 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 2, "w": 25, "h": 26 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "863_2": { - "frame": { "x": 22, "y": 207, "w": 20, "h": 24 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 3, "w": 20, "h": 24 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "863_3": { - "frame": { "x": 360, "y": 112, "w": 20, "h": 24 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 3, "w": 20, "h": 24 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "864_2": { - "frame": { "x": 94, "y": 30, "w": 30, "h": 27 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 1, "w": 30, "h": 27 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "864_3": { - "frame": { "x": 151, "y": 30, "w": 30, "h": 27 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 1, "w": 30, "h": 27 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "867_2": { - "frame": { "x": 32, "y": 30, "w": 31, "h": 27 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 1, "w": 31, "h": 27 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "867_3": { - "frame": { "x": 63, "y": 30, "w": 31, "h": 27 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 1, "w": 31, "h": 27 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "872_1": { - "frame": { "x": 282, "y": 272, "w": 17, "h": 14 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 8, "w": 17, "h": 14 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "872_2": { - "frame": { "x": 216, "y": 274, "w": 17, "h": 14 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 8, "w": 17, "h": 14 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "872_3": { - "frame": { "x": 17, "y": 274, "w": 17, "h": 14 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 8, "w": 17, "h": 14 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "873_1": { - "frame": { "x": 243, "y": 178, "w": 25, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 4, "w": 25, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "873_2": { - "frame": { "x": 218, "y": 178, "w": 25, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 4, "w": 25, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "873_3": { - "frame": { "x": 270, "y": 162, "w": 25, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 4, "w": 25, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "876-female_2": { - "frame": { "x": 350, "y": 184, "w": 22, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 3, "w": 22, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "876-female_3": { - "frame": { "x": 268, "y": 184, "w": 22, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 3, "w": 22, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "876_2": { - "frame": { "x": 268, "y": 207, "w": 19, "h": 24 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 3, "w": 19, "h": 24 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "876_3": { - "frame": { "x": 66, "y": 209, "w": 19, "h": 24 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 3, "w": 19, "h": 24 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "877-hangry_1": { - "frame": { "x": 105, "y": 253, "w": 17, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 4, "w": 17, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "877-hangry_2": { - "frame": { "x": 249, "y": 254, "w": 17, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 4, "w": 17, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "877-hangry_3": { - "frame": { "x": 199, "y": 255, "w": 17, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 4, "w": 17, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "877_1": { - "frame": { "x": 59, "y": 256, "w": 17, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 4, "w": 17, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "877_2": { - "frame": { "x": 0, "y": 250, "w": 17, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 4, "w": 17, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "877_3": { - "frame": { "x": 17, "y": 253, "w": 17, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 4, "w": 17, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "880_2": { - "frame": { "x": 244, "y": 156, "w": 26, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 4, "w": 26, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "880_3": { - "frame": { "x": 218, "y": 156, "w": 26, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 4, "w": 26, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "881_2": { - "frame": { "x": 252, "y": 231, "w": 18, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 3, "w": 18, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "881_3": { - "frame": { "x": 61, "y": 233, "w": 18, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 3, "w": 18, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "882_2": { - "frame": { "x": 328, "y": 183, "w": 22, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 3, "w": 22, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "882_3": { - "frame": { "x": 145, "y": 182, "w": 22, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 3, "w": 22, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "883_2": { - "frame": { "x": 357, "y": 207, "w": 23, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 4, "w": 23, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "883_3": { - "frame": { "x": 334, "y": 207, "w": 23, "h": 21 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 4, "w": 23, "h": 21 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "884-gigantamax_2": { - "frame": { "x": 124, "y": 30, "w": 27, "h": 30 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 0, "w": 27, "h": 30 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "884-gigantamax_3": { - "frame": { "x": 181, "y": 30, "w": 27, "h": 30 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 0, "w": 27, "h": 30 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "884_2": { - "frame": { "x": 123, "y": 162, "w": 22, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 2, "w": 22, "h": 25 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "884_3": { - "frame": { "x": 0, "y": 163, "w": 22, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 9, "y": 2, "w": 22, "h": 25 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "885_1": { - "frame": { "x": 201, "y": 238, "w": 24, "h": 17 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 6, "w": 24, "h": 17 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "885_2": { - "frame": { "x": 225, "y": 241, "w": 24, "h": 17 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 6, "w": 24, "h": 17 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "885_3": { - "frame": { "x": 309, "y": 248, "w": 24, "h": 17 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 6, "w": 24, "h": 17 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "886_1": { - "frame": { "x": 308, "y": 112, "w": 26, "h": 24 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 3, "w": 26, "h": 24 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "886_2": { - "frame": { "x": 125, "y": 111, "w": 26, "h": 24 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 3, "w": 26, "h": 24 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "886_3": { - "frame": { "x": 177, "y": 112, "w": 26, "h": 24 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 3, "w": 26, "h": 24 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "887_1": { - "frame": { "x": 86, "y": 57, "w": 30, "h": 26 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 2, "w": 30, "h": 26 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "887_2": { - "frame": { "x": 56, "y": 57, "w": 30, "h": 26 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 2, "w": 30, "h": 26 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "887_3": { - "frame": { "x": 26, "y": 57, "w": 30, "h": 26 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 5, "y": 2, "w": 30, "h": 26 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "888-crowned_2": { - "frame": { "x": 182, "y": 0, "w": 32, "h": 30 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 32, "h": 30 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "888-crowned_3": { - "frame": { "x": 150, "y": 0, "w": 32, "h": 30 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 4, "y": 0, "w": 32, "h": 30 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "888_2": { - "frame": { "x": 167, "y": 89, "w": 28, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 3, "w": 28, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "888_3": { - "frame": { "x": 311, "y": 89, "w": 28, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 3, "w": 28, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "889-crowned_2": { - "frame": { "x": 214, "y": 0, "w": 34, "h": 28 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 34, "h": 28 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "889-crowned_3": { - "frame": { "x": 248, "y": 0, "w": 34, "h": 28 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 34, "h": 28 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "889_2": { - "frame": { "x": 260, "y": 58, "w": 26, "h": 27 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 1, "w": 26, "h": 27 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "889_3": { - "frame": { "x": 234, "y": 58, "w": 26, "h": 27 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 1, "w": 26, "h": 27 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "890-eternamax_2": { - "frame": { "x": 0, "y": 0, "w": 38, "h": 30 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 0, "w": 38, "h": 30 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "890-eternamax_3": { - "frame": { "x": 38, "y": 0, "w": 38, "h": 30 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 1, "y": 0, "w": 38, "h": 30 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "890_2": { - "frame": { "x": 282, "y": 0, "w": 33, "h": 28 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 33, "h": 28 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "890_3": { - "frame": { "x": 315, "y": 0, "w": 33, "h": 28 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 3, "y": 1, "w": 33, "h": 28 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "891_1": { - "frame": { "x": 164, "y": 249, "w": 18, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 4, "w": 18, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "891_2": { - "frame": { "x": 270, "y": 249, "w": 18, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 4, "w": 18, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "891_3": { - "frame": { "x": 41, "y": 249, "w": 18, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 11, "y": 4, "w": 18, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "892-gigantamax-rapid_1": { - "frame": { "x": 284, "y": 111, "w": 24, "h": 26 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 2, "w": 24, "h": 26 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "892-gigantamax-rapid_2": { - "frame": { "x": 0, "y": 112, "w": 24, "h": 26 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 2, "w": 24, "h": 26 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "892-gigantamax-rapid_3": { - "frame": { "x": 24, "y": 112, "w": 24, "h": 26 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 2, "w": 24, "h": 26 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "892-gigantamax-single_1": { - "frame": { "x": 26, "y": 83, "w": 23, "h": 29 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 0, "w": 23, "h": 29 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "892-gigantamax-single_2": { - "frame": { "x": 49, "y": 83, "w": 23, "h": 29 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 0, "w": 23, "h": 29 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "892-gigantamax-single_3": { - "frame": { "x": 352, "y": 60, "w": 23, "h": 29 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 0, "w": 23, "h": 29 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "892-rapid-strike_1": { - "frame": { "x": 48, "y": 157, "w": 26, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 4, "w": 26, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "892-rapid-strike_2": { - "frame": { "x": 97, "y": 160, "w": 26, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 4, "w": 26, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "892-rapid-strike_3": { - "frame": { "x": 145, "y": 160, "w": 26, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 4, "w": 26, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "892_1": { - "frame": { "x": 356, "y": 136, "w": 23, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 2, "w": 23, "h": 25 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "892_2": { - "frame": { "x": 284, "y": 137, "w": 23, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 2, "w": 23, "h": 25 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "892_3": { - "frame": { "x": 0, "y": 138, "w": 23, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 2, "w": 23, "h": 25 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "896_1": { - "frame": { "x": 97, "y": 136, "w": 24, "h": 24 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 3, "w": 24, "h": 24 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "896_2": { - "frame": { "x": 145, "y": 136, "w": 24, "h": 24 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 3, "w": 24, "h": 24 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "896_3": { - "frame": { "x": 169, "y": 136, "w": 24, "h": 24 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 3, "w": 24, "h": 24 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "897_1": { - "frame": { "x": 151, "y": 112, "w": 26, "h": 24 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 3, "w": 26, "h": 24 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "897_2": { - "frame": { "x": 97, "y": 112, "w": 26, "h": 24 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 3, "w": 26, "h": 24 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "897_3": { - "frame": { "x": 334, "y": 112, "w": 26, "h": 24 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 3, "w": 26, "h": 24 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "898-ice_1": { - "frame": { "x": 328, "y": 60, "w": 24, "h": 29 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 0, "w": 24, "h": 29 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "898-ice_2": { - "frame": { "x": 116, "y": 60, "w": 24, "h": 29 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 0, "w": 24, "h": 29 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "898-ice_3": { - "frame": { "x": 177, "y": 60, "w": 24, "h": 29 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 8, "y": 0, "w": 24, "h": 29 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "898-shadow_1": { - "frame": { "x": 151, "y": 57, "w": 26, "h": 30 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 0, "w": 26, "h": 30 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "898-shadow_2": { - "frame": { "x": 208, "y": 58, "w": 26, "h": 30 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 0, "w": 26, "h": 30 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "898-shadow_3": { - "frame": { "x": 334, "y": 30, "w": 26, "h": 30 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 0, "w": 26, "h": 30 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "898_1": { - "frame": { "x": 351, "y": 228, "w": 19, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 4, "w": 19, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "898_2": { - "frame": { "x": 22, "y": 231, "w": 19, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 4, "w": 19, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "898_3": { - "frame": { "x": 107, "y": 231, "w": 19, "h": 22 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 4, "w": 19, "h": 22 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "900_2": { - "frame": { "x": 0, "y": 87, "w": 25, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 3, "w": 25, "h": 25 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "900_3": { - "frame": { "x": 72, "y": 109, "w": 25, "h": 25 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 7, "y": 3, "w": 25, "h": 25 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "901_2": { - "frame": { "x": 256, "y": 110, "w": 28, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 5, "w": 28, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "901_3": { - "frame": { "x": 339, "y": 89, "w": 28, "h": 23 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 6, "y": 5, "w": 28, "h": 23 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "903_2": { - "frame": { "x": 307, "y": 160, "w": 21, "h": 27 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 1, "w": 21, "h": 27 }, - "sourceSize": { "w": 40, "h": 30 } - }, - "903_3": { - "frame": { "x": 171, "y": 160, "w": 21, "h": 27 }, - "rotated": false, - "trimmed": true, - "spriteSourceSize": { "x": 10, "y": 1, "w": 21, "h": 27 }, - "sourceSize": { "w": 40, "h": 30 } - } - }, - "meta": { - "app": "https://www.aseprite.org/", - "version": "1.3.7-dev", - "image": "pokemon_icons_8v.png", - "format": "RGBA8888", - "size": { "w": 380, "h": 293 }, - "scale": "1" - } +{ + "textures": [ + { + "image": "pokemon_icons_8v.png", + "format": "RGBA8888", + "size": { + "w": 510, + "h": 510 + }, + "scale": 1, + "frames": [ + { + "filename": "816_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + } + }, + { + "filename": "816_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 0, + "w": 40, + "h": 30 + } + }, + { + "filename": "817_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 0, + "w": 40, + "h": 30 + } + }, + { + "filename": "817_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 0, + "w": 40, + "h": 30 + } + }, + { + "filename": "818-gigantamax_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 0, + "w": 40, + "h": 30 + } + }, + { + "filename": "818-gigantamax_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 0, + "w": 40, + "h": 30 + } + }, + { + "filename": "818_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 0, + "w": 40, + "h": 30 + } + }, + { + "filename": "818_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 0, + "w": 40, + "h": 30 + } + }, + { + "filename": "821_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 0, + "w": 40, + "h": 30 + } + }, + { + "filename": "821_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 0, + "w": 40, + "h": 30 + } + }, + { + "filename": "822_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 0, + "w": 40, + "h": 30 + } + }, + { + "filename": "822_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 0, + "w": 40, + "h": 30 + } + }, + { + "filename": "823-gigantamax_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 30, + "w": 40, + "h": 30 + } + }, + { + "filename": "823-gigantamax_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 30, + "w": 40, + "h": 30 + } + }, + { + "filename": "823_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 30, + "w": 40, + "h": 30 + } + }, + { + "filename": "823_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 30, + "w": 40, + "h": 30 + } + }, + { + "filename": "829_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 30, + "w": 40, + "h": 30 + } + }, + { + "filename": "829_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 30, + "w": 40, + "h": 30 + } + }, + { + "filename": "830_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 30, + "w": 40, + "h": 30 + } + }, + { + "filename": "830_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 30, + "w": 40, + "h": 30 + } + }, + { + "filename": "835_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 30, + "w": 40, + "h": 30 + } + }, + { + "filename": "835_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 30, + "w": 40, + "h": 30 + } + }, + { + "filename": "836_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 30, + "w": 40, + "h": 30 + } + }, + { + "filename": "836_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 30, + "w": 40, + "h": 30 + } + }, + { + "filename": "850_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 60, + "w": 40, + "h": 30 + } + }, + { + "filename": "850_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 60, + "w": 40, + "h": 30 + } + }, + { + "filename": "851-gigantamax", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 60, + "w": 40, + "h": 30 + } + }, + { + "filename": "851-gigantamax_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 60, + "w": 40, + "h": 30 + } + }, + { + "filename": "851-gigantamax_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 60, + "w": 40, + "h": 30 + } + }, + { + "filename": "851_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 60, + "w": 40, + "h": 30 + } + }, + { + "filename": "851_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 60, + "w": 40, + "h": 30 + } + }, + { + "filename": "851s-gigantamax", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 60, + "w": 40, + "h": 30 + } + }, + { + "filename": "854_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 60, + "w": 40, + "h": 30 + } + }, + { + "filename": "854_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 60, + "w": 40, + "h": 30 + } + }, + { + "filename": "855_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 60, + "w": 40, + "h": 30 + } + }, + { + "filename": "855_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 60, + "w": 40, + "h": 30 + } + }, + { + "filename": "856_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 90, + "w": 40, + "h": 30 + } + }, + { + "filename": "856_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 90, + "w": 40, + "h": 30 + } + }, + { + "filename": "857_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 90, + "w": 40, + "h": 30 + } + }, + { + "filename": "857_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 90, + "w": 40, + "h": 30 + } + }, + { + "filename": "858-gigantamax_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 90, + "w": 40, + "h": 30 + } + }, + { + "filename": "858-gigantamax_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 90, + "w": 40, + "h": 30 + } + }, + { + "filename": "858_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 90, + "w": 40, + "h": 30 + } + }, + { + "filename": "858_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 90, + "w": 40, + "h": 30 + } + }, + { + "filename": "859_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 90, + "w": 40, + "h": 30 + } + }, + { + "filename": "859_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 90, + "w": 40, + "h": 30 + } + }, + { + "filename": "860_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 90, + "w": 40, + "h": 30 + } + }, + { + "filename": "860_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 90, + "w": 40, + "h": 30 + } + }, + { + "filename": "861-gigantamax_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 120, + "w": 40, + "h": 30 + } + }, + { + "filename": "861-gigantamax_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 120, + "w": 40, + "h": 30 + } + }, + { + "filename": "861_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 120, + "w": 40, + "h": 30 + } + }, + { + "filename": "861_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 120, + "w": 40, + "h": 30 + } + }, + { + "filename": "863_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 120, + "w": 40, + "h": 30 + } + }, + { + "filename": "863_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 120, + "w": 40, + "h": 30 + } + }, + { + "filename": "864_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 120, + "w": 40, + "h": 30 + } + }, + { + "filename": "864_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 120, + "w": 40, + "h": 30 + } + }, + { + "filename": "867_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 120, + "w": 40, + "h": 30 + } + }, + { + "filename": "867_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 120, + "w": 40, + "h": 30 + } + }, + { + "filename": "872_1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 120, + "w": 40, + "h": 30 + } + }, + { + "filename": "872_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 120, + "w": 40, + "h": 30 + } + }, + { + "filename": "872_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 150, + "w": 40, + "h": 30 + } + }, + { + "filename": "873_1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 150, + "w": 40, + "h": 30 + } + }, + { + "filename": "873_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 150, + "w": 40, + "h": 30 + } + }, + { + "filename": "873_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 150, + "w": 40, + "h": 30 + } + }, + { + "filename": "876-female_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 150, + "w": 40, + "h": 30 + } + }, + { + "filename": "876-female_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 150, + "w": 40, + "h": 30 + } + }, + { + "filename": "876_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 150, + "w": 40, + "h": 30 + } + }, + { + "filename": "876_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 150, + "w": 40, + "h": 30 + } + }, + { + "filename": "877-hangry_1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 150, + "w": 40, + "h": 30 + } + }, + { + "filename": "877-hangry_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 150, + "w": 40, + "h": 30 + } + }, + { + "filename": "877-hangry_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 150, + "w": 40, + "h": 30 + } + }, + { + "filename": "877_1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 150, + "w": 40, + "h": 30 + } + }, + { + "filename": "877_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 180, + "w": 40, + "h": 30 + } + }, + { + "filename": "877_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 180, + "w": 40, + "h": 30 + } + }, + { + "filename": "880_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 180, + "w": 40, + "h": 30 + } + }, + { + "filename": "880_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 180, + "w": 40, + "h": 30 + } + }, + { + "filename": "881_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 180, + "w": 40, + "h": 30 + } + }, + { + "filename": "881_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 180, + "w": 40, + "h": 30 + } + }, + { + "filename": "882_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 180, + "w": 40, + "h": 30 + } + }, + { + "filename": "882_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 180, + "w": 40, + "h": 30 + } + }, + { + "filename": "883_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 180, + "w": 40, + "h": 30 + } + }, + { + "filename": "883_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 180, + "w": 40, + "h": 30 + } + }, + { + "filename": "884-gigantamax_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 180, + "w": 40, + "h": 30 + } + }, + { + "filename": "884-gigantamax_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 180, + "w": 40, + "h": 30 + } + }, + { + "filename": "884_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 210, + "w": 40, + "h": 30 + } + }, + { + "filename": "884_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 210, + "w": 40, + "h": 30 + } + }, + { + "filename": "885_1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 210, + "w": 40, + "h": 30 + } + }, + { + "filename": "885_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 210, + "w": 40, + "h": 30 + } + }, + { + "filename": "885_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 210, + "w": 40, + "h": 30 + } + }, + { + "filename": "886_1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 210, + "w": 40, + "h": 30 + } + }, + { + "filename": "886_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 210, + "w": 40, + "h": 30 + } + }, + { + "filename": "886_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 210, + "w": 40, + "h": 30 + } + }, + { + "filename": "887_1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 210, + "w": 40, + "h": 30 + } + }, + { + "filename": "887_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 210, + "w": 40, + "h": 30 + } + }, + { + "filename": "887_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 210, + "w": 40, + "h": 30 + } + }, + { + "filename": "888-crowned_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 210, + "w": 40, + "h": 30 + } + }, + { + "filename": "888-crowned_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 240, + "w": 40, + "h": 30 + } + }, + { + "filename": "888_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 240, + "w": 40, + "h": 30 + } + }, + { + "filename": "888_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 240, + "w": 40, + "h": 30 + } + }, + { + "filename": "889-crowned_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 240, + "w": 40, + "h": 30 + } + }, + { + "filename": "889-crowned_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 240, + "w": 40, + "h": 30 + } + }, + { + "filename": "889_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 240, + "w": 40, + "h": 30 + } + }, + { + "filename": "889_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 240, + "w": 40, + "h": 30 + } + }, + { + "filename": "890-eternamax_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 240, + "w": 40, + "h": 30 + } + }, + { + "filename": "890-eternamax_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 240, + "w": 40, + "h": 30 + } + }, + { + "filename": "890_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 240, + "w": 40, + "h": 30 + } + }, + { + "filename": "890_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 240, + "w": 40, + "h": 30 + } + }, + { + "filename": "891_1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 240, + "w": 40, + "h": 30 + } + }, + { + "filename": "891_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 270, + "w": 40, + "h": 30 + } + }, + { + "filename": "891_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 270, + "w": 40, + "h": 30 + } + }, + { + "filename": "892-gigantamax-rapid_1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 270, + "w": 40, + "h": 30 + } + }, + { + "filename": "892-gigantamax-rapid_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 270, + "w": 40, + "h": 30 + } + }, + { + "filename": "892-gigantamax-rapid_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 270, + "w": 40, + "h": 30 + } + }, + { + "filename": "892-gigantamax-single_1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 270, + "w": 40, + "h": 30 + } + }, + { + "filename": "892-gigantamax-single_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 270, + "w": 40, + "h": 30 + } + }, + { + "filename": "892-gigantamax-single_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 270, + "w": 40, + "h": 30 + } + }, + { + "filename": "892-rapid-strike_1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 270, + "w": 40, + "h": 30 + } + }, + { + "filename": "892-rapid-strike_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 270, + "w": 40, + "h": 30 + } + }, + { + "filename": "892-rapid-strike_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 270, + "w": 40, + "h": 30 + } + }, + { + "filename": "892_1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 270, + "w": 40, + "h": 30 + } + }, + { + "filename": "892_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 300, + "w": 40, + "h": 30 + } + }, + { + "filename": "892_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 300, + "w": 40, + "h": 30 + } + }, + { + "filename": "894_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 300, + "w": 40, + "h": 30 + } + }, + { + "filename": "894_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 300, + "w": 40, + "h": 30 + } + }, + { + "filename": "895_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 300, + "w": 40, + "h": 30 + } + }, + { + "filename": "895_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 300, + "w": 40, + "h": 30 + } + }, + { + "filename": "896_1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 300, + "w": 40, + "h": 30 + } + }, + { + "filename": "896_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 300, + "w": 40, + "h": 30 + } + }, + { + "filename": "896_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 300, + "w": 40, + "h": 30 + } + }, + { + "filename": "897_1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 300, + "w": 40, + "h": 30 + } + }, + { + "filename": "897_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 300, + "w": 40, + "h": 30 + } + }, + { + "filename": "897_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 300, + "w": 40, + "h": 30 + } + }, + { + "filename": "898-ice_1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 330, + "w": 40, + "h": 30 + } + }, + { + "filename": "898-ice_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 330, + "w": 40, + "h": 30 + } + }, + { + "filename": "898-ice_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 330, + "w": 40, + "h": 30 + } + }, + { + "filename": "898-shadow_1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 330, + "w": 40, + "h": 30 + } + }, + { + "filename": "898-shadow_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 330, + "w": 40, + "h": 30 + } + }, + { + "filename": "898-shadow_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 330, + "w": 40, + "h": 30 + } + }, + { + "filename": "898_1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 330, + "w": 40, + "h": 30 + } + }, + { + "filename": "898_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 330, + "w": 40, + "h": 30 + } + }, + { + "filename": "898_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 330, + "w": 40, + "h": 30 + } + }, + { + "filename": "900_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 330, + "w": 40, + "h": 30 + } + }, + { + "filename": "900_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 330, + "w": 40, + "h": 30 + } + }, + { + "filename": "901_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 330, + "w": 40, + "h": 30 + } + }, + { + "filename": "901_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 360, + "w": 40, + "h": 30 + } + }, + { + "filename": "903_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 360, + "w": 40, + "h": 30 + } + }, + { + "filename": "903_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 360, + "w": 40, + "h": 30 + } + }, + { + "filename": "4052_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 360, + "w": 40, + "h": 30 + } + }, + { + "filename": "4052_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 360, + "w": 40, + "h": 30 + } + }, + { + "filename": "4077_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 360, + "w": 40, + "h": 30 + } + }, + { + "filename": "4077_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 360, + "w": 40, + "h": 30 + } + }, + { + "filename": "4078_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 360, + "w": 40, + "h": 30 + } + }, + { + "filename": "4078_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 360, + "w": 40, + "h": 30 + } + }, + { + "filename": "4079_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 360, + "w": 40, + "h": 30 + } + }, + { + "filename": "4079_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 360, + "w": 40, + "h": 30 + } + }, + { + "filename": "4080_1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 360, + "w": 40, + "h": 30 + } + }, + { + "filename": "4080_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 390, + "w": 40, + "h": 30 + } + }, + { + "filename": "4080_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 390, + "w": 40, + "h": 30 + } + }, + { + "filename": "4144_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 390, + "w": 40, + "h": 30 + } + }, + { + "filename": "4144_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 390, + "w": 40, + "h": 30 + } + }, + { + "filename": "4145_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 390, + "w": 40, + "h": 30 + } + }, + { + "filename": "4145_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 390, + "w": 40, + "h": 30 + } + }, + { + "filename": "4146_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 390, + "w": 40, + "h": 30 + } + }, + { + "filename": "4146_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 390, + "w": 40, + "h": 30 + } + }, + { + "filename": "4199_1", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 390, + "w": 40, + "h": 30 + } + }, + { + "filename": "4199_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 390, + "w": 40, + "h": 30 + } + }, + { + "filename": "4199_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 390, + "w": 40, + "h": 30 + } + }, + { + "filename": "4222_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 390, + "w": 40, + "h": 30 + } + }, + { + "filename": "4222_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 420, + "w": 40, + "h": 30 + } + }, + { + "filename": "4263_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 420, + "w": 40, + "h": 30 + } + }, + { + "filename": "4263_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 420, + "w": 40, + "h": 30 + } + }, + { + "filename": "4264_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 420, + "w": 40, + "h": 30 + } + }, + { + "filename": "4264_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 420, + "w": 40, + "h": 30 + } + }, + { + "filename": "4562_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 420, + "w": 40, + "h": 30 + } + }, + { + "filename": "4562_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 420, + "w": 40, + "h": 30 + } + }, + { + "filename": "6100_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 420, + "w": 40, + "h": 30 + } + }, + { + "filename": "6100_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 420, + "w": 40, + "h": 30 + } + }, + { + "filename": "6101_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 420, + "w": 40, + "h": 30 + } + }, + { + "filename": "6101_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 420, + "w": 40, + "h": 30 + } + }, + { + "filename": "6215_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 420, + "w": 40, + "h": 30 + } + }, + { + "filename": "6215_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 450, + "w": 40, + "h": 30 + } + }, + { + "filename": "6503_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 450, + "w": 40, + "h": 30 + } + }, + { + "filename": "6503_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 450, + "w": 40, + "h": 30 + } + }, + { + "filename": "6549_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 120, + "y": 450, + "w": 40, + "h": 30 + } + }, + { + "filename": "6549_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 160, + "y": 450, + "w": 40, + "h": 30 + } + }, + { + "filename": "6570_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 200, + "y": 450, + "w": 40, + "h": 30 + } + }, + { + "filename": "6570_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 240, + "y": 450, + "w": 40, + "h": 30 + } + }, + { + "filename": "6571_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 280, + "y": 450, + "w": 40, + "h": 30 + } + }, + { + "filename": "6571_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 320, + "y": 450, + "w": 40, + "h": 30 + } + }, + { + "filename": "6705_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 360, + "y": 450, + "w": 40, + "h": 30 + } + }, + { + "filename": "6705_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 400, + "y": 450, + "w": 40, + "h": 30 + } + }, + { + "filename": "6706_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 440, + "y": 450, + "w": 40, + "h": 30 + } + }, + { + "filename": "6706_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 0, + "y": 480, + "w": 40, + "h": 30 + } + }, + { + "filename": "6713_2", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 40, + "y": 480, + "w": 40, + "h": 30 + } + }, + { + "filename": "6713_3", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 40, + "h": 30 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 40, + "h": 30 + }, + "frame": { + "x": 80, + "y": 480, + "w": 40, + "h": 30 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:c6192164d1b1971f54a6c5864e11748d:46b3adcf2a25bfb824db3d24cd1c96a9:ec5f05e7f30cd98f74db0c2326109fd3$" + } } diff --git a/public/images/pokemon_icons_8v.png b/public/images/pokemon_icons_8v.png index 1968bfe6214f9477ac2ece69f7f3c910449ac246..2af86ac656f36e002fb502384e1c3a2a85374a3d 100644 GIT binary patch literal 46264 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 literal 41393 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¨_d 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 ee~|z8SpEkle&Oxk#V^wU0000+2K#(B$ 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 literal 50464 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

v^J8bg(f%?PGJxL)) z>e!kpW$F@?@c~=(MhK+I+k}L!z{VSm#AqV@Uue51Jc`o6e5}uvhOx9A(qO_oqkQ+f z%qB60gvp$rSa&B=4bVY+&=Hq&C_g)|z=0pX&vm2v*LjiJqDXtR`afy)ied|T=%dq) zu&W-VfpmHUcRuFf#A!y-ytkriUC-S!2#~4WN?g|dfkTm2kG^FVcm3XW z_}Oz>*`H!NiSrCqG&~Mp2mdbOT;mF0rtmL;ZgdkqJCN!{d-O>37X+I`Wc1J?oyl`@ zQwHUfMY#(N@%&x)NZwP}*skz1Hx5zAZ8Gj?sYXG>_6U6Wmjld|JbJn>KYDH~DjGGB zj9b~jY#cwp;0f=c-18v_y$|3D>z$U+)Gxa15Gip=@Kp0wcgAziJj8~4Xe5z-u{s$} z7B!9!+@_d!cc4Uy$Fg|FL9Fnd&WX9Q`tGH3;dxl|79r?!UgnPupUY=2YKET$wi&pOCxh$po%+VIrwEgBZHpQERKD z>K;6zC`XU3(4#EgfsjH`5Bgm4^`(5nJ$H!Mf38Xyy5LZ2D+uS<)huX9h}?5ol|x~@ zmr+s|n##Ys77{BUVmBX0Oat5!Lkpd^3GD7tPw7Rvr^6qP7dsE---)13PS z|I?zD!Md}V3MTT&g(W>yf%l4nJA>e`B3?PnmHIEFt4DF*GdCIa_M3HGT{tFi72#*w ziVO8N;0r^=j*}&~Yg_+Ty7q|Ukox0>7*#zKKky+x--256^1L&+iu-Ih(fXijaonph zaOgnK4k}A#;A{eNEeF-C;wh$h6U>0PW#`MYeK&Sz(j7jcB?Z(nJ{#u?1=Iqr9DRya z7RTuGolNs&`U|vpg6FRYii{IcU)a}Kf-LO2y-(^DO=$hpd4-wU=u;m3Z|zp6dCAP; zGO-w8X|xxT-S*2CMetir`s4;CJtMDHQyesF+R%z|8FKKQAUz)$VD(+%c%18WQNyll` zQE#NHXW>}Qdn%Fs;0hD@vE8(yr~5{OVgmLc_YMRL0-7OW9}YO$U1dU1k$O$~UzJ(K zmF$;zwH9!WTv7PGeN`l>^ughEDP%jw(pk`ySNTn#wX^6qn~=%D6zXPv)MTWK_zXqwL*Ys>gPak{g@V0W z|NZw`rT$%UeyX#EH5Gi+`GD(2hw)SMF&3}p<#;zexjBsY;erx-?_@CT0>nh-?gpl0 z5kNaBzhVCD_+#tb_!)gfsWng{(5=JAuwx@$dO(D?PN&WHu5qNh1s*759uWH13R`-F$CBn3U`(Oox-`4fIaxla1C(n0YJ)(H!W)SIWya*gj70A;3u&4!zo zQV9V)%Pmfte4mdj5wionFf%e3>d(g5Pli~J1)Cb_DOdA+Xndo7@yOXn#y(A45+fAU0=2)3is z9)vWkVYa=l<4WKig_Gt_Mtacf9hbV`p=-_E_Sy4)cMv(;@CD8(cJW;`Z@_;SkHcrG zo$@MW#6ZWdHd3i#&K@0LB5lJfYAb5hc_G0}T0-t@b(zKa_02$QJDYh71I&30_&Gh= z3jNymbsJ-^$uOGg+JU6EA0eQ@q3tnwF)FoM>8w;+=&kEUWaQZ{#|-Ul z&Hcetyy115?47vPMK%&1MWv2Lj&osu2j%C;)8pHzo6A9_fyNjhkY$|_M66cnT3gwk zdkRPW=~e4Etbk)(LWzwkj7A%4X+fPx@c=3@B3w5_1_9WVa`7rJV zTngG;I?9byw2a@f!o;?wyX+r%l-gypJ)ll3%y+rGoCz`P7ys}vw==R6yO+)1)!^$Uh%Bvg{Ile9*v&^NWIqzZO zyMZ$po1jX!s*hnL8T9v-2aWnhBrdqNv5pUTT_Kh+HH{Sq2_^{A5Tu^`>!HABEh5C- zzU{YX7@#TDg^9L(UNnV>jnYqaI!P0o!%a*R`+(><;mZ|gww)M|4$GSo+yTCD&GL78 zWy!v>{Ub=HPpi#do(qi%=kb_?RwnApA=KpeGZ+;Ok+sBw0-;u0he- z6ehAo@OUNLtfO+}#9O$D%LCu~n}6TnZjnf4iP?%OS#@{SF7jPa&{2&36gNy{(ZGqf z1A}ihaxpYjU0g4@ud)o*fvM3nz9MriKu(JKmt<_aMFNITX&}r~=G4Fs!DBG@POPI8 zh8WUp5rw(3ZSBO+~!T(M>Je zTgZ`!5b74R=hNiwuPtb#RUCp^#o^RN7H=#^BDETI5@lIW}@lI=apziT{_QSmO!^5#9z!~E) z8qHf*Qx6~uU$g@No_DFfmecoNKFW!2u6#}yO`uY+QjH2-TVgY%_+s)saDsaw8yM_{ za~B;Jd!4=$IM%++SexlpKh$N#=-E{cZ+Y*^sGYkqBzfxz%D&z^vKPD#;3PW=)%N?w z)`g%gO?A7Kf0|+5J^ZuW(4W9`Y@?F1%E(72TeIz`_n--Pmipa~{pt%^tFtpmWfk7L zwWaLyl?RHy7eaM}Jh%eZaTkzLjrp}C=5pA*UCNr+mrnyj`N6~jy5^P7J66+#NNF2x zWCNE6`6(Q{#vFuRrX>6oF*;Cecg~dz$rlo%Zc0M?kjA;GiRqO5c-o)bbW#Vv1wp#B4Y)QA^^P8{rBr1;^*$2UVZo_e2H)m=-c~f$ zcQtjzz)L=EZE>wH`@VxV8KUcFuA|Hh61G!Q{UE733YTb+vYT_bnkd$J`ri<7rp|t& z-p_@Dhn51te-x>NIhP8cIFS&Oo#H04&dVs`gOSSL3vY)he6-+kD3e_8;|zwwN)oqH z-GOVNs-I+Ly+1Q-GvdhFS}!!6e9uZ2sTvc4syK#RAZa|NJ_ZgFV9A@);*egCVmq{H ztcQJE0L^$qYKB<`C%-AFX*Qi0XKJ2rX zq))$Exp0g`Af5mgEeAFxZv;PWY1yvnai;tuH0vyDBpPWrg@^B5qnR1vJIXQ; za21J0u?bjZ9+$>Phuza6lkGJ%`K7HmrP>TuK8)g$>Mm6wZg-*y2iji*nc5Y{;N_l< zUaT{qG%b`4SC>AJF{qqL8Fg$|UnY0`32}0ZIz=`n>VDR=&__kw6Rx3p?F5pkhx~?H zKB}PRRcb!ki67{0Vkmis))Hwf)7@HnKQytT*+?(Lj^3x&|{-QsGnV3WDjXEqiXQZ?$eNj)9(~3>FhXjw@)sv-m*-mua<=Yui zJ>DxQQHu1PzpYwoQ8jue{5O`3t}-%es$3rS-;XUPs?!KvPGsQe5spYAk&j9#L*j8k z4rbYs4hjdB`~1tHf^JwdW`wC}+S8p3Dfcl?e){b>%m1owV4EC8bGX`FaF0Ux;4Q?b zE-D*ct?^O6I%IT%Y$;t5@RjNNTN`gOT6FvEyS*QL7We?uesUTqs;@D9f4IG^Aj6kA zy78x_=3>iiY&Vnf4yCIWJRJ;7|4RLoY7NuuEqFnl0T5H%z3ft1wrf~Pgz8h>NB26K zA@g{#&Ulo8*sD9pc2)fT2H@(Ooa9$2kxSj%;GOxkj9YI7TZZdqw1-){{1H3?}qzRv#~)p{S3PTZzcJ9fb#cW*2qjzsIsRUI`N=;Mn;_QY!D`#dv~Uor=tZFx%R( zHUQ>dS?uvqJ*U{1J$Orfq^7#t`nOMFUJ)nBT(=l4^iz#SMdBYO@7N#4A@y15joZMby)LT#hi47#NUFt`eolC#lPcB znO$S4-$nesntO2hPu|P<1|G26)i1{QSOwE1frkAf94{M&GnAc^p{u$;P-fufbUK@k zYi>ZN=QQYA0{(aKt8Rko=auHo=6<(&wvMk);zFNYk2vZk=d6F7%4Cs=Bl5NiE{k~) zl{o%^r({KdfTMwBd9~Qp+rW2*BY|r3tHG7AWKl=HKI@5og{gWYWG=<%>+~$fW3E2pf?uEGkF?gq1*-&2|2Po?Tj1}m(I?y^pqRat0B zbqWnb$XICi`Pmm!IsL268HIxv2L!eE**YqNa1t-Sc( zJBW17bxvQ-gjl}Z@_D%S=qbubK-Oj@QA9fO0>V@x->)gN)x7PTzu0GL3_xctq@`^! zlIfZQEi_NnJ4Tr>GDW6{N)Jy-&xGvR#L$Yvw#=Y#1XR`U_G_%fgd83}u})*V4Y~pL z6h_2EJ5qg&1OrOrQzqn-sZ1&F&yQP8wr%yzsyQ{I733F+d?3Y9LlNKZ- ze<%pm^e=rX47ZtB*GzTSgxHN&7aODyrwbCgi)spenh>MbQ zxn>v)`-)9<1NO10ye;s#^r_8vZ)G@oU2(46yv(OT;l1!S@F;T>8NYi$o)||2;E6v; zUSO|z+&wk5m;2_$G?%0KKINI2WePqp^QXPzk<3QbP;o)&8%s;wXFQqHj4_AITef)a zUO0K+4lH6z!HclBUYiDbP{lPI8XTAWu7<3&n033!+WCm~C|JHX>KG5~({)YB1-d(9 zA%XHif-l-2dCTuJAUf>RMiaM!Jfw=yA8itlb9ra;+oqb~yA^W9yb*zr15sxZ6;!)` z?D&*h$EBsl+}FoU&JdBuDUM6}AX{AbTqk!W~-TGy#yASCtAra9IU2uXhK z-kRgeh*CV5`PG!w|Gn07qd;P{YUr?t9+6;-E&u$k(ZFlj5At&kC31*}JbL<&9a)nn z)Sxs&^YB^8!bpyShKirz@yrJ7{shZrRodv&twcj^6F|GRyZnNt9ptyen$4+12!ol{y@zLuAx>_R! zC8$2qr9V^bC@1qz*soK3@=-lk_zOEtFHSpgSe+yqW>NWXhoOsWTpD8apFAr(Qf>k8-p~FG=KVcdhcRC zh7pZ2uv@MM8E_!sIgM7P1>ub&c+*1ORI`3HI%{uxsS)U9Iu>l=dR_kBhw$TRpzBPG z&+*n$nuo!f^y(;P)&A=6|B;NpDl5-V2^uJ`5BWV&CMlAn;&wF z?sVD+<4$yu)g(k)-XrBZp$R6Svca(V4gfyr)r5b4VxE-MI&V=)kVR-WZt3iy2j}WzfyF3CaZ~BKlO4pq}6=8DMs}T}<_jPVHFLOA&f^Nn(ynW_P*i2u|dK zvp)32WQw&F8W0hFyngmMy}(CKPaZ0XblJDsjRO}Y;Q42oVAC~HCLT7e7Ty7Im3S7> z>Lnp{WB4 zj~$o9JVLd}9Ii1c3r!O_<#^$RTR-8Q>}@;giSQWBBgqYmC|{GJw}j7r`J+U?nz%xp zj$$p;P?v@3ck%zRgU_z7%VD!e4%Y5S6=>iWS!DqKJIyy72Y$$HyV-hzOUdqX63iK6tb%y3-kAQLpLP=)ZNnk_?O!{X`ST$-`EHv4pX|(Y$fcf4~-B$nGOPkEOeAKgdbQsCr36~GIV+k ziVMQBRvIHW|1oL{Z2<}uZ-sHM_fw_rtQ(+%_f8b{^NXZ!eCM1 zUSxN-X8SMZ(d2&B|2fNp=cU^}Wr3HR6U?2WItY#MjU2EXie&Ycs7c-Z9<2n@ z2Z(e$r+s%&+5dmN(SD=<^>t`4?k?$rcjcC9jdxvd1Sd*{?ra`GeWbU5{vva5`yv;^ zDj-c>cLUe^|A1uo)B20F=;)Ygo_w)etn#9%*;(3ddb#oIs}b<4WTq$evd%%Ub=;i4 z)C7E3IG;OkC$5vm*30C3t#H=WE0M$gg8&i7DD#^Rw3QdwwqCYNytRk6=>&`e(JTI} zk1L^XXXatV1(N8lTzEc9TSO^8C)Tk+8uvu{)9fY^!_X$6#Ha<*-<{gxq6d*ur2%-3VJ zFmOpcVNaSYr6J+W1@>IPqJ6BrOJB~VykWgu0-MdA8otEjjI}(rP~ehSmOF@XAgBoT zP#G6nm+%*feyJDlwlBN1Jy>)VbDg>jS5mJz{p|zks2#DVjp+o8~SL+f(Rr+Tp6ee~g% zRYPf&#Ec-y2_-F-u`;##fv}6pQ&koVTY6~~&1V{0k`P*zDaq*syQUCTo5v&wW^o{0 zPRoNC9F@+zTy%#qXxTVd4McLsB&SEQUx}3CJr0x1>h~8B4NN9e1x7jK{i;(Gwal*eyO&X+YL52^ z0mi1N*OQ#V>55v;XWm#uCaE=Mu%c$RN;r_mk33TYfeXg0 zWz2CS)|29lpqQ$m1@C@YSG24gm!mgy4RzATQ?)i0NO#d|NuLI76XZdNaFzAD@w7op zE2O)~_3!xjWh-qlE*{RKND)lWk1VN4(BAp&yYFE!%Z0IDw={OQ_i#sW@N>09#TMcm zXDMIF*p`-j({-Q2wl34jQNx-DEgJ%BsuwkPXJI`{oLCgz_Y$g-=&4VEp1pVS2)7oJ-Op0q0ay+dgut_WK5#58jT z*QRg+I5yyc?Rg(gQxQ_Ll(zw~VhJC*E=rIADW$Z%dLuAP=Tm9E34Lu7+)nqeULxFq zt!ns;7n%+kYz1v zMqh$Ky?RbU%(sr4d`ZZjCT~ZA+=sAQ_vEbR%<-E?-3RB z4=W!6<{DI#^I_V{PoBakq>BmChZ>3KO)Bt|w5?k3bBSIC+~s(oH+_SR`Y@A|KS31& zywI|wpU2$aX&;Tat;OT#mKt|@W#I#-1ErcU5%Smzw$Alq7>n5Tbm^*@`0AEEIDxyX z#&$^kX+b53BySK|(~hQ}@fT?8Gy1ud#Fk1~H#HqDC7jN?A{NlDuBT~(aDX=IozsX0 zXY405gRSPWpg(=^cMSDyNCQNZb{y2pwIO$7n|Up-oX=XHe}^vyCimerXL&N`#vdV& z{nJYQwQcyX4`fZ4N;eix_&oMY-kYuw%5A#)IVE||B$H!+e}*)oImS%N`2+#4dpF~L zaZU;KmtYx%z0n`k>xB&oXPK)CXeq0kWUbbd{wZjFERYmWk)p`;B=mFI(X;#TejNU3 zHZ435Hm<{u>42JD4%Gg-oa<1=_jKIn|;Jw$Fk1@eMRrk{W_M_Nh zD!w_AO-lfzER(z`4(U)%7#ybP2Q(>)_G=Di##t`-w?z^Io?wJ6D$3=G;pZ*`Tpc~X zA{A!SO$QZrvN-xvo|(+o;&Wka63B1wfO}ytOut3qi`!k5&!UJ|2cc8X?Iwl zUqgT~7NJ2(auy%}w_Ot4iiFikyMGbBXp-r~3yRPvBVet zcey4zg*8n>S6n@3fAS(C%R_A3C7w*_#C5ynqkCEfGrwVCop=Q*-RgehoO)#ULci~p ziBzfO5R>eQ53s@O420`M)dav z@0cyc$E}ywqV<*>YDtRev~4#0xfd)A4ndfo0PHFg(?bXAP#85Eb}Pq$%4OM5`v)O`rf)T5#A{Qp{Rz~#xf|Z3ORW@E z4b4zXE^q{z2RYP_NY>!^M6{OiA)-rq1ZtP$@TTfo-)(}QN$zqur$`GgRSB4sKu3Oa{{sX)8SHoWZHkV6jV%y-WqQOhZ4xtr!QSbGf^-f3VvD`Xmk&Xa$% zJmH?iDSqt|==;7lN90pmAoLf^(&hA?$6X1QumY8$ro3+rhd_ayLzrvVVZgstbn2hU zl&~i5IH*Jv7sG(QD<5)gL$D^!IjFXBa2%|6z!~^g)RHrhpbZjf*r<1abT@3Xh%G z`TkAY#33}a126f*`GE15GT4IEa1h6L$CtI^hI|t=M8pWS(oEIrQT9PSc#Fe|--WzGE%kVj@}_I%el9;$ih*~BgpnLnyYhVT1JDbk--^F50)sK|e*CTH zd43odA@mv3;4RNAnGV;7CU%(wP(lvt$3JT~?43McWS=;2oz;m}} z6;S;lL!JNMFR|6QtrdS6vLso5^ASt*XAE_Skh!i={+r!0$(%^C1Q&M$#`a#Qd`f5 z_@wrIxbhC0(($YD8wr(i?xT80o5%Taq`=2S<-YaW*IY;V?$j1>_+-36FO6mg_Hx-a zol|*=be~#E=L&7utEn=Q=X^rP4vAtcG*ewuPBM`IyIBah$+CdzwU`XGQ%^bs>^2p5 z>IF>=Whh)ZULXT8d6_Y&*Xp1;)DPpV87#Bw&0kx}+1vnei<)Krmj|I(5V=}_#4XqD z#WXu!=~BK3x9gD#kh7-xykFHfK179PRkW_{50r~8${==lvbB!lc3R^{iim$R+jICL>Ah8Um-@muOx1VHI z;;q#}7)#{(8uG?^k|%nAg(==GO&dj7w?n=C>&!~A4B6iv-;8(N>}xp8VZ@v4jIm5> zgr-G(t7OXae)-IxRKixK@}9waK>lO6?Tq;4RuftJ>n}oRJllbFC@~Y7rpccv*(Xo9GMLpGg~S_@{|aC@_bG+ zLD!2i5bNyw9(jx$V{J!^!Ce^ZnB%a))tsXnt6QYhp}DQZf7|e$$41 z2l#1cEfYyVC#37aZqQZq(ZGl|_l(u(w`MSljsxyUwrjfTIw8AsHvbQOxje7ChLd(_)Ub*@=dBo{j=$Y9rxc^eST~{PHUfQ`R8VR$ z>rm^by&w=0uY41Ia&AxTd0<we>A>3wNK8&@dbR!LRxDbhvH>O~)1a zieB4Pm$JDbuPi_4+Vj>E4`+9Gm$RC)#w=H-q>)zk{KmkWpM9$_Jq^}>-&#gx_~ZtI zgoe$~l>3J2;7z+E-I^+R8=X9NI7+!;W2>lH{OiiZpPwsXp-T~?F%NddW>>YFkbzjk zSiCt%Nz)89i!j7Or&1tisF#^Jk_4leQ>P~c^}kJ)F$Wj-&?G00r_ zAh)-L?Y`R_M(zgMC1eqfvd{^6nKjgl6Vl6pG2FAaZ6IAsQ&cx?;_k+Yu||Xv#$%$f zpL@#cxk6;J{Xmhf84x>39-&CRq@5b$N6v7tHPEmz^X0>ee%K$%;!T7Ps>vy-^DMtj z`T1a;yi6DzNi4OLnJr)Ie>HlX72|c?ZM$i68EEc(#d3_G%uZL0L)MDUu67MMn?#Vb zo}(YqF%&AtqSyBjk@Dt>HdF_^8pGD~OCTn(`9268gfvQ&r_{#;&34|>78f&euMiD8 zSjBjrt1}r&`mtp^!ZX=ymMs;see4sT5(Zu zF@ob=D>077f0m!x>(laSb$q92bDAiva>fK~QD7n_v!5Mve2O--K06I0>jiKKyX-M{ zQ~wfUN}Z?F$}R}`K^+9h047;{adnqw?8fsph%FAhHyo6CDpSs;mir3S_CZI~TbWZc zepD3$&*g(OQQjGvH?x0r7ezB0oU(9;$)1??cUw4@CsG)$AMvXRnixnLwIduC>xJyq zM#C2>WAuW!ilz@Oyn?dKz}Of^tCBF#(8WzYbs*GxCYTJ%Bw(W=d50cAobkFGMsvEg zOoiGoEjYSl2`X;-IK;os8x&^&O($~E+bQ+-Tj8OLiw?JdW)Sf%SznK0UXoYZs3IdO zpmf(TU|5{DzlS$S*%v}6O_>?0<;M{5%YFvUxzLivOno~!sRSewfO9ej3kNDqV9+4JVQ?pChT!g!V1v86GiY#T(BKdr_rCk_ ze&4A+)xCSKEvHWH)m>d3t*xnqi$#HjfPjFjqWt~?0s^A*e_jma*O|x7F~Dnw=}5ds1Yg35bYU7u|D&*+9Cu^NRr5tY1_`D&oP< zd+}Z;WBNQK@0$r1gm@nL?89yZ3{?|RYHhfCCWN?*p?fTEcJjqMf#+bDV)M0{X@UOK zKPuOHA9!>^K>_s&^r*0Ad(}6mZ#EwAgBhh!Y`LRwz4EKEX@QLphGZLCZ9eNbF+-<7 z3d)LEdBuHTX&>=-{Cxd%0Q49OX0~}8@Ql8WM*cN)Z4jn6ldBQOkdZg_2c+hLJfinG zmt%L8wR!Kfv)6DSV!2daxw3NasuLDy?&WBGIPv zsonADou{D1X>Z`t4!9MOA<-AnD%y|HUPq+Mb#02IY>BEvr3Ba>D{bpMs+K#qbqDcJ-BBnbVOrQak0PMN?^EQ!>*}5#>3A82pb7LtU*t~7E zDw>Sb`0iK{V}CA{V$l}qa-8S)tIt?ZB;6#69WGx=K=Xd>JNmJ+q;0J!+^(|eo^pJq%2Uh@;;;Z)+x2{{$Fi4pWL_7HHHtAtHtya&e$xZwX)yaloBliqs zXZ^6K{IVspm4%-m6wvn*Vjj>BRM12>g-ky{yt!8V3f=`~_z4Y=;qcC*M$SjBOF77i z)QXqH&7j8@(|c7K)l8V-R=3b);qlhhQ0SiN4VK@E^uX2jehj+d;QRZ4L za5dIuS6uw{iSk@4ZE+N<+Bk^E(#&3bK?U|5`X${cca_)_mJ7FAd3LQUN!qc3YO-}! z>mwhXpEhA!zv@HTk%mV085Y) z#ud$0Q7QA@*jJNvDgTwjk@0kD^x6>&yWdyG%P*`DhKNUXr(>G!nMd=+pfLS}lJ8|I zsa}*+;Gft83T2?~{CbDsUv1*a8BRx&Ffr3RvNu!N5R04Vsoaxy};=bWwHAg3c2C@G8wdz3T`86QO%v)wv{svzDZlpfZn-l)sF( zcl~A&!k6;pW~4J5BG)9xCK%q6em|Gm=xPqC? zv+@4*sVV9ZNrXE?{GgqYEed680oixlb_u zp*6|KD*^rjch)!gnYk<_$n_Jr5;B_d5Qr3dHisv zm^FbLWLICk7v5{~%vcEP$Hr&xj)r3hsQ^d3IfGAW3ouU5!n_-B34KiizHEG|%^m4? zIydT@%O%`=rxUmrpkjSn^3&}0>X#oz;_^m(4IaewfC5h^h6zLcwmqfeO@yiJ@A6-S zH`PMdzq9!=npNp6qV$T_%%qe9yxWvIyqL~be*p1?GrwBqqpuy59&P!oZ+#4~Z~jfu zQ3I~tUL++|-(oWrNUDyQYc~Jbvk&qh_l6If@S31t5h(D`dd|2kANy38&2pWM_aWz3 zGRs2(F?+#B&?Jug>Ynrgqo21FlW+eWD6D;0O6)C0zQX1(5^m=>`kZXEbS_X*-RC5c zD-?=J@LpRA$wV?7&mbr6+X6r7zU)a#J6F{ju_?oGEWW#IXZxbWUBCMG?O0zVx8HF~ zsvX1<-CdL61*LbDfjz54iyZ=rvM~(AEkBzfrH?r*1d$Q#xUh#J^<@dbrJ% zc3@l3U@}{rgjV%fxY~X-t7!J=eMqk zf5B)3WH&XjsLf<}WQYr-RE0a{X!Y)9L=%Ii$_o1U3ej{H7=)J2CX!@Kfmq!&W(^br zi|d-*TQ^^Xw4jOXYYbyT%HAJjIov#7c2%@8;(ls1;1= zN~?mD3{tqx)|l9Mdea*MVQ3-0J|gj3GhH*4awPjh)pLlxWH&|e{o`|4hrcuW^VaEL z0t4{JUu(?3cY4bx22%TTGMf%!Lj&xRmVA|7ds=%@E7T?r@7Dy}P;5WBv%xqz?5@g| z5(ipgE~R0`w;EdH%@<=~yF|U4>;3U1B}2ZW+>UTf#NwsEu9vGpO!CqMhq@TLmTJ`E zo5vp&vsZWXVETg1-*sILg=&ggS)CouNA&ZIUmtBZxIXP;OM%ah*MS-dW;s@{+{c>C zSQ#~u!rZB@L)2KYUpFC{>m;i<5zflO6%6i6>+x)ovKsA+ccaMxD*na9;?QI+9`fWB zIE?ONuW^MRsCh0Dp!Ork(d8oRn-(Zz<$|u6`(Wmysr#dWt9ji&VDN(J=h%?hg&3$A zk7a}39ih0%Sq5FVy*oQ6`=>a9gH5lUXt8hyBdc8PEv>G&^~tl@#^@Y<-@nJCVy;ZJ z{@!!))0fdx;+TBEb{dU ztR(KhV0Fye>VsiXXaM$Z@>uk-Na%1udE4EpOculo}n0 zV|q6C0S{S=$OQ~L!*;NNQ0}Q%_ZEzOMd9?wPP$5mU1jvrZb25Ti2%vhV5p;tT8o~i@=w8(k=%rY?MH#`J7L5~G}&4$WK6RdJLab_ z!uAhSk#9(QYBu7Y)Zj5BSua7y!p#?o1kffhA2Ok=kZIB&h*b5i&AJhv*N%vvfCP#a zDC&DI&&fe>x1je;#|gYiTGaZiGZ||koD*T^DRA0l7|>e-ljyYwSDCO zs)~i^fPFaeMR9r@Z!UHP===5eYKQ*hlw#y7Gb-YrFZYw1){OM4LNJQx8A zjr{qd!SISsCK~q1=V!HOx{_xKEoy7EFc5UB$y!c6&Umq3i0o`W1&&3U@_oqgH2!2- zG{OXZVmf>=cwYL~%7iW0jqy^^zMqkPz=WX$_)ZG=-yj2!9!`;okz#{Jau40n>?JoW zLllDeG7*KyO7(Fu)-G*sy&7#Lb)8KC>(@9s-jjR*C<5sCd4}hv4kZKM-UoEV z@k@-OI5cP@lgcKHpPOvV=p!{ZM`>UDJY{Uq4pRlCu_6_=+paTs(c||6*r-hZzCsCm zULtbGyP5EFCCC;h;yZT$#5I(f_)P7~AvnSzS>rTJU6~o@8MpDBZ+^tP6oYJ^hSU!R z@OCRKc~i(^(7Wkeq`Y*oXZ6b(P)T%N&;)O?87w5W?)PscoP!WoNVkh{X0O@4E4bHneMq z3g0sFr}A-DZMW>!6Tp}TYwz|0Xls?m?h@s2$78c^X?V=6d-9+e9P&01mlZ80zg%QG zKcoBi84uQ0opg{UaA~0Bqb<6yq<})?fO7vDX}?|2#c0#=mzmJM?C=OOZPxYn0x`N$ z+BAa0-e0@XzVOY{_~?u7G3|EEQZVo{To;~8)tTh^sCU|-b_OC5N4r*XqlRX$Xo~FL zvdq&w6!iun=#+CwYuW`nM%KK2E2sHTiwIG>B&JSp4qs0_XBYj_YhiouRwkQI+=}_# z2F)1vp(rL_k43)Jf5FKJIEP*>l5RASiQ!K8u8Kn%S&-$2X_KE==>6j;84sO#y#i;t zmwZK&MS#xyFC9E{z9ij8lTJ&_J}cfTdji+YUfKP6|3<=ycfTXhd3q0AZSTp;WREfC zdpJyWrbckiJO1f3_$dc&72w~q`_f@xCDgRp=b?$J#USRSkT?BUvA%p>^!YdH%N*LR z>$WWR&)RHC4i^}q`$vj_Kf5H9BkU<@ZP;8Cm%yfxIZ4V`Fk0hI5?}C;U!2r3YCO2m z%eLfg@>xLCA7%u)(B;kk-0vDKrhRz7eoDqb^eN5yp15Q~QhrEp#qIlQj z*xJ_#10YfF92Weg&;9o8Y}1r%(D)!9ihYzj{rF8+u#OSm^vkln72M_(rtQV^TwecY zcTV*h4uPB~mSJ+(yA6)OA?uM86VT+bRFCXjB>VU{{_5iP>wVRePvx6@nF9q1EWrDSbI~q)3E(+_vu9Y=|{kCgmer{s}q_tKZ8pks2_?hC~^q};Wa*v z;G}JsvOvKB~3hnTW(n0A;{v+oE_^a}r_D8$WT**$T~VJ06pWPnE& zr?@wj0}~ceEgxpV+8f@Ihn7_{p=zgWJwAM}!ezHJ<|zxs7C<2}fhVsimv^&CM_^dp zv*Y!oG=v+}Bd-vSD7~gIE$XY6SF5|x#fw7naPd{}HMWMf?wBKHx15E;ppz6##xlZ& zo_|+feS}m-Y{5P)r@O(Zc_|5;$C=+d4g63mT91s{xH62BmGk^wYOdo1TkY+8{}Imu zU4yfWp-ovx1nd`|IHgyfLEDe$aczuC87a%E@==)rYami9JX@F)Thb(KQ_l9vy97a) z&?`?M#x8<=C~7zti*>cA5L%c-!7!}nUgG@ z{aFqvHK+7WBL7x-r!{tqw^Bs*k&S~+?Dbzx!h5a5bzt4usKo$7zP`q(A@HTn&}qf4 z%kAMb(G!0omP!le2E1LTa5==6(w%nkZPxb6@3~a!hKH}>0sD8)+V4CFlfLqwSAU@t z=Q)xS>Q@UMpH8O^W@>jp^xkpD@bW9VSt?`8TAwX)wN|f_eOH zN9Axs0ks)`tPp)FE%W!~uE5P!On&|Zj`{A$y0j8=m<^iOJqR3(sznFv{R`v57ObO{ zQH~k!=BhmfS{GwYY5278{AW32Qn#~6n=)CX72Y;1X&RBk1&!cTT^?y&co5p;qeU%r)5wV=v@*czw+4C@7EC^;nJG<>4$Rx6lH|(_{CvE~Dwsq>I!}^Jvd5%MM~L!!uSlU4Gi4Y> z)>-kh4ltB~PnK+mhMsd&Bk4Vp@|Q^IUiOJGjVSQzyta6+NWJQnJE8lI+%Srv^BF^} z0JAXd_Zzkd^`yDQo9%XxfaI9}s0K?cHtnlt!9XQCTFF=OX!m5vl@Iq{PE+<@fG}-W zw?slAlKGJx#e59=4YSmUS`;|@FPShcCzhMV@A6(EjWd(?JH$3}7kyBeA=NaMM}HuM znO1UGBkDwBmNF+38J&;TmdWJchJ}al&Ij}J_wQ5(Ox*`kYuJPM4^|WYO^d8%N=(6< zO?_{xgT+{ zY@e8uF+G`%+E^{a(S8p(ktb1|LEq|z6)?{2+~K>XTB-Ou49sy$u0p6i2zAL7Z&9)= zUUZIpUa^C3$cd1DMM6=ED2O|Ml|x1(^ne)Es`KEi9!+4xgnq3S`g2WyxW%@LY#zNVl<|7RZDnyxZB z!s9|+%Aq9ZJ1uiPr(%p4L}M^GIBrp5A&;O4Ju6t@>1s(^uf5vTi_*`lxTXvxCZzpz zm&r!lqVEJ~gEYz<=A+S}1#w--{>93}DH&qLGn?3g*(&$Xe;5S~UchY+6C#b-uFKF| zJh6v@)89apmN3MGB!iPubjXr1{Z|dU z(n>wC3&_Y?F-_FN+Qmw}B4miO=s;FmyG*->?Eb@`UEPKqvdKfk3bOy&@q+QQx<}N8 zy?UmdWQmaRg=vjrvlBljrJf%Q@V@PlVT`fb+Gg4v-?yeK3ULD!eOzsHdP6r1E3fdpM=P!{B z_>&Tr;kuh!fR#s<<3T8v^FhM$Kdwd(KB5eqgTT|Mnm)Y(hpj-n-;~U{fB~LKjpbGR z0Vl96#oz4F$ac^wW|}oV(|s%y#5A`h>kJ|=>+Npr z(>WT1{u6G+)F=rlx+z+qpY6*i<`9;BlQq4lC~c?61|*Wt;E5-&=Q4tG6wzE&wqg_pZ^P-(n!LgDSMXZeJa$bX=smY zAUlvvx!C&gHc&>m9#~3r9QAA!a zjku~ieY0X$P{ntLNNz52+3}oLy}|8H@}1==E|?~0aBg_Oce>g6xK_F8c5nn^n5Fh^ zgW!+v?vBLaVR`VqCG%MG1Su;oAJWc-+`WsiIg^>V#eoEis?gi~a-S}ZMH}%KCi&^z zbL8Z8f@H)_s|fnwmlt5TYWkkPp(y^S{~Qqlt`OTs*LuSM9Us1uEALY<9`%YTx@+c> z-aPghHES~^|AFj^*6<-K4pCni+q3~Dh0Pzw60<)Q>#tsyO^GyYN@gj|!1>&p+p!U` zS9LOdwA_M7<u~3D_NYt)qM46 z92RD3B;0v;itm@Ew}IXM{g{1b+X!V;V_RymPT7&SL+z$mwUreaI?rtSTTli_M8=(R z$sSCB46zcZC zw6EKNc+K!kP}9O}t}V)zFwibKz4AG5#hsoH$2@yIJ5ry0b1#0=Jag1U%vz4lm`gzF zr$2$Tw#K`~T35H7w~4H+Uv`tv;R0S}0&cwl*^&FV+kfk0n>MclJw}+8)PhPnRyO%v z_Pa8Ltt=J7sS9V`8SNvu+q)(0%!6I@zWRb6xV6tzY}J)@wJON3p{ECN2=0E7jKl%# zmFMaCma)my?YXeY<^o4Q^Z--MVont}%fXkyIeYIjE zcvZI&mfqf-g6k)AAko>{d^(-#*?P|sN1KK-dz5)O&V6y3?A;{`DIRp!L8WP55|3)| z)if+(TN>lLq+V)ewaWNsZ*=-R0+pGik<-VOX%fIqQ`OQ-{POIi@R%=IQnA$~dfKV< zi^qsr>kf0pcS(BcqqPx?vY`S#7YazzAT#{wE~zYPz|@7~HiX*ilBz^s0mC1Y(9 zQBj6>{!+-1?UvgCd?28dH$mXwhcFE}fOZ}j%Tsu2VQMQ9?NhYhK~XSAYN~$vB@t-H zgsY`^w@~Rh2pt{Myo^z@AXF`+a^g{o@0a|!fqDHOIwr0^=r&@L97OUVxO z>Y@uuAfQ4@{xVj7`q(rtimws^1sWQwn+=Q}swWJwmd3H-;SGCh+g0Q?CkB*3a?Hu>b z@Yk?>6s^6s8~rGpH4%E6?}4T3B6iaRTeLE@E2->P;PShbU&WDENh+B+B3&_O+B*vc z+hRTFXnB}tm0RB5PQL67`9X>3EeaaD31os0(a$l2L}GuTTdE);H^sS9smdTL#DN9o z)Ch^Uy)e@&ilSR{d|J!8f#LJAKJ>*ya7;y+jkHBbyam>Sno`~&#`!F3&OkQjpX^AJ z&OD<6oIVPCt3ZwIK!0I`&6a+`r~-#u+rOcSOIy+>v)1=0^fW)eIhZCe{FKWi-druD z$MD<+oI4%M9dxeo_4y8ur!ilE8qTc0urX?dKL%t8ye&MR5&zd5(Q6t@PPVu(Pv#7t z4;UmzyoV9zcV1r9{0psJu-rUv8+4wX;-a-OwiCsF*OJgr=3^|*wpiQQ$5y&{|67UuT<>}bX+K{Fr8GK|Kx%OkYy%!&@X(I&d+^xU+cXMCC^S+wNYEz3lAX>RTf#r{c;4wcZ#F4} zr|~UhuQ7UvoFo5yw78*?^f~L%ClKzVQ5U1m-r;YO*pX-vO097D5L<(aypHeW95axS;nVNB$}lFqQP&w+2wjv{(O3h!+_>Dr(3-y6Vy zj82Te?lvpiZAE~R^hq--?LQ&*3U3vM)GHpT9aQ`}^_p7Jk;7$YHgplsH)qZW($kL& zJ#Xbi#+EH6U5r||BEfE|a)sHE7oINVY#HSzl%u$e7B_|5Ic?|2VN1oPy6fYCE5Byg zSmuF#I5_KlM?VC2eqQm2K|tjZj?{DcZjm#)9scukY!uFl!6Shz3Cwm%;d(*>#^kkI zflkI09gtLD@)ghOqkqMWt<8tx&)=)MxD)n`VhMP{7PPkwaS|>24tNAG3Ti&k10kOG zBKY^ZGw`2wT6_D0I&lAXyzihok|%vtAG z$j-@197;&5|%l&7Dn|6X)$eVtysSYLw58YEa> zAV6$)j2uFw25J%*ANdQhYbcp;50GDCnYJ^7vDD7|(H_XR72;>@%D7~JfhY|5lkzyO z(ViLv05yW1J>-I08>e+#_{p(aIFYGXP`3A(#tD&NO2#!Dz8_FF5Rm52k&nyPXOj@| zp%j$DA@P8^Om8<0LwDyk-Xdg$t?HU`A0c=Qz-Mc*s0Gs>6fE4K?KEZs=CrFghO;e7 zpM|~#XNY<|hfV}om~SybG&uc@1J@R`nLq9;y)pm(a=Fr6y*?{jL!_xo~qUBuj(Fde!A3YXk^H3g{TuT>GQ2z0g&?4h4dJM z>|?%d-lKWw7ry2~r4R+~R>cU`FIrj%U?R|WTj)dy?%Eg<&&TnRnN5425eBHU$a3Of zRL@0NXS?{;9s(hPBuYiW9)#F^WX98s3t@$hfe`>1+p`T_WJK!XQlNE%88GkWhlG#J zU|JC`0n%Y(|Ie5dYk06LL`z0pO9nQJPV`Lw;VHlaac}4 zh!Qm0s--XyS{d>bluq; z?e|c0U1=YS{&4gfoUgqEa^2e7cIGmsm2qn}s{C`zTOkCbR4sf$R@a0`ZQ*VTZ$Aa! zCIp*D62py3G{VqxIMwbX*HK z{*LZvtbVL>HWq!C&REfhk#~qbGPt4WR4eOeqpq8$j3|Hcp-q=UojZ=>LVL%*x$`#i zZ?n+xCESgBi5)fr(QF{(je1ju#UgVM3I?E}pjNyO{ z{*a)LF9k&1^47=ImA)vXlsMnr4;W6{km&;jFV0P+wGYZcbR{JZp*0(wwd&~6UJFim z)-9d^o0FmFulqai;wr)S7-YM=Rk~vD9FxEgX9muj-ZEFNGuJ@dQQ=$h4SXuHA6+>u zA29l5Fv?b|(^yk9gw1pjsAdqDXKTzqOIe&4)YG8$$(uVpsM*yZXGSS| z-|{D&j4FQ>>0Gypip$S7Ce6V)hA?bt@XJD#GO!)^ngH}Qfho9~oJ<7ftfskh&A6y! zaX<0p5u2^tPOL9V2ytm+?eYQi75c#aUQ-_{WDpaP@NcXmLUctbJGSt-dkso^`S6;( z7ru`L6ppF?P;9+>G0?5l+h&M7450 zA=kWNSZDLeyQUiW#ZInemhks74&W-C3>0Y<)-N|Z8@N0Jzf-AW@zrL648h&bWt>%m zc2upJ3$UfI2IVkh=;RmUu0NGa={s$D0Y5T7N<5y}Oa-GqNY#;f7rXXUD&JgX1GIfX zCyPg?1s_%F1FUa{J~2v{1N_bR_I1vK!LuiJ{4MTwTzB}$w0Uug-@;?-m+u&c_Wp=@ zml&t6viNjs9O=2?>GP3Fpws5@$ggtX+GwE;4wC{U}z;t^~B- z=cT3LrhLq&@B41__-UZkG#ef3p|V2|m#gTFPo792KcqoVRQHotDqvb*jdX447iQ&C zxiFSiD`dtPf~omFK^D6xB{{ZZ>|;wd|CZ5HnV~ z6+)H0;GsW!mXpy1)l&{ARK#%D#9BM>-hk;hEq6N0Fv4IYqbY|HY3NNMv*t-GGw#VgJ~ zNA9P^z^7`pp~_8iO5K#Ono-;J?Llq@Ak~Oi+R4d;_zx^*_8_kSo@zu)fpQ4-xcxCH9%1P2 zv?wO^y-*Os_Y#9m!d|8Kw4fHuHz0($#}?b4?f!y6yueTt+AZ!LTof>w@V5R}>7~G$ kr`6i$|L-Qf_z%5vZMJr%5_a)=gBC$WLGyi$oJHvW0h!0-ssI20 literal 10686 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%0Dy!50Qvv` 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 diff --git a/public/images/pokemon/variant/6706_3.json b/public/images/pokemon/variant/6706_3.json deleted file mode 100644 index 615ca90e004..00000000000 --- a/public/images/pokemon/variant/6706_3.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "textures": [ - { - "image": "6706_3.png", - "format": "RGBA8888", - "size": { - "w": 82, - "h": 82 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 82, - "h": 72 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 82, - "h": 72 - }, - "frame": { - "x": 0, - "y": 0, - "w": 82, - "h": 72 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:02eb46aa66ac70df612e129b7801a85c:a77cca14b23f4f3aece64d1a82449a0f:d60cc2e5ae2bd18de8ee3ab0649593ee$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/6706_3.png b/public/images/pokemon/variant/6706_3.png deleted file mode 100644 index 001cab641f1c1c4009d6264baa14114a1a1b140c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5177 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%0Dy!50Qvv` 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%0Dy!50Qvv` z0D$NK0Cg|`0P0`>06Lfe02gqax=}m;000SaNLh0L01FZT01FZU(%pXi0000RbVXQn zQ*UN;cVTj607GSLb9r+hQ*?D?X>TA@Z*OeDr{R1600*W?L_t(|obB9iXjOF_$MN?K zD=OR8kcC>aS;8JjB}ud_gUaHL{!tVo3R^vppmISyh*C<89u#OM#2%E11YYTsvf;vLAetUqL~Fcd^Ycz6(bPl%hM_?`I5oZNc7y_2;Z+k(QY;oY zaBR2ljr7dxa)Qvn3|IVNg6-RPyVD!qe8#ukc@Hk*?+*@y0!HH10-Qt#)Zrf8|C(q0 z$Ij`byE_j++qFwPXzF&ug;Btd7zG%Lmo=PvNfMQyv$p`MaDsMx`h@2V_RQ;Y1P|br zcb;bFiWdT3bGR^StisrMP0bC?t?kbRzL0I=fCWW|EEWrFSiTaNfz#2z40n9`M6Rj1 z!2tphg8_#2VCY#1Jx0TbahH8(g*oA0HiWeJm$6V@NODut$|rDcf` zFAf}JjCX7Mb1q!azmN>9RGRY5yXc~Mv44)l1Q-_&{D86Xr0V3C3ImKAK{G*xEwjnk z^q>or1P;7-iB1?Q9{2&1rc|1;g0WpskKiSRgJ?Vx9E9Lyk+>j1>n}fk3V`pL&NXhg z{P-!7z?r%)K~=Y~q0x7toO2w9rsf9crLJAP|KY2tjzMaYRFY{M9Y+5HCxKI2Q)-3= zMp(0PwP)V?wOi@#&NDPH;^Ij^(1Qo?(NM4Tn+;0RT~Ob4Y zNzGSpKlL*?<=6gM7TvLMJz>lX!nxYaFZp&0(E>pa$;Ur_z zgT8s{u`diS3=X34)MMcKwOaw)GjCnsMI{I?3QiIQc;v*N0RHQ|tnkuamZUjWn(%Dl zB%gfL&0Y6x_d$kslBTv0?*l2PbPTPf`fEbcWC@506&hu=;AeA_zD242737U#s2>fo-N#=@uU2F z`OWV1$vrFG-S+DCS6MaCL&u`~dH90X@LP}nH@rQiD~`h(t^@E-+ozu80;lJ! z$Fqe4*qop1+HgoQwUr4TR30!%)xjCOw|hV4_UjkA>wW(15uV-sSN!pLYD)@gAI}yJ%zZvN z?#b>en3>=~ZST5c(}SKtJYflHlByL5#D;?m@t`t*W7C7|T=4>}?F%B;4eKtecuC-( z&hX;EL3C?=bAGOq6b`hzXSEDiDowFr`ATazm}%XcZW(5k%<&+5z*1?7_a5nry#W!lI4{$PzIY9@IYI(7*_HJaD6LzUi(Qq(clG&|S}fGBm?x zctzAxK4D3O2el0-t@gwH+kj}qpz(K634IPD3J~lNFFidoT;lgRcH{rj;Hmd0HuZJ7 z-4}p`4UNWKI__XdN$3+maR9-58FK0AL9Up8o;&@`A9>F*Fry{~G~vOS4l=;aZyob& zlLQVj!jqT~gYd#oAs(KbBviPKKW*~dd(b<`Nt&N}A|Kp~3n&rD#pmzO3@_+R3Nt5( z%N}~lomQ(3ye+7-ttg4rBcn+H0Sdc1U8G-+{msFXD}Z2BiHf(UbR~!Tw?#HT1yHX# ziFA-FiU-L7b-a$wUB>x>D!JuUqoG^jVK55k!a&sl&m{#jg4|XBc25;h+q7YE(!F#|(l4 z^Oq^;h=<0H27XyXxl&dehVPBA-LfGI{y6T_?@q#KS z46qt-P-Q&uqO`Uz2t4Qq;Z+L`Y7h_3+=B?)b%zV1y!Y>}s=+}G;K7*_i9P~KtwJ5I zniVIh2|S5@Hdb*=6`J(kLsqFNys((?!2U_^a-?qXAb9tN>QrG};Ymyv+q0EdXPL!I oky*SHnZ-+yS-cdP#Y>U@0GLZqmFWb_C;$Ke07*qoM6N<$g0>MU1ONa4 diff --git a/public/images/pokemon/variant/back/6706_3.json b/public/images/pokemon/variant/back/6706_3.json deleted file mode 100644 index 9a97ce27059..00000000000 --- a/public/images/pokemon/variant/back/6706_3.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "textures": [ - { - "image": "6706_3.png", - "format": "RGBA8888", - "size": { - "w": 79, - "h": 79 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 79, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 79, - "h": 73 - }, - "frame": { - "x": 0, - "y": 0, - "w": 79, - "h": 73 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:64f7e6dfa489012922487e45ba53d557:4d24652b372939abe499497c4b6647b0:d60cc2e5ae2bd18de8ee3ab0649593ee$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/6706_3.png b/public/images/pokemon/variant/back/6706_3.png deleted file mode 100644 index fb780d01499a23a4f4ab714732d1d56d7e094f2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4765 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%0Dy!50Qvv` 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 diff --git a/public/images/pokemon/variant/exp/6706.json b/public/images/pokemon/variant/exp/6706.json new file mode 100644 index 00000000000..2a5f8e112ee --- /dev/null +++ b/public/images/pokemon/variant/exp/6706.json @@ -0,0 +1,40 @@ +{ + "1": { + "566678": "0e6296", + "e0e4f4": "513981", + "625287": "4e4094", + "536273": "1f1233", + "988b98": "b24c86", + "36404c": "0c5474", + "c4cce1": "3b235c", + "e6d3e9": "f1a4c5", + "bfacc1": "da75a5", + "515f70": "197497", + "c5cee3": "63cee1", + "b791f2": "c7a1e5", + "8b93a6": "3aa8c4", + "80737f": "8a2166", + "4b454f": "6f1357", + "9170b9": "8b69c3", + "8e96aa": "301848" + }, + "2": { + "566678": "8e480b", + "e0e4f4": "176463", + "625287": "274159", + "536273": "02262c", + "988b98": "2a6563", + "36404c": "842401", + "c4cce1": "0d484a", + "e6d3e9": "9cead8", + "bfacc1": "5db6a9", + "515f70": "a34205", + "c5cee3": "f7af58", + "b791f2": "4a9699", + "8b93a6": "d27e26", + "80737f": "2b736f", + "4b454f": "194f51", + "9170b9": "2f667c", + "8e96aa": "073338" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/6706_2.json b/public/images/pokemon/variant/exp/6706_2.json deleted file mode 100644 index cb2ddfb1a12..00000000000 --- a/public/images/pokemon/variant/exp/6706_2.json +++ /dev/null @@ -1,2015 +0,0 @@ -{ - "textures": [ - { - "image": "6706_2.png", - "format": "RGBA8888", - "size": { - "w": 508, - "h": 508 - }, - "scale": 1, - "frames": [ - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 28, - "y": 26, - "w": 59, - "h": 61 - }, - "frame": { - "x": 0, - "y": 0, - "w": 59, - "h": 61 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 26, - "y": 25, - "w": 56, - "h": 63 - }, - "frame": { - "x": 59, - "y": 0, - "w": 56, - "h": 63 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 26, - "y": 25, - "w": 56, - "h": 63 - }, - "frame": { - "x": 59, - "y": 0, - "w": 56, - "h": 63 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 28, - "y": 21, - "w": 53, - "h": 65 - }, - "frame": { - "x": 115, - "y": 0, - "w": 53, - "h": 65 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 28, - "y": 21, - "w": 53, - "h": 65 - }, - "frame": { - "x": 115, - "y": 0, - "w": 53, - "h": 65 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 29, - "y": 21, - "w": 54, - "h": 65 - }, - "frame": { - "x": 168, - "y": 0, - "w": 54, - "h": 65 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 29, - "y": 21, - "w": 54, - "h": 65 - }, - "frame": { - "x": 168, - "y": 0, - "w": 54, - "h": 65 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 28, - "y": 21, - "w": 53, - "h": 65 - }, - "frame": { - "x": 222, - "y": 0, - "w": 53, - "h": 65 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 28, - "y": 21, - "w": 53, - "h": 65 - }, - "frame": { - "x": 222, - "y": 0, - "w": 53, - "h": 65 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 25, - "y": 21, - "w": 55, - "h": 66 - }, - "frame": { - "x": 275, - "y": 0, - "w": 55, - "h": 66 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 25, - "y": 21, - "w": 55, - "h": 66 - }, - "frame": { - "x": 275, - "y": 0, - "w": 55, - "h": 66 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 23, - "y": 23, - "w": 54, - "h": 66 - }, - "frame": { - "x": 330, - "y": 0, - "w": 54, - "h": 66 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 23, - "y": 23, - "w": 54, - "h": 66 - }, - "frame": { - "x": 330, - "y": 0, - "w": 54, - "h": 66 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 25, - "y": 21, - "w": 54, - "h": 67 - }, - "frame": { - "x": 384, - "y": 0, - "w": 54, - "h": 67 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 25, - "y": 21, - "w": 54, - "h": 67 - }, - "frame": { - "x": 384, - "y": 0, - "w": 54, - "h": 67 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 23, - "y": 21, - "w": 52, - "h": 68 - }, - "frame": { - "x": 438, - "y": 0, - "w": 52, - "h": 68 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 23, - "y": 21, - "w": 52, - "h": 68 - }, - "frame": { - "x": 438, - "y": 0, - "w": 52, - "h": 68 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 21, - "y": 21, - "w": 53, - "h": 68 - }, - "frame": { - "x": 0, - "y": 61, - "w": 53, - "h": 68 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 21, - "y": 21, - "w": 53, - "h": 68 - }, - "frame": { - "x": 0, - "y": 61, - "w": 53, - "h": 68 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 18, - "y": 22, - "w": 52, - "h": 68 - }, - "frame": { - "x": 53, - "y": 63, - "w": 52, - "h": 68 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 18, - "y": 22, - "w": 52, - "h": 68 - }, - "frame": { - "x": 53, - "y": 63, - "w": 52, - "h": 68 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 19, - "y": 21, - "w": 55, - "h": 69 - }, - "frame": { - "x": 105, - "y": 65, - "w": 55, - "h": 69 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 19, - "y": 21, - "w": 55, - "h": 69 - }, - "frame": { - "x": 105, - "y": 65, - "w": 55, - "h": 69 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 21, - "y": 21, - "w": 53, - "h": 69 - }, - "frame": { - "x": 160, - "y": 65, - "w": 53, - "h": 69 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 21, - "y": 21, - "w": 53, - "h": 69 - }, - "frame": { - "x": 160, - "y": 65, - "w": 53, - "h": 69 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 16, - "y": 21, - "w": 53, - "h": 69 - }, - "frame": { - "x": 213, - "y": 65, - "w": 53, - "h": 69 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 16, - "y": 21, - "w": 53, - "h": 69 - }, - "frame": { - "x": 213, - "y": 65, - "w": 53, - "h": 69 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 15, - "y": 21, - "w": 52, - "h": 70 - }, - "frame": { - "x": 266, - "y": 66, - "w": 52, - "h": 70 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 15, - "y": 21, - "w": 52, - "h": 70 - }, - "frame": { - "x": 266, - "y": 66, - "w": 52, - "h": 70 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 19, - "w": 87, - "h": 71 - }, - "frame": { - "x": 318, - "y": 67, - "w": 87, - "h": 71 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 19, - "w": 87, - "h": 71 - }, - "frame": { - "x": 318, - "y": 67, - "w": 87, - "h": 71 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 19, - "w": 87, - "h": 71 - }, - "frame": { - "x": 318, - "y": 67, - "w": 87, - "h": 71 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 18, - "w": 87, - "h": 71 - }, - "frame": { - "x": 405, - "y": 68, - "w": 87, - "h": 71 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 19, - "w": 86, - "h": 72 - }, - "frame": { - "x": 0, - "y": 131, - "w": 86, - "h": 72 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 19, - "w": 87, - "h": 72 - }, - "frame": { - "x": 86, - "y": 134, - "w": 87, - "h": 72 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 18, - "w": 87, - "h": 72 - }, - "frame": { - "x": 86, - "y": 134, - "w": 87, - "h": 72 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 18, - "w": 87, - "h": 72 - }, - "frame": { - "x": 86, - "y": 134, - "w": 87, - "h": 72 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 19, - "w": 87, - "h": 72 - }, - "frame": { - "x": 173, - "y": 134, - "w": 87, - "h": 72 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 18, - "w": 87, - "h": 72 - }, - "frame": { - "x": 173, - "y": 134, - "w": 87, - "h": 72 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 18, - "w": 87, - "h": 72 - }, - "frame": { - "x": 173, - "y": 134, - "w": 87, - "h": 72 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 18, - "w": 87, - "h": 72 - }, - "frame": { - "x": 260, - "y": 138, - "w": 87, - "h": 72 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 18, - "w": 87, - "h": 72 - }, - "frame": { - "x": 260, - "y": 138, - "w": 87, - "h": 72 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 18, - "w": 87, - "h": 72 - }, - "frame": { - "x": 260, - "y": 138, - "w": 87, - "h": 72 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 18, - "w": 87, - "h": 72 - }, - "frame": { - "x": 347, - "y": 139, - "w": 87, - "h": 72 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 18, - "w": 87, - "h": 72 - }, - "frame": { - "x": 347, - "y": 139, - "w": 87, - "h": 72 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 18, - "w": 87, - "h": 72 - }, - "frame": { - "x": 347, - "y": 139, - "w": 87, - "h": 72 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 74, - "h": 80 - }, - "frame": { - "x": 434, - "y": 139, - "w": 74, - "h": 80 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 74, - "h": 80 - }, - "frame": { - "x": 434, - "y": 139, - "w": 74, - "h": 80 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 17, - "w": 85, - "h": 72 - }, - "frame": { - "x": 0, - "y": 203, - "w": 85, - "h": 72 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 13, - "w": 83, - "h": 72 - }, - "frame": { - "x": 85, - "y": 206, - "w": 83, - "h": 72 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 18, - "w": 84, - "h": 73 - }, - "frame": { - "x": 168, - "y": 206, - "w": 84, - "h": 73 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 17, - "w": 85, - "h": 73 - }, - "frame": { - "x": 252, - "y": 210, - "w": 85, - "h": 73 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 17, - "w": 86, - "h": 73 - }, - "frame": { - "x": 337, - "y": 211, - "w": 86, - "h": 73 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 17, - "w": 86, - "h": 73 - }, - "frame": { - "x": 337, - "y": 211, - "w": 86, - "h": 73 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 17, - "w": 86, - "h": 73 - }, - "frame": { - "x": 337, - "y": 211, - "w": 86, - "h": 73 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 17, - "w": 85, - "h": 73 - }, - "frame": { - "x": 423, - "y": 219, - "w": 85, - "h": 73 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 17, - "w": 85, - "h": 73 - }, - "frame": { - "x": 423, - "y": 219, - "w": 85, - "h": 73 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 16, - "w": 85, - "h": 74 - }, - "frame": { - "x": 0, - "y": 275, - "w": 85, - "h": 74 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 16, - "w": 85, - "h": 74 - }, - "frame": { - "x": 0, - "y": 275, - "w": 85, - "h": 74 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 16, - "w": 85, - "h": 74 - }, - "frame": { - "x": 0, - "y": 275, - "w": 85, - "h": 74 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 86, - "h": 73 - }, - "frame": { - "x": 85, - "y": 279, - "w": 86, - "h": 73 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 86, - "h": 73 - }, - "frame": { - "x": 85, - "y": 279, - "w": 86, - "h": 73 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 86, - "h": 73 - }, - "frame": { - "x": 85, - "y": 279, - "w": 86, - "h": 73 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 81, - "h": 74 - }, - "frame": { - "x": 171, - "y": 279, - "w": 81, - "h": 74 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 81, - "h": 74 - }, - "frame": { - "x": 171, - "y": 279, - "w": 81, - "h": 74 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 16, - "w": 84, - "h": 74 - }, - "frame": { - "x": 252, - "y": 283, - "w": 84, - "h": 74 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 16, - "w": 84, - "h": 74 - }, - "frame": { - "x": 252, - "y": 283, - "w": 84, - "h": 74 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 17, - "w": 86, - "h": 73 - }, - "frame": { - "x": 336, - "y": 284, - "w": 86, - "h": 73 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 17, - "w": 86, - "h": 73 - }, - "frame": { - "x": 336, - "y": 284, - "w": 86, - "h": 73 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 80, - "h": 74 - }, - "frame": { - "x": 422, - "y": 292, - "w": 80, - "h": 74 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 80, - "h": 74 - }, - "frame": { - "x": 422, - "y": 292, - "w": 80, - "h": 74 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 79, - "h": 74 - }, - "frame": { - "x": 0, - "y": 349, - "w": 79, - "h": 74 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 79, - "h": 74 - }, - "frame": { - "x": 0, - "y": 349, - "w": 79, - "h": 74 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 74 - }, - "frame": { - "x": 79, - "y": 352, - "w": 80, - "h": 74 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 74 - }, - "frame": { - "x": 79, - "y": 352, - "w": 80, - "h": 74 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 15, - "w": 83, - "h": 75 - }, - "frame": { - "x": 159, - "y": 353, - "w": 83, - "h": 75 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 15, - "w": 83, - "h": 75 - }, - "frame": { - "x": 159, - "y": 353, - "w": 83, - "h": 75 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 15, - "w": 83, - "h": 75 - }, - "frame": { - "x": 159, - "y": 353, - "w": 83, - "h": 75 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 4, - "y": 15, - "w": 81, - "h": 75 - }, - "frame": { - "x": 242, - "y": 357, - "w": 81, - "h": 75 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 4, - "y": 15, - "w": 81, - "h": 75 - }, - "frame": { - "x": 242, - "y": 357, - "w": 81, - "h": 75 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 4, - "y": 15, - "w": 81, - "h": 75 - }, - "frame": { - "x": 242, - "y": 357, - "w": 81, - "h": 75 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 4, - "y": 15, - "w": 81, - "h": 75 - }, - "frame": { - "x": 323, - "y": 357, - "w": 81, - "h": 75 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 4, - "y": 15, - "w": 81, - "h": 75 - }, - "frame": { - "x": 323, - "y": 357, - "w": 81, - "h": 75 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 4, - "y": 15, - "w": 81, - "h": 75 - }, - "frame": { - "x": 323, - "y": 357, - "w": 81, - "h": 75 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 4, - "y": 15, - "w": 82, - "h": 75 - }, - "frame": { - "x": 404, - "y": 366, - "w": 82, - "h": 75 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 4, - "y": 15, - "w": 82, - "h": 75 - }, - "frame": { - "x": 404, - "y": 366, - "w": 82, - "h": 75 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 4, - "y": 15, - "w": 82, - "h": 75 - }, - "frame": { - "x": 404, - "y": 366, - "w": 82, - "h": 75 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 79, - "h": 75 - }, - "frame": { - "x": 0, - "y": 423, - "w": 79, - "h": 75 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 79, - "h": 75 - }, - "frame": { - "x": 0, - "y": 423, - "w": 79, - "h": 75 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 78, - "h": 75 - }, - "frame": { - "x": 79, - "y": 426, - "w": 78, - "h": 75 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 78, - "h": 75 - }, - "frame": { - "x": 79, - "y": 426, - "w": 78, - "h": 75 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 15, - "w": 85, - "h": 75 - }, - "frame": { - "x": 157, - "y": 428, - "w": 85, - "h": 75 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 5, - "y": 14, - "w": 79, - "h": 76 - }, - "frame": { - "x": 242, - "y": 432, - "w": 79, - "h": 76 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 5, - "y": 14, - "w": 79, - "h": 76 - }, - "frame": { - "x": 242, - "y": 432, - "w": 79, - "h": 76 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 5, - "y": 14, - "w": 79, - "h": 76 - }, - "frame": { - "x": 242, - "y": 432, - "w": 79, - "h": 76 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:62a4a665074efb5def1545546995dc5b:de2788ebeab6b42f331926f332da5125:d60cc2e5ae2bd18de8ee3ab0649593ee$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/6706_2.png b/public/images/pokemon/variant/exp/6706_2.png deleted file mode 100644 index 7e7dfa8e05a910d741fea8e3952947d1e304738f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55978 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 diff --git a/public/images/pokemon/variant/exp/6706_3.json b/public/images/pokemon/variant/exp/6706_3.json deleted file mode 100644 index 8c9b16b80ab..00000000000 --- a/public/images/pokemon/variant/exp/6706_3.json +++ /dev/null @@ -1,2015 +0,0 @@ -{ - "textures": [ - { - "image": "6706_3.png", - "format": "RGBA8888", - "size": { - "w": 508, - "h": 508 - }, - "scale": 1, - "frames": [ - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 28, - "y": 26, - "w": 59, - "h": 61 - }, - "frame": { - "x": 0, - "y": 0, - "w": 59, - "h": 61 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 26, - "y": 25, - "w": 56, - "h": 63 - }, - "frame": { - "x": 59, - "y": 0, - "w": 56, - "h": 63 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 26, - "y": 25, - "w": 56, - "h": 63 - }, - "frame": { - "x": 59, - "y": 0, - "w": 56, - "h": 63 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 28, - "y": 21, - "w": 53, - "h": 65 - }, - "frame": { - "x": 115, - "y": 0, - "w": 53, - "h": 65 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 28, - "y": 21, - "w": 53, - "h": 65 - }, - "frame": { - "x": 115, - "y": 0, - "w": 53, - "h": 65 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 29, - "y": 21, - "w": 54, - "h": 65 - }, - "frame": { - "x": 168, - "y": 0, - "w": 54, - "h": 65 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 29, - "y": 21, - "w": 54, - "h": 65 - }, - "frame": { - "x": 168, - "y": 0, - "w": 54, - "h": 65 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 28, - "y": 21, - "w": 53, - "h": 65 - }, - "frame": { - "x": 222, - "y": 0, - "w": 53, - "h": 65 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 28, - "y": 21, - "w": 53, - "h": 65 - }, - "frame": { - "x": 222, - "y": 0, - "w": 53, - "h": 65 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 25, - "y": 21, - "w": 55, - "h": 66 - }, - "frame": { - "x": 275, - "y": 0, - "w": 55, - "h": 66 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 25, - "y": 21, - "w": 55, - "h": 66 - }, - "frame": { - "x": 275, - "y": 0, - "w": 55, - "h": 66 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 23, - "y": 23, - "w": 54, - "h": 66 - }, - "frame": { - "x": 330, - "y": 0, - "w": 54, - "h": 66 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 23, - "y": 23, - "w": 54, - "h": 66 - }, - "frame": { - "x": 330, - "y": 0, - "w": 54, - "h": 66 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 25, - "y": 21, - "w": 54, - "h": 67 - }, - "frame": { - "x": 384, - "y": 0, - "w": 54, - "h": 67 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 25, - "y": 21, - "w": 54, - "h": 67 - }, - "frame": { - "x": 384, - "y": 0, - "w": 54, - "h": 67 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 23, - "y": 21, - "w": 52, - "h": 68 - }, - "frame": { - "x": 438, - "y": 0, - "w": 52, - "h": 68 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 23, - "y": 21, - "w": 52, - "h": 68 - }, - "frame": { - "x": 438, - "y": 0, - "w": 52, - "h": 68 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 21, - "y": 21, - "w": 53, - "h": 68 - }, - "frame": { - "x": 0, - "y": 61, - "w": 53, - "h": 68 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 21, - "y": 21, - "w": 53, - "h": 68 - }, - "frame": { - "x": 0, - "y": 61, - "w": 53, - "h": 68 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 18, - "y": 22, - "w": 52, - "h": 68 - }, - "frame": { - "x": 53, - "y": 63, - "w": 52, - "h": 68 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 18, - "y": 22, - "w": 52, - "h": 68 - }, - "frame": { - "x": 53, - "y": 63, - "w": 52, - "h": 68 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 19, - "y": 21, - "w": 55, - "h": 69 - }, - "frame": { - "x": 105, - "y": 65, - "w": 55, - "h": 69 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 19, - "y": 21, - "w": 55, - "h": 69 - }, - "frame": { - "x": 105, - "y": 65, - "w": 55, - "h": 69 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 21, - "y": 21, - "w": 53, - "h": 69 - }, - "frame": { - "x": 160, - "y": 65, - "w": 53, - "h": 69 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 21, - "y": 21, - "w": 53, - "h": 69 - }, - "frame": { - "x": 160, - "y": 65, - "w": 53, - "h": 69 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 16, - "y": 21, - "w": 53, - "h": 69 - }, - "frame": { - "x": 213, - "y": 65, - "w": 53, - "h": 69 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 16, - "y": 21, - "w": 53, - "h": 69 - }, - "frame": { - "x": 213, - "y": 65, - "w": 53, - "h": 69 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 15, - "y": 21, - "w": 52, - "h": 70 - }, - "frame": { - "x": 266, - "y": 66, - "w": 52, - "h": 70 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 15, - "y": 21, - "w": 52, - "h": 70 - }, - "frame": { - "x": 266, - "y": 66, - "w": 52, - "h": 70 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 19, - "w": 87, - "h": 71 - }, - "frame": { - "x": 318, - "y": 67, - "w": 87, - "h": 71 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 19, - "w": 87, - "h": 71 - }, - "frame": { - "x": 318, - "y": 67, - "w": 87, - "h": 71 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 19, - "w": 87, - "h": 71 - }, - "frame": { - "x": 318, - "y": 67, - "w": 87, - "h": 71 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 18, - "w": 87, - "h": 71 - }, - "frame": { - "x": 405, - "y": 68, - "w": 87, - "h": 71 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 19, - "w": 86, - "h": 72 - }, - "frame": { - "x": 0, - "y": 131, - "w": 86, - "h": 72 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 19, - "w": 87, - "h": 72 - }, - "frame": { - "x": 86, - "y": 134, - "w": 87, - "h": 72 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 18, - "w": 87, - "h": 72 - }, - "frame": { - "x": 86, - "y": 134, - "w": 87, - "h": 72 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 18, - "w": 87, - "h": 72 - }, - "frame": { - "x": 86, - "y": 134, - "w": 87, - "h": 72 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 19, - "w": 87, - "h": 72 - }, - "frame": { - "x": 173, - "y": 134, - "w": 87, - "h": 72 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 18, - "w": 87, - "h": 72 - }, - "frame": { - "x": 173, - "y": 134, - "w": 87, - "h": 72 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 18, - "w": 87, - "h": 72 - }, - "frame": { - "x": 173, - "y": 134, - "w": 87, - "h": 72 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 18, - "w": 87, - "h": 72 - }, - "frame": { - "x": 260, - "y": 138, - "w": 87, - "h": 72 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 18, - "w": 87, - "h": 72 - }, - "frame": { - "x": 260, - "y": 138, - "w": 87, - "h": 72 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 18, - "w": 87, - "h": 72 - }, - "frame": { - "x": 260, - "y": 138, - "w": 87, - "h": 72 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 18, - "w": 87, - "h": 72 - }, - "frame": { - "x": 347, - "y": 139, - "w": 87, - "h": 72 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 18, - "w": 87, - "h": 72 - }, - "frame": { - "x": 347, - "y": 139, - "w": 87, - "h": 72 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 18, - "w": 87, - "h": 72 - }, - "frame": { - "x": 347, - "y": 139, - "w": 87, - "h": 72 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 74, - "h": 80 - }, - "frame": { - "x": 434, - "y": 139, - "w": 74, - "h": 80 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 74, - "h": 80 - }, - "frame": { - "x": 434, - "y": 139, - "w": 74, - "h": 80 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 17, - "w": 85, - "h": 72 - }, - "frame": { - "x": 0, - "y": 203, - "w": 85, - "h": 72 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 13, - "w": 83, - "h": 72 - }, - "frame": { - "x": 85, - "y": 206, - "w": 83, - "h": 72 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 18, - "w": 84, - "h": 73 - }, - "frame": { - "x": 168, - "y": 206, - "w": 84, - "h": 73 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 17, - "w": 85, - "h": 73 - }, - "frame": { - "x": 252, - "y": 210, - "w": 85, - "h": 73 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 17, - "w": 86, - "h": 73 - }, - "frame": { - "x": 337, - "y": 211, - "w": 86, - "h": 73 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 17, - "w": 86, - "h": 73 - }, - "frame": { - "x": 337, - "y": 211, - "w": 86, - "h": 73 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 17, - "w": 86, - "h": 73 - }, - "frame": { - "x": 337, - "y": 211, - "w": 86, - "h": 73 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 17, - "w": 85, - "h": 73 - }, - "frame": { - "x": 423, - "y": 219, - "w": 85, - "h": 73 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 17, - "w": 85, - "h": 73 - }, - "frame": { - "x": 423, - "y": 219, - "w": 85, - "h": 73 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 16, - "w": 85, - "h": 74 - }, - "frame": { - "x": 0, - "y": 275, - "w": 85, - "h": 74 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 16, - "w": 85, - "h": 74 - }, - "frame": { - "x": 0, - "y": 275, - "w": 85, - "h": 74 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 1, - "y": 16, - "w": 85, - "h": 74 - }, - "frame": { - "x": 0, - "y": 275, - "w": 85, - "h": 74 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 86, - "h": 73 - }, - "frame": { - "x": 85, - "y": 279, - "w": 86, - "h": 73 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 86, - "h": 73 - }, - "frame": { - "x": 85, - "y": 279, - "w": 86, - "h": 73 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 86, - "h": 73 - }, - "frame": { - "x": 85, - "y": 279, - "w": 86, - "h": 73 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 81, - "h": 74 - }, - "frame": { - "x": 171, - "y": 279, - "w": 81, - "h": 74 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 81, - "h": 74 - }, - "frame": { - "x": 171, - "y": 279, - "w": 81, - "h": 74 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 16, - "w": 84, - "h": 74 - }, - "frame": { - "x": 252, - "y": 283, - "w": 84, - "h": 74 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 3, - "y": 16, - "w": 84, - "h": 74 - }, - "frame": { - "x": 252, - "y": 283, - "w": 84, - "h": 74 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 17, - "w": 86, - "h": 73 - }, - "frame": { - "x": 336, - "y": 284, - "w": 86, - "h": 73 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 17, - "w": 86, - "h": 73 - }, - "frame": { - "x": 336, - "y": 284, - "w": 86, - "h": 73 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 80, - "h": 74 - }, - "frame": { - "x": 422, - "y": 292, - "w": 80, - "h": 74 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 80, - "h": 74 - }, - "frame": { - "x": 422, - "y": 292, - "w": 80, - "h": 74 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 79, - "h": 74 - }, - "frame": { - "x": 0, - "y": 349, - "w": 79, - "h": 74 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 79, - "h": 74 - }, - "frame": { - "x": 0, - "y": 349, - "w": 79, - "h": 74 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 74 - }, - "frame": { - "x": 79, - "y": 352, - "w": 80, - "h": 74 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 74 - }, - "frame": { - "x": 79, - "y": 352, - "w": 80, - "h": 74 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 15, - "w": 83, - "h": 75 - }, - "frame": { - "x": 159, - "y": 353, - "w": 83, - "h": 75 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 15, - "w": 83, - "h": 75 - }, - "frame": { - "x": 159, - "y": 353, - "w": 83, - "h": 75 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 15, - "w": 83, - "h": 75 - }, - "frame": { - "x": 159, - "y": 353, - "w": 83, - "h": 75 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 4, - "y": 15, - "w": 81, - "h": 75 - }, - "frame": { - "x": 242, - "y": 357, - "w": 81, - "h": 75 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 4, - "y": 15, - "w": 81, - "h": 75 - }, - "frame": { - "x": 242, - "y": 357, - "w": 81, - "h": 75 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 4, - "y": 15, - "w": 81, - "h": 75 - }, - "frame": { - "x": 242, - "y": 357, - "w": 81, - "h": 75 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 4, - "y": 15, - "w": 81, - "h": 75 - }, - "frame": { - "x": 323, - "y": 357, - "w": 81, - "h": 75 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 4, - "y": 15, - "w": 81, - "h": 75 - }, - "frame": { - "x": 323, - "y": 357, - "w": 81, - "h": 75 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 4, - "y": 15, - "w": 81, - "h": 75 - }, - "frame": { - "x": 323, - "y": 357, - "w": 81, - "h": 75 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 4, - "y": 15, - "w": 82, - "h": 75 - }, - "frame": { - "x": 404, - "y": 366, - "w": 82, - "h": 75 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 4, - "y": 15, - "w": 82, - "h": 75 - }, - "frame": { - "x": 404, - "y": 366, - "w": 82, - "h": 75 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 4, - "y": 15, - "w": 82, - "h": 75 - }, - "frame": { - "x": 404, - "y": 366, - "w": 82, - "h": 75 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 79, - "h": 75 - }, - "frame": { - "x": 0, - "y": 423, - "w": 79, - "h": 75 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 79, - "h": 75 - }, - "frame": { - "x": 0, - "y": 423, - "w": 79, - "h": 75 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 78, - "h": 75 - }, - "frame": { - "x": 79, - "y": 426, - "w": 78, - "h": 75 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 78, - "h": 75 - }, - "frame": { - "x": 79, - "y": 426, - "w": 78, - "h": 75 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 2, - "y": 15, - "w": 85, - "h": 75 - }, - "frame": { - "x": 157, - "y": 428, - "w": 85, - "h": 75 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 5, - "y": 14, - "w": 79, - "h": 76 - }, - "frame": { - "x": 242, - "y": 432, - "w": 79, - "h": 76 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 5, - "y": 14, - "w": 79, - "h": 76 - }, - "frame": { - "x": 242, - "y": 432, - "w": 79, - "h": 76 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 91 - }, - "spriteSourceSize": { - "x": 5, - "y": 14, - "w": 79, - "h": 76 - }, - "frame": { - "x": 242, - "y": 432, - "w": 79, - "h": 76 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:62a4a665074efb5def1545546995dc5b:de2788ebeab6b42f331926f332da5125:d60cc2e5ae2bd18de8ee3ab0649593ee$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/6706_3.png b/public/images/pokemon/variant/exp/6706_3.png deleted file mode 100644 index 3ad44f4bbf52818265762c20047ff43d445b9c85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56190 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