diff --git a/public/images/pokemon/exp/865.json b/public/images/pokemon/exp/865.json index 16dcd426cb1..b204a053406 100644 --- a/public/images/pokemon/exp/865.json +++ b/public/images/pokemon/exp/865.json @@ -4,639 +4,1143 @@ "image": "865.png", "format": "RGBA8888", "size": { - "w": 400, - "h": 400 + "w": 285, + "h": 285 }, "scale": 1, "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 111 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 111 - }, - "frame": { - "x": 0, - "y": 0, - "w": 80, - "h": 111 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 111 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 111 - }, - "frame": { - "x": 0, - "y": 0, - "w": 80, - "h": 111 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 111 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 111 - }, - "frame": { - "x": 0, - "y": 0, - "w": 80, - "h": 111 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 111 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 111 - }, - "frame": { - "x": 0, - "y": 111, - "w": 80, - "h": 111 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 111 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 111 - }, - "frame": { - "x": 0, - "y": 222, - "w": 80, - "h": 111 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 111 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 111 - }, - "frame": { - "x": 0, - "y": 222, - "w": 80, - "h": 111 - } - }, { "filename": "0004.png", "rotated": false, - "trimmed": false, + "trimmed": true, "sourceSize": { - "w": 80, - "h": 111 + "w": 82, + "h": 96 }, "spriteSourceSize": { - "x": 0, + "x": 5, "y": 0, - "w": 80, - "h": 111 + "w": 77, + "h": 96 }, "frame": { - "x": 80, - "y": 0, - "w": 80, - "h": 111 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 111 - }, - "spriteSourceSize": { "x": 0, "y": 0, - "w": 80, - "h": 111 - }, - "frame": { - "x": 80, - "y": 0, - "w": 80, - "h": 111 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 111 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 111 - }, - "frame": { - "x": 80, - "y": 0, - "w": 80, - "h": 111 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 111 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 111 - }, - "frame": { - "x": 160, - "y": 0, - "w": 80, - "h": 111 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 111 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 111 - }, - "frame": { - "x": 240, - "y": 0, - "w": 80, - "h": 111 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 111 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 111 - }, - "frame": { - "x": 320, - "y": 0, - "w": 80, - "h": 111 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 111 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 111 - }, - "frame": { - "x": 320, - "y": 0, - "w": 80, - "h": 111 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 111 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 111 - }, - "frame": { - "x": 320, - "y": 0, - "w": 80, - "h": 111 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 111 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 111 - }, - "frame": { - "x": 80, - "y": 111, - "w": 80, - "h": 111 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 111 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 111 - }, - "frame": { - "x": 80, - "y": 111, - "w": 80, - "h": 111 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 111 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 111 - }, - "frame": { - "x": 80, - "y": 111, - "w": 80, - "h": 111 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 111 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 111 - }, - "frame": { - "x": 80, - "y": 222, - "w": 80, - "h": 111 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 111 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 111 - }, - "frame": { - "x": 80, - "y": 222, - "w": 80, - "h": 111 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 111 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 111 - }, - "frame": { - "x": 80, - "y": 222, - "w": 80, - "h": 111 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 111 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 111 - }, - "frame": { - "x": 160, - "y": 111, - "w": 80, - "h": 111 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 111 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 111 - }, - "frame": { - "x": 160, - "y": 111, - "w": 80, - "h": 111 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 111 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 111 - }, - "frame": { - "x": 160, - "y": 111, - "w": 80, - "h": 111 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 111 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 111 - }, - "frame": { - "x": 160, - "y": 222, - "w": 80, - "h": 111 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 111 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 111 - }, - "frame": { - "x": 160, - "y": 222, - "w": 80, - "h": 111 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 111 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 111 - }, - "frame": { - "x": 240, - "y": 111, - "w": 80, - "h": 111 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 80, - "h": 111 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 80, - "h": 111 - }, - "frame": { - "x": 240, - "y": 111, - "w": 80, - "h": 111 + "w": 77, + "h": 96 } }, { "filename": "0016.png", "rotated": false, - "trimmed": false, + "trimmed": true, "sourceSize": { - "w": 80, - "h": 111 + "w": 82, + "h": 96 }, "spriteSourceSize": { - "x": 0, + "x": 5, "y": 0, - "w": 80, - "h": 111 + "w": 77, + "h": 96 }, "frame": { - "x": 320, - "y": 111, - "w": 80, - "h": 111 + "x": 0, + "y": 0, + "w": 77, + "h": 96 } }, { - "filename": "0026.png", + "filename": "0022.png", "rotated": false, - "trimmed": false, + "trimmed": true, "sourceSize": { - "w": 80, - "h": 111 + "w": 82, + "h": 96 }, "spriteSourceSize": { - "x": 0, + "x": 5, "y": 0, - "w": 80, - "h": 111 + "w": 77, + "h": 96 }, "frame": { - "x": 320, - "y": 111, - "w": 80, - "h": 111 + "x": 0, + "y": 0, + "w": 77, + "h": 96 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 5, + "y": 0, + "w": 77, + "h": 96 + }, + "frame": { + "x": 0, + "y": 0, + "w": 77, + "h": 96 + } + }, + { + "filename": "0052.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 5, + "y": 0, + "w": 77, + "h": 96 + }, + "frame": { + "x": 0, + "y": 0, + "w": 77, + "h": 96 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 5, + "y": 0, + "w": 77, + "h": 96 + }, + "frame": { + "x": 0, + "y": 96, + "w": 77, + "h": 96 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 1, + "y": 4, + "w": 79, + "h": 92 + }, + "frame": { + "x": 0, + "y": 192, + "w": 79, + "h": 92 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 1, + "y": 4, + "w": 79, + "h": 92 + }, + "frame": { + "x": 0, + "y": 192, + "w": 79, + "h": 92 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 1, + "y": 4, + "w": 79, + "h": 92 + }, + "frame": { + "x": 0, + "y": 192, + "w": 79, + "h": 92 + } + }, + { + "filename": "0036.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 1, + "y": 4, + "w": 79, + "h": 92 + }, + "frame": { + "x": 0, + "y": 192, + "w": 79, + "h": 92 + } + }, + { + "filename": "0038.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 1, + "y": 4, + "w": 79, + "h": 92 + }, + "frame": { + "x": 0, + "y": 192, + "w": 79, + "h": 92 + } + }, + { + "filename": "0054.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 1, + "y": 4, + "w": 79, + "h": 92 + }, + "frame": { + "x": 0, + "y": 192, + "w": 79, + "h": 92 + } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 10, + "y": 0, + "w": 72, + "h": 96 + }, + "frame": { + "x": 77, + "y": 0, + "w": 72, + "h": 96 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 10, + "y": 0, + "w": 72, + "h": 96 + }, + "frame": { + "x": 77, + "y": 0, + "w": 72, + "h": 96 } }, { "filename": "0023.png", "rotated": false, - "trimmed": false, + "trimmed": true, "sourceSize": { - "w": 80, - "h": 111 + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 10, + "y": 0, + "w": 72, + "h": 96 + }, + "frame": { + "x": 77, + "y": 0, + "w": 72, + "h": 96 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 10, + "y": 0, + "w": 72, + "h": 96 + }, + "frame": { + "x": 77, + "y": 0, + "w": 72, + "h": 96 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 10, + "y": 0, + "w": 72, + "h": 96 + }, + "frame": { + "x": 77, + "y": 0, + "w": 72, + "h": 96 + } + }, + { + "filename": "0051.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 10, + "y": 0, + "w": 72, + "h": 96 + }, + "frame": { + "x": 77, + "y": 0, + "w": 72, + "h": 96 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 19, + "y": 0, + "w": 63, + "h": 96 + }, + "frame": { + "x": 77, + "y": 96, + "w": 63, + "h": 96 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 19, + "y": 0, + "w": 63, + "h": 96 + }, + "frame": { + "x": 77, + "y": 96, + "w": 63, + "h": 96 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 19, + "y": 0, + "w": 63, + "h": 96 + }, + "frame": { + "x": 77, + "y": 96, + "w": 63, + "h": 96 + } + }, + { + "filename": "0032.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 19, + "y": 0, + "w": 63, + "h": 96 + }, + "frame": { + "x": 77, + "y": 96, + "w": 63, + "h": 96 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 19, + "y": 0, + "w": 63, + "h": 96 + }, + "frame": { + "x": 77, + "y": 96, + "w": 63, + "h": 96 + } + }, + { + "filename": "0050.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 19, + "y": 0, + "w": 63, + "h": 96 + }, + "frame": { + "x": 77, + "y": 96, + "w": 63, + "h": 96 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 }, "spriteSourceSize": { "x": 0, - "y": 0, - "w": 80, - "h": 111 + "y": 7, + "w": 79, + "h": 89 }, "frame": { - "x": 240, - "y": 222, - "w": 80, - "h": 111 + "x": 79, + "y": 192, + "w": 79, + "h": 89 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 79, + "h": 89 + }, + "frame": { + "x": 79, + "y": 192, + "w": 79, + "h": 89 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 0, + "y": 7, + "w": 79, + "h": 89 + }, + "frame": { + "x": 79, + "y": 192, + "w": 79, + "h": 89 + } + }, + { + "filename": "0007.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 21, + "y": 0, + "w": 59, + "h": 96 + }, + "frame": { + "x": 140, + "y": 96, + "w": 59, + "h": 96 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 21, + "y": 0, + "w": 59, + "h": 96 + }, + "frame": { + "x": 140, + "y": 96, + "w": 59, + "h": 96 + } + }, + { + "filename": "0025.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 21, + "y": 0, + "w": 59, + "h": 96 + }, + "frame": { + "x": 140, + "y": 96, + "w": 59, + "h": 96 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 21, + "y": 0, + "w": 59, + "h": 96 + }, + "frame": { + "x": 140, + "y": 96, + "w": 59, + "h": 96 + } + }, + { + "filename": "0043.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 21, + "y": 0, + "w": 59, + "h": 96 + }, + "frame": { + "x": 140, + "y": 96, + "w": 59, + "h": 96 + } + }, + { + "filename": "0049.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 21, + "y": 0, + "w": 59, + "h": 96 + }, + "frame": { + "x": 140, + "y": 96, + "w": 59, + "h": 96 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 20, + "y": 0, + "w": 58, + "h": 96 + }, + "frame": { + "x": 149, + "y": 0, + "w": 58, + "h": 96 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 20, + "y": 0, + "w": 58, + "h": 96 + }, + "frame": { + "x": 149, + "y": 0, + "w": 58, + "h": 96 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 20, + "y": 0, + "w": 58, + "h": 96 + }, + "frame": { + "x": 149, + "y": 0, + "w": 58, + "h": 96 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 20, + "y": 0, + "w": 58, + "h": 96 + }, + "frame": { + "x": 149, + "y": 0, + "w": 58, + "h": 96 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 20, + "y": 0, + "w": 58, + "h": 96 + }, + "frame": { + "x": 149, + "y": 0, + "w": 58, + "h": 96 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 20, + "y": 0, + "w": 58, + "h": 96 + }, + "frame": { + "x": 149, + "y": 0, + "w": 58, + "h": 96 + } + }, + { + "filename": "0003.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 79, + "h": 94 + }, + "frame": { + "x": 199, + "y": 96, + "w": 79, + "h": 94 + } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 79, + "h": 94 + }, + "frame": { + "x": 199, + "y": 96, + "w": 79, + "h": 94 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 79, + "h": 94 + }, + "frame": { + "x": 199, + "y": 96, + "w": 79, + "h": 94 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 79, + "h": 94 + }, + "frame": { + "x": 199, + "y": 96, + "w": 79, + "h": 94 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 79, + "h": 94 + }, + "frame": { + "x": 199, + "y": 96, + "w": 79, + "h": 94 + } + }, + { + "filename": "0053.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 2, + "y": 2, + "w": 79, + "h": 94 + }, + "frame": { + "x": 199, + "y": 96, + "w": 79, + "h": 94 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 22, + "y": 0, + "w": 52, + "h": 96 + }, + "frame": { + "x": 207, + "y": 0, + "w": 52, + "h": 96 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 22, + "y": 0, + "w": 52, + "h": 96 + }, + "frame": { + "x": 207, + "y": 0, + "w": 52, + "h": 96 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 22, + "y": 0, + "w": 52, + "h": 96 + }, + "frame": { + "x": 207, + "y": 0, + "w": 52, + "h": 96 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 22, + "y": 0, + "w": 52, + "h": 96 + }, + "frame": { + "x": 207, + "y": 0, + "w": 52, + "h": 96 + } + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 22, + "y": 0, + "w": 52, + "h": 96 + }, + "frame": { + "x": 207, + "y": 0, + "w": 52, + "h": 96 + } + }, + { + "filename": "0047.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 22, + "y": 0, + "w": 52, + "h": 96 + }, + "frame": { + "x": 207, + "y": 0, + "w": 52, + "h": 96 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 21, + "y": 1, + "w": 53, + "h": 95 + }, + "frame": { + "x": 199, + "y": 190, + "w": 53, + "h": 95 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 21, + "y": 1, + "w": 53, + "h": 95 + }, + "frame": { + "x": 199, + "y": 190, + "w": 53, + "h": 95 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 82, + "h": 96 + }, + "spriteSourceSize": { + "x": 21, + "y": 1, + "w": 53, + "h": 95 + }, + "frame": { + "x": 199, + "y": 190, + "w": 53, + "h": 95 } } ] @@ -645,6 +1149,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:dbbc7976911621e1d876d7e8ad805633:03f0391b0ea7e652408b22d3fc88c1f3:c7693032eafd40ba9028aebf1b6abbfa$" + "smartupdate": "$TexturePacker:SmartUpdate:a1464f05009f1be2ce8d1c3fd2ff65e3:98bcf35a71d7d1dceea57ad6e2a92474:c7693032eafd40ba9028aebf1b6abbfa$" } } diff --git a/public/images/pokemon/exp/865.png b/public/images/pokemon/exp/865.png index bf1e4a11d9f..8326e41ccc6 100644 Binary files a/public/images/pokemon/exp/865.png and b/public/images/pokemon/exp/865.png differ diff --git a/src/data/ability.ts b/src/data/ability.ts old mode 100755 new mode 100644 index 28784c07134..9e9c423623d --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -366,6 +366,10 @@ export class TypeImmunityAbAttr extends PreDefendAbAttr { return false; } + getImmuneType(): Type | null { + return this.immuneType; + } + override getCondition(): AbAttrCondition | null { return this.condition; } @@ -1798,6 +1802,61 @@ export class PostDefendStealHeldItemAbAttr extends PostDefendAbAttr { } } +/** + * Base class for defining all {@linkcode Ability} Attributes after a status effect has been set. + * @see {@linkcode applyPostSetStatus()}. + */ +export class PostSetStatusAbAttr extends AbAttr { + /** + * Does nothing after a status condition is set. + * @param pokemon {@linkcode Pokemon} that status condition was set on. + * @param sourcePokemon {@linkcode Pokemon} that that set the status condition. Is `null` if status was not set by a Pokemon. + * @param passive Whether this ability is a passive. + * @param effect {@linkcode StatusEffect} that was set. + * @param args Set of unique arguments needed by this attribute. + * @returns `true` if application of the ability succeeds. + */ + applyPostSetStatus(pokemon: Pokemon, sourcePokemon: Pokemon | null = null, passive: boolean, effect: StatusEffect, simulated: boolean, args: any[]) : boolean | Promise { + return false; + } +} + +/** + * If another Pokemon burns, paralyzes, poisons, or badly poisons this Pokemon, + * that Pokemon receives the same non-volatile status condition as part of this + * ability attribute. For Synchronize ability. + */ +export class SynchronizeStatusAbAttr extends PostSetStatusAbAttr { + /** + * If the `StatusEffect` that was set is Burn, Paralysis, Poison, or Toxic, and the status + * was set by a source Pokemon, set the source Pokemon's status to the same `StatusEffect`. + * @param pokemon {@linkcode Pokemon} that status condition was set on. + * @param sourcePokemon {@linkcode Pokemon} that that set the status condition. Is null if status was not set by a Pokemon. + * @param passive Whether this ability is a passive. + * @param effect {@linkcode StatusEffect} that was set. + * @param args Set of unique arguments needed by this attribute. + * @returns `true` if application of the ability succeeds. + */ + override applyPostSetStatus(pokemon: Pokemon, sourcePokemon: Pokemon | null = null, passive: boolean, effect: StatusEffect, simulated: boolean, args: any[]): boolean { + /** Synchronizable statuses */ + const syncStatuses = new Set([ + StatusEffect.BURN, + StatusEffect.PARALYSIS, + StatusEffect.POISON, + StatusEffect.TOXIC + ]); + + if (sourcePokemon && syncStatuses.has(effect)) { + if (!simulated) { + sourcePokemon.trySetStatus(effect, true, pokemon); + } + return true; + } + + return false; + } +} + export class PostVictoryAbAttr extends AbAttr { applyPostVictory(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean | Promise { return false; @@ -4241,6 +4300,10 @@ export class ReduceBerryUseThresholdAbAttr extends AbAttr { } } +/** + * Ability attribute used for abilites that change the ability owner's weight + * Used for Heavy Metal (doubling weight) and Light Metal (halving weight) + */ export class WeightMultiplierAbAttr extends AbAttr { private multiplier: integer; @@ -4677,6 +4740,10 @@ export function applyStatMultiplierAbAttrs(attrType: Constructor { return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyStatStage(pokemon, passive, simulated, stat, statValue, args), args); } +export function applyPostSetStatusAbAttrs(attrType: Constructor, + pokemon: Pokemon, effect: StatusEffect, sourcePokemon?: Pokemon | null, simulated: boolean = false, ...args: any[]): Promise { + return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPostSetStatus(pokemon, sourcePokemon, passive, effect, simulated, args), args, false, simulated); +} /** * Applies a field Stat multiplier attribute @@ -4907,7 +4974,8 @@ export function initAbilities() { .attr(EffectSporeAbAttr), new Ability(Abilities.SYNCHRONIZE, 3) .attr(SyncEncounterNatureAbAttr) - .unimplemented(), + .attr(SynchronizeStatusAbAttr) + .partial(), // interaction with psycho shift needs work, keeping to old Gen interaction for now new Ability(Abilities.CLEAR_BODY, 3) .attr(ProtectStatAbAttr) .ignorable(), @@ -5879,6 +5947,6 @@ export function initAbilities() { new Ability(Abilities.POISON_PUPPETEER, 9) .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) - .conditionalAttr(pokemon => pokemon.species.speciesId===Species.PECHARUNT, ConfusionOnStatusEffectAbAttr, StatusEffect.POISON, StatusEffect.TOXIC) + .attr(ConfusionOnStatusEffectAbAttr, StatusEffect.POISON, StatusEffect.TOXIC) ); } diff --git a/src/data/battle-anims.ts b/src/data/battle-anims.ts index eb0dce3bf0c..7c149ec54d5 100644 --- a/src/data/battle-anims.ts +++ b/src/data/battle-anims.ts @@ -915,12 +915,12 @@ export abstract class BattleAnim { this.srcLine = [ userFocusX, userFocusY, targetFocusX, targetFocusY ]; this.dstLine = [ userInitialX, userInitialY, targetInitialX, targetInitialY ]; - let r = anim!.frames.length; // TODO: is this bang correct? + let r = anim?.frames.length ?? 0; let f = 0; scene.tweens.addCounter({ duration: Utils.getFrameMs(3), - repeat: anim!.frames.length, // TODO: is this bang correct? + repeat: anim?.frames.length ?? 0, onRepeat: () => { if (!f) { userSprite.setVisible(false); @@ -1264,7 +1264,7 @@ export class CommonBattleAnim extends BattleAnim { } getAnim(): AnimConfig | null { - return this.commonAnim ? commonAnims.get(this.commonAnim)! : null; // TODO: is this bang correct? + return this.commonAnim ? commonAnims.get(this.commonAnim) ?? null : null; } isOppAnim(): boolean { @@ -1284,7 +1284,7 @@ export class MoveAnim extends BattleAnim { getAnim(): AnimConfig { return moveAnims.get(this.move) instanceof AnimConfig ? moveAnims.get(this.move) as AnimConfig - : moveAnims.get(this.move)![this.user?.isPlayer() ? 0 : 1] as AnimConfig; // TODO: is this bang correct? + : moveAnims.get(this.move)?.[this.user?.isPlayer() ? 0 : 1] as AnimConfig; } isOppAnim(): boolean { @@ -1316,7 +1316,7 @@ export class MoveChargeAnim extends MoveAnim { getAnim(): AnimConfig { return chargeAnims.get(this.chargeAnim) instanceof AnimConfig ? chargeAnims.get(this.chargeAnim) as AnimConfig - : chargeAnims.get(this.chargeAnim)![this.user?.isPlayer() ? 0 : 1] as AnimConfig; // TODO: is this bang correct? + : chargeAnims.get(this.chargeAnim)?.[this.user?.isPlayer() ? 0 : 1] as AnimConfig; } } diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 3be6562307b..e92446ef5a2 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -2281,6 +2281,36 @@ export class TarShotTag extends BattlerTag { } } +/** + * Battler Tag that keeps track of how many times the user has Autotomized + * Each count of Autotomization reduces the weight by 100kg + */ +export class AutotomizedTag extends BattlerTag { + public autotomizeCount: number = 0; + constructor(sourceMove: Moves = Moves.AUTOTOMIZE) { + super(BattlerTagType.AUTOTOMIZED, BattlerTagLapseType.CUSTOM, 1, sourceMove); + } + + /** + * Adds an autotomize count to the Pokemon. Each stack reduces weight by 100kg + * If the Pokemon is over 0.1kg it also displays a message. + * @param pokemon The Pokemon that is being autotomized + */ + onAdd(pokemon: Pokemon): void { + const minWeight = 0.1; + if (pokemon.getWeight() > minWeight) { + pokemon.scene.queueMessage(i18next.t("battlerTags:autotomizeOnAdd", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) + })); + } + this.autotomizeCount += 1; + } + + onOverlap(pokemon: Pokemon): void { + this.onAdd(pokemon); + } +} + export class SubstituteTag extends BattlerTag { /** The substitute's remaining HP. If HP is depleted, the Substitute fades. */ public hp: number; @@ -2568,6 +2598,8 @@ export function getBattlerTag(tagType: BattlerTagType, turnCount: number, source return new GorillaTacticsTag(); case BattlerTagType.SUBSTITUTE: return new SubstituteTag(sourceMove, sourceId); + case BattlerTagType.AUTOTOMIZED: + return new AutotomizedTag(); case BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON: return new MysteryEncounterPostSummonTag(); case BattlerTagType.HEAL_BLOCK: diff --git a/src/data/challenge.ts b/src/data/challenge.ts index 46b56a30835..1afbfc932dc 100644 --- a/src/data/challenge.ts +++ b/src/data/challenge.ts @@ -172,11 +172,9 @@ export abstract class Challenge { * @param overrideValue {@link integer} The value to check for. If undefined, gets the current value. * @returns {@link string} The localised name for the current value. */ - getValue(overrideValue?: integer): string { - if (overrideValue === undefined) { - overrideValue = this.value; - } - return i18next.t(`challenges:${this.geti18nKey()}.value.${this.value}`); + getValue(overrideValue?: number): string { + const value = overrideValue ?? this.value; + return i18next.t(`challenges:${this.geti18nKey()}.value.${value}`); } /** @@ -184,11 +182,9 @@ export abstract class Challenge { * @param overrideValue {@link integer} The value to check for. If undefined, gets the current value. * @returns {@link string} The localised description for the current value. */ - getDescription(overrideValue?: integer): string { - if (overrideValue === undefined) { - overrideValue = this.value; - } - return `${i18next.t([`challenges:${this.geti18nKey()}.desc.${this.value}`, `challenges:${this.geti18nKey()}.desc`])}`; + getDescription(overrideValue?: number): string { + const value = overrideValue ?? this.value; + return `${i18next.t([`challenges:${this.geti18nKey()}.desc.${value}`, `challenges:${this.geti18nKey()}.desc`])}`; } /** @@ -451,30 +447,6 @@ export class SingleGenerationChallenge extends Challenge { applyFixedBattle(waveIndex: Number, battleConfig: FixedBattleConfig): boolean { let trainerTypes: TrainerType[] = []; switch (waveIndex) { - case 35: - trainerTypes = [ TrainerType.ROCKET_GRUNT, TrainerType.ROCKET_GRUNT, Utils.randSeedItem([ TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT ]), TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, Utils.randSeedItem([ TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT ]), TrainerType.MACRO_GRUNT, TrainerType.STAR_GRUNT ]; - break; - case 62: - trainerTypes = [ TrainerType.ROCKET_GRUNT, TrainerType.ROCKET_GRUNT, Utils.randSeedItem([ TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT ]), TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, Utils.randSeedItem([ TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT ]), TrainerType.MACRO_GRUNT, TrainerType.STAR_GRUNT ]; - break; - case 64: - trainerTypes = [ TrainerType.ROCKET_GRUNT, TrainerType.ROCKET_GRUNT, Utils.randSeedItem([ TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT ]), TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, Utils.randSeedItem([ TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT ]), TrainerType.MACRO_GRUNT, TrainerType.STAR_GRUNT ]; - break; - case 66: - trainerTypes = [ Utils.randSeedItem([ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ]), Utils.randSeedItem([ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ]), Utils.randSeedItem([ TrainerType.TABITHA, TrainerType.COURTNEY, TrainerType.MATT, TrainerType.SHELLY ]), Utils.randSeedItem([ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ]), Utils.randSeedItem([ TrainerType.ZINZOLIN, TrainerType.ROOD ]), Utils.randSeedItem([ TrainerType.XEROSIC, TrainerType.BRYONY ]), Utils.randSeedItem([ TrainerType.FABA, TrainerType.PLUMERIA ]), TrainerType.OLEANA, Utils.randSeedItem([ TrainerType.GIACOMO, TrainerType.MELA, TrainerType.ATTICUS, TrainerType.ORTEGA, TrainerType.ERI ]) ]; - break; - case 112: - trainerTypes = [ TrainerType.ROCKET_GRUNT, TrainerType.ROCKET_GRUNT, Utils.randSeedItem([ TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT ]), TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, Utils.randSeedItem([ TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT ]), TrainerType.MACRO_GRUNT, TrainerType.STAR_GRUNT ]; - break; - case 114: - trainerTypes = [ Utils.randSeedItem([ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ]), Utils.randSeedItem([ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ]), Utils.randSeedItem([ TrainerType.TABITHA, TrainerType.COURTNEY, TrainerType.MATT, TrainerType.SHELLY ]), Utils.randSeedItem([ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ]), Utils.randSeedItem([ TrainerType.ZINZOLIN, TrainerType.ROOD ]), Utils.randSeedItem([ TrainerType.XEROSIC, TrainerType.BRYONY ]), Utils.randSeedItem([ TrainerType.FABA, TrainerType.PLUMERIA ]), TrainerType.OLEANA, Utils.randSeedItem([ TrainerType.GIACOMO, TrainerType.MELA, TrainerType.ATTICUS, TrainerType.ORTEGA, TrainerType.ERI ]) ]; - break; - case 115: - trainerTypes = [ TrainerType.ROCKET_BOSS_GIOVANNI_1, TrainerType.ROCKET_BOSS_GIOVANNI_1, Utils.randSeedItem([ TrainerType.MAXIE, TrainerType.ARCHIE ]), TrainerType.CYRUS, TrainerType.GHETSIS, TrainerType.LYSANDRE, Utils.randSeedItem([ TrainerType.LUSAMINE, TrainerType.GUZMA ]), TrainerType.ROSE, TrainerType.PENNY ]; - break; - case 165: - trainerTypes = [ TrainerType.ROCKET_BOSS_GIOVANNI_2, TrainerType.ROCKET_BOSS_GIOVANNI_2, Utils.randSeedItem([ TrainerType.MAXIE_2, TrainerType.ARCHIE_2 ]), TrainerType.CYRUS_2, TrainerType.GHETSIS_2, TrainerType.LYSANDRE_2, Utils.randSeedItem([ TrainerType.LUSAMINE_2, TrainerType.GUZMA_2 ]), TrainerType.ROSE_2, TrainerType.PENNY_2 ]; - break; case 182: trainerTypes = [ TrainerType.LORELEI, TrainerType.WILL, TrainerType.SIDNEY, TrainerType.AARON, TrainerType.SHAUNTAL, TrainerType.MALVA, Utils.randSeedItem([ TrainerType.HALA, TrainerType.MOLAYNE ]), TrainerType.MARNIE_ELITE, TrainerType.RIKA ]; break; @@ -511,14 +483,12 @@ export class SingleGenerationChallenge extends Challenge { * @param {value} overrideValue The value to check for. If undefined, gets the current value. * @returns {string} The localised name for the current value. */ - getValue(overrideValue?: integer): string { - if (overrideValue === undefined) { - overrideValue = this.value; - } - if (this.value === 0) { + getValue(overrideValue?: number): string { + const value = overrideValue ?? this.value; + if (value === 0) { return i18next.t("settings:off"); } - return i18next.t(`starterSelectUiHandler:gen${this.value}`); + return i18next.t(`starterSelectUiHandler:gen${value}`); } /** @@ -526,14 +496,12 @@ export class SingleGenerationChallenge extends Challenge { * @param {value} overrideValue The value to check for. If undefined, gets the current value. * @returns {string} The localised description for the current value. */ - getDescription(overrideValue?: integer): string { - if (overrideValue === undefined) { - overrideValue = this.value; - } - if (this.value === 0) { + getDescription(overrideValue?: number): string { + const value = overrideValue ?? this.value; + if (value === 0) { return i18next.t("challenges:singleGeneration.desc_default"); } - return i18next.t("challenges:singleGeneration.desc", { gen: i18next.t(`challenges:singleGeneration.gen_${this.value}`) }); + return i18next.t("challenges:singleGeneration.desc", { gen: i18next.t(`challenges:singleGeneration.gen_${value}`) }); } diff --git a/src/data/move.ts b/src/data/move.ts index a84bf38c5ea..8866e86f708 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -650,7 +650,7 @@ export default class Move implements Localizable { } /** - * Applies each {@linkcode MoveCondition} of this move to the params + * Applies each {@linkcode MoveCondition} function of this move to the params, determines if the move can be used prior to calling each attribute's apply() * @param user {@linkcode Pokemon} to apply conditions to * @param target {@linkcode Pokemon} to apply conditions to * @param move {@linkcode Move} to apply conditions to @@ -2091,21 +2091,20 @@ export class PsychoShiftEffectAttr extends MoveEffectAttr { if (target.status) { return false; - } - //@ts-ignore - how can target.status.effect be checked when we return `false` before when it's defined? - if (!target.status || (target.status.effect === statusToApply && move.chance < 0)) { // TODO: resolve ts-ignore - const statusAfflictResult = target.trySetStatus(statusToApply, true, user); - if (statusAfflictResult) { + } else { + const canSetStatus = target.canSetStatus(statusToApply, true, false, user); + + if (canSetStatus) { if (user.status) { user.scene.queueMessage(getStatusEffectHealText(user.status.effect, getPokemonNameWithAffix(user))); } user.resetStatus(); user.updateInfo(); + target.trySetStatus(statusToApply, true, user); } - return statusAfflictResult; - } - return false; + return canSetStatus; + } } getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { @@ -5175,31 +5174,29 @@ export class RevivalBlessingAttr extends MoveEffectAttr { } export class ForceSwitchOutAttr extends MoveEffectAttr { - private user: boolean; - private batonPass: boolean; - - constructor(user?: boolean, batonPass?: boolean) { + constructor( + private selfSwitch: boolean = false, + private batonPass: boolean = false + ) { super(false, MoveEffectTrigger.POST_APPLY, false, true); - this.user = !!user; - this.batonPass = !!batonPass; } isBatonPass() { return this.batonPass; } + // TODO: Why is this a Promise? apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise { return new Promise(resolve => { - // Check if the move category is not STATUS or if the switch out condition is not met if (!this.getSwitchOutCondition()(user, target, move)) { return resolve(false); } - // Move the switch out logic inside the conditional block - // This ensures that the switch out only happens when the conditions are met - const switchOutTarget = this.user ? user : target; - if (switchOutTarget instanceof PlayerPokemon) { + // Move the switch out logic inside the conditional block + // This ensures that the switch out only happens when the conditions are met + const switchOutTarget = this.selfSwitch ? user : target; + if (switchOutTarget instanceof PlayerPokemon) { switchOutTarget.leaveField(!this.batonPass); if (switchOutTarget.hp > 0) { @@ -5208,41 +5205,43 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { } else { resolve(false); } - return; - } else if (user.scene.currentBattle.battleType !== BattleType.WILD) { - // Switch out logic for trainer battles + return; + } else if (user.scene.currentBattle.battleType !== BattleType.WILD) { + // Switch out logic for trainer battles switchOutTarget.leaveField(!this.batonPass); - if (switchOutTarget.hp > 0) { - // for opponent switching out - user.scene.prependToPhase(new SwitchSummonPhase(user.scene, switchOutTarget.getFieldIndex(), (user.scene.currentBattle.trainer ? user.scene.currentBattle.trainer.getNextSummonIndex((switchOutTarget as EnemyPokemon).trainerSlot) : 0), false, this.batonPass, false), MoveEndPhase); + if (switchOutTarget.hp > 0) { + // for opponent switching out + user.scene.prependToPhase(new SwitchSummonPhase(user.scene, switchOutTarget.getFieldIndex(), + (user.scene.currentBattle.trainer ? user.scene.currentBattle.trainer.getNextSummonIndex((switchOutTarget as EnemyPokemon).trainerSlot) : 0), + false, this.batonPass, false), MoveEndPhase); } - } else { - // Switch out logic for everything else (eg: WILD battles) - switchOutTarget.leaveField(false); + } else { + // Switch out logic for everything else (eg: WILD battles) + switchOutTarget.leaveField(false); - if (switchOutTarget.hp) { - user.scene.queueMessage(i18next.t("moveTriggers:fled", {pokemonName: getPokemonNameWithAffix(switchOutTarget)}), null, true, 500); + if (switchOutTarget.hp) { + user.scene.queueMessage(i18next.t("moveTriggers:fled", {pokemonName: getPokemonNameWithAffix(switchOutTarget)}), null, true, 500); // in double battles redirect potential moves off fled pokemon if (switchOutTarget.scene.currentBattle.double) { const allyPokemon = switchOutTarget.getAlly(); switchOutTarget.scene.redirectPokemonMoves(switchOutTarget, allyPokemon); } - } + } - if (!switchOutTarget.getAlly()?.isActive(true)) { - user.scene.clearEnemyHeldItemModifiers(); + if (!switchOutTarget.getAlly()?.isActive(true)) { + user.scene.clearEnemyHeldItemModifiers(); - if (switchOutTarget.hp) { - user.scene.pushPhase(new BattleEndPhase(user.scene)); - user.scene.pushPhase(new NewBattlePhase(user.scene)); - } - } - } + if (switchOutTarget.hp) { + user.scene.pushPhase(new BattleEndPhase(user.scene)); + user.scene.pushPhase(new NewBattlePhase(user.scene)); + } + } + } - resolve(true); - }); + resolve(true); + }); } getCondition(): MoveConditionFunc { @@ -5257,29 +5256,33 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { getSwitchOutCondition(): MoveConditionFunc { return (user, target, move) => { - const switchOutTarget = (this.user ? user : target); + const switchOutTarget = (this.selfSwitch ? user : target); const player = switchOutTarget instanceof PlayerPokemon; - if (!this.user && move.hitsSubstitute(user, target)) { - return false; + if (!this.selfSwitch) { + if (move.hitsSubstitute(user, target)) { + return false; + } + + const blockedByAbility = new Utils.BooleanHolder(false); + applyAbAttrs(ForceSwitchOutImmunityAbAttr, target, blockedByAbility); + return !blockedByAbility.value; } - if (!this.user && move.category === MoveCategory.STATUS && (target.hasAbilityWithAttr(ForceSwitchOutImmunityAbAttr))) { - return false; - } - - if (!player && !user.scene.currentBattle.battleType) { + if (!player && user.scene.currentBattle.battleType === BattleType.WILD) { if (this.batonPass) { return false; } // Don't allow wild opponents to flee on the boss stage since it can ruin a run early on - if (!(user.scene.currentBattle.waveIndex % 10)) { + if (user.scene.currentBattle.waveIndex % 10 === 0) { return false; } } const party = player ? user.scene.getParty() : user.scene.getEnemyParty(); - return (!player && !user.scene.currentBattle.battleType) || party.filter(p => p.isAllowedInBattle() && (player || (p as EnemyPokemon).trainerSlot === (switchOutTarget as EnemyPokemon).trainerSlot)).length > user.scene.currentBattle.getBattlerCount(); + return (!player && !user.scene.currentBattle.battleType) + || party.filter(p => p.isAllowedInBattle() + && (player || (p as EnemyPokemon).trainerSlot === (switchOutTarget as EnemyPokemon).trainerSlot)).length > user.scene.currentBattle.getBattlerCount(); }; } @@ -5287,8 +5290,8 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { if (!user.scene.getEnemyParty().find(p => p.isActive() && !p.isOnField())) { return -20; } - let ret = this.user ? Math.floor((1 - user.getHpRatio()) * 20) : super.getUserBenefitScore(user, target, move); - if (this.user && this.batonPass) { + let ret = this.selfSwitch ? Math.floor((1 - user.getHpRatio()) * 20) : super.getUserBenefitScore(user, target, move); + if (this.selfSwitch && this.batonPass) { const statStageTotal = user.getStatStages().reduce((s: integer, total: integer) => total += s, 0); ret = ret / 2 + (Phaser.Tweens.Builders.GetEaseFunction("Sine.easeOut")(Math.min(Math.abs(statStageTotal), 10) / 10) * (statStageTotal >= 0 ? 10 : -10)); } @@ -5296,6 +5299,21 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { } } + +export class ChillyReceptionAttr extends ForceSwitchOutAttr { + + // using inherited constructor + + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise { + user.scene.arena.trySetWeather(WeatherType.SNOW, true); + return super.apply(user, target, move, args); + } + + getCondition(): MoveConditionFunc { + // chilly reception move will go through if the weather is change-able to snow, or the user can switch out, else move will fail + return (user, target, move) => user.scene.arena.trySetWeather(WeatherType.SNOW, true) || super.getSwitchOutCondition()(user, target, move); + } +} export class RemoveTypeAttr extends MoveEffectAttr { private removedType: Type; @@ -8091,7 +8109,7 @@ export function initMoves() { .attr(MovePowerMultiplierAttr, (user, target, move) => target.status && (target.status.effect === StatusEffect.POISON || target.status.effect === StatusEffect.TOXIC) ? 2 : 1), new SelfStatusMove(Moves.AUTOTOMIZE, Type.STEEL, -1, 15, -1, 0, 5) .attr(StatStageChangeAttr, [ Stat.SPD ], 2, true) - .partial(), + .attr(AddBattlerTagAttr, BattlerTagType.AUTOTOMIZED, true), new SelfStatusMove(Moves.RAGE_POWDER, Type.BUG, -1, 20, -1, 2, 5) .powderMove() .attr(AddBattlerTagAttr, BattlerTagType.CENTER_OF_ATTENTION, true), @@ -9073,8 +9091,7 @@ export function initMoves() { new AttackMove(Moves.AURA_WHEEL, Type.ELECTRIC, MoveCategory.PHYSICAL, 110, 100, 10, 100, 0, 8) .attr(StatStageChangeAttr, [ Stat.SPD ], 1, true) .makesContact(false) - .attr(AuraWheelTypeAttr) - .condition((user, target, move) => [user.species.speciesId, user.fusionSpecies?.speciesId].includes(Species.MORPEKO)), // Missing custom fail message + .attr(AuraWheelTypeAttr), new AttackMove(Moves.BREAKING_SWIPE, Type.DRAGON, MoveCategory.PHYSICAL, 60, 100, 15, 100, 0, 8) .target(MoveTarget.ALL_NEAR_ENEMIES) .attr(StatStageChangeAttr, [ Stat.ATK ], -1), @@ -9486,10 +9503,9 @@ export function initMoves() { .makesContact(), new SelfStatusMove(Moves.SHED_TAIL, Type.NORMAL, -1, 10, -1, 0, 9) .unimplemented(), - new StatusMove(Moves.CHILLY_RECEPTION, Type.ICE, -1, 10, -1, 0, 9) - .attr(WeatherChangeAttr, WeatherType.SNOW) - .attr(ForceSwitchOutAttr, true, false) - .target(MoveTarget.BOTH_SIDES), + new SelfStatusMove(Moves.CHILLY_RECEPTION, Type.ICE, -1, 10, -1, 0, 9) + .attr(PreMoveMessageAttr, (user, move) => i18next.t("moveTriggers:chillyReception", {pokemonName: getPokemonNameWithAffix(user)})) + .attr(ChillyReceptionAttr, true, false), new SelfStatusMove(Moves.TIDY_UP, Type.NORMAL, -1, 10, -1, 0, 9) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPD ], 1, true, null, true, true) .attr(RemoveArenaTrapAttr, true) diff --git a/src/data/mystery-encounters/utils/encounter-phase-utils.ts b/src/data/mystery-encounters/utils/encounter-phase-utils.ts index 7eb205ce3f7..ef4f396b823 100644 --- a/src/data/mystery-encounters/utils/encounter-phase-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-phase-utils.ts @@ -339,7 +339,7 @@ export async function initBattleWithEnemyConfig(scene: BattleScene, partyConfig: loadEnemyAssets.push(enemyPokemon.loadAssets()); - console.log(enemyPokemon.name, enemyPokemon.species.speciesId, enemyPokemon.stats); + console.log(`Pokemon: ${enemyPokemon.name}`, `Species ID: ${enemyPokemon.species.speciesId}`, `Stats: ${enemyPokemon.stats}`, `Ability: ${enemyPokemon.getAbility().name}`, `Passive Ability: ${enemyPokemon.getPassiveAbility().name}`); }); scene.pushPhase(new MysteryEncounterBattlePhase(scene, partyConfig.disableSwitch)); diff --git a/src/data/trainer-config.ts b/src/data/trainer-config.ts index 62f9589b7a3..82593a4e08b 100644 --- a/src/data/trainer-config.ts +++ b/src/data/trainer-config.ts @@ -597,7 +597,7 @@ export class TrainerConfig { case "flare": { return { [TrainerPoolTier.COMMON]: [Species.FLETCHLING, Species.LITLEO, Species.INKAY, Species.HELIOPTILE, Species.ELECTRIKE, Species.SKORUPI, Species.PURRLOIN, Species.CLAWITZER, Species.PANCHAM, Species.ESPURR, Species.BUNNELBY], - [TrainerPoolTier.UNCOMMON]: [Species.LITWICK, Species.SNEASEL, Species.PUMPKABOO, Species.PHANTUMP, Species.HONEDGE, Species.BINACLE, Species.BERGMITE, Species.HOUNDOUR, Species.SKRELP, Species.SLIGGOO], + [TrainerPoolTier.UNCOMMON]: [Species.LITWICK, Species.SNEASEL, Species.PUMPKABOO, Species.PHANTUMP, Species.HONEDGE, Species.BINACLE, Species.HOUNDOUR, Species.SKRELP, Species.SLIGGOO], [TrainerPoolTier.RARE]: [Species.NOIVERN, Species.HISUI_AVALUGG, Species.HISUI_SLIGGOO] }; } @@ -640,14 +640,14 @@ export class TrainerConfig { return { [TrainerPoolTier.COMMON]: [ Species.ZUBAT, Species.GRIMER, Species.STUNKY, Species.FOONGUS, Species.MAREANIE, Species.TOXEL, Species.SHROODLE, Species.PALDEA_WOOPER ], [TrainerPoolTier.UNCOMMON]: [ Species.GASTLY, Species.SEVIPER, Species.SKRELP, Species.ALOLA_GRIMER, Species.GALAR_SLOWPOKE, Species.HISUI_QWILFISH ], - [TrainerPoolTier.RARE]: [ Species.BULBASAUR, Species.GLIMMET ] + [TrainerPoolTier.RARE]: [ Species.GLIMMET, Species.BULBASAUR ] }; } case "star_4": { return { [TrainerPoolTier.COMMON]: [ Species.CLEFFA, Species.IGGLYBUFF, Species.AZURILL, Species.COTTONEE, Species.FLABEBE, Species.HATENNA, Species.IMPIDIMP, Species.TINKATINK ], [TrainerPoolTier.UNCOMMON]: [ Species.TOGEPI, Species.GARDEVOIR, Species.SYLVEON, Species.KLEFKI, Species.MIMIKYU, Species.ALOLA_VULPIX ], - [TrainerPoolTier.RARE]: [ Species.POPPLIO, Species.GALAR_PONYTA ] + [TrainerPoolTier.RARE]: [ Species.GALAR_PONYTA, Species.POPPLIO ] }; } case "star_5": { @@ -1509,7 +1509,7 @@ export const trainerConfigs: TrainerConfigs = { .setSpeciesPools({ [TrainerPoolTier.COMMON]: [Species.CARVANHA, Species.WAILMER, Species.ZIGZAGOON, Species.LOTAD, Species.CORPHISH, Species.SPHEAL, Species.REMORAID, Species.QWILFISH, Species.BARBOACH], [TrainerPoolTier.UNCOMMON]: [Species.CLAMPERL, Species.CHINCHOU, Species.WOOPER, Species.WINGULL, Species.TENTACOOL, Species.AZURILL, Species.CLOBBOPUS, Species.HORSEA], - [TrainerPoolTier.RARE]: [Species.MANTINE, Species.DHELMISE, Species.HISUI_QWILFISH, Species.ARROKUDA, Species.PALDEA_WOOPER, Species.SKRELP], + [TrainerPoolTier.RARE]: [Species.MANTYKE, Species.DHELMISE, Species.HISUI_QWILFISH, Species.ARROKUDA, Species.PALDEA_WOOPER, Species.SKRELP], [TrainerPoolTier.SUPER_RARE]: [Species.DONDOZO, Species.BASCULEGION] }), [TrainerType.MATT]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("aqua_admin", "aqua", [Species.SHARPEDO]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), @@ -1527,8 +1527,8 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.PLASMA_GRUNT]: new TrainerConfig(++t).setHasGenders("Plasma Grunt Female").setHasDouble("Plasma Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) .setSpeciesPools({ [TrainerPoolTier.COMMON]: [Species.PATRAT, Species.LILLIPUP, Species.PURRLOIN, Species.SCRAFTY, Species.WOOBAT, Species.VANILLITE, Species.SANDILE, Species.TRUBBISH, Species.TYMPOLE], - [TrainerPoolTier.UNCOMMON]: [Species.FRILLISH, Species.VENIPEDE, Species.GOLETT, Species.TIMBURR, Species.DARUMAKA, Species.FOONGUS, Species.JOLTIK], - [TrainerPoolTier.RARE]: [Species.PAWNIARD, Species.RUFFLET, Species.VULLABY, Species.ZORUA, Species.DRILBUR, Species.KLINK, Species.CUBCHOO, Species.MIENFOO, Species.DURANT, Species.BOUFFALANT], + [TrainerPoolTier.UNCOMMON]: [Species.FRILLISH, Species.VENIPEDE, Species.GOLETT, Species.TIMBURR, Species.DARUMAKA, Species.FOONGUS, Species.JOLTIK, Species.CUBCHOO, Species.KLINK], + [TrainerPoolTier.RARE]: [Species.PAWNIARD, Species.RUFFLET, Species.VULLABY, Species.ZORUA, Species.DRILBUR, Species.MIENFOO, Species.DURANT, Species.BOUFFALANT], [TrainerPoolTier.SUPER_RARE]: [Species.DRUDDIGON, Species.HISUI_ZORUA, Species.AXEW, Species.DEINO] }), [TrainerType.ZINZOLIN]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("plasma_sage", "plasma", [Species.CRYOGONAL]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), @@ -1537,7 +1537,7 @@ export const trainerConfigs: TrainerConfigs = { .setSpeciesPools({ [TrainerPoolTier.COMMON]: [Species.FLETCHLING, Species.LITLEO, Species.PONYTA, Species.INKAY, Species.HOUNDOUR, Species.SKORUPI, Species.SCRAFTY, Species.CROAGUNK, Species.SCATTERBUG, Species.ESPURR], [TrainerPoolTier.UNCOMMON]: [Species.HELIOPTILE, Species.ELECTRIKE, Species.SKRELP, Species.PANCHAM, Species.PURRLOIN, Species.POOCHYENA, Species.BINACLE, Species.CLAUNCHER, Species.PUMPKABOO, Species.PHANTUMP], - [TrainerPoolTier.RARE]: [Species.LITWICK, Species.SNEASEL, Species.PAWNIARD, Species.BERGMITE, Species.SLIGGOO], + [TrainerPoolTier.RARE]: [Species.LITWICK, Species.SNEASEL, Species.PAWNIARD, Species.SLIGGOO], [TrainerPoolTier.SUPER_RARE]: [Species.NOIVERN, Species.HISUI_SLIGGOO, Species.HISUI_AVALUGG] }), [TrainerType.BRYONY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("flare_admin_female", "flare", [Species.LIEPARD]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), @@ -1545,15 +1545,15 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.AETHER_GRUNT]: new TrainerConfig(++t).setHasGenders("Aether Grunt Female").setHasDouble("Aether Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aether_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ Species.PIKIPEK, Species.ROCKRUFF, Species.ALOLA_DIGLETT, Species.ALOLA_EXEGGUTOR, Species.YUNGOOS, Species.CORSOLA, Species.ALOLA_GEODUDE, Species.ALOLA_RAICHU, Species.BOUNSWEET, Species.LILLIPUP, Species.KOMALA, Species.MORELULL, Species.COMFEY, Species.TOGEDEMARU], - [TrainerPoolTier.UNCOMMON]: [ Species.POLIWAG, Species.STUFFUL, Species.ORANGURU, Species.PASSIMIAN, Species.BRUXISH, Species.MINIOR, Species.WISHIWASHI, Species.CRABRAWLER, Species.CUTIEFLY, Species.ORICORIO, Species.MUDBRAY, Species.PYUKUMUKU, Species.ALOLA_MAROWAK], - [TrainerPoolTier.RARE]: [ Species.GALAR_CORSOLA, Species.ALOLA_SANDSHREW, Species.ALOLA_VULPIX, Species.TURTONATOR, Species.DRAMPA], + [TrainerPoolTier.UNCOMMON]: [ Species.POLIWAG, Species.STUFFUL, Species.ORANGURU, Species.PASSIMIAN, Species.BRUXISH, Species.MINIOR, Species.WISHIWASHI, Species.ALOLA_SANDSHREW, Species.ALOLA_VULPIX, Species.CRABRAWLER, Species.CUTIEFLY, Species.ORICORIO, Species.MUDBRAY, Species.PYUKUMUKU, Species.ALOLA_MAROWAK], + [TrainerPoolTier.RARE]: [ Species.GALAR_CORSOLA, Species.TURTONATOR, Species.MIMIKYU, Species.MAGNEMITE, Species.DRAMPA], [TrainerPoolTier.SUPER_RARE]: [Species.JANGMO_O, Species.PORYGON] }), [TrainerType.FABA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("aether_admin", "aether", [Species.HYPNO]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aether_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)), [TrainerType.SKULL_GRUNT]: new TrainerConfig(++t).setHasGenders("Skull Grunt Female").setHasDouble("Skull Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_skull_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [ Species.SALANDIT, Species.ALOLA_RATTATA, Species.EKANS, Species.ALOLA_MEOWTH, Species.SCRAGGY, Species.KOFFING, Species.ALOLA_GRIMER, Species.MAREANIE, Species.SPINARAK, Species.TRUBBISH], - [TrainerPoolTier.UNCOMMON]: [ Species.FOMANTIS, Species.SABLEYE, Species.SANDILE, Species.HOUNDOUR, Species.ALOLA_MAROWAK, Species.GASTLY, Species.PANCHAM, Species.DROWZEE, Species.ZUBAT, Species.VENIPEDE, Species.VULLABY], + [TrainerPoolTier.COMMON]: [ Species.SALANDIT, Species.ALOLA_RATTATA, Species.EKANS, Species.ALOLA_MEOWTH, Species.SCRAGGY, Species.KOFFING, Species.ALOLA_GRIMER, Species.MAREANIE, Species.SPINARAK, Species.TRUBBISH, Species.DROWZEE], + [TrainerPoolTier.UNCOMMON]: [ Species.FOMANTIS, Species.SABLEYE, Species.SANDILE, Species.HOUNDOUR, Species.ALOLA_MAROWAK, Species.GASTLY, Species.PANCHAM, Species.ZUBAT, Species.VENIPEDE, Species.VULLABY], [TrainerPoolTier.RARE]: [Species.SANDYGAST, Species.PAWNIARD, Species.MIMIKYU, Species.DHELMISE, Species.WISHIWASHI, Species.NYMBLE], [TrainerPoolTier.SUPER_RARE]: [Species.GRUBBIN, Species.DEWPIDER] }), @@ -1916,7 +1916,14 @@ export const trainerConfigs: TrainerConfigs = { p.formIndex = 1; // Mega Kangaskhan p.generateName(); })) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.GASTRODON, Species.SEISMITOAD])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.GASTRODON, Species.SEISMITOAD], TrainerSlot.TRAINER, true, p => { + //Storm Drain Gastrodon, Water Absorb Seismitoad + if (p.species.speciesId === Species.GASTRODON) { + p.abilityIndex = 0; + } else if (p.species.speciesId === Species.SEISMITOAD) { + p.abilityIndex = 2; + } + })) .setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.MEWTWO], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); @@ -2060,7 +2067,7 @@ export const trainerConfigs: TrainerConfigs = { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; - p.formIndex = Utils.randSeedInt(5, 1); // Shock, Burn, Chill, or Douse Drive + p.formIndex = Utils.randSeedInt(4, 1); // Shock, Burn, Chill, or Douse Drive })) .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.BASCULEGION, Species.JELLICENT ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); @@ -2153,9 +2160,23 @@ export const trainerConfigs: TrainerConfigs = { p.pokeball = PokeballType.MASTER_BALL; })), [TrainerType.GUZMA]: new TrainerConfig(++t).setName("Guzma").initForEvilTeamLeader("Skull Boss", []).setMixedBattleBgm("battle_skull_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.LOKIX, Species.YANMEGA ])) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.LOKIX, Species.YANMEGA ], TrainerSlot.TRAINER, true, p => { + //Tinted Lens Lokix, Tinted Lens Yanmega + if (p.species.speciesId === Species.LOKIX) { + p.abilityIndex = 2; + } else if (p.species.speciesId === Species.YANMEGA) { + p.abilityIndex = 1; + } + })) .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.HERACROSS ])) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SCIZOR, Species.KLEAVOR ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SCIZOR, Species.KLEAVOR ], TrainerSlot.TRAINER, true, p => { + //Technician Scizor, Sharpness Kleavor + if (p.species.speciesId === Species.SCIZOR) { + p.abilityIndex = 1; + } else if (p.species.speciesId === Species.KLEAVOR) { + p.abilityIndex = 2; + } + })) .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GALVANTULA, Species.VIKAVOLT])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.PINSIR ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); @@ -2175,25 +2196,32 @@ export const trainerConfigs: TrainerConfigs = { p.abilityIndex = 2; //Anticipation p.pokeball = PokeballType.ULTRA_BALL; })) - .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.HISUI_SAMUROTT, Species.CRAWDAUNT ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.SCIZOR, Species.KLEAVOR ], TrainerSlot.TRAINER, true, p => { + //Technician Scizor, Sharpness Kleavor + if (p.species.speciesId === Species.SCIZOR) { + p.abilityIndex = 1; + } else if (p.species.speciesId === Species.KLEAVOR) { + p.abilityIndex = 2; + } + })) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.HISUI_SAMUROTT, Species.CRAWDAUNT ], TrainerSlot.TRAINER, true, p => { p.abilityIndex = 2; //Sharpness Hisui Samurott, Adaptability Crawdaunt })) - .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SCIZOR, Species.KLEAVOR ])) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.PINSIR ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.BUZZWOLE ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ROGUE_BALL; + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.XURKITREE ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ROGUE_BALL; + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.PINSIR ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); p.formIndex = 1; + p.generateAndPopulateMoveset(); p.generateName(); p.pokeball = PokeballType.ULTRA_BALL; - })) - .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.BUZZWOLE ], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ROGUE_BALL; - })) - .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.XURKITREE ], TrainerSlot.TRAINER, true, p => { - p.setBoss(true, 2); - p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ROGUE_BALL; })), [TrainerType.ROSE]: new TrainerConfig(++t).setName("Rose").initForEvilTeamLeader("Macro Boss", []).setMixedBattleBgm("battle_macro_boss").setVictoryBgm("victory_team_plasma") .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.ARCHALUDON ])) @@ -2209,17 +2237,16 @@ export const trainerConfigs: TrainerConfigs = { p.pokeball = PokeballType.ULTRA_BALL; })), [TrainerType.ROSE_2]: new TrainerConfig(++t).setName("Rose").initForEvilTeamLeader("Macro Boss", [], true).setMixedBattleBgm("battle_macro_boss").setVictoryBgm("victory_team_plasma") - .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.MELMETAL ], TrainerSlot.TRAINER, true, p => { + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.ARCHALUDON ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); - p.pokeball = PokeballType.ULTRA_BALL; })) .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.AEGISLASH, Species.GHOLDENGO ])) .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.DRACOVISH, Species.DRACOZOLT ], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); p.abilityIndex = 1; //Strong Jaw Dracovish, Hustle Dracozolt })) - .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.ARCHALUDON ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.MELMETAL ])) .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.GALAR_ARTICUNO, Species.GALAR_ZAPDOS, Species.GALAR_MOLTRES ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); p.generateAndPopulateMoveset(); diff --git a/src/enums/battler-tag-type.ts b/src/enums/battler-tag-type.ts index 6cf2d260dcb..d606ae319f7 100644 --- a/src/enums/battler-tag-type.ts +++ b/src/enums/battler-tag-type.ts @@ -79,6 +79,7 @@ export enum BattlerTagType { TAR_SHOT = "TAR_SHOT", BURNED_UP = "BURNED_UP", DOUBLE_SHOCKED = "DOUBLE_SHOCKED", + AUTOTOMIZED = "AUTOTOMIZED", MYSTERY_ENCOUNTER_POST_SUMMON = "MYSTERY_ENCOUNTER_POST_SUMMON", HEAL_BLOCK = "HEAL_BLOCK", } diff --git a/src/field/arena.ts b/src/field/arena.ts index 9897da7cfd7..dc9ad84f09d 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -33,6 +33,7 @@ export class Arena { public tags: ArenaTag[]; public bgm: string; public ignoreAbilities: boolean; + public ignoringEffectSource: BattlerIndex | null; private lastTimeOfDay: TimeOfDay; @@ -569,8 +570,9 @@ export class Arena { } } - setIgnoreAbilities(ignoreAbilities: boolean = true): void { + setIgnoreAbilities(ignoreAbilities: boolean, ignoringEffectSource: BattlerIndex | null = null): void { this.ignoreAbilities = ignoreAbilities; + this.ignoringEffectSource = ignoreAbilities ? ignoringEffectSource : null; } /** diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index e17272cd955..7734f8adec2 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -17,10 +17,10 @@ import { initMoveAnim, loadMoveAnimAssets } from "../data/battle-anims"; import { Status, StatusEffect, getRandomStatus } from "../data/status-effect"; import { pokemonEvolutions, pokemonPrevolutions, SpeciesFormEvolution, SpeciesEvolutionCondition, FusionSpeciesFormEvolution } from "../data/pokemon-evolutions"; import { reverseCompatibleTms, tmSpecies, tmPoolTiers } from "../data/tms"; -import { BattlerTag, BattlerTagLapseType, EncoreTag, GroundedTag, HighestStatBoostTag, SubstituteTag, TypeImmuneTag, getBattlerTag, SemiInvulnerableTag, TypeBoostTag, MoveRestrictionBattlerTag, ExposedTag, DragonCheerTag, CritBoostTag, TrappedTag, TarShotTag } from "../data/battler-tags"; +import { BattlerTag, BattlerTagLapseType, EncoreTag, GroundedTag, HighestStatBoostTag, SubstituteTag, TypeImmuneTag, getBattlerTag, SemiInvulnerableTag, TypeBoostTag, MoveRestrictionBattlerTag, ExposedTag, DragonCheerTag, CritBoostTag, TrappedTag, TarShotTag, AutotomizedTag } from "../data/battler-tags"; import { WeatherType } from "../data/weather"; import { ArenaTagSide, NoCritTag, WeakenMoveScreenTag } from "../data/arena-tag"; -import { Ability, AbAttr, StatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, IgnoreOpponentStatStagesAbAttr, MoveImmunityAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, ReduceStatusEffectDurationAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyStatMultiplierAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr, DamageBoostAbAttr, IgnoreTypeStatusEffectImmunityAbAttr, ConditionalCritAbAttr, applyFieldStatMultiplierAbAttrs, FieldMultiplyStatAbAttr, AddSecondStrikeAbAttr, UserFieldStatusEffectImmunityAbAttr, UserFieldBattlerTagImmunityAbAttr, BattlerTagImmunityAbAttr, MoveTypeChangeAbAttr, FullHpResistTypeAbAttr, applyCheckTrappedAbAttrs, CheckTrappedAbAttr } from "../data/ability"; +import { Ability, AbAttr, StatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, IgnoreOpponentStatStagesAbAttr, MoveImmunityAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, ReduceStatusEffectDurationAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyStatMultiplierAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr, DamageBoostAbAttr, IgnoreTypeStatusEffectImmunityAbAttr, ConditionalCritAbAttr, applyFieldStatMultiplierAbAttrs, FieldMultiplyStatAbAttr, AddSecondStrikeAbAttr, UserFieldStatusEffectImmunityAbAttr, UserFieldBattlerTagImmunityAbAttr, BattlerTagImmunityAbAttr, MoveTypeChangeAbAttr, FullHpResistTypeAbAttr, applyCheckTrappedAbAttrs, CheckTrappedAbAttr, PostSetStatusAbAttr, applyPostSetStatusAbAttrs } from "../data/ability"; import PokemonData from "../system/pokemon-data"; import { BattlerIndex } from "../battle"; import { Mode } from "../ui/ui"; @@ -1364,7 +1364,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (this.isFusion() && ability.hasAttr(NoFusionAbilityAbAttr)) { return false; } - if (this.scene?.arena.ignoreAbilities && ability.isIgnorable) { + const arena = this.scene?.arena; + if (arena.ignoreAbilities && arena.ignoringEffectSource !== this.getBattlerIndex() && ability.isIgnorable) { return false; } if (this.summonData?.abilitySuppressed && !ability.hasAttr(UnsuppressableAbilityAbAttr)) { @@ -1426,11 +1427,23 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return false; } + /** + * Gets the weight of the Pokemon with subtractive modifiers (Autotomize) happening first + * and then multiplicative modifiers happening after (Heavy Metal and Light Metal) + * @returns the kg of the Pokemon (minimum of 0.1) + */ getWeight(): number { - const weight = new Utils.NumberHolder(this.species.weight); + const autotomizedTag = this.getTag(AutotomizedTag); + let weightRemoved = 0; + if (!Utils.isNullOrUndefined(autotomizedTag)) { + weightRemoved = 100 * autotomizedTag!.autotomizeCount; + } + const minWeight = 0.1; + const weight = new Utils.NumberHolder(this.species.weight - weightRemoved); + // This will trigger the ability overlay so only call this function when necessary applyAbAttrs(WeightMultiplierAbAttr, this, null, false, weight); - return weight.value; + return Math.max(minWeight, weight.value); } /** @@ -3365,7 +3378,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } if (asPhase) { - this.scene.unshiftPhase(new ObtainStatusEffectPhase(this.scene, this.getBattlerIndex(), effect, cureTurn, sourceText!, sourcePokemon!)); // TODO: are these bangs correct? + this.scene.unshiftPhase(new ObtainStatusEffectPhase(this.scene, this.getBattlerIndex(), effect, cureTurn, sourceText, sourcePokemon)); return true; } @@ -3399,6 +3412,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (effect !== StatusEffect.FAINT) { this.scene.triggerPokemonFormChange(this, SpeciesFormChangeStatusEffectTrigger, true); + applyPostSetStatusAbAttrs(PostSetStatusAbAttr, this, effect, sourcePokemon); } return true; diff --git a/src/loading-scene.ts b/src/loading-scene.ts index c3cb494d497..b577ba542bd 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -1,5 +1,4 @@ import { GachaType } from "./enums/gacha-types"; -import { trainerConfigs } from "./data/trainer-config"; import { getBiomeHasProps } from "./field/arena"; import CacheBustedLoaderPlugin from "./plugins/cache-busted-loader-plugin"; import { SceneBase } from "./scene-base"; @@ -21,7 +20,6 @@ import i18next from "i18next"; import { initStatsKeys } from "./ui/game-stats-ui-handler"; import { initVouchers } from "./system/voucher"; import { Biome } from "#enums/biome"; -import { TrainerType } from "#enums/trainer-type"; import {initMysteryEncounters} from "#app/data/mystery-encounters/mystery-encounters"; export class LoadingScene extends SceneBase { @@ -208,14 +206,6 @@ export class LoadingScene extends SceneBase { this.loadAtlas("trainer_f_back", "trainer"); this.loadAtlas("trainer_f_back_pb", "trainer"); - Utils.getEnumValues(TrainerType).map(tt => { - const config = trainerConfigs[tt]; - this.loadAtlas(config.getSpriteKey(), "trainer"); - if (config.doubleOnly || config.hasDouble) { - this.loadAtlas(config.getSpriteKey(true), "trainer"); - } - }); - // Load character sprites this.loadAtlas("c_rival_m", "character", "rival_m"); this.loadAtlas("c_rival_f", "character", "rival_f"); diff --git a/src/locales/ca_ES/config.ts b/src/locales/ca_ES/config.ts index 4d8f6c9dc59..b9f92bb8f49 100644 --- a/src/locales/ca_ES/config.ts +++ b/src/locales/ca_ES/config.ts @@ -53,7 +53,49 @@ import terrain from "./terrain.json"; import modifierSelectUiHandler from "./modifier-select-ui-handler.json"; import moveTriggers from "./move-trigger.json"; import runHistory from "./run-history.json"; +import mysteryEncounterMessages from "./mystery-encounter-messages.json"; +import lostAtSea from "./mystery-encounters/lost-at-sea-dialogue.json"; +import mysteriousChest from "./mystery-encounters/mysterious-chest-dialogue.json"; +import mysteriousChallengers from "./mystery-encounters/mysterious-challengers-dialogue.json"; +import darkDeal from "./mystery-encounters/dark-deal-dialogue.json"; +import departmentStoreSale from "./mystery-encounters/department-store-sale-dialogue.json"; +import fieldTrip from "./mystery-encounters/field-trip-dialogue.json"; +import fieryFallout from "./mystery-encounters/fiery-fallout-dialogue.json"; +import fightOrFlight from "./mystery-encounters/fight-or-flight-dialogue.json"; +import safariZone from "./mystery-encounters/safari-zone-dialogue.json"; +import shadyVitaminDealer from "./mystery-encounters/shady-vitamin-dealer-dialogue.json"; +import slumberingSnorlax from "./mystery-encounters/slumbering-snorlax-dialogue.json"; +import trainingSession from "./mystery-encounters/training-session-dialogue.json"; +import theStrongStuff from "./mystery-encounters/the-strong-stuff-dialogue.json"; +import pokemonSalesman from "./mystery-encounters/the-pokemon-salesman-dialogue.json"; +import offerYouCantRefuse from "./mystery-encounters/an-offer-you-cant-refuse-dialogue.json"; +import delibirdy from "./mystery-encounters/delibirdy-dialogue.json"; +import absoluteAvarice from "./mystery-encounters/absolute-avarice-dialogue.json"; +import aTrainersTest from "./mystery-encounters/a-trainers-test-dialogue.json"; +import trashToTreasure from "./mystery-encounters/trash-to-treasure-dialogue.json"; +import berriesAbound from "./mystery-encounters/berries-abound-dialogue.json"; +import clowningAround from "./mystery-encounters/clowning-around-dialogue.json"; +import partTimer from "./mystery-encounters/part-timer-dialogue.json"; +import dancingLessons from "./mystery-encounters/dancing-lessons-dialogue.json"; +import weirdDream from "./mystery-encounters/weird-dream-dialogue.json"; +import theWinstrateChallenge from "./mystery-encounters/the-winstrate-challenge-dialogue.json"; +import teleportingHijinks from "./mystery-encounters/teleporting-hijinks-dialogue.json"; +import bugTypeSuperfan from "./mystery-encounters/bug-type-superfan-dialogue.json"; +import funAndGames from "./mystery-encounters/fun-and-games-dialogue.json"; +import uncommonBreed from "./mystery-encounters/uncommon-breed-dialogue.json"; +import globalTradeSystem from "./mystery-encounters/global-trade-system-dialogue.json"; +import expertPokemonBreeder from "./mystery-encounters/the-expert-pokemon-breeder-dialogue.json"; +/** + * Dialogue/Text token injection patterns that can be used: + * - `$` will be treated as a new line for Message and Dialogue strings. + * - `@d{}` will add a time delay to text animation for Message and Dialogue strings. + * - `@s{}` will play a specified sound effect for Message and Dialogue strings. + * - `@f{}` will fade the screen to black for the given duration, then fade back in for Message and Dialogue strings. + * - `{{}}` (MYSTERY ENCOUNTERS ONLY) will auto-inject the matching dialogue token value that is stored in {@link IMysteryEncounter.dialogueTokens}. + * - (see [i18next interpolations](https://www.i18next.com/translation-function/interpolation)) for more details. + * - `@[]{}` (STATIC TEXT ONLY, NOT USEABLE WITH {@link UI.showText()} OR {@link UI.showDialogue()}) will auto-color the given text to a specified {@link TextStyle} (e.g. `TextStyle.SUMMARY_GREEN`). + */ export const caEsConfig = { ability, abilityTriggers, @@ -110,4 +152,40 @@ export const caEsConfig = { modifierSelectUiHandler, moveTriggers, runHistory, + mysteryEncounter: { + // DO NOT REMOVE + "unit_test_dialogue": "{{test}}{{test}} {{test{{test}}}} {{test1}} {{test\}} {{test\\}} {{test\\\}} {test}}", + mysteriousChallengers, + mysteriousChest, + darkDeal, + fightOrFlight, + slumberingSnorlax, + trainingSession, + departmentStoreSale, + shadyVitaminDealer, + fieldTrip, + safariZone, + lostAtSea, + fieryFallout, + theStrongStuff, + pokemonSalesman, + offerYouCantRefuse, + delibirdy, + absoluteAvarice, + aTrainersTest, + trashToTreasure, + berriesAbound, + clowningAround, + partTimer, + dancingLessons, + weirdDream, + theWinstrateChallenge, + teleportingHijinks, + bugTypeSuperfan, + funAndGames, + uncommonBreed, + globalTradeSystem, + expertPokemonBreeder + }, + mysteryEncounterMessages }; diff --git a/src/locales/ca_ES/mystery-encounter-messages.json b/src/locales/ca_ES/mystery-encounter-messages.json new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/src/locales/ca_ES/mystery-encounter-messages.json @@ -0,0 +1 @@ +{} diff --git a/src/locales/ca_ES/mystery-encounters/a-trainers-test-dialogue.json b/src/locales/ca_ES/mystery-encounters/a-trainers-test-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ca_ES/mystery-encounters/a-trainers-test-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ca_ES/mystery-encounters/absolute-avarice-dialogue.json b/src/locales/ca_ES/mystery-encounters/absolute-avarice-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ca_ES/mystery-encounters/absolute-avarice-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ca_ES/mystery-encounters/an-offer-you-cant-refuse-dialogue.json b/src/locales/ca_ES/mystery-encounters/an-offer-you-cant-refuse-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ca_ES/mystery-encounters/an-offer-you-cant-refuse-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ca_ES/mystery-encounters/berries-abound-dialogue.json b/src/locales/ca_ES/mystery-encounters/berries-abound-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ca_ES/mystery-encounters/berries-abound-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ca_ES/mystery-encounters/bug-type-superfan-dialogue.json b/src/locales/ca_ES/mystery-encounters/bug-type-superfan-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ca_ES/mystery-encounters/bug-type-superfan-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ca_ES/mystery-encounters/clowning-around-dialogue.json b/src/locales/ca_ES/mystery-encounters/clowning-around-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ca_ES/mystery-encounters/clowning-around-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ca_ES/mystery-encounters/dancing-lessons-dialogue.json b/src/locales/ca_ES/mystery-encounters/dancing-lessons-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ca_ES/mystery-encounters/dancing-lessons-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ca_ES/mystery-encounters/dark-deal-dialogue.json b/src/locales/ca_ES/mystery-encounters/dark-deal-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ca_ES/mystery-encounters/dark-deal-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ca_ES/mystery-encounters/delibirdy-dialogue.json b/src/locales/ca_ES/mystery-encounters/delibirdy-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ca_ES/mystery-encounters/delibirdy-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ca_ES/mystery-encounters/department-store-sale-dialogue.json b/src/locales/ca_ES/mystery-encounters/department-store-sale-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ca_ES/mystery-encounters/department-store-sale-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ca_ES/mystery-encounters/field-trip-dialogue.json b/src/locales/ca_ES/mystery-encounters/field-trip-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ca_ES/mystery-encounters/field-trip-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ca_ES/mystery-encounters/fiery-fallout-dialogue.json b/src/locales/ca_ES/mystery-encounters/fiery-fallout-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ca_ES/mystery-encounters/fiery-fallout-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ca_ES/mystery-encounters/fight-or-flight-dialogue.json b/src/locales/ca_ES/mystery-encounters/fight-or-flight-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ca_ES/mystery-encounters/fight-or-flight-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ca_ES/mystery-encounters/fun-and-games-dialogue.json b/src/locales/ca_ES/mystery-encounters/fun-and-games-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ca_ES/mystery-encounters/fun-and-games-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ca_ES/mystery-encounters/global-trade-system-dialogue.json b/src/locales/ca_ES/mystery-encounters/global-trade-system-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ca_ES/mystery-encounters/global-trade-system-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ca_ES/mystery-encounters/lost-at-sea-dialogue.json b/src/locales/ca_ES/mystery-encounters/lost-at-sea-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ca_ES/mystery-encounters/lost-at-sea-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ca_ES/mystery-encounters/mysterious-challengers-dialogue.json b/src/locales/ca_ES/mystery-encounters/mysterious-challengers-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ca_ES/mystery-encounters/mysterious-challengers-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ca_ES/mystery-encounters/mysterious-chest-dialogue.json b/src/locales/ca_ES/mystery-encounters/mysterious-chest-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ca_ES/mystery-encounters/mysterious-chest-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ca_ES/mystery-encounters/part-timer-dialogue.json b/src/locales/ca_ES/mystery-encounters/part-timer-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ca_ES/mystery-encounters/part-timer-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ca_ES/mystery-encounters/safari-zone-dialogue.json b/src/locales/ca_ES/mystery-encounters/safari-zone-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ca_ES/mystery-encounters/safari-zone-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ca_ES/mystery-encounters/shady-vitamin-dealer-dialogue.json b/src/locales/ca_ES/mystery-encounters/shady-vitamin-dealer-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ca_ES/mystery-encounters/shady-vitamin-dealer-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ca_ES/mystery-encounters/slumbering-snorlax-dialogue.json b/src/locales/ca_ES/mystery-encounters/slumbering-snorlax-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ca_ES/mystery-encounters/slumbering-snorlax-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ca_ES/mystery-encounters/teleporting-hijinks-dialogue.json b/src/locales/ca_ES/mystery-encounters/teleporting-hijinks-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ca_ES/mystery-encounters/teleporting-hijinks-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ca_ES/mystery-encounters/the-expert-pokemon-breeder-dialogue.json b/src/locales/ca_ES/mystery-encounters/the-expert-pokemon-breeder-dialogue.json new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/src/locales/ca_ES/mystery-encounters/the-expert-pokemon-breeder-dialogue.json @@ -0,0 +1 @@ +{} diff --git a/src/locales/ca_ES/mystery-encounters/the-pokemon-salesman-dialogue.json b/src/locales/ca_ES/mystery-encounters/the-pokemon-salesman-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ca_ES/mystery-encounters/the-pokemon-salesman-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ca_ES/mystery-encounters/the-strong-stuff-dialogue.json b/src/locales/ca_ES/mystery-encounters/the-strong-stuff-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ca_ES/mystery-encounters/the-strong-stuff-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ca_ES/mystery-encounters/the-winstrate-challenge-dialogue.json b/src/locales/ca_ES/mystery-encounters/the-winstrate-challenge-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ca_ES/mystery-encounters/the-winstrate-challenge-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ca_ES/mystery-encounters/training-session-dialogue.json b/src/locales/ca_ES/mystery-encounters/training-session-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ca_ES/mystery-encounters/training-session-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ca_ES/mystery-encounters/trash-to-treasure-dialogue.json b/src/locales/ca_ES/mystery-encounters/trash-to-treasure-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ca_ES/mystery-encounters/trash-to-treasure-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ca_ES/mystery-encounters/uncommon-breed-dialogue.json b/src/locales/ca_ES/mystery-encounters/uncommon-breed-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ca_ES/mystery-encounters/uncommon-breed-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ca_ES/mystery-encounters/weird-dream-dialogue.json b/src/locales/ca_ES/mystery-encounters/weird-dream-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ca_ES/mystery-encounters/weird-dream-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/de/ability.json b/src/locales/de/ability.json index 84f30fac755..e6078371535 100644 --- a/src/locales/de/ability.json +++ b/src/locales/de/ability.json @@ -1237,6 +1237,6 @@ }, "poisonPuppeteer": { "name": "Giftpuppenspiel", - "description": "Wenn Infamomo ein Ziel mit einer Attacke vergiftet, so wird dieses auch verwirrt." + "description": "Wenn das Pokémon ein Ziel mit einer Attacke vergiftet, so wird dieses auch verwirrt." } } \ No newline at end of file diff --git a/src/locales/de/achv.json b/src/locales/de/achv.json index 21a1d89f9d6..4fa48d8cfdc 100644 --- a/src/locales/de/achv.json +++ b/src/locales/de/achv.json @@ -273,5 +273,9 @@ "INVERSE_BATTLE": { "name": "Spieglein, Spieglein an der Wand", "description": "Schließe die 'Umkehrkampf' Herausforderung ab" + }, + "BREEDERS_IN_SPACE": { + "name": "Züchter im Weltall!", + "description": "Besiege die Pokémon-Züchter-Expertin im Stratosphären Biome." } } diff --git a/src/locales/de/battle.json b/src/locales/de/battle.json index 7a9c2570211..93b30e10fe5 100644 --- a/src/locales/de/battle.json +++ b/src/locales/de/battle.json @@ -14,6 +14,10 @@ "moneyWon": "Du gewinnst {{moneyAmount}} ₽!", "moneyPickedUp": "Du hebst {{moneyAmount}} ₽ auf!", "pokemonCaught": "{{pokemonName}} wurde gefangen!", + "pokemonObtained": "Du erhältst {{pokemonName}}!", + "pokemonBrokeFree": "Mist!\nDas Pokémon hat sich befreit!", + "pokemonFled": "Das wilde {{pokemonName}} ist geflohen!", + "playerFled": "Du bist vor dem wilden {{pokemonName}} geflohen!", "addedAsAStarter": "{{pokemonName}} wurde als Starterpokémon hinzugefügt!", "partyFull": "Dein Team ist voll. Möchtest du ein Pokémon durch {{pokemonName}} ersetzen?", "pokemon": "Pokémon", @@ -49,6 +53,7 @@ "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!", "noPokeballStrong": "Das Ziel-Pokémon ist zu stark, um gefangen zu werden! Du musst es zuerst schwächen!", + "noPokeballMysteryEncounter": "You aren't able to\ncatch this Pokémon!", "noEscapeForce": "Eine unsichtbare Kraft verhindert die Flucht.", "noEscapeTrainer": "Du kannst nicht aus einem Trainerkampf fliehen!", "noEscapePokemon": "{{moveName}} von {{pokemonName}} verhindert {{escapeVerb}}!", @@ -97,6 +102,7 @@ "congratulations": "Glückwunsch!", "beatModeFirstTime": "{{speciesName}} hat den {{gameMode}} Modus zum ersten Mal beendet! Du erhältst {{newModifier}}!", "eggSkipPrompt": "Zur Ei-Zusammenfassung springen?", + "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/bgm-name.json b/src/locales/de/bgm-name.json index 1eab276a70a..dbcb6ee6929 100644 --- a/src/locales/de/bgm-name.json +++ b/src/locales/de/bgm-name.json @@ -77,23 +77,26 @@ "end_summit": "PMDDX Gipfel des Himmelturms", "battle_rocket_grunt": "HGSS Vs. Team Rocket Rüpel", "battle_aqua_magma_grunt": "ORAS Vs. Team Aqua & Magma", - "battle_galactic_grunt": "BDSP Vs. Team Galaktik Rüpel", + "battle_galactic_grunt": "SDLP Vs. Team Galaktik Rüpel", "battle_plasma_grunt": "SW Vs. Team Plasma Rüpel", "battle_flare_grunt": "XY Vs. Team Flare Rüpel", "battle_aether_grunt": "SM Vs. Æther Foundation", "battle_skull_grunt": "SM Vs. Team Skull Rüpel", "battle_macro_grunt": "SWSH Vs. Trainer", - "battle_galactic_admin": "BDSP Vs. Team Galactic Commander", + "battle_star_grunt": "KAPU Vs. Team Star", + "battle_galactic_admin": "SDLP Vs. Team Galactic Commander", "battle_skull_admin": "SM Vs. Team Skull Vorstand", - "battle_oleana": "SWSH Vs. Oleana", + "battle_oleana": "SWSH Vs. Olivia", + "battle_star_admin": "KAPU Vs. Team Star Boss", "battle_rocket_boss": "USUM Vs. Giovanni", "battle_aqua_magma_boss": "ORAS Vs. Team Aqua & Magma Boss", - "battle_galactic_boss": "BDSP Vs. Zyrus", + "battle_galactic_boss": "SDLP Vs. Zyrus", "battle_plasma_boss": "S2W2 Vs. G-Cis", "battle_flare_boss": "XY Vs. Flordelis", "battle_aether_boss": "SM Vs. Samantha", "battle_skull_boss": "SM Vs. Bromley", "battle_macro_boss": "SWSH Vs. Rose", + "battle_star_boss": "KAPU Vs. Cosima", "abyss": "PMD Erkundungsteam Himmel Dunkelkrater", "badlands": "PMD Erkundungsteam Himmel Kargtal", @@ -108,17 +111,17 @@ "forest": "PMD Erkundungsteam Himmel Düsterwald", "grass": "PMD Erkundungsteam Himmel Apfelwald", "graveyard": "PMD Erkundungsteam Himmel Verwirrwald", - "ice_cave": "PMD Erkundungsteam Himmel Rieseneisberg", + "ice_cave": "Firel - -50°C", "island": "PMD Erkundungsteam Himmel Schroffküste", "jungle": "Lmz - Jungle", "laboratory": "Firel - Laboratory", - "lake": "PMD Erkundungsteam Himmel Kristallhöhle", + "lake": "Lmz - Lake", "meadow": "PMD Erkundungsteam Himmel Himmelsgipfel-Wald", "metropolis": "Firel - Metropolis", "mountain": "PMD Erkundungsteam Himmel Hornberg", - "plains": "PMD Erkundungsteam Himmel Himmelsgipfel-Prärie", - "power_plant": "PMD Erkundungsteam Himmel Weite Ampere-Ebene", - "ruins": "PMD Erkundungsteam Himmel Tiefes Ruinenverlies", + "plains": "Firel - Route 888", + "power_plant": "Firel - The Klink", + "ruins": "Lmz - Ancient Ruins", "sea": "Andr06 - Marine Mystique", "seabed": "Firel - Seabed", "slum": "Andr06 - Sneaky Snom", @@ -128,7 +131,7 @@ "tall_grass": "PMD Erkundungsteam Himmel Nebelwald", "temple": "PMD Erkundungsteam Himmel Ägishöhle", "town": "PMD Erkundungsteam Himmel Zufälliges Dungeon-Theme 3", - "volcano": "PMD Erkundungsteam Himmel Dunsthöhle", + "volcano": "Firel - Twisturn Volcano", "wasteland": "PMD Erkundungsteam Himmel Verborgenes Hochland", "encounter_ace_trainer": "SW Trainerblicke treffen sich (Ass-Trainer)", "encounter_backpacker": "SW Trainerblicke treffen sich (Backpacker)", @@ -146,5 +149,11 @@ "encounter_youngster": "SW Trainerblicke treffen sich (Knirps)", "heal": "SW Pokémon-Heilung", "menu": "PMD Erkundungsteam Himmel Willkommen in der Welt der Pokémon!", - "title": "PMD Erkundungsteam Himmel Top-Menü-Thema" + "title": "PMD Erkundungsteam Himmel Top-Menü-Thema", + + "mystery_encounter_weird_dream": "PMD Erkundungsteam Himmel Zeitturmspitze", + "mystery_encounter_fun_and_games": "PMD Erkundungsteam Himmel Gildenmeister Knuddeluff", + "mystery_encounter_gen_5_gts": "SW GTS", + "mystery_encounter_gen_6_gts": "XY GTS", + "mystery_encounter_delibirdy": "Firel - DeliDelivery!" } diff --git a/src/locales/de/config.ts b/src/locales/de/config.ts index 772bfb6d1d5..582272d4087 100644 --- a/src/locales/de/config.ts +++ b/src/locales/de/config.ts @@ -53,7 +53,49 @@ import terrain from "./terrain.json"; import modifierSelectUiHandler from "./modifier-select-ui-handler.json"; import moveTriggers from "./move-trigger.json"; import runHistory from "./run-history.json"; +import mysteryEncounterMessages from "./mystery-encounter-messages.json"; +import lostAtSea from "./mystery-encounters/lost-at-sea-dialogue.json"; +import mysteriousChest from "./mystery-encounters/mysterious-chest-dialogue.json"; +import mysteriousChallengers from "./mystery-encounters/mysterious-challengers-dialogue.json"; +import darkDeal from "./mystery-encounters/dark-deal-dialogue.json"; +import departmentStoreSale from "./mystery-encounters/department-store-sale-dialogue.json"; +import fieldTrip from "./mystery-encounters/field-trip-dialogue.json"; +import fieryFallout from "./mystery-encounters/fiery-fallout-dialogue.json"; +import fightOrFlight from "./mystery-encounters/fight-or-flight-dialogue.json"; +import safariZone from "./mystery-encounters/safari-zone-dialogue.json"; +import shadyVitaminDealer from "./mystery-encounters/shady-vitamin-dealer-dialogue.json"; +import slumberingSnorlax from "./mystery-encounters/slumbering-snorlax-dialogue.json"; +import trainingSession from "./mystery-encounters/training-session-dialogue.json"; +import theStrongStuff from "./mystery-encounters/the-strong-stuff-dialogue.json"; +import pokemonSalesman from "./mystery-encounters/the-pokemon-salesman-dialogue.json"; +import offerYouCantRefuse from "./mystery-encounters/an-offer-you-cant-refuse-dialogue.json"; +import delibirdy from "./mystery-encounters/delibirdy-dialogue.json"; +import absoluteAvarice from "./mystery-encounters/absolute-avarice-dialogue.json"; +import aTrainersTest from "./mystery-encounters/a-trainers-test-dialogue.json"; +import trashToTreasure from "./mystery-encounters/trash-to-treasure-dialogue.json"; +import berriesAbound from "./mystery-encounters/berries-abound-dialogue.json"; +import clowningAround from "./mystery-encounters/clowning-around-dialogue.json"; +import partTimer from "./mystery-encounters/part-timer-dialogue.json"; +import dancingLessons from "./mystery-encounters/dancing-lessons-dialogue.json"; +import weirdDream from "./mystery-encounters/weird-dream-dialogue.json"; +import theWinstrateChallenge from "./mystery-encounters/the-winstrate-challenge-dialogue.json"; +import teleportingHijinks from "./mystery-encounters/teleporting-hijinks-dialogue.json"; +import bugTypeSuperfan from "./mystery-encounters/bug-type-superfan-dialogue.json"; +import funAndGames from "./mystery-encounters/fun-and-games-dialogue.json"; +import uncommonBreed from "./mystery-encounters/uncommon-breed-dialogue.json"; +import globalTradeSystem from "./mystery-encounters/global-trade-system-dialogue.json"; +import expertPokemonBreeder from "./mystery-encounters/the-expert-pokemon-breeder-dialogue.json"; +/** + * Dialogue/Text token injection patterns that can be used: + * - `$` will be treated as a new line for Message and Dialogue strings. + * - `@d{}` will add a time delay to text animation for Message and Dialogue strings. + * - `@s{}` will play a specified sound effect for Message and Dialogue strings. + * - `@f{}` will fade the screen to black for the given duration, then fade back in for Message and Dialogue strings. + * - `{{}}` (MYSTERY ENCOUNTERS ONLY) will auto-inject the matching dialogue token value that is stored in {@link IMysteryEncounter.dialogueTokens}. + * - (see [i18next interpolations](https://www.i18next.com/translation-function/interpolation)) for more details. + * - `@[]{}` (STATIC TEXT ONLY, NOT USEABLE WITH {@link UI.showText()} OR {@link UI.showDialogue()}) will auto-color the given text to a specified {@link TextStyle} (e.g. `TextStyle.SUMMARY_GREEN`). + */ export const deConfig = { ability, abilityTriggers, @@ -110,4 +152,40 @@ export const deConfig = { modifierSelectUiHandler, moveTriggers, runHistory, + mysteryEncounter: { + // DO NOT REMOVE + "unit_test_dialogue": "{{test}}{{test}} {{test{{test}}}} {{test1}} {{test\}} {{test\\}} {{test\\\}} {test}}", + mysteriousChallengers, + mysteriousChest, + darkDeal, + fightOrFlight, + slumberingSnorlax, + trainingSession, + departmentStoreSale, + shadyVitaminDealer, + fieldTrip, + safariZone, + lostAtSea, + fieryFallout, + theStrongStuff, + pokemonSalesman, + offerYouCantRefuse, + delibirdy, + absoluteAvarice, + aTrainersTest, + trashToTreasure, + berriesAbound, + clowningAround, + partTimer, + dancingLessons, + weirdDream, + theWinstrateChallenge, + teleportingHijinks, + bugTypeSuperfan, + funAndGames, + uncommonBreed, + globalTradeSystem, + expertPokemonBreeder + }, + mysteryEncounterMessages }; diff --git a/src/locales/de/dialogue.json b/src/locales/de/dialogue.json index 8a3dbb8880e..493ccef2976 100644 --- a/src/locales/de/dialogue.json +++ b/src/locales/de/dialogue.json @@ -715,12 +715,16 @@ "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.", - "3": "Ich bin von MC Versicherungen! Hast du eine Lebensversicherung?" + "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!", + "5": "Eine Standpauke von Frau Olivia ist schlimmer als alles, was Sie tun können!" }, "victory": { "1": "Ich habe keine andere Wahl, als respektvoll zurückzutreten.", "2": "Mein Erspartes aufzugeben bringt mich in die roten Zahlen...", - "3": "Okay zurück an die Arbeit. Versicherungen verkauft sich nicht von alleine." + "3": "Okay zurück an die Arbeit. Versicherungen verkauft sich nicht von alleine.", + "4": "Ich habe sogar meine Pokémon ausgetauscht...", + "5": "Kämpfen hat nicht funktioniert... Jetzt können wir nur noch rennen!" } }, "oleana": { @@ -735,6 +739,73 @@ "3": "Ich bin eine müde Olivia... Ob es Macro Cosmos Betten gibt?" } }, + "star_grunt": { + "encounter": { + "1": "Wir sind von Team Star, wo jeder nach den Sternen greifen kann!", + "2": "Wir werden mit voller Kraft auf dich losgehen - Hasta la vistar! ★", + "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..." + }, + "victory": { + "1": "Jetzt bin ich die Person, die Sterne sieht...", + "2": "Jemand wie du wäre bei Team Star wahrscheinlich im Nullkommanichts an der Spitze.$Alle hätten Angst vor dir. Trotzdem...", + "3": "Da war meine Selbstverteidigung wohl nicht gut genug...", + "4": "H-hasta la vistar... ★", + "5": "Als neues Mitglied bei Team Star bekommt man echt nur die Drecksarbeit ab..." + } + }, + "giacomo": { + "encounter": { + "1": "Du willst dich echt mit Team Star anlegen? Bist du lebensmüde, oder was?", + "2": "Weil ich so nett bin, leg ich zu deinem Abgang auch ein fettes Requiem auf!$Lass uns die Party in Schwung bringen" + }, + "victory": { + "1": " Besser hätte ich es auch nicht sagen können...", + "2": "Uff, da hab ich schon bessere Shows gegeben... Schade, aber verloren ist verloren." + } + }, + "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!", + "2": "Yeah, lassen wir’s krachen!" + }, + "victory": { + "1": "Uff, ich hab echt versagt... Das war’s dann wohl...", + "2": "Ich... brannte so sehr auf diesen Kampf. Doch jetzt ist meine Flamme erloschen..." + } + }, + "atticus": { + "encounter": { + "1": "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": { + "1": "Meine Gefährten... Vergebt mir...", + "2": "Ich habe eine klare Niederlage erlitten, bei der Groll und Bitterkeit fehl am Platz wären." + } + }, + "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!" + }, + "victory": { + "1": "Was?! Wie konnte ich nur verlieren? Warum? Warum nur?!", + "2": "Graaaah! Du bist viel zu stark, das ist so was von unfair!" + } + }, + "eri": { + "encounter": { + "1": "Wer auch immer es auf Team Star abgesehen hat, wird zerschmettert!", + "2": "Ich kann genauso gut austeilen wie einstecken! Wer am Ende noch steht, gewinnt." + }, + "victory": { + "1": "Leute, es tut mir so leid...", + "2": "Ich habe alles gegeben... Ich bereue nichts..." + } + }, "rocket_boss_giovanni_1": { "encounter": { "1": "Ich bin beeindruckt, du hast es bis hierher geschafft!\n$Ich bin Giovanni, der Anführer von Team Rocket!\n$Wir regieren den Untergrund von Kanto!\n$Und wir lassen sicherlich nicht zu, dass ein Kind uns aufhält!" @@ -933,6 +1004,138 @@ "1": "Ich nehme an, es muss den Anschein haben, dass ich etwas Schreckliches tue.\n$Ich erwarte nicht, dass du es verstehst. Aber ich muss der Galar-Region grenzenlose Energie\n$bereitstellen, um ewigen Wohlstand zu gewährleisten." } }, + "star_boss_penny_1": { + "encounter": { + "1": "Ich bin Team Stars Big Boss. Mein Name ist Cassiopeia...$Die Gründerin von Team Star ist kampfbereit! Verneigt euch vor meiner unermesslichen Kraft!" + }, + "victory": { + "1": "... ... .." + }, + "defeat": { + "1": "Heh..." + } + }, + "star_boss_penny_2": { + "encounter": { + "1": "Ich werde mich in diesem Kampf nicht zurückhalten! Ich werde dem Kodex von Team Star treu bleiben!$Unsere Evoli-Power verwandelt euch in Sternenstaub!" + }, + "victory": { + "1": "Es ist vorbei..." + }, + "defeat": { + "1": "Du bist unfassbar stark. Kein Wunder, dass die anderen Bosse gegen dich verloren haben..." + } + }, + "stat_trainer_buck": { + "encounter": { + "1": "...Ich sag dir jetzt mal was. Ich bin echt stark. Tue überrascht!", + "2": "Ich fühle, wie meine Pokémon in ihren Pokébällen zittern!" + }, + "victory": { + "1": "Hehehehe! So heiß bist du!", + "2": "Hehehehe! So heiß bist du!" + }, + "defeat": { + "1": "Whoa! Du scheinst ja wirklich erschöpft zu sein.", + "2": "Whoa! Du scheinst ja wirklich erschöpft zu sein." + } + }, + "stat_trainer_cheryl": { + "encounter": { + "1": "Meine Pokémon können es kaum erwarten, zu kämpfen.", + "2": "Ich sollte dich warnen, meine Pokémon können ziemlich wild sein." + }, + "victory": { + "1": "Ein gutes Verhältnis von Angriff und Verteidigung... Das ist nicht einfach.", + "2": "Ein gutes Verhältnis von Angriff und Verteidigung... Das ist nicht einfach." + }, + "defeat": { + "1": "Brauchen deine Pokémon Heilung?", + "2": "Brauchen deine Pokémon Heilung?" + } + }, + "stat_trainer_marley": { + "encounter": { + "1": "...OK. Ich werde mein Bestes geben.", + "2": "...OK. Ich werde nicht verlieren...!" + }, + "victory": { + "1": "... Awww.", + "2": "... Awww." + }, + "defeat": { + "1": "... Auf Wiedersehen.", + "2": "... Auf Wiedersehen." + } + }, + "stat_trainer_mira": { + "encounter": { + "1": "Du wirst von Mira schockiert sein!", + "2": "Mira wird dir zeigen, dass Mira sich nicht mehr verirrt!" + }, + "victory": { + "1": "Mira wundern, ob sie in diesem Land weit kommen kann.", + "2": "Mira wundern, ob sie in diesem Land weit kommen kann." + }, + "defeat": { + "1": "Mira wuss, dass sie gewinnen würde!", + "2": "Mira wuss, dass sie gewinnen würde!" + } + }, + "stat_trainer_riley": { + "encounter": { + "1": "Kämpfe sind unsere Art der Begrüßung.", + "2": "Wir setzen alles daran, deine Pokémon zu besiegen." + }, + "victory": { + "1": "Manchmal kämpfen wir, und manchmal schließen wir uns zusammen...\n$Es ist großartig, wie Trainer interagieren können.", + "2": "Manchmal kämpfen wir, und manchmal schließen wir uns zusammen...\n$Es ist großartig, wie Trainer interagieren können." + }, + "defeat": { + "1": "Du hast dich gut geschlagen. Bis zum nächsten Mal.", + "2": "Du hast dich gut geschlagen. Bis zum nächsten Mal." + } + }, + "winstrates_victor": { + "encounter": { + "1": "Das ist der Kampfgeist den ich sehen will! Ich mag dich!" + }, + "victory": { + "1": "Ahh! Du bist stärker als ich dachte!" + } + }, + "winstrates_victoria": { + "encounter": { + "1": "Mein Gott! Bist du nicht etwas jung?\n$Du musst ein ziemlich guter Trainer sein, um meinen Mann zu besiegen.\n$Jetzt bin ich wohl an der Reihe!" + }, + "victory": { + "1": "Waas? Wie stark bist du denn?" + } + }, + "winstrates_vivi": { + "encounter": { + "1": "Du bist stärker als Mama? Wow! Aber ich bin auch stark! Wirklich! Ehrlich!" + }, + "victory": { + "1": "Huh? Habe ich wirklich verloren?\nSchnief... Omaaa!" + } + }, + "winstrates_vicky": { + "encounter": { + "1": "Wie kannst du es wagen, meine kostbare Enkelin zum Weinen zu bringen!\n$Ich sehe, ich muss dir eine Lektion erteilen.\n$Mach dich bereit, eine Niederlage zu erleiden!" + }, + "victory": { + "1": "Wow! So stark!\nMeine Enkelin hat nicht gelogen." + } + }, + "winstrates_vito": { + "encounter": { + "1": "Ich habe zusammen mit meiner ganzen Familie trainiert, mit jedem von uns!\n$Ich verliere gegen niemanden!" + }, + "victory": { + "1": "Ich war besser als jeder in meiner Familie. Ich habe noch nie verloren..." + } + }, "brock": { "encounter": { "1": "Meine Expertise in Bezug auf Gesteins-Pokémon wird dich besiegen! Komm schon!", diff --git a/src/locales/de/egg.json b/src/locales/de/egg.json index dbece7e81f3..4097ac17578 100644 --- a/src/locales/de/egg.json +++ b/src/locales/de/egg.json @@ -11,6 +11,7 @@ "gachaTypeLegendary": "Erhöhte Chance auf legendäre Eier.", "gachaTypeMove": "Erhöhte Chance auf Eier mit seltenen Attacken.", "gachaTypeShiny": "Erhöhte Chance auf schillernde Eier.", + "eventType": "Geheimnisvolles Ereignis", "selectMachine": "Wähle eine Maschine.", "notEnoughVouchers": "Du hast nicht genug Ei-Gutscheine!", "tooManyEggs": "Du hast schon zu viele Eier!", @@ -23,4 +24,4 @@ "moveUPGacha": "Mehr\nEi-Attacken!", "shinyUPGacha": "Mehr\nSchillernde!", "legendaryUPGacha": "erscheint\nöfter!" -} \ No newline at end of file +} diff --git a/src/locales/de/modifier-select-ui-handler.json b/src/locales/de/modifier-select-ui-handler.json index 3de1222c3b4..fbc6820244a 100644 --- a/src/locales/de/modifier-select-ui-handler.json +++ b/src/locales/de/modifier-select-ui-handler.json @@ -8,5 +8,7 @@ "lockRaritiesDesc": "Setze die Seltenheit der Items fest. (Beeinflusst die Rollkosten).", "checkTeamDesc": "Überprüfe dein Team or nutze Formänderungsitems.", "rerollCost": "{{formattedMoney}}₽", - "itemCost": "{{formattedMoney}}₽" -} \ No newline at end of file + "itemCost": "{{formattedMoney}}₽", + "continueNextWaveButton": "Fortfahren", + "continueNextWaveDescription": "Zur nächsten Welle fortfahren." +} diff --git a/src/locales/de/modifier-type.json b/src/locales/de/modifier-type.json index 7c7972343d6..4f08727f9fd 100644 --- a/src/locales/de/modifier-type.json +++ b/src/locales/de/modifier-type.json @@ -68,6 +68,20 @@ "BaseStatBoosterModifierType": { "description": "Erhöht den {{stat}} Basiswert des Trägers um 10%. Das Stapellimit erhöht sich, je höher dein IS-Wert ist." }, + "PokemonBaseStatTotalModifierType": { + "name": "Pottrottsaft", + "description": "{{increaseDecrease}} alle Basiswerte des Trägers um {{statValue}}. Du wurdest von Pottrott {{blessCurse}}.", + "extra": { + "increase": "Erhöht", + "decrease": "Verringert", + "blessed": "gesegnet", + "cursed": "verflucht" + } + }, + "PokemonBaseStatFlatModifierType": { + "name": "Spezialität", + "description": "Erhöht den {{stats}}-Wert des Trägers um {{statValue}}. Nach einem komischen Traum gefunden." + }, "AllPokemonFullHpRestoreModifierType": { "description": "Stellt 100% der KP aller Pokémon her." }, @@ -401,7 +415,13 @@ "ENEMY_FUSED_CHANCE": { "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." } }, "SpeciesBoosterItem": { "LIGHT_BALL": { diff --git a/src/locales/de/move-trigger.json b/src/locales/de/move-trigger.json index 01b22429fb3..9b59c4b79ed 100644 --- a/src/locales/de/move-trigger.json +++ b/src/locales/de/move-trigger.json @@ -65,6 +65,7 @@ "suppressAbilities": "Die Fähigkeit von {{pokemonName}} wirkt nicht mehr!", "revivalBlessing": "{{pokemonName}} ist wieder fit und kampfbereit!", "swapArenaTags": "{{pokemonName}} hat die Effekte, die auf den beiden Seiten des Kampffeldes wirken, miteinander getauscht!", + "chillyReception": "{{pokemonName}} erzählt einen schlechten Witz, der nicht besonders gut ankommt...", "exposedMove": "{{pokemonName}} erkennt {{targetPokemonName}}!", "safeguard": "{{targetName}} wird durch Bodyguard geschützt!", "afterYou": "{{targetName}} lässt sich auf Galanterie ein!" diff --git a/src/locales/de/move.json b/src/locales/de/move.json index b7a42cb1787..f3502978edd 100644 --- a/src/locales/de/move.json +++ b/src/locales/de/move.json @@ -3129,7 +3129,7 @@ }, "auraWheel": { "name": "Aura-Rad", - "effect": "Mithilfe der in den Backentaschen gespeicherten Energie greift der Anwender an und erhöht seine Initiative. Der Typ der Attacke hängt von Morpekos Form ab." + "effect": "Mithilfe der in den Backentaschen gespeicherten Energie greift der Anwender an und erhöht seine Initiative. Wenn dies von Morpeko verwendet wird hängt der Typ der Attacke von dessen Form ab." }, "breakingSwipe": { "name": "Breitseite", diff --git a/src/locales/de/mystery-encounter-messages.json b/src/locales/de/mystery-encounter-messages.json new file mode 100644 index 00000000000..5c10b06a355 --- /dev/null +++ b/src/locales/de/mystery-encounter-messages.json @@ -0,0 +1,7 @@ +{ + "paid_money": "Du bezahlst {{amount, number}} ₽.", + "receive_money": "Du erhältst {{amount, number}} ₽!", + "affects_pokedex": "Beeinflusst Pokédex-Daten", + "cancel_option": "Zurück zur Auswahl der Begegnungsoptionen.", + "view_party_button": "Team überprüfen" +} diff --git a/src/locales/de/mystery-encounters/a-trainers-test-dialogue.json b/src/locales/de/mystery-encounters/a-trainers-test-dialogue.json new file mode 100644 index 00000000000..50413e24bc2 --- /dev/null +++ b/src/locales/de/mystery-encounters/a-trainers-test-dialogue.json @@ -0,0 +1,47 @@ +{ + "intro": "Ein sehr starker Trainer kommt auf dich zu...", + "buck": { + "intro_dialogue": "Yo, Trainer! Mein Name ist Avenaro.$Ich habe ein super Angebot für einen starken Trainer wie dich!$Ich trage zwei seltene Pokémon-Eier bei mir, aber ich möchte, dass sich jemand anderes um eines kümmert.$Wenn du mir beweisen kannst, dass du ein starker Trainer bist, werde ich dir das seltenere Ei geben!", + "accept": "Wohooo! Ich bin Feuer und Flamme!", + "decline": "Manno, es sieht so aus, als wäre dein Team nicht in Bestform.$Hier, lass mich dir helfen." + }, + "cheryl": { + "intro_dialogue": "Hallo mein Name ist Raissa, ich habe eine besondere Bitte an dich, einen starken Trainer.$Ich trage zwei seltene Pokémon-Eier bei mir, aber ich möchte, dass sich jemand anderes um eines kümmert.$Wenn du mir beweisen kannst, dass du ein starker Trainer bist, werde ich dir das seltenere Ei geben!", + "accept": "Ich hoffe, du bist bereit!", + "decline": "Ich verstehe, es sieht so aus, als wäre dein Team nicht in der besten Verfassung.$Hier, lass mich dir helfen." + }, + "marley": { + "intro_dialogue": "...@d{64} Ich bin Charlie.$Ich habe ein Angebot für dich...$Ich trage zwei Pokémon-Eier bei mir, aber ich möchte, dass sich jemand anderes um eines kümmert.$Wenn du stärker bist als ich, werde ich dir das seltenere Ei geben.", + "accept": "...So ist das also.", + "decline": "...Deine Pokémon sehen verletzt aus...Lass mich helfen." + }, + "mira": { + "intro_dialogue": "Hi, ich bin Orisa!$Ich habe eine Bitte an dich, einen starken Trainer.$Ich trage zwei seltene Pokémon-Eier bei mir, aber ich möchte, dass sich jemand anderes um eines kümmert.$Wenn du mir beweisen kannst, dass du ein starker Trainer bist, werde ich dir das seltenere Ei geben!", + "accept": "Du wirst Orisa herausfordern? Juhu!", + "decline": "Aww, kein Kampf? Das ist okay!$Hier, Orisa wird dein Team heilen!" + }, + "riley": { + "intro_dialogue": "Ich Urs, ich habe eine Bitte an dich, einen starken Trainer.$Ich trage zwei seltene Pokémon-Eier bei mir, aber ich möchte, dass sich jemand anderes um eines kümmert.$Wenn du mir beweisen kannst, dass du ein starker Trainer bist, werde ich dir das seltenere Ei geben!", + "accept": "Dieser Blick...Lass uns das machen.", + "decline": "Ich verstehe, dein Team sieht geschlagen aus.$Hier, lass mich dir helfen." + }, + "title": "Ein Trainer-Test", + "description": "Es scheint als würde dieser Trainer dir ein Ei geben, egal wie du dich entscheidest. Wenn du es jedoch schaffst, diesen starken Trainer zu besiegen, wirst du ein viel selteneres Ei erhalten.", + "query": "Was wirst du tun?", + "option": { + "1": { + "label": "Die Herausforderung annehmen", + "tooltip": "(-) Schwerer Kampf\n(+) Erhalte ein @[TOOLTIP_TITLE]{Sehr seltenes Ei}" + }, + "2": { + "label": "Die Herausforderung ablehnen", + "tooltip": "(+) Team wird geheilt\n(+) Erhalte ein @[TOOLTIP_TITLE]{Ei}" + } + }, + "eggTypes": { + "rare": "seltenes Ei", + "epic": "episches Ei", + "legendary": "legendäres Ei" + }, + "outro": "{{statTrainerName}} gibt dir ein {{eggType}}!" +} diff --git a/src/locales/de/mystery-encounters/absolute-avarice-dialogue.json b/src/locales/de/mystery-encounters/absolute-avarice-dialogue.json new file mode 100644 index 00000000000..eb4d06fc527 --- /dev/null +++ b/src/locales/de/mystery-encounters/absolute-avarice-dialogue.json @@ -0,0 +1,25 @@ +{ + "intro": "Ein {{greedentName}} überfällt dich und stiehlt die Beeren deines Teams!", + "title": "Absoluter Geiz", + "description": "Der {{greedentName}} hat dich total überrascht und all deine Beeren gestohlen!\nEs sieht so aus, als ob das {{greedentName}} sie gleich essen würde, aber dann hält es inne und sieht dich interessiert an.", + "query": "Was wirst du tun?", + "option": { + "1": { + "label": "Kampf beginnen", + "tooltip": "(-) Schwerer Kampf\n(+) Belohnungen aus seinem Beerenversteck", + "selected": "Der {{greedentName}} füllt seine Backen und bereitet sich auf den Kampf vor!", + "boss_enraged": "{{greedentName}} Liebe für Essen hat es aufgebracht!", + "food_stash": "Es scheint, als ob das {{greedentName}} ein riesiges Nahrungslager bewacht hat!$Jedes Pokémon in deinem Team erhält {{foodReward}}!" + }, + "2": { + "label": "Verhandeln", + "tooltip": "(+) Einige Beeren zurückbekommen", + "selected": "Deine Bitte berührt das {{greedentName}}.$Es gibt dir nicht alle Beeren zurück, aber wirft dir trotzdem ein paar zu." + }, + "3": { + "label": "Beeren überlassen", + "tooltip": "(-) Alle Beeren verlieren\n(?) Das {{greedentName}} wird dich mögen", + "selected": "Das {{greedentName}} verschlingt den gesamten Beerenversteck in einem Blitz!$Es klopft sich auf den Bauch und sieht dich dankbar an.$Vielleicht könntest du ihm auf deinem Abenteuer mehr Beeren geben...$@s{level_up_fanfare}Das {{greedentName}} möchte sich deiner Gruppe anschließen!" + } + } +} \ No newline at end of file diff --git a/src/locales/de/mystery-encounters/an-offer-you-cant-refuse-dialogue.json b/src/locales/de/mystery-encounters/an-offer-you-cant-refuse-dialogue.json new file mode 100644 index 00000000000..67ac2b1e7f3 --- /dev/null +++ b/src/locales/de/mystery-encounters/an-offer-you-cant-refuse-dialogue.json @@ -0,0 +1,26 @@ +{ + "intro": "Du wirst von einem reich aussehenden Jungen aufgehalten.", + "speaker": "Reicher Junge", + "intro_dialogue": "Guten Tag!$Ich kann nicht anders, als zu bemerken, dass dein\n{{strongestPokemon}} einfach göttlich aussieht!$Ich habe schon immer ein Pokémon wie dieses haben wollen!$Ich würde es dir großzügig bezahlen, und dir auch diesen alten Kram geben!", + "title": "Ein Angebot das du nicht ablehnen kannst", + "description": "Dir wird ein @[TOOLTIP_TITLE]{Schillerpin} und {{price, money}} für dein {{strongestPokemon}} angeboten!\nEs ist ein extrem gutes Angebot, aber kannst du es wirklich ertragen, dich von einem so starken Teammitglied zu trennen?", + "query": "Was wirst du tun?", + "option": { + "1": { + "label": "Den Deal annehmen", + "tooltip": "(-) Verliere {{strongestPokemon}}\n(+) Erhalte einen @[TOOLTIP_TITLE]{Schillerpin}\n(+) Erhalte {{price, money}}", + "selected": "Wunderbar!@d{32} Komm mit, {{strongestPokemon}}!$Es ist Zeit, dich allen im Yachtclub zu zeigen!$Die werden so neidisch sein!" + }, + "2": { + "label": "Das Kind erpressen", + "tooltip": "(+) {{option2PrimaryName}} setzt {{moveOrAbility}} ein\n(+) Erhalte {{price, money}}", + "tooltip_disabled": "Dein Pokémon muss bestimmte Attacken oder Fähigkeiten haben, um diese Option zu wählen", + "selected": "Mein Gott, wir werden ausgeraubt, {{liepardName}}!$Du wirst von meinen Anwälten hören!" + }, + "3": { + "label": "Weggehen", + "tooltip": "(-) Keine Belohnung", + "selected": "Was ein beschissener Tag...$Ach, was solls. Lass uns zurück zum Yachtclub gehen, {{liepardName}}." + } + } +} \ No newline at end of file diff --git a/src/locales/de/mystery-encounters/berries-abound-dialogue.json b/src/locales/de/mystery-encounters/berries-abound-dialogue.json new file mode 100644 index 00000000000..e7ff57a32ef --- /dev/null +++ b/src/locales/de/mystery-encounters/berries-abound-dialogue.json @@ -0,0 +1,26 @@ +{ + "intro": "Da ist ein riesiger Beerenstrauch in der Nähe dieses Pokémons!", + "title": "Überall Beeren", + "description": "Es scheint, als ob ein starkes Pokémon einen Beerenstrauch bewacht. Ein Kampf wäre der direkte Weg, aber es sieht stark aus. Vielleicht könnte ein schnelles Pokémon ein paar Beeren schnappen, ohne erwischt zu werden?", + "query": "Was wirst du tun?", + "berries": "Berren!", + "option": { + "1": { + "label": "Kampf beginnen", + "tooltip": "(-) Schwerer Kampf\n(+) Beeren erhalten", + "selected": "Du trittst dem Pokémon ohne Furcht entgegen." + }, + "2": { + "label": "Zum Strauch rennen", + "tooltip": "(-) {{fastestPokemon}} nutzt seine Geschwindigkeit\n(+) Beeren erhalten", + "selected": "Dein {{fastestPokemon}} rennt zum Strauch!$Es schafft es, {{numBerries}} zu schnappen, bevor das {{enemyPokemon}} reagieren kann!$Du ziehst dich schnell mit deiner neuen Beute zurück.", + "selected_bad": "Dein {{fastestPokemon}} rennt zum Strauch!$Oh nein! Das {{enemyPokemon}} war schneller und hat den Weg blockiert!", + "boss_enraged": "Das gegnerische {{enemyPokemon}} ist wütend geworden!" + }, + "3": { + "label": "Verlassen", + "tooltip": "(-) Keine Belohnung", + "selected": "Du lässt das starke Pokémon mit seinem Item zurück und gehst weiter." + } + } +} \ No newline at end of file diff --git a/src/locales/de/mystery-encounters/bug-type-superfan-dialogue.json b/src/locales/de/mystery-encounters/bug-type-superfan-dialogue.json new file mode 100644 index 00000000000..b298cff3dd7 --- /dev/null +++ b/src/locales/de/mystery-encounters/bug-type-superfan-dialogue.json @@ -0,0 +1,40 @@ +{ + "intro": "Ein ungewöhnlicher Trainer mit allerlei Käfer-Schnickschnack versperrt dir den Weg!", + "intro_dialogue": "Hey, Trainer! Ich bin auf einer Mission, um die seltensten Käfer-Pokémon zu finden!$Du musst Käfer-Pokémon auch lieben, oder? Jeder liebt Käfer-Pokémon!", + "title": "Der Käfersammler-Superfan", + "speaker": "Käfersammler-Superfan", + "description": "Der Trainer plappert drauf los, ohne auf eine Antwort zu warten...\nEs scheint, als gäbe es nur einen Weg, um aus dieser Situation herauszukommen... Die Aufmerksamkeit des Trainers zu erregen!", + "query": "Was wirst du tun?", + "option": { + "1": { + "label": "Pokémon-Kampf", + "tooltip": "(-) Herausfordernder Kampf\n(+) Einem Pokémon eine Käfer-Attacke beibringen", + "selected": "Ein Pokémon-Kampf? Meine Käfer-Pokémon sind mehr als bereit für dich!" + }, + "2": { + "label": "Käfer-Pokémon zeigen", + "tooltip": "(+) Erhalte ein Geschenk", + "disabled_tooltip": "Du brauchst mindestens 1 Käfer-Pokémon in deinem Team, um das auszuwählen.", + "selected": "Du zeigst dem Trainer all deine Käfer-Pokémon...", + "selected_0_to_1": "Huh? Du hast nur {{numBugTypes}} Käfer-Pokémon...$Ich verschwende hier meine Zeit...", + "selected_2_to_3": "Hey, du hast {{numBugTypes}}! Nicht schlecht.$Hier, das könnte dir auf deiner Reise helfen, mehr zu fangen!", + "selected_4_to_5": "Was? Du hast {{numBugTypes}}? Nicht schlecht!$Du bist noch nicht ganz auf meinem Level, aber ich kann mich in dir erkennen! $Nimm das, mein junger Padawan!", + "selected_6": "Wow! {{numBugTypes}}!$Du musst Käfer-Pokémon fast so sehr lieben wie ich!$Hier, nimm das als Zeichen unserer Kameradschaft!" + }, + "3": { + "label": "Verschenke ein Käfer-Item", + "tooltip": "(-) Du gibst dem Trainer ein {{requiredBugItems}}\n(+) Erhalte ein Geschenk", + "disabled_tooltip": "Du brauchst ein {{requiredBugItems}}, um das auszuwählen.", + "select_prompt": "Wählen Sie ein Item aus, um es zu verschenken.", + "invalid_selection": "Das Pokémon hat kein solches Item.", + "selected": "Du gibst {{selectedItem}} an dem Trainer .", + "selected_dialogue": "Wow! {{selectedItem}}, für mich? Du bist nicht so schlecht, Junge!$Als Zeichen meiner Anerkennung möchte ich, dass du dieses besondere Geschenk bekommst!$Es wurde in meiner Familie weitergegeben, und jetzt möchte ich, dass du es hast!" + } + }, + "battle_won": "Dein Wissen und Können waren perfekt, um unsere Schwächen auszunutzen!$Als Gegenleistung für die wertvolle Lektion, erlaube mir, einem deiner Pokémon eine Käfer-Attacke beizubringen!", + "teach_move_prompt": "Wähle eine Attacke aus die du deinem Pokémon beibringen möchtest.", + "confirm_no_teach": "Bist du sicher, dass du keine dieser großartigen Attacken lernen möchtest?", + "outro": "Ich sehe großartige Käfer-Pokémon in deiner Zukunft! Mögen sich unsere Wege wieder kreuzen!$Mach's gut!", + "numBugTypes_one": "{{count}} Käfer-Pokémon", + "numBugTypes_other": "{{count}} Käfer-Pokémon" +} diff --git a/src/locales/de/mystery-encounters/clowning-around-dialogue.json b/src/locales/de/mystery-encounters/clowning-around-dialogue.json new file mode 100644 index 00000000000..5dce7b515a9 --- /dev/null +++ b/src/locales/de/mystery-encounters/clowning-around-dialogue.json @@ -0,0 +1,35 @@ +{ + "intro": "Es ist...@d{64} ein Clown?", + "speaker": "Clown", + "intro_dialogue": "Du tollpatschiger Trottel, bereite dich auf einen brillanten Kampf vor!\nDu wirst von diesem prügelnden Straßenmusikanten besiegt!", + "title": "Rumgeblödel", + "description": "Irgendwas stimmt nicht mit dieser Begegnung. Der Clown scheint darauf aus zu sein, dich zu einem Kampf zu provozieren, aber zu welchem Zweck?\n\nDas {{blacephalonName}} ist besonders seltsam, als hätte es @[TOOLTIP_TITLE]{seltsame Typen} und eine @[TOOLTIP_TITLE]{Fähigkeit.}", + "query": "Was wirst du tun?", + "option": { + "1": { + "label": "Kampf beginnen", + "tooltip": "(-) Komischer Kampf\n(?) Beeinflusst Pokémon-Fähigkeiten", + "selected": "Deine erbärmlichen Pokémon sind bereit für eine erbärmliche Vorstellung!", + "apply_ability_dialogue": "Eine sensationelle Vorstellung! Dein Können passt zu einer sensationellen Fähigkeit als Beute!", + "apply_ability_message": "Der Clown bietet an, die Fähigkeit eines deiner Pokémon dauerhaft auf {{ability}} zu wechseln!", + "ability_prompt": "Soll eines deiner Pokémon die Fähigkeit {{ability}} dauerhaft erlangen?", + "ability_gained": "@s{level_up_fanfare}{{chosenPokemon}} hat die Fähigkeit {{ability}} erhalten!" + }, + "2": { + "label": "Nicht provozieren lassen", + "tooltip": "(-) Der Clown ist beleidigt\n(?) Beeinflusst Pokémon-Items", + "selected": "Du erbärmlicher Feigling, du verweigerst einen wunderbaren Kampf? Fühle meinen Zorn!", + "selected_2": "Das {{blacephalonName}} des Clowns verwendet Trickbetrug! Alle Items deines {{switchPokemon}} wurden zufällig vertauscht!", + "selected_3": "Meine perfekte List hat dich in die Irre geführt!" + }, + "3": { + "label": "Die Beleidigungen erwidern", + "tooltip": "(-) Den Clown verärgern\n(?) Beeinflusst Pokémon-Typen", + "selected": "Du erbärmlicher Feigling verweigerst einen wunderbaren Kampf? Fühle meinen Zorn!", + "selected_2": "Das {{blacephalonName}} des Clowns verwendet eine seltsame Attacke! Alle Typen deines Teams wurden zufällig vertauscht!", + "selected_3": "Meine perfekte List hat dich in die Irre geführt!" + } + + }, + "outro": "Der Clown und seine Kumpanen verschwinden in einer Rauchwolke." +} \ No newline at end of file diff --git a/src/locales/de/mystery-encounters/dancing-lessons-dialogue.json b/src/locales/de/mystery-encounters/dancing-lessons-dialogue.json new file mode 100644 index 00000000000..3ea02955309 --- /dev/null +++ b/src/locales/de/mystery-encounters/dancing-lessons-dialogue.json @@ -0,0 +1,27 @@ +{ + "intro": "Ein {{oricorioName}} tanzt traurig allein, ohne einen Partner.", + "title": "Tanzstunden", + "description": "Das {{oricorioName}} scheint nicht aggressiv zu sein, im Gegenteil, es scheint traurig zu sein.\nVielleicht möchte es einfach nur mit jemandem tanzen...", + "query": "Was wirst du tun?", + "option": { + "1": { + "label": "Kampf beginnen", + "tooltip": "(-) Schwerer Kampf\n(+) Erhalte ein Stab", + "selected": "Das {{oricorioName}} ist verstört und verteidigt sich!", + "boss_enraged": "Das {{oricorioName}} ist wütend und steigert seine Werte!" + }, + "2": { + "label": "Lerne den Tanz", + "tooltip": "(+) Bringe einem Pokémon Wecktanz bei", + "selected": "Du schaust dem {{oricorioName}} genau zu, wie es seinen Tanz aufführt...$@s{level_up_fanfare}Dein {{selectedPokemon}} hat von {{oricorioName}} gelernt!" + }, + "3": { + "label": "Zeig einen Tanz", + "tooltip": "(-) Bringe dem {{oricorioName}} einen Tanz bei\n(+) Das {{oricorioName}} wird dich mögen", + "disabled_tooltip": "Dein Pokémon muss einen Tanz beherrschen, um diese Option zu wählen.", + "select_prompt": "Wählen Sie eine Tanzattacke aus, die verwendet werden soll.", + "selected": "Das {{oricorioName}} schaut fasziniert zu, wie {{selectedPokemon}} {{selectedMove}} vorführt!$Es liebt die Vorführung!$@s{level_up_fanfare}Das {{oricorioName}} möchte sich dir anschließen!" + } + }, + "invalid_selection": "Das Pokémon kennt keine Tanzattacke" +} \ No newline at end of file diff --git a/src/locales/de/mystery-encounters/dark-deal-dialogue.json b/src/locales/de/mystery-encounters/dark-deal-dialogue.json new file mode 100644 index 00000000000..85c8d4565bb --- /dev/null +++ b/src/locales/de/mystery-encounters/dark-deal-dialogue.json @@ -0,0 +1,24 @@ + + +{ + "intro": "Ein seltsamer Mann in einem zerrissenen Mantel steht dir im Weg...", + "speaker": "Seltsamer Mann", + "intro_dialogue": "Hey, du!$Ich habe an einem neuen Gerät gearbeitet, um die verborgene Kraft eines Pokémon zum Vorschein zu bringen!$Es bindet die Atome des Pokémon auf molekularer Ebene vollständig neu und bringt sie in eine$weitaus mächtigere Form.$Hehe...@d{64} Ich brauche nur ein paar Opf-@d{32} Ähm, Testpersonen, um zu beweisen, dass es funktioniert.", + "title": "Dunkler Handel", + "description": "Der verstörende Typ hält einige Pokébälle hoch.\n\"Es wird such für dich lohnen! Du kannst diese tollen Pokébälle als Bezahlung haben, alles was ich brauche ist ein Pokémon aus deinem Team! Hehe...\"", + "query": "Was wirst du tun?", + "option": { + "1": { + "label": "Aktzeptieren", + "tooltip": "(+) 5 Roguebälle\n(?) Ein zufälliges Pokémon wird verbessert", + "selected_dialogue": "Lass mich mal sehen...${{pokeName}} ist eine gute Wahl!$Denk dran, ich bin nicht verantwortlich, wenn etwas schief geht!@d{32} Hehe...", + "selected_message": "Der Mann übergibt dir 5 Roguebälle.${{pokeName}} springt in die seltsame Maschine...$Blinkende Lichter und seltsame Geräusche kommen aus der Maschine!$...@d{96} Etwas kommt aus der Maschine,\nwütend und wild!" + }, + "2": { + "label": "Ablehnen", + "tooltip": "(-) Keine Belohnung", + "selected": "Du willst einem armen Kerl nicht helfen? Pah!" + } + }, + "outro": "Nach der schrecklichen Begegnung, sammelst du dich und gehst weiter." +} \ No newline at end of file diff --git a/src/locales/de/mystery-encounters/delibirdy-dialogue.json b/src/locales/de/mystery-encounters/delibirdy-dialogue.json new file mode 100644 index 00000000000..34ca9666d09 --- /dev/null +++ b/src/locales/de/mystery-encounters/delibirdy-dialogue.json @@ -0,0 +1,29 @@ + + +{ + "intro": "Ein Schwarm {{delibirdName}} ist aufgetaucht!", + "title": "Botogel-Bande", + "description": "Die {{delibirdName}} schauen dich erwartungsvoll an, als ob sie etwas wollen. Vielleicht würde es sie zufriedenstellen, wenn du ihnen ein Item oder etwas Geld gibst?", + "query": "Was möchtest du ihnen geben?", + "invalid_selection": "Das Pokémon hat kein solches Item.", + "option": { + "1": { + "label": "Geld geben", + "tooltip": "(-) Den {{delibirdName}} {{money, money}} geben\n(+) Erhalte ein Geschenk", + "selected": "Du wirfst das Geld zu den {{delibirdName}}, die aufgeregt miteinander schnattern.$Sie drehen sich zu dir um und geben dir glücklich ein Geschenk!" + }, + "2": { + "label": "Futter geben", + "tooltip": "(-) Gib den {{delibirdName}} eine Beere oder einen Belebersamen\n(+) Erhalte ein Geschenk", + "select_prompt": "Wähle ein Item aus.", + "selected": "Du wirfst {{chosenItem}} zu den {{delibirdName}}, die aufgeregt miteinander schnattern.$Sie drehen sich zu dir um und geben dir glücklich ein Geschenk!" + }, + "3": { + "label": "Ein Item geben", + "tooltip": "(-) Gebe den {{delibirdName}} ein Item\n(+) Erhalte ein Geschenk", + "select_prompt": "Wähle ein Item aus.", + "selected": "Du wirfst {{chosenItem}} zu den {{delibirdName}}, die aufgeregt miteinander schnattern.$Sie drehen sich zu dir um und geben dir glücklich ein Geschenk!" + } + }, + "outro": "Die {{delibirdName}} watscheln glücklich davon.$Was für ein seltsamer kleiner Austausch!" +} \ No newline at end of file diff --git a/src/locales/de/mystery-encounters/department-store-sale-dialogue.json b/src/locales/de/mystery-encounters/department-store-sale-dialogue.json new file mode 100644 index 00000000000..66e41975a31 --- /dev/null +++ b/src/locales/de/mystery-encounters/department-store-sale-dialogue.json @@ -0,0 +1,27 @@ +{ + "intro": "Es ist eine Dame mit vielen Einkaufstüten.", + "speaker": "Einkäuferin", + "intro_dialogue": "Hallo! Bist du auch wegen der tollen Angebote hier?$Es gibt einen speziellen Gutschein, den du während des Verkaufs einlösen kannst!$Ich habe einen zusätzlichen. Hier, bitte!", + "title": "Einkaufszentrum-Verkauf", + "description": "Es gibt Angebote in jede Richtung! Es sieht so aus, als ob es 4 Kassen gibt, an denen du den Gutschein gegen verschiedene Artikel eintauschen kannst. Die Möglichkeiten sind endlos!", + "query": "Welche Kasse wählst du?", + "option": { + "1": { + "label": "TM-Kasse", + "tooltip": "(+) TM Shop" + }, + "2": { + "label": "Nährstoff-Kasse", + "tooltip": "(+) Nährstoff Shop" + }, + "3": { + "label": "Kampf-Item-Kasse", + "tooltip": "(+) X-Item Shop" + }, + "4": { + "label": "Pokéball-Kasse", + "tooltip": "(+) Pokéball Shop" + } + }, + "outro": "Was für ein Schnäppchen! Du solltest öfter hier einkaufen." +} \ No newline at end of file diff --git a/src/locales/de/mystery-encounters/field-trip-dialogue.json b/src/locales/de/mystery-encounters/field-trip-dialogue.json new file mode 100644 index 00000000000..61e6d4d9367 --- /dev/null +++ b/src/locales/de/mystery-encounters/field-trip-dialogue.json @@ -0,0 +1,31 @@ +{ + "intro": "Eine Lehrerin und ein paar Schulkinder stehen auf einmal vor dir!", + "speaker": "Lehrerin", + "intro_dialogue": "Hallo! Könntest du eine Minute für meine Schüler erübrigen?$Ich bringe ihnen gerade bei, wie Pokémon-Attacken funktionieren und würde ihnen gerne$eine Demonstration zeigen.$Würdest du uns eine Attacke deines Pokémon vorführen?", + "title": "Exkursion", + "description": "Eine Lehrerin fragt nach einer Attackenvorführung eines Pokémon. Je nachdem, welche Attacke du wählst, hat sie vielleicht etwas Nützliches für dich als Belohnung.", + "query": "Welchen Attacken-Typ wählst du?", + "option": { + "1": { + "label": "Physische Attacke", + "tooltip": "(+) Physische Item-Belohnungen" + }, + "2": { + "label": "Spezielle Attacke", + "tooltip": "(+) Spezielle Item-Belohnungen" + }, + "3": { + "label": "Status-Attacke", + "tooltip": "(+) Status Item-Belohnungen" + }, + "selected": "{{pokeName}} zeigt eine beeindruckende Vorführung von {{move}}!" + }, + "second_option_prompt": "Wähle eine Attacke die dein Pokémon einsetzen soll.", + "incorrect": "...$Das ist keine {{moveCategory}}Attacke!\nEs tut mir leid, aber ich kann dir nichts geben.$Kommt Kinder, wir suchen uns woanders einen besseren Trainer.", + "incorrect_exp": "Es scheint, als hättest du eine wertvolle Lektion gelernt?$Dein Pokémon hat auch etwas Erfahrung gesammelt.", + "correct": "Ich dank dir vielmals für deine Freundlichkeit!$Ich hoffe, diese Items sind nützlich für dich.", + "correct_exp": "{{pokeName}} hat auch etwas wertvolle Erfahrung gesammelt!", + "status": "Status-", + "physical": "physische ", + "special": "spezielle " +} \ No newline at end of file diff --git a/src/locales/de/mystery-encounters/fiery-fallout-dialogue.json b/src/locales/de/mystery-encounters/fiery-fallout-dialogue.json new file mode 100644 index 00000000000..167efd48b53 --- /dev/null +++ b/src/locales/de/mystery-encounters/fiery-fallout-dialogue.json @@ -0,0 +1,26 @@ +{ + "intro": "Du hast einen Sturm aus Rauch und Asche entdeckt!", + "title": "Feurige Folgen", + "description": "Die umherwirbelnde Asche und Glut haben die Sicht auf fast Null reduziert. Es scheint, als könnte es eine... Quelle geben, die diese Bedingungen verursacht. Aber was könnte hinter einem Phänomen dieser Größe stecken?", + "query": "Was wirst du tun?", + "option": { + "1": { + "label": "Finde die Quelle", + "tooltip": "(?) Entdecke die Quelle\n(-) Schwieriger Kampf", + "selected": "Du hast die Quelle des Sturms gefunden!$Es sind zwei {{volcaronaName}}, die in der Mitte eines Paarungstanzes sind!$Sie nehmen die Unterbrechung nicht gut auf und greifen an!" + }, + "2": { + "label": "Sich einigeln", + "tooltip": "(-) Die Folgen des Wetters erleiden", + "selected": "Die Folgen des Wetters sind verheerend!$Deine Pokémon nehmen 20% ihrer maximalen KP als Schaden!", + "target_burned": "Dein {{burnedPokemon}} wurde auch verbrannt!" + }, + "3": { + "label": "Dein Feuer-Pokémon hilft", + "tooltip": "(+) Das Wetter klärt auf\n(+) Erhalte ein Holzkohle", + "disabled_tooltip": "Du benötigst mindestens 2 Feuer-Pokémon, um diese Option auszuwählen", + "selected": "Dein {{option3PrimaryName}} und {{option3SecondaryName}} führen dich zu zwei {{volcaronaName}}, die in der Mitte eines Paarungstanzes sind!$Zum Glück können deine Pokémon sie beruhigen,und sie ziehen ohne Probleme ab." + } + }, + "found_charcoal": "Nachdem das Wetter aufklart, entdeckt dein {{leadPokemon}} etwas auf dem Boden.$@s{item_fanfare}{{leadPokemon}} erhält eine Holzkohle!" +} \ No newline at end of file diff --git a/src/locales/de/mystery-encounters/fight-or-flight-dialogue.json b/src/locales/de/mystery-encounters/fight-or-flight-dialogue.json new file mode 100644 index 00000000000..33ed0d3f95a --- /dev/null +++ b/src/locales/de/mystery-encounters/fight-or-flight-dialogue.json @@ -0,0 +1,25 @@ +{ + "intro": "Etwas Glänzendes liegt auf dem Boden in der Nähe dieses Pokémons!", + "title": "Kampf oder Flucht", + "description": "Es scheint, als würde ein starkes Pokémon ein Item bewachen. Ein Kampf wäre der direkte Weg, aber es sieht stark aus. Vielleicht könntest du das Item stehlen, wenn du das richtige Pokémon für den Job hast.", + "query": "Was wirst du tun?", + "option": { + "1": { + "label": "Kampf beginnen", + "tooltip": "(-) Schwerer Kampf\n(+) Neues Item", + "selected": "Du trittst dem Pokémon ohne Furcht entgegen.", + "stat_boost": "Die Stärke von {{enemyPokemon}} erhöht einen seiner Werte!" + }, + "2": { + "label": "Das Item stehlen", + "disabled_tooltip": "Dein Pokémon muss eine bestimmte Attacken beherrschen, um diese Option zu wählen.", + "tooltip": "(+) {{option2PrimaryName}} setzt {{option2PrimaryMove}} ein", + "selected": ".@d{32}.@d{32}.@d{32}$Dein {{option2PrimaryName}} hilft dir und setzt {{option2PrimaryMove}} ein!$Du hast das Item gestohlen!" + }, + "3": { + "label": "Verlassen", + "tooltip": "(-) Keine Belohnung", + "selected": "Du lässt das starke Pokémon mit seinem Item zurück und gehst weiter." + } + } +} \ No newline at end of file diff --git a/src/locales/de/mystery-encounters/fun-and-games-dialogue.json b/src/locales/de/mystery-encounters/fun-and-games-dialogue.json new file mode 100644 index 00000000000..9e38d0a4599 --- /dev/null +++ b/src/locales/de/mystery-encounters/fun-and-games-dialogue.json @@ -0,0 +1,30 @@ +{ + "intro_dialogue": "Kommen Sie näher, meine Damen und Herren!$Versuchen Sie Ihr Glück mit dem brandneuen {{wobbuffetName}}-Hau-den-Lukas!", + "speaker": "Animateur", + "title": "Spaß und Spiele!", + "description": "Du hast ein {{wobbuffetName}} gefunden, das ein Spiel spielt! Du hast @[TOOLTIP_TITLE]{3 Züge}, um das {{wobbuffetName}} so nah wie möglich an @[TOOLTIP_TITLE]{1 KP} heranzubringen, @[TOOLTIP_TITLE]{ohne es zu besiegen}, damit es eine riesige Gegenattacke auf der Glockenmaschine ausführen kann.\nAber sei vorsichtig! Wenn du das {{wobbuffetName}} besiegst, musst du die Kosten für die Wiederbelebung bezahlen!", + "query": "Möchtest du spielen?", + "option": { + "1": { + "label": "Das Spiel spielen", + "tooltip": "(-) Zahle {{option1Money, money}}\n(+) Spiele {{wobbuffetName}} Hau-den-Lukas", + "selected": "Zeit dein Glück herauszufordern!" + }, + "2": { + "label": "Weggehen", + "tooltip": "(-) Keine Belohnung", + "selected": "Du beeilst dich auf deinem Weg, mit einem leichten Gefühl der Reue." + } + }, + "ko": "Oh nein! Das {{wobbuffetName}} ist ohnmächtig geworden!$Du verlierst das Spiel und musst die Kosten für die Wiederbelebung bezahlen...", + "charging_continue": "Das {{wobbuffetName}} lädt seine Gegenattacke auf!", + "turn_remaining_3": "Drei Runden verbleiben!", + "turn_remaining_2": "Zwei Runden verbleiben!", + "turn_remaining_1": "Nur noch eine Runde!", + "end_game": "Die Zeit ist um!$Das {{wobbuffetName}} holt zum Gegenangriff aus und@d{16}.@d{16}.@d{16}.", + "best_result": "Das {{wobbuffetName}} schlägt so hart auf den Knopf, dass die Glocke vom oberen Teil abbricht!$Du gewinnst den Hauptpreis!", + "great_result": "Das {{wobbuffetName}} schlägt den Knopf so hart, dass die Glocke fast getroffen wird!$So nah! Du gewinnst den zweiten Preis!", + "good_result": "Das {{wobbuffetName}} trifft den Knopf stark genug, um die Hälfte der Skala zu erreichen!$Du verdienst den dritten Preis!", + "bad_result": "Das {{wobbuffetName}} trifft den Knopf kaum und nichts passiert...$Oh nein! Du gewinnst nichts!", + "outro": "Das war ein lustiges kleines Spiel!" +} \ No newline at end of file diff --git a/src/locales/de/mystery-encounters/global-trade-system-dialogue.json b/src/locales/de/mystery-encounters/global-trade-system-dialogue.json new file mode 100644 index 00000000000..f9b2ac605bf --- /dev/null +++ b/src/locales/de/mystery-encounters/global-trade-system-dialogue.json @@ -0,0 +1,32 @@ +{ + "intro": "Es ist eine Schnittstelle für die Globale Tauschstation, das GTS.", + "title": "Das GTS", + "description": "Ah, das GTS! Ein technologisches Wunder, mit dem du dich mit jedem auf der Welt verbinden kannst, um Pokémon mit ihnen zu tauschen! Wird das Glück dir heute hold sein?", + "query": "Was wirst du tun?", + "option": { + "1": { + "label": "Tauschangebote prüfen", + "tooltip": "(+) Wähle ein Tauschangebot für eines deiner Pokémon aus", + "trade_options_prompt": "Wähle ein Pokémon aus, das du erhalten möchtest." + }, + "2": { + "label": "Zaubertausch", + "tooltip": "(+) Seine eine deiner Pokémon an die GTS und erhalte ein zufälliges Pokémon im Austausch" + }, + "3": { + "label": "Tausche ein Item", + "trade_options_prompt": "Wähle ein Item aus, das du senden möchtest.", + "invalid_selection": "Dieses Pokémon hat keine Items die getauscht werden können.", + "tooltip": "(+) Sende eines deiner Items an die GTS und erhalte ein zufälliges Item im Austausch" + }, + "4": { + "label": "Weggehen", + "tooltip": "(-) Keine Belohnung", + "selected": "Heute ist keine Zeit zum Tauschen! Du gehst weiter." + } + }, + "pokemon_trade_selected": "{{tradedPokemon}} wird an {{tradeTrainerName}} gesendet.", + "pokemon_trade_goodbye": "Machs gut, {{tradedPokemon}}!", + "item_trade_selected": "{{chosenItem}} wird an {{tradeTrainerName}} gesendet.$.@d{64}.@d{64}.@d{64}\n@s{level_up_fanfare}Tausch abgeschlossen!$Du hast {{itemName}} von {{tradeTrainerName}} erhalten!", + "trade_received": "@s{evolution_fanfare}{{tradeTrainerName}} hat dir {{received}} geschickt!" +} \ No newline at end of file diff --git a/src/locales/de/mystery-encounters/lost-at-sea-dialogue.json b/src/locales/de/mystery-encounters/lost-at-sea-dialogue.json new file mode 100644 index 00000000000..3ce269fbee8 --- /dev/null +++ b/src/locales/de/mystery-encounters/lost-at-sea-dialogue.json @@ -0,0 +1,28 @@ +{ + "intro": "Du warst auf dem Meer umhergeirrt und effektiv nirgendwohin gekommen.", + "title": "Verloren auf See", + "description": "Die See ist in diesem Gebiet stürmisch und du hast kaum noch Energie. Das ist schlecht. Gibt es einen Ausweg aus der Situation?", + "query": "Was wirst du tun?", + "option": { + "1": { + "label": "{{option1PrimaryName}} kann helfen", + "label_disabled": "Kein {{option1RequiredMove}}", + "tooltip": "(+) {{option1PrimaryName}} rettet dich\n(+) {{option1PrimaryName}} erhält etwas EP", + "tooltip_disabled": "Du hast kein Pokémon, das {{option1RequiredMove}} erlernen kann", + "selected": "{{option1PrimaryName}} schwimmt voraus und führt dich zurück auf den richtigen Weg.${{option1PrimaryName}} scheint auch stärker geworden zu sein in dieser Zeit der Not!" + }, + "2": { + "label": "{{option2PrimaryName}} kann helfen", + "label_disabled": "Kein {{option2RequiredMove}}", + "tooltip": "(+) {{option2PrimaryName}} rettet dich\n(+) {{option2PrimaryName}} erhält etwas EP", + "tooltip_disabled": "Du hast kein Pokémon, das {{option2RequiredMove}} erlernen kann", + "selected": "{{option2PrimaryName}} fliegt vor deinem Boot und führt dich zurück auf den richtigen Weg.${{option2PrimaryName}} scheint auch stärker geworden zu sein in dieser Zeit der Not!" + }, + "3": { + "label": "Umherirren", + "tooltip": "(-) Jedes deiner Pokémon verliert {{damagePercentage}}% seiner maximalen KP", + "selected": "Du treibst im Boot umher, steuerst ohne Richtung, bis du endlich ein Wahrzeichen siehst, das du wiedererkennst.$Du und deine Pokémon sind erschöpft von dem ganzen Vorfall." + } + }, + "outro": "Du bist wieder auf dem richtigen Weg." +} \ No newline at end of file diff --git a/src/locales/de/mystery-encounters/mysterious-challengers-dialogue.json b/src/locales/de/mystery-encounters/mysterious-challengers-dialogue.json new file mode 100644 index 00000000000..040a8c269e0 --- /dev/null +++ b/src/locales/de/mystery-encounters/mysterious-challengers-dialogue.json @@ -0,0 +1,22 @@ +{ + "intro": "Mysteriöse Herausforderer sind aufgetaucht!", + "title": "Mysteriöse Herausforderer", + "description": "Wenn du einen Herausforderer besiegst, könntest du sie beeindrucken und eine Belohnung erhalten. Aber manche sehen ziemlich stark aus. Bist du bereit für die Herausforderung?", + "query": "Wen wirst du bekämpfen?", + "option": { + "1": { + "label": "Schlauer Trainer", + "tooltip": "(-) Standardkampf\n(+) TM Belohnungen" + }, + "2": { + "label": "Starker Trainer", + "tooltip": "(-) Harter Kampf\n(+) Gute Belohnungen" + }, + "3": { + "label": "Mächtigster Trainer", + "tooltip": "(-) Brutaler Kampf\n(+) Großartige Belohnungen" + }, + "selected": "Der Herausforderer tritt vor..." + }, + "outro": "Der mysteriöse Herausforderer wurde besiegt!" +} \ No newline at end of file diff --git a/src/locales/de/mystery-encounters/mysterious-chest-dialogue.json b/src/locales/de/mystery-encounters/mysterious-chest-dialogue.json new file mode 100644 index 00000000000..4e575b955d4 --- /dev/null +++ b/src/locales/de/mystery-encounters/mysterious-chest-dialogue.json @@ -0,0 +1,23 @@ +{ + "intro": "Du hast...@d{32} eine Truhe gefunden?", + "title": "Die mysteriöse Truhe", + "description": "Eine wunderschön verzierte Truhe steht auf dem Boden. Da muss doch etwas Gutes drin sein... oder?", + "query": "Wirst du sie öffnen?", + "option": { + "1": { + "label": "Öffnen", + "tooltip": "@[SUMMARY_BLUE]{({{trapPercent}}%) Etwas Schreckliches}\n@[SUMMARY_GREEN]{({{commonPercent}}%) Standard Belohnung}\n@[SUMMARY_GREEN]{({{ultraPercent}}%) Gute Belohnung}\n@[SUMMARY_GREEN]{({{roguePercent}}%) Großartige Belohnung}\n@[SUMMARY_GREEN]{({{masterPercent}}%) Erstaunliche Belohnung}", + "selected": "Du öffnest die Truhe und findest...", + "normal": "Einfach ein paar normale Werkzeuge und Gegenstände.", + "good": "Ein paar ziemlich gute Werkzeuge und Gegenstände.", + "great": "Ein paar großartige Werkzeuge und Gegenstände.", + "amazing": "Ein erstaunlichen Gegenstand!", + "bad": "Oh nein!@d{32}\nDie Truhe war tatsächlich ein {{gimmighoulName}}!$Dein {{pokeName}} springt schützend vor dich aber wird dabei besiegt!" + }, + "2": { + "label": "Zu riskant, weggehen", + "tooltip": "(-) Keine Belohnung", + "selected": "Du gehst schnell weiter, mit einem leichten Gefühl der Reue." + } + } +} diff --git a/src/locales/de/mystery-encounters/part-timer-dialogue.json b/src/locales/de/mystery-encounters/part-timer-dialogue.json new file mode 100644 index 00000000000..dd86449092c --- /dev/null +++ b/src/locales/de/mystery-encounters/part-timer-dialogue.json @@ -0,0 +1,31 @@ +{ + "intro": "Eine geschäftige Person spricht dich an.", + "speaker": "Arbeitende Person", + "intro_dialogue": "Du siehst aus, als hättest du viele fähige Pokémon!$Wir können dich bezahlen, wenn du uns bei einigen Teilzeitjobs hilfst!", + "title": "Teilzeitjob", + "description": "Es scheint, als gäbe es viele Aufgaben, die erledigt werden müssen. Je besser dein Pokémon für eine Aufgabe geeignet ist, desto mehr Geld kann es verdienen.", + "query": "Welchen Job wählst du?", + "invalid_selection": "Das Pokémon muss genug KP haben.", + "option": { + "1": { + "label": "Lieferdienst", + "tooltip": "(-) Dein Pokémon nutzt seine Geschwindigkeit\n(+) Verdiene @[MONEY]{Geld}", + "selected": "Dein {{selectedPokemon}} arbeitet eine Schicht lang damit, Bestellungen an Kunden auszuliefern." + }, + "2": { + "label": "Lagerarbeit", + "tooltip": "(-) Dein Pokémon nutzt seine Stärke und Ausdauer\n(+) Verdiene @[MONEY]{Geld}", + "selected": "Dein {{selectedPokemon}} arbeitet eine Schicht lang damit, Gegenstände im Lager zu bewegen." + }, + "3": { + "label": "Verkäufer", + "tooltip": "(-) Dein {{option3PrimaryName}} nutzt {{option3PrimaryMove}}\n(+) Verdiene @[MONEY]{Geld}", + "disabled_tooltip": "Dein Pokémon muss bestimmte Attacken kennen, um diesen Job zu erledigen", + "selected": "Dein {{option3PrimaryName}} verbringt den Tag damit, {{option3PrimaryMove}} einzusetzen, um Kunden in den Laden zu locken!" + } + }, + "job_complete_good": "Danke für die Hilfe! Dein {{selectedPokemon}} war unglaublich hilfreich!$Hier ist dein Gehalt für den Tag.", + "job_complete_bad": "Dein {{selectedPokemon}} hat uns ein wenig geholfen!$Hier ist dein Gehalt für den Tag.", + "pokemon_tired": "Dein {{selectedPokemon}} ist erschöpft! Die AP aller seiner Attacken wurden auf 2 reduziert!", + "outro": "Komm doch bald wieder und hilf uns erneut!" +} \ No newline at end of file diff --git a/src/locales/de/mystery-encounters/safari-zone-dialogue.json b/src/locales/de/mystery-encounters/safari-zone-dialogue.json new file mode 100644 index 00000000000..2302833036b --- /dev/null +++ b/src/locales/de/mystery-encounters/safari-zone-dialogue.json @@ -0,0 +1,46 @@ +{ + "intro": "Es ist die Safari-Zone!", + "title": "Die Safari-Zone", + "description": "Es gibt alle Arten von seltenen und besonderen Pokémon, die hier gefunden werden können!\nWenn du dich entscheidest, einzutreten, hast du kannst du in den nächsten 3 Wellen versuchen, besondere Pokémon zu fangen.\nAber sei gewarnt, diese Pokémon können fliehen, bevor du sie fangen kannst!", + "query": "Willst du eintreten?", + "option": { + "1": { + "label": "Eintreten", + "tooltip": "(-) Zahle {{option1Money, money}}\n@[SUMMARY_GREEN]{(?) Safari Zone}", + "selected": "Zeit, dein Glück herauszufordern!" + }, + "2": { + "label": "Weggehen", + "tooltip": "(-) Keine Belohnung", + "selected": "Du gehst deines Weges, mit einem leichten Gefühl der Reue." + } + }, + "safari": { + "1": { + "label": "Pokéball werfen", + "tooltip": "(+) Werfe einen Pokéball", + "selected": "Du wirfst einen Pokéball!" + }, + "2": { + "label": "Köder werfen", + "tooltip": "(+) Erhöht die Fangrate\n(-) Erhöht die Fluchtchance", + "selected": "Du wirfst einen Köder!" + }, + "3": { + "label":"Matsch werfen", + "tooltip": "(+) Vermindert die Fluchtchance\n(-) Chance, die Fangrate zu verringern", + "selected": "Du wirst ein wenig Matsch!" + }, + "4": { + "label": "Fliehen", + "tooltip": "(?) Fliehe vor diesem Pokémon" + }, + "watching": "{{pokemonName}} beobachtet alles aufmerksam!", + "eating": "{{pokemonName}} frisst!", + "busy_eating": "{{pokemonName}} konzentriert sich aufs Futter!", + "angry": "{{pokemonName}} ist wütend!", + "beside_itself_angry": "{{pokemonName}} ist außer sich vor Wut!", + "remaining_count": "{{remainingCount}} Pokémon übrig!" + }, + "outro": "Das war ein spannendes Abenteuer in der Safari-Zone!" +} \ No newline at end of file diff --git a/src/locales/de/mystery-encounters/shady-vitamin-dealer-dialogue.json b/src/locales/de/mystery-encounters/shady-vitamin-dealer-dialogue.json new file mode 100644 index 00000000000..6579d94bd2e --- /dev/null +++ b/src/locales/de/mystery-encounters/shady-vitamin-dealer-dialogue.json @@ -0,0 +1,27 @@ +{ + "intro": "Ein Mann in einem dunklen Mantel kommt auf dich zu.", + "speaker": "Zwielichtiger Verkäufer", + "intro_dialogue": ".@d{16}.@d{16}.@d{16}$Ich habe die Ware, wenn du das Geld hast.$Aber sei sicher, dass deine Pokémon es vertragen können.", + "title": "Der Nährstoff-Verkäufer", + "description": "Der Mann öffnet seinen Mantel und zeigt dir einige Pokémon-Nährstoffe. Die Preise, die er nennt, scheinen ein wirklich gutes Angebot zu sein. Fast zu gut...\nEr bietet dir zwei Möglichkeiten zur Auswahl an.", + "query": "Welches Angebot wirst du wählen?", + "invalid_selection": "Pokémon must be healthy enough.", + "option": { + "1": { + "label": "Der billige Deal", + "tooltip": "(-) Zahle {{option1Money, money}}\n(-) Nebenwirkungen?\n(+) Das gewählte Pokémon erhält 2 zufällige Nährstoffe" + }, + "2": { + "label": "Der teure Deal", + "tooltip": "(-) Zahle {{option2Money, money}}\n(+) Das gewählte Pokémon erhält 2 zufällige Nährstoffe" + }, + "3": { + "label": "Weggehen", + "tooltip": "(-) Keine Belohnung", + "selected": "Ey, hätte ich nicht gedacht, dass du ein Feigling bist." + }, + "selected": "Der Mann überreicht dir zwei Flaschen und verschwindet schnell.${{selectedPokemon}} erhält {{boost1}} und {{boost2}} Nährstoffe!" + }, + "cheap_side_effects": "Aber die Medizin hatte Nebenwirkungen!$Dein {{selectedPokemon}} nimmt etwas Schaden,\nund sein Wesen wurde zu {{newNature}} geändert!", + "no_bad_effects": "Es scheint, als hätten die Nährstoffe keine Nebenwirkungen." +} \ No newline at end of file diff --git a/src/locales/de/mystery-encounters/slumbering-snorlax-dialogue.json b/src/locales/de/mystery-encounters/slumbering-snorlax-dialogue.json new file mode 100644 index 00000000000..097bf3acd95 --- /dev/null +++ b/src/locales/de/mystery-encounters/slumbering-snorlax-dialogue.json @@ -0,0 +1,25 @@ +{ + "intro": "Als du einen schmalen Pfad entlang gehst, siehst du eine riesige Silhouette, die deinen Weg blockiert.$Du kommst näher, um zu sehen, dass ein {{snorlaxName}} friedlich schläft.$Es scheint, als gäbe es keinen Weg daran vorbei.", + "title": "Schlafendes {{snorlaxName}}", + "description": "Du könntest es angreifen, um es zum Bewegen zu bringen, oder einfach warten, bis es aufwacht. Wer weiß, wie lange das dauern könnte...", + "query": "Was wirst du tun?", + "option": { + "1": { + "label": "Kampf beginnen", + "tooltip": "(-) Schlafendes {{snorlaxName}} greift an\n(+) Spezielle Belohnung", + "selected": "Du trittst dem Pokémon ohne Furcht entgegen." + }, + "2": { + "label":"Warte, bis es sich bewegt", + "tooltip": "(-) Warte eine lange Zeit\n(+) Dein Team wird geheilt", + "selected": ".@d{32}.@d{32}.@d{32}$Du wartest sehr lange, bis das {{snorlaxName}} endlich aufwacht. Dein Team wird schläfrig...", + "rest_result": "Nachdem ihr alle aufgewacht seid, ist das {{snorlaxName}} nirgends zu finden - aber deine Pokémon sind alle geheilt!" + }, + "3": { + "label": "Klaue seine Items", + "tooltip": "(+) {{option3PrimaryName}} setzt {{option3PrimaryMove}} ein\n(+) Spezielle Belohnung", + "disabled_tooltip": "Dein Pokémon muss bestimmte Attacken beherrschen, um diese Option zu wählen.", + "selected": "Dein {{option3PrimaryName}} setzt {{option3PrimaryMove}} ein!$@s{item_fanfare}Es stiehlt die Überreste des schlafenden {{snorlaxName}}s und ihr macht euch aus dem Staub!" + } + } +} \ No newline at end of file diff --git a/src/locales/de/mystery-encounters/teleporting-hijinks-dialogue.json b/src/locales/de/mystery-encounters/teleporting-hijinks-dialogue.json new file mode 100644 index 00000000000..552f082c20d --- /dev/null +++ b/src/locales/de/mystery-encounters/teleporting-hijinks-dialogue.json @@ -0,0 +1,27 @@ +{ + "intro": "Es ist eine seltsame Maschine, die laut summt...", + "title": "Teleportierende Streiche", + "description": "Die Maschine hat ein Schild, auf dem steht:\n\"Geld einwerfen und in die Kapsel steigen.\"\nVielleicht kann sie dich irgendwohin transportieren...", + "query": "Was wirst du tun?", + "option": { + "1": { + "label": "Geld einwerfen", + "tooltip": "(-) Bezahle {{price, money}}\n(?) Teleportiere dich in ein neues Biom", + "selected": "Du wirfst etwas Geld ein, und die Kapsel öffnet sich.\nDu steigst ein..." + }, + "2": { + "label": "Ein Pokémon hilft", + "tooltip": "(-) {{option2PrimaryName}} hilft\n(+) {{option2PrimaryName}} erhält EXP\n(?) Teleportiere dich in ein neues Biom", + "disabled_tooltip": "Du brauchst ein Stahl- oder Elektro-Pokémon, um diese Option zu wählen.", + "selected": "Der Typ von {{option2PrimaryName}} ermöglicht es ihm, die Bezahlschranke der Maschine zu umgehen!$Die Kapsel öffnet sich, und du steigst ein..." + }, + "3": { + "label": "Maschine inspizieren", + "tooltip": "(-) Pokémon-Kampf", + "selected": "Du wirst von den blinkenden Lichtern und den seltsamen Geräuschen der Maschine angezogen...$Du bemerkst nicht einmal, wie ein wildes Pokémon sich anschleicht und dich überfällt!" + } + }, + "transport": "Die Maschine zittert heftig und macht seltsame Geräusche!$Kaum hat es begonnen, wird es wieder ruhig.", + "attacked": "Du trittst in eine völlig neue Gegend und erschreckst ein wildes Pokémon!$Das wilde Pokémon greift an!", + "boss_enraged": "Das wilde {{enemyPokemon}} ist wütend geworden!" +} \ No newline at end of file diff --git a/src/locales/de/mystery-encounters/the-expert-pokemon-breeder-dialogue.json b/src/locales/de/mystery-encounters/the-expert-pokemon-breeder-dialogue.json new file mode 100644 index 00000000000..d2fcc91d153 --- /dev/null +++ b/src/locales/de/mystery-encounters/the-expert-pokemon-breeder-dialogue.json @@ -0,0 +1,31 @@ +{ + "intro": "Ein Trainer mit vielen Pokémon-Eiern!", + "intro_dialogue": "Hey Trainer!$Es sieht so aus, als ob einige deiner Pokémon sich ein wenig niedergeschlagen fühlen.$Warum kämpfst du nicht gegen mich, um sie aufzumuntern?", + "title": "Triff die Pokémon-Züchter-Expertin!", + "description": "Du wurdest zu einem Kampf herausgefordert, bei dem du nur @[TOOLTIP_TITLE]{ein einziges Pokémon verwenden darfst}. Es könnte schwierig werden, aber es würde sicherlich die Bindung vertiefen, die du mit dem Pokémon hast, das du wählst!$Wenn du gewinnst, wird die Züchterin dir einige @[TOOLTIP_TITLE]{Pokémon-Eier} geben!", + "query": "Wer wird für dich kämpfen?", + "cleffa_1_nickname": "Ass-Pii-Rin", + "cleffa_2_nickname": "Pi-mal-Daumen", + "cleffa_3_nickname": "Pii-cknick", + "option": { + "1": { + "label": "{{pokemon1Name}}", + "tooltip_base": "(-) Harter Kampf\n(+) Erhöhe Freundschaft mit {{pokemon1Name}}" + }, + "2": { + "label": "{{pokemon2Name}}", + "tooltip_base": "(-) Harter Kampf\n(+) Erhöhe Freundschaft mit {{pokemon2Name}}" + }, + "3": { + "label": "{{pokemon3Name}}", + "tooltip_base": "(-) Harter Kampf\n(+) Erhöhe Freundschaft mit {{pokemon3Name}}" + }, + "selected": "Lass uns beginnen!" + }, + "outro": "Schau wie glücklich dein {{chosenPokemon}} nun ist!$Hier, diese Pokémon-Eier kannst du auch haben.", + "outro_failed": "Wie enttäuschend...$Es sieht so aus, als hättest du noch einen langen Weg vor dir, um das Vertrauen deines Pokémon zu gewinnen!", + "gained_eggs": "@s{item_fanfare}Du erhählst {{numEggs}}!", + "eggs_tooltip": "\n(+) Erhalte {{eggs}}", + "numEggs_one": "{{count}} Ei der Stufe {{rarity}}", + "numEggs_other": "{{count}} Eier der Stufe {{rarity}}" +} diff --git a/src/locales/de/mystery-encounters/the-pokemon-salesman-dialogue.json b/src/locales/de/mystery-encounters/the-pokemon-salesman-dialogue.json new file mode 100644 index 00000000000..1e055fa5ed0 --- /dev/null +++ b/src/locales/de/mystery-encounters/the-pokemon-salesman-dialogue.json @@ -0,0 +1,23 @@ +{ + "intro": "Ein fröhlicher älterer Mann kommt auf dich zu.", + "speaker": "Reicher Mann", + "intro_dialogue": "Hallo! Ich habe ein Angebot, das du nicht ablehnen kannst!", + "title": "Der Pokémon-Verkäufer", + "description": "Dieses {{purchasePokemon}} ist extrem einzigartig und hat eine Fähigkeit, die normalerweise nicht bei seiner Art zu finden ist! Ich lasse dich dieses tolle {{purchasePokemon}} für gerade einmal {{price, money}} haben!\"\n\"Was sagst du dazu?\"", + "description_shiny": "Dieses {{purchasePokemon}} ist extrem einzigartig und hat eine Farbe, die normalerweise nicht bei seiner Art zu finden ist! Ich lasse dich dieses tolle {{purchasePokemon}} für gerade einmal {{price, money}} haben!\"\n\"Was sagst du dazu?\"", + "query": "Was wirst du tun?", + "option": { + "1": { + "label": "Akzeptieren", + "tooltip": "(-) Bezahlen {{price, money}}\n(+) Erhalte ein {{purchasePokemon}} mit seiner versteckten Fähigkeit", + "tooltip_shiny": "(-) Bezahlen {{price, money}}\n(+) Erhalte ein schillerndes {{purchasePokemon}}", + "selected_message": "Du bezahlst einen unverschämten Betrag und kaufst das {{purchasePokemon}}.", + "selected_dialogue": "Ausgezeichnete Wahl!$Ich sehe, dass du ein gutes Auge für Geschäfte hast.$Oh, ja...@d{64} Rückgaben werden nicht akzeptiert, hast du das verstanden?" + }, + "2": { + "label": "Ablehnen", + "tooltip": "(-) Keine Belohnung", + "selected": "Nein?@d{32} Du sagst nein?$Ich mache das nur als Gefallen für dich!" + } + } +} \ No newline at end of file diff --git a/src/locales/de/mystery-encounters/the-strong-stuff-dialogue.json b/src/locales/de/mystery-encounters/the-strong-stuff-dialogue.json new file mode 100644 index 00000000000..0fd1a7ad64f --- /dev/null +++ b/src/locales/de/mystery-encounters/the-strong-stuff-dialogue.json @@ -0,0 +1,21 @@ +{ + "intro": "Es ist ein riesiger {{shuckleName}} und ein riesiger Vorrat an... Saft?", + "title": "Das gute Zeug", + "description": "Das {{shuckleName}} das deinen Weg blockiert, sieht unglaublich stark aus. In der Zwischenzeit strahlt der Saft daneben eine Art Kraft aus.\nDas {{shuckleName}} streckt seine Fühler in deine Richtung aus. Es scheint, als wolle es etwas tun...", + "query": "Was wirst du tun?", + "option": { + "1": { + "label": "Dem {{shuckleName}} näher kommen", + "tooltip": "(?) Etwas Schreckliches oder Wunderbares könnte passieren", + "selected": "Dir wird schwarz vor Augen...", + "selected_2": "@f{150}Als du aufwachst, ist das {{shuckleName}} verschwunden und der Saftvorrat komplett geleert.${{highBstPokemon1}} und {{highBstPokemon2}} fühlen eine schreckliche Lethargie über sich kommen!$Ihre Basiswerte wurden um {{reductionValue}} reduziert!$Deine verbleibenden Pokémon fühlen jedoch eine unglaubliche Vitalität!$Ihre Basiswerte werden um {{increaseValue}} erhöht!" + }, + "2": { + "label": "Das {{shuckleName}} bekämpfen", + "tooltip": "(-) Schwieriger Kampf\n(+) Spezielle Belohnungen", + "selected": "Das {{shuckleName}} wird wütend und trinkt etwas von seinem Saft, bevor es angreift!", + "stat_boost": "Der Saft des {{shuckleName}} erhöht seine Werte!" + } + }, + "outro": "Was ist hier gerade passiert?" +} \ No newline at end of file diff --git a/src/locales/de/mystery-encounters/the-winstrate-challenge-dialogue.json b/src/locales/de/mystery-encounters/the-winstrate-challenge-dialogue.json new file mode 100644 index 00000000000..e3d0dddd21a --- /dev/null +++ b/src/locales/de/mystery-encounters/the-winstrate-challenge-dialogue.json @@ -0,0 +1,22 @@ +{ + "intro": "Eine Familie steht vor ihrem Haus!", + "speaker": "Die Sihgers", + "intro_dialogue": "Wir sind die Sihgers!$Wie wäre es, wenn du gegen unsere Familie in einer Reihe von Pokémon-Kämpfen antrittst?", + "title": "Die Sihgers-Herausforderung", + "description": "Die Sihgers sind eine Familie von 5 Trainern, und sie wollen kämpfen! Wenn du sie alle hintereinander besiegst, bekommst du einen grandiosen Preis. Aber kannst du die Hitze aushalten?", + "query": "Was wirst du tun?", + "option": { + "1": { + "label": "Die Herausforderung annehmen", + "tooltip": "(-) Brutaler Kampf\n(+) Spezielle Belohnung", + "selected": "Lass die Herausforderung beginnen!" + }, + "2": { + "label": "Die Herausforderung ablehnen", + "tooltip": "(+) Team wird geheilt\n(+) Erhalte ein Supersondererbonbon", + "selected": "Das ist zu schade. Dein Team sieht ziemlich mitgenommen aus, warum ruhst du dich nicht eine Weile aus?" + } + }, + "victory": "Glückwunsch, du hast unsere Herausforderung gemeistert!$Zuerst möchten wir dir diesen Gutschein geben.", + "victory_2": "Außerdem benutzt unsere Familie diese Machoschiene, um unsere Pokémon effektiver zu tranieren.$Du brauchst es vielleicht nicht, da du uns alle geschlagen hast, aber wir hoffen, dass du es trotzdem annimmst!" +} \ No newline at end of file diff --git a/src/locales/de/mystery-encounters/training-session-dialogue.json b/src/locales/de/mystery-encounters/training-session-dialogue.json new file mode 100644 index 00000000000..f7d22ef6deb --- /dev/null +++ b/src/locales/de/mystery-encounters/training-session-dialogue.json @@ -0,0 +1,33 @@ +{ + "intro": "Du stolperst über einige Trainingsutensilien und Vorräte.", + "title": "Traningssitzung", + "description": "Diese Vorräte sehen so aus, als könnten sie verwendet werden, um ein Mitglied deines Teams zu trainieren! Es gibt ein paar Möglichkeiten, wie du dein Pokémon trainieren könntest, indem du gegen es mit dem Rest deines Teams kämpfst.", + "query": "Wie möchtest du trainieren?", + "invalid_selection": "Pokémon muss genügend KP haben.", + "option": { + "1": { + "label": "Leichtes Training", + "tooltip": "(-) Leichter Kampf\n(+) Verbessere 2 zufällige IS-Werte des Pokémon", + "finished": "{{selectedPokemon}} kommt zurück, fühlt sich erschöpft aber zufrieden!$Seine {{stat1}} und {{stat2}} IS-Werte wurden verbessert!" + }, + "2": { + "label": "Moderates Training", + "tooltip": "(-) Moderater Kampf\n(+) Ändere das Wesen des Pokémon", + "select_prompt": "Wähle ein neues Wesen aus, um dein Pokémon zu trainieren.", + "finished": "{{selectedPokemon}} kehrt zurück, fühlt sich erschöpft aber zufrieden!$Es hat nun ein neues Wesen: {{nature}}!" + }, + "3": { + "label": "Schweres Training", + "tooltip": "(-) Harter Kampf\n(+) Ändere die Fähigkeit des Pokémon", + "select_prompt": "Wähle eine neue Fähigkeit aus, um dein Pokémon zu trainieren.", + "finished": "{{selectedPokemon}} kehrt zurück, fühlt sich erschöpft aber zufrieden!$Seine Fähigkeit wurde zu {{ability}} geändert!" + }, + "4": { + "label": "Weggehen", + "tooltip": "(-) Keine Belohnung", + "selected": "Du hast keine Zeit für Training und gehst weiter." + }, + "selected": "{{selectedPokemon}} bewegt sich über die Lichtung, um dir gegenüberzutreten..." + }, + "outro": "Das war eine erfolgreiche Trainingssitzung!" +} \ No newline at end of file diff --git a/src/locales/de/mystery-encounters/trash-to-treasure-dialogue.json b/src/locales/de/mystery-encounters/trash-to-treasure-dialogue.json new file mode 100644 index 00000000000..da744ccb697 --- /dev/null +++ b/src/locales/de/mystery-encounters/trash-to-treasure-dialogue.json @@ -0,0 +1,20 @@ +{ + "intro":"Ein riesieger Haufen Müll. Wo kommt der auf einmal her?", + "title": "Vom Müllhaufen zum Schatzhaufen", + "description": "Der Müllberg ragt über dir auf und du kannst einige wertvolle Gegenstände im Müll entdecken. Bist du sicher, dass du dich in den Dreck wälzen willst, um sie zu bekommen?", + "query": "Was willst du tun?", + "option": { + "1": { + "label": "Nach Wertsachen suchen", + "tooltip": "(-) Heilitems kosten ab jetzt das Dreifache\n(+) Erhalte tolle Items", + "selected": "Du arbeitest dich durch den Müllhaufen und wirst von Dreck überzogen.$Kein respektabler Ladenbesitzer wird dir in deinem schmutzigen Zustand etwas verkaufen!$Aber es gibt ja auch andere... weniger respektable.$Natürlich verlangen sie höhere Preise.$Aber du hast einige unglaubliche Items im Müll gefunden!" + + }, + "2": { + "label": "Genauer untersuchen", + "tooltip": "(?) Finde die Quelle des Mülls", + "selected": "Du wanderst um den Müllhaufen herum und suchst nach Hinweisen, wie dieser hier gelandet sein könnte...", + "selected_2": "Der Müll bewegt sich! Es war nicht nur Müll, es war ein Pokémon!" + } + } +} diff --git a/src/locales/de/mystery-encounters/uncommon-breed-dialogue.json b/src/locales/de/mystery-encounters/uncommon-breed-dialogue.json new file mode 100644 index 00000000000..efd5ff52e16 --- /dev/null +++ b/src/locales/de/mystery-encounters/uncommon-breed-dialogue.json @@ -0,0 +1,26 @@ +{ + "intro": "Das ist kein gewöhnliches Pokémon!", + "title": "Ungewöhnliche Züchtung", + "description": "Das {{enemyPokemon}} sieht im Vergleich zu anderen seiner Art besonders aus. @[TOOLTIP_TITLE]{Vielleicht kennt es einen besondere Attacke?} Du könntest es einfach bekämpfen und fangen, aber es gibt vielleicht auch eine Möglichkeit, es zu befreunden.", + "query": "Was wirst du tun?", + "option": { + "1": { + "label": "Kampf beginnen", + "tooltip": "(-) Schwieriger Kampf\n(+) Starkes fangbares Pokémon", + "selected": "Du stellst dich dem {{enemyPokemon}} ohne Furcht.", + "stat_boost": "Die gesteigerten Fähigkeiten des {{enemyPokemon}} erhöhen seine Werte!" + }, + "2": { + "label": "Ihm Futter geben", + "disabled_tooltip": "Du brauchst 4 Beeren, um diese Option zu wählen", + "tooltip": "(-) Gib 4 Beeren\n(+) Das {{enemyPokemon}} mag dich", + "selected": "Du wirfst die Beeren zu {{enemyPokemon}}!$Es frisst sie glücklich!$Das {{enemyPokemon}} möchte sich dir anschließen!" + }, + "3": { + "label": "Es befreunden", + "disabled_tooltip": "Dein Pokémon muss bestimmte Attacken kennen, um diese Option zu wählen", + "tooltip": "(+) {{option3PrimaryName}} setzt {{option3PrimaryMove}} ein\n(+) Das {{enemyPokemon}} mag dich", + "selected": "Dein {{option3PrimaryName}} setzt {{option3PrimaryMove}} ein, um das {{enemyPokemon}} zu bezaubern!$Das {{enemyPokemon}} möchte sich dir anschließen!" + } + } +} \ No newline at end of file diff --git a/src/locales/de/mystery-encounters/weird-dream-dialogue.json b/src/locales/de/mystery-encounters/weird-dream-dialogue.json new file mode 100644 index 00000000000..11fe3b4078c --- /dev/null +++ b/src/locales/de/mystery-encounters/weird-dream-dialogue.json @@ -0,0 +1,22 @@ +{ + "intro": "Eine schemenhafte Frau versperrt dir den Weg. Irgendetwas an ihr ist beunruhigend...", + "speaker": "Frau", + "intro_dialogue": "Ich habe deine Zukünfte gesehen, deine Vergangenheiten...$Siehst du sie auch?", + "title": "???", + "description": "Die Worte der Frau hallen in deinem Kopf wider. Es war nicht nur eine einzelne Stimme, sondern eine unendliche Vielzahl aus allen Zeiten und Realitäten. Dir wird schwindelig, die Frage bleibt in deinem Kopf hängen...\n@[TOOLTIP_TITLE]{\"Ich habe deine Zukünfte gesehen, deine Vergangenheiten...Siehst du sie auch?\"}", + "query": "Was wirst du tun?", + "option": { + "1": { + "label": "\"Ich sehe sie\"", + "tooltip": "@[SUMMARY_GREEN]{(?) Beeinflusst deine Pokémon}", + "selected": "Ihre Hand berührt dich und alles wird schwarz.$Dann...@d{64} Du siehst alles. Jede Zeitlinie, all deine verschiedenen Ichs, Vergangenheit und Zukunft.$Alles, was dich ausmacht, alles, was du sein wirst...@d{64}", + "cutscene": "Du siehst deine Pokémon,@d{32} wie sie sich aus jeder Realität vereinen, um etwas Neues zu werden...@d{64}", + "dream_complete": "Als du erwachst, ist die Frau - war es eine Frau oder ein Geist? - verschwunden...$.@d{32}.@d{32}.@d{32}$Dein Pokémon-Team hat sich verändert... Oder ist es das gleiche Team, das du schon immer hattest?" + }, + "2": { + "label": "Schnell wegrennen", + "tooltip": "(-) Beeinflusst deine Pokémon", + "selected": "Du reißt deinen Geist aus einem betäubenden Griff und fliehst hastig.$Als du schließlich anhältst, um dich zu sammeln, überprüfst du die Pokémon in deinem Team.$Aus irgendeinem Grund hat sich das Level aller Pokémon verringert!" + } + } +} \ 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 fb5a5207569..8c662ef2b78 100644 --- a/src/locales/de/party-ui-handler.json +++ b/src/locales/de/party-ui-handler.json @@ -15,6 +15,7 @@ "UNPAUSE_EVOLUTION": "Entwicklung fortsetzen", "REVIVE": "Wiederbeleben", "RENAME": "Umbenennen", + "SELECT": "Auswählen", "choosePokemon": "Wähle ein Pokémon.", "doWhatWithThisPokemon": "Was soll mit diesem Pokémon geschehen?", "noEnergy": "{{pokemonName}} ist nicht fit genug, um zu kämpfen!", @@ -44,4 +45,4 @@ "untilWeMeetAgain": "Bis wir uns wiedersehen, {{pokemonName}}!", "sayonara": "Sayonara, {{pokemonName}}!", "smellYaLater": "Also dann, man riecht sich! Ciao!, {{pokemonName}}!" -} \ No newline at end of file +} diff --git a/src/locales/de/pokemon-form.json b/src/locales/de/pokemon-form.json index d621e3165fa..16efc3af653 100644 --- a/src/locales/de/pokemon-form.json +++ b/src/locales/de/pokemon-form.json @@ -1,4 +1,5 @@ { + "pikachu": "Normal", "pikachuCosplay": "Cosplay", "pikachuCoolCosplay": "Rocker-Pikachu", "pikachuBeautyCosplay": "Damen-Pikachu", @@ -6,7 +7,9 @@ "pikachuSmartCosplay": "Professoren-Pikachu", "pikachuToughCosplay": "Wrestler-Pikachu", "pikachuPartner": "Partner-Pikachu", + "eevee": "Normal", "eeveePartner": "Partner-Evoli", + "pichu": "Normal", "pichuSpiky": "Strubbelohr-Pichu", "unownA": "A", "unownB": "B", @@ -36,36 +39,65 @@ "unownZ": "Z", "unownExclamation": "!", "unownQuestion": "?", + "castform": "Normalform", "castformSunny": "Sonnenform", "castformRainy": "Regenform", "castformSnowy": "Schneeform", "deoxysNormal": "Normalform", + "deoxysAttack": "Angriffsform", + "deoxysDefense": "Verteidigungsform", + "deoxysSpeed": "Initiativeform", "burmyPlant": "Pflanzenumhang", "burmySandy": "Sandumhang", "burmyTrash": "Lumpenumhang", + "cherubiOvercast": "Wolkenform", + "cherubiSunshine": "Sonnenform", "shellosEast": "Östliches Meer", "shellosWest": "Westliches Meer", + "rotom": "Normalform", "rotomHeat": "Hitze-Rotom", "rotomWash": "Wasch-Rotom", "rotomFrost": "Frost-Rotom", "rotomFan": "Wirbel-Rotom", "rotomMow": "Schneid-Rotom", + "dialga": "Normalform", + "dialgaOrigin": "Urform", + "palkia": "Normalform", + "palkiaOrigin": "Urform", "giratinaAltered": "Wandelform", + "giratinaOrigin": "Urform", "shayminLand": "Landform", + "shayminSky": "Zenitform", "basculinRedStriped": "Rotlinige Form", "basculinBlueStriped": "Blaulinige Form", "basculinWhiteStriped": "Weißlinige Form", + "darumaka": "Normalmodus", + "darumakaZen": "Trance-Modus", "deerlingSpring": "Frühlingsform", "deerlingSummer": "Sommerform", "deerlingAutumn": "Herbstform", "deerlingWinter": "Winterform", "tornadusIncarnate": "Inkarnationsform", + "tornadusTherian": "Tiergeistform", "thundurusIncarnate": "Inkarnationsform", + "thundurusTherian": "Tiergeistform", "landorusIncarnate": "Inkarnationsform", + "landorusTherian": "Tiergeistform", + "kyurem": "Normal", + "kyuremBlack": "Schwarzes Kyurem", + "kyuremWhite": "Weißes Kyurem", "keldeoOrdinary": "Standardform", + "keldeoResolute": "Resolutform", "meloettaAria": "Gesangsform", "meloettaPirouette": "Tanzform", - "froakieBattleBond": "Ash-Form", + "genesect": "Normal", + "genesectShock": "Blitzmodul", + "genesectBurn": "Flammenmodul", + "genesectChill": "Gefriermodul", + "genesectDouse": "Aquamodul", + "froakie": "Normalform", + "froakieBattleBond": "Freundschaftsakt", + "froakieAsh": "Ash-Form", "scatterbugMeadow": "Blumenmeermuster", "scatterbugIcySnow": "Frostmuster", "scatterbugPolar": "Schneefeldmuster", @@ -91,6 +123,7 @@ "flabebeOrange": "Orangeblütler", "flabebeBlue": "Blaublütler", "flabebeWhite": "Weißblütler", + "furfrou": "Zottelform", "furfrouHeart": "Herzchenschnitt", "furfrouStar": "Sternchenschnitt", "furfrouDiamond": "Diamantenschitt", @@ -100,6 +133,11 @@ "furfrouLaReine": "Königinnenschnitt", "furfrouKabuki": "Kabuki-Schnitt", "furfrouPharaoh": "Herrscherschnitt", + "espurrMale": "männlich", + "espurrFemale": "weiblich", + "honedgeShiled": "Schildform", + "honedgeBlade": "Klingenform", + "pumpkaboo": "Größe M", "pumpkabooSmall": "Größe S", "pumpkabooLarge": "Größe L", "pumpkabooSuper": "Größe XL", @@ -110,11 +148,37 @@ "zygarde50Pc": "50% Form Scharwandel", "zygarde10Pc": "10% Form Scharwandel", "zygardeComplete": "Optimum-Form", + "hoopa": "Gebanntes Hoopa", + "hoopaUnbound": "Entfesseltes Hoopa", "oricorioBaile": "Flamenco-Stil", "oricorioPompom": "Cheerleading-Stil", "oricorioPau": "Hula-Stil", "oricorioSensu": "Buyo-Stil", + "rockruff": "Normalform", "rockruffOwnTempo": "Gleichmut", + "rockruffMidday": "Tagform", + "rockruffMidnight": "Nachtform", + "rockruffDusk": "Zwielichtform", + "wishiwashi": "Einzelform", + "wishiwashiSchool": "Schwarmform", + "typeNullNormal": "Typ:Normal", + "typeNullFighting": "Typ:Kampf", + "typeNullFlying": "Typ:Flug", + "typeNullPoison": "Typ:Gift", + "typeNullGround": "Typ:Boden", + "typeNullRock": "Typ:Gestein", + "typeNullBug": "Typ:Käfer", + "typeNullGhost": "Typ:Geist", + "typeNullSteel": "Typ:Stahl", + "typeNullFire": "Typ:Feuer", + "typeNullWater": "Typ:Wasser", + "typeNullGrass": "Typ:Pflanze", + "typeNullElectric": "Typ:Elektro", + "typeNullPsychic": "Typ:Psycho", + "typeNullIce": "Typ:Eis", + "typeNullDragon": "Typ:Drache", + "typeNullDark": "Typ:Unlicht", + "typeNullFairy": "Typ:Fee", "miniorRedMeteor": "Rote-Meteorform", "miniorOrangeMeteor": "Oranger-Meteorform", "miniorYellowMeteor": "Gelber-Meteorform", @@ -131,25 +195,66 @@ "miniorViolet": "Violetter Kern", "mimikyuDisguised": "Verkleidete Form", "mimikyuBusted": "Entlarvte Form", + "necrozma": "Normalform", + "necrozmaDuskMane": "Abendmähne", + "necrozmaDawnWings": "Morgenschwingen", + "necrozmaUltra": "Ultra-Necrozma", + "magearna": "Normalform", "magearnaOriginal": "Originalfarbe", + "marshadow": "Normalform", "marshadowZenith": "Zenitform", + "cramorant": "Normalform", + "cramorantGulping": "Schlingform", + "cramorantGorging": "Stopfform", + "toxelAmped": "Hoch-Form", + "toxelLowkey": "Tief-Form", "sinisteaPhony": "Fälschungsform", "sinisteaAntique": "Originalform", + "milceryVanillaCream": "Vanille-Creme", + "milceryRubyCream": "Ruby-Creme", + "milceryMatchaCream": "Matcha-Creme", + "milceryMintCream": "Minz-Creme", + "milceryLemonCream": "Zitronen-Creme", + "milcerySaltedCream": "Salz-Creme", + "milceryRubySwirl": "Ruby-Mix", + "milceryCaramelSwirl": "Karamell-Mix", + "milceryRainbowSwirl": "Trio-Mix", + "eiscue": "Tiefkühlkopf", "eiscueNoIce": "Wohlfühlkopf", "indeedeeMale": "männlich", "indeedeeFemale": "weiblich", "morpekoFullBelly": "Pappsattmuster", + "morpekoHangry": "Kohldampfmuster", "zacianHeroOfManyBattles": "Heldenhafter Krieger", + "zacianCrowned": "König des Schwertes", "zamazentaHeroOfManyBattles": "Heldenhafter Krieger", + "zamazentaCrowned": "König des Schildes", + "kubfuSingleStrike": "Fokussierter Stil", + "kubfuRapidStrike": "Fließender Stil", + "zarude": "Normalform", "zarudeDada": "Papa", + "calyrex": "Normalform", + "calyrexIce": "Schimmelreiter", + "calyrexShadow": "Rappenreiter", + "basculinMale": "männlich", + "basculinFemale": "weiblich", "enamorusIncarnate": "Inkarnationsform", + "enamorusTherian": "Tiergeistform", + "lechonkMale": "männlich", + "lechonkFemale": "weiblich", + "tandemausFour": "Dreierfamilie", + "tandemausThree": "Viererfamilie", "squawkabillyGreenPlumage": "Grüngefiedert", "squawkabillyBluePlumage": "Blaugefiedert", "squawkabillyYellowPlumage": "Gelbgefiedert", "squawkabillyWhitePlumage": "Weißgefiedert", + "finizenZero": "Alltagsform", + "finizenHero": "Heldenform", "tatsugiriCurly": "Gebogene Form", "tatsugiriDroopy": "Hängende Form", "tatsugiriStretchy": "Gestrekte Form", + "dunsparceTwo": "Zweisegmentform", + "dunsparceThree": "Dreisegmentform", "gimmighoulChest": "Truhenform", "gimmighoulRoaming": "Wanderform", "koraidonApexBuild": "Vollkommene Gestalt", @@ -164,7 +269,22 @@ "miraidonGlideMode": "Gleitmodus", "poltchageistCounterfeit": "Imitationsform", "poltchageistArtisan": "Kostbarkeitsform", + "poltchageistUnremarkable": "Simple Form", + "poltchageistMasterpiece": "Edle Form", + "ogerponTealMask": "Türkisgrüne Maske", + "ogerponTealMaskTera": "Türkisgrüne Maske (Terakristallisiert)", + "ogerponWellspringMask": "Brunnenmaske", + "ogerponWellspringMaskTera": "Brunnenmaske (Terakristallisiert)", + "ogerponHearthflameMask": "Ofenmaske", + "ogerponHearthflameMaskTera": "Ofenmaske (Terakristallisiert)", + "ogerponCornerstoneMask": "Fundamentmaske", + "ogerponCornerstoneMaskTera": "Fundamentmaske (Terakristallisiert)", + "terpagos": "Normalform", + "terpagosTerastal": "Terakristall-Form", + "terpagosStellar": "Stellarform", + "galarDarumaka": "Normalmodus", + "galarDarumakaZen": "Trance-Modus", "paldeaTaurosCombat": "Gefechtsvariante", "paldeaTaurosBlaze": "Flammenvariante", "paldeaTaurosAqua": "Flutenvariante" -} \ No newline at end of file +} diff --git a/src/locales/de/trainer-classes.json b/src/locales/de/trainer-classes.json index 45826fcd310..08f9e0cebef 100644 --- a/src/locales/de/trainer-classes.json +++ b/src/locales/de/trainer-classes.json @@ -126,5 +126,8 @@ "skull_grunts": "Rüpel von Team Skull", "macro_grunt": "Angestellter von Macro Cosmos", "macro_grunt_female": "Angestellte von Macro Cosmos", - "macro_grunts": "Angestellte von Macro Cosmos" + "macro_grunts": "Angestellte von Macro Cosmos", + "star_grunt": "Rüpel von Team Star", + "star_grunt_female": "Rüpel von Team Star", + "star_grunts": "Rüpel von Team Star" } diff --git a/src/locales/de/trainer-names.json b/src/locales/de/trainer-names.json index ffbb772234c..c722263ff55 100644 --- a/src/locales/de/trainer-names.json +++ b/src/locales/de/trainer-names.json @@ -142,6 +142,11 @@ "faba": "Fabian", "plumeria": "Fran", "oleana": "Olivia", + "giacomo": "Pinio", + "mela": "Irsa", + "atticus": "Shugi", + "ortega": "Otis", + "eri": "Rioba", "maxie": "Marc", "archie": "Adrian", @@ -151,6 +156,7 @@ "lusamine": "Samantha", "guzma": "Bromley", "rose": "Rose", + "cassiopeia": "Cosima", "blue_red_double": "Blau & Rot", "red_blue_double": "Rot & Blau", @@ -161,5 +167,19 @@ "alder_iris_double": "Lauro & Lilia", "iris_alder_double": "Lilia & Lauro", "piers_marnie_double": "Nezz & Mary", - "marnie_piers_double": "Mary & Nezz" + "marnie_piers_double": "Mary & Nezz", + + "buck": "Avenaro", + "cheryl": "Raissa", + "marley": "Charlie", + "mira": "Orisa", + "riley": "Urs", + "victor": "Viktor", + "victoria": "Viktoria", + "vivi": "Sieglinde", + "vicky": "Vicky", + "vito": "Paul", + "bug_type_superfan": "Käfersammler-Superfan", + "expert_pokemon_breeder": "Pokémon-Züchter-Expertin" + } diff --git a/src/locales/de/trainer-titles.json b/src/locales/de/trainer-titles.json index 21a4b2fa7b6..ed82d6dc458 100644 --- a/src/locales/de/trainer-titles.json +++ b/src/locales/de/trainer-titles.json @@ -19,6 +19,7 @@ "aether_boss": "Æther-Präsidentin", "skull_boss": "Skull-Boss", "macro_boss": "Geschäftsführer von Macro Cosmos", + "star_boss": "Team Star Big Boss", "rocket_admin": "Team Rocket Vorstand", "rocket_admin_female": "Team Rocket Vorstand", "magma_admin": "Team Magma Vorstand", @@ -33,6 +34,8 @@ "flare_admin_female": "Team Flare Vorstand", "aether_admin": "Æther-Regionalleiter", "skull_admin": "Team Skull Vorstand", - "macro_admin": "Vizepräsidentin von Macro Cosmos" + "macro_admin": "Vizepräsidentin von Macro Cosmos", + "star_admin": "Team Star Boss", + "the_winstrates": "Sihgers" } diff --git a/src/locales/en/ability.json b/src/locales/en/ability.json index de2e063e966..f2ffa9b4927 100644 --- a/src/locales/en/ability.json +++ b/src/locales/en/ability.json @@ -1237,6 +1237,6 @@ }, "poisonPuppeteer": { "name": "Poison Puppeteer", - "description": "Pokémon poisoned by Pecharunt's moves will also become confused." + "description": "Pokémon poisoned by this Pokémon's moves will also become confused." } } \ No newline at end of file diff --git a/src/locales/en/battler-tags.json b/src/locales/en/battler-tags.json index b31826b0244..6b513f3a832 100644 --- a/src/locales/en/battler-tags.json +++ b/src/locales/en/battler-tags.json @@ -73,5 +73,6 @@ "tarShotOnAdd": "{{pokemonNameWithAffix}} became weaker to fire!", "substituteOnAdd": "{{pokemonNameWithAffix}} put in a substitute!", "substituteOnHit": "The substitute took damage for {{pokemonNameWithAffix}}!", - "substituteOnRemove": "{{pokemonNameWithAffix}}'s substitute faded!" + "substituteOnRemove": "{{pokemonNameWithAffix}}'s substitute faded!", + "autotomizeOnAdd": "{{pokemonNameWIthAffix}} became nimble!" } diff --git a/src/locales/en/bgm-name.json b/src/locales/en/bgm-name.json index 2da1b9e85a3..0951de6b769 100644 --- a/src/locales/en/bgm-name.json +++ b/src/locales/en/bgm-name.json @@ -111,7 +111,7 @@ "forest": "PMD EoS Dusk Forest", "grass": "PMD EoS Apple Woods", "graveyard": "PMD EoS Mystifying Forest", - "ice_cave": "Firel - -60F", + "ice_cave": "Firel - -50°C", "island": "PMD EoS Craggy Coast", "jungle": "Lmz - Jungle", "laboratory": "Firel - Laboratory", diff --git a/src/locales/en/config.ts b/src/locales/en/config.ts index 35eef91e2ad..6958c579dd5 100644 --- a/src/locales/en/config.ts +++ b/src/locales/en/config.ts @@ -55,36 +55,36 @@ import moveTriggers from "./move-trigger.json"; import runHistory from "./run-history.json"; import mysteryEncounterMessages from "./mystery-encounter-messages.json"; import lostAtSea from "./mystery-encounters/lost-at-sea-dialogue.json"; -import mysteriousChest from "#app/locales/en/mystery-encounters/mysterious-chest-dialogue.json"; -import mysteriousChallengers from "#app/locales/en/mystery-encounters/mysterious-challengers-dialogue.json"; -import darkDeal from "#app/locales/en/mystery-encounters/dark-deal-dialogue.json"; -import departmentStoreSale from "#app/locales/en/mystery-encounters/department-store-sale-dialogue.json"; -import fieldTrip from "#app/locales/en/mystery-encounters/field-trip-dialogue.json"; -import fieryFallout from "#app/locales/en/mystery-encounters/fiery-fallout-dialogue.json"; -import fightOrFlight from "#app/locales/en/mystery-encounters/fight-or-flight-dialogue.json"; -import safariZone from "#app/locales/en/mystery-encounters/safari-zone-dialogue.json"; -import shadyVitaminDealer from "#app/locales/en/mystery-encounters/shady-vitamin-dealer-dialogue.json"; -import slumberingSnorlax from "#app/locales/en/mystery-encounters/slumbering-snorlax-dialogue.json"; -import trainingSession from "#app/locales/en/mystery-encounters/training-session-dialogue.json"; -import theStrongStuff from "#app/locales/en/mystery-encounters/the-strong-stuff-dialogue.json"; -import pokemonSalesman from "#app/locales/en/mystery-encounters/the-pokemon-salesman-dialogue.json"; -import offerYouCantRefuse from "#app/locales/en/mystery-encounters/an-offer-you-cant-refuse-dialogue.json"; -import delibirdy from "#app/locales/en/mystery-encounters/delibirdy-dialogue.json"; -import absoluteAvarice from "#app/locales/en/mystery-encounters/absolute-avarice-dialogue.json"; -import aTrainersTest from "#app/locales/en/mystery-encounters/a-trainers-test-dialogue.json"; -import trashToTreasure from "#app/locales/en/mystery-encounters/trash-to-treasure-dialogue.json"; -import berriesAbound from "#app/locales/en/mystery-encounters/berries-abound-dialogue.json"; -import clowningAround from "#app/locales/en/mystery-encounters/clowning-around-dialogue.json"; -import partTimer from "#app/locales/en/mystery-encounters/part-timer-dialogue.json"; -import dancingLessons from "#app/locales/en/mystery-encounters/dancing-lessons-dialogue.json"; -import weirdDream from "#app/locales/en/mystery-encounters/weird-dream-dialogue.json"; -import theWinstrateChallenge from "#app/locales/en/mystery-encounters/the-winstrate-challenge-dialogue.json"; -import teleportingHijinks from "#app/locales/en/mystery-encounters/teleporting-hijinks-dialogue.json"; -import bugTypeSuperfan from "#app/locales/en/mystery-encounters/bug-type-superfan-dialogue.json"; -import funAndGames from "#app/locales/en/mystery-encounters/fun-and-games-dialogue.json"; -import uncommonBreed from "#app/locales/en/mystery-encounters/uncommon-breed-dialogue.json"; -import globalTradeSystem from "#app/locales/en/mystery-encounters/global-trade-system-dialogue.json"; -import expertPokemonBreeder from "#app/locales/en/mystery-encounters/the-expert-pokemon-breeder-dialogue.json"; +import mysteriousChest from "./mystery-encounters/mysterious-chest-dialogue.json"; +import mysteriousChallengers from "./mystery-encounters/mysterious-challengers-dialogue.json"; +import darkDeal from "./mystery-encounters/dark-deal-dialogue.json"; +import departmentStoreSale from "./mystery-encounters/department-store-sale-dialogue.json"; +import fieldTrip from "./mystery-encounters/field-trip-dialogue.json"; +import fieryFallout from "./mystery-encounters/fiery-fallout-dialogue.json"; +import fightOrFlight from "./mystery-encounters/fight-or-flight-dialogue.json"; +import safariZone from "./mystery-encounters/safari-zone-dialogue.json"; +import shadyVitaminDealer from "./mystery-encounters/shady-vitamin-dealer-dialogue.json"; +import slumberingSnorlax from "./mystery-encounters/slumbering-snorlax-dialogue.json"; +import trainingSession from "./mystery-encounters/training-session-dialogue.json"; +import theStrongStuff from "./mystery-encounters/the-strong-stuff-dialogue.json"; +import pokemonSalesman from "./mystery-encounters/the-pokemon-salesman-dialogue.json"; +import offerYouCantRefuse from "./mystery-encounters/an-offer-you-cant-refuse-dialogue.json"; +import delibirdy from "./mystery-encounters/delibirdy-dialogue.json"; +import absoluteAvarice from "./mystery-encounters/absolute-avarice-dialogue.json"; +import aTrainersTest from "./mystery-encounters/a-trainers-test-dialogue.json"; +import trashToTreasure from "./mystery-encounters/trash-to-treasure-dialogue.json"; +import berriesAbound from "./mystery-encounters/berries-abound-dialogue.json"; +import clowningAround from "./mystery-encounters/clowning-around-dialogue.json"; +import partTimer from "./mystery-encounters/part-timer-dialogue.json"; +import dancingLessons from "./mystery-encounters/dancing-lessons-dialogue.json"; +import weirdDream from "./mystery-encounters/weird-dream-dialogue.json"; +import theWinstrateChallenge from "./mystery-encounters/the-winstrate-challenge-dialogue.json"; +import teleportingHijinks from "./mystery-encounters/teleporting-hijinks-dialogue.json"; +import bugTypeSuperfan from "./mystery-encounters/bug-type-superfan-dialogue.json"; +import funAndGames from "./mystery-encounters/fun-and-games-dialogue.json"; +import uncommonBreed from "./mystery-encounters/uncommon-breed-dialogue.json"; +import globalTradeSystem from "./mystery-encounters/global-trade-system-dialogue.json"; +import expertPokemonBreeder from "./mystery-encounters/the-expert-pokemon-breeder-dialogue.json"; /** * Dialogue/Text token injection patterns that can be used: diff --git a/src/locales/en/dialogue.json b/src/locales/en/dialogue.json index 66f9e8db7a5..9d1f0ae1c80 100644 --- a/src/locales/en/dialogue.json +++ b/src/locales/en/dialogue.json @@ -766,6 +766,7 @@ "2_female": "You are a trainer aren't you? I'm afraid that doesn't give you the right to interfere in our work.", "3": "I'm from Macro Cosmos Insurance! Do you have a life insurance policy?", "4": "I found you! In that case, time for a Pokémon battle!", + "4_female": "I found you! In that case, time for a Pokémon battle!", "5": "An earful from Ms. Oleana is way worse than anything you can do!" }, "victory": { @@ -796,7 +797,8 @@ "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." + "5": "Oh great. Here comes another rando to ruin my day.", + "5_female": "Oh great. Here comes another rando to ruin my day." }, "victory": { "1": "How come I'M the one seeing stars?!", @@ -819,6 +821,7 @@ "mela": { "encounter": { "1": "So you're the dope who picked a fight with Team Star... Prepare to get messed up.", + "1_female": "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!" }, "victory": { @@ -829,6 +832,7 @@ "atticus": { "encounter": { "1": "You have some nerve baring your fangs at Team Star. Come, then, villainous wretch!", + "1_female": "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!" }, "victory": { @@ -839,7 +843,8 @@ "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!" + "2": "I'll wipe that smug look off your face for sure! You're going down!", + "2_female": "I'll wipe that smug look off your face for sure! You're going down!" }, "victory": { "1": "Ugh! How could I LOSE! What the HECK!", diff --git a/src/locales/en/move-trigger.json b/src/locales/en/move-trigger.json index bc58e2878dd..93d25e506ba 100644 --- a/src/locales/en/move-trigger.json +++ b/src/locales/en/move-trigger.json @@ -66,6 +66,7 @@ "suppressAbilities": "{{pokemonName}}'s ability\nwas suppressed!", "revivalBlessing": "{{pokemonName}} was revived!", "swapArenaTags": "{{pokemonName}} swapped the battle effects affecting each side of the field!", + "chillyReception": "{{pokemonName}} is preparing to tell a chillingly bad joke!", "exposedMove": "{{pokemonName}} identified\n{{targetPokemonName}}!", "safeguard": "{{targetName}} is protected by Safeguard!", "substituteOnOverlap": "{{pokemonName}} already\nhas a substitute!", diff --git a/src/locales/en/move.json b/src/locales/en/move.json index 7a10335ed06..f54003a296c 100644 --- a/src/locales/en/move.json +++ b/src/locales/en/move.json @@ -3129,7 +3129,7 @@ }, "auraWheel": { "name": "Aura Wheel", - "effect": "Morpeko attacks and raises its Speed with the energy stored in its cheeks. This move's type changes depending on the user's form." + "effect": "The user attacks and raises its Speed with the energy stored in its cheeks. If used by Morpeko, this move's type changes depending on the user's form." }, "breakingSwipe": { "name": "Breaking Swipe", diff --git a/src/locales/en/pokemon-form.json b/src/locales/en/pokemon-form.json index ea7e0f60c90..642d31a2a20 100644 --- a/src/locales/en/pokemon-form.json +++ b/src/locales/en/pokemon-form.json @@ -1,4 +1,5 @@ { + "pikachu": "Normal", "pikachuCosplay": "Cosplay", "pikachuCoolCosplay": "Cool Cosplay", "pikachuBeautyCosplay": "Beauty Cosplay", @@ -6,8 +7,10 @@ "pikachuSmartCosplay": "Smart Cosplay", "pikachuToughCosplay": "Tough Cosplay", "pikachuPartner": "Partner", + "eevee": "Normal", "eeveePartner": "Partner", - "pichuSpiky": "Spiky", + "pichu": "Normal", + "pichuSpiky": "Spiky-Eared", "unownA": "A", "unownB": "B", "unownC": "C", @@ -36,135 +39,252 @@ "unownZ": "Z", "unownExclamation": "!", "unownQuestion": "?", - "castformSunny": "Sunny", - "castformRainy": "Rainy", - "castformSnowy": "Snowy", - "deoxysNormal": "Normal", - "burmyPlant": "Plant", - "burmySandy": "Sandy", - "burmyTrash": "Trash", - "shellosEast": "East", - "shellosWest": "West", + "castform": "Normal Form", + "castformSunny": "Sunny Form", + "castformRainy": "Rainy Form", + "castformSnowy": "Snowy Form", + "deoxysNormal": "Normal Forme", + "deoxysAttack": "Attack Forme", + "deoxysDefense": "Defense Forme", + "deoxysSpeed": "Speed Forme", + "burmyPlant": "Plant Cloak", + "burmySandy": "Sandy Cloak", + "burmyTrash": "Trash Cloak", + "cherubiOvercast": "Overcast Form", + "cherubiSunshine": "Sunshine Form", + "shellosEast": "East Sea", + "shellosWest": "West Sea", + "rotom": "Normal", "rotomHeat": "Heat", "rotomWash": "Wash", "rotomFrost": "Frost", "rotomFan": "Fan", "rotomMow": "Mow", - "giratinaAltered": "Altered", - "shayminLand": "Land", - "basculinRedStriped": "Red Striped", - "basculinBlueStriped": "Blue Striped", - "basculinWhiteStriped": "White Striped", - "deerlingSpring": "Spring", - "deerlingSummer": "Summer", - "deerlingAutumn": "Autumn", - "deerlingWinter": "Winter", - "tornadusIncarnate": "Incarnate", - "thundurusIncarnate": "Incarnate", - "landorusIncarnate": "Incarnate", - "keldeoOrdinary": "Ordinary", - "meloettaAria": "Aria", - "meloettaPirouette": "Pirouette", + "dialga": "Normal", + "dialgaOrigin": "Origin Forme", + "palkia": "Normal", + "palkiaOrigin": "Origin Forme", + "giratinaAltered": "Altered Forme", + "giratinaOrigin": "Origin Forme", + "shayminLand": "Land Forme", + "shayminSky": "Sky Forme", + "basculinRedStriped": "Red-Striped Form", + "basculinBlueStriped": "Blue-Striped Form", + "basculinWhiteStriped": "White-Striped Form", + "darumaka": "Standard Mode", + "darumakaZen": "Zen Mode", + "deerlingSpring": "Spring Form", + "deerlingSummer": "Summer Form", + "deerlingAutumn": "Autumn Form", + "deerlingWinter": "Winter Form", + "tornadusIncarnate": "Incarnate Forme", + "tornadusTherian": "Therian Forme", + "thundurusIncarnate": "Incarnate Forme", + "thundurusTherian": "Therian Forme", + "landorusIncarnate": "Incarnate Forme", + "landorusTherian": "Therian Forme", + "kyurem": "Normal", + "kyuremBlack": "Black", + "kyuremWhite": "White", + "keldeoOrdinary": "Ordinary Form", + "keldeoResolute": "Resolute", + "meloettaAria": "Aria Forme", + "meloettaPirouette": "Pirouette Forme", + "genesect": "Normal", + "genesectShock": "Shock Drive", + "genesectBurn": "Burn Drive", + "genesectChill": "Chill Drive", + "genesectDouse": "Douse Drive", + "froakie": "Normal", "froakieBattleBond": "Battle Bond", - "scatterbugMeadow": "Meadow", - "scatterbugIcySnow": "Icy Snow", - "scatterbugPolar": "Polar", - "scatterbugTundra": "Tundra", - "scatterbugContinental": "Continental", - "scatterbugGarden": "Garden", - "scatterbugElegant": "Elegant", - "scatterbugModern": "Modern", - "scatterbugMarine": "Marine", - "scatterbugArchipelago": "Archipelago", - "scatterbugHighPlains": "High Plains", - "scatterbugSandstorm": "Sandstorm", - "scatterbugRiver": "River", - "scatterbugMonsoon": "Monsoon", - "scatterbugSavanna": "Savanna", - "scatterbugSun": "Sun", - "scatterbugOcean": "Ocean", - "scatterbugJungle": "Jungle", - "scatterbugFancy": "Fancy", - "scatterbugPokeBall": "Poké Ball", - "flabebeRed": "Red", - "flabebeYellow": "Yellow", - "flabebeOrange": "Orange", - "flabebeBlue": "Blue", - "flabebeWhite": "White", - "furfrouHeart": "Heart", - "furfrouStar": "Star", - "furfrouDiamond": "Diamond", - "furfrouDebutante": "Debutante", - "furfrouMatron": "Matron", - "furfrouDandy": "Dandy", - "furfrouLaReine": "La Reine", - "furfrouKabuki": "Kabuki", - "furfrouPharaoh": "Pharaoh", - "pumpkabooSmall": "Small", - "pumpkabooLarge": "Large", - "pumpkabooSuper": "Super", - "xerneasNeutral": "Neutral", - "xerneasActive": "Active", + "froakieAsh": "Ash", + "scatterbugMeadow": "Meadow Pattern", + "scatterbugIcySnow": "Icy Snow Pattern", + "scatterbugPolar": "Polar Pattern", + "scatterbugTundra": "Tundra Pattern", + "scatterbugContinental": "Continental Pattern", + "scatterbugGarden": "Garden Pattern", + "scatterbugElegant": "Elegant Pattern", + "scatterbugModern": "Modern Pattern", + "scatterbugMarine": "Marine Pattern", + "scatterbugArchipelago": "Archipelago Pattern", + "scatterbugHighPlains": "High Plains Pattern", + "scatterbugSandstorm": "Sandstorm Pattern", + "scatterbugRiver": "River Pattern", + "scatterbugMonsoon": "Monsoon Pattern", + "scatterbugSavanna": "Savanna Pattern", + "scatterbugSun": "Sun Pattern", + "scatterbugOcean": "Ocean Pattern", + "scatterbugJungle": "Jungle Pattern", + "scatterbugFancy": "Fancy Pattern", + "scatterbugPokeBall": "Poké Ball Pattern", + "flabebeRed": "Red Flower", + "flabebeYellow": "Yellow Flower", + "flabebeOrange": "Orange Flower", + "flabebeBlue": "Blue Flower", + "flabebeWhite": "White Flower", + "furfrou": "Natural Form", + "furfrouHeart": "Heart Trim", + "furfrouStar": "Star Trim", + "furfrouDiamond": "Diamond Trim", + "furfrouDebutante": "Debutante Trim", + "furfrouMatron": "Matron Trim", + "furfrouDandy": "Dandy Trim", + "furfrouLaReine": "La Reine Trim", + "furfrouKabuki": "Kabuki Trim", + "furfrouPharaoh": "Pharaoh Trim", + "espurrMale": "Male", + "espurrFemale": "Female", + "honedgeShiled": "Shield Forme", + "honedgeBlade": "Blade Forme", + "pumpkaboo": "Average Size", + "pumpkabooSmall": "Small Size", + "pumpkabooLarge": "Large Size", + "pumpkabooSuper": "Super Size", + "xerneasNeutral": "Neutral Mode", + "xerneasActive": "Active Mode", "zygarde50": "50% Forme", "zygarde10": "10% Forme", "zygarde50Pc": "50% Forme Power Construct", "zygarde10Pc": "10% Forme Power Construct", "zygardeComplete": "Complete Forme", - "oricorioBaile": "Baile", - "oricorioPompom": "Pom-Pom", - "oricorioPau": "Pau", - "oricorioSensu": "Sensu", + "hoopa": "Confined", + "hoopaUnbound": "Unbound", + "oricorioBaile": "Baile Style", + "oricorioPompom": "Pom-Pom Style", + "oricorioPau": "Pau Style", + "oricorioSensu": "Sensu Style", + "rockruff": "Normal", "rockruffOwnTempo": "Own Tempo", - "miniorRedMeteor": "Red Meteor", - "miniorOrangeMeteor": "Orange Meteor", - "miniorYellowMeteor": "Yellow Meteor", - "miniorGreenMeteor": "Green Meteor", - "miniorBlueMeteor": "Blue Meteor", - "miniorIndigoMeteor": "Indigo Meteor", - "miniorVioletMeteor": "Violet Meteor", - "miniorRed": "Red", - "miniorOrange": "Orange", - "miniorYellow": "Yellow", - "miniorGreen": "Green", - "miniorBlue": "Blue", - "miniorIndigo": "Indigo", - "miniorViolet": "Violet", - "mimikyuDisguised": "Disguised", - "mimikyuBusted": "Busted", + "rockruffMidday": "Midday Form", + "rockruffMidnight": "Midnight Form", + "rockruffDusk": "Dusk Form", + "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": "Red Meteor Form", + "miniorOrangeMeteor": "Orange Meteor Form", + "miniorYellowMeteor": "Yellow Meteor Form", + "miniorGreenMeteor": "Green Meteor Form", + "miniorBlueMeteor": "Blue Meteor Form", + "miniorIndigoMeteor": "Indigo Meteor Form", + "miniorVioletMeteor": "Violet Meteor Form", + "miniorRed": "Red Core Form", + "miniorOrange": "Orange Core Form", + "miniorYellow": "Yellow Core Form", + "miniorGreen": "Green Core Form", + "miniorBlue": "Blue Core Form", + "miniorIndigo": "Indigo Core Form", + "miniorViolet": "Violet Core Form", + "mimikyuDisguised": "Disguised Form", + "mimikyuBusted": "Busted Form", + "necrozma": "Normal", + "necrozmaDuskMane": "Dusk Mane", + "necrozmaDawnWings": "Dawn Wings", + "necrozmaUltra": "Ultra", + "magearna": "Normal", "magearnaOriginal": "Original", + "marshadow": "Normal", "marshadowZenith": "Zenith", - "sinisteaPhony": "Phony", - "sinisteaAntique": "Antique", + "cramorant": "Normal", + "cramorantGulping": "Gulping Form", + "cramorantGorging": "Gorging Form", + "toxelAmped": "Amped Form", + "toxelLowkey": "Low-Key Form", + "sinisteaPhony": "Phony Form", + "sinisteaAntique": "Antique Form", + "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": "No Ice", "indeedeeMale": "Male", "indeedeeFemale": "Female", - "morpekoFullBelly": "Full Belly", + "morpekoFullBelly": "Full Belly Mode", + "morpekoHangry": "Hangry Mode", "zacianHeroOfManyBattles": "Hero Of Many Battles", + "zacianCrowned": "Crowned", "zamazentaHeroOfManyBattles": "Hero Of Many Battles", + "zamazentaCrowned": "Crowned", + "kubfuSingleStrike": "Single Strike Style", + "kubfuRapidStrike": "Rapid Strike Style", + "zarude": "Normal", "zarudeDada": "Dada", - "enamorusIncarnate": "Incarnate", + "calyrex": "Normal", + "calyrexIce": "Ice Rider", + "calyrexShadow": "Shadow Rider", + "basculinMale": "Male", + "basculinFemale": "Female", + "enamorusIncarnate": "Incarnate Forme", + "enamorusTherian": "Therian Forme", + "lechonkMale": "Male", + "lechonkFemale": "Female", + "tandemausFour": "Family of Four", + "tandemausThree": "Family of Three", "squawkabillyGreenPlumage": "Green Plumage", "squawkabillyBluePlumage": "Blue Plumage", "squawkabillyYellowPlumage": "Yellow Plumage", "squawkabillyWhitePlumage": "White Plumage", - "tatsugiriCurly": "Curly", - "tatsugiriDroopy": "Droopy", - "tatsugiriStretchy": "Stretchy", - "gimmighoulChest": "Chest", - "gimmighoulRoaming": "Roaming", + "finizenZero": "Zero Form", + "finizenHero": "Hero Form", + "tatsugiriCurly": "Curly Form", + "tatsugiriDroopy": "Droopy Form", + "tatsugiriStretchy": "Stretchy Form", + "dunsparceTwo": "Two-Segment Form", + "dunsparceThree": "Three-Segment Form", + "gimmighoulChest": "Chest Form", + "gimmighoulRoaming": "Roaming Form", "koraidonApexBuild": "Apex Build", "koraidonLimitedBuild": "Limited Build", "koraidonSprintingBuild": "Sprinting Build", "koraidonSwimmingBuild": "Swimming Build", "koraidonGlidingBuild": "Gliding Build", "miraidonUltimateMode": "Ultimate Mode", - "miraidonLowPowerMode": "Low Power Mode", + "miraidonLowPowerMode": "Low-Power Mode", "miraidonDriveMode": "Drive Mode", "miraidonAquaticMode": "Aquatic Mode", "miraidonGlideMode": "Glide Mode", - "poltchageistCounterfeit": "Counterfeit", - "poltchageistArtisan": "Artisan", - "paldeaTaurosCombat": "Combat", - "paldeaTaurosBlaze": "Blaze", - "paldeaTaurosAqua": "Aqua" -} \ No newline at end of file + "poltchageistCounterfeit": "Counterfeit Form", + "poltchageistArtisan": "Artisan Form", + "poltchageistUnremarkable": "Unremarkable Form", + "poltchageistMasterpiece": "Masterpiece Form", + "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 Form", + "terpagosStellar": "Stellar Form", + "galarDarumaka": "Standard Mode", + "galarDarumakaZen": "Zen Mode", + "paldeaTaurosCombat": "Combat Breed", + "paldeaTaurosBlaze": "Blaze Breed", + "paldeaTaurosAqua": "Aqua Breed" +} diff --git a/src/locales/en/trainer-names.json b/src/locales/en/trainer-names.json index 1d51b48d43f..5a9db128e2f 100644 --- a/src/locales/en/trainer-names.json +++ b/src/locales/en/trainer-names.json @@ -155,7 +155,7 @@ "lusamine": "Lusamine", "guzma": "Guzma", "rose": "Rose", - "cassiopeia": "Cassiopeia", + "cassiopeia": "Penny", "blue_red_double": "Blue & Red", "red_blue_double": "Red & Blue", diff --git a/src/locales/es/ability-trigger.json b/src/locales/es/ability-trigger.json index 4380c84b8e9..07ce3459dc8 100644 --- a/src/locales/es/ability-trigger.json +++ b/src/locales/es/ability-trigger.json @@ -4,7 +4,7 @@ "costar": "¡{{pokemonName}} copió los cambios de características de {{allyName}}!", "iceFaceAvoidedDamage": "¡{{pokemonNameWithAffix}} evitó\ndaño con {{abilityName}}!", "perishBody": "¡{{abilityName}} de {{pokemonName}} debilitará a ambos Pokémon en 3 turnos!", - "poisonHeal": "¡{{pokemonNameWithAffix}} restauró algunos de sus PS gracias a {{abilityName}}!", + "poisonHeal": "¡{{pokemonName}} restauró algunos de sus PS gracias a {{abilityName}}!", "trace": "¡{{pokemonName}} ha copiado la habilidad {{abilityName}} \nde {{targetName}}!", "windPowerCharged": "¡{{pokemonName}} se ha cargado de electricidad gracias a {{moveName}}!", "quickDraw": "¡{{pokemonName}} ataca primero gracias a la habilidad Mano Rápida!", diff --git a/src/locales/es/ability.json b/src/locales/es/ability.json index 598694f441e..01b5348d742 100644 --- a/src/locales/es/ability.json +++ b/src/locales/es/ability.json @@ -1237,6 +1237,6 @@ }, "poisonPuppeteer": { "name": "Títere Tóxico", - "description": "Los rivales que Pecharunt envenene con sus movimientos también sufrirán confusión." + "description": "Los rivales que el usuario envenene con sus movimientos también sufrirán confusión." } } diff --git a/src/locales/es/achv.json b/src/locales/es/achv.json index 14501dbdb6b..b66650ee137 100644 --- a/src/locales/es/achv.json +++ b/src/locales/es/achv.json @@ -174,5 +174,9 @@ "INVERSE_BATTLE": { "name": "Espejo ojepsE", "description": "Completa el reto de Combate Inverso.\n.osrevnI etabmoC ed oter le atelpmoC" + }, + "BREEDERS_IN_SPACE": { + "name": "¡Criapokémon en el Espacio!", + "description": "Derrota al Criapokémon Experto en el Bioma Espacial." } } diff --git a/src/locales/es/battle-info.json b/src/locales/es/battle-info.json index 9e26dfeeb6e..2d7561c40b3 100644 --- a/src/locales/es/battle-info.json +++ b/src/locales/es/battle-info.json @@ -1 +1,3 @@ -{} \ No newline at end of file +{ + "generation": "Generación {{generation}}" +} diff --git a/src/locales/es/battle.json b/src/locales/es/battle.json index c5fbf25f3ae..42c1346c118 100644 --- a/src/locales/es/battle.json +++ b/src/locales/es/battle.json @@ -1,91 +1,107 @@ { "bossAppeared": "¡{{bossName}} te corta el paso!", "trainerAppeared": "¡{{trainerName}}\nte desafía!", + "trainerAppearedDouble": "¡{{trainerName}}\nquieren luchar!", "trainerSendOut": "¡{{trainerName}} saca a\n{{pokemonName}}!", - "singleWildAppeared": "¡Un {{pokemonName}} salvaje te corta el paso!", - "multiWildAppeared": "¡Un {{pokemonName1}} y un {{pokemonName2}} salvajes\nte cortan el paso!", - "playerComeBack": "¡{{pokemonName}}, ven aquí!", + "singleWildAppeared": "¡{{pokemonName}} salvaje te corta el paso!", + "multiWildAppeared": "¡{{pokemonName1}} y {{pokemonName2}} salvajes\nte cortan el paso!", + "playerComeBack": "¡{{pokemonName}}, vuelve!", "trainerComeBack": "¡{{trainerName}} retira a {{pokemonName}} del combate!", "playerGo": "¡Adelante, {{pokemonName}}!", "trainerGo": "¡{{trainerName}} saca a {{pokemonName}}!", - "switchQuestion": "¿Quieres cambiar a\n{{pokemonName}}?", + "switchQuestion": "¿Quieres cambiar de {{pokemonName}}?", "trainerDefeated": "¡Has derrotado a\n{{trainerName}}!", - "moneyWon": "¡Has ganado\n₽{{moneyAmount}} por vencer!", - "pokemonCaught": "¡{{pokemonName}} atrapado!", - "addedAsAStarter": "{{pokemonName}} ha sido añadido\na tus iniciales!", - "partyFull": "Tu equipo esta completo.\n¿Quieres liberar un Pokémon para meter a {{pokemonName}}?", + "moneyWon": "¡Has ganado\n{{moneyAmount}}₽ por vencer!", + "moneyPickedUp": "¡Has recogido {{moneyAmount}}₽!", + "pokemonCaught": "¡{{pokemonName}} ha sido atrapado!", + "pokemonObtained": "¡Has recibido a {{pokemonName}}!", + "pokemonBrokeFree": "¡Oh, no!\n¡El Pokémon se ha escapado!", + "pokemonFled": "¡El {{pokemonName}} salvaje ha huido!", + "playerFled": "¡Huiste del {{pokemonName}}!", + "addedAsAStarter": "¡{{pokemonName}} ha sido añadido a tus iniciales!", + "partyFull": "Tu equipo está completo.\n¿Quieres liberar a un Pokémon para quedarte con {{pokemonName}}?", "pokemon": "Pokémon", - "sendOutPokemon": "¡Adelante, {{pokemonName}}!", + "sendOutPokemon": "¡Vamos, {{pokemonName}}!", "hitResultCriticalHit": "¡Un golpe crítico!", "hitResultSuperEffective": "¡Es supereficaz!", "hitResultNotVeryEffective": "No es muy eficaz…", - "hitResultNoEffect": "No afecta a {{pokemonName}}!", + "hitResultNoEffect": "No afecta a {{pokemonName}}...", "hitResultImmune": "¡No afecta a {{pokemonName}}!", - "hitResultOneHitKO": "¡KO en 1 golpe!", + "hitResultOneHitKO": "¡KO de un golpe!", "attackFailed": "¡Pero ha fallado!", "attackMissed": "¡{{pokemonNameWithAffix}}\nha evitado el ataque!", "attackHitsCount": "N.º de golpes: {{count}}.", - "rewardGain": "¡Has obtenido\n{{modifierName}}!", + "rewardGain": "¡Has conseguido\n{{modifierName}}!", "expGain": "{{pokemonName}} ha ganado\n{{exp}} puntos de experiencia.", - "levelUp": "¡{{pokemonName}} ha subido al \nNv. {{level}}!", + "levelUp": "¡{{pokemonName}} ha subido a\nNv. {{level}}!", "learnMove": "¡{{pokemonName}} ha aprendido {{moveName}}!", - "learnMovePrompt": "{{pokemonName}} quiere aprender\n{{moveName}}.", - "learnMoveLimitReached": "Pero, {{pokemonName}} ya conoce\ncuatro movimientos.", + "learnMovePrompt": "{{pokemonName}} quiere aprender {{moveName}}.", + "learnMoveLimitReached": "Pero {{pokemonName}} ya conoce\ncuatro movimientos.", "learnMoveReplaceQuestion": "¿Quieres sustituir uno de sus movimientos por {{moveName}}?", "learnMoveStopTeaching": "¿Prefieres que no aprenda\n{{moveName}}?", "learnMoveNotLearned": "{{pokemonName}} no ha aprendido {{moveName}}.", - "learnMoveForgetQuestion": "¿Qué movimiento quieres que olvide?", + "learnMoveForgetQuestion": "¿Qué movimiento debería olvidar?", "learnMoveForgetSuccess": "{{pokemonName}} ha olvidado cómo utilizar {{moveName}}.", - "countdownPoof": "@d{32}1, @d{15}2, @d{15}y@d{15}… @d{15}… @d{15}… @d{15}@s{se/pb_bounce_1}¡Puf!", - "learnMoveAnd": "Y…", + "countdownPoof": "@d{32}1, @d{15}2, @d{15}3@d{15}… @d{15}… @d{15}… @d{15}@s{se/pb_bounce_1}Y...", + "learnMoveAnd": "¡Puf!", "levelCapUp": "¡Se ha incrementado el\nnivel máximo a {{levelCap}}!", "moveNotImplemented": "{{moveName}} aún no está implementado y no se puede seleccionar.", - "moveNoPP": "¡No hay suficientes PP\npara este movimiento!", - "moveDisabled": "!No puede usar {{moveName}} porque ha sido anulado!", + "moveNoPP": "¡No quedan PP para este movimiento!", + "moveDisabled": "¡{{moveName}} está anulado!", "disableInterruptedMove": "¡Se ha anulado el movimiento {{moveName}}\nde {{pokemonNameWithAffix}}!", "noPokeballForce": "Una fuerza misteriosa\nte impide usar Poké Balls.", - "noPokeballTrainer": "¡No puedes atrapar a los\nPokémon de los demás!", - "noPokeballMulti": "¡No se pueden lanzar Poké Balls\ncuando hay más de un Pokémon!", - "noPokeballStrong": "¡Este Pokémon es demasiado fuerte para ser capturado!\nNecesitas bajarle los PS primero!", + "noPokeballTrainer": "¡No está bien capturar los\nPokémon de los demás!", + "noPokeballMulti": "¡No puedes lanzar Poké Balls\ncuando hay más de un Pokémon!", + "noPokeballStrong": "Este Pokémon es demasiado fuerte para ser capturado.\n¡Baja sus PS!", + "noPokeballMysteryEncounter": "¡No puedes capturar este Pokémon!", "noEscapeForce": "Una fuerza misteriosa\nte impide huir.", - "noEscapeTrainer": "¡No puedes huir de los\ncombates contra Entrenadores!", - "noEscapePokemon": "¡El movimiento {{moveName}} de {{pokemonName}} impide la huida!", + "noEscapeTrainer": "¡No puedes huir de los\ncombates contra entrenadores!", + "noEscapePokemon": "¡{{moveName}} de {{pokemonName}} no te deja huir!", "runAwaySuccess": "¡Escapas sin problemas!", "runAwayCannotEscape": "¡No has podido escapar!", "escapeVerbSwitch": "cambiar", "escapeVerbFlee": "huir", - "notDisabled": "¡El movimiento {{moveName}} de {{pokemonName}}\nya no está anulado!", - "turnEndHpRestore": "Los PS de {{pokemonName}} fueron restaurados.", + "notDisabled": "¡{{moveName}} de {{pokemonName}} ya no está anulado!", + "turnEndHpRestore": "{{pokemonName}} ha recuperado PS.", "hpIsFull": "¡Los PS de {{pokemonName}}\nestán al máximo!", "skipItemQuestion": "¿Estás seguro de que no quieres coger un objeto?", - "itemStackFull": "El máximo número de {{fullItemName}} ha sido alcanzado. Recibirás {{itemName}} en su lugar.", + "itemStackFull": "No tienes sitio para más {{fullItemName}}. Recibirás {{itemName}} en su lugar.", "eggHatching": "¿Y esto?", "ivScannerUseQuestion": "¿Quieres usar el Escáner de IVs en {{pokemonName}}?", "wildPokemonWithAffix": "El {{pokemonName}} salvaje", "foePokemonWithAffix": "El {{pokemonName}} enemigo", "useMove": "¡{{pokemonNameWithAffix}} usó {{moveName}}!", - "drainMessage": "¡{{pokemonName}} tuvo su\nenergía absorbida!", + "drainMessage": "¡La energía de {{pokemonName}}\nha sido absorbida!", "regainHealth": "¡{{pokemonName}} recuperó\nPS!", "stealEatBerry": "¡{{pokemonName}} robó la {{berryName}}\nde {{targetName}} y se la comió!", + "ppHealBerry": "¡{{pokemonNameWithAffix}} recuperó algunos PP de {{moveName}}\ngracias a su {{berryName}}!", + "hpHealBerry": "¡{{pokemonNameWithAffix}} recuperó sus PS gracias a su {{berryName}}!", "fainted": "¡{{pokemonNameWithAffix}} se debilitó!", "statsAnd": "y", "stats": "Las estadísticas", - "statRose_one": "¡El {{stats}} de {{pokemonNameWithAffix}} ha subido!", - "statRose_other": "¡{{stats}} de\n{{pokemonNameWithAffix}} han subido!", - "statSharplyRose_one": "¡El {{stats}} de {{pokemonNameWithAffix}} ha subido mucho!", - "statSharplyRose_other": "¡{{stats}} de\n{{pokemonNameWithAffix}} han subido mucho!", - "statRoseDrastically_one": "¡El {{stats}} de {{pokemonNameWithAffix}} ha subido muchísimo!", - "statRoseDrastically_other": "¡{{stats}} de\n{{pokemonNameWithAffix}} han subido muchísimo!", - "statWontGoAnyHigher_one": "¡El {{stats}} de {{pokemonNameWithAffix}} no puede subir más!", - "statWontGoAnyHigher_other": "¡{{stats}} de\n{{pokemonNameWithAffix}} no pueden subir más!", - "statFell_one": "¡El {{stats}} de {{pokemonNameWithAffix}} ha bajado!", - "statFell_other": "¡{{stats}} de\n{{pokemonNameWithAffix}} han bajado!", - "statHarshlyFell_one": "¡El {{stats}} de {{pokemonNameWithAffix}} ha bajado mucho!", - "statHarshlyFell_other": "¡{{stats}} de\n{{pokemonNameWithAffix}} han bajado mucho!", - "statSeverelyFell_one": "¡El {{stats}} de {{pokemonNameWithAffix}} ha bajado muchísimo!", - "statSeverelyFell_other": "¡{{stats}} de\n{{pokemonNameWithAffix}} han bajado muchísimo!", - "statWontGoAnyLower_one": "¡El {{stats}} de {{pokemonNameWithAffix}} no puede bajar más!", - "statWontGoAnyLower_other": "¡{{stats}} de\n{{pokemonNameWithAffix}} no pueden bajar más!", + "statRose_one": "¡{{stats}} de {{pokemonNameWithAffix}} ha aumentado!", + "statRose_other": "¡{{stats}} de {{pokemonNameWithAffix}} ha aumentado!", + "statSharplyRose_one": "¡{{stats}} de {{pokemonNameWithAffix}} ha aumentado mucho!", + "statSharplyRose_other": "¡{{stats}} de {{pokemonNameWithAffix}} ha aumentado mucho!", + "statRoseDrastically_one": "¡{{stats}} de {{pokemonNameWithAffix}} ha aumentado muchísimo!", + "statRoseDrastically_other": "¡{{stats}} de {{pokemonNameWithAffix}} ha aumentado muchísimo!", + "statWontGoAnyHigher_one": "¡{{stats}} de {{pokemonNameWithAffix}} no puede aumentar más!", + "statWontGoAnyHigher_other": "¡{{stats}} de {{pokemonNameWithAffix}} no puede aumentar más!", + "statFell_one": "¡{{stats}} de {{pokemonNameWithAffix}} ha disminuido!", + "statFell_other": "¡{{stats}} de {{pokemonNameWithAffix}} ha disminuido!", + "statHarshlyFell_one": "¡{{stats}} de {{pokemonNameWithAffix}} ha disminuido mucho!", + "statHarshlyFell_other": "¡{{stats}} de {{pokemonNameWithAffix}} ha disminuido mucho!", + "statSeverelyFell_one": "¡{{stats}} de {{pokemonNameWithAffix}} ha disminuido muchísimo!", + "statSeverelyFell_other": "¡{{stats}} de {{pokemonNameWithAffix}} ha disminuido muchísimo!", + "statWontGoAnyLower_one": "¡{{stats}} de {{pokemonNameWithAffix}} no puede disminuir más!", + "statWontGoAnyLower_other": "¡{{stats}} de {{pokemonNameWithAffix}} no puede disminuir más!", + "transformedIntoType": "¡{{pokemonName}} ha cambiado a tipo {{type}}!", + "retryBattle": "¿Quieres reintentar este combate?", + "unlockedSomething": "¡Has desbloqueado {{unlockedThing}}!", + "congratulations": "¡Enhorabuena!", + "beatModeFirstTime": "¡{{speciesName}} ha completado el modo {{gameMode}} por primera vez!\n¡Has conseguido {{newModifier}}!", + "ppReduced": "¡El movimiento {{moveName}} de {{targetName}} ha perdido {{reduction}} PP!", + "mysteryEncounterAppeared": "¿Que es esto?", "battlerTagsHealBlock": "¡{{pokemonNameWithAffix}} no puede restaurar sus PS!", "battlerTagsHealBlockOnRemove": "¡{{pokemonNameWithAffix}} ya puede recuperar PS!" } diff --git a/src/locales/es/bgm-name.json b/src/locales/es/bgm-name.json index f0e0ab7e852..1def3575a6d 100644 --- a/src/locales/es/bgm-name.json +++ b/src/locales/es/bgm-name.json @@ -107,17 +107,17 @@ "forest": "PMD EoS - Bosque Sombrío", "grass": "PMD EoS - Manzanar", "graveyard": "PMD EoS - Bosque Misterio", - "ice_cave": "PMD EoS - Gran Iceberg", + "ice_cave": "Firel - -50°C", "island": "PMD EoS - Costa Escarpada", "jungle": "Lmz - Jungla", "laboratory": "Firel - Laboratorio", - "lake": "PMD EoS - Cueva Cristal", + "lake": "Lmz - Lake", "meadow": "PMD EoS - Bosque de la Cumbre del Cielo", "metropolis": "Firel - Metrópolis", "mountain": "PMD EoS - Monte Cuerno", - "plains": "PMD EoS - Pradera de la Cumbre del Cielo", - "power_plant": "PMD EoS - Pradera Destello", - "ruins": "PMD EoS - Sima Hermética", + "plains": "Firel - Route 888", + "power_plant": "Firel - The Klink", + "ruins": "Lmz - Ancient Ruins", "sea": "Andr06 - Misticismo marino", "seabed": "Firel - Lecho del mar", "slum": "Andr06 - Snom sigiloso", @@ -127,7 +127,7 @@ "tall_grass": "PMD EoS - Bosque Niebla", "temple": "PMD EoS - Cueva Regia", "town": "PMD EoS - Tema del territorio aleatorio 3", - "volcano": "PMD EoS - Cueva Vapor", + "volcano": "Firel - Twisturn Volcano", "wasteland": "PMD EoS - Corazón Tierra Oculta", "encounter_ace_trainer": "BW - ¡Vs. entrenador guay!", "encounter_backpacker": "BW - ¡Vs. mochilero!", @@ -145,5 +145,11 @@ "encounter_youngster": "BW - ¡Vs. chico joven!", "heal": "BW - Cura Pokémon", "menu": "PMD EoS - ¡Bienvenidos al mundo de los Pokémon!", - "title": "PMD EoS - Tema del menú principal" + "title": "PMD EoS - Tema del menú principal", + + "mystery_encounter_weird_dream": "PMM EdC Pináculo del Tiempo", + "mystery_encounter_fun_and_games": "PMM EdC Gran Bluff", + "mystery_encounter_gen_5_gts": "BN GTS", + "mystery_encounter_gen_6_gts": "XY GTS", + "mystery_encounter_delibirdy": "Firel - DeliDelivery!" } diff --git a/src/locales/es/challenges.json b/src/locales/es/challenges.json index 6a7db8c10c3..3760d95126c 100644 --- a/src/locales/es/challenges.json +++ b/src/locales/es/challenges.json @@ -1,5 +1,6 @@ { - "title": "Parámetros de Desafíos", + "title": "Parámetros de desafíos", + "illegalEvolution": "¡{{pokemon}} ha evolucionado! ¡No puede ser parte del desafío!", "singleGeneration": { "name": "Monogeneración", "desc": "Solo puedes usar Pokémon de {{gen}} generación.", @@ -14,16 +15,22 @@ "gen_8": "octava", "gen_9": "novena" }, + "freshStart": { + "name": "Nuevo Comienzo", + "desc": "Sólo puedes usar Pokémon iniciales originales, como si acabases de empezar PokéRogue.", + "value.0": "Desact.", + "value.1": "Activo" + }, "singleType": { "name": "Monotipo", "desc": "Solo puedes usar Pokémon with the {{type}} type.", "desc_default": "Solo puedes usar Pokémon del tipo elegido." }, "inverseBattle": { - "name": "Combate Inverso", + "name": "Lucha Inversa", "shortName": "Inverso", - "desc": "La efectividad de los tipos es invertida. No hay inmunidades entre tipos.\nEste reto deshabilita logros de otros retos.", - "value.0": "Desactivado", - "value.1": "Activado" + "desc": "Las relaciones entre tipos son invertidas y ningún tipo es inmune a otro.\nDesactiva el resto de desafíos.", + "value.0": "Desact.", + "value.1": "Activo" } -} \ No newline at end of file +} diff --git a/src/locales/es/common.json b/src/locales/es/common.json index 556ebb8454e..2b0af6c600c 100644 --- a/src/locales/es/common.json +++ b/src/locales/es/common.json @@ -1,7 +1,8 @@ { + "start": "Listo", "luckIndicator": "Suerte:", "shinyOnHover": "Shiny", "commonShiny": "Común", "rareShiny": "Raro", "epicShiny": "Épico" -} \ No newline at end of file +} diff --git a/src/locales/es/config.ts b/src/locales/es/config.ts index 8f75c08f3f6..28d9a2d9346 100644 --- a/src/locales/es/config.ts +++ b/src/locales/es/config.ts @@ -53,7 +53,49 @@ import terrain from "./terrain.json"; import modifierSelectUiHandler from "./modifier-select-ui-handler.json"; import moveTriggers from "./move-trigger.json"; import runHistory from "./run-history.json"; +import mysteryEncounterMessages from "./mystery-encounter-messages.json"; +import lostAtSea from "./mystery-encounters/lost-at-sea-dialogue.json"; +import mysteriousChest from "./mystery-encounters/mysterious-chest-dialogue.json"; +import mysteriousChallengers from "./mystery-encounters/mysterious-challengers-dialogue.json"; +import darkDeal from "./mystery-encounters/dark-deal-dialogue.json"; +import departmentStoreSale from "./mystery-encounters/department-store-sale-dialogue.json"; +import fieldTrip from "./mystery-encounters/field-trip-dialogue.json"; +import fieryFallout from "./mystery-encounters/fiery-fallout-dialogue.json"; +import fightOrFlight from "./mystery-encounters/fight-or-flight-dialogue.json"; +import safariZone from "./mystery-encounters/safari-zone-dialogue.json"; +import shadyVitaminDealer from "./mystery-encounters/shady-vitamin-dealer-dialogue.json"; +import slumberingSnorlax from "./mystery-encounters/slumbering-snorlax-dialogue.json"; +import trainingSession from "./mystery-encounters/training-session-dialogue.json"; +import theStrongStuff from "./mystery-encounters/the-strong-stuff-dialogue.json"; +import pokemonSalesman from "./mystery-encounters/the-pokemon-salesman-dialogue.json"; +import offerYouCantRefuse from "./mystery-encounters/an-offer-you-cant-refuse-dialogue.json"; +import delibirdy from "./mystery-encounters/delibirdy-dialogue.json"; +import absoluteAvarice from "./mystery-encounters/absolute-avarice-dialogue.json"; +import aTrainersTest from "./mystery-encounters/a-trainers-test-dialogue.json"; +import trashToTreasure from "./mystery-encounters/trash-to-treasure-dialogue.json"; +import berriesAbound from "./mystery-encounters/berries-abound-dialogue.json"; +import clowningAround from "./mystery-encounters/clowning-around-dialogue.json"; +import partTimer from "./mystery-encounters/part-timer-dialogue.json"; +import dancingLessons from "./mystery-encounters/dancing-lessons-dialogue.json"; +import weirdDream from "./mystery-encounters/weird-dream-dialogue.json"; +import theWinstrateChallenge from "./mystery-encounters/the-winstrate-challenge-dialogue.json"; +import teleportingHijinks from "./mystery-encounters/teleporting-hijinks-dialogue.json"; +import bugTypeSuperfan from "./mystery-encounters/bug-type-superfan-dialogue.json"; +import funAndGames from "./mystery-encounters/fun-and-games-dialogue.json"; +import uncommonBreed from "./mystery-encounters/uncommon-breed-dialogue.json"; +import globalTradeSystem from "./mystery-encounters/global-trade-system-dialogue.json"; +import expertPokemonBreeder from "./mystery-encounters/the-expert-pokemon-breeder-dialogue.json"; +/** + * Dialogue/Text token injection patterns that can be used: + * - `$` will be treated as a new line for Message and Dialogue strings. + * - `@d{}` will add a time delay to text animation for Message and Dialogue strings. + * - `@s{}` will play a specified sound effect for Message and Dialogue strings. + * - `@f{}` will fade the screen to black for the given duration, then fade back in for Message and Dialogue strings. + * - `{{}}` (MYSTERY ENCOUNTERS ONLY) will auto-inject the matching dialogue token value that is stored in {@link IMysteryEncounter.dialogueTokens}. + * - (see [i18next interpolations](https://www.i18next.com/translation-function/interpolation)) for more details. + * - `@[]{}` (STATIC TEXT ONLY, NOT USEABLE WITH {@link UI.showText()} OR {@link UI.showDialogue()}) will auto-color the given text to a specified {@link TextStyle} (e.g. `TextStyle.SUMMARY_GREEN`). + */ export const esConfig = { ability, abilityTriggers, @@ -109,5 +151,41 @@ export const esConfig = { partyUiHandler, modifierSelectUiHandler, moveTriggers, - runHistory + runHistory, + mysteryEncounter: { + // DO NOT REMOVE + "unit_test_dialogue": "{{test}}{{test}} {{test{{test}}}} {{test1}} {{test\}} {{test\\}} {{test\\\}} {test}}", + mysteriousChallengers, + mysteriousChest, + darkDeal, + fightOrFlight, + slumberingSnorlax, + trainingSession, + departmentStoreSale, + shadyVitaminDealer, + fieldTrip, + safariZone, + lostAtSea, + fieryFallout, + theStrongStuff, + pokemonSalesman, + offerYouCantRefuse, + delibirdy, + absoluteAvarice, + aTrainersTest, + trashToTreasure, + berriesAbound, + clowningAround, + partTimer, + dancingLessons, + weirdDream, + theWinstrateChallenge, + teleportingHijinks, + bugTypeSuperfan, + funAndGames, + uncommonBreed, + globalTradeSystem, + expertPokemonBreeder + }, + mysteryEncounterMessages }; diff --git a/src/locales/es/dialogue.json b/src/locales/es/dialogue.json index cbd7dbf39ad..4e10b17dfd8 100644 --- a/src/locales/es/dialogue.json +++ b/src/locales/es/dialogue.json @@ -48,5 +48,115 @@ "defeat": { "1": "¡Todo lo que quiero es a esta preciosa criatura! ¡Los demás no me importáis!" } + }, + "stat_trainer_buck": { + "encounter": { + "1": "Para que luego no digas que no te he advertido: soy muy fuerte.", + "2": "¡Noto cómo tiemblan mis Pokémon dentro de sus Poké Balls!" + }, + "victory": { + "1": "¡Je, je, je!\n¡Eres una máquina!", + "2": "¡Je, je, je!\n¡Eres una máquina!" + }, + "defeat": { + "1": "¡Vaya! supongo que te quedaste sin fuerzas.", + "2": "¡Vaya! supongo que te quedaste sin fuerzas." + } + }, + "stat_trainer_cheryl": { + "encounter": { + "1": "Mis Pokémon han estado deseando una batalla.", + "2": "Debería advertirte de que mis Pokémon son un poco... hiperactivos." + }, + "victory": { + "1": "No es fácil encontrar el equilibrio entre ataque y defensa...", + "2": "No es fácil encontrar el equilibrio entre ataque y defensa..." + }, + "defeat": { + "1": "Necesitas curar a tus Pokémon?", + "2": "Necesitas curar a tus Pokémon?" + } + }, + "stat_trainer_marley": { + "encounter": { + "1": "... Vale.\n¡Voy a esforzarme al máximo!", + "2": "... Vale.\nNo... perderé... !" + }, + "victory": { + "1": "... ¡Eeeh!", + "2": "... ¡Eeeh!" + }, + "defeat": { + "1": "... Adiós.", + "2": "... Adiós." + } + }, + "stat_trainer_mira": { + "encounter": { + "1": "Serás sorprendido por Maiza!", + "2": "¡Maiza te mostrará que Mira ya no se pierde!" + }, + "victory": { + "1": "Maiza se pregunta si puede llegar muy lejos en esta tierra.", + "2": "Maiza se pregunta si puede llegar muy lejos en esta tierra." + }, + "defeat": { + "1": "¡Maiza sabía que ganaría!", + "2": "¡Maiza sabía que ganaría!" + } + }, + "stat_trainer_riley": { + "encounter": { + "1": "¡Combatir es nuestra manera de saludarnos!", + "2": "Vamos a hacer lo imposible por derrotar a tu equipo." + }, + "victory": { + "1": "A veces combatimos entre nosotros y otras veces unimos fuerzas.$Es maravilloso ser entrenador.", + "2": "A veces combatimos entre nosotros y otras veces unimos fuerzas.$Es maravilloso ser entrenador." + }, + "defeat": { + "1": "Vaya demostración pusiste.\nMejor suerte la próxima vez.", + "2": "Vaya demostración pusiste.\nMejor suerte la próxima vez." + } + }, + "winstrates_victor": { + "encounter": { + "1": "¡Qué entusiasmo! ¡Así me gusta!" + }, + "victory": { + "1": "¡Ayyy! ¡Eres más fuerte de lo que pensaba!" + } + }, + "winstrates_victoria": { + "encounter": { + "1": "Huy, huy, huy... ¡Qué joven eres!$Pero le has dado una buena tunda a mi marido...$No hay que fiarse...¡Lucha ahora contra mí!" + }, + "victory": { + "1": "¡Ay! ¡No puedo creer que seas tan fuerte!" + } + }, + "winstrates_vivi": { + "encounter": { + "1": "¿Eres más fuerte que mamá? ¡Halaaa!$¡Pero yo también soy fuerte!\n¡Ahora vas a ver!" + }, + "victory": { + "1": "Pero... ¿he perdido?\nSnif, snif... ¡Abuelitaaa!" + } + }, + "winstrates_vicky": { + "encounter": { + "1": "¿Cómo te atreves a hacer llorar a mi nieta? ¡Voy a echarle un buen rapapolvo a tu equipo Pokémon! ¡Vas a ver lo que es bueno!" + }, + "victory": { + "1": "¡Jarl! Eres fuerte...\nLos demás tenían razón..." + } + }, + "winstrates_vito": { + "encounter": { + "1": "He entrenado con toda mi familia,\ntoda enterita.$¡No voy a perder!" + }, + "victory": { + "1": "Logré superar a toda mi familia.\nNunca había perdido..." + } } } diff --git a/src/locales/es/egg.json b/src/locales/es/egg.json index 2542d577323..8ee29c582fd 100644 --- a/src/locales/es/egg.json +++ b/src/locales/es/egg.json @@ -11,6 +11,7 @@ "gachaTypeLegendary": "Mayor tasa de Legendario", "gachaTypeMove": "Mayor tasa de Movimiento Huevo Raro", "gachaTypeShiny": "Mayor tasa de Shiny", + "eventType": "Evento Misterioso", "selectMachine": "Seleccione una máquina.", "notEnoughVouchers": "¡No tienes suficientes vales!", "tooManyEggs": "¡No tienes suficiente espacio!", diff --git a/src/locales/es/game-stats-ui-handler.json b/src/locales/es/game-stats-ui-handler.json index 9e26dfeeb6e..d79a0dcd9cc 100644 --- a/src/locales/es/game-stats-ui-handler.json +++ b/src/locales/es/game-stats-ui-handler.json @@ -1 +1,42 @@ -{} \ No newline at end of file +{ + "stats": "Estadísticas", + "playTime": "Tiempo jugado", + "totalBattles": "Batallas totales", + "starters": "Iniciales", + "shinyStarters": "Shinies iniciales", + "speciesSeen": "Especies vistas", + "speciesCaught": "Especies capturadas", + "ribbonsOwned": "Cintas obtenidas", + "classicRuns": "Partidas clásicas", + "classicWins": "Victorias clásicas", + "dailyRunAttempts": "Intentos del reto diario", + "dailyRunWins": "Victorias del reto diario", + "endlessRuns": "Partidas Infinitas", + "highestWaveEndless": "Oleada récord (infinito)", + "highestMoney": "Dinero récord", + "highestDamage": "Daño máximo", + "highestHPHealed": "Máximos PS curados", + "pokemonEncountered": "Pokémon encontrados", + "pokemonDefeated": "Pokémon derrotados", + "pokemonCaught": "Pokémon capturados", + "eggsHatched": "Huevos eclosionados", + "subLegendsSeen": "Sublegendarios vistos", + "subLegendsCaught": "Sub-legs. capturados", + "subLegendsHatched": "Sub-legs. eclosionados", + "legendsSeen": "Legendarios vistos", + "legendsCaught": "Legendarios capturados", + "legendsHatched": "Legendarios eclosionados", + "mythicalsSeen": "Míticos vistos", + "mythicalsCaught": "Singulares capturados", + "mythicalsHatched": "Singulares eclosionados", + "shiniesSeen": "Shinies vistos", + "shiniesCaught": "Shinies capturados", + "shiniesHatched": "Shinies eclosionados", + "pokemonFused": "Pokémons fusionados", + "trainersDefeated": "Entrenadores derrotados", + "eggsPulled": "Huevos canjeados", + "rareEggsPulled": "Huevos raros canjeados", + "epicEggsPulled": "Huevos épicos canjeados", + "legendaryEggsPulled": "Huevos legendarios canjeados", + "manaphyEggsPulled": "Huevos Manaphy canjeados" +} diff --git a/src/locales/es/menu-ui-handler.json b/src/locales/es/menu-ui-handler.json index c906324cdbf..11bdfa7527b 100644 --- a/src/locales/es/menu-ui-handler.json +++ b/src/locales/es/menu-ui-handler.json @@ -3,26 +3,27 @@ "ACHIEVEMENTS": "Logros", "STATS": "Estadísticas", "RUN_HISTORY": "Historial de partida", - "EGG_LIST": "Lista de Huevos", - "EGG_GACHA": "Gacha de Huevos", - "MANAGE_DATA": "Gestionar Datos", + "EGG_LIST": "Lista de huevos", + "EGG_GACHA": "Lotería Oval", + "MANAGE_DATA": "Gestionar datos", "COMMUNITY": "Comunidad", - "SAVE_AND_QUIT": "Guardar y Salir", - "LOG_OUT": "Cerrar Sesión", + "SAVE_AND_QUIT": "Guardar y salir", + "LOG_OUT": "Cerrar sesión", "slot": "Ranura {{slotNumber}}", - "importSession": "Importar Sesión", + "importSession": "Importar sesión", "importSlotSelect": "Selecciona una ranura para importar.", - "exportSession": "Exportar Sesión", + "exportSession": "Exportar sesión", "exportSlotSelect": "Selecciona una ranura para exportar.", - "importRunHistory":"Importar Historial de partida", - "exportRunHistory":"Exportar Historial de partida", - "importData": "Importar Datos", - "exportData": "Exportar Datos", + "importRunHistory": "Importar historial de partida", + "exportRunHistory": "Exportar historial de partida", + "importData": "Importar datos", + "exportData": "Exportar datos", "consentPreferences": "Consentimiento de datos", "linkDiscord": "Conectar Discord", "unlinkDiscord": "Desconectar Discord", "linkGoogle": "Conectar Google", "unlinkGoogle": "Desconectar Google", "cancel": "Cancelar", - "losingProgressionWarning": "Perderás cualquier progreso desde el inicio de la batalla. ¿Continuar?" -} \ No newline at end of file + "losingProgressionWarning": "Perderás cualquier progreso desde el inicio de la batalla. ¿Continuar?", + "noEggs": "¡No hay huevos incubándose\nahora mismo!" +} diff --git a/src/locales/es/modifier-select-ui-handler.json b/src/locales/es/modifier-select-ui-handler.json index 7adcb885c9e..1ad07d2316b 100644 --- a/src/locales/es/modifier-select-ui-handler.json +++ b/src/locales/es/modifier-select-ui-handler.json @@ -8,5 +8,7 @@ "lockRaritiesDesc": "Bloquea las rarezas de los objetos al actualizar (afecta el costo de actualización).", "checkTeamDesc": "Revisa tu equipo o usa un objeto que cambia de forma.", "rerollCost": "{{formattedMoney}} ₽", - "itemCost": "{{formattedMoney}} ₽" -} \ No newline at end of file + "itemCost": "{{formattedMoney}} ₽", + "continueNextWaveButton": "Continuar", + "continueNextWaveDescription": "Continuar a la siguiente ronda" +} diff --git a/src/locales/es/modifier-type.json b/src/locales/es/modifier-type.json index 3ac4d85f793..472a28c77a0 100644 --- a/src/locales/es/modifier-type.json +++ b/src/locales/es/modifier-type.json @@ -68,6 +68,20 @@ "BaseStatBoosterModifierType": { "description": "Aumenta la est. {{stat}} base del portador en un 10%.\nCuanto mayores sean tus IVs, mayor será el límite de acumulación." }, + "PokemonBaseStatTotalModifierType": { + "name": "Jugo de Shuckle", + "description": "{{increaseDecrease}} todas las estadísticas base del portador en {{statValue}}. Fuiste {{blessCurse}} por el Shuckle.", + "extra": { + "increase": "Aumenta", + "decrease": "Disminuye", + "blessed": "bendecido", + "cursed": "maldecido" + } + }, + "PokemonBaseStatFlatModifierType": { + "name": "Tarta Vieja", + "description": "Aumenta las estadísticas base de {{stats}} del portador en {{statValue}}. Encontrado después de un sueño extraño." + }, "AllPokemonFullHpRestoreModifierType": { "description": "Restaura el 100% de los PS de todos los Pokémon." }, @@ -401,7 +415,13 @@ "ENEMY_FUSED_CHANCE": { "name": "Ficha fusión", "description": "Agrega un 1% de probabilidad de que un Pokémon salvaje sea una fusión." - } + }, + + "MYSTERY_ENCOUNTER_SHUCKLE_JUICE": { "name": "Jugo de Shuckle" }, + "MYSTERY_ENCOUNTER_BLACK_SLUDGE": { "name": "Lodo Negro", "description": "El hedor es tan poderoso que las tiendas solo te venderán artículos a un coste mucho más alto" }, + "MYSTERY_ENCOUNTER_MACHO_BRACE": { "name": "Brazal Firme", "description": "Derrotar a un Pokémon otorga al poseedor una pila de Brazal Firme. Cada pila aumenta ligeramente las estadísticas, con un bono extra al alcanzar el máximo de pilas." }, + "MYSTERY_ENCOUNTER_OLD_GATEAU": { "name": "Tarta Vieja", "description": "Aumenta las estadísticas de {{stats}} del portador en {{statValue}}." }, + "MYSTERY_ENCOUNTER_GOLDEN_BUG_NET": { "name": "Cazamariposas Dorado", "description": "Imbuye al dueño con suerte para encontrar Pokémon de tipo Bicho más a menudo. Tiene un peso extraño." } }, "SpeciesBoosterItem": { "LIGHT_BALL": { diff --git a/src/locales/es/move-trigger.json b/src/locales/es/move-trigger.json index 2322a49056f..b49a64ac42a 100644 --- a/src/locales/es/move-trigger.json +++ b/src/locales/es/move-trigger.json @@ -1,8 +1,37 @@ { + "hitWithRecoil": "¡{{pokemonName}} también\nse ha hecho daño!", + "cutHpPowerUpMove": "¡{{pokemonName}} sacrifica sus PS para mejorar su movimiento!", + "absorbedElectricity": "¡{{pokemonName}} está acumulando electricidad!", + "switchedStatChanges": "¡{{pokemonName}} intercambió los cambios de características con el objetivo!", "switchedTwoStatChanges": "{{pokemonName}} ha intercambiado los cambios en {{firstStat}} y {{secondStat}} con los del objetivo!", "switchedStat": "{{pokemonName}} cambia su {{stat}} por la de su objetivo!", "sharedGuard": "{{pokemonName}} suma su capacidad defensiva a la del objetivo y la reparte equitativamente!", "sharedPower": "{{pokemonName}} suma su capacidad ofensiva a la del objetivo y la reparte equitativamente!", + "goingAllOutForAttack": "¡{{pokemonName}} lo ha dado todo!", + "regainedHealth": "¡{{pokemonName}} ha recuperado PS!", + "keptGoingAndCrashed": "¡{{pokemonName}} ha fallado y se ha caído al suelo!", + "fled": "¡{{pokemonName}} ha huido!", + "cannotBeSwitchedOut": "¡{{pokemonName}} no puede dejar el combate!", + "swappedAbilitiesWithTarget": "¡{{pokemonName}} ha intercambiado su habilidad con la de su objetivo!", + "coinsScatteredEverywhere": "¡Hay monedas por todas partes!", + "attackedByItem": "¡{{pokemonName}} sufre daño por su {{itemName}}!", + "whippedUpAWhirlwind": "¡{{pokemonName}} se prepara para lanzar una borrasca!", + "flewUpHigh": "¡{{pokemonName}} voló alto!", + "tookInSunlight": "¡{{pokemonName}} ha absorbido luz solar!", + "dugAHole": "¡{{pokemonName}} se ha ocultado bajo tierra!", + "loweredItsHead": "¡{{pokemonName}} ha agachado la cabeza!", + "isGlowing": "¡Un intenso halo rodea a {{pokemonName}}!", + "bellChimed": "Ha repicado una campana.", + "foresawAnAttack": "¡{{pokemonName}} ha previsto el ataque!", + "isTighteningFocus": "¡{{pokemonName}} está reforzando su concentración!", + "hidUnderwater": "¡{{pokemonName}} se ha ocultado bajo el agua!", + "soothingAromaWaftedThroughArea": "Un aroma balsámico flota en el aire...", + "sprangUp": "¡{{pokemonName}} ha saltado muy alto!", + "choseDoomDesireAsDestiny": "¡{{pokemonName}} ha elegido Deseo Oculto para el futuro!", + "vanishedInstantly": "¡{{pokemonName}} ha desaparecido en un abrir y cerrar de ojos!", + "tookTargetIntoSky": "¡{{pokemonName}} se ha llevado a {{targetName}} por los aires!", + "becameCloakedInFreezingLight": "¡Una luz fría envuelve a {{pokemonName}}!", + "becameCloakedInFreezingAir": "¡Una ráfaga gélida envuelve a {{pokemonName}}!", "isChargingPower": "¡{{pokemonName}} está acumulando energía!", "burnedItselfOut": "¡El fuego interior de {{pokemonName}} se ha extinguido!", "startedHeatingUpBeak": "¡{{pokemonName}} empieza\na calentar su pico!", @@ -10,8 +39,33 @@ "isOverflowingWithSpacePower": "¡{{pokemonName}} rebosa\nenergía cósmica!", "usedUpAllElectricity": "¡{{pokemonName}} ha descargado toda su electricidad!", "stoleItem": "¡{{pokemonName}} robó el objeto\n{{itemName}} de {{targetName}}!", + "incineratedItem": "¡{{pokemonName}} ha incinerado la {{itemName}} de {{targetName}}!", + "knockedOffItem": "¡{{itemName}} de {{targetName}} ha caído al suelo!", + "tookMoveAttack": "¡{{pokemonName}} ha sido alcanzado por {{moveName}}!", + "cutOwnHpAndMaximizedStat": "¡{{pokemonName}} ha sacrificado algunos PS y ha aumentado su {{statName}} al máximo!", + "copiedStatChanges": "¡{{pokemonName}} ha copiado los cambios de características de\n{{targetName}}!", + "magnitudeMessage": "Magnitud: {{magnitude}}!", + "tookAimAtTarget": "¡{{pokemonName}} tiene a {{targetName}} en su punto de mira!", + "transformedIntoType": "¡{{pokemonName}} ha cambiado a tipo {{typeName}}!", + "copiedMove": "¡{{pokemonName}} ha copiado {{moveName}}!", + "sketchedMove": "¡{{pokemonName}} ha usado Esquema para copiar {{moveName}}!", + "acquiredAbility": "¡La habilidad de {{pokemonName}} ha cambiado a {{abilityName}}!", + "copiedTargetAbility": "¡{{pokemonName}} ha copiado la habilidad {{abilityName}} de {{targetName}}!", + "transformedIntoTarget": "¡{{pokemonName}} se ha transformado en {{targetName}}!", + "tryingToTakeFoeDown": "¡{{pokemonName}} intenta que el rival sufra su mismo destino!", + "addType": "¡{{pokemonName}} ahora también es de tipo {{typeName}}!", + "cannotUseMove": "¡{{pokemonName}} no puede usar {{moveName}}!", + "healHp": "¡{{pokemonName}} recuperó sus PS!", + "sacrificialFullRestore": "¡El deseo de curación se ha hecho realidad para {{pokemonName}}!", + "invertStats": "¡Se han invertido los cambios de características de {{pokemonName}}!", + "resetStats": "¡Se han anulado todos los cambios de características de\t{{pokemonName}}!", "statEliminated": "¡Los cambios en estadísticas fueron eliminados!", + "faintCountdown": "{{pokemonName}}\nse debilitará dentro de {{turnCount}} turnos.", + "copyType": "¡{{pokemonName}} ahora es del mismo tipo que\n{{targetPokemonName}}!", + "suppressAbilities": "¡Se ha anulado la habilidad de {{pokemonName}}!", "revivalBlessing": "¡{{pokemonName}} ha revivido!", + "swapArenaTags": "¡{{pokemonName}} ha intercambiado los efectos del terreno de combate!", + "exposedMove": "¡{{pokemonName}} ha identificado\n{{targetPokemonName}}!", "safeguard": "¡{{targetName}} está protegido por Velo Sagrado!", "afterYou": "¡{{pokemonName}} ha decidido aprovechar la oportunidad!" } diff --git a/src/locales/es/move.json b/src/locales/es/move.json index f4c28dd02e7..401ca5588aa 100644 --- a/src/locales/es/move.json +++ b/src/locales/es/move.json @@ -9,7 +9,7 @@ }, "doubleSlap": { "name": "Doble Bofetón", - "effect": "Abofetea de dos a cinco veces seguidas." + "effect": "El objetivo recibe bofetadas repetidamente, de ida y vuelta, de dos a cinco veces seguidas." }, "cometPunch": { "name": "Puño Cometa", @@ -53,7 +53,7 @@ }, "swordsDance": { "name": "Danza Espada", - "effect": "Baile frenético que aumenta mucho el Ataque." + "effect": "Baile frenético que aumenta mucho el ataque." }, "cut": { "name": "Corte", @@ -77,7 +77,7 @@ }, "bind": { "name": "Atadura", - "effect": "Ata y oprime de cuatro a cinco turnos." + "effect": "Usa el cuerpo o las extremidades para atar y oprimir\nal objetivo e infligirle daño de cuatro a cinco turnos." }, "slam": { "name": "Atizar", @@ -109,7 +109,7 @@ }, "sandAttack": { "name": "Ataque Arena", - "effect": "Arroja arena a la cara y baja la Precisión." + "effect": "Arroja arena a la cara y baja la precisión." }, "headbutt": { "name": "Golpe Cabeza", @@ -153,14 +153,14 @@ }, "tailWhip": { "name": "Látigo", - "effect": "Agita la cola para bajar la Defensa del equipo rival." + "effect": "Agita la cola para bajar la defensa del equipo rival." }, "poisonSting": { "name": "Picotazo Veneno", "effect": "Lanza un aguijón tóxico que puede envenenar al objetivo." }, "twineedle": { - "name": "Doble Ataque", + "name": "Doble ataque", "effect": "Pincha dos veces con dos espinas. Puede envenenar." }, "pinMissile": { @@ -169,7 +169,7 @@ }, "leer": { "name": "Malicioso", - "effect": "Intimida a los rivales para bajar su Defensa." + "effect": "Intimida a los rivales para bajar su defensa." }, "bite": { "name": "Mordisco", @@ -177,11 +177,11 @@ }, "growl": { "name": "Gruñido", - "effect": "Dulce gruñido que distrae al objetivo para que baje la guardia y reduce su Ataque." + "effect": "Dulce gruñido que distrae al objetivo para que baje la guardia y reduce su ataque." }, "roar": { "name": "Rugido", - "effect": "Se lleva al objetivo, que es cambiado por otro Pokémon. Si es un Pokémon salvaje, acaba el combate." + "effect": "El objetivo se asusta y otro Pokémon es sacado a la batalla. En batalla contra un solo pokémon salvaje, esto termina la batalla." }, "sing": { "name": "Canto", @@ -201,7 +201,7 @@ }, "acid": { "name": "Ácido", - "effect": "Rocía al objetivo con un ácido corrosivo. Puede reducir la Defensa Especial." + "effect": "Rocía al objetivo con un ácido corrosivo. Puede reducir la defensa especial." }, "ember": { "name": "Ascuas", @@ -241,11 +241,11 @@ }, "bubbleBeam": { "name": "Rayo Burbuja", - "effect": "Ráfaga de burbujas que puede reducir la Velocidad." + "effect": "Ráfaga de burbujas que puede reducir la velocidad." }, "auroraBeam": { "name": "Rayo Aurora", - "effect": "Rayo multicolor que puede reducir el Ataque." + "effect": "Rayo multicolor que puede reducir el ataque." }, "hyperBeam": { "name": "Hiperrayo", @@ -293,7 +293,7 @@ }, "growth": { "name": "Desarrollo", - "effect": "Hace que su cuerpo crezca a marchas forzadas con lo que aumenta su Ataque y Ataque Especial." + "effect": "Hace que su cuerpo crezca a marchas forzadas con lo que aumenta su ataque y ataque especial." }, "razorLeaf": { "name": "Hoja Afilada", @@ -321,7 +321,7 @@ }, "stringShot": { "name": "Disparo Demora", - "effect": "Lanza seda a los rivales y reduce mucho su Velocidad." + "effect": "Lanza seda a los rivales y reduce mucho su velocidad." }, "dragonRage": { "name": "Furia Dragón", @@ -373,7 +373,7 @@ }, "psychic": { "name": "Psíquico", - "effect": "Fuerte ataque telequinético que puede bajar la Defensa Especial del objetivo." + "effect": "Fuerte ataque telequinético que puede bajar la defensa especial del objetivo." }, "hypnosis": { "name": "Hipnosis", @@ -381,11 +381,11 @@ }, "meditate": { "name": "Meditación", - "effect": "El usuario reposa y medita para potenciar el Ataque." + "effect": "El usuario reposa y medita para potenciar el ataque." }, "agility": { "name": "Agilidad", - "effect": "Relaja el cuerpo para ganar mucha Velocidad." + "effect": "Relaja el cuerpo para ganar mucha velocidad." }, "quickAttack": { "name": "Ataque Rápido", @@ -393,7 +393,7 @@ }, "rage": { "name": "Furia", - "effect": "Al usarse, aumenta el Ataque del usuario cada vez que es golpeado." + "effect": "Al usarse, aumenta el ataque del usuario cada vez que es golpeado." }, "teleport": { "name": "Teletransporte", @@ -409,11 +409,11 @@ }, "screech": { "name": "Chirrido", - "effect": "Alarido agudo que reduce mucho la Defensa del objetivo." + "effect": "Alarido agudo que reduce mucho la defensa del objetivo." }, "doubleTeam": { "name": "Doble Equipo", - "effect": "Crea copias de sí mismo para mejorar la Evasión." + "effect": "Crea copias de sí mismo para mejorar la evasión." }, "recover": { "name": "Recuperación", @@ -421,15 +421,15 @@ }, "harden": { "name": "Fortaleza", - "effect": "Tensa la musculatura del usuario para aumentar la Defensa." + "effect": "Tensa la musculatura del usuario para aumentar la defensa." }, "minimize": { "name": "Reducción", - "effect": "El usuario mengua para aumentar mucho la Evasión." + "effect": "El usuario mengua para aumentar mucho la evasión." }, "smokescreen": { "name": "Pantalla de Humo", - "effect": "Reduce la Precisión del objetivo con una nube de humo o tinta." + "effect": "Reduce la precisión del objetivo con una nube de humo o tinta." }, "confuseRay": { "name": "Rayo Confuso", @@ -437,15 +437,15 @@ }, "withdraw": { "name": "Refugio", - "effect": "El usuario se resguarda en su coraza, por lo que le sube la Defensa." + "effect": "El usuario se resguarda en su coraza, por lo que le sube la defensa." }, "defenseCurl": { - "name": "Rizo Defensa", - "effect": "Se enrosca para ocultar sus puntos débiles y aumentar la Defensa." + "name": "Rizo defensa", + "effect": "Se enrosca para ocultar sus puntos débiles y aumentar la defensa." }, "barrier": { "name": "Barrera", - "effect": "Crea una barrera que aumenta mucho la Defensa." + "effect": "Crea una barrera que aumenta mucho la defensa." }, "lightScreen": { "name": "Pantalla de Luz", @@ -477,7 +477,7 @@ }, "selfDestruct": { "name": "Autodestrucción", - "effect": "El atacante explota y hiere a los Pokémon adyacentes. El usuario se debilita de inmediato." + "effect": "El usuario explota y hiere a los Pokémon adyacentes. El usuario se debilita de inmediato." }, "eggBomb": { "name": "Bomba Huevo", @@ -517,7 +517,7 @@ }, "skullBash": { "name": "Cabezazo", - "effect": "El usuario se prepara y sube su Defensa en el primer turno y en el segundo arremete con un cabezazo." + "effect": "El usuario se prepara y sube su defensa en el primer turno y en el segundo arremete con un cabezazo." }, "spikeCannon": { "name": "Clavo Cañón", @@ -525,15 +525,15 @@ }, "constrict": { "name": "Restricción", - "effect": "Ataca con largos tentáculos o zarcillos que pueden bajar la Velocidad." + "effect": "Ataca con largos tentáculos o zarcillos que pueden bajar la velocidad." }, "amnesia": { "name": "Amnesia", - "effect": "El usuario olvida sus preocupaciones y aumenta mucho la Defensa Especial." + "effect": "El usuario olvida sus preocupaciones y aumenta mucho la defensa especial." }, "kinesis": { "name": "Kinético", - "effect": "Dobla una cuchara para distraer al objetivo y reducir su Precisión." + "effect": "Dobla una cuchara para distraer al objetivo y reducir su precisión." }, "softBoiled": { "name": "Ovocuración", @@ -577,7 +577,7 @@ }, "bubble": { "name": "Burbuja", - "effect": "Lanza burbujas a los contrincantes y puede reducir su Velocidad." + "effect": "Lanza burbujas a los contrincantes y puede reducir su velocidad." }, "dizzyPunch": { "name": "Puño Mareo", @@ -589,7 +589,7 @@ }, "flash": { "name": "Destello", - "effect": "Luz cegadora que baja la Precisión del objetivo." + "effect": "Luz cegadora que baja la precisión del objetivo." }, "psywave": { "name": "Psicoonda", @@ -601,7 +601,7 @@ }, "acidArmor": { "name": "Armadura Ácida", - "effect": "Transforma la estructura celular para hacerse líquido y aumenta mucho la Defensa." + "effect": "Transforma la estructura celular para hacerse líquido y aumenta mucho la defensa." }, "crabhammer": { "name": "Martillazo", @@ -609,7 +609,7 @@ }, "explosion": { "name": "Explosión", - "effect": "El atacante causa una grandísima explosión y hiere a los Pokémon adyacentes. El usuario se debilita de inmediato." + "effect": "El usuario causa una grandísima explosión y hiere a los Pokémon adyacentes. El usuario se debilita de inmediato." }, "furySwipes": { "name": "Golpes Furia", @@ -633,7 +633,7 @@ }, "sharpen": { "name": "Afilar", - "effect": "El perfil del usuario se hace más afilado y su Ataque mejora." + "effect": "El perfil del usuario se hace más afilado y su ataque mejora." }, "conversion": { "name": "Conversión", @@ -657,7 +657,7 @@ }, "struggle": { "name": "Forcejeo", - "effect": "Solo se usa como último recurso al acabarse los PP. Hiere un poco al agresor." + "effect": "Solo se usa como último recurso al acabarse los PP. Hiere un poco al usuario." }, "sketch": { "name": "Esquema", @@ -697,7 +697,7 @@ }, "flail": { "name": "Azote", - "effect": "Ataque frenético. Cuantos menos PS tenga el usuario, más daño producirá." + "effect": "Ataca de forma frenética. Cuantos menos PS tenga el usuario, más daño producirá." }, "conversion2": { "name": "Conversión2", @@ -709,7 +709,7 @@ }, "cottonSpore": { "name": "Esporagodón", - "effect": "Adhiere esporas a los rivales para reducir mucho su Velocidad." + "effect": "Adhiere esporas a los rivales para reducir mucho su velocidad." }, "reversal": { "name": "Inversión", @@ -733,7 +733,7 @@ }, "scaryFace": { "name": "Cara Susto", - "effect": "Asusta al objetivo para reducir mucho su Velocidad." + "effect": "Asusta al objetivo para reducir mucho su velocidad." }, "feintAttack": { "name": "Finta", @@ -745,7 +745,7 @@ }, "bellyDrum": { "name": "Tambor", - "effect": "Reduce la mitad de los PS máximos para mejorar al máximo el Ataque." + "effect": "Reduce la mitad de los PS máximos para mejorar al máximo el ataque." }, "sludgeBomb": { "name": "Bomba Lodo", @@ -753,11 +753,11 @@ }, "mudSlap": { "name": "Bofetón Lodo", - "effect": "Echa lodo en la cara del objetivo para infligirle daño y reducir su Precisión." + "effect": "Echa lodo en la cara del objetivo para infligirle daño y reducir su precisión." }, "octazooka": { "name": "Pulpocañón", - "effect": "Dispara tinta a la cara. Puede bajar la Precisión." + "effect": "Dispara tinta a la cara. Puede bajar la precisión." }, "spikes": { "name": "Púas", @@ -781,7 +781,7 @@ }, "icyWind": { "name": "Viento Hielo", - "effect": "Ataque con aire helado que reduce la Velocidad del objetivo." + "effect": "Ataque con aire helado que reduce la velocidad del objetivo." }, "detect": { "name": "Detección", @@ -801,7 +801,7 @@ }, "sandstorm": { "name": "Tormenta Arena", - "effect": "Tormenta de arena que dura cinco turnos y hiere a todos, excepto a los de tipo Roca, Tierra y Acero, y aumenta la Defensa Especial de los de tipo Roca." + "effect": "Tormenta de arena que dura cinco turnos y hiere a todos, excepto a los de tipo Roca, Tierra y Acero, y aumenta la defensa especial de los de tipo Roca." }, "gigaDrain": { "name": "Gigadrenado", @@ -813,7 +813,7 @@ }, "charm": { "name": "Encanto", - "effect": "Engatusa al objetivo y reduce mucho su Ataque." + "effect": "Engatusa al objetivo y reduce mucho su ataque." }, "rollout": { "name": "Rodar", @@ -825,7 +825,7 @@ }, "swagger": { "name": "Contoneo", - "effect": "Provoca confusión en el objetivo, pero también sube mucho su Ataque." + "effect": "Provoca confusión en el objetivo, pero también sube mucho su ataque." }, "milkDrink": { "name": "Batido", @@ -841,7 +841,7 @@ }, "steelWing": { "name": "Ala de Acero", - "effect": "Alas macizas que golpean al objetivo y pueden subir la Defensa del usuario." + "effect": "Alas macizas que golpean al objetivo y pueden subir la defensa del usuario." }, "meanLook": { "name": "Mal de Ojo", @@ -913,19 +913,19 @@ }, "rapidSpin": { "name": "Giro Rápido", - "effect": "Ataque giratorio que puede eliminar movimientos como Atadura, Constricción y Drenadoras. También aumenta la Velocidad del usuario." + "effect": "Ataque giratorio que puede eliminar movimientos como Atadura, Constricción y Drenadoras. También aumenta la velocidad del usuario." }, "sweetScent": { "name": "Dulce Aroma", - "effect": "Un dulce aroma engatusa al objetivo, por lo que se reduce mucho su Evasión." + "effect": "Un dulce aroma engatusa al objetivo, por lo que se reduce mucho su evasión." }, "ironTail": { "name": "Cola Férrea", - "effect": "Ataca con una cola férrea y puede reducir la Defensa del objetivo." + "effect": "Ataca con una cola férrea y puede reducir la defensa del objetivo." }, "metalClaw": { "name": "Garra Metal", - "effect": "Ataque con garras de acero que puede aumentar el Ataque del usuario." + "effect": "Ataque con garras de acero que puede aumentar el ataque del usuario." }, "vitalThrow": { "name": "Llave Vital", @@ -965,7 +965,7 @@ }, "crunch": { "name": "Triturar", - "effect": "Tritura con afilados colmillos y puede reducir la Defensa del objetivo." + "effect": "Tritura con afilados colmillos y puede reducir la defensa del objetivo." }, "mirrorCoat": { "name": "Manto Espejo", @@ -985,7 +985,7 @@ }, "shadowBall": { "name": "Bola Sombra", - "effect": "Lanza una bola oscura que puede bajar la Defensa Especial del objetivo." + "effect": "Lanza una bola oscura que puede bajar la defensa especial del objetivo." }, "futureSight": { "name": "Premonición", @@ -993,11 +993,11 @@ }, "rockSmash": { "name": "Golpe Roca", - "effect": "Propina un gran puñetazo que puede reducir la Defensa del objetivo." + "effect": "Propina un gran puñetazo que puede reducir la defensa del objetivo." }, "whirlpool": { "name": "Torbellino", - "effect": "Una tromba de agua atrapa al objetivo durante cuatro o cinco turnos." + "effect": "El usuario atrapa al objetivo en un violento remolino durante cuatro o cinco turnos." }, "beatUp": { "name": "Paliza", @@ -1013,7 +1013,7 @@ }, "stockpile": { "name": "Reserva", - "effect": "Acumula energía y sube la Defensa y la Defensa Especial. Puede utilizarse hasta tres veces." + "effect": "Acumula energía y sube la defensa y la defensa especial. Puede utilizarse hasta tres veces." }, "spitUp": { "name": "Escupir", @@ -1037,7 +1037,7 @@ }, "flatter": { "name": "Camelo", - "effect": "Halaga al objetivo y lo confunde, pero también sube su Ataque Especial." + "effect": "Halaga al objetivo y lo confunde, pero también sube su ataque especial." }, "willOWisp": { "name": "Fuego Fatuo", @@ -1045,7 +1045,7 @@ }, "memento": { "name": "Legado", - "effect": "El usuario se debilita, pero baja mucho tanto el Ataque como el Ataque Especial del objetivo." + "effect": "El usuario se debilita, pero baja mucho tanto el ataque como el ataque especial del objetivo." }, "facade": { "name": "Imagen", @@ -1069,7 +1069,7 @@ }, "charge": { "name": "Carga", - "effect": "Recarga energía para potenciar el siguiente movimiento de tipo Eléctrico. También sube la Defensa Especial." + "effect": "Recarga energía para potenciar el siguiente movimiento de tipo Eléctrico. También sube la defensa especial." }, "taunt": { "name": "Mofa", @@ -1101,7 +1101,7 @@ }, "superpower": { "name": "Fuerza Bruta", - "effect": "Ataque de gran potencia, pero que reduce el Ataque y la Defensa del agresor." + "effect": "Ataque de gran potencia, pero que reduce el ataque y la defensa del agresor." }, "magicCoat": { "name": "Capa Mágica", @@ -1133,7 +1133,7 @@ }, "eruption": { "name": "Estallido", - "effect": "Furia explosiva. Cuanto menor sea el número de PS del usuario, menos potencia tendrá el movimiento." + "effect": "El usuario ataca al Pokémon rival con una furia explosiva. Cuanto menor sea el HP del usuario, menor será la potencia del movimiento." }, "skillSwap": { "name": "Intercambio", @@ -1173,19 +1173,19 @@ }, "tailGlow": { "name": "Luminicola", - "effect": "Se concentra en una ráfaga de luz que sube muchísimo el Ataque Especial." + "effect": "Se concentra en una ráfaga de luz que sube muchísimo el ataque especial." }, "lusterPurge": { "name": "Resplandor", - "effect": "Fogonazo de luz que inflige daño al objetivo y puede reducir su Defensa Especial." + "effect": "Fogonazo de luz que inflige daño al objetivo y puede reducir su defensa especial." }, "mistBall": { "name": "Bola Neblina", - "effect": "Bola de plumas neblinosas que inflige daño al objetivo y puede reducir su Ataque Especial." + "effect": "Bola de plumas neblinosas que inflige daño al objetivo y puede reducir su ataque especial." }, "featherDance": { "name": "Danza Pluma", - "effect": "Envuelve al objetivo con un manto de plumas para reducir mucho su Ataque." + "effect": "Envuelve al objetivo con un manto de plumas para reducir mucho su ataque." }, "teeterDance": { "name": "Danza Caos", @@ -1201,7 +1201,7 @@ }, "iceBall": { "name": "Bola Hielo", - "effect": "El atacante rueda contra el objetivo durante cinco turnos, cada vez con mayor fuerza." + "effect": "El usuario rueda contra el objetivo durante cinco turnos, cada vez con mayor fuerza." }, "needleArm": { "name": "Brazo Pincho", @@ -1221,7 +1221,7 @@ }, "crushClaw": { "name": "Garra Brutal", - "effect": "Hace trizas al objetivo con garras afiladas y puede reducir su Defensa." + "effect": "Hace trizas al objetivo con garras afiladas y puede reducir su defensa." }, "blastBurn": { "name": "Anillo Ígneo", @@ -1233,7 +1233,7 @@ }, "meteorMash": { "name": "Puño Meteoro", - "effect": "Puñetazo que impacta como un meteorito y puede subir el Ataque del agresor." + "effect": "Puñetazo que impacta como un meteorito y puede subir el ataque del agresor." }, "astonish": { "name": "Impresionar", @@ -1249,15 +1249,15 @@ }, "fakeTears": { "name": "Llanto Falso", - "effect": "Lágrimas de cocodrilo que bajan mucho la Defensa Especial del objetivo." + "effect": "Lágrimas de cocodrilo que bajan mucho la defensa especial del objetivo." }, "airCutter": { "name": "Aire Afilado", - "effect": "Viento cortante que azota. Suele ser un golpe crítico." + "effect": "Viento cortante que azota a los Pokémon oponentes. Suele ser un golpe crítico." }, "overheat": { "name": "Sofoco", - "effect": "Ataque en toda regla que baja mucho el Ataque Especial de quien lo usa." + "effect": "Ataque en toda regla que baja mucho el ataque especial de quien lo usa." }, "odorSleuth": { "name": "Rastreo", @@ -1265,15 +1265,15 @@ }, "rockTomb": { "name": "Tumba Rocas", - "effect": "Tira rocas que detienen al objetivo y bajan su Velocidad." + "effect": "Tira rocas que detienen al objetivo y bajan su velocidad." }, "silverWind": { "name": "Viento Plata", - "effect": "Fuerte viento con polvo de escamas. Puede subir todas las características de quien lo usa." + "effect": "El objetivo es atacado con escamas en polvo que arrastra el viento. Esto también puede aumentar todas las estadísticas del usuario." }, "metalSound": { "name": "Eco Metálico", - "effect": "Horrible chirrido metálico que reduce mucho la Defensa Especial del objetivo." + "effect": "Horrible chirrido metálico que reduce mucho la defensa especial del objetivo." }, "grassWhistle": { "name": "Silbato", @@ -1281,11 +1281,11 @@ }, "tickle": { "name": "Cosquillas", - "effect": "Hace reír al objetivo para bajar su Ataque y Defensa." + "effect": "El usuario hace cosquillas al objetivo para que se ría, lo que reduce sus estadísticas de ataque y defensa." }, "cosmicPower": { "name": "Masa Cósmica", - "effect": "Sube la Defensa y la Defensa Especial propias con energía mística." + "effect": "Sube la defensa y la defensa especial propias con energía mística." }, "waterSpout": { "name": "Salpicar", @@ -1317,7 +1317,7 @@ }, "muddyWater": { "name": "Agua Lodosa", - "effect": "Ataque con agua lodosa que puede reducir la Precisión del objetivo." + "effect": "Ataque con agua lodosa que puede reducir la precisión del objetivo." }, "bulletSeed": { "name": "Semilladora", @@ -1333,7 +1333,7 @@ }, "ironDefense": { "name": "Defensa Férrea", - "effect": "Fortalece el cuerpo como si fuera de hierro y sube mucho la Defensa." + "effect": "Fortalece el cuerpo como si fuera de hierro y sube mucho la defensa." }, "block": { "name": "Bloqueo", @@ -1341,7 +1341,7 @@ }, "howl": { "name": "Aullido", - "effect": "Aullido que sube el ánimo y aumenta el Ataque del equipo." + "effect": "Aullido que sube el ánimo y aumenta el ataque del equipo." }, "dragonClaw": { "name": "Garra Dragón", @@ -1353,7 +1353,7 @@ }, "bulkUp": { "name": "Corpulencia", - "effect": "Robustece el cuerpo para subir el Ataque y la Defensa." + "effect": "Robustece el cuerpo para subir el ataque y la defensa." }, "bounce": { "name": "Bote", @@ -1361,7 +1361,7 @@ }, "mudShot": { "name": "Disparo Lodo", - "effect": "El usuario ataca lanzando una bola de lodo al objetivo que también reduce su Velocidad." + "effect": "El usuario ataca lanzando una bola de lodo al objetivo que también reduce su velocidad." }, "poisonTail": { "name": "Cola Veneno", @@ -1369,11 +1369,11 @@ }, "covet": { "name": "Antojo", - "effect": "Se acerca con ternura al objetivo y tiene un 30% de posibilidades de robar el objeto que lleve." + "effect": "Se acerca con ternura al objetivo y tiene un 30% de posibilidades de robar un objeto que lleve." }, "voltTackle": { "name": "Placaje Eléc", - "effect": "Quien lo usa electrifica su cuerpo para luego atacar. Se hiere mucho a sí mismo, pero puede paralizar al objetivo." + "effect": "El usuario electrifica su cuerpo para luego atacar. Se hiere mucho a sí mismo, pero puede paralizar al objetivo." }, "magicalLeaf": { "name": "Hoja Mágica", @@ -1385,7 +1385,7 @@ }, "calmMind": { "name": "Paz Mental", - "effect": "Aumenta la concentración y calma el espíritu para subir el Ataque Especial y la Defensa Especial." + "effect": "Aumenta la concentración y calma el espíritu para subir el ataque especial y la defensa especial." }, "leafBlade": { "name": "Hoja Aguda", @@ -1393,7 +1393,7 @@ }, "dragonDance": { "name": "Danza Dragón", - "effect": "Danza mística que sube el Ataque y la Velocidad." + "effect": "Danza mística que sube el ataque y la velocidad." }, "rockBlast": { "name": "Pedrada", @@ -1413,7 +1413,7 @@ }, "psychoBoost": { "name": "Psicoataque", - "effect": "Ataque en toda regla que baja mucho el Ataque Especial de quien lo usa." + "effect": "Ataque en toda regla que baja mucho el ataque especial de quien lo usa." }, "roost": { "name": "Respiro", @@ -1433,7 +1433,7 @@ }, "hammerArm": { "name": "Machada", - "effect": "Un terrible puño golpea al contrincante, pero la Velocidad del usuario se ve reducida." + "effect": "El usuario golpea con un puño pesado al contrincante, pero baja la velocidad del usuario." }, "gyroBall": { "name": "Giro Bola", @@ -1461,7 +1461,7 @@ }, "tailwind": { "name": "Viento Afín", - "effect": "Crea un fuerte remolino que aumenta la Velocidad de los Pokémon de tu equipo durante cuatro turnos." + "effect": "Crea un fuerte remolino que aumenta la velocidad de los Pokémon de tu equipo durante cuatro turnos." }, "acupressure": { "name": "Acupresión", @@ -1477,7 +1477,7 @@ }, "closeCombat": { "name": "A Bocajarro", - "effect": "Lucha abiertamente contra el objetivo sin protegerse. También reduce la Defensa y la Defensa Especial del usuario." + "effect": "Lucha abiertamente contra el objetivo sin protegerse. También reduce la defensa y la defensa especial del usuario." }, "payback": { "name": "Vendetta", @@ -1489,7 +1489,7 @@ }, "embargo": { "name": "Embargo", - "effect": "Impide al objetivo usar el objeto que lleva durante cinco turnos. Su Entrenador tampoco puede usar objetos con él." + "effect": "Impide al objetivo usar objetos que lleva durante cinco turnos." }, "fling": { "name": "Lanzamiento", @@ -1513,7 +1513,7 @@ }, "powerTrick": { "name": "Truco Fuerza", - "effect": "El usuario emplea su poder mental para intercambiar su Ataque y su Defensa." + "effect": "El usuario emplea su poder mental para intercambiar su ataque y su defensa." }, "gastroAcid": { "name": "Bilis", @@ -1521,7 +1521,7 @@ }, "luckyChant": { "name": "Conjuro", - "effect": "Lanza al cielo un conjuro que protege a todo su equipo de golpes críticos." + "effect": "Lanza al cielo un conjuro que protege a todo su equipo de golpes críticos durante 5 turnos." }, "meFirst": { "name": "Yo Primero", @@ -1533,11 +1533,11 @@ }, "powerSwap": { "name": "Cambiafuerza", - "effect": "El usuario emplea su poder mental para intercambiar los cambios en el Ataque y el Ataque Especial con el objetivo." + "effect": "El usuario emplea su poder mental para intercambiar los cambios en el ataque y el ataque especial con el objetivo." }, "guardSwap": { "name": "Cambiadefensa", - "effect": "El usuario emplea su poder mental para intercambiar los cambios en la Defensa y la Defensa Especial con el objetivo." + "effect": "El usuario emplea su poder mental para intercambiar los cambios en la defensa y la defensa especial con el objetivo." }, "punishment": { "name": "Castigo", @@ -1557,7 +1557,7 @@ }, "toxicSpikes": { "name": "Púas Tóxicas", - "effect": "Lanza una trampa de púas tóxicas a los pies del objetivo que envenena a los rivales que entran en combate." + "effect": "Lanza una trampa de púas tóxicas a los pies del lado oponente cuyo envenena a los Pokémon que entran en combate." }, "heartSwap": { "name": "Cambiaalmas", @@ -1573,7 +1573,7 @@ }, "flareBlitz": { "name": "Envite Ígneo", - "effect": "El Pokémon se cubre de llamas y carga contra el objetivo, aunque él también recibe daño. Puede quemar." + "effect": "El usuario se cubre de llamas y carga contra el objetivo, aunque él también recibe daño. Puede quemar." }, "forcePalm": { "name": "Palmeo", @@ -1585,7 +1585,7 @@ }, "rockPolish": { "name": "Pulimento", - "effect": "Reduce la resistencia puliendo su cuerpo. Aumenta mucho la Velocidad." + "effect": "Reduce la resistencia puliendo su cuerpo. Aumenta mucho la velocidad." }, "poisonJab": { "name": "Puya Nociva", @@ -1617,7 +1617,7 @@ }, "bugBuzz": { "name": "Zumbido", - "effect": "El usuario crea una onda sónica dañina moviendo su cuerpo que también puede disminuir la Defensa Especial del objetivo." + "effect": "El usuario crea una onda sónica dañina moviendo su cuerpo que también puede disminuir la defensa especial del objetivo." }, "dragonPulse": { "name": "Pulso Dragón", @@ -1641,11 +1641,11 @@ }, "focusBlast": { "name": "Onda Certera", - "effect": "Agudiza la concentración mental y libera su poder. Puede reducir la Defensa Especial del objetivo." + "effect": "Agudiza la concentración mental y libera su poder. Puede reducir la defensa especial del objetivo." }, "energyBall": { "name": "Energibola", - "effect": "Aúna fuerzas de la naturaleza y libera su ataque. Puede reducir la Defensa Especial del objetivo." + "effect": "El usuario reúne fuerzas de la naturaleza y libera su ataque. Puede reducir la defensa especial del objetivo." }, "braveBird": { "name": "Pájaro Osado", @@ -1653,7 +1653,7 @@ }, "earthPower": { "name": "Tierra Viva", - "effect": "La tierra a los pies del objetivo erupciona violentamente. Puede reducir la Defensa Especial del objetivo." + "effect": "La tierra a los pies del objetivo erupciona violentamente. Puede reducir la defensa especial del objetivo." }, "switcheroo": { "name": "Trapicheo", @@ -1665,7 +1665,7 @@ }, "nastyPlot": { "name": "Maquinación", - "effect": "Estimula su cerebro pensando en cosas malas. Aumenta mucho el Ataque Especial." + "effect": "Estimula su cerebro pensando en cosas malas. Aumenta mucho el ataque especial." }, "bulletPunch": { "name": "Puño Bala", @@ -1701,7 +1701,7 @@ }, "mudBomb": { "name": "Bomba Fango", - "effect": "Ataca lanzando una compacta bola de fango. Puede bajar la Precisión del objetivo." + "effect": "Ataca lanzando una compacta bola de fango. Puede bajar la precisión del objetivo." }, "psychoCut": { "name": "Psicocorte", @@ -1713,11 +1713,11 @@ }, "mirrorShot": { "name": "Disparo Espejo", - "effect": "El usuario libera un haz de energía desde su pulido cuerpo. Puede bajar la Precisión." + "effect": "El usuario libera un haz de energía desde su pulido cuerpo. Puede bajar la precisión." }, "flashCannon": { "name": "Foco Resplandor", - "effect": "El usuario concentra toda la luz del cuerpo y la libera. Puede bajar la Defensa Especial del objetivo." + "effect": "El usuario concentra toda la luz del cuerpo y la libera. Puede bajar la defensa especial del objetivo." }, "rockClimb": { "name": "Treparrocas", @@ -1725,7 +1725,7 @@ }, "defog": { "name": "Despejar", - "effect": "Potente viento que barre los efectos de movimientos como Reflejo o Pantalla de Luz usados por el objetivo. También reduce su Evasión." + "effect": "Potente viento que barre los efectos de movimientos como Reflejo o Pantalla de Luz usados por el objetivo. También reduce su evasión." }, "trickRoom": { "name": "Espacio Raro", @@ -1733,7 +1733,7 @@ }, "dracoMeteor": { "name": "Cometa Draco", - "effect": "Hace que grandes cometas caigan del cielo sobre el objetivo. Baja mucho el Ataque Especial del que lo usa." + "effect": "Hace que grandes cometas caigan del cielo sobre el objetivo. Baja mucho el ataque especial del que lo usa." }, "discharge": { "name": "Chispazo", @@ -1745,7 +1745,7 @@ }, "leafStorm": { "name": "Lluevehojas", - "effect": "Envuelve al objetivo con una lluvia de hojas afiladas, pero reduce mucho su Ataque Especial." + "effect": "Envuelve al objetivo con una lluvia de hojas afiladas, pero reduce mucho su ataque especial." }, "powerWhip": { "name": "Latigazo", @@ -1777,7 +1777,7 @@ }, "captivate": { "name": "Seducción", - "effect": "Si el objetivo es del sexo opuesto, queda embelesado y baja mucho su Ataque Especial." + "effect": "Si el objetivo es del sexo opuesto, queda embelesado y baja mucho su ataque especial." }, "stealthRock": { "name": "Trampa Rocas", @@ -1801,7 +1801,7 @@ }, "chargeBeam": { "name": "Rayo Carga", - "effect": "Lanza un rayo eléctrico contra el objetivo. Puede subir el Ataque Especial de quien lo usa." + "effect": "Lanza un rayo eléctrico contra el objetivo. Puede subir el ataque especial de quien lo usa." }, "woodHammer": { "name": "Mazazo", @@ -1812,12 +1812,12 @@ "effect": "Ataque de una rapidez espeluznante. Este movimiento tiene prioridad alta." }, "attackOrder": { - "name": "Al Ataque", + "name": "Al ataque", "effect": "El usuario llama a sus súbditos para que ataquen al objetivo. Suele ser crítico." }, "defendOrder": { "name": "A Defender", - "effect": "El usuario llama a sus súbditos para que formen un escudo viviente. Sube la Defensa y la Defensa Especial." + "effect": "El usuario llama a sus súbditos para que formen un escudo viviente. Sube la defensa y la defensa especial." }, "healOrder": { "name": "Auxilio", @@ -1857,7 +1857,7 @@ }, "seedFlare": { "name": "Fulgor Semilla", - "effect": "Una onda de choque se libera del cuerpo. Puede bajar mucho la Defensa Especial del objetivo." + "effect": "Una onda de choque se libera del cuerpo. Puede bajar mucho la defensa especial del objetivo." }, "ominousWind": { "name": "Viento Aciago", @@ -1869,7 +1869,7 @@ }, "honeClaws": { "name": "Afilagarras", - "effect": "El usuario se afila las garras para aumentar su Ataque y su Precisión." + "effect": "El usuario se afila las garras para aumentar su ataque y su precisión." }, "wideGuard": { "name": "Vasta Guardia", @@ -1877,15 +1877,15 @@ }, "guardSplit": { "name": "Isoguardia", - "effect": "El usuario emplea sus poderes para hacer la media de su Defensa y su Defensa Especial con las del objetivo y compartirlas." + "effect": "El usuario emplea sus poderes para hacer la media de su defensa y su defensa especial con las del objetivo y compartirlas." }, "powerSplit": { "name": "Isofuerza", - "effect": "El usuario emplea sus poderes para hacer la media de su Ataque y su Ataque Especial con los del objetivo y compartirlos." + "effect": "El usuario emplea sus poderes para hacer la media de su ataque y su ataque especial con los del objetivo y compartirlos." }, "wonderRoom": { "name": "Zona Extraña", - "effect": "Crea un espacio misterioso donde se intercambian la Defensa y la Defensa Especial de todos los Pokémon durante cinco turnos." + "effect": "Crea un espacio misterioso donde se intercambian la defensa y la defensa especial de todos los Pokémon durante cinco turnos." }, "psyshock": { "name": "Psicocarga", @@ -1897,7 +1897,7 @@ }, "autotomize": { "name": "Aligerar", - "effect": "El usuario se desprende de partes prescindibles de su cuerpo para hacerse más ligero y aumentar mucho su Velocidad." + "effect": "El usuario se desprende de partes prescindibles de su cuerpo para hacerse más ligero y aumentar mucho su velocidad." }, "ragePowder": { "name": "Polvo Ira", @@ -1929,7 +1929,7 @@ }, "quiverDance": { "name": "Danza Aleteo", - "effect": "Danza mística que aumenta el Ataque Especial, la Defensa Especial y la Velocidad." + "effect": "Danza mística que aumenta el ataque especial, la defensa especial y la velocidad." }, "heavySlam": { "name": "Cuerpo Pesado", @@ -1941,31 +1941,31 @@ }, "electroBall": { "name": "Bola Voltio", - "effect": "Lanza una bola eléctrica. Cuanto mayor sea la Velocidad del usuario en comparación con la del objetivo, mayor será la potencia del movimiento." + "effect": "Lanza una bola eléctrica. Cuanto mayor sea la velocidad del usuario en comparación con la del objetivo, mayor será la potencia del movimiento." }, "soak": { "name": "Empapar", - "effect": "Potente lluvia que transforma al objetivo en un Pokémon de tipo Agua." + "effect": "El usuario dispara un torrente de agua al objetivo y cambia el tipo del objetivo a Agua." }, "flameCharge": { "name": "Nitrocarga", - "effect": "Llamas que golpean al objetivo y aumentan la Velocidad del atacante." + "effect": "Llamas que golpean al objetivo y aumentan la velocidad del atacante." }, "coil": { "name": "Enrosque", - "effect": "El usuario se concentra, lo que le permite aumentar su Ataque, Defensa y Precisión." + "effect": "El usuario se enrosca y se concentra. Esto aumenta sus estadísticas de ataque y defensa, así como su precisión." }, "lowSweep": { "name": "Puntapié", - "effect": "Ataque rápido dirigido a los pies del objetivo que le hace perder Velocidad." + "effect": "Ataque rápido dirigido a los pies del objetivo que le hace perder velocidad." }, "acidSpray": { "name": "Bomba Ácida", - "effect": "Ataca con un líquido corrosivo que reduce mucho la Defensa Especial del objetivo." + "effect": "Ataca con un líquido corrosivo que reduce mucho la defensa especial del objetivo." }, "foulPlay": { "name": "Juego Sucio", - "effect": "El usuario emplea la fuerza del objetivo para atacarlo. Cuanto mayor es el Ataque del objetivo, más daño provoca." + "effect": "El usuario emplea la fuerza del objetivo para atacarlo. Cuanto mayor es el ataque del objetivo, más daño provoca." }, "simpleBeam": { "name": "Onda Simple", @@ -2013,7 +2013,7 @@ }, "shellSmash": { "name": "Rompecoraza", - "effect": "El usuario rompe su coraza y baja su Defensa y Defensa Especial, pero aumenta mucho su Ataque, Ataque Especial y Velocidad." + "effect": "El usuario rompe su coraza y baja su defensa y defensa especial, pero aumenta mucho su ataque, ataque especial y velocidad." }, "healPulse": { "name": "Pulso Cura", @@ -2029,7 +2029,7 @@ }, "shiftGear": { "name": "Cambio de Marcha", - "effect": "Al hacer girar los engranajes, el usuario mejora su Ataque y aumenta mucho su Velocidad." + "effect": "Al hacer girar los engranajes, el usuario mejora su ataque y aumenta mucho su velocidad." }, "circleThrow": { "name": "Llave Giro", @@ -2053,7 +2053,7 @@ }, "retaliate": { "name": "Represalia", - "effect": "Venga a los amigos caídos. Si en el turno anterior han derrotado a alguno, la potencia del ataque aumentará." + "effect": "El usuario se venga de un aliado desmayado. Si un aliado se desmayó en el turno anterior, el poder de este movimiento aumenta." }, "finalGambit": { "name": "Sacrificio", @@ -2085,11 +2085,11 @@ }, "struggleBug": { "name": "Estoicismo", - "effect": "El usuario opone resistencia y ataca a los oponentes. También reduce su Ataque Especial." + "effect": "El usuario opone resistencia y ataca a los oponentes. También reduce su ataque especial." }, "bulldoze": { "name": "Terratemblor", - "effect": "Sacudida sísmica que afecta a los Pokémon adyacentes y también reduce su Velocidad." + "effect": "Sacudida sísmica que afecta a los Pokémon adyacentes y también reduce su velocidad." }, "frostBreath": { "name": "Vaho Gélido", @@ -2097,15 +2097,15 @@ }, "dragonTail": { "name": "Cola Dragón", - "effect": "Ataca al objetivo y lo obliga a cambiarse por otro Pokémon. Si es uno salvaje, acaba el combate." + "effect": "El objetivo es derribado y otro Pokémon es arrastrado hacia al combate. En combates contra un solo Pokémon salvaje termina la batalla." }, "workUp": { "name": "Avivar", - "effect": "Quien lo usa se concentra y potencia su Ataque y su Ataque Especial." + "effect": "Quien lo usa se concentra y potencia su ataque y su ataque especial." }, "electroweb": { "name": "Electrotela", - "effect": "Atrapa y ataca a los objetivos con una telaraña eléctrica. También reduce su Velocidad." + "effect": "Atrapa y ataca a los objetivos con una telaraña eléctrica. También reduce su velocidad." }, "wildCharge": { "name": "Voltio Cruel", @@ -2133,7 +2133,7 @@ }, "razorShell": { "name": "Concha Filo", - "effect": "Una afilada vieira ataca al objetivo. También puede hacer disminuir su Defensa." + "effect": "Una afilada vieira ataca al objetivo. También puede hacer disminuir su defensa." }, "heatCrash": { "name": "Golpe Calor", @@ -2141,7 +2141,7 @@ }, "leafTornado": { "name": "Ciclón de Hojas", - "effect": "Tritura con afiladas hojas y puede bajar la Precisión del objetivo." + "effect": "Tritura con afiladas hojas y puede bajar la precisión del objetivo." }, "steamroller": { "name": "Rodillo de Púas", @@ -2149,11 +2149,11 @@ }, "cottonGuard": { "name": "Rizo Algodón", - "effect": "Cubre al Pokémon con una madeja protectora. Aumenta muchísimo la Defensa." + "effect": "Cubre al Pokémon con una madeja protectora. Aumenta muchísimo la defensa." }, "nightDaze": { "name": "Pulso Noche", - "effect": "Ataca al objetivo con una onda siniestra. Puede bajar su Precisión." + "effect": "Ataca al objetivo con una onda siniestra. Puede bajar su precisión." }, "psystrike": { "name": "Onda Mental", @@ -2193,7 +2193,7 @@ }, "glaciate": { "name": "Mundo Gélido", - "effect": "Ataque con aire helado que baja la Velocidad del objetivo." + "effect": "Ataque con aire helado que baja la velocidad del objetivo." }, "boltStrike": { "name": "Ataque Fulgor", @@ -2205,7 +2205,7 @@ }, "fieryDance": { "name": "Danza Llama", - "effect": "Envuelve en llamas y daña al objetivo. Puede aumentar el Ataque Especial de quien lo usa." + "effect": "Envuelve en llamas y daña al objetivo. Puede aumentar el ataque especial de quien lo usa." }, "freezeShock": { "name": "Rayo Gélido", @@ -2217,7 +2217,7 @@ }, "snarl": { "name": "Alarido", - "effect": "Chillido desagradable que reduce el Ataque Especial del objetivo." + "effect": "Chillido desagradable que reduce el ataque especial del objetivo." }, "icicleCrash": { "name": "Chuzos", @@ -2225,7 +2225,7 @@ }, "vCreate": { "name": "V de Fuego", - "effect": "Golpea con una V de llamas al objetivo. Baja la Defensa, la Defensa Especial y la Velocidad de quien lo usa." + "effect": "Golpea con una V de llamas al objetivo. Baja la defensa, la defensa especial y la velocidad de quien lo usa." }, "fusionFlare": { "name": "Llama Fusión", @@ -2249,15 +2249,15 @@ }, "rototiller": { "name": "Fertilizante", - "effect": "Labra la tierra haciendo que sea más fácil cultivarla y consigue que aumente el Ataque y el Ataque Especial de los Pokémon de tipo Planta." + "effect": "Labra la tierra haciendo que sea más fácil cultivarla y consigue que aumente el ataque y el ataque especial de los Pokémon de tipo Planta." }, "stickyWeb": { "name": "Red Viscosa", - "effect": "Coloca una red pegajosa alrededor del objetivo que reduce la Velocidad de los rivales que entran en combate." + "effect": "Coloca una red pegajosa alrededor del objetivo que reduce la velocidad de los rivales que entran en combate." }, "fellStinger": { "name": "Aguijón Letal", - "effect": "Si se derrota al objetivo utilizando este movimiento, aumenta muchísimo el Ataque del usuario." + "effect": "Si se derrota al objetivo utilizando este movimiento, aumenta muchísimo el ataque del usuario." }, "phantomForce": { "name": "Golpe Fantasma", @@ -2269,7 +2269,7 @@ }, "nobleRoar": { "name": "Rugido de Guerra", - "effect": "Intimida a su oponente con un rugido de guerra, lo que hace que disminuyan tanto su Ataque como su Ataque Especial." + "effect": "Al emitir un rugido noble, el usuario intimida al objetivo y reduce sus estadísticas de ataque y ataque especial." }, "ionDeluge": { "name": "Cortina Plasma", @@ -2297,7 +2297,7 @@ }, "partingShot": { "name": "Última Palabra", - "effect": "El usuario se cambia por otro Pokémon de su equipo, pero antes amedrenta a su oponente y hace que disminuyan su Ataque y Ataque Especial." + "effect": "Con una amenaza de despedida, el usuario reduce ataque y ataque especial del objetivo. Luego, lo cambia por un otro Pokémon." }, "topsyTurvy": { "name": "Reversión", @@ -2305,15 +2305,15 @@ }, "drainingKiss": { "name": "Beso Drenaje", - "effect": "El usuario absorbe PS del objetivo con un beso y restaura su propia energía en una cantidad igual o superior a la mitad del daño infligido." + "effect": "El usuario roba los HP del objetivo con un beso. Los HP del usuario se recuperan con más de la mitad del daño recibido por el objetivo." }, "craftyShield": { - "name": "Truco Defensa", + "name": "Truco defensa", "effect": "Usa unos misteriosos poderes para protegerse a sí mismo y a sus aliados de movimientos de estado, pero no de otro tipo de ataques." }, "flowerShield": { "name": "Defensa Floral", - "effect": "Aumenta la Defensa de todos los Pokémon de tipo Planta que hay en el combate usando unos misteriosos poderes." + "effect": "Aumenta la defensa de todos los Pokémon de tipo Planta que hay en el combate usando unos misteriosos poderes." }, "grassyTerrain": { "name": "Campo de Hierba", @@ -2329,7 +2329,7 @@ }, "playRough": { "name": "Carantoña", - "effect": "El Pokémon que lo usa le hace cucamonas al objetivo y lo ataca. Puede disminuir el Ataque del objetivo." + "effect": "El Pokémon que lo usa le hace cucamonas al objetivo y lo ataca. Puede disminuir el ataque del objetivo." }, "fairyWind": { "name": "Viento Feérico", @@ -2337,7 +2337,7 @@ }, "moonblast": { "name": "Fuerza Lunar", - "effect": "Invoca el poder de la luna para atacar al objetivo. Puede reducir su Ataque Especial." + "effect": "Invoca el poder de la luna para atacar al objetivo. Puede reducir su ataque especial." }, "boomburst": { "name": "Estruendo", @@ -2349,19 +2349,19 @@ }, "kingsShield": { "name": "Escudo Real", - "effect": "El usuario adopta una postura defensiva y se protege de cualquier daño. Reduce el Ataque de cualquier Pokémon con el que entre en contacto." + "effect": "El usuario adopta una postura defensiva y se protege de cualquier daño. Reduce el ataque de cualquier Pokémon con el que entre en contacto." }, "playNice": { "name": "Camaradería", - "effect": "Se hace amigo de su objetivo y consigue que a este se le quiten las ganas de combatir, lo que reduce su Ataque." + "effect": "Se hace amigo de su objetivo y consigue que a este se le quiten las ganas de combatir, lo que reduce su ataque." }, "confide": { "name": "Confidencia", - "effect": "Hace que el objetivo pierda la concentración contándole un secreto y reduce su Ataque Especial." + "effect": "Hace que el objetivo pierda la concentración contándole un secreto y reduce su ataque especial." }, "diamondStorm": { "name": "Torm. Diamantes", - "effect": "Desata un devastador vendaval de diamantes para dañar a los oponentes. Puede aumentar mucho la Defensa del usuario." + "effect": "Desata un devastador vendaval de diamantes para dañar a los oponentes. Puede aumentar mucho la defensa del usuario." }, "steamEruption": { "name": "Chorro de Vapor", @@ -2373,11 +2373,11 @@ }, "waterShuriken": { "name": "Shuriken de Agua", - "effect": "Golpea al objetivo de dos a cinco veces seguidas con estrellas arrojadizas hechas de mucosidad. Este movimiento tiene prioridad alta." + "effect": "El usuario golpea el objetivo con estrellas ninja de dos a cinco veces seguidas. Este movimiento es de prioridad alta." }, "mysticalFire": { "name": "Llama Embrujada", - "effect": "El usuario lanza por la boca una singular llama a gran temperatura con la que ataca a su objetivo y reduce su Ataque Especial." + "effect": "El usuario lanza por la boca una singular llama a gran temperatura con la que ataca a su objetivo y reduce su ataque especial." }, "spikyShield": { "name": "Barrera Espinosa", @@ -2385,15 +2385,15 @@ }, "aromaticMist": { "name": "Niebla Aromática", - "effect": "Consigue aumentar la Defensa Especial de un Pokémon de su equipo con una fragancia misteriosa." + "effect": "Consigue aumentar la defensa especial de un Pokémon de su equipo con una fragancia misteriosa." }, "eerieImpulse": { "name": "Onda Anómala", - "effect": "El usuario irradia unas raras ondas que, al alcanzar al objetivo, reducen mucho su Ataque Especial." + "effect": "El usuario irradia unas raras ondas que, al alcanzar al objetivo, reducen mucho su ataque especial." }, "venomDrench": { "name": "Trampa Venenosa", - "effect": "Impregna a su objetivo con un líquido venenoso que disminuye el Ataque, el Ataque Especial y la Velocidad. Solo afecta a Pokémon ya envenenados." + "effect": "Impregna a su objetivo con un líquido venenoso que disminuye el ataque, el ataque especial y la velocidad. Solo afecta a Pokémon ya envenenados." }, "powder": { "name": "Polvo Explosivo", @@ -2401,11 +2401,11 @@ }, "geomancy": { "name": "Geocontrol", - "effect": "Concentra energía durante el primer turno, de forma que su Velocidad, Ataque Especial y Defensa Especial aumenten mucho en el segundo." + "effect": "Concentra energía durante el primer turno, de forma que su velocidad, ataque especial y defensa especial aumenten mucho en el segundo." }, "magneticFlux": { "name": "Aura Magnética", - "effect": "Manipula el campo magnético y logra aumentar la Defensa y la Defensa Especial de los Pokémon aliados que cuenten con las habilidades Más y Menos." + "effect": "Manipula el campo magnético y logra aumentar la defensa y la defensa especial de los Pokémon aliados que cuenten con las habilidades Más y Menos." }, "happyHour": { "name": "Paga Extra", @@ -2429,7 +2429,7 @@ }, "babyDollEyes": { "name": "Ojitos Tiernos", - "effect": "Lanza una mirada al objetivo con ojos acaramelados, con lo que logra que su Ataque se reduzca. Este movimiento tiene prioridad alta." + "effect": "Lanza una mirada al objetivo con ojos acaramelados, con lo que logra que su ataque se reduzca. Este movimiento tiene prioridad alta." }, "nuzzle": { "name": "Moflete Estático", @@ -2445,7 +2445,7 @@ }, "powerUpPunch": { "name": "Puño Incremento", - "effect": "Cada vez que golpea a un oponente se endurecen sus puños. Si acierta al objetivo, el Ataque del usuario aumenta." + "effect": "Cada vez que golpea a un oponente se endurecen sus puños. Si acierta al objetivo, el ataque del usuario aumenta." }, "oblivionWing": { "name": "Ala Mortífera", @@ -2477,11 +2477,11 @@ }, "dragonAscent": { "name": "Ascenso Draco", - "effect": "El usuario se precipita desde el cielo a una velocidad de vértigo para atacar al objetivo, pero hace que bajen la Defensa y la Defensa Especial del usuario." + "effect": "El usuario se precipita desde el cielo a una velocidad de vértigo para atacar al objetivo, pero hace que bajen la defensa y la defensa especial del usuario." }, "hyperspaceFury": { "name": "Cerco Dimensión", - "effect": "Ataca al objetivo con una ráfaga de golpes que pasan por alto los efectos de movimientos como Protección o Detección. Baja la Defensa del usuario." + "effect": "Ataca al objetivo con una ráfaga de golpes que pasan por alto los efectos de movimientos como Protección o Detección. Baja la defensa del usuario." }, "breakneckBlitzPhysical": { "name": "Carrera Arrolladora", @@ -2657,7 +2657,7 @@ }, "iceHammer": { "name": "Martillo Hielo", - "effect": "Un terrible puño golpea al contrincante, pero la Velocidad del usuario se ve reducida." + "effect": "Un terrible puño golpea al contrincante, pero la velocidad del usuario se ve reducida." }, "floralHealing": { "name": "Cura Floral", @@ -2669,7 +2669,7 @@ }, "strengthSap": { "name": "Absorbefuerza", - "effect": "Restaura una cantidad de PS equivalente al valor de Ataque del rival, que además verá reducida esta característica." + "effect": "Restaura una cantidad de PS equivalente al valor de ataque del rival, que además verá reducida esta característica." }, "solarBlade": { "name": "Cuchilla Solar", @@ -2685,7 +2685,7 @@ }, "toxicThread": { "name": "Hilo Venenoso", - "effect": "Ataca al objetivo con hilillos venenosos que reducen su Velocidad y lo envenenan." + "effect": "Ataca al objetivo con hilillos venenosos que reducen su velocidad y lo envenenan." }, "laserFocus": { "name": "Aguzar", @@ -2693,7 +2693,7 @@ }, "gearUp": { "name": "Piñón Auxiliar", - "effect": "Cambia de marcha y logra aumentar el Ataque y el Ataque Especial de los Pokémon aliados que cuenten con las habilidades Más y Menos." + "effect": "Cambia de marcha y logra aumentar el ataque y el ataque especial de los Pokémon aliados que cuenten con las habilidades Más y Menos." }, "throatChop": { "name": "Golpe Mordaza", @@ -2713,11 +2713,11 @@ }, "lunge": { "name": "Plancha", - "effect": "Ataca al objetivo abalanzándose sobre él con todas sus fuerzas y reduce su Ataque." + "effect": "Ataca al objetivo abalanzándose sobre él con todas sus fuerzas y reduce su ataque." }, "fireLash": { "name": "Látigo Ígneo", - "effect": "Golpea al objetivo con un látigo incandescente y reduce su Defensa." + "effect": "Golpea al objetivo con un látigo incandescente y reduce su defensa." }, "powerTrip": { "name": "Chulería", @@ -2729,7 +2729,7 @@ }, "speedSwap": { "name": "Cambiavelocidad", - "effect": "Intercambia su Velocidad por la del objetivo." + "effect": "Intercambia su velocidad por la del objetivo." }, "smartStrike": { "name": "Cuerno Certero", @@ -2749,7 +2749,7 @@ }, "tropKick": { "name": "Patada Tropical", - "effect": "Lanza una patada con la fuerza del trópico que golpea al objetivo y reduce su Ataque." + "effect": "Lanza una patada con la fuerza del trópico que golpea al objetivo y reduce su ataque." }, "instruct": { "name": "Mandato", @@ -2761,7 +2761,7 @@ }, "clangingScales": { "name": "Fragor Escamas", - "effect": "Frota todas las escamas de su cuerpo para crear un fuerte sonido con el que ataca. Cuando el ataque termina, su Defensa se ve reducida." + "effect": "Frota todas las escamas de su cuerpo para crear un fuerte sonido con el que ataca. Cuando el ataque termina, su defensa se ve reducida." }, "dragonHammer": { "name": "Martillo Dragón", @@ -2817,7 +2817,7 @@ }, "fleurCannon": { "name": "Cañón Floral", - "effect": "El usuario emite un potente rayo, pero su Ataque Especial se reduce mucho." + "effect": "El usuario emite un potente rayo, pero su ataque especial se reduce mucho." }, "psychicFangs": { "name": "Psicocolmillo", @@ -2829,7 +2829,7 @@ }, "shadowBone": { "name": "Hueso Sombrío", - "effect": "Ataca golpeando con un hueso poseído por un espíritu. Puede reducir la Defensa del objetivo." + "effect": "Ataca golpeando con un hueso poseído por un espíritu. Puede reducir la defensa del objetivo." }, "accelerock": { "name": "Roca Veloz", @@ -2837,7 +2837,7 @@ }, "liquidation": { "name": "Hidroariete", - "effect": "Ataca golpeando gracias a la fuerza del agua. También puede reducir la Defensa del objetivo." + "effect": "Ataca golpeando gracias a la fuerza del agua. También puede reducir la defensa del objetivo." }, "prismaticLaser": { "name": "Láser Prisma", @@ -2857,7 +2857,7 @@ }, "tearfulLook": { "name": "Ojos Llorosos", - "effect": "Mira al objetivo con ojos llorosos para hacerle perder su espíritu combativo y reduce su Ataque y Ataque Especial." + "effect": "Mira al objetivo con ojos llorosos para hacerle perder su espíritu combativo y reduce su ataque y ataque especial." }, "zingZap": { "name": "Electropunzada", @@ -2885,11 +2885,11 @@ }, "photonGeyser": { "name": "Géiser Fotónico", - "effect": "El usuario ataca con una gran columna de luz. Compara sus valores de Ataque y Ataque Especial para infligir daño con el más alto de los dos." + "effect": "El usuario ataca con una gran columna de luz. Compara sus valores de ataque y ataque especial para infligir daño con el más alto de los dos." }, "lightThatBurnsTheSky": { "name": "Fotodestrucción Apocalíptica", - "effect": "Necrozma escoge la característica que tenga el valor más alto entre el Ataque y el Ataque Especial para infligir daño, ignorando la habilidad del objetivo." + "effect": "Necrozma escoge la característica que tenga el valor más alto entre el ataque y el ataque especial para infligir daño, ignorando la habilidad del objetivo." }, "searingSunrazeSmash": { "name": "Embestida Solar", @@ -2913,7 +2913,7 @@ }, "zippyZap": { "name": "Pikaturbo", - "effect": "The user attacks the target with bursts of electricity at high speed. This move always goes first and raises the user's evasiveness." + "effect": "Ataque eléctrico a la velocidad del rayo. Este movimiento tiene prioridad alta y propina golpes críticos." }, "splishySplash": { "name": "Salpikasurf", @@ -2985,7 +2985,7 @@ }, "stuffCheeks": { "name": "Atiborramiento", - "effect": "El usuario ingiere la baya que lleva equipada para aumentar mucho su Defensa." + "effect": "El usuario ingiere la baya que lleva equipada para aumentar mucho su defensa." }, "noRetreat": { "name": "Bastión Final", @@ -2993,7 +2993,7 @@ }, "tarShot": { "name": "Alquitranazo", - "effect": "Cubre al objetivo de un alquitrán pegajoso que reduce su Velocidad y lo vuelve débil contra el fuego." + "effect": "Cubre al objetivo de un alquitrán pegajoso que reduce su velocidad y lo vuelve débil contra el fuego." }, "magicPowder": { "name": "Polvo Mágico", @@ -3001,7 +3001,7 @@ }, "dragonDarts": { "name": "Dracoflechas", - "effect": "El usuario ataca propulsando a ambos Dreepy. En caso de haber dos adversarios, cada Dreepy golpea a su propio objetivo por separado." + "effect": "El usuario ataca propulsando proyectiles como escamas u otros pokémon ectera. En caso de haber dos adversarios, cada proyectil golpea a su propio objetivo por separado." }, "teatime": { "name": "Hora del Té", @@ -3009,7 +3009,7 @@ }, "octolock": { "name": "Octopresa", - "effect": "Retiene al objetivo e impide que pueda huir o ser cambiado por otro, a la vez que reduce su Defensa y su Defensa Especial cada turno." + "effect": "Retiene al objetivo e impide que pueda huir o ser cambiado por otro, a la vez que reduce su defensa y su defensa especial cada turno." }, "boltBeak": { "name": "Electropico", @@ -3029,7 +3029,7 @@ }, "maxFlutterby": { "name": "Maxinsecto", - "effect": "Ataque de tipo Bicho ejecutado por un Pokémon Dinamax. Reduce el Ataque Especial del objetivo." + "effect": "Ataque de tipo Bicho ejecutado por un Pokémon Dinamax. Reduce el ataque especial del objetivo." }, "maxLightning": { "name": "Maxitormenta", @@ -3037,15 +3037,15 @@ }, "maxStrike": { "name": "Maxiataque", - "effect": "Ataque de tipo Normal ejecutado por un Pokémon Dinamax. Reduce la Velocidad del objetivo." + "effect": "Ataque de tipo Normal ejecutado por un Pokémon Dinamax. Reduce la velocidad del objetivo." }, "maxKnuckle": { "name": "Maxipuño", - "effect": "Ataque de tipo Lucha ejecutado por un Pokémon Dinamax. Aumenta el Ataque de tu bando." + "effect": "Ataque de tipo Lucha ejecutado por un Pokémon Dinamax. Aumenta el ataque de tu bando." }, "maxPhantasm": { "name": "Maxiespectro", - "effect": "Ataque de tipo Fantasma ejecutado por un Pokémon Dinamax. Reduce la Defensa del objetivo." + "effect": "Ataque de tipo Fantasma ejecutado por un Pokémon Dinamax. Reduce la defensa del objetivo." }, "maxHailstorm": { "name": "Maxihelada", @@ -3053,7 +3053,7 @@ }, "maxOoze": { "name": "Maxiácido", - "effect": "Ataque de tipo Veneno ejecutado por un Pokémon Dinamax. Aumenta el Ataque Especial de tu bando." + "effect": "Ataque de tipo Veneno ejecutado por un Pokémon Dinamax. Aumenta el ataque especial de tu bando." }, "maxGeyser": { "name": "Maxichorro", @@ -3061,7 +3061,7 @@ }, "maxAirstream": { "name": "Maxiciclón", - "effect": "Ataque de tipo Volador ejecutado por un Pokémon Dinamax. Aumenta la Velocidad de tu bando." + "effect": "Ataque de tipo Volador ejecutado por un Pokémon Dinamax. Aumenta la velocidad de tu bando." }, "maxStarfall": { "name": "Maxiestela", @@ -3069,7 +3069,7 @@ }, "maxWyrmwind": { "name": "Maxidraco", - "effect": "Ataque de tipo Dragón ejecutado por un Pokémon Dinamax. Reduce el Ataque del objetivo." + "effect": "Ataque de tipo Dragón ejecutado por un Pokémon Dinamax. Reduce el ataque del objetivo." }, "maxMindstorm": { "name": "Maxionda", @@ -3081,11 +3081,11 @@ }, "maxQuake": { "name": "Maxitemblor", - "effect": "Ataque de tipo Tierra ejecutado por un Pokémon Dinamax. Aumenta la Defensa Especial de tu bando." + "effect": "Ataque de tipo Tierra ejecutado por un Pokémon Dinamax. Aumenta la defensa especial de tu bando." }, "maxDarkness": { "name": "Maxisombra", - "effect": "Ataque de tipo Siniestro ejecutado por un Pokémon Dinamax. Reduce la Defensa Especial del objetivo." + "effect": "Ataque de tipo Siniestro ejecutado por un Pokémon Dinamax. Reduce la defensa especial del objetivo." }, "maxOvergrowth": { "name": "Maxiflora", @@ -3093,7 +3093,7 @@ }, "maxSteelspike": { "name": "Maximetal", - "effect": "Ataque de tipo Acero ejecutado por un Pokémon Dinamax. Aumenta la Defensa de tu bando." + "effect": "Ataque de tipo Acero ejecutado por un Pokémon Dinamax. Aumenta la defensa de tu bando." }, "clangorousSoul": { "name": "Estruendo Escama", @@ -3101,15 +3101,15 @@ }, "bodyPress": { "name": "Plancha Corporal", - "effect": "El usuario usa el cuerpo para lanzar su ataque e infligir un daño directamente proporcional a su Defensa." + "effect": "El usuario usa el cuerpo para lanzar su ataque e infligir un daño directamente proporcional a su defensa." }, "decorate": { "name": "Decoración", - "effect": "Aumenta mucho el Ataque y el Ataque Especial del objetivo al decorarlo." + "effect": "Aumenta mucho el ataque y el ataque especial del objetivo al decorarlo." }, "drumBeating": { "name": "Batería Asalto", - "effect": "El usuario controla un tocón mediante la percusión y al atacar reduce la Velocidad del objetivo." + "effect": "El usuario controla un tocón mediante la percusión y al atacar reduce la velocidad del objetivo." }, "snapTrap": { "name": "Cepo", @@ -3129,11 +3129,11 @@ }, "auraWheel": { "name": "Rueda Aural", - "effect": "La energía que acumula en las mejillas le sirve para atacar y aumentar su Velocidad. Este movimiento cambia de tipo según la forma que adopte Morpeko." + "effect": "La energía que acumula en las mejillas le sirve para atacar y aumentar su velocidad. Si es utilizado por Morpeko, este movimiento cambia de tipo según la forma que adopte." }, "breakingSwipe": { "name": "Vasto Impacto", - "effect": "El usuario sacude violentamente su enorme cola para golpear al objetivo y reducir su Ataque a la par." + "effect": "El usuario sacude violentamente su enorme cola para golpear al objetivo y reducir su ataque a la par." }, "branchPoke": { "name": "Punzada Rama", @@ -3145,15 +3145,15 @@ }, "appleAcid": { "name": "Ácido Málico", - "effect": "Ataca al objetivo con el fluido corrosivo que desprende una manzana ácida, lo que también reduce la Defensa Especial de este." + "effect": "Ataca al objetivo con el fluido corrosivo que desprende una manzana ácida, lo que también reduce la defensa especial de este." }, "gravApple": { "name": "Fuerza G", - "effect": "El usuario ataca haciendo caer una manzana desde gran altura. Reduce la Defensa del objetivo." + "effect": "El usuario ataca haciendo caer una manzana desde gran altura. Reduce la defensa del objetivo." }, "spiritBreak": { "name": "Choque Anímico", - "effect": "El usuario ataca al objetivo con tal ímpetu que acaba minando su moral y, en consecuencia, reduce su Ataque Especial." + "effect": "El usuario ataca al objetivo con tal ímpetu que acaba minando su moral y, en consecuencia, reduce su ataque especial." }, "strangeSteam": { "name": "Cautivapor", @@ -3165,7 +3165,7 @@ }, "obstruct": { "name": "Obstrucción", - "effect": "Frena todos los ataques, pero puede fallar si se usa repetidamente. Reduce mucho la Defensa de quien ejecute un movimiento de contacto contra el usuario." + "effect": "Frena todos los ataques, pero puede fallar si se usa repetidamente. Reduce mucho la defensa de quien ejecute un movimiento de contacto contra el usuario." }, "falseSurrender": { "name": "Irreverencia", @@ -3193,11 +3193,11 @@ }, "scaleShot": { "name": "Ráfaga Escamas", - "effect": "Lanza escamas al objetivo de dos a cinco veces seguidas. Aumenta la Velocidad del usuario, pero reduce su Defensa." + "effect": "Lanza escamas al objetivo de dos a cinco veces seguidas. Aumenta la velocidad del usuario, pero reduce su defensa." }, "meteorBeam": { "name": "Rayo Meteórico", - "effect": "El usuario dedica el primer turno a aumentar su Ataque Especial acumulando energía cósmica y lanza su ofensiva contra el objetivo en el segundo." + "effect": "El usuario dedica el primer turno a aumentar su ataque especial acumulando energía cósmica y lanza su ofensiva contra el objetivo en el segundo." }, "shellSideArm": { "name": "Moluscañón", @@ -3221,7 +3221,7 @@ }, "skitterSmack": { "name": "Golpe Rastrero", - "effect": "Ataca al objetivo por la espalda de forma subrepticia y, además, reduce su Ataque Especial." + "effect": "Ataca al objetivo por la espalda de forma subrepticia y, además, reduce su ataque especial." }, "burningJealousy": { "name": "Envidia Ardiente", @@ -3241,7 +3241,7 @@ }, "coaching": { "name": "Motivación", - "effect": "El usuario imparte indicaciones precisas a sus aliados, que ven aumentados su Ataque y su Defensa." + "effect": "El usuario imparte indicaciones precisas a sus aliados, que ven aumentados su ataque y su defensa." }, "flipTurn": { "name": "Viraje", @@ -3289,7 +3289,7 @@ }, "thunderousKick": { "name": "Patada Relámpago", - "effect": "El usuario desconcierta al objetivo con movimientos centelleantes y le propina una patada que, además, reduce su Defensa." + "effect": "El usuario desconcierta al objetivo con movimientos centelleantes y le propina una patada que, además, reduce su defensa." }, "glacialLance": { "name": "Lanza Glacial", @@ -3309,11 +3309,11 @@ }, "psyshieldBash": { "name": "Asalto Barrera", - "effect": "El usuario ataca envuelto en una energía psíquica que además aumenta su Defensa." + "effect": "El usuario ataca envuelto en una energía psíquica que además aumenta su defensa." }, "powerShift": { "name": "Cambiapoder", - "effect": "Intercambia su Ataque por su Defensa." + "effect": "Intercambia su ataque por su defensa." }, "stoneAxe": { "name": "Hachazo Pétreo", @@ -3321,11 +3321,11 @@ }, "springtideStorm": { "name": "Ciclón Primavera", - "effect": "Desata una tormenta de amor y odio con la que envuelve y ataca al objetivo. También puede reducir su Ataque." + "effect": "Desata una tormenta de amor y odio con la que envuelve y ataca al objetivo. También puede reducir su ataque." }, "mysticalPower": { "name": "Poder Místico", - "effect": "Ataca desatando un misterioso poder, que también aumenta su Ataque Especial." + "effect": "Ataca desatando un misterioso poder, que también aumenta su ataque especial." }, "ragingFury": { "name": "Erupción de Ira", @@ -3345,11 +3345,11 @@ }, "victoryDance": { "name": "Danza Triunfal", - "effect": "Ejecuta una danza frenética que invoca la victoria y aumenta el Ataque, la Defensa y la Velocidad." + "effect": "Ejecuta una danza frenética que invoca la victoria y aumenta el ataque, la defensa y la velocidad." }, "headlongRush": { "name": "Arremetida", - "effect": "El usuario arremete con todas sus fuerzas, pero se reducen su Defensa y su Defensa Especial." + "effect": "El usuario arremete con todas sus fuerzas, pero se reducen su defensa y su defensa especial." }, "barbBarrage": { "name": "Mil Púas Tóxicas", @@ -3357,19 +3357,19 @@ }, "esperWing": { "name": "Ala Aural", - "effect": "Corta con unas alas imbuidas de aura. Suele asestar un golpe crítico y aumenta la Velocidad del usuario." + "effect": "Corta con unas alas imbuidas de aura. Suele asestar un golpe crítico y aumenta la velocidad del usuario." }, "bitterMalice": { "name": "Rencor Reprimido", - "effect": "Ataca al objetivo sometiéndolo a su frío rencor y reduce su Ataque." + "effect": "Ataca al objetivo sometiéndolo a su frío rencor y reduce su ataque." }, "shelter": { "name": "Retracción", - "effect": "La piel del usuario se vuelve dura como un escudo de acero, lo que aumenta mucho su Defensa." + "effect": "La piel del usuario se vuelve dura como un escudo de acero, lo que aumenta mucho su defensa." }, "tripleArrows": { "name": "Triple Flecha", - "effect": "Propina un talonazo y lanza tres flechas. Suele asestar un golpe crítico y puede reducir la Defensa del objetivo o amedrentarlo." + "effect": "Propina un talonazo y lanza tres flechas. Suele asestar un golpe crítico y puede reducir la defensa del objetivo o amedrentarlo." }, "infernalParade": { "name": "Marcha Espectral", @@ -3381,7 +3381,7 @@ }, "bleakwindStorm": { "name": "Vendaval Gélido", - "effect": "Ataca con un viento muy frío que estremece el cuerpo y la mente y que, además, puede reducir la Velocidad del objetivo." + "effect": "Ataca con un viento muy frío que estremece el cuerpo y la mente y que, además, puede reducir la velocidad del objetivo." }, "wildboltStorm": { "name": "Electormenta", @@ -3397,7 +3397,7 @@ }, "takeHeart": { "name": "Bálsamo Osado", - "effect": "El usuario se envalentona y se cura de los problemas de estado. Además, aumenta su Ataque Especial y su Defensa Especial." + "effect": "El usuario se envalentona y se cura de los problemas de estado. Además, aumenta su ataque especial y su defensa especial." }, "gMaxWildfire": { "name": "Gigallamarada", @@ -3477,7 +3477,7 @@ }, "gMaxTartness": { "name": "Gigacorrosión", - "effect": "Ataque de tipo Planta ejecutado por un Flapple Gigamax. Reduce la Evasión del objetivo." + "effect": "Ataque de tipo Planta ejecutado por un Flapple Gigamax. Reduce la evasión del objetivo." }, "gMaxSweetness": { "name": "Giganéctar", @@ -3497,7 +3497,7 @@ }, "gMaxFoamBurst": { "name": "Gigaespuma", - "effect": "Ataque de tipo Agua ejecutado por un Kingler Gigamax. Reduce mucho la Velocidad del objetivo." + "effect": "Ataque de tipo Agua ejecutado por un Kingler Gigamax. Reduce mucho la velocidad del objetivo." }, "gMaxCentiferno": { "name": "Gigacienfuegos", @@ -3533,11 +3533,11 @@ }, "teraBlast": { "name": "Teraexplosión", - "effect": "Si el usuario se ha teracristalizado, ataca con la energía de su teratipo. Compara sus valores de Ataque y Ataque Especial para infligir daño con el más alto de los dos." + "effect": "Si el usuario se ha teracristalizado, ataca con la energía de su teratipo. Compara sus valores de ataque y ataque especial para infligir daño con el más alto de los dos." }, "silkTrap": { "name": "Telatrampa", - "effect": "Tiende una trampa sedosa que protege al usuario de los ataques al tiempo que reduce la Velocidad de cualquier Pokémon con el que entre en contacto." + "effect": "Tiende una trampa sedosa que protege al usuario de los ataques al tiempo que reduce la velocidad de cualquier Pokémon con el que entre en contacto." }, "axeKick": { "name": "Patada Hacha", @@ -3549,7 +3549,7 @@ }, "luminaCrash": { "name": "Fotocolisión", - "effect": "Ataca proyectando una extraña luz que afecta a la mente. Reduce mucho la Defensa Especial del objetivo." + "effect": "Ataca proyectando una extraña luz que afecta a la mente. Reduce mucho la defensa especial del objetivo." }, "orderUp": { "name": "Oído Cocina", @@ -3561,11 +3561,11 @@ }, "spicyExtract": { "name": "Extracto Picante", - "effect": "Libera un extracto extraordinariamente picante que aumenta mucho el Ataque del objetivo, pero también reduce mucho su Defensa." + "effect": "Libera un extracto extraordinariamente picante que aumenta mucho el ataque del objetivo, pero también reduce mucho su defensa." }, "spinOut": { "name": "Quemarrueda", - "effect": "Inflige daño al objetivo ejerciendo presión sobre sus extremidades y girando violentamente sobre sí. Reduce mucho la Velocidad del usuario." + "effect": "Inflige daño al objetivo ejerciendo presión sobre sus extremidades y girando violentamente sobre sí. Reduce mucho la velocidad del usuario." }, "populationBomb": { "name": "Proliferación", @@ -3601,7 +3601,7 @@ }, "filletAway": { "name": "Deslome", - "effect": "Aumenta mucho el Ataque, el Ataque Especial y la Velocidad del usuario a costa de parte de sus PS." + "effect": "Aumenta mucho el ataque, el ataque especial y la velocidad del usuario a costa de parte de sus PS." }, "kowtowCleave": { "name": "Genufendiente", @@ -3613,11 +3613,11 @@ }, "torchSong": { "name": "Canto Ardiente", - "effect": "Expele tórridas llamaradas como si entonara una canción y abrasa al objetivo con ellas. Aumenta el Ataque Especial del usuario." + "effect": "Expele tórridas llamaradas como si entonara una canción y abrasa al objetivo con ellas. Aumenta el ataque especial del usuario." }, "aquaStep": { "name": "Danza Acuática", - "effect": "Juguetea con el objetivo mientras ejecuta una elegante y fluida danza y le inflige daño. Aumenta la Velocidad del usuario." + "effect": "Juguetea con el objetivo mientras ejecuta una elegante y fluida danza y le inflige daño. Aumenta la velocidad del usuario." }, "ragingBull": { "name": "Furia Taurina", @@ -3625,7 +3625,7 @@ }, "makeItRain": { "name": "Fiebre Dorada", - "effect": "El usuario ataca arrojando una generosa cantidad de monedas, pero su Ataque Especial se ve reducido. Al finalizar el combate, las recupera en forma de ganancias." + "effect": "El usuario ataca arrojando una generosa cantidad de monedas, pero su ataque especial se ve reducido. Al finalizar el combate, las recupera en forma de ganancias." }, "psyblade": { "name": "Psicohojas", @@ -3657,23 +3657,23 @@ }, "tidyUp": { "name": "Limpieza General", - "effect": "Efectúa una limpieza a fondo que anula los efectos de Púas, Trampa Rocas, Red Viscosa, Púas Tóxicas y Sustituto. Aumenta el Ataque y la Velocidad del usuario." + "effect": "Efectúa una limpieza a fondo que anula los efectos de Púas, Trampa Rocas, Red Viscosa, Púas Tóxicas y Sustituto. Aumenta el ataque y la velocidad del usuario." }, "snowscape": { "name": "Paisaje Nevado", - "effect": "Desata una nevada que dura cinco turnos y aumenta la Defensa de los Pokémon de tipo Hielo." + "effect": "Desata una nevada que dura cinco turnos y aumenta la defensa de los Pokémon de tipo Hielo." }, "pounce": { "name": "Brinco", - "effect": "Ataca abalanzándose sobre el objetivo y le reduce la Velocidad." + "effect": "Ataca abalanzándose sobre el objetivo y le reduce la velocidad." }, "trailblaze": { "name": "Abrecaminos", - "effect": "Ataca de pronto como si saltara desde la hierba alta. El usuario se mueve con gran agilidad y aumenta su Velocidad." + "effect": "Ataca de pronto como si saltara desde la hierba alta. El usuario se mueve con gran agilidad y aumenta su velocidad." }, "chillingWater": { "name": "Agua Fría", - "effect": "Ataca al objetivo rociándolo con un agua gélida y desalentadora que reduce su Ataque." + "effect": "Ataca al objetivo rociándolo con un agua gélida y desalentadora que reduce su ataque." }, "hyperDrill": { "name": "Hipertaladro", @@ -3689,7 +3689,7 @@ }, "armorCannon": { "name": "Cañón Armadura", - "effect": "Se deshace de su armadura y arroja las partes al objetivo cuales proyectiles ardientes. Reduce la Defensa y la Defensa Especial del usuario." + "effect": "Se deshace de su armadura y arroja las partes al objetivo cuales proyectiles ardientes. Reduce la defensa y la defensa especial del usuario." }, "bitterBlade": { "name": "Espada Lamento", @@ -3741,7 +3741,7 @@ }, "syrupBomb": { "name": "Bomba Caramelo", - "effect": "Impregna al objetivo con una explosión de su viscoso néctar y lo carameliza, lo que hace que su Velocidad se reduzca progresivamente durante tres turnos." + "effect": "Impregna al objetivo con una explosión de su viscoso néctar y lo carameliza, lo que hace que su velocidad se reduzca progresivamente durante tres turnos." }, "ivyCudgel": { "name": "Garrote Liana", @@ -3749,7 +3749,7 @@ }, "electroShot": { "name": "Electrorrayo", - "effect": "Acumula electricidad y aumenta su Ataque Especial en el primer turno y dispara una descarga de alto voltaje en el segundo. Si llueve, puede atacar en el primer turno." + "effect": "Acumula electricidad y aumenta su ataque especial en el primer turno y dispara una descarga de alto voltaje en el segundo. Si llueve, puede atacar en el primer turno." }, "teraStarstorm": { "name": "Teraclúster", diff --git a/src/locales/es/mystery-encounter-messages.json b/src/locales/es/mystery-encounter-messages.json new file mode 100644 index 00000000000..8d7d98bdd0f --- /dev/null +++ b/src/locales/es/mystery-encounter-messages.json @@ -0,0 +1,7 @@ +{ + "paid_money": "Pagaste {{amount, number}}₽.", + "receive_money": "¡Recibiste {{amount, number}}₽!", + "affects_pokedex": "Afecta los datos de la Pokédex", + "cancel_option": "Volver a la selección de opciones", + "view_party_button": "Ver equipo" +} diff --git a/src/locales/es/mystery-encounters/a-trainers-test-dialogue.json b/src/locales/es/mystery-encounters/a-trainers-test-dialogue.json new file mode 100644 index 00000000000..bc100f60454 --- /dev/null +++ b/src/locales/es/mystery-encounters/a-trainers-test-dialogue.json @@ -0,0 +1,47 @@ +{ + "intro": "Un entrenador extremadamente fuerte se te acerca...", + "buck": { + "intro_dialogue": "¡Hola, entrenador! Me llamo Bulgur.$Tengo una propuesta súper genial para un entrenador fuerte como tú.$Llevo conmigo dos Huevos Pokémon raros, pero me gustaría que alguien más cuidara uno.$Si puedes demostrarme tu fuerza como entrenador, ¡te daré el huevo más raro", + "accept": "¡Guau!¡Este combate promete!", + "decline": "Vaya, parece que tu equipo no está en condiciones óptimas.$Aquí, déjame ayudarte con eso." + }, + "cheryl": { + "intro_dialogue": "Hola, me llamo Malta.$Tengo una petición particularmente interesante para un entrenador fuerte como tú.$Llevo conmigo dos Huevos Pokémon raros, pero me gustaría que alguien más cuidara uno.$Si puedes demostrarme tu fuerza como entrenador, ¡te daré el Huevo más raro!", + "accept": "¡Espero que estés listo!", + "decline": "Entiendo, parece que tu equipo no está en las mejores condiciones en este momento.$Aquí, déjame ayudar con eso." + }, + "marley": { + "intro_dialogue": "...@d{64} Soy Sémola.$Tengo una oferta para ti...$Llevo conmigo dos Huevos Pokémon, pero me gustaría que alguien más cuidara uno.$Si eres más fuerte que yo, te daré el Huevo más raro.", + "accept": "... Ya veo.", + "decline": "... Ya veo.$Tus Pokémon parecen heridos… Déjame ayudarte." + }, + "mira": { + "intro_dialogue": "¡Hola! Soy Maiza. Maiza tiene una petición para un entrenador fuerte como tú. Maiza tiene dos Huevos Pokémon raros, pero quiere que alguien más se quede con uno. Si le demuestras a Maiza que eres fuerte,¡Maiza te dará el Huevo más raro!", + "accept": "¿Vas a luchar contra Maiza?\n¡Genial!", + "decline": "Vaya, ¿no hay batalla? ¡Está bien! Aquí, Maiza curará a tu equipo." + }, + "riley": { + "intro_dialogue": "Soy Quinoa.$Tengo una propuesta extraña para un entrenador fuerte como tú.$Llevo conmigo dos Huevos Pokémon raros, pero me gustaría darle uno a otro entrenador.$Si puedes demostrarme tu fuerza, te daré el Huevo más raro.", + "accept": "Esa mirada que tienes...\nhagamos esto..", + "decline": "Entiendo, tu equipo parece agotado.$Aquí, déjame ayudarte con eso." + }, + "title": "Una Prueba de Entrenador", + "description": "Parece que este entrenador está dispuesto a darte un Huevo sin importar tu decisión. Sin embargo, si logras derrotar a este entrenador fuerte, recibirás un Huevo mucho más raro.", + "query": "¿Qué harás?", + "option": { + "1": { + "label": "Aceptar el Desafío", + "tooltip": "(-) Batalla Ardua\n(+) Obtén un @[TOOLTIP_TITLE]{Huevo muy raro}" + }, + "2": { + "label": "Rechazar el Desafío", + "tooltip": "(+) Equipo Curado\n(+) Obtén un @[TOOLTIP_TITLE]{Huevo}" + } + }, + "eggTypes": { + "rare": "un huevo Raro", + "epic": "un huavo Épico", + "legendary": "un huevo Legendario " + }, + "outro": "{{statTrainerName}} te dio {{eggType}}!" +} diff --git a/src/locales/es/mystery-encounters/absolute-avarice-dialogue.json b/src/locales/es/mystery-encounters/absolute-avarice-dialogue.json new file mode 100644 index 00000000000..f3700c1d60b --- /dev/null +++ b/src/locales/es/mystery-encounters/absolute-avarice-dialogue.json @@ -0,0 +1,25 @@ +{ + "intro": "¡Un {{greedentName}} te embosca y roba las bayas de tu equipo!", + "title": "Avaricia Absoluta", + "description": "¡Un {{greedentName}} te ha tomado completamente por sorpresa y ahora todas tus bayas han desaparecido! El {{greedentName}} parece que está a punto de comérselas cuando se detiene para mirarte, interesado.", + "query": "¿Qué harás?", + "option": { + "1": { + "label": "Combatir", + "tooltip": "(-) Batalla Ardua\n(+) Recompensas de su Alijo de Bayas", + "selected": "El {{greedentName}} llena sus mejillas y se prepara para la batalla!", + "boss_enraged": "¡El feroz amor de {{greedentName}} por la comida lo tiene enfurecido!", + "food_stash": "¡Parece que el {{greedentName}} estaba protegiendo un enorme alijo de comida!$@s{item_fanfare}¡Cada Pokémon en tu grupo obtiene una {{foodReward}}!" + }, + "2": { + "label": "Razona con él", + "tooltip": "(+) Recupera algunas bayas perdidas", + "selected": "Tus súplicas conmueven al {{greedentName}}.$No te devuelve todas tus bayas, pero aún así te lanza algunas en tu dirección." + }, + "3": { + "label": "Déjalo quedarse con la comida", + "tooltip": "(-) Perder todas las bayas\n(?) Le gustarás al {{greedentName}}", + "selected": "El {{greedentName}} devora todas sus bayas en un instante!$Acariciando su estómago, te mira con aprecio.$Quizás podrías darle más bayas en tu aventura....$@s{level_up_fanfare}El {{greedentName}} quiere unirse a tu equipo!" + } + } +} \ No newline at end of file diff --git a/src/locales/es/mystery-encounters/an-offer-you-cant-refuse-dialogue.json b/src/locales/es/mystery-encounters/an-offer-you-cant-refuse-dialogue.json new file mode 100644 index 00000000000..07396cbc3b2 --- /dev/null +++ b/src/locales/es/mystery-encounters/an-offer-you-cant-refuse-dialogue.json @@ -0,0 +1,26 @@ +{ + "intro": "Te detiene un chico de aspecto rico.", + "speaker": "Niño Bien", + "intro_dialogue": "Buenos días a usted.$¡No puedo evitar notar que tu\n{{strongestPokemon}} se ve absolutamente divino!$¡Siempre he querido tener un Pokémon así!$¡Te pagaría generosamente,\n también te daría este viejo abalorio!", + "title": "Una oferta que no puedes rechazar", + "description": "Te están ofreciendo @[TOOLTIP_TITLE]{Amuleto Iris} y {{price, money}} por tu {{strongestPokemon}}!¡Es un trato extremadamente bueno, pero ¿realmente puedes soportar separarte de un miembro tan fuerte de tu equipo?", + "query": "¿Qué harás?", + "option": { + "1": { + "label": "Aceptar el trato", + "tooltip": "(-) Pierdes a {{strongestPokemon}}\n(+) Obtén un @[TOOLTIP_TITLE]{Amuleto Iris}\n(+) Obtén {{price, money}}", + "selected": "¡Maravilloso!@d{32} ¡Ven, John!, {{strongestPokemon}}!$¡Es hora de mostrarte a todos en el club náutico!$¡Estarán tan celosos!" + }, + "2": { + "label": "Extorsiona al niño", + "tooltip": "(+) {{option2PrimaryName}} usa {{moveOrAbility}}\n(+) Obtén {{price, money}}", + "tooltip_disabled": "Tus Pokémon necesitan tener ciertos movimientos o habilidades para elegir esto", + "selected": "¡Por Dios, nos están robando, {{liepardName}}!$¡Oirás de mis abogados por esto!" + }, + "3": { + "label": "Irse", + "tooltip": "(-) Ninguna Recompensa", + "selected": "Qué día más horrible…$Bueno, volvamos al club náutico entonces, {{liepardName}}." + } + } +} \ No newline at end of file diff --git a/src/locales/es/mystery-encounters/berries-abound-dialogue.json b/src/locales/es/mystery-encounters/berries-abound-dialogue.json new file mode 100644 index 00000000000..4b9da99fbeb --- /dev/null +++ b/src/locales/es/mystery-encounters/berries-abound-dialogue.json @@ -0,0 +1,26 @@ +{ + "intro": "¡Hay un gran arbusto de bayas cerca de ese Pokémon!", + "title": "Bayas Abundantes", + "description": "Parece que hay un Pokémon fuerte protegiendo un arbusto de bayas. Luchar es el enfoque directo, pero parece fuerte. ¿Quizás un Pokémon rápido podría agarrar algunas bayas sin ser descubierto?", + "query": "¿Qué harás?", + "berries": "¡Bayas!", + "option": { + "1": { + "label": "Enfréntate al Pokémon", + "tooltip": "(-) Batalla Difícil\n(+) Obtén bayas", + "selected": "Te acercas al\nPokémon sin miedo." + }, + "2": { + "label": "Corre hacia el arbusto", + "tooltip": "(-) {{fastestPokemon}} Utiliza su velocidad\n(+) Obtén bayas", + "selected": "¡Tu {{fastestPokemon}} corre hacia el arbusto de bayas!$¡Logra agarrar {{numBerries}} antes de que {{enemyPokemon}} pueda reaccionar!$Huyes rápidamente con tu nuevo premio.", + "selected_bad": "¡Tu {{fastestPokemon}} corre hacia el arbusto de bayas!$¡Oh no! ¡El {{enemyPokemon}} fue más rápido y bloqueó el camino!", + "boss_enraged": "¡El {{enemyPokemon}} oponente se ha enfurecido!" + }, + "3": { + "label": "Irse", + "tooltip": "(-) Ninguna Recompensa", + "selected": "Dejas al Pokémon fuerte con su premio y continúas." + } + } +} \ No newline at end of file diff --git a/src/locales/es/mystery-encounters/bug-type-superfan-dialogue.json b/src/locales/es/mystery-encounters/bug-type-superfan-dialogue.json new file mode 100644 index 00000000000..0fdc0995039 --- /dev/null +++ b/src/locales/es/mystery-encounters/bug-type-superfan-dialogue.json @@ -0,0 +1,40 @@ +{ + "intro": "¡Un entrenador inusual con todo tipo de parafernalia de bichos bloquea tu camino!", + "intro_dialogue": "¡Hola, entrenador! ¡Estoy en una misión para encontrar el Pokémon Bicho más raro que existe!$¿A ti también te encantan los Pokémon Bicho, verdad? ¡A todos les encantan los Pokémon Bicho!", + "title": "El Superfan de los Pokémon Bicho", + "speaker": "Superfan de los Pokémon Bicho", + "description": "El entrenador parlotea, sin siquiera esperar una respuesta...\n\n¡Parece que la única forma de salir de esta situación es captando la atención del entrenador!", + "query": "¿Qué harás?", + "option": { + "1": { + "label": "Proponer a luchar", + "tooltip": "(-) Batalla Desafiante\n(+) Enseña un movimiento de tipo Bicho a un Pokémon", + "selected": "¿Un desafío, eh?\n¡Mis Pokémon Bicho están más que preparados para ti!" + }, + "2": { + "label": "Muestra tus tipos Bicho", + "tooltip": "(+) ¡Recibe un objeto de regalo!", + "disabled_tooltip": "Necesitas al menos 1 Pokémon de tipo Bicho en tu equipo para seleccionar esto.", + "selected": "Le muestras al entrenador todos tus Pokémon de tipo Bicho...", + "selected_0_to_1": "¿Eh? Solo tienes {{numBugTypes}} tipo Bicho...$Supongo que estoy perdiendo el tiempo con alguien como tú...", + "selected_2_to_3": "¡Oye, tienes {{numBugTypes}}! No está mal.$Aquí, esto podría ayudarte en tu viaje para atrapar más.", + "selected_4_to_5": "¿Qué? ¿Tienes {{numBugTypes}}?\nNice!$No estás a mi nivel, pero puedo ver destellos de mí en ti.$¡Toma esto, mi joven aprendiz!", + "selected_6": "¡Vaya! {{numBugTypes}}!$¡Debes amar a los Pokémon de tipo Bicho casi tanto como yo!$Aquí, toma esto como un símbolo de nuestra camaradería." + }, + "3": { + "label": "Regala un objeto de tipo Bicho", + "tooltip": "(-) Dale al entrenador un {{requiredBugItems}}\n(+) Recibe un item de regalo", + "disabled_tooltip": "Necesitas tener un {{requiredBugItems}} para seleccionar esto.", + "select_prompt": "Selecciona un objeto para dar", + "invalid_selection": "El Pokémon no tiene ese tipe de objeto.", + "selected": "Le entregas al entrenador un{{selectedItem}}.", + "selected_dialogue": "¡Vaya! ¿Un {{selectedItem}}, para mí? ¡No eres tan malo, chico!$Como muestra de mi agradecimiento, quiero que tengas este regalo especial.$Ha pasado por toda mi familia, y ahora quiero que lo tengas tú." + } + }, + "battle_won": "¡Tu conocimiento y habilidad fueron perfectos para explotar nuestras debilidades!$A cambio de la valiosa lección, permíteme enseñarle a uno de tus Pokémon un movimiento de tipo Bicho.", + "teach_move_prompt": "Selecciona un movimiento para enseñar a un Pokémon.", + "confirm_no_teach": "¿Estás seguro de que no quieres aprender uno de estos excellentes movimientos?", + "outro": "¡Veo grandes Pokémon de tipo Bicho en tu futuro! ¡Que nuestros caminos se crucen de nuevo! ¡Bicho fuera!", + "numBugTypes_one": "{{count}} Pokémon de tipo Bicho", + "numBugTypes_other": "{{count}} Pokémon de tipo Bicho" +} diff --git a/src/locales/es/mystery-encounters/clowning-around-dialogue.json b/src/locales/es/mystery-encounters/clowning-around-dialogue.json new file mode 100644 index 00000000000..5199c8d6432 --- /dev/null +++ b/src/locales/es/mystery-encounters/clowning-around-dialogue.json @@ -0,0 +1,33 @@ +{ + "intro": "¿Es un...@d{64} payaso?", + "speaker": "Payaso", + "intro_dialogue": "¡Bufón torpe, prepárate para una batalla brillante! ¡Serás derrotado por este trovador peleador!", + "description": "Algo no esta bien en este encuentro. El payaso parece ansioso por provocarte a una batalla, ¿pero con qué fin? El {{blacephalonName}} es especialmente extraño, como si tuviera @[TOOLTIP_TITLE]{tipos y habilidades raros.}", + "query": "¿Qué harás?", + "option": { + "1": { + "label": "Enfrentarse al Payaso", + "tooltip": "(-) Batalla extraña\n(?) Afecta las habilidades de los Pokémon", + "selected": "¡Tus patéticos Pokémon están listos para una actuación patética!", + "apply_ability_dialogue": "¡Una exhibición sensacional! ¡Tu astucia se adapta a una habilidad sensacional como recompensa!", + "apply_ability_message": "¡El payaso está ofreciendo intercambiar permanentemente la habilidad de uno de tus Pokémon por {{ability}}!", + "ability_prompt": "¿Te gustaría enseñar permanentemente a un Pokémon la habilidad {{ability}}?", + "ability_gained": "¡@s{level_up_fanfare}{{chosenPokemon}} obtenió la habilidad {{ability}}!" + }, + "2": { + "label": "No involucrarse", + "tooltip": "(-) Molesta al payaso\n(?) Afecta los objetos de los Pokémon", + "selected": "¡Cobarde desdichado, niegas un exquisito duelo?\n ¡Siente mi furia!", + "selected_2": "¡El {{blacephalonName}} del payaso usa Truco! ¡Todos los objetos de tu {{switchPokemon}} fueron intercambiados al azar!", + "selected_3": "¡Tonto desconcertado, cae en mi engaño impecable!" + }, + "3": { + "label": "Devolver los insultos", + "tooltip": "(-) Molesta al payaso\n(?) Afecta los objetos de los Pokémon", + "selected": "¡Cobarde desdichado, niegas un exquisito duelo?\n ¡Siente mi furia!", + "selected_2": "¡El {{blacephalonName}} del payaso usa un movimiento extraño! ¡Todos los tipos de tu equipo fueron intercambiados al azar!", + "selected_3": "¡Tonto desconcertado, cae en mi engaño impecable!" + } + }, + "outro": "El payaso y sus secuaces\ndesaparecen en una nube de humo." +} \ No newline at end of file diff --git a/src/locales/es/mystery-encounters/dancing-lessons-dialogue.json b/src/locales/es/mystery-encounters/dancing-lessons-dialogue.json new file mode 100644 index 00000000000..c4494e3efa8 --- /dev/null +++ b/src/locales/es/mystery-encounters/dancing-lessons-dialogue.json @@ -0,0 +1,27 @@ +{ + "intro": "Un {{oricorioName}} baila tristemente solo, sin pareja.", + "title": "Clases de baile", + "description": "El {{oricorioName}} no parece agresivo, más bien parece triste.\nTal vez solo quiera alguien con quien bailar...", + "query": "¿Qué harás?", + "option": { + "1": { + "label": "Enfrentarse", + "tooltip": "(-) Batalla Ardua\n(+) Obtén el objeto Relevo", + "selected": "¡El {{oricorioName}} está angustiado e intenta defenderse!", + "boss_enraged": "¡El miedo del {{oricorioName}} aumentó sus estadísticas!" + }, + "2": { + "label": "Aprende su danza", + "tooltip": "(+) Enseña a un Pokémon Danza despertar", + "selected": "Observas atentamente al {{oricorioName}} mientras realiza su danza…$@s{level_up_fanfare}¡Tu {{selectedPokemon}} aprendió del {{oricorioName}}!" + }, + "3": { + "label": "Muéstrale una danza", + "tooltip": "(-) Enseña al {{oricorioName}} un movimiento de danza\n(+) Le gustaras al {{oricorioName}}", + "disabled_tooltip": "Tus Pokémon necesitan conocer un movimiento de danza para esto.", + "select_prompt": "Selecciona un movimiento de tipo danza para usar.", + "selected": "¡El {{oricorioName}} observa fascinado mientras\n{{selectedPokemon}} muestra {{selectedMove}}!$¡Le encanta la exhibición!$@s{level_up_fanfare}¡El {{oricorioName}} quiere unirse a tu equipo!" + } + }, + "invalid_selection": "Este Pokémon no conoce ningún movimiento de danza" +} \ No newline at end of file diff --git a/src/locales/es/mystery-encounters/dark-deal-dialogue.json b/src/locales/es/mystery-encounters/dark-deal-dialogue.json new file mode 100644 index 00000000000..19b5c5c5b78 --- /dev/null +++ b/src/locales/es/mystery-encounters/dark-deal-dialogue.json @@ -0,0 +1,24 @@ + + +{ + "intro": "Un hombre extraño con un abrigo andrajoso se interpone en tu camino...", + "speaker": "Tipo sombrío", + "intro_dialogue": "¡Oye, tú!$He estado trabajando en un nuevo dispositivo\npara sacar el poder latente de un Pokémon!$Reorganiza completamente los átomos del Pokémon\na nivel molecular en una forma mucho más poderosa.$Jeje…@d{64} Solo necesito algunos sac-@d{32}\nEh, sujetos de prueba, para demostrar que funciona.", + "title": "Pacto Oscuro", + "description": "El tipo inquietante sostiene unas Pokéballs.\n\"¡Te lo compensaré! Puedes tener estas Pokéballs fuertes como pago. ¡Todo lo que necesito es un Pokémon de tu equipo! Jeje...", + "query": "¿Qué harás?", + "option": { + "1": { + "label": "Acceptar", + "tooltip": "(+) 5 Rogue Balls\n(?) Mejora un Pokémon aleatorio", + "selected_dialogue": "Veamos, ¡Ese {{pokeName}} servirá muy bien!$Recuerda, no soy responsable\nsi algo malo sucede!@d{32} Jeje...", + "selected_message": "El hombre te entrega 5 Rogue Balls.${{pokeName}} entra dentro de la máquina...$¡Luces intermitentes y ruidos extraños\ncomienzan a salir de la máquina!$...@d{96} Algo emerge\ndel dispositivo, ¡furiosamente!" + }, + "2": { + "label": "Rechazar", + "tooltip": "(-) Ninguna Recompensa", + "selected": "¿No vas a ayudar a un pobre hombre?\n¡Bah!" + } + }, + "outro": "Después del encuentro angustioso, te recuperas y te marchas." +} \ No newline at end of file diff --git a/src/locales/es/mystery-encounters/delibirdy-dialogue.json b/src/locales/es/mystery-encounters/delibirdy-dialogue.json new file mode 100644 index 00000000000..79e0b457b01 --- /dev/null +++ b/src/locales/es/mystery-encounters/delibirdy-dialogue.json @@ -0,0 +1,29 @@ + + +{ + "intro": "¡Ha aparecido una bandada de {{delibirdName}}!", + "title": "Pajarradas", + "description": "Los {{delibirdName}} te miran expectantes, como si quisieran algo. Tal vez darles un objeto o algo de dinero los satisfaría.", + "query": "¿Qué les darás?", + "invalid_selection": "Pokémon no tienen ese tipo de objeto.", + "option": { + "1": { + "label": "Dar dinero", + "tooltip": "(-) Dar a los {{delibirdName}}s {{money, money}}\n(+) Recibe un objeto de regalo", + "selected": "Lanzas el dinero a los {{delibirdName}}s, \nque charlan emocionados entre ellos.$Luego se vuelven hacia ti y te dan un regalo con alegría." + }, + "2": { + "label": "Dar comida", + "tooltip": "(-) Dar a los {{delibirdName}}s una Baya o Semilla milagro\n(+) Recibe un objeto de regalo", + "select_prompt": "Selecciona un objeto para dar.", + "selected": "Lanzas el {{chosenItem}} a los {{delibirdName}},\nque charlan emocionados entre ellos.$Se vuelven hacia ti y te dan un regalo alegremente." + }, + "3": { + "label": "Dar objeto", + "tooltip": "(-) Dar a los {{delibirdName}}s un objeto equipado\n(+) Recibe un objeto de regalo", + "select_prompt": "Selecciona un objeto para dar.", + "selected": "Lanzas el {{chosenItem}} a los {{delibirdName}},\nque charlan emocionados entre ellos.$Se vuelven hacia ti y te dan un regalo alegremente." + } + }, + "outro": "La bandada de {{delibirdName}} se aleja felizmente a lo lejos. ¡Qué intercambio tan curioso!" +} diff --git a/src/locales/es/mystery-encounters/department-store-sale-dialogue.json b/src/locales/es/mystery-encounters/department-store-sale-dialogue.json new file mode 100644 index 00000000000..e17d57b8c3c --- /dev/null +++ b/src/locales/es/mystery-encounters/department-store-sale-dialogue.json @@ -0,0 +1,27 @@ +{ + "intro": "Es una señora con un montón de bolsas de compras.", + "speaker": "Compradora", + "intro_dialogue": "¡Hola! ¿También estás aquí por las increíbles rebajas? Hay un cupón especial que puedes canjear por un artículo gratis durante la venta. ¡Tengo uno extra. ¡Aquí tienes!", + "title": "¡Rebajas en el Centro Comercial!", + "description": "¡Hay mercancía en todas direcciones! Parece que hay 4 mostradores donde puedes canjear el cupón por varios artículos. ¡Las posibilidades son infinitas!", + "query": "¿A qué mostrador irás?", + "option": { + "1": { + "label": "Mostrador de MTs", + "tooltip": "(+) Tienda de MTs" + }, + "2": { + "label": "Mostrador de Vitaminas", + "tooltip": "(+) Tienda de vitaminas" + }, + "3": { + "label": "Mostrador de objetos de batalla", + "tooltip": "(+) Tienda de objetos X" + }, + "4": { + "label": "Mostrador de Pokéballs ", + "tooltip": "(+) Tienda de Pokéballs" + } + }, + "outro": "¡Qué chollo! Deberías comprar allí más a menudo." +} \ No newline at end of file diff --git a/src/locales/es/mystery-encounters/field-trip-dialogue.json b/src/locales/es/mystery-encounters/field-trip-dialogue.json new file mode 100644 index 00000000000..be2554aba35 --- /dev/null +++ b/src/locales/es/mystery-encounters/field-trip-dialogue.json @@ -0,0 +1,31 @@ +{ + "intro": "¡Es un profesor y alugnos estudiantes parvulitos", + "speaker": "Profesor", + "intro_dialogue": "¡Hola! ¿Podrías dedicar un minuto a mis alumnos?$Les estoy enseñando sobre los movimientos de Pokémon\ny me encantaría mostrarles una demostración.$¿Te importaría mostrarnos uno de los movimientos\nque puede usar tu Pokémon?", + "title": "Excursión", + "description": "Una profesora está solicitando una demostración de un movimiento de un Pokémon. Dependiendo del movimiento que elijas, podría tener algo útil para ti a cambio.", + "query": "¿Qué categoría de movimiento mostrarás?", + "option": { + "1": { + "label": "Un movimiento físico", + "tooltip": "(+) Recompensas de objetos para movimientos físicos" + }, + "2": { + "label": "Un movimiento especial", + "tooltip": "(+) Recompensas de objetos para movimientos especiales" + }, + "3": { + "label": "Un ataque de estado", + "tooltip": "(+) Recompensas de objetos de estado" + }, + "selected": "¡{{pokeName}} muestra una increíble exhibición de {{move}}!" + }, + "second_option_prompt": "Elige un movimiento para que tu Pokémon use.", + "incorrect": "...$¡Eso no es un movimiento {{moveCategory}}!\nLo siento, pero no puedo darte nada.$Vamos niños, encontraremos una mejor demostración en otro lugar.", + "incorrect_exp": "Parece que has aprendido una valiosa lección.$Tu Pokémon también ganó algo de experiencia.", + "correct": "¡Muchas gracias por tu amabilidad!\n¡Espero que estos objetos te sean de utilidad!", + "correct_exp": "{{pokeName}} también ganó una valiosa experiencia!", + "status": "Estado", + "physical": "Físico", + "special": "Especial" +} \ No newline at end of file diff --git a/src/locales/es/mystery-encounters/fiery-fallout-dialogue.json b/src/locales/es/mystery-encounters/fiery-fallout-dialogue.json new file mode 100644 index 00000000000..272544cba9e --- /dev/null +++ b/src/locales/es/mystery-encounters/fiery-fallout-dialogue.json @@ -0,0 +1,26 @@ +{ + "intro": "¡Te encuentras con una tormenta abrasadora de humo y ceniza!", + "title": "¡Pasión Ardiente!", + "description": "La ceniza y las brasas han reducido la visibilidad a casi cero. Parece que podría haber alguna… fuente que esté causando estas condiciones. Pero, ¿qué podría estar detrás de un fenómeno de esta magnitud?", + "query": "¿Qué harás?", + "option": { + "1": { + "label": "Encontrar la causa", + "tooltip": "(?) Encunetra la causa\n(-) Batalla Difícil", + "selected": "¡Empujas a través de la tormenta y encuentras a dos {{volcaronaName}}s en medio de una danza de apareamiento!$¡No toman bien la interrupción y atacan!" + }, + "2": { + "label": "Refugiarse", + "tooltip": "(-) Sufre los efectos del clima", + "selected": "Los efectos del clima causan un daño significativo mientras luchas por encontrar refugio. ¡Tu grupo pierde el 20% de su HP máximo!", + "target_burned": "¡Tu {{burnedPokemon}} también acabo quemándose!" + }, + "3": { + "label": "Tus tipos de fuego ayudan", + "tooltip": "(+) Paras las condiciones del clima\n(+) Obtén un Carbón", + "disabled_tooltip": "Necesitas al menos 2 Pokémon de tipo Fuego para elegir esto", + "selected": "Tus {{option3PrimaryName}} y {{option3SecondaryName}} te guían hasta donde dos {{volcaronaName}}s están en medio de una danza de apareamiento.$Afortunadamente, tus Pokémon logran calmarlos y se van sin problemas." + } + }, + "found_charcoal": "Después de que el clima se despeja,\ntu {{leadPokemon}} ve algo en el suelo. $¡@s{item_fanfare}{{leadPokemon}} obtuvo un Carbón!" +} \ No newline at end of file diff --git a/src/locales/es/mystery-encounters/fight-or-flight-dialogue.json b/src/locales/es/mystery-encounters/fight-or-flight-dialogue.json new file mode 100644 index 00000000000..33ccc09e1c6 --- /dev/null +++ b/src/locales/es/mystery-encounters/fight-or-flight-dialogue.json @@ -0,0 +1,25 @@ +{ + "intro": "¡Algo brillante está reluciendo\nen el suelo cerca de ese Pokémon!", + "title": "Lucha o huye", + "description": "Parece que hay un Pokémon fuerte protegiendo un objeto. Lucharlo es el enfoque más directo, pero parece fuerte. Quizás podrías robar el objeto, si tienes el Pokémon adecuado para el trabajo.", + "query": "¿Qué harás?", + "option": { + "1": { + "label": "Enfréntarse al Pokémon", + "tooltip": "(-) Batalla Difícil\n(+) Obtén un objeto", + "selected": "Te acercas al\nPokémon sin miedo.", + "stat_boost": "¡La fuerza latente de {{enemyPokemon}} aumentó una de sus estadísticas!" + }, + "2": { + "label": "Robar el objeto", + "disabled_tooltip": "Tus Pokémon necesitan conocer ciertos movimientos para elegir esto", + "tooltip": "(+) {{option2PrimaryName}} usa {{option2PrimaryMove}}", + "selected": ".@d{32}.@d{32}.@d{32}$Tu {{option2PrimaryName}} te ayuda y usa {{option2PrimaryMove}}!$¡Agarraste el obejto!" + }, + "3": { + "label": "Irse", + "tooltip": "(-) Ninguna recompensa", + "selected": "Dejas al Pokémon fuerte\ncon su premio y continúas." + } + } +} \ No newline at end of file diff --git a/src/locales/es/mystery-encounters/fun-and-games-dialogue.json b/src/locales/es/mystery-encounters/fun-and-games-dialogue.json new file mode 100644 index 00000000000..bbaa52996ad --- /dev/null +++ b/src/locales/es/mystery-encounters/fun-and-games-dialogue.json @@ -0,0 +1,30 @@ +{ + "intro_dialogue": "¡Pasen y vean, amigos! Prueben su suerte en el nuevo {{wobbuffetName}} Golpe-o-matic!", + "speaker": "El Feriante", + "title": "Juegos y diversión", + "description": "¡Te has encontrado con una feria ambulante con un juego de premios! Tendrás @[TOOLTIP_TITLE]{3 turnos} para dejar al {{wobbuffetName}} lo más cerca posible de @[TOOLTIP_TITLE]{1 PS} @[TOOLTIP_TITLE]{sin debilitarlo} para que pueda cargar un gran Contraataque en la máquina de golpear la campana. ¡Pero ten cuidado! Si debilitas al {{wobbuffetName}}, tendrás que pagar el coste de revivirlo.", + "query": "¿Te gustaría jugar?", + "option": { + "1": { + "label": "Jugar el juego", + "tooltip": "(-) Paga {{option1Money, money}}\n(+) Juega al {{wobbuffetName}} Golpe-o-matic", + "selected": "¡Es hora de probar tu suerte!" + }, + "2": { + "label": "Irse", + "tooltip": "(-) Ninguna Recompensa", + "selected": "Te apresuras en irte, con una ligera sensación de arrepentimiento." + } + }, + "ko": "¡Oh no! ¡El {{wobbuffetName}} se debilitó!$Pierdes el juego y\ntienes que pagar el coste de revivirlo...", + "charging_continue": "¡El Wobbuffet sigue cargando su contraataque!", + "turn_remaining_3": "¡Quedan tres turnos!", + "turn_remaining_2": "¡Quedan dos turnos!", + "turn_remaining_1": "¡Queda un turno!", + "end_game": "¡Se acabó el tiempo!$El {{wobbuffetName}} se prepara para el contraataque y@d{16}.@d{16}.@d{16}.", + "best_result": "¡El {{wobbuffetName}} golpea el botón con tanta fuerza\nque la campana se rompe!$¡Ganas el gran premio!", + "great_result": "¡El {{wobbuffetName}} golpea el botón, casi alcanzando la campana!$¡Tan cerca!\n¡Ganas el segundo premio!", + "good_result": "¡El {{wobbuffetName}} golpea el botón con suficiente fuerza para llegar a la mitad de la escala!$¡Ganas el tercer premio!", + "bad_result": "El {{wobbuffetName}} apenas toca el botón y no pasa nada…$¡Oh no!\nNo ganas nada.", + "outro": "¡Ese fue un juego muy divertido!" +} \ No newline at end of file diff --git a/src/locales/es/mystery-encounters/global-trade-system-dialogue.json b/src/locales/es/mystery-encounters/global-trade-system-dialogue.json new file mode 100644 index 00000000000..b2598007b0d --- /dev/null +++ b/src/locales/es/mystery-encounters/global-trade-system-dialogue.json @@ -0,0 +1,32 @@ +{ + "intro": "¡Es una interfaz para la Estación de Intercambio Global, la GTS!", + "title": "La GTS", + "description": "¡Ah, la GTS! Una maravilla tecnológica, puedes conectarte con cualquier persona en todo el mundo para intercambiar Pokémon con ellos. ¿Tendrás suerte en tu intercambio hoy?", + "query": "¿Qué harás?", + "option": { + "1": { + "label": "Ver ofertas de intercambio", + "tooltip": "(+) Selecciona una oferta de intercambio para uno de tus Pokémon", + "trade_options_prompt": "Selecciona un Pokémon para recibir a través del intercambio." + }, + "2": { + "label": "Intercambio Prodigioso", + "tooltip": "(+) Envía uno de tus Pokémon a la GTS y recibe un Pokémon aleatorio a cambio." + }, + "3": { + "label": "Intercambia un objeto", + "trade_options_prompt": "Selecciona un objeto para enviar.", + "invalid_selection": "Este Pokémon no tiene objetos legales para intercambiar.", + "tooltip": "(+) Envía uno de tus objetos a la GTS y recibe un nuevo objeto aleatorio." + }, + "4": { + "label": "Irse", + "tooltip": "(-) Ninguna Recompensa", + "selected": "¡No hay tiempo para intercambiar hoy!\nSigues adelante." + } + }, + "pokemon_trade_selected": "{{tradedPokemon}} será enviado a {{tradeTrainerName}}.", + "pokemon_trade_goodbye": "¡Adiós, {{tradedPokemon}}!", + "item_trade_selected": "{{chosenItem}} será enviado a {{tradeTrainerName}}.$.@d{64}.@d{64}.@d{64}\n@s{level_up_fanfare}¡Intercambio completo!$¡Has recibido un {{itemName}} de {{tradeTrainerName}}!", + "trade_received": "¡@s{evolution_fanfare}{{tradeTrainerName}} envió a {{received}}!" +} diff --git a/src/locales/es/mystery-encounters/lost-at-sea-dialogue.json b/src/locales/es/mystery-encounters/lost-at-sea-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/es/mystery-encounters/lost-at-sea-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/es/mystery-encounters/mysterious-challengers-dialogue.json b/src/locales/es/mystery-encounters/mysterious-challengers-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/es/mystery-encounters/mysterious-challengers-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/es/mystery-encounters/mysterious-chest-dialogue.json b/src/locales/es/mystery-encounters/mysterious-chest-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/es/mystery-encounters/mysterious-chest-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/es/mystery-encounters/part-timer-dialogue.json b/src/locales/es/mystery-encounters/part-timer-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/es/mystery-encounters/part-timer-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/es/mystery-encounters/safari-zone-dialogue.json b/src/locales/es/mystery-encounters/safari-zone-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/es/mystery-encounters/safari-zone-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/es/mystery-encounters/shady-vitamin-dealer-dialogue.json b/src/locales/es/mystery-encounters/shady-vitamin-dealer-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/es/mystery-encounters/shady-vitamin-dealer-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/es/mystery-encounters/slumbering-snorlax-dialogue.json b/src/locales/es/mystery-encounters/slumbering-snorlax-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/es/mystery-encounters/slumbering-snorlax-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/es/mystery-encounters/teleporting-hijinks-dialogue.json b/src/locales/es/mystery-encounters/teleporting-hijinks-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/es/mystery-encounters/teleporting-hijinks-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/es/mystery-encounters/the-expert-pokemon-breeder-dialogue.json b/src/locales/es/mystery-encounters/the-expert-pokemon-breeder-dialogue.json new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/src/locales/es/mystery-encounters/the-expert-pokemon-breeder-dialogue.json @@ -0,0 +1 @@ +{} diff --git a/src/locales/es/mystery-encounters/the-pokemon-salesman-dialogue.json b/src/locales/es/mystery-encounters/the-pokemon-salesman-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/es/mystery-encounters/the-pokemon-salesman-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/es/mystery-encounters/the-strong-stuff-dialogue.json b/src/locales/es/mystery-encounters/the-strong-stuff-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/es/mystery-encounters/the-strong-stuff-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/es/mystery-encounters/the-winstrate-challenge-dialogue.json b/src/locales/es/mystery-encounters/the-winstrate-challenge-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/es/mystery-encounters/the-winstrate-challenge-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/es/mystery-encounters/training-session-dialogue.json b/src/locales/es/mystery-encounters/training-session-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/es/mystery-encounters/training-session-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/es/mystery-encounters/trash-to-treasure-dialogue.json b/src/locales/es/mystery-encounters/trash-to-treasure-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/es/mystery-encounters/trash-to-treasure-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/es/mystery-encounters/uncommon-breed-dialogue.json b/src/locales/es/mystery-encounters/uncommon-breed-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/es/mystery-encounters/uncommon-breed-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/es/mystery-encounters/weird-dream-dialogue.json b/src/locales/es/mystery-encounters/weird-dream-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/es/mystery-encounters/weird-dream-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/es/party-ui-handler.json b/src/locales/es/party-ui-handler.json index 0e59aee6fd1..780ef633297 100644 --- a/src/locales/es/party-ui-handler.json +++ b/src/locales/es/party-ui-handler.json @@ -15,6 +15,7 @@ "UNPAUSE_EVOLUTION": "Reanudar evolución", "REVIVE": "Revivir", "RENAME": "Rename", + "SELECT": "Select", "choosePokemon": "Elige a un Pokémon.", "doWhatWithThisPokemon": "¿Que quieres hacer con este Pokémon?", "noEnergy": "¡A {{pokemonName}} no le\nquedan fuerzas para luchar!", diff --git a/src/locales/es/pokemon-form.json b/src/locales/es/pokemon-form.json index 2f70038ad2d..b6008357d89 100644 --- a/src/locales/es/pokemon-form.json +++ b/src/locales/es/pokemon-form.json @@ -1,4 +1,5 @@ { + "pikachu": "Normal", "pikachuCosplay": "Coqueta", "pikachuCoolCosplay": "Roquera", "pikachuBeautyCosplay": "Aristócrata", @@ -6,7 +7,9 @@ "pikachuSmartCosplay": "Erudita", "pikachuToughCosplay": "Enmascarada", "pikachuPartner": "Compañero", + "eevee": "Normal", "eeveePartner": "Compañero", + "pichu": "Normal", "pichuSpiky": "Picoreja", "unownA": "A", "unownB": "B", @@ -36,36 +39,65 @@ "unownZ": "Z", "unownExclamation": "!", "unownQuestion": "?", + "castform": "Normal Form", "castformSunny": "Sol", "castformRainy": "Lluvia", "castformSnowy": "Nieve", "deoxysNormal": "Normal", + "deoxysAttack": "Ataque", + "deoxysDefense": "Defensa", + "deoxysSpeed": "Velocidad", "burmyPlant": "Planta", "burmySandy": "Arena", "burmyTrash": "Basura", + "cherubiOvercast": "Encapotado", + "cherubiSunshine": "Soleado", "shellosEast": "Este", "shellosWest": "Oeste", + "rotom": "Normal", "rotomHeat": "Calor", "rotomWash": "Lavado", "rotomFrost": "Frío", "rotomFan": "Ventilador", "rotomMow": "Corte", + "dialga": "Normal", + "dialgaOrigin": "Origen", + "palkia": "Normal", + "palkiaOrigin": "Origen", "giratinaAltered": "Modificada", + "giratinaOrigin": "Origen", "shayminLand": "Tierra", + "shayminSky": "Cielo", "basculinRedStriped": "Raya Roja", "basculinBlueStriped": "Raya Azul", "basculinWhiteStriped": "Raya Blanca", + "darumaka": "Modo Normal", + "darumakaZen": "Modo Daruma", "deerlingSpring": "Primavera", "deerlingSummer": "Verano", "deerlingAutumn": "Otoño", "deerlingWinter": "Invierno", "tornadusIncarnate": "Avatar", + "tornadusTherian": "Tótem", "thundurusIncarnate": "Avatar", + "thundurusTherian": "Tótem", "landorusIncarnate": "Avatar", + "landorusTherian": "Tótem", + "kyurem": "Normal", + "kyuremBlack": "Negro", + "kyuremWhite": "Blanco", "keldeoOrdinary": "Habitual", + "keldeoResolute": "Brío", "meloettaAria": "Lírica", "meloettaPirouette": "Danza", + "genesect": "Normal", + "genesectShock": "FulgoROM", + "genesectBurn": "PiroROM", + "genesectChill": "CrioROM", + "genesectDouse": "HidroROM", + "froakie": "Normal", "froakieBattleBond": "Fuerte Afecto", + "froakieAsh": "Ash", "scatterbugMeadow": "Floral", "scatterbugIcySnow": "Polar", "scatterbugPolar": "Taiga", @@ -91,6 +123,7 @@ "flabebeOrange": "Naranja", "flabebeBlue": "Azul", "flabebeWhite": "Blanco", + "furfrou": "Salvaje", "furfrouHeart": "Corazón", "furfrouStar": "Estrella", "furfrouDiamond": "Diamante", @@ -100,9 +133,14 @@ "furfrouLaReine": "Aristócrata", "furfrouKabuki": "Kabuki", "furfrouPharaoh": "Faraónico", - "pumpkabooSmall": "Pequeño", - "pumpkabooLarge": "Grande", - "pumpkabooSuper": "Enorme", + "espurrMale": "Macho", + "espurrFemale": "Hembra", + "honedgeShiled": "Escudo", + "honedgeBlade": "Filo", + "pumpkaboo": "Tamaño Normal", + "pumpkabooSmall": "Tamaño Pequeño", + "pumpkabooLarge": "Tamaño Grande", + "pumpkabooSuper": "Tamaño Extragrande", "xerneasNeutral": "Relajado", "xerneasActive": "Activo", "zygarde50": "Al 50%", @@ -110,11 +148,37 @@ "zygarde50Pc": "Zygarde al 50%", "zygarde10Pc": "Zygarde al 10%", "zygardeComplete": "Zygarde Completo", + "hoopa": "Contenido", + "hoopaUnbound": "Desatado", "oricorioBaile": "Apasionado", "oricorioPompom": "Animado", "oricorioPau": "Plácido", "oricorioSensu": "Refinado", + "rockruff": "Normal", "rockruffOwnTempo": "Ritmo Propio", + "rockruffMidday": "Diurna", + "rockruffMidnight": "Nocturna", + "rockruffDusk": "Crepuscular", + "wishiwashi": "Solo Form", + "wishiwashiSchool": "Banco", + "typeNullNormal": "Tipo Normal", + "typeNullFighting": "Tipo Lucha", + "typeNullFlying": "Tipo Volador", + "typeNullPoison": "Tipo Veneno", + "typeNullGround": "Tipo Tierra", + "typeNullRock": "Tipo Roca", + "typeNullBug": "Tipo Bicho", + "typeNullGhost": "Tipo Fantasma", + "typeNullSteel": "Tipo Acero", + "typeNullFire": "Tipo Fuego", + "typeNullWater": "Tipo Agua", + "typeNullGrass": "Tipo Planta", + "typeNullElectric": "Tipo Eléctrico", + "typeNullPsychic": "Tipo Psíquico", + "typeNullIce": "Tipo Hielo", + "typeNullDragon": "Tipo Dragón", + "typeNullDark": "Tipo Siniestro", + "typeNullFairy": "Tipo Hada", "miniorRedMeteor": "Núcleo Rojo", "miniorOrangeMeteor": "Núcleo Naranja", "miniorYellowMeteor": "Núcleo Amarillo", @@ -131,25 +195,66 @@ "miniorViolet": "Violeta", "mimikyuDisguised": "Encubierta", "mimikyuBusted": "Descubierta", + "necrozma": "Normal", + "necrozmaDuskMane": "Melena Crepuscular", + "necrozmaDawnWings": "Asas Alvorada", + "necrozmaUltra": "Ultra", + "magearna": "Normal", "magearnaOriginal": "Vetusto", + "marshadow": "Normal", "marshadowZenith": "Cénit", + "cramorant": "Normal", + "cramorantGulping": "Tragatodo", + "cramorantGorging": "Engulletodo", + "toxelAmped": "Agudo", + "toxelLowkey": "Grave", "sinisteaPhony": "Falsificada", "sinisteaAntique": "Genuina", + "milceryVanillaCream": "Crema de Vainilla", + "milceryRubyCream": "Crema Rosa", + "milceryMatchaCream": "Crema de Té", + "milceryMintCream": "Crema de Menta", + "milceryLemonCream": "Crema de Limón", + "milcerySaltedCream": "Crema Salada", + "milceryRubySwirl": "Mezcla Rosa", + "milceryCaramelSwirl": "Mezcla Caramelo", + "milceryRainbowSwirl": "Tres Sabores", + "eiscue": "Cara de Hielo", "eiscueNoIce": "Cara Deshielo", "indeedeeMale": "Macho", "indeedeeFemale": "Hembra", "morpekoFullBelly": "Saciada", + "morpekoHangry": "Voraz", "zacianHeroOfManyBattles": "Guerrero avezado", + "zacianCrowned": "Espada Suprema", "zamazentaHeroOfManyBattles": "Guerrero avezado", + "zamazentaCrowned": "Escudo Supremo", + "kubfuSingleStrike": "Estilo Brusco", + "kubfuRapidStrike": "Estilo Fluido", + "zarude": "Normal", "zarudeDada": "Papá", + "calyrex": "Normal", + "calyrexIce": "Jinete Glacial", + "calyrexShadow": "Jinete Espectral", + "basculinMale": "Macho", + "basculinFemale": "Hembra", "enamorusIncarnate": "Avatar", + "enamorusTherian": "Tótem", + "lechonkMale": "Macho", + "lechonkFemale": "Hembra", + "tandemausFour": "Familia de Cuatro", + "tandemausThree": "Familia de Tres", "squawkabillyGreenPlumage": "Plumaje Verde", "squawkabillyBluePlumage": "Plumaje Azul", "squawkabillyYellowPlumage": "Plumaje Amarillo", "squawkabillyWhitePlumage": "Plumaje Blanco", + "finizenZero": "Ingenua", + "finizenHero": "Heroica", "tatsugiriCurly": "Curvada", "tatsugiriDroopy": "Lánguida", "tatsugiriStretchy": "Estirada", + "dunsparceTwo": "Binodular", + "dunsparceThree": "Trinodular", "gimmighoulChest": "Cofre", "gimmighoulRoaming": "Andante", "koraidonApexBuild": "Forma Plena", @@ -164,6 +269,21 @@ "miraidonGlideMode": "Modo Planeo", "poltchageistCounterfeit": "Fraudulenta", "poltchageistArtisan": "Opulenta", + "poltchageistUnremarkable": "Mediocre", + "poltchageistMasterpiece": "Exquisita", + "ogerponTealMask": "Máscara Turquesa", + "ogerponTealMaskTera": "Máscara Turquesa Teracristal", + "ogerponWellspringMask": "Máscara Fuente", + "ogerponWellspringMaskTera": "Máscara Fuente Teracristal", + "ogerponHearthflameMask": "Máscara Horno", + "ogerponHearthflameMaskTera": "Máscara Horno Teracristal", + "ogerponCornerstoneMask": "Máscara Cimiento", + "ogerponCornerstoneMaskTera": "Máscara Cimiento Teracristal", + "terpagos": "Normal", + "terpagosTerastal": "Teracristal", + "terpagosStellar": "Astral", + "galarDarumaka": "Modo Normal", + "galarDarumakaZen": "Modo Daruma", "paldeaTaurosCombat": "Combatiente", "paldeaTaurosBlaze": "Ardiente", "paldeaTaurosAqua": "Acuático" diff --git a/src/locales/es/pokemon-info-container.json b/src/locales/es/pokemon-info-container.json index 7159c7eae71..6d120d4ad40 100644 --- a/src/locales/es/pokemon-info-container.json +++ b/src/locales/es/pokemon-info-container.json @@ -2,5 +2,6 @@ "moveset": "Movimientos", "gender": "Género:", "ability": "Habilid:", - "nature": "Natur:" -} \ No newline at end of file + "nature": "Natur:", + "form": "Forma:" +} diff --git a/src/locales/es/starter-select-ui-handler.json b/src/locales/es/starter-select-ui-handler.json index 69cc937d4e3..9eb8efb1151 100644 --- a/src/locales/es/starter-select-ui-handler.json +++ b/src/locales/es/starter-select-ui-handler.json @@ -1,5 +1,6 @@ { "confirmStartTeam": "¿Comenzar con estos Pokémon?", + "confirmExit": "¿Quieres salir?", "invalidParty": "¡Este equipo no es válido!", "gen1": "I", "gen2": "II", @@ -11,21 +12,24 @@ "gen8": "VIII", "gen9": "IX", "growthRate": "Crecimiento:", - "ability": "Habilid:", + "ability": "Habili:", "passive": "Pasiva:", "nature": "Natur:", "eggMoves": "Mov. Huevo", "addToParty": "Añadir al Equipo", - "removeFromParty": "Excluir del Equipo", + "removeFromParty": "Quitar del Equipo", "toggleIVs": "Mostrar IVs", "manageMoves": "Cambiar movs.", "manageNature": "Cambiar natur.", + "addToFavorites": "Añadir a Favoritos", + "removeFromFavorites": "Quitar de Favoritos", "useCandies": "Usar Caramelos", "selectNature": "Elige Natur.", "selectMoveSwapOut": "Elige el movimiento que sustituir.", "selectMoveSwapWith": "Elige el movimiento que sustituirá a", "unlockPassive": "Añadir Pasiva", "reduceCost": "Reducir Coste", + "sameSpeciesEgg": "Comprar Huevo", "cycleShiny": ": Shiny", "cycleForm": ": Forma", "cycleGender": ": Género", @@ -38,4 +42,4 @@ "locked": "Bloqueado", "disabled": "No disponible", "uncaught": "No capturado" -} \ No newline at end of file +} diff --git a/src/locales/es/status-effect.json b/src/locales/es/status-effect.json index eeb8c251e8a..66534d11983 100644 --- a/src/locales/es/status-effect.json +++ b/src/locales/es/status-effect.json @@ -40,7 +40,7 @@ "description": "dormir", "obtain": "¡{{pokemonNameWithAffix}}\nse ha dormido!", "obtainSource": "¡{{pokemonNameWithAffix}}\nse ha dormido\npor culpa de {{sourceText}}!", - "activation": "¡{{pokemonNameWithAffix}} está/ndormido como un tronco.", + "activation": "¡{{pokemonNameWithAffix}} está\ndormido como un tronco.", "overlap": "¡{{pokemonNameWithAffix}} ya\nestá dormido!", "heal": "¡{{pokemonNameWithAffix}} se despertó!" }, @@ -62,4 +62,4 @@ "overlap": "¡{{pokemonNameWithAffix}} ya\nestá quemado!", "heal": "¡{{pokemonNameWithAffix}} ya no\nestá quemado!" } -} \ No newline at end of file +} diff --git a/src/locales/es/trainer-classes.json b/src/locales/es/trainer-classes.json index 0677193e4f8..6a85e1bf83d 100644 --- a/src/locales/es/trainer-classes.json +++ b/src/locales/es/trainer-classes.json @@ -1,7 +1,7 @@ { - "ace_trainer": "Entrenador Guay", - "ace_trainer_female": "Entrenadora Guay", - "ace_duo": "Pareja Guay", + "ace_trainer": "Entrenador guay", + "ace_trainer_female": "Entrenadora guay", + "ace_duo": "Pareja guay", "artist": "Artista", "artist_female": "Artista", "backers": "Hinchas", @@ -19,7 +19,7 @@ "breeders": "Criadores", "clerk": "Empresario", "clerk_female": "Oficinista", - "colleagues": "Colegas Oficina", + "colleagues": "Colegas oficina", "crush_kin": "Luchadores", "cyclist": "Ciclista", "cyclist_female": "Ciclista", @@ -46,13 +46,13 @@ "linebacker": "Quarterback", "maid": "Criada", "madame": "Señora", - "medical_team": "Equipo Médico", + "medical_team": "Equipo médico", "musician": "Cantautor", "hex_maniac": "Bruja", "nurse": "Enfermera", "nursery_aide": "Seño", "officer": "Policía", - "parasol_lady": "Dama Parasol", + "parasol_lady": "Dama parasol", "pilot": "Piloto", "pokéfan": "Pokéfan", "pokéfan_female": "Pokéfan", @@ -63,22 +63,26 @@ "psychic": "Médium", "psychic_female": "Mentalista", "psychics": "Pareja Médium", + "pokémon_ranger": "Pokémon Ranger", + "pokémon_ranger_female": "Pokéguarda", + "pokémon_rangers": "Pokéguardas", + "ranger": "Guarda", "restaurant_staff": "Personal Restaurante", "rich": "Bien", "rich_female": "Bien", - "rich_boy": "Niño Bien", - "rich_couple": "Pareja Bien", - "rich_kid": "Niño Bien", - "rich_kid_female": "Niña Bien", - "rich_kids": "Niños Bien", + "rich_boy": "Niño bien", + "rich_couple": "Pareja bien", + "rich_kid": "Niño bien", + "rich_kid_female": "Niña bien", + "rich_kids": "Niños bien", "roughneck": "Calvo", "sailor": "Marinero", "scientist": "Científico", "scientist_female": "Científica", "scientists": "Científicos", "smasher": "Tenista", - "snow_worker": "Operario Nieve", - "snow_worker_female": "Operaria Nieve", + "snow_worker": "Operario nieve", + "snow_worker_female": "Operaria nieve", "striker": "Delantero", "school_kid": "Colegial", "school_kid_female": "Colegial", @@ -89,14 +93,41 @@ "twins": "Gemelas", "veteran": "Veterano", "veteran_female": "Veterana", - "veteran_duo": "Dúo Veterano", + "veteran_duo": "Dúo veterano", "waiter": "Camarero", "waitress": "Camarera", "worker": "Operario", "worker_female": "Operaria", "workers": "Operarios", "youngster": "Joven", + "rocket_grunt": "Recluta Rocket", + "rocket_grunts": "Reclutas Rocket", + "rocket_grunt_female": "Recluta Rocket", + "magma_grunt": "Recluta Magma", + "magma_grunt_female": "Recluta Magma", + "magma_grunts": "Reclutas Magma", + "aqua_grunt": "Recluta Aqua", + "aqua_grunt_female": "Recluta Aqua", + "aqua_grunts": "Reclutas Aqua", + "galactic_grunt": "Recluta Galaxia", + "galactic_grunt_female": "Recluta Galaxia", + "galactic_grunts": "Reclutas Galaxia", + "plasma_grunt": "Recluta Plasma", + "plasma_grunt_female": "Recluta Plasma", + "plasma_grunts": "Reclutas Plasma", + "flare_grunt": "Recluta Flare", + "flare_grunt_female": "Recluta Flare", + "flare_grunts": "Reclutas Flare", "aether_grunt": "Empleado de la Fundación Æther", "aether_grunt_female": "Empleada de la Fundación Æther", - "aether_grunts": "Empleados de la Fundación Æther" + "aether_grunts": "Empleados de la Fundación Æther", + "skull_grunt": "Recluta Skull", + "skull_grunt_female": "Recluta Skull", + "skull_grunts": "Reclutas Skull", + "macro_grunt": "Entrenador Macrocosmos", + "macro_grunt_female": "Entrenadora Macrocosmos", + "macro_grunts": "Entrenadores Macrocosmos", + "star_grunt": "Star Grunt", + "star_grunt_female": "Star Grunt", + "star_grunts": "Star Grunts" } diff --git a/src/locales/es/trainer-names.json b/src/locales/es/trainer-names.json index ce09a0c9037..adef8173687 100644 --- a/src/locales/es/trainer-names.json +++ b/src/locales/es/trainer-names.json @@ -138,6 +138,15 @@ "rood": "Ruga", "xerosic": "Xero", "bryony": "Begonia", + "faba": "Fabio", + "plumeria": "Francine", + "oleana": "Olivia", + "giacomo": "Anán", + "mela": "Melo", + "atticus": "Henzo", + "ortega": "Gus", + "eri": "Erin", + "maxie": "Magno", "archie": "Aquiles", "cyrus": "Helio", @@ -145,6 +154,10 @@ "lysandre": "Lysson", "faba": "Fabio", "lusamine": "Samina", + "guzma": "Guzmán", + "rose": "Rose", + "cassiopeia": "Noa", + "blue_red_double": "Azul y Rojo", "red_blue_double": "Rojo y Azul", "tate_liza_double": "Vito y Leti", @@ -154,5 +167,18 @@ "alder_iris_double": "Mirto e Iris", "iris_alder_double": "Iris y Mirto", "marnie_piers_double": "Roxy y Nerio", - "piers_marnie_double": "Nerio y Roxy" + "piers_marnie_double": "Nerio y Roxy", + + "buck": "Buck", + "cheryl": "Cheryl", + "marley": "Marley", + "mira": "Mira", + "riley": "Riley", + "victor": "Victor", + "victoria": "Victoria", + "vivi": "Vivi", + "vicky": "Vicky", + "vito": "Vito", + "bug_type_superfan": "Bug-Type Superfan", + "expert_pokemon_breeder": "Expert Pokémon Breeder" } diff --git a/src/locales/es/trainer-titles.json b/src/locales/es/trainer-titles.json index 5bee9fc8c51..34fef949e87 100644 --- a/src/locales/es/trainer-titles.json +++ b/src/locales/es/trainer-titles.json @@ -3,32 +3,40 @@ "elite_four_female": "Alto Mando", "gym_leader": "Líder de gimnasio", "gym_leader_female": "Líder de gimnasio", - "gym_leader_double": "Líderes de Gimnasio", + "gym_leader_double": "Líderes de gimnasio", "champion": "Campeón", "champion_female": "Campeona", "champion_double": "Campeones", "rival": "Rival", "professor": "Profesor", "frontier_brain": "As del Frente Batalla", - "rocket_boss": "Team Rocket Boss", - "magma_boss": "Team Magma Boss", - "aqua_boss": "Team Aqua Boss", - "galactic_boss": "Team Galactic Boss", - "plasma_boss": "Team Plasma Boss", - "flare_boss": "Team Flare Boss", + "rocket_boss": "Jefe del Team Rocket", + "magma_boss": "Jefe del Equipo Magma", + "aqua_boss": "Jefe del Equipo Aqua", + "galactic_boss": "Jefe del Equipo Galaxia", + "plasma_boss": "Jefe del Equipo Plasma", + "flare_boss": "Jefe del Team Flare", "aether_boss": "Presidente Æther", + "skull_boss": "Jefe del Team Skull", + "macro_boss": "Presidente de Macrocosmos", + "star_boss": "Team Star Leader", - "rocket_admin": "Team Rocket Admin", - "rocket_admin_female": "Team Rocket Admin", - "magma_admin": "Team Magma Admin", - "magma_admin_female": "Team Magma Admin", - "aqua_admin": "Team Aqua Admin", - "aqua_admin_female": "Team Aqua Admin", - "galactic_commander": "Team Galactic Commander", - "galactic_commander_female": "Team Galactic Commander", - "plasma_sage": "Team Plasma Sage", - "plasma_admin": "Team Plasma Admin", - "flare_admin": "Team Flare Admin", - "flare_admin_female": "Team Flare Admin", - "aether_admin": "Director de la Fundación Æther" + "rocket_admin": "Admin. del Team Rocket", + "rocket_admin_female": "Admin. del Team Rocket", + "magma_admin": "Admin. del Equipo Magma", + "magma_admin_female": "Admin. del Equipo Magma", + "aqua_admin": "Admin. del Equipo Aqua", + "aqua_admin_female": "Admin. del Equipo Aqua", + "galactic_commander": "Comand. del Equipo Galaxia", + "galactic_commander_female": "Comand. del Equipo Galaxia", + "plasma_sage": "Sabio del Equipo Plasma", + "plasma_admin": "Admin. del Equipo Plasma", + "flare_admin": "Admin. del Team Flare", + "flare_admin_female": "Admin. del Team Flare", + "aether_admin": "Director de la Fundación Æther", + "skull_admin": "Admin. del Team Skull", + "macro_admin": "Admin. de Macrocosmos", + "star_admin": "Team Star Squad Boss", + + "the_winstrates": "Familia Estratega" } diff --git a/src/locales/es/tutorial.json b/src/locales/es/tutorial.json index e19dbcf09ad..f03d1e216e4 100644 --- a/src/locales/es/tutorial.json +++ b/src/locales/es/tutorial.json @@ -1,5 +1,5 @@ { - "intro": "¡Bienvenido/a a PokéRogue! Este es un fangame de Pokémon centrado en el combate con elementos roguelite.\n$Este juego no está monetizado y no reclamamos ningún derecho de propiedad sobre Pokémon ni sobre ninguno de\n$los recursos con copyright utilizados.\n$El juego está en desarrollo, pero es completamente jugable.\nPara reportar bugs, por favor, hazlo en nuestra\n$comunidad de Discord.\n$Si el juego va lento, por favor, asegúrate de que tengas activada la opción 'Aceleración de gráficos' en los\n$ajustes de tu navegador.", + "intro": "¡Bienvenido/a a PokéRogue! Este es un fangame de Pokémon centrado en el combate con elementos roguelite.\n$Este juego no está monetizado y no reclamamos ningún derecho de propiedad sobre Pokémon ni sobre ninguno de\n$los recursos con copyright utilizados.\n$El juego está en desarrollo, pero es completamente jugable.\n$Por favor, reporta los errores que veas en nuestro Discord oficial.\n$Si el juego va lento, por favor, asegúrate de que tengas activada la opción 'Aceleración de gráficos' en los\n$ajustes de tu navegador.", "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!", @@ -7,4 +7,4 @@ "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!" -} \ No newline at end of file +} diff --git a/src/locales/fr/ability.json b/src/locales/fr/ability.json index 7db44c45fa7..e5ac2fd3361 100644 --- a/src/locales/fr/ability.json +++ b/src/locales/fr/ability.json @@ -1077,7 +1077,7 @@ }, "thermalExchange": { "name": "Thermodynamique", - "description": "Lorsque le Pokémon est touché par une capacité de type Feu, il ne subit aucun dégât et son Attaque augmente." + "description": "Lorsque le Pokémon est touché par une capacité de type Feu, son Attaque augmente. Il ne peut pas être brulé." }, "angerShell": { "name": "Courroupace", @@ -1237,6 +1237,6 @@ }, "poisonPuppeteer": { "name": "Emprise Toxique", - "description": "Lorsque Pêchaminus empoisonne un Pokémon grâce à l’une de ses capacités, ce dernier devient également confus." + "description": "Lorsque le Pokémon en empoisonne un autre grâce à l’une de ses capacités, ce dernier devient également confus." } } diff --git a/src/locales/fr/achv.json b/src/locales/fr/achv.json index a557a423db7..175ddfc404c 100644 --- a/src/locales/fr/achv.json +++ b/src/locales/fr/achv.json @@ -278,5 +278,9 @@ "INVERSE_BATTLE": { "name": "La teuté à verlan", "description": "Terminer un challenge en Combat Inversé.\nMineter un lenjcha en Ba-con Versin." + }, + "BREEDERS_IN_SPACE": { + "name": "Éleveurs de l'espace !", + "description": "Vaincre l'Éleveuse Experte dans le biome Espace." } } diff --git a/src/locales/fr/battle.json b/src/locales/fr/battle.json index 85f206937e7..26b46f77e9d 100644 --- a/src/locales/fr/battle.json +++ b/src/locales/fr/battle.json @@ -14,6 +14,10 @@ "moneyWon": "Vous remportez\n{{moneyAmount}} ₽ !", "moneyPickedUp": "Vous obtenez {{moneyAmount}} ₽ !", "pokemonCaught": "Vous avez attrapé\n{{pokemonName}} !", + "pokemonObtained": "Vous obtenez\nun {{pokemonName}} !", + "pokemonBrokeFree": "Oh, non !\nLe Pokémon s’est libéré !", + "pokemonFled": "Le {{pokemonName}} sauvage\nprend la fuite !", + "playerFled": "Vous fuyez le {{pokemonName}} !", "addedAsAStarter": "{{pokemonName}} est ajouté\ncomme starter !", "partyFull": "Votre équipe est pleine.\nRelâcher un Pokémon pour {{pokemonName}} ?", "pokemon": "de Pokémon", @@ -52,6 +56,7 @@ "noPokeballTrainer": "Le Dresseur détourne la Ball\nVoler, c’est mal !", "noPokeballMulti": "Impossible ! On ne peut pas viser\nquand il y a deux Pokémon !", "noPokeballStrong": "Le Pokémon est trop fort pour être capturé !\nVous devez d’abord l’affaiblir !", + "noPokeballMysteryEncounter": "Vous ne pouvez pas\nattraper ce Pokémon !", "noEscapeForce": "Une force mystérieuse\nempêche la fuite.", "noEscapeTrainer": "On ne s’enfuit pas d’un\ncombat de Dresseurs !", "noEscapePokemon": "{{moveName}} de {{pokemonName}}\nempêche {{escapeVerb}} !", @@ -65,6 +70,7 @@ "skipItemQuestion": "Êtes-vous sûr·e de ne pas vouloir prendre d’objet ?", "itemStackFull": "Quantité maximale de {{fullItemName}} atteinte.\nVous recevez {{itemName}} à la place.", "eggHatching": "Hein ?", + "eggSkipPrompt": "Aller directement au résumé des Œufs éclos ?", "ivScannerUseQuestion": "Utiliser le Scanner d’IV\nsur {{pokemonName}} ?", "wildPokemonWithAffix": "{{pokemonName}} sauvage", "foePokemonWithAffix": "{{pokemonName}} ennemi", @@ -94,12 +100,12 @@ "statWontGoAnyLower_one": "{{stats}} de {{pokemonNameWithAffix}}\nne peut plus baisser !", "statWontGoAnyLower_other": "{{stats}}\nde {{pokemonNameWithAffix}} ne peuvent plus baisser !", "transformedIntoType": "{{pokemonName}} prend\nle type {{type}} !", - "ppReduced": "Les PP de la capacité {{moveName}}\nde {{targetName}} baissent de {{reduction}} !", "retryBattle": "Voulez-vous réessayer depuis le début du combat ?", "unlockedSomething": "{{unlockedThing}}\na été débloqué.", "congratulations": "Félicitations !", "beatModeFirstTime": "{{speciesName}} a battu le mode {{gameMode}} pour la première fois !\nVous avez reçu {{newModifier}} !", - "eggSkipPrompt": "Aller directement au résumé des Œufs éclos ?", + "ppReduced": "Les PP de la capacité {{moveName}}\nde{{targetName}} baissent de {{reduction}} !", + "mysteryEncounterAppeared": "Hein ?\nC’est quoi ça ?", "battlerTagsHealBlock": "{{pokemonNameWithAffix}} ne peut pas guérir !", "battlerTagsHealBlockOnRemove": "Le blocage de soins qui affectait\n{{pokemonNameWithAffix}} s’est dissipé !" } diff --git a/src/locales/fr/battler-tags.json b/src/locales/fr/battler-tags.json index 4c5c7ea0df6..93b70490ed6 100644 --- a/src/locales/fr/battler-tags.json +++ b/src/locales/fr/battler-tags.json @@ -7,7 +7,7 @@ "nightmareDesc": "les cauchemars", "ingrainDesc": "l’enracinement", "drowsyDesc": "la somnolence", - "rechargingLapse": "Le contrecoup empêche {{pokemonNameWithAffix}}\n de bouger !", + "rechargingLapse": "Le contrecoup empêche {{pokemonNameWithAffix}}\nde bouger !", "trappedOnAdd": "{{pokemonNameWithAffix}}\nne peut plus s’échapper !", "trappedOnRemove": "{{pokemonNameWithAffix}} est libéré\nde la capacité {{moveName}} !", "flinchedLapse": "{{pokemonNameWithAffix}} a la trouille !\nIl ne peut plus attaquer !", diff --git a/src/locales/fr/bgm-name.json b/src/locales/fr/bgm-name.json index ecf0075e79d..c2a0de4d230 100644 --- a/src/locales/fr/bgm-name.json +++ b/src/locales/fr/bgm-name.json @@ -83,9 +83,11 @@ "battle_aether_grunt": "SL - Vs. Fondation Æther", "battle_skull_grunt": "SL - Vs. Team Skull", "battle_macro_grunt": "ÉB - Vs. Macro Cosmos", + "battle_star_grunt": "ÉV - Vs. Team Star", "battle_galactic_admin": "DÉPS - Vs. Admin Team Galaxie", "battle_skull_admin": "SL - Vs. Admin Team Skull", "battle_oleana": "ÉB - Vs. Liv", + "battle_star_admin": "ÉV - Vs. Boss de la Team Star", "battle_rocket_boss": "USUL - Vs. Giovanni", "battle_aqua_magma_boss": "ROSA - Vs. Arthur/Max", "battle_galactic_boss": "DÉPS - Vs. Hélio", @@ -94,6 +96,7 @@ "battle_aether_boss": "SL - Vs. Elsa-Mina", "battle_skull_boss": "SL - Vs. Guzma", "battle_macro_boss": "ÉB - Vs. Shehroz", + "battle_star_boss": "ÉV - Vs. Cassiopée", "abyss": "PDM EdC - Cratère Obscur", "badlands": "PDM EdC - Vallée Stérile", @@ -108,17 +111,17 @@ "forest": "PDM EdC - Forêt Crépuscule", "grass": "PDM EdC - Bois aux Pommes", "graveyard": "PDM EdC - Forêt Trompeuse", - "ice_cave": "PDM EdC - Montagne Glacier", + "ice_cave": "Firel - -50°C", "island": "PDM EdC - Côte Escarpée", "jungle": "Lmz - Jungle", "laboratory": "Firel - Laboratory", - "lake": "PDM EdC - Caverne Cristal", + "lake": "Lmz - Lake", "meadow": "PDM EdC - Pic Céleste (forêt)", "metropolis": "Firel - Metropolis", "mountain": "PDM EdC - Mont Corne", - "plains": "PDM EdC - Pic Céleste (prairie)", - "power_plant": "PDM EdC - Plaines Élek", - "ruins": "PDM EdC - Ruine Scellée", + "plains": "Firel - Route 888", + "power_plant": "Firel - The Klink", + "ruins": "Lmz - Ancient Ruins", "sea": "Andr06 - Marine Mystique", "seabed": "Firel - Seabed", "slum": "Andr06 - Sneaky Snom", @@ -128,7 +131,7 @@ "tall_grass": "PDM EdC - Forêt Brumeuse", "temple": "PDM EdC - Grotte Égide", "town": "PDM EdC - Donjon aléatoire - Thème 3", - "volcano": "PDM EdC - Grotte Étuve", + "volcano": "Firel - Twisturn Volcano", "wasteland": "PDM EdC - Terres Illusoires", "encounter_ace_trainer": "NB - Regards croisés (Topdresseur·euse)", "encounter_backpacker": "NB - Regards croisés (Randonneur·euse)", @@ -146,5 +149,11 @@ "encounter_youngster": "NB - Regards croisés (Gamin)", "heal": "NB - Soin de Pokémon", "menu": "PDM EdC - Bienvenue dans le monde de Pokémon !", - "title": "PDM EdC - Menu Principal" + "title": "PDM EdC - Menu Principal", + + "mystery_encounter_weird_dream": "PDM EdC - Aiguille du Temps", + "mystery_encounter_fun_and_games": "PDM EdC - Maitre Grodoudou", + "mystery_encounter_gen_5_gts": "NB - GTS", + "mystery_encounter_gen_6_gts": "XY - GTS", + "mystery_encounter_delibirdy": "Firel - DeliDelivery!" } diff --git a/src/locales/fr/config.ts b/src/locales/fr/config.ts index f79374cd3b9..d4c75a0ce24 100644 --- a/src/locales/fr/config.ts +++ b/src/locales/fr/config.ts @@ -53,7 +53,49 @@ import terrain from "./terrain.json"; import modifierSelectUiHandler from "./modifier-select-ui-handler.json"; import moveTriggers from "./move-trigger.json"; import runHistory from "./run-history.json"; +import mysteryEncounterMessages from "./mystery-encounter-messages.json"; +import lostAtSea from "./mystery-encounters/lost-at-sea-dialogue.json"; +import mysteriousChest from "./mystery-encounters/mysterious-chest-dialogue.json"; +import mysteriousChallengers from "./mystery-encounters/mysterious-challengers-dialogue.json"; +import darkDeal from "./mystery-encounters/dark-deal-dialogue.json"; +import departmentStoreSale from "./mystery-encounters/department-store-sale-dialogue.json"; +import fieldTrip from "./mystery-encounters/field-trip-dialogue.json"; +import fieryFallout from "./mystery-encounters/fiery-fallout-dialogue.json"; +import fightOrFlight from "./mystery-encounters/fight-or-flight-dialogue.json"; +import safariZone from "./mystery-encounters/safari-zone-dialogue.json"; +import shadyVitaminDealer from "./mystery-encounters/shady-vitamin-dealer-dialogue.json"; +import slumberingSnorlax from "./mystery-encounters/slumbering-snorlax-dialogue.json"; +import trainingSession from "./mystery-encounters/training-session-dialogue.json"; +import theStrongStuff from "./mystery-encounters/the-strong-stuff-dialogue.json"; +import pokemonSalesman from "./mystery-encounters/the-pokemon-salesman-dialogue.json"; +import offerYouCantRefuse from "./mystery-encounters/an-offer-you-cant-refuse-dialogue.json"; +import delibirdy from "./mystery-encounters/delibirdy-dialogue.json"; +import absoluteAvarice from "./mystery-encounters/absolute-avarice-dialogue.json"; +import aTrainersTest from "./mystery-encounters/a-trainers-test-dialogue.json"; +import trashToTreasure from "./mystery-encounters/trash-to-treasure-dialogue.json"; +import berriesAbound from "./mystery-encounters/berries-abound-dialogue.json"; +import clowningAround from "./mystery-encounters/clowning-around-dialogue.json"; +import partTimer from "./mystery-encounters/part-timer-dialogue.json"; +import dancingLessons from "./mystery-encounters/dancing-lessons-dialogue.json"; +import weirdDream from "./mystery-encounters/weird-dream-dialogue.json"; +import theWinstrateChallenge from "./mystery-encounters/the-winstrate-challenge-dialogue.json"; +import teleportingHijinks from "./mystery-encounters/teleporting-hijinks-dialogue.json"; +import bugTypeSuperfan from "./mystery-encounters/bug-type-superfan-dialogue.json"; +import funAndGames from "./mystery-encounters/fun-and-games-dialogue.json"; +import uncommonBreed from "./mystery-encounters/uncommon-breed-dialogue.json"; +import globalTradeSystem from "./mystery-encounters/global-trade-system-dialogue.json"; +import expertPokemonBreeder from "./mystery-encounters/the-expert-pokemon-breeder-dialogue.json"; +/** + * Dialogue/Text token injection patterns that can be used: + * - `$` will be treated as a new line for Message and Dialogue strings. + * - `@d{}` will add a time delay to text animation for Message and Dialogue strings. + * - `@s{}` will play a specified sound effect for Message and Dialogue strings. + * - `@f{}` will fade the screen to black for the given duration, then fade back in for Message and Dialogue strings. + * - `{{}}` (MYSTERY ENCOUNTERS ONLY) will auto-inject the matching dialogue token value that is stored in {@link IMysteryEncounter.dialogueTokens}. + * - (see [i18next interpolations](https://www.i18next.com/translation-function/interpolation)) for more details. + * - `@[]{}` (STATIC TEXT ONLY, NOT USEABLE WITH {@link UI.showText()} OR {@link UI.showDialogue()}) will auto-color the given text to a specified {@link TextStyle} (e.g. `TextStyle.SUMMARY_GREEN`). + */ export const frConfig = { ability, abilityTriggers, @@ -110,4 +152,40 @@ export const frConfig = { modifierSelectUiHandler, moveTriggers, runHistory, + mysteryEncounter: { + // DO NOT REMOVE + "unit_test_dialogue": "{{test}}{{test}} {{test{{test}}}} {{test1}} {{test\}} {{test\\}} {{test\\\}} {test}}", + mysteriousChallengers, + mysteriousChest, + darkDeal, + fightOrFlight, + slumberingSnorlax, + trainingSession, + departmentStoreSale, + shadyVitaminDealer, + fieldTrip, + safariZone, + lostAtSea, + fieryFallout, + theStrongStuff, + pokemonSalesman, + offerYouCantRefuse, + delibirdy, + absoluteAvarice, + aTrainersTest, + trashToTreasure, + berriesAbound, + clowningAround, + partTimer, + dancingLessons, + weirdDream, + theWinstrateChallenge, + teleportingHijinks, + bugTypeSuperfan, + funAndGames, + uncommonBreed, + globalTradeSystem, + expertPokemonBreeder + }, + mysteryEncounterMessages }; diff --git a/src/locales/fr/dialogue.json b/src/locales/fr/dialogue.json index adc58de0563..3b362fc0c2c 100644 --- a/src/locales/fr/dialogue.json +++ b/src/locales/fr/dialogue.json @@ -344,12 +344,17 @@ "1": "Hop hop hop ! Terminus !", "2": "T’es un Dresseur n’est-ce pas ?\n$J’ai bien peur ce que ne soit pas une excuse suffisante pour nous interrompre dans notre travail.", "2_female": "T’es une Dresseuse n’est-ce pas ?\n$J’ai bien peur ce que ne soit pas une excuse suffisante pour nous interrompre dans notre travail.", - "3": "Je travaille à Macro Cosmos Assurances !\nBesoin d’une assurance-vie ?" + "3": "Je travaille à Macro Cosmos Assurances !\nBesoin d’une assurance-vie ?", + "4": "Trouvé !\nPetit interlude combat !", + "4_female": "Trouvée !\nPetit interlude combat !", + "5": "Une soufflante de la part de madame Liv est la pire chose qui puisse arriver !" }, "victory": { "1": "Je n’ai d’autre choix que respectueusement me retirer.", "2": "Mon argent de poche…\nPlus qu’à manger des pâtes pour la fin du mois…", - "3": "Chez Macro Cosmos, rien n’est comparable à notre dévotion au travail !" + "3": "Chez Macro Cosmos, rien n’est comparable à notre dévotion au travail !", + "4": "J’ai même pensé à chager de Pokémon en combat…", + "5": "Combattre ne sert à rien…\nPlus qu’à me barrer !" } }, "oleana": { @@ -365,6 +370,77 @@ "3": "*soupir* Je suis fatiguée parton…" } }, + "star_grunt": { + "encounter": { + "1": "Ouais, un peu de respect, tu veux ?\n Tu sais à qui t’as affaire ?", + "2": "Notre comité d’accueil va pas te faire de cadeau ! Hasta la vistaaar ! ★", + "3": "Tu peux aller voir ailleurs si j’y suis ?\n$Si tu refuses, je m’autorise à faire valoir mes droits de légitime défense, je te préviens !", + "4": "Désolé, mais si tu refuses de partir, on sera obligés de t’y forcer, et ça sera pas joli joli.", + "4_female": "Désolé, mais si tu refuses de partir, on sera obligés de t’y forcer, et ça sera pas joli joli.", + "5": "Quoi ? Toi aussi, t’es venu me casser les pieds ? C’est vraiment pas ma journée…", + "5_female": "Quoi ? Toi aussi, t’es venue me casser les pieds ? C’est vraiment pas ma journée…" + }, + "victory": { + "1": "Comment c'est ça peut être moi qui voit les étoiles ?!", + "2": "T’en as dans le ventre.\n$T’as peut-être ce qu’il faut pour te faire une place dans la constellation de la Team Star.", + "3": "Ma défense était pourtant bonne…\nMais c’était pas assez visiblement !", + "4": "Ha… hasta la vistar… ☆", + "5": "J’aurais jamais cru qu’être Sbire de la Team Star serait un tel fadeau…" + } + }, + "giacomo": { + "encounter": { + "1": "Tu dois vraiment pas tenir à ta life pour défier la Team Star comme ça !", + "2": "Tends un peu l’oreille… Tu l’entends ?\nC’est ton requiem !" + }, + "victory": { + "1": "Pfff, quelle ironie, franchement…", + "2": "J’pensais pas jouer le refrain de ma défaite…" + } + }, + "mela": { + "encounter": { + "1": "Alors, c’est toi le guedin qu’ose nous défier ?\nSois prêt pour ta raclée.", + "1_female": "Alors, c’est toi la guedin qu’ose nous défier ?\nSois prête pour ta raclée.", + "2": "Y a pas à dire, t’es bien une tête brûlée !\nMais fais gaffe, j’en ai aussi sous l’capot !" + }, + "victory": { + "1": "Quoi, c’est comme ça qu’ça finit ?\nPfff… J’ai la haine…", + "2": "J’voulais tout bruler… Mais j’me suis juste consumée.\nY reste plus rien." + } + }, + "atticus": { + "encounter": { + "1": "T’as vraiment du cran de venir provoquer la Team Star.\nDestinée fatale - Au poison succombera - L’ennemi juré.", + "1_female": "T’as vraiment du cran de venir provoquer la Team Star.\nDestinée fatale - Au poison succombera - L’ennemie jurée.", + "2": "Vive expectative - Respect et adversité - Combat au sommet." + }, + "victory": { + "1": "Pardon, mes amis…", + "2": "Ta victoire n’évoque en moi ni rancune ni douleur.\nMon âme est en paix et j’accepte ma défaite." + } + }, + "ortega": { + "encounter": { + "1": "J’vais bien m’occuper de toi, alors viens pas pleurer si tu perds.", + "2": "T’as beau avoir l’air sûr de toi, aujourd’hui, c’est moi qui vais gagner. Je te le garantis !", + "2_female": "T’as beau avoir l’air sûr de toi, aujourd’hui, c’est moi qui vais gagner. Je te le garantis !" + }, + "victory": { + "1": "Hein ? J’ai perdu ? Mais pourquoi ?!\nPourquoi, pourquoi, pourquoi, POURQUOI ?!", + "2": "Mais pourquoi ça fonctionne pas ?!" + } + }, + "eri": { + "encounter": { + "1": "J’ignore tes intentions, mais mon rôle est d’anéantir quiconque s’attaque à la Team Star !", + "2": "Si on m’attaque, je riposte ! Nous verrons bien qui de nous deux restera debout à la fin !" + }, + "victory": { + "1": "Les amis…\nJe suis désolée…", + "2": "J’ai donné mon maximum… et pourtant…\nÇa n’a pas suffi… J’ai échoué…" + } + }, "rocket_boss_giovanni_1": { "encounter": { "1": "Bien. Je dois admettre que je suis impressionné de te voir ici !" @@ -499,6 +575,138 @@ "1": "Les ignorants sans aucune vision n’auront donc de cesse de souiller ce monde." } }, + "star_boss_penny_1": { + "encounter": { + "1": "Je suis la Big Boss de la Team Star, Cassiopée…\n$Incline-toi devant la toute-puissance de la Big Boss !!!" + }, + "victory": { + "1": "… … …" + }, + "defeat": { + "1": "Hé…" + } + }, + "star_boss_penny_2": { + "encounter": { + "1": "Le code d’honneur de la Team Star exige que nous donnions le maximum en combat !\n$Par le pouvoir de l’Évolition, on va te réduire en poussière d’étoiles !" + }, + "victory": { + "1": "… Tout est fini" + }, + "defeat": { + "1": "Tu es redoutable.\nPas étonnant que les boss de la Team aient perdu contre toi." + } + }, + "stat_trainer_buck": { + "encounter": { + "1": "Je te préviens… Je suis sacrément coriace ! Fais comme si tu ne t’y attendais pas !", + "2": "Je sens mes Pokémon gigoter dans leurs Poké Balls !" + }, + "victory": { + "1": "Hé, hé, hé !\nTu mets le feu !", + "2": "Hé, hé, hé !\nTu mets le feu !" + }, + "defeat": { + "1": "Oh ?\nEn panne de carburant je suppose ?", + "2": "Oh ?\nEn panne de carburant je suppose ?" + } + }, + "stat_trainer_cheryl": { + "encounter": { + "1": "Mes Pokémon meurent d’envie de se battre.", + "2": "Je dois te prévenir que mes Pokémon peuvent se montrer un peu exubérants." + }, + "victory": { + "1": "Trouver le bon équilibre en attaque et défense…\nCe n’est pas la chose la plus aisée.", + "2": "Trouver le bon équilibre en attaque et défense…\nCe n’est pas la chose la plus aisée." + }, + "defeat": { + "1": "T’as besoin que je soigne ton équipe ?", + "2": "T’as besoin que je soigne ton équipe ?" + } + }, + "stat_trainer_marley": { + "encounter": { + "1": "OK…\nJe ferai de mon mieux.", + "2": "OK…\nJe… Je peux le faire… !" + }, + "victory": { + "1": "Argh…", + "2": "Argh…" + }, + "defeat": { + "1": "Au revoir…", + "2": "Au revoir…" + } + }, + "stat_trainer_mira": { + "encounter": { + "1": "Maïté va t’éblouir !", + "2": "Je vais te prouver que je ne me mélange plus les pédales !" + }, + "victory": { + "1": "Hum… Je me demande si je suis à la hauteur de ici…", + "2": "Hum… Je me demande si je suis à la hauteur de ici…" + }, + "defeat": { + "1": "Maïté savait qu’elle t’éblouirait !", + "2": "Maïté savait qu’elle t’éblouirait !" + } + }, + "stat_trainer_riley": { + "encounter": { + "1": "Le combat, c’est une façon de se saluer pour nous !", + "2": "On va mettre le paquet pour venir à bout de ton équipe." + }, + "victory": { + "1": "Parfois, on fait équipe…\nEt parfois, on s’affronte…$La vie des Dresseurs est pleine de rebondissements.", + "2": "Parfois, on fait équipe…\nEt parfois, on s’affronte…$La vie des Dresseurs est pleine de rebondissements.." + }, + "defeat": { + "1": "Tu t’en tire bien.\nTu feras mieux la prochaine fois.", + "2": "Tu t’en tire bien.\nTu feras mieux la prochaine fois." + } + }, + "winstrates_victor": { + "encounter": { + "1": "Bon esprit !\nJ’aime ça !" + }, + "victory": { + "1": "Mince !\nTu as un meilleur niveau que je ne le pensais !" + } + }, + "winstrates_victoria": { + "encounter": { + "1": "Oh, ciel !\nCe que tu es jeune !$Mais si tu as battu mon mari,\nc’est que tu sais t’y prendre.$À nous deux, maintenant !" + }, + "victory": { + "1": "Ciel ! Cette force !\nJ’en suis toute retournée !" + } + }, + "winstrates_vivi": { + "encounter": { + "1": "Tu as un meilleur niveau que maman ?\nWaouh!$Mais moi aussi, je suis forte !\nVraiment ! Honnêtement !" + }, + "victory": { + "1": "Quoi ?\nNe me dis pas que j’ai perdu !" + } + }, + "winstrates_vicky": { + "encounter": { + "1": "Comment oses-tu faire pleurer\nmon adorable petite-fille !$Tu vas me le payer !\nTes Pokémon vont mordre la poussière !" + }, + "victory": { + "1": "Ouh! Quelle puissance…\nMa petite-fille avait raison…" + } + }, + "winstrates_vito": { + "encounter": { + "1": "On s’entraine tous ensemble,\navec les membres de ma famille !$Je ne perds contre personne !" + }, + "victory": { + "1": "J’ai toujours été le meilleur de la famille.\nJe n’avais encore jamais perdu…" + } + }, "brock": { "encounter": { "1": "Mon expertise des types Roche va te mettre au sol ! En garde !", diff --git a/src/locales/fr/egg.json b/src/locales/fr/egg.json index cbc912e9d50..8157baa4708 100644 --- a/src/locales/fr/egg.json +++ b/src/locales/fr/egg.json @@ -11,6 +11,7 @@ "gachaTypeLegendary": "Taux de Légendaires élevé", "gachaTypeMove": "Taux de Capacité Œuf Rare élevé", "gachaTypeShiny": "Taux de Chromatiques élevé", + "eventType": "Évènement Mystère", "selectMachine": "Sélectionnez une machine.", "notEnoughVouchers": "Vous n’avez pas assez de coupons !", "tooManyEggs": "Vous avez trop d’Œufs !", diff --git a/src/locales/fr/modifier-select-ui-handler.json b/src/locales/fr/modifier-select-ui-handler.json index d1de2d222a8..727226d7890 100644 --- a/src/locales/fr/modifier-select-ui-handler.json +++ b/src/locales/fr/modifier-select-ui-handler.json @@ -8,5 +8,7 @@ "lockRaritiesDesc": "Assure la relance de proposer des objets gratuits de rareté égale ou supérieure. Affecte le cout de relance.", "checkTeamDesc": "Consulter votre équipe ou utiliser un objet\nde changement de forme.", "rerollCost": "{{formattedMoney}} ₽", - "itemCost": "{{formattedMoney}} ₽" -} \ No newline at end of file + "itemCost": "{{formattedMoney}} ₽", + "continueNextWaveButton": "Continuer", + "continueNextWaveDescription": "Continuer vers la prochaine vague" +} diff --git a/src/locales/fr/modifier-type.json b/src/locales/fr/modifier-type.json index 4f8033b50d7..a4bd7cabe3c 100644 --- a/src/locales/fr/modifier-type.json +++ b/src/locales/fr/modifier-type.json @@ -68,6 +68,20 @@ "BaseStatBoosterModifierType": { "description": "Augmente de 10% {{stat}} de base de son porteur. Plus les IV sont hauts, plus il peut en porter." }, + "PokemonBaseStatTotalModifierType": { + "name": "Jus de Caratroc", + "description": "{{increaseDecrease}} toutes les stats de son porteur de {{statValue}} cran. Caratroc vous a {{blessCurse}}.", + "extra": { + "increase": "Augmente", + "decrease": "Baisse", + "blessed": "accordé sa bénédiction", + "cursed": "jeté une malédiction" + } + }, + "PokemonBaseStatFlatModifierType": { + "name": "Vieux Gâteau", + "description": "Augmente de {{statValue}} {{stats}} de base du porteur. Trouvé après un étrange rêve." + }, "AllPokemonFullHpRestoreModifierType": { "description": "Restaure tous les PV de toute l’équipe." }, @@ -247,7 +261,13 @@ "ENEMY_ATTACK_BURN_CHANCE": { "name": "Jeton Brulure" }, "ENEMY_STATUS_EFFECT_HEAL_CHANCE": { "name": "Jeton Total Soin", "description": "Ajoute 2,5% de chances à chaque tour de se soigner d’un problème de statut." }, "ENEMY_ENDURE_CHANCE": { "name": "Jeton Ténacité" }, - "ENEMY_FUSED_CHANCE": { "name": "Jeton Fusion", "description": "Ajoute 1% de chances qu’un Pokémon sauvage soit une fusion." } + "ENEMY_FUSED_CHANCE": { "name": "Jeton Fusion", "description": "Ajoute 1% de chances qu’un Pokémon sauvage soit une fusion." }, + + "MYSTERY_ENCOUNTER_SHUCKLE_JUICE": { "name": "Jus de Caratroc" }, + "MYSTERY_ENCOUNTER_BLACK_SLUDGE": { "name": "Boue Noire", "description": "Sa puenteur est telle que la boutique ne vous vendra que des objets aux prix fortement augmentés." }, + "MYSTERY_ENCOUNTER_MACHO_BRACE": { "name": "Bracelet Macho", "description": "Battre un Pokémon donnera à son porteur un lot de Bracelet Macho. Chacun augmentant légèrement les stats, avec un bonus au max de lots." }, + "MYSTERY_ENCOUNTER_OLD_GATEAU": { "name": "Vieux Gâteau", "description": "Augmente de {{statValue}} {{stats}} de base du porteur." }, + "MYSTERY_ENCOUNTER_GOLDEN_BUG_NET": { "name": "Filet Doré", "description": "Impreigne son propriétaire d’une chance qui attire les Pokémon Insecte. Sa prise en main est étrange." } }, "SpeciesBoosterItem": { "LIGHT_BALL": { "name": "Balle Lumière", "description": "À faire tenir à Pikachu. Un orbe énigmatique qui double son Attaque et son Atq. Spé. ." }, diff --git a/src/locales/fr/move-trigger.json b/src/locales/fr/move-trigger.json index 6f9d9d4dd63..7564718e7ce 100644 --- a/src/locales/fr/move-trigger.json +++ b/src/locales/fr/move-trigger.json @@ -66,6 +66,7 @@ "suppressAbilities": "Le talent de {{pokemonName}}\na été rendu inactif !", "revivalBlessing": "{{pokemonName}} a repris connaissance\net est prêt à se battre de nouveau !", "swapArenaTags": "Les effets affectant chaque côté du terrain\nont été échangés par {{pokemonName}} !", + "chillyReception": "{{pokemonName}} s’apprête\nà faire un mauvais jeu de mots…", "exposedMove": "{{targetPokemonName}} est identifié\npar {{pokemonName}} !", "safeguard": "{{targetName}} est protégé\npar la capacité Rune Protect !", "substituteOnOverlap": "{{pokemonName}} a déjà\nun clone !", diff --git a/src/locales/fr/move.json b/src/locales/fr/move.json index da42f188a80..6fb3cb73385 100644 --- a/src/locales/fr/move.json +++ b/src/locales/fr/move.json @@ -3129,7 +3129,7 @@ }, "auraWheel": { "name": "Roue Libre", - "effect": "Inflige et change en type Ténèbres" + "effect": "Le Pokémon libère l’énergie stockée dans ses joues pour attaquer et augmenter sa Vitesse. Le type de cette capacité change en fonction de la forme du lanceur." }, "breakingSwipe": { "name": "Abattage", diff --git a/src/locales/fr/mystery-encounter-messages.json b/src/locales/fr/mystery-encounter-messages.json new file mode 100644 index 00000000000..a4394d7d503 --- /dev/null +++ b/src/locales/fr/mystery-encounter-messages.json @@ -0,0 +1,7 @@ +{ + "paid_money": "Vous payez {{amount, number}} ₽.", + "receive_money": "Vous recevez {{amount, number}} ₽ !", + "affects_pokedex": "Affecte les données du Pokédex", + "cancel_option": "Retour au choix des options.", + "view_party_button": "Voir l’Équipe" +} diff --git a/src/locales/fr/mystery-encounters/a-trainers-test-dialogue.json b/src/locales/fr/mystery-encounters/a-trainers-test-dialogue.json new file mode 100644 index 00000000000..d82af9b5eca --- /dev/null +++ b/src/locales/fr/mystery-encounters/a-trainers-test-dialogue.json @@ -0,0 +1,47 @@ +{ + "intro": "Quelqu’un à l’air très balèze s’apporche de vous…", + "buck": { + "intro_dialogue": "Oh, salut toi, je suis Cornil !$J’ai une bonne affaire à proposer\npour quelqu’un d’aussi costaud que toi !$J’ai deux Œufs de Pokémon sur moi,\net j’aimerais que quelqu’un prenne soin d’un.$Si t’arrives à me prouver que t’en est digne,\nje te donne l’Œuf le plus rare !", + "accept": "Hé, hé hé ! Tu mets le feu !", + "decline": "Hé ! Ton équipe\nn’a pas l’air au meilleur de sa forme.$Attends, laisse-moi t’aider." + }, + "cheryl": { + "intro_dialogue": "Bonjour, mon nom est Sara.$J’ai une requête un peu particulière à proposer,\nà quelqu’un de plutôt fort comme toi.$Je porte avec moi deux Œufs de Pokémon,\nmais j’aimerais que quelqu’un prenne soin d’un.$Si tu parviens à me démontrer toute ta force,\nje te donne l’Œuf le plus rare !", + "accept": "On y va ?", + "decline": "Je peux comprendre. Il semblerait que\nton équipe ne soit pas très en forme là.$Laisse-moi m’en occuper." + }, + "marley": { + "intro_dialogue": "Je…@d{64} je m’appelle Viviane.$Je peux te demander un truc ?…$J’ai deux Œufs de Pokémon sur moi,\net j’aimerais que quelqu’un prenne soin d’un.$Si t’arrives à me battre,\nje te donne le plus rare…", + "accept": "… D’accord.", + "decline": "… D’accord.$Tes Pokémon on l’air blessés…\nLaisse-moi les aider." + }, + "mira": { + "intro_dialogue": "Salut ! Moi, c’est Maïté!$J’ai quelque chose\nà demander à quelqu’un de fortiche comme toi !$J’ai deux Œufs de Pokémon sur moi,\net j’aimerais que quelqu’un prenne soin d’un d’eux !$Si t’acceptes de me prouver ta force,\nje te donnerai le plus rare !", + "accept": "Un combat, pour de vrai ?\nOuiiiii !", + "decline": "Oh, pas de combat ?\nPas grave !$Je vais quand même soigner ton équipe !" + }, + "riley": { + "intro_dialogue": "Enchanté, je m’appelle Armand.$J’ai une proposition un peu étange\npour une personne de ton calibre.$Je poste deux Œufs de Pokémon avec moi\nmais j’aimerais en donner un à quelqu’un d’autre.$Si tu prouves en être digne,\nje te donnerai le plus rare !", + "accept": "Ce regard…\nBattons-nous.", + "decline": "Je comprends, ton équpie m’a l’air lessivée.$Laisse-moi t’aider." + }, + "title": "Prouver sa valeur", + "description": "Cette personne semble déterminée à vous donner un Œuf, qu’importe votre décision. Cependant, si vous parvenez à la battre, vous recevrez l’Œuf le plus rare.", + "query": "Que voulez-vous faire ?", + "option": { + "1": { + "label": "Accepter le défi", + "tooltip": "(-) Combat difficile\n(+) Gain d’un @[TOOLTIP_TITLE]{Œuf très rare}" + }, + "2": { + "label": "Décliner le défi", + "tooltip": "(+) Équipe soignée \n(+) Gain d’un @[TOOLTIP_TITLE]{Œuf}" + } + }, + "eggTypes": { + "rare": "Œuf Rare", + "epic": "Œuf Épique", + "legendary": "Œuf Légendaire" + }, + "outro": "{{statTrainerName}} vous donne un {{eggType}} !" +} diff --git a/src/locales/fr/mystery-encounters/absolute-avarice-dialogue.json b/src/locales/fr/mystery-encounters/absolute-avarice-dialogue.json new file mode 100644 index 00000000000..47c1889227d --- /dev/null +++ b/src/locales/fr/mystery-encounters/absolute-avarice-dialogue.json @@ -0,0 +1,25 @@ +{ + "intro": "Un {{greedentName}} vous tend une embuscade\net vole les Baies de votre équipe !", + "title": "Rongrigus-ratus", + "description": "Un {{greedentName}} vous a pris par surprise et a volé toutes vos Baies !\n\nIl semble sur le point de les dévorer mais s’arrête et vous fixe, l’air intéressé.", + "query": "Que voulez-vous faire ?", + "option": { + "1": { + "label": "L’affronter", + "tooltip": "(-) Combat difficile\n(+) Récompenses de sa planque à Baies", + "selected": "Le {{greedentName}} gonfle ses joues\net se prépare au combat !", + "boss_enraged": "L’insatiable amour de {{greedentName}}\npour la nourriture le rend fou !", + "food_stash": "Il semblerait que {{greedentName}}\ngardait une pile de nourriture colossale !$@s{item_fanfare}Tous les Pokémon de votre équipe\nremportent une {{foodReward}} !" + }, + "2": { + "label": "Négocier", + "tooltip": "(+) Regagner quelques Baies", + "selected": "Vos arguments ont touché {{greedentName}}\nsur sa corde sensible.$Il accepte malgré tout de vous balancer\nquelques Baies et se garde le reste." + }, + "3": { + "label": "Lui laisser les Baies", + "tooltip": "(-) Baies définitement perdues\n(?) {{greedentName}} vous apprécie", + "selected": "Le {{greedentName}} engloutit l’intégralité\ndes Baies en un éclair !$Il vous regarde avec tendresse\nen se tapotant le ventre.$Peut-être pourriez-vous lui en donner encore\nplus pendant votre périple…$@s{level_up_fanfare}Le {{greedentName}} veut rejoindre votre équipe !" + } + } +} 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 new file mode 100644 index 00000000000..e87cbc4dfbc --- /dev/null +++ b/src/locales/fr/mystery-encounters/an-offer-you-cant-refuse-dialogue.json @@ -0,0 +1,26 @@ +{ + "intro": "Un jeune garçon aux airs très bougeois 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 !", + "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 pourrez vous supporter de priver votre équipe d’un tel atout ?", + "query": "Que voulez-vous faire ?", + "option": { + "1": { + "label": "Accepter l’offre", + "tooltip": "(-) Vous perdez {{strongestPokemon}}\n(+) Gain d’un @[TOOLTIP_TITLE]{Charme Chroma}\n(+) Gain de {{price, money}}", + "selected": "Fa-bu-leux-han !@d{32} Par ici, {{strongestPokemon}} !$Viens que je te montre fièrement au club de yacht !$Ils vont trooop avoir le seum-haann !" + }, + "2": { + "label": "Le racketter", + "tooltip": "(+) {{option2PrimaryName}} utilise {{moveOrAbility}}\n(+) Gain de {{price, money}}", + "tooltip_disabled": "Votre Pokémon doit connaitre certaines capacités ou talents pour choisir cette option", + "selected": "Oh les aïeux-haann ! {{liepardName}}, on se fait voler !$Attends que je t’envoie mes avocats !" + }, + "3": { + "label": "Partir", + "tooltip": "(-) Aucune récompense", + "selected": "Quelle journée pourrie…$Viens {{liepardName}}.\nOn retourne au club de yacht…" + } + } +} diff --git a/src/locales/fr/mystery-encounters/berries-abound-dialogue.json b/src/locales/fr/mystery-encounters/berries-abound-dialogue.json new file mode 100644 index 00000000000..e97519b88a1 --- /dev/null +++ b/src/locales/fr/mystery-encounters/berries-abound-dialogue.json @@ -0,0 +1,26 @@ +{ + "intro": "Il y a un gros buisson à Baies\nprès de ce Pokémon !", + "title": "Baies à gogo", + "description": "Un Pokémon a l’air de monter la garde de ce buisson à Baies. Vous pourriez aller frontalement au combat, mais il a l’air costaud. Un Pokémon rapide pourrait peut-être en attraper quelques-unes sans se faire prendre ?", + "query": "Que voulez-vous faire ?", + "berries": "Des Baies !", + "option": { + "1": { + "label": "L’affronter", + "tooltip": "(-) Combat difficile\n(+) Gain de Baies", + "selected": "Vous approchez\nle Pokémon sans frémir." + }, + "2": { + "label": "Foncer au buisson", + "tooltip": "(-) {{fastestPokemon}} utilise sa Vitesse\n(+) Gain de Baies", + "selected": "Votre {{fastestPokemon}} fonce vers le buisson !$Il en arrache {{numBerries}} avant que {{enemyPokemon}} ne parvienne à réagir !$Vous prenez vos jambes à votre cou avec votre butin.", + "selected_bad": "Votre {{fastestPokemon}} fonce vers le buisson !$Oh non ! Le {{enemyPokemon}} est plus rapide et bloque l’accès au buisson !", + "boss_enraged": "Le {{enemyPokemon}} ennemi s’énerve !" + }, + "3": { + "label": "Partir", + "tooltip": "(-) Aucune récompense", + "selected": "Vous renoncez à ce Pokémon avec\nson butin et continuez votre route." + } + } +} diff --git a/src/locales/fr/mystery-encounters/bug-type-superfan-dialogue.json b/src/locales/fr/mystery-encounters/bug-type-superfan-dialogue.json new file mode 100644 index 00000000000..459f3891730 --- /dev/null +++ b/src/locales/fr/mystery-encounters/bug-type-superfan-dialogue.json @@ -0,0 +1,40 @@ +{ + "intro": "Une Dresseur un peu étrange avec tout un attirail pour Insectes vous bloque la route !", + "intro_dialogue": "Hé, toi ! Je suis en mission, je dois trouver le Pokémon Inscete le plus rare du monde !$Toi aussi t’aimes les Pokémon Insecte, non ?\nTout le monde aime les Pokémon Insecte !", + "title": "Le Fan d’entomologie", + "speaker": "Fan d’entomologie", + "description": "Ce Dresseur est un vrai moulin à parole, il ne vous laisse aucune ouverture pour répondre…\n\nMais attirer son attention semble être le seul moyen possible de vous sortir de là !", + "query": "Que voulez-vous faire ?", + "option": { + "1": { + "label": "Proposer un combat", + "tooltip": "(-) Combat compliqué\n(+) Apprendre une capacité Insecte à un Pokémon", + "selected": "Un combat hein ?\nMes Insectes sont plus que prêts !" + }, + "2": { + "label": "Montrer vos types Insecte", + "tooltip": "(+) Revecez un objet en cadeau", + "disabled_tooltip": "Vous devez avoir au moins un Pokémon Insecte dans votre équipe pour choisir cette option.", + "selected": "Vous lui montrez tous les types Insecte de votre équipe…", + "selected_0_to_1": "Oh ? T’as qu’{{numBugTypes}}…$Pourquoi je gaspille ma salive à te parler…", + "selected_2_to_3": "Oh, t’as {{numBugTypes}} !\nC’est pas si mal.$Tiens, voilà qui devrait t’aider dans ta quête pour en attraper encore plus !", + "selected_4_to_5": "Quoi ? T’as {{numBugTypes}} ?\nSympa !$T’en est pas encore à mon niveau, mais je me reconnais un peu en toi !\n$Prends ça mon poulain, c’est cadeau !", + "selected_6": "Impressionnant ! {{numBugTypes}} !\n$Tu dois vraiment les aimer presque autant que moi !$Tiens, accepte ceci en signe de notre camaraderie !" + }, + "3": { + "label": "Donner un objet Insecte", + "tooltip": "(-) Lui donner l’objet {{requiredBugItems}}\n(+) Revecez un objet en cadeau", + "disabled_tooltip": "Vous avez besoin d’un objet {{requiredBugItems}} pour choisir cette option.", + "select_prompt": "Choisissez un objet à donner.", + "invalid_selection": "Ce Pokémon ne porte pas ce genre d’objet.", + "selected": "Vous remettez l’objet {{selectedItem}} au Dresseur.", + "selected_dialogue": "Sérieux ? {{selectedItem}}, comme ça en cadeau ?\nC’est très générieux !$En guise de ma reconnaissance, laisse-moi\nte faire un cadeau un peu spécial !$Il est dans ma famille depusi des générations, et ça me ferait plaisir de te l’offrir !" + } + }, + "battle_won": "Tes connaissances et tes capacités ont totalement exploité nos faiblesses !$En remerciement de cette leçon, permets-moi\nd’apprendre une capacité Insecte à un de tes Pokémon !", + "teach_move_prompt": "Sélectionnez une capacité à enseigner.", + "confirm_no_teach": "T’es sûr·e de vouloir renoncer à une des ces incroyables capacités ?", + "outro": "Je te prédis un futur plein d’incroyables Insectes !\nJ’espère qu’on se reverra !$À plus !", + "numBugTypes_one": "{{count}} type Insecte", + "numBugTypes_other": "{{count}} types Insecte" +} diff --git a/src/locales/fr/mystery-encounters/clowning-around-dialogue.json b/src/locales/fr/mystery-encounters/clowning-around-dialogue.json new file mode 100644 index 00000000000..c6ed0008eaf --- /dev/null +++ b/src/locales/fr/mystery-encounters/clowning-around-dialogue.json @@ -0,0 +1,34 @@ +{ + "intro": "Mais c’est…@d{64} un clown ?", + "speaker": "Clown", + "intro_dialogue": "Eh toi, tu m’as l’air clownesque !\nPrépare-toi pour un combat magistral !$Je vais te montrer ce que sont les arts de la rue !", + "title": "Bouffonneries", + "description": "Quelque chose semble louche. Ce Clown a l’air très motivé de vous provoquer en combat, mais dans quel but ?\n\nSon {{blacephalonName}} est très étrange, comme s’il possédait @[TOOLTIP_TITLE]{des types et un talent inhabituels.}", + "query": "Que voulez-vous faire ?", + "option": { + "1": { + "label": "Affronter le Clown", + "tooltip": "(-) Combat étrange\n(?) Affecte les talents des Pokémon", + "selected": "Vos Pokémon sont prêts pour cette performance pathétique !", + "apply_ability_dialogue": "Un spectacle sensationnel !\nVotre savoir-faire est en harmonie avec vos compétences !", + "apply_ability_message": "Le Clown vous propose d’Échanger définitivement le talent d’un de vos Pokémon contre {{ability}} !", + "ability_prompt": "Voulez-vous définitivement donner le talent {{ability}} à un Pokémon ?", + "ability_gained": "@s{level_up_fanfare}{{chosenPokemon}} obtient le talent {{ability}} !" + }, + "2": { + "label": "Rester de marbre", + "tooltip": "(-) Agace le Clown\n(?) Affecte les objets de vos Pokémon", + "selected": "Ça se défile lâchement d’un duel exceptionnel ?\nDans ce cas, tâte à ma colère !", + "selected_2": "Le {{blacephalonName}} du Clown utilise\nTour de Magie !$Tous les objets de {{switchPokemon}}\nsont échangés au hasard !", + "selected_3": "Sombre imbécile, tombe dans mon piège !" + }, + "3": { + "label": "Retouner les insultes", + "tooltip": "(-) Agace le Clown\n(?) Affecte les types de vos Pokémon", + "selected": "Ça se défile lâchement d’un duel exceptionnel ?\nDans ce cas, tâte à ma colère !", + "selected_2": "Le {{blacephalonName}} du Clown utilise\nune étrange capacité !$Tous les types de votre équipe\nsont échangés au hasard !", + "selected_3": "Sombre imbécile, tombe dans mon piège !" + } + }, + "outro": "Le Clown et sa bande disparaissent\ndans un nuage de fumée." +} diff --git a/src/locales/fr/mystery-encounters/dancing-lessons-dialogue.json b/src/locales/fr/mystery-encounters/dancing-lessons-dialogue.json new file mode 100644 index 00000000000..61a5049a7c7 --- /dev/null +++ b/src/locales/fr/mystery-encounters/dancing-lessons-dialogue.json @@ -0,0 +1,27 @@ +{ + "intro": "Un {{oricorioName}} danse tristement seul,\nsans partenaire pour l’accompagner.", + "title": "Leçons de danse", + "description": "Ce {{oricorioName}} ne semble pas hostile, mais a tout au plus juste l’air triste.\n\nPeut-être a-t-il juste besoin d’un ou d’une partenaire pour l’accompagner ?…", + "query": "Que voulez-vous faire ?", + "option": { + "1": { + "label": "L’affronter", + "tooltip": "(-) Combat difficile\n(+) Gain d’un Bâton", + "selected": "Le {{oricorioName}} est desemparé\net tente de se défendre !", + "boss_enraged": "La peur de {{oricorioName}} augmente beaucoup ses stats !" + }, + "2": { + "label": "Apprendre sa danse", + "tooltip": "(+) Apprendre Danse Éveil à un Pokémon", + "selected": "Vos scrutez {{oricorioName}} de près pendant sa danse…$@s{level_up_fanfare}Votre {{selectedPokemon}} apprend la capacité\nDanse Éveil de {{oricorioName}} !" + }, + "3": { + "label": "Montrer une danse", + "tooltip": "(-) Apprendre à {{oricorioName}} une capacité dansante\n(+) Le {{oricorioName}} vous apprécie", + "disabled_tooltip": "Votre Pokémon doit connaitre une capacité dansante pour choisir cette option.", + "select_prompt": "Sélectionnez une capacité dansante.", + "selected": "Le {{oricorioName}} observe avec fascination\n{{selectedPokemon}} exécuter {{selectedMove}} !$Il adore le démonstration !$@s{level_up_fanfare}Le {{oricorioName}} veut se joindre à votre équipe !" + } + }, + "invalid_selection": "Il ne connait aucune capacité dansante" +} diff --git a/src/locales/fr/mystery-encounters/dark-deal-dialogue.json b/src/locales/fr/mystery-encounters/dark-deal-dialogue.json new file mode 100644 index 00000000000..3d419eedf8e --- /dev/null +++ b/src/locales/fr/mystery-encounters/dark-deal-dialogue.json @@ -0,0 +1,24 @@ + + +{ + "intro": "Un homme suspect vêtu d’une blouse en lambeaux\nse tient au milieu du chemin…", + "speaker": "Savant fou", + "intro_dialogue": "Hé, toi !$Je travaille sur un dispositif qui permet d’éveiller\nla vraie puissance d’un Pokémon !$Il restructure complètement les atomes du Pokémon\npour en faire une version bien plus puissante.$Héhé…@d{64} Je n’ai besoin que de sac-@d{32}\nEuuh, sujets tests, pour prouver son fonctionnement.", + "title": "L’Expérience interdite", + "description": "Ce scientifique à l’air un peu taré tient dans ses mains quelques Poké Balls.\n« T’inquites pas, je gère ! Voilà quelques Poké Balls plutôt efficaces en caution, tout ce dont j’ai besoin, c’est un de tes Pokémon ! Héhé… »", + "query": "Que voulez-vous faire ?", + "option": { + "1": { + "label": "Accepter", + "tooltip": "(+) 5 Rogue Balls\n(?) Améliore un Pokémon au hasard", + "selected_dialogue": "Ah bien, ton {{pokeName}} fera parfaitement l’affaire !$Je précise que si quelque chose tourne mal,\nje ne suis pas responsable !@d{32} Héhé…", + "selected_message": "L’homme vous remet 5 Rogue Balls.$Votre {{pokeName}} saute dans l’étrange dispositif…$Le dispositif émet des lumières\nclignotantes et des bruits douteux !$…@d{96} Quelque chose sort du dispositif avec fureur !" + }, + "2": { + "label": "Refuser", + "tooltip": "(-) Aucune récompense", + "selected": "On a même plus le droit de rendre service maintenant ?\nPfff !" + } + }, + "outro": "Après cette épuisante rencontre,\nvous reprenez vos esprits et repartez." +} diff --git a/src/locales/fr/mystery-encounters/delibirdy-dialogue.json b/src/locales/fr/mystery-encounters/delibirdy-dialogue.json new file mode 100644 index 00000000000..20c878db24f --- /dev/null +++ b/src/locales/fr/mystery-encounters/delibirdy-dialogue.json @@ -0,0 +1,29 @@ + + +{ + "intro": "Une horde de {{delibirdName}} apparait !", + "title": "Cas d’oiseaux", + "description": "Les {{delibirdName}} vous scrutent avec curiosité, comme s’ils attendaient quelque chose. Peut-être que leur donner un objet ou un peu d’argent pourrait les satisfaire ?", + "query": "Que voulez-vous faire ?", + "invalid_selection": "Ce Pokémon ne porte pas ce genre d’objet.", + "option": { + "1": { + "label": "Donner de l’argent", + "tooltip": "(-) Donner {{money, money}} aux {{delibirdName}}\n(+) Recevez un objet", + "selected": "Vous lancez de l’argent aux {{delibirdName}},\nqui se lancent dans une grande délibération.$Ils reviennent ravis vers vous avec un cadeau !" + }, + "2": { + "label": "Donner de la nourriture", + "tooltip": "(-) Donner une Baie ou une Résugraine aux {{delibirdName}}\n(+) Recevez un objet", + "select_prompt": "Sélectionnez un objet à donner.", + "selected": "Vous lancez la {{chosenItem}} aux {{delibirdName}},\nqui se lancent dans une grande délibération.$Ils reviennent ravis vers vous avec un cadeau !" + }, + "3": { + "label": "Donner un objet", + "tooltip": "(-) Donner un objet tenu aux {{delibirdName}}\n(+) Recevez un objet", + "select_prompt": "Sélectionnez un objet à donner.", + "selected": "Vous lancez l’objet {{chosenItem}} aux {{delibirdName}},\nqui se lancent dans une grande délibération.$Ils reviennent ravis vers vous avec un cadeau !" + } + }, + "outro": "La horde de {{delibirdName}} repartent dans la joie.$Un bien curieux échange !" +} diff --git a/src/locales/fr/mystery-encounters/department-store-sale-dialogue.json b/src/locales/fr/mystery-encounters/department-store-sale-dialogue.json new file mode 100644 index 00000000000..fc06aa05582 --- /dev/null +++ b/src/locales/fr/mystery-encounters/department-store-sale-dialogue.json @@ -0,0 +1,27 @@ +{ + "intro": "Il y a une dame avec des tas de sacs de courses\nà ne savoir qu’en faire.", + "speaker": "Cliente", + "intro_dialogue": "Bonjour !\nToi aussi t’es là pour les incroyables promos ?$Il y a un coupon spécial que tu peux utiliser en échange\nd’un objet gratuit pendant toute la durée de la promo !$J’en ai un en trop.\nTiens, prends-le !", + "title": "Promos au Centre Commercial", + "description": "Tellement de choix que votre regard ne sait plus où se porter !\nIl y a 4 comptoirs auprès desquels vous pouvez dépenser ce coupon parmi une grande variété d’objets.", + "query": "À quel comptoir se rendre ?", + "option": { + "1": { + "label": "CT", + "tooltip": "(+) CT dans la boutique" + }, + "2": { + "label": "Accélérateurs", + "tooltip": "(+) Accélérateurs dans la boutique" + }, + "3": { + "label": "Objets de Combat", + "tooltip": "(+) Objets de boost dans la boutique" + }, + "4": { + "label": "Poké Balls", + "tooltip": "(+) Poké Balls dans la boutique" + } + }, + "outro": "Quelle affaire !\nVous devriez revenir y faire vos achats plus souvent." +} diff --git a/src/locales/fr/mystery-encounters/field-trip-dialogue.json b/src/locales/fr/mystery-encounters/field-trip-dialogue.json new file mode 100644 index 00000000000..601a46c069a --- /dev/null +++ b/src/locales/fr/mystery-encounters/field-trip-dialogue.json @@ -0,0 +1,31 @@ +{ + "intro": "C’est une enseignante avec ses élèves !", + "speaker": "Enseignante", + "intro_dialogue": "Hé, bonjour !\nAurais-tu une minute à accorder à mes élèves ?$Je leur apprends ce que sont les capacités et\nj’adorerais que tu leur fasse une démosntration.$Tu serais d’accord pour nous montrer ça\navec un de tes Pokémon ?", + "title": "Sortie scolaire", + "description": "Une enseignante vous demande de faire la démonstration d’une capacité d’un de vos Pokémon.\nEn fonction de la capacité, elle pourrait vous donner quelque chose d’utile.", + "query": "Utiliser quelle catégorie de capacité ?", + "option": { + "1": { + "label": "Physique", + "tooltip": "(+) Objets de boost axés sur le Physique à la prochaine boutique" + }, + "2": { + "label": "Spéciale", + "tooltip": "(+) Objets de boost axés sur le Spécial à la prochaine boutique" + }, + "3": { + "label": "De Statut", + "tooltip": "(+) Objets de boost axés sur le Statut à la prochaine boutique" + }, + "selected": "{{pokeName}} fait une incroyable démonstration de sa capacité {{move}} !" + }, + "second_option_prompt": "Choisissez une capacité à utiliser.", + "incorrect": "…$Ce n’est pas une capacité {{moveCategory}} !\nJe suis désolée, mais je ne peux rien te donner.$Venez les enfants, on va trouver mieux ailleurs.", + "incorrect_exp": "Il semble que vous avez appris une précieuse leçon ?$Votre Pokémon a gagné un peu d’expérience.", + "correct": "Merci beaucoup de nous avoir accordé de ton temps !\nJ’espère que ces quelques objets de seront utiles !", + "correct_exp": "{{pokeName}} a aussi gagné un beaucoup d’expérience !", + "status": "de Statut", + "physical": "Physique", + "special": "Spéciale" +} diff --git a/src/locales/fr/mystery-encounters/fiery-fallout-dialogue.json b/src/locales/fr/mystery-encounters/fiery-fallout-dialogue.json new file mode 100644 index 00000000000..f85f64830ad --- /dev/null +++ b/src/locales/fr/mystery-encounters/fiery-fallout-dialogue.json @@ -0,0 +1,26 @@ +{ + "intro": "Un vent incandescent de fumées et de cendres\nvous fonce dessus !", + "title": "Fait chaud là, non ?", + "description": "La visiblité est quasi nulle à cause des cendres et les braises tourbillonnantes. Il doit forcément y avoir une quelconque source responsable de ces conditions. Mais que pourrait causer un phénomène d’une telle ampleur ?", + "query": "Que voulez-vous faire ?", + "option": { + "1": { + "label": "Chercher la source", + "tooltip": "(?) Trouver la source\n(-) Combat difficile", + "selected": "Vous pénétrez tant bien que mal dans la tempête et y trouvez deux {{volcaronaName}} en pleine parade nuptiale !$Ils n’apprécient guère d’avoir été interrompus\net vous attaquent !" + }, + "2": { + "label": "S’accroupir", + "tooltip": "(-) Subir la météo", + "selected": "Les effets météorologiques causent d’importantes blessures alors que vous cherchez un abri !$Votre équipe perd 20% de ses PV totaux !", + "target_burned": "Votre {{burnedPokemon}} est également brulé !" + }, + "3": { + "label": "Un type Feu à l’aide", + "tooltip": "(+) Met fin à la météo\n(+) Gain d’un Charbon", + "disabled_tooltip": "Vous avez besoin d’au moins 2 Pokémon Feu pour choisir cette option", + "selected": "Vos {{option3PrimaryName}} et {{option3SecondaryName}} vous guident et tombez sur deux {{volcaronaName}} en pleine parade nuptiale !$Heureusement, vos Pokémon parviennent à les calmer, et passent leur chemin sans causer de problèmes." + } + }, + "found_charcoal": "Alors que la météo se calme, votre {{leadPokemon}} repère quelque chose au sol.$@s{item_fanfare}{{leadPokemon}} obtient\nun Charobn !" +} diff --git a/src/locales/fr/mystery-encounters/fight-or-flight-dialogue.json b/src/locales/fr/mystery-encounters/fight-or-flight-dialogue.json new file mode 100644 index 00000000000..d5c6bb7513d --- /dev/null +++ b/src/locales/fr/mystery-encounters/fight-or-flight-dialogue.json @@ -0,0 +1,25 @@ +{ + "intro": "Quelque chose d’une lueur éclatante\nbrille sur sol près de ce Pokémon !", + "title": "Voler ou s’envoler", + "description": "Un puissant Pokémon semble monter la garde d’un objet. Vous pourriez aller frontalement au combat, mais il a l’air costaud. Avec le bon Pokémon, vous pourriez peut-être voler l’objet sans vous faire prendre ?", + "query": "Que voulez-vous faire ?", + "option": { + "1": { + "label": "L’affronter", + "tooltip": "(-) Combat difficile\n(+) Nouvel objet", + "selected": "Vous approchez\nle Pokémon sans frémir.", + "stat_boost": "Les forces dormantes de {{enemyPokemon}}\naugmentent une de ses stats !" + }, + "2": { + "label": "Voler l’objet", + "disabled_tooltip": "Votre Pokémon doit connaitre certaines capacités pour choisir cette option", + "tooltip": "(+) {{option2PrimaryName}} utilise {{option2PrimaryMove}}", + "selected": ".@d{32}.@d{32}.@d{32}$Votre {{option2PrimaryName}} vous aide avec sa capacité {{option2PrimaryMove}} !$Vous dérobez l’objet !" + }, + "3": { + "label": "Partir", + "tooltip": "(-) Aucune récompense", + "selected": "Vous renoncez à ce Pokémon avec\nson butin et continuez votre route." + } + } +} diff --git a/src/locales/fr/mystery-encounters/fun-and-games-dialogue.json b/src/locales/fr/mystery-encounters/fun-and-games-dialogue.json new file mode 100644 index 00000000000..cda660393c4 --- /dev/null +++ b/src/locales/fr/mystery-encounters/fun-and-games-dialogue.json @@ -0,0 +1,30 @@ +{ + "intro_dialogue": "Approchez mesdames et messieurs !$Tentez votre chance au tout nouveau\nRipost-o-matic de {{wobbuffetName}} !", + "speaker": "Animateur", + "title": "Du rire et des jeux !", + "description": "Vous rencontrez un forain avec une mailloche ! Vous disposez de @[TOOLTIP_TITLE]{3 tours} pour amener {{wobbuffetName}} le plus près possible de @[TOOLTIP_TITLE]{1 PV} pour ainsi charger la Riposte la plus puissante possible, @[TOOLTIP_TITLE]{sans le mettre K.O.} .\nMais attention ! Si {{wobbuffetName}} est mis K.O., vous devrez payer pour le ranimer !", + "query": "Voulez-vous jouer ?", + "option": { + "1": { + "label": "Jouer", + "tooltip": "(-) Payer {{option1Money, money}}\n(+) Jouer au Ripost-o-matic", + "selected": "Vous tentez votre chance !" + }, + "2": { + "label": "Partir", + "tooltip": "(-) Aucune récompense", + "selected": "Vous passez votre chemin,\navec un léger sentiment de regret." + } + }, + "ko": "Oh non ! Le {{wobbuffetName}} est K.O. !$Vous avez perdu et devez maintenant\npayer pour le ranimer…", + "charging_continue": "Le Qulbutoké charge\nsa Riposte !", + "turn_remaining_3": "Trois tours restants !", + "turn_remaining_2": "Deux tours restants !", + "turn_remaining_1": "Un tour restant !", + "end_game": "Tous vos tours sont écoulés !$Le {{wobbuffetName}} relâche\nsa Riposte et@d{16}.@d{16}.@d{16}.", + "best_result": "Le {{wobbuffetName}} éclate le bouton si fort\nque la cloche crève le plafond !$Vous remportez le premier prix !", + "great_result": "Le {{wobbuffetName}} éclate le bouton,\net touche presque la cloche !$Mince, à deux doigts !\nVous remportez le deuxième prix !", + "good_result": "Le {{wobbuffetName}} tape le bouton assez fort\npour atteindre la moitié !$Vous remportez le troisième prix !", + "bad_result": "Le {{wobbuffetName}} touche à peine le bouton et rien ne se passe…$Oh non, dommage !\nVous repartez les mains vides !", + "outro": "Ouais, ça va, c’était sympa comme jeu !" +} diff --git a/src/locales/fr/mystery-encounters/global-trade-system-dialogue.json b/src/locales/fr/mystery-encounters/global-trade-system-dialogue.json new file mode 100644 index 00000000000..6caafc3c82d --- /dev/null +++ b/src/locales/fr/mystery-encounters/global-trade-system-dialogue.json @@ -0,0 +1,32 @@ +{ + "intro": "C’est une interface d’accès à la GTS !", + "title": "La GTS", + "description": "Ah, la GTS ! Une révolution technologique permettant de connecter le monde au travers des échanges de Pokémon !\n\nLa chance va-t-elle vous sourire aujourd’hui ?", + "query": "Que voulez-vous faire ?", + "option": { + "1": { + "label": "Consulter les offres", + "tooltip": "(+) Sélectionner une offre d’échange pour un de vos Pokémon", + "trade_options_prompt": "Choisissez un Pokémon à recevoir en échange." + }, + "2": { + "label": "Échange Miracle", + "tooltip": "(+) Envoyer un de vos Pokémon à la GTS et en recevoir un au hasard" + }, + "3": { + "label": "Échanger un objet", + "trade_options_prompt": "Choisissez l’objet à envoyer.", + "invalid_selection": "Ce Pokémon n’a aucun objet légal à échanger.", + "tooltip": "(+) Envoyer un de vos objets à la GTS et en recevoir un au hasard" + }, + "4": { + "label": "Partir", + "tooltip": "(-) Aucune récompense", + "selected": "Pas le temps pour ça aujourd’hui !\nVous reprenez votre chemin." + } + }, + "pokemon_trade_selected": "{{tradedPokemon}} est envoyé\nà {{tradeTrainerName}}.", + "pokemon_trade_goodbye": "Au revoir, {{tradedPokemon}}!", + "item_trade_selected": "{{chosenItem}} est envoyé à\n{{tradeTrainerName}}.$.@d{64}.@d{64}.@d{64}\n@s{level_up_fanfare}Échangé terminé !$Vous recevez l’objet {{itemName}}\nde {{tradeTrainerName}} !", + "trade_received": "@s{evolution_fanfare}{{tradeTrainerName}} a envoyé {{received}} !" +} diff --git a/src/locales/fr/mystery-encounters/lost-at-sea-dialogue.json b/src/locales/fr/mystery-encounters/lost-at-sea-dialogue.json new file mode 100644 index 00000000000..9d74266cdcf --- /dev/null +++ b/src/locales/fr/mystery-encounters/lost-at-sea-dialogue.json @@ -0,0 +1,28 @@ +{ + "intro": "Vous errez sans but en pleine mer\net n’arrivez à rien.", + "title": "Un cap pas clair", + "description": "La mer n’est pas très clémente dans cette zone et vous vous sentez faiblir à petit feu.\nÇa commence à sentir le roussi.\nEst-il au moins possible de se sortir de cette situation ?", + "query": "Que voulez-vous faire ?", + "option": { + "1": { + "label": "{{option1PrimaryName}} à l’aide", + "label_disabled": "{{option1RequiredMove}} impossible", + "tooltip": "(+) {{option1PrimaryName}} vous sauve\n(+) {{option1PrimaryName}} gagne un peu d’Exp", + "tooltip_disabled": "Vous n’avez aucun Pokémon avec {{option1RequiredMove}}", + "selected": "{{option1PrimaryName}} nage en tête et vous guide.${{option1PrimaryName}} semble ressorti plus fort de cette épreuve difficile !" + }, + "2": { + "label": "{{option2PrimaryName}} à l’aide", + "label_disabled": "{{option2RequiredMove}} impossible", + "tooltip": "(+) {{option2PrimaryName}} vous sauve\n(+) {{option2PrimaryName}} gagne un peu d’Exp", + "tooltip_disabled": "Vous n’avez aucun Pokémon avec {{option2RequiredMove}}", + "selected": "{{option2PrimaryName}} vole au dessus de votre embarcation et vous guide.${{option2PrimaryName}} semble ressorti plus fort de cette épreuve difficile !" + }, + "3": { + "label": "Naviguer au jugé", + "tooltip": "(-) Votre équipe perd {{damagePercentage}}% de ses PV totaux", + "selected": "Vous vous laissez porter sans but par les vagues, quand soudainement vous remarquez un lieu famillier.$Vous et vos Pokémon êtes compètement rincés\nde fatigue par cette épreuve." + } + }, + "outro": "Vous retrouvez un cap clair." +} diff --git a/src/locales/fr/mystery-encounters/mysterious-challengers-dialogue.json b/src/locales/fr/mystery-encounters/mysterious-challengers-dialogue.json new file mode 100644 index 00000000000..f43fdfa6db0 --- /dev/null +++ b/src/locales/fr/mystery-encounters/mysterious-challengers-dialogue.json @@ -0,0 +1,22 @@ +{ + "intro": "De mystérieux adversaires apparissent !", + "title": "De mystérieux adversaires", + "description": "Si vous défaites un de ces adversaires, vous pourriez peut-être recevoir une récompense si vous les avez impressionnés.\nCertains ont cependant l’air bien coriaces. Acceptez-vous le défi ?", + "query": "Qui voulez-vous affronter ?", + "option": { + "1": { + "label": "Adversaire lucide", + "tooltip": "(-) Combat normal\n(+) Objets de capacités" + }, + "2": { + "label": "Adversaire difficile", + "tooltip": "(-) Combat difficile\n(+) Bonnes récompenses" + }, + "3": { + "label": "Adversaire puissant", + "tooltip": "(-) Combat brutal\n(+) Super récompenses" + }, + "selected": "Votre adversaire s’avance…" + }, + "outro": "Vous avez battu ce mystérieux adversaire !" +} diff --git a/src/locales/fr/mystery-encounters/mysterious-chest-dialogue.json b/src/locales/fr/mystery-encounters/mysterious-chest-dialogue.json new file mode 100644 index 00000000000..68c2ab6215a --- /dev/null +++ b/src/locales/fr/mystery-encounters/mysterious-chest-dialogue.json @@ -0,0 +1,23 @@ +{ + "intro": "Vous tombez sur…@d{32} un coffre ?", + "title": "Un étrange coffre", + "description": "Un mangifique coffre orné est posé en travers du chemin.\nIl doit forcément contenir quelque chose… pas vrai ?", + "query": "Voulez-vous ouvrir le coffre ?", + "option": { + "1": { + "label": "Ouvrir", + "tooltip": "@[SUMMARY_BLUE]{({{trapPercent}}%) Un truc terrible}\n@[SUMMARY_GREEN]{({{commonPercent}}%) Petites récompenses }\n@[SUMMARY_GREEN]{({{ultraPercent}}%) Bonnes récompenses}\n@[SUMMARY_GREEN]{({{roguePercent}}%) Super récompenses}\n@[SUMMARY_GREEN]{({{masterPercent}}%) Incroyables récompenses}", + "selected": "Vous décidez d’ouvrir le coffre et y trouvez…", + "normal": "De simples outils et objets banaux.", + "good": "Quelques bons outils et objets.", + "great": "Un outil et un objet plutôt sympas !", + "amazing": "Wow ! Quel objet incroyable !", + "bad": "Oh non !@d{32}\nCe coffre s’avère être possédé par un {{gimmighoulName}} !$Votre {{pokeName}} s’interpose\nmais est mis K.O. !" + }, + "2": { + "label": "Trop risqué, partir", + "tooltip": "(-) Aucun récompense", + "selected": "Vous tracez votre chemin,\navec un léger sentiment de regret." + } + } +} diff --git a/src/locales/fr/mystery-encounters/part-timer-dialogue.json b/src/locales/fr/mystery-encounters/part-timer-dialogue.json new file mode 100644 index 00000000000..4867c42c0ed --- /dev/null +++ b/src/locales/fr/mystery-encounters/part-timer-dialogue.json @@ -0,0 +1,31 @@ +{ + "intro": "Un Ouvrière croulant sous le travail\nvous interpelle.", + "speaker": "Ouvrière", + "intro_dialogue": "T’as l’air d’avoir pas mal de Pokémon compétents\navec toi !$Si t’acceptes de nous aider pour quelques tâches,\non peut te payer !", + "title": "L’intérimaire", + "description": "La liste de tâches à effectuer a l’air incroyablement longue.\nEn fonction des compétences du Pokémon choisi à une tâche donnée, vous gagnerez plus ou moins d’argent.", + "query": "Quel poste vous intéresse le plus ?", + "invalid_selection": "Le Pokémon doit être en bonne santé.", + "option": { + "1": { + "label": "Livreur", + "tooltip": "(-) Votre Pokémon utilise sa Vitesse\n(+) Payé avec un @[MONEY]{salaire}", + "selected": "Votre {{selectedPokemon}} passe tout un shift\nà livrer des clients." + }, + "2": { + "label": "Manutentionnaire", + "tooltip": "(-) Votre Pokémon utilise sa Force et son Endurance\n(+) Payé avec un @[MONEY]{salaire}", + "selected": "Votre {{selectedPokemon}} passe tout un shift\nà porter des charges à travers le hangar." + }, + "3": { + "label": "Assistant vendeur", + "tooltip": "(-) Votre {{option3PrimaryName}} utilise {{option3PrimaryMove}}\n(+) Payé avec un @[MONEY]{salaire}", + "disabled_tooltip": "Votre Pokémon doit connaitre certaines capacités pour choisir ce poste", + "selected": "Votre {{option3PrimaryName}} passe sa journée à utiliser {{option3PrimaryMove}} pour attirer des clients !" + } + }, + "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 plutot bien aidé !$Voici votre salaire.", + "pokemon_tired": "Votre {{selectedPokemon}} est épuisé !\nLes PP de toutes ses capacités baissent de 2 !", + "outro": "Reviens nous aider à l’occasion !" +} diff --git a/src/locales/fr/mystery-encounters/safari-zone-dialogue.json b/src/locales/fr/mystery-encounters/safari-zone-dialogue.json new file mode 100644 index 00000000000..24834d128c0 --- /dev/null +++ b/src/locales/fr/mystery-encounters/safari-zone-dialogue.json @@ -0,0 +1,46 @@ +{ + "intro": "C’est un Parc Safari !", + "title": "Le Parc Safari", + "description": "Toutes sortes de Pokémon rares et particuliers peuvent y être rencontrés !\nSi vous décidez d’y entrer, vous aurez une limite de 3 Pokémon sauvages à rencontrer que vous pourrez essayer de capturer.\n\nMais attention, ces Pokémon peuvent prendre la fuite avant que vous n’ayez pu les capturer !", + "query": "Voulez-vous y entrer ?", + "option": { + "1": { + "label": "Entrer", + "tooltip": "(-) Payer {{option1Money, money}}\n@[SUMMARY_GREEN]{(?) Parc Safari}", + "selected": "Vous tentez votre chance !" + }, + "2": { + "label": "Partir", + "tooltip": "(-) Aucune récompense", + "selected": "Vous tracez votre chemin,\navec un léger sentiment de regret." + } + }, + "safari": { + "1": { + "label": "Lancer une Poké Ball", + "tooltip": "(+) Lancer une Poké Ball", + "selected": "Vous lancez une Poké Ball !" + }, + "2": { + "label": "Lancer un appât", + "tooltip": "(+) Augmente le taux de capture\n(-) Augmente le risque de fuite", + "selected": "Vous lancez quelques appâts !" + }, + "3": { + "label": "Lancer de la boue", + "tooltip": "(+) Diminue le risque de fuite\n(-) Diminue le taux de capture", + "selected": "Vous lancez un peu de boue !" + }, + "4": { + "label": "Fuite", + "tooltip": "(?) Fuir ce Pokémon" + }, + "watching": "{{pokemonName}} vous observe\nattentivement.", + "eating": "{{pokemonName}} est en train\nde manger.", + "busy_eating": "{{pokemonName}} se concentre\nsur sa nourriture.", + "angry": "{{pokemonName}} se fâche !", + "beside_itself_angry": "{{pokemonName}} laisse\nexploser sa colère !", + "remaining_count": "Il reste {{remainingCount}} Pokémon !" + }, + "outro": "Cette excursion était fun !" +} diff --git a/src/locales/fr/mystery-encounters/shady-vitamin-dealer-dialogue.json b/src/locales/fr/mystery-encounters/shady-vitamin-dealer-dialogue.json new file mode 100644 index 00000000000..95628cdfb84 --- /dev/null +++ b/src/locales/fr/mystery-encounters/shady-vitamin-dealer-dialogue.json @@ -0,0 +1,27 @@ +{ + "intro": "Un homme en manteau noir vous aborde.", + "speaker": "Dealer", + "intro_dialogue": ".@d{16}.@d{16}.@d{16}$J’ai de la bonne came pour toi, mais seulement\nsi t’as les thunes.$Assure-toi quand même que tes Pokémon\npuissent encaisser.", + "title": "Le Dealer d’accélérateurs", + "description": "L’homme ouvre son manteau et vous laisse apercevoir des accélérateurs pour Pokémon. Le tarif qu’il annonce semble être une bonne affaire. Peut-être même un peu trop belle…\nIl vous laisse le choix entre deux offres.", + "query": "Laquelle choisissez-vous ?", + "invalid_selection": "Le Pokémon doit être en bonne santé.", + "option": { + "1": { + "label": "Offre douteuse", + "tooltip": "(-) Payer {{option1Money, money}}\n(-) Effets secondaires ?\n(+) Le Pokémon choisi gagne 2 accélérateurs au hasard" + }, + "2": { + "label": "Offre honnête", + "tooltip": "(-) Payer {{option2Money, money}}\n(+) Le Pokémon choisi gagne 2 accélérateurs au hasard" + }, + "3": { + "label": "Partir", + "tooltip": "(-) Aucune récompense", + "selected": "Eh bien, j’aurais pas cru que\ntu ferais preuve d’une telle lâcheté." + }, + "selected": "L’homme vous remet deux Accélérateurs et s’évapore.${{selectedPokemon}} reçoit 1 {{boost1}} et 1 {{boost2}} !" + }, + "cheap_side_effects": "Ah !\nDes effets secondaires se manifestent !$Votre {{selectedPokemon}} prend des dégâts,\net sa nature se change en {{newNature}} !", + "no_bad_effects": "Tout semble bien se passer, aucun effet indésirable à signaler !" +} diff --git a/src/locales/fr/mystery-encounters/slumbering-snorlax-dialogue.json b/src/locales/fr/mystery-encounters/slumbering-snorlax-dialogue.json new file mode 100644 index 00000000000..876bb6be2b2 --- /dev/null +++ b/src/locales/fr/mystery-encounters/slumbering-snorlax-dialogue.json @@ -0,0 +1,25 @@ +{ + "intro": "Alors que vous vous aventurez dans un passage étroit, une silhouette imposante bloque le passage.$En vous approchant, vous apercevez un {{snorlaxName}}\nendormi paisiblement.$Vous regardez autour de vous, mais n’apercevez aucun chemin alternatif.", + "title": "{{snorlaxName}} au Bois dormant", + "description": "Vous pourriez soit tenter de le faire bouger en l’attaquant, soit attendre son réveil.\nMais impossible de savoir combien de temps cette dernière option prendrait…", + "query": "Que voulez-vous faire ?", + "option": { + "1": { + "label": "L’affronter", + "tooltip": "(-) Affronter le {{snorlaxName}} endormi\n(+) Récompense spéciale", + "selected": "Vous approchez\nle Pokémon sans frémir." + }, + "2": { + "label": "Attendre qu’il bouge", + "tooltip": "(-) Attendre longtemps\n(+) Équipe soignée", + "selected": ".@d{32}.@d{32}.@d{32}$Vous attendez un long moment et les baillements de {{snorlaxName}} endorment votre équipe…", + "rest_result": "À votre réveil le {{snorlaxName}} a disparu,\net toute votre équipe est soignée !" + }, + "3": { + "label": "Voler son objet", + "tooltip": "(+) {{option3PrimaryName}} utilise {{option3PrimaryMove}}\n(+) Récompense spéciale", + "disabled_tooltip": "Votre Pokémon doit connaitre certaines capacités pour choisir cette option", + "selected": "Votre {{option3PrimaryName}} utilise\n{{option3PrimaryMove}} !$@s{item_fanfare}Vole les Restes du {{snorlaxName}} encore endormi et ressentez de la culpabilité pour ce méfait !" + } + } +} diff --git a/src/locales/fr/mystery-encounters/teleporting-hijinks-dialogue.json b/src/locales/fr/mystery-encounters/teleporting-hijinks-dialogue.json new file mode 100644 index 00000000000..7a819f0bb37 --- /dev/null +++ b/src/locales/fr/mystery-encounters/teleporting-hijinks-dialogue.json @@ -0,0 +1,27 @@ +{ + "intro": "Cette machine un peu étrange émet un lourd ronronnement…", + "title": "Le télé-torpeur", + "description": "Vous pouvez lire sur la machine :\n « Notice d’utilisation : Insérez de l’argent et pénétrez dans la capsule. »\n\nPeut-être qu’elle vous emmènera quelque part…", + "query": "Que voulez-vous faire ?", + "option": { + "1": { + "label": "Insérer de l’argent", + "tooltip": "(-) Payer {{price, money}}\n(?) Téléportation vers un nouveau biome", + "selected": "Vous insérez un peu d’argent et la capsule s’ouvre.\nVous y pénétrez…" + }, + "2": { + "label": "Un Pokémon à l’aide", + "tooltip": "(-) {{option2PrimaryName}} vous aide\n(+) Gain d’Exp pour {{option2PrimaryName}}\n(?) Téléportation vers un nouveau biome", + "disabled_tooltip": "Vous avez besoin d’un Pokémon de type Électrik ou Acier pour choisir cette option", + "selected": "Le type de {{option2PrimaryName}} vous permet de frauder la machine !$La capsule s’ouvre et y pénétrez…" + }, + "3": { + "label": "Inspecter la machine", + "tooltip": "(-) Combat Pokémon", + "selected": "Tous ces bruits et lumières clignotantes\némis par la machine titillent vos sens…$Mais vous manquez d’apercevoir un Pokémon\nsauvage et qui tend une embuscade !" + } + }, + "transport": "Elle vibre violemment, émettant\ntoutes sortes de bruits !$À peine la machine lancée, elle redevient\nsubitement très silencieuse…", + "attacked": "Vous en ressortez en un lieu complètement nouveau, effrayant au passage un Pokémon sauvage !$Le Pokémon sauvage vous attaque !", + "boss_enraged": "Le {{enemyPokemon}} ennemi s’énerve !" +} diff --git a/src/locales/fr/mystery-encounters/the-expert-pokemon-breeder-dialogue.json b/src/locales/fr/mystery-encounters/the-expert-pokemon-breeder-dialogue.json new file mode 100644 index 00000000000..d2f0eb17d99 --- /dev/null +++ b/src/locales/fr/mystery-encounters/the-expert-pokemon-breeder-dialogue.json @@ -0,0 +1,31 @@ +{ + "intro": "C’est une Dresseuse avec une quantité astronomique d’Œufs !", + "intro_dialogue": "Hé, toi !$Certains de tes Pokémon m’ont l’air\nun peu à plat.$Ça te dirait un p’tit combat pour\nleur redonner un peu de peps ?", + "title": "L’experte en élevage", + "description": "Une Éleveuse vous propose un combat où @[TOOLTIP_TITLE]{vous ne pouvez utiliser qu’un seul Pokémon}. Ça s’annonce un peu compliqué, mais devrait certainement approfondir vos liens avec le Pokémon choisi !\nL’Éleveuse devrait vous faire don de quelques @[TOOLTIP_TITLE]{Œufs} si vous gagnez !", + "query": "Avec qui voulez-vous combattre ?", + "cleffa_1_nickname": "As", + "cleffa_2_nickname": "Méloïssime", + "cleffa_3_nickname": "{{speciesName}} le Grand", + "option": { + "1": { + "label": "{{pokemon1Name}}", + "tooltip_base": "(-) Combat difficile\n(+) Augmente le bonheur de {{pokemon1Name}}" + }, + "2": { + "label": "{{pokemon2Name}}", + "tooltip_base": "(-) Combat difficile\n(+) Augmente le bonheur de {{pokemon2Name}}" + }, + "3": { + "label": "{{pokemon3Name}}", + "tooltip_base": "(-) Combat difficile\n(+) Augmente le bonheur de {{pokemon3Name}}" + }, + "selected": "D’accord, faisons ça !" + }, + "outro": "Ton {{chosenPokemon}} et toi avez\nl’air très heureux !$Tiens, prends ça aussi.", + "outro_failed": "Voilà qui est bien décevant…$T’as encore visiblement bien du chemin à faire\npour acquir la confiance de tes Pokémon !", + "gained_eggs": "@s{item_fanfare}Vous recevez\n{{numEggs}} !", + "eggs_tooltip": "\n(+) Recevez {{eggs}}", + "numEggs_one": "{{count}} Œuf {{rarity}}", + "numEggs_other": "{{count}} Œufs {{rarity}}s" +} diff --git a/src/locales/fr/mystery-encounters/the-pokemon-salesman-dialogue.json b/src/locales/fr/mystery-encounters/the-pokemon-salesman-dialogue.json new file mode 100644 index 00000000000..401678490fe --- /dev/null +++ b/src/locales/fr/mystery-encounters/the-pokemon-salesman-dialogue.json @@ -0,0 +1,23 @@ +{ + "intro": "Un homme âgé a l’air malicieux vous aborde.", + "speaker": "Gentleman", + "intro_dialogue": "Salutations !\nJ’ai une offre à proposer rien qu’à VOUS !", + "title": "Le vendeur de Pokémon", + "description": "« Cet incroyable et unique {{purchasePokemon}} possède un talent jamais vu dans son espèce ! Ce superbe {{purchasePokemon}} est à vous pour le prix imbattable de {{price, money}} ! »\n\n« Qu’en dites-vous ? »", + "description_shiny": "« Cet incroyable et unique {{purchasePokemon}} possède une pigmentation unique jamais vue dans son espèce ! Ce superbe {{purchasePokemon}} est à vous pour le prix imbattable de {{price, money}} ! »\n\n« Qu’en dites-vous ? »", + "query": "Que voulez-vous faire ?", + "option": { + "1": { + "label": "Accepter", + "tooltip": "(-) Payer {{price, money}}\n(+) {{purchasePokemon}} obtenu avec son talent caché", + "tooltip_shiny": "(-) Payer {{price, money}}\n(+) {{purchasePokemon}} chromatique obtenu", + "selected_message": "Vous déboursez une somme absolument honteuse\npour acheter ce {{purchasePokemon}}.", + "selected_dialogue": "Excellent choix !\nVous avez pour sûr un sens aiguisé des affaires.$Oh, ah euh…@d{64}\nNi repris, ni échangé par contre hein, compris ?" + }, + "2": { + "label": "Refuser", + "tooltip": "(-) Aucune récompense", + "selected": "Non ?@d{32} Vous déclinez ?$C’était pourtant offre en or que je vous faisais là !" + } + } +} diff --git a/src/locales/fr/mystery-encounters/the-strong-stuff-dialogue.json b/src/locales/fr/mystery-encounters/the-strong-stuff-dialogue.json new file mode 100644 index 00000000000..c9d22039a2e --- /dev/null +++ b/src/locales/fr/mystery-encounters/the-strong-stuff-dialogue.json @@ -0,0 +1,21 @@ +{ + "intro": "C’est un {{shuckleName}} absolument énorme et\nce qui semble être un énorme bol de… jus ?", + "title": "Un breuvage qui arrache", + "description": "Ce {{shuckleName}} qui bloque la route semble incroyablement puissant.\nLe jus qui l’accompagne semble émaner une étrange forme de puissance.\n\nIl tend une patte dans votre direction, l’air de vouloir quelque chose…", + "query": "Que voulez-vous faire ?", + "option": { + "1": { + "label": "Approcher {{shuckleName}}", + "tooltip": "(?) Quelque chose de terrible ou d’incroyable peut se produire", + "selected": "Vous perdez subitement connaissance.", + "selected_2": "@f{150}À votre réveil, le {{shuckleName}} est parti et\nle bol de jus est complètement vide.${{highBstPokemon1}} et {{highBstPokemon2}}\nsont vicitmes d’une forte léthargie !$Leurs stats de base sont baissées de {{reductionValue}} !$Mais par contre, vos autres Pokémon sont envahis\nd’une vigueur encore jamais vue !$Leurs stats de base sont augmentées de {{increaseValue}} !" + }, + "2": { + "label": "Affronter {{shuckleName}}", + "tooltip": "(-) Combat difficile\n(+) Récompense spéciale", + "selected": "Le {{shuckleName}} s’énerve, boit un peu de jus et attaque !", + "stat_boost": "Le jus de {{shuckleName}} augmente ses stats !" + } + }, + "outro": "Quelle étrange tournure des évènements." +} diff --git a/src/locales/fr/mystery-encounters/the-winstrate-challenge-dialogue.json b/src/locales/fr/mystery-encounters/the-winstrate-challenge-dialogue.json new file mode 100644 index 00000000000..1ab771617c6 --- /dev/null +++ b/src/locales/fr/mystery-encounters/the-winstrate-challenge-dialogue.json @@ -0,0 +1,22 @@ +{ + "intro": "C’est une famille dans la cour de leur maison !", + "speaker": "La Famille Stratège", + "intro_dialogue": "Nous sommes les Stratège !$Ça te dirait d’affronter la famille dans une série\nde combats ?", + "title": "Le défi de la Famille Stratège", + "description": "Les Stratège sont une famille de 5 Dresseurs, et ne demandent qu’à se battre ! Si vous parvenez à tous les battre à la suite, ils vous remettront une grosse récompense. Vous sentez-vous d’encaisser ce défi ?", + "query": "Que voulez-vous faire ?", + "option": { + "1": { + "label": "Accepter le défi", + "tooltip": "(-) Combat brutal\n(+) Récompense d’un objet spécial", + "selected": "Que le défi commence !" + }, + "2": { + "label": "Décliner le défi", + "tooltip": "(+) Équipe soignée\n(+) Gain d’un Hyper Bonbon", + "selected": "C’est bien dommage. Hé, ton équipe a quand même l’air bien au bout, ça te dirait de rester te reposer un peu ?" + } + }, + "victory": "Félicitations pour avoir relevé notre défi !$Tout d’abord, nous aimerions t’offir ce Coupon.", + "victory_2": "Mais aussi, notre famille utilise ce Bracelet Macho\npour entrainer plus efficacement nos Pokémon.$Il ne te sera peut-être d’aucune utilité vu que tu nous as tous battus, mais on serait ravis que tu l’accepte !" +} diff --git a/src/locales/fr/mystery-encounters/training-session-dialogue.json b/src/locales/fr/mystery-encounters/training-session-dialogue.json new file mode 100644 index 00000000000..8c10ac13839 --- /dev/null +++ b/src/locales/fr/mystery-encounters/training-session-dialogue.json @@ -0,0 +1,33 @@ +{ + "intro": "Vous tombez sur du matériel d’entrainement.", + "title": "Session d’entrainement", + "description": "Ce matériel semble pouvoir être utilisé pour entrainer un membre de votre équipe ! Il existe plusieurs moyens avec lesquels vous pourriez entrainer un Pokémon, comme en le faisant combattre le reste de votre équipe.", + "query": "Quel entrainement choisir ?", + "invalid_selection": "Le Pokémon doit être en bonne santé.", + "option": { + "1": { + "label": "Léger", + "tooltip": "(-) Combat léger\n(+) Augmente au hasard 2 IV du Pokémon", + "finished": "{{selectedPokemon}} revient vers vous,\nl’air fatigué mais fier de lui !$Ses IV en {{stat1}} et\nen {{stat2}} augmentent !" + }, + "2": { + "label": "Modéré", + "tooltip": "(-) Combat modéré\n(+) Modifie la nature du Pokémon", + "select_prompt": "Sélectionnez la nature pour laquelle\nvotre Pokémon doit s’entrainer.", + "finished": "{{selectedPokemon}} revient vers vous,\nl’air fatigué mais fier de lui !$Il a beaucoup changé et\nest devenu {{nature}} !" + }, + "3": { + "label": "Intense", + "tooltip": "(-) Combat intense\n(+) Modifie le talent du Pokémon", + "select_prompt": "Sélectionnez le talent pour lequel\nvotre Pokémon doit s’entrainer.", + "finished": "{{selectedPokemon}} revient vers vous,\nl’air fatigué mais fier de lui !$Il a beaucoup changé possède\ndesormais le talent {{ability}} !" + }, + "4": { + "label": "Partir", + "tooltip": "(-) Aucune récompense", + "selected": "Oh la flemme, pas le temps de faire du sport.\nAllons ailleurs." + }, + "selected": "{{selectedPokemon}} va de l’autre côté\ndu terrain pour vous faire face…" + }, + "outro": "Cet entrainement a vraiement été très stimulant !" +} diff --git a/src/locales/fr/mystery-encounters/trash-to-treasure-dialogue.json b/src/locales/fr/mystery-encounters/trash-to-treasure-dialogue.json new file mode 100644 index 00000000000..fb39a1d12a1 --- /dev/null +++ b/src/locales/fr/mystery-encounters/trash-to-treasure-dialogue.json @@ -0,0 +1,19 @@ +{ + "intro": "C’est un énorme tas d’ordures !\nComment il est arrivé là ?", + "title": "20 000 lieues sous la mer-", + "description": "Un énorme tas d’ordures se dresse devant vos yeux, dans lequel vous arrivez à entrevoir quelques objets de valeur.\nPar contre, il faut que vous acceptiez l’idée de vous couvrir de saletés pour allez les récupérer…", + "query": "Que voulez-vous faire ?", + "option": { + "1": { + "label": "Le fouiller", + "tooltip": "(-) Prix de la boutique triplés\n(+) Gain d’objets exceptionnels", + "selected": "Vous barbotez dans le tas d’ordures et\nvous vous couvrez de crasse.$Vu votre état, la prochaine boutique va pour sûr\nfortement gonfler ses prix pour vous forcer à fuir !$Mais ça valait le coup, car ce que vous avez trouvé\ndans les ordures est incroyable !" + }, + "2": { + "label": "Enquêter sur le tas", + "tooltip": "(?) Trouver la source des ordures", + "selected": "Vous vous baladez autour du tas, à la recherche du moindre indice sur la raison de sa présence ici…", + "selected_2": "Oh !\nLes ordures se mettent à bouger !$Le tas est en réalité un Pokémon !\nIl vous attaque !" + } + } +} diff --git a/src/locales/fr/mystery-encounters/uncommon-breed-dialogue.json b/src/locales/fr/mystery-encounters/uncommon-breed-dialogue.json new file mode 100644 index 00000000000..f3438bfcee6 --- /dev/null +++ b/src/locales/fr/mystery-encounters/uncommon-breed-dialogue.json @@ -0,0 +1,26 @@ +{ + "intro": "C’est un Pokémon tout ce qu’il y a de plus banal !", + "title": "Une forme peu commune", + "description": "Ce {{enemyPokemon}} a l’air speical par rapport au reste de son espèce. @[TOOLTIP_TITLE]{Peut-être connait-il une capacité particulière ?} Vous pourriez décider de l’affronter sur-le-champ, mais il y a peut-être moyen d’en faire un nouvel ami.", + "query": "Que voulez-vous faire ?", + "option": { + "1": { + "label": "L’affronter", + "tooltip": "(-) Combat compliqué\n(+) Capturer un adversaire puissant", + "selected": "Vous approchez\nle Pokémon sans frémir.", + "stat_boost": "Les caractéristiques particulières\nde ce {{enemyPokemon}} augmentent ses stats !" + }, + "2": { + "label": "Le nourrir", + "disabled_tooltip": "Vous avez besoin de 4 Baies pour chosir cette option", + "tooltip": "(-) Donner 4 Baies\n(+) Le {{enemyPokemon}} vous apprécie", + "selected": "Vous lancer quelques Baies\nau {{enemyPokemon}} !$Il les englouit avec joie !$Le {{enemyPokemon}} veut se joindre\nà votre équipe !" + }, + "3": { + "label": "Devenir amis", + "disabled_tooltip": "Votre Pokémon doit connaitre certaines capacités pour choisir cette option", + "tooltip": "(+) {{option3PrimaryName}} utilise {{option3PrimaryMove}}\n(+) Le {{enemyPokemon}} vous apprécie", + "selected": "Votre {{option3PrimaryName}} utilise {{option3PrimaryMove}} pour charmer le {{enemyPokemon}} !$The {{enemyPokemon}} veut se joindre\nà votre équipe !" + } + } +} diff --git a/src/locales/fr/mystery-encounters/weird-dream-dialogue.json b/src/locales/fr/mystery-encounters/weird-dream-dialogue.json new file mode 100644 index 00000000000..87f6006d8b1 --- /dev/null +++ b/src/locales/fr/mystery-encounters/weird-dream-dialogue.json @@ -0,0 +1,22 @@ +{ + "intro": "Une femme aux airs sombres vous coupe la route.\nElle dégage comme une aura troublante…", + "speaker": "Femme mystérieuse", + "intro_dialogue": "J’ai tout vu…\nTes futurs, tes passés…$Les perçois-tu aussi, mon enfant ?", + "title": "???", + "description": "Les paroles de cette mystérieuse femme raisonnent dans votre tête. Ce n’est pas qu’une simple voix isolée, mais une infinité, d’une infinité d’espace-temps et de réalités.\nVous commencez ressentir des vertiges à mesure que cette question s’empare de votre esprit…\n\n@[TOOLTIP_TITLE]{« J’ai tout vu… Tes futurs, tes passés… Les perçois-tu aussi, mon enfant ? »}", + "query": "Que voulez-vous faire ?", + "option": { + "1": { + "label": "« Je les vois. »", + "tooltip": "@[SUMMARY_GREEN]{(?) Affecte vos Pokémon}", + "selected": "Sa main s’approche de vous et vous touche.\nTout devient subitement sombre.$Puis enfin…@d{64} La lumière.\nChaque espace-temps. Chacune de vos incarnations.$Tout ce qui a composé, compose\net composersa votre être…@d{64}", + "cutscene": "Vous percevez vos Pokémon,@d{32} convergeant de chaque\nréalité pour former quelque chose de nouveau…@d{64}", + "dream_complete": "Vous vous réveillez, mais la femme a disparu…\nOu bien n’etait-elle qu’une hallucination ?$.@d{32}.@d{32}.@d{32}$Les Pokémon de votre équipe ont changé…$Mais alors, comment peuvent-ils quand même\ntoujours vous sembler si familiers ?" + }, + "2": { + "label": "Partir en courant", + "tooltip": "(-) Affecte vos Pokémon", + "selected": "Vous parvenez à vous extraire de son emprise\net prenez vos jambes à votre cou.$Vous vous remettez de vos émotions et\nvérifiez si votre équipe va bien.$Mais pour une raison mystérieuse,\nils ont tous perdu des niveaux !" + } + } +} diff --git a/src/locales/fr/party-ui-handler.json b/src/locales/fr/party-ui-handler.json index 4eef55da790..045e3e4fe86 100644 --- a/src/locales/fr/party-ui-handler.json +++ b/src/locales/fr/party-ui-handler.json @@ -16,6 +16,7 @@ "PAUSE_EVOLUTION": "Empêcher Évolution", "REVIVE": "Ranimer", "RENAME": "Renommer", + "SELECT": "Sélectionner", "choosePokemon": "Sélectionnez un Pokémon.", "doWhatWithThisPokemon": "Que faire avec ce Pokémon ?", "noEnergy": "{{pokemonName}} n’a plus l’énergie\nde se battre !", diff --git a/src/locales/fr/pokemon-form.json b/src/locales/fr/pokemon-form.json index 44f2bcecf2c..b1201ae0dc9 100644 --- a/src/locales/fr/pokemon-form.json +++ b/src/locales/fr/pokemon-form.json @@ -1,4 +1,5 @@ { + "pikachu": "Normal", "pikachuCosplay": "Cosplayeur", "pikachuCoolCosplay": "Cosplay Rockeur", "pikachuBeautyCosplay": "Cosplay Lady", @@ -6,7 +7,9 @@ "pikachuSmartCosplay": "Cosplay Docteur", "pikachuToughCosplay": "Cosplay Catcheur", "pikachuPartner": "Partenaire", + "eevee": "Normal", "eeveePartner": "Partenaire", + "pichu": "Normal", "pichuSpiky": "Troizépi", "unownA": "A", "unownB": "B", @@ -36,36 +39,65 @@ "unownZ": "Z", "unownExclamation": "!", "unownQuestion": "?", + "castform": "Normal Form", "castformSunny": "Solaire", "castformRainy": "Eau de Pluie", "castformSnowy": "Blizzard", "deoxysNormal": "Normal", + "deoxysAttack": "Attaque", + "deoxysDefense": "Défense", + "deoxysSpeed": "Vitesse", "burmyPlant": "Plante", "burmySandy": "Sable", "burmyTrash": "Déchet", + "cherubiOvercast": "Couvert", + "cherubiSunshine": "Ensoleillé", "shellosEast": "Orient", "shellosWest": "Occident", + "rotom": "Normal", "rotomHeat": "Chaleur", "rotomWash": "Lavage", "rotomFrost": "Froid", "rotomFan": "Hélice", "rotomMow": "Tonte", + "dialga": "Normal", + "dialgaOrigin": "Originel", + "palkia": "Normal", + "palkiaOrigin": "Originel", "giratinaAltered": "Alternatif", + "giratinaOrigin": "Originel", "shayminLand": "Terrestre", + "shayminSky": "Céleste", "basculinRedStriped": "Motif Rouge", "basculinBlueStriped": "Motif Bleu", "basculinWhiteStriped": "Motif Blanc", + "darumaka": "Mode Normal", + "darumakaZen": "Mode Transe", "deerlingSpring": "Printemps", "deerlingSummer": "Été", "deerlingAutumn": "Automne", "deerlingWinter": "Hiver", "tornadusIncarnate": "Avatar", + "tornadusTherian": "Totémique", "thundurusIncarnate": "Avatar", + "thundurusTherian": "Totémique", "landorusIncarnate": "Avatar", + "landorusTherian": "Totémique", + "kyurem": "Normal", + "kyuremBlack": "Noir", + "kyuremWhite": "Blanc", "keldeoOrdinary": "Normal", + "keldeoResolute": "Décidé", "meloettaAria": "Chant", "meloettaPirouette": "Danse", + "genesect": "Normal", + "genesectShock": "Module Choc", + "genesectBurn": "Module Pyro", + "genesectChill": "Module Cryo", + "genesectDouse": "Module Aqua", + "froakie": "Normal", "froakieBattleBond": "Synergie", + "froakieAsh": "Sachanobi", "scatterbugMeadow": "Floraison", "scatterbugIcySnow": "Blizzard", "scatterbugPolar": "Banquise", @@ -91,6 +123,7 @@ "flabebeOrange": "Orange", "flabebeBlue": "Bleu", "flabebeWhite": "Blanc", + "furfrou": "Sauvage", "furfrouHeart": "Cœur", "furfrouStar": "Étoile", "furfrouDiamond": "Diamant", @@ -100,21 +133,52 @@ "furfrouLaReine": "Reine", "furfrouKabuki": "Kabuki", "furfrouPharaoh": "Pharaon", - "pumpkabooSmall": "Mini", - "pumpkabooLarge": "Maxi", - "pumpkabooSuper": "Ultra", + "espurrMale": "Mâle", + "espurrFemale": "Femelle", + "honedgeShiled": "Parade", + "honedgeBlade": "Assaut", + "pumpkaboo": "Taille Normale", + "pumpkabooSmall": "Taille Mini", + "pumpkabooLarge": "Taille Maxi", + "pumpkabooSuper": "Taille Ultra", "xerneasNeutral": "Paisible", - "xerneasActive": "Déchaîné", + "xerneasActive": "Déchainé", "zygarde50": "Forme 50%", "zygarde10": "Forme 10%", "zygarde50Pc": "Rassemblement Forme 50%", "zygarde10Pc": "Rassemblement Forme 10%", + "hoopa": "Enchainé", + "hoopaUnbound": "Déchainé", "zygardeComplete": "Parfait", "oricorioBaile": "Flamenco", "oricorioPompom": "Pom-Pom", "oricorioPau": "Hula", "oricorioSensu": "Buyō", + "rockruff": "Normal", "rockruffOwnTempo": "Tempo Perso", + "rockruffMidday": "Diurne", + "rockruffMidnight": "Nocturne", + "rockruffDusk": "Crépusculaire", + "wishiwashi": "Solitaire", + "wishiwashiSchool": "Banc", + "typeNullNormal": "Type: Normal", + "typeNullFighting": "Type: Combat", + "typeNullFlying": "Type: Vol", + "typeNullPoison": "Type: Poison", + "typeNullGround": "Type: Sol", + "typeNullRock": "Type: Roche", + "typeNullBug": "Type: Insecte", + "typeNullGhost": "Type: Spectre", + "typeNullSteel": "Type: Acier", + "typeNullFire": "Type: Feu", + "typeNullWater": "Type: Eau", + "typeNullGrass": "Type: Plante", + "typeNullElectric": "Type: Électrik", + "typeNullPsychic": "Type: Psy", + "typeNullIce": "Type: Glace", + "typeNullDragon": "Type: Dragon", + "typeNullDark": "Type: Ténèbres", + "typeNullFairy": "Type: Fée", "miniorRedMeteor": "Météore Rouge", "miniorOrangeMeteor": "Météore Orange", "miniorYellowMeteor": "Météore Jaune", @@ -131,25 +195,66 @@ "miniorViolet": "Violet", "mimikyuDisguised": "Déguisé", "mimikyuBusted": "Démasqué", + "necrozma": "Normal", + "necrozmaDuskMane": "Crinière du Couchant", + "necrozmaDawnWings": "Ailes de l’Aurore", + "necrozmaUltra": "Ultra", + "magearna": "Normal", "magearnaOriginal": "Couleur du Passé", + "marshadow": "Normal", "marshadowZenith": "Zénith", + "cramorant": "Normal", + "cramorantGulping": "Gobe-Tout", + "cramorantGorging": "Gobe-Chu", + "toxelAmped": "Aigu", + "toxelLowkey": "Grave", "sinisteaPhony": "Contrefaçon", "sinisteaAntique": "Authentique", + "milceryVanillaCream": "Lait Vanille", + "milceryRubyCream": "Lait Ruby", + "milceryMatchaCream": "Lait Matcha", + "milceryMintCream": "Lait Menthe", + "milceryLemonCream": "Lait Citron", + "milcerySaltedCream": "Lait Salé", + "milceryRubySwirl": "Mélange Ruby", + "milceryCaramelSwirl": "Mélange Caramel", + "milceryRainbowSwirl": "Mélange Tricolore", + "eiscue": "Tête de Gel", "eiscueNoIce": "Tête Dégel", "indeedeeMale": "Mâle", "indeedeeFemale": "Femelle", "morpekoFullBelly": "Rassasié", + "morpekoHangry": "Affamé", "zacianHeroOfManyBattles": "Héros Aguerri", + "zacianCrowned": "Épée Suprême", "zamazentaHeroOfManyBattles": "Héros Aguerri", + "zamazentaCrowned": "Bouclier Suprême", + "kubfuSingleStrike": "Poing Final", + "kubfuRapidStrike": "Mille Poings", + "zarude": "Normal", "zarudeDada": "Papa", + "calyrex": "Normal", + "calyrexIce": "Cavalier du Froid", + "calyrexShadow": "Cavalier d’Effroi", + "basculinMale": "Mâle", + "basculinFemale": "Femelle", "enamorusIncarnate": "Avatar", + "enamorusTherian": "Totémique", + "lechonkMale": "Mâle", + "lechonkFemale": "Femelle", + "tandemausFour": "Famille de Quatre", + "tandemausThree": "Famille de Trois", "squawkabillyGreenPlumage": "Plumage Vert", "squawkabillyBluePlumage": "Plumage Bleu", "squawkabillyYellowPlumage": "Plumage Jaune", "squawkabillyWhitePlumage": "Plumage Blanc", + "finizenZero": "Ordinaire", + "finizenHero": "Super", "tatsugiriCurly": "Courbé", "tatsugiriDroopy": "Affalé", "tatsugiriStretchy": "Raide", + "dunsparceTwo": "Double", + "dunsparceThree": "Triple", "gimmighoulChest": "Coffre", "gimmighoulRoaming": "Marche", "koraidonApexBuild": "Final", @@ -164,7 +269,22 @@ "miraidonGlideMode": "Aérien", "poltchageistCounterfeit": "Imitation", "poltchageistArtisan": "Onéreux", + "poltchageistUnremarkable": "Médiocre", + "poltchageistMasterpiece": "Exceptionnelle", + "ogerponTealMaskTera": "Masque Turquoise", + "ogerponTealMask": "Masque Turquoise Téracristal", + "ogerponWellspringMask": "Masque du Puits", + "ogerponWellspringMaskTera": "Masque du Puits Téracristal", + "ogerponHearthflameMask": "Masque du Fourneau", + "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", + "galarDarumaka": "Mode Normal", + "galarDarumakaZen": "Mode Transe", "paldeaTaurosCombat": "Combatif", "paldeaTaurosBlaze": "Flamboyant", "paldeaTaurosAqua": "Aquatique" -} \ No newline at end of file +} diff --git a/src/locales/fr/trainer-classes.json b/src/locales/fr/trainer-classes.json index b7027cf544f..a68f766dc8b 100644 --- a/src/locales/fr/trainer-classes.json +++ b/src/locales/fr/trainer-classes.json @@ -126,5 +126,8 @@ "skull_grunts": "Sbires de la Team Skull", "macro_grunt": "Employé de Macro Cosmos", "macro_grunt_female": "Employée de Macro Cosmos", - "macro_grunts": "Employés de Macro Cosmos" + "macro_grunts": "Employés de Macro Cosmos", + "star_grunt": "Sbire de la Team Star", + "star_grunt_female": "Sbire de la Team Star", + "star_grunts": "Sbires de la Team Star" } diff --git a/src/locales/fr/trainer-names.json b/src/locales/fr/trainer-names.json index beec7e0c313..ff9e0d47721 100644 --- a/src/locales/fr/trainer-names.json +++ b/src/locales/fr/trainer-names.json @@ -141,6 +141,11 @@ "faba": "Saubohne", "plumeria": "Apocyne", "oleana": "Liv", + "giacomo": "Brome", + "mela": "Meloco", + "atticus": "Erio", + "ortega": "Ortiga", + "eri": "Nèflie", "maxie": "Max", "archie": "Arthur", @@ -150,6 +155,7 @@ "lusamine": "Elsa-Mina", "guzma": "Guzma", "rose": "Shehroz", + "cassiopeia": "Pania", "blue_red_double": "Blue & Red", "red_blue_double": "Red & Blue", @@ -160,5 +166,18 @@ "alder_iris_double": "Goyah & Iris", "iris_alder_double": "Iris & Goyah", "marnie_piers_double": "Rosemary & Peterson", - "piers_marnie_double": "Peterson & Rosemary" + "piers_marnie_double": "Peterson & Rosemary", + + "buck": "Cornil", + "cheryl": "Sara", + "marley": "Viviane", + "mira": "Maïté", + "riley": "Armand", + "victor": "Atrée", + "victoria": "Électre", + "vivi": "Andromaque", + "vicky": "Clytemnestre", + "vito": "Adalbert", + "bug_type_superfan": "Fan d’entomologie", + "expert_pokemon_breeder": "Éleveuse Experte" } diff --git a/src/locales/fr/trainer-titles.json b/src/locales/fr/trainer-titles.json index 6d966bbd9ec..afcb755d034 100644 --- a/src/locales/fr/trainer-titles.json +++ b/src/locales/fr/trainer-titles.json @@ -19,6 +19,7 @@ "aether_boss": "Présidente d’Æther", "skull_boss": "Boss de la Team Skull", "macro_boss": "Président de Macro Cosmos", + "star_boss": "Leader de la Team Star", "rocket_admin": "Admin Team Rocket", "rocket_admin_female": "Admin Team Rocket", @@ -34,5 +35,8 @@ "flare_admin_female": "Manageuse de la Team Flare", "aether_admin": "Directeur d’Æther", "skull_admin": "Admin Team Skull", - "macro_admin": "Macro Cosmos" + "macro_admin": "Macro Cosmos", + "star_admin": "Boss d’équipe de la Team Star", + + "the_winstrates": "Famille Stratège" } diff --git a/src/locales/it/ability.json b/src/locales/it/ability.json index 18eb133d824..deec995cde7 100644 --- a/src/locales/it/ability.json +++ b/src/locales/it/ability.json @@ -1237,6 +1237,6 @@ }, "poisonPuppeteer": { "name": "\tMalia Tossica", - "description": "I Pokémon avvelenati dalle mosse di Pecharunt entreranno anche in stato di confusione." + "description": "I Pokémon avvelenati dalle mosse di questo Pokémon entreranno anche in stato di confusione." } } \ No newline at end of file diff --git a/src/locales/it/achv.json b/src/locales/it/achv.json index d1607f6c548..c4a7d3dab7b 100644 --- a/src/locales/it/achv.json +++ b/src/locales/it/achv.json @@ -260,5 +260,13 @@ "FRESH_START": { "name": "Buona la prima!", "description": "Completa la modalità sfida 'Un nuovo inizio'." + }, + "BREEDERS_IN_SPACE": { + "name": "Breeders in Space!", + "description": "Beat the Expert Pokémon Breeder in the Space Biome." + }, + "BREEDERS_IN_SPACE": { + "name": "Breeders in Space!", + "description": "Beat the Expert Pokémon Breeder in the Space Biome." } } diff --git a/src/locales/it/battle.json b/src/locales/it/battle.json index 9b187756025..e11399dff6c 100644 --- a/src/locales/it/battle.json +++ b/src/locales/it/battle.json @@ -14,6 +14,10 @@ "moneyWon": "Hai vinto {{moneyAmount}}₽", "moneyPickedUp": "Hai raccolto ₽{{moneyAmount}}!", "pokemonCaught": "Preso! {{pokemonName}} è stato catturato!", + "pokemonObtained": "Hai ricevuto {{pokemonName}}!", + "pokemonBrokeFree": "Oh no!\nIl Pokémon è uscito dalla Poké Ball!", + "pokemonFled": "{pokemonName}} selvatico è fuggito!", + "playerFled": "Sei fuggito/a da {{pokemonName}}!", "addedAsAStarter": "{{pokemonName}} è stato\naggiunto agli starter!", "partyFull": "La tua squadra è al completo.\nVuoi liberare un Pokémon per far spazio a {{pokemonName}}?", "pokemon": "Pokémon", @@ -49,6 +53,7 @@ "noPokeballTrainer": "Non puoi catturare\nPokémon di altri allenatori!", "noPokeballMulti": "Puoi lanciare una Poké Ball\nsolo quando rimane un singolo Pokémon!", "noPokeballStrong": "Il Pokémon avversario è troppo forte per essere catturato!\nDevi prima indebolirlo.", + "noPokeballMysteryEncounter": "Non ti è possibile\ncatturare questo Pokémon!", "noEscapeForce": "Una forza misteriosa\nimpedisce la fuga.", "noEscapeTrainer": "Non puoi sottrarti\nalla lotta con un'allenatore!", "noEscapePokemon": "{{moveName}} di {{pokemonName}}\npreviene la {{escapeVerb}}!", @@ -95,5 +100,6 @@ "unlockedSomething": "{{unlockedThing}}\nè stato/a sbloccato/a.", "congratulations": "Congratulazioni!", "beatModeFirstTime": "{{speciesName}} ha completato la modalità {{gameMode}} per la prima volta!\nHai ricevuto {{newModifier}}!", - "ppReduced": "I PP della mossa {{moveName}} di\n{{targetName}} sono stati ridotti di {{reduction}}!" + "ppReduced": "I PP della mossa {{moveName}} di\n{{targetName}} sono stati ridotti di {{reduction}}!", + "mysteryEncounterAppeared": "Che succede?" } diff --git a/src/locales/it/bgm-name.json b/src/locales/it/bgm-name.json index 9e26dfeeb6e..5d943512d4b 100644 --- a/src/locales/it/bgm-name.json +++ b/src/locales/it/bgm-name.json @@ -1 +1,7 @@ -{} \ No newline at end of file +{ + "mystery_encounter_weird_dream": "PMD EoS Temporal Spire", + "mystery_encounter_fun_and_games": "PMD EoS Guildmaster Wigglytuff", + "mystery_encounter_gen_5_gts": "BW GTS", + "mystery_encounter_gen_6_gts": "XY GTS", + "mystery_encounter_delibirdy": "Firel - DeliDelivery!" +} diff --git a/src/locales/it/config.ts b/src/locales/it/config.ts index a8cd1e4e0bd..129c0f67466 100644 --- a/src/locales/it/config.ts +++ b/src/locales/it/config.ts @@ -53,7 +53,49 @@ import terrain from "./terrain.json"; import modifierSelectUiHandler from "./modifier-select-ui-handler.json"; import moveTriggers from "./move-trigger.json"; import runHistory from "./run-history.json"; +import mysteryEncounterMessages from "./mystery-encounter-messages.json"; +import lostAtSea from "./mystery-encounters/lost-at-sea-dialogue.json"; +import mysteriousChest from "./mystery-encounters/mysterious-chest-dialogue.json"; +import mysteriousChallengers from "./mystery-encounters/mysterious-challengers-dialogue.json"; +import darkDeal from "./mystery-encounters/dark-deal-dialogue.json"; +import departmentStoreSale from "./mystery-encounters/department-store-sale-dialogue.json"; +import fieldTrip from "./mystery-encounters/field-trip-dialogue.json"; +import fieryFallout from "./mystery-encounters/fiery-fallout-dialogue.json"; +import fightOrFlight from "./mystery-encounters/fight-or-flight-dialogue.json"; +import safariZone from "./mystery-encounters/safari-zone-dialogue.json"; +import shadyVitaminDealer from "./mystery-encounters/shady-vitamin-dealer-dialogue.json"; +import slumberingSnorlax from "./mystery-encounters/slumbering-snorlax-dialogue.json"; +import trainingSession from "./mystery-encounters/training-session-dialogue.json"; +import theStrongStuff from "./mystery-encounters/the-strong-stuff-dialogue.json"; +import pokemonSalesman from "./mystery-encounters/the-pokemon-salesman-dialogue.json"; +import offerYouCantRefuse from "./mystery-encounters/an-offer-you-cant-refuse-dialogue.json"; +import delibirdy from "./mystery-encounters/delibirdy-dialogue.json"; +import absoluteAvarice from "./mystery-encounters/absolute-avarice-dialogue.json"; +import aTrainersTest from "./mystery-encounters/a-trainers-test-dialogue.json"; +import trashToTreasure from "./mystery-encounters/trash-to-treasure-dialogue.json"; +import berriesAbound from "./mystery-encounters/berries-abound-dialogue.json"; +import clowningAround from "./mystery-encounters/clowning-around-dialogue.json"; +import partTimer from "./mystery-encounters/part-timer-dialogue.json"; +import dancingLessons from "./mystery-encounters/dancing-lessons-dialogue.json"; +import weirdDream from "./mystery-encounters/weird-dream-dialogue.json"; +import theWinstrateChallenge from "./mystery-encounters/the-winstrate-challenge-dialogue.json"; +import teleportingHijinks from "./mystery-encounters/teleporting-hijinks-dialogue.json"; +import bugTypeSuperfan from "./mystery-encounters/bug-type-superfan-dialogue.json"; +import funAndGames from "./mystery-encounters/fun-and-games-dialogue.json"; +import uncommonBreed from "./mystery-encounters/uncommon-breed-dialogue.json"; +import globalTradeSystem from "./mystery-encounters/global-trade-system-dialogue.json"; +import expertPokemonBreeder from "./mystery-encounters/the-expert-pokemon-breeder-dialogue.json"; +/** + * Dialogue/Text token injection patterns that can be used: + * - `$` will be treated as a new line for Message and Dialogue strings. + * - `@d{}` will add a time delay to text animation for Message and Dialogue strings. + * - `@s{}` will play a specified sound effect for Message and Dialogue strings. + * - `@f{}` will fade the screen to black for the given duration, then fade back in for Message and Dialogue strings. + * - `{{}}` (MYSTERY ENCOUNTERS ONLY) will auto-inject the matching dialogue token value that is stored in {@link IMysteryEncounter.dialogueTokens}. + * - (see [i18next interpolations](https://www.i18next.com/translation-function/interpolation)) for more details. + * - `@[]{}` (STATIC TEXT ONLY, NOT USEABLE WITH {@link UI.showText()} OR {@link UI.showDialogue()}) will auto-color the given text to a specified {@link TextStyle} (e.g. `TextStyle.SUMMARY_GREEN`). + */ export const itConfig = { ability, abilityTriggers, @@ -110,4 +152,40 @@ export const itConfig = { modifierSelectUiHandler, moveTriggers, runHistory, + mysteryEncounter: { + // DO NOT REMOVE + "unit_test_dialogue": "{{test}}{{test}} {{test{{test}}}} {{test1}} {{test\}} {{test\\}} {{test\\\}} {test}}", + mysteriousChallengers, + mysteriousChest, + darkDeal, + fightOrFlight, + slumberingSnorlax, + trainingSession, + departmentStoreSale, + shadyVitaminDealer, + fieldTrip, + safariZone, + lostAtSea, + fieryFallout, + theStrongStuff, + pokemonSalesman, + offerYouCantRefuse, + delibirdy, + absoluteAvarice, + aTrainersTest, + trashToTreasure, + berriesAbound, + clowningAround, + partTimer, + dancingLessons, + weirdDream, + theWinstrateChallenge, + teleportingHijinks, + bugTypeSuperfan, + funAndGames, + uncommonBreed, + globalTradeSystem, + expertPokemonBreeder + }, + mysteryEncounterMessages }; diff --git a/src/locales/it/dialogue.json b/src/locales/it/dialogue.json index 9e26dfeeb6e..dd82247493b 100644 --- a/src/locales/it/dialogue.json +++ b/src/locales/it/dialogue.json @@ -1 +1,112 @@ -{} \ No newline at end of file +{ + "stat_trainer_buck": { + "encounter": { + "1": "...I'm telling you right now. I'm seriously tough. Act surprised!", + "2": "I can feel my Pokémon shivering inside their Pokéballs!" + }, + "victory": { + "1": "Heeheehee!\nSo hot, you!", + "2": "Heeheehee!\nSo hot, you!" + }, + "defeat": { + "1": "Whoa! You're all out of gas, I guess.", + "2": "Whoa! You're all out of gas, I guess." + } + }, + "stat_trainer_cheryl": { + "encounter": { + "1": "My Pokémon have been itching for a battle.", + "2": "I should warn you, my Pokémon can be quite rambunctious." + }, + "victory": { + "1": "Striking the right balance of offense and defense... It's not easy to do.", + "2": "Striking the right balance of offense and defense... It's not easy to do." + }, + "defeat": { + "1": "Do your Pokémon need any healing?", + "2": "Do your Pokémon need any healing?" + } + }, + "stat_trainer_marley": { + "encounter": { + "1": "... OK.\nI'll do my best.", + "2": "... OK.\nI... won't lose...!" + }, + "victory": { + "1": "... Awww.", + "2": "... Awww." + }, + "defeat": { + "1": "... Goodbye.", + "2": "... Goodbye." + } + }, + "stat_trainer_mira": { + "encounter": { + "1": "You will be shocked by Mira!", + "2": "Mira will show you that Mira doesn't get lost anymore!" + }, + "victory": { + "1": "Mira wonders if she can get very far in this land.", + "2": "Mira wonders if she can get very far in this land." + }, + "defeat": { + "1": "Mira knew she would win!", + "2": "Mira knew she would win!" + } + }, + "stat_trainer_riley": { + "encounter": { + "1": "Battling is our way of greeting!", + "2": "We're pulling out all the stops to put your Pokémon down." + }, + "victory": { + "1": "At times we battle, and sometimes we team up...$It's great how Trainers can interact.", + "2": "At times we battle, and sometimes we team up...$It's great how Trainers can interact." + }, + "defeat": { + "1": "You put up quite the display.\nBetter luck next time.", + "2": "You put up quite the display.\nBetter luck next time." + } + }, + "winstrates_victor": { + "encounter": { + "1": "That's the spirit! I like you!" + }, + "victory": { + "1": "A-ha! You're stronger than I thought!" + } + }, + "winstrates_victoria": { + "encounter": { + "1": "My goodness! Aren't you young?$You must be quite the trainer to beat my husband, though.$Now I suppose it's my turn to battle!" + }, + "victory": { + "1": "Uwah! Just how strong are you?!" + } + }, + "winstrates_vivi": { + "encounter": { + "1": "You're stronger than Mom? Wow!$But I'm strong, too!\nReally! Honestly!" + }, + "victory": { + "1": "Huh? Did I really lose?\nSnivel... Grandmaaa!" + } + }, + "winstrates_vicky": { + "encounter": { + "1": "How dare you make my precious\ngranddaughter cry!$I see I need to teach you a lesson.\nPrepare to feel the sting of defeat!" + }, + "victory": { + "1": "Whoa! So strong!\nMy granddaughter wasn't lying." + } + }, + "winstrates_vito": { + "encounter": { + "1": "I trained together with my whole family,\nevery one of us!$I'm not losing to anyone!" + }, + "victory": { + "1": "I was better than everyone in my family.\nI've never lost before..." + } + } +} diff --git a/src/locales/it/egg.json b/src/locales/it/egg.json index 9f3baddf975..49f00ca5939 100644 --- a/src/locales/it/egg.json +++ b/src/locales/it/egg.json @@ -11,6 +11,7 @@ "gachaTypeLegendary": "Tasso dei leggendari aumentato", "gachaTypeMove": "Tasso delle mosse rare da uova aumentato", "gachaTypeShiny": "Tasso degli shiny aumentato", + "eventType": "Evento Misterioso", "selectMachine": "Seleziona un macchinario.", "notEnoughVouchers": "Non hai abbastanza biglietti!", "tooManyEggs": "Hai troppe uova!", @@ -23,4 +24,4 @@ "moveUPGacha": "Mossa +", "shinyUPGacha": "Shiny +", "legendaryUPGacha": "+" -} \ No newline at end of file +} diff --git a/src/locales/it/modifier-select-ui-handler.json b/src/locales/it/modifier-select-ui-handler.json index f07d8dd2680..62770999817 100644 --- a/src/locales/it/modifier-select-ui-handler.json +++ b/src/locales/it/modifier-select-ui-handler.json @@ -8,5 +8,7 @@ "lockRaritiesDesc": "Blocca le rarità al reroll (influisce sui costi).", "checkTeamDesc": "Controlla la squadra Pokémon.", "rerollCost": "{{formattedMoney}}₽", - "itemCost": "{{formattedMoney}}₽" -} \ No newline at end of file + "itemCost": "{{formattedMoney}}₽", + "continueNextWaveButton": "Continua", + "continueNextWaveDescription": "Continua alla onda successiva" +} diff --git a/src/locales/it/modifier-type.json b/src/locales/it/modifier-type.json index f06755bdfa0..9edf6e5a53a 100644 --- a/src/locales/it/modifier-type.json +++ b/src/locales/it/modifier-type.json @@ -68,6 +68,20 @@ "BaseStatBoosterModifierType": { "description": "Aumenta l'/la {{stat}} di base del possessore del 10%." }, + "PokemonBaseStatTotalModifierType": { + "name": "Succo Shuckle", + "description": "{{increaseDecrease}} tutte le statistiche del possessore di {{statValue}}. Shuckle ti ha {{blessCurse}}.", + "extra": { + "increase": "Aumenta", + "decrease": "Diminuisce", + "blessed": "benedetto/a", + "cursed": "maledetto/a" + } + }, + "PokemonBaseStatFlatModifierType": { + "name": "Dolce Gateau", + "description": "Aumenta le statistiche {{stats}} del possessore di {{statValue}}. Trovato dopo uno strano sogno." + }, "AllPokemonFullHpRestoreModifierType": { "description": "Restituisce il 100% dei PS a tutti i Pokémon." }, @@ -401,7 +415,13 @@ "ENEMY_FUSED_CHANCE": { "name": "Gettone della fusione", "description": "Aggiunge l'1% di possibilità che un Pokémon selvatico sia una fusione." - } + }, + + "MYSTERY_ENCOUNTER_SHUCKLE_JUICE": { "name": "Succo Shuckle" }, + "MYSTERY_ENCOUNTER_BLACK_SLUDGE": { "name": "Fangopece", "description": "L'odore è talmente sgradevole che i prezzi dei negozi aumentano drasticamente." }, + "MYSTERY_ENCOUNTER_MACHO_BRACE": { "name": "Crescicappa", "description": "Sconfiggere un Pokémon aumenta di 1 il punteggio Crescicappa. Maggiore il punteggio, maggiore l'aumento alle statistiche, con un ulteriore bonus al massimo." }, + "MYSTERY_ENCOUNTER_OLD_GATEAU": { "name": "Dolce Gateau", "description": "Aumenta le statistiche {{stats}} del possessore di {{statValue}}." }, + "MYSTERY_ENCOUNTER_GOLDEN_BUG_NET": { "name": "Retino Dorato", "description": "Infonde fortuna nel possessore affinché trovi più Pokémon coleottero. Ha uno strano peso." } }, "SpeciesBoosterItem": { "LIGHT_BALL": { diff --git a/src/locales/it/move-trigger.json b/src/locales/it/move-trigger.json index c8fb390e53f..fba671a6813 100644 --- a/src/locales/it/move-trigger.json +++ b/src/locales/it/move-trigger.json @@ -66,6 +66,7 @@ "revivalBlessing": "{{pokemonName}} torna in forze!", "swapArenaTags": "{{pokemonName}} ha invertito gli effetti attivi\nnelle due metà del campo!", "exposedMove": "{{pokemonName}} ha identificato\n{{targetPokemonName}}!", + "chillyReception": "{{pokemonName}} sta per fare una battuta!", "safeguard": "Salvaguardia protegge {{targetName}}!", "afterYou": "{{pokemonName}} approfitta della cortesia!" } diff --git a/src/locales/it/move.json b/src/locales/it/move.json index f5bb1954278..ba72e86f812 100644 --- a/src/locales/it/move.json +++ b/src/locales/it/move.json @@ -3129,7 +3129,7 @@ }, "auraWheel": { "name": "Ruota d'Aura", - "effect": "Il Pokémon emette l'energia accumulata nelle guance per attaccare e aumentare la Velocità. Il tipo della mossa cambia in base alla forma assunta da Morpeko." + "effect": "Il Pokémon emette l'energia accumulata nelle guance per attaccare e aumentare la Velocità. Se usata da Morpeko, il tipo della mossa cambia in base alla forma assunta." }, "breakingSwipe": { "name": "Vastoimpatto", diff --git a/src/locales/it/mystery-encounter-messages.json b/src/locales/it/mystery-encounter-messages.json new file mode 100644 index 00000000000..4f8b528d18b --- /dev/null +++ b/src/locales/it/mystery-encounter-messages.json @@ -0,0 +1,7 @@ +{ + "paid_money": "Hai pagato {{amount, number}}₽.", + "receive_money": "Hai ricevuto {{amount, number}}₽!", + "affects_pokedex": "Influisce sul Pokédex", + "cancel_option": "Torna alla scelta dell'incontro.", + "view_party_button": "Info squadra" +} diff --git a/src/locales/it/mystery-encounters/a-trainers-test-dialogue.json b/src/locales/it/mystery-encounters/a-trainers-test-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/it/mystery-encounters/a-trainers-test-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/it/mystery-encounters/absolute-avarice-dialogue.json b/src/locales/it/mystery-encounters/absolute-avarice-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/it/mystery-encounters/absolute-avarice-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/it/mystery-encounters/an-offer-you-cant-refuse-dialogue.json b/src/locales/it/mystery-encounters/an-offer-you-cant-refuse-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/it/mystery-encounters/an-offer-you-cant-refuse-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/it/mystery-encounters/berries-abound-dialogue.json b/src/locales/it/mystery-encounters/berries-abound-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/it/mystery-encounters/berries-abound-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/it/mystery-encounters/bug-type-superfan-dialogue.json b/src/locales/it/mystery-encounters/bug-type-superfan-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/it/mystery-encounters/bug-type-superfan-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/it/mystery-encounters/clowning-around-dialogue.json b/src/locales/it/mystery-encounters/clowning-around-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/it/mystery-encounters/clowning-around-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/it/mystery-encounters/dancing-lessons-dialogue.json b/src/locales/it/mystery-encounters/dancing-lessons-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/it/mystery-encounters/dancing-lessons-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/it/mystery-encounters/dark-deal-dialogue.json b/src/locales/it/mystery-encounters/dark-deal-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/it/mystery-encounters/dark-deal-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/it/mystery-encounters/delibirdy-dialogue.json b/src/locales/it/mystery-encounters/delibirdy-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/it/mystery-encounters/delibirdy-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/it/mystery-encounters/department-store-sale-dialogue.json b/src/locales/it/mystery-encounters/department-store-sale-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/it/mystery-encounters/department-store-sale-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/it/mystery-encounters/field-trip-dialogue.json b/src/locales/it/mystery-encounters/field-trip-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/it/mystery-encounters/field-trip-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/it/mystery-encounters/fiery-fallout-dialogue.json b/src/locales/it/mystery-encounters/fiery-fallout-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/it/mystery-encounters/fiery-fallout-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/it/mystery-encounters/fight-or-flight-dialogue.json b/src/locales/it/mystery-encounters/fight-or-flight-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/it/mystery-encounters/fight-or-flight-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/it/mystery-encounters/fun-and-games-dialogue.json b/src/locales/it/mystery-encounters/fun-and-games-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/it/mystery-encounters/fun-and-games-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/it/mystery-encounters/global-trade-system-dialogue.json b/src/locales/it/mystery-encounters/global-trade-system-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/it/mystery-encounters/global-trade-system-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/it/mystery-encounters/lost-at-sea-dialogue.json b/src/locales/it/mystery-encounters/lost-at-sea-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/it/mystery-encounters/lost-at-sea-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/it/mystery-encounters/mysterious-challengers-dialogue.json b/src/locales/it/mystery-encounters/mysterious-challengers-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/it/mystery-encounters/mysterious-challengers-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/it/mystery-encounters/mysterious-chest-dialogue.json b/src/locales/it/mystery-encounters/mysterious-chest-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/it/mystery-encounters/mysterious-chest-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/it/mystery-encounters/part-timer-dialogue.json b/src/locales/it/mystery-encounters/part-timer-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/it/mystery-encounters/part-timer-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/it/mystery-encounters/safari-zone-dialogue.json b/src/locales/it/mystery-encounters/safari-zone-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/it/mystery-encounters/safari-zone-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/it/mystery-encounters/shady-vitamin-dealer-dialogue.json b/src/locales/it/mystery-encounters/shady-vitamin-dealer-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/it/mystery-encounters/shady-vitamin-dealer-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/it/mystery-encounters/slumbering-snorlax-dialogue.json b/src/locales/it/mystery-encounters/slumbering-snorlax-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/it/mystery-encounters/slumbering-snorlax-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/it/mystery-encounters/teleporting-hijinks-dialogue.json b/src/locales/it/mystery-encounters/teleporting-hijinks-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/it/mystery-encounters/teleporting-hijinks-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/it/mystery-encounters/the-expert-pokemon-breeder-dialogue.json b/src/locales/it/mystery-encounters/the-expert-pokemon-breeder-dialogue.json new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/src/locales/it/mystery-encounters/the-expert-pokemon-breeder-dialogue.json @@ -0,0 +1 @@ +{} diff --git a/src/locales/it/mystery-encounters/the-pokemon-salesman-dialogue.json b/src/locales/it/mystery-encounters/the-pokemon-salesman-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/it/mystery-encounters/the-pokemon-salesman-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/it/mystery-encounters/the-strong-stuff-dialogue.json b/src/locales/it/mystery-encounters/the-strong-stuff-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/it/mystery-encounters/the-strong-stuff-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/it/mystery-encounters/the-winstrate-challenge-dialogue.json b/src/locales/it/mystery-encounters/the-winstrate-challenge-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/it/mystery-encounters/the-winstrate-challenge-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/it/mystery-encounters/training-session-dialogue.json b/src/locales/it/mystery-encounters/training-session-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/it/mystery-encounters/training-session-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/it/mystery-encounters/trash-to-treasure-dialogue.json b/src/locales/it/mystery-encounters/trash-to-treasure-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/it/mystery-encounters/trash-to-treasure-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/it/mystery-encounters/uncommon-breed-dialogue.json b/src/locales/it/mystery-encounters/uncommon-breed-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/it/mystery-encounters/uncommon-breed-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/it/mystery-encounters/weird-dream-dialogue.json b/src/locales/it/mystery-encounters/weird-dream-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/it/mystery-encounters/weird-dream-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/it/party-ui-handler.json b/src/locales/it/party-ui-handler.json index 95466779727..7bcb5ccf7a0 100644 --- a/src/locales/it/party-ui-handler.json +++ b/src/locales/it/party-ui-handler.json @@ -15,6 +15,7 @@ "UNPAUSE_EVOLUTION": "Consenti evoluzione", "REVIVE": "Revitalizza", "RENAME": "Rinomina", + "SELECT": "Seleziona", "choosePokemon": "Scegli un Pokémon.", "doWhatWithThisPokemon": "Hai selezionato questo Pokémon.", "noEnergy": "{{pokemonName}} non ha più energie\nper lottare!", diff --git a/src/locales/it/pokemon-form.json b/src/locales/it/pokemon-form.json index 505173e4c8a..e1ecb708b89 100644 --- a/src/locales/it/pokemon-form.json +++ b/src/locales/it/pokemon-form.json @@ -1,4 +1,5 @@ { + "pikachu": "Normale", "pikachuCosplay": "Cosplay", "pikachuCoolCosplay": "Cosplay classe", "pikachuBeautyCosplay": "Cosplay bellezza", @@ -6,7 +7,9 @@ "pikachuSmartCosplay": "Cosplay acume", "pikachuToughCosplay": "Cosplay grinta", "pikachuPartner": "Compagno", + "eevee": "Normale", "eeveePartner": "Compagno", + "pichu": "Normale", "pichuSpiky": "Spunzorek", "unownA": "A", "unownB": "B", @@ -36,36 +39,65 @@ "unownZ": "Z", "unownExclamation": "!", "unownQuestion": "?", + "castform": "Normale", "castformSunny": "Sole", "castformRainy": "Pioggia", "castformSnowy": "Nuvola di neve", "deoxysNormal": "Normale", + "deoxysAttack": "Attacco", + "deoxysDefense": "Difesa", + "deoxysSpeed": "Velocità", "burmyPlant": "Pianta", "burmySandy": "Sabbia", "burmyTrash": "Scarti", + "cherubiOvercast": "Nuvola", + "cherubiSunshine": "Splendore", "shellosEast": "Est", "shellosWest": "Ovest", + "rotom": "Normale", "rotomHeat": "Calore", "rotomWash": "Lavaggio", "rotomFrost": "Gelo", "rotomFan": "Vortice", "rotomMow": "Taglio", + "dialga": "Normale", + "dialgaOrigin": "Originale", + "palkia": "Normale", + "palkiaOrigin": "Originale", "giratinaAltered": "Alterata", + "giratinaOrigin": "Originale", "shayminLand": "Terra", + "shayminSky": "Cielo", "basculinRedStriped": "Linearossa", "basculinBlueStriped": "Lineablu", "basculinWhiteStriped": "Lineabianca", + "darumaka": "Stato Normale", + "darumakaZen": "Stato Zen", "deerlingSpring": "Primavera", "deerlingSummer": "Estate", "deerlingAutumn": "Autunno", "deerlingWinter": "Inverno", "tornadusIncarnate": "Incarnazione", + "tornadusTherian": "Totem", "thundurusIncarnate": "Incarnazione", + "thundurusTherian": "Totem", "landorusIncarnate": "Incarnazione", + "landorusTherian": "Totem", + "kyurem": "Normale", + "kyuremBlack": "Nero", + "kyuremWhite": "Bianco", "keldeoOrdinary": "Normale", + "keldeoResolute": "Risoluta", "meloettaAria": "Canto", "meloettaPirouette": "Danza", + "genesect": "Normale", + "genesectShock": "Voltmodulo", + "genesectBurn": "Piromodulo", + "genesectChill": "Gelomodulo", + "genesectDouse": "Idromodulo", + "froakie": "Normale", "froakieBattleBond": "Morfosintonia", + "froakieAsh": "Ash", "scatterbugMeadow": "Giardinfiore", "scatterbugIcySnow": "Nevi perenni", "scatterbugPolar": "Nordico", @@ -91,6 +123,7 @@ "flabebeOrange": "Arancione", "flabebeBlue": "Blu", "flabebeWhite": "Bianco", + "furfrou": "Selvatica", "furfrouHeart": "Cuore", "furfrouStar": "Stella", "furfrouDiamond": "Diamante", @@ -100,21 +133,52 @@ "furfrouLaReine": "Regina", "furfrouKabuki": "Kabuki", "furfrouPharaoh": "Faraone", + "espurrMale": "Maschio", + "espurrFemale": "Femmina", + "honedgeShiled": "Scudo", + "honedgeBlade": "Spada", + "pumpkaboo": "Normale", "pumpkabooSmall": "Mini", "pumpkabooLarge": "Grande", "pumpkabooSuper": "Maxi", "xerneasNeutral": "Relax", "xerneasActive": "Attivo", - "zygarde50": "Forma 50%", - "zygarde10": "Forma 10%", - "zygarde50Pc": "Forma 50% Sciamefusione", - "zygarde10Pc": "Forma 10% Sciamefusione", - "zygardeComplete": "Forma perfetta", + "zygarde50": "50%", + "zygarde10": "10%", + "zygarde50Pc": "50% Sciamefusione", + "zygarde10Pc": "10% Sciamefusione", + "zygardeComplete": "perfetta", + "hoopa": "Vincolato", + "hoopaUnbound": "Libero", "oricorioBaile": "Flamenco", "oricorioPompom": "Cheerdance", "oricorioPau": "Hula", "oricorioSensu": "Buyō", + "rockruff": "Normale", "rockruffOwnTempo": "Mentelocale", + "rockruffMidday": "Giorno", + "rockruffMidnight": "Notte", + "rockruffDusk": "Crepuscolo", + "wishiwashi": "Individuale", + "wishiwashiSchool": "Banco", + "typeNullNormal": "Tipo Normale", + "typeNullFighting": "Tipo Lotta", + "typeNullFlying": "Tipo Volante", + "typeNullPoison": "Tipo Veleno", + "typeNullGround": "Tipo Terra", + "typeNullRock": "Tipo Roccia", + "typeNullBug": "Tipo Coleottero", + "typeNullGhost": "Tipo Spettro", + "typeNullSteel": "Tipo Acciaio", + "typeNullFire": "Tipo Fuoco", + "typeNullWater": "Tipo Acqua", + "typeNullGrass": "Tipo Erba", + "typeNullElectric": "Tipo Elettro", + "typeNullPsychic": "Tipo Psico", + "typeNullIce": "Tipo Ghiaccio", + "typeNullDragon": "Tipo Drago", + "typeNullDark": "Tipo Buio", + "typeNullFairy": "Tipo Folletto", "miniorRedMeteor": "Nucleo Rosso", "miniorOrangeMeteor": "Nucleo Arancione", "miniorYellowMeteor": "Nucleo Giallo", @@ -131,25 +195,66 @@ "miniorViolet": "Violetto", "mimikyuDisguised": "Mascherata", "mimikyuBusted": "Smascherata", + "necrozma": "Normale", + "necrozmaDuskMane": "Criniera del Vespro", + "necrozmaDawnWings": "Ali dell'Aurora", + "necrozmaUltra": "Ultra", + "magearna": "Normale", "magearnaOriginal": "Colore Antico", + "marshadow": "Normale", "marshadowZenith": "Zenith", + "cramorant": "Normale", + "cramorantGulping": "Inghiottitutto", + "cramorantGorging": "Inghiottintero", + "toxelAmped": "Melodia", + "toxelLowkey": "Basso", "sinisteaPhony": "Contraffatta", "sinisteaAntique": "Autentica", + "milceryVanillaCream": "Lattevaniglia", + "milceryRubyCream": "Latterosa", + "milceryMatchaCream": "Lattematcha", + "milceryMintCream": "Lattementa", + "milceryLemonCream": "Lattelimone", + "milcerySaltedCream": "Lattesale", + "milceryRubySwirl": "Rosamix", + "milceryCaramelSwirl": "Caramelmix", + "milceryRainbowSwirl": "Triplomix", + "eiscue": "Gelofaccia", "eiscueNoIce": "Liquefaccia", "indeedeeMale": "Maschio", "indeedeeFemale": "Femmina", "morpekoFullBelly": "Panciapiena", + "morpekoHangry": "Panciavuota", "zacianHeroOfManyBattles": "Eroe di Mille Lotte", + "zacianCrowned": "Re delle Spade", "zamazentaHeroOfManyBattles": "Eroe di Mille Lotte", + "zamazentaCrowned": "Re degli Scudi", + "kubfuSingleStrike": "Singolcolpo", + "kubfuRapidStrike": "Pluricolpo", + "zarude": "Normale", "zarudeDada": "Papà", + "calyrex": "Normale", + "calyrexIce": "Cavaliere Glaciale", + "calyrexShadow": "Cavaliere Spettrale", + "basculinMale": "Maschio", + "basculinFemale": "Femmina", "enamorusIncarnate": "Incarnazione", + "enamorusTherian": "Totem", + "lechonkMale": "Maschio", + "lechonkFemale": "Femmina", + "tandemausFour": "Quadrifamiglia", + "tandemausThree": "Trifamiglia", "squawkabillyGreenPlumage": "Piume Verdi", "squawkabillyBluePlumage": "Piume Azzurre", "squawkabillyYellowPlumage": "Piume Gialle", "squawkabillyWhitePlumage": "Piume Bianche", + "finizenZero": "Ingenua", + "finizenHero": "Possente", "tatsugiriCurly": "Arcuata", "tatsugiriDroopy": "Adagiata", "tatsugiriStretchy": "Tesa", + "dunsparceTwo": "Bimetamero", + "dunsparceThree": "Trimetamero", "gimmighoulChest": "Scrigno", "gimmighoulRoaming": "Ambulante", "koraidonApexBuild": "Foggia Integrale", @@ -164,7 +269,22 @@ "miraidonGlideMode": "Assetto Planata", "poltchageistCounterfeit": "Taroccata", "poltchageistArtisan": "Pregiata", + "poltchageistUnremarkable": "Dozzinale", + "poltchageistMasterpiece": "Eccezionale", + "ogerponTealMask": "Maschera Turchese", + "ogerponTealMaskTera": "Maschera Turchese Teracristal", + "ogerponWellspringMask": "Maschera Pozzo", + "ogerponWellspringMaskTera": "Maschera Pozzo Teracristal", + "ogerponHearthflameMask": "Maschera Focolare", + "ogerponHearthflameMaskTera": "Maschera Focolare Teracristal", + "ogerponCornerstoneMask": "Maschera Fondamenta", + "ogerponCornerstoneMaskTera": "Maschera Fondamenta Teracristal", + "terpagos": "Normale", + "terpagosTerastal": "Teracristal", + "terpagosStellar": "Astrale", + "galarDarumaka": "Normale", + "galarDarumakaZen": "Stato Zen", "paldeaTaurosCombat": "Combattiva", "paldeaTaurosBlaze": "Infuocata", "paldeaTaurosAqua": "Acquatica" -} \ No newline at end of file +} diff --git a/src/locales/it/trainer-classes.json b/src/locales/it/trainer-classes.json index 205a7c59d42..a613e34b39b 100644 --- a/src/locales/it/trainer-classes.json +++ b/src/locales/it/trainer-classes.json @@ -126,5 +126,8 @@ "skull_grunts": "Reclute Team Skull", "macro_grunt": "Impiegato Macro Cosmos", "macro_grunt_female": "Impiegata Macro Cosmos", - "macro_grunts": "Impiegati Macro Cosmos" + "macro_grunts": "Impiegati Macro Cosmos", + "star_grunt": "Recluta Team Star", + "star_grunt_female": "Recluta Team Star", + "star_grunts": "Reclute Team Star" } diff --git a/src/locales/it/trainer-names.json b/src/locales/it/trainer-names.json index 6d1373c0bb3..b29fd2e9f6f 100644 --- a/src/locales/it/trainer-names.json +++ b/src/locales/it/trainer-names.json @@ -139,6 +139,13 @@ "xerosic": "Xante", "bryony": "Bromelia", "faba": "Vicio", + "plumeria": "Plumeria", + "oleana": "Olive", + "giacomo": "Romelio", + "mela": "Pruna", + "atticus": "Henzo", + "ortega": "Ortiz", + "eri": "Nespera", "maxie": "Max", "archie": "Ivan", @@ -147,6 +154,9 @@ "lysandre": "Elisio", "lusamine": "Samina", "guzma": "Guzman", + "rose": "Rose", + "cassiopeia": "Penny", + "blue_red_double": "Blu & Rosso", "red_blue_double": "Rosso & Blu", "tate_liza_double": "Tell & Pat", @@ -156,5 +166,19 @@ "alder_iris_double": "Nardo & Iris", "iris_alder_double": "Iris & Nardo", "marnie_piers_double": "Mary & Ginepro", - "piers_marnie_double": "Ginepro & Mary" + "piers_marnie_double": "Ginepro & Mary", + + "buck": "Chicco", + "cheryl": "Demetra", + "marley": "Risetta", + "mira": "Matilde", + "riley": "Fabiolo", + "victor": "Vincenzo", + "victoria": "Vittoria", + "vivi": "Viviana", + "vicky": "Vicky", + "vito": "Enrico", + + "bug_type_superfan": "Fan n.1 dei tipi Coleottero", + "expert_pokemon_breeder": "Expert Pokémon Breeder" } diff --git a/src/locales/it/trainer-titles.json b/src/locales/it/trainer-titles.json index eff152795cd..c2408a071ad 100644 --- a/src/locales/it/trainer-titles.json +++ b/src/locales/it/trainer-titles.json @@ -19,6 +19,7 @@ "aether_boss": "Direttrice Æther", "skull_boss": "Capo Team Skull", "macro_boss": "Presidente Macro Cosmos", + "star_boss": "Arcicapo Team Star", "rocket_admin": "Tenente Team Rocket", "rocket_admin_female": "Tenente Team Rocket", @@ -34,6 +35,9 @@ "flare_admin_female": "Ufficiale Team Flare", "aether_admin": "Capo Filiale Æther", "skull_admin": "Ufficiale Team Skull", - "macro_admin": "Vicepresidente Macro Cosmos" + "macro_admin": "Vicepresidente Macro Cosmos", + "star_admin": "Capobanda Team Star", + + "the_winstrates": "Famiglia Vinci'" } diff --git a/src/locales/ja/ability.json b/src/locales/ja/ability.json index c44eeb06234..c7828d89c75 100644 --- a/src/locales/ja/ability.json +++ b/src/locales/ja/ability.json @@ -1237,6 +1237,6 @@ }, "poisonPuppeteer": { "name": "どくくぐつ", - "description": "モモワロウの 技によって どく状態に なった 相手は こんらん状態にも なってしまう。" + "description": "このポケモンの 技によって どく状態に なった 相手は こんらん状態にも なってしまう。" } } diff --git a/src/locales/ja/achv.json b/src/locales/ja/achv.json index fd5e4b9e6c4..ad85e8aeb05 100644 --- a/src/locales/ja/achv.json +++ b/src/locales/ja/achv.json @@ -265,5 +265,9 @@ "INVERSE_BATTLE": { "name": "カガミよミガカ", "description": "反転バトルチャレンジを クリアする\nるすアリク をジンレャチルトバ転反" + }, + "BREEDERS_IN_SPACE": { + "name": "宇宙のブリーダー!", + "description": "宇宙バイオームで エキスパートブリーダーを 倒す" } } diff --git a/src/locales/ja/battle.json b/src/locales/ja/battle.json index 1fe24068cdf..7402c6155b4 100644 --- a/src/locales/ja/battle.json +++ b/src/locales/ja/battle.json @@ -96,5 +96,6 @@ "unlockedSomething": "{{unlockedThing}}\nを アンロックした!", "congratulations": "おめでとうございます!!", "beatModeFirstTime": "初めて {{speciesName}}が {{gameMode}}モードを クリアした!\n{{newModifier}}を 手に入れた!", - "ppReduced": "{{targetName}}の {{moveName}}を {{reduction}}削った!" + "ppReduced": "{{targetName}}の {{moveName}}を {{reduction}}削った!", + "mysteryEncounterAppeared": "あれ?" } diff --git a/src/locales/ja/bgm-name.json b/src/locales/ja/bgm-name.json index fc3d4c0fdd2..fbb86deaa0d 100644 --- a/src/locales/ja/bgm-name.json +++ b/src/locales/ja/bgm-name.json @@ -83,9 +83,11 @@ "battle_aether_grunt": "SM 戦闘!エーテル財団トレーナー", "battle_skull_grunt": "SM 戦闘!スカル団", "battle_macro_grunt": "SWSH 戦闘!トレーナー", + "battle_star_grunt": "SV 戦闘!スター団", "battle_galactic_admin": "BDSP 戦闘!ギンガ団幹部", "battle_skull_admin": "SM 戦闘!スカル団幹部", "battle_oleana": "SWSH 戦闘!オリーヴ", + "battle_star_admin": "SV 戦闘!スター団ボス", "battle_rocket_boss": "USUM 戦闘!レインボーロケット団ボス", "battle_aqua_magma_boss": "ORAS 戦闘!アクア団・マグマ団のリーダー", "battle_galactic_boss": "BDSP 戦闘!ギンガ団ボス", @@ -94,6 +96,7 @@ "battle_aether_boss": "SM 戦闘!ルザミーネ", "battle_skull_boss": "SM 戦闘!スカル団ボス", "battle_macro_boss": "SWSH 戦闘!ローズ", + "battle_star_boss": "SV 戦闘!カシオペア", "abyss": "ポケダン空 やみのかこう", "badlands": "ポケダン空 こかつのたに", @@ -108,17 +111,17 @@ "forest": "ポケダン空 くろのもり", "grass": "ポケダン空 リンゴのもり", "graveyard": "ポケダン空 しんぴのもり", - "ice_cave": "ポケダン空 だいひょうざん", + "ice_cave": "Firel - -50°C", "island": "ポケダン空 えんがんのいわば", "jungle": "Lmz - Jungle(ジャングル)", "laboratory": "Firel - Laboratory(ラボラトリー)", - "lake": "ポケダン空 すいしょうのどうくつ", + "lake": "Lmz - Lake(湖)", "meadow": "ポケダン空 そらのいただき(もり)", "metropolis": "Firel - Metropolis(大都市)", "mountain": "ポケダン空 ツノやま", - "plains": "ポケダン空 そらのいただき(そうげん)", - "power_plant": "ポケダン空 エレキへいげん", - "ruins": "ポケダン空 ふういんのいわば", + "plains": "Firel - Route 888(888ばんどうろ)", + "power_plant": "Firel - The Klink(ザ・ギアル)", + "ruins": "Lmz - Ancient Ruins", "sea": "Andr06 - Marine Mystique(海の神秘性)", "seabed": "Firel - Seabed(海底)", "slum": "Andr06 - Sneaky Snom(ずるいユキハミ)", @@ -128,7 +131,7 @@ "tall_grass": "ポケダン空 のうむのもり", "temple": "ポケダン空 ばんにんのどうくつ", "town": "ポケダン空 ランダムダンジョン3", - "volcano": "ポケダン空 ねっすいのどうくつ", + "volcano": "Firel - Twisturn Volcano(曲がる折れる火山)", "wasteland": "ポケダン空 まぼろしのだいち", "encounter_ace_trainer": "BW 視線!エリートトレーナー", "encounter_backpacker": "BW 視線!バックパッカー", @@ -146,5 +149,11 @@ "encounter_youngster": "BW 視線!たんぱんこぞう", "heal": "BW 回復", "menu": "ポケダン空 ようこそ! ポケモンたちのせかいへ!", - "title": "ポケダン空 トップメニュー" + "title": "ポケダン空 トップメニュー", + + "mystery_encounter_weird_dream": "ポケダン空 じげんのとう", + "mystery_encounter_fun_and_games": "ポケダン空 おやかたプクリン", + "mystery_encounter_gen_5_gts": "BW GTS", + "mystery_encounter_gen_6_gts": "XY GTS", + "mystery_encounter_delibirdy": "Firel - DeliDelivery! (デーリーデーリー!)" } diff --git a/src/locales/ja/config.ts b/src/locales/ja/config.ts index f8afd6eb167..f806a792d39 100644 --- a/src/locales/ja/config.ts +++ b/src/locales/ja/config.ts @@ -53,7 +53,49 @@ import terrain from "./terrain.json"; import modifierSelectUiHandler from "./modifier-select-ui-handler.json"; import moveTriggers from "./move-trigger.json"; import runHistory from "./run-history.json"; +import mysteryEncounterMessages from "./mystery-encounter-messages.json"; +import lostAtSea from "./mystery-encounters/lost-at-sea-dialogue.json"; +import mysteriousChest from "./mystery-encounters/mysterious-chest-dialogue.json"; +import mysteriousChallengers from "./mystery-encounters/mysterious-challengers-dialogue.json"; +import darkDeal from "./mystery-encounters/dark-deal-dialogue.json"; +import departmentStoreSale from "./mystery-encounters/department-store-sale-dialogue.json"; +import fieldTrip from "./mystery-encounters/field-trip-dialogue.json"; +import fieryFallout from "./mystery-encounters/fiery-fallout-dialogue.json"; +import fightOrFlight from "./mystery-encounters/fight-or-flight-dialogue.json"; +import safariZone from "./mystery-encounters/safari-zone-dialogue.json"; +import shadyVitaminDealer from "./mystery-encounters/shady-vitamin-dealer-dialogue.json"; +import slumberingSnorlax from "./mystery-encounters/slumbering-snorlax-dialogue.json"; +import trainingSession from "./mystery-encounters/training-session-dialogue.json"; +import theStrongStuff from "./mystery-encounters/the-strong-stuff-dialogue.json"; +import pokemonSalesman from "./mystery-encounters/the-pokemon-salesman-dialogue.json"; +import offerYouCantRefuse from "./mystery-encounters/an-offer-you-cant-refuse-dialogue.json"; +import delibirdy from "./mystery-encounters/delibirdy-dialogue.json"; +import absoluteAvarice from "./mystery-encounters/absolute-avarice-dialogue.json"; +import aTrainersTest from "./mystery-encounters/a-trainers-test-dialogue.json"; +import trashToTreasure from "./mystery-encounters/trash-to-treasure-dialogue.json"; +import berriesAbound from "./mystery-encounters/berries-abound-dialogue.json"; +import clowningAround from "./mystery-encounters/clowning-around-dialogue.json"; +import partTimer from "./mystery-encounters/part-timer-dialogue.json"; +import dancingLessons from "./mystery-encounters/dancing-lessons-dialogue.json"; +import weirdDream from "./mystery-encounters/weird-dream-dialogue.json"; +import theWinstrateChallenge from "./mystery-encounters/the-winstrate-challenge-dialogue.json"; +import teleportingHijinks from "./mystery-encounters/teleporting-hijinks-dialogue.json"; +import bugTypeSuperfan from "./mystery-encounters/bug-type-superfan-dialogue.json"; +import funAndGames from "./mystery-encounters/fun-and-games-dialogue.json"; +import uncommonBreed from "./mystery-encounters/uncommon-breed-dialogue.json"; +import globalTradeSystem from "./mystery-encounters/global-trade-system-dialogue.json"; +import expertPokemonBreeder from "./mystery-encounters/the-expert-pokemon-breeder-dialogue.json"; +/** + * Dialogue/Text token injection patterns that can be used: + * - `$` will be treated as a new line for Message and Dialogue strings. + * - `@d{}` will add a time delay to text animation for Message and Dialogue strings. + * - `@s{}` will play a specified sound effect for Message and Dialogue strings. + * - `@f{}` will fade the screen to black for the given duration, then fade back in for Message and Dialogue strings. + * - `{{}}` (MYSTERY ENCOUNTERS ONLY) will auto-inject the matching dialogue token value that is stored in {@link IMysteryEncounter.dialogueTokens}. + * - (see [i18next interpolations](https://www.i18next.com/translation-function/interpolation)) for more details. + * - `@[]{}` (STATIC TEXT ONLY, NOT USEABLE WITH {@link UI.showText()} OR {@link UI.showDialogue()}) will auto-color the given text to a specified {@link TextStyle} (e.g. `TextStyle.SUMMARY_GREEN`). + */ export const jaConfig = { ability, abilityTriggers, @@ -110,4 +152,40 @@ export const jaConfig = { modifierSelectUiHandler, moveTriggers, runHistory, + mysteryEncounter: { + // DO NOT REMOVE + "unit_test_dialogue": "{{test}}{{test}} {{test{{test}}}} {{test1}} {{test\}} {{test\\}} {{test\\\}} {test}}", + mysteriousChallengers, + mysteriousChest, + darkDeal, + fightOrFlight, + slumberingSnorlax, + trainingSession, + departmentStoreSale, + shadyVitaminDealer, + fieldTrip, + safariZone, + lostAtSea, + fieryFallout, + theStrongStuff, + pokemonSalesman, + offerYouCantRefuse, + delibirdy, + absoluteAvarice, + aTrainersTest, + trashToTreasure, + berriesAbound, + clowningAround, + partTimer, + dancingLessons, + weirdDream, + theWinstrateChallenge, + teleportingHijinks, + bugTypeSuperfan, + funAndGames, + uncommonBreed, + globalTradeSystem, + expertPokemonBreeder + }, + mysteryEncounterMessages }; diff --git a/src/locales/ja/dialogue.json b/src/locales/ja/dialogue.json index 24cd19b6ffc..9f47d9c31ef 100644 --- a/src/locales/ja/dialogue.json +++ b/src/locales/ja/dialogue.json @@ -764,12 +764,16 @@ "1": "不審者を 追い払って\nたんまり ボーナス いただくぜ!", "2": "ジャマは 許しません!\n$マクロコスモスの さまざまな\n関連会社を 守るためにも 追い返します!", "2_female": "ジャマは 許しません!\n$マクロコスモスの さまざまな\n関連会社を 守るためにも 追い返します!", - "3": "マクロコスモス生命です!\n保険に 入っていますか?" + "3": "マクロコスモス生命です!\n保険に 入っていますか?", + "4": "見つけた! では 勝負だ!", + "5": "オリーヴさまに 怒られたくないから あきらめない!" }, "victory": { "1": "ボーナスが……\n夢の マイホームが……", "2": "負けたからには\n素直に 引き下がりましょう。\n$だが ローズ委員長の\nジャマは しないでくださいよ。", - "3": "マクロコスモス生命の 仕事なら\n誰にも 負けないのに…" + "3": "マクロコスモス生命の 仕事なら\n誰にも 負けないのに…", + "4": "ポケモンを 入れ替えたのに……", + "5": "かくれんぼも ダメ!\n勝負も ダメ! 逃げるしかない!" } }, "oleana": { @@ -785,6 +789,73 @@ "3": "まあ 生意気!\nオリーヴの パートナーを キズつけるなんて!" } }, + "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." + }, + "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..." + } + }, + "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!" + }, + "victory": { + "1": "Guess that's that...", + "2": "You turned my melody into a threnody..." + } + }, + "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!" + }, + "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." + } + }, + "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!" + }, + "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." + } + }, + "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!" + }, + "victory": { + "1": "Ugh! How could I LOSE! What the HECK!", + "2": "Arrrrgggh! That strength of yours is SO. NOT. FAIR." + } + }, + "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!" + }, + "victory": { + "1": "I'm so sorry, everyone...", + "2": "I gave it my all, but it wasn't enough—I wasn't enough..." + } + }, "rocket_boss_giovanni_1": { "encounter": { "1": "こんな所 まで よく来た…" @@ -985,6 +1056,138 @@ "1": "I suppose it must seem that I am doing something terrible. I don't expect you to understand.\n$But I must provide the Galar region with limitless energy to ensure everlasting prosperity." } }, + "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!" + }, + "victory": { + "1": "... ... .." + }, + "defeat": { + "1": "Heh..." + } + }, + "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!" + }, + "victory": { + "1": "...It's all over now." + }, + "defeat": { + "1": "I can't fault you on your battle skills at all... Considering how the bosses fell at your hands." + } + }, + "stat_trainer_buck": { + "encounter": { + "1": "……言っとくけど オレ 強いからな! 驚けよ!", + "2": "モンスターボールの 中で オレの ポケモン達 震えてる!\nこれ 武者震いって やつだな!" + }, + "victory": { + "1": "イヒヒ!\nあっちーな  おまえ!!", + "2": "イヒヒ!\nあっちーな  おまえ!!" + }, + "defeat": { + "1": "おっと! 元気切れか", + "2": "おっと! 元気切れか" + } + }, + "stat_trainer_cheryl": { + "encounter": { + "1": "あたしの ポケモンたち 戦いたくて ウズウズしてるよ", + "2": "あたしの ポケモン達 結構 ヤンチャですわよ" + }, + "victory": { + "1": "攻めること 守ること その バランスは 大変ですね…", + "2": "攻めること 守ること その バランスは 大変ですね…" + }, + "defeat": { + "1": "早く ポケモンを 回復してくださいね", + "2": "早く ポケモンを 回復してくださいね?" + } + }, + "stat_trainer_marley": { + "encounter": { + "1": "……わかった\nできるだけ がんばるから", + "2": "……わかった\nあたし…… 負けないから……!" + }, + "victory": { + "1": "……もう", + "2": "……もう" + }, + "defeat": { + "1": "…… サヨナラ.", + "2": "…… サヨナラ" + } + }, + "stat_trainer_mira": { + "encounter": { + "1": "ミル ビックリしちゃいますよ!", + "2": "もう 迷ったりしない ってところ\nトレーナーさんに 見せるからね!" + }, + "victory": { + "1": "これだと この地方で\nミル 活躍 できないかな…", + "2": "これだと この地方で\nミル 活躍 できないかな…" + }, + "defeat": { + "1": "やった! ミル 最強!", + "2": "やった! ミル 最強!" + } + }, + "stat_trainer_riley": { + "encounter": { + "1": "ポケモン勝負 こそが 私達の 挨拶さ!", + "2": "全力を出して 君の ポケモンを 倒して見せるよ" + }, + "victory": { + "1": "戦ったり 組んでみたり……$トレーナー同士って いいよね", + "2": "戦ったり 組んでみたり……$トレーナー同士って いいよね" + }, + "defeat": { + "1": "よく 頑張ってた…\n次が あるよ", + "2": "よく 頑張ってた…\n次が あるよ" + } + }, + "winstrates_victor": { + "encounter": { + "1": "いい 度胸だ! 気に入ったぞ!" + }, + "victory": { + "1": "たはーっ! 思っていたより 強いんだね きみは!" + } + }, + "winstrates_victoria": { + "encounter": { + "1": "あれま! 意外に 若いのね!$うちの 主人に 勝ってしまうとは なんと 凄腕の トレーナー なの!$じゃあ こんどは 私と 勝負よ!" + }, + "victory": { + "1": "んまーっ! あなたって なんて 強いのかしら!" + } + }, + "winstrates_vivi": { + "encounter": { + "1": "ママより 強いなんて すごーい!$でも あたし だって 強いんだから!\nほんと なんだってば!" + }, + "victory": { + "1": "悔しい……\n……ぐっすん! おばあちゃーん!!" + } + }, + "winstrates_vicky": { + "encounter": { + "1": "こらーっ! わしの かわいい 孫に 何すんじゃ!$こうなったら わしが おまえさんの\nポケモンを こらしめちゃるから 覚悟せぇ!" + }, + "victory": { + "1": "フガッ! 強いのう……\n孫の いうことは 本当 じゃった" + } + }, + "winstrates_vito": { + "encounter": { + "1": "家族 全員で\nポケモンの 修行を してたんだ!$誰にも 負けないぜ!" + }, + "victory": { + "1": "家族の 誰よりも つよかった おれ……\n今まで 誰にも 負けなかった おれ……" + } + }, "brock": { "encounter": { "1": "My expertise on Rock-type Pokémon will take you down! Come on!", diff --git a/src/locales/ja/egg.json b/src/locales/ja/egg.json index 91b1442c56c..9ed31bfc04b 100644 --- a/src/locales/ja/egg.json +++ b/src/locales/ja/egg.json @@ -11,6 +11,7 @@ "gachaTypeLegendary": "伝説確率アップ", "gachaTypeMove": "レアなタマゴ技確率アップ", "gachaTypeShiny": "色違い確率アップ", + "eventType": "謎イベント", "selectMachine": "ガチャマシンを選択", "notEnoughVouchers": "タマゴクーポンが足りません!", "tooManyEggs": "タマゴが一杯です!", diff --git a/src/locales/ja/modifier-select-ui-handler.json b/src/locales/ja/modifier-select-ui-handler.json index d7428c8e373..d5cd199063b 100644 --- a/src/locales/ja/modifier-select-ui-handler.json +++ b/src/locales/ja/modifier-select-ui-handler.json @@ -8,5 +8,7 @@ "lockRaritiesDesc": "選択肢を 変更するときの レア度を 固定する\n(選択肢変更の価格は変わる)", "checkTeamDesc": "手持ちポケモンの 状態を 確認する\nフォルムチェンジアイテムを 有効・無効にする", "rerollCost": "{{formattedMoney}}円", - "itemCost": "{{formattedMoney}}円" + "itemCost": "{{formattedMoney}}円", + "continueNextWaveButton": "続く", + "continueNextWaveDescription": "次の ラウンドに 続く" } diff --git a/src/locales/ja/modifier-type.json b/src/locales/ja/modifier-type.json index a2e62bd941e..b217ab054b7 100644 --- a/src/locales/ja/modifier-type.json +++ b/src/locales/ja/modifier-type.json @@ -68,6 +68,20 @@ "BaseStatBoosterModifierType": { "description": "ポケモンの 基本の{{stat}}を 10% あげる。\n個体値が 高けば高いほど 持てる限界が 上がる" }, + "PokemonBaseStatTotalModifierType": { + "name": "ツボツボジュース", + "description": "持たせると 基本能力が {{statValue}} {{increaseDecrease}}。ツボツボに {{blessCurse}}。", + "extra": { + "increase": "上がる", + "decrease": "下がる", + "blessed": "恵まれた", + "cursed": "呪われた" + } + }, + "PokemonBaseStatFlatModifierType": { + "name": "もりのヨウカン", + "description": "持たせると 基本能力が {{statValue}} 上がる。 謎の夢で 見つけた お菓子。" + }, "AllPokemonFullHpRestoreModifierType": { "description": "手持ちポケモン 全員の HPを すべて 回復する" }, @@ -247,7 +261,13 @@ "ENEMY_ATTACK_BURN_CHANCE": { "name": "やけどトークン" }, "ENEMY_STATUS_EFFECT_HEAL_CHANCE": { "name": "なんでもなおしトークン", "description": "毎ターン 状態異常を 治せる 2.5%の可能性を 加える" }, "ENEMY_ENDURE_CHANCE": { "name": "こらえるトークン" }, - "ENEMY_FUSED_CHANCE": { "name": "がったいトークン", "description": "野生ポケモンは 吸収合体している 1%の可能性を 加える" } + "ENEMY_FUSED_CHANCE": { "name": "がったいトークン", "description": "野生ポケモンは 吸収合体している 1%の可能性を 加える" }, + + "MYSTERY_ENCOUNTER_SHUCKLE_JUICE": { "name": "ツボツボジュース" }, + "MYSTERY_ENCOUNTER_BLACK_SLUDGE": { "name": "くろいヘドロ", "description": "ムゴい 悪臭を放つから ショップが アイテムの 価格を ぐんと 上げる" }, + "MYSTERY_ENCOUNTER_MACHO_BRACE": { "name": "きょうせいギプス", "description": "持たせると 相手を倒すとき もう1つの ギプスを もらう。 ギプス当たり 能力が 少し 上がる。 最多で さらに 上がる" }, + "MYSTERY_ENCOUNTER_OLD_GATEAU": { "name": "もりのヨウカン", "description": "持たせると 基本能力が {{statValue}} 上がる" }, + "MYSTERY_ENCOUNTER_GOLDEN_BUG_NET": { "name": "きんのむしとりあみ", "description": "むしタイプの ポケモンが 見つけやすく なる運に 注ぎ込まれた 妙に重い 虫取り網" } }, "SpeciesBoosterItem": { "LIGHT_BALL": { "name": "でんきだま", "description": "ピカチュウに 持たせると 攻撃と 特攻が あがる 不思議な玉" }, diff --git a/src/locales/ja/move-trigger.json b/src/locales/ja/move-trigger.json index fbefe883836..afede7edfb3 100644 --- a/src/locales/ja/move-trigger.json +++ b/src/locales/ja/move-trigger.json @@ -64,6 +64,8 @@ "copyType": "{{pokemonName}}は {{targetPokemonName}}と\n同じタイプに なった!", "suppressAbilities": "{{pokemonName}}の 特性が 効かなくなった!", "revivalBlessing": "{{pokemonName}}は\n復活して 戦えるようになった!", + "swapArenaTags": "{{pokemonName}}は\nお互いの 場の効果を 入れ替えた!", + "chillyReception": "{{pokemonName}}は\n寒い ギャグを かました!", "swapArenaTags": "{{pokemonName}}は\nお互いの 場の 効果を 入れ替えた!", "exposedMove": "{{pokemonName}}は {{targetPokemonName}}の\n正体を 見破った!", "afterYou": "{{pokemonName}}は\nお言葉に 甘えることにした!" diff --git a/src/locales/ja/move.json b/src/locales/ja/move.json index 2e602407902..15c63a81e36 100644 --- a/src/locales/ja/move.json +++ b/src/locales/ja/move.json @@ -3129,7 +3129,7 @@ }, "auraWheel": { "name": "オーラぐるま", - "effect": "ほほぶくろに 溜めた エネルギーで 攻撃し 自分の 素早さを あげる。 モルペコの 姿で タイプが 変わる。" + "effect": "ほほぶくろに 溜めた エネルギーで 攻撃し 自分の 素早さを あげる。 モルペコが この技を 使う場合 姿で 技の タイプが 変わる。" }, "breakingSwipe": { "name": "ワイドブレイカー", diff --git a/src/locales/ja/mystery-encounter-messages.json b/src/locales/ja/mystery-encounter-messages.json new file mode 100644 index 00000000000..f67a8764d49 --- /dev/null +++ b/src/locales/ja/mystery-encounter-messages.json @@ -0,0 +1,7 @@ +{ + "paid_money": "{{amount, number}}円 払った", + "receive_money": "{{amount, number}}円 もらった!", + "affects_pokedex": "ポケモン図鑑の データに 影響する", + "cancel_option": "遭遇の 選択肢に 戻る", + "view_party_button": "手持ちを確認" +} diff --git a/src/locales/ja/mystery-encounters/a-trainers-test-dialogue.json b/src/locales/ja/mystery-encounters/a-trainers-test-dialogue.json new file mode 100644 index 00000000000..33818d27ab3 --- /dev/null +++ b/src/locales/ja/mystery-encounters/a-trainers-test-dialogue.json @@ -0,0 +1,47 @@ +{ + "intro": "非常に 強いトレーナーが 近寄る……", + "buck": { + "intro_dialogue": "おっ, トレーナーさん!\nオレ、バクだ!$あなたみたいな 強いトレーナーに\n最高の 頼みが あるのさ!$レアな タマゴが 2つ 持っているけど、\n誰か他の トレーナーに 1つ 世話をすれば いいなあ!$おまえの 強さが 証明できれば\n一番レアな タマゴを あげるからさ!", + "accept": "いひひ……! きた きた!\nさあさあ! 勝負しようぜ!", + "decline": "ざーんねん! おまえの 手持ちポケモンも\n絶好調に 見えないな……$ほら、治して あげるさ!" + }, + "cheryl": { + "intro_dialogue": "はじめまして、\nあたしの 名前は モミです。$かなり強い トレーナーですね?\nお願いが あるの!$今は レアな タマゴを 運んでいます。\nでも、1つ 世話をできる トレーナーが 探がすの$トレーナーさん 強さを 証明できれば\n最もレアな 方を あげますよ!", + "accept": "覚悟して!", + "decline": "あっ 分かります。 あなたの 手持ちポケモンは\nちょっと 元気は なさそうですね……$ねえ、 治してあげましょう!" + }, + "marley": { + "intro_dialogue": "……@d{64}あたし マイ$……お願いが あるんだけど いい?$……タマゴを 2つ 持ってる けど\n1つ あげたいの$……バトルで あたしより 強いなら\n一番レアな タマゴ あげるの", + "accept": "……分かった できるだけ 頑張るから", + "decline": "……分かった$……ポケモン 傷つくの ダメ だから 回復してあげる" + }, + "mira": { + "intro_dialogue": "あたし ミル!$強い トレーナーだね?\nお願いです!$ミルはね、レアなタマゴ 2つ あるのに\n1つ あげたいの!$勝負で 強いのを ミルに 見せたら\n一番レアな たまご あげるよ!", + "accept": "ミルと 戦う?\nやった!", + "decline": "ちょっと がっかりです……\nでも 大丈夫!$あなたの ポケモン 元気に してあげるね!" + }, + "riley": { + "intro_dialogue": "やあ、 わたしは ゲン というんだ$キミのような 強いトレーナーに\nもの好きな 申し入れが あるよ$レアなタマゴが 2つ もっているが、\n1つ もらえないか?$勝負で 強さを 証明できれば\n最もレアな 方を あげるよ", + "accept": "その顔…… 戦う 準備は できたかな?", + "decline": "分かる、 手持ちポケモンが 結構 傷ついたようだ。$私が 回復 してあげるよ" + }, + "title": "強さの証明", + "description": "このトレーナーは 選択にかかわらず タマゴを 1つ あげる ようです。 しかし、 非常に強い トレーナーを 倒せば 最もレアな タマゴを もらいます。", + "query": "どうしますか?", + "option": { + "1": { + "label": "勝負を受け取る", + "tooltip": "(-) 勝負がきつい\n(+) @[TOOLTIP_TITLE]{Very Rare Egg}をもらう" + }, + "2": { + "label": "勝負を断る", + "tooltip": "(+) 手持ち 全回復\n(+) @[TOOLTIP_TITLE]{Egg}をもらう" + } + }, + "eggTypes": { + "rare": "レアなタマゴ", + "epic": "超レアなタマゴ", + "legendary": "伝説のタマゴ" + }, + "outro": "{{statTrainerName}}から {{eggType}}を もらった!" +} diff --git a/src/locales/ja/mystery-encounters/absolute-avarice-dialogue.json b/src/locales/ja/mystery-encounters/absolute-avarice-dialogue.json new file mode 100644 index 00000000000..d2aba5dfce9 --- /dev/null +++ b/src/locales/ja/mystery-encounters/absolute-avarice-dialogue.json @@ -0,0 +1,25 @@ +{ + "intro": "待ち伏せの {{greedentName}}が\n手持ちポケモンの きのみを 全部 奪った!", + "title": "よくよく欲張り", + "description": "{{greedentName}}の 不意打ちで 持っていた きのみを 全部 失った!\n\n{{greedentName}}は 食べ始めそうですが、 突然に 止まって 気になる 顔で あなとを 見つめる。", + "query": "どうしますか", + "option": { + "1": { + "label": "勝負だ", + "tooltip": "(-) 勝負がきつい\n(+) きのみの山積みからご褒美", + "selected": "{{greedentName}}は 頬張って おそいかかってくる!", + "boss_enraged": "{{greedentName}}の 食べ物への 情熱で ぐっと キレた!", + "food_stash": "{{greedentName}}は 巨大な 食べ物の\n山積みを 守っていたようだ!$@s{item_fanfare}手持ちポケモンは 各々 {{foodReward}}を もらう!" + }, + "2": { + "label": "言い聞かせてみる", + "tooltip": "(+) きのみを数個取り戻す", + "selected": "あなたの 言い聞かせてる姿は {{greedentName}}の 胸に ちょっと こたえたようです。$きのみを 全部 戻さないが、\n数個を あなたの 方面へ 投げてあげる。" + }, + "3": { + "label": "全部食べさせて", + "tooltip": "(-) きのみを全部失う\n(?) {{greedentName}}は好きになる", + "selected": "あっという間に {{greedentName}}は\nきのみの 山積みを むさぼり食う!$お腹を ポンポンしながら\nありがたさうな 表情で 見つめる。$もしかして、 冒険中に きのみを\nもっと 食べさせて あげようかなぁ……$@s{level_up_fanfare}{{greedentName}}は 手持ちに 入りたい!" + } + } +} diff --git a/src/locales/ja/mystery-encounters/an-offer-you-cant-refuse-dialogue.json b/src/locales/ja/mystery-encounters/an-offer-you-cant-refuse-dialogue.json new file mode 100644 index 00000000000..d85ff4e0572 --- /dev/null +++ b/src/locales/ja/mystery-encounters/an-offer-you-cant-refuse-dialogue.json @@ -0,0 +1,26 @@ +{ + "intro": "お金持ちっぽいな 男の子が 道を さえぎる……", + "speaker": "お坊っちゃま", + "intro_dialogue": "こんにちは!$まるで 素敵滅法な {{strongestPokemon}}を 飼っている ことに 気づかず にはいられません!$ずーっと そのような ポケモンを 飼いたかったんです!$ね、 気前よく 支払って、\nサービスで この古くて 安かった石を あげて いかがですか?", + "title": "断れない申し出", + "description": "お坊っちゃまは {{strongestPokemon}}の代わりに @[TOOLTIP_TITLE]{Shiny Charm}と {{price, money}}を 申し出ています。\n交換として 結構 すごいですが、 本当に こんな 強い仲間と 別れるのを 耐えられますか?", + "query": "どうしますか", + "option": { + "1": { + "label": "申し出を受け取る", + "tooltip": "(-) {{strongestPokemon}}を失う\n(+) @[TOOLTIP_TITLE]{Shiny Charm}をもらう\n(+) {{price, money}}をもらう", + "selected": "素晴らしい!@d{32} {{strongestPokemon}} こっち こっち!$ヨットクラブの みんなに おまえを 自慢するぞ!$きっと ヤキモチを 焼くね…… ふへへへ" + }, + "2": { + "label": "ガキを恐喝", + "tooltip": "(+) {{option2PrimaryName}}は{{moveOrAbility}}を使う\n(+) {{price, money}}を貰う", + "tooltip_disabled": "選ぶには 手持ちポケモンが 特定な 技や 特性が 必要", + "selected": "いやあ! {{liepardName}} 泥棒だ!$お父さんの 弁護士は キサマを 連絡するぞ!!" + }, + "3": { + "label": "立ち去る", + "tooltip": "(-) ご褒美なし", + "selected": "フン 今日は 最低だ……$まあね ヨットクラブへ 戻ろう、 {{liepardName}}" + } + } +} diff --git a/src/locales/ja/mystery-encounters/berries-abound-dialogue.json b/src/locales/ja/mystery-encounters/berries-abound-dialogue.json new file mode 100644 index 00000000000..a11e0cb3360 --- /dev/null +++ b/src/locales/ja/mystery-encounters/berries-abound-dialogue.json @@ -0,0 +1,26 @@ +{ + "intro": "あのポケモンの 近くに\n巨大な きのみの木が あります!", + "title": "溢れるきのみ", + "description": "強いポケモンは きのみの木を 守っている ようです。一番 当たり前な 対処法は バトルですが、 結構 強力そう です。 早いポケモンが いれば 捕まえられずに 数個 取れる かもしれません……", + "query": "どうしますか?", + "berries": "きのみ", + "option": { + "1": { + "label": "バトルだ", + "tooltip": "(-) 勝負がきつい\n(+) きのみをもらう", + "selected": "怖がらないで ポケモンに 近寄っていく……" + }, + "2": { + "label": "木に突っ走る!", + "tooltip": "(-) {{fastestPokemon}}は素早さを使う\n(+) きのみをもらう", + "selected": "{{fastestPokemon}}は きのみの木へ 突っ走っていきます!${{enemyPokemon}}は 受け止められる 前に {{numBerries}}を 取れます!$新たに得た ご褒美で 早く 逃げます。", + "selected_bad": "{{fastestPokemon}}は きのみの木へ 突っ走って行きます!$ダメ! {{enemyPokemon}}の方は 早くて 受け止められました!", + "boss_enraged": "相手の {{enemyPokemon}}は 怒り出した!" + }, + "3": { + "label": "置いていく", + "tooltip": "(-) ご褒美なし", + "selected": "強いポケモンを そのままで 置いて 進んでいきます。" + } + } +} diff --git a/src/locales/ja/mystery-encounters/bug-type-superfan-dialogue.json b/src/locales/ja/mystery-encounters/bug-type-superfan-dialogue.json new file mode 100644 index 00000000000..c11a1191e4c --- /dev/null +++ b/src/locales/ja/mystery-encounters/bug-type-superfan-dialogue.json @@ -0,0 +1,40 @@ +{ + "intro": "色々な むし式の アクセを 着ている\n奇抜な トレーナーは 道を さえぎる!", + "intro_dialogue": "むしむし トレーナーむ氏! わたむしの 目的は この世界で 一番珍しい むしポケモンを 見つけること でチュウ!$トレーナーむ氏も むしが 大好き でチョウ?\nみんなと同じ でチュウね!", + "title": "虫好きも好き好き", + "speaker": "むしマニア", + "description": "返事も 待たずに むしマニアは 言い続けています……\n\nこの状況から 出るには 注目を 引くしかない ようです!", + "query": "どうしますか?", + "option": { + "1": { + "label": "バトルに挑む", + "tooltip": "(-) 相手が手強い\n(+) ポケモンにむしタイプ技を教える", + "selected": "わたむしを 挑むッシか?\n仲間の むしたちは もう 覚悟していまチュウ!" + }, + "2": { + "label": "むしポケモンを見せる", + "tooltip": "(+) プレゼントをもらう", + "disabled_tooltip": "選ぶには 最小限 1匹の むしタイプの 手持ちポケモンが 必要", + "selected": "むしマニアに 手持ちの むしポケモンを 見せる……", + "selected_0_to_1": "何チュウこと?? {{numBugTypes}}しか いないの でチョウ……$よクモ 時間を むダニ させます……", + "selected_2_to_3": "ほほう! {{numBugTypes}}が いるんでチュウね!\n良く 出来ムシた!$ね、 これが あれば 冒険チュウに もっともっと 捕まえられまチュウ!", + "selected_4_to_5": "ほほう!  {{numBugTypes}}が いるんでチュウね!\nチョウナイス!$わたむしの 段階には まだ 追いつきません けど、\nトレーナーむ氏の 中に チョーっと 自分の姿が 見えますね!\n$こちらをどうぞ! 我が虫弟子よ!", + "selected_6": "チョチョチョーっと 待って! {{numBugTypes}}!!\n$わたむしと 同じくらいに むしが 大好きでちょう?!$この友情の印を 受け取って ください!" + }, + "3": { + "label": "むしアイテムをあげる", + "tooltip": "(-) {{requiredBugItems}}をあげる\n(+) プレゼントをもらう", + "disabled_tooltip": "選ぶには {{requiredBugItems}}を 持つことが 必要", + "select_prompt": "あげたい アイテムを 選んで ください", + "invalid_selection": "このポケモンが そのような アイテムを 持っていない!", + "selected": "むしマニアに {{selectedItem}}を あげます。", + "selected_dialogue": "チョーっと待って! その{{selectedItem}}、 くれますか?\nアリがとう ございムシ!$このアリがたさの印、 受け取ってください!$古くから 先祖の 形見 でチュウよ… トレーナーむ氏が 預かってくれます 蚊?" + } + }, + "battle_won": "トレーナーむ氏の 知識と 腕前は 弱点を\nつけ込むには チョウど良かった でチュウ!$いい勉強に なったから トレーナーむ氏の\nポケモン 1匹に むしタイプの 技を 教えまチョウ!", + "teach_move_prompt": "教えたい 技を 選んでください", + "confirm_no_teach": "本当に すごい技を 教えませんか?", + "outro": "チョウ強い むしポケモンが\nトレーナーむ氏の 未来に 予知しまチュウよ!$また ハエる まで バイ ビー!", + "numBugTypes_one": "{{count}}匹の むしポケモン", + "numBugTypes_other": "{{count}}匹の むしポケモン" +} diff --git a/src/locales/ja/mystery-encounters/clowning-around-dialogue.json b/src/locales/ja/mystery-encounters/clowning-around-dialogue.json new file mode 100644 index 00000000000..6b429da5083 --- /dev/null +++ b/src/locales/ja/mystery-encounters/clowning-around-dialogue.json @@ -0,0 +1,34 @@ +{ + "intro": "……@d{64}クラウン?", + "speaker": "クラウン", + "intro_dialogue": "バカバカしい ボンクラ、 抜本的な バトルで ぶっ壊す!\n微笑で ボコボコ Baby!", + "title": "くらくらクラウンの変え方", + "description": "この遭遇は 変な 気がします。\nクラウンは バトルを 引き起こりたがります が、\n一体 どうして ですか?\n\nあの{{blacephalonName}}は 特に おかしい…… @[TOOLTIP_TITLE]{変わったタイプと特性}が ある みたいです。", + "query": "どうします?", + "option": { + "1": { + "label": "クラウンと勝負", + "tooltip": "(-) 勝負はおかしい\n(?) 手持ちポケモンの特性は変化", + "selected": "パッとしない ポケモンを ぽかぽか パンチしちゃうんだ ぴょん!", + "apply_ability_dialogue": "とても たくましく 倒した!\n倒すのが 得意な トレーナーと一緒に 特性を 取り替えたい!", + "apply_ability_message": "クラウンは スキルスワップで 手持ちポケモン 1匹の\n特性を {{ability}}と 取り替えることを 申し出ています!", + "ability_prompt": "手持ちポケモンの 特性を\n恒久的に {{ability}}に 変化しますか?", + "ability_gained": "@s{level_up_fanfare}{{chosenPokemon}}は {{ability}}の 特性を 身についた!" + }, + "2": { + "label": "怒らない", + "tooltip": "(-) クラウンは怒る\n(?) 手持ちポケモンのアイテムは変化", + "selected": "しつこい! シンプルな 勝負を スルー?!\n己は 俺の 怒りを 起こした!", + "selected_2": "クラウンの {{blacephalonName}}は トリックを 使った!\n{{switchPokemon}}の 持ったアイテムは 全て デタラメに 交換された!", + "selected_3": "豪華に ごまかした 下衆…… 元気でね!" + }, + "3": { + "label": "悪口を返す", + "tooltip": "(-) クラウンは怒る\n(?) 手持ちポケモンのタイプは変化", + "selected": "しつこい! シンプルな 勝負を スルー?!\n己は 俺の 怒りを 起こした!", + "selected_2": "クラウンの {{blacephalonName}}は 変な技を 使った!\n手持ちポケモン 全員の タイプは デタラメに 交換された!", + "selected_3": "豪華に ごまかした 下衆…… 元気でね!" + } + }, + "outro": "クラウンたちは パッと\n煙に なっちゃいます。" +} diff --git a/src/locales/ja/mystery-encounters/dancing-lessons-dialogue.json b/src/locales/ja/mystery-encounters/dancing-lessons-dialogue.json new file mode 100644 index 00000000000..2bade712ec4 --- /dev/null +++ b/src/locales/ja/mystery-encounters/dancing-lessons-dialogue.json @@ -0,0 +1,27 @@ +{ + "intro": "相手が いなくて 寂しそうな {{oricorioName}}は 悲しく 踊ってます。", + "title": "フリフリ振り付け", + "description": "{{oricorioName}}は 攻撃的 じゃなさそう…… むしろ、 悲しい 顔を しています。\n\n誰かと 踊りたいだけ かもしれません……", + "query": "どうしますか?", + "option": { + "1": { + "label": "バトルする", + "tooltip": "(-) 勝負はきつい\n(+) バトンをもらう", + "selected": "{{oricorioName}}は 取り乱して 防御の 体勢に 入る!", + "boss_enraged": "{{oricorioName}}は 恐れで 能力を 上げた!" + }, + "2": { + "label": "踊りを覚える", + "tooltip": "(+) ポケモンにめざめるダンスを教える", + "selected": "{{oricorioName}}の 踊りを よく 調べます……$@s{level_up_fanfare}{{selectedPokemon}}が {{oricorioName}}から 技を 覚えました!" + }, + "3": { + "label": "踊りを教える", + "tooltip": "(-) {{oricorioName}}に踊りの技を教える\n(+) {{oricorioName}}は好きになる", + "disabled_tooltip": "選ぶには 踊りの技がある 手持ちポケモンが 必要", + "select_prompt": "踊りの技を 選んでください", + "selected": "{{oricorioName}}は {{selectedPokemon}}が {{selectedMove}}を\n演舞する 姿を じっと 見とれています!!$演舞に 全く 好きになった ようです!$@s{level_up_fanfare}{{oricorioName}}は 手持ちに 入りたい!" + } + }, + "invalid_selection": "このポケモンは 踊りの技を 覚えていません!" +} diff --git a/src/locales/ja/mystery-encounters/dark-deal-dialogue.json b/src/locales/ja/mystery-encounters/dark-deal-dialogue.json new file mode 100644 index 00000000000..a797e599f19 --- /dev/null +++ b/src/locales/ja/mystery-encounters/dark-deal-dialogue.json @@ -0,0 +1,24 @@ + + +{ + "intro": "ぼろぼろの コートを 着ている\n謎の男が 道を 立ち塞いでいます……", + "speaker": "怪しい男", + "intro_dialogue": "おい キミ!$俺、潜在能力を 引き出す 装置を 作り出した!$ポケモンの 原子を 分子レベルで\n完全に 再結合し 断然強力な 姿に 変えるぞ$ウエッヘへ…@d{32} 機能が 効いてるのを 確認するには ぎせッ@d{32}…えーと、 被験者が 必要 だが… ", + "title": "裏取引", + "description": "怪しいヤツは ボールを 数個 差し上げます。\n「礼は弾むぞ! 支払いとして 高級なボールを あげて、 代わりに 手持ちポケモンが 1匹だけ 要るな…… ウエッヘヘ」", + "query": "どうしますか?", + "option": { + "1": { + "label": "受け入れる", + "tooltip": "(+) 5個のローグボール\n(?) 無作為なポケモンを強化", + "selected_dialogue": "じゃあ、 その{{pokeName}}で いい だろう!$ただし、 何か 悪いことが 起こっても 俺は 責任を 負わないって 覚えとけ!@d{32} ウエッヘヘ...", + "selected_message": "怪しい男から 5個の ローグボールを もらいます。${{pokeName}}は 謎の 機械に 入っていく...$機械は ピカッと光って 変な音を し出します!$...@d{96} 何かが 機械から 飛んできて 暴れ出す! " + }, + "2": { + "label": "断る", + "tooltip": "(-) ご褒美なし", + "selected": "助けが 要る人を 無視?\nケッ!" + } + }, + "outro": "苛む 遭遇の 後で、\n冷静にしてみて 立ち去ります。" +} \ No newline at end of file diff --git a/src/locales/ja/mystery-encounters/delibirdy-dialogue.json b/src/locales/ja/mystery-encounters/delibirdy-dialogue.json new file mode 100644 index 00000000000..530830a6409 --- /dev/null +++ b/src/locales/ja/mystery-encounters/delibirdy-dialogue.json @@ -0,0 +1,29 @@ + + +{ + "intro": "{{delibirdName}}の 群れは 現れてきた!", + "title": "デリバリーか デリシャスか", + "description": "何かを ほしがる 表情で {{delibirdName}}は 期待で 見つめる。 アイテムや お金で 満足できる かもしれません…", + "query": "何をあげますか?", + "invalid_selection": "このポケモンは そのような アイテムが 持っていない!", + "option": { + "1": { + "label": "お金をあげる", + "tooltip": "(-) {{delibirdName}}に{{money, money}}あげる\n(+) プレセントをもらう", + "selected": "お金を {{delibirdName}}に 投げます。\n興奮で ペチャペチャと 話し合います。$話しが 終わってから ありがたく プレセントを くれます!" + }, + "2": { + "label": "食べ物をあげる", + "tooltip": "(-) {{delibirdName}}に きのみ や ふっかつのタネ をあげる\n(+) プレセントをもらう", + "select_prompt": "あげたい アイテムを 選んでください", + "selected": "{{chosenItem}}を {{delibirdName}}に 投げます。\n興奮で ペチャペチャと 話し合います。$話しが 終わってから ありがたく プレセントを くれます!" + }, + "3": { + "label": "アイテムをあげる", + "tooltip": "(-) {{delibirdName}}に持ち物をあげる\n(+) プレセントをもらう", + "select_prompt": "あげたい アイテムを 選んでください", + "selected": "{{chosenItem}}を {{delibirdName}}に 投げます。\n興奮で ペチャペチャと 話し合います。$話しが 終わってから ありがたく プレセントを くれます!" + } + }, + "outro": "{{delibirdName}}の 群れが 嬉しそうに ちょこちょこ歩きで 帰ります。$何と 不思議な 遭遇!" +} diff --git a/src/locales/ja/mystery-encounters/department-store-sale-dialogue.json b/src/locales/ja/mystery-encounters/department-store-sale-dialogue.json new file mode 100644 index 00000000000..246672e4907 --- /dev/null +++ b/src/locales/ja/mystery-encounters/department-store-sale-dialogue.json @@ -0,0 +1,27 @@ +{ + "intro": "買い物袋が いっぱいな おねえさん だ。", + "speaker": "お客様", + "intro_dialogue": "こんにちは! すごーい セールの ために\nここに 来ましたね?$セール中に 特別な クーポンで\nアイテムを サービスとして 1つ もらえます!$もう 1つの クーポンが ありますから どうぞ!", + "title": "デパートで大特価セール", + "description": "各方面で 商品 いっぱい! クーポンで アイテムを もらえる 売り場が 4つ ようです。\n可能性は無限大!", + "query": "どの売り場に行きますか?", + "option": { + "1": { + "label": "技マシーンの売り場", + "tooltip": "(+) 技マシーンショップ" + }, + "2": { + "label": "栄養士の売り場", + "tooltip": "(+) えいようドリンクショップ" + }, + "3": { + "label": "戦闘良品の売り場", + "tooltip": "(+) 戦闘用ショップ" + }, + "4": { + "label": "ボールの売り場", + "tooltip": "(+) モンスターボールショップ" + } + }, + "outro": "何と お買い得! ちょくちょく 買いに行った 方が いいね" +} diff --git a/src/locales/ja/mystery-encounters/field-trip-dialogue.json b/src/locales/ja/mystery-encounters/field-trip-dialogue.json new file mode 100644 index 00000000000..a4613206579 --- /dev/null +++ b/src/locales/ja/mystery-encounters/field-trip-dialogue.json @@ -0,0 +1,31 @@ +{ + "intro": "先生と 生徒です!", + "speaker": "先生", + "intro_dialogue": "あら、 こんにちは! 少しも 生徒のために\nお時間を させていただきますか?$ポケモンの 技に付いて 教えています から\n実演を 見た方が 良いです。$手持ちポケモンの 技を 一つ 見させても 良いですか?", + "title": "修学旅行", + "description": "先生は ポケモンの 技の 実演を 頼んでいます。 技の 分類によって お礼に 便利な アイテムを くれるかもしれません。", + "query": "どの分類の 技を 見せますか?", + "option": { + "1": { + "label": "物理技", + "tooltip": "(+) 物理アイテム" + }, + "2": { + "label": "特殊技", + "tooltip": "(+) 特殊アイテム" + }, + "3": { + "label": "変化技", + "tooltip": "(+) 変化アイテム" + }, + "selected": "{{pokeName}}は {{move}}を 堂々と 実演します!" + }, + "second_option_prompt": "使いたい 技を 選んでください", + "incorrect": "……$あれは {{moveCategory}}では ありませんね!\n申し訳ありませんが、 何も あげられません。$さあ みんな、\nましな 実演を 探しに 行きましょう。", + "incorrect_exp": "……とにかく いい勉強に なりました?$ポケモンも 経験値を 得ました。", + "correct": "見せてくれて ありがとう ございます!\nこのアイテムは 冒険中に 役に立つと 良いです!", + "correct_exp": "{{pokeName}}も 貴重な 経験値を 得ました!", + "status": "変化技", + "physical": "物理技", + "special": "特殊技" +} diff --git a/src/locales/ja/mystery-encounters/fiery-fallout-dialogue.json b/src/locales/ja/mystery-encounters/fiery-fallout-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ja/mystery-encounters/fiery-fallout-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ja/mystery-encounters/fight-or-flight-dialogue.json b/src/locales/ja/mystery-encounters/fight-or-flight-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ja/mystery-encounters/fight-or-flight-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ja/mystery-encounters/fun-and-games-dialogue.json b/src/locales/ja/mystery-encounters/fun-and-games-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ja/mystery-encounters/fun-and-games-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ja/mystery-encounters/global-trade-system-dialogue.json b/src/locales/ja/mystery-encounters/global-trade-system-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ja/mystery-encounters/global-trade-system-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ja/mystery-encounters/lost-at-sea-dialogue.json b/src/locales/ja/mystery-encounters/lost-at-sea-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ja/mystery-encounters/lost-at-sea-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ja/mystery-encounters/mysterious-challengers-dialogue.json b/src/locales/ja/mystery-encounters/mysterious-challengers-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ja/mystery-encounters/mysterious-challengers-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ja/mystery-encounters/mysterious-chest-dialogue.json b/src/locales/ja/mystery-encounters/mysterious-chest-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ja/mystery-encounters/mysterious-chest-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ja/mystery-encounters/part-timer-dialogue.json b/src/locales/ja/mystery-encounters/part-timer-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ja/mystery-encounters/part-timer-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ja/mystery-encounters/safari-zone-dialogue.json b/src/locales/ja/mystery-encounters/safari-zone-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ja/mystery-encounters/safari-zone-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ja/mystery-encounters/shady-vitamin-dealer-dialogue.json b/src/locales/ja/mystery-encounters/shady-vitamin-dealer-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ja/mystery-encounters/shady-vitamin-dealer-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ja/mystery-encounters/slumbering-snorlax-dialogue.json b/src/locales/ja/mystery-encounters/slumbering-snorlax-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ja/mystery-encounters/slumbering-snorlax-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ja/mystery-encounters/teleporting-hijinks-dialogue.json b/src/locales/ja/mystery-encounters/teleporting-hijinks-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ja/mystery-encounters/teleporting-hijinks-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ja/mystery-encounters/the-expert-pokemon-breeder-dialogue.json b/src/locales/ja/mystery-encounters/the-expert-pokemon-breeder-dialogue.json new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/src/locales/ja/mystery-encounters/the-expert-pokemon-breeder-dialogue.json @@ -0,0 +1 @@ +{} diff --git a/src/locales/ja/mystery-encounters/the-pokemon-salesman-dialogue.json b/src/locales/ja/mystery-encounters/the-pokemon-salesman-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ja/mystery-encounters/the-pokemon-salesman-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ja/mystery-encounters/the-strong-stuff-dialogue.json b/src/locales/ja/mystery-encounters/the-strong-stuff-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ja/mystery-encounters/the-strong-stuff-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ja/mystery-encounters/the-winstrate-challenge-dialogue.json b/src/locales/ja/mystery-encounters/the-winstrate-challenge-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ja/mystery-encounters/the-winstrate-challenge-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ja/mystery-encounters/training-session-dialogue.json b/src/locales/ja/mystery-encounters/training-session-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ja/mystery-encounters/training-session-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ja/mystery-encounters/trash-to-treasure-dialogue.json b/src/locales/ja/mystery-encounters/trash-to-treasure-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/ja/mystery-encounters/trash-to-treasure-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/ja/mystery-encounters/uncommon-breed-dialogue.json b/src/locales/ja/mystery-encounters/uncommon-breed-dialogue.json new file mode 100644 index 00000000000..4e4e4038897 --- /dev/null +++ b/src/locales/ja/mystery-encounters/uncommon-breed-dialogue.json @@ -0,0 +1,26 @@ +{ + "intro": "普段の ポケモン じゃなそうです……!", + "title": "珍しい類型", + "description": "他の {{enemyPokemon}}と 比べて 特別そう です。@[TOOLTIP_TITLE]{特別な 技を 覚えている かな?} 普通に バトルで 捕まえてみることが できます が、 仲良くする 方法も ある かもしれません。", + "query": "どうしますか", + "option": { + "1": { + "label": "バトルする", + "tooltip": "(-) 勝負が厳しい\n(+) 相手が強くて捕まえられる", + "selected": "恐れないで {{enemyPokemon}}に 近寄ります!", + "stat_boost": "{{enemyPokemon}}の 強めた実力で 能力を上げた!" + }, + "2": { + "label": "食べ物をあげる", + "disabled_tooltip": "選ぶには 4個の きのみが 必要", + "tooltip": "(-) きのみを4個あげる\n(+) {{enemyPokemon}}が好きになる", + "selected": "{{enemyPokemon}}に きのみを なげます!$嬉しそうに 食べます!${{enemyPokemon}}は 手持ちに 入りたいです!" + }, + "3": { + "label": "仲良くする", + "disabled_tooltip": "選ぶには 手持ちポケモンが 特定な 技が 必要", + "tooltip": "(+) {{option3PrimaryName}}は{{option3PrimaryMove}}を使う\n(+) {{enemyPokemon}}は好きになる", + "selected": "{{enemyPokemon}}を 魅了するには {{option3PrimaryName}}は {{option3PrimaryMove}}を 使います!${{enemyPokemon}}が 手持ちに 入りたいです!" + } + } +} diff --git a/src/locales/ja/mystery-encounters/weird-dream-dialogue.json b/src/locales/ja/mystery-encounters/weird-dream-dialogue.json new file mode 100644 index 00000000000..02311e19119 --- /dev/null +++ b/src/locales/ja/mystery-encounters/weird-dream-dialogue.json @@ -0,0 +1,22 @@ +{ + "intro": "影で 隠れている 謎の 女の人が 道を さえぎる。\n何か 不安に なる……", + "speaker": "女の人", + "intro_dialogue": "あなたの 未来たちも 過去たちも 全て 見えます。$我が子よ、 見えますか?", + "title": "???", + "description": "女の人の 言葉は 頭に 響いています。 一人の声じゃなくて、 全ての 異世界と 時間軸から 数多な 声々でした。 クラッと めまいがして、 あの質問が 頭で めぐります……\n\n@[TOOLTIP_TITLE]{「あなたの 未来たちも 過去たちも 全て 見えます。 我が子よ、 見えますか?」}", + "query": "どうしますか?", + "option": { + "1": { + "label": "「見えます。」", + "tooltip": "@[SUMMARY_GREEN]{(?) 手持ちポケモンに影響}", + "selected": "女の人は 手を 伸ばすと\n全部は 真っ黒に なります。$そして……@d{64} 何事も 見えます。\n時間軸たち。 自分たち。\n過去たち。 未来たち。 $自分を 作り出した 何事も\nいつか 成る 何事も……@d{64}", + "cutscene": "手持ちポケモンも 見えます……@d{32} 各現実 から\n集中してきて 混じって 新しい 生存たちに なります……@d{64}", + "dream_complete": "目が 覚めると、 女の人が (女か? 幽霊か?) 消えました……$.@d{32}.@d{32}.@d{32}$手持ちポケモンが 変わった……\nもしくは 前と 同じ 手持ち かな……?" + }, + "2": { + "label": "さっさと逃げる", + "tooltip": "(-) 手持ちポケモンに影響", + "selected": "ジーンと握った 意識を 取り戻して さっさと 逃げます。$一旦止まって 気を取り戻すと 手持ちポケモンを 見ます。$なんとなく 全員の レベルが 減っている ようです!" + } + } +} diff --git a/src/locales/ja/pokemon-form.json b/src/locales/ja/pokemon-form.json index 76124904456..8ef61ec2c14 100644 --- a/src/locales/ja/pokemon-form.json +++ b/src/locales/ja/pokemon-form.json @@ -1,4 +1,5 @@ { + "pikachu": "通常", "pikachuCosplay": "コスプレ", "pikachuCoolCosplay": "クールなコスプレ", "pikachuBeautyCosplay": "きれいなコスプレ", @@ -6,7 +7,9 @@ "pikachuSmartCosplay": "かしこいコスプレ", "pikachuToughCosplay": "パワフルなコスプレ", "pikachuPartner": "パートナー", + "eevee": "通常", "eeveePartner": "パートナー", + "pichu": "通常", "pichuSpiky": "ギザみみ", "unownA": "A", "unownB": "B", @@ -36,36 +39,65 @@ "unownZ": "Z", "unownExclamation": "!", "unownQuestion": "?", + "castform": "ポワルンのすがた", "castformSunny": "たいよう", "castformRainy": "あまみず", "castformSnowy": "ゆきぐも", - "deoxysNormal": "ノーマル", - "burmyPlant": "くさき", - "burmySandy": "すなち", - "burmyTrash": "ゴミ", + "deoxysNormal": "ノーマルフォルム", + "deoxysAttack": "アタック", + "deoxysDefense": "ディフェンス", + "deoxysSpeed": "スピード", + "burmyPlant": "くさきのミノ", + "burmySandy": "すなちのミノ", + "burmyTrash": "ゴミのミノ", + "cherubiOvercast": "ネガフォルム", + "cherubiSunshine": "ポジフォルム", "shellosEast": "ひがし", "shellosWest": "にし", + "rotom": "通常", "rotomHeat": "ヒート", "rotomWash": "ウォッシュ", "rotomFrost": "フロスト", "rotomFan": "スピン", "rotomMow": "カット", - "giratinaAltered": "アナザー", - "shayminLand": "ランド", + "dialga": "通常", + "dialgaOrigin": "オリジンフォルム", + "palkia": "通常", + "palkiaOrigin": "オリジンフォルム", + "giratinaAltered": "アナザーフォルム", + "giratinaOrigin": "オリジンフォルム", + "shayminLand": "ランドフォルム", + "shayminSky": "スカイフォルム", "basculinRedStriped": "赤筋", "basculinBlueStriped": "青筋", "basculinWhiteStriped": "白筋", + "darumaka": "ノーマルモード", + "darumakaZen": "ダルマモード", "deerlingSpring": "春", "deerlingSummer": "夏", "deerlingAutumn": "秋", "deerlingWinter": "冬", - "tornadusIncarnate": "けしん", - "thundurusIncarnate": "けしん", - "landorusIncarnate": "けしん", - "keldeoOrdinary": "いつも", + "tornadusIncarnate": "けしんフォルム", + "tornadusTherian": "れいじゅうフォルム", + "thundurusIncarnate": "けしんフォルム", + "thundurusTherian": "れいじゅうフォルム", + "landorusIncarnate": "けしんフォルム", + "landorusTherian": "れいじゅうフォルム", + "kyurem": "通常", + "kyuremBlack": "ブラックキュレム", + "kyuremWhite": "ホワイトキュレム", + "keldeoOrdinary": "いつものすがた", + "keldeoResolute": "かくごのすがた", "meloettaAria": "ボイス", "meloettaPirouette": "ステップ", + "genesect": "通常", + "genesectShock": "イナズマカセット", + "genesectBurn": "ブレイズカセット", + "genesectChill": "フリーズカセット", + "genesectDouse": "アクアカセット", + "froakie": "通常", "froakieBattleBond": "きずなへんげ", + "froakieAsh": "サトシゲッコウガ", "scatterbugMeadow": "はなぞの", "scatterbugIcySnow": "ひょうせつ", "scatterbugPolar": "ゆきぐに", @@ -91,6 +123,7 @@ "flabebeOrange": "オレンジ", "flabebeBlue": "青", "flabebeWhite": "白", + "furfrou": "やせいのすがた", "furfrouHeart": "ハート", "furfrouStar": "スター", "furfrouDiamond": "ダイア", @@ -100,9 +133,14 @@ "furfrouLaReine": "クイーン", "furfrouKabuki": "カブキ", "furfrouPharaoh": "キングダム", - "pumpkabooSmall": "ちいさい", - "pumpkabooLarge": "おおきい", - "pumpkabooSuper": "とくだい", + "espurrMale": "オス", + "espurrFemale": "メス", + "honedgeShiled": "シールドフォルム", + "honedgeBlade": "ブレードフォルム", + "pumpkaboo": "ふつうのサイズ", + "pumpkabooSmall": "ちいさいサイズ", + "pumpkabooLarge": "おおきいサイズ", + "pumpkabooSuper": "とくだいサイズ", "xerneasNeutral": "リラックス", "xerneasActive": "アクティブ", "zygarde50": "50%フォルム", @@ -110,11 +148,37 @@ "zygarde50Pc": "50%フォルム スワームチェンジ", "zygarde10Pc": "10%フォルム スワームチェンジ", "zygardeComplete": "パーフェクトフォルム", + "hoopa": "いましめられしフーパ", + "hoopaUnbound": "ときはなたれしフーパ", "oricorioBaile": "めらめら", "oricorioPompom": "ぱちぱち", "oricorioPau": "ふらふら", "oricorioSensu": "まいまい", + "rockruff": "通常", "rockruffOwnTempo": "マイペース", + "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": "黄 りゅうせい", @@ -131,22 +195,63 @@ "miniorViolet": "紫", "mimikyuDisguised": "ばけたすがた", "mimikyuBusted": "ばれたすがた", - "magearnaOriginal": "500ねんまえ", + "necrozma": "ネクロズマ", + "necrozmaDuskMane": "たそがれのたてがみ", + "necrozmaDawnWings": "あかつきのつばさ", + "necrozmaUltra": "ウルトラネクロズマ", + "magearna": "通常", + "magearnaOriginal": "500ねんまえのいろ", + "marshadow": "通常", "marshadowZenith": "Zパワー", + "cramorant": "通常", + "cramorantGulping": "うのみのすがた", + "cramorantGorging": "まるのみのすがた", + "toxelAmped": "ハイなすがた", + "toxelLowkey": "ローなすがた", "sinisteaPhony": "がんさく", "sinisteaAntique": "しんさく", - "eiscueNoIce": "ナイスなし", + "milceryVanillaCream": "ミルキィバニラ", + "milceryRubyCream": "ミルキィルビー", + "milceryMatchaCream": "ミルキィまっちゃ", + "milceryMintCream": "ミルキィミント", + "milceryLemonCream": "ミルキィレモン", + "milcerySaltedCream": "ミルキィソルト", + "milceryRubySwirl": "ルビーミックス", + "milceryCaramelSwirl": "キャラメルミックス", + "milceryRainbowSwirl": "トリプルミックス", + "eiscue": "アイスフェイス", + "eiscueNoIce": "ナイスフェイス", "indeedeeMale": "オス", "indeedeeFemale": "メス", - "morpekoFullBelly": "まんぷく", + "morpekoFullBelly": "まんぷくもよう", + "morpekoHangry": "はらぺこもよう", "zacianHeroOfManyBattles": "れきせんのゆうしゃ", + "zacianCrowned": "けんのおう", "zamazentaHeroOfManyBattles": "れきせんのゆうしゃ", + "zamazentaCrowned": "たてのおう", + "kubfuSingleStrike": "いちげきのかた", + "kubfuRapidStrike": "れんげきのかた", + "zarude": "通常", "zarudeDada": "とうちゃん", - "enamorusIncarnate": "けしん", + "calyrex": "通常", + "calyrexIce": "はくばじょうのすがた", + "calyrexShadow": "こくばじょうのすがた", + "basculinMale": "オス", + "basculinFemale": "メス", + "enamorusIncarnate": "けしんフォルム", + "enamorusTherian": "れいじゅうフォルム", + "lechonkMale": "オス", + "lechonkFemale": "メス", + "tandemausFour": "4ひきかぞく", + "tandemausThree": "3びきかぞく", "squawkabillyGreenPlumage": "グリーンフェザー", "squawkabillyBluePlumage": "ブルーフェザー", "squawkabillyYellowPlumage": "イエローフェザー", "squawkabillyWhitePlumage": "ホワイトフェザー", + "dunsparceTwo": "ふたふしフォルム", + "dunsparceThree": "みつふしフォルム", + "finizenZero": "ナイーブフォルム", + "finizenHero": "マイティフォルム", "tatsugiriCurly": "そったすがた", "tatsugiriDroopy": "たれたすがた", "tatsugiriStretchy": "のびたすがた", @@ -164,7 +269,22 @@ "miraidonGlideMode":"グライドモード", "poltchageistCounterfeit": "マガイモノ", "poltchageistArtisan": "タカイモノ", + "poltchageistUnremarkable": "ボンサクのすがた", + "poltchageistMasterpiece": "ケッサクのすがた", + "ogerponTealMask": "みどりのめん", + "ogerponTealMaskTera": "みどりのめん テラスタル", + "ogerponWellspringMask": "いどのめん", + "ogerponWellspringMaskTera": "いどのめん テラスタル", + "ogerponHearthflameMask": "かまどのめん", + "ogerponHearthflameMaskTera": "かまどのめん テラスタル", + "ogerponCornerstoneMask": "いしずえのめん", + "ogerponCornerstoneMaskTera": "いしずえのめん テラスタル", + "terpagos": "ノーマルフォルム", + "terpagosTerastal": "テラスタルフォルム", + "terpagosStellar": "ステラフォルム", + "galarDarumaka": "ノーマルモード", + "galarDarumakaZen": "ダルマモード", "paldeaTaurosCombat": "コンバット", "paldeaTaurosBlaze": "ブレイズ", "paldeaTaurosAqua": "ウォーター" -} \ No newline at end of file +} diff --git a/src/locales/ja/trainer-classes.json b/src/locales/ja/trainer-classes.json index aba294fbbbd..a104e4e827e 100644 --- a/src/locales/ja/trainer-classes.json +++ b/src/locales/ja/trainer-classes.json @@ -126,5 +126,8 @@ "skull_grunts": "スカル団の下っ端", "macro_grunt": "マクロコスモスのトレーナ", "macro_grunt_female": "マクロコスモスのトレーナ", - "macro_grunts": "マクロコスモスのトレーナ" + "macro_grunts": "マクロコスモスのトレーナ", + "star_grunt": "スター団の下っ端", + "star_grunt_female": "スター団の下っ端", + "star_grunts": "スター団の下っ端" } diff --git a/src/locales/ja/trainer-names.json b/src/locales/ja/trainer-names.json index 70841734b5b..2782043b578 100644 --- a/src/locales/ja/trainer-names.json +++ b/src/locales/ja/trainer-names.json @@ -141,6 +141,11 @@ "faba": "ザオボー", "plumeria": "プルメリ", "oleana": "オリーヴ", + "giacomo": "ピーニャ", + "mela": "メロコ", + "atticus": "シュウメイ", + "ortega": "オルティガ", + "eri": "ビワ", "maxie": "マツブサ", "archie": "アオギリ", @@ -150,6 +155,7 @@ "lusamine": "ルザミーネ", "guzma": "グズマ", "rose": "ローズ", + "cassiopeia": "ボタン", "blue_red_double": "グリーンとレッド", "red_blue_double": "レッドとグリーン", @@ -160,5 +166,18 @@ "alder_iris_double": "アデクとアイリス", "iris_alder_double": "アイリスとアデク", "marnie_piers_double": "マリィとネズ", - "piers_marnie_double": "ネズとマリィ" + "piers_marnie_double": "ネズとマリィ", + + "buck": "バク", + "cheryl": "モミ", + "marley": "マイ", + "mira": "ミル", + "riley": "ゲン", + "victor": "ハルヒコ", + "victoria": "ヤスエ", + "vivi": "アキ", + "vicky": "ミツヨ", + "vito": "リョウヘイ", + "bug_type_superfan": "むしマニア", + "expert_pokemon_breeder": "ブリーダー名人" } diff --git a/src/locales/ja/trainer-titles.json b/src/locales/ja/trainer-titles.json index b3829c701e5..094de5fe101 100644 --- a/src/locales/ja/trainer-titles.json +++ b/src/locales/ja/trainer-titles.json @@ -19,6 +19,7 @@ "aether_boss": "エーテル代表", "skull_boss": "スカル団ボス", "macro_boss": "マクロコスモス社長", + "star_boss": "スター団ボス", "rocket_admin": "ロケット団幹部", "rocket_admin_female": "ロケット団幹部", @@ -34,5 +35,8 @@ "flare_admin_female": "フレア団幹部", "aether_admin": "エーテル支部長", "skull_admin": "スカル団幹部", - "macro_admin": "マクロコスモス" + "macro_admin": "マクロコスモス", + "star_admin": "スター団 組ボス", + + "the_winstrates": "カチヌキさんち" } diff --git a/src/locales/ko/ability.json b/src/locales/ko/ability.json index 420d27c6011..631a6864e85 100644 --- a/src/locales/ko/ability.json +++ b/src/locales/ko/ability.json @@ -1237,6 +1237,6 @@ }, "poisonPuppeteer": { "name": "독조종", - "description": "복숭악동의 기술에 의해 독 상태가 된 상대는 혼란 상태도 되어 버린다." + "description": "이 기술에 의해 독 상태가 된 상대는 혼란 상태도 되어 버린다." } } \ No newline at end of file diff --git a/src/locales/ko/achv.json b/src/locales/ko/achv.json index 9364c1c55b6..e1bf57a8ed1 100644 --- a/src/locales/ko/achv.json +++ b/src/locales/ko/achv.json @@ -264,5 +264,9 @@ "INVERSE_BATTLE": { "name": "상성 전문가(였던 것)", "description": "거꾸로 배틀 챌린지 모드 클리어." + }, + "BREEDERS_IN_SPACE": { + "name": "충격!우주에 브리더 진짜 계심ㄷㄷ", + "description": "우주 바이옴에서 포켓몬 전문 브리더에게 승리." } } diff --git a/src/locales/ko/battle.json b/src/locales/ko/battle.json index 154ca04fd49..987f816bbf6 100644 --- a/src/locales/ko/battle.json +++ b/src/locales/ko/battle.json @@ -14,6 +14,10 @@ "moneyWon": "상금으로\n₽{{moneyAmount}}을 손에 넣었다!", "moneyPickedUp": "₽{{moneyAmount}}을 주웠다!", "pokemonCaught": "신난다-!\n{{pokemonName}}[[를]] 잡았다!", + "pokemonObtained": "{{pokemonName}}[[를]] 손에 넣었다!", + "pokemonBrokeFree": "안 돼!\n포켓몬이 볼에서 나와 버렸다!", + "pokemonFled": "야생 {{pokemonName}}[[는]]\n도망쳤다!", + "playerFled": "{{pokemonName}}[[로]]부터 도망쳤다!", "addedAsAStarter": "{{pokemonName}}[[가]]\n스타팅 포켓몬에 추가되었다!", "partyFull": "지닌 포켓몬이 가득 찼습니다. {{pokemonName}}[[를]]\n대신해 포켓몬을 놓아주시겠습니까?", "pokemon": "포켓몬", @@ -52,6 +56,7 @@ "noPokeballTrainer": "다른 트레이너의 포켓몬은 잡을 수 없다!", "noPokeballMulti": "안돼! 2마리 있어서\n목표를 정할 수가 없어…!", "noPokeballStrong": "너무 강해서 잡을 수가 없다!\n먼저 약화시켜야 한다!", + "noPokeballMysteryEncounter": "이 포켓몬은 잡을 수 없습니다!", "noEscapeForce": "본 적 없는 힘이\n도망칠 수 없게 한다.", "noEscapeTrainer": "안돼! 승부 도중에\n상대에게 등을 보일 순 없어!", "noEscapePokemon": "{{pokemonName}}의 {{moveName}}때문에\n{{escapeVerb}} 수 없다!", @@ -99,5 +104,6 @@ "unlockedSomething": "{{unlockedThing}}[[가]]\n해금되었다.", "congratulations": "축하합니다!", "beatModeFirstTime": "{{speciesName}}[[가]] {{gameMode}} 모드를 처음으로 클리어했다!\n{{newModifier}}[[를]] 손에 넣었다!", - "ppReduced": "{{targetName}}의\n{{moveName}}[[를]] {{reduction}} 깎았다!" + "ppReduced": "{{targetName}}의\n{{moveName}}[[를]] {{reduction}} 깎았다!", + "mysteryEncounterAppeared": "어라?" } diff --git a/src/locales/ko/bgm-name.json b/src/locales/ko/bgm-name.json index 5295e2d8708..1ae9e37d189 100644 --- a/src/locales/ko/bgm-name.json +++ b/src/locales/ko/bgm-name.json @@ -83,9 +83,11 @@ "battle_aether_grunt": "SM 에테르재단 배틀", "battle_skull_grunt": "SM 스컬단 배틀", "battle_macro_grunt": "SWSH 트레이너 배틀", + "battle_star_grunt": "SV 스타단 배틀", "battle_galactic_admin": "BDSP 갤럭시단 간부 배틀", "battle_skull_admin": "SM 스컬단 간부 배틀", "battle_oleana": "SWSH 올리브 배틀", + "battle_star_admin": "SV 스타단 보스 배틀", "battle_rocket_boss": "USUM 비주기 배틀", "battle_aqua_magma_boss": "ORAS 아강 & 마적 배틀", "battle_galactic_boss": "BDSP 태홍 배틀", @@ -94,6 +96,7 @@ "battle_aether_boss": "SM 루자미네 배틀", "battle_skull_boss": "SM 구즈마 배틀", "battle_macro_boss": "SWSH 로즈 배틀", + "battle_star_boss": "SV 카시오페아 배틀", "abyss": "불가사의 던전 하늘의 탐험대 어둠의 화구", "badlands": "불가사의 던전 하늘의 탐험대 불모의 계곡", "beach": "불가사의 던전 하늘의 탐험대 축축한 암반", @@ -107,17 +110,17 @@ "forest": "불가사의 던전 하늘의 탐험대 검은 숲", "grass": "불가사의 던전 하늘의 탐험대 사과의 숲", "graveyard": "불가사의 던전 하늘의 탐험대 신비의 숲", - "ice_cave": "불가사의 던전 하늘의 탐험대 광대한 얼음산", + "ice_cave": "Firel - -50°C", "island": "불가사의 던전 하늘의 탐험대 연안의 암반", - "jungle": "Lmz - Jungle", - "laboratory": "Firel - Laboratory", - "lake": "불가사의 던전 하늘의 탐험대 수정 동굴", + "jungle": "Lmz - 정글", + "laboratory": "Firel - 연구소", + "lake": "Lmz - 호수", "meadow": "불가사의 던전 하늘의 탐험대 하늘 꼭대기 숲", "metropolis": "Firel - Metropolis", "mountain": "불가사의 던전 하늘의 탐험대 뿔산", - "plains": "불가사의 던전 하늘의 탐험대 하늘 꼭대기 초원", - "power_plant": "불가사의 던전 하늘의 탐험대 일렉트릭 평원", - "ruins": "불가사의 던전 하늘의 탐험대 봉인의 암반", + "plains": "Firel - Route 888", + "power_plant": "Firel - 기어르", + "ruins": "Lmz - 고대 유적", "sea": "Andr06 - Marine Mystique", "seabed": "Firel - Seabed", "slum": "Andr06 - Sneaky Snom", @@ -127,7 +130,7 @@ "tall_grass": "불가사의 던전 하늘의 탐험대 짙은 안개의 숲", "temple": "불가사의 던전 하늘의 탐험대 파수꾼의 동굴", "town": "불가사의 던전 하늘의 탐험대 랜덤 던전 테마 3", - "volcano": "불가사의 던전 하늘의 탐험대 열수의 동굴", + "volcano": "Firel - Twisturn Volcano", "wasteland": "불가사의 던전 하늘의 탐험대 환상의 대지", "encounter_ace_trainer": "BW 눈이 마주치면 승부! (엘리트 트레이너)", "encounter_backpacker": "BW 눈이 마주치면 승부! (등산가)", @@ -145,5 +148,11 @@ "encounter_youngster": "BW 눈이 마주치면 승부! (반바지 꼬마)", "heal": "BW 포켓몬 센터", "menu": "불가사의 던전 하늘의 탐험대 포켓몬 세계에 온 것을 환영한다!", - "title": "불가사의 던전 하늘의 탐험대 메뉴 테마" + "title": "불가사의 던전 하늘의 탐험대 메뉴 테마", + + "mystery_encounter_weird_dream": "불가사의 던전 하늘의 탐험대 시한의 탑 최상부", + "mystery_encounter_fun_and_games": "불가사의 던전 하늘의 탐험대 푸크린 길드", + "mystery_encounter_gen_5_gts": "BW GTS", + "mystery_encounter_gen_6_gts": "XY GTS", + "mystery_encounter_delibirdy": "Firel - DeliDelivery!" } diff --git a/src/locales/ko/config.ts b/src/locales/ko/config.ts index 978cdc83002..049fb016d33 100644 --- a/src/locales/ko/config.ts +++ b/src/locales/ko/config.ts @@ -53,7 +53,49 @@ import terrain from "./terrain.json"; import modifierSelectUiHandler from "./modifier-select-ui-handler.json"; import moveTriggers from "./move-trigger.json"; import runHistory from "./run-history.json"; +import mysteryEncounterMessages from "./mystery-encounter-messages.json"; +import lostAtSea from "./mystery-encounters/lost-at-sea-dialogue.json"; +import mysteriousChest from "./mystery-encounters/mysterious-chest-dialogue.json"; +import mysteriousChallengers from "./mystery-encounters/mysterious-challengers-dialogue.json"; +import darkDeal from "./mystery-encounters/dark-deal-dialogue.json"; +import departmentStoreSale from "./mystery-encounters/department-store-sale-dialogue.json"; +import fieldTrip from "./mystery-encounters/field-trip-dialogue.json"; +import fieryFallout from "./mystery-encounters/fiery-fallout-dialogue.json"; +import fightOrFlight from "./mystery-encounters/fight-or-flight-dialogue.json"; +import safariZone from "./mystery-encounters/safari-zone-dialogue.json"; +import shadyVitaminDealer from "./mystery-encounters/shady-vitamin-dealer-dialogue.json"; +import slumberingSnorlax from "./mystery-encounters/slumbering-snorlax-dialogue.json"; +import trainingSession from "./mystery-encounters/training-session-dialogue.json"; +import theStrongStuff from "./mystery-encounters/the-strong-stuff-dialogue.json"; +import pokemonSalesman from "./mystery-encounters/the-pokemon-salesman-dialogue.json"; +import offerYouCantRefuse from "./mystery-encounters/an-offer-you-cant-refuse-dialogue.json"; +import delibirdy from "./mystery-encounters/delibirdy-dialogue.json"; +import absoluteAvarice from "./mystery-encounters/absolute-avarice-dialogue.json"; +import aTrainersTest from "./mystery-encounters/a-trainers-test-dialogue.json"; +import trashToTreasure from "./mystery-encounters/trash-to-treasure-dialogue.json"; +import berriesAbound from "./mystery-encounters/berries-abound-dialogue.json"; +import clowningAround from "./mystery-encounters/clowning-around-dialogue.json"; +import partTimer from "./mystery-encounters/part-timer-dialogue.json"; +import dancingLessons from "./mystery-encounters/dancing-lessons-dialogue.json"; +import weirdDream from "./mystery-encounters/weird-dream-dialogue.json"; +import theWinstrateChallenge from "./mystery-encounters/the-winstrate-challenge-dialogue.json"; +import teleportingHijinks from "./mystery-encounters/teleporting-hijinks-dialogue.json"; +import bugTypeSuperfan from "./mystery-encounters/bug-type-superfan-dialogue.json"; +import funAndGames from "./mystery-encounters/fun-and-games-dialogue.json"; +import uncommonBreed from "./mystery-encounters/uncommon-breed-dialogue.json"; +import globalTradeSystem from "./mystery-encounters/global-trade-system-dialogue.json"; +import expertPokemonBreeder from "./mystery-encounters/the-expert-pokemon-breeder-dialogue.json"; +/** + * Dialogue/Text token injection patterns that can be used: + * - `$` will be treated as a new line for Message and Dialogue strings. + * - `@d{}` will add a time delay to text animation for Message and Dialogue strings. + * - `@s{}` will play a specified sound effect for Message and Dialogue strings. + * - `@f{}` will fade the screen to black for the given duration, then fade back in for Message and Dialogue strings. + * - `{{}}` (MYSTERY ENCOUNTERS ONLY) will auto-inject the matching dialogue token value that is stored in {@link IMysteryEncounter.dialogueTokens}. + * - (see [i18next interpolations](https://www.i18next.com/translation-function/interpolation)) for more details. + * - `@[]{}` (STATIC TEXT ONLY, NOT USEABLE WITH {@link UI.showText()} OR {@link UI.showDialogue()}) will auto-color the given text to a specified {@link TextStyle} (e.g. `TextStyle.SUMMARY_GREEN`). + */ export const koConfig = { ability, abilityTriggers, @@ -110,4 +152,40 @@ export const koConfig = { modifierSelectUiHandler, moveTriggers, runHistory, + mysteryEncounter: { + // DO NOT REMOVE + "unit_test_dialogue": "{{test}}{{test}} {{test{{test}}}} {{test1}} {{test\}} {{test\\}} {{test\\\}} {test}}", + mysteriousChallengers, + mysteriousChest, + darkDeal, + fightOrFlight, + slumberingSnorlax, + trainingSession, + departmentStoreSale, + shadyVitaminDealer, + fieldTrip, + safariZone, + lostAtSea, + fieryFallout, + theStrongStuff, + pokemonSalesman, + offerYouCantRefuse, + delibirdy, + absoluteAvarice, + aTrainersTest, + trashToTreasure, + berriesAbound, + clowningAround, + partTimer, + dancingLessons, + weirdDream, + theWinstrateChallenge, + teleportingHijinks, + bugTypeSuperfan, + funAndGames, + uncommonBreed, + globalTradeSystem, + expertPokemonBreeder + }, + mysteryEncounterMessages }; diff --git a/src/locales/ko/dialogue.json b/src/locales/ko/dialogue.json index 13fcd64a8d3..3b998c8e218 100644 --- a/src/locales/ko/dialogue.json +++ b/src/locales/ko/dialogue.json @@ -715,12 +715,16 @@ "encounter": { "1": "당신은 여기서 끝날 것 같네요!", "2": "당신은 트레이너 맞죠? 하지만 우리를 방해하는 건 용납 못 합니다!", - "3": "매크로코스모스 생명입니다! 가입하신 실비보험은 있으신가요?" + "3": "매크로코스모스 생명입니다! 가입하신 실비보험은 있으신가요?", + "4": "찾았다! 그렇다면 포켓몬 승부입니다!", + "5": "올리브님에게 혼나기 싫으니까 포기하지 않겠습니다!" }, "victory": { "1": "순순히 물러나는 것 말고는 선택지가 없군요.", "2": "용돈을 뺏기다니… 패배는 적자로 이어지는구나…", - "3": "매크로코스모스 생명에 관한 일이라면 누구에게도 지지 않을 텐데…" + "3": "매크로코스모스 생명에 관한 일이라면 누구에게도 지지 않을 텐데…", + "4": "심지어 포켓몬 교체도 했는데…", + "5": "승부도 안 되면! 도망치는 수밖에 없다!" } }, "oleana": { @@ -735,6 +739,73 @@ "3": "아아… 이 올리브님 조금 지쳤어…" } }, + "star_grunt": { + "encounter": { + "1": "우리는 우는 아이도 웃게 하는 스타단!", + "2": "멤버들을 총동원해서 공격할 테니, 수고하셨스타~! ★", + "3": "빨리 돌아가지 그래? 아니면 방어권을 행사하는 수밖에 없다고?", + "4": "미안하지만 돌아가지 않겠다면 힘으로라도 쫓아내 주겠어!", + "4_female": "미안하지만 돌아가지 않겠다면 힘으로라도 쫓아내 주겠어!", + "5": "아~ 또 사람이 와 버렸잖아." + }, + "victory": { + "1": "저 하늘의 별이 되는 건 나였네!?", + "2": "스타단에 들어가면 다들 쫄아서 꼭대기에서 군림할 수 있는 거 아니었어?", + "3": "나의 방어권이…!", + "4": "수, 수고하셨스타… ★", + "5": "스타단 신입이 이렇게 귀찮은 일일 줄이야…" + } + }, + "giacomo": { + "encounter": { + "1": "스타단에게 싸움을 걸다니, 넌 정말 겁이 없구나?", + "2": "레퀴엠을 들려줄 테니! 자! 파티를 시작하자고!" + }, + "victory": { + "1": "결국 이렇게 되는 건가…", + "2": "레퀴엠을 들은 건 내 쪽이었네." + } + }, + "mela": { + "encounter": { + "1": "…우리에게 싸움을 걸었다는 녀석이 너냐? …터뜨려 주지.", + "2": "좋아! …그럼, 한번 터뜨려 볼까!" + }, + "victory": { + "1": "이걸로 끝인 건가? …이런 이런.", + "2": "그렇게 타오르고 타오르다… 완전히 연소해 버린 건가…" + } + }, + "atticus": { + "encounter": { + "1": "스타단을 해하려 하는 괘씸한 자는 독으로 해치울 뿐!", + "2": "그럼, 진검승부를 펼쳐 봅시다!" + }, + "victory": { + "1": "동지들이여, 미안하오…", + "2": "미련 하나 남지 않을 정도로 명백한 소인의 완패였소…" + } + }, + "ortega": { + "encounter": { + "1": "잔뜩 귀여워해 줄 테니까 울며불며 돌아갈 준비나 하라고!", + "2": "어디 한번 여유롭게 굴어 보시지. 내가 이길 테니까!" + }, + "victory": { + "1": "어째서 내가 지는 건데!? 대체 왜! 어째서 진 거냐고~!!", + "2": "젠장~! 너무 강하잖아! 비겁해!" + } + }, + "eri": { + "encounter": { + "1": "어디의 누가 됐든 스타단을 노리는 자는 박살 낼 뿐!", + "2": "맞았으면 그저 맞받아칠 뿐!! 승리는 끝까지 서 있는 사람의 것이니까!!" + }, + "victory": { + "1": "얘들아… 미안해…", + "2": "열심히… 했는데… 나는 역시… 부족했어…" + } + }, "rocket_boss_giovanni_1": { "encounter": { "1": "그래서! 여기까지 오다니, 감탄이 절로 나오는군!" @@ -933,6 +1004,138 @@ "1": "너희가 보기에는 내가 끔찍한 짓을 벌이고 있는 것처럼 보이겠지? 조금도 이해가 가지 않을 거야.\n$하지만 난 가라르지방의 영원한 번영을 위해서 무한한 에너지를 가져다줘야 해." } }, + "star_boss_penny_1": { + "encounter": { + "1": "내가 바로 스타단의 진 보스, 카시오페아… \n$…진 보스의 힘 앞에 무릎 꿇게 만들어 주겠어!!" + }, + "victory": { + "1": "… … …" + }, + "defeat": { + "1": "후후…" + } + }, + "star_boss_penny_2": { + "encounter": { + "1": "승부인 이상, 봐주지 않아! 그것이 스타단의 규칙이니까! \n$브이브이 파워로 우주의 먼지로 만들어 주겠어!!" + }, + "victory": { + "1": "이걸로 진짜 끝이구나…" + }, + "defeat": { + "1": "군더더기가 없는 실력이네. 보스들이 당한 걸 생각해 보면 말이야." + } + }, + "stat_trainer_buck": { + "encounter": { + "1": "…말해두겠지만 나 강하다고!\n놀라기나 해라!", + "2": "몬스터볼 안에서 내 포켓몬들이 떨고 있다!\n이게 흥분해서 떨린다는 것이구나!" + }, + "victory": { + "1": "이히히!\n너 열정이 뜨거운걸!!", + "2": "이히히!\n너 열정이 뜨거운걸!!" + }, + "defeat": { + "1": "우왓!\n연료가 다 떨어졌나 본데?", + "2": "우왓!\n연료가 다 떨어졌나 본데?" + } + }, + "stat_trainer_cheryl": { + "encounter": { + "1": "내 포켓몬들\n싸우고 싶어서 근질근질하고 있었어.", + "2": "내 포켓몬들\n꽤나 개구쟁이라니까." + }, + "victory": { + "1": "공격하는 것과 방어하는 것\n그 밸런스 유지가 큰일이네.", + "2": "공격하는 것과 방어하는 것\n그 밸런스 유지가 큰일이네." + }, + "defeat": { + "1": "네 포켓몬들 다친 것 같은데?", + "2": "네 포켓몬들 다친 것 같은데?" + } + }, + "stat_trainer_marley": { + "encounter": { + "1": "…좋아.\n최선을 다할게.", + "2": "…좋아.\n난…지지 않아…!" + }, + "victory": { + "1": "…으윽.", + "2": "…으윽." + }, + "defeat": { + "1": "…잘 가.", + "2": "…잘 가." + } + }, + "stat_trainer_mira": { + "encounter": { + "1": "너 깜짝 놀랄 거야!", + "2": "더는 헤매거나 하지 않는다는 것을 너에게 보여줄게!" + }, + "victory": { + "1": "이거라면 이곳에서\n미루가 활약할 수 없을까.", + "2": "이거라면 이곳에서\n미루가 활약할 수 없을까." + }, + "defeat": { + "1": "미루가 이길 줄 알았어!", + "2": "미루가 이길 줄 알았어!" + } + }, + "stat_trainer_riley": { + "encounter": { + "1": "포켓몬 승부야말로\n우리들의 인사 방식이지!", + "2": "전력을 다해서\n네 포켓몬을 쓰러뜨리겠다." + }, + "victory": { + "1": "싸우거나 편을 만들거나…\n트레이너들은 좋겠어.", + "2": "싸우거나 편을 만들거나…\n트레이너들은 좋겠어." + }, + "defeat": { + "1": "꽤 인상적인 실력이었어.\n다음엔 더 잘해봐.", + "2": "꽤 인상적인 실력이었어.\n다음엔 더 잘해봐." + } + }, + "winstrates_victor": { + "encounter": { + "1": "멋진 배짱이군! 마음에 들었다!" + }, + "victory": { + "1": "아-앗! 생각보다 더 강하구나!" + } + }, + "winstrates_victoria": { + "encounter": { + "1": "어머머! 생각보다 어리군요?!$우리 남편을 이기다니\n정말 굉장한 실력의 트레이너인가 보죠?$자 그럼 이번엔 저와 승부해요!" + }, + "victory": { + "1": "에구머니나!\n어쩜 그렇게 강하신가요?!" + } + }, + "winstrates_vivi": { + "encounter": { + "1": "엄마보다 강하다니 굉장하다!$하지만 나도 꽤 강하다고!\n진짜라니까?!" + }, + "victory": { + "1": "너무 분해…\n…훌쩍!$할머니이~이!!" + } + }, + "winstrates_vicky": { + "encounter": { + "1": "요 녀석~!\n우리 귀여운 손녀에게 무슨 짓을 한 게냐!$이렇게 된 이상 내가 직접\n네 포켓몬을 혼내줄 테니 각오해라잇!" + }, + "victory": { + "1": "에구! 정말 강하구나!\n우리 손녀 말이 진짜였구나." + } + }, + "winstrates_vito": { + "encounter": { + "1": "가족들끼리 포켓몬 수행을 했었어!\n누구에게도 지지 않는다고!" + }, + "victory": { + "1": "난 우리 가족 중에서도 제일 강했어.\n한 번도 져본 적이 없었는데…" + } + }, "brock": { "encounter": { "1": "내 전문인 바위 타입 포켓몬으로 널 쓰러뜨려줄게! 덤벼!", @@ -2446,7 +2649,7 @@ }, "iono": { "encounter": { - "1": "자~ 오늘의 각오는~ 모야모야~?\n$...\n$그럼, 이제 시작해 볼까! \n$도전자님의 실력은 과연 과연~!?" + "1": "자~ 오늘의 각오는~ 모야모야~?\n$…\n$그럼, 이제 시작해 볼까! \n$도전자님의 실력은 과연 과연~!?" }, "victory": { "1": "너의 반짝임은 1000만볼트!" @@ -2566,7 +2769,7 @@ "1": "장하구나! 실로 견줄 자가 천하에 없도다!" }, "defeat": { - "1": "나의 마음에 상쾌한 바람이 지나갔다...\n$정말 대단한 노력이다!" + "1": "나의 마음에 상쾌한 바람이 지나갔다…\n$정말 대단한 노력이다!" } }, "kieran": { @@ -2574,7 +2777,7 @@ "1": "난 노력을 통해 강해지고 또 강해지지!\n$난 지지 않아." }, "victory": { - "1": "믿을 수 없어...\n$정말 재밌고 가슴 뛰는 배틀이었어!" + "1": "믿을 수 없어…\n$정말 재밌고 가슴 뛰는 배틀이었어!" }, "defeat": { "1": "세상에 마상에! 정말 멋진 배틀이었어!\n$네가 더 열심히 훈련할 시간이야." diff --git a/src/locales/ko/egg.json b/src/locales/ko/egg.json index 96985be8cfe..b8550357dfa 100644 --- a/src/locales/ko/egg.json +++ b/src/locales/ko/egg.json @@ -11,6 +11,7 @@ "gachaTypeLegendary": "레전더리 확률 업", "gachaTypeMove": "희귀 알 기술 확률 업", "gachaTypeShiny": "색이 다른 포켓몬 확률 업", + "eventType": "미스터리 이벤트", "selectMachine": "사용할 뽑기 기계를 골라주세요.", "notEnoughVouchers": "바우처가 충분하지 않습니다!", "tooManyEggs": "알을 너무 많이 갖고 있습니다!", @@ -23,4 +24,4 @@ "moveUPGacha": "알 기술 UP!", "shinyUPGacha": "색이 다른 포켓몬\nUP!", "legendaryUPGacha": "UP!" -} \ No newline at end of file +} diff --git a/src/locales/ko/modifier-select-ui-handler.json b/src/locales/ko/modifier-select-ui-handler.json index 04b47542e14..ec9096622c5 100644 --- a/src/locales/ko/modifier-select-ui-handler.json +++ b/src/locales/ko/modifier-select-ui-handler.json @@ -8,5 +8,7 @@ "lockRaritiesDesc": "갱신되는 아이템의 희귀도가 고정됩니다(갱신 비용 증가).", "checkTeamDesc": "파티를 확인하거나 폼 변경 아이템을 사용합니다.", "rerollCost": "₽{{formattedMoney}}", - "itemCost": "₽{{formattedMoney}}" -} \ No newline at end of file + "itemCost": "₽{{formattedMoney}}", + "continueNextWaveButton": "진행하기", + "continueNextWaveDescription": "다음 웨이브로 진행합니다." +} diff --git a/src/locales/ko/modifier-type.json b/src/locales/ko/modifier-type.json index e957fd0d58a..f04dff7b1af 100644 --- a/src/locales/ko/modifier-type.json +++ b/src/locales/ko/modifier-type.json @@ -66,7 +66,21 @@ "description": "자신의 모든 포켓몬의 레벨이 {{levels}}만큼 상승한다." }, "BaseStatBoosterModifierType": { - "description": "지니게 하면 {{stat}} 종족값을 10% 올려준다. 개체값이 높을수록 더 많이 누적시킬 수 있다." + "description": "지니게 하면 {{stat}} 종족치를 10% 올려준다. 개체값이 높을수록 더 많이 누적시킬 수 있다." + }, + "PokemonBaseStatTotalModifierType": { + "name": "단단지주스", + "description": "모든 종족치를 {{statValue}}만큼 {{increaseDecrease}}. 단단지의 {{blessCurse}}[[를]] 받았다.", + "extra": { + "increase": "올려준다", + "decrease": "떨어뜨린다", + "blessed": "축복", + "cursed": "저주" + } + }, + "PokemonBaseStatFlatModifierType": { + "name": "숲의양갱", + "description": "{{stats}} 종족치를 {{statValue}}만큼 올려준다. 이상한 꿈을 꾸고 얻었다." }, "AllPokemonFullHpRestoreModifierType": { "description": "자신의 포켓몬의 HP를 모두 회복한다." @@ -345,7 +359,7 @@ "description": "이 도구를 지닌 포켓몬은 턴이 끝나는 시점에 상태이상에 걸리지 않았다면 화상 상태가 된다." }, "BATON": { - "name": "바톤", + "name": "배턴", "description": "포켓몬을 교체할 때 효과를 넘겨줄 수 있으며, 함정의 영향을 받지 않게 함" }, "SHINY_CHARM": { @@ -401,7 +415,13 @@ "ENEMY_FUSED_CHANCE": { "name": "합체 토큰", "description": "야생 포켓몬이 합체되어 등장할 확률이 1% 추가된다." - } + }, + + "MYSTERY_ENCOUNTER_SHUCKLE_JUICE": { "name": "단단지주스" }, + "MYSTERY_ENCOUNTER_BLACK_SLUDGE": { "name": "검은진흙", "description": "악취가 너무 심한 나머지 상점 물건 가격이 크게 비싸진다." }, + "MYSTERY_ENCOUNTER_MACHO_BRACE": { "name": "교정깁스", "description": "포켓몬을 쓰러뜨리면 교정깁스 스택을 얻는다. 스택이 올라갈수록 능력치가 약간 올라가고, 최대 스택에서 추가 보너스를 얻는다." }, + "MYSTERY_ENCOUNTER_OLD_GATEAU": { "name": "숲의양갱", "description": "{{stats}} 종족치를 {{statValue}}만큼 올려준다." }, + "MYSTERY_ENCOUNTER_GOLDEN_BUG_NET": { "name": "황금잠자리채", "description": "벌레 타입 포켓몬을 더 자주 만날 수 있는 행운을 부여한다. 묘한 무게감이 든다." } }, "SpeciesBoosterItem": { "LIGHT_BALL": { diff --git a/src/locales/ko/move-trigger.json b/src/locales/ko/move-trigger.json index a8a6c0cf86f..12a126baf9d 100644 --- a/src/locales/ko/move-trigger.json +++ b/src/locales/ko/move-trigger.json @@ -66,6 +66,7 @@ "suppressAbilities": "{{pokemonName}}의\n특성이 효과를 발휘하지 못하게 되었다!", "revivalBlessing": "{{pokemonName}}[[는]]\n정신을 차려 싸울 수 있게 되었다!", "swapArenaTags": "{{pokemonName}}[[는]]\n서로의 필드 효과를 교체했다!", + "chillyReception": "{{pokemonName}}[[는]] 썰렁한 개그를 선보였다!", "exposedMove": "{{pokemonName}}[[는]]\n{{targetPokemonName}}의 정체를 꿰뚫어 보았다!", "safeguard": "{{targetName}}[[는]] 신비의 베일이 지켜 주고 있다!", "afterYou": "{{pokemonName}}[[는]]\n배려를 받아들이기로 했다!" diff --git a/src/locales/ko/move.json b/src/locales/ko/move.json index a06bb2b3e27..5b0d6eaeaad 100644 --- a/src/locales/ko/move.json +++ b/src/locales/ko/move.json @@ -3129,7 +3129,7 @@ }, "auraWheel": { "name": "오라휠", - "effect": "볼주머니에 저장해둔 에너지로 공격하고 자신의 스피드를 올린다. 모르페코의 모습에 따라 타입이 바뀐다." + "effect": "볼주머니에 저장해둔 에너지로 공격하고 자신의 스피드를 올린다. 모르페코가 사용할 경우 모습에 따라 타입이 바뀐다." }, "breakingSwipe": { "name": "와이드브레이커", diff --git a/src/locales/ko/mystery-encounter-messages.json b/src/locales/ko/mystery-encounter-messages.json new file mode 100644 index 00000000000..30a9b8a2b18 --- /dev/null +++ b/src/locales/ko/mystery-encounter-messages.json @@ -0,0 +1,7 @@ +{ + "paid_money": "₽{{amount, number}}[[를]] 지불했다.", + "receive_money": "₽{{amount, number}}[[를]] 받았다!", + "affects_pokedex": "도감에 추가 가능", + "cancel_option": "조우 선택지로 돌아가기", + "view_party_button": "파티 확인" +} diff --git a/src/locales/ko/mystery-encounters/a-trainers-test-dialogue.json b/src/locales/ko/mystery-encounters/a-trainers-test-dialogue.json new file mode 100644 index 00000000000..9b36aa0ff62 --- /dev/null +++ b/src/locales/ko/mystery-encounters/a-trainers-test-dialogue.json @@ -0,0 +1,47 @@ +{ + "intro": "무척 강해보이는 트레이너가 다가왔다…", + "buck": { + "intro_dialogue": "여-, 트레이너!\n나는 맥이라고해.$너처럼 강한 트레이너를 만난 김에\n엄청난 제안을 하나 할게!$희귀한 알을 두 개 가지고 있는데,\n하나를 누군가 맡아줬으면 하거든.$네가 나를 이긴다면,\n더 희귀한 알을 너한테 맡기도록 할게!", + "accept": "좋아, 불타오르는걸!", + "decline": "쳇, 아무래도 네 포켓몬들 컨디션이 별로인 거 같구나.$자, 내가 좀 도와줄게." + }, + "cheryl": { + "intro_dialogue": "안녕, 내 이름은 모미야.$너처럼 강한 트레이너가\n관심 있을 만한 제안이 있어.$희귀한 알을 두 개 가지고 있는데,\n하나를 누가 맡아줬으면 해.$네가 승부에서 이긴다면,\n더 희귀한 알을 너한테 맡기도록 할게!", + "accept": "준비 됐겠지!", + "decline": "알았어.\n네 포켓몬들 좀 지쳐 보이네.$자, 내가 좀 도와줄게." + }, + "marley": { + "intro_dialogue": "…@d{64}난 미정이야.$제안이 있어…$알 두 개가 있는데,\n하나를 다른 사람이 맡아줬으면 해.$네가 나보다 강하다면,\n더 희귀한 알을 줄게.", + "accept": "…알겠어.", + "decline": "…알겠어.$네 포켓몬 좀 다쳤구나…\n내가 도와줄게." + }, + "mira": { + "intro_dialogue": "안녕!\n나는 미루!$너처럼 강한 트레이너에게\n미루가 제안이 있어!$미루가 지금 희귀한 알 두개가 있거든\n하나를 다른 사람이 맡아줬으면 좋겠어!$미루에게 네가 더 강하다는걸 보여주면,\n미루가 더 희귀한 알을 줄게!", + "accept": "승부하는 거지?\n야호!", + "decline": "어라, 승부 안 하는 거야?\n괜찮아!$미루가 네 포켓몬들을 치료해 줄게!" + }, + "riley": { + "intro_dialogue": "나는 현이.$너처럼 강한 트레이너에게\n별난 제안을 하나 할게.$지금 두 개의 희귀한 알이 있는데,\n하나를 다른 트레이너에게 맡기고 싶어.$네가 승부에서 이긴다면,\n더 희귀한 알을 줄게!", + "accept": "그 얼굴…\n승부다.", + "decline": "알겠어, 네 포켓몬들 지쳐 보이는구나.$자, 내가 도와줄게." + }, + "title": "선배 트레이너의 테스트", + "description": "이 트레이너는 승부를 받아들이든 거절하든 알을 줄 것 같습니다.\n하지만 이 강한 트레이너를 쓰러트린다면 훨씬 더 희귀한 알을 받을 수 있을 겁니다.", + "query": "어떻게 하시겠습니까?", + "option": { + "1": { + "label": "승부한다", + "tooltip": "(-) 힘든 전투\n(+) @[TOOLTIP_TITLE]{매우 희귀한 알} 획득" + }, + "2": { + "label": "승부를 거절한다", + "tooltip": "(+) 파티 전체 회복\n(+) @[TOOLTIP_TITLE]{알} 획득" + } + }, + "eggTypes": { + "rare": "레어 알", + "epic": "에픽 알", + "legendary": "레전더리 알" + }, + "outro": "{{statTrainerName}}[[가]] {{eggType}}[[를]] 줬다!" +} diff --git a/src/locales/ko/mystery-encounters/absolute-avarice-dialogue.json b/src/locales/ko/mystery-encounters/absolute-avarice-dialogue.json new file mode 100644 index 00000000000..5e039af8f08 --- /dev/null +++ b/src/locales/ko/mystery-encounters/absolute-avarice-dialogue.json @@ -0,0 +1,25 @@ +{ + "intro": "갑자기 나타난 {{greedentName}}[[가]]\n나무열매를 훔쳐갔다!", + "title": "끝없는 욕심", + "description": "당신이 방심한 틈에 {{greedentName}}[[가]] 나무열매를 모두 훔쳐 가버렸습니다!\n\n{{greedentName}}[[는]] 나무열매를 먹으려다가,\n잠시 멈춰서 당신을 재밌다는 듯 바라보고 있습니다.", + "query": "어떻게 하시겠습니까?", + "option": { + "1": { + "label": "싸운다", + "tooltip": "(-) 어려운 배틀\n(+) 비축한 나무열매 획득", + "selected": "{{greedentName}}[[는]] 볼을 빵빵하게 채우고 덤벼들었다!", + "boss_enraged": "{{greedentName}}[[는]] 식탐으로 가득 차 있다!", + "food_stash": "{{greedentName}}[[는]] 많은 음식을 가지고 있는 것 같다!$@s{item_fanfare}모든 포켓몬이 각각 {{foodReward}}[[를]] 얻었다!" + }, + "2": { + "label": "설득한다", + "tooltip": "(+) 나무열매 일부를 돌려받음", + "selected": "{{greedentName}}의 마음이 움직인 것 같다.$훔쳐간 나무열매 일부를 이쪽으로 던졌다." + }, + "3": { + "label": "먹게 둔다", + "tooltip": "(-) 모든 나무열매를 잃음\n(?) {{greedentName}}[[가]] 매우 좋아함", + "selected": "{{greedentName}}[[가]] 눈 깜짝할 새에\n모든 나무열매를 먹어치웠다!$흡족하게 이쪽을 바라보면서\n빵빵해진 배를 두드렸다.$아마 앞으로 식비가 만만치 않을 것 같다…$@s{level_up_fanfare}{{greedentName}}[[는]] 동료가 되고 싶어하는 것 같다!" + } + } +} \ No newline at end of file diff --git a/src/locales/ko/mystery-encounters/an-offer-you-cant-refuse-dialogue.json b/src/locales/ko/mystery-encounters/an-offer-you-cant-refuse-dialogue.json new file mode 100644 index 00000000000..2eefd164182 --- /dev/null +++ b/src/locales/ko/mystery-encounters/an-offer-you-cant-refuse-dialogue.json @@ -0,0 +1,26 @@ +{ + "intro": "금수저 도련님에게 붙들렸다!", + "speaker": "금수저 도련님", + "intro_dialogue": "안녕하세요.$당신의 {{strongestPokemon}}[[가]] 정말 멋져서 그냥 지나칠 수가 없네요!$항상 저런 애완 포켓몬을 갖고 싶었거든요!$제가 오래된 장신구랑\n돈도 함께 섭섭지 않게 챙겨주도록 하죠!", + "title": "거절할 수 없는 제안", + "description": "{{strongestPokemon}}[[를]] 넘기는 대신\n@[TOOLTIP_TITLE]{빛나는부적}과 {{price, money}}을 준다고 합니다!\n\n매우 좋은 조건이지만,\n이렇게 든든한 동료를 보내줘야 할까요?", + "query": "어떻게 하시겠습니까?", + "option": { + "1": { + "label": "제안을 받아들인다", + "tooltip": "(-) {{strongestPokemon}}[[를]] 보내줌\n(+) @[TOOLTIP_TITLE]{빛나는부적}[[를]] 획득\n(+) {{price, money}}[[를]] 획득", + "selected": "좋아요!@d{32} 이리와, {{strongestPokemon}}!$요트 클럽에 가서 다른 사람들에게 자랑해야겠어!$다들 엄청 부러워하겠는걸!" + }, + "2": { + "label": "꼬마 녀석을 혼내준다", + "tooltip": "(+) {{option2PrimaryName}}의 {{moveOrAbility}} 사용\n(+) {{price, money}} 획득", + "tooltip_disabled": "이 선택지를 선택하려면 포켓몬이 특정 기술이나 능력을 가지고 있어야 한다.", + "selected": "말도 안 돼!\n{{liepardName}}, 우리 지금 삥 뜯긴 거야?!$너…!\n곧 우리 변호사 연락을 받게 될 거다!" + }, + "3": { + "label": "떠난다", + "tooltip": "(-) 보상 없음", + "selected": "재수 없는 날이네요....$뭐, 어때. 요트 클럽이나 가자, {{liepardName}}." + } + } +} diff --git a/src/locales/ko/mystery-encounters/berries-abound-dialogue.json b/src/locales/ko/mystery-encounters/berries-abound-dialogue.json new file mode 100644 index 00000000000..090d18911af --- /dev/null +++ b/src/locales/ko/mystery-encounters/berries-abound-dialogue.json @@ -0,0 +1,26 @@ +{ + "intro": "포켓몬 근처에 열매가\n달린 거대한 나무가 있다!", + "title": "나무열매 풍년", + "description": "나무열매 덤불을 지키고 있는 강력한 포켓몬이 있는 것 같습니다.\n그냥 싸워 볼 수도 있겠지만, 조금 강해 보입니다.\n혹시 빠른 포켓몬이 있다면 잡히지 않고도 열매를 가져올 수 있지 않을까요?", + "query": "어떻게 하시겠습니까?", + "berries": "나무열매", + "option": { + "1": { + "label": "싸운다", + "tooltip": "(-) 어려운 배틀\n(+) 나무열매 획득", + "selected": "용감하게 포켓몬에게 다가갔다." + }, + "2": { + "label": "덤불을 향해 뛴다", + "tooltip": "(-) {{fastestPokemon}}의 스피드를 활용\n(+) 나무열매 획득", + "selected": "{{fastestPokemon}}[[가]] 나무열매 덤불을 향해 달려간다!${{enemyPokemon}}[[가]] 반응하기 전에 나무열매 {{numBerries}}개를 낚아챘다!$빼앗은 열매를 들고 재빨리 도망쳤다.", + "selected_bad": "{{fastestPokemon}}[[가]] 나무열매 덤불을 향해 달려간다!$이런! {{enemyPokemon}}[[가]] 더 빨라서 가로막혔다!", + "boss_enraged": "상대 {{enemyPokemon}}[[는]] 분노했다!" + }, + "3": { + "label": "떠난다", + "tooltip": "(-) 보상 없음", + "selected": "강한 포켓몬과 열매를 남겨둔 채 계속 나아갔다." + } + } +} \ No newline at end of file diff --git a/src/locales/ko/mystery-encounters/bug-type-superfan-dialogue.json b/src/locales/ko/mystery-encounters/bug-type-superfan-dialogue.json new file mode 100644 index 00000000000..537de55b97b --- /dev/null +++ b/src/locales/ko/mystery-encounters/bug-type-superfan-dialogue.json @@ -0,0 +1,40 @@ +{ + "intro": "온갖 종류의 곤충채집 장비를 가진\n특이한 트레이너가 길을 막아섰다!", + "intro_dialogue": "거기, 트레이너!\n난 세상에서 가장 희귀한 벌레 포켓몬을 찾고 있어!$너도 벌레 타입 포켓몬 좋아하지?\n모두 벌레 타입 포켓몬을 좋아하니깐!", + "title": "벌레 타입 포켓몬 매니아", + "speaker": "벌레 타입 매니아", + "description": "이 트레이너는 대답할 틈도 없이 계속 떠들어대고 있습니다…\n\n이 상황에서 벗어나려면, 트레이너의 주의를 돌려야 할 것 같습니다!", + "query": "어떻게 하시겠습니까?", + "option": { + "1": { + "label": "승부한다", + "tooltip": "(-) 포켓몬 배틀 도전\n(+) 벌레 타입 기술을 가르침", + "selected": "나한테 도전하겠다고?\n내 벌레 포켓몬들은 이미 준비됐어!" + }, + "2": { + "label": "벌레 포켓몬을 보여준다", + "tooltip": "(+) 아이템 획득", + "disabled_tooltip": "벌레 타입 포켓몬이 없다.", + "selected": "트레이너에게 가지고 있는 모든 벌레 포켓몬을 보여주었다...", + "selected_0_to_1": "응? 너 {{numBugTypes}}밖에 안 갖고 있구나...$너 같은 일반인한테 떠들었다니, 쓸데없이 입만 아팠네…", + "selected_2_to_3": "어라, 너 {{numBugTypes}} 갖고 있구나!\n나쁘지 않아.$내가 더 많이 잡는 데 도움이 될만한 걸 줄게!", + "selected_4_to_5": "뭐야? 너 {{numBugTypes}}마리나 갖고 있네?\n좋아!$아직 수준엔 못 미치지만, 너한테 내 옛날 모습이 보여!\n$이걸 받거라, 내 제자여…!", + "selected_6": "우와!\n{{numBugTypes}}! 모두 벌레 타입!$너도 나만큼 벌레 타입을 사랑하는 거지?$이걸 가져가!\n동지의 증표로 나눠줄게!" + }, + "3": { + "label": "벌레 아이템을 준다", + "tooltip": "(-) 트레이너에게 {{requiredBugItems}}[[를]] 건네줌\n(+) 아이템 획득", + "disabled_tooltip": "{{requiredBugItems}}[[를]] 가지고 있어야 한다.", + "select_prompt": "건네줄 아이템을 선택하세요.", + "invalid_selection": "포켓몬이 해당하는 아이템을 갖고 있지 않다.", + "selected": "트레이너에게 {{selectedItem}}[[를]] 건넸다.", + "selected_dialogue": "우와! {{selectedItem}}, 나한테 주는 거야?\n너 꽤 괜찮은 꼬마구나!$고마우니깐,\n나도 너한테 특별한 선물을 줄게!$가보로 전해져 내려온 귀한 물건이지만\n너한테 주고 싶어!" + } + }, + "battle_won": "너의 지식과 기술들이 우리 약점을 완벽하게 파고들었어.$귀중한 경험을 했으니,\n나도 벌레 타입 기술을 하나 가르쳐 줄게!", + "teach_move_prompt": "기술을 가르칠 포켓몬을 선택하세요.", + "confirm_no_teach": "너, 정말로 이 대단한 기술들이 필요없는 거야?", + "outro": "나중에 멋진 벌레 포켓몬을 만나길 바라며!\n다시 만날 때까지!$사사삭!", + "numBugTypes_one": "벌레 타입 {{count}}마리", + "numBugTypes_other": "벌레 타입 {{count}}마리" +} diff --git a/src/locales/ko/mystery-encounters/clowning-around-dialogue.json b/src/locales/ko/mystery-encounters/clowning-around-dialogue.json new file mode 100644 index 00000000000..f1d8fed6fbf --- /dev/null +++ b/src/locales/ko/mystery-encounters/clowning-around-dialogue.json @@ -0,0 +1,34 @@ +{ + "intro": "어라...@d{64}어릿광대인 걸까?", + "speaker": "어릿광대", + "intro_dialogue": "거기 있는 어리버리한 바보씨, 화려한 배틀을 맞이할 각오를 하시길!\n이 싸움꾼 광대가 당신을 쓰러트리겠습니다!", + "title": "어릿광대의 장난", + "description": "이번 상대는 뭔가 이상합니다.\n어릿광대가 당신을 전투에 끌어들이고 싶어하는 것 같은데, 무슨 목적일까요?\n\n{{blacephalonName}}[[은]] 더욱 수상합니다.\n마치 @[TOOLTIP_TITLE]{이상한 타입과 능력}을 가진 것 같습니다.", + "query": "어떻게 하시겠습니까?", + "option": { + "1": { + "label": "어릿광대와 싸운다", + "tooltip": "(-) 이상한 배틀\n(?) 포켓몬의 특성 조정", + "selected": "당신의 불쌍한 포켓몬들이 한심한 공연을 할 준비가 된 것 같군요!", + "apply_ability_dialogue": "센세이셔널한 쇼였습니다!\n당신의 멋진 기지에는 이 센세이셔널한 보상이 잘 어울릴 것 같군요!", + "apply_ability_message": "어릿광대가 포켓몬 한 마리의 특성을 영구적으로 {{ability}}로 교환해 주겠다고 제안했다!", + "ability_prompt": "포켓몬의 특성을 영구적으로 {{ability}} 특성으로 바꾸시겠습니까?", + "ability_gained": "@s{level_up_fanfare}{{chosenPokemon}}[[는]] {{ability}} 특성을 얻었다!" + }, + "2": { + "label": "도발에 응하지 않는다", + "tooltip": "(-) 광대가 화를 냄\n(?) 포켓몬의 아이템 조정", + "selected": "한심한 겁쟁이로군요? 즐거운 배틀을 거부하다니!\n이러면 한 방 먹이고 싶어지잖습니까!", + "selected_2": "광대의 {{blacephalonName}}[[가]] 무언가 사용한 것 같다!\n{{switchPokemon}}의 모든 아이템이 랜덤하게 재조정된다!", + "selected_3": "당황한 바보같은 표정! 완벽한 저의 한 수를 즐겨주시길!" + }, + "3": { + "label": "조롱을 되돌려준다", + "tooltip": "(-) 광대가 화를 냄\n(?) 포켓몬의 타입 조정", + "selected": "한심한 겁쟁이로군요? 즐거운 배틀을 거부하다니!\n이러면 한 방 먹이고 싶어지잖습니까!", + "selected_2": "광대의 {{blacephalonName}}[[가]] 무언가 사용한 것 같다!\n멤버 포켓몬들의 타입이 랜덤하게 재조정된다!", + "selected_3": "당황한 바보같은 표정! 완벽한 저의 한 수를 즐겨주시길!" + } + }, + "outro": "어릿광대는 동료 포켓몬과 함께 연기 속으로 사라져 버렸다." +} \ No newline at end of file diff --git a/src/locales/ko/mystery-encounters/dancing-lessons-dialogue.json b/src/locales/ko/mystery-encounters/dancing-lessons-dialogue.json new file mode 100644 index 00000000000..b96417274ff --- /dev/null +++ b/src/locales/ko/mystery-encounters/dancing-lessons-dialogue.json @@ -0,0 +1,27 @@ +{ + "intro": "{{oricorioName}}[[가]] 외로이 혼자 춤을 추고 있다.\n주변에 파트너도 없는 것 같다!", + "title": "댄스 댄스 레볼루션", + "description": "{{oricorioName}}[[는]] 공격적이진 않아 보입니다.\n오히려 슬퍼 보이기까지 하네요.\n\n그저 함께 춤출 누군가를\n원하고 있는지도 모릅니다….", + "query": "어떻게 하시겠습니까?", + "option": { + "1": { + "label": "싸운다", + "tooltip": "(-) 어려운 배틀\n(+) 배턴 획득", + "selected": "{{oricorioName}}[[는]] 혼란스러워하며 방어 태세를 갖췄다!", + "boss_enraged": "{{oricorioName}}[[는]] 겁에 질려 능력치가 상승했다!" + }, + "2": { + "label": "춤을 배운다", + "tooltip": "(+) 잠재댄스 기술을 배움", + "selected": "{{oricorioName}}가 춤을 추는 모습을 주의 깊게 지켜보았다….$@s{level_up_fanfare}{{selectedPokemon}}[[는]] {{oricorioName}}에게서 춤을 배웠다!" + }, + "3": { + "label": "춤을 보여준다", + "tooltip": "(-) {{oricorioName}}에게 춤을 가르침\n(+) {{oricorioName}}[[가]] 매우 기뻐함", + "disabled_tooltip": "포켓몬이 춤 기술을 알고 있어야 한다.", + "select_prompt": "사용할 춤 기술을 선택한다.", + "selected": "{{oricorioName}}[[가]] {{selectedPokemon}}[[를]] 선보이는 모습을\n흥미진진하게 지켜본다!$마음에 들어하는 것 같다!$@s{level_up_fanfare}{{oricorioName}}[[가]] 동료가 되고 싶어 하는 것 같다!" + } + }, + "invalid_selection": "이 포켓몬은 춤 기술을 모른다!" +} \ No newline at end of file diff --git a/src/locales/ko/mystery-encounters/dark-deal-dialogue.json b/src/locales/ko/mystery-encounters/dark-deal-dialogue.json new file mode 100644 index 00000000000..c570bc8d5b4 --- /dev/null +++ b/src/locales/ko/mystery-encounters/dark-deal-dialogue.json @@ -0,0 +1,24 @@ + + +{ + "intro": "너덜너덜한 외투를 입은\n이상한 남자가 길을 막았다….", + "speaker": "수상한 남자", + "intro_dialogue": "거기, 너!$난 포켓몬의 숨겨진 힘을 끌어낼 수 있는\n새로운 장치를 만드는 중이거든!$포켓몬을 분자 수준에서 재결합해서\n훨씬 더 강력한 형태로 만드는 거야.$히히…@d{64} 이걸 증명하려면 약간의 희ㅅ-\n음…@d{32} 실험 대상이 필요해.", + "title": "수상한 거래", + "description": "수상한 남자가\n몬스터볼을 여러 개 들고 있습니다.\n\"내가 보장할게! 네 포켓몬을 한 마리만 줘!\n대신 아주 좋은 몬스터볼을 줄 테니까. 히히…\"", + "query": "어떻게 하시겠습니까?", + "option": { + "1": { + "label": "승낙한다", + "tooltip": "(+) 5 로그볼\n(?) 포켓몬 1마리 랜덤 강화", + "selected_dialogue": "어디 보자, {{pokeName}}[[가]] 좋겠군!$명심해, 나쁜 일이 생겨도\n책임 못 지니까!@d{32} 히히…", + "selected_message": "남자는 로그볼 5개를 건넸다.${{pokeName}}[[는]] 이상한 기계에 들어갔다…$표시등이 깜빡이고 이상한 소리가\n기계에서 들려오기 시작했다!$…@d{96} 기계에서 뭔가가\n맹렬한 기세로 뛰쳐나왔다!" + }, + "2": { + "label": "거절한다", + "tooltip": "(-) 보상 없음", + "selected": "불쌍한 사람을 그냥 지나칠거야?\n하!" + } + }, + "outro": "꺼림직한 만남을 뒤로 하고\n침착하게 자리를 떠났다." +} \ No newline at end of file diff --git a/src/locales/ko/mystery-encounters/delibirdy-dialogue.json b/src/locales/ko/mystery-encounters/delibirdy-dialogue.json new file mode 100644 index 00000000000..121c812b1db --- /dev/null +++ b/src/locales/ko/mystery-encounters/delibirdy-dialogue.json @@ -0,0 +1,29 @@ + + +{ + "intro": "{{delibirdName}} 무리가 나타났다!", + "title": "딜리버-디", + "description": "{{delibirdName}}들의 눈이 초롱초롱합니다.\n뭔가 바라는 게 있는 것 같습니다.\n혹시 아이템이나 돈을 원하는 걸까요?", + "query": "무언가 주시겠습니까?", + "invalid_selection": "포켓몬이 그런 종류의 아이템이 없다.", + "option": { + "1": { + "label": "돈을 준다", + "tooltip": "(-) {{delibirdName}}들에게 {{money, money}} 선물\n(+) 선물 아이템 획득", + "selected": "돈을 건네니,\n{{delibirdName}}들은 자기들끼리 신나서 떠들어댔다.$그리고 당신에게 돌아와 행복하게 선물을 건넨다!" + }, + "2": { + "label": "음식을 준다", + "tooltip": "(-) {{delibirdName}}들에게 나무열매나 기적의씨를 선물\n(+) 선물 아이템 획득", + "select_prompt": "건네줄 아이템을 선택하세요.", + "selected": "{{chosenItem}}[[를]] 건네니,\n{{delibirdName}}들은 자기들끼리 신나서 떠들어댔다.$그리고 당신에게 돌아와 행복하게 선물을 건넨다!" + }, + "3": { + "label": "아이템을 준다", + "tooltip": "(-) {{delibirdName}}들에게 지니고 있는 아이템을 선물\n(+) 선물 아이템 획득", + "select_prompt": "건네줄 아이템을 선택하세요.", + "selected": "{{chosenItem}}[[를]] 건네니,\n{{delibirdName}}들은 자기들끼리 신나서 떠들어댔다.$그리고 당신에게 돌아와 행복하게 선물을 건넨다!" + } + }, + "outro": "{{delibirdName}} 무리가 행복하게 뒤뚱거리며 저 멀리 날아간다…$정말 별난 선물교환이었다!" +} \ No newline at end of file diff --git a/src/locales/ko/mystery-encounters/department-store-sale-dialogue.json b/src/locales/ko/mystery-encounters/department-store-sale-dialogue.json new file mode 100644 index 00000000000..96de06d8413 --- /dev/null +++ b/src/locales/ko/mystery-encounters/department-store-sale-dialogue.json @@ -0,0 +1,27 @@ +{ + "intro": "쇼핑백을 잔뜩 가진 여자가 있다!", + "speaker": "백화점 손님", + "intro_dialogue": "안녕!\n너도 대박 세일을 노리고 온 거지?$세일 기간 동안 무료로 아이템을 교환할 수 있는 특별한 쿠폰이 있어!$남는 쿠폰을 나눠줄게!", + "title": "백화점 세일", + "description": "사방에 상품이 가득합니다!\n쿠폰을 쓸 수 있는 교환 코너가 4개나 있는 것 같습니다.\n선택지가 너무 많네요!", + "query": "어디로 가시겠습니까?", + "option": { + "1": { + "label": "기술머신 코너", + "tooltip": "(+) 기술머신 상점" + }, + "2": { + "label": "영양제 코너", + "tooltip": "(+) 영양제 상점" + }, + "3": { + "label": "랭크업 도구 코너", + "tooltip": "(+) 랭크업 도구 상점" + }, + "4": { + "label": "몬스터볼 코너", + "tooltip": "(+) 몬스터볼 상점" + } + }, + "outro": "대박이다!\n앞으로 자주 쇼핑하러 와야겠다." +} \ No newline at end of file diff --git a/src/locales/ko/mystery-encounters/field-trip-dialogue.json b/src/locales/ko/mystery-encounters/field-trip-dialogue.json new file mode 100644 index 00000000000..4f7f3797ac9 --- /dev/null +++ b/src/locales/ko/mystery-encounters/field-trip-dialogue.json @@ -0,0 +1,31 @@ +{ + "intro": "선생님과 어린 학생들이다!", + "speaker": "선생님", + "intro_dialogue": "안녕하세요!\n저희 학생들에게 잠시 시간 좀 내주실 수 있을까요?$포켓몬의 기술에 대해서 가르치고 있는데\n실제 기술을 보게 되면 좋아할 것 같아서요.$괜찮으시면 저희에게\n포켓몬이 배우고 있는 기술을 보여주실래요?", + "title": "현장 학습", + "description": "학교 선생님이 포켓몬의 기술 시연을 부탁했습니다.\n어떤 기술을 선택했는지에 따라 선생님이 뭔가 쓸 만한 걸 주실 수도 있을 것 같네요.", + "query": "어떤 형태의 기술을 보여주겠습니까?", + "option": { + "1": { + "label": "물리 기술", + "tooltip": "(+) 물리 아이템 보상" + }, + "2": { + "label": "특수 기술", + "tooltip": "(+) 특수 아이템 보상" + }, + "3": { + "label": "상태 기술", + "tooltip": "(+) 상태 아이템 보상" + }, + "selected": "{{pokeName}}[[는]] 멋지게 {{move}}[[를]] 보여줬다!" + }, + "second_option_prompt": "포켓몬이 사용할 기술을 골라주세요.", + "incorrect": "…$이건 {{moveCategory}} 기술이 아닌데요!\n죄송하지만, 저희는 이만 가볼게요.$얘들아 이리 오렴.\n다른 곳에서는 제대로 된 기술 시연을 볼 수 있을 거야.", + "incorrect_exp": "좋은 경험(?)을 한 것 같다.$포켓몬도 약간의 경험치를 얻었다.", + "correct": "멋진 시연 감사합니다!\n이 아이템이 도움이 되시길 바랄게요!", + "correct_exp": "{{pokeName}}도 좋은 경험을 쌓았다!", + "status": "상태", + "physical": "물리", + "special": "특수" +} \ No newline at end of file diff --git a/src/locales/ko/mystery-encounters/fiery-fallout-dialogue.json b/src/locales/ko/mystery-encounters/fiery-fallout-dialogue.json new file mode 100644 index 00000000000..9883e038dca --- /dev/null +++ b/src/locales/ko/mystery-encounters/fiery-fallout-dialogue.json @@ -0,0 +1,26 @@ +{ + "intro": "매캐한 연기와 화산재 폭풍을 맞닥뜨렸다!", + "title": "불타는 폴아웃", + "description": "소용돌이치는 화산재와 불씨로 인해 앞이 거의 보이질 않습니다.\n이런 일에는 무언가… 원인이 있는 것 같습니다.\n그렇지만 이 정도로 큰 규모라면 뒤에 도대체 뭐가 있는 걸까요?", + "query": "어떻게 하시겠습니까?", + "option": { + "1": { + "label": "원인을 찾는다", + "tooltip": "(?) 원인을 밝힘\n(-) 어려운 배틀", + "selected": "화산재 폭풍을 뚫고 나아가자,\n구애의 춤을 추고 있는 {{volcaronaName}} 두 마리를 발견했다!$방해받고 싶지 않았던 두 포켓몬이 싸움을 걸어왔다!" + }, + "2": { + "label": "낮은 자세로 이동한다", + "tooltip": "(-) 날씨의 피해를 받음", + "selected": "셸터를 향해 고군분투하는 동안\n재와 불씨로 인해 심각한 피해를 입었다!$모든 포켓몬이 HP의 20% 피해를 받았다!", + "target_burned": "{{burnedPokemon}}도 화상을 입고 말았다!" + }, + "3": { + "label": "불꽃 포켓몬들의 도움", + "tooltip": "(+) 상황 해결\n(+) 목탄 획득", + "disabled_tooltip": "2마리 이상의 불꽃 타입 포켓몬이 필요하다.", + "selected": "{{option3PrimaryName}}[[과]] {{option3SecondaryName}}의 도움으로,\n구애의 춤을 추고 있는 {{volcaronaName}} 두 마리를 발견했다!$다행히 포켓몬들이 그 두 마리를 진정시키고,\n문제없이 신혼여행을 떠나보냈다." + } + }, + "found_charcoal": "날씨가 개자,\n{{leadPokemon}}[[는]] 바닥에서 무언가 발견했다.$@s{item_fanfare}{{leadPokemon}}[[는]] 목탄을 얻었다!" +} \ No newline at end of file diff --git a/src/locales/ko/mystery-encounters/fight-or-flight-dialogue.json b/src/locales/ko/mystery-encounters/fight-or-flight-dialogue.json new file mode 100644 index 00000000000..52fe92f2b63 --- /dev/null +++ b/src/locales/ko/mystery-encounters/fight-or-flight-dialogue.json @@ -0,0 +1,26 @@ +{ + "intro": "빛나는 무언가가 포켓몬 근처에서 반짝반짝 빛나고 있다!", + "title": "도망치거나 맞서 싸우거나", + "description": "강한 포켓몬이 아이템을 지키고 있는 것 같습니다.\n그냥 싸워볼 수도 있지만, 조금 강해보이네요.\n적합한 기술을 가진 포켓몬이 있다면,\n아이템을 빼앗을 수도 있을 것 같습니다.", + "query": "어떻게 하시겠습니까?", + "option": { + "1": { + "label": "포켓몬과 싸운다", + "tooltip": "(-) 어려운 배틀\n(+) 새 아이템", + "selected": "용감하게 포켓몬에게 다가갔다.", + "stat_boost": "{{enemyPokemon}}의 잠재력이 능력치 중 하나를 강화했다!" + }, + "2": { + "label": "아이템을 훔친다", + "disabled_tooltip": "이 선택지를 선택하려면 포켓몬이 특정 기술을 가지고 있어야 합니다.", + "tooltip": "(+) {{option2PrimaryName}}의 {{option2PrimaryMove}} 사용", + "selected": ".@d{32}.@d{32}.@d{32}${{option2PrimaryName}}[[가]] {{option2PrimaryMove}}[[를]] 사용했다!$아이템을 훔쳤다!" + }, + "3": { + "label": "떠난다", + "tooltip": "(-) 보상 없음", + "selected": "강한 포켓몬과 전리품을 남겨둔 채\n당신은 계속 나아간다." + + } + } +} \ No newline at end of file diff --git a/src/locales/ko/mystery-encounters/fun-and-games-dialogue.json b/src/locales/ko/mystery-encounters/fun-and-games-dialogue.json new file mode 100644 index 00000000000..77b8c134399 --- /dev/null +++ b/src/locales/ko/mystery-encounters/fun-and-games-dialogue.json @@ -0,0 +1,30 @@ +{ + "intro_dialogue": "자, 오세요 여러분!\n새로 나온 {{wobbuffetName}} 해머 게임에 도전해 보세요!", + "speaker": "진행자", + "title": "재밌는 놀이!", + "description": "상품이 걸린 게임이 진행 중입니다!\n@[TOOLTIP_TITLE]{3턴} 안에 {{wobbuffetName}}[[를]] @[TOOLTIP_TITLE]{기절시키지 않고 HP를 1}에 가깝게 만들어서, {{wobbuffetName}}이 해머기계에 최고로 강력한 카운터를 날리도록 해야합니다.\n하지만 조심하세요! 만약 {{wobbuffetName}}[[가]] 기절해버리면, 치료비를 내야 할테니까요!", + "query": "게임에 참가해 볼까요?", + "option": { + "1": { + "label": "게임에 참가한다", + "tooltip": "(-) {{option1Money, money}} 지불\n(+) {{wobbuffetName}} 해머 게임 플레이", + "selected": "시작합니다!" + }, + "2": { + "label": "떠난다", + "tooltip": "(-) 보상 없음", + "selected": "약간의 아쉬움을 안고, 서둘러 길을 떠났다." + } + }, + "ko": "안 돼! {{wobbuffetName}}[[가]] 기절해버렸다!$게임에 지고 {{wobbuffetName}}의 병원비까지 내야할 판이다…", + "charging_continue": "마자용은 카운터 한 방을 충전하고 있다!", + "turn_remaining_3": "세 턴 남았다!", + "turn_remaining_2": "두 턴 남았다!", + "turn_remaining_1": "남은 턴은 단 한 번!", + "end_game": "거기까지!${{wobbuffetName}}[[가]] 한껏 충전한 카운터를 날릴 준비를 한다@d{16}.@d{16}.@d{16}.", + "best_result": "{{wobbuffetName}}[[가]] 기계를 때려 부술 기세로 내리쳤다!!!$기계 맨 위에 달려 있던 벨이\n아예 박살나 날아가 버렸다!$최고 1등상을 얻었다!", + "great_result": "{{wobbuffetName}}[[가]] 버튼을 박살낼 듯 내려쳤다!!$벨에 닿을락 말락 하는 곳까지 올라갔다!\n아깝다!!$2등상을 받았다!", + "good_result": "{{wobbuffetName}}[[가]] 버튼을 내리쳤다!$거의 중간까지 올라갔다!$3등상을 받았다!", + "bad_result": "{{wobbuffetName}}[[는]] 힘차게 휘둘러 봤지만\n버튼을 살짝 건드렸을 뿐 아무일도 일어나지 않았다…$안 돼!\n본전도 못 건졌다!", + "outro": "재밌는 미니게임이었다!" +} \ No newline at end of file diff --git a/src/locales/ko/mystery-encounters/global-trade-system-dialogue.json b/src/locales/ko/mystery-encounters/global-trade-system-dialogue.json new file mode 100644 index 00000000000..a4e8c3a1dd1 --- /dev/null +++ b/src/locales/ko/mystery-encounters/global-trade-system-dialogue.json @@ -0,0 +1,32 @@ +{ + "intro": "GTS 단말기가 있다!", + "title": "GTS", + "description": "오, GTS! 세상 참 좋아졌네요.\n이렇게 전세계 사람들과 연결해서 포켓몬을 교환 할 수 있으니 말이에요!\n오늘은 어떤 흥미로운 교환이 이루어질까요?", + "query": "어떻게 하시겠습니까?", + "option": { + "1": { + "label": "교환 제안을 확인한다", + "tooltip": "(+) 포켓몬 1마리와 제안을 골라 교환", + "trade_options_prompt": "교환을 통해 받을 포켓몬을 선택하세요." + }, + "2": { + "label": "미라클 교환을 한다", + "tooltip": "(+) 포켓몬 중 하나를 GTS에 보내고 랜덤한 포켓몬을 받는다" + }, + "3": { + "label": "아이템을 교환한다", + "trade_options_prompt": "교환할 아이템을 선택하세요.", + "invalid_selection": "이 포켓몬은 교환할 아이템이 없습니다.", + "tooltip": "(+) 아이템 하나를 GTS에 보내고 랜덤한 아이템을 받는다" + }, + "4": { + "label": "떠난다", + "tooltip": "(-) 보상 없음", + "selected": "교환할 시간이 없다!\n서둘러 떠났다." + } + }, + "pokemon_trade_selected": "{{tradedPokemon}}[[를]] {{tradeTrainerName}}에게 보냅니다.", + "pokemon_trade_goodbye": "바이바이 {{tradedPokemon}}!", + "item_trade_selected": "{{chosenItem}}[[를]] {{tradeTrainerName}}에게 보냅니다.$.@d{64}.@d{64}.@d{64}\n@s{level_up_fanfare}전송 완료!${{tradeTrainerName}}[[로]]부터 {{itemName}}[[가]] 전송됐다!", + "trade_received": "@s{evolution_fanfare}{{tradeTrainerName}}[[로]]부터 {{received}}[[가]] 전송됐다!${{received}}[[를]] 귀여워해 줘!" +} \ No newline at end of file diff --git a/src/locales/ko/mystery-encounters/lost-at-sea-dialogue.json b/src/locales/ko/mystery-encounters/lost-at-sea-dialogue.json new file mode 100644 index 00000000000..deeb69f0d7a --- /dev/null +++ b/src/locales/ko/mystery-encounters/lost-at-sea-dialogue.json @@ -0,0 +1,28 @@ +{ + "intro": "정처 없이 바다를 헤메었지만,\n당신은 아무런 성과도 거두지 못했습니다.", + "title": "바다 위의 표류", + "description": "이 지역의 바다는 꽤 사나운 편입니다.\n게다가 당신의 기력은 점점 떨어지고 있습니다.\n난감한 상황입니다.\n이 상황을 벗어날 수 있는 방법이 있을까요?", + "query": "어떻게 하시겠습니까?", + "option": { + "1": { + "label": "{{option1PrimaryName}}의 도움", + "label_disabled": "{{option1RequiredMove}} 사용 불가", + "tooltip": "(+) {{option1PrimaryName}}[[가]] 당신을 구함\n(+) {{option1PrimaryName}} 경험치 획득", + "tooltip_disabled": "{{option1RequiredMove}}[[를]] 사용할 수 있는 포켓몬이 없다.", + "selected": "{{option1PrimaryName}}[[가]] 앞장서 헤엄치며, 돌아가는 길을 안내했다.${{option1PrimaryName}} 역시 이번 기회로 더 강해진 것 같다!" + }, + "2": { + "label": "{{option2PrimaryName}}의 도움", + "label_disabled": "{{option2RequiredMove}} 사용 불가", + "tooltip": "(+) {{option2PrimaryName}}[[가]] 당신을 구함\n(+) {{option2PrimaryName}} 경험치 획득", + "tooltip_disabled": "{{option2RequiredMove}}[[를]] 사용할 수 있는 포켓몬이 없다.", + "selected": "{{option2PrimaryName}}[[가]] 보트 앞에서 날아가며, 돌아가는 길을 안내했다.${{option2PrimaryName}} 역시 이번 기회로 더 강해진 것 같다!" + }, + "3": { + "label": "정처 없이 방황한다", + "tooltip": "(-) 모든 포켓몬 HP {{damagePercentage}}% 감소", + "selected": "마침내 기억하는 곳에 다다를 때까지\n정처 없이 배를 타고 떠돌아다닌다.$길고 긴 표류에 포켓몬과 당신 모두 지쳐버렸다." + } + }, + "outro": "다시 여정으로 돌아왔다." +} \ No newline at end of file diff --git a/src/locales/ko/mystery-encounters/mysterious-challengers-dialogue.json b/src/locales/ko/mystery-encounters/mysterious-challengers-dialogue.json new file mode 100644 index 00000000000..9ccfe54d808 --- /dev/null +++ b/src/locales/ko/mystery-encounters/mysterious-challengers-dialogue.json @@ -0,0 +1,22 @@ +{ + "intro": "수수께끼의 도전자들이 나타났다!", + "title": "수수께끼의 도전자", + "description": "만약 도전자에게 승리한다면, 당신의 배틀에 감명해 보상을 받을 수 있을 것 같습니다.\n그렇지만 어떤 도전자들은 꽤 강해보이기도 합니다.\n도전을 받아들일까요?", + "query": "누구와 배틀하시겠습니까?", + "option": { + "1": { + "label": "신중해 보이는 도전자", + "tooltip": "(-) 일반 배틀\n(+) 기술 아이템 보상" + }, + "2": { + "label": "강해 보이는 도전자", + "tooltip": "(-) 어려운 배틀\n(+) 좋은 보상" + }, + "3": { + "label": "가장 강한 도전자", + "tooltip": "(-) 악랄한 배틀\n(+) 훌륭한 보상" + }, + "selected": "선택한 트레이너가 앞으로 걸어 나온다…" + }, + "outro": "수수께끼의 도전자를 물리쳤다!" +} \ No newline at end of file diff --git a/src/locales/ko/mystery-encounters/mysterious-chest-dialogue.json b/src/locales/ko/mystery-encounters/mysterious-chest-dialogue.json new file mode 100644 index 00000000000..3b97f52e625 --- /dev/null +++ b/src/locales/ko/mystery-encounters/mysterious-chest-dialogue.json @@ -0,0 +1,23 @@ +{ + "intro": "이건…@d{32} 뭐지?", + "title": "수수께끼 상자", + "description": "아름답게 장식된 상자가 바닥에 놓여 있습니다. 보통 이럴 땐, 안에 뭔가 좋은 게 들었다고 생각하는 것이 인지상정…\n그렇지 않을까요?", + "query": "열어보시겠습니까?", + "option": { + "1": { + "label": "열어본다", + "tooltip": "@[SUMMARY_BLUE]{({{trapPercent}}%) 끔찍한 무언가}\n@[SUMMARY_GREEN]{({{commonPercent}}%) 평범한 보상}\n@[SUMMARY_GREEN]{({{ultraPercent}}%) 좋은 보상}\n@[SUMMARY_GREEN]{({{roguePercent}}%) 훌륭한 보상}\n@[SUMMARY_GREEN]{({{masterPercent}}%) 대단한 보상}", + "selected": "당신이 상자안에서 찾은 것은…", + "normal": "평범한 도구와 아이템이다.", + "good": "꽤 좋은 도구와 아이템이다.", + "great": "훌륭한 도구와 아이템이다!", + "amazing": "앗! 대단한 아이템!", + "bad": "으악!@d{32}\n상자는 사실 변장한 {{gimmighoulName}}이었다!${{pokeName}}[[가]] 앞으로 뛰어들어 막았지만\n기절해버렸다!" + }, + "2": { + "label": "위험할 수 있으니 떠난다", + "tooltip": "(-) 보상 없음", + "selected": "아쉬움을 뒤로 하고,\n당신은 서둘러 떠났다." + } + } +} diff --git a/src/locales/ko/mystery-encounters/part-timer-dialogue.json b/src/locales/ko/mystery-encounters/part-timer-dialogue.json new file mode 100644 index 00000000000..52dceaa5d35 --- /dev/null +++ b/src/locales/ko/mystery-encounters/part-timer-dialogue.json @@ -0,0 +1,31 @@ +{ + "intro": "바빠보이는 작업 팀장이 나를 불러세웠다.", + "speaker": "작업 팀장", + "intro_dialogue": "거기 당신!\n쓸만한 포켓몬들을 가지고 있는거 같네요.$혹시 시간 있으면 알바 안 할래요?", + "title": "아르바이트", + "description": "해야 할 일이 산더미같이 쌓여 있네요.\n포켓몬이 일을 얼마나 잘하는지에 따라\n일당을 더 많이 받을 수도, 더 적게 받을 수도 있을 것 같습니다.", + "query": "어떤 아르바이트를 해볼까요?", + "invalid_selection": "포켓몬이 건강하지 않습니다.", + "option": { + "1": { + "label": "배달하기", + "tooltip": "(-) 포켓몬의 스피드를 활용\n(+) @[MONEY]{소지금} 획득", + "selected": "{{selectedPokemon}}[[는]] 배달 아르바이트를 시작했다." + }, + "2": { + "label": "창고 정리", + "tooltip": "(-) 포켓몬의 힘과 튼튼함을 활용\n(+) @[MONEY]{소지금} 획득", + "selected": "{{selectedPokemon}}[[는]] 창고 정리를 시작했다." + }, + "3": { + "label": "바람잡이", + "tooltip": "(-) {{option3PrimaryName}}의 {{option3PrimaryMove}}를 활용\n(+) @[MONEY]{소지금} 획득", + "disabled_tooltip": "포켓몬이 해당 작업에 필요한 기술이 없습니다.", + "selected": "{{option3PrimaryName}}[[는]] {{option3PrimaryMove}}[[로]]\n하루 종일 손님들을 끌어모았다!" + } + }, + "job_complete_good": "도와줘서 고마워요!\n오늘은 거의 {{selectedPokemon}} 혼자서 일을 다한 것 같네요!$여기 일당이에요!", + "job_complete_bad": "{{selectedPokemon}}[[가]] 뭐… 조금은 도움이 된 거 같네요!$여기 일당이에요.", + "pokemon_tired": "{{selectedPokemon}}[[가]] 지친 것 같다!\n모든 기술의 PP가 2로 감소했다!", + "outro": "다음에 또 도와주러 와요!" +} \ No newline at end of file diff --git a/src/locales/ko/mystery-encounters/safari-zone-dialogue.json b/src/locales/ko/mystery-encounters/safari-zone-dialogue.json new file mode 100644 index 00000000000..4cdad3dd1ed --- /dev/null +++ b/src/locales/ko/mystery-encounters/safari-zone-dialogue.json @@ -0,0 +1,46 @@ +{ + "intro": "사파리존이다!", + "title": "사파리존", + "description": "여기에는 오만 가지 희귀하고 특별한 포켓몬들이 살고 있습니다! 특별한 포켓몬을 최대 3마리까지 만나고 잡을 기회가 있답니다.\n\n하지만 조심하세요! 잡기도 전에 포켓몬이 도망칠 수도 있으니까요!", + "query": "들어가시겠습니까?", + "option": { + "1": { + "label": "들어간다", + "tooltip": "(-) {{option1Money, money}} 지불\n@[SUMMARY_GREEN]{(?) 사파리존 입장}", + "selected": "행운을 시험할 시간입니다!" + }, + "2": { + "label": "떠난다", + "tooltip": "(-) 보상 없음", + "selected": "약간의 아쉬움을 남기고, 서둘러 길을 떠났다" + } + }, + "safari": { + "1": { + "label": "몬스터볼을 던진다", + "tooltip": "(+) 몬스터볼을 던짐", + "selected": "몬스터볼을 던졌다!" + }, + "2": { + "label": "먹이를 던진다", + "tooltip": "(+) 포획률 상승\n(-) 도망칠 확률 상승", + "selected": "먹이를 던졌다!" + }, + "3": { + "label": "진흙을 던진다", + "tooltip": "(+) 도망칠 확률 감소\n(-) 포획률 감소", + "selected": "진흙을 던졌다!" + }, + "4": { + "label": "도망친다", + "tooltip": "(?) 이 포켓몬에게서 도망친다" + }, + "watching": "{{pokemonName}}[[는]] 조심스럽게 바라보고 있다!", + "eating": "{{pokemonName}}[[가]] 먹이를 먹고 있다!", + "busy_eating": "{{pokemonName}}[[가]] 먹이를 먹기 바쁘다!", + "angry": "{{pokemonName}}[[가]] 화가 난 것 같다!", + "beside_itself_angry": "{{pokemonName}}[[가]] 머리 끝까지 화가 난 것 같다!", + "remaining_count": "포켓몬이 {{remainingCount}}마리 남았다!" + }, + "outro": "재미있는 사파리 체험이었다!" +} \ No newline at end of file diff --git a/src/locales/ko/mystery-encounters/shady-vitamin-dealer-dialogue.json b/src/locales/ko/mystery-encounters/shady-vitamin-dealer-dialogue.json new file mode 100644 index 00000000000..3866570b1db --- /dev/null +++ b/src/locales/ko/mystery-encounters/shady-vitamin-dealer-dialogue.json @@ -0,0 +1,27 @@ +{ + "intro": "검은 코트를 입은 남자가 다가왔다.", + "speaker": "수상한 상인", + "intro_dialogue": ".@d{16}.@d{16}.@d{16}$아-주 좋은 물건이 있는데, 관심 있어?$물론, 네 포켓몬이 이걸 감당할 수 있을지는 모르지만.", + "title": "영양제(?) 딜러", + "description": "남자가 코트를 살짝 열어 보여주자,\n코트 안쪽에 포켓몬 영양제들이 빼곡히 들어있는 것이 보입니다.\n그가 부른 가격은 아주 매력적입니다. 좋아도 너무 좋군요…\n그는 두가지 선택지를 제시했습니다.", + "query": "거래를 받아들일까요?", + "invalid_selection": "포켓몬이 충분히 건강하지 않습니다.", + "option": { + "1": { + "label": "저렴한 거래", + "tooltip": "(-) {{option1Money, money}} 지불\n(-) 부작용?\n(+) 선택한 포켓몬이 2가지 무작위 영양제 효과를 얻음" + }, + "2": { + "label": "비싼 거래", + "tooltip": "(-) {{option2Money, money}} 지불\n(+) 선택한 포켓몬이 2가지 무작위 영양제 효과를 얻음" + }, + "3": { + "label": "떠난다", + "tooltip": "(-) 보상 없음", + "selected": "흥, 너 같은 겁쟁이한테는 안 팔아." + }, + "selected": "남자는 영양제 두 병을 건넨 뒤,\n빠르게 사라졌다.${{selectedPokemon}}[[는]] {{boost1}}[[과]] {{boost2}} 효과를 얻었다!" + }, + "cheap_side_effects": "그런데 약이 부작용이 있는 것 같다!${{selectedPokemon}}[[가]] 약간 고통스러워한다.\n성격이 {{newNature}}[[로]] 변해버렸다!", + "no_bad_effects": "딱히 부작용은 없는 것 같다!" +} \ No newline at end of file diff --git a/src/locales/ko/mystery-encounters/slumbering-snorlax-dialogue.json b/src/locales/ko/mystery-encounters/slumbering-snorlax-dialogue.json new file mode 100644 index 00000000000..afac8be35e2 --- /dev/null +++ b/src/locales/ko/mystery-encounters/slumbering-snorlax-dialogue.json @@ -0,0 +1,25 @@ +{ + "intro": "좁은 길을 걷다보니 거대한 실루엣이\n길을 막고 있는 것을 발견했다.$가까이 다가가 보니 평화롭게 자고있는 {{snorlaxName}}였다.\n피할 수 있는 방법은 없는 것 같다….", + "title": "잠자는 {{snorlaxName}}", + "description": "자고있는 {{snorlaxName}}[[를]] 지금 당장 공격해서 자리를 비키게 할 수도, 그냥 알아서 잠에서 깨어날 때까지 기다릴 수도 있습니다.\n얼마나 기다려야 할지는 알 수 없겠지만요….", + "query": "어떻게 하시겠습니까?", + "option": { + "1": { + "label": "싸운다", + "tooltip": "(-) 잠자는 {{snorlaxName}}[[과]] 배틀\n(+) 특별한 보상", + "selected": "용감하게 포켓몬에게 다가갔다." + }, + "2": { + "label": "움직일 때까지 기다린다", + "tooltip": "(-) 긴 시간을 기다림 \n(+) 멤버 HP회복", + "selected": ".@d{32}.@d{32}.@d{32}$한참을 기다리다보니, {{snorlaxName}}의 하품이 모두를 졸리게 만든다….", + "rest_result": "모두가 잠에서 깨어났을 무렵, {{snorlaxName}}[[는]] 어디에도 없었다.\n하지만 모든 포켓몬이 회복되었다!" + }, + "3": { + "label": "아이템을 훔친다", + "tooltip": "(+) {{option3PrimaryName}}[[가]] {{option3PrimaryMove}}[[를]] 사용\n(+) 특별한 보상", + "disabled_tooltip": "포켓몬이 특정 기술을 알고 있어야 한다.", + "selected": "{{option3PrimaryName}}[[는]] {{option3PrimaryMove}}[[를]] 사용했다!$@s{item_fanfare}자고 있는 {{snorlaxName}}[[로]]부터\n남은 음식을 훔쳐서 살금살금 도망쳤다!" + } + } +} \ No newline at end of file diff --git a/src/locales/ko/mystery-encounters/teleporting-hijinks-dialogue.json b/src/locales/ko/mystery-encounters/teleporting-hijinks-dialogue.json new file mode 100644 index 00000000000..de87ab83858 --- /dev/null +++ b/src/locales/ko/mystery-encounters/teleporting-hijinks-dialogue.json @@ -0,0 +1,27 @@ +{ + "intro": "시끄럽게 윙윙거리고 있는\n이상한 기계를 발견했다….", + "title": "텔레포트 대소동", + "description": "기계에는 다음과 같이 설명이 쓰여 있습니다.\n\"사용하려면 돈을 넣고 캡슐에 들어가세요.\"\n\n기계를 작동시키면 어딘가로 이동할 수 있을 듯하다……", + "query": "어떻게 하시겠습니까?", + "option": { + "1": { + "label": "돈을 넣는다", + "tooltip": "(-) {{price, money}} 지불\n(?) 다른 바이옴으로 이동", + "selected": "돈을 넣자 캡슐이 열렸다.\n당신은 안으로 들어갔다……." + }, + "2": { + "label": "포켓몬의 도움", + "tooltip": "(-) {{option2PrimaryName}}[[가]] 도와줌\n(+) {{option2PrimaryName}}[[가]] 경험치를 획득\n(?) 다른 바이옴으로 이동", + "disabled_tooltip": "강철 또는 전기 타입 포켓몬이 있어야 한다.", + "selected": "{{option2PrimaryName}} 덕분에\n결제 시스템을 해제할 수 있었다!$캡슐이 열리자\n당신은 안으로 들어갔다…." + }, + "3": { + "label": "기계를 조사한다", + "tooltip": "(-) 포켓몬 배틀", + "selected": "기계에서 나오는 깜빡이는 불빛과\n기묘한 소리에 몰두했다…….$정신이 팔려서 야생 포켓몬이\n다가오는 것도 눈치채지 못했다!" + } + }, + "transport": "별안간 기계가 심하게 흔들리면서\n온갖 이상한 소리가 나기 시작했다!$얼마 안 가서 기계는 다시 조용해졌다.", + "attacked": "새로운 지역에 발을 내딛자마자\n놀란 야생 포켓몬과 마주쳤다!$야생 포켓몬이 달려들었다!", + "boss_enraged": "상대 {{enemyPokemon}}[[는]] 화가 난 것 같다!" +} \ No newline at end of file diff --git a/src/locales/ko/mystery-encounters/the-expert-pokemon-breeder-dialogue.json b/src/locales/ko/mystery-encounters/the-expert-pokemon-breeder-dialogue.json new file mode 100644 index 00000000000..e226741c60a --- /dev/null +++ b/src/locales/ko/mystery-encounters/the-expert-pokemon-breeder-dialogue.json @@ -0,0 +1,32 @@ +{ + "intro": "포켓몬 알을 잔뜩 가진 트레이너가 나타났다!", + "intro_dialogue": "안녕하세요, 트레이너!$당신의 몇몇 파트너 포켓몬이\n조금 기운 없어 보이네요.$저와 배틀을 해서\n기운이 나게끔 해주는 건 어떨까요?", + "title": "전문 브리더", + "description": "브리더를 상대로 @[TOOLTIP_TITLE]{포켓몬 1마리만} 사용해서 승부해야 합니다. 조금 힘들겠지만, 선택한 포켓몬과 유대감이 더욱 깊어질 기회입니다!\n게다가 승리하면 @[TOOLTIP_TITLE]{포켓몬 알}까지 준다고 합니다!", + + "query": "어떤 포켓몬으로 싸우겠습니까?", + "cleffa_1_nickname": "에이스", + "cleffa_2_nickname": "픽시짱", + "cleffa_3_nickname": "{{speciesName}} 대왕", + "option": { + "1": { + "label": "{{pokemon1Name}}", + "tooltip_base": "(-) 힘든 배틀\n(+) {{pokemon1Name}} 친밀도 상승" + }, + "2": { + "label": "{{pokemon2Name}}", + "tooltip_base": "(-) 힘든 배틀\n(+) {{pokemon2Name}} 친밀도 상승" + }, + "3": { + "label": "{{pokemon3Name}}", + "tooltip_base": "(-) 힘든 배틀\n(+) {{pokemon3Name}} 친밀도 상승" + }, + "selected": "그럼 갑니다!" + }, + "outro": "{{chosenPokemon}}[[가]] 정말 행복해 보이네요!$여기, 이것도 드릴게요.", + "outro_failed": "실망이네요….$포켓몬의 신뢰를 얻으려면 아직 멀었어요!", + "gained_eggs": "@s{item_fanfare}{{numEggs}}[[를]] 받았습니다!", + "eggs_tooltip": "\n(+) {{eggs}} 획득", + "numEggs_one": "{{rarity}}알 {{count}}개", + "numEggs_other": "{{rarity}}알 {{count}}개" +} diff --git a/src/locales/ko/mystery-encounters/the-pokemon-salesman-dialogue.json b/src/locales/ko/mystery-encounters/the-pokemon-salesman-dialogue.json new file mode 100644 index 00000000000..f5b35cb33cb --- /dev/null +++ b/src/locales/ko/mystery-encounters/the-pokemon-salesman-dialogue.json @@ -0,0 +1,23 @@ +{ + "intro": "쾌활한 노신사가 다가왔다.", + "speaker": "신사", + "intro_dialogue": "거기, 안녕하신가!\n자네에게 좋은 거래를 제안하지!", + "title": "포켓몬 상인", + "description": "\"이 {{purchasePokemon}}[[는]] 다른 평범한 {{purchasePokemon}}에서는 찾을 수 없는 매우 희귀한 특성을 갖고 있다네!\n내가 이 멋진 {{purchasePokemon}}[[를]] 자네에게 {{price, money}}에 주고 싶은데!\"\n\n\"어떻게 생각하는가?\"", + "description_shiny": "\"이 {{purchasePokemon}}[[는]] 다른 평범한 {{purchasePokemon}}에서는 볼 수 없는 매우 희귀한 색깔이라네!\n내가 이 멋진 {{purchasePokemon}}[[를]] 자네에게 {{price, money}}에 주고 싶은데!\"\n\n\"어떻게 생각하는가?\"", + "query": "어떻게 하시겠습니까?", + "option": { + "1": { + "label": "승낙한다", + "tooltip": "(-) {{price, money}} 지불\n(+) 숨겨진 특성을 가진 {{purchasePokemon}}[[를]] 얻음", + "tooltip_shiny": "(-) {{price, money}} 지불\n(+) 특별한 색을 가진 {{purchasePokemon}}[[를]] 얻음", + "selected_message": "터무니없는 금액을 내고\n{{purchasePokemon}}[[를]] 데려왔다.", + "selected_dialogue": "탁월한 선택이로군!$자네는 비즈니스에 안목이 있구먼.$아차차…@d{64} 반품은 안 된다네. 알고 있겠지?" + }, + "2": { + "label": "거절한다", + "tooltip": "(-) 보상 없음", + "selected": "아니?@d{32} 거절하겠다고?$요즘 젊은이들은\n호의를 베풀어도 모른다니까!" + } + } +} \ No newline at end of file diff --git a/src/locales/ko/mystery-encounters/the-strong-stuff-dialogue.json b/src/locales/ko/mystery-encounters/the-strong-stuff-dialogue.json new file mode 100644 index 00000000000..1563041e5bd --- /dev/null +++ b/src/locales/ko/mystery-encounters/the-strong-stuff-dialogue.json @@ -0,0 +1,21 @@ +{ + "intro": "커다란 {{shuckleName}}를 만났다!\n옆에 한가득 차 있는 저건 주스…?", + "title": "강력한 물질", + "description": "당신을 막아선 {{shuckleName}}[[는]] 엄청나게 강해보입니다. 게다가 그 옆에 있는 주스에서는 무언가 강한 기운이 느껴지는 것 같습니다.\n\n{{shuckleName}}가 당신 쪽으로 다리를 내밉니다.\n무언가 하려는 모양입니다…", + "query": "어떻게 하시겠습니까?", + "option": { + "1": { + "label": "{{shuckleName}}에게 다가간다", + "tooltip": "(?) 끔찍하거나 놀라운 일", + "selected": "당신은 기절해버렸다……….", + "selected_2": "@f{150}정신을 차리고 나니, {{shuckleName}}[[는]] 사라지고\n주스도 완전히 비었다.${{highBstPokemon1}}[[과]] {{highBstPokemon2}}[[는]]\n굉장히 무기력해졌다!$두 포켓몬의 종족치가 각각 {{reductionValue}}만큼 감소했다!$하지만 다른 포켓몬들은 놀라울만큼 활력이 넘친다!\n다른 포켓몬들의 종족치가 각각 {{increaseValue}}만큼 증가했다!" + }, + "2": { + "label": "{{shuckleName}}[[과]] 싸운다", + "tooltip": "(-) 어려운 배틀\n(+) 특별한 보상", + "selected": "화가 난 {{shuckleName}}[[가]] 주스를 마시고 공격해 왔다!", + "stat_boost": "주스를 마신 {{shuckleName}}의 능력치가 올라갔다!" + } + }, + "outro": "기묘한 일을 겪은 것 같다…." +} \ No newline at end of file diff --git a/src/locales/ko/mystery-encounters/the-winstrate-challenge-dialogue.json b/src/locales/ko/mystery-encounters/the-winstrate-challenge-dialogue.json new file mode 100644 index 00000000000..b7b96926f57 --- /dev/null +++ b/src/locales/ko/mystery-encounters/the-winstrate-challenge-dialogue.json @@ -0,0 +1,22 @@ +{ + "intro": "한 가족이 집 앞에 모두 나와있다!", + "speaker": "연승가족", + "intro_dialogue": "우리는 연승가족!$잠깐 어떤가?\n지금 여기서 우리 가족 4명과 포켓몬 승부를 겨뤄보지 않겠나?", + "title": "연승가족", + "description": "모두 5명인 연승가족이 승부를 바라고 있습니다!\n가족 모두를 연달아 쓰러뜨릴 수 있다면 어마어마한 보상을 줄 겁니다.\n하지만 이걸 감당할 수 있을까요?", + "query": "어떻게 하시겠습니까?", + "option": { + "1": { + "label": "승부한다", + "tooltip": "(-) 치열한 승부\n(+) 특별한 아이템 획득", + "selected": "승부를 시작하지!" + }, + "2": { + "label": "승부를 거절한다", + "tooltip": "(+) 파티 전체 회복\n(+) 더이상한사탕 획득", + "selected": "아쉽군. 그런데 자네 포켓몬들 좀 지쳐보이는구만,\n조금 쉬고 가지 않을텐가?" + } + }, + "victory": "우리의 시련을 모두 극복하다니 축하하네!$먼저 이 바우처를 주겠네.", + "victory_2": "우리 가족은 이 교정깁스로 포켓몬을 더 효과적으로 훈련하고 있다네.$우리 전부를 이긴 자네에겐 의미 없을 수도 있겠지만,\n그래도 이걸 받아주게!" +} \ No newline at end of file diff --git a/src/locales/ko/mystery-encounters/training-session-dialogue.json b/src/locales/ko/mystery-encounters/training-session-dialogue.json new file mode 100644 index 00000000000..fc9d6721c40 --- /dev/null +++ b/src/locales/ko/mystery-encounters/training-session-dialogue.json @@ -0,0 +1,33 @@ +{ + "intro": "훈련에 쓸 만한 물건들을 발견했다.", + "title": "트레이닝 시간", + "description": "발견한 기구들은 포켓몬들을 훈련시키는 데 쓸 수 있을 것 같습니다!\n파티의 다른 포켓몬들과 싸우면서 원하는 방식으로 훈련해 보면 어떨까요?", + "query": "어떻게 훈련할까요?", + "invalid_selection": "포켓몬이 힘들어 보인다.", + "option": { + "1": { + "label": "가벼운 트레이닝", + "tooltip": "(-) 쉬운 배틀 \n(+) 선택 포켓몬 무작위 개체치 2가지 향상", + "finished": "훈련을 마친 {{selectedPokemon}}[[는]] 조금 지쳤지만 뿌듯해 보인다!${{selectedPokemon}}의 {{stat1}}[[과]] {{stat2}}[[가]] 상승했다!" + }, + "2": { + "label": "일반적인 트레이닝", + "tooltip": "(-) 평범한 배틀\n(+) 선택 포켓몬 성격 변경", + "select_prompt": "포켓몬과 훈련할\n새로운 성격을 선택하세요.", + "finished": "훈련을 마친 {{selectedPokemon}}[[는]] 조금 지쳤지만 뿌듯해 보인다!${{selectedPokemon}}의 성격이 {{nature}}[[로]] 바뀌었다!" + }, + "3": { + "label": "고강도 트레이닝", + "tooltip": "(-) 힘든 배틀\n(+) 선택 포켓몬 특성 변경", + "select_prompt": "포켓몬과 훈련할\n새로운 특성을 선택을 선택하세요.", + "finished": "훈련을 마친 {{selectedPokemon}}[[는]] 조금 지쳤지만 뿌듯해 보인다!${{selectedPokemon}}의 특성이 {{ability}}[[로]] 바뀌었다!" + }, + "4": { + "label": "떠난다", + "tooltip": "(-) 보상 없음", + "selected": "훈련할 시간은 없다.\n바로 길을 떠났다." + }, + "selected": "{{selectedPokemon}}[[가]] 공터를 가로질러\n이쪽을 보고 마주섰다…" + }, + "outro": "성공적인 트레이닝 시간이었다!" +} \ No newline at end of file diff --git a/src/locales/ko/mystery-encounters/trash-to-treasure-dialogue.json b/src/locales/ko/mystery-encounters/trash-to-treasure-dialogue.json new file mode 100644 index 00000000000..ac285692d23 --- /dev/null +++ b/src/locales/ko/mystery-encounters/trash-to-treasure-dialogue.json @@ -0,0 +1,19 @@ +{ + "intro": "엄청난 쓰레기 더미다!\n도대체 어디서 온 걸까?", + "title": "쓰레기 속 보물", + "description": "쓰레기 더미가 눈앞에 펼쳐져 있습니다.\n그 속에서 가치 있는 물건을 찾을 수도 있겠죠.\n하지만 그 물건들을 얻기 위해\n정말로 오물을 뒤집어쓰고 싶으신가요?", + "query": "무엇을 하시겠습니까?", + "option": { + "1": { + "label": "쓸만한 것을 발굴한다", + "tooltip": "(-) 회복 아이템 가격 3배 상승\n(+) 끝내주는 아이템들을 획득", + "selected": "쓰레기 더미를 헤집고 다니며 오물을 뒤집어썼다.$지금 이 상태라면 아무리 친절한 점원이라도\n물건을 제 가격에 안 팔 것 같다!$앞으로는 상점에서 파는 회복약을 훨씬 비싸게 사야 한다.$하지만 쓰레기에서 엄청난 물건들을 발견했다!" + }, + "2": { + "label": "주변을 조사한다", + "tooltip": "(?) 쓰레기의 근원을 찾는다", + "selected": "쓰레기 더미 주변을 거닐며,\n이게 여기 어떻게 생겨난 건지 단서를 찾아본다…", + "selected_2": "갑자기 쓰레기 더미가 움직였다!\n쓰레기가 아니라 포켓몬이었다!" + } + } +} \ No newline at end of file diff --git a/src/locales/ko/mystery-encounters/uncommon-breed-dialogue.json b/src/locales/ko/mystery-encounters/uncommon-breed-dialogue.json new file mode 100644 index 00000000000..aeec128b313 --- /dev/null +++ b/src/locales/ko/mystery-encounters/uncommon-breed-dialogue.json @@ -0,0 +1,26 @@ +{ + "intro": "저건 평범한 포켓몬이 아닌 것 같다!", + "title": "흔하지 않은 포켓몬", + "description": "저 {{enemyPokemon}}[[는]] 다른 {{enemyPokemon}}[[과]]는 어딘가 달라보입니다. @[TOOLTIP_TITLE]{아마 특별한 기술을 알고 있을지도?}\n평범하게 배틀로 잡을 수도 있지만, 친구가 되는 방법도 있을 것 같습니다.", + "query": "어떻게 하시겠습니까?", + "option": { + "1": { + "label": "포켓몬과 싸운다", + "tooltip": "(-) 까다로운 배틀\n(+) 포획 가능한 강한 적", + "selected": "{{enemyPokemon}}에게 용감하게 맞섰다.", + "stat_boost": "{{enemyPokemon}}[[가]] 집중해서 능력치가 상승했다!" + }, + "2": { + "label": "음식을 준다", + "disabled_tooltip": "선택지를 고르려면 나무열매가 4개 필요하다.", + "tooltip": "(-) 나무열매 4개를 줌\n(+) {{enemyPokemon}}[[가]] 좋아함", + "selected": "{{enemyPokemon}}에게 나무열매를 주었다!$행복한 듯 맛있게 먹기 시작했다!${{enemyPokemon}}[[는]] 동료가 되고 싶어하는 것 같다!" + }, + "3": { + "label": "친구가 되기", + "disabled_tooltip": "파티의 포켓몬이 특정한 기술을 알고 있어야한다.", + "tooltip": "(+) {{option3PrimaryName}}[[가]] {{option3PrimaryMove}}[[를]] 사용\n(+) {{enemyPokemon}}[[가]] 좋아함", + "selected": "{{option3PrimaryName}}[[가]] {{option3PrimaryMove}}[[를]] 사용해\n{{enemyPokemon}}를 매료시켰다!${{enemyPokemon}}[[는]] 동료가 되고 싶어하는 것 같다!" + } + } +} \ No newline at end of file diff --git a/src/locales/ko/mystery-encounters/weird-dream-dialogue.json b/src/locales/ko/mystery-encounters/weird-dream-dialogue.json new file mode 100644 index 00000000000..303c459a1fb --- /dev/null +++ b/src/locales/ko/mystery-encounters/weird-dream-dialogue.json @@ -0,0 +1,22 @@ +{ + "intro": "어떤 여자의 실루엣이 앞을 막아섰다.\n그녀에게서 뭔가 불안한 느낌이 든다…….", + "speaker": "여자", + "intro_dialogue": "너의 미래와 과거를 봤어….$저기…\n너도 그게 보이는 걸까?", + "title": "???", + "description": "여자의 말이 머릿속에서 메아리처럼 울려 퍼집니다. 이건 단순히 한 사람의 목소리가 아닙니다. 모든 시간선과 현실에서 온 수많은 사람들의 목소리입니다.\n당신은 어지러움을 느끼기 시작하고, 한 질문이 머릿속을 맴돌기 시작합니다…\n\n@[TOOLTIP_TITLE]{\"너의 미래와 과거를 봤어….저기… 너도 그게 보이는 걸까?\"}", + "query": "어떻게 하시겠습니까?", + "option": { + "1": { + "label": "고개를 끄덕인다", + "tooltip": "@[SUMMARY_GREEN]{(?) 파티의 포켓몬에 영향}", + "selected": "그녀는 당신에게 손을 뻗었고,\n이내 모든 것이 깜깜해졌다.$그리고…@d{64} 당신은 모든 것이 보인다.\n모든 시간선, 또 다른 당신의 모습,\n 과거와 미래.$당신을 만들어온 모든 것,\n당신이 될 모든 것…@d{64}", + "cutscene": "당신의 포켓몬들이 보인다.@d{32} 모든 현실이\n합쳐져 새로운 무언가가 되고 있다…@d{64}", + "dream_complete": "잠에서 깨어나자, 여자는 사라진 것 같다.\n사람이 아니라 유령이었을지도…$.@d{32}.@d{32}.@d{32}?$파티의 포켓몬이 바뀌었다…?$…아니, 원래부터 이 상태였는지도 모른다." + }, + "2": { + "label": "빠르게 떠난다", + "tooltip": "(-) 파티의 포켓몬에 영향", + "selected": "당신을 무감각하게 만들던 손아귀에서 벗어나,\n정신을 차리고 서둘러 자리를 떠났다.$간신히 정신을 추스르고 멈춰 서서\n파티의 포켓몬들을 확인했다.$이유는 알 수 없지만\n파티의 모든 포켓몬 레벨이 약간 줄어들었다!" + } + } +} \ No newline at end of file diff --git a/src/locales/ko/party-ui-handler.json b/src/locales/ko/party-ui-handler.json index 6e7ba120b71..35cf379556f 100644 --- a/src/locales/ko/party-ui-handler.json +++ b/src/locales/ko/party-ui-handler.json @@ -47,4 +47,4 @@ "untilWeMeetAgain": "다시 만날 때까지, {{pokemonName}}!", "sayonara": "사요나라, {{pokemonName}}!", "smellYaLater": "또 보자, {{pokemonName}}!" -} \ No newline at end of file +} diff --git a/src/locales/ko/pokemon-form.json b/src/locales/ko/pokemon-form.json index 885f9a9b891..dce2fcd35cf 100644 --- a/src/locales/ko/pokemon-form.json +++ b/src/locales/ko/pokemon-form.json @@ -1,4 +1,5 @@ { + "pikachu": "일반", "pikachuCosplay": "옷갈아입기", "pikachuCoolCosplay": "하드록", "pikachuBeautyCosplay": "마담", @@ -6,7 +7,9 @@ "pikachuSmartCosplay": "닥터", "pikachuToughCosplay": "마스크드", "pikachuPartner": "파트너", + "eevee": "일반", "eeveePartner": "파트너", + "pichu": "일반", "pichuSpiky": "삐쭉귀", "unownA": "A", "unownB": "B", @@ -36,36 +39,65 @@ "unownZ": "Z", "unownExclamation": "!", "unownQuestion": "?", + "castform": "평상시", "castformSunny": "태양의 모습", "castformRainy": "빗방울의 모습", "castformSnowy": "설운의 모습", "deoxysNormal": "노말폼", + "deoxysAttack": "어택폼", + "deoxysDefense": "디펜스폼", + "deoxysSpeed": "스피드폼", "burmyPlant": "초목도롱", "burmySandy": "모래땅도롱", "burmyTrash": "슈레도롱", + "cherubiOvercast": "네거폼", + "cherubiSunshine": "포지폼", "shellosEast": "동쪽바다의 모습", "shellosWest": "서쪽바다의 모습", - "rotomHeat": "히트", - "rotomWash": "워시", - "rotomFrost": "프로스트", - "rotomFan": "스핀", - "rotomMow": "커트", + "rotom": "로토무", + "rotomHeat": "히트로토무", + "rotomWash": "워시로토무", + "rotomFrost": "프로스트로토무", + "rotomFan": "스핀로토무", + "rotomMow": "커트로토무", + "dialga": "어나더폼", + "dialgaOrigin": "오리진폼", + "palkia": "어나더폼", + "palkiaOrigin": "오리진폼", "giratinaAltered": "어나더폼", + "giratinaOrigin": "오리진폼", "shayminLand": "랜드폼", + "shayminSky": "스카이폼", "basculinRedStriped": "적색근의 모습", "basculinBlueStriped": "청색근의 모습", "basculinWhiteStriped": "백색근의 모습", + "darumaka": "노말모드", + "darumakaZen": "달마모드", "deerlingSpring": "봄의 모습", "deerlingSummer": "여름의 모습", "deerlingAutumn": "가을의 모습", "deerlingWinter": "겨울의 모습", "tornadusIncarnate": "화신폼", + "tornadusTherian": "영물폼", "thundurusIncarnate": "화신폼", + "thundurusTherian": "영물폼", "landorusIncarnate": "화신폼", + "landorusTherian": "영물폼", + "kyurem": "큐레무", + "kyuremBlack": "블랙큐레무", + "kyuremWhite": "화이트큐레무", "keldeoOrdinary": "평상시 모습", + "keldeoResolute": "각오의 모습", "meloettaAria": "보이스폼", "meloettaPirouette": "스텝폼", + "genesect": "노말폼", + "genesectShock": "라이트닝폼", + "genesectBurn": "블레이즈폼", + "genesectChill": "프리즈폼", + "genesectDouse": "아쿠아폼", + "froakie": "개굴닌자", "froakieBattleBond": "유대변화", + "froakieAsh": "지우개굴닌자", "scatterbugMeadow": "화원의 모양", "scatterbugIcySnow": "빙설의 모양", "scatterbugPolar": "설국의 모양", @@ -91,6 +123,7 @@ "flabebeOrange": "오렌지색 꽃", "flabebeBlue": "파란 꽃", "flabebeWhite": "하얀 꽃", + "furfrou": "일반", "furfrouHeart": "하트컷", "furfrouStar": "스타컷", "furfrouDiamond": "다이아컷", @@ -100,6 +133,11 @@ "furfrouLaReine": "퀸컷", "furfrouKabuki": "가부키컷", "furfrouPharaoh": "킹덤컷", + "espurrMale": "수컷의 모습", + "espurrFemale": "암컷의 모습", + "honedgeShiled": "실드폼", + "honedgeBlade": "블레이드폼", + "pumpkaboo": "보통 사이즈", "pumpkabooSmall": "작은 사이즈", "pumpkabooLarge": "큰 사이즈", "pumpkabooSuper": "특대 사이즈", @@ -110,11 +148,37 @@ "zygarde50Pc": "스웜체인지 50%폼", "zygarde10Pc": "스웜체인지 10%폼", "zygardeComplete": "퍼펙트폼", + "hoopa": "굴레에 빠진 모습", + "hoopaUnbound": "굴레를 벗어난 모습", "oricorioBaile": "이글이글스타일", "oricorioPompom": "파칙파칙스타일", "oricorioPau": "훌라훌라스타일", "oricorioSensu": "하늘하늘스타일", + "rockruff": "일반", "rockruffOwnTempo": "마이페이스", + "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": "유성의 모습(노랑)", @@ -131,25 +195,66 @@ "miniorViolet": "보라색 코어", "mimikyuDisguised": "둔갑한 모습", "mimikyuBusted": "들킨 모습", + "necrozma": "네크로즈마", + "necrozmaDuskMane": "황혼의 갈기", + "necrozmaDawnWings": "새벽의 날개", + "necrozmaUltra": "울트라네크로즈마", + "magearna": "일반적인 모습", "magearnaOriginal": "500년 전의 색", - "marshadowZenith": "투지를 불태운 마샤도", + "marshadow": "일반적인 모습", + "marshadowZenith": "타오르는 투지의 모습", + "cramorant": "일반", + "cramorantGulping": "그대로 삼킨 모습", + "cramorantGorging": "통째로 삼킨 모습", + "toxelAmped": "하이한 모습", + "toxelLowkey": "로우한 모습", "sinisteaPhony": "위작품", "sinisteaAntique": "진작품", + "milceryVanillaCream": "밀키바닐라", + "milceryRubyCream": "밀키루비", + "milceryMatchaCream": "밀키말차", + "milceryMintCream": "밀키민트", + "milceryLemonCream": "밀키레몬", + "milcerySaltedCream": "밀키솔트", + "milceryRubySwirl": "루비믹스", + "milceryCaramelSwirl": "캐러멜믹스", + "milceryRainbowSwirl": "트리플믹스", + "eiscue": "아이스페이스", "eiscueNoIce": "나이스페이스", "indeedeeMale": "수컷의 모습", "indeedeeFemale": "암컷의 모습", "morpekoFullBelly": "배부른 모양", + "morpekoHangry": "배고픈 모양", "zacianHeroOfManyBattles": "역전의 용사", + "zacianCrowned": "검왕", "zamazentaHeroOfManyBattles": "역전의 용사", + "zamazentaCrowned": "방패왕", + "kubfuSingleStrike": "일격의 태세", + "kubfuRapidStrike": "연격의 태세", + "zarude": "일반", "zarudeDada": "아빠", + "calyrex": "일반", + "calyrexIce": "백마 탄 모습", + "calyrexShadow": "흑마 탄 모습", + "basculinMale": "수컷의 모습", + "basculinFemale": "암컷의 모습", "enamorusIncarnate": "화신폼", + "enamorusTherian": "영물폼", + "lechonkMale": "수컷의 모습", + "lechonkFemale": "암컷의 모습", + "tandemausFour": "네 식구", + "tandemausThree": "세 식구", "squawkabillyGreenPlumage": "그린 페더", "squawkabillyBluePlumage": "블루 페더", "squawkabillyYellowPlumage": "옐로 페더", "squawkabillyWhitePlumage": "화이트 페더", + "finizenZero": "나이브폼", + "finizenHero": "마이티폼", "tatsugiriCurly": "젖힌 모습", "tatsugiriDroopy": "늘어진 모습", "tatsugiriStretchy": "뻗은 모습", + "dunsparceTwo": "두 마디 폼", + "dunsparceThree": "세 마디 폼", "gimmighoulChest": "상자폼", "gimmighoulRoaming": "도보폼", "koraidonApexBuild": "완전형태", @@ -164,7 +269,22 @@ "miraidonGlideMode": "글라이드모드", "poltchageistCounterfeit": "가짜배기의 모습", "poltchageistArtisan": "알짜배기의 모습", + "poltchageistUnremarkable": "범작의 모습", + "poltchageistMasterpiece": "걸작의 모습", + "ogerponTealMask": "벽록의가면", + "ogerponTealMaskTera": "벽록의가면 테라스탈", + "ogerponWellspringMask": "우물의가면", + "ogerponWellspringMaskTera": "우물의가면 테라스탈", + "ogerponHearthflameMask": "화덕의가면", + "ogerponHearthflameMaskTera": "화덕의가면 테라스탈", + "ogerponCornerstoneMask": "주춧돌의가면", + "ogerponCornerstoneMaskTera": "주춧돌의가면 테라스탈", + "terpagos": "노말폼", + "terpagosTerastal": "테라스탈폼", + "terpagosStellar": "스텔라폼", + "galarDarumaka": "노말모드", + "galarDarumakaZen": "달마모드", "paldeaTaurosCombat": "컴뱃종", "paldeaTaurosBlaze": "블레이즈종", "paldeaTaurosAqua": "워터종" -} \ No newline at end of file +} diff --git a/src/locales/ko/trainer-classes.json b/src/locales/ko/trainer-classes.json index da6c6f4aceb..89cbe250c83 100644 --- a/src/locales/ko/trainer-classes.json +++ b/src/locales/ko/trainer-classes.json @@ -126,5 +126,8 @@ "skull_grunts": "스컬단 조무래기들", "macro_grunt": "매크로코스모스 직원", "macro_grunt_female": "매크로코스모스 직원", - "macro_grunts": "매크로코스모스 직원들" + "macro_grunts": "매크로코스모스 직원들", + "star_grunt": "스타단 조무래기", + "star_grunt_female": "스타단 조무래기", + "star_grunts": "스타단 조무래기들" } diff --git a/src/locales/ko/trainer-names.json b/src/locales/ko/trainer-names.json index f1357a428ba..b9d9a365b46 100644 --- a/src/locales/ko/trainer-names.json +++ b/src/locales/ko/trainer-names.json @@ -141,6 +141,11 @@ "faba": "자우보", "plumeria": "플루메리", "oleana": "올리브", + "giacomo": "피나", + "mela": "멜로코", + "atticus": "추명", + "ortega": "오르티가", + "eri": "비파", "maxie": "마적", "archie": "아강", @@ -150,6 +155,7 @@ "lusamine": "루자미네", "guzma": "구즈마", "rose": "로즈", + "cassiopeia": "모란", "blue_red_double": "그린 & 레드", "red_blue_double": "레드 & 그린", @@ -160,5 +166,18 @@ "alder_iris_double": "노간주 & 아이리스", "iris_alder_double": "아이리스 & 노간주", "marnie_piers_double": "마리 & 두송", - "piers_marnie_double": "두송 & 마리" + "piers_marnie_double": "두송 & 마리", + + "buck": "맥", + "cheryl": "모미", + "marley": "미정", + "mira": "미루", + "riley": "현이", + "victor": "상우", + "victoria": "수혜", + "vivi": "추희", + "vicky": "영아", + "vito": "철준", + "bug_type_superfan": "벌레타입 마니아", + "expert_pokemon_breeder": "포켓몬 전문 브리더" } diff --git a/src/locales/ko/trainer-titles.json b/src/locales/ko/trainer-titles.json index 7cff2207817..20b2a8e0f65 100644 --- a/src/locales/ko/trainer-titles.json +++ b/src/locales/ko/trainer-titles.json @@ -19,6 +19,7 @@ "aether_boss": "에테르재단 대표", "skull_boss": "스컬단 보스", "macro_boss": "매크로코스모스 사장", + "star_boss": "스타단 보스", "rocket_admin": "로켓단 간부", "rocket_admin_female": "로켓단 간부", @@ -34,5 +35,8 @@ "flare_admin_female": "플레어단 간부", "aether_admin": "에테르재단 지부장", "skull_admin": "스컬단 간부", - "macro_admin": "매크로코스모스 간부" + "macro_admin": "매크로코스모스 간부", + "star_admin": "스타단 군단 보스", + + "the_winstrates": "연승가족" } diff --git a/src/locales/pt_BR/ability-trigger.json b/src/locales/pt_BR/ability-trigger.json index cd47fd8e3dc..60e86f3723c 100644 --- a/src/locales/pt_BR/ability-trigger.json +++ b/src/locales/pt_BR/ability-trigger.json @@ -60,4 +60,4 @@ "postSummonTabletsOfRuin": "Tablets of Ruin de {{pokemonNameWithAffix}} reduziu o {{statName}}\nde todos os Pokémon em volta!", "postSummonBeadsOfRuin": "Beads of Ruin de {{pokemonNameWithAffix}} reduziu a {{statName}}\nde todos os Pokémon em volta!", "preventBerryUse": "{{pokemonNameWithAffix}} está nervoso\ndemais para comer frutas!" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/ability.json b/src/locales/pt_BR/ability.json index c4180ff01dd..2c70f82f53f 100644 --- a/src/locales/pt_BR/ability.json +++ b/src/locales/pt_BR/ability.json @@ -421,7 +421,7 @@ }, "aftermath": { "name": "Aftermath", - "description": "Caso o Pokémon seja derrotado em decorrência de um movimento de contato, o atacante recebe dano." + "description": "Causa dano ao atacante se ele entrar em contato com o Pokémon com um golpe final." }, "anticipation": { "name": "Anticipation", @@ -1237,6 +1237,6 @@ }, "poisonPuppeteer": { "name": "Poison Puppeteer", - "description": "Pokémon envenenados pelos movimentos de Pecharunt também ficarão confusos." + "description": "Pokémon envenenados pelos movimentos deste Pokémon também ficarão confusos." } } diff --git a/src/locales/pt_BR/achv.json b/src/locales/pt_BR/achv.json index 93e982b60ea..05727deeb18 100644 --- a/src/locales/pt_BR/achv.json +++ b/src/locales/pt_BR/achv.json @@ -268,5 +268,9 @@ "INVERSE_BATTLE": { "name": "A torre da derrotA", "description": "Complete o desafio da Batalha Inversa.\n.asrevnI ahlataB ad oifased o etelpmoC" + }, + "BREEDERS_IN_SPACE": { + "name": "Criadores no Espaço!", + "description": "Derrote o Criador de Pokémon Experiente no Bioma Espaço." } } diff --git a/src/locales/pt_BR/arena-tag.json b/src/locales/pt_BR/arena-tag.json index 7ab1ecea721..3a1476dcef6 100644 --- a/src/locales/pt_BR/arena-tag.json +++ b/src/locales/pt_BR/arena-tag.json @@ -54,4 +54,4 @@ "safeguardOnRemove": "O campo não está mais protegido por Safeguard!", "safeguardOnRemovePlayer": "Sua equipe não está mais protegido por Safeguard!", "safeguardOnRemoveEnemy": "A equipe adversária não está mais protegido por Safeguard!" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/battle-info.json b/src/locales/pt_BR/battle-info.json index 0fd211c5c85..8a43839efb1 100644 --- a/src/locales/pt_BR/battle-info.json +++ b/src/locales/pt_BR/battle-info.json @@ -1,3 +1,3 @@ { "generation": "Geração {{generation}}" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/battle-message-ui-handler.json b/src/locales/pt_BR/battle-message-ui-handler.json index ee7062bccba..d82fd665821 100644 --- a/src/locales/pt_BR/battle-message-ui-handler.json +++ b/src/locales/pt_BR/battle-message-ui-handler.json @@ -5,4 +5,4 @@ "ivPrettyGood": "Bom", "ivDecent": "Regular", "ivNoGood": "Ruim" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/battle-scene.json b/src/locales/pt_BR/battle-scene.json index a0288475d69..de2232b4edf 100644 --- a/src/locales/pt_BR/battle-scene.json +++ b/src/locales/pt_BR/battle-scene.json @@ -1,3 +1,3 @@ { "moneyOwned": "₽{{formattedMoney}}" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/battle.json b/src/locales/pt_BR/battle.json index 392f7b2ec38..72fcc018980 100644 --- a/src/locales/pt_BR/battle.json +++ b/src/locales/pt_BR/battle.json @@ -14,6 +14,10 @@ "moneyWon": "Você ganhou\n₽{{moneyAmount}} por vencer!", "moneyPickedUp": "Você pegou ₽{{moneyAmount}} do chão!", "pokemonCaught": "{{pokemonName}} foi capturado!", + "pokemonObtained": "Você recebeu um {{pokemonName}}!", + "pokemonBrokeFree": "Não!\nO Pokémon escapou!", + "pokemonFled": "{{pokemonName}} selvagem fugiu!", + "playerFled": "Você fugiu de {{pokemonName}}!", "addedAsAStarter": "{{pokemonName}} foi adicionado\naos seus iniciais!", "partyFull": "Sua equipe está cheia.\nSolte um Pokémon para ter espaço para {{pokemonName}}?", "pokemon": "Pokémon", @@ -49,6 +53,7 @@ "noPokeballTrainer": "Não se pode capturar\nPokémon dos outros!", "noPokeballMulti": "Não se pode lançar Poké Bolas\nquando há mais de um Pokémon!", "noPokeballStrong": "Este Pokémon é forte demais para ser capturado!\nÉ preciso enfraquecê-lo primeiro!", + "noPokeballMysteryEncounter": "Você não pode capturar\nesse Pokémon!", "noEscapeForce": "Uma força misteriosa\nte impede de fugir.", "noEscapeTrainer": "Não se pode fugir de\nbatalhas contra treinadores!", "noEscapePokemon": "O movimento {{moveName}} de {{pokemonName}} te impede de fugir!", @@ -97,6 +102,7 @@ "unlockedSomething": "{{unlockedThing}}\nfoi desbloqueado.", "congratulations": "Parabéns!", "beatModeFirstTime": "{{speciesName}} venceu o Modo {{gameMode}} pela primeira vez!\nVocê recebeu {{newModifier}}!", + "mysteryEncounterAppeared": "O que é isso?", "battlerTagsHealBlock": "{{pokemonNameWithAffix}} não pode restaurar seus PS!", "battlerTagsHealBlockOnRemove": "{{pokemonNameWithAffix}} pode restaurar seus PS novamente!" } diff --git a/src/locales/pt_BR/berry.json b/src/locales/pt_BR/berry.json index 0ca5d3de286..7cd5e5c14dd 100644 --- a/src/locales/pt_BR/berry.json +++ b/src/locales/pt_BR/berry.json @@ -43,4 +43,4 @@ "name": "Fruta Leppa", "effect": "Restaura 10 PP de um movimento se seus PP acabarem" } -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/bgm-name.json b/src/locales/pt_BR/bgm-name.json index 86d8ce3e790..4b95c0a1865 100644 --- a/src/locales/pt_BR/bgm-name.json +++ b/src/locales/pt_BR/bgm-name.json @@ -83,17 +83,20 @@ "battle_aether_grunt": "SM Batalha da Fundação Aether", "battle_skull_grunt": "SM Batalha da Equipe Skull", "battle_macro_grunt": "SWSH Batalha de Treinador", + "battle_star_grunt": "SV Batalha da Equipe Estrela", "battle_galactic_admin": "BDSP Batalha com Admin da Equipe Galáctica", "battle_skull_admin": "SM Batalha com Admin da Euipe Skull", "battle_oleana": "SWSH Batalha da Oleana", + "battle_star_admin": "SV Chefe da Equipe Estrela", "battle_rocket_boss": "USUM Batalha do Giovanni", "battle_aqua_magma_boss": "ORAS Batalha do Maxie & Archie", "battle_galactic_boss": "BDSP Batalha do Cyrus", "battle_plasma_boss": "B2W2 Batalha do Ghetsis", "battle_flare_boss": "XY Batalha do Lysandre", - "battle_aether_boss": "SM Batalha da Lusamine", + "battle_aether_boss": "SM Batalha da Lusamine", "battle_skull_boss": "SM Batalha do Guzma", "battle_macro_boss": "SWSH Batalha do Rose", + "battle_star_boss": "SV Batalha da Cassiopeia", "abyss": "PMD EoS Dark Crater", "badlands": "PMD EoS Barren Valley", @@ -108,17 +111,17 @@ "forest": "PMD EoS Dusk Forest", "grass": "PMD EoS Apple Woods", "graveyard": "PMD EoS Mystifying Forest", - "ice_cave": "PMD EoS Vast Ice Mountain", + "ice_cave": "Firel - -50°C", "island": "PMD EoS Craggy Coast", "jungle": "Lmz - Jungle", "laboratory": "Firel - Laboratory", - "lake": "PMD EoS Crystal Cave", + "lake": "Lmz - Lake", "meadow": "PMD EoS Sky Peak Forest", "metropolis": "Firel - Metropolis", "mountain": "PMD EoS Mt. Horn", - "plains": "PMD EoS Sky Peak Prairie", - "power_plant": "PMD EoS Far Amp Plains", - "ruins": "PMD EoS Deep Sealed Ruin", + "plains": "Firel - Route 888", + "power_plant": "Firel - The Klink", + "ruins": "Lmz - Ancient Ruins", "sea": "Andr06 - Marine Mystique", "seabed": "Firel - Seabed", "slum": "Andr06 - Sneaky Snom", @@ -128,7 +131,7 @@ "tall_grass": "PMD EoS Foggy Forest", "temple": "PMD EoS Aegis Cave", "town": "PMD EoS Random Dungeon Theme 3", - "volcano": "PMD EoS Steam Cave", + "volcano": "Firel - Twisturn Volcano", "wasteland": "PMD EoS Hidden Highland", "encounter_ace_trainer": "BW Encontro com Treinador (Treinador Ás)", "encounter_backpacker": "BW Encontro com Treinador (Mochileiro)", @@ -146,5 +149,10 @@ "encounter_youngster": "BW Encontro com Treinador (Jovem)", "heal": "BW Centro Pokémon", "menu": "PMD EoS Bem-vindo ao Mundo dos Pokémon!", - "title": "PMD EoS Menu Principal" + "title": "PMD EoS Menu Principal", + + "mystery_encounter_weird_dream": "PMD EoS Temporal Spire", + "mystery_encounter_fun_and_games": "PMD EoS Guildmaster Wigglytuff", + "mystery_encounter_gen_5_gts": "BW GTS", + "mystery_encounter_gen_6_gts": "XY GTS" } diff --git a/src/locales/pt_BR/biome.json b/src/locales/pt_BR/biome.json index d10f22eb487..6235ebc4c3f 100644 --- a/src/locales/pt_BR/biome.json +++ b/src/locales/pt_BR/biome.json @@ -35,4 +35,4 @@ "ISLAND": "Ilha", "LABORATORY": "Laboratório", "END": "???" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/challenges.json b/src/locales/pt_BR/challenges.json index 9dc613651a6..b8249882033 100644 --- a/src/locales/pt_BR/challenges.json +++ b/src/locales/pt_BR/challenges.json @@ -34,4 +34,4 @@ "value.0": "Desligado", "value.1": "Ligado" } -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/command-ui-handler.json b/src/locales/pt_BR/command-ui-handler.json index fcd8e7026b4..1e541e60b9a 100644 --- a/src/locales/pt_BR/command-ui-handler.json +++ b/src/locales/pt_BR/command-ui-handler.json @@ -4,4 +4,4 @@ "pokemon": "Pokémon", "run": "Fugir", "actionMessage": "O que {{pokemonName}}\ndeve fazer?" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/common.json b/src/locales/pt_BR/common.json index a5ec4381f26..9c04c3ec811 100644 --- a/src/locales/pt_BR/common.json +++ b/src/locales/pt_BR/common.json @@ -5,4 +5,4 @@ "commonShiny": "Comum", "rareShiny": "Raro", "epicShiny": "Épico" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/config.ts b/src/locales/pt_BR/config.ts index 9e8377149c1..fc4ae9000b4 100644 --- a/src/locales/pt_BR/config.ts +++ b/src/locales/pt_BR/config.ts @@ -1,59 +1,101 @@ -import common from "./common.json"; -import settings from "./settings.json"; -import ability from "./ability.json"; import abilityTriggers from "./ability-trigger.json"; +import ability from "./ability.json"; +import achv from "./achv.json"; import arenaFlyout from "./arena-flyout.json"; import arenaTag from "./arena-tag.json"; -import achv from "./achv.json"; -import battle from "./battle.json"; -import battleScene from "./battle-scene.json"; import battleInfo from "./battle-info.json"; import battleMessageUiHandler from "./battle-message-ui-handler.json"; +import battleScene from "./battle-scene.json"; +import battle from "./battle.json"; import battlerTags from "./battler-tags.json"; import berry from "./berry.json"; import bgmName from "./bgm-name.json"; import biome from "./biome.json"; import challenges from "./challenges.json"; import commandUiHandler from "./command-ui-handler.json"; -import dialogue from "./dialogue.json"; +import common from "./common.json"; +import doubleBattleDialogue from "./dialogue-double-battle.json"; import battleSpecDialogue from "./dialogue-final-boss.json"; import miscDialogue from "./dialogue-misc.json"; -import doubleBattleDialogue from "./dialogue-double-battle.json"; +import dialogue from "./dialogue.json"; import egg from "./egg.json"; import fightUiHandler from "./fight-ui-handler.json"; import filterBar from "./filter-bar.json"; import gameMode from "./game-mode.json"; import gameStatsUiHandler from "./game-stats-ui-handler.json"; import growth from "./growth.json"; -import menu from "./menu.json"; import menuUiHandler from "./menu-ui-handler.json"; -import modifier from "./modifier.json"; +import menu from "./menu.json"; +import modifierSelectUiHandler from "./modifier-select-ui-handler.json"; import modifierType from "./modifier-type.json"; +import modifier from "./modifier.json"; +import moveTriggers from "./move-trigger.json"; import move from "./move.json"; +import mysteryEncounterMessages from "./mystery-encounter-messages.json"; +import aTrainersTest from "./mystery-encounters/a-trainers-test-dialogue.json"; +import absoluteAvarice from "./mystery-encounters/absolute-avarice-dialogue.json"; +import offerYouCantRefuse from "./mystery-encounters/an-offer-you-cant-refuse-dialogue.json"; +import berriesAbound from "./mystery-encounters/berries-abound-dialogue.json"; +import bugTypeSuperfan from "./mystery-encounters/bug-type-superfan-dialogue.json"; +import clowningAround from "./mystery-encounters/clowning-around-dialogue.json"; +import dancingLessons from "./mystery-encounters/dancing-lessons-dialogue.json"; +import darkDeal from "./mystery-encounters/dark-deal-dialogue.json"; +import delibirdy from "./mystery-encounters/delibirdy-dialogue.json"; +import departmentStoreSale from "./mystery-encounters/department-store-sale-dialogue.json"; +import fieldTrip from "./mystery-encounters/field-trip-dialogue.json"; +import fieryFallout from "./mystery-encounters/fiery-fallout-dialogue.json"; +import fightOrFlight from "./mystery-encounters/fight-or-flight-dialogue.json"; +import funAndGames from "./mystery-encounters/fun-and-games-dialogue.json"; +import globalTradeSystem from "./mystery-encounters/global-trade-system-dialogue.json"; +import lostAtSea from "./mystery-encounters/lost-at-sea-dialogue.json"; +import mysteriousChallengers from "./mystery-encounters/mysterious-challengers-dialogue.json"; +import mysteriousChest from "./mystery-encounters/mysterious-chest-dialogue.json"; +import partTimer from "./mystery-encounters/part-timer-dialogue.json"; +import safariZone from "./mystery-encounters/safari-zone-dialogue.json"; +import shadyVitaminDealer from "./mystery-encounters/shady-vitamin-dealer-dialogue.json"; +import slumberingSnorlax from "./mystery-encounters/slumbering-snorlax-dialogue.json"; +import teleportingHijinks from "./mystery-encounters/teleporting-hijinks-dialogue.json"; +import pokemonSalesman from "./mystery-encounters/the-pokemon-salesman-dialogue.json"; +import theStrongStuff from "./mystery-encounters/the-strong-stuff-dialogue.json"; +import theWinstrateChallenge from "./mystery-encounters/the-winstrate-challenge-dialogue.json"; +import trainingSession from "./mystery-encounters/training-session-dialogue.json"; +import trashToTreasure from "./mystery-encounters/trash-to-treasure-dialogue.json"; +import uncommonBreed from "./mystery-encounters/uncommon-breed-dialogue.json"; +import weirdDream from "./mystery-encounters/weird-dream-dialogue.json"; +import expertPokemonBreeder from "./mystery-encounters/the-expert-pokemon-breeder-dialogue.json"; import nature from "./nature.json"; import partyUiHandler from "./party-ui-handler.json"; import pokeball from "./pokeball.json"; -import pokemon from "./pokemon.json"; -import pokemonForm from "./pokemon-form.json"; import battlePokemonForm from "./pokemon-form-battle.json"; -import pokemonInfo from "./pokemon-info.json"; +import pokemonForm from "./pokemon-form.json"; import pokemonInfoContainer from "./pokemon-info-container.json"; +import pokemonInfo from "./pokemon-info.json"; import pokemonSummary from "./pokemon-summary.json"; +import pokemon from "./pokemon.json"; +import runHistory from "./run-history.json"; import saveSlotSelectUiHandler from "./save-slot-select-ui-handler.json"; +import settings from "./settings.json"; import splashMessages from "./splash-messages.json"; import starterSelectUiHandler from "./starter-select-ui-handler.json"; import statusEffect from "./status-effect.json"; -import trainerTitles from "./trainer-titles.json"; +import terrain from "./terrain.json"; import trainerClasses from "./trainer-classes.json"; import trainerNames from "./trainer-names.json"; +import trainerTitles from "./trainer-titles.json"; import tutorial from "./tutorial.json"; import voucher from "./voucher.json"; import weather from "./weather.json"; -import terrain from "./terrain.json"; -import modifierSelectUiHandler from "./modifier-select-ui-handler.json"; -import moveTriggers from "./move-trigger.json"; -import runHistory from "./run-history.json"; +/** + * Dialogue/Text token injection patterns that can be used: + * - `$` will be treated as a new line for Message and Dialogue strings. + * - `@d{}` will add a time delay to text animation for Message and Dialogue strings. + * - `@s{}` will play a specified sound effect for Message and Dialogue strings. + * - `@f{}` will fade the screen to black for the given duration, then fade back in for Message and Dialogue strings. + * - `{{}}` (MYSTERY ENCOUNTERS ONLY) will auto-inject the matching dialogue token value that is stored in {@link IMysteryEncounter.dialogueTokens}. + * - (see [i18next interpolations](https://www.i18next.com/translation-function/interpolation)) for more details. + * - `@[]{}` (STATIC TEXT ONLY, NOT USEABLE WITH {@link UI.showText()} OR {@link UI.showDialogue()}) will auto-color the given text to a specified {@link TextStyle} (e.g. `TextStyle.SUMMARY_GREEN`). + */ export const ptBrConfig = { ability, abilityTriggers, @@ -110,4 +152,40 @@ export const ptBrConfig = { modifierSelectUiHandler, moveTriggers, runHistory: runHistory, + mysteryEncounter: { + // DO NOT REMOVE + "unit_test_dialogue": "{{test}}{{test}} {{test{{test}}}} {{test1}} {{test\}} {{test\\}} {{test\\\}} {test}}", + mysteriousChallengers, + mysteriousChest, + darkDeal, + fightOrFlight, + slumberingSnorlax, + trainingSession, + departmentStoreSale, + shadyVitaminDealer, + fieldTrip, + safariZone, + lostAtSea, + fieryFallout, + theStrongStuff, + pokemonSalesman, + offerYouCantRefuse, + delibirdy, + absoluteAvarice, + aTrainersTest, + trashToTreasure, + berriesAbound, + clowningAround, + partTimer, + dancingLessons, + weirdDream, + theWinstrateChallenge, + teleportingHijinks, + bugTypeSuperfan, + funAndGames, + uncommonBreed, + globalTradeSystem, + expertPokemonBreeder + }, + mysteryEncounterMessages }; diff --git a/src/locales/pt_BR/dialogue-double-battle.json b/src/locales/pt_BR/dialogue-double-battle.json index 4d1c7d90c9b..e796a6ea2a2 100644 --- a/src/locales/pt_BR/dialogue-double-battle.json +++ b/src/locales/pt_BR/dialogue-double-battle.json @@ -80,4 +80,4 @@ "1": "Piers: Agora esse foi um ótimo show!\n$Marnie: Irmão..." } } -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/dialogue-final-boss.json b/src/locales/pt_BR/dialogue-final-boss.json index 7009f00db5b..c1e492a41ef 100644 --- a/src/locales/pt_BR/dialogue-final-boss.json +++ b/src/locales/pt_BR/dialogue-final-boss.json @@ -3,4 +3,4 @@ "encounter_female": "Parece que a hora finalmente chegou novamente.\nVocê sabe por que veio aqui, não sabe?\n$Você foi atraída para cá, porque já esteve aqui antes.\nInúmeras vezes.\n$Embora talvez isso possa ser contado.\nPara ser preciso, este é de fato o seu {{cycleCount}}º ciclo.\n$A cada ciclo, sua mente retorna ao seu estado anterior.\nMesmo assim, de alguma forma, vestígios de seus antigos \"eus\" permanecem.\n$Até agora, você ainda não conseguiu, mas sinto uma presença diferente em você desta vez.\n\n$Você é a única aqui, embora pareça haver... outro.\n$Você finalmente vai se mostrar um desafio formidável para mim?\nO desafio que anseio há milênios?\n$Vamos começar.", "firstStageWin": "Entendo. A presença que senti era realmente real.\nParece que não preciso mais me segurar.\n$Não me decepcione.", "secondStageWin": "…Magnífico." -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/dialogue.json b/src/locales/pt_BR/dialogue.json index 2f39442ee5a..e3f9d61738f 100644 --- a/src/locales/pt_BR/dialogue.json +++ b/src/locales/pt_BR/dialogue.json @@ -749,12 +749,16 @@ "encounter": { "1": "Parece que aqui é o fim da linha para você!", "2": "Você é um treinador, não é? Temo que isso não lhe dê o direito de interferir em nosso trabalho.", - "3": "Sou da Macro Cosmos Seguros! Já tem um seguro de vida?" + "3": "Sou da Macro Cosmos Seguros! Já tem um seguro de vida?", + "4": "Te encontrei! Nesse caso, é hora de uma batalha Pokémon!", + "5": "Ouvir uma bronca da Srta. Oleana é bem pior do que qualquer coisa que você possa fazer!" }, "victory": { "1": "Eu não tenho muita escolha a não ser recuar respeitosamente.", "2": "Ter que desistir do meu dinheiro... Perder significa que estou de volta no vermelho...", - "3": "Ninguém pode vencer a Macro Cosmos quando se trata de nossa dedicação ao trabalho!" + "3": "Ninguém pode vencer a Macro Cosmos quando se trata de nossa dedicação ao trabalho!", + "4": "Eu até troquei meu Pokémon...", + "5": "As batalhas não funcionaram... A única coisa a fazer agora é fugir!" } }, "oleana": { @@ -769,6 +773,73 @@ "3": "*suspiro* Eu sou uma Oleana cansada..." } }, + "star_grunt": { + "encounter": { + "1": "Nós somos a Equipe Estrela, garoto. Brilhamos tão forte que dói olhar pra nós!", + "2": "Vamos com tudo pra cima de você - Hasta la vistaaar! ★", + "3": "Se você não sair rapidinho, vou ter que me defender. Entendeu?", + "4": "Desculpe, mas se você não der meia-volta, amigo, vamos ter que te despachar!", + "4_female": "Desculpe, mas se você não der meia-volta, amiga, vamos ter que te despachar!", + "5": "Ótimo. Lá vem mais um qualquer para estragar o meu dia." + }, + "victory": { + "1": "Como é que EU estou vendo estrelas?!", + "2": "Você é assustador, garoto. Se você se juntasse à Equipe Estrela, estaria no topo rapidinho!", + "3": "Me defendi bem... Mas não foi o suficiente!", + "4": "H-hasta la vistar... ★", + "5": "Eu não achei que o trabalho de recruta da Equipe Estrela seria uma tarefa tão pesada..." + } + }, + "giacomo": { + "encounter": { + "1": "Você realmente não pensa muito, né? Declarar guerra contra a Equipe Estrela é uma jogada muito ruim.", + "2": "Vou tocar uma sinfonia do seu fracasso enquanto você cai e queima. Vamos começar a festa!" + }, + "victory": { + "1": "Acho que é isso...", + "2": "Você transformou minha melodia em um lamento..." + } + }, + "mela": { + "encounter": { + "1": "Então você é o idiota que arrumou briga com a Equipe Estrela... Prepare-se para ser destruído.", + "2": "Tudo bem, VAMOS LÁ! Vou explodir tudo!" + }, + "victory": { + "1": "Ugh. É assim que isso vai acabar? Que problema...", + "2": "Usei tudo o que eu tinha... e agora apaguei." + } + }, + "atticus": { + "encounter": { + "1": "Você tem coragem de mostrar suas garras para a Equipe Estrela. Venha, então, vil criatura!", + "2": "Esteja avisado—não te darei misericórdia! Em guarda!" + }, + "victory": { + "1": "Perdoem-me, meus amigos...", + "2": "Você me venceu completamente. Mas sua vitória não me trouxe amargura—tamanha foi sua brilhante execução." + } + }, + "ortega": { + "encounter": { + "1": "Prometo que serei gentil, então não me culpe quando essa batalha te mandar chorando de volta para casa!", + "2": "Vou apagar esse sorriso convencido do seu rosto com certeza! Você vai perder!" + }, + "victory": { + "1": "Ugh! Como eu pude PERDER! Que RAIVA!", + "2": "Arrrrgggh! Essa sua força é tão INJUSTA." + } + }, + "eri": { + "encounter": { + "1": "Não importa quem você é. Vou derrubar qualquer um que tente destruir a Equipe Estrela!", + "2": "Eu dou tudo de mim, e isso é uma promessa! Vamos ver quem fica de pé no final!" + }, + "victory": { + "1": "Me desculpem, pessoal...", + "2": "Dei tudo de mim, mas não foi o suficiente—eu não fui o suficiente..." + } + }, "rocket_boss_giovanni_1": { "encounter": { "1": "Tenho que admitir, estou impressionado que tenha chegado até aqui!" @@ -968,6 +1039,141 @@ "1": "Eu suponho que deve parecer que estou fazendo algo terrível. Eu não espero que você entenda.\n$Mas eu devo fornecer à região de Galar energia ilimitada para garantir prosperidade eterna." } }, + "star_boss_penny_1": { + "encounter": { + "1": "Eu sou a grande chefe da Equipe Estrela. Meu nome é Cassiopeia. \n$Agora, ajoelhe-se diante do poder esmagador da fundadora da Equipe Estrela!" + }, + "victory": { + "1": "... ... .." + }, + "defeat": { + "1": "Heh..." + } + }, + "star_boss_penny_2": { + "encounter": { + "1": "Não vou me segurar nesta batalha! Vou permanecer fiel ao código da Equipe Estrela! \n$Meu poder Veevee vai te reduzir a pó estelar!" + }, + "victory": { + "1": "...Agora acabou tudo." + }, + "defeat": { + "1": "Não posso te culpar por suas habilidades de batalha... Considerando como os chefes caíram diante de você." + } + }, + "stat_trainer_buck": { + "encounter": { + "1": "...Estou te falando agora. Eu sou muito durão. Finge surpresa!", + "2": "Posso sentir meus Pokémon tremendo dentro de suas Pokébolas!" + }, + "victory": { + "1": "Hehehe!\nVocê é uma máquina!", + "2": "Hehehe!\nVocê é uma máquina!" + }, + "defeat": { + "1": "Uau! Acho que vocês estão sem gás.", + "2": "Uau! Acho que vocês estão sem gás." + } + }, + "stat_trainer_cheryl": { + "encounter": { + "1": "Meus Pokémon estavam ansiosos por uma batalha.", + "2": "Devo avisá-lo, meus Pokémon podem ser bastante agitados.", + "2_female": "Devo avisá-la, meus Pokémon podem ser bastante agitados." + }, + "victory": { + "1": "Acertar o equilíbrio certo entre ataque e defesa... Não é fácil de fazer.", + "2": "Acertar o equilíbrio certo entre ataque e defesa... Não é fácil de fazer." + }, + "defeat": { + "1": "Seus Pokémon precisam de cura?", + "2": "Seus Pokémon precisam de cura?" + } + }, + "stat_trainer_marley": { + "encounter": { + "1": "... Tá.\nVou dar o meu melhor.", + "2": "... Tá.\nEu... não vou perder...!" + }, + "victory": { + "1": "... Awww.", + "2": "... Awww." + }, + "defeat": { + "1": "... Adeus.", + "2": "... Adeus." + } + }, + "stat_trainer_mira": { + "encounter": { + "1": "Você ficará surpreso com a Mira!", + "1_female": "Você ficará surpresa com a Mira!", + "2": "Mira vai te mostrar que ela não se perde mais!" + }, + "victory": { + "1": "Mira se pergunta se conseguirá ir longe nessa terra.", + "2": "Mira se pergunta se conseguirá ir longe nessa terra." + }, + "defeat": { + "1": "Mira sabia que venceria!", + "2": "Mira sabia que venceria!" + } + }, + "stat_trainer_riley": { + "encounter": { + "1": "Lutar é nossa forma de saudação!", + "2": "Estamos fazendo de tudo para derrubar seus Pokémon." + }, + "victory": { + "1": "Às vezes, lutamos e, às vezes, nos unimos...$É ótimo como Treinadores podem interagir.", + "2": "Às vezes, lutamos e, às vezes, nos unimos...$É ótimo como Treinadores podem interagir." + }, + "defeat": { + "1": "Você fez uma bela exibição.\nMelhor sorte na próxima vez.", + "2": "Você fez uma bela exibição.\nMelhor sorte na próxima vez." + } + }, + "winstrates_victor": { + "encounter": { + "1": "Esse é o espírito! Gosto de você!" + }, + "victory": { + "1": "A-ha! Você é mais forte do que eu pensei!" + } + }, + "winstrates_victoria": { + "encounter": { + "1": "Meu Deus! Você não é jovem?$Deve ser um grande Treinador para derrotar meu marido.$Acho que agora é a minha vez de lutar!", + "1_female": "Meu Deus! Você não é jovem?$Deve ser uma grande Treinadora para derrotar meu marido.$Acho que agora é a minha vez de lutar!" + }, + "victory": { + "1": "Uwah! Quão forte você é?!" + } + }, + "winstrates_vivi": { + "encounter": { + "1": "Você é mais forte que a Mamãe? Uau!$Mas eu também sou forte!\nDe verdade! Falando sério!" + }, + "victory": { + "1": "Ahn? Eu perdi mesmo?\nSnif... Vovóóó!" + } + }, + "winstrates_vicky": { + "encounter": { + "1": "Como ousa fazer minha preciosa\nneta chorar!$Vejo que preciso lhe dar uma lição.\nPrepare-se para sentir o ferrão da derrota!" + }, + "victory": { + "1": "Uau! Tão forte!\nMinha neta não estava mentindo." + } + }, + "winstrates_vito": { + "encounter": { + "1": "Treinei com toda a minha família,\ncada um de nós!$Não vou perder para para ninguém!" + }, + "victory": { + "1": "Eu era melhor do que todos em minha família.\nEu nunca perdi antes..." + } + }, "brock": { "encounter": { "1": "Minha especialidade em Pokémon do tipo Pedra vai te derrubar! Vamos lá!", diff --git a/src/locales/pt_BR/egg.json b/src/locales/pt_BR/egg.json index a14217858b5..cbe31d27ed4 100644 --- a/src/locales/pt_BR/egg.json +++ b/src/locales/pt_BR/egg.json @@ -11,6 +11,7 @@ "gachaTypeLegendary": "Chance de Lendário Aumentada", "gachaTypeMove": "Chance de Movimento de Ovo Raro Aumentada", "gachaTypeShiny": "Chance de Shiny Aumentada", + "eventType": "Evento Misterioso", "selectMachine": "Escolha uma máquina.", "notEnoughVouchers": "Você não tem vouchers suficientes!", "tooManyEggs": "Você já tem muitos ovos!", @@ -23,4 +24,4 @@ "moveUPGacha": "Movimento\nde Ovo Bônus!", "shinyUPGacha": "Shiny Bônus!", "legendaryUPGacha": "Bônus!" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/filter-bar.json b/src/locales/pt_BR/filter-bar.json index 05898796d9f..45b17c33077 100644 --- a/src/locales/pt_BR/filter-bar.json +++ b/src/locales/pt_BR/filter-bar.json @@ -35,4 +35,4 @@ "sortByCandies": "# Doces", "sortByIVs": "IVs", "sortByName": "Nome" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/game-mode.json b/src/locales/pt_BR/game-mode.json index 9aa0f286959..674552bd923 100644 --- a/src/locales/pt_BR/game-mode.json +++ b/src/locales/pt_BR/game-mode.json @@ -5,4 +5,4 @@ "dailyRun": "Desafio Diário", "unknown": "Desconhecido", "challenge": "Desafio" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/game-stats-ui-handler.json b/src/locales/pt_BR/game-stats-ui-handler.json index eb36f484cc3..b473aa09c2f 100644 --- a/src/locales/pt_BR/game-stats-ui-handler.json +++ b/src/locales/pt_BR/game-stats-ui-handler.json @@ -39,4 +39,4 @@ "epicEggsPulled": "Ovos Épicos Ganhos", "legendaryEggsPulled": "Ovos Lendários Ganhos", "manaphyEggsPulled": "Ovos de Manaphy Ganhos" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/growth.json b/src/locales/pt_BR/growth.json index d9b11dc23c3..272856a006c 100644 --- a/src/locales/pt_BR/growth.json +++ b/src/locales/pt_BR/growth.json @@ -5,4 +5,4 @@ "Medium_Slow": "Meio Lento", "Slow": "Lento", "Fluctuating": "Muito Lento" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/menu.json b/src/locales/pt_BR/menu.json index 415796f91ed..97acc63400f 100644 --- a/src/locales/pt_BR/menu.json +++ b/src/locales/pt_BR/menu.json @@ -52,4 +52,4 @@ "rename": "Renomear", "nickname": "Apelido", "errorServerDown": "Opa! Não foi possível conectar-se ao servidor.\n\nVocê pode deixar essa janela aberta,\npois o jogo irá se reconectar automaticamente." -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/modifier-select-ui-handler.json b/src/locales/pt_BR/modifier-select-ui-handler.json index 4aef7f145ae..e741eaa5f21 100644 --- a/src/locales/pt_BR/modifier-select-ui-handler.json +++ b/src/locales/pt_BR/modifier-select-ui-handler.json @@ -8,5 +8,7 @@ "lockRaritiesDesc": "Trava a raridade dos itens na atualização (afeta o custo da atualização).", "checkTeamDesc": "Cheque seu time ou use um item de mudança de forma.", "rerollCost": "₽{{formattedMoney}}", - "itemCost": "₽{{formattedMoney}}" -} \ No newline at end of file + "itemCost": "₽{{formattedMoney}}", + "continueNextWaveButton": "Continuar", + "continueNextWaveDescription": "Continuar para a próxima onda" +} diff --git a/src/locales/pt_BR/modifier-type.json b/src/locales/pt_BR/modifier-type.json index f20a4ef3d0f..ae7a2cba93e 100644 --- a/src/locales/pt_BR/modifier-type.json +++ b/src/locales/pt_BR/modifier-type.json @@ -68,6 +68,20 @@ "BaseStatBoosterModifierType": { "description": "Aumenta o atributo base de {{stat}} em 10%. Quanto maior os IVs, maior o limite de aumento." }, + "PokemonBaseStatTotalModifierType": { + "name": "Suco Shuckle", + "description": "{{increaseDecrease}} todos os atributos base de quem o segurar por {{statValue}}. Você foi {{blessCurse}} por Shuckle.", + "extra": { + "increase": "Aumenta", + "decrease": "Diminui", + "blessed": "abençoado", + "cursed": "amaldiçoado" + } + }, + "PokemonBaseStatFlatModifierType": { + "name": "Doce Antigo", + "description": "Aumenta os atributos base de {{stats}} de quem o segurar por {{statValue}}. Encontrado depois de um sonho estranho." + }, "AllPokemonFullHpRestoreModifierType": { "description": "Restaura totalmente os PS de todos os Pokémon." }, @@ -252,11 +266,11 @@ "name": "Lentes de Mira", "description": "Estas lentes facilitam o foco em pontos fracos. Aumenta a chance de acerto crítico de quem a segurar." }, - "DIRE_HIT": { - "name": "Direto", - "extra": { - "raises": "Chance de Acerto Crítico" - } + "DIRE_HIT": { + "name": "Direto", + "extra": { + "raises": "Chance de Acerto Crítico" + } }, "LEEK": { "name": "Alho-poró", @@ -401,6 +415,24 @@ "ENEMY_FUSED_CHANCE": { "name": "Token de Fusão", "description": "Adiciona uma chance de 1% de que um Pokémon selvagem seja uma fusão." + }, + + "MYSTERY_ENCOUNTER_SHUCKLE_JUICE": { "name": "Suco Shuckle" }, + "MYSTERY_ENCOUNTER_BLACK_SLUDGE": { + "name": "Lodo Escuro", + "description": "O fedor é tão forte que as lojas só venderão itens com um grande aumento de custo." + }, + "MYSTERY_ENCOUNTER_MACHO_BRACE": { + "name": "Pulseira Macho", + "description": "Derrotar um Pokémon concede a quem segura uma pilha de Pulseira Macho. Cada pilha aumenta ligeiramente os atributos, com um bônus extra no máximo de pilhas." + }, + "MYSTERY_ENCOUNTER_OLD_GATEAU": { + "name": "Doce Antigo", + "description_pt": "Aumenta os atributos de {{stats}} de quem o segurar por {{statValue}}." + }, + "MYSTERY_ENCOUNTER_GOLDEN_BUG_NET": { + "name": "Rede de Insetos Dourada", + "description": "Concede ao dono sorte para encontrar Pokémon do tipo Inseto com mais frequência. Tem um peso estranho." } }, "SpeciesBoosterItem": { diff --git a/src/locales/pt_BR/modifier.json b/src/locales/pt_BR/modifier.json index 38622de579e..6d1a1222f73 100644 --- a/src/locales/pt_BR/modifier.json +++ b/src/locales/pt_BR/modifier.json @@ -9,4 +9,4 @@ "contactHeldItemTransferApply": "{{itemName}} de {{pokemonNameWithAffix}} foi pego(a)\npela {{typeName}} de {{pokemonName}}!", "enemyTurnHealApply": "{{pokemonNameWithAffix}}\nrestaurou um pouco de seus PS!", "bypassSpeedChanceApply": "{{pokemonName}} se move mais rápido que o normal graças à sua {{itemName}}!" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/move-trigger.json b/src/locales/pt_BR/move-trigger.json index 4549f83cdf1..307364e1b55 100644 --- a/src/locales/pt_BR/move-trigger.json +++ b/src/locales/pt_BR/move-trigger.json @@ -4,11 +4,11 @@ "absorbedElectricity": "{{pokemonName}} absorveu eletricidade!", "switchedStatChanges": "{{pokemonName}} trocou as mudanças de atributo com o alvo!", "goingAllOutForAttack": "{{pokemonName}} está arriscando tudo nesse ataque!", - "regainedHealth": "{{pokemonName}} recuperou/nsaúde!", - "keptGoingAndCrashed": "{{pokemonName}} errou o alvo/ne se arrebentou!", + "regainedHealth": "{{pokemonName}} recuperou\nsaúde!", + "keptGoingAndCrashed": "{{pokemonName}} errou o alvo\ne se arrebentou!", "fled": "{{pokemonName}} fugiu!", "cannotBeSwitchedOut": "{{pokemonName}} não pode ser trocado!", - "swappedAbilitiesWithTarget": "{{pokemonName}} trocou/nde habilidades com o alvo!", + "swappedAbilitiesWithTarget": "{{pokemonName}} trocou\nde habilidades com o alvo!", "coinsScatteredEverywhere": "Moedas foram espalhadas por toda parte!", "attackedByItem": "{{pokemonName}} está prestes a ser atacado por {{itemName}}!", "whippedUpAWhirlwind": "{{pokemonName}} criou\num redemoinho de vento!", @@ -18,23 +18,23 @@ "loweredItsHead": "{{pokemonName}} abaixou sua cabeça!", "isGlowing": "{{pokemonName}} ficou envolto em uma luz forte!", "bellChimed": "Um sino tocou!", - "foresawAnAttack": "{{pokemonName}} previu/num ataque!", + "foresawAnAttack": "{{pokemonName}} previu\num ataque!", "isTighteningFocus": "{{pokemonName}} está\naumentando seu foco!", - "hidUnderwater": "{{pokemonName}} se escondeu/nembaixo d'água!", + "hidUnderwater": "{{pokemonName}} se escondeu\nembaixo d'água!", "soothingAromaWaftedThroughArea": "Um aroma suave se espalhou pelo ambiente!", "sprangUp": "{{pokemonName}} se levantou!", "choseDoomDesireAsDestiny": "{{pokemonName}} escolheu\no Desejo da Perdição como seu destino!", "vanishedInstantly": "{{pokemonName}} desapareceu\nde repente!", "tookTargetIntoSky": "{{pokemonName}} levou {{targetName}}\npara o céu!", - "becameCloakedInFreezingLight": "{{pokemonName}} ficou envolto/nem uma luz congelante!", - "becameCloakedInFreezingAir": "{{pokemonName}} ficou envolto/nem ar congelante!", + "becameCloakedInFreezingLight": "{{pokemonName}} ficou envolto\nem uma luz congelante!", + "becameCloakedInFreezingAir": "{{pokemonName}} ficou envolto\nem ar congelante!", "isChargingPower": "{{pokemonName}} está absorvendo energia!", "burnedItselfOut": "{{pokemonName}} apagou seu próprio fogo!", "startedHeatingUpBeak": "{{pokemonName}} começou\na esquentar seu bico!", "setUpShellTrap": "{{pokemonName}} armou uma armadilha de carapaça!", "isOverflowingWithSpacePower": "{{pokemonName}} está sobrecarregado\ncom energia espacial!", "usedUpAllElectricity": "{{pokemonName}} usou toda a sua eletricidade!", - "stoleItem": "{{pokemonName}} roubou/no(a) {{itemName}} de {{targetName}}!", + "stoleItem": "{{pokemonName}} roubou\no(a) {{itemName}} de {{targetName}}!", "incineratedItem": "{{pokemonName}} incinerou\na {{itemName}} de {{targetName}}!", "knockedOffItem": "{{pokemonName}} derrubou\no(a) {{itemName}} de {{targetName}}!", "tookMoveAttack": "{{pokemonName}} pegou\no movimento {{moveName}}!", @@ -61,6 +61,7 @@ "suppressAbilities": "A habilidade de {{pokemonName}}\nfoi suprimida!", "revivalBlessing": "{{pokemonName}} foi reanimado!", "swapArenaTags": "{{pokemonName}} trocou os efeitos de batalha que afetam cada lado do campo!", + "chillyReception": "{{pokemonName}} está prestes a contar uma piada gelada!", "exposedMove": "{{pokemonName}} identificou\n{{targetPokemonName}}!", "safeguard": "{{targetName}} está protegido por Safeguard!", "afterYou": "{{pokemonName}} aceitou a gentil oferta!" diff --git a/src/locales/pt_BR/move.json b/src/locales/pt_BR/move.json index c463665f1ad..3c365a207ae 100644 --- a/src/locales/pt_BR/move.json +++ b/src/locales/pt_BR/move.json @@ -3129,7 +3129,7 @@ }, "auraWheel": { "name": "Aura Wheel", - "effect": "Morpeko ataca e aumenta sua Velocidade com a energia armazenada em suas bochechas. O tipo deste movimento muda dependendo da forma do usuário." + "effect": "O usuário ataca e aumenta sua Velocidade com a energia armazenada em suas bochechas. Se usado por Morpeko, o tipo deste movimento muda dependendo da forma do usuário." }, "breakingSwipe": { "name": "Breaking Swipe", diff --git a/src/locales/pt_BR/mystery-encounter-messages.json b/src/locales/pt_BR/mystery-encounter-messages.json new file mode 100644 index 00000000000..2c8b3738949 --- /dev/null +++ b/src/locales/pt_BR/mystery-encounter-messages.json @@ -0,0 +1,7 @@ +{ + "paid_money": "Você pagou ₽{{amount, number}}.", + "receive_money": "Você recebeu ₽{{amount, number}}!", + "affects_pokedex": "Afeta Dados da Pokédex", + "cancel_option": "Voltar para a seleção de opções de encontro.", + "view_party_button": "Ver Equipe" +} diff --git a/src/locales/pt_BR/mystery-encounters/a-trainers-test-dialogue.json b/src/locales/pt_BR/mystery-encounters/a-trainers-test-dialogue.json new file mode 100644 index 00000000000..f80e7771cc1 --- /dev/null +++ b/src/locales/pt_BR/mystery-encounters/a-trainers-test-dialogue.json @@ -0,0 +1,47 @@ +{ + "intro": "Um treinador extremamente forte se aproxima de você...", + "buck": { + "intro_dialogue": "Ei, treinador! Meu nome é Buck. Tenho uma proposta super incrível para um treinador tão forte quanto você! Estou carregando dois Ovos de Pokémon raros comigo, mas gostaria que alguém cuidasse de um deles. Se você conseguir provar sua força como treinador para mim, te darei o ovo mais raro!", + "accept": "Uhul, estou ficando empolgado!", + "decline": "Droga, parece que seu time\nnão está em plena forma. Aqui, deixe-me ajudar com isso." + }, + "cheryl": { + "intro_dialogue": "Olá, meu nome é Cheryl. Tenho um pedido particularmente interessante para um treinador forte como você. Estou carregando dois Ovos de Pokémon raros comigo, mas gostaria que alguém cuidasse de um deles. Se você conseguir provar sua força como treinador para mim, te darei o Ovo mais raro!", + "accept": "Espero que esteja preparado!", + "decline": "Eu entendo, parece que seu time não\nestá nas melhores condições no momento. Aqui, deixe-me ajudar com isso." + }, + "marley": { + "intro_dialogue": "...@d{64} Eu sou a Marley.$Tenho uma oferta para você...$Estou carregando dois Ovos de Pokémon comigo,\nmas gostaria que alguém cuidasse de um deles.$Se você for mais forte que eu,\nte darei o Ovo mais raro.", + "accept": "... Entendo.", + "decline": "... Entendo.$Seus Pokémon parecem machucados...\nDeixe-me ajudar." + }, + "mira": { + "intro_dialogue": "Oi! Eu sou a Mira!$A Mira tem um pedido\npara um treinador forte como você!$A Mira tem dois Ovos de Pokémon raros,\nmas a Mira quer que alguém cuide de um!$Se você mostrar à Mira que é forte,\na Mira te dará o Ovo mais raro!", + "accept": "Você vai lutar contra a Mira?\nYay!", + "decline": "Aww, sem batalha?\nTudo bem!$Aqui, a Mira vai curar seu time!" + }, + "riley": { + "intro_dialogue": "Eu sou o Riley.$Tenho uma proposta estranha\npara um treinador forte como você.$Estou carregando dois Ovos de Pokémon raros comigo,\nmas gostaria de dar um a outro treinador.$Se você puder provar sua força para mim,\neu lhe darei o Ovo mais raro!", + "accept": "Esse olhar que você tem...\nVamos fazer isso.", + "decline": "Entendo, seu time parece exausto.$Deixe-me ajudá-lo com isso." + }, + "title": "O Teste de um Treinador", + "description": "Parece que este treinador está disposto a lhe dar um Ovo independentemente da sua decisão. No entanto, se você conseguir derrotar este treinador forte, receberá um Ovo muito mais raro.", + "query": "O que você vai fazer?", + "option": { + "1": { + "label": "Aceitar o Desafio", + "tooltip": "(-) Batalha Difícil\n(+) Ganhe um @[TOOLTIP_TITLE]{Ovo Muito Raro}" + }, + "2": { + "label": "Recusar o Desafio", + "tooltip": "(+) Curar Todo o Time\n(+) Ganhe um @[TOOLTIP_TITLE]{Ovo}" + } + }, + "eggTypes": { + "rare": "um Ovo Raro", + "epic": "um Ovo Épico", + "legendary": "um Ovo Lendário" + }, + "outro": "{{statTrainerName}} lhe deu {{eggType}}!" +} diff --git a/src/locales/pt_BR/mystery-encounters/absolute-avarice-dialogue.json b/src/locales/pt_BR/mystery-encounters/absolute-avarice-dialogue.json new file mode 100644 index 00000000000..85123330f4b --- /dev/null +++ b/src/locales/pt_BR/mystery-encounters/absolute-avarice-dialogue.json @@ -0,0 +1,25 @@ +{ + "intro": "Um {{greedentName}} te embosca\ne rouba as Frutas do seu time!", + "title": "Ganância Absoluta", + "description": "Um {{greedentName}} te pegou completamente desprevenido e agora todas as suas Frutas se foram!\n\nA {{greedentName}} parece prestes a comê-las quando para para te olhar, interessado.", + "query": "O que você vai fazer?", + "option": { + "1": { + "label": "Batalhar", + "tooltip": "(-) Batalha Difícil\n(+) Recompensas do Tesouro de Frutas", + "selected": "Um {{greedentName}} enche suas bochechas\ne se prepara para a batalha!", + "boss_enraged": "O amor feroz de {{greedentName}} por comida o deixou enfurecido!", + "food_stash": "Parece que o {{greedentName}} estava guardando um enorme estoque de comida!$@s{item_fanfare}Cada Pokémon do seu time ganha um {{foodReward}}!" + }, + "2": { + "label": "Resolver com Ele", + "tooltip": "(+) Recuperar Algumas Frutas Perdidas", + "selected": "Seu apelo toca o coração de {{greedentName}}.$Ele não devolve todas as suas Frutas, mas joga algumas na sua direção." + }, + "3": { + "label": "Deixá-lo Ficar com a Comida", + "tooltip": "(-) Perder Todas as Frutas\n(?) O {{greedentName}} Vai Gostar de Você", + "selected": "O {{greedentName}} devora todo o\nestoque de Frutas num piscar de olhos!$Bate na barriga satisfeito\ne olha para você agradecido.$Talvez você possa alimentá-lo\ncom mais Frutas em sua aventura...$@s{level_up_fanfare}O {{greedentName}} quer se juntar ao seu time!" + } + } +} diff --git a/src/locales/pt_BR/mystery-encounters/an-offer-you-cant-refuse-dialogue.json b/src/locales/pt_BR/mystery-encounters/an-offer-you-cant-refuse-dialogue.json new file mode 100644 index 00000000000..059664b9c07 --- /dev/null +++ b/src/locales/pt_BR/mystery-encounters/an-offer-you-cant-refuse-dialogue.json @@ -0,0 +1,26 @@ +{ + "intro": "Um garoto de aparência rica te para.", + "speaker": "Garoto Rico", + "intro_dialogue": "Bom dia para você.$Não pude deixar de notar que seu\n{{strongestPokemon}} parece absolutamente divino!$Sempre quis ter um Pokémon assim!$Eu te pagaria generosamente,\ne também te daria este velho amuleto!", + "title": "Uma Oferta Irrecusável", + "description": "Você está sendo oferecido um @[TOOLTIP_TITLE]{Amuleto Brilhante} e {{price, money}} pelo seu {{strongestPokemon}}!\n\nÉ um negócio extremamente bom, mas será que você pode realmente se desfazer de um membro tão forte do seu time?", + "query": "O que você vai fazer?", + "option": { + "1": { + "label": "Aceitar o Acordo", + "tooltip": "(-) Perder {{strongestPokemon}}\n(+) Ganhar um @[TOOLTIP_TITLE]{Amuleto Brilhante}\n(+) Ganhar {{price, money}}", + "selected": "Maravilhoso!@d{32} Venha comigo, {{strongestPokemon}}!$É hora de mostrá-lo para todos no clube de iates!$Eles ficarão com tanta inveja!" + }, + "2": { + "label": "Extorquir o Garoto", + "tooltip": "(+) {{option2PrimaryName}} usa {{moveOrAbility}}\n(+) Ganhar {{price, money}}", + "tooltip_disabled": "Seus Pokémon precisam ter certos golpes ou habilidades para escolher isso", + "selected": "Minha nossa, estamos sendo roubados, {{liepardName}}!$Você vai ouvir falar dos meus advogados por isso!" + }, + "3": { + "label": "Sair", + "tooltip": "(-) Sem Recompensas", + "selected": "Que dia horrível...$Bem, vamos voltar ao clube de iates então, {{liepardName}}." + } + } +} diff --git a/src/locales/pt_BR/mystery-encounters/berries-abound-dialogue.json b/src/locales/pt_BR/mystery-encounters/berries-abound-dialogue.json new file mode 100644 index 00000000000..5a3a30d0bd3 --- /dev/null +++ b/src/locales/pt_BR/mystery-encounters/berries-abound-dialogue.json @@ -0,0 +1,26 @@ +{ + "intro": "Há um enorme arbusto de frutas\nperto daquele Pokémon!", + "title": "Frutas em Abundância", + "description": "Parece que há um Pokémon forte guardando um arbusto de frutas. Batalhar é a abordagem mais direta, mas ele parece ser forte. Talvez um Pokémon rápido consiga pegar algumas frutas sem ser pego?", + "query": "O que você vai fazer?", + "berries": "Frutas!", + "option": { + "1": { + "label": "Batalhar com o Pokémon", + "tooltip": "(-) Batalha Difícil\n(+) Ganhar Frutas", + "selected": "Você se aproxima do\nPokémon sem medo." + }, + "2": { + "label": "Correr para o Arbusto", + "tooltip": "(-) {{fastestPokemon}} Usa sua Velocidade\n(+) Ganhar Frutas", + "selected": "Seu {{fastestPokemon}} corre em direção ao arbusto de frutas!$Ele consegue pegar {{numBerries}} antes que o {{enemyPokemon}} possa reagir!$Você rapidamente recua com seu novo prêmio.", + "selected_bad": "Seu {{fastestPokemon}} corre em direção ao arbusto de frutas!$Oh não! O {{enemyPokemon}} foi mais rápido e bloqueou o caminho!", + "boss_enraged": "O Pokémon oponente, {{enemyPokemon}}, ficou furioso!" + }, + "3": { + "label": "Sair", + "tooltip": "(-) Sem Recompensas", + "selected": "Você deixa o Pokémon forte\ncom seu prêmio e segue em frente." + } + } +} diff --git a/src/locales/pt_BR/mystery-encounters/bug-type-superfan-dialogue.json b/src/locales/pt_BR/mystery-encounters/bug-type-superfan-dialogue.json new file mode 100644 index 00000000000..62244eee918 --- /dev/null +++ b/src/locales/pt_BR/mystery-encounters/bug-type-superfan-dialogue.json @@ -0,0 +1,40 @@ +{ + "intro": "Um treinador incomum com todo tipo de parafernália de Pokémon Inseto bloqueia seu caminho!", + "intro_dialogue": "Ei, treinador! Estou em uma missão para encontrar o Pokémon Inseto mais raro que existe!$Você deve amar Pokémon Inseto também, certo?\nTodo mundo ama Pokémon Inseto!", + "title": "O Superfã dos Pokémon Inseto", + "speaker": "Superfã de Pokémon Inseto", + "description": "O treinador tagarela, nem sequer esperando uma resposta...\n\nParece que a única maneira de sair dessa situação é chamar a atenção do treinador!", + "query": "O que você vai fazer?", + "option": { + "1": { + "label": "Oferecer uma Batalha", + "tooltip": "(-) Batalha Desafiadora\n(+) Ensinar um Movimento de Tipo Inseto a um Pokémon", + "selected": "Um desafio, hein?\nMeus insetos estão mais do que prontos para você!" + }, + "2": { + "label": "Mostrar Seus Tipos Inseto", + "tooltip": "(+) Receber um Item de Presente", + "disabled_tooltip": "Você precisa de pelo menos 1 Pokémon do Tipo Inseto no seu time para selecionar isso.", + "selected": "Você mostra todos os seus Pokémon do Tipo Inseto ao treinador...", + "selected_0_to_1": "Hã? Você só tem {{numBugTypes}}...$Acho que estou perdendo meu tempo com alguém como você...", + "selected_2_to_3": "Ei, você tem {{numBugTypes}}!\nNada mal.$Aqui, isso pode te ajudar na sua jornada para capturar mais!", + "selected_4_to_5": "O quê? Você tem {{numBugTypes}}?\nLegal!$Você ainda não está no meu nível, mas consigo ver uma sombra de mim mesmo em você!\n$Leve isso, meu jovem aprendiz!", + "selected_6": "Uau! {{numBugTypes}}!\n$Você deve amar Pokémon do Tipo Inseto quase tanto quanto eu!$Aqui, leve isso como um símbolo de nossa camaradagem!" + }, + "3": { + "label": "Presentear com um Item de Inseto", + "tooltip": "(-) Dar ao treinador um {{requiredBugItems}}\n(+) Receber um Item de Presente", + "disabled_tooltip": "Você precisa ter um {{requiredBugItems}} para selecionar isso.", + "select_prompt": "Selecione um item para dar.", + "invalid_selection": "Esse Pokémon não possui esse tipo de item.", + "selected": "Você entrega ao treinador um {{selectedItem}}.", + "selected_dialogue": "Uau! Um {{selectedItem}}, para mim?\nVocê não é tão ruim, garoto!$Como símbolo do meu apreço,\nquero que você receba este presente especial!$Ele foi passado por toda a minha família, e agora eu quero que você o tenha!" + } + }, + "battle_won": "Seu conhecimento e habilidade foram perfeitos para explorar nossas fraquezas!$Em troca pela valiosa lição,\ndeixe-me ensinar a um dos seus Pokémon um Movimento de Tipo Inseto!", + "teach_move_prompt": "Selecione um movimento para ensinar a um Pokémon.", + "confirm_no_teach": "Tem certeza de que não quer aprender um desses ótimos movimentos?", + "outro": "Vejo grandes Pokémon Inseto no seu futuro!\nQue nossos caminhos se cruzem novamente!$Saia zunindo!", + "numBugTypes_one": "{{count}} Tipo Inseto", + "numBugTypes_other": "{{count}} Tipos Inseto" +} diff --git a/src/locales/pt_BR/mystery-encounters/clowning-around-dialogue.json b/src/locales/pt_BR/mystery-encounters/clowning-around-dialogue.json new file mode 100644 index 00000000000..83bf85aa0f7 --- /dev/null +++ b/src/locales/pt_BR/mystery-encounters/clowning-around-dialogue.json @@ -0,0 +1,34 @@ +{ + "intro": "É...@d{64} um palhaço?", + "speaker": "Palhaço", + "intro_dialogue": "Pateta trapalhão, prepare-se para uma batalha brilhante!\nVocê será derrotado por este artista de rua brigão!", + "title": "Brincando de Palhaço", + "description": "Algo está estranho nesse encontro. O palhaço parece ansioso para provocá-lo a entrar em uma batalha, mas com que objetivo?\n\nO {{blacephalonName}} é especialmente estranho, como se tivesse @[TOOLTIP_TITLE]{tipos e habilidade esquisitos.}", + "query": "O que você vai fazer?", + "option": { + "1": { + "label": "Batalhar com o Palhaço", + "tooltip": "(-) Batalha Estranha\n(?) Afeta Habilidades dos Pokémon", + "selected": "Seus Pokémon patéticos estão preparados para uma performance patética!", + "apply_ability_dialogue": "Um espetáculo sensacional!\nSeu conhecimento garante uma habilidade sensacional como recompensa!", + "apply_ability_message": "O palhaço está oferecendo para trocar permanentemente a habilidade de um dos seus Pokémon por {{ability}}!", + "ability_prompt": "Você gostaria de ensinar permanentemente a habilidade {{ability}} a um Pokémon?", + "ability_gained": "@s{level_up_fanfare}{{chosenPokemon}} adquiriu a habilidade {{ability}}!" + }, + "2": { + "label": "Não Se Provocar", + "tooltip": "(-) Irrita o Palhaço\n(?) Afeta os Itens dos Pokémon", + "selected": "Covarde dissimulado, você nega um duelo delicioso?\nSinta minha fúria!", + "selected_2": "O {{blacephalonName}} do palhaço usa Trick!\nTodos os itens de {{switchPokemon}} foram trocados aleatoriamente!", + "selected_3": "Tolo frustrado, caia na minha enganação impecável!" + }, + "3": { + "label": "Retrucar os Insultos", + "tooltip": "(-) Irrita o Palhaço\n(?) Afeta os Tipos dos Pokémon", + "selected": "Covarde dissimulado, você nega um duelo delicioso?\nSinta minha fúria!", + "selected_2": "O {{blacephalonName}} do palhaço usa um movimento estranho!\nTodos os tipos da sua equipe foram trocados aleatoriamente!", + "selected_3": "Tolo frustrado, caia na minha enganação impecável!" + } + }, + "outro": "O palhaço e seus companheiros\ndesaparecem em uma nuvem de fumaça." +} diff --git a/src/locales/pt_BR/mystery-encounters/dancing-lessons-dialogue.json b/src/locales/pt_BR/mystery-encounters/dancing-lessons-dialogue.json new file mode 100644 index 00000000000..5769de91ea5 --- /dev/null +++ b/src/locales/pt_BR/mystery-encounters/dancing-lessons-dialogue.json @@ -0,0 +1,27 @@ +{ + "intro": "Um {{oricorioName}} dança tristemente sozinho, sem um parceiro.", + "title": "Aulas de Dança", + "description": "O {{oricorioName}} não parece agressivo, na verdade parece triste.\n\nTalvez ele só queira alguém para dançar junto...", + "query": "O que você vai fazer?", + "option": { + "1": { + "label": "Batalhar", + "tooltip": "(-) Batalha Difícil\n(+) Ganhar um Bastão", + "selected": "O {{oricorioName}} está angustiado e se move para se defender!", + "boss_enraged": "O medo do {{oricorioName}} aumentou suas atributos!" + }, + "2": { + "label": "Aprender Sua Dança", + "tooltip": "(+) Ensinar Revelation Dance a um Pokémon", + "selected": "Você observa o {{oricorioName}} de perto enquanto ele realiza sua dança...$@s{level_up_fanfare}Seu {{selectedPokemon}} aprendeu com o {{oricorioName}}!" + }, + "3": { + "label": "Mostrar uma Dança", + "tooltip": "(-) Ensinar um Movimento de Dança ao {{oricorioName}}\n(+) O {{oricorioName}} Vai Gostar de Você", + "disabled_tooltip": "Seus Pokémon precisam conhecer um movimento de Dança para isso.", + "select_prompt": "Selecione um movimento de tipo Dança para usar.", + "selected": "O {{oricorioName}} observa fascinado enquanto\n{{selectedPokemon}} exibe {{selectedMove}}!$Ele adora a apresentação!$@s{level_up_fanfare}O {{oricorioName}} quer se juntar ao seu time!" + } + }, + "invalid_selection": "Este Pokémon não conhece um movimento de Dança" +} diff --git a/src/locales/pt_BR/mystery-encounters/dark-deal-dialogue.json b/src/locales/pt_BR/mystery-encounters/dark-deal-dialogue.json new file mode 100644 index 00000000000..5f0800d15d2 --- /dev/null +++ b/src/locales/pt_BR/mystery-encounters/dark-deal-dialogue.json @@ -0,0 +1,22 @@ +{ + "intro": "Um homem estranho com um casaco esfarrapado\nbloqueia seu caminho...", + "speaker": "Cara Sombrio", + "intro_dialogue": "Ei, você!$Tenho trabalhado em um novo dispositivo\npara trazer à tona o poder latente de um Pokémon!$Ele reorganiza completamente os átomos do Pokémon\nem nível molecular, tornando-o muito mais poderoso.$Hehe...@d{64} Só preciso de alguns volunt-@d{32}\nErr, sujeitos de teste, para provar que funciona.", + "title": "Acordo Sombrio", + "description": "O sujeito perturbador levanta algumas Pokébolas.\n\"Vou fazer valer a pena! Você pode ficar com estas Pokébolas fortes como pagamento, só preciso de um Pokémon da sua equipe! Hehe...\"", + "query": "O que você vai fazer?", + "option": { + "1": { + "label": "Aceitar", + "tooltip": "(+) 5 Bolas Desonestas\n(?) Melhorar um Pokémon Aleatório", + "selected_dialogue": "Vamos ver, aquele {{pokeName}} serve muito bem!$Lembre-se, não sou responsável\nse algo de ruim acontecer!@d{32} Hehe...", + "selected_message": "O homem te entrega 5 Bolas Desonestas.${{pokeName}} pula na máquina estranha...$Luzes piscando e sons estranhos\ncomeçam a sair da máquina!$...@d{96} Algo emerge\ndo dispositivo, enfurecido!" + }, + "2": { + "label": "Recusar", + "tooltip": "(-) Sem Recompensas", + "selected": "Não vai ajudar um pobre coitado?\nBah!" + } + }, + "outro": "Após o encontro aterrorizante,\nvocê se recompõe e parte." +} diff --git a/src/locales/pt_BR/mystery-encounters/delibirdy-dialogue.json b/src/locales/pt_BR/mystery-encounters/delibirdy-dialogue.json new file mode 100644 index 00000000000..a1ac79681d0 --- /dev/null +++ b/src/locales/pt_BR/mystery-encounters/delibirdy-dialogue.json @@ -0,0 +1,27 @@ +{ + "intro": "Um bando de {{delibirdName}} apareceu!", + "title": "Delibir-dy", + "description": "Os {{delibirdName}} estão te olhando com expectativa, como se quisessem algo. Talvez dar a eles um item ou um pouco de dinheiro os satisfaça?", + "query": "O que você vai dar a eles?", + "invalid_selection": "O Pokémon não tem esse tipo de item.", + "option": { + "1": { + "label": "Dar Dinheiro", + "tooltip": "(-) Dar aos {{delibirdName}} {{money, money}}\n(+) Receber um Item de Presente", + "selected": "Você joga o dinheiro para os {{delibirdName}},\nque conversam entre si animadamente.$Eles se viram para você e alegremente te dão um presente!" + }, + "2": { + "label": "Dar Comida", + "tooltip": "(-) Dar aos {{delibirdName}} uma Fruta ou Semente Reanimadora\n(+) Receber um Item de Presente", + "select_prompt": "Selecione um item para dar.", + "selected": "Você joga a {{chosenItem}} para os {{delibirdName}},\nque conversam entre si animadamente.$Eles se viram para você e alegremente te dão um presente!" + }, + "3": { + "label": "Dar um Item", + "tooltip": "(-) Dar aos {{delibirdName}} um Item Segurado\n(+) Receber um Item de Presente", + "select_prompt": "Selecione um item para dar.", + "selected": "Você joga o(a) {{chosenItem}} para os {{delibirdName}},\nque conversam entre si animadamente.$Eles se viram para você e alegremente te dão um presente!" + } + }, + "outro": "O bando de {{delibirdName}} sai alegremente andando para longe.$Que troca curiosa!" +} diff --git a/src/locales/pt_BR/mystery-encounters/department-store-sale-dialogue.json b/src/locales/pt_BR/mystery-encounters/department-store-sale-dialogue.json new file mode 100644 index 00000000000..c7a85c811aa --- /dev/null +++ b/src/locales/pt_BR/mystery-encounters/department-store-sale-dialogue.json @@ -0,0 +1,27 @@ +{ + "intro": "É uma senhora com um monte de sacolas de compras.", + "speaker": "Compradora", + "intro_dialogue": "Olá! Você também está aqui\npelas vendas incríveis?$Há um cupom especial que você pode\nresgatar por um item grátis durante a venda!$Eu tenho um extra. Aqui está!", + "title": "Venda na Loja de Departamentos", + "description": "Há mercadorias em todas as direções! Parece que há 4 balcões onde você pode resgatar o cupom por vários itens. As possibilidades são infinitas!", + "query": "Em qual balcão você vai?", + "option": { + "1": { + "label": "Balcão de TMs", + "tooltip": "(+) Loja de TMs" + }, + "2": { + "label": "Balcão de Vitaminas", + "tooltip": "(+) Loja de Vitaminas" + }, + "3": { + "label": "Balcão de Itens de Batalha", + "tooltip": "(+) Loja de Itens X" + }, + "4": { + "label": "Balcão de Pokébolas", + "tooltip": "(+) Loja de Pokébolas" + } + }, + "outro": "Que barganha! Você deveria comprar lá mais vezes." +} diff --git a/src/locales/pt_BR/mystery-encounters/field-trip-dialogue.json b/src/locales/pt_BR/mystery-encounters/field-trip-dialogue.json new file mode 100644 index 00000000000..4c3dd45fe3f --- /dev/null +++ b/src/locales/pt_BR/mystery-encounters/field-trip-dialogue.json @@ -0,0 +1,31 @@ +{ + "intro": "É uma professora e algumas crianças da escola!", + "speaker": "Professora", + "intro_dialogue": "Olá! Você poderia\nnos dar um minutinho para meus alunos?$Estou ensinando a eles sobre movimentos de Pokémon\ne adoraria mostrar uma demonstração.$Você se importaria de nos mostrar um\ndos movimentos que seu Pokémon pode usar?", + "title": "Excursão", + "description": "Uma professora está pedindo uma demonstração de movimentos de um Pokémon. Dependendo do movimento que você escolher, ela pode ter algo útil para te dar em troca.", + "query": "Qual categoria de movimento você vai mostrar?", + "option": { + "1": { + "label": "Um Movimento Físico", + "tooltip": "(+) Recompensas de Itens Físicos" + }, + "2": { + "label": "Um Movimento Especial", + "tooltip": "(+) Recompensas de Itens Especiais" + }, + "3": { + "label": "Um Movimento de Status", + "tooltip": "(+) Recompensas de Itens de Status" + }, + "selected": "{{pokeName}} faz uma exibição incrível de {{move}}!" + }, + "second_option_prompt": "Escolha um movimento para seu Pokémon usar.", + "incorrect": "...$Esse não é um movimento de {{moveCategory}}!\nSinto muito, mas não posso te dar nada.$Vamos, crianças, encontraremos\numa demonstração melhor em outro lugar.", + "incorrect_exp": "Parece que você aprendeu uma lição valiosa?$Seu Pokémon também ganhou um pouco de experiência.", + "correct": "Muito obrigada pela sua gentileza!\nEspero que esses itens sejam úteis para você!", + "correct_exp": "{{pokeName}} também ganhou uma valiosa experiência!", + "status": "Status", + "physical": "Físico", + "special": "Especial" +} diff --git a/src/locales/pt_BR/mystery-encounters/fiery-fallout-dialogue.json b/src/locales/pt_BR/mystery-encounters/fiery-fallout-dialogue.json new file mode 100644 index 00000000000..24c601e8e1e --- /dev/null +++ b/src/locales/pt_BR/mystery-encounters/fiery-fallout-dialogue.json @@ -0,0 +1,26 @@ +{ + "intro": "Você encontra uma tempestade abrasadora de fumaça e cinzas!", + "title": "Rescaldo Ardente", + "description": "As cinzas e brasas rodopiantes reduziram a visibilidade a quase zero. Parece que pode haver alguma... fonte causando essas condições. Mas o que poderia estar por trás de um fenômeno dessa magnitude?", + "query": "O que você vai fazer?", + "option": { + "1": { + "label": "Encontrar a Fonte", + "tooltip": "(?) Descobrir a fonte\n(-) Batalha Difícil", + "selected": "Você avança pela tempestade e encontra dois {{volcaronaName}}s no meio de uma dança de acasalamento!$Eles não gostam da interrupção e atacam!" + }, + "2": { + "label": "Abaixar-se e Esperar", + "tooltip": "(-) Sofrer os efeitos do clima", + "selected": "Os efeitos climáticos causam um dano significativo\nenquanto você luta para encontrar abrigo!$Seu grupo perde 20% de PS Máximo!", + "target_burned": "Seu {{burnedPokemon}} também foi queimado!" + }, + "3": { + "label": "Seus Tipos Fogo Ajudam", + "tooltip": "(+) Encerrar as condições\n(+) Ganhar um Carvão", + "disabled_tooltip": "Você precisa de pelo menos 2 Pokémon do Tipo Fogo para escolher esta opção", + "selected": "Seu {{option3PrimaryName}} e {{option3SecondaryName}} guiam você até onde dois {{volcaronaName}}s estão no meio de uma dança de acasalamento!$Felizmente, seus Pokémon conseguem acalmá-los,\ne eles partem sem problemas." + } + }, + "found_charcoal": "Após o clima limpar,\nseu {{leadPokemon}} vê algo no chão.$@s{item_fanfare}{{leadPokemon}} encontrou um Carvão!" +} diff --git a/src/locales/pt_BR/mystery-encounters/fight-or-flight-dialogue.json b/src/locales/pt_BR/mystery-encounters/fight-or-flight-dialogue.json new file mode 100644 index 00000000000..f90868e6045 --- /dev/null +++ b/src/locales/pt_BR/mystery-encounters/fight-or-flight-dialogue.json @@ -0,0 +1,25 @@ +{ + "intro": "Algo brilhante está cintilando\nno chão perto daquele Pokémon!", + "title": "Lutar ou Fugir", + "description": "Parece que há um Pokémon forte guardando um item. Batalhar é a abordagem mais direta, mas ele parece ser forte. Talvez você possa roubar o item, se tiver o Pokémon certo para o trabalho.", + "query": "O que você vai fazer?", + "option": { + "1": { + "label": "Batalhar com o Pokémon", + "tooltip": "(-) Batalha Difícil\n(+) Novo Item", + "selected": "Você se aproxima do\nPokémon sem medo.", + "stat_boost": "A força latente do {{enemyPokemon}} aumentou um de seus atributos!" + }, + "2": { + "label": "Roubar o Item", + "disabled_tooltip": "Seus Pokémon precisam conhecer certos movimentos para escolher isso", + "tooltip": "(+) {{option2PrimaryName}} usa {{option2PrimaryMove}}", + "selected": ".@d{32}.@d{32}.@d{32}$Seu {{option2PrimaryName}} te ajuda e usa {{option2PrimaryMove}}!$Você conseguiu pegar o item!" + }, + "3": { + "label": "Sair", + "tooltip": "(-) Sem Recompensas", + "selected": "Você deixa o Pokémon forte\ncom seu prêmio e segue em frente." + } + } +} diff --git a/src/locales/pt_BR/mystery-encounters/fun-and-games-dialogue.json b/src/locales/pt_BR/mystery-encounters/fun-and-games-dialogue.json new file mode 100644 index 00000000000..d3fd98f5d7f --- /dev/null +++ b/src/locales/pt_BR/mystery-encounters/fun-and-games-dialogue.json @@ -0,0 +1,30 @@ +{ + "intro_dialogue": "Venham, venham, pessoal! Tentem a sorte\nno novíssimo {{wobbuffetName}} Bate-o-mático!", + "speaker": "Animador", + "title": "Diversão e Jogos!", + "description": "Você encontrou um show itinerante com um jogo de prêmios! Você terá @[TOOLTIP_TITLE]{3 turnos} para deixar o {{wobbuffetName}} o mais próximo possível de @[TOOLTIP_TITLE]{1 PS} @[TOOLTIP_TITLE]{sem nocauteá-lo} para que ele possa carregar um grande Counter na máquina de tocar o sino.\nMas cuidado! Se você nocautear o {{wobbuffetName}}, terá que pagar o custo de revivê-lo!", + "query": "Gostaria de jogar?", + "option": { + "1": { + "label": "Jogar", + "tooltip": "(-) Pagar {{option1Money, money}}\n(+) Jogar {{wobbuffetName}} Bate-o-mático", + "selected": "Hora de testar sua sorte!" + }, + "2": { + "label": "Sair", + "tooltip": "(-) Sem Recompensas", + "selected": "Você segue seu caminho apressadamente,\ncom uma leve sensação de arrependimento." + } + }, + "ko": "Oh não! O {{wobbuffetName}} desmaiou!$Você perdeu o jogo e\nterá que pagar o custo da reanimação...", + "charging_continue": "O Wobbuffet continua carregando seu contra-ataque!", + "turn_remaining_3": "Restam três turnos!", + "turn_remaining_2": "Restam dois turnos!", + "turn_remaining_1": "Resta um turno!", + "end_game": "O tempo acabou!$O {{wobbuffetName}} se prepara para o contra-ataque e@d{16}.@d{16}.@d{16}.", + "best_result": "O {{wobbuffetName}} bate o botão com tanta força\nque o sino se quebra no topo!$Você ganhou o grande prêmio!", + "great_result": "O {{wobbuffetName}} bate o botão, quase acertando o sino!$Tão perto!\nVocê ganhou o prêmio de segundo nível!", + "good_result": "O {{wobbuffetName}} bate o botão com força suficiente para chegar no meio da escala!$Você ganhou o prêmio de terceiro nível!", + "bad_result": "O {{wobbuffetName}} mal toca o botão e nada acontece...$Oh não!\nVocê não ganhou nada!", + "outro": "Esse foi um joguinho divertido!" +} diff --git a/src/locales/pt_BR/mystery-encounters/global-trade-system-dialogue.json b/src/locales/pt_BR/mystery-encounters/global-trade-system-dialogue.json new file mode 100644 index 00000000000..d9866d64c7f --- /dev/null +++ b/src/locales/pt_BR/mystery-encounters/global-trade-system-dialogue.json @@ -0,0 +1,32 @@ +{ + "intro": "É uma interface para o Sistema de Troca Global!", + "title": "O GTS", + "description": "Ah, o GTS! Uma maravilha tecnológica, você pode se conectar com qualquer pessoa ao redor do mundo para trocar Pokémon com ela! Será que a sorte vai sorrir para sua troca hoje?", + "query": "O que você vai fazer?", + "option": { + "1": { + "label": "Ver Ofertas de Troca", + "tooltip": "(+) Selecionar uma oferta de troca para um dos seus Pokémon", + "trade_options_prompt": "Selecione um Pokémon para receber através da troca." + }, + "2": { + "label": "Troca Surpresa", + "tooltip": "(+) Envie um dos seus Pokémon para o GTS e receba um Pokémon aleatório em troca" + }, + "3": { + "label": "Trocar um Item", + "trade_options_prompt": "Selecione um item para enviar.", + "invalid_selection": "Este Pokémon não possui itens válidos para troca.", + "tooltip": "(+) Envie um dos seus Itens para o GTS e receba um novo Item aleatório" + }, + "4": { + "label": "Sair", + "tooltip": "(-) Sem Recompensas", + "selected": "Sem tempo para trocas hoje!\nVocê segue em frente." + } + }, + "pokemon_trade_selected": "{{tradedPokemon}} será enviado para {{tradeTrainerName}}.", + "pokemon_trade_goodbye": "Adeus, {{tradedPokemon}}!", + "item_trade_selected": "{{chosenItem}} será enviado para {{tradeTrainerName}}.$.@d{64}.@d{64}.@d{64}\n@s{level_up_fanfare}Troca concluída!$Você recebeu um {{itemName}} de {{tradeTrainerName}}!", + "trade_received": "@s{evolution_fanfare}{{tradeTrainerName}} enviou um {{received}}!" +} diff --git a/src/locales/pt_BR/mystery-encounters/lost-at-sea-dialogue.json b/src/locales/pt_BR/mystery-encounters/lost-at-sea-dialogue.json new file mode 100644 index 00000000000..86502fc06cd --- /dev/null +++ b/src/locales/pt_BR/mystery-encounters/lost-at-sea-dialogue.json @@ -0,0 +1,28 @@ +{ + "intro": "Vagando sem rumo pelo mar, você efetivamente não chegou a lugar nenhum.", + "title": "Perdido no Mar", + "description": "O mar está turbulento nesta área, e você está ficando sem energia.\nIsso é ruim. Haverá uma saída para essa situação?", + "query": "O que você vai fazer?", + "option": { + "1": { + "label": "{{option1PrimaryName}} Pode Ajudar", + "label_disabled": "Não pode {{option1RequiredMove}}", + "tooltip": "(+) {{option1PrimaryName}} te salva\n(+) {{option1PrimaryName}} ganha um pouco de EXP", + "tooltip_disabled": "Você não tem um Pokémon que possa {{option1RequiredMove}}", + "selected": "{{option1PrimaryName}} nada à frente, guiando você de volta ao caminho.${{option1PrimaryName}} parece ter ficado mais forte nesse momento de necessidade!" + }, + "2": { + "label": "{{option2PrimaryName}} Pode Ajudar", + "label_disabled": "Não pode {{option2RequiredMove}}", + "tooltip": "(+) {{option2PrimaryName}} te salva\n(+) {{option2PrimaryName}} ganha um pouco de EXP", + "tooltip_disabled": "Você não tem um Pokémon que possa {{option2RequiredMove}}", + "selected": "{{option2PrimaryName}} voa à frente do seu barco, guiando você de volta ao caminho.${{option2PrimaryName}} parece ter ficado mais forte nesse momento de necessidade!" + }, + "3": { + "label": "Vaguear Sem Rumo", + "tooltip": "(-) Cada um dos seus Pokémon perde {{damagePercentage}}% de seus PS totais", + "selected": "Você flutua no barco, navegando sem direção até finalmente avistar um ponto de referência que você se lembra.$Você e seus Pokémon estão exaustos de toda a provação." + } + }, + "outro": "Você está de volta ao caminho." +} diff --git a/src/locales/pt_BR/mystery-encounters/mysterious-challengers-dialogue.json b/src/locales/pt_BR/mystery-encounters/mysterious-challengers-dialogue.json new file mode 100644 index 00000000000..3d6a6744f2e --- /dev/null +++ b/src/locales/pt_BR/mystery-encounters/mysterious-challengers-dialogue.json @@ -0,0 +1,22 @@ +{ + "intro": "Desafiantes misteriosos apareceram!", + "title": "Desafiantes Misteriosos", + "description": "Se você derrotar um desafiante, pode impressioná-los o suficiente para receber uma recompensa. Mas alguns parecem fortes, você está à altura do desafio?", + "query": "Quem você vai enfrentar?", + "option": { + "1": { + "label": "Um Oponente Astuto e Atento", + "tooltip": "(-) Batalha Padrão\n(+) Recompensas de Itens de Movimento" + }, + "2": { + "label": "Um Oponente Forte", + "tooltip": "(-) Batalha Difícil\n(+) Boas Recompensas" + }, + "3": { + "label": "O Oponente Mais Poderoso", + "tooltip": "(-) Batalha Brutal\n(+) Grandes Recompensas" + }, + "selected": "O treinador dá um passo à frente..." + }, + "outro": "O desafiante misterioso foi derrotado!" +} diff --git a/src/locales/pt_BR/mystery-encounters/mysterious-chest-dialogue.json b/src/locales/pt_BR/mystery-encounters/mysterious-chest-dialogue.json new file mode 100644 index 00000000000..b2541f2c82a --- /dev/null +++ b/src/locales/pt_BR/mystery-encounters/mysterious-chest-dialogue.json @@ -0,0 +1,23 @@ +{ + "intro": "Você encontrou...@d{32} um baú?", + "title": "O Baú Misterioso", + "description": "Um baú lindamente decorado está no chão. Deve haver algo bom dentro... certo?", + "query": "Você vai abri-lo?", + "option": { + "1": { + "label": "Abrir", + "tooltip": "@[SUMMARY_BLUE]{({{trapPercent}}%) Algo terrível}\n@[SUMMARY_GREEN]{({{commonPercent}}%) Recompensas razoáveis}\n@[SUMMARY_GREEN]{({{ultraPercent}}%) Boas Recompensas}\n@[SUMMARY_GREEN]{({{roguePercent}}%) Ótimas Recompensas}\n@[SUMMARY_GREEN]{({{masterPercent}}%) Recompensas Incríveis}", + "selected": "Você abre o baú e encontra...", + "normal": "Apenas algumas ferramentas e itens normais.", + "good": "Algumas ferramentas e itens bem legais.", + "great": "Algumas ferramentas e itens ótimos!", + "amazing": "Uau! Um item incrível!", + "bad": "Oh não!@d{32}\nO baú era na verdade um {{gimmighoulName}} disfarçado!$Seu {{pokeName}} pula na sua frente,\nmas é nocauteado no processo!" + }, + "2": { + "label": "Muito Arriscado, Sair", + "tooltip": "(-) Sem Recompensas", + "selected": "Você segue seu caminho apressadamente,\ncom uma leve sensação de arrependimento." + } + } +} diff --git a/src/locales/pt_BR/mystery-encounters/part-timer-dialogue.json b/src/locales/pt_BR/mystery-encounters/part-timer-dialogue.json new file mode 100644 index 00000000000..3893aa41d2d --- /dev/null +++ b/src/locales/pt_BR/mystery-encounters/part-timer-dialogue.json @@ -0,0 +1,31 @@ +{ + "intro": "Um trabalhador ocupado te chama.", + "speaker": "Trabalhador", + "intro_dialogue": "Você parece ser alguém com muitos Pokémon capazes!$Nós podemos te pagar se você puder nos ajudar com algum trabalho de meio período!", + "title": "Trabalho Temporário", + "description": "Parece que há muitas tarefas que precisam ser feitas. Dependendo de quão bem o seu Pokémon se adapta a uma tarefa, ele pode ganhar mais ou menos dinheiro.", + "query": "Qual trabalho você vai escolher?", + "invalid_selection": "O Pokémon precisa estar saudável o suficiente.", + "option": { + "1": { + "label": "Fazer Entregas", + "tooltip": "(-) Seu Pokémon usa sua Velocidade\n(+) Ganhe @[MONEY]{Dinheiro}", + "selected": "Seu {{selectedPokemon}} faz um turno entregando pedidos para os clientes." + }, + "2": { + "label": "Trabalho no Armazém", + "tooltip": "(-) Seu Pokémon usa sua Força e Resistência\n(+) Ganhe @[MONEY]{Dinheiro}", + "selected": "Seu {{selectedPokemon}} faz um turno movendo itens no armazém." + }, + "3": { + "label": "Assistente de Vendas", + "tooltip": "(-) Seu {{option3PrimaryName}} usa {{option3PrimaryMove}}\n(+) Ganhe @[MONEY]{Dinheiro}", + "disabled_tooltip": "Seu Pokémon precisa conhecer certos movimentos para este trabalho", + "selected": "Seu {{option3PrimaryName}} passa o dia usando {{option3PrimaryMove}} para atrair clientes para o negócio!" + } + }, + "job_complete_good": "Obrigado pela ajuda!\nSeu {{selectedPokemon}} foi incrivelmente útil!$Aqui está seu pagamento pelo dia.", + "job_complete_bad": "Seu {{selectedPokemon}} nos ajudou um pouco!$Aqui está seu pagamento pelo dia.", + "pokemon_tired": "Seu {{selectedPokemon}} está exausto!\nO PP de todos os seus movimentos foi reduzido para 2!", + "outro": "Volte e nos ajude novamente algum dia!" +} diff --git a/src/locales/pt_BR/mystery-encounters/safari-zone-dialogue.json b/src/locales/pt_BR/mystery-encounters/safari-zone-dialogue.json new file mode 100644 index 00000000000..a43538e41f5 --- /dev/null +++ b/src/locales/pt_BR/mystery-encounters/safari-zone-dialogue.json @@ -0,0 +1,46 @@ +{ + "intro": "É uma zona de safári!", + "title": "A Zona de Safári", + "description": "Há todos os tipos de Pokémon raros e especiais que podem ser encontrados aqui!\nSe você escolher entrar, terá um limite de tempo de 3 encontros selvagens onde poderá tentar capturar esses Pokémon especiais.\n\nCuidado, no entanto. Esses Pokémon podem fugir antes que você consiga capturá-los!", + "query": "Você gostaria de entrar?", + "option": { + "1": { + "label": "Entrar", + "tooltip": "(-) Pagar {{option1Money, money}}\n@[SUMMARY_GREEN]{(?) Zona de Safári}", + "selected": "Hora de testar sua sorte!" + }, + "2": { + "label": "Sair", + "tooltip": "(-) Sem Recompensas", + "selected": "Você segue seu caminho apressadamente,\ncom uma leve sensação de arrependimento." + } + }, + "safari": { + "1": { + "label": "Jogar uma Pokébola", + "tooltip": "(+) Jogar uma Pokébola", + "selected": "Você joga uma Pokébola!" + }, + "2": { + "label": "Jogar Isca", + "tooltip": "(+) Aumenta a Taxa de Captura\n(-) Chance de Aumentar a Taxa de Fuga", + "selected": "Você joga um pouco de isca!" + }, + "3": { + "label": "Jogar Lama", + "tooltip": "(+) Diminui a Taxa de Fuga\n(-) Chance de Diminuir a Taxa de Captura", + "selected": "Você joga um pouco de lama!" + }, + "4": { + "label": "Fugir", + "tooltip": "(?) Fugir deste Pokémon" + }, + "watching": "{{pokemonName}} está observando cuidadosamente!", + "eating": "{{pokemonName}} está comendo!", + "busy_eating": "{{pokemonName}} está ocupado comendo!", + "angry": "{{pokemonName}} está com raiva!", + "beside_itself_angry": "{{pokemonName}} está fora de si de tanta raiva!", + "remaining_count": "{{remainingCount}} Pokémon restantes!" + }, + "outro": "Essa foi uma pequena excursão divertida!" +} diff --git a/src/locales/pt_BR/mystery-encounters/shady-vitamin-dealer-dialogue.json b/src/locales/pt_BR/mystery-encounters/shady-vitamin-dealer-dialogue.json new file mode 100644 index 00000000000..af58e99924c --- /dev/null +++ b/src/locales/pt_BR/mystery-encounters/shady-vitamin-dealer-dialogue.json @@ -0,0 +1,27 @@ +{ + "intro": "Um homem com um casaco escuro se aproxima de você.", + "speaker": "Vendedor Suspeito", + "intro_dialogue": ".@d{16}.@d{16}.@d{16}$Eu tenho os produtos, se você tiver o dinheiro.$Mas certifique-se de que seu Pokémon pode lidar com isso.", + "title": "O Vendedor de Vitaminas", + "description": "O homem abre o casaco para revelar algumas vitaminas de Pokémon. Os preços que ele menciona parecem uma boa oferta. Quase boa demais...\nEle oferece dois pacotes de ofertas para você escolher.", + "query": "Qual oferta você vai escolher?", + "invalid_selection": "O Pokémon precisa estar saudável o suficiente.", + "option": { + "1": { + "label": "A Oferta Barata", + "tooltip": "(-) Pagar {{option1Money, money}}\n(-) Efeitos colaterais?\n(+) Pokémon Escolhido Ganha 2 Vitaminas Aleatórias" + }, + "2": { + "label": "A Oferta Cara", + "tooltip": "(-) Pagar {{option2Money, money}}\n(+) Pokémon Escolhido Ganha 2 Vitaminas Aleatórias" + }, + "3": { + "label": "Sair", + "tooltip": "(-) Sem Recompensas", + "selected": "Heh, não imaginei que você fosse um covarde." + }, + "selected": "O homem te entrega dois frascos e desaparece rapidamente.${{selectedPokemon}} ganhou impulsos de {{boost1}} e {{boost2}}!" + }, + "cheap_side_effects": "Mas o remédio teve alguns efeitos colaterais!$Seu {{selectedPokemon}} sofreu alguns danos,\ne sua Natureza mudou para {{newNature}}!", + "no_bad_effects": "Parece que não houve efeitos colaterais do remédio!" +} diff --git a/src/locales/pt_BR/mystery-encounters/slumbering-snorlax-dialogue.json b/src/locales/pt_BR/mystery-encounters/slumbering-snorlax-dialogue.json new file mode 100644 index 00000000000..a53a60dd21a --- /dev/null +++ b/src/locales/pt_BR/mystery-encounters/slumbering-snorlax-dialogue.json @@ -0,0 +1,25 @@ +{ + "intro": "Enquanto você caminha por um caminho estreito, vê uma silhueta imponente bloqueando seu caminho.$Você se aproxima e vê um {{snorlaxName}} dormindo pacificamente.\nParece que não há como contorná-lo.", + "title": "{{snorlaxName}} Adormecido", + "description": "Você pode atacá-lo para tentar fazê-lo se mover, ou simplesmente esperar que ele acorde. Quem sabe quanto tempo isso pode levar, no entanto...", + "query": "O que você vai fazer?", + "option": { + "1": { + "label": "Batalhar com Ele", + "tooltip": "(-) Lutar com o {{snorlaxName}} Adormecido\n(+) Recompensa Especial", + "selected": "Você se aproxima do\nPokémon sem medo." + }, + "2": { + "label": "Esperar que Ele se Mova", + "tooltip": "(-) Esperar por Muito Tempo\n(+) Recuperar o Time", + "selected": ".@d{32}.@d{32}.@d{32}$Você espera por um tempo, mas os bocejos do {{snorlaxName}} deixam seu time sonolento...", + "rest_result": "Quando todos vocês acordam, o {{snorlaxName}} não está em lugar algum -\nmas seus Pokémon estão todos curados!" + }, + "3": { + "label": "Roubar Seu Item", + "tooltip": "(+) {{option3PrimaryName}} usa {{option3PrimaryMove}}\n(+) Recompensa Especial", + "disabled_tooltip": "Seus Pokémon precisam conhecer certos movimentos para escolher isso", + "selected": "Seu {{option3PrimaryName}} usa {{option3PrimaryMove}}!$@s{item_fanfare}Ele rouba Leftovers do {{snorlaxName}} adormecido\ne você foge como um bandido!" + } + } +} diff --git a/src/locales/pt_BR/mystery-encounters/teleporting-hijinks-dialogue.json b/src/locales/pt_BR/mystery-encounters/teleporting-hijinks-dialogue.json new file mode 100644 index 00000000000..e7b6dfa6831 --- /dev/null +++ b/src/locales/pt_BR/mystery-encounters/teleporting-hijinks-dialogue.json @@ -0,0 +1,27 @@ +{ + "intro": "É uma máquina estranha, zumbindo ruidosamente...", + "title": "Travessuras de Teletransporte", + "description": "A máquina tem uma placa que diz:\n \"Para usar, insira dinheiro e entre na cápsula.\"\n\nTalvez ela possa te transportar para algum lugar...", + "query": "O que você vai fazer?", + "option": { + "1": { + "label": "Colocar Dinheiro", + "tooltip": "(-) Pagar {{price, money}}\n(?) Teletransportar para Novo Bioma", + "selected": "Você insere algum dinheiro, e a cápsula se abre.\nVocê entra..." + }, + "2": { + "label": "Um Pokémon Ajuda", + "tooltip": "(-) {{option2PrimaryName}} Ajuda\n(+) {{option2PrimaryName}} ganha EXP\n(?) Teletransportar para Novo Bioma", + "disabled_tooltip": "Você precisa de um Pokémon do Tipo Aço ou Elétrico para escolher isso", + "selected": "O Tipo de {{option2PrimaryName}} permite que ele contorne a barreira de pagamento da máquina!$A cápsula se abre, e você entra..." + }, + "3": { + "label": "Inspecionar a Máquina", + "tooltip": "(-) Batalha de Pokémon", + "selected": "Você é atraído pelas luzes piscantes\ne pelos sons estranhos vindos da máquina...$Você nem percebe enquanto um Pokémon selvagem\nse aproxima e te embosca!" + } + }, + "transport": "A máquina treme violentamente,\nemitindo todo tipo de som estranho!$Logo após começar, ela se silencia mais uma vez.", + "attacked": "Você sai em uma área completamente nova, assustando um Pokémon selvagem!$O Pokémon selvagem ataca!", + "boss_enraged": "O {{enemyPokemon}} oponente ficou furioso!" +} diff --git a/src/locales/pt_BR/mystery-encounters/the-expert-pokemon-breeder-dialogue.json b/src/locales/pt_BR/mystery-encounters/the-expert-pokemon-breeder-dialogue.json new file mode 100644 index 00000000000..d84c6c07273 --- /dev/null +++ b/src/locales/pt_BR/mystery-encounters/the-expert-pokemon-breeder-dialogue.json @@ -0,0 +1,31 @@ +{ + "intro": "É um treinador carregando muitos Ovos de Pokémon!", + "intro_dialogue": "Ei, treinador!$Parece que alguns dos seus\nPokémon parceiros estão um pouco desanimados.$Por que não batalha comigo para animá-los?", + "title": "O Criador de Pokémon Experiente", + "description": "Você foi desafiado para uma batalha onde @[TOOLTIP_TITLE]{você só pode usar um único Pokémon}. Pode ser difícil, mas certamente fortaleceria o vínculo que você tem com o Pokémon que escolher!\nO criador também te dará alguns @[TOOLTIP_TITLE]{Ovos de Pokémon} se você vencer!", + "query": "Com quem você vai batalhar?", + "cleffa_1_nickname": "Ás", + "cleffa_2_nickname": "Clefablest", + "cleffa_3_nickname": "{{speciesName}} o Grande", + "option": { + "1": { + "label": "{{pokemon1Name}}", + "tooltip_base": "(-) Batalha Difícil\n(+) Aumentar Amizade com {{pokemon1Name}}" + }, + "2": { + "label": "{{pokemon2Name}}", + "tooltip_base": "(-) Batalha Difícil\n(+) Aumentar Amizade com {{pokemon2Name}}" + }, + "3": { + "label": "{{pokemon3Name}}", + "tooltip_base": "(-) Batalha Difícil\n(+) Aumentar Amizade com {{pokemon3Name}}" + }, + "selected": "Vamos lá!" + }, + "outro": "Veja como seu {{chosenPokemon}} está feliz agora!$Aqui, você também pode ficar com isso.", + "outro_failed": "Que decepção...$Parece que você ainda tem um longo caminho\na percorrer para ganhar a confiança dos seus Pokémon!", + "gained_eggs": "@s{item_fanfare}Você recebeu {{numEggs}}!", + "eggs_tooltip": "\n(+) Ganhe {{eggs}}", + "numEggs_one": "{{count}} Ovo {{rarity}}", + "numEggs_other": "{{count}} Ovos {{rarity}}" +} diff --git a/src/locales/pt_BR/mystery-encounters/the-pokemon-salesman-dialogue.json b/src/locales/pt_BR/mystery-encounters/the-pokemon-salesman-dialogue.json new file mode 100644 index 00000000000..71467a78cf9 --- /dev/null +++ b/src/locales/pt_BR/mystery-encounters/the-pokemon-salesman-dialogue.json @@ -0,0 +1,23 @@ +{ + "intro": "Um idoso animado se aproxima de você.", + "speaker": "Cavalheiro", + "intro_dialogue": "Olá! Tenho um negócio especialmente para VOCÊ!", + "title": "O Vendedor de Pokémon", + "description": "\"Este {{purchasePokemon}} é extremamente único e possui uma habilidade que normalmente não é encontrada em sua espécie! Vou deixar você levar este ótimo {{purchasePokemon}} por apenas {{price, money}}!\"\n\n\"O que me diz?\"", + "description_shiny": "\"Este {{purchasePokemon}} é extremamente único e possui uma pigmentação que normalmente não é encontrada em sua espécie! Vou deixar você levar este ótimo {{purchasePokemon}} por apenas {{price, money}}!\"\n\n\"O que me diz?\"", + "query": "O que você vai fazer?", + "option": { + "1": { + "label": "Aceitar", + "tooltip": "(-) Pagar {{price, money}}\n(+) Ganhar um {{purchasePokemon}} com sua Habilidade Oculta", + "tooltip_shiny": "(-) Pagar {{price, money}}\n(+) Ganhar um {{purchasePokemon}} brilhante", + "selected_message": "Você pagou uma quantia exorbitante e comprou o {{purchasePokemon}}.", + "selected_dialogue": "Excelente escolha!$Posso ver que você tem um olho afiado para negócios.$Ah, sim...@d{64} Devoluções não são aceitas, entendeu?" + }, + "2": { + "label": "Recusar", + "tooltip": "(-) Sem Recompensas", + "selected": "Não?@d{32} Você disse não?$Estou fazendo isso como um favor para você!" + } + } +} diff --git a/src/locales/pt_BR/mystery-encounters/the-strong-stuff-dialogue.json b/src/locales/pt_BR/mystery-encounters/the-strong-stuff-dialogue.json new file mode 100644 index 00000000000..0d479cdc629 --- /dev/null +++ b/src/locales/pt_BR/mystery-encounters/the-strong-stuff-dialogue.json @@ -0,0 +1,21 @@ +{ + "intro": "É um enorme {{shuckleName}} e o que parece ser\na grande reserva de... suco?", + "title": "O Suco Forte", + "description": "O {{shuckleName}} que bloqueia seu caminho parece incrivelmente forte. Enquanto isso, o suco ao lado dele está emanando algum tipo de poder.\n\nO {{shuckleName}} estende seus tentáculos na sua direção. Parece que ele quer fazer algo...", + "query": "O que você vai fazer?", + "option": { + "1": { + "label": "Aproximar-se do {{shuckleName}}", + "tooltip": "(?) Algo terrível ou incrível pode acontecer", + "selected": "Você desmaia.", + "selected_2": "@f{150}Quando você desperta, o {{shuckleName}} se foi\ne a reserva de suco está completamente drenada.${{highBstPokemon1}} e {{highBstPokemon2}}\nsentem uma terrível letargia!$Os atributos base deles foram reduzidas em {{reductionValue}}!$Seus outros Pokémon, no entanto, sentem um vigor incrível!\nOs atributos base deles aumentaram em {{increaseValue}}!" + }, + "2": { + "label": "Batalhar com o {{shuckleName}}", + "tooltip": "(-) Batalha Difícil\n(+) Recompensas Especiais", + "selected": "Enfurecido, o {{shuckleName}} bebe um pouco do seu suco e ataca!", + "stat_boost": "O suco do {{shuckleName}} aumenta suas estatísticas!" + } + }, + "outro": "Que reviravolta bizarra de eventos." +} diff --git a/src/locales/pt_BR/mystery-encounters/the-winstrate-challenge-dialogue.json b/src/locales/pt_BR/mystery-encounters/the-winstrate-challenge-dialogue.json new file mode 100644 index 00000000000..54a486be533 --- /dev/null +++ b/src/locales/pt_BR/mystery-encounters/the-winstrate-challenge-dialogue.json @@ -0,0 +1,22 @@ +{ + "intro": "É uma família parada do lado de fora da casa deles!", + "speaker": "Os Winstrates", + "intro_dialogue": "Nós somos os Winstrates!$Que tal enfrentar nossa família em uma série de batalhas Pokémon?", + "title": "O Desafio Winstrate", + "description": "Os Winstrates são uma família de 5 treinadores, e eles querem batalhar! Se você derrotar todos eles em sequência, receberá um grande prêmio. Mas será que você aguenta o desafio?", + "query": "O que você vai fazer?", + "option": { + "1": { + "label": "Aceitar o Desafio", + "tooltip": "(-) Batalha Brutal\n(+) Recompensa Especial de Item", + "selected": "Que comece o desafio!" + }, + "2": { + "label": "Recusar o Desafio", + "tooltip": "(+) Curar Todo o Time\n(+) Ganhar um Doce Raro", + "selected": "Que pena. Diga, seu time parece exausto, por que não fica um pouco e descansa?" + } + }, + "victory": "Parabéns por vencer nosso desafio!$Primeiro de tudo, queremos te dar este Voucher.", + "victory_2": "Além disso, nossa família usa este Bracelete Macho para fortalecer\nnossos Pokémon mais efetivamente durante o treinamento.$Você pode não precisar, já que derrotou todos nós, mas esperamos que aceite assim mesmo!" +} diff --git a/src/locales/pt_BR/mystery-encounters/training-session-dialogue.json b/src/locales/pt_BR/mystery-encounters/training-session-dialogue.json new file mode 100644 index 00000000000..6bb41058e01 --- /dev/null +++ b/src/locales/pt_BR/mystery-encounters/training-session-dialogue.json @@ -0,0 +1,33 @@ +{ + "intro": "Você encontrou algumas\nferramentas e suprimentos de treinamento.", + "title": "Sessão de Treinamento", + "description": "Esses suprimentos parecem que poderiam ser usados para treinar um membro do seu time! Há algumas maneiras de treinar seu Pokémon, batalhando contra ele com o resto do seu time.", + "query": "Como você deve treinar?", + "invalid_selection": "O Pokémon precisa estar saudável o suficiente.", + "option": { + "1": { + "label": "Treinamento Leve", + "tooltip": "(-) Batalha Leve\n(+) Melhorar 2 IVs Aleatórios do Pokémon", + "finished": "{{selectedPokemon}} retorna, sentindo-se\ncansado, mas realizado!$Seus IVs de {{stat1}} e {{stat2}} foram melhorados!" + }, + "2": { + "label": "Treinamento Moderado", + "tooltip": "(-) Batalha Moderada\n(+) Mudar a Natureza do Pokémon", + "select_prompt": "Selecione uma nova natureza\npara treinar seu Pokémon.", + "finished": "{{selectedPokemon}} retorna, sentindo-se\ncansado, mas realizado!$Sua natureza foi alterada para {{nature}}!" + }, + "3": { + "label": "Treinamento Intenso", + "tooltip": "(-) Batalha Rigorosa\n(+) Mudar a Habilidade do Pokémon", + "select_prompt": "Selecione uma nova habilidade\npara treinar seu Pokémon.", + "finished": "{{selectedPokemon}} retorna, sentindo-se\ncansado, mas realizado!$Sua habilidade foi alterada para {{ability}}!" + }, + "4": { + "label": "Sair", + "tooltip": "(-) Sem Recompensas", + "selected": "Você não tem tempo para treinar.\nHora de seguir em frente." + }, + "selected": "{{selectedPokemon}} atravessa\na clareira para te enfrentar..." + }, + "outro": "Essa foi uma sessão de treinamento bem-sucedida!" +} diff --git a/src/locales/pt_BR/mystery-encounters/trash-to-treasure-dialogue.json b/src/locales/pt_BR/mystery-encounters/trash-to-treasure-dialogue.json new file mode 100644 index 00000000000..0af71ddf6ff --- /dev/null +++ b/src/locales/pt_BR/mystery-encounters/trash-to-treasure-dialogue.json @@ -0,0 +1,19 @@ +{ + "intro": "É uma pilha enorme de lixo!\nDe onde isso veio?", + "title": "Do Lixo ao Luxo", + "description": "A pilha de lixo se ergue sobre você, e você pode ver alguns itens de valor enterrados no meio dos detritos. Você tem certeza de que quer se cobrir de sujeira para pegá-los?", + "query": "O que você vai fazer?", + "option": { + "1": { + "label": "Cavar em Busca de Valiosos", + "tooltip": "(-) Perder Itens de Cura nas Lojas\n(+) Ganhar Itens Incríveis", + "selected": "Você vasculha a pilha de lixo, ficando preso na sujeira.$Não há como os lojistas respeitáveis\nvenderem algo para você nesse estado imundo!$Você terá que se virar sem itens de cura nas lojas.$No entanto, você encontrou alguns itens incríveis no lixo!" + }, + "2": { + "label": "Investigar Mais", + "tooltip": "(?) Encontrar a Fonte do Lixo", + "selected": "Você vagueia ao redor da pilha, procurando qualquer indicação de como isso apareceu aqui...", + "selected_2": "De repente, o lixo se move! Não era apenas lixo, era um Pokémon!" + } + } +} diff --git a/src/locales/pt_BR/mystery-encounters/uncommon-breed-dialogue.json b/src/locales/pt_BR/mystery-encounters/uncommon-breed-dialogue.json new file mode 100644 index 00000000000..7d9b07ae99d --- /dev/null +++ b/src/locales/pt_BR/mystery-encounters/uncommon-breed-dialogue.json @@ -0,0 +1,26 @@ +{ + "intro": "Esse não é um Pokémon comum!", + "title": "Raça Incomum", + "description": "O {{enemyPokemon}} parece especial comparado a outros de sua espécie. @[TOOLTIP_TITLE]{Talvez ele conheça um movimento especial?} Você poderia batalhar e capturá-lo diretamente, mas também pode haver uma maneira de fazer amizade com ele.", + "query": "O que você vai fazer?", + "option": { + "1": { + "label": "Batalhar com o Pokémon", + "tooltip": "(-) Batalha Difícil\n(+) Oponente Forte Capturável", + "selected": "Você se aproxima do\n{{enemyPokemon}} sem medo.", + "stat_boost": "As habilidades elevadas do {{enemyPokemon}} aumentam seus atributos!" + }, + "2": { + "label": "Dar Comida", + "disabled_tooltip": "Você precisa de 4 itens de fruta para escolher isso", + "tooltip": "(-) Dar 4 Frutas\n(+) O {{enemyPokemon}} Gosta de Você", + "selected": "Você joga as frutas para o {{enemyPokemon}}!$Ele as come feliz!$O {{enemyPokemon}} quer se juntar ao seu time!" + }, + "3": { + "label": "Fazer Amizade", + "disabled_tooltip": "Seus Pokémon precisam conhecer certos movimentos para escolher isso", + "tooltip": "(+) {{option3PrimaryName}} usa {{option3PrimaryMove}}\n(+) O {{enemyPokemon}} Gosta de Você", + "selected": "Seu {{option3PrimaryName}} usa {{option3PrimaryMove}} para encantar o {{enemyPokemon}}!$O {{enemyPokemon}} quer se juntar ao seu time!" + } + } +} diff --git a/src/locales/pt_BR/mystery-encounters/weird-dream-dialogue.json b/src/locales/pt_BR/mystery-encounters/weird-dream-dialogue.json new file mode 100644 index 00000000000..1806e1fd04f --- /dev/null +++ b/src/locales/pt_BR/mystery-encounters/weird-dream-dialogue.json @@ -0,0 +1,22 @@ +{ + "intro": "Uma mulher sombria bloqueia seu caminho.\nAlgo nela é perturbador...", + "speaker": "Mulher", + "intro_dialogue": "Eu vi seu futuro, seu passado...$Criança, você os vê também?", + "title": "???", + "description": "As palavras da mulher ecoam na sua cabeça. Não era apenas uma única voz, mas uma vasta multidão, de todas as linhas do tempo e realidades. Você começa a sentir tontura, a pergunta permanece em sua mente...\n\n@[TOOLTIP_TITLE]{\"Eu vi seu futuro, seu passado... Criança, você os vê também?\"}", + "query": "O que você vai fazer?", + "option": { + "1": { + "label": "\"Eu os Vejo\"", + "tooltip": "@[SUMMARY_GREEN]{(?) Afeta seus Pokémon}", + "selected": "A mão dela se estende para te tocar,\ne tudo fica escuro.$Então...@d{64} Você vê tudo.\nTodas as linhas do tempo, todos os seus eus diferentes,\n passado e futuro.$Tudo o que te formou,\ntudo o que você se tornará...@d{64}", + "cutscene": "Você vê seus Pokémon,@d{32} convergindo de\ntodas as realidades para se tornarem algo novo...@d{64}", + "dream_complete": "Quando você desperta, a mulher - era uma mulher ou um fantasma? - se foi...$.@d{32}.@d{32}.@d{32}$Sua equipe de Pokémon mudou...\nOu é a mesma equipe que você sempre teve?" + }, + "2": { + "label": "Sair Rapidamente", + "tooltip": "(-) Afeta seus Pokémon", + "selected": "Você arranca sua mente de um aperto entorpecente e sai apressadamente.$Quando finalmente para para se recompor, você verifica os Pokémon em sua equipe.$Por algum motivo, todos os níveis deles diminuíram!" + } + } +} diff --git a/src/locales/pt_BR/nature.json b/src/locales/pt_BR/nature.json index 5678c74061c..11be27d6f53 100644 --- a/src/locales/pt_BR/nature.json +++ b/src/locales/pt_BR/nature.json @@ -24,4 +24,4 @@ "Sassy": "Atrevida", "Careful": "Cuidadosa", "Quirky": "Peculiar" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/party-ui-handler.json b/src/locales/pt_BR/party-ui-handler.json index 435bc916ac6..ef09e09fb2b 100644 --- a/src/locales/pt_BR/party-ui-handler.json +++ b/src/locales/pt_BR/party-ui-handler.json @@ -15,6 +15,7 @@ "UNPAUSE_EVOLUTION": "Ativar Evolução", "REVIVE": "Reanimar", "RENAME": "Renomear", + "SELECT": "Select", "choosePokemon": "Escolha um Pokémon.", "doWhatWithThisPokemon": "O que você deseja fazer?", "noEnergy": "{{pokemonName}} não pode\nmais batalhar!", @@ -44,4 +45,4 @@ "untilWeMeetAgain": "Até nos encontrarmos novamente, {{pokemonName}}!", "sayonara": "Sayonara, {{pokemonName}}!", "smellYaLater": "Te vejo depois, {{pokemonName}}!" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/pokeball.json b/src/locales/pt_BR/pokeball.json index 3a059654bb3..5f1dff974ec 100644 --- a/src/locales/pt_BR/pokeball.json +++ b/src/locales/pt_BR/pokeball.json @@ -5,4 +5,4 @@ "rogueBall": "Bola Rogue", "masterBall": "Bola Mestra", "luxuryBall": "Bola Luxo" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/pokemon-form-battle.json b/src/locales/pt_BR/pokemon-form-battle.json index 6ea7947fb66..50fbeeef29e 100644 --- a/src/locales/pt_BR/pokemon-form-battle.json +++ b/src/locales/pt_BR/pokemon-form-battle.json @@ -11,4 +11,4 @@ "revertChange": "{{pokemonName}} voltou\npara sua forma original!", "formChange": "{{preName}} mudou de forma!", "disguiseChange": "O seu disfarce serviu-lhe de isca!" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/pokemon-form.json b/src/locales/pt_BR/pokemon-form.json index aa8f32a5d36..416f09c97bf 100644 --- a/src/locales/pt_BR/pokemon-form.json +++ b/src/locales/pt_BR/pokemon-form.json @@ -1,4 +1,5 @@ { + "pikachu": "Normal", "pikachuCosplay": "Cosplay", "pikachuCoolCosplay": "Cosplay Legal", "pikachuBeautyCosplay": "Cosplay Bonito", @@ -6,7 +7,9 @@ "pikachuSmartCosplay": "Cosplay Inteligente", "pikachuToughCosplay": "Cosplay Forte", "pikachuPartner": "Parceiro", + "eevee": "Normal", "eeveePartner": "Parceiro", + "pichu": "Normal", "pichuSpiky": "Orelha Espetada", "unownA": "A", "unownB": "B", @@ -36,36 +39,65 @@ "unownZ": "Z", "unownExclamation": "!", "unownQuestion": "?", + "castform": "Normal", "castformSunny": "Ensolarado", "castformRainy": "Chuvoso", "castformSnowy": "Nevado", "deoxysNormal": "Normal", + "deoxysAttack": "Ataque", + "deoxysDefense": "Defesa", + "deoxysSpeed": "Velocidade", "burmyPlant": "Vegetal", "burmySandy": "Arenoso", "burmyTrash": "Lixo", + "cherubiOvercast": "Nublado", + "cherubiSunshine": "Solar", "shellosEast": "Leste", "shellosWest": "Oeste", + "rotom": "Normal", "rotomHeat": "Calor", "rotomWash": "Lavagem", "rotomFrost": "Congelante", "rotomFan": "Ventilador", "rotomMow": "Corte", + "dialga": "Normal", + "dialgaOrigin": "Origem", + "palkia": "Normal", + "palkiaOrigin": "Origem", "giratinaAltered": "Alterado", + "giratinaOrigin": "Origem", "shayminLand": "Terrestre", + "shayminSky": "Céu", "basculinRedStriped": "Listras Vermelhas", "basculinBlueStriped": "Listras Azuis", "basculinWhiteStriped": "Listras Brancas", + "darumaka": "Padrão", + "darumakaZen": "Zen", "deerlingSpring": "Primavera", "deerlingSummer": "Verão", "deerlingAutumn": "Outono", "deerlingWinter": "Inverno", "tornadusIncarnate": "Materializado", + "tornadusTherian": "Therian", "thundurusIncarnate": "Materializado", + "thundurusTherian": "Therian", "landorusIncarnate": "Materializado", + "landorusTherian": "Therian", + "kyurem": "Normal", + "kyuremBlack": "Preto", + "kyuremWhite": "Branco", "keldeoOrdinary": "Comum", + "keldeoResolute": "Resoluto", "meloettaAria": "Ária", "meloettaPirouette": "Pirueta", + "genesect": "Normal", + "genesectShock": "Disco Elétrico", + "genesectBurn": "Disco Incendiante", + "genesectChill": "Disco Congelante", + "genesectDouse": "Disco Hídrico", + "froakie": "Normal", "froakieBattleBond": "Vínculo de Batalha", + "froakieAsh": "Ash", "scatterbugMeadow": "Prado", "scatterbugIcySnow": "Neve Congelada", "scatterbugPolar": "Polar", @@ -91,6 +123,7 @@ "flabebeOrange": "Laranja", "flabebeBlue": "Azul", "flabebeWhite": "Branca", + "furfrou": "Selvagem", "furfrouHeart": "Coração", "furfrouStar": "Estrela", "furfrouDiamond": "Diamante", @@ -100,6 +133,11 @@ "furfrouLaReine": "Aristocrático", "furfrouKabuki": "Kabuki", "furfrouPharaoh": "Faraó", + "espurrMale": "Macho", + "espurrFemale": "Fêmea", + "honedgeShiled": "Escudo", + "honedgeBlade": "Lâmina", + "pumpkaboo": "Normal", "pumpkabooSmall": "Pequeno", "pumpkabooLarge": "Grande", "pumpkabooSuper": "Extragrande", @@ -110,11 +148,37 @@ "zygarde50Pc": "Forma 50% Agrupada", "zygarde10Pc": "Forma 10% Agrupada", "zygardeComplete": "Forma Completa", + "hoopa": "Contido", + "hoopaUnbound": "Libertado", "oricorioBaile": "Flamenco", "oricorioPompom": "Pompom", "oricorioPau": "Hula", "oricorioSensu": "Leque", + "rockruff": "Normal", "rockruffOwnTempo": "Próprio Tempo", + "rockruffMidday": "Diurno", + "rockruffMidnight": "Noturno", + "rockruffDusk": "Crepúsculo", + "wishiwashi": "Individual", + "wishiwashiSchool": "Cardume", + "typeNullNormal": "Tipo: Normal", + "typeNullFighting": "Tipo: Lutador", + "typeNullFlying": "Tipo: Voador", + "typeNullPoison": "Tipo: Veneno", + "typeNullGround": "Tipo: Terra", + "typeNullRock": "Tipo: Pedra", + "typeNullBug": "Tipo: Inseto", + "typeNullGhost": "Tipo: Fantasma", + "typeNullSteel": "Tipo: Aço", + "typeNullFire": "Tipo: Fogo", + "typeNullWater": "Tipo: Água", + "typeNullGrass": "Tipo: Grama", + "typeNullElectric": "Tipo: Elétrico", + "typeNullPsychic": "Tipo: Psíquico", + "typeNullIce": "Tipo: Gelo", + "typeNullDragon": "Tipo: Dragão", + "typeNullDark": "Tipo: Sombrio", + "typeNullFairy": "Tipo: Fada", "miniorRedMeteor": "Meteoro Vermelho", "miniorOrangeMeteor": "Meteoro Laranja", "miniorYellowMeteor": "Meteoro Amarelo", @@ -131,25 +195,66 @@ "miniorViolet": "Violeta", "mimikyuDisguised": "Disfarçado", "mimikyuBusted": "Descoberto", + "necrozma": "Normal", + "necrozmaDuskMane": "Juba Crepúsculo", + "necrozmaDawnWings": "Asas Alvorada", + "necrozmaUltra": "Ultra", + "magearna": "Normal", "magearnaOriginal": "Original", + "marshadow": "Normal", "marshadowZenith": "Zênite", + "cramorant": "Normal", + "cramorantGulping": "Engolidor", + "cramorantGorging": "Devorador", + "toxelAmped": "Agudo", + "toxelLowkey": "Grave", "sinisteaPhony": "Falsificado", "sinisteaAntique": "Autêntico", + "milceryVanillaCream": "Creme de Baunilha", + "milceryRubyCream": "Creme Rubi", + "milceryMatchaCream": "Creme de Chá Verde", + "milceryMintCream": "Creme de Menta", + "milceryLemonCream": "Creme de Lima", + "milcerySaltedCream": "Creme Salgado", + "milceryRubySwirl": "Mistura Rubi", + "milceryCaramelSwirl": "Mistura de Caramelo", + "milceryRainbowSwirl": "Mistura Tricolor", + "eiscue": "Cara de Gelo", "eiscueNoIce": "Descongelado", "indeedeeMale": "Macho", "indeedeeFemale": "Fêmea", "morpekoFullBelly": "Saciado", + "morpekoHangry": "Voraz", "zacianHeroOfManyBattles": "Herói Veterano", + "zacianCrowned": "Coroado", "zamazentaHeroOfManyBattles": "Herói Veterano", + "zamazentaCrowned": "Coroado", + "kubfuSingleStrike": "Golpe Decisivo", + "kubfuRapidStrike": "Golpe Fluido", + "zarude": "Normal", "zarudeDada": "Papa", + "calyrex": "Normal", + "calyrexIce": "Cavaleiro Glacial", + "calyrexShadow": "Cavaleiro Espectral", + "basculinMale": "Macho", + "basculinFemale": "Fêmea", "enamorusIncarnate": "Materializado", + "enamorusTherian": "Therian", + "lechonkMale": "Macho", + "lechonkFemale": "Fêmea", + "tandemausFour": "Família de Quatro", + "tandemausThree": "Família de Três", "squawkabillyGreenPlumage": "Plumas Verdes", "squawkabillyBluePlumage": "Plumas Azuis", "squawkabillyYellowPlumage": "Plumas Amarelas", "squawkabillyWhitePlumage": "Plumas Brancas", + "finizenZero": "Ingênuo", + "finizenHero": "Heroico", "tatsugiriCurly": "Curvado", "tatsugiriDroopy": "Caído", "tatsugiriStretchy": "Reto", + "dunsparceTwo": "Duplo", + "dunsparceThree": "Triplo", "gimmighoulChest": "Baú", "gimmighoulRoaming": "Perambulante", "koraidonApexBuild": "Forma Plena", @@ -164,6 +269,21 @@ "miraidonGlideMode": "Modo Aéreo", "poltchageistCounterfeit": "Imitação", "poltchageistArtisan": "Artesão", + "poltchageistUnremarkable": "Medíocre", + "poltchageistMasterpiece": "Excepcional", + "ogerponTealMask": "Máscara Turquesa", + "ogerponTealMaskTera": "Máscara Turquesa Terastalizada", + "ogerponWellspringMask": "Máscara Nascente", + "ogerponWellspringMaskTera": "Máscara Nascente Terastalizada", + "ogerponHearthflameMask": "Máscara Fornalha", + "ogerponHearthflameMaskTera": "Máscara Fornalha Terastalizada", + "ogerponCornerstoneMask": "Máscara Alicerce", + "ogerponCornerstoneMaskTera": "Máscara Alicerce Terastalizada", + "terpagos": "Normal", + "terpagosTerastal": "Teracristal", + "terpagosStellar": "Astral", + "galarDarumaka": "Padrão", + "galarDarumakaZen": "Zen", "paldeaTaurosCombat": "Combate", "paldeaTaurosBlaze": "Chamas", "paldeaTaurosAqua": "Aquático" diff --git a/src/locales/pt_BR/pokemon-info-container.json b/src/locales/pt_BR/pokemon-info-container.json index dcf1fc4e0b5..3ba3312a401 100644 --- a/src/locales/pt_BR/pokemon-info-container.json +++ b/src/locales/pt_BR/pokemon-info-container.json @@ -4,4 +4,4 @@ "ability": "Habilidade:", "nature": "Natureza:", "form": "Forma:" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/pokemon.json b/src/locales/pt_BR/pokemon.json index f780d2accbd..f50b89c4f70 100644 --- a/src/locales/pt_BR/pokemon.json +++ b/src/locales/pt_BR/pokemon.json @@ -1081,4 +1081,4 @@ "paldea_tauros": "Tauros", "paldea_wooper": "Wooper", "bloodmoon_ursaluna": "Ursaluna" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/run-history.json b/src/locales/pt_BR/run-history.json index 74cc2c35d28..a615b598bcf 100644 --- a/src/locales/pt_BR/run-history.json +++ b/src/locales/pt_BR/run-history.json @@ -34,4 +34,4 @@ "hallofFameText_female": "Bem-vinda ao Hall da Fama!", "viewHallOfFame": "Veja o Hall da Fama!", "viewEndingSplash": "Veja a arte final!" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/save-slot-select-ui-handler.json b/src/locales/pt_BR/save-slot-select-ui-handler.json index 31fe28de691..60ea7b073e9 100644 --- a/src/locales/pt_BR/save-slot-select-ui-handler.json +++ b/src/locales/pt_BR/save-slot-select-ui-handler.json @@ -4,4 +4,4 @@ "wave": "Onda", "lv": "Nv", "empty": "Vazio" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/settings.json b/src/locales/pt_BR/settings.json index 74f3918bed8..6c4eae23a82 100644 --- a/src/locales/pt_BR/settings.json +++ b/src/locales/pt_BR/settings.json @@ -104,4 +104,4 @@ "reroll": "Atualizar", "shop": "Loja", "checkTeam": "Checar Time" -} +} \ 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 237b0f21202..174dc5e4092 100644 --- a/src/locales/pt_BR/splash-messages.json +++ b/src/locales/pt_BR/splash-messages.json @@ -32,5 +32,5 @@ "alsoTryRadicalRed": "Também Jogue Radical Red!", "eeveeExpo": "Eevee Expo!", "ynoproject": "YNOproject!", - "breedersInSpace": "Criadores Pokémon no Espaço!" -} \ No newline at end of file + "breedersInSpace": "Criadores de Pokémon no Espaço!" +} diff --git a/src/locales/pt_BR/starter-select-ui-handler.json b/src/locales/pt_BR/starter-select-ui-handler.json index 1d83e43f12c..8de6c8bcae4 100644 --- a/src/locales/pt_BR/starter-select-ui-handler.json +++ b/src/locales/pt_BR/starter-select-ui-handler.json @@ -42,4 +42,4 @@ "locked": "Bloqueada", "disabled": "Desativada", "uncaught": "Não capturado" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/status-effect.json b/src/locales/pt_BR/status-effect.json index 5a851a0bdeb..9b33b9fa8f7 100644 --- a/src/locales/pt_BR/status-effect.json +++ b/src/locales/pt_BR/status-effect.json @@ -62,4 +62,4 @@ "overlap": "{{pokemonNameWithAffix}} já\nestá queimado!", "heal": "{{pokemonNameWithAffix}} foi\ncurado de sua queimadura!" } -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/terrain.json b/src/locales/pt_BR/terrain.json index 73df2b441ac..a672c58ca82 100644 --- a/src/locales/pt_BR/terrain.json +++ b/src/locales/pt_BR/terrain.json @@ -13,4 +13,4 @@ "psychicStartMessage": "O campo de batalha ficou esquisito!", "psychicClearMessage": "A esquisitice sumiu do campo de batalha!", "defaultBlockMessage": "{{pokemonNameWithAffix}} está protegido pelo Terreno {{terrainName}}!" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/trainer-classes.json b/src/locales/pt_BR/trainer-classes.json index 482265d00c6..e5d1e1bb4b1 100644 --- a/src/locales/pt_BR/trainer-classes.json +++ b/src/locales/pt_BR/trainer-classes.json @@ -126,6 +126,8 @@ "skull_grunts": "Capangas da Equipe Skull", "macro_grunt": "Treinador da Macro Cosmos", "macro_grunt_female": "Treinadora da Macro Cosmos", - "macro_grunts": "Treinadores da Macro Cosmos" - + "macro_grunts": "Treinadores da Macro Cosmos", + "star_grunt": "Capanga da Equipe Estrela", + "star_grunt_female": "Capanga da Equipe Estrela", + "star_grunts": "Capangas da Equipe Estrela" } diff --git a/src/locales/pt_BR/trainer-names.json b/src/locales/pt_BR/trainer-names.json index 5500e2ddb46..deffc346e03 100644 --- a/src/locales/pt_BR/trainer-names.json +++ b/src/locales/pt_BR/trainer-names.json @@ -141,6 +141,12 @@ "faba": "Faba", "plumeria": "Plumeria", "oleana": "Oleana", + "giacomo": "Giacomo", + "mela": "Mela", + "atticus": "Atticus", + "ortega": "Ortega", + "eri": "Eri", + "maxie": "Maxie", "archie": "Archie", "cyrus": "Cyrus", @@ -149,6 +155,8 @@ "lusamine": "Lusamine", "guzma": "Guzma", "rose": "Rose", + "cassiopeia": "Penny", + "blue_red_double": "Blue & Red", "red_blue_double": "Red & Blue", "tate_liza_double": "Tate & Liza", @@ -158,5 +166,18 @@ "alder_iris_double": "Alder & Iris", "iris_alder_double": "Iris & Alder", "marnie_piers_double": "Marnie & Piers", - "piers_marnie_double": "Piers & Marnie" + "piers_marnie_double": "Piers & Marnie", + + "buck": "Buck", + "cheryl": "Cheryl", + "marley": "Marley", + "mira": "Mira", + "riley": "Riley", + "victor": "Victor", + "victoria": "Victoria", + "vivi": "Vivi", + "vicky": "Vicky", + "vito": "Vito", + "bug_type_superfan": "Superfã de Insetos", + "expert_pokemon_breeder": "Expert Pokémon Breeder" } diff --git a/src/locales/pt_BR/trainer-titles.json b/src/locales/pt_BR/trainer-titles.json index 701c2e143fa..0bd03901c2b 100644 --- a/src/locales/pt_BR/trainer-titles.json +++ b/src/locales/pt_BR/trainer-titles.json @@ -19,6 +19,7 @@ "aether_boss": "Presidente Aether", "skull_boss": "Chefe da Equipe Skull", "macro_boss": "Presidente da Macro Cosmos", + "star_boss": "Líder da Equipe Estrela", "rocket_admin": "Admin da Equipe Rocket", "rocket_admin_female": "Admin da Equipe Rocket", @@ -34,5 +35,8 @@ "flare_admin_female": "Admin da Equipe Flare", "aether_admin": "Admin da Fundação Aether", "skull_admin": "Admin da Equipe Skull", - "macro_admin": "Macro Cosmos" + "macro_admin": "Macro Cosmos", + "star_admin": "Chefe de Esquadrão da Equipe Estrela", + + "the_winstrates": "Os Winstrates'" } diff --git a/src/locales/pt_BR/tutorial.json b/src/locales/pt_BR/tutorial.json index 92ea0dd080f..09199a9e31c 100644 --- a/src/locales/pt_BR/tutorial.json +++ b/src/locales/pt_BR/tutorial.json @@ -1,7 +1,7 @@ { "intro": "Bem-vindo ao PokéRogue!\n$Este é um fangame Pokémon focado em batalhas com elementos roguelite.\n$Este jogo não é monetizado e não reivindicamos propriedade do Pokémon nem dos ativos protegidos$por direitos autorais usados.\n$O jogo é um trabalho em andamento,\nmas totalmente jogável.\n$Para relatórios de bugs, use a comunidade do Discord.\n$Se o jogo rodar lentamente, certifique-se de que\na 'Aceleração de Hardware' esteja ativada$nas configurações do seu navegador.", "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!", + "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!", "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.", diff --git a/src/locales/pt_BR/voucher.json b/src/locales/pt_BR/voucher.json index c33dfa20e0f..7430fecaece 100644 --- a/src/locales/pt_BR/voucher.json +++ b/src/locales/pt_BR/voucher.json @@ -6,4 +6,4 @@ "eggVoucherGold": "Voucher de Ovo Dourado", "locked": "Bloqueado", "defeatTrainer": "Derrote {{trainerName}}" -} \ No newline at end of file +} diff --git a/src/locales/pt_BR/weather.json b/src/locales/pt_BR/weather.json index 54b929da0b9..eb3b3a74005 100644 --- a/src/locales/pt_BR/weather.json +++ b/src/locales/pt_BR/weather.json @@ -29,4 +29,4 @@ "strongWindsLapseMessage": "Os ventos fortes continuam.", "strongWindsEffectMessage": "A corrente de ar misteriosa enfraqueceu o ataque!", "strongWindsClearMessage": "Os ventos fortes diminuíram." -} \ No newline at end of file +} diff --git a/src/locales/zh_CN/ability.json b/src/locales/zh_CN/ability.json index 31e3c08161d..0a81a9c6ad2 100644 --- a/src/locales/zh_CN/ability.json +++ b/src/locales/zh_CN/ability.json @@ -1237,6 +1237,6 @@ }, "poisonPuppeteer": { "name": "毒傀儡", - "description": "因桃歹郎的招式而陷入中毒状态的\n对手同时也会陷入混乱状态。" + "description": "因此宝可梦的招式而陷入中毒状态的对手\n同时也会陷入混乱状态。" } } diff --git a/src/locales/zh_CN/achv.json b/src/locales/zh_CN/achv.json index b93345d876b..f5e77dac140 100644 --- a/src/locales/zh_CN/achv.json +++ b/src/locales/zh_CN/achv.json @@ -272,5 +272,9 @@ "INVERSE_BATTLE": { "name": "镜子子镜", "description": "完成逆转之战挑战\n战挑战之转逆成完" + }, + "BREEDERS_IN_SPACE": { + "name": "Breeders in Space!", + "description": "Beat the Expert Pokémon Breeder in the Space Biome." } } diff --git a/src/locales/zh_CN/battle.json b/src/locales/zh_CN/battle.json index ccf0e560805..355c253676d 100644 --- a/src/locales/zh_CN/battle.json +++ b/src/locales/zh_CN/battle.json @@ -15,6 +15,10 @@ "moneyPickedUp": "捡到了₽{{moneyAmount}}!", "pokemonCaught": "{{pokemonName}}被抓住了!", "addedAsAStarter": "增加了{{pokemonName}}作为\n一个新的基础宝可梦!", + "pokemonObtained": "你获得了{{pokemonName}}!", + "pokemonBrokeFree": "噢不!\n宝可梦挣脱了!", + "pokemonFled": "野生的{{pokemonName}}逃走了!", + "playerFled": "你从{{pokemonName}}那里逃走了!", "partyFull": "你的队伍已满员。是否放生其他宝可梦\n为{{pokemonName}}腾出空间?", "pokemon": "宝可梦", "sendOutPokemon": "上吧!\n{{pokemonName}}!", @@ -49,6 +53,7 @@ "noPokeballTrainer": "你不能捕捉其他训练家的宝可梦!", "noPokeballMulti": "只能在剩下一只宝可梦时才能扔出精灵球!", "noPokeballStrong": "目标宝可梦太强了,无法捕捉!\n你需要先削弱它!", + "noPokeballMysteryEncounter": "你无法\n捕捉这只宝可梦!", "noEscapeForce": "一股无形的力量阻止你逃跑。", "noEscapeTrainer": "你不能从与训练家的战斗中逃跑!", "noEscapePokemon": "{{pokemonName}}的{{moveName}}\n阻止了你{{escapeVerb}}!", @@ -87,5 +92,6 @@ "retryBattle": "你要从对战开始时重试么?", "unlockedSomething": "{{unlockedThing}}\n已解锁。", "congratulations": "恭喜!", - "beatModeFirstTime": "{{speciesName}}首次击败了{{gameMode}}!\n你获得了{{newModifier}}!" + "beatModeFirstTime": "{{speciesName}}首次击败了{{gameMode}}!\n你获得了{{newModifier}}!", + "mysteryEncounterAppeared": "这是什么?" } diff --git a/src/locales/zh_CN/bgm-name.json b/src/locales/zh_CN/bgm-name.json index 065347e3bb6..f59a637d7d8 100644 --- a/src/locales/zh_CN/bgm-name.json +++ b/src/locales/zh_CN/bgm-name.json @@ -81,9 +81,11 @@ "battle_aether_grunt": "日月「战斗!以太基金会」", "battle_skull_grunt": "日月「战斗!骷髅队」", "battle_macro_grunt": "剑盾「战斗!马洛科蒙集团」", + "battle_star_grunt": "SV Team Star Battle", "battle_galactic_admin": "晶灿钻石·明亮珍珠「战斗!银河队干部」", "battle_skull_admin": "日月「战斗!骷髅队干部」", "battle_oleana": "剑盾「战斗!奥利薇」", + "battle_star_admin": "SV Team Star Boss", "battle_rocket_boss": "究极日月「战斗!坂木」", "battle_aqua_magma_boss": "Ω红宝石α蓝宝石「战斗!水梧桐・赤焰松」", "battle_galactic_boss": "晶灿钻石·明亮珍珠「战斗!赤日」", @@ -92,6 +94,7 @@ "battle_aether_boss": "日月「战斗!露莎米奈」", "battle_skull_boss": "日月「战斗!古兹马」", "battle_macro_boss": "剑盾「战斗!洛兹」", + "battle_star_boss": "SV Cassiopeia Battle", "abyss": "空之探险队「黑暗小丘」", "badlands": "空之探险队「枯竭之谷」", @@ -106,17 +109,17 @@ "forest": "空之探险队「黑暗森林」", "grass": "空之探险队「苹果森林」", "graveyard": "空之探险队「神秘森林」", - "ice_cave": "空之探险队「大冰山」", + "ice_cave": "Firel - -50°C", "island": "空之探险队「沿岸岩地」", "jungle": "Lmz - 丛林", "laboratory": "Firel - 研究所", - "lake": "空之探险队「水晶洞窟」", + "lake": "Lmz - Lake", "meadow": "空之探险队「天空顶端(森林)」", "metropolis": "Firel - 城市", "mountain": "空之探险队「角山」", - "plains": "空之探险队「天空顶端(草原)」", - "power_plant": "空之探险队「电气平原 深处」", - "ruins": "空之探险队「封印岩地 深处」", + "plains": "Firel - Route 888", + "power_plant": "Firel - The Klink", + "ruins": "Lmz - Ancient Ruins", "sea": "Andr06 - 海洋之秘", "seabed": "Firel - 海底", "slum": "Andr06 - 狡猾的雪吞虫", @@ -126,7 +129,7 @@ "tall_grass": "空之探险队「浓雾森林」", "temple": "空之探险队「守护洞穴」", "town": "空之探险队「随机迷宫3」", - "volcano": "空之探险队「热水洞窟」", + "volcano": "Firel - Twisturn Volcano", "wasteland": "空之探险队「梦幻高原」", "encounter_ace_trainer": "黑白 「视线!精英训练师」", "encounter_backpacker": "黑白 「视线!背包客」", @@ -144,5 +147,11 @@ "encounter_youngster": "黑白 「视线!短裤小子」", "heal": "黑白「宝可梦回复」", "menu": "空之探险队「欢迎来到宝可梦的世界」", - "title": "空之探险队「主题曲」" + "title": "空之探险队「主题曲」", + + "mystery_encounter_weird_dream": "空之探险队「时限之塔」", + "mystery_encounter_fun_and_games": "空之探险队「会长胖可丁」", + "mystery_encounter_gen_5_gts": "黑白「GTS」", + "mystery_encounter_gen_6_gts": "XY「GTS」", + "mystery_encounter_delibirdy": "Firel - 信使鸟快递!" } diff --git a/src/locales/zh_CN/config.ts b/src/locales/zh_CN/config.ts index 44a190d8c11..15a69eb481a 100644 --- a/src/locales/zh_CN/config.ts +++ b/src/locales/zh_CN/config.ts @@ -53,7 +53,49 @@ import terrain from "./terrain.json"; import modifierSelectUiHandler from "./modifier-select-ui-handler.json"; import moveTriggers from "./move-trigger.json"; import runHistory from "./run-history.json"; +import mysteryEncounterMessages from "./mystery-encounter-messages.json"; +import lostAtSea from "./mystery-encounters/lost-at-sea-dialogue.json"; +import mysteriousChest from "./mystery-encounters/mysterious-chest-dialogue.json"; +import mysteriousChallengers from "./mystery-encounters/mysterious-challengers-dialogue.json"; +import darkDeal from "./mystery-encounters/dark-deal-dialogue.json"; +import departmentStoreSale from "./mystery-encounters/department-store-sale-dialogue.json"; +import fieldTrip from "./mystery-encounters/field-trip-dialogue.json"; +import fieryFallout from "./mystery-encounters/fiery-fallout-dialogue.json"; +import fightOrFlight from "./mystery-encounters/fight-or-flight-dialogue.json"; +import safariZone from "./mystery-encounters/safari-zone-dialogue.json"; +import shadyVitaminDealer from "./mystery-encounters/shady-vitamin-dealer-dialogue.json"; +import slumberingSnorlax from "./mystery-encounters/slumbering-snorlax-dialogue.json"; +import trainingSession from "./mystery-encounters/training-session-dialogue.json"; +import theStrongStuff from "./mystery-encounters/the-strong-stuff-dialogue.json"; +import pokemonSalesman from "./mystery-encounters/the-pokemon-salesman-dialogue.json"; +import offerYouCantRefuse from "./mystery-encounters/an-offer-you-cant-refuse-dialogue.json"; +import delibirdy from "./mystery-encounters/delibirdy-dialogue.json"; +import absoluteAvarice from "./mystery-encounters/absolute-avarice-dialogue.json"; +import aTrainersTest from "./mystery-encounters/a-trainers-test-dialogue.json"; +import trashToTreasure from "./mystery-encounters/trash-to-treasure-dialogue.json"; +import berriesAbound from "./mystery-encounters/berries-abound-dialogue.json"; +import clowningAround from "./mystery-encounters/clowning-around-dialogue.json"; +import partTimer from "./mystery-encounters/part-timer-dialogue.json"; +import dancingLessons from "./mystery-encounters/dancing-lessons-dialogue.json"; +import weirdDream from "./mystery-encounters/weird-dream-dialogue.json"; +import theWinstrateChallenge from "./mystery-encounters/the-winstrate-challenge-dialogue.json"; +import teleportingHijinks from "./mystery-encounters/teleporting-hijinks-dialogue.json"; +import bugTypeSuperfan from "./mystery-encounters/bug-type-superfan-dialogue.json"; +import funAndGames from "./mystery-encounters/fun-and-games-dialogue.json"; +import uncommonBreed from "./mystery-encounters/uncommon-breed-dialogue.json"; +import globalTradeSystem from "./mystery-encounters/global-trade-system-dialogue.json"; +import expertPokemonBreeder from "./mystery-encounters/the-expert-pokemon-breeder-dialogue.json"; +/** + * Dialogue/Text token injection patterns that can be used: + * - `$` will be treated as a new line for Message and Dialogue strings. + * - `@d{}` will add a time delay to text animation for Message and Dialogue strings. + * - `@s{}` will play a specified sound effect for Message and Dialogue strings. + * - `@f{}` will fade the screen to black for the given duration, then fade back in for Message and Dialogue strings. + * - `{{}}` (MYSTERY ENCOUNTERS ONLY) will auto-inject the matching dialogue token value that is stored in {@link IMysteryEncounter.dialogueTokens}. + * - (see [i18next interpolations](https://www.i18next.com/translation-function/interpolation)) for more details. + * - `@[]{}` (STATIC TEXT ONLY, NOT USEABLE WITH {@link UI.showText()} OR {@link UI.showDialogue()}) will auto-color the given text to a specified {@link TextStyle} (e.g. `TextStyle.SUMMARY_GREEN`). + */ export const zhCnConfig = { ability, abilityTriggers, @@ -110,4 +152,40 @@ export const zhCnConfig = { modifierSelectUiHandler, moveTriggers, runHistory, + mysteryEncounter: { + // DO NOT REMOVE + "unit_test_dialogue": "{{test}}{{test}} {{test{{test}}}} {{test1}} {{test\}} {{test\\}} {{test\\\}} {test}}", + mysteriousChallengers, + mysteriousChest, + darkDeal, + fightOrFlight, + slumberingSnorlax, + trainingSession, + departmentStoreSale, + shadyVitaminDealer, + fieldTrip, + safariZone, + lostAtSea, + fieryFallout, + theStrongStuff, + pokemonSalesman, + offerYouCantRefuse, + delibirdy, + absoluteAvarice, + aTrainersTest, + trashToTreasure, + berriesAbound, + clowningAround, + partTimer, + dancingLessons, + weirdDream, + theWinstrateChallenge, + teleportingHijinks, + bugTypeSuperfan, + funAndGames, + uncommonBreed, + globalTradeSystem, + expertPokemonBreeder + }, + mysteryEncounterMessages }; diff --git a/src/locales/zh_CN/dialogue.json b/src/locales/zh_CN/dialogue.json index dd0fa3fb3cc..3e258de22f6 100644 --- a/src/locales/zh_CN/dialogue.json +++ b/src/locales/zh_CN/dialogue.json @@ -715,12 +715,16 @@ "encounter": { "1": "你的对战生涯到此为止了。", "2": "你是一名训练师吧\n你没有干涉我们工作的权力!", - "3": "我是马洛科蒙集团的,要买马洛科蒙人寿保险吗。" + "3": "我是马洛科蒙集团的,要买马洛科蒙人寿保险吗。", + "4": "I found you! In that case, time for a Pokémon battle!", + "5": "An earful from Ms. Oleana is way worse than anything you can do!" }, "victory": { "1": "除了礼貌地撤退我似乎别无选择…", "2": "没法留住我的零花钱了,我又要财政赤字了…", - "3": "没人能比马洛科蒙集团的我们工作更卷!" + "3": "没人能比马洛科蒙集团的我们工作更卷!", + "4": "I even switched up my Pokémon...", + "5": "Battles didn't work... Only thing to do now is run!" } }, "oleana": { @@ -735,6 +739,73 @@ "3": "*叹气*奥利薇累累了……" } }, + "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." + }, + "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..." + } + }, + "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!" + }, + "victory": { + "1": "Guess that's that...", + "2": "You turned my melody into a threnody..." + } + }, + "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!" + }, + "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." + } + }, + "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!" + }, + "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." + } + }, + "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!" + }, + "victory": { + "1": "Ugh! How could I LOSE! What the HECK!", + "2": "Arrrrgggh! That strength of yours is SO. NOT. FAIR." + } + }, + "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!" + }, + "victory": { + "1": "I'm so sorry, everyone...", + "2": "I gave it my all, but it wasn't enough—I wasn't enough..." + } + }, "rocket_boss_giovanni_1": { "encounter": { "1": "我不得不说,能来到这里,你的确很不简单!" @@ -922,6 +993,28 @@ "1": "你完全不理解!" } }, + "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!" + }, + "victory": { + "1": "... ... .." + }, + "defeat": { + "1": "Heh..." + } + }, + "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!" + }, + "victory": { + "1": "...It's all over now." + }, + "defeat": { + "1": "I can't fault you on your battle skills at all... Considering how the bosses fell at your hands." + } + }, "macro_boss_rose_2": { "encounter": { "1": "我致力于解决伽勒尔的能源问题\n——当然也是全世界的能源问题。\n$我的经验与成果,造就了马洛科蒙集团,证明了我的正确与成功!\n$就算输了,我也不会改变主意的……" @@ -933,6 +1026,116 @@ "1": "我承认我做的事情非常渗人,我也不指望你能理解。\n$但我必须为伽勒尔地区提供无限的能源,确保永久的繁荣。" } }, + "stat_trainer_buck": { + "encounter": { + "1": "我现在告诉你!我强的不可思议,做好准备!", + "2": "我能感受到宝可梦在球中激动地颤抖!" + }, + "victory": { + "1": "呵哈哈!\n真火热啊,你!", + "2": "呵哈哈!\n真火热啊,你!" + }, + "defeat": { + "1": "哇哦!这下没气儿了吧,我猜。", + "2": "哇哦!这下没气儿了吧,我猜。" + } + }, + "stat_trainer_cheryl": { + "encounter": { + "1": "我的宝可梦渴望着战斗。", + "2": "我应该警告你,我的神奇宝贝可能有点活泼。" + }, + "victory": { + "1": "在进攻和防守之间找到平衡……这并不容易。", + "2": "在进攻和防守之间找到平衡……这并不容易。" + }, + "defeat": { + "1": "你的宝可梦需要治疗吗?", + "2": "你的宝可梦需要治疗吗?" + } + }, + "stat_trainer_marley": { + "encounter": { + "1": "……好的。\n我会尽力的。", + "2": "……好的。\n我不会输的。" + }, + "victory": { + "1": "……噢", + "2": "……噢" + }, + "defeat": { + "1": "……再见。", + "2": "……再见。" + } + }, + "stat_trainer_mira": { + "encounter": { + "1": "你会被麦儿吓到的哦!", + "2": "麦儿不会再输了!" + }, + "victory": { + "1": "麦儿在想……她的生涯还能不能走远。", + "2": "麦儿在想……她的生涯还能不能走远。" + }, + "defeat": { + "1": "麦儿就知道自己会赢!", + "2": "麦儿就知道自己会赢!" + } + }, + "stat_trainer_riley": { + "encounter": { + "1": "战斗是我们打招呼的方式!", + "2": "我们会尽一切努力来打败你的宝可梦。" + }, + "victory": { + "1": "有时我们会战斗,有时我们会联手...$训练师之间能交流真好。", + "2": "有时我们会战斗,有时我们会联手...$训练师之间能交流真好。" + }, + "defeat": { + "1": "你表现的相当出色\n祝你下次好运。", + "2": "你表现的相当出色\n祝你下次好运。" + } + }, + "winstrates_victor": { + "encounter": { + "1": "就是这股势头!我看好你!" + }, + "victory": { + "1": "啊哈!你比我想象的还要强!" + } + }, + "winstrates_victoria": { + "encounter": { + "1": "天哪!这么年轻?$不过,能打败我的丈夫,你至少称得上是训练师。$现在轮到我上场了!" + }, + "victory": { + "1": "呃啊!你这得多强啊!" + } + }, + "winstrates_vivi": { + "encounter": { + "1": "你比妈妈还厉害?$但是,我也很厉害哦!\n真的!真的哦!" + }, + "victory": { + "1": "啊?我真的输了吗?\n呜呜呜……奶奶!" + } + }, + "winstrates_vicky": { + "encounter": { + "1": "你怎么敢让我的宝贝孙女哭!$看来我得给你一个教训。\n准备好吃点苦头吧!" + }, + "victory": { + "1": "呜啊!这么强!\n我的孙女没在骗人。" + } + }, + "winstrates_vito": { + "encounter": { + "1": "我和我的每位家人都一起训练!$我不会输给任何人了!" + }, + "victory": { + "1": "我比家里的每个人都优秀。\n我从来没有输过……" + } + }, "brock": { "encounter": { "1": "我对岩石属性宝可梦的专精会击败你!来吧!", diff --git a/src/locales/zh_CN/egg.json b/src/locales/zh_CN/egg.json index 5a299368873..f2b95bd40cb 100644 --- a/src/locales/zh_CN/egg.json +++ b/src/locales/zh_CN/egg.json @@ -11,6 +11,7 @@ "gachaTypeLegendary": "传说概率上升", "gachaTypeMove": "稀有概率上升", "gachaTypeShiny": "闪光概率上升", + "eventType": "Mystery Event", "selectMachine": "选择一个机器。", "notEnoughVouchers": "你没有足够的兑换券!", "tooManyEggs": "你的蛋太多啦!", @@ -23,4 +24,4 @@ "moveUPGacha": "蛋招式UP!", "shinyUPGacha": "闪光UP!", "legendaryUPGacha": "UP!" -} \ No newline at end of file +} diff --git a/src/locales/zh_CN/modifier-select-ui-handler.json b/src/locales/zh_CN/modifier-select-ui-handler.json index b3475737dfd..24b6e205f10 100644 --- a/src/locales/zh_CN/modifier-select-ui-handler.json +++ b/src/locales/zh_CN/modifier-select-ui-handler.json @@ -8,5 +8,7 @@ "lockRaritiesDesc": "在刷新时锁定道具稀有度(影响刷新费用)", "checkTeamDesc": "检查队伍或使用形态改变道具", "rerollCost": "₽{{formattedMoney}}", - "itemCost": "₽{{formattedMoney}}" -} \ No newline at end of file + "itemCost": "₽{{formattedMoney}}", + "continueNextWaveButton": "Continue", + "continueNextWaveDescription": "Continue to the next wave" +} diff --git a/src/locales/zh_CN/modifier-type.json b/src/locales/zh_CN/modifier-type.json index 981f26a1603..61c36078369 100644 --- a/src/locales/zh_CN/modifier-type.json +++ b/src/locales/zh_CN/modifier-type.json @@ -68,6 +68,20 @@ "BaseStatBoosterModifierType": { "description": "增加10%持有者的{{stat}},\n个体值越高堆叠上限越高。" }, + "PokemonBaseStatTotalModifierType": { + "name": "Shuckle Juice", + "description": "{{increaseDecrease}} all of the holder's base stats by {{statValue}}. You were {{blessCurse}} by the Shuckle.", + "extra": { + "increase": "Increases", + "decrease": "Decreases", + "blessed": "blessed", + "cursed": "cursed" + } + }, + "PokemonBaseStatFlatModifierType": { + "name": "Old Gateau", + "description": "Increases the holder's {{stats}} base stats by {{statValue}}. Found after a strange dream." + }, "AllPokemonFullHpRestoreModifierType": { "description": "所有宝可梦完全回复HP。" }, @@ -401,7 +415,13 @@ "ENEMY_FUSED_CHANCE": { "name": "融合硬币", "description": "增加1%野生融合宝可梦出现概率。" - } + }, + + "MYSTERY_ENCOUNTER_SHUCKLE_JUICE": { "name": "Shuckle Juice" }, + "MYSTERY_ENCOUNTER_BLACK_SLUDGE": { "name": "Black Sludge", "description": "The stench is so powerful that shops will only sell you items at a steep cost increase." }, + "MYSTERY_ENCOUNTER_MACHO_BRACE": { "name": "Macho Brace", "description": "Defeating a Pokémon grants the holder a Macho Brace stack. Each stack slightly boosts stats, with an extra bonus at max stacks." }, + "MYSTERY_ENCOUNTER_OLD_GATEAU": { "name": "Old Gateau", "description": "Increases the holder's {{stats}} stats by {{statValue}}." }, + "MYSTERY_ENCOUNTER_GOLDEN_BUG_NET": { "name": "Golden Bug Net", "description": "Imbues the owner with luck to find Bug Type Pokémon more often. Has a strange heft to it." } }, "SpeciesBoosterItem": { "LIGHT_BALL": { diff --git a/src/locales/zh_CN/move-trigger.json b/src/locales/zh_CN/move-trigger.json index 436f1805c4e..60de3591915 100644 --- a/src/locales/zh_CN/move-trigger.json +++ b/src/locales/zh_CN/move-trigger.json @@ -65,6 +65,7 @@ "suppressAbilities": "{{pokemonName}}的特性\n变得无效了!", "revivalBlessing": "{{pokemonName}}复活了!", "swapArenaTags": "{{pokemonName}}\n交换了双方的场地效果!", + "chillyReception": "{{pokemonName}}\n说出了冷笑话!", "exposedMove": "{{pokemonName}}识破了\n{{targetPokemonName}}的原型!", "safeguard": "{{targetName}}\n正受到神秘之幕的保护!", "afterYou": "{{pokemonName}}\n接受了对手的好意!" diff --git a/src/locales/zh_CN/move.json b/src/locales/zh_CN/move.json index 5974271abb2..d20b09f02be 100644 --- a/src/locales/zh_CN/move.json +++ b/src/locales/zh_CN/move.json @@ -3129,7 +3129,7 @@ }, "auraWheel": { "name": "气场轮", - "effect": "用储存在颊囊里的能量进行攻击,\n并提高自己的速度。其属性会随着\n莫鲁贝可的样子而改变" + "effect": "用储存在颊囊里的能量进行攻击,\n并提高自己的速度。如果由莫鲁贝可使用,\n其属性会随着它的样子而改变" }, "breakingSwipe": { "name": "广域破坏", diff --git a/src/locales/zh_CN/mystery-encounter-messages.json b/src/locales/zh_CN/mystery-encounter-messages.json new file mode 100644 index 00000000000..2d6a435adb9 --- /dev/null +++ b/src/locales/zh_CN/mystery-encounter-messages.json @@ -0,0 +1,7 @@ +{ + "paid_money": "你支付了 ₽{{amount, number}}。", + "receive_money": "你获得了 ₽{{amount, number}}!", + "affects_pokedex": "影响图鉴数据", + "cancel_option": "回到事件选项", + "view_party_button": "查看队伍" +} diff --git a/src/locales/zh_CN/mystery-encounters/a-trainers-test-dialogue.json b/src/locales/zh_CN/mystery-encounters/a-trainers-test-dialogue.json new file mode 100644 index 00000000000..c99ccba5f48 --- /dev/null +++ b/src/locales/zh_CN/mystery-encounters/a-trainers-test-dialogue.json @@ -0,0 +1,47 @@ +{ + "intro": "一个十分强大的训练家向你走来…", + "buck": { + "intro_dialogue": "哟,训练师!我叫麦可。$我有一个非常棒的提议,\n适合像你这样强大的训练师!$我随身带着两颗稀有的宝可梦蛋,\n但我想让别人来照顾一颗。$如果你能向我证明你作为训练师的实力,\n我会给你更稀有的蛋!", + "accept": "芜!!我燃起来了!", + "decline": "害,看起来你的\n队伍状态不佳。$来,让我来帮忙。" + }, + "cheryl": { + "intro_dialogue": "你好,我是芽米。$我有一个特别有趣的请求,\n因为看起来你是一位强大的训练师。$我随身带着两颗稀有的宝可梦蛋,\n但我想让别人照顾一颗。$如果你能向我证明你作为训练师的实力,\n我会给你更稀有的蛋!", + "accept": "我希望你准备好了!", + "decline": "我明白,看起来你的团队\n目前状态不佳。$来,让我来帮忙。" + }, + "marley": { + "intro_dialogue": "……@d{64} 我是米依。$我有一个提议给你...$我随身带着两颗宝可梦蛋,\n但我想让别人照顾一颗。$如果你比我强,\n我会给你更稀有的蛋。", + "accept": "……我明白了。", + "decline": "... 我明白了。$你的宝可梦看起来伤得很重...\n让我来帮忙。" + }, + "mira": { + "intro_dialogue": "嗨!我是麦儿!$麦儿有一个请求\n需要像你一样强大的训练师!$麦儿有两颗稀有的宝可梦蛋,\n但麦儿希望别人拿走一颗!$如果你向麦儿展示你的实力,\n麦儿会给你更稀有的蛋!", + "accept": "你会和麦儿对战吗?\n耶!", + "decline": "噢……不战斗?\n没关系!$来,麦尔会治疗你的宝可梦!" + }, + "riley": { + "intro_dialogue": "我是亚玄。$我有一个有点怪的提议,\n毕竟面前是像你这样的强大训练师。$我随身带着两颗稀有的宝可梦蛋,\n但我想把其中一颗送给另一位训练师。$如果你能向我证明你的实力,\n我会给你更稀有的蛋!", + "accept": "你那表情……\n我们开始吧。", + "decline": "我明白,毕竟你的队伍看起来很疲惫。$来,让我来帮你。" + }, + "title": "训练家试炼", + "description": "不管你选择什么,此训练家都会给你一个蛋。\n然而,如果你能击败他,就会获得一个更稀有的蛋。", + "query": "你要怎么做?", + "option": { + "1": { + "label": "接受挑战", + "tooltip": "(-)艰难的战斗\n(+)获得一个@[TOOLTIP_TITLE]{非常稀有的蛋}" + }, + "2": { + "label": "拒绝挑战", + "tooltip": "(+)治疗全队\n(+)获得一个@[TOOLTIP_TITLE]{蛋}" + } + }, + "eggTypes": { + "rare": "稀有的蛋", + "epic": "史诗的蛋", + "legendary": "传说的蛋" + }, + "outro": "{{statTrainerName}}给了你{{eggType}}!" +} diff --git a/src/locales/zh_CN/mystery-encounters/absolute-avarice-dialogue.json b/src/locales/zh_CN/mystery-encounters/absolute-avarice-dialogue.json new file mode 100644 index 00000000000..6637d3ff7ed --- /dev/null +++ b/src/locales/zh_CN/mystery-encounters/absolute-avarice-dialogue.json @@ -0,0 +1,25 @@ +{ + "intro": "一个{{greedentName}}埋伏了你\\n并且偷走了你队伍携带的树果!", + "title": "贪得无厌", + "description": "{{greedentName}}让你措手不及,现在你所有的树果都被夺走了!\n\n{{greedentName}}正要吃掉它们时,突然停下来饶有兴趣地看着你。", + "query": "你要怎么做?", + "option": { + "1": { + "label": "必须战斗", + "tooltip": "(-)艰难的战斗\n(+)树果宝藏的奖励", + "selected": "{{greedentName}}塞满脸颊\n并准备战斗!", + "boss_enraged": "{{greedentName}}对食物的热衷让它非常愤怒!", + "food_stash": "{{greedentName}}似乎守护着一大堆食物!$@s{item_fanfare}你队伍中的每个神奇宝贝都会获得{{foodReward}}!" + }, + "2": { + "label": "讲点道理", + "tooltip": "(+)拿回一些失去的树果", + "selected": "你的恳求引起了{{greedentName}}的共鸣。$它不会把你所有的果子都归还给你,但仍然会扔给你一些。" + }, + "3": { + "label": "让它拿吧", + "tooltip": "(-)失去所有树果\n(?){{greedentName}}会很感激你", + "selected": "{{greedentName}}一瞬间就吃掉了整个树果堆!$它拍拍肚子,\n感激地看着你。$也许你可以在冒险中喂它\n更多浆果……$@s{level_up_fanfare}{{greedentName}}想加入你的队伍!" + } + } +} 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 new file mode 100644 index 00000000000..d920e4e52d1 --- /dev/null +++ b/src/locales/zh_CN/mystery-encounters/an-offer-you-cant-refuse-dialogue.json @@ -0,0 +1,26 @@ +{ + "intro": "一名看上去就很有钱的小男孩拦住了你。", + "speaker": "富家子弟", + "intro_dialogue": "向你问好。$你的{{strongestPokemon}}看起来举世无双,我挪不开我的眼睛了!\n$我一直也想要一只那样的宝可梦!$你的报酬不会少的,\n这个老家伙也可以送给你!", + "title": "难以拒绝的买卖", + "description": "对方愿意为了你的{{strongestPokemon}}出一个@[TOOLTIP_TITLE]{闪光护符}和{{price, money}}。\n\n这交易非常值得,但是你真的舍得放弃如此强大的伙伴吗?", + "query": "你要怎么做?", + "option": { + "1": { + "label": "接受交易", + "tooltip": "(-)失去{{strongestPokemon}}\n(+)获得一个@[TOOLTIP_TITLE]{闪光护符}\n(+)获得{{price, money}}", + "selected": "太棒了!@d{32}过来吧,{{strongestPokemon}}!$现在是时候向游艇俱乐部的那帮小子炫耀一番了!$他们肯定得酸爆了!" + }, + "2": { + "label": "敲诈他", + "tooltip": "(+){{option2PrimaryName}}使用{{moveOrAbility}}\n(+)获得{{price, money}}", + "tooltip_disabled": "你的宝可梦需要具备某些特性或招式才能选择此项", + "selected": "我的天,你抢劫我。{{liepardName}},走了!$我要找律师告你!" + }, + "3": { + "label": "离开", + "tooltip": "(-)无奖励", + "selected": "真够跌份儿的……$啊,好吧。那我们回游艇吧,{{liepardName}}。" + } + } +} diff --git a/src/locales/zh_CN/mystery-encounters/berries-abound-dialogue.json b/src/locales/zh_CN/mystery-encounters/berries-abound-dialogue.json new file mode 100644 index 00000000000..9e2240e2aea --- /dev/null +++ b/src/locales/zh_CN/mystery-encounters/berries-abound-dialogue.json @@ -0,0 +1,26 @@ +{ + "intro": "宝可梦旁边\n有着巨大的树果丛!", + "title": "硕“果”累累", + "description": "似乎有强大的宝可梦守护着树果丛。\n最简单的方法是战斗,但它的实力不容小觑。\n也许一只速度很快的宝可梦可以乘机顺走一些树果?", + "query": "你要怎么做?", + "berries": "树果!!", + "option": { + "1": { + "label": "与它战斗", + "tooltip": "(-)艰难的战斗\n(+)获得树果", + "selected": "你无所畏惧地\n走向了宝可梦们。" + }, + "2": { + "label": "冲向果丛", + "tooltip": "(-){{fastestPokemon}}试试速度\n(+)获得树果", + "selected": "你的{{fastestPokemon}}冲向了果丛!$它在{{enemyPokemon}}做出反应之前成功抓住了{{numBerries}}!$你带着你的战利品迅速撤退。", + "selected_bad": "你的{{fastestPokemon}}向浆果丛奔去!$哦不!{{enemyPokemon}}速度更快,挡住了它的去路!", + "boss_enraged": "对方的{{enemyPokemon}}变得非常愤怒!" + }, + "3": { + "label": "离开", + "tooltip": "(-)无奖励", + "selected": "你让那个宝可梦留着属于它的果子\n继续上路了。" + } + } +} 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 new file mode 100644 index 00000000000..c63c74dc248 --- /dev/null +++ b/src/locales/zh_CN/mystery-encounters/bug-type-superfan-dialogue.json @@ -0,0 +1,40 @@ +{ + "intro": "一个特殊的训练家带着各种捕虫设备挡住了你的去路!", + "intro_dialogue": "嘿,训练家!我正在寻找最稀有的虫系宝可梦!\n你一定也很喜欢虫系宝可梦吧?\n大家都喜欢虫系宝可梦!", + "title": "超级虫系粉丝", + "speaker": "超级虫系粉丝", + "description": "训练家喋喋不休,根本不听你回应…\n\n似乎唯一的办法就是引起他的注意!", + "query": "你要怎么做?", + "option": { + "1": { + "label": "请求对战", + "tooltip": "(-)挑战对战\n(+)习得虫系招式", + "selected": "对战,呃?\n我的虫系宝可梦早就准备好了。" + }, + "2": { + "label": "展示虫宝可梦", + "tooltip": "(+)获得一件道具", + "disabled_tooltip": "你需要至少携带一只虫系宝可梦", + "selected": "你向训练师展示了你所有的虫系宝可梦", + "selected_0_to_1": "哈?你才有{{numBugTypes}}。$你对我来说真是浪费时间。", + "selected_2_to_3": "嘿,你有{{numBugTypes}}!\n不错。$来,这能帮你多抓点虫虫。", + "selected_4_to_5": "啥?你有{{numBugTypes}}!!\n牛啊!$你还没有达到我的水平,\n但我可以从你身上看到自己的影子!$拿着,我的小徒弟!", + "selected_6": "哇哦!{{numBugTypes}}种虫虫!\n$您一定和我一样喜欢虫属性!$来,把这个当作我们友谊的象征吧!" + }, + "3": { + "label": "赠送虫系道具", + "tooltip": "(-)给予训练师{{requiredBugItems}}\n(+)得到一件礼物", + "disabled_tooltip": "你需要一件{{requiredBugItems}}才能选择", + "select_prompt": "选择一件道具", + "invalid_selection": "宝可梦未持有该类道具", + "selected": "你递交了{{selectedItem}}.", + "selected_dialogue": "哇!一件{{selectedItem}},给我的?\n你可以啊小子!$为了表达我的谢意,\n我希望你能拥有这份特别的礼物!$这可是我的传家宝啊,现在我希望你能拥有它!" + } + }, + "battle_won": "你利用知识和技巧完美地痛击了我们的弱点!\n作为这一课的学费,请让我教你一个虫系招式!", + "teach_move_prompt": "选择要教给宝可梦的招式", + "confirm_no_teach": "你确定你不需要学习任何招式么?", + "outro": "我看到你的未来将伴随伟大的虫系宝可梦!\n愿我们再次相遇!虫虫出动!", + "numBugTypes_one": "{{count}}种虫系", + "numBugTypes_other": "{{count}}种虫系" +} diff --git a/src/locales/zh_CN/mystery-encounters/clowning-around-dialogue.json b/src/locales/zh_CN/mystery-encounters/clowning-around-dialogue.json new file mode 100644 index 00000000000..5eb739e3b18 --- /dev/null +++ b/src/locales/zh_CN/mystery-encounters/clowning-around-dialogue.json @@ -0,0 +1,34 @@ +{ + "intro": "是个…@d{64}小丑?", + "speaker": "小丑", + "intro_dialogue": "小丑踩高跷,战斗要来到!\n吵吵闹闹,将你打倒!", + "title": "小丑闹剧", + "description": "有点不对劲,这小丑想要挑衅你,\n目的是什么呢?\n尤其是那{{blacephalonName}}看起来非常奇怪,就好像它有着@[TOOLTIP_TITLE]{与众不同的属性和特性。}", + "query": "你要怎么做?", + "option": { + "1": { + "label": "与小丑战斗", + "tooltip": "(-)奇妙的战斗\n(?)影响宝可梦特性", + "selected": "你可怜的宝可梦正准备进行可悲的表演!", + "apply_ability_dialogue": "精彩的演出!\n出色的指挥与夺目的招式相得益彰!", + "apply_ability_message": "小丑将永久地将你的一只宝可梦的特性交换为{{ability}}!", + "ability_prompt": "你想永久地教会一只宝可梦{{ability}}吗?", + "ability_gained": "@s{level_up_fanfare}{{chosenPokemon}}获得了{{ability}}特性!" + }, + "2": { + "label": "保持冷静", + "tooltip": "(-)让小丑失望\n(?)影响宝可梦道具", + "selected": "小懦夫,竟敢拒绝我。\n尝尝我的厉害!", + "selected_2": "小丑的{{blacephalonName}}使用了戏法!\n你的{{switchPokemon}}的所有道具都被随机变换了!", + "selected_3": "傻了吧,我的把戏毫无破绽!" + }, + "3": { + "label": "骂回去", + "tooltip": "(-)让小丑失望\n(?)影响宝可梦属性", + "selected": "小懦夫,竟敢拒绝我。\n尝尝我的厉害!", + "selected_2": "小丑的{{blacephalonName}}使用了一个奇异的招式!\n你队伍的所有属性都被随机变换了!", + "selected_3": "傻了吧,我的把戏毫无破绽!" + } + }, + "outro": "小丑和他的帮手\n在一阵烟雾中消失了。" +} diff --git a/src/locales/zh_CN/mystery-encounters/dancing-lessons-dialogue.json b/src/locales/zh_CN/mystery-encounters/dancing-lessons-dialogue.json new file mode 100644 index 00000000000..e1818ce06c1 --- /dev/null +++ b/src/locales/zh_CN/mystery-encounters/dancing-lessons-dialogue.json @@ -0,0 +1,27 @@ +{ + "intro": "一位{{oricorioName}}正孤独起舞,没有舞伴。", + "title": "舞蹈课", + "description": "{{oricorioName}}并不咄咄逼人,反而有些哀伤。\n\n也许他只想找个人一起跳舞…", + "query": "你要怎么做?", + "option": { + "1": { + "label": "战斗", + "tooltip": "(-)艰难的战斗\n(+)获得接力棒", + "selected": "{{oricorioName}}变得急躁,想要采取行动进行自卫!", + "boss_enraged": "{{oricorioName}}的恐惧使它的能力上升了!" + }, + "2": { + "label": "学习它的舞蹈", + "tooltip": "(+)教宝可梦觉醒之舞", + "selected": "您紧盯着{{oricorioName}}的舞蹈表演……$@s{level_up_fanfare}你的{{selectedPokemon}}从{{oricorioName}}那里学到了!" + }, + "3": { + "label": "表演一支舞蹈", + "tooltip": "(-)教{{oricorioName}}一支舞蹈\n(+){{oricorioName}}会喜欢你", + "disabled_tooltip": "你的宝可梦需要习得一种舞蹈动作。", + "select_prompt": "选择一个舞蹈招式", + "selected": "{{oricorioName}}着迷地观看着\n{{selectedPokemon}}展示{{selectedMove}}!$它喜欢这场表演!$@s{level_up_fanfare}{{oricorioName}}想要加入你的队伍!" + } + }, + "invalid_selection": "该宝可梦无法学会跳舞招式" +} diff --git a/src/locales/zh_CN/mystery-encounters/dark-deal-dialogue.json b/src/locales/zh_CN/mystery-encounters/dark-deal-dialogue.json new file mode 100644 index 00000000000..82863084de7 --- /dev/null +++ b/src/locales/zh_CN/mystery-encounters/dark-deal-dialogue.json @@ -0,0 +1,24 @@ + + +{ + "intro": "一个穿着破旧大衣的陌生人\\n挡在你的路上…", + "speaker": "可疑的家伙", + "intro_dialogue": "嘿,你!我一直在研究一种新装置,\n能让宝可梦从原子级重组,变成更强大的形态!\n嘿嘿…@d{64}我只需要一点祭…@d{32}\n我是说,试验品,来证明它的效果。", + "title": "黑暗交易", + "description": "这个诡异的家伙举起一些精灵球。\n我会让你感到物超所值的!\n我只要你队伍里的一只宝可梦,这些强力的精灵球就是你的了,嘿嘿…", + "query": "你要怎么做?", + "option": { + "1": { + "label": "同意", + "tooltip": "(+)5个肉鸽球\n(?)强化随机宝可梦", + "selected_dialogue": "我看看,那只{{pokeName}}挺不错的!$记住,要是啥搞砸了\n我可不负责!@d{32}嘿嘿……", + "selected_message": "男人把五个肉鸽球教给你${{pokeName}}跳进了奇怪的机器$在机器的内部\n光芒四溢,雷声作响!$……@d{96}一个诡异的声音\n从机器中浮现,发出低吼。" + }, + "2": { + "label": "拒绝", + "tooltip": "(-)无奖励", + "selected": "都不帮哥们儿个忙吗?\n害!" + } + }, + "outro": "令人不适的遭遇结束后\n你收拾了一下,继续上路了。" +} diff --git a/src/locales/zh_CN/mystery-encounters/delibirdy-dialogue.json b/src/locales/zh_CN/mystery-encounters/delibirdy-dialogue.json new file mode 100644 index 00000000000..82b114b401b --- /dev/null +++ b/src/locales/zh_CN/mystery-encounters/delibirdy-dialogue.json @@ -0,0 +1,29 @@ + + +{ + "intro": "一伙{{delibirdName}}出现了!", + "title": "信使鸟快递", + "description": "{{delibirdName}}满怀期待地看着你,它们好像想要什么东西。\\n也许给它们一件道具或一些钱能让它们满意?", + "query": "你要给它们什么?", + "invalid_selection": "宝可梦身上并没有那种道具。", + "option": { + "1": { + "label": "给钱", + "tooltip": "(-)给予{{delibirdName}}们{{money, money}}\n(+)获得一件礼物", + "selected": "你向{{delibirdName}}们扔了点钱,\n它们兴奋地互相嚷嚷着。$信使鸟们转向你并高兴地给你一份礼物!" + }, + "2": { + "label": "给吃的", + "tooltip": "(-)给予{{delibirdName}}们树果或复活之种\n(+)获得一件礼物", + "select_prompt": "选择要给予的道具", + "selected": "你向{{delibirdName}}们扔了点{{chosenItem}},\n它们兴奋地互相嚷嚷着。$信使鸟们转向你并高兴地给你一份礼物!" + }, + "3": { + "label": "给道具", + "tooltip": "(-)给予{{delibirdName}}一件道具\n(+)获得一件礼物", + "select_prompt": "选择要给予的道具", + "selected": "你向{{delibirdName}}们扔了点{{chosenItem}},\n它们兴奋地互相嚷嚷着。$信使鸟们转向你并高兴地给你一份礼物!" + } + }, + "outro": "{{delibirdName}}们兴高采烈地摇摆着,走向远方。$多么有趣的小交易!" +} diff --git a/src/locales/zh_CN/mystery-encounters/department-store-sale-dialogue.json b/src/locales/zh_CN/mystery-encounters/department-store-sale-dialogue.json new file mode 100644 index 00000000000..09c23762ea9 --- /dev/null +++ b/src/locales/zh_CN/mystery-encounters/department-store-sale-dialogue.json @@ -0,0 +1,27 @@ +{ + "intro": "一位提着一大堆购物袋的女士。", + "speaker": "大促销", + "intro_dialogue": "你好!你也是来参加促销活动的吗?\n在促销期间,可以领取一张特别优惠券,用于购买免费商品!\n我这有一张多余的优惠券。送你了!", + "title": "百货公司促销", + "description": "到处都是商品!\n好像有4个柜台可以让你用优惠券兑换商品。\n无尽可能!", + "query": "你要去哪里?", + "option": { + "1": { + "label": "技能机柜台", + "tooltip": "(+)技能机商店" + }, + "2": { + "label": "努力药柜台", + "tooltip": "(+)努力药商店" + }, + "3": { + "label": "强化道具柜台", + "tooltip": "(+)强化道具商店" + }, + "4": { + "label": "精灵球柜台", + "tooltip": "(+)精灵球商店" + } + }, + "outro": "真划算!早该去去了。" +} diff --git a/src/locales/zh_CN/mystery-encounters/field-trip-dialogue.json b/src/locales/zh_CN/mystery-encounters/field-trip-dialogue.json new file mode 100644 index 00000000000..5458c4f18bc --- /dev/null +++ b/src/locales/zh_CN/mystery-encounters/field-trip-dialogue.json @@ -0,0 +1,31 @@ +{ + "intro": "是一位老师和几个学生!", + "speaker": "人民教师", + "intro_dialogue": "你好!你能为我的学生们抽出一点时间吗?\n我正在教他们宝可梦的招式!\n最好能有个示范来展示一下。$你介意向我们展示一下\n你的宝可梦所使用的招式吗?", + "title": "外出实践", + "description": "一位老师请求进行宝可梦招式演示。\n根据你选择的招式,她可能会给你\n一些有用的东西作为报酬。", + "query": "你要展示哪种类型的招式?", + "option": { + "1": { + "label": "物理招式", + "tooltip": "(+)物理类奖励" + }, + "2": { + "label": "特殊招式", + "tooltip": "(+)特殊类奖励" + }, + "3": { + "label": "变化招式", + "tooltip": "(+)变化类奖励" + }, + "selected": "{{pokeName}}完美地展示了{{move}}!" + }, + "second_option_prompt": "选择一个宝可梦的招式。", + "incorrect": "...$那好像不是{{moveCategory}}招式!\n对不起,我不打算给你任何东西了。$来吧孩子们,我们去别的地方\n找找更好的示范。", + "incorrect_exp": "看来你学到了宝贵的一课?$你的宝可梦也获得了一些经验。", + "correct": "感谢您的好心!\n这些东西希望对你有用!", + "correct_exp": "{{pokeName}}同样也获得了一些经验!", + "status": "变化类", + "physical": "物理类", + "special": "特殊类" +} diff --git a/src/locales/zh_CN/mystery-encounters/fiery-fallout-dialogue.json b/src/locales/zh_CN/mystery-encounters/fiery-fallout-dialogue.json new file mode 100644 index 00000000000..7113ecab2a1 --- /dev/null +++ b/src/locales/zh_CN/mystery-encounters/fiery-fallout-dialogue.json @@ -0,0 +1,26 @@ +{ + "intro": "你遭遇了一场烟灰风暴!", + "title": "炽热余波", + "description": "呼啸的火山灰和余烬使能见度几乎为零。\n看来可能有什么…东西造成了这种状况。\n但到底会是什么呢?", + "query": "你要怎么做?", + "option": { + "1": { + "label": "找到源头", + "tooltip": "(?)寻找源头\n(-)困难的战斗", + "selected": "你冲破风暴,发现两只{{volcaronaName}}正在相互求偶!$它们很不情愿被打扰,并发起了攻击!" + }, + "2": { + "label": "原地趴下", + "tooltip": "(-)忍受天气的影响", + "selected": "当您努力寻找庇护所时,天气影响会造成严重伤害!$您的队伍受到最大生命值20%的伤害!", + "target_burned": "你的{{burnedPokemon}}还被灼伤了!" + }, + "3": { + "label": "让火系宝可梦帮忙", + "tooltip": "(+)解决困境\n(+)获得木炭", + "disabled_tooltip": "你至少需要两只火系宝可梦来选择", + "selected": "你的{{option3PrimaryName}}和{{option3SecondaryName}}引导你发现了两只{{volcaronaName}}正在求偶起舞的地方!$幸运的是,你的宝可梦能够让它们平静下来,\n然后它们就平安离开了。" + } + }, + "found_charcoal": "天气转晴后,你的{{leadPokemon}}沾上了什么东西。\\n@s{item_fanfare}{{leadPokemon}}获得了煤炭!" +} 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 new file mode 100644 index 00000000000..e60a73e885f --- /dev/null +++ b/src/locales/zh_CN/mystery-encounters/fight-or-flight-dialogue.json @@ -0,0 +1,25 @@ +{ + "intro": "宝可梦附近的地上\n有闪闪发光的东西!", + "title": "战逃反应", + "description": "似乎有强大的宝可梦守护着这一道具。\n战斗是最直接的方法,但是它的实力似乎不容小觑。\n如果你有合适的宝可梦,似乎也可以直接偷走它。", + "query": "你要怎么做?", + "option": { + "1": { + "label": "战斗", + "tooltip": "(-)困难的战斗\n(+)新道具", + "selected": "你无所畏惧的走向宝可梦。", + "stat_boost": "{{enemyPokemon}}的潜在实力提升了它的一项能力!" + }, + "2": { + "label": "窃取物品", + "disabled_tooltip": "你的宝可梦需要习得特定的招式来选择。", + "tooltip": "(+){{option2PrimaryName}}使用{{option2PrimaryMove}}", + "selected": ".@d{32}.@d{32}.@d{32}$你的{{option2PrimaryName}}愿意帮忙,并使用了{{option2PrimaryMove}}!$你偷走了道具!" + }, + "3": { + "label": "离开", + "tooltip": "(-)无奖励", + "selected": "你决定把宝贝留给这只宝可梦\n并继续上路了。" + } + } +} 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 new file mode 100644 index 00000000000..d732a2444bd --- /dev/null +++ b/src/locales/zh_CN/mystery-encounters/fun-and-games-dialogue.json @@ -0,0 +1,30 @@ +{ + "intro_dialogue": "来看看吧,大伙!\n在这全新的{{wobbuffetName}}捶捶乐上试试运气!\n", + "speaker": "艺人", + "title": "快乐游戏!", + "description": "你遇到了一个有奖游戏活动!\n你有 @[TOOLTIP_TITLE]{3 回合}的时间来在\n@[TOOLTIP_TITLE]{不打倒}{{wobbuffetName}}的情况下将它尽可能的打到@[TOOLTIP_TITLE]{1血}\n这样,它就能通过反作用力在敲钟器上打出超高数字!\n但要小心!如果你不小心打倒了{{wobbuffetName}},你就得付医疗费!", + "query": "要试试么?", + "option": { + "1": { + "label": "游玩游戏", + "tooltip": "(-)支付{{option1Money, money}}\n(+)玩{{wobbuffetName}}重拳出击!", + "selected": "该试试你的运气了" + }, + "2": { + "label": "离开", + "tooltip": "(-)无奖励", + "selected": "你匆匆上路,心里却有一丝遗憾。" + } + }, + "ko": "哦不!{{wobbuffetName}}被打倒了!\n你不仅输了,还要赔医疗费…", + "charging_continue": "果然翁正在准备反击!", + "turn_remaining_3": "还有3个回合!", + "turn_remaining_2": "还有2个回合!", + "turn_remaining_1": "还有1个回合!", + "end_game": "时间到!{{wobbuffetName}}使出了双倍奉还!\n然后…@d{16}…@d{16}…@d{16}", + "best_result": "{{wobbuffetName}}猛击了按钮,打穿了进度条!\n你赢得了大奖!", + "great_result": "{{wobbuffetName}}猛击了按钮,就快碰到到钟了!\n就差一点!你获得了二等奖!", + "good_result": "{{wobbuffetName}}猛击了按钮,填满了一半进度条!\n你获得了三等奖!", + "bad_result": "{{wobbuffetName}}软绵绵的打向按钮,几乎没什么动静…\n你什么奖都没有!", + "outro": "真是有趣的小游戏!" +} 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 new file mode 100644 index 00000000000..edc83ed5f08 --- /dev/null +++ b/src/locales/zh_CN/mystery-encounters/global-trade-system-dialogue.json @@ -0,0 +1,32 @@ +{ + "intro": "是GTS系统的交互面板!", + "title": "全球交换系统(GTS)", + "description": "啊,GTS!科学的奇迹,\\n你可以与世界各地的任何人联系,与他们交换宝可梦!\\n今天你的交换会有好运吗?", + "query": "你要怎么做?", + "option": { + "1": { + "label": "查找交换请求", + "tooltip": "(+)为一只宝可梦选择交换", + "trade_options_prompt": "选择一只要通过交换接收的神奇宝贝。" + }, + "2": { + "label": "奇迹交换", + "tooltip": "(+)将你的一只宝可梦送至GTS,并获得一只随机宝可梦作为回报" + }, + "3": { + "label": "道具交换", + "trade_options_prompt": "选择要发送的道具", + "invalid_selection": "这只宝可梦没有合法道具可以被交换。", + "tooltip": "(+)将你的一件道具发送到GTS并获得一件随机新道具" + }, + "4": { + "label": "离开", + "tooltip": "(-)无奖励", + "selected": "今日不宜交换!\n你上路了。" + } + }, + "pokemon_trade_selected": "{{tradedPokemon}}将发送给{{tradeTrainerName}}。", + "pokemon_trade_goodbye": "再见,{{tradedPokemon}}!", + "item_trade_selected": "{{chosenItem}}将发送给{{tradeTrainerName}}.$.@d{64}.@d{64}.@d{64}\\n@s{level_up_fanfare}交易成功!$你从{{tradeTrainerName}}那得到了{{itemName}}!", + "trade_received": "@s{evolution_fanfare}{{tradeTrainerName}}已发送{{received}}!" +} 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 new file mode 100644 index 00000000000..9d769e99d83 --- /dev/null +++ b/src/locales/zh_CN/mystery-encounters/lost-at-sea-dialogue.json @@ -0,0 +1,28 @@ +{ + "intro": "在大海中漫无目的地游荡,无处可循。", + "title": "迷失大海", + "description": "这片海域波涛汹涌,你的体力即将耗尽。\\n太糟了,有什么办法么?", + "query": "你要怎么做?", + "option": { + "1": { + "label": "{{option1PrimaryName}}可以帮忙", + "label_disabled": "无法{{option1RequiredMove}}", + "tooltip": "(+){{option1PrimaryName}}帮助你\n(+){{option1PrimaryName}}获得经验值", + "tooltip_disabled": "你没有宝可梦能够{{option1RequiredMove}}", + "selected": "{{option1PrimaryName}}游在前面,引导你回到正轨。${{option1PrimaryName}}似乎也在这次需要它的时候变得更强大了!" + }, + "2": { + "label": "{{option2PrimaryName}}可以帮忙", + "label_disabled": "无法{{option2RequiredMove}}", + "tooltip": "(+){{option2PrimaryName}}帮助你\n(+){{option2PrimaryName}}获得经验值", + "tooltip_disabled": "你没有宝可梦能够{{option2RequiredMove}}", + "selected": "{{option2PrimaryName}}飞在你的船前面,引导你回到正轨。在这次需要它的时候,${{option2PrimaryName}}似乎也变得更强大了!" + }, + "3": { + "label": "漫无目的地漂流", + "tooltip": "(-)每一只宝可梦损失{{damagePercentage}}%的HP", + "selected": "你在船上漂浮,漫无目的地航行,直到最后发现了一个你记得的地标。$你和你的宝可梦因整个经历而疲惫不堪。" + } + }, + "outro": "一切又回到正轨了。" +} diff --git a/src/locales/zh_CN/mystery-encounters/mysterious-challengers-dialogue.json b/src/locales/zh_CN/mystery-encounters/mysterious-challengers-dialogue.json new file mode 100644 index 00000000000..574c577127c --- /dev/null +++ b/src/locales/zh_CN/mystery-encounters/mysterious-challengers-dialogue.json @@ -0,0 +1,22 @@ +{ + "intro": "神秘的挑战者出现了!", + "title": "神秘挑战者", + "description": "如果你击败了挑战者,你给他们留下的强烈印象可能会换来奖励。\\n但他们看起来很强,要接受挑战么?", + "query": "你要接受谁的挑战?", + "option": { + "1": { + "label": "谨慎的对手", + "tooltip": "(-)普通的战斗\n(+)道具奖励" + }, + "2": { + "label": "自信的对手", + "tooltip": "(-)困难的战斗\n(+)更好的奖励" + }, + "3": { + "label": "威严的对手", + "tooltip": "(-)艰苦的战斗\n(+)丰厚的奖励" + }, + "selected": "训练师走上前来……" + }, + "outro": "神秘挑战者被击败了!" +} diff --git a/src/locales/zh_CN/mystery-encounters/mysterious-chest-dialogue.json b/src/locales/zh_CN/mystery-encounters/mysterious-chest-dialogue.json new file mode 100644 index 00000000000..2ccba9215ae --- /dev/null +++ b/src/locales/zh_CN/mystery-encounters/mysterious-chest-dialogue.json @@ -0,0 +1,23 @@ +{ + "intro": "你发现了一个…@d{32}宝箱?", + "title": "神秘宝箱", + "description": "一个装饰精美的箱子立在地上。里面一定有好东西…吧?", + "query": "要打开么?", + "option": { + "1": { + "label": "打开", + "tooltip": "@[SUMMARY_BLUE]{(35%) 某种东西}\n@[SUMMARY_GREEN]{({{trapPercent}}%) 一般奖励}\n@[SUMMARY_GREEN]{({{commonPercent}}%) 精美奖励}\n@[SUMMARY_GREEN]{({{roguePercent}}%) 珍稀奖励}\n@[SUMMARY_GREEN]{({{masterPercent}}%) 超凡奖励}", + "selected": "你打开箱子发现......", + "normal": "只是一些普通的工具和物品。", + "good": "一些不错的工具和物品!", + "great": "一些很稀有的工具和物品!!", + "amazing": "哇!金色传说!", + "bad": "哦不!@d{32}\n这个箱子实际上是一个伪装的{{gimmighoul Name}}!$你的{{pokeName}}跳到了你面前\n但为了保护你被打倒了!" + }, + "2": { + "label": "有诈,走了", + "tooltip": "(-)无奖励", + "selected": "你匆匆上路,心里却有一丝遗憾。" + } + } +} diff --git a/src/locales/zh_CN/mystery-encounters/part-timer-dialogue.json b/src/locales/zh_CN/mystery-encounters/part-timer-dialogue.json new file mode 100644 index 00000000000..437a34ecd1a --- /dev/null +++ b/src/locales/zh_CN/mystery-encounters/part-timer-dialogue.json @@ -0,0 +1,31 @@ +{ + "intro": "一个忙碌的工人向你招手。", + "speaker": "工人", + "intro_dialogue": "你看起来有不少能干的宝可梦!\n如果你愿意帮忙干点活,我们会付钱的!", + "title": "兼职", + "description": "似乎有不少活要干。根据你宝可梦对任务的适应度,\n你能获得或多或少的报酬。", + "query": "你要干什么活?", + "invalid_selection": "宝可梦必须足够健康", + "option": { + "1": { + "label": "外卖", + "tooltip": "(-)宝可梦使用速度\n(+)赚取@[MONEY]{Money}", + "selected": "您的{{selectedPokemon}}轮班为客户配送订单。" + }, + "2": { + "label": "仓管", + "tooltip": "(-)宝可梦使用力量和耐力\n(+)赚取@[MONEY]{Money}", + "selected": "你的{{selectedPokemon}}轮班工作,在仓库内搬运物品。" + }, + "3": { + "label": "销售", + "tooltip": "(-)你的{{option3PrimaryName}}使用{{option3PrimaryMove}}\n(+)赚取@[MONEY]{Money}", + "disabled_tooltip": "你的宝可梦需要习得适合这份工作的招式", + "selected": "你的{{option3PrimaryName}}花费一天时间使用{{option3PrimaryMove}}来吸引客户!" + } + }, + "job_complete_good": "谢谢你的帮助!\n你的{{selectedPokemon}}帮了大忙了!这是你的日结。", + "job_complete_bad": "你的{{selectedPokemon}}也帮了不少忙!这是你的日结。", + "pokemon_tired": "你的{{selectedPokemon}}疲惫不堪!\n它所有招式的PP值只剩2点!", + "outro": "下次还来帮忙啊!" +} diff --git a/src/locales/zh_CN/mystery-encounters/safari-zone-dialogue.json b/src/locales/zh_CN/mystery-encounters/safari-zone-dialogue.json new file mode 100644 index 00000000000..b8a17aaccf4 --- /dev/null +++ b/src/locales/zh_CN/mystery-encounters/safari-zone-dialogue.json @@ -0,0 +1,46 @@ +{ + "intro": "到狩猎地带了!", + "title": "狩猎地带", + "description": "这里有各种稀有和特殊的宝可梦!\n如果选择进入,你将有3次机会遇到野生宝可梦,供你捕获。\n但注意了,它们可能会在你捕捉到之前逃走!", + "query": "要进去试试吗?", + "option": { + "1": { + "label": "进入", + "tooltip": "(-)支付{{option1Money, money}}\n@[SUMMARY_GREEN]{(?)狩猎地带}", + "selected": "该试试运气了!" + }, + "2": { + "label": "离开", + "tooltip": "(-)无奖励", + "selected": "你匆匆上路,心里却有一丝遗憾。" + } + }, + "safari": { + "1": { + "label": "投掷精灵球", + "tooltip": "(+)投掷一颗精灵球", + "selected": "你扔出了精灵球!" + }, + "2": { + "label": "投掷诱饵", + "tooltip": "(+)增加捕获率\n(-)有概率增加逃跑率", + "selected": "你扔了些诱饵!" + }, + "3": { + "label": "投掷泥巴", + "tooltip": "(+)降低逃跑率\n(-)有概率降低逃跑率", + "selected": "你扔了些泥巴!" + }, + "4": { + "label": "逃跑", + "tooltip": "(?)逃离宝可梦" + }, + "watching": "{{pokemonName}}正在凝视你!", + "eating": "{{pokemonName}}正在进食!", + "busy_eating": "{{pokemonName}}忙着进食!", + "angry": "{{pokemonName}}发怒了!", + "beside_itself_angry": "{{pokemonName}}愤怒至极!", + "remaining_count": "还有{{remainingCount}}只宝可梦!" + }, + "outro": "真是有趣的经历!" +} 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 new file mode 100644 index 00000000000..570035d8670 --- /dev/null +++ b/src/locales/zh_CN/mystery-encounters/shady-vitamin-dealer-dialogue.json @@ -0,0 +1,27 @@ +{ + "intro": "一个穿着深色大衣的人向你走来。", + "speaker": "可疑的销售", + "intro_dialogue": ".@d{16}.@d{16}.@d{16}\n我有货,要来点么?\n当然,你的宝可梦得顶得住。", + "title": "营养饮料商人", + "description": "男子打开外套,露出一些宝可梦营养饮料。\n他报出的数字非常划算。有点太划算了…\n他提供两种套餐供你选择。", + "query": "你要选哪一种?", + "invalid_selection": "宝可梦必须足够健康", + "option": { + "1": { + "label": "经济套餐", + "tooltip": "(-)支付{{option1Money, money}}\n(-)副作用?\n(+)选择的宝可梦获得两份随机努力药" + }, + "2": { + "label": "高级套餐", + "tooltip": "(-)支付{{option2Money, money}}\n(+)选择的宝可梦获得两份随机努力药" + }, + "3": { + "label": "离开", + "tooltip": "(-)无奖励", + "selected": "呵呵,没想到你竟然是个懦夫。" + }, + "selected": "那人递给你两瓶东西后\n然后很快就消失了。${{selected Pokemon}}获得了{{boost}}和{{boost 2}}提升!" + }, + "cheap_side_effects": "但是药物有一些副作用!$你的{{selectedPokemon}}受到一些伤害,\n并且它的性格变为{{newNature}}!", + "no_bad_effects": "看来药物完全没有副作用!" +} diff --git a/src/locales/zh_CN/mystery-encounters/slumbering-snorlax-dialogue.json b/src/locales/zh_CN/mystery-encounters/slumbering-snorlax-dialogue.json new file mode 100644 index 00000000000..a9dda26cd2d --- /dev/null +++ b/src/locales/zh_CN/mystery-encounters/slumbering-snorlax-dialogue.json @@ -0,0 +1,25 @@ +{ + "intro": "当你走在一条狭窄的小路上时,\n一个高耸的身影挡住了你的去路。\n当你走近时,你看到了一个{{snorlaxName}}正在酣睡。\n似乎没有办法绕过它。", + "title": "沉睡的{{snorlaxName}}", + "description": "你可以攻击它来让它醒来,要么就等它睡醒。\n谁知道要等多久呢?", + "query": "你要怎么做?", + "option": { + "1": { + "label": "抡醒", + "tooltip": "(-)与沉睡的{{snorlaxName}}战斗\n(+)特别的奖励", + "selected": "你无所畏惧地\n走向了宝可梦们。" + }, + "2": { + "label": "干等", + "tooltip": "(-)漫长的等待\n(+)回复队伍", + "selected": ".@d{32}.@d{32}.@d{32}$您等待了好一段时间,但是\n{{snorlaxName}}的哈欠让你的队伍昏昏欲睡…………", + "rest_result": "当你们醒来时,{{snorlax Name}}已无处可寻。\n但你所有的宝可梦都痊愈了!" + }, + "3": { + "label": "偷摸", + "tooltip": "(+){{option3PrimaryName}}使用{{option3PrimaryMove}}\n(+)特别的奖励", + "disabled_tooltip": "宝可梦需要习得特别的招式来选择", + "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 new file mode 100644 index 00000000000..5b4fbf614d8 --- /dev/null +++ b/src/locales/zh_CN/mystery-encounters/teleporting-hijinks-dialogue.json @@ -0,0 +1,27 @@ +{ + "intro": "一台奇怪的机器,发出呜呜的噪音…", + "title": "瞬移把戏", + "description": "机器上有一块牌子,上面写着:\n“使用时,先投币,然后走入胶囊。”\n\n也许它可以将你传送至某处…", + "query": "你要怎么做?", + "option": { + "1": { + "label": "投币", + "tooltip": "(-)支付{{price, money}}\n(?)传送至随机地图", + "selected": "你投入一些钱,胶囊就打开了。\n你走了进去……" + }, + "2": { + "label": "宝可梦帮忙", + "tooltip": "(-){{option2PrimaryName}}帮忙\n(+){{option2PrimaryName}}获得经验\n(?)传送至随机地图", + "disabled_tooltip": "你需要一只钢系或电系宝可梦来选择此项", + "selected": "{{option2PrimaryName}}的类型允许你绕过机器的付费装置!$胶囊打开,你走进去……" + }, + "3": { + "label": "检查机器", + "tooltip": "(-)战斗", + "selected": "你被闪烁的灯光和机器发出的奇怪声音吸引住了……$你甚至没有注意到一只野生的\n宝可梦偷偷接近并偷袭了你!" + } + }, + "transport": "机器剧烈震动,发出各种奇怪的噪音!\n刚启动没多久,就又一次安静了下来。", + "attacked": "你走出来,到了一个全新的区域,惊动了一只野生宝可梦。\n野生宝可梦发动了攻击!", + "boss_enraged": "敌对的{{enemyPokemon}}被激怒了!" +} 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 new file mode 100644 index 00000000000..4ab42a61264 --- /dev/null +++ b/src/locales/zh_CN/mystery-encounters/the-expert-pokemon-breeder-dialogue.json @@ -0,0 +1,33 @@ +{ + "intro": "这是一位携带大量神奇宝贝蛋的训练师!", + "intro_dialogue": "嘿,训练师!$看起来你的一些\n宝可梦感觉有点沮丧。$为什么不和我打一场来让它们兴奋一下呢?", + "title": "专业饲养员", + "description": "你被发起了一场@[TOOLTIP_TITLE]{只能使用一只宝可梦}的挑战。\n这可能很难,但它肯定会\n加深你与所选神奇宝贝之间的联系!\n如果你赢了,饲养员还会给你一些@[TOOLTIP_TITLE]{蛋}!", + "query": "Who will you battle with?", + "cleffa_1_nickname": "王牌", + "cleffa_2_nickname": "皮氪稀", + "cleffa_3_nickname": "帝王{{speciesName}}", + "option": { + "1": { + "label": "{{pokemon1Name}}", + "tooltip_base": "(-)艰难的战斗\n(+)获得与{{pokemon1Name}}的友谊" + }, + "2": { + "label": "{{pokemon2Name}}", + "tooltip_base": "(-)艰难的战斗\n(+)获得与{{pokemon2Name}}的友谊" + }, + "3": { + "label": "{{pokemon3Name}}", + "tooltip_base": "(-)艰难的战斗\n(+)获得与{{pokemon3Name}}的友谊" + }, + "selected": "我们开始吧!" + }, + "outro": "看看你的 {{chosenPokemon}}现在有多开心!$给,这些你也拿着。", + "outro_failed": "太可惜了……$看起来要让你的宝可梦信任你\n你的路还长着呢。", + + "gained_eggs": "@s{item_fanfare}你获得了{{numEggs}}!", + "eggs_tooltip": "\n(+)获得{{eggs}}", + "numEggs_one": "{{count}}个{{rarity}}蛋", + "numEggs_other": "{{count}}个{{rarity}}蛋" + +} 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 new file mode 100644 index 00000000000..1f8c91cf4ca --- /dev/null +++ b/src/locales/zh_CN/mystery-encounters/the-pokemon-salesman-dialogue.json @@ -0,0 +1,23 @@ +{ + "intro": "一位精神抖擞的老人向你走来。", + "speaker": "绅士", + "intro_dialogue": "你好啊!我有一份专门为你准备的好买卖!", + "title": "宝可梦销售员", + "description": "“这个{{purchasePokemon}}非常独特,拥有该物种通常不具备的特性!只需{{price, money}}就让你拥有这个与众不同的{{purchasePokemon}}!”\n\n“你怎么说?”", + "description_shiny": "“这个{{purchasePokemon}}非常独特,拥有该物种非常不寻常的颜色!只需{{price, money}}就让你拥有这个与众不同的{{purchasePokemon}}!”\n\n“你怎么说?”", + "query": "你要怎么做?", + "option": { + "1": { + "label": "接受", + "tooltip": "(-)支付{{price, money}}\n(+)获得{{purchasePokemon}}和它的隐藏特性", + "tooltip_shiny": "(-)支付{{price, money}}\n(+)获得一只闪光的{{purchasePokemon}}", + "selected_message": "你花了一大笔钱买了{{purchasePokemon}}.", + "selected_dialogue": "非常好的选择!$我看得出来你对商业有敏锐的眼光。$哦,对了……@d{64}不接受退货,你懂吗?" + }, + "2": { + "label": "拒绝", + "tooltip": "(-)无奖励", + "selected": "不?@d{32} 你说不要?$又不会让你吃亏!" + } + } +} 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 new file mode 100644 index 00000000000..170ce3193df --- /dev/null +++ b/src/locales/zh_CN/mystery-encounters/the-strong-stuff-dialogue.json @@ -0,0 +1,21 @@ +{ + "intro": "眼前是一个巨大的{{shuckleName}}而看起来\n有一大壶……果汁?", + "title": "满满当当", + "description": "挡住你去路的{{shuckleName}}看起来异常强大。与此同时,它旁边的果汁散发着某种力量。\n\n{{shuckleName}}向你伸出了触角。它似乎想做些什么……", + "query": "你要怎么做?", + "option": { + "1": { + "label": "接近{{shuckleName}}", + "tooltip": "(?)可能会发生一些可怕或惊奇的事情", + "selected": "你眼前一黑", + "selected_2": "@f{150}当你醒来时,{{shuckleName}}不见了。\n并且壶里的果汁完全耗尽。${{highBstPokemon1}}和{{highBstPokemon2}}\n觉得一阵可怕的无力感袭来!$他们的基础属性减少了{{reductionValue}}!$然而,你剩下的神奇宝贝却感到精力充沛!\n他们的基础属性增加了{{increaseValue}}!" + }, + "2": { + "label": "与{{shuckleName}}战斗", + "tooltip": "(-)艰难的战斗\n(+)特别的奖励", + "selected": "{{shuckleName}}被激怒了,它喝了一些果汁并发起了攻击!", + "stat_boost": "{{shuckleName}}的果汁提升了它的能力!" + } + }, + "outro": "好诡异的一回啊。" +} 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 new file mode 100644 index 00000000000..ecd7d336136 --- /dev/null +++ b/src/locales/zh_CN/mystery-encounters/the-winstrate-challenge-dialogue.json @@ -0,0 +1,22 @@ +{ + "intro": "房子外站着一家人!", + "speaker": "连胜家族", + "intro_dialogue": "我们是连胜家族!$你觉得和我们一家人来一场宝可梦车轮战怎么样?", + "title": "连胜家族的挑战", + "description": "连胜家族由 5 名训练师组成,他们想要战斗!\n如果你连续击败他们所有人,他们会给你一份大奖。但你能承受压力吗?", + "query": "你要怎么做?", + "option": { + "1": { + "label": "接受挑战", + "tooltip": "(-)残酷的战斗\n(+)特别的奖励", + "selected": "挑战开始!" + }, + "2": { + "label": "拒绝挑战", + "tooltip": "(+)队伍痊愈\n(+)获得一个超神奇糖果", + "selected": "太可惜了。话说,你们队伍看上去很疲惫,为什么不留下来休息一会儿呢?" + } + }, + "victory": "恭喜您赢得了我们的挑战!\n$事不宜迟,希望您收下这张扭蛋券。", + "victory_2": "此外,我们家也使用这款强制锻炼器来在训练中\n更有效地强化我们的宝可梦。\n鉴于你能打败我们所有人,你可能用不着,\n但我们希望你无论如何都能收下它!" +} diff --git a/src/locales/zh_CN/mystery-encounters/training-session-dialogue.json b/src/locales/zh_CN/mystery-encounters/training-session-dialogue.json new file mode 100644 index 00000000000..8d0b1dea64d --- /dev/null +++ b/src/locales/zh_CN/mystery-encounters/training-session-dialogue.json @@ -0,0 +1,33 @@ +{ + "intro": "你遇到了一些\n训练工具和用品。", + "title": "集训", + "description": "这些物品似乎可以用来训练你的队伍!\n有数种方式可以进行训练:让你队伍中的其他宝可梦与其进行对战。", + "query": "要怎么训练?", + "invalid_selection": "宝可梦必须足够健康", + "option": { + "1": { + "label": "轻量训练", + "tooltip": "(-)轻松战斗\n(+)提升随机2只宝可梦的个体", + "finished": "{{selectedPokemon}}回来了,感觉\n虽然疲惫不堪,但很有成就!$它的{{stat1}}和{{stat2}}的个体得到了改善!" + }, + "2": { + "label": "适度训练", + "tooltip": "(-)适中的战斗\n(+)改变宝可梦的性格", + "select_prompt": "选择一种想要的性格\n来训练你的神奇宝贝。", + "finished": "{{selectedPokemon}}回来了,感觉\n虽然疲惫不堪,但很有成就!$它的性格变成了{{nature}}!" + }, + "3": { + "label": "重磅训练", + "tooltip": "(-)艰苦的战斗\n(+)改变宝可梦的特性", + "select_prompt": "选择一种想要的特性\n来训练你的神奇宝贝。", + "finished": "{{selectedPokemon}}回来了,感觉\n虽然疲惫不堪,但很有成就!$它的特性变成了{{nature}}!" + }, + "4": { + "label": "离开", + "tooltip": "(-)无奖励", + "selected": "你无暇训练\n该动身了。" + }, + "selected": "{{selected Pokemon}}穿过空地来到你面前……" + }, + "outro": "这次训练成果不错!" +} 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 new file mode 100644 index 00000000000..69e719064e9 --- /dev/null +++ b/src/locales/zh_CN/mystery-encounters/trash-to-treasure-dialogue.json @@ -0,0 +1,19 @@ +{ + "intro": "一大堆垃圾!\n这是从哪儿来的?", + "title": "变废为宝", + "description": "垃圾堆在你眼前晃来晃去,你似乎在垃圾中发现一些有价值的物品。\n不过,你确定要弄得脏兮兮地去拿它们吗?", + "query": "你要怎么做?", + "option": { + "1": { + "label": "挖掘宝贝", + "tooltip": "(-)商店的治疗用品消失\n(+)获得精美礼品", + "selected": "你穿过垃圾堆,没入污秽之中。$在你这样肮脏的状态下,任何有尊严的店主\n都不会卖给你任何东西!$你只能将就将就,不再购买治疗物品。$然而,你在垃圾中还是发现了一些不可思议的宝贝!" + }, + "2": { + "label": "探究来源", + "tooltip": "(?)找到垃圾的来源", + "selected": "你在这堆东西周围徘徊,寻找表明这东西可能出现在这里的任何迹象……", + "selected_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 new file mode 100644 index 00000000000..1e321a6e614 --- /dev/null +++ b/src/locales/zh_CN/mystery-encounters/uncommon-breed-dialogue.json @@ -0,0 +1,26 @@ +{ + "intro": "这可不是一只普通的宝可梦!", + "title": "罕见物种", + "description": "{{enemyPokemon}}看起来与其他同种宝可梦大相径庭。\n@[TOOLTIP_TITLE]{也许它会特殊招式?}\n你可以直接进行战斗并尝试捕获它,但可能也有办法和它交朋友。", + "query": "你要怎么做?", + "option": { + "1": { + "label": "与它战斗", + "tooltip": "(-)蹊跷的战斗\n(+)可捕获强敌", + "selected": "你毫无畏惧地接近\n{{enemyPokemon}}。", + "stat_boost": "{{enemyPokemon}}的不凡实力让它的能力提高!" + }, + "2": { + "label": "给他吃的", + "disabled_tooltip": "你需要4个树果来选择此项", + "tooltip": "(-)给予4个树果\n(+){{enemyPokemon}}会喜欢你", + "selected": "你把树果扔向{{enemyPokemon}}!$它高兴地把树果吃干抹净!${{enemyPokemon}}想加入你的队伍!" + }, + "3": { + "label": "交朋友", + "disabled_tooltip": "你的宝可梦需要习得某些招式才能选择此项", + "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 new file mode 100644 index 00000000000..0bff2cdbb4c --- /dev/null +++ b/src/locales/zh_CN/mystery-encounters/weird-dream-dialogue.json @@ -0,0 +1,22 @@ +{ + "intro": "一个阴暗的女人挡住了你的路。\n她身上的气氛让人不安……", + "speaker": "女人", + "intro_dialogue": "我看到了你的未来,你的过去……$孩子,你也看到了吗?", + "title": "???", + "description": "女人的话语在你的脑海里回荡。\n那不是同一个人的声音,\n而是来自所有时间和空间的众多声音。\n你开始感到头晕目眩,这个问题萦绕在你的脑海中……\n\n@[TOOLTIP_TITLE]{\"我看到了你的未来,你的过去……$孩子,你也看到了吗?\"}", + "query": "你要怎么做?", + "option": { + "1": { + "label": "\"我看见了\"", + "tooltip": "@[SUMMARY_GREEN]{(?)影响宝可梦}", + "selected": "她伸出手去触摸你,\n然后一切都变黑了。$然后……@d{64}你看到了一切。\n每一条时间线,你所有不同的自我,\n过去和未来。$一切造就了你的事物,\n一切你将变成的事物……@d{64}", + "cutscene": "你会看到你的宝可梦@d{32} 从与不同的现实融合,转变成全新的存在……@d{64}", + "dream_complete": "当你醒来时,那个女人……女人还是幽灵?\n……不见了……$.@d{32}.@d{32}.@d{32}$你的宝可梦已经改变了……\n又或者它是你某一时刻的某支队伍?" + }, + "2": { + "label": "匆匆离开", + "tooltip": "(-)影响宝可梦", + "selected": "你从麻木的控制中挣脱出来,匆匆离开。$当你终于停下来收拾好自己时,你连忙检查队伍中的宝可梦。$不知为何,他们的等级都下降了!" + } + } +} diff --git a/src/locales/zh_CN/party-ui-handler.json b/src/locales/zh_CN/party-ui-handler.json index 8dff1ffb75c..4ddea7cd789 100644 --- a/src/locales/zh_CN/party-ui-handler.json +++ b/src/locales/zh_CN/party-ui-handler.json @@ -15,6 +15,7 @@ "UNPAUSE_EVOLUTION": "解除进化暂停", "REVIVE": "复活", "RENAME": "起名", + "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 e77f9bdb9fa..c2ad12bbf16 100644 --- a/src/locales/zh_CN/pokemon-form.json +++ b/src/locales/zh_CN/pokemon-form.json @@ -1,4 +1,5 @@ { + "pikachu": "Normal", "pikachuCosplay": "换装", "pikachuCoolCosplay": "摇滚巨星", "pikachuBeautyCosplay": "贵妇", @@ -6,7 +7,9 @@ "pikachuSmartCosplay": "博士", "pikachuToughCosplay": "面罩摔跤手", "pikachuPartner": "搭档", + "eevee": "Normal", "eeveePartner": "搭档", + "pichu": "Normal", "pichuSpiky": "刺刺耳", "unownA": "A", "unownB": "B", @@ -36,36 +39,65 @@ "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", "rotomHeat": "加热", "rotomWash": "清洗", "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": "雪国花纹", @@ -91,6 +123,7 @@ "flabebeOrange": "橙花", "flabebeBlue": "蓝花", "flabebeWhite": "白花", + "furfrou": "Natural Form", "furfrouHeart": "心形造型", "furfrouStar": "星形造型", "furfrouDiamond": "菱形造型", @@ -100,6 +133,11 @@ "furfrouLaReine": "女王造型", "furfrouKabuki": "歌舞伎造型", "furfrouPharaoh": "国王造型", + "espurrMale": "Male", + "espurrFemale": "Female", + "honedgeShiled": "Shield", + "honedgeBlade": "Blade", + "pumpkaboo": "Average Size", "pumpkabooSmall": "小尺寸", "pumpkabooLarge": "大尺寸", "pumpkabooSuper": "特大尺寸", @@ -110,11 +148,37 @@ "zygarde50Pc": "50%形态 群聚变形", "zygarde10Pc": "10%形态 群聚变形", "zygardeComplete": "完全体形态", + "hoopa": "Confined", + "hoopaUnbound": "Unbound", "oricorioBaile": "热辣热辣风格", "oricorioPompom": "啪滋啪滋风格", "oricorioPau": "呼拉呼拉风格", "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": "黄色核心", @@ -131,25 +195,66 @@ "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": "顶尖形态", @@ -164,6 +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", "paldeaTaurosCombat": "斗战种", "paldeaTaurosBlaze": "火炽种", "paldeaTaurosAqua": "水澜种" diff --git a/src/locales/zh_CN/trainer-classes.json b/src/locales/zh_CN/trainer-classes.json index 3a50acf5c01..ba126b9ec65 100644 --- a/src/locales/zh_CN/trainer-classes.json +++ b/src/locales/zh_CN/trainer-classes.json @@ -126,5 +126,8 @@ "skull_grunts": "骷髅队手下", "macro_grunt": "马洛科蒙训练师", "macro_grunt_female": "马洛科蒙训练师", - "macro_grunts": "马洛科蒙训练师" + "macro_grunts": "马洛科蒙训练师", + "star_grunt": "Star Grunt", + "star_grunt_female": "Star Grunt", + "star_grunts": "Star Grunts" } diff --git a/src/locales/zh_CN/trainer-names.json b/src/locales/zh_CN/trainer-names.json index 9e03a514ff7..dea307ef0bf 100644 --- a/src/locales/zh_CN/trainer-names.json +++ b/src/locales/zh_CN/trainer-names.json @@ -30,10 +30,6 @@ "crasher_wake": "吉宪", "fantina": "梅丽莎", "byron": "东瓜", - "faba": "扎奥博", - "plumeria": "布尔美丽", - "oleana": "奥莉薇", - "candice": "小菘", "volkner": "电次", "cilan": "天桐", @@ -142,6 +138,15 @@ "rood": "罗德", "xerosic": "库瑟洛斯奇", "bryony": "芭菈", + "faba": "扎奥博", + "plumeria": "布尔美丽", + "oleana": "奥莉薇", + "giacomo": "Giacomo", + "mela": "Mela", + "atticus": "Atticus", + "ortega": "Ortega", + "eri": "Eri", + "maxie": "赤焰松", "archie": "水梧桐", "cyrus": "赤日", @@ -150,6 +155,7 @@ "lusamine": "露莎米奈", "guzma": "古兹马", "rose": "洛兹", + "cassiopeia": "牡丹", "blue_red_double": "青绿 & 赤红", "red_blue_double": "赤红 & 青绿", @@ -160,5 +166,18 @@ "alder_iris_double": "阿戴克 & 艾莉丝", "iris_alder_double": "艾莉丝 & 阿戴克", "marnie_piers_double": "玛俐 & 聂梓", - "piers_marnie_double": "聂梓 & 玛俐" + "piers_marnie_double": "聂梓 & 玛俐", + + "buck": "麦可", + "cheryl": "芽米", + "marley": "米依", + "mira": "麦儿", + "riley": "亚玄", + "victor": "晴彦", + "victoria": "安江", + "vivi": "小秋", + "vicky": "光代", + "vito": "良平", + "bug_type_superfan": "超级虫系粉丝", + "expert_pokemon_breeder": "专业宝可梦饲养员" } diff --git a/src/locales/zh_CN/trainer-titles.json b/src/locales/zh_CN/trainer-titles.json index 07654ec8fc3..8ac8acf0a3a 100644 --- a/src/locales/zh_CN/trainer-titles.json +++ b/src/locales/zh_CN/trainer-titles.json @@ -19,6 +19,7 @@ "aether_boss": "以太基金会理事长", "skull_boss": "骷髅队老大", "macro_boss": "马洛科蒙总裁", + "star_boss": "Team Star Leader", "rocket_admin": "火箭队干部", "rocket_admin_female": "火箭队干部", @@ -34,5 +35,8 @@ "flare_admin_female": "闪焰队干部", "aether_admin": "以太基金会干部", "skull_admin": "骷髅队干部", - "macro_admin": "马洛科蒙干部" + "macro_admin": "马洛科蒙干部", + "star_admin": "Team Star Squad Boss", + + "the_winstrates": "连胜家族" } diff --git a/src/locales/zh_TW/ability.json b/src/locales/zh_TW/ability.json index 21206c5362a..5d05a6c4e73 100644 --- a/src/locales/zh_TW/ability.json +++ b/src/locales/zh_TW/ability.json @@ -1237,6 +1237,6 @@ }, "poisonPuppeteer": { "name": "毒傀儡", - "description": "因為桃歹郎的招式而陷入中\n毒狀態的對手同時也會陷入\n混亂狀態。" + "description": "因為此寶可夢的招式而陷入中毒狀態的對手\n同時也會陷入混亂狀態。" } } diff --git a/src/locales/zh_TW/achv.json b/src/locales/zh_TW/achv.json index 804ec0c5089..5c3b137f90f 100644 --- a/src/locales/zh_TW/achv.json +++ b/src/locales/zh_TW/achv.json @@ -264,5 +264,9 @@ "INVERSE_BATTLE": { "name": "鏡子子鏡", "description": "完成逆轉之戰挑戰\n戰挑戰之轉逆成完" + }, + "BREEDERS_IN_SPACE": { + "name": "Breeders in Space!", + "description": "Beat the Expert Pokémon Breeder in the Space Biome." } } diff --git a/src/locales/zh_TW/battle.json b/src/locales/zh_TW/battle.json index 66da1b7cace..3eb9d523b03 100644 --- a/src/locales/zh_TW/battle.json +++ b/src/locales/zh_TW/battle.json @@ -21,6 +21,10 @@ "moneyWon": "你贏得了\n₽{{moneyAmount}}!", "moneyPickedUp": "撿到了₽{{moneyAmount}}!", "pokemonCaught": "{{pokemonName}}被抓住了!", + "pokemonObtained": "You got {{pokemonName}}!", + "pokemonBrokeFree": "Oh no!\nThe Pokémon broke free!", + "pokemonFled": "The wild {{pokemonName}} fled!", + "playerFled": "You fled from the {{pokemonName}}!", "addedAsAStarter": "增加了{{pokemonName}}作爲\n一個新的基礎寶可夢!", "partyFull": "你的隊伍已滿員。是否放生其他寶可夢\n爲{{pokemonName}}騰出空間?", "pokemon": "寶可夢", @@ -56,6 +60,7 @@ "noPokeballTrainer": "你不能捕捉其他訓練家的寶可夢!", "noPokeballMulti": "只能在剩下一只寶可夢時才能扔出精靈球!", "noPokeballStrong": "目標寶可夢太強了,無法捕捉!\n你需要先削弱它!", + "noPokeballMysteryEncounter": "You aren't able to\ncatch this Pokémon!", "noEscapeForce": "一股無形的力量阻止你逃跑。", "noEscapeTrainer": "你不能從與訓練家的戰鬥中逃跑!", "noEscapePokemon": "{{pokemonName}}的{{moveName}}\n阻止了你{{escapeVerb}}!", @@ -94,5 +99,6 @@ "retryBattle": "你要從對戰開始時重試麽?", "unlockedSomething": "{{unlockedThing}}\n已解鎖。", "congratulations": "恭喜!", - "beatModeFirstTime": "{{speciesName}}首次擊敗了{{gameMode}}!\n你獲得了{{newModifier}}!" + "beatModeFirstTime": "{{speciesName}}首次擊敗了{{gameMode}}!\n你獲得了{{newModifier}}!", + "mysteryEncounterAppeared": "What's this?" } diff --git a/src/locales/zh_TW/bgm-name.json b/src/locales/zh_TW/bgm-name.json index e8546750977..082e4743ffc 100644 --- a/src/locales/zh_TW/bgm-name.json +++ b/src/locales/zh_TW/bgm-name.json @@ -83,6 +83,9 @@ "battle_galactic_boss": "晶燦鑽石·明亮珍珠「戰鬥!赤日」", "battle_plasma_boss": "黑2白2「戰鬥!魁奇思」", "battle_flare_boss": "XY「戰鬥!弗拉達利」", + "battle_star_grunt": "SV Team Star Battle", + "battle_star_admin": "SV Team Star Boss", + "battle_star_boss": "SV Cassiopeia Battle", "abyss": "空之探險隊「黑暗小丘」", "badlands": "空之探險隊「枯竭之谷」", @@ -97,17 +100,17 @@ "forest": "空之探險隊「黑暗森林」", "grass": "空之探險隊「蘋果森林」", "graveyard": "空之探險隊「神秘森林」", - "ice_cave": "空之探險隊「大冰山」", + "ice_cave": "Firel - -50°C", "island": "空之探險隊「沿岸岩地」", "jungle": "Lmz - 叢林", "laboratory": "Firel - 研究所", - "lake": "空之探險隊「水晶洞窟」", + "lake": "Lmz - Lake", "meadow": "空之探險隊「天空頂端(森林)」", "metropolis": "Firel - 城市", "mountain": "空之探險隊「角山」", - "plains": "空之探險隊「天空頂端(草原)」", - "power_plant": "空之探險隊「電氣平原 深處」", - "ruins": "空之探險隊「封印岩地 深處」", + "plains": "Firel - Route 888", + "power_plant": "Firel - The Klink", + "ruins": "Lmz - Ancient Ruins", "sea": "Andr06 - 海洋之秘", "seabed": "Firel - 海底", "slum": "Andr06 - 狡猾的雪吞蟲", @@ -117,7 +120,7 @@ "tall_grass": "空之探險隊「濃霧森林」", "temple": "空之探險隊「守護洞穴」", "town": "空之探險隊「隨機迷宮3」", - "volcano": "空之探險隊「熱水洞窟」", + "volcano": "Firel - Twisturn Volcano", "wasteland": "空之探險隊「夢幻高原」", "encounter_ace_trainer": "黑白 「視線!精英訓練師」", @@ -137,5 +140,11 @@ "heal": "黑白「寶可夢回複」", "menu": "空之探險隊「歡迎來到寶可夢的世界」", - "title": "空之探險隊「主題曲」" + "title": "空之探險隊「主題曲」", + + "mystery_encounter_weird_dream": "PMD EoS Temporal Spire", + "mystery_encounter_fun_and_games": "PMD EoS Guildmaster Wigglytuff", + "mystery_encounter_gen_5_gts": "BW GTS", + "mystery_encounter_gen_6_gts": "XY GTS", + "mystery_encounter_delibirdy": "Firel - DeliDelivery!" } diff --git a/src/locales/zh_TW/config.ts b/src/locales/zh_TW/config.ts index cf505d683a5..d1388d336cc 100644 --- a/src/locales/zh_TW/config.ts +++ b/src/locales/zh_TW/config.ts @@ -53,7 +53,49 @@ import terrain from "./terrain.json"; import modifierSelectUiHandler from "./modifier-select-ui-handler.json"; import moveTriggers from "./move-trigger.json"; import runHistory from "./run-history.json"; +import mysteryEncounterMessages from "./mystery-encounter-messages.json"; +import lostAtSea from "./mystery-encounters/lost-at-sea-dialogue.json"; +import mysteriousChest from "./mystery-encounters/mysterious-chest-dialogue.json"; +import mysteriousChallengers from "./mystery-encounters/mysterious-challengers-dialogue.json"; +import darkDeal from "./mystery-encounters/dark-deal-dialogue.json"; +import departmentStoreSale from "./mystery-encounters/department-store-sale-dialogue.json"; +import fieldTrip from "./mystery-encounters/field-trip-dialogue.json"; +import fieryFallout from "./mystery-encounters/fiery-fallout-dialogue.json"; +import fightOrFlight from "./mystery-encounters/fight-or-flight-dialogue.json"; +import safariZone from "./mystery-encounters/safari-zone-dialogue.json"; +import shadyVitaminDealer from "./mystery-encounters/shady-vitamin-dealer-dialogue.json"; +import slumberingSnorlax from "./mystery-encounters/slumbering-snorlax-dialogue.json"; +import trainingSession from "./mystery-encounters/training-session-dialogue.json"; +import theStrongStuff from "./mystery-encounters/the-strong-stuff-dialogue.json"; +import pokemonSalesman from "./mystery-encounters/the-pokemon-salesman-dialogue.json"; +import offerYouCantRefuse from "./mystery-encounters/an-offer-you-cant-refuse-dialogue.json"; +import delibirdy from "./mystery-encounters/delibirdy-dialogue.json"; +import absoluteAvarice from "./mystery-encounters/absolute-avarice-dialogue.json"; +import aTrainersTest from "./mystery-encounters/a-trainers-test-dialogue.json"; +import trashToTreasure from "./mystery-encounters/trash-to-treasure-dialogue.json"; +import berriesAbound from "./mystery-encounters/berries-abound-dialogue.json"; +import clowningAround from "./mystery-encounters/clowning-around-dialogue.json"; +import partTimer from "./mystery-encounters/part-timer-dialogue.json"; +import dancingLessons from "./mystery-encounters/dancing-lessons-dialogue.json"; +import weirdDream from "./mystery-encounters/weird-dream-dialogue.json"; +import theWinstrateChallenge from "./mystery-encounters/the-winstrate-challenge-dialogue.json"; +import teleportingHijinks from "./mystery-encounters/teleporting-hijinks-dialogue.json"; +import bugTypeSuperfan from "./mystery-encounters/bug-type-superfan-dialogue.json"; +import funAndGames from "./mystery-encounters/fun-and-games-dialogue.json"; +import uncommonBreed from "./mystery-encounters/uncommon-breed-dialogue.json"; +import globalTradeSystem from "./mystery-encounters/global-trade-system-dialogue.json"; +import expertPokemonBreeder from "./mystery-encounters/the-expert-pokemon-breeder-dialogue.json"; +/** + * Dialogue/Text token injection patterns that can be used: + * - `$` will be treated as a new line for Message and Dialogue strings. + * - `@d{}` will add a time delay to text animation for Message and Dialogue strings. + * - `@s{}` will play a specified sound effect for Message and Dialogue strings. + * - `@f{}` will fade the screen to black for the given duration, then fade back in for Message and Dialogue strings. + * - `{{}}` (MYSTERY ENCOUNTERS ONLY) will auto-inject the matching dialogue token value that is stored in {@link IMysteryEncounter.dialogueTokens}. + * - (see [i18next interpolations](https://www.i18next.com/translation-function/interpolation)) for more details. + * - `@[]{}` (STATIC TEXT ONLY, NOT USEABLE WITH {@link UI.showText()} OR {@link UI.showDialogue()}) will auto-color the given text to a specified {@link TextStyle} (e.g. `TextStyle.SUMMARY_GREEN`). + */ export const zhTwConfig = { ability, abilityTriggers, @@ -110,4 +152,40 @@ export const zhTwConfig = { modifierSelectUiHandler, moveTriggers, runHistory, + mysteryEncounter: { + // DO NOT REMOVE + "unit_test_dialogue": "{{test}}{{test}} {{test{{test}}}} {{test1}} {{test\}} {{test\\}} {{test\\\}} {test}}", + mysteriousChallengers, + mysteriousChest, + darkDeal, + fightOrFlight, + slumberingSnorlax, + trainingSession, + departmentStoreSale, + shadyVitaminDealer, + fieldTrip, + safariZone, + lostAtSea, + fieryFallout, + theStrongStuff, + pokemonSalesman, + offerYouCantRefuse, + delibirdy, + absoluteAvarice, + aTrainersTest, + trashToTreasure, + berriesAbound, + clowningAround, + partTimer, + dancingLessons, + weirdDream, + theWinstrateChallenge, + teleportingHijinks, + bugTypeSuperfan, + funAndGames, + uncommonBreed, + globalTradeSystem, + expertPokemonBreeder + }, + mysteryEncounterMessages }; diff --git a/src/locales/zh_TW/dialogue.json b/src/locales/zh_TW/dialogue.json index 99427ac5f14..43cfad8b610 100644 --- a/src/locales/zh_TW/dialogue.json +++ b/src/locales/zh_TW/dialogue.json @@ -787,6 +787,116 @@ "1": "沒有遠見的蠢貨會繼續玷汙這個美麗的世界。" } }, + "stat_trainer_buck": { + "encounter": { + "1": "...I'm telling you right now. I'm seriously tough. Act surprised!", + "2": "I can feel my Pokémon shivering inside their Pokéballs!" + }, + "victory": { + "1": "Heeheehee!\nSo hot, you!", + "2": "Heeheehee!\nSo hot, you!" + }, + "defeat": { + "1": "Whoa! You're all out of gas, I guess.", + "2": "Whoa! You're all out of gas, I guess." + } + }, + "stat_trainer_cheryl": { + "encounter": { + "1": "My Pokémon have been itching for a battle.", + "2": "I should warn you, my Pokémon can be quite rambunctious." + }, + "victory": { + "1": "Striking the right balance of offense and defense... It's not easy to do.", + "2": "Striking the right balance of offense and defense... It's not easy to do." + }, + "defeat": { + "1": "Do your Pokémon need any healing?", + "2": "Do your Pokémon need any healing?" + } + }, + "stat_trainer_marley": { + "encounter": { + "1": "... OK.\nI'll do my best.", + "2": "... OK.\nI... won't lose...!" + }, + "victory": { + "1": "... Awww.", + "2": "... Awww." + }, + "defeat": { + "1": "... Goodbye.", + "2": "... Goodbye." + } + }, + "stat_trainer_mira": { + "encounter": { + "1": "You will be shocked by Mira!", + "2": "Mira will show you that Mira doesn't get lost anymore!" + }, + "victory": { + "1": "Mira wonders if she can get very far in this land.", + "2": "Mira wonders if she can get very far in this land." + }, + "defeat": { + "1": "Mira knew she would win!", + "2": "Mira knew she would win!" + } + }, + "stat_trainer_riley": { + "encounter": { + "1": "Battling is our way of greeting!", + "2": "We're pulling out all the stops to put your Pokémon down." + }, + "victory": { + "1": "At times we battle, and sometimes we team up...$It's great how Trainers can interact.", + "2": "At times we battle, and sometimes we team up...$It's great how Trainers can interact." + }, + "defeat": { + "1": "You put up quite the display.\nBetter luck next time.", + "2": "You put up quite the display.\nBetter luck next time." + } + }, + "winstrates_victor": { + "encounter": { + "1": "That's the spirit! I like you!" + }, + "victory": { + "1": "A-ha! You're stronger than I thought!" + } + }, + "winstrates_victoria": { + "encounter": { + "1": "My goodness! Aren't you young?$You must be quite the trainer to beat my husband, though.$Now I suppose it's my turn to battle!" + }, + "victory": { + "1": "Uwah! Just how strong are you?!" + } + }, + "winstrates_vivi": { + "encounter": { + "1": "You're stronger than Mom? Wow!$But I'm strong, too!\nReally! Honestly!" + }, + "victory": { + "1": "Huh? Did I really lose?\nSnivel... Grandmaaa!" + } + }, + "winstrates_vicky": { + "encounter": { + "1": "How dare you make my precious\ngranddaughter cry!$I see I need to teach you a lesson.\nPrepare to feel the sting of defeat!" + }, + "victory": { + "1": "Whoa! So strong!\nMy granddaughter wasn't lying." + } + }, + "winstrates_vito": { + "encounter": { + "1": "I trained together with my whole family,\nevery one of us!$I'm not losing to anyone!" + }, + "victory": { + "1": "I was better than everyone in my family.\nI've never lost before..." + } + }, "brock": { "encounter": { "1": "我對岩石屬性寶可夢的專精會擊敗你!來吧!", diff --git a/src/locales/zh_TW/egg.json b/src/locales/zh_TW/egg.json index 0178848a0d5..6667fccb826 100644 --- a/src/locales/zh_TW/egg.json +++ b/src/locales/zh_TW/egg.json @@ -11,6 +11,7 @@ "gachaTypeLegendary": "傳說概率上升", "gachaTypeMove": "稀有概率上升", "gachaTypeShiny": "閃光概率上升", + "eventType": "Mystery Event", "selectMachine": "選擇一個機器。", "notEnoughVouchers": "你沒有足夠的兌換券!", "tooManyEggs": "你的蛋太多啦!", diff --git a/src/locales/zh_TW/modifier-select-ui-handler.json b/src/locales/zh_TW/modifier-select-ui-handler.json index 84ebbbfef6a..d47ea265900 100644 --- a/src/locales/zh_TW/modifier-select-ui-handler.json +++ b/src/locales/zh_TW/modifier-select-ui-handler.json @@ -8,5 +8,7 @@ "lockRaritiesDesc": "在刷新時鎖定道具稀有度(影響刷新費用)", "checkTeamDesc": "檢查隊伍或使用形態改變道具", "rerollCost": "₽{{formattedMoney}}", - "itemCost": "₽{{formattedMoney}}" + "itemCost": "₽{{formattedMoney}}", + "continueNextWaveButton": "Continue", + "continueNextWaveDescription": "Continue to the next wave" } diff --git a/src/locales/zh_TW/modifier-type.json b/src/locales/zh_TW/modifier-type.json index 6ff593ddba7..f305c0e2d62 100644 --- a/src/locales/zh_TW/modifier-type.json +++ b/src/locales/zh_TW/modifier-type.json @@ -68,6 +68,20 @@ "BaseStatBoosterModifierType": { "description": "增加持有者的{{stat}}10%,個體值越高堆疊\n上限越高。" }, + "PokemonBaseStatTotalModifierType": { + "name": "Shuckle Juice", + "description": "{{increaseDecrease}} all of the holder's base stats by {{statValue}}. You were {{blessCurse}} by the Shuckle.", + "extra": { + "increase": "Increases", + "decrease": "Decreases", + "blessed": "blessed", + "cursed": "cursed" + } + }, + "PokemonBaseStatFlatModifierType": { + "name": "Old Gateau", + "description": "Increases the holder's {{stats}} base stats by {{statValue}}. Found after a strange dream." + }, "AllPokemonFullHpRestoreModifierType": { "description": "所有寶可夢完全恢復HP。" }, @@ -401,7 +415,13 @@ "ENEMY_FUSED_CHANCE": { "name": "融合硬幣", "description": "增加1%野生融合寶可夢出現概率。" - } + }, + + "MYSTERY_ENCOUNTER_SHUCKLE_JUICE": { "name": "Shuckle Juice" }, + "MYSTERY_ENCOUNTER_BLACK_SLUDGE": { "name": "Black Sludge", "description": "The stench is so powerful that shops will only sell you items at a steep cost increase." }, + "MYSTERY_ENCOUNTER_MACHO_BRACE": { "name": "Macho Brace", "description": "Defeating a Pokémon grants the holder a Macho Brace stack. Each stack slightly boosts stats, with an extra bonus at max stacks." }, + "MYSTERY_ENCOUNTER_OLD_GATEAU": { "name": "Old Gateau", "description": "Increases the holder's {{stats}} stats by {{statValue}}." }, + "MYSTERY_ENCOUNTER_GOLDEN_BUG_NET": { "name": "Golden Bug Net", "description": "Imbues the owner with luck to find Bug Type Pokémon more often. Has a strange heft to it." } }, "SpeciesBoosterItem": { "LIGHT_BALL": { diff --git a/src/locales/zh_TW/move-trigger.json b/src/locales/zh_TW/move-trigger.json index db88f6df57f..2cd33a3a416 100644 --- a/src/locales/zh_TW/move-trigger.json +++ b/src/locales/zh_TW/move-trigger.json @@ -65,6 +65,7 @@ "suppressAbilities": "{{pokemonName}}的特性\n變得無效了!", "revivalBlessing": "{{pokemonName}}復活了!", "swapArenaTags": "{{pokemonName}}\n交換了雙方的場地效果!", + "chillyReception": "{{pokemonName}}\n說了冷笑話!", "exposedMove": "{{pokemonName}}識破了\n{{targetPokemonName}}的原形!", "safeguard": "{{targetName}}\n正受到神秘之幕的保護!", "afterYou": "{{pokemonName}}\n接受了對手的好意!" diff --git a/src/locales/zh_TW/move.json b/src/locales/zh_TW/move.json index b8c4ec05033..3a8956b1bf9 100644 --- a/src/locales/zh_TW/move.json +++ b/src/locales/zh_TW/move.json @@ -3129,7 +3129,7 @@ }, "auraWheel": { "name": "氣場輪", - "effect": "用儲存在頰囊裏的能量進行\n攻擊,並提高自己的速度。\n其屬性會隨着莫魯貝可的樣\n子而改變" + "effect": "用儲存在頰囊裏的能量進行\n攻擊,並提高自己的速度。\n如果由莫魯貝可使用,\n其屬性會隨着它的樣子而改變" }, "breakingSwipe": { "name": "廣域破壞", diff --git a/src/locales/zh_TW/mystery-encounter-messages.json b/src/locales/zh_TW/mystery-encounter-messages.json new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/src/locales/zh_TW/mystery-encounter-messages.json @@ -0,0 +1 @@ +{} diff --git a/src/locales/zh_TW/mystery-encounters/a-trainers-test-dialogue.json b/src/locales/zh_TW/mystery-encounters/a-trainers-test-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/zh_TW/mystery-encounters/a-trainers-test-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/zh_TW/mystery-encounters/absolute-avarice-dialogue.json b/src/locales/zh_TW/mystery-encounters/absolute-avarice-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/zh_TW/mystery-encounters/absolute-avarice-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/zh_TW/mystery-encounters/an-offer-you-cant-refuse-dialogue.json b/src/locales/zh_TW/mystery-encounters/an-offer-you-cant-refuse-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/zh_TW/mystery-encounters/an-offer-you-cant-refuse-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/zh_TW/mystery-encounters/berries-abound-dialogue.json b/src/locales/zh_TW/mystery-encounters/berries-abound-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/zh_TW/mystery-encounters/berries-abound-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/zh_TW/mystery-encounters/bug-type-superfan-dialogue.json b/src/locales/zh_TW/mystery-encounters/bug-type-superfan-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/zh_TW/mystery-encounters/bug-type-superfan-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/zh_TW/mystery-encounters/clowning-around-dialogue.json b/src/locales/zh_TW/mystery-encounters/clowning-around-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/zh_TW/mystery-encounters/clowning-around-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/zh_TW/mystery-encounters/dancing-lessons-dialogue.json b/src/locales/zh_TW/mystery-encounters/dancing-lessons-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/zh_TW/mystery-encounters/dancing-lessons-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/zh_TW/mystery-encounters/dark-deal-dialogue.json b/src/locales/zh_TW/mystery-encounters/dark-deal-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/zh_TW/mystery-encounters/dark-deal-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/zh_TW/mystery-encounters/delibirdy-dialogue.json b/src/locales/zh_TW/mystery-encounters/delibirdy-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/zh_TW/mystery-encounters/delibirdy-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/zh_TW/mystery-encounters/department-store-sale-dialogue.json b/src/locales/zh_TW/mystery-encounters/department-store-sale-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/zh_TW/mystery-encounters/department-store-sale-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/zh_TW/mystery-encounters/field-trip-dialogue.json b/src/locales/zh_TW/mystery-encounters/field-trip-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/zh_TW/mystery-encounters/field-trip-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/zh_TW/mystery-encounters/fiery-fallout-dialogue.json b/src/locales/zh_TW/mystery-encounters/fiery-fallout-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/zh_TW/mystery-encounters/fiery-fallout-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/zh_TW/mystery-encounters/fight-or-flight-dialogue.json b/src/locales/zh_TW/mystery-encounters/fight-or-flight-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/zh_TW/mystery-encounters/fight-or-flight-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/zh_TW/mystery-encounters/fun-and-games-dialogue.json b/src/locales/zh_TW/mystery-encounters/fun-and-games-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/zh_TW/mystery-encounters/fun-and-games-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/zh_TW/mystery-encounters/global-trade-system-dialogue.json b/src/locales/zh_TW/mystery-encounters/global-trade-system-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/zh_TW/mystery-encounters/global-trade-system-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/zh_TW/mystery-encounters/lost-at-sea-dialogue.json b/src/locales/zh_TW/mystery-encounters/lost-at-sea-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/zh_TW/mystery-encounters/lost-at-sea-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/zh_TW/mystery-encounters/mysterious-challengers-dialogue.json b/src/locales/zh_TW/mystery-encounters/mysterious-challengers-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/zh_TW/mystery-encounters/mysterious-challengers-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/zh_TW/mystery-encounters/mysterious-chest-dialogue.json b/src/locales/zh_TW/mystery-encounters/mysterious-chest-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/zh_TW/mystery-encounters/mysterious-chest-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/zh_TW/mystery-encounters/part-timer-dialogue.json b/src/locales/zh_TW/mystery-encounters/part-timer-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/zh_TW/mystery-encounters/part-timer-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/zh_TW/mystery-encounters/safari-zone-dialogue.json b/src/locales/zh_TW/mystery-encounters/safari-zone-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/zh_TW/mystery-encounters/safari-zone-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/zh_TW/mystery-encounters/shady-vitamin-dealer-dialogue.json b/src/locales/zh_TW/mystery-encounters/shady-vitamin-dealer-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/zh_TW/mystery-encounters/shady-vitamin-dealer-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/zh_TW/mystery-encounters/slumbering-snorlax-dialogue.json b/src/locales/zh_TW/mystery-encounters/slumbering-snorlax-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/zh_TW/mystery-encounters/slumbering-snorlax-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/zh_TW/mystery-encounters/teleporting-hijinks-dialogue.json b/src/locales/zh_TW/mystery-encounters/teleporting-hijinks-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/zh_TW/mystery-encounters/teleporting-hijinks-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/zh_TW/mystery-encounters/the-expert-pokemon-breeder-dialogue.json b/src/locales/zh_TW/mystery-encounters/the-expert-pokemon-breeder-dialogue.json new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/src/locales/zh_TW/mystery-encounters/the-expert-pokemon-breeder-dialogue.json @@ -0,0 +1 @@ +{} diff --git a/src/locales/zh_TW/mystery-encounters/the-pokemon-salesman-dialogue.json b/src/locales/zh_TW/mystery-encounters/the-pokemon-salesman-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/zh_TW/mystery-encounters/the-pokemon-salesman-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/zh_TW/mystery-encounters/the-strong-stuff-dialogue.json b/src/locales/zh_TW/mystery-encounters/the-strong-stuff-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/zh_TW/mystery-encounters/the-strong-stuff-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/zh_TW/mystery-encounters/the-winstrate-challenge-dialogue.json b/src/locales/zh_TW/mystery-encounters/the-winstrate-challenge-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/zh_TW/mystery-encounters/the-winstrate-challenge-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/zh_TW/mystery-encounters/training-session-dialogue.json b/src/locales/zh_TW/mystery-encounters/training-session-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/zh_TW/mystery-encounters/training-session-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/zh_TW/mystery-encounters/trash-to-treasure-dialogue.json b/src/locales/zh_TW/mystery-encounters/trash-to-treasure-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/zh_TW/mystery-encounters/trash-to-treasure-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/zh_TW/mystery-encounters/uncommon-breed-dialogue.json b/src/locales/zh_TW/mystery-encounters/uncommon-breed-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/zh_TW/mystery-encounters/uncommon-breed-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/zh_TW/mystery-encounters/weird-dream-dialogue.json b/src/locales/zh_TW/mystery-encounters/weird-dream-dialogue.json new file mode 100644 index 00000000000..9e26dfeeb6e --- /dev/null +++ b/src/locales/zh_TW/mystery-encounters/weird-dream-dialogue.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/locales/zh_TW/party-ui-handler.json b/src/locales/zh_TW/party-ui-handler.json index ef82d1a3ddc..e2abed5914d 100644 --- a/src/locales/zh_TW/party-ui-handler.json +++ b/src/locales/zh_TW/party-ui-handler.json @@ -15,6 +15,7 @@ "UNPAUSE_EVOLUTION": "解除進化暫停", "REVIVE": "複活", "RENAME": "起名", + "SELECT": "Select", "choosePokemon": "選擇一只寶可夢。", "doWhatWithThisPokemon": "要對寶可夢做什麽?", "noEnergy": "{{pokemonName}}沒有力氣戰鬥了!", diff --git a/src/locales/zh_TW/pokemon-form.json b/src/locales/zh_TW/pokemon-form.json index f1fb4dff599..104f8f5ea49 100644 --- a/src/locales/zh_TW/pokemon-form.json +++ b/src/locales/zh_TW/pokemon-form.json @@ -1,4 +1,5 @@ { + "pikachu": "Normal", "pikachuCosplay": "換裝", "pikachuCoolCosplay": "搖滾巨星", "pikachuBeautyCosplay": "貴婦", @@ -6,7 +7,9 @@ "pikachuSmartCosplay": "博士", "pikachuToughCosplay": "面罩摔跤手", "pikachuPartner": "搭檔", + "eevee": "Normal", "eeveePartner": "搭檔", + "pichu": "Normal", "pichuSpiky": "刺刺耳", "unownA": "A", "unownB": "B", @@ -36,36 +39,65 @@ "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", "rotomHeat": "加熱", "rotomWash": "清洗", "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": "雪國花紋", @@ -91,6 +123,7 @@ "flabebeOrange": "橙花", "flabebeBlue": "藍花", "flabebeWhite": "白花", + "furfrou": "Natural Form", "furfrouHeart": "心形造型", "furfrouStar": "星形造型", "furfrouDiamond": "菱形造型", @@ -100,6 +133,11 @@ "furfrouLaReine": "女王造型", "furfrouKabuki": "歌舞伎造型", "furfrouPharaoh": "國王造型", + "espurrMale": "Male", + "espurrFemale": "Female", + "honedgeShiled": "Shield", + "honedgeBlade": "Blade", + "pumpkaboo": "Average Size", "pumpkabooSmall": "小尺寸", "pumpkabooLarge": "大尺寸", "pumpkabooSuper": "特大尺寸", @@ -110,11 +148,37 @@ "zygarde50Pc": "50%形態 群聚變形", "zygarde10Pc": "10%形態 群聚變形", "zygardeComplete": "完全體形態", + "hoopa": "Confined", + "hoopaUnbound": "Unbound", "oricorioBaile": "熱辣熱辣風格", "oricorioPompom": "啪滋啪滋風格", "oricorioPau": "呼拉呼拉風格", "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": "黃色核心", @@ -131,25 +195,66 @@ "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": "頂尖形態", @@ -164,6 +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", "paldeaTaurosCombat": "鬥戰種", "paldeaTaurosBlaze": "火熾種", "paldeaTaurosAqua": "水瀾種" diff --git a/src/locales/zh_TW/trainer-classes.json b/src/locales/zh_TW/trainer-classes.json index d0b0fed7e5d..7469991171e 100644 --- a/src/locales/zh_TW/trainer-classes.json +++ b/src/locales/zh_TW/trainer-classes.json @@ -117,5 +117,8 @@ "plasma_grunts": "等离子队手下們", "flare_grunt": "闪焰队手下", "flare_grunt_female": "闪焰队手下", - "flare_grunts": "闪焰队手下們" + "flare_grunts": "闪焰队手下們", + "star_grunt": "Star Grunt", + "star_grunt_female": "Star Grunt", + "star_grunts": "Star Grunts" } diff --git a/src/locales/zh_TW/trainer-names.json b/src/locales/zh_TW/trainer-names.json index 04399cf19af..266927e7b09 100644 --- a/src/locales/zh_TW/trainer-names.json +++ b/src/locales/zh_TW/trainer-names.json @@ -141,6 +141,11 @@ "faba": "扎奧博", "plumeria": "布爾美麗", "oleana": "奧利薇", + "giacomo": "Giacomo", + "mela": "Mela", + "atticus": "Atticus", + "ortega": "Ortega", + "eri": "Eri", "maxie": "赤焰松", "archie": "水梧桐", @@ -150,6 +155,7 @@ "lusamine": "露莎米奈", "guzma": "古茲馬", "rose": "洛茲", + "cassiopeia": "牡丹", "blue_red_double": "青綠 & 赤紅", "red_blue_double": "赤紅 & 青綠", @@ -160,5 +166,18 @@ "alder_iris_double": "阿戴克 & 艾莉絲", "iris_alder_double": "艾莉絲 & 阿戴克", "marnie_piers_double": "瑪俐 & 聶梓", - "piers_marnie_double": "聶梓 & 瑪俐" + "piers_marnie_double": "聶梓 & 瑪俐", + + "buck": "Buck", + "cheryl": "Cheryl", + "marley": "Marley", + "mira": "Mira", + "riley": "Riley", + "victor": "Victor", + "victoria": "Victoria", + "vivi": "Vivi", + "vicky": "Vicky", + "vito": "Vito", + "bug_type_superfan": "Bug-Type Superfan", + "expert_pokemon_breeder": "Expert Pokémon Breeder" } diff --git a/src/locales/zh_TW/trainer-titles.json b/src/locales/zh_TW/trainer-titles.json index 80b2807e7b5..4b95c5ea184 100644 --- a/src/locales/zh_TW/trainer-titles.json +++ b/src/locales/zh_TW/trainer-titles.json @@ -16,6 +16,10 @@ "galactic_boss": "銀河隊老大", "plasma_boss": "等離子隊老大", "flare_boss": "閃焰隊老大", + "aether_boss": "Aether President", + "skull_boss": "Team Skull Boss", + "macro_boss": "Macro Cosmos President", + "star_boss": "Team Star Leader", "rocket_admin": "火箭隊幹部", "rocket_admin_female": "火箭隊幹部", @@ -28,5 +32,11 @@ "plasma_sage": "等離子隊賢人", "plasma_admin": "等離子隊幹部", "flare_admin": "閃焰隊幹部", - "flare_admin_female": "閃焰隊幹部" + "flare_admin_female": "閃焰隊幹部", + "aether_admin": "Aether Foundation Admin", + "skull_admin": "Team Skull Admin", + "macro_admin": "Macro Cosmos", + "star_admin": "Team Star Squad Boss", + + "the_winstrates": "The Winstrates'" } diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index ce2ffc6a462..2b4f910034b 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -1288,6 +1288,21 @@ function skipInClassicAfterWave(wave: integer, defaultWeight: integer): Weighted function skipInLastClassicWaveOrDefault(defaultWeight: integer) : WeightedModifierTypeWeightFunc { return skipInClassicAfterWave(199, defaultWeight); } + +/** + * High order function that returns a WeightedModifierTypeWeightFunc to ensure Lures don't spawn on Classic 199 + * or if the lure still has over 60% of its duration left + * @param maxBattles The max battles the lure type in question lasts. 10 for green, 15 for Super, 30 for Max + * @param weight The desired weight for the lure when it does spawn + * @returns A WeightedModifierTypeWeightFunc + */ +function lureWeightFunc(maxBattles: number, weight: number): WeightedModifierTypeWeightFunc { + return (party: Pokemon[]) => { + const lures = party[0].scene.getModifiers(Modifiers.DoubleBattleChanceBoosterModifier); + return !(party[0].scene.gameMode.isClassic && party[0].scene.currentBattle.waveIndex === 199) && (lures.length === 0 || lures.filter(m => m.getMaxBattles() === maxBattles && m.getBattleCount() >= maxBattles * 0.6).length === 0) ? weight : 0; + }; +} + class WeightedModifierType { public modifierType: ModifierType; public weight: integer | WeightedModifierTypeWeightFunc; @@ -1611,7 +1626,7 @@ const modifierPool: ModifierPool = { const thresholdPartyMemberCount = Math.min(party.filter(p => p.hp && p.getMoveset().filter(m => m?.ppUsed && (m.getMovePp() - m.ppUsed) <= 5 && m.ppUsed >= Math.floor(m.getMovePp() / 2)).length).length, 3); return thresholdPartyMemberCount; }, 3), - new WeightedModifierType(modifierTypes.LURE, skipInLastClassicWaveOrDefault(2)), + new WeightedModifierType(modifierTypes.LURE, lureWeightFunc(10, 2)), new WeightedModifierType(modifierTypes.TEMP_STAT_STAGE_BOOSTER, 4), new WeightedModifierType(modifierTypes.BERRY, 2), new WeightedModifierType(modifierTypes.TM_COMMON, 2), @@ -1668,7 +1683,7 @@ const modifierPool: ModifierPool = { return thresholdPartyMemberCount; }, 3), new WeightedModifierType(modifierTypes.DIRE_HIT, 4), - new WeightedModifierType(modifierTypes.SUPER_LURE, skipInLastClassicWaveOrDefault(4)), + new WeightedModifierType(modifierTypes.SUPER_LURE, lureWeightFunc(15, 4)), new WeightedModifierType(modifierTypes.NUGGET, skipInLastClassicWaveOrDefault(5)), new WeightedModifierType(modifierTypes.EVOLUTION_ITEM, (party: Pokemon[]) => { return Math.min(Math.ceil(party[0].scene.currentBattle.waveIndex / 15), 8); @@ -1691,7 +1706,7 @@ const modifierPool: ModifierPool = { }), [ModifierTier.ULTRA]: [ new WeightedModifierType(modifierTypes.ULTRA_BALL, (party: Pokemon[]) => (hasMaximumBalls(party, PokeballType.ULTRA_BALL)) ? 0 : 15, 15), - new WeightedModifierType(modifierTypes.MAX_LURE, skipInLastClassicWaveOrDefault(4)), + new WeightedModifierType(modifierTypes.MAX_LURE, lureWeightFunc(30, 4)), new WeightedModifierType(modifierTypes.BIG_NUGGET, skipInLastClassicWaveOrDefault(12)), new WeightedModifierType(modifierTypes.PP_MAX, 3), new WeightedModifierType(modifierTypes.MINT, 4), diff --git a/src/phases/encounter-phase.ts b/src/phases/encounter-phase.ts index 16e6a591d9e..25b4398025f 100644 --- a/src/phases/encounter-phase.ts +++ b/src/phases/encounter-phase.ts @@ -147,7 +147,7 @@ export class EncounterPhase extends BattlePhase { loadEnemyAssets.push(enemyPokemon.loadAssets()); - console.log(getPokemonNameWithAffix(enemyPokemon), enemyPokemon.species.speciesId, enemyPokemon.stats); + console.log(`Pokemon: ${getPokemonNameWithAffix(enemyPokemon)}`, `Species ID: ${enemyPokemon.species.speciesId}`, `Stats: ${enemyPokemon.stats}`, `Ability: ${enemyPokemon.getAbility().name}`, `Passive Ability: ${enemyPokemon.getPassiveAbility().name}`); return true; }); diff --git a/src/phases/form-change-phase.ts b/src/phases/form-change-phase.ts index 33c1f8e8cef..1f18457146d 100644 --- a/src/phases/form-change-phase.ts +++ b/src/phases/form-change-phase.ts @@ -9,6 +9,7 @@ import PartyUiHandler from "../ui/party-ui-handler"; import { getPokemonNameWithAffix } from "../messages"; import { EndEvolutionPhase } from "./end-evolution-phase"; import { EvolutionPhase } from "./evolution-phase"; +import { BattlerTagType } from "#app/enums/battler-tag-type"; export class FormChangePhase extends EvolutionPhase { private formChange: SpeciesFormChange; @@ -157,6 +158,7 @@ export class FormChangePhase extends EvolutionPhase { } end(): void { + this.pokemon.findAndRemoveTags(t => t.tagType === BattlerTagType.AUTOTOMIZED); if (this.modal) { this.scene.ui.revertMode().then(() => { if (this.scene.ui.getMode() === Mode.PARTY) { diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index c3199166e84..263a576c4f0 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -1,6 +1,6 @@ import BattleScene from "#app/battle-scene"; import { BattlerIndex } from "#app/battle"; -import { applyPreAttackAbAttrs, AddSecondStrikeAbAttr, IgnoreMoveEffectsAbAttr, applyPostDefendAbAttrs, PostDefendAbAttr, applyPostAttackAbAttrs, PostAttackAbAttr, MaxMultiHitAbAttr, AlwaysHitAbAttr } from "#app/data/ability"; +import { applyPreAttackAbAttrs, AddSecondStrikeAbAttr, IgnoreMoveEffectsAbAttr, applyPostDefendAbAttrs, PostDefendAbAttr, applyPostAttackAbAttrs, PostAttackAbAttr, MaxMultiHitAbAttr, AlwaysHitAbAttr, TypeImmunityAbAttr } from "#app/data/ability"; import { ArenaTagSide, ConditionalProtectTag } from "#app/data/arena-tag"; import { MoveAnim } from "#app/data/battle-anims"; import { BattlerTagLapseType, DamageProtectedTag, ProtectedTag, SemiInvulnerableTag, SubstituteTag } from "#app/data/battler-tags"; @@ -97,12 +97,17 @@ export class MoveEffectPhase extends PokemonPhase { */ const targetHitChecks = Object.fromEntries(targets.map(p => [p.getBattlerIndex(), this.hitCheck(p)])); const hasActiveTargets = targets.some(t => t.isActive(true)); + + /** Check if the target is immune via ability to the attacking move */ + const isImmune = targets[0].hasAbilityWithAttr(TypeImmunityAbAttr) && (targets[0].getAbility()?.getAttrs(TypeImmunityAbAttr)?.[0]?.getImmuneType() === user.getMoveType(move)); + /** * If no targets are left for the move to hit (FAIL), or the invoked move is single-target * (and not random target) and failed the hit check against its target (MISS), log the move * as FAILed or MISSed (depending on the conditions above) and end this phase. */ - if (!hasActiveTargets || (!move.hasAttr(VariableTargetAttr) && !move.isMultiTarget() && !targetHitChecks[this.targets[0]] && !targets[0].getTag(ProtectedTag))) { + + if (!hasActiveTargets || (!move.hasAttr(VariableTargetAttr) && !move.isMultiTarget() && !targetHitChecks[this.targets[0]] && !targets[0].getTag(ProtectedTag) && !isImmune)) { this.stopMultiHit(); if (hasActiveTargets) { this.scene.queueMessage(i18next.t("battle:attackMissed", { pokemonNameWithAffix: this.getTarget()? getPokemonNameWithAffix(this.getTarget()!) : "" })); @@ -132,7 +137,7 @@ export class MoveEffectPhase extends PokemonPhase { const hasConditionalProtectApplied = new Utils.BooleanHolder(false); /** Does the applied conditional protection bypass Protect-ignoring effects? */ const bypassIgnoreProtect = new Utils.BooleanHolder(false); - // If the move is not targeting a Pokemon on the user's side, try to apply conditional protection effects + /** If the move is not targeting a Pokemon on the user's side, try to apply conditional protection effects */ if (!this.move.getMove().isAllyTarget()) { this.scene.arena.applyTagsForSide(ConditionalProtectTag, targetSide, hasConditionalProtectApplied, user, target, move.id, bypassIgnoreProtect); } @@ -142,11 +147,14 @@ export class MoveEffectPhase extends PokemonPhase { && (hasConditionalProtectApplied.value || (!target.findTags(t => t instanceof DamageProtectedTag).length && target.findTags(t => t instanceof ProtectedTag).find(t => target.lapseTag(t.tagType))) || (this.move.getMove().category !== MoveCategory.STATUS && target.findTags(t => t instanceof DamageProtectedTag).find(t => target.lapseTag(t.tagType)))); + /** Is the pokemon immune due to an ablility? */ + const isImmune = target.hasAbilityWithAttr(TypeImmunityAbAttr) && (target.getAbility()?.getAttrs(TypeImmunityAbAttr)?.[0]?.getImmuneType() === user.getMoveType(move)); + /** * If the move missed a target, stop all future hits against that target * and move on to the next target (if there is one). */ - if (!isProtected && !targetHitChecks[target.getBattlerIndex()]) { + if (!isImmune && !isProtected && !targetHitChecks[target.getBattlerIndex()]) { this.stopMultiHit(target); this.scene.queueMessage(i18next.t("battle:attackMissed", { pokemonNameWithAffix: getPokemonNameWithAffix(target) })); if (moveHistoryEntry.result === MoveResult.PENDING) { diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index e63096360dd..0a75c32bac3 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -74,7 +74,7 @@ export class MovePhase extends BattlePhase { if (!this.followUp) { if (this.move.getMove().checkFlag(MoveFlags.IGNORE_ABILITIES, this.pokemon, null)) { - this.scene.arena.setIgnoreAbilities(); + this.scene.arena.setIgnoreAbilities(true, this.pokemon.getBattlerIndex()); } } else { this.pokemon.turnData.hitsLeft = 0; // TODO: is `0` correct? diff --git a/src/phases/obtain-status-effect-phase.ts b/src/phases/obtain-status-effect-phase.ts index 93bf4cd41d5..bf38c432394 100644 --- a/src/phases/obtain-status-effect-phase.ts +++ b/src/phases/obtain-status-effect-phase.ts @@ -9,26 +9,26 @@ import { PokemonPhase } from "./pokemon-phase"; import { PostTurnStatusEffectPhase } from "./post-turn-status-effect-phase"; export class ObtainStatusEffectPhase extends PokemonPhase { - private statusEffect: StatusEffect | undefined; - private cureTurn: integer | null; - private sourceText: string | null; - private sourcePokemon: Pokemon | null; + private statusEffect?: StatusEffect | undefined; + private cureTurn?: integer | null; + private sourceText?: string | null; + private sourcePokemon?: Pokemon | null; - constructor(scene: BattleScene, battlerIndex: BattlerIndex, statusEffect?: StatusEffect, cureTurn?: integer | null, sourceText?: string, sourcePokemon?: Pokemon) { + constructor(scene: BattleScene, battlerIndex: BattlerIndex, statusEffect?: StatusEffect, cureTurn?: integer | null, sourceText?: string | null, sourcePokemon?: Pokemon | null) { super(scene, battlerIndex); this.statusEffect = statusEffect; - this.cureTurn = cureTurn!; // TODO: is this bang correct? - this.sourceText = sourceText!; // TODO: is this bang correct? - this.sourcePokemon = sourcePokemon!; // For tracking which Pokemon caused the status effect // TODO: is this bang correct? + this.cureTurn = cureTurn; + this.sourceText = sourceText; + this.sourcePokemon = sourcePokemon; // For tracking which Pokemon caused the status effect } start() { const pokemon = this.getPokemon(); - if (!pokemon?.status) { - if (pokemon?.trySetStatus(this.statusEffect, false, this.sourcePokemon)) { + if (pokemon && !pokemon.status) { + if (pokemon.trySetStatus(this.statusEffect, false, this.sourcePokemon)) { if (this.cureTurn) { - pokemon.status!.cureTurn = this.cureTurn; // TODO: is this bang correct? + pokemon.status!.cureTurn = this.cureTurn; // TODO: is this bang correct? } pokemon.updateInfo(true); new CommonBattleAnim(CommonAnim.POISON + (this.statusEffect! - 1), pokemon).play(this.scene, false, () => { @@ -40,8 +40,8 @@ export class ObtainStatusEffectPhase extends PokemonPhase { }); return; } - } else if (pokemon.status.effect === this.statusEffect) { - this.scene.queueMessage(getStatusEffectOverlapText(this.statusEffect, getPokemonNameWithAffix(pokemon))); + } else if (pokemon.status?.effect === this.statusEffect) { + this.scene.queueMessage(getStatusEffectOverlapText(this.statusEffect ?? StatusEffect.NONE, getPokemonNameWithAffix(pokemon))); } this.end(); } diff --git a/src/phases/quiet-form-change-phase.ts b/src/phases/quiet-form-change-phase.ts index dde500e156a..c28cc28b592 100644 --- a/src/phases/quiet-form-change-phase.ts +++ b/src/phases/quiet-form-change-phase.ts @@ -3,6 +3,7 @@ import { SemiInvulnerableTag } from "#app/data/battler-tags"; import { SpeciesFormChange, getSpeciesFormChangeMessage } from "#app/data/pokemon-forms"; import { getTypeRgb } from "#app/data/type"; import { BattleSpec } from "#app/enums/battle-spec"; +import { BattlerTagType } from "#app/enums/battler-tag-type"; import Pokemon, { EnemyPokemon } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { BattlePhase } from "./battle-phase"; @@ -113,6 +114,7 @@ export class QuietFormChangePhase extends BattlePhase { } end(): void { + this.pokemon.findAndRemoveTags(t => t.tagType === BattlerTagType.AUTOTOMIZED); if (this.pokemon.scene?.currentBattle.battleSpec === BattleSpec.FINAL_BOSS && this.pokemon instanceof EnemyPokemon) { this.scene.playBgm(); this.scene.unshiftPhase(new PokemonHealPhase(this.scene, this.pokemon.getBattlerIndex(), this.pokemon.getMaxHp(), null, false, false, false, true)); diff --git a/src/test/abilities/arena_trap.test.ts b/src/test/abilities/arena_trap.test.ts index 6b313fcc8db..5068fed6b77 100644 --- a/src/test/abilities/arena_trap.test.ts +++ b/src/test/abilities/arena_trap.test.ts @@ -8,7 +8,6 @@ import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; describe("Abilities - Arena Trap", () => { let phaserGame: Phaser.Game; let game: GameManager; - const TIMEOUT = 20 * 1000; beforeAll(() => { phaserGame = new Phaser.Game({ @@ -43,7 +42,7 @@ describe("Abilities - Arena Trap", () => { await game.toNextTurn(); expect(enemy).toBe(game.scene.getEnemyPokemon()); - }, TIMEOUT); + }); it("should guarantee double battle with any one LURE", async () => { game.override @@ -55,5 +54,5 @@ describe("Abilities - Arena Trap", () => { await game.classicMode.startBattle(); expect(game.scene.getEnemyField().length).toBe(2); - }, TIMEOUT); + }); }); diff --git a/src/test/abilities/dry_skin.test.ts b/src/test/abilities/dry_skin.test.ts index 1af8831f25b..a97914660bc 100644 --- a/src/test/abilities/dry_skin.test.ts +++ b/src/test/abilities/dry_skin.test.ts @@ -141,4 +141,18 @@ describe("Abilities - Dry Skin", () => { expect(healthGainedFromWaterShuriken).toBe(healthGainedFromWaterGun); }); + + it("opposing water moves still heal regardless of accuracy check", async () => { + await game.classicMode.startBattle(); + + const enemy = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.WATER_GUN); + enemy.hp = enemy.hp - 1; + await game.phaseInterceptor.to("MoveEffectPhase"); + + await game.move.forceMiss(); + await game.phaseInterceptor.to("BerryPhase", false); + expect(enemy.hp).toBe(enemy.getMaxHp()); + }); }); diff --git a/src/test/abilities/flash_fire.test.ts b/src/test/abilities/flash_fire.test.ts index c3cf31496ea..9c78de99575 100644 --- a/src/test/abilities/flash_fire.test.ts +++ b/src/test/abilities/flash_fire.test.ts @@ -38,7 +38,7 @@ describe("Abilities - Flash Fire", () => { it("immune to Fire-type moves", async () => { game.override.enemyMoveset([Moves.EMBER]).moveset(Moves.SPLASH); - await game.startBattle([Species.BLISSEY]); + await game.classicMode.startBattle([Species.BLISSEY]); const blissey = game.scene.getPlayerPokemon()!; @@ -49,7 +49,7 @@ describe("Abilities - Flash Fire", () => { it("not activate if the Pokémon is protected from the Fire-type move", async () => { game.override.enemyMoveset([Moves.EMBER]).moveset([Moves.PROTECT]); - await game.startBattle([Species.BLISSEY]); + await game.classicMode.startBattle([Species.BLISSEY]); const blissey = game.scene.getPlayerPokemon()!; @@ -60,7 +60,7 @@ describe("Abilities - Flash Fire", () => { it("activated by Will-O-Wisp", async () => { game.override.enemyMoveset([Moves.WILL_O_WISP]).moveset(Moves.SPLASH); - await game.startBattle([Species.BLISSEY]); + await game.classicMode.startBattle([Species.BLISSEY]); const blissey = game.scene.getPlayerPokemon()!; @@ -76,7 +76,7 @@ describe("Abilities - Flash Fire", () => { it("activated after being frozen", async () => { game.override.enemyMoveset([Moves.EMBER]).moveset(Moves.SPLASH); game.override.statusEffect(StatusEffect.FREEZE); - await game.startBattle([Species.BLISSEY]); + await game.classicMode.startBattle([Species.BLISSEY]); const blissey = game.scene.getPlayerPokemon()!; @@ -88,7 +88,7 @@ describe("Abilities - Flash Fire", () => { it("not passing with baton pass", async () => { game.override.enemyMoveset([Moves.EMBER]).moveset([Moves.BATON_PASS]); - await game.startBattle([Species.BLISSEY, Species.CHANSEY]); + await game.classicMode.startBattle([Species.BLISSEY, Species.CHANSEY]); // ensure use baton pass after enemy moved game.move.select(Moves.BATON_PASS); @@ -105,7 +105,7 @@ describe("Abilities - Flash Fire", () => { it("boosts Fire-type move when the ability is activated", async () => { game.override.enemyMoveset([Moves.FIRE_PLEDGE]).moveset([Moves.EMBER, Moves.SPLASH]); game.override.enemyAbility(Abilities.FLASH_FIRE).ability(Abilities.NONE); - await game.startBattle([Species.BLISSEY]); + await game.classicMode.startBattle([Species.BLISSEY]); const blissey = game.scene.getPlayerPokemon()!; const initialHP = 1000; blissey.hp = initialHP; @@ -126,4 +126,33 @@ describe("Abilities - Flash Fire", () => { expect(flashFireDmg).toBeGreaterThan(originalDmg); }, 20000); + + it("still activates regardless of accuracy check", async () => { + game.override.moveset(Moves.FIRE_PLEDGE).enemyMoveset(Moves.EMBER); + game.override.enemyAbility(Abilities.NONE).ability(Abilities.FLASH_FIRE); + game.override.enemySpecies(Species.BLISSEY); + await game.classicMode.startBattle([Species.RATTATA]); + + const blissey = game.scene.getEnemyPokemon()!; + const initialHP = 1000; + blissey.hp = initialHP; + + // first turn + game.move.select(Moves.FIRE_PLEDGE); + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); + await game.phaseInterceptor.to("MoveEffectPhase"); + await game.move.forceMiss(); + await game.phaseInterceptor.to(TurnEndPhase); + const originalDmg = initialHP - blissey.hp; + + expect(blissey.hp > 0); + blissey.hp = initialHP; + + // second turn + game.move.select(Moves.FIRE_PLEDGE); + await game.phaseInterceptor.to(TurnEndPhase); + const flashFireDmg = initialHP - blissey.hp; + + expect(flashFireDmg).toBeGreaterThan(originalDmg); + }, 20000); }); diff --git a/src/test/abilities/illuminate.test.ts b/src/test/abilities/illuminate.test.ts index 73e4a49be95..4f7d3d83b51 100644 --- a/src/test/abilities/illuminate.test.ts +++ b/src/test/abilities/illuminate.test.ts @@ -8,7 +8,6 @@ import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; describe("Abilities - Illuminate", () => { let phaserGame: Phaser.Game; let game: GameManager; - const TIMEOUT = 20 * 1000; beforeAll(() => { phaserGame = new Phaser.Game({ @@ -43,7 +42,7 @@ describe("Abilities - Illuminate", () => { await game.toNextTurn(); expect(player.getStatStage(Stat.ACC)).toBe(0); - }, TIMEOUT); + }); it("should guarantee double battle with any one LURE", async () => { game.override @@ -55,5 +54,5 @@ describe("Abilities - Illuminate", () => { await game.classicMode.startBattle(); expect(game.scene.getEnemyField().length).toBe(2); - }, TIMEOUT); + }); }); diff --git a/src/test/abilities/no_guard.test.ts b/src/test/abilities/no_guard.test.ts index b793ede7099..b0b454dd560 100644 --- a/src/test/abilities/no_guard.test.ts +++ b/src/test/abilities/no_guard.test.ts @@ -11,7 +11,6 @@ import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vite describe("Abilities - No Guard", () => { let phaserGame: Phaser.Game; let game: GameManager; - const TIMEOUT = 20 * 1000; beforeAll(() => { phaserGame = new Phaser.Game({ @@ -52,7 +51,7 @@ describe("Abilities - No Guard", () => { await game.phaseInterceptor.to(MoveEndPhase); expect(moveEffectPhase.hitCheck).toHaveReturnedWith(true); - }, TIMEOUT); + }); it("should guarantee double battle with any one LURE", async () => { game.override @@ -64,5 +63,5 @@ describe("Abilities - No Guard", () => { await game.classicMode.startBattle(); expect(game.scene.getEnemyField().length).toBe(2); - }, TIMEOUT); + }); }); diff --git a/src/test/abilities/sap_sipper.test.ts b/src/test/abilities/sap_sipper.test.ts index 5e8cac74c95..b73bc3d9e27 100644 --- a/src/test/abilities/sap_sipper.test.ts +++ b/src/test/abilities/sap_sipper.test.ts @@ -165,4 +165,22 @@ describe("Abilities - Sap Sipper", () => { expect(initialEnemyHp - enemyPokemon.hp).toBe(0); expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(1); }); + + it("still activates regardless of accuracy check", async () => { + game.override.moveset(Moves.LEAF_BLADE); + game.override.enemyMoveset(Moves.SPLASH); + game.override.enemySpecies(Species.MAGIKARP); + game.override.enemyAbility(Abilities.SAP_SIPPER); + + await game.classicMode.startBattle(); + + const enemyPokemon = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.LEAF_BLADE); + await game.phaseInterceptor.to("MoveEffectPhase"); + + await game.move.forceMiss(); + await game.phaseInterceptor.to("BerryPhase", false); + expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(1); + }); }); diff --git a/src/test/abilities/synchronize.test.ts b/src/test/abilities/synchronize.test.ts new file mode 100644 index 00000000000..6e0aa46763f --- /dev/null +++ b/src/test/abilities/synchronize.test.ts @@ -0,0 +1,109 @@ +import { StatusEffect } from "#app/data/status-effect"; +import GameManager from "#app/test/utils/gameManager"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Synchronize", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + + game.override + .battleType("single") + .startingLevel(100) + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.SYNCHRONIZE) + .moveset([Moves.SPLASH, Moves.THUNDER_WAVE, Moves.SPORE, Moves.PSYCHO_SHIFT]) + .ability(Abilities.NO_GUARD); + }, 20000); + + it("does not trigger when no status is applied by opponent Pokemon", async () => { + await game.classicMode.startBattle([Species.FEEBAS]); + + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getParty()[0].status).toBeUndefined(); + expect(game.phaseInterceptor.log).not.toContain("ShowAbilityPhase"); + }, 20000); + + it("sets the status of the source pokemon to Paralysis when paralyzed by it", async () => { + await game.classicMode.startBattle([Species.FEEBAS]); + + game.move.select(Moves.THUNDER_WAVE); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getParty()[0].status?.effect).toBe(StatusEffect.PARALYSIS); + expect(game.scene.getEnemyParty()[0].status?.effect).toBe(StatusEffect.PARALYSIS); + expect(game.phaseInterceptor.log).toContain("ShowAbilityPhase"); + }, 20000); + + it("does not trigger on Sleep", async () => { + await game.classicMode.startBattle(); + + game.move.select(Moves.SPORE); + + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getParty()[0].status?.effect).toBeUndefined(); + expect(game.scene.getEnemyParty()[0].status?.effect).toBe(StatusEffect.SLEEP); + expect(game.phaseInterceptor.log).not.toContain("ShowAbilityPhase"); + }, 20000); + + it("does not trigger when Pokemon is statused by Toxic Spikes", async () => { + game.override + .ability(Abilities.SYNCHRONIZE) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Array(4).fill(Moves.TOXIC_SPIKES)); + + await game.classicMode.startBattle([Species.FEEBAS, Species.MILOTIC]); + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + + game.doSwitchPokemon(1); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getParty()[0].status?.effect).toBe(StatusEffect.POISON); + expect(game.scene.getEnemyParty()[0].status?.effect).toBeUndefined(); + expect(game.phaseInterceptor.log).not.toContain("ShowAbilityPhase"); + }, 20000); + + it("shows ability even if it fails to set the status of the opponent Pokemon", async () => { + await game.classicMode.startBattle([Species.PIKACHU]); + + game.move.select(Moves.THUNDER_WAVE); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getParty()[0].status?.effect).toBeUndefined(); + expect(game.scene.getEnemyParty()[0].status?.effect).toBe(StatusEffect.PARALYSIS); + expect(game.phaseInterceptor.log).toContain("ShowAbilityPhase"); + }, 20000); + + it("should activate with Psycho Shift after the move clears the status", async () => { + game.override.statusEffect(StatusEffect.PARALYSIS); + await game.classicMode.startBattle(); + + game.move.select(Moves.PSYCHO_SHIFT); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getParty()[0].status?.effect).toBe(StatusEffect.PARALYSIS); // keeping old gen < V impl for now since it's buggy otherwise + expect(game.scene.getEnemyParty()[0].status?.effect).toBe(StatusEffect.PARALYSIS); + expect(game.phaseInterceptor.log).toContain("ShowAbilityPhase"); + }, 20000); +}); diff --git a/src/test/abilities/volt_absorb.test.ts b/src/test/abilities/volt_absorb.test.ts index 7f3e160c7d0..9bd5de7df57 100644 --- a/src/test/abilities/volt_absorb.test.ts +++ b/src/test/abilities/volt_absorb.test.ts @@ -7,6 +7,7 @@ import { Species } from "#enums/species"; import GameManager from "#test/utils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import { BattlerIndex } from "#app/battle"; // See also: TypeImmunityAbAttr describe("Abilities - Volt Absorb", () => { @@ -39,7 +40,7 @@ describe("Abilities - Volt Absorb", () => { game.override.enemySpecies(Species.DUSKULL); game.override.enemyAbility(Abilities.BALL_FETCH); - await game.startBattle(); + await game.classicMode.startBattle(); const playerPokemon = game.scene.getPlayerPokemon()!; @@ -51,4 +52,23 @@ describe("Abilities - Volt Absorb", () => { expect(playerPokemon.getTag(BattlerTagType.CHARGED)).toBeDefined(); expect(game.phaseInterceptor.log).not.toContain("ShowAbilityPhase"); }); + it("should activate regardless of accuracy checks", async () => { + game.override.moveset(Moves.THUNDERBOLT); + game.override.enemyMoveset(Moves.SPLASH); + game.override.enemySpecies(Species.MAGIKARP); + game.override.enemyAbility(Abilities.VOLT_ABSORB); + + await game.classicMode.startBattle(); + + const enemyPokemon = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.THUNDERBOLT); + enemyPokemon.hp = enemyPokemon.hp - 1; + await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.phaseInterceptor.to("MoveEffectPhase"); + + await game.move.forceMiss(); + await game.phaseInterceptor.to("BerryPhase", false); + expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp()); + }); }); diff --git a/src/test/moves/autotomize.test.ts b/src/test/moves/autotomize.test.ts new file mode 100644 index 00000000000..329b92b38fe --- /dev/null +++ b/src/test/moves/autotomize.test.ts @@ -0,0 +1,98 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; + +describe("Moves - Autotomize", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + const TIMEOUT = 20 * 1000; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([Moves.AUTOTOMIZE, Moves.KINGS_SHIELD, Moves.FALSE_SWIPE]) + .battleType("single") + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("Autotomize should reduce weight", async () => { + const baseDracozoltWeight = 190; + const oneAutotomizeDracozoltWeight = 90; + const twoAutotomizeDracozoltWeight = 0.1; + const threeAutotomizeDracozoltWeight = 0.1; + + await game.classicMode.startBattle([Species.DRACOZOLT]); + const playerPokemon = game.scene.getPlayerPokemon()!; + expect(playerPokemon.getWeight()).toBe(baseDracozoltWeight); + game.move.select(Moves.AUTOTOMIZE); + await game.toNextTurn(); + expect(playerPokemon.getWeight()).toBe(oneAutotomizeDracozoltWeight); + + game.move.select(Moves.AUTOTOMIZE); + await game.toNextTurn(); + expect(playerPokemon.getWeight()).toBe(twoAutotomizeDracozoltWeight); + + + game.move.select(Moves.AUTOTOMIZE); + await game.toNextTurn(); + expect(playerPokemon.getWeight()).toBe(threeAutotomizeDracozoltWeight); + }, TIMEOUT); + + it("Changing forms should revert weight", async () => { + const baseAegislashWeight = 53; + const autotomizeAegislashWeight = 0.1; + + await game.classicMode.startBattle([Species.AEGISLASH]); + const playerPokemon = game.scene.getPlayerPokemon()!; + + expect(playerPokemon.getWeight()).toBe(baseAegislashWeight); + + game.move.select(Moves.AUTOTOMIZE); + await game.toNextTurn(); + expect(playerPokemon.getWeight()).toBe(autotomizeAegislashWeight); + + // Transform to sword form + game.move.select(Moves.FALSE_SWIPE); + await game.toNextTurn(); + expect(playerPokemon.getWeight()).toBe(baseAegislashWeight); + + game.move.select(Moves.AUTOTOMIZE); + await game.toNextTurn(); + expect(playerPokemon.getWeight()).toBe(autotomizeAegislashWeight); + + // Transform to shield form + game.move.select(Moves.KINGS_SHIELD); + await game.toNextTurn(); + expect(playerPokemon.getWeight()).toBe(baseAegislashWeight); + + game.move.select(Moves.AUTOTOMIZE); + await game.toNextTurn(); + expect(playerPokemon.getWeight()).toBe(autotomizeAegislashWeight); + }, TIMEOUT); + + it("Autotomize should interact with light metal correctly", async () => { + const baseLightGroudonWeight = 475; + const autotomizeLightGroudonWeight = 425; + game.override.ability(Abilities.LIGHT_METAL); + await game.classicMode.startBattle([Species.GROUDON]); + const playerPokemon = game.scene.getPlayerPokemon()!; + expect(playerPokemon.getWeight()).toBe(baseLightGroudonWeight); + game.move.select(Moves.AUTOTOMIZE); + await game.toNextTurn(); + expect(playerPokemon.getWeight()).toBe(autotomizeLightGroudonWeight); + }, TIMEOUT); +}); diff --git a/src/test/moves/chilly_reception.test.ts b/src/test/moves/chilly_reception.test.ts new file mode 100644 index 00000000000..1b5b5cecb4a --- /dev/null +++ b/src/test/moves/chilly_reception.test.ts @@ -0,0 +1,69 @@ +import { Abilities } from "#app/enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { WeatherType } from "#enums/weather-type"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Chilly Reception", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override.battleType("single") + .moveset([Moves.CHILLY_RECEPTION, Moves.SNOWSCAPE]) + .enemyMoveset(Array(4).fill(Moves.SPLASH)) + .enemyAbility(Abilities.NONE) + .ability(Abilities.NONE); + + }); + + it("should still change the weather if user can't switch out", async () => { + await game.classicMode.startBattle([Species.SLOWKING]); + + game.move.select(Moves.CHILLY_RECEPTION); + + await game.phaseInterceptor.to("BerryPhase", false); + expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SNOW); + }); + + it("should switch out even if it's snowing", async () => { + await game.classicMode.startBattle([Species.SLOWKING, Species.MEOWTH]); + // first turn set up snow with snowscape, try chilly reception on second turn + game.move.select(Moves.SNOWSCAPE); + await game.phaseInterceptor.to("BerryPhase", false); + expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SNOW); + + await game.phaseInterceptor.to("TurnInitPhase", false); + game.move.select(Moves.CHILLY_RECEPTION); + game.doSelectPartyPokemon(1); + + await game.phaseInterceptor.to("BerryPhase", false); + expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SNOW); + expect(game.scene.getPlayerField()[0].species.speciesId).toBe(Species.MEOWTH); + }); + + it("happy case - switch out and weather changes", async () => { + + await game.classicMode.startBattle([Species.SLOWKING, Species.MEOWTH]); + + game.move.select(Moves.CHILLY_RECEPTION); + game.doSelectPartyPokemon(1); + + await game.phaseInterceptor.to("BerryPhase", false); + expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.SNOW); + expect(game.scene.getPlayerField()[0].species.speciesId).toBe(Species.MEOWTH); + }); +}); diff --git a/src/test/moves/dragon_tail.test.ts b/src/test/moves/dragon_tail.test.ts index 4b222a0c477..dd7193dc97f 100644 --- a/src/test/moves/dragon_tail.test.ts +++ b/src/test/moves/dragon_tail.test.ts @@ -1,16 +1,11 @@ import { BattlerIndex } from "#app/battle"; import { allMoves } from "#app/data/move"; -import { BattleEndPhase } from "#app/phases/battle-end-phase"; -import { BerryPhase } from "#app/phases/berry-phase"; -import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; -import GameManager from "../utils/gameManager"; - - +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; describe("Moves - Dragon Tail", () => { let phaserGame: Phaser.Game; @@ -29,7 +24,7 @@ describe("Moves - Dragon Tail", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override.battleType("single") - .moveset([Moves.DRAGON_TAIL, Moves.SPLASH]) + .moveset([Moves.DRAGON_TAIL, Moves.SPLASH, Moves.FLAMETHROWER]) .enemySpecies(Species.WAILORD) .enemyMoveset(Moves.SPLASH) .startingLevel(5) @@ -38,109 +33,110 @@ describe("Moves - Dragon Tail", () => { vi.spyOn(allMoves[Moves.DRAGON_TAIL], "accuracy", "get").mockReturnValue(100); }); - test( - "Single battle should cause opponent to flee, and not crash", - async () => { - await game.startBattle([Species.DRATINI]); + it("should cause opponent to flee, and not crash", async () => { + await game.classicMode.startBattle([Species.DRATINI]); - const enemyPokemon = game.scene.getEnemyPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DRAGON_TAIL); + game.move.select(Moves.DRAGON_TAIL); - await game.phaseInterceptor.to(BerryPhase); + await game.phaseInterceptor.to("BerryPhase"); - const isVisible = enemyPokemon.visible; - const hasFled = enemyPokemon.switchOutStatus; - expect(!isVisible && hasFled).toBe(true); + const isVisible = enemyPokemon.visible; + const hasFled = enemyPokemon.switchOutStatus; + expect(!isVisible && hasFled).toBe(true); - // simply want to test that the game makes it this far without crashing - await game.phaseInterceptor.to(BattleEndPhase); - } - ); + // simply want to test that the game makes it this far without crashing + await game.phaseInterceptor.to("BattleEndPhase"); + }); - test( - "Single battle should cause opponent to flee, display ability, and not crash", - async () => { - game.override.enemyAbility(Abilities.ROUGH_SKIN); - await game.startBattle([Species.DRATINI]); + it("should cause opponent to flee, display ability, and not crash", async () => { + game.override.enemyAbility(Abilities.ROUGH_SKIN); + await game.classicMode.startBattle([Species.DRATINI]); - const leadPokemon = game.scene.getPlayerPokemon()!; - const enemyPokemon = game.scene.getEnemyPokemon()!; + const leadPokemon = game.scene.getPlayerPokemon()!; + const enemyPokemon = game.scene.getEnemyPokemon()!; - game.move.select(Moves.DRAGON_TAIL); + game.move.select(Moves.DRAGON_TAIL); - await game.phaseInterceptor.to(BerryPhase); + await game.phaseInterceptor.to("BerryPhase"); - const isVisible = enemyPokemon.visible; - const hasFled = enemyPokemon.switchOutStatus; - expect(!isVisible && hasFled).toBe(true); - expect(leadPokemon.hp).toBeLessThan(leadPokemon.getMaxHp()); - } - ); + const isVisible = enemyPokemon.visible; + const hasFled = enemyPokemon.switchOutStatus; + expect(!isVisible && hasFled).toBe(true); + expect(leadPokemon.hp).toBeLessThan(leadPokemon.getMaxHp()); + }); - test( - "Double battles should proceed without crashing", - async () => { - game.override.battleType("double").enemyMoveset(Moves.SPLASH); - game.override.moveset([Moves.DRAGON_TAIL, Moves.SPLASH, Moves.FLAMETHROWER]) - .enemyAbility(Abilities.ROUGH_SKIN); - await game.startBattle([Species.DRATINI, Species.DRATINI, Species.WAILORD, Species.WAILORD]); + it("should proceed without crashing in a double battle", async () => { + game.override + .battleType("double").enemyMoveset(Moves.SPLASH) + .enemyAbility(Abilities.ROUGH_SKIN); + await game.classicMode.startBattle([Species.DRATINI, Species.DRATINI, Species.WAILORD, Species.WAILORD]); - const leadPokemon = game.scene.getParty()[0]!; + const leadPokemon = game.scene.getParty()[0]!; - const enemyLeadPokemon = game.scene.getEnemyParty()[0]!; - const enemySecPokemon = game.scene.getEnemyParty()[1]!; + const enemyLeadPokemon = game.scene.getEnemyParty()[0]!; + const enemySecPokemon = game.scene.getEnemyParty()[1]!; - game.move.select(Moves.DRAGON_TAIL, 0, BattlerIndex.ENEMY); - game.move.select(Moves.SPLASH, 1); + game.move.select(Moves.DRAGON_TAIL, 0, BattlerIndex.ENEMY); + game.move.select(Moves.SPLASH, 1); - await game.phaseInterceptor.to(TurnEndPhase); + await game.phaseInterceptor.to("TurnEndPhase"); - const isVisibleLead = enemyLeadPokemon.visible; - const hasFledLead = enemyLeadPokemon.switchOutStatus; - const isVisibleSec = enemySecPokemon.visible; - const hasFledSec = enemySecPokemon.switchOutStatus; - expect(!isVisibleLead && hasFledLead && isVisibleSec && !hasFledSec).toBe(true); - expect(leadPokemon.hp).toBeLessThan(leadPokemon.getMaxHp()); + const isVisibleLead = enemyLeadPokemon.visible; + const hasFledLead = enemyLeadPokemon.switchOutStatus; + const isVisibleSec = enemySecPokemon.visible; + const hasFledSec = enemySecPokemon.switchOutStatus; + expect(!isVisibleLead && hasFledLead && isVisibleSec && !hasFledSec).toBe(true); + expect(leadPokemon.hp).toBeLessThan(leadPokemon.getMaxHp()); - // second turn - game.move.select(Moves.FLAMETHROWER, 0, BattlerIndex.ENEMY_2); - game.move.select(Moves.SPLASH, 1); + // second turn + game.move.select(Moves.FLAMETHROWER, 0, BattlerIndex.ENEMY_2); + game.move.select(Moves.SPLASH, 1); - await game.phaseInterceptor.to(BerryPhase); - expect(enemySecPokemon.hp).toBeLessThan(enemySecPokemon.getMaxHp()); - } - ); + await game.phaseInterceptor.to("BerryPhase"); + expect(enemySecPokemon.hp).toBeLessThan(enemySecPokemon.getMaxHp()); + }); - test( - "Flee move redirection works", - async () => { - game.override.battleType("double").enemyMoveset(Moves.SPLASH); - game.override.moveset([Moves.DRAGON_TAIL, Moves.SPLASH, Moves.FLAMETHROWER]); - game.override.enemyAbility(Abilities.ROUGH_SKIN); - await game.startBattle([Species.DRATINI, Species.DRATINI, Species.WAILORD, Species.WAILORD]); + it("should redirect targets upon opponent flee", async () => { + game.override + .battleType("double") + .enemyMoveset(Moves.SPLASH) + .enemyAbility(Abilities.ROUGH_SKIN); + await game.classicMode.startBattle([Species.DRATINI, Species.DRATINI, Species.WAILORD, Species.WAILORD]); - const leadPokemon = game.scene.getParty()[0]!; - const secPokemon = game.scene.getParty()[1]!; + const leadPokemon = game.scene.getParty()[0]!; + const secPokemon = game.scene.getParty()[1]!; - const enemyLeadPokemon = game.scene.getEnemyParty()[0]!; - const enemySecPokemon = game.scene.getEnemyParty()[1]!; + const enemyLeadPokemon = game.scene.getEnemyParty()[0]!; + const enemySecPokemon = game.scene.getEnemyParty()[1]!; - game.move.select(Moves.DRAGON_TAIL, 0, BattlerIndex.ENEMY); - // target the same pokemon, second move should be redirected after first flees - game.move.select(Moves.DRAGON_TAIL, 1, BattlerIndex.ENEMY); + game.move.select(Moves.DRAGON_TAIL, 0, BattlerIndex.ENEMY); + // target the same pokemon, second move should be redirected after first flees + game.move.select(Moves.DRAGON_TAIL, 1, BattlerIndex.ENEMY); - await game.phaseInterceptor.to(BerryPhase); + await game.phaseInterceptor.to("BerryPhase"); - const isVisibleLead = enemyLeadPokemon.visible; - const hasFledLead = enemyLeadPokemon.switchOutStatus; - const isVisibleSec = enemySecPokemon.visible; - const hasFledSec = enemySecPokemon.switchOutStatus; - expect(!isVisibleLead && hasFledLead && !isVisibleSec && hasFledSec).toBe(true); - expect(leadPokemon.hp).toBeLessThan(leadPokemon.getMaxHp()); - expect(secPokemon.hp).toBeLessThan(secPokemon.getMaxHp()); - expect(enemyLeadPokemon.hp).toBeLessThan(enemyLeadPokemon.getMaxHp()); - expect(enemySecPokemon.hp).toBeLessThan(enemySecPokemon.getMaxHp()); - } - ); + const isVisibleLead = enemyLeadPokemon.visible; + const hasFledLead = enemyLeadPokemon.switchOutStatus; + const isVisibleSec = enemySecPokemon.visible; + const hasFledSec = enemySecPokemon.switchOutStatus; + expect(!isVisibleLead && hasFledLead && !isVisibleSec && hasFledSec).toBe(true); + expect(leadPokemon.hp).toBeLessThan(leadPokemon.getMaxHp()); + expect(secPokemon.hp).toBeLessThan(secPokemon.getMaxHp()); + expect(enemyLeadPokemon.hp).toBeLessThan(enemyLeadPokemon.getMaxHp()); + expect(enemySecPokemon.hp).toBeLessThan(enemySecPokemon.getMaxHp()); + }); + + it("doesn't switch out if the target has suction cups", async () => { + game.override.enemyAbility(Abilities.SUCTION_CUPS); + await game.classicMode.startBattle([Species.REGIELEKI]); + + const enemy = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.DRAGON_TAIL); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(enemy.isFullHp()).toBe(false); + }); }); diff --git a/src/test/moves/heal_block.test.ts b/src/test/moves/heal_block.test.ts index 8549d6211a9..14662ac3fce 100644 --- a/src/test/moves/heal_block.test.ts +++ b/src/test/moves/heal_block.test.ts @@ -10,8 +10,6 @@ import { Species } from "#enums/species"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; -const TIMEOUT = 20 * 1000; - // Bulbapedia Reference: https://bulbapedia.bulbagarden.net/wiki/Heal_Block_(move) describe("Moves - Heal Block", () => { let phaserGame: Phaser.Game; @@ -53,8 +51,7 @@ describe("Moves - Heal Block", () => { expect(player.hp).toBe(1); expect(enemy.hp).toBeLessThan(enemy.getMaxHp()); - }, TIMEOUT - ); + }); it("shouldn't stop Liquid Ooze from dealing damage", async() => { game.override.enemyAbility(Abilities.LIQUID_OOZE); @@ -70,7 +67,7 @@ describe("Moves - Heal Block", () => { expect(player.isFullHp()).toBe(false); expect(enemy.isFullHp()).toBe(false); - }, TIMEOUT); + }); it("should stop delayed heals, such as from Wish", async() => { await game.classicMode.startBattle([Species.CHARIZARD]); @@ -89,7 +86,7 @@ describe("Moves - Heal Block", () => { } expect(player.hp).toBe(1); - }, TIMEOUT); + }); it("should prevent Grassy Terrain from restoring HP", async() => { game.override.enemyAbility(Abilities.GRASSY_SURGE); @@ -104,7 +101,7 @@ describe("Moves - Heal Block", () => { await game.phaseInterceptor.to("TurnEndPhase"); expect(player.hp).toBe(1); - }, TIMEOUT); + }); it("should prevent healing from heal-over-time moves", async() => { await game.classicMode.startBattle([Species.CHARIZARD]); @@ -118,7 +115,7 @@ describe("Moves - Heal Block", () => { expect(player.getTag(BattlerTagType.AQUA_RING)).toBeDefined(); expect(player.hp).toBe(1); - }, TIMEOUT); + }); it("should prevent abilities from restoring HP", async() => { game.override @@ -135,7 +132,7 @@ describe("Moves - Heal Block", () => { await game.phaseInterceptor.to("TurnEndPhase"); expect(player.hp).toBe(1); - }, TIMEOUT); + }); it("should stop healing from items", async() => { game.override.startingHeldItems([{name: "LEFTOVERS"}]); @@ -149,5 +146,5 @@ describe("Moves - Heal Block", () => { await game.phaseInterceptor.to("TurnEndPhase"); expect(player.hp).toBe(1); - }, TIMEOUT); + }); }); diff --git a/src/test/moves/shell_side_arm.test.ts b/src/test/moves/shell_side_arm.test.ts index ded7ed82fd1..643313f1eae 100644 --- a/src/test/moves/shell_side_arm.test.ts +++ b/src/test/moves/shell_side_arm.test.ts @@ -5,11 +5,14 @@ import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/utils/gameManager"; import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; describe("Moves - Shell Side Arm", () => { let phaserGame: Phaser.Game; let game: GameManager; + const shellSideArm = allMoves[Moves.SHELL_SIDE_ARM]; + const shellSideArmAttr = shellSideArm.getAttrs(ShellSideArmCategoryAttr)[0]; + beforeAll(() => { phaserGame = new Phaser.Game({ type: Phaser.HEADLESS, @@ -34,14 +37,11 @@ describe("Moves - Shell Side Arm", () => { it("becomes a physical attack if forecasted to deal more damage as physical", async () => { game.override.enemySpecies(Species.SNORLAX); - await game.classicMode.startBattle([Species.MANAPHY]); + await game.classicMode.startBattle([Species.RAMPARDOS]); - const shellSideArm = allMoves[Moves.SHELL_SIDE_ARM]; - const shellSideArmAttr = shellSideArm.getAttrs(ShellSideArmCategoryAttr)[0]; vi.spyOn(shellSideArmAttr, "apply"); game.move.select(Moves.SHELL_SIDE_ARM); - await game.phaseInterceptor.to("MoveEffectPhase"); expect(shellSideArmAttr.apply).toHaveLastReturnedWith(true); @@ -50,14 +50,11 @@ describe("Moves - Shell Side Arm", () => { it("remains a special attack if forecasted to deal more damage as special", async () => { game.override.enemySpecies(Species.SLOWBRO); - await game.classicMode.startBattle([Species.MANAPHY]); + await game.classicMode.startBattle([Species.XURKITREE]); - const shellSideArm = allMoves[Moves.SHELL_SIDE_ARM]; - const shellSideArmAttr = shellSideArm.getAttrs(ShellSideArmCategoryAttr)[0]; vi.spyOn(shellSideArmAttr, "apply"); game.move.select(Moves.SHELL_SIDE_ARM); - await game.phaseInterceptor.to("MoveEffectPhase"); expect(shellSideArmAttr.apply).toHaveLastReturnedWith(false); @@ -70,14 +67,10 @@ describe("Moves - Shell Side Arm", () => { await game.classicMode.startBattle([Species.MANAPHY]); - const shellSideArm = allMoves[Moves.SHELL_SIDE_ARM]; - const shellSideArmAttr = shellSideArm.getAttrs(ShellSideArmCategoryAttr)[0]; vi.spyOn(shellSideArmAttr, "apply"); game.move.select(Moves.SHELL_SIDE_ARM); - await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); - await game.phaseInterceptor.to("BerryPhase", false); expect(shellSideArmAttr.apply).toHaveLastReturnedWith(false); diff --git a/src/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts b/src/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts index c39e636b462..88704746a3c 100644 --- a/src/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/an-offer-you-cant-refuse-encounter.test.ts @@ -231,7 +231,7 @@ describe("An Offer You Can't Refuse - Mystery Encounter", () => { }); describe("Option 3 - Leave", () => { - it.each(Array.from({length: 30}))("should leave encounter without battle", async () => { + it("should leave encounter without battle", async () => { const leaveEncounterWithoutBattleSpy = vi.spyOn(EncounterPhaseUtils, "leaveEncounterWithoutBattle"); await game.runToMysteryEncounter(MysteryEncounterType.AN_OFFER_YOU_CANT_REFUSE, defaultParty); diff --git a/src/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts b/src/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts index 5c1353ee337..4bcb063fff0 100644 --- a/src/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts +++ b/src/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts @@ -25,6 +25,7 @@ import { MysteryEncounterPokemonData } from "#app/data/mystery-encounters/myster import { CommandPhase } from "#app/phases/command-phase"; import { MovePhase } from "#app/phases/move-phase"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; +import { Abilities } from "#app/enums/abilities"; const namespace = "mysteryEncounter:theStrongStuff"; const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; @@ -43,10 +44,13 @@ describe("The Strong Stuff - Mystery Encounter", () => { beforeEach(async () => { game = new GameManager(phaserGame); scene = game.scene; - game.override.mysteryEncounterChance(100); - game.override.startingWave(defaultWave); - game.override.startingBiome(defaultBiome); - game.override.disableTrainerWaves(); + game.override + .mysteryEncounterChance(100) + .startingWave(defaultWave) + .startingBiome(defaultBiome) + .disableTrainerWaves() + .enemyAbility(Abilities.BALL_FETCH) + .enemyPassiveAbility(Abilities.BALL_FETCH); vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue( new Map([ diff --git a/src/test/reload.test.ts b/src/test/reload.test.ts index 5009d76d1a7..7c4523dd9ef 100644 --- a/src/test/reload.test.ts +++ b/src/test/reload.test.ts @@ -35,7 +35,7 @@ describe("Reload", () => { expect(preReloadRngState).toBe(postReloadRngState); }, 20000); - it.each(Array.from({length: 100}))("should not have RNG inconsistencies after a biome switch", async () => { + it("should not have RNG inconsistencies after a biome switch", async () => { game.override .startingWave(10) .battleType("single") diff --git a/src/ui/challenges-select-ui-handler.ts b/src/ui/challenges-select-ui-handler.ts index e08736d2b70..924186de789 100644 --- a/src/ui/challenges-select-ui-handler.ts +++ b/src/ui/challenges-select-ui-handler.ts @@ -28,7 +28,7 @@ export default class GameChallengesUiHandler extends UiHandler { private descriptionText: BBCodeText; - private challengeLabels: Array<{ label: Phaser.GameObjects.Text, value: Phaser.GameObjects.Text }>; + private challengeLabels: Array<{ label: Phaser.GameObjects.Text, value: Phaser.GameObjects.Text, leftArrow: Phaser.GameObjects.Image, rightArrow: Phaser.GameObjects.Image }>; private monoTypeValue: Phaser.GameObjects.Sprite; private cursorObj: Phaser.GameObjects.NineSlice | null; @@ -40,6 +40,11 @@ export default class GameChallengesUiHandler extends UiHandler { private optionsWidth: number; + private widestTextBox: number; + + private readonly leftArrowGap: number = 90; // distance from the label to the left arrow + private readonly arrowSpacing: number = 3; // distance between the arrows and the value area + constructor(scene: BattleScene, mode: Mode | null = null) { super(scene, mode); } @@ -47,6 +52,8 @@ export default class GameChallengesUiHandler extends UiHandler { setup() { const ui = this.getUi(); + this.widestTextBox = 0; + this.challengesContainer = this.scene.add.container(1, -(this.scene.game.canvas.height / 6) + 1); this.challengesContainer.setName("challenges"); @@ -135,6 +142,20 @@ export default class GameChallengesUiHandler extends UiHandler { this.valuesContainer.add(label); + const leftArrow = this.scene.add.image(0, 0, "cursor_reverse"); + leftArrow.setName(`challenge-left-arrow-${i}`); + leftArrow.setOrigin(0, 0); + leftArrow.setVisible(false); + leftArrow.setScale(0.75); + this.valuesContainer.add(leftArrow); + + const rightArrow = this.scene.add.image(0, 0, "cursor"); + rightArrow.setName(`challenge-right-arrow-${i}`); + rightArrow.setOrigin(0, 0); + rightArrow.setScale(0.75); + rightArrow.setVisible(false); + this.valuesContainer.add(rightArrow); + const value = addTextObject(this.scene, 0, 28 + i * 16, "", TextStyle.SETTINGS_LABEL); value.setName(`challenge-value-text-${i}`); value.setPositionRelative(label, 100, 0); @@ -142,7 +163,9 @@ export default class GameChallengesUiHandler extends UiHandler { this.challengeLabels[i] = { label: label, - value: value + value: value, + leftArrow: leftArrow, + rightArrow: rightArrow }; } @@ -187,10 +210,26 @@ export default class GameChallengesUiHandler extends UiHandler { */ initLabels(): void { this.setDescription(this.scene.gameMode.challenges[0].getDescription()); + this.widestTextBox = 0; for (let i = 0; i < 9; i++) { if (i < this.scene.gameMode.challenges.length) { this.challengeLabels[i].label.setVisible(true); this.challengeLabels[i].value.setVisible(true); + this.challengeLabels[i].leftArrow.setVisible(true); + this.challengeLabels[i].rightArrow.setVisible(true); + + const tempText = addTextObject(this.scene, 0, 0, "", TextStyle.SETTINGS_LABEL); // this is added here to get the widest text object for this language, which will be used for the arrow placement + + for (let j = 0; j <= this.scene.gameMode.challenges[i].maxValue; j++) { // this goes through each challenge's value to find out what the max width will be + if (this.scene.gameMode.challenges[i].id !== Challenges.SINGLE_TYPE) { + tempText.setText(this.scene.gameMode.challenges[i].getValue(j)); + if (tempText.displayWidth > this.widestTextBox) { + this.widestTextBox = tempText.displayWidth; + } + } + } + + tempText.destroy(); } } } @@ -203,16 +242,33 @@ export default class GameChallengesUiHandler extends UiHandler { let monoTypeVisible = false; for (let i = 0; i < Math.min(9, this.scene.gameMode.challenges.length); i++) { const challenge = this.scene.gameMode.challenges[this.scrollCursor + i]; - this.challengeLabels[i].label.setText(challenge.getName()); + const challengeLabel = this.challengeLabels[i]; + challengeLabel.label.setText(challenge.getName()); + challengeLabel.leftArrow.setPositionRelative(challengeLabel.label, this.leftArrowGap, 4.5); + challengeLabel.leftArrow.setVisible(challenge.value !== 0); + challengeLabel.rightArrow.setPositionRelative(challengeLabel.leftArrow, Math.max(this.monoTypeValue.width, this.widestTextBox) + challengeLabel.leftArrow.displayWidth + 2 * this.arrowSpacing, 0); + challengeLabel.rightArrow.setVisible(challenge.value !== challenge.maxValue); + + // this check looks to make sure that the arrows and value textbox don't take up too much space that they'll clip the right edge of the options background + if (challengeLabel.rightArrow.x + challengeLabel.rightArrow.width + this.optionsBg.rightWidth + this.arrowSpacing > this.optionsWidth) { + // if we go out of bounds of the box, set the x position as far right as we can without going past the box, with this.arrowSpacing to allow a small gap between the arrow and border + challengeLabel.rightArrow.setX(this.optionsWidth - this.arrowSpacing - this.optionsBg.rightWidth); + } + + // this line of code gets the center point between the left and right arrows from their left side (Arrow.x gives middle point), taking into account the width of the arrows + const xLocation = Math.round((challengeLabel.leftArrow.x + challengeLabel.rightArrow.x + challengeLabel.leftArrow.displayWidth) / 2); if (challenge.id === Challenges.SINGLE_TYPE) { - this.monoTypeValue.setPositionRelative(this.challengeLabels[i].label, 113, 8); + this.monoTypeValue.setX(xLocation); + this.monoTypeValue.setY(challengeLabel.label.y + 8); this.monoTypeValue.setFrame(challenge.getValue()); this.monoTypeValue.setVisible(true); - this.challengeLabels[i].value.setVisible(false); + challengeLabel.value.setVisible(false); monoTypeVisible = true; } else { - this.challengeLabels[i].value.setText(challenge.getValue()); - this.challengeLabels[i].value.setVisible(true); + challengeLabel.value.setText(challenge.getValue()); + challengeLabel.value.setX(xLocation); + challengeLabel.value.setOrigin(0.5, 0); + challengeLabel.value.setVisible(true); } } if (!monoTypeVisible) { @@ -244,6 +300,7 @@ export default class GameChallengesUiHandler extends UiHandler { super.show(args); this.startCursor.setVisible(false); + this.updateChallengeArrows(false); this.challengesContainer.setVisible(true); // Should always be false at the start this.hasSelectedChallenge = this.scene.gameMode.challenges.some(c => c.value !== 0); @@ -259,6 +316,21 @@ export default class GameChallengesUiHandler extends UiHandler { return true; } + /* This code updates the challenge starter arrows to be tinted/not tinted when the start button is selected to show they can't be changed + */ + updateChallengeArrows(tinted: boolean) { + for (let i = 0; i < Math.min(9, this.scene.gameMode.challenges.length); i++) { + const challengeLabel = this.challengeLabels[i]; + if (tinted) { + challengeLabel.leftArrow.setTint(0x808080); + challengeLabel.rightArrow.setTint(0x808080); + } else { + challengeLabel.leftArrow.clearTint(); + challengeLabel.rightArrow.clearTint(); + } + } + } + /** * Processes input from a specified button. * This method handles navigation through a UI menu, including movement through menu items @@ -280,6 +352,7 @@ export default class GameChallengesUiHandler extends UiHandler { // If the user presses cancel when the start cursor has been activated, the game deactivates the start cursor and allows typical challenge selection behavior this.startCursor.setVisible(false); this.cursorObj?.setVisible(true); + this.updateChallengeArrows(this.startCursor.visible); } else { this.scene.clearPhaseQueue(); this.scene.pushPhase(new TitlePhase(this.scene)); @@ -294,6 +367,7 @@ export default class GameChallengesUiHandler extends UiHandler { } else { this.startCursor.setVisible(true); this.cursorObj?.setVisible(false); + this.updateChallengeArrows(this.startCursor.visible); } success = true; } else { diff --git a/src/ui/fight-ui-handler.ts b/src/ui/fight-ui-handler.ts index 3bf55119335..59d14ab3bc4 100644 --- a/src/ui/fight-ui-handler.ts +++ b/src/ui/fight-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene from "../battle-scene"; +import BattleScene, { InfoToggle } from "../battle-scene"; import { addTextObject, TextStyle } from "./text"; import { getTypeDamageMultiplierColor, Type } from "../data/type"; import { Command } from "./command-ui-handler"; @@ -10,9 +10,10 @@ import i18next from "i18next"; import {Button} from "#enums/buttons"; import Pokemon, { PokemonMove } from "#app/field/pokemon"; import { CommandPhase } from "#app/phases/command-phase"; +import MoveInfoOverlay from "./move-info-overlay"; import { BattleType } from "#app/battle"; -export default class FightUiHandler extends UiHandler { +export default class FightUiHandler extends UiHandler implements InfoToggle { public static readonly MOVES_CONTAINER_NAME = "moves"; private movesContainer: Phaser.GameObjects.Container; @@ -26,6 +27,7 @@ export default class FightUiHandler extends UiHandler { private accuracyText: Phaser.GameObjects.Text; private cursorObj: Phaser.GameObjects.Image | null; private moveCategoryIcon: Phaser.GameObjects.Sprite; + private moveInfoOverlay : MoveInfoOverlay; protected fieldIndex: integer = 0; protected cursor2: integer = 0; @@ -85,6 +87,24 @@ export default class FightUiHandler extends UiHandler { this.accuracyText.setOrigin(1, 0.5); this.accuracyText.setVisible(false); this.moveInfoContainer.add(this.accuracyText); + + // prepare move overlay + const overlayScale = 1; + this.moveInfoOverlay = new MoveInfoOverlay(this.scene, { + delayVisibility: true, + scale: overlayScale, + onSide: true, + right: true, + x: 0, + y: -MoveInfoOverlay.getHeight(overlayScale, true), + width: (this.scene.game.canvas.width / 6) + 4, + hideEffectBox: true, + hideBg: true + }); + ui.add(this.moveInfoOverlay); + // register the overlay to receive toggle events + this.scene.addInfoToggle(this.moveInfoOverlay); + this.scene.addInfoToggle(this); } show(args: any[]): boolean { @@ -103,6 +123,8 @@ export default class FightUiHandler extends UiHandler { this.setCursor(this.getCursor()); } this.displayMoves(); + this.toggleInfo(false); // in case cancel was pressed while info toggle is active + this.active = true; return true; } @@ -160,6 +182,27 @@ export default class FightUiHandler extends UiHandler { return success; } + toggleInfo(visible: boolean): void { + if (visible) { + this.movesContainer.setVisible(false); + this.cursorObj?.setVisible(false); + } + this.scene.tweens.add({ + targets: [this.movesContainer, this.cursorObj], + duration: Utils.fixedInt(125), + ease: "Sine.easeInOut", + alpha: visible ? 0 : 1 + }); + if (!visible) { + this.movesContainer.setVisible(true); + this.cursorObj?.setVisible(true); + } + } + + isActive(): boolean { + return this.active; + } + getCursor(): integer { return !this.fieldIndex ? this.cursor : this.cursor2; } @@ -167,6 +210,7 @@ export default class FightUiHandler extends UiHandler { setCursor(cursor: integer): boolean { const ui = this.getUi(); + this.moveInfoOverlay.clear(); const changed = this.getCursor() !== cursor; if (changed) { if (!this.fieldIndex) { @@ -220,6 +264,7 @@ export default class FightUiHandler extends UiHandler { //** Changes the text color and shadow according to the determined TextStyle */ this.ppText.setColor(this.getTextColor(ppColorStyle, false)); this.ppText.setShadowColor(this.getTextColor(ppColorStyle, true)); + this.moveInfoOverlay.show(pokemonMove.getMove()); pokemon.getOpponents().forEach((opponent) => { opponent.updateEffectiveness(this.getEffectivenessText(pokemon, opponent, pokemonMove)); @@ -307,8 +352,10 @@ export default class FightUiHandler extends UiHandler { this.accuracyLabel.setVisible(false); this.accuracyText.setVisible(false); this.moveCategoryIcon.setVisible(false); + this.moveInfoOverlay.clear(); messageHandler.bg.setVisible(true); this.eraseCursor(); + this.active = false; } clearMoves() { diff --git a/src/ui/move-info-overlay.ts b/src/ui/move-info-overlay.ts index a99e4c81e27..42026082b36 100644 --- a/src/ui/move-info-overlay.ts +++ b/src/ui/move-info-overlay.ts @@ -15,12 +15,16 @@ export interface MoveInfoOverlaySettings { //location and width of the component; unaffected by scaling x?: number; y?: number; - width?: number; // default is always half the screen, regardless of scale + /** Default is always half the screen, regardless of scale */ + width?: number; + /** Determines whether to display the small secondary box */ + hideEffectBox?: boolean; + hideBg?: boolean; } -const EFF_HEIGHT = 46; +const EFF_HEIGHT = 48; const EFF_WIDTH = 82; -const DESC_HEIGHT = 46; +const DESC_HEIGHT = 48; const BORDER = 8; const GLOBAL_SCALE = 6; @@ -38,6 +42,7 @@ export default class MoveInfoOverlay extends Phaser.GameObjects.Container implem private acc: Phaser.GameObjects.Text; private typ: Phaser.GameObjects.Sprite; private cat: Phaser.GameObjects.Sprite; + private descBg: Phaser.GameObjects.NineSlice; private options : MoveInfoOverlaySettings; @@ -52,9 +57,9 @@ export default class MoveInfoOverlay extends Phaser.GameObjects.Container implem // prepare the description box const width = (options?.width || MoveInfoOverlay.getWidth(scale, scene)) / scale; // divide by scale as we always want this to be half a window wide - const descBg = addWindow(scene, (options?.onSide && !options?.right ? EFF_WIDTH : 0), options?.top ? EFF_HEIGHT : 0, width - (options?.onSide ? EFF_WIDTH : 0), DESC_HEIGHT); - descBg.setOrigin(0, 0); - this.add(descBg); + this.descBg = addWindow(scene, (options?.onSide && !options?.right ? EFF_WIDTH : 0), options?.top ? EFF_HEIGHT : 0, width - (options?.onSide ? EFF_WIDTH : 0), DESC_HEIGHT); + this.descBg.setOrigin(0, 0); + this.add(this.descBg); // set up the description; wordWrap uses true pixels, unaffected by any scaling, while other values are affected this.desc = addTextObject(scene, (options?.onSide && !options?.right ? EFF_WIDTH : 0) + BORDER, (options?.top ? EFF_HEIGHT : 0) + BORDER - 2, "", TextStyle.BATTLE_INFO, { wordWrap: { width: (width - (BORDER - 2) * 2 - (options?.onSide ? EFF_WIDTH : 0)) * GLOBAL_SCALE } }); @@ -125,6 +130,14 @@ export default class MoveInfoOverlay extends Phaser.GameObjects.Container implem this.acc.setOrigin(1, 0.5); this.val.add(this.acc); + if (options?.hideEffectBox) { + this.val.setVisible(false); + } + + if (options?.hideBg) { + this.descBg.setVisible(false); + } + // hide this component for now this.setVisible(false); } @@ -176,8 +189,19 @@ export default class MoveInfoOverlay extends Phaser.GameObjects.Container implem this.active = false; } - toggleInfo(force?: boolean): void { - this.setVisible(force ?? !this.visible); + toggleInfo(visible: boolean): void { + if (visible) { + this.setVisible(true); + } + this.scene.tweens.add({ + targets: this.desc, + duration: Utils.fixedInt(125), + ease: "Sine.easeInOut", + alpha: visible ? 1 : 0 + }); + if (!visible) { + this.setVisible(false); + } } isActive(): boolean { diff --git a/src/ui/pokemon-info-container.ts b/src/ui/pokemon-info-container.ts index e9ad2a26c15..242e59c599b 100644 --- a/src/ui/pokemon-info-container.ts +++ b/src/ui/pokemon-info-container.ts @@ -12,6 +12,7 @@ import ConfirmUiHandler from "./confirm-ui-handler"; import { StatsContainer } from "./stats-container"; import { TextStyle, addBBCodeTextObject, addTextObject, getTextColor } from "./text"; import { addWindow } from "./ui-theme"; +import { Species } from "#enums/species"; interface LanguageSetting { infoContainerTextSize: string; @@ -234,7 +235,19 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { this.pokemonGenderText.setVisible(false); } - if (pokemon.species.forms?.[pokemon.formIndex]?.formName) { + const formKey = (pokemon.species?.forms?.[pokemon.formIndex!]?.formKey); + const formText = Utils.capitalizeString(formKey, "-", false, false) || ""; + const speciesName = Utils.capitalizeString(Species[pokemon.species.getRootSpeciesId()], "_", true, false); + + let formName = ""; + if (pokemon.species.speciesId === Species.ARCEUS) { + formName = i18next.t(`pokemonInfo:Type.${formText?.toUpperCase()}`); + } else { + const i18key = `pokemonForm:${speciesName}${formText}`; + formName = i18next.exists(i18key) ? i18next.t(i18key) : formText; + } + + if (formName) { this.pokemonFormLabelText.setVisible(true); this.pokemonFormText.setVisible(true); const newForm = BigInt(1 << pokemon.formIndex) * DexAttr.DEFAULT_FORM; @@ -247,11 +260,10 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { this.pokemonFormLabelText.setShadowColor(getTextColor(TextStyle.WINDOW, true, this.scene.uiTheme)); } - const formName = pokemon.species.forms?.[pokemon.formIndex]?.formName; this.pokemonFormText.setText(formName.length > this.numCharsBeforeCutoff ? formName.substring(0, this.numCharsBeforeCutoff - 3) + "..." : formName); if (formName.length > this.numCharsBeforeCutoff) { this.pokemonFormText.setInteractive(new Phaser.Geom.Rectangle(0, 0, this.pokemonFormText.width, this.pokemonFormText.height), Phaser.Geom.Rectangle.Contains); - this.pokemonFormText.on("pointerover", () => (this.scene as BattleScene).ui.showTooltip("", pokemon.species.forms?.[pokemon.formIndex]?.formName, true)); + this.pokemonFormText.on("pointerover", () => (this.scene as BattleScene).ui.showTooltip("", formName, true)); this.pokemonFormText.on("pointerout", () => (this.scene as BattleScene).ui.hideTooltip()); } else { this.pokemonFormText.disableInteractive(); diff --git a/src/ui/run-info-ui-handler.ts b/src/ui/run-info-ui-handler.ts index 119b7bc9c4a..b4e4ad1130d 100644 --- a/src/ui/run-info-ui-handler.ts +++ b/src/ui/run-info-ui-handler.ts @@ -288,25 +288,29 @@ export default class RunInfoUiHandler extends UiHandler { private parseTrainerDefeat(enemyContainer: Phaser.GameObjects.Container) { // Creating the trainer sprite and adding it to enemyContainer const tObj = this.runInfo.trainer.toTrainer(this.scene); - const tObjSpriteKey = tObj.config.getSpriteKey(this.runInfo.trainer.variant === TrainerVariant.FEMALE, false); - const tObjSprite = this.scene.add.sprite(0, 5, tObjSpriteKey); - if (this.runInfo.trainer.variant === TrainerVariant.DOUBLE) { - const doubleContainer = this.scene.add.container(5, 8); - tObjSprite.setPosition(-3, -3); - const tObjPartnerSpriteKey = tObj.config.getSpriteKey(true, true); - const tObjPartnerSprite = this.scene.add.sprite(5, -3, tObjPartnerSpriteKey); - // Double Trainers have smaller sprites than Single Trainers - tObjPartnerSprite.setScale(0.20); - tObjSprite.setScale(0.20); - doubleContainer.add(tObjSprite); - doubleContainer.add(tObjPartnerSprite); - doubleContainer.setPosition(12, 38); - enemyContainer.add(doubleContainer); - } else { - tObjSprite.setScale(0.35, 0.35); - tObjSprite.setPosition(12, 28); - enemyContainer.add(tObjSprite); - } + + // Loads trainer assets on demand, as they are not loaded by default in the scene + tObj.config.loadAssets(this.scene, this.runInfo.trainer.variant).then(() => { + const tObjSpriteKey = tObj.config.getSpriteKey(this.runInfo.trainer.variant === TrainerVariant.FEMALE, false); + const tObjSprite = this.scene.add.sprite(0, 5, tObjSpriteKey); + if (this.runInfo.trainer.variant === TrainerVariant.DOUBLE) { + const doubleContainer = this.scene.add.container(5, 8); + tObjSprite.setPosition(-3, -3); + const tObjPartnerSpriteKey = tObj.config.getSpriteKey(true, true); + const tObjPartnerSprite = this.scene.add.sprite(5, -3, tObjPartnerSpriteKey); + // Double Trainers have smaller sprites than Single Trainers + tObjPartnerSprite.setScale(0.20); + tObjSprite.setScale(0.20); + doubleContainer.add(tObjSprite); + doubleContainer.add(tObjPartnerSprite); + doubleContainer.setPosition(12, 38); + enemyContainer.add(doubleContainer); + } else { + tObjSprite.setScale(0.35, 0.35); + tObjSprite.setPosition(12, 28); + enemyContainer.add(tObjSprite); + } + }); // Determining which Terastallize Modifier belongs to which Pokemon // Creates a dictionary {PokemonId: TeraShardType}