Compare commits

..

No commits in common. "494ef4435e6b201be73e9cd3e69590d97e98b9d3" and "162a3b1d5bec2a12bbb731467bb84058f1b798f6" have entirely different histories.

180 changed files with 2754 additions and 5936 deletions

Binary file not shown.

View File

@ -4,198 +4,198 @@
"image": "chest_blue.png",
"format": "RGBA8888",
"size": {
"w": 54,
"h": 492
"w": 58,
"h": 528
},
"scale": 1,
"frames": [
{
"filename": "0000.png",
"rotated": false,
"trimmed": false,
"trimmed": true,
"sourceSize": {
"w": 46,
"h": 39
"w": 75,
"h": 75
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 46,
"h": 39
"x": 14,
"y": 30,
"w": 48,
"h": 41
},
"frame": {
"x": 0,
"y": 0,
"w": 46,
"h": 39
"x": 1,
"y": 1,
"w": 48,
"h": 41
}
},
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"trimmed": true,
"sourceSize": {
"w": 47,
"h": 35
"w": 75,
"h": 75
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 47,
"h": 35
"x": 14,
"y": 34,
"w": 49,
"h": 37
},
"frame": {
"x": 0,
"y": 39,
"w": 47,
"h": 35
"x": 1,
"y": 44,
"w": 49,
"h": 37
}
},
{
"filename": "0002.png",
"rotated": false,
"trimmed": false,
"trimmed": true,
"sourceSize": {
"w": 46,
"h": 39
"w": 75,
"h": 75
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 46,
"h": 39
"x": 14,
"y": 30,
"w": 48,
"h": 41
},
"frame": {
"x": 0,
"y": 74,
"w": 46,
"h": 39
"x": 1,
"y": 83,
"w": 48,
"h": 41
}
},
{
"filename": "0003.png",
"rotated": false,
"trimmed": false,
"trimmed": true,
"sourceSize": {
"w": 46,
"h": 46
"w": 75,
"h": 75
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 46,
"h": 46
"x": 14,
"y": 23,
"w": 48,
"h": 48
},
"frame": {
"x": 0,
"y": 113,
"w": 46,
"h": 46
"x": 1,
"y": 126,
"w": 48,
"h": 48
}
},
{
"filename": "0004.png",
"rotated": false,
"trimmed": false,
"trimmed": true,
"sourceSize": {
"w": 53,
"h": 65
"w": 75,
"h": 75
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 53,
"h": 65
"x": 13,
"y": 4,
"w": 55,
"h": 67
},
"frame": {
"x": 0,
"y": 159,
"w": 53,
"h": 65
"x": 1,
"y": 176,
"w": 55,
"h": 67
}
},
{
"filename": "0005.png",
"rotated": false,
"trimmed": false,
"trimmed": true,
"sourceSize": {
"w": 54,
"h": 67
"w": 75,
"h": 75
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 54,
"h": 67
"x": 15,
"y": 2,
"w": 56,
"h": 69
},
"frame": {
"x": 0,
"y": 224,
"w": 54,
"h": 67
"x": 1,
"y": 245,
"w": 56,
"h": 69
}
},
{
"filename": "0006.png",
"rotated": false,
"trimmed": false,
"trimmed": true,
"sourceSize": {
"w": 54,
"h": 67
"w": 75,
"h": 75
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 54,
"h": 67
"x": 15,
"y": 2,
"w": 56,
"h": 69
},
"frame": {
"x": 0,
"y": 291,
"w": 54,
"h": 67
"x": 1,
"y": 316,
"w": 56,
"h": 69
}
},
{
"filename": "0007.png",
"rotated": false,
"trimmed": false,
"trimmed": true,
"sourceSize": {
"w": 54,
"h": 67
"w": 75,
"h": 75
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 54,
"h": 67
"x": 13,
"y": 2,
"w": 56,
"h": 69
},
"frame": {
"x": 0,
"y": 358,
"w": 54,
"h": 67
"x": 1,
"y": 387,
"w": 56,
"h": 69
}
},
{
"filename": "0008.png",
"rotated": false,
"trimmed": false,
"trimmed": true,
"sourceSize": {
"w": 54,
"h": 67
"w": 75,
"h": 75
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 54,
"h": 67
"x": 13,
"y": 2,
"w": 56,
"h": 69
},
"frame": {
"x": 0,
"y": 425,
"w": 54,
"h": 67
"x": 1,
"y": 458,
"w": 56,
"h": 69
}
}
]
@ -204,6 +204,6 @@
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:017ecc2437e580a185f9843f97e80da5:f44ef1c27a4a17183a5bcf1f7fc8ce6a:f4f3c064e6c93b8d1290f93bee927f60$"
"smartupdate": "$TexturePacker:SmartUpdate:5f36000f6160ee6f397afe5a6fd60b73:cf6f4b08e23400447813583c322eb6c7:f4f3c064e6c93b8d1290f93bee927f60$"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -4,198 +4,30 @@
"image": "chest_red.png",
"format": "RGBA8888",
"size": {
"w": 54,
"h": 492
"w": 76,
"h": 57
},
"scale": 1,
"frames": [
{
"filename": "0000.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 46,
"h": 39
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 46,
"h": 39
},
"frame": {
"x": 0,
"y": 0,
"w": 46,
"h": 39
}
},
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 47,
"h": 35
"w": 76,
"h": 57
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 47,
"h": 35
"x": 10,
"y": 3,
"w": 56,
"h": 54
},
"frame": {
"x": 0,
"y": 39,
"w": 47,
"h": 35
}
},
{
"filename": "0002.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 46,
"h": 39
},
"spriteSourceSize": {
"x": 0,
"x": 8,
"y": 0,
"w": 46,
"h": 39
},
"frame": {
"x": 0,
"y": 74,
"w": 46,
"h": 39
}
},
{
"filename": "0003.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 46,
"h": 46
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 46,
"h": 46
},
"frame": {
"x": 0,
"y": 113,
"w": 46,
"h": 46
}
},
{
"filename": "0004.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 53,
"h": 65
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 53,
"h": 65
},
"frame": {
"x": 0,
"y": 159,
"w": 53,
"h": 65
}
},
{
"filename": "0005.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 54,
"h": 67
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 54,
"h": 67
},
"frame": {
"x": 0,
"y": 224,
"w": 54,
"h": 67
}
},
{
"filename": "0006.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 54,
"h": 67
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 54,
"h": 67
},
"frame": {
"x": 0,
"y": 291,
"w": 54,
"h": 67
}
},
{
"filename": "0007.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 54,
"h": 67
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 54,
"h": 67
},
"frame": {
"x": 0,
"y": 358,
"w": 54,
"h": 67
}
},
{
"filename": "0008.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 54,
"h": 67
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 54,
"h": 67
},
"frame": {
"x": 0,
"y": 425,
"w": 54,
"h": 67
"w": 56,
"h": 54
}
}
]
@ -204,6 +36,6 @@
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:2a0b6c93c5be115efa635d40780603f0:b5fde49f991c2ecc49afedd80cc8a544:a163d960e9966469ae4dde4b53c13496$"
"smartupdate": "$TexturePacker:SmartUpdate:895f0a79b89fa0fb44167f4584fd9a22:357b46953b7e17c6b2f43a62d52855d8:cc1ed0e4f90aaa9dcf1b39a0af1283b0$"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@ -4312,11 +4312,6 @@
1,
1
],
"99-gigantamax": [
0,
1,
1
],
"100": [
0,
1,
@ -9945,12 +9940,12 @@
],
"672": [
0,
1,
2,
1
],
"673": [
0,
1,
2,
1
],
"677": [
@ -10811,7 +10806,7 @@
"962": [
1,
1,
1
2
],
"967": [
0,

View File

@ -1,32 +0,0 @@
{
"1": {
"c56a5a": "6232a9",
"f6c58b": "9f60d5",
"832908": "3b1c69",
"ee8b4a": "8853bf",
"101010": "101010",
"735210": "534681",
"fdfdfd": "ffdbdb",
"e1d0db": "d5869b",
"ffe6b4": "c3d6ff",
"eebd8b": "9ba3d9",
"b47b5a": "7c72b6",
"b5a6b5": "b65782",
"9a859a": "872d65"
},
"2": {
"c56a5a": "2d6f9e",
"f6c58b": "75e0e8",
"832908": "22447d",
"ee8b4a": "43adc4",
"101010": "101010",
"735210": "1e1743",
"fdfdfd": "b1f1cf",
"e1d0db": "73c1c2",
"ffe6b4": "464d89",
"eebd8b": "31296f",
"b47b5a": "231b4e",
"b5a6b5": "44778a",
"9a859a": "2f4c6b"
}
}

View File

@ -1,20 +1,4 @@
{
"1": {
"3d3128": "69112a",
"000000": "000000",
"67615b": "9e2c3d",
"615140": "89431b",
"7e6d5a": "b3743e",
"554538": "642509",
"efeded": "f8e2b7",
"beb8b6": "e3a378",
"0e5d58": "8c6859",
"09a77c": "f8f0e2",
"0d8374": "d2af94",
"c16a3f": "321512",
"c6b379": "552d30",
"a8905c": "4b2525"
},
"2": {
"3d3128": "161526",
"000000": "000000",

View File

@ -0,0 +1,965 @@
{
"textures": [
{
"image": "672_2.png",
"format": "RGBA8888",
"size": {
"w": 282,
"h": 282
},
"scale": 1,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 41,
"h": 42
},
"frame": {
"x": 0,
"y": 0,
"w": 41,
"h": 42
}
},
{
"filename": "0002.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 41,
"h": 42
},
"frame": {
"x": 0,
"y": 0,
"w": 41,
"h": 42
}
},
{
"filename": "0021.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 41,
"h": 42
},
"frame": {
"x": 0,
"y": 0,
"w": 41,
"h": 42
}
},
{
"filename": "0022.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 41,
"h": 42
},
"frame": {
"x": 0,
"y": 0,
"w": 41,
"h": 42
}
},
{
"filename": "0023.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 41,
"h": 42
},
"frame": {
"x": 0,
"y": 0,
"w": 41,
"h": 42
}
},
{
"filename": "0024.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 41,
"h": 42
},
"frame": {
"x": 0,
"y": 0,
"w": 41,
"h": 42
}
},
{
"filename": "0045.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 41,
"h": 42
},
"frame": {
"x": 0,
"y": 0,
"w": 41,
"h": 42
}
},
{
"filename": "0003.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 41,
"h": 42
},
"frame": {
"x": 0,
"y": 42,
"w": 41,
"h": 42
}
},
{
"filename": "0004.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 41,
"h": 42
},
"frame": {
"x": 0,
"y": 42,
"w": 41,
"h": 42
}
},
{
"filename": "0005.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 41,
"h": 42
},
"frame": {
"x": 0,
"y": 84,
"w": 41,
"h": 42
}
},
{
"filename": "0006.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 41,
"h": 42
},
"frame": {
"x": 0,
"y": 126,
"w": 41,
"h": 42
}
},
{
"filename": "0007.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 41,
"h": 42
},
"frame": {
"x": 0,
"y": 168,
"w": 41,
"h": 42
}
},
{
"filename": "0018.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 41,
"h": 42
},
"frame": {
"x": 0,
"y": 210,
"w": 41,
"h": 42
}
},
{
"filename": "0019.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 41,
"h": 42
},
"frame": {
"x": 41,
"y": 0,
"w": 41,
"h": 42
}
},
{
"filename": "0020.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 41,
"h": 42
},
"frame": {
"x": 82,
"y": 0,
"w": 41,
"h": 42
}
},
{
"filename": "0025.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 41,
"h": 42
},
"frame": {
"x": 123,
"y": 0,
"w": 41,
"h": 42
}
},
{
"filename": "0026.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 41,
"h": 42
},
"frame": {
"x": 164,
"y": 0,
"w": 41,
"h": 42
}
},
{
"filename": "0027.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 41,
"h": 42
},
"frame": {
"x": 205,
"y": 0,
"w": 41,
"h": 42
}
},
{
"filename": "0042.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 41,
"h": 42
},
"frame": {
"x": 41,
"y": 42,
"w": 41,
"h": 42
}
},
{
"filename": "0043.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 41,
"h": 42
},
"frame": {
"x": 41,
"y": 84,
"w": 41,
"h": 42
}
},
{
"filename": "0044.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 41,
"h": 42
},
"frame": {
"x": 41,
"y": 126,
"w": 41,
"h": 42
}
},
{
"filename": "0008.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 1,
"w": 41,
"h": 41
},
"frame": {
"x": 41,
"y": 168,
"w": 41,
"h": 41
}
},
{
"filename": "0009.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 1,
"w": 41,
"h": 41
},
"frame": {
"x": 41,
"y": 209,
"w": 41,
"h": 41
}
},
{
"filename": "0010.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 1,
"w": 41,
"h": 41
},
"frame": {
"x": 82,
"y": 42,
"w": 41,
"h": 41
}
},
{
"filename": "0015.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 1,
"w": 41,
"h": 41
},
"frame": {
"x": 123,
"y": 42,
"w": 41,
"h": 41
}
},
{
"filename": "0016.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 1,
"w": 41,
"h": 41
},
"frame": {
"x": 164,
"y": 42,
"w": 41,
"h": 41
}
},
{
"filename": "0017.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 1,
"w": 41,
"h": 41
},
"frame": {
"x": 205,
"y": 42,
"w": 41,
"h": 41
}
},
{
"filename": "0028.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 1,
"w": 41,
"h": 41
},
"frame": {
"x": 82,
"y": 83,
"w": 41,
"h": 41
}
},
{
"filename": "0029.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 1,
"w": 41,
"h": 41
},
"frame": {
"x": 82,
"y": 124,
"w": 41,
"h": 41
}
},
{
"filename": "0040.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 1,
"y": 0,
"w": 40,
"h": 42
},
"frame": {
"x": 82,
"y": 165,
"w": 40,
"h": 42
}
},
{
"filename": "0041.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 1,
"y": 0,
"w": 40,
"h": 42
},
"frame": {
"x": 82,
"y": 207,
"w": 40,
"h": 42
}
},
{
"filename": "0011.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 1,
"w": 40,
"h": 41
},
"frame": {
"x": 122,
"y": 165,
"w": 40,
"h": 41
}
},
{
"filename": "0012.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 1,
"w": 40,
"h": 41
},
"frame": {
"x": 122,
"y": 206,
"w": 40,
"h": 41
}
},
{
"filename": "0013.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 1,
"w": 40,
"h": 41
},
"frame": {
"x": 123,
"y": 83,
"w": 40,
"h": 41
}
},
{
"filename": "0014.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 1,
"w": 40,
"h": 41
},
"frame": {
"x": 123,
"y": 124,
"w": 40,
"h": 41
}
},
{
"filename": "0037.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 1,
"y": 1,
"w": 40,
"h": 41
},
"frame": {
"x": 162,
"y": 165,
"w": 40,
"h": 41
}
},
{
"filename": "0038.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 1,
"y": 1,
"w": 40,
"h": 41
},
"frame": {
"x": 162,
"y": 206,
"w": 40,
"h": 41
}
},
{
"filename": "0039.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 1,
"y": 1,
"w": 40,
"h": 41
},
"frame": {
"x": 163,
"y": 83,
"w": 40,
"h": 41
}
},
{
"filename": "0030.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 2,
"w": 41,
"h": 40
},
"frame": {
"x": 163,
"y": 124,
"w": 41,
"h": 40
}
},
{
"filename": "0031.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 0,
"y": 2,
"w": 41,
"h": 40
},
"frame": {
"x": 203,
"y": 83,
"w": 41,
"h": 40
}
},
{
"filename": "0032.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 1,
"y": 2,
"w": 40,
"h": 40
},
"frame": {
"x": 202,
"y": 164,
"w": 40,
"h": 40
}
},
{
"filename": "0033.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 1,
"y": 2,
"w": 40,
"h": 40
},
"frame": {
"x": 204,
"y": 123,
"w": 40,
"h": 40
}
},
{
"filename": "0034.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 1,
"y": 2,
"w": 40,
"h": 40
},
"frame": {
"x": 242,
"y": 163,
"w": 40,
"h": 40
}
},
{
"filename": "0035.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 1,
"y": 2,
"w": 40,
"h": 40
},
"frame": {
"x": 242,
"y": 203,
"w": 40,
"h": 40
}
},
{
"filename": "0036.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 41,
"h": 42
},
"spriteSourceSize": {
"x": 1,
"y": 2,
"w": 40,
"h": 40
},
"frame": {
"x": 202,
"y": 204,
"w": 40,
"h": 40
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:b36f1de558a8fa8ac8b56a9ba43a0dfd:5fe84a3f522e543bfbbfe0837355266b:2e4767b7cd134fc0ab1bb6e9eee82bc7$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@ -1,20 +1,4 @@
{
"1": {
"3d3128": "5a0e24",
"000000": "000000",
"554538": "471405",
"67615b": "8f2837",
"0d835a": "d2af94",
"0e5d58": "8c6352",
"74593a": "61240a",
"09a766": "f8f0e2",
"cabfbb": "e3a378",
"efeded": "f8e2b7",
"a8905c": "9e4e21",
"c6b379": "ce8648",
"ae492a": "321512",
"c16a3f": "552d30"
},
"2": {
"3d3128": "121123",
"000000": "000000",

View File

@ -0,0 +1,965 @@
{
"textures": [
{
"image": "673_2.png",
"format": "RGBA8888",
"size": {
"w": 384,
"h": 384
},
"scale": 1,
"frames": [
{
"filename": "0029.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 62,
"h": 65
},
"frame": {
"x": 0,
"y": 0,
"w": 62,
"h": 65
}
},
{
"filename": "0039.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 62,
"h": 65
},
"frame": {
"x": 0,
"y": 0,
"w": 62,
"h": 65
}
},
{
"filename": "0030.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 62,
"h": 65
},
"frame": {
"x": 62,
"y": 0,
"w": 62,
"h": 65
}
},
{
"filename": "0038.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 62,
"h": 65
},
"frame": {
"x": 62,
"y": 0,
"w": 62,
"h": 65
}
},
{
"filename": "0031.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 62,
"h": 65
},
"frame": {
"x": 124,
"y": 0,
"w": 62,
"h": 65
}
},
{
"filename": "0032.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 62,
"h": 65
},
"frame": {
"x": 186,
"y": 0,
"w": 62,
"h": 65
}
},
{
"filename": "0033.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 62,
"h": 65
},
"frame": {
"x": 248,
"y": 0,
"w": 62,
"h": 65
}
},
{
"filename": "0035.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 62,
"h": 65
},
"frame": {
"x": 248,
"y": 0,
"w": 62,
"h": 65
}
},
{
"filename": "0034.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 62,
"h": 65
},
"frame": {
"x": 310,
"y": 0,
"w": 62,
"h": 65
}
},
{
"filename": "0036.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 62,
"h": 65
},
"frame": {
"x": 0,
"y": 65,
"w": 62,
"h": 65
}
},
{
"filename": "0037.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 62,
"h": 65
},
"frame": {
"x": 62,
"y": 65,
"w": 62,
"h": 65
}
},
{
"filename": "0028.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 61,
"h": 65
},
"frame": {
"x": 124,
"y": 65,
"w": 61,
"h": 65
}
},
{
"filename": "0040.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 61,
"h": 65
},
"frame": {
"x": 124,
"y": 65,
"w": 61,
"h": 65
}
},
{
"filename": "0026.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 1,
"y": 0,
"w": 60,
"h": 65
},
"frame": {
"x": 185,
"y": 65,
"w": 60,
"h": 65
}
},
{
"filename": "0027.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 1,
"y": 0,
"w": 60,
"h": 65
},
"frame": {
"x": 245,
"y": 65,
"w": 60,
"h": 65
}
},
{
"filename": "0041.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 1,
"y": 0,
"w": 60,
"h": 65
},
"frame": {
"x": 305,
"y": 65,
"w": 60,
"h": 65
}
},
{
"filename": "0042.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 1,
"y": 0,
"w": 60,
"h": 65
},
"frame": {
"x": 0,
"y": 130,
"w": 60,
"h": 65
}
},
{
"filename": "0013.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 0,
"y": 3,
"w": 60,
"h": 62
},
"frame": {
"x": 60,
"y": 130,
"w": 60,
"h": 62
}
},
{
"filename": "0001.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 1,
"y": 0,
"w": 59,
"h": 65
},
"frame": {
"x": 120,
"y": 130,
"w": 59,
"h": 65
}
},
{
"filename": "0023.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 1,
"y": 0,
"w": 59,
"h": 65
},
"frame": {
"x": 120,
"y": 130,
"w": 59,
"h": 65
}
},
{
"filename": "0024.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 1,
"y": 0,
"w": 59,
"h": 65
},
"frame": {
"x": 120,
"y": 130,
"w": 59,
"h": 65
}
},
{
"filename": "0045.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 1,
"y": 0,
"w": 59,
"h": 65
},
"frame": {
"x": 120,
"y": 130,
"w": 59,
"h": 65
}
},
{
"filename": "0002.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 1,
"y": 0,
"w": 59,
"h": 65
},
"frame": {
"x": 60,
"y": 192,
"w": 59,
"h": 65
}
},
{
"filename": "0022.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 1,
"y": 0,
"w": 59,
"h": 65
},
"frame": {
"x": 60,
"y": 192,
"w": 59,
"h": 65
}
},
{
"filename": "0025.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 1,
"y": 0,
"w": 59,
"h": 65
},
"frame": {
"x": 60,
"y": 192,
"w": 59,
"h": 65
}
},
{
"filename": "0043.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 1,
"y": 0,
"w": 59,
"h": 65
},
"frame": {
"x": 60,
"y": 192,
"w": 59,
"h": 65
}
},
{
"filename": "0021.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 1,
"y": 0,
"w": 59,
"h": 65
},
"frame": {
"x": 0,
"y": 195,
"w": 59,
"h": 65
}
},
{
"filename": "0044.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 1,
"y": 0,
"w": 59,
"h": 65
},
"frame": {
"x": 179,
"y": 130,
"w": 59,
"h": 65
}
},
{
"filename": "0003.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 2,
"y": 1,
"w": 58,
"h": 64
},
"frame": {
"x": 238,
"y": 130,
"w": 58,
"h": 64
}
},
{
"filename": "0004.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 2,
"y": 1,
"w": 58,
"h": 64
},
"frame": {
"x": 238,
"y": 130,
"w": 58,
"h": 64
}
},
{
"filename": "0005.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 2,
"y": 1,
"w": 58,
"h": 64
},
"frame": {
"x": 238,
"y": 194,
"w": 58,
"h": 64
}
},
{
"filename": "0006.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 2,
"y": 1,
"w": 58,
"h": 64
},
"frame": {
"x": 59,
"y": 257,
"w": 58,
"h": 64
}
},
{
"filename": "0019.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 2,
"y": 1,
"w": 58,
"h": 64
},
"frame": {
"x": 0,
"y": 260,
"w": 58,
"h": 64
}
},
{
"filename": "0020.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 2,
"y": 1,
"w": 58,
"h": 64
},
"frame": {
"x": 117,
"y": 257,
"w": 58,
"h": 64
}
},
{
"filename": "0012.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 2,
"y": 3,
"w": 58,
"h": 62
},
"frame": {
"x": 119,
"y": 195,
"w": 58,
"h": 62
}
},
{
"filename": "0018.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 3,
"y": 1,
"w": 57,
"h": 64
},
"frame": {
"x": 175,
"y": 257,
"w": 57,
"h": 64
}
},
{
"filename": "0014.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 2,
"y": 3,
"w": 58,
"h": 62
},
"frame": {
"x": 177,
"y": 195,
"w": 58,
"h": 62
}
},
{
"filename": "0007.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 3,
"y": 2,
"w": 57,
"h": 63
},
"frame": {
"x": 232,
"y": 258,
"w": 57,
"h": 63
}
},
{
"filename": "0008.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 3,
"y": 2,
"w": 57,
"h": 63
},
"frame": {
"x": 289,
"y": 258,
"w": 57,
"h": 63
}
},
{
"filename": "0009.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 3,
"y": 2,
"w": 57,
"h": 63
},
"frame": {
"x": 296,
"y": 130,
"w": 57,
"h": 63
}
},
{
"filename": "0017.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 3,
"y": 2,
"w": 57,
"h": 63
},
"frame": {
"x": 296,
"y": 193,
"w": 57,
"h": 63
}
},
{
"filename": "0015.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 4,
"y": 2,
"w": 56,
"h": 63
},
"frame": {
"x": 58,
"y": 321,
"w": 56,
"h": 63
}
},
{
"filename": "0016.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 4,
"y": 2,
"w": 56,
"h": 63
},
"frame": {
"x": 114,
"y": 321,
"w": 56,
"h": 63
}
},
{
"filename": "0010.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 4,
"y": 3,
"w": 56,
"h": 62
},
"frame": {
"x": 170,
"y": 321,
"w": 56,
"h": 62
}
},
{
"filename": "0011.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 62,
"h": 65
},
"spriteSourceSize": {
"x": 4,
"y": 3,
"w": 56,
"h": 62
},
"frame": {
"x": 226,
"y": 321,
"w": 56,
"h": 62
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:05149e465b79b92adcb764d8f903ce8d:523fbed3890bc743f1863e6db3150ddb:5d92dd5d09b0875a1d8f3606df775958$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -28,20 +28,5 @@
"fffbff": "edf8e6",
"7b827b": "6a856a",
"a7aba7": "98a798"
},
"2": {
"342930": "754156",
"0f0f0f": "0f0f0f",
"4a3942": "a5777f",
"937d85": "2f2655",
"b9aaaf": "453863",
"665b60": "211f45",
"efe3e1": "67548a",
"a7aba7": "ddac84",
"fffbff": "f7e5d0",
"e64c62": "aba7a8",
"993e49": "797877",
"501d25": "545151",
"7b827b": "a96c4b"
}
}

View File

@ -0,0 +1,167 @@
{
"textures": [
{
"image": "962_3.png",
"format": "RGBA8888",
"size": {
"w": 224,
"h": 224
},
"scale": 1,
"frames": [
{
"filename": "0003.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 101,
"h": 97
},
"spriteSourceSize": {
"x": 1,
"y": 0,
"w": 82,
"h": 86
},
"frame": {
"x": 0,
"y": 0,
"w": 82,
"h": 86
}
},
{
"filename": "0002.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 101,
"h": 97
},
"spriteSourceSize": {
"x": 1,
"y": 4,
"w": 87,
"h": 79
},
"frame": {
"x": 0,
"y": 86,
"w": 87,
"h": 79
}
},
{
"filename": "0001.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 101,
"h": 97
},
"spriteSourceSize": {
"x": 1,
"y": 6,
"w": 92,
"h": 74
},
"frame": {
"x": 82,
"y": 0,
"w": 92,
"h": 74
}
},
{
"filename": "0006.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 101,
"h": 97
},
"spriteSourceSize": {
"x": 1,
"y": 38,
"w": 91,
"h": 59
},
"frame": {
"x": 0,
"y": 165,
"w": 91,
"h": 59
}
},
{
"filename": "0007.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 101,
"h": 97
},
"spriteSourceSize": {
"x": 1,
"y": 36,
"w": 91,
"h": 60
},
"frame": {
"x": 87,
"y": 74,
"w": 91,
"h": 60
}
},
{
"filename": "0004.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 101,
"h": 97
},
"spriteSourceSize": {
"x": 0,
"y": 41,
"w": 101,
"h": 41
},
"frame": {
"x": 91,
"y": 134,
"w": 101,
"h": 41
}
},
{
"filename": "0005.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 101,
"h": 97
},
"spriteSourceSize": {
"x": 0,
"y": 40,
"w": 100,
"h": 38
},
"frame": {
"x": 91,
"y": 175,
"w": 100,
"h": 38
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:ee54d59ae73a6775b5d1d9b10f273445:828dff0b1dc45966e927a7a1419412f2:1e70eb3d02dd5c47565da4b5d26e2400$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -1,41 +0,0 @@
{
"textures": [
{
"image": "aether_grunt_f.png",
"format": "RGBA8888",
"size": {
"w": 69,
"h": 69
},
"scale": 1,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 23,
"y": 10,
"w": 35,
"h": 69
},
"frame": {
"x": 0,
"y": 0,
"w": 35,
"h": 69
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:0c9e77856d3b434e719021572bcb93de:f9c45dc5d67009b134dd1bbc5593f6ec:a694f8828aff21c718e5161e2fd63ade$"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 849 B

View File

@ -1,41 +0,0 @@
{
"textures": [
{
"image": "aether_grunt_m.png",
"format": "RGBA8888",
"size": {
"w": 65,
"h": 65
},
"scale": 1,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 16,
"y": 14,
"w": 47,
"h": 65
},
"frame": {
"x": 0,
"y": 0,
"w": 47,
"h": 65
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:963887cf29549ad3c123b8055cb4d701:68004c4a6e04c93bd21c26a6f8921f0c:d2241fc11d0fc31b26ecbedae6da74f4$"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 819 B

View File

@ -1,41 +0,0 @@
{
"textures": [
{
"image": "faba.png",
"format": "RGBA8888",
"size": {
"w": 74,
"h": 74
},
"scale": 1,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 25,
"y": 5,
"w": 31,
"h": 74
},
"frame": {
"x": 0,
"y": 0,
"w": 31,
"h": 74
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:47622708d99a504998950bd9c389a504:fe1c51be191dd9fafb5b6f309c08ae1a:8d64db18930325b8b513740c1d83ce4c$"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 814 B

View File

@ -1,41 +0,0 @@
{
"textures": [
{
"image": "guzma.png",
"format": "RGBA8888",
"size": {
"w": 58,
"h": 58
},
"scale": 1,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 21,
"y": 20,
"w": 37,
"h": 58
},
"frame": {
"x": 0,
"y": 0,
"w": 37,
"h": 58
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:c3b08a562a2882d1ca8b5e031e245da9:72a8305e547f091d15abccd2b142e401:3b302c7f9eb6ea81b65bcaeead4a95a9$"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 848 B

View File

@ -1,41 +0,0 @@
{
"textures": [
{
"image": "lusamine.png",
"format": "RGBA8888",
"size": {
"w": 74,
"h": 74
},
"scale": 1,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 22,
"y": 5,
"w": 36,
"h": 74
},
"frame": {
"x": 0,
"y": 0,
"w": 36,
"h": 74
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:41da3a1299e3831be70016dc91e49313:2413ba06767fb10fdc6fde8cc736c51c:4012333084c529872232c8d052561dc1$"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 996 B

View File

@ -1,41 +0,0 @@
{
"textures": [
{
"image": "macro_grunt_f.png",
"format": "RGBA8888",
"size": {
"w": 74,
"h": 74
},
"scale": 1,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 24,
"y": 5,
"w": 31,
"h": 74
},
"frame": {
"x": 0,
"y": 0,
"w": 31,
"h": 74
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:a015c43d80f8fd1932758e0e2cfcec61:59fc8205ea5ca04295831b4a2eb623ec:30df2ea8e9dac9e95f70534ec43d5ecd$"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 837 B

View File

@ -1,41 +0,0 @@
{
"textures": [
{
"image": "macro_grunt_m.png",
"format": "RGBA8888",
"size": {
"w": 75,
"h": 75
},
"scale": 1,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 15,
"y": 4,
"w": 48,
"h": 75
},
"frame": {
"x": 0,
"y": 0,
"w": 48,
"h": 75
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:52fccff2a0675b4e10139ddb7067d4cf:10d254175d2d8a9111cce096ffb55fa3:d57016467aa07cafdfaf13e0ff643c1b$"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 919 B

View File

@ -1,41 +0,0 @@
{
"textures": [
{
"image": "oleana.png",
"format": "RGBA8888",
"size": {
"w": 79,
"h": 79
},
"scale": 1,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 10,
"y": 1,
"w": 53,
"h": 79
},
"frame": {
"x": 0,
"y": 0,
"w": 53,
"h": 79
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:30987a671771127a38491a588c465964:38b28effcfd5c6cbc0f358912a775af3:82e2a1f8afed29be57f6c2473f4c5be2$"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -1,41 +0,0 @@
{
"textures": [
{
"image": "plumeria.png",
"format": "RGBA8888",
"size": {
"w": 72,
"h": 72
},
"scale": 1,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 23,
"y": 7,
"w": 36,
"h": 72
},
"frame": {
"x": 0,
"y": 0,
"w": 36,
"h": 72
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:5527e7b646932d429928b53f055e9d27:c0640510780d2974f9b74a7f8e6b29aa:7bfec029bae78c9d483f59c35b73afad$"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 934 B

View File

@ -1,41 +0,0 @@
{
"textures": [
{
"image": "rose.png",
"format": "RGBA8888",
"size": {
"w": 79,
"h": 79
},
"scale": 1,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 16,
"y": 1,
"w": 52,
"h": 79
},
"frame": {
"x": 0,
"y": 0,
"w": 52,
"h": 79
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:2b4ccaff7255c7d72661eac13de83ff8:72ee3660cdf470bd67375d355307e19d:8d35b104fc841baa4443581e6cea979e$"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 864 B

View File

@ -1,41 +0,0 @@
{
"textures": [
{
"image": "skull_grunt_f.png",
"format": "RGBA8888",
"size": {
"w": 69,
"h": 69
},
"scale": 1,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 27,
"y": 9,
"w": 29,
"h": 69
},
"frame": {
"x": 0,
"y": 0,
"w": 29,
"h": 69
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:2e44c39efe8e78ec75d9119731b9b1cb:4923b5197ea74a9ed0b861e2408f595b:9035f560a0ab0d45bcc084aba7172990$"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 792 B

View File

@ -1,41 +0,0 @@
{
"textures": [
{
"image": "skull_grunt_m.png",
"format": "RGBA8888",
"size": {
"w": 67,
"h": 67
},
"scale": 1,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 28,
"y": 11,
"w": 26,
"h": 67
},
"frame": {
"x": 0,
"y": 0,
"w": 26,
"h": 67
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:688a83ff13a77c6923f038db8c7e5e84:d0ece3ab82602eb0c5003bacc26dbd9f:1ff10b395daf6ebfa377680a6404f816$"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 723 B

View File

@ -22,7 +22,7 @@ import {
getModifierPoolForType,
getModifierType,
getPartyLuckValue,
modifierTypes, PokemonHeldItemModifierType
modifierTypes
} from "./modifier/modifier-type";
import AbilityBar from "./ui/ability-bar";
import { BlockItemTheftAbAttr, DoubleBattleChanceAbAttr, ChangeMovePriorityAbAttr, PostBattleInitAbAttr, applyAbAttrs, applyPostBattleInitAbAttrs } from "./data/ability";
@ -143,7 +143,6 @@ export default class BattleScene extends SceneBase {
public bgmVolume: number = 1;
public fieldVolume: number = 1;
public seVolume: number = 1;
public uiVolume: number = 1;
public gameSpeed: integer = 1;
public damageNumbersMode: integer = 0;
public reroll: boolean = false;
@ -864,13 +863,14 @@ export default class BattleScene extends SceneBase {
if (Overrides.OPP_SPECIES_OVERRIDE) {
species = getPokemonSpecies(Overrides.OPP_SPECIES_OVERRIDE);
}
const pokemon = new EnemyPokemon(this, species, level, trainerSlot, boss, dataSource);
if (Overrides.OPP_LEVEL_OVERRIDE !== 0) {
level = Overrides.OPP_LEVEL_OVERRIDE;
pokemon.level = Overrides.OPP_LEVEL_OVERRIDE;
}
const pokemon = new EnemyPokemon(this, species, level, trainerSlot, boss, dataSource);
if (Overrides.OPP_GENDER_OVERRIDE !== null) {
pokemon.gender = Overrides.OPP_GENDER_OVERRIDE;
}
overrideModifiers(this, false);
overrideHeldItems(this, pokemon, false);
if (boss && !dataSource) {
@ -1834,7 +1834,6 @@ export default class BattleScene extends SceneBase {
} else {
const soundDetails = sound.key.split("/");
switch (soundDetails[0]) {
case "battle_anims":
case "cry":
if (soundDetails[1].startsWith("PRSFX- ")) {
@ -1871,29 +1870,17 @@ export default class BattleScene extends SceneBase {
try {
const keyDetails = key.split("/");
switch (keyDetails[0]) {
case "level_up_fanfare":
case "item_fanfare":
case "minor_fanfare":
case "heal":
case "evolution":
case "evolution_fanfare":
// These sounds are loaded in as BGM, but played as sound effects
// When these sounds are updated in updateVolume(), they are treated as BGM however because they are placed in the BGM Cache through being called by playSoundWithoutBGM()
config["volume"] = this.masterVolume * this.bgmVolume;
break;
case "battle_anims":
case "cry":
config["volume"] = this.masterVolume * this.fieldVolume;
//PRSFX sound files are unusually loud
if (keyDetails[1].startsWith("PRSFX- ")) {
if (key.startsWith("PRSFX- ")) {
config["volume"] *= 0.5;
}
break;
case "ui":
//As of, right now this applies to the "select", "menu_open", "error" sound effects
config["volume"] = this.masterVolume * this.uiVolume;
break;
case "se":
case "ui":
default:
config["volume"] = this.masterVolume * this.seVolume;
break;
}
@ -2082,18 +2069,6 @@ export default class BattleScene extends SceneBase {
return 12.974;
case "battle_flare_grunt": //XY Team Flare Battle
return 4.228;
case "battle_aether_grunt": // SM Aether Foundation Battle
return 16.00;
case "battle_skull_grunt": // SM Team Skull Battle
return 20.87;
case "battle_macro_grunt": // SWSH Trainer Battle
return 11.56;
case "battle_galactic_admin": //BDSP Team Galactic Admin Battle
return 11.997;
case "battle_skull_admin": //SM Team Skull Admin Battle
return 15.463;
case "battle_oleana": //SWSH Oleana Battle
return 14.110;
case "battle_rocket_boss": //USUM Giovanni Battle
return 9.115;
case "battle_aqua_magma_boss": //ORAS Archie & Maxie Battle
@ -2104,12 +2079,6 @@ export default class BattleScene extends SceneBase {
return 25.624;
case "battle_flare_boss": //XY Lysandre Battle
return 8.085;
case "battle_aether_boss": //SM Lusamine Battle
return 11.33;
case "battle_skull_boss": //SM Guzma Battle
return 13.13;
case "battle_macro_boss": //SWSH Rose Battle
return 11.42;
}
return 0;
@ -2552,19 +2521,13 @@ export default class BattleScene extends SceneBase {
party.forEach((enemyPokemon: EnemyPokemon, i: integer) => {
if (heldModifiersConfigs && i < heldModifiersConfigs.length && heldModifiersConfigs[i] && heldModifiersConfigs[i].length > 0) {
heldModifiersConfigs[i].forEach(mt => {
if (mt.modifier instanceof PokemonHeldItemModifierType) {
const stackCount = mt.stackCount ?? 1;
// const isTransferable = mt.isTransferable ?? true;
const modifier = mt.modifier.newModifier(enemyPokemon);
const modifier = mt.modifierType.newModifier(enemyPokemon);
modifier.stackCount = stackCount;
// TODO: set isTransferable
// modifier.setIsTransferable(isTransferable);
this.addEnemyModifier(modifier, true);
} else {
const modifier = mt.modifier as PokemonHeldItemModifier;
modifier.pokemonId = enemyPokemon.id;
this.addEnemyModifier(modifier, true);
}
});
} else {
const isBoss = enemyPokemon.isBoss() || (this.currentBattle.battleType === BattleType.TRAINER && !!this.currentBattle.trainer?.config.isBoss);

View File

@ -499,27 +499,27 @@ export const classicFixedBattles: FixedBattleConfigs = {
[25]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
.setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_2, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)),
[35]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT, TrainerType.MACRO_GRUNT ], true)),
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT ], true)),
[55]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
.setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_3, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)),
[62]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT, TrainerType.MACRO_GRUNT ], true)),
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT ], true)),
[64]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT, TrainerType.MACRO_GRUNT ], true)),
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT ], true)),
[66]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35)
.setGetTrainerFunc(getRandomTrainerFunc([[ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [ TrainerType.TABITHA, TrainerType.COURTNEY ], [ TrainerType.MATT, TrainerType.SHELLY ], [ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ], [ TrainerType.ZINZOLIN, TrainerType.ROOD ], [ TrainerType.XEROSIC, TrainerType.BRYONY ], TrainerType.FABA, TrainerType.PLUMERIA, TrainerType.OLEANA ], true)),
.setGetTrainerFunc(getRandomTrainerFunc([[ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [ TrainerType.TABITHA, TrainerType.COURTNEY ], [ TrainerType.MATT, TrainerType.SHELLY ], [ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ], [ TrainerType.ZINZOLIN, TrainerType.ROOD ], [ TrainerType.XEROSIC, TrainerType.BRYONY ] ], true)),
[95]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
.setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_4, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)),
[112]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT, TrainerType.MACRO_GRUNT ], true)),
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT ], true)),
[114]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35)
.setGetTrainerFunc(getRandomTrainerFunc([[ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [ TrainerType.TABITHA, TrainerType.COURTNEY ], [ TrainerType.MATT, TrainerType.SHELLY ], [ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ], [ TrainerType.ZINZOLIN, TrainerType.ROOD ], [ TrainerType.XEROSIC, TrainerType.BRYONY ], TrainerType.FABA, TrainerType.PLUMERIA, TrainerType.OLEANA ], true, 1)),
.setGetTrainerFunc(getRandomTrainerFunc([[ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [ TrainerType.TABITHA, TrainerType.COURTNEY ], [ TrainerType.MATT, TrainerType.SHELLY ], [ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ], [ TrainerType.ZINZOLIN, TrainerType.ROOD ], [ TrainerType.XEROSIC, TrainerType.BRYONY ] ], true, 1)),
[115]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_BOSS_GIOVANNI_1, TrainerType.MAXIE, TrainerType.ARCHIE, TrainerType.CYRUS, TrainerType.GHETSIS, TrainerType.LYSANDRE, TrainerType.LUSAMINE, TrainerType.GUZMA, TrainerType.ROSE ])),
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_BOSS_GIOVANNI_1, TrainerType.MAXIE, TrainerType.ARCHIE, TrainerType.CYRUS, TrainerType.GHETSIS, TrainerType.LYSANDRE ])),
[145]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
.setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_5, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)),
[165]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_BOSS_GIOVANNI_2, TrainerType.MAXIE_2, TrainerType.ARCHIE_2, TrainerType.CYRUS_2, TrainerType.GHETSIS_2, TrainerType.LYSANDRE_2, TrainerType.LUSAMINE_2, TrainerType.GUZMA_2, TrainerType.ROSE_2 ])),
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_BOSS_GIOVANNI_2, TrainerType.MAXIE_2, TrainerType.ARCHIE_2, TrainerType.CYRUS_2, TrainerType.GHETSIS_2, TrainerType.LYSANDRE_2 ])),
[182]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.LORELEI, TrainerType.WILL, TrainerType.SIDNEY, TrainerType.AARON, TrainerType.SHAUNTAL, TrainerType.MALVA, [ TrainerType.HALA, TrainerType.MOLAYNE ], TrainerType.MARNIE_ELITE, TrainerType.RIKA, TrainerType.CRISPIN ])),
[184]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(182)

View File

@ -1107,13 +1107,12 @@ export abstract class BattleAnim {
let r = anim!.frames.length;
let f = 0;
let existingFieldSprites = scene.field.getAll().slice(0);
const existingFieldSprites = [...scene.field.getAll()];
scene.tweens.addCounter({
duration: Utils.getFrameMs(3) * frameTimeMult,
repeat: anim!.frames.length,
onRepeat: () => {
existingFieldSprites = scene.field.getAll().slice(0);
const spriteFrames = anim!.frames[f];
const frameData = this.getGraphicFrameDataWithoutTarget(anim!.frames[f], targetInitialX, targetInitialY);
const u = 0;
@ -1140,8 +1139,7 @@ export abstract class BattleAnim {
const setSpritePriority = (priority: integer) => {
if (existingFieldSprites.length > priority) {
// Move to specified priority index
const index = scene.field.getIndex(existingFieldSprites[priority]);
scene.field.moveTo(moveSprite, index);
scene.field.moveTo(moveSprite, scene.field.getIndex(existingFieldSprites[priority]));
} else {
// Move to top of scene
scene.field.moveTo(moveSprite, scene.field.getAll().length - 1);

View File

@ -49,8 +49,7 @@ export function getDailyRunStarters(scene: BattleScene, seed: string): Starter[]
const costSpecies = Object.keys(speciesStarters)
.map(s => parseInt(s) as Species)
.filter(s => speciesStarters[s] === cost);
const randPkmSpecies = getPokemonSpecies(Utils.randSeedItem(costSpecies));
const starterSpecies = getPokemonSpecies(randPkmSpecies.getTrainerSpeciesForLevel(startingLevel, true, PartyMemberStrength.STRONGER));
const starterSpecies = getPokemonSpecies(getPokemonSpecies(Utils.randSeedItem(costSpecies)).getTrainerSpeciesForLevel(startingLevel, true, PartyMemberStrength.STRONGER));
starters.push(getDailyRunStarter(scene, starterSpecies, startingLevel));
}
}, 0, seed);

View File

@ -753,98 +753,6 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
]
}
],
[TrainerType.AETHER_GRUNT]: [
{
encounter: [
"dialogue:aether_grunt.encounter.1",
"dialogue:aether_grunt.encounter.2",
"dialogue:aether_grunt.encounter.3",
"dialogue:aether_grunt.encounter.4",
"dialogue:aether_grunt.encounter.5",
],
victory: [
"dialogue:aether_grunt.victory.1",
"dialogue:aether_grunt.victory.2",
"dialogue:aether_grunt.victory.3",
"dialogue:aether_grunt.victory.4",
"dialogue:aether_grunt.victory.5",
]
}
],
[TrainerType.FABA]: [
{
encounter: [
"dialogue:faba.encounter.1",
"dialogue:faba.encounter.2",
"dialogue:faba.encounter.3",
],
victory: [
"dialogue:faba.victory.1",
"dialogue:faba.victory.2",
"dialogue:faba.victory.3",
]
}
],
[TrainerType.SKULL_GRUNT]: [
{
encounter: [
"dialogue:skull_grunt.encounter.1",
"dialogue:skull_grunt.encounter.2",
"dialogue:skull_grunt.encounter.3",
"dialogue:skull_grunt.encounter.4",
"dialogue:skull_grunt.encounter.5",
],
victory: [
"dialogue:skull_grunt.victory.1",
"dialogue:skull_grunt.victory.2",
"dialogue:skull_grunt.victory.3",
"dialogue:skull_grunt.victory.4",
"dialogue:skull_grunt.victory.5",
]
}
],
[TrainerType.PLUMERIA]: [
{
encounter: [
"dialogue:plumeria.encounter.1",
"dialogue:plumeria.encounter.2",
"dialogue:plumeria.encounter.3",
],
victory: [
"dialogue:plumeria.victory.1",
"dialogue:plumeria.victory.2",
"dialogue:plumeria.victory.3",
]
}
],
[TrainerType.MACRO_GRUNT]: [
{
encounter: [
"dialogue:macro_grunt.encounter.1",
"dialogue:macro_grunt.encounter.2",
"dialogue:macro_grunt.encounter.3",
],
victory: [
"dialogue:macro_grunt.victory.1",
"dialogue:macro_grunt.victory.2",
"dialogue:macro_grunt.victory.3",
]
}
],
[TrainerType.OLEANA]: [
{
encounter: [
"dialogue:oleana.encounter.1",
"dialogue:oleana.encounter.2",
"dialogue:oleana.encounter.3",
],
victory: [
"dialogue:oleana.victory.1",
"dialogue:oleana.victory.2",
"dialogue:oleana.victory.3",
]
}
],
[TrainerType.ROCKET_BOSS_GIOVANNI_1]: [
{
encounter: [
@ -1001,84 +909,6 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
]
}
],
[TrainerType.LUSAMINE]: [
{
encounter: [
"dialogue:aether_boss_lusamine_1.encounter.1"
],
victory: [
"dialogue:aether_boss_lusamine_1.victory.1"
],
defeat: [
"dialogue:aether_boss_lusamine_1.defeat.1"
]
}
],
[TrainerType.LUSAMINE_2]: [
{
encounter: [
"dialogue:aether_boss_lusamine_2.encounter.1"
],
victory: [
"dialogue:aether_boss_lusamine_2.victory.1"
],
defeat: [
"dialogue:aether_boss_lusamine_2.defeat.1"
]
}
],
[TrainerType.GUZMA]: [
{
encounter: [
"dialogue:skull_boss_guzma_1.encounter.1"
],
victory: [
"dialogue:skull_boss_guzma_1.victory.1"
],
defeat: [
"dialogue:skull_boss_guzma_1.defeat.1"
]
}
],
[TrainerType.GUZMA_2]: [
{
encounter: [
"dialogue:skull_boss_guzma_2.encounter.1"
],
victory: [
"dialogue:skull_boss_guzma_2.victory.1"
],
defeat: [
"dialogue:skull_boss_guzma_2.defeat.1"
]
}
],
[TrainerType.ROSE]: [
{
encounter: [
"dialogue:macro_boss_rose_1.encounter.1"
],
victory: [
"dialogue:macro_boss_rose_1.victory.1"
],
defeat: [
"dialogue:macro_boss_rose_1.defeat.1"
]
}
],
[TrainerType.ROSE_2]: [
{
encounter: [
"dialogue:macro_boss_rose_2.encounter.1"
],
victory: [
"dialogue:macro_boss_rose_2.victory.1"
],
defeat: [
"dialogue:macro_boss_rose_2.defeat.1"
]
}
],
[TrainerType.BUCK]: [
{
encounter: [

View File

@ -601,13 +601,11 @@ export default class Move implements Localizable {
return true;
}
}
break;
case MoveFlags.IGNORE_PROTECT:
if (user.hasAbilityWithAttr(IgnoreProtectOnContactAbAttr) &&
this.checkFlag(MoveFlags.MAKES_CONTACT, user, target)) {
return true;
}
break;
}
return !!(this.flags & flag);
@ -8570,8 +8568,7 @@ export function initMoves() {
new AttackMove(Moves.BODY_PRESS, Type.FIGHTING, MoveCategory.PHYSICAL, 80, 100, 10, -1, 0, 8)
.attr(DefAtkAttr),
new StatusMove(Moves.DECORATE, Type.FAIRY, -1, 15, -1, 0, 8)
.attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.SPATK ], 2)
.ignoresProtect(),
.attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.SPATK ], 2),
new AttackMove(Moves.DRUM_BEATING, Type.GRASS, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 8)
.attr(StatChangeAttr, BattleStat.SPD, -1)
.makesContact(false),

View File

@ -13,8 +13,6 @@ import { IEggOptions } from "#app/data/egg";
import { EggSourceType } from "#enums/egg-source-types";
import { EggTier } from "#enums/egg-type";
import { PartyHealPhase } from "#app/phases/party-heal-phase";
import { ModifierTier } from "#app/modifier/modifier-tier";
import { modifierTypes } from "#app/modifier/modifier-type";
/** the i18n namespace for the encounter */
const namespace = "mysteryEncounter:aTrainersTest";
@ -138,7 +136,7 @@ export const ATrainersTestEncounter: MysteryEncounter =
},
async (scene: BattleScene) => {
const encounter = scene.currentBattle.mysteryEncounter!;
// Battle the stat trainer for an Egg and great rewards
// Spawn standard trainer battle with memory mushroom reward
const config: EnemyPartyConfig = encounter.enemyPartyConfigs[0];
await transitionMysteryEncounterIntroVisuals(scene);
@ -151,7 +149,7 @@ export const ATrainersTestEncounter: MysteryEncounter =
tier: EggTier.ULTRA
};
encounter.setDialogueToken("eggType", i18next.t(`${namespace}.eggTypes.epic`));
setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [modifierTypes.SACRED_ASH], guaranteedModifierTiers: [ModifierTier.ROGUE, ModifierTier.ULTRA], fillRemaining: true }, [eggOptions]);
setEncounterRewards(scene, { fillRemaining: true }, [eggOptions]);
return initBattleWithEnemyConfig(scene, config);
}

View File

@ -175,7 +175,7 @@ export const AbsoluteAvariceEncounter: MysteryEncounter =
.withOnInit((scene: BattleScene) => {
const encounter = scene.currentBattle.mysteryEncounter!;
scene.loadSe("PRSFX- Bug Bite", "battle_anims", "PRSFX- Bug Bite.wav");
scene.loadSe("PRSFX- Bug Bite", "battle_anims");
scene.loadSe("Follow Me", "battle_anims", "Follow Me.mp3");
// Get all player berry items, remove from party, and store reference
@ -199,7 +199,7 @@ export const AbsoluteAvariceEncounter: MysteryEncounter =
// Overflow berries will be "lost" on the boss, but it's un-catchable anyway
for (let i = 0; i < berryMod.stackCount; i++) {
const modifierType = generateModifierType(scene, modifierTypes.BERRY, [berryMod.berryType]) as PokemonHeldItemModifierType;
bossModifierConfigs.push({ modifier: modifierType });
bossModifierConfigs.push({ modifierType });
}
scene.removeModifier(berryMod);
@ -351,7 +351,7 @@ function doGreedentSpriteSteal(scene: BattleScene) {
const greedentSprites = scene.currentBattle.mysteryEncounter!.introVisuals?.getSpriteAtIndex(1);
scene.playSound("battle_anims/Follow Me");
scene.playSound("battle-anims/Follow Me");
scene.tweens.chain({
targets: greedentSprites,
tweens: [

View File

@ -131,7 +131,7 @@ export const BerriesAboundEncounter: MysteryEncounter =
const doBerryRewards = async () => {
const berryText = numBerries + " " + i18next.t(`${namespace}.berries`);
scene.playSound("item_fanfare");
scene.playSound("bgm/item_fanfare");
queueEncounterMessage(scene, i18next.t("battle:rewardGain", { modifierName: berryText }));
// Generate a random berry and give it to the first Pokemon with room for it
@ -182,7 +182,7 @@ export const BerriesAboundEncounter: MysteryEncounter =
const doBerryRewards = async () => {
const berryText = numBerries + " " + i18next.t(`${namespace}.berries`);
scene.playSound("item_fanfare");
scene.playSound("bgm/item_fanfare");
queueEncounterMessage(scene, i18next.t("battle:rewardGain", { modifierName: berryText }));
// Generate a random berry and give it to the first Pokemon with room for it
@ -208,7 +208,7 @@ export const BerriesAboundEncounter: MysteryEncounter =
const doFasterBerryRewards = async () => {
const berryText = numBerriesGrabbed + " " + i18next.t(`${namespace}.berries`);
scene.playSound("item_fanfare");
scene.playSound("bgm/item_fanfare");
queueEncounterMessage(scene, i18next.t("battle:rewardGain", { modifierName: berryText }));
// Generate a random berry and give it to the first Pokemon with room for it (trying to give to fastest first)

View File

@ -1,5 +1,5 @@
import { EnemyPartyConfig, initBattleWithEnemyConfig, leaveEncounterWithoutBattle, selectPokemonForOption, setEncounterRewards, transitionMysteryEncounterIntroVisuals, } from "#app/data/mystery-encounters/utils/encounter-phase-utils";
import Pokemon, { EnemyPokemon, PlayerPokemon, PokemonMove } from "#app/field/pokemon";
import Pokemon, { PlayerPokemon, PokemonMove } from "#app/field/pokemon";
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
import { Species } from "#enums/species";
import BattleScene from "#app/battle-scene";
@ -88,7 +88,7 @@ export const DancingLessonsEncounter: MysteryEncounter =
.withAutoHideIntroVisuals(false)
.withCatchAllowed(true)
.withOnVisualsStart((scene: BattleScene) => {
const danceAnim = new EncounterBattleAnim(EncounterAnim.DANCE, scene.getEnemyPokemon()!, scene.getParty()[0]);
const danceAnim = new EncounterBattleAnim(EncounterAnim.DANCE, scene.getEnemyPokemon()!, scene.getPlayerPokemon());
danceAnim.play(scene);
return true;
@ -105,8 +105,7 @@ export const DancingLessonsEncounter: MysteryEncounter =
const encounter = scene.currentBattle.mysteryEncounter!;
const species = getPokemonSpecies(Species.ORICORIO);
const level = (scene.currentBattle.enemyLevels?.[0] ?? scene.currentBattle.waveIndex) + Math.max(Math.round((scene.currentBattle.waveIndex / 10)), 0);
const enemyPokemon = new EnemyPokemon(scene, species, level, TrainerSlot.NONE, false);
const enemyPokemon = scene.addEnemyPokemon(species, scene.currentBattle.enemyLevels![0], TrainerSlot.NONE, false);
if (!enemyPokemon.moveset.some(m => m && m.getMove().id === Moves.REVELATION_DANCE)) {
if (enemyPokemon.moveset.length < 4) {
enemyPokemon.moveset.push(new PokemonMove(Moves.REVELATION_DANCE));
@ -131,11 +130,10 @@ export const DancingLessonsEncounter: MysteryEncounter =
}
const oricorioData = new PokemonData(enemyPokemon);
const oricorio = scene.addEnemyPokemon(species, scene.currentBattle.enemyLevels![0], TrainerSlot.NONE, false, oricorioData);
// Adds a real Pokemon sprite to the field (required for the animation)
scene.currentBattle.enemyParty[0] = oricorio;
scene.field.add(oricorio);
scene.currentBattle.enemyParty[0] = enemyPokemon;
scene.field.add(enemyPokemon);
const config: EnemyPartyConfig = {
levelAdditiveMultiplier: 1,
@ -143,11 +141,11 @@ export const DancingLessonsEncounter: MysteryEncounter =
species: species,
dataSource: oricorioData,
isBoss: true,
// Gets +1 to all stats except SPD on battle start
// Gets +1 to all stats on battle start
tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON],
mysteryEncounterBattleEffects: (pokemon: Pokemon) => {
queueEncounterMessage(pokemon.scene, `${namespace}.option.1.boss_enraged`);
pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [BattleStat.ATK, BattleStat.DEF, BattleStat.SPATK, BattleStat.SPDEF], 1));
pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [BattleStat.ATK, BattleStat.DEF, BattleStat.SPATK, BattleStat.SPDEF, BattleStat.SPD], 1));
}
}],
};

View File

@ -12,7 +12,6 @@ import { getRandomPlayerPokemon, getRandomSpeciesByStarterTier } from "#app/data
import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode";
import { ModifierRewardPhase } from "#app/phases/modifier-reward-phase";
import { PokemonFormChangeItemModifier, PokemonHeldItemModifier } from "#app/modifier/modifier";
/** i18n namespace for encounter */
const namespace = "mysteryEncounter:darkDeal";
@ -126,27 +125,25 @@ export const DarkDealEncounter: MysteryEncounter =
// Removes random pokemon (including fainted) from party and adds name to dialogue data tokens
// Will never return last battle able mon and instead pick fainted/unable to battle
const removedPokemon = getRandomPlayerPokemon(scene, false, true);
// Get all the pokemon's held items
const modifiers = removedPokemon.getHeldItems().filter(m => !(m instanceof PokemonFormChangeItemModifier));
scene.removePokemonFromPlayerParty(removedPokemon);
const encounter = scene.currentBattle.mysteryEncounter!;
encounter.setDialogueToken("pokeName", removedPokemon.getNameToRender());
// Store removed pokemon types
encounter.misc = {
removedTypes: removedPokemon.getTypes(),
modifiers
};
encounter.misc = [
removedPokemon.species.type1,
];
if (removedPokemon.species.type2) {
encounter.misc.push(removedPokemon.species.type2);
}
})
.withOptionPhase(async (scene: BattleScene) => {
// Give the player 5 Rogue Balls
const encounter = scene.currentBattle.mysteryEncounter!;
scene.unshiftPhase(new ModifierRewardPhase(scene, modifierTypes.ROGUE_BALL));
// Start encounter with random legendary (7-10 starter strength) that has level additive
const bossTypes: Type[] = encounter.misc.removedTypes;
const bossModifiers: PokemonHeldItemModifier[] = encounter.misc.modifiers;
const bossTypes = scene.currentBattle.mysteryEncounter!.misc as Type[];
// Starter egg tier, 35/50/10/5 %odds for tiers 6/7/8/9+
const roll = randSeedInt(100);
const starterTier: number | [number, number] =
@ -155,11 +152,6 @@ export const DarkDealEncounter: MysteryEncounter =
const pokemonConfig: EnemyPokemonConfig = {
species: bossSpecies,
isBoss: true,
modifierConfigs: bossModifiers.map(m => {
return {
modifier: m
};
})
};
if (!isNullOrUndefined(bossSpecies.forms) && bossSpecies.forms.length > 0) {
pokemonConfig.formIndex = 0;

View File

@ -115,7 +115,7 @@ export const DelibirdyEncounter: MysteryEncounter =
// At max stacks, give the first party pokemon a Shell Bell instead
const shellBell = generateModifierType(scene, modifierTypes.SHELL_BELL) as PokemonHeldItemModifierType;
await applyModifierTypeToPlayerPokemon(scene, scene.getParty()[0], shellBell);
scene.playSound("item_fanfare");
scene.playSound("bgm/item_fanfare");
await showEncounterText(scene, i18next.t("battle:rewardGain", { modifierName: shellBell.name }), undefined, true);
} else {
scene.unshiftPhase(new ModifierRewardPhase(scene, modifierTypes.ABILITY_CHARM));
@ -190,7 +190,7 @@ export const DelibirdyEncounter: MysteryEncounter =
// At max stacks, give the first party pokemon a Shell Bell instead
const shellBell = generateModifierType(scene, modifierTypes.SHELL_BELL) as PokemonHeldItemModifierType;
await applyModifierTypeToPlayerPokemon(scene, scene.getParty()[0], shellBell);
scene.playSound("item_fanfare");
scene.playSound("bgm/item_fanfare");
await showEncounterText(scene, i18next.t("battle:rewardGain", { modifierName: shellBell.name }), undefined, true);
} else {
scene.unshiftPhase(new ModifierRewardPhase(scene, modifierTypes.CANDY_JAR));
@ -203,7 +203,7 @@ export const DelibirdyEncounter: MysteryEncounter =
// At max stacks, give the first party pokemon a Shell Bell instead
const shellBell = generateModifierType(scene, modifierTypes.SHELL_BELL) as PokemonHeldItemModifierType;
await applyModifierTypeToPlayerPokemon(scene, scene.getParty()[0], shellBell);
scene.playSound("item_fanfare");
scene.playSound("bgm/item_fanfare");
await showEncounterText(scene, i18next.t("battle:rewardGain", { modifierName: shellBell.name }), undefined, true);
} else {
scene.unshiftPhase(new ModifierRewardPhase(scene, modifierTypes.HEALING_CHARM));
@ -283,7 +283,7 @@ export const DelibirdyEncounter: MysteryEncounter =
// At max stacks, give the first party pokemon a Shell Bell instead
const shellBell = generateModifierType(scene, modifierTypes.SHELL_BELL) as PokemonHeldItemModifierType;
await applyModifierTypeToPlayerPokemon(scene, scene.getParty()[0], shellBell);
scene.playSound("item_fanfare");
scene.playSound("bgm/item_fanfare");
await showEncounterText(scene, i18next.t("battle:rewardGain", { modifierName: shellBell.name }), undefined, true);
} else {
scene.unshiftPhase(new ModifierRewardPhase(scene, modifierTypes.BERRY_POUCH));

View File

@ -6,7 +6,7 @@ import {
setEncounterRewards
} from "#app/data/mystery-encounters/utils/encounter-phase-utils";
import { STEALING_MOVES } from "#app/data/mystery-encounters/requirements/requirement-groups";
import Pokemon, { EnemyPokemon } from "#app/field/pokemon";
import { EnemyPokemon } from "#app/field/pokemon";
import { ModifierTier } from "#app/modifier/modifier-tier";
import {
getPartyLuckValue,
@ -24,10 +24,6 @@ import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode
import { TrainerSlot } from "#app/data/trainer-config";
import { getSpriteKeysFromPokemon } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils";
import PokemonData from "#app/system/pokemon-data";
import { BattlerTagType } from "#enums/battler-tag-type";
import { queueEncounterMessage } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils";
import { StatChangePhase } from "#app/phases/stat-change-phase";
import { randSeedInt } from "#app/utils";
/** the i18n namespace for the encounter */
const namespace = "mysteryEncounter:fightOrFlight";
@ -62,19 +58,13 @@ export const FightOrFlightEncounter: MysteryEncounter =
level: level,
species: bossSpecies,
dataSource: new PokemonData(bossPokemon),
isBoss: true,
tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON],
mysteryEncounterBattleEffects: (pokemon: Pokemon) => {
queueEncounterMessage(pokemon.scene, `${namespace}.option.1.stat_boost`);
// Randomly boost 1 stat 2 stages
pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [randSeedInt(8)], 2));
}
isBoss: true
}],
};
encounter.enemyPartyConfigs = [config];
// Calculate item
// Waves 10-40 GREAT, 60-120 ULTRA, 120-160 ROGUE, 160-180 MASTER
// 10-40 GREAT, 60-120 ULTRA, 120-160 ROGUE, 160-180 MASTER
const tier =
scene.currentBattle.waveIndex > 160
? ModifierTier.MASTER
@ -132,7 +122,6 @@ export const FightOrFlightEncounter: MysteryEncounter =
},
async (scene: BattleScene) => {
// Pick battle
// Pokemon will randomly boost 1 stat by 2 stages
const item = scene.currentBattle.mysteryEncounter!.misc as ModifierTypeOption;
setEncounterRewards(scene, { guaranteedModifierTypeOptions: [item], fillRemaining: false });
await initBattleWithEnemyConfig(scene, scene.currentBattle.mysteryEncounter!.enemyPartyConfigs[0]);

View File

@ -21,27 +21,18 @@ const namespace = "mysteryEncounter:mysteriousChest";
export const MysteriousChestEncounter: MysteryEncounter =
MysteryEncounterBuilder.withEncounterType(MysteryEncounterType.MYSTERIOUS_CHEST)
.withEncounterTier(MysteryEncounterTier.COMMON)
.withSceneWaveRangeRequirement(10, 180) // waves 10 to 180
.withSceneWaveRangeRequirement(10, 180) // waves 2 to 180
.withAutoHideIntroVisuals(false)
.withIntroSpriteConfigs([
{
spriteKey: "chest_blue",
fileRoot: "mystery-encounters",
hasShadow: true,
y: 8,
yShadow: 6,
alpha: 1,
x: 4,
y: 10,
yShadow: 3,
disableAnimation: true, // Re-enabled after option select
},
{
spriteKey: "chest_red",
fileRoot: "mystery-encounters",
hasShadow: false,
y: 8,
yShadow: 6,
alpha: 0,
disableAnimation: true, // Re-enabled after option select
}
])
.withIntroDialogue([
{
@ -65,30 +56,14 @@ export const MysteriousChestEncounter: MysteryEncounter =
})
.withPreOptionPhase(async (scene: BattleScene) => {
// Play animation
const encounter = scene.currentBattle.mysteryEncounter!;
const introVisuals = encounter.introVisuals!;
// Determine roll first
const roll = randSeedInt(100);
encounter.misc = {
roll
};
if (roll <= 35) {
// Chest is springing trap, change to red chest sprite
const blueChestSprites = introVisuals.getSpriteAtIndex(0);
const redChestSprites = introVisuals.getSpriteAtIndex(1);
redChestSprites[0].setAlpha(1);
blueChestSprites[0].setAlpha(0.001);
}
const introVisuals =
scene.currentBattle.mysteryEncounter!.introVisuals!;
introVisuals.spriteConfigs[0].disableAnimation = false;
introVisuals.spriteConfigs[1].disableAnimation = false;
introVisuals.playAnim();
})
.withOptionPhase(async (scene: BattleScene) => {
// Open the chest
const encounter = scene.currentBattle.mysteryEncounter!;
const roll = encounter.misc.roll;
const roll = randSeedInt(100);
if (roll > 60) {
// Choose between 2 COMMON / 2 GREAT tier items (40%)
setEncounterRewards(scene, {
@ -131,14 +106,14 @@ export const MysteriousChestEncounter: MysteryEncounter =
queueEncounterMessage(scene, `${namespace}.option.1.amazing`);
leaveEncounterWithoutBattle(scene);
} else {
// Your highest level unfainted Pokemon gets OHKO. Progress with no rewards (35%)
// Your highest level unfainted Pok<EFBFBD>mon gets OHKO. Progress with no rewards (35%)
const highestLevelPokemon = getHighestLevelPlayerPokemon(
scene,
true
);
koPlayerPokemon(scene, highestLevelPokemon);
encounter.setDialogueToken("pokeName", highestLevelPokemon.getNameToRender());
scene.currentBattle.mysteryEncounter!.setDialogueToken("pokeName", highestLevelPokemon.getNameToRender());
// Show which Pokemon was KOed, then leave encounter with no rewards
// Does this synchronously so that game over doesn't happen over result message
await showEncounterText(scene, `${namespace}.option.1.bad`);

View File

@ -24,8 +24,6 @@ const namespace = "mysteryEncounter:safariZone";
const TRAINER_THROW_ANIMATION_TIMES = [512, 184, 768];
const SAFARI_MONEY_MULTIPLIER = 2.75;
/**
* Safari Zone encounter.
* @see {@link https://github.com/pagefaultgames/pokerogue/issues/3800 | GitHub Issue #3800}
@ -35,7 +33,7 @@ export const SafariZoneEncounter: MysteryEncounter =
MysteryEncounterBuilder.withEncounterType(MysteryEncounterType.SAFARI_ZONE)
.withEncounterTier(MysteryEncounterTier.GREAT)
.withSceneWaveRangeRequirement(10, 180)
.withSceneRequirement(new MoneyRequirement(0, SAFARI_MONEY_MULTIPLIER)) // Cost equal to 1 Max Revive
.withSceneRequirement(new MoneyRequirement(0, 2.75)) // Cost equal to 1 Max Revive
.withIntroSpriteConfigs([
{
spriteKey: "safari_zone",
@ -55,7 +53,7 @@ export const SafariZoneEncounter: MysteryEncounter =
.withQuery(`${namespace}.query`)
.withOption(MysteryEncounterOptionBuilder
.newOptionWithMode(MysteryEncounterOptionMode.DISABLED_OR_DEFAULT)
.withSceneRequirement(new MoneyRequirement(0, SAFARI_MONEY_MULTIPLIER)) // Cost equal to 1 Max Revive
.withSceneRequirement(new MoneyRequirement(0, 2.75)) // Cost equal to 1 Max Revive
.withDialogue({
buttonLabel: `${namespace}.option.1.label`,
buttonTooltip: `${namespace}.option.1.tooltip`,
@ -74,9 +72,9 @@ export const SafariZoneEncounter: MysteryEncounter =
};
updatePlayerMoney(scene, -(encounter.options[0].requirements[0] as MoneyRequirement).requiredMoney);
// Load bait/mud assets
scene.loadSe("PRSFX- Bug Bite", "battle_anims", "PRSFX- Bug Bite.wav");
scene.loadSe("PRSFX- Sludge Bomb2", "battle_anims", "PRSFX- Sludge Bomb2.wav");
scene.loadSe("PRSFX- Taunt2", "battle_anims", "PRSFX- Taunt2.wav");
scene.loadSe("PRSFX- Bug Bite", "battle_anims");
scene.loadSe("PRSFX- Sludge Bomb2", "battle_anims");
scene.loadSe("PRSFX- Taunt2", "battle_anims");
scene.loadAtlas("bait", "mystery-encounters");
scene.loadAtlas("mud", "mystery-encounters");
await summonSafariPokemon(scene);
@ -353,12 +351,12 @@ async function throwBait(scene: BattleScene, pokemon: EnemyPokemon): Promise<boo
y: originalY - 5,
loop: 6,
onStart: () => {
scene.playSound("battle_anims/PRSFX- Bug Bite");
scene.playSound("battle-anims/PRSFX- Bug Bite");
bait.setFrame("0002.png");
},
onLoop: () => {
if (index % 2 === 0) {
scene.playSound("battle_anims/PRSFX- Bug Bite");
scene.playSound("battle-anims/PRSFX- Bug Bite");
}
if (index === 4) {
bait.setFrame("0003.png");
@ -409,7 +407,7 @@ async function throwMud(scene: BattleScene, pokemon: EnemyPokemon): Promise<bool
duration: 500,
onComplete: () => {
// Mud frame 2
scene.playSound("battle_anims/PRSFX- Sludge Bomb2");
scene.playSound("battle-anims/PRSFX- Sludge Bomb2");
mud.setFrame("0002.png");
// Mud splat
scene.time.delayedCall(200, () => {
@ -435,10 +433,10 @@ async function throwMud(scene: BattleScene, pokemon: EnemyPokemon): Promise<bool
y: originalY - 20,
loop: 1,
onStart: () => {
scene.playSound("battle_anims/PRSFX- Taunt2");
scene.playSound("battle-anims/PRSFX- Taunt2");
},
onLoop: () => {
scene.playSound("battle_anims/PRSFX- Taunt2");
scene.playSound("battle-anims/PRSFX- Taunt2");
},
onComplete: () => {
resolve(true);

View File

@ -6,7 +6,7 @@ import MysteryEncounter, { MysteryEncounterBuilder } from "../mystery-encounter"
import { getPokemonSpecies } from "#app/data/pokemon-species";
import { Species } from "#enums/species";
import { Nature } from "#app/data/nature";
import Pokemon, { PokemonMove } from "#app/field/pokemon";
import Pokemon, { PlayerPokemon, PokemonMove } from "#app/field/pokemon";
import { queueEncounterMessage, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils";
import { modifyPlayerPokemonBST } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils";
import { Moves } from "#enums/moves";
@ -30,7 +30,6 @@ export const TheStrongStuffEncounter: MysteryEncounter =
MysteryEncounterBuilder.withEncounterType(MysteryEncounterType.THE_STRONG_STUFF)
.withEncounterTier(MysteryEncounterTier.COMMON)
.withSceneWaveRangeRequirement(10, 180) // waves 10 to 180
.withScenePartySizeRequirement(3, 6) // Must have at least 3 pokemon in party
.withHideWildIntroMessage(true)
.withAutoHideIntroVisuals(false)
.withIntroSpriteConfigs([
@ -77,16 +76,16 @@ export const TheStrongStuffEncounter: MysteryEncounter =
moveSet: [Moves.INFESTATION, Moves.SALT_CURE, Moves.GASTRO_ACID, Moves.HEAL_ORDER],
modifierConfigs: [
{
modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.SITRUS]) as PokemonHeldItemModifierType
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.SITRUS]) as PokemonHeldItemModifierType
},
{
modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.APICOT]) as PokemonHeldItemModifierType
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.APICOT]) as PokemonHeldItemModifierType
},
{
modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.GANLON]) as PokemonHeldItemModifierType
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.GANLON]) as PokemonHeldItemModifierType
},
{
modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.LUM]) as PokemonHeldItemModifierType,
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.LUM]) as PokemonHeldItemModifierType,
stackCount: 2
}
],
@ -125,21 +124,35 @@ export const TheStrongStuffEncounter: MysteryEncounter =
transitionMysteryEncounterIntroVisuals(scene, true, true, 50);
});
// -15 to all base stats of highest BST (halved for HP), +10 to all base stats of rest of party (halved for HP)
// Sort party by bst (inverted to pop 2 highest off end)
const sortedParty = scene.getParty().slice(0)
.sort((pokemon1, pokemon2) => {
const pokemon1Bst = pokemon1.calculateBaseStats().reduce((a, b) => a + b, 0);
const pokemon2Bst = pokemon2.calculateBaseStats().reduce((a, b) => a + b, 0);
return pokemon1Bst - pokemon2Bst;
});
// -20 to all base stats of highest BST, +10 to all base stats of rest of party
// Get highest BST mon
const party = scene.getParty();
let highestBst: PlayerPokemon | null = null;
let statTotal = 0;
for (const pokemon of party) {
if (!highestBst) {
highestBst = pokemon;
statTotal = pokemon.getSpeciesForm().getBaseStatTotal();
continue;
}
const total = pokemon.getSpeciesForm().getBaseStatTotal();
if (total > statTotal) {
highestBst = pokemon;
statTotal = total;
}
}
if (!highestBst) {
highestBst = party[0];
}
modifyPlayerPokemonBST(highestBst, -20);
for (const pokemon of party) {
if (highestBst.id === pokemon.id) {
continue;
}
const highestBst = sortedParty.pop()!;
const highestBst2 = sortedParty.pop()!;
modifyPlayerPokemonBST(highestBst, -15);
modifyPlayerPokemonBST(highestBst2, -15);
// +10 for the rest
for (const pokemon of sortedParty) {
modifyPlayerPokemonBST(pokemon, 10);
}

View File

@ -32,7 +32,7 @@ const namespace = "mysteryEncounter:theWinstrateChallenge";
export const TheWinstrateChallengeEncounter: MysteryEncounter =
MysteryEncounterBuilder.withEncounterType(MysteryEncounterType.THE_WINSTRATE_CHALLENGE)
.withEncounterTier(MysteryEncounterTier.ROGUE)
.withSceneWaveRangeRequirement(100, 180)
.withSceneWaveRangeRequirement(80, 180)
.withIntroSpriteConfigs([
{
spriteKey: "vito",
@ -221,11 +221,11 @@ function getVictorTrainerConfig(scene: BattleScene): EnemyPartyConfig {
moveSet: [Moves.FACADE, Moves.BRAVE_BIRD, Moves.PROTECT, Moves.QUICK_ATTACK],
modifierConfigs: [
{
modifier: generateModifierType(scene, modifierTypes.FLAME_ORB) as PokemonHeldItemModifierType,
modifierType: generateModifierType(scene, modifierTypes.FLAME_ORB) as PokemonHeldItemModifierType,
isTransferable: false
},
{
modifier: generateModifierType(scene, modifierTypes.FOCUS_BAND) as PokemonHeldItemModifierType,
modifierType: generateModifierType(scene, modifierTypes.FOCUS_BAND) as PokemonHeldItemModifierType,
stackCount: 2,
isTransferable: false
},
@ -239,11 +239,11 @@ function getVictorTrainerConfig(scene: BattleScene): EnemyPartyConfig {
moveSet: [Moves.FACADE, Moves.OBSTRUCT, Moves.NIGHT_SLASH, Moves.FIRE_PUNCH],
modifierConfigs: [
{
modifier: generateModifierType(scene, modifierTypes.FLAME_ORB) as PokemonHeldItemModifierType,
modifierType: generateModifierType(scene, modifierTypes.FLAME_ORB) as PokemonHeldItemModifierType,
isTransferable: false
},
{
modifier: generateModifierType(scene, modifierTypes.LEFTOVERS) as PokemonHeldItemModifierType,
modifierType: generateModifierType(scene, modifierTypes.LEFTOVERS) as PokemonHeldItemModifierType,
stackCount: 2,
isTransferable: false
}
@ -265,11 +265,11 @@ function getVictoriaTrainerConfig(scene: BattleScene): EnemyPartyConfig {
moveSet: [Moves.SYNTHESIS, Moves.SLUDGE_BOMB, Moves.GIGA_DRAIN, Moves.SLEEP_POWDER],
modifierConfigs: [
{
modifier: generateModifierType(scene, modifierTypes.SOUL_DEW) as PokemonHeldItemModifierType,
modifierType: generateModifierType(scene, modifierTypes.SOUL_DEW) as PokemonHeldItemModifierType,
isTransferable: false
},
{
modifier: generateModifierType(scene, modifierTypes.QUICK_CLAW) as PokemonHeldItemModifierType,
modifierType: generateModifierType(scene, modifierTypes.QUICK_CLAW) as PokemonHeldItemModifierType,
stackCount: 2,
isTransferable: false
}
@ -283,12 +283,12 @@ function getVictoriaTrainerConfig(scene: BattleScene): EnemyPartyConfig {
moveSet: [Moves.PSYSHOCK, Moves.MOONBLAST, Moves.SHADOW_BALL, Moves.WILL_O_WISP],
modifierConfigs: [
{
modifier: generateModifierType(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [Type.PSYCHIC]) as PokemonHeldItemModifierType,
modifierType: generateModifierType(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [Type.PSYCHIC]) as PokemonHeldItemModifierType,
stackCount: 1,
isTransferable: false
},
{
modifier: generateModifierType(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [Type.FAIRY]) as PokemonHeldItemModifierType,
modifierType: generateModifierType(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [Type.FAIRY]) as PokemonHeldItemModifierType,
stackCount: 1,
isTransferable: false
}
@ -310,12 +310,12 @@ function getViviTrainerConfig(scene: BattleScene): EnemyPartyConfig {
moveSet: [Moves.WATERFALL, Moves.MEGAHORN, Moves.KNOCK_OFF, Moves.REST],
modifierConfigs: [
{
modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.LUM]) as PokemonHeldItemModifierType,
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.LUM]) as PokemonHeldItemModifierType,
stackCount: 2,
isTransferable: false
},
{
modifier: generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER, [Stat.HP]) as PokemonHeldItemModifierType,
modifierType: generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER, [Stat.HP]) as PokemonHeldItemModifierType,
stackCount: 4,
isTransferable: false
}
@ -329,12 +329,12 @@ function getViviTrainerConfig(scene: BattleScene): EnemyPartyConfig {
moveSet: [Moves.SPORE, Moves.SWORDS_DANCE, Moves.SEED_BOMB, Moves.DRAIN_PUNCH],
modifierConfigs: [
{
modifier: generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER, [Stat.HP]) as PokemonHeldItemModifierType,
modifierType: generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER, [Stat.HP]) as PokemonHeldItemModifierType,
stackCount: 4,
isTransferable: false
},
{
modifier: generateModifierType(scene, modifierTypes.TOXIC_ORB) as PokemonHeldItemModifierType,
modifierType: generateModifierType(scene, modifierTypes.TOXIC_ORB) as PokemonHeldItemModifierType,
isTransferable: false
}
]
@ -347,7 +347,7 @@ function getViviTrainerConfig(scene: BattleScene): EnemyPartyConfig {
moveSet: [Moves.EARTH_POWER, Moves.FIRE_BLAST, Moves.YAWN, Moves.PROTECT],
modifierConfigs: [
{
modifier: generateModifierType(scene, modifierTypes.QUICK_CLAW) as PokemonHeldItemModifierType,
modifierType: generateModifierType(scene, modifierTypes.QUICK_CLAW) as PokemonHeldItemModifierType,
stackCount: 3,
isTransferable: false
},
@ -369,7 +369,7 @@ function getVickyTrainerConfig(scene: BattleScene): EnemyPartyConfig {
moveSet: [Moves.AXE_KICK, Moves.ICE_PUNCH, Moves.ZEN_HEADBUTT, Moves.BULLET_PUNCH],
modifierConfigs: [
{
modifier: generateModifierType(scene, modifierTypes.SHELL_BELL) as PokemonHeldItemModifierType,
modifierType: generateModifierType(scene, modifierTypes.SHELL_BELL) as PokemonHeldItemModifierType,
isTransferable: false
}
]
@ -390,7 +390,7 @@ function getVitoTrainerConfig(scene: BattleScene): EnemyPartyConfig {
moveSet: [Moves.THUNDERBOLT, Moves.GIGA_DRAIN, Moves.FOUL_PLAY, Moves.THUNDER_WAVE],
modifierConfigs: [
{
modifier: generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER, [Stat.SPD]) as PokemonHeldItemModifierType,
modifierType: generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER, [Stat.SPD]) as PokemonHeldItemModifierType,
stackCount: 2,
isTransferable: false
}
@ -404,47 +404,47 @@ function getVitoTrainerConfig(scene: BattleScene): EnemyPartyConfig {
moveSet: [Moves.SLUDGE_BOMB, Moves.GIGA_DRAIN, Moves.ICE_BEAM, Moves.EARTHQUAKE],
modifierConfigs: [
{
modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.SITRUS]) as PokemonHeldItemModifierType,
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.SITRUS]) as PokemonHeldItemModifierType,
stackCount: 2,
},
{
modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.APICOT]) as PokemonHeldItemModifierType,
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.APICOT]) as PokemonHeldItemModifierType,
stackCount: 2,
},
{
modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.GANLON]) as PokemonHeldItemModifierType,
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.GANLON]) as PokemonHeldItemModifierType,
stackCount: 2,
},
{
modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.STARF]) as PokemonHeldItemModifierType,
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.STARF]) as PokemonHeldItemModifierType,
stackCount: 2,
},
{
modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.SALAC]) as PokemonHeldItemModifierType,
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.SALAC]) as PokemonHeldItemModifierType,
stackCount: 2,
},
{
modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.LUM]) as PokemonHeldItemModifierType,
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.LUM]) as PokemonHeldItemModifierType,
stackCount: 2,
},
{
modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.LANSAT]) as PokemonHeldItemModifierType,
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.LANSAT]) as PokemonHeldItemModifierType,
stackCount: 2,
},
{
modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.LIECHI]) as PokemonHeldItemModifierType,
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.LIECHI]) as PokemonHeldItemModifierType,
stackCount: 2,
},
{
modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.PETAYA]) as PokemonHeldItemModifierType,
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.PETAYA]) as PokemonHeldItemModifierType,
stackCount: 2,
},
{
modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.ENIGMA]) as PokemonHeldItemModifierType,
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.ENIGMA]) as PokemonHeldItemModifierType,
stackCount: 2,
},
{
modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.LEPPA]) as PokemonHeldItemModifierType,
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.LEPPA]) as PokemonHeldItemModifierType,
stackCount: 2,
}
]
@ -457,7 +457,7 @@ function getVitoTrainerConfig(scene: BattleScene): EnemyPartyConfig {
moveSet: [Moves.DRILL_PECK, Moves.QUICK_ATTACK, Moves.THRASH, Moves.KNOCK_OFF],
modifierConfigs: [
{
modifier: generateModifierType(scene, modifierTypes.KINGS_ROCK) as PokemonHeldItemModifierType,
modifierType: generateModifierType(scene, modifierTypes.KINGS_ROCK) as PokemonHeldItemModifierType,
stackCount: 2,
isTransferable: false
}
@ -471,7 +471,7 @@ function getVitoTrainerConfig(scene: BattleScene): EnemyPartyConfig {
moveSet: [Moves.PSYCHIC, Moves.SHADOW_BALL, Moves.FOCUS_BLAST, Moves.THUNDERBOLT],
modifierConfigs: [
{
modifier: generateModifierType(scene, modifierTypes.WIDE_LENS) as PokemonHeldItemModifierType,
modifierType: generateModifierType(scene, modifierTypes.WIDE_LENS) as PokemonHeldItemModifierType,
stackCount: 2,
isTransferable: false
},
@ -485,7 +485,7 @@ function getVitoTrainerConfig(scene: BattleScene): EnemyPartyConfig {
moveSet: [Moves.EARTHQUAKE, Moves.U_TURN, Moves.FLARE_BLITZ, Moves.ROCK_SLIDE],
modifierConfigs: [
{
modifier: generateModifierType(scene, modifierTypes.QUICK_CLAW) as PokemonHeldItemModifierType,
modifierType: generateModifierType(scene, modifierTypes.QUICK_CLAW) as PokemonHeldItemModifierType,
stackCount: 2,
isTransferable: false
},

View File

@ -4,7 +4,7 @@ import { getNatureName, Nature } from "#app/data/nature";
import { speciesStarters } from "#app/data/pokemon-species";
import { getStatName } from "#app/data/pokemon-stat";
import Pokemon, { PlayerPokemon } from "#app/field/pokemon";
import { PokemonFormChangeItemModifier, PokemonHeldItemModifier } from "#app/modifier/modifier";
import { PokemonHeldItemModifier } from "#app/modifier/modifier";
import { AbilityAttr } from "#app/system/game-data";
import PokemonData from "#app/system/pokemon-data";
import { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler";
@ -247,10 +247,9 @@ export const TrainingSessionEncounter: MysteryEncounter =
playerPokemon.setNature(encounter.misc.chosenNature);
scene.gameData.setPokemonCaught(playerPokemon, false);
// Add pokemon and modifiers back
// Add pokemon and mods back
scene.getParty().push(playerPokemon);
for (const mod of modifiers.value) {
mod.pokemonId = playerPokemon.id;
scene.addModifier(mod, true, false, false, true);
}
scene.updateModifiers(true);
@ -386,10 +385,10 @@ function getEnemyConfig(scene: BattleScene, playerPokemon: PlayerPokemon, segmen
playerPokemon.resetSummonData();
// Passes modifiers by reference
modifiers.value = playerPokemon.getHeldItems().filter(m => !(m instanceof PokemonFormChangeItemModifier));
modifiers.value = scene.findModifiers((m) => m instanceof PokemonHeldItemModifier && (m as PokemonHeldItemModifier).pokemonId === playerPokemon.id) as PokemonHeldItemModifier[];
const modifierConfigs = modifiers.value.map((mod) => {
return {
modifier: mod
modifierType: mod.type
};
}) as HeldModifierConfig[];

View File

@ -31,7 +31,7 @@ const SOUND_EFFECT_WAIT_TIME = 700;
export const TrashToTreasureEncounter: MysteryEncounter =
MysteryEncounterBuilder.withEncounterType(MysteryEncounterType.TRASH_TO_TREASURE)
.withEncounterTier(MysteryEncounterTier.ULTRA)
.withSceneWaveRangeRequirement(60, 180)
.withSceneWaveRangeRequirement(10, 180)
.withMaxAllowedEncounters(1)
.withIntroSpriteConfigs([
{
@ -177,7 +177,7 @@ async function tryApplyDigRewardItems(scene: BattleScene) {
}
}
scene.playSound("item_fanfare");
scene.playSound("bgm/item_fanfare");
await showEncounterText(scene, i18next.t("battle:rewardGain", { modifierName: "2 " + leftovers.name }), undefined, true);
// First Shell bell
@ -204,17 +204,17 @@ async function tryApplyDigRewardItems(scene: BattleScene) {
}
}
scene.playSound("item_fanfare");
scene.playSound("bgm/item_fanfare");
await showEncounterText(scene, i18next.t("battle:rewardGain", { modifierName: "2 " + shellBell.name }), undefined, true);
}
async function doGarbageDig(scene: BattleScene) {
scene.playSound("battle_anims/PRSFX- Dig2");
scene.playSound("battle-anims/PRSFX- Dig2");
scene.time.delayedCall(SOUND_EFFECT_WAIT_TIME, () => {
scene.playSound("battle_anims/PRSFX- Dig2");
scene.playSound("battle_anims/PRSFX- Venom Drench", { volume: 2 });
scene.playSound("battle-anims/PRSFX- Dig2");
scene.playSound("battle-anims/PRSFX- Venom Drench", { volume: 2 });
});
scene.time.delayedCall(SOUND_EFFECT_WAIT_TIME * 2, () => {
scene.playSound("battle_anims/PRSFX- Dig2");
scene.playSound("battle-anims/PRSFX- Dig2");
});
}

View File

@ -1,265 +0,0 @@
import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option";
import { EnemyPartyConfig, initBattleWithEnemyConfig, leaveEncounterWithoutBattle, setEncounterExp, setEncounterRewards } from "#app/data/mystery-encounters/utils/encounter-phase-utils";
import { CHARMING_MOVES } from "#app/data/mystery-encounters/requirements/requirement-groups";
import Pokemon, { EnemyPokemon, PokemonMove } from "#app/field/pokemon";
import { getPartyLuckValue } from "#app/modifier/modifier-type";
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
import BattleScene from "#app/battle-scene";
import MysteryEncounter, { MysteryEncounterBuilder } from "../mystery-encounter";
import { MoveRequirement, PersistentModifierRequirement } from "../mystery-encounter-requirements";
import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode";
import { TrainerSlot } from "#app/data/trainer-config";
import { catchPokemon, getHighestLevelPlayerPokemon, getSpriteKeysFromPokemon } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils";
import PokemonData from "#app/system/pokemon-data";
import { speciesEggMoves } from "#app/data/egg-moves";
import { isNullOrUndefined, randSeedInt } from "#app/utils";
import { Moves } from "#enums/moves";
import { BattlerIndex } from "#app/battle";
import { SelfStatusMove } from "#app/data/move";
import { PokeballType } from "#enums/pokeball";
import { BattlerTagType } from "#enums/battler-tag-type";
import { queueEncounterMessage } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils";
import { StatChangePhase } from "#app/phases/stat-change-phase";
import { BattleStat } from "#app/data/battle-stat";
import { BerryModifier } from "#app/modifier/modifier";
/** the i18n namespace for the encounter */
const namespace = "mysteryEncounter:uncommonBreed";
/**
* Uncommon Breed encounter.
* @see {@link https://github.com/pagefaultgames/pokerogue/issues/3811 | GitHub Issue #3811}
* @see For biome requirements check {@linkcode mysteryEncountersByBiome}
*/
export const UncommonBreedEncounter: MysteryEncounter =
MysteryEncounterBuilder.withEncounterType(MysteryEncounterType.UNCOMMON_BREED)
.withEncounterTier(MysteryEncounterTier.COMMON)
.withSceneWaveRangeRequirement(10, 180) // waves 10 to 180
.withCatchAllowed(true)
.withHideWildIntroMessage(true)
.withIntroSpriteConfigs([]) // Set in onInit()
.withIntroDialogue([
{
text: `${namespace}.intro`,
},
])
.withOnInit((scene: BattleScene) => {
const encounter = scene.currentBattle.mysteryEncounter!;
// Calculate boss mon
// Level equal to 2 below highest party member
const level = getHighestLevelPlayerPokemon(scene).level - 2;
const species = scene.arena.randomSpecies(scene.currentBattle.waveIndex, level, 0, getPartyLuckValue(scene.getParty()), true);
const pokemon = new EnemyPokemon(scene, species, level, TrainerSlot.NONE, true);
const speciesRootForm = pokemon.species.getRootSpeciesId();
encounter.misc = {
pokemon
};
// Pokemon will always have one of its egg moves in its moveset
if (speciesEggMoves.hasOwnProperty(speciesRootForm)) {
const eggMoves: Moves[] = speciesEggMoves[speciesRootForm];
const eggMoveIndex = randSeedInt(4);
const randomEggMove: Moves = eggMoves[eggMoveIndex];
encounter.misc.eggMove = randomEggMove;
if (pokemon.moveset.length < 4) {
pokemon.moveset.push(new PokemonMove(randomEggMove));
} else {
pokemon.moveset[0] = new PokemonMove(randomEggMove);
}
}
const config: EnemyPartyConfig = {
pokemonConfigs: [{
level: level,
species: species,
dataSource: new PokemonData(pokemon),
isBoss: false,
tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON],
mysteryEncounterBattleEffects: (pokemon: Pokemon) => {
queueEncounterMessage(pokemon.scene, `${namespace}.option.1.stat_boost`);
pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [BattleStat.ATK, BattleStat.DEF, BattleStat.SPATK, BattleStat.SPDEF, BattleStat.SPD], 1));
}
}],
};
encounter.enemyPartyConfigs = [config];
const { spriteKey, fileRoot } = getSpriteKeysFromPokemon(pokemon);
encounter.spriteConfigs = [
{
spriteKey: spriteKey,
fileRoot: fileRoot,
hasShadow: true,
x: -5,
repeat: true,
isPokemon: true
},
];
encounter.setDialogueToken("enemyPokemon", pokemon.getNameToRender());
scene.loadSe("PRSFX- Spotlight2", "battle_anims", "PRSFX- Spotlight2.wav");
return true;
})
.withOnVisualsStart((scene: BattleScene) => {
// Animate the pokemon
const encounter = scene.currentBattle.mysteryEncounter!;
const pokemonSprite = encounter.introVisuals!.getSprites();
scene.tweens.add({ // Bounce at the end
targets: pokemonSprite,
duration: 300,
ease: "Cubic.easeOut",
yoyo: true,
y: "-=20",
loop: 1,
});
scene.time.delayedCall(500, () => scene.playSound("battle_anims/PRSFX- Spotlight2"));
return true;
})
.withTitle(`${namespace}.title`)
.withDescription(`${namespace}.description`)
.withQuery(`${namespace}.query`)
.withSimpleOption(
{
buttonLabel: `${namespace}.option.1.label`,
buttonTooltip: `${namespace}.option.1.tooltip`,
selected: [
{
text: `${namespace}.option.1.selected`,
},
],
},
async (scene: BattleScene) => {
// Pick battle
const encounter = scene.currentBattle.mysteryEncounter!;
const eggMove = encounter.misc.eggMove;
if (!isNullOrUndefined(eggMove)) {
// Check what type of move the egg move is to determine target
const pokemonMove = new PokemonMove(eggMove);
const move = pokemonMove.getMove();
const target = move instanceof SelfStatusMove ? BattlerIndex.ENEMY : BattlerIndex.PLAYER;
encounter.startOfBattleEffects.push(
{
sourceBattlerIndex: BattlerIndex.ENEMY,
targets: [target],
move: pokemonMove,
ignorePp: true
});
}
setEncounterRewards(scene, { fillRemaining: true });
await initBattleWithEnemyConfig(scene, encounter.enemyPartyConfigs[0]);
}
)
.withOption(
MysteryEncounterOptionBuilder
.newOptionWithMode(MysteryEncounterOptionMode.DISABLED_OR_SPECIAL)
.withSceneRequirement(new PersistentModifierRequirement("BerryModifier", 4)) // Will set option2PrimaryName and option2PrimaryMove dialogue tokens automatically
.withDialogue({
buttonLabel: `${namespace}.option.2.label`,
buttonTooltip: `${namespace}.option.2.tooltip`,
disabledButtonTooltip: `${namespace}.option.2.disabled_tooltip`,
selected: [
{
text: `${namespace}.option.2.selected`
}
]
})
.withOptionPhase(async (scene: BattleScene) => {
// Give it some food
// Remove 4 random berries from player's party
// Get all player berry items, remove from party, and store reference
let berryItems: BerryModifier[] = scene.findModifiers(m => m instanceof BerryModifier) as BerryModifier[];
for (let i = 0; i < 4; i++) {
berryItems = scene.findModifiers(m => m instanceof BerryModifier) as BerryModifier[];
const randBerry = berryItems[randSeedInt(berryItems.length)];
randBerry.stackCount--;
if (randBerry.stackCount === 0) {
scene.removeModifier(randBerry);
}
scene.updateModifiers(true, true);
}
// Pokemon joins the team, with 2 egg moves
const encounter = scene.currentBattle.mysteryEncounter!;
const pokemon = encounter.misc.pokemon;
// Give 1 additional egg move
const previousEggMove = encounter.misc.eggMove;
const speciesRootForm = pokemon.species.getRootSpeciesId();
if (speciesEggMoves.hasOwnProperty(speciesRootForm)) {
const eggMoves: Moves[] = speciesEggMoves[speciesRootForm];
let randomEggMove: Moves = eggMoves[randSeedInt(4)];
while (randomEggMove === previousEggMove) {
randomEggMove = eggMoves[randSeedInt(4)];
}
if (pokemon.moveset.length < 4) {
pokemon.moveset.push(new PokemonMove(randomEggMove));
} else {
pokemon.moveset[1] = new PokemonMove(randomEggMove);
}
}
await catchPokemon(scene, pokemon, null, PokeballType.POKEBALL, false);
setEncounterRewards(scene, { fillRemaining: true });
leaveEncounterWithoutBattle(scene);
})
.build()
)
.withOption(
MysteryEncounterOptionBuilder
.newOptionWithMode(MysteryEncounterOptionMode.DISABLED_OR_SPECIAL)
.withPrimaryPokemonRequirement(new MoveRequirement(CHARMING_MOVES)) // Will set option2PrimaryName and option2PrimaryMove dialogue tokens automatically
.withDialogue({
buttonLabel: `${namespace}.option.3.label`,
buttonTooltip: `${namespace}.option.3.tooltip`,
disabledButtonTooltip: `${namespace}.option.3.disabled_tooltip`,
selected: [
{
text: `${namespace}.option.3.selected`
}
]
})
.withOptionPhase(async (scene: BattleScene) => {
// Attract the pokemon with a move
// Pokemon joins the team, with 2 egg moves and IVs rolled an additional time
const encounter = scene.currentBattle.mysteryEncounter!;
const pokemon = encounter.misc.pokemon;
// Give 1 additional egg move
const previousEggMove = encounter.misc.eggMove;
const speciesRootForm = pokemon.species.getRootSpeciesId();
if (speciesEggMoves.hasOwnProperty(speciesRootForm)) {
const eggMoves: Moves[] = speciesEggMoves[speciesRootForm];
let randomEggMove: Moves = eggMoves[randSeedInt(4)];
while (randomEggMove === previousEggMove) {
randomEggMove = eggMoves[randSeedInt(4)];
}
if (pokemon.moveset.length < 4) {
pokemon.moveset.push(new PokemonMove(randomEggMove));
} else {
pokemon.moveset[1] = new PokemonMove(randomEggMove);
}
}
// Roll IVs a second time
pokemon.ivs = pokemon.ivs.map(iv => {
const newValue = randSeedInt(31);
return newValue > iv ? newValue : iv;
});
await catchPokemon(scene, pokemon, null, PokeballType.POKEBALL, false);
if (encounter.selectedOption?.primaryPokemon?.id) {
setEncounterExp(scene, encounter.selectedOption.primaryPokemon.id, pokemon.getExpValue(), false);
}
setEncounterRewards(scene, { fillRemaining: true });
leaveEncounterWithoutBattle(scene);
})
.build()
)
.build();

View File

@ -94,7 +94,6 @@ const STANDARD_BST_TRANSFORM_BASE_VALUES = [40, 50];
export const WeirdDreamEncounter: MysteryEncounter =
MysteryEncounterBuilder.withEncounterType(MysteryEncounterType.WEIRD_DREAM)
.withEncounterTier(MysteryEncounterTier.ROGUE)
.withSceneWaveRangeRequirement(10, 180)
.withIntroSpriteConfigs([
{
spriteKey: "girawitch",
@ -112,6 +111,7 @@ export const WeirdDreamEncounter: MysteryEncounter =
text: `${namespace}.intro_dialogue`,
},
])
.withSceneWaveRangeRequirement(10, 180)
.withTitle(`${namespace}.title`)
.withDescription(`${namespace}.description`)
.withQuery(`${namespace}.query`)

View File

@ -29,7 +29,6 @@ import { TheWinstrateChallengeEncounter } from "#app/data/mystery-encounters/enc
import { TeleportingHijinksEncounter } from "#app/data/mystery-encounters/encounters/teleporting-hijinks-encounter";
import { BugTypeSuperfanEncounter } from "#app/data/mystery-encounters/encounters/bug-type-superfan-encounter";
import { FunAndGamesEncounter } from "#app/data/mystery-encounters/encounters/fun-and-games-encounter";
import { UncommonBreedEncounter } from "#app/data/mystery-encounters/encounters/uncommon-breed-encounter";
// Spawn chance: (BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT + WIGHT_INCREMENT_ON_SPAWN_MISS * <number of missed spawns>) / 256
export const BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT = 1;
@ -176,8 +175,7 @@ const anyBiomeEncounters: MysteryEncounterType[] = [
MysteryEncounterType.CLOWNING_AROUND,
MysteryEncounterType.WEIRD_DREAM,
MysteryEncounterType.TELEPORTING_HIJINKS,
MysteryEncounterType.BUG_TYPE_SUPERFAN,
MysteryEncounterType.UNCOMMON_BREED
MysteryEncounterType.BUG_TYPE_SUPERFAN
];
/**
@ -284,7 +282,6 @@ export function initMysteryEncounters() {
allMysteryEncounters[MysteryEncounterType.TELEPORTING_HIJINKS] = TeleportingHijinksEncounter;
allMysteryEncounters[MysteryEncounterType.BUG_TYPE_SUPERFAN] = BugTypeSuperfanEncounter;
allMysteryEncounters[MysteryEncounterType.FUN_AND_GAMES] = FunAndGamesEncounter;
allMysteryEncounters[MysteryEncounterType.UNCOMMON_BREED] = UncommonBreedEncounter;
// Add extreme encounters to biome map
extremeBiomeEncounters.forEach(encounter => {

View File

@ -886,7 +886,7 @@ export function handleMysteryEncounterBattleStartEffects(scene: BattleScene) {
/**
* Can queue extra phases or logic during {@link TurnInitPhase}
* Should mostly just be used for injecting custom phases into the battle system on turn start
* Mostly useful for allowing MysteryEncounter enemies to "cheat" and use moves before the first turn
* @param scene
* @return boolean - if true, will skip the remainder of the {@link TurnInitPhase}
*/

View File

@ -1582,8 +1582,7 @@ export const pokemonEvolutions: PokemonEvolutions = {
new SpeciesEvolution(Species.BLISSEY, 1, null, new SpeciesFriendshipEvolutionCondition(200), SpeciesWildEvolutionDelay.LONG)
],
[Species.PICHU]: [
new SpeciesFormEvolution(Species.PIKACHU, "spiky", "partner", 1, null, new SpeciesFriendshipEvolutionCondition(90), SpeciesWildEvolutionDelay.SHORT),
new SpeciesFormEvolution(Species.PIKACHU, "", "", 1, null, new SpeciesFriendshipEvolutionCondition(90), SpeciesWildEvolutionDelay.SHORT),
new SpeciesEvolution(Species.PIKACHU, 1, null, new SpeciesFriendshipEvolutionCondition(90), SpeciesWildEvolutionDelay.SHORT)
],
[Species.CLEFFA]: [
new SpeciesEvolution(Species.CLEFAIRY, 1, null, new SpeciesFriendshipEvolutionCondition(160), SpeciesWildEvolutionDelay.SHORT)

View File

@ -1,21 +1,24 @@
import { Localizable } from "#app/interfaces/locales";
import { Abilities } from "#enums/abilities";
import { PartyMemberStrength } from "#enums/party-member-strength";
import { Species } from "#enums/species";
import { QuantizerCelebi, argbFromRgba, rgbaFromArgb } from "@material/material-color-utilities";
import i18next from "i18next";
import BattleScene, { AnySound } from "../battle-scene";
import { GameMode } from "../game-mode";
import { StarterMoveset } from "../system/game-data";
import * as Utils from "../utils";
import { uncatchableSpecies } from "./biomes";
import { speciesEggMoves } from "./egg-moves";
import { Variant, variantColorCache } from "./variant";
import { variantData } from "./variant";
import { GrowthRate } from "./exp";
import { EvolutionLevel, SpeciesWildEvolutionDelay, pokemonEvolutions, pokemonPrevolutions } from "./pokemon-evolutions";
import { Type } from "./type";
import { LevelMoves, pokemonFormLevelMoves, pokemonFormLevelMoves as pokemonSpeciesFormLevelMoves, pokemonSpeciesLevelMoves } from "./pokemon-level-moves";
import { uncatchableSpecies } from "./biomes";
import * as Utils from "../utils";
import { StarterMoveset } from "../system/game-data";
import { speciesEggMoves } from "./egg-moves";
import { GameMode } from "../game-mode";
import { QuantizerCelebi, argbFromRgba, rgbaFromArgb } from "@material/material-color-utilities";
import { VariantSet } from "./variant";
import i18next from "i18next";
import { Localizable } from "#app/interfaces/locales";
import { Stat } from "./pokemon-stat";
import { Variant, VariantSet, variantColorCache, variantData } from "./variant";
import { Abilities } from "#enums/abilities";
import { PartyMemberStrength } from "#enums/party-member-strength";
import { Species } from "#enums/species";
export enum Region {
NORMAL,
@ -25,15 +28,7 @@ export enum Region {
PALDEA
}
/**
* Gets the {@linkcode PokemonSpecies} object associated with the {@linkcode Species} enum given
* @param species The species to fetch
* @returns The associated {@linkcode PokemonSpecies} object
*/
export function getPokemonSpecies(species: Species | Species[] | undefined): PokemonSpecies {
if (!species) {
throw new Error("`species` must not be undefined in `getPokemonSpecies()`");
}
export function getPokemonSpecies(species: Species | Species[]): PokemonSpecies {
// If a special pool (named trainers) is used here it CAN happen that they have a array as species (which means choose one of those two). So we catch that with this code block
if (Array.isArray(species)) {
// Pick a random species from the list
@ -314,7 +309,7 @@ export abstract class PokemonSpeciesForm {
let variantDataIndex: integer | string = this.speciesId;
const species = getPokemonSpecies(this.speciesId);
if (species.forms.length > 0 && formIndex !== undefined) {
formkey = species.forms[formIndex]?.getFormSpriteKey(formIndex);
formkey = species.forms[formIndex]?.formSpriteKey;
if (formkey) {
variantDataIndex = `${this.speciesId}-${formkey}`;
}
@ -661,8 +656,8 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali
return this.getSpeciesForLevel(level, allowEvolving, false, (isBoss ? PartyMemberStrength.WEAKER : PartyMemberStrength.AVERAGE) + (gameMode?.isEndless ? 1 : 0));
}
getTrainerSpeciesForLevel(level: integer, allowEvolving: boolean = false, strength: PartyMemberStrength, currentWave: number = 0): Species {
return this.getSpeciesForLevel(level, allowEvolving, true, strength, currentWave);
getTrainerSpeciesForLevel(level: integer, allowEvolving: boolean = false, strength: PartyMemberStrength): Species {
return this.getSpeciesForLevel(level, allowEvolving, true, strength);
}
private getStrengthLevelDiff(strength: PartyMemberStrength): integer {
@ -682,7 +677,7 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali
}
}
getSpeciesForLevel(level: integer, allowEvolving: boolean = false, forTrainer: boolean = false, strength: PartyMemberStrength = PartyMemberStrength.WEAKER, currentWave: number = 0): Species {
getSpeciesForLevel(level: integer, allowEvolving: boolean = false, forTrainer: boolean = false, strength: PartyMemberStrength = PartyMemberStrength.WEAKER): Species {
const prevolutionLevels = this.getPrevolutionLevels();
if (prevolutionLevels.length) {
@ -743,11 +738,6 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali
evolutionChance = Math.min(0.65 * easeInFunc(Math.min(Math.max(level - evolutionLevel, 0), preferredMinLevel) / preferredMinLevel) + 0.35 * easeOutFunc(Math.min(Math.max(level - evolutionLevel, 0), preferredMinLevel * 2.5) / (preferredMinLevel * 2.5)), 1);
}
}
/* (Most) Trainers shouldn't be using unevolved Pokemon by the third gym leader / wave 80. Exceptions to this include Breeders, whose large teams are balanced by the use of weaker pokemon */
if (currentWave >= 80 && forTrainer && strength > PartyMemberStrength.WEAKER) {
evolutionChance = 1;
noEvolutionChance = 0;
}
if (evolutionChance > 0) {
if (isRegionalEvolution) {
@ -772,7 +762,7 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali
for (const weight of evolutionPool.keys()) {
if (randValue < weight) {
return getPokemonSpecies(evolutionPool.get(weight)).getSpeciesForLevel(level, true, forTrainer, strength, currentWave);
return getPokemonSpecies(evolutionPool.get(weight)!).getSpeciesForLevel(level, true, forTrainer, strength); // TODO: is the bang correct?
}
}

View File

@ -16,7 +16,6 @@ import {Moves} from "#enums/moves";
import {PartyMemberStrength} from "#enums/party-member-strength";
import {Species} from "#enums/species";
import {TrainerType} from "#enums/trainer-type";
import {Gender} from "./gender";
export enum TrainerPoolTier {
COMMON,
@ -143,7 +142,7 @@ export const trainerPartyTemplates = {
FIVE_WEAK_BALANCED: new TrainerPartyTemplate(5, PartyMemberStrength.WEAK, false, true),
SIX_WEAKER: new TrainerPartyTemplate(6, PartyMemberStrength.WEAKER),
SIX_WEAKER_SAME: new TrainerPartyTemplate(6, PartyMemberStrength.WEAKER, true),
SIX_WEAK_SAME: new TrainerPartyTemplate(6, PartyMemberStrength.WEAK, true),
SIX_WEAK_SAME: new TrainerPartyTemplate(6, PartyMemberStrength.WEAKER, true),
SIX_WEAK_BALANCED: new TrainerPartyTemplate(6, PartyMemberStrength.WEAK, false, true),
GYM_LEADER_1: new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(1, PartyMemberStrength.STRONG)),
@ -324,15 +323,6 @@ export class TrainerConfig {
case TrainerType.LYSANDRE_2:
trainerType = TrainerType.LYSANDRE;
break;
case TrainerType.LUSAMINE_2:
trainerType = TrainerType.LUSAMINE;
break;
case TrainerType.GUZMA_2:
trainerType = TrainerType.GUZMA;
break;
case TrainerType.ROSE_2:
trainerType = TrainerType.ROSE;
break;
case TrainerType.MARNIE_ELITE:
trainerType = TrainerType.MARNIE;
break;
@ -563,9 +553,9 @@ export class TrainerConfig {
}
case "magma": {
return {
[TrainerPoolTier.COMMON]: [Species.NUMEL, Species.POOCHYENA, Species.SLUGMA, Species.SOLROCK, Species.HIPPOPOTAS, Species.SANDACONDA, Species.PHANPY, Species.ROLYCOLY, Species.GLIGAR],
[TrainerPoolTier.COMMON]: [Species.NUMEL, Species.POOCHYENA, Species.SLUGMA, Species.SOLROCK, Species.HIPPOPOTAS, Species.SANDACONDA, Species.PHANPY, Species.SWINUB, Species.GLIGAR],
[TrainerPoolTier.UNCOMMON]: [Species.TRAPINCH, Species.HEATMOR],
[TrainerPoolTier.RARE]: [Species.CAPSAKID, Species.CHARCADET]
[TrainerPoolTier.RARE]: [Species.TURTONATOR, Species.CHARCADET]
};
}
case "aqua": {
@ -596,27 +586,6 @@ export class TrainerConfig {
[TrainerPoolTier.RARE]: [Species.NOIVERN, Species.DRUDDIGON]
};
}
case "aether": {
return {
[TrainerPoolTier.COMMON]: [ Species.BRUXISH, Species.SLOWPOKE, Species.BALTOY, Species.EXEGGCUTE, Species.ABRA, Species.ALOLA_RAICHU, Species.ELGYEM, Species.NATU],
[TrainerPoolTier.UNCOMMON]: [Species.GALAR_SLOWKING, Species.MEDITITE, Species.BELDUM, Species.ORANGURU, Species.HATTERENE, Species.INKAY, Species.RALTS],
[TrainerPoolTier.RARE]: [Species.ARMAROUGE, Species.GIRAFARIG, Species.PORYGON]
};
}
case "skull": {
return {
[TrainerPoolTier.COMMON]: [ Species.MAREANIE, Species.ALOLA_GRIMER, Species.GASTLY, Species.ZUBAT, Species.LURANTIS, Species.VENIPEDE, Species.BUDEW, Species.KOFFING],
[TrainerPoolTier.UNCOMMON]: [Species.GALAR_SLOWBRO, Species.SKORUPI, Species.PALDEA_WOOPER, Species.NIDORAN_F, Species.CROAGUNK, Species.MANDIBUZZ],
[TrainerPoolTier.RARE]: [Species.DRAGALGE, Species.HISUI_SNEASEL]
};
}
case "macro": {
return {
[TrainerPoolTier.COMMON]: [ Species.HATTERENE, Species.MILOTIC, Species.TSAREENA, Species.SALANDIT, Species.GALAR_PONYTA, Species.GOTHITA, Species.FROSLASS],
[TrainerPoolTier.UNCOMMON]: [Species.MANDIBUZZ, Species.MAREANIE, Species.ALOLA_VULPIX, Species.TOGEPI, Species.GALAR_CORSOLA, Species.SINISTEA, Species.APPLIN],
[TrainerPoolTier.RARE]: [Species.TINKATINK, Species.HISUI_LILLIGANT]
};
}
}
console.warn(`Evil team admin for ${team} not found. Returning empty species pools.`);
@ -1091,7 +1060,7 @@ function getRandomPartyMemberFunc(speciesPool: Species[], trainerSlot: TrainerSl
return (scene: BattleScene, level: integer, strength: PartyMemberStrength) => {
let species = Utils.randSeedItem(speciesPool);
if (!ignoreEvolution) {
species = getPokemonSpecies(species).getTrainerSpeciesForLevel(level, true, strength, scene.currentBattle.waveIndex);
species = getPokemonSpecies(species).getTrainerSpeciesForLevel(level, true, strength);
}
return scene.addEnemyPokemon(getPokemonSpecies(species), level, trainerSlot, undefined, undefined, postProcess);
};
@ -1101,7 +1070,7 @@ function getSpeciesFilterRandomPartyMemberFunc(speciesFilter: PokemonSpeciesFilt
const originalSpeciesFilter = speciesFilter;
speciesFilter = (species: PokemonSpecies) => (allowLegendaries || (!species.legendary && !species.subLegendary && !species.mythical)) && !species.isTrainerForbidden() && originalSpeciesFilter(species);
return (scene: BattleScene, level: integer, strength: PartyMemberStrength) => {
const ret = scene.addEnemyPokemon(getPokemonSpecies(scene.randomSpecies(scene.currentBattle.waveIndex, level, false, speciesFilter).getTrainerSpeciesForLevel(level, true, strength, scene.currentBattle.waveIndex)), level, trainerSlot, undefined, undefined, postProcess);
const ret = scene.addEnemyPokemon(getPokemonSpecies(scene.randomSpecies(scene.currentBattle.waveIndex, level, false, speciesFilter).getTrainerSpeciesForLevel(level, true, strength)), level, trainerSlot, undefined, undefined, postProcess);
return ret;
};
}
@ -1435,9 +1404,9 @@ export const trainerConfigs: TrainerConfigs = {
[TrainerType.MAGMA_GRUNT]: new TrainerConfig(++t).setHasGenders("Magma Grunt Female").setHasDouble("Magma Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
.setSpeciesPools({
[TrainerPoolTier.COMMON]: [Species.SLUGMA, Species.POOCHYENA, Species.NUMEL, Species.ZIGZAGOON, Species.DIGLETT, Species.MAGBY, Species.TORKOAL, Species.BALTOY, Species.BARBOACH],
[TrainerPoolTier.UNCOMMON]: [Species.SOLROCK, Species.HIPPOPOTAS, Species.SANDACONDA, Species.PHANPY, Species.ROLYCOLY, Species.GLIGAR],
[TrainerPoolTier.UNCOMMON]: [Species.SOLROCK, Species.HIPPOPOTAS, Species.SANDACONDA, Species.PHANPY, Species.SWINUB, Species.GLIGAR],
[TrainerPoolTier.RARE]: [Species.TRAPINCH, Species.HEATMOR],
[TrainerPoolTier.SUPER_RARE]: [Species.CAPSAKID, Species.CHARCADET]
[TrainerPoolTier.SUPER_RARE]: [Species.TURTONATOR, Species.CHARCADET]
}),
[TrainerType.TABITHA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("magma_admin", "magma", [Species.CAMERUPT]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)),
[TrainerType.COURTNEY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("magma_admin_female", "magma", [Species.CAMERUPT]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)),
@ -1457,9 +1426,10 @@ export const trainerConfigs: TrainerConfigs = {
[TrainerPoolTier.RARE]: [Species.HISUI_GROWLITHE, Species.HISUI_QWILFISH, Species.HISUI_SNEASEL],
[TrainerPoolTier.SUPER_RARE]: [Species.HISUI_ZORUA, Species.HISUI_SLIGGOO]
}),
[TrainerType.JUPITER]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander_female", "galactic", [Species.SKUNTANK]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)),
[TrainerType.MARS]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander_female", "galactic", [Species.PURUGLY]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)),
[TrainerType.SATURN]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander", "galactic", [Species.TOXICROAK]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)),
[TrainerType.JUPITER]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander_female", "galactic", [Species.SKUNTANK]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)),
[TrainerType.MARS]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander_female", "galactic", [Species.PURUGLY]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)),
[TrainerType.SATURN]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander", "galactic", [Species.TOXICROAK]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)),
[TrainerType.PLASMA_GRUNT]: new TrainerConfig(++t).setHasGenders("Plasma Grunt Female").setHasDouble("Plasma Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
.setSpeciesPools({
[TrainerPoolTier.COMMON]: [Species.PATRAT, Species.LILLIPUP, Species.PURRLOIN, Species.SCRAFTY, Species.WOOBAT, Species.VANILLITE, Species.SANDILE, Species.TRUBBISH],
@ -1469,6 +1439,7 @@ export const trainerConfigs: TrainerConfigs = {
}),
[TrainerType.ZINZOLIN]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("plasma_sage", "plasma", [Species.CRYOGONAL]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)),
[TrainerType.ROOD]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("plasma_sage", "plasma", [Species.SWOOBAT]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)),
[TrainerType.FLARE_GRUNT]: new TrainerConfig(++t).setHasGenders("Flare Grunt Female").setHasDouble("Flare Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
.setSpeciesPools({
[TrainerPoolTier.COMMON]: [Species.FLETCHLING, Species.LITLEO, Species.PONYTA, Species.INKAY, Species.HOUNDOUR, Species.SKORUPI, Species.SCRAFTY, Species.CROAGUNK],
@ -1478,31 +1449,6 @@ export const trainerConfigs: TrainerConfigs = {
}),
[TrainerType.BRYONY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("flare_admin_female", "flare", [Species.LIEPARD]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)),
[TrainerType.XEROSIC]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("flare_admin", "flare", [Species.MALAMAR]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)),
[TrainerType.AETHER_GRUNT]: new TrainerConfig(++t).setHasGenders("Aether Grunt Female").setHasDouble("Aether Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aether_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
.setSpeciesPools({
[TrainerPoolTier.COMMON]: [ Species.PIKIPEK, Species.ROCKRUFF, Species.ALOLA_DIGLETT, Species.YUNGOOS, Species.CORSOLA, Species.ALOLA_GEODUDE, Species.BOUNSWEET, Species.LILLIPUP, Species.ALOLA_MAROWAK],
[TrainerPoolTier.UNCOMMON]: [ Species.POLIWAG, Species.STUFFUL, Species.ALOLA_EXEGGUTOR, Species.CRABRAWLER, Species.CUTIEFLY, Species.ALOLA_RAICHU, Species.ORICORIO, Species.MUDBRAY],
[TrainerPoolTier.RARE]: [ Species.ORANGURU, Species.PASSIMIAN, Species.GALAR_CORSOLA, Species.ALOLA_SANDSHREW, Species.ALOLA_VULPIX, Species.TURTONATOR, Species.DRAMPA],
[TrainerPoolTier.SUPER_RARE]: [Species.JANGMO_O, Species.PORYGON]
}),
[TrainerType.FABA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("aether_admin", "aether", [Species.HYPNO]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aether_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)),
[TrainerType.SKULL_GRUNT]: new TrainerConfig(++t).setHasGenders("Skull Grunt Female").setHasDouble("Skull Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_skull_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
.setSpeciesPools({
[TrainerPoolTier.COMMON]: [ Species.SALANDIT, Species.ALOLA_RATTATA, Species.ALOLA_MEOWTH, Species.SCRAGGY, Species.KOFFING, Species.ALOLA_GRIMER, Species.MAREANIE, Species.SPINARAK, Species.TRUBBISH],
[TrainerPoolTier.UNCOMMON]: [ Species.FOMANTIS, Species.SABLEYE, Species.SANDILE, Species.ALOLA_MAROWAK, Species.PANCHAM, Species.DROWZEE, Species.ZUBAT, Species.VENIPEDE, Species.VULLABY],
[TrainerPoolTier.RARE]: [Species.SANDYGAST, Species.PAWNIARD, Species.MIMIKYU, Species.DHELMISE, Species.GASTLY, Species.WISHIWASHI],
[TrainerPoolTier.SUPER_RARE]: [Species.GRUBBIN, Species.DEWPIDER]
}),
[TrainerType.PLUMERIA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("skull_admin", "skull", [Species.SALAZZLE]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_skull_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)),
[TrainerType.MACRO_GRUNT]: new TrainerConfig(++t).setHasGenders("Macro Grunt Female").setHasDouble("Macro Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_macro_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
.setSpeciesPools({
[TrainerPoolTier.COMMON]: [ Species.CUFANT, Species.GALAR_MEOWTH, Species.KLINK, Species.ROOKIDEE, Species.CRAMORANT, Species.GALAR_ZIGZAGOON, Species.SKWOVET, Species.STEELIX, Species.MAWILE, Species.FERROSEED],
[TrainerPoolTier.UNCOMMON]: [ Species.DRILBUR, Species.MAGNEMITE, Species.HATENNA, Species.ARROKUDA, Species.APPLIN, Species.GALAR_PONYTA, Species.GALAR_YAMASK, Species.SINISTEA, Species.RIOLU],
[TrainerPoolTier.RARE]: [Species.FALINKS, Species.BELDUM, Species.GALAR_FARFETCHD, Species.GALAR_MR_MIME, Species.HONEDGE, Species.SCIZOR, Species.GALAR_DARUMAKA],
[TrainerPoolTier.SUPER_RARE]: [Species.DURALUDON, Species.DREEPY]
}),
[TrainerType.OLEANA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("macro_admin", "macro", [Species.GARBODOR]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_oleana").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)),
[TrainerType.BROCK]: new TrainerConfig((t = TrainerType.BROCK)).initForGymLeader(signatureSpecies["BROCK"], true, Type.ROCK).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"),
[TrainerType.MISTY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["MISTY"], false, Type.WATER).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"),
[TrainerType.LT_SURGE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["LT_SURGE"], true, Type.ELECTRIC).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"),
@ -1879,7 +1825,7 @@ export const trainerConfigs: TrainerConfigs = {
p.generateName();
})),
[TrainerType.ARCHIE_2]: new TrainerConfig(++t).setName("Archie").initForEvilTeamLeader("Aqua Boss", [], true).setMixedBattleBgm("battle_aqua_magma_boss").setVictoryBgm("victory_team_plasma")
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.EMPOLEON, Species.LUDICOLO], TrainerSlot.TRAINER, true, p => {
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.KINGDRA, Species.LUDICOLO], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.ULTRA_BALL;
@ -1892,9 +1838,9 @@ export const trainerConfigs: TrainerConfigs = {
p.generateAndPopulateMoveset();
p.abilityIndex = 2; // Swift Swim
}))
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.OVERQWIL ], TrainerSlot.TRAINER, true, p => {
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.HUNTAIL, Species.GOREBYSS], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
p.abilityIndex = 1; // Swift Swim
p.abilityIndex = 0; // Swift Swim
}))
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SHARPEDO], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
@ -1909,9 +1855,9 @@ export const trainerConfigs: TrainerConfigs = {
p.pokeball = PokeballType.MASTER_BALL;
})),
[TrainerType.CYRUS]: new TrainerConfig(++t).setName("Cyrus").initForEvilTeamLeader("Galactic Boss", []).setMixedBattleBgm("battle_galactic_boss").setVictoryBgm("victory_team_plasma")
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.GYARADOS ]))
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.GYARADOS, Species.BASCULEGION]))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.HONCHKROW, Species.HISUI_BRAVIARY]))
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.CROBAT, Species.GLISCOR ]))
.setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.CROBAT, Species.OVERQWIL]))
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.AZELF, Species.UXIE, Species.MESPRIT]))
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.HOUNDOOM], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
@ -1959,19 +1905,14 @@ export const trainerConfigs: TrainerConfigs = {
p.pokeball = PokeballType.ULTRA_BALL;
})),
[TrainerType.GHETSIS_2]: new TrainerConfig(++t).setName("Ghetsis").initForEvilTeamLeader("Plasma Boss", [], true).setMixedBattleBgm("battle_plasma_boss").setVictoryBgm("victory_team_plasma")
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.GENESECT ], TrainerSlot.TRAINER, true, p => {
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SLITHER_WING, Species.IRON_MOTH], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.MASTER_BALL;
p.formIndex = Utils.randSeedInt(5);
p.pokeball = PokeballType.ULTRA_BALL;
}))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.BASCULEGION, Species.JELLICENT ], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
p.gender = Gender.MALE;
p.formIndex = 1;
}))
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.KINGAMBIT ]))
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.VOLCARONA, Species.SLITHER_WING ]))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.DURANT]))
.setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.DARMANITAN, Species.GALAR_DARMANITAN]))
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.KINGAMBIT]))
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.HYDREIGON, Species.IRON_JUGULIS], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
@ -1985,12 +1926,9 @@ export const trainerConfigs: TrainerConfigs = {
[TrainerType.LYSANDRE]: new TrainerConfig(++t).setName("Lysandre").initForEvilTeamLeader("Flare Boss", []).setMixedBattleBgm("battle_flare_boss").setVictoryBgm("victory_team_plasma")
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.MIENSHAO]))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.HONCHKROW, Species.TALONFLAME]))
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.PYROAR ], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
p.gender = Gender.MALE;
}))
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.CLAWITZER, Species.DRAGALGE ]))
.setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.HELIOLISK, Species.MALAMAR ]))
.setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.PYROAR]))
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.MILOTIC]))
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.HELIOLISK]))
.setPartyMemberFunc(5, getRandomPartyMemberFunc([Species.GYARADOS], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
@ -2004,11 +1942,8 @@ export const trainerConfigs: TrainerConfigs = {
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.ULTRA_BALL;
}))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.PYROAR ], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
p.gender = Gender.MALE;
}))
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.IRON_MOTH ]))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.GHOLDENGO, Species.AEGISLASH]))
.setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.PYROAR]))
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GOODRA, Species.HISUI_GOODRA]))
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.GYARADOS], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
@ -2022,113 +1957,7 @@ export const trainerConfigs: TrainerConfigs = {
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.MASTER_BALL;
})),
[TrainerType.LUSAMINE]: new TrainerConfig(++t).setName("Lusamine").initForEvilTeamLeader("Aether Boss", []).setMixedBattleBgm("battle_aether_boss").setVictoryBgm("victory_team_plasma")
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.CLEFABLE ]))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.LILLIGANT, Species.HISUI_LILLIGANT ]))
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.MILOTIC, Species.PRIMARINA ]))
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GALAR_SLOWBRO, Species.GALAR_SLOWKING ]))
.setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.BEWEAR ]))
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.NIHILEGO ], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
})),
[TrainerType.LUSAMINE_2]: new TrainerConfig(++t).setName("Lusamine").initForEvilTeamLeader("Aether Boss", [], true).setMixedBattleBgm("battle_aether_boss").setVictoryBgm("victory_team_plasma")
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.CLEFABLE ], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
}))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.MILOTIC, Species.PRIMARINA ]))
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.PHEROMOSA ], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.MASTER_BALL;
}))
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.STAKATAKA, Species.CELESTEELA, Species.GUZZLORD ], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.MASTER_BALL;
}))
.setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.NIHILEGO ], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.MASTER_BALL;
}))
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.NECROZMA ], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.MASTER_BALL;
})),
[TrainerType.GUZMA]: new TrainerConfig(++t).setName("Guzma").initForEvilTeamLeader("Skull Boss", []).setMixedBattleBgm("battle_skull_boss").setVictoryBgm("victory_team_plasma")
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.LOKIX, Species.YANMEGA ]))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.HERACROSS ]))
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SCIZOR, Species.KLEAVOR ]))
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GALVANTULA, Species.VIKAVOLT]))
.setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.PINSIR ], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
p.formIndex = 1;
p.generateName();
}))
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.GOLISOPOD ], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
})),
[TrainerType.GUZMA_2]: new TrainerConfig(++t).setName("Guzma").initForEvilTeamLeader("Skull Boss", [], true).setMixedBattleBgm("battle_skull_boss").setVictoryBgm("victory_team_plasma")
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.GOLISOPOD ], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
p.abilityIndex = 2; //Anticipation
}))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.HISUI_SAMUROTT, Species.CRAWDAUNT ], TrainerSlot.TRAINER, true, p => {
p.abilityIndex = 2; //Sharpness, Adaptability
}))
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SCIZOR, Species.KLEAVOR ]))
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.PINSIR ], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
p.formIndex = 1;
p.generateName();
}))
.setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.BUZZWOLE ], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.MASTER_BALL;
}))
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.XURKITREE ], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.MASTER_BALL;
})),
[TrainerType.ROSE]: new TrainerConfig(++t).setName("Rose").initForEvilTeamLeader("Macro Boss", []).setMixedBattleBgm("battle_macro_boss").setVictoryBgm("victory_team_plasma")
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.ARCHALUDON ]))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.FERROTHORN, Species.ESCAVALIER ]))
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SIRFETCHD, Species.MR_RIME ]))
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.CORVIKNIGHT ]))
.setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.PERRSERKER, Species.KLINKLANG ]))
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.COPPERAJAH ], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
p.formIndex = 1;
p.generateName();
})),
[TrainerType.ROSE_2]: new TrainerConfig(++t).setName("Rose").initForEvilTeamLeader("Macro Boss", [], true).setMixedBattleBgm("battle_macro_boss").setVictoryBgm("victory_team_plasma")
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.ARCHALUDON ], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
}))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.AEGISLASH, Species.GHOLDENGO ]))
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.DRACOVISH, Species.DRACOZOLT ], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
p.abilityIndex = 1; //Strong Jaw, Hustle
}))
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.MELMETAL ]))
.setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.GALAR_ARTICUNO, Species.GALAR_ZAPDOS, Species.GALAR_MOLTRES ], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.MASTER_BALL;
}))
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.COPPERAJAH ], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
p.formIndex = 1;
p.generateName();
})),
// TODO: use signature species?
[TrainerType.BUCK]: new TrainerConfig(++t).setName("Buck").initForStatTrainer([], true)
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.CLAYDOL ], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 3);

View File

@ -26,6 +26,5 @@ export enum MysteryEncounterType {
THE_WINSTRATE_CHALLENGE,
TELEPORTING_HIJINKS,
BUG_TYPE_SUPERFAN,
FUN_AND_GAMES,
UNCOMMON_BREED
FUN_AND_GAMES
}

View File

@ -72,12 +72,6 @@ export enum TrainerType {
FLARE_GRUNT,
BRYONY,
XEROSIC,
AETHER_GRUNT,
FABA,
SKULL_GRUNT,
PLUMERIA,
MACRO_GRUNT,
OLEANA,
ROCKET_BOSS_GIOVANNI_1,
ROCKET_BOSS_GIOVANNI_2,
MAXIE,
@ -90,12 +84,6 @@ export enum TrainerType {
GHETSIS_2,
LYSANDRE,
LYSANDRE_2,
LUSAMINE,
LUSAMINE_2,
GUZMA,
GUZMA_2,
ROSE,
ROSE_2,
BUCK,
CHERYL,
MARLEY,

View File

@ -10,7 +10,7 @@ import * as Utils from "../utils";
import { Type, TypeDamageMultiplier, getTypeDamageMultiplier, getTypeRgb } from "../data/type";
import { getLevelTotalExp } from "../data/exp";
import { Stat } from "../data/pokemon-stat";
import { DamageMoneyRewardModifier, EnemyDamageBoosterModifier, EnemyDamageReducerModifier, EnemyEndureChanceModifier, EnemyFusionChanceModifier, HiddenAbilityRateBoosterModifier, PokemonBaseStatModifier, PokemonFriendshipBoosterModifier, PokemonHeldItemModifier, PokemonNatureWeightModifier, ShinyRateBoosterModifier, SurviveDamageModifier, TempBattleStatBoosterModifier, StatBoosterModifier, CritBoosterModifier, TerastallizeModifier, PokemonBaseStatTotalModifier, PokemonIncrementingStatModifier, PokemonBaseStatFlatModifier } from "../modifier/modifier";
import { DamageMoneyRewardModifier, EnemyDamageBoosterModifier, EnemyDamageReducerModifier, EnemyEndureChanceModifier, EnemyFusionChanceModifier, HiddenAbilityRateBoosterModifier, PokemonBaseStatModifier, PokemonFriendshipBoosterModifier, PokemonHeldItemModifier, PokemonNatureWeightModifier, ShinyRateBoosterModifier, SurviveDamageModifier, TempBattleStatBoosterModifier, StatBoosterModifier, CritBoosterModifier, TerastallizeModifier, PokemonBaseStatTotalModifier, PokemonIncrementingStatModifier } from "../modifier/modifier";
import { PokeballType } from "../data/pokeball";
import { Gender } from "../data/gender";
import { initMoveAnim, loadMoveAnimAssets } from "../data/battle-anims";
@ -778,7 +778,19 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
if (!this.stats) {
this.stats = [ 0, 0, 0, 0, 0, 0 ];
}
const baseStats = this.calculateBaseStats();
const baseStats = this.getSpeciesForm().baseStats.slice(0);
this.scene.applyModifiers(PokemonBaseStatTotalModifier, this.isPlayer(), this, baseStats);
if (this.fusionSpecies) {
const fusionBaseStats = this.getFusionSpeciesForm().baseStats;
for (let s = 0; s < this.stats.length; s++) {
baseStats[s] = Math.ceil((baseStats[s] + fusionBaseStats[s]) / 2);
}
} else if (this.scene.gameMode.isSplicedOnly) {
for (let s = 0; s < this.stats.length; s++) {
baseStats[s] = Math.ceil(baseStats[s] / 2);
}
}
this.scene.applyModifiers(PokemonBaseStatModifier, this.isPlayer(), this, baseStats);
const stats = Utils.getEnumValues(Stat);
for (const s of stats) {
const isHp = s === Stat.HP;
@ -810,27 +822,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
this.scene.applyModifier(PokemonIncrementingStatModifier, this.isPlayer(), this, this.stats);
}
calculateBaseStats(): number[] {
const baseStats = this.getSpeciesForm().baseStats.slice(0);
// Shuckle Juice
this.scene.applyModifiers(PokemonBaseStatTotalModifier, this.isPlayer(), this, baseStats);
// Old Gateau
this.scene.applyModifiers(PokemonBaseStatFlatModifier, this.isPlayer(), this, baseStats);
if (this.fusionSpecies) {
const fusionBaseStats = this.getFusionSpeciesForm().baseStats;
for (let s = 0; s < this.stats.length; s++) {
baseStats[s] = Math.ceil((baseStats[s] + fusionBaseStats[s]) / 2);
}
} else if (this.scene.gameMode.isSplicedOnly) {
for (let s = 0; s < this.stats.length; s++) {
baseStats[s] = Math.ceil(baseStats[s] / 2);
}
}
// Vitamins
this.scene.applyModifiers(PokemonBaseStatModifier, this.isPlayer(), this, baseStats);
return baseStats;
}
getNature(): Nature {
return this.natureOverride !== -1 ? this.natureOverride : this.nature;
}
@ -2688,7 +2679,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
}
private fusionFaintCry(callback: Function): void {
const key = `cry/${this.getSpeciesForm().getCryKey(this.formIndex)}`;
const key = this.getSpeciesForm().getCryKey(this.formIndex);
let i = 0;
let rate = 0.85;
const cry = this.scene.playSound(key, { rate: rate }) as AnySound;
@ -2696,8 +2687,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
const tintSprite = this.getTintSprite();
let duration = cry.totalDuration * 1000;
const fusionCryKey = `cry/${this.getFusionSpeciesForm().getCryKey(this.fusionFormIndex)}`;
let fusionCry = this.scene.playSound(fusionCryKey, { rate: rate }) as AnySound;
let fusionCry = this.scene.playSound(this.getFusionSpeciesForm().getCryKey(this.fusionFormIndex), { rate: rate }) as AnySound;
fusionCry.stop();
duration = Math.min(duration, fusionCry.totalDuration * 1000);
fusionCry.destroy();
@ -2741,7 +2731,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
}
if (i === transitionIndex) {
SoundFade.fadeOut(this.scene, cry, Utils.fixedInt(Math.ceil((duration / rate) * 0.2)));
fusionCry = this.scene.playSound(fusionCryKey, Object.assign({ seek: Math.max(fusionCry.totalDuration * 0.4, 0), rate: rate }));
fusionCry = this.scene.playSound(this.getFusionSpeciesForm().getCryKey(this.fusionFormIndex), Object.assign({ seek: Math.max(fusionCry.totalDuration * 0.4, 0), rate: rate }));
SoundFade.fadeIn(this.scene, fusionCry, Utils.fixedInt(Math.ceil((duration / rate) * 0.2)), this.scene.masterVolume * this.scene.seVolume, 0);
}
rate *= 0.99;
@ -3805,18 +3795,6 @@ export class EnemyPokemon extends Pokemon {
this.status = new Status(Overrides.OPP_STATUS_OVERRIDE);
}
if (Overrides.OPP_GENDER_OVERRIDE) {
this.gender = Overrides.OPP_GENDER_OVERRIDE;
}
const speciesId = this.species.speciesId;
if (speciesId in Overrides.OPP_FORM_OVERRIDES
&& Overrides.OPP_FORM_OVERRIDES[speciesId]
&& this.species.forms[Overrides.OPP_FORM_OVERRIDES[speciesId]]) {
this.formIndex = Overrides.OPP_FORM_OVERRIDES[speciesId] ?? 0;
}
if (!dataSource) {
this.generateAndPopulateMoveset();

View File

@ -364,12 +364,12 @@ export default class Trainer extends Phaser.GameObjects.Container {
let species = useNewSpeciesPool
? getPokemonSpecies(newSpeciesPool[Math.floor(Math.random() * newSpeciesPool.length)])
: template.isSameSpecies(index) && index > offset
? getPokemonSpecies(battle.enemyParty[offset].species.getTrainerSpeciesForLevel(level, false, template.getStrength(offset), this.scene.currentBattle.waveIndex))
? getPokemonSpecies(battle.enemyParty[offset].species.getTrainerSpeciesForLevel(level, false, template.getStrength(offset)))
: this.genNewPartyMemberSpecies(level, strength);
// If the species is from newSpeciesPool, we need to adjust it based on the level and strength
if (newSpeciesPool) {
species = getPokemonSpecies(species.getSpeciesForLevel(level, true, true, strength, this.scene.currentBattle.waveIndex));
species = getPokemonSpecies(species.getSpeciesForLevel(level, true, true, strength));
}
ret = this.scene.addEnemyPokemon(species, level, !this.isDouble() || !(index % 2) ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER);
@ -398,7 +398,7 @@ export default class Trainer extends Phaser.GameObjects.Container {
species = this.scene.randomSpecies(battle.waveIndex, level, false, this.config.speciesFilter);
}
let ret = getPokemonSpecies(species.getTrainerSpeciesForLevel(level, true, strength, this.scene.currentBattle.waveIndex));
let ret = getPokemonSpecies(species.getTrainerSpeciesForLevel(level, true, strength));
let retry = false;
console.log(ret.getName());
@ -417,7 +417,7 @@ export default class Trainer extends Phaser.GameObjects.Container {
console.log("Attempting reroll of species evolution to fit specialty type...");
let evoAttempt = 0;
while (retry && evoAttempt++ < 10) {
ret = getPokemonSpecies(species.getTrainerSpeciesForLevel(level, true, strength, this.scene.currentBattle.waveIndex));
ret = getPokemonSpecies(species.getTrainerSpeciesForLevel(level, true, strength));
console.log(ret.name);
if (this.config.specialtyTypes.find(t => ret.isOfType(t))) {
retry = false;

View File

@ -1,8 +1,7 @@
import { PokemonHeldItemModifierType } from "#app/modifier/modifier-type";
import { PokemonHeldItemModifier } from "#app/modifier/modifier";
export default interface HeldModifierConfig {
modifier: PokemonHeldItemModifierType | PokemonHeldItemModifier;
modifierType: PokemonHeldItemModifierType;
stackCount?: number;
isTransferable?: boolean;
}

View File

@ -38,7 +38,7 @@
"learnMoveNotLearned": "{{pokemonName}} hat {{moveName}} nicht erlernt.",
"learnMoveForgetQuestion": "Welche Attacke soll vergessen werden?",
"learnMoveForgetSuccess": "{{pokemonName}} hat {{moveName}} vergessen.",
"countdownPoof": "@d{32}Eins, @d{15}zwei @d{15}und@d{15}… @d{15}… @d{15}… @d{15}@s{se/pb_bounce_1}schwupp!",
"countdownPoof": "@d{32}Eins, @d{15}zwei @d{15}und@d{15}… @d{15}… @d{15}… @d{15}@s{pb_bounce_1}schwupp!",
"learnMoveAnd": "Und…",
"levelCapUp": "Die Levelbeschränkung wurde auf {{levelCap}} erhöht!",
"moveNotImplemented": "{{moveName}} ist noch nicht implementiert und kann nicht ausgewählt werden.",

View File

@ -80,21 +80,11 @@
"battle_galactic_grunt": "BDSP 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_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_plasma_boss": "S2W2 Vs. G-Cis",
"battle_flare_boss": "XY Vs. Flordelis",
"battle_aether_boss": "SM Vs. Samantha",
"battle_skull_boss": "SM Vs. Bromley",
"battle_macro_boss": "SWSH Vs. Rose",
"abyss": "PMD Erkundungsteam Himmel Dunkelkrater",
"badlands": "PMD Erkundungsteam Himmel Kargtal",
"beach": "PMD Erkundungsteam Himmel Feuchtklippe",

View File

@ -355,30 +355,6 @@
"1": "Ich werde für das nächste Rennen tunen."
}
},
"firebreather": {
"encounter": {
"1": "Meine Flammen werden dich verschlingen!",
"2": "Meine Seele hat Feuer gefangen. Ich werde dir zeigen, wie heiß sie brennt!",
"3": "Komm näher und sieh dir meine Flammen an!"
},
"victory": {
"1": "Verbrannt bis zur Asche...",
"2": "Yow! Das ist heiß!",
"3": "Auuu! Ich habe mir die Nasenspitze verbrannt!"
}
},
"sailor": {
"encounter": {
"1": "Matrose, du gehst über Bord, wenn du verlierst!",
"2": "Komm schon! Mein Stolz als Seemann steht auf dem Spiel!",
"3": "Ahoj! Bist du seekrank?"
},
"victory": {
"1": "Argh! Von einem Kind besiegt!",
"2": "Dein Geist hat mich versenkt!",
"3": "Ich glaube, ich bin der der seekrank ist..."
}
},
"archer": {
"encounter": {
"1": "Bevor du weitergehst, lass uns sehen, wie du dich gegen uns, Team Rocket, schlägst!",
@ -441,7 +417,7 @@
},
"courtney": {
"encounter": {
"1": "Stellt euch...Mir NICHT...IN DEN WEEEG...!!",
"1": "Das Ding... Das Ding, das du hältst... Das ist es, was...\n$Das ist es, wonach wir von Team Magma suchen...",
"2": "... Nun dann... Auslöschen...",
"3": "...?! Du... Hm... ♪ Das trifft sich ausgezeichnet... ♪\n$Dann hole ich mir eben zuerst deine Pokémon... Her damit..."
},
@ -470,7 +446,7 @@
"3": "Was machst du hier? Bist du uns gefolgt?"
},
"victory": {
"1": "Bwaarharharharhar!! Ich hab zwar verloren, aber das hat Spaß gemacht!",
"1": "Na gut, bis der Boss Zeit für dich hat, werde ich dein Gegner sein!",
"2": "Ich kann es fühlen! Ich kann es spüren, das ist klar! Die Stärke, die von dir ausgeht!\n$Mehr! Ich will noch mehr! Aber es sieht so aus, als hätten wir keine Zeit mehr...",
"3": "Das war Spaß! Ich wusste, dass du mir eine gute Zeit bieten würdest!\n$Ich freue mich darauf, dich eines Tages wieder zu treffen!"
}
@ -559,6 +535,30 @@
"3": "Wunderbar! Bemerkenswert! Deine Fähigkeiten und dein Mut sind lobenswert."
}
},
"firebreather": {
"encounter": {
"1": "Meine Flammen werden dich verschlingen!",
"2": "Meine Seele hat Feuer gefangen. Ich werde dir zeigen, wie heiß sie brennt!",
"3": "Komm näher und sieh dir meine Flammen an!"
},
"victory": {
"1": "Verbrannt bis zur Asche...",
"2": "Yow! Das ist heiß!",
"3": "Auuu! Ich habe mir die Nasenspitze verbrannt!"
}
},
"sailor": {
"encounter": {
"1": "Matrose, du gehst über Bord, wenn du verlierst!",
"2": "Komm schon! Mein Stolz als Seemann steht auf dem Spiel!",
"3": "Ahoj! Bist du seekrank?"
},
"victory": {
"1": "Argh! Von einem Kind besiegt!",
"2": "Dein Geist hat mich versenkt!",
"3": "Ich glaube, ich bin der der seekrank ist..."
}
},
"rocket_grunt": {
"encounter": {
"1": "Jetzt gibt es Ärger!…\n$und es kommt noch härter!\n$Wir wollen über die Erde regieren…\n$und naja du kennst den Rest…!",
@ -655,86 +655,6 @@
"5": "Du hast mich besiegt, aber Team Flare wird immer in Glanz und Stil erstrahlen."
}
},
"aether_grunt": {
"encounter": {
"1": "Ich werde dich mit allem, was ich habe, bekämpfen. Ich werde dich auslöschen!",
"2": "Mir ist egal, ob du ein simpler Trainer bist oder nicht.\n$Ich werde dich hochkant rauswerfen, wenn du uns bedrohst!",
"3": "Mir wurde gesagt, Trainer abzuweisen, egal wer sie sind!",
"4": "Ich zeige dir die Macht des Æther-Paradies",
"5": "Jetzt da du die Wahre Natur des Æther-Paradies kennst, müssen wir dich leider beseitigen!"
},
"victory": {
"1": "Hmph! Du scheinst ziemlich geschickt zu sein.",
"2": "Was hat das zu bedeuten? Was hat das zu bedeuten!",
"3": "Hey, du bist so stark, dass ich dich nicht abweisen kann!",
"4": "Hmm... Es scheint, als hätte ich verloren.",
"5": "Ich hätte das Blitzdings benutzen sollen..."
}
},
"faba": {
"encounter": {
"1": "Ich bin Regionalleiter Fabian und ich werde dir zeigen, wie hart die Welt sein kann!",
"2": "Die letzte Verteidigungslinie des Æther-Paradieses kämpft gegen einen simplen Trainer?",
"3": "Ich Fabian, bin der Regionalleiter der Æther Foundation.\n$Der einzige auf der Welt, ich bin unersetzlich."
},
"victory": {
"1": "Aiyee!",
"2": "W-w-wie kann das sein?! Wie konnte dieser Trainer...",
"3": "Das ist der Grund... warum ich andere Menschen nicht ausstehen kann."
}
},
"skull_grunt": {
"encounter": {
"1": "Wir sind nicht böse, wir sind einfach nur nicht nett!",
"2": "Willst du Stress, oder was? Das ist unsere Art, Hallo zu sagen! Tschüss, du Punk!",
"3": "Wir sind nur ein paar Typen und Mädels mit großem Interesse an den Pokémon anderer Leute!",
"4": "Wieso machst du einen auf hart, wenn wir schon hart wie Knochen sind, Homie?",
"5": "Yo, platz hier nich rein, ♪ wien wildes Kleinstein! ♪ Wenn du meinst, dass Team Skull ♪\n$an nix denkt als Krawall, ♪ hast du leider nen Knall, ♪ denn das is nich der Fall! ♪\n$Wir wolln hier nur gammeln ♪ und gechillt Staub ansammeln! ♪"
},
"victory": {
"1": "Wie jetzt? Schon vorbei?",
"2": "Woah, lass uns lieber die Kurve kratzen, yo! Kein Bock, hier meinen Schädel zu riskieren...",
"3": "Wir brauchen deine schwachen Pokémon eh nicht!",
"4": "Was? Deine Stärke spür ich bis in die Knochen...",
"5": "Mein Homie und ich sind also weniger wert als Pokémon? Willste uns dissen, oder was?"
}
},
"plumeria": {
"encounter": {
"1": "..Hmph. Du siehst nicht so aus, als wärst du etwas Besonderes.",
"2": "Die blöden Rüpel brauchen viel zu lange, um mit euch gewöhnlichen Trainern fertig zu werden...",
"3": "Lege dich mit irgendjemandem in Team Skull an, und ich zeige dir, wie ernst ich werden kann."
},
"victory": {
"1": "Du bist ziemlich stark. Das muss ich zugeben.",
"2": "Jetzt versteh ich, warum meine Rüpel so viel Zeit damit verschwenden...",
"3": "Ich denke, ich muss diese Niederlage einfach hinnehmen."
}
},
"macro_grunt": {
"encounter": {
"1": "Achtung hier ist Endstation für dich!",
"2": "Du bist ein Trainer, oder? Wir von MC Wertpapiere wissen so etwas.\n$Ich fürchte, das gibt dir trotzdem nicht das Recht, sich in unsere Arbeit einzumischen.",
"3": "Ich bin von MC Versicherungen! Hast du eine Lebensversicherung?"
},
"victory": {
"1": "Ich habe keine andere Wahl, als respektvoll zurückzutreten.",
"2": "Mein Erspartes aufzugeben bringt mich in die roten Zahlen...",
"3": "Okay zurück an die Arbeit. Versicherungen verkauft sich nicht von alleine."
}
},
"oleana": {
"encounter": {
"1": "Ich werde keine Störung von Präsident Roses Plänen zulassen!",
"2": "Du hast es also durch die Mitarbeiter der Tochterunternehmen geschafft,\n$die ich beauftragt habe, um dich aufzuhalten. Ich hätte nichts anderes erwartet.",
"3": "Für den Präsidenten! Ich werde nicht verlieren! \n$Mach dich bereit mit Macro Cosmos Airlines nach Hause zu fliegen!"
},
"victory": {
"1": "Ich habe es nicht geschafft... Olivia... du bist wirklich eine hoffnungslose Frau.",
"2": "Arghhh! Das ist unentschuldbar... Was habe ich mir dabei gedacht...\n$Jeder Trainer, der es so weit geschafft hat, muss ein harter Brocken sein...",
"3": "Ich bin eine müde Olivia... Ob es Macro Cosmos Betten gibt?"
}
},
"rocket_boss_giovanni_1": {
"encounter": {
"1": "Ich bin beeindruckt, du hast es bis hierher geschafft!\n$Ich bin Giovanni, der Anführer von Team Rocket!\n$Wir regieren den Untergrund von Kanto!\n$Und wir lassen sicherlich nicht zu, dass ein Kind uns aufhält!"
@ -867,72 +787,6 @@
"1": "Narren ohne Vision werden weiterhin diese wunderschöne Welt verunreinigen."
}
},
"aether_boss_lusamine_1": {
"encounter": {
"1": "Du wirst mein süßes Biest erschrecken! Wie kannst du nur? Ultra-Besiten sind so niedlich!\n$Es sieht so aus, als müsste ich dich zuerst zum Schweigen bringen."
},
"victory": {
"1": "Wie kann eine Person nur so grausam sein?!"
},
"defeat": {
"1": "Und jetzt, mein süßes Biest, komm zu Mama!"
}
},
"aether_boss_lusamine_2": {
"encounter": {
"1": "Wieso musst du mich weiterhin belästigen?! Ich habe die Nase voll von dir.\n$Du machst mich krank! Genug mit diesem nutzlosen Gerede... \n$Mit der Kraft von Anego, von uns als UB-01 Schmarotzer klassifiziert,\n$werde ich dir zeigen, wie falsch du warst, hierher zu kommen!"
},
"victory": {
"1": "Aaauuuggghhhhhhhhh!!!"
},
"defeat": {
"1": "Alles, was ich will, ist mein kostbares Biest! Der Rest von euch ist mir egal!"
}
},
"skull_boss_guzma_1": {
"encounter": {
"1": "Kein Erbarmen! Keine Gnade! Ich bin dein schlimmster Alptraum! \n$Oh yeah, ich bin der große, böse Bromley!"
},
"victory": {
"1": "Irgendwann mach ich dich platt! Ich hab noch ein Ass im Ärmel. Du wirst schon sehen."
},
"defeat": {
"1": "Du hast den langen Weg hierher DAFÜR aufgenommen? Pah!"
}
},
"skull_boss_guzma_2": {
"encounter": {
"1": "Mir ist egal, wer du bist. Ich mach dich platt!! Das schreibt mir mein Ego vor. Ich bin Bromley!"
},
"victory": {
"1": "Bromley!!! Was ist falsch mit dir?!"
},
"defeat": {
"1": "Ihr seid wirklich selten dämlich."
}
},
"macro_boss_rose_1": {
"encounter": {
"1": "Mein Name ist Rose. Ich bin der Präsident der Galar Pokémon-Liga und Geschäftsführer von Macro Cosmos\n$Ich habe eine Aufgabe, eine Berufung! Ich muss die Galar-Region mit unbegrenzter Energie versorgen,\n$damit sie sich bis in alle Ewigkeit in Frieden fortentwickeln kann!"
},
"victory": {
"1": "Du versteht es einfach nicht...So können wir die Geschichte nicht verändern!"
},
"defeat": {
"1": "Ohne deine Einmischung kann ich jetzt endlich weiterarbeiten!"
}
},
"macro_boss_rose_2": {
"encounter": {
"1": "Ich bin fest entschlossen, das Energieproblem in der Galar-Region\n$und natürlich auf der ganzen Welt zu lösen.\n$Meine Erfahrungen und Erfolge, die Macro Cosmos zu einem Erfolg gemacht haben,\n$sind der Beweis, dass meine Methoden funktionieren.\n$Ich habe nicht vor, meine Meinung zu ändern, selbst wenn ich verliere."
},
"victory": {
"1": "Ich hatte vergessen, wie großartig Pokémon-Kämpfe sind! Es ist so lange her, dass ich gekämpft habe...\n$Das war wirklich befriedigend, ich akzeptiere die Niederlage für diesen Kampf."
},
"defeat": {
"1": "Ich nehme an, es muss den Anschein haben, dass ich etwas Schreckliches tue.\n$Ich erwarte nicht, dass du es verstehst. Aber ich muss der Galar-Region grenzenlose Energie\n$bereitstellen, um ewigen Wohlstand zu gewährleisten."
}
},
"brock": {
"encounter": {
"1": "Meine Expertise in Bezug auf Gesteins-Pokémon wird dich besiegen! Komm schon!",
@ -2601,7 +2455,7 @@
"1": "@c{smile}Hey, du auch hier?\n@c{smile_eclosed}Immernoch ungeschlagen, hmm…?\n$@c{serious_mopen_fists}Ich weiß es sieht so aus, als wäre ich dir hierher gefolgt, aber das ist so nicht ganz richtig.\n$@c{serious_smile_fists}Ehrlicherweise kann ich es, seit du mich damals besiegt hast, garnicht erwarten erneut gegen dich zu kämpfen.\n$Ich habe selbst hart traniert. Ich werde dir diesesmal also ein würdigerer Gegner sein!.\n$@c{serious_mopen_fists}Halt dich nicht zurück, genauso wie beim letzten Mal!\nLos gehts!"
},
"victory": {
"1": "@c{neutral_eclosed}Oh. Ich war also zu sehr von mir überzeugt.\n$@c{smile}Das ist Ok. Ich hatte mir schon gedacht, dass sowas passiert.\n\n$@c{serious_mopen_fists}Es bedeutet einfach, dass ich mich beim nächsten Mal mehr anstrengen muss!\n\n$@c{smile}Nicht, dass du wirklich Hilfe benötigen würdest, aber ich habe hier noch eins von diesen Dingern herumliegen.\n$Du kannst es haben.\n\n$@c{serious_smile_fists}Erwarte aber nicht, dass ich dir noch mehr gebe!\nIch kann meinen Rivalen doch keine Vorteile verschaffen.\n$@c{smile}Egal, pass auf dich auf!"
"1": "@c{neutral_eclosed}Oh. Ich war also zu sehr von mir überzeugt.\n$@c{smile}Das ist Ok. Ich hatte mir schon gedacht, dass sowas passiert.\n\n$@c{serious_mopen_fists}Es bedeutet einfach, dass ich mich beim nächsten Mal mehr anstrengen muss!\n\n$@c{smile}Nicht, dass du wirklich Hilfe benötigen würdest, aber ich habe hier noch eins von diesen Dingern herumliegen.\n$Du kannst es haben.\n\n$@c{serious_smile_fists}Erwarte aber nicht, dass ich dir noch mehr gebe!\nIch kann meinen Rivalen doch keine Vorteile verschaffen.\n$@c{smile}Egal, pass auf dich auf und genieße das Event!"
}
},
"rival_2_female": {
@ -2609,7 +2463,7 @@
"1": "@c{smile_wave}Oh, wie schön dich hier zu trefen. Sieht so aus als wärst du noch ungeschlagen. @c{angry_mopen}Hmm… Nicht schlecht!\n$@c{angry_mopen}Ich weiß was du denkst, und nein, ich habe dich nicht verfolgt. @c{smile_eclosed}Ich bin einfach in der Gegend gewesen.\n$@c{smile_ehalf}Ich freu mich für dich, aber ich muss dich wissen lassen, dass es auch Ok ist ab und zu mal zu verlieren.\n$@c{smile}Wir lernen oft mehr aus unseren Fehlern, als aus unseren Erfolgen.\n$@c{angry_mopen}Auf jeden Fall habe ich für unseren Rückkampf hart traniert. Also zeig mir was du drauf hast!"
},
"victory": {
"1": "@c{neutral}Ich… sollte dieses Mal doch nicht verlieren…\n$@c{smile}Na gut. Das bedeutet ich muss noch härter tranieren!\n$@c{smile_wave}Ich habe noch eins von diesen Dingern!\n@c{smile_wave_wink}Kein Grund mir zu danken~.\n$@c{angry_mopen}Das ist aber das Letzte! Du bekommst ab jett keine Geschenke mehr von mir!\n$@c{smile_wave}Bleib stark!"
"1": "@c{neutral}Ich… sollte dieses Mal doch nicht verlieren…\n$@c{smile}Na gut. Das bedeutet ich muss noch härter tranieren!\n$@c{smile_wave}Ich habe noch eins von diesen Dingern!\n@c{smile_wave_wink}Kein Grund mir zu danken~.\n$@c{angry_mopen}Das ist aber das Letzte! Du bekommst ab jett keine Geschenke mehr von mir!\n$@c{smile_wave}Bleib stark und genieße das Event!"
},
"defeat": {
"1": "Es ist Ok manchmal zu verlieren…"

View File

@ -355,30 +355,6 @@
"1": "Ich werde für das nächste Rennen tunen."
}
},
"firebreather": {
"encounter": {
"1": "Meine Flammen werden dich verschlingen!",
"2": "Meine Seele hat Feuer gefangen. Ich werde dir zeigen, wie heiß sie brennt!",
"3": "Komm näher und sieh dir meine Flammen an!"
},
"victory": {
"1": "Verbrannt bis zur Asche...",
"2": "Yow! Das ist heiß!",
"3": "Auuu! Ich habe mir die Nasenspitze verbrannt!"
}
},
"sailor": {
"encounter": {
"1": "Matrose, du gehst über Bord, wenn du verlierst!",
"2": "Komm schon! Mein Stolz als Seemann steht auf dem Spiel!",
"3": "Ahoj! Bist du seekrank?"
},
"victory": {
"1": "Argh! Von einem Kind besiegt!",
"2": "Dein Geist hat mich versenkt!",
"3": "Ich glaube, ich bin der der seekrank ist..."
}
},
"archer": {
"encounter": {
"1": "Bevor du weitergehst, lass uns sehen, wie du dich gegen uns, Team Rocket, schlägst!",
@ -441,7 +417,7 @@
},
"courtney": {
"encounter": {
"1": "Stellt euch...Mir NICHT...IN DEN WEEEG...!!",
"1": "Das Ding... Das Ding, das du hältst... Das ist es, was...\n$Das ist es, wonach wir von Team Magma suchen...",
"2": "... Nun dann... Auslöschen...",
"3": "...?! Du... Hm... ♪ Das trifft sich ausgezeichnet... ♪\n$Dann hole ich mir eben zuerst deine Pokémon... Her damit..."
},
@ -470,7 +446,7 @@
"3": "Was machst du hier? Bist du uns gefolgt?"
},
"victory": {
"1": "Bwaarharharharhar!! Ich hab zwar verloren, aber das hat Spaß gemacht!",
"1": "Na gut, bis der Boss Zeit für dich hat, werde ich dein Gegner sein!",
"2": "Ich kann es fühlen! Ich kann es spüren, das ist klar! Die Stärke, die von dir ausgeht!\n$Mehr! Ich will noch mehr! Aber es sieht so aus, als hätten wir keine Zeit mehr...",
"3": "Das war Spaß! Ich wusste, dass du mir eine gute Zeit bieten würdest!\n$Ich freue mich darauf, dich eines Tages wieder zu treffen!"
}
@ -559,6 +535,30 @@
"3": "Wunderbar! Bemerkenswert! Deine Fähigkeiten und dein Mut sind lobenswert."
}
},
"firebreather": {
"encounter": {
"1": "Meine Flammen werden dich verschlingen!",
"2": "Meine Seele hat Feuer gefangen. Ich werde dir zeigen, wie heiß sie brennt!",
"3": "Komm näher und sieh dir meine Flammen an!"
},
"victory": {
"1": "Verbrannt bis zur Asche...",
"2": "Yow! Das ist heiß!",
"3": "Auuu! Ich habe mir die Nasenspitze verbrannt!"
}
},
"sailor": {
"encounter": {
"1": "Matrose, du gehst über Bord, wenn du verlierst!",
"2": "Komm schon! Mein Stolz als Seemann steht auf dem Spiel!",
"3": "Ahoj! Bist du seekrank?"
},
"victory": {
"1": "Argh! Von einem Kind besiegt!",
"2": "Dein Geist hat mich versenkt!",
"3": "Ich glaube, ich bin der der seekrank ist..."
}
},
"rocket_grunt": {
"encounter": {
"1": "Jetzt gibt es Ärger!…\n$und es kommt noch härter!\n$Wir wollen über die Erde regieren…\n$und naja du kennst den Rest…!",
@ -655,86 +655,6 @@
"5": "Du hast mich besiegt, aber Team Flare wird immer in Glanz und Stil erstrahlen."
}
},
"aether_grunt": {
"encounter": {
"1": "Ich werde dich mit allem, was ich habe, bekämpfen. Ich werde dich auslöschen!",
"2": "Mir ist egal, ob du ein simpler Trainer bist oder nicht.\n$Ich werde dich hochkant rauswerfen, wenn du uns bedrohst!",
"3": "Mir wurde gesagt, Trainer abzuweisen, egal wer sie sind!",
"4": "Ich zeige dir die Macht des Æther-Paradies",
"5": "Jetzt da du die Wahre Natur des Æther-Paradies kennst, müssen wir dich leider beseitigen!"
},
"victory": {
"1": "Hmph! Du scheinst ziemlich geschickt zu sein.",
"2": "Was hat das zu bedeuten? Was hat das zu bedeuten!",
"3": "Hey, du bist so stark, dass ich dich nicht abweisen kann!",
"4": "Hmm... Es scheint, als hätte ich verloren.",
"5": "Ich hätte das Blitzdings benutzen sollen..."
}
},
"faba": {
"encounter": {
"1": "Ich bin Regionalleiter Fabian und ich werde dir zeigen, wie hart die Welt sein kann!",
"2": "Die letzte Verteidigungslinie des Æther-Paradieses kämpft gegen einen simplen Trainer?",
"3": "Ich Fabian, bin der Regionalleiter der Æther Foundation.\n$Der einzige auf der Welt, ich bin unersetzlich."
},
"victory": {
"1": "Aiyee!",
"2": "W-w-wie kann das sein?! Wie konnte dieser Trainer...",
"3": "Das ist der Grund... warum ich andere Menschen nicht ausstehen kann."
}
},
"skull_grunt": {
"encounter": {
"1": "Wir sind nicht böse, wir sind einfach nur nicht nett!",
"2": "Willst du Stress, oder was? Das ist unsere Art, Hallo zu sagen! Tschüss, du Punk!",
"3": "Wir sind nur ein paar Typen und Mädels mit großem Interesse an den Pokémon anderer Leute!",
"4": "Wieso machst du einen auf hart, wenn wir schon hart wie Knochen sind, Homie?",
"5": "Yo, platz hier nich rein, ♪ wien wildes Kleinstein! ♪ Wenn du meinst, dass Team Skull ♪\n$an nix denkt als Krawall, ♪ hast du leider nen Knall, ♪ denn das is nich der Fall! ♪\n$Wir wolln hier nur gammeln ♪ und gechillt Staub ansammeln! ♪"
},
"victory": {
"1": "Wie jetzt? Schon vorbei?",
"2": "Woah, lass uns lieber die Kurve kratzen, yo! Kein Bock, hier meinen Schädel zu riskieren...",
"3": "Wir brauchen deine schwachen Pokémon eh nicht!",
"4": "Was? Deine Stärke spür ich bis in die Knochen...",
"5": "Mein Homie und ich sind also weniger wert als Pokémon? Willste uns dissen, oder was?"
}
},
"plumeria": {
"encounter": {
"1": "..Hmph. Du siehst nicht so aus, als wärst du etwas Besonderes.",
"2": "Die blöden Rüpel brauchen viel zu lange, um mit euch gewöhnlichen Trainern fertig zu werden...",
"3": "Lege dich mit irgendjemandem in Team Skull an, und ich zeige dir, wie ernst ich werden kann."
},
"victory": {
"1": "Du bist ziemlich stark. Das muss ich zugeben.",
"2": "Jetzt versteh ich, warum meine Rüpel so viel Zeit damit verschwenden...",
"3": "Ich denke, ich muss diese Niederlage einfach hinnehmen."
}
},
"macro_grunt": {
"encounter": {
"1": "Achtung hier ist Endstation für dich!",
"2": "Du bist ein Trainer, oder? Wir von MC Wertpapiere wissen so etwas.\n$Ich fürchte, das gibt dir trotzdem nicht das Recht, sich in unsere Arbeit einzumischen.",
"3": "Ich bin von MC Versicherungen! Hast du eine Lebensversicherung?"
},
"victory": {
"1": "Ich habe keine andere Wahl, als respektvoll zurückzutreten.",
"2": "Mein Erspartes aufzugeben bringt mich in die roten Zahlen...",
"3": "Okay zurück an die Arbeit. Versicherungen verkauft sich nicht von alleine."
}
},
"oleana": {
"encounter": {
"1": "Ich werde keine Störung von Präsident Roses Plänen zulassen!",
"2": "Du hast es also durch die Mitarbeiter der Tochterunternehmen geschafft,\n$die ich beauftragt habe, um dich aufzuhalten. Ich hätte nichts anderes erwartet.",
"3": "Für den Präsidenten! Ich werde nicht verlieren! \n$Mach dich bereit mit Macro Cosmos Airlines nach Hause zu fliegen!"
},
"victory": {
"1": "Ich habe es nicht geschafft... Olivia... du bist wirklich eine hoffnungslose Frau.",
"2": "Arghhh! Das ist unentschuldbar... Was habe ich mir dabei gedacht...\n$Jeder Trainer, der es so weit geschafft hat, muss ein harter Brocken sein...",
"3": "Ich bin eine müde Olivia... Ob es Macro Cosmos Betten gibt?"
}
},
"rocket_boss_giovanni_1": {
"encounter": {
"1": "Ich bin beeindruckt, du hast es bis hierher geschafft!\n$Ich bin Giovanni, der Anführer von Team Rocket!\n$Wir regieren den Untergrund von Kanto!\n$Und wir lassen sicherlich nicht zu, dass ein Kind uns aufhält!"
@ -867,72 +787,6 @@
"1": "Narren ohne Vision werden weiterhin diese wunderschöne Welt verunreinigen."
}
},
"aether_boss_lusamine_1": {
"encounter": {
"1": "Du wirst mein süßes Biest erschrecken! Wie kannst du nur? Ultra-Besiten sind so niedlich!\n$Es sieht so aus, als müsste ich dich zuerst zum Schweigen bringen."
},
"victory": {
"1": "Wie kann eine Person nur so grausam sein?!"
},
"defeat": {
"1": "Und jetzt, mein süßes Biest, komm zu Mama!"
}
},
"aether_boss_lusamine_2": {
"encounter": {
"1": "Wieso musst du mich weiterhin belästigen?! Ich habe die Nase voll von dir.\n$Du machst mich krank! Genug mit diesem nutzlosen Gerede... \n$Mit der Kraft von Anego, von uns als UB-01 Schmarotzer klassifiziert,\n$werde ich dir zeigen, wie falsch du warst, hierher zu kommen!"
},
"victory": {
"1": "Aaauuuggghhhhhhhhh!!!"
},
"defeat": {
"1": "Alles, was ich will, ist mein kostbares Biest! Der Rest von euch ist mir egal!"
}
},
"skull_boss_guzma_1": {
"encounter": {
"1": "Kein Erbarmen! Keine Gnade! Ich bin dein schlimmster Alptraum! \n$Oh yeah, ich bin der große, böse Bromley!"
},
"victory": {
"1": "Irgendwann mach ich dich platt! Ich hab noch ein Ass im Ärmel. Du wirst schon sehen."
},
"defeat": {
"1": "Du hast den langen Weg hierher DAFÜR aufgenommen? Pah!"
}
},
"skull_boss_guzma_2": {
"encounter": {
"1": "Mir ist egal, wer du bist. Ich mach dich platt!! Das schreibt mir mein Ego vor. Ich bin Bromley!"
},
"victory": {
"1": "Bromley!!! Was ist falsch mit dir?!"
},
"defeat": {
"1": "Ihr seid wirklich selten dämlich."
}
},
"macro_boss_rose_1": {
"encounter": {
"1": "Mein Name ist Rose. Ich bin der Präsident der Galar Pokémon-Liga und Geschäftsführer von Macro Cosmos\n$Ich habe eine Aufgabe, eine Berufung! Ich muss die Galar-Region mit unbegrenzter Energie versorgen,\n$damit sie sich bis in alle Ewigkeit in Frieden fortentwickeln kann!"
},
"victory": {
"1": "Du versteht es einfach nicht...So können wir die Geschichte nicht verändern!"
},
"defeat": {
"1": "Ohne deine Einmischung kann ich jetzt endlich weiterarbeiten!"
}
},
"macro_boss_rose_2": {
"encounter": {
"1": "Ich bin fest entschlossen, das Energieproblem in der Galar-Region\n$und natürlich auf der ganzen Welt zu lösen.\n$Meine Erfahrungen und Erfolge, die Macro Cosmos zu einem Erfolg gemacht haben,\n$sind der Beweis, dass meine Methoden funktionieren.\n$Ich habe nicht vor, meine Meinung zu ändern, selbst wenn ich verliere."
},
"victory": {
"1": "Ich hatte vergessen, wie großartig Pokémon-Kämpfe sind! Es ist so lange her, dass ich gekämpft habe...\n$Das war wirklich befriedigend, ich akzeptiere die Niederlage für diesen Kampf."
},
"defeat": {
"1": "Ich nehme an, es muss den Anschein haben, dass ich etwas Schreckliches tue.\n$Ich erwarte nicht, dass du es verstehst. Aber ich muss der Galar-Region grenzenlose Energie\n$bereitstellen, um ewigen Wohlstand zu gewährleisten."
}
},
"brock": {
"encounter": {
"1": "Meine Expertise in Bezug auf Gesteins-Pokémon wird dich besiegen! Komm schon!",
@ -2585,7 +2439,7 @@
"1": "@c{smile}Hey, ich habe dich gesucht! Ich weiß, dass du es nicht erwarten konntest loszugehen,\n$aber hättest ja wenigstens Tschüss sagen können...\n$@c{smile_eclosed}Du verfolgst also wirklich deinen Traum?\nIch kann es kaum glauben.\n$@c{serious_smile_fists}Da wir schon einmal hier sind, wie wäre es mit einem Kampf?\nImmerhin muss ich doch sicherstellen, dass du bereit bist.\n$@c{serious_mopen_fists}Halte dich nicht zurück, zeig mir alles was du hast!"
},
"victory": {
"1": "@c{shock}Wow…Du hast mich komplett überrumpelt.\nBist du wirklich ein Anfänger?\n$@c{smile}Vielleicht war es einfach etwas Glück, aber…\nWer weiß, vielleicht schaffst du es irgendwann\n$ja wirklich ganz groß raus zu kommen.\n$Übrigens, der Professor hat mich gebeten dir diese Items zu geben. Die sehen wirklich cool aus.\n$@c{serious_smile_fists}Viel Glück da draußen!"
"1": "@c{shock}Wow…Du hast mich komplett überrumpelt.\nBist du wirklich ein Anfänger?\n$@c{smile}Vielleicht war es einfach etwas Glück, aber…\nWer weiß, vielleicht schaffst du es irgendwann\n$ja wirklich ganz groß raus zu kommen.\n$Übrigens, der Professor hat mich gebeten dir diese Items zu geben. Die sehen wirklich cool aus.\n$@c{serious_smile_fists}Viel Glück da draußen!\n$@c{smile}Oh-und genieße das Event!"
}
},
"rival_female": {
@ -2593,7 +2447,7 @@
"1": "@c{smile_wave}Da bist du! Ich habe schon überall nach dir gesucht!\n@c{angry_mopen}Hast du etwas vergessen\n$deiner besten Freundin Tschüss zu sagen?\n$@c{smile_ehalf}Du folgst deinem Traum, oder?\nDas ist wirklich heute…\n$@c{smile}Naja, ich vergeben dir, dass du mich vergessen hast, aber nur unter einer Bedingung. @c{smile_wave_wink}Du musst gegen mich kämpfen!\n$@c{angry_mopen}Gib alles! Wir wollen doch nicht, dass dein Abenteuer endet bevor es begonnen hat, richtig?"
},
"victory": {
"1": "@c{shock}Du hast gerade erst angefangen und bist schon so stark?!@d{96} @c{angry}Du hast sowas von betrogen, oder?\n$@c{smile_wave_wink}Ich mach nur Spaß!@d{64} @c{smile_eclosed}Ich habe ehrlich verloren… Ich habe das Gefühl, dass du es dort draußen weit bringen wirst.\n$@c{smile}Übrigens, der Professor hat mich gebeten dir diese Items zu geben. Ich hoffe sie sind hilfreich!\n$@c{smile_wave}Gib wie immer dein Bestes! Ich glaube an dich!"
"1": "@c{shock}Du hast gerade erst angefangen und bist schon so stark?!@d{96} @c{angry}Du hast sowas von betrogen, oder?\n$@c{smile_wave_wink}Ich mach nur Spaß!@d{64} @c{smile_eclosed}Ich habe ehrlich verloren… Ich habe das Gefühl, dass du es dort draußen weit bringen wirst.\n$@c{smile}Übrigens, der Professor hat mich gebeten dir diese Items zu geben. Ich hoffe sie sind hilfreich!\n$@c{smile_wave}Gib wie immer dein Bestes! Ich glaube an dich!\n$@c{smile}Oh-und genieße das Event!"
}
},
"rival_2": {
@ -2601,7 +2455,7 @@
"1": "@c{smile}Hey, du auch hier?\n@c{smile_eclosed}Immernoch ungeschlagen, hmm…?\n$@c{serious_mopen_fists}Ich weiß es sieht so aus, als wäre ich dir hierher gefolgt, aber das ist so nicht ganz richtig.\n$@c{serious_smile_fists}Ehrlicherweise kann ich es, seit du mich damals besiegt hast, garnicht erwarten erneut gegen dich zu kämpfen.\n$Ich habe selbst hart traniert. Ich werde dir diesesmal also ein würdigerer Gegner sein!.\n$@c{serious_mopen_fists}Halt dich nicht zurück, genauso wie beim letzten Mal!\nLos gehts!"
},
"victory": {
"1": "@c{neutral_eclosed}Oh. Ich war also zu sehr von mir überzeugt.\n$@c{smile}Das ist Ok. Ich hatte mir schon gedacht, dass sowas passiert.\n\n$@c{serious_mopen_fists}Es bedeutet einfach, dass ich mich beim nächsten Mal mehr anstrengen muss!\n\n$@c{smile}Nicht, dass du wirklich Hilfe benötigen würdest, aber ich habe hier noch eins von diesen Dingern herumliegen.\n$Du kannst es haben.\n\n$@c{serious_smile_fists}Erwarte aber nicht, dass ich dir noch mehr gebe!\nIch kann meinen Rivalen doch keine Vorteile verschaffen.\n$@c{smile}Egal, pass auf dich auf!"
"1": "@c{neutral_eclosed}Oh. Ich war also zu sehr von mir überzeugt.\n$@c{smile}Das ist Ok. Ich hatte mir schon gedacht, dass sowas passiert.\n\n$@c{serious_mopen_fists}Es bedeutet einfach, dass ich mich beim nächsten Mal mehr anstrengen muss!\n\n$@c{smile}Nicht, dass du wirklich Hilfe benötigen würdest, aber ich habe hier noch eins von diesen Dingern herumliegen.\n$Du kannst es haben.\n\n$@c{serious_smile_fists}Erwarte aber nicht, dass ich dir noch mehr gebe!\nIch kann meinen Rivalen doch keine Vorteile verschaffen.\n$@c{smile}Egal, pass auf dich auf und genieße das Event!"
}
},
"rival_2_female": {
@ -2609,7 +2463,7 @@
"1": "@c{smile_wave}Oh, wie schön dich hier zu trefen. Sieht so aus als wärst du noch ungeschlagen. @c{angry_mopen}Hmm… Nicht schlecht!\n$@c{angry_mopen}Ich weiß was du denkst, und nein, ich habe dich nicht verfolgt. @c{smile_eclosed}Ich bin einfach in der Gegend gewesen.\n$@c{smile_ehalf}Ich freu mich für dich, aber ich muss dich wissen lassen, dass es auch Ok ist ab und zu mal zu verlieren.\n$@c{smile}Wir lernen oft mehr aus unseren Fehlern, als aus unseren Erfolgen.\n$@c{angry_mopen}Auf jeden Fall habe ich für unseren Rückkampf hart traniert. Also zeig mir was du drauf hast!"
},
"victory": {
"1": "@c{neutral}Ich… sollte dieses Mal doch nicht verlieren…\n$@c{smile}Na gut. Das bedeutet ich muss noch härter tranieren!\n$@c{smile_wave}Ich habe noch eins von diesen Dingern!\n@c{smile_wave_wink}Kein Grund mir zu danken~.\n$@c{angry_mopen}Das ist aber das Letzte! Du bekommst ab jett keine Geschenke mehr von mir!\n$@c{smile_wave}Bleib stark!"
"1": "@c{neutral}Ich… sollte dieses Mal doch nicht verlieren…\n$@c{smile}Na gut. Das bedeutet ich muss noch härter tranieren!\n$@c{smile_wave}Ich habe noch eins von diesen Dingern!\n@c{smile_wave_wink}Kein Grund mir zu danken~.\n$@c{angry_mopen}Das ist aber das Letzte! Du bekommst ab jett keine Geschenke mehr von mir!\n$@c{smile_wave}Bleib stark und genieße das Event!"
},
"defeat": {
"1": "Es ist Ok manchmal zu verlieren…"

View File

@ -13,32 +13,5 @@
"metFragment": {
"normal": "Herkunft: {{biome}}\nMit Lv. {{level}} erhalten.",
"apparently": "Herkunft: {{biome}}\nOffenbar mit Lv. {{level}} erhalten."
},
"natureFragment": {
"Hardy": "{{nature}}",
"Lonely": "{{nature}}",
"Brave": "{{nature}}",
"Adamant": "{{nature}}",
"Naughty": "{{nature}}",
"Bold": "{{nature}}",
"Docile": "{{nature}}",
"Relaxed": "{{nature}}",
"Impish": "{{nature}}",
"Lax": "{{nature}}",
"Timid": "{{nature}}",
"Hasty": "{{nature}}",
"Serious": "{{nature}}",
"Jolly": "{{nature}}",
"Naive": "{{nature}}",
"Modest": "{{nature}}",
"Mild": "{{nature}}",
"Quiet": "{{nature}}",
"Bashful": "{{nature}}",
"Rash": "{{nature}}",
"Calm": "{{nature}}",
"Gentle": "{{nature}}",
"Sassy": "{{nature}}",
"Careful": "{{nature}}",
"Quirky": "{{nature}}"
}
}

View File

@ -63,7 +63,6 @@
"bgmVolume": "Hintergrundmusik",
"fieldVolume": "Rufe & Attacken",
"seVolume": "Spezialeffekte",
"uiVolume": "Benutzeroberfläche",
"musicPreference": "Musik Präferenz",
"mixed": "Gemischt",
"gamepadPleasePlug": "Bitte einen Controller anschließen oder eine Taste drücken.",

View File

@ -117,14 +117,5 @@
"plasma_grunts": "Rüpel von Team Plasma",
"flare_grunt": "Rüpel von Team Flare",
"flare_grunt_female": "Rüpel von Team Flare",
"flare_grunts": "Rüpel von Team Flare",
"aether_grunt": "Æther Foundation Personal",
"aether_grunt_female": "Æther Foundation Personal",
"aether_grunts": "Æther Foundation Personal",
"skull_grunt": "Rüpel von Team Skull",
"skull_grunt_female": "Rüpel von Team Skull",
"skull_grunts": "Rüpel von Team Skull",
"macro_grunt": "Angestellter von Macro Cosmos",
"macro_grunt_female": "Angestellte von Macro Cosmos",
"macro_grunts": "Angestellte von Macro Cosmos"
"flare_grunts": "Rüpel von Team Flare"
}

View File

@ -139,18 +139,12 @@
"rood": "Rubius",
"xerosic": "Xeros",
"bryony": "Begonia",
"faba": "Fabian",
"plumeria": "Fran",
"oleana": "Olivia",
"maxie": "Marc",
"archie": "Adrian",
"cyrus": "Zyrus",
"ghetsis": "G-Cis",
"lysandre": "Flordelis",
"lusamine": "Samantha",
"guzma": "Bromley",
"rose": "Rose",
"blue_red_double": "Blau & Rot",
"red_blue_double": "Rot & Blau",

View File

@ -16,9 +16,6 @@
"galactic_boss": "Galaktik-Boss",
"plasma_boss": "Weiser von Team Plasma",
"flare_boss": "Flare-Boss",
"aether_boss": "Æther-Präsidentin",
"skull_boss": "Skull-Boss",
"macro_boss": "Geschäftsführer von Macro Cosmos",
"rocket_admin": "Team Rocket Vorstand",
"rocket_admin_female": "Team Rocket Vorstand",
"magma_admin": "Team Magma Vorstand",
@ -30,9 +27,5 @@
"plasma_sage": "Weiser von Team Plasma",
"plasma_admin": "Team Plasma Vorstand",
"flare_admin": "Team Flare Vorstand",
"flare_admin_female": "Team Flare Vorstand",
"aether_admin": "Æther-Regionalleiter",
"skull_admin": "Team Skull Vorstand",
"macro_admin": "Vizepräsidentin von Macro Cosmos"
"flare_admin_female": "Team Flare Vorstand"
}

View File

@ -42,7 +42,7 @@
"learnMoveNotLearned": "{{pokemonName}} did not learn the\nmove {{moveName}}.",
"learnMoveForgetQuestion": "Which move should be forgotten?",
"learnMoveForgetSuccess": "{{pokemonName}} forgot how to\nuse {{moveName}}.",
"countdownPoof": "@d{32}1, @d{15}2, and@d{15}… @d{15}… @d{15}… @d{15}@s{se/pb_bounce_1}Poof!",
"countdownPoof": "@d{32}1, @d{15}2, and@d{15}… @d{15}… @d{15}… @d{15}@s{pb_bounce_1}Poof!",
"learnMoveAnd": "And…",
"levelCapUp": "The level cap\nhas increased to {{levelCap}}!",
"moveNotImplemented": "{{moveName}} is not yet implemented and cannot be selected.",

View File

@ -80,21 +80,11 @@
"battle_galactic_grunt": "BDSP Team Galactic Battle",
"battle_plasma_grunt": "BW Team Plasma Battle",
"battle_flare_grunt": "XY Team Flare Battle",
"battle_aether_grunt": "SM Aether Foundation Battle",
"battle_skull_grunt": "SM Team Skull Battle",
"battle_macro_grunt": "SWSH Trainer Battle",
"battle_galactic_admin": "BDSP Team Galactic Admin Battle",
"battle_skull_admin": "SM Team Skull Admin Battle",
"battle_oleana": "SWSH Oleana Battle",
"battle_rocket_boss": "USUM Giovanni Battle",
"battle_aqua_magma_boss": "ORAS Archie & Maxie Battle",
"battle_galactic_boss": "BDSP Cyrus Battle",
"battle_plasma_boss": "B2W2 Ghetsis Battle",
"battle_flare_boss": "XY Lysandre Battle",
"battle_aether_boss": "SM Lusamine Battle",
"battle_skull_boss": "SM Guzma Battle",
"battle_macro_boss": "SWSH Rose Battle",
"abyss": "PMD EoS Dark Crater",
"badlands": "PMD EoS Barren Valley",
"beach": "PMD EoS Drenched Bluff",

View File

@ -655,86 +655,6 @@
"5": "You may have beaten me, but when I lose, I go out in style!"
}
},
"aether_grunt": {
"encounter": {
"1": "I'll fight you with all I have to wipe you out!",
"2": "I don't care if you're a kid or what. I'll send you flying if you threaten us!",
"3": "I was told to turn away Trainers, whomever they might be!",
"4": "I'll show you the power of Aether Paradise!",
"5": "Now that you've learned of the darkness at the heart of Aether Paradise, we'll need you to conveniently disappear!"
},
"victory": {
"1": "Hmph! You seem to have a lot of skill.",
"2": "What does this mean? What does this mean!",
"3": "Hey! You're so strong that there's no way I can turn you away!",
"4": "Hmm... It seems as though I may have lost.",
"5": "Here's an impression for you: Aiyee!"
}
},
"faba": {
"encounter": {
"1": "I, Branch Chief Faba, shall show you the harshness of the real world!",
"2": "The man who is called Aether Paradise's last line of defense is to battle a mere child?",
"3": "I, Faba, am the Aether Branch Chief. The only one in the world, I'm irreplaceable."
},
"victory": {
"1": "Aiyee!",
"2": "H-h-how can this be?! How could this child...",
"3": "This is why... This is why I can't bring myself to like children."
}
},
"skull_grunt": {
"encounter": {
"1": "We're not bad-we're just hard!",
"2": "You want some? That's how we say hello! Nice knowing you, punks!",
"3": "We're just a bunch of guys and gals with a great interest in other people's Pokémon!",
"4": "Why you trying to act hard when we're already hard as bones out here, homie?",
"5": "Team Skull represent! We can't pay the rent! Had a lot of fun, but our youth was misspent!"
},
"victory": {
"1": "Huh? Is it over already?",
"2": "Time for us to break out, yo! Gotta tell y'all peace out, yo!",
"3": "We don't need your wack Pokémon anyway!",
"4": "Wha-?! This kid's way too strong-no bones about it!",
"5": "So, what? I'm lower than a Pokémon?! I already got self-esteem issues, man."
}
},
"plumeria": {
"encounter": {
"1": " ...Hmph. You don't look like anything special to me.",
"2": "It takes these dumb Grunts way too long to deal with you kids...",
"3": "Mess with anyone in Team Skull, and I'll show you how serious I can get."
},
"victory": {
"1": "Hmmph! You're pretty strong. I'll give you that.",
"2": "Hmmph. Guess you are pretty tough. Now I understand why my Grunts waste so much time battling kids.",
"3": "Hmmph! I guess I just have to hold that loss."
}
},
"macro_grunt": {
"encounter": {
"1": "It looks like this is the end of the line for you!",
"2": "You are a trainer aren't you? I'm afraid that doesn't give you the right to interfere in our work.",
"3": "I'm from Macro Cosmos Insurance! Do you have a life insurance policy?"
},
"victory": {
"1": "I have little choice but to respectfully retreat.",
"2": "Having to give up my pocket money... Losing means I'm back in the red...",
"3": "Nobody can beat Macro Cosmos when it comes to our dedication to our work!"
}
},
"oleana": {
"encounter": {
"1": "I won't let anyone interfere with Mr. Rose's plan!",
"2": "So, you got through all of the special staff that I had ordered to stop you. I would expect nothing less.",
"3": "For the chairman! I won't lose!"
},
"victory": {
"1": "*sigh* I wasn't able to win... Oleana...you really are a hopeless woman.",
"2": "Arghhh! This is inexcusable... What was I thinking... Any trainer who's made it this far would be no pushover..",
"3": "*sigh* I am one tired Oleana..."
}
},
"rocket_boss_giovanni_1": {
"encounter": {
"1": "So! I must say, I am impressed you got here!"
@ -867,72 +787,6 @@
"1": "Fools with no vision will continue to befoul this beautiful world."
}
},
"aether_boss_lusamine_1": {
"encounter": {
"1": "You're going to startle my sweet beast! It looks like I'll need to silence you first."
},
"victory": {
"1": "How... how can you be so awful!"
},
"defeat": {
"1": "Hmph..."
}
},
"aether_boss_lusamine_2": {
"encounter": {
"1": "Why must you continue to pester me?! I am sick of you. Sick through and through!\n$Enough with this useless talk.. with Nihilego's power I will show you how wrong you were to come here!"
},
"victory": {
"1": "Aaauuuggghhhhhhhhh!!!"
},
"defeat": {
"1": "All that I want is my precious beast! I don't care about any of the rest of you!"
}
},
"skull_boss_guzma_1": {
"encounter": {
"1": "The hated boss who beats you down and beats you down and never lets up...\n$Yeah. Big bad Guzma is here!"
},
"victory": {
"1": "Tch. I'm gonna beat you down one of these days!"
},
"defeat": {
"1": "And you came all the way out here just for that, huh?"
}
},
"skull_boss_guzma_2": {
"encounter": {
"1": "Doesn't matter who I'm up against, I'm gonna beat them down!\n$That's what big bad Guzma is all about!"
},
"victory": {
"1": "Guzma!!! What is wrong with you?!"
},
"defeat": {
"1": "Y'all are stupid!"
}
},
"macro_boss_rose_1": {
"encounter": {
"1": "I must provide limitless energy to ensure everlasting prosperity for everyone...\n$It is my purpose, my duty, my destiny!"
},
"victory": {
"1": "You still don't understand, trainer...\n$We... No, I am going to change the course of history!"
},
"defeat": {
"1": "You still don't understand a thing!"
}
},
"macro_boss_rose_2": {
"encounter": {
"1": "I'm committed to solving the energy problem in the Galar region—and, of course, around the world.\n$My experience and accomplishments that made Macro Cosmos a success are proof my methods work.\n$I don't intend to change my mind, even if I lose."
},
"victory": {
"1": "I'd forgotten how great Pokémon battles are! It's been so long since I battled...\n$That sure was satisfying, I accept defeat for this battle."
},
"defeat": {
"1": "I suppose it must seem that I am doing something terrible. I don't expect you to understand.\n$But I must provide the Galar region with limitless energy to ensure everlasting prosperity."
}
},
"stat_trainer_buck": {
"encounter": {
"1": "...I'm telling you right now. I'm seriously tough. Act surprised!",

View File

@ -655,86 +655,6 @@
"5": "You may have beaten me, but when I lose, I go out in style!"
}
},
"aether_grunt": {
"encounter": {
"1": "I'll fight you with all I have to wipe you out!",
"2": "I don't care if you're a kid or what. I'll send you flying if you threaten us!",
"3": "I was told to turn away Trainers, whomever they might be!",
"4": "I'll show you the power of Aether Paradise!",
"5": "Now that you've learned of the darkness at the heart of Aether Paradise, we'll need you to conveniently disappear!"
},
"victory": {
"1": "Hmph! You seem to have a lot of skill.",
"2": "What does this mean? What does this mean!",
"3": "Hey! You're so strong that there's no way I can turn you away!",
"4": "Hmm... It seems as though I may have lost.",
"5": "Here's an impression for you: Aiyee!"
}
},
"faba": {
"encounter": {
"1": "I, Branch Chief Faba, shall show you the harshness of the real world!",
"2": "The man who is called Aether Paradise's last line of defense is to battle a mere child?",
"3": "I, Faba, am the Aether Branch Chief. The only one in the world, I'm irreplaceable."
},
"victory": {
"1": "Aiyee!",
"2": "H-h-how can this be?! How could this child...",
"3": "This is why... This is why I can't bring myself to like children."
}
},
"skull_grunt": {
"encounter": {
"1": "We're not bad-we're just hard!",
"2": "You want some? That's how we say hello! Nice knowing you, punks!",
"3": "We're just a bunch of guys and gals with a great interest in other people's Pokémon!",
"4": "Why you trying to act hard when we're already hard as bones out here, homie?",
"5": "Team Skull represent! We can't pay the rent! Had a lot of fun, but our youth was misspent!"
},
"victory": {
"1": "Huh? Is it over already?",
"2": "Time for us to break out, yo! Gotta tell y'all peace out, yo!",
"3": "We don't need your wack Pokémon anyway!",
"4": "Wha-?! This kid's way too strong-no bones about it!",
"5": "So, what? I'm lower than a Pokémon?! I already got self-esteem issues, man."
}
},
"plumeria": {
"encounter": {
"1": " ...Hmph. You don't look like anything special to me.",
"2": "It takes these dumb Grunts way too long to deal with you kids..",
"3": "Mess with anyone in Team Skull, and I'll show you how serious I can get."
},
"victory": {
"1": "Hmmph! You're pretty strong. I'll give you that.",
"2": "Hmmph. Guess you are pretty tough. Now I understand why my Grunts waste so much time battling kids.",
"3": "Hmmph! I guess I just have to hold that loss."
}
},
"macro_grunt": {
"encounter": {
"1": "It looks like this is the end of the line for you!",
"2": "You are a trainer aren't you? I'm afraid that doesn't give you the right to interfere in our work.",
"3": "I'm from Macro Cosmos Insurance! Do you have a life insurance policy?"
},
"victory": {
"1": "I have little choice but to respectfully retreat.",
"2": "Having to give up my pocket money... Losing means I'm back in the red...",
"3": "Nobody can beat Macro Cosmos when it comes to our dedication to our work!"
}
},
"oleana": {
"encounter": {
"1": "I won't let anyone interfere with Mr. Rose's plan!",
"2": "So, you got through all of the special staff that I had ordered to stop you. I would expect nothing less.",
"3": "For the chairman! I won't lose!"
},
"victory": {
"1": "*sigh* I wasn't able to win... Oleana...you really are a hopeless woman.",
"2": "Arghhh! This is inexcusable... What was I thinking... Any trainer who's made it this far would be no pushover..",
"3": "*sigh* I am one tired Oleana..."
}
},
"rocket_boss_giovanni_1": {
"encounter": {
"1": "So! I must say, I am impressed you got here!"
@ -867,72 +787,6 @@
"1": "Fools with no vision will continue to befoul this beautiful world."
}
},
"aether_boss_lusamine_1": {
"encounter": {
"1": "You're going to startle my sweet beast! It looks like I'll need to silence you first."
},
"victory": {
"1": "How... how can you be so awful!"
},
"defeat": {
"1": "Hmph..."
}
},
"aether_boss_lusamine_2": {
"encounter": {
"1": "Why must you continue to pester me?! I am sick of you. Sick through and through!\n$Enough with this useless talk.. with Nihilego's power I will show you how wrong you were to come here!"
},
"victory": {
"1": "Aaauuuggghhhhhhhhh!!!"
},
"defeat": {
"1": "All that I want is my precious beast! I don't care about any of the rest of you!"
}
},
"skull_boss_guzma_1": {
"encounter": {
"1": "The hated boss who beats you down and beats you down and never lets up...\n$Yeah. Big bad Guzma is here!"
},
"victory": {
"1": "Tch. I'm gonna beat you down one of these days!"
},
"defeat": {
"1": "And you came all the way out here just for that, huh?"
}
},
"skull_boss_guzma_2": {
"encounter": {
"1": "Doesn't matter who I'm up against, I'm gonna beat them down!\n$That's what big bad Guzma is all about!"
},
"victory": {
"1": "Guzma!!! What is wrong with you?!"
},
"defeat": {
"1": "Y'all are stupid!"
}
},
"macro_boss_rose_1": {
"encounter": {
"1": "I must provide limitless energy to ensure everlasting prosperity for everyone...\n$It is my purpose, my duty, my destiny!"
},
"victory": {
"1": "You still don't understand, trainer...\n$We... No, I am going to change the course of history!"
},
"defeat": {
"1": "You still don't understand a thing!"
}
},
"macro_boss_rose_2": {
"encounter": {
"1": "I'm committed to solving the energy problem in the Galar region—and, of course, around the world.\n$My experience and accomplishments that made Macro Cosmos a success are proof my methods work.\n$I don't intend to change my mind, even if I lose."
},
"victory": {
"1": "I'd forgotten how great Pokémon battles are! It's been so long since I battled...\n$That sure was satisfying, I accept defeat for this battle."
},
"defeat": {
"1": "I suppose it must seem that I am doing something terrible. I don't expect you to understand.\n$But I must provide the Galar region with limitless energy to ensure everlasting prosperity."
}
},
"stat_trainer_buck": {
"encounter": {
"1": "...I'm telling you right now. I'm seriously tough. Act surprised!",

View File

@ -1,32 +1,31 @@
import lostAtSea from "./mystery-encounters/lost-at-sea-dialogue.json";
import mysteriousChest from "#app/locales/en/mystery-encounters/mysterious-chest-dialogue.json";
import mysteriousChallengers from "#app/locales/en/mystery-encounters/mysterious-challengers-dialogue.json";
import darkDeal from "#app/locales/en/mystery-encounters/dark-deal-dialogue.json";
import departmentStoreSale from "#app/locales/en/mystery-encounters/department-store-sale-dialogue.json";
import fieldTrip from "#app/locales/en/mystery-encounters/field-trip-dialogue.json";
import fieryFallout from "#app/locales/en/mystery-encounters/fiery-fallout-dialogue.json";
import fightOrFlight from "#app/locales/en/mystery-encounters/fight-or-flight-dialogue.json";
import safariZone from "#app/locales/en/mystery-encounters/safari-zone-dialogue.json";
import shadyVitaminDealer from "#app/locales/en/mystery-encounters/shady-vitamin-dealer-dialogue.json";
import slumberingSnorlax from "#app/locales/en/mystery-encounters/slumbering-snorlax-dialogue.json";
import trainingSession from "#app/locales/en/mystery-encounters/training-session-dialogue.json";
import theStrongStuff from "#app/locales/en/mystery-encounters/the-strong-stuff-dialogue.json";
import pokemonSalesman from "#app/locales/en/mystery-encounters/the-pokemon-salesman-dialogue.json";
import offerYouCantRefuse from "#app/locales/en/mystery-encounters/an-offer-you-cant-refuse-dialogue.json";
import delibirdy from "#app/locales/en/mystery-encounters/delibirdy-dialogue.json";
import absoluteAvarice from "#app/locales/en/mystery-encounters/absolute-avarice-dialogue.json";
import aTrainersTest from "#app/locales/en/mystery-encounters/a-trainers-test-dialogue.json";
import trashToTreasure from "#app/locales/en/mystery-encounters/trash-to-treasure-dialogue.json";
import berriesAbound from "#app/locales/en/mystery-encounters/berries-abound-dialogue.json";
import clowningAround from "#app/locales/en/mystery-encounters/clowning-around-dialogue.json";
import partTimer from "#app/locales/en/mystery-encounters/part-timer-dialogue.json";
import dancingLessons from "#app/locales/en/mystery-encounters/dancing-lessons-dialogue.json";
import weirdDream from "#app/locales/en/mystery-encounters/weird-dream-dialogue.json";
import theWinstrateChallenge from "#app/locales/en/mystery-encounters/the-winstrate-challenge-dialogue.json";
import teleportingHijinks from "#app/locales/en/mystery-encounters/teleporting-hijinks-dialogue.json";
import bugTypeSuperfan from "#app/locales/en/mystery-encounters/bug-type-superfan-dialogue.json";
import funAndGames from "#app/locales/en/mystery-encounters/fun-and-games-dialogue.json";
import uncommonBreed from "#app/locales/en/mystery-encounters/uncommon-breed-dialogue.json";
import lostAtSeaDialogue from "./mystery-encounters/lost-at-sea-dialogue.json";
import mysteriousChestDialogue from "#app/locales/en/mystery-encounters/mysterious-chest-dialogue.json";
import mysteriousChallengersDialogue from "#app/locales/en/mystery-encounters/mysterious-challengers-dialogue.json";
import darkDealDialogue from "#app/locales/en/mystery-encounters/dark-deal-dialogue.json";
import departmentStoreSaleDialogue from "#app/locales/en/mystery-encounters/department-store-sale-dialogue.json";
import fieldTripDialogue from "#app/locales/en/mystery-encounters/field-trip-dialogue.json";
import fieryFalloutDialogue from "#app/locales/en/mystery-encounters/fiery-fallout-dialogue.json";
import fightOrFlightDialogue from "#app/locales/en/mystery-encounters/fight-or-flight-dialogue.json";
import safariZoneDialogue from "#app/locales/en/mystery-encounters/safari-zone-dialogue.json";
import shadyVitaminDealerDialogue from "#app/locales/en/mystery-encounters/shady-vitamin-dealer-dialogue.json";
import slumberingSnorlaxDialogue from "#app/locales/en/mystery-encounters/slumbering-snorlax-dialogue.json";
import trainingSessionDialogue from "#app/locales/en/mystery-encounters/training-session-dialogue.json";
import theStrongStuffDialogue from "#app/locales/en/mystery-encounters/the-strong-stuff-dialogue.json";
import thePokemonSalesmanDialogue from "#app/locales/en/mystery-encounters/the-pokemon-salesman-dialogue.json";
import anOfferYouCantRefuseDialogue from "#app/locales/en/mystery-encounters/an-offer-you-cant-refuse-dialogue.json";
import delibirdyDialogue from "#app/locales/en/mystery-encounters/delibirdy-dialogue.json";
import absoluteAvariceDialogue from "#app/locales/en/mystery-encounters/absolute-avarice-dialogue.json";
import aTrainersTestDialogue from "#app/locales/en/mystery-encounters/a-trainers-test-dialogue.json";
import trashToTreasureDialogue from "#app/locales/en/mystery-encounters/trash-to-treasure-dialogue.json";
import berriesAboundDialogue from "#app/locales/en/mystery-encounters/berries-abound-dialogue.json";
import clowningAroundDialogue from "#app/locales/en/mystery-encounters/clowning-around-dialogue.json";
import partTimerDialogue from "#app/locales/en/mystery-encounters/part-timer-dialogue.json";
import dancingLessonsDialogue from "#app/locales/en/mystery-encounters/dancing-lessons-dialogue.json";
import weirdDreamDialogue from "#app/locales/en/mystery-encounters/weird-dream-dialogue.json";
import theWinstrateChallengeDialogue from "#app/locales/en/mystery-encounters/the-winstrate-challenge-dialogue.json";
import teleportingHijinksDialogue from "#app/locales/en/mystery-encounters/teleporting-hijinks-dialogue.json";
import bugTypeSuperfanDialogue from "#app/locales/en/mystery-encounters/bug-type-superfan-dialogue.json";
import funAndGamesDialogue from "#app/locales/en/mystery-encounters/fun-and-games-dialogue.json";
/**
* Injection patterns that can be used:
@ -47,33 +46,32 @@ export const mysteryEncounter = {
// DO NOT REMOVE
"unit_test_dialogue": "{{test}}{{test}} {{test{{test}}}} {{test1}} {{test\}} {{test\\}} {{test\\\}} {test}}",
mysteriousChallengers,
mysteriousChest,
darkDeal,
fightOrFlight,
slumberingSnorlax,
trainingSession,
departmentStoreSale,
shadyVitaminDealer,
fieldTrip,
safariZone,
lostAtSea,
fieryFallout,
theStrongStuff,
pokemonSalesman,
offerYouCantRefuse,
delibirdy,
absoluteAvarice,
aTrainersTest,
trashToTreasure,
berriesAbound,
clowningAround,
partTimer,
dancingLessons,
weirdDream,
theWinstrateChallenge,
teleportingHijinks,
bugTypeSuperfan,
funAndGames,
uncommonBreed,
mysteriousChallengers: mysteriousChallengersDialogue,
mysteriousChest: mysteriousChestDialogue,
darkDeal: darkDealDialogue,
fightOrFlight: fightOrFlightDialogue,
slumberingSnorlax: slumberingSnorlaxDialogue,
trainingSession: trainingSessionDialogue,
departmentStoreSale: departmentStoreSaleDialogue,
shadyVitaminDealer: shadyVitaminDealerDialogue,
fieldTrip: fieldTripDialogue,
safariZone: safariZoneDialogue,
lostAtSea: lostAtSeaDialogue,
fieryFallout: fieryFalloutDialogue,
theStrongStuff: theStrongStuffDialogue,
pokemonSalesman: thePokemonSalesmanDialogue,
offerYouCantRefuse: anOfferYouCantRefuseDialogue,
delibirdy: delibirdyDialogue,
absoluteAvarice: absoluteAvariceDialogue,
aTrainersTest: aTrainersTestDialogue,
trashToTreasure: trashToTreasureDialogue,
berriesAbound: berriesAboundDialogue,
clowningAround: clowningAroundDialogue,
partTimer: partTimerDialogue,
dancingLessons: dancingLessonsDialogue,
weirdDream: weirdDreamDialogue,
theWinstrateChallenge: theWinstrateChallengeDialogue,
teleportingHijinks: teleportingHijinksDialogue,
bugTypeSuperfan: bugTypeSuperfanDialogue,
funAndGames: funAndGamesDialogue
} as const;

View File

@ -7,8 +7,7 @@
"1": {
"label": "Battle the Pokémon",
"tooltip": "(-) Hard Battle\n(+) New Item",
"selected": "You approach the\nPokémon without fear.",
"stat_boost": "The {{enemyPokemon}} latent strength boosted one of its stats!"
"selected": "You approach the\nPokémon without fear."
},
"2": {
"label": "Steal the Item",

View File

@ -1,26 +0,0 @@
{
"intro": "That isn't just an ordinary Pokémon!",
"title": "Uncommon Breed",
"description": "That {{enemyPokemon}} looks special compared to others of its kind. @[TOOLTIP_TITLE]{Perhaps it knows a special move?} You could battle and catch it outright, but there might also be a way to befriend it.",
"query": "What will you do?",
"option": {
"1": {
"label": "Battle the Pokémon",
"tooltip": "(-) Tricky Battle\n(+) Strong Catchable Foe",
"selected": "You approach the\n{{enemyPokemon}} without fear.",
"stat_boost": "The {{enemyPokemon}} heightened abilities boost its stats!"
},
"2": {
"label": "Give It Food",
"disabled_tooltip": "You need 4 berry items to choose this",
"tooltip": "(-) Give 4 Berries\n(+) The {{enemyPokemon}} Likes You",
"selected": "You toss the berries at the {{enemyPokemon}}!$It eats them happily!$The {{enemyPokemon}} wants to join your party!"
},
"3": {
"label": "Befriend It",
"disabled_tooltip": "Your Pokémon need to know certain moves to choose this",
"tooltip": "(+) {{option3PrimaryName}} uses {{option3PrimaryMove}}\n(+) The {{enemyPokemon}} Likes You",
"selected": "Your {{option3PrimaryName}} uses {{option3PrimaryMove}} to charm the {{enemyPokemon}}!$The {{enemyPokemon}} wants to join your party!"
}
}
}

View File

@ -13,32 +13,5 @@
"metFragment": {
"normal": "met at Lv{{level}},\n{{biome}}.",
"apparently": "apparently met at Lv{{level}},\n{{biome}}."
},
"natureFragment": {
"Hardy": "{{nature}}",
"Lonely": "{{nature}}",
"Brave": "{{nature}}",
"Adamant": "{{nature}}",
"Naughty": "{{nature}}",
"Bold": "{{nature}}",
"Docile": "{{nature}}",
"Relaxed": "{{nature}}",
"Impish": "{{nature}}",
"Lax": "{{nature}}",
"Timid": "{{nature}}",
"Hasty": "{{nature}}",
"Serious": "{{nature}}",
"Jolly": "{{nature}}",
"Naive": "{{nature}}",
"Modest": "{{nature}}",
"Mild": "{{nature}}",
"Quiet": "{{nature}}",
"Bashful": "{{nature}}",
"Rash": "{{nature}}",
"Calm": "{{nature}}",
"Gentle": "{{nature}}",
"Sassy": "{{nature}}",
"Careful": "{{nature}}",
"Quirky": "{{nature}}"
}
}

View File

@ -63,7 +63,6 @@
"bgmVolume": "BGM Volume",
"fieldVolume": "Field Volume",
"seVolume": "SE Volume",
"uiVolume": "UI Volume",
"musicPreference": "Music Preference",
"mixed": "Mixed",
"gamepadPleasePlug": "Please Plug in a Gamepad or Press a Button",

View File

@ -117,14 +117,5 @@
"plasma_grunts": "Plasma Grunts",
"flare_grunt": "Flare Grunt",
"flare_grunt_female": "Flare Grunt",
"flare_grunts": "Flare Grunts",
"aether_grunt": "Aether Foundation Employee",
"aether_grunt_female": "Aether Foundation Employee",
"aether_grunts": "Aether Foundation Employees",
"skull_grunt": "Team Skull Grunt",
"skull_grunt_female": "Team Skull Grunt",
"skull_grunts": "Team Skull Grunts",
"macro_grunt": "Macro Cosmos Trainer",
"macro_grunt_female": "Macro Cosmos Trainer",
"macro_grunts": "Macro Cosmos Trainers"
"flare_grunts": "Flare Grunts"
}

Some files were not shown because too many files have changed in this diff Show More