From f7223103e0cc44872cc99fa06655f73adda9ede1 Mon Sep 17 00:00:00 2001 From: chaosgrimmon <31082757+chaosgrimmon@users.noreply.github.com> Date: Thu, 26 Sep 2024 00:48:19 -0400 Subject: [PATCH 01/10] [Sprite/Misc] Arceus_Fairy cleanup (#4444) * Delete public/images/pokemon/shiny/493_fairy.png * Delete public/images/pokemon/shiny/493_fairy.json --- public/images/pokemon/shiny/493_fairy.json | 1783 -------------------- public/images/pokemon/shiny/493_fairy.png | Bin 14291 -> 0 bytes 2 files changed, 1783 deletions(-) delete mode 100644 public/images/pokemon/shiny/493_fairy.json delete mode 100644 public/images/pokemon/shiny/493_fairy.png diff --git a/public/images/pokemon/shiny/493_fairy.json b/public/images/pokemon/shiny/493_fairy.json deleted file mode 100644 index b48a4d31370..00000000000 --- a/public/images/pokemon/shiny/493_fairy.json +++ /dev/null @@ -1,1783 +0,0 @@ -{ - "textures": [ - { - "image": "493-fairy.png", - "format": "RGBA8888", - "size": { - "w": 380, - "h": 380 - }, - "scale": 1, - "frames": [ - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 67, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 81 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 66, - "h": 81 - }, - "frame": { - "x": 0, - "y": 81, - "w": 66, - "h": 81 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 66, - "h": 81 - }, - "frame": { - "x": 67, - "y": 0, - "w": 66, - "h": 81 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 3, - "y": 1, - "w": 66, - "h": 80 - }, - "frame": { - "x": 0, - "y": 162, - "w": 66, - "h": 80 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 69, - "h": 76 - }, - "frame": { - "x": 133, - "y": 0, - "w": 69, - "h": 76 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 69, - "h": 76 - }, - "frame": { - "x": 133, - "y": 0, - "w": 69, - "h": 76 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 69, - "h": 76 - }, - "frame": { - "x": 133, - "y": 0, - "w": 69, - "h": 76 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 69, - "h": 76 - }, - "frame": { - "x": 133, - "y": 0, - "w": 69, - "h": 76 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 69, - "h": 76 - }, - "frame": { - "x": 133, - "y": 0, - "w": 69, - "h": 76 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 69, - "h": 76 - }, - "frame": { - "x": 133, - "y": 0, - "w": 69, - "h": 76 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 66, - "h": 79 - }, - "frame": { - "x": 66, - "y": 81, - "w": 66, - "h": 79 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 64, - "h": 81 - }, - "frame": { - "x": 0, - "y": 242, - "w": 64, - "h": 81 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 64, - "h": 81 - }, - "frame": { - "x": 66, - "y": 160, - "w": 64, - "h": 81 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 68, - "h": 76 - }, - "frame": { - "x": 202, - "y": 0, - "w": 68, - "h": 76 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 68, - "h": 76 - }, - "frame": { - "x": 202, - "y": 0, - "w": 68, - "h": 76 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 68, - "h": 76 - }, - "frame": { - "x": 202, - "y": 0, - "w": 68, - "h": 76 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 68, - "h": 76 - }, - "frame": { - "x": 202, - "y": 0, - "w": 68, - "h": 76 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 68, - "h": 76 - }, - "frame": { - "x": 202, - "y": 0, - "w": 68, - "h": 76 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 68, - "h": 76 - }, - "frame": { - "x": 202, - "y": 0, - "w": 68, - "h": 76 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 68, - "h": 76 - }, - "frame": { - "x": 202, - "y": 0, - "w": 68, - "h": 76 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 68, - "h": 76 - }, - "frame": { - "x": 202, - "y": 0, - "w": 68, - "h": 76 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 68, - "h": 76 - }, - "frame": { - "x": 270, - "y": 0, - "w": 68, - "h": 76 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 68, - "h": 76 - }, - "frame": { - "x": 270, - "y": 0, - "w": 68, - "h": 76 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 68, - "h": 76 - }, - "frame": { - "x": 270, - "y": 0, - "w": 68, - "h": 76 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 68, - "h": 76 - }, - "frame": { - "x": 270, - "y": 0, - "w": 68, - "h": 76 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 68, - "h": 76 - }, - "frame": { - "x": 270, - "y": 0, - "w": 68, - "h": 76 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 68, - "h": 76 - }, - "frame": { - "x": 270, - "y": 0, - "w": 68, - "h": 76 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 66, - "h": 79 - }, - "frame": { - "x": 64, - "y": 242, - "w": 66, - "h": 79 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 68, - "h": 77 - }, - "frame": { - "x": 130, - "y": 160, - "w": 68, - "h": 77 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 68, - "h": 77 - }, - "frame": { - "x": 130, - "y": 237, - "w": 68, - "h": 77 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 68, - "h": 76 - }, - "frame": { - "x": 132, - "y": 81, - "w": 68, - "h": 76 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 68, - "h": 76 - }, - "frame": { - "x": 132, - "y": 81, - "w": 68, - "h": 76 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 68, - "h": 76 - }, - "frame": { - "x": 132, - "y": 81, - "w": 68, - "h": 76 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 68, - "h": 76 - }, - "frame": { - "x": 132, - "y": 81, - "w": 68, - "h": 76 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 68, - "h": 76 - }, - "frame": { - "x": 132, - "y": 81, - "w": 68, - "h": 76 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 68, - "h": 76 - }, - "frame": { - "x": 132, - "y": 81, - "w": 68, - "h": 76 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 68, - "h": 76 - }, - "frame": { - "x": 200, - "y": 76, - "w": 68, - "h": 76 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 68, - "h": 76 - }, - "frame": { - "x": 200, - "y": 76, - "w": 68, - "h": 76 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 68, - "h": 76 - }, - "frame": { - "x": 200, - "y": 76, - "w": 68, - "h": 76 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 68, - "h": 76 - }, - "frame": { - "x": 200, - "y": 76, - "w": 68, - "h": 76 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 68, - "h": 76 - }, - "frame": { - "x": 200, - "y": 76, - "w": 68, - "h": 76 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 68, - "h": 76 - }, - "frame": { - "x": 200, - "y": 76, - "w": 68, - "h": 76 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 68, - "h": 75 - }, - "frame": { - "x": 268, - "y": 76, - "w": 68, - "h": 75 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 68, - "h": 75 - }, - "frame": { - "x": 268, - "y": 76, - "w": 68, - "h": 75 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 68, - "h": 75 - }, - "frame": { - "x": 268, - "y": 76, - "w": 68, - "h": 75 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 68, - "h": 75 - }, - "frame": { - "x": 268, - "y": 76, - "w": 68, - "h": 75 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 68, - "h": 75 - }, - "frame": { - "x": 268, - "y": 76, - "w": 68, - "h": 75 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 68, - "h": 75 - }, - "frame": { - "x": 268, - "y": 76, - "w": 68, - "h": 75 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 75 - }, - "frame": { - "x": 198, - "y": 157, - "w": 67, - "h": 75 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 75 - }, - "frame": { - "x": 198, - "y": 157, - "w": 67, - "h": 75 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 75 - }, - "frame": { - "x": 198, - "y": 157, - "w": 67, - "h": 75 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 75 - }, - "frame": { - "x": 198, - "y": 157, - "w": 67, - "h": 75 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 75 - }, - "frame": { - "x": 198, - "y": 157, - "w": 67, - "h": 75 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 75 - }, - "frame": { - "x": 198, - "y": 157, - "w": 67, - "h": 75 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 75 - }, - "frame": { - "x": 198, - "y": 232, - "w": 67, - "h": 75 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 75 - }, - "frame": { - "x": 198, - "y": 232, - "w": 67, - "h": 75 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 75 - }, - "frame": { - "x": 198, - "y": 232, - "w": 67, - "h": 75 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 75 - }, - "frame": { - "x": 198, - "y": 232, - "w": 67, - "h": 75 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 75 - }, - "frame": { - "x": 198, - "y": 232, - "w": 67, - "h": 75 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 75 - }, - "frame": { - "x": 198, - "y": 232, - "w": 67, - "h": 75 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 66, - "h": 73 - }, - "frame": { - "x": 198, - "y": 307, - "w": 66, - "h": 73 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 66, - "h": 73 - }, - "frame": { - "x": 198, - "y": 307, - "w": 66, - "h": 73 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 66, - "h": 73 - }, - "frame": { - "x": 198, - "y": 307, - "w": 66, - "h": 73 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 66, - "h": 73 - }, - "frame": { - "x": 198, - "y": 307, - "w": 66, - "h": 73 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 66, - "h": 73 - }, - "frame": { - "x": 198, - "y": 307, - "w": 66, - "h": 73 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 66, - "h": 73 - }, - "frame": { - "x": 198, - "y": 307, - "w": 66, - "h": 73 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 65, - "h": 73 - }, - "frame": { - "x": 264, - "y": 307, - "w": 65, - "h": 73 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 65, - "h": 73 - }, - "frame": { - "x": 264, - "y": 307, - "w": 65, - "h": 73 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 65, - "h": 73 - }, - "frame": { - "x": 264, - "y": 307, - "w": 65, - "h": 73 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 65, - "h": 73 - }, - "frame": { - "x": 264, - "y": 307, - "w": 65, - "h": 73 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 65, - "h": 73 - }, - "frame": { - "x": 264, - "y": 307, - "w": 65, - "h": 73 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 65, - "h": 73 - }, - "frame": { - "x": 264, - "y": 307, - "w": 65, - "h": 73 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 75 - }, - "frame": { - "x": 265, - "y": 152, - "w": 67, - "h": 75 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 75 - }, - "frame": { - "x": 265, - "y": 152, - "w": 67, - "h": 75 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 75 - }, - "frame": { - "x": 265, - "y": 152, - "w": 67, - "h": 75 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 75 - }, - "frame": { - "x": 265, - "y": 152, - "w": 67, - "h": 75 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 75 - }, - "frame": { - "x": 265, - "y": 152, - "w": 67, - "h": 75 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 67, - "h": 75 - }, - "frame": { - "x": 265, - "y": 152, - "w": 67, - "h": 75 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 66, - "h": 74 - }, - "frame": { - "x": 265, - "y": 227, - "w": 66, - "h": 74 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 66, - "h": 74 - }, - "frame": { - "x": 265, - "y": 227, - "w": 66, - "h": 74 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 66, - "h": 74 - }, - "frame": { - "x": 265, - "y": 227, - "w": 66, - "h": 74 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 66, - "h": 74 - }, - "frame": { - "x": 265, - "y": 227, - "w": 66, - "h": 74 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 66, - "h": 74 - }, - "frame": { - "x": 265, - "y": 227, - "w": 66, - "h": 74 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 66, - "h": 74 - }, - "frame": { - "x": 265, - "y": 227, - "w": 66, - "h": 74 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0" - } -} diff --git a/public/images/pokemon/shiny/493_fairy.png b/public/images/pokemon/shiny/493_fairy.png deleted file mode 100644 index e3ad9247941b2e27080ca0dc372807c377b5bd64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14291 zcmY*AWl$VVuxM}(?(Xg$+$FfX2DiiAB}i~51cD##?gW>>9S%oucZbLK>iv0JwKcUf z-90^9-P1M`tF9`ChD?ME1qFqsATO-}1qB`O--`(Q(eo^L@$k_=duYf>LII~q4nICP z)RnblK3YsnOj`jpD-okGZO2i+S_civD(jH@>VujH$y?BUEN6(KlJ~~2(5)fx{XSu* zhBp5{98V2ZO{n+(|MaQHOF=yx`BC(5lL+lZz2NP;8>PHkd zk4Ds2eV`8{f))kcW1!hu(8g=D7@aCDq1@-4o6jQhFtA%6DDE2q#*u zCh`mEG39Zz+peI=R$*b-TbMnl;ToW(>80u#OTjjq9;aH`DrQ8cdz`iC%D zx_E4f5S+?IUW++0gI`C(P2({xVR{DjdYu}{ThKsA1A*URgC08~aRT7(3!8rszvupe zFKKC76BPvniTLjPeXIj)hN6wD2-l5X$AfBfPlj?af|e(D0!#4gUe69WU(K5}U0cM1 zox8V8tX>e$$550IPu}FG=xML zzod%X@JM%r%rTVznYXy#-MG}kIO(wG<7>>L))kCNBA;iqhf9D8dcNhQX%9JM(EEzK z&A9j;81&Y!{OEIo+t!E<*^%>9%I`xwXb)yavnPcQ{Qc9b@csU=7op(tB+qD4$ZQnj zI77gky2v*z48xU@->Us)R>;Hm-MbLmV7=-U2BH5_s$*F7DO$ah^!zJXK(66Y&oaem zf^wxTY26Nj7wqou{C}(UbVIhPPx~|bWnA$@-h{Vk=xdjjtz?f`-VMd1ulo^j!ABCO zQV3FzRb!UPvzqD@bxm+u32-kmtg)(&0`okwE^ zf2Zc88+Ad#YYIHRL^A`9Psx9`KEGW`1eXIgnD+DQP{4b?z=^Wt;ZZC33+S@88~0

zB{R&71E}59;K5cbk_)X_HL*=VAb8;=pRV(PUD<`q-PyxqdZl@S~9EtU=uQ?e(n& zanwc;=(!+i)Dg~S`ze6MUapfgT00SK4QQC)+cqN7rn_BM0 z+io4NsdLnM;X-s;0R!Ru+BZiv_>KL5K;o^gEV3e)MDM}`HXj2f85|3YPwQHm5{;;=ig+pL395n%?%spWzg}oPS(C5 zY2LI%5<-VZ9eh#XXHLF_!IEZy$RV3t{OMv4KYs?E)&oBSiDgMnc?Hby~g~ttam=hhiHClqWoN zj$Yn=o2O{uDJ>+g7Q5)pna69-|}Pxl9q? zha}1n{Exv^Wks@)WVsy>fc0C=XJR*h9D;nF_T&}wybu(Ahn}esDEU6Sc{n+Vdh|(g@tStg zBT>mHB=CP&!M3u3{*qnG6q?;z%x-( zV;fForWdNFvTf+}4|LOx!e*G04j8pnS;9wz1)rN%-E30w!M+%vB7_cKGF{h`30>b= zhugO3wYM>35JXzEEA>Q0nGJmvzMeEvV%B+YxNSB5(O2y$4S8uX$_U*X}~{&d4_I2en?IJGaeMqR8WX>~9sz!oUIn7$!c;KVI@yeFm?_?am ze;%UK*}^!Z8I0n+4q^S>ki%x$8C|r{g#~t5xV6=8HK7;e4C8=uQQKYRBzBj7)(S9~ z9Rj8i|egIAhGvbL~DorUPNqWTY~`M1J6C<26$D^72L8O4>v#j)Od$IPjAch zqTAsbeMl(LE8gS{vTDqD_BfsmZk(??n`tA$)z1M{%UU&Yh-2CP@g&-+J^g4Hz%xrQ zzh!=b@pFyxX&vAx46=lZn5DngtSwL_a1lO;&>Ij)W>mHgKcwT+DRrt)e*#E9yoRA? zWg}|_c*fSUIf1^U>Hky*sNAV?Wo>&`Co%q!9{>3;4c{41LpB!O>E9;>wp}_rnd%w% z6Ur7~tASs+lt^})PFRjSQ(EB3=I_qZVAu1ls!OkZLBwmsTT3m#vUUOX!PR@lx3Xwr z-`7;+VR`*|d=+IubyE0gJW0ljT0pU+#tG$k;H*}K3flYdtaWX>RU* z*ToZ>9|b$uJ~E&0KEB?c4>c6UXdS;+&$7*1ua1&h)hIG4f7yc#FUDonZ`7%DK#3G> zm0O&bbLYF{bTY!mp{D&wQ{bCJ2Gt}LFTju8k$5m~mV>}elI_ff;f>@e#<&`1Gwb(u zgSgZ##c;A`b_J4&xad*n?V}{UKgH_$aVDX=fSdysIdCf(hlu_+VO+0QdYc~Qn*!|n z(ngnUlT^I%JkS1baogycPTwfe2i06#&|mu}?N$2)hn+9{2?oi|vq(XDC6~AfGivW| zGXIK25Q$D2;weV${Q}Pl!Df-0eL1L&%yju%Fg-(;5DcG-AfwuFRc4R_fh+B0{d~4t z@%nH5hc^`eeKyapB(SWX_UFo9ODU!6?kvLE%M`MXcKNk=I)g09EW~Ywhdfu_ff~Q@ z_}I&SIJd9QWTkpc#`Xk^{Pq^TpAGl=YA5^a();Kq8UN|7cjeq!Xo~Q4V#e=d?`#s` zfBknW>k^kJz|r-6|Do6Ov)dpGN(OKL4W#=bGrWmt>@hVqvsuVvT0_=GaiSw^{MX$$Z^Zf+Fq2dNsWg+aI1Q<1Wn8QBs~2DF_rC*7fv9HIb+&k+_y)~%sZw+TYrel8VN~JxukKnEdW?<^1%*ad@`o%)~6uArzc{c%|Y~ zmw#6yKY2%#`OX#3jgrUH4uuiMJB62Oj6xOX(=TZH0+BvzfR+6hKEK5}tu zC?O?{GW9;ayupba>`+XPM@1CYB)fn?7RzJonUJ;-3=I8P+W`lQmFD4J6l_#H-G{#d zsiu>iS>MK`yvv3a24VhlFwKQkKP||xj~CS9Z`dA<(-L$9c#tU9EaB`IQ@q_FKPW+Wog8 zW>z0ce}=(H|A%J2LUX+R@=XU6u1VryQy88{cOHwzDcdaXz4BmM!us_+?nz>gzsOt= zHN1DZRS^;o!!WxO@k3Dlk@22quKwPwYL9BlJ50QusSKAzYVbqXOu(-vZMz{Si6$dV zMq6XBF8(Aq9V!^jrwTV>B*QGd~75E zDL9?3`U}t9DvP2I*_QCJgq0<>o=ZqV`4xVh`~6L805+`%#zp=eMFS`P53Eht{qT&{ z`ZL4LaO}IwDYU;wK$if!l@H5K&!m?UX8g;5S+sqir)Y`M}% z`}1jw$LK~~UmWgT$H^MdvZEY|Q)^|YRf{8(?8lc7tH0og*ouf)VMMxQ+HU7;4JJU* zn)G>JY|{-|v#Hb*{lsqPB6}Mny8^Nhaw33Epk5wP2w>kbu0H@ui+_dl3~S0Rnoda( zBj-efKhXTZGK3DsFJq1h>E-{AM(Mz>RGvi>>Pi2)0rN=;k+m#WY2AcBF*nD@kFFlu z?qW);lOBNcNJ}GuJqsnM;QxAAAig2zl5lmKhFl={dr>#C==nSHsTO)1}I0#S}<$W+NkKZp!&iTIQt?5L z?zVHnxyI?9-~l5O+R`whZS$?Mm@`WGggyQ9;Cz8GP}BMex+IwYH%hN!J`~6T;TG|W zu34Ev=%_IX6Va81vYi;htQDa7m_W~V^41^%dj!zpFhfl%hQtY>=7SoLeMOe`1x7$k zXT$<>i{mfiUK+&2t zgU9-SFFqKDiW)nwHj)$M@?=#e!aCBPPD7$mWPcxTHmm(t?b-+lI&aaWj~RfRNlk5F zqzG#X+-wrxwNI&>u|-hGB2Ua@LnZc4LCpErjs;g2p^G{egEl~GH-vbBf3eM#&~CEB zu-$pBW!{t;@!IUcvLoQ=!&TS@Y=D9`qNZ*^#D7SJ3O*>F%sS>Kq+J`NO2k0;>`c;N zPGggy?H-%>sz^$0MEM`wPb{3i&7R1RUR0)e(O6f|-L)E4L9h_vZn4!{oVs46|AW-z>mwOYu8w2;oE8*#NEL%Jj-qA4|mxXK_ z3(*`W(VSc?C&-%UQ;olFQId?~PKg}UIW|h>RcUn~I`qr9Ma1q?hrF!g=jlhYy+M2! z2vb74Sh(%qUn~|=oU>;a4Bysv2(C)OOEfd>J}Q4Ssl&s^sXK>_|;HO!Y`b;c)T!RiSJ6}I?@g-+{Ql-{neC}bIn5Vckh4H_1d zDTNY|?FoiLlh8~sM~X%cDCiC5TcUX+3r5Q}5f8LeLd}re(S4FFoN9=99TvvmbN(8X z0A?|c`|HX$<9myfP*)U)Pxy67!W1cgW;4u|JEUadxBgH8EZV5YIv@dj@pgHfT^6O} zt11b_%%TN%T8nEnq!}5|`}txY+70Cw`a00<-4u<+Je^L6?)`X|LBG{g@S9H@R8U~d z=j~{ta=VvEKCWVxJYVeBn7J6v{3Omj)qc6&yG9m^f`gYfZxJ1G?zJW{!ZsKfA6*OJ zq*km>dzdT9bS5qJCowaZg$3fW>k3-(c-6+3erQ@o1Q&41C=rzerx`tOv9A{uD_6NE zHfEn8q{P(WKzC};SP8Z4g-Djx9khF1=Y z4c#yu|LiMP;`M7oNUsMW#WZa;!!S>31m}#XUI8_N_r$5+8F!J!2rb`)hYI4Bk*>j? z7}{;r&GYSX8f~Z-R-dmpLP271m&6JKkI2wMli^YBhg^gY_5~hR^KD}cYiCndLsWT5 zP5c2`DbolWCNq$yZ;cNhn-9&5d3k9Syu@H^EraohvDy_$MQ{UE_+{p`RW}h~N?p`2 zt55oI5Y|PjRiS_xmIGbh0x*RpK$^r3wRzHb$Pxb&aKd8&(TqPL&S%*FX0MjKT|MW5 z9gk~&R?g>|Mc+VRi|843VT!7SJ3G|N@g{QQ#<_0K<*XvlKLVERj3Q!yo(^_iYBwmV!-}R zKvp`s50`fl9nglb^*9cy9lSuHu|8jf{=u==ZsfZ+%#KEox^EO%;nQ{|0ks-hJM~0? zGaYLxb?hcU9>FU6FxWYY^M)7e@+r=EjGPjQ8C*Yvf)Atbjczr?w_~-k>Pq@=ypb&^ zL>DzeQ#CMtX@ceKU?P-^-!6jwg)(1_x?pB#`?1E`Oa{8VsO?9sto*==vzi4~pTuOH z`fPVwkqb`#)ttdtdTBB_1Xqfuc%LX}W8g5sb46v=e(Sn5I*sljrT<#Op==T1bYE}C zRqm8<*0zo%mw=IgSCUeKpo<2za;TKrOr^g}k ziEZe6V@$q#4Ak8(JgJeM)H01Rfq-<%1=k8y#zi4j!IEnkbp`B1w|J(Qc2=qv(xYvo zuC(cAJAVH{)w&p|!xsk(KC2VHgTG=C*jRmWVP3E>dj4D%VX{2q(3>@ryfl}Gi|hhm z;ZRzqh`wq{O_Q6%4Tg9E160T_Po%aEMw4gK8WtFEB>s$RRKF3{CfX|8_j38RhNqmS z{YDPiu4|v3Or}}y6=etE8wC9!uvsqa_Xh5dM0_DCaoUhU8%ZWnlII?-z-CN3W@)&#{)rlmn4kNX~G(*xQK8*k>U~r^!QU_TB!)naMqRJe`U1oTxj<6k~}H8B|HYwGx-0n!@(P%4&ga+31eSGST9+`dmgI7U{K%e67N?B>%j2vHaYP$Hhug~)>( z$l^DZvDxB!f4cHmPDPRezXYa3Cj|?_JRmF= z1f!LzVgu=f2%3Ao&BVM9%Z$v_&!Z4(|8V66x1@ngjjgOsgzI8Tee|i3K#>kmN$;3& z7ua2)yZVVd^cXH{laVlr-EE0*pba~Z}Z&00}xVI3g}HHZ6NuvX#42) zd@A^@MT-%qYO8d6F}Yg%?o}S7&_YM;RSMy!-0PX@AwM)=)@IuC`TAKert{i|`6udW zXY@MJr3VefGxz(=fyn0hrODx@&G)aP-BRQ`{PvJUEhgO-@V~`6?T6=~X!gm+h zjtu!BF;Cmund{dLd4@*TLR6y5x?`D+751M|)PP87RQ9Kg@gW7X#RQeTO8b&3Zw`4Y zRvji?SS4PFOdt|j;&i~ShxWo{syqlerMZBUD;;^EXQP%jpf~7x$iIDmak>yt{p z^t$gfhy&Aa$dsc0l^;@(`i8Vw3lh0BIcu*UkqrIbnFwtCIf|lEo)SYGY1Dsz%p-n+ zEXwW`gnhUYM#j!>4j&8Fi#%`5iEp!xCO!78QO}a@Xek<rxBxZ=y^- zy|l36BrUJAxBQgG+6da7_N5S*b7Mf-MG*J?7p0MPd7wdvr&n~+rxWXR#qs+c6}@qp zgwb_9kZlSOWo##&DV@OJ#)i#;<7}i;jQ4CWwz^9LX_{S!34Tl;k=0KaKP9Pi&WJbK z)A);3b0qSaxgYo^n=X?to--<|pE&+pQs=hOa0>7hq9nbHpZ`=~jSk!G2P<_*7!El?li=9Z ztH!r!PR4E*u-W7n;l#9qm3C}gF5`P=5@+gI0VFVsjl84S%sozp;6i|aBdEk3dajxH zFo(k!MPN<2l))?_QX|q@2^pNHNO<)s!alCAJf;6Da1wi(`VZIW^{En@60Va>2ePs* zQnZ61oo*bKv0Hp9Z5oq^p+(5?;*nIKH;Dfp*-PjWSJH8<#3 zvg7xElNp-mTtarHuG5%sb6Gqth0O3G1H{2VBsIum5Xz^w>`!PRR-vAI{7i%56q+mD za(>A`qy_DP?Tk!qnvUWcEs;%(AEi6>$UqSfCJVbfNr57K%vyV-iI~5kRzU8lU;U_)z?9g2ml5#?48lZwV*$Oe(N26>2QYm>-8(E z-@eWIvs;D6vQzrlF#f1h?D>7duqj9P{9GM(Fv7|%!%CPN3&SMp2Rm+)MHSY{gWth% zhd*=@bk_nZen7qb3prg5z}}p(^iT}w6^oBvm)Jb8EybY|L`4w_@m$9)cYteA2FE#@ zV6}#&GX-UTSHvamH>GN`UKOxN1n9ZR4K4xC&8}rw%;5xGkYtGqO%;`AS*bbz)W(NL zNHL>Es$C-6waKivyF;y`9o+`&J@Zw=Nl~QmldMFoF>o?; zc1M=jhjB+`jkz&V@m`QUrs0QezZR{_h+fG)KBZ2i#+Y>x7ij7zmTkCyC#BB;-CP8x z_9e_>Gs*|Mw(^6+LMbKqap`c>j!NlS7xV}xmIdehX3$D{?HZw9^dE$Uq4Yic+h(YY zTcM6}=3Q&ezGcse^*Km(G?glbVc`jX-F_AvG79~`5wYWl;rk~XKbJ^eRJvXu(UCJj zAAwpG1gHBs-V=*jxfJV^VTaAyZ_Wp5-OuPCB0ui_}ATK(|x zA7KUCz#TGN87O6d=ah(PhI2brmqgM7>jTR~Lj zu^8omc=cj+1BWKS|f;s8At~G+mLO8)knq2`^L3ATF6ehr9}9XQ)9mJ++ETp z1=yXT93O~wc(lWd0wOyi+8+;Sg~mS6v9yrfIZOFk>KMzOMA^tdA^Y)yUx zzGPx!shu#@G459h($9ZKSE^7BnN*wy%va?HwOLF&#;Eru%H(9N8)@mOi7s(^3U~IZ zvENHh;a}t%;knpo25fThCjc0sV~UHMcd3mr$MU*JCS*wlIr`>ZXCF#eRp>ACmYj-uf@yWkgg!NtxXVKqoaZqfyDKR` zLsYMII3hOOn#j&|IwdvmT5@AWGrP8yc@WADp*BU3^5ngTV~<116Mg)$*jHnn&L{(^ zxhZs%VrqF1+D{WWxV`GLm!@5D9U3rl}fu9%Vu*xm%!mGfS70X#(%y~n)6j{peEQ;Dz?Lkno%M;tWGl1$kMXv_bG@?A2~H8EXh z`&pkKzQ?qdblE3t0r#%dTtg6}i9cCY{kj_&#(aTCgcA6d z2!UJe^{e0M>{$V5tX9Y5d7Z1tdvy-v!0@M02Eq6ZwpAW}v_@VxOZ!cD-VJc=`8WLY)o~QFy@8erQ zITakxzx^-;>%VJmblqp36?{MaIWn&t<(TJ{&$wi6h+!+^DivsKTE@05(_%2VWsQ4q zKiaRC(+ucUy?$B`#84Pew-Zs+CNqp8lkJF71|>%+<#njZDo#kj5SAr^i-9^{BL=k# zs9E}5d+`$5B6m~?+CPNIvE@xX!P8n9T&Z9vjSqu~sHOgTA-t#RH zx%Z0 zxzD(l`kr;8Qu1L`GLR8Hvvc{h3ddU2nANbsr-qAT?c5Bn-L170!Z-RZ4VesJmV1P zDLsk?K5AoPI)0%dW*fIQ(>zvuy_iO8kmf1gpUP7p%cGreqNh{t8YY@IN%S)}QZP-B z-)N_hRJdQe5yBi_X`Du^hFk|vVpR7%@;Z5o9*2-3-tkeO1{B=Sqd;fB_OE= zE{Nvyi>8|PxYu$bCKBV*|J6!xyn*m&n`WZ5B_z&Oz&37*N1{ZWmd|$hw zYa2QhmuZTWr<^I#B7&h?V^nWF9V~m15`)RV*rLtXnPBk6S|xTf1k(BhUB_- zG!qLVbP{Mc$#|($4s0yds)ya|m+MKuyoa6aPT~F>=%@v9J`uW5B39K7Nealn6NlOn z3Ag=>*kx5L>mFUVP)j5o9w_hgvo$>s2%{r*dy=<8{W6Vrx6uC*yKy71@@PLEtc zXnkQA@f9#r3u8QYY=^@dy$DF0&NS0q;vB!otKygr7gM3npw*; zzlj-MRpG;*biJXOjq4W}2cI+^R5BvY**%c)<*IsGcK?u3-}LnOs@R3~J4 zub&*|nr;|)aoS`qw{Nbuz?5(er{=wi7s6OW&F?(r|3o#}qE{t7nfrPuKJ7vLM_lSe z@h5Wi^2wSjlA1Sk7B(yGP$|c%MU92{eh=c$kk#2}FzyUPc(fIzbNK`v=d^=QM|@wJ zN<^D({ePbMZE79!s-*0H_|R&gy>USfYii1~Mz})Eg8&!`XUboW0Oz)_viP9AzBH$Z zwmS6$x=o}T8ysji-V;UB+WoyK6rYX*1R-Z})MEtAkwdOX(SDP)ycY@BwKoma?vy%a z=xdvTuXxI6wgS^iba!RCy%@^bzm;M!NBMT}j-;Xeq*`Ijbq{EcDXd9$MEczdb`NE> zW}P{#bJ)094BZ#P_o-hAuWfKkl-11h@Gm_rnGT?`G~_cGDOI}zD%|4>#YD!pAK7|R zUz#yBKIQN5zg}GSUl%6+qGht9&(avn;F?$(%Ks#?xyyf>SjRlpr9b$mcw@oGEttFC zEo!hc83=>hgs;qKtrTnR;Mw>Ww}Kq0k1E<&pXZElG+UyHUSN6^bsjhV=7S}1Dpit4 zq-)te;O8v<*OrW(gkatT&*l~HFveB^LxUcLpIVGuE={EjH|Dw>Dv}L}9(kmh4Wx%e zX|V|CtEwEd0!T=1B8koEOjOr&;l>q}^L8%c!HSv~Xe6woQD-m~0%r=I=xSdJwN`Id9y;ej<_320N zsf;htVv>=W!WnB}i0h#mofx&PeVh+Y1{uF!%7Nh`h1o=U*#bT>GObM6P; ztg?&>B7*lZ=e3K&=*$%5y0E_8&=?LtKWfmH^>n|kzg5e{88a?O`8j3mkX(4mB?Gbl z`uLAt#O*n;lwN-;8=bH9(tD z8|YpkX-YKf@sW-Hz|q_DVYQ@|ZGG{G_>UR=e|AzGS4=4Yil$K|vvHWh^KH6gy-E%! z1*M7sXg7+W7-LS;;J*2zeW8~Zkx{{kg>HjnpnAoSc5#iraT~y=XCO;B`wo+(g-w!V zQ-u_SPB0XP=oVrOeKlIlo=G~o42BxjN7(WXIyAe`Ne1RxQh(Bh{P~A5Jkx+BTBwG^ zVQ5&Hw=9Y(cs0VRt{)RADM@0cYeKuHQs_nk6zdS2COcH5uuH4KJw!&=yku`z=QJCC z87uQaGW>$mf>X5^Dj73~TWR|lAbB$0^~5>49Q1Et+-+Lr*f0eMZoFpEjUAF@ zsr^OXqw|x=IBFRW$;}KwR8=wt{)r<*;MAL^7jNvmxskqQp^q<-o79Em;jpXwJ~tU? zhWvL%D;B*uJ#sG@=f}pB4hd!Ae1z}h*GQND9`5kdL}oezO?c{BxS;nTBC_YBQ3MGm^lY72kIf;+vl>siEFsr zihtwkTw<%YuVG&_aYi3wfCX3^l}XSgah@{b=ILOJ-#3%g!p@?N$7ZF9v6ynge{2!m za^Z*i6B|*W+%k3?CHe@Q*ZYPKty6Xq7W@FGs$p2I)W$z8?^^zZFvj9*!)OB1nXHc# zQ!t}7H*iDR!U3@E+jww|ij|)dxhaeT$1wM9jh>B!U*eWh!x=G9gfw|MN~4z>G=}Mw zbSu-;2O|2)F(C&@%usHK<~@>^odVP23Tik?`Y%+U(^R1Yz7Q%`Y%S&vn58PF8#8D_ z3DZ<2VMf(_$87zCS$0yr_7D6a(xnST@ojCGO1%~v6;`JdxR0_6}X4&Y?h!aSQ{AXb*S)4YvWjxCwR(67xJ!z4MsI09fP6J^<4Ll6X}SIDYovdUJ%JiXW$ z+-S@cH7hW)8e+eL;Tos5AA9mJqhZOT))7auVMZdki)Tzqn6qlI%~j#ok^g#|jZxOdOH-Afz^-Tdwe&z{MOL)vEqqqzi*Ni7`*;Xq&roW(~Ub)b{z z_D-SZaSgFz*~1u#!7-+Wm6JLC0UniDiH+hfVd+;`AHlxy9M^|IZxtcFG&E~z+-q3p z9B{jn%e_Braoytm$d^oMO2B_LhxckV8$T%?Z|!p|o7%Wy>i9?mP2U}?2hR-v3%^Nr ztVot-F|T)GWXq(xgf6S*=5H$Q+-dI$a9>8J08L&b+mfgx?N^DFV zBLC9i$7Cm{+o32=lkc@eCLaFjr#GI7D@oQs0Nh z>b!Kl_DNc&Si82>knB4)ILdYOFs<<8GNA}mnkEfS#cWP~7}Cgg72)}2{=_ko?H9ba zhd<7N!a3yOgHC$_3p?bD`Tz>!GQk0|>CBhOZVd~Q2d4b8fqVZ^+CTqckL>Ix0|Tv# zwaUS^Mp)x~8}seef!W*YD~bMKsAAE6x3_ZI38HykQwsor{HR_FgVq3p!*$W8haf4P zgf_244_>nmho1Qxen82fUQ1i5pyE;kv*&>X>xgK0LJZD9gnB#ccM#N?U6}ujUk_7H^aFm6EjLVzgInFZt+{|vF7Bo zScZsQwWa%7CKT*F2ZnxB9?)LR9#BXggR4zyY;hifoavv283AiSBUC<)JQt_&XO-lb ztx@M66$wFB^9)Raj{60Z;rr*vsCiBpsaDrkglV%Z*wz;=sjM1G28ytsrUAEl{rAtM zpCq2pi6YDnOoP7$qDJ?EqH+m43aoQq1lCBtuEF+9y2g;ajCJfhSLa*juEO*jZKHiz zdXHh0+lMVK>uaEWy*BJq3J^aFm6+bxEDTOPT$p=Q55#1G8QT8zB6um&L+<@$l^O`! z@MeqJ>*so$JPJLO3x#MU>?^l6Xp#YBM&K#+0Er}s&~Rd z(nxVXp1_*Ixb9v#Y>?HD;_pJ|({*h_7G~!BW{S7BVA81}+{{eeHJ8w!G|Xhjx% zwmu18qvDKF(+G#@op~r7L;VmDo~B>$O~iR; zqICywRKSVQ0GqP-5&-@AM%)640-fI#9ntM~ho`X0?|B6QqgyL73#wz0{{}fJ&J?O( zp(&?PPg&+Py8>c5E`=rVMPE!(q1?#zzvR`eXL&xl(z~prKDWD#FJm(t1dm!29LWlY zV^bt~N4hMsnN&fiJeF{b&Qzv8p^6t<{QL-du-RqynP&J|@473O)ywAA?g z&+|J?_HEboK2rt8=lk4A&E^Q}AJg^Xa2Ii9d7Kz`&ush9q@Ou#d*`JKzD*XY!ymrb z+)airx12-BPWs*rPvLa7D+-)lR@Xq~|0uwJg>5EJZT}3i^MTQgSHBV~B)uSYN|fiZ z5+>t%OV6~cGpAI)V|g5#wf!+Cv&qF$&F5QTrg4H_BaznYW1CyuROIFyWsoW^KPlhKYdtxi}S~y+5x3JtW;BIhBP`((-1_aFY`}URX?{6-`_g8z~ zTr9e~NETEwRih<8JdOMKFx*^tZBS!_SAc0_lwJNnv5oP2}@ZI`j9spW~;lf0PFrq?b8}TNy6JmiVM0^ z^D1enGUklSxYPRx)*Fk3>Z-RjH|QLcLrnorD)*W7(UZ<&;-IDeIP2_6S?K#v6=X$O zf(rNx;4y>`@B%YkHl=ZyzfX<9LJ={Zg}{1BEL8U%c{B>UFBq<81W1_|V!CCvq&4Jy zTo++j+e>9R9`KnJKD$tCoiV-ah8K3eZ0Zf|OSJATSc;^WFDfB`zYsFX(N1?72`Jy=F*@|voC9!^U9EK*I; z@RnH(!)Tesk}eh8pr8Tz)1Pckd)xZxFE8Ut1=Or)?_z9GlfxXr7O8FMVk%`eKl48(du! q{i1PPl7`ePdcIxzDtz(|O){|7`{%2P?#JaiC Date: Thu, 26 Sep 2024 12:48:38 +0800 Subject: [PATCH 02/10] [Localization] ZH_cn fix 9-26 (#4443) * Update absolute-avarice-dialogue.json * Update an-offer-you-cant-refuse-dialogue.json * Update berries-abound-dialogue.json * Update bug-type-superfan-dialogue.json * Update clowning-around-dialogue.json * Update dancing-lessons-dialogue.json * Update dark-deal-dialogue.json * Update delibirdy-dialogue.json * Update dark-deal-dialogue.json * Update fiery-fallout-dialogue.json * Update fight-or-flight-dialogue.json * Update fun-and-games-dialogue.json * Update global-trade-system-dialogue.json * Update lost-at-sea-dialogue.json * Update mysterious-challengers-dialogue.json * Update mysterious-chest-dialogue.json * Update part-timer-dialogue.json * Update safari-zone-dialogue.json * Update shady-vitamin-dealer-dialogue.json * Update slumbering-snorlax-dialogue.json * Update teleporting-hijinks-dialogue.json * Update the-expert-pokemon-breeder-dialogue.json * Update the-pokemon-salesman-dialogue.json * Update the-strong-stuff-dialogue.json * Update the-winstrate-challenge-dialogue.json * Update training-session-dialogue.json * Update trash-to-treasure-dialogue.json * Update uncommon-breed-dialogue.json * Update weird-dream-dialogue.json * Update achv.json * Update bgm-name.json * Update challenges.json * Update fight-ui-handler.json * Update modifier-select-ui-handler.json * Update party-ui-handler.json * Update pokemon-form.json * Update trainer-classes.json * Update trainer-titles.json * Update trainer-classes.json * Update trainer-names.json * Update dialogue.json * Update move.json --- src/locales/zh_CN/achv.json | 4 +- src/locales/zh_CN/bgm-name.json | 10 +- src/locales/zh_CN/challenges.json | 4 +- src/locales/zh_CN/dialogue.json | 74 +++--- src/locales/zh_CN/fight-ui-handler.json | 2 +- .../zh_CN/modifier-select-ui-handler.json | 4 +- src/locales/zh_CN/move.json | 2 +- .../absolute-avarice-dialogue.json | 4 +- .../an-offer-you-cant-refuse-dialogue.json | 6 +- .../berries-abound-dialogue.json | 2 +- .../bug-type-superfan-dialogue.json | 4 +- .../clowning-around-dialogue.json | 4 +- .../dancing-lessons-dialogue.json | 4 +- .../dark-deal-dialogue.json | 4 +- .../delibirdy-dialogue.json | 4 +- .../fiery-fallout-dialogue.json | 4 +- .../fight-or-flight-dialogue.json | 4 +- .../fun-and-games-dialogue.json | 2 +- .../global-trade-system-dialogue.json | 8 +- .../lost-at-sea-dialogue.json | 8 +- .../mysterious-challengers-dialogue.json | 2 +- .../mysterious-chest-dialogue.json | 2 +- .../part-timer-dialogue.json | 12 +- .../safari-zone-dialogue.json | 2 +- .../shady-vitamin-dealer-dialogue.json | 6 +- .../slumbering-snorlax-dialogue.json | 4 +- .../teleporting-hijinks-dialogue.json | 2 +- .../the-expert-pokemon-breeder-dialogue.json | 6 +- .../the-pokemon-salesman-dialogue.json | 8 +- .../the-strong-stuff-dialogue.json | 4 +- .../the-winstrate-challenge-dialogue.json | 2 +- .../training-session-dialogue.json | 4 +- .../trash-to-treasure-dialogue.json | 4 +- .../uncommon-breed-dialogue.json | 6 +- .../weird-dream-dialogue.json | 2 +- src/locales/zh_CN/party-ui-handler.json | 2 +- src/locales/zh_CN/pokemon-form.json | 232 +++++++++--------- src/locales/zh_CN/trainer-classes.json | 48 ++-- src/locales/zh_CN/trainer-names.json | 10 +- src/locales/zh_CN/trainer-titles.json | 4 +- 40 files changed, 260 insertions(+), 260 deletions(-) diff --git a/src/locales/zh_CN/achv.json b/src/locales/zh_CN/achv.json index f5e77dac140..6c3271dde23 100644 --- a/src/locales/zh_CN/achv.json +++ b/src/locales/zh_CN/achv.json @@ -274,7 +274,7 @@ "description": "完成逆转之战挑战\n战挑战之转逆成完" }, "BREEDERS_IN_SPACE": { - "name": "Breeders in Space!", - "description": "Beat the Expert Pokémon Breeder in the Space Biome." + "name": "饲养员上太空?", + "description": "在太空地图中击败精英饲养员。" } } diff --git a/src/locales/zh_CN/bgm-name.json b/src/locales/zh_CN/bgm-name.json index f59a637d7d8..7f13f7bd81f 100644 --- a/src/locales/zh_CN/bgm-name.json +++ b/src/locales/zh_CN/bgm-name.json @@ -94,7 +94,7 @@ "battle_aether_boss": "日月「战斗!露莎米奈」", "battle_skull_boss": "日月「战斗!古兹马」", "battle_macro_boss": "剑盾「战斗!洛兹」", - "battle_star_boss": "SV Cassiopeia Battle", + "battle_star_boss": "剑盾「战斗!仙后」", "abyss": "空之探险队「黑暗小丘」", "badlands": "空之探险队「枯竭之谷」", @@ -113,13 +113,13 @@ "island": "空之探险队「沿岸岩地」", "jungle": "Lmz - 丛林", "laboratory": "Firel - 研究所", - "lake": "Lmz - Lake", + "lake": "Lmz - 湖泊", "meadow": "空之探险队「天空顶端(森林)」", "metropolis": "Firel - 城市", "mountain": "空之探险队「角山」", - "plains": "Firel - Route 888", + "plains": "Firel - 888号公路", "power_plant": "Firel - The Klink", - "ruins": "Lmz - Ancient Ruins", + "ruins": "Lmz - 古代遗迹", "sea": "Andr06 - 海洋之秘", "seabed": "Firel - 海底", "slum": "Andr06 - 狡猾的雪吞虫", @@ -129,7 +129,7 @@ "tall_grass": "空之探险队「浓雾森林」", "temple": "空之探险队「守护洞穴」", "town": "空之探险队「随机迷宫3」", - "volcano": "Firel - Twisturn Volcano", + "volcano": "Firel - 火山曲径", "wasteland": "空之探险队「梦幻高原」", "encounter_ace_trainer": "黑白 「视线!精英训练师」", "encounter_backpacker": "黑白 「视线!背包客」", diff --git a/src/locales/zh_CN/challenges.json b/src/locales/zh_CN/challenges.json index 9351ec96285..faed9920838 100644 --- a/src/locales/zh_CN/challenges.json +++ b/src/locales/zh_CN/challenges.json @@ -22,7 +22,7 @@ }, "freshStart": { "name": "初次尝试", - "desc": "你只能使用御三家,就像是你第一次玩宝可梦肉鸽一样。", + "desc": "你只能使用原始状态的御三家,就像是你开了新号。", "value.0": "关闭", "value.1": "开启" }, @@ -33,4 +33,4 @@ "value.0": "关闭", "value.1": "开启" } -} \ No newline at end of file +} diff --git a/src/locales/zh_CN/dialogue.json b/src/locales/zh_CN/dialogue.json index 3e258de22f6..78f0845b436 100644 --- a/src/locales/zh_CN/dialogue.json +++ b/src/locales/zh_CN/dialogue.json @@ -741,69 +741,69 @@ }, "star_grunt": { "encounter": { - "1": "We're Team Star, kid. We burn so bright, it hurts to look at us!", - "2": "We'll come at you full force - Hasta la vistaaar! ★", - "3": "If you don't clear out real quick-like, I'll hafta come at you in self-defense. You get me?", - "4": "Sorry, but if you don't turn yourself around here, amigo, we'll have to send you packing!", - "4_female": "Sorry, but if you don't turn yourself around here, amiga, we'll have to send you packing!", - "5": "Oh great. Here comes another rando to ruin my day." + "1": "我们是天星队,小子。\n我们光芒四射,都能刺瞎狗眼!", + "2": "我们不会留情!让您星苦了 ★", + "3": "如果你不尽快撤离,我就要正当防卫了。\n你懂我的意思吗?", + "4": "对不起,但是如果你不在这儿打道回府,\n朋友,我们就得打发你走了!", + "4_female": "对不起,但是如果你不在这儿打道回府,\n朋友,我们就得打发你走了!", + "5": "哦,太好了。又来了个神人糟蹋我的一天。" }, "victory": { - "1": "How come I'M the one seeing stars?!", - "2": "You're scary, kid. If you joined Team Star, you'd be looking down from the top in no time!", - "3": "I defended myself all right... But it wasn't enough!", - "4": "H-hasta la vistar... ★", - "5": "I didn't think grunt work for Team Star newbies would be this much of a chore..." + "1": "我怎么会眼冒天星呢?!", + "2": "你好可怕,小子。如果你加入了天星队,\n你很快就会上位的!", + "3": "我保正当防卫了……但还不够!", + "4": "今天星苦了……★", + "5": "我没想到天星队新人的活儿要这么星苦……" } }, "giacomo": { "encounter": { - "1": "You don't really think things through, do ya? Declarin' war on Team Star is a real bad move.", - "2": "I'll play you a sick requiem as you crash and burn. Let's get this party staaarteeed!" + "1": "你真的没有仔细三思过?\n向天星队宣战是一个坏主意。", + "2": "当你崩溃时,我会为你演奏一首美妙的安魂曲。\n让派对开始吧!" }, "victory": { - "1": "Guess that's that...", - "2": "You turned my melody into a threnody..." + "1": "看来到此为止了……", + "2": "你把我的旋律变成了挽歌……" } }, "mela": { "encounter": { - "1": "So you're the dope who picked a fight with Team Star... Prepare to get messed up.", - "2": "All riiight, BRING IT! I'll blow everythin' sky high!" + "1": "所以你就是那个向天星队挑起争端的傻瓜……\n准备好被碾碎吧!", + "2": "好吧,来吧!我会把一切都炸上天!" }, "victory": { - "1": "Ugh. Is this really how it's gonna end? What a hassle...", - "2": "I burned through everythin' I had...and now I've sputtered out." + "1": "呃。这就结束了?真麻烦……", + "2": "我已经耗尽了我拥有的一切……现在我已精疲力尽。" } }, "atticus": { "encounter": { - "1": "You have some nerve baring your fangs at Team Star. Come, then, villainous wretch!", - "2": "Be warned—I shall spare thee no mercy! En garde!" + "1": "你竟敢对星队露出獠牙。来吧,恶棍!", + "2": "准备好,我不会饶过你!预备!" }, "victory": { - "1": "Forgive me, my friends...", - "2": "You have utterly bested me. But thy victory stir'd no bitterness within me—such was its brilliance." + "1": "原谅我,伙计们……", + "2": "你完全打败了我。但你的胜利并没有激起我的痛苦\n……它是如此辉煌。" } }, "ortega": { "encounter": { - "1": "I promise I'll play nice, so don't blame me when this battle sends you blubbering back home!", - "2": "I'll wipe that smug look off your face for sure! You're going down!" + "1": "我保证我很厉害,\n所以让你哭鼻子回家了可不要怪我!", + "2": "我一定会让你脸上的得意洋洋\n的表情消失!你完蛋了!" }, "victory": { - "1": "Ugh! How could I LOSE! What the HECK!", - "2": "Arrrrgggh! That strength of yours is SO. NOT. FAIR." + "1": "啊!?我怎么会输?搞什么?", + "2": "呃啊啊啊!你那实力,开了吧!" } }, "eri": { "encounter": { - "1": "Doesn't matter who you are. I'll bury anyone who tries to take down Team Star!", - "2": "I give as good as I get—that's a promise! We'll see who's left standing in the end!" + "1": "不管你是谁。任何想打败天星队的人都会被我埋葬!", + "2": "我付出会有回报,我很确信!我们看看最后谁能站得住脚!" }, "victory": { - "1": "I'm so sorry, everyone...", - "2": "I gave it my all, but it wasn't enough—I wasn't enough..." + "1": "对不起……大伙……", + "2": "我竭尽全力,但还不够……我还不够……" } }, "rocket_boss_giovanni_1": { @@ -995,24 +995,24 @@ }, "star_boss_penny_1": { "encounter": { - "1": "I'm the big boss of Team Star. The name's Cassiopeia. \n$Now, bow down before the overwhelming might of Team Star's founder!" + "1": "我就是天星队的真老大,名字叫仙后。\n$现在,向天星队屈服吧。" }, "victory": { - "1": "... ... .." + "1": "………………" }, "defeat": { - "1": "Heh..." + "1": "呵……" } }, "star_boss_penny_2": { "encounter": { - "1": "I won't hold back in this battle! I'll stay true to Team Star's code! \n$My Veevee power will crush you into stardust!" + "1": "我不会在这场战斗中退缩!我会忠于天星队的纲领!\n$我的伊布布们会将你碾成星屑!" }, "victory": { - "1": "...It's all over now." + "1": "这下都结束了……" }, "defeat": { - "1": "I can't fault you on your battle skills at all... Considering how the bosses fell at your hands." + "1": "一想到那些队长是如何在被打倒在你手中的,\n我对你的战斗技巧完全挑不出毛病。" } }, "macro_boss_rose_2": { diff --git a/src/locales/zh_CN/fight-ui-handler.json b/src/locales/zh_CN/fight-ui-handler.json index aa8bf4f77c5..c648e8f6793 100644 --- a/src/locales/zh_CN/fight-ui-handler.json +++ b/src/locales/zh_CN/fight-ui-handler.json @@ -4,5 +4,5 @@ "accuracy": "命中", "abilityFlyInText": " {{pokemonName}} 的\n{{passive}}{{abilityName}}", "passive": "被动 ", - "teraHover": "{{type}} 太晶化" + "teraHover": "{{type}}太晶化" } diff --git a/src/locales/zh_CN/modifier-select-ui-handler.json b/src/locales/zh_CN/modifier-select-ui-handler.json index 24b6e205f10..21e707b493d 100644 --- a/src/locales/zh_CN/modifier-select-ui-handler.json +++ b/src/locales/zh_CN/modifier-select-ui-handler.json @@ -9,6 +9,6 @@ "checkTeamDesc": "检查队伍或使用形态改变道具", "rerollCost": "₽{{formattedMoney}}", "itemCost": "₽{{formattedMoney}}", - "continueNextWaveButton": "Continue", - "continueNextWaveDescription": "Continue to the next wave" + "continueNextWaveButton": "继续", + "continueNextWaveDescription": "继续至下一层" } diff --git a/src/locales/zh_CN/move.json b/src/locales/zh_CN/move.json index d20b09f02be..87d9d66d234 100644 --- a/src/locales/zh_CN/move.json +++ b/src/locales/zh_CN/move.json @@ -3725,7 +3725,7 @@ }, "combatTorque": { "name": "格斗暴冲", - "effect": "攻击目标造成伤害,有30%的几\n率使目标陷入麻痹状态。\n此招式可以命中幽灵属性的宝可梦。" + "effect": "攻击目标造成伤害,有30%的几\n率使目标陷入麻痹状态。" }, "magicalTorque": { "name": "魔法暴冲", diff --git a/src/locales/zh_CN/mystery-encounters/absolute-avarice-dialogue.json b/src/locales/zh_CN/mystery-encounters/absolute-avarice-dialogue.json index 6637d3ff7ed..36bec1d1d64 100644 --- a/src/locales/zh_CN/mystery-encounters/absolute-avarice-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/absolute-avarice-dialogue.json @@ -1,7 +1,7 @@ { - "intro": "一个{{greedentName}}埋伏了你\\n并且偷走了你队伍携带的树果!", + "intro": "一个{{greedentName}}埋伏了你\n并且偷走了你队伍携带的树果!", "title": "贪得无厌", - "description": "{{greedentName}}让你措手不及,现在你所有的树果都被夺走了!\n\n{{greedentName}}正要吃掉它们时,突然停下来饶有兴趣地看着你。", + "description": "{{greedentName}}让你措手不及,\n现在你所有的树果都被夺走了!\n\n{{greedentName}}正要吃掉它们时,\n突然停下来饶有兴趣地看着你。", "query": "你要怎么做?", "option": { "1": { diff --git a/src/locales/zh_CN/mystery-encounters/an-offer-you-cant-refuse-dialogue.json b/src/locales/zh_CN/mystery-encounters/an-offer-you-cant-refuse-dialogue.json index d920e4e52d1..62c1c116542 100644 --- a/src/locales/zh_CN/mystery-encounters/an-offer-you-cant-refuse-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/an-offer-you-cant-refuse-dialogue.json @@ -1,9 +1,9 @@ { "intro": "一名看上去就很有钱的小男孩拦住了你。", "speaker": "富家子弟", - "intro_dialogue": "向你问好。$你的{{strongestPokemon}}看起来举世无双,我挪不开我的眼睛了!\n$我一直也想要一只那样的宝可梦!$你的报酬不会少的,\n这个老家伙也可以送给你!", + "intro_dialogue": "向你问好。$你的{{strongestPokemon}}看起来举世无双,我挪不开我的眼睛了!\n我一直也想要一只那样的宝可梦!$你的报酬不会少的,\n这个老家伙也可以送给你!", "title": "难以拒绝的买卖", - "description": "对方愿意为了你的{{strongestPokemon}}出一个@[TOOLTIP_TITLE]{闪光护符}和{{price, money}}。\n\n这交易非常值得,但是你真的舍得放弃如此强大的伙伴吗?", + "description": "对方愿意为了你的{{strongestPokemon}}\n出一个@[TOOLTIP_TITLE]{闪光护符}和{{price, money}}。\n\n这交易非常值得,但是你真的舍得\n送走如此强大的伙伴吗?", "query": "你要怎么做?", "option": { "1": { @@ -14,7 +14,7 @@ "2": { "label": "敲诈他", "tooltip": "(+){{option2PrimaryName}}使用{{moveOrAbility}}\n(+)获得{{price, money}}", - "tooltip_disabled": "你的宝可梦需要具备某些特性或招式才能选择此项", + "tooltip_disabled": "你的宝可梦需要具备某些\n特性或招式才能选择此项", "selected": "我的天,你抢劫我。{{liepardName}},走了!$我要找律师告你!" }, "3": { diff --git a/src/locales/zh_CN/mystery-encounters/berries-abound-dialogue.json b/src/locales/zh_CN/mystery-encounters/berries-abound-dialogue.json index 9e2240e2aea..8856d3c45c2 100644 --- a/src/locales/zh_CN/mystery-encounters/berries-abound-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/berries-abound-dialogue.json @@ -1,7 +1,7 @@ { "intro": "宝可梦旁边\n有着巨大的树果丛!", "title": "硕“果”累累", - "description": "似乎有强大的宝可梦守护着树果丛。\n最简单的方法是战斗,但它的实力不容小觑。\n也许一只速度很快的宝可梦可以乘机顺走一些树果?", + "description": "似乎有强大的宝可梦守护着树果丛。\n最简单的方法是战斗,\n但它的实力不容小觑。\n也许一只速度很快的宝可梦\n可以乘机顺走一些树果?", "query": "你要怎么做?", "berries": "树果!!", "option": { diff --git a/src/locales/zh_CN/mystery-encounters/bug-type-superfan-dialogue.json b/src/locales/zh_CN/mystery-encounters/bug-type-superfan-dialogue.json index c63c74dc248..e66759d1955 100644 --- a/src/locales/zh_CN/mystery-encounters/bug-type-superfan-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/bug-type-superfan-dialogue.json @@ -14,7 +14,7 @@ "2": { "label": "展示虫宝可梦", "tooltip": "(+)获得一件道具", - "disabled_tooltip": "你需要至少携带一只虫系宝可梦", + "disabled_tooltip": "你需要至少携带\n一只虫系宝可梦", "selected": "你向训练师展示了你所有的虫系宝可梦", "selected_0_to_1": "哈?你才有{{numBugTypes}}。$你对我来说真是浪费时间。", "selected_2_to_3": "嘿,你有{{numBugTypes}}!\n不错。$来,这能帮你多抓点虫虫。", @@ -24,7 +24,7 @@ "3": { "label": "赠送虫系道具", "tooltip": "(-)给予训练师{{requiredBugItems}}\n(+)得到一件礼物", - "disabled_tooltip": "你需要一件{{requiredBugItems}}才能选择", + "disabled_tooltip": "你需要一件{{requiredBugItems}}\n才能选择", "select_prompt": "选择一件道具", "invalid_selection": "宝可梦未持有该类道具", "selected": "你递交了{{selectedItem}}.", diff --git a/src/locales/zh_CN/mystery-encounters/clowning-around-dialogue.json b/src/locales/zh_CN/mystery-encounters/clowning-around-dialogue.json index 5eb739e3b18..127a5efc377 100644 --- a/src/locales/zh_CN/mystery-encounters/clowning-around-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/clowning-around-dialogue.json @@ -3,13 +3,13 @@ "speaker": "小丑", "intro_dialogue": "小丑踩高跷,战斗要来到!\n吵吵闹闹,将你打倒!", "title": "小丑闹剧", - "description": "有点不对劲,这小丑想要挑衅你,\n目的是什么呢?\n尤其是那{{blacephalonName}}看起来非常奇怪,就好像它有着@[TOOLTIP_TITLE]{与众不同的属性和特性。}", + "description": "有点不对劲,这小丑想要挑衅你,\n目的是什么呢?\n尤其是那{{blacephalonName}}看起来非常奇怪,\n就好像它有着\n@[TOOLTIP_TITLE]{与众不同的属性和特性。}", "query": "你要怎么做?", "option": { "1": { "label": "与小丑战斗", "tooltip": "(-)奇妙的战斗\n(?)影响宝可梦特性", - "selected": "你可怜的宝可梦正准备进行可悲的表演!", + "selected": "你可怜的宝可梦正准备上演可悲的马戏!", "apply_ability_dialogue": "精彩的演出!\n出色的指挥与夺目的招式相得益彰!", "apply_ability_message": "小丑将永久地将你的一只宝可梦的特性交换为{{ability}}!", "ability_prompt": "你想永久地教会一只宝可梦{{ability}}吗?", diff --git a/src/locales/zh_CN/mystery-encounters/dancing-lessons-dialogue.json b/src/locales/zh_CN/mystery-encounters/dancing-lessons-dialogue.json index e1818ce06c1..57f9ca27e8b 100644 --- a/src/locales/zh_CN/mystery-encounters/dancing-lessons-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/dancing-lessons-dialogue.json @@ -1,7 +1,7 @@ { "intro": "一位{{oricorioName}}正孤独起舞,没有舞伴。", "title": "舞蹈课", - "description": "{{oricorioName}}并不咄咄逼人,反而有些哀伤。\n\n也许他只想找个人一起跳舞…", + "description": "{{oricorioName}}并不咄咄逼人,\n反而有些哀伤。\n\n也许他只想找个人一起跳舞…", "query": "你要怎么做?", "option": { "1": { @@ -18,7 +18,7 @@ "3": { "label": "表演一支舞蹈", "tooltip": "(-)教{{oricorioName}}一支舞蹈\n(+){{oricorioName}}会喜欢你", - "disabled_tooltip": "你的宝可梦需要习得一种舞蹈动作。", + "disabled_tooltip": "你的宝可梦需要\n习得一种舞蹈动作。", "select_prompt": "选择一个舞蹈招式", "selected": "{{oricorioName}}着迷地观看着\n{{selectedPokemon}}展示{{selectedMove}}!$它喜欢这场表演!$@s{level_up_fanfare}{{oricorioName}}想要加入你的队伍!" } diff --git a/src/locales/zh_CN/mystery-encounters/dark-deal-dialogue.json b/src/locales/zh_CN/mystery-encounters/dark-deal-dialogue.json index 82863084de7..e2fd316f9f3 100644 --- a/src/locales/zh_CN/mystery-encounters/dark-deal-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/dark-deal-dialogue.json @@ -1,11 +1,11 @@ { - "intro": "一个穿着破旧大衣的陌生人\\n挡在你的路上…", + "intro": "一个穿着破旧大衣的陌生人\n\n挡在你的路上…", "speaker": "可疑的家伙", "intro_dialogue": "嘿,你!我一直在研究一种新装置,\n能让宝可梦从原子级重组,变成更强大的形态!\n嘿嘿…@d{64}我只需要一点祭…@d{32}\n我是说,试验品,来证明它的效果。", "title": "黑暗交易", - "description": "这个诡异的家伙举起一些精灵球。\n我会让你感到物超所值的!\n我只要你队伍里的一只宝可梦,这些强力的精灵球就是你的了,嘿嘿…", + "description": "这个诡异的家伙举起一些精灵球。\n我会让你感到物超所值的!\n我只要你队伍里的一只宝可梦,\n这些强力的精灵球就是你的了,嘿嘿…", "query": "你要怎么做?", "option": { "1": { diff --git a/src/locales/zh_CN/mystery-encounters/delibirdy-dialogue.json b/src/locales/zh_CN/mystery-encounters/delibirdy-dialogue.json index 82b114b401b..3a15f5f98be 100644 --- a/src/locales/zh_CN/mystery-encounters/delibirdy-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/delibirdy-dialogue.json @@ -3,7 +3,7 @@ { "intro": "一伙{{delibirdName}}出现了!", "title": "信使鸟快递", - "description": "{{delibirdName}}满怀期待地看着你,它们好像想要什么东西。\\n也许给它们一件道具或一些钱能让它们满意?", + "description": "{{delibirdName}}满怀期待地看着你,\n它们好像想要什么东西。\n\n也许给它们一件道具或一些钱能让它们满意?", "query": "你要给它们什么?", "invalid_selection": "宝可梦身上并没有那种道具。", "option": { @@ -14,7 +14,7 @@ }, "2": { "label": "给吃的", - "tooltip": "(-)给予{{delibirdName}}们树果或复活之种\n(+)获得一件礼物", + "tooltip": "(-)给予{{delibirdName}}们\n树果或复活之种\n(+)获得一件礼物", "select_prompt": "选择要给予的道具", "selected": "你向{{delibirdName}}们扔了点{{chosenItem}},\n它们兴奋地互相嚷嚷着。$信使鸟们转向你并高兴地给你一份礼物!" }, diff --git a/src/locales/zh_CN/mystery-encounters/fiery-fallout-dialogue.json b/src/locales/zh_CN/mystery-encounters/fiery-fallout-dialogue.json index 7113ecab2a1..aa50ee7991d 100644 --- a/src/locales/zh_CN/mystery-encounters/fiery-fallout-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/fiery-fallout-dialogue.json @@ -1,7 +1,7 @@ { "intro": "你遭遇了一场烟灰风暴!", "title": "炽热余波", - "description": "呼啸的火山灰和余烬使能见度几乎为零。\n看来可能有什么…东西造成了这种状况。\n但到底会是什么呢?", + "description": "呼啸的火山灰和余烬\n使能见度几乎为零。\n看来可能有什么…东西\n造成了这种状况。\n但到底会是什么呢?", "query": "你要怎么做?", "option": { "1": { @@ -18,7 +18,7 @@ "3": { "label": "让火系宝可梦帮忙", "tooltip": "(+)解决困境\n(+)获得木炭", - "disabled_tooltip": "你至少需要两只火系宝可梦来选择", + "disabled_tooltip": "你至少需要两只\n火系宝可梦来选择", "selected": "你的{{option3PrimaryName}}和{{option3SecondaryName}}引导你发现了两只{{volcaronaName}}正在求偶起舞的地方!$幸运的是,你的宝可梦能够让它们平静下来,\n然后它们就平安离开了。" } }, diff --git a/src/locales/zh_CN/mystery-encounters/fight-or-flight-dialogue.json b/src/locales/zh_CN/mystery-encounters/fight-or-flight-dialogue.json index e60a73e885f..9ab8256e59f 100644 --- a/src/locales/zh_CN/mystery-encounters/fight-or-flight-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/fight-or-flight-dialogue.json @@ -1,7 +1,7 @@ { "intro": "宝可梦附近的地上\n有闪闪发光的东西!", "title": "战逃反应", - "description": "似乎有强大的宝可梦守护着这一道具。\n战斗是最直接的方法,但是它的实力似乎不容小觑。\n如果你有合适的宝可梦,似乎也可以直接偷走它。", + "description": "似乎有强大的宝可梦守护着这一道具。\n战斗是最直接的方法,但是\n它的实力似乎不容小觑。\n如果你有合适的宝可梦,\n似乎也可以直接偷走它。", "query": "你要怎么做?", "option": { "1": { @@ -12,7 +12,7 @@ }, "2": { "label": "窃取物品", - "disabled_tooltip": "你的宝可梦需要习得特定的招式来选择。", + "disabled_tooltip": "你的宝可梦需要习得\n特定的招式来选择。", "tooltip": "(+){{option2PrimaryName}}使用{{option2PrimaryMove}}", "selected": ".@d{32}.@d{32}.@d{32}$你的{{option2PrimaryName}}愿意帮忙,并使用了{{option2PrimaryMove}}!$你偷走了道具!" }, diff --git a/src/locales/zh_CN/mystery-encounters/fun-and-games-dialogue.json b/src/locales/zh_CN/mystery-encounters/fun-and-games-dialogue.json index d732a2444bd..5ac788b51ba 100644 --- a/src/locales/zh_CN/mystery-encounters/fun-and-games-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/fun-and-games-dialogue.json @@ -2,7 +2,7 @@ "intro_dialogue": "来看看吧,大伙!\n在这全新的{{wobbuffetName}}捶捶乐上试试运气!\n", "speaker": "艺人", "title": "快乐游戏!", - "description": "你遇到了一个有奖游戏活动!\n你有 @[TOOLTIP_TITLE]{3 回合}的时间来在\n@[TOOLTIP_TITLE]{不打倒}{{wobbuffetName}}的情况下将它尽可能的打到@[TOOLTIP_TITLE]{1血}\n这样,它就能通过反作用力在敲钟器上打出超高数字!\n但要小心!如果你不小心打倒了{{wobbuffetName}},你就得付医疗费!", + "description": "你遇到了一个有奖游戏活动!\n你有 @[TOOLTIP_TITLE]{3 回合}的时间来在\n@[TOOLTIP_TITLE]{不打倒}{{wobbuffetName}}的情况下将它尽可能的打到@[TOOLTIP_TITLE]{1血}\n这样,它就能通过反作用力\n在敲钟器上打出超高数字!\n但要小心!如果你不小心打倒了{{wobbuffetName}},\n你就得付医疗费!", "query": "要试试么?", "option": { "1": { diff --git a/src/locales/zh_CN/mystery-encounters/global-trade-system-dialogue.json b/src/locales/zh_CN/mystery-encounters/global-trade-system-dialogue.json index edc83ed5f08..4b0d2e84edc 100644 --- a/src/locales/zh_CN/mystery-encounters/global-trade-system-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/global-trade-system-dialogue.json @@ -1,22 +1,22 @@ { "intro": "是GTS系统的交互面板!", "title": "全球交换系统(GTS)", - "description": "啊,GTS!科学的奇迹,\\n你可以与世界各地的任何人联系,与他们交换宝可梦!\\n今天你的交换会有好运吗?", + "description": "啊,GTS!科学的奇迹,\\nn你可以与世界各地的任何人联系,\n与他们交换宝可梦!\n今天你的交换会有好运吗?", "query": "你要怎么做?", "option": { "1": { "label": "查找交换请求", - "tooltip": "(+)为一只宝可梦选择交换", + "tooltip": "(+)为一只宝可梦\n选择交换", "trade_options_prompt": "选择一只要通过交换接收的神奇宝贝。" }, "2": { "label": "奇迹交换", - "tooltip": "(+)将你的一只宝可梦送至GTS,并获得一只随机宝可梦作为回报" + "tooltip": "(+)将一只宝可梦送至GTS,\n并获得一只随机宝可梦" }, "3": { "label": "道具交换", "trade_options_prompt": "选择要发送的道具", - "invalid_selection": "这只宝可梦没有合法道具可以被交换。", + "invalid_selection": "这只宝可梦没有合法道具\n可以被交换。", "tooltip": "(+)将你的一件道具发送到GTS并获得一件随机新道具" }, "4": { diff --git a/src/locales/zh_CN/mystery-encounters/lost-at-sea-dialogue.json b/src/locales/zh_CN/mystery-encounters/lost-at-sea-dialogue.json index 9d769e99d83..f3231b2a429 100644 --- a/src/locales/zh_CN/mystery-encounters/lost-at-sea-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/lost-at-sea-dialogue.json @@ -1,26 +1,26 @@ { "intro": "在大海中漫无目的地游荡,无处可循。", "title": "迷失大海", - "description": "这片海域波涛汹涌,你的体力即将耗尽。\\n太糟了,有什么办法么?", + "description": "这片海域波涛汹涌,\n你的体力即将耗尽。\n太糟了,有什么办法么?", "query": "你要怎么做?", "option": { "1": { "label": "{{option1PrimaryName}}可以帮忙", "label_disabled": "无法{{option1RequiredMove}}", "tooltip": "(+){{option1PrimaryName}}帮助你\n(+){{option1PrimaryName}}获得经验值", - "tooltip_disabled": "你没有宝可梦能够{{option1RequiredMove}}", + "tooltip_disabled": "你没有宝可梦\n能够{{option1RequiredMove}}", "selected": "{{option1PrimaryName}}游在前面,引导你回到正轨。${{option1PrimaryName}}似乎也在这次需要它的时候变得更强大了!" }, "2": { "label": "{{option2PrimaryName}}可以帮忙", "label_disabled": "无法{{option2RequiredMove}}", "tooltip": "(+){{option2PrimaryName}}帮助你\n(+){{option2PrimaryName}}获得经验值", - "tooltip_disabled": "你没有宝可梦能够{{option2RequiredMove}}", + "tooltip_disabled": "你没有宝可梦\n能够{{option2RequiredMove}}", "selected": "{{option2PrimaryName}}飞在你的船前面,引导你回到正轨。在这次需要它的时候,${{option2PrimaryName}}似乎也变得更强大了!" }, "3": { "label": "漫无目的地漂流", - "tooltip": "(-)每一只宝可梦损失{{damagePercentage}}%的HP", + "tooltip": "(-)每一只宝可梦\n损失{{damagePercentage}}%的HP", "selected": "你在船上漂浮,漫无目的地航行,直到最后发现了一个你记得的地标。$你和你的宝可梦因整个经历而疲惫不堪。" } }, diff --git a/src/locales/zh_CN/mystery-encounters/mysterious-challengers-dialogue.json b/src/locales/zh_CN/mystery-encounters/mysterious-challengers-dialogue.json index 574c577127c..44f76a24fea 100644 --- a/src/locales/zh_CN/mystery-encounters/mysterious-challengers-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/mysterious-challengers-dialogue.json @@ -1,7 +1,7 @@ { "intro": "神秘的挑战者出现了!", "title": "神秘挑战者", - "description": "如果你击败了挑战者,你给他们留下的强烈印象可能会换来奖励。\\n但他们看起来很强,要接受挑战么?", + "description": "如果你击败了挑战者,\n你给他们留下的强烈印象\n可能会换来奖励。\n但他们看起来很强,\n要接受挑战么?", "query": "你要接受谁的挑战?", "option": { "1": { diff --git a/src/locales/zh_CN/mystery-encounters/mysterious-chest-dialogue.json b/src/locales/zh_CN/mystery-encounters/mysterious-chest-dialogue.json index 2ccba9215ae..ff01386ca59 100644 --- a/src/locales/zh_CN/mystery-encounters/mysterious-chest-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/mysterious-chest-dialogue.json @@ -1,7 +1,7 @@ { "intro": "你发现了一个…@d{32}宝箱?", "title": "神秘宝箱", - "description": "一个装饰精美的箱子立在地上。里面一定有好东西…吧?", + "description": "一个装饰精美的箱子立在地上。\n里面一定有好东西…吧?", "query": "要打开么?", "option": { "1": { diff --git a/src/locales/zh_CN/mystery-encounters/part-timer-dialogue.json b/src/locales/zh_CN/mystery-encounters/part-timer-dialogue.json index 437a34ecd1a..ed093b9fb6b 100644 --- a/src/locales/zh_CN/mystery-encounters/part-timer-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/part-timer-dialogue.json @@ -3,25 +3,25 @@ "speaker": "工人", "intro_dialogue": "你看起来有不少能干的宝可梦!\n如果你愿意帮忙干点活,我们会付钱的!", "title": "兼职", - "description": "似乎有不少活要干。根据你宝可梦对任务的适应度,\n你能获得或多或少的报酬。", + "description": "似乎有不少活要干。\n根据你宝可梦对任务的适应度,\n你能获得或多或少的报酬。", "query": "你要干什么活?", "invalid_selection": "宝可梦必须足够健康", "option": { "1": { "label": "外卖", - "tooltip": "(-)宝可梦使用速度\n(+)赚取@[MONEY]{Money}", + "tooltip": "(-)使用速度\n(+)赚取@[MONEY]{金钱}", "selected": "您的{{selectedPokemon}}轮班为客户配送订单。" }, "2": { "label": "仓管", - "tooltip": "(-)宝可梦使用力量和耐力\n(+)赚取@[MONEY]{Money}", + "tooltip": "(-)使用力量和耐力\n(+)赚取@[MONEY]{金钱}", "selected": "你的{{selectedPokemon}}轮班工作,在仓库内搬运物品。" }, "3": { "label": "销售", - "tooltip": "(-)你的{{option3PrimaryName}}使用{{option3PrimaryMove}}\n(+)赚取@[MONEY]{Money}", - "disabled_tooltip": "你的宝可梦需要习得适合这份工作的招式", - "selected": "你的{{option3PrimaryName}}花费一天时间使用{{option3PrimaryMove}}来吸引客户!" + "tooltip": "(-)你的{{option3PrimaryName}}使用{{option3PrimaryMove}}\n(+)赚取@[MONEY]{金钱}", + "disabled_tooltip": "你的宝可梦需要习得\n适合这份工作的招式", + "selected": "你的{{option3PrimaryName}}花费一天时间\n使用{{option3PrimaryMove}}来吸引客户!" } }, "job_complete_good": "谢谢你的帮助!\n你的{{selectedPokemon}}帮了大忙了!这是你的日结。", diff --git a/src/locales/zh_CN/mystery-encounters/safari-zone-dialogue.json b/src/locales/zh_CN/mystery-encounters/safari-zone-dialogue.json index b8a17aaccf4..6e31593a1f2 100644 --- a/src/locales/zh_CN/mystery-encounters/safari-zone-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/safari-zone-dialogue.json @@ -1,7 +1,7 @@ { "intro": "到狩猎地带了!", "title": "狩猎地带", - "description": "这里有各种稀有和特殊的宝可梦!\n如果选择进入,你将有3次机会遇到野生宝可梦,供你捕获。\n但注意了,它们可能会在你捕捉到之前逃走!", + "description": "这里有各种稀有和特殊的宝可梦!\n如果选择进入,你将有3次机会\n遇到野生宝可梦,供你捕获。\n但注意了,它们可能会在你捕捉到之前逃走!", "query": "要进去试试吗?", "option": { "1": { diff --git a/src/locales/zh_CN/mystery-encounters/shady-vitamin-dealer-dialogue.json b/src/locales/zh_CN/mystery-encounters/shady-vitamin-dealer-dialogue.json index 570035d8670..359376eca3d 100644 --- a/src/locales/zh_CN/mystery-encounters/shady-vitamin-dealer-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/shady-vitamin-dealer-dialogue.json @@ -3,17 +3,17 @@ "speaker": "可疑的销售", "intro_dialogue": ".@d{16}.@d{16}.@d{16}\n我有货,要来点么?\n当然,你的宝可梦得顶得住。", "title": "营养饮料商人", - "description": "男子打开外套,露出一些宝可梦营养饮料。\n他报出的数字非常划算。有点太划算了…\n他提供两种套餐供你选择。", + "description": "男子打开外套,\n露出一些宝可梦营养饮料。\n他报出的数字非常划算。\n有点太划算了…\n他还提供两种套餐供你选择。", "query": "你要选哪一种?", "invalid_selection": "宝可梦必须足够健康", "option": { "1": { "label": "经济套餐", - "tooltip": "(-)支付{{option1Money, money}}\n(-)副作用?\n(+)选择的宝可梦获得两份随机努力药" + "tooltip": "(-)支付{{option1Money, money}}\n(-)副作用?\n(+)选择的宝可梦获得\n两份随机努力药" }, "2": { "label": "高级套餐", - "tooltip": "(-)支付{{option2Money, money}}\n(+)选择的宝可梦获得两份随机努力药" + "tooltip": "(-)支付{{option2Money, money}}\n(+)选择的宝可梦获得\n两份随机努力药" }, "3": { "label": "离开", diff --git a/src/locales/zh_CN/mystery-encounters/slumbering-snorlax-dialogue.json b/src/locales/zh_CN/mystery-encounters/slumbering-snorlax-dialogue.json index a9dda26cd2d..ee3109e3a1f 100644 --- a/src/locales/zh_CN/mystery-encounters/slumbering-snorlax-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/slumbering-snorlax-dialogue.json @@ -1,7 +1,7 @@ { "intro": "当你走在一条狭窄的小路上时,\n一个高耸的身影挡住了你的去路。\n当你走近时,你看到了一个{{snorlaxName}}正在酣睡。\n似乎没有办法绕过它。", "title": "沉睡的{{snorlaxName}}", - "description": "你可以攻击它来让它醒来,要么就等它睡醒。\n谁知道要等多久呢?", + "description": "你可以攻击它来让它醒来,\n要么就等它睡醒。\n谁知道要等多久呢?", "query": "你要怎么做?", "option": { "1": { @@ -18,7 +18,7 @@ "3": { "label": "偷摸", "tooltip": "(+){{option3PrimaryName}}使用{{option3PrimaryMove}}\n(+)特别的奖励", - "disabled_tooltip": "宝可梦需要习得特别的招式来选择", + "disabled_tooltip": "宝可梦需要习得\n特别的招式来选择", "selected": "你的{{option3PrimaryName}}使用{{option3PrimaryMove}}!$@s{item_fanfare}它从熟睡的\n{{snorlaxName}}身上偷走了吃剩的东西,简直像个怪盗!" } } diff --git a/src/locales/zh_CN/mystery-encounters/teleporting-hijinks-dialogue.json b/src/locales/zh_CN/mystery-encounters/teleporting-hijinks-dialogue.json index 5b4fbf614d8..ce0d0d44843 100644 --- a/src/locales/zh_CN/mystery-encounters/teleporting-hijinks-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/teleporting-hijinks-dialogue.json @@ -12,7 +12,7 @@ "2": { "label": "宝可梦帮忙", "tooltip": "(-){{option2PrimaryName}}帮忙\n(+){{option2PrimaryName}}获得经验\n(?)传送至随机地图", - "disabled_tooltip": "你需要一只钢系或电系宝可梦来选择此项", + "disabled_tooltip": "你需要一只钢系或\n电系宝可梦来选择此项", "selected": "{{option2PrimaryName}}的类型允许你绕过机器的付费装置!$胶囊打开,你走进去……" }, "3": { diff --git a/src/locales/zh_CN/mystery-encounters/the-expert-pokemon-breeder-dialogue.json b/src/locales/zh_CN/mystery-encounters/the-expert-pokemon-breeder-dialogue.json index 4ab42a61264..057bc6847c1 100644 --- a/src/locales/zh_CN/mystery-encounters/the-expert-pokemon-breeder-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/the-expert-pokemon-breeder-dialogue.json @@ -1,10 +1,10 @@ { "intro": "这是一位携带大量神奇宝贝蛋的训练师!", - "intro_dialogue": "嘿,训练师!$看起来你的一些\n宝可梦感觉有点沮丧。$为什么不和我打一场来让它们兴奋一下呢?", + "intro_dialogue": "嘿,训练师!$看起来你的一些\n宝可梦感觉有点沮丧。$为什么不和我打一场\n来让它们兴奋一下呢?", "title": "专业饲养员", - "description": "你被发起了一场@[TOOLTIP_TITLE]{只能使用一只宝可梦}的挑战。\n这可能很难,但它肯定会\n加深你与所选神奇宝贝之间的联系!\n如果你赢了,饲养员还会给你一些@[TOOLTIP_TITLE]{蛋}!", + "description": "你被发起了一场\n@[TOOLTIP_TITLE]{只能使用一只宝可梦}的挑战。\n这可能很难,但它肯定会\n加深你与所选宝可梦之间的牵绊!\n如果你赢了,饲养员还会\n给你一些@[TOOLTIP_TITLE]{蛋}!", "query": "Who will you battle with?", - "cleffa_1_nickname": "王牌", + "cleffa_1_nickname": "超级王牌", "cleffa_2_nickname": "皮氪稀", "cleffa_3_nickname": "帝王{{speciesName}}", "option": { diff --git a/src/locales/zh_CN/mystery-encounters/the-pokemon-salesman-dialogue.json b/src/locales/zh_CN/mystery-encounters/the-pokemon-salesman-dialogue.json index 1f8c91cf4ca..c0c2c419650 100644 --- a/src/locales/zh_CN/mystery-encounters/the-pokemon-salesman-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/the-pokemon-salesman-dialogue.json @@ -3,14 +3,14 @@ "speaker": "绅士", "intro_dialogue": "你好啊!我有一份专门为你准备的好买卖!", "title": "宝可梦销售员", - "description": "“这个{{purchasePokemon}}非常独特,拥有该物种通常不具备的特性!只需{{price, money}}就让你拥有这个与众不同的{{purchasePokemon}}!”\n\n“你怎么说?”", - "description_shiny": "“这个{{purchasePokemon}}非常独特,拥有该物种非常不寻常的颜色!只需{{price, money}}就让你拥有这个与众不同的{{purchasePokemon}}!”\n\n“你怎么说?”", + "description": "“这个{{purchasePokemon}}非常独特,\n拥有该物种通常不具备的特性!只需{{price, money}}就让你拥有\n这个与众不同的{{purchasePokemon}}!”\n\n“你怎么说?”", + "description_shiny": "“这个{{purchasePokemon}}非常独特,\n拥有该物种非常不寻常的颜色!只需{{price, money}}就让你拥有\n这个与众不同的{{purchasePokemon}}!”\n\n“你怎么说?”", "query": "你要怎么做?", "option": { "1": { "label": "接受", - "tooltip": "(-)支付{{price, money}}\n(+)获得{{purchasePokemon}}和它的隐藏特性", - "tooltip_shiny": "(-)支付{{price, money}}\n(+)获得一只闪光的{{purchasePokemon}}", + "tooltip": "(-)支付{{price, money}}\n(+)获得{{purchasePokemon}}和\n它的隐藏特性", + "tooltip_shiny": "(-)支付{{price, money}}\n(+)获得一只闪光的\n{{purchasePokemon}}", "selected_message": "你花了一大笔钱买了{{purchasePokemon}}.", "selected_dialogue": "非常好的选择!$我看得出来你对商业有敏锐的眼光。$哦,对了……@d{64}不接受退货,你懂吗?" }, diff --git a/src/locales/zh_CN/mystery-encounters/the-strong-stuff-dialogue.json b/src/locales/zh_CN/mystery-encounters/the-strong-stuff-dialogue.json index 170ce3193df..d7455cbe472 100644 --- a/src/locales/zh_CN/mystery-encounters/the-strong-stuff-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/the-strong-stuff-dialogue.json @@ -1,12 +1,12 @@ { "intro": "眼前是一个巨大的{{shuckleName}}而看起来\n有一大壶……果汁?", "title": "满满当当", - "description": "挡住你去路的{{shuckleName}}看起来异常强大。与此同时,它旁边的果汁散发着某种力量。\n\n{{shuckleName}}向你伸出了触角。它似乎想做些什么……", + "description": "挡住你去路的{{shuckleName}}\n看起来异常强大。与此同时,它旁边的果汁\n散发着某种力量。\n\n{{shuckleName}}向你伸出了触角。\n它似乎想做些什么……", "query": "你要怎么做?", "option": { "1": { "label": "接近{{shuckleName}}", - "tooltip": "(?)可能会发生一些可怕或惊奇的事情", + "tooltip": "(?)可能会发生一些\n可怕或惊奇的事情", "selected": "你眼前一黑", "selected_2": "@f{150}当你醒来时,{{shuckleName}}不见了。\n并且壶里的果汁完全耗尽。${{highBstPokemon1}}和{{highBstPokemon2}}\n觉得一阵可怕的无力感袭来!$他们的基础属性减少了{{reductionValue}}!$然而,你剩下的神奇宝贝却感到精力充沛!\n他们的基础属性增加了{{increaseValue}}!" }, diff --git a/src/locales/zh_CN/mystery-encounters/the-winstrate-challenge-dialogue.json b/src/locales/zh_CN/mystery-encounters/the-winstrate-challenge-dialogue.json index ecd7d336136..b5256d0bd95 100644 --- a/src/locales/zh_CN/mystery-encounters/the-winstrate-challenge-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/the-winstrate-challenge-dialogue.json @@ -3,7 +3,7 @@ "speaker": "连胜家族", "intro_dialogue": "我们是连胜家族!$你觉得和我们一家人来一场宝可梦车轮战怎么样?", "title": "连胜家族的挑战", - "description": "连胜家族由 5 名训练师组成,他们想要战斗!\n如果你连续击败他们所有人,他们会给你一份大奖。但你能承受压力吗?", + "description": "连胜家族由5名训练师组成,\n他们想要战斗!\n如果你连续击败他们所有人,\n他们会给你一份大奖。\n但你能承受压力吗?", "query": "你要怎么做?", "option": { "1": { diff --git a/src/locales/zh_CN/mystery-encounters/training-session-dialogue.json b/src/locales/zh_CN/mystery-encounters/training-session-dialogue.json index 8d0b1dea64d..dab52bef1db 100644 --- a/src/locales/zh_CN/mystery-encounters/training-session-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/training-session-dialogue.json @@ -1,13 +1,13 @@ { "intro": "你遇到了一些\n训练工具和用品。", "title": "集训", - "description": "这些物品似乎可以用来训练你的队伍!\n有数种方式可以进行训练:让你队伍中的其他宝可梦与其进行对战。", + "description": "这些物品似乎可以\n用来训练你的队伍!\n有数种方式可以进行训练:\n让你队伍中的其他宝可梦与其进行对战。", "query": "要怎么训练?", "invalid_selection": "宝可梦必须足够健康", "option": { "1": { "label": "轻量训练", - "tooltip": "(-)轻松战斗\n(+)提升随机2只宝可梦的个体", + "tooltip": "(-)轻松战斗\n(+)提升随机2只\n宝可梦的个体", "finished": "{{selectedPokemon}}回来了,感觉\n虽然疲惫不堪,但很有成就!$它的{{stat1}}和{{stat2}}的个体得到了改善!" }, "2": { diff --git a/src/locales/zh_CN/mystery-encounters/trash-to-treasure-dialogue.json b/src/locales/zh_CN/mystery-encounters/trash-to-treasure-dialogue.json index 69e719064e9..29e7817923b 100644 --- a/src/locales/zh_CN/mystery-encounters/trash-to-treasure-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/trash-to-treasure-dialogue.json @@ -1,12 +1,12 @@ { "intro": "一大堆垃圾!\n这是从哪儿来的?", "title": "变废为宝", - "description": "垃圾堆在你眼前晃来晃去,你似乎在垃圾中发现一些有价值的物品。\n不过,你确定要弄得脏兮兮地去拿它们吗?", + "description": "垃圾堆在你眼前晃来晃去,\n你似乎在垃圾中发现一些有价值的物品。\n不过,你确定要弄得脏兮兮地去拿它们吗?", "query": "你要怎么做?", "option": { "1": { "label": "挖掘宝贝", - "tooltip": "(-)商店的治疗用品消失\n(+)获得精美礼品", + "tooltip": "(-)商店的治疗道具消失\n(+)获得精美礼品", "selected": "你穿过垃圾堆,没入污秽之中。$在你这样肮脏的状态下,任何有尊严的店主\n都不会卖给你任何东西!$你只能将就将就,不再购买治疗物品。$然而,你在垃圾中还是发现了一些不可思议的宝贝!" }, "2": { diff --git a/src/locales/zh_CN/mystery-encounters/uncommon-breed-dialogue.json b/src/locales/zh_CN/mystery-encounters/uncommon-breed-dialogue.json index 1e321a6e614..f844cae5908 100644 --- a/src/locales/zh_CN/mystery-encounters/uncommon-breed-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/uncommon-breed-dialogue.json @@ -1,7 +1,7 @@ { "intro": "这可不是一只普通的宝可梦!", "title": "罕见物种", - "description": "{{enemyPokemon}}看起来与其他同种宝可梦大相径庭。\n@[TOOLTIP_TITLE]{也许它会特殊招式?}\n你可以直接进行战斗并尝试捕获它,但可能也有办法和它交朋友。", + "description": "{{enemyPokemon}}看起来与其他同种宝可梦大相径庭。\n@[TOOLTIP_TITLE]{也许它会特殊招式?}\n你可以直接进行战斗并尝试捕获它,\n但可能也有办法和它交朋友。", "query": "你要怎么做?", "option": { "1": { @@ -12,13 +12,13 @@ }, "2": { "label": "给他吃的", - "disabled_tooltip": "你需要4个树果来选择此项", + "disabled_tooltip": "你需要4个树果\n来选择此项", "tooltip": "(-)给予4个树果\n(+){{enemyPokemon}}会喜欢你", "selected": "你把树果扔向{{enemyPokemon}}!$它高兴地把树果吃干抹净!${{enemyPokemon}}想加入你的队伍!" }, "3": { "label": "交朋友", - "disabled_tooltip": "你的宝可梦需要习得某些招式才能选择此项", + "disabled_tooltip": "你的宝可梦需要习得\n某些招式才能选择此项", "tooltip": "(+){{option3PrimaryName}}使用{{option3PrimaryMove}}\n(+){{enemyPokemon}}会喜欢你", "selected": "你的{{option3PrimaryName}}使用了{{option3PrimaryMove}}来吸引{{enemyPokemon}}!${{enemyPokemon}}想加入你的队伍!" } diff --git a/src/locales/zh_CN/mystery-encounters/weird-dream-dialogue.json b/src/locales/zh_CN/mystery-encounters/weird-dream-dialogue.json index 0bff2cdbb4c..acee3c6eb81 100644 --- a/src/locales/zh_CN/mystery-encounters/weird-dream-dialogue.json +++ b/src/locales/zh_CN/mystery-encounters/weird-dream-dialogue.json @@ -3,7 +3,7 @@ "speaker": "女人", "intro_dialogue": "我看到了你的未来,你的过去……$孩子,你也看到了吗?", "title": "???", - "description": "女人的话语在你的脑海里回荡。\n那不是同一个人的声音,\n而是来自所有时间和空间的众多声音。\n你开始感到头晕目眩,这个问题萦绕在你的脑海中……\n\n@[TOOLTIP_TITLE]{\"我看到了你的未来,你的过去……$孩子,你也看到了吗?\"}", + "description": "女人的话语在你的脑海里回荡。\n那不是同一个人的声音,\n而是来自所有时间和空间的众多声音。\n你开始感到头晕目眩,\n这个问题萦绕在你的脑海中……\n\n@[TOOLTIP_TITLE]{\"我看到了你的未来,你的过去……\n孩子,你也看到了吗?\"}", "query": "你要怎么做?", "option": { "1": { diff --git a/src/locales/zh_CN/party-ui-handler.json b/src/locales/zh_CN/party-ui-handler.json index 4ddea7cd789..2bc74991824 100644 --- a/src/locales/zh_CN/party-ui-handler.json +++ b/src/locales/zh_CN/party-ui-handler.json @@ -15,7 +15,7 @@ "UNPAUSE_EVOLUTION": "解除进化暂停", "REVIVE": "复活", "RENAME": "起名", - "SELECT": "Select", + "SELECT": "选择", "choosePokemon": "选择一只宝可梦。", "doWhatWithThisPokemon": "要对宝可梦做什么?", "noEnergy": "{{pokemonName}}没有力气战斗了!", diff --git a/src/locales/zh_CN/pokemon-form.json b/src/locales/zh_CN/pokemon-form.json index c2ad12bbf16..f10c21e8851 100644 --- a/src/locales/zh_CN/pokemon-form.json +++ b/src/locales/zh_CN/pokemon-form.json @@ -39,65 +39,65 @@ "unownZ": "Z", "unownExclamation": "!", "unownQuestion": "?", - "castform": "Normal Form", + "castform": "通常", "castformSunny": "晴天", "castformRainy": "雨天", "castformSnowy": "雪天", "deoxysNormal": "普通", - "deoxysAttack": "Attack", - "deoxysDefense": "Defense", - "deoxysSpeed": "Speed", + "deoxysAttack": "进攻", + "deoxysDefense": "防御", + "deoxysSpeed": "速度", "burmyPlant": "草木蓑衣", "burmySandy": "砂土蓑衣", "burmyTrash": "垃圾蓑衣", - "cherubiOvercast": "Overcast", - "cherubiSunshine": "Sunshine", + "cherubiOvercast": "阴天", + "cherubiSunshine": "晴天", "shellosEast": "东海", "shellosWest": "西海", - "rotom": "Normal", + "rotom": "通常", "rotomHeat": "加热", "rotomWash": "清洗", "rotomFrost": "结冰", "rotomFan": "旋转", "rotomMow": "切割", - "dialga": "Normal", - "dialgaOrigin": "Origin", - "palkia": "Normal", - "palkiaOrigin": "Origin", + "dialga": "通常", + "dialgaOrigin": "起源", + "palkia": "通常", + "palkiaOrigin": "起源", "giratinaAltered": "别种", - "giratinaOrigin": "Origin", + "giratinaOrigin": "起源", "shayminLand": "陆上", - "shayminSky": "Sky", + "shayminSky": "天空", "basculinRedStriped": "红条纹", "basculinBlueStriped": "蓝条纹", "basculinWhiteStriped": "白条纹", - "darumaka": "Standard Mode", - "darumakaZen": "Zen", + "darumaka": "普通", + "darumakaZen": "达摩", "deerlingSpring": "春天", "deerlingSummer": "夏天", "deerlingAutumn": "秋天", "deerlingWinter": "冬天", "tornadusIncarnate": "化身", - "tornadusTherian": "Therian", + "tornadusTherian": "灵兽", "thundurusIncarnate": "化身", - "thundurusTherian": "Therian", + "thundurusTherian": "灵兽", "landorusIncarnate": "化身", - "landorusTherian": "Therian", - "kyurem": "Normal", - "kyuremBlack": "Black", - "kyuremWhite": "White", + "landorusTherian": "灵兽", + "kyurem": "普通", + "kyuremBlack": "暗黑", + "kyuremWhite": "焰白", "keldeoOrdinary": "通常", - "keldeoResolute": "Resolute", + "keldeoResolute": "觉悟", "meloettaAria": "歌声", "meloettaPirouette": "舞步形态", - "genesect": "Normal", - "genesectShock": "Shock Drive", - "genesectBurn": "Burn Drive", - "genesectChill": "Chill Drive", - "genesectDouse": "Douse Drive", - "froakie": "Normal", + "genesect": "通常", + "genesectShock": "闪电驱动", + "genesectBurn": "燃烧驱动", + "genesectChill": "寒冰驱动", + "genesectDouse": "水流驱动", + "froakie": "通常", "froakieBattleBond": "牵绊变身", - "froakieAsh": "Ash", + "froakieAsh": "小智", "scatterbugMeadow": "花园花纹", "scatterbugIcySnow": "冰雪花纹", "scatterbugPolar": "雪国花纹", @@ -133,11 +133,11 @@ "furfrouLaReine": "女王造型", "furfrouKabuki": "歌舞伎造型", "furfrouPharaoh": "国王造型", - "espurrMale": "Male", - "espurrFemale": "Female", - "honedgeShiled": "Shield", - "honedgeBlade": "Blade", - "pumpkaboo": "Average Size", + "espurrMale": "雄性", + "espurrFemale": "雌性", + "honedgeShiled": "盾牌", + "honedgeBlade": "利剑", + "pumpkaboo": "平均尺寸", "pumpkabooSmall": "小尺寸", "pumpkabooLarge": "大尺寸", "pumpkabooSuper": "特大尺寸", @@ -148,37 +148,37 @@ "zygarde50Pc": "50%形态 群聚变形", "zygarde10Pc": "10%形态 群聚变形", "zygardeComplete": "完全体形态", - "hoopa": "Confined", - "hoopaUnbound": "Unbound", + "hoopa": "惩戒", + "hoopaUnbound": "解放", "oricorioBaile": "热辣热辣风格", "oricorioPompom": "啪滋啪滋风格", "oricorioPau": "呼拉呼拉风格", "oricorioSensu": "轻盈轻盈风格", - "rockruff": "Normal", + "rockruff": "通常", "rockruffOwnTempo": "特殊岩狗狗", - "rockruffMidday": "Midday", - "rockruffMidnight": "Midnight", - "rockruffDusk": "Dusk", - "wishiwashi": "Solo Form", - "wishiwashiSchool": "School", - "typeNullNormal": "Type: Normal", - "typeNullFighting": "Type: Fighting", - "typeNullFlying": "Type: Flying", - "typeNullPoison": "Type: Poison", - "typeNullGround": "Type: Ground", - "typeNullRock": "Type: Rock", - "typeNullBug": "Type: Bug", - "typeNullGhost": "Type: Ghost", - "typeNullSteel": "Type: Steel", - "typeNullFire": "Type: Fire", - "typeNullWater": "Type: Water", - "typeNullGrass": "Type: Grass", - "typeNullElectric": "Type: Electric", - "typeNullPsychic": "Type: Psychic", - "typeNullIce": "Type: Ice", - "typeNullDragon": "Type: Dragon", - "typeNullDark": "Type: Dark", - "typeNullFairy": "Type: Fairy", + "rockruffMidday": "白天", + "rockruffMidnight": "夜晚", + "rockruffDusk": "黄昏", + "wishiwashi": "单独", + "wishiwashiSchool": "鱼群", + "typeNullNormal": "属性:普通", + "typeNullFighting": "属性:格斗", + "typeNullFlying": "属性:飞行", + "typeNullPoison": "属性:毒", + "typeNullGround": "属性:地面", + "typeNullRock": "属性:岩石", + "typeNullBug": "属性:虫", + "typeNullGhost": "属性:幽灵", + "typeNullSteel": "属性:钢", + "typeNullFire": "属性:火", + "typeNullWater": "属性:水", + "typeNullGrass": "属性:草", + "typeNullElectric": "属性:电", + "typeNullPsychic": "属性:超能力", + "typeNullIce": "属性:冰", + "typeNullDragon": "属性:龙", + "typeNullDark": "属性:恶", + "typeNullFairy": "属性:妖精", "miniorRedMeteor": "红色核心", "miniorOrangeMeteor": "橙色核心", "miniorYellowMeteor": "黄色核心", @@ -195,66 +195,66 @@ "miniorViolet": "紫色", "mimikyuDisguised": "化形", "mimikyuBusted": "现形", - "necrozma": "Normal", - "necrozmaDuskMane": "Dusk Mane", - "necrozmaDawnWings": "Dawn Wings", - "necrozmaUltra": "Ultra", - "magearna": "Normal", + "necrozma": "通常", + "necrozmaDuskMane": "黄昏之鬃", + "necrozmaDawnWings": "拂晓之翼", + "necrozmaUltra": "究极", + "magearna": "通常", "magearnaOriginal": "500年前的颜色", - "marshadow": "Normal", + "marshadow": "通常", "marshadowZenith": "全力", - "cramorant": "Normal", - "cramorantGulping": "Gulping Form", - "cramorantGorging": "Gorging Form", - "toxelAmped": "Amped Form", - "toxelLowkey": "Low-Key Form", + "cramorant": "通常", + "cramorantGulping": "一口吞", + "cramorantGorging": "大口吞", + "toxelAmped": "高调", + "toxelLowkey": "低调", "sinisteaPhony": "赝品", "sinisteaAntique": "真品", - "milceryVanillaCream": "Vanilla Cream", - "milceryRubyCream": "Ruby Cream", - "milceryMatchaCream": "Matcha Cream", - "milceryMintCream": "Mint Cream", - "milceryLemonCream": "Lemon Cream", - "milcerySaltedCream": "Salted Cream", - "milceryRubySwirl": "Ruby Swirl", - "milceryCaramelSwirl": "Caramel Swirl", - "milceryRainbowSwirl": "Rainbow Swirl", - "eiscue": "Ice Face", + "milceryVanillaCream": "奶香香草", + "milceryRubyCream": "奶香红钻", + "milceryMatchaCream": "奶香抹茶", + "milceryMintCream": "奶香薄荷", + "milceryLemonCream": "奶香柠檬", + "milcerySaltedCream": "奶香海燕", + "milceryRubySwirl": "红钻综合", + "milceryCaramelSwirl": "教堂综合", + "milceryRainbowSwirl": "三色综合", + "eiscue": "冰冻头", "eiscueNoIce": "解冻头", "indeedeeMale": "雄性", "indeedeeFemale": "雌性", "morpekoFullBelly": "满腹花纹", - "morpekoHangry": "Hangry", + "morpekoHangry": "空腹花纹", "zacianHeroOfManyBattles": "百战勇者", - "zacianCrowned": "Crowned", + "zacianCrowned": "盾之王", "zamazentaHeroOfManyBattles": "百战勇者", - "zamazentaCrowned": "Crowned", - "kubfuSingleStrike": "Single Strike", - "kubfuRapidStrike": "Rapid Strike", - "zarude": "Normal", + "zamazentaCrowned": "剑之王", + "kubfuSingleStrike": "一击", + "kubfuRapidStrike": "连击", + "zarude": "通常", "zarudeDada": "老爹", - "calyrex": "Normal", - "calyrexIce": "Ice Rider", - "calyrexShadow": "Shadow Rider", - "basculinMale": "Male", - "basculinFemale": "Female", + "calyrex": "通常", + "calyrexIce": "白马", + "calyrexShadow": "黑马", + "basculinMale": "雄性", + "basculinFemale": "雌性", "enamorusIncarnate": "化身", - "enamorusTherian": "Therian", - "lechonkMale": "Male", - "lechonkFemale": "Female", - "tandemausFour": "Family of Four", - "tandemausThree": "Family of Three", + "enamorusTherian": "灵兽", + "lechonkMale": "雄性", + "lechonkFemale": "雌性", + "tandemausFour": "四口之家", + "tandemausThree": "三口之家", "squawkabillyGreenPlumage": "绿羽毛", "squawkabillyBluePlumage": "蓝羽毛", "squawkabillyYellowPlumage": "黄羽毛", "squawkabillyWhitePlumage": "白羽毛", - "finizenZero": "Zero", - "finizenHero": "Hero", + "finizenZero": "平凡", + "finizenHero": "全能", "tatsugiriCurly": "上弓姿势", "tatsugiriDroopy": "下垂姿势", "tatsugiriStretchy": "平挺姿势", - "dunsparceTwo": "Two-Segment", - "dunsparceThree": "Three-Segment", + "dunsparceTwo": "两节", + "dunsparceThree": "三节", "gimmighoulChest": "宝箱形态", "gimmighoulRoaming": "徒步形态", "koraidonApexBuild": "顶尖形态", @@ -269,21 +269,21 @@ "miraidonGlideMode": "滑翔模式", "poltchageistCounterfeit": "冒牌货", "poltchageistArtisan": "高档货", - "poltchageistUnremarkable": "Unremarkable", - "poltchageistMasterpiece": "Masterpiece", - "ogerponTealMask": "Teal Mask", - "ogerponTealMaskTera": "Teal Mask Terastallized", - "ogerponWellspringMask": "Wellspring Mask", - "ogerponWellspringMaskTera": "Wellspring Mask Terastallized", - "ogerponHearthflameMask": "Hearthflame Mask", - "ogerponHearthflameMaskTera": "Hearthflame Mask Terastallized", - "ogerponCornerstoneMask": "Cornerstone Mask", - "ogerponCornerstoneMaskTera": "Cornerstone Mask Terastallized", - "terpagos": "Normal Form", - "terpagosTerastal": "Terastal", - "terpagosStellar": "Stellar", - "galarDarumaka": "Standard Mode", - "galarDarumakaZen": "Zen", + "poltchageistUnremarkable": "凡作", + "poltchageistMasterpiece": "杰作", + "ogerponTealMask": "碧草面具", + "ogerponTealMaskTera": "碧草面具太晶化", + "ogerponWellspringMask": "水井面具", + "ogerponWellspringMaskTera": "水井面具太晶化", + "ogerponHearthflameMask": "火灶面具", + "ogerponHearthflameMaskTera": "火灶面具太晶化", + "ogerponCornerstoneMask": "础石面具", + "ogerponCornerstoneMaskTera": "础石面具太晶化", + "terpagos": "普通", + "terpagosTerastal": "太晶", + "terpagosStellar": "星晶", + "galarDarumaka": "通常", + "galarDarumakaZen": "达摩", "paldeaTaurosCombat": "斗战种", "paldeaTaurosBlaze": "火炽种", "paldeaTaurosAqua": "水澜种" diff --git a/src/locales/zh_CN/trainer-classes.json b/src/locales/zh_CN/trainer-classes.json index ba126b9ec65..492d39a8c42 100644 --- a/src/locales/zh_CN/trainer-classes.json +++ b/src/locales/zh_CN/trainer-classes.json @@ -100,34 +100,34 @@ "worker_female": "工人", "workers": "工人组合", "youngster": "短裤小子", - "rocket_grunt": "火箭队手下", - "rocket_grunt_female": "火箭队手下", - "rocket_grunts": "火箭队手下们", - "magma_grunt": "熔岩队手下", - "magma_grunt_female": "熔岩队手下", - "magma_grunts": "熔岩队手下们", - "aqua_grunt": "海洋队手下", - "aqua_grunt_female": "海洋队手下", - "aqua_grunts": "海洋队手下们", - "galactic_grunt": "银河队手下", - "galactic_grunt_female": "银河队手下", - "galactic_grunts": "银河队手下们", - "plasma_grunt": "等离子队手下", - "plasma_grunt_female": "等离子队手下", - "plasma_grunts": "等离子队手下们", - "flare_grunt": "闪焰队手下", - "flare_grunt_female": "闪焰队手下", - "flare_grunts": "闪焰队手下们", + "rocket_grunt": "火箭队队员", + "rocket_grunt_female": "火箭队队员", + "rocket_grunts": "火箭队队员们", + "magma_grunt": "熔岩队队员", + "magma_grunt_female": "熔岩队队员", + "magma_grunts": "熔岩队队员们", + "aqua_grunt": "海洋队队员", + "aqua_grunt_female": "海洋队队员", + "aqua_grunts": "海洋队队员们", + "galactic_grunt": "银河队队员", + "galactic_grunt_female": "银河队队员", + "galactic_grunts": "银河队队员们", + "plasma_grunt": "等离子队队员", + "plasma_grunt_female": "等离子队队员", + "plasma_grunts": "等离子队队员们", + "flare_grunt": "闪焰队队员", + "flare_grunt_female": "闪焰队队员", + "flare_grunts": "闪焰队队员们", "aether_grunt": "以太基金会职员", "aether_grunt_female": "以太基金会职员", "aether_grunts": "以太基金会职员", - "skull_grunt": "骷髅队手下", - "skull_grunt_female": "骷髅队手下", - "skull_grunts": "骷髅队手下", + "skull_grunt": "骷髅队队员", + "skull_grunt_female": "骷髅队队员", + "skull_grunts": "骷髅队队员", "macro_grunt": "马洛科蒙训练师", "macro_grunt_female": "马洛科蒙训练师", "macro_grunts": "马洛科蒙训练师", - "star_grunt": "Star Grunt", - "star_grunt_female": "Star Grunt", - "star_grunts": "Star Grunts" + "star_grunt": "天星队手下", + "star_grunt_female": "天星队手下", + "star_grunts": "天星队手下们" } diff --git a/src/locales/zh_CN/trainer-names.json b/src/locales/zh_CN/trainer-names.json index dea307ef0bf..475e9081df4 100644 --- a/src/locales/zh_CN/trainer-names.json +++ b/src/locales/zh_CN/trainer-names.json @@ -141,11 +141,11 @@ "faba": "扎奥博", "plumeria": "布尔美丽", "oleana": "奥莉薇", - "giacomo": "Giacomo", - "mela": "Mela", - "atticus": "Atticus", - "ortega": "Ortega", - "eri": "Eri", + "giacomo": "皮拿", + "mela": "梅洛可", + "atticus": "秋明", + "ortega": "奥尔迪加", + "eri": "枇琶", "maxie": "赤焰松", "archie": "水梧桐", diff --git a/src/locales/zh_CN/trainer-titles.json b/src/locales/zh_CN/trainer-titles.json index 8ac8acf0a3a..6af992521be 100644 --- a/src/locales/zh_CN/trainer-titles.json +++ b/src/locales/zh_CN/trainer-titles.json @@ -19,7 +19,7 @@ "aether_boss": "以太基金会理事长", "skull_boss": "骷髅队老大", "macro_boss": "马洛科蒙总裁", - "star_boss": "Team Star Leader", + "star_boss": "天星队真老大", "rocket_admin": "火箭队干部", "rocket_admin_female": "火箭队干部", @@ -36,7 +36,7 @@ "aether_admin": "以太基金会干部", "skull_admin": "骷髅队干部", "macro_admin": "马洛科蒙干部", - "star_admin": "Team Star Squad Boss", + "star_admin": "天星队老大", "the_winstrates": "连胜家族" } From 06331ccdf6a03a7b058fe62ce2468cc5f052a137 Mon Sep 17 00:00:00 2001 From: RedstonewolfX <108761527+RedstonewolfX@users.noreply.github.com> Date: Thu, 26 Sep 2024 04:39:59 -0400 Subject: [PATCH 03/10] [Daily] Daily standardization (#3776) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Disable Luck in Daily Runs If the Game Mode is Daily Run, the player's Luck is set to 0, and the Luck value is hidden. * Give free map in daily Adds a Map to the player's pool of starting items for Daily Runs. * Disable Eviolite in Daily Runs Disables Eviolite spawning in Daily Run mode. * Write shop test and add new overrides Adds new overrides that allow you to force content to be locked or unlocked These overrides were also added to the OverridesHelper to make them available to tests Adds a new check function for content unlocks, which returns `true` if it is overrode to be unlocked, `false` if it is overrode to be locked, and the unlock data mapped to a Boolean otherwise All existing checks (other than the ones that involve actually unlocking things) for unlockables have been changed to use this Added a pair of new exporting booleans, specifically for my test, that check if Eviolite or Mini Black Hole are in the loot table * Prevent shinies from altering runs Places variant rolls inside of an ExecuteWithSeedOffset block, using the current floor's RNG seed as the seed and the Pokémon's ID as the offset. --------- Co-authored-by: Leo Kim <47556641+KimJeongSun@users.noreply.github.com> Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> Co-authored-by: Amani H. <109637146+xsn34kzx@users.noreply.github.com> Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> --- src/battle-scene.ts | 6 +- src/field/pokemon.ts | 9 ++- src/modifier/modifier-type.ts | 29 +++++++++- src/overrides.ts | 5 +- src/phases/title-phase.ts | 6 +- src/system/game-data.ts | 12 ++++ src/test/daily_mode.test.ts | 68 +++++++++++++++++++++++ src/test/game-mode.test.ts | 2 + src/test/reload.test.ts | 17 +++++- src/test/utils/gameManager.ts | 3 + src/test/utils/helpers/modifiersHelper.ts | 58 +++++++++++++++++++ src/test/utils/helpers/overridesHelper.ts | 32 +++++++++++ src/test/utils/phaseInterceptor.ts | 5 +- src/tutorial.ts | 4 +- 14 files changed, 240 insertions(+), 16 deletions(-) create mode 100644 src/test/utils/helpers/modifiersHelper.ts diff --git a/src/battle-scene.ts b/src/battle-scene.ts index bbae01bf2f6..6b53ffd6a7f 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -1669,7 +1669,11 @@ export default class BattleScene extends SceneBase { this.scoreText.setVisible(this.gameMode.isDaily); } - updateAndShowText(duration: integer): void { + /** + * Displays the current luck value. + * @param duration The time for this label to fade in, if it is not already visible. + */ + updateAndShowText(duration: number): void { const labels = [ this.luckLabelText, this.luckText ]; labels.forEach(t => t.setAlpha(0)); const luckValue = getPartyLuckValue(this.getParty()); diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 871c7160cc2..fda4d2226c0 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1914,10 +1914,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (!this.shiny || (!variantData.hasOwnProperty(variantDataIndex) && !variantData.hasOwnProperty(this.species.speciesId))) { return 0; } - const rand = Utils.randSeedInt(10); - if (rand >= 4) { + const rand = new Utils.NumberHolder(0); + this.scene.executeWithSeedOffset(() => { + rand.value = Utils.randSeedInt(10); + }, this.id, this.scene.waveSeed); + if (rand.value >= 4) { return 0; // 6/10 - } else if (rand >= 1) { + } else if (rand.value >= 1) { return 1; // 3/10 } else { return 2; // 1/10 diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index 8ba3599e72b..9ce555a617e 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -1719,7 +1719,8 @@ const modifierPool: ModifierPool = { new WeightedModifierType(modifierTypes.FORM_CHANGE_ITEM, (party: Pokemon[]) => Math.min(Math.ceil(party[0].scene.currentBattle.waveIndex / 50), 4) * 6, 24), new WeightedModifierType(modifierTypes.AMULET_COIN, skipInLastClassicWaveOrDefault(3)), new WeightedModifierType(modifierTypes.EVIOLITE, (party: Pokemon[]) => { - if (!party[0].scene.gameMode.isFreshStartChallenge() && party[0].scene.gameData.unlocks[Unlockables.EVIOLITE]) { + 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; } @@ -1804,7 +1805,7 @@ const modifierPool: ModifierPool = { new WeightedModifierType(modifierTypes.VOUCHER_PREMIUM, (party: Pokemon[], rerollCount: integer) => !party[0].scene.gameMode.isDaily && !party[0].scene.gameMode.isEndless && !party[0].scene.gameMode.isSplicedOnly ? Math.max(5 - rerollCount * 2, 0) : 0, 5), new WeightedModifierType(modifierTypes.DNA_SPLICERS, (party: Pokemon[]) => !party[0].scene.gameMode.isSplicedOnly && party.filter(p => !p.fusionSpecies).length > 1 ? 24 : 0, 24), - new WeightedModifierType(modifierTypes.MINI_BLACK_HOLE, (party: Pokemon[]) => (!party[0].scene.gameMode.isFreshStartChallenge() && party[0].scene.gameData.unlocks[Unlockables.MINI_BLACK_HOLE]) ? 1 : 0, 1), + new WeightedModifierType(modifierTypes.MINI_BLACK_HOLE, (party: Pokemon[]) => (party[0].scene.gameMode.isDaily || (!party[0].scene.gameMode.isFreshStartChallenge() && party[0].scene.gameData.isUnlocked(Unlockables.MINI_BLACK_HOLE))) ? 1 : 0, 1), ].map(m => { m.setTier(ModifierTier.MASTER); return m; }) @@ -1996,9 +1997,16 @@ export function getModifierPoolForType(poolType: ModifierPoolType): ModifierPool } const tierWeights = [ 768 / 1024, 195 / 1024, 48 / 1024, 12 / 1024, 1 / 1024 ]; +/** + * Allows a unit test to check if an item exists in the Modifier Pool. Checks the pool directly, rather than attempting to reroll for the item. + */ +export const itemPoolChecks: Map = new Map(); export function regenerateModifierPoolThresholds(party: Pokemon[], poolType: ModifierPoolType, rerollCount: integer = 0) { const pool = getModifierPoolForType(poolType); + itemPoolChecks.forEach((v, k) => { + itemPoolChecks.set(k, false); + }); const ignoredIndexes = {}; const modifierTableData = {}; @@ -2035,6 +2043,9 @@ export function regenerateModifierPoolThresholds(party: Pokemon[], poolType: Mod ignoredIndexes[t].push(i++); return total; } + if (itemPoolChecks.has(modifierType.modifierType.id as ModifierTypeKeys)) { + itemPoolChecks.set(modifierType.modifierType.id as ModifierTypeKeys, true); + } thresholds.set(total, i++); return total; }, 0); @@ -2437,10 +2448,22 @@ export class ModifierTypeOption { } } +/** + * Calculates the team's luck value. + * @param party The player's party. + * @returns A number between 0 and 14 based on the party's total luck value, or a random number between 0 and 14 if the player is in Daily Run mode. + */ export function getPartyLuckValue(party: Pokemon[]): integer { + if (party[0].scene.gameMode.isDaily) { + const DailyLuck = new Utils.NumberHolder(0); + party[0].scene.executeWithSeedOffset(() => { + DailyLuck.value = Utils.randSeedInt(15); // Random number between 0 and 14 + }, 0, party[0].scene.seed); + return DailyLuck.value; + } const luck = Phaser.Math.Clamp(party.map(p => p.isAllowedInBattle() ? p.getLuck() : 0) .reduce((total: integer, value: integer) => total += value, 0), 0, 14); - return luck || 0; + return luck ?? 0; } export function getLuckString(luckValue: integer): string { diff --git a/src/overrides.ts b/src/overrides.ts index 35ca299721b..852961db8d7 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -12,6 +12,7 @@ import { type PokeballCounts } from "./battle-scene"; import { Gender } from "./data/gender"; import { Variant } from "./data/variant"; import { type ModifierOverride } from "./modifier/modifier-type"; +import { Unlockables } from "./system/unlockables"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; @@ -70,8 +71,10 @@ class DefaultOverrides { [PokeballType.MASTER_BALL]: 0, }, }; + /** Forces an item to be UNLOCKED */ + readonly ITEM_UNLOCK_OVERRIDE: Unlockables[] = []; /** Set to `true` to show all tutorials */ - readonly BYPASS_TUTORIAL_SKIP: boolean = false; + readonly BYPASS_TUTORIAL_SKIP_OVERRIDE: boolean = false; // ---------------- // PLAYER OVERRIDES diff --git a/src/phases/title-phase.ts b/src/phases/title-phase.ts index 52503501837..b23a5ec0c89 100644 --- a/src/phases/title-phase.ts +++ b/src/phases/title-phase.ts @@ -76,7 +76,8 @@ export class TitlePhase extends Phase { this.scene.ui.clearText(); this.end(); }; - if (this.scene.gameData.unlocks[Unlockables.ENDLESS_MODE]) { + const { gameData } = this.scene; + if (gameData.isUnlocked(Unlockables.ENDLESS_MODE)) { const options: OptionSelectItem[] = [ { label: GameMode.getModeName(GameModes.CLASSIC), @@ -100,7 +101,7 @@ export class TitlePhase extends Phase { } } ]; - if (this.scene.gameData.unlocks[Unlockables.SPLICED_ENDLESS_MODE]) { + if (gameData.isUnlocked(Unlockables.SPLICED_ENDLESS_MODE)) { options.push({ label: GameMode.getModeName(GameModes.SPLICED_ENDLESS), handler: () => { @@ -220,6 +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(getDailyRunStarterModifiers(party)) .filter((m) => m !== null); diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 04fef4a81da..22a793e9aca 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -372,6 +372,18 @@ export class GameData { }; } + /** + * Checks if an `Unlockable` has been unlocked. + * @param unlockable The Unlockable to check + * @returns `true` if the player has unlocked this `Unlockable` or an override has enabled it + */ + public isUnlocked(unlockable: Unlockables): boolean { + if (Overrides.ITEM_UNLOCK_OVERRIDE.includes(unlockable)) { + return true; + } + return this.unlocks[unlockable]; + } + public saveSystem(): Promise { return new Promise(resolve => { this.scene.ui.savingIcon.show(); diff --git a/src/test/daily_mode.test.ts b/src/test/daily_mode.test.ts index 5cc61a62874..58692330272 100644 --- a/src/test/daily_mode.test.ts +++ b/src/test/daily_mode.test.ts @@ -1,5 +1,12 @@ +import { MapModifier } from "#app/modifier/modifier"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; import GameManager from "./utils/gameManager"; +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"; + +//const TIMEOUT = 20 * 1000; describe("Daily Mode", () => { let phaserGame: Phaser.Game; @@ -28,5 +35,66 @@ describe("Daily Mode", () => { expect(pkm.level).toBe(20); expect(pkm.moveset.length).toBeGreaterThan(0); }); + expect(game.scene.getModifiers(MapModifier).length).toBeGreaterThan(0); + }); +}); + +describe("Shop modifications", async () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + beforeEach(() => { + game = new GameManager(phaserGame); + + game.override + .startingWave(9) + .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]) + .enemyMoveset(Moves.SPLASH); + game.modifiers + .addCheck("EVIOLITE") + .addCheck("MINI_BLACK_HOLE"); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + game.modifiers.clearChecks(); + }); + + 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.doKillOpponents(); + await game.phaseInterceptor.to("BattleEndPhase"); + game.onNextPrompt("SelectModifierPhase", Mode.MODIFIER_SELECT, () => { + expect(game.scene.ui.getHandler()).toBeInstanceOf(ModifierSelectUiHandler); + game.modifiers + .testCheck("EVIOLITE", false) + .testCheck("MINI_BLACK_HOLE", false); + }); + }); + + 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"); + await game.doKillOpponents(); + await game.phaseInterceptor.to("BattleEndPhase"); + game.onNextPrompt("SelectModifierPhase", Mode.MODIFIER_SELECT, () => { + expect(game.scene.ui.getHandler()).toBeInstanceOf(ModifierSelectUiHandler); + game.modifiers + .testCheck("EVIOLITE", true) + .testCheck("MINI_BLACK_HOLE", true); + }); }); }); diff --git a/src/test/game-mode.test.ts b/src/test/game-mode.test.ts index ccec3a3aa16..11994a102af 100644 --- a/src/test/game-mode.test.ts +++ b/src/test/game-mode.test.ts @@ -2,6 +2,7 @@ import { GameMode, GameModes, getGameMode } from "#app/game-mode"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import * as Utils from "../utils"; import GameManager from "./utils/gameManager"; + describe("game-mode", () => { let phaserGame: Phaser.Game; let game: GameManager; @@ -12,6 +13,7 @@ describe("game-mode", () => { }); afterEach(() => { game.phaseInterceptor.restoreOg(); + vi.clearAllMocks(); vi.resetAllMocks(); }); beforeEach(() => { diff --git a/src/test/reload.test.ts b/src/test/reload.test.ts index 7c4523dd9ef..daf8e43a0cd 100644 --- a/src/test/reload.test.ts +++ b/src/test/reload.test.ts @@ -1,9 +1,13 @@ -import { Species } from "#app/enums/species"; import { GameModes } from "#app/game-mode"; +import OptionSelectUiHandler from "#app/ui/settings/option-select-ui-handler"; +import { Mode } from "#app/ui/ui"; +import { Biome } from "#enums/biome"; +import { Button } from "#enums/buttons"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; import GameManager from "#test/utils/gameManager"; +import { MockClock } from "#test/utils/mocks/mockClock"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; -import { Moves } from "#app/enums/moves"; -import { Biome } from "#app/enums/biome"; describe("Reload", () => { let phaserGame: Phaser.Game; @@ -50,6 +54,13 @@ describe("Reload", () => { game.move.select(Moves.KOWTOW_CLEAVE); await game.phaseInterceptor.to("DamagePhase"); await game.doKillOpponents(); + game.onNextPrompt("SelectBiomePhase", Mode.OPTION_SELECT, () => { + (game.scene.time as MockClock).overrideDelay = null; + const optionSelectUiHandler = game.scene.ui.getHandler() as OptionSelectUiHandler; + game.scene.time.delayedCall(1010, () => optionSelectUiHandler.processInput(Button.ACTION)); + game.endPhase(); + (game.scene.time as MockClock).overrideDelay = 1; + }); await game.toNextWave(); expect(game.phaseInterceptor.log).toContain("NewBiomeEncounterPhase"); diff --git a/src/test/utils/gameManager.ts b/src/test/utils/gameManager.ts index f48fe3ef228..6fad87df182 100644 --- a/src/test/utils/gameManager.ts +++ b/src/test/utils/gameManager.ts @@ -47,6 +47,7 @@ import { MoveHelper } from "./helpers/moveHelper"; import { OverridesHelper } from "./helpers/overridesHelper"; import { SettingsHelper } from "./helpers/settingsHelper"; import { ReloadHelper } from "./helpers/reloadHelper"; +import { ModifierHelper } from "./helpers/modifiersHelper"; import { CheckSwitchPhase } from "#app/phases/check-switch-phase"; import BattleMessageUiHandler from "#app/ui/battle-message-ui-handler"; import { MysteryEncounterPhase } from "#app/phases/mystery-encounter-phases"; @@ -71,6 +72,7 @@ export default class GameManager { public readonly challengeMode: ChallengeModeHelper; public readonly settings: SettingsHelper; public readonly reload: ReloadHelper; + public readonly modifiers: ModifierHelper; /** * Creates an instance of GameManager. @@ -93,6 +95,7 @@ export default class GameManager { this.challengeMode = new ChallengeModeHelper(this); this.settings = new SettingsHelper(this); this.reload = new ReloadHelper(this); + this.modifiers = new ModifierHelper(this); // Disables Mystery Encounters on all tests (can be overridden at test level) this.override.mysteryEncounterChance(0); diff --git a/src/test/utils/helpers/modifiersHelper.ts b/src/test/utils/helpers/modifiersHelper.ts new file mode 100644 index 00000000000..c38bf5770a8 --- /dev/null +++ b/src/test/utils/helpers/modifiersHelper.ts @@ -0,0 +1,58 @@ +import { expect } from "vitest"; +import { GameManagerHelper } from "./gameManagerHelper"; +import { itemPoolChecks, ModifierTypeKeys } from "#app/modifier/modifier-type"; + +export class ModifierHelper extends GameManagerHelper { + /** + * Adds a Modifier to the list of modifiers to check for. + * + * Note that all modifiers are updated during the start of `SelectModifierPhase`. + * @param modifier The Modifier to add. + * @returns `this` + */ + addCheck(modifier: ModifierTypeKeys): this { + itemPoolChecks.set(modifier, undefined); + return this; + } + + /** + * `get`s a value from the `itemPoolChecks` map. + * + * If the item is in the Modifier Pool, and the player can get it, will return `true`. + * + * If the item is *not* in the Modifier Pool, will return `false`. + * + * If a `SelectModifierPhase` has not occurred, and we do not know if the item is in the Modifier Pool or not, will return `undefined`. + * @param modifier + * @returns + */ + getCheck(modifier: ModifierTypeKeys): boolean | undefined { + return itemPoolChecks.get(modifier); + } + + /** + * `expect`s a Modifier `toBeTruthy` (in the Modifier Pool) or `Falsy` (unobtainable on this floor). Use during a test. + * + * Note that if a `SelectModifierPhase` has not been run yet, these values will be `undefined`, and the check will fail. + * @param modifier The modifier to check. + * @param expectToBePreset Whether the Modifier should be in the Modifier Pool. Set to `false` to expect it to be absent instead. + * @returns `this` + */ + testCheck(modifier: ModifierTypeKeys, expectToBePreset: boolean): this { + if (expectToBePreset) { + expect(itemPoolChecks.get(modifier)).toBeTruthy(); + } + expect(itemPoolChecks.get(modifier)).toBeFalsy(); + return this; + } + + /** Removes all modifier checks. @returns `this` */ + clearChecks() { + itemPoolChecks.clear(); + return this; + } + + private log(...params: any[]) { + console.log("Modifiers:", ...params); + } +} diff --git a/src/test/utils/helpers/overridesHelper.ts b/src/test/utils/helpers/overridesHelper.ts index 686de58e874..84cb1719e0b 100644 --- a/src/test/utils/helpers/overridesHelper.ts +++ b/src/test/utils/helpers/overridesHelper.ts @@ -10,6 +10,8 @@ import { ModifierOverride } from "#app/modifier/modifier-type"; import Overrides from "#app/overrides"; import { vi } from "vitest"; import { GameManagerHelper } from "./gameManagerHelper"; +import { Unlockables } from "#app/system/unlockables"; +import { Variant } from "#app/data/variant"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; @@ -300,6 +302,17 @@ export class OverridesHelper extends GameManagerHelper { return this; } + /** + * Gives the player access to an Unlockable. + * @param unlockable The Unlockable(s) to enable. + * @returns `this` + */ + enableUnlockable(unlockable: Unlockables[]) { + vi.spyOn(Overrides, "ITEM_UNLOCK_OVERRIDE", "get").mockReturnValue(unlockable); + this.log("Temporarily unlocked the following content: ", unlockable); + return this; + } + /** * Override the items rolled at the end of a battle * @param items the items to be rolled @@ -311,6 +324,25 @@ export class OverridesHelper extends GameManagerHelper { return this; } + /** + * Override player shininess + * @param shininess Whether the player's Pokemon should be shiny. + */ + shinyLevel(shininess: boolean): this { + vi.spyOn(Overrides, "SHINY_OVERRIDE", "get").mockReturnValue(shininess); + this.log(`Set player Pokemon as ${shininess ? "" : "not "}shiny!`); + return this; + } + /** + * Override player shiny variant + * @param variant The player's shiny variant. + */ + variantLevel(variant: Variant): this { + vi.spyOn(Overrides, "VARIANT_OVERRIDE", "get").mockReturnValue(variant); + this.log(`Set player Pokemon's shiny variant to ${variant}!`); + return this; + } + /** * Override the enemy (Pokemon) to have the given amount of health segments * @param healthSegments the number of segments to give diff --git a/src/test/utils/phaseInterceptor.ts b/src/test/utils/phaseInterceptor.ts index 46bb757c867..6c4c9a6cf94 100644 --- a/src/test/utils/phaseInterceptor.ts +++ b/src/test/utils/phaseInterceptor.ts @@ -43,6 +43,7 @@ import { UnavailablePhase } from "#app/phases/unavailable-phase"; import { VictoryPhase } from "#app/phases/victory-phase"; import { PartyHealPhase } from "#app/phases/party-heal-phase"; import UI, { Mode } from "#app/ui/ui"; +import { SelectBiomePhase } from "#app/phases/select-biome-phase"; import { MysteryEncounterBattlePhase, MysteryEncounterOptionSelectedPhase, @@ -122,6 +123,7 @@ export default class PhaseInterceptor { [EndEvolutionPhase, this.startPhase], [LevelCapPhase, this.startPhase], [AttemptRunPhase, this.startPhase], + [SelectBiomePhase, this.startPhase], [MysteryEncounterPhase, this.startPhase], [MysteryEncounterOptionSelectedPhase, this.startPhase], [MysteryEncounterBattlePhase, this.startPhase], @@ -346,7 +348,8 @@ export default class PhaseInterceptor { console.log("setMode", `${Mode[mode]} (=${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`); + throw new Error(`missing ${currentPhase.constructor.name} in phaseInterceptor PHASES list --- Add it to PHASES inside of /test/utils/phaseInterceptor.ts`); + } if (this.phases[currentPhase.constructor.name].endBySetMode) { this.inProgress?.callback(); diff --git a/src/tutorial.ts b/src/tutorial.ts index 18d8291d227..3934ffee57f 100644 --- a/src/tutorial.ts +++ b/src/tutorial.ts @@ -74,11 +74,11 @@ const tutorialHandlers = { * @returns a promise with result `true` if the tutorial was run and finished, `false` otherwise */ export async function handleTutorial(scene: BattleScene, tutorial: Tutorial): Promise { - if (!scene.enableTutorials && !Overrides.BYPASS_TUTORIAL_SKIP) { + if (!scene.enableTutorials && !Overrides.BYPASS_TUTORIAL_SKIP_OVERRIDE) { return false; } - if (scene.gameData.getTutorialFlags()[tutorial] && !Overrides.BYPASS_TUTORIAL_SKIP) { + if (scene.gameData.getTutorialFlags()[tutorial] && !Overrides.BYPASS_TUTORIAL_SKIP_OVERRIDE) { return false; } From a25ccbcde6f4b0ebb86c89d54bd37d3ecc6f4ac3 Mon Sep 17 00:00:00 2001 From: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com> Date: Thu, 26 Sep 2024 10:51:49 +0200 Subject: [PATCH 04/10] [UI] Make Egg List and Egg Summary scrollable (#4391) --- src/ui/egg-list-ui-handler.ts | 166 +++++++++++++---------- src/ui/egg-summary-ui-handler.ts | 197 ++++++++-------------------- src/ui/hatched-pokemon-container.ts | 136 +++++++++++++++++++ src/ui/scroll-bar.ts | 11 +- src/ui/scrollable-grid-handler.ts | 197 ++++++++++++++++++++++++++++ 5 files changed, 496 insertions(+), 211 deletions(-) create mode 100644 src/ui/hatched-pokemon-container.ts create mode 100644 src/ui/scrollable-grid-handler.ts diff --git a/src/ui/egg-list-ui-handler.ts b/src/ui/egg-list-ui-handler.ts index fd8444f73ef..0ebc0f8140e 100644 --- a/src/ui/egg-list-ui-handler.ts +++ b/src/ui/egg-list-ui-handler.ts @@ -1,16 +1,21 @@ -import BattleScene from "../battle-scene"; -import { Mode } from "./ui"; -import PokemonIconAnimHandler, { PokemonIconAnimMode } from "./pokemon-icon-anim-handler"; -import { TextStyle, addTextObject } from "./text"; -import MessageUiHandler from "./message-ui-handler"; -import { Egg } from "../data/egg"; -import { addWindow } from "./ui-theme"; +import BattleScene from "#app/battle-scene"; +import { Mode } from "#app/ui/ui"; +import PokemonIconAnimHandler, { PokemonIconAnimMode } from "#app/ui/pokemon-icon-anim-handler"; +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 i18next from "i18next"; +import ScrollableGridUiHandler from "#app/ui/scrollable-grid-handler"; +import { ScrollBar } from "#app/ui/scroll-bar"; export default class EggListUiHandler extends MessageUiHandler { + private readonly ROWS = 9; + private readonly COLUMNS = 11; + private eggListContainer: Phaser.GameObjects.Container; private eggListIconContainer: Phaser.GameObjects.Container; + private eggIcons: Phaser.GameObjects.Sprite[]; private eggSprite: Phaser.GameObjects.Sprite; private eggNameText: Phaser.GameObjects.Text; private eggDateText: Phaser.GameObjects.Text; @@ -19,6 +24,7 @@ export default class EggListUiHandler extends MessageUiHandler { private eggListMessageBoxContainer: Phaser.GameObjects.Container; private cursorObj: Phaser.GameObjects.Image; + private scrollGridHandler : ScrollableGridUiHandler; private iconAnimHandler: PokemonIconAnimHandler; @@ -64,7 +70,7 @@ export default class EggListUiHandler extends MessageUiHandler { this.eggGachaInfoText.setWordWrapWidth(540); this.eggListContainer.add(this.eggGachaInfoText); - this.eggListIconContainer = this.scene.add.container(115, 9); + this.eggListIconContainer = this.scene.add.container(113, 5); this.eggListContainer.add(this.eggListIconContainer); this.cursorObj = this.scene.add.image(0, 0, "select_cursor"); @@ -74,6 +80,14 @@ export default class EggListUiHandler extends MessageUiHandler { this.eggSprite = this.scene.add.sprite(54, 37, "egg"); this.eggListContainer.add(this.eggSprite); + const scrollBar = new ScrollBar(this.scene, 310, 5, 4, 170, this.ROWS); + this.eggListContainer.add(scrollBar); + + this.scrollGridHandler = new ScrollableGridUiHandler(this, this.ROWS, this.COLUMNS) + .withScrollBar(scrollBar) + .withUpdateGridCallBack(() => this.updateEggIcons()) + .withUpdateSingleElementCallback((i:number) => this.setEggDetails(i)); + this.eggListMessageBoxContainer = this.scene.add.container(0, this.scene.game.canvas.height / 6); this.eggListMessageBoxContainer.setVisible(false); this.eggListContainer.add(this.eggListMessageBoxContainer); @@ -92,76 +106,63 @@ export default class EggListUiHandler extends MessageUiHandler { show(args: any[]): boolean { super.show(args); + this.initEggIcons(); + this.getUi().bringToTop(this.eggListContainer); this.eggListContainer.setVisible(true); - let e = 0; - - for (const egg of this.scene.gameData.eggs) { - const x = (e % 11) * 18; - const y = Math.floor(e / 11) * 18; - const icon = this.scene.add.sprite(x - 2, y + 2, "egg_icons"); - icon.setScale(0.5); - icon.setOrigin(0, 0); - icon.setFrame(egg.getKey()); - this.eggListIconContainer.add(icon); - this.iconAnimHandler.addOrUpdate(icon, PokemonIconAnimMode.NONE); - e++; - } + this.scrollGridHandler.setTotalElements(this.scene.gameData.eggs.length); + this.updateEggIcons(); this.setCursor(0); return true; } - processInput(button: Button): boolean { - const ui = this.getUi(); - - let success = false; - const error = false; - - if (button === Button.CANCEL) { - ui.revertMode(); - success = true; - } else { - const eggCount = this.eggListIconContainer.getAll().length; - const rows = Math.ceil(eggCount / 11); - const row = Math.floor(this.cursor / 11); - switch (button) { - case Button.UP: - if (row) { - success = this.setCursor(this.cursor - 11); - } - break; - case Button.DOWN: - if (row < rows - 2 || (row < rows - 1 && this.cursor % 11 <= (eggCount - 1) % 11)) { - success = this.setCursor(this.cursor + 11); - } - break; - case Button.LEFT: - if (this.cursor % 11) { - success = this.setCursor(this.cursor - 1); - } - break; - case Button.RIGHT: - if (this.cursor % 11 < (row < rows - 1 ? 10 : (eggCount - 1) % 11)) { - success = this.setCursor(this.cursor + 1); - } - break; - } + /** + * Create the grid of egg icons to display + */ + private initEggIcons() { + this.eggIcons = []; + for (let i = 0; i < Math.min(this.ROWS * this.COLUMNS, this.scene.gameData.eggs.length); i++) { + const x = (i % this.COLUMNS) * 18; + const y = Math.floor(i / this.COLUMNS) * 18; + const icon = this.scene.add.sprite(x - 2, y + 2, "egg_icons"); + icon.setScale(0.5); + icon.setOrigin(0, 0); + this.eggListIconContainer.add(icon); + this.eggIcons.push(icon); } - - if (success) { - ui.playSelect(); - } else if (error) { - ui.playError(); - } - - return success || error; } - setEggDetails(egg: Egg): void { + /** + * Show the grid of egg icons + */ + private updateEggIcons() { + const indexOffset = this.scrollGridHandler.getItemOffset(); + const eggsToShow = Math.min(this.eggIcons.length, this.scene.gameData.eggs.length - indexOffset); + + this.eggIcons.forEach((icon, i) => { + if (i !== this.cursor) { + this.iconAnimHandler.addOrUpdate(icon, PokemonIconAnimMode.NONE); + } + if (i < eggsToShow) { + const egg = this.scene.gameData.eggs[i + indexOffset]; + icon.setFrame(egg.getKey()); + icon.setVisible(true); + } else { + icon.setVisible(false); + } + }); + } + + /** + * Update the information panel with the information of the given egg + * @param index which egg in the list to display the info for + */ + private setEggDetails(index: number): void { + const egg = this.scene.gameData.eggs[index]; this.eggSprite.setFrame(`egg_${egg.getKey()}`); this.eggNameText.setText(`${i18next.t("egg:egg")} (${egg.getEggDescriptor()})`); this.eggDateText.setText( @@ -176,7 +177,29 @@ export default class EggListUiHandler extends MessageUiHandler { this.eggGachaInfoText.setText(egg.getEggTypeDescriptor(this.scene)); } - setCursor(cursor: integer): boolean { + processInput(button: Button): boolean { + const ui = this.getUi(); + + let success = false; + const error = false; + + if (button === Button.CANCEL) { + ui.revertMode(); + success = true; + } else { + success = this.scrollGridHandler.processInput(button); + } + + if (success) { + ui.playSelect(); + } else if (error) { + ui.playError(); + } + + return success || error; + } + + setCursor(cursor: number): boolean { let changed = false; const lastCursor = this.cursor; @@ -184,14 +207,15 @@ export default class EggListUiHandler extends MessageUiHandler { changed = super.setCursor(cursor); if (changed) { - this.cursorObj.setPosition(114 + 18 * (cursor % 11), 10 + 18 * Math.floor(cursor / 11)); + const icon = this.eggIcons[cursor]; + this.cursorObj.setPositionRelative(icon, 114, 5); if (lastCursor > -1) { - this.iconAnimHandler.addOrUpdate(this.eggListIconContainer.getAt(lastCursor) as Phaser.GameObjects.Sprite, PokemonIconAnimMode.NONE); + this.iconAnimHandler.addOrUpdate(this.eggIcons[lastCursor], PokemonIconAnimMode.NONE); } - this.iconAnimHandler.addOrUpdate(this.eggListIconContainer.getAt(cursor) as Phaser.GameObjects.Sprite, PokemonIconAnimMode.ACTIVE); + this.iconAnimHandler.addOrUpdate(icon, PokemonIconAnimMode.ACTIVE); - this.setEggDetails(this.scene.gameData.eggs[cursor]); + this.setEggDetails(cursor + this.scrollGridHandler.getItemOffset()); } return changed; @@ -199,9 +223,11 @@ export default class EggListUiHandler extends MessageUiHandler { clear(): void { super.clear(); + this.scrollGridHandler.reset(); this.cursor = -1; this.eggListContainer.setVisible(false); this.iconAnimHandler.removeAll(); this.eggListIconContainer.removeAll(true); + this.eggIcons = []; } } diff --git a/src/ui/egg-summary-ui-handler.ts b/src/ui/egg-summary-ui-handler.ts index 99fbccb4257..f4c3e056360 100644 --- a/src/ui/egg-summary-ui-handler.ts +++ b/src/ui/egg-summary-ui-handler.ts @@ -3,17 +3,17 @@ import { Mode } from "./ui"; import PokemonIconAnimHandler, { PokemonIconAnimMode } from "./pokemon-icon-anim-handler"; import MessageUiHandler from "./message-ui-handler"; import { getEggTierForSpecies } from "../data/egg"; -import {Button} from "#enums/buttons"; -import { Gender } from "#app/data/gender"; -import { getVariantTint } from "#app/data/variant"; -import { EggTier } from "#app/enums/egg-type"; +import { Button } from "#enums/buttons"; import PokemonHatchInfoContainer from "./pokemon-hatch-info-container"; import { EggSummaryPhase } from "#app/phases/egg-summary-phase"; -import { DexAttr } from "#app/system/game-data"; import { EggHatchData } from "#app/data/egg-hatch-data"; +import ScrollableGridUiHandler from "./scrollable-grid-handler"; +import { HatchedPokemonContainer } from "./hatched-pokemon-container"; +import { ScrollBar } from "#app/ui/scroll-bar"; -const iconContainerX = 115; +const iconContainerX = 112; const iconContainerY = 9; +const numRows = 9; const numCols = 11; const iconSize = 18; @@ -27,20 +27,20 @@ export default class EggSummaryUiHandler extends MessageUiHandler { private eggHatchContainer: Phaser.GameObjects.Container; /** holds the icon containers and info container */ private summaryContainer: Phaser.GameObjects.Container; - /** container for the mini pokemon sprites */ - private pokemonIconSpritesContainer: Phaser.GameObjects.Container; - /** container for the icons displayed on top of the mini pokemon sprites (e.g. shiny, HA capsule) */ + /** container for the each pokemon sprites and icons */ private pokemonIconsContainer: Phaser.GameObjects.Container; - /** container for the elements displayed behind the mini pokemon sprites (e.g. egg rarity bg) */ - private pokemonBackgroundContainer: Phaser.GameObjects.Container; + /** list of the containers added to pokemonIconsContainer for easier access */ + private pokemonContainers: HatchedPokemonContainer[]; + /** hatch info container that displays the current pokemon / hatch (main element on left hand side) */ private infoContainer: PokemonHatchInfoContainer; /** handles jumping animations for the pokemon sprite icons */ private iconAnimHandler: PokemonIconAnimHandler; private eggHatchBg: Phaser.GameObjects.Image; - private cursorObj: Phaser.GameObjects.Image; private eggHatchData: EggHatchData[]; + private scrollGridHandler : ScrollableGridUiHandler; + private cursorObj: Phaser.GameObjects.Image; /** * Allows subscribers to listen for events @@ -54,7 +54,6 @@ export default class EggSummaryUiHandler extends MessageUiHandler { super(scene, Mode.EGG_HATCH_SUMMARY); } - setup() { const ui = this.getUi(); @@ -77,11 +76,8 @@ export default class EggSummaryUiHandler extends MessageUiHandler { this.cursorObj.setOrigin(0, 0); this.summaryContainer.add(this.cursorObj); - this.pokemonIconSpritesContainer = this.scene.add.container(iconContainerX, iconContainerY); + this.pokemonContainers = []; this.pokemonIconsContainer = this.scene.add.container(iconContainerX, iconContainerY); - this.pokemonBackgroundContainer = this.scene.add.container(iconContainerX, iconContainerY); - this.summaryContainer.add(this.pokemonBackgroundContainer); - this.summaryContainer.add(this.pokemonIconSpritesContainer); this.summaryContainer.add(this.pokemonIconsContainer); this.infoContainer = new PokemonHatchInfoContainer(this.scene, this.summaryContainer); @@ -90,16 +86,24 @@ export default class EggSummaryUiHandler extends MessageUiHandler { this.infoContainer.setVisible(true); this.summaryContainer.add(this.infoContainer); + const scrollBar = new ScrollBar(this.scene, iconContainerX + numCols * iconSize, iconContainerY + 3, 4, this.scene.game.canvas.height / 6 - 20, numRows); + this.summaryContainer.add(scrollBar); + + this.scrollGridHandler = new ScrollableGridUiHandler(this, numRows, numCols) + .withScrollBar(scrollBar) + .withUpdateGridCallBack(() => this.updatePokemonIcons()) + .withUpdateSingleElementCallback((i: number) => this.infoContainer.showHatchInfo(this.eggHatchData[i])); + this.cursor = -1; } clear() { super.clear(); this.cursor = -1; + this.scrollGridHandler.reset(); this.summaryContainer.setVisible(false); - this.pokemonIconSpritesContainer.removeAll(true); this.pokemonIconsContainer.removeAll(true); - this.pokemonBackgroundContainer.removeAll(true); + this.pokemonContainers = []; this.eggHatchBg.setVisible(false); this.getUi().hideTooltip(); @@ -149,111 +153,51 @@ export default class EggSummaryUiHandler extends MessageUiHandler { return 0; } } - } - - ); + }); } this.getUi().bringToTop(this.summaryContainer); this.summaryContainer.setVisible(true); this.eggHatchContainer.setVisible(true); - this.pokemonIconsContainer.setVisible(true); this.eggHatchBg.setVisible(true); this.infoContainer.hideDisplayPokemon(); - this.eggHatchData.forEach( (value: EggHatchData, i: number) => { - const x = (i % numCols) * iconSize; - const y = Math.floor(i / numCols) * iconSize; - - const displayPokemon = value.pokemon; - const offset = 2; - const rightSideX = 12; - - const rarityBg = this.scene.add.image(x + 2, y + 5, "passive_bg"); - rarityBg.setOrigin(0, 0); - rarityBg.setScale(0.75); - rarityBg.setVisible(true); - this.pokemonBackgroundContainer.add(rarityBg); - - // set tint for passive bg - switch (getEggTierForSpecies(displayPokemon.species)) { - case EggTier.COMMON: - rarityBg.setVisible(false); - break; - case EggTier.GREAT: - rarityBg.setTint(0xabafff); - break; - case EggTier.ULTRA: - rarityBg.setTint(0xffffaa); - break; - case EggTier.MASTER: - rarityBg.setTint(0xdfffaf); - break; - } - const species = displayPokemon.species; - const female = displayPokemon.gender === Gender.FEMALE; - const formIndex = displayPokemon.formIndex; - const variant = displayPokemon.variant; - const isShiny = displayPokemon.shiny; - - // set pokemon icon (and replace with base sprite if there is a mismatch) - const pokemonIcon = this.scene.add.sprite(x - offset, y + offset, species.getIconAtlasKey(formIndex, isShiny, variant)); - pokemonIcon.setScale(0.5); - pokemonIcon.setOrigin(0, 0); - pokemonIcon.setFrame(species.getIconId(female, formIndex, isShiny, variant)); - - if (pokemonIcon.frame.name !== species.getIconId(female, formIndex, isShiny, variant)) { - console.log(`${species.name}'s variant icon does not exist. Replacing with default.`); - pokemonIcon.setTexture(species.getIconAtlasKey(formIndex, false, variant)); - pokemonIcon.setFrame(species.getIconId(female, formIndex, false, variant)); - } - this.pokemonIconSpritesContainer.add(pokemonIcon); - - const shinyIcon = this.scene.add.image(x + rightSideX, y + offset, "shiny_star_small"); - shinyIcon.setOrigin(0, 0); - shinyIcon.setScale(0.5); - shinyIcon.setVisible(displayPokemon.shiny); - shinyIcon.setTint(getVariantTint(displayPokemon.variant)); - this.pokemonIconsContainer.add(shinyIcon); - - const haIcon = this.scene.add.image(x + rightSideX, y + offset * 4, "ha_capsule"); - haIcon.setOrigin(0, 0); - haIcon.setScale(0.5); - haIcon.setVisible(displayPokemon.abilityIndex === 2); - this.pokemonIconsContainer.add(haIcon); - - const dexEntry = value.dexEntryBeforeUpdate; - const caughtAttr = dexEntry.caughtAttr; - const newShiny = BigInt(1 << (displayPokemon.shiny ? 1 : 0)); - const newVariant = BigInt(1 << (displayPokemon.variant + 4)); - const newShinyOrVariant = ((newShiny & caughtAttr) === BigInt(0)) || ((newVariant & caughtAttr) === BigInt(0)); - const newForm = (BigInt(1 << displayPokemon.formIndex) * DexAttr.DEFAULT_FORM & caughtAttr) === BigInt(0); - - const pokeballIcon = this.scene.add.image(x + rightSideX, y + offset * 7, "icon_owned"); - pokeballIcon.setOrigin(0, 0); - pokeballIcon.setScale(0.5); - pokeballIcon.setVisible(!caughtAttr || newForm); - this.pokemonIconsContainer.add(pokeballIcon); - - const eggMoveIcon = this.scene.add.image(x, y + offset, "icon_egg_move"); - eggMoveIcon.setOrigin(0, 0); - eggMoveIcon.setScale(0.5); - eggMoveIcon.setVisible(value.eggMoveUnlocked); - this.pokemonIconsContainer.add(eggMoveIcon); - - // add animation to the Pokemon sprite for new unlocks (new catch, new shiny or new form) - if (!caughtAttr || newShinyOrVariant || newForm) { - this.iconAnimHandler.addOrUpdate(pokemonIcon, PokemonIconAnimMode.PASSIVE); - } else { - this.iconAnimHandler.addOrUpdate(pokemonIcon, PokemonIconAnimMode.NONE); - } - }); + this.scrollGridHandler.setTotalElements(this.eggHatchData.length); + this.updatePokemonIcons(); this.setCursor(0); this.scene.playSoundWithoutBgm("evolution_fanfare"); return true; } + /** + * Show the grid of Pokemon icons + */ + private updatePokemonIcons(): void { + const itemOffset = this.scrollGridHandler.getItemOffset(); + const eggsToShow = Math.min(numRows * numCols, this.eggHatchData.length - itemOffset); + + for (let i = 0; i < numRows * numCols; i++) { + const hatchData = this.eggHatchData[i + itemOffset]; + let hatchContainer = this.pokemonContainers[i]; + + if (i < eggsToShow) { + if (!hatchContainer) { + const x = (i % numCols) * iconSize; + const y = Math.floor(i / numCols) * iconSize; + hatchContainer = new HatchedPokemonContainer(this.scene, x, y, hatchData).setVisible(false); + this.pokemonContainers.push(hatchContainer); + this.pokemonIconsContainer.add(hatchContainer); + } + hatchContainer.setVisible(true); + hatchContainer.updateAndAnimate(hatchData, this.iconAnimHandler); + } else if (hatchContainer) { + hatchContainer.setVisible(false); + this.iconAnimHandler.addOrUpdate(hatchContainer.icon, PokemonIconAnimMode.NONE); + } + } + } + processInput(button: Button): boolean { const ui = this.getUi(); @@ -266,31 +210,7 @@ export default class EggSummaryUiHandler extends MessageUiHandler { } success = true; } else { - const count = this.eggHatchData.length; - const rows = Math.ceil(count / numCols); - const row = Math.floor(this.cursor / numCols); - switch (button) { - case Button.UP: - if (row) { - success = this.setCursor(this.cursor - numCols); - } - break; - case Button.DOWN: - if (row < rows - 2 || (row < rows - 1 && this.cursor % numCols <= (count - 1) % numCols)) { - success = this.setCursor(this.cursor + numCols); - } - break; - case Button.LEFT: - if (this.cursor % numCols) { - success = this.setCursor(this.cursor - 1); - } - break; - case Button.RIGHT: - if (this.cursor % numCols < (row < rows - 1 ? 10 : (count - 1) % numCols)) { - success = this.setCursor(this.cursor + 1); - } - break; - } + this.scrollGridHandler.processInput(button); } if (success) { @@ -313,12 +233,11 @@ export default class EggSummaryUiHandler extends MessageUiHandler { this.cursorObj.setPosition(iconContainerX - 1 + iconSize * (cursor % numCols), iconContainerY + 1 + iconSize * Math.floor(cursor / numCols)); if (lastCursor > -1) { - this.iconAnimHandler.addOrUpdate(this.pokemonIconSpritesContainer.getAt(lastCursor) as Phaser.GameObjects.Sprite, PokemonIconAnimMode.NONE); + this.iconAnimHandler.addOrUpdate(this.pokemonContainers[lastCursor].icon, PokemonIconAnimMode.NONE); } - this.iconAnimHandler.addOrUpdate(this.pokemonIconSpritesContainer.getAt(cursor) as Phaser.GameObjects.Sprite, PokemonIconAnimMode.ACTIVE); - - this.infoContainer.showHatchInfo(this.eggHatchData[cursor]); + this.iconAnimHandler.addOrUpdate(this.pokemonContainers[cursor].icon, PokemonIconAnimMode.ACTIVE); + this.infoContainer.showHatchInfo(this.eggHatchData[cursor + this.scrollGridHandler.getItemOffset()]); } return changed; diff --git a/src/ui/hatched-pokemon-container.ts b/src/ui/hatched-pokemon-container.ts new file mode 100644 index 00000000000..9fb1fd26b30 --- /dev/null +++ b/src/ui/hatched-pokemon-container.ts @@ -0,0 +1,136 @@ +import { EggHatchData } from "#app/data/egg-hatch-data"; +import { Gender } from "#app/data/gender"; +import { getVariantTint } from "#app/data/variant"; +import { DexAttr } from "#app/system/game-data"; +import BattleScene from "#app/battle-scene"; +import PokemonSpecies from "#app/data/pokemon-species"; +import PokemonIconAnimHandler, { PokemonIconAnimMode } from "./pokemon-icon-anim-handler"; + +/** + * A container for a Pokemon's sprite and icons to get displayed in the egg summary screen + * Shows the Pokemon's sprite, surrounded by icons for: + * shiny variant, hidden ability, new egg move, new catch + */ +export class HatchedPokemonContainer extends Phaser.GameObjects.Container { + public scene: BattleScene; + public species: PokemonSpecies; + public icon: Phaser.GameObjects.Sprite; + public shinyIcon: Phaser.GameObjects.Image; + public hiddenAbilityIcon: Phaser.GameObjects.Image; + public pokeballIcon: Phaser.GameObjects.Image; + public eggMoveIcon: Phaser.GameObjects.Image; + + /** + * @param scene the current {@linkcode BattleScene} + * @param x x position + * @param y y position + * @param hatchData the {@linkcode EggHatchData} to load the icons and sprites for + */ + constructor(scene: BattleScene, x: number, y: number, hatchData: EggHatchData) { + super(scene, x, y); + + const displayPokemon = hatchData.pokemon; + this.species = displayPokemon.species; + + const offset = 2; + const rightSideX = 12; + const species = displayPokemon.species; + const female = displayPokemon.gender === Gender.FEMALE; + const formIndex = displayPokemon.formIndex; + const variant = displayPokemon.variant; + const isShiny = displayPokemon.shiny; + + // Pokemon sprite + const pokemonIcon = this.scene.add.sprite(-offset, offset, species.getIconAtlasKey(formIndex, isShiny, variant)); + pokemonIcon.setScale(0.5); + pokemonIcon.setOrigin(0, 0); + pokemonIcon.setFrame(species.getIconId(female, formIndex, isShiny, variant)); + this.icon = pokemonIcon; + this.checkIconId(female, formIndex, isShiny, variant); + this.add(this.icon); + + // Shiny icon + this.shinyIcon = this.scene.add.image(rightSideX, offset, "shiny_star_small"); + this.shinyIcon.setOrigin(0, 0); + this.shinyIcon.setScale(0.5); + this.add(this.shinyIcon); + + // Hidden ability icon + const haIcon = this.scene.add.image(rightSideX, offset * 4, "ha_capsule"); + haIcon.setOrigin(0, 0); + haIcon.setScale(0.5); + this.hiddenAbilityIcon = haIcon; + this.add(this.hiddenAbilityIcon); + + // Pokeball icon + const pokeballIcon = this.scene.add.image(rightSideX, offset * 7, "icon_owned"); + pokeballIcon.setOrigin(0, 0); + pokeballIcon.setScale(0.5); + this.pokeballIcon = pokeballIcon; + this.add(this.pokeballIcon); + + // Egg move icon + const eggMoveIcon = this.scene.add.image(0, offset, "icon_egg_move"); + eggMoveIcon.setOrigin(0, 0); + eggMoveIcon.setScale(0.5); + this.eggMoveIcon = eggMoveIcon; + this.add(this.eggMoveIcon); + } + + /** + * Update the Pokemon's sprite and icons based on new hatch data + * Animates the pokemon icon if it has a new form or shiny variant + * + * @param hatchData the {@linkcode EggHatchData} to base the icons on + * @param iconAnimHandler the {@linkcode PokemonIconAnimHandler} to use to animate the sprites + */ + updateAndAnimate(hatchData: EggHatchData, iconAnimHandler: PokemonIconAnimHandler) { + const displayPokemon = hatchData.pokemon; + this.species = displayPokemon.species; + + const dexEntry = hatchData.dexEntryBeforeUpdate; + const caughtAttr = dexEntry.caughtAttr; + const newShiny = BigInt(1 << (displayPokemon.shiny ? 1 : 0)); + const newVariant = BigInt(1 << (displayPokemon.variant + 4)); + const newShinyOrVariant = ((newShiny & caughtAttr) === BigInt(0)) || ((newVariant & caughtAttr) === BigInt(0)); + const newForm = (BigInt(1 << displayPokemon.formIndex) * DexAttr.DEFAULT_FORM & caughtAttr) === BigInt(0); + + const female = displayPokemon.gender === Gender.FEMALE; + const formIndex = displayPokemon.formIndex; + const variant = displayPokemon.variant; + const isShiny = displayPokemon.shiny; + + this.icon.setTexture(this.species.getIconAtlasKey(formIndex, isShiny, variant)); + this.icon.setFrame(this.species.getIconId(female, formIndex, isShiny, variant)); + this.checkIconId(female, formIndex, isShiny, variant); + + this.shinyIcon.setVisible(displayPokemon.shiny); + this.shinyIcon.setTint(getVariantTint(displayPokemon.variant)); + + this.eggMoveIcon.setVisible(hatchData.eggMoveUnlocked); + this.hiddenAbilityIcon.setVisible(displayPokemon.abilityIndex === 2); + this.pokeballIcon.setVisible(!caughtAttr || newForm); + + // add animation to the Pokemon sprite for new unlocks (new catch, new shiny or new form) + if (!caughtAttr || newShinyOrVariant || newForm) { + iconAnimHandler.addOrUpdate(this.icon, PokemonIconAnimMode.PASSIVE); + } else { + iconAnimHandler.addOrUpdate(this.icon, PokemonIconAnimMode.NONE); + } + } + + /** + * Check if the given Pokemon icon exists, otherwise replace it with a default one + * @param female `true` to get the female icon + * @param formIndex the form index + * @param shiny whether the Pokemon is shiny + * @param variant the shiny variant + */ + private checkIconId(female: boolean, formIndex: number, shiny: boolean, variant: number) { + if (this.icon.frame.name !== this.species.getIconId(female, formIndex, shiny, variant)) { + console.log(`${this.species.name}'s variant icon does not exist. Replacing with default.`); + this.icon.setTexture(this.species.getIconAtlasKey(formIndex, false, variant)); + this.icon.setFrame(this.species.getIconId(female, formIndex, false, variant)); + } + } +} diff --git a/src/ui/scroll-bar.ts b/src/ui/scroll-bar.ts index 5ed79d0cdad..9874be0f73a 100644 --- a/src/ui/scroll-bar.ts +++ b/src/ui/scroll-bar.ts @@ -22,6 +22,8 @@ export class ScrollBar extends Phaser.GameObjects.Container { super(scene, x, y); this.maxRows = maxRows; + this.totalRows = maxRows; + this.currentRow = 0; const borderSize = 2; width = Math.max(width, 4); @@ -46,8 +48,7 @@ export class ScrollBar extends Phaser.GameObjects.Container { */ setScrollCursor(scrollCursor: number): void { this.currentRow = scrollCursor; - this.handleBody.y = 1 + (this.bg.displayHeight - 1 - this.handleBottom.displayHeight) / this.totalRows * this.currentRow; - this.handleBottom.y = this.handleBody.y + this.handleBody.displayHeight; + this.updateHandlePosition(); } /** @@ -59,7 +60,13 @@ export class ScrollBar extends Phaser.GameObjects.Container { setTotalRows(rows: number): void { this.totalRows = rows; this.handleBody.height = (this.bg.displayHeight - 1 - this.handleBottom.displayHeight) * this.maxRows / this.totalRows; + this.updateHandlePosition(); this.setVisible(this.totalRows > this.maxRows); } + + private updateHandlePosition(): void { + this.handleBody.y = 1 + (this.bg.displayHeight - 1 - this.handleBottom.displayHeight) / this.totalRows * this.currentRow; + this.handleBottom.y = this.handleBody.y + this.handleBody.displayHeight; + } } diff --git a/src/ui/scrollable-grid-handler.ts b/src/ui/scrollable-grid-handler.ts new file mode 100644 index 00000000000..f96f3c995b7 --- /dev/null +++ b/src/ui/scrollable-grid-handler.ts @@ -0,0 +1,197 @@ +import { Button } from "#enums/buttons"; +import UiHandler from "#app/ui/ui-handler"; +import { ScrollBar } from "#app/ui/scroll-bar"; + +type UpdateGridCallbackFunction = () => void; +type UpdateDetailsCallbackFunction = (index: number) => void; + +/** + * A helper class to handle navigation through a grid of elements that can scroll vertically + * Needs to be used by a {@linkcode UiHandler} + * How to use: + * - in `UiHandler.setup`: Initialize with the {@linkcode UiHandler} that handles the grid, + * the number of rows and columns that can be shown at once, + * an optional {@linkcode ScrollBar}, and optional callbacks that will get called after scrolling + * - in `UiHandler.show`: Set `setTotalElements` to the total number of elements in the list to display + * - in `UiHandler.processInput`: call `processNavigationInput` to have it handle the cursor updates while calling the defined callbacks + * - in `UiHandler.clear`: call `reset` + */ +export default class ScrollableGridUiHandler { + private readonly ROWS: number; + private readonly COLUMNS: number; + private handler: UiHandler; + private totalElements: number; + private cursor: number; + private scrollCursor: number; + private scrollBar?: ScrollBar; + private updateGridCallback?: UpdateGridCallbackFunction; + private updateDetailsCallback?: UpdateDetailsCallbackFunction; + + /** + * @param scene the {@linkcode UiHandler} that needs its cursor updated based on the scrolling + * @param rows the maximum number of rows shown at once + * @param columns the maximum number of columns shown at once + * @param updateGridCallback optional function that will get called if the whole grid needs to get updated + * @param updateDetailsCallback optional function that will get called if a single element's information needs to get updated + */ + constructor(handler: UiHandler, rows: number, columns: number) { + this.handler = handler; + this.ROWS = rows; + this.COLUMNS = columns; + this.scrollCursor = 0; + this.cursor = 0; + this.totalElements = rows * columns; // default value for the number of elements + } + + /** + * Set a scrollBar to get updated with the scrolling + * @param scrollBar {@linkcode ScrollBar} + * @returns this + */ + withScrollBar(scrollBar: ScrollBar): ScrollableGridUiHandler { + this.scrollBar = scrollBar; + this.scrollBar.setTotalRows(Math.ceil(this.totalElements / this.COLUMNS)); + return this; + } + + /** + * Set function that will get called if the whole grid needs to get updated + * @param callback {@linkcode UpdateGridCallbackFunction} + * @returns this + */ + withUpdateGridCallBack(callback: UpdateGridCallbackFunction): ScrollableGridUiHandler { + this.updateGridCallback = callback; + return this; + } + + /** + * Set function that will get called if a single element in the grid needs to get updated + * @param callback {@linkcode UpdateDetailsCallbackFunction} + * @returns this + */ + withUpdateSingleElementCallback(callback: UpdateDetailsCallbackFunction): ScrollableGridUiHandler { + this.updateDetailsCallback = callback; + return this; + } + + /** + * @param totalElements the total number of elements that the grid needs to display + */ + setTotalElements(totalElements: number) { + this.totalElements = totalElements; + if (this.scrollBar) { + this.scrollBar.setTotalRows(Math.ceil(this.totalElements / this.COLUMNS)); + } + this.setScrollCursor(0); + } + + /** + * @returns how many elements are hidden due to scrolling + */ + getItemOffset(): number { + return this.scrollCursor * this.COLUMNS; + } + + /** + * Update the cursor and scrollCursor based on user input + * @param button the button that was pressed + * @returns `true` if either the cursor or scrollCursor was updated + */ + processInput(button: Button): boolean { + let success = false; + const onScreenRows = Math.min(this.ROWS, Math.ceil(this.totalElements / this.COLUMNS)); + const maxScrollCursor = Math.max(0, Math.ceil(this.totalElements / this.COLUMNS) - onScreenRows); + const currentRowIndex = Math.floor(this.cursor / this.COLUMNS); + const currentColumnIndex = this.cursor % this.COLUMNS; + 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 { + // wrap around to the last row + let newCursor = this.cursor + (onScreenRows - 1) * this.COLUMNS; + if (newCursor > lastVisibleIndex) { + newCursor -= this.COLUMNS; + } + success = this.setScrollCursor(maxScrollCursor, newCursor); + } + 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) { + // Scroll down one row + 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; + } + return success; + } + + /** + * Reset the scrolling + */ + reset(): void { + this.setScrollCursor(0); + this.setCursor(0); + } + + private setCursor(cursor: number): boolean { + this.cursor = cursor; + return this.handler.setCursor(cursor); + } + + private setScrollCursor(scrollCursor: number, cursor?: number): boolean { + const scrollChanged = scrollCursor !== this.scrollCursor; + + // update the scrolling cursor + if (scrollChanged) { + this.scrollCursor = scrollCursor; + if (this.scrollBar) { + this.scrollBar.setScrollCursor(scrollCursor); + } + if (this.updateGridCallback) { + this.updateGridCallback(); + } + } + + let cursorChanged = false; + const newElementIndex = this.cursor + this.scrollCursor * this.COLUMNS; + if (cursor !== undefined) { + cursorChanged = this.setCursor(cursor); + } else if (newElementIndex >= this.totalElements) { + // make sure the cursor does not go past the end of the list + cursorChanged = this.setCursor(this.totalElements - this.scrollCursor * this.COLUMNS - 1); + } else if (scrollChanged && this.updateDetailsCallback) { + // scroll was changed but not the normal cursor, update the selected element + this.updateDetailsCallback(newElementIndex); + } + + return scrollChanged || cursorChanged; + } + +} From af99297e5bf1e1e0b02e5f615914c8022c3eb42a Mon Sep 17 00:00:00 2001 From: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> Date: Thu, 26 Sep 2024 16:40:51 +0200 Subject: [PATCH 05/10] [Localization][DE] Translation First Test of Pontoon PR (#4432) * Pontoon: Update French (fr) localization of PokeRogue Co-authored-by: Sangara * Pontoon: Update German (de) localization of PokeRogue Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> * Pontoon: Update German (de) localization of PokeRogue Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> * Pontoon: Update German (de) localization of PokeRogue Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> Co-authored-by: Jannik * Apply suggestions from code review --------- Co-authored-by: Sangara Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> Co-authored-by: Frederico Santos Co-authored-by: Jannik --- src/locales/de/achv.json | 26 +- src/locales/de/battle.json | 11 +- src/locales/de/battler-tags.json | 3 +- src/locales/de/dialogue-double-battle.json | 12 +- src/locales/de/dialogue-final-boss.json | 12 +- src/locales/de/dialogue.json | 289 +++++++++++++----- src/locales/de/modifier-type.json | 44 ++- src/locales/de/move-trigger.json | 3 + .../field-trip-dialogue.json | 2 +- src/locales/de/party-ui-handler.json | 2 + src/locales/de/settings.json | 4 + 11 files changed, 306 insertions(+), 102 deletions(-) diff --git a/src/locales/de/achv.json b/src/locales/de/achv.json index 4fa48d8cfdc..cb57cf6841b 100644 --- a/src/locales/de/achv.json +++ b/src/locales/de/achv.json @@ -13,14 +13,16 @@ "name_female": "Besserverdienerin" }, "100K_MONEY": { - "name": "Reich" + "name": "Reich", + "name_female": "Reich" }, "1M_MONEY": { "name": "Millionär", "name_female": "Millionärin" }, "10M_MONEY": { - "name": "Einprozenter" + "name": "Einprozenter", + "name_female": "Einprozenter" }, "DamageAchv": { "description": "Füge mit einem Treffer {{damageAmount}} Schaden zu." @@ -29,10 +31,12 @@ "name": "Harte Treffer" }, "1000_DMG": { - "name": "Härtere Treffer" + "name": "Härtere Treffer", + "name_female": "Härtere Treffer" }, "2500_DMG": { - "name": "Das ist ne Menge Schaden!" + "name": "Das ist ne Menge Schaden!", + "name_female": "Das ist ne Menge Schaden!" }, "10000_DMG": { "name": "One Punch Man", @@ -46,7 +50,8 @@ "name_female": "Anfänger-Heilerin" }, "1000_HEAL": { - "name": "Gesundheitsprofi" + "name": "Gesundheitsprofi", + "name_female": "Gesundheitsprofi" }, "2500_HEAL": { "name": "Kleriker", @@ -63,7 +68,8 @@ "name": "Warte, es gibt mehr!" }, "LV_250": { - "name": "Elite" + "name": "Elite", + "name_female": "Elite" }, "LV_1000": { "name": "Geh noch höher hinaus!" @@ -72,7 +78,8 @@ "description": "Sammle insgesamt {{ribbonAmount}} Bänder." }, "10_RIBBONS": { - "name": "Champion der Pokémon Liga" + "name": "Champion der Pokémon Liga", + "name_female": "Champion der Pokémon Liga" }, "25_RIBBONS": { "name": "Bänder-Sammler", @@ -83,7 +90,8 @@ "name_female": "Bänder-Expertin" }, "75_RIBBONS": { - "name": "Bänder-Guru" + "name": "Bänder-Guru", + "name_female": "Bänder-Guru" }, "100_RIBBONS": { "name": "Bänder-Meister", @@ -139,6 +147,7 @@ }, "SHINY_PARTY": { "name": "Das ist Hingabe", + "name_female": "Das ist Hingabe", "description": "Habe ein Team aus schillernden Pokémon." }, "HATCH_MYTHICAL": { @@ -167,6 +176,7 @@ }, "CLASSIC_VICTORY": { "name": "Ungeschlagen", + "name_female": "Ungeschlagen", "description": "Beende den klassischen Modus erfolgreich." }, "UNEVOLVED_CLASSIC_VICTORY": { diff --git a/src/locales/de/battle.json b/src/locales/de/battle.json index 0a2bc4dc5d8..8ac26595983 100644 --- a/src/locales/de/battle.json +++ b/src/locales/de/battle.json @@ -49,7 +49,10 @@ "moveNotImplemented": "{{moveName}} ist noch nicht implementiert und kann nicht ausgewählt werden.", "moveNoPP": "Es sind keine AP für diese Attacke mehr übrig!", "moveDisabled": "{{moveName}} ist deaktiviert!", + "canOnlyUseMove": "{{pokemonName}} kann keine andere Attacke als {{moveName}} einsetzen!", + "moveCannotBeSelected": "{{moveName}} kann nicht ausgewählt werden!", "disableInterruptedMove": "{{moveName}} von {{pokemonNameWithAffix}} ist blockiert!", + "throatChopInterruptedMove": "{{pokemonName}} kann die Attacke durch die Wirkung von Neck Strike nicht einsetzen!", "noPokeballForce": "Eine unsichtbare Kraft verhindert die Nutzung von Pokébällen.", "noPokeballTrainer": "Du kannst das Pokémon eines anderen Trainers nicht fangen!", "noPokeballMulti": "Du kannst erst einen Pokéball werfen, wenn nur noch ein Pokémon übrig ist!", @@ -62,12 +65,13 @@ "runAwayCannotEscape": "Flucht gescheitert!", "escapeVerbSwitch": "auswechseln", "escapeVerbFlee": "flucht", - "skipItemQuestion": "Bist du sicher, dass du kein Item nehmen willst?", - "itemStackFull": "Du hast bereits zu viele von {{fullItemName}}. Du erhältst stattdessen {{itemName}}.", "notDisabled": "{{moveName}} von {{pokemonName}} ist nicht mehr deaktiviert!", "turnEndHpRestore": "Die KP von {{pokemonName}} wurden wiederhergestellt.", "hpIsFull": "Die KP von {{pokemonName}} sind voll!", + "skipItemQuestion": "Bist du sicher, dass du kein Item nehmen willst?", + "itemStackFull": "Du hast bereits zu viele von {{fullItemName}}. Du erhältst stattdessen {{itemName}}.", "eggHatching": "Oh?", + "eggSkipPrompt": "Zur Ei-Zusammenfassung springen?", "ivScannerUseQuestion": "IV-Scanner auf {{pokemonName}} benutzen?", "wildPokemonWithAffix": "{{pokemonName}} (wild)", "foePokemonWithAffix": "{{pokemonName}} (Gegner)", @@ -97,12 +101,11 @@ "statWontGoAnyLower_one": "{{stats}} von {{pokemonNameWithAffix}} kann nicht weiter sinken!", "statWontGoAnyLower_other": "{{stats}} von {{pokemonNameWithAffix}} können nicht weiter sinken!", "transformedIntoType": "{{pokemonName}} transformed\ninto the {{type}} type!", - "ppReduced": "{{moveName}} von {{targetName}} wird um {{reduction}} AP reduziert!", "retryBattle": "Möchtest du vom Beginn des Kampfes neustarten?", "unlockedSomething": "{{unlockedThing}} wurde freigeschaltet.", "congratulations": "Glückwunsch!", "beatModeFirstTime": "{{speciesName}} hat den {{gameMode}} Modus zum ersten Mal beendet! Du erhältst {{newModifier}}!", - "eggSkipPrompt": "Zur Ei-Zusammenfassung springen?", + "ppReduced": "{{moveName}} von {{targetName}} wird um {{reduction}} AP reduziert!", "mysteryEncounterAppeared": "Was ist das?", "battlerTagsHealBlock": "{{pokemonNameWithAffix}} kann nicht geheilt werden, da die Heilung blockiert wird!", "battlerTagsHealBlockOnRemove": "{{pokemonNameWithAffix}} kann wieder geheilt werden!" diff --git a/src/locales/de/battler-tags.json b/src/locales/de/battler-tags.json index 6cc0e93ffb2..f4b9d71eb49 100644 --- a/src/locales/de/battler-tags.json +++ b/src/locales/de/battler-tags.json @@ -74,5 +74,6 @@ "shedTailOnAdd": "{{pokemonNameWithAffix}} wirft seinen Schwanz ab, um eine Ablenkung zu schaffen!", "substituteOnAdd": "Ein Delegator von {{pokemonNameWithAffix}} ist erschienen!", "substituteOnHit": "Der Delegator steckt den Schlag für {{pokemonNameWithAffix}} ein!", - "substituteOnRemove": "Der Delegator von {{pokemonNameWithAffix}} hört auf zu wirken!" + "substituteOnRemove": "Der Delegator von {{pokemonNameWithAffix}} hört auf zu wirken!", + "autotomizeOnAdd": "{{pokemonNameWIthAffix}} ist leichter geworden!" } diff --git a/src/locales/de/dialogue-double-battle.json b/src/locales/de/dialogue-double-battle.json index ec7cf375c0c..3aa1550e0a3 100644 --- a/src/locales/de/dialogue-double-battle.json +++ b/src/locales/de/dialogue-double-battle.json @@ -57,13 +57,14 @@ }, "iris_alder_double": { "encounter": { - "1": "Lilia: Willkommen Herausforderer! Ich bin DER Champion von Einall!\n$Lauro: Lilia, bist du nicht etwas zu aufgeregt?" + "1": "Lilia: Willkommen Herausforderer! Ich bin DER Champion von Einall!\n$Lauro: Lilia, bist du nicht etwas zu aufgeregt?", + "1_female": "Lilia: Willkommen Herausforderer! Ich bin DER Champion von Einall!\n$Lauro: Lilia, bist du nicht etwas zu aufgeregt?" }, "victory": { "1": "Lilia: Eine solche Niederlage ist nicht einfach zu verkraften...\n$Lauro: Aber wir wachsen an unseren Niederlagen und werden immer besser!" } }, - "marnie_piers_double": { + "piers_marnie_double": { "encounter": { "1": "Mary: Bruder, lass uns ihnen die Kraft von Spikeford zeigen!\n$Nezz: Wir bringen die Dunkelheit!" }, @@ -71,12 +72,13 @@ "1": "Mary: Du hast Licht in unsere Dunkelheit gebracht!\n$Piers: Es ist viel zu hell..." } }, - "piers_marnie_double": { + "marnie_piers_double": { "encounter": { - "1": "Nezz: Bereit für ein Konzert?\n$Mary: Bruder...Sie sind hier um zu kämpfen, nicht um zu singen..." + "1": "Nezz: Bereit für ein Konzert?\n$Mary: Bruder...Sie sind hier um zu kämpfen, nicht um zu singen...", + "1_female": "Nezz: Bereit für ein Konzert?\n$Mary: Bruder...Sie sind hier um zu kämpfen, nicht um zu singen..." }, "victory": { "1": "Nezz: Das war mal ein großartiges Konzert!\n$Marnie: Bruder..." } } -} \ No newline at end of file +} diff --git a/src/locales/de/dialogue-final-boss.json b/src/locales/de/dialogue-final-boss.json index bffbd779be0..10b03082481 100644 --- a/src/locales/de/dialogue-final-boss.json +++ b/src/locales/de/dialogue-final-boss.json @@ -1,4 +1,10 @@ { - "encounter": "Es scheint, als wäre es wieder mal an der Zeit.\nDu weißt, warum du hierher kommen musst, oder?\n$Dich hat es hierher gezogen, du warst bereits hier.\nUnzählige Male.\n$Obwohl, vielleicht doch nicht unzählig.\nUm genau zu sein, dies ist der {{cycleCount}}te Zyklus.\n$Du verlierst jeden Zyklus dein Gedächtnis. Trotzdem \nbleibt etwas, ein Teil deines ehemaligen Ichs, erhalten.\n$Bis jetzt hast du es noch nicht vollbracht zu siegen, aber dieses Mal spüre ich eine andere Präsenz in dir.\n\n$Du bist der Einzige hier, aber es kommt mir so vor als wäre da...jemand anderes.\n$Wirst du endlich beweisen, dass du ein würdiger Herausforder bist?\nDie Herausforderung auf die ich seit Jahrtausenden warte?\n$Lass uns beginnen.","firstStageWin": "Ahh verstehe. Diese Präsenz, die ich gespürt habe, ist wirklich real.\nEs scheint als müsste ich micht nicht länger zurück halten.\n$Enttäusche mich nicht.", - "secondStageWin": "…Herrlich." -} \ No newline at end of file + "encounter": "Es scheint, als wäre es wieder mal an der Zeit.\nDu weißt, warum du hierher kommen musst, oder?\n$Dich hat es hierher gezogen, du warst bereits hier.\nUnzählige Male.\n$Obwohl, vielleicht doch nicht unzählig.\nUm genau zu sein, dies ist der {{cycleCount}}te Zyklus.\n$Du verlierst jeden Zyklus dein Gedächtnis. Trotzdem \nbleibt etwas, ein Teil deines ehemaligen Ichs, erhalten.\n$Bis jetzt hast du es noch nicht vollbracht zu siegen, aber dieses Mal spüre ich eine andere Präsenz in dir.\n\n$Du bist der Einzige hier, aber es kommt mir so vor als wäre da...jemand anderes.\n$Wirst du endlich beweisen, dass du ein würdiger Herausforder bist?\nDie Herausforderung auf die ich seit Jahrtausenden warte?\n$Lass uns beginnen.", + "encounter_female": "Es scheint, als wäre es wieder mal an der Zeit.\nDu weißt, warum du hierher kommen musst, oder?\n$Dich hat es hierher gezogen, du warst bereits hier.\nUnzählige Male.\n$Obwohl, vielleicht doch nicht unzählig.\nUm genau zu sein, dies ist der {{cycleCount}}te Zyklus.\n$Du verlierst jeden Zyklus dein Gedächtnis. Trotzdem \nbleibt etwas, ein Teil deines ehemaligen Ichs, erhalten.\n$Bis jetzt hast du es noch nicht vollbracht zu siegen, aber dieses Mal spüre ich eine andere Präsenz in dir.\n\n$Du bist der Einzige hier, aber es kommt mir so vor als wäre da...jemand anderes.\n$Wirst du endlich beweisen, dass du ein würdiger Herausforder bist?\nDie Herausforderung auf die ich seit Jahrtausenden warte?\n$Lass uns beginnen.", + "firstStageWin": "Ahh verstehe. Diese Präsenz, die ich gespürt habe, ist wirklich real.\nEs scheint als müsste ich micht nicht länger zurück halten.\n$Enttäusche mich nicht.", + "secondStageWin": "…Herrlich.", + "key_ordinal_one": "st", + "key_ordinal_two": "nd", + "key_ordinal_few": "rd", + "key_ordinal_other": "th" +} diff --git a/src/locales/de/dialogue.json b/src/locales/de/dialogue.json index fe7e37c1413..d3d2a1a4270 100644 --- a/src/locales/de/dialogue.json +++ b/src/locales/de/dialogue.json @@ -3,24 +3,31 @@ "encounter": { "1": "Hey, willst du kämpfen?", "2": "Bist du auch ein neuer Trainer?", + "2_female": "Bist du auch ein neuer Trainer?", "3": "Hey, ich habe dich noch nie gesehen. Lass uns kämpfen!", "4": "Ich habe gerade verloren und suche nach neuen Pokémon.\nWarte! Du siehst schwach aus! Lass uns kämpfen!", + "4_female": "Ich habe gerade verloren und suche nach neuen Pokémon.\nWarte! Du siehst schwach aus! Lass uns kämpfen!", "5": "Haben wir uns schon mal getroffen oder nicht? Ich erinnere mich nicht wirklich\n$Nun, ich denke, es ist trotzdem schön, dich zu treffen!", "6": "Okay, lass uns kämpfen!", "7": "Okay, hier komme ich! Ich zeige dir meine Kraft!", "8": "Fan fan fan... Ich zeige dir wie fantastisch meine Pokémon sind!", "9": "Es ist nicht nötig, Zeit mit Begrüßungen zu verschwenden.\nSobald du bereit bist geht es los!", + "9_female": "Es ist nicht nötig, Zeit mit Begrüßungen zu verschwenden.\nSobald du bereit bist geht es los!", "10": "Lass deine Deckung nicht fallen, sonst weinst du, wenn dich ein Kind besiegt.", "11": "Ich habe meine Pokémon mit großer Sorgfalt aufgezogen. Du darfst ihnen nicht wehtun!", "12": "Schön, dass du es geschafft hast! Von hier an wird es nicht einfacher.", - "13": "Die Kämpfe gehen immer weiter! Willkommen in der Welt ohne Ende!" + "12_female": "Schön, dass du es geschafft hast! Von hier an wird es nicht einfacher.", + "13": "Die Kämpfe gehen immer weiter! Willkommen in der Welt ohne Ende!", + "13_female": "Die Kämpfe gehen immer weiter! Willkommen in der Welt ohne Ende!" }, "victory": { "1": "Wow! Du bist stark!", + "1_female": "Wow! Du bist stark!", "2": "Ich hatte keine Chance, oder?", "3": "Wenn ich älter bin, werde ich dich besiegen!", "4": "Ugh. Ich habe keine Pokémon mehr.", "5": "Das kann nicht sein… DAS KANN NICHT SEIN! Wie konnte ich schon wieder verlieren…", + "5_female": "Das kann nicht sein… DAS KANN NICHT SEIN! Wie konnte ich schon wieder verlieren…", "6": "Nein! Ich habe verloren!", "7": "Wow! Du bist unglaublich! Ich bin erstaunt und überrascht!", "8": "Kann es sein… Wie… Meine Pokémon und ich sind die stärksten, aber…", @@ -35,10 +42,12 @@ "encounter": { "1": "Lass uns kämpfen, wollen wir?", "2": "Du siehst wie ein neuer Trainer aus. Lass uns kämpfen!", + "2_female": "Du siehst wie ein neuer Trainer aus. Lass uns kämpfen!", "3": "Ich erkenne dich nicht. Wie wäre es mit einem Kampf?", "4": "Lass uns einen lustigen Pokémon-Kampf haben!", "5": "Ich zeige dir, wie man Pokémon wirklich einsetzt!", "6": "Ein ernsthafter Kampf beginnt mit einem ernsten Anfang! Bist du sicher, dass du bereit bist?", + "6_female": "Ein ernsthafter Kampf beginnt mit einem ernsten Anfang! Bist du sicher, dass du bereit bist?", "7": "Du bist nur einmal jung. Und du hast nur eine Chance bei einem bestimmten Kampf.\n$Bald wirst du nur noch eine Erinnerung sein.", "8": "Du solltest es leicht mit mir angehen, OK? Aber ich kämpfe ernsthaft!", "9": "Die Schule ist langweilig. Ich habe nichts zu tun. Gähn. Ich kämpfe nur, um die Zeit totzuschlagen." @@ -46,12 +55,15 @@ "victory": { "1": "Das war beeindruckend! Ich habe noch viel zu lernen.", "2": "Ich dachte nicht, dass du mich so schlagen würdest…", + "2_female": "Ich dachte nicht, dass du mich so schlagen würdest…", "3": "Ich hoffe, wir haben eines Tages ein Rematch.", "4": "Das war ziemlich erstaunlich! Du hast mich total erschöpft…", "5": "Du hast mir tatsächlich eine Lektion erteilt! Du bist ziemlich erstaunlich!", "6": "Ernsthaft, ich habe verloren. Das ist, wie, ernsthaft deprimierend, aber du warst ernsthaft cool.", + "6_female": "Ernsthaft, ich habe verloren. Das ist, wie, ernsthaft deprimierend, aber du warst ernsthaft cool.", "7": "Ich brauche keine Erinnerungen wie diese. Löschen der Erinnerung…", "8": "Hey! Ich habe dir gesagt, du sollst es leicht mit mir angehen!\n$Trotzdem bist du ziemlich cool, wenn du ernsthaft bist.", + "8_female": "Hey! Ich habe dir gesagt, du sollst es leicht mit mir angehen!\n$Trotzdem bist du ziemlich cool, wenn du ernsthaft bist.", "9": "Ich werde langsam müde vom Kämpfen… Es muss etwas Neues zu tun geben…" } }, @@ -142,6 +154,7 @@ "ace_trainer": { "encounter": { "1": "Du scheinst ziemlich zuversichtlich zu sein.", + "1_female": "Du scheinst ziemlich zuversichtlich zu sein.", "2": "Deine Pokémon… Zeig sie mir…", "3": "Weil ich ein Ass-Trainer bin, denken die Leute, ich sei stark.", "4": "Weißt du, was es braucht, um ein Ass-Trainer zu sein?" @@ -150,7 +163,9 @@ "1": "Ja… Du hast gute Pokémon…", "2": "Was?! Aber ich bin ein Kampfgott!", "3": "Natürlich, du bist der Hauptcharakter!", - "4": "OK! OK! Du könntest ein Ass-Trainer sein!" + "3_female": "Natürlich, du bist der Hauptcharakter!", + "4": "OK! OK! Du könntest ein Ass-Trainer sein!", + "4_female": "OK! OK! Du könntest ein Ass-Trainer sein!" }, "defeat": { "1": "Ich widme meinen Körper und meine Seele den Pokémon-Kämpfen!", @@ -171,7 +186,8 @@ "encounter": { "1": "Mach dich bereit, denn wenn wir zusammenarbeiten, gibt es doppelten Ärger!", "2": "Zwei Herzen, eine Strategie – mal sehen, ob du mit unserer Zwillingskraft mithalten kannst!", - "3": "Hoffe, du bist bereit für doppelten Ärger, denn wir werden dir einheizen!" + "3": "Hoffe, du bist bereit für doppelten Ärger, denn wir werden dir einheizen!", + "3_female": "Hoffe, du bist bereit für doppelten Ärger, denn wir werden dir einheizen!" }, "victory": { "1": "Wir haben vielleicht diese Runde verloren, aber unsere Bindung bleibt unzerbrechlich!", @@ -199,7 +215,8 @@ "black_belt": { "encounter": { "1": "Ich lobe deinen Mut, mich herauszufordern! Denn ich bin derjenige mit dem stärksten Tritt!", - "2": "Oh, ich verstehe. Möchtest du in Stücke geschnitten werden? Oder bevorzugst du die Rolle des Punchingballs?" + "2": "Oh, ich verstehe. Möchtest du in Stücke geschnitten werden? Oder bevorzugst du die Rolle des Punchingballs?", + "2_female": "Oh, ich verstehe. Möchtest du in Stücke geschnitten werden? Oder bevorzugst du die Rolle des Punchingballs?" }, "victory": { "1": "Oh. Die Pokémon haben gekämpft. Mein starker Tritt hat überhaupt nicht geholfen.", @@ -332,7 +349,8 @@ }, "defeat": { "1": "New Age bezieht sich einfach auf Komponisten der klassischen Musik des 20. Jahrhunderts, richtig?", - "2": "Lass dich nicht von Traurigkeit oder Frustration aufhalten.\n$Du kannst deine Groll nutzen, um dich zu motivieren." + "2": "Lass dich nicht von Traurigkeit oder Frustration aufhalten.\n$Du kannst deine Groll nutzen, um dich zu motivieren.", + "2_female": "Lass dich nicht von Traurigkeit oder Frustration aufhalten.\n$Du kannst deine Groll nutzen, um dich zu motivieren." } }, "psychic": { @@ -363,7 +381,8 @@ }, "baker": { "encounter": { - "1": "Hoffe, du bist bereit, die Niederlage zu schmecken!" + "1": "Hoffe, du bist bereit, die Niederlage zu schmecken!", + "1_female": "Hoffe, du bist bereit, die Niederlage zu schmecken!" }, "victory": { "1": "Ich werde ein Comeback backen." @@ -393,7 +412,8 @@ "encounter": { "1": "Matrose, du gehst über Bord, wenn du verlierst!", "2": "Komm schon! Mein Stolz als Seemann steht auf dem Spiel!", - "3": "Ahoj! Bist du seekrank?" + "3": "Ahoj! Bist du seekrank?", + "3_female": "Ahoj! Bist du seekrank?" }, "victory": { "1": "Argh! Von einem Kind besiegt!", @@ -421,6 +441,7 @@ }, "victory": { "1": "Tch, du bist wirklich stark. Es ist schade. \n$Wenn du Team Rocket beitreten würdest, könntest du ein Vorstand werden.", + "1_female": "Tch, du bist wirklich stark. Es ist schade. \n$Wenn du Team Rocket beitreten würdest, könntest du ein Vorstand werden.", "2": "Ich... ich bin zerstört...", "3": "Aaaieeeee! Das kann nicht passieren! Ich habe hart gekämpft, aber trotzdem verloren..." } @@ -458,7 +479,8 @@ "victory": { "1": "Hehehe! Du hast mich vielleicht besiegt, aber du hast keine Chance gegen den Boss!\n$Wenn du jetzt aufgibst, musst du dich keiner ordentlichen Tracht Prügel stellen!", "2": "Hehehe... Also habe ich auch verloren...", - "3": "Ahya! Wie konnte das passieren? Ein Vorstand wie ich von einem zufälligen Trainer besiegt..." + "3": "Ahya! Wie konnte das passieren? Ein Vorstand wie ich von einem zufälligen Trainer besiegt...", + "3_female": "Ahya! Wie konnte das passieren? Ein Vorstand wie ich von einem zufälligen Trainer besiegt..." } }, "courtney": { @@ -477,12 +499,14 @@ "encounter": { "1": "Ahahahaha! Du wirst dich in die Angelegenheiten von Team Aqua einmischen?\n$Du bist entweder absolut furchtlos, einfach unwissend oder beides!\n$Du bist so süß, dass es ekelhaft ist! Ich werde dich erledigen.", "2": "Was ist das? Wer ist dieser verwöhnte Gör?", - "3": "Beruhige dich. Sei geduldig. Ich werde dich gleich zermalmen." + "3": "Beruhige dich. Sei geduldig. Ich werde dich gleich zermalmen.", + "3_female": "Beruhige dich. Sei geduldig. Ich werde dich gleich zermalmen." }, "victory": { "1": "Ahahahaha! Wir wurden unerwartet gestört! Uns bleiben keine Optionen.\n$Wir müssen uns zurückziehen. Aber das ist nicht das letzte Mal, dass du Team Aqua siehst!\n$Wir haben andere Pläne! Vergiss das nicht!", "2": "Ahhh?! War ich zu nachsichtig mit dir?!", - "3": "Uh. Willst du mir sagen, dass du während des Kampfes noch besser geworden bist?\n$Du bist ein Gör mit einer glänzenden Zukunft…\n$Meine Pokémon und ich haben keine Kraft mehr zu kämpfen…\n$Geh weiter… Geh und werde von Adrian zerstört." + "3": "Uh. Willst du mir sagen, dass du während des Kampfes noch besser geworden bist?\n$Du bist ein Gör mit einer glänzenden Zukunft…\n$Meine Pokémon und ich haben keine Kraft mehr zu kämpfen…\n$Geh weiter… Geh und werde von Adrian zerstört.", + "3_female": "Uh. Willst du mir sagen, dass du während des Kampfes noch besser geworden bist?\n$Du bist ein Gör mit einer glänzenden Zukunft…\n$Meine Pokémon und ich haben keine Kraft mehr zu kämpfen…\n$Geh weiter… Geh und werde von Adrian zerstört." } }, "matt": { @@ -494,14 +518,16 @@ "victory": { "1": "Bwaarharharharhar!! Ich hab zwar verloren, aber das hat Spaß gemacht!", "2": "Ich kann es fühlen! Ich kann es spüren, das ist klar! Die Stärke, die von dir ausgeht!\n$Mehr! Ich will noch mehr! Aber es sieht so aus, als hätten wir keine Zeit mehr...", - "3": "Das war Spaß! Ich wusste, dass du mir eine gute Zeit bieten würdest!\n$Ich freue mich darauf, dich eines Tages wieder zu treffen!" + "3": "Das war Spaß! Ich wusste, dass du mir eine gute Zeit bieten würdest!\n$Ich freue mich darauf, dich eines Tages wieder zu treffen!", + "3_female": "Das war Spaß! Ich wusste, dass du mir eine gute Zeit bieten würdest!\n$Ich freue mich darauf, dich eines Tages wieder zu treffen!" } }, "mars": { "encounter": { "1": "Ich bin Mars, eine der obersten Commander von Team Galaktik.", "2": "Die Vision von Team Galaktik für die Zukunft ist unbeirrt. Opposition wird gnadenlos zerschlagen!", - "3": "Fühlst du dich nervös? Das solltest du!" + "3": "Fühlst du dich nervös? Das solltest du!", + "3_female": "Fühlst du dich nervös? Das solltest du!" }, "victory": { "1": "Das kann nicht passieren! Wie habe ich verloren?!", @@ -536,20 +562,25 @@ "zinzolin": { "encounter": { "1": "Du könntest eine Bedrohung für Team Plasma werden, also werden wir dich hier und jetzt eliminieren!", + "1_female": "Du könntest eine Bedrohung für Team Plasma werden, also werden wir dich hier und jetzt eliminieren!", "2": "Oh, zum Heulen... Ich hatte nicht erwartet, in dieser eisigen Kälte kämpfen zu müssen!", - "3": "Du bist ein beeindruckender Trainer, dass du es so weit geschafft hast. Aber hier endet es." + "3": "Du bist ein beeindruckender Trainer, dass du es so weit geschafft hast. Aber hier endet es.", + "3_female": "Du bist ein beeindruckender Trainer, dass du es so weit geschafft hast. Aber hier endet es." }, "victory": { "1": "G-Cis... Ich habe versagt...", "2": "Es ist bitterkalt. Ich zittere. Ich leide. Doch ich stehe immer noch siegreich da.", - "3": "Hm. Du bist ein klügerer Trainer, als ich erwartet habe, aber nicht klug genug." + "3": "Hm. Du bist ein klügerer Trainer, als ich erwartet habe, aber nicht klug genug.", + "3_female": "Hm. Du bist ein klügerer Trainer, als ich erwartet habe, aber nicht klug genug." } }, "rood": { "encounter": { "1": "Du bist eine Bedrohung für Team Plasma. Wir können dich hier und jetzt nicht laufen lassen!", + "1_female": "Du bist eine Bedrohung für Team Plasma. Wir können dich hier und jetzt nicht laufen lassen!", "2": "Oh, dieser eisige Wind... Ich hätte nie gedacht, dass ich hier kämpfen müsste!", - "3": "Du bist ein bemerkenswerter Trainer, dass du es bis hierher geschafft hast. Aber hier wird es enden." + "3": "Du bist ein bemerkenswerter Trainer, dass du es bis hierher geschafft hast. Aber hier wird es enden.", + "3_female": "Du bist ein bemerkenswerter Trainer, dass du es bis hierher geschafft hast. Aber hier wird es enden." }, "victory": { "1": "G-Cis... Ich habe meine Mission nicht erfüllt...", @@ -560,12 +591,15 @@ "xerosic": { "encounter": { "1": "Ah ha ha! Es wäre mir ein Vergnügen. Komm schon, kleiner Trainer! Zeig mir, was du drauf hast!", + "1_female": "Ah ha ha! Es wäre mir ein Vergnügen. Komm schon, kleiner Trainer! Zeig mir, was du drauf hast!", "2": "Hm... Du bist mächtiger, als du aussiehst. Ich frage mich, wie viel Energie in dir steckt.", + "2_female": "Hm... Du bist mächtiger, als du aussiehst. Ich frage mich, wie viel Energie in dir steckt.", "3": "Ich habe auf dich gewartet! Ich muss ein wenig Forschung an dir betreiben! Komm, lass uns beginnen!" }, "victory": { "1": "Ah, du bist ziemlich stark. Oh ja—sehr stark, in der Tat.", "2": "Ding-ding-ding! Du hast es geschafft! Dem Sieger gebührt die Beute!", + "2_female": "Ding-ding-ding! Du hast es geschafft! Dem Sieger gebührt die Beute!", "3": "Wunderbar! Erstaunlich! Du hast enorme Fähigkeiten und Mut!" } }, @@ -573,6 +607,7 @@ "encounter": { "1": "Ich bin Begonia, und es wäre mir ein Vergnügen, gegen dich zu kämpfen. Zeig mir, was du drauf hast.", "2": "Beeindruckend... Du bist mächtiger, als du aussiehst. Zeig mir das wahre Ausmaß deiner Energie.", + "2_female": "Beeindruckend... Du bist mächtiger, als du aussiehst. Zeig mir das wahre Ausmaß deiner Energie.", "3": "Ich habe deine Ankunft erwartet. Es ist Zeit für einen kleinen Test. Sollen wir beginnen?" }, "victory": { @@ -585,9 +620,11 @@ "encounter": { "1": "Jetzt gibt es Ärger!…\n$und es kommt noch härter!\n$Wir wollen über die Erde regieren…\n$und naja du kennst den Rest…!", "2": "Wir führen gerade eine große Operation durch. Hast du vor uns zu stören?", + "2_female": "Wir führen gerade eine große Operation durch. Hast du vor uns zu stören?", "3": "Gib uns deine Pokémon, oder stelle dich dem Zorn von Team Rocket!", "4": "Team Rocket wird seinen Plan zur Vollendung bringen, Aus dem Weg!", - "5": "Los, gib uns deine Pokémon. Wir brauchen sie für unseren Plan!" + "5": "Los, gib uns deine Pokémon. Wir brauchen sie für unseren Plan!", + "5_female": "Los, gib uns deine Pokémon. Wir brauchen sie für unseren Plan!" }, "victory": { "1": "Das war mal wieder ein Schuss in den Ofen!", @@ -609,6 +646,7 @@ "1": "Wie kann das sein? Ich bin Teil des mächtigen Team Magma! Wir streben nach der Verbesserung der Welt...", "2": "Unglaublich, dass ich verloren habe! Mit meinen mächtigen Pokémon.", "3": "Das kann nicht sein! Ich hab doch viel mehr Erfahrung als du!", + "3_female": "Das kann nicht sein! Ich hab doch viel mehr Erfahrung als du!", "4": "Verdammt... Ich hätte sofort in unser Versteck fliehen sollen...", "5": "Du hast mich besiegt... Der Boss wird mich dafür zur Rechenschaft ziehen." } @@ -635,7 +673,8 @@ "2": "Erlebe die Macht unserer Technologie und die Zukunft, die wir uns vorstellen!", "3": "Im Namen von Team Galaktik werde ich jeden beseitigen, der uns im Weg steht!", "4": "Mach dich bereit zu verlieren!", - "5": "Hoffentlich bist du bereit für eine kosmische Niederlage!" + "5": "Hoffentlich bist du bereit für eine kosmische Niederlage!", + "5_female": "Hoffentlich bist du bereit für eine kosmische Niederlage!" }, "victory": { "1": "Zyrus wird uns für diese Niederlage bestrafen…", @@ -665,6 +704,7 @@ "encounter": { "1": "Deine Pokémon haben keine Chance gegen die Überlegenheit von Team Flare.", "2": "Mach dich bereit, denn gleich wird es hier lichterloh brennen!", + "2_female": "Mach dich bereit, denn gleich wird es hier lichterloh brennen!", "3": "Team Flare wird die Welt von allen Makeln befreien!", "4": "Bereite dich auf die unvergleichliche Macht von Team Flare vor!", "5": "Unsere Mission steht über allem, sogar über der Mode!" @@ -681,6 +721,7 @@ "encounter": { "1": "Ich werde dich mit allem, was ich habe, bekämpfen. Ich werde dich auslöschen!", "2": "Mir ist egal, ob du ein simpler Trainer bist oder nicht.\n$Ich werde dich hochkant rauswerfen, wenn du uns bedrohst!", + "2_female": "Mir ist egal, ob du ein simpler Trainer bist oder nicht.\n$Ich werde dich hochkant rauswerfen, wenn du uns bedrohst!", "3": "Mir wurde gesagt, Trainer abzuweisen, egal wer sie sind!", "4": "Ich zeige dir die Macht des Æther-Paradies", "5": "Jetzt da du die Wahre Natur des Æther-Paradies kennst, müssen wir dich leider beseitigen!" @@ -697,11 +738,13 @@ "encounter": { "1": "Ich bin Regionalleiter Fabian und ich werde dir zeigen, wie hart die Welt sein kann!", "2": "Die letzte Verteidigungslinie des Æther-Paradieses kämpft gegen einen simplen Trainer?", + "2_female": "Die letzte Verteidigungslinie des Æther-Paradieses kämpft gegen einen simplen Trainer?", "3": "Ich Fabian, bin der Regionalleiter der Æther Foundation.\n$Der einzige auf der Welt, ich bin unersetzlich." }, "victory": { "1": "Aiyee!", "2": "W-w-wie kann das sein?! Wie konnte dieser Trainer...", + "2_female": "W-w-wie kann das sein?! Wie konnte dieser Trainer...", "3": "Das ist der Grund... warum ich andere Menschen nicht ausstehen kann." } }, @@ -709,9 +752,12 @@ "encounter": { "1": "Wir sind nicht böse, wir sind einfach nur nicht nett!", "2": "Willst du Stress, oder was? Das ist unsere Art, Hallo zu sagen! Tschüss, du Punk!", + "2_female": "Willst du Stress, oder was? Das ist unsere Art, Hallo zu sagen! Tschüss, du Punk!", "3": "Wir sind nur ein paar Typen und Mädels mit großem Interesse an den Pokémon anderer Leute!", "4": "Wieso machst du einen auf hart, wenn wir schon hart wie Knochen sind, Homie?", - "5": "Yo, platz hier nich’ rein, ♪ wie’n wildes Kleinstein! ♪ Wenn du meinst, dass Team Skull ♪\n$an nix denkt als Krawall, ♪ hast du leider ’nen Knall, ♪ denn das is’ nich’ der Fall! ♪\n$Wir woll’n hier nur gammeln ♪ und gechillt Staub ansammeln! ♪" + "4_female": "Wieso machst du einen auf hart, wenn wir schon hart wie Knochen sind, Homie?", + "5": "Yo, platz hier nich’ rein, ♪ wie’n wildes Kleinstein! ♪ Wenn du meinst, dass Team Skull ♪\n$an nix denkt als Krawall, ♪ hast du leider ’nen Knall, ♪ denn das is’ nich’ der Fall! ♪\n$Wir woll’n hier nur gammeln ♪ und gechillt Staub ansammeln! ♪", + "5_female": "Yo, platz hier nich’ rein, ♪ wie’n wildes Kleinstein! ♪ Wenn du meinst, dass Team Skull ♪\n$an nix denkt als Krawall, ♪ hast du leider ’nen Knall, ♪ denn das is’ nich’ der Fall! ♪\n$Wir woll’n hier nur gammeln ♪ und gechillt Staub ansammeln! ♪" }, "victory": { "1": "Wie jetzt? Schon vorbei?", @@ -724,11 +770,13 @@ "plumeria": { "encounter": { "1": "..Hmph. Du siehst nicht so aus, als wärst du etwas Besonderes.", + "1_female": "..Hmph. Du siehst nicht so aus, als wärst du etwas Besonderes.", "2": "Die blöden Rüpel brauchen viel zu lange, um mit euch gewöhnlichen Trainern fertig zu werden...", "3": "Lege dich mit irgendjemandem in Team Skull an, und ich zeige dir, wie ernst ich werden kann." }, "victory": { "1": "Du bist ziemlich stark. Das muss ich zugeben.", + "1_female": "Du bist ziemlich stark. Das muss ich zugeben.", "2": "Jetzt versteh ich, warum meine Rüpel so viel Zeit damit verschwenden...", "3": "Ich denke, ich muss diese Niederlage einfach hinnehmen." } @@ -737,8 +785,10 @@ "encounter": { "1": "Achtung hier ist Endstation für dich!", "2": "Du bist ein Trainer, oder? Wir von MC Wertpapiere wissen so etwas.\n$Ich fürchte, das gibt dir trotzdem nicht das Recht, sich in unsere Arbeit einzumischen.", + "2_female": "Du bist ein Trainer, oder? Wir von MC Wertpapiere wissen so etwas.\n$Ich fürchte, das gibt dir trotzdem nicht das Recht, sich in unsere Arbeit einzumischen.", "3": "Ich bin von MC Versicherungen! Hast du eine Lebensversicherung?", "4": "Ich habe dich gefunden! Das bedeutet es ist Zeit für einen Pokémon-Kampf!", + "4_female": "Ich habe dich gefunden! Das bedeutet es ist Zeit für einen Pokémon-Kampf!", "5": "Eine Standpauke von Frau Olivia ist schlimmer als alles, was Sie tun können!" }, "victory": { @@ -758,6 +808,7 @@ "victory": { "1": "Ich habe es nicht geschafft... Olivia... du bist wirklich eine hoffnungslose Frau.", "2": "Arghhh! Das ist unentschuldbar... Was habe ich mir dabei gedacht...\n$Jeder Trainer, der es so weit geschafft hat, muss ein harter Brocken sein...", + "2_female": "Arghhh! Das ist unentschuldbar... Was habe ich mir dabei gedacht...\n$Jeder Trainer, der es so weit geschafft hat, muss ein harter Brocken sein...", "3": "Ich bin eine müde Olivia... Ob es Macro Cosmos Betten gibt?" } }, @@ -768,7 +819,8 @@ "3": "Könntest du bitte wieder abzischen? Sonst muss ich dich davonjagen. Aus reinem Selbstschutz!", "4": "Es tut mir furchtbar leid, aber wenn du nicht umkehrst, könnte es ungemütlich für dich werden.", "4_female": "Es tut mir furchtbar leid, aber wenn du nicht umkehrst, könnte es ungemütlich für dich werden.", - "5": "Och nee, nicht noch so ein Clown..." + "5": "Och nee, nicht noch so ein Clown...", + "5_female": "Och nee, nicht noch so ein Clown..." }, "victory": { "1": "Jetzt bin ich die Person, die Sterne sieht...", @@ -791,6 +843,7 @@ "mela": { "encounter": { "1": "Du bist also diese Pfeife, die sich unbedingt mit uns anlegen will...$Dir werd ich zeigen, was mit Leuten passiert, die sich mit uns anlegen!", + "1_female": "Du bist also diese Pfeife, die sich unbedingt mit uns anlegen will...$Dir werd ich zeigen, was mit Leuten passiert, die sich mit uns anlegen!", "2": "Yeah, lassen wir’s krachen!" }, "victory": { @@ -801,6 +854,7 @@ "atticus": { "encounter": { "1": "hr habt Team Star Leid angetan, unverschämter Schurke! Mein Gift soll Euer Niedergang sein!", + "1_female": "hr habt Team Star Leid angetan, unverschämter Schurke! Mein Gift soll Euer Niedergang sein!", "2": "Eure Bereitschaft zum Duell erfreut mich! Möge der Kampf ein ehrwürdiger sein!" }, "victory": { @@ -811,7 +865,8 @@ "ortega": { "encounter": { "1": "Wenn ich mit dir fertig bin, wirst du heulend nach Hause rennen!", - "2": "Ich werde gewinnen, also spar dir deinen überheblichen Auftritt!" + "2": "Ich werde gewinnen, also spar dir deinen überheblichen Auftritt!", + "2_female": "Ich werde gewinnen, also spar dir deinen überheblichen Auftritt!" }, "victory": { "1": "Was?! Wie konnte ich nur verlieren? Warum? Warum nur?!", @@ -836,7 +891,8 @@ "1": "Ich ziehe mich zurück, aber ich werde zurückkehren! Team Rocket wird niemals besiegt werden!" }, "defeat": { - "1": "Merke dir meine Worte. Nicht in der Lage zu sein,\n$deine eigene Stärke zu messen, zeigt, dass du immer noch ein Kind bist." + "1": "Merke dir meine Worte. Nicht in der Lage zu sein,\n$deine eigene Stärke zu messen, zeigt, dass du immer noch ein Kind bist.", + "1_female": "Merke dir meine Worte. Nicht in der Lage zu sein,\n$deine eigene Stärke zu messen, zeigt, dass du immer noch ein Kind bist." } }, "rocket_boss_giovanni_2": { @@ -896,7 +952,8 @@ }, "galactic_boss_cyrus_1": { "encounter": { - "1": "Du wurdest von leerer Gefühlsduselei hierher getrieben.\n$Ich werde dich bereuen lassen, auf dein Herz gehört zu haben!" + "1": "Du wurdest von leerer Gefühlsduselei hierher getrieben.\n$Ich werde dich bereuen lassen, auf dein Herz gehört zu haben!", + "1_female": "Du wurdest von leerer Gefühlsduselei hierher getrieben.\n$Ich werde dich bereuen lassen, auf dein Herz gehört zu haben!" }, "victory": { "1": "Interessant. Und ziemlich eigenartig." @@ -1178,6 +1235,7 @@ "misty": { "encounter": { "1": "Meine Taktik ist ein Frontalangriff mit Wasser-Pokémon!", + "1_female": "Meine Taktik ist ein Frontalangriff mit Wasser-Pokémon!", "2": "Hiya! Ich zeige dir die Stärke meiner Wasser-Pokémon!", "3": "Mein Traum war es, auf eine Reise zu gehen und gegen starke Trainer zu kämpfen… \n$Wirst du eine ausreichende Herausforderung sein?" }, @@ -1195,12 +1253,14 @@ "lt_surge": { "encounter": { "1": "Meine Elektro-Pokémon haben mich im Krieg gerettet! Ich werde dir zeigen, wie!", + "1_female": "Meine Elektro-Pokémon haben mich im Krieg gerettet! Ich werde dir zeigen, wie!", "2": "Du wirst um Gnade winseln, wenn ich dich geschockt habe!", "3": "Ich werde dich genau so zappen, wie ich es mit all meinen Feinden im Kampf mache!" }, "victory": { "1": "Whoa! Dein Team ist echt stark!", "2": "Aaargh, du bist stark! Selbst meine elektrischen Tricks haben gegen dich verloren.", + "2_female": "Aaargh, du bist stark! Selbst meine elektrischen Tricks haben gegen dich verloren.", "3": "Das war ein absolut schockierender Verlust!" }, "defeat": { @@ -1225,6 +1285,7 @@ "defeat": { "1": "Ich hatte Angst, dass ich einschlafen würde…", "2": "Es scheint, als hätten meine Pflanzen-Pokémon dich überwältigt.", + "2_female": "Es scheint, als hätten meine Pflanzen-Pokémon dich überwältigt.", "3": "Dieser Kampf war eine so beruhigende Erfahrung.", "4": "Das war alles?" } @@ -1284,7 +1345,8 @@ "encounter": { "1": "Ich, der Anführer von Team Rocket, werde dir eine Welt voller Schmerz bereiten!", "2": "Mein Training hier wird entscheidend sein, bevor ich mich wieder meinen alten Kollegen stelle.", - "3": "Ich denke dass du nicht auf die Ausmaße des Scheiterns vorbereitet bist, die du gleich erleben wirst!" + "3": "Ich denke dass du nicht auf die Ausmaße des Scheiterns vorbereitet bist, die du gleich erleben wirst!", + "3_female": "Ich denke dass du nicht auf die Ausmaße des Scheiterns vorbereitet bist, die du gleich erleben wirst!" }, "victory": { "1": "WAS! Ich, verlieren?! Es gibt nichts, was ich dir sagen möchte!", @@ -1317,6 +1379,7 @@ "brawly": { "encounter": { "1": "Oh man, ein Herausforderer!\nLass uns sehen, was du kannst!", + "1_female": "Oh man, ein Herausforderer!\nLass uns sehen, was du kannst!", "2": "Du scheinst auf große Auftritte zu stehen.\nLass uns kämpfen", "3": "Zeit, einen Sturm zu entfachen!\nLos geht's!" }, @@ -1344,6 +1407,7 @@ }, "defeat": { "1": "Lade deine Batterien wieder auf und fordere mich irgendwann wieder heraus! Wahahahaha!", + "1_female": "Lade deine Batterien wieder auf und fordere mich irgendwann wieder heraus! Wahahahaha!", "2": "Ich hoffe du fandest unseren Kampf elektrisierend! Wahahahaha!", "3": "Bist du nicht geschockt, dass ich gewonnen habe? Wahahahaha!" } @@ -1390,6 +1454,7 @@ }, "victory": { "1": "Du bist der erste Trainer, den ich gesehen habe, der mehr Anmut hat als ich. Ausgezeichnet", + "1_female": "Du bist der erste Trainer, den ich gesehen habe, der mehr Anmut hat als ich. Ausgezeichnet", "2": "Meine Flug-Pokémon sind abgestürzt! Na gut.", "3": "Auch wenn ich gefallen sein mag, meine Pokémon werden weiter fliegen!" }, @@ -1402,6 +1467,7 @@ "tate": { "encounter": { "1": "Hehehe… Bist du überrascht, mich ohne meine Schwester zu sehen?", + "1_female": "Hehehe… Bist du überrascht, mich ohne meine Schwester zu sehen?", "2": "Ich kann sehen, was du denkst… Du willst kämpfen!", "3": "Wie kannst du jemanden besiegen der deine Gedanken lesen kann?" }, @@ -1419,6 +1485,7 @@ "liza": { "encounter": { "1": "Hihihi… Bist du überrascht, mich ohne meinen Bruder zu sehen?", + "1_female": "Hihihi… Bist du überrascht, mich ohne meinen Bruder zu sehen?", "2": "Ich kann sehen, wonach du verlangst… Du willst kämpfen, oder?", "3": "Wie kannst du jemanden besiegen, der eins mit seinen Pokémon ist?" }, @@ -1490,8 +1557,10 @@ "nessa": { "encounter": { "1": "Egal, welchen Plan dein raffinierter Verstand auch schmiedet,\n$mein Partner und ich werden ihn mit Sicherheit zu Fall bringen.", + "1_female": "Egal, welchen Plan dein raffinierter Verstand auch schmiedet,\n$mein Partner und ich werden ihn mit Sicherheit zu Fall bringen.", "2": "Ich bin nicht hier, um zu plaudern. Ich bin hier, um zu gewinnen!", - "3": "Das ist ein kleines Geschenk von meinen Pokémon… Ich hoffe, du kannst es annehmen!" + "3": "Das ist ein kleines Geschenk von meinen Pokémon… Ich hoffe, du kannst es annehmen!", + "3_female": "Das ist ein kleines Geschenk von meinen Pokémon… Ich hoffe, du kannst es annehmen!" }, "victory": { "1": "Du und deine Pokémon sind einfach zu stark…", @@ -1512,6 +1581,7 @@ }, "victory": { "1": "Du… Du bist ziemlich gut, oder?", + "1_female": "Du… Du bist ziemlich gut, oder?", "2": "Wenn du Mac triffst, haue ihn für mich um, ja?", "3": "Ich denke, du hast 'das Eis brechen' ein wenig zu wörtlich genommen…" }, @@ -1525,10 +1595,12 @@ "encounter": { "1": "Du siehst stark aus! Los geht's!", "2": "Ich bin stark wie das weite Meer. Du wirst weggespült, das ist sicher.", + "2_female": "Ich bin stark wie das weite Meer. Du wirst weggespült, das ist sicher.", "3": "Oh ho, ich treffe auf dich! Das ist abgefahren." }, "victory": { "1": "Du hast total gerockt! Du ziehst einige krasse Pokémon groß. Du hast das Trainer-Ding drauf!", + "1_female": "Du hast total gerockt! Du ziehst einige krasse Pokémon groß. Du hast das Trainer-Ding drauf!", "2": "Du siehst nicht nur stark aus, du bist auch stark! Eh, ich wurde auch weggespült!", "3": "Du bist stark wie eine spektakuläre Welle!" }, @@ -1541,6 +1613,7 @@ "shauntal": { "encounter": { "1": "Entschuldigung. Du bist ein Herausforderer, oder?\nIch bin Anissa, die Geist-Pokémon-Nutzerin\n$der Top Vier. Ich werde dich in die Welt der Bücher entführen.", + "1_female": "Entschuldigung. Du bist ein Herausforderer, oder?\nIch bin Anissa, die Geist-Pokémon-Nutzerin\n$der Top Vier. Ich werde dich in die Welt der Bücher entführen.", "2": "Ich liebe es, über Trainer und deren Pokémon zu schreiben.\n$Könnte ich dich als Inspiration verwenden?", "3": "Jeder, der mit Pokémon arbeitet, hat eine Geschichte zu erzählen. Welche Geschichte wird erzählt?" }, @@ -1558,6 +1631,7 @@ "marshal": { "encounter": { "1": "Mein Mentor, Lauro, sieht Potential in dir. Ich werde dich testen,\n$dich an die Grenzen deiner Stärke bringen. Kiai!", + "1_female": "Mein Mentor, Lauro, sieht Potential in dir. Ich werde dich testen,\n$dich an die Grenzen deiner Stärke bringen. Kiai!", "2": "Ein Sieg, ein entscheidender Sieg, das ist mein Ziel! Herausforderer, hier komme ich!", "3": "Ich selber suche die Stärke eines Kämpfers zu entwickeln und jede Schwäche in mir zu brechen!" }, @@ -1576,7 +1650,8 @@ "encounter": { "1": "Du erinnerst mich an einen alten Freund. Das macht mich gespannt auf diesen Pokémon-Kampf!", "2": "Pokémon-Kämpfe haben keinen Sinn, wenn man nicht darüber nachdenkt, warum man kämpft.\n$Oder besser gesagt, es macht das Kämpfen mit Pokémon sinnlos.", - "3": "Ich heiße Cheren! Ich bin ein Arenaleiter und Lehrer! Freut mich, dich kennenzulernen." + "3": "Ich heiße Cheren! Ich bin ein Arenaleiter und Lehrer! Freut mich, dich kennenzulernen.", + "3_female": "Ich heiße Cheren! Ich bin ein Arenaleiter und Lehrer! Freut mich, dich kennenzulernen." }, "victory": { "1": "Danke! Ich habe gesehen, was mir gefehlt hat.", @@ -1592,47 +1667,65 @@ "chili": { "encounter": { "1": "Jaaaa! Zeit, mit dem Feuer zu spielen! Ich bin der Stärkste von uns Brüdern!", + "1_female": "Jaaaa! Zeit, mit dem Feuer zu spielen! Ich bin der Stärkste von uns Brüdern!", "2": "Ta-da! Der Feuer-Typ-Kämpfer Maik --das bin ich-- wird dein Gegner sein!", - "3": "Ich werde dir zeigen, was ich und meine feurigen Pokémon draufhaben!" + "2_female": "Ta-da! Der Feuer-Typ-Kämpfer Maik --das bin ich-- wird dein Gegner sein!", + "3": "Ich werde dir zeigen, was ich und meine feurigen Pokémon draufhaben!", + "3_female": "Ich werde dir zeigen, was ich und meine feurigen Pokémon draufhaben!" }, "victory": { "1": "Du hast mich besiegt. Ich bin... ausgebrannt...", + "1_female": "Du hast mich besiegt. Ich bin... ausgebrannt...", "2": "Whoa ho! Du brennst vor Energie!", + "2_female": "Whoa ho! Du brennst vor Energie!", "3": "Autsch! Du hast mich erwischt!" }, "defeat": { "1": "Ich brenne! Spiel mit mir, und du wirst dich verbrennen!", + "1_female": "Ich brenne! Spiel mit mir, und du wirst dich verbrennen!", "2": "Wenn du mit Feuer spielst, wirst du verbrannt!", - "3": "Ich meine, komm schon, dein Gegner war ich! Du hattest keine Chance!" + "3": "Ich meine, komm schon, dein Gegner war ich! Du hattest keine Chance!", + "3_female": "Ich meine, komm schon, dein Gegner war ich! Du hattest keine Chance!" } }, "cilan": { "encounter": { "1": "Nichts Persönliches... Keine harten Gefühle... Ich und meine Pflanzen-Pokémon werden...\n$Ähm... Wir werden kämpfen, egal was passiert.", + "1_female": "Nichts Persönliches... Keine harten Gefühle... Ich und meine Pflanzen-Pokémon werden...\n$Ähm... Wir werden kämpfen, egal was passiert.", "2": "Also, ähm, wenn es für dich in Ordnung ist, werde ich, ähm, alles geben, um, äh, dein Gegner zu sein.", - "3": "OK… Also, ähm, ich bin Benny, ich mag Pflanzen-Pokémon." + "2_female": "Also, ähm, wenn es für dich in Ordnung ist, werde ich, ähm, alles geben, um, äh, dein Gegner zu sein.", + "3": "OK… Also, ähm, ich bin Benny, ich mag Pflanzen-Pokémon.", + "3_female": "OK… Also, ähm, ich bin Benny, ich mag Pflanzen-Pokémon." }, "victory": { "1": "Ähm… Ist es jetzt vorbei?", + "1_female": "Ähm… Ist es jetzt vorbei?", "2": "…Was für eine Überraschung. Du bist sehr stark, nicht wahr? \n$Ich glaube, meine Brüder hätten dich auch nicht besiegen können…", + "2_female": "…Was für eine Überraschung. Du bist sehr stark, nicht wahr? \n$Ich glaube, meine Brüder hätten dich auch nicht besiegen können…", "3": "…Hmm. Sieht aus, als wäre mein Timing, ähm, schlecht gewesen?" }, "defeat": { "1": "Huh? Habe ich gewonnen?", + "1_female": "Huh? Habe ich gewonnen?", "2": "Ich denke... Ich habe wohl gewonnen, weil ich mit meinen Brüdern Maik und Colin traniert habe,\n$und wir so alle stärker geworden sind.", - "3": "Es... es war ein ziemlich aufregendes Erlebnis..." + "2_female": "Ich denke... Ich habe wohl gewonnen, weil ich mit meinen Brüdern Maik und Colin traniert habe,\n$und wir so alle stärker geworden sind.", + "3": "Es... es war ein ziemlich aufregendes Erlebnis...", + "3_female": "Es... es war ein ziemlich aufregendes Erlebnis..." } }, "roark": { "encounter": { "1": "Ich muss dein Potenzial als Trainer und die Stärke der Pokémon sehen, die mit dir kämpfen!", + "1_female": "Ich muss dein Potenzial als Trainer und die Stärke der Pokémon sehen, die mit dir kämpfen!", "2": "Los geht's! Dies sind meine Gesteins-Pokémon, mein ganzer Stolz!", "3": "Gesteins-Pokémon sind einfach die besten!", - "4": "Tag für Tag grabe ich hier nach Fossilien.\n$Die viele Arbeit hat meine Pokémon felsenfest gemacht\nund das wirst du jetzt im Kampf zu spüren bekommen!" + "4": "Tag für Tag grabe ich hier nach Fossilien.\n$Die viele Arbeit hat meine Pokémon felsenfest gemacht\nund das wirst du jetzt im Kampf zu spüren bekommen!", + "4_female": "Tag für Tag grabe ich hier nach Fossilien.\n$Die viele Arbeit hat meine Pokémon felsenfest gemacht\nund das wirst du jetzt im Kampf zu spüren bekommen!" }, "victory": { "1": "W-was? Das kann nicht sein! Meine total tranierten Pokémon!", "2": "…Wir haben die Kontrolle verloren. Beim nächsten Mal fordere ich dich\n$zu einem Fossilien-Ausgrabungswettbewerb heraus.", + "2_female": "…Wir haben die Kontrolle verloren. Beim nächsten Mal fordere ich dich\n$zu einem Fossilien-Ausgrabungswettbewerb heraus.", "3": "Mit deinem Können ist es nur natürlich, dass du gewinnst.", "4": "W-was?! Das kann nicht sein! Selbst das war nicht genug?" }, @@ -1655,6 +1748,7 @@ "victory": { "1": "Ich bin noch nicht gut genug...", "2": "Ich sehe... Deine Reise hat dich an weit entfernte Orte geführt und du hast viel mehr gesehen als ich.\n$Ich beneide dich darum...", + "2_female": "Ich sehe... Deine Reise hat dich an weit entfernte Orte geführt und du hast viel mehr gesehen als ich.\n$Ich beneide dich darum...", "3": "Wie ist das möglich...", "4": "Ich glaube nicht, dass unser Potenzial so unterschiedlich ist.\n$Aber du scheinst etwas mehr zu haben... Sei es drum.", "5": "Ich brauche wohl mehr Training.", @@ -1713,12 +1807,14 @@ "1": "Ich hätte damit rechnen sollen!" }, "defeat": { - "1": "Heh heh! Macht nichts, ich habe hier nur einen Sieg eingefahren.\n$Ich verstehe, wenn du sauer bist, aber geh nicht völlig auf mich los, okay?" + "1": "Heh heh! Macht nichts, ich habe hier nur einen Sieg eingefahren.\n$Ich verstehe, wenn du sauer bist, aber geh nicht völlig auf mich los, okay?", + "1_female": "Heh heh! Macht nichts, ich habe hier nur einen Sieg eingefahren.\n$Ich verstehe, wenn du sauer bist, aber geh nicht völlig auf mich los, okay?" } }, "ramos": { "encounter": { - "1": "Hast du den Garten-Spielplatz genossen, den ich mit all diesen kräftigen Pflanzen angelegt habe?\n$Ihre Stärke ist ein Zeichen meiner Stärke als Gärtner und Arenaleiter! \n$Bist du sicher, dass du bereit bist, dich dem zu stellen?" + "1": "Hast du den Garten-Spielplatz genossen, den ich mit all diesen kräftigen Pflanzen angelegt habe?\n$Ihre Stärke ist ein Zeichen meiner Stärke als Gärtner und Arenaleiter! \n$Bist du sicher, dass du bereit bist, dich dem zu stellen?", + "1_female": "Hast du den Garten-Spielplatz genossen, den ich mit all diesen kräftigen Pflanzen angelegt habe?\n$Ihre Stärke ist ein Zeichen meiner Stärke als Gärtner und Arenaleiter! \n$Bist du sicher, dass du bereit bist, dich dem zu stellen?" }, "victory": { "1": "Du glaubst an deine Pokémon... Und sie glauben an dich... Es war ein feiner Kampf, Sprössling." @@ -1748,7 +1844,8 @@ }, "victory": { "1": "Ich muss sagen, ich bin von dir angetan! Vielleicht bewundere ich dich sogar ein bisschen.", - "2": "Wow! Du bist großartig! Du hast meinen Respekt verdient!\n$Ich denke, dein Fokus und Wille haben uns völlig umgehauen." + "2": "Wow! Du bist großartig! Du hast meinen Respekt verdient!\n$Ich denke, dein Fokus und Wille haben uns völlig umgehauen.", + "2_female": "Wow! Du bist großartig! Du hast meinen Respekt verdient!\n$Ich denke, dein Fokus und Wille haben uns völlig umgehauen." }, "defeat": { "1": "Ich habe deinen Siegeswillen gespürt, aber ich verliere nicht!", @@ -1760,7 +1857,8 @@ "1": "Du hast eine Sieger-Aura. Also, das wird Spaß machen. Lass uns kämpfen!" }, "victory": { - "1": "Unglaublich! Du bist sehr gut, nicht wahr?" + "1": "Unglaublich! Du bist sehr gut, nicht wahr?", + "1_female": "Unglaublich! Du bist sehr gut, nicht wahr?" }, "defeat": { "1": "Ja! Meine Pokémon und ich sind perfekt abgestimmt!" @@ -1801,7 +1899,8 @@ }, "clay": { "encounter": { - "1": "Harrumph! Du hast mich warten lassen, oder? Gut, jetzt will ich sehen, was du drauf hast!" + "1": "Harrumph! Du hast mich warten lassen, oder? Gut, jetzt will ich sehen, was du drauf hast!", + "1_female": "Harrumph! Du hast mich warten lassen, oder? Gut, jetzt will ich sehen, was du drauf hast!" }, "victory": { "1": "Mann oh Mann... Es fühlt sich gut an, alles zu geben und trotzdem besiegt zu werden!" @@ -1815,7 +1914,8 @@ "1": "Ich werde dir ein ganzes Menü aus Wasser-Pokémon servieren! Aber versuch nicht, sie zu essen!" }, "victory": { - "1": "Vaultin' Veluza! Du bist ein lebhafter Mensch, nicht wahr!\n$Ein bisschen ZU lebhaft, wenn ich das so sagen darf!" + "1": "Vaultin' Veluza! Du bist ein lebhafter Mensch, nicht wahr!\n$Ein bisschen ZU lebhaft, wenn ich das so sagen darf!", + "1_female": "Vaultin' Veluza! Du bist ein lebhafter Mensch, nicht wahr!\n$Ein bisschen ZU lebhaft, wenn ich das so sagen darf!" }, "defeat": { "1": "Komm bald wieder zu mir, hörst du?" @@ -1881,7 +1981,8 @@ "1": "Da ist etwas an dir… Eine Veränderung in deinem Auftreten.\n$Ich denke, ich spüre das bei dir. Zeig es mir. Zeig mir die Kraft, die du mit deinen Pokémon hast.\n$Und ich werde dir im Gegenzug eine Vorstellung von\n$Illusionen im Wasser von mir und meinen Pokémon präsentieren!" }, "victory": { - "1": "Bravo. Ich erkenne jetzt deine Authentizität und Großartigkeit als Pokémon-Trainer.\n$Ich freue mich sehr, dich und deine Pokémon kennengelernt zu haben. Du hast dich als würdig erwiesen." + "1": "Bravo. Ich erkenne jetzt deine Authentizität und Großartigkeit als Pokémon-Trainer.\n$Ich freue mich sehr, dich und deine Pokémon kennengelernt zu haben. Du hast dich als würdig erwiesen.", + "1_female": "Bravo. Ich erkenne jetzt deine Authentizität und Großartigkeit als Pokémon-Trainer.\n$Ich freue mich sehr, dich und deine Pokémon kennengelernt zu haben. Du hast dich als würdig erwiesen." }, "defeat": { "1": "Eine große Illusion!" @@ -1889,13 +1990,15 @@ }, "lorelei": { "encounter": { - "1": "Niemand kann mich bei eisigen Pokémon übertreffen! Gefrierende Angriffe sind mächtig!\n$Deine Pokémon werden mir ausgeliefert sein, wenn sie erst einmal eingefroren sind! Hahaha!\n$Bist du bereit?" + "1": "Niemand kann mich bei eisigen Pokémon übertreffen! Gefrierende Angriffe sind mächtig!\n$Deine Pokémon werden mir ausgeliefert sein, wenn sie erst einmal eingefroren sind! Hahaha!\n$Bist du bereit?", + "1_female": "Niemand kann mich bei eisigen Pokémon übertreffen! Gefrierende Angriffe sind mächtig!\n$Deine Pokémon werden mir ausgeliefert sein, wenn sie erst einmal eingefroren sind! Hahaha!\n$Bist du bereit?" }, "victory": { "1": "Wie kannst du es wagen!" }, "defeat": { - "1": "Es gibt nichts, was du tun kannst, wenn du erst einmal eingefroren bist." + "1": "Es gibt nichts, was du tun kannst, wenn du erst einmal eingefroren bist.", + "1_female": "Es gibt nichts, was du tun kannst, wenn du erst einmal eingefroren bist." } }, "will": { @@ -1911,10 +2014,12 @@ }, "malva": { "encounter": { - "1": "Ich fühle mich, als könnte mein Herz in Flammen aufgehen.\n$Ich brenne vor Hass auf dich, Wicht!" + "1": "Ich fühle mich, als könnte mein Herz in Flammen aufgehen.\n$Ich brenne vor Hass auf dich, Wicht!", + "1_female": "Ich fühle mich, als könnte mein Herz in Flammen aufgehen.\n$Ich brenne vor Hass auf dich, Wicht!" }, "victory": { - "1": "Was für Neuigkeiten... Ein neuer Herausforderer hat Pachira besiegt!" + "1": "Was für Neuigkeiten... Ein neuer Herausforderer hat Pachira besiegt!", + "1_female": "Was für Neuigkeiten... Ein neuer Herausforderer hat Pachira besiegt!" }, "defeat": { "1": "Ich bin begeistert! Ja, begeistert, dass ich dich unter meinen Fußsohlen zerquetschen konnte." @@ -1936,7 +2041,8 @@ "1": "Ich habe die Kapitänsposition meinem Cousin Chrys gegeben,\n$aber ich bin zuversichtlich in meine Fähigkeiten.\n$Meine Stärke ist wie die einer Supernova!" }, "victory": { - "1": "Ich habe sicherlich einen interessanten Trainer zum Kämpfen gefunden!" + "1": "Ich habe sicherlich einen interessanten Trainer zum Kämpfen gefunden!", + "1_female": "Ich habe sicherlich einen interessanten Trainer zum Kämpfen gefunden!" }, "defeat": { "1": "Ahaha. Was für ein interessanter Kampf." @@ -1947,10 +2053,12 @@ "1": "Ich würde sagen, ich werde es dir leicht machen, aber... das wäre gelogen! Denke schnell!" }, "victory": { - "1": "Nicht schlecht, wirklich!" + "1": "Nicht schlecht, wirklich!", + "1_female": "Nicht schlecht, wirklich!" }, "defeat": { - "1": "Nahahaha! Du bist wirklich etwas Besonderes!" + "1": "Nahahaha! Du bist wirklich etwas Besonderes!", + "1_female": "Nahahaha! Du bist wirklich etwas Besonderes!" } }, "bruno": { @@ -1969,7 +2077,8 @@ "1": "Ich bin Kai, der Arenaleiter von Azalea City. Ich bin ein großer Fan von Käfer-Pokémon." }, "victory": { - "1": "Wow, erstaunlich! Du bist ein Experte für Pokémon!\n$Meine Forschung ist noch nicht abgeschlossen. OK, du gewinnst." + "1": "Wow, erstaunlich! Du bist ein Experte für Pokémon!\n$Meine Forschung ist noch nicht abgeschlossen. OK, du gewinnst.", + "1_female": "Wow, erstaunlich! Du bist ein Experte für Pokémon!\n$Meine Forschung ist noch nicht abgeschlossen. OK, du gewinnst." }, "defeat": { "1": "Danke! Dank unseres Kampfes konnte ich auch Fortschritte in meiner Forschung machen!" @@ -1999,10 +2108,12 @@ }, "lenora": { "encounter": { - "1": "Nun denn, Herausforderer, ich werde erforschen,\n$wie du mit den Pokémon kämpfst, die du so liebevoll aufgezogen hast!" + "1": "Nun denn, Herausforderer, ich werde erforschen,\n$wie du mit den Pokémon kämpfst, die du so liebevoll aufgezogen hast!", + "1_female": "Nun denn, Herausforderer, ich werde erforschen,\n$wie du mit den Pokémon kämpfst, die du so liebevoll aufgezogen hast!" }, "victory": { - "1": "Meine Theorie über dich war korrekt. Du bist mehr als nur talentiert... \n$Du bist motiviert! Ich salutier' dir!" + "1": "Meine Theorie über dich war korrekt. Du bist mehr als nur talentiert... \n$Du bist motiviert! Ich salutier' dir!", + "1_female": "Meine Theorie über dich war korrekt. Du bist mehr als nur talentiert... \n$Du bist motiviert! Ich salutier' dir!" }, "defeat": { "1": "Ah ha ha! Wenn du verlierst, analysiere warum und nutze dieses Wissen im nächsten Kampf!" @@ -2027,7 +2138,8 @@ "1": "Wahnsinn! Deine Vernunft ist schon giftiger als meine!" }, "defeat": { - "1": "Hey, komm schon! Sei ernst! Du musst mehr geben!" + "1": "Hey, komm schon! Sei ernst! Du musst mehr geben!", + "1_female": "Hey, komm schon! Sei ernst! Du musst mehr geben!" } }, "olivia": { @@ -2065,7 +2177,8 @@ }, "flint": { "encounter": { - "1": "Hoffentlich bist du aufgewärmt, denn hier kommt der Urknall!" + "1": "Hoffentlich bist du aufgewärmt, denn hier kommt der Urknall!", + "1_female": "Hoffentlich bist du aufgewärmt, denn hier kommt der Urknall!" }, "victory": { "1": "Unglaublich! Deine Moves sind so heiß, dass meine im Vergleich lauwarm wirken!" @@ -2087,7 +2200,8 @@ }, "caitlin": { "encounter": { - "1": "Ich bin es, die erschien, als die Blume sich öffnete. Du, der du gewartet hast…\n$Du siehst aus wie ein Pokémon-Trainer mit verfeinerter Stärke und vertiefter Freundlichkeit.\n$Was ich in meinem Gegner suche, ist überlegene Stärke…\n$Bitte entfessle deine Kraft in vollem Umfang!" + "1": "Ich bin es, die erschien, als die Blume sich öffnete. Du, der du gewartet hast…\n$Du siehst aus wie ein Pokémon-Trainer mit verfeinerter Stärke und vertiefter Freundlichkeit.\n$Was ich in meinem Gegner suche, ist überlegene Stärke…\n$Bitte entfessle deine Kraft in vollem Umfang!", + "1_female": "Ich bin es, die erschien, als die Blume sich öffnete. Du, der du gewartet hast…\n$Du siehst aus wie ein Pokémon-Trainer mit verfeinerter Stärke und vertiefter Freundlichkeit.\n$Was ich in meinem Gegner suche, ist überlegene Stärke…\n$Bitte entfessle deine Kraft in vollem Umfang!" }, "victory": { "1": "Meine Pokémon und ich haben so viel gelernt! Ich danke dir." @@ -2109,13 +2223,16 @@ }, "wikstrom": { "encounter": { - "1": "Guten Tag, junger Herausforderer! Wahrlich, ich bin die berühmte Klinge aus gehärtetem Stahl,\n$Herzog Thymelot! Lasst den Kampf beginnen! En garde!" + "1": "Guten Tag, junger Herausforderer! Wahrlich, ich bin die berühmte Klinge aus gehärtetem Stahl,\n$Herzog Thymelot! Lasst den Kampf beginnen! En garde!", + "1_female": "Guten Tag, junger Herausforderer! Wahrlich, ich bin die berühmte Klinge aus gehärtetem Stahl,\n$Herzog Thymelot! Lasst den Kampf beginnen! En garde!" }, "victory": { - "1": "Ruhmreich! Das Vertrauen, das du mit deinen ehrenvollen Pokémon teilst, übertrifft sogar meines!" + "1": "Ruhmreich! Das Vertrauen, das du mit deinen ehrenvollen Pokémon teilst, übertrifft sogar meines!", + "1_female": "Ruhmreich! Das Vertrauen, das du mit deinen ehrenvollen Pokémon teilst, übertrifft sogar meines!" }, "defeat": { - "1": "Was für eine Magie ist das? Mein Herz, es hämmert unaufhörlich in meiner Brust!\n$Gegen einen so würdigen Gegner zu gewinnen, verleiht meiner Seele Flügel - so fliege ich!" + "1": "Was für eine Magie ist das? Mein Herz, es hämmert unaufhörlich in meiner Brust!\n$Gegen einen so würdigen Gegner zu gewinnen, verleiht meiner Seele Flügel - so fliege ich!", + "1_female": "Was für eine Magie ist das? Mein Herz, es hämmert unaufhörlich in meiner Brust!\n$Gegen einen so würdigen Gegner zu gewinnen, verleiht meiner Seele Flügel - so fliege ich!" } }, "acerola": { @@ -2147,11 +2264,14 @@ }, "victory": { "1": "Du hast mich besiegt. Du bist großartig!", - "2": "Ich hätte nie erwartet, dass ein anderer Trainer mich schlägt... Ich bin überrascht." + "1_female": "Du hast mich besiegt. Du bist großartig!", + "2": "Ich hätte nie erwartet, dass ein anderer Trainer mich schlägt... Ich bin überrascht.", + "2_female": "Ich hätte nie erwartet, dass ein anderer Trainer mich schlägt... Ich bin überrascht." }, "defeat": { "1": "Das war knapp. Willst du es nochmal versuchen?", - "2": "Es ist nicht so, dass du schwach bist. Lass dich davon nicht stören." + "2": "Es ist nicht so, dass du schwach bist. Lass dich davon nicht stören.", + "2_female": "Es ist nicht so, dass du schwach bist. Lass dich davon nicht stören." } }, "karen": { @@ -2176,7 +2296,8 @@ "1": "Es scheint, als würdest du Pokémon wirklich gut verstehen.\n$Das wird ein harter Kampf!\n$Ich muss mein Pokémon Dynamaximieren, wenn ich gewinnen will!" }, "victory": { - "1": "Die Kraft des Grases ist verwelkt... Was für ein unglaublicher Herausforderer!" + "1": "Die Kraft des Grases ist verwelkt... Was für ein unglaublicher Herausforderer!", + "1_female": "Die Kraft des Grases ist verwelkt... Was für ein unglaublicher Herausforderer!" }, "defeat": { "1": "Das wird dich wirklich schockieren und in Ehrfurcht versetzen." @@ -2195,7 +2316,8 @@ }, "drasna": { "encounter": { - "1": "Du musst ein starker Trainer sein. Ja, ganz stark...\n$Das sind wunderbare Neuigkeiten! Gegen Gegner wie dich und dein Team zu kämpfen,\n$lässt meine Pokémon wie Unkraut wachsen!" + "1": "Du musst ein starker Trainer sein. Ja, ganz stark...\n$Das sind wunderbare Neuigkeiten! Gegen Gegner wie dich und dein Team zu kämpfen,\n$lässt meine Pokémon wie Unkraut wachsen!", + "1_female": "Du musst ein starker Trainer sein. Ja, ganz stark...\n$Das sind wunderbare Neuigkeiten! Gegen Gegner wie dich und dein Team zu kämpfen,\n$lässt meine Pokémon wie Unkraut wachsen!" }, "victory": { "1": "Oh, meine Güte. Das war wirklich ein schneller Kampf... Ich hoffe, du kommst bald wieder!" @@ -2228,7 +2350,8 @@ }, "blue": { "encounter": { - "1": "Du musst ziemlich gut sein, um so weit zu kommen." + "1": "Du musst ziemlich gut sein, um so weit zu kommen.", + "1_female": "Du musst ziemlich gut sein, um so weit zu kommen." }, "victory": { "1": "Ich habe nur gegen ihn und jetzt gegen dich verloren… Ihn? Haha..." @@ -2275,7 +2398,8 @@ "1": "Ich bin immer noch der Champion. Ich werde nichts zurückhalten." }, "victory": { - "1": "Dies ist das Aufkommen eines neuen Champions." + "1": "Dies ist das Aufkommen eines neuen Champions.", + "1_female": "Dies ist das Aufkommen eines neuen Champions." }, "defeat": { "1": "Ich habe meinen Titel erfolgreich verteidigt." @@ -2363,7 +2487,8 @@ "1": "Hey! Findest du nicht auch, dass Pokémon total süß sind?" }, "victory": { - "1": "Waaah! Waaah! Du bist so gemein!" + "1": "Waaah! Waaah! Du bist so gemein!", + "1_female": "Waaah! Waaah! Du bist so gemein!" }, "defeat": { "1": "Und das war's!" @@ -2371,7 +2496,8 @@ }, "chuck": { "encounter": { - "1": "Ha! Du willst mich herausfordern? Bist du mutig oder einfach nur unwissend?" + "1": "Ha! Du willst mich herausfordern? Bist du mutig oder einfach nur unwissend?", + "1_female": "Ha! Du willst mich herausfordern? Bist du mutig oder einfach nur unwissend?" }, "victory": { "1": "Du bist stark! Würdest du mich bitte zu deinem Schüler machen?" @@ -2382,7 +2508,8 @@ }, "katy": { "encounter": { - "1": "Lass deine Wachsamkeit nicht nach, es sei denn, du willst von den Füßen gerissen werden!" + "1": "Lass deine Wachsamkeit nicht nach, es sei denn, du willst von den Füßen gerissen werden!", + "1_female": "Lass deine Wachsamkeit nicht nach, es sei denn, du willst von den Füßen gerissen werden!" }, "victory": { "1": "Alle meine süßen kleinen Pokémon fielen wie Fliegen!" @@ -2415,7 +2542,8 @@ }, "maylene": { "encounter": { - "1": "Ich bin gekommen, um dich jetzt herauszufordern, und ich werde nichts zurückhalten.\n$Bitte bereite dich auf den Kampf vor!" + "1": "Ich bin gekommen, um dich jetzt herauszufordern, und ich werde nichts zurückhalten.\n$Bitte bereite dich auf den Kampf vor!", + "1_female": "Ich bin gekommen, um dich jetzt herauszufordern, und ich werde nichts zurückhalten.\n$Bitte bereite dich auf den Kampf vor!" }, "victory": { "1": "Ich gestehe die Niederlage ein..." @@ -2437,7 +2565,8 @@ }, "byron": { "encounter": { - "1": "Trainer! Du bist jung, genau wie mein Sohn, Veit. \n$Mit mehr jungen Trainern, die das Kommando übernehmen, ist die Zukunft der Pokémon hell! \n$Also, als Hürde für junge Leute nehme ich deine Herausforderung an!" + "1": "Trainer! Du bist jung, genau wie mein Sohn, Veit. \n$Mit mehr jungen Trainern, die das Kommando übernehmen, ist die Zukunft der Pokémon hell! \n$Also, als Hürde für junge Leute nehme ich deine Herausforderung an!", + "1_female": "Trainer! Du bist jung, genau wie mein Sohn, Veit. \n$Mit mehr jungen Trainern, die das Kommando übernehmen, ist die Zukunft der Pokémon hell! \n$Also, als Hürde für junge Leute nehme ich deine Herausforderung an!" }, "victory": { "1": "Hmm! Meine robusten Pokémon - besiegt!" @@ -2459,7 +2588,8 @@ }, "volkner": { "encounter": { - "1": "Da du so weit gekommen bist, musst du ziemlich stark sein…\n$Ich hoffe, du bist der Trainer, der mich daran erinnert, wie viel Spaß es macht zu kämpfen!" + "1": "Da du so weit gekommen bist, musst du ziemlich stark sein…\n$Ich hoffe, du bist der Trainer, der mich daran erinnert, wie viel Spaß es macht zu kämpfen!", + "1_female": "Da du so weit gekommen bist, musst du ziemlich stark sein…\n$Ich hoffe, du bist der Trainer, der mich daran erinnert, wie viel Spaß es macht zu kämpfen!" }, "victory": { "1": "Du hast mich besiegt…\n$Dein Verlangen und die edle Art, wie deine Pokémon für dich gekämpft haben…\n$Ich habe mich sogar während unseres Kampfes begeistert gefühlt. Das war ein sehr guter Kampf." @@ -2561,7 +2691,8 @@ }, "valerie": { "encounter": { - "1": "Oh, wenn das nicht ein junger Trainer ist… Es ist schön, dich so zu treffen.\n$Dann nehme ich an, du hast dir das Recht auf einen Kampf verdient, als Belohnung für deine Bemühungen.\n$Die schwer fassbare Fee mag zart wie eine Brise und empfindlich wie eine Blüte erscheinen,\n$aber sie ist stark." + "1": "Oh, wenn das nicht ein junger Trainer ist… Es ist schön, dich so zu treffen.\n$Dann nehme ich an, du hast dir das Recht auf einen Kampf verdient, als Belohnung für deine Bemühungen.\n$Die schwer fassbare Fee mag zart wie eine Brise und empfindlich wie eine Blüte erscheinen,\n$aber sie ist stark.", + "1_female": "Oh, wenn das nicht ein junger Trainer ist… Es ist schön, dich so zu treffen.\n$Dann nehme ich an, du hast dir das Recht auf einen Kampf verdient, als Belohnung für deine Bemühungen.\n$Die schwer fassbare Fee mag zart wie eine Brise und empfindlich wie eine Blüte erscheinen,\n$aber sie ist stark." }, "victory": { "1": "Ich hoffe, dass du morgen Dinge finden wirst, über die du lächeln kannst…" @@ -2608,7 +2739,8 @@ "1": "Lass mich sehen, wie du und dein Partner-Pokémon euch verhalten!" }, "victory": { - "1": "Dein Rosa fehlt noch, aber du bist ein ausgezeichneter Trainer mit ausgezeichneten Pokémon." + "1": "Dein Rosa fehlt noch, aber du bist ein ausgezeichneter Trainer mit ausgezeichneten Pokémon.", + "1_female": "Dein Rosa fehlt noch, aber du bist ein ausgezeichneter Trainer mit ausgezeichneten Pokémon." }, "defeat": { "1": "Schade für dich, denke ich." @@ -2616,7 +2748,8 @@ }, "bede": { "encounter": { - "1": "Ich nehme an, ich sollte zweifelsfrei beweisen, wie erbärmlich du bist und wie stark ich bin." + "1": "Ich nehme an, ich sollte zweifelsfrei beweisen, wie erbärmlich du bist und wie stark ich bin.", + "1_female": "Ich nehme an, ich sollte zweifelsfrei beweisen, wie erbärmlich du bist und wie stark ich bin." }, "victory": { "1": "Ich verstehe... Nun, das ist in Ordnung. Ich habe mich sowieso nicht wirklich angestrengt." @@ -2660,7 +2793,8 @@ }, "brassius": { "encounter": { - "1": "Ich nehme an, du bist bereit? Lassen wir unser gemeinsames Kunstwerk beginnen!" + "1": "Ich nehme an, du bist bereit? Lassen wir unser gemeinsames Kunstwerk beginnen!", + "1_female": "Ich nehme an, du bist bereit? Lassen wir unser gemeinsames Kunstwerk beginnen!" }, "victory": { "1": "Ahhh... avant-garde!" @@ -2671,10 +2805,12 @@ }, "iono": { "encounter": { - "1": "Hey, Leute! Es ist Zeit für Enigmaras EnigmaTV!!! Naaaa, alles klärchen?\n$Hola, ciao und hallöle! Und schon bist du gefangen in meinem Elektronetz!\n$Wer ich bin, fragst du? Na, Enigmara natürlich! Ich bin hier die Arenaleiterin." + "1": "Hey, Leute! Es ist Zeit für Enigmaras EnigmaTV!!! Naaaa, alles klärchen?\n$Hola, ciao und hallöle! Und schon bist du gefangen in meinem Elektronetz!\n$Wer ich bin, fragst du? Na, Enigmara natürlich! Ich bin hier die Arenaleiterin.", + "1_female": "Hey, Leute! Es ist Zeit für Enigmaras EnigmaTV!!! Naaaa, alles klärchen?\n$Hola, ciao und hallöle! Und schon bist du gefangen in meinem Elektronetz!\n$Wer ich bin, fragst du? Na, Enigmara natürlich! Ich bin hier die Arenaleiterin." }, "victory": { - "1": "Du leuchtest ja so hell wie ein tausendfacher Donnerblitz!" + "1": "Du leuchtest ja so hell wie ein tausendfacher Donnerblitz!", + "1_female": "Du leuchtest ja so hell wie ein tausendfacher Donnerblitz!" }, "defeat": { "1": "Deine Augen gehören MIR!" @@ -2696,7 +2832,8 @@ "1": "Komm schon, Baby! Bring mich zum Zittern bis auf die Knochen!" }, "victory": { - "1": "Du bist cool, mein Freund - du bewegst meine SEELE!" + "1": "Du bist cool, mein Freund - du bewegst meine SEELE!", + "1_female": "Du bist cool, mein Freund - du bewegst meine SEELE!" }, "defeat": { "1": "Bis später, Baby!" @@ -2730,7 +2867,9 @@ "nessa_elite": { "encounter": { "1": "Die Gezeiten wenden sich zu meinen Gunsten. Bereit, weggespült zu werden?", - "2": "Lass uns mit diesem Kampf Wellen schlagen! Ich hoffe, du bist vorbereitet!" + "1_female": "Die Gezeiten wenden sich zu meinen Gunsten. Bereit, weggespült zu werden?", + "2": "Lass uns mit diesem Kampf Wellen schlagen! Ich hoffe, du bist vorbereitet!", + "2_female": "Lass uns mit diesem Kampf Wellen schlagen! Ich hoffe, du bist vorbereitet!" }, "victory": { "1": "Du hast diese Gewässer perfekt navigiert... Gut gemacht!", @@ -2758,6 +2897,7 @@ "allister_elite": { "encounter": { "1": "Die Schatten fallen... Bist du bereit, dich deinen Ängsten zu stellen?", + "1_female": "Die Schatten fallen... Bist du bereit, dich deinen Ängsten zu stellen?", "2": "Mal sehen, ob du mit der Dunkelheit, die ich befehle, umgehen kannst." }, "victory": { @@ -2780,7 +2920,8 @@ }, "defeat": { "1": "Ein weiterer Sturm überstanden, ein weiterer Sieg errungen! Gut gekämpft!", - "2": "Du bist in meinen Sturm geraten! Viel Glück beim nächsten Mal!" + "2": "Du bist in meinen Sturm geraten! Viel Glück beim nächsten Mal!", + "2_female": "Du bist in meinen Sturm geraten! Viel Glück beim nächsten Mal!" } }, "alder": { diff --git a/src/locales/de/modifier-type.json b/src/locales/de/modifier-type.json index 4f08727f9fd..835483c7928 100644 --- a/src/locales/de/modifier-type.json +++ b/src/locales/de/modifier-type.json @@ -358,6 +358,10 @@ "name": "Heiß-Orb", "description": "Dieser bizarre Orb fügt seinem Träger im Kampf Verbrennungen zu." }, + "EVOLUTION_TRACKER_GIMMIGHOUL": { + "name": "Schätze", + "description": "Dieses Pokémon liebt Schätze! Sammle weiter Schätze und vielleicht passiert etwas!" + }, "BATON": { "name": "Stab", "description": "Ermöglicht das Weitergeben von Effekten beim Wechseln von Pokémon, wodurch auch Fallen umgangen werden." @@ -416,12 +420,25 @@ "name": "Fusionsmarke", "description": "Fügt eine 1%ige Chance hinzu, dass ein wildes Pokémon eine Fusion ist." }, - - "MYSTERY_ENCOUNTER_SHUCKLE_JUICE": { "name": "Pottrottsaft" }, - "MYSTERY_ENCOUNTER_BLACK_SLUDGE": { "name": "Giftschleim", "description": "Der Geruch ist so stark, dass die Geschäfte ihre Items nur zu einem stark erhöhten Preis verkaufen." }, - "MYSTERY_ENCOUNTER_MACHO_BRACE": { "name": "Machoschiene", "description": "Das Besiegen eines Pokémon gewährt dem Besitzer einen Machoschiene-Stapel. Jeder Stapel steigert die Werte leicht, mit einem zusätzlichen Bonus bei maximalen Stapeln." }, - "MYSTERY_ENCOUNTER_OLD_GATEAU": { "name": "Spezialität", "description": "Erhöht den {{stats}}-Wert des Trägers um {{statValue}}." }, - "MYSTERY_ENCOUNTER_GOLDEN_BUG_NET": { "name": "Golden Bug Net", "description": "Erhöht die Chance, dass der Besitzer mehr Pokémon vom Typ Käfer findet. Hat ein seltsames Gewicht." } + "MYSTERY_ENCOUNTER_SHUCKLE_JUICE": { + "name": "Pottrottsaft" + }, + "MYSTERY_ENCOUNTER_BLACK_SLUDGE": { + "name": "Giftschleim", + "description": "Der Geruch ist so stark, dass die Geschäfte ihre Items nur zu einem stark erhöhten Preis verkaufen." + }, + "MYSTERY_ENCOUNTER_MACHO_BRACE": { + "name": "Machoschiene", + "description": "Das Besiegen eines Pokémon gewährt dem Besitzer einen Machoschiene-Stapel. Jeder Stapel steigert die Werte leicht, mit einem zusätzlichen Bonus bei maximalen Stapeln." + }, + "MYSTERY_ENCOUNTER_OLD_GATEAU": { + "name": "Spezialität", + "description": "Erhöht den {{stats}}-Wert des Trägers um {{statValue}}." + }, + "MYSTERY_ENCOUNTER_GOLDEN_BUG_NET": { + "name": "Goldenes Käfersammlernetz", + "description": "Erhöht die Chance, dass der Besitzer mehr Pokémon vom Typ Käfer findet. Hat ein seltsames Gewicht." + } }, "SpeciesBoosterItem": { "LIGHT_BALL": { @@ -495,6 +512,21 @@ "TART_APPLE": "Saurer Apfel", "STRAWBERRY_SWEET": "Zucker-Erdbeere", "UNREMARKABLE_TEACUP": "Simple Teeschale", + "UPGRADE": "Upgrade", + "DUBIOUS_DISC": "Dubiosdisc", + "DRAGON_SCALE": "Drachenschuppe", + "PRISM_SCALE": "Schönschuppe", + "RAZOR_CLAW": "Scharfklaue", + "RAZOR_FANG": "Scharfzahn", + "REAPER_CLOTH": "Düsterumhang", + "ELECTIRIZER": "Stromisierer", + "MAGMARIZER": "Magmaisierer", + "PROTECTOR": "Schützer", + "SACHET": "Duftbeutel", + "WHIPPED_DREAM": "Sahnehäubchen", + "LEADERS_CREST": "Anführersymbol", + "SUN_FLUTE": "Sonnenflöte", + "MOON_FLUTE": "Mondflöte", "CHIPPED_POT": "Löchrige Kanne", "BLACK_AUGURITE": "Schwarzaugit", "GALARICA_CUFF": "Galarnuss-Reif", diff --git a/src/locales/de/move-trigger.json b/src/locales/de/move-trigger.json index 9b59c4b79ed..a182cffe69a 100644 --- a/src/locales/de/move-trigger.json +++ b/src/locales/de/move-trigger.json @@ -7,6 +7,7 @@ "switchedStat": "{{pokemonName}} tauscht seinen {{stat}}-Wert mit dem des Zieles!", "sharedGuard": "{{pokemonName}} addiert seine Schutzkräfte mit jenen des Zieles und teilt sie gerecht auf!", "sharedPower": "{{pokemonName}} addiert seine Kräfte mit jenen des Zieles und teilt sie gerecht auf!", + "shiftedStats": "{{pokemonName}} tauscht den Wert seines {{statToSwitch}}-Werts mit seinem {{statToSwitchWith}}-Werts!", "goingAllOutForAttack": "{{pokemonName}} legt sich ins Zeug!", "regainedHealth": "{{pokemonName}} erholt sich!", "keptGoingAndCrashed": "{{pokemonName}} springt daneben und verletzt sich!", @@ -68,5 +69,7 @@ "chillyReception": "{{pokemonName}} erzählt einen schlechten Witz, der nicht besonders gut ankommt...", "exposedMove": "{{pokemonName}} erkennt {{targetPokemonName}}!", "safeguard": "{{targetName}} wird durch Bodyguard geschützt!", + "substituteOnOverlap": "{{pokemonName}} hat bereits einen Delegator!", + "substituteNotEnoughHp": "Es ist zu schwach, um einen Delegator einzusetzen!", "afterYou": "{{targetName}} lässt sich auf Galanterie ein!" } diff --git a/src/locales/de/mystery-encounters/field-trip-dialogue.json b/src/locales/de/mystery-encounters/field-trip-dialogue.json index 61e6d4d9367..442172250bd 100644 --- a/src/locales/de/mystery-encounters/field-trip-dialogue.json +++ b/src/locales/de/mystery-encounters/field-trip-dialogue.json @@ -28,4 +28,4 @@ "status": "Status-", "physical": "physische ", "special": "spezielle " -} \ No newline at end of file +} diff --git a/src/locales/de/party-ui-handler.json b/src/locales/de/party-ui-handler.json index 8c662ef2b78..a138f31607a 100644 --- a/src/locales/de/party-ui-handler.json +++ b/src/locales/de/party-ui-handler.json @@ -13,6 +13,7 @@ "ALL": "Alle", "PASS_BATON": "Stafette nutzen", "UNPAUSE_EVOLUTION": "Entwicklung fortsetzen", + "PAUSE_EVOLUTION": "Entwicklung pausieren", "REVIVE": "Wiederbeleben", "RENAME": "Umbenennen", "SELECT": "Auswählen", @@ -24,6 +25,7 @@ "tooManyItems": "{{pokemonName}} trägt bereits zu viele dieser Items!", "anyEffect": "Das würde keine Wirkung zeigen.", "unpausedEvolutions": "Entwicklungen für {{pokemonName}} wurden wieder aktiviert.", + "pausedEvolutions": "Entwicklung von {{pokemonName}} wurde pausiert.", "unspliceConfirmation": "Willst du wirklich {{fusionName}} von {{pokemonName}} defusionieren? {{fusionName}} wird freigelassen.", "wasReverted": "{{fusionName}} verwandelt sich in {{pokemonName}} zurück.", "releaseConfirmation": "Möchtest du {{pokemonName}} wirklich freilassen?", diff --git a/src/locales/de/settings.json b/src/locales/de/settings.json index 31406f28d17..43da548868d 100644 --- a/src/locales/de/settings.json +++ b/src/locales/de/settings.json @@ -11,6 +11,10 @@ "expGainsSpeed": "EP-Balken Geschw.", "expPartyDisplay": "Team-EP anzeigen", "skipSeenDialogues": "Gesehenen Dialog überspringen", + "eggSkip": "Ei-Zusammenfassung", + "never": "Nie", + "always": "Immer", + "ask": "Fragen", "battleStyle": "Kampfstil", "enableRetries": "Erneut versuchen aktivieren", "hideIvs": "IS-Scanner verstecken", From eba1920ee6193d1d7de39919cdaf4efbd36b0dc2 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Thu, 26 Sep 2024 17:01:24 +0200 Subject: [PATCH 06/10] [Bug] [Localization] Formes key correction (#4447) * Update pokemon-form.json * Update pokemon-form.json * Update pokemon-form.json * Update pokemon-form.json * Update pokemon-form.json * Update pokemon-form.json * Update pokemon-form.json * Update pokemon-form.json * Update pokemon-form.json * Update pokemon-form.json --- src/locales/de/pokemon-form.json | 6 +- src/locales/en/pokemon-form.json | 6 +- src/locales/es/pokemon-form.json | 6 +- src/locales/fr/pokemon-form.json | 6 +- src/locales/it/pokemon-form.json | 6 +- src/locales/ja/pokemon-form.json | 6 +- src/locales/ko/pokemon-form.json | 6 +- src/locales/pt_BR/pokemon-form.json | 6 +- src/locales/zh_CN/pokemon-form.json | 6 +- src/locales/zh_TW/pokemon-form.json | 116 ---------------------------- 10 files changed, 27 insertions(+), 143 deletions(-) diff --git a/src/locales/de/pokemon-form.json b/src/locales/de/pokemon-form.json index 16efc3af653..b4e62d3e4ee 100644 --- a/src/locales/de/pokemon-form.json +++ b/src/locales/de/pokemon-form.json @@ -279,9 +279,9 @@ "ogerponHearthflameMaskTera": "Ofenmaske (Terakristallisiert)", "ogerponCornerstoneMask": "Fundamentmaske", "ogerponCornerstoneMaskTera": "Fundamentmaske (Terakristallisiert)", - "terpagos": "Normalform", - "terpagosTerastal": "Terakristall-Form", - "terpagosStellar": "Stellarform", + "terapagos": "Normalform", + "terapagosTerastal": "Terakristall-Form", + "terapagosStellar": "Stellarform", "galarDarumaka": "Normalmodus", "galarDarumakaZen": "Trance-Modus", "paldeaTaurosCombat": "Gefechtsvariante", diff --git a/src/locales/en/pokemon-form.json b/src/locales/en/pokemon-form.json index 642d31a2a20..86e7c5dc1bc 100644 --- a/src/locales/en/pokemon-form.json +++ b/src/locales/en/pokemon-form.json @@ -279,9 +279,9 @@ "ogerponHearthflameMaskTera": "Hearthflame Mask Terastallized", "ogerponCornerstoneMask": "Cornerstone Mask", "ogerponCornerstoneMaskTera": "Cornerstone Mask Terastallized", - "terpagos": "Normal Form", - "terpagosTerastal": "Terastal Form", - "terpagosStellar": "Stellar Form", + "terapagos": "Normal Form", + "terapagosTerastal": "Terastal Form", + "terapagosStellar": "Stellar Form", "galarDarumaka": "Standard Mode", "galarDarumakaZen": "Zen Mode", "paldeaTaurosCombat": "Combat Breed", diff --git a/src/locales/es/pokemon-form.json b/src/locales/es/pokemon-form.json index b6008357d89..73aace57148 100644 --- a/src/locales/es/pokemon-form.json +++ b/src/locales/es/pokemon-form.json @@ -279,9 +279,9 @@ "ogerponHearthflameMaskTera": "Máscara Horno Teracristal", "ogerponCornerstoneMask": "Máscara Cimiento", "ogerponCornerstoneMaskTera": "Máscara Cimiento Teracristal", - "terpagos": "Normal", - "terpagosTerastal": "Teracristal", - "terpagosStellar": "Astral", + "terapagos": "Normal", + "terapagosTerastal": "Teracristal", + "terapagosStellar": "Astral", "galarDarumaka": "Modo Normal", "galarDarumakaZen": "Modo Daruma", "paldeaTaurosCombat": "Combatiente", diff --git a/src/locales/fr/pokemon-form.json b/src/locales/fr/pokemon-form.json index b1201ae0dc9..56ad2ff766b 100644 --- a/src/locales/fr/pokemon-form.json +++ b/src/locales/fr/pokemon-form.json @@ -279,9 +279,9 @@ "ogerponHearthflameMaskTera": "Masque du Fourneau Téracristal", "ogerponCornerstoneMask": "Masque de la Pierre", "ogerponCornerstoneMaskTera": "Masque de la Pierre Téracristal", - "terpagos": "Normal", - "terpagosTerastal": "Téracristal", - "terpagosStellar": "Stellaire", + "terapagos": "Normal", + "terapagosTerastal": "Téracristal", + "terapagosStellar": "Stellaire", "galarDarumaka": "Mode Normal", "galarDarumakaZen": "Mode Transe", "paldeaTaurosCombat": "Combatif", diff --git a/src/locales/it/pokemon-form.json b/src/locales/it/pokemon-form.json index e1ecb708b89..0cdd545e00d 100644 --- a/src/locales/it/pokemon-form.json +++ b/src/locales/it/pokemon-form.json @@ -279,9 +279,9 @@ "ogerponHearthflameMaskTera": "Maschera Focolare Teracristal", "ogerponCornerstoneMask": "Maschera Fondamenta", "ogerponCornerstoneMaskTera": "Maschera Fondamenta Teracristal", - "terpagos": "Normale", - "terpagosTerastal": "Teracristal", - "terpagosStellar": "Astrale", + "terapagos": "Normale", + "terapagosTerastal": "Teracristal", + "terapagosStellar": "Astrale", "galarDarumaka": "Normale", "galarDarumakaZen": "Stato Zen", "paldeaTaurosCombat": "Combattiva", diff --git a/src/locales/ja/pokemon-form.json b/src/locales/ja/pokemon-form.json index 8ef61ec2c14..b94bedc4f0b 100644 --- a/src/locales/ja/pokemon-form.json +++ b/src/locales/ja/pokemon-form.json @@ -279,9 +279,9 @@ "ogerponHearthflameMaskTera": "かまどのめん テラスタル", "ogerponCornerstoneMask": "いしずえのめん", "ogerponCornerstoneMaskTera": "いしずえのめん テラスタル", - "terpagos": "ノーマルフォルム", - "terpagosTerastal": "テラスタルフォルム", - "terpagosStellar": "ステラフォルム", + "terapagos": "ノーマルフォルム", + "terapagosTerastal": "テラスタルフォルム", + "terapagosStellar": "ステラフォルム", "galarDarumaka": "ノーマルモード", "galarDarumakaZen": "ダルマモード", "paldeaTaurosCombat": "コンバット", diff --git a/src/locales/ko/pokemon-form.json b/src/locales/ko/pokemon-form.json index dce2fcd35cf..8175fc9549e 100644 --- a/src/locales/ko/pokemon-form.json +++ b/src/locales/ko/pokemon-form.json @@ -279,9 +279,9 @@ "ogerponHearthflameMaskTera": "화덕의가면 테라스탈", "ogerponCornerstoneMask": "주춧돌의가면", "ogerponCornerstoneMaskTera": "주춧돌의가면 테라스탈", - "terpagos": "노말폼", - "terpagosTerastal": "테라스탈폼", - "terpagosStellar": "스텔라폼", + "terapagos": "노말폼", + "terapagosTerastal": "테라스탈폼", + "terapagosStellar": "스텔라폼", "galarDarumaka": "노말모드", "galarDarumakaZen": "달마모드", "paldeaTaurosCombat": "컴뱃종", diff --git a/src/locales/pt_BR/pokemon-form.json b/src/locales/pt_BR/pokemon-form.json index 416f09c97bf..a0b9e98fbaa 100644 --- a/src/locales/pt_BR/pokemon-form.json +++ b/src/locales/pt_BR/pokemon-form.json @@ -279,9 +279,9 @@ "ogerponHearthflameMaskTera": "Máscara Fornalha Terastalizada", "ogerponCornerstoneMask": "Máscara Alicerce", "ogerponCornerstoneMaskTera": "Máscara Alicerce Terastalizada", - "terpagos": "Normal", - "terpagosTerastal": "Teracristal", - "terpagosStellar": "Astral", + "terapagos": "Normal", + "terapagosTerastal": "Teracristal", + "terapagosStellar": "Astral", "galarDarumaka": "Padrão", "galarDarumakaZen": "Zen", "paldeaTaurosCombat": "Combate", diff --git a/src/locales/zh_CN/pokemon-form.json b/src/locales/zh_CN/pokemon-form.json index f10c21e8851..b02fbc54dbf 100644 --- a/src/locales/zh_CN/pokemon-form.json +++ b/src/locales/zh_CN/pokemon-form.json @@ -279,9 +279,9 @@ "ogerponHearthflameMaskTera": "火灶面具太晶化", "ogerponCornerstoneMask": "础石面具", "ogerponCornerstoneMaskTera": "础石面具太晶化", - "terpagos": "普通", - "terpagosTerastal": "太晶", - "terpagosStellar": "星晶", + "terapagos": "普通", + "terapagosTerastal": "太晶", + "terapagosStellar": "星晶", "galarDarumaka": "通常", "galarDarumakaZen": "达摩", "paldeaTaurosCombat": "斗战种", diff --git a/src/locales/zh_TW/pokemon-form.json b/src/locales/zh_TW/pokemon-form.json index 104f8f5ea49..bde2840cbdc 100644 --- a/src/locales/zh_TW/pokemon-form.json +++ b/src/locales/zh_TW/pokemon-form.json @@ -1,5 +1,4 @@ { - "pikachu": "Normal", "pikachuCosplay": "換裝", "pikachuCoolCosplay": "搖滾巨星", "pikachuBeautyCosplay": "貴婦", @@ -7,9 +6,7 @@ "pikachuSmartCosplay": "博士", "pikachuToughCosplay": "面罩摔跤手", "pikachuPartner": "搭檔", - "eevee": "Normal", "eeveePartner": "搭檔", - "pichu": "Normal", "pichuSpiky": "刺刺耳", "unownA": "A", "unownB": "B", @@ -39,19 +36,13 @@ "unownZ": "Z", "unownExclamation": "!", "unownQuestion": "?", - "castform": "Normal Form", "castformSunny": "晴天", "castformRainy": "雨天", "castformSnowy": "雪天", "deoxysNormal": "普通", - "deoxysAttack": "Attack", - "deoxysDefense": "Defense", - "deoxysSpeed": "Speed", "burmyPlant": "草木蓑衣", "burmySandy": "砂土蓑衣", "burmyTrash": "垃圾蓑衣", - "cherubiOvercast": "Overcast", - "cherubiSunshine": "Sunshine", "shellosEast": "東海", "shellosWest": "西海", "rotom": "Normal", @@ -60,44 +51,22 @@ "rotomFrost": "結冰", "rotomFan": "旋轉", "rotomMow": "切割", - "dialga": "Normal", - "dialgaOrigin": "Origin", - "palkia": "Normal", - "palkiaOrigin": "Origin", "giratinaAltered": "別種", - "giratinaOrigin": "Origin", "shayminLand": "陸上", - "shayminSky": "Sky", "basculinRedStriped": "紅條紋", "basculinBlueStriped": "藍條紋", "basculinWhiteStriped": "白條紋", - "darumaka": "Standard Mode", - "darumakaZen": "Zen", "deerlingSpring": "春天", "deerlingSummer": "夏天", "deerlingAutumn": "秋天", "deerlingWinter": "冬天", "tornadusIncarnate": "化身", - "tornadusTherian": "Therian", "thundurusIncarnate": "化身", - "thundurusTherian": "Therian", "landorusIncarnate": "化身", - "landorusTherian": "Therian", - "kyurem": "Normal", - "kyuremBlack": "Black", - "kyuremWhite": "White", "keldeoOrdinary": "通常", - "keldeoResolute": "Resolute", "meloettaAria": "歌聲", "meloettaPirouette": "舞步形態", - "genesect": "Normal", - "genesectShock": "Shock Drive", - "genesectBurn": "Burn Drive", - "genesectChill": "Chill Drive", - "genesectDouse": "Douse Drive", - "froakie": "Normal", "froakieBattleBond": "牽絆變身", - "froakieAsh": "Ash", "scatterbugMeadow": "花園花紋", "scatterbugIcySnow": "冰雪花紋", "scatterbugPolar": "雪國花紋", @@ -123,7 +92,6 @@ "flabebeOrange": "橙花", "flabebeBlue": "藍花", "flabebeWhite": "白花", - "furfrou": "Natural Form", "furfrouHeart": "心形造型", "furfrouStar": "星形造型", "furfrouDiamond": "菱形造型", @@ -133,11 +101,6 @@ "furfrouLaReine": "女王造型", "furfrouKabuki": "歌舞伎造型", "furfrouPharaoh": "國王造型", - "espurrMale": "Male", - "espurrFemale": "Female", - "honedgeShiled": "Shield", - "honedgeBlade": "Blade", - "pumpkaboo": "Average Size", "pumpkabooSmall": "小尺寸", "pumpkabooLarge": "大尺寸", "pumpkabooSuper": "特大尺寸", @@ -156,29 +119,6 @@ "oricorioSensu": "輕盈輕盈風格", "rockruff": "Normal", "rockruffOwnTempo": "特殊岩狗狗", - "rockruffMidday": "Midday", - "rockruffMidnight": "Midnight", - "rockruffDusk": "Dusk", - "wishiwashi": "Solo Form", - "wishiwashiSchool": "School", - "typeNullNormal": "Type: Normal", - "typeNullFighting": "Type: Fighting", - "typeNullFlying": "Type: Flying", - "typeNullPoison": "Type: Poison", - "typeNullGround": "Type: Ground", - "typeNullRock": "Type: Rock", - "typeNullBug": "Type: Bug", - "typeNullGhost": "Type: Ghost", - "typeNullSteel": "Type: Steel", - "typeNullFire": "Type: Fire", - "typeNullWater": "Type: Water", - "typeNullGrass": "Type: Grass", - "typeNullElectric": "Type: Electric", - "typeNullPsychic": "Type: Psychic", - "typeNullIce": "Type: Ice", - "typeNullDragon": "Type: Dragon", - "typeNullDark": "Type: Dark", - "typeNullFairy": "Type: Fairy", "miniorRedMeteor": "紅色核心", "miniorOrangeMeteor": "橙色核心", "miniorYellowMeteor": "黃色核心", @@ -195,66 +135,25 @@ "miniorViolet": "紫色", "mimikyuDisguised": "化形", "mimikyuBusted": "現形", - "necrozma": "Normal", - "necrozmaDuskMane": "Dusk Mane", - "necrozmaDawnWings": "Dawn Wings", - "necrozmaUltra": "Ultra", - "magearna": "Normal", "magearnaOriginal": "500年前的顔色", - "marshadow": "Normal", "marshadowZenith": "全力", - "cramorant": "Normal", - "cramorantGulping": "Gulping Form", - "cramorantGorging": "Gorging Form", - "toxelAmped": "Amped Form", - "toxelLowkey": "Low-Key Form", "sinisteaPhony": "赝品", "sinisteaAntique": "真品", - "milceryVanillaCream": "Vanilla Cream", - "milceryRubyCream": "Ruby Cream", - "milceryMatchaCream": "Matcha Cream", - "milceryMintCream": "Mint Cream", - "milceryLemonCream": "Lemon Cream", - "milcerySaltedCream": "Salted Cream", - "milceryRubySwirl": "Ruby Swirl", - "milceryCaramelSwirl": "Caramel Swirl", - "milceryRainbowSwirl": "Rainbow Swirl", - "eiscue": "Ice Face", "eiscueNoIce": "解凍頭", "indeedeeMale": "雄性", "indeedeeFemale": "雌性", "morpekoFullBelly": "滿腹花紋", - "morpekoHangry": "Hangry", "zacianHeroOfManyBattles": "百戰勇者", - "zacianCrowned": "Crowned", "zamazentaHeroOfManyBattles": "百戰勇者", - "zamazentaCrowned": "Crowned", - "kubfuSingleStrike": "Single Strike", - "kubfuRapidStrike": "Rapid Strike", - "zarude": "Normal", "zarudeDada": "老爹", - "calyrex": "Normal", - "calyrexIce": "Ice Rider", - "calyrexShadow": "Shadow Rider", - "basculinMale": "Male", - "basculinFemale": "Female", "enamorusIncarnate": "化身", - "enamorusTherian": "Therian", - "lechonkMale": "Male", - "lechonkFemale": "Female", - "tandemausFour": "Family of Four", - "tandemausThree": "Family of Three", "squawkabillyGreenPlumage": "綠羽毛", "squawkabillyBluePlumage": "藍羽毛", "squawkabillyYellowPlumage": "黃羽毛", "squawkabillyWhitePlumage": "白羽毛", - "finizenZero": "Zero", - "finizenHero": "Hero", "tatsugiriCurly": "上弓姿勢", "tatsugiriDroopy": "下垂姿勢", "tatsugiriStretchy": "平挺姿勢", - "dunsparceTwo": "Two-Segment", - "dunsparceThree": "Three-Segment", "gimmighoulChest": "寶箱形態", "gimmighoulRoaming": "徒步形態", "koraidonApexBuild": "頂尖形態", @@ -269,21 +168,6 @@ "miraidonGlideMode":"滑翔模式", "poltchageistCounterfeit": "冒牌貨", "poltchageistArtisan": "高檔貨", - "poltchageistUnremarkable": "Unremarkable", - "poltchageistMasterpiece": "Masterpiece", - "ogerponTealMask": "Teal Mask", - "ogerponTealMaskTera": "Teal Mask Terastallized", - "ogerponWellspringMask": "Wellspring Mask", - "ogerponWellspringMaskTera": "Wellspring Mask Terastallized", - "ogerponHearthflameMask": "Hearthflame Mask", - "ogerponHearthflameMaskTera": "Hearthflame Mask Terastallized", - "ogerponCornerstoneMask": "Cornerstone Mask", - "ogerponCornerstoneMaskTera": "Cornerstone Mask Terastallized", - "terpagos": "Normal Form", - "terpagosTerastal": "Terastal", - "terpagosStellar": "Stellar", - "galarDarumaka": "Standard Mode", - "galarDarumakaZen": "Zen", "paldeaTaurosCombat": "鬥戰種", "paldeaTaurosBlaze": "火熾種", "paldeaTaurosAqua": "水瀾種" From 8044c76e71f334f4fab750dfe0b2cbaf49fda775 Mon Sep 17 00:00:00 2001 From: damocleas Date: Thu, 26 Sep 2024 12:31:04 -0400 Subject: [PATCH 07/10] [Localization] Fix for English 'Battles Won', updated tutorial # of Pokerus mons from 3 -> 5 (#4449) * Fixed 'count, number' on 'Battles Won' splash text * english tutorial * German tutorial * Spanish tutorial * French tutorial * Italian Tutorial * Japanese tutorial, needs fix * Korean Tutorial, needs fix * PT / Brazil Tutorial * zh_cn tutorial, needs check * zh_tw tutorial, needs check --- src/locales/de/tutorial.json | 4 ++-- src/locales/en/splash-messages.json | 2 +- src/locales/en/tutorial.json | 4 ++-- src/locales/es/tutorial.json | 2 +- src/locales/fr/tutorial.json | 2 +- src/locales/it/tutorial.json | 4 ++-- src/locales/ja/tutorial.json | 2 +- src/locales/ko/tutorial.json | 4 ++-- src/locales/pt_BR/tutorial.json | 2 +- src/locales/zh_CN/tutorial.json | 4 ++-- src/locales/zh_TW/tutorial.json | 4 ++-- 11 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/locales/de/tutorial.json b/src/locales/de/tutorial.json index 9cdb94b2cac..9aa40a2d7da 100644 --- a/src/locales/de/tutorial.json +++ b/src/locales/de/tutorial.json @@ -3,8 +3,8 @@ "accessMenu": "Nutze M oder Esc, um das Menü zu öffnen. Dort hast du Zugriff auf die Einstellungen und andere Funktionen.", "menu": "In diesem Menü hast du Zugriff auf die Einstellungen.\n$Dort kannst du u. A. die Spielgeschwin-\ndigkeit und das Fensterdesign ändern.\n$Das Menü verbirgt noch andere Funktionen - probier' sie gerne aus!", "starterSelect": "In diesem Bildschirm kannst du mit Z oder Leertaste deine\nStarter auswählen.\n$Sie begleiten dich am Anfang deines Abenteuers.\n$Jeder Starter hat einen Preis. Dein Team kann bis zu sechs\nMitglieder haben, solange der Gesamtpreis max. 10 beträgt.\n$Du kannst Geschlecht, Fähigkeit und Form beliebig auswählen,\nsobald du sie mindestens einmal gefangen hast.\n$Die DVs ergeben sich aus den Höchstwerten aller Pokémon,\ndie du bereits gefangen hast. \n$Es lohnt sich also, das selbe Pokémon mehrmals zu fangen!", - "pokerus": "Jeden Tag haben drei zufällige Pokémon einen lila Rahmen.\n$Wenn du eins von ihnen besitzt,\n$nimm es doch mal mit und sieh dir seinen Bericht an!", + "pokerus": "Jeden Tag haben fünf zufällige Pokémon einen lila Rahmen.\n$Wenn du eins von ihnen besitzt,\n$nimm es doch mal mit und sieh dir seinen Bericht an!", "statChange": "Statuswertveränderungen halten solange an, wie dein Pokémon auf dem Feld bleibt.\n$Pokémon werden am Anfang eines Trainerkampfes oder bei einem Arealwechsel automatisch zurückgerufen.\n$Nutze C oder Shift, um aktuelle Statuswertveränderungen anzuzeigen.", "selectItem": "Nach jedem Kampf kannst du aus 3 zufälligen Items exakt eines auswählen.\n$Es gibt u. A. Heilitems, tragbare Items und Basis-Items, die dir einen permanenten Vorteil verschaffen.\n$Die meisten tragbaren und permanenten Items werden stärker, wenn du sie mehrfach sammelst.\n$Manche Items, wie Entwicklungssteine, tauchen nur auf, wenn du sie auch nutzen kannst.\n$Mithilfe der \"Transfer\"-Option kannst du Items zwischen deinen Pokémon verschieben.\n$Sie erscheint rechts unten, sobald du einem deiner Pokémon dein Item zum Tragen gegeben hast.\n$Du kannst Heilitems auch gegen Geld erwerben. Je weiter du kommst, desto mehr stehen dir zur Auswahl.\n$Erledige deine Einkäufe als erstes, denn sobald du dein zufälliges Item auswählst, beginnt der nächste Kampf.", "eggGacha": "Hier kannst du deine Gutscheine gegen Pokémon-Eier\ntauschen.\n$Eier schlüpfen, nachdem du eine gewisse Anzahl Kämpfe\nabsolviert hast. Je seltener das Ei, desto länger dauert es.\n$Geschlüpfte Pokémon werden nicht deinem Team hinzugefügt,\nsondern deinen verfügbaren Startern.\n$In der Regel haben sie bessere DVs als in der Wildnis\ngefangene Pokémon.\n$Es gibt sogar Pokémon, die du nur aus Eiern erhalten kannst.\n$Es gibt drei Gacha-Maschinen mit je unterschiedlichen Boni,\nalso such' dir die aus, die dir am besten gefällt!" -} \ No newline at end of file +} diff --git a/src/locales/en/splash-messages.json b/src/locales/en/splash-messages.json index b7f7c737344..7397669b57d 100644 --- a/src/locales/en/splash-messages.json +++ b/src/locales/en/splash-messages.json @@ -1,5 +1,5 @@ { - "battlesWon": "Battles Won!", + "battlesWon": "{{count, number}} Battles Won!", "joinTheDiscord": "Join the Discord!", "infiniteLevels": "Infinite Levels!", "everythingIsStackable": "Everything Is Stackable*!", diff --git a/src/locales/en/tutorial.json b/src/locales/en/tutorial.json index 4c43f1fd896..b25ca777f7c 100644 --- a/src/locales/en/tutorial.json +++ b/src/locales/en/tutorial.json @@ -3,8 +3,8 @@ "accessMenu": "To access the menu, press M or Escape while awaiting input.\nThe menu contains settings and various features.", "menu": "From this menu you can access the settings.\n$From the settings you can change game speed, window style, and other options.\n$There are also various other features here, so be sure to check them all!", "starterSelect": "From this screen, you can select your starters by pressing\nZ or the Space bar. These are your initial party members.\n$Each starter has a value. Your party can have up to\n6 members as long as the total does not exceed 10.\n$You can also select gender, ability, and form depending on\nthe variants you've caught or hatched.\n$The IVs for a species are also the best of every one you've\ncaught or hatched, so try to get lots of the same species!", - "pokerus": "A daily random 3 selectable starters have a purple border.\n$If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!", + "pokerus": "A daily random 5 selectable starters have a purple border.\n$If you see a starter you own with one of these,\ntry adding it to your party. Be sure to check its summary!", "statChange": "Stat changes persist across battles as long as your Pokémon aren't recalled.\n$Your Pokémon are recalled before a trainer battle and before entering a new biome.\n$You can view the stat changes for any Pokémon on the field by holding C or Shift.\n$You can also view the moveset for an enemy Pokémon by holding V.\n$This only reveals moves that you've seen the Pokémon use this battle.", "selectItem": "After every battle, you are given a choice of 3 random items.\nYou may only pick one.\n$These range from consumables, to Pokémon held items, to passive permanent items.\n$Most non-consumable item effects will stack in various ways.\n$Some items will only show up if they can be used, such as evolution items.\n$You can also transfer held items between Pokémon using the transfer option.\n$The transfer option will appear in the bottom right once you have obtained a held item.\n$You may purchase consumable items with money, and a larger variety will be available the further you get.\n$Be sure to buy these before you pick your random item, as it will progress to the next battle once you do.", "eggGacha": "From this screen, you can redeem your vouchers for\nPokémon eggs.\n$Eggs have to be hatched and get closer to hatching after\nevery battle. Rarer eggs take longer to hatch.\n$Hatched Pokémon also won't be added to your party, they will\nbe added to your starters.\n$Pokémon hatched from eggs generally have better IVs than\nwild Pokémon.\n$Some Pokémon can only even be obtained from eggs.\n$There are 3 different machines to pull from with different\nbonuses, so pick the one that suits you best!" -} \ No newline at end of file +} diff --git a/src/locales/es/tutorial.json b/src/locales/es/tutorial.json index f03d1e216e4..6b8952e7ab0 100644 --- a/src/locales/es/tutorial.json +++ b/src/locales/es/tutorial.json @@ -3,7 +3,7 @@ "accessMenu": "Para acceder al menú, pulsa M o Escape cuando\ntengas el control.\n$El menú contiene los ajustes y otras funciones.", "menu": "Desde este menú podrás acceder a los ajustes.\n$Podrás cambiar la velocidad del juego, el estilo de la ventana y demás.\n$Hay más opciones, ¡así que pruébalas todas!", "starterSelect": "En esta pantalla, podrás elegir tus iniciales presionando Z\no Espacio. Estos serán tus miembros de equipo al comenzar.\n$Cada inicial tiene un valor. Tu equipo puede contener hasta 6\nmiembros mientras el valor total no pase de 10.\n$También puedes elegir su género, habilidad y forma\ndependiendo de las variantes que hayas conseguido.\n$Los IVs de los iniciales corresponderán al valor más alto de\nlos Pokémon de la misma especie que hayas obtenido.\n$¡Así que intenta conseguir muchos Pokémon de la misma\nespecie!", - "pokerus": "Cada día, 3 iniciales aleatorios tendrán un borde morado.\n$Si ves un inicial que tengas con este borde, prueba a\nañadirlo a tu equipo. ¡No olvides revisar sus datos!", + "pokerus": "Cada día, 5 iniciales aleatorios tendrán un borde morado.\n$Si ves un inicial que tengas con este borde, prueba a\nañadirlo a tu equipo. ¡No olvides revisar sus datos!", "statChange": "Los cambios de estadísticas se mantienen entre combates\nmientras que el Pokémon no vuelva a su Poké Ball.\n$Tus Pokémon vuelven a sus Poké Balls antes de combates contra entrenadores y de entrar a un nuevo bioma.\n$También puedes ver los cambios de estadísticas del Pokémon en campo manteniendo pulsado C o Shift.\n$También puedes ver los movimientos de un Pokémon enemigo manteniendo presionada la V.\n$Esto solo revela los movimientos que has visto usar al Pokémon en esta combate.", "selectItem": "Tras cada combate, tendrás la opción de elegir entre tres objetos aleatorios. Solo podrás escoger uno.\n$Estos objetos pueden ser consumibles, objetos equipables u objetos pasivos permanentes (hasta acabar la partida).\n$La mayoría de los efectos de objetos no consumibles se acumularán de varias maneras.\n$Algunos objetos solo aparecerán si pueden ser utilizados, como las piedras evolutivas.\n$También puedes transferir objetos equipados entre Pokémon, utilizando la opción de transferir.\n$La opción de transferir aparecerá en la parte inferior derecha una vez hayas obtenido un objeto equipable.\n$También puedes comprar objetos consumibles con dinero y su variedad irá aumentando según tu avance.\n$Asegúrate de comprar antes de escoger una recompensa, ya que se avanzará automáticamente al siguiente combate.", "eggGacha": "En esta pantalla podrás canjear tus vales por huevos\nde Pokémon.\n$Los huevos deben eclosionar y estarán más cerca de\nhacerlo tras cada combate.\n$Los huevos más raros tardarán más en eclosionar.\n$Los Pokémon que hayan salido del huevo no se\nañadirán a tu equipo, pero sí a tus iniciales.\n$Los Pokémon salidos de un huevo suelen tener mejores\nIVs que los Pokémon salvajes.\n$Algunos Pokémon solo pueden ser obtenidos de huevos.\n$Hay 3 máquinas diferentes entre las que elegir, cada\nuna con diferentes bonificaciones.\n$¡Así que escoge la que más te interese!" diff --git a/src/locales/fr/tutorial.json b/src/locales/fr/tutorial.json index 3236bdafea2..60fcd475b52 100644 --- a/src/locales/fr/tutorial.json +++ b/src/locales/fr/tutorial.json @@ -3,7 +3,7 @@ "accessMenu": "Accédez au menu avec M ou Échap lors de l’attente d’une\naction.\n$Il contient les paramètres et diverses fonctionnalités.", "menu": "Vous pouvez accéder aux paramètres depuis ce menu.\n$Vous pouvez entre autres y changer la vitesse du jeu ou le style de fenêtre…\n$Mais également des tonnes d’autres fonctionnalités, jetez-y un œil !", "starterSelect": "Choisissez vos starters depuis cet écran avec Z ou Espace.\nIls formeront votre équipe de départ.\n$Chacun possède une valeur. Votre équipe peut avoir\njusqu’à 6 membres, sans dépasser un cout de 10.\n$Vous pouvez aussi choisir le sexe, le talent et la forme en\nfonction des variants déjà capturés ou éclos.\n$Les IV d’un starter sont les meilleurs de tous ceux de\nson espèce déjà possédés. Obtenez-en plusieurs !", - "pokerus": "Chaque jour, 3 starters tirés aléatoirement ont un contour violet.\n$Si un starter que vous possédez l’a, essayez de l’ajouter à votre équipe. Vérifiez bien son résumé !", + "pokerus": "Chaque jour, 5 starters tirés aléatoirement ont un contour violet.\n$Si un starter que vous possédez l’a, essayez de l’ajouter à votre équipe. Vérifiez bien son résumé !", "statChange": "Les changements de stats persistent à travers\nles combats tant que le Pokémon n’est pas rappelé.\n$Vos Pokémon sont rappelés avant un combat de\nDresseur et avant d’entrer dans un nouveau biome.\n$Vous pouvez voir en combat les changements de stats\nd’un Pokémon en maintenant C ou Maj.\n$Vous pouvez également voir les capacités de l’adversaire\nen maintenant V.\n$Seules les capacités que le Pokémon a utilisées dans\nce combat sont consultables.", "selectItem": "Après chaque combat, vous avez le choix entre 3 objets\ntirés au sort. Vous ne pouvez en prendre qu’un.\n$Cela peut être des objets consommables, des objets à\nfaire tenir, ou des objets passifs aux effets permanents.\n$La plupart des effets des objets non-consommables se cumuleront de diverses manières.\n$Certains objets n’apparaitront que s’ils ont une utilité immédiate, comme les objets d’évolution.\n$Vous pouvez aussi transférer des objets tenus entre\nPokémon en utilisant l’option de transfert.\n$L’option de transfert apparait en bas à droite dès\nqu’un Pokémon de l’équipe porte un objet.\n$Vous pouvez acheter des consommables avec de\nl’argent. Plus vous progressez, plus le choix sera large.\n$Choisir un des objets gratuits déclenchera le prochain\ncombat, donc faites bien tous vos achats avant.", "eggGacha": "Depuis cet écran, vous pouvez utiliser vos coupons\npour recevoir Œufs de Pokémon au hasard.\n$Les Œufs éclosent après avoir remporté un certain nombre de combats.\n$Plus ils sont rares, plus ils mettent de temps.\n$Les Pokémon éclos ne rejoindront pas votre équipe, mais seront ajoutés à vos starters.\n$Les Pokémon issus d’Œufs ont généralement de meilleurs IV que les Pokémon sauvages.\n$Certains Pokémon ne peuvent être obtenus que dans des Œufs.\n$Il y a 3 différentes machines à actionner avec différents\nbonus, prenez celle qui vous convient le mieux !" diff --git a/src/locales/it/tutorial.json b/src/locales/it/tutorial.json index 6937d59408e..0a749563a75 100644 --- a/src/locales/it/tutorial.json +++ b/src/locales/it/tutorial.json @@ -3,8 +3,8 @@ "accessMenu": "Per accedere al menu, premi M o esc.\nDal menu puoi modificare le impostazioni, controllare la wiki ed accedere a varie features.", "menu": "Da questo menu puoi accedere alle impostazioni.\n$Esse ti permettono di cambiare velocità di gioco, stile delle finestre ed altre opzioni.\n$Ci sono varie funzionalità: controlla bene e non perderti nulla!", "starterSelect": "Da questa schermata puoi selezionare il tuo starter.\nQuesti sono i membri iniziali della tua squadra.\n$Ogni starter ha un valore. Puoi avere fino a \n6 Pokèmon, avendo a disposizione un massimo di 10 punti.\n$Puoi anche selezionare genere, abilità, e forma a seconda delle\nvarianti che hai catturato o schiuso.\n$Le IVs di una specie sono le migliori rispetto a tutte quelle che hai\ncatturato o schiuso, quindi prova a catturarne il piu possibile!", - "pokerus": "Giornalmente 3 starter casuali disponibili avranno il bordo viola.\n$Se possiedi uno di questi starter,\nprova ad aggiungerlo alla squadra. Ricorda di controllarne le info!", + "pokerus": "Giornalmente 5 starter casuali disponibili avranno il bordo viola.\n$Se possiedi uno di questi starter,\nprova ad aggiungerlo alla squadra. Ricorda di controllarne le info!", "statChange": "I cambiamenti alle statistiche persistono fintanto che i tuoi pokèmon restano in campo.\n$I tuoi pokemon verranno richiamati quando incontrerai un allenatore o al cambiamento di bioma.\n$Puoi anche vedere i cambiamenti alle statistiche in corso tenendo premuto C o Shift", "selectItem": "Dopo ogni battaglia potrai scegliere tra 3 oggetti.\nPotrai prenderne solo uno.\n$Questi spaziano tra consumabili, oggetti tenuti da Pokèmon o con un effetto passivo permanente.\n$La maggior parte degli oggetti non consumabili possono accumulare i loro effetti in diversi modi.\n$Alcuni risulteranno inoltre disponibili solo se possono essere usati, come ad esempio gli oggetti evolutivi.\n$Puoi anche passare un oggetto tenuto da un Pokèmon a un altro attraverso l'opzione 'trasferisci strumento'.\n$Quest'ultima sarà disponibile solo dopo aver assegnato uno strumento ad un Pokèmon.\n$Puoi acquistare consumabili con le monete; progredendo saranno poi disponibili ulteriori oggetti.\n$Assicurati di fare un acquisto prima di selezionare un item casuale, poichè dopo aver fatto ciò passerai subito alla lotta successiva.", "eggGacha": "Da questa schermata puoi riscattare i tuoi vouchers in cambio di\nuova Pokèmon.\n$Le uova vanno schiuse, e saranno sempre più vicine alla schiusura dopo\nogni battaglia. Le uova più rare impiegheranno più battaglie per la schiusura.\n$I Pokémon schiusi non verranno aggiunti alla tua squadra, ma saranno\ninvece aggiunti ai tuoi starters.\n$I Pokémon schiusi hanno (generalmente) IVs migliori rispetto ai\n Pokémon selvatici.\n$Inoltre, alcuni Pokémon possono essere ottenuti solo tramite uova.\n$Ci sono 3 diversi macchinari con differenti\nbonus, scegli quello che preferisci!" -} \ No newline at end of file +} diff --git a/src/locales/ja/tutorial.json b/src/locales/ja/tutorial.json index a9018a53144..537076def0e 100644 --- a/src/locales/ja/tutorial.json +++ b/src/locales/ja/tutorial.json @@ -3,7 +3,7 @@ "accessMenu": "メニューを開くには 入力待ちの間に Mキー/Escを 押してください。\nメニューには 設定や 様々な機能が 含まれています。", "menu": "このメニューから 設定が 開けます。\n$設定では、ゲームの速さや ウィンドウタイプなどの オプションを 変更できます。\n$ここには 様々な機能が ありますので、\nぜひ 確認してみてください!", "starterSelect": "この画面では Zキー/空白キーを押して ポケモンが 選択できます。\n選んだポケモンは 最初の手持ちに なります。\n$各ポケモンは ポイントが ある。最大6つを 選べますが\nポケモンのポイントが 合計10を超えては いけません。\n$ポケモンを 捕まえたり タマゴからふかしたり することで\n選択できる 性別、特性、フォルムなどの 幅を広げられます。\n$個体値も 徐々に 累積して 高くなるから\n同じポケモンを たくさん 捕まえて みてください!", - "pokerus": "毎日、無作為に スターターの\n3種類には 紫色の枠が 表示されます。\n$登録された スターターの 中に いれば、\n手持ちに加えて 強さを 確認してみましょう!", + "pokerus": "毎日、無作為に スターターの\n5種類には 紫色の枠が 表示されます。\n$登録された スターターの 中に いれば、\n手持ちに加えて 強さを 確認してみましょう!", "statChange": "ポケモンを 入れ替えない限り、\n次のバトルでも 能力変化は なくなりません。\n$その代わりに、トレーナーバトルや 新しいバイオームに\n入る直前に 能力変化は 自動的に 元に戻ります。\n$Cキー/Shiftキーを 押し続けると、\n場にいるポケモンの 能力変化を 確認できます。\n$Vキーを 押し続けると、\n相手が出した技と 場の効果を 確認できます。\n$ただし 現在のバトルでの 相手ポケモンが\nすでに 使った 技のみ 表示されます。", "selectItem": "バトルが 終わるたびには、「ショップ」という\n画面で 3つのご褒美から 1つが選べます。\n$種類は 消耗品、ポケモンの持ち物や道具、\n永続的な パッシブアイテムなど 様々です。\n$ほとんどの 消耗しない 道具は\n効果が 累積されます。\n$例えば 進化アイテムなどの ご褒美は\n使用できる 場合のみに 登場します。\n$持ち物や 道具が\n手持ちポケモン画面に 移動できます。\n$持ち物や 道具が あれば、 ショップ画面の\n右下に「アイテム移行」が 表示されます。\n$ショップ画面で お金で 消耗品を 買えます。\nラウンドが進むにつれて 買えるアイテムが 増えます。\n$ご褒美を 選択すると 次の ラウンドに 進むから\nまずは 金で買える 消耗品を 買ってください。", "eggGacha": "この画面では、「タマゴクーポン」で\nポケモンのタマゴを 取得できます。\n$タマゴは ラウンドが進めるうちに ふかします。\nタマゴのふかは レア度によって 時間が かかります。\n$ふかしたポケモンは 手持ちに 加えられずに\nスターターに 登録されます。\n$ふかしたポケモンは 一般的に\n野生ポケモンよりも 高い個体値が あります。\n$あるポケモンは タマゴからしか 手に入りません。\n$各ガチャマシンは 個性的な ボーナスが あるから\n好きな方から 引いてみてください!," diff --git a/src/locales/ko/tutorial.json b/src/locales/ko/tutorial.json index b5304f43098..748b8abba52 100644 --- a/src/locales/ko/tutorial.json +++ b/src/locales/ko/tutorial.json @@ -3,8 +3,8 @@ "accessMenu": "메뉴에 액세스하려면 입력을 기다리는 동안 M 또는 Esc를 누릅니다.\n메뉴에는 설정과 다양한 기능이 포함되어 있습니다.", "menu": "이 메뉴에서 설정에 액세스할 수 있습니다.\n$설정에서 게임 속도, 윈도우 스타일 및 기타 옵션을 변경할 수 있습니다.\n$여기에는 다양한 다른 기능도 있으니 꼭 확인해보세요!", "starterSelect": "이 화면에서 Z나 스페이스바로 스타팅을 선택할 수 있습니다.\n이들은 당신의 첫 번째 파티 멤버들입니다.\n$최대 6마리의 파티로 시작할 수 있지만\n포켓몬에 따라 코스트가 있어 총합 10을 넘겨선 안 됩니다.\n$계속 잡거나 부화시켜서\n선택할 수 있는 성별, 특성, 폼 등의 폭을 넓힐 수 있습니다.\n$개체값도 점점 누적되어 높아지므로,\n같은 포켓몬을 많이 잡아보세요!", - "pokerus": "매일 랜덤 스타팅 세 종류에 보라색 테두리가 쳐집니다.\n$등록된 스타팅 중에 있다면,\n파티에 추가해서 능력치 화면을 확인해봅시다!", + "pokerus": "매일 랜덤 스타팅 다섯 종류에 보라색 테두리가 쳐집니다.\n$등록된 스타팅 중에 있다면,\n파티에 추가해서 능력치 화면을 확인해봅시다!", "statChange": "포켓몬은 교체하지 않으면 다음 전투에서도 능력치 변화가 유지됩니다.\n$대신 트레이너 배틀이나 새로운 바이옴 입장 직전에 자동으로 들여보내지게 됩니다.\n$C 또는 Shift를 꾹 눌러 현재 포켓몬의 능력치 변화를 볼 수도 있습니다.\n$V를 눌러 상대방이 사용했던 기술도 확인할 수 있습니다.\n$단, 이번 배틀에서 상대 포켓몬이 이미 사용한 기술만 나타납니다.", "selectItem": "전투가 끝날때마다 무작위 아이템 3개 중 하나를 선택하여 얻습니다.\n$종류는 소모품, 포켓몬의 지닌 도구, 영구적 패시브 아이템에 이르기까지 다양합니다.\n$대부분의 소모되지 않는 도구는 효과가 누적됩니다.\n$진화용과 같은 일부분의 아이템은 사용할 수 있는 경우에만 등장합니다.\n$지닌 도구 건네주기 기능을 사용해 포켓몬끼리 도구를 옮겨 지닐 수도 있습니다.\n$지닌 도구가 있다면 아이템 선택 화면 오른쪽 하단에 건네주기 기능이 표시됩니다.\n$돈으로 소모품을 구입할 수도 있으며, 웨이브 진행에 따라 구입 가능한 종류가 늘어납니다.\n$아이템을 선택하면 다음 웨이브로 넘어가므로, 소모품 구입을 먼저 해 주세요.", "eggGacha": "이 화면에서 포켓몬 알 바우처를\n사용해 뽑기를 할 수 있습니다.\n$알은 전투를 반복하다 보면 부화합니다.\n희귀할 수록 더 오래 걸립니다.\n$부화시킨 포켓몬은 파티에 추가되지 않고\n스타팅에 등록될 것입니다.\n$알에서 부화한 포켓몬은 일반적으로\n야생에서 잡은 포켓몬보다 더 높은 개체값을 지닙니다.\n$일부 포켓몬은 알에서만 얻을 수 있습니다.\n$각 뽑기 기계가 각각 다른 보너스를 가지고 있으므로,\n원하는 쪽을 사용해보세요!" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/tutorial.json b/src/locales/pt_BR/tutorial.json index 09199a9e31c..6c70d61e4c8 100644 --- a/src/locales/pt_BR/tutorial.json +++ b/src/locales/pt_BR/tutorial.json @@ -3,7 +3,7 @@ "accessMenu": "Para acessar o menu, pressione M ou Esc.\n$O menu contém configurações e diversas funções.", "menu": "A partir deste menu, você pode\nacessar as configurações.\n$A partir das configurações, você\npode alterar a velocidade do jogo,\n$o estilo da janela e outras opções.\n$Há também vários outros recursos aqui.\nCertifique-se de verificar todos eles!", "starterSelect": "Nesta tela, você pode selecionar seus iniciais\npressionando Z ou a barra de espaço.\n$Esses serão os primeiros membros da sua equipe.\n$Cada inicial tem um custo. Sua equipe pode ter até 6 membros,\ndesde que desde que o custo total não exceda 10.\n$Você pode escolher o gênero, a habilidade\ne até a forma do seu inicial.\n$Essas opções dependem das variantes dessa\nespécie que você já capturou ou chocou.\n$Os IVs de cada inicial são os melhores de todos os Pokémon\ndaquela espécie que você já capturou ou chocou.\n$Sempre capture vários Pokémon de todas as espécies!", - "pokerus": "Todo dia, 3 Pokémon iniciais ficam com uma borda roxa.\n$Caso veja um inicial que você possui com uma dessa, tente\nadicioná-lo a sua equipe. Lembre-se de olhar seu sumário!", + "pokerus": "Todo dia, 5 Pokémon iniciais ficam com uma borda roxa.\n$Caso veja um inicial que você possui com uma dessa, tente\nadicioná-lo a sua equipe. Lembre-se de olhar seu sumário!", "statChange": "As mudanças de atributos se mantém após a batalha desde que o Pokémon não seja trocado.\n$Seus Pokémon voltam a suas Poké Bolas antes de batalhas contra treinadores e de entrar em um novo bioma.\n$Para ver as mudanças de atributos dos Pokémon em campo, mantena C ou Shift pressionado durante a batalha.", "selectItem": "Após cada batalha, você pode escolher entre 3 itens aleatórios.\n$Você pode escolher apenas um deles.\n$Esses itens variam entre consumíveis, itens de segurar e itens passivos permanentes.\n$A maioria dos efeitos de itens não consumíveis podem ser acumulados.\n$Alguns itens só aparecerão se puderem ser usados, como os itens de evolução.\n$Você também pode transferir itens de segurar entre os Pokémon utilizando a opção \"Alterar\".\n$A opção de transferir irá aparecer no canto inferior direito assim que você obter um item de segurar.\n$Você pode comprar itens consumíveis com dinheiro, e sua variedade aumentará conforme você for mais longe.\n$Certifique-se de comprá-los antes de escolher seu item aleatório. Ao escolhê-lo, a próxima batalha começará.", "eggGacha": "Nesta tela, você pode trocar seus vouchers por ovos\nde Pokémon.\n$Ovos ficam mais próximos de chocar após cada batalha.\nOvos mais raros demoram mais tempo para chocar.\n$Pokémon chocados não serão adicionados a sua equipe,\nmas sim aos seus iniciais.\n$Pokémon chocados de ovos geralmente têm IVs melhores\ndo que Pokémon selvagens.\n$Alguns Pokémon só podem ser obtidos através de ovos.\n$Existem 3 máquinas para usar com diferentes bônus, então\nescolha a que mais lhe convém!" diff --git a/src/locales/zh_CN/tutorial.json b/src/locales/zh_CN/tutorial.json index 2f76b2ba2b5..7e6163c80e8 100644 --- a/src/locales/zh_CN/tutorial.json +++ b/src/locales/zh_CN/tutorial.json @@ -3,8 +3,8 @@ "accessMenu": "在等待输入时,按 M 或 Escape 键可访\n问菜单。菜单包含设置和各种功能。", "menu": "在此菜单中,您可以访问设置。\n$在设置中,您可以更改游戏速度、窗口样式\n和其他选项。\n$这里还有各种其他功能,请务必全部查看!", "starterSelect": "在此页面中,您可以通过按Z或空格键选择\n您的初始宝可梦。这些是您最初的队伍成员。\n$每个初始宝可梦都有一个费用值。您的队伍\n最多可以拥有6名成员,只要总费用不超过10。\n$您还可以根据您捕获或孵化的变种选择性别\n、特性和形态。\n$一个物种个体值是您捕获或孵化的所有宝可\n梦中最好的,所以尽量获得更多同种宝可梦!", - "pokerus": "每天随机3个可选的初始宝可梦会有紫色边\n框。\n$如果您看到您拥有的初始宝可梦带有紫色边\n框,请尝试将其添加到您的队伍中。请务必\n$查看其概况!", + "pokerus": "每天随机5个可选的初始宝可梦会有紫色边\n框。\n$如果您看到您拥有的初始宝可梦带有紫色边\n框,请尝试将其添加到您的队伍中。请务必\n$查看其概况!", "statChange": "只要您的宝可梦没有被召回,属性变化就会\n在战斗中持续存在。\n$在训练家战斗之前和进入新的宝可梦群落之\n前,您的宝可梦会被召回。\n$您还可以通过按住C或Shift键来查看\n场上宝可梦的能力变化。", "selectItem": "每次战斗后,您都可以从多个随机物品中\n选择其中一个。\n$这些物品包括消耗品、宝可梦携带物品和永\n久被动道具。\n$大多数非消耗品的效果会以各种方式叠加。\n$某些物品只有在可以使用时才会出现,例如\n进化物品。\n$您还可以使用转移选项在宝可梦之间转移携\n带物品。\n$一旦您获得了携带物品,转移选项就会出现\n在右下角。\n$您可以用金钱购买消耗品,并且随着您游戏\n的深入,将会有更多种类的消耗品可供选择。\n$请务必在选择随机物品之前购买这些消耗品\n因为一旦您选择,游戏就会进入下一场战斗。", "eggGacha": "在此页面中,您可以使用您的兑换券兑换宝\n可梦蛋。\n$蛋需要孵化,并且在每场战斗后都会减少孵\n化周期。稀有蛋需要更长时间才能孵化。\n$孵化的宝可梦不会被添加到您的队伍中,它\n们将被添加到您的初始宝可梦中。\n$从蛋中孵化的宝可梦通常比野生宝可梦具有\n更好的个体值。\n$有些宝可梦只能从蛋中获得。\n$有 3 种不同的扭蛋机可供选择,每种扭蛋机\n都有不同的奖励,请选择最适合您的!" -} \ No newline at end of file +} diff --git a/src/locales/zh_TW/tutorial.json b/src/locales/zh_TW/tutorial.json index 5e6e3d0ba9c..581aea5b8ca 100644 --- a/src/locales/zh_TW/tutorial.json +++ b/src/locales/zh_TW/tutorial.json @@ -3,8 +3,8 @@ "accessMenu": "在等待輸入時,按 M 或 Escape 鍵可訪\n問菜單。菜單包含設置和各種功能。", "menu": "在此菜單中,您可以訪問設置。 \n$在設置中,您可以更改遊戲速度、窗口樣式\n和其他選項。 \n$這裏還有各種其他功能,請務必全部查看!", "starterSelect": "在此頁面中,您可以選擇您的初始寶可夢。\n這些是您最初的隊伍成員。 \n$每個初始寶可夢都有一個費用值。您的隊伍\n最多可以擁有6名成員,只要總費用不超過10。 \n$您還可以根據您捕獲或孵化的變種選擇性別\n、特性和形態。 \n$一個物種個體值是您捕獲或孵化的所有寶可\n夢中最好的,所以儘量獲得更多同種寶可夢!", - "pokerus": "每天隨機3個可選的初始寶可夢會有紫色邊\n框。 \n$如果您看到您擁有的初始寶可夢帶有紫色邊\n框,請嘗試將其添加到您的隊伍中。請務必 \n$查看其概況!", + "pokerus": "每天隨機5個可選的初始寶可夢會有紫色邊\n框。 \n$如果您看到您擁有的初始寶可夢帶有紫色邊\n框,請嘗試將其添加到您的隊伍中。請務必 \n$查看其概況!", "statChange": "只要您的寶可夢沒有被召回,屬性變化就會\n在戰鬥中持續存在。 \n$在訓練家戰鬥之前和進入新的寶可夢羣落之\n前,您的寶可夢會被召回。 \n$您還可以通過按住C或Shift鍵來查看\n場上寶可夢的能力變化。", "selectItem": "每次戰鬥後,您都可以選擇 3 個隨機物品。\n您只能選擇其中一個。 \n$這些物品包括消耗品、寶可夢攜帶物品和永\n久被動道具。 \n$大多數非消耗品的效果會以各種方式疊加。 \n$某些物品只有在可以使用時纔會出現,例如\n進化物品。 \n$您還可以使用轉移選項在寶可夢之間轉移攜\n帶物品。 \n$一旦您獲得了攜帶物品,轉移選項就會出現\n在右下角。 \n$您可以用金錢購買消耗品,並且隨着您遊戲\n的深入,將會有更多種類的消耗品可供選擇。 \n$請務必在選擇隨機物品之前購買這些消耗品\n因爲一旦您選擇,遊戲就會進入下一場戰鬥。", "eggGacha": "在此頁面中,您可以使用您的兌換券兌換寶\n可夢蛋。 \n$蛋需要孵化,並且在每場戰鬥後都會減少孵\n化週期。稀有蛋需要更長時間才能孵化。 \n$孵化的寶可夢不會被添加到您的隊伍中,它\n們將被添加到您的初始寶可夢中。 \n$從蛋中孵化的寶可夢通常比野生寶可夢具有\n更好的個體值。 \n$有些寶可夢只能從蛋中獲得。 \n$有 3 種不同的扭蛋機可供選擇,每種扭蛋機\n都有不同的獎勵,請選擇最適合您的!" -} \ No newline at end of file +} From 909be8ed722090db007f4f11b3a2e83750ba8af7 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Thu, 26 Sep 2024 18:34:20 +0200 Subject: [PATCH 08/10] [Localization] Splash texts Updates (#4424) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update splash-messages.json * Update splash-messages.json * Update splash-messages.json * Update splash-messages.json * Update splash-messages.json * Update splash-messages.json * Update splash-messages.json * Update splash-messages.json * Update splash-messages.json * Update splash-messages.json * Update splash-messages.json * Update splash-messages.json * Update splash-messages.json * Update splash-messages.json * Update splash-messages.json * Apply suggestions from code review * Update splash-messages.json * Update splash-messages.json * Update splash-messages.json * Update src/locales/pt_BR/splash-messages.json * Update src/locales/pt_BR/splash-messages.json * Update src/locales/pt_BR/splash-messages.json * Update src/locales/pt_BR/splash-messages.json * Update src/locales/pt_BR/splash-messages.json * Apply suggestions from code review Co-authored-by: José Ricardo * Update splash-messages.json [localization] italian localization * Apply suggestions from code review Readded count * Apply suggestions from code review Removed non translated text from spanish * Removed non translated splash messages from all other languages * I missed simplified chinese * Update src/locales/es/splash-messages.json * Update src/locales/ja/splash-messages.json * Update src/locales/es/splash-messages.json * Update src/locales/ko/splash-messages.json * Update src/locales/zh_TW/splash-messages.json * Update src/locales/zh_CN/splash-messages.json --------- Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> Co-authored-by: José Ricardo Co-authored-by: Niccolò <123510358+NicusPulcis@users.noreply.github.com> --- src/locales/de/splash-messages.json | 126 +++++++++++++++++++++-- src/locales/es/splash-messages.json | 11 +-- src/locales/fr/splash-messages.json | 126 +++++++++++++++++++++-- src/locales/it/splash-messages.json | 126 +++++++++++++++++++++-- src/locales/ja/splash-messages.json | 35 +------ src/locales/ko/splash-messages.json | 13 +-- src/locales/pt_BR/splash-messages.json | 132 ++++++++++++++++++++++--- src/locales/zh_CN/splash-messages.json | 8 +- src/locales/zh_TW/splash-messages.json | 8 +- 9 files changed, 478 insertions(+), 107 deletions(-) diff --git a/src/locales/de/splash-messages.json b/src/locales/de/splash-messages.json index ba126393ccb..0794d89f8ea 100644 --- a/src/locales/de/splash-messages.json +++ b/src/locales/de/splash-messages.json @@ -2,9 +2,9 @@ "battlesWon": "{{count, number}} Kämpfe gewonnen!", "joinTheDiscord": "Tritt dem Discord bei!", "infiniteLevels": "Unendliche Level!", - "everythingStacks": "Alles stapelt sich!", + "everythingIsStackable": "Alles ist stapelbar*!", "optionalSaveScumming": "Optionales Save Scumming!", - "biomes": "35 Biome!", + "biomes": "38 Biome!", "openSource": "Open Source!", "playWithSpeed": "Spiele mit fünffacher Geschwindigkeit!", "liveBugTesting": "Live-Bug-Tests!", @@ -14,9 +14,9 @@ "infiniteFusionAtHome": "Wir haben Infinite Fusionen zu Hause!", "brokenEggMoves": "Übermächtige Ei-Attacken!", "magnificent": "Herrlich!", - "mubstitute": "Melegator!", + "doPeopleReadThis": "Liest das jemand?", "thatsCrazy": "Das ist verrückt!", - "oranceJuice": "Orangensaft!", + "gottaCatchEmAll": "Komm' und schnapp sie dir!", "questionableBalancing": "Fragwürdiges Balancing!", "coolShaders": "Coole Shader!", "aiFree": "Ohne KI!", @@ -25,12 +25,120 @@ "moreAddictiveThanIntended": "Süchtig machender als beabsichtigt!", "mostlyConsistentSeeds": "Meistens konsistente Seeds!", "achievementPointsDontDoAnything": "Errungenschaftspunkte tun nichts!", - "youDoNotStartAtLevel": "Du startest nicht auf Level 2000!", - "dontTalkAboutTheManaphyEggIncident": "Wir reden nicht über den Manaphy-Ei-Vorfall!", + "nothingBeatsAJellyFilledDonut": "Donuts mit Marmelade, es gibt nicht besseres auf der Welt!", + "dontTalkAboutTheTinkatonIncident": "Wir reden nicht über den Granforgita-Vorfallt!", "alsoTryPokengine": "Versuche auch Pokéngine!", "alsoTryEmeraldRogue": "Versuche auch Emerald Rogue!", "alsoTryRadicalRed": "Versuche auch Radical Red!", "eeveeExpo": "Evoli-Expo!", - "ynoproject": "YNO-Projekt!", - "breedersInSpace": "Züchter im Weltall!" -} \ No newline at end of file + "checkOutYnoproject": "Schau dir YNOproject an!", + "breedersInSpace": "Züchter im Weltall!", + "alsoTryPokemonUnbound": "Verusch mal Pokemon Unbound!", + "tryTheJohtoDragonChallenge": "Versuch die Johto Mono-Drache Herausforderung!", + "basicReadingAbilityRecommended": "Grundlegendes Leseverständnis empfohlen!", + "shoutoutsToTheArtists": "Shoutout an die Künstler!", + "gamblingNotEncouraged": "Glücksspiel wird nicht gefördert!", + "dontForgetToTakeABreak": "Vergiss nicht eine Pause einzulegen!", + "wEvent": "Geiles Event", + "ifItsNotAccurateItsAccurate": "Hat es keine 100%ige Genauigkeit trifft es nur in 50% der Fälle.", + "everyLossIsProgressMade": "Jede Niederlage ist Fortschritt!", + "liveWoChienReaction": "Live Chongjian Reaktion:", + "itsAFeatureNotABug": "Es ist ein Feature und kein Fehler!", + "theEggsAreNotForEating": "Die Eier sind nicht zum Essen da!", + "7.8outOf10TooManyWaterBiomes": "7.8/10, Zu viel Wasser!", + "butNothingHappened": "Nichts geschieht!", + "thePowerOfScienceIsAmazing": "Die Wissenschaft kennt keine Grenzen!", + "freeToPlay": "Free To Play!", + "theresATimeAndPlaceForEverything": "Dies ist weder der rechte Ort noch die rechte Zeit dafür", + "nowWithShinierShinies": "Mit schillerenden schillernden Pokémon!", + "smilesGoForMiles": "Mit einem Lachen werden wir es machen!", + "certainlyNotDragonFree": "Sicherlich nicht ohne Drachen!", + "haveANiceDay": "Hab einen schönen Tag!", + "redacted": "[ZENSIERT]", + "hi": "hi", + "transRights": "Transrechte!", + "shinyOddsHigherThanYouThink": "Die Chance für schillernde Pokémon ist höher als du denkst!", + "noFalseTrades": "Keine falschen Pokémon-Täusche!", + "notForProfit": "Nicht profitorientiert!", + "timeForYourDailyRun": "Zeit für deinen Täglichen Durchlauf!", + "moreEggsThanADaycare": "Mehr Eier als der Pokémon-Hort!", + "disclaimerHarshSunDoesNotGiveVitaminD": "Warnung: Gleißendes Sonnenlicht liefert KEIN Vitamin D!!", + "whoNeedsAMap": "Wer braucht schon eine Karte?", + "luxrayIsNotADarkType": "Luxtra ist nicht vom Typ Unlicht!", + "selfDestructiveEncounters": "Gegner mit Selbstzerstörungstendenzen!", + "mostOptionsAreViable": "Die meisten Pokémon sind praktikable Optionen!", + "pokerogueMorse": ".--. --- -.- . .-. --- --. ..- .", + "smiley": ":)", + "beAwareOfPassives": "Achte auf passive Fähigkeiten!", + "asSeenOnTheWorldWideWeb": "Wie Im Internet zu sehen!", + "vaultinVeluzas": "Mein lieber Scholli!", + "tooManyStarters": "Zu viele Starter!", + "checkTheWiki": "Schau ins Wiki!", + "winWithYourFavorites": "Gewinne mit deinen Favoriten!", + "alsoTryPokerogueWait": "Probiere auch PokéRogue! Warte mal...", + "theWayISeeItKyogreIsSurrounded": "So wie ich das sehe ist Kyogre umzingelt...", + "tryOutHoneyGather": "Probiere es mal mit Honigmaul!", + "notForTheFaintOfHeart": "Nichts für Zartbesaitete!", + "p": "(P)", + "flipYourDeviceToEvolveInkay": "Dreh dein Gerät auf den Kopf um Iscalar zu entwickeln!", + "inArceusWeTrust": "Wir vertrauen auf Arceus", + "whyDidTheTorchicCrossTheRoad": "Warum überquerte das Flemmli die Straße?", + "goodLuck": "Viel Glück!", + "fuseWisely": "Fusioniere weise!", + "compensation": "Entschädigung?", + "prepareForTroubleAndMakeItDouble": "Jetzt gibt es Ärger...und es kommt noch härter!", + "anEggForYourTroubles": "Ein Ei für deine Mühen?", + "regirock": "ÜN ÜN ÜN", + "hereForAGoodTime": "Hier für eine gute Zeit!", + "getGoodOrDont": "Werd gut! Oder lass es!", + "checkTheSubreddit": "Schau dir das Subreddit an!", + "betterNerfGreninja": "Schwäche Quajutsu lieber ab!", + "inCaseOfUpdateClearYourCache": "Update? Cache leeren!", + "insertTextHere": "*hier Text einfügen*", + "endingEndlessNotFound": "ending_endless nicht gefunden", + "iLikeMyEggsVouchered": "Ich mag meine Eier mit Gutscheinen!", + "YOU": "DU!", + "noAddedSugar": "Ohne Zucker!", + "notSponsored": "Nicht gesponsert!", + "notRated": "Nicht eingestuft!", + "justOneMoreWaveMom": "Nur noch eine Welle, Mama!", + "saltCured": "Gepökelsalzt!", + "onlyOnPokerogueNet": "Nur auf pokerogue.net!", + "pixelPerfection": "Pixel Perfektion!", + "openSource": "Open Source!", + "probablyGood": "Wahrscheinlich ganz gut!", + "itsAMonsterHouse": "Ein Monster-Raum!", + "dontForgetYourPassword": "Vergiss dein Passwort nicht!", + "tripleTripleTripleAxel": "Dreifach- Dreifach- Dreifach-Axel!", + "questionExclamation": "?!", + "clownEncounters": "Clown Begegnungen!", + "fullOfBerries": "Voll mit Beeren!", + "limitsAreMeantToBeBrokenSometimes": "Regeln sind dazu da, gebrochen zu werden, manchmal!", + "keepItCasual": "Lässig bleiben!", + "serversProbablyWorking": "Server funktionieren wahrscheinlich!", + "mew": "Mew ist wahrscheinlich nicht unter dem LKW!", + "makeItRainAndYourProblemsGoAway": "Goldrausch und deine Probleme sind vergessen!", + "customMusicTracks": "Eigene Musiktitel!", + "youAreValid": "Du bist wertvoll!", + "number591IsLookingOff": "Nummer 591 sieht ein bisschen...", + "timeForYourDeliDelivery": "Zeit für deine Botogel-Lieferung!", + "goodFirstImpression": "Hoffe wir haben einen guten ersten Eindruck hinterlassen!", + "iPreferRarerCandies": "Ich bevorzuge Supersonderbonbons!", + "halloween": { + "pumpkabooAbout": "Irrbis überall!", + "mayContainSpiders": "Könnte Spuren von Spinnen enthalten!", + "spookyScarySkeledirge": "Gespenstisch gruselige Skelokrok!", + "gourgeistUsedTrickOrTreat": "Pumpdjinn setzt Halloween ein!", + "letsSnuggleForever": "Herzliche Knuddelkloppe!" + }, + "xmas": { + "happyHolidays": "Fröhliche Feiertage!", + "delibirdSeason": "Botogel-Saison!", + "unaffilicatedWithDelibirdServices": "Kein Zusammenhang mit Botogel-Diensten!", + "diamondsFromTheSky": "Diamantregen vom Himmel!", + "holidayStylePikachuNotIncluded": "Festtags-Pikachu nicht enthalten!" + }, + "newYears": { + "happyNewYear": "Frohes neues Jahr!" + } +} diff --git a/src/locales/es/splash-messages.json b/src/locales/es/splash-messages.json index da31d394c0f..e6d84b3aaf8 100644 --- a/src/locales/es/splash-messages.json +++ b/src/locales/es/splash-messages.json @@ -2,9 +2,8 @@ "battlesWon": "¡{{count, number}} Batallas ganadas!", "joinTheDiscord": "¡Únete al Discord!", "infiniteLevels": "¡Niveles infinitos!", - "everythingStacks": "¡Todo se acumula!", "optionalSaveScumming": "¡Trampas de guardado opcionales!", - "biomes": "¡35 biomas!", + "biomes": "¡38 biomas!", "openSource": "¡Código abierto!", "playWithSpeed": "¡Juega a velocidad 5x!", "liveBugTesting": "¡Testeo de bugs en directo!", @@ -14,9 +13,7 @@ "infiniteFusionAtHome": "¡Infinite Fusion en casa!", "brokenEggMoves": "¡Movimientos Huevo rotos!", "magnificent": "¡Magnífico!", - "mubstitute": "¡Mubstituto!", "thatsCrazy": "¡De locos!", - "oranceJuice": "¡Zumo de narancia!", "questionableBalancing": "¡Cambios en balance cuestionables!", "coolShaders": "¡Shaders impresionantes!", "aiFree": "¡Libre de IA!", @@ -25,12 +22,8 @@ "moreAddictiveThanIntended": "¡Más adictivo de lo previsto!", "mostlyConsistentSeeds": "¡Semillas CASI consistentes!", "achievementPointsDontDoAnything": "¡Los Puntos de Logro no hacen nada!", - "youDoNotStartAtLevel": "¡No empiezas al nivel 2000!", - "dontTalkAboutTheManaphyEggIncident": "¡No se habla del Incidente Manaphy!", "alsoTryPokengine": "¡Prueba también Pokéngine!", "alsoTryEmeraldRogue": "¡Prueba también Emerald Rogue!", "alsoTryRadicalRed": "¡Prueba también Radical Red!", - "eeveeExpo": "¡Eevee Expo!", - "ynoproject": "¡YNOproject!", - "breedersInSpace": "Criadores... ¡EN EL ESPACIO!" + "eeveeExpo": "¡Eevee Expo!" } diff --git a/src/locales/fr/splash-messages.json b/src/locales/fr/splash-messages.json index 2ac85680e58..a4f65896f5e 100644 --- a/src/locales/fr/splash-messages.json +++ b/src/locales/fr/splash-messages.json @@ -2,9 +2,9 @@ "battlesWon": "{{count, number}} combats gagnés !", "joinTheDiscord": "Rejoins le Discord !", "infiniteLevels": "Niveaux infinis !", - "everythingStacks": "Tout se cumule !", + "everythingIsStackable": "Tout est cumulable*!", "optionalSaveScumming": "Optional Save Scumming !", - "biomes": "35 biomes !", + "biomes": "38 biomes !", "openSource": "Open Source !", "playWithSpeed": "Joue en vitesse x5 !", "liveBugTesting": "Tests de bugs en direct !", @@ -14,9 +14,9 @@ "infiniteFusionAtHome": "Infinite Fusion, chez vous !", "brokenEggMoves": "Des Capacités Œuf craquées !", "magnificent": "Magnifique !", - "mubstitute": "Mubstitute !", + "doPeopleReadThis": "Y’a vraiment des gens qui lisent ça ?", "thatsCrazy": "C’est une dinguerie !", - "oranceJuice": "Jus d’orange !", + "gottaCatchEmAll": "Attrapez-les tous !", "questionableBalancing": "Équilibrage douteux !", "coolShaders": "Cool shaders !", "aiFree": "Garanti sans IA !", @@ -25,12 +25,120 @@ "moreAddictiveThanIntended": "Plus addictif que prévu !", "mostlyConsistentSeeds": "Des seeds à peu près stables !", "achievementPointsDontDoAnything": "Les Points de Succès servent à rien !", - "youDoNotStartAtLevel": "Ne commence pas au Niveau 2000 !", - "dontTalkAboutTheManaphyEggIncident": "Ne parle pas de l’incident de l’Œuf de Manaphy !", + "nothingBeatsAJellyFilledDonut": "Les beignets à la confiture, il n’y a que ça de vrai !", + "dontTalkAboutTheTinkatonIncident": "Ne parle pas de l’incident de Forgelina !", "alsoTryPokengine": "Essaye aussi Pokéngine !", - "alsoTryEmeraldRogue": "Essaye aussi Emerald Rogue!", + "alsoTryEmeraldRogue": "Essaye aussi Emerald Rogue !", "alsoTryRadicalRed": "Essaye aussi Radical Red !", "eeveeExpo": "Eevee Expo !", - "ynoproject": "YNOproject !", - "breedersInSpace": "Des Éleveurs dans l’espace !" + "checkOutYnoproject": "Jette un œil au YNOproject !", + "breedersInSpace": "Des Éleveurs dans l’espace !", + "alsoTryPokemonUnbound": "Essaye aussi Pokémon Unbound !", + "tryTheJohtoDragonChallenge": "Essaye un challenge Dragon de Johto !", + "basicReadingAbilityRecommended": "Un niveau de lecture basique est nécessaire !", + "shoutoutsToTheArtists": "S/O aux artistes !", + "gamblingNotEncouraged": "Les jeux de hasard ne sont du tout encouragés !", + "dontForgetToTakeABreak": "N’oublie pas de faire des pauses !", + "wEvent": "W Event", + "ifItsNotAccurateItsAccurate": "Loi de la précision : Si inférieure à 100, alors 50.", + "everyLossIsProgressMade": "Chaque échec est une étape !", + "liveWoChienReaction": "Réaction en direct de Chongjian :", + "itsAFeatureNotABug": "C’est pas un bug, mais une feature !", + "theEggsAreNotForEating": "Merci de ne pas graille les Œufs !", + "7.8outOf10TooManyWaterBiomes": "7,8/10, Too Many Biomes aquatiques.", + "butNothingHappened": "Mais rien ne se passe !", + "thePowerOfScienceIsAmazing": "La technologie, c’est un truc de dingue !", + "freeToPlay": "Free to Play !", + "theresATimeAndPlaceForEverything": "Ce n’est pas le moment pour ça !", + "nowWithShinierShinies": "Avec des chormatiques encore plus chromatiques !", + "smilesGoForMiles": "Sans travail, pas de médaille !", + "certainlyNotDragonFree": "Plein de Dragon !", + "haveANiceDay": "Passe une bonne journée !", + "redacted": "[SUPPRIMÉ]", + "hi": "slt", + "transRights": "Trans Rights !", + "shinyOddsHigherThanYouThink": "Le taux des chromatiques est plus haut que tu le penses !", + "noFalseTrades": "Aucun écgane frauduleux !", + "notForProfit": "Aucun profit !", + "timeForYourDailyRun": "P’tit Défi du jour ?", + "moreEggsThanADaycare": "Plus qu’une Pension Pokémon !", + "disclaimerHarshSunDoesNotGiveVitaminD": "Avetissement : Un fort soleil NE donne PAS de Vitamine D !", + "whoNeedsAMap": "Une Carte ? Là où on va on a pas besoin… de Carte", + "luxrayIsNotADarkType": "Luxray n’est pas de type Ténèbres !", + "selfDestructiveEncounters": "Des rencontres Destructrices !", + "mostOptionsAreViable": "Presque tous les choix sont viables !", + "pokerogueMorse": ".--. --- -.- . .-. --- --. ..- .", + "smiley": ":)", + "beAwareOfPassives": "Ne sois pas passif, attention aux Passifs !", + "asSeenOnTheWorldWideWeb": "Vu sur les Internets !", + "vaultinVeluzas": "Mouah ha ha !", + "tooManyStarters": "Trop de starters !", + "checkTheWiki": "Jette un œil au Wiki !", + "winWithYourFavorites": "Gagnez avec vos Favoris !", + "alsoTryPokerogueWait": "Essaye aussi PokéRogue ! Oh, attends…", + "theWayISeeItKyogreIsSurrounded": "Tout ce que je vois, c’est que Kyogre est foutu…", + "tryOutHoneyGather": "Essaye Cherche Miel !", + "notForTheFaintOfHeart": "Pas pour les âmes sensibles !", + "p": "(P)", + "flipYourDeviceToEvolveInkay": "Retournez votre appareil pour faire évoluer Sepiatop !", + "inArceusWeTrust": "En Arceus nous croyons", + "whyDidTheTorchicCrossTheRoad": "Pourquoi le Poussifeu a-t-il traversé la route ?", + "goodLuck": "Bonne chance !", + "fuseWisely": "Fusionne avec sagesse !", + "compensation": "Dédomagement ?", + "prepareForTroubleAndMakeItDouble": "Nous sommes de retour ! Pour vous jouer un mauvais tour !", + "anEggForYourTroubles": "Un Œuf pour le dérangement ?", + "regirock": "ÜN ÜN ÜN", + "hereForAGoodTime": "Ici pour passer du bon temps ", + "getGoodOrDont": "Sois doué·e ! Ou pas !", + "checkTheSubreddit": "Jette un œil au Subreddit !", + "betterNerfGreninja": "Nerf Amphinobi !", + "inCaseOfUpdateClearYourCache": "En cas de MàJ, videz votre cache !", + "insertTextHere": "insérer texte ici", + "endingEndlessNotFound": "ending_endless not found", + "iLikeMyEggsVouchered": "J’aime les Œufs couponisés !", + "YOU": "TOI !", + "noAddedSugar": "Sans sucres ajoutés !", + "notSponsored": "Non-sponsorisé !", + "notRated": "Non évalué !", + "justOneMoreWaveMom": "Allez maman, encore une vague !", + "saltCured": "Salaisoné !", + "onlyOnPokerogueNet": "Seulement sur pokerogue.net !", + "pixelPerfection": "Pixel Perfect !", + "openSource": "Open Source !", + "probablyGood": "Plutôt OK !", + "itsAMonsterHouse": "C’est une Maison de monstres !", + "dontForgetYourPassword": "Oublie pas ton mot de passe !", + "tripleTripleTripleAxel": "Triple- Triple- Triple Axel !", + "questionExclamation": "?!", + "clownEncounters": "Rencontres de Clowns !", + "fullOfBerries": "Chargé en Baies !", + "limitsAreMeantToBeBrokenSometimes": "Les limites sont fait pour être dépassées !… Parfois…", + "keepItCasual": "Mets-toi à l’aise !", + "serversProbablyWorking": "Les serveurs fonctionnent probablement !", + "mew": "Mew n’est probablement pas sous le camion !", + "makeItRainAndYourProblemsGoAway": "Ruée d’Or pour résoudre tes problèmes !", + "customMusicTracks": "Quelques musiques originales !", + "youAreValid": "Tu es VALIDE !", + "number591IsLookingOff": "N° 591 s’est fait…", + "timeForYourDeliDelivery": "Cas d’oiseaux !", + "goodFirstImpression": "On a pas dit notre Dernier Mot !", + "iPreferRarerCandies": "Je préfère les Hyper Bonbons !", + "halloween": { + "pumpkabooAbout": "Pitrouill-ard !", + "mayContainSpiders": "TW Araignées !", + "spookyScarySkeledirge": "Spooky, Scary Skelénox !", + "gourgeistUsedTrickOrTreat": "Banshitrouye utilise Halloween !", + "letsSnuggleForever": "Patati-Patattrape !" + }, + "xmas": { + "happyHolidays": "Bonne fêtes !", + "delibirdSeason": "Saison du Cadoizo !", + "unaffilicatedWithDelibirdServices": "Non, on a rien à voir avec Cadoi-zon !", + "diamondsFromTheSky": "Diamonds from the sky !", + "holidayStylePikachuNotIncluded": "Pikachu Papa Noël non-inclus !" + }, + "newYears": { + "happyNewYear": "Bonne année !" + } } diff --git a/src/locales/it/splash-messages.json b/src/locales/it/splash-messages.json index d4b411241b6..77db51d80da 100644 --- a/src/locales/it/splash-messages.json +++ b/src/locales/it/splash-messages.json @@ -2,9 +2,9 @@ "battlesWon": "{{count, number}} Battaglie Vinte!", "joinTheDiscord": "Entra nel Discord!", "infiniteLevels": "Livelli Infiniti!", - "everythingStacks": "Tutto si impila!", + "everythingIsStackable": "Tutto si impila!", "optionalSaveScumming": "Salvataggi Facoltativi!", - "biomes": "35 Biomi!", + "biomes": "38 Biomi!", "openSource": "Open Source!", "playWithSpeed": "Gioca con la velocità aumentata di 5 volte!", "liveBugTesting": "Test dei Bug in Tempo Reale!", @@ -14,9 +14,9 @@ "infiniteFusionAtHome": "Fusioni Infinite a Casa!", "brokenEggMoves": "Mosse delle Uova Rotte!", "magnificent": "Magnifico!", - "mubstitute": "Mubstitute!", + "doPeopleReadThis": "Qualcuno legge sta roba?", "thatsCrazy": "È Pazzesco!", - "oranceJuice": "Succo d'Arancia!", + "gottaCatchEmAll": "Acchiappali tutti!", "questionableBalancing": "Bilanciamento Discutibile!", "coolShaders": "Shader fantastici!", "aiFree": "Senza Intelligenza Artificiale!", @@ -25,12 +25,120 @@ "moreAddictiveThanIntended": "Crea Dipendeza più del Dovuto!", "mostlyConsistentSeeds": "Seeds Consistenti!", "achievementPointsDontDoAnything": "I Punti Obiettivo non Fanno Nulla!", - "youDoNotStartAtLevel": "Non Cominci dal Livello 2000!", - "dontTalkAboutTheManaphyEggIncident": "Non Parlare dell'Incidente dell'Uovo di Manaphy!", + "nothingBeatsAJellyFilledDonut": "Niente di meglio delle polpette di riso!", + "dontTalkAboutTheTinkatonIncident": "Non si parla dell'incidente Tinkaton!", "alsoTryPokengine": "Prova anche Pokéngine!", "alsoTryEmeraldRogue": "Prova anche Emerald Rogue!", "alsoTryRadicalRed": "Prova anche Radical Red!", "eeveeExpo": "Eevee Expo!", - "ynoproject": "YNOproject!", - "breedersInSpace": "Allevapokémon nello spazio!" -} \ No newline at end of file + "checkOutYnoproject": "Dai un'occhiata a YNOproject!", + "breedersInSpace": "Allevapokémon nello spazio!", + "alsoTryPokemonUnbound": "Prova anche Pokemon Unbound!", + "tryTheJohtoDragonChallenge": "Tenta la sfida monotipo Drago Johto!", + "basicReadingAbilityRecommended": "Competenze basilari nella lettura consigliate!", + "shoutoutsToTheArtists": "Complimenti agli artisti!", + "gamblingNotEncouraged": "Non incoraggiamo al gioco d'azzardo!", + "dontForgetToTakeABreak": "Non dimenticarti di fare una pausa!", + "wEvent": "Bell'evento", + "ifItsNotAccurateItsAccurate": "Se non ha il 100% di precisione, ne ha il 50%.", + "everyLossIsProgressMade": "Ogni sconfitta è un insegnamento!", + "liveWoChienReaction": "Live Wo-Chien Reaction:", + "itsAFeatureNotABug": "È una meccanica, non un bug!", + "theEggsAreNotForEating": "Le uova non vanno mangiate!", + "7.8outOf10TooManyWaterBiomes": "7.8 su 10, troppi biomi acquatici.", + "butNothingHappened": "Ma non succede nulla!", + "thePowerOfScienceIsAmazing": "Il potere della scienza è incredibile!", + "freeToPlay": "Free To Play!", + "theresATimeAndPlaceForEverything": "C’è un luogo e un tempo per ogni cosa!", + "nowWithShinierShinies": "Ora con shiny cromatici!", + "smilesGoForMiles": "Smiles Go for Miles!", + "certainlyNotDragonFree": "Draghi inclusi!", + "haveANiceDay": "Buona giornata!", + "redacted": "[CENSURATO]", + "hi": "ciao", + "transRights": "Diritti trans!", + "shinyOddsHigherThanYouThink": "Tasso di shiny maggiore di quello che pensi!", + "noFalseTrades": "Senza scambi farlocchi!", + "notForProfit": "Senza profitto!", + "timeForYourDailyRun": "È l'ora della run giornaliera!", + "moreEggsThanADaycare": "Più uova di una pensione!", + "disclaimerHarshSunDoesNotGiveVitaminD": "Attenzione: la luce solare accecante NON dà vitamina C!", + "whoNeedsAMap": "Chi vuole una mappa?", + "luxrayIsNotADarkType": "Luxray non è un tipo buio!", + "selfDestructiveEncounters": "Incontri autodistruggenti!", + "mostOptionsAreViable": "Ci sono tante impostazioni!", + "pokerogueMorse": ".--. --- -.- . .-. --- --. ..- .", + "smiley": ":)", + "beAwareOfPassives": "Occhio alle passive!", + "asSeenOnTheWorldWideWeb": "Proprio come sul World-Wide Web!", + "vaultinVeluzas": "Blublub!", + "tooManyStarters": "Troppi starters!", + "checkTheWiki": "Dai un'occhiata alla Wiki!", + "winWithYourFavorites": "Vinci coi tuoi preferiti!", + "alsoTryPokerogueWait": "Prova anche PokéRogue! Aspe...", + "theWayISeeItKyogreIsSurrounded": "Per come la vedo io, Kyogre è circondato...", + "tryOutHoneyGather": "Prova Mielincetta!", + "notForTheFaintOfHeart": "Sconsigliato ai deboli di cuore!", + "p": "(P)", + "flipYourDeviceToEvolveInkay": "Gira il tuo dispositivo per evolvere Inkay!", + "inArceusWeTrust": "Rendiamo grazie ad Arceus", + "whyDidTheTorchicCrossTheRoad": "Perché un Torchic attraversa la strada?", + "goodLuck": "Buona fortuna!", + "fuseWisely": "Fondi saggiamente!", + "compensation": "Ricompensa?", + "prepareForTroubleAndMakeItDouble": "Preparatevi a passare dei guai! Dei guai molto grossi!", + "anEggForYourTroubles": "Vuoi un ovetto?", + "regirock": "ÜN ÜN ÜN", + "hereForAGoodTime": "Siamo qui per divertirci!", + "getGoodOrDont": "Impara a giocare! O non farlo!", + "checkTheSubreddit": "Dai un'occhiata al subreddit!", + "betterNerfGreninja": "Nerfate Greninja!", + "inCaseOfUpdateClearYourCache": "In caso di aggiornamento, ripulite la cache!", + "insertTextHere": "inserire testo", + "endingEndlessNotFound": "ending_endless not found", + "iLikeMyEggsVouchered": "Le uova le gradisco bigliettizzate!", + "YOU": "TU!", + "noAddedSugar": "Senza zuccheri aggiunti!", + "notSponsored": "Non sponsorizzato!", + "notRated": "Non valutato!", + "justOneMoreWaveMom": "Dai mamma, solo un'altra onda!", + "saltCured": "Sotto sale!", + "onlyOnPokerogueNet": "Solo su pokerogue.net!", + "pixelPerfection": "Perfezione Pixel!", + "openSource": "Open Source!", + "probablyGood": "Probabilmente bello!", + "itsAMonsterHouse": "Covo di Pokémon!", + "dontForgetYourPassword": "Non dimenticarti la password!", + "tripleTripleTripleAxel": "Triplo- Triplo- Triplo Axel!", + "questionExclamation": "?!", + "clownEncounters": "Incontri coi pagliacci!", + "fullOfBerries": "Pieno di bacche!", + "limitsAreMeantToBeBrokenSometimes": "I limiti vanno infranti, a volte!", + "keepItCasual": "Rimani casual!", + "serversProbablyWorking": "Servers potenzialmente funzionanti!", + "mew": "Mew NON è sotto al camion!", + "makeItRainAndYourProblemsGoAway": "Corsa all'oro, alla faccia loro!", + "customMusicTracks": "Musiche custom!", + "youAreValid": "Sei valido!", + "number591IsLookingOff": "Il numero 591 non me la dice giusta...", + "timeForYourDeliDelivery": "Ora della coco-consegna!", + "goodFirstImpression": "Pronto alla Schermaglia!", + "iPreferRarerCandies": "Preferisco le caramelle più rare!", + "halloween": { + "pumpkabooAbout": "Evviva i Pumpkaboo!", + "mayContainSpiders": "Potrebbe contenere traccia di ragni!", + "spookyScarySkeledirge": "Skeledirge, spaventosi ed inquietanti!", + "gourgeistUsedTrickOrTreat": "Gourgeist usa dolcetto o scherzetto!", + "letsSnuggleForever": "Dolcesacco di botte!" + }, + "xmas": { + "happyHolidays": "Buone vacanze!", + "delibirdSeason": "La stagione di Delibird!", + "unaffilicatedWithDelibirdServices": "Non affiliati a Delibird Services!", + "diamondsFromTheSky": "Diamanti dal cielo!", + "holidayStylePikachuNotIncluded": "Pikachu stile vacanziero non incluso!" + }, + "newYears": { + "happyNewYear": "Buon anno!" + } +} diff --git a/src/locales/ja/splash-messages.json b/src/locales/ja/splash-messages.json index db3948fa2f1..552faab1f68 100644 --- a/src/locales/ja/splash-messages.json +++ b/src/locales/ja/splash-messages.json @@ -1,36 +1,3 @@ { - "battlesWon": "勝ったバトル:{{count, number}}回!", - "joinTheDiscord": "Join the Discord!", - "infiniteLevels": "Infinite Levels!", - "everythingStacks": "Everything Stacks!", - "optionalSaveScumming": "Optional Save Scumming!", - "biomes": "35 Biomes!", - "openSource": "Open Source!", - "playWithSpeed": "Play with 5x Speed!", - "liveBugTesting": "Live Bug Testing!", - "heavyInfluence": "Heavy RoR2 Influence!", - "pokemonRiskAndPokemonRain": "Pokémon Risk and Pokémon Rain!", - "nowWithMoreSalt": "Now with 33% More Salt!", - "infiniteFusionAtHome": "Infinite Fusion at Home!", - "brokenEggMoves": "Broken Egg Moves!", - "magnificent": "Magnificent!", - "mubstitute": "Mubstitute!", - "thatsCrazy": "That's Crazy!", - "oranceJuice": "Orance Juice!", - "questionableBalancing": "Questionable Balancing!", - "coolShaders": "Cool Shaders!", - "aiFree": "AI-Free!", - "suddenDifficultySpikes": "Sudden Difficulty Spikes!", - "basedOnAnUnfinishedFlashGame": "Based on an Unfinished Flash Game!", - "moreAddictiveThanIntended": "More Addictive than Intended!", - "mostlyConsistentSeeds": "Mostly Consistent Seeds!", - "achievementPointsDontDoAnything": "Achievement Points Don't Do Anything!", - "youDoNotStartAtLevel": "You Do Not Start at Level 2000!", - "dontTalkAboutTheManaphyEggIncident": "Don't Talk About the Manaphy Egg Incident!", - "alsoTryPokengine": "Also Try Pokéngine!", - "alsoTryEmeraldRogue": "Also Try Emerald Rogue!", - "alsoTryRadicalRed": "Also Try Radical Red!", - "eeveeExpo": "Eevee Expo!", - "ynoproject": "YNOproject!", - "breedersInSpace": "Breeders in space!" + "battlesWon": "勝ったバトル:{{count, number}}回!" } diff --git a/src/locales/ko/splash-messages.json b/src/locales/ko/splash-messages.json index 1e89713ccde..3748ba214d9 100644 --- a/src/locales/ko/splash-messages.json +++ b/src/locales/ko/splash-messages.json @@ -2,9 +2,8 @@ "battlesWon": "{{count, number}} 전투에서 승리하세요!", "joinTheDiscord": "디스코드에 가입하세요!", "infiniteLevels": "무한한 레벨!", - "everythingStacks": "모든 것이 누적됩니다!", "optionalSaveScumming": "원한다면 세이브 노가다를!", - "biomes": "35개의 지역!", + "biomes": "38개의 지역!", "openSource": "오픈소스!", "playWithSpeed": "5배속으로 플레이해봐요!", "liveBugTesting": "라이브 버그 테스트!", @@ -13,24 +12,16 @@ "nowWithMoreSalt": "이제 33% 더 과몰입 가능!", "infiniteFusionAtHome": "집에서 인피니트 퓨전을 즐겨보세요!", "brokenEggMoves": "알기술까기!", - "magnificent": "Magnificent!", - "mubstitute": "Mubstitute!", "thatsCrazy": "미쳤습니다!", - "oranceJuice": "오렌지 쥬스!", "questionableBalancing": "의심스러운 밸런싱!", "coolShaders": "쿨한 셰이더!", - "aiFree": "AI-Free!", "suddenDifficultySpikes": "돌연사 가능!", "basedOnAnUnfinishedFlashGame": "무한 플래시게임 기반!", "moreAddictiveThanIntended": "기획보다 중독적이에요!", "mostlyConsistentSeeds": "일관성있는 랜덤 시드!", "achievementPointsDontDoAnything": "업적 포인트는 아무것도 하지 않습니다!", - "youDoNotStartAtLevel": "레벨 2000에서 시작하지 않아요!", - "dontTalkAboutTheManaphyEggIncident": "마나피 알 사건에 대해선 이야기하지 맙시다!", "alsoTryPokengine": "Pokéngine도 해봐요!", "alsoTryEmeraldRogue": "Emerald Rogue도 해봐요!", "alsoTryRadicalRed": "Radical Red도 해봐요!", - "eeveeExpo": "Eevee Expo!", - "ynoproject": "YNOproject!", "breedersInSpace": "충격!우주에 브리더 진짜 계심ㄷㄷ" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/splash-messages.json b/src/locales/pt_BR/splash-messages.json index 174dc5e4092..e586e1e5216 100644 --- a/src/locales/pt_BR/splash-messages.json +++ b/src/locales/pt_BR/splash-messages.json @@ -2,9 +2,9 @@ "battlesWon": "{{count, number}} Batalhas Ganhas!", "joinTheDiscord": "Junte-se ao Discord!", "infiniteLevels": "Níveis Infinitos!", - "everythingStacks": "Tudo Acumula!", + "everythingIsStackable": "Tudo Pode Ser Acumulado*!", "optionalSaveScumming": "Você Pode Dar F5!", - "biomes": "35 Biomas!", + "biomes": "38 Biomas!", "openSource": "Código Aberto!", "playWithSpeed": "Jogue na Velocidade 5x!", "liveBugTesting": "Testamos os Bugs Ao Vivo!", @@ -12,11 +12,11 @@ "pokemonRiskAndPokemonRain": "Pokémon Risk e Pokémon Rain!", "nowWithMoreSalt": "O Choro é Livre!", "infiniteFusionAtHome": "Infinite Fusion da Shopee!", - "brokenEggMoves": "Mov. de Ovo Apelões!", + "brokenEggMoves": "Movimentos de Ovo Apelões!", "magnificent": "Magnífico!", - "mubstitute": "Mubstituto!", + "doPeopleReadThis": "As Pessoas Leem Isso?", "thatsCrazy": "Que Doidera!", - "oranceJuice": "Suco de Laranja!", + "gottaCatchEmAll": "Temos Que Pegar!", "questionableBalancing": "Balanceamento Questionável!", "coolShaders": "Shader Maneiros!", "aiFree": "Livre de IA!", @@ -25,12 +25,120 @@ "moreAddictiveThanIntended": "Mais Viciante do que Planejado!", "mostlyConsistentSeeds": "Consistente (na Maioria das Vezes)!", "achievementPointsDontDoAnything": "Pontos de Conquista Não Fazem Nada!", - "youDoNotStartAtLevel": "Você Não Começa no Nível 2000!", - "dontTalkAboutTheManaphyEggIncident": "Não Fale do Incidente do Ovo de Manaphy!", - "alsoTryPokengine": "Também Jogue Pokéngine!", - "alsoTryEmeraldRogue": "Também Jogue Emerald Rogue!", - "alsoTryRadicalRed": "Também Jogue Radical Red!", + "nothingBeatsAJellyFilledDonut": "Nada Melhor Que Um Donut Recheado Com Geleia!", + "dontTalkAboutTheTinkatonIncident": "Não Fale Sobre o Incidente do Tinkaton!", + "alsoTryPokengine": "Jogue Também Pokéngine!", + "alsoTryEmeraldRogue": "Jogue Também Emerald Rogue!", + "alsoTryRadicalRed": "Jogue Também Radical Red!", "eeveeExpo": "Eevee Expo!", - "ynoproject": "YNOproject!", - "breedersInSpace": "Criadores de Pokémon no Espaço!" + "checkOutYnoproject": "Confira o YNOproject!", + "breedersInSpace": "Criadores de Pokémon no Espaço!", + "alsoTryPokemonUnbound": "Jogue Tambénm Pokémon Unbound!", + "tryTheJohtoDragonChallenge": "Experimente o Desafio do Dragão de Johto!", + "basicReadingAbilityRecommended": "Habilidade de Leitura Básica Recomendada!", + "shoutoutsToTheArtists": "Agradecimentos aos Artistas!", + "gamblingNotEncouraged": "Não Incentivamos o Jogo do Raikouzinho!", + "dontForgetToTakeABreak": "Não Se Esqueça de Fazer uma Pausa!", + "wEvent": "Só Jogamos Nos Eventos Shiny!", + "ifItsNotAccurateItsAccurate": "Se Não For 100% de Chance, é 50%.", + "everyLossIsProgressMade": "Toda Derrota é Progresso Feito!", + "liveWoChienReaction": "Reação Ao-Vivo de Wo-Chien:", + "itsAFeatureNotABug": "É Uma Funcionalidade, Não um Bug!", + "theEggsAreNotForEating": "Os Ovos Não São Para Comer!", + "7.8outOf10TooManyWaterBiomes": "7.8 de 10, Muitos Biomas de Água.", + "butNothingHappened": "Mas Nada Aconteceu!", + "thePowerOfScienceIsAmazing": "O Poder da Ciência é Incrível!", + "freeToPlay": "Jogue de Graça!", + "theresATimeAndPlaceForEverything": "Existe Hora e Lugar Pra Tudo!", + "nowWithShinierShinies": "Agora Com Shinies Mais Shinies!", + "smilesGoForMiles": "Sorriso Maroto!", + "certainlyNotDragonFree": "Certamente Não é Livre de Dragões!", + "haveANiceDay": "Tenha um Bom dia!", + "redacted": "Nós Não Falamos Espanhol", + "hi": "oi", + "transRights": "Direitos Trans!", + "shinyOddsHigherThanYouThink": "Chances de Shiny Maiores do Que Você Pensa!", + "noFalseTrades": "Sem Falsas Trocas!", + "notForProfit": "Sem Fins Lucrativos!", + "timeForYourDailyRun": "Hora do Seu Desafio Diário!", + "moreEggsThanADaycare": "Mais Ovos do Que Uma Creche!", + "disclaimerHarshSunDoesNotGiveVitaminD": "Aviso: Sol Intenso NÃO Fornece Vitamina D!", + "whoNeedsAMap": "Quem Precisa de Um Mapa?", + "luxrayIsNotADarkType": "Luxray Não é Tipo Sombrio!", + "selfDestructiveEncounters": "Encontros Autodestrutivos!", + "mostOptionsAreViable": "A Maioria das Opções é Viável!", + "pokerogueMorse": ".--. --- -.- . .-. --- --. ..- .", + "smiley": ":)", + "beAwareOfPassives": "Cuidado Com as Passivas!", + "asSeenOnTheWorldWideWeb": "Como Visto na World-Wide Web!", + "vaultinVeluzas": "Vaultin' Veluza!", + "tooManyStarters": "Muitos Iniciais!", + "checkTheWiki": "Confira a Wiki!", + "winWithYourFavorites": "Vença Com os Seus Favoritos!", + "alsoTryPokerogueWait": "Jogue Também PokéRogue! Pera...", + "theWayISeeItKyogreIsSurrounded": "Pelo Que Vejo, Kyogre Está Cercado...", + "tryOutHoneyGather": "Teste Honey Gather!", + "notForTheFaintOfHeart": "Não Para os Fracos de Coração!", + "p": "(P)", + "flipYourDeviceToEvolveInkay": "Vire Sua Tela Para Evoluir Inkay!", + "inArceusWeTrust": "Tudo no Tempo de Arceus", + "whyDidTheTorchicCrossTheRoad": "Por que Torchic Atravessou a Rua?", + "goodLuck": "Boa Sorte!", + "fuseWisely": "Funda Com Sabedoria!", + "compensation": "Compensação?", + "prepareForTroubleAndMakeItDouble": "Prepare-se Para Encrenca! Encrenca em Dobro!", + "anEggForYourTroubles": "Um Ovo Pelos Seus Problemas?", + "regirock": "ÜN ÜN ÜN", + "hereForAGoodTime": "Aqui Para Curtir!", + "getGoodOrDont": "Melhore! Ou Não!", + "checkTheSubreddit": "Confira o Subreddit!", + "betterNerfGreninja": "É Melhor Nerfar o Greninja!", + "inCaseOfUpdateClearYourCache": "No Caso de Atualizações, Limpe Seu Cache!", + "insertTextHere": "insira texto aqui", + "endingEndlessNotFound": "fim_infinito não encontrado", + "iLikeMyEggsVouchered": "Eu Gosto dos Meus Ovos!", + "YOU": "VOCÊ!", + "noAddedSugar": "Sem Adição de Açúcar!", + "notSponsored": "Não Somos Patrocinados!", + "notRated": "Sem Classificação Indicativa!", + "justOneMoreWaveMom": "Só Mais Uma Onda, Mãe!", + "saltCured": "Curado no Sal!", + "onlyOnPokerogueNet": "Somente em pokerogue.net!", + "pixelPerfection": "Perfeição em Pixels!", + "openSource": "Código Aberto!", + "probablyGood": "Provavelmente Bom!", + "itsAMonsterHouse": "É uma Casa Monstro!", + "dontForgetYourPassword": "Não Esqueça Sua Senha!", + "tripleTripleTripleAxel": "Triple- Triple- Triple Axel!", + "questionExclamation": "?!", + "clownEncounters": "Encontre Palhaços!", + "fullOfBerries": "Cheio de Frutas!", + "limitsAreMeantToBeBrokenSometimes": "Limites São Feitos Para Serem Quebrados, Às Vezes!", + "keepItCasual": "É Só um Lance!", + "serversProbablyWorking": "Servidores Provavelmente Funcionando!", + "mew": "Mew Provavelmente Não Está Debaixo de Um Caminhão!", + "makeItRainAndYourProblemsGoAway": "Make it Rain e Seus Problemas Somem!", + "customMusicTracks": "Trilha Sonora Customizada!", + "youAreValid": "Você é Válido!", + "number591IsLookingOff": "Número 591 Está Um Pouco...", + "timeForYourDeliDelivery": "Hora da Sua Deli-Entrega!", + "goodFirstImpression": "Esperamos Ter Deixado uma Boa First Impression!", + "iPreferRarerCandies": "Eu Prefiro Doces Raríssimos!", + "halloween": { + "pumpkabooAbout": "Pumpkaboo à Vista!", + "mayContainSpiders": "Pode Conter Aranhas!", + "spookyScarySkeledirge": "Spooky, Scary Skeledirge!", + "gourgeistUsedTrickOrTreat": "Gourgeist Usou Trick-or-Treat!", + "letsSnuggleForever": "Let's Snuggle Forever!" + }, + "xmas": { + "happyHolidays": "Boas Festas!", + "delibirdSeason": "Temporada de Delibird!", + "unaffilicatedWithDelibirdServices": "Não Afiliado Com Serviços Delibird!", + "diamondsFromTheSky": "Diamantes do Céu!", + "holidayStylePikachuNotIncluded": "Pikachu no Estilo de Feriado Não Incluso!" + }, + "newYears": { + "happyNewYear": "Feliz Ano Novo!" + } } diff --git a/src/locales/zh_CN/splash-messages.json b/src/locales/zh_CN/splash-messages.json index 24981513afe..b929662718f 100644 --- a/src/locales/zh_CN/splash-messages.json +++ b/src/locales/zh_CN/splash-messages.json @@ -2,9 +2,8 @@ "battlesWon": "{{count, number}} 场胜利!", "joinTheDiscord": "加入Discord!", "infiniteLevels": "等级无限!", - "everythingStacks": "道具全部叠加!", "optionalSaveScumming": "可用SL大法!", - "biomes": "35种地区!", + "biomes": "38种地区!", "openSource": "开源!", "playWithSpeed": "请五倍速游玩!", "liveBugTesting": "随时修复BUG!", @@ -14,9 +13,7 @@ "infiniteFusionAtHome": "无限融合家庭版!", "brokenEggMoves": "超模的蛋招式!", "magnificent": "华丽!", - "mubstitute": "替身!", "thatsCrazy": "疯狂!", - "oranceJuice": "橙汁!", "questionableBalancing": "游戏平衡性存疑!", "coolShaders": "炫酷的配色!", "aiFree": "不含AI!", @@ -25,12 +22,9 @@ "moreAddictiveThanIntended": "比你想象的更上瘾!", "mostlyConsistentSeeds": "随机数种子基本固定!", "achievementPointsDontDoAnything": "成就点数没有任何用处!", - "youDoNotStartAtLevel": "你不能第一关就改个2000级!", - "dontTalkAboutTheManaphyEggIncident": "别再提玛纳霏蛋事件了!", "alsoTryPokengine": "也玩玩看Pokéngine!", "alsoTryEmeraldRogue": "也玩玩看绿宝石肉鸽!", "alsoTryRadicalRed": "也玩玩看激进红!", "eeveeExpo": "伊布博览会!", - "ynoproject": "Yume Nikki 页游项目!", "breedersInSpace": "饲养员也能上太空?" } diff --git a/src/locales/zh_TW/splash-messages.json b/src/locales/zh_TW/splash-messages.json index 60b03549c2f..8ae0f44a673 100644 --- a/src/locales/zh_TW/splash-messages.json +++ b/src/locales/zh_TW/splash-messages.json @@ -2,9 +2,8 @@ "battlesWon": "{{count, number}} 勝利場數!", "joinTheDiscord": "加入Discord!", "infiniteLevels": "無限等級!", - "everythingStacks": "所有效果都能疊加!", "optionalSaveScumming": "可選的存檔重刷!", - "biomes": "35種生態區!", + "biomes": "38種生態區!", "openSource": "開源!", "playWithSpeed": "以5倍速度遊玩!", "liveBugTesting": "即時漏洞測試!", @@ -14,9 +13,7 @@ "infiniteFusionAtHome": "在家無限融合!", "brokenEggMoves": "破損的蛋招式!", "magnificent": "壯麗!", - "mubstitute": "替補!", "thatsCrazy": "真是瘋狂!", - "oranceJuice": "橙汁!", "questionableBalancing": "值得質疑的平衡性!", "coolShaders": "酷炫的著色器!", "aiFree": "無AI!", @@ -25,12 +22,9 @@ "moreAddictiveThanIntended": "比預期更上癮!", "mostlyConsistentSeeds": "大多數情況下一致的種子!", "achievementPointsDontDoAnything": "成就點數沒有任何用處!", - "youDoNotStartAtLevel": "你不會從2000級開始!", - "dontTalkAboutTheManaphyEggIncident": "別提那個瑪納霏蛋事件!", "alsoTryPokengine": "也試試Pokéngine!", "alsoTryEmeraldRogue": "也試試翡翠流氓!", "alsoTryRadicalRed": "也試試激進紅!", "eeveeExpo": "伊布博覽會!", - "ynoproject": "YNO專案!", "breedersInSpace": "飼養員也能上太空?" } From 9f31e36d2410a665e07ad8ba9336e14957cf866f Mon Sep 17 00:00:00 2001 From: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> Date: Thu, 26 Sep 2024 18:43:12 +0200 Subject: [PATCH 09/10] [Beta][Bug] Rename files so it load the correct status file in languages with a - (#4450) --- .../{statuses_ca_ES.json => statuses_ca-ES.json} | 0 .../{statuses_ca_ES.png => statuses_ca-ES.png} | Bin .../{statuses_pt_BR.json => statuses_pt-BR.json} | 0 .../{statuses_pt_BR.png => statuses_pt-BR.png} | Bin .../{statuses_zh_CN.json => statuses_zh-CN.json} | 0 .../{statuses_zh_CN.png => statuses_zh-CN.png} | Bin .../{statuses_zh_TW.json => statuses_zh-TW.json} | 0 .../{statuses_zh_TW.png => statuses_zh-TW.png} | Bin 8 files changed, 0 insertions(+), 0 deletions(-) rename public/images/{statuses_ca_ES.json => statuses_ca-ES.json} (100%) rename public/images/{statuses_ca_ES.png => statuses_ca-ES.png} (100%) rename public/images/{statuses_pt_BR.json => statuses_pt-BR.json} (100%) rename public/images/{statuses_pt_BR.png => statuses_pt-BR.png} (100%) rename public/images/{statuses_zh_CN.json => statuses_zh-CN.json} (100%) rename public/images/{statuses_zh_CN.png => statuses_zh-CN.png} (100%) rename public/images/{statuses_zh_TW.json => statuses_zh-TW.json} (100%) rename public/images/{statuses_zh_TW.png => statuses_zh-TW.png} (100%) diff --git a/public/images/statuses_ca_ES.json b/public/images/statuses_ca-ES.json similarity index 100% rename from public/images/statuses_ca_ES.json rename to public/images/statuses_ca-ES.json diff --git a/public/images/statuses_ca_ES.png b/public/images/statuses_ca-ES.png similarity index 100% rename from public/images/statuses_ca_ES.png rename to public/images/statuses_ca-ES.png diff --git a/public/images/statuses_pt_BR.json b/public/images/statuses_pt-BR.json similarity index 100% rename from public/images/statuses_pt_BR.json rename to public/images/statuses_pt-BR.json diff --git a/public/images/statuses_pt_BR.png b/public/images/statuses_pt-BR.png similarity index 100% rename from public/images/statuses_pt_BR.png rename to public/images/statuses_pt-BR.png diff --git a/public/images/statuses_zh_CN.json b/public/images/statuses_zh-CN.json similarity index 100% rename from public/images/statuses_zh_CN.json rename to public/images/statuses_zh-CN.json diff --git a/public/images/statuses_zh_CN.png b/public/images/statuses_zh-CN.png similarity index 100% rename from public/images/statuses_zh_CN.png rename to public/images/statuses_zh-CN.png diff --git a/public/images/statuses_zh_TW.json b/public/images/statuses_zh-TW.json similarity index 100% rename from public/images/statuses_zh_TW.json rename to public/images/statuses_zh-TW.json diff --git a/public/images/statuses_zh_TW.png b/public/images/statuses_zh-TW.png similarity index 100% rename from public/images/statuses_zh_TW.png rename to public/images/statuses_zh-TW.png From cb27d32fe5aed247baa2056168651a80b86d7c90 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Thu, 26 Sep 2024 21:34:06 +0200 Subject: [PATCH 10/10] [Localization] Tiny French typos (#4452) * Update part-timer-dialogue.json * Update an-offer-you-cant-refuse-dialogue.json --- .../mystery-encounters/an-offer-you-cant-refuse-dialogue.json | 2 +- src/locales/fr/mystery-encounters/part-timer-dialogue.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locales/fr/mystery-encounters/an-offer-you-cant-refuse-dialogue.json b/src/locales/fr/mystery-encounters/an-offer-you-cant-refuse-dialogue.json index 1df9288981f..0ed54bb1eed 100644 --- a/src/locales/fr/mystery-encounters/an-offer-you-cant-refuse-dialogue.json +++ b/src/locales/fr/mystery-encounters/an-offer-you-cant-refuse-dialogue.json @@ -1,7 +1,7 @@ { "intro": "Un jeune garçon aux airs très bourgeois vous arrête.", "speaker": "Richard", - "intro_dialogue": "Bonchour-haann !$Je ne puis carrément pas ignorer que votre\n{{strongestPokemon}} m’a l’air fa-bu-leux-han !$J’ai toujours désiré posséder un tel Pokémon !$Je peux vous payer grassement,\nainsi que vous donner petite babiole-han !", + "intro_dialogue": "Bonchour-haann !$Je ne puis carrément pas ignorer que votre\n{{strongestPokemon}} m’a l’air fa-bu-leux-han !$J’ai toujours désiré posséder un tel Pokémon !$Je peux vous payer grassement,\nainsi que vous donner une petite babiole-han !", "title": "L’affaire du siècle", "description": "Un fils à papa vous offre un @[TOOLTIP_TITLE]{Charme Chroma} et {{price, money}} en échange de votre {{strongestPokemon}} !\n\nÇa semble être une bonne affaire, mais pourriez-vous supporter de priver votre équipe d’un tel atout ?", "query": "Que voulez-vous faire ?", diff --git a/src/locales/fr/mystery-encounters/part-timer-dialogue.json b/src/locales/fr/mystery-encounters/part-timer-dialogue.json index 88bb68df03e..dda680e861a 100644 --- a/src/locales/fr/mystery-encounters/part-timer-dialogue.json +++ b/src/locales/fr/mystery-encounters/part-timer-dialogue.json @@ -26,6 +26,6 @@ }, "job_complete_good": "Merci pour votre aide !\nVotre {{selectedPokemon}} nous a été d’un grand renfort !$Voici votre salaire.", "job_complete_bad": "Votre {{selectedPokemon}} nous a plutôt bien aidé !$Voici votre salaire.", - "pokemon_tired": "Votre {{selectedPokemon}} est épuisé !\nLes PP de toutes ses capacités baissent de 2 !", + "pokemon_tired": "Votre {{selectedPokemon}} est épuisé !\nLes PP de toutes ses capacités baissent à 2 !", "outro": "Reviens nous aider à l’occasion !" }