Merge branch 'Adri1:mystery-encounters-translations' into mystery-encounters-translations

This commit is contained in:
sodam 2024-09-17 22:39:49 +09:00 committed by GitHub
commit 564752bfbd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
132 changed files with 3303 additions and 991 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@ -4,114 +4,30 @@
"image": "745.png",
"format": "RGBA8888",
"size": {
"w": 300,
"h": 300
"w": 181,
"h": 181
},
"scale": 1,
"frames": [
{
"filename": "0005.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 61,
"h": 71
},
"spriteSourceSize": {
"x": 1,
"y": 4,
"w": 60,
"h": 67
},
"frame": {
"x": 0,
"y": 0,
"w": 60,
"h": 67
}
},
{
"filename": "0006.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 61,
"h": 71
},
"spriteSourceSize": {
"x": 1,
"y": 4,
"w": 60,
"h": 67
},
"frame": {
"x": 60,
"y": 0,
"w": 60,
"h": 67
}
},
{
"filename": "0015.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 61,
"h": 71
},
"spriteSourceSize": {
"x": 1,
"y": 4,
"w": 60,
"h": 67
},
"frame": {
"x": 120,
"y": 0,
"w": 60,
"h": 67
}
},
{
"filename": "0016.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 61,
"h": 71
},
"spriteSourceSize": {
"x": 1,
"y": 4,
"w": 60,
"h": 67
},
"frame": {
"x": 180,
"y": 0,
"w": 60,
"h": 67
}
},
{
"filename": "0004.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 61,
"h": 71
"w": 72,
"h": 61
},
"spriteSourceSize": {
"x": 1,
"y": 3,
"w": 60,
"h": 68
"y": 0,
"w": 71,
"h": 61
},
"frame": {
"x": 240,
"x": 0,
"y": 0,
"w": 60,
"h": 68
"w": 71,
"h": 61
}
},
{
@ -119,62 +35,41 @@
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 61,
"h": 71
},
"spriteSourceSize": {
"x": 0,
"y": 3,
"w": 61,
"h": 68
},
"frame": {
"x": 0,
"y": 67,
"w": 61,
"h": 68
}
},
{
"filename": "0014.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 61,
"h": 71
"w": 72,
"h": 61
},
"spriteSourceSize": {
"x": 1,
"y": 3,
"w": 60,
"h": 68
"y": 0,
"w": 71,
"h": 61
},
"frame": {
"x": 61,
"y": 67,
"w": 60,
"h": 68
"x": 0,
"y": 0,
"w": 71,
"h": 61
}
},
{
"filename": "0018.png",
"filename": "0005.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 61,
"h": 71
"w": 72,
"h": 61
},
"spriteSourceSize": {
"x": 0,
"y": 3,
"w": 61,
"h": 68
"x": 1,
"y": 1,
"w": 71,
"h": 60
},
"frame": {
"x": 121,
"y": 67,
"w": 61,
"h": 68
"x": 71,
"y": 0,
"w": 71,
"h": 60
}
},
{
@ -182,41 +77,41 @@
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 61,
"h": 71
"w": 72,
"h": 61
},
"spriteSourceSize": {
"x": 1,
"y": 2,
"w": 60,
"h": 69
"y": 1,
"w": 71,
"h": 60
},
"frame": {
"x": 182,
"y": 68,
"w": 60,
"h": 69
"x": 71,
"y": 0,
"w": 71,
"h": 60
}
},
{
"filename": "0017.png",
"filename": "0006.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 61,
"h": 71
"w": 72,
"h": 61
},
"spriteSourceSize": {
"x": 1,
"y": 2,
"w": 60,
"h": 69
"w": 71,
"h": 59
},
"frame": {
"x": 0,
"y": 135,
"w": 60,
"h": 69
"x": 71,
"y": 60,
"w": 71,
"h": 59
}
},
{
@ -224,209 +119,104 @@
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 61,
"h": 71
},
"spriteSourceSize": {
"x": 0,
"y": 1,
"w": 61,
"h": 70
},
"frame": {
"x": 60,
"y": 135,
"w": 61,
"h": 70
}
},
{
"filename": "0013.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 61,
"h": 71
},
"spriteSourceSize": {
"x": 0,
"y": 1,
"w": 61,
"h": 70
},
"frame": {
"x": 121,
"y": 135,
"w": 61,
"h": 70
}
},
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 61,
"h": 71
"w": 72,
"h": 61
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 61,
"h": 71
},
"frame": {
"x": 182,
"y": 137,
"w": 61,
"h": 71
}
},
{
"filename": "0011.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 61,
"h": 71
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 61,
"h": 71
},
"frame": {
"x": 182,
"y": 137,
"w": 61,
"h": 71
}
},
{
"filename": "0002.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 61,
"h": 71
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 61,
"h": 71
"w": 70,
"h": 61
},
"frame": {
"x": 0,
"y": 205,
"w": 61,
"h": 71
"y": 61,
"w": 70,
"h": 61
}
},
{
"filename": "0009.png",
"rotated": false,
"trimmed": false,
"trimmed": true,
"sourceSize": {
"w": 61,
"h": 71
"w": 72,
"h": 61
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 61,
"h": 71
"w": 70,
"h": 61
},
"frame": {
"x": 61,
"y": 205,
"w": 61,
"h": 71
"x": 0,
"y": 61,
"w": 70,
"h": 61
}
},
{
"filename": "0019.png",
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"trimmed": true,
"sourceSize": {
"w": 61,
"h": 71
"w": 72,
"h": 61
},
"spriteSourceSize": {
"x": 1,
"y": 2,
"w": 68,
"h": 59
},
"frame": {
"x": 0,
"y": 122,
"w": 68,
"h": 59
}
},
{
"filename": "0002.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 72,
"h": 61
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 61,
"h": 71
"w": 69,
"h": 61
},
"frame": {
"x": 61,
"y": 205,
"w": 61,
"h": 71
"x": 70,
"y": 119,
"w": 69,
"h": 61
}
},
{
"filename": "0010.png",
"rotated": false,
"trimmed": false,
"trimmed": true,
"sourceSize": {
"w": 61,
"h": 71
"w": 72,
"h": 61
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 61,
"h": 71
"w": 69,
"h": 61
},
"frame": {
"x": 122,
"y": 208,
"w": 61,
"h": 71
}
},
{
"filename": "0020.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 61,
"h": 71
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 61,
"h": 71
},
"frame": {
"x": 122,
"y": 208,
"w": 61,
"h": 71
}
},
{
"filename": "0012.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 61,
"h": 71
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 61,
"h": 71
},
"frame": {
"x": 183,
"y": 208,
"w": 61,
"h": 71
"x": 70,
"y": 119,
"w": 69,
"h": 61
}
}
]
@ -435,6 +225,6 @@
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:8d47c2cedd75d15c81c3aa0a0b14133c:28c19026319cfbbb59916e3d1b92f732:f9304907e03a5223c5bc78c934419106$"
"smartupdate": "$TexturePacker:SmartUpdate:9bdd7250af45db121574c90e718874a8:ca85d052f16849220d83acd876b20b8b:f9304907e03a5223c5bc78c934419106$"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@ -4,30 +4,93 @@
"image": "745.png",
"format": "RGBA8888",
"size": {
"w": 189,
"h": 189
"w": 286,
"h": 286
},
"scale": 1,
"frames": [
{
"filename": "0006.png",
"filename": "0007.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 66,
"w": 60,
"h": 58
},
"spriteSourceSize": {
"x": 1,
"y": 0,
"w": 65,
"h": 58
"x": 0,
"y": 3,
"w": 60,
"h": 55
},
"frame": {
"x": 0,
"y": 0,
"w": 65,
"w": 60,
"h": 55
}
},
{
"filename": "0008.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 60,
"h": 58
},
"spriteSourceSize": {
"x": 0,
"y": 3,
"w": 60,
"h": 55
},
"frame": {
"x": 60,
"y": 0,
"w": 60,
"h": 55
}
},
{
"filename": "0019.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 60,
"h": 58
},
"spriteSourceSize": {
"x": 0,
"y": 3,
"w": 60,
"h": 55
},
"frame": {
"x": 120,
"y": 0,
"w": 60,
"h": 55
}
},
{
"filename": "0020.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 60,
"h": 58
},
"spriteSourceSize": {
"x": 0,
"y": 3,
"w": 60,
"h": 55
},
"frame": {
"x": 180,
"y": 0,
"w": 60,
"h": 55
}
},
{
@ -35,124 +98,418 @@
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 66,
"w": 60,
"h": 58
},
"spriteSourceSize": {
"x": 0,
"y": 1,
"w": 66,
"w": 60,
"h": 57
},
"frame": {
"x": 65,
"y": 0,
"w": 66,
"x": 0,
"y": 55,
"w": 60,
"h": 57
}
},
{
"filename": "0007.png",
"filename": "0006.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 66,
"w": 60,
"h": 58
},
"spriteSourceSize": {
"x": 2,
"y": 0,
"w": 64,
"h": 58
},
"frame": {
"x": 65,
"y": 57,
"w": 64,
"h": 58
}
},
{
"filename": "0003.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 66,
"h": 58
},
"spriteSourceSize": {
"x": 2,
"x": 0,
"y": 1,
"w": 64,
"w": 60,
"h": 57
},
"frame": {
"x": 0,
"y": 58,
"w": 64,
"x": 60,
"y": 55,
"w": 60,
"h": 57
}
},
{
"filename": "0004.png",
"filename": "0009.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 66,
"w": 60,
"h": 58
},
"spriteSourceSize": {
"x": 1,
"y": 2,
"w": 65,
"h": 56
"x": 0,
"y": 1,
"w": 60,
"h": 57
},
"frame": {
"x": 120,
"y": 55,
"w": 60,
"h": 57
}
},
{
"filename": "0010.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 60,
"h": 58
},
"spriteSourceSize": {
"x": 0,
"y": 1,
"w": 60,
"h": 57
},
"frame": {
"x": 180,
"y": 55,
"w": 60,
"h": 57
}
},
{
"filename": "0022.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 60,
"h": 58
},
"spriteSourceSize": {
"x": 0,
"y": 1,
"w": 60,
"h": 57
},
"frame": {
"x": 180,
"y": 55,
"w": 60,
"h": 57
}
},
{
"filename": "0017.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 60,
"h": 58
},
"spriteSourceSize": {
"x": 0,
"y": 1,
"w": 60,
"h": 57
},
"frame": {
"x": 0,
"y": 115,
"w": 65,
"h": 56
"y": 112,
"w": 60,
"h": 57
}
},
{
"filename": "0018.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 60,
"h": 58
},
"spriteSourceSize": {
"x": 0,
"y": 1,
"w": 60,
"h": 57
},
"frame": {
"x": 60,
"y": 112,
"w": 60,
"h": 57
}
},
{
"filename": "0021.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 60,
"h": 58
},
"spriteSourceSize": {
"x": 0,
"y": 1,
"w": 60,
"h": 57
},
"frame": {
"x": 120,
"y": 112,
"w": 60,
"h": 57
}
},
{
"filename": "0001.png",
"rotated": false,
"trimmed": true,
"trimmed": false,
"sourceSize": {
"w": 66,
"w": 60,
"h": 58
},
"spriteSourceSize": {
"x": 3,
"x": 0,
"y": 0,
"w": 62,
"w": 60,
"h": 58
},
"frame": {
"x": 65,
"y": 115,
"w": 62,
"x": 180,
"y": 112,
"w": 60,
"h": 58
}
},
{
"filename": "0013.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 60,
"h": 58
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 60,
"h": 58
},
"frame": {
"x": 180,
"y": 112,
"w": 60,
"h": 58
}
},
{
"filename": "0002.png",
"rotated": false,
"trimmed": true,
"trimmed": false,
"sourceSize": {
"w": 66,
"w": 60,
"h": 58
},
"spriteSourceSize": {
"x": 3,
"x": 0,
"y": 0,
"w": 62,
"w": 60,
"h": 58
},
"frame": {
"x": 127,
"y": 115,
"w": 62,
"x": 0,
"y": 169,
"w": 60,
"h": 58
}
},
{
"filename": "0014.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 60,
"h": 58
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 60,
"h": 58
},
"frame": {
"x": 0,
"y": 169,
"w": 60,
"h": 58
}
},
{
"filename": "0003.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 60,
"h": 58
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 60,
"h": 58
},
"frame": {
"x": 60,
"y": 169,
"w": 60,
"h": 58
}
},
{
"filename": "0004.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 60,
"h": 58
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 60,
"h": 58
},
"frame": {
"x": 120,
"y": 169,
"w": 60,
"h": 58
}
},
{
"filename": "0011.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 60,
"h": 58
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 60,
"h": 58
},
"frame": {
"x": 180,
"y": 170,
"w": 60,
"h": 58
}
},
{
"filename": "0012.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 60,
"h": 58
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 60,
"h": 58
},
"frame": {
"x": 0,
"y": 227,
"w": 60,
"h": 58
}
},
{
"filename": "0024.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 60,
"h": 58
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 60,
"h": 58
},
"frame": {
"x": 0,
"y": 227,
"w": 60,
"h": 58
}
},
{
"filename": "0015.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 60,
"h": 58
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 60,
"h": 58
},
"frame": {
"x": 60,
"y": 227,
"w": 60,
"h": 58
}
},
{
"filename": "0016.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 60,
"h": 58
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 60,
"h": 58
},
"frame": {
"x": 120,
"y": 227,
"w": 60,
"h": 58
}
},
{
"filename": "0023.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 60,
"h": 58
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 60,
"h": 58
},
"frame": {
"x": 180,
"y": 228,
"w": 60,
"h": 58
}
}
@ -162,6 +519,6 @@
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:1b95a218abc87c12576165b943d3cb77:4d796dc75302ca2e18ce15e67dcf3f0f:f9304907e03a5223c5bc78c934419106$"
"smartupdate": "$TexturePacker:SmartUpdate:d67741bfb78b7ff0c920c5395dd91fc2:e78172ef76e3b6327173461a595a8a6b:f9304907e03a5223c5bc78c934419106$"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

@ -0,0 +1,188 @@
{
"textures": [
{
"image": "statuses_ca_ES.png",
"format": "RGBA8888",
"size": {
"w": 22,
"h": 64
},
"scale": 1,
"frames": [
{
"filename": "pokerus",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 22,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 22,
"h": 8
},
"frame": {
"x": 0,
"y": 0,
"w": 22,
"h": 8
}
},
{
"filename": "burn",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 8,
"w": 20,
"h": 8
}
},
{
"filename": "faint",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 16,
"w": 20,
"h": 8
}
},
{
"filename": "freeze",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 24,
"w": 20,
"h": 8
}
},
{
"filename": "paralysis",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 32,
"w": 20,
"h": 8
}
},
{
"filename": "poison",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 40,
"w": 20,
"h": 8
}
},
{
"filename": "sleep",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 48,
"w": 20,
"h": 8
}
},
{
"filename": "toxic",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 56,
"w": 20,
"h": 8
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 441 B

View File

@ -0,0 +1,188 @@
{
"textures": [
{
"image": "statuses_de.png",
"format": "RGBA8888",
"size": {
"w": 22,
"h": 64
},
"scale": 1,
"frames": [
{
"filename": "pokerus",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 22,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 22,
"h": 8
},
"frame": {
"x": 0,
"y": 0,
"w": 22,
"h": 8
}
},
{
"filename": "burn",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 8,
"w": 20,
"h": 8
}
},
{
"filename": "faint",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 16,
"w": 20,
"h": 8
}
},
{
"filename": "freeze",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 24,
"w": 20,
"h": 8
}
},
{
"filename": "paralysis",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 32,
"w": 20,
"h": 8
}
},
{
"filename": "poison",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 40,
"w": 20,
"h": 8
}
},
{
"filename": "sleep",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 48,
"w": 20,
"h": 8
}
},
{
"filename": "toxic",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 56,
"w": 20,
"h": 8
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -0,0 +1,188 @@
{
"textures": [
{
"image": "statuses_es.png",
"format": "RGBA8888",
"size": {
"w": 22,
"h": 64
},
"scale": 1,
"frames": [
{
"filename": "pokerus",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 22,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 22,
"h": 8
},
"frame": {
"x": 0,
"y": 0,
"w": 22,
"h": 8
}
},
{
"filename": "burn",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 8,
"w": 20,
"h": 8
}
},
{
"filename": "faint",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 16,
"w": 20,
"h": 8
}
},
{
"filename": "freeze",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 24,
"w": 20,
"h": 8
}
},
{
"filename": "paralysis",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 32,
"w": 20,
"h": 8
}
},
{
"filename": "poison",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 40,
"w": 20,
"h": 8
}
},
{
"filename": "sleep",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 48,
"w": 20,
"h": 8
}
},
{
"filename": "toxic",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 56,
"w": 20,
"h": 8
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 441 B

View File

@ -0,0 +1,188 @@
{
"textures": [
{
"image": "statuses_fr.png",
"format": "RGBA8888",
"size": {
"w": 22,
"h": 64
},
"scale": 1,
"frames": [
{
"filename": "pokerus",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 22,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 22,
"h": 8
},
"frame": {
"x": 0,
"y": 0,
"w": 22,
"h": 8
}
},
{
"filename": "burn",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 8,
"w": 20,
"h": 8
}
},
{
"filename": "faint",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 16,
"w": 20,
"h": 8
}
},
{
"filename": "freeze",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 24,
"w": 20,
"h": 8
}
},
{
"filename": "paralysis",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 32,
"w": 20,
"h": 8
}
},
{
"filename": "poison",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 40,
"w": 20,
"h": 8
}
},
{
"filename": "sleep",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 48,
"w": 20,
"h": 8
}
},
{
"filename": "toxic",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 56,
"w": 20,
"h": 8
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@ -0,0 +1,188 @@
{
"textures": [
{
"image": "statuses_it.png",
"format": "RGBA8888",
"size": {
"w": 22,
"h": 64
},
"scale": 1,
"frames": [
{
"filename": "pokerus",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 22,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 22,
"h": 8
},
"frame": {
"x": 0,
"y": 0,
"w": 22,
"h": 8
}
},
{
"filename": "burn",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 8,
"w": 20,
"h": 8
}
},
{
"filename": "faint",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 16,
"w": 20,
"h": 8
}
},
{
"filename": "freeze",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 24,
"w": 20,
"h": 8
}
},
{
"filename": "paralysis",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 32,
"w": 20,
"h": 8
}
},
{
"filename": "poison",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 40,
"w": 20,
"h": 8
}
},
{
"filename": "sleep",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 48,
"w": 20,
"h": 8
}
},
{
"filename": "toxic",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 56,
"w": 20,
"h": 8
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 441 B

View File

@ -0,0 +1,188 @@
{
"textures": [
{
"image": "statuses_ja.png",
"format": "RGBA8888",
"size": {
"w": 22,
"h": 64
},
"scale": 1,
"frames": [
{
"filename": "pokerus",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 22,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 22,
"h": 8
},
"frame": {
"x": 0,
"y": 0,
"w": 22,
"h": 8
}
},
{
"filename": "burn",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 8,
"w": 20,
"h": 8
}
},
{
"filename": "faint",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 16,
"w": 20,
"h": 8
}
},
{
"filename": "freeze",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 24,
"w": 20,
"h": 8
}
},
{
"filename": "paralysis",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 32,
"w": 20,
"h": 8
}
},
{
"filename": "poison",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 40,
"w": 20,
"h": 8
}
},
{
"filename": "sleep",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 48,
"w": 20,
"h": 8
}
},
{
"filename": "toxic",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 56,
"w": 20,
"h": 8
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@ -0,0 +1,188 @@
{
"textures": [
{
"image": "statuses_ko.png",
"format": "RGBA8888",
"size": {
"w": 22,
"h": 64
},
"scale": 1,
"frames": [
{
"filename": "pokerus",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 22,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 22,
"h": 8
},
"frame": {
"x": 0,
"y": 0,
"w": 22,
"h": 8
}
},
{
"filename": "burn",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 8,
"w": 20,
"h": 8
}
},
{
"filename": "faint",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 16,
"w": 20,
"h": 8
}
},
{
"filename": "freeze",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 24,
"w": 20,
"h": 8
}
},
{
"filename": "paralysis",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 32,
"w": 20,
"h": 8
}
},
{
"filename": "poison",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 40,
"w": 20,
"h": 8
}
},
{
"filename": "sleep",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 48,
"w": 20,
"h": 8
}
},
{
"filename": "toxic",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 56,
"w": 20,
"h": 8
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 441 B

View File

@ -0,0 +1,188 @@
{
"textures": [
{
"image": "statuses_pt_BR.png",
"format": "RGBA8888",
"size": {
"w": 22,
"h": 64
},
"scale": 1,
"frames": [
{
"filename": "pokerus",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 22,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 22,
"h": 8
},
"frame": {
"x": 0,
"y": 0,
"w": 22,
"h": 8
}
},
{
"filename": "burn",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 8,
"w": 20,
"h": 8
}
},
{
"filename": "faint",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 16,
"w": 20,
"h": 8
}
},
{
"filename": "freeze",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 24,
"w": 20,
"h": 8
}
},
{
"filename": "paralysis",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 32,
"w": 20,
"h": 8
}
},
{
"filename": "poison",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 40,
"w": 20,
"h": 8
}
},
{
"filename": "sleep",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 48,
"w": 20,
"h": 8
}
},
{
"filename": "toxic",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 56,
"w": 20,
"h": 8
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 519 B

View File

@ -0,0 +1,188 @@
{
"textures": [
{
"image": "statuses_zh_CN.png",
"format": "RGBA8888",
"size": {
"w": 22,
"h": 64
},
"scale": 1,
"frames": [
{
"filename": "pokerus",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 22,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 22,
"h": 8
},
"frame": {
"x": 0,
"y": 0,
"w": 22,
"h": 8
}
},
{
"filename": "burn",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 8,
"w": 20,
"h": 8
}
},
{
"filename": "faint",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 16,
"w": 20,
"h": 8
}
},
{
"filename": "freeze",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 24,
"w": 20,
"h": 8
}
},
{
"filename": "paralysis",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 32,
"w": 20,
"h": 8
}
},
{
"filename": "poison",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 40,
"w": 20,
"h": 8
}
},
{
"filename": "sleep",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 48,
"w": 20,
"h": 8
}
},
{
"filename": "toxic",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 56,
"w": 20,
"h": 8
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 441 B

View File

@ -0,0 +1,188 @@
{
"textures": [
{
"image": "statuses.png",
"format": "RGBA8888",
"size": {
"w": 22,
"h": 64
},
"scale": 1,
"frames": [
{
"filename": "pokerus",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 22,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 22,
"h": 8
},
"frame": {
"x": 0,
"y": 0,
"w": 22,
"h": 8
}
},
{
"filename": "burn",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 8,
"w": 20,
"h": 8
}
},
{
"filename": "faint",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 16,
"w": 20,
"h": 8
}
},
{
"filename": "freeze",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 24,
"w": 20,
"h": 8
}
},
{
"filename": "paralysis",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 32,
"w": 20,
"h": 8
}
},
{
"filename": "poison",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 40,
"w": 20,
"h": 8
}
},
{
"filename": "sleep",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 48,
"w": 20,
"h": 8
}
},
{
"filename": "toxic",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 20,
"h": 8
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 20,
"h": 8
},
"frame": {
"x": 0,
"y": 56,
"w": 20,
"h": 8
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 441 B

View File

@ -813,10 +813,6 @@ export default class Move implements Localizable {
power.value *= typeBoost.boostValue;
}
if (source.scene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() && this.type === Type.GROUND && this.moveTarget === MoveTarget.ALL_NEAR_OTHERS) {
power.value /= 2;
}
applyMoveAttrs(VariablePowerAttr, source, target, this, power);
source.scene.applyModifiers(PokemonMultiHitModifier, source.isPlayer(), source, new Utils.IntegerHolder(0), power);
@ -6956,6 +6952,7 @@ export function initMoves() {
.makesContact(false),
new AttackMove(Moves.EARTHQUAKE, Type.GROUND, MoveCategory.PHYSICAL, 100, 100, 10, -1, 0, 1)
.attr(HitsTagAttr, BattlerTagType.UNDERGROUND, true)
.attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1)
.makesContact(false)
.target(MoveTarget.ALL_NEAR_OTHERS),
new AttackMove(Moves.FISSURE, Type.GROUND, MoveCategory.PHYSICAL, 200, 30, 5, -1, 0, 1)
@ -7349,6 +7346,7 @@ export function initMoves() {
new AttackMove(Moves.MAGNITUDE, Type.GROUND, MoveCategory.PHYSICAL, -1, 100, 30, -1, 0, 2)
.attr(PreMoveMessageAttr, magnitudeMessageFunc)
.attr(MagnitudePowerAttr)
.attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1)
.attr(HitsTagAttr, BattlerTagType.UNDERGROUND, true)
.makesContact(false)
.target(MoveTarget.ALL_NEAR_OTHERS),
@ -8223,6 +8221,7 @@ export function initMoves() {
.target(MoveTarget.ALL_NEAR_ENEMIES),
new AttackMove(Moves.BULLDOZE, Type.GROUND, MoveCategory.PHYSICAL, 60, 100, 20, 100, 0, 5)
.attr(StatStageChangeAttr, [ Stat.SPD ], -1)
.attr(MovePowerMultiplierAttr, (user, target, move) => user.scene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1)
.makesContact(false)
.target(MoveTarget.ALL_NEAR_OTHERS),
new AttackMove(Moves.FROST_BREATH, Type.ICE, MoveCategory.SPECIAL, 60, 90, 10, 100, 0, 5)

View File

@ -684,7 +684,7 @@ export const pokemonFormChanges: PokemonFormChanges = {
new SpeciesFormChange(Species.GROUDON, "", SpeciesFormKey.PRIMAL, new SpeciesFormChangeItemTrigger(FormChangeItem.RED_ORB))
],
[Species.RAYQUAZA]: [
new SpeciesFormChange(Species.RAYQUAZA, "", SpeciesFormKey.MEGA, new SpeciesFormChangeCompoundTrigger(new SpeciesFormChangeItemTrigger(FormChangeItem.RAYQUAZITE), new SpeciesFormChangeMoveLearnedTrigger(Moves.DRAGON_ASCENT)))
new SpeciesFormChange(Species.RAYQUAZA, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.RAYQUAZITE))
],
[Species.DEOXYS]: [
new SpeciesFormChange(Species.DEOXYS, "normal", "attack", new SpeciesFormChangeItemTrigger(FormChangeItem.SHARP_METEORITE)),

View File

@ -95,6 +95,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
public metLevel: integer;
public metBiome: Biome | -1;
public metSpecies: Species;
public metWave: number;
public luck: integer;
public pauseEvolutions: boolean;
public pokerus: boolean;
@ -194,6 +195,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
this.luck = dataSource.luck;
this.metBiome = dataSource.metBiome;
this.metSpecies = dataSource.metSpecies ?? (this.metBiome !== -1 ? this.species.speciesId : this.species.getRootSpeciesId(true));
this.metWave = dataSource.metWave ?? (this.metBiome === -1 ? -1 : 0);
this.pauseEvolutions = dataSource.pauseEvolutions;
this.pokerus = !!dataSource.pokerus;
this.evoCounter = dataSource.evoCounter ?? 0;
@ -240,6 +242,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
this.metLevel = level;
this.metBiome = scene.currentBattle ? scene.arena.biomeType : -1;
this.metSpecies = species.speciesId;
this.metWave = scene.currentBattle ? scene.currentBattle.waveIndex : -1;
this.pokerus = false;
if (level > 1) {
@ -4081,6 +4084,7 @@ export class PlayerPokemon extends Pokemon {
newPokemon.metLevel = this.metLevel;
newPokemon.metBiome = this.metBiome;
newPokemon.metSpecies = this.metSpecies;
newPokemon.metWave = this.metWave;
newPokemon.fusionSpecies = this.fusionSpecies;
newPokemon.fusionFormIndex = this.fusionFormIndex;
newPokemon.fusionAbilityIndex = this.fusionAbilityIndex;
@ -4088,6 +4092,7 @@ export class PlayerPokemon extends Pokemon {
newPokemon.fusionVariant = this.fusionVariant;
newPokemon.fusionGender = this.fusionGender;
newPokemon.fusionLuck = this.fusionLuck;
newPokemon.usedTMs = this.usedTMs;
this.scene.getParty().push(newPokemon);
newPokemon.evolve((!isFusion ? newEvolution : new FusionSpeciesFormEvolution(this.id, newEvolution)), evoSpecies);
@ -4779,6 +4784,7 @@ export class EnemyPokemon extends Pokemon {
this.pokeball = pokeballType;
this.metLevel = this.level;
this.metBiome = this.scene.arena.biomeType;
this.metWave = this.scene.currentBattle.waveIndex;
this.metSpecies = this.species.speciesId;
const newPokemon = this.scene.addPlayerPokemon(this.species, this.level, this.abilityIndex, this.formIndex, this.gender, this.shiny, this.variant, this.ivs, this.nature, this);

View File

@ -241,12 +241,15 @@ export class LoadingScene extends SceneBase {
const lang = i18next.resolvedLanguage;
if (lang !== "en") {
if (Utils.verifyLang(lang)) {
this.loadAtlas(`statuses_${lang}`, "");
this.loadAtlas(`types_${lang}`, "");
} else {
// Fallback to English
this.loadAtlas("statuses", "");
this.loadAtlas("types", "");
}
} else {
this.loadAtlas("statuses", "");
this.loadAtlas("types", "");
}
const availableLangs = ["en", "de", "it", "fr", "ja", "ko", "es", "pt-BR", "zh-CN"];

View File

@ -77,18 +77,18 @@
"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_galactic_admin": "SDLP Vs. Team Galactic Commander",
"battle_skull_admin": "SM Vs. Team Skull Vorstand",
"battle_oleana": "SWSH Vs. Oleana",
"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",
@ -149,7 +149,7 @@
"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\n",
"mystery_encounter_fun_and_games": "PMD Erkundungsteam Himmel Gildenmeister Knuddeluff",
"mystery_encounter_gen_5_gts": "SW GTS",
"mystery_encounter_gen_6_gts": "XY GTS"
}

View File

@ -6,8 +6,9 @@
"option": {
"1": {
"label": "Nach Wertsachen suchen",
"tooltip": "(-) Keine Heilitems in Läden\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!$Du musst ohne Heilitems auskommen.$Aber du hast einige unglaubliche Items im Müll gefunden!"
"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",

View File

@ -11,7 +11,7 @@
"cancel": "Abbrechen",
"memoString": "Wesen: {{natureFragment}}\n{{metFragment}}",
"metFragment": {
"normal": "Herkunft: {{biome}}\nMit Lv. {{level}} erhalten.",
"normal": "Herkunft: {{biome}} - Welle {{wave}}\nMit Lv. {{level}} erhalten.",
"apparently": "Herkunft: {{biome}}\nOffenbar mit Lv. {{level}} erhalten."
},
"natureFragment": {

View File

@ -6,8 +6,8 @@
"option": {
"1": {
"label": "Dig for Valuables",
"tooltip": "(-) Lose Healing Items in Shops\n(+) Gain Amazing Items",
"selected": "You wade through the garbage pile, becoming mired in filth.$There's no way any respectable shopkeepers\nwill sell you anything in your grimy state!$You'll just have to make do without shop healing items.$However, you found some incredible items in the garbage!"
"tooltip": "(-) Items in Shops Cost 3x\n(+) Gain Amazing Items",
"selected": "You wade through the garbage pile, becoming mired in filth.$There's no way any respectable shopkeeper would\nsell you items at the normal rate in your grimy state!$You'll have to pay extra for items now.$However, you found some incredible items in the garbage!"
},
"2": {
"label": "Investigate Further",

View File

@ -11,7 +11,7 @@
"cancel": "Cancel",
"memoString": "{{natureFragment}} nature,\n{{metFragment}}",
"metFragment": {
"normal": "met at Lv{{level}},\n{{biome}}.",
"normal": "met at Lv{{level}},\n{{biome}}, Wave {{wave}}.",
"apparently": "apparently met at Lv{{level}},\n{{biome}}."
},
"natureFragment": {

View File

@ -31,11 +31,11 @@
"option": {
"1": {
"label": "Aceptar el Desafío",
"tooltip": "(-) Batalla Difícil\n(+) Obtén un @[TOOLTIP_TITLE]{Very Rare Egg}"
"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]{Egg}"
"tooltip": "(+) Equipo Curado\n(+) Obtén un @[TOOLTIP_TITLE]{Huevo}"
}
},
"eggTypes": {

View File

@ -6,7 +6,7 @@
"option": {
"1": {
"label": "Combatir",
"tooltip": "(-) Batalla Difícil\n(+) Recompensas de su Alijo de Bayas",
"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}}!"

View File

@ -1,14 +1,14 @@
{
"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 una mascota así!$¡Te pagaría generosamente,\n también te daría este viejo abalorio!",
"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]{Shiny Charm}\n(+) Obtén {{price, money}}",
"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": {

View File

@ -1,27 +1,27 @@
{
"intro": "An {{oricorioName}} dances sadly alone, without a partner.",
"title": "Dancing Lessons",
"description": "The {{oricorioName}} doesn't seem aggressive, if anything it seems sad.\n\nMaybe it just wants someone to dance with...",
"query": "What will you do?",
"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": "Battle It",
"tooltip": "(-) Tough Battle\n(+) Gain a Baton",
"selected": "The {{oricorioName}} is distraught and moves to defend itself!",
"boss_enraged": "The {{oricorioName}}'s fear boosted its stats!"
"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": "Learn Its Dance",
"tooltip": "(+) Teach a Pokémon Revelation Dance",
"selected": "You watch the {{oricorioName}} closely as it performs its dance...$@s{level_up_fanfare}Your {{selectedPokemon}} learned from the {{oricorioName}}!"
"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": "Show It a Dance",
"tooltip": "(-) Teach the {{oricorioName}} a Dance Move\n(+) The {{oricorioName}} Will Like You",
"disabled_tooltip": "Your Pokémon need to know a Dance move for this.",
"select_prompt": "Select a Dance type move to use.",
"selected": "The {{oricorioName}} watches in fascination as\n{{selectedPokemon}} shows off {{selectedMove}}!$It loves the display!$@s{level_up_fanfare}The {{oricorioName}} wants to join your party!"
"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": "This Pokémon doesn't know a Dance move"
"invalid_selection": "Este Pokémon no conoce ningún movimiento de danza"
}

View File

@ -1,24 +1,24 @@
{
"intro": "A strange man in a tattered coat\nstands in your way...",
"speaker": "Shady Guy",
"intro_dialogue": "Hey, you!$I've been working on a new device\nto bring out a Pokémon's latent power!$It completely rebinds the Pokémon's atoms\nat a molecular level into a far more powerful form.$Hehe...@d{64} I just need some sac-@d{32}\nErr, test subjects, to prove it works.",
"title": "Dark Deal",
"description": "The disturbing fellow holds up some Pokéballs.\n\"I'll make it worth your while! You can have these strong Pokéballs as payment, All I need is a Pokémon from your team! Hehe...\"",
"query": "What will you do?",
"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": "Accept",
"tooltip": "(+) 5 Rogue Balls\n(?) Enhance a Random Pokémon",
"selected_dialogue": "Let's see, that {{pokeName}} will do nicely!$Remember, I'm not responsible\nif anything bad happens!@d{32} Hehe...",
"selected_message": "The man hands you 5 Rogue Balls.${{pokeName}} hops into the strange machine...$Flashing lights and weird noises\nstart coming from the machine!$...@d{96} Something emerges\nfrom the device, raging wildly!"
"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": "Refuse",
"tooltip": "(-) No Rewards",
"selected": "Not gonna help a poor fellow out?\nPah!"
"label": "Rechazar",
"tooltip": "(-) Ninguna Recompensa",
"selected": "¿No vas a ayudar a un pobre hombre?\n¡Bah!"
}
},
"outro": "After the harrowing encounter,\nyou collect yourself and depart."
"outro": "Después del encuentro angustioso, te recuperas y te marchas."
}

View File

@ -1,29 +1,29 @@
{
"intro": "A pack of {{delibirdName}} have appeared!",
"title": "Delibir-dy",
"description": "The {{delibirdName}}s are looking at you expectantly, as if they want something. Perhaps giving them an item or some money would satisfy them?",
"query": "What will you give them?",
"invalid_selection": "Pokémon doesn't have that kind of item.",
"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": "Give Money",
"tooltip": "(-) Give the {{delibirdName}}s {{money, money}}\n(+) Receive a Gift Item",
"selected": "You toss the money to the {{delibirdName}}s,\nwho chatter amongst themselves excitedly.$They turn back to you and happily give you a present!"
"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": "Give Food",
"tooltip": "(-) Give the {{delibirdName}}s a Berry or Reviver Seed\n(+) Receive a Gift Item",
"select_prompt": "Select an item to give.",
"selected": "You toss the {{chosenItem}} to the {{delibirdName}}s,\nwho chatter amongst themselves excitedly.$They turn back to you and happily give you a present!"
"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": "Give an Item",
"tooltip": "(-) Give the {{delibirdName}}s a Held Item\n(+) Receive a Gift Item",
"select_prompt": "Select an item to give.",
"selected": "You toss the {{chosenItem}} to the {{delibirdName}}s,\nwho chatter amongst themselves excitedly.$They turn back to you and happily give you a present!"
"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": "The {{delibirdName}} pack happily waddles off into the distance.$What a curious little exchange!"
"outro": "La bandada de {{delibirdName}} se aleja felizmente a lo lejos. ¡Qué intercambio tan curioso!"
}

View File

@ -11,7 +11,7 @@
"cancel": "Salir",
"memoString": "Naturaleza {{natureFragment}},\n{{metFragment}}",
"metFragment": {
"normal": "encontrado al Nv. {{level}},\n{{biome}}.",
"normal": "encontrado al Nv. {{level}},\n{{biome}}, Oleada {{wave}}.",
"apparently": "aparentemente encontrado al Nv. {{level}},\n{{biome}}."
}
}

View File

@ -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ó!"
},

View File

@ -48,7 +48,10 @@
"moveNotImplemented": "{{moveName}} nest pas encore implémenté et ne peut pas être sélectionné.",
"moveNoPP": "Il ny a plus de PP pour\ncette capacité !",
"moveDisabled": "{{moveName}} est sous entrave !",
"canOnlyUseMove": "{{pokemonName}} ne peut utiliser\nque la capacité {{moveName}} !",
"moveCannotBeSelected": "La capacité {{moveName}}\nne peut pas être choisie !",
"disableInterruptedMove": "Il y a une entrave sur la capacité {{moveName}}\nde{{pokemonNameWithAffix}} !",
"throatChopInterruptedMove": "Exécu-Son empêche {{pokemonName}}\ndutiliser la capacité !",
"noPokeballForce": "Une force mystérieuse\nempêche lutilisation des Poké Balls.",
"noPokeballTrainer": "Le Dresseur détourne la Ball\nVoler, cest mal !",
"noPokeballMulti": "Impossible ! On ne peut pas viser\nquand il y a deux Pokémon !",

View File

@ -46,7 +46,7 @@
"yes": "Oui",
"no": "Non",
"disclaimer": "AVERTISSEMENT",
"disclaimerDescription": "Ce jeu nest pas un produit fini et peut contenir des problèmes de jouabilité, dont de possibles pertes de sauvegardes,\ndes modifications sans avertissement et pourrait ou non encore être mis à jour ou terminé.",
"disclaimerDescription": "Ce jeu nest pas un produit fini.\nIl peut contenir des problèmes de jouabilité, dont de possibles pertes de sauvegardes,\ndes modifications sans avertissement et pourrait à tout moment cesser dêtre mis à jour.",
"choosePokemon": "Sélectionnez un Pokémon.",
"renamePokemon": "Renommer le Pokémon",
"rename": "Renommer",

View File

@ -7,6 +7,7 @@
"switchedStat": "{{pokemonName}} et sa cible échangent leur {{stat}} !",
"sharedGuard": "{{pokemonName}} additionne sa garde à celle de sa cible et redistribue le tout équitablement !",
"sharedPower": "{{pokemonName}} additionne sa force à celle de sa cible et redistribue le tout équitablement !",
"shiftedStats": "{{pokemonName}} échange {{statToSwitch}} et {{statToSwitchWith}} !",
"goingAllOutForAttack": "{{pokemonName}} a pris\ncette capacité au sérieux !",
"regainedHealth": "{{pokemonName}}\nrécupère des PV !",
"keptGoingAndCrashed": "{{pokemonName}}\nsécrase au sol !",
@ -67,5 +68,7 @@
"swapArenaTags": "Les effets affectant chaque côté du terrain\nont été échangés par {{pokemonName}} !",
"exposedMove": "{{targetPokemonName}} est identifié\npar {{pokemonName}} !",
"safeguard": "{{targetName}} est protégé\npar la capacité Rune Protect !",
"substituteOnOverlap": "{{pokemonName}} a déjà\nun clone !",
"substituteNotEnoughHp": "Mais il est trop faible\npour créer un clone !",
"afterYou": "{{pokemonName}} accepte\navec joie !"
}

View File

@ -25,7 +25,7 @@
"accept": "Ce regard…\nBattons-nous.",
"decline": "Je comprends, ton équpie ma lair lessivée.$Laisse-moi taider."
},
"title": "Épreuve de valeur",
"title": "Prouver sa valeur",
"description": "Cette personne semble déterminée à vous donner un Œuf, quimporte votre décision. Cependant, si vous parvenez à la battre, vous recevrez lŒuf le plus rare.",
"query": "Que voulez-vous faire ?",
"option": {

View File

@ -8,18 +8,18 @@
"label": "Laffronter",
"tooltip": "(-) Combat difficile\n(+) Récompenses de sa planque à Baies",
"selected": "Le {{greedentName}} gonfle ses joues\net se prépare au combat !",
"boss_enraged": "Linsatiable amour de {{greedentName}} pour la nourriture le rend furieux !",
"food_stash": "Il semblerait que {{greedentName}} gardait une pile de nourriture colossale !$@s{item_fanfare}Tous les Pokémon de votre équipe remportent une {{foodReward}} !"
"boss_enraged": "Linsatiable 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}} sur sa corde sensible.$Il ne vous rend pas toutes vos Baies, mais vous en balance quelques-unes."
"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 lintégralité\ndes Baies en un éclair !$Il vous regarde avec tendresse\nen se tapotant le ventre.$Peut-être pourriez-vous lui\nen donner encore pendant votre périple…$@s{level_up_fanfare}Le {{greedentName}} veut rejoindre votre équipe !"
"selected": "Le {{greedentName}} engloutit linté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 !"
}
}
}

View File

@ -1,7 +1,7 @@
{
"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}} ma lair fa-bu-leux !$Jai toujours désiré posséder un tel Pokémon !$Je peux vous payer grassement,\nainsi que vous donner petite babiole !",
"intro_dialogue": "Bonchour-haann !$Je ne puis carrément pas ignorer que votre\n{{strongestPokemon}} ma lair fa-bu-leux-han !$Jai toujours désiré posséder un tel Pokémon !$Je peux vous payer grassement,\nainsi que vous donner petite babiole-han !",
"title": "Laffaire 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 dun tel atout ?",
"query": "Que voulez-vous faire ?",
@ -9,7 +9,7 @@
"1": {
"label": "Accepter loffre",
"tooltip": "(-) Vous perdez {{strongestPokemon}}\n(+) Gain dun @[TOOLTIP_TITLE]{Charme Chroma}\n(+) Gain de {{price, money}}",
"selected": "Fa-bu-leux!@d{32} Par ici, {{strongestPokemon}} !$Viens que je te montre fièrement au club de yacht !$Ils vont trooop avoir le seum-haann !"
"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",

View File

@ -1,9 +1,9 @@
{
"intro": "Mais cest…@d{64} un clown ?",
"speaker": "Clown",
"intro_dialogue": "Tas lair clownesque, prépare-toi pour un combat magistral !$Je vais te montrer ce que sont les arts de la rue !",
"intro_dialogue": "Eh toi, tu mas lair 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 lair très motivé de vous provoquer en combat, mais dans quel but ?\n\nLe {{blacephalonName}} est très étrange, comme sil possédait @[TOOLTIP_TITLE]{des types et un talent inhabituels.}",
"description": "Quelque chose semble louche. Ce Clown a lair très motivé de vous provoquer en combat, mais dans quel but ?\n\nSon {{blacephalonName}} est très étrange, comme sil possédait @[TOOLTIP_TITLE]{des types et un talent inhabituels.}",
"query": "Que voulez-vous faire ?",
"option": {
"1": {
@ -18,14 +18,14 @@
"2": {
"label": "Rester de marbre",
"tooltip": "(-) Agace le Clown\n(?) Affecte les objets de vos Pokémon",
"selected": "Ça se défile lâchement dun duel exceptionnel ?\nTâte ma colère !",
"selected": "Ça se défile lâchement dun 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 dun duel exceptionnel ?\nTâte ma colère !",
"selected": "Ça se défile lâchement dun 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 !"
}

View File

@ -15,13 +15,13 @@
"2": {
"label": "Donner de la nourriture",
"tooltip": "(-) Donner une Baie ou une Résugraine aux {{delibirdName}}\n(+) Recevez un objet",
"select_prompt": "Sélectionner un objet à donner.",
"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électionner un objet à donner.",
"select_prompt": "Sélectionnez un objet à donner.",
"selected": "Vous lancez lobjet {{chosenItem}} aux {{delibirdName}},\nqui se lancent dans une grande délibération.$Ils reviennent ravis vers vous avec un cadeau !"
}
},

View File

@ -1,26 +1,26 @@
{
"intro": "Il y a une dame avec des tas de sacs de courses.",
"intro": "Il y a une dame avec des tas de sacs de courses\nà ne savoir quen faire.",
"speaker": "Cliente",
"intro_dialogue": "Bonjour !\nToi aussi tes là pour les incroyables promos ?$Il y a un coupon spécial que tu peux utiliser en échange\ndun objet gratuit pendant toute la durée de la promo !$Jen ai un en trop.\nTiens, prends-le !",
"title": "Promos au Centre Commercial",
"description": "Vous voyez des produits où que vous regardez ! Il y a 4 comptoirs auprès desquels vous pouvez dépenser ce coupon contre une grande variété dobjets. Que de choix !",
"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é dobjets.",
"query": "À quel comptoir se rendre ?",
"option": {
"1": {
"label": "CT",
"tooltip": "(+) Boutique de CT"
"tooltip": "(+) CT dans la boutique"
},
"2": {
"label": "Accélérateurs",
"tooltip": "(+) Boutique dAccélérateurs"
"tooltip": "(+) Accélérateurs dans la boutique"
},
"3": {
"label": "Objets de Combat",
"tooltip": "(+) Boutique dobjets de boost"
"tooltip": "(+) Objets de boost dans la boutique"
},
"4": {
"label": "Poké Balls",
"tooltip": "(+) Boutique de Poké Balls"
"tooltip": "(+) Poké Balls dans la boutique"
}
},
"outro": "Quelle affaire !\nVous devriez revenir y faire vos achats plus souvent."

View File

@ -2,18 +2,18 @@
"intro": "Un homme en manteau noir vous aborde.",
"speaker": "Dealer",
"intro_dialogue": ".@d{16}.@d{16}.@d{16}$Jai de la bonne came pour toi, mais seulement\nsi tas les thunes.$Assure-toi quand même que tes Pokémon\npuissent encaisser.",
"title": "Le Dealer dAccélérateurs",
"description": "Lhomme ouvre son manteau et vous laisse apercevoir des Accélérateurs pour Pokémon. Le tarif quil annonce semble être une bonne affaire. Peut-être même un peu trop belle…\nIl vous laisse le choix entre deux offres.",
"title": "Le Dealer daccélérateurs",
"description": "Lhomme ouvre son manteau et vous laisse apercevoir des accélérateurs pour Pokémon. Le tarif quil 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"
"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"
"tooltip": "(-) Payer {{option2Money, money}}\n(+) Le Pokémon choisi gagne 2 accélérateurs au hasard"
},
"3": {
"label": "Partir",

View File

@ -6,8 +6,8 @@
"option": {
"1": {
"label": "Le fouiller",
"tooltip": "(-) Aucun objet de soin en boutique\n(+) Gain dobjets exceptionnels",
"selected": "Vous barbotez dans le tas dordures et\nvous vous couvrez de crasse.$Vu votre état, il ny a vraiment plus aucune chance quune boutique accpete de vous donner quoi que ce soit !$Vous aller devoir vous débrouiller sans objet de soin.$Mais ça valait le coup, car ce que vous avez trouvé\ndans les ordures est incroyable !"
"tooltip": "(-) Prix de la boutique triplés\n(+) Gain dobjets exceptionnels",
"selected": "Vous barbotez dans le tas dordures 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",

View File

@ -13,6 +13,7 @@
"ALL": "Tout",
"PASS_BATON": "Relais",
"UNPAUSE_EVOLUTION": "Réactiver Évolution",
"PAUSE_EVOLUTION": "Interrompre Évolution",
"REVIVE": "Ranimer",
"RENAME": "Renommer",
"SELECT": "Sélectionner",
@ -24,6 +25,7 @@
"tooManyItems": "{{pokemonName}} porte trop\ndexemplaires de cet objet !",
"anyEffect": "Cela naura aucun effet.",
"unpausedEvolutions": "{{pokemonName}} peut de nouveau évoluer.",
"pausedEvolutions": "{{pokemonName}} ne peut plus évoluer.",
"unspliceConfirmation": "Voulez-vous vraiment séparer {{fusionName}}\nde {{pokemonName}} ? {{fusionName}} sera perdu.",
"wasReverted": "{{fusionName}} est redevenu {{pokemonName}}.",
"releaseConfirmation": "Voulez-vous relâcher {{pokemonName}} ?",

View File

@ -11,7 +11,7 @@
"cancel": "Annuler",
"memoString": "{{natureFragment}} de nature,\n{{metFragment}}",
"metFragment": {
"normal": "rencontré au N.{{level}},\n{{biome}}.",
"normal": "rencontré au N.{{level}},\n{{biome}}, Vague {{wave}}.",
"apparently": "apparemment rencontré au N.{{level}},\n{{biome}}."
},
"natureFragment": {

View File

@ -94,7 +94,7 @@
"caitlin": "Percila",
"malva": "Malva",
"siebold": "Narcisse",
"wikstrom": "Tileo",
"wikstrom": "Thyméo",
"drasna": "Dracéna",
"hala": "Pectorius",
"molayne": "Molène",

View File

@ -6,5 +6,5 @@
"pokerus": "Chaque jour, 3 starters tirés aléatoirement ont un contour violet.\n$Si un starter que vous possédez la, essayez de lajouter à votre équipe. Vérifiez bien son résumé !",
"statChange": "Les changements de stats persistent à travers\nles combats tant que le Pokémon nest pas rappelé.\n$Vos Pokémon sont rappelés avant un combat de\nDresseur et avant dentrer dans un nouveau biome.\n$Vous pouvez voir en combat les changements de stats\ndun Pokémon en maintenant C ou Maj.\n$Vous pouvez également voir les capacités de ladversaire\nen maintenant V.\n$Seules les capacités que le Pokémon a utilisées dans\nce combat sont consultables.",
"selectItem": "Après chaque combat, vous avez le choix entre 3 objets\ntirés au sort. Vous ne pouvez en prendre quun.\n$Cela peut être des objets consommables, des objets à\nfaire tenir, ou des objets passifs aux effets permanents.\n$La plupart des effets des objets non-consommables se cumuleront de diverses manières.\n$Certains objets napparaitront que sils ont une utilité immédiate, comme les objets dévolution.\n$Vous pouvez aussi transférer des objets tenus entre\nPokémon en utilisant loption de transfert.\n$Loption de transfert apparait en bas à droite dès\nquun Pokémon de léquipe porte un objet.\n$Vous pouvez acheter des consommables avec de\nlargent. Plus vous progressez, plus le choix sera large.\n$Choisir un des objets gratuits déclenchera le prochain\ncombat, donc faites bien tous vos achats avant.",
"eggGacha": "Depuis cet écran, vous pouvez utiliser vos coupons\npour recevoir Œufs de Pokémon au hasard.\n$Les Œufs éclosent après avoir remporté un certain nombre de combats. Plus ils sont rares, plus ils mettent de temps.\n$Les Pokémon éclos ne rejoindront pas votre équipe, mais seront ajoutés à vos starters.\n$Les Pokémon issus dŒufs ont généralement de meilleurs IV que les Pokémon sauvages.\n$Certains Pokémon ne peuvent être obtenus que dans des Œufs.\n$Il y a 3 différentes machines à actionner avec différents\nbonus, prenez celle qui vous convient le mieux !"
"eggGacha": "Depuis cet écran, vous pouvez utiliser vos coupons\npour recevoir Œufs de Pokémon au hasard.\n$Les Œufs éclosent après avoir remporté un certain nombre de combats.\n$Plus ils sont rares, plus ils mettent de temps.\n$Les Pokémon éclos ne rejoindront pas votre équipe, mais seront ajoutés à vos starters.\n$Les Pokémon issus dŒufs ont généralement de meilleurs IV que les Pokémon sauvages.\n$Certains Pokémon ne peuvent être obtenus que dans des Œufs.\n$Il y a 3 différentes machines à actionner avec différents\nbonus, prenez celle qui vous convient le mieux !"
}

View File

@ -9,6 +9,6 @@
"checkTeamDesc": "Controlla la squadra Pokémon.",
"rerollCost": "{{formattedMoney}}₽",
"itemCost": "{{formattedMoney}}₽",
"continueNextWaveButton": "Continue",
"continueNextWaveDescription": "Continue to the next wave"
"continueNextWaveButton": "Continua",
"continueNextWaveDescription": "Continua alla onda successiva"
}

View File

@ -3,5 +3,5 @@
"receive_money": "Hai ricevuto {{amount, number}}₽!",
"affects_pokedex": "Influisce sul Pokédex",
"cancel_option": "Torna alla scelta dell'incontro.",
"view_party_button": "View Party"
"view_party_button": "Info squadra"
}

View File

@ -1,47 +1,47 @@
{
"intro": "An extremely strong trainer approaches you...",
"intro": "Un allenatore davvero forte ti si avvicina...",
"buck": {
"intro_dialogue": "Yo, trainer! My name's Buck.$I have a super awesome proposal\nfor a strong trainer such as yourself!$I'm carrying two rare Pokémon Eggs with me,\nbut I'd like someone else to care for one.$If you can prove your strength as a trainer to me,\nI'll give you the rarer egg!",
"accept": "Whoooo, I'm getting fired up!",
"decline": "Darn, it looks like your\nteam isn't in peak condition.$Here, let me help with that."
"intro_dialogue": "Yo, allenatore! Sono Buck.$Ho una proposta super fantastica\nper allenatori forti come te!$Ho qui con me due uova Pokémon rare,\nma vorrei affidarne una a qualcuno.$Se mi darai prova delle tue doti di allenatore,\nti darò quella più rara!",
"accept": "Whoooo, comincio a scaldarmi!",
"decline": "Accidenti, pare che la tua\nsquadra non se la passi bene.$Lascia che ti aiuti."
},
"cheryl": {
"intro_dialogue": "Hello, my name's Cheryl.$I have a particularly interesting request,\nfor a strong trainer such as yourself.$I'm carrying two rare Pokémon Eggs with me,\nbut I'd like someone else to care for one.$If you can prove your strength as a trainer to me,\nI'll give you the rarer Egg!",
"accept": "I hope you're ready!",
"decline": "I understand, it looks like your team\nisn't in the best condition at the moment.$Here, let me help with that."
"intro_dialogue": "Ciao, mi chiamo Cheryl.$Ho una particolare richiesta,\nmirata ad allenatori come te.$Ho qui con me due uova Pokémon rare,\nma vorrei affidarne una a qualcuno.$Se mi darai prova delle tue doti di allenatore,\nti darò quella più rara!",
"accept": "Spero tu sia pronto/a!",
"decline": "Capisco, mi sa che i tuoi Pokémon\nnon stanno benissimo al momento.$Ti do una mano."
},
"marley": {
"intro_dialogue": "...@d{64} I'm Marley.$I have an offer for you...$I'm carrying two Pokémon Eggs with me,\nbut I'd like someone else to care for one.$If you're stronger than me,\nI'll give you the rarer Egg.",
"accept": "... I see.",
"decline": "... I see.$Your Pokémon look hurt...\nLet me help."
"intro_dialogue": "...@d{64} Sono Marley.$Ho da farti un'offerta...$Ho con me due uova Pokémon rare,\nma voglio regalarne una.$Se ti dimostri più forte di me,\nti darò la più rara tra le due.",
"accept": "... capisco.",
"decline": "...capisco.$I tuoi Pokémon hanno una brutta cera...\nLasciami aiutare."
},
"mira": {
"intro_dialogue": "Hi! I'm Mira!$Mira has a request\nfor a strong trainer like you!$Mira has two rare Pokémon Eggs,\nbut Mira wants someone else to take one!$If you show Mira that you're strong,\nMira will give you the rarer Egg!",
"accept": "You'll battle Mira?\nYay!",
"decline": "Aww, no battle?\nThat's okay!$Here, Mira will heal your team!"
"intro_dialogue": "Ciaoo! Sono Mira!$Mira ha una richiesta\nper un allenatore forte come te!$Mira ha due uova Pokémon rare,\nma Mira vuole darne via una delle due!$Se dimostri a Mira che te la cavi,\nMira ti da la più rara!",
"accept": "Affronterai Mira?\nYuppi!",
"decline": "Aww, niente lotta?\nVa bene!$Ecco, ora Mira cura la tua squadra!"
},
"riley": {
"intro_dialogue": "I'm Riley.$I have an odd proposal\nfor a strong trainer such as yourself.$I'm carrying two rare Pokémon Eggs with me,\nbut I'd like to give one to another trainer.$If you can prove your strength to me,\nI'll give you the rarer Egg!",
"accept": "That look you have...\nLet's do this.",
"decline": "I understand, your team looks beat up.$Here, let me help with that."
"intro_dialogue": "Sono Riley.$Ho una strana proposta\nper gli allenatori forti.$Ho qui due uova Pokémon rare,\nma vorrei darne via una.$Dimostrami quanto vali,\ne ti darò la più rara!",
"accept": "Lo sguardo nei tuoi occhi...\nDiamoci dentro.",
"decline": "Capisco, la tua squadra non se la passa bene.$Lasciami rimediare."
},
"title": "A Trainer's Test",
"description": "It seems this trainer is willing to give you an Egg regardless of your decision. However, if you can manage to defeat this strong trainer, you'll receive a much rarer Egg.",
"query": "What will you do?",
"title": "La prova di un allenatore",
"description": "Pare che questo allenatore ti darà un uovo a prescindere dalla tua volontà. Tuttavia, sconfiggendolo, potrai riceverne uno nettamente più raro.",
"query": "Che cosa farai?",
"option": {
"1": {
"label": "Accept the Challenge",
"tooltip": "(-) Tough Battle\n(+) Gain a @[TOOLTIP_TITLE]{Very Rare Egg}"
"label": "Accetta la sfida",
"tooltip": "(-) Ardua lotta\n(+) Ottieni un @[TOOLTIP_TITLE]{Very Rare Egg}"
},
"2": {
"label": "Refuse the Challenge",
"tooltip": "(+) Full Heal Party\n(+) Gain an @[TOOLTIP_TITLE]{Egg}"
"label": "Rifiuta la sfida",
"tooltip": "(+) Squadra completamente curata\n(+) Ottieni un @[TOOLTIP_TITLE]{Egg}"
}
},
"eggTypes": {
"rare": "a Rare Egg",
"epic": "an Epic Egg",
"legendary": "a Legendary Egg"
"rare": "un uovo raro",
"epic": "un uovo epico",
"legendary": "un uovo leggendario"
},
"outro": "{{statTrainerName}} gave you {{eggType}}!"
"outro": "{{statTrainerName}} ti dona {{eggType}}!"
}

View File

@ -11,7 +11,7 @@
"cancel": "Annulla",
"memoString": "Natura {{natureFragment}},\n{{metFragment}}",
"metFragment": {
"normal": "incontrato al Lv.{{level}},\n{{biome}}.",
"normal": "incontrato al Lv.{{level}},\n{{biome}}, Onda {{wave}}.",
"apparently": "apparentemente incontrato al Lv.{{level}},\n{{biome}}."
}
}

View File

@ -11,7 +11,7 @@
"cancel": "キャンセル",
"memoString": "{{natureFragment}}な性格。\n{{metFragment}}",
"metFragment": {
"normal": "{{biome}}で\nLv.{{level}}の時に出会った。",
"normal": "ラウンド{{wave}}に{{biome}}で\nLv.{{level}}の時に出会った。",
"apparently": "{{biome}}で\nLv.{{level}}の時に出会ったようだ。"
},
"natureFragment": {

View File

@ -11,7 +11,7 @@
"cancel": "그만둔다",
"memoString": "{{natureFragment}}.\n{{metFragment}}",
"metFragment": {
"normal": "{{biome}}에서\n레벨 {{level}}일 때 만났다.",
"normal": "{{biome}}에서 웨이브{{wave}},\n레벨 {{level}}일 때 만났다.",
"apparently": "{{biome}}에서\n레벨 {{level}}일 때 만난 것 같다."
},
"natureFragment": {

View File

@ -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",

View File

@ -14,10 +14,10 @@
"moneyWon": "Você ganhou\n₽{{moneyAmount}} por vencer!",
"moneyPickedUp": "Você pegou ₽{{moneyAmount}} do chão!",
"pokemonCaught": "{{pokemonName}} foi capturado!",
"pokemonObtained": "You got {{pokemonName}}!",
"pokemonBrokeFree": "Oh no!\nThe Pokémon broke free!",
"pokemonFled": "The wild {{pokemonName}} fled!",
"playerFled": "You fled from the {{pokemonName}}!",
"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",
@ -53,7 +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": "You aren't able to\ncatch this Pokémon!",
"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!",
@ -102,5 +102,5 @@
"unlockedSomething": "{{unlockedThing}}\nfoi desbloqueado.",
"congratulations": "Parabéns!",
"beatModeFirstTime": "{{speciesName}} venceu o Modo {{gameMode}} pela primeira vez!\nVocê recebeu {{newModifier}}!",
"mysteryEncounterAppeared": "What's this?"
"mysteryEncounterAppeared": "O que é isso?"
}

View File

@ -1,89 +1,89 @@
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 modifierType from "./modifier-type.json";
import move from "./move.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 pokemonInfoContainer from "./pokemon-info-container.json";
import pokemonSummary from "./pokemon-summary.json";
import saveSlotSelectUiHandler from "./save-slot-select-ui-handler.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 trainerClasses from "./trainer-classes.json";
import trainerNames from "./trainer-names.json";
import tutorial from "./tutorial.json";
import voucher from "./voucher.json";
import weather from "./weather.json";
import terrain from "./terrain.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 runHistory from "./run-history.json";
import move from "./move.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 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 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 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 globalTradeSystem from "./mystery-encounters/global-trade-system-dialogue.json";
import weirdDream from "./mystery-encounters/weird-dream-dialogue.json";
import nature from "./nature.json";
import partyUiHandler from "./party-ui-handler.json";
import pokeball from "./pokeball.json";
import battlePokemonForm from "./pokemon-form-battle.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 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";
/**
* Dialogue/Text token injection patterns that can be used:

View File

@ -970,112 +970,115 @@
},
"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!"
"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": "Heeheehee!\nSo hot, you!",
"2": "Heeheehee!\nSo hot, you!"
"1": "Hehehe!\nVocê é uma máquina!",
"2": "Hehehe!\nVocê é uma máquina!"
},
"defeat": {
"1": "Whoa! You're all out of gas, I guess.",
"2": "Whoa! You're all out of gas, I guess."
"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": "My Pokémon have been itching for a battle.",
"2": "I should warn you, my Pokémon can be quite rambunctious."
"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": "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."
"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": "Do your Pokémon need any healing?",
"2": "Do your Pokémon need any healing?"
"1": "Seus Pokémon precisam de cura?",
"2": "Seus Pokémon precisam de cura?"
}
},
"stat_trainer_marley": {
"encounter": {
"1": "... OK.\nI'll do my best.",
"2": "... OK.\nI... won't lose...!"
"1": "... Tá.\nVou dar o meu melhor.",
"2": "... Tá.\nEu... não vou perder...!"
},
"victory": {
"1": "... Awww.",
"2": "... Awww."
},
"defeat": {
"1": "... Goodbye.",
"2": "... Goodbye."
"1": "... Adeus.",
"2": "... Adeus."
}
},
"stat_trainer_mira": {
"encounter": {
"1": "You will be shocked by Mira!",
"2": "Mira will show you that Mira doesn't get lost anymore!"
"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 wonders if she can get very far in this land.",
"2": "Mira wonders if she can get very far in this land."
"1": "Mira se pergunta se conseguirá ir longe nessa terra.",
"2": "Mira se pergunta se conseguirá ir longe nessa terra."
},
"defeat": {
"1": "Mira knew she would win!",
"2": "Mira knew she would win!"
"1": "Mira sabia que venceria!",
"2": "Mira sabia que venceria!"
}
},
"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."
"1": "Lutar é nossa forma de saudação!",
"2": "Estamos fazendo de tudo para derrubar seus Pokémon."
},
"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."
"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": "You put up quite the display.\nBetter luck next time.",
"2": "You put up quite the display.\nBetter luck next time."
"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": "That's the spirit! I like you!"
"1": "Esse é o espírito! Gosto de você!"
},
"victory": {
"1": "A-ha! You're stronger than I thought!"
"1": "A-ha! Você é mais forte do que eu pensei!"
}
},
"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!"
"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! Just how strong are you?!"
"1": "Uwah! Quão forte você é?!"
}
},
"winstrates_vivi": {
"encounter": {
"1": "You're stronger than Mom? Wow!$But I'm strong, too!\nReally! Honestly!"
"1": "Você é mais forte que a Mamãe? Uau!$Mas eu também sou forte!\nDe verdade! Falando sério!"
},
"victory": {
"1": "Huh? Did I really lose?\nSnivel... Grandmaaa!"
"1": "Ahn? Eu perdi mesmo?\nSnif... Vovóóó!"
}
},
"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!"
"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": "Whoa! So strong!\nMy granddaughter wasn't lying."
"1": "Uau! Tão forte!\nMinha neta não estava mentindo."
}
},
"winstrates_vito": {
"encounter": {
"1": "I trained together with my whole family,\nevery one of us!$I'm not losing to anyone!"
"1": "Treinei com toda a minha família,\ncada um de nós!$Não vou perder para para ninguém!"
},
"victory": {
"1": "I was better than everyone in my family.\nI've never lost before..."
"1": "Eu era melhor do que todos em minha família.\nEu nunca perdi antes..."
}
},
"brock": {

View File

@ -11,7 +11,7 @@
"gachaTypeLegendary": "Chance de Lendário Aumentada",
"gachaTypeMove": "Chance de Movimento de Ovo Raro Aumentada",
"gachaTypeShiny": "Chance de Shiny Aumentada",
"eventType": "Mystery Event",
"eventType": "Evento Misterioso",
"selectMachine": "Escolha uma máquina.",
"notEnoughVouchers": "Você não tem vouchers suficientes!",
"tooManyEggs": "Você já tem muitos ovos!",

View File

@ -9,6 +9,6 @@
"checkTeamDesc": "Cheque seu time ou use um item de mudança de forma.",
"rerollCost": "₽{{formattedMoney}}",
"itemCost": "₽{{formattedMoney}}",
"continueNextWaveButton": "Continue",
"continueNextWaveDescription": "Continue to the next wave"
"continueNextWaveButton": "Continuar",
"continueNextWaveDescription": "Continuar para a próxima onda"
}

View File

@ -69,18 +69,18 @@
"description": "Aumenta o atributo base de {{stat}} em 10%. Quanto maior os IVs, maior o limite de aumento."
},
"PokemonBaseStatTotalModifierType": {
"name": "Shuckle Juice",
"description": "{{increaseDecrease}} all of the holder's base stats by {{statValue}}. You were {{blessCurse}} by the Shuckle.",
"name": "Suco Shuckle",
"description": "{{increaseDecrease}} todos os atributos base de quem o segurar por {{statValue}}. Você foi {{blessCurse}} por Shuckle.",
"extra": {
"increase": "Increases",
"decrease": "Decreases",
"blessed": "blessed",
"cursed": "cursed"
"increase": "Aumenta",
"decrease": "Diminui",
"blessed": "abençoado",
"cursed": "amaldiçoado"
}
},
"PokemonBaseStatFlatModifierType": {
"name": "Old Gateau",
"description": "Increases the holder's {{stats}} base stats by {{statValue}}. Found after a strange dream."
"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."
@ -417,11 +417,23 @@
"description": "Adiciona uma chance de 1% de que um Pokémon selvagem seja uma fusão."
},
"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." }
"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": {
"LIGHT_BALL": {

View File

@ -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}}!",

View File

@ -1,7 +1,7 @@
{
"paid_money": "You paid ₽{{amount, number}}.",
"receive_money": "You received ₽{{amount, number}}!",
"affects_pokedex": "Affects Pokédex Data",
"cancel_option": "Return to encounter option select.",
"view_party_button": "View Party"
"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"
}

View File

@ -11,7 +11,7 @@
"cancel": "Cancelar",
"memoString": "Natureza {{natureFragment}},\n{{metFragment}}",
"metFragment": {
"normal": "encontrado no Nv.{{level}},\n{{biome}}.",
"normal": "encontrado no Nv.{{level}},\n{{biome}}, Onda {{wave}}.",
"apparently": "aparentemente encontrado no Nv.{{level}},\n{{biome}}."
},
"natureFragment": {

View File

@ -127,5 +127,4 @@
"macro_grunt": "Treinador da Macro Cosmos",
"macro_grunt_female": "Treinadora da Macro Cosmos",
"macro_grunts": "Treinadores da Macro Cosmos"
}

View File

@ -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.",

View File

@ -12,7 +12,7 @@
"memoString": "{{natureFragment}} 性格,\n{{metFragment}}",
"metFragment": {
"normal": "met at Lv{{level}},\n{{biome}}.",
"normal": "met at Lv{{level}},\n{{biome}}, Wave {{wave}}.",
"apparently": "命中注定般地相遇于Lv.{{level}}\n{{biome}}。"
},
"natureFragment": {

View File

@ -70,6 +70,8 @@ class DefaultOverrides {
[PokeballType.MASTER_BALL]: 0,
},
};
/** Set to `true` to show all tutorials */
readonly BYPASS_TUTORIAL_SKIP: boolean = false;
// ----------------
// PLAYER OVERRIDES

View File

@ -216,8 +216,8 @@ export class EncounterPhase extends BattlePhase {
this.scene.ui.setMode(Mode.MESSAGE).then(() => {
if (!this.loaded) {
//@ts-ignore
this.scene.gameData.saveAll(this.scene, true, battle.waveIndex % 10 === 1 || this.scene.lastSavePlayTime >= 300).then(success => { // TODO: get rid of ts-ignore
this.trySetWeatherIfNewBiome(); // Set weather before session gets saved
this.scene.gameData.saveAll(this.scene, true, battle.waveIndex % 10 === 1 || (this.scene.lastSavePlayTime ?? 0) >= 300).then(success => {
this.scene.disableMenu = false;
if (!success) {
return this.scene.reset(true);
@ -250,10 +250,6 @@ export class EncounterPhase extends BattlePhase {
}
}
if (!this.loaded) {
this.scene.arena.trySetWeather(getRandomWeatherType(this.scene.arena), false);
}
const enemyField = this.scene.getEnemyField();
this.scene.tweens.add({
targets: [this.scene.arenaEnemy, this.scene.currentBattle.trainer, enemyField, this.scene.arenaPlayer, this.scene.trainer].flat(),
@ -519,4 +515,18 @@ export class EncounterPhase extends BattlePhase {
}
return false;
}
/**
* Set biome weather if and only if this encounter is the start of a new biome.
*
* By using function overrides, this should happen if and only if this phase
* is exactly a NewBiomeEncounterPhase or an EncounterPhase (to account for
* Wave 1 of a Daily Run), but NOT NextEncounterPhase (which starts the next
* wave in the same biome).
*/
trySetWeatherIfNewBiome(): void {
if (!this.loaded) {
this.scene.arena.trySetWeather(getRandomWeatherType(this.scene.arena), false);
}
}
}

View File

@ -17,8 +17,6 @@ export class NewBiomeEncounterPhase extends NextEncounterPhase {
}
}
this.scene.arena.trySetWeather(getRandomWeatherType(this.scene.arena), false);
for (const pokemon of this.scene.getParty().filter(p => p.isOnField())) {
applyAbAttrs(PostBiomeChangeAbAttr, pokemon, null);
}
@ -41,4 +39,11 @@ export class NewBiomeEncounterPhase extends NextEncounterPhase {
}
});
}
/**
* Set biome weather.
*/
trySetWeatherIfNewBiome(): void {
this.scene.arena.trySetWeather(getRandomWeatherType(this.scene.arena), false);
}
}

View File

@ -67,4 +67,10 @@ export class NextEncounterPhase extends EncounterPhase {
}
});
}
/**
* Do nothing (since this is simply the next wave in the same biome).
*/
trySetWeatherIfNewBiome(): void {
}
}

View File

@ -38,8 +38,9 @@ export default class PokemonData {
public status: Status | null;
public friendship: integer;
public metLevel: integer;
public metBiome: Biome | -1;
public metBiome: Biome | -1; // -1 for starters
public metSpecies: Species;
public metWave: number; // 0 for unknown (previous saves), -1 for starters
public luck: integer;
public pauseEvolutions: boolean;
public pokerus: boolean;
@ -90,14 +91,14 @@ export default class PokemonData {
this.metLevel = source.metLevel || 5;
this.metBiome = source.metBiome !== undefined ? source.metBiome : -1;
this.metSpecies = source.metSpecies;
this.metWave = source.metWave ?? (this.metBiome === -1 ? -1 : 0);
this.luck = source.luck !== undefined ? source.luck : (source.shiny ? (source.variant + 1) : 0);
if (!forHistory) {
this.pauseEvolutions = !!source.pauseEvolutions;
this.evoCounter = source.evoCounter ?? 0;
}
this.pokerus = !!source.pokerus;
this.evoCounter = source.evoCounter ?? 0;
this.fusionSpecies = sourcePokemon ? sourcePokemon.fusionSpecies?.speciesId : source.fusionSpecies;
this.fusionFormIndex = source.fusionFormIndex;
this.fusionAbilityIndex = source.fusionAbilityIndex;

View File

@ -0,0 +1,71 @@
import { allMoves } from "#app/data/move";
import { Abilities } from "#enums/abilities";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
describe("Arena - Grassy Terrain", () => {
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
.battleType("single")
.disableCrits()
.enemyLevel(1)
.enemySpecies(Species.SHUCKLE)
.enemyAbility(Abilities.STURDY)
.enemyMoveset(Moves.FLY)
.moveset([Moves.GRASSY_TERRAIN, Moves.EARTHQUAKE])
.ability(Abilities.NO_GUARD);
});
it("halves the damage of Earthquake", async () => {
await game.classicMode.startBattle([Species.TAUROS]);
const eq = allMoves[Moves.EARTHQUAKE];
vi.spyOn(eq, "calculateBattlePower");
game.move.select(Moves.EARTHQUAKE);
await game.toNextTurn();
expect(eq.calculateBattlePower).toHaveReturnedWith(100);
game.move.select(Moves.GRASSY_TERRAIN);
await game.toNextTurn();
game.move.select(Moves.EARTHQUAKE);
await game.phaseInterceptor.to("BerryPhase");
expect(eq.calculateBattlePower).toHaveReturnedWith(50);
}, TIMEOUT);
it("Does not halve the damage of Earthquake if opponent is not grounded", async () => {
await game.classicMode.startBattle([Species.NINJASK]);
const eq = allMoves[Moves.EARTHQUAKE];
vi.spyOn(eq, "calculateBattlePower");
game.move.select(Moves.GRASSY_TERRAIN);
await game.toNextTurn();
game.move.select(Moves.EARTHQUAKE);
await game.phaseInterceptor.to("BerryPhase");
expect(eq.calculateBattlePower).toHaveReturnedWith(100);
}, TIMEOUT);
});

View File

@ -24,7 +24,8 @@ import { Moves } from "#enums/moves";
import { PlayerGender } from "#enums/player-gender";
import { Species } from "#enums/species";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
import { Biome } from "#app/enums/biome";
describe("Test Battle Phase", () => {
let phaserGame: Phaser.Game;
@ -290,22 +291,27 @@ describe("Test Battle Phase", () => {
expect(game.scene.currentBattle.turn).toBeGreaterThan(turn);
}, 20000);
it("to next wave with pokemon killed, single", async () => {
it("does not set new weather if staying in same biome", async () => {
const moveToUse = Moves.SPLASH;
game.override.battleType("single");
game.override.starterSpecies(Species.MEWTWO);
game.override.enemySpecies(Species.RATTATA);
game.override.enemyAbility(Abilities.HYDRATION);
game.override.ability(Abilities.ZEN_MODE);
game.override.startingLevel(2000);
game.override.startingWave(3);
game.override.moveset([moveToUse]);
game.override
.battleType("single")
.starterSpecies(Species.MEWTWO)
.enemySpecies(Species.RATTATA)
.enemyAbility(Abilities.HYDRATION)
.ability(Abilities.ZEN_MODE)
.startingLevel(2000)
.startingWave(3)
.startingBiome(Biome.LAKE)
.moveset([moveToUse]);
game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]);
await game.startBattle();
await game.classicMode.startBattle();
const waveIndex = game.scene.currentBattle.waveIndex;
game.move.select(moveToUse);
vi.spyOn(game.scene.arena, "trySetWeather");
await game.doKillOpponents();
await game.toNextWave();
expect(game.scene.arena.trySetWeather).not.toHaveBeenCalled();
expect(game.scene.currentBattle.waveIndex).toBeGreaterThan(waveIndex);
}, 20000);

View File

@ -38,16 +38,15 @@ describe("Reload", () => {
it("should not have RNG inconsistencies after a biome switch", async () => {
game.override
.startingWave(10)
.startingBiome(Biome.CAVE) // Will lead to biomes with randomly generated weather
.battleType("single")
.startingLevel(100)
.enemyLevel(1000)
.startingLevel(100) // Avoid levelling up
.enemyLevel(1000) // Avoid opponent dying before game.doKillOpponents()
.disableTrainerWaves()
.moveset([Moves.KOWTOW_CLEAVE])
.enemyMoveset(Moves.SPLASH);
await game.dailyMode.startBattle();
// Transition from Daily Run Wave 10 to Wave 11 in order to trigger biome switch
// Transition from Wave 10 to Wave 11 in order to trigger biome switch
game.move.select(Moves.KOWTOW_CLEAVE);
await game.phaseInterceptor.to("DamagePhase");
await game.doKillOpponents();
@ -63,6 +62,34 @@ describe("Reload", () => {
expect(preReloadRngState).toBe(postReloadRngState);
}, 20000);
it("should not have weather inconsistencies after a biome switch", async () => {
game.override
.startingWave(10)
.startingBiome(Biome.ICE_CAVE) // Will lead to Snowy Forest with randomly generated weather
.battleType("single")
.startingLevel(100) // Avoid levelling up
.enemyLevel(1000) // Avoid opponent dying before game.doKillOpponents()
.disableTrainerWaves()
.moveset([Moves.KOWTOW_CLEAVE])
.enemyMoveset(Moves.SPLASH);
await game.classicMode.startBattle(); // Apparently daily mode would override the biome
// Transition from Wave 10 to Wave 11 in order to trigger biome switch
game.move.select(Moves.KOWTOW_CLEAVE);
await game.phaseInterceptor.to("DamagePhase");
await game.doKillOpponents();
await game.toNextWave();
expect(game.phaseInterceptor.log).toContain("NewBiomeEncounterPhase");
const preReloadWeather = game.scene.arena.weather;
await game.reload.reloadSession();
const postReloadWeather = game.scene.arena.weather;
expect(postReloadWeather).toStrictEqual(preReloadWeather);
}, 20000);
it("should not have RNG inconsistencies at a Daily run wild Pokemon fight", async () => {
await game.dailyMode.startBattle();

View File

@ -31,7 +31,6 @@ import TargetSelectUiHandler from "#app/ui/target-select-ui-handler";
import { Mode } from "#app/ui/ui";
import { Button } from "#enums/buttons";
import { ExpNotification } from "#enums/exp-notification";
import { GameDataType } from "#enums/game-data-type";
import { PlayerGender } from "#enums/player-gender";
import { Species } from "#enums/species";
import { generateStarter, waitUntil } from "#test/utils/gameManagerUtils";
@ -371,13 +370,11 @@ export default class GameManager {
* @returns A promise that resolves with the exported save data.
*/
exportSaveToTest(): Promise<string> {
const saveKey = "x0i2O7WRiANTqPmZ";
return new Promise(async (resolve) => {
await this.scene.gameData.saveAll(this.scene, true, true, true, true);
this.scene.reset(true);
await waitUntil(() => this.scene.ui?.getMode() === Mode.TITLE);
await this.scene.gameData.tryExportData(GameDataType.SESSION, 0);
await waitUntil(() => localStorage.hasOwnProperty("toExport"));
return resolve(localStorage.getItem("toExport")!); // TODO: is this bang correct?;
const sessionSaveData = this.scene.gameData.getSessionSaveData(this.scene);
const encryptedSaveData = AES.encrypt(JSON.stringify(sessionSaveData), saveKey).toString();
resolve(encryptedSaveData);
});
}

View File

@ -5,11 +5,27 @@ import { vi } from "vitest";
import { BattleStyle } from "#app/enums/battle-style";
import { CommandPhase } from "#app/phases/command-phase";
import { TurnInitPhase } from "#app/phases/turn-init-phase";
import { SessionSaveData } from "#app/system/game-data";
import GameManager from "../gameManager";
/**
* Helper to allow reloading sessions in unit tests.
*/
export class ReloadHelper extends GameManagerHelper {
sessionData: SessionSaveData;
constructor(game: GameManager) {
super(game);
// Whenever the game saves the session, save it to the reloadHelper instead
vi.spyOn(game.scene.gameData, "saveAll").mockImplementation((scene) => {
return new Promise<boolean>((resolve, reject) => {
this.sessionData = scene.gameData.getSessionSaveData(scene);
resolve(true);
});
});
}
/**
* Simulate reloading the session from the title screen, until reaching the
* beginning of the first turn (equivalent to running `startBattle()`) for
@ -17,7 +33,6 @@ export class ReloadHelper extends GameManagerHelper {
*/
async reloadSession() : Promise<void> {
const scene = this.game.scene;
const sessionData = scene.gameData.getSessionSaveData(scene);
const titlePhase = new TitlePhase(scene);
scene.clearPhaseQueue();
@ -25,7 +40,7 @@ export class ReloadHelper extends GameManagerHelper {
// Set the last saved session to the desired session data
vi.spyOn(scene.gameData, "getSession").mockReturnValue(
new Promise((resolve, reject) => {
resolve(sessionData);
resolve(this.sessionData);
})
);
scene.unshiftPhase(titlePhase);

View File

@ -1,7 +1,9 @@
import BattleScene from "./battle-scene";
import AwaitableUiHandler from "./ui/awaitable-ui-handler";
import UiHandler from "./ui/ui-handler";
import { Mode } from "./ui/ui";
import i18next from "i18next";
import Overrides from "#app/overrides";
export enum Tutorial {
Intro = "INTRO",
@ -63,26 +65,87 @@ const tutorialHandlers = {
},
};
export function handleTutorial(scene: BattleScene, tutorial: Tutorial): Promise<boolean> {
return new Promise<boolean>(resolve => {
if (!scene.enableTutorials) {
return resolve(false);
/**
* Run through the specified tutorial if it hasn't been seen before and mark it as seen once done
* This will show a tutorial overlay if defined in the current {@linkcode AwaitableUiHandler}
* The main menu will also get disabled while the tutorial is running
* @param scene the current {@linkcode BattleScene}
* @param tutorial the {@linkcode Tutorial} to play
* @returns a promise with result `true` if the tutorial was run and finished, `false` otherwise
*/
export async function handleTutorial(scene: BattleScene, tutorial: Tutorial): Promise<boolean> {
if (!scene.enableTutorials && !Overrides.BYPASS_TUTORIAL_SKIP) {
return false;
}
if (scene.gameData.getTutorialFlags()[tutorial]) {
return resolve(false);
if (scene.gameData.getTutorialFlags()[tutorial] && !Overrides.BYPASS_TUTORIAL_SKIP) {
return false;
}
const handler = scene.ui.getHandler();
const isMenuDisabled = scene.disableMenu;
// starting tutorial, disable menu
scene.disableMenu = true;
if (handler instanceof AwaitableUiHandler) {
handler.tutorialActive = true;
}
tutorialHandlers[tutorial](scene).then(() => {
await showTutorialOverlay(scene, handler);
await tutorialHandlers[tutorial](scene);
await hideTutorialOverlay(scene, handler);
// tutorial finished and overlay gone, re-enable menu, save tutorial as seen
scene.disableMenu = isMenuDisabled;
scene.gameData.saveTutorialFlag(tutorial, true);
if (handler instanceof AwaitableUiHandler) {
handler.tutorialActive = false;
}
resolve(true);
});
});
return true;
}
/**
* Show the tutorial overlay if there is one
* @param scene the current BattleScene
* @param handler the current UiHandler
* @returns `true` once the overlay has finished appearing, or if there is no overlay
*/
async function showTutorialOverlay(scene: BattleScene, handler: UiHandler) {
if (handler instanceof AwaitableUiHandler && handler.tutorialOverlay) {
scene.tweens.add({
targets: handler.tutorialOverlay,
alpha: 0.5,
duration: 750,
ease: "Sine.easeOut",
onComplete: () => {
return true;
}
});
} else {
return true;
}
}
/**
* Hide the tutorial overlay if there is one
* @param scene the current BattleScene
* @param handler the current UiHandler
* @returns `true` once the overlay has finished disappearing, or if there is no overlay
*/
async function hideTutorialOverlay(scene: BattleScene, handler: UiHandler) {
if (handler instanceof AwaitableUiHandler && handler.tutorialOverlay) {
scene.tweens.add({
targets: handler.tutorialOverlay,
alpha: 0,
duration: 500,
ease: "Sine.easeOut",
onComplete: () => {
return true;
}
});
} else {
return true;
}
}

View File

@ -7,6 +7,7 @@ export default abstract class AwaitableUiHandler extends UiHandler {
protected awaitingActionInput: boolean;
protected onActionInput: Function | null;
public tutorialActive: boolean = false;
public tutorialOverlay: Phaser.GameObjects.Rectangle;
constructor(scene: BattleScene, mode: Mode | null = null) {
super(scene, mode);
@ -24,4 +25,21 @@ export default abstract class AwaitableUiHandler extends UiHandler {
return false;
}
/**
* Create a semi transparent overlay that will get shown during tutorials
* @param container the container to add the overlay to
*/
initTutorialOverlay(container: Phaser.GameObjects.Container) {
if (!this.tutorialOverlay) {
this.tutorialOverlay = new Phaser.GameObjects.Rectangle(this.scene, -1, -1, this.scene.scaledCanvas.width, this.scene.scaledCanvas.height, 0x070707);
this.tutorialOverlay.setName("tutorial-overlay");
this.tutorialOverlay.setOrigin(0, 0);
this.tutorialOverlay.setAlpha(0);
}
if (container) {
container.add(this.tutorialOverlay);
}
}
}

View File

@ -162,7 +162,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container {
this.splicedIcon.setInteractive(new Phaser.Geom.Rectangle(0, 0, 12, 15), Phaser.Geom.Rectangle.Contains);
this.add(this.splicedIcon);
this.statusIndicator = this.scene.add.sprite(0, 0, "statuses");
this.statusIndicator = this.scene.add.sprite(0, 0, `statuses_${i18next.resolvedLanguage}`);
this.statusIndicator.setName("icon_status");
this.statusIndicator.setVisible(false);
this.statusIndicator.setOrigin(0, 0);

View File

@ -83,12 +83,7 @@ export default class BattleMessageUiHandler extends MessageUiHandler {
this.nameBoxContainer.add(this.nameText);
messageContainer.add(this.nameBoxContainer);
const prompt = this.scene.add.sprite(0, 0, "prompt");
prompt.setVisible(false);
prompt.setOrigin(0, 0);
messageContainer.add(prompt);
this.prompt = prompt;
this.initPromptSprite(messageContainer);
const levelUpStatsContainer = this.scene.add.container(0, 0);
levelUpStatsContainer.setVisible(false);

View File

@ -287,7 +287,6 @@ export default class EggGachaUiHandler extends MessageUiHandler {
this.eggGachaContainer.add(this.eggGachaSummaryContainer);
const gachaMessageBoxContainer = this.scene.add.container(0, 148);
this.eggGachaContainer.add(gachaMessageBoxContainer);
const gachaMessageBox = addWindow(this.scene, 0, 0, 320, 32);
gachaMessageBox.setOrigin(0, 0);
@ -301,8 +300,11 @@ export default class EggGachaUiHandler extends MessageUiHandler {
this.message = gachaMessageText;
this.initTutorialOverlay(this.eggGachaContainer);
this.eggGachaContainer.add(gachaMessageBoxContainer);
this.initPromptSprite(gachaMessageBoxContainer);
this.setCursor(0);
}

View File

@ -45,12 +45,7 @@ export default class EvolutionSceneHandler extends MessageUiHandler {
this.message = message;
const prompt = this.scene.add.sprite(0, 0, "prompt");
prompt.setVisible(false);
prompt.setOrigin(0, 0);
this.messageContainer.add(prompt);
this.prompt = prompt;
this.initPromptSprite(this.messageContainer);
}
show(_args: any[]): boolean {

View File

@ -157,6 +157,9 @@ export default class MenuUiHandler extends MessageUiHandler {
menuMessageText.setOrigin(0, 0);
this.menuMessageBoxContainer.add(menuMessageText);
this.initTutorialOverlay(this.menuContainer);
this.initPromptSprite(this.menuMessageBoxContainer);
this.message = menuMessageText;
// By default we use the general purpose message window
@ -433,6 +436,9 @@ export default class MenuUiHandler extends MessageUiHandler {
this.scene.playSound("ui/menu_open");
// Make sure the tutorial overlay sits above everything, but below the message box
this.menuContainer.bringToTop(this.tutorialOverlay);
this.menuContainer.bringToTop(this.menuMessageBoxContainer);
handleTutorial(this.scene, Tutorial.Menu);
this.bgmBar.toggleBgmBar(true);

View File

@ -17,6 +17,23 @@ export default abstract class MessageUiHandler extends AwaitableUiHandler {
this.pendingPrompt = false;
}
/**
* Add the sprite to be displayed at the end of messages with prompts
* @param container the container to add the sprite to
*/
initPromptSprite(container: Phaser.GameObjects.Container) {
if (!this.prompt) {
const promptSprite = this.scene.add.sprite(0, 0, "prompt");
promptSprite.setVisible(false);
promptSprite.setOrigin(0, 0);
this.prompt = promptSprite;
}
if (container) {
container.add(this.prompt);
}
}
showText(text: string, delay?: integer | null, callback?: Function | null, callbackDelay?: integer | null, prompt?: boolean | null, promptDelay?: integer | null) {
this.showTextInternal(text, delay, callback, callbackDelay, prompt, promptDelay);
}
@ -180,7 +197,7 @@ export default abstract class MessageUiHandler extends AwaitableUiHandler {
const lastLineWidth = lastLineTest.displayWidth;
lastLineTest.destroy();
if (this.prompt) {
this.prompt.setPosition(lastLineWidth + 2, (textLinesCount - 1) * 18 + 2);
this.prompt.setPosition(this.message.x + lastLineWidth + 2, this.message.y + (textLinesCount - 1) * 18 + 2);
this.prompt.play("prompt");
}
this.pendingPrompt = false;

View File

@ -1272,7 +1272,7 @@ class PartySlot extends Phaser.GameObjects.Container {
}
if (this.pokemon.status) {
const statusIndicator = this.scene.add.sprite(0, 0, "statuses");
const statusIndicator = this.scene.add.sprite(0, 0, `statuses_${i18next.resolvedLanguage}`);
statusIndicator.setFrame(StatusEffect[this.pokemon.status?.effect].toLowerCase());
statusIndicator.setOrigin(0, 0);
statusIndicator.setPositionRelative(slotLevelLabel, this.slotIndex >= battlerCount ? 43 : 55, 0);

View File

@ -760,7 +760,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.pokemonCaughtHatchedContainer.add(this.pokemonHatchedCountText);
this.pokemonMovesContainer = this.scene.add.container(102, 16);
this.pokemonMovesContainer.setScale(0.5);
this.pokemonMovesContainer.setScale(0.375);
for (let m = 0; m < 4; m++) {
const moveContainer = this.scene.add.container(0, 14 * m);
@ -894,6 +894,9 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.message.setOrigin(0, 0);
this.starterSelectMessageBoxContainer.add(this.message);
// arrow icon for the message box
this.initPromptSprite(this.starterSelectMessageBoxContainer);
this.statsContainer = new StatsContainer(this.scene, 6, 16);
this.scene.add.existing(this.statsContainer);
@ -911,7 +914,11 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
y: this.scene.game.canvas.height / 6 - MoveInfoOverlay.getHeight(overlayScale) - 29,
});
this.starterSelectContainer.add(this.moveInfoOverlay);
// Filter bar sits above everything, except the tutorial overlay and message box
this.starterSelectContainer.bringToTop(this.filterBarContainer);
this.initTutorialOverlay(this.starterSelectContainer);
this.starterSelectContainer.bringToTop(this.starterSelectMessageBoxContainer);
this.scene.eventTarget.addEventListener(BattleSceneEventType.CANDY_UPGRADE_NOTIFICATION_CHANGED, (e) => this.onCandyUpgradeDisplayChanged(e));

View File

@ -4,12 +4,15 @@ import { TextStyle, addBBCodeTextObject, addTextObject, getTextColor } from "./t
import { PERMANENT_STATS, getStatKey } from "#app/enums/stat";
import i18next from "i18next";
const ivChartSize = 24;
const ivChartStatCoordMultipliers = [[0, -1], [0.825, -0.5], [0.825, 0.5], [-0.825, -0.5], [-0.825, 0.5], [0, 1]];
const speedLabelOffset = -3;
const sideLabelOffset = 1;
const ivLabelOffset = [0, sideLabelOffset, -sideLabelOffset, sideLabelOffset, -sideLabelOffset, speedLabelOffset];
const ivChartLabelyOffset= [0, 5, 0, 5, 0, 0]; // doing this so attack does not overlap with (+N)
const ivChartStatIndexes = [0, 1, 2, 5, 4, 3]; // swap special attack and speed
const defaultIvChartData = new Array(12).fill(null).map(() => 0);
export class StatsContainer extends Phaser.GameObjects.Container {
@ -29,7 +32,6 @@ export class StatsContainer extends Phaser.GameObjects.Container {
setup() {
this.setName("stats");
const ivChartBgData = new Array(6).fill(null).map((_, i: integer) => [ ivChartSize * ivChartStatCoordMultipliers[ivChartStatIndexes[i]][0], ivChartSize * ivChartStatCoordMultipliers[ivChartStatIndexes[i]][1] ] ).flat();
const ivChartBg = this.scene.add.polygon(48, 44, ivChartBgData, 0xd8e0f0, 0.625);
ivChartBg.setOrigin(0, 0);
@ -55,12 +57,19 @@ export class StatsContainer extends Phaser.GameObjects.Container {
this.ivStatValueTexts = [];
for (const s of PERMANENT_STATS) {
const statLabel = addTextObject(this.scene, ivChartBg.x + (ivChartSize) * ivChartStatCoordMultipliers[s][0] * 1.325, ivChartBg.y + (ivChartSize) * ivChartStatCoordMultipliers[s][1] * 1.325 - 4 + ivLabelOffset[s], i18next.t(getStatKey(s)), TextStyle.TOOLTIP_CONTENT);
const statLabel = addTextObject(
this.scene,
ivChartBg.x + (ivChartSize) * ivChartStatCoordMultipliers[s][0] * 1.325 + (this.showDiff ? 0 : ivLabelOffset[s]),
ivChartBg.y + (ivChartSize) * ivChartStatCoordMultipliers[s][1] * 1.325 - 4 + (this.showDiff ? 0 : ivChartLabelyOffset[s]),
i18next.t(getStatKey(s)),
TextStyle.TOOLTIP_CONTENT
);
statLabel.setOrigin(0.5);
this.ivStatValueTexts[s] = addBBCodeTextObject(this.scene, statLabel.x, statLabel.y + 8, "0", TextStyle.TOOLTIP_CONTENT);
this.ivStatValueTexts[s] = addBBCodeTextObject(this.scene, statLabel.x - (this.showDiff ? 0 : ivLabelOffset[s]), statLabel.y + 8, "0", TextStyle.TOOLTIP_CONTENT);
this.ivStatValueTexts[s].setOrigin(0.5);
this.add(statLabel);
this.add(this.ivStatValueTexts[s]);
}

View File

@ -214,7 +214,7 @@ export default class SummaryUiHandler extends UiHandler {
this.statusContainer.add(statusLabel);
this.status = this.scene.add.sprite(91, 4, "statuses");
this.status = this.scene.add.sprite(91, 4, `statuses_${i18next.resolvedLanguage}`);
this.status.setOrigin(0.5, 0);
this.statusContainer.add(this.status);
@ -824,6 +824,7 @@ export default class SummaryUiHandler extends UiHandler {
metFragment: i18next.t(`pokemonSummary:metFragment.${this.pokemon?.metBiome === -1? "apparently": "normal"}`, {
biome: `${getBBCodeFrag(getBiomeName(this.pokemon?.metBiome!), TextStyle.SUMMARY_RED)}${closeFragment}`, // TODO: is this bang correct?
level: `${getBBCodeFrag(this.pokemon?.metLevel.toString()!, TextStyle.SUMMARY_RED)}${closeFragment}`, // TODO: is this bang correct?
wave: `${getBBCodeFrag((this.pokemon?.metWave ? this.pokemon.metWave.toString()! : i18next.t("pokemonSummary:unknownTrainer")), TextStyle.SUMMARY_RED)}${closeFragment}`,
}),
natureFragment: i18next.t(`pokemonSummary:natureFragment.${rawNature}`, { nature: nature })
});

View File

@ -31,6 +31,7 @@ export default defineConfig(({mode}) => {
return ({
...defaultConfig,
base: '',
esbuild: {
pure: mode === 'production' ? ['console.log'] : [],
keepNames: true,