Merge branch 'main' into disable_battlertag
1
.gitignore
vendored
@ -34,6 +34,7 @@ src/data/battle-anim-data.ts
|
||||
src/overrides.ts
|
||||
|
||||
coverage
|
||||
/.vs
|
||||
|
||||
# Local Documentation
|
||||
/typedoc
|
||||
|
@ -19,6 +19,11 @@
|
||||
font-family: 'emerald';
|
||||
src: url('./fonts/pokemon-emerald-pro.ttf') format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'unifont';
|
||||
src: url('./fonts/unifont-15.1.05.otf') format('opentype');
|
||||
size-adjust: 70%;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'pkmnems';
|
||||
|
BIN
public/audio/bgm/battle_plasma_grunt.mp3
Normal file
BIN
public/audio/bgm/encounter_plasma_grunt.mp3
Normal file
BIN
public/fonts/unifont-15.1.05.otf
Normal file
13175
public/images/items.json
Before Width: | Height: | Size: 125 KiB After Width: | Height: | Size: 50 KiB |
BIN
public/images/items/blank_memory.png
Normal file
After Width: | Height: | Size: 405 B |
BIN
public/images/items/blank_plate.png
Normal file
After Width: | Height: | Size: 308 B |
Before Width: | Height: | Size: 396 B After Width: | Height: | Size: 396 B |
Before Width: | Height: | Size: 411 B After Width: | Height: | Size: 411 B |
BIN
public/images/items/draco_plate.png
Normal file
After Width: | Height: | Size: 308 B |
Before Width: | Height: | Size: 378 B After Width: | Height: | Size: 378 B |
BIN
public/images/items/dread_plate.png
Normal file
After Width: | Height: | Size: 308 B |
BIN
public/images/items/earth_plate.png
Normal file
After Width: | Height: | Size: 308 B |
Before Width: | Height: | Size: 397 B After Width: | Height: | Size: 397 B |
Before Width: | Height: | Size: 386 B After Width: | Height: | Size: 386 B |
Before Width: | Height: | Size: 391 B After Width: | Height: | Size: 391 B |
Before Width: | Height: | Size: 390 B After Width: | Height: | Size: 390 B |
BIN
public/images/items/fist_plate.png
Normal file
After Width: | Height: | Size: 308 B |
BIN
public/images/items/flame_plate.png
Normal file
After Width: | Height: | Size: 308 B |
Before Width: | Height: | Size: 381 B After Width: | Height: | Size: 381 B |
Before Width: | Height: | Size: 393 B After Width: | Height: | Size: 393 B |
Before Width: | Height: | Size: 385 B After Width: | Height: | Size: 385 B |
Before Width: | Height: | Size: 383 B After Width: | Height: | Size: 383 B |
Before Width: | Height: | Size: 375 B After Width: | Height: | Size: 375 B |
BIN
public/images/items/icicle_plate.png
Normal file
After Width: | Height: | Size: 308 B |
BIN
public/images/items/insect_plate.png
Normal file
After Width: | Height: | Size: 308 B |
BIN
public/images/items/iron_plate.png
Normal file
After Width: | Height: | Size: 308 B |
BIN
public/images/items/legend_plate.png
Normal file
After Width: | Height: | Size: 343 B |
BIN
public/images/items/meadow_plate.png
Normal file
After Width: | Height: | Size: 308 B |
Before Width: | Height: | Size: 334 B |
BIN
public/images/items/mind_plate.png
Normal file
After Width: | Height: | Size: 308 B |
BIN
public/images/items/pixie_plate.png
Normal file
After Width: | Height: | Size: 367 B |
Before Width: | Height: | Size: 385 B After Width: | Height: | Size: 385 B |
Before Width: | Height: | Size: 390 B After Width: | Height: | Size: 390 B |
Before Width: | Height: | Size: 383 B After Width: | Height: | Size: 383 B |
BIN
public/images/items/sky_plate.png
Normal file
After Width: | Height: | Size: 308 B |
BIN
public/images/items/splash_plate.png
Normal file
After Width: | Height: | Size: 308 B |
BIN
public/images/items/spooky_plate.png
Normal file
After Width: | Height: | Size: 308 B |
Before Width: | Height: | Size: 387 B After Width: | Height: | Size: 387 B |
BIN
public/images/items/stone_plate.png
Normal file
After Width: | Height: | Size: 308 B |
BIN
public/images/items/toxic_plate.png
Normal file
After Width: | Height: | Size: 308 B |
Before Width: | Height: | Size: 381 B After Width: | Height: | Size: 381 B |
BIN
public/images/items/zap_plate.png
Normal file
After Width: | Height: | Size: 308 B |
@ -1,18 +0,0 @@
|
||||
{
|
||||
"0": {
|
||||
"737373": "737373",
|
||||
"ffffff": "ffffff",
|
||||
"101010": "101010",
|
||||
"b5b5bd": "b5b5bd",
|
||||
"8442ad": "282828",
|
||||
"5a3173": "121212",
|
||||
"294a31": "294a31",
|
||||
"4a9c42": "5fd054",
|
||||
"422152": "000000",
|
||||
"ffc500": "ffc500",
|
||||
"42733a": "317c25",
|
||||
"6b4229": "6b4229",
|
||||
"ad7b4a": "ad7b4a",
|
||||
"deb56b": "deb56b"
|
||||
}
|
||||
}
|
@ -1,18 +0,0 @@
|
||||
{
|
||||
"0": {
|
||||
"5a3a73": "121212",
|
||||
"8442ad": "282828",
|
||||
"101010": "101010",
|
||||
"422152": "000000",
|
||||
"737373": "737373",
|
||||
"ffffff": "ffffff",
|
||||
"b5b5bd": "b5b5bd",
|
||||
"294a31": "294a31",
|
||||
"4a9c42": "5fd054",
|
||||
"deb56b": "ffc500",
|
||||
"42733a": "317c25",
|
||||
"ad7b4a": "ad7b4a",
|
||||
"6b4229": "6b4229",
|
||||
"de3a29": "deb56b"
|
||||
}
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
{
|
||||
"0": {
|
||||
"737373": "737373",
|
||||
"101010": "101010",
|
||||
"b5b5bd": "878787",
|
||||
"ffffff": "ffffff",
|
||||
"102152": "521010",
|
||||
"5a42ad": "992828",
|
||||
"29426b": "6b2929",
|
||||
"5284a5": "952f2f",
|
||||
"63c5ff": "ff6363",
|
||||
"313131": "313131",
|
||||
"31317b": "3a1111",
|
||||
"4a4a4a": "4a4a4a",
|
||||
"212121": "212121",
|
||||
"ffc55a": "ffc55a",
|
||||
"d69431": "d69431"
|
||||
}
|
||||
}
|
@ -1,18 +0,0 @@
|
||||
{
|
||||
"0": {
|
||||
"192952": "521010",
|
||||
"737373": "6a0d0d",
|
||||
"ffffff": "ffffff",
|
||||
"101010": "101010",
|
||||
"5a4aad": "952f2f",
|
||||
"b5b5bd": "a49696",
|
||||
"3a3a84": "3a1111",
|
||||
"5284a5": "7c0b0b",
|
||||
"29426b": "6b2929",
|
||||
"63c5ff": "c83f3f",
|
||||
"d69431": "ffc55a",
|
||||
"ffc55a": "d69431",
|
||||
"313131": "313131",
|
||||
"212121": "212121"
|
||||
}
|
||||
}
|
@ -1,18 +0,0 @@
|
||||
{
|
||||
"0": {
|
||||
"b5b5bd": "999999",
|
||||
"737373": "737373",
|
||||
"101010": "101010",
|
||||
"ffffff": "d0d0d0",
|
||||
"6b213a": "838383",
|
||||
"bd4a52": "380d5f",
|
||||
"a55a3a": "451c6a",
|
||||
"f77b42": "69418e",
|
||||
"633110": "2c2c2c",
|
||||
"ffce63": "9386ff",
|
||||
"4a2919": "191919",
|
||||
"634231": "2c143a",
|
||||
"84634a": "311e42",
|
||||
"943142": "0b0b0b"
|
||||
}
|
||||
}
|
@ -1,18 +0,0 @@
|
||||
{
|
||||
"0": {
|
||||
"634231": "2c143a",
|
||||
"101010": "101010",
|
||||
"bd4a52": "380d5f",
|
||||
"84634a": "311e42",
|
||||
"4a2919": "191919",
|
||||
"737373": "737373",
|
||||
"ffffff": "d0d0d0",
|
||||
"b5b5bd": "999999",
|
||||
"73313a": "838383",
|
||||
"633110": "2c2c2c",
|
||||
"f77b42": "69418e",
|
||||
"a55a3a": "451c6a",
|
||||
"943142": "0b0b0b",
|
||||
"ffce63": "9386ff"
|
||||
}
|
||||
}
|
@ -1770,7 +1770,7 @@
|
||||
0
|
||||
],
|
||||
"645-therian": [
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
],
|
||||
|
@ -1,17 +0,0 @@
|
||||
{
|
||||
"0": {
|
||||
"737373": "737373",
|
||||
"101010": "101010",
|
||||
"ffffff": "ffffff",
|
||||
"b5b5bd": "b5b5bd",
|
||||
"6b4229": "6b4229",
|
||||
"deb56b": "deb56b",
|
||||
"ad7b4a": "ad7b4a",
|
||||
"5a3173": "121212",
|
||||
"8442ad": "282828",
|
||||
"4a9c42": "5fd054",
|
||||
"294a31": "294a31",
|
||||
"42733a": "317c25",
|
||||
"422152": "000000"
|
||||
}
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
{
|
||||
"0": {
|
||||
"422152": "000000",
|
||||
"5a3a73": "121212",
|
||||
"8442ad": "282828",
|
||||
"101010": "101010",
|
||||
"ffffff": "ffffff",
|
||||
"b5b5bd": "b5b5bd",
|
||||
"737373": "737373",
|
||||
"294a31": "294a31",
|
||||
"42733a": "317c25",
|
||||
"4a9c42": "5fd054",
|
||||
"ad7b4a": "ad7b4a",
|
||||
"deb56b": "deb56b",
|
||||
"6b4229": "6b4229"
|
||||
}
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
{
|
||||
"0": {
|
||||
"737373": "737373",
|
||||
"b5b5bd": "878787",
|
||||
"ffffff": "ffffff",
|
||||
"101010": "101010",
|
||||
"31317b": "3a1111",
|
||||
"5a42ad": "992828",
|
||||
"102152": "521010",
|
||||
"5284a5": "952f2f",
|
||||
"63c5ff": "ff6363",
|
||||
"313131": "313131",
|
||||
"4a4a4a": "4a4a4a",
|
||||
"212121": "212121",
|
||||
"29426b": "6b2929"
|
||||
}
|
||||
}
|
@ -1,18 +0,0 @@
|
||||
{
|
||||
"0": {
|
||||
"737373": "6a0d0d",
|
||||
"ffffff": "ffffff",
|
||||
"101010": "101010",
|
||||
"192952": "521010",
|
||||
"5a4aad": "952f2f",
|
||||
"3a3a84": "3a1111",
|
||||
"b5b5bd": "a49696",
|
||||
"29426b": "6b2929",
|
||||
"63c5ff": "c83f3f",
|
||||
"5284a5": "7c0b0b",
|
||||
"ffc55a": "d69431",
|
||||
"d69431": "ffc55a",
|
||||
"313131": "313131",
|
||||
"212121": "212121"
|
||||
}
|
||||
}
|
@ -1,17 +0,0 @@
|
||||
{
|
||||
"0": {
|
||||
"101010": "101010",
|
||||
"ffffff": "d0d0d0",
|
||||
"737373": "737373",
|
||||
"4a2919": "191919",
|
||||
"bd4a52": "380d5f",
|
||||
"943142": "0b0b0b",
|
||||
"b5b5bd": "999999",
|
||||
"84634a": "311e42",
|
||||
"634231": "2c143a",
|
||||
"6b213a": "838383",
|
||||
"a55a3a": "451c6a",
|
||||
"633110": "2c2c2c",
|
||||
"f77b42": "69418e"
|
||||
}
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
{
|
||||
"0": {
|
||||
"101010": "101010",
|
||||
"634231": "531975",
|
||||
"84634a": "311e42",
|
||||
"4a2919": "191919",
|
||||
"bd4a52": "380d5f",
|
||||
"737373": "737373",
|
||||
"b5b5bd": "999999",
|
||||
"ffffff": "d0d0d0",
|
||||
"73313a": "2c143a",
|
||||
"943142": "311e42",
|
||||
"633110": "2c2c2c",
|
||||
"a55a3a": "451c6a",
|
||||
"ad8c3a": "380d5f",
|
||||
"f77b42": "69418e",
|
||||
"ffce63": "9386ff"
|
||||
}
|
||||
}
|
41
public/images/trainer/aqua_grunt_f.json
Normal file
@ -0,0 +1,41 @@
|
||||
{
|
||||
"textures": [
|
||||
{
|
||||
"image": "aqua_grunt_f.png",
|
||||
"format": "RGBA8888",
|
||||
"size": {
|
||||
"w": 71,
|
||||
"h": 71
|
||||
},
|
||||
"scale": 1,
|
||||
"frames": [
|
||||
{
|
||||
"filename": "0001.png",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
"w": 80,
|
||||
"h": 80
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 22,
|
||||
"y": 8,
|
||||
"w": 36,
|
||||
"h": 71
|
||||
},
|
||||
"frame": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 36,
|
||||
"h": 71
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"app": "https://www.codeandweb.com/texturepacker",
|
||||
"version": "3.0",
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:6db25cb5753163d19bca8e2db45849ae:7d8f51509862bfdf8a78bf42dd0005cd:af0aa9494be37941522487032b556989$"
|
||||
}
|
||||
}
|
BIN
public/images/trainer/aqua_grunt_f.png
Normal file
After Width: | Height: | Size: 767 B |
41
public/images/trainer/aqua_grunt_m.json
Normal file
@ -0,0 +1,41 @@
|
||||
{
|
||||
"textures": [
|
||||
{
|
||||
"image": "aqua_grunt_m.png",
|
||||
"format": "RGBA8888",
|
||||
"size": {
|
||||
"w": 73,
|
||||
"h": 73
|
||||
},
|
||||
"scale": 1,
|
||||
"frames": [
|
||||
{
|
||||
"filename": "0001.png",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
"w": 80,
|
||||
"h": 80
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 17,
|
||||
"y": 6,
|
||||
"w": 46,
|
||||
"h": 73
|
||||
},
|
||||
"frame": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 46,
|
||||
"h": 73
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"app": "https://www.codeandweb.com/texturepacker",
|
||||
"version": "3.0",
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:efd07ff3ed1e610150a4b8ca18974343:d9b85b9eb11182e9e4669e2bd8b08694:72b7b50231708a9486d5f315824e4df1$"
|
||||
}
|
||||
}
|
BIN
public/images/trainer/aqua_grunt_m.png
Normal file
After Width: | Height: | Size: 787 B |
41
public/images/trainer/archie.json
Normal file
@ -0,0 +1,41 @@
|
||||
{
|
||||
"textures": [
|
||||
{
|
||||
"image": "archie.png",
|
||||
"format": "RGBA8888",
|
||||
"size": {
|
||||
"w": 80,
|
||||
"h": 80
|
||||
},
|
||||
"scale": 1,
|
||||
"frames": [
|
||||
{
|
||||
"filename": "0001.png",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
"w": 80,
|
||||
"h": 80
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 21,
|
||||
"y": 0,
|
||||
"w": 42,
|
||||
"h": 80
|
||||
},
|
||||
"frame": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 42,
|
||||
"h": 80
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"app": "https://www.codeandweb.com/texturepacker",
|
||||
"version": "3.0",
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:bfa7fdd7b6ac9be68dc9dc562fb8339f:06f87a279450b21b19294ba956b69c26:4b7980be4e3ac1d20c9eaf970913ec63$"
|
||||
}
|
||||
}
|
BIN
public/images/trainer/archie.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
41
public/images/trainer/cyrus.json
Normal file
@ -0,0 +1,41 @@
|
||||
{
|
||||
"textures": [
|
||||
{
|
||||
"image": "cyrus.png",
|
||||
"format": "RGBA8888",
|
||||
"size": {
|
||||
"w": 80,
|
||||
"h": 80
|
||||
},
|
||||
"scale": 1,
|
||||
"frames": [
|
||||
{
|
||||
"filename": "0001.png",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
"w": 80,
|
||||
"h": 80
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 15,
|
||||
"y": 0,
|
||||
"w": 48,
|
||||
"h": 80
|
||||
},
|
||||
"frame": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 48,
|
||||
"h": 80
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"app": "https://www.codeandweb.com/texturepacker",
|
||||
"version": "3.0",
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:5fc65535a23867fca7511cc9d7fc15b3:f328e97821f4faffcbca155cc2c5dc2c:55da82f1e1919212896c9c96b682cbd1$"
|
||||
}
|
||||
}
|
BIN
public/images/trainer/cyrus.png
Normal file
After Width: | Height: | Size: 857 B |
41
public/images/trainer/flare_grunt_f.json
Normal file
@ -0,0 +1,41 @@
|
||||
{
|
||||
"textures": [
|
||||
{
|
||||
"image": "flare_grunt_f.png",
|
||||
"format": "RGBA8888",
|
||||
"size": {
|
||||
"w": 80,
|
||||
"h": 80
|
||||
},
|
||||
"scale": 1,
|
||||
"frames": [
|
||||
{
|
||||
"filename": "0001.png",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
"w": 80,
|
||||
"h": 80
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 31,
|
||||
"y": 0,
|
||||
"w": 23,
|
||||
"h": 80
|
||||
},
|
||||
"frame": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 23,
|
||||
"h": 80
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"app": "https://www.codeandweb.com/texturepacker",
|
||||
"version": "3.0",
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:c30bf82452209a923f4becf13d275a9a:a6355b09f92c9c0388d0b919010f587f:0638dbf213f8a974eb5af76eb1e5ddeb$"
|
||||
}
|
||||
}
|
BIN
public/images/trainer/flare_grunt_f.png
Normal file
After Width: | Height: | Size: 613 B |
41
public/images/trainer/flare_grunt_m.json
Normal file
@ -0,0 +1,41 @@
|
||||
{
|
||||
"textures": [
|
||||
{
|
||||
"image": "flare_grunt_m.png",
|
||||
"format": "RGBA8888",
|
||||
"size": {
|
||||
"w": 77,
|
||||
"h": 77
|
||||
},
|
||||
"scale": 1,
|
||||
"frames": [
|
||||
{
|
||||
"filename": "0001.png",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
"w": 80,
|
||||
"h": 80
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 24,
|
||||
"y": 2,
|
||||
"w": 31,
|
||||
"h": 77
|
||||
},
|
||||
"frame": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 31,
|
||||
"h": 77
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"app": "https://www.codeandweb.com/texturepacker",
|
||||
"version": "3.0",
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:a26606e70778f88a1a7053b2f2420dde:84abf0d0f6bc90c6a60f660567b2d641:adc35a4070bac9fe828c2605a3b15744$"
|
||||
}
|
||||
}
|
BIN
public/images/trainer/flare_grunt_m.png
Normal file
After Width: | Height: | Size: 662 B |
41
public/images/trainer/galactic_grunt_f.json
Normal file
@ -0,0 +1,41 @@
|
||||
{
|
||||
"textures": [
|
||||
{
|
||||
"image": "galactic_grunt_f.png",
|
||||
"format": "RGBA8888",
|
||||
"size": {
|
||||
"w": 68,
|
||||
"h": 68
|
||||
},
|
||||
"scale": 1,
|
||||
"frames": [
|
||||
{
|
||||
"filename": "0001.png",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
"w": 80,
|
||||
"h": 80
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 10,
|
||||
"y": 11,
|
||||
"w": 57,
|
||||
"h": 68
|
||||
},
|
||||
"frame": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 57,
|
||||
"h": 68
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"app": "https://www.codeandweb.com/texturepacker",
|
||||
"version": "3.0",
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:3012867f03f02c4ee67a8ab3ad5a000e:77a5f60f1adc158664b3b2ee17bf30fe:7e8259b5177c0a76e5d02d6bdc66affe$"
|
||||
}
|
||||
}
|
BIN
public/images/trainer/galactic_grunt_f.png
Normal file
After Width: | Height: | Size: 805 B |
41
public/images/trainer/galactic_grunt_m.json
Normal file
@ -0,0 +1,41 @@
|
||||
{
|
||||
"textures": [
|
||||
{
|
||||
"image": "galactic_grunt_m.png",
|
||||
"format": "RGBA8888",
|
||||
"size": {
|
||||
"w": 73,
|
||||
"h": 73
|
||||
},
|
||||
"scale": 1,
|
||||
"frames": [
|
||||
{
|
||||
"filename": "0001.png",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
"w": 80,
|
||||
"h": 80
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 20,
|
||||
"y": 6,
|
||||
"w": 37,
|
||||
"h": 73
|
||||
},
|
||||
"frame": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 37,
|
||||
"h": 73
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"app": "https://www.codeandweb.com/texturepacker",
|
||||
"version": "3.0",
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:856b85bb5d7a1ea2e7a76708ebf82d21:1687dff972369c6248e4aa5b0795fe62:259dd316440c335df5dc6008166d69ca$"
|
||||
}
|
||||
}
|
BIN
public/images/trainer/galactic_grunt_m.png
Normal file
After Width: | Height: | Size: 762 B |
41
public/images/trainer/lysandre.json
Normal file
@ -0,0 +1,41 @@
|
||||
{
|
||||
"textures": [
|
||||
{
|
||||
"image": "lysandre.png",
|
||||
"format": "RGBA8888",
|
||||
"size": {
|
||||
"w": 80,
|
||||
"h": 80
|
||||
},
|
||||
"scale": 1,
|
||||
"frames": [
|
||||
{
|
||||
"filename": "0001.png",
|
||||
"rotated": false,
|
||||
"trimmed": false,
|
||||
"sourceSize": {
|
||||
"w": 80,
|
||||
"h": 80
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 14,
|
||||
"y": 0,
|
||||
"w": 52,
|
||||
"h": 80
|
||||
},
|
||||
"frame": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 52,
|
||||
"h": 80
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"app": "https://www.codeandweb.com/texturepacker",
|
||||
"version": "3.0",
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:6b887c8bab74885a1b05f2b382759db6:ba102d9d25ddd794a3a17f029b971daf:e6066149f6ec4ccb9fc28faea3d64a7f$"
|
||||
}
|
||||
}
|
BIN
public/images/trainer/lysandre.png
Normal file
After Width: | Height: | Size: 797 B |
41
public/images/trainer/magma_grunt_f.json
Normal file
@ -0,0 +1,41 @@
|
||||
{
|
||||
"textures": [
|
||||
{
|
||||
"image": "magma_grunt_f.png",
|
||||
"format": "RGBA8888",
|
||||
"size": {
|
||||
"w": 80,
|
||||
"h": 80
|
||||
},
|
||||
"scale": 1,
|
||||
"frames": [
|
||||
{
|
||||
"filename": "0001.png",
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"sourceSize": {
|
||||
"w": 80,
|
||||
"h": 80
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 10,
|
||||
"y": 0,
|
||||
"w": 60,
|
||||
"h": 80
|
||||
},
|
||||
"frame": {
|
||||
"x": 10,
|
||||
"y": 0,
|
||||
"w": 60,
|
||||
"h": 80
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"app": "https://www.codeandweb.com/texturepacker",
|
||||
"version": "3.0",
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:f63ad48affc076f60fae78992c96a2bf:80928b32710abcb28c07c6fc5a425d99:3b961d8852b62aaf24ceb2030c036515$"
|
||||
}
|
||||
}
|
BIN
public/images/trainer/magma_grunt_f.png
Normal file
After Width: | Height: | Size: 727 B |
41
public/images/trainer/magma_grunt_m.json
Normal file
@ -0,0 +1,41 @@
|
||||
{
|
||||
"textures": [
|
||||
{
|
||||
"image": "magma_grunt_m.png",
|
||||
"format": "RGBA8888",
|
||||
"size": {
|
||||
"w": 80,
|
||||
"h": 80
|
||||
},
|
||||
"scale": 1,
|
||||
"frames": [
|
||||
{
|
||||
"filename": "0001.png",
|
||||
"rotated": false,
|
||||
"trimmed": true,
|
||||
"sourceSize": {
|
||||
"w": 80,
|
||||
"h": 80
|
||||
},
|
||||
"spriteSourceSize": {
|
||||
"x": 10,
|
||||
"y": 0,
|
||||
"w": 60,
|
||||
"h": 80
|
||||
},
|
||||
"frame": {
|
||||
"x": 10,
|
||||
"y": 0,
|
||||
"w": 60,
|
||||
"h": 80
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"app": "https://www.codeandweb.com/texturepacker",
|
||||
"version": "3.0",
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:96aa833d987a01bcdcb6f0e7809f5daf:791cce8d026f92b2e52f0b66df8b8e11:35532fd5d9aea30957d50d06f2d2f9a6$"
|
||||
}
|
||||
}
|
BIN
public/images/trainer/magma_grunt_m.png
Normal file
After Width: | Height: | Size: 756 B |
41
public/images/trainer/maxie.json
Normal file
@ -0,0 +1,41 @@
|
||||
{
|
||||
"textures": [
|
||||
{
|
||||
"image": "maxie.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": 20,
|
||||
"y": 0,
|
||||
"w": 35,
|
||||
"h": 79
|
||||
},
|
||||
"frame": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 35,
|
||||
"h": 79
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"app": "https://www.codeandweb.com/texturepacker",
|
||||
"version": "3.0",
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:a943a18803f18065ae5f19e5089c83bb:33a1c168d314f5fb32f9b34244201178:54a227d24523907b8adf8e907821dcd9$"
|
||||
}
|
||||
}
|
BIN
public/images/trainer/maxie.png
Normal file
After Width: | Height: | Size: 794 B |
41
public/images/trainer/plasma_grunt_f.json
Normal file
@ -0,0 +1,41 @@
|
||||
{
|
||||
"textures": [
|
||||
{
|
||||
"image": "plasma_grunt_f.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": 21,
|
||||
"y": 4,
|
||||
"w": 37,
|
||||
"h": 75
|
||||
},
|
||||
"frame": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 37,
|
||||
"h": 75
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"app": "https://www.codeandweb.com/texturepacker",
|
||||
"version": "3.0",
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:c3001e18f1878c01a4825697200e823e:2003e0d4db249f7020c3471872198ac8:b01645b9e941158814978f2126e7e995$"
|
||||
}
|
||||
}
|
BIN
public/images/trainer/plasma_grunt_f.png
Normal file
After Width: | Height: | Size: 764 B |
41
public/images/trainer/plasma_grunt_m.json
Normal file
@ -0,0 +1,41 @@
|
||||
{
|
||||
"textures": [
|
||||
{
|
||||
"image": "plasma_grunt_m.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": 16,
|
||||
"y": 7,
|
||||
"w": 47,
|
||||
"h": 72
|
||||
},
|
||||
"frame": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 47,
|
||||
"h": 72
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"app": "https://www.codeandweb.com/texturepacker",
|
||||
"version": "3.0",
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:61f195ebbcde93ab7442408edad7fe7a:28ae203b3cb42a94c4ba4420fdebdccc:9ae0ee174d431d48052a2f6b74e9d40c$"
|
||||
}
|
||||
}
|
BIN
public/images/trainer/plasma_grunt_m.png
Normal file
After Width: | Height: | Size: 914 B |
41
public/images/trainer/rocket_grunt_f.json
Normal file
@ -0,0 +1,41 @@
|
||||
{
|
||||
"textures": [
|
||||
{
|
||||
"image": "rocket_grunt_f.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": 18,
|
||||
"y": 9,
|
||||
"w": 50,
|
||||
"h": 67
|
||||
},
|
||||
"frame": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 50,
|
||||
"h": 67
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"app": "https://www.codeandweb.com/texturepacker",
|
||||
"version": "3.0",
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:f2e4df704ed3262efeba03b98c4f34b6:856ea7816491331f96e020076871263b:fadb24d665ba1be4d210fe9064954d5b$"
|
||||
}
|
||||
}
|
BIN
public/images/trainer/rocket_grunt_f.png
Normal file
After Width: | Height: | Size: 718 B |
41
public/images/trainer/rocket_grunt_m.json
Normal file
@ -0,0 +1,41 @@
|
||||
{
|
||||
"textures": [
|
||||
{
|
||||
"image": "rocket_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": 17,
|
||||
"y": 9,
|
||||
"w": 42,
|
||||
"h": 65
|
||||
},
|
||||
"frame": {
|
||||
"x": 0,
|
||||
"y": 0,
|
||||
"w": 42,
|
||||
"h": 65
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"app": "https://www.codeandweb.com/texturepacker",
|
||||
"version": "3.0",
|
||||
"smartupdate": "$TexturePacker:SmartUpdate:831f5748dad92911b10a1cb358ee2dae:a3bf81bbaa3b49cad5e0e549cf94563b:bb6befc9383c9c08837183ae2a7a80c1$"
|
||||
}
|
||||
}
|
BIN
public/images/trainer/rocket_grunt_m.png
Normal file
After Width: | Height: | Size: 677 B |
@ -58,7 +58,7 @@ import * as Overrides from "./overrides";
|
||||
import {InputsController} from "./inputs-controller";
|
||||
import {UiInputs} from "./ui-inputs";
|
||||
import { MoneyFormat } from "./enums/money-format";
|
||||
import { NewArenaEvent } from "./battle-scene-events";
|
||||
import { NewArenaEvent } from "./events/battle-scene";
|
||||
import { Abilities } from "./data/enums/abilities";
|
||||
import ArenaFlyout from "./ui/arena-flyout";
|
||||
import { EaseType } from "./ui/enums/ease-type";
|
||||
@ -314,7 +314,6 @@ export default class BattleScene extends SceneBase {
|
||||
}
|
||||
|
||||
update() {
|
||||
this.inputController.update();
|
||||
this.ui?.update();
|
||||
}
|
||||
|
||||
@ -1820,6 +1819,8 @@ export default class BattleScene extends SceneBase {
|
||||
return 13.940;
|
||||
case "end_summit": //PMD RTDX Sky Tower Summit
|
||||
return 30.025;
|
||||
case "battle_plasma_grunt": //BW Team Plasma Battle
|
||||
return 12.974;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -423,7 +423,14 @@ function getRandomTrainerFunc(trainerPool: (TrainerType | TrainerType[])[]): Get
|
||||
export interface FixedBattleConfigs {
|
||||
[key: integer]: FixedBattleConfig
|
||||
}
|
||||
|
||||
/**
|
||||
* Youngster/Lass on 5
|
||||
* Rival on 8, 55, 95, 145, 195
|
||||
* Evil team grunts on 35, 62, 64, 65, 112, 114 (Not currently spawning)
|
||||
* Evil leader on 115, 165 (Not currently spawning)
|
||||
* E4 on 182, 184, 186, 188
|
||||
* Champion on 190
|
||||
*/
|
||||
export const classicFixedBattles: FixedBattleConfigs = {
|
||||
[5]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
|
||||
.setGetTrainerFunc(scene => new Trainer(scene, TrainerType.YOUNGSTER, Utils.randSeedInt(2) ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)),
|
||||
@ -431,12 +438,28 @@ export const classicFixedBattles: FixedBattleConfigs = {
|
||||
.setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)),
|
||||
[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 ])),
|
||||
[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 ])),
|
||||
// [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 ])),
|
||||
// [65]: 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 ])),
|
||||
[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 ])),
|
||||
// [114]: 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 ])),
|
||||
// [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 ])),
|
||||
[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 ])),
|
||||
[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)
|
||||
|
@ -4037,8 +4037,7 @@ export function initAbilities() {
|
||||
.attr(UncopiableAbilityAbAttr)
|
||||
.attr(UnswappableAbilityAbAttr)
|
||||
.attr(UnsuppressableAbilityAbAttr)
|
||||
.attr(NoFusionAbilityAbAttr)
|
||||
.unimplemented(),
|
||||
.attr(NoFusionAbilityAbAttr),
|
||||
new Ability(Abilities.FLOWER_GIFT, 4)
|
||||
.conditionalAttr(getWeatherCondition(WeatherType.SUNNY || WeatherType.HARSH_SUN), BattleStatMultiplierAbAttr, BattleStat.ATK, 1.5)
|
||||
.conditionalAttr(getWeatherCondition(WeatherType.SUNNY || WeatherType.HARSH_SUN), BattleStatMultiplierAbAttr, BattleStat.SPDEF, 1.5)
|
||||
@ -4390,8 +4389,7 @@ export function initAbilities() {
|
||||
.attr(UncopiableAbilityAbAttr)
|
||||
.attr(UnswappableAbilityAbAttr)
|
||||
.attr(UnsuppressableAbilityAbAttr)
|
||||
.attr(NoFusionAbilityAbAttr)
|
||||
.unimplemented(),
|
||||
.attr(NoFusionAbilityAbAttr),
|
||||
new Ability(Abilities.ELECTRIC_SURGE, 7)
|
||||
.attr(PostSummonTerrainChangeAbAttr, TerrainType.ELECTRIC)
|
||||
.attr(PostBiomeChangeTerrainChangeAbAttr, TerrainType.ELECTRIC),
|
||||
|
@ -449,6 +449,222 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
||||
]
|
||||
}
|
||||
],
|
||||
[TrainerType.ROCKET_GRUNT]: [
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:rocket_grunt.encounter.1"
|
||||
],
|
||||
victory: [
|
||||
"dialogue:rocket_grunt.victory.1"
|
||||
]
|
||||
}
|
||||
],
|
||||
[TrainerType.MAGMA_GRUNT]: [
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:magma_grunt.encounter.1"
|
||||
],
|
||||
victory: [
|
||||
"dialogue:magma_grunt.victory.1"
|
||||
]
|
||||
}
|
||||
],
|
||||
[TrainerType.AQUA_GRUNT]: [
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:aqua_grunt.encounter.1"
|
||||
],
|
||||
victory: [
|
||||
"dialogue:aqua_grunt.victory.1"
|
||||
]
|
||||
}
|
||||
],
|
||||
[TrainerType.GALACTIC_GRUNT]: [
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:galactic_grunt.encounter.1"
|
||||
],
|
||||
victory: [
|
||||
"dialogue:galactic_grunt.victory.1"
|
||||
]
|
||||
}
|
||||
],
|
||||
[TrainerType.PLASMA_GRUNT]: [
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:plasma_grunt.encounter.1"
|
||||
],
|
||||
victory: [
|
||||
"dialogue:plasma_grunt.victory.1"
|
||||
]
|
||||
}
|
||||
],
|
||||
[TrainerType.FLARE_GRUNT]: [
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:flare_grunt.encounter.1"
|
||||
],
|
||||
victory: [
|
||||
"dialogue:flare_grunt.victory.1"
|
||||
]
|
||||
}
|
||||
],
|
||||
[TrainerType.ROCKET_BOSS_GIOVANNI_1]: [
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:rocket_boss_giovanni_1.encounter.1"
|
||||
],
|
||||
victory: [
|
||||
"dialogue:rocket_boss_giovanni_1.victory.1"
|
||||
],
|
||||
defeat: [
|
||||
"dialogue:rocket_boss_giovanni_1.defeat.1"
|
||||
]
|
||||
}
|
||||
],
|
||||
[TrainerType.ROCKET_BOSS_GIOVANNI_2]: [
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:rocket_boss_giovanni_2.encounter.1"
|
||||
],
|
||||
victory: [
|
||||
"dialogue:rocket_boss_giovanni_2.victory.1"
|
||||
],
|
||||
defeat: [
|
||||
"dialogue:rocket_boss_giovanni_2.defeat.1"
|
||||
]
|
||||
}
|
||||
],
|
||||
[TrainerType.MAXIE]: [
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:magma_boss_maxie_1.encounter.1"
|
||||
],
|
||||
victory: [
|
||||
"dialogue:magma_boss_maxie_1.victory.1"
|
||||
],
|
||||
defeat: [
|
||||
"dialogue:magma_boss_maxie_1.defeat.1"
|
||||
]
|
||||
}
|
||||
],
|
||||
[TrainerType.MAXIE_2]: [
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:magma_boss_maxie_2.encounter.1"
|
||||
],
|
||||
victory: [
|
||||
"dialogue:magma_boss_maxie_2.victory.1"
|
||||
],
|
||||
defeat: [
|
||||
"dialogue:magma_boss_maxie_2.defeat.1"
|
||||
]
|
||||
}
|
||||
],
|
||||
[TrainerType.ARCHIE]: [
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:aqua_boss_archie_1.encounter.1"
|
||||
],
|
||||
victory: [
|
||||
"dialogue:aqua_boss_archie_1.victory.1"
|
||||
],
|
||||
defeat: [
|
||||
"dialogue:aqua_boss_archie_1.defeat.1"
|
||||
]
|
||||
}
|
||||
],
|
||||
[TrainerType.ARCHIE_2]: [
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:aqua_boss_archie_2.encounter.1"
|
||||
],
|
||||
victory: [
|
||||
"dialogue:aqua_boss_archie_2.victory.1"
|
||||
],
|
||||
defeat: [
|
||||
"dialogue:aqua_boss_archie_2.defeat.1"
|
||||
]
|
||||
}
|
||||
],
|
||||
[TrainerType.CYRUS]: [
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:galactic_boss_cyrus_1.encounter.1"
|
||||
],
|
||||
victory: [
|
||||
"dialogue:galactic_boss_cyrus_1.victory.1"
|
||||
],
|
||||
defeat: [
|
||||
"dialogue:galactic_boss_cyrus_1.defeat.1"
|
||||
]
|
||||
}
|
||||
],
|
||||
[TrainerType.CYRUS_2]: [
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:galactic_boss_cyrus_2.encounter.1"
|
||||
],
|
||||
victory: [
|
||||
"dialogue:galactic_boss_cyrus_2.victory.1"
|
||||
],
|
||||
defeat: [
|
||||
"dialogue:galactic_boss_cyrus_2.defeat.1"
|
||||
]
|
||||
}
|
||||
],
|
||||
[TrainerType.GHETSIS]: [
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:plasma_boss_ghetsis_1.encounter.1"
|
||||
],
|
||||
victory: [
|
||||
"dialogue:plasma_boss_ghetsis_1.victory.1"
|
||||
],
|
||||
defeat: [
|
||||
"dialogue:plasma_boss_ghetsis_1.defeat.1"
|
||||
]
|
||||
}
|
||||
],
|
||||
[TrainerType.GHETSIS_2]: [
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:plasma_boss_ghetsis_2.encounter.1"
|
||||
],
|
||||
victory: [
|
||||
"dialogue:plasma_boss_ghetsis_2.victory.1"
|
||||
],
|
||||
defeat: [
|
||||
"dialogue:plasma_boss_ghetsis_2.defeat.1"
|
||||
]
|
||||
}
|
||||
],
|
||||
[TrainerType.LYSANDRE]: [
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:flare_boss_lysandre_1.encounter.1"
|
||||
],
|
||||
victory: [
|
||||
"dialogue:flare_boss_lysandre_1.victory.1"
|
||||
],
|
||||
defeat: [
|
||||
"dialogue:flare_boss_lysandre_1.defeat.1"
|
||||
]
|
||||
}
|
||||
],
|
||||
[TrainerType.LYSANDRE_2]: [
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:flare_boss_lysandre_2.encounter.1"
|
||||
],
|
||||
victory: [
|
||||
"dialogue:flare_boss_lysandre_2.victory.1"
|
||||
],
|
||||
defeat: [
|
||||
"dialogue:flare_boss_lysandre_2.defeat.1"
|
||||
]
|
||||
}
|
||||
],
|
||||
[TrainerType.BROCK]: {
|
||||
encounter: [
|
||||
"dialogue:brock.encounter.1",
|
||||
|
@ -52,6 +52,24 @@ export enum TrainerType {
|
||||
WAITER,
|
||||
WORKER,
|
||||
YOUNGSTER,
|
||||
ROCKET_GRUNT,
|
||||
MAGMA_GRUNT,
|
||||
AQUA_GRUNT,
|
||||
GALACTIC_GRUNT,
|
||||
PLASMA_GRUNT,
|
||||
FLARE_GRUNT,
|
||||
ROCKET_BOSS_GIOVANNI_1,
|
||||
ROCKET_BOSS_GIOVANNI_2,
|
||||
MAXIE,
|
||||
MAXIE_2,
|
||||
ARCHIE,
|
||||
ARCHIE_2,
|
||||
CYRUS,
|
||||
CYRUS_2,
|
||||
GHETSIS,
|
||||
GHETSIS_2,
|
||||
LYSANDRE,
|
||||
LYSANDRE_2,
|
||||
|
||||
BROCK = 200,
|
||||
MISTY,
|
||||
|
@ -3328,6 +3328,19 @@ export class VariableMoveTypeAttr extends MoveAttr {
|
||||
}
|
||||
}
|
||||
|
||||
export class FormChangeItemTypeAttr extends VariableMoveTypeAttr {
|
||||
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
||||
if ([user.species.speciesId, user.fusionSpecies?.speciesId].includes(Species.ARCEUS) || [user.species.speciesId, user.fusionSpecies?.speciesId].includes(Species.SILVALLY)) {
|
||||
const form = user.species.speciesId === Species.ARCEUS || user.species.speciesId === Species.SILVALLY ? user.formIndex : user.fusionSpecies.formIndex;
|
||||
|
||||
move.type = Type[Type[form]];
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
export class TechnoBlastTypeAttr extends VariableMoveTypeAttr {
|
||||
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
||||
if ([user.species.speciesId, user.fusionSpecies?.speciesId].includes(Species.GENESECT)) {
|
||||
@ -5041,7 +5054,7 @@ export class SuppressAbilitiesAttr extends MoveEffectAttr {
|
||||
|
||||
target.summonData.abilitySuppressed = true;
|
||||
|
||||
target.scene.queueMessage(getPokemonMessage(target, " ability\nwas suppressed!"));
|
||||
target.scene.queueMessage(getPokemonMessage(target, "'s ability\nwas suppressed!"));
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -5051,6 +5064,35 @@ export class SuppressAbilitiesAttr extends MoveEffectAttr {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Applies the effects of {@linkcode SuppressAbilitiesAttr} if the target has already moved this turn.
|
||||
* @extends MoveEffectAttr
|
||||
* @see {@linkcode Moves.CORE_ENFORCER} (the move which uses this effect)
|
||||
*/
|
||||
export class SuppressAbilitiesIfActedAttr extends MoveEffectAttr {
|
||||
/**
|
||||
* If the target has already acted this turn, apply a {@linkcode SuppressAbilitiesAttr} effect unless the
|
||||
* abillity cannot be suppressed. This is a secondary effect and has no bearing on the success or failure of the move.
|
||||
*
|
||||
* @returns True if the move occurred, otherwise false. Note that true will be returned even if the target has not
|
||||
* yet moved or if the target's abiilty is un-suppressable.
|
||||
*/
|
||||
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
||||
if (!super.apply(user, target, move, args)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (target.turnData.acted) {
|
||||
const suppressAttr = new SuppressAbilitiesAttr();
|
||||
if (suppressAttr.getCondition()(user, target, move)) {
|
||||
suppressAttr.apply(user, target, move, args);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
export class TransformAttr extends MoveEffectAttr {
|
||||
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise<boolean> {
|
||||
return new Promise(resolve => {
|
||||
@ -6553,7 +6595,7 @@ export function initMoves() {
|
||||
.attr(ConfuseAttr)
|
||||
.soundBased(),
|
||||
new AttackMove(Moves.JUDGMENT, Type.NORMAL, MoveCategory.SPECIAL, 100, 100, 10, -1, 0, 4)
|
||||
.partial(),
|
||||
.attr(FormChangeItemTypeAttr),
|
||||
new AttackMove(Moves.BUG_BITE, Type.BUG, MoveCategory.PHYSICAL, 60, 100, 20, -1, 0, 4)
|
||||
.attr(StealEatBerryAttr),
|
||||
new AttackMove(Moves.CHARGE_BEAM, Type.ELECTRIC, MoveCategory.SPECIAL, 50, 90, 10, 70, 0, 4)
|
||||
@ -7239,7 +7281,7 @@ export function initMoves() {
|
||||
.attr(MatchUserTypeAttr),
|
||||
new AttackMove(Moves.CORE_ENFORCER, Type.DRAGON, MoveCategory.SPECIAL, 100, 100, 10, -1, 0, 7)
|
||||
.target(MoveTarget.ALL_NEAR_ENEMIES)
|
||||
.partial(),
|
||||
.attr(SuppressAbilitiesIfActedAttr),
|
||||
new AttackMove(Moves.TROP_KICK, Type.GRASS, MoveCategory.PHYSICAL, 70, 100, 15, 100, 0, 7)
|
||||
.attr(StatChangeAttr, BattleStat.ATK, -1),
|
||||
new StatusMove(Moves.INSTRUCT, Type.PSYCHIC, -1, 15, -1, 0, 7)
|
||||
@ -7323,7 +7365,7 @@ export function initMoves() {
|
||||
new AttackMove(Moves.NATURES_MADNESS, Type.FAIRY, MoveCategory.SPECIAL, -1, 90, 10, -1, 0, 7)
|
||||
.attr(TargetHalfHpDamageAttr),
|
||||
new AttackMove(Moves.MULTI_ATTACK, Type.NORMAL, MoveCategory.PHYSICAL, 120, 100, 10, -1, 0, 7)
|
||||
.partial(),
|
||||
.attr(FormChangeItemTypeAttr),
|
||||
/* Unused */
|
||||
new AttackMove(Moves.TEN_MILLION_VOLT_THUNDERBOLT, Type.ELECTRIC, MoveCategory.SPECIAL, 195, -1, 1, -1, 0, 7)
|
||||
.partial()
|
||||
|
@ -86,7 +86,45 @@ export enum FormChangeItem {
|
||||
SHOCK_DRIVE,
|
||||
BURN_DRIVE,
|
||||
CHILL_DRIVE,
|
||||
DOUSE_DRIVE
|
||||
DOUSE_DRIVE,
|
||||
|
||||
FIST_PLATE = 100,
|
||||
SKY_PLATE,
|
||||
TOXIC_PLATE,
|
||||
EARTH_PLATE,
|
||||
STONE_PLATE,
|
||||
INSECT_PLATE,
|
||||
SPOOKY_PLATE,
|
||||
IRON_PLATE,
|
||||
FLAME_PLATE,
|
||||
SPLASH_PLATE,
|
||||
MEADOW_PLATE,
|
||||
ZAP_PLATE,
|
||||
MIND_PLATE,
|
||||
ICICLE_PLATE,
|
||||
DRACO_PLATE,
|
||||
DREAD_PLATE,
|
||||
PIXIE_PLATE,
|
||||
BLANK_PLATE, // TODO: Find a potential use for this
|
||||
LEGEND_PLATE, // TODO: Find a potential use for this
|
||||
FIGHTING_MEMORY,
|
||||
FLYING_MEMORY,
|
||||
POISON_MEMORY,
|
||||
GROUND_MEMORY,
|
||||
ROCK_MEMORY,
|
||||
BUG_MEMORY,
|
||||
GHOST_MEMORY,
|
||||
STEEL_MEMORY,
|
||||
FIRE_MEMORY,
|
||||
WATER_MEMORY,
|
||||
GRASS_MEMORY,
|
||||
ELECTRIC_MEMORY,
|
||||
PSYCHIC_MEMORY,
|
||||
ICE_MEMORY,
|
||||
DRAGON_MEMORY,
|
||||
DARK_MEMORY,
|
||||
FAIRY_MEMORY,
|
||||
BLANK_MEMORY // TODO: Find a potential use for this
|
||||
}
|
||||
|
||||
export type SpeciesFormChangeConditionPredicate = (p: Pokemon) => boolean;
|
||||
@ -533,6 +571,25 @@ export const pokemonFormChanges: PokemonFormChanges = {
|
||||
new SpeciesFormChange(Species.SHAYMIN, "sky", "land", new SpeciesFormChangeTimeOfDayTrigger(TimeOfDay.DAWN, TimeOfDay.NIGHT)),
|
||||
new SpeciesFormChange(Species.SHAYMIN, "sky", "land", new SpeciesFormChangeStatusEffectTrigger(StatusEffect.FREEZE))
|
||||
],
|
||||
[Species.ARCEUS]: [
|
||||
new SpeciesFormChange(Species.ARCEUS, "normal", "fighting", new SpeciesFormChangeItemTrigger(FormChangeItem.FIST_PLATE)),
|
||||
new SpeciesFormChange(Species.ARCEUS, "normal", "flying", new SpeciesFormChangeItemTrigger(FormChangeItem.SKY_PLATE)),
|
||||
new SpeciesFormChange(Species.ARCEUS, "normal", "poison", new SpeciesFormChangeItemTrigger(FormChangeItem.TOXIC_PLATE)),
|
||||
new SpeciesFormChange(Species.ARCEUS, "normal", "ground", new SpeciesFormChangeItemTrigger(FormChangeItem.EARTH_PLATE)),
|
||||
new SpeciesFormChange(Species.ARCEUS, "normal", "rock", new SpeciesFormChangeItemTrigger(FormChangeItem.STONE_PLATE)),
|
||||
new SpeciesFormChange(Species.ARCEUS, "normal", "bug", new SpeciesFormChangeItemTrigger(FormChangeItem.INSECT_PLATE)),
|
||||
new SpeciesFormChange(Species.ARCEUS, "normal", "ghost", new SpeciesFormChangeItemTrigger(FormChangeItem.SPOOKY_PLATE)),
|
||||
new SpeciesFormChange(Species.ARCEUS, "normal", "steel", new SpeciesFormChangeItemTrigger(FormChangeItem.IRON_PLATE)),
|
||||
new SpeciesFormChange(Species.ARCEUS, "normal", "fire", new SpeciesFormChangeItemTrigger(FormChangeItem.FLAME_PLATE)),
|
||||
new SpeciesFormChange(Species.ARCEUS, "normal", "water", new SpeciesFormChangeItemTrigger(FormChangeItem.SPLASH_PLATE)),
|
||||
new SpeciesFormChange(Species.ARCEUS, "normal", "grass", new SpeciesFormChangeItemTrigger(FormChangeItem.MEADOW_PLATE)),
|
||||
new SpeciesFormChange(Species.ARCEUS, "normal", "electric", new SpeciesFormChangeItemTrigger(FormChangeItem.ZAP_PLATE)),
|
||||
new SpeciesFormChange(Species.ARCEUS, "normal", "psychic", new SpeciesFormChangeItemTrigger(FormChangeItem.MIND_PLATE)),
|
||||
new SpeciesFormChange(Species.ARCEUS, "normal", "ice", new SpeciesFormChangeItemTrigger(FormChangeItem.ICICLE_PLATE)),
|
||||
new SpeciesFormChange(Species.ARCEUS, "normal", "dragon", new SpeciesFormChangeItemTrigger(FormChangeItem.DRACO_PLATE)),
|
||||
new SpeciesFormChange(Species.ARCEUS, "normal", "dark", new SpeciesFormChangeItemTrigger(FormChangeItem.DREAD_PLATE)),
|
||||
new SpeciesFormChange(Species.ARCEUS, "normal", "fairy", new SpeciesFormChangeItemTrigger(FormChangeItem.PIXIE_PLATE))
|
||||
],
|
||||
[Species.DARMANITAN]: [
|
||||
new SpeciesFormChange(Species.DARMANITAN, "", "zen", new SpeciesFormChangeManualTrigger(), true),
|
||||
new SpeciesFormChange(Species.DARMANITAN, "zen", "", new SpeciesFormChangeManualTrigger(), true)
|
||||
@ -597,6 +654,25 @@ export const pokemonFormChanges: PokemonFormChanges = {
|
||||
new SpeciesFormChange(Species.WISHIWASHI, "", "school", new SpeciesFormChangeManualTrigger(), true),
|
||||
new SpeciesFormChange(Species.WISHIWASHI, "school", "", new SpeciesFormChangeManualTrigger(), true)
|
||||
],
|
||||
[Species.SILVALLY]: [
|
||||
new SpeciesFormChange(Species.SILVALLY, "normal", "fighting", new SpeciesFormChangeItemTrigger(FormChangeItem.FIGHTING_MEMORY)),
|
||||
new SpeciesFormChange(Species.SILVALLY, "normal", "flying", new SpeciesFormChangeItemTrigger(FormChangeItem.FLYING_MEMORY)),
|
||||
new SpeciesFormChange(Species.SILVALLY, "normal", "poison", new SpeciesFormChangeItemTrigger(FormChangeItem.POISON_MEMORY)),
|
||||
new SpeciesFormChange(Species.SILVALLY, "normal", "ground", new SpeciesFormChangeItemTrigger(FormChangeItem.GROUND_MEMORY)),
|
||||
new SpeciesFormChange(Species.SILVALLY, "normal", "rock", new SpeciesFormChangeItemTrigger(FormChangeItem.ROCK_MEMORY)),
|
||||
new SpeciesFormChange(Species.SILVALLY, "normal", "bug", new SpeciesFormChangeItemTrigger(FormChangeItem.BUG_MEMORY)),
|
||||
new SpeciesFormChange(Species.SILVALLY, "normal", "ghost", new SpeciesFormChangeItemTrigger(FormChangeItem.GHOST_MEMORY)),
|
||||
new SpeciesFormChange(Species.SILVALLY, "normal", "steel", new SpeciesFormChangeItemTrigger(FormChangeItem.STEEL_MEMORY)),
|
||||
new SpeciesFormChange(Species.SILVALLY, "normal", "fire", new SpeciesFormChangeItemTrigger(FormChangeItem.FIRE_MEMORY)),
|
||||
new SpeciesFormChange(Species.SILVALLY, "normal", "water", new SpeciesFormChangeItemTrigger(FormChangeItem.WATER_MEMORY)),
|
||||
new SpeciesFormChange(Species.SILVALLY, "normal", "grass", new SpeciesFormChangeItemTrigger(FormChangeItem.GRASS_MEMORY)),
|
||||
new SpeciesFormChange(Species.SILVALLY, "normal", "electric", new SpeciesFormChangeItemTrigger(FormChangeItem.ELECTRIC_MEMORY)),
|
||||
new SpeciesFormChange(Species.SILVALLY, "normal", "psychic", new SpeciesFormChangeItemTrigger(FormChangeItem.PSYCHIC_MEMORY)),
|
||||
new SpeciesFormChange(Species.SILVALLY, "normal", "ice", new SpeciesFormChangeItemTrigger(FormChangeItem.ICE_MEMORY)),
|
||||
new SpeciesFormChange(Species.SILVALLY, "normal", "dragon", new SpeciesFormChangeItemTrigger(FormChangeItem.DRAGON_MEMORY)),
|
||||
new SpeciesFormChange(Species.SILVALLY, "normal", "dark", new SpeciesFormChangeItemTrigger(FormChangeItem.DARK_MEMORY)),
|
||||
new SpeciesFormChange(Species.SILVALLY, "normal", "fairy", new SpeciesFormChangeItemTrigger(FormChangeItem.FAIRY_MEMORY))
|
||||
],
|
||||
[Species.MINIOR]: [
|
||||
new SpeciesFormChange(Species.MINIOR, "red-meteor", "red", new SpeciesFormChangeManualTrigger(), true),
|
||||
new SpeciesFormChange(Species.MINIOR, "red", "red-meteor", new SpeciesFormChangeManualTrigger(), true),
|
||||
|
@ -295,6 +295,25 @@ export class TrainerConfig {
|
||||
case TrainerType.LARRY_ELITE:
|
||||
trainerType = TrainerType.LARRY;
|
||||
break;
|
||||
case TrainerType.ROCKET_BOSS_GIOVANNI_1:
|
||||
case TrainerType.ROCKET_BOSS_GIOVANNI_2:
|
||||
trainerType = TrainerType.GIOVANNI;
|
||||
break;
|
||||
case TrainerType.MAXIE_2:
|
||||
trainerType = TrainerType.MAXIE;
|
||||
break;
|
||||
case TrainerType.ARCHIE_2:
|
||||
trainerType = TrainerType.ARCHIE;
|
||||
break;
|
||||
case TrainerType.CYRUS_2:
|
||||
trainerType = TrainerType.CYRUS;
|
||||
break;
|
||||
case TrainerType.GHETSIS_2:
|
||||
trainerType = TrainerType.GHETSIS;
|
||||
break;
|
||||
case TrainerType.LYSANDRE_2:
|
||||
trainerType = TrainerType.LYSANDRE;
|
||||
break;
|
||||
case TrainerType.MARNIE_ELITE:
|
||||
trainerType = TrainerType.MARNIE;
|
||||
break;
|
||||
@ -508,6 +527,39 @@ export class TrainerConfig {
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes the trainer configuration for an evil team leader. Temporarily hardcoding evil leader teams though.
|
||||
* @param {Species | Species[]} signatureSpecies - The signature species for the evil team leader.
|
||||
* @param {Type[]} specialtyTypes - The specialty types for the evil team Leader.
|
||||
* @returns {TrainerConfig} - The updated TrainerConfig instance.
|
||||
* **/
|
||||
initForEvilTeamLeader(title: string, signatureSpecies: (Species | Species[])[], ...specialtyTypes: Type[]): TrainerConfig {
|
||||
if (!getIsInitialized()) {
|
||||
initI18n();
|
||||
}
|
||||
this.setPartyTemplates(trainerPartyTemplates.RIVAL_5);
|
||||
signatureSpecies.forEach((speciesPool, s) => {
|
||||
if (!Array.isArray(speciesPool)) {
|
||||
speciesPool = [speciesPool];
|
||||
}
|
||||
this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool));
|
||||
});
|
||||
if (specialtyTypes.length) {
|
||||
this.setSpeciesFilter(p => specialtyTypes.find(t => p.isOfType(t)) !== undefined);
|
||||
this.setSpecialtyTypes(...specialtyTypes);
|
||||
}
|
||||
const nameForCall = this.name.toLowerCase().replace(/\s/g, "_");
|
||||
this.name = i18next.t(`trainerNames:${nameForCall}`);
|
||||
this.setTitle(title);
|
||||
this.setMoneyMultiplier(2.5);
|
||||
this.setBoss();
|
||||
this.setStaticParty();
|
||||
this.setBattleBgm("battle_unova_gym"); // TODO: change
|
||||
this.setVictoryBgm("victory_gym"); // TODO: change
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes the trainer configuration for a Gym Leader.
|
||||
* @param {Species | Species[]} signatureSpecies - The signature species for the Gym Leader.
|
||||
@ -761,6 +813,34 @@ interface TrainerConfigs {
|
||||
[key: integer]: TrainerConfig
|
||||
}
|
||||
|
||||
/**
|
||||
* The function to get variable strength grutns
|
||||
* @param scene the singleton scene being passed in
|
||||
* @returns the correct TrainerPartyTemplate
|
||||
*/
|
||||
function getEvilGruntPartyTemplate(scene: BattleScene): TrainerPartyTemplate {
|
||||
const waveIndex = scene.currentBattle?.waveIndex;
|
||||
if (waveIndex < 40) {
|
||||
return trainerPartyTemplates.TWO_AVG;
|
||||
} else if (waveIndex < 80) {
|
||||
switch (waveIndex) {
|
||||
case 62:
|
||||
return trainerPartyTemplates.THREE_AVG;
|
||||
case 64:
|
||||
return trainerPartyTemplates.TWO_AVG_ONE_STRONG;
|
||||
case 65:
|
||||
return trainerPartyTemplates.GYM_LEADER_4; // 3avg 1 strong 1 stronger
|
||||
}
|
||||
} else {
|
||||
switch (waveIndex) {
|
||||
case 112:
|
||||
return trainerPartyTemplates.GYM_LEADER_4; // 3avg 1 strong 1 stronger
|
||||
case 114:
|
||||
return trainerPartyTemplates.GYM_LEADER_5; // 3 avg 2 strong 1 stronger
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getWavePartyTemplate(scene: BattleScene, ...templates: TrainerPartyTemplate[]) {
|
||||
return templates[Math.min(Math.max(Math.ceil((scene.gameMode.getWaveForDifficulty(scene.currentBattle?.waveIndex || startingWave, true) - 20) / 30), 0), templates.length - 1)];
|
||||
}
|
||||
@ -1103,6 +1183,54 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
.setSpeciesPools(
|
||||
[Species.CATERPIE, Species.WEEDLE, Species.RATTATA, Species.SENTRET, Species.POOCHYENA, Species.ZIGZAGOON, Species.WURMPLE, Species.BIDOOF, Species.PATRAT, Species.LILLIPUP]
|
||||
),
|
||||
[TrainerType.ROCKET_GRUNT]: new TrainerConfig(++t).setHasGenders("Rocket Grunt Female").setHasDouble("Rocket Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
|
||||
.setSpeciesPools({
|
||||
[TrainerPoolTier.COMMON]: [ Species.WEEDLE, Species.RATTATA, Species.EKANS, Species.SANDSHREW, Species.ZUBAT, Species.GEODUDE, Species.KOFFING],
|
||||
[TrainerPoolTier.UNCOMMON]: [Species.GRIMER, Species.CUBONE, Species.ODDISH, Species.GROWLITHE, Species.MURKROW, Species.GASTLY, Species.EXEGGCUTE, Species.VOLTORB],
|
||||
[TrainerPoolTier.RARE]: [Species.GYARADOS, Species.TAUROS, Species.SCYTHER],
|
||||
[TrainerPoolTier.SUPER_RARE]: [Species.PORYGON, Species.ALOLA_RATTATA, Species.ALOLA_SANDSHREW, Species.ALOLA_MEOWTH, Species.ALOLA_GRIMER, Species.ALOLA_GEODUDE],
|
||||
[TrainerPoolTier.ULTRA_RARE]: [Species.DRATINI, Species.LARVITAR]
|
||||
}),
|
||||
[TrainerType.MAGMA_GRUNT]: new TrainerConfig(++t).setHasGenders("Magma Grunt Female").setHasDouble("Magma Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
|
||||
.setSpeciesPools({
|
||||
[TrainerPoolTier.COMMON]: [Species.SLUGMA, Species.POOCHYENA, Species.NUMEL, Species.ZIGZAGOON, Species.DIGLETT, Species.MAGBY],
|
||||
[TrainerPoolTier.UNCOMMON]: [Species.PHANPY, Species.SWINUB, Species.GLIGAR, Species.TORKOAL, Species.BALTOY, Species.BARBOACH],
|
||||
[TrainerPoolTier.RARE]: [Species.SOLROCK, Species.HIPPOPOTAS, Species.SANDACONDA],
|
||||
[TrainerPoolTier.SUPER_RARE]: [Species.TRAPINCH, Species.HEATMOR],
|
||||
[TrainerPoolTier.ULTRA_RARE]: [Species.TURTONATOR, Species.CHARCADET]
|
||||
}),
|
||||
[TrainerType.AQUA_GRUNT]: new TrainerConfig(++t).setHasGenders("Aqua Grunt Female").setHasDouble("Aqua Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
|
||||
.setSpeciesPools({
|
||||
[TrainerPoolTier.COMMON]: [ Species.CARVANHA, Species.WAILMER, Species.ZIGZAGOON, Species.LOTAD, Species.CORPHISH],
|
||||
[TrainerPoolTier.UNCOMMON]: [Species.SPHEAL, Species.CHINCHOU, Species.WOOPER, Species.WINGULL, Species.TENTACOOL ],
|
||||
[TrainerPoolTier.RARE]: [Species.CLAMPERL, Species.REMORAID, Species.ARROKUDA],
|
||||
[TrainerPoolTier.SUPER_RARE]: [Species.MANTINE, Species.BASCULEGION],
|
||||
[TrainerPoolTier.ULTRA_RARE]: [Species.DONDOZO]
|
||||
}),
|
||||
[TrainerType.GALACTIC_GRUNT]: new TrainerConfig(++t).setHasGenders("Galactic Grunt Female").setHasDouble("Galactic Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
|
||||
.setSpeciesPools({
|
||||
[TrainerPoolTier.COMMON]: [ Species.GLAMEOW, Species.STUNKY, Species.CROAGUNK, Species.SHINX, Species.WURMPLE],
|
||||
[TrainerPoolTier.UNCOMMON]: [Species.BRONZOR, Species.DRIFLOON, Species.BURMY],
|
||||
[TrainerPoolTier.RARE]: [Species.CARNIVINE],
|
||||
[TrainerPoolTier.SUPER_RARE]: [Species.HISUI_GROWLITHE, Species.HISUI_QWILFISH, Species.HISUI_SNEASEL],
|
||||
[TrainerPoolTier.ULTRA_RARE]: [Species.HISUI_ZORUA, Species.HISUI_SLIGGOO]
|
||||
}),
|
||||
[TrainerType.PLASMA_GRUNT]: new TrainerConfig(++t).setHasGenders("Plasma Grunt Female").setHasDouble("Plasma Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
|
||||
.setSpeciesPools({
|
||||
[TrainerPoolTier.COMMON]: [ Species.PATRAT, Species.LILLIPUP, Species.PURRLOIN, Species.SCRAFTY, Species.WOOBAT, Species.VANILLITE],
|
||||
[TrainerPoolTier.UNCOMMON]: [ Species.FRILLISH, Species.VENIPEDE, Species.SANDILE, Species.TRUBBISH, Species.GOLETT],
|
||||
[TrainerPoolTier.RARE]: [Species.TIMBURR, Species.DARUMAKA, Species.AMOONGUSS, Species.DRILBUR, Species.KLINK, Species.VULLABY],
|
||||
[TrainerPoolTier.SUPER_RARE]: [Species.PAWNIARD, Species.VULLABY, Species.DRUDDIGON, Species.BOUFFALANT, Species.ZORUA],
|
||||
[TrainerPoolTier.ULTRA_RARE]: [Species.AXEW, Species.DEINO, Species.DURANT]
|
||||
}),
|
||||
[TrainerType.FLARE_GRUNT]: new TrainerConfig(++t).setHasGenders("Flare Grunt Female").setHasDouble("Flare Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
|
||||
.setSpeciesPools({
|
||||
[TrainerPoolTier.COMMON]: [ Species.FLETCHLING, Species.LITLEO, Species.PONYTA, Species.INKAY, Species.HOUNDOUR, Species.SKORUPI],
|
||||
[TrainerPoolTier.UNCOMMON]: [Species.HELIOPTILE, Species.ELECTRIKE, Species.SKRELP, Species.GULPIN],
|
||||
[TrainerPoolTier.RARE]: [Species.LITWICK, Species.SNEASEL],
|
||||
[TrainerPoolTier.SUPER_RARE]: [Species.NOIVERN],
|
||||
[TrainerPoolTier.ULTRA_RARE]: []
|
||||
}),
|
||||
[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"),
|
||||
@ -1316,22 +1444,21 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
|
||||
|
||||
[TrainerType.RIVAL]: new TrainerConfig((t = TrainerType.RIVAL)).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setStaticParty().setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival").setPartyTemplates(trainerPartyTemplates.RIVAL)
|
||||
[TrainerType.RIVAL]: new TrainerConfig((t = TrainerType.RIVAL)).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setStaticParty().setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival").setMixedBattleBgm("battle_rival").setPartyTemplates(trainerPartyTemplates.RIVAL)
|
||||
.setModifierRewardFuncs(() => modifierTypes.SUPER_EXP_CHARM, () => modifierTypes.EXP_SHARE)
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE, Species.CHIKORITA, Species.CYNDAQUIL, Species.TOTODILE, Species.TREECKO, Species.TORCHIC, Species.MUDKIP, Species.TURTWIG, Species.CHIMCHAR, Species.PIPLUP, Species.SNIVY, Species.TEPIG, Species.OSHAWOTT, Species.CHESPIN, Species.FENNEKIN, Species.FROAKIE, Species.ROWLET, Species.LITTEN, Species.POPPLIO, Species.GROOKEY, Species.SCORBUNNY, Species.SOBBLE, Species.SPRIGATITO, Species.FUECOCO, Species.QUAXLY], TrainerSlot.TRAINER, true))
|
||||
.setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEY, Species.HOOTHOOT, Species.TAILLOW, Species.STARLY, Species.PIDOVE, Species.FLETCHLING, Species.PIKIPEK, Species.ROOKIDEE, Species.WATTREL], TrainerSlot.TRAINER, true)),
|
||||
[TrainerType.RIVAL_2]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setStaticParty().setMoneyMultiplier(1.25).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival").setPartyTemplates(trainerPartyTemplates.RIVAL_2)
|
||||
[TrainerType.RIVAL_2]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setStaticParty().setMoneyMultiplier(1.25).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival").setMixedBattleBgm("battle_rival").setPartyTemplates(trainerPartyTemplates.RIVAL_2)
|
||||
.setModifierRewardFuncs(() => modifierTypes.EXP_SHARE)
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.IVYSAUR, Species.CHARMELEON, Species.WARTORTLE, Species.BAYLEEF, Species.QUILAVA, Species.CROCONAW, Species.GROVYLE, Species.COMBUSKEN, Species.MARSHTOMP, Species.GROTLE, Species.MONFERNO, Species.PRINPLUP, Species.SERVINE, Species.PIGNITE, Species.DEWOTT, Species.QUILLADIN, Species.BRAIXEN, Species.FROGADIER, Species.DARTRIX, Species.TORRACAT, Species.BRIONNE, Species.THWACKEY, Species.RABOOT, Species.DRIZZILE, Species.FLORAGATO, Species.CROCALOR, Species.QUAXWELL], TrainerSlot.TRAINER, true))
|
||||
.setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOTTO, Species.HOOTHOOT, Species.TAILLOW, Species.STARAVIA, Species.TRANQUILL, Species.FLETCHINDER, Species.TRUMBEAK, Species.CORVISQUIRE, Species.WATTREL], TrainerSlot.TRAINER, true))
|
||||
.setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450)),
|
||||
[TrainerType.RIVAL_3]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setStaticParty().setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival").setPartyTemplates(trainerPartyTemplates.RIVAL_3)
|
||||
[TrainerType.RIVAL_3]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setStaticParty().setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival").setMixedBattleBgm("battle_rival").setPartyTemplates(trainerPartyTemplates.RIVAL_3)
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON, Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL], TrainerSlot.TRAINER, true))
|
||||
.setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT, Species.KILOWATTREL], TrainerSlot.TRAINER, true))
|
||||
.setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450))
|
||||
.setSpeciesFilter(species => species.baseTotal >= 540),
|
||||
[TrainerType.RIVAL_4]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setBoss().setStaticParty().setMoneyMultiplier(1.75).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival_2").setPartyTemplates(trainerPartyTemplates.RIVAL_4)
|
||||
[TrainerType.RIVAL_4]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setBoss().setStaticParty().setMoneyMultiplier(1.75).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival_2").setMixedBattleBgm("battle_rival_2").setPartyTemplates(trainerPartyTemplates.RIVAL_4)
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON, Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL], TrainerSlot.TRAINER, true))
|
||||
.setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT, Species.KILOWATTREL], TrainerSlot.TRAINER, true))
|
||||
.setPartyMemberFunc(2, getSpeciesFilterRandomPartyMemberFunc((species: PokemonSpecies) => !pokemonEvolutions.hasOwnProperty(species.speciesId) && !pokemonPrevolutions.hasOwnProperty(species.speciesId) && species.baseTotal >= 450))
|
||||
@ -1340,7 +1467,7 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
const starter = party[0];
|
||||
return [modifierTypes.TERA_SHARD().generateType(null, [starter.species.type1]).withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(starter) as PersistentModifier];
|
||||
}),
|
||||
[TrainerType.RIVAL_5]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setBoss().setStaticParty().setMoneyMultiplier(2.25).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival_3").setPartyTemplates(trainerPartyTemplates.RIVAL_5)
|
||||
[TrainerType.RIVAL_5]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setBoss().setStaticParty().setMoneyMultiplier(2.25).setEncounterBgm(TrainerType.RIVAL).setBattleBgm("battle_rival_3").setMixedBattleBgm("battle_rival_3").setPartyTemplates(trainerPartyTemplates.RIVAL_5)
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON, Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL], TrainerSlot.TRAINER, true,
|
||||
p => p.setBoss(true, 2)))
|
||||
.setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOT, Species.NOCTOWL, Species.SWELLOW, Species.STARAPTOR, Species.UNFEZANT, Species.TALONFLAME, Species.TOUCANNON, Species.CORVIKNIGHT, Species.KILOWATTREL], TrainerSlot.TRAINER, true))
|
||||
@ -1356,7 +1483,7 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
const starter = party[0];
|
||||
return [modifierTypes.TERA_SHARD().generateType(null, [starter.species.type1]).withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(starter) as PersistentModifier];
|
||||
}),
|
||||
[TrainerType.RIVAL_6]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setBoss().setStaticParty().setMoneyMultiplier(3).setEncounterBgm("final").setBattleBgm("battle_rival_3").setPartyTemplates(trainerPartyTemplates.RIVAL_6)
|
||||
[TrainerType.RIVAL_6]: new TrainerConfig(++t).setName("Finn").setHasGenders("Ivy").setHasCharSprite().setTitle("Rival").setBoss().setStaticParty().setMoneyMultiplier(3).setEncounterBgm("final").setBattleBgm("battle_rival_3").setMixedBattleBgm("battle_rival_3").setPartyTemplates(trainerPartyTemplates.RIVAL_6)
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE, Species.MEGANIUM, Species.TYPHLOSION, Species.FERALIGATR, Species.SCEPTILE, Species.BLAZIKEN, Species.SWAMPERT, Species.TORTERRA, Species.INFERNAPE, Species.EMPOLEON, Species.SERPERIOR, Species.EMBOAR, Species.SAMUROTT, Species.CHESNAUGHT, Species.DELPHOX, Species.GRENINJA, Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA, Species.RILLABOOM, Species.CINDERACE, Species.INTELEON, Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL], TrainerSlot.TRAINER, true,
|
||||
p => {
|
||||
p.setBoss(true, 3);
|
||||
@ -1381,4 +1508,211 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
const starter = party[0];
|
||||
return [modifierTypes.TERA_SHARD().generateType(null, [starter.species.type1]).withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(starter) as PersistentModifier];
|
||||
}),
|
||||
|
||||
[TrainerType.ROCKET_BOSS_GIOVANNI_1]: new TrainerConfig(t = TrainerType.ROCKET_BOSS_GIOVANNI_1).setName("Giovanni").initForEvilTeamLeader("Rocket Boss",[])
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.PERSIAN , Species.ALOLA_PERSIAN]))
|
||||
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.NIDOKING , Species.NIDOQUEEN ]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.RHYPERIOR ]))
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.DUGTRIO, Species.ALOLA_DUGTRIO ]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.MAROWAK , Species.ALOLA_MAROWAK]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.KANGASKHAN ], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
p.pokeball = PokeballType.ULTRA_BALL;
|
||||
p.formIndex = 1;
|
||||
})),
|
||||
[TrainerType.ROCKET_BOSS_GIOVANNI_2]: new TrainerConfig(++t).setName("Giovanni").initForEvilTeamLeader("Rocket Boss", [])
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.TYRANITAR , Species.IRON_THORNS], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
p.pokeball = PokeballType.ULTRA_BALL;
|
||||
}))
|
||||
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.EXCADRILL ]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.HIPPOWDON ]))
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.KANGASKHAN ], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
p.pokeball = PokeballType.ULTRA_BALL;
|
||||
p.formIndex = 1;
|
||||
}))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.GASTRODON]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.MEWTWO ], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
p.pokeball = PokeballType.MASTER_BALL;
|
||||
})),
|
||||
[TrainerType.MAXIE]: new TrainerConfig(++t).setName("Maxie").initForEvilTeamLeader("Magma Boss",[])
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.MIGHTYENA ]))
|
||||
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.CROBAT, Species.GLISCOR ]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.WEEZING, Species.GALAR_WEEZING ]))
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.MAGMORTAR, Species.TORKOAL ]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.FLYGON]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.CAMERUPT ], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
p.pokeball = PokeballType.ULTRA_BALL;
|
||||
p.formIndex = 1;
|
||||
})),
|
||||
[TrainerType.MAXIE_2]: new TrainerConfig(++t).setName("Maxie").initForEvilTeamLeader("Magma Boss",[])
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.SOLROCK, Species.HOUNDOOM ], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
p.pokeball = PokeballType.ULTRA_BALL;
|
||||
}))
|
||||
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.GREAT_TUSK ]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SHIFTRY, Species.SCOVILLAIN ], TrainerSlot.TRAINER, true, p => {
|
||||
p.generateAndPopulateMoveset();
|
||||
p.abilityIndex = 0; // Chlorophyll
|
||||
}))
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.TORKOAL, Species.NINETALES ], TrainerSlot.TRAINER, true, p => {
|
||||
p.generateAndPopulateMoveset();
|
||||
p.abilityIndex = 2; // DROUGHT
|
||||
}))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.GROUDON ], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
p.pokeball = PokeballType.MASTER_BALL;
|
||||
}))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.CAMERUPT ], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
p.pokeball = PokeballType.ULTRA_BALL;
|
||||
p.formIndex = 1;
|
||||
})),
|
||||
[TrainerType.ARCHIE]: new TrainerConfig(++t).setName("Archie").initForEvilTeamLeader("Aqua Boss",[])
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.LINOONE ]))
|
||||
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.CROBAT, Species.PELIPPER ]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.MUK, Species.ALOLA_MUK ]))
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.TENTACRUEL ]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.RELICANTH, Species.WAILORD ]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.SHARPEDO ], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
p.pokeball = PokeballType.ULTRA_BALL;
|
||||
p.formIndex = 1;
|
||||
})),
|
||||
[TrainerType.ARCHIE_2]: new TrainerConfig(++t).setName("Archie").initForEvilTeamLeader("Aqua Boss",[])
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.KINGDRA, Species.LUDICOLO ], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
p.pokeball = PokeballType.ULTRA_BALL;
|
||||
}))
|
||||
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.BEARTIC, Species.ARMALDO ], TrainerSlot.TRAINER, true, p => {
|
||||
p.generateAndPopulateMoveset();
|
||||
p.abilityIndex = 2; // Swift Swim
|
||||
}))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.HUNTAIL, Species.GOREBYSS ], TrainerSlot.TRAINER, true, p => {
|
||||
p.generateAndPopulateMoveset();
|
||||
p.abilityIndex = 0; // Swift Swim
|
||||
}))
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.POLITOED, Species.PELIPPER ], TrainerSlot.TRAINER, true, p => {
|
||||
p.generateAndPopulateMoveset();
|
||||
p.abilityIndex = 2; // Drizzle
|
||||
}))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.KYOGRE ], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
p.pokeball = PokeballType.MASTER_BALL;
|
||||
}))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.SHARPEDO ], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
p.pokeball = PokeballType.ULTRA_BALL;
|
||||
p.formIndex = 1;
|
||||
})),
|
||||
[TrainerType.CYRUS]: new TrainerConfig(++t).setName("Cyrus").initForEvilTeamLeader("Galactic Boss",[])
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.GYARADOS, Species.BASCULEGION ]))
|
||||
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.HONCHKROW, Species.HISUI_BRAVIARY ]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.CROBAT, Species.OVERQWIL ]))
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.AZELF, Species.UXIE, Species.MESPRIT ]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.HOUNDOOM ], TrainerSlot.TRAINER, true, p => {
|
||||
p.generateAndPopulateMoveset();
|
||||
p.pokeball = PokeballType.ULTRA_BALL;
|
||||
p.formIndex = 1;
|
||||
}))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.WEAVILE ], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
p.pokeball = PokeballType.ULTRA_BALL;
|
||||
})),
|
||||
[TrainerType.CYRUS_2]: new TrainerConfig(++t).setName("Cyrus").initForEvilTeamLeader("Galactic Boss",[])
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.AZELF, Species.UXIE, Species.MESPRIT ], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
}))
|
||||
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.ELECTRODE, Species.HISUI_ELECTRODE ]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SALAMENCE, Species.ROARING_MOON ]))
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.HISUI_ZOROARK ]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.DARKRAI ], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
p.pokeball = PokeballType.MASTER_BALL;
|
||||
}))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.WEAVILE ], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
p.pokeball = PokeballType.ULTRA_BALL;
|
||||
})),
|
||||
[TrainerType.GHETSIS]: new TrainerConfig(++t).setName("Ghetsis").initForEvilTeamLeader("Plasma Boss",[])
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.COFAGRIGUS, Species.RUNERIGUS ]))
|
||||
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.BOUFFALANT ]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SEISMITOAD, Species.CARRACOSTA ]))
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.EELEKTROSS, Species.GALVANTULA ]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.VOLCARONA ]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.HYDREIGON ], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
p.pokeball = PokeballType.ULTRA_BALL;
|
||||
})),
|
||||
[TrainerType.GHETSIS_2]: new TrainerConfig(++t).setName("Ghetsis").initForEvilTeamLeader("Plasma Boss",[])
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.SLITHER_WING, Species.IRON_MOTH ], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
p.pokeball = PokeballType.ULTRA_BALL;
|
||||
}))
|
||||
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.DURANT ]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.DARMANITAN, Species.GALAR_DARMANITAN ]))
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.KINGAMBIT ]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.KYUREM ], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
p.pokeball = PokeballType.MASTER_BALL;
|
||||
}))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.HYDREIGON, Species.IRON_JUGULIS ], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
p.pokeball = PokeballType.ULTRA_BALL;
|
||||
})),
|
||||
[TrainerType.LYSANDRE]: new TrainerConfig(++t).setName("Lysandre").initForEvilTeamLeader("Flare Boss",[])
|
||||
.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(5, getRandomPartyMemberFunc([ Species.GYARADOS ], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
p.pokeball = PokeballType.ULTRA_BALL;
|
||||
p.formIndex = 1;
|
||||
})),
|
||||
[TrainerType.LYSANDRE_2]: new TrainerConfig(++t).setName("Lysandre").initForEvilTeamLeader("Flare Boss",[])
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.SCREAM_TAIL, Species.FLUTTER_MANE ], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
p.pokeball = PokeballType.ULTRA_BALL;
|
||||
}))
|
||||
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.GHOLDENGO, Species.AEGISLASH ]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.PYROAR ]))
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GOODRA, Species.HISUI_GOODRA ]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.YVELTAL ], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
p.pokeball = PokeballType.MASTER_BALL;
|
||||
}))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.GYARADOS ], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
p.pokeball = PokeballType.ULTRA_BALL;
|
||||
p.formIndex = 1;
|
||||
})),
|
||||
};
|
||||
|
@ -12,7 +12,8 @@ import { achvs } from "./system/achv";
|
||||
import { pokemonPrevolutions } from "./data/pokemon-evolutions";
|
||||
import { EggTier } from "./data/enums/egg-type";
|
||||
import PokemonInfoContainer from "./ui/pokemon-info-container";
|
||||
import EggsToHatchCountContainer from "./ui/eggs-to-hatch-count-container";
|
||||
import EggCounterContainer from "./ui/egg-counter-container";
|
||||
import { EggCountChangedEvent } from "./events/egg";
|
||||
|
||||
/**
|
||||
* Class that represents egg hatching
|
||||
@ -24,7 +25,7 @@ export class EggHatchPhase extends Phase {
|
||||
/** The number of eggs that are hatching */
|
||||
private eggsToHatchCount: integer;
|
||||
/** The container that lists how many eggs are hatching */
|
||||
private eggsToHatchCountContainer: EggsToHatchCountContainer;
|
||||
private eggCounterContainer: EggCounterContainer;
|
||||
|
||||
/** The scene handler for egg hatching */
|
||||
private eggHatchHandler: EggHatchSceneHandler;
|
||||
@ -110,10 +111,8 @@ export class EggHatchPhase extends Phase {
|
||||
this.eggContainer.add(this.eggLightraysOverlay);
|
||||
this.eggHatchContainer.add(this.eggContainer);
|
||||
|
||||
this.eggsToHatchCountContainer = new EggsToHatchCountContainer(this.scene, this.eggsToHatchCount);
|
||||
this.eggsToHatchCountContainer.setup();
|
||||
|
||||
this.eggHatchContainer.add(this.eggsToHatchCountContainer);
|
||||
this.eggCounterContainer = new EggCounterContainer(this.scene, this.eggsToHatchCount);
|
||||
this.eggHatchContainer.add(this.eggCounterContainer);
|
||||
|
||||
const getPokemonSprite = () => {
|
||||
const ret = this.scene.add.sprite(this.eggHatchBg.displayWidth / 2, this.eggHatchBg.displayHeight / 2, "pkmn__sub");
|
||||
@ -308,13 +307,6 @@ export class EggHatchPhase extends Phase {
|
||||
* Function to do the logic and animation of completing a hatch and revealing the Pokemon
|
||||
*/
|
||||
doReveal(): void {
|
||||
// Update/reduce count of hatching eggs when revealed if count is at least 1
|
||||
// If count is 0, hide eggsToHatchCountContainer instead
|
||||
if (this.eggsToHatchCount > 1) {
|
||||
this.eggsToHatchCount -= 1;
|
||||
} else {
|
||||
this.eggsToHatchCountContainer.setVisible(false);
|
||||
}
|
||||
const isShiny = this.pokemon.isShiny();
|
||||
if (this.pokemon.species.subLegendary) {
|
||||
this.scene.validateAchv(achvs.HATCH_SUB_LEGENDARY);
|
||||
@ -336,10 +328,8 @@ export class EggHatchPhase extends Phase {
|
||||
this.pokemonSprite.setPipelineData("variant", this.pokemon.variant);
|
||||
this.pokemonSprite.setVisible(true);
|
||||
this.scene.time.delayedCall(Utils.fixedInt(250), () => {
|
||||
if (this.eggsToHatchCount < 10) {
|
||||
this.eggsToHatchCountContainer.setWindowToDefaultSize();
|
||||
}
|
||||
this.eggsToHatchCountContainer.eggCountText.setText(`${this.eggsToHatchCount}`);
|
||||
this.eggsToHatchCount--;
|
||||
this.eggHatchHandler.eventTarget.dispatchEvent(new EggCountChangedEvent(this.eggsToHatchCount));
|
||||
this.pokemon.cry();
|
||||
if (isShiny) {
|
||||
this.scene.time.delayedCall(Utils.fixedInt(500), () => {
|
||||
|
@ -1,5 +1,5 @@
|
||||
import Move from "./data/move";
|
||||
import { BerryModifier } from "./modifier/modifier";
|
||||
import Move from "../data/move";
|
||||
import { BerryModifier } from "../modifier/modifier";
|
||||
|
||||
/** Alias for all {@linkcode BattleScene} events */
|
||||
export enum BattleSceneEventType {
|
||||
@ -7,7 +7,7 @@ export enum BattleSceneEventType {
|
||||
* Triggers when the corresponding setting is changed
|
||||
* @see {@linkcode CandyUpgradeNotificationChangedEvent}
|
||||
*/
|
||||
CANDY_UPGRADE_NOTIFICATION_CHANGED = "onCandyUpgradeDisplayChanged",
|
||||
CANDY_UPGRADE_NOTIFICATION_CHANGED = "onCandyUpgradeNotificationChanged",
|
||||
|
||||
/**
|
||||
* Triggers when a move is successfully used
|