mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-08-19 13:59:27 +02:00
Compare commits
5 Commits
04892b83b2
...
9eca275efb
Author | SHA1 | Date | |
---|---|---|---|
|
9eca275efb | ||
|
a97fcab678 | ||
|
0da37a0f0c | ||
|
81a4e98a11 | ||
|
b2454234f6 |
@ -1,13 +1,24 @@
|
||||
import type { Pokemon } from "#field/pokemon";
|
||||
import type {
|
||||
AttackMove,
|
||||
ChargingAttackMove,
|
||||
ChargingSelfStatusMove,
|
||||
Move,
|
||||
MoveAttr,
|
||||
MoveAttrConstructorMap,
|
||||
SelfStatusMove,
|
||||
StatusMove,
|
||||
} from "#moves/move";
|
||||
|
||||
/**
|
||||
* A generic function producing a message during a Move's execution.
|
||||
* @param user - The {@linkcode Pokemon} using the move
|
||||
* @param target - The {@linkcode Pokemon} targeted by the move
|
||||
* @param move - The {@linkcode Move} being used
|
||||
* @returns a string
|
||||
*/
|
||||
export type MoveMessageFunc = (user: Pokemon, target: Pokemon, move: Move) => string;
|
||||
|
||||
export type MoveAttrFilter = (attr: MoveAttr) => boolean;
|
||||
|
||||
export type * from "#moves/move";
|
||||
|
@ -1670,6 +1670,7 @@ export class MoveTypeChangeAbAttr extends PreAttackAbAttr {
|
||||
constructor(
|
||||
private newType: PokemonType,
|
||||
private powerMultiplier: number,
|
||||
// TODO: all moves with this attr solely check the move being used...
|
||||
private condition?: PokemonAttackCondition,
|
||||
) {
|
||||
super(false);
|
||||
|
@ -85,20 +85,16 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
||||
},
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:breeder_female.encounter.1",
|
||||
"dialogue:breeder_female.encounter.2",
|
||||
"dialogue:breeder_female.encounter.3",
|
||||
"dialogue:breederFemale.encounter.1",
|
||||
"dialogue:breederFemale.encounter.2",
|
||||
"dialogue:breederFemale.encounter.3",
|
||||
],
|
||||
victory: [
|
||||
"dialogue:breeder_female.victory.1",
|
||||
"dialogue:breeder_female.victory.2",
|
||||
"dialogue:breeder_female.victory.3",
|
||||
],
|
||||
defeat: [
|
||||
"dialogue:breeder_female.defeat.1",
|
||||
"dialogue:breeder_female.defeat.2",
|
||||
"dialogue:breeder_female.defeat.3",
|
||||
"dialogue:breederFemale.victory.1",
|
||||
"dialogue:breederFemale.victory.2",
|
||||
"dialogue:breederFemale.victory.3",
|
||||
],
|
||||
defeat: ["dialogue:breederFemale.defeat.1", "dialogue:breederFemale.defeat.2", "dialogue:breederFemale.defeat.3"],
|
||||
},
|
||||
],
|
||||
[TrainerType.FISHERMAN]: [
|
||||
@ -108,14 +104,14 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
||||
},
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:fisherman_female.encounter.1",
|
||||
"dialogue:fisherman_female.encounter.2",
|
||||
"dialogue:fisherman_female.encounter.3",
|
||||
"dialogue:fishermanFemale.encounter.1",
|
||||
"dialogue:fishermanFemale.encounter.2",
|
||||
"dialogue:fishermanFemale.encounter.3",
|
||||
],
|
||||
victory: [
|
||||
"dialogue:fisherman_female.victory.1",
|
||||
"dialogue:fisherman_female.victory.2",
|
||||
"dialogue:fisherman_female.victory.3",
|
||||
"dialogue:fishermanFemale.victory.1",
|
||||
"dialogue:fishermanFemale.victory.2",
|
||||
"dialogue:fishermanFemale.victory.3",
|
||||
],
|
||||
},
|
||||
],
|
||||
@ -144,29 +140,29 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
||||
[TrainerType.ACE_TRAINER]: [
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:ace_trainer.encounter.1",
|
||||
"dialogue:ace_trainer.encounter.2",
|
||||
"dialogue:ace_trainer.encounter.3",
|
||||
"dialogue:ace_trainer.encounter.4",
|
||||
"dialogue:aceTrainer.encounter.1",
|
||||
"dialogue:aceTrainer.encounter.2",
|
||||
"dialogue:aceTrainer.encounter.3",
|
||||
"dialogue:aceTrainer.encounter.4",
|
||||
],
|
||||
victory: [
|
||||
"dialogue:ace_trainer.victory.1",
|
||||
"dialogue:ace_trainer.victory.2",
|
||||
"dialogue:ace_trainer.victory.3",
|
||||
"dialogue:ace_trainer.victory.4",
|
||||
"dialogue:aceTrainer.victory.1",
|
||||
"dialogue:aceTrainer.victory.2",
|
||||
"dialogue:aceTrainer.victory.3",
|
||||
"dialogue:aceTrainer.victory.4",
|
||||
],
|
||||
defeat: [
|
||||
"dialogue:ace_trainer.defeat.1",
|
||||
"dialogue:ace_trainer.defeat.2",
|
||||
"dialogue:ace_trainer.defeat.3",
|
||||
"dialogue:ace_trainer.defeat.4",
|
||||
"dialogue:aceTrainer.defeat.1",
|
||||
"dialogue:aceTrainer.defeat.2",
|
||||
"dialogue:aceTrainer.defeat.3",
|
||||
"dialogue:aceTrainer.defeat.4",
|
||||
],
|
||||
},
|
||||
],
|
||||
[TrainerType.PARASOL_LADY]: [
|
||||
{
|
||||
encounter: ["dialogue:parasol_lady.encounter.1"],
|
||||
victory: ["dialogue:parasol_lady.victory.1"],
|
||||
encounter: ["dialogue:parasolLady.encounter.1"],
|
||||
victory: ["dialogue:parasolLady.victory.1"],
|
||||
},
|
||||
],
|
||||
[TrainerType.TWINS]: [
|
||||
@ -184,13 +180,13 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
||||
],
|
||||
[TrainerType.BLACK_BELT]: [
|
||||
{
|
||||
encounter: ["dialogue:black_belt.encounter.1", "dialogue:black_belt.encounter.2"],
|
||||
victory: ["dialogue:black_belt.victory.1", "dialogue:black_belt.victory.2"],
|
||||
encounter: ["dialogue:blackBelt.encounter.1", "dialogue:blackBelt.encounter.2"],
|
||||
victory: ["dialogue:blackBelt.victory.1", "dialogue:blackBelt.victory.2"],
|
||||
},
|
||||
//BATTLE GIRL
|
||||
{
|
||||
encounter: ["dialogue:battle_girl.encounter.1"],
|
||||
victory: ["dialogue:battle_girl.victory.1"],
|
||||
encounter: ["dialogue:battleGirl.encounter.1"],
|
||||
victory: ["dialogue:battleGirl.victory.1"],
|
||||
},
|
||||
],
|
||||
[TrainerType.HIKER]: [
|
||||
@ -214,8 +210,8 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
||||
],
|
||||
[TrainerType.SCHOOL_KID]: [
|
||||
{
|
||||
encounter: ["dialogue:school_kid.encounter.1", "dialogue:school_kid.encounter.2"],
|
||||
victory: ["dialogue:school_kid.victory.1", "dialogue:school_kid.victory.2"],
|
||||
encounter: ["dialogue:schoolKid.encounter.1", "dialogue:schoolKid.encounter.2"],
|
||||
victory: ["dialogue:schoolKid.victory.1", "dialogue:schoolKid.victory.2"],
|
||||
},
|
||||
],
|
||||
[TrainerType.ARTIST]: [
|
||||
@ -236,31 +232,31 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
||||
victory: ["dialogue:worker.victory.1"],
|
||||
},
|
||||
{
|
||||
encounter: ["dialogue:worker_female.encounter.1"],
|
||||
victory: ["dialogue:worker_female.victory.1"],
|
||||
defeat: ["dialogue:worker_female.defeat.1"],
|
||||
encounter: ["dialogue:workerFemale.encounter.1"],
|
||||
victory: ["dialogue:workerFemale.victory.1"],
|
||||
defeat: ["dialogue:workerFemale.defeat.1"],
|
||||
},
|
||||
{
|
||||
encounter: ["dialogue:worker_double.encounter.1"],
|
||||
victory: ["dialogue:worker_double.victory.1"],
|
||||
encounter: ["dialogue:workerDouble.encounter.1"],
|
||||
victory: ["dialogue:workerDouble.victory.1"],
|
||||
},
|
||||
],
|
||||
// Defeat dialogue in the language .JSONS exist as translated or placeholders; (en, fr, it, es, de, ja, ko, zh_cn, zh_tw, pt_br)
|
||||
[TrainerType.SNOW_WORKER]: [
|
||||
{
|
||||
encounter: ["dialogue:snow_worker.encounter.1"],
|
||||
victory: ["dialogue:snow_worker.victory.1"],
|
||||
encounter: ["dialogue:snowWorker.encounter.1"],
|
||||
victory: ["dialogue:snowWorker.victory.1"],
|
||||
},
|
||||
{
|
||||
encounter: ["dialogue:snow_worker_double.encounter.1"],
|
||||
victory: ["dialogue:snow_worker_double.victory.1"],
|
||||
encounter: ["dialogue:snowWorkerDouble.encounter.1"],
|
||||
victory: ["dialogue:snowWorkerDouble.victory.1"],
|
||||
},
|
||||
],
|
||||
[TrainerType.HEX_MANIAC]: [
|
||||
{
|
||||
encounter: ["dialogue:hex_maniac.encounter.1", "dialogue:hex_maniac.encounter.2"],
|
||||
victory: ["dialogue:hex_maniac.victory.1", "dialogue:hex_maniac.victory.2"],
|
||||
defeat: ["dialogue:hex_maniac.defeat.1", "dialogue:hex_maniac.defeat.2"],
|
||||
encounter: ["dialogue:hexManiac.encounter.1", "dialogue:hexManiac.encounter.2"],
|
||||
victory: ["dialogue:hexManiac.victory.1", "dialogue:hexManiac.victory.2"],
|
||||
defeat: ["dialogue:hexManiac.defeat.1", "dialogue:hexManiac.defeat.2"],
|
||||
},
|
||||
],
|
||||
[TrainerType.PSYCHIC]: [
|
||||
@ -320,15 +316,11 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
||||
},
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:clerk_female.encounter.1",
|
||||
"dialogue:clerk_female.encounter.2",
|
||||
"dialogue:clerk_female.encounter.3",
|
||||
],
|
||||
victory: [
|
||||
"dialogue:clerk_female.victory.1",
|
||||
"dialogue:clerk_female.victory.2",
|
||||
"dialogue:clerk_female.victory.3",
|
||||
"dialogue:clerkFemale.encounter.1",
|
||||
"dialogue:clerkFemale.encounter.2",
|
||||
"dialogue:clerkFemale.encounter.3",
|
||||
],
|
||||
victory: ["dialogue:clerkFemale.victory.1", "dialogue:clerkFemale.victory.2", "dialogue:clerkFemale.victory.3"],
|
||||
},
|
||||
],
|
||||
[TrainerType.HOOLIGANS]: [
|
||||
@ -371,14 +363,14 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
||||
},
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:pokefan_female.encounter.1",
|
||||
"dialogue:pokefan_female.encounter.2",
|
||||
"dialogue:pokefan_female.encounter.3",
|
||||
"dialogue:pokefanFemale.encounter.1",
|
||||
"dialogue:pokefanFemale.encounter.2",
|
||||
"dialogue:pokefanFemale.encounter.3",
|
||||
],
|
||||
victory: [
|
||||
"dialogue:pokefan_female.victory.1",
|
||||
"dialogue:pokefan_female.victory.2",
|
||||
"dialogue:pokefan_female.victory.3",
|
||||
"dialogue:pokefanFemale.victory.1",
|
||||
"dialogue:pokefanFemale.victory.2",
|
||||
"dialogue:pokefanFemale.victory.3",
|
||||
],
|
||||
},
|
||||
],
|
||||
@ -389,52 +381,52 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
||||
},
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:rich_female.encounter.1",
|
||||
"dialogue:rich_female.encounter.2",
|
||||
"dialogue:rich_female.encounter.3",
|
||||
"dialogue:richFemale.encounter.1",
|
||||
"dialogue:richFemale.encounter.2",
|
||||
"dialogue:richFemale.encounter.3",
|
||||
],
|
||||
victory: ["dialogue:rich_female.victory.1", "dialogue:rich_female.victory.2", "dialogue:rich_female.victory.3"],
|
||||
victory: ["dialogue:richFemale.victory.1", "dialogue:richFemale.victory.2", "dialogue:richFemale.victory.3"],
|
||||
},
|
||||
],
|
||||
[TrainerType.RICH_KID]: [
|
||||
{
|
||||
encounter: ["dialogue:rich_kid.encounter.1", "dialogue:rich_kid.encounter.2", "dialogue:rich_kid.encounter.3"],
|
||||
encounter: ["dialogue:richKid.encounter.1", "dialogue:richKid.encounter.2", "dialogue:richKid.encounter.3"],
|
||||
victory: [
|
||||
"dialogue:rich_kid.victory.1",
|
||||
"dialogue:rich_kid.victory.2",
|
||||
"dialogue:rich_kid.victory.3",
|
||||
"dialogue:rich_kid.victory.4",
|
||||
"dialogue:richKid.victory.1",
|
||||
"dialogue:richKid.victory.2",
|
||||
"dialogue:richKid.victory.3",
|
||||
"dialogue:richKid.victory.4",
|
||||
],
|
||||
},
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:rich_kid_female.encounter.1",
|
||||
"dialogue:rich_kid_female.encounter.2",
|
||||
"dialogue:rich_kid_female.encounter.3",
|
||||
"dialogue:richKidFemale.encounter.1",
|
||||
"dialogue:richKidFemale.encounter.2",
|
||||
"dialogue:richKidFemale.encounter.3",
|
||||
],
|
||||
victory: [
|
||||
"dialogue:rich_kid_female.victory.1",
|
||||
"dialogue:rich_kid_female.victory.2",
|
||||
"dialogue:rich_kid_female.victory.3",
|
||||
"dialogue:rich_kid_female.victory.4",
|
||||
"dialogue:richKidFemale.victory.1",
|
||||
"dialogue:richKidFemale.victory.2",
|
||||
"dialogue:richKidFemale.victory.3",
|
||||
"dialogue:richKidFemale.victory.4",
|
||||
],
|
||||
},
|
||||
],
|
||||
[TrainerType.ROCKET_GRUNT]: [
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:rocket_grunt.encounter.1",
|
||||
"dialogue:rocket_grunt.encounter.2",
|
||||
"dialogue:rocket_grunt.encounter.3",
|
||||
"dialogue:rocket_grunt.encounter.4",
|
||||
"dialogue:rocket_grunt.encounter.5",
|
||||
"dialogue:rocketGrunt.encounter.1",
|
||||
"dialogue:rocketGrunt.encounter.2",
|
||||
"dialogue:rocketGrunt.encounter.3",
|
||||
"dialogue:rocketGrunt.encounter.4",
|
||||
"dialogue:rocketGrunt.encounter.5",
|
||||
],
|
||||
victory: [
|
||||
"dialogue:rocket_grunt.victory.1",
|
||||
"dialogue:rocket_grunt.victory.2",
|
||||
"dialogue:rocket_grunt.victory.3",
|
||||
"dialogue:rocket_grunt.victory.4",
|
||||
"dialogue:rocket_grunt.victory.5",
|
||||
"dialogue:rocketGrunt.victory.1",
|
||||
"dialogue:rocketGrunt.victory.2",
|
||||
"dialogue:rocketGrunt.victory.3",
|
||||
"dialogue:rocketGrunt.victory.4",
|
||||
"dialogue:rocketGrunt.victory.5",
|
||||
],
|
||||
},
|
||||
],
|
||||
@ -465,18 +457,18 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
||||
[TrainerType.MAGMA_GRUNT]: [
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:magma_grunt.encounter.1",
|
||||
"dialogue:magma_grunt.encounter.2",
|
||||
"dialogue:magma_grunt.encounter.3",
|
||||
"dialogue:magma_grunt.encounter.4",
|
||||
"dialogue:magma_grunt.encounter.5",
|
||||
"dialogue:magmaGrunt.encounter.1",
|
||||
"dialogue:magmaGrunt.encounter.2",
|
||||
"dialogue:magmaGrunt.encounter.3",
|
||||
"dialogue:magmaGrunt.encounter.4",
|
||||
"dialogue:magmaGrunt.encounter.5",
|
||||
],
|
||||
victory: [
|
||||
"dialogue:magma_grunt.victory.1",
|
||||
"dialogue:magma_grunt.victory.2",
|
||||
"dialogue:magma_grunt.victory.3",
|
||||
"dialogue:magma_grunt.victory.4",
|
||||
"dialogue:magma_grunt.victory.5",
|
||||
"dialogue:magmaGrunt.victory.1",
|
||||
"dialogue:magmaGrunt.victory.2",
|
||||
"dialogue:magmaGrunt.victory.3",
|
||||
"dialogue:magmaGrunt.victory.4",
|
||||
"dialogue:magmaGrunt.victory.5",
|
||||
],
|
||||
},
|
||||
],
|
||||
@ -495,18 +487,18 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
||||
[TrainerType.AQUA_GRUNT]: [
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:aqua_grunt.encounter.1",
|
||||
"dialogue:aqua_grunt.encounter.2",
|
||||
"dialogue:aqua_grunt.encounter.3",
|
||||
"dialogue:aqua_grunt.encounter.4",
|
||||
"dialogue:aqua_grunt.encounter.5",
|
||||
"dialogue:aquaGrunt.encounter.1",
|
||||
"dialogue:aquaGrunt.encounter.2",
|
||||
"dialogue:aquaGrunt.encounter.3",
|
||||
"dialogue:aquaGrunt.encounter.4",
|
||||
"dialogue:aquaGrunt.encounter.5",
|
||||
],
|
||||
victory: [
|
||||
"dialogue:aqua_grunt.victory.1",
|
||||
"dialogue:aqua_grunt.victory.2",
|
||||
"dialogue:aqua_grunt.victory.3",
|
||||
"dialogue:aqua_grunt.victory.4",
|
||||
"dialogue:aqua_grunt.victory.5",
|
||||
"dialogue:aquaGrunt.victory.1",
|
||||
"dialogue:aquaGrunt.victory.2",
|
||||
"dialogue:aquaGrunt.victory.3",
|
||||
"dialogue:aquaGrunt.victory.4",
|
||||
"dialogue:aquaGrunt.victory.5",
|
||||
],
|
||||
},
|
||||
],
|
||||
@ -525,18 +517,18 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
||||
[TrainerType.GALACTIC_GRUNT]: [
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:galactic_grunt.encounter.1",
|
||||
"dialogue:galactic_grunt.encounter.2",
|
||||
"dialogue:galactic_grunt.encounter.3",
|
||||
"dialogue:galactic_grunt.encounter.4",
|
||||
"dialogue:galactic_grunt.encounter.5",
|
||||
"dialogue:galacticGrunt.encounter.1",
|
||||
"dialogue:galacticGrunt.encounter.2",
|
||||
"dialogue:galacticGrunt.encounter.3",
|
||||
"dialogue:galacticGrunt.encounter.4",
|
||||
"dialogue:galacticGrunt.encounter.5",
|
||||
],
|
||||
victory: [
|
||||
"dialogue:galactic_grunt.victory.1",
|
||||
"dialogue:galactic_grunt.victory.2",
|
||||
"dialogue:galactic_grunt.victory.3",
|
||||
"dialogue:galactic_grunt.victory.4",
|
||||
"dialogue:galactic_grunt.victory.5",
|
||||
"dialogue:galacticGrunt.victory.1",
|
||||
"dialogue:galacticGrunt.victory.2",
|
||||
"dialogue:galacticGrunt.victory.3",
|
||||
"dialogue:galacticGrunt.victory.4",
|
||||
"dialogue:galacticGrunt.victory.5",
|
||||
],
|
||||
},
|
||||
],
|
||||
@ -561,18 +553,18 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
||||
[TrainerType.PLASMA_GRUNT]: [
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:plasma_grunt.encounter.1",
|
||||
"dialogue:plasma_grunt.encounter.2",
|
||||
"dialogue:plasma_grunt.encounter.3",
|
||||
"dialogue:plasma_grunt.encounter.4",
|
||||
"dialogue:plasma_grunt.encounter.5",
|
||||
"dialogue:plasmaGrunt.encounter.1",
|
||||
"dialogue:plasmaGrunt.encounter.2",
|
||||
"dialogue:plasmaGrunt.encounter.3",
|
||||
"dialogue:plasmaGrunt.encounter.4",
|
||||
"dialogue:plasmaGrunt.encounter.5",
|
||||
],
|
||||
victory: [
|
||||
"dialogue:plasma_grunt.victory.1",
|
||||
"dialogue:plasma_grunt.victory.2",
|
||||
"dialogue:plasma_grunt.victory.3",
|
||||
"dialogue:plasma_grunt.victory.4",
|
||||
"dialogue:plasma_grunt.victory.5",
|
||||
"dialogue:plasmaGrunt.victory.1",
|
||||
"dialogue:plasmaGrunt.victory.2",
|
||||
"dialogue:plasmaGrunt.victory.3",
|
||||
"dialogue:plasmaGrunt.victory.4",
|
||||
"dialogue:plasmaGrunt.victory.5",
|
||||
],
|
||||
},
|
||||
],
|
||||
@ -591,18 +583,18 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
||||
[TrainerType.FLARE_GRUNT]: [
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:flare_grunt.encounter.1",
|
||||
"dialogue:flare_grunt.encounter.2",
|
||||
"dialogue:flare_grunt.encounter.3",
|
||||
"dialogue:flare_grunt.encounter.4",
|
||||
"dialogue:flare_grunt.encounter.5",
|
||||
"dialogue:flareGrunt.encounter.1",
|
||||
"dialogue:flareGrunt.encounter.2",
|
||||
"dialogue:flareGrunt.encounter.3",
|
||||
"dialogue:flareGrunt.encounter.4",
|
||||
"dialogue:flareGrunt.encounter.5",
|
||||
],
|
||||
victory: [
|
||||
"dialogue:flare_grunt.victory.1",
|
||||
"dialogue:flare_grunt.victory.2",
|
||||
"dialogue:flare_grunt.victory.3",
|
||||
"dialogue:flare_grunt.victory.4",
|
||||
"dialogue:flare_grunt.victory.5",
|
||||
"dialogue:flareGrunt.victory.1",
|
||||
"dialogue:flareGrunt.victory.2",
|
||||
"dialogue:flareGrunt.victory.3",
|
||||
"dialogue:flareGrunt.victory.4",
|
||||
"dialogue:flareGrunt.victory.5",
|
||||
],
|
||||
},
|
||||
],
|
||||
@ -621,18 +613,18 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
||||
[TrainerType.AETHER_GRUNT]: [
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:aether_grunt.encounter.1",
|
||||
"dialogue:aether_grunt.encounter.2",
|
||||
"dialogue:aether_grunt.encounter.3",
|
||||
"dialogue:aether_grunt.encounter.4",
|
||||
"dialogue:aether_grunt.encounter.5",
|
||||
"dialogue:aetherGrunt.encounter.1",
|
||||
"dialogue:aetherGrunt.encounter.2",
|
||||
"dialogue:aetherGrunt.encounter.3",
|
||||
"dialogue:aetherGrunt.encounter.4",
|
||||
"dialogue:aetherGrunt.encounter.5",
|
||||
],
|
||||
victory: [
|
||||
"dialogue:aether_grunt.victory.1",
|
||||
"dialogue:aether_grunt.victory.2",
|
||||
"dialogue:aether_grunt.victory.3",
|
||||
"dialogue:aether_grunt.victory.4",
|
||||
"dialogue:aether_grunt.victory.5",
|
||||
"dialogue:aetherGrunt.victory.1",
|
||||
"dialogue:aetherGrunt.victory.2",
|
||||
"dialogue:aetherGrunt.victory.3",
|
||||
"dialogue:aetherGrunt.victory.4",
|
||||
"dialogue:aetherGrunt.victory.5",
|
||||
],
|
||||
},
|
||||
],
|
||||
@ -645,18 +637,18 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
||||
[TrainerType.SKULL_GRUNT]: [
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:skull_grunt.encounter.1",
|
||||
"dialogue:skull_grunt.encounter.2",
|
||||
"dialogue:skull_grunt.encounter.3",
|
||||
"dialogue:skull_grunt.encounter.4",
|
||||
"dialogue:skull_grunt.encounter.5",
|
||||
"dialogue:skullGrunt.encounter.1",
|
||||
"dialogue:skullGrunt.encounter.2",
|
||||
"dialogue:skullGrunt.encounter.3",
|
||||
"dialogue:skullGrunt.encounter.4",
|
||||
"dialogue:skullGrunt.encounter.5",
|
||||
],
|
||||
victory: [
|
||||
"dialogue:skull_grunt.victory.1",
|
||||
"dialogue:skull_grunt.victory.2",
|
||||
"dialogue:skull_grunt.victory.3",
|
||||
"dialogue:skull_grunt.victory.4",
|
||||
"dialogue:skull_grunt.victory.5",
|
||||
"dialogue:skullGrunt.victory.1",
|
||||
"dialogue:skullGrunt.victory.2",
|
||||
"dialogue:skullGrunt.victory.3",
|
||||
"dialogue:skullGrunt.victory.4",
|
||||
"dialogue:skullGrunt.victory.5",
|
||||
],
|
||||
},
|
||||
],
|
||||
@ -669,18 +661,18 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
||||
[TrainerType.MACRO_GRUNT]: [
|
||||
{
|
||||
encounter: [
|
||||
"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",
|
||||
"dialogue:macroGrunt.encounter.1",
|
||||
"dialogue:macroGrunt.encounter.2",
|
||||
"dialogue:macroGrunt.encounter.3",
|
||||
"dialogue:macroGrunt.encounter.4",
|
||||
"dialogue:macroGrunt.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",
|
||||
"dialogue:macroGrunt.victory.1",
|
||||
"dialogue:macroGrunt.victory.2",
|
||||
"dialogue:macroGrunt.victory.3",
|
||||
"dialogue:macroGrunt.victory.4",
|
||||
"dialogue:macroGrunt.victory.5",
|
||||
],
|
||||
},
|
||||
],
|
||||
@ -693,18 +685,18 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
||||
[TrainerType.STAR_GRUNT]: [
|
||||
{
|
||||
encounter: [
|
||||
"dialogue:star_grunt.encounter.1",
|
||||
"dialogue:star_grunt.encounter.2",
|
||||
"dialogue:star_grunt.encounter.3",
|
||||
"dialogue:star_grunt.encounter.4",
|
||||
"dialogue:star_grunt.encounter.5",
|
||||
"dialogue:starGrunt.encounter.1",
|
||||
"dialogue:starGrunt.encounter.2",
|
||||
"dialogue:starGrunt.encounter.3",
|
||||
"dialogue:starGrunt.encounter.4",
|
||||
"dialogue:starGrunt.encounter.5",
|
||||
],
|
||||
victory: [
|
||||
"dialogue:star_grunt.victory.1",
|
||||
"dialogue:star_grunt.victory.2",
|
||||
"dialogue:star_grunt.victory.3",
|
||||
"dialogue:star_grunt.victory.4",
|
||||
"dialogue:star_grunt.victory.5",
|
||||
"dialogue:starGrunt.victory.1",
|
||||
"dialogue:starGrunt.victory.2",
|
||||
"dialogue:starGrunt.victory.3",
|
||||
"dialogue:starGrunt.victory.4",
|
||||
"dialogue:starGrunt.victory.5",
|
||||
],
|
||||
},
|
||||
],
|
||||
@ -740,207 +732,207 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
||||
],
|
||||
[TrainerType.ROCKET_BOSS_GIOVANNI_1]: [
|
||||
{
|
||||
encounter: ["dialogue:rocket_boss_giovanni_1.encounter.1"],
|
||||
victory: ["dialogue:rocket_boss_giovanni_1.victory.1"],
|
||||
defeat: ["dialogue:rocket_boss_giovanni_1.defeat.1"],
|
||||
encounter: ["dialogue:rocketBossGiovanni1.encounter.1"],
|
||||
victory: ["dialogue:rocketBossGiovanni1.victory.1"],
|
||||
defeat: ["dialogue:rocketBossGiovanni1.defeat.1"],
|
||||
},
|
||||
],
|
||||
[TrainerType.ROCKET_BOSS_GIOVANNI_2]: [
|
||||
{
|
||||
encounter: ["dialogue:rocket_boss_giovanni_2.encounter.1"],
|
||||
victory: ["dialogue:rocket_boss_giovanni_2.victory.1"],
|
||||
defeat: ["dialogue:rocket_boss_giovanni_2.defeat.1"],
|
||||
encounter: ["dialogue:rocketBossGiovanni2.encounter.1"],
|
||||
victory: ["dialogue:rocketBossGiovanni2.victory.1"],
|
||||
defeat: ["dialogue:rocketBossGiovanni2.defeat.1"],
|
||||
},
|
||||
],
|
||||
[TrainerType.MAXIE]: [
|
||||
{
|
||||
encounter: ["dialogue:magma_boss_maxie_1.encounter.1"],
|
||||
victory: ["dialogue:magma_boss_maxie_1.victory.1"],
|
||||
defeat: ["dialogue:magma_boss_maxie_1.defeat.1"],
|
||||
encounter: ["dialogue:magmaBossMaxie1.encounter.1"],
|
||||
victory: ["dialogue:magmaBossMaxie1.victory.1"],
|
||||
defeat: ["dialogue:magmaBossMaxie1.defeat.1"],
|
||||
},
|
||||
],
|
||||
[TrainerType.MAXIE_2]: [
|
||||
{
|
||||
encounter: ["dialogue:magma_boss_maxie_2.encounter.1"],
|
||||
victory: ["dialogue:magma_boss_maxie_2.victory.1"],
|
||||
defeat: ["dialogue:magma_boss_maxie_2.defeat.1"],
|
||||
encounter: ["dialogue:magmaBossMaxie2.encounter.1"],
|
||||
victory: ["dialogue:magmaBossMaxie2.victory.1"],
|
||||
defeat: ["dialogue:magmaBossMaxie2.defeat.1"],
|
||||
},
|
||||
],
|
||||
[TrainerType.ARCHIE]: [
|
||||
{
|
||||
encounter: ["dialogue:aqua_boss_archie_1.encounter.1"],
|
||||
victory: ["dialogue:aqua_boss_archie_1.victory.1"],
|
||||
defeat: ["dialogue:aqua_boss_archie_1.defeat.1"],
|
||||
encounter: ["dialogue:aquaBossArchie1.encounter.1"],
|
||||
victory: ["dialogue:aquaBossArchie1.victory.1"],
|
||||
defeat: ["dialogue:aquaBossArchie1.defeat.1"],
|
||||
},
|
||||
],
|
||||
[TrainerType.ARCHIE_2]: [
|
||||
{
|
||||
encounter: ["dialogue:aqua_boss_archie_2.encounter.1"],
|
||||
victory: ["dialogue:aqua_boss_archie_2.victory.1"],
|
||||
defeat: ["dialogue:aqua_boss_archie_2.defeat.1"],
|
||||
encounter: ["dialogue:aquaBossArchie2.encounter.1"],
|
||||
victory: ["dialogue:aquaBossArchie2.victory.1"],
|
||||
defeat: ["dialogue:aquaBossArchie2.defeat.1"],
|
||||
},
|
||||
],
|
||||
[TrainerType.CYRUS]: [
|
||||
{
|
||||
encounter: ["dialogue:galactic_boss_cyrus_1.encounter.1"],
|
||||
victory: ["dialogue:galactic_boss_cyrus_1.victory.1"],
|
||||
defeat: ["dialogue:galactic_boss_cyrus_1.defeat.1"],
|
||||
encounter: ["dialogue:galacticBossCyrus1.encounter.1"],
|
||||
victory: ["dialogue:galacticBossCyrus1.victory.1"],
|
||||
defeat: ["dialogue:galacticBossCyrus1.defeat.1"],
|
||||
},
|
||||
],
|
||||
[TrainerType.CYRUS_2]: [
|
||||
{
|
||||
encounter: ["dialogue:galactic_boss_cyrus_2.encounter.1"],
|
||||
victory: ["dialogue:galactic_boss_cyrus_2.victory.1"],
|
||||
defeat: ["dialogue:galactic_boss_cyrus_2.defeat.1"],
|
||||
encounter: ["dialogue:galacticBossCyrus2.encounter.1"],
|
||||
victory: ["dialogue:galacticBossCyrus2.victory.1"],
|
||||
defeat: ["dialogue:galacticBossCyrus2.defeat.1"],
|
||||
},
|
||||
],
|
||||
[TrainerType.GHETSIS]: [
|
||||
{
|
||||
encounter: ["dialogue:plasma_boss_ghetsis_1.encounter.1"],
|
||||
victory: ["dialogue:plasma_boss_ghetsis_1.victory.1"],
|
||||
defeat: ["dialogue:plasma_boss_ghetsis_1.defeat.1"],
|
||||
encounter: ["dialogue:plasmaBossGhetsis1.encounter.1"],
|
||||
victory: ["dialogue:plasmaBossGhetsis1.victory.1"],
|
||||
defeat: ["dialogue:plasmaBossGhetsis1.defeat.1"],
|
||||
},
|
||||
],
|
||||
[TrainerType.GHETSIS_2]: [
|
||||
{
|
||||
encounter: ["dialogue:plasma_boss_ghetsis_2.encounter.1"],
|
||||
victory: ["dialogue:plasma_boss_ghetsis_2.victory.1"],
|
||||
defeat: ["dialogue:plasma_boss_ghetsis_2.defeat.1"],
|
||||
encounter: ["dialogue:plasmaBossGhetsis2.encounter.1"],
|
||||
victory: ["dialogue:plasmaBossGhetsis2.victory.1"],
|
||||
defeat: ["dialogue:plasmaBossGhetsis2.defeat.1"],
|
||||
},
|
||||
],
|
||||
[TrainerType.LYSANDRE]: [
|
||||
{
|
||||
encounter: ["dialogue:flare_boss_lysandre_1.encounter.1"],
|
||||
victory: ["dialogue:flare_boss_lysandre_1.victory.1"],
|
||||
defeat: ["dialogue:flare_boss_lysandre_1.defeat.1"],
|
||||
encounter: ["dialogue:flareBossLysandre1.encounter.1"],
|
||||
victory: ["dialogue:flareBossLysandre1.victory.1"],
|
||||
defeat: ["dialogue:flareBossLysandre1.defeat.1"],
|
||||
},
|
||||
],
|
||||
[TrainerType.LYSANDRE_2]: [
|
||||
{
|
||||
encounter: ["dialogue:flare_boss_lysandre_2.encounter.1"],
|
||||
victory: ["dialogue:flare_boss_lysandre_2.victory.1"],
|
||||
defeat: ["dialogue:flare_boss_lysandre_2.defeat.1"],
|
||||
encounter: ["dialogue:flareBossLysandre2.encounter.1"],
|
||||
victory: ["dialogue:flareBossLysandre2.victory.1"],
|
||||
defeat: ["dialogue:flareBossLysandre2.defeat.1"],
|
||||
},
|
||||
],
|
||||
[TrainerType.LUSAMINE]: [
|
||||
{
|
||||
encounter: ["dialogue:aether_boss_lusamine_1.encounter.1"],
|
||||
victory: ["dialogue:aether_boss_lusamine_1.victory.1"],
|
||||
defeat: ["dialogue:aether_boss_lusamine_1.defeat.1"],
|
||||
encounter: ["dialogue:aetherBossLusamine1.encounter.1"],
|
||||
victory: ["dialogue:aetherBossLusamine1.victory.1"],
|
||||
defeat: ["dialogue:aetherBossLusamine1.defeat.1"],
|
||||
},
|
||||
],
|
||||
[TrainerType.LUSAMINE_2]: [
|
||||
{
|
||||
encounter: ["dialogue:aether_boss_lusamine_2.encounter.1"],
|
||||
victory: ["dialogue:aether_boss_lusamine_2.victory.1"],
|
||||
defeat: ["dialogue:aether_boss_lusamine_2.defeat.1"],
|
||||
encounter: ["dialogue:aetherBossLusamine2.encounter.1"],
|
||||
victory: ["dialogue:aetherBossLusamine2.victory.1"],
|
||||
defeat: ["dialogue:aetherBossLusamine2.defeat.1"],
|
||||
},
|
||||
],
|
||||
[TrainerType.GUZMA]: [
|
||||
{
|
||||
encounter: ["dialogue:skull_boss_guzma_1.encounter.1"],
|
||||
victory: ["dialogue:skull_boss_guzma_1.victory.1"],
|
||||
defeat: ["dialogue:skull_boss_guzma_1.defeat.1"],
|
||||
encounter: ["dialogue:skullBossGuzma1.encounter.1"],
|
||||
victory: ["dialogue:skullBossGuzma1.victory.1"],
|
||||
defeat: ["dialogue:skullBossGuzma1.defeat.1"],
|
||||
},
|
||||
],
|
||||
[TrainerType.GUZMA_2]: [
|
||||
{
|
||||
encounter: ["dialogue:skull_boss_guzma_2.encounter.1"],
|
||||
victory: ["dialogue:skull_boss_guzma_2.victory.1"],
|
||||
defeat: ["dialogue:skull_boss_guzma_2.defeat.1"],
|
||||
encounter: ["dialogue:skullBossGuzma2.encounter.1"],
|
||||
victory: ["dialogue:skullBossGuzma2.victory.1"],
|
||||
defeat: ["dialogue:skullBossGuzma2.defeat.1"],
|
||||
},
|
||||
],
|
||||
[TrainerType.ROSE]: [
|
||||
{
|
||||
encounter: ["dialogue:macro_boss_rose_1.encounter.1"],
|
||||
victory: ["dialogue:macro_boss_rose_1.victory.1"],
|
||||
defeat: ["dialogue:macro_boss_rose_1.defeat.1"],
|
||||
encounter: ["dialogue:macroBossRose1.encounter.1"],
|
||||
victory: ["dialogue:macroBossRose1.victory.1"],
|
||||
defeat: ["dialogue:macroBossRose1.defeat.1"],
|
||||
},
|
||||
],
|
||||
[TrainerType.ROSE_2]: [
|
||||
{
|
||||
encounter: ["dialogue:macro_boss_rose_2.encounter.1"],
|
||||
victory: ["dialogue:macro_boss_rose_2.victory.1"],
|
||||
defeat: ["dialogue:macro_boss_rose_2.defeat.1"],
|
||||
encounter: ["dialogue:macroBossRose2.encounter.1"],
|
||||
victory: ["dialogue:macroBossRose2.victory.1"],
|
||||
defeat: ["dialogue:macroBossRose2.defeat.1"],
|
||||
},
|
||||
],
|
||||
[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"],
|
||||
encounter: ["dialogue:starBossPenny1.encounter.1"],
|
||||
victory: ["dialogue:starBossPenny1.victory.1"],
|
||||
defeat: ["dialogue:starBossPenny1.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"],
|
||||
encounter: ["dialogue:starBossPenny2.encounter.1"],
|
||||
victory: ["dialogue:starBossPenny2.victory.1"],
|
||||
defeat: ["dialogue:starBossPenny2.defeat.1"],
|
||||
},
|
||||
],
|
||||
[TrainerType.BUCK]: [
|
||||
{
|
||||
encounter: ["dialogue:stat_trainer_buck.encounter.1", "dialogue:stat_trainer_buck.encounter.2"],
|
||||
victory: ["dialogue:stat_trainer_buck.victory.1", "dialogue:stat_trainer_buck.victory.2"],
|
||||
defeat: ["dialogue:stat_trainer_buck.defeat.1", "dialogue:stat_trainer_buck.defeat.2"],
|
||||
encounter: ["dialogue:statTrainerBuck.encounter.1", "dialogue:statTrainerBuck.encounter.2"],
|
||||
victory: ["dialogue:statTrainerBuck.victory.1", "dialogue:statTrainerBuck.victory.2"],
|
||||
defeat: ["dialogue:statTrainerBuck.defeat.1", "dialogue:statTrainerBuck.defeat.2"],
|
||||
},
|
||||
],
|
||||
[TrainerType.CHERYL]: [
|
||||
{
|
||||
encounter: ["dialogue:stat_trainer_cheryl.encounter.1", "dialogue:stat_trainer_cheryl.encounter.2"],
|
||||
victory: ["dialogue:stat_trainer_cheryl.victory.1", "dialogue:stat_trainer_cheryl.victory.2"],
|
||||
defeat: ["dialogue:stat_trainer_cheryl.defeat.1", "dialogue:stat_trainer_cheryl.defeat.2"],
|
||||
encounter: ["dialogue:statTrainerCheryl.encounter.1", "dialogue:statTrainerCheryl.encounter.2"],
|
||||
victory: ["dialogue:statTrainerCheryl.victory.1", "dialogue:statTrainerCheryl.victory.2"],
|
||||
defeat: ["dialogue:statTrainerCheryl.defeat.1", "dialogue:statTrainerCheryl.defeat.2"],
|
||||
},
|
||||
],
|
||||
[TrainerType.MARLEY]: [
|
||||
{
|
||||
encounter: ["dialogue:stat_trainer_marley.encounter.1", "dialogue:stat_trainer_marley.encounter.2"],
|
||||
victory: ["dialogue:stat_trainer_marley.victory.1", "dialogue:stat_trainer_marley.victory.2"],
|
||||
defeat: ["dialogue:stat_trainer_marley.defeat.1", "dialogue:stat_trainer_marley.defeat.2"],
|
||||
encounter: ["dialogue:statTrainerMarley.encounter.1", "dialogue:statTrainerMarley.encounter.2"],
|
||||
victory: ["dialogue:statTrainerMarley.victory.1", "dialogue:statTrainerMarley.victory.2"],
|
||||
defeat: ["dialogue:statTrainerMarley.defeat.1", "dialogue:statTrainerMarley.defeat.2"],
|
||||
},
|
||||
],
|
||||
[TrainerType.MIRA]: [
|
||||
{
|
||||
encounter: ["dialogue:stat_trainer_mira.encounter.1", "dialogue:stat_trainer_mira.encounter.2"],
|
||||
victory: ["dialogue:stat_trainer_mira.victory.1", "dialogue:stat_trainer_mira.victory.2"],
|
||||
defeat: ["dialogue:stat_trainer_mira.defeat.1", "dialogue:stat_trainer_mira.defeat.2"],
|
||||
encounter: ["dialogue:statTrainerMira.encounter.1", "dialogue:statTrainerMira.encounter.2"],
|
||||
victory: ["dialogue:statTrainerMira.victory.1", "dialogue:statTrainerMira.victory.2"],
|
||||
defeat: ["dialogue:statTrainerMira.defeat.1", "dialogue:statTrainerMira.defeat.2"],
|
||||
},
|
||||
],
|
||||
[TrainerType.RILEY]: [
|
||||
{
|
||||
encounter: ["dialogue:stat_trainer_riley.encounter.1", "dialogue:stat_trainer_riley.encounter.2"],
|
||||
victory: ["dialogue:stat_trainer_riley.victory.1", "dialogue:stat_trainer_riley.victory.2"],
|
||||
defeat: ["dialogue:stat_trainer_riley.defeat.1", "dialogue:stat_trainer_riley.defeat.2"],
|
||||
encounter: ["dialogue:statTrainerRiley.encounter.1", "dialogue:statTrainerRiley.encounter.2"],
|
||||
victory: ["dialogue:statTrainerRiley.victory.1", "dialogue:statTrainerRiley.victory.2"],
|
||||
defeat: ["dialogue:statTrainerRiley.defeat.1", "dialogue:statTrainerRiley.defeat.2"],
|
||||
},
|
||||
],
|
||||
[TrainerType.VICTOR]: [
|
||||
{
|
||||
encounter: ["dialogue:winstrates_victor.encounter.1"],
|
||||
victory: ["dialogue:winstrates_victor.victory.1"],
|
||||
encounter: ["dialogue:winstratesVictor.encounter.1"],
|
||||
victory: ["dialogue:winstratesVictor.victory.1"],
|
||||
},
|
||||
],
|
||||
[TrainerType.VICTORIA]: [
|
||||
{
|
||||
encounter: ["dialogue:winstrates_victoria.encounter.1"],
|
||||
victory: ["dialogue:winstrates_victoria.victory.1"],
|
||||
encounter: ["dialogue:winstratesVictoria.encounter.1"],
|
||||
victory: ["dialogue:winstratesVictoria.victory.1"],
|
||||
},
|
||||
],
|
||||
[TrainerType.VIVI]: [
|
||||
{
|
||||
encounter: ["dialogue:winstrates_vivi.encounter.1"],
|
||||
victory: ["dialogue:winstrates_vivi.victory.1"],
|
||||
encounter: ["dialogue:winstratesVivi.encounter.1"],
|
||||
victory: ["dialogue:winstratesVivi.victory.1"],
|
||||
},
|
||||
],
|
||||
[TrainerType.VICKY]: [
|
||||
{
|
||||
encounter: ["dialogue:winstrates_vicky.encounter.1"],
|
||||
victory: ["dialogue:winstrates_vicky.victory.1"],
|
||||
encounter: ["dialogue:winstratesVicky.encounter.1"],
|
||||
victory: ["dialogue:winstratesVicky.victory.1"],
|
||||
},
|
||||
],
|
||||
[TrainerType.VITO]: [
|
||||
{
|
||||
encounter: ["dialogue:winstrates_vito.encounter.1"],
|
||||
victory: ["dialogue:winstrates_vito.victory.1"],
|
||||
encounter: ["dialogue:winstratesVito.encounter.1"],
|
||||
victory: ["dialogue:winstratesVito.victory.1"],
|
||||
},
|
||||
],
|
||||
[TrainerType.BROCK]: {
|
||||
@ -954,9 +946,9 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
||||
defeat: ["dialogue:misty.defeat.1", "dialogue:misty.defeat.2", "dialogue:misty.defeat.3"],
|
||||
},
|
||||
[TrainerType.LT_SURGE]: {
|
||||
encounter: ["dialogue:lt_surge.encounter.1", "dialogue:lt_surge.encounter.2", "dialogue:lt_surge.encounter.3"],
|
||||
victory: ["dialogue:lt_surge.victory.1", "dialogue:lt_surge.victory.2", "dialogue:lt_surge.victory.3"],
|
||||
defeat: ["dialogue:lt_surge.defeat.1", "dialogue:lt_surge.defeat.2", "dialogue:lt_surge.defeat.3"],
|
||||
encounter: ["dialogue:ltSurge.encounter.1", "dialogue:ltSurge.encounter.2", "dialogue:ltSurge.encounter.3"],
|
||||
victory: ["dialogue:ltSurge.victory.1", "dialogue:ltSurge.victory.2", "dialogue:ltSurge.victory.3"],
|
||||
defeat: ["dialogue:ltSurge.defeat.1", "dialogue:ltSurge.defeat.2", "dialogue:ltSurge.defeat.3"],
|
||||
},
|
||||
[TrainerType.ERIKA]: {
|
||||
encounter: [
|
||||
@ -1055,12 +1047,12 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
||||
},
|
||||
[TrainerType.CRASHER_WAKE]: {
|
||||
encounter: [
|
||||
"dialogue:crasher_wake.encounter.1",
|
||||
"dialogue:crasher_wake.encounter.2",
|
||||
"dialogue:crasher_wake.encounter.3",
|
||||
"dialogue:crasherWake.encounter.1",
|
||||
"dialogue:crasherWake.encounter.2",
|
||||
"dialogue:crasherWake.encounter.3",
|
||||
],
|
||||
victory: ["dialogue:crasher_wake.victory.1", "dialogue:crasher_wake.victory.2", "dialogue:crasher_wake.victory.3"],
|
||||
defeat: ["dialogue:crasher_wake.defeat.1", "dialogue:crasher_wake.defeat.2", "dialogue:crasher_wake.defeat.3"],
|
||||
victory: ["dialogue:crasherWake.victory.1", "dialogue:crasherWake.victory.2", "dialogue:crasherWake.victory.3"],
|
||||
defeat: ["dialogue:crasherWake.defeat.1", "dialogue:crasherWake.defeat.2", "dialogue:crasherWake.defeat.3"],
|
||||
},
|
||||
[TrainerType.FALKNER]: {
|
||||
encounter: ["dialogue:falkner.encounter.1", "dialogue:falkner.encounter.2", "dialogue:falkner.encounter.3"],
|
||||
@ -1354,9 +1346,9 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
||||
defeat: ["dialogue:acerola.defeat.1"],
|
||||
},
|
||||
[TrainerType.LARRY_ELITE]: {
|
||||
encounter: ["dialogue:larry_elite.encounter.1"],
|
||||
victory: ["dialogue:larry_elite.victory.1"],
|
||||
defeat: ["dialogue:larry_elite.defeat.1"],
|
||||
encounter: ["dialogue:larryElite.encounter.1"],
|
||||
victory: ["dialogue:larryElite.victory.1"],
|
||||
defeat: ["dialogue:larryElite.defeat.1"],
|
||||
},
|
||||
[TrainerType.LANCE]: {
|
||||
encounter: ["dialogue:lance.encounter.1", "dialogue:lance.encounter.2"],
|
||||
@ -1414,9 +1406,9 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
||||
defeat: ["dialogue:jasmine.defeat.1"],
|
||||
},
|
||||
[TrainerType.LANCE_CHAMPION]: {
|
||||
encounter: ["dialogue:lance_champion.encounter.1"],
|
||||
victory: ["dialogue:lance_champion.victory.1"],
|
||||
defeat: ["dialogue:lance_champion.defeat.1"],
|
||||
encounter: ["dialogue:lanceChampion.encounter.1"],
|
||||
victory: ["dialogue:lanceChampion.victory.1"],
|
||||
defeat: ["dialogue:lanceChampion.defeat.1"],
|
||||
},
|
||||
[TrainerType.STEVEN]: {
|
||||
encounter: ["dialogue:steven.encounter.1"],
|
||||
@ -1624,29 +1616,29 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
||||
defeat: ["dialogue:grusha.defeat.1"],
|
||||
},
|
||||
[TrainerType.MARNIE_ELITE]: {
|
||||
encounter: ["dialogue:marnie_elite.encounter.1", "dialogue:marnie_elite.encounter.2"],
|
||||
victory: ["dialogue:marnie_elite.victory.1", "dialogue:marnie_elite.victory.2"],
|
||||
defeat: ["dialogue:marnie_elite.defeat.1", "dialogue:marnie_elite.defeat.2"],
|
||||
encounter: ["dialogue:marnieElite.encounter.1", "dialogue:marnieElite.encounter.2"],
|
||||
victory: ["dialogue:marnieElite.victory.1", "dialogue:marnieElite.victory.2"],
|
||||
defeat: ["dialogue:marnieElite.defeat.1", "dialogue:marnieElite.defeat.2"],
|
||||
},
|
||||
[TrainerType.NESSA_ELITE]: {
|
||||
encounter: ["dialogue:nessa_elite.encounter.1", "dialogue:nessa_elite.encounter.2"],
|
||||
victory: ["dialogue:nessa_elite.victory.1", "dialogue:nessa_elite.victory.2"],
|
||||
defeat: ["dialogue:nessa_elite.defeat.1", "dialogue:nessa_elite.defeat.2"],
|
||||
encounter: ["dialogue:nessaElite.encounter.1", "dialogue:nessaElite.encounter.2"],
|
||||
victory: ["dialogue:nessaElite.victory.1", "dialogue:nessaElite.victory.2"],
|
||||
defeat: ["dialogue:nessaElite.defeat.1", "dialogue:nessaElite.defeat.2"],
|
||||
},
|
||||
[TrainerType.BEA_ELITE]: {
|
||||
encounter: ["dialogue:bea_elite.encounter.1", "dialogue:bea_elite.encounter.2"],
|
||||
victory: ["dialogue:bea_elite.victory.1", "dialogue:bea_elite.victory.2"],
|
||||
defeat: ["dialogue:bea_elite.defeat.1", "dialogue:bea_elite.defeat.2"],
|
||||
encounter: ["dialogue:beaElite.encounter.1", "dialogue:beaElite.encounter.2"],
|
||||
victory: ["dialogue:beaElite.victory.1", "dialogue:beaElite.victory.2"],
|
||||
defeat: ["dialogue:beaElite.defeat.1", "dialogue:beaElite.defeat.2"],
|
||||
},
|
||||
[TrainerType.ALLISTER_ELITE]: {
|
||||
encounter: ["dialogue:allister_elite.encounter.1", "dialogue:allister_elite.encounter.2"],
|
||||
victory: ["dialogue:allister_elite.victory.1", "dialogue:allister_elite.victory.2"],
|
||||
defeat: ["dialogue:allister_elite.defeat.1", "dialogue:allister_elite.defeat.2"],
|
||||
encounter: ["dialogue:allisterElite.encounter.1", "dialogue:allisterElite.encounter.2"],
|
||||
victory: ["dialogue:allisterElite.victory.1", "dialogue:allisterElite.victory.2"],
|
||||
defeat: ["dialogue:allisterElite.defeat.1", "dialogue:allisterElite.defeat.2"],
|
||||
},
|
||||
[TrainerType.RAIHAN_ELITE]: {
|
||||
encounter: ["dialogue:raihan_elite.encounter.1", "dialogue:raihan_elite.encounter.2"],
|
||||
victory: ["dialogue:raihan_elite.victory.1", "dialogue:raihan_elite.victory.2"],
|
||||
defeat: ["dialogue:raihan_elite.defeat.1", "dialogue:raihan_elite.defeat.2"],
|
||||
encounter: ["dialogue:raihanElite.encounter.1", "dialogue:raihanElite.encounter.2"],
|
||||
victory: ["dialogue:raihanElite.victory.1", "dialogue:raihanElite.victory.2"],
|
||||
defeat: ["dialogue:raihanElite.defeat.1", "dialogue:raihanElite.defeat.2"],
|
||||
},
|
||||
[TrainerType.ALDER]: {
|
||||
encounter: ["dialogue:alder.encounter.1"],
|
||||
@ -1670,56 +1662,56 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
|
||||
],
|
||||
[TrainerType.RIVAL_2]: [
|
||||
{
|
||||
encounter: ["dialogue:rival_2.encounter.1"],
|
||||
victory: ["dialogue:rival_2.victory.1"],
|
||||
encounter: ["dialogue:rival2.encounter.1"],
|
||||
victory: ["dialogue:rival2.victory.1"],
|
||||
},
|
||||
{
|
||||
encounter: ["dialogue:rival_2_female.encounter.1"],
|
||||
victory: ["dialogue:rival_2_female.victory.1"],
|
||||
defeat: ["dialogue:rival_2_female.defeat.1"],
|
||||
encounter: ["dialogue:rival2Female.encounter.1"],
|
||||
victory: ["dialogue:rival2Female.victory.1"],
|
||||
defeat: ["dialogue:rival2Female.defeat.1"],
|
||||
},
|
||||
],
|
||||
[TrainerType.RIVAL_3]: [
|
||||
{
|
||||
encounter: ["dialogue:rival_3.encounter.1"],
|
||||
victory: ["dialogue:rival_3.victory.1"],
|
||||
encounter: ["dialogue:rival3.encounter.1"],
|
||||
victory: ["dialogue:rival3.victory.1"],
|
||||
},
|
||||
{
|
||||
encounter: ["dialogue:rival_3_female.encounter.1"],
|
||||
victory: ["dialogue:rival_3_female.victory.1"],
|
||||
defeat: ["dialogue:rival_3_female.defeat.1"],
|
||||
encounter: ["dialogue:rival3Female.encounter.1"],
|
||||
victory: ["dialogue:rival3Female.victory.1"],
|
||||
defeat: ["dialogue:rival3Female.defeat.1"],
|
||||
},
|
||||
],
|
||||
[TrainerType.RIVAL_4]: [
|
||||
{
|
||||
encounter: ["dialogue:rival_4.encounter.1"],
|
||||
victory: ["dialogue:rival_4.victory.1"],
|
||||
encounter: ["dialogue:rival4.encounter.1"],
|
||||
victory: ["dialogue:rival4.victory.1"],
|
||||
},
|
||||
{
|
||||
encounter: ["dialogue:rival_4_female.encounter.1"],
|
||||
victory: ["dialogue:rival_4_female.victory.1"],
|
||||
defeat: ["dialogue:rival_4_female.defeat.1"],
|
||||
encounter: ["dialogue:rival4Female.encounter.1"],
|
||||
victory: ["dialogue:rival4Female.victory.1"],
|
||||
defeat: ["dialogue:rival4Female.defeat.1"],
|
||||
},
|
||||
],
|
||||
[TrainerType.RIVAL_5]: [
|
||||
{
|
||||
encounter: ["dialogue:rival_5.encounter.1"],
|
||||
victory: ["dialogue:rival_5.victory.1"],
|
||||
encounter: ["dialogue:rival5.encounter.1"],
|
||||
victory: ["dialogue:rival5.victory.1"],
|
||||
},
|
||||
{
|
||||
encounter: ["dialogue:rival_5_female.encounter.1"],
|
||||
victory: ["dialogue:rival_5_female.victory.1"],
|
||||
defeat: ["dialogue:rival_5_female.defeat.1"],
|
||||
encounter: ["dialogue:rival5Female.encounter.1"],
|
||||
victory: ["dialogue:rival5Female.victory.1"],
|
||||
defeat: ["dialogue:rival5Female.defeat.1"],
|
||||
},
|
||||
],
|
||||
[TrainerType.RIVAL_6]: [
|
||||
{
|
||||
encounter: ["dialogue:rival_6.encounter.1"],
|
||||
victory: ["dialogue:rival_6.victory.1"],
|
||||
encounter: ["dialogue:rival6.encounter.1"],
|
||||
victory: ["dialogue:rival6.victory.1"],
|
||||
},
|
||||
{
|
||||
encounter: ["dialogue:rival_6_female.encounter.1"],
|
||||
victory: ["dialogue:rival_6_female.victory.1"],
|
||||
encounter: ["dialogue:rival6Female.encounter.1"],
|
||||
victory: ["dialogue:rival6Female.victory.1"],
|
||||
},
|
||||
],
|
||||
};
|
||||
|
@ -86,7 +86,7 @@ import { PokemonHealPhase } from "#phases/pokemon-heal-phase";
|
||||
import { SwitchSummonPhase } from "#phases/switch-summon-phase";
|
||||
import type { AttackMoveResult } from "#types/attack-move-result";
|
||||
import type { Localizable } from "#types/locales";
|
||||
import type { ChargingMove, MoveAttrMap, MoveAttrString, MoveClassMap, MoveKindString } from "#types/move-types";
|
||||
import type { ChargingMove, MoveAttrMap, MoveAttrString, MoveClassMap, MoveKindString, MoveMessageFunc } from "#types/move-types";
|
||||
import type { TurnMove } from "#types/turn-move";
|
||||
import { BooleanHolder, type Constructor, isNullOrUndefined, NumberHolder, randSeedFloat, randSeedInt, randSeedItem, toDmgValue } from "#utils/common";
|
||||
import { getEnumValues } from "#utils/enums";
|
||||
@ -1357,20 +1357,20 @@ export class MoveHeaderAttr extends MoveAttr {
|
||||
|
||||
/**
|
||||
* Header attribute to queue a message at the beginning of a turn.
|
||||
* @see {@link MoveHeaderAttr}
|
||||
*/
|
||||
export class MessageHeaderAttr extends MoveHeaderAttr {
|
||||
private message: string | ((user: Pokemon, move: Move) => string);
|
||||
/** The message to display, or a function producing one. */
|
||||
private message: string | MoveMessageFunc;
|
||||
|
||||
constructor(message: string | ((user: Pokemon, move: Move) => string)) {
|
||||
constructor(message: string | MoveMessageFunc) {
|
||||
super();
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
||||
apply(user: Pokemon, target: Pokemon, move: Move): boolean {
|
||||
const message = typeof this.message === "string"
|
||||
? this.message
|
||||
: this.message(user, move);
|
||||
: this.message(user, target, move);
|
||||
|
||||
if (message) {
|
||||
globalScene.phaseManager.queueMessage(message);
|
||||
@ -1418,21 +1418,21 @@ export class BeakBlastHeaderAttr extends AddBattlerTagHeaderAttr {
|
||||
*/
|
||||
export class PreMoveMessageAttr extends MoveAttr {
|
||||
/** The message to display or a function returning one */
|
||||
private message: string | ((user: Pokemon, target: Pokemon, move: Move) => string | undefined);
|
||||
private message: string | MoveMessageFunc;
|
||||
|
||||
/**
|
||||
* Create a new {@linkcode PreMoveMessageAttr} to display a message before move execution.
|
||||
* @param message - The message to display before move use, either as a string or a function producing one.
|
||||
* @param message - The message to display before move use, either` a literal string or a function producing one.
|
||||
* @remarks
|
||||
* If {@linkcode message} evaluates to an empty string (`''`), no message will be displayed
|
||||
* If {@linkcode message} evaluates to an empty string (`""`), no message will be displayed
|
||||
* (though the move will still succeed).
|
||||
*/
|
||||
constructor(message: string | ((user: Pokemon, target: Pokemon, move: Move) => string)) {
|
||||
constructor(message: string | MoveMessageFunc) {
|
||||
super();
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
apply(user: Pokemon, target: Pokemon, move: Move, _args: any[]): boolean {
|
||||
apply(user: Pokemon, target: Pokemon, move: Move): boolean {
|
||||
const message = typeof this.message === "function"
|
||||
? this.message(user, target, move)
|
||||
: this.message;
|
||||
@ -1453,18 +1453,17 @@ export class PreMoveMessageAttr extends MoveAttr {
|
||||
* @extends MoveAttr
|
||||
*/
|
||||
export class PreUseInterruptAttr extends MoveAttr {
|
||||
protected message?: string | ((user: Pokemon, target: Pokemon, move: Move) => string);
|
||||
protected overridesFailedMessage: boolean;
|
||||
protected message: string | MoveMessageFunc;
|
||||
protected conditionFunc: MoveConditionFunc;
|
||||
|
||||
/**
|
||||
* Create a new MoveInterruptedMessageAttr.
|
||||
* @param message The message to display when the move is interrupted, or a function that formats the message based on the user, target, and move.
|
||||
*/
|
||||
constructor(message?: string | ((user: Pokemon, target: Pokemon, move: Move) => string), conditionFunc?: MoveConditionFunc) {
|
||||
constructor(message: string | MoveMessageFunc, conditionFunc: MoveConditionFunc) {
|
||||
super();
|
||||
this.message = message;
|
||||
this.conditionFunc = conditionFunc ?? (() => true);
|
||||
this.conditionFunc = conditionFunc;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1485,11 +1484,9 @@ export class PreUseInterruptAttr extends MoveAttr {
|
||||
*/
|
||||
override getFailedText(user: Pokemon, target: Pokemon, move: Move): string | undefined {
|
||||
if (this.message && this.conditionFunc(user, target, move)) {
|
||||
const message =
|
||||
typeof this.message === "string"
|
||||
? (this.message as string)
|
||||
return typeof this.message === "string"
|
||||
? this.message
|
||||
: this.message(user, target, move);
|
||||
return message;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1694,17 +1691,30 @@ export class SurviveDamageAttr extends ModifiedDamageAttr {
|
||||
}
|
||||
}
|
||||
|
||||
export class SplashAttr extends MoveEffectAttr {
|
||||
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
||||
globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:splash"));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Move attribute to display arbitrary text during a move's execution.
|
||||
*/
|
||||
export class MessageAttr extends MoveEffectAttr {
|
||||
/** The message to display, either as a string or a function returning one. */
|
||||
private message: string | MoveMessageFunc;
|
||||
|
||||
export class CelebrateAttr extends MoveEffectAttr {
|
||||
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
||||
globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:celebrate", { playerName: loggedInUser?.username }));
|
||||
return true;
|
||||
constructor(message: string | MoveMessageFunc, options?: MoveEffectAttrOptions) {
|
||||
// TODO: Do we need to respect `selfTarget` if we're just displaying text?
|
||||
super(false, options)
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
override apply(user: Pokemon, target: Pokemon, move: Move): boolean {
|
||||
const message = typeof this.message === "function"
|
||||
? this.message(user, target, move)
|
||||
: this.message;
|
||||
|
||||
// TODO: Consider changing if/when MoveAttr `apply` return values become significant
|
||||
if (message) {
|
||||
globalScene.phaseManager.queueMessage(message, 500);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -5931,38 +5941,6 @@ export class ProtectAttr extends AddBattlerTagAttr {
|
||||
}
|
||||
}
|
||||
|
||||
export class IgnoreAccuracyAttr extends AddBattlerTagAttr {
|
||||
constructor() {
|
||||
super(BattlerTagType.IGNORE_ACCURACY, true, false, 2);
|
||||
}
|
||||
|
||||
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
||||
if (!super.apply(user, target, move, args)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:tookAimAtTarget", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target) }));
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
export class FaintCountdownAttr extends AddBattlerTagAttr {
|
||||
constructor() {
|
||||
super(BattlerTagType.PERISH_SONG, false, true, 4);
|
||||
}
|
||||
|
||||
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
||||
if (!super.apply(user, target, move, args)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:faintCountdown", { pokemonName: getPokemonNameWithAffix(target), turnCount: this.turnCountMin - 1 }));
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Attribute to remove all Substitutes from the field.
|
||||
* @extends MoveEffectAttr
|
||||
@ -6603,8 +6581,10 @@ export class ChillyReceptionAttr extends ForceSwitchOutAttr {
|
||||
return (user, target, move) => globalScene.arena.weather?.weatherType !== WeatherType.SNOW || super.getSwitchOutCondition()(user, target, move);
|
||||
}
|
||||
}
|
||||
|
||||
export class RemoveTypeAttr extends MoveEffectAttr {
|
||||
|
||||
// TODO: Remove the message callback
|
||||
private removedType: PokemonType;
|
||||
private messageCallback: ((user: Pokemon) => void) | undefined;
|
||||
|
||||
@ -8299,8 +8279,6 @@ const MoveAttrs = Object.freeze({
|
||||
RandomLevelDamageAttr,
|
||||
ModifiedDamageAttr,
|
||||
SurviveDamageAttr,
|
||||
SplashAttr,
|
||||
CelebrateAttr,
|
||||
RecoilAttr,
|
||||
SacrificialAttr,
|
||||
SacrificialAttrOnHit,
|
||||
@ -8443,8 +8421,7 @@ const MoveAttrs = Object.freeze({
|
||||
RechargeAttr,
|
||||
TrapAttr,
|
||||
ProtectAttr,
|
||||
IgnoreAccuracyAttr,
|
||||
FaintCountdownAttr,
|
||||
MessageAttr,
|
||||
RemoveAllSubstitutesAttr,
|
||||
HitsTagAttr,
|
||||
HitsTagForDoubleDamageAttr,
|
||||
@ -8938,7 +8915,7 @@ export function initMoves() {
|
||||
new AttackMove(MoveId.PSYWAVE, PokemonType.PSYCHIC, MoveCategory.SPECIAL, -1, 100, 15, -1, 0, 1)
|
||||
.attr(RandomLevelDamageAttr),
|
||||
new SelfStatusMove(MoveId.SPLASH, PokemonType.NORMAL, -1, 40, -1, 0, 1)
|
||||
.attr(SplashAttr)
|
||||
.attr(MessageAttr, i18next.t("moveTriggers:splash"))
|
||||
.condition(failOnGravityCondition),
|
||||
new SelfStatusMove(MoveId.ACID_ARMOR, PokemonType.POISON, -1, 20, -1, 0, 1)
|
||||
.attr(StatStageChangeAttr, [ Stat.DEF ], 2, true),
|
||||
@ -9000,7 +8977,10 @@ export function initMoves() {
|
||||
.attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, true, 1)
|
||||
.reflectable(),
|
||||
new StatusMove(MoveId.MIND_READER, PokemonType.NORMAL, -1, 5, -1, 0, 2)
|
||||
.attr(IgnoreAccuracyAttr),
|
||||
.attr(AddBattlerTagAttr, BattlerTagType.IGNORE_ACCURACY, true, false, 2)
|
||||
.attr(MessageAttr, (user, target) =>
|
||||
i18next.t("moveTriggers:tookAimAtTarget", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target) })
|
||||
),
|
||||
new StatusMove(MoveId.NIGHTMARE, PokemonType.GHOST, 100, 15, -1, 0, 2)
|
||||
.attr(AddBattlerTagAttr, BattlerTagType.NIGHTMARE)
|
||||
.condition(targetSleptOrComatoseCondition),
|
||||
@ -9088,7 +9068,9 @@ export function initMoves() {
|
||||
return lastTurnMove.length === 0 || lastTurnMove[0].move !== move.id || lastTurnMove[0].result !== MoveResult.SUCCESS;
|
||||
}),
|
||||
new StatusMove(MoveId.PERISH_SONG, PokemonType.NORMAL, -1, 5, -1, 0, 2)
|
||||
.attr(FaintCountdownAttr)
|
||||
.attr(AddBattlerTagAttr, BattlerTagType.PERISH_SONG, false, true, 4)
|
||||
.attr(MessageAttr, (_user, target) =>
|
||||
i18next.t("moveTriggers:faintCountdown", { pokemonName: getPokemonNameWithAffix(target), turnCount: 3 }))
|
||||
.ignoresProtect()
|
||||
.soundBased()
|
||||
.condition(failOnBossCondition)
|
||||
@ -9104,7 +9086,10 @@ export function initMoves() {
|
||||
.attr(MultiHitAttr)
|
||||
.makesContact(false),
|
||||
new StatusMove(MoveId.LOCK_ON, PokemonType.NORMAL, -1, 5, -1, 0, 2)
|
||||
.attr(IgnoreAccuracyAttr),
|
||||
.attr(AddBattlerTagAttr, BattlerTagType.IGNORE_ACCURACY, true, false, 2)
|
||||
.attr(MessageAttr, (user, target) =>
|
||||
i18next.t("moveTriggers:tookAimAtTarget", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target) })
|
||||
),
|
||||
new AttackMove(MoveId.OUTRAGE, PokemonType.DRAGON, MoveCategory.PHYSICAL, 120, 100, 10, -1, 0, 2)
|
||||
.attr(FrenzyAttr)
|
||||
.attr(MissEffectAttr, frenzyMissFunc)
|
||||
@ -9331,8 +9316,8 @@ export function initMoves() {
|
||||
&& (user.status.effect === StatusEffect.BURN || user.status.effect === StatusEffect.POISON || user.status.effect === StatusEffect.TOXIC || user.status.effect === StatusEffect.PARALYSIS) ? 2 : 1)
|
||||
.attr(BypassBurnDamageReductionAttr),
|
||||
new AttackMove(MoveId.FOCUS_PUNCH, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 150, 100, 20, -1, -3, 3)
|
||||
.attr(MessageHeaderAttr, (user, move) => i18next.t("moveTriggers:isTighteningFocus", { pokemonName: getPokemonNameWithAffix(user) }))
|
||||
.attr(PreUseInterruptAttr, (user, target, move) => i18next.t("moveTriggers:lostFocus", { pokemonName: getPokemonNameWithAffix(user) }), user => !!user.turnData.attacksReceived.find(r => r.damage))
|
||||
.attr(MessageHeaderAttr, (user) => i18next.t("moveTriggers:isTighteningFocus", { pokemonName: getPokemonNameWithAffix(user) }))
|
||||
.attr(PreUseInterruptAttr, (user) => i18next.t("moveTriggers:lostFocus", { pokemonName: getPokemonNameWithAffix(user) }), user => user.turnData.attacksReceived.some(r => r.damage > 0))
|
||||
.punchingMove(),
|
||||
new AttackMove(MoveId.SMELLING_SALTS, PokemonType.NORMAL, MoveCategory.PHYSICAL, 70, 100, 10, -1, 0, 3)
|
||||
.attr(MovePowerMultiplierAttr, (user, target, move) => target.status?.effect === StatusEffect.PARALYSIS ? 2 : 1)
|
||||
@ -10433,7 +10418,8 @@ export function initMoves() {
|
||||
new AttackMove(MoveId.DAZZLING_GLEAM, PokemonType.FAIRY, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 6)
|
||||
.target(MoveTarget.ALL_NEAR_ENEMIES),
|
||||
new SelfStatusMove(MoveId.CELEBRATE, PokemonType.NORMAL, -1, 40, -1, 0, 6)
|
||||
.attr(CelebrateAttr),
|
||||
// NB: This needs a lambda function as the user will not be logged in by the time the moves are initialized
|
||||
.attr(MessageAttr, () => i18next.t("moveTriggers:celebrate", { playerName: loggedInUser?.username })),
|
||||
new StatusMove(MoveId.HOLD_HANDS, PokemonType.NORMAL, -1, 40, -1, 0, 6)
|
||||
.ignoresSubstitute()
|
||||
.target(MoveTarget.NEAR_ALLY),
|
||||
@ -10608,7 +10594,12 @@ export function initMoves() {
|
||||
.attr(StatStageChangeAttr, [ Stat.SPD ], -1)
|
||||
.reflectable(),
|
||||
new SelfStatusMove(MoveId.LASER_FOCUS, PokemonType.NORMAL, -1, 30, -1, 0, 7)
|
||||
.attr(AddBattlerTagAttr, BattlerTagType.ALWAYS_CRIT, true, false),
|
||||
.attr(AddBattlerTagAttr, BattlerTagType.ALWAYS_CRIT, true, false)
|
||||
.attr(MessageAttr, (user) =>
|
||||
i18next.t("battlerTags:laserFocusOnAdd", {
|
||||
pokemonNameWithAffix: getPokemonNameWithAffix(user),
|
||||
}),
|
||||
),
|
||||
new StatusMove(MoveId.GEAR_UP, PokemonType.STEEL, -1, 20, -1, 0, 7)
|
||||
.attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], 1, false, { condition: (user, target, move) => !![ AbilityId.PLUS, AbilityId.MINUS ].find(a => target.hasAbility(a, false)) })
|
||||
.ignoresSubstitute()
|
||||
|
@ -17,6 +17,7 @@ import { addWindow, WindowVariant } from "#ui/ui-theme";
|
||||
import { fixedInt, isLocal, sessionIdKey } from "#utils/common";
|
||||
import { getCookie } from "#utils/cookies";
|
||||
import { getEnumValues } from "#utils/enums";
|
||||
import { toCamelCase } from "#utils/strings";
|
||||
import { isBeta } from "#utils/utility-vars";
|
||||
import i18next from "i18next";
|
||||
|
||||
@ -138,7 +139,7 @@ export class MenuUiHandler extends MessageUiHandler {
|
||||
this.optionSelectText = addTextObject(
|
||||
0,
|
||||
0,
|
||||
this.menuOptions.map(o => `${i18next.t(`menuUiHandler:${MenuOptions[o]}`)}`).join("\n"),
|
||||
this.menuOptions.map(o => `${i18next.t(`menuUiHandler:${toCamelCase(MenuOptions[o])}`)}`).join("\n"),
|
||||
TextStyle.WINDOW,
|
||||
{ maxLines: this.menuOptions.length },
|
||||
);
|
||||
|
@ -2612,7 +2612,7 @@ export class PokedexPageUiHandler extends MessageUiHandler {
|
||||
// Setting growth rate text
|
||||
if (isFormCaught) {
|
||||
let growthReadable = toTitleCase(GrowthRate[species.growthRate]);
|
||||
const growthAux = growthReadable.replace(" ", "_");
|
||||
const growthAux = toCamelCase(growthReadable);
|
||||
if (i18next.exists("growth:" + growthAux)) {
|
||||
growthReadable = i18next.t(("growth:" + growthAux) as any);
|
||||
}
|
||||
|
@ -72,7 +72,7 @@ import {
|
||||
import type { StarterPreferences } from "#utils/data";
|
||||
import { loadStarterPreferences, saveStarterPreferences } from "#utils/data";
|
||||
import { getPokemonSpeciesForm, getPokerusStarters } from "#utils/pokemon-utils";
|
||||
import { toTitleCase } from "#utils/strings";
|
||||
import { toCamelCase, toTitleCase } from "#utils/strings";
|
||||
import { argbFromRgba } from "@material/material-color-utilities";
|
||||
import i18next from "i18next";
|
||||
import type { GameObjects } from "phaser";
|
||||
@ -2263,7 +2263,7 @@ export class StarterSelectUiHandler extends MessageUiHandler {
|
||||
});
|
||||
};
|
||||
options.push({
|
||||
label: i18next.t("menuUiHandler:POKEDEX"),
|
||||
label: i18next.t("menuUiHandler:pokedex"),
|
||||
handler: () => {
|
||||
ui.setMode(UiMode.STARTER_SELECT).then(() => {
|
||||
const attributes = {
|
||||
@ -3464,7 +3464,7 @@ export class StarterSelectUiHandler extends MessageUiHandler {
|
||||
|
||||
//Growth translate
|
||||
let growthReadable = toTitleCase(GrowthRate[species.growthRate]);
|
||||
const growthAux = growthReadable.replace(" ", "_");
|
||||
const growthAux = toCamelCase(growthReadable);
|
||||
if (i18next.exists("growth:" + growthAux)) {
|
||||
growthReadable = i18next.t(("growth:" + growthAux) as any);
|
||||
}
|
||||
|
@ -1,4 +1,3 @@
|
||||
import { globalScene } from "#app/global-scene";
|
||||
import { Status } from "#data/status-effect";
|
||||
import { AbilityId } from "#enums/ability-id";
|
||||
import { BattleType } from "#enums/battle-type";
|
||||
@ -179,18 +178,13 @@ describe("Moves - Whirlwind", () => {
|
||||
const eligibleEnemy = enemyParty.filter(p => p.hp > 0 && p.isAllowedInBattle());
|
||||
expect(eligibleEnemy.length).toBe(1);
|
||||
|
||||
// Spy on the queueMessage function
|
||||
const queueSpy = vi.spyOn(globalScene.phaseManager, "queueMessage");
|
||||
|
||||
// Player uses Whirlwind; opponent uses Splash
|
||||
game.move.select(MoveId.WHIRLWIND);
|
||||
await game.move.selectEnemyMove(MoveId.SPLASH);
|
||||
await game.toNextTurn();
|
||||
|
||||
// Verify that the failure message is displayed for Whirlwind
|
||||
expect(queueSpy).toHaveBeenCalledWith(expect.stringContaining("But it failed"));
|
||||
// Verify the opponent's Splash message
|
||||
expect(queueSpy).toHaveBeenCalledWith(expect.stringContaining("But nothing happened!"));
|
||||
const player = game.field.getPlayerPokemon();
|
||||
expect(player).toHaveUsedMove({ move: MoveId.WHIRLWIND, result: MoveResult.FAIL });
|
||||
});
|
||||
|
||||
it("should not pull in the other trainer's pokemon in a partner trainer battle", async () => {
|
||||
|
Loading…
Reference in New Issue
Block a user