Merge branch 'beta' into hebrew-pr
@ -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);
|
||||
});
|
||||
});
|
||||
`;
|
||||
|
||||
|
BIN
public/audio/bgm/battle_star_admin.mp3
Normal file
BIN
public/audio/bgm/battle_star_boss.mp3
Normal file
BIN
public/audio/bgm/battle_star_grunt.mp3
Normal file
19
public/images/pokemon/966-caph-starmobile.json
Normal 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"
|
||||
}
|
||||
}
|
BIN
public/images/pokemon/966-caph-starmobile.png
Normal file
After Width: | Height: | Size: 2.6 KiB |
19
public/images/pokemon/966-navi-starmobile.json
Normal 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"
|
||||
}
|
||||
}
|
BIN
public/images/pokemon/966-navi-starmobile.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
19
public/images/pokemon/966-ruchbah-starmobile.json
Normal 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"
|
||||
}
|
||||
}
|
BIN
public/images/pokemon/966-ruchbah-starmobile.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
19
public/images/pokemon/966-schedar-starmobile.json
Normal 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"
|
||||
}
|
||||
}
|
BIN
public/images/pokemon/966-schedar-starmobile.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
19
public/images/pokemon/966-segin-starmobile.json
Normal 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"
|
||||
}
|
||||
}
|
BIN
public/images/pokemon/966-segin-starmobile.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
41
public/images/pokemon/back/966-caph-starmobile.json
Normal 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$"
|
||||
}
|
||||
}
|
BIN
public/images/pokemon/back/966-caph-starmobile.png
Normal file
After Width: | Height: | Size: 1009 B |
41
public/images/pokemon/back/966-navi-starmobile.json
Normal 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$"
|
||||
}
|
||||
}
|
BIN
public/images/pokemon/back/966-navi-starmobile.png
Normal file
After Width: | Height: | Size: 1009 B |
41
public/images/pokemon/back/966-ruchbah-starmobile.json
Normal 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$"
|
||||
}
|
||||
}
|
BIN
public/images/pokemon/back/966-ruchbah-starmobile.png
Normal file
After Width: | Height: | Size: 1009 B |
41
public/images/pokemon/back/966-schedar-starmobile.json
Normal 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$"
|
||||
}
|
||||
}
|
BIN
public/images/pokemon/back/966-schedar-starmobile.png
Normal file
After Width: | Height: | Size: 1009 B |
41
public/images/pokemon/back/966-segin-starmobile.json
Normal 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$"
|
||||
}
|
||||
}
|
BIN
public/images/pokemon/back/966-segin-starmobile.png
Normal file
After Width: | Height: | Size: 1009 B |
41
public/images/pokemon/back/shiny/966-caph-starmobile.json
Normal 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$"
|
||||
}
|
||||
}
|
BIN
public/images/pokemon/back/shiny/966-caph-starmobile.png
Normal file
After Width: | Height: | Size: 1010 B |
41
public/images/pokemon/back/shiny/966-navi-starmobile.json
Normal 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$"
|
||||
}
|
||||
}
|
BIN
public/images/pokemon/back/shiny/966-navi-starmobile.png
Normal file
After Width: | Height: | Size: 1010 B |
41
public/images/pokemon/back/shiny/966-ruchbah-starmobile.json
Normal 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$"
|
||||
}
|
||||
}
|
BIN
public/images/pokemon/back/shiny/966-ruchbah-starmobile.png
Normal file
After Width: | Height: | Size: 1010 B |
41
public/images/pokemon/back/shiny/966-schedar-starmobile.json
Normal 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$"
|
||||
}
|
||||
}
|
BIN
public/images/pokemon/back/shiny/966-schedar-starmobile.png
Normal file
After Width: | Height: | Size: 1010 B |
41
public/images/pokemon/back/shiny/966-segin-starmobile.json
Normal 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$"
|
||||
}
|
||||
}
|
BIN
public/images/pokemon/back/shiny/966-segin-starmobile.png
Normal file
After Width: | Height: | Size: 1010 B |
BIN
public/images/pokemon/icons/9/966-caph-starmobile.png
Normal file
After Width: | Height: | Size: 473 B |
BIN
public/images/pokemon/icons/9/966-navi-starmobile.png
Normal file
After Width: | Height: | Size: 473 B |
BIN
public/images/pokemon/icons/9/966-ruchbah-starmobile.png
Normal file
After Width: | Height: | Size: 473 B |
BIN
public/images/pokemon/icons/9/966-schedar-starmobile.png
Normal file
After Width: | Height: | Size: 473 B |
BIN
public/images/pokemon/icons/9/966-segin-starmobile.png
Normal file
After Width: | Height: | Size: 473 B |
BIN
public/images/pokemon/icons/9/966s-caph-starmobile.png
Normal file
After Width: | Height: | Size: 478 B |
BIN
public/images/pokemon/icons/9/966s-navi-starmobile.png
Normal file
After Width: | Height: | Size: 478 B |
BIN
public/images/pokemon/icons/9/966s-ruchbah-starmobile.png
Normal file
After Width: | Height: | Size: 478 B |
BIN
public/images/pokemon/icons/9/966s-schedar-starmobile.png
Normal file
After Width: | Height: | Size: 478 B |
BIN
public/images/pokemon/icons/9/966s-segin-starmobile.png
Normal file
After Width: | Height: | Size: 478 B |
19
public/images/pokemon/shiny/966-caph-starmobile.json
Normal 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"
|
||||
}
|
||||
}
|
BIN
public/images/pokemon/shiny/966-caph-starmobile.png
Normal file
After Width: | Height: | Size: 2.6 KiB |
19
public/images/pokemon/shiny/966-navi-starmobile.json
Normal 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"
|
||||
}
|
||||
}
|
BIN
public/images/pokemon/shiny/966-navi-starmobile.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
19
public/images/pokemon/shiny/966-ruchbah-starmobile.json
Normal 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"
|
||||
}
|
||||
}
|
BIN
public/images/pokemon/shiny/966-ruchbah-starmobile.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
19
public/images/pokemon/shiny/966-schedar-starmobile.json
Normal 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"
|
||||
}
|
||||
}
|
BIN
public/images/pokemon/shiny/966-schedar-starmobile.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
19
public/images/pokemon/shiny/966-segin-starmobile.json
Normal 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"
|
||||
}
|
||||
}
|
BIN
public/images/pokemon/shiny/966-segin-starmobile.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 54 KiB |
41
public/images/trainer/atticus.json
Normal 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$"
|
||||
}
|
||||
}
|
BIN
public/images/trainer/atticus.png
Normal file
After Width: | Height: | Size: 741 B |
41
public/images/trainer/eri.json
Normal 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$"
|
||||
}
|
||||
}
|
BIN
public/images/trainer/eri.png
Normal file
After Width: | Height: | Size: 946 B |
41
public/images/trainer/giacomo.json
Normal 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$"
|
||||
}
|
||||
}
|
BIN
public/images/trainer/giacomo.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
41
public/images/trainer/mela.json
Normal 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$"
|
||||
}
|
||||
}
|
BIN
public/images/trainer/mela.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
41
public/images/trainer/ortega.json
Normal 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$"
|
||||
}
|
||||
}
|
BIN
public/images/trainer/ortega.png
Normal file
After Width: | Height: | Size: 937 B |
41
public/images/trainer/penny.json
Normal 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$"
|
||||
}
|
||||
}
|
BIN
public/images/trainer/penny.png
Normal file
After Width: | Height: | Size: 955 B |
41
public/images/trainer/star_grunt_f.json
Normal 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$"
|
||||
}
|
||||
}
|
BIN
public/images/trainer/star_grunt_f.png
Normal file
After Width: | Height: | Size: 756 B |
41
public/images/trainer/star_grunt_m.json
Normal 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$"
|
||||
}
|
||||
}
|
BIN
public/images/trainer/star_grunt_m.png
Normal file
After Width: | Height: | Size: 803 B |
@ -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
|
||||
|
@ -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 ])),
|
||||
|
@ -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;
|
||||
|
@ -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: [
|
||||
|
@ -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 ],
|
||||
|
@ -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++) {
|
||||
|
@ -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
|
||||
|
@ -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 ],
|
||||
|
@ -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,
|
||||
|
@ -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))
|
||||
};
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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));
|
||||
|
@ -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",
|
||||
|
@ -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!",
|
||||
|
@ -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"
|
||||
}
|
||||
|
@ -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",
|
||||
|
@ -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'"
|
||||
}
|
||||
|
@ -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
|
||||
);
|
||||
});
|
||||
|
@ -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,
|
||||
);
|
||||
});
|
||||
|
@ -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);
|
||||
});
|
||||
});
|
||||
|
@ -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);
|
||||
});
|
||||
});
|
||||
|
@ -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);
|
||||
});
|
||||
});
|
||||
|
@ -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);
|
||||
});
|
||||
});
|
||||
|
@ -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,
|
||||
);
|
||||
});
|
||||
|
||||
|
@ -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
|
||||
}
|
||||
);
|
||||
});
|
||||
|
@ -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
|
||||
}
|
||||
);
|
||||
});
|
||||
|
@ -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
|
||||
);
|
||||
});
|
||||
|
@ -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,
|
||||
);
|
||||
});
|
||||
|
||||
|