Merge branch 'beta' into hebrew-pr

This commit is contained in:
Lugiad 2024-09-21 17:47:10 +02:00 committed by GitHub
commit d0bd19dac2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
180 changed files with 5442 additions and 3888 deletions

View File

@ -14,7 +14,7 @@ import { fileURLToPath } from "url";
// Get the directory name of the current module file
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const typeChoices = ["Move", "Ability", "Item"];
const typeChoices = ["Move", "Ability", "Item", "Mystery Encounter"];
/**
* Prompts the user to select a type via list.
@ -76,6 +76,7 @@ async function runInteractive() {
const fileName = fileNameAnswer.userInput
.replace(/-+/g, "_") // Convert kebab-case (dashes) to underscores
.replace(/([a-z])([A-Z])/g, "$1_$2") // Convert camelCase to snake_case
.replace(/\s+/g, '_') // Replace spaces with underscores
.toLowerCase(); // Ensure all lowercase
// Format the description for the test case
@ -96,6 +97,10 @@ async function runInteractive() {
dir = path.join(__dirname, "src", "test", "items");
description = `Items - ${formattedName}`;
break;
case "mystery encounter":
dir = path.join(__dirname, "src", "test", "mystery-encounter", "encounters");
description = `Mystery Encounter - ${formattedName}`;
break;
default:
console.error('Invalid type. Please use "move", "ability", or "item".');
process.exit(1);
@ -112,7 +117,6 @@ import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest";
describe("${description}", () => {
let phaserGame: Phaser.Game;
let game: GameManager;
const TIMEOUT = 20 * 1000;
beforeAll(() => {
phaserGame = new Phaser.Game({
@ -136,7 +140,7 @@ describe("${description}", () => {
it("test case", async () => {
// await game.classicMode.startBattle([Species.MAGIKARP]);
// game.move.select(Moves.SPLASH);
}, TIMEOUT);
});
});
`;

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,19 @@
{ "frames": [
{
"filename": "0001.png",
"frame": { "x": 0, "y": 0, "w": 94, "h": 94 },
"rotated": false,
"trimmed": true,
"spriteSourceSize": { "x": 26, "y": 0, "w": 94, "h": 94 },
"sourceSize": { "w": 120, "h": 94 }
}
],
"meta": {
"app": "https://www.aseprite.org/",
"version": "1.3.8.1-x64",
"image": "966-caph-starmobile.png",
"format": "RGBA8888",
"size": { "w": 94, "h": 94 },
"scale": "1"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -0,0 +1,19 @@
{ "frames": [
{
"filename": "0001.png",
"frame": { "x": 0, "y": 0, "w": 94, "h": 94 },
"rotated": false,
"trimmed": true,
"spriteSourceSize": { "x": 26, "y": 0, "w": 94, "h": 94 },
"sourceSize": { "w": 120, "h": 94 }
}
],
"meta": {
"app": "https://www.aseprite.org/",
"version": "1.3.8.1-x64",
"image": "966-navi-starmobile.png",
"format": "RGBA8888",
"size": { "w": 94, "h": 94 },
"scale": "1"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1,19 @@
{ "frames": [
{
"filename": "0001.png",
"frame": { "x": 0, "y": 0, "w": 94, "h": 94 },
"rotated": false,
"trimmed": true,
"spriteSourceSize": { "x": 26, "y": 0, "w": 94, "h": 94 },
"sourceSize": { "w": 120, "h": 94 }
}
],
"meta": {
"app": "https://www.aseprite.org/",
"version": "1.3.8.1-x64",
"image": "966-ruchbah-starmobile.png",
"format": "RGBA8888",
"size": { "w": 94, "h": 94 },
"scale": "1"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1,19 @@
{ "frames": [
{
"filename": "0001.png",
"frame": { "x": 0, "y": 0, "w": 94, "h": 94 },
"rotated": false,
"trimmed": true,
"spriteSourceSize": { "x": 26, "y": 0, "w": 94, "h": 94 },
"sourceSize": { "w": 120, "h": 94 }
}
],
"meta": {
"app": "https://www.aseprite.org/",
"version": "1.3.8.1-x64",
"image": "966-schedar-starmobile.png",
"format": "RGBA8888",
"size": { "w": 94, "h": 94 },
"scale": "1"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1,19 @@
{ "frames": [
{
"filename": "0001.png",
"frame": { "x": 0, "y": 0, "w": 94, "h": 94 },
"rotated": false,
"trimmed": true,
"spriteSourceSize": { "x": 26, "y": 0, "w": 94, "h": 94 },
"sourceSize": { "w": 120, "h": 94 }
}
],
"meta": {
"app": "https://www.aseprite.org/",
"version": "1.3.8.1-x64",
"image": "966-segin-starmobile.png",
"format": "RGBA8888",
"size": { "w": 94, "h": 94 },
"scale": "1"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -0,0 +1,41 @@
{
"textures": [
{
"image": "966-caph-starmobile.png",
"format": "RGBA8888",
"size": {
"w": 84,
"h": 84
},
"scale": 0.333,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 96,
"h": 96
},
"spriteSourceSize": {
"x": 6,
"y": 20,
"w": 84,
"h": 56
},
"frame": {
"x": 0,
"y": 0,
"w": 84,
"h": 56
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:0226ae22b7a4822d78e38df4af1f59a7:01ce69442faf54e54474cd349cad2f7d:f9a0366e304d666e4262fa0af369d1f4$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1009 B

View File

@ -0,0 +1,41 @@
{
"textures": [
{
"image": "966-navi-starmobile.png",
"format": "RGBA8888",
"size": {
"w": 84,
"h": 84
},
"scale": 0.333,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 96,
"h": 96
},
"spriteSourceSize": {
"x": 6,
"y": 20,
"w": 84,
"h": 56
},
"frame": {
"x": 0,
"y": 0,
"w": 84,
"h": 56
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:0226ae22b7a4822d78e38df4af1f59a7:01ce69442faf54e54474cd349cad2f7d:f9a0366e304d666e4262fa0af369d1f4$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1009 B

View File

@ -0,0 +1,41 @@
{
"textures": [
{
"image": "966-ruchbah-starmobile.png",
"format": "RGBA8888",
"size": {
"w": 84,
"h": 84
},
"scale": 0.333,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 96,
"h": 96
},
"spriteSourceSize": {
"x": 6,
"y": 20,
"w": 84,
"h": 56
},
"frame": {
"x": 0,
"y": 0,
"w": 84,
"h": 56
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:0226ae22b7a4822d78e38df4af1f59a7:01ce69442faf54e54474cd349cad2f7d:f9a0366e304d666e4262fa0af369d1f4$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1009 B

View File

@ -0,0 +1,41 @@
{
"textures": [
{
"image": "966-schedar-starmobile.png",
"format": "RGBA8888",
"size": {
"w": 84,
"h": 84
},
"scale": 0.333,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 96,
"h": 96
},
"spriteSourceSize": {
"x": 6,
"y": 20,
"w": 84,
"h": 56
},
"frame": {
"x": 0,
"y": 0,
"w": 84,
"h": 56
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:0226ae22b7a4822d78e38df4af1f59a7:01ce69442faf54e54474cd349cad2f7d:f9a0366e304d666e4262fa0af369d1f4$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1009 B

View File

@ -0,0 +1,41 @@
{
"textures": [
{
"image": "966-segin-starmobile.png",
"format": "RGBA8888",
"size": {
"w": 84,
"h": 84
},
"scale": 0.333,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 96,
"h": 96
},
"spriteSourceSize": {
"x": 6,
"y": 20,
"w": 84,
"h": 56
},
"frame": {
"x": 0,
"y": 0,
"w": 84,
"h": 56
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:0226ae22b7a4822d78e38df4af1f59a7:01ce69442faf54e54474cd349cad2f7d:f9a0366e304d666e4262fa0af369d1f4$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1009 B

View File

@ -0,0 +1,41 @@
{
"textures": [
{
"image": "966-caph-starmobile.png",
"format": "RGBA8888",
"size": {
"w": 84,
"h": 84
},
"scale": 0.333,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 96,
"h": 96
},
"spriteSourceSize": {
"x": 6,
"y": 20,
"w": 84,
"h": 56
},
"frame": {
"x": 0,
"y": 0,
"w": 84,
"h": 56
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:0226ae22b7a4822d78e38df4af1f59a7:01ce69442faf54e54474cd349cad2f7d:f9a0366e304d666e4262fa0af369d1f4$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1010 B

View File

@ -0,0 +1,41 @@
{
"textures": [
{
"image": "966-navi-starmobile.png",
"format": "RGBA8888",
"size": {
"w": 84,
"h": 84
},
"scale": 0.333,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 96,
"h": 96
},
"spriteSourceSize": {
"x": 6,
"y": 20,
"w": 84,
"h": 56
},
"frame": {
"x": 0,
"y": 0,
"w": 84,
"h": 56
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:0226ae22b7a4822d78e38df4af1f59a7:01ce69442faf54e54474cd349cad2f7d:f9a0366e304d666e4262fa0af369d1f4$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1010 B

View File

@ -0,0 +1,41 @@
{
"textures": [
{
"image": "966-ruchbah-starmobile.png",
"format": "RGBA8888",
"size": {
"w": 84,
"h": 84
},
"scale": 0.333,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 96,
"h": 96
},
"spriteSourceSize": {
"x": 6,
"y": 20,
"w": 84,
"h": 56
},
"frame": {
"x": 0,
"y": 0,
"w": 84,
"h": 56
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:0226ae22b7a4822d78e38df4af1f59a7:01ce69442faf54e54474cd349cad2f7d:f9a0366e304d666e4262fa0af369d1f4$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1010 B

View File

@ -0,0 +1,41 @@
{
"textures": [
{
"image": "966-schedar-starmobile.png",
"format": "RGBA8888",
"size": {
"w": 84,
"h": 84
},
"scale": 0.333,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 96,
"h": 96
},
"spriteSourceSize": {
"x": 6,
"y": 20,
"w": 84,
"h": 56
},
"frame": {
"x": 0,
"y": 0,
"w": 84,
"h": 56
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:0226ae22b7a4822d78e38df4af1f59a7:01ce69442faf54e54474cd349cad2f7d:f9a0366e304d666e4262fa0af369d1f4$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1010 B

View File

@ -0,0 +1,41 @@
{
"textures": [
{
"image": "966-segin-starmobile.png",
"format": "RGBA8888",
"size": {
"w": 84,
"h": 84
},
"scale": 0.333,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 96,
"h": 96
},
"spriteSourceSize": {
"x": 6,
"y": 20,
"w": 84,
"h": 56
},
"frame": {
"x": 0,
"y": 0,
"w": 84,
"h": 56
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:0226ae22b7a4822d78e38df4af1f59a7:01ce69442faf54e54474cd349cad2f7d:f9a0366e304d666e4262fa0af369d1f4$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1010 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 473 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 473 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 473 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 473 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 473 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 478 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 478 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 478 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 478 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 478 B

View File

@ -0,0 +1,19 @@
{ "frames": [
{
"filename": "0001.png",
"frame": { "x": 0, "y": 0, "w": 94, "h": 94 },
"rotated": false,
"trimmed": true,
"spriteSourceSize": { "x": 26, "y": 0, "w": 94, "h": 94 },
"sourceSize": { "w": 120, "h": 94 }
}
],
"meta": {
"app": "https://www.aseprite.org/",
"version": "1.3.8.1-x64",
"image": "966-caph-starmobile.png",
"format": "RGBA8888",
"size": { "w": 94, "h": 94 },
"scale": "1"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -0,0 +1,19 @@
{ "frames": [
{
"filename": "0001.png",
"frame": { "x": 0, "y": 0, "w": 94, "h": 94 },
"rotated": false,
"trimmed": true,
"spriteSourceSize": { "x": 26, "y": 0, "w": 94, "h": 94 },
"sourceSize": { "w": 120, "h": 94 }
}
],
"meta": {
"app": "https://www.aseprite.org/",
"version": "1.3.8.1-x64",
"image": "966-navi-starmobile.png",
"format": "RGBA8888",
"size": { "w": 94, "h": 94 },
"scale": "1"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1,19 @@
{ "frames": [
{
"filename": "0001.png",
"frame": { "x": 0, "y": 0, "w": 94, "h": 94 },
"rotated": false,
"trimmed": true,
"spriteSourceSize": { "x": 26, "y": 0, "w": 94, "h": 94 },
"sourceSize": { "w": 120, "h": 94 }
}
],
"meta": {
"app": "https://www.aseprite.org/",
"version": "1.3.8.1-x64",
"image": "966-ruchbah-starmobile.png",
"format": "RGBA8888",
"size": { "w": 94, "h": 94 },
"scale": "1"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1,19 @@
{ "frames": [
{
"filename": "0001.png",
"frame": { "x": 0, "y": 0, "w": 94, "h": 94 },
"rotated": false,
"trimmed": true,
"spriteSourceSize": { "x": 26, "y": 0, "w": 94, "h": 94 },
"sourceSize": { "w": 120, "h": 94 }
}
],
"meta": {
"app": "https://www.aseprite.org/",
"version": "1.3.8.1-x64",
"image": "966-schedar-starmobile.png",
"format": "RGBA8888",
"size": { "w": 94, "h": 94 },
"scale": "1"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1,19 @@
{ "frames": [
{
"filename": "0001.png",
"frame": { "x": 0, "y": 0, "w": 94, "h": 94 },
"rotated": false,
"trimmed": true,
"spriteSourceSize": { "x": 26, "y": 0, "w": 94, "h": 94 },
"sourceSize": { "w": 120, "h": 94 }
}
],
"meta": {
"app": "https://www.aseprite.org/",
"version": "1.3.8.1-x64",
"image": "966-segin-starmobile.png",
"format": "RGBA8888",
"size": { "w": 94, "h": 94 },
"scale": "1"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 54 KiB

View File

@ -0,0 +1,41 @@
{
"textures": [
{
"image": "atticus.png",
"format": "RGBA8888",
"size": {
"w": 46,
"h": 46
},
"scale": 1,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 21,
"y": 33,
"w": 43,
"h": 46
},
"frame": {
"x": 0,
"y": 0,
"w": 43,
"h": 46
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:6dcd7c3d3982793cbca0d6fcd1f9260e:19c44634629fadd9d039d23dc71ec987:d26ede35f15aa571d5a7a2dd2fb868e1$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 741 B

View File

@ -0,0 +1,41 @@
{
"textures": [
{
"image": "eri.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": 15,
"y": 5,
"w": 45,
"h": 74
},
"frame": {
"x": 0,
"y": 0,
"w": 45,
"h": 74
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:59594ac27e74ec85e2949d12ff680dc2:d65b6b00858ac47b26ef8393a8fa6795:d7f4cd3ff755f8074c14d3006b0c8301$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 946 B

View File

@ -0,0 +1,41 @@
{
"textures": [
{
"image": "giacomo.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": 23,
"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:8c4e7da48e5667abc6d364330268c092:0fa43e58d8a746d3b86cb2dd763719f4:8603cc19e888c8c8de62177f4011577c$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1,41 @@
{
"textures": [
{
"image": "mela.png",
"format": "RGBA8888",
"size": {
"w": 78,
"h": 78
},
"scale": 1,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 18,
"y": 1,
"w": 46,
"h": 78
},
"frame": {
"x": 0,
"y": 0,
"w": 46,
"h": 78
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:e26d8c926c54c848cef673b3f59f35e7:ff040c2cebb1a92d2ef61dc91c018390:68668cf06383ff459cccaafb6bf56215$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,41 @@
{
"textures": [
{
"image": "ortega.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": 8,
"y": 10,
"w": 53,
"h": 69
},
"frame": {
"x": 0,
"y": 0,
"w": 53,
"h": 69
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:c6ff92d90ed884222095de81d1db9166:a91cf3c83a063f549c52afb42f7ba3b0:c3f9fcec121c8bc93f2b230b20b79c57$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 937 B

View File

@ -0,0 +1,41 @@
{
"textures": [
{
"image": "penny.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": 24,
"y": 4,
"w": 34,
"h": 75
},
"frame": {
"x": 0,
"y": 0,
"w": 34,
"h": 75
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:54f184bf1995a94a78aff33c9a851e6b:a6c9b3fe428b0cd0344b5cf14b999f36:cf221da9747cb8cb356053d3042d8d22$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 955 B

View File

@ -0,0 +1,41 @@
{
"textures": [
{
"image": "star_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": 24,
"y": 11,
"w": 30,
"h": 68
},
"frame": {
"x": 0,
"y": 0,
"w": 30,
"h": 68
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:b542a1bdd6995584fc776f75d578b434:f03fddece4494ab59698002fe6671972:c6f0e54e24ec5ffaa711700431b1955e$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 756 B

View File

@ -0,0 +1,41 @@
{
"textures": [
{
"image": "star_grunt_m.png",
"format": "RGBA8888",
"size": {
"w": 70,
"h": 70
},
"scale": 1,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 24,
"y": 9,
"w": 31,
"h": 70
},
"frame": {
"x": 0,
"y": 0,
"w": 31,
"h": 70
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:abc4b0424c37fd55a2bf2e9f5142adce:41a140aa68a1eda61d9a00cab4e07721:a0796711f9e0333796b6629cd43ff8e8$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 803 B

View File

@ -2164,12 +2164,16 @@ export default class BattleScene extends SceneBase {
return 20.87;
case "battle_macro_grunt": // SWSH Trainer Battle
return 11.56;
case "battle_star_grunt": //SV Team Star Battle
return 133.362;
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_star_admin": //SV Team Star Boss Battle
return 9.493;
case "battle_rocket_boss": //USUM Giovanni Battle
return 9.115;
case "battle_aqua_magma_boss": //ORAS Archie & Maxie Battle
@ -2186,6 +2190,8 @@ export default class BattleScene extends SceneBase {
return 13.13;
case "battle_macro_boss": //SWSH Rose Battle
return 11.42;
case "battle_star_boss": //SV Cassiopeia Battle
return 25.764;
case "mystery_encounter_gen_5_gts": // BW GTS
return 8.52;
case "mystery_encounter_gen_6_gts": // XY GTS

View File

@ -520,31 +520,31 @@ export const classicFixedBattles: FixedBattleConfigs = {
.setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_2, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT))
.setCustomModifierRewards({ guaranteedModifierTiers: [ModifierTier.ULTRA, ModifierTier.GREAT, ModifierTier.GREAT], allowLuckUpgrades: false }),
[35]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT, TrainerType.MACRO_GRUNT ], true)),
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT, TrainerType.MACRO_GRUNT, TrainerType.STAR_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))
.setCustomModifierRewards({ guaranteedModifierTiers: [ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.GREAT, ModifierTier.GREAT], allowLuckUpgrades: false }),
[62]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT, TrainerType.MACRO_GRUNT ], true)),
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT, TrainerType.MACRO_GRUNT, TrainerType.STAR_GRUNT ], true)),
[64]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT, TrainerType.MACRO_GRUNT ], true)),
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT, TrainerType.MACRO_GRUNT, TrainerType.STAR_GRUNT ], true)),
[66]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35)
.setGetTrainerFunc(getRandomTrainerFunc([[ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [ TrainerType.TABITHA, TrainerType.COURTNEY ], [ TrainerType.MATT, TrainerType.SHELLY ], [ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ], [ TrainerType.ZINZOLIN, TrainerType.ROOD ], [ TrainerType.XEROSIC, TrainerType.BRYONY ], TrainerType.FABA, TrainerType.PLUMERIA, TrainerType.OLEANA ], true)),
.setGetTrainerFunc(getRandomTrainerFunc([[ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [ TrainerType.TABITHA, TrainerType.COURTNEY ], [ TrainerType.MATT, TrainerType.SHELLY ], [ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ], [ TrainerType.ZINZOLIN, TrainerType.ROOD ], [ TrainerType.XEROSIC, TrainerType.BRYONY ], TrainerType.FABA, TrainerType.PLUMERIA, TrainerType.OLEANA, [ TrainerType.GIACOMO, TrainerType.MELA, TrainerType.ATTICUS, TrainerType.ORTEGA, TrainerType.ERI ] ], true)),
[95]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
.setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_4, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT))
.setCustomModifierRewards({ guaranteedModifierTiers: [ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA], allowLuckUpgrades: false }),
[112]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT, TrainerType.MACRO_GRUNT ], true)),
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT, TrainerType.MACRO_GRUNT, TrainerType.STAR_GRUNT ], true)),
[114]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35)
.setGetTrainerFunc(getRandomTrainerFunc([[ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [ TrainerType.TABITHA, TrainerType.COURTNEY ], [ TrainerType.MATT, TrainerType.SHELLY ], [ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ], [ TrainerType.ZINZOLIN, TrainerType.ROOD ], [ TrainerType.XEROSIC, TrainerType.BRYONY ], TrainerType.FABA, TrainerType.PLUMERIA, TrainerType.OLEANA ], true, 1)),
.setGetTrainerFunc(getRandomTrainerFunc([[ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ], [ TrainerType.TABITHA, TrainerType.COURTNEY ], [ TrainerType.MATT, TrainerType.SHELLY ], [ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ], [ TrainerType.ZINZOLIN, TrainerType.ROOD ], [ TrainerType.XEROSIC, TrainerType.BRYONY ], TrainerType.FABA, TrainerType.PLUMERIA, TrainerType.OLEANA, [ TrainerType.GIACOMO, TrainerType.MELA, TrainerType.ATTICUS, TrainerType.ORTEGA, TrainerType.ERI ] ], true, 1)),
[ClassicFixedBossWaves.EVIL_BOSS_1]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_BOSS_GIOVANNI_1, TrainerType.MAXIE, TrainerType.ARCHIE, TrainerType.CYRUS, TrainerType.GHETSIS, TrainerType.LYSANDRE, TrainerType.LUSAMINE, TrainerType.GUZMA, TrainerType.ROSE ]))
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_BOSS_GIOVANNI_1, TrainerType.MAXIE, TrainerType.ARCHIE, TrainerType.CYRUS, TrainerType.GHETSIS, TrainerType.LYSANDRE, TrainerType.LUSAMINE, TrainerType.GUZMA, TrainerType.ROSE, TrainerType.PENNY ]))
.setCustomModifierRewards({ guaranteedModifierTiers: [ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA], allowLuckUpgrades: false }),
[145]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
.setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_5, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT))
.setCustomModifierRewards({ guaranteedModifierTiers: [ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.ULTRA], allowLuckUpgrades: false }),
[ClassicFixedBossWaves.EVIL_BOSS_2]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_BOSS_GIOVANNI_2, TrainerType.MAXIE_2, TrainerType.ARCHIE_2, TrainerType.CYRUS_2, TrainerType.GHETSIS_2, TrainerType.LYSANDRE_2, TrainerType.LUSAMINE_2, TrainerType.GUZMA_2, TrainerType.ROSE_2 ]))
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_BOSS_GIOVANNI_2, TrainerType.MAXIE_2, TrainerType.ARCHIE_2, TrainerType.CYRUS_2, TrainerType.GHETSIS_2, TrainerType.LYSANDRE_2, TrainerType.LUSAMINE_2, TrainerType.GUZMA_2, TrainerType.ROSE_2, TrainerType.PENNY_2 ]))
.setCustomModifierRewards({ guaranteedModifierTiers: [ModifierTier.ROGUE, ModifierTier.ROGUE, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA], allowLuckUpgrades: false }),
[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 ])),

View File

@ -451,6 +451,30 @@ export class SingleGenerationChallenge extends Challenge {
applyFixedBattle(waveIndex: Number, battleConfig: FixedBattleConfig): boolean {
let trainerTypes: TrainerType[] = [];
switch (waveIndex) {
case 35:
trainerTypes = [ TrainerType.ROCKET_GRUNT, TrainerType.ROCKET_GRUNT, Utils.randSeedItem([ TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT ]), TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, Utils.randSeedItem([ TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT ]), TrainerType.MACRO_GRUNT, TrainerType.STAR_GRUNT ];
break;
case 62:
trainerTypes = [ TrainerType.ROCKET_GRUNT, TrainerType.ROCKET_GRUNT, Utils.randSeedItem([ TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT ]), TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, Utils.randSeedItem([ TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT ]), TrainerType.MACRO_GRUNT, TrainerType.STAR_GRUNT ];
break;
case 64:
trainerTypes = [ TrainerType.ROCKET_GRUNT, TrainerType.ROCKET_GRUNT, Utils.randSeedItem([ TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT ]), TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, Utils.randSeedItem([ TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT ]), TrainerType.MACRO_GRUNT, TrainerType.STAR_GRUNT ];
break;
case 66:
trainerTypes = [ Utils.randSeedItem([ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ]), Utils.randSeedItem([ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ]), Utils.randSeedItem([ TrainerType.TABITHA, TrainerType.COURTNEY, TrainerType.MATT, TrainerType.SHELLY ]), Utils.randSeedItem([ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ]), Utils.randSeedItem([ TrainerType.ZINZOLIN, TrainerType.ROOD ]), Utils.randSeedItem([ TrainerType.XEROSIC, TrainerType.BRYONY ]), Utils.randSeedItem([ TrainerType.FABA, TrainerType.PLUMERIA ]), TrainerType.OLEANA, Utils.randSeedItem([ TrainerType.GIACOMO, TrainerType.MELA, TrainerType.ATTICUS, TrainerType.ORTEGA, TrainerType.ERI ]) ];
break;
case 112:
trainerTypes = [ TrainerType.ROCKET_GRUNT, TrainerType.ROCKET_GRUNT, Utils.randSeedItem([ TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT ]), TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT, Utils.randSeedItem([ TrainerType.AETHER_GRUNT, TrainerType.SKULL_GRUNT ]), TrainerType.MACRO_GRUNT, TrainerType.STAR_GRUNT ];
break;
case 114:
trainerTypes = [ Utils.randSeedItem([ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ]), Utils.randSeedItem([ TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL ]), Utils.randSeedItem([ TrainerType.TABITHA, TrainerType.COURTNEY, TrainerType.MATT, TrainerType.SHELLY ]), Utils.randSeedItem([ TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN ]), Utils.randSeedItem([ TrainerType.ZINZOLIN, TrainerType.ROOD ]), Utils.randSeedItem([ TrainerType.XEROSIC, TrainerType.BRYONY ]), Utils.randSeedItem([ TrainerType.FABA, TrainerType.PLUMERIA ]), TrainerType.OLEANA, Utils.randSeedItem([ TrainerType.GIACOMO, TrainerType.MELA, TrainerType.ATTICUS, TrainerType.ORTEGA, TrainerType.ERI ]) ];
break;
case 115:
trainerTypes = [ TrainerType.ROCKET_BOSS_GIOVANNI_1, TrainerType.ROCKET_BOSS_GIOVANNI_1, Utils.randSeedItem([ TrainerType.MAXIE, TrainerType.ARCHIE ]), TrainerType.CYRUS, TrainerType.GHETSIS, TrainerType.LYSANDRE, Utils.randSeedItem([ TrainerType.LUSAMINE, TrainerType.GUZMA ]), TrainerType.ROSE, TrainerType.PENNY ];
break;
case 165:
trainerTypes = [ TrainerType.ROCKET_BOSS_GIOVANNI_2, TrainerType.ROCKET_BOSS_GIOVANNI_2, Utils.randSeedItem([ TrainerType.MAXIE_2, TrainerType.ARCHIE_2 ]), TrainerType.CYRUS_2, TrainerType.GHETSIS_2, TrainerType.LYSANDRE_2, Utils.randSeedItem([ TrainerType.LUSAMINE_2, TrainerType.GUZMA_2 ]), TrainerType.ROSE_2, TrainerType.PENNY_2 ];
break;
case 182:
trainerTypes = [ TrainerType.LORELEI, TrainerType.WILL, TrainerType.SIDNEY, TrainerType.AARON, TrainerType.SHAUNTAL, TrainerType.MALVA, Utils.randSeedItem([ TrainerType.HALA, TrainerType.MOLAYNE ]), TrainerType.MARNIE_ELITE, TrainerType.RIKA ];
break;

View File

@ -837,11 +837,15 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
"dialogue:macro_grunt.encounter.1",
"dialogue:macro_grunt.encounter.2",
"dialogue:macro_grunt.encounter.3",
"dialogue:macro_grunt.encounter.4",
"dialogue:macro_grunt.encounter.5",
],
victory: [
"dialogue:macro_grunt.victory.1",
"dialogue:macro_grunt.victory.2",
"dialogue:macro_grunt.victory.3",
"dialogue:macro_grunt.victory.4",
"dialogue:macro_grunt.victory.5",
]
}
],
@ -859,6 +863,66 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
]
}
],
[TrainerType.STAR_GRUNT]: [
{
encounter: [
"dialogue:star_grunt.encounter.1",
],
victory: [
"dialogue:star_grunt.victory.1",
]
}
],
[TrainerType.GIACOMO]: [
{
encounter: [
"dialogue:giacomo.encounter.1",
],
victory: [
"dialogue:giacomo.victory.1",
]
}
],
[TrainerType.MELA]: [
{
encounter: [
"dialogue:mela.encounter.1",
],
victory: [
"dialogue:mela.victory.1",
]
}
],
[TrainerType.ATTICUS]: [
{
encounter: [
"dialogue:atticus.encounter.1",
],
victory: [
"dialogue:atticus.victory.1",
]
}
],
[TrainerType.ORTEGA]: [
{
encounter: [
"dialogue:ortega.encounter.1",
],
victory: [
"dialogue:ortega.victory.1",
]
}
],
[TrainerType.ERI]: [
{
encounter: [
"dialogue:eri.encounter.1",
],
victory: [
"dialogue:eri.victory.1",
]
}
],
[TrainerType.ROCKET_BOSS_GIOVANNI_1]: [
{
encounter: [
@ -1093,6 +1157,32 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
]
}
],
[TrainerType.PENNY]: [
{
encounter: [
"dialogue:star_boss_penny_1.encounter.1"
],
victory: [
"dialogue:star_boss_penny_1.victory.1"
],
defeat: [
"dialogue:star_boss_penny_1.defeat.1"
]
}
],
[TrainerType.PENNY_2]: [
{
encounter: [
"dialogue:star_boss_penny_2.encounter.1"
],
victory: [
"dialogue:star_boss_penny_2.victory.1"
],
defeat: [
"dialogue:star_boss_penny_2.defeat.1"
]
}
],
[TrainerType.BUCK]: [
{
encounter: [

View File

@ -264,7 +264,7 @@ export const speciesEggMoves = {
[Species.PANPOUR]: [ Moves.NASTY_PLOT, Moves.ENERGY_BALL, Moves.EARTH_POWER, Moves.STEAM_ERUPTION ],
[Species.MUNNA]: [ Moves.COSMIC_POWER, Moves.AURA_SPHERE, Moves.EARTH_POWER, Moves.MYSTICAL_POWER ],
[Species.PIDOVE]: [ Moves.GUNK_SHOT, Moves.TIDY_UP, Moves.FLOATY_FALL, Moves.TRIPLE_ARROWS ],
[Species.BLITZLE]: [ Moves.HIGH_HORSEPOWER, Moves.THUNDEROUS_KICK, Moves.FLARE_BLITZ, Moves.VOLT_TACKLE ],
[Species.BLITZLE]: [ Moves.HORN_LEECH, Moves.SWORDS_DANCE, Moves.FLARE_BLITZ, Moves.BOLT_STRIKE ],
[Species.ROGGENROLA]: [ Moves.BODY_PRESS, Moves.CURSE, Moves.SHORE_UP, Moves.DIAMOND_STORM ],
[Species.WOOBAT]: [ Moves.ESPER_WING, Moves.STORED_POWER, Moves.MYSTICAL_FIRE, Moves.OBLIVION_WING ],
[Species.DRILBUR]: [ Moves.IRON_HEAD, Moves.MOUNTAIN_GALE, Moves.SHIFT_GEAR, Moves.THOUSAND_ARROWS ],

View File

@ -162,10 +162,10 @@ export const BerriesAboundEncounter: MysteryEncounter =
.withOptionPhase(async (scene: BattleScene) => {
// Pick race for berries
const encounter = scene.currentBattle.mysteryEncounter!;
const fastestPokemon = encounter.misc.fastestPokemon;
const enemySpeed = encounter.misc.enemySpeed;
const fastestPokemon: PlayerPokemon = encounter.misc.fastestPokemon;
const enemySpeed: number = encounter.misc.enemySpeed;
const speedDiff = fastestPokemon.getStat(Stat.SPD) / (enemySpeed * 1.1);
const numBerries = encounter.misc.numBerries;
const numBerries: number = encounter.misc.numBerries;
const shopOptions: ModifierTypeOption[] = [];
for (let i = 0; i < 5; i++) {

View File

@ -379,7 +379,7 @@ function getPartyConfig(scene: BattleScene): EnemyPartyConfig {
trainerType: TrainerType.EXPERT_POKEMON_BREEDER,
pokemonConfigs: [
{
nickname: i18next.t(`${namespace}.cleffa_1_nickname`),
nickname: i18next.t(`${namespace}.cleffa_1_nickname`, { speciesName: getPokemonSpecies(cleffaSpecies).getName() }),
species: getPokemonSpecies(cleffaSpecies),
isBoss: false,
abilityIndex: 1, // Magic Guard
@ -407,7 +407,7 @@ function getPartyConfig(scene: BattleScene): EnemyPartyConfig {
if (scene.arena.biomeType === Biome.SPACE) {
// All 3 members always Cleffa line, but different configs
baseConfig.pokemonConfigs!.push({
nickname: i18next.t(`${namespace}.cleffa_2_nickname`),
nickname: i18next.t(`${namespace}.cleffa_2_nickname`, { speciesName: getPokemonSpecies(cleffaSpecies).getName() }),
species: getPokemonSpecies(cleffaSpecies),
isBoss: false,
abilityIndex: 1, // Magic Guard

View File

@ -19498,6 +19498,108 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = {
[ 51, Moves.BELCH ],
],
},
[Species.REVAVROOM]: {
1: [
[ EVOLVE_MOVE, Moves.WICKED_TORQUE ],
[ EVOLVE_MOVE, Moves.SHIFT_GEAR ],
[ 1, Moves.LICK ],
[ 1, Moves.POISON_GAS ],
[ 1, Moves.MAGNET_RISE ],
[ 4, Moves.SMOG ],
[ 7, Moves.TAUNT ],
[ 10, Moves.ASSURANCE ],
[ 13, Moves.SLUDGE ],
[ 17, Moves.GYRO_BALL ],
[ 21, Moves.HEADBUTT ],
[ 25, Moves.SCREECH ],
[ 28, Moves.IRON_HEAD ],
[ 32, Moves.SWAGGER ],
[ 36, Moves.POISON_JAB ],
[ 46, Moves.UPROAR ],
[ 52, Moves.SPIN_OUT ],
[ 58, Moves.GUNK_SHOT ],
],
2: [
[ EVOLVE_MOVE, Moves.BLAZING_TORQUE ],
[ EVOLVE_MOVE, Moves.SHIFT_GEAR ],
[ 1, Moves.LICK ],
[ 1, Moves.POISON_GAS ],
[ 1, Moves.MAGNET_RISE ],
[ 4, Moves.SMOG ],
[ 7, Moves.TAUNT ],
[ 10, Moves.ASSURANCE ],
[ 13, Moves.SLUDGE ],
[ 17, Moves.GYRO_BALL ],
[ 21, Moves.HEADBUTT ],
[ 25, Moves.SCREECH ],
[ 28, Moves.IRON_HEAD ],
[ 32, Moves.SWAGGER ],
[ 36, Moves.POISON_JAB ],
[ 46, Moves.UPROAR ],
[ 52, Moves.SPIN_OUT ],
[ 58, Moves.GUNK_SHOT ],
],
3: [
[ EVOLVE_MOVE, Moves.NOXIOUS_TORQUE ],
[ EVOLVE_MOVE, Moves.SHIFT_GEAR ],
[ 1, Moves.LICK ],
[ 1, Moves.POISON_GAS ],
[ 1, Moves.MAGNET_RISE ],
[ 4, Moves.SMOG ],
[ 7, Moves.TAUNT ],
[ 10, Moves.ASSURANCE ],
[ 13, Moves.SLUDGE ],
[ 17, Moves.GYRO_BALL ],
[ 21, Moves.HEADBUTT ],
[ 25, Moves.SCREECH ],
[ 28, Moves.IRON_HEAD ],
[ 32, Moves.SWAGGER ],
[ 36, Moves.POISON_JAB ],
[ 46, Moves.UPROAR ],
[ 52, Moves.SPIN_OUT ],
[ 58, Moves.GUNK_SHOT ],
],
4: [
[ EVOLVE_MOVE, Moves.MAGICAL_TORQUE ],
[ EVOLVE_MOVE, Moves.SHIFT_GEAR ],
[ 1, Moves.LICK ],
[ 1, Moves.POISON_GAS ],
[ 1, Moves.MAGNET_RISE ],
[ 4, Moves.SMOG ],
[ 7, Moves.TAUNT ],
[ 10, Moves.ASSURANCE ],
[ 13, Moves.SLUDGE ],
[ 17, Moves.GYRO_BALL ],
[ 21, Moves.HEADBUTT ],
[ 25, Moves.SCREECH ],
[ 28, Moves.IRON_HEAD ],
[ 32, Moves.SWAGGER ],
[ 36, Moves.POISON_JAB ],
[ 46, Moves.UPROAR ],
[ 52, Moves.SPIN_OUT ],
[ 58, Moves.GUNK_SHOT ],
],
5: [
[ EVOLVE_MOVE, Moves.COMBAT_TORQUE ],
[ EVOLVE_MOVE, Moves.SHIFT_GEAR ],
[ 1, Moves.LICK ],
[ 1, Moves.POISON_GAS ],
[ 1, Moves.MAGNET_RISE ],
[ 4, Moves.SMOG ],
[ 7, Moves.TAUNT ],
[ 10, Moves.ASSURANCE ],
[ 13, Moves.SLUDGE ],
[ 17, Moves.GYRO_BALL ],
[ 21, Moves.HEADBUTT ],
[ 25, Moves.SCREECH ],
[ 28, Moves.IRON_HEAD ],
[ 32, Moves.SWAGGER ],
[ 36, Moves.POISON_JAB ],
[ 46, Moves.UPROAR ],
[ 52, Moves.SPIN_OUT ],
[ 58, Moves.GUNK_SHOT ],
],
},
[Species.PALDEA_TAUROS]: {
1: [
[ 1, Moves.TACKLE ],

View File

@ -2545,7 +2545,14 @@ export function initSpecies() {
new PokemonForm("Hero Form", "hero", Type.WATER, null, 1.8, 97.4, Abilities.ZERO_TO_HERO, Abilities.NONE, Abilities.ZERO_TO_HERO, 650, 100, 160, 97, 106, 87, 100, 45, 50, 160),
),
new PokemonSpecies(Species.VAROOM, 9, false, false, false, "Single-Cyl Pokémon", Type.STEEL, Type.POISON, 1, 35, Abilities.OVERCOAT, Abilities.NONE, Abilities.SLOW_START, 300, 45, 70, 63, 30, 45, 47, 190, 50, 60, GrowthRate.MEDIUM_FAST, 50, false),
new PokemonSpecies(Species.REVAVROOM, 9, false, false, false, "Multi-Cyl Pokémon", Type.STEEL, Type.POISON, 1.8, 120, Abilities.OVERCOAT, Abilities.NONE, Abilities.FILTER, 500, 80, 119, 90, 54, 67, 90, 75, 50, 175, GrowthRate.MEDIUM_FAST, 50, false),
new PokemonSpecies(Species.REVAVROOM, 9, false, false, false, "Multi-Cyl Pokémon", Type.STEEL, Type.POISON, 1.8, 120, Abilities.OVERCOAT, Abilities.NONE, Abilities.FILTER, 500, 80, 119, 90, 54, 67, 90, 75, 50, 175, GrowthRate.MEDIUM_FAST, 50, false, false,
new PokemonForm("Normal", "", Type.STEEL, Type.POISON, 1.8, 120, Abilities.OVERCOAT, Abilities.NONE, Abilities.FILTER, 500, 80, 119, 90, 54, 67, 90, 75, 50, 175, false, null, true),
new PokemonForm("Segin Starmobile", "segin-starmobile", Type.STEEL, Type.DARK, 1.8, 240, Abilities.INTIMIDATE, Abilities.NONE, Abilities.INTIMIDATE, 600, 120, 129, 100, 59, 77, 115, 75, 50, 175),
new PokemonForm("Schedar Starmobile", "schedar-starmobile", Type.STEEL, Type.FIRE, 1.8, 240, Abilities.SPEED_BOOST, Abilities.NONE, Abilities.SPEED_BOOST, 600, 120, 129, 100, 59, 77, 115, 75, 50, 175),
new PokemonForm("Navi Starmobile", "navi-starmobile", Type.STEEL, Type.POISON, 1.8, 240, Abilities.TOXIC_DEBRIS, Abilities.NONE, Abilities.TOXIC_DEBRIS, 600, 120, 129, 100, 59, 77, 115, 75, 50, 175),
new PokemonForm("Ruchbah Starmobile", "ruchbah-starmobile", Type.STEEL, Type.FAIRY, 1.8, 240, Abilities.MISTY_SURGE, Abilities.NONE, Abilities.MISTY_SURGE, 600, 120, 129, 100, 59, 77, 115, 75, 50, 175),
new PokemonForm("Caph Starmobile", "caph-starmobile", Type.STEEL, Type.FIGHTING, 1.8, 240, Abilities.STAMINA, Abilities.NONE, Abilities.STAMINA, 600, 120, 129, 100, 59, 77, 115, 75, 50, 175),
),
new PokemonSpecies(Species.CYCLIZAR, 9, false, false, false, "Mount Pokémon", Type.DRAGON, Type.NORMAL, 1.6, 63, Abilities.SHED_SKIN, Abilities.NONE, Abilities.REGENERATOR, 501, 70, 95, 65, 85, 65, 121, 190, 50, 175, GrowthRate.MEDIUM_SLOW, 50, false),
new PokemonSpecies(Species.ORTHWORM, 9, false, false, false, "Earthworm Pokémon", Type.STEEL, null, 2.5, 310, Abilities.EARTH_EATER, Abilities.NONE, Abilities.SAND_VEIL, 480, 70, 85, 145, 60, 55, 65, 25, 50, 240, GrowthRate.SLOW, 50, false),
new PokemonSpecies(Species.GLIMMET, 9, false, false, false, "Ore Pokémon", Type.ROCK, Type.POISON, 0.7, 8, Abilities.TOXIC_DEBRIS, Abilities.NONE, Abilities.CORROSION, 350, 48, 35, 42, 105, 60, 60, 70, 50, 70, GrowthRate.MEDIUM_SLOW, 50, false),
@ -3396,7 +3403,7 @@ export const starterPassiveAbilities = {
[Species.POLIWAG]: Abilities.NO_GUARD,
[Species.ABRA]: Abilities.PSYCHIC_SURGE,
[Species.MACHOP]: Abilities.QUICK_FEET,
[Species.BELLSPROUT]: Abilities.PROTOSYNTHESIS,
[Species.BELLSPROUT]: Abilities.FLOWER_GIFT,
[Species.TENTACOOL]: Abilities.TOXIC_CHAIN,
[Species.GEODUDE]: Abilities.DRY_SKIN,
[Species.PONYTA]: Abilities.MAGIC_GUARD,
@ -3424,7 +3431,7 @@ export const starterPassiveAbilities = {
[Species.STARYU]: Abilities.REGENERATOR,
[Species.SCYTHER]: Abilities.TINTED_LENS,
[Species.PINSIR]: Abilities.TINTED_LENS,
[Species.TAUROS]: Abilities.SCRAPPY,
[Species.TAUROS]: Abilities.STAMINA,
[Species.MAGIKARP]: Abilities.MULTISCALE,
[Species.LAPRAS]: Abilities.LIGHTNING_ROD,
[Species.DITTO]: Abilities.ADAPTABILITY,
@ -3492,7 +3499,7 @@ export const starterPassiveAbilities = {
[Species.LARVITAR]: Abilities.SAND_RUSH,
[Species.LUGIA]: Abilities.DELTA_STREAM,
[Species.HO_OH]: Abilities.MAGIC_GUARD,
[Species.CELEBI]: Abilities.GRASSY_SURGE,
[Species.CELEBI]: Abilities.PSYCHIC_SURGE,
[Species.TREECKO]: Abilities.TINTED_LENS,
[Species.TORCHIC]: Abilities.RECKLESS,
[Species.MUDKIP]: Abilities.DRIZZLE,
@ -3630,7 +3637,7 @@ export const starterPassiveAbilities = {
[Species.PANPOUR]: Abilities.SAP_SIPPER,
[Species.MUNNA]: Abilities.NEUTRALIZING_GAS,
[Species.PIDOVE]: Abilities.SNIPER,
[Species.BLITZLE]: Abilities.RECKLESS,
[Species.BLITZLE]: Abilities.ELECTRIC_SURGE,
[Species.ROGGENROLA]: Abilities.SOLID_ROCK,
[Species.WOOBAT]: Abilities.OPPORTUNIST,
[Species.DRILBUR]: Abilities.SAND_STREAM,
@ -3830,7 +3837,7 @@ export const starterPassiveAbilities = {
[Species.DURALUDON]: Abilities.STEELWORKER,
[Species.DREEPY]: Abilities.PARENTAL_BOND,
[Species.ZACIAN]: Abilities.UNNERVE,
[Species.ZAMAZENTA]: Abilities.STAMINA,
[Species.ZAMAZENTA]: Abilities.UNNERVE,
[Species.ETERNATUS]: Abilities.NEUTRALIZING_GAS,
[Species.KUBFU]: Abilities.IRON_FIST,
[Species.ZARUDE]: Abilities.TOUGH_CLAWS,
@ -3862,7 +3869,7 @@ export const starterPassiveAbilities = {
[Species.KLAWF]: Abilities.WATER_ABSORB,
[Species.CAPSAKID]: Abilities.PARENTAL_BOND,
[Species.RELLOR]: Abilities.PRANKSTER,
[Species.FLITTLE]: Abilities.MAGIC_BOUNCE,
[Species.FLITTLE]: Abilities.DAZZLING,
[Species.TINKATINK]: Abilities.STEELWORKER,
[Species.WIGLETT]: Abilities.STURDY,
[Species.BOMBIRDIER]: Abilities.UNBURDEN,
@ -3913,7 +3920,7 @@ export const starterPassiveAbilities = {
[Species.TERAPAGOS]: Abilities.SOUL_HEART,
[Species.PECHARUNT]: Abilities.TOXIC_CHAIN,
[Species.ALOLA_RATTATA]: Abilities.ADAPTABILITY,
[Species.ALOLA_SANDSHREW]: Abilities.TOUGH_CLAWS,
[Species.ALOLA_SANDSHREW]: Abilities.ICE_SCALES,
[Species.ALOLA_VULPIX]: Abilities.SHEER_FORCE,
[Species.ALOLA_DIGLETT]: Abilities.STURDY,
[Species.ALOLA_MEOWTH]: Abilities.DARK_AURA,

View File

@ -1,6 +1,6 @@
import BattleScene, { startingWave } from "../battle-scene";
import { ModifierTypeFunc, modifierTypes } from "../modifier/modifier-type";
import { EnemyPokemon } from "../field/pokemon";
import { EnemyPokemon, PokemonMove } from "../field/pokemon";
import * as Utils from "../utils";
import { PokeballType } from "./pokeball";
import { pokemonEvolutions, pokemonPrevolutions } from "./pokemon-evolutions";
@ -335,6 +335,9 @@ export class TrainerConfig {
case TrainerType.ROSE_2:
trainerType = TrainerType.ROSE;
break;
case TrainerType.PENNY_2:
trainerType = TrainerType.PENNY;
break;
case TrainerType.MARNIE_ELITE:
trainerType = TrainerType.MARNIE;
break;
@ -619,6 +622,41 @@ export class TrainerConfig {
[TrainerPoolTier.RARE]: [Species.TINKATINK, Species.HISUI_LILLIGANT]
};
}
case "star_1": {
return {
[TrainerPoolTier.COMMON]: [ Species.MURKROW, Species.SEEDOT, Species.CACNEA, Species.STUNKY, Species.SANDILE, Species.NYMBLE, Species.MASCHIFF, Species.GALAR_ZIGZAGOON ],
[TrainerPoolTier.UNCOMMON]: [ Species.UMBREON, Species.SNEASEL, Species.CORPHISH, Species.ZORUA, Species.INKAY, Species.BOMBIRDIER ],
[TrainerPoolTier.RARE]: [ Species.DEINO, Species.SPRIGATITO ]
};
}
case "star_2": {
return {
[TrainerPoolTier.COMMON]: [ Species.GROWLITHE, Species.HOUNDOUR, Species.NUMEL, Species.LITWICK, Species.FLETCHLING, Species.LITLEO, Species.ROLYCOLY, Species.CAPSAKID ],
[TrainerPoolTier.UNCOMMON]: [ Species.PONYTA, Species.FLAREON, Species.MAGBY, Species.TORKOAL, Species.SALANDIT, Species.TURTONATOR ],
[TrainerPoolTier.RARE]: [ Species.LARVESTA, Species.FUECOCO ]
};
}
case "star_3": {
return {
[TrainerPoolTier.COMMON]: [ Species.ZUBAT, Species.GRIMER, Species.STUNKY, Species.FOONGUS, Species.MAREANIE, Species.TOXEL, Species.SHROODLE, Species.PALDEA_WOOPER ],
[TrainerPoolTier.UNCOMMON]: [ Species.GASTLY, Species.SEVIPER, Species.SKRELP, Species.ALOLA_GRIMER, Species.GALAR_SLOWPOKE, Species.HISUI_QWILFISH ],
[TrainerPoolTier.RARE]: [ Species.BULBASAUR, Species.GLIMMET ]
};
}
case "star_4": {
return {
[TrainerPoolTier.COMMON]: [ Species.CLEFFA, Species.IGGLYBUFF, Species.AZURILL, Species.COTTONEE, Species.FLABEBE, Species.HATENNA, Species.IMPIDIMP, Species.TINKATINK ],
[TrainerPoolTier.UNCOMMON]: [ Species.TOGEPI, Species.GARDEVOIR, Species.SYLVEON, Species.KLEFKI, Species.MIMIKYU, Species.ALOLA_VULPIX ],
[TrainerPoolTier.RARE]: [ Species.POPPLIO, Species.GALAR_PONYTA ]
};
}
case "star_5": {
return {
[TrainerPoolTier.COMMON]: [ Species.SHROOMISH, Species.MAKUHITA, Species.MEDITITE, Species.CROAGUNK, Species.SCRAGGY, Species.MIENFOO, Species.PAWMI, Species.PALDEA_TAUROS ],
[TrainerPoolTier.UNCOMMON]: [ Species.RIOLU, Species.TIMBURR, Species.HAWLUCHA, Species.PASSIMIAN, Species.FALINKS, Species.FLAMIGO ],
[TrainerPoolTier.RARE]: [ Species.JANGMO_O, Species.QUAXLY ]
};
}
}
console.warn(`Evil team admin for ${team} not found. Returning empty species pools.`);
@ -911,7 +949,7 @@ export class TrainerConfig {
if (!getIsInitialized()) {
initI18n();
}
this.name = i18next.t(`trainerNames:${name.toLowerCase()}`);
this.name = i18next.t(`trainerNames:${name.toLowerCase().replace(/\s/g, "_")}`);
return this;
}
@ -1278,7 +1316,7 @@ export const signatureSpecies: SignatureSpecies = {
IRIS: [Species.HAXORUS, Species.RESHIRAM, Species.ARCHEOPS], // Druddigon lead, Gmax Lapras
DIANTHA: [Species.HAWLUCHA, Species.XERNEAS, Species.GOODRA], // Gourgeist lead, Mega Gardevoir
HAU: [[Species.SOLGALEO, Species.LUNALA], Species.NOIVERN, [Species.DECIDUEYE, Species.INCINEROAR, Species.PRIMARINA], [Species.TAPU_BULU, Species.TAPU_FINI, Species.TAPU_KOKO, Species.TAPU_LELE]], // Alola Raichu lead
LEON: [Species.DRAGAPULT, [Species.ZACIAN, Species.ZAMAZENTA], Species.AEGISLASH], // Rillaboom/Cinderace/Inteleon lead, GMax Charizard
LEON: [Species.DRAGAPULT, Species.ZACIAN, Species.AEGISLASH], // Rillaboom/Cinderace/Inteleon lead, GMax Charizard
GEETA: [Species.MIRAIDON, [Species.ESPATHRA, Species.VELUZA], [Species.AVALUGG, Species.HISUI_AVALUGG], Species.KINGAMBIT], // Glimmora lead
NEMONA: [Species.KORAIDON, Species.PAWMOT, [Species.DUDUNSPARCE, Species.ORTHWORM], [Species.MEOWSCARADA, Species.SKELEDIRGE, Species.QUAQUAVAL]], // Lycanroc lead
KIERAN: [[Species.GRIMMSNARL, Species.INCINEROAR, Species.PORYGON_Z], Species.OGERPON, Species.TERAPAGOS, Species.HYDRAPPLE], // Poliwrath/Politoed lead
@ -1528,6 +1566,38 @@ export const trainerConfigs: TrainerConfigs = {
[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.STAR_GRUNT]: new TrainerConfig(++t).setHasGenders("Star Grunt Female").setHasDouble("Star Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_star_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
.setSpeciesPools({
[TrainerPoolTier.COMMON]: [ Species.DUNSPARCE, Species.HOUNDOUR, Species.AZURILL, Species.GULPIN, Species.FOONGUS, Species.FLETCHLING, Species.LITLEO, Species.FLABEBE, Species.CRABRAWLER, Species.NYMBLE, Species.PAWMI, Species.FIDOUGH, Species.SQUAWKABILLY, Species.MASCHIFF, Species.SHROODLE, Species.KLAWF, Species.WIGLETT, Species.PALDEA_WOOPER ],
[TrainerPoolTier.UNCOMMON]: [ Species.KOFFING, Species.EEVEE, Species.GIRAFARIG, Species.RALTS, Species.TORKOAL, Species.SEVIPER, Species.SCRAGGY, Species.ZORUA, Species.MIMIKYU, Species.IMPIDIMP, Species.FALINKS, Species.CAPSAKID, Species.TINKATINK, Species.BOMBIRDIER, Species.CYCLIZAR, Species.FLAMIGO, Species.PALDEA_TAUROS ],
[TrainerPoolTier.RARE]: [ Species.MANKEY, Species.PAWNIARD, Species.CHARCADET, Species.FLITTLE, Species.VAROOM, Species.ORTHWORM],
[TrainerPoolTier.SUPER_RARE]: [ Species.DONDOZO, Species.GIMMIGHOUL ]
}),
[TrainerType.GIACOMO]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("star_admin", "star_1", [Species.KINGAMBIT]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_star_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.REVAVROOM], TrainerSlot.TRAINER, true, p => {
p.formIndex = 1; // Segin Starmobile
p.moveset = [ new PokemonMove(Moves.WICKED_TORQUE), new PokemonMove(Moves.SPIN_OUT), new PokemonMove(Moves.SHIFT_GEAR), new PokemonMove(Moves.HIGH_HORSEPOWER) ];
})),
[TrainerType.MELA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("star_admin", "star_2", [Species.ARMAROUGE]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_star_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.REVAVROOM], TrainerSlot.TRAINER, true, p => {
p.formIndex = 2; // Schedar Starmobile
p.moveset = [ new PokemonMove(Moves.BLAZING_TORQUE), new PokemonMove(Moves.SPIN_OUT), new PokemonMove(Moves.SHIFT_GEAR), new PokemonMove(Moves.HIGH_HORSEPOWER) ];
})),
[TrainerType.ATTICUS]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("star_admin", "star_3", [Species.REVAVROOM]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_star_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.REVAVROOM], TrainerSlot.TRAINER, true, p => {
p.formIndex = 3; // Navi Starmobile
p.moveset = [ new PokemonMove(Moves.NOXIOUS_TORQUE), new PokemonMove(Moves.SPIN_OUT), new PokemonMove(Moves.SHIFT_GEAR), new PokemonMove(Moves.HIGH_HORSEPOWER) ];
})),
[TrainerType.ORTEGA]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("star_admin", "star_4", [Species.DACHSBUN]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_star_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.REVAVROOM], TrainerSlot.TRAINER, true, p => {
p.formIndex = 4; // Ruchbah Starmobile
p.moveset = [ new PokemonMove(Moves.MAGICAL_TORQUE), new PokemonMove(Moves.SPIN_OUT), new PokemonMove(Moves.SHIFT_GEAR), new PokemonMove(Moves.HIGH_HORSEPOWER) ];
})),
[TrainerType.ERI]: new TrainerConfig(++t).setMoneyMultiplier(1.5).initForEvilTeamAdmin("star_admin", "star_5", [Species.ANNIHILAPE]).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_star_admin").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.REVAVROOM], TrainerSlot.TRAINER, true, p => {
p.formIndex = 5; // Caph Starmobile
p.moveset = [ new PokemonMove(Moves.COMBAT_TORQUE), new PokemonMove(Moves.SPIN_OUT), new PokemonMove(Moves.SHIFT_GEAR), new PokemonMove(Moves.HIGH_HORSEPOWER) ];
})),
[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"),
@ -2162,6 +2232,64 @@ export const trainerConfigs: TrainerConfigs = {
p.generateName();
p.pokeball = PokeballType.ULTRA_BALL;
})),
[TrainerType.PENNY]: new TrainerConfig(++t).setName("Cassiopeia").initForEvilTeamLeader("Star Boss", []).setMixedBattleBgm("battle_star_boss").setVictoryBgm("victory_team_plasma")
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.VAPOREON, Species.JOLTEON, Species.FLAREON ]))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.ESPEON, Species.UMBREON ], TrainerSlot.TRAINER, true, p => {
p.abilityIndex = 2; // Magic Bounce Espeon, Inner Focus Umbreon
p.generateAndPopulateMoveset();
}))
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.LEAFEON, Species.GLACEON ]))
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.ROTOM ], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
p.formIndex = Utils.randSeedInt(5, 1); // Heat, Wash, Frost, Fan, or Mow
}))
.setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.SYLVEON ], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
p.abilityIndex = 2; // Pixilate
}))
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.EEVEE ], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
p.formIndex = 2; // G-Max Eevee
p.pokeball = PokeballType.ULTRA_BALL;
p.generateName();
}))
.setGenModifiersFunc(party => {
const teraPokemon = party[4];
return [modifierTypes.TERA_SHARD().generateType([], [teraPokemon.species.type1])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(teraPokemon) as PersistentModifier]; //TODO: is the bang correct?
}),
[TrainerType.PENNY_2]: new TrainerConfig(++t).setName("Cassiopeia").initForEvilTeamLeader("Star Boss", [], true).setMixedBattleBgm("battle_star_boss").setVictoryBgm("victory_team_plasma")
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.REVAVROOM ], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
p.formIndex = Utils.randSeedInt(5, 1); //Random Starmobile form
p.pokeball = PokeballType.ULTRA_BALL;
}))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.ENTEI, Species.RAIKOU, Species.SUICUNE ], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.ULTRA_BALL;
}))
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.WALKING_WAKE, Species.GOUGING_FIRE, Species.RAGING_BOLT ]))
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.SYLVEON ], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
p.abilityIndex = 2; // Pixilate
}))
.setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.EEVEE ], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
p.formIndex = 2;
p.generateName();
p.pokeball = PokeballType.ULTRA_BALL;
}))
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.ZAMAZENTA ], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.MASTER_BALL;
}))
.setGenModifiersFunc(party => {
const teraPokemon = party[3];
return [modifierTypes.TERA_SHARD().generateType([], [teraPokemon.species.type1])!.withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(teraPokemon) as PersistentModifier]; //TODO: is the bang correct?
}),
[TrainerType.BUCK]: new TrainerConfig(++t).setName("Buck").initForStatTrainer([], true)
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.CLAYDOL ], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 3);
@ -2311,7 +2439,7 @@ export const trainerConfigs: TrainerConfigs = {
.setPartyTemplates(new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(2, PartyMemberStrength.STRONG))),
[TrainerType.BUG_TYPE_SUPERFAN]: new TrainerConfig(++t).setMoneyMultiplier(2.25).setEncounterBgm(TrainerType.ACE_TRAINER)
.setPartyTemplates(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE)),
[TrainerType.EXPERT_POKEMON_BREEDER]: new TrainerConfig(++t).setMoneyMultiplier(3).setEncounterBgm(TrainerType.ACE_TRAINER)
[TrainerType.EXPERT_POKEMON_BREEDER]: new TrainerConfig(++t).setMoneyMultiplier(3).setEncounterBgm(TrainerType.ACE_TRAINER).setLocalizedName("Expert Pokemon Breeder")
.setPartyTemplates(new TrainerPartyTemplate(3, PartyMemberStrength.STRONG))
};

View File

@ -78,6 +78,12 @@ export enum TrainerType {
PLUMERIA,
MACRO_GRUNT,
OLEANA,
STAR_GRUNT,
GIACOMO,
MELA,
ATTICUS,
ORTEGA,
ERI,
ROCKET_BOSS_GIOVANNI_1,
ROCKET_BOSS_GIOVANNI_2,
MAXIE,
@ -96,6 +102,8 @@ export enum TrainerType {
GUZMA_2,
ROSE,
ROSE_2,
PENNY,
PENNY_2,
BUCK,
CHERYL,
MARLEY,

View File

@ -584,7 +584,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
getSpriteScale(): number {
const formKey = this.getFormKey();
if (formKey.indexOf(SpeciesFormKey.GIGANTAMAX) > -1 || formKey.indexOf(SpeciesFormKey.ETERNAMAX) > -1) {
if (this.isMax() === true || formKey === "segin-starmobile" || formKey === "schedar-starmobile" || formKey === "navi-starmobile" || formKey === "ruchbah-starmobile" || formKey === "caph-starmobile") {
return 1.5;
} else if (this.mysteryEncounterPokemonData.spriteScale > 0) {
return this.mysteryEncounterPokemonData.spriteScale;
@ -4749,8 +4749,15 @@ export class EnemyPokemon extends Pokemon {
return true;
}
/**
* Go through a boss' health segments and give stats boosts for each newly cleared segment
* The base boost is 1 to a random stat that's not already maxed out per broken shield
* For Pokemon with 3 health segments or more, breaking the last shield gives +2 instead
* For Pokemon with 5 health segments or more, breaking the last two shields give +2 each
* @param segmentIndex index of the segment to get down to (0 = no shield left, 1 = 1 shield left, etc.)
*/
handleBossSegmentCleared(segmentIndex: integer): void {
while (segmentIndex - 1 < this.bossSegmentIndex) {
while (this.bossSegmentIndex > 0 && segmentIndex - 1 < this.bossSegmentIndex) {
// Filter out already maxed out stat stages and weigh the rest based on existing stats
const leftoverStats = EFFECTIVE_STATS.filter((s: EffectiveStat) => this.getStatStage(s) < 6);
const statWeights = leftoverStats.map((s: EffectiveStat) => this.getStat(s, false));

View File

@ -83,9 +83,11 @@
"battle_aether_grunt": "SM Aether Foundation Battle",
"battle_skull_grunt": "SM Team Skull Battle",
"battle_macro_grunt": "SWSH Trainer Battle",
"battle_star_grunt": "SV Team Star Battle",
"battle_galactic_admin": "BDSP Team Galactic Admin Battle",
"battle_skull_admin": "SM Team Skull Admin Battle",
"battle_oleana": "SWSH Oleana Battle",
"battle_star_admin": "SV Team Star Boss",
"battle_rocket_boss": "USUM Giovanni Battle",
"battle_aqua_magma_boss": "ORAS Archie & Maxie Battle",
"battle_galactic_boss": "BDSP Cyrus Battle",
@ -94,6 +96,7 @@
"battle_aether_boss": "SM Lusamine Battle",
"battle_skull_boss": "SM Guzma Battle",
"battle_macro_boss": "SWSH Rose Battle",
"battle_star_boss": "SV Cassiopeia Battle",
"abyss": "PMD EoS Dark Crater",
"badlands": "PMD EoS Barren Valley",

View File

@ -764,12 +764,16 @@
"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.",
"2_female": "You are a trainer aren't you? I'm afraid that doesn't give you the right to interfere in our work.",
"3": "I'm from Macro Cosmos Insurance! Do you have a life insurance policy?"
"3": "I'm from Macro Cosmos Insurance! Do you have a life insurance policy?",
"4": "I found you! In that case, time for a Pokémon battle!",
"5": "An earful from Ms. Oleana is way worse than anything you can do!"
},
"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!"
"3": "Nobody can beat Macro Cosmos when it comes to our dedication to our work!",
"4": "I even switched up my Pokémon...",
"5": "Battles didn't work... Only thing to do now is run!"
}
},
"oleana": {
@ -785,6 +789,73 @@
"3": "*sigh* I am one tired Oleana..."
}
},
"star_grunt": {
"encounter": {
"1": "We're Team Star, kid. We burn so bright, it hurts to look at us!",
"2": "We'll come at you full force - Hasta la vistaaar! ☆",
"3": "If you don't clear out real quick-like, I'll hafta come at you in self-defense. You get me?",
"4": "Sorry, but if you don't turn yourself around here, amigo, we'll have to send you packing!",
"4_female": "Sorry, but if you don't turn yourself around here, amiga, we'll have to send you packing!",
"5": "Oh great. Here comes another rando to ruin my day."
},
"victory": {
"1": "How come I'M the one seeing stars?!",
"2": "You're scary, kid. If you joined Team Star, you'd be looking down from the top in no time!",
"3": "I defended myself all right... But it wasn't enough!",
"4": "H-hasta la vistar... ☆",
"5": "I didn't think grunt work for Team Star newbies would be this much of a chore..."
}
},
"giacomo": {
"encounter": {
"1": "You don't really think things through, do ya? Declarin' war on Team Star is a real bad move.",
"2": "I'll play you a sick requiem as you crash and burn. Let's get this party staaarteeed!"
},
"victory": {
"1": "Guess that's that...",
"2": "You turned my melody into a threnody..."
}
},
"mela": {
"encounter": {
"1": "So you're the dope who picked a fight with Team Star... Prepare to get messed up.",
"2": "All riiight, BRING IT! I'll blow everythin' sky high!"
},
"victory": {
"1": "Ugh. Is this really how it's gonna end? What a hassle...",
"2": "I burned through everythin' I had...and now I've sputtered out."
}
},
"atticus": {
"encounter": {
"1": "You have some nerve baring your fangs at Team Star. Come, then, villainous wretch!",
"2": "Be warned—I shall spare thee no mercy! En garde!"
},
"victory": {
"1": "Forgive me, my friends...",
"2": "You have utterly bested me. But thy victory stir'd no bitterness within me—such was its brilliance."
}
},
"ortega": {
"encounter": {
"1": "I promise I'll play nice, so don't blame me when this battle sends you blubbering back home!",
"2": "I'll wipe that smug look off your face for sure! You're going down!"
},
"victory": {
"1": "Ugh! How could I LOSE! What the HECK!",
"2": "Arrrrgggh! That strength of yours is SO. NOT. FAIR."
}
},
"eri": {
"encounter": {
"1": "Doesn't matter who you are. I'll bury anyone who tries to take down Team Star!",
"2": "I give as good as I get—that's a promise! We'll see who's left standing in the end!"
},
"victory": {
"1": "I'm so sorry, everyone...",
"2": "I gave it my all, but it wasn't enough—I wasn't enough..."
}
},
"rocket_boss_giovanni_1": {
"encounter": {
"1": "So! I must say, I am impressed you got here!"
@ -985,6 +1056,28 @@
"1": "I suppose it must seem that I am doing something terrible. I don't expect you to understand.\n$But I must provide the Galar region with limitless energy to ensure everlasting prosperity."
}
},
"star_boss_penny_1": {
"encounter": {
"1": "I'm the big boss of Team Star. The name's Cassiopeia. \n$Now, bow down before the overwhelming might of Team Star's founder!"
},
"victory": {
"1": "... ... .."
},
"defeat": {
"1": "Heh..."
}
},
"star_boss_penny_2": {
"encounter": {
"1": "I won't hold back in this battle! I'll stay true to Team Star's code! \n$My Veevee power will crush you into stardust!"
},
"victory": {
"1": "...It's all over now."
},
"defeat": {
"1": "I can't fault you on your battle skills at all... Considering how the bosses fell at your hands."
}
},
"stat_trainer_buck": {
"encounter": {
"1": "...I'm telling you right now. I'm seriously tough. Act surprised!",

View File

@ -126,5 +126,8 @@
"skull_grunts": "Team Skull Grunts",
"macro_grunt": "Macro Cosmos Trainer",
"macro_grunt_female": "Macro Cosmos Trainer",
"macro_grunts": "Macro Cosmos Trainers"
"macro_grunts": "Macro Cosmos Trainers",
"star_grunt": "Star Grunt",
"star_grunt_female": "Star Grunt",
"star_grunts": "Star Grunts"
}

View File

@ -141,6 +141,11 @@
"faba": "Faba",
"plumeria": "Plumeria",
"oleana": "Oleana",
"giacomo": "Giacomo",
"mela": "Mela",
"atticus": "Atticus",
"ortega": "Ortega",
"eri": "Eri",
"maxie": "Maxie",
"archie": "Archie",
@ -150,6 +155,7 @@
"lusamine": "Lusamine",
"guzma": "Guzma",
"rose": "Rose",
"cassiopeia": "Cassiopeia",
"blue_red_double": "Blue & Red",
"red_blue_double": "Red & Blue",

View File

@ -19,6 +19,7 @@
"aether_boss": "Aether President",
"skull_boss": "Team Skull Boss",
"macro_boss": "Macro Cosmos President",
"star_boss": "Team Star Leader",
"rocket_admin": "Team Rocket Admin",
"rocket_admin_female": "Team Rocket Admin",
@ -35,6 +36,7 @@
"aether_admin": "Aether Foundation Admin",
"skull_admin": "Team Skull Admin",
"macro_admin": "Macro Cosmos",
"star_admin": "Team Star Squad Boss",
"the_winstrates": "The Winstrates'"
}

View File

@ -7,7 +7,7 @@ import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest";
const TIMEOUT = 20 * 1000;
describe("Abilities - BATTLE BOND", () => {
let phaserGame: Phaser.Game;
@ -60,6 +60,5 @@ describe("Abilities - BATTLE BOND", () => {
expect(greninja!.formIndex).toBe(baseForm);
},
TIMEOUT
);
});

View File

@ -8,7 +8,7 @@ import GameManager from "#test/utils/gameManager";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest";
const TIMEOUT = 20 * 1000;
describe("Abilities - COSTAR", () => {
let phaserGame: Phaser.Game;
@ -59,7 +59,6 @@ describe("Abilities - COSTAR", () => {
expect(leftPokemon.getStatStage(Stat.SPATK)).toBe(2);
expect(rightPokemon.getStatStage(Stat.SPATK)).toBe(2);
},
TIMEOUT,
);
test(
@ -83,6 +82,5 @@ describe("Abilities - COSTAR", () => {
expect(leftPokemon.getStatStage(Stat.ATK)).toBe(-2);
expect(rightPokemon.getStatStage(Stat.ATK)).toBe(-2);
},
TIMEOUT,
);
});

View File

@ -7,7 +7,7 @@ import GameManager from "#test/utils/gameManager";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
const TIMEOUT = 20 * 1000;
describe("Abilities - Dancer", () => {
let phaserGame: Phaser.Game;
@ -60,5 +60,5 @@ describe("Abilities - Dancer", () => {
// doesn't use PP if copied move is also in moveset
expect(oricorio.moveset[0]?.ppUsed).toBe(0);
}, TIMEOUT);
});
});

View File

@ -7,7 +7,7 @@ import { Stat } from "#enums/stat";
import GameManager from "#test/utils/gameManager";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
const TIMEOUT = 20 * 1000;
describe("Abilities - Disguise", () => {
let phaserGame: Phaser.Game;
@ -33,7 +33,7 @@ describe("Abilities - Disguise", () => {
.enemyMoveset(Moves.SPLASH)
.starterSpecies(Species.REGIELEKI)
.moveset([Moves.SHADOW_SNEAK, Moves.VACUUM_WAVE, Moves.TOXIC_THREAD, Moves.SPLASH]);
}, TIMEOUT);
});
it("takes no damage from attacking move and transforms to Busted form, takes 1/8 max HP damage from the disguise breaking", async () => {
await game.classicMode.startBattle();
@ -50,7 +50,7 @@ describe("Abilities - Disguise", () => {
expect(mimikyu.hp).equals(maxHp - disguiseDamage);
expect(mimikyu.formIndex).toBe(bustedForm);
}, TIMEOUT);
});
it("doesn't break disguise when attacked with ineffective move", async () => {
await game.classicMode.startBattle();
@ -64,7 +64,7 @@ describe("Abilities - Disguise", () => {
await game.phaseInterceptor.to("MoveEndPhase");
expect(mimikyu.formIndex).toBe(disguisedForm);
}, TIMEOUT);
});
it("takes no damage from the first hit of a multihit move and transforms to Busted form, then takes damage from the second hit", async () => {
game.override.moveset([ Moves.SURGING_STRIKES ]);
@ -88,7 +88,7 @@ describe("Abilities - Disguise", () => {
await game.phaseInterceptor.to("MoveEffectPhase");
expect(mimikyu.hp).lessThan(maxHp - disguiseDamage);
expect(mimikyu.formIndex).toBe(bustedForm);
}, TIMEOUT);
});
it("takes effects from status moves and damage from status effects", async () => {
await game.classicMode.startBattle();
@ -104,7 +104,7 @@ describe("Abilities - Disguise", () => {
expect(mimikyu.status?.effect).toBe(StatusEffect.POISON);
expect(mimikyu.getStatStage(Stat.SPD)).toBe(-1);
expect(mimikyu.hp).toBeLessThan(mimikyu.getMaxHp());
}, TIMEOUT);
});
it("persists form change when switched out", async () => {
game.override.enemyMoveset([Moves.SHADOW_SNEAK]);
@ -129,7 +129,7 @@ describe("Abilities - Disguise", () => {
await game.phaseInterceptor.to("TurnEndPhase");
expect(mimikyu.formIndex).toBe(bustedForm);
}, TIMEOUT);
});
it("persists form change when wave changes with no arena reset", async () => {
game.override.starterSpecies(0);
@ -146,7 +146,7 @@ describe("Abilities - Disguise", () => {
await game.toNextWave();
expect(mimikyu.formIndex).toBe(bustedForm);
}, TIMEOUT);
});
it("reverts to Disguised form on arena reset", async () => {
game.override.startingWave(4);
@ -166,7 +166,7 @@ describe("Abilities - Disguise", () => {
await game.toNextWave();
expect(mimikyu.formIndex).toBe(disguisedForm);
}, TIMEOUT);
});
it("reverts to Disguised form on biome change when fainted", async () => {
game.override.startingWave(10);
@ -190,7 +190,7 @@ describe("Abilities - Disguise", () => {
await game.phaseInterceptor.to("PartyHealPhase");
expect(mimikyu1.formIndex).toBe(disguisedForm);
}, TIMEOUT);
});
it("doesn't faint twice when fainting due to Disguise break damage, nor prevent faint from Disguise break damage if using Endure", async () => {
game.override.enemyMoveset([Moves.ENDURE]);
@ -204,7 +204,7 @@ describe("Abilities - Disguise", () => {
expect(game.scene.getCurrentPhase()?.constructor.name).toBe("CommandPhase");
expect(game.scene.currentBattle.waveIndex).toBe(2);
}, TIMEOUT);
});
it("activates when Aerilate circumvents immunity to the move's base type", async () => {
game.override.ability(Abilities.AERILATE);
@ -222,5 +222,5 @@ describe("Abilities - Disguise", () => {
expect(mimikyu.formIndex).toBe(bustedForm);
expect(mimikyu.hp).toBe(maxHp - disguiseDamage);
}, TIMEOUT);
});
});

View File

@ -9,7 +9,7 @@ import GameManager from "#test/utils/gameManager";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
const TIMEOUT = 20 * 1000;
describe("Abilities - Galvanize", () => {
let phaserGame: Phaser.Game;
@ -59,7 +59,7 @@ describe("Abilities - Galvanize", () => {
expect(enemyPokemon.apply).toHaveReturnedWith(HitResult.EFFECTIVE);
expect(move.calculateBattlePower).toHaveReturnedWith(48);
expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp());
}, TIMEOUT);
});
it("should cause Normal-type attacks to activate Volt Absorb", async () => {
game.override.enemyAbility(Abilities.VOLT_ABSORB);
@ -81,7 +81,7 @@ describe("Abilities - Galvanize", () => {
expect(playerPokemon.getMoveType).toHaveLastReturnedWith(Type.ELECTRIC);
expect(enemyPokemon.apply).toHaveReturnedWith(HitResult.NO_EFFECT);
expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp());
}, TIMEOUT);
});
it("should not change the type of variable-type moves", async () => {
game.override.enemySpecies(Species.MIGHTYENA);
@ -100,7 +100,7 @@ describe("Abilities - Galvanize", () => {
expect(playerPokemon.getMoveType).not.toHaveLastReturnedWith(Type.ELECTRIC);
expect(enemyPokemon.apply).toHaveReturnedWith(HitResult.NO_EFFECT);
expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp());
}, TIMEOUT);
});
it("should affect all hits of a Normal-type multi-hit move", async () => {
await game.startBattle();
@ -128,5 +128,5 @@ describe("Abilities - Galvanize", () => {
}
expect(enemyPokemon.apply).not.toHaveReturnedWith(HitResult.NO_EFFECT);
}, TIMEOUT);
});
});

View File

@ -10,8 +10,6 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
describe("Abilities - Gorilla Tactics", () => {
let phaserGame: Phaser.Game;
let game: GameManager;
const TIMEOUT = 20 * 1000;
beforeAll(() => {
phaserGame = new Phaser.Game({
type: Phaser.HEADLESS,
@ -49,7 +47,7 @@ describe("Abilities - Gorilla Tactics", () => {
// Other moves should be restricted
expect(darmanitan.isMoveRestricted(Moves.TACKLE)).toBe(true);
expect(darmanitan.isMoveRestricted(Moves.SPLASH)).toBe(false);
}, TIMEOUT);
});
it("should struggle if the only usable move is disabled", async () => {
await game.classicMode.startBattle([Species.GALAR_DARMANITAN]);
@ -79,5 +77,5 @@ describe("Abilities - Gorilla Tactics", () => {
await game.phaseInterceptor.to("MoveEndPhase");
expect(darmanitan.hp).toBeLessThan(darmanitan.getMaxHp());
}, TIMEOUT);
});
});

View File

@ -12,7 +12,7 @@ import GameManager from "#test/utils/gameManager";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest";
const TIMEOUT = 20 * 1000;
describe("Abilities - Libero", () => {
let phaserGame: Phaser.Game;
@ -52,7 +52,6 @@ describe("Abilities - Libero", () => {
testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.SPLASH);
},
TIMEOUT,
);
test.skip(
@ -92,7 +91,6 @@ describe("Abilities - Libero", () => {
testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.SPLASH);
},
TIMEOUT,
);
test(
@ -115,7 +113,6 @@ describe("Abilities - Libero", () => {
moveType = Type[Type.FIRE];
expect(leadPokemonType).toBe(moveType);
},
TIMEOUT,
);
test(
@ -138,7 +135,6 @@ describe("Abilities - Libero", () => {
moveType = Type[Type.ICE];
expect(leadPokemonType).toBe(moveType);
},
TIMEOUT,
);
test(
@ -157,7 +153,6 @@ describe("Abilities - Libero", () => {
testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.AIR_SLASH);
},
TIMEOUT,
);
test(
@ -175,7 +170,6 @@ describe("Abilities - Libero", () => {
testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.DIG);
},
TIMEOUT,
);
test(
@ -197,7 +191,6 @@ describe("Abilities - Libero", () => {
expect(enemyPokemon.isFullHp()).toBe(true);
testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.TACKLE);
},
TIMEOUT,
);
test(
@ -216,7 +209,6 @@ describe("Abilities - Libero", () => {
testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.TACKLE);
},
TIMEOUT,
);
test(
@ -235,7 +227,6 @@ describe("Abilities - Libero", () => {
testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.TACKLE);
},
TIMEOUT,
);
test(
@ -254,7 +245,6 @@ describe("Abilities - Libero", () => {
expect(leadPokemon.summonData.abilitiesApplied).not.toContain(Abilities.LIBERO);
},
TIMEOUT,
);
test(
@ -274,7 +264,6 @@ describe("Abilities - Libero", () => {
expect(leadPokemon.summonData.abilitiesApplied).not.toContain(Abilities.LIBERO);
},
TIMEOUT,
);
test(
@ -292,7 +281,6 @@ describe("Abilities - Libero", () => {
expect(leadPokemon.summonData.abilitiesApplied).not.toContain(Abilities.LIBERO);
},
TIMEOUT,
);
test(
@ -310,7 +298,6 @@ describe("Abilities - Libero", () => {
expect(leadPokemon.summonData.abilitiesApplied).not.toContain(Abilities.LIBERO);
},
TIMEOUT,
);
test(
@ -329,7 +316,6 @@ describe("Abilities - Libero", () => {
testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.TRICK_OR_TREAT);
},
TIMEOUT,
);
test(
@ -348,7 +334,6 @@ describe("Abilities - Libero", () => {
testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.CURSE);
expect(leadPokemon.getTag(BattlerTagType.CURSED)).not.toBe(undefined);
},
TIMEOUT,
);
});

View File

@ -11,8 +11,6 @@ import GameManager from "#test/utils/gameManager";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
const TIMEOUT = 20 * 1000; // 20 sec timeout
describe("Abilities - Magic Guard", () => {
let phaserGame: Phaser.Game;
let game: GameManager;
@ -67,7 +65,7 @@ describe("Abilities - Magic Guard", () => {
*/
expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp());
expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp());
}, TIMEOUT
}
);
it(
@ -91,7 +89,7 @@ describe("Abilities - Magic Guard", () => {
*/
expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp());
expect(getStatusEffectCatchRateMultiplier(leadPokemon.status!.effect)).toBe(1.5);
}, TIMEOUT
}
);
it(
@ -113,7 +111,7 @@ describe("Abilities - Magic Guard", () => {
* - The player Pokemon (that just lost its Magic Guard ability) has taken damage from poison
*/
expect(leadPokemon.hp).toBeLessThan(leadPokemon.getMaxHp());
}, TIMEOUT
}
);
@ -138,7 +136,7 @@ describe("Abilities - Magic Guard", () => {
*/
expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp());
expect(getStatusEffectCatchRateMultiplier(enemyPokemon.status!.effect)).toBe(1.5);
}, TIMEOUT
}
);
it("Magic Guard prevents damage caused by toxic but other non-damaging effects are still applied",
@ -166,7 +164,7 @@ describe("Abilities - Magic Guard", () => {
expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp());
expect(enemyPokemon.status!.turnCount).toBeGreaterThan(toxicStartCounter);
expect(getStatusEffectCatchRateMultiplier(enemyPokemon.status!.effect)).toBe(1.5);
}, TIMEOUT
}
);
@ -191,7 +189,7 @@ describe("Abilities - Magic Guard", () => {
*/
expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp());
expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp());
}, TIMEOUT
}
);
it("Magic Guard does not prevent poison from Toxic Spikes", async () => {
@ -220,7 +218,7 @@ describe("Abilities - Magic Guard", () => {
expect(enemyPokemon.status!.effect).toBe(StatusEffect.POISON);
expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp());
expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp());
}, TIMEOUT
}
);
it("Magic Guard prevents against damage from volatile status effects",
@ -246,7 +244,7 @@ describe("Abilities - Magic Guard", () => {
expect(leadPokemon.hp).toBeLessThan(leadPokemon.getMaxHp());
expect(enemyPokemon.getTag(BattlerTagType.CURSED)).not.toBe(undefined);
expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp());
}, TIMEOUT
}
);
it("Magic Guard prevents crash damage", async () => {
@ -265,7 +263,7 @@ describe("Abilities - Magic Guard", () => {
* - The player Pokemon (with Magic Guard) misses High Jump Kick but does not lose HP as a result
*/
expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp());
}, TIMEOUT
}
);
it("Magic Guard prevents damage from recoil", async () => {
@ -283,7 +281,7 @@ describe("Abilities - Magic Guard", () => {
* - The player Pokemon (with Magic Guard) uses a recoil move but does not lose HP from recoil
*/
expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp());
}, TIMEOUT
}
);
it("Magic Guard does not prevent damage from Struggle's recoil", async () => {
@ -301,7 +299,7 @@ describe("Abilities - Magic Guard", () => {
* - The player Pokemon (with Magic Guard) uses Struggle but does lose HP from Struggle's recoil
*/
expect(leadPokemon.hp).toBeLessThan(leadPokemon.getMaxHp());
}, TIMEOUT
}
);
//This tests different move attributes than the recoil tests above
@ -320,7 +318,7 @@ describe("Abilities - Magic Guard", () => {
* - The player Pokemon (with Magic Guard) uses a move with an HP cost but does not lose HP from using it
*/
expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp());
}, TIMEOUT
}
);
/*
@ -348,7 +346,7 @@ describe("Abilities - Magic Guard", () => {
* - The player Pokemon (with Magic Guard) uses a non-attacking move with an HP cost and thus loses HP from using it
*/
expect(leadPokemon.hp).toBeLessThan(leadPokemon.getMaxHp());
}, TIMEOUT
}
);
it("Magic Guard prevents damage from abilities with PostTurnHurtIfSleepingAbAttr", async () => {
@ -373,7 +371,7 @@ describe("Abilities - Magic Guard", () => {
*/
expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp());
expect(leadPokemon.status!.effect).toBe(StatusEffect.SLEEP);
}, TIMEOUT
}
);
it("Magic Guard prevents damage from abilities with PostFaintContactDamageAbAttr", async () => {
@ -398,7 +396,7 @@ describe("Abilities - Magic Guard", () => {
*/
expect(enemyPokemon.hp).toBe(0);
expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp());
}, TIMEOUT
}
);
it("Magic Guard prevents damage from abilities with PostDefendContactDamageAbAttr", async () => {
@ -422,7 +420,7 @@ describe("Abilities - Magic Guard", () => {
*/
expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp());
expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp());
}, TIMEOUT
}
);
it("Magic Guard prevents damage from abilities with ReverseDrainAbAttr", async () => {
@ -446,7 +444,7 @@ describe("Abilities - Magic Guard", () => {
*/
expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp());
expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp());
}, TIMEOUT
}
);
it("Magic Guard prevents HP loss from abilities with PostWeatherLapseDamageAbAttr", async () => {
@ -464,6 +462,6 @@ describe("Abilities - Magic Guard", () => {
* - The player Pokemon (with Magic Guard) should not lose HP due to this ability attribute
*/
expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp());
}, TIMEOUT
}
);
});

View File

@ -10,7 +10,7 @@ import GameManager from "#test/utils/gameManager";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
const TIMEOUT = 20 * 1000;
describe("Abilities - Parental Bond", () => {
let phaserGame: Phaser.Game;
@ -62,7 +62,7 @@ describe("Abilities - Parental Bond", () => {
expect(leadPokemon.turnData.hitCount).toBe(2);
expect(secondStrikeDamage).toBe(toDmgValue(0.25 * firstStrikeDamage));
}, TIMEOUT
}
);
it(
@ -81,7 +81,7 @@ describe("Abilities - Parental Bond", () => {
expect(leadPokemon.turnData.hitCount).toBe(2);
expect(leadPokemon.getStatStage(Stat.ATK)).toBe(2);
}, TIMEOUT
}
);
it(
@ -98,7 +98,7 @@ describe("Abilities - Parental Bond", () => {
await game.phaseInterceptor.to("BerryPhase", false);
expect(enemyPokemon.getStatStage(Stat.ATK)).toBe(-1);
}, TIMEOUT
}
);
it(
@ -116,7 +116,7 @@ describe("Abilities - Parental Bond", () => {
await game.phaseInterceptor.to("BerryPhase", false);
expect(leadPokemon.turnData.hitCount).toBe(2);
}, TIMEOUT
}
);
it(
@ -133,7 +133,7 @@ describe("Abilities - Parental Bond", () => {
await game.phaseInterceptor.to("DamagePhase", false);
expect(leadPokemon.turnData.hitCount).toBe(1);
}, TIMEOUT
}
);
it(
@ -151,7 +151,7 @@ describe("Abilities - Parental Bond", () => {
await game.phaseInterceptor.to("DamagePhase", false);
expect(leadPokemon.turnData.hitCount).toBe(1);
}, TIMEOUT
}
);
it(
@ -167,7 +167,7 @@ describe("Abilities - Parental Bond", () => {
await game.phaseInterceptor.to("BerryPhase", false);
expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp() - 80);
}, TIMEOUT
}
);
it(
@ -189,7 +189,7 @@ describe("Abilities - Parental Bond", () => {
await game.phaseInterceptor.to("BerryPhase", false);
expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp() - 4 * playerDamage);
}, TIMEOUT
}
);
it(
@ -209,7 +209,7 @@ describe("Abilities - Parental Bond", () => {
await game.phaseInterceptor.to("BerryPhase", false);
playerPokemon.forEach(p => expect(p.turnData.hitCount).toBe(1));
}, TIMEOUT
}
);
it(
@ -225,7 +225,7 @@ describe("Abilities - Parental Bond", () => {
await game.phaseInterceptor.to("DamagePhase", false);
expect(leadPokemon.turnData.hitCount).toBe(2);
}, TIMEOUT
}
);
it(
@ -247,7 +247,7 @@ describe("Abilities - Parental Bond", () => {
await game.phaseInterceptor.to("BerryPhase", false);
expect(leadPokemon.hp).toBe(Math.ceil(leadPokemon.getMaxHp() / 2));
}, TIMEOUT
}
);
it(
@ -271,7 +271,7 @@ describe("Abilities - Parental Bond", () => {
await game.phaseInterceptor.to("BerryPhase", false);
expect(leadPokemon.isOfType(Type.FIRE)).toBe(false);
}, TIMEOUT
}
);
it(
@ -289,7 +289,7 @@ describe("Abilities - Parental Bond", () => {
await game.phaseInterceptor.to("DamagePhase");
expect(leadPokemon.turnData.hitCount).toBe(4);
}, TIMEOUT
}
);
it(
@ -313,7 +313,7 @@ describe("Abilities - Parental Bond", () => {
await game.phaseInterceptor.to("MoveEndPhase", false);
expect(enemyPokemon.hp).toBe(Math.ceil(enemyPokemon.getMaxHp() * 0.25));
}, TIMEOUT
}
);
it(
@ -339,7 +339,7 @@ describe("Abilities - Parental Bond", () => {
await game.phaseInterceptor.to("MoveEndPhase", false);
expect(enemyPokemon.hp).toBe(enemyStartingHp - 200);
}, TIMEOUT
}
);
it(
@ -362,7 +362,7 @@ describe("Abilities - Parental Bond", () => {
await game.phaseInterceptor.to("TurnEndPhase");
expect(leadPokemon.getTag(BattlerTagType.RECHARGING)).toBeDefined();
}, TIMEOUT
}
);
it(
@ -389,7 +389,7 @@ describe("Abilities - Parental Bond", () => {
await game.phaseInterceptor.to("TurnEndPhase");
expect(enemyPokemon.getTag(BattlerTagType.TRAPPED)).toBeDefined();
}, TIMEOUT
}
);
it(
@ -413,7 +413,7 @@ describe("Abilities - Parental Bond", () => {
await game.phaseInterceptor.to("TurnEndPhase");
expect(enemyPokemon.getTag(BattlerTagType.IGNORE_FLYING)).toBeDefined();
}, TIMEOUT
}
);
it(
@ -433,7 +433,7 @@ describe("Abilities - Parental Bond", () => {
// This will cause this test to time out if the switch was forced on the first hit.
await game.phaseInterceptor.to("MoveEffectPhase", false);
}, TIMEOUT
}
);
it(
@ -457,7 +457,7 @@ describe("Abilities - Parental Bond", () => {
await game.phaseInterceptor.to("BerryPhase", false);
expect(enemyPokemon.status?.effect).toBeUndefined();
}, TIMEOUT
}
);
it(
@ -475,7 +475,7 @@ describe("Abilities - Parental Bond", () => {
await game.phaseInterceptor.to("BerryPhase", false);
expect(leadPokemon.getStatStage(Stat.ATK)).toBe(-1);
}, TIMEOUT
}
);
it(
@ -493,7 +493,7 @@ describe("Abilities - Parental Bond", () => {
await game.phaseInterceptor.to("BerryPhase", false);
expect(enemyPokemon.getStatStage(Stat.SPATK)).toBe(1);
}, TIMEOUT
}
);
it(
@ -519,6 +519,6 @@ describe("Abilities - Parental Bond", () => {
await game.phaseInterceptor.to("BerryPhase", false);
enemyPokemon.forEach((p, i) => expect(enemyStartingHp[i] - p.hp).toBe(2 * enemyFirstHitDamage[i]));
}, TIMEOUT
}
);
});

View File

@ -7,7 +7,7 @@ import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest";
const TIMEOUT = 20 * 1000;
describe("Abilities - POWER CONSTRUCT", () => {
let phaserGame: Phaser.Game;
@ -60,6 +60,5 @@ describe("Abilities - POWER CONSTRUCT", () => {
expect(zygarde!.formIndex).toBe(baseForm);
},
TIMEOUT
);
});

View File

@ -12,7 +12,7 @@ import GameManager from "#test/utils/gameManager";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest";
const TIMEOUT = 20 * 1000;
describe("Abilities - Protean", () => {
let phaserGame: Phaser.Game;
@ -52,7 +52,6 @@ describe("Abilities - Protean", () => {
testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.SPLASH);
},
TIMEOUT,
);
test.skip(
@ -92,7 +91,6 @@ describe("Abilities - Protean", () => {
testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.SPLASH);
},
TIMEOUT,
);
test(
@ -115,7 +113,6 @@ describe("Abilities - Protean", () => {
moveType = Type[Type.FIRE];
expect(leadPokemonType).toBe(moveType);
},
TIMEOUT,
);
test(
@ -138,7 +135,6 @@ describe("Abilities - Protean", () => {
moveType = Type[Type.ICE];
expect(leadPokemonType).toBe(moveType);
},
TIMEOUT,
);
test(
@ -157,7 +153,6 @@ describe("Abilities - Protean", () => {
testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.AIR_SLASH);
},
TIMEOUT,
);
test(
@ -175,7 +170,6 @@ describe("Abilities - Protean", () => {
testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.DIG);
},
TIMEOUT,
);
test(
@ -197,7 +191,6 @@ describe("Abilities - Protean", () => {
expect(enemyPokemon.isFullHp()).toBe(true);
testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.TACKLE);
},
TIMEOUT,
);
test(
@ -216,7 +209,6 @@ describe("Abilities - Protean", () => {
testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.TACKLE);
},
TIMEOUT,
);
test(
@ -235,7 +227,6 @@ describe("Abilities - Protean", () => {
testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.TACKLE);
},
TIMEOUT,
);
test(
@ -254,7 +245,6 @@ describe("Abilities - Protean", () => {
expect(leadPokemon.summonData.abilitiesApplied).not.toContain(Abilities.PROTEAN);
},
TIMEOUT,
);
test(
@ -274,7 +264,6 @@ describe("Abilities - Protean", () => {
expect(leadPokemon.summonData.abilitiesApplied).not.toContain(Abilities.PROTEAN);
},
TIMEOUT,
);
test(
@ -292,7 +281,6 @@ describe("Abilities - Protean", () => {
expect(leadPokemon.summonData.abilitiesApplied).not.toContain(Abilities.PROTEAN);
},
TIMEOUT,
);
test(
@ -310,7 +298,6 @@ describe("Abilities - Protean", () => {
expect(leadPokemon.summonData.abilitiesApplied).not.toContain(Abilities.PROTEAN);
},
TIMEOUT,
);
test(
@ -329,7 +316,6 @@ describe("Abilities - Protean", () => {
testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.TRICK_OR_TREAT);
},
TIMEOUT,
);
test(
@ -348,7 +334,6 @@ describe("Abilities - Protean", () => {
testPokemonTypeMatchesDefaultMoveType(leadPokemon, Moves.CURSE);
expect(leadPokemon.getTag(BattlerTagType.CURSED)).not.toBe(undefined);
},
TIMEOUT,
);
});

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