Merge pull request #3894 from ben-lear/uncommon-breed
[Feature] Uncommon Breed Mystery Encounter
|
@ -4,198 +4,198 @@
|
|||
"image": "chest_blue.png",
|
||||
"format": "RGBA8888",
|
||||
"size": {
|
||||
"w": 58,
|
||||
"h": 528
|
||||
"w": 54,
|
||||
"h": 492
|
||||
},
|
||||
"scale": 1,
|
||||
"frames": [
|
||||
{
|
||||
"filename": "0000.png",
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
"w": 75,
|
||||
"h": 75
|
||||
"w": 46,
|
||||
"h": 39
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 14,
|
||||
"y": 30,
|
||||
"w": 48,
|
||||
"h": 41
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 46,
|
||||
"h": 39
|
||||
},
|
||||
"frame": {
|
||||
"x": 1,
|
||||
"y": 1,
|
||||
"w": 48,
|
||||
"h": 41
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 46,
|
||||
"h": 39
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "0001.png",
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
"w": 75,
|
||||
"h": 75
|
||||
"w": 47,
|
||||
"h": 35
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 14,
|
||||
"y": 34,
|
||||
"w": 49,
|
||||
"h": 37
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 47,
|
||||
"h": 35
|
||||
},
|
||||
"frame": {
|
||||
"x": 1,
|
||||
"y": 44,
|
||||
"w": 49,
|
||||
"h": 37
|
||||
"x": 0,
|
||||
"y": 39,
|
||||
"w": 47,
|
||||
"h": 35
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "0002.png",
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
"w": 75,
|
||||
"h": 75
|
||||
"w": 46,
|
||||
"h": 39
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 14,
|
||||
"y": 30,
|
||||
"w": 48,
|
||||
"h": 41
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 46,
|
||||
"h": 39
|
||||
},
|
||||
"frame": {
|
||||
"x": 1,
|
||||
"y": 83,
|
||||
"w": 48,
|
||||
"h": 41
|
||||
"x": 0,
|
||||
"y": 74,
|
||||
"w": 46,
|
||||
"h": 39
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "0003.png",
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
"w": 75,
|
||||
"h": 75
|
||||
"w": 46,
|
||||
"h": 46
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 14,
|
||||
"y": 23,
|
||||
"w": 48,
|
||||
"h": 48
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 46,
|
||||
"h": 46
|
||||
},
|
||||
"frame": {
|
||||
"x": 1,
|
||||
"y": 126,
|
||||
"w": 48,
|
||||
"h": 48
|
||||
"x": 0,
|
||||
"y": 113,
|
||||
"w": 46,
|
||||
"h": 46
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "0004.png",
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
"w": 75,
|
||||
"h": 75
|
||||
"w": 53,
|
||||
"h": 65
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 13,
|
||||
"y": 4,
|
||||
"w": 55,
|
||||
"h": 67
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 53,
|
||||
"h": 65
|
||||
},
|
||||
"frame": {
|
||||
"x": 1,
|
||||
"y": 176,
|
||||
"w": 55,
|
||||
"h": 67
|
||||
"x": 0,
|
||||
"y": 159,
|
||||
"w": 53,
|
||||
"h": 65
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "0005.png",
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
"w": 75,
|
||||
"h": 75
|
||||
"w": 54,
|
||||
"h": 67
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 15,
|
||||
"y": 2,
|
||||
"w": 56,
|
||||
"h": 69
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 54,
|
||||
"h": 67
|
||||
},
|
||||
"frame": {
|
||||
"x": 1,
|
||||
"y": 245,
|
||||
"w": 56,
|
||||
"h": 69
|
||||
"x": 0,
|
||||
"y": 224,
|
||||
"w": 54,
|
||||
"h": 67
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "0006.png",
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
"w": 75,
|
||||
"h": 75
|
||||
"w": 54,
|
||||
"h": 67
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 15,
|
||||
"y": 2,
|
||||
"w": 56,
|
||||
"h": 69
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 54,
|
||||
"h": 67
|
||||
},
|
||||
"frame": {
|
||||
"x": 1,
|
||||
"y": 316,
|
||||
"w": 56,
|
||||
"h": 69
|
||||
"x": 0,
|
||||
"y": 291,
|
||||
"w": 54,
|
||||
"h": 67
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "0007.png",
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
"w": 75,
|
||||
"h": 75
|
||||
"w": 54,
|
||||
"h": 67
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 13,
|
||||
"y": 2,
|
||||
"w": 56,
|
||||
"h": 69
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 54,
|
||||
"h": 67
|
||||
},
|
||||
"frame": {
|
||||
"x": 1,
|
||||
"y": 387,
|
||||
"w": 56,
|
||||
"h": 69
|
||||
"x": 0,
|
||||
"y": 358,
|
||||
"w": 54,
|
||||
"h": 67
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "0008.png",
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
"w": 75,
|
||||
"h": 75
|
||||
"w": 54,
|
||||
"h": 67
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 13,
|
||||
"y": 2,
|
||||
"w": 56,
|
||||
"h": 69
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 54,
|
||||
"h": 67
|
||||
},
|
||||
"frame": {
|
||||
"x": 1,
|
||||
"y": 458,
|
||||
"w": 56,
|
||||
"h": 69
|
||||
"x": 0,
|
||||
"y": 425,
|
||||
"w": 54,
|
||||
"h": 67
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -204,6 +204,6 @@
|
|||
"meta": {
|
||||
"app": "https://www.codeandweb.com/texturepacker",
|
||||
"version": "3.0",
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:5f36000f6160ee6f397afe5a6fd60b73:cf6f4b08e23400447813583c322eb6c7:f4f3c064e6c93b8d1290f93bee927f60$"
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:017ecc2437e580a185f9843f97e80da5:f44ef1c27a4a17183a5bcf1f7fc8ce6a:f4f3c064e6c93b8d1290f93bee927f60$"
|
||||
}
|
||||
}
|
||||
|
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.5 KiB |
|
@ -4,30 +4,198 @@
|
|||
"image": "chest_red.png",
|
||||
"format": "RGBA8888",
|
||||
"size": {
|
||||
"w": 76,
|
||||
"h": 57
|
||||
"w": 54,
|
||||
"h": 492
|
||||
},
|
||||
"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": 76,
|
||||
"h": 57
|
||||
"w": 47,
|
||||
"h": 35
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 10,
|
||||
"y": 3,
|
||||
"w": 56,
|
||||
"h": 54
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 47,
|
||||
"h": 35
|
||||
},
|
||||
"frame": {
|
||||
"x": 8,
|
||||
"x": 0,
|
||||
"y": 39,
|
||||
"w": 47,
|
||||
"h": 35
|
||||
}
|
||||
},
|
||||
{
|
||||
"filename": "0002.png",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
"w": 46,
|
||||
"h": 39
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 56,
|
||||
"h": 54
|
||||
"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
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -36,6 +204,6 @@
|
|||
"meta": {
|
||||
"app": "https://www.codeandweb.com/texturepacker",
|
||||
"version": "3.0",
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:895f0a79b89fa0fb44167f4584fd9a22:357b46953b7e17c6b2f43a62d52855d8:cc1ed0e4f90aaa9dcf1b39a0af1283b0$"
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:2a0b6c93c5be115efa635d40780603f0:b5fde49f991c2ecc49afedd80cc8a544:a163d960e9966469ae4dde4b53c13496$"
|
||||
}
|
||||
}
|
||||
|
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 4.0 KiB |
|
@ -4312,6 +4312,11 @@
|
|||
1,
|
||||
1
|
||||
],
|
||||
"99-gigantamax": [
|
||||
0,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"100": [
|
||||
0,
|
||||
1,
|
||||
|
@ -9940,12 +9945,12 @@
|
|||
],
|
||||
"672": [
|
||||
0,
|
||||
2,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"673": [
|
||||
0,
|
||||
2,
|
||||
1,
|
||||
1
|
||||
],
|
||||
"677": [
|
||||
|
@ -10806,7 +10811,7 @@
|
|||
"962": [
|
||||
1,
|
||||
1,
|
||||
2
|
||||
1
|
||||
],
|
||||
"967": [
|
||||
0,
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"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"
|
||||
}
|
||||
}
|
|
@ -1,4 +1,20 @@
|
|||
{
|
||||
"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",
|
||||
|
|
|
@ -1,965 +0,0 @@
|
|||
{
|
||||
"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$"
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 28 KiB |
|
@ -1,4 +1,20 @@
|
|||
{
|
||||
"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",
|
||||
|
|
|
@ -1,965 +0,0 @@
|
|||
{
|
||||
"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$"
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 18 KiB |
|
@ -28,5 +28,20 @@
|
|||
"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"
|
||||
}
|
||||
}
|
|
@ -1,167 +0,0 @@
|
|||
{
|
||||
"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$"
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 12 KiB |
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"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$"
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 849 B |
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"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$"
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 819 B |
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"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$"
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 814 B |
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"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$"
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 848 B |
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"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$"
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 996 B |
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"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$"
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 837 B |
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"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$"
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 919 B |
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"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$"
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 1.0 KiB |
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"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$"
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 934 B |
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"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$"
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 864 B |
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"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$"
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 792 B |
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"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$"
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 723 B |
|
@ -22,7 +22,7 @@ import {
|
|||
getModifierPoolForType,
|
||||
getModifierType,
|
||||
getPartyLuckValue,
|
||||
modifierTypes
|
||||
modifierTypes, PokemonHeldItemModifierType
|
||||
} from "./modifier/modifier-type";
|
||||
import AbilityBar from "./ui/ability-bar";
|
||||
import { BlockItemTheftAbAttr, DoubleBattleChanceAbAttr, ChangeMovePriorityAbAttr, PostBattleInitAbAttr, applyAbAttrs, applyPostBattleInitAbAttrs } from "./data/ability";
|
||||
|
@ -143,6 +143,7 @@ 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;
|
||||
|
@ -863,14 +864,13 @@ 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) {
|
||||
pokemon.level = Overrides.OPP_LEVEL_OVERRIDE;
|
||||
level = Overrides.OPP_LEVEL_OVERRIDE;
|
||||
}
|
||||
|
||||
if (Overrides.OPP_GENDER_OVERRIDE !== null) {
|
||||
pokemon.gender = Overrides.OPP_GENDER_OVERRIDE;
|
||||
}
|
||||
const pokemon = new EnemyPokemon(this, species, level, trainerSlot, boss, dataSource);
|
||||
|
||||
overrideModifiers(this, false);
|
||||
overrideHeldItems(this, pokemon, false);
|
||||
if (boss && !dataSource) {
|
||||
|
@ -1834,6 +1834,7 @@ 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- ")) {
|
||||
|
@ -1870,17 +1871,29 @@ 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 (key.startsWith("PRSFX- ")) {
|
||||
if (keyDetails[1].startsWith("PRSFX- ")) {
|
||||
config["volume"] *= 0.5;
|
||||
}
|
||||
break;
|
||||
case "se":
|
||||
case "ui":
|
||||
default:
|
||||
//As of, right now this applies to the "select", "menu_open", "error" sound effects
|
||||
config["volume"] = this.masterVolume * this.uiVolume;
|
||||
break;
|
||||
case "se":
|
||||
config["volume"] = this.masterVolume * this.seVolume;
|
||||
break;
|
||||
}
|
||||
|
@ -2069,6 +2082,18 @@ 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
|
||||
|
@ -2079,6 +2104,12 @@ 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;
|
||||
|
@ -2521,13 +2552,19 @@ 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.modifierType.newModifier(enemyPokemon);
|
||||
const modifier = mt.modifier.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);
|
||||
|
|
|
@ -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 ], true)),
|
||||
.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)),
|
||||
[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 ], true)),
|
||||
.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)),
|
||||
[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 ], true)),
|
||||
.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)),
|
||||
[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 ] ], true)),
|
||||
.setGetTrainerFunc(getRandomTrainerFunc([[ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [ TrainerType.TABITHA, TrainerType.COURTNEY ], [ TrainerType.MATT, TrainerType.SHELLY ], [ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ], [ TrainerType.ZINZOLIN, TrainerType.ROOD ], [ TrainerType.XEROSIC, TrainerType.BRYONY ], TrainerType.FABA, TrainerType.PLUMERIA, TrainerType.OLEANA ], 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 ], true)),
|
||||
.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)),
|
||||
[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 ] ], true, 1)),
|
||||
.setGetTrainerFunc(getRandomTrainerFunc([[ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [ TrainerType.TABITHA, TrainerType.COURTNEY ], [ TrainerType.MATT, TrainerType.SHELLY ], [ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ], [ TrainerType.ZINZOLIN, TrainerType.ROOD ], [ TrainerType.XEROSIC, TrainerType.BRYONY ], TrainerType.FABA, TrainerType.PLUMERIA, TrainerType.OLEANA ], 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 ])),
|
||||
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_BOSS_GIOVANNI_1, TrainerType.MAXIE, TrainerType.ARCHIE, TrainerType.CYRUS, TrainerType.GHETSIS, TrainerType.LYSANDRE, TrainerType.LUSAMINE, TrainerType.GUZMA, TrainerType.ROSE ])),
|
||||
[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 ])),
|
||||
.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 ])),
|
||||
[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)
|
||||
|
|
|
@ -1107,12 +1107,13 @@ export abstract class BattleAnim {
|
|||
let r = anim!.frames.length;
|
||||
let f = 0;
|
||||
|
||||
const existingFieldSprites = [...scene.field.getAll()];
|
||||
let existingFieldSprites = scene.field.getAll().slice(0);
|
||||
|
||||
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;
|
||||
|
@ -1139,7 +1140,8 @@ export abstract class BattleAnim {
|
|||
const setSpritePriority = (priority: integer) => {
|
||||
if (existingFieldSprites.length > priority) {
|
||||
// Move to specified priority index
|
||||
scene.field.moveTo(moveSprite, scene.field.getIndex(existingFieldSprites[priority]));
|
||||
const index = scene.field.getIndex(existingFieldSprites[priority]);
|
||||
scene.field.moveTo(moveSprite, index);
|
||||
} else {
|
||||
// Move to top of scene
|
||||
scene.field.moveTo(moveSprite, scene.field.getAll().length - 1);
|
||||
|
|
|
@ -49,7 +49,8 @@ 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 starterSpecies = getPokemonSpecies(getPokemonSpecies(Utils.randSeedItem(costSpecies)).getTrainerSpeciesForLevel(startingLevel, true, PartyMemberStrength.STRONGER));
|
||||
const randPkmSpecies = getPokemonSpecies(Utils.randSeedItem(costSpecies));
|
||||
const starterSpecies = getPokemonSpecies(randPkmSpecies.getTrainerSpeciesForLevel(startingLevel, true, PartyMemberStrength.STRONGER));
|
||||
starters.push(getDailyRunStarter(scene, starterSpecies, startingLevel));
|
||||
}
|
||||
}, 0, seed);
|
||||
|
|
|
@ -753,6 +753,98 @@ 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: [
|
||||
|
@ -909,6 +1001,84 @@ 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: [
|
||||
|
|
|
@ -601,11 +601,13 @@ 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);
|
||||
|
@ -8568,7 +8570,8 @@ 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),
|
||||
.attr(StatChangeAttr, [ BattleStat.ATK, BattleStat.SPATK ], 2)
|
||||
.ignoresProtect(),
|
||||
new AttackMove(Moves.DRUM_BEATING, Type.GRASS, MoveCategory.PHYSICAL, 80, 100, 10, 100, 0, 8)
|
||||
.attr(StatChangeAttr, BattleStat.SPD, -1)
|
||||
.makesContact(false),
|
||||
|
|
|
@ -13,6 +13,8 @@ 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";
|
||||
|
@ -136,7 +138,7 @@ export const ATrainersTestEncounter: MysteryEncounter =
|
|||
},
|
||||
async (scene: BattleScene) => {
|
||||
const encounter = scene.currentBattle.mysteryEncounter!;
|
||||
// Spawn standard trainer battle with memory mushroom reward
|
||||
// Battle the stat trainer for an Egg and great rewards
|
||||
const config: EnemyPartyConfig = encounter.enemyPartyConfigs[0];
|
||||
|
||||
await transitionMysteryEncounterIntroVisuals(scene);
|
||||
|
@ -149,7 +151,7 @@ export const ATrainersTestEncounter: MysteryEncounter =
|
|||
tier: EggTier.ULTRA
|
||||
};
|
||||
encounter.setDialogueToken("eggType", i18next.t(`${namespace}.eggTypes.epic`));
|
||||
setEncounterRewards(scene, { fillRemaining: true }, [eggOptions]);
|
||||
setEncounterRewards(scene, { guaranteedModifierTypeFuncs: [modifierTypes.SACRED_ASH], guaranteedModifierTiers: [ModifierTier.ROGUE, ModifierTier.ULTRA], fillRemaining: true }, [eggOptions]);
|
||||
|
||||
return initBattleWithEnemyConfig(scene, config);
|
||||
}
|
||||
|
|
|
@ -175,7 +175,7 @@ export const AbsoluteAvariceEncounter: MysteryEncounter =
|
|||
.withOnInit((scene: BattleScene) => {
|
||||
const encounter = scene.currentBattle.mysteryEncounter!;
|
||||
|
||||
scene.loadSe("PRSFX- Bug Bite", "battle_anims");
|
||||
scene.loadSe("PRSFX- Bug Bite", "battle_anims", "PRSFX- Bug Bite.wav");
|
||||
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({ modifierType });
|
||||
bossModifierConfigs.push({ modifier: 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: [
|
||||
|
|
|
@ -131,7 +131,7 @@ export const BerriesAboundEncounter: MysteryEncounter =
|
|||
const doBerryRewards = async () => {
|
||||
const berryText = numBerries + " " + i18next.t(`${namespace}.berries`);
|
||||
|
||||
scene.playSound("bgm/item_fanfare");
|
||||
scene.playSound("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("bgm/item_fanfare");
|
||||
scene.playSound("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("bgm/item_fanfare");
|
||||
scene.playSound("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)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { EnemyPartyConfig, initBattleWithEnemyConfig, leaveEncounterWithoutBattle, selectPokemonForOption, setEncounterRewards, transitionMysteryEncounterIntroVisuals, } from "#app/data/mystery-encounters/utils/encounter-phase-utils";
|
||||
import Pokemon, { PlayerPokemon, PokemonMove } from "#app/field/pokemon";
|
||||
import Pokemon, { EnemyPokemon, 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.getPlayerPokemon());
|
||||
const danceAnim = new EncounterBattleAnim(EncounterAnim.DANCE, scene.getEnemyPokemon()!, scene.getParty()[0]);
|
||||
danceAnim.play(scene);
|
||||
|
||||
return true;
|
||||
|
@ -105,7 +105,8 @@ export const DancingLessonsEncounter: MysteryEncounter =
|
|||
const encounter = scene.currentBattle.mysteryEncounter!;
|
||||
|
||||
const species = getPokemonSpecies(Species.ORICORIO);
|
||||
const enemyPokemon = scene.addEnemyPokemon(species, scene.currentBattle.enemyLevels![0], TrainerSlot.NONE, false);
|
||||
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);
|
||||
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));
|
||||
|
@ -130,10 +131,11 @@ 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] = enemyPokemon;
|
||||
scene.field.add(enemyPokemon);
|
||||
scene.currentBattle.enemyParty[0] = oricorio;
|
||||
scene.field.add(oricorio);
|
||||
|
||||
const config: EnemyPartyConfig = {
|
||||
levelAdditiveMultiplier: 1,
|
||||
|
@ -141,11 +143,11 @@ export const DancingLessonsEncounter: MysteryEncounter =
|
|||
species: species,
|
||||
dataSource: oricorioData,
|
||||
isBoss: true,
|
||||
// Gets +1 to all stats on battle start
|
||||
// Gets +1 to all stats except SPD 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, BattleStat.SPD], 1));
|
||||
pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [BattleStat.ATK, BattleStat.DEF, BattleStat.SPATK, BattleStat.SPDEF], 1));
|
||||
}
|
||||
}],
|
||||
};
|
||||
|
|
|
@ -12,6 +12,7 @@ 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";
|
||||
|
@ -125,25 +126,27 @@ 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 = [
|
||||
removedPokemon.species.type1,
|
||||
];
|
||||
if (removedPokemon.species.type2) {
|
||||
encounter.misc.push(removedPokemon.species.type2);
|
||||
}
|
||||
encounter.misc = {
|
||||
removedTypes: removedPokemon.getTypes(),
|
||||
modifiers
|
||||
};
|
||||
})
|
||||
.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 = scene.currentBattle.mysteryEncounter!.misc as Type[];
|
||||
const bossTypes: Type[] = encounter.misc.removedTypes;
|
||||
const bossModifiers: PokemonHeldItemModifier[] = encounter.misc.modifiers;
|
||||
// Starter egg tier, 35/50/10/5 %odds for tiers 6/7/8/9+
|
||||
const roll = randSeedInt(100);
|
||||
const starterTier: number | [number, number] =
|
||||
|
@ -152,6 +155,11 @@ 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;
|
||||
|
|
|
@ -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("bgm/item_fanfare");
|
||||
scene.playSound("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("bgm/item_fanfare");
|
||||
scene.playSound("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("bgm/item_fanfare");
|
||||
scene.playSound("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("bgm/item_fanfare");
|
||||
scene.playSound("item_fanfare");
|
||||
await showEncounterText(scene, i18next.t("battle:rewardGain", { modifierName: shellBell.name }), undefined, true);
|
||||
} else {
|
||||
scene.unshiftPhase(new ModifierRewardPhase(scene, modifierTypes.BERRY_POUCH));
|
||||
|
|
|
@ -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 { EnemyPokemon } from "#app/field/pokemon";
|
||||
import Pokemon, { EnemyPokemon } from "#app/field/pokemon";
|
||||
import { ModifierTier } from "#app/modifier/modifier-tier";
|
||||
import {
|
||||
getPartyLuckValue,
|
||||
|
@ -24,6 +24,10 @@ 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";
|
||||
|
@ -58,13 +62,19 @@ export const FightOrFlightEncounter: MysteryEncounter =
|
|||
level: level,
|
||||
species: bossSpecies,
|
||||
dataSource: new PokemonData(bossPokemon),
|
||||
isBoss: true
|
||||
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));
|
||||
}
|
||||
}],
|
||||
};
|
||||
encounter.enemyPartyConfigs = [config];
|
||||
|
||||
// Calculate item
|
||||
// 10-40 GREAT, 60-120 ULTRA, 120-160 ROGUE, 160-180 MASTER
|
||||
// Waves 10-40 GREAT, 60-120 ULTRA, 120-160 ROGUE, 160-180 MASTER
|
||||
const tier =
|
||||
scene.currentBattle.waveIndex > 160
|
||||
? ModifierTier.MASTER
|
||||
|
@ -122,6 +132,7 @@ 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]);
|
||||
|
|
|
@ -21,18 +21,27 @@ const namespace = "mysteryEncounter:mysteriousChest";
|
|||
export const MysteriousChestEncounter: MysteryEncounter =
|
||||
MysteryEncounterBuilder.withEncounterType(MysteryEncounterType.MYSTERIOUS_CHEST)
|
||||
.withEncounterTier(MysteryEncounterTier.COMMON)
|
||||
.withSceneWaveRangeRequirement(10, 180) // waves 2 to 180
|
||||
.withSceneWaveRangeRequirement(10, 180) // waves 10 to 180
|
||||
.withAutoHideIntroVisuals(false)
|
||||
.withIntroSpriteConfigs([
|
||||
{
|
||||
spriteKey: "chest_blue",
|
||||
fileRoot: "mystery-encounters",
|
||||
hasShadow: true,
|
||||
x: 4,
|
||||
y: 10,
|
||||
yShadow: 3,
|
||||
y: 8,
|
||||
yShadow: 6,
|
||||
alpha: 1,
|
||||
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([
|
||||
{
|
||||
|
@ -56,14 +65,30 @@ export const MysteriousChestEncounter: MysteryEncounter =
|
|||
})
|
||||
.withPreOptionPhase(async (scene: BattleScene) => {
|
||||
// Play animation
|
||||
const introVisuals =
|
||||
scene.currentBattle.mysteryEncounter!.introVisuals!;
|
||||
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);
|
||||
}
|
||||
introVisuals.spriteConfigs[0].disableAnimation = false;
|
||||
introVisuals.spriteConfigs[1].disableAnimation = false;
|
||||
introVisuals.playAnim();
|
||||
})
|
||||
.withOptionPhase(async (scene: BattleScene) => {
|
||||
// Open the chest
|
||||
const roll = randSeedInt(100);
|
||||
const encounter = scene.currentBattle.mysteryEncounter!;
|
||||
const roll = encounter.misc.roll;
|
||||
if (roll > 60) {
|
||||
// Choose between 2 COMMON / 2 GREAT tier items (40%)
|
||||
setEncounterRewards(scene, {
|
||||
|
@ -106,14 +131,14 @@ export const MysteriousChestEncounter: MysteryEncounter =
|
|||
queueEncounterMessage(scene, `${namespace}.option.1.amazing`);
|
||||
leaveEncounterWithoutBattle(scene);
|
||||
} else {
|
||||
// Your highest level unfainted Pok<EFBFBD>mon gets OHKO. Progress with no rewards (35%)
|
||||
// Your highest level unfainted Pokemon gets OHKO. Progress with no rewards (35%)
|
||||
const highestLevelPokemon = getHighestLevelPlayerPokemon(
|
||||
scene,
|
||||
true
|
||||
);
|
||||
koPlayerPokemon(scene, highestLevelPokemon);
|
||||
|
||||
scene.currentBattle.mysteryEncounter!.setDialogueToken("pokeName", highestLevelPokemon.getNameToRender());
|
||||
encounter.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`);
|
||||
|
|
|
@ -24,6 +24,8 @@ 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}
|
||||
|
@ -33,7 +35,7 @@ export const SafariZoneEncounter: MysteryEncounter =
|
|||
MysteryEncounterBuilder.withEncounterType(MysteryEncounterType.SAFARI_ZONE)
|
||||
.withEncounterTier(MysteryEncounterTier.GREAT)
|
||||
.withSceneWaveRangeRequirement(10, 180)
|
||||
.withSceneRequirement(new MoneyRequirement(0, 2.75)) // Cost equal to 1 Max Revive
|
||||
.withSceneRequirement(new MoneyRequirement(0, SAFARI_MONEY_MULTIPLIER)) // Cost equal to 1 Max Revive
|
||||
.withIntroSpriteConfigs([
|
||||
{
|
||||
spriteKey: "safari_zone",
|
||||
|
@ -53,7 +55,7 @@ export const SafariZoneEncounter: MysteryEncounter =
|
|||
.withQuery(`${namespace}.query`)
|
||||
.withOption(MysteryEncounterOptionBuilder
|
||||
.newOptionWithMode(MysteryEncounterOptionMode.DISABLED_OR_DEFAULT)
|
||||
.withSceneRequirement(new MoneyRequirement(0, 2.75)) // Cost equal to 1 Max Revive
|
||||
.withSceneRequirement(new MoneyRequirement(0, SAFARI_MONEY_MULTIPLIER)) // Cost equal to 1 Max Revive
|
||||
.withDialogue({
|
||||
buttonLabel: `${namespace}.option.1.label`,
|
||||
buttonTooltip: `${namespace}.option.1.tooltip`,
|
||||
|
@ -72,9 +74,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");
|
||||
scene.loadSe("PRSFX- Sludge Bomb2", "battle_anims");
|
||||
scene.loadSe("PRSFX- Taunt2", "battle_anims");
|
||||
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.loadAtlas("bait", "mystery-encounters");
|
||||
scene.loadAtlas("mud", "mystery-encounters");
|
||||
await summonSafariPokemon(scene);
|
||||
|
@ -351,12 +353,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");
|
||||
|
@ -407,7 +409,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, () => {
|
||||
|
@ -433,10 +435,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);
|
||||
|
|
|
@ -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, { PlayerPokemon, PokemonMove } from "#app/field/pokemon";
|
||||
import Pokemon, { 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,6 +30,7 @@ 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([
|
||||
|
@ -76,16 +77,16 @@ export const TheStrongStuffEncounter: MysteryEncounter =
|
|||
moveSet: [Moves.INFESTATION, Moves.SALT_CURE, Moves.GASTRO_ACID, Moves.HEAL_ORDER],
|
||||
modifierConfigs: [
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.SITRUS]) as PokemonHeldItemModifierType
|
||||
modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.SITRUS]) as PokemonHeldItemModifierType
|
||||
},
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.APICOT]) as PokemonHeldItemModifierType
|
||||
modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.APICOT]) as PokemonHeldItemModifierType
|
||||
},
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.GANLON]) as PokemonHeldItemModifierType
|
||||
modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.GANLON]) as PokemonHeldItemModifierType
|
||||
},
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.LUM]) as PokemonHeldItemModifierType,
|
||||
modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.LUM]) as PokemonHeldItemModifierType,
|
||||
stackCount: 2
|
||||
}
|
||||
],
|
||||
|
@ -124,35 +125,21 @@ export const TheStrongStuffEncounter: MysteryEncounter =
|
|||
transitionMysteryEncounterIntroVisuals(scene, true, true, 50);
|
||||
});
|
||||
|
||||
// -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;
|
||||
}
|
||||
// -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;
|
||||
});
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ const namespace = "mysteryEncounter:theWinstrateChallenge";
|
|||
export const TheWinstrateChallengeEncounter: MysteryEncounter =
|
||||
MysteryEncounterBuilder.withEncounterType(MysteryEncounterType.THE_WINSTRATE_CHALLENGE)
|
||||
.withEncounterTier(MysteryEncounterTier.ROGUE)
|
||||
.withSceneWaveRangeRequirement(80, 180)
|
||||
.withSceneWaveRangeRequirement(100, 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: [
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.FLAME_ORB) as PokemonHeldItemModifierType,
|
||||
modifier: generateModifierType(scene, modifierTypes.FLAME_ORB) as PokemonHeldItemModifierType,
|
||||
isTransferable: false
|
||||
},
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.FOCUS_BAND) as PokemonHeldItemModifierType,
|
||||
modifier: 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: [
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.FLAME_ORB) as PokemonHeldItemModifierType,
|
||||
modifier: generateModifierType(scene, modifierTypes.FLAME_ORB) as PokemonHeldItemModifierType,
|
||||
isTransferable: false
|
||||
},
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.LEFTOVERS) as PokemonHeldItemModifierType,
|
||||
modifier: 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: [
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.SOUL_DEW) as PokemonHeldItemModifierType,
|
||||
modifier: generateModifierType(scene, modifierTypes.SOUL_DEW) as PokemonHeldItemModifierType,
|
||||
isTransferable: false
|
||||
},
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.QUICK_CLAW) as PokemonHeldItemModifierType,
|
||||
modifier: 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: [
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [Type.PSYCHIC]) as PokemonHeldItemModifierType,
|
||||
modifier: generateModifierType(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [Type.PSYCHIC]) as PokemonHeldItemModifierType,
|
||||
stackCount: 1,
|
||||
isTransferable: false
|
||||
},
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [Type.FAIRY]) as PokemonHeldItemModifierType,
|
||||
modifier: generateModifierType(scene, modifierTypes.ATTACK_TYPE_BOOSTER, [Type.FAIRY]) as PokemonHeldItemModifierType,
|
||||
stackCount: 1,
|
||||
isTransferable: false
|
||||
}
|
||||
|
@ -310,12 +310,12 @@ function getViviTrainerConfig(scene: BattleScene): EnemyPartyConfig {
|
|||
moveSet: [Moves.WATERFALL, Moves.MEGAHORN, Moves.KNOCK_OFF, Moves.REST],
|
||||
modifierConfigs: [
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.LUM]) as PokemonHeldItemModifierType,
|
||||
modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.LUM]) as PokemonHeldItemModifierType,
|
||||
stackCount: 2,
|
||||
isTransferable: false
|
||||
},
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER, [Stat.HP]) as PokemonHeldItemModifierType,
|
||||
modifier: generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER, [Stat.HP]) as PokemonHeldItemModifierType,
|
||||
stackCount: 4,
|
||||
isTransferable: false
|
||||
}
|
||||
|
@ -329,12 +329,12 @@ function getViviTrainerConfig(scene: BattleScene): EnemyPartyConfig {
|
|||
moveSet: [Moves.SPORE, Moves.SWORDS_DANCE, Moves.SEED_BOMB, Moves.DRAIN_PUNCH],
|
||||
modifierConfigs: [
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER, [Stat.HP]) as PokemonHeldItemModifierType,
|
||||
modifier: generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER, [Stat.HP]) as PokemonHeldItemModifierType,
|
||||
stackCount: 4,
|
||||
isTransferable: false
|
||||
},
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.TOXIC_ORB) as PokemonHeldItemModifierType,
|
||||
modifier: 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: [
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.QUICK_CLAW) as PokemonHeldItemModifierType,
|
||||
modifier: 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: [
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.SHELL_BELL) as PokemonHeldItemModifierType,
|
||||
modifier: 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: [
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER, [Stat.SPD]) as PokemonHeldItemModifierType,
|
||||
modifier: generateModifierType(scene, modifierTypes.BASE_STAT_BOOSTER, [Stat.SPD]) as PokemonHeldItemModifierType,
|
||||
stackCount: 2,
|
||||
isTransferable: false
|
||||
}
|
||||
|
@ -404,47 +404,47 @@ function getVitoTrainerConfig(scene: BattleScene): EnemyPartyConfig {
|
|||
moveSet: [Moves.SLUDGE_BOMB, Moves.GIGA_DRAIN, Moves.ICE_BEAM, Moves.EARTHQUAKE],
|
||||
modifierConfigs: [
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.SITRUS]) as PokemonHeldItemModifierType,
|
||||
modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.SITRUS]) as PokemonHeldItemModifierType,
|
||||
stackCount: 2,
|
||||
},
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.APICOT]) as PokemonHeldItemModifierType,
|
||||
modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.APICOT]) as PokemonHeldItemModifierType,
|
||||
stackCount: 2,
|
||||
},
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.GANLON]) as PokemonHeldItemModifierType,
|
||||
modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.GANLON]) as PokemonHeldItemModifierType,
|
||||
stackCount: 2,
|
||||
},
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.STARF]) as PokemonHeldItemModifierType,
|
||||
modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.STARF]) as PokemonHeldItemModifierType,
|
||||
stackCount: 2,
|
||||
},
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.SALAC]) as PokemonHeldItemModifierType,
|
||||
modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.SALAC]) as PokemonHeldItemModifierType,
|
||||
stackCount: 2,
|
||||
},
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.LUM]) as PokemonHeldItemModifierType,
|
||||
modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.LUM]) as PokemonHeldItemModifierType,
|
||||
stackCount: 2,
|
||||
},
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.LANSAT]) as PokemonHeldItemModifierType,
|
||||
modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.LANSAT]) as PokemonHeldItemModifierType,
|
||||
stackCount: 2,
|
||||
},
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.LIECHI]) as PokemonHeldItemModifierType,
|
||||
modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.LIECHI]) as PokemonHeldItemModifierType,
|
||||
stackCount: 2,
|
||||
},
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.PETAYA]) as PokemonHeldItemModifierType,
|
||||
modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.PETAYA]) as PokemonHeldItemModifierType,
|
||||
stackCount: 2,
|
||||
},
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.ENIGMA]) as PokemonHeldItemModifierType,
|
||||
modifier: generateModifierType(scene, modifierTypes.BERRY, [BerryType.ENIGMA]) as PokemonHeldItemModifierType,
|
||||
stackCount: 2,
|
||||
},
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.BERRY, [BerryType.LEPPA]) as PokemonHeldItemModifierType,
|
||||
modifier: 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: [
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.KINGS_ROCK) as PokemonHeldItemModifierType,
|
||||
modifier: 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: [
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.WIDE_LENS) as PokemonHeldItemModifierType,
|
||||
modifier: 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: [
|
||||
{
|
||||
modifierType: generateModifierType(scene, modifierTypes.QUICK_CLAW) as PokemonHeldItemModifierType,
|
||||
modifier: generateModifierType(scene, modifierTypes.QUICK_CLAW) as PokemonHeldItemModifierType,
|
||||
stackCount: 2,
|
||||
isTransferable: false
|
||||
},
|
||||
|
|
|
@ -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 { PokemonHeldItemModifier } from "#app/modifier/modifier";
|
||||
import { PokemonFormChangeItemModifier, 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,9 +247,10 @@ export const TrainingSessionEncounter: MysteryEncounter =
|
|||
playerPokemon.setNature(encounter.misc.chosenNature);
|
||||
scene.gameData.setPokemonCaught(playerPokemon, false);
|
||||
|
||||
// Add pokemon and mods back
|
||||
// Add pokemon and modifiers 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);
|
||||
|
@ -385,10 +386,10 @@ function getEnemyConfig(scene: BattleScene, playerPokemon: PlayerPokemon, segmen
|
|||
playerPokemon.resetSummonData();
|
||||
|
||||
// Passes modifiers by reference
|
||||
modifiers.value = scene.findModifiers((m) => m instanceof PokemonHeldItemModifier && (m as PokemonHeldItemModifier).pokemonId === playerPokemon.id) as PokemonHeldItemModifier[];
|
||||
modifiers.value = playerPokemon.getHeldItems().filter(m => !(m instanceof PokemonFormChangeItemModifier));
|
||||
const modifierConfigs = modifiers.value.map((mod) => {
|
||||
return {
|
||||
modifierType: mod.type
|
||||
modifier: mod
|
||||
};
|
||||
}) as HeldModifierConfig[];
|
||||
|
||||
|
|
|
@ -31,7 +31,7 @@ const SOUND_EFFECT_WAIT_TIME = 700;
|
|||
export const TrashToTreasureEncounter: MysteryEncounter =
|
||||
MysteryEncounterBuilder.withEncounterType(MysteryEncounterType.TRASH_TO_TREASURE)
|
||||
.withEncounterTier(MysteryEncounterTier.ULTRA)
|
||||
.withSceneWaveRangeRequirement(10, 180)
|
||||
.withSceneWaveRangeRequirement(60, 180)
|
||||
.withMaxAllowedEncounters(1)
|
||||
.withIntroSpriteConfigs([
|
||||
{
|
||||
|
@ -177,7 +177,7 @@ async function tryApplyDigRewardItems(scene: BattleScene) {
|
|||
}
|
||||
}
|
||||
|
||||
scene.playSound("bgm/item_fanfare");
|
||||
scene.playSound("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("bgm/item_fanfare");
|
||||
scene.playSound("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");
|
||||
});
|
||||
}
|
||||
|
|
|
@ -0,0 +1,265 @@
|
|||
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();
|
|
@ -94,6 +94,7 @@ 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",
|
||||
|
@ -111,7 +112,6 @@ export const WeirdDreamEncounter: MysteryEncounter =
|
|||
text: `${namespace}.intro_dialogue`,
|
||||
},
|
||||
])
|
||||
.withSceneWaveRangeRequirement(10, 180)
|
||||
.withTitle(`${namespace}.title`)
|
||||
.withDescription(`${namespace}.description`)
|
||||
.withQuery(`${namespace}.query`)
|
||||
|
|
|
@ -29,6 +29,7 @@ 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;
|
||||
|
@ -175,7 +176,8 @@ const anyBiomeEncounters: MysteryEncounterType[] = [
|
|||
MysteryEncounterType.CLOWNING_AROUND,
|
||||
MysteryEncounterType.WEIRD_DREAM,
|
||||
MysteryEncounterType.TELEPORTING_HIJINKS,
|
||||
MysteryEncounterType.BUG_TYPE_SUPERFAN
|
||||
MysteryEncounterType.BUG_TYPE_SUPERFAN,
|
||||
MysteryEncounterType.UNCOMMON_BREED
|
||||
];
|
||||
|
||||
/**
|
||||
|
@ -282,6 +284,7 @@ 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 => {
|
||||
|
|
|
@ -886,7 +886,7 @@ export function handleMysteryEncounterBattleStartEffects(scene: BattleScene) {
|
|||
|
||||
/**
|
||||
* Can queue extra phases or logic during {@link TurnInitPhase}
|
||||
* Mostly useful for allowing MysteryEncounter enemies to "cheat" and use moves before the first turn
|
||||
* Should mostly just be used for injecting custom phases into the battle system on turn start
|
||||
* @param scene
|
||||
* @return boolean - if true, will skip the remainder of the {@link TurnInitPhase}
|
||||
*/
|
||||
|
|
|
@ -1582,7 +1582,8 @@ export const pokemonEvolutions: PokemonEvolutions = {
|
|||
new SpeciesEvolution(Species.BLISSEY, 1, null, new SpeciesFriendshipEvolutionCondition(200), SpeciesWildEvolutionDelay.LONG)
|
||||
],
|
||||
[Species.PICHU]: [
|
||||
new SpeciesEvolution(Species.PIKACHU, 1, null, new SpeciesFriendshipEvolutionCondition(90), SpeciesWildEvolutionDelay.SHORT)
|
||||
new SpeciesFormEvolution(Species.PIKACHU, "spiky", "partner", 1, null, new SpeciesFriendshipEvolutionCondition(90), SpeciesWildEvolutionDelay.SHORT),
|
||||
new SpeciesFormEvolution(Species.PIKACHU, "", "", 1, null, new SpeciesFriendshipEvolutionCondition(90), SpeciesWildEvolutionDelay.SHORT),
|
||||
],
|
||||
[Species.CLEFFA]: [
|
||||
new SpeciesEvolution(Species.CLEFAIRY, 1, null, new SpeciesFriendshipEvolutionCondition(160), SpeciesWildEvolutionDelay.SHORT)
|
||||
|
|
|
@ -1,24 +1,21 @@
|
|||
|
||||
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 { Variant, variantColorCache } from "./variant";
|
||||
import { variantData } from "./variant";
|
||||
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 { 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 { Abilities } from "#enums/abilities";
|
||||
import { PartyMemberStrength } from "#enums/party-member-strength";
|
||||
import { Species } from "#enums/species";
|
||||
import { Variant, VariantSet, variantColorCache, variantData } from "./variant";
|
||||
|
||||
export enum Region {
|
||||
NORMAL,
|
||||
|
@ -28,7 +25,15 @@ export enum Region {
|
|||
PALDEA
|
||||
}
|
||||
|
||||
export function getPokemonSpecies(species: Species | Species[]): PokemonSpecies {
|
||||
/**
|
||||
* 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()`");
|
||||
}
|
||||
// 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
|
||||
|
@ -309,7 +314,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]?.formSpriteKey;
|
||||
formkey = species.forms[formIndex]?.getFormSpriteKey(formIndex);
|
||||
if (formkey) {
|
||||
variantDataIndex = `${this.speciesId}-${formkey}`;
|
||||
}
|
||||
|
@ -656,8 +661,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): Species {
|
||||
return this.getSpeciesForLevel(level, allowEvolving, true, strength);
|
||||
getTrainerSpeciesForLevel(level: integer, allowEvolving: boolean = false, strength: PartyMemberStrength, currentWave: number = 0): Species {
|
||||
return this.getSpeciesForLevel(level, allowEvolving, true, strength, currentWave);
|
||||
}
|
||||
|
||||
private getStrengthLevelDiff(strength: PartyMemberStrength): integer {
|
||||
|
@ -677,7 +682,7 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali
|
|||
}
|
||||
}
|
||||
|
||||
getSpeciesForLevel(level: integer, allowEvolving: boolean = false, forTrainer: boolean = false, strength: PartyMemberStrength = PartyMemberStrength.WEAKER): Species {
|
||||
getSpeciesForLevel(level: integer, allowEvolving: boolean = false, forTrainer: boolean = false, strength: PartyMemberStrength = PartyMemberStrength.WEAKER, currentWave: number = 0): Species {
|
||||
const prevolutionLevels = this.getPrevolutionLevels();
|
||||
|
||||
if (prevolutionLevels.length) {
|
||||
|
@ -738,6 +743,11 @@ 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) {
|
||||
|
@ -762,7 +772,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); // TODO: is the bang correct?
|
||||
return getPokemonSpecies(evolutionPool.get(weight)).getSpeciesForLevel(level, true, forTrainer, strength, currentWave);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@ 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,
|
||||
|
@ -142,7 +143,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.WEAKER, true),
|
||||
SIX_WEAK_SAME: new TrainerPartyTemplate(6, PartyMemberStrength.WEAK, 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)),
|
||||
|
@ -323,6 +324,15 @@ 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;
|
||||
|
@ -553,9 +563,9 @@ export class TrainerConfig {
|
|||
}
|
||||
case "magma": {
|
||||
return {
|
||||
[TrainerPoolTier.COMMON]: [Species.NUMEL, Species.POOCHYENA, Species.SLUGMA, Species.SOLROCK, Species.HIPPOPOTAS, Species.SANDACONDA, Species.PHANPY, Species.SWINUB, Species.GLIGAR],
|
||||
[TrainerPoolTier.COMMON]: [Species.NUMEL, Species.POOCHYENA, Species.SLUGMA, Species.SOLROCK, Species.HIPPOPOTAS, Species.SANDACONDA, Species.PHANPY, Species.ROLYCOLY, Species.GLIGAR],
|
||||
[TrainerPoolTier.UNCOMMON]: [Species.TRAPINCH, Species.HEATMOR],
|
||||
[TrainerPoolTier.RARE]: [Species.TURTONATOR, Species.CHARCADET]
|
||||
[TrainerPoolTier.RARE]: [Species.CAPSAKID, Species.CHARCADET]
|
||||
};
|
||||
}
|
||||
case "aqua": {
|
||||
|
@ -586,6 +596,27 @@ 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.`);
|
||||
|
@ -1060,7 +1091,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);
|
||||
species = getPokemonSpecies(species).getTrainerSpeciesForLevel(level, true, strength, scene.currentBattle.waveIndex);
|
||||
}
|
||||
return scene.addEnemyPokemon(getPokemonSpecies(species), level, trainerSlot, undefined, undefined, postProcess);
|
||||
};
|
||||
|
@ -1070,7 +1101,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)), level, trainerSlot, undefined, undefined, postProcess);
|
||||
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);
|
||||
return ret;
|
||||
};
|
||||
}
|
||||
|
@ -1404,9 +1435,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.SWINUB, Species.GLIGAR],
|
||||
[TrainerPoolTier.UNCOMMON]: [Species.SOLROCK, Species.HIPPOPOTAS, Species.SANDACONDA, Species.PHANPY, Species.ROLYCOLY, Species.GLIGAR],
|
||||
[TrainerPoolTier.RARE]: [Species.TRAPINCH, Species.HEATMOR],
|
||||
[TrainerPoolTier.SUPER_RARE]: [Species.TURTONATOR, Species.CHARCADET]
|
||||
[TrainerPoolTier.SUPER_RARE]: [Species.CAPSAKID, Species.CHARCADET]
|
||||
}),
|
||||
[TrainerType.TABITHA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("magma_admin", "magma", [Species.CAMERUPT]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)),
|
||||
[TrainerType.COURTNEY]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("magma_admin_female", "magma", [Species.CAMERUPT]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)),
|
||||
|
@ -1426,10 +1457,9 @@ 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_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.JUPITER]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander_female", "galactic", [Species.SKUNTANK]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)),
|
||||
[TrainerType.MARS]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander_female", "galactic", [Species.PURUGLY]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)),
|
||||
[TrainerType.SATURN]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("galactic_commander", "galactic", [Species.TOXICROAK]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)),
|
||||
[TrainerType.PLASMA_GRUNT]: new TrainerConfig(++t).setHasGenders("Plasma Grunt Female").setHasDouble("Plasma Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
|
||||
.setSpeciesPools({
|
||||
[TrainerPoolTier.COMMON]: [Species.PATRAT, Species.LILLIPUP, Species.PURRLOIN, Species.SCRAFTY, Species.WOOBAT, Species.VANILLITE, Species.SANDILE, Species.TRUBBISH],
|
||||
|
@ -1439,7 +1469,6 @@ 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],
|
||||
|
@ -1449,6 +1478,31 @@ 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"),
|
||||
|
@ -1825,7 +1879,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.KINGDRA, Species.LUDICOLO], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.EMPOLEON, Species.LUDICOLO], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
p.pokeball = PokeballType.ULTRA_BALL;
|
||||
|
@ -1838,9 +1892,9 @@ export const trainerConfigs: TrainerConfigs = {
|
|||
p.generateAndPopulateMoveset();
|
||||
p.abilityIndex = 2; // Swift Swim
|
||||
}))
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.HUNTAIL, Species.GOREBYSS], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.OVERQWIL ], TrainerSlot.TRAINER, true, p => {
|
||||
p.generateAndPopulateMoveset();
|
||||
p.abilityIndex = 0; // Swift Swim
|
||||
p.abilityIndex = 1; // Swift Swim
|
||||
}))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SHARPEDO], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
|
@ -1855,9 +1909,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, Species.BASCULEGION]))
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.GYARADOS ]))
|
||||
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.HONCHKROW, Species.HISUI_BRAVIARY ]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.CROBAT, Species.OVERQWIL]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.CROBAT, Species.GLISCOR ]))
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.AZELF, Species.UXIE, Species.MESPRIT ]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.HOUNDOOM ], TrainerSlot.TRAINER, true, p => {
|
||||
p.generateAndPopulateMoveset();
|
||||
|
@ -1905,14 +1959,19 @@ 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.SLITHER_WING, Species.IRON_MOTH], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.GENESECT ], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
p.pokeball = PokeballType.ULTRA_BALL;
|
||||
p.pokeball = PokeballType.MASTER_BALL;
|
||||
p.formIndex = Utils.randSeedInt(5);
|
||||
}))
|
||||
.setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.DURANT]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.DARMANITAN, Species.GALAR_DARMANITAN]))
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.KINGAMBIT]))
|
||||
.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(4, getRandomPartyMemberFunc([ Species.HYDREIGON, Species.IRON_JUGULIS ], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
|
@ -1926,9 +1985,12 @@ 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]))
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.MILOTIC]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.HELIOLISK]))
|
||||
.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(5, getRandomPartyMemberFunc([ Species.GYARADOS ], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
|
@ -1942,8 +2004,11 @@ export const trainerConfigs: TrainerConfigs = {
|
|||
p.generateAndPopulateMoveset();
|
||||
p.pokeball = PokeballType.ULTRA_BALL;
|
||||
}))
|
||||
.setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.GHOLDENGO, Species.AEGISLASH]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.PYROAR]))
|
||||
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.PYROAR ], TrainerSlot.TRAINER, true, p => {
|
||||
p.generateAndPopulateMoveset();
|
||||
p.gender = Gender.MALE;
|
||||
}))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.IRON_MOTH ]))
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GOODRA, Species.HISUI_GOODRA ]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.GYARADOS ], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
|
@ -1957,7 +2022,113 @@ export const trainerConfigs: TrainerConfigs = {
|
|||
p.generateAndPopulateMoveset();
|
||||
p.pokeball = PokeballType.MASTER_BALL;
|
||||
})),
|
||||
// TODO: use signature species?
|
||||
[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();
|
||||
})),
|
||||
[TrainerType.BUCK]: new TrainerConfig(++t).setName("Buck").initForStatTrainer([], true)
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.CLAYDOL ], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 3);
|
||||
|
|
|
@ -26,5 +26,6 @@ export enum MysteryEncounterType {
|
|||
THE_WINSTRATE_CHALLENGE,
|
||||
TELEPORTING_HIJINKS,
|
||||
BUG_TYPE_SUPERFAN,
|
||||
FUN_AND_GAMES
|
||||
FUN_AND_GAMES,
|
||||
UNCOMMON_BREED
|
||||
}
|
||||
|
|
|
@ -72,6 +72,12 @@ 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,
|
||||
|
@ -84,6 +90,12 @@ export enum TrainerType {
|
|||
GHETSIS_2,
|
||||
LYSANDRE,
|
||||
LYSANDRE_2,
|
||||
LUSAMINE,
|
||||
LUSAMINE_2,
|
||||
GUZMA,
|
||||
GUZMA_2,
|
||||
ROSE,
|
||||
ROSE_2,
|
||||
BUCK,
|
||||
CHERYL,
|
||||
MARLEY,
|
||||
|
|
|
@ -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 } from "../modifier/modifier";
|
||||
import { DamageMoneyRewardModifier, EnemyDamageBoosterModifier, EnemyDamageReducerModifier, EnemyEndureChanceModifier, EnemyFusionChanceModifier, HiddenAbilityRateBoosterModifier, PokemonBaseStatModifier, PokemonFriendshipBoosterModifier, PokemonHeldItemModifier, PokemonNatureWeightModifier, ShinyRateBoosterModifier, SurviveDamageModifier, TempBattleStatBoosterModifier, StatBoosterModifier, CritBoosterModifier, TerastallizeModifier, PokemonBaseStatTotalModifier, PokemonIncrementingStatModifier, PokemonBaseStatFlatModifier } from "../modifier/modifier";
|
||||
import { PokeballType } from "../data/pokeball";
|
||||
import { Gender } from "../data/gender";
|
||||
import { initMoveAnim, loadMoveAnimAssets } from "../data/battle-anims";
|
||||
|
@ -778,19 +778,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||
if (!this.stats) {
|
||||
this.stats = [ 0, 0, 0, 0, 0, 0 ];
|
||||
}
|
||||
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 baseStats = this.calculateBaseStats();
|
||||
const stats = Utils.getEnumValues(Stat);
|
||||
for (const s of stats) {
|
||||
const isHp = s === Stat.HP;
|
||||
|
@ -822,6 +810,27 @@ 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;
|
||||
}
|
||||
|
@ -2679,7 +2688,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||
}
|
||||
|
||||
private fusionFaintCry(callback: Function): void {
|
||||
const key = this.getSpeciesForm().getCryKey(this.formIndex);
|
||||
const key = `cry/${this.getSpeciesForm().getCryKey(this.formIndex)}`;
|
||||
let i = 0;
|
||||
let rate = 0.85;
|
||||
const cry = this.scene.playSound(key, { rate: rate }) as AnySound;
|
||||
|
@ -2687,7 +2696,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||
const tintSprite = this.getTintSprite();
|
||||
let duration = cry.totalDuration * 1000;
|
||||
|
||||
let fusionCry = this.scene.playSound(this.getFusionSpeciesForm().getCryKey(this.fusionFormIndex), { rate: rate }) as AnySound;
|
||||
const fusionCryKey = `cry/${this.getFusionSpeciesForm().getCryKey(this.fusionFormIndex)}`;
|
||||
let fusionCry = this.scene.playSound(fusionCryKey, { rate: rate }) as AnySound;
|
||||
fusionCry.stop();
|
||||
duration = Math.min(duration, fusionCry.totalDuration * 1000);
|
||||
fusionCry.destroy();
|
||||
|
@ -2731,7 +2741,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(this.getFusionSpeciesForm().getCryKey(this.fusionFormIndex), Object.assign({ seek: Math.max(fusionCry.totalDuration * 0.4, 0), rate: rate }));
|
||||
fusionCry = this.scene.playSound(fusionCryKey, 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;
|
||||
|
@ -3795,6 +3805,18 @@ 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();
|
||||
|
||||
|
|
|
@ -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)))
|
||||
? getPokemonSpecies(battle.enemyParty[offset].species.getTrainerSpeciesForLevel(level, false, template.getStrength(offset), this.scene.currentBattle.waveIndex))
|
||||
: 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));
|
||||
species = getPokemonSpecies(species.getSpeciesForLevel(level, true, true, strength, this.scene.currentBattle.waveIndex));
|
||||
}
|
||||
|
||||
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));
|
||||
let ret = getPokemonSpecies(species.getTrainerSpeciesForLevel(level, true, strength, this.scene.currentBattle.waveIndex));
|
||||
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));
|
||||
ret = getPokemonSpecies(species.getTrainerSpeciesForLevel(level, true, strength, this.scene.currentBattle.waveIndex));
|
||||
console.log(ret.name);
|
||||
if (this.config.specialtyTypes.find(t => ret.isOfType(t))) {
|
||||
retry = false;
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
import { PokemonHeldItemModifierType } from "#app/modifier/modifier-type";
|
||||
import { PokemonHeldItemModifier } from "#app/modifier/modifier";
|
||||
|
||||
export default interface HeldModifierConfig {
|
||||
modifierType: PokemonHeldItemModifierType;
|
||||
modifier: PokemonHeldItemModifierType | PokemonHeldItemModifier;
|
||||
stackCount?: number;
|
||||
isTransferable?: boolean;
|
||||
}
|
||||
|
|
|
@ -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{pb_bounce_1}schwupp!",
|
||||
"countdownPoof": "@d{32}Eins, @d{15}zwei @d{15}und@d{15}… @d{15}… @d{15}… @d{15}@s{se/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.",
|
||||
|
|
|
@ -80,11 +80,21 @@
|
|||
"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",
|
||||
|
|
|
@ -355,6 +355,30 @@
|
|||
"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!",
|
||||
|
@ -417,7 +441,7 @@
|
|||
},
|
||||
"courtney": {
|
||||
"encounter": {
|
||||
"1": "Das Ding... Das Ding, das du hältst... Das ist es, was...\n$Das ist es, wonach wir von Team Magma suchen...",
|
||||
"1": "Stellt euch...Mir NICHT...IN DEN WEEEG...!!",
|
||||
"2": "... Nun dann... Auslöschen...",
|
||||
"3": "...?! Du... Hm... ♪ Das trifft sich ausgezeichnet... ♪\n$Dann hole ich mir eben zuerst deine Pokémon... Her damit..."
|
||||
},
|
||||
|
@ -446,7 +470,7 @@
|
|||
"3": "Was machst du hier? Bist du uns gefolgt?"
|
||||
},
|
||||
"victory": {
|
||||
"1": "Na gut, bis der Boss Zeit für dich hat, werde ich dein Gegner sein!",
|
||||
"1": "Bwaarharharharhar!! Ich hab zwar verloren, aber das hat Spaß gemacht!",
|
||||
"2": "Ich kann es fühlen! Ich kann es spüren, das ist klar! Die Stärke, die von dir ausgeht!\n$Mehr! Ich will noch mehr! Aber es sieht so aus, als hätten wir keine Zeit mehr...",
|
||||
"3": "Das war Spaß! Ich wusste, dass du mir eine gute Zeit bieten würdest!\n$Ich freue mich darauf, dich eines Tages wieder zu treffen!"
|
||||
}
|
||||
|
@ -535,30 +559,6 @@
|
|||
"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,6 +655,86 @@
|
|||
"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, ♪ wie’n wildes Kleinstein! ♪ Wenn du meinst, dass Team Skull ♪\n$an nix denkt als Krawall, ♪ hast du leider ’nen Knall, ♪ denn das is’ nich’ der Fall! ♪\n$Wir woll’n hier nur gammeln ♪ und gechillt Staub ansammeln! ♪"
|
||||
},
|
||||
"victory": {
|
||||
"1": "Wie jetzt? Schon vorbei?",
|
||||
"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!"
|
||||
|
@ -787,6 +867,72 @@
|
|||
"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!",
|
||||
|
@ -2455,7 +2601,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 und genieße das Event!"
|
||||
"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!"
|
||||
}
|
||||
},
|
||||
"rival_2_female": {
|
||||
|
@ -2463,7 +2609,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 und genieße das Event!"
|
||||
"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!"
|
||||
},
|
||||
"defeat": {
|
||||
"1": "Es ist Ok manchmal zu verlieren…"
|
||||
|
|
|
@ -355,6 +355,30 @@
|
|||
"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!",
|
||||
|
@ -417,7 +441,7 @@
|
|||
},
|
||||
"courtney": {
|
||||
"encounter": {
|
||||
"1": "Das Ding... Das Ding, das du hältst... Das ist es, was...\n$Das ist es, wonach wir von Team Magma suchen...",
|
||||
"1": "Stellt euch...Mir NICHT...IN DEN WEEEG...!!",
|
||||
"2": "... Nun dann... Auslöschen...",
|
||||
"3": "...?! Du... Hm... ♪ Das trifft sich ausgezeichnet... ♪\n$Dann hole ich mir eben zuerst deine Pokémon... Her damit..."
|
||||
},
|
||||
|
@ -446,7 +470,7 @@
|
|||
"3": "Was machst du hier? Bist du uns gefolgt?"
|
||||
},
|
||||
"victory": {
|
||||
"1": "Na gut, bis der Boss Zeit für dich hat, werde ich dein Gegner sein!",
|
||||
"1": "Bwaarharharharhar!! Ich hab zwar verloren, aber das hat Spaß gemacht!",
|
||||
"2": "Ich kann es fühlen! Ich kann es spüren, das ist klar! Die Stärke, die von dir ausgeht!\n$Mehr! Ich will noch mehr! Aber es sieht so aus, als hätten wir keine Zeit mehr...",
|
||||
"3": "Das war Spaß! Ich wusste, dass du mir eine gute Zeit bieten würdest!\n$Ich freue mich darauf, dich eines Tages wieder zu treffen!"
|
||||
}
|
||||
|
@ -535,30 +559,6 @@
|
|||
"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,6 +655,86 @@
|
|||
"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, ♪ wie’n wildes Kleinstein! ♪ Wenn du meinst, dass Team Skull ♪\n$an nix denkt als Krawall, ♪ hast du leider ’nen Knall, ♪ denn das is’ nich’ der Fall! ♪\n$Wir woll’n hier nur gammeln ♪ und gechillt Staub ansammeln! ♪"
|
||||
},
|
||||
"victory": {
|
||||
"1": "Wie jetzt? Schon vorbei?",
|
||||
"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!"
|
||||
|
@ -787,6 +867,72 @@
|
|||
"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!",
|
||||
|
@ -2439,7 +2585,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!\n$@c{smile}Oh-und genieße das Event!"
|
||||
"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!"
|
||||
}
|
||||
},
|
||||
"rival_female": {
|
||||
|
@ -2447,7 +2593,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!\n$@c{smile}Oh-und genieße das Event!"
|
||||
"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!"
|
||||
}
|
||||
},
|
||||
"rival_2": {
|
||||
|
@ -2455,7 +2601,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 und genieße das Event!"
|
||||
"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!"
|
||||
}
|
||||
},
|
||||
"rival_2_female": {
|
||||
|
@ -2463,7 +2609,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 und genieße das Event!"
|
||||
"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!"
|
||||
},
|
||||
"defeat": {
|
||||
"1": "Es ist Ok manchmal zu verlieren…"
|
||||
|
|
|
@ -13,5 +13,32 @@
|
|||
"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}}"
|
||||
}
|
||||
}
|
|
@ -63,6 +63,7 @@
|
|||
"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.",
|
||||
|
|
|
@ -117,5 +117,14 @@
|
|||
"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"
|
||||
"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"
|
||||
}
|
|
@ -139,12 +139,18 @@
|
|||
"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",
|
||||
|
|
|
@ -16,6 +16,9 @@
|
|||
"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",
|
||||
|
@ -27,5 +30,9 @@
|
|||
"plasma_sage": "Weiser von Team Plasma",
|
||||
"plasma_admin": "Team Plasma Vorstand",
|
||||
"flare_admin": "Team Flare Vorstand",
|
||||
"flare_admin_female": "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"
|
||||
|
||||
}
|
|
@ -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{pb_bounce_1}Poof!",
|
||||
"countdownPoof": "@d{32}1, @d{15}2, and@d{15}… @d{15}… @d{15}… @d{15}@s{se/pb_bounce_1}Poof!",
|
||||
"learnMoveAnd": "And…",
|
||||
"levelCapUp": "The level cap\nhas increased to {{levelCap}}!",
|
||||
"moveNotImplemented": "{{moveName}} is not yet implemented and cannot be selected.",
|
||||
|
|
|
@ -80,11 +80,21 @@
|
|||
"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",
|
||||
|
|
|
@ -655,6 +655,86 @@
|
|||
"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!"
|
||||
|
@ -787,6 +867,72 @@
|
|||
"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!",
|
||||
|
|
|
@ -655,6 +655,86 @@
|
|||
"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!"
|
||||
|
@ -787,6 +867,72 @@
|
|||
"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!",
|
||||
|
|
|
@ -1,31 +1,32 @@
|
|||
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";
|
||||
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";
|
||||
|
||||
/**
|
||||
* Injection patterns that can be used:
|
||||
|
@ -46,32 +47,33 @@ export const mysteryEncounter = {
|
|||
// DO NOT REMOVE
|
||||
"unit_test_dialogue": "{{test}}{{test}} {{test{{test}}}} {{test1}} {{test\}} {{test\\}} {{test\\\}} {test}}",
|
||||
|
||||
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
|
||||
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,
|
||||
} as const;
|
||||
|
|
|
@ -7,7 +7,8 @@
|
|||
"1": {
|
||||
"label": "Battle the Pokémon",
|
||||
"tooltip": "(-) Hard Battle\n(+) New Item",
|
||||
"selected": "You approach the\nPokémon without fear."
|
||||
"selected": "You approach the\nPokémon without fear.",
|
||||
"stat_boost": "The {{enemyPokemon}} latent strength boosted one of its stats!"
|
||||
},
|
||||
"2": {
|
||||
"label": "Steal the Item",
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"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!"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -13,5 +13,32 @@
|
|||
"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}}"
|
||||
}
|
||||
}
|
|
@ -63,6 +63,7 @@
|
|||
"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",
|
||||
|
|
|
@ -117,5 +117,14 @@
|
|||
"plasma_grunts": "Plasma Grunts",
|
||||
"flare_grunt": "Flare Grunt",
|
||||
"flare_grunt_female": "Flare Grunt",
|
||||
"flare_grunts": "Flare Grunts"
|
||||
"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"
|
||||
}
|