mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-07-04 15:32:18 +02:00
Rename Species
to SpeciesId
This commit is contained in:
parent
5e38a388ee
commit
8c4e20b12f
@ -134,7 +134,7 @@ import type { ExpNotification } from "#enums/exp-notification";
|
|||||||
import { MoneyFormat } from "#enums/money-format";
|
import { MoneyFormat } from "#enums/money-format";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { PlayerGender } from "#enums/player-gender";
|
import { PlayerGender } from "#enums/player-gender";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { UiTheme } from "#enums/ui-theme";
|
import { UiTheme } from "#enums/ui-theme";
|
||||||
import { TimedEventManager } from "#app/timed-event-manager";
|
import { TimedEventManager } from "#app/timed-event-manager";
|
||||||
import type { PokemonAnimType } from "#enums/pokemon-anim-type";
|
import type { PokemonAnimType } from "#enums/pokemon-anim-type";
|
||||||
@ -1501,7 +1501,7 @@ export default class BattleScene extends SceneBase {
|
|||||||
pokemon.resetTera();
|
pokemon.resetTera();
|
||||||
applyPostBattleInitAbAttrs(PostBattleInitAbAttr, pokemon);
|
applyPostBattleInitAbAttrs(PostBattleInitAbAttr, pokemon);
|
||||||
if (
|
if (
|
||||||
pokemon.hasSpecies(Species.TERAPAGOS) ||
|
pokemon.hasSpecies(SpeciesId.TERAPAGOS) ||
|
||||||
(this.gameMode.isClassic && this.currentBattle.waveIndex > 180 && this.currentBattle.waveIndex <= 190)
|
(this.gameMode.isClassic && this.currentBattle.waveIndex > 180 && this.currentBattle.waveIndex <= 190)
|
||||||
) {
|
) {
|
||||||
this.arena.playerTerasUsed = 0;
|
this.arena.playerTerasUsed = 0;
|
||||||
@ -1599,7 +1599,7 @@ export default class BattleScene extends SceneBase {
|
|||||||
!isNullOrUndefined(this.currentBattle.trainer) &&
|
!isNullOrUndefined(this.currentBattle.trainer) &&
|
||||||
this.currentBattle.trainer.config.hasSpecialtyType()
|
this.currentBattle.trainer.config.hasSpecialtyType()
|
||||||
) {
|
) {
|
||||||
if (species.speciesId === Species.WORMADAM) {
|
if (species.speciesId === SpeciesId.WORMADAM) {
|
||||||
switch (this.currentBattle.trainer.config.specialtyType) {
|
switch (this.currentBattle.trainer.config.specialtyType) {
|
||||||
case PokemonType.GROUND:
|
case PokemonType.GROUND:
|
||||||
return 1; // Sandy Cloak
|
return 1; // Sandy Cloak
|
||||||
@ -1609,7 +1609,7 @@ export default class BattleScene extends SceneBase {
|
|||||||
return 0; // Plant Cloak
|
return 0; // Plant Cloak
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (species.speciesId === Species.ROTOM) {
|
if (species.speciesId === SpeciesId.ROTOM) {
|
||||||
switch (this.currentBattle.trainer.config.specialtyType) {
|
switch (this.currentBattle.trainer.config.specialtyType) {
|
||||||
case PokemonType.FLYING:
|
case PokemonType.FLYING:
|
||||||
return 4; // Fan Rotom
|
return 4; // Fan Rotom
|
||||||
@ -1625,7 +1625,7 @@ export default class BattleScene extends SceneBase {
|
|||||||
return 3; // Frost Rotom
|
return 3; // Frost Rotom
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (species.speciesId === Species.ORICORIO) {
|
if (species.speciesId === SpeciesId.ORICORIO) {
|
||||||
switch (this.currentBattle.trainer.config.specialtyType) {
|
switch (this.currentBattle.trainer.config.specialtyType) {
|
||||||
case PokemonType.GHOST:
|
case PokemonType.GHOST:
|
||||||
return 3; // Sensu Style
|
return 3; // Sensu Style
|
||||||
@ -1637,7 +1637,7 @@ export default class BattleScene extends SceneBase {
|
|||||||
return 2; // Pa'u Style
|
return 2; // Pa'u Style
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (species.speciesId === Species.PALDEA_TAUROS) {
|
if (species.speciesId === SpeciesId.PALDEA_TAUROS) {
|
||||||
switch (this.currentBattle.trainer.config.specialtyType) {
|
switch (this.currentBattle.trainer.config.specialtyType) {
|
||||||
case PokemonType.FIRE:
|
case PokemonType.FIRE:
|
||||||
return 1; // Blaze Breed
|
return 1; // Blaze Breed
|
||||||
@ -1645,41 +1645,41 @@ export default class BattleScene extends SceneBase {
|
|||||||
return 2; // Aqua Breed
|
return 2; // Aqua Breed
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (species.speciesId === Species.SILVALLY || species.speciesId === Species.ARCEUS) {
|
if (species.speciesId === SpeciesId.SILVALLY || species.speciesId === SpeciesId.ARCEUS) {
|
||||||
// Would probably never happen, but might as well
|
// Would probably never happen, but might as well
|
||||||
return this.currentBattle.trainer.config.specialtyType;
|
return this.currentBattle.trainer.config.specialtyType;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (species.speciesId) {
|
switch (species.speciesId) {
|
||||||
case Species.UNOWN:
|
case SpeciesId.UNOWN:
|
||||||
case Species.SHELLOS:
|
case SpeciesId.SHELLOS:
|
||||||
case Species.GASTRODON:
|
case SpeciesId.GASTRODON:
|
||||||
case Species.BASCULIN:
|
case SpeciesId.BASCULIN:
|
||||||
case Species.DEERLING:
|
case SpeciesId.DEERLING:
|
||||||
case Species.SAWSBUCK:
|
case SpeciesId.SAWSBUCK:
|
||||||
case Species.SCATTERBUG:
|
case SpeciesId.SCATTERBUG:
|
||||||
case Species.SPEWPA:
|
case SpeciesId.SPEWPA:
|
||||||
case Species.VIVILLON:
|
case SpeciesId.VIVILLON:
|
||||||
case Species.FLABEBE:
|
case SpeciesId.FLABEBE:
|
||||||
case Species.FLOETTE:
|
case SpeciesId.FLOETTE:
|
||||||
case Species.FLORGES:
|
case SpeciesId.FLORGES:
|
||||||
case Species.FURFROU:
|
case SpeciesId.FURFROU:
|
||||||
case Species.PUMPKABOO:
|
case SpeciesId.PUMPKABOO:
|
||||||
case Species.GOURGEIST:
|
case SpeciesId.GOURGEIST:
|
||||||
case Species.ORICORIO:
|
case SpeciesId.ORICORIO:
|
||||||
case Species.MAGEARNA:
|
case SpeciesId.MAGEARNA:
|
||||||
case Species.ZARUDE:
|
case SpeciesId.ZARUDE:
|
||||||
case Species.SQUAWKABILLY:
|
case SpeciesId.SQUAWKABILLY:
|
||||||
case Species.TATSUGIRI:
|
case SpeciesId.TATSUGIRI:
|
||||||
case Species.PALDEA_TAUROS:
|
case SpeciesId.PALDEA_TAUROS:
|
||||||
return randSeedInt(species.forms.length);
|
return randSeedInt(species.forms.length);
|
||||||
case Species.PIKACHU:
|
case SpeciesId.PIKACHU:
|
||||||
if (this.currentBattle?.battleType === BattleType.TRAINER && this.currentBattle?.waveIndex < 30) {
|
if (this.currentBattle?.battleType === BattleType.TRAINER && this.currentBattle?.waveIndex < 30) {
|
||||||
return 0; // Ban Cosplay and Partner Pika from Trainers before wave 30
|
return 0; // Ban Cosplay and Partner Pika from Trainers before wave 30
|
||||||
}
|
}
|
||||||
return randSeedInt(8);
|
return randSeedInt(8);
|
||||||
case Species.EEVEE:
|
case SpeciesId.EEVEE:
|
||||||
if (
|
if (
|
||||||
this.currentBattle?.battleType === BattleType.TRAINER &&
|
this.currentBattle?.battleType === BattleType.TRAINER &&
|
||||||
this.currentBattle?.waveIndex < 30 &&
|
this.currentBattle?.waveIndex < 30 &&
|
||||||
@ -1688,27 +1688,27 @@ export default class BattleScene extends SceneBase {
|
|||||||
return 0; // No Partner Eevee for Wave 12 Preschoolers
|
return 0; // No Partner Eevee for Wave 12 Preschoolers
|
||||||
}
|
}
|
||||||
return randSeedInt(2);
|
return randSeedInt(2);
|
||||||
case Species.FROAKIE:
|
case SpeciesId.FROAKIE:
|
||||||
case Species.FROGADIER:
|
case SpeciesId.FROGADIER:
|
||||||
case Species.GRENINJA:
|
case SpeciesId.GRENINJA:
|
||||||
if (this.currentBattle?.battleType === BattleType.TRAINER && !isEggPhase) {
|
if (this.currentBattle?.battleType === BattleType.TRAINER && !isEggPhase) {
|
||||||
return 0; // Don't give trainers Battle Bond Greninja, Froakie or Frogadier
|
return 0; // Don't give trainers Battle Bond Greninja, Froakie or Frogadier
|
||||||
}
|
}
|
||||||
return randSeedInt(2);
|
return randSeedInt(2);
|
||||||
case Species.URSHIFU:
|
case SpeciesId.URSHIFU:
|
||||||
return randSeedInt(2);
|
return randSeedInt(2);
|
||||||
case Species.ZYGARDE:
|
case SpeciesId.ZYGARDE:
|
||||||
return randSeedInt(4);
|
return randSeedInt(4);
|
||||||
case Species.MINIOR:
|
case SpeciesId.MINIOR:
|
||||||
return randSeedInt(7);
|
return randSeedInt(7);
|
||||||
case Species.ALCREMIE:
|
case SpeciesId.ALCREMIE:
|
||||||
return randSeedInt(9);
|
return randSeedInt(9);
|
||||||
case Species.MEOWSTIC:
|
case SpeciesId.MEOWSTIC:
|
||||||
case Species.INDEEDEE:
|
case SpeciesId.INDEEDEE:
|
||||||
case Species.BASCULEGION:
|
case SpeciesId.BASCULEGION:
|
||||||
case Species.OINKOLOGNE:
|
case SpeciesId.OINKOLOGNE:
|
||||||
return gender === Gender.FEMALE ? 1 : 0;
|
return gender === Gender.FEMALE ? 1 : 0;
|
||||||
case Species.TOXTRICITY: {
|
case SpeciesId.TOXTRICITY: {
|
||||||
const lowkeyNatures = [
|
const lowkeyNatures = [
|
||||||
Nature.LONELY,
|
Nature.LONELY,
|
||||||
Nature.BOLD,
|
Nature.BOLD,
|
||||||
@ -1728,7 +1728,7 @@ export default class BattleScene extends SceneBase {
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
case Species.GIMMIGHOUL:
|
case SpeciesId.GIMMIGHOUL:
|
||||||
// Chest form can only be found in Mysterious Chest Encounter, if this is a game mode with MEs
|
// Chest form can only be found in Mysterious Chest Encounter, if this is a game mode with MEs
|
||||||
if (this.gameMode.hasMysteryEncounters && !isEggPhase) {
|
if (this.gameMode.hasMysteryEncounters && !isEggPhase) {
|
||||||
return 1; // Wandering form
|
return 1; // Wandering form
|
||||||
@ -1738,10 +1738,10 @@ export default class BattleScene extends SceneBase {
|
|||||||
|
|
||||||
if (ignoreArena) {
|
if (ignoreArena) {
|
||||||
switch (species.speciesId) {
|
switch (species.speciesId) {
|
||||||
case Species.BURMY:
|
case SpeciesId.BURMY:
|
||||||
case Species.WORMADAM:
|
case SpeciesId.WORMADAM:
|
||||||
case Species.ROTOM:
|
case SpeciesId.ROTOM:
|
||||||
case Species.LYCANROC:
|
case SpeciesId.LYCANROC:
|
||||||
return randSeedInt(species.forms.length);
|
return randSeedInt(species.forms.length);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -3475,7 +3475,7 @@ export default class BattleScene extends SceneBase {
|
|||||||
fc => fc.findTrigger(formChangeTriggerType) && fc.canChange(pokemon),
|
fc => fc.findTrigger(formChangeTriggerType) && fc.canChange(pokemon),
|
||||||
);
|
);
|
||||||
let matchingFormChange: SpeciesFormChange | null;
|
let matchingFormChange: SpeciesFormChange | null;
|
||||||
if (pokemon.species.speciesId === Species.NECROZMA && matchingFormChangeOpts.length > 1) {
|
if (pokemon.species.speciesId === SpeciesId.NECROZMA && matchingFormChangeOpts.length > 1) {
|
||||||
// Ultra Necrozma is changing its form back, so we need to figure out into which form it devolves.
|
// Ultra Necrozma is changing its form back, so we need to figure out into which form it devolves.
|
||||||
const formChangeItemModifiers = (
|
const formChangeItemModifiers = (
|
||||||
this.findModifiers(
|
this.findModifiers(
|
||||||
|
180
src/battle.ts
180
src/battle.ts
@ -22,7 +22,7 @@ import { BattleSpec } from "#enums/battle-spec";
|
|||||||
import type { MoveId } from "#enums/move-id";
|
import type { MoveId } from "#enums/move-id";
|
||||||
import { PlayerGender } from "#enums/player-gender";
|
import { PlayerGender } from "#enums/player-gender";
|
||||||
import { MusicPreference } from "#app/system/settings/settings";
|
import { MusicPreference } from "#app/system/settings/settings";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { TrainerType } from "#enums/trainer-type";
|
import { TrainerType } from "#enums/trainer-type";
|
||||||
import i18next from "#app/plugins/i18n";
|
import i18next from "#app/plugins/i18n";
|
||||||
import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter";
|
import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter";
|
||||||
@ -264,14 +264,14 @@ export default class Battle {
|
|||||||
if (pokemon.species.legendary || pokemon.species.subLegendary || pokemon.species.mythical) {
|
if (pokemon.species.legendary || pokemon.species.subLegendary || pokemon.species.mythical) {
|
||||||
if (globalScene.musicPreference === MusicPreference.GENFIVE) {
|
if (globalScene.musicPreference === MusicPreference.GENFIVE) {
|
||||||
switch (pokemon.species.speciesId) {
|
switch (pokemon.species.speciesId) {
|
||||||
case Species.REGIROCK:
|
case SpeciesId.REGIROCK:
|
||||||
case Species.REGICE:
|
case SpeciesId.REGICE:
|
||||||
case Species.REGISTEEL:
|
case SpeciesId.REGISTEEL:
|
||||||
case Species.REGIGIGAS:
|
case SpeciesId.REGIGIGAS:
|
||||||
case Species.REGIDRAGO:
|
case SpeciesId.REGIDRAGO:
|
||||||
case Species.REGIELEKI:
|
case SpeciesId.REGIELEKI:
|
||||||
return "battle_legendary_regis_g5";
|
return "battle_legendary_regis_g5";
|
||||||
case Species.KYUREM:
|
case SpeciesId.KYUREM:
|
||||||
return "battle_legendary_kyurem";
|
return "battle_legendary_kyurem";
|
||||||
default:
|
default:
|
||||||
if (pokemon.species.legendary) {
|
if (pokemon.species.legendary) {
|
||||||
@ -282,80 +282,80 @@ export default class Battle {
|
|||||||
}
|
}
|
||||||
if (globalScene.musicPreference === MusicPreference.ALLGENS) {
|
if (globalScene.musicPreference === MusicPreference.ALLGENS) {
|
||||||
switch (pokemon.species.speciesId) {
|
switch (pokemon.species.speciesId) {
|
||||||
case Species.ARTICUNO:
|
case SpeciesId.ARTICUNO:
|
||||||
case Species.ZAPDOS:
|
case SpeciesId.ZAPDOS:
|
||||||
case Species.MOLTRES:
|
case SpeciesId.MOLTRES:
|
||||||
case Species.MEWTWO:
|
case SpeciesId.MEWTWO:
|
||||||
case Species.MEW:
|
case SpeciesId.MEW:
|
||||||
return "battle_legendary_kanto";
|
return "battle_legendary_kanto";
|
||||||
case Species.RAIKOU:
|
case SpeciesId.RAIKOU:
|
||||||
return "battle_legendary_raikou";
|
return "battle_legendary_raikou";
|
||||||
case Species.ENTEI:
|
case SpeciesId.ENTEI:
|
||||||
return "battle_legendary_entei";
|
return "battle_legendary_entei";
|
||||||
case Species.SUICUNE:
|
case SpeciesId.SUICUNE:
|
||||||
return "battle_legendary_suicune";
|
return "battle_legendary_suicune";
|
||||||
case Species.LUGIA:
|
case SpeciesId.LUGIA:
|
||||||
return "battle_legendary_lugia";
|
return "battle_legendary_lugia";
|
||||||
case Species.HO_OH:
|
case SpeciesId.HO_OH:
|
||||||
return "battle_legendary_ho_oh";
|
return "battle_legendary_ho_oh";
|
||||||
case Species.REGIROCK:
|
case SpeciesId.REGIROCK:
|
||||||
case Species.REGICE:
|
case SpeciesId.REGICE:
|
||||||
case Species.REGISTEEL:
|
case SpeciesId.REGISTEEL:
|
||||||
case Species.REGIGIGAS:
|
case SpeciesId.REGIGIGAS:
|
||||||
case Species.REGIDRAGO:
|
case SpeciesId.REGIDRAGO:
|
||||||
case Species.REGIELEKI:
|
case SpeciesId.REGIELEKI:
|
||||||
return "battle_legendary_regis_g6";
|
return "battle_legendary_regis_g6";
|
||||||
case Species.GROUDON:
|
case SpeciesId.GROUDON:
|
||||||
case Species.KYOGRE:
|
case SpeciesId.KYOGRE:
|
||||||
return "battle_legendary_gro_kyo";
|
return "battle_legendary_gro_kyo";
|
||||||
case Species.RAYQUAZA:
|
case SpeciesId.RAYQUAZA:
|
||||||
return "battle_legendary_rayquaza";
|
return "battle_legendary_rayquaza";
|
||||||
case Species.DEOXYS:
|
case SpeciesId.DEOXYS:
|
||||||
return "battle_legendary_deoxys";
|
return "battle_legendary_deoxys";
|
||||||
case Species.UXIE:
|
case SpeciesId.UXIE:
|
||||||
case Species.MESPRIT:
|
case SpeciesId.MESPRIT:
|
||||||
case Species.AZELF:
|
case SpeciesId.AZELF:
|
||||||
return "battle_legendary_lake_trio";
|
return "battle_legendary_lake_trio";
|
||||||
case Species.HEATRAN:
|
case SpeciesId.HEATRAN:
|
||||||
case Species.CRESSELIA:
|
case SpeciesId.CRESSELIA:
|
||||||
case Species.DARKRAI:
|
case SpeciesId.DARKRAI:
|
||||||
case Species.SHAYMIN:
|
case SpeciesId.SHAYMIN:
|
||||||
return "battle_legendary_sinnoh";
|
return "battle_legendary_sinnoh";
|
||||||
case Species.DIALGA:
|
case SpeciesId.DIALGA:
|
||||||
case Species.PALKIA:
|
case SpeciesId.PALKIA:
|
||||||
if (pokemon.species.getFormSpriteKey(pokemon.formIndex) === SpeciesFormKey.ORIGIN) {
|
if (pokemon.species.getFormSpriteKey(pokemon.formIndex) === SpeciesFormKey.ORIGIN) {
|
||||||
return "battle_legendary_origin_forme";
|
return "battle_legendary_origin_forme";
|
||||||
}
|
}
|
||||||
return "battle_legendary_dia_pal";
|
return "battle_legendary_dia_pal";
|
||||||
case Species.GIRATINA:
|
case SpeciesId.GIRATINA:
|
||||||
return "battle_legendary_giratina";
|
return "battle_legendary_giratina";
|
||||||
case Species.ARCEUS:
|
case SpeciesId.ARCEUS:
|
||||||
return "battle_legendary_arceus";
|
return "battle_legendary_arceus";
|
||||||
case Species.COBALION:
|
case SpeciesId.COBALION:
|
||||||
case Species.TERRAKION:
|
case SpeciesId.TERRAKION:
|
||||||
case Species.VIRIZION:
|
case SpeciesId.VIRIZION:
|
||||||
case Species.KELDEO:
|
case SpeciesId.KELDEO:
|
||||||
case Species.TORNADUS:
|
case SpeciesId.TORNADUS:
|
||||||
case Species.LANDORUS:
|
case SpeciesId.LANDORUS:
|
||||||
case Species.THUNDURUS:
|
case SpeciesId.THUNDURUS:
|
||||||
case Species.MELOETTA:
|
case SpeciesId.MELOETTA:
|
||||||
case Species.GENESECT:
|
case SpeciesId.GENESECT:
|
||||||
return "battle_legendary_unova";
|
return "battle_legendary_unova";
|
||||||
case Species.KYUREM:
|
case SpeciesId.KYUREM:
|
||||||
return "battle_legendary_kyurem";
|
return "battle_legendary_kyurem";
|
||||||
case Species.XERNEAS:
|
case SpeciesId.XERNEAS:
|
||||||
case Species.YVELTAL:
|
case SpeciesId.YVELTAL:
|
||||||
case Species.ZYGARDE:
|
case SpeciesId.ZYGARDE:
|
||||||
return "battle_legendary_xern_yvel";
|
return "battle_legendary_xern_yvel";
|
||||||
case Species.TAPU_KOKO:
|
case SpeciesId.TAPU_KOKO:
|
||||||
case Species.TAPU_LELE:
|
case SpeciesId.TAPU_LELE:
|
||||||
case Species.TAPU_BULU:
|
case SpeciesId.TAPU_BULU:
|
||||||
case Species.TAPU_FINI:
|
case SpeciesId.TAPU_FINI:
|
||||||
return "battle_legendary_tapu";
|
return "battle_legendary_tapu";
|
||||||
case Species.SOLGALEO:
|
case SpeciesId.SOLGALEO:
|
||||||
case Species.LUNALA:
|
case SpeciesId.LUNALA:
|
||||||
return "battle_legendary_sol_lun";
|
return "battle_legendary_sol_lun";
|
||||||
case Species.NECROZMA:
|
case SpeciesId.NECROZMA:
|
||||||
switch (pokemon.getFormKey()) {
|
switch (pokemon.getFormKey()) {
|
||||||
case "dusk-mane":
|
case "dusk-mane":
|
||||||
case "dawn-wings":
|
case "dawn-wings":
|
||||||
@ -365,50 +365,50 @@ export default class Battle {
|
|||||||
default:
|
default:
|
||||||
return "battle_legendary_sol_lun";
|
return "battle_legendary_sol_lun";
|
||||||
}
|
}
|
||||||
case Species.NIHILEGO:
|
case SpeciesId.NIHILEGO:
|
||||||
case Species.PHEROMOSA:
|
case SpeciesId.PHEROMOSA:
|
||||||
case Species.BUZZWOLE:
|
case SpeciesId.BUZZWOLE:
|
||||||
case Species.XURKITREE:
|
case SpeciesId.XURKITREE:
|
||||||
case Species.CELESTEELA:
|
case SpeciesId.CELESTEELA:
|
||||||
case Species.KARTANA:
|
case SpeciesId.KARTANA:
|
||||||
case Species.GUZZLORD:
|
case SpeciesId.GUZZLORD:
|
||||||
case Species.POIPOLE:
|
case SpeciesId.POIPOLE:
|
||||||
case Species.NAGANADEL:
|
case SpeciesId.NAGANADEL:
|
||||||
case Species.STAKATAKA:
|
case SpeciesId.STAKATAKA:
|
||||||
case Species.BLACEPHALON:
|
case SpeciesId.BLACEPHALON:
|
||||||
return "battle_legendary_ub";
|
return "battle_legendary_ub";
|
||||||
case Species.ZACIAN:
|
case SpeciesId.ZACIAN:
|
||||||
case Species.ZAMAZENTA:
|
case SpeciesId.ZAMAZENTA:
|
||||||
return "battle_legendary_zac_zam";
|
return "battle_legendary_zac_zam";
|
||||||
case Species.GLASTRIER:
|
case SpeciesId.GLASTRIER:
|
||||||
case Species.SPECTRIER:
|
case SpeciesId.SPECTRIER:
|
||||||
return "battle_legendary_glas_spec";
|
return "battle_legendary_glas_spec";
|
||||||
case Species.CALYREX:
|
case SpeciesId.CALYREX:
|
||||||
if (pokemon.getFormKey() === "ice" || pokemon.getFormKey() === "shadow") {
|
if (pokemon.getFormKey() === "ice" || pokemon.getFormKey() === "shadow") {
|
||||||
return "battle_legendary_riders";
|
return "battle_legendary_riders";
|
||||||
}
|
}
|
||||||
return "battle_legendary_calyrex";
|
return "battle_legendary_calyrex";
|
||||||
case Species.GALAR_ARTICUNO:
|
case SpeciesId.GALAR_ARTICUNO:
|
||||||
case Species.GALAR_ZAPDOS:
|
case SpeciesId.GALAR_ZAPDOS:
|
||||||
case Species.GALAR_MOLTRES:
|
case SpeciesId.GALAR_MOLTRES:
|
||||||
return "battle_legendary_birds_galar";
|
return "battle_legendary_birds_galar";
|
||||||
case Species.WO_CHIEN:
|
case SpeciesId.WO_CHIEN:
|
||||||
case Species.CHIEN_PAO:
|
case SpeciesId.CHIEN_PAO:
|
||||||
case Species.TING_LU:
|
case SpeciesId.TING_LU:
|
||||||
case Species.CHI_YU:
|
case SpeciesId.CHI_YU:
|
||||||
return "battle_legendary_ruinous";
|
return "battle_legendary_ruinous";
|
||||||
case Species.KORAIDON:
|
case SpeciesId.KORAIDON:
|
||||||
case Species.MIRAIDON:
|
case SpeciesId.MIRAIDON:
|
||||||
return "battle_legendary_kor_mir";
|
return "battle_legendary_kor_mir";
|
||||||
case Species.OKIDOGI:
|
case SpeciesId.OKIDOGI:
|
||||||
case Species.MUNKIDORI:
|
case SpeciesId.MUNKIDORI:
|
||||||
case Species.FEZANDIPITI:
|
case SpeciesId.FEZANDIPITI:
|
||||||
return "battle_legendary_loyal_three";
|
return "battle_legendary_loyal_three";
|
||||||
case Species.OGERPON:
|
case SpeciesId.OGERPON:
|
||||||
return "battle_legendary_ogerpon";
|
return "battle_legendary_ogerpon";
|
||||||
case Species.TERAPAGOS:
|
case SpeciesId.TERAPAGOS:
|
||||||
return "battle_legendary_terapagos";
|
return "battle_legendary_terapagos";
|
||||||
case Species.PECHARUNT:
|
case SpeciesId.PECHARUNT:
|
||||||
return "battle_legendary_pecharunt";
|
return "battle_legendary_pecharunt";
|
||||||
default:
|
default:
|
||||||
if (pokemon.species.legendary) {
|
if (pokemon.species.legendary) {
|
||||||
|
@ -54,7 +54,7 @@ import { AbilityId } from "#enums/ability-id";
|
|||||||
import { ArenaTagType } from "#enums/arena-tag-type";
|
import { ArenaTagType } from "#enums/arena-tag-type";
|
||||||
import { BattlerTagType } from "#enums/battler-tag-type";
|
import { BattlerTagType } from "#enums/battler-tag-type";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { SwitchType } from "#enums/switch-type";
|
import { SwitchType } from "#enums/switch-type";
|
||||||
import { MoveFlags } from "#enums/MoveFlags";
|
import { MoveFlags } from "#enums/MoveFlags";
|
||||||
import { MoveTarget } from "#enums/MoveTarget";
|
import { MoveTarget } from "#enums/MoveTarget";
|
||||||
@ -1265,7 +1265,7 @@ export class MoveTypeChangeAbAttr extends PreAttackAbAttr {
|
|||||||
!noAbilityTypeOverrideMoves.has(move.id) &&
|
!noAbilityTypeOverrideMoves.has(move.id) &&
|
||||||
(!pokemon.isTerastallized ||
|
(!pokemon.isTerastallized ||
|
||||||
(move.id !== MoveId.TERA_BLAST &&
|
(move.id !== MoveId.TERA_BLAST &&
|
||||||
(move.id !== MoveId.TERA_STARSTORM || pokemon.getTeraType() !== PokemonType.STELLAR || !pokemon.hasSpecies(Species.TERAPAGOS))));
|
(move.id !== MoveId.TERA_STARSTORM || pokemon.getTeraType() !== PokemonType.STELLAR || !pokemon.hasSpecies(SpeciesId.TERAPAGOS))));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -2776,8 +2776,8 @@ export class PostSummonFormChangeByWeatherAbAttr extends PostSummonAbAttr {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean {
|
override canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean {
|
||||||
const isCastformWithForecast = (pokemon.species.speciesId === Species.CASTFORM && this.ability === AbilityId.FORECAST);
|
const isCastformWithForecast = (pokemon.species.speciesId === SpeciesId.CASTFORM && this.ability === AbilityId.FORECAST);
|
||||||
const isCherrimWithFlowerGift = (pokemon.species.speciesId === Species.CHERRIM && this.ability === AbilityId.FLOWER_GIFT);
|
const isCherrimWithFlowerGift = (pokemon.species.speciesId === SpeciesId.CHERRIM && this.ability === AbilityId.FLOWER_GIFT);
|
||||||
return isCastformWithForecast || isCherrimWithFlowerGift;
|
return isCastformWithForecast || isCherrimWithFlowerGift;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2815,7 +2815,7 @@ export class CommanderAbAttr extends AbAttr {
|
|||||||
|
|
||||||
// TODO: Should this work with X + Dondozo fusions?
|
// TODO: Should this work with X + Dondozo fusions?
|
||||||
const ally = pokemon.getAlly();
|
const ally = pokemon.getAlly();
|
||||||
return globalScene.currentBattle?.double && !isNullOrUndefined(ally) && ally.species.speciesId === Species.DONDOZO
|
return globalScene.currentBattle?.double && !isNullOrUndefined(ally) && ally.species.speciesId === SpeciesId.DONDOZO
|
||||||
&& !(ally.isFainted() || ally.getTag(BattlerTagType.COMMANDED));
|
&& !(ally.isFainted() || ally.getTag(BattlerTagType.COMMANDED));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3824,8 +3824,8 @@ export class PostWeatherChangeFormChangeAbAttr extends PostWeatherChangeAbAttr {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override canApplyPostWeatherChange(pokemon: Pokemon, passive: boolean, simulated: boolean, weather: WeatherType, args: any[]): boolean {
|
override canApplyPostWeatherChange(pokemon: Pokemon, passive: boolean, simulated: boolean, weather: WeatherType, args: any[]): boolean {
|
||||||
const isCastformWithForecast = (pokemon.species.speciesId === Species.CASTFORM && this.ability === AbilityId.FORECAST);
|
const isCastformWithForecast = (pokemon.species.speciesId === SpeciesId.CASTFORM && this.ability === AbilityId.FORECAST);
|
||||||
const isCherrimWithFlowerGift = (pokemon.species.speciesId === Species.CHERRIM && this.ability === AbilityId.FLOWER_GIFT);
|
const isCherrimWithFlowerGift = (pokemon.species.speciesId === SpeciesId.CHERRIM && this.ability === AbilityId.FLOWER_GIFT);
|
||||||
|
|
||||||
return isCastformWithForecast || isCherrimWithFlowerGift;
|
return isCastformWithForecast || isCherrimWithFlowerGift;
|
||||||
}
|
}
|
||||||
@ -5273,7 +5273,7 @@ export class IllusionPreSummonAbAttr extends PreSummonAbAttr {
|
|||||||
// Illusion will also not activate if the Pokémon with Illusion is Terastallized and the last Pokémon in the party is Ogerpon or Terapagos.
|
// Illusion will also not activate if the Pokémon with Illusion is Terastallized and the last Pokémon in the party is Ogerpon or Terapagos.
|
||||||
if (
|
if (
|
||||||
lastPokemon === pokemon ||
|
lastPokemon === pokemon ||
|
||||||
((speciesId === Species.OGERPON || speciesId === Species.TERAPAGOS) && (lastPokemon.isTerastallized || pokemon.isTerastallized))
|
((speciesId === SpeciesId.OGERPON || speciesId === SpeciesId.TERAPAGOS) && (lastPokemon.isTerastallized || pokemon.isTerastallized))
|
||||||
) {
|
) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -6423,8 +6423,8 @@ function setAbilityRevealed(pokemon: Pokemon): void {
|
|||||||
*/
|
*/
|
||||||
function getPokemonWithWeatherBasedForms() {
|
function getPokemonWithWeatherBasedForms() {
|
||||||
return globalScene.getField(true).filter(p =>
|
return globalScene.getField(true).filter(p =>
|
||||||
(p.hasAbility(AbilityId.FORECAST) && p.species.speciesId === Species.CASTFORM)
|
(p.hasAbility(AbilityId.FORECAST) && p.species.speciesId === SpeciesId.CASTFORM)
|
||||||
|| (p.hasAbility(AbilityId.FLOWER_GIFT) && p.species.speciesId === Species.CHERRIM)
|
|| (p.hasAbility(AbilityId.FLOWER_GIFT) && p.species.speciesId === SpeciesId.CHERRIM)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,7 @@
|
|||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
|
|
||||||
export type SignatureSpecies = {
|
export type SignatureSpecies = {
|
||||||
[key in string]: (Species | Species[])[];
|
[key in string]: (SpeciesId | SpeciesId[])[];
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -18,87 +18,87 @@ export type SignatureSpecies = {
|
|||||||
*/
|
*/
|
||||||
export const signatureSpecies: SignatureSpecies = new Proxy({
|
export const signatureSpecies: SignatureSpecies = new Proxy({
|
||||||
// Gym Leaders- Kanto
|
// Gym Leaders- Kanto
|
||||||
BROCK: [Species.ONIX, Species.GEODUDE, [Species.OMANYTE, Species.KABUTO], Species.AERODACTYL],
|
BROCK: [SpeciesId.ONIX, SpeciesId.GEODUDE, [SpeciesId.OMANYTE, SpeciesId.KABUTO], SpeciesId.AERODACTYL],
|
||||||
MISTY: [Species.STARYU, Species.PSYDUCK, Species.WOOPER, Species.LAPRAS],
|
MISTY: [SpeciesId.STARYU, SpeciesId.PSYDUCK, SpeciesId.WOOPER, SpeciesId.LAPRAS],
|
||||||
LT_SURGE: [Species.PICHU, Species.VOLTORB, Species.ELEKID, Species.JOLTEON],
|
LT_SURGE: [SpeciesId.PICHU, SpeciesId.VOLTORB, SpeciesId.ELEKID, SpeciesId.JOLTEON],
|
||||||
ERIKA: [Species.ODDISH, Species.BELLSPROUT, Species.TANGELA, Species.HOPPIP],
|
ERIKA: [SpeciesId.ODDISH, SpeciesId.BELLSPROUT, SpeciesId.TANGELA, SpeciesId.HOPPIP],
|
||||||
JANINE: [Species.VENONAT, Species.SPINARAK, Species.ZUBAT, Species.KOFFING],
|
JANINE: [SpeciesId.VENONAT, SpeciesId.SPINARAK, SpeciesId.ZUBAT, SpeciesId.KOFFING],
|
||||||
SABRINA: [Species.ABRA, Species.MR_MIME, Species.SMOOCHUM, Species.ESPEON],
|
SABRINA: [SpeciesId.ABRA, SpeciesId.MR_MIME, SpeciesId.SMOOCHUM, SpeciesId.ESPEON],
|
||||||
BLAINE: [Species.GROWLITHE, Species.PONYTA, Species.MAGBY, Species.VULPIX],
|
BLAINE: [SpeciesId.GROWLITHE, SpeciesId.PONYTA, SpeciesId.MAGBY, SpeciesId.VULPIX],
|
||||||
GIOVANNI: [Species.RHYHORN, Species.MEOWTH, [Species.NIDORAN_F, Species.NIDORAN_M], Species.DIGLETT], // Tera Ground Meowth
|
GIOVANNI: [SpeciesId.RHYHORN, SpeciesId.MEOWTH, [SpeciesId.NIDORAN_F, SpeciesId.NIDORAN_M], SpeciesId.DIGLETT], // Tera Ground Meowth
|
||||||
// Gym Leaders- Johto
|
// Gym Leaders- Johto
|
||||||
FALKNER: [Species.PIDGEY, Species.HOOTHOOT, Species.NATU, Species.MURKROW],
|
FALKNER: [SpeciesId.PIDGEY, SpeciesId.HOOTHOOT, SpeciesId.NATU, SpeciesId.MURKROW],
|
||||||
BUGSY: [Species.SCYTHER, Species.SHUCKLE, Species.YANMA, [Species.PINSIR, Species.HERACROSS]],
|
BUGSY: [SpeciesId.SCYTHER, SpeciesId.SHUCKLE, SpeciesId.YANMA, [SpeciesId.PINSIR, SpeciesId.HERACROSS]],
|
||||||
WHITNEY: [Species.MILTANK, Species.AIPOM, Species.IGGLYBUFF, [Species.GIRAFARIG, Species.STANTLER]],
|
WHITNEY: [SpeciesId.MILTANK, SpeciesId.AIPOM, SpeciesId.IGGLYBUFF, [SpeciesId.GIRAFARIG, SpeciesId.STANTLER]],
|
||||||
MORTY: [Species.GASTLY, Species.MISDREAVUS, Species.DUSKULL, Species.SABLEYE],
|
MORTY: [SpeciesId.GASTLY, SpeciesId.MISDREAVUS, SpeciesId.DUSKULL, SpeciesId.SABLEYE],
|
||||||
CHUCK: [Species.POLIWRATH, Species.MANKEY, Species.TYROGUE, Species.MACHOP],
|
CHUCK: [SpeciesId.POLIWRATH, SpeciesId.MANKEY, SpeciesId.TYROGUE, SpeciesId.MACHOP],
|
||||||
JASMINE: [Species.STEELIX, Species.MAGNEMITE, Species.PINECO, Species.SKARMORY],
|
JASMINE: [SpeciesId.STEELIX, SpeciesId.MAGNEMITE, SpeciesId.PINECO, SpeciesId.SKARMORY],
|
||||||
PRYCE: [Species.SWINUB, Species.SEEL, Species.SHELLDER, Species.SNEASEL],
|
PRYCE: [SpeciesId.SWINUB, SpeciesId.SEEL, SpeciesId.SHELLDER, SpeciesId.SNEASEL],
|
||||||
CLAIR: [Species.HORSEA, Species.DRATINI, Species.MAGIKARP, Species.DRUDDIGON], // Tera Dragon Magikarp
|
CLAIR: [SpeciesId.HORSEA, SpeciesId.DRATINI, SpeciesId.MAGIKARP, SpeciesId.DRUDDIGON], // Tera Dragon Magikarp
|
||||||
// Gym Leaders- Hoenn
|
// Gym Leaders- Hoenn
|
||||||
ROXANNE: [Species.NOSEPASS, Species.GEODUDE, [Species.LILEEP, Species.ANORITH], Species.ARON],
|
ROXANNE: [SpeciesId.NOSEPASS, SpeciesId.GEODUDE, [SpeciesId.LILEEP, SpeciesId.ANORITH], SpeciesId.ARON],
|
||||||
BRAWLY: [Species.MAKUHITA, Species.MACHOP, Species.MEDITITE, Species.SHROOMISH],
|
BRAWLY: [SpeciesId.MAKUHITA, SpeciesId.MACHOP, SpeciesId.MEDITITE, SpeciesId.SHROOMISH],
|
||||||
WATTSON: [Species.ELECTRIKE, Species.VOLTORB, Species.MAGNEMITE, [Species.PLUSLE, Species.MINUN]],
|
WATTSON: [SpeciesId.ELECTRIKE, SpeciesId.VOLTORB, SpeciesId.MAGNEMITE, [SpeciesId.PLUSLE, SpeciesId.MINUN]],
|
||||||
FLANNERY: [Species.TORKOAL, Species.SLUGMA, Species.NUMEL, Species.HOUNDOUR],
|
FLANNERY: [SpeciesId.TORKOAL, SpeciesId.SLUGMA, SpeciesId.NUMEL, SpeciesId.HOUNDOUR],
|
||||||
NORMAN: [Species.SLAKOTH, Species.KECLEON, Species.WHISMUR, Species.ZANGOOSE],
|
NORMAN: [SpeciesId.SLAKOTH, SpeciesId.KECLEON, SpeciesId.WHISMUR, SpeciesId.ZANGOOSE],
|
||||||
WINONA: [Species.SWABLU, Species.WINGULL, Species.TROPIUS, Species.SKARMORY],
|
WINONA: [SpeciesId.SWABLU, SpeciesId.WINGULL, SpeciesId.TROPIUS, SpeciesId.SKARMORY],
|
||||||
TATE: [Species.SOLROCK, Species.NATU, Species.CHINGLING, Species.GALLADE],
|
TATE: [SpeciesId.SOLROCK, SpeciesId.NATU, SpeciesId.CHINGLING, SpeciesId.GALLADE],
|
||||||
LIZA: [Species.LUNATONE, Species.BALTOY, Species.SPOINK, Species.GARDEVOIR],
|
LIZA: [SpeciesId.LUNATONE, SpeciesId.BALTOY, SpeciesId.SPOINK, SpeciesId.GARDEVOIR],
|
||||||
JUAN: [Species.HORSEA, Species.SPHEAL, Species.BARBOACH, Species.CORPHISH],
|
JUAN: [SpeciesId.HORSEA, SpeciesId.SPHEAL, SpeciesId.BARBOACH, SpeciesId.CORPHISH],
|
||||||
// Gym Leaders- Sinnoh
|
// Gym Leaders- Sinnoh
|
||||||
ROARK: [Species.CRANIDOS, Species.GEODUDE, Species.NOSEPASS, Species.LARVITAR],
|
ROARK: [SpeciesId.CRANIDOS, SpeciesId.GEODUDE, SpeciesId.NOSEPASS, SpeciesId.LARVITAR],
|
||||||
GARDENIA: [Species.BUDEW, Species.CHERUBI, Species.TURTWIG, Species.LEAFEON],
|
GARDENIA: [SpeciesId.BUDEW, SpeciesId.CHERUBI, SpeciesId.TURTWIG, SpeciesId.LEAFEON],
|
||||||
MAYLENE: [Species.RIOLU, Species.MEDITITE, Species.CHIMCHAR, Species.CROAGUNK],
|
MAYLENE: [SpeciesId.RIOLU, SpeciesId.MEDITITE, SpeciesId.CHIMCHAR, SpeciesId.CROAGUNK],
|
||||||
CRASHER_WAKE: [Species.BUIZEL, Species.WOOPER, Species.PIPLUP, Species.MAGIKARP],
|
CRASHER_WAKE: [SpeciesId.BUIZEL, SpeciesId.WOOPER, SpeciesId.PIPLUP, SpeciesId.MAGIKARP],
|
||||||
FANTINA: [Species.MISDREAVUS, Species.DRIFLOON, Species.DUSKULL, Species.SPIRITOMB],
|
FANTINA: [SpeciesId.MISDREAVUS, SpeciesId.DRIFLOON, SpeciesId.DUSKULL, SpeciesId.SPIRITOMB],
|
||||||
BYRON: [Species.SHIELDON, Species.BRONZOR, Species.ARON, Species.SKARMORY],
|
BYRON: [SpeciesId.SHIELDON, SpeciesId.BRONZOR, SpeciesId.ARON, SpeciesId.SKARMORY],
|
||||||
CANDICE: [Species.FROSLASS, Species.SNOVER, Species.SNEASEL, Species.GLACEON],
|
CANDICE: [SpeciesId.FROSLASS, SpeciesId.SNOVER, SpeciesId.SNEASEL, SpeciesId.GLACEON],
|
||||||
VOLKNER: [Species.ELEKID, Species.SHINX, Species.CHINCHOU, Species.ROTOM],
|
VOLKNER: [SpeciesId.ELEKID, SpeciesId.SHINX, SpeciesId.CHINCHOU, SpeciesId.ROTOM],
|
||||||
// Gym Leaders- Unova
|
// Gym Leaders- Unova
|
||||||
CILAN: [Species.PANSAGE, Species.SNIVY, Species.MARACTUS, Species.FERROSEED],
|
CILAN: [SpeciesId.PANSAGE, SpeciesId.SNIVY, SpeciesId.MARACTUS, SpeciesId.FERROSEED],
|
||||||
CHILI: [Species.PANSEAR, Species.TEPIG, Species.HEATMOR, Species.DARUMAKA],
|
CHILI: [SpeciesId.PANSEAR, SpeciesId.TEPIG, SpeciesId.HEATMOR, SpeciesId.DARUMAKA],
|
||||||
CRESS: [Species.PANPOUR, Species.OSHAWOTT, Species.BASCULIN, Species.TYMPOLE],
|
CRESS: [SpeciesId.PANPOUR, SpeciesId.OSHAWOTT, SpeciesId.BASCULIN, SpeciesId.TYMPOLE],
|
||||||
CHEREN: [Species.LILLIPUP, Species.MINCCINO, Species.PIDOVE, Species.BOUFFALANT],
|
CHEREN: [SpeciesId.LILLIPUP, SpeciesId.MINCCINO, SpeciesId.PIDOVE, SpeciesId.BOUFFALANT],
|
||||||
LENORA: [Species.PATRAT, Species.DEERLING, Species.AUDINO, Species.BRAVIARY],
|
LENORA: [SpeciesId.PATRAT, SpeciesId.DEERLING, SpeciesId.AUDINO, SpeciesId.BRAVIARY],
|
||||||
ROXIE: [Species.VENIPEDE, Species.KOFFING, Species.TRUBBISH, Species.TOXEL],
|
ROXIE: [SpeciesId.VENIPEDE, SpeciesId.KOFFING, SpeciesId.TRUBBISH, SpeciesId.TOXEL],
|
||||||
BURGH: [Species.SEWADDLE, Species.DWEBBLE, [Species.KARRABLAST, Species.SHELMET], Species.DURANT],
|
BURGH: [SpeciesId.SEWADDLE, SpeciesId.DWEBBLE, [SpeciesId.KARRABLAST, SpeciesId.SHELMET], SpeciesId.DURANT],
|
||||||
ELESA: [Species.BLITZLE, Species.EMOLGA, Species.JOLTIK, Species.TYNAMO],
|
ELESA: [SpeciesId.BLITZLE, SpeciesId.EMOLGA, SpeciesId.JOLTIK, SpeciesId.TYNAMO],
|
||||||
CLAY: [Species.DRILBUR, Species.SANDILE, Species.TYMPOLE, Species.GOLETT],
|
CLAY: [SpeciesId.DRILBUR, SpeciesId.SANDILE, SpeciesId.TYMPOLE, SpeciesId.GOLETT],
|
||||||
SKYLA: [Species.DUCKLETT, Species.WOOBAT, [Species.RUFFLET, Species.VULLABY], Species.ARCHEN],
|
SKYLA: [SpeciesId.DUCKLETT, SpeciesId.WOOBAT, [SpeciesId.RUFFLET, SpeciesId.VULLABY], SpeciesId.ARCHEN],
|
||||||
BRYCEN: [Species.CRYOGONAL, Species.VANILLITE, Species.CUBCHOO, Species.GALAR_DARUMAKA],
|
BRYCEN: [SpeciesId.CRYOGONAL, SpeciesId.VANILLITE, SpeciesId.CUBCHOO, SpeciesId.GALAR_DARUMAKA],
|
||||||
DRAYDEN: [Species.AXEW, Species.DRUDDIGON, Species.TRAPINCH, Species.DEINO],
|
DRAYDEN: [SpeciesId.AXEW, SpeciesId.DRUDDIGON, SpeciesId.TRAPINCH, SpeciesId.DEINO],
|
||||||
MARLON: [Species.FRILLISH, Species.TIRTOUGA, Species.WAILMER, Species.MANTYKE],
|
MARLON: [SpeciesId.FRILLISH, SpeciesId.TIRTOUGA, SpeciesId.WAILMER, SpeciesId.MANTYKE],
|
||||||
// Gym Leaders- Kalos
|
// Gym Leaders- Kalos
|
||||||
VIOLA: [Species.SCATTERBUG, Species.SURSKIT, Species.CUTIEFLY, Species.BLIPBUG],
|
VIOLA: [SpeciesId.SCATTERBUG, SpeciesId.SURSKIT, SpeciesId.CUTIEFLY, SpeciesId.BLIPBUG],
|
||||||
GRANT: [Species.TYRUNT, Species.AMAURA, Species.BINACLE, Species.DWEBBLE],
|
GRANT: [SpeciesId.TYRUNT, SpeciesId.AMAURA, SpeciesId.BINACLE, SpeciesId.DWEBBLE],
|
||||||
KORRINA: [Species.RIOLU, Species.MIENFOO, Species.HAWLUCHA, Species.PANCHAM],
|
KORRINA: [SpeciesId.RIOLU, SpeciesId.MIENFOO, SpeciesId.HAWLUCHA, SpeciesId.PANCHAM],
|
||||||
RAMOS: [Species.SKIDDO, Species.HOPPIP, Species.BELLSPROUT, [Species.PHANTUMP, Species.PUMPKABOO]],
|
RAMOS: [SpeciesId.SKIDDO, SpeciesId.HOPPIP, SpeciesId.BELLSPROUT, [SpeciesId.PHANTUMP, SpeciesId.PUMPKABOO]],
|
||||||
CLEMONT: [Species.HELIOPTILE, Species.MAGNEMITE, Species.DEDENNE, Species.ROTOM],
|
CLEMONT: [SpeciesId.HELIOPTILE, SpeciesId.MAGNEMITE, SpeciesId.DEDENNE, SpeciesId.ROTOM],
|
||||||
VALERIE: [Species.SYLVEON, Species.MAWILE, Species.MR_MIME, [Species.SPRITZEE, Species.SWIRLIX]],
|
VALERIE: [SpeciesId.SYLVEON, SpeciesId.MAWILE, SpeciesId.MR_MIME, [SpeciesId.SPRITZEE, SpeciesId.SWIRLIX]],
|
||||||
OLYMPIA: [Species.ESPURR, Species.SIGILYPH, Species.INKAY, Species.SLOWKING],
|
OLYMPIA: [SpeciesId.ESPURR, SpeciesId.SIGILYPH, SpeciesId.INKAY, SpeciesId.SLOWKING],
|
||||||
WULFRIC: [Species.BERGMITE, Species.SNOVER, Species.CRYOGONAL, Species.SWINUB],
|
WULFRIC: [SpeciesId.BERGMITE, SpeciesId.SNOVER, SpeciesId.CRYOGONAL, SpeciesId.SWINUB],
|
||||||
// Gym Leaders- Galar
|
// Gym Leaders- Galar
|
||||||
MILO: [Species.GOSSIFLEUR, Species.SEEDOT, Species.APPLIN, Species.LOTAD],
|
MILO: [SpeciesId.GOSSIFLEUR, SpeciesId.SEEDOT, SpeciesId.APPLIN, SpeciesId.LOTAD],
|
||||||
NESSA: [Species.CHEWTLE, Species.WIMPOD, Species.ARROKUDA, Species.MAREANIE],
|
NESSA: [SpeciesId.CHEWTLE, SpeciesId.WIMPOD, SpeciesId.ARROKUDA, SpeciesId.MAREANIE],
|
||||||
KABU: [Species.SIZZLIPEDE, Species.VULPIX, Species.GROWLITHE, Species.TORKOAL],
|
KABU: [SpeciesId.SIZZLIPEDE, SpeciesId.VULPIX, SpeciesId.GROWLITHE, SpeciesId.TORKOAL],
|
||||||
BEA: [Species.MACHOP, Species.GALAR_FARFETCHD, Species.CLOBBOPUS, Species.FALINKS],
|
BEA: [SpeciesId.MACHOP, SpeciesId.GALAR_FARFETCHD, SpeciesId.CLOBBOPUS, SpeciesId.FALINKS],
|
||||||
ALLISTER: [Species.GASTLY, Species.GALAR_YAMASK, Species.GALAR_CORSOLA, Species.SINISTEA],
|
ALLISTER: [SpeciesId.GASTLY, SpeciesId.GALAR_YAMASK, SpeciesId.GALAR_CORSOLA, SpeciesId.SINISTEA],
|
||||||
OPAL: [Species.MILCERY, Species.GALAR_WEEZING, Species.TOGEPI, Species.MAWILE],
|
OPAL: [SpeciesId.MILCERY, SpeciesId.GALAR_WEEZING, SpeciesId.TOGEPI, SpeciesId.MAWILE],
|
||||||
BEDE: [Species.HATENNA, Species.GALAR_PONYTA, Species.GARDEVOIR, Species.SYLVEON],
|
BEDE: [SpeciesId.HATENNA, SpeciesId.GALAR_PONYTA, SpeciesId.GARDEVOIR, SpeciesId.SYLVEON],
|
||||||
GORDIE: [Species.ROLYCOLY, [Species.SHUCKLE, Species.BINACLE], Species.STONJOURNER, Species.LARVITAR],
|
GORDIE: [SpeciesId.ROLYCOLY, [SpeciesId.SHUCKLE, SpeciesId.BINACLE], SpeciesId.STONJOURNER, SpeciesId.LARVITAR],
|
||||||
MELONY: [Species.LAPRAS, Species.SNOM, Species.EISCUE, [Species.GALAR_MR_MIME, Species.GALAR_DARUMAKA]],
|
MELONY: [SpeciesId.LAPRAS, SpeciesId.SNOM, SpeciesId.EISCUE, [SpeciesId.GALAR_MR_MIME, SpeciesId.GALAR_DARUMAKA]],
|
||||||
PIERS: [Species.GALAR_ZIGZAGOON, Species.SCRAGGY, Species.TOXEL, Species.INKAY], // Tera Dark Toxel
|
PIERS: [SpeciesId.GALAR_ZIGZAGOON, SpeciesId.SCRAGGY, SpeciesId.TOXEL, SpeciesId.INKAY], // Tera Dark Toxel
|
||||||
MARNIE: [Species.IMPIDIMP, Species.MORPEKO, Species.PURRLOIN, Species.CROAGUNK], // Tera Dark Croagunk
|
MARNIE: [SpeciesId.IMPIDIMP, SpeciesId.MORPEKO, SpeciesId.PURRLOIN, SpeciesId.CROAGUNK], // Tera Dark Croagunk
|
||||||
RAIHAN: [Species.DURALUDON, Species.TRAPINCH, Species.GOOMY, Species.TURTONATOR],
|
RAIHAN: [SpeciesId.DURALUDON, SpeciesId.TRAPINCH, SpeciesId.GOOMY, SpeciesId.TURTONATOR],
|
||||||
// Gym Leaders- Paldea; First slot is Tera
|
// Gym Leaders- Paldea; First slot is Tera
|
||||||
KATY: [Species.TEDDIURSA, Species.NYMBLE, Species.TAROUNTULA, Species.RELLOR], // Tera Bug Teddiursa
|
KATY: [SpeciesId.TEDDIURSA, SpeciesId.NYMBLE, SpeciesId.TAROUNTULA, SpeciesId.RELLOR], // Tera Bug Teddiursa
|
||||||
BRASSIUS: [Species.BONSLY, Species.SMOLIV, Species.BRAMBLIN, Species.SUNKERN], // Tera Grass Bonsly
|
BRASSIUS: [SpeciesId.BONSLY, SpeciesId.SMOLIV, SpeciesId.BRAMBLIN, SpeciesId.SUNKERN], // Tera Grass Bonsly
|
||||||
IONO: [Species.MISDREAVUS, Species.TADBULB, Species.WATTREL, Species.MAGNEMITE], // Tera Ghost Misdreavus
|
IONO: [SpeciesId.MISDREAVUS, SpeciesId.TADBULB, SpeciesId.WATTREL, SpeciesId.MAGNEMITE], // Tera Ghost Misdreavus
|
||||||
KOFU: [Species.CRABRAWLER, Species.VELUZA, Species.WIGLETT, Species.WINGULL], // Tera Water Crabrawler
|
KOFU: [SpeciesId.CRABRAWLER, SpeciesId.VELUZA, SpeciesId.WIGLETT, SpeciesId.WINGULL], // Tera Water Crabrawler
|
||||||
LARRY: [Species.STARLY, Species.DUNSPARCE, Species.LECHONK, Species.KOMALA], // Tera Normal Starly
|
LARRY: [SpeciesId.STARLY, SpeciesId.DUNSPARCE, SpeciesId.LECHONK, SpeciesId.KOMALA], // Tera Normal Starly
|
||||||
RYME: [Species.TOXEL, Species.GREAVARD, Species.SHUPPET, Species.MIMIKYU], // Tera Ghost Toxel
|
RYME: [SpeciesId.TOXEL, SpeciesId.GREAVARD, SpeciesId.SHUPPET, SpeciesId.MIMIKYU], // Tera Ghost Toxel
|
||||||
TULIP: [Species.FLABEBE, Species.FLITTLE, Species.RALTS, Species.GIRAFARIG], // Tera Psychic Flabebe
|
TULIP: [SpeciesId.FLABEBE, SpeciesId.FLITTLE, SpeciesId.RALTS, SpeciesId.GIRAFARIG], // Tera Psychic Flabebe
|
||||||
GRUSHA: [Species.SWABLU, Species.CETODDLE, Species.SNOM, Species.CUBCHOO], // Tera Ice Swablu
|
GRUSHA: [SpeciesId.SWABLU, SpeciesId.CETODDLE, SpeciesId.SNOM, SpeciesId.CUBCHOO], // Tera Ice Swablu
|
||||||
}, {
|
}, {
|
||||||
get(target, prop: string) {
|
get(target, prop: string) {
|
||||||
return target[prop as keyof SignatureSpecies] ?? [];
|
return target[prop as keyof SignatureSpecies] ?? [];
|
||||||
|
@ -1,29 +1,29 @@
|
|||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A list of all {@link https://bulbapedia.bulbagarden.net/wiki/Paradox_Pok%C3%A9mon | Paradox Pokemon}, NOT including the legendaries Miraidon and Koraidon.
|
* A list of all {@link https://bulbapedia.bulbagarden.net/wiki/Paradox_Pok%C3%A9mon | Paradox Pokemon}, NOT including the legendaries Miraidon and Koraidon.
|
||||||
*/
|
*/
|
||||||
export const NON_LEGEND_PARADOX_POKEMON = [
|
export const NON_LEGEND_PARADOX_POKEMON = [
|
||||||
Species.GREAT_TUSK,
|
SpeciesId.GREAT_TUSK,
|
||||||
Species.SCREAM_TAIL,
|
SpeciesId.SCREAM_TAIL,
|
||||||
Species.BRUTE_BONNET,
|
SpeciesId.BRUTE_BONNET,
|
||||||
Species.FLUTTER_MANE,
|
SpeciesId.FLUTTER_MANE,
|
||||||
Species.SLITHER_WING,
|
SpeciesId.SLITHER_WING,
|
||||||
Species.SANDY_SHOCKS,
|
SpeciesId.SANDY_SHOCKS,
|
||||||
Species.ROARING_MOON,
|
SpeciesId.ROARING_MOON,
|
||||||
Species.WALKING_WAKE,
|
SpeciesId.WALKING_WAKE,
|
||||||
Species.GOUGING_FIRE,
|
SpeciesId.GOUGING_FIRE,
|
||||||
Species.RAGING_BOLT,
|
SpeciesId.RAGING_BOLT,
|
||||||
Species.IRON_TREADS,
|
SpeciesId.IRON_TREADS,
|
||||||
Species.IRON_BUNDLE,
|
SpeciesId.IRON_BUNDLE,
|
||||||
Species.IRON_HANDS,
|
SpeciesId.IRON_HANDS,
|
||||||
Species.IRON_JUGULIS,
|
SpeciesId.IRON_JUGULIS,
|
||||||
Species.IRON_MOTH,
|
SpeciesId.IRON_MOTH,
|
||||||
Species.IRON_THORNS,
|
SpeciesId.IRON_THORNS,
|
||||||
Species.IRON_VALIANT,
|
SpeciesId.IRON_VALIANT,
|
||||||
Species.IRON_LEAVES,
|
SpeciesId.IRON_LEAVES,
|
||||||
Species.IRON_BOULDER,
|
SpeciesId.IRON_BOULDER,
|
||||||
Species.IRON_CROWN,
|
SpeciesId.IRON_CROWN,
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -32,15 +32,15 @@ export const NON_LEGEND_PARADOX_POKEMON = [
|
|||||||
* Note that all of these Ultra Beasts are still considered Sub-Legendary.
|
* Note that all of these Ultra Beasts are still considered Sub-Legendary.
|
||||||
*/
|
*/
|
||||||
export const NON_LEGEND_ULTRA_BEASTS = [
|
export const NON_LEGEND_ULTRA_BEASTS = [
|
||||||
Species.NIHILEGO,
|
SpeciesId.NIHILEGO,
|
||||||
Species.BUZZWOLE,
|
SpeciesId.BUZZWOLE,
|
||||||
Species.PHEROMOSA,
|
SpeciesId.PHEROMOSA,
|
||||||
Species.XURKITREE,
|
SpeciesId.XURKITREE,
|
||||||
Species.CELESTEELA,
|
SpeciesId.CELESTEELA,
|
||||||
Species.KARTANA,
|
SpeciesId.KARTANA,
|
||||||
Species.GUZZLORD,
|
SpeciesId.GUZZLORD,
|
||||||
Species.POIPOLE,
|
SpeciesId.POIPOLE,
|
||||||
Species.NAGANADEL,
|
SpeciesId.NAGANADEL,
|
||||||
Species.STAKATAKA,
|
SpeciesId.STAKATAKA,
|
||||||
Species.BLACEPHALON,
|
SpeciesId.BLACEPHALON,
|
||||||
];
|
];
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
134784
src/data/balance/tms.ts
134784
src/data/balance/tms.ts
File diff suppressed because it is too large
Load Diff
@ -39,7 +39,7 @@ import { AbilityId } from "#enums/ability-id";
|
|||||||
import { BattlerTagType } from "#enums/battler-tag-type";
|
import { BattlerTagType } from "#enums/battler-tag-type";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { PokemonAnimType } from "#enums/pokemon-anim-type";
|
import { PokemonAnimType } from "#enums/pokemon-anim-type";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { EFFECTIVE_STATS, getStatKey, Stat, type BattleStat, type EffectiveStat } from "#enums/stat";
|
import { EFFECTIVE_STATS, getStatKey, Stat, type BattleStat, type EffectiveStat } from "#enums/stat";
|
||||||
import { StatusEffect } from "#enums/status-effect";
|
import { StatusEffect } from "#enums/status-effect";
|
||||||
import { WeatherType } from "#enums/weather-type";
|
import { WeatherType } from "#enums/weather-type";
|
||||||
@ -2684,7 +2684,7 @@ export class GulpMissileTag extends BattlerTag {
|
|||||||
pokemon.formIndex === 0 &&
|
pokemon.formIndex === 0 &&
|
||||||
!pokemon.getTag(BattlerTagType.GULP_MISSILE_ARROKUDA) &&
|
!pokemon.getTag(BattlerTagType.GULP_MISSILE_ARROKUDA) &&
|
||||||
!pokemon.getTag(BattlerTagType.GULP_MISSILE_PIKACHU);
|
!pokemon.getTag(BattlerTagType.GULP_MISSILE_PIKACHU);
|
||||||
const isCramorant = pokemon.species.speciesId === Species.CRAMORANT;
|
const isCramorant = pokemon.species.speciesId === SpeciesId.CRAMORANT;
|
||||||
|
|
||||||
return isSurfOrDive && isNormalForm && isCramorant;
|
return isSurfOrDive && isNormalForm && isCramorant;
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ import { BattleType } from "#enums/battle-type";
|
|||||||
import Trainer, { TrainerVariant } from "#app/field/trainer";
|
import Trainer, { TrainerVariant } from "#app/field/trainer";
|
||||||
import { PokemonType } from "#enums/pokemon-type";
|
import { PokemonType } from "#enums/pokemon-type";
|
||||||
import { Challenges } from "#enums/challenges";
|
import { Challenges } from "#enums/challenges";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { TrainerType } from "#enums/trainer-type";
|
import { TrainerType } from "#enums/trainer-type";
|
||||||
import { Nature } from "#enums/nature";
|
import { Nature } from "#enums/nature";
|
||||||
import type { MoveId } from "#enums/move-id";
|
import type { MoveId } from "#enums/move-id";
|
||||||
@ -305,11 +305,11 @@ export abstract class Challenge {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* An apply function for STARTER_COST challenges. Derived classes should alter this.
|
* An apply function for STARTER_COST challenges. Derived classes should alter this.
|
||||||
* @param _species {@link Species} The pokemon to change the cost of.
|
* @param _species {@link SpeciesId} The pokemon to change the cost of.
|
||||||
* @param _cost {@link NumberHolder} The cost of the starter.
|
* @param _cost {@link NumberHolder} The cost of the starter.
|
||||||
* @returns {@link boolean} Whether this function did anything.
|
* @returns {@link boolean} Whether this function did anything.
|
||||||
*/
|
*/
|
||||||
applyStarterCost(_species: Species, _cost: NumberHolder): boolean {
|
applyStarterCost(_species: SpeciesId, _cost: NumberHolder): boolean {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -696,7 +696,7 @@ export class SingleGenerationChallenge extends Challenge {
|
|||||||
|
|
||||||
interface monotypeOverride {
|
interface monotypeOverride {
|
||||||
/** The species to override */
|
/** The species to override */
|
||||||
species: Species;
|
species: SpeciesId;
|
||||||
/** The type to count as */
|
/** The type to count as */
|
||||||
type: PokemonType;
|
type: PokemonType;
|
||||||
/** If part of a fusion, should we check the fused species instead of the base species? */
|
/** If part of a fusion, should we check the fused species instead of the base species? */
|
||||||
@ -708,7 +708,7 @@ interface monotypeOverride {
|
|||||||
*/
|
*/
|
||||||
export class SingleTypeChallenge extends Challenge {
|
export class SingleTypeChallenge extends Challenge {
|
||||||
private static TYPE_OVERRIDES: monotypeOverride[] = [
|
private static TYPE_OVERRIDES: monotypeOverride[] = [
|
||||||
{ species: Species.CASTFORM, type: PokemonType.NORMAL, fusion: false },
|
{ species: SpeciesId.CASTFORM, type: PokemonType.NORMAL, fusion: false },
|
||||||
];
|
];
|
||||||
// TODO: Find a solution for all Pokemon with this ssui issue, including Basculin and Burmy
|
// TODO: Find a solution for all Pokemon with this ssui issue, including Basculin and Burmy
|
||||||
|
|
||||||
@ -804,7 +804,7 @@ export class FreshStartChallenge extends Challenge {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
applyStarterCost(species: Species, cost: NumberHolder): boolean {
|
applyStarterCost(species: SpeciesId, cost: NumberHolder): boolean {
|
||||||
if (defaultStarterSpecies.includes(species)) {
|
if (defaultStarterSpecies.includes(species)) {
|
||||||
cost.value = speciesStarterCosts[species];
|
cost.value = speciesStarterCosts[species];
|
||||||
return true;
|
return true;
|
||||||
@ -992,13 +992,13 @@ export function applyChallenges(challengeType: ChallengeType.STARTER_POINTS, poi
|
|||||||
/**
|
/**
|
||||||
* Apply all challenges that modify the cost of a starter.
|
* Apply all challenges that modify the cost of a starter.
|
||||||
* @param challengeType {@link ChallengeType} ChallengeType.STARTER_COST
|
* @param challengeType {@link ChallengeType} ChallengeType.STARTER_COST
|
||||||
* @param species {@link Species} The pokemon to change the cost of.
|
* @param species {@link SpeciesId} The pokemon to change the cost of.
|
||||||
* @param points {@link NumberHolder} The cost of the pokemon.
|
* @param points {@link NumberHolder} The cost of the pokemon.
|
||||||
* @returns True if any challenge was successfully applied.
|
* @returns True if any challenge was successfully applied.
|
||||||
*/
|
*/
|
||||||
export function applyChallenges(
|
export function applyChallenges(
|
||||||
challengeType: ChallengeType.STARTER_COST,
|
challengeType: ChallengeType.STARTER_COST,
|
||||||
species: Species,
|
species: SpeciesId,
|
||||||
cost: NumberHolder,
|
cost: NumberHolder,
|
||||||
): boolean;
|
): boolean;
|
||||||
/**
|
/**
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { PartyMemberStrength } from "#enums/party-member-strength";
|
import { PartyMemberStrength } from "#enums/party-member-strength";
|
||||||
import type { Species } from "#enums/species";
|
import type { SpeciesId } from "#enums/species";
|
||||||
import { globalScene } from "#app/global-scene";
|
import { globalScene } from "#app/global-scene";
|
||||||
import { PlayerPokemon } from "#app/field/pokemon";
|
import { PlayerPokemon } from "#app/field/pokemon";
|
||||||
import type { Starter } from "#app/ui/starter-select-ui-handler";
|
import type { Starter } from "#app/ui/starter-select-ui-handler";
|
||||||
@ -34,7 +34,7 @@ export function getDailyRunStarters(seed: string): Starter[] {
|
|||||||
for (let s = 0; s < 3; s++) {
|
for (let s = 0; s < 3; s++) {
|
||||||
const offset = 6 + s * 6;
|
const offset = 6 + s * 6;
|
||||||
const starterSpeciesForm = getPokemonSpeciesForm(
|
const starterSpeciesForm = getPokemonSpeciesForm(
|
||||||
Number.parseInt(seed.slice(offset, offset + 4)) as Species,
|
Number.parseInt(seed.slice(offset, offset + 4)) as SpeciesId,
|
||||||
Number.parseInt(seed.slice(offset + 4, offset + 6)),
|
Number.parseInt(seed.slice(offset + 4, offset + 6)),
|
||||||
);
|
);
|
||||||
starters.push(getDailyRunStarter(starterSpeciesForm, startingLevel));
|
starters.push(getDailyRunStarter(starterSpeciesForm, startingLevel));
|
||||||
@ -50,7 +50,7 @@ export function getDailyRunStarters(seed: string): Starter[] {
|
|||||||
for (let c = 0; c < starterCosts.length; c++) {
|
for (let c = 0; c < starterCosts.length; c++) {
|
||||||
const cost = starterCosts[c];
|
const cost = starterCosts[c];
|
||||||
const costSpecies = Object.keys(speciesStarterCosts)
|
const costSpecies = Object.keys(speciesStarterCosts)
|
||||||
.map(s => Number.parseInt(s) as Species)
|
.map(s => Number.parseInt(s) as SpeciesId)
|
||||||
.filter(s => speciesStarterCosts[s] === cost);
|
.filter(s => speciesStarterCosts[s] === cost);
|
||||||
const randPkmSpecies = getPokemonSpecies(randSeedItem(costSpecies));
|
const randPkmSpecies = getPokemonSpecies(randSeedItem(costSpecies));
|
||||||
const starterSpecies = getPokemonSpecies(
|
const starterSpecies = getPokemonSpecies(
|
||||||
|
@ -10,7 +10,7 @@ import { pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions";
|
|||||||
import type { PlayerPokemon } from "#app/field/pokemon";
|
import type { PlayerPokemon } from "#app/field/pokemon";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import { EggTier } from "#enums/egg-type";
|
import { EggTier } from "#enums/egg-type";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { EggSourceType } from "#enums/egg-source-types";
|
import { EggSourceType } from "#enums/egg-source-types";
|
||||||
import {
|
import {
|
||||||
MANAPHY_EGG_MANAPHY_RATE,
|
MANAPHY_EGG_MANAPHY_RATE,
|
||||||
@ -67,7 +67,7 @@ export interface IEggOptions {
|
|||||||
/** Sets how many waves it will take till this egg hatches. */
|
/** Sets how many waves it will take till this egg hatches. */
|
||||||
hatchWaves?: number;
|
hatchWaves?: number;
|
||||||
/** Sets the exact species that will hatch from this egg. */
|
/** Sets the exact species that will hatch from this egg. */
|
||||||
species?: Species;
|
species?: SpeciesId;
|
||||||
/** Defines if the hatched pokemon will be a shiny. */
|
/** Defines if the hatched pokemon will be a shiny. */
|
||||||
isShiny?: boolean;
|
isShiny?: boolean;
|
||||||
/** Defines the variant of the pokemon that will hatch from this egg. If no `variantTier` is given the normal variant rates will apply. */
|
/** Defines the variant of the pokemon that will hatch from this egg. If no `variantTier` is given the normal variant rates will apply. */
|
||||||
@ -94,7 +94,7 @@ export class Egg {
|
|||||||
private _hatchWaves: number;
|
private _hatchWaves: number;
|
||||||
private _timestamp: number;
|
private _timestamp: number;
|
||||||
|
|
||||||
private _species: Species;
|
private _species: SpeciesId;
|
||||||
private _isShiny: boolean;
|
private _isShiny: boolean;
|
||||||
private _variantTier: VariantTier;
|
private _variantTier: VariantTier;
|
||||||
private _eggMoveIndex: number;
|
private _eggMoveIndex: number;
|
||||||
@ -134,7 +134,7 @@ export class Egg {
|
|||||||
return this._timestamp;
|
return this._timestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
get species(): Species {
|
get species(): SpeciesId {
|
||||||
return this._species;
|
return this._species;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -221,8 +221,8 @@ export class Egg {
|
|||||||
|
|
||||||
public isManaphyEgg(): boolean {
|
public isManaphyEgg(): boolean {
|
||||||
return (
|
return (
|
||||||
this._species === Species.PHIONE ||
|
this._species === SpeciesId.PHIONE ||
|
||||||
this._species === Species.MANAPHY ||
|
this._species === SpeciesId.MANAPHY ||
|
||||||
(this._tier === EggTier.COMMON && !(this._id % 204) && !this._species)
|
(this._tier === EggTier.COMMON && !(this._id % 204) && !this._species)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -247,8 +247,10 @@ export class Egg {
|
|||||||
|
|
||||||
let pokemonSpecies = getPokemonSpecies(this._species);
|
let pokemonSpecies = getPokemonSpecies(this._species);
|
||||||
// Special condition to have Phione eggs also have a chance of generating Manaphy
|
// Special condition to have Phione eggs also have a chance of generating Manaphy
|
||||||
if (this._species === Species.PHIONE && this._sourceType === EggSourceType.SAME_SPECIES_EGG) {
|
if (this._species === SpeciesId.PHIONE && this._sourceType === EggSourceType.SAME_SPECIES_EGG) {
|
||||||
pokemonSpecies = getPokemonSpecies(randSeedInt(MANAPHY_EGG_MANAPHY_RATE) ? Species.PHIONE : Species.MANAPHY);
|
pokemonSpecies = getPokemonSpecies(
|
||||||
|
randSeedInt(MANAPHY_EGG_MANAPHY_RATE) ? SpeciesId.PHIONE : SpeciesId.MANAPHY,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sets the hidden ability if a hidden ability exists and
|
// Sets the hidden ability if a hidden ability exists and
|
||||||
@ -371,7 +373,7 @@ export class Egg {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private getEggTierDefaultHatchWaves(eggTier?: EggTier): number {
|
private getEggTierDefaultHatchWaves(eggTier?: EggTier): number {
|
||||||
if (this._species === Species.PHIONE || this._species === Species.MANAPHY) {
|
if (this._species === SpeciesId.PHIONE || this._species === SpeciesId.MANAPHY) {
|
||||||
return HATCH_WAVES_MANAPHY_EGG;
|
return HATCH_WAVES_MANAPHY_EGG;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -399,7 +401,7 @@ export class Egg {
|
|||||||
: EggTier.LEGENDARY;
|
: EggTier.LEGENDARY;
|
||||||
}
|
}
|
||||||
|
|
||||||
private rollSpecies(): Species | null {
|
private rollSpecies(): SpeciesId | null {
|
||||||
if (!globalScene) {
|
if (!globalScene) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -415,7 +417,7 @@ export class Egg {
|
|||||||
* check pass when Utils.randSeedInt(8) = 0, we can tell them apart during tests.
|
* check pass when Utils.randSeedInt(8) = 0, we can tell them apart during tests.
|
||||||
*/
|
*/
|
||||||
const rand = randSeedInt(MANAPHY_EGG_MANAPHY_RATE) !== 1;
|
const rand = randSeedInt(MANAPHY_EGG_MANAPHY_RATE) !== 1;
|
||||||
return rand ? Species.PHIONE : Species.MANAPHY;
|
return rand ? SpeciesId.PHIONE : SpeciesId.MANAPHY;
|
||||||
}
|
}
|
||||||
if (this.tier === EggTier.LEGENDARY && this._sourceType === EggSourceType.GACHA_LEGENDARY) {
|
if (this.tier === EggTier.LEGENDARY && this._sourceType === EggSourceType.GACHA_LEGENDARY) {
|
||||||
if (!randSeedInt(2)) {
|
if (!randSeedInt(2)) {
|
||||||
@ -445,11 +447,11 @@ export class Egg {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
const ignoredSpecies = [Species.PHIONE, Species.MANAPHY, Species.ETERNATUS];
|
const ignoredSpecies = [SpeciesId.PHIONE, SpeciesId.MANAPHY, SpeciesId.ETERNATUS];
|
||||||
|
|
||||||
let speciesPool = Object.keys(speciesEggTiers)
|
let speciesPool = Object.keys(speciesEggTiers)
|
||||||
.filter(s => speciesEggTiers[s] === this.tier)
|
.filter(s => speciesEggTiers[s] === this.tier)
|
||||||
.map(s => Number.parseInt(s) as Species)
|
.map(s => Number.parseInt(s) as SpeciesId)
|
||||||
.filter(
|
.filter(
|
||||||
s =>
|
s =>
|
||||||
!pokemonPrevolutions.hasOwnProperty(s) &&
|
!pokemonPrevolutions.hasOwnProperty(s) &&
|
||||||
@ -496,7 +498,7 @@ export class Egg {
|
|||||||
totalWeight += weight;
|
totalWeight += weight;
|
||||||
}
|
}
|
||||||
|
|
||||||
let species: Species;
|
let species: SpeciesId;
|
||||||
|
|
||||||
const rand = randSeedInt(totalWeight);
|
const rand = randSeedInt(totalWeight);
|
||||||
for (let s = 0; s < speciesWeights.length; s++) {
|
for (let s = 0; s < speciesWeights.length; s++) {
|
||||||
@ -606,17 +608,17 @@ export class Egg {
|
|||||||
////
|
////
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getValidLegendaryGachaSpecies(): Species[] {
|
export function getValidLegendaryGachaSpecies(): SpeciesId[] {
|
||||||
return Object.entries(speciesEggTiers)
|
return Object.entries(speciesEggTiers)
|
||||||
.filter(s => s[1] === EggTier.LEGENDARY)
|
.filter(s => s[1] === EggTier.LEGENDARY)
|
||||||
.map(s => Number.parseInt(s[0]))
|
.map(s => Number.parseInt(s[0]))
|
||||||
.filter(s => getPokemonSpecies(s).isObtainable() && s !== Species.ETERNATUS);
|
.filter(s => getPokemonSpecies(s).isObtainable() && s !== SpeciesId.ETERNATUS);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getLegendaryGachaSpeciesForTimestamp(timestamp: number): Species {
|
export function getLegendaryGachaSpeciesForTimestamp(timestamp: number): SpeciesId {
|
||||||
const legendarySpecies = getValidLegendaryGachaSpecies();
|
const legendarySpecies = getValidLegendaryGachaSpecies();
|
||||||
|
|
||||||
let ret: Species;
|
let ret: SpeciesId;
|
||||||
|
|
||||||
// 86400000 is the number of miliseconds in one day
|
// 86400000 is the number of miliseconds in one day
|
||||||
const timeDate = new Date(timestamp);
|
const timeDate = new Date(timestamp);
|
||||||
|
@ -88,7 +88,7 @@ import { ArenaTagType } from "#enums/arena-tag-type";
|
|||||||
import { BattlerTagType } from "#enums/battler-tag-type";
|
import { BattlerTagType } from "#enums/battler-tag-type";
|
||||||
import { Biome } from "#enums/biome";
|
import { Biome } from "#enums/biome";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { MoveUsedEvent } from "#app/events/battle-scene";
|
import { MoveUsedEvent } from "#app/events/battle-scene";
|
||||||
import {
|
import {
|
||||||
BATTLE_STATS,
|
BATTLE_STATS,
|
||||||
@ -2430,7 +2430,7 @@ export class ChangeMultiHitTypeAttr extends MoveAttr {
|
|||||||
|
|
||||||
export class WaterShurikenMultiHitTypeAttr extends ChangeMultiHitTypeAttr {
|
export class WaterShurikenMultiHitTypeAttr extends ChangeMultiHitTypeAttr {
|
||||||
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
||||||
if (user.species.speciesId === Species.GRENINJA && user.hasAbility(AbilityId.BATTLE_BOND) && user.formIndex === 2) {
|
if (user.species.speciesId === SpeciesId.GRENINJA && user.hasAbility(AbilityId.BATTLE_BOND) && user.formIndex === 2) {
|
||||||
(args[0] as NumberHolder).value = MultiHitType._3;
|
(args[0] as NumberHolder).value = MultiHitType._3;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -4237,7 +4237,7 @@ export class PresentPowerAttr extends VariablePowerAttr {
|
|||||||
|
|
||||||
export class WaterShurikenPowerAttr extends VariablePowerAttr {
|
export class WaterShurikenPowerAttr extends VariablePowerAttr {
|
||||||
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
||||||
if (user.species.speciesId === Species.GRENINJA && user.hasAbility(AbilityId.BATTLE_BOND) && user.formIndex === 2) {
|
if (user.species.speciesId === SpeciesId.GRENINJA && user.hasAbility(AbilityId.BATTLE_BOND) && user.formIndex === 2) {
|
||||||
(args[0] as NumberHolder).value = 20;
|
(args[0] as NumberHolder).value = 20;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -4844,8 +4844,8 @@ export class FormChangeItemTypeAttr extends VariableMoveTypeAttr {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ([ user.species.speciesId, user.fusionSpecies?.speciesId ].includes(Species.ARCEUS) || [ user.species.speciesId, user.fusionSpecies?.speciesId ].includes(Species.SILVALLY)) {
|
if ([ user.species.speciesId, user.fusionSpecies?.speciesId ].includes(SpeciesId.ARCEUS) || [ user.species.speciesId, user.fusionSpecies?.speciesId ].includes(SpeciesId.SILVALLY)) {
|
||||||
const form = user.species.speciesId === Species.ARCEUS || user.species.speciesId === Species.SILVALLY ? user.formIndex : user.fusionSpecies?.formIndex!;
|
const form = user.species.speciesId === SpeciesId.ARCEUS || user.species.speciesId === SpeciesId.SILVALLY ? user.formIndex : user.fusionSpecies?.formIndex!;
|
||||||
|
|
||||||
moveType.value = PokemonType[PokemonType[form]];
|
moveType.value = PokemonType[PokemonType[form]];
|
||||||
return true;
|
return true;
|
||||||
@ -4867,8 +4867,8 @@ export class TechnoBlastTypeAttr extends VariableMoveTypeAttr {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ([ user.species.speciesId, user.fusionSpecies?.speciesId ].includes(Species.GENESECT)) {
|
if ([ user.species.speciesId, user.fusionSpecies?.speciesId ].includes(SpeciesId.GENESECT)) {
|
||||||
const form = user.species.speciesId === Species.GENESECT ? user.formIndex : user.fusionSpecies?.formIndex;
|
const form = user.species.speciesId === SpeciesId.GENESECT ? user.formIndex : user.fusionSpecies?.formIndex;
|
||||||
|
|
||||||
switch (form) {
|
switch (form) {
|
||||||
case 1: // Shock Drive
|
case 1: // Shock Drive
|
||||||
@ -4901,8 +4901,8 @@ export class AuraWheelTypeAttr extends VariableMoveTypeAttr {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ([ user.species.speciesId, user.fusionSpecies?.speciesId ].includes(Species.MORPEKO)) {
|
if ([ user.species.speciesId, user.fusionSpecies?.speciesId ].includes(SpeciesId.MORPEKO)) {
|
||||||
const form = user.species.speciesId === Species.MORPEKO ? user.formIndex : user.fusionSpecies?.formIndex;
|
const form = user.species.speciesId === SpeciesId.MORPEKO ? user.formIndex : user.fusionSpecies?.formIndex;
|
||||||
|
|
||||||
switch (form) {
|
switch (form) {
|
||||||
case 1: // Hangry Mode
|
case 1: // Hangry Mode
|
||||||
@ -4926,8 +4926,8 @@ export class RagingBullTypeAttr extends VariableMoveTypeAttr {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ([ user.species.speciesId, user.fusionSpecies?.speciesId ].includes(Species.PALDEA_TAUROS)) {
|
if ([ user.species.speciesId, user.fusionSpecies?.speciesId ].includes(SpeciesId.PALDEA_TAUROS)) {
|
||||||
const form = user.species.speciesId === Species.PALDEA_TAUROS ? user.formIndex : user.fusionSpecies?.formIndex;
|
const form = user.species.speciesId === SpeciesId.PALDEA_TAUROS ? user.formIndex : user.fusionSpecies?.formIndex;
|
||||||
|
|
||||||
switch (form) {
|
switch (form) {
|
||||||
case 1: // Blaze breed
|
case 1: // Blaze breed
|
||||||
@ -4954,8 +4954,8 @@ export class IvyCudgelTypeAttr extends VariableMoveTypeAttr {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ([ user.species.speciesId, user.fusionSpecies?.speciesId ].includes(Species.OGERPON)) {
|
if ([ user.species.speciesId, user.fusionSpecies?.speciesId ].includes(SpeciesId.OGERPON)) {
|
||||||
const form = user.species.speciesId === Species.OGERPON ? user.formIndex : user.fusionSpecies?.formIndex;
|
const form = user.species.speciesId === SpeciesId.OGERPON ? user.formIndex : user.fusionSpecies?.formIndex;
|
||||||
|
|
||||||
switch (form) {
|
switch (form) {
|
||||||
case 1: // Wellspring Mask
|
case 1: // Wellspring Mask
|
||||||
@ -5139,7 +5139,7 @@ export class TeraStarstormTypeAttr extends VariableMoveTypeAttr {
|
|||||||
* @returns `true` if the move type is changed to {@linkcode PokemonType.STELLAR}, `false` otherwise
|
* @returns `true` if the move type is changed to {@linkcode PokemonType.STELLAR}, `false` otherwise
|
||||||
*/
|
*/
|
||||||
override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
|
||||||
if (user.isTerastallized && user.hasSpecies(Species.TERAPAGOS)) {
|
if (user.isTerastallized && user.hasSpecies(SpeciesId.TERAPAGOS)) {
|
||||||
const moveType = args[0] as NumberHolder;
|
const moveType = args[0] as NumberHolder;
|
||||||
|
|
||||||
moveType.value = PokemonType.STELLAR;
|
moveType.value = PokemonType.STELLAR;
|
||||||
@ -5616,7 +5616,7 @@ export class GulpMissileTagAttr extends MoveEffectAttr {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (user.hasAbility(AbilityId.GULP_MISSILE) && user.species.speciesId === Species.CRAMORANT) {
|
if (user.hasAbility(AbilityId.GULP_MISSILE) && user.species.speciesId === SpeciesId.CRAMORANT) {
|
||||||
if (user.getHpRatio() >= .5) {
|
if (user.getHpRatio() >= .5) {
|
||||||
user.addTag(BattlerTagType.GULP_MISSILE_ARROKUDA, 0, move.id);
|
user.addTag(BattlerTagType.GULP_MISSILE_ARROKUDA, 0, move.id);
|
||||||
} else {
|
} else {
|
||||||
@ -5629,7 +5629,7 @@ export class GulpMissileTagAttr extends MoveEffectAttr {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number {
|
getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number {
|
||||||
const isCramorant = user.hasAbility(AbilityId.GULP_MISSILE) && user.species.speciesId === Species.CRAMORANT;
|
const isCramorant = user.hasAbility(AbilityId.GULP_MISSILE) && user.species.speciesId === SpeciesId.CRAMORANT;
|
||||||
return isCramorant && !user.getTag(GulpMissileTag) ? 10 : 0;
|
return isCramorant && !user.getTag(GulpMissileTag) ? 10 : 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -9735,8 +9735,8 @@ export function initMoves() {
|
|||||||
.attr(AddBattlerTagAttr, BattlerTagType.CENTER_OF_ATTENTION, true),
|
.attr(AddBattlerTagAttr, BattlerTagType.CENTER_OF_ATTENTION, true),
|
||||||
new StatusMove(MoveId.TELEKINESIS, PokemonType.PSYCHIC, -1, 15, -1, 0, 5)
|
new StatusMove(MoveId.TELEKINESIS, PokemonType.PSYCHIC, -1, 15, -1, 0, 5)
|
||||||
.condition(failOnGravityCondition)
|
.condition(failOnGravityCondition)
|
||||||
.condition((_user, target, _move) => ![ Species.DIGLETT, Species.DUGTRIO, Species.ALOLA_DIGLETT, Species.ALOLA_DUGTRIO, Species.SANDYGAST, Species.PALOSSAND, Species.WIGLETT, Species.WUGTRIO ].includes(target.species.speciesId))
|
.condition((_user, target, _move) => ![ SpeciesId.DIGLETT, SpeciesId.DUGTRIO, SpeciesId.ALOLA_DIGLETT, SpeciesId.ALOLA_DUGTRIO, SpeciesId.SANDYGAST, SpeciesId.PALOSSAND, SpeciesId.WIGLETT, SpeciesId.WUGTRIO ].includes(target.species.speciesId))
|
||||||
.condition((_user, target, _move) => !(target.species.speciesId === Species.GENGAR && target.getFormKey() === "mega"))
|
.condition((_user, target, _move) => !(target.species.speciesId === SpeciesId.GENGAR && target.getFormKey() === "mega"))
|
||||||
.condition((_user, target, _move) => isNullOrUndefined(target.getTag(BattlerTagType.INGRAIN)) && isNullOrUndefined(target.getTag(BattlerTagType.IGNORE_FLYING)))
|
.condition((_user, target, _move) => isNullOrUndefined(target.getTag(BattlerTagType.INGRAIN)) && isNullOrUndefined(target.getTag(BattlerTagType.IGNORE_FLYING)))
|
||||||
.attr(AddBattlerTagAttr, BattlerTagType.TELEKINESIS, false, true, 3)
|
.attr(AddBattlerTagAttr, BattlerTagType.TELEKINESIS, false, true, 3)
|
||||||
.attr(AddBattlerTagAttr, BattlerTagType.FLOATING, false, true, 3)
|
.attr(AddBattlerTagAttr, BattlerTagType.FLOATING, false, true, 3)
|
||||||
@ -11224,7 +11224,7 @@ export function initMoves() {
|
|||||||
new AttackMove(MoveId.TERA_STARSTORM, PokemonType.NORMAL, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 9)
|
new AttackMove(MoveId.TERA_STARSTORM, PokemonType.NORMAL, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 9)
|
||||||
.attr(TeraMoveCategoryAttr)
|
.attr(TeraMoveCategoryAttr)
|
||||||
.attr(TeraStarstormTypeAttr)
|
.attr(TeraStarstormTypeAttr)
|
||||||
.attr(VariableTargetAttr, (user, target, move) => user.hasSpecies(Species.TERAPAGOS) && (user.isTerastallized || globalScene.currentBattle.preTurnCommands[user.getFieldIndex()]?.command === Command.TERA) ? MoveTarget.ALL_NEAR_ENEMIES : MoveTarget.NEAR_OTHER)
|
.attr(VariableTargetAttr, (user, target, move) => user.hasSpecies(SpeciesId.TERAPAGOS) && (user.isTerastallized || globalScene.currentBattle.preTurnCommands[user.getFieldIndex()]?.command === Command.TERA) ? MoveTarget.ALL_NEAR_ENEMIES : MoveTarget.NEAR_OTHER)
|
||||||
.partial(), /** Does not ignore abilities that affect stats, relevant in determining the move's category {@see TeraMoveCategoryAttr} */
|
.partial(), /** Does not ignore abilities that affect stats, relevant in determining the move's category {@see TeraMoveCategoryAttr} */
|
||||||
new AttackMove(MoveId.FICKLE_BEAM, PokemonType.DRAGON, MoveCategory.SPECIAL, 80, 100, 5, 30, 0, 9)
|
new AttackMove(MoveId.FICKLE_BEAM, PokemonType.DRAGON, MoveCategory.SPECIAL, 80, 100, 5, 30, 0, 9)
|
||||||
.attr(PreMoveMessageAttr, doublePowerChanceMessageFunc)
|
.attr(PreMoveMessageAttr, doublePowerChanceMessageFunc)
|
||||||
|
@ -12,7 +12,7 @@ import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounte
|
|||||||
import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter";
|
import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter";
|
||||||
import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
||||||
import { TrainerType } from "#enums/trainer-type";
|
import { TrainerType } from "#enums/trainer-type";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { getSpriteKeysFromSpecies } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils";
|
import { getSpriteKeysFromSpecies } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils";
|
||||||
import { randSeedInt } from "#app/utils/common";
|
import { randSeedInt } from "#app/utils/common";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
@ -54,27 +54,27 @@ export const ATrainersTestEncounter: MysteryEncounter = MysteryEncounterBuilder.
|
|||||||
switch (randSeedInt(5)) {
|
switch (randSeedInt(5)) {
|
||||||
case 1:
|
case 1:
|
||||||
trainerType = TrainerType.CHERYL;
|
trainerType = TrainerType.CHERYL;
|
||||||
spriteKeys = getSpriteKeysFromSpecies(Species.BLISSEY);
|
spriteKeys = getSpriteKeysFromSpecies(SpeciesId.BLISSEY);
|
||||||
trainerNameKey = "cheryl";
|
trainerNameKey = "cheryl";
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
trainerType = TrainerType.MARLEY;
|
trainerType = TrainerType.MARLEY;
|
||||||
spriteKeys = getSpriteKeysFromSpecies(Species.ARCANINE);
|
spriteKeys = getSpriteKeysFromSpecies(SpeciesId.ARCANINE);
|
||||||
trainerNameKey = "marley";
|
trainerNameKey = "marley";
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
trainerType = TrainerType.MIRA;
|
trainerType = TrainerType.MIRA;
|
||||||
spriteKeys = getSpriteKeysFromSpecies(Species.ALAKAZAM, false, 1);
|
spriteKeys = getSpriteKeysFromSpecies(SpeciesId.ALAKAZAM, false, 1);
|
||||||
trainerNameKey = "mira";
|
trainerNameKey = "mira";
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
trainerType = TrainerType.RILEY;
|
trainerType = TrainerType.RILEY;
|
||||||
spriteKeys = getSpriteKeysFromSpecies(Species.LUCARIO, false, 1);
|
spriteKeys = getSpriteKeysFromSpecies(SpeciesId.LUCARIO, false, 1);
|
||||||
trainerNameKey = "riley";
|
trainerNameKey = "riley";
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
trainerType = TrainerType.BUCK;
|
trainerType = TrainerType.BUCK;
|
||||||
spriteKeys = getSpriteKeysFromSpecies(Species.CLAYDOL);
|
spriteKeys = getSpriteKeysFromSpecies(SpeciesId.CLAYDOL);
|
||||||
trainerNameKey = "buck";
|
trainerNameKey = "buck";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@ import { EnemyPokemon, PokemonMove } from "#app/field/pokemon";
|
|||||||
import type { BerryModifierType, PokemonHeldItemModifierType } from "#app/modifier/modifier-type";
|
import type { BerryModifierType, PokemonHeldItemModifierType } from "#app/modifier/modifier-type";
|
||||||
import { modifierTypes } from "#app/modifier/modifier-type";
|
import { modifierTypes } from "#app/modifier/modifier-type";
|
||||||
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { globalScene } from "#app/global-scene";
|
import { globalScene } from "#app/global-scene";
|
||||||
import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter";
|
import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter";
|
||||||
import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter";
|
import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter";
|
||||||
@ -59,7 +59,7 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = MysteryEncounterBuilde
|
|||||||
// This sprite has the shadow
|
// This sprite has the shadow
|
||||||
spriteKey: "",
|
spriteKey: "",
|
||||||
fileRoot: "",
|
fileRoot: "",
|
||||||
species: Species.GREEDENT,
|
species: SpeciesId.GREEDENT,
|
||||||
hasShadow: true,
|
hasShadow: true,
|
||||||
alpha: 0.001,
|
alpha: 0.001,
|
||||||
repeat: true,
|
repeat: true,
|
||||||
@ -68,7 +68,7 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = MysteryEncounterBuilde
|
|||||||
{
|
{
|
||||||
spriteKey: "",
|
spriteKey: "",
|
||||||
fileRoot: "",
|
fileRoot: "",
|
||||||
species: Species.GREEDENT,
|
species: SpeciesId.GREEDENT,
|
||||||
hasShadow: false,
|
hasShadow: false,
|
||||||
repeat: true,
|
repeat: true,
|
||||||
x: -5,
|
x: -5,
|
||||||
@ -228,7 +228,7 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = MysteryEncounterBuilde
|
|||||||
levelAdditiveModifier: 1,
|
levelAdditiveModifier: 1,
|
||||||
pokemonConfigs: [
|
pokemonConfigs: [
|
||||||
{
|
{
|
||||||
species: getPokemonSpecies(Species.GREEDENT),
|
species: getPokemonSpecies(SpeciesId.GREEDENT),
|
||||||
isBoss: true,
|
isBoss: true,
|
||||||
bossSegments: 3,
|
bossSegments: 3,
|
||||||
shiny: false, // Shiny lock because of consistency issues between the different options
|
shiny: false, // Shiny lock because of consistency issues between the different options
|
||||||
@ -246,7 +246,7 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = MysteryEncounterBuilde
|
|||||||
};
|
};
|
||||||
|
|
||||||
encounter.enemyPartyConfigs = [config];
|
encounter.enemyPartyConfigs = [config];
|
||||||
encounter.setDialogueToken("greedentName", getPokemonSpecies(Species.GREEDENT).getName());
|
encounter.setDialogueToken("greedentName", getPokemonSpecies(SpeciesId.GREEDENT).getName());
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
})
|
})
|
||||||
@ -373,7 +373,7 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = MysteryEncounterBuilde
|
|||||||
// Let it have the food
|
// Let it have the food
|
||||||
// Greedent joins the team, level equal to 2 below highest party member (shiny locked)
|
// Greedent joins the team, level equal to 2 below highest party member (shiny locked)
|
||||||
const level = getHighestLevelPlayerPokemon(false, true).level - 2;
|
const level = getHighestLevelPlayerPokemon(false, true).level - 2;
|
||||||
const greedent = new EnemyPokemon(getPokemonSpecies(Species.GREEDENT), level, TrainerSlot.NONE, false, true);
|
const greedent = new EnemyPokemon(getPokemonSpecies(SpeciesId.GREEDENT), level, TrainerSlot.NONE, false, true);
|
||||||
greedent.moveset = [
|
greedent.moveset = [
|
||||||
new PokemonMove(MoveId.THRASH),
|
new PokemonMove(MoveId.THRASH),
|
||||||
new PokemonMove(MoveId.BODY_PRESS),
|
new PokemonMove(MoveId.BODY_PRESS),
|
||||||
|
@ -6,7 +6,7 @@ import {
|
|||||||
} from "#app/data/mystery-encounters/utils/encounter-phase-utils";
|
} from "#app/data/mystery-encounters/utils/encounter-phase-utils";
|
||||||
import { modifierTypes } from "#app/modifier/modifier-type";
|
import { modifierTypes } from "#app/modifier/modifier-type";
|
||||||
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { globalScene } from "#app/global-scene";
|
import { globalScene } from "#app/global-scene";
|
||||||
import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter";
|
import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter";
|
||||||
import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter";
|
import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter";
|
||||||
@ -50,7 +50,7 @@ export const AnOfferYouCantRefuseEncounter: MysteryEncounter = MysteryEncounterB
|
|||||||
.withScenePartySizeRequirement(2, 6, true) // Must have at least 2 pokemon in party
|
.withScenePartySizeRequirement(2, 6, true) // Must have at least 2 pokemon in party
|
||||||
.withIntroSpriteConfigs([
|
.withIntroSpriteConfigs([
|
||||||
{
|
{
|
||||||
spriteKey: Species.LIEPARD.toString(),
|
spriteKey: SpeciesId.LIEPARD.toString(),
|
||||||
fileRoot: "pokemon",
|
fileRoot: "pokemon",
|
||||||
hasShadow: true,
|
hasShadow: true,
|
||||||
repeat: true,
|
repeat: true,
|
||||||
@ -112,7 +112,7 @@ export const AnOfferYouCantRefuseEncounter: MysteryEncounter = MysteryEncounterB
|
|||||||
|
|
||||||
const shinyCharm = generateModifierType(modifierTypes.SHINY_CHARM);
|
const shinyCharm = generateModifierType(modifierTypes.SHINY_CHARM);
|
||||||
encounter.setDialogueToken("itemName", shinyCharm?.name ?? i18next.t("modifierType:ModifierType.SHINY_CHARM.name"));
|
encounter.setDialogueToken("itemName", shinyCharm?.name ?? i18next.t("modifierType:ModifierType.SHINY_CHARM.name"));
|
||||||
encounter.setDialogueToken("liepardName", getPokemonSpecies(Species.LIEPARD).getName());
|
encounter.setDialogueToken("liepardName", getPokemonSpecies(SpeciesId.LIEPARD).getName());
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
})
|
})
|
||||||
@ -167,7 +167,7 @@ export const AnOfferYouCantRefuseEncounter: MysteryEncounter = MysteryEncounterB
|
|||||||
// Update money and remove pokemon from party
|
// Update money and remove pokemon from party
|
||||||
updatePlayerMoney(encounter.misc.price);
|
updatePlayerMoney(encounter.misc.price);
|
||||||
|
|
||||||
setEncounterExp(encounter.options[1].primaryPokemon!.id, getPokemonSpecies(Species.LIEPARD).baseExp, true);
|
setEncounterExp(encounter.options[1].primaryPokemon!.id, getPokemonSpecies(SpeciesId.LIEPARD).baseExp, true);
|
||||||
|
|
||||||
leaveEncounterWithoutBattle(true);
|
leaveEncounterWithoutBattle(true);
|
||||||
})
|
})
|
||||||
|
@ -21,7 +21,7 @@ import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounte
|
|||||||
import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter";
|
import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter";
|
||||||
import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
||||||
import { TrainerType } from "#enums/trainer-type";
|
import { TrainerType } from "#enums/trainer-type";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import type { PlayerPokemon } from "#app/field/pokemon";
|
import type { PlayerPokemon } from "#app/field/pokemon";
|
||||||
import type Pokemon from "#app/field/pokemon";
|
import type Pokemon from "#app/field/pokemon";
|
||||||
import { PokemonMove } from "#app/field/pokemon";
|
import { PokemonMove } from "#app/field/pokemon";
|
||||||
@ -59,90 +59,90 @@ import { getSpriteKeysFromSpecies } from "#app/data/mystery-encounters/utils/enc
|
|||||||
const namespace = "mysteryEncounters/bugTypeSuperfan";
|
const namespace = "mysteryEncounters/bugTypeSuperfan";
|
||||||
|
|
||||||
const POOL_1_POKEMON = [
|
const POOL_1_POKEMON = [
|
||||||
Species.PARASECT,
|
SpeciesId.PARASECT,
|
||||||
Species.VENOMOTH,
|
SpeciesId.VENOMOTH,
|
||||||
Species.LEDIAN,
|
SpeciesId.LEDIAN,
|
||||||
Species.ARIADOS,
|
SpeciesId.ARIADOS,
|
||||||
Species.YANMA,
|
SpeciesId.YANMA,
|
||||||
Species.BEAUTIFLY,
|
SpeciesId.BEAUTIFLY,
|
||||||
Species.DUSTOX,
|
SpeciesId.DUSTOX,
|
||||||
Species.MASQUERAIN,
|
SpeciesId.MASQUERAIN,
|
||||||
Species.NINJASK,
|
SpeciesId.NINJASK,
|
||||||
Species.VOLBEAT,
|
SpeciesId.VOLBEAT,
|
||||||
Species.ILLUMISE,
|
SpeciesId.ILLUMISE,
|
||||||
Species.ANORITH,
|
SpeciesId.ANORITH,
|
||||||
Species.KRICKETUNE,
|
SpeciesId.KRICKETUNE,
|
||||||
Species.WORMADAM,
|
SpeciesId.WORMADAM,
|
||||||
Species.MOTHIM,
|
SpeciesId.MOTHIM,
|
||||||
Species.SKORUPI,
|
SpeciesId.SKORUPI,
|
||||||
Species.JOLTIK,
|
SpeciesId.JOLTIK,
|
||||||
Species.LARVESTA,
|
SpeciesId.LARVESTA,
|
||||||
Species.VIVILLON,
|
SpeciesId.VIVILLON,
|
||||||
Species.CHARJABUG,
|
SpeciesId.CHARJABUG,
|
||||||
Species.RIBOMBEE,
|
SpeciesId.RIBOMBEE,
|
||||||
Species.SPIDOPS,
|
SpeciesId.SPIDOPS,
|
||||||
Species.LOKIX,
|
SpeciesId.LOKIX,
|
||||||
];
|
];
|
||||||
|
|
||||||
const POOL_2_POKEMON = [
|
const POOL_2_POKEMON = [
|
||||||
Species.SCYTHER,
|
SpeciesId.SCYTHER,
|
||||||
Species.PINSIR,
|
SpeciesId.PINSIR,
|
||||||
Species.HERACROSS,
|
SpeciesId.HERACROSS,
|
||||||
Species.FORRETRESS,
|
SpeciesId.FORRETRESS,
|
||||||
Species.SCIZOR,
|
SpeciesId.SCIZOR,
|
||||||
Species.SHUCKLE,
|
SpeciesId.SHUCKLE,
|
||||||
Species.SHEDINJA,
|
SpeciesId.SHEDINJA,
|
||||||
Species.ARMALDO,
|
SpeciesId.ARMALDO,
|
||||||
Species.VESPIQUEN,
|
SpeciesId.VESPIQUEN,
|
||||||
Species.DRAPION,
|
SpeciesId.DRAPION,
|
||||||
Species.YANMEGA,
|
SpeciesId.YANMEGA,
|
||||||
Species.LEAVANNY,
|
SpeciesId.LEAVANNY,
|
||||||
Species.SCOLIPEDE,
|
SpeciesId.SCOLIPEDE,
|
||||||
Species.CRUSTLE,
|
SpeciesId.CRUSTLE,
|
||||||
Species.ESCAVALIER,
|
SpeciesId.ESCAVALIER,
|
||||||
Species.ACCELGOR,
|
SpeciesId.ACCELGOR,
|
||||||
Species.GALVANTULA,
|
SpeciesId.GALVANTULA,
|
||||||
Species.VIKAVOLT,
|
SpeciesId.VIKAVOLT,
|
||||||
Species.ARAQUANID,
|
SpeciesId.ARAQUANID,
|
||||||
Species.ORBEETLE,
|
SpeciesId.ORBEETLE,
|
||||||
Species.CENTISKORCH,
|
SpeciesId.CENTISKORCH,
|
||||||
Species.FROSMOTH,
|
SpeciesId.FROSMOTH,
|
||||||
Species.KLEAVOR,
|
SpeciesId.KLEAVOR,
|
||||||
];
|
];
|
||||||
|
|
||||||
const POOL_3_POKEMON: { species: Species; formIndex?: number }[] = [
|
const POOL_3_POKEMON: { species: SpeciesId; formIndex?: number }[] = [
|
||||||
{
|
{
|
||||||
species: Species.PINSIR,
|
species: SpeciesId.PINSIR,
|
||||||
formIndex: 1,
|
formIndex: 1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
species: Species.SCIZOR,
|
species: SpeciesId.SCIZOR,
|
||||||
formIndex: 1,
|
formIndex: 1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
species: Species.HERACROSS,
|
species: SpeciesId.HERACROSS,
|
||||||
formIndex: 1,
|
formIndex: 1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
species: Species.ORBEETLE,
|
species: SpeciesId.ORBEETLE,
|
||||||
formIndex: 1,
|
formIndex: 1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
species: Species.CENTISKORCH,
|
species: SpeciesId.CENTISKORCH,
|
||||||
formIndex: 1,
|
formIndex: 1,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
species: Species.DURANT,
|
species: SpeciesId.DURANT,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
species: Species.VOLCARONA,
|
species: SpeciesId.VOLCARONA,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
species: Species.GOLISOPOD,
|
species: SpeciesId.GOLISOPOD,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
const POOL_4_POKEMON = [Species.GENESECT, Species.SLITHER_WING, Species.BUZZWOLE, Species.PHEROMOSA];
|
const POOL_4_POKEMON = [SpeciesId.GENESECT, SpeciesId.SLITHER_WING, SpeciesId.BUZZWOLE, SpeciesId.PHEROMOSA];
|
||||||
|
|
||||||
const PHYSICAL_TUTOR_MOVES = [
|
const PHYSICAL_TUTOR_MOVES = [
|
||||||
MoveId.MEGAHORN,
|
MoveId.MEGAHORN,
|
||||||
@ -219,12 +219,12 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = MysteryEncounterBuilde
|
|||||||
|
|
||||||
let beedrillKeys: { spriteKey: string; fileRoot: string }, butterfreeKeys: { spriteKey: string; fileRoot: string };
|
let beedrillKeys: { spriteKey: string; fileRoot: string }, butterfreeKeys: { spriteKey: string; fileRoot: string };
|
||||||
if (globalScene.currentBattle.waveIndex < WAVE_LEVEL_BREAKPOINTS[3]) {
|
if (globalScene.currentBattle.waveIndex < WAVE_LEVEL_BREAKPOINTS[3]) {
|
||||||
beedrillKeys = getSpriteKeysFromSpecies(Species.BEEDRILL, false);
|
beedrillKeys = getSpriteKeysFromSpecies(SpeciesId.BEEDRILL, false);
|
||||||
butterfreeKeys = getSpriteKeysFromSpecies(Species.BUTTERFREE, false);
|
butterfreeKeys = getSpriteKeysFromSpecies(SpeciesId.BUTTERFREE, false);
|
||||||
} else {
|
} else {
|
||||||
// Mega Beedrill/Gmax Butterfree
|
// Mega Beedrill/Gmax Butterfree
|
||||||
beedrillKeys = getSpriteKeysFromSpecies(Species.BEEDRILL, false, 1);
|
beedrillKeys = getSpriteKeysFromSpecies(SpeciesId.BEEDRILL, false, 1);
|
||||||
butterfreeKeys = getSpriteKeysFromSpecies(Species.BUTTERFREE, false, 1);
|
butterfreeKeys = getSpriteKeysFromSpecies(SpeciesId.BUTTERFREE, false, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
encounter.spriteConfigs = [
|
encounter.spriteConfigs = [
|
||||||
@ -525,26 +525,26 @@ function getTrainerConfigForWave(waveIndex: number) {
|
|||||||
if (waveIndex < WAVE_LEVEL_BREAKPOINTS[0]) {
|
if (waveIndex < WAVE_LEVEL_BREAKPOINTS[0]) {
|
||||||
// Use default template (2 AVG)
|
// Use default template (2 AVG)
|
||||||
config
|
config
|
||||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.BEEDRILL], TrainerSlot.TRAINER, true))
|
.setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.BEEDRILL], TrainerSlot.TRAINER, true))
|
||||||
.setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.BUTTERFREE], TrainerSlot.TRAINER, true));
|
.setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.BUTTERFREE], TrainerSlot.TRAINER, true));
|
||||||
} else if (waveIndex < WAVE_LEVEL_BREAKPOINTS[1]) {
|
} else if (waveIndex < WAVE_LEVEL_BREAKPOINTS[1]) {
|
||||||
config
|
config
|
||||||
.setPartyTemplates(new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE))
|
.setPartyTemplates(new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE))
|
||||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.BEEDRILL], TrainerSlot.TRAINER, true))
|
.setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.BEEDRILL], TrainerSlot.TRAINER, true))
|
||||||
.setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.BUTTERFREE], TrainerSlot.TRAINER, true))
|
.setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.BUTTERFREE], TrainerSlot.TRAINER, true))
|
||||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc(POOL_1_POKEMON, TrainerSlot.TRAINER, true));
|
.setPartyMemberFunc(2, getRandomPartyMemberFunc(POOL_1_POKEMON, TrainerSlot.TRAINER, true));
|
||||||
} else if (waveIndex < WAVE_LEVEL_BREAKPOINTS[2]) {
|
} else if (waveIndex < WAVE_LEVEL_BREAKPOINTS[2]) {
|
||||||
config
|
config
|
||||||
.setPartyTemplates(new TrainerPartyTemplate(4, PartyMemberStrength.AVERAGE))
|
.setPartyTemplates(new TrainerPartyTemplate(4, PartyMemberStrength.AVERAGE))
|
||||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.BEEDRILL], TrainerSlot.TRAINER, true))
|
.setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.BEEDRILL], TrainerSlot.TRAINER, true))
|
||||||
.setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.BUTTERFREE], TrainerSlot.TRAINER, true))
|
.setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.BUTTERFREE], TrainerSlot.TRAINER, true))
|
||||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc(POOL_1_POKEMON, TrainerSlot.TRAINER, true))
|
.setPartyMemberFunc(2, getRandomPartyMemberFunc(POOL_1_POKEMON, TrainerSlot.TRAINER, true))
|
||||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc(POOL_2_POKEMON, TrainerSlot.TRAINER, true));
|
.setPartyMemberFunc(3, getRandomPartyMemberFunc(POOL_2_POKEMON, TrainerSlot.TRAINER, true));
|
||||||
} else if (waveIndex < WAVE_LEVEL_BREAKPOINTS[3]) {
|
} else if (waveIndex < WAVE_LEVEL_BREAKPOINTS[3]) {
|
||||||
config
|
config
|
||||||
.setPartyTemplates(new TrainerPartyTemplate(5, PartyMemberStrength.AVERAGE))
|
.setPartyTemplates(new TrainerPartyTemplate(5, PartyMemberStrength.AVERAGE))
|
||||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.BEEDRILL], TrainerSlot.TRAINER, true))
|
.setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.BEEDRILL], TrainerSlot.TRAINER, true))
|
||||||
.setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.BUTTERFREE], TrainerSlot.TRAINER, true))
|
.setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.BUTTERFREE], TrainerSlot.TRAINER, true))
|
||||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc(POOL_1_POKEMON, TrainerSlot.TRAINER, true))
|
.setPartyMemberFunc(2, getRandomPartyMemberFunc(POOL_1_POKEMON, TrainerSlot.TRAINER, true))
|
||||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc(POOL_2_POKEMON, TrainerSlot.TRAINER, true))
|
.setPartyMemberFunc(3, getRandomPartyMemberFunc(POOL_2_POKEMON, TrainerSlot.TRAINER, true))
|
||||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc(POOL_2_POKEMON, TrainerSlot.TRAINER, true));
|
.setPartyMemberFunc(4, getRandomPartyMemberFunc(POOL_2_POKEMON, TrainerSlot.TRAINER, true));
|
||||||
@ -553,7 +553,7 @@ function getTrainerConfigForWave(waveIndex: number) {
|
|||||||
.setPartyTemplates(new TrainerPartyTemplate(5, PartyMemberStrength.AVERAGE))
|
.setPartyTemplates(new TrainerPartyTemplate(5, PartyMemberStrength.AVERAGE))
|
||||||
.setPartyMemberFunc(
|
.setPartyMemberFunc(
|
||||||
0,
|
0,
|
||||||
getRandomPartyMemberFunc([Species.BEEDRILL], TrainerSlot.TRAINER, true, p => {
|
getRandomPartyMemberFunc([SpeciesId.BEEDRILL], TrainerSlot.TRAINER, true, p => {
|
||||||
p.formIndex = 1;
|
p.formIndex = 1;
|
||||||
p.generateAndPopulateMoveset();
|
p.generateAndPopulateMoveset();
|
||||||
p.generateName();
|
p.generateName();
|
||||||
@ -561,7 +561,7 @@ function getTrainerConfigForWave(waveIndex: number) {
|
|||||||
)
|
)
|
||||||
.setPartyMemberFunc(
|
.setPartyMemberFunc(
|
||||||
1,
|
1,
|
||||||
getRandomPartyMemberFunc([Species.BUTTERFREE], TrainerSlot.TRAINER, true, p => {
|
getRandomPartyMemberFunc([SpeciesId.BUTTERFREE], TrainerSlot.TRAINER, true, p => {
|
||||||
p.formIndex = 1;
|
p.formIndex = 1;
|
||||||
p.generateAndPopulateMoveset();
|
p.generateAndPopulateMoveset();
|
||||||
p.generateName();
|
p.generateName();
|
||||||
@ -586,7 +586,7 @@ function getTrainerConfigForWave(waveIndex: number) {
|
|||||||
.setPartyTemplates(new TrainerPartyTemplate(5, PartyMemberStrength.AVERAGE))
|
.setPartyTemplates(new TrainerPartyTemplate(5, PartyMemberStrength.AVERAGE))
|
||||||
.setPartyMemberFunc(
|
.setPartyMemberFunc(
|
||||||
0,
|
0,
|
||||||
getRandomPartyMemberFunc([Species.BEEDRILL], TrainerSlot.TRAINER, true, p => {
|
getRandomPartyMemberFunc([SpeciesId.BEEDRILL], TrainerSlot.TRAINER, true, p => {
|
||||||
p.formIndex = 1;
|
p.formIndex = 1;
|
||||||
p.generateAndPopulateMoveset();
|
p.generateAndPopulateMoveset();
|
||||||
p.generateName();
|
p.generateName();
|
||||||
@ -594,7 +594,7 @@ function getTrainerConfigForWave(waveIndex: number) {
|
|||||||
)
|
)
|
||||||
.setPartyMemberFunc(
|
.setPartyMemberFunc(
|
||||||
1,
|
1,
|
||||||
getRandomPartyMemberFunc([Species.BUTTERFREE], TrainerSlot.TRAINER, true, p => {
|
getRandomPartyMemberFunc([SpeciesId.BUTTERFREE], TrainerSlot.TRAINER, true, p => {
|
||||||
p.formIndex = 1;
|
p.formIndex = 1;
|
||||||
p.generateAndPopulateMoveset();
|
p.generateAndPopulateMoveset();
|
||||||
p.generateName();
|
p.generateName();
|
||||||
@ -631,7 +631,7 @@ function getTrainerConfigForWave(waveIndex: number) {
|
|||||||
)
|
)
|
||||||
.setPartyMemberFunc(
|
.setPartyMemberFunc(
|
||||||
0,
|
0,
|
||||||
getRandomPartyMemberFunc([Species.BEEDRILL], TrainerSlot.TRAINER, true, p => {
|
getRandomPartyMemberFunc([SpeciesId.BEEDRILL], TrainerSlot.TRAINER, true, p => {
|
||||||
p.formIndex = 1;
|
p.formIndex = 1;
|
||||||
p.generateAndPopulateMoveset();
|
p.generateAndPopulateMoveset();
|
||||||
p.generateName();
|
p.generateName();
|
||||||
@ -639,7 +639,7 @@ function getTrainerConfigForWave(waveIndex: number) {
|
|||||||
)
|
)
|
||||||
.setPartyMemberFunc(
|
.setPartyMemberFunc(
|
||||||
1,
|
1,
|
||||||
getRandomPartyMemberFunc([Species.BUTTERFREE], TrainerSlot.TRAINER, true, p => {
|
getRandomPartyMemberFunc([SpeciesId.BUTTERFREE], TrainerSlot.TRAINER, true, p => {
|
||||||
p.formIndex = 1;
|
p.formIndex = 1;
|
||||||
p.generateAndPopulateMoveset();
|
p.generateAndPopulateMoveset();
|
||||||
p.generateName();
|
p.generateName();
|
||||||
@ -669,7 +669,7 @@ function getTrainerConfigForWave(waveIndex: number) {
|
|||||||
)
|
)
|
||||||
.setPartyMemberFunc(
|
.setPartyMemberFunc(
|
||||||
0,
|
0,
|
||||||
getRandomPartyMemberFunc([Species.BEEDRILL], TrainerSlot.TRAINER, true, p => {
|
getRandomPartyMemberFunc([SpeciesId.BEEDRILL], TrainerSlot.TRAINER, true, p => {
|
||||||
p.setBoss(true, 2);
|
p.setBoss(true, 2);
|
||||||
p.formIndex = 1;
|
p.formIndex = 1;
|
||||||
p.generateAndPopulateMoveset();
|
p.generateAndPopulateMoveset();
|
||||||
@ -678,7 +678,7 @@ function getTrainerConfigForWave(waveIndex: number) {
|
|||||||
)
|
)
|
||||||
.setPartyMemberFunc(
|
.setPartyMemberFunc(
|
||||||
1,
|
1,
|
||||||
getRandomPartyMemberFunc([Species.BUTTERFREE], TrainerSlot.TRAINER, true, p => {
|
getRandomPartyMemberFunc([SpeciesId.BUTTERFREE], TrainerSlot.TRAINER, true, p => {
|
||||||
p.setBoss(true, 2);
|
p.setBoss(true, 2);
|
||||||
p.formIndex = 1;
|
p.formIndex = 1;
|
||||||
p.generateAndPopulateMoveset();
|
p.generateAndPopulateMoveset();
|
||||||
|
@ -20,7 +20,7 @@ import { globalScene } from "#app/global-scene";
|
|||||||
import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter";
|
import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter";
|
||||||
import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter";
|
import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter";
|
||||||
import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { TrainerType } from "#enums/trainer-type";
|
import { TrainerType } from "#enums/trainer-type";
|
||||||
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
||||||
import { AbilityId } from "#enums/ability-id";
|
import { AbilityId } from "#enums/ability-id";
|
||||||
@ -86,7 +86,7 @@ export const ClowningAroundEncounter: MysteryEncounter = MysteryEncounterBuilder
|
|||||||
.withAutoHideIntroVisuals(false)
|
.withAutoHideIntroVisuals(false)
|
||||||
.withIntroSpriteConfigs([
|
.withIntroSpriteConfigs([
|
||||||
{
|
{
|
||||||
spriteKey: Species.MR_MIME.toString(),
|
spriteKey: SpeciesId.MR_MIME.toString(),
|
||||||
fileRoot: "pokemon",
|
fileRoot: "pokemon",
|
||||||
hasShadow: true,
|
hasShadow: true,
|
||||||
repeat: true,
|
repeat: true,
|
||||||
@ -96,7 +96,7 @@ export const ClowningAroundEncounter: MysteryEncounter = MysteryEncounterBuilder
|
|||||||
yShadow: -3,
|
yShadow: -3,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
spriteKey: Species.BLACEPHALON.toString(),
|
spriteKey: SpeciesId.BLACEPHALON.toString(),
|
||||||
fileRoot: "pokemon/exp",
|
fileRoot: "pokemon/exp",
|
||||||
hasShadow: true,
|
hasShadow: true,
|
||||||
repeat: true,
|
repeat: true,
|
||||||
@ -154,13 +154,13 @@ export const ClowningAroundEncounter: MysteryEncounter = MysteryEncounterBuilder
|
|||||||
pokemonConfigs: [
|
pokemonConfigs: [
|
||||||
// Overrides first 2 pokemon to be Mr. Mime and Blacephalon
|
// Overrides first 2 pokemon to be Mr. Mime and Blacephalon
|
||||||
{
|
{
|
||||||
species: getPokemonSpecies(Species.MR_MIME),
|
species: getPokemonSpecies(SpeciesId.MR_MIME),
|
||||||
isBoss: true,
|
isBoss: true,
|
||||||
moveSet: [MoveId.TEETER_DANCE, MoveId.ALLY_SWITCH, MoveId.DAZZLING_GLEAM, MoveId.PSYCHIC],
|
moveSet: [MoveId.TEETER_DANCE, MoveId.ALLY_SWITCH, MoveId.DAZZLING_GLEAM, MoveId.PSYCHIC],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
// Blacephalon has the random ability from pool, and 2 entirely random types to fit with the theme of the encounter
|
// Blacephalon has the random ability from pool, and 2 entirely random types to fit with the theme of the encounter
|
||||||
species: getPokemonSpecies(Species.BLACEPHALON),
|
species: getPokemonSpecies(SpeciesId.BLACEPHALON),
|
||||||
customPokemonData: new CustomPokemonData({
|
customPokemonData: new CustomPokemonData({
|
||||||
ability: ability,
|
ability: ability,
|
||||||
types: [firstType, secondType],
|
types: [firstType, secondType],
|
||||||
@ -175,7 +175,7 @@ export const ClowningAroundEncounter: MysteryEncounter = MysteryEncounterBuilder
|
|||||||
// Load animations/sfx for start of fight moves
|
// Load animations/sfx for start of fight moves
|
||||||
loadCustomMovesForEncounter([MoveId.ROLE_PLAY, MoveId.TAUNT]);
|
loadCustomMovesForEncounter([MoveId.ROLE_PLAY, MoveId.TAUNT]);
|
||||||
|
|
||||||
encounter.setDialogueToken("blacephalonName", getPokemonSpecies(Species.BLACEPHALON).getName());
|
encounter.setDialogueToken("blacephalonName", getPokemonSpecies(SpeciesId.BLACEPHALON).getName());
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
})
|
})
|
||||||
|
@ -38,7 +38,7 @@ import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode
|
|||||||
import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
||||||
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
||||||
import { PokeballType } from "#enums/pokeball";
|
import { PokeballType } from "#enums/pokeball";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { Stat } from "#enums/stat";
|
import { Stat } from "#enums/stat";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
|
|
||||||
@ -127,7 +127,7 @@ export const DancingLessonsEncounter: MysteryEncounter = MysteryEncounterBuilder
|
|||||||
.withOnInit(() => {
|
.withOnInit(() => {
|
||||||
const encounter = globalScene.currentBattle.mysteryEncounter!;
|
const encounter = globalScene.currentBattle.mysteryEncounter!;
|
||||||
|
|
||||||
const species = getPokemonSpecies(Species.ORICORIO);
|
const species = getPokemonSpecies(SpeciesId.ORICORIO);
|
||||||
const level = getEncounterPokemonLevelForWave(STANDARD_ENCOUNTER_BOOSTED_LEVEL_MODIFIER);
|
const level = getEncounterPokemonLevelForWave(STANDARD_ENCOUNTER_BOOSTED_LEVEL_MODIFIER);
|
||||||
const enemyPokemon = new EnemyPokemon(species, level, TrainerSlot.NONE, false);
|
const enemyPokemon = new EnemyPokemon(species, level, TrainerSlot.NONE, false);
|
||||||
if (!enemyPokemon.moveset.some(m => m && m.getMove().id === MoveId.REVELATION_DANCE)) {
|
if (!enemyPokemon.moveset.some(m => m && m.getMove().id === MoveId.REVELATION_DANCE)) {
|
||||||
@ -193,7 +193,7 @@ export const DancingLessonsEncounter: MysteryEncounter = MysteryEncounterBuilder
|
|||||||
oricorioData,
|
oricorioData,
|
||||||
};
|
};
|
||||||
|
|
||||||
encounter.setDialogueToken("oricorioName", getPokemonSpecies(Species.ORICORIO).getName());
|
encounter.setDialogueToken("oricorioName", getPokemonSpecies(SpeciesId.ORICORIO).getName());
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
})
|
})
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import type { PokemonType } from "#enums/pokemon-type";
|
import type { PokemonType } from "#enums/pokemon-type";
|
||||||
import { isNullOrUndefined, randSeedInt } from "#app/utils/common";
|
import { isNullOrUndefined, randSeedInt } from "#app/utils/common";
|
||||||
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { globalScene } from "#app/global-scene";
|
import { globalScene } from "#app/global-scene";
|
||||||
import { modifierTypes } from "#app/modifier/modifier-type";
|
import { modifierTypes } from "#app/modifier/modifier-type";
|
||||||
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
||||||
@ -27,68 +27,68 @@ const namespace = "mysteryEncounters/darkDeal";
|
|||||||
|
|
||||||
/** Exclude Ultra Beasts (inludes Cosmog/Solgaleo/Lunala/Necrozma), Paradox (includes Miraidon/Koraidon), Eternatus, and Mythicals */
|
/** Exclude Ultra Beasts (inludes Cosmog/Solgaleo/Lunala/Necrozma), Paradox (includes Miraidon/Koraidon), Eternatus, and Mythicals */
|
||||||
const excludedBosses = [
|
const excludedBosses = [
|
||||||
Species.NECROZMA,
|
SpeciesId.NECROZMA,
|
||||||
Species.COSMOG,
|
SpeciesId.COSMOG,
|
||||||
Species.COSMOEM,
|
SpeciesId.COSMOEM,
|
||||||
Species.SOLGALEO,
|
SpeciesId.SOLGALEO,
|
||||||
Species.LUNALA,
|
SpeciesId.LUNALA,
|
||||||
Species.ETERNATUS,
|
SpeciesId.ETERNATUS,
|
||||||
Species.NIHILEGO,
|
SpeciesId.NIHILEGO,
|
||||||
Species.BUZZWOLE,
|
SpeciesId.BUZZWOLE,
|
||||||
Species.PHEROMOSA,
|
SpeciesId.PHEROMOSA,
|
||||||
Species.XURKITREE,
|
SpeciesId.XURKITREE,
|
||||||
Species.CELESTEELA,
|
SpeciesId.CELESTEELA,
|
||||||
Species.KARTANA,
|
SpeciesId.KARTANA,
|
||||||
Species.GUZZLORD,
|
SpeciesId.GUZZLORD,
|
||||||
Species.POIPOLE,
|
SpeciesId.POIPOLE,
|
||||||
Species.NAGANADEL,
|
SpeciesId.NAGANADEL,
|
||||||
Species.STAKATAKA,
|
SpeciesId.STAKATAKA,
|
||||||
Species.BLACEPHALON,
|
SpeciesId.BLACEPHALON,
|
||||||
Species.GREAT_TUSK,
|
SpeciesId.GREAT_TUSK,
|
||||||
Species.SCREAM_TAIL,
|
SpeciesId.SCREAM_TAIL,
|
||||||
Species.BRUTE_BONNET,
|
SpeciesId.BRUTE_BONNET,
|
||||||
Species.FLUTTER_MANE,
|
SpeciesId.FLUTTER_MANE,
|
||||||
Species.SLITHER_WING,
|
SpeciesId.SLITHER_WING,
|
||||||
Species.SANDY_SHOCKS,
|
SpeciesId.SANDY_SHOCKS,
|
||||||
Species.ROARING_MOON,
|
SpeciesId.ROARING_MOON,
|
||||||
Species.KORAIDON,
|
SpeciesId.KORAIDON,
|
||||||
Species.WALKING_WAKE,
|
SpeciesId.WALKING_WAKE,
|
||||||
Species.GOUGING_FIRE,
|
SpeciesId.GOUGING_FIRE,
|
||||||
Species.RAGING_BOLT,
|
SpeciesId.RAGING_BOLT,
|
||||||
Species.IRON_TREADS,
|
SpeciesId.IRON_TREADS,
|
||||||
Species.IRON_BUNDLE,
|
SpeciesId.IRON_BUNDLE,
|
||||||
Species.IRON_HANDS,
|
SpeciesId.IRON_HANDS,
|
||||||
Species.IRON_JUGULIS,
|
SpeciesId.IRON_JUGULIS,
|
||||||
Species.IRON_MOTH,
|
SpeciesId.IRON_MOTH,
|
||||||
Species.IRON_THORNS,
|
SpeciesId.IRON_THORNS,
|
||||||
Species.IRON_VALIANT,
|
SpeciesId.IRON_VALIANT,
|
||||||
Species.MIRAIDON,
|
SpeciesId.MIRAIDON,
|
||||||
Species.IRON_LEAVES,
|
SpeciesId.IRON_LEAVES,
|
||||||
Species.IRON_BOULDER,
|
SpeciesId.IRON_BOULDER,
|
||||||
Species.IRON_CROWN,
|
SpeciesId.IRON_CROWN,
|
||||||
Species.MEW,
|
SpeciesId.MEW,
|
||||||
Species.CELEBI,
|
SpeciesId.CELEBI,
|
||||||
Species.DEOXYS,
|
SpeciesId.DEOXYS,
|
||||||
Species.JIRACHI,
|
SpeciesId.JIRACHI,
|
||||||
Species.DARKRAI,
|
SpeciesId.DARKRAI,
|
||||||
Species.PHIONE,
|
SpeciesId.PHIONE,
|
||||||
Species.MANAPHY,
|
SpeciesId.MANAPHY,
|
||||||
Species.ARCEUS,
|
SpeciesId.ARCEUS,
|
||||||
Species.SHAYMIN,
|
SpeciesId.SHAYMIN,
|
||||||
Species.VICTINI,
|
SpeciesId.VICTINI,
|
||||||
Species.MELOETTA,
|
SpeciesId.MELOETTA,
|
||||||
Species.KELDEO,
|
SpeciesId.KELDEO,
|
||||||
Species.GENESECT,
|
SpeciesId.GENESECT,
|
||||||
Species.DIANCIE,
|
SpeciesId.DIANCIE,
|
||||||
Species.HOOPA,
|
SpeciesId.HOOPA,
|
||||||
Species.VOLCANION,
|
SpeciesId.VOLCANION,
|
||||||
Species.MAGEARNA,
|
SpeciesId.MAGEARNA,
|
||||||
Species.MARSHADOW,
|
SpeciesId.MARSHADOW,
|
||||||
Species.ZERAORA,
|
SpeciesId.ZERAORA,
|
||||||
Species.ZARUDE,
|
SpeciesId.ZARUDE,
|
||||||
Species.MELTAN,
|
SpeciesId.MELTAN,
|
||||||
Species.MELMETAL,
|
SpeciesId.MELMETAL,
|
||||||
Species.PECHARUNT,
|
SpeciesId.PECHARUNT,
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -36,7 +36,7 @@ import { randSeedItem } from "#app/utils/common";
|
|||||||
import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode";
|
import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode";
|
||||||
import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
||||||
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { timedEventManager } from "#app/global-event-manager";
|
import { timedEventManager } from "#app/global-event-manager";
|
||||||
|
|
||||||
/** the i18n namespace for this encounter */
|
/** the i18n namespace for this encounter */
|
||||||
@ -95,7 +95,7 @@ export const DelibirdyEncounter: MysteryEncounter = MysteryEncounterBuilder.with
|
|||||||
{
|
{
|
||||||
spriteKey: "",
|
spriteKey: "",
|
||||||
fileRoot: "",
|
fileRoot: "",
|
||||||
species: Species.DELIBIRD,
|
species: SpeciesId.DELIBIRD,
|
||||||
hasShadow: true,
|
hasShadow: true,
|
||||||
repeat: true,
|
repeat: true,
|
||||||
startFrame: 38,
|
startFrame: 38,
|
||||||
@ -104,7 +104,7 @@ export const DelibirdyEncounter: MysteryEncounter = MysteryEncounterBuilder.with
|
|||||||
{
|
{
|
||||||
spriteKey: "",
|
spriteKey: "",
|
||||||
fileRoot: "",
|
fileRoot: "",
|
||||||
species: Species.DELIBIRD,
|
species: SpeciesId.DELIBIRD,
|
||||||
hasShadow: true,
|
hasShadow: true,
|
||||||
repeat: true,
|
repeat: true,
|
||||||
scale: 1.06,
|
scale: 1.06,
|
||||||
@ -112,7 +112,7 @@ export const DelibirdyEncounter: MysteryEncounter = MysteryEncounterBuilder.with
|
|||||||
{
|
{
|
||||||
spriteKey: "",
|
spriteKey: "",
|
||||||
fileRoot: "",
|
fileRoot: "",
|
||||||
species: Species.DELIBIRD,
|
species: SpeciesId.DELIBIRD,
|
||||||
hasShadow: true,
|
hasShadow: true,
|
||||||
repeat: true,
|
repeat: true,
|
||||||
startFrame: 65,
|
startFrame: 65,
|
||||||
@ -137,7 +137,7 @@ export const DelibirdyEncounter: MysteryEncounter = MysteryEncounterBuilder.with
|
|||||||
])
|
])
|
||||||
.withOnInit(() => {
|
.withOnInit(() => {
|
||||||
const encounter = globalScene.currentBattle.mysteryEncounter!;
|
const encounter = globalScene.currentBattle.mysteryEncounter!;
|
||||||
encounter.setDialogueToken("delibirdName", getPokemonSpecies(Species.DELIBIRD).getName());
|
encounter.setDialogueToken("delibirdName", getPokemonSpecies(SpeciesId.DELIBIRD).getName());
|
||||||
|
|
||||||
globalScene.loadBgm("mystery_encounter_delibirdy", "mystery_encounter_delibirdy.mp3");
|
globalScene.loadBgm("mystery_encounter_delibirdy", "mystery_encounter_delibirdy.mp3");
|
||||||
return true;
|
return true;
|
||||||
|
@ -6,7 +6,7 @@ import type { ModifierTypeFunc } from "#app/modifier/modifier-type";
|
|||||||
import { modifierTypes } from "#app/modifier/modifier-type";
|
import { modifierTypes } from "#app/modifier/modifier-type";
|
||||||
import { randSeedInt } from "#app/utils/common";
|
import { randSeedInt } from "#app/utils/common";
|
||||||
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter";
|
import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter";
|
||||||
import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter";
|
import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter";
|
||||||
import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
||||||
@ -35,7 +35,7 @@ export const DepartmentStoreSaleEncounter: MysteryEncounter = MysteryEncounterBu
|
|||||||
{
|
{
|
||||||
spriteKey: "",
|
spriteKey: "",
|
||||||
fileRoot: "",
|
fileRoot: "",
|
||||||
species: Species.FURFROU,
|
species: SpeciesId.FURFROU,
|
||||||
hasShadow: true,
|
hasShadow: true,
|
||||||
repeat: true,
|
repeat: true,
|
||||||
x: 30,
|
x: 30,
|
||||||
|
@ -20,7 +20,7 @@ import {
|
|||||||
CombinationPokemonRequirement,
|
CombinationPokemonRequirement,
|
||||||
TypeRequirement,
|
TypeRequirement,
|
||||||
} from "#app/data/mystery-encounters/mystery-encounter-requirements";
|
} from "#app/data/mystery-encounters/mystery-encounter-requirements";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
||||||
import { Gender } from "#app/data/gender";
|
import { Gender } from "#app/data/gender";
|
||||||
import { PokemonType } from "#enums/pokemon-type";
|
import { PokemonType } from "#enums/pokemon-type";
|
||||||
@ -83,7 +83,7 @@ export const FieryFalloutEncounter: MysteryEncounter = MysteryEncounterBuilder.w
|
|||||||
const encounter = globalScene.currentBattle.mysteryEncounter!;
|
const encounter = globalScene.currentBattle.mysteryEncounter!;
|
||||||
|
|
||||||
// Calculate boss mons
|
// Calculate boss mons
|
||||||
const volcaronaSpecies = getPokemonSpecies(Species.VOLCARONA);
|
const volcaronaSpecies = getPokemonSpecies(SpeciesId.VOLCARONA);
|
||||||
const config: EnemyPartyConfig = {
|
const config: EnemyPartyConfig = {
|
||||||
pokemonConfigs: [
|
pokemonConfigs: [
|
||||||
{
|
{
|
||||||
@ -119,7 +119,7 @@ export const FieryFalloutEncounter: MysteryEncounter = MysteryEncounterBuilder.w
|
|||||||
{
|
{
|
||||||
spriteKey: "",
|
spriteKey: "",
|
||||||
fileRoot: "",
|
fileRoot: "",
|
||||||
species: Species.VOLCARONA,
|
species: SpeciesId.VOLCARONA,
|
||||||
repeat: true,
|
repeat: true,
|
||||||
hidden: true,
|
hidden: true,
|
||||||
hasShadow: true,
|
hasShadow: true,
|
||||||
@ -129,7 +129,7 @@ export const FieryFalloutEncounter: MysteryEncounter = MysteryEncounterBuilder.w
|
|||||||
{
|
{
|
||||||
spriteKey: "",
|
spriteKey: "",
|
||||||
fileRoot: "",
|
fileRoot: "",
|
||||||
species: Species.VOLCARONA,
|
species: SpeciesId.VOLCARONA,
|
||||||
repeat: true,
|
repeat: true,
|
||||||
hidden: true,
|
hidden: true,
|
||||||
hasShadow: true,
|
hasShadow: true,
|
||||||
@ -143,7 +143,7 @@ export const FieryFalloutEncounter: MysteryEncounter = MysteryEncounterBuilder.w
|
|||||||
const pokemon = globalScene.getEnemyPokemon();
|
const pokemon = globalScene.getEnemyPokemon();
|
||||||
globalScene.arena.trySetWeather(WeatherType.SUNNY, pokemon);
|
globalScene.arena.trySetWeather(WeatherType.SUNNY, pokemon);
|
||||||
|
|
||||||
encounter.setDialogueToken("volcaronaName", getPokemonSpecies(Species.VOLCARONA).getName());
|
encounter.setDialogueToken("volcaronaName", getPokemonSpecies(SpeciesId.VOLCARONA).getName());
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
})
|
})
|
||||||
@ -283,7 +283,7 @@ export const FieryFalloutEncounter: MysteryEncounter = MysteryEncounterBuilder.w
|
|||||||
|
|
||||||
const primary = encounter.options[2].primaryPokemon!;
|
const primary = encounter.options[2].primaryPokemon!;
|
||||||
|
|
||||||
setEncounterExp([primary.id], getPokemonSpecies(Species.VOLCARONA).baseExp * 2);
|
setEncounterExp([primary.id], getPokemonSpecies(SpeciesId.VOLCARONA).baseExp * 2);
|
||||||
leaveEncounterWithoutBattle();
|
leaveEncounterWithoutBattle();
|
||||||
})
|
})
|
||||||
.build(),
|
.build(),
|
||||||
|
@ -19,7 +19,7 @@ import { MoneyRequirement } from "#app/data/mystery-encounters/mystery-encounter
|
|||||||
import { queueEncounterMessage, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils";
|
import { queueEncounterMessage, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils";
|
||||||
import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
||||||
import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode";
|
import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import { getPokemonNameWithAffix } from "#app/messages";
|
import { getPokemonNameWithAffix } from "#app/messages";
|
||||||
import { PlayerGender } from "#enums/player-gender";
|
import { PlayerGender } from "#enums/player-gender";
|
||||||
@ -91,7 +91,7 @@ export const FunAndGamesEncounter: MysteryEncounter = MysteryEncounterBuilder.wi
|
|||||||
.withOnInit(() => {
|
.withOnInit(() => {
|
||||||
const encounter = globalScene.currentBattle.mysteryEncounter!;
|
const encounter = globalScene.currentBattle.mysteryEncounter!;
|
||||||
globalScene.loadBgm("mystery_encounter_fun_and_games", "mystery_encounter_fun_and_games.mp3");
|
globalScene.loadBgm("mystery_encounter_fun_and_games", "mystery_encounter_fun_and_games.mp3");
|
||||||
encounter.setDialogueToken("wobbuffetName", getPokemonSpecies(Species.WOBBUFFET).getName());
|
encounter.setDialogueToken("wobbuffetName", getPokemonSpecies(SpeciesId.WOBBUFFET).getName());
|
||||||
return true;
|
return true;
|
||||||
})
|
})
|
||||||
.withOnVisualsStart(() => {
|
.withOnVisualsStart(() => {
|
||||||
@ -214,7 +214,7 @@ async function summonPlayerPokemon() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Also loads Wobbuffet data (cannot be shiny)
|
// Also loads Wobbuffet data (cannot be shiny)
|
||||||
const enemySpecies = getPokemonSpecies(Species.WOBBUFFET);
|
const enemySpecies = getPokemonSpecies(SpeciesId.WOBBUFFET);
|
||||||
globalScene.currentBattle.enemyParty = [];
|
globalScene.currentBattle.enemyParty = [];
|
||||||
const wobbuffet = globalScene.addEnemyPokemon(
|
const wobbuffet = globalScene.addEnemyPokemon(
|
||||||
enemySpecies,
|
enemySpecies,
|
||||||
|
@ -17,7 +17,7 @@ import { globalScene } from "#app/global-scene";
|
|||||||
import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter";
|
import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter";
|
||||||
import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter";
|
import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter";
|
||||||
import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import type PokemonSpecies from "#app/data/pokemon-species";
|
import type PokemonSpecies from "#app/data/pokemon-species";
|
||||||
import { allSpecies, getPokemonSpecies } from "#app/data/pokemon-species";
|
import { allSpecies, getPokemonSpecies } from "#app/data/pokemon-species";
|
||||||
import { getTypeRgb } from "#app/data/type";
|
import { getTypeRgb } from "#app/data/type";
|
||||||
@ -64,39 +64,39 @@ const WONDER_TRADE_SHINY_CHANCE = 512;
|
|||||||
const MAX_WONDER_TRADE_SHINY_CHANCE = 4096;
|
const MAX_WONDER_TRADE_SHINY_CHANCE = 4096;
|
||||||
|
|
||||||
const LEGENDARY_TRADE_POOLS = {
|
const LEGENDARY_TRADE_POOLS = {
|
||||||
1: [Species.RATTATA, Species.PIDGEY, Species.WEEDLE],
|
1: [SpeciesId.RATTATA, SpeciesId.PIDGEY, SpeciesId.WEEDLE],
|
||||||
2: [Species.SENTRET, Species.HOOTHOOT, Species.LEDYBA],
|
2: [SpeciesId.SENTRET, SpeciesId.HOOTHOOT, SpeciesId.LEDYBA],
|
||||||
3: [Species.POOCHYENA, Species.ZIGZAGOON, Species.TAILLOW],
|
3: [SpeciesId.POOCHYENA, SpeciesId.ZIGZAGOON, SpeciesId.TAILLOW],
|
||||||
4: [Species.BIDOOF, Species.STARLY, Species.KRICKETOT],
|
4: [SpeciesId.BIDOOF, SpeciesId.STARLY, SpeciesId.KRICKETOT],
|
||||||
5: [Species.PATRAT, Species.PURRLOIN, Species.PIDOVE],
|
5: [SpeciesId.PATRAT, SpeciesId.PURRLOIN, SpeciesId.PIDOVE],
|
||||||
6: [Species.BUNNELBY, Species.LITLEO, Species.SCATTERBUG],
|
6: [SpeciesId.BUNNELBY, SpeciesId.LITLEO, SpeciesId.SCATTERBUG],
|
||||||
7: [Species.PIKIPEK, Species.YUNGOOS, Species.ROCKRUFF],
|
7: [SpeciesId.PIKIPEK, SpeciesId.YUNGOOS, SpeciesId.ROCKRUFF],
|
||||||
8: [Species.SKWOVET, Species.WOOLOO, Species.ROOKIDEE],
|
8: [SpeciesId.SKWOVET, SpeciesId.WOOLOO, SpeciesId.ROOKIDEE],
|
||||||
9: [Species.LECHONK, Species.FIDOUGH, Species.TAROUNTULA],
|
9: [SpeciesId.LECHONK, SpeciesId.FIDOUGH, SpeciesId.TAROUNTULA],
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Exclude Paradox mons as they aren't considered legendary/mythical */
|
/** Exclude Paradox mons as they aren't considered legendary/mythical */
|
||||||
const EXCLUDED_TRADE_SPECIES = [
|
const EXCLUDED_TRADE_SPECIES = [
|
||||||
Species.GREAT_TUSK,
|
SpeciesId.GREAT_TUSK,
|
||||||
Species.SCREAM_TAIL,
|
SpeciesId.SCREAM_TAIL,
|
||||||
Species.BRUTE_BONNET,
|
SpeciesId.BRUTE_BONNET,
|
||||||
Species.FLUTTER_MANE,
|
SpeciesId.FLUTTER_MANE,
|
||||||
Species.SLITHER_WING,
|
SpeciesId.SLITHER_WING,
|
||||||
Species.SANDY_SHOCKS,
|
SpeciesId.SANDY_SHOCKS,
|
||||||
Species.ROARING_MOON,
|
SpeciesId.ROARING_MOON,
|
||||||
Species.WALKING_WAKE,
|
SpeciesId.WALKING_WAKE,
|
||||||
Species.GOUGING_FIRE,
|
SpeciesId.GOUGING_FIRE,
|
||||||
Species.RAGING_BOLT,
|
SpeciesId.RAGING_BOLT,
|
||||||
Species.IRON_TREADS,
|
SpeciesId.IRON_TREADS,
|
||||||
Species.IRON_BUNDLE,
|
SpeciesId.IRON_BUNDLE,
|
||||||
Species.IRON_HANDS,
|
SpeciesId.IRON_HANDS,
|
||||||
Species.IRON_JUGULIS,
|
SpeciesId.IRON_JUGULIS,
|
||||||
Species.IRON_MOTH,
|
SpeciesId.IRON_MOTH,
|
||||||
Species.IRON_THORNS,
|
SpeciesId.IRON_THORNS,
|
||||||
Species.IRON_VALIANT,
|
SpeciesId.IRON_VALIANT,
|
||||||
Species.IRON_LEAVES,
|
SpeciesId.IRON_LEAVES,
|
||||||
Species.IRON_BOULDER,
|
SpeciesId.IRON_BOULDER,
|
||||||
Species.IRON_CROWN,
|
SpeciesId.IRON_CROWN,
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#app/enums/species";
|
import { SpeciesId } from "#app/enums/species";
|
||||||
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
||||||
import { globalScene } from "#app/global-scene";
|
import { globalScene } from "#app/global-scene";
|
||||||
import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter";
|
import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter";
|
||||||
@ -129,7 +129,7 @@ export const LostAtSeaEncounter: MysteryEncounter = MysteryEncounterBuilder.with
|
|||||||
* Generic handler for using a guiding pokemon to guide you back.
|
* Generic handler for using a guiding pokemon to guide you back.
|
||||||
*/
|
*/
|
||||||
function handlePokemonGuidingYouPhase() {
|
function handlePokemonGuidingYouPhase() {
|
||||||
const laprasSpecies = getPokemonSpecies(Species.LAPRAS);
|
const laprasSpecies = getPokemonSpecies(SpeciesId.LAPRAS);
|
||||||
const { mysteryEncounter } = globalScene.currentBattle;
|
const { mysteryEncounter } = globalScene.currentBattle;
|
||||||
|
|
||||||
if (mysteryEncounter?.selectedOption?.primaryPokemon?.id) {
|
if (mysteryEncounter?.selectedOption?.primaryPokemon?.id) {
|
||||||
|
@ -23,7 +23,7 @@ import { MoveId } from "#enums/move-id";
|
|||||||
import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode";
|
import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode";
|
||||||
import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
||||||
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
|
|
||||||
/** i18n namespace for encounter */
|
/** i18n namespace for encounter */
|
||||||
const namespace = "mysteryEncounters/mysteriousChest";
|
const namespace = "mysteryEncounters/mysteriousChest";
|
||||||
@ -86,7 +86,7 @@ export const MysteriousChestEncounter: MysteryEncounter = MysteryEncounterBuilde
|
|||||||
disableSwitch: true,
|
disableSwitch: true,
|
||||||
pokemonConfigs: [
|
pokemonConfigs: [
|
||||||
{
|
{
|
||||||
species: getPokemonSpecies(Species.GIMMIGHOUL),
|
species: getPokemonSpecies(SpeciesId.GIMMIGHOUL),
|
||||||
formIndex: 0,
|
formIndex: 0,
|
||||||
isBoss: true,
|
isBoss: true,
|
||||||
moveSet: [MoveId.NASTY_PLOT, MoveId.SHADOW_BALL, MoveId.POWER_GEM, MoveId.THIEF],
|
moveSet: [MoveId.NASTY_PLOT, MoveId.SHADOW_BALL, MoveId.POWER_GEM, MoveId.THIEF],
|
||||||
@ -96,7 +96,7 @@ export const MysteriousChestEncounter: MysteryEncounter = MysteryEncounterBuilde
|
|||||||
|
|
||||||
encounter.enemyPartyConfigs = [config];
|
encounter.enemyPartyConfigs = [config];
|
||||||
|
|
||||||
encounter.setDialogueToken("gimmighoulName", getPokemonSpecies(Species.GIMMIGHOUL).getName());
|
encounter.setDialogueToken("gimmighoulName", getPokemonSpecies(SpeciesId.GIMMIGHOUL).getName());
|
||||||
encounter.setDialogueToken("trapPercent", TRAP_PERCENT.toString());
|
encounter.setDialogueToken("trapPercent", TRAP_PERCENT.toString());
|
||||||
encounter.setDialogueToken("commonPercent", COMMON_REWARDS_PERCENT.toString());
|
encounter.setDialogueToken("commonPercent", COMMON_REWARDS_PERCENT.toString());
|
||||||
encounter.setDialogueToken("ultraPercent", ULTRA_REWARDS_PERCENT.toString());
|
encounter.setDialogueToken("ultraPercent", ULTRA_REWARDS_PERCENT.toString());
|
||||||
|
@ -10,7 +10,7 @@ import type Pokemon from "#app/field/pokemon";
|
|||||||
import { modifierTypes } from "#app/modifier/modifier-type";
|
import { modifierTypes } from "#app/modifier/modifier-type";
|
||||||
import { randSeedInt } from "#app/utils/common";
|
import { randSeedInt } from "#app/utils/common";
|
||||||
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { globalScene } from "#app/global-scene";
|
import { globalScene } from "#app/global-scene";
|
||||||
import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter";
|
import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter";
|
||||||
import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter";
|
import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter";
|
||||||
@ -49,7 +49,7 @@ export const ShadyVitaminDealerEncounter: MysteryEncounter = MysteryEncounterBui
|
|||||||
.withPrimaryPokemonHealthRatioRequirement([0.51, 1]) // At least 1 Pokemon must have above half HP
|
.withPrimaryPokemonHealthRatioRequirement([0.51, 1]) // At least 1 Pokemon must have above half HP
|
||||||
.withIntroSpriteConfigs([
|
.withIntroSpriteConfigs([
|
||||||
{
|
{
|
||||||
spriteKey: Species.KROOKODILE.toString(),
|
spriteKey: SpeciesId.KROOKODILE.toString(),
|
||||||
fileRoot: "pokemon",
|
fileRoot: "pokemon",
|
||||||
hasShadow: true,
|
hasShadow: true,
|
||||||
repeat: true,
|
repeat: true,
|
||||||
|
@ -2,7 +2,7 @@ import { STEALING_MOVES } from "#app/data/mystery-encounters/requirements/requir
|
|||||||
import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type";
|
import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type";
|
||||||
import { modifierTypes } from "#app/modifier/modifier-type";
|
import { modifierTypes } from "#app/modifier/modifier-type";
|
||||||
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { globalScene } from "#app/global-scene";
|
import { globalScene } from "#app/global-scene";
|
||||||
import { StatusEffect } from "#enums/status-effect";
|
import { StatusEffect } from "#enums/status-effect";
|
||||||
import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter";
|
import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter";
|
||||||
@ -50,7 +50,7 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = MysteryEncounterBuil
|
|||||||
.withFleeAllowed(false)
|
.withFleeAllowed(false)
|
||||||
.withIntroSpriteConfigs([
|
.withIntroSpriteConfigs([
|
||||||
{
|
{
|
||||||
spriteKey: Species.SNORLAX.toString(),
|
spriteKey: SpeciesId.SNORLAX.toString(),
|
||||||
fileRoot: "pokemon",
|
fileRoot: "pokemon",
|
||||||
hasShadow: true,
|
hasShadow: true,
|
||||||
tint: 0.25,
|
tint: 0.25,
|
||||||
@ -69,7 +69,7 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = MysteryEncounterBuil
|
|||||||
console.log(encounter);
|
console.log(encounter);
|
||||||
|
|
||||||
// Calculate boss mon
|
// Calculate boss mon
|
||||||
const bossSpecies = getPokemonSpecies(Species.SNORLAX);
|
const bossSpecies = getPokemonSpecies(SpeciesId.SNORLAX);
|
||||||
const pokemonConfig: EnemyPokemonConfig = {
|
const pokemonConfig: EnemyPokemonConfig = {
|
||||||
species: bossSpecies,
|
species: bossSpecies,
|
||||||
isBoss: true,
|
isBoss: true,
|
||||||
@ -108,7 +108,7 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = MysteryEncounterBuil
|
|||||||
// Load animations/sfx for Snorlax fight start moves
|
// Load animations/sfx for Snorlax fight start moves
|
||||||
loadCustomMovesForEncounter([MoveId.SNORE]);
|
loadCustomMovesForEncounter([MoveId.SNORE]);
|
||||||
|
|
||||||
encounter.setDialogueToken("snorlaxName", getPokemonSpecies(Species.SNORLAX).getName());
|
encounter.setDialogueToken("snorlaxName", getPokemonSpecies(SpeciesId.SNORLAX).getName());
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
})
|
})
|
||||||
@ -181,7 +181,7 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = MysteryEncounterBuil
|
|||||||
fillRemaining: false,
|
fillRemaining: false,
|
||||||
});
|
});
|
||||||
// Snorlax exp to Pokemon that did the stealing
|
// Snorlax exp to Pokemon that did the stealing
|
||||||
setEncounterExp(instance.primaryPokemon!.id, getPokemonSpecies(Species.SNORLAX).baseExp);
|
setEncounterExp(instance.primaryPokemon!.id, getPokemonSpecies(SpeciesId.SNORLAX).baseExp);
|
||||||
leaveEncounterWithoutBattle();
|
leaveEncounterWithoutBattle();
|
||||||
})
|
})
|
||||||
.build(),
|
.build(),
|
||||||
|
@ -14,7 +14,7 @@ import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
|||||||
import { Biome } from "#enums/biome";
|
import { Biome } from "#enums/biome";
|
||||||
import { TrainerType } from "#enums/trainer-type";
|
import { TrainerType } from "#enums/trainer-type";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
||||||
import { speciesStarterCosts } from "#app/data/balance/starters";
|
import { speciesStarterCosts } from "#app/data/balance/starters";
|
||||||
import { Nature } from "#enums/nature";
|
import { Nature } from "#enums/nature";
|
||||||
@ -42,75 +42,75 @@ const FINAL_STAGE_EVOLUTION_WAVE = 75;
|
|||||||
const FRIENDSHIP_ADDED = 20;
|
const FRIENDSHIP_ADDED = 20;
|
||||||
|
|
||||||
class BreederSpeciesEvolution {
|
class BreederSpeciesEvolution {
|
||||||
species: Species;
|
species: SpeciesId;
|
||||||
evolution: number;
|
evolution: number;
|
||||||
|
|
||||||
constructor(species: Species, evolution: number) {
|
constructor(species: SpeciesId, evolution: number) {
|
||||||
this.species = species;
|
this.species = species;
|
||||||
this.evolution = evolution;
|
this.evolution = evolution;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const POOL_1_POKEMON: (Species | BreederSpeciesEvolution)[][] = [
|
const POOL_1_POKEMON: (SpeciesId | BreederSpeciesEvolution)[][] = [
|
||||||
[Species.MUNCHLAX, new BreederSpeciesEvolution(Species.SNORLAX, SECOND_STAGE_EVOLUTION_WAVE)],
|
[SpeciesId.MUNCHLAX, new BreederSpeciesEvolution(SpeciesId.SNORLAX, SECOND_STAGE_EVOLUTION_WAVE)],
|
||||||
[
|
[
|
||||||
Species.HAPPINY,
|
SpeciesId.HAPPINY,
|
||||||
new BreederSpeciesEvolution(Species.CHANSEY, FIRST_STAGE_EVOLUTION_WAVE),
|
new BreederSpeciesEvolution(SpeciesId.CHANSEY, FIRST_STAGE_EVOLUTION_WAVE),
|
||||||
new BreederSpeciesEvolution(Species.BLISSEY, FINAL_STAGE_EVOLUTION_WAVE),
|
new BreederSpeciesEvolution(SpeciesId.BLISSEY, FINAL_STAGE_EVOLUTION_WAVE),
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
Species.MAGBY,
|
SpeciesId.MAGBY,
|
||||||
new BreederSpeciesEvolution(Species.MAGMAR, FIRST_STAGE_EVOLUTION_WAVE),
|
new BreederSpeciesEvolution(SpeciesId.MAGMAR, FIRST_STAGE_EVOLUTION_WAVE),
|
||||||
new BreederSpeciesEvolution(Species.MAGMORTAR, FINAL_STAGE_EVOLUTION_WAVE),
|
new BreederSpeciesEvolution(SpeciesId.MAGMORTAR, FINAL_STAGE_EVOLUTION_WAVE),
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
Species.ELEKID,
|
SpeciesId.ELEKID,
|
||||||
new BreederSpeciesEvolution(Species.ELECTABUZZ, FIRST_STAGE_EVOLUTION_WAVE),
|
new BreederSpeciesEvolution(SpeciesId.ELECTABUZZ, FIRST_STAGE_EVOLUTION_WAVE),
|
||||||
new BreederSpeciesEvolution(Species.ELECTIVIRE, FINAL_STAGE_EVOLUTION_WAVE),
|
new BreederSpeciesEvolution(SpeciesId.ELECTIVIRE, FINAL_STAGE_EVOLUTION_WAVE),
|
||||||
],
|
],
|
||||||
[Species.RIOLU, new BreederSpeciesEvolution(Species.LUCARIO, SECOND_STAGE_EVOLUTION_WAVE)],
|
[SpeciesId.RIOLU, new BreederSpeciesEvolution(SpeciesId.LUCARIO, SECOND_STAGE_EVOLUTION_WAVE)],
|
||||||
[
|
[
|
||||||
Species.BUDEW,
|
SpeciesId.BUDEW,
|
||||||
new BreederSpeciesEvolution(Species.ROSELIA, FIRST_STAGE_EVOLUTION_WAVE),
|
new BreederSpeciesEvolution(SpeciesId.ROSELIA, FIRST_STAGE_EVOLUTION_WAVE),
|
||||||
new BreederSpeciesEvolution(Species.ROSERADE, FINAL_STAGE_EVOLUTION_WAVE),
|
new BreederSpeciesEvolution(SpeciesId.ROSERADE, FINAL_STAGE_EVOLUTION_WAVE),
|
||||||
],
|
],
|
||||||
[Species.TOXEL, new BreederSpeciesEvolution(Species.TOXTRICITY, SECOND_STAGE_EVOLUTION_WAVE)],
|
[SpeciesId.TOXEL, new BreederSpeciesEvolution(SpeciesId.TOXTRICITY, SECOND_STAGE_EVOLUTION_WAVE)],
|
||||||
[
|
[
|
||||||
Species.MIME_JR,
|
SpeciesId.MIME_JR,
|
||||||
new BreederSpeciesEvolution(Species.GALAR_MR_MIME, FIRST_STAGE_EVOLUTION_WAVE),
|
new BreederSpeciesEvolution(SpeciesId.GALAR_MR_MIME, FIRST_STAGE_EVOLUTION_WAVE),
|
||||||
new BreederSpeciesEvolution(Species.MR_RIME, FINAL_STAGE_EVOLUTION_WAVE),
|
new BreederSpeciesEvolution(SpeciesId.MR_RIME, FINAL_STAGE_EVOLUTION_WAVE),
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
const POOL_2_POKEMON: (Species | BreederSpeciesEvolution)[][] = [
|
const POOL_2_POKEMON: (SpeciesId | BreederSpeciesEvolution)[][] = [
|
||||||
[
|
[
|
||||||
Species.PICHU,
|
SpeciesId.PICHU,
|
||||||
new BreederSpeciesEvolution(Species.PIKACHU, FIRST_STAGE_EVOLUTION_WAVE),
|
new BreederSpeciesEvolution(SpeciesId.PIKACHU, FIRST_STAGE_EVOLUTION_WAVE),
|
||||||
new BreederSpeciesEvolution(Species.RAICHU, FINAL_STAGE_EVOLUTION_WAVE),
|
new BreederSpeciesEvolution(SpeciesId.RAICHU, FINAL_STAGE_EVOLUTION_WAVE),
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
Species.PICHU,
|
SpeciesId.PICHU,
|
||||||
new BreederSpeciesEvolution(Species.PIKACHU, FIRST_STAGE_EVOLUTION_WAVE),
|
new BreederSpeciesEvolution(SpeciesId.PIKACHU, FIRST_STAGE_EVOLUTION_WAVE),
|
||||||
new BreederSpeciesEvolution(Species.ALOLA_RAICHU, FINAL_STAGE_EVOLUTION_WAVE),
|
new BreederSpeciesEvolution(SpeciesId.ALOLA_RAICHU, FINAL_STAGE_EVOLUTION_WAVE),
|
||||||
],
|
],
|
||||||
[Species.SMOOCHUM, new BreederSpeciesEvolution(Species.JYNX, SECOND_STAGE_EVOLUTION_WAVE)],
|
[SpeciesId.SMOOCHUM, new BreederSpeciesEvolution(SpeciesId.JYNX, SECOND_STAGE_EVOLUTION_WAVE)],
|
||||||
[Species.TYROGUE, new BreederSpeciesEvolution(Species.HITMONLEE, SECOND_STAGE_EVOLUTION_WAVE)],
|
[SpeciesId.TYROGUE, new BreederSpeciesEvolution(SpeciesId.HITMONLEE, SECOND_STAGE_EVOLUTION_WAVE)],
|
||||||
[Species.TYROGUE, new BreederSpeciesEvolution(Species.HITMONCHAN, SECOND_STAGE_EVOLUTION_WAVE)],
|
[SpeciesId.TYROGUE, new BreederSpeciesEvolution(SpeciesId.HITMONCHAN, SECOND_STAGE_EVOLUTION_WAVE)],
|
||||||
[Species.TYROGUE, new BreederSpeciesEvolution(Species.HITMONTOP, SECOND_STAGE_EVOLUTION_WAVE)],
|
[SpeciesId.TYROGUE, new BreederSpeciesEvolution(SpeciesId.HITMONTOP, SECOND_STAGE_EVOLUTION_WAVE)],
|
||||||
[
|
[
|
||||||
Species.IGGLYBUFF,
|
SpeciesId.IGGLYBUFF,
|
||||||
new BreederSpeciesEvolution(Species.JIGGLYPUFF, FIRST_STAGE_EVOLUTION_WAVE),
|
new BreederSpeciesEvolution(SpeciesId.JIGGLYPUFF, FIRST_STAGE_EVOLUTION_WAVE),
|
||||||
new BreederSpeciesEvolution(Species.WIGGLYTUFF, FINAL_STAGE_EVOLUTION_WAVE),
|
new BreederSpeciesEvolution(SpeciesId.WIGGLYTUFF, FINAL_STAGE_EVOLUTION_WAVE),
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
Species.AZURILL,
|
SpeciesId.AZURILL,
|
||||||
new BreederSpeciesEvolution(Species.MARILL, FIRST_STAGE_EVOLUTION_WAVE),
|
new BreederSpeciesEvolution(SpeciesId.MARILL, FIRST_STAGE_EVOLUTION_WAVE),
|
||||||
new BreederSpeciesEvolution(Species.AZUMARILL, FINAL_STAGE_EVOLUTION_WAVE),
|
new BreederSpeciesEvolution(SpeciesId.AZUMARILL, FINAL_STAGE_EVOLUTION_WAVE),
|
||||||
],
|
],
|
||||||
[Species.WYNAUT, new BreederSpeciesEvolution(Species.WOBBUFFET, SECOND_STAGE_EVOLUTION_WAVE)],
|
[SpeciesId.WYNAUT, new BreederSpeciesEvolution(SpeciesId.WOBBUFFET, SECOND_STAGE_EVOLUTION_WAVE)],
|
||||||
[Species.CHINGLING, new BreederSpeciesEvolution(Species.CHIMECHO, SECOND_STAGE_EVOLUTION_WAVE)],
|
[SpeciesId.CHINGLING, new BreederSpeciesEvolution(SpeciesId.CHIMECHO, SECOND_STAGE_EVOLUTION_WAVE)],
|
||||||
[Species.BONSLY, new BreederSpeciesEvolution(Species.SUDOWOODO, SECOND_STAGE_EVOLUTION_WAVE)],
|
[SpeciesId.BONSLY, new BreederSpeciesEvolution(SpeciesId.SUDOWOODO, SECOND_STAGE_EVOLUTION_WAVE)],
|
||||||
[Species.MANTYKE, new BreederSpeciesEvolution(Species.MANTINE, SECOND_STAGE_EVOLUTION_WAVE)],
|
[SpeciesId.MANTYKE, new BreederSpeciesEvolution(SpeciesId.MANTINE, SECOND_STAGE_EVOLUTION_WAVE)],
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -144,10 +144,10 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = MysteryEncount
|
|||||||
|
|
||||||
const cleffaSpecies =
|
const cleffaSpecies =
|
||||||
waveIndex < FIRST_STAGE_EVOLUTION_WAVE
|
waveIndex < FIRST_STAGE_EVOLUTION_WAVE
|
||||||
? Species.CLEFFA
|
? SpeciesId.CLEFFA
|
||||||
: waveIndex < FINAL_STAGE_EVOLUTION_WAVE
|
: waveIndex < FINAL_STAGE_EVOLUTION_WAVE
|
||||||
? Species.CLEFAIRY
|
? SpeciesId.CLEFAIRY
|
||||||
: Species.CLEFABLE;
|
: SpeciesId.CLEFABLE;
|
||||||
encounter.spriteConfigs = [
|
encounter.spriteConfigs = [
|
||||||
{
|
{
|
||||||
spriteKey: cleffaSpecies.toString(),
|
spriteKey: cleffaSpecies.toString(),
|
||||||
@ -466,10 +466,10 @@ function getPartyConfig(): EnemyPartyConfig {
|
|||||||
// First mon is *always* this special cleffa
|
// First mon is *always* this special cleffa
|
||||||
const cleffaSpecies =
|
const cleffaSpecies =
|
||||||
waveIndex < FIRST_STAGE_EVOLUTION_WAVE
|
waveIndex < FIRST_STAGE_EVOLUTION_WAVE
|
||||||
? Species.CLEFFA
|
? SpeciesId.CLEFFA
|
||||||
: waveIndex < FINAL_STAGE_EVOLUTION_WAVE
|
: waveIndex < FINAL_STAGE_EVOLUTION_WAVE
|
||||||
? Species.CLEFAIRY
|
? SpeciesId.CLEFAIRY
|
||||||
: Species.CLEFABLE;
|
: SpeciesId.CLEFABLE;
|
||||||
const baseConfig: EnemyPartyConfig = {
|
const baseConfig: EnemyPartyConfig = {
|
||||||
trainerType: TrainerType.EXPERT_POKEMON_BREEDER,
|
trainerType: TrainerType.EXPERT_POKEMON_BREEDER,
|
||||||
pokemonConfigs: [
|
pokemonConfigs: [
|
||||||
@ -542,7 +542,7 @@ function getPartyConfig(): EnemyPartyConfig {
|
|||||||
return baseConfig;
|
return baseConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getSpeciesFromPool(speciesPool: (Species | BreederSpeciesEvolution)[][], waveIndex: number): Species {
|
function getSpeciesFromPool(speciesPool: (SpeciesId | BreederSpeciesEvolution)[][], waveIndex: number): SpeciesId {
|
||||||
const poolCopy = randSeedShuffle(speciesPool.slice(0));
|
const poolCopy = randSeedShuffle(speciesPool.slice(0));
|
||||||
const speciesEvolutions = poolCopy.pop()!.slice(0);
|
const speciesEvolutions = poolCopy.pop()!.slice(0);
|
||||||
let speciesObject = speciesEvolutions.pop()!;
|
let speciesObject = speciesEvolutions.pop()!;
|
||||||
|
@ -17,7 +17,7 @@ import {
|
|||||||
import type PokemonSpecies from "#app/data/pokemon-species";
|
import type PokemonSpecies from "#app/data/pokemon-species";
|
||||||
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
||||||
import { speciesStarterCosts } from "#app/data/balance/starters";
|
import { speciesStarterCosts } from "#app/data/balance/starters";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { PokeballType } from "#enums/pokeball";
|
import { PokeballType } from "#enums/pokeball";
|
||||||
import type { EnemyPokemon } from "#app/field/pokemon";
|
import type { EnemyPokemon } from "#app/field/pokemon";
|
||||||
import { PlayerPokemon } from "#app/field/pokemon";
|
import { PlayerPokemon } from "#app/field/pokemon";
|
||||||
@ -114,7 +114,7 @@ export const ThePokemonSalesmanEncounter: MysteryEncounter = MysteryEncounterBui
|
|||||||
validEventEncounters.length === 0)
|
validEventEncounters.length === 0)
|
||||||
) {
|
) {
|
||||||
// If you roll 1%, give shiny Magikarp with random variant
|
// If you roll 1%, give shiny Magikarp with random variant
|
||||||
species = getPokemonSpecies(Species.MAGIKARP);
|
species = getPokemonSpecies(SpeciesId.MAGIKARP);
|
||||||
pokemon = new PlayerPokemon(species, 5, 2, undefined, undefined, true);
|
pokemon = new PlayerPokemon(species, 5, 2, undefined, undefined, true);
|
||||||
} else if (
|
} else if (
|
||||||
validEventEncounters.length > 0 &&
|
validEventEncounters.length > 0 &&
|
||||||
@ -151,7 +151,7 @@ export const ThePokemonSalesmanEncounter: MysteryEncounter = MysteryEncounterBui
|
|||||||
pokemon.trySetShinySeed();
|
pokemon.trySetShinySeed();
|
||||||
} else {
|
} else {
|
||||||
// If there's, and this would never happen, no eligible event encounters with a hidden ability, just do Magikarp
|
// If there's, and this would never happen, no eligible event encounters with a hidden ability, just do Magikarp
|
||||||
species = getPokemonSpecies(Species.MAGIKARP);
|
species = getPokemonSpecies(SpeciesId.MAGIKARP);
|
||||||
pokemon = new PlayerPokemon(species, 5, 2, undefined, undefined, true);
|
pokemon = new PlayerPokemon(species, 5, 2, undefined, undefined, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ import { globalScene } from "#app/global-scene";
|
|||||||
import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter";
|
import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter";
|
||||||
import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter";
|
import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter";
|
||||||
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { Nature } from "#enums/nature";
|
import { Nature } from "#enums/nature";
|
||||||
import type Pokemon from "#app/field/pokemon";
|
import type Pokemon from "#app/field/pokemon";
|
||||||
import { PokemonMove } from "#app/field/pokemon";
|
import { PokemonMove } from "#app/field/pokemon";
|
||||||
@ -64,7 +64,7 @@ export const TheStrongStuffEncounter: MysteryEncounter = MysteryEncounterBuilder
|
|||||||
disableAnimation: true,
|
disableAnimation: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
spriteKey: Species.SHUCKLE.toString(),
|
spriteKey: SpeciesId.SHUCKLE.toString(),
|
||||||
fileRoot: "pokemon",
|
fileRoot: "pokemon",
|
||||||
hasShadow: true,
|
hasShadow: true,
|
||||||
repeat: true,
|
repeat: true,
|
||||||
@ -88,7 +88,7 @@ export const TheStrongStuffEncounter: MysteryEncounter = MysteryEncounterBuilder
|
|||||||
disableSwitch: true,
|
disableSwitch: true,
|
||||||
pokemonConfigs: [
|
pokemonConfigs: [
|
||||||
{
|
{
|
||||||
species: getPokemonSpecies(Species.SHUCKLE),
|
species: getPokemonSpecies(SpeciesId.SHUCKLE),
|
||||||
isBoss: true,
|
isBoss: true,
|
||||||
bossSegments: 5,
|
bossSegments: 5,
|
||||||
shiny: false, // Shiny lock because shiny is rolled only if the battle option is picked
|
shiny: false, // Shiny lock because shiny is rolled only if the battle option is picked
|
||||||
@ -128,7 +128,7 @@ export const TheStrongStuffEncounter: MysteryEncounter = MysteryEncounterBuilder
|
|||||||
|
|
||||||
loadCustomMovesForEncounter([MoveId.GASTRO_ACID, MoveId.STEALTH_ROCK]);
|
loadCustomMovesForEncounter([MoveId.GASTRO_ACID, MoveId.STEALTH_ROCK]);
|
||||||
|
|
||||||
encounter.setDialogueToken("shuckleName", getPokemonSpecies(Species.SHUCKLE).getName());
|
encounter.setDialogueToken("shuckleName", getPokemonSpecies(SpeciesId.SHUCKLE).getName());
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
})
|
})
|
||||||
|
@ -15,7 +15,7 @@ import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounte
|
|||||||
import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter";
|
import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter";
|
||||||
import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
||||||
import { TrainerType } from "#enums/trainer-type";
|
import { TrainerType } from "#enums/trainer-type";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { AbilityId } from "#enums/ability-id";
|
import { AbilityId } from "#enums/ability-id";
|
||||||
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
@ -215,7 +215,7 @@ function endTrainerBattleAndShowDialogue(): Promise<void> {
|
|||||||
// Only trigger form change when Eiscue is in Noice form
|
// Only trigger form change when Eiscue is in Noice form
|
||||||
// Hardcoded Eiscue for now in case it is fused with another pokemon
|
// Hardcoded Eiscue for now in case it is fused with another pokemon
|
||||||
if (
|
if (
|
||||||
pokemon.species.speciesId === Species.EISCUE &&
|
pokemon.species.speciesId === SpeciesId.EISCUE &&
|
||||||
pokemon.hasAbility(AbilityId.ICE_FACE) &&
|
pokemon.hasAbility(AbilityId.ICE_FACE) &&
|
||||||
pokemon.formIndex === 1
|
pokemon.formIndex === 1
|
||||||
) {
|
) {
|
||||||
@ -256,7 +256,7 @@ function getVictorTrainerConfig(): EnemyPartyConfig {
|
|||||||
trainerType: TrainerType.VICTOR,
|
trainerType: TrainerType.VICTOR,
|
||||||
pokemonConfigs: [
|
pokemonConfigs: [
|
||||||
{
|
{
|
||||||
species: getPokemonSpecies(Species.SWELLOW),
|
species: getPokemonSpecies(SpeciesId.SWELLOW),
|
||||||
isBoss: false,
|
isBoss: false,
|
||||||
abilityIndex: 0, // Guts
|
abilityIndex: 0, // Guts
|
||||||
nature: Nature.ADAMANT,
|
nature: Nature.ADAMANT,
|
||||||
@ -274,7 +274,7 @@ function getVictorTrainerConfig(): EnemyPartyConfig {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
species: getPokemonSpecies(Species.OBSTAGOON),
|
species: getPokemonSpecies(SpeciesId.OBSTAGOON),
|
||||||
isBoss: false,
|
isBoss: false,
|
||||||
abilityIndex: 1, // Guts
|
abilityIndex: 1, // Guts
|
||||||
nature: Nature.ADAMANT,
|
nature: Nature.ADAMANT,
|
||||||
@ -300,7 +300,7 @@ function getVictoriaTrainerConfig(): EnemyPartyConfig {
|
|||||||
trainerType: TrainerType.VICTORIA,
|
trainerType: TrainerType.VICTORIA,
|
||||||
pokemonConfigs: [
|
pokemonConfigs: [
|
||||||
{
|
{
|
||||||
species: getPokemonSpecies(Species.ROSERADE),
|
species: getPokemonSpecies(SpeciesId.ROSERADE),
|
||||||
isBoss: false,
|
isBoss: false,
|
||||||
abilityIndex: 0, // Natural Cure
|
abilityIndex: 0, // Natural Cure
|
||||||
nature: Nature.CALM,
|
nature: Nature.CALM,
|
||||||
@ -318,7 +318,7 @@ function getVictoriaTrainerConfig(): EnemyPartyConfig {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
species: getPokemonSpecies(Species.GARDEVOIR),
|
species: getPokemonSpecies(SpeciesId.GARDEVOIR),
|
||||||
isBoss: false,
|
isBoss: false,
|
||||||
formIndex: 1,
|
formIndex: 1,
|
||||||
nature: Nature.TIMID,
|
nature: Nature.TIMID,
|
||||||
@ -349,7 +349,7 @@ function getViviTrainerConfig(): EnemyPartyConfig {
|
|||||||
trainerType: TrainerType.VIVI,
|
trainerType: TrainerType.VIVI,
|
||||||
pokemonConfigs: [
|
pokemonConfigs: [
|
||||||
{
|
{
|
||||||
species: getPokemonSpecies(Species.SEAKING),
|
species: getPokemonSpecies(SpeciesId.SEAKING),
|
||||||
isBoss: false,
|
isBoss: false,
|
||||||
abilityIndex: 3, // Lightning Rod
|
abilityIndex: 3, // Lightning Rod
|
||||||
nature: Nature.ADAMANT,
|
nature: Nature.ADAMANT,
|
||||||
@ -368,7 +368,7 @@ function getViviTrainerConfig(): EnemyPartyConfig {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
species: getPokemonSpecies(Species.BRELOOM),
|
species: getPokemonSpecies(SpeciesId.BRELOOM),
|
||||||
isBoss: false,
|
isBoss: false,
|
||||||
abilityIndex: 1, // Poison Heal
|
abilityIndex: 1, // Poison Heal
|
||||||
nature: Nature.JOLLY,
|
nature: Nature.JOLLY,
|
||||||
@ -386,7 +386,7 @@ function getViviTrainerConfig(): EnemyPartyConfig {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
species: getPokemonSpecies(Species.CAMERUPT),
|
species: getPokemonSpecies(SpeciesId.CAMERUPT),
|
||||||
isBoss: false,
|
isBoss: false,
|
||||||
formIndex: 1,
|
formIndex: 1,
|
||||||
nature: Nature.CALM,
|
nature: Nature.CALM,
|
||||||
@ -408,7 +408,7 @@ function getVickyTrainerConfig(): EnemyPartyConfig {
|
|||||||
trainerType: TrainerType.VICKY,
|
trainerType: TrainerType.VICKY,
|
||||||
pokemonConfigs: [
|
pokemonConfigs: [
|
||||||
{
|
{
|
||||||
species: getPokemonSpecies(Species.MEDICHAM),
|
species: getPokemonSpecies(SpeciesId.MEDICHAM),
|
||||||
isBoss: false,
|
isBoss: false,
|
||||||
formIndex: 1,
|
formIndex: 1,
|
||||||
nature: Nature.IMPISH,
|
nature: Nature.IMPISH,
|
||||||
@ -429,7 +429,7 @@ function getVitoTrainerConfig(): EnemyPartyConfig {
|
|||||||
trainerType: TrainerType.VITO,
|
trainerType: TrainerType.VITO,
|
||||||
pokemonConfigs: [
|
pokemonConfigs: [
|
||||||
{
|
{
|
||||||
species: getPokemonSpecies(Species.HISUI_ELECTRODE),
|
species: getPokemonSpecies(SpeciesId.HISUI_ELECTRODE),
|
||||||
isBoss: false,
|
isBoss: false,
|
||||||
abilityIndex: 0, // Soundproof
|
abilityIndex: 0, // Soundproof
|
||||||
nature: Nature.MODEST,
|
nature: Nature.MODEST,
|
||||||
@ -443,7 +443,7 @@ function getVitoTrainerConfig(): EnemyPartyConfig {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
species: getPokemonSpecies(Species.SWALOT),
|
species: getPokemonSpecies(SpeciesId.SWALOT),
|
||||||
isBoss: false,
|
isBoss: false,
|
||||||
abilityIndex: 2, // Gluttony
|
abilityIndex: 2, // Gluttony
|
||||||
nature: Nature.QUIET,
|
nature: Nature.QUIET,
|
||||||
@ -496,7 +496,7 @@ function getVitoTrainerConfig(): EnemyPartyConfig {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
species: getPokemonSpecies(Species.DODRIO),
|
species: getPokemonSpecies(SpeciesId.DODRIO),
|
||||||
isBoss: false,
|
isBoss: false,
|
||||||
abilityIndex: 2, // Tangled Feet
|
abilityIndex: 2, // Tangled Feet
|
||||||
nature: Nature.JOLLY,
|
nature: Nature.JOLLY,
|
||||||
@ -510,7 +510,7 @@ function getVitoTrainerConfig(): EnemyPartyConfig {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
species: getPokemonSpecies(Species.ALAKAZAM),
|
species: getPokemonSpecies(SpeciesId.ALAKAZAM),
|
||||||
isBoss: false,
|
isBoss: false,
|
||||||
formIndex: 1,
|
formIndex: 1,
|
||||||
nature: Nature.BOLD,
|
nature: Nature.BOLD,
|
||||||
@ -524,7 +524,7 @@ function getVitoTrainerConfig(): EnemyPartyConfig {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
species: getPokemonSpecies(Species.DARMANITAN),
|
species: getPokemonSpecies(SpeciesId.DARMANITAN),
|
||||||
isBoss: false,
|
isBoss: false,
|
||||||
abilityIndex: 0, // Sheer Force
|
abilityIndex: 0, // Sheer Force
|
||||||
nature: Nature.IMPISH,
|
nature: Nature.IMPISH,
|
||||||
|
@ -16,7 +16,7 @@ import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-en
|
|||||||
import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option";
|
import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option";
|
||||||
import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
||||||
import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode";
|
import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { HitHealModifier, PokemonHeldItemModifier, TurnHealModifier } from "#app/modifier/modifier";
|
import { HitHealModifier, PokemonHeldItemModifier, TurnHealModifier } from "#app/modifier/modifier";
|
||||||
import { applyModifierTypeToPlayerPokemon } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils";
|
import { applyModifierTypeToPlayerPokemon } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils";
|
||||||
import { showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils";
|
import { showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils";
|
||||||
@ -51,7 +51,7 @@ export const TrashToTreasureEncounter: MysteryEncounter = MysteryEncounterBuilde
|
|||||||
.withFleeAllowed(false)
|
.withFleeAllowed(false)
|
||||||
.withIntroSpriteConfigs([
|
.withIntroSpriteConfigs([
|
||||||
{
|
{
|
||||||
spriteKey: Species.GARBODOR.toString() + "-gigantamax",
|
spriteKey: SpeciesId.GARBODOR.toString() + "-gigantamax",
|
||||||
fileRoot: "pokemon",
|
fileRoot: "pokemon",
|
||||||
hasShadow: false,
|
hasShadow: false,
|
||||||
disableAnimation: true,
|
disableAnimation: true,
|
||||||
@ -74,7 +74,7 @@ export const TrashToTreasureEncounter: MysteryEncounter = MysteryEncounterBuilde
|
|||||||
const encounter = globalScene.currentBattle.mysteryEncounter!;
|
const encounter = globalScene.currentBattle.mysteryEncounter!;
|
||||||
|
|
||||||
// Calculate boss mon (shiny locked)
|
// Calculate boss mon (shiny locked)
|
||||||
const bossSpecies = getPokemonSpecies(Species.GARBODOR);
|
const bossSpecies = getPokemonSpecies(SpeciesId.GARBODOR);
|
||||||
const pokemonConfig: EnemyPokemonConfig = {
|
const pokemonConfig: EnemyPokemonConfig = {
|
||||||
species: bossSpecies,
|
species: bossSpecies,
|
||||||
isBoss: true,
|
isBoss: true,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { PokemonType } from "#enums/pokemon-type";
|
import { PokemonType } from "#enums/pokemon-type";
|
||||||
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { globalScene } from "#app/global-scene";
|
import { globalScene } from "#app/global-scene";
|
||||||
import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter";
|
import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter";
|
||||||
import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter";
|
import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter";
|
||||||
@ -49,55 +49,55 @@ const namespace = "mysteryEncounters/weirdDream";
|
|||||||
|
|
||||||
/** Exclude Ultra Beasts, Paradox, Eternatus, and all legendary/mythical/trio pokemon that are below 570 BST */
|
/** Exclude Ultra Beasts, Paradox, Eternatus, and all legendary/mythical/trio pokemon that are below 570 BST */
|
||||||
const EXCLUDED_TRANSFORMATION_SPECIES = [
|
const EXCLUDED_TRANSFORMATION_SPECIES = [
|
||||||
Species.ETERNATUS,
|
SpeciesId.ETERNATUS,
|
||||||
/** UBs */
|
/** UBs */
|
||||||
Species.NIHILEGO,
|
SpeciesId.NIHILEGO,
|
||||||
Species.BUZZWOLE,
|
SpeciesId.BUZZWOLE,
|
||||||
Species.PHEROMOSA,
|
SpeciesId.PHEROMOSA,
|
||||||
Species.XURKITREE,
|
SpeciesId.XURKITREE,
|
||||||
Species.CELESTEELA,
|
SpeciesId.CELESTEELA,
|
||||||
Species.KARTANA,
|
SpeciesId.KARTANA,
|
||||||
Species.GUZZLORD,
|
SpeciesId.GUZZLORD,
|
||||||
Species.POIPOLE,
|
SpeciesId.POIPOLE,
|
||||||
Species.NAGANADEL,
|
SpeciesId.NAGANADEL,
|
||||||
Species.STAKATAKA,
|
SpeciesId.STAKATAKA,
|
||||||
Species.BLACEPHALON,
|
SpeciesId.BLACEPHALON,
|
||||||
/** Paradox */
|
/** Paradox */
|
||||||
Species.GREAT_TUSK,
|
SpeciesId.GREAT_TUSK,
|
||||||
Species.SCREAM_TAIL,
|
SpeciesId.SCREAM_TAIL,
|
||||||
Species.BRUTE_BONNET,
|
SpeciesId.BRUTE_BONNET,
|
||||||
Species.FLUTTER_MANE,
|
SpeciesId.FLUTTER_MANE,
|
||||||
Species.SLITHER_WING,
|
SpeciesId.SLITHER_WING,
|
||||||
Species.SANDY_SHOCKS,
|
SpeciesId.SANDY_SHOCKS,
|
||||||
Species.ROARING_MOON,
|
SpeciesId.ROARING_MOON,
|
||||||
Species.WALKING_WAKE,
|
SpeciesId.WALKING_WAKE,
|
||||||
Species.GOUGING_FIRE,
|
SpeciesId.GOUGING_FIRE,
|
||||||
Species.RAGING_BOLT,
|
SpeciesId.RAGING_BOLT,
|
||||||
Species.IRON_TREADS,
|
SpeciesId.IRON_TREADS,
|
||||||
Species.IRON_BUNDLE,
|
SpeciesId.IRON_BUNDLE,
|
||||||
Species.IRON_HANDS,
|
SpeciesId.IRON_HANDS,
|
||||||
Species.IRON_JUGULIS,
|
SpeciesId.IRON_JUGULIS,
|
||||||
Species.IRON_MOTH,
|
SpeciesId.IRON_MOTH,
|
||||||
Species.IRON_THORNS,
|
SpeciesId.IRON_THORNS,
|
||||||
Species.IRON_VALIANT,
|
SpeciesId.IRON_VALIANT,
|
||||||
Species.IRON_LEAVES,
|
SpeciesId.IRON_LEAVES,
|
||||||
Species.IRON_BOULDER,
|
SpeciesId.IRON_BOULDER,
|
||||||
Species.IRON_CROWN,
|
SpeciesId.IRON_CROWN,
|
||||||
/** These are banned so they don't appear in the < 570 BST pool */
|
/** These are banned so they don't appear in the < 570 BST pool */
|
||||||
Species.COSMOG,
|
SpeciesId.COSMOG,
|
||||||
Species.MELTAN,
|
SpeciesId.MELTAN,
|
||||||
Species.KUBFU,
|
SpeciesId.KUBFU,
|
||||||
Species.COSMOEM,
|
SpeciesId.COSMOEM,
|
||||||
Species.POIPOLE,
|
SpeciesId.POIPOLE,
|
||||||
Species.TERAPAGOS,
|
SpeciesId.TERAPAGOS,
|
||||||
Species.TYPE_NULL,
|
SpeciesId.TYPE_NULL,
|
||||||
Species.CALYREX,
|
SpeciesId.CALYREX,
|
||||||
Species.NAGANADEL,
|
SpeciesId.NAGANADEL,
|
||||||
Species.URSHIFU,
|
SpeciesId.URSHIFU,
|
||||||
Species.OGERPON,
|
SpeciesId.OGERPON,
|
||||||
Species.OKIDOGI,
|
SpeciesId.OKIDOGI,
|
||||||
Species.MUNKIDORI,
|
SpeciesId.MUNKIDORI,
|
||||||
Species.FEZANDIPITI,
|
SpeciesId.FEZANDIPITI,
|
||||||
];
|
];
|
||||||
|
|
||||||
const SUPER_LEGENDARY_BST_THRESHOLD = 600;
|
const SUPER_LEGENDARY_BST_THRESHOLD = 600;
|
||||||
@ -500,7 +500,7 @@ async function doNewTeamPostProcess(transformations: PokemonTransformation[]) {
|
|||||||
async function postProcessTransformedPokemon(
|
async function postProcessTransformedPokemon(
|
||||||
previousPokemon: PlayerPokemon,
|
previousPokemon: PlayerPokemon,
|
||||||
newPokemon: PlayerPokemon,
|
newPokemon: PlayerPokemon,
|
||||||
speciesRootForm: Species,
|
speciesRootForm: SpeciesId,
|
||||||
forBattle = false,
|
forBattle = false,
|
||||||
): Promise<boolean> {
|
): Promise<boolean> {
|
||||||
let isNewStarter = false;
|
let isNewStarter = false;
|
||||||
@ -768,7 +768,7 @@ function doSideBySideTransformations(transformations: PokemonTransformation[]) {
|
|||||||
*/
|
*/
|
||||||
async function addEggMoveToNewPokemonMoveset(
|
async function addEggMoveToNewPokemonMoveset(
|
||||||
newPokemon: PlayerPokemon,
|
newPokemon: PlayerPokemon,
|
||||||
speciesRootForm: Species,
|
speciesRootForm: SpeciesId,
|
||||||
forBattle = false,
|
forBattle = false,
|
||||||
): Promise<number | null> {
|
): Promise<number | null> {
|
||||||
let eggMoveIndex: null | number = null;
|
let eggMoveIndex: null | number = null;
|
||||||
|
@ -13,7 +13,7 @@ import { isNullOrUndefined } from "#app/utils/common";
|
|||||||
import type { AbilityId } from "#enums/ability-id";
|
import type { AbilityId } from "#enums/ability-id";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import type { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
import type { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { SpeciesFormKey } from "#enums/species-form-key";
|
import { SpeciesFormKey } from "#enums/species-form-key";
|
||||||
import { TimeOfDay } from "#enums/time-of-day";
|
import { TimeOfDay } from "#enums/time-of-day";
|
||||||
|
|
||||||
@ -424,11 +424,11 @@ export class MoneyRequirement extends EncounterSceneRequirement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export class SpeciesRequirement extends EncounterPokemonRequirement {
|
export class SpeciesRequirement extends EncounterPokemonRequirement {
|
||||||
requiredSpecies: Species[];
|
requiredSpecies: SpeciesId[];
|
||||||
minNumberOfPokemon: number;
|
minNumberOfPokemon: number;
|
||||||
invertQuery: boolean;
|
invertQuery: boolean;
|
||||||
|
|
||||||
constructor(species: Species | Species[], minNumberOfPokemon = 1, invertQuery = false) {
|
constructor(species: SpeciesId | SpeciesId[], minNumberOfPokemon = 1, invertQuery = false) {
|
||||||
super();
|
super();
|
||||||
this.minNumberOfPokemon = minNumberOfPokemon;
|
this.minNumberOfPokemon = minNumberOfPokemon;
|
||||||
this.invertQuery = invertQuery;
|
this.invertQuery = invertQuery;
|
||||||
@ -457,7 +457,7 @@ export class SpeciesRequirement extends EncounterPokemonRequirement {
|
|||||||
|
|
||||||
override getDialogueToken(pokemon?: PlayerPokemon): [string, string] {
|
override getDialogueToken(pokemon?: PlayerPokemon): [string, string] {
|
||||||
if (pokemon?.species.speciesId && this.requiredSpecies.includes(pokemon.species.speciesId)) {
|
if (pokemon?.species.speciesId && this.requiredSpecies.includes(pokemon.species.speciesId)) {
|
||||||
return ["species", Species[pokemon.species.speciesId]];
|
return ["species", SpeciesId[pokemon.species.speciesId]];
|
||||||
}
|
}
|
||||||
return ["species", ""];
|
return ["species", ""];
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,7 @@ import { achvs } from "#app/system/achv";
|
|||||||
import { UiMode } from "#enums/ui-mode";
|
import { UiMode } from "#enums/ui-mode";
|
||||||
import type { PartyOption } from "#app/ui/party-ui-handler";
|
import type { PartyOption } from "#app/ui/party-ui-handler";
|
||||||
import { PartyUiMode } from "#app/ui/party-ui-handler";
|
import { PartyUiMode } from "#app/ui/party-ui-handler";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import type { PokemonType } from "#enums/pokemon-type";
|
import type { PokemonType } from "#enums/pokemon-type";
|
||||||
import type PokemonSpecies from "#app/data/pokemon-species";
|
import type PokemonSpecies from "#app/data/pokemon-species";
|
||||||
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
||||||
@ -51,7 +51,7 @@ export const STANDARD_ENCOUNTER_BOOSTED_LEVEL_MODIFIER = 1;
|
|||||||
* @param variant
|
* @param variant
|
||||||
*/
|
*/
|
||||||
export function getSpriteKeysFromSpecies(
|
export function getSpriteKeysFromSpecies(
|
||||||
species: Species,
|
species: SpeciesId,
|
||||||
female?: boolean,
|
female?: boolean,
|
||||||
formIndex?: number,
|
formIndex?: number,
|
||||||
shiny?: boolean,
|
shiny?: boolean,
|
||||||
@ -247,17 +247,17 @@ export function getHighestStatTotalPlayerPokemon(isAllowed = false, isFainted =
|
|||||||
*/
|
*/
|
||||||
export function getRandomSpeciesByStarterCost(
|
export function getRandomSpeciesByStarterCost(
|
||||||
starterTiers: number | [number, number],
|
starterTiers: number | [number, number],
|
||||||
excludedSpecies?: Species[],
|
excludedSpecies?: SpeciesId[],
|
||||||
types?: PokemonType[],
|
types?: PokemonType[],
|
||||||
allowSubLegendary = true,
|
allowSubLegendary = true,
|
||||||
allowLegendary = true,
|
allowLegendary = true,
|
||||||
allowMythical = true,
|
allowMythical = true,
|
||||||
): Species {
|
): SpeciesId {
|
||||||
let min = Array.isArray(starterTiers) ? starterTiers[0] : starterTiers;
|
let min = Array.isArray(starterTiers) ? starterTiers[0] : starterTiers;
|
||||||
let max = Array.isArray(starterTiers) ? starterTiers[1] : starterTiers;
|
let max = Array.isArray(starterTiers) ? starterTiers[1] : starterTiers;
|
||||||
|
|
||||||
let filteredSpecies: [PokemonSpecies, number][] = Object.keys(speciesStarterCosts)
|
let filteredSpecies: [PokemonSpecies, number][] = Object.keys(speciesStarterCosts)
|
||||||
.map(s => [Number.parseInt(s) as Species, speciesStarterCosts[s] as number])
|
.map(s => [Number.parseInt(s) as SpeciesId, speciesStarterCosts[s] as number])
|
||||||
.filter(s => {
|
.filter(s => {
|
||||||
const pokemonSpecies = getPokemonSpecies(s[0]);
|
const pokemonSpecies = getPokemonSpecies(s[0]);
|
||||||
return (
|
return (
|
||||||
@ -294,7 +294,7 @@ export function getRandomSpeciesByStarterCost(
|
|||||||
return Phaser.Math.RND.shuffle(tryFilterStarterTiers)[index][0].speciesId;
|
return Phaser.Math.RND.shuffle(tryFilterStarterTiers)[index][0].speciesId;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Species.BULBASAUR;
|
return SpeciesId.BULBASAUR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -903,34 +903,34 @@ export function doPlayerFlee(pokemon: EnemyPokemon): Promise<void> {
|
|||||||
/**
|
/**
|
||||||
* Bug Species and their corresponding weights
|
* Bug Species and their corresponding weights
|
||||||
*/
|
*/
|
||||||
const GOLDEN_BUG_NET_SPECIES_POOL: [Species, number][] = [
|
const GOLDEN_BUG_NET_SPECIES_POOL: [SpeciesId, number][] = [
|
||||||
[Species.SCYTHER, 40],
|
[SpeciesId.SCYTHER, 40],
|
||||||
[Species.SCIZOR, 40],
|
[SpeciesId.SCIZOR, 40],
|
||||||
[Species.KLEAVOR, 40],
|
[SpeciesId.KLEAVOR, 40],
|
||||||
[Species.PINSIR, 40],
|
[SpeciesId.PINSIR, 40],
|
||||||
[Species.HERACROSS, 40],
|
[SpeciesId.HERACROSS, 40],
|
||||||
[Species.YANMA, 40],
|
[SpeciesId.YANMA, 40],
|
||||||
[Species.YANMEGA, 40],
|
[SpeciesId.YANMEGA, 40],
|
||||||
[Species.SHUCKLE, 40],
|
[SpeciesId.SHUCKLE, 40],
|
||||||
[Species.ANORITH, 40],
|
[SpeciesId.ANORITH, 40],
|
||||||
[Species.ARMALDO, 40],
|
[SpeciesId.ARMALDO, 40],
|
||||||
[Species.ESCAVALIER, 40],
|
[SpeciesId.ESCAVALIER, 40],
|
||||||
[Species.ACCELGOR, 40],
|
[SpeciesId.ACCELGOR, 40],
|
||||||
[Species.JOLTIK, 40],
|
[SpeciesId.JOLTIK, 40],
|
||||||
[Species.GALVANTULA, 40],
|
[SpeciesId.GALVANTULA, 40],
|
||||||
[Species.DURANT, 40],
|
[SpeciesId.DURANT, 40],
|
||||||
[Species.LARVESTA, 40],
|
[SpeciesId.LARVESTA, 40],
|
||||||
[Species.VOLCARONA, 40],
|
[SpeciesId.VOLCARONA, 40],
|
||||||
[Species.DEWPIDER, 40],
|
[SpeciesId.DEWPIDER, 40],
|
||||||
[Species.ARAQUANID, 40],
|
[SpeciesId.ARAQUANID, 40],
|
||||||
[Species.WIMPOD, 40],
|
[SpeciesId.WIMPOD, 40],
|
||||||
[Species.GOLISOPOD, 40],
|
[SpeciesId.GOLISOPOD, 40],
|
||||||
[Species.SIZZLIPEDE, 40],
|
[SpeciesId.SIZZLIPEDE, 40],
|
||||||
[Species.CENTISKORCH, 40],
|
[SpeciesId.CENTISKORCH, 40],
|
||||||
[Species.NYMBLE, 40],
|
[SpeciesId.NYMBLE, 40],
|
||||||
[Species.LOKIX, 40],
|
[SpeciesId.LOKIX, 40],
|
||||||
[Species.BUZZWOLE, 1],
|
[SpeciesId.BUZZWOLE, 1],
|
||||||
[Species.PHEROMOSA, 1],
|
[SpeciesId.PHEROMOSA, 1],
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -951,7 +951,7 @@ export function getGoldenBugNetSpecies(level: number): PokemonSpecies {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Defaults to Scyther
|
// Defaults to Scyther
|
||||||
return getPokemonSpecies(Species.SCYTHER);
|
return getPokemonSpecies(SpeciesId.SCYTHER);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -6,7 +6,7 @@ import { MoveCategory } from "#enums/MoveCategory";
|
|||||||
import type { Constructor, nil } from "#app/utils/common";
|
import type { Constructor, nil } from "#app/utils/common";
|
||||||
import { AbilityId } from "#enums/ability-id";
|
import { AbilityId } from "#enums/ability-id";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import type { TimeOfDay } from "#enums/time-of-day";
|
import type { TimeOfDay } from "#enums/time-of-day";
|
||||||
import { getPokemonNameWithAffix } from "#app/messages";
|
import { getPokemonNameWithAffix } from "#app/messages";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
@ -139,7 +139,7 @@ export type SpeciesFormChangeConditionPredicate = (p: Pokemon) => boolean;
|
|||||||
export type SpeciesFormChangeConditionEnforceFunc = (p: Pokemon) => void;
|
export type SpeciesFormChangeConditionEnforceFunc = (p: Pokemon) => void;
|
||||||
|
|
||||||
export class SpeciesFormChange {
|
export class SpeciesFormChange {
|
||||||
public speciesId: Species;
|
public speciesId: SpeciesId;
|
||||||
public preFormKey: string;
|
public preFormKey: string;
|
||||||
public formKey: string;
|
public formKey: string;
|
||||||
public trigger: SpeciesFormChangeTrigger;
|
public trigger: SpeciesFormChangeTrigger;
|
||||||
@ -147,7 +147,7 @@ export class SpeciesFormChange {
|
|||||||
public readonly conditions: SpeciesFormChangeCondition[];
|
public readonly conditions: SpeciesFormChangeCondition[];
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
speciesId: Species,
|
speciesId: SpeciesId,
|
||||||
preFormKey: string,
|
preFormKey: string,
|
||||||
evoFormKey: string,
|
evoFormKey: string,
|
||||||
trigger: SpeciesFormChangeTrigger,
|
trigger: SpeciesFormChangeTrigger,
|
||||||
@ -562,10 +562,10 @@ export function getSpeciesFormChangeMessage(pokemon: Pokemon, formChange: Specie
|
|||||||
/**
|
/**
|
||||||
* Gives a condition for form changing checking if a species is registered as caught in the player's dex data.
|
* Gives a condition for form changing checking if a species is registered as caught in the player's dex data.
|
||||||
* Used for fusion forms such as Kyurem and Necrozma.
|
* Used for fusion forms such as Kyurem and Necrozma.
|
||||||
* @param species {@linkcode Species}
|
* @param species {@linkcode SpeciesId}
|
||||||
* @returns A {@linkcode SpeciesFormChangeCondition} checking if that species is registered as caught
|
* @returns A {@linkcode SpeciesFormChangeCondition} checking if that species is registered as caught
|
||||||
*/
|
*/
|
||||||
function getSpeciesDependentFormChangeCondition(species: Species): SpeciesFormChangeCondition {
|
function getSpeciesDependentFormChangeCondition(species: SpeciesId): SpeciesFormChangeCondition {
|
||||||
return new SpeciesFormChangeCondition(_p => !!globalScene.gameData.dexData[species].caughtAttr);
|
return new SpeciesFormChangeCondition(_p => !!globalScene.gameData.dexData[species].caughtAttr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -575,472 +575,472 @@ interface PokemonFormChanges {
|
|||||||
|
|
||||||
// biome-ignore format: manually formatted
|
// biome-ignore format: manually formatted
|
||||||
export const pokemonFormChanges: PokemonFormChanges = {
|
export const pokemonFormChanges: PokemonFormChanges = {
|
||||||
[Species.VENUSAUR]: [
|
[SpeciesId.VENUSAUR]: [
|
||||||
new SpeciesFormChange(Species.VENUSAUR, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.VENUSAURITE)),
|
new SpeciesFormChange(SpeciesId.VENUSAUR, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.VENUSAURITE)),
|
||||||
new SpeciesFormChange(Species.VENUSAUR, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.VENUSAUR, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.BLASTOISE]: [
|
[SpeciesId.BLASTOISE]: [
|
||||||
new SpeciesFormChange(Species.BLASTOISE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.BLASTOISINITE)),
|
new SpeciesFormChange(SpeciesId.BLASTOISE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.BLASTOISINITE)),
|
||||||
new SpeciesFormChange(Species.BLASTOISE, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.BLASTOISE, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.CHARIZARD]: [
|
[SpeciesId.CHARIZARD]: [
|
||||||
new SpeciesFormChange(Species.CHARIZARD, "", SpeciesFormKey.MEGA_X, new SpeciesFormChangeItemTrigger(FormChangeItem.CHARIZARDITE_X)),
|
new SpeciesFormChange(SpeciesId.CHARIZARD, "", SpeciesFormKey.MEGA_X, new SpeciesFormChangeItemTrigger(FormChangeItem.CHARIZARDITE_X)),
|
||||||
new SpeciesFormChange(Species.CHARIZARD, "", SpeciesFormKey.MEGA_Y, new SpeciesFormChangeItemTrigger(FormChangeItem.CHARIZARDITE_Y)),
|
new SpeciesFormChange(SpeciesId.CHARIZARD, "", SpeciesFormKey.MEGA_Y, new SpeciesFormChangeItemTrigger(FormChangeItem.CHARIZARDITE_Y)),
|
||||||
new SpeciesFormChange(Species.CHARIZARD, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.CHARIZARD, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.BUTTERFREE]: [
|
[SpeciesId.BUTTERFREE]: [
|
||||||
new SpeciesFormChange(Species.BUTTERFREE, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.BUTTERFREE, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.BEEDRILL]: [
|
[SpeciesId.BEEDRILL]: [
|
||||||
new SpeciesFormChange(Species.BEEDRILL, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.BEEDRILLITE))
|
new SpeciesFormChange(SpeciesId.BEEDRILL, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.BEEDRILLITE))
|
||||||
],
|
],
|
||||||
[Species.PIDGEOT]: [
|
[SpeciesId.PIDGEOT]: [
|
||||||
new SpeciesFormChange(Species.PIDGEOT, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.PIDGEOTITE))
|
new SpeciesFormChange(SpeciesId.PIDGEOT, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.PIDGEOTITE))
|
||||||
],
|
],
|
||||||
[Species.PIKACHU]: [
|
[SpeciesId.PIKACHU]: [
|
||||||
new SpeciesFormChange(Species.PIKACHU, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)),
|
new SpeciesFormChange(SpeciesId.PIKACHU, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)),
|
||||||
new SpeciesFormChange(Species.PIKACHU, "partner", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.PIKACHU, "partner", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.MEOWTH]: [
|
[SpeciesId.MEOWTH]: [
|
||||||
new SpeciesFormChange(Species.MEOWTH, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.MEOWTH, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.ALAKAZAM]: [
|
[SpeciesId.ALAKAZAM]: [
|
||||||
new SpeciesFormChange(Species.ALAKAZAM, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.ALAKAZITE))
|
new SpeciesFormChange(SpeciesId.ALAKAZAM, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.ALAKAZITE))
|
||||||
],
|
],
|
||||||
[Species.MACHAMP]: [
|
[SpeciesId.MACHAMP]: [
|
||||||
new SpeciesFormChange(Species.MACHAMP, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.MACHAMP, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.SLOWBRO]: [
|
[SpeciesId.SLOWBRO]: [
|
||||||
new SpeciesFormChange(Species.SLOWBRO, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.SLOWBRONITE))
|
new SpeciesFormChange(SpeciesId.SLOWBRO, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.SLOWBRONITE))
|
||||||
],
|
],
|
||||||
[Species.GENGAR]: [
|
[SpeciesId.GENGAR]: [
|
||||||
new SpeciesFormChange(Species.GENGAR, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.GENGARITE)),
|
new SpeciesFormChange(SpeciesId.GENGAR, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.GENGARITE)),
|
||||||
new SpeciesFormChange(Species.GENGAR, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.GENGAR, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.KINGLER]: [
|
[SpeciesId.KINGLER]: [
|
||||||
new SpeciesFormChange(Species.KINGLER, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.KINGLER, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.KANGASKHAN]: [
|
[SpeciesId.KANGASKHAN]: [
|
||||||
new SpeciesFormChange(Species.KANGASKHAN, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.KANGASKHANITE))
|
new SpeciesFormChange(SpeciesId.KANGASKHAN, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.KANGASKHANITE))
|
||||||
],
|
],
|
||||||
[Species.PINSIR]: [
|
[SpeciesId.PINSIR]: [
|
||||||
new SpeciesFormChange(Species.PINSIR, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.PINSIRITE))
|
new SpeciesFormChange(SpeciesId.PINSIR, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.PINSIRITE))
|
||||||
],
|
],
|
||||||
[Species.GYARADOS]: [
|
[SpeciesId.GYARADOS]: [
|
||||||
new SpeciesFormChange(Species.GYARADOS, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.GYARADOSITE))
|
new SpeciesFormChange(SpeciesId.GYARADOS, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.GYARADOSITE))
|
||||||
],
|
],
|
||||||
[Species.LAPRAS]: [
|
[SpeciesId.LAPRAS]: [
|
||||||
new SpeciesFormChange(Species.LAPRAS, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.LAPRAS, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.EEVEE]: [
|
[SpeciesId.EEVEE]: [
|
||||||
new SpeciesFormChange(Species.EEVEE, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)),
|
new SpeciesFormChange(SpeciesId.EEVEE, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)),
|
||||||
new SpeciesFormChange(Species.EEVEE, "partner", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.EEVEE, "partner", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.SNORLAX]: [
|
[SpeciesId.SNORLAX]: [
|
||||||
new SpeciesFormChange(Species.SNORLAX, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.SNORLAX, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.AERODACTYL]: [
|
[SpeciesId.AERODACTYL]: [
|
||||||
new SpeciesFormChange(Species.AERODACTYL, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.AERODACTYLITE))
|
new SpeciesFormChange(SpeciesId.AERODACTYL, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.AERODACTYLITE))
|
||||||
],
|
],
|
||||||
[Species.MEWTWO]: [
|
[SpeciesId.MEWTWO]: [
|
||||||
new SpeciesFormChange(Species.MEWTWO, "", SpeciesFormKey.MEGA_X, new SpeciesFormChangeItemTrigger(FormChangeItem.MEWTWONITE_X)),
|
new SpeciesFormChange(SpeciesId.MEWTWO, "", SpeciesFormKey.MEGA_X, new SpeciesFormChangeItemTrigger(FormChangeItem.MEWTWONITE_X)),
|
||||||
new SpeciesFormChange(Species.MEWTWO, "", SpeciesFormKey.MEGA_Y, new SpeciesFormChangeItemTrigger(FormChangeItem.MEWTWONITE_Y))
|
new SpeciesFormChange(SpeciesId.MEWTWO, "", SpeciesFormKey.MEGA_Y, new SpeciesFormChangeItemTrigger(FormChangeItem.MEWTWONITE_Y))
|
||||||
],
|
],
|
||||||
[Species.AMPHAROS]: [
|
[SpeciesId.AMPHAROS]: [
|
||||||
new SpeciesFormChange(Species.AMPHAROS, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.AMPHAROSITE))
|
new SpeciesFormChange(SpeciesId.AMPHAROS, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.AMPHAROSITE))
|
||||||
],
|
],
|
||||||
[Species.STEELIX]: [
|
[SpeciesId.STEELIX]: [
|
||||||
new SpeciesFormChange(Species.STEELIX, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.STEELIXITE))
|
new SpeciesFormChange(SpeciesId.STEELIX, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.STEELIXITE))
|
||||||
],
|
],
|
||||||
[Species.SCIZOR]: [
|
[SpeciesId.SCIZOR]: [
|
||||||
new SpeciesFormChange(Species.SCIZOR, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.SCIZORITE))
|
new SpeciesFormChange(SpeciesId.SCIZOR, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.SCIZORITE))
|
||||||
],
|
],
|
||||||
[Species.HERACROSS]: [
|
[SpeciesId.HERACROSS]: [
|
||||||
new SpeciesFormChange(Species.HERACROSS, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.HERACRONITE))
|
new SpeciesFormChange(SpeciesId.HERACROSS, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.HERACRONITE))
|
||||||
],
|
],
|
||||||
[Species.HOUNDOOM]: [
|
[SpeciesId.HOUNDOOM]: [
|
||||||
new SpeciesFormChange(Species.HOUNDOOM, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.HOUNDOOMINITE))
|
new SpeciesFormChange(SpeciesId.HOUNDOOM, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.HOUNDOOMINITE))
|
||||||
],
|
],
|
||||||
[Species.TYRANITAR]: [
|
[SpeciesId.TYRANITAR]: [
|
||||||
new SpeciesFormChange(Species.TYRANITAR, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.TYRANITARITE))
|
new SpeciesFormChange(SpeciesId.TYRANITAR, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.TYRANITARITE))
|
||||||
],
|
],
|
||||||
[Species.SCEPTILE]: [
|
[SpeciesId.SCEPTILE]: [
|
||||||
new SpeciesFormChange(Species.SCEPTILE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.SCEPTILITE))
|
new SpeciesFormChange(SpeciesId.SCEPTILE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.SCEPTILITE))
|
||||||
],
|
],
|
||||||
[Species.BLAZIKEN]: [
|
[SpeciesId.BLAZIKEN]: [
|
||||||
new SpeciesFormChange(Species.BLAZIKEN, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.BLAZIKENITE))
|
new SpeciesFormChange(SpeciesId.BLAZIKEN, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.BLAZIKENITE))
|
||||||
],
|
],
|
||||||
[Species.SWAMPERT]: [
|
[SpeciesId.SWAMPERT]: [
|
||||||
new SpeciesFormChange(Species.SWAMPERT, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.SWAMPERTITE))
|
new SpeciesFormChange(SpeciesId.SWAMPERT, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.SWAMPERTITE))
|
||||||
],
|
],
|
||||||
[Species.GARDEVOIR]: [
|
[SpeciesId.GARDEVOIR]: [
|
||||||
new SpeciesFormChange(Species.GARDEVOIR, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.GARDEVOIRITE))
|
new SpeciesFormChange(SpeciesId.GARDEVOIR, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.GARDEVOIRITE))
|
||||||
],
|
],
|
||||||
[Species.SABLEYE]: [
|
[SpeciesId.SABLEYE]: [
|
||||||
new SpeciesFormChange(Species.SABLEYE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.SABLENITE))
|
new SpeciesFormChange(SpeciesId.SABLEYE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.SABLENITE))
|
||||||
],
|
],
|
||||||
[Species.MAWILE]: [
|
[SpeciesId.MAWILE]: [
|
||||||
new SpeciesFormChange(Species.MAWILE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.MAWILITE))
|
new SpeciesFormChange(SpeciesId.MAWILE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.MAWILITE))
|
||||||
],
|
],
|
||||||
[Species.AGGRON]: [
|
[SpeciesId.AGGRON]: [
|
||||||
new SpeciesFormChange(Species.AGGRON, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.AGGRONITE))
|
new SpeciesFormChange(SpeciesId.AGGRON, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.AGGRONITE))
|
||||||
],
|
],
|
||||||
[Species.MEDICHAM]: [
|
[SpeciesId.MEDICHAM]: [
|
||||||
new SpeciesFormChange(Species.MEDICHAM, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.MEDICHAMITE))
|
new SpeciesFormChange(SpeciesId.MEDICHAM, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.MEDICHAMITE))
|
||||||
],
|
],
|
||||||
[Species.MANECTRIC]: [
|
[SpeciesId.MANECTRIC]: [
|
||||||
new SpeciesFormChange(Species.MANECTRIC, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.MANECTITE))
|
new SpeciesFormChange(SpeciesId.MANECTRIC, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.MANECTITE))
|
||||||
],
|
],
|
||||||
[Species.SHARPEDO]: [
|
[SpeciesId.SHARPEDO]: [
|
||||||
new SpeciesFormChange(Species.SHARPEDO, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.SHARPEDONITE))
|
new SpeciesFormChange(SpeciesId.SHARPEDO, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.SHARPEDONITE))
|
||||||
],
|
],
|
||||||
[Species.CAMERUPT]: [
|
[SpeciesId.CAMERUPT]: [
|
||||||
new SpeciesFormChange(Species.CAMERUPT, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.CAMERUPTITE))
|
new SpeciesFormChange(SpeciesId.CAMERUPT, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.CAMERUPTITE))
|
||||||
],
|
],
|
||||||
[Species.ALTARIA]: [
|
[SpeciesId.ALTARIA]: [
|
||||||
new SpeciesFormChange(Species.ALTARIA, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.ALTARIANITE))
|
new SpeciesFormChange(SpeciesId.ALTARIA, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.ALTARIANITE))
|
||||||
],
|
],
|
||||||
[Species.CASTFORM]: [
|
[SpeciesId.CASTFORM]: [
|
||||||
new SpeciesFormChange(Species.CASTFORM, "", "sunny", new SpeciesFormChangeWeatherTrigger(AbilityId.FORECAST, [ WeatherType.SUNNY, WeatherType.HARSH_SUN ]), true),
|
new SpeciesFormChange(SpeciesId.CASTFORM, "", "sunny", new SpeciesFormChangeWeatherTrigger(AbilityId.FORECAST, [ WeatherType.SUNNY, WeatherType.HARSH_SUN ]), true),
|
||||||
new SpeciesFormChange(Species.CASTFORM, "rainy", "sunny", new SpeciesFormChangeWeatherTrigger(AbilityId.FORECAST, [ WeatherType.SUNNY, WeatherType.HARSH_SUN ]), true),
|
new SpeciesFormChange(SpeciesId.CASTFORM, "rainy", "sunny", new SpeciesFormChangeWeatherTrigger(AbilityId.FORECAST, [ WeatherType.SUNNY, WeatherType.HARSH_SUN ]), true),
|
||||||
new SpeciesFormChange(Species.CASTFORM, "snowy", "sunny", new SpeciesFormChangeWeatherTrigger(AbilityId.FORECAST, [ WeatherType.SUNNY, WeatherType.HARSH_SUN ]), true),
|
new SpeciesFormChange(SpeciesId.CASTFORM, "snowy", "sunny", new SpeciesFormChangeWeatherTrigger(AbilityId.FORECAST, [ WeatherType.SUNNY, WeatherType.HARSH_SUN ]), true),
|
||||||
new SpeciesFormChange(Species.CASTFORM, "", "rainy", new SpeciesFormChangeWeatherTrigger(AbilityId.FORECAST, [ WeatherType.RAIN, WeatherType.HEAVY_RAIN ]), true),
|
new SpeciesFormChange(SpeciesId.CASTFORM, "", "rainy", new SpeciesFormChangeWeatherTrigger(AbilityId.FORECAST, [ WeatherType.RAIN, WeatherType.HEAVY_RAIN ]), true),
|
||||||
new SpeciesFormChange(Species.CASTFORM, "sunny", "rainy", new SpeciesFormChangeWeatherTrigger(AbilityId.FORECAST, [ WeatherType.RAIN, WeatherType.HEAVY_RAIN ]), true),
|
new SpeciesFormChange(SpeciesId.CASTFORM, "sunny", "rainy", new SpeciesFormChangeWeatherTrigger(AbilityId.FORECAST, [ WeatherType.RAIN, WeatherType.HEAVY_RAIN ]), true),
|
||||||
new SpeciesFormChange(Species.CASTFORM, "snowy", "rainy", new SpeciesFormChangeWeatherTrigger(AbilityId.FORECAST, [ WeatherType.RAIN, WeatherType.HEAVY_RAIN ]), true),
|
new SpeciesFormChange(SpeciesId.CASTFORM, "snowy", "rainy", new SpeciesFormChangeWeatherTrigger(AbilityId.FORECAST, [ WeatherType.RAIN, WeatherType.HEAVY_RAIN ]), true),
|
||||||
new SpeciesFormChange(Species.CASTFORM, "", "snowy", new SpeciesFormChangeWeatherTrigger(AbilityId.FORECAST, [ WeatherType.HAIL, WeatherType.SNOW ]), true),
|
new SpeciesFormChange(SpeciesId.CASTFORM, "", "snowy", new SpeciesFormChangeWeatherTrigger(AbilityId.FORECAST, [ WeatherType.HAIL, WeatherType.SNOW ]), true),
|
||||||
new SpeciesFormChange(Species.CASTFORM, "sunny", "snowy", new SpeciesFormChangeWeatherTrigger(AbilityId.FORECAST, [ WeatherType.HAIL, WeatherType.SNOW ]), true),
|
new SpeciesFormChange(SpeciesId.CASTFORM, "sunny", "snowy", new SpeciesFormChangeWeatherTrigger(AbilityId.FORECAST, [ WeatherType.HAIL, WeatherType.SNOW ]), true),
|
||||||
new SpeciesFormChange(Species.CASTFORM, "rainy", "snowy", new SpeciesFormChangeWeatherTrigger(AbilityId.FORECAST, [ WeatherType.HAIL, WeatherType.SNOW ]), true),
|
new SpeciesFormChange(SpeciesId.CASTFORM, "rainy", "snowy", new SpeciesFormChangeWeatherTrigger(AbilityId.FORECAST, [ WeatherType.HAIL, WeatherType.SNOW ]), true),
|
||||||
new SpeciesFormChange(Species.CASTFORM, "sunny", "", new SpeciesFormChangeRevertWeatherFormTrigger(AbilityId.FORECAST, [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG ]), true),
|
new SpeciesFormChange(SpeciesId.CASTFORM, "sunny", "", new SpeciesFormChangeRevertWeatherFormTrigger(AbilityId.FORECAST, [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG ]), true),
|
||||||
new SpeciesFormChange(Species.CASTFORM, "rainy", "", new SpeciesFormChangeRevertWeatherFormTrigger(AbilityId.FORECAST, [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG ]), true),
|
new SpeciesFormChange(SpeciesId.CASTFORM, "rainy", "", new SpeciesFormChangeRevertWeatherFormTrigger(AbilityId.FORECAST, [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG ]), true),
|
||||||
new SpeciesFormChange(Species.CASTFORM, "snowy", "", new SpeciesFormChangeRevertWeatherFormTrigger(AbilityId.FORECAST, [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG ]), true),
|
new SpeciesFormChange(SpeciesId.CASTFORM, "snowy", "", new SpeciesFormChangeRevertWeatherFormTrigger(AbilityId.FORECAST, [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG ]), true),
|
||||||
new SpeciesFormChange(Species.CASTFORM, "sunny", "", new SpeciesFormChangeActiveTrigger(), true),
|
new SpeciesFormChange(SpeciesId.CASTFORM, "sunny", "", new SpeciesFormChangeActiveTrigger(), true),
|
||||||
new SpeciesFormChange(Species.CASTFORM, "rainy", "", new SpeciesFormChangeActiveTrigger(), true),
|
new SpeciesFormChange(SpeciesId.CASTFORM, "rainy", "", new SpeciesFormChangeActiveTrigger(), true),
|
||||||
new SpeciesFormChange(Species.CASTFORM, "snowy", "", new SpeciesFormChangeActiveTrigger(), true)
|
new SpeciesFormChange(SpeciesId.CASTFORM, "snowy", "", new SpeciesFormChangeActiveTrigger(), true)
|
||||||
],
|
],
|
||||||
[Species.BANETTE]: [
|
[SpeciesId.BANETTE]: [
|
||||||
new SpeciesFormChange(Species.BANETTE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.BANETTITE))
|
new SpeciesFormChange(SpeciesId.BANETTE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.BANETTITE))
|
||||||
],
|
],
|
||||||
[Species.ABSOL]: [
|
[SpeciesId.ABSOL]: [
|
||||||
new SpeciesFormChange(Species.ABSOL, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.ABSOLITE))
|
new SpeciesFormChange(SpeciesId.ABSOL, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.ABSOLITE))
|
||||||
],
|
],
|
||||||
[Species.GLALIE]: [
|
[SpeciesId.GLALIE]: [
|
||||||
new SpeciesFormChange(Species.GLALIE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.GLALITITE))
|
new SpeciesFormChange(SpeciesId.GLALIE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.GLALITITE))
|
||||||
],
|
],
|
||||||
[Species.SALAMENCE]: [
|
[SpeciesId.SALAMENCE]: [
|
||||||
new SpeciesFormChange(Species.SALAMENCE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.SALAMENCITE))
|
new SpeciesFormChange(SpeciesId.SALAMENCE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.SALAMENCITE))
|
||||||
],
|
],
|
||||||
[Species.METAGROSS]: [
|
[SpeciesId.METAGROSS]: [
|
||||||
new SpeciesFormChange(Species.METAGROSS, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.METAGROSSITE))
|
new SpeciesFormChange(SpeciesId.METAGROSS, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.METAGROSSITE))
|
||||||
],
|
],
|
||||||
[Species.LATIAS]: [
|
[SpeciesId.LATIAS]: [
|
||||||
new SpeciesFormChange(Species.LATIAS, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.LATIASITE))
|
new SpeciesFormChange(SpeciesId.LATIAS, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.LATIASITE))
|
||||||
],
|
],
|
||||||
[Species.LATIOS]: [
|
[SpeciesId.LATIOS]: [
|
||||||
new SpeciesFormChange(Species.LATIOS, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.LATIOSITE))
|
new SpeciesFormChange(SpeciesId.LATIOS, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.LATIOSITE))
|
||||||
],
|
],
|
||||||
[Species.KYOGRE]: [
|
[SpeciesId.KYOGRE]: [
|
||||||
new SpeciesFormChange(Species.KYOGRE, "", SpeciesFormKey.PRIMAL, new SpeciesFormChangeItemTrigger(FormChangeItem.BLUE_ORB))
|
new SpeciesFormChange(SpeciesId.KYOGRE, "", SpeciesFormKey.PRIMAL, new SpeciesFormChangeItemTrigger(FormChangeItem.BLUE_ORB))
|
||||||
],
|
],
|
||||||
[Species.GROUDON]: [
|
[SpeciesId.GROUDON]: [
|
||||||
new SpeciesFormChange(Species.GROUDON, "", SpeciesFormKey.PRIMAL, new SpeciesFormChangeItemTrigger(FormChangeItem.RED_ORB))
|
new SpeciesFormChange(SpeciesId.GROUDON, "", SpeciesFormKey.PRIMAL, new SpeciesFormChangeItemTrigger(FormChangeItem.RED_ORB))
|
||||||
],
|
],
|
||||||
[Species.RAYQUAZA]: [
|
[SpeciesId.RAYQUAZA]: [
|
||||||
new SpeciesFormChange(Species.RAYQUAZA, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.RAYQUAZITE))
|
new SpeciesFormChange(SpeciesId.RAYQUAZA, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.RAYQUAZITE))
|
||||||
],
|
],
|
||||||
[Species.DEOXYS]: [
|
[SpeciesId.DEOXYS]: [
|
||||||
new SpeciesFormChange(Species.DEOXYS, "normal", "attack", new SpeciesFormChangeItemTrigger(FormChangeItem.SHARP_METEORITE)),
|
new SpeciesFormChange(SpeciesId.DEOXYS, "normal", "attack", new SpeciesFormChangeItemTrigger(FormChangeItem.SHARP_METEORITE)),
|
||||||
new SpeciesFormChange(Species.DEOXYS, "normal", "defense", new SpeciesFormChangeItemTrigger(FormChangeItem.HARD_METEORITE)),
|
new SpeciesFormChange(SpeciesId.DEOXYS, "normal", "defense", new SpeciesFormChangeItemTrigger(FormChangeItem.HARD_METEORITE)),
|
||||||
new SpeciesFormChange(Species.DEOXYS, "normal", "speed", new SpeciesFormChangeItemTrigger(FormChangeItem.SMOOTH_METEORITE))
|
new SpeciesFormChange(SpeciesId.DEOXYS, "normal", "speed", new SpeciesFormChangeItemTrigger(FormChangeItem.SMOOTH_METEORITE))
|
||||||
],
|
],
|
||||||
[Species.CHERRIM]: [
|
[SpeciesId.CHERRIM]: [
|
||||||
new SpeciesFormChange(Species.CHERRIM, "overcast", "sunshine", new SpeciesFormChangeWeatherTrigger(AbilityId.FLOWER_GIFT, [ WeatherType.SUNNY, WeatherType.HARSH_SUN ]), true),
|
new SpeciesFormChange(SpeciesId.CHERRIM, "overcast", "sunshine", new SpeciesFormChangeWeatherTrigger(AbilityId.FLOWER_GIFT, [ WeatherType.SUNNY, WeatherType.HARSH_SUN ]), true),
|
||||||
new SpeciesFormChange(Species.CHERRIM, "sunshine", "overcast", new SpeciesFormChangeRevertWeatherFormTrigger(AbilityId.FLOWER_GIFT, [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG, WeatherType.HAIL, WeatherType.HEAVY_RAIN, WeatherType.SNOW, WeatherType.RAIN ]), true),
|
new SpeciesFormChange(SpeciesId.CHERRIM, "sunshine", "overcast", new SpeciesFormChangeRevertWeatherFormTrigger(AbilityId.FLOWER_GIFT, [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG, WeatherType.HAIL, WeatherType.HEAVY_RAIN, WeatherType.SNOW, WeatherType.RAIN ]), true),
|
||||||
new SpeciesFormChange(Species.CHERRIM, "sunshine", "overcast", new SpeciesFormChangeActiveTrigger(), true)
|
new SpeciesFormChange(SpeciesId.CHERRIM, "sunshine", "overcast", new SpeciesFormChangeActiveTrigger(), true)
|
||||||
],
|
],
|
||||||
[Species.LOPUNNY]: [
|
[SpeciesId.LOPUNNY]: [
|
||||||
new SpeciesFormChange(Species.LOPUNNY, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.LOPUNNITE))
|
new SpeciesFormChange(SpeciesId.LOPUNNY, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.LOPUNNITE))
|
||||||
],
|
],
|
||||||
[Species.GARCHOMP]: [
|
[SpeciesId.GARCHOMP]: [
|
||||||
new SpeciesFormChange(Species.GARCHOMP, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.GARCHOMPITE))
|
new SpeciesFormChange(SpeciesId.GARCHOMP, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.GARCHOMPITE))
|
||||||
],
|
],
|
||||||
[Species.LUCARIO]: [
|
[SpeciesId.LUCARIO]: [
|
||||||
new SpeciesFormChange(Species.LUCARIO, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.LUCARIONITE))
|
new SpeciesFormChange(SpeciesId.LUCARIO, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.LUCARIONITE))
|
||||||
],
|
],
|
||||||
[Species.ABOMASNOW]: [
|
[SpeciesId.ABOMASNOW]: [
|
||||||
new SpeciesFormChange(Species.ABOMASNOW, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.ABOMASITE))
|
new SpeciesFormChange(SpeciesId.ABOMASNOW, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.ABOMASITE))
|
||||||
],
|
],
|
||||||
[Species.GALLADE]: [
|
[SpeciesId.GALLADE]: [
|
||||||
new SpeciesFormChange(Species.GALLADE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.GALLADITE))
|
new SpeciesFormChange(SpeciesId.GALLADE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.GALLADITE))
|
||||||
],
|
],
|
||||||
[Species.AUDINO]: [
|
[SpeciesId.AUDINO]: [
|
||||||
new SpeciesFormChange(Species.AUDINO, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.AUDINITE))
|
new SpeciesFormChange(SpeciesId.AUDINO, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.AUDINITE))
|
||||||
],
|
],
|
||||||
[Species.DIALGA]: [
|
[SpeciesId.DIALGA]: [
|
||||||
new SpeciesFormChange(Species.DIALGA, "", SpeciesFormKey.ORIGIN, new SpeciesFormChangeItemTrigger(FormChangeItem.ADAMANT_CRYSTAL))
|
new SpeciesFormChange(SpeciesId.DIALGA, "", SpeciesFormKey.ORIGIN, new SpeciesFormChangeItemTrigger(FormChangeItem.ADAMANT_CRYSTAL))
|
||||||
],
|
],
|
||||||
[Species.PALKIA]: [
|
[SpeciesId.PALKIA]: [
|
||||||
new SpeciesFormChange(Species.PALKIA, "", SpeciesFormKey.ORIGIN, new SpeciesFormChangeItemTrigger(FormChangeItem.LUSTROUS_GLOBE))
|
new SpeciesFormChange(SpeciesId.PALKIA, "", SpeciesFormKey.ORIGIN, new SpeciesFormChangeItemTrigger(FormChangeItem.LUSTROUS_GLOBE))
|
||||||
],
|
],
|
||||||
[Species.GIRATINA]: [
|
[SpeciesId.GIRATINA]: [
|
||||||
new SpeciesFormChange(Species.GIRATINA, "altered", SpeciesFormKey.ORIGIN, new SpeciesFormChangeItemTrigger(FormChangeItem.GRISEOUS_CORE))
|
new SpeciesFormChange(SpeciesId.GIRATINA, "altered", SpeciesFormKey.ORIGIN, new SpeciesFormChangeItemTrigger(FormChangeItem.GRISEOUS_CORE))
|
||||||
],
|
],
|
||||||
[Species.SHAYMIN]: [
|
[SpeciesId.SHAYMIN]: [
|
||||||
new SpeciesFormChange(Species.SHAYMIN, "land", "sky", new SpeciesFormChangeItemTrigger(FormChangeItem.GRACIDEA)),
|
new SpeciesFormChange(SpeciesId.SHAYMIN, "land", "sky", new SpeciesFormChangeItemTrigger(FormChangeItem.GRACIDEA)),
|
||||||
],
|
],
|
||||||
[Species.ARCEUS]: [
|
[SpeciesId.ARCEUS]: [
|
||||||
new SpeciesFormChange(Species.ARCEUS, "normal", "fighting", new SpeciesFormChangeItemTrigger(FormChangeItem.FIST_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "fighting", new SpeciesFormChangeItemTrigger(FormChangeItem.FIST_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
||||||
new SpeciesFormChange(Species.ARCEUS, "normal", "flying", new SpeciesFormChangeItemTrigger(FormChangeItem.SKY_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "flying", new SpeciesFormChangeItemTrigger(FormChangeItem.SKY_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
||||||
new SpeciesFormChange(Species.ARCEUS, "normal", "poison", new SpeciesFormChangeItemTrigger(FormChangeItem.TOXIC_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "poison", new SpeciesFormChangeItemTrigger(FormChangeItem.TOXIC_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
||||||
new SpeciesFormChange(Species.ARCEUS, "normal", "ground", new SpeciesFormChangeItemTrigger(FormChangeItem.EARTH_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "ground", new SpeciesFormChangeItemTrigger(FormChangeItem.EARTH_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
||||||
new SpeciesFormChange(Species.ARCEUS, "normal", "rock", new SpeciesFormChangeItemTrigger(FormChangeItem.STONE_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "rock", new SpeciesFormChangeItemTrigger(FormChangeItem.STONE_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
||||||
new SpeciesFormChange(Species.ARCEUS, "normal", "bug", new SpeciesFormChangeItemTrigger(FormChangeItem.INSECT_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "bug", new SpeciesFormChangeItemTrigger(FormChangeItem.INSECT_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
||||||
new SpeciesFormChange(Species.ARCEUS, "normal", "ghost", new SpeciesFormChangeItemTrigger(FormChangeItem.SPOOKY_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "ghost", new SpeciesFormChangeItemTrigger(FormChangeItem.SPOOKY_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
||||||
new SpeciesFormChange(Species.ARCEUS, "normal", "steel", new SpeciesFormChangeItemTrigger(FormChangeItem.IRON_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "steel", new SpeciesFormChangeItemTrigger(FormChangeItem.IRON_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
||||||
new SpeciesFormChange(Species.ARCEUS, "normal", "fire", new SpeciesFormChangeItemTrigger(FormChangeItem.FLAME_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "fire", new SpeciesFormChangeItemTrigger(FormChangeItem.FLAME_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
||||||
new SpeciesFormChange(Species.ARCEUS, "normal", "water", new SpeciesFormChangeItemTrigger(FormChangeItem.SPLASH_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "water", new SpeciesFormChangeItemTrigger(FormChangeItem.SPLASH_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
||||||
new SpeciesFormChange(Species.ARCEUS, "normal", "grass", new SpeciesFormChangeItemTrigger(FormChangeItem.MEADOW_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "grass", new SpeciesFormChangeItemTrigger(FormChangeItem.MEADOW_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
||||||
new SpeciesFormChange(Species.ARCEUS, "normal", "electric", new SpeciesFormChangeItemTrigger(FormChangeItem.ZAP_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "electric", new SpeciesFormChangeItemTrigger(FormChangeItem.ZAP_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
||||||
new SpeciesFormChange(Species.ARCEUS, "normal", "psychic", new SpeciesFormChangeItemTrigger(FormChangeItem.MIND_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "psychic", new SpeciesFormChangeItemTrigger(FormChangeItem.MIND_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
||||||
new SpeciesFormChange(Species.ARCEUS, "normal", "ice", new SpeciesFormChangeItemTrigger(FormChangeItem.ICICLE_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "ice", new SpeciesFormChangeItemTrigger(FormChangeItem.ICICLE_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
||||||
new SpeciesFormChange(Species.ARCEUS, "normal", "dragon", new SpeciesFormChangeItemTrigger(FormChangeItem.DRACO_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "dragon", new SpeciesFormChangeItemTrigger(FormChangeItem.DRACO_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
||||||
new SpeciesFormChange(Species.ARCEUS, "normal", "dark", new SpeciesFormChangeItemTrigger(FormChangeItem.DREAD_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "dark", new SpeciesFormChangeItemTrigger(FormChangeItem.DREAD_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
||||||
new SpeciesFormChange(Species.ARCEUS, "normal", "fairy", new SpeciesFormChangeItemTrigger(FormChangeItem.PIXIE_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
new SpeciesFormChange(SpeciesId.ARCEUS, "normal", "fairy", new SpeciesFormChangeItemTrigger(FormChangeItem.PIXIE_PLATE), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.MULTITYPE))),
|
||||||
],
|
],
|
||||||
[Species.DARMANITAN]: [
|
[SpeciesId.DARMANITAN]: [
|
||||||
new SpeciesFormChange(Species.DARMANITAN, "", "zen", new SpeciesFormChangeAbilityTrigger(), true),
|
new SpeciesFormChange(SpeciesId.DARMANITAN, "", "zen", new SpeciesFormChangeAbilityTrigger(), true),
|
||||||
new SpeciesFormChange(Species.DARMANITAN, "zen", "", new SpeciesFormChangeAbilityTrigger(), true)
|
new SpeciesFormChange(SpeciesId.DARMANITAN, "zen", "", new SpeciesFormChangeAbilityTrigger(), true)
|
||||||
],
|
],
|
||||||
[Species.GARBODOR]: [
|
[SpeciesId.GARBODOR]: [
|
||||||
new SpeciesFormChange(Species.GARBODOR, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.GARBODOR, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.TORNADUS]: [
|
[SpeciesId.TORNADUS]: [
|
||||||
new SpeciesFormChange(Species.TORNADUS, SpeciesFormKey.INCARNATE, SpeciesFormKey.THERIAN, new SpeciesFormChangeItemTrigger(FormChangeItem.REVEAL_GLASS))
|
new SpeciesFormChange(SpeciesId.TORNADUS, SpeciesFormKey.INCARNATE, SpeciesFormKey.THERIAN, new SpeciesFormChangeItemTrigger(FormChangeItem.REVEAL_GLASS))
|
||||||
],
|
],
|
||||||
[Species.THUNDURUS]: [
|
[SpeciesId.THUNDURUS]: [
|
||||||
new SpeciesFormChange(Species.THUNDURUS, SpeciesFormKey.INCARNATE, SpeciesFormKey.THERIAN, new SpeciesFormChangeItemTrigger(FormChangeItem.REVEAL_GLASS))
|
new SpeciesFormChange(SpeciesId.THUNDURUS, SpeciesFormKey.INCARNATE, SpeciesFormKey.THERIAN, new SpeciesFormChangeItemTrigger(FormChangeItem.REVEAL_GLASS))
|
||||||
],
|
],
|
||||||
[Species.LANDORUS]: [
|
[SpeciesId.LANDORUS]: [
|
||||||
new SpeciesFormChange(Species.LANDORUS, SpeciesFormKey.INCARNATE, SpeciesFormKey.THERIAN, new SpeciesFormChangeItemTrigger(FormChangeItem.REVEAL_GLASS))
|
new SpeciesFormChange(SpeciesId.LANDORUS, SpeciesFormKey.INCARNATE, SpeciesFormKey.THERIAN, new SpeciesFormChangeItemTrigger(FormChangeItem.REVEAL_GLASS))
|
||||||
],
|
],
|
||||||
[Species.KYUREM]: [
|
[SpeciesId.KYUREM]: [
|
||||||
new SpeciesFormChange(Species.KYUREM, "", "black", new SpeciesFormChangeItemTrigger(FormChangeItem.DARK_STONE), false, getSpeciesDependentFormChangeCondition(Species.ZEKROM)),
|
new SpeciesFormChange(SpeciesId.KYUREM, "", "black", new SpeciesFormChangeItemTrigger(FormChangeItem.DARK_STONE), false, getSpeciesDependentFormChangeCondition(SpeciesId.ZEKROM)),
|
||||||
new SpeciesFormChange(Species.KYUREM, "", "white", new SpeciesFormChangeItemTrigger(FormChangeItem.LIGHT_STONE), false, getSpeciesDependentFormChangeCondition(Species.RESHIRAM))
|
new SpeciesFormChange(SpeciesId.KYUREM, "", "white", new SpeciesFormChangeItemTrigger(FormChangeItem.LIGHT_STONE), false, getSpeciesDependentFormChangeCondition(SpeciesId.RESHIRAM))
|
||||||
],
|
],
|
||||||
[Species.KELDEO]: [
|
[SpeciesId.KELDEO]: [
|
||||||
new SpeciesFormChange(Species.KELDEO, "ordinary", "resolute", new SpeciesFormChangeMoveLearnedTrigger(MoveId.SECRET_SWORD), false, new SpeciesFormChangeCondition(() => globalScene.gameMode.isDaily !== true)),
|
new SpeciesFormChange(SpeciesId.KELDEO, "ordinary", "resolute", new SpeciesFormChangeMoveLearnedTrigger(MoveId.SECRET_SWORD), false, new SpeciesFormChangeCondition(() => globalScene.gameMode.isDaily !== true)),
|
||||||
new SpeciesFormChange(Species.KELDEO, "resolute", "ordinary", new SpeciesFormChangeMoveLearnedTrigger(MoveId.SECRET_SWORD, false), false, new SpeciesFormChangeCondition(() => globalScene.gameMode.isDaily !== true))
|
new SpeciesFormChange(SpeciesId.KELDEO, "resolute", "ordinary", new SpeciesFormChangeMoveLearnedTrigger(MoveId.SECRET_SWORD, false), false, new SpeciesFormChangeCondition(() => globalScene.gameMode.isDaily !== true))
|
||||||
],
|
],
|
||||||
[Species.MELOETTA]: [
|
[SpeciesId.MELOETTA]: [
|
||||||
new SpeciesFormChange(Species.MELOETTA, "aria", "pirouette", new MeloettaFormChangePostMoveTrigger(MoveId.RELIC_SONG), true),
|
new SpeciesFormChange(SpeciesId.MELOETTA, "aria", "pirouette", new MeloettaFormChangePostMoveTrigger(MoveId.RELIC_SONG), true),
|
||||||
new SpeciesFormChange(Species.MELOETTA, "pirouette", "aria", new MeloettaFormChangePostMoveTrigger(MoveId.RELIC_SONG), true)
|
new SpeciesFormChange(SpeciesId.MELOETTA, "pirouette", "aria", new MeloettaFormChangePostMoveTrigger(MoveId.RELIC_SONG), true)
|
||||||
],
|
],
|
||||||
[Species.GENESECT]: [
|
[SpeciesId.GENESECT]: [
|
||||||
new SpeciesFormChange(Species.GENESECT, "", "shock", new SpeciesFormChangeItemTrigger(FormChangeItem.SHOCK_DRIVE)),
|
new SpeciesFormChange(SpeciesId.GENESECT, "", "shock", new SpeciesFormChangeItemTrigger(FormChangeItem.SHOCK_DRIVE)),
|
||||||
new SpeciesFormChange(Species.GENESECT, "", "burn", new SpeciesFormChangeItemTrigger(FormChangeItem.BURN_DRIVE)),
|
new SpeciesFormChange(SpeciesId.GENESECT, "", "burn", new SpeciesFormChangeItemTrigger(FormChangeItem.BURN_DRIVE)),
|
||||||
new SpeciesFormChange(Species.GENESECT, "", "chill", new SpeciesFormChangeItemTrigger(FormChangeItem.CHILL_DRIVE)),
|
new SpeciesFormChange(SpeciesId.GENESECT, "", "chill", new SpeciesFormChangeItemTrigger(FormChangeItem.CHILL_DRIVE)),
|
||||||
new SpeciesFormChange(Species.GENESECT, "", "douse", new SpeciesFormChangeItemTrigger(FormChangeItem.DOUSE_DRIVE))
|
new SpeciesFormChange(SpeciesId.GENESECT, "", "douse", new SpeciesFormChangeItemTrigger(FormChangeItem.DOUSE_DRIVE))
|
||||||
],
|
],
|
||||||
[Species.GRENINJA]: [
|
[SpeciesId.GRENINJA]: [
|
||||||
new SpeciesFormChange(Species.GRENINJA, "battle-bond", "ash", new SpeciesFormChangeAbilityTrigger(), true),
|
new SpeciesFormChange(SpeciesId.GRENINJA, "battle-bond", "ash", new SpeciesFormChangeAbilityTrigger(), true),
|
||||||
new SpeciesFormChange(Species.GRENINJA, "ash", "battle-bond", new SpeciesFormChangeAbilityTrigger(), true)
|
new SpeciesFormChange(SpeciesId.GRENINJA, "ash", "battle-bond", new SpeciesFormChangeAbilityTrigger(), true)
|
||||||
],
|
],
|
||||||
[Species.PALAFIN] : [
|
[SpeciesId.PALAFIN] : [
|
||||||
new SpeciesFormChange(Species.PALAFIN, "zero", "hero", new SpeciesFormChangeAbilityTrigger(), true),
|
new SpeciesFormChange(SpeciesId.PALAFIN, "zero", "hero", new SpeciesFormChangeAbilityTrigger(), true),
|
||||||
new SpeciesFormChange(Species.PALAFIN, "hero", "zero", new SpeciesFormChangeAbilityTrigger(), true)
|
new SpeciesFormChange(SpeciesId.PALAFIN, "hero", "zero", new SpeciesFormChangeAbilityTrigger(), true)
|
||||||
],
|
],
|
||||||
[Species.AEGISLASH]: [
|
[SpeciesId.AEGISLASH]: [
|
||||||
new SpeciesFormChange(Species.AEGISLASH, "blade", "shield", new SpeciesFormChangePreMoveTrigger(MoveId.KINGS_SHIELD), true, new SpeciesFormChangeCondition(p => p.hasAbility(AbilityId.STANCE_CHANGE))),
|
new SpeciesFormChange(SpeciesId.AEGISLASH, "blade", "shield", new SpeciesFormChangePreMoveTrigger(MoveId.KINGS_SHIELD), true, new SpeciesFormChangeCondition(p => p.hasAbility(AbilityId.STANCE_CHANGE))),
|
||||||
new SpeciesFormChange(Species.AEGISLASH, "shield", "blade", new SpeciesFormChangePreMoveTrigger(m => allMoves[m].category !== MoveCategory.STATUS), true, new SpeciesFormChangeCondition(p => p.hasAbility(AbilityId.STANCE_CHANGE))),
|
new SpeciesFormChange(SpeciesId.AEGISLASH, "shield", "blade", new SpeciesFormChangePreMoveTrigger(m => allMoves[m].category !== MoveCategory.STATUS), true, new SpeciesFormChangeCondition(p => p.hasAbility(AbilityId.STANCE_CHANGE))),
|
||||||
new SpeciesFormChange(Species.AEGISLASH, "blade", "shield", new SpeciesFormChangeActiveTrigger(false), true)
|
new SpeciesFormChange(SpeciesId.AEGISLASH, "blade", "shield", new SpeciesFormChangeActiveTrigger(false), true)
|
||||||
],
|
],
|
||||||
[Species.XERNEAS]: [
|
[SpeciesId.XERNEAS]: [
|
||||||
new SpeciesFormChange(Species.XERNEAS, "neutral", "active", new SpeciesFormChangeActiveTrigger(true), true),
|
new SpeciesFormChange(SpeciesId.XERNEAS, "neutral", "active", new SpeciesFormChangeActiveTrigger(true), true),
|
||||||
new SpeciesFormChange(Species.XERNEAS, "active", "neutral", new SpeciesFormChangeActiveTrigger(false), true)
|
new SpeciesFormChange(SpeciesId.XERNEAS, "active", "neutral", new SpeciesFormChangeActiveTrigger(false), true)
|
||||||
],
|
],
|
||||||
[Species.ZYGARDE]: [
|
[SpeciesId.ZYGARDE]: [
|
||||||
new SpeciesFormChange(Species.ZYGARDE, "50-pc", "complete", new SpeciesFormChangeAbilityTrigger(), true),
|
new SpeciesFormChange(SpeciesId.ZYGARDE, "50-pc", "complete", new SpeciesFormChangeAbilityTrigger(), true),
|
||||||
new SpeciesFormChange(Species.ZYGARDE, "complete", "50-pc", new SpeciesFormChangeAbilityTrigger(), true),
|
new SpeciesFormChange(SpeciesId.ZYGARDE, "complete", "50-pc", new SpeciesFormChangeAbilityTrigger(), true),
|
||||||
new SpeciesFormChange(Species.ZYGARDE, "10-pc", "10-complete", new SpeciesFormChangeAbilityTrigger(), true),
|
new SpeciesFormChange(SpeciesId.ZYGARDE, "10-pc", "10-complete", new SpeciesFormChangeAbilityTrigger(), true),
|
||||||
new SpeciesFormChange(Species.ZYGARDE, "10-complete", "10-pc", new SpeciesFormChangeAbilityTrigger(), true)
|
new SpeciesFormChange(SpeciesId.ZYGARDE, "10-complete", "10-pc", new SpeciesFormChangeAbilityTrigger(), true)
|
||||||
],
|
],
|
||||||
[Species.DIANCIE]: [
|
[SpeciesId.DIANCIE]: [
|
||||||
new SpeciesFormChange(Species.DIANCIE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.DIANCITE))
|
new SpeciesFormChange(SpeciesId.DIANCIE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.DIANCITE))
|
||||||
],
|
],
|
||||||
[Species.HOOPA]: [
|
[SpeciesId.HOOPA]: [
|
||||||
new SpeciesFormChange(Species.HOOPA, "", "unbound", new SpeciesFormChangeItemTrigger(FormChangeItem.PRISON_BOTTLE))
|
new SpeciesFormChange(SpeciesId.HOOPA, "", "unbound", new SpeciesFormChangeItemTrigger(FormChangeItem.PRISON_BOTTLE))
|
||||||
],
|
],
|
||||||
[Species.WISHIWASHI]: [
|
[SpeciesId.WISHIWASHI]: [
|
||||||
new SpeciesFormChange(Species.WISHIWASHI, "", "school", new SpeciesFormChangeAbilityTrigger(), true),
|
new SpeciesFormChange(SpeciesId.WISHIWASHI, "", "school", new SpeciesFormChangeAbilityTrigger(), true),
|
||||||
new SpeciesFormChange(Species.WISHIWASHI, "school", "", new SpeciesFormChangeAbilityTrigger(), true)
|
new SpeciesFormChange(SpeciesId.WISHIWASHI, "school", "", new SpeciesFormChangeAbilityTrigger(), true)
|
||||||
],
|
],
|
||||||
[Species.SILVALLY]: [
|
[SpeciesId.SILVALLY]: [
|
||||||
new SpeciesFormChange(Species.SILVALLY, "normal", "fighting", new SpeciesFormChangeItemTrigger(FormChangeItem.FIGHTING_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "fighting", new SpeciesFormChangeItemTrigger(FormChangeItem.FIGHTING_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
||||||
new SpeciesFormChange(Species.SILVALLY, "normal", "flying", new SpeciesFormChangeItemTrigger(FormChangeItem.FLYING_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "flying", new SpeciesFormChangeItemTrigger(FormChangeItem.FLYING_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
||||||
new SpeciesFormChange(Species.SILVALLY, "normal", "poison", new SpeciesFormChangeItemTrigger(FormChangeItem.POISON_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "poison", new SpeciesFormChangeItemTrigger(FormChangeItem.POISON_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
||||||
new SpeciesFormChange(Species.SILVALLY, "normal", "ground", new SpeciesFormChangeItemTrigger(FormChangeItem.GROUND_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "ground", new SpeciesFormChangeItemTrigger(FormChangeItem.GROUND_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
||||||
new SpeciesFormChange(Species.SILVALLY, "normal", "rock", new SpeciesFormChangeItemTrigger(FormChangeItem.ROCK_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "rock", new SpeciesFormChangeItemTrigger(FormChangeItem.ROCK_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
||||||
new SpeciesFormChange(Species.SILVALLY, "normal", "bug", new SpeciesFormChangeItemTrigger(FormChangeItem.BUG_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "bug", new SpeciesFormChangeItemTrigger(FormChangeItem.BUG_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
||||||
new SpeciesFormChange(Species.SILVALLY, "normal", "ghost", new SpeciesFormChangeItemTrigger(FormChangeItem.GHOST_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "ghost", new SpeciesFormChangeItemTrigger(FormChangeItem.GHOST_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
||||||
new SpeciesFormChange(Species.SILVALLY, "normal", "steel", new SpeciesFormChangeItemTrigger(FormChangeItem.STEEL_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "steel", new SpeciesFormChangeItemTrigger(FormChangeItem.STEEL_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
||||||
new SpeciesFormChange(Species.SILVALLY, "normal", "fire", new SpeciesFormChangeItemTrigger(FormChangeItem.FIRE_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "fire", new SpeciesFormChangeItemTrigger(FormChangeItem.FIRE_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
||||||
new SpeciesFormChange(Species.SILVALLY, "normal", "water", new SpeciesFormChangeItemTrigger(FormChangeItem.WATER_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "water", new SpeciesFormChangeItemTrigger(FormChangeItem.WATER_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
||||||
new SpeciesFormChange(Species.SILVALLY, "normal", "grass", new SpeciesFormChangeItemTrigger(FormChangeItem.GRASS_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "grass", new SpeciesFormChangeItemTrigger(FormChangeItem.GRASS_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
||||||
new SpeciesFormChange(Species.SILVALLY, "normal", "electric", new SpeciesFormChangeItemTrigger(FormChangeItem.ELECTRIC_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "electric", new SpeciesFormChangeItemTrigger(FormChangeItem.ELECTRIC_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
||||||
new SpeciesFormChange(Species.SILVALLY, "normal", "psychic", new SpeciesFormChangeItemTrigger(FormChangeItem.PSYCHIC_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "psychic", new SpeciesFormChangeItemTrigger(FormChangeItem.PSYCHIC_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
||||||
new SpeciesFormChange(Species.SILVALLY, "normal", "ice", new SpeciesFormChangeItemTrigger(FormChangeItem.ICE_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "ice", new SpeciesFormChangeItemTrigger(FormChangeItem.ICE_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
||||||
new SpeciesFormChange(Species.SILVALLY, "normal", "dragon", new SpeciesFormChangeItemTrigger(FormChangeItem.DRAGON_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "dragon", new SpeciesFormChangeItemTrigger(FormChangeItem.DRAGON_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
||||||
new SpeciesFormChange(Species.SILVALLY, "normal", "dark", new SpeciesFormChangeItemTrigger(FormChangeItem.DARK_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "dark", new SpeciesFormChangeItemTrigger(FormChangeItem.DARK_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM))),
|
||||||
new SpeciesFormChange(Species.SILVALLY, "normal", "fairy", new SpeciesFormChangeItemTrigger(FormChangeItem.FAIRY_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM)))
|
new SpeciesFormChange(SpeciesId.SILVALLY, "normal", "fairy", new SpeciesFormChangeItemTrigger(FormChangeItem.FAIRY_MEMORY), true, new SpeciesFormChangeCondition((p) => p.hasAbility(AbilityId.RKS_SYSTEM)))
|
||||||
],
|
],
|
||||||
[Species.MINIOR]: [
|
[SpeciesId.MINIOR]: [
|
||||||
new SpeciesFormChange(Species.MINIOR, "red-meteor", "red", new SpeciesFormChangeAbilityTrigger(), true),
|
new SpeciesFormChange(SpeciesId.MINIOR, "red-meteor", "red", new SpeciesFormChangeAbilityTrigger(), true),
|
||||||
new SpeciesFormChange(Species.MINIOR, "red", "red-meteor", new SpeciesFormChangeAbilityTrigger(), true),
|
new SpeciesFormChange(SpeciesId.MINIOR, "red", "red-meteor", new SpeciesFormChangeAbilityTrigger(), true),
|
||||||
new SpeciesFormChange(Species.MINIOR, "orange-meteor", "orange", new SpeciesFormChangeAbilityTrigger(), true),
|
new SpeciesFormChange(SpeciesId.MINIOR, "orange-meteor", "orange", new SpeciesFormChangeAbilityTrigger(), true),
|
||||||
new SpeciesFormChange(Species.MINIOR, "orange", "orange-meteor", new SpeciesFormChangeAbilityTrigger(), true),
|
new SpeciesFormChange(SpeciesId.MINIOR, "orange", "orange-meteor", new SpeciesFormChangeAbilityTrigger(), true),
|
||||||
new SpeciesFormChange(Species.MINIOR, "yellow-meteor", "yellow", new SpeciesFormChangeAbilityTrigger(), true),
|
new SpeciesFormChange(SpeciesId.MINIOR, "yellow-meteor", "yellow", new SpeciesFormChangeAbilityTrigger(), true),
|
||||||
new SpeciesFormChange(Species.MINIOR, "yellow", "yellow-meteor", new SpeciesFormChangeAbilityTrigger(), true),
|
new SpeciesFormChange(SpeciesId.MINIOR, "yellow", "yellow-meteor", new SpeciesFormChangeAbilityTrigger(), true),
|
||||||
new SpeciesFormChange(Species.MINIOR, "green-meteor", "green", new SpeciesFormChangeAbilityTrigger(), true),
|
new SpeciesFormChange(SpeciesId.MINIOR, "green-meteor", "green", new SpeciesFormChangeAbilityTrigger(), true),
|
||||||
new SpeciesFormChange(Species.MINIOR, "green", "green-meteor", new SpeciesFormChangeAbilityTrigger(), true),
|
new SpeciesFormChange(SpeciesId.MINIOR, "green", "green-meteor", new SpeciesFormChangeAbilityTrigger(), true),
|
||||||
new SpeciesFormChange(Species.MINIOR, "blue-meteor", "blue", new SpeciesFormChangeAbilityTrigger(), true),
|
new SpeciesFormChange(SpeciesId.MINIOR, "blue-meteor", "blue", new SpeciesFormChangeAbilityTrigger(), true),
|
||||||
new SpeciesFormChange(Species.MINIOR, "blue", "blue-meteor", new SpeciesFormChangeAbilityTrigger(), true),
|
new SpeciesFormChange(SpeciesId.MINIOR, "blue", "blue-meteor", new SpeciesFormChangeAbilityTrigger(), true),
|
||||||
new SpeciesFormChange(Species.MINIOR, "indigo-meteor", "indigo", new SpeciesFormChangeAbilityTrigger(), true),
|
new SpeciesFormChange(SpeciesId.MINIOR, "indigo-meteor", "indigo", new SpeciesFormChangeAbilityTrigger(), true),
|
||||||
new SpeciesFormChange(Species.MINIOR, "indigo", "indigo-meteor", new SpeciesFormChangeAbilityTrigger(), true),
|
new SpeciesFormChange(SpeciesId.MINIOR, "indigo", "indigo-meteor", new SpeciesFormChangeAbilityTrigger(), true),
|
||||||
new SpeciesFormChange(Species.MINIOR, "violet-meteor", "violet", new SpeciesFormChangeAbilityTrigger(), true),
|
new SpeciesFormChange(SpeciesId.MINIOR, "violet-meteor", "violet", new SpeciesFormChangeAbilityTrigger(), true),
|
||||||
new SpeciesFormChange(Species.MINIOR, "violet", "violet-meteor", new SpeciesFormChangeAbilityTrigger(), true)
|
new SpeciesFormChange(SpeciesId.MINIOR, "violet", "violet-meteor", new SpeciesFormChangeAbilityTrigger(), true)
|
||||||
],
|
],
|
||||||
[Species.MIMIKYU]: [
|
[SpeciesId.MIMIKYU]: [
|
||||||
new SpeciesFormChange(Species.MIMIKYU, "disguised", "busted", new SpeciesFormChangeAbilityTrigger(), true),
|
new SpeciesFormChange(SpeciesId.MIMIKYU, "disguised", "busted", new SpeciesFormChangeAbilityTrigger(), true),
|
||||||
new SpeciesFormChange(Species.MIMIKYU, "busted", "disguised", new SpeciesFormChangeAbilityTrigger(), true)
|
new SpeciesFormChange(SpeciesId.MIMIKYU, "busted", "disguised", new SpeciesFormChangeAbilityTrigger(), true)
|
||||||
],
|
],
|
||||||
[Species.NECROZMA]: [
|
[SpeciesId.NECROZMA]: [
|
||||||
new SpeciesFormChange(Species.NECROZMA, "", "dawn-wings", new SpeciesFormChangeItemTrigger(FormChangeItem.N_LUNARIZER), false, getSpeciesDependentFormChangeCondition(Species.LUNALA)),
|
new SpeciesFormChange(SpeciesId.NECROZMA, "", "dawn-wings", new SpeciesFormChangeItemTrigger(FormChangeItem.N_LUNARIZER), false, getSpeciesDependentFormChangeCondition(SpeciesId.LUNALA)),
|
||||||
new SpeciesFormChange(Species.NECROZMA, "", "dusk-mane", new SpeciesFormChangeItemTrigger(FormChangeItem.N_SOLARIZER), false, getSpeciesDependentFormChangeCondition(Species.SOLGALEO)),
|
new SpeciesFormChange(SpeciesId.NECROZMA, "", "dusk-mane", new SpeciesFormChangeItemTrigger(FormChangeItem.N_SOLARIZER), false, getSpeciesDependentFormChangeCondition(SpeciesId.SOLGALEO)),
|
||||||
new SpeciesFormChange(Species.NECROZMA, "dawn-wings", "ultra", new SpeciesFormChangeItemTrigger(FormChangeItem.ULTRANECROZIUM_Z)),
|
new SpeciesFormChange(SpeciesId.NECROZMA, "dawn-wings", "ultra", new SpeciesFormChangeItemTrigger(FormChangeItem.ULTRANECROZIUM_Z)),
|
||||||
new SpeciesFormChange(Species.NECROZMA, "dusk-mane", "ultra", new SpeciesFormChangeItemTrigger(FormChangeItem.ULTRANECROZIUM_Z))
|
new SpeciesFormChange(SpeciesId.NECROZMA, "dusk-mane", "ultra", new SpeciesFormChangeItemTrigger(FormChangeItem.ULTRANECROZIUM_Z))
|
||||||
],
|
],
|
||||||
[Species.MELMETAL]: [
|
[SpeciesId.MELMETAL]: [
|
||||||
new SpeciesFormChange(Species.MELMETAL, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.MELMETAL, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.RILLABOOM]: [
|
[SpeciesId.RILLABOOM]: [
|
||||||
new SpeciesFormChange(Species.RILLABOOM, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.RILLABOOM, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.CINDERACE]: [
|
[SpeciesId.CINDERACE]: [
|
||||||
new SpeciesFormChange(Species.CINDERACE, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.CINDERACE, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.INTELEON]: [
|
[SpeciesId.INTELEON]: [
|
||||||
new SpeciesFormChange(Species.INTELEON, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.INTELEON, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.CORVIKNIGHT]: [
|
[SpeciesId.CORVIKNIGHT]: [
|
||||||
new SpeciesFormChange(Species.CORVIKNIGHT, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.CORVIKNIGHT, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.ORBEETLE]: [
|
[SpeciesId.ORBEETLE]: [
|
||||||
new SpeciesFormChange(Species.ORBEETLE, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.ORBEETLE, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.DREDNAW]: [
|
[SpeciesId.DREDNAW]: [
|
||||||
new SpeciesFormChange(Species.DREDNAW, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.DREDNAW, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.COALOSSAL]: [
|
[SpeciesId.COALOSSAL]: [
|
||||||
new SpeciesFormChange(Species.COALOSSAL, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.COALOSSAL, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.FLAPPLE]: [
|
[SpeciesId.FLAPPLE]: [
|
||||||
new SpeciesFormChange(Species.FLAPPLE, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.FLAPPLE, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.APPLETUN]: [
|
[SpeciesId.APPLETUN]: [
|
||||||
new SpeciesFormChange(Species.APPLETUN, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.APPLETUN, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.SANDACONDA]: [
|
[SpeciesId.SANDACONDA]: [
|
||||||
new SpeciesFormChange(Species.SANDACONDA, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.SANDACONDA, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.CRAMORANT]: [
|
[SpeciesId.CRAMORANT]: [
|
||||||
new SpeciesFormChange(Species.CRAMORANT, "", "gulping", new SpeciesFormChangeAbilityTrigger, true, new SpeciesFormChangeCondition(p => p.getHpRatio() >= .5)),
|
new SpeciesFormChange(SpeciesId.CRAMORANT, "", "gulping", new SpeciesFormChangeAbilityTrigger, true, new SpeciesFormChangeCondition(p => p.getHpRatio() >= .5)),
|
||||||
new SpeciesFormChange(Species.CRAMORANT, "", "gorging", new SpeciesFormChangeAbilityTrigger, true, new SpeciesFormChangeCondition(p => p.getHpRatio() < .5)),
|
new SpeciesFormChange(SpeciesId.CRAMORANT, "", "gorging", new SpeciesFormChangeAbilityTrigger, true, new SpeciesFormChangeCondition(p => p.getHpRatio() < .5)),
|
||||||
new SpeciesFormChange(Species.CRAMORANT, "gulping", "", new SpeciesFormChangeAbilityTrigger, true),
|
new SpeciesFormChange(SpeciesId.CRAMORANT, "gulping", "", new SpeciesFormChangeAbilityTrigger, true),
|
||||||
new SpeciesFormChange(Species.CRAMORANT, "gorging", "", new SpeciesFormChangeAbilityTrigger, true),
|
new SpeciesFormChange(SpeciesId.CRAMORANT, "gorging", "", new SpeciesFormChangeAbilityTrigger, true),
|
||||||
new SpeciesFormChange(Species.CRAMORANT, "gulping", "", new SpeciesFormChangeActiveTrigger(false), true),
|
new SpeciesFormChange(SpeciesId.CRAMORANT, "gulping", "", new SpeciesFormChangeActiveTrigger(false), true),
|
||||||
new SpeciesFormChange(Species.CRAMORANT, "gorging", "", new SpeciesFormChangeActiveTrigger(false), true)
|
new SpeciesFormChange(SpeciesId.CRAMORANT, "gorging", "", new SpeciesFormChangeActiveTrigger(false), true)
|
||||||
],
|
],
|
||||||
[Species.TOXTRICITY]: [
|
[SpeciesId.TOXTRICITY]: [
|
||||||
new SpeciesFormChange(Species.TOXTRICITY, "amped", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)),
|
new SpeciesFormChange(SpeciesId.TOXTRICITY, "amped", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)),
|
||||||
new SpeciesFormChange(Species.TOXTRICITY, "lowkey", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)),
|
new SpeciesFormChange(SpeciesId.TOXTRICITY, "lowkey", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)),
|
||||||
new SpeciesFormChange(Species.TOXTRICITY, SpeciesFormKey.GIGANTAMAX, "amped", new SpeciesFormChangeCompoundTrigger(new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS, false), new SpeciesDefaultFormMatchTrigger("amped"))),
|
new SpeciesFormChange(SpeciesId.TOXTRICITY, SpeciesFormKey.GIGANTAMAX, "amped", new SpeciesFormChangeCompoundTrigger(new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS, false), new SpeciesDefaultFormMatchTrigger("amped"))),
|
||||||
new SpeciesFormChange(Species.TOXTRICITY, SpeciesFormKey.GIGANTAMAX, "lowkey", new SpeciesFormChangeCompoundTrigger(new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS, false), new SpeciesDefaultFormMatchTrigger("lowkey")))
|
new SpeciesFormChange(SpeciesId.TOXTRICITY, SpeciesFormKey.GIGANTAMAX, "lowkey", new SpeciesFormChangeCompoundTrigger(new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS, false), new SpeciesDefaultFormMatchTrigger("lowkey")))
|
||||||
],
|
],
|
||||||
[Species.CENTISKORCH]: [
|
[SpeciesId.CENTISKORCH]: [
|
||||||
new SpeciesFormChange(Species.CENTISKORCH, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.CENTISKORCH, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.HATTERENE]: [
|
[SpeciesId.HATTERENE]: [
|
||||||
new SpeciesFormChange(Species.HATTERENE, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.HATTERENE, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.GRIMMSNARL]: [
|
[SpeciesId.GRIMMSNARL]: [
|
||||||
new SpeciesFormChange(Species.GRIMMSNARL, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.GRIMMSNARL, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.ALCREMIE]: [
|
[SpeciesId.ALCREMIE]: [
|
||||||
new SpeciesFormChange(Species.ALCREMIE, "vanilla-cream", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)),
|
new SpeciesFormChange(SpeciesId.ALCREMIE, "vanilla-cream", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)),
|
||||||
new SpeciesFormChange(Species.ALCREMIE, "ruby-cream", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)),
|
new SpeciesFormChange(SpeciesId.ALCREMIE, "ruby-cream", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)),
|
||||||
new SpeciesFormChange(Species.ALCREMIE, "matcha-cream", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)),
|
new SpeciesFormChange(SpeciesId.ALCREMIE, "matcha-cream", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)),
|
||||||
new SpeciesFormChange(Species.ALCREMIE, "mint-cream", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)),
|
new SpeciesFormChange(SpeciesId.ALCREMIE, "mint-cream", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)),
|
||||||
new SpeciesFormChange(Species.ALCREMIE, "lemon-cream", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)),
|
new SpeciesFormChange(SpeciesId.ALCREMIE, "lemon-cream", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)),
|
||||||
new SpeciesFormChange(Species.ALCREMIE, "salted-cream", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)),
|
new SpeciesFormChange(SpeciesId.ALCREMIE, "salted-cream", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)),
|
||||||
new SpeciesFormChange(Species.ALCREMIE, "ruby-swirl", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)),
|
new SpeciesFormChange(SpeciesId.ALCREMIE, "ruby-swirl", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)),
|
||||||
new SpeciesFormChange(Species.ALCREMIE, "caramel-swirl", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)),
|
new SpeciesFormChange(SpeciesId.ALCREMIE, "caramel-swirl", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)),
|
||||||
new SpeciesFormChange(Species.ALCREMIE, "rainbow-swirl", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.ALCREMIE, "rainbow-swirl", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.EISCUE]: [
|
[SpeciesId.EISCUE]: [
|
||||||
new SpeciesFormChange(Species.EISCUE, "", "no-ice", new SpeciesFormChangeAbilityTrigger(), true),
|
new SpeciesFormChange(SpeciesId.EISCUE, "", "no-ice", new SpeciesFormChangeAbilityTrigger(), true),
|
||||||
new SpeciesFormChange(Species.EISCUE, "no-ice", "", new SpeciesFormChangeAbilityTrigger(), true)
|
new SpeciesFormChange(SpeciesId.EISCUE, "no-ice", "", new SpeciesFormChangeAbilityTrigger(), true)
|
||||||
],
|
],
|
||||||
[Species.MORPEKO]: [
|
[SpeciesId.MORPEKO]: [
|
||||||
new SpeciesFormChange(Species.MORPEKO, "full-belly", "hangry", new SpeciesFormChangeAbilityTrigger(), true),
|
new SpeciesFormChange(SpeciesId.MORPEKO, "full-belly", "hangry", new SpeciesFormChangeAbilityTrigger(), true),
|
||||||
new SpeciesFormChange(Species.MORPEKO, "hangry", "full-belly", new SpeciesFormChangeAbilityTrigger(), true)
|
new SpeciesFormChange(SpeciesId.MORPEKO, "hangry", "full-belly", new SpeciesFormChangeAbilityTrigger(), true)
|
||||||
],
|
],
|
||||||
[Species.COPPERAJAH]: [
|
[SpeciesId.COPPERAJAH]: [
|
||||||
new SpeciesFormChange(Species.COPPERAJAH, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.COPPERAJAH, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.DURALUDON]: [
|
[SpeciesId.DURALUDON]: [
|
||||||
new SpeciesFormChange(Species.DURALUDON, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.DURALUDON, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.ZACIAN]: [
|
[SpeciesId.ZACIAN]: [
|
||||||
new SpeciesFormChange(Species.ZACIAN, "hero-of-many-battles", "crowned", new SpeciesFormChangeItemTrigger(FormChangeItem.RUSTED_SWORD))
|
new SpeciesFormChange(SpeciesId.ZACIAN, "hero-of-many-battles", "crowned", new SpeciesFormChangeItemTrigger(FormChangeItem.RUSTED_SWORD))
|
||||||
],
|
],
|
||||||
[Species.ZAMAZENTA]: [
|
[SpeciesId.ZAMAZENTA]: [
|
||||||
new SpeciesFormChange(Species.ZAMAZENTA, "hero-of-many-battles", "crowned", new SpeciesFormChangeItemTrigger(FormChangeItem.RUSTED_SHIELD))
|
new SpeciesFormChange(SpeciesId.ZAMAZENTA, "hero-of-many-battles", "crowned", new SpeciesFormChangeItemTrigger(FormChangeItem.RUSTED_SHIELD))
|
||||||
],
|
],
|
||||||
[Species.ETERNATUS]: [
|
[SpeciesId.ETERNATUS]: [
|
||||||
new SpeciesFormChange(Species.ETERNATUS, "", SpeciesFormKey.ETERNAMAX, new SpeciesFormChangeManualTrigger()),
|
new SpeciesFormChange(SpeciesId.ETERNATUS, "", SpeciesFormKey.ETERNAMAX, new SpeciesFormChangeManualTrigger()),
|
||||||
new SpeciesFormChange(Species.ETERNATUS, "", SpeciesFormKey.ETERNAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.ETERNATUS, "", SpeciesFormKey.ETERNAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.URSHIFU]: [
|
[SpeciesId.URSHIFU]: [
|
||||||
new SpeciesFormChange(Species.URSHIFU, "single-strike", SpeciesFormKey.GIGANTAMAX_SINGLE, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)),
|
new SpeciesFormChange(SpeciesId.URSHIFU, "single-strike", SpeciesFormKey.GIGANTAMAX_SINGLE, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)),
|
||||||
new SpeciesFormChange(Species.URSHIFU, "rapid-strike", SpeciesFormKey.GIGANTAMAX_RAPID, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
new SpeciesFormChange(SpeciesId.URSHIFU, "rapid-strike", SpeciesFormKey.GIGANTAMAX_RAPID, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS))
|
||||||
],
|
],
|
||||||
[Species.CALYREX]: [
|
[SpeciesId.CALYREX]: [
|
||||||
new SpeciesFormChange(Species.CALYREX, "", "ice", new SpeciesFormChangeItemTrigger(FormChangeItem.ICY_REINS_OF_UNITY), false, getSpeciesDependentFormChangeCondition(Species.GLASTRIER)),
|
new SpeciesFormChange(SpeciesId.CALYREX, "", "ice", new SpeciesFormChangeItemTrigger(FormChangeItem.ICY_REINS_OF_UNITY), false, getSpeciesDependentFormChangeCondition(SpeciesId.GLASTRIER)),
|
||||||
new SpeciesFormChange(Species.CALYREX, "", "shadow", new SpeciesFormChangeItemTrigger(FormChangeItem.SHADOW_REINS_OF_UNITY), false, getSpeciesDependentFormChangeCondition(Species.SPECTRIER))
|
new SpeciesFormChange(SpeciesId.CALYREX, "", "shadow", new SpeciesFormChangeItemTrigger(FormChangeItem.SHADOW_REINS_OF_UNITY), false, getSpeciesDependentFormChangeCondition(SpeciesId.SPECTRIER))
|
||||||
],
|
],
|
||||||
[Species.ENAMORUS]: [
|
[SpeciesId.ENAMORUS]: [
|
||||||
new SpeciesFormChange(Species.ENAMORUS, SpeciesFormKey.INCARNATE, SpeciesFormKey.THERIAN, new SpeciesFormChangeItemTrigger(FormChangeItem.REVEAL_GLASS))
|
new SpeciesFormChange(SpeciesId.ENAMORUS, SpeciesFormKey.INCARNATE, SpeciesFormKey.THERIAN, new SpeciesFormChangeItemTrigger(FormChangeItem.REVEAL_GLASS))
|
||||||
],
|
],
|
||||||
[Species.OGERPON]: [
|
[SpeciesId.OGERPON]: [
|
||||||
new SpeciesFormChange(Species.OGERPON, "teal-mask", "wellspring-mask", new SpeciesFormChangeItemTrigger(FormChangeItem.WELLSPRING_MASK)),
|
new SpeciesFormChange(SpeciesId.OGERPON, "teal-mask", "wellspring-mask", new SpeciesFormChangeItemTrigger(FormChangeItem.WELLSPRING_MASK)),
|
||||||
new SpeciesFormChange(Species.OGERPON, "teal-mask", "hearthflame-mask", new SpeciesFormChangeItemTrigger(FormChangeItem.HEARTHFLAME_MASK)),
|
new SpeciesFormChange(SpeciesId.OGERPON, "teal-mask", "hearthflame-mask", new SpeciesFormChangeItemTrigger(FormChangeItem.HEARTHFLAME_MASK)),
|
||||||
new SpeciesFormChange(Species.OGERPON, "teal-mask", "cornerstone-mask", new SpeciesFormChangeItemTrigger(FormChangeItem.CORNERSTONE_MASK)),
|
new SpeciesFormChange(SpeciesId.OGERPON, "teal-mask", "cornerstone-mask", new SpeciesFormChangeItemTrigger(FormChangeItem.CORNERSTONE_MASK)),
|
||||||
new SpeciesFormChange(Species.OGERPON, "teal-mask", "teal-mask-tera", new SpeciesFormChangeTeraTrigger(), true),
|
new SpeciesFormChange(SpeciesId.OGERPON, "teal-mask", "teal-mask-tera", new SpeciesFormChangeTeraTrigger(), true),
|
||||||
new SpeciesFormChange(Species.OGERPON, "teal-mask-tera", "teal-mask", new SpeciesFormChangeLapseTeraTrigger(), true),
|
new SpeciesFormChange(SpeciesId.OGERPON, "teal-mask-tera", "teal-mask", new SpeciesFormChangeLapseTeraTrigger(), true),
|
||||||
new SpeciesFormChange(Species.OGERPON, "wellspring-mask", "wellspring-mask-tera", new SpeciesFormChangeTeraTrigger(), true),
|
new SpeciesFormChange(SpeciesId.OGERPON, "wellspring-mask", "wellspring-mask-tera", new SpeciesFormChangeTeraTrigger(), true),
|
||||||
new SpeciesFormChange(Species.OGERPON, "wellspring-mask-tera", "wellspring-mask", new SpeciesFormChangeLapseTeraTrigger(), true),
|
new SpeciesFormChange(SpeciesId.OGERPON, "wellspring-mask-tera", "wellspring-mask", new SpeciesFormChangeLapseTeraTrigger(), true),
|
||||||
new SpeciesFormChange(Species.OGERPON, "hearthflame-mask", "hearthflame-mask-tera", new SpeciesFormChangeTeraTrigger(), true),
|
new SpeciesFormChange(SpeciesId.OGERPON, "hearthflame-mask", "hearthflame-mask-tera", new SpeciesFormChangeTeraTrigger(), true),
|
||||||
new SpeciesFormChange(Species.OGERPON, "hearthflame-mask-tera", "hearthflame-mask", new SpeciesFormChangeLapseTeraTrigger(), true),
|
new SpeciesFormChange(SpeciesId.OGERPON, "hearthflame-mask-tera", "hearthflame-mask", new SpeciesFormChangeLapseTeraTrigger(), true),
|
||||||
new SpeciesFormChange(Species.OGERPON, "cornerstone-mask", "cornerstone-mask-tera", new SpeciesFormChangeTeraTrigger(), true),
|
new SpeciesFormChange(SpeciesId.OGERPON, "cornerstone-mask", "cornerstone-mask-tera", new SpeciesFormChangeTeraTrigger(), true),
|
||||||
new SpeciesFormChange(Species.OGERPON, "cornerstone-mask-tera", "cornerstone-mask", new SpeciesFormChangeLapseTeraTrigger(), true)
|
new SpeciesFormChange(SpeciesId.OGERPON, "cornerstone-mask-tera", "cornerstone-mask", new SpeciesFormChangeLapseTeraTrigger(), true)
|
||||||
],
|
],
|
||||||
[Species.TERAPAGOS]: [
|
[SpeciesId.TERAPAGOS]: [
|
||||||
new SpeciesFormChange(Species.TERAPAGOS, "", "terastal", new SpeciesFormChangeAbilityTrigger(), true),
|
new SpeciesFormChange(SpeciesId.TERAPAGOS, "", "terastal", new SpeciesFormChangeAbilityTrigger(), true),
|
||||||
new SpeciesFormChange(Species.TERAPAGOS, "terastal", "stellar", new SpeciesFormChangeTeraTrigger(), true),
|
new SpeciesFormChange(SpeciesId.TERAPAGOS, "terastal", "stellar", new SpeciesFormChangeTeraTrigger(), true),
|
||||||
new SpeciesFormChange(Species.TERAPAGOS, "stellar", "terastal", new SpeciesFormChangeLapseTeraTrigger(), true)
|
new SpeciesFormChange(SpeciesId.TERAPAGOS, "stellar", "terastal", new SpeciesFormChangeLapseTeraTrigger(), true)
|
||||||
],
|
],
|
||||||
[Species.GALAR_DARMANITAN]: [
|
[SpeciesId.GALAR_DARMANITAN]: [
|
||||||
new SpeciesFormChange(Species.GALAR_DARMANITAN, "", "zen", new SpeciesFormChangeAbilityTrigger(), true),
|
new SpeciesFormChange(SpeciesId.GALAR_DARMANITAN, "", "zen", new SpeciesFormChangeAbilityTrigger(), true),
|
||||||
new SpeciesFormChange(Species.GALAR_DARMANITAN, "zen", "", new SpeciesFormChangeAbilityTrigger(), true)
|
new SpeciesFormChange(SpeciesId.GALAR_DARMANITAN, "zen", "", new SpeciesFormChangeAbilityTrigger(), true)
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,438 +1,443 @@
|
|||||||
import type { TrainerTierPools } from "#app/data/trainers/typedefs";
|
import type { TrainerTierPools } from "#app/data/trainers/typedefs";
|
||||||
import { TrainerPoolTier } from "#enums/trainer-pool-tier";
|
import { TrainerPoolTier } from "#enums/trainer-pool-tier";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
|
|
||||||
/** Team Rocket's admin trainer pool. */
|
/** Team Rocket's admin trainer pool. */
|
||||||
const ROCKET: TrainerTierPools = {
|
const ROCKET: TrainerTierPools = {
|
||||||
[TrainerPoolTier.COMMON]: [
|
[TrainerPoolTier.COMMON]: [
|
||||||
Species.RATTATA,
|
SpeciesId.RATTATA,
|
||||||
Species.SPEAROW,
|
SpeciesId.SPEAROW,
|
||||||
Species.EKANS,
|
SpeciesId.EKANS,
|
||||||
Species.VILEPLUME,
|
SpeciesId.VILEPLUME,
|
||||||
Species.DIGLETT,
|
SpeciesId.DIGLETT,
|
||||||
Species.GROWLITHE,
|
SpeciesId.GROWLITHE,
|
||||||
Species.GRIMER,
|
SpeciesId.GRIMER,
|
||||||
Species.DROWZEE,
|
SpeciesId.DROWZEE,
|
||||||
Species.VOLTORB,
|
SpeciesId.VOLTORB,
|
||||||
Species.EXEGGCUTE,
|
SpeciesId.EXEGGCUTE,
|
||||||
Species.CUBONE,
|
SpeciesId.CUBONE,
|
||||||
Species.KOFFING,
|
SpeciesId.KOFFING,
|
||||||
Species.MAGIKARP,
|
SpeciesId.MAGIKARP,
|
||||||
Species.ZUBAT,
|
SpeciesId.ZUBAT,
|
||||||
Species.ONIX,
|
SpeciesId.ONIX,
|
||||||
Species.HOUNDOUR,
|
SpeciesId.HOUNDOUR,
|
||||||
Species.MURKROW,
|
SpeciesId.MURKROW,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.UNCOMMON]: [
|
[TrainerPoolTier.UNCOMMON]: [
|
||||||
Species.ABRA,
|
SpeciesId.ABRA,
|
||||||
Species.GASTLY,
|
SpeciesId.GASTLY,
|
||||||
Species.OMANYTE,
|
SpeciesId.OMANYTE,
|
||||||
Species.KABUTO,
|
SpeciesId.KABUTO,
|
||||||
Species.PORYGON,
|
SpeciesId.PORYGON,
|
||||||
Species.MANKEY,
|
SpeciesId.MANKEY,
|
||||||
Species.SCYTHER,
|
SpeciesId.SCYTHER,
|
||||||
Species.ELEKID,
|
SpeciesId.ELEKID,
|
||||||
Species.MAGBY,
|
SpeciesId.MAGBY,
|
||||||
Species.ALOLA_SANDSHREW,
|
SpeciesId.ALOLA_SANDSHREW,
|
||||||
Species.ALOLA_MEOWTH,
|
SpeciesId.ALOLA_MEOWTH,
|
||||||
Species.ALOLA_GEODUDE,
|
SpeciesId.ALOLA_GEODUDE,
|
||||||
Species.ALOLA_GRIMER,
|
SpeciesId.ALOLA_GRIMER,
|
||||||
Species.PALDEA_TAUROS,
|
SpeciesId.PALDEA_TAUROS,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.RARE]: [Species.DRATINI, Species.LARVITAR],
|
[TrainerPoolTier.RARE]: [SpeciesId.DRATINI, SpeciesId.LARVITAR],
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Team Magma's admin trainer pool */
|
/** Team Magma's admin trainer pool */
|
||||||
const MAGMA: TrainerTierPools = {
|
const MAGMA: TrainerTierPools = {
|
||||||
[TrainerPoolTier.COMMON]: [
|
[TrainerPoolTier.COMMON]: [
|
||||||
Species.DIGLETT,
|
SpeciesId.DIGLETT,
|
||||||
Species.GROWLITHE,
|
SpeciesId.GROWLITHE,
|
||||||
Species.VULPIX,
|
SpeciesId.VULPIX,
|
||||||
Species.KOFFING,
|
SpeciesId.KOFFING,
|
||||||
Species.RHYHORN,
|
SpeciesId.RHYHORN,
|
||||||
Species.SLUGMA,
|
SpeciesId.SLUGMA,
|
||||||
Species.HOUNDOUR,
|
SpeciesId.HOUNDOUR,
|
||||||
Species.POOCHYENA,
|
SpeciesId.POOCHYENA,
|
||||||
Species.TORKOAL,
|
SpeciesId.TORKOAL,
|
||||||
Species.ZANGOOSE,
|
SpeciesId.ZANGOOSE,
|
||||||
Species.SOLROCK,
|
SpeciesId.SOLROCK,
|
||||||
Species.BALTOY,
|
SpeciesId.BALTOY,
|
||||||
Species.ROLYCOLY,
|
SpeciesId.ROLYCOLY,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.UNCOMMON]: [
|
[TrainerPoolTier.UNCOMMON]: [
|
||||||
Species.MAGBY,
|
SpeciesId.MAGBY,
|
||||||
Species.TRAPINCH,
|
SpeciesId.TRAPINCH,
|
||||||
Species.LILEEP,
|
SpeciesId.LILEEP,
|
||||||
Species.ANORITH,
|
SpeciesId.ANORITH,
|
||||||
Species.GOLETT,
|
SpeciesId.GOLETT,
|
||||||
Species.FLETCHLING,
|
SpeciesId.FLETCHLING,
|
||||||
Species.SALANDIT,
|
SpeciesId.SALANDIT,
|
||||||
Species.TURTONATOR,
|
SpeciesId.TURTONATOR,
|
||||||
Species.TOEDSCOOL,
|
SpeciesId.TOEDSCOOL,
|
||||||
Species.CAPSAKID,
|
SpeciesId.CAPSAKID,
|
||||||
Species.HISUI_GROWLITHE,
|
SpeciesId.HISUI_GROWLITHE,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.RARE]: [Species.CHARCADET, Species.ARON],
|
[TrainerPoolTier.RARE]: [SpeciesId.CHARCADET, SpeciesId.ARON],
|
||||||
};
|
};
|
||||||
|
|
||||||
const AQUA: TrainerTierPools = {
|
const AQUA: TrainerTierPools = {
|
||||||
[TrainerPoolTier.COMMON]: [
|
[TrainerPoolTier.COMMON]: [
|
||||||
Species.TENTACOOL,
|
SpeciesId.TENTACOOL,
|
||||||
Species.GRIMER,
|
SpeciesId.GRIMER,
|
||||||
Species.AZURILL,
|
SpeciesId.AZURILL,
|
||||||
Species.CHINCHOU,
|
SpeciesId.CHINCHOU,
|
||||||
Species.REMORAID,
|
SpeciesId.REMORAID,
|
||||||
Species.POOCHYENA,
|
SpeciesId.POOCHYENA,
|
||||||
Species.LOTAD,
|
SpeciesId.LOTAD,
|
||||||
Species.WINGULL,
|
SpeciesId.WINGULL,
|
||||||
Species.WAILMER,
|
SpeciesId.WAILMER,
|
||||||
Species.SEVIPER,
|
SpeciesId.SEVIPER,
|
||||||
Species.BARBOACH,
|
SpeciesId.BARBOACH,
|
||||||
Species.CORPHISH,
|
SpeciesId.CORPHISH,
|
||||||
Species.SPHEAL,
|
SpeciesId.SPHEAL,
|
||||||
Species.CLAMPERL,
|
SpeciesId.CLAMPERL,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.UNCOMMON]: [
|
[TrainerPoolTier.UNCOMMON]: [
|
||||||
Species.MANTYKE,
|
SpeciesId.MANTYKE,
|
||||||
Species.HORSEA,
|
SpeciesId.HORSEA,
|
||||||
Species.FEEBAS,
|
SpeciesId.FEEBAS,
|
||||||
Species.TYMPOLE,
|
SpeciesId.TYMPOLE,
|
||||||
Species.SKRELP,
|
SpeciesId.SKRELP,
|
||||||
Species.WIMPOD,
|
SpeciesId.WIMPOD,
|
||||||
Species.DHELMISE,
|
SpeciesId.DHELMISE,
|
||||||
Species.ARROKUDA,
|
SpeciesId.ARROKUDA,
|
||||||
Species.CLOBBOPUS,
|
SpeciesId.CLOBBOPUS,
|
||||||
Species.HISUI_QWILFISH,
|
SpeciesId.HISUI_QWILFISH,
|
||||||
Species.WIGLETT,
|
SpeciesId.WIGLETT,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.RARE]: [Species.BASCULEGION, Species.DONDOZO],
|
[TrainerPoolTier.RARE]: [SpeciesId.BASCULEGION, SpeciesId.DONDOZO],
|
||||||
};
|
};
|
||||||
|
|
||||||
const GALACTIC: TrainerTierPools = {
|
const GALACTIC: TrainerTierPools = {
|
||||||
[TrainerPoolTier.COMMON]: [
|
[TrainerPoolTier.COMMON]: [
|
||||||
Species.ZUBAT,
|
SpeciesId.ZUBAT,
|
||||||
Species.MAGNEMITE,
|
SpeciesId.MAGNEMITE,
|
||||||
Species.RHYHORN,
|
SpeciesId.RHYHORN,
|
||||||
Species.TANGELA,
|
SpeciesId.TANGELA,
|
||||||
Species.LICKITUNG,
|
SpeciesId.LICKITUNG,
|
||||||
Species.MAGIKARP,
|
SpeciesId.MAGIKARP,
|
||||||
Species.YANMA,
|
SpeciesId.YANMA,
|
||||||
Species.MURKROW,
|
SpeciesId.MURKROW,
|
||||||
Species.SWINUB,
|
SpeciesId.SWINUB,
|
||||||
Species.ELEKID,
|
SpeciesId.ELEKID,
|
||||||
Species.MAGBY,
|
SpeciesId.MAGBY,
|
||||||
Species.BRONZOR,
|
SpeciesId.BRONZOR,
|
||||||
Species.SKORUPI,
|
SpeciesId.SKORUPI,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.UNCOMMON]: [
|
[TrainerPoolTier.UNCOMMON]: [
|
||||||
Species.ABRA,
|
SpeciesId.ABRA,
|
||||||
Species.GLIGAR,
|
SpeciesId.GLIGAR,
|
||||||
Species.SNEASEL,
|
SpeciesId.SNEASEL,
|
||||||
Species.DUSKULL,
|
SpeciesId.DUSKULL,
|
||||||
Species.DRIFLOON,
|
SpeciesId.DRIFLOON,
|
||||||
Species.CRANIDOS,
|
SpeciesId.CRANIDOS,
|
||||||
Species.SHIELDON,
|
SpeciesId.SHIELDON,
|
||||||
Species.ROTOM,
|
SpeciesId.ROTOM,
|
||||||
Species.HISUI_QWILFISH,
|
SpeciesId.HISUI_QWILFISH,
|
||||||
|
],
|
||||||
|
[TrainerPoolTier.RARE]: [
|
||||||
|
SpeciesId.SPIRITOMB,
|
||||||
|
SpeciesId.TEDDIURSA,
|
||||||
|
SpeciesId.HISUI_SNEASEL,
|
||||||
|
SpeciesId.HISUI_LILLIGANT,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.RARE]: [Species.SPIRITOMB, Species.TEDDIURSA, Species.HISUI_SNEASEL, Species.HISUI_LILLIGANT],
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const PLASMA_ZINZOLIN: TrainerTierPools = {
|
const PLASMA_ZINZOLIN: TrainerTierPools = {
|
||||||
[TrainerPoolTier.COMMON]: [
|
[TrainerPoolTier.COMMON]: [
|
||||||
Species.SNEASEL,
|
SpeciesId.SNEASEL,
|
||||||
Species.SWINUB,
|
SpeciesId.SWINUB,
|
||||||
Species.SNORUNT,
|
SpeciesId.SNORUNT,
|
||||||
Species.SNOVER,
|
SpeciesId.SNOVER,
|
||||||
Species.TIMBURR,
|
SpeciesId.TIMBURR,
|
||||||
Species.TYMPOLE,
|
SpeciesId.TYMPOLE,
|
||||||
Species.SANDILE,
|
SpeciesId.SANDILE,
|
||||||
Species.DARUMAKA,
|
SpeciesId.DARUMAKA,
|
||||||
Species.VANILLITE,
|
SpeciesId.VANILLITE,
|
||||||
Species.FOONGUS,
|
SpeciesId.FOONGUS,
|
||||||
Species.FRILLISH,
|
SpeciesId.FRILLISH,
|
||||||
Species.JOLTIK,
|
SpeciesId.JOLTIK,
|
||||||
Species.FERROSEED,
|
SpeciesId.FERROSEED,
|
||||||
Species.CUBCHOO,
|
SpeciesId.CUBCHOO,
|
||||||
Species.GALAR_DARUMAKA,
|
SpeciesId.GALAR_DARUMAKA,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.UNCOMMON]: [
|
[TrainerPoolTier.UNCOMMON]: [
|
||||||
Species.SPHEAL,
|
SpeciesId.SPHEAL,
|
||||||
Species.DRILBUR,
|
SpeciesId.DRILBUR,
|
||||||
Species.SIGILYPH,
|
SpeciesId.SIGILYPH,
|
||||||
Species.YAMASK,
|
SpeciesId.YAMASK,
|
||||||
Species.ZORUA,
|
SpeciesId.ZORUA,
|
||||||
Species.TYNAMO,
|
SpeciesId.TYNAMO,
|
||||||
Species.MIENFOO,
|
SpeciesId.MIENFOO,
|
||||||
Species.GOLETT,
|
SpeciesId.GOLETT,
|
||||||
Species.PAWNIARD,
|
SpeciesId.PAWNIARD,
|
||||||
Species.VULLABY,
|
SpeciesId.VULLABY,
|
||||||
Species.DURANT,
|
SpeciesId.DURANT,
|
||||||
Species.BERGMITE,
|
SpeciesId.BERGMITE,
|
||||||
Species.EISCUE,
|
SpeciesId.EISCUE,
|
||||||
Species.ALOLA_SANDSHREW,
|
SpeciesId.ALOLA_SANDSHREW,
|
||||||
Species.HISUI_ZORUA,
|
SpeciesId.HISUI_ZORUA,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.RARE]: [Species.DEINO, Species.FRIGIBAX, Species.HISUI_BRAVIARY],
|
[TrainerPoolTier.RARE]: [SpeciesId.DEINO, SpeciesId.FRIGIBAX, SpeciesId.HISUI_BRAVIARY],
|
||||||
};
|
};
|
||||||
|
|
||||||
const PLASMA_COLRESS: TrainerTierPools = {
|
const PLASMA_COLRESS: TrainerTierPools = {
|
||||||
[TrainerPoolTier.COMMON]: [
|
[TrainerPoolTier.COMMON]: [
|
||||||
Species.MAGNEMITE,
|
SpeciesId.MAGNEMITE,
|
||||||
Species.GRIMER,
|
SpeciesId.GRIMER,
|
||||||
Species.VOLTORB,
|
SpeciesId.VOLTORB,
|
||||||
Species.PORYGON,
|
SpeciesId.PORYGON,
|
||||||
Species.BRONZOR,
|
SpeciesId.BRONZOR,
|
||||||
Species.ROTOM,
|
SpeciesId.ROTOM,
|
||||||
Species.MUNNA,
|
SpeciesId.MUNNA,
|
||||||
Species.DWEBBLE,
|
SpeciesId.DWEBBLE,
|
||||||
Species.FERROSEED,
|
SpeciesId.FERROSEED,
|
||||||
Species.ELGYEM,
|
SpeciesId.ELGYEM,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.UNCOMMON]: [
|
[TrainerPoolTier.UNCOMMON]: [
|
||||||
Species.BELDUM,
|
SpeciesId.BELDUM,
|
||||||
Species.SIGILYPH,
|
SpeciesId.SIGILYPH,
|
||||||
Species.TIRTOUGA,
|
SpeciesId.TIRTOUGA,
|
||||||
Species.ARCHEN,
|
SpeciesId.ARCHEN,
|
||||||
Species.TYNAMO,
|
SpeciesId.TYNAMO,
|
||||||
Species.GOLETT,
|
SpeciesId.GOLETT,
|
||||||
Species.BLIPBUG,
|
SpeciesId.BLIPBUG,
|
||||||
Species.VAROOM,
|
SpeciesId.VAROOM,
|
||||||
Species.ALOLA_GRIMER,
|
SpeciesId.ALOLA_GRIMER,
|
||||||
Species.HISUI_VOLTORB,
|
SpeciesId.HISUI_VOLTORB,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.RARE]: [Species.ELEKID, Species.MAGBY, Species.PAWNIARD, Species.DURALUDON],
|
[TrainerPoolTier.RARE]: [SpeciesId.ELEKID, SpeciesId.MAGBY, SpeciesId.PAWNIARD, SpeciesId.DURALUDON],
|
||||||
};
|
};
|
||||||
|
|
||||||
const FLARE: TrainerTierPools = {
|
const FLARE: TrainerTierPools = {
|
||||||
[TrainerPoolTier.COMMON]: [
|
[TrainerPoolTier.COMMON]: [
|
||||||
Species.ELECTRIKE,
|
SpeciesId.ELECTRIKE,
|
||||||
Species.SKORUPI,
|
SpeciesId.SKORUPI,
|
||||||
Species.PURRLOIN,
|
SpeciesId.PURRLOIN,
|
||||||
Species.FOONGUS,
|
SpeciesId.FOONGUS,
|
||||||
Species.BUNNELBY,
|
SpeciesId.BUNNELBY,
|
||||||
Species.FLETCHLING,
|
SpeciesId.FLETCHLING,
|
||||||
Species.LITLEO,
|
SpeciesId.LITLEO,
|
||||||
Species.PANGORO,
|
SpeciesId.PANGORO,
|
||||||
Species.ESPURR,
|
SpeciesId.ESPURR,
|
||||||
Species.INKAY,
|
SpeciesId.INKAY,
|
||||||
Species.CLAUNCHER,
|
SpeciesId.CLAUNCHER,
|
||||||
Species.HELIOPTILE,
|
SpeciesId.HELIOPTILE,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.UNCOMMON]: [
|
[TrainerPoolTier.UNCOMMON]: [
|
||||||
Species.HOUNDOUR,
|
SpeciesId.HOUNDOUR,
|
||||||
Species.SNEASEL,
|
SpeciesId.SNEASEL,
|
||||||
Species.LITWICK,
|
SpeciesId.LITWICK,
|
||||||
Species.HONEDGE,
|
SpeciesId.HONEDGE,
|
||||||
Species.BINACLE,
|
SpeciesId.BINACLE,
|
||||||
Species.SKRELP,
|
SpeciesId.SKRELP,
|
||||||
Species.NOIBAT,
|
SpeciesId.NOIBAT,
|
||||||
Species.PHANTUMP,
|
SpeciesId.PHANTUMP,
|
||||||
Species.PUMPKABOO,
|
SpeciesId.PUMPKABOO,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.RARE]: [Species.GOOMY, Species.HISUI_AVALUGG],
|
[TrainerPoolTier.RARE]: [SpeciesId.GOOMY, SpeciesId.HISUI_AVALUGG],
|
||||||
};
|
};
|
||||||
|
|
||||||
const AETHER: TrainerTierPools = {
|
const AETHER: TrainerTierPools = {
|
||||||
[TrainerPoolTier.COMMON]: [
|
[TrainerPoolTier.COMMON]: [
|
||||||
Species.ABRA,
|
SpeciesId.ABRA,
|
||||||
Species.SLOWPOKE,
|
SpeciesId.SLOWPOKE,
|
||||||
Species.MAGNEMITE,
|
SpeciesId.MAGNEMITE,
|
||||||
Species.EXEGGUTOR,
|
SpeciesId.EXEGGUTOR,
|
||||||
Species.NATU,
|
SpeciesId.NATU,
|
||||||
Species.BALTOY,
|
SpeciesId.BALTOY,
|
||||||
Species.MIME_JR,
|
SpeciesId.MIME_JR,
|
||||||
Species.ELGYEM,
|
SpeciesId.ELGYEM,
|
||||||
Species.INKAY,
|
SpeciesId.INKAY,
|
||||||
Species.BRUXISH,
|
SpeciesId.BRUXISH,
|
||||||
Species.BLIPBUG,
|
SpeciesId.BLIPBUG,
|
||||||
Species.ALOLA_RAICHU,
|
SpeciesId.ALOLA_RAICHU,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.UNCOMMON]: [
|
[TrainerPoolTier.UNCOMMON]: [
|
||||||
Species.RALTS,
|
SpeciesId.RALTS,
|
||||||
Species.MEDITITE,
|
SpeciesId.MEDITITE,
|
||||||
Species.BELDUM,
|
SpeciesId.BELDUM,
|
||||||
Species.SOLOSIS,
|
SpeciesId.SOLOSIS,
|
||||||
Species.HATENNA,
|
SpeciesId.HATENNA,
|
||||||
Species.STANTLER,
|
SpeciesId.STANTLER,
|
||||||
Species.GIRAFARIG,
|
SpeciesId.GIRAFARIG,
|
||||||
Species.ALOLA_GRIMER,
|
SpeciesId.ALOLA_GRIMER,
|
||||||
Species.GALAR_SLOWPOKE,
|
SpeciesId.GALAR_SLOWPOKE,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.RARE]: [Species.PORYGON, Species.ARMAROUGE],
|
[TrainerPoolTier.RARE]: [SpeciesId.PORYGON, SpeciesId.ARMAROUGE],
|
||||||
};
|
};
|
||||||
|
|
||||||
const SKULL: TrainerTierPools = {
|
const SKULL: TrainerTierPools = {
|
||||||
[TrainerPoolTier.COMMON]: [
|
[TrainerPoolTier.COMMON]: [
|
||||||
Species.GASTLY,
|
SpeciesId.GASTLY,
|
||||||
Species.KOFFING,
|
SpeciesId.KOFFING,
|
||||||
Species.ZUBAT,
|
SpeciesId.ZUBAT,
|
||||||
Species.VENONAT,
|
SpeciesId.VENONAT,
|
||||||
Species.STUNKY,
|
SpeciesId.STUNKY,
|
||||||
Species.CROAGUNK,
|
SpeciesId.CROAGUNK,
|
||||||
Species.VENIPEDE,
|
SpeciesId.VENIPEDE,
|
||||||
Species.SCRAGGY,
|
SpeciesId.SCRAGGY,
|
||||||
Species.MAREANIE,
|
SpeciesId.MAREANIE,
|
||||||
Species.FOMANTIS,
|
SpeciesId.FOMANTIS,
|
||||||
Species.ALOLA_GRIMER,
|
SpeciesId.ALOLA_GRIMER,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.UNCOMMON]: [
|
[TrainerPoolTier.UNCOMMON]: [
|
||||||
Species.NIDORAN_F,
|
SpeciesId.NIDORAN_F,
|
||||||
Species.SKORUPI,
|
SpeciesId.SKORUPI,
|
||||||
Species.PAWNIARD,
|
SpeciesId.PAWNIARD,
|
||||||
Species.VULLABY,
|
SpeciesId.VULLABY,
|
||||||
Species.TOXEL,
|
SpeciesId.TOXEL,
|
||||||
Species.GLIMMET,
|
SpeciesId.GLIMMET,
|
||||||
Species.PALDEA_WOOPER,
|
SpeciesId.PALDEA_WOOPER,
|
||||||
Species.GALAR_SLOWPOKE,
|
SpeciesId.GALAR_SLOWPOKE,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.RARE]: [Species.SKRELP, Species.HISUI_SNEASEL],
|
[TrainerPoolTier.RARE]: [SpeciesId.SKRELP, SpeciesId.HISUI_SNEASEL],
|
||||||
};
|
};
|
||||||
|
|
||||||
const MACRO_COSMOS: TrainerTierPools = {
|
const MACRO_COSMOS: TrainerTierPools = {
|
||||||
[TrainerPoolTier.COMMON]: [
|
[TrainerPoolTier.COMMON]: [
|
||||||
Species.VULPIX,
|
SpeciesId.VULPIX,
|
||||||
Species.FEEBAS,
|
SpeciesId.FEEBAS,
|
||||||
Species.MAWILE,
|
SpeciesId.MAWILE,
|
||||||
Species.FROSLASS,
|
SpeciesId.FROSLASS,
|
||||||
Species.GOTHITA,
|
SpeciesId.GOTHITA,
|
||||||
Species.FLABEBE,
|
SpeciesId.FLABEBE,
|
||||||
Species.SALANDIT,
|
SpeciesId.SALANDIT,
|
||||||
Species.TSAREENA,
|
SpeciesId.TSAREENA,
|
||||||
Species.SINISTEA,
|
SpeciesId.SINISTEA,
|
||||||
Species.HATENNA,
|
SpeciesId.HATENNA,
|
||||||
Species.INDEEDEE,
|
SpeciesId.INDEEDEE,
|
||||||
Species.GALAR_PONYTA,
|
SpeciesId.GALAR_PONYTA,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.UNCOMMON]: [
|
[TrainerPoolTier.UNCOMMON]: [
|
||||||
Species.TOGEPI,
|
SpeciesId.TOGEPI,
|
||||||
Species.VULLABY,
|
SpeciesId.VULLABY,
|
||||||
Species.MAREANIE,
|
SpeciesId.MAREANIE,
|
||||||
Species.CUFANT,
|
SpeciesId.CUFANT,
|
||||||
Species.TINKATINK,
|
SpeciesId.TINKATINK,
|
||||||
Species.ALOLA_VULPIX,
|
SpeciesId.ALOLA_VULPIX,
|
||||||
Species.GALAR_CORSOLA,
|
SpeciesId.GALAR_CORSOLA,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.RARE]: [Species.APPLIN, Species.HISUI_LILLIGANT],
|
[TrainerPoolTier.RARE]: [SpeciesId.APPLIN, SpeciesId.HISUI_LILLIGANT],
|
||||||
};
|
};
|
||||||
|
|
||||||
const STAR_DARK: TrainerTierPools = {
|
const STAR_DARK: TrainerTierPools = {
|
||||||
[TrainerPoolTier.COMMON]: [
|
[TrainerPoolTier.COMMON]: [
|
||||||
Species.MURKROW,
|
SpeciesId.MURKROW,
|
||||||
Species.SEEDOT,
|
SpeciesId.SEEDOT,
|
||||||
Species.SABLEYE,
|
SpeciesId.SABLEYE,
|
||||||
Species.CACNEA,
|
SpeciesId.CACNEA,
|
||||||
Species.STUNKY,
|
SpeciesId.STUNKY,
|
||||||
Species.SANDILE,
|
SpeciesId.SANDILE,
|
||||||
Species.INKAY,
|
SpeciesId.INKAY,
|
||||||
Species.NYMBLE,
|
SpeciesId.NYMBLE,
|
||||||
Species.MASCHIFF,
|
SpeciesId.MASCHIFF,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.UNCOMMON]: [
|
[TrainerPoolTier.UNCOMMON]: [
|
||||||
Species.UMBREON,
|
SpeciesId.UMBREON,
|
||||||
Species.CORPHISH,
|
SpeciesId.CORPHISH,
|
||||||
Species.SNEASEL,
|
SpeciesId.SNEASEL,
|
||||||
Species.ZORUA,
|
SpeciesId.ZORUA,
|
||||||
Species.IMPIDIMP,
|
SpeciesId.IMPIDIMP,
|
||||||
Species.BOMBIRDIER,
|
SpeciesId.BOMBIRDIER,
|
||||||
Species.GALAR_ZIGZAGOON,
|
SpeciesId.GALAR_ZIGZAGOON,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.RARE]: [Species.DEINO, Species.SPRIGATITO],
|
[TrainerPoolTier.RARE]: [SpeciesId.DEINO, SpeciesId.SPRIGATITO],
|
||||||
};
|
};
|
||||||
|
|
||||||
const STAR_FIRE: TrainerTierPools = {
|
const STAR_FIRE: TrainerTierPools = {
|
||||||
[TrainerPoolTier.COMMON]: [
|
[TrainerPoolTier.COMMON]: [
|
||||||
Species.GROWLITHE,
|
SpeciesId.GROWLITHE,
|
||||||
Species.HOUNDOUR,
|
SpeciesId.HOUNDOUR,
|
||||||
Species.NUMEL,
|
SpeciesId.NUMEL,
|
||||||
Species.TORKOAL,
|
SpeciesId.TORKOAL,
|
||||||
Species.FLETCHLING,
|
SpeciesId.FLETCHLING,
|
||||||
Species.LITLEO,
|
SpeciesId.LITLEO,
|
||||||
Species.SIZZLIPEDE,
|
SpeciesId.SIZZLIPEDE,
|
||||||
Species.ROLYCOLY,
|
SpeciesId.ROLYCOLY,
|
||||||
Species.CAPSAKID,
|
SpeciesId.CAPSAKID,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.UNCOMMON]: [
|
[TrainerPoolTier.UNCOMMON]: [
|
||||||
Species.PONYTA,
|
SpeciesId.PONYTA,
|
||||||
Species.FLAREON,
|
SpeciesId.FLAREON,
|
||||||
Species.MAGBY,
|
SpeciesId.MAGBY,
|
||||||
Species.DARUMAKA,
|
SpeciesId.DARUMAKA,
|
||||||
Species.LITWICK,
|
SpeciesId.LITWICK,
|
||||||
Species.SALANDIT,
|
SpeciesId.SALANDIT,
|
||||||
Species.TURTONATOR,
|
SpeciesId.TURTONATOR,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.RARE]: [Species.LARVESTA, Species.FUECOCO],
|
[TrainerPoolTier.RARE]: [SpeciesId.LARVESTA, SpeciesId.FUECOCO],
|
||||||
};
|
};
|
||||||
|
|
||||||
const STAR_POISON: TrainerTierPools = {
|
const STAR_POISON: TrainerTierPools = {
|
||||||
[TrainerPoolTier.COMMON]: [
|
[TrainerPoolTier.COMMON]: [
|
||||||
Species.GRIMER,
|
SpeciesId.GRIMER,
|
||||||
Species.VENONAT,
|
SpeciesId.VENONAT,
|
||||||
Species.SEVIPER,
|
SpeciesId.SEVIPER,
|
||||||
Species.STUNKY,
|
SpeciesId.STUNKY,
|
||||||
Species.FOONGUS,
|
SpeciesId.FOONGUS,
|
||||||
Species.MAREANIE,
|
SpeciesId.MAREANIE,
|
||||||
Species.TOXEL,
|
SpeciesId.TOXEL,
|
||||||
Species.GRAFAIAI,
|
SpeciesId.GRAFAIAI,
|
||||||
Species.PALDEA_WOOPER,
|
SpeciesId.PALDEA_WOOPER,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.UNCOMMON]: [
|
[TrainerPoolTier.UNCOMMON]: [
|
||||||
Species.ZUBAT,
|
SpeciesId.ZUBAT,
|
||||||
Species.GASTLY,
|
SpeciesId.GASTLY,
|
||||||
Species.SKRELP,
|
SpeciesId.SKRELP,
|
||||||
Species.OVERQWIL,
|
SpeciesId.OVERQWIL,
|
||||||
Species.ALOLA_GRIMER,
|
SpeciesId.ALOLA_GRIMER,
|
||||||
Species.GALAR_SLOWPOKE,
|
SpeciesId.GALAR_SLOWPOKE,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.RARE]: [Species.GLIMMET, Species.BULBASAUR],
|
[TrainerPoolTier.RARE]: [SpeciesId.GLIMMET, SpeciesId.BULBASAUR],
|
||||||
};
|
};
|
||||||
|
|
||||||
const STAR_FAIRY: TrainerTierPools = {
|
const STAR_FAIRY: TrainerTierPools = {
|
||||||
[TrainerPoolTier.COMMON]: [
|
[TrainerPoolTier.COMMON]: [
|
||||||
Species.IGGLYBUFF,
|
SpeciesId.IGGLYBUFF,
|
||||||
Species.AZURILL,
|
SpeciesId.AZURILL,
|
||||||
Species.COTTONEE,
|
SpeciesId.COTTONEE,
|
||||||
Species.FLABEBE,
|
SpeciesId.FLABEBE,
|
||||||
Species.KLEFKI,
|
SpeciesId.KLEFKI,
|
||||||
Species.CUTIEFLY,
|
SpeciesId.CUTIEFLY,
|
||||||
Species.HATENNA,
|
SpeciesId.HATENNA,
|
||||||
Species.TINKATINK,
|
SpeciesId.TINKATINK,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.UNCOMMON]: [
|
[TrainerPoolTier.UNCOMMON]: [
|
||||||
Species.CLEFFA,
|
SpeciesId.CLEFFA,
|
||||||
Species.TOGEPI,
|
SpeciesId.TOGEPI,
|
||||||
Species.GARDEVOIR,
|
SpeciesId.GARDEVOIR,
|
||||||
Species.SYLVEON,
|
SpeciesId.SYLVEON,
|
||||||
Species.MIMIKYU,
|
SpeciesId.MIMIKYU,
|
||||||
Species.IMPIDIMP,
|
SpeciesId.IMPIDIMP,
|
||||||
Species.ALOLA_VULPIX,
|
SpeciesId.ALOLA_VULPIX,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.RARE]: [Species.GALAR_PONYTA, Species.POPPLIO],
|
[TrainerPoolTier.RARE]: [SpeciesId.GALAR_PONYTA, SpeciesId.POPPLIO],
|
||||||
};
|
};
|
||||||
|
|
||||||
const STAR_FIGHTING: TrainerTierPools = {
|
const STAR_FIGHTING: TrainerTierPools = {
|
||||||
[TrainerPoolTier.COMMON]: [
|
[TrainerPoolTier.COMMON]: [
|
||||||
Species.TYROGUE,
|
SpeciesId.TYROGUE,
|
||||||
Species.SHROOMISH,
|
SpeciesId.SHROOMISH,
|
||||||
Species.MAKUHITA,
|
SpeciesId.MAKUHITA,
|
||||||
Species.RIOLU,
|
SpeciesId.RIOLU,
|
||||||
Species.CROAGUNK,
|
SpeciesId.CROAGUNK,
|
||||||
Species.SCRAGGY,
|
SpeciesId.SCRAGGY,
|
||||||
Species.MIENFOO,
|
SpeciesId.MIENFOO,
|
||||||
Species.PASSIMIAN,
|
SpeciesId.PASSIMIAN,
|
||||||
Species.PAWMI,
|
SpeciesId.PAWMI,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.UNCOMMON]: [
|
[TrainerPoolTier.UNCOMMON]: [
|
||||||
Species.MEDITITE,
|
SpeciesId.MEDITITE,
|
||||||
Species.GALLADE,
|
SpeciesId.GALLADE,
|
||||||
Species.TIMBURR,
|
SpeciesId.TIMBURR,
|
||||||
Species.HAWLUCHA,
|
SpeciesId.HAWLUCHA,
|
||||||
Species.STUFFUL,
|
SpeciesId.STUFFUL,
|
||||||
Species.FALINKS,
|
SpeciesId.FALINKS,
|
||||||
Species.FLAMIGO,
|
SpeciesId.FLAMIGO,
|
||||||
Species.PALDEA_TAUROS,
|
SpeciesId.PALDEA_TAUROS,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.RARE]: [Species.JANGMO_O, Species.QUAXLY],
|
[TrainerPoolTier.RARE]: [SpeciesId.JANGMO_O, SpeciesId.QUAXLY],
|
||||||
};
|
};
|
||||||
|
|
||||||
export type EvilTeam =
|
export type EvilTeam =
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,7 @@
|
|||||||
import type { EnemyPokemon } from "#app/field/pokemon";
|
import type { EnemyPokemon } from "#app/field/pokemon";
|
||||||
import type { PersistentModifier } from "#app/modifier/modifier";
|
import type { PersistentModifier } from "#app/modifier/modifier";
|
||||||
import type { PartyMemberStrength } from "#enums/party-member-strength";
|
import type { PartyMemberStrength } from "#enums/party-member-strength";
|
||||||
import type { Species } from "#enums/species";
|
import type { SpeciesId } from "#enums/species";
|
||||||
import type { TrainerConfig } from "./trainer-config";
|
import type { TrainerConfig } from "./trainer-config";
|
||||||
import type { TrainerPartyTemplate } from "./TrainerPartyTemplate";
|
import type { TrainerPartyTemplate } from "./TrainerPartyTemplate";
|
||||||
|
|
||||||
@ -11,7 +11,7 @@ export type GenModifiersFunc = (party: EnemyPokemon[]) => PersistentModifier[];
|
|||||||
export type GenAIFunc = (party: EnemyPokemon[]) => void;
|
export type GenAIFunc = (party: EnemyPokemon[]) => void;
|
||||||
|
|
||||||
export interface TrainerTierPools {
|
export interface TrainerTierPools {
|
||||||
[key: number]: Species[];
|
[key: number]: SpeciesId[];
|
||||||
}
|
}
|
||||||
export interface TrainerConfigs {
|
export interface TrainerConfigs {
|
||||||
[key: number]: TrainerConfig;
|
[key: number]: TrainerConfig;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
export enum Species {
|
export enum SpeciesId {
|
||||||
/**{@link https://bulbapedia.bulbagarden.net/wiki/Bulbasaur_(Pokémon) | Source} */
|
/**{@link https://bulbapedia.bulbagarden.net/wiki/Bulbasaur_(Pokémon) | Source} */
|
||||||
BULBASAUR = 1,
|
BULBASAUR = 1,
|
||||||
/**{@link https://bulbapedia.bulbagarden.net/wiki/Ivysaur_(Pokémon) | Source} */
|
/**{@link https://bulbapedia.bulbagarden.net/wiki/Ivysaur_(Pokémon) | Source} */
|
||||||
|
@ -33,7 +33,7 @@ import { TagAddedEvent, TagRemovedEvent, TerrainChangedEvent, WeatherChangedEven
|
|||||||
import type { ArenaTagType } from "#enums/arena-tag-type";
|
import type { ArenaTagType } from "#enums/arena-tag-type";
|
||||||
import { Biome } from "#enums/biome";
|
import { Biome } from "#enums/biome";
|
||||||
import type { MoveId } from "#enums/move-id";
|
import type { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { TimeOfDay } from "#enums/time-of-day";
|
import { TimeOfDay } from "#enums/time-of-day";
|
||||||
import { TrainerType } from "#enums/trainer-type";
|
import { TrainerType } from "#enums/trainer-type";
|
||||||
import { AbilityId } from "#enums/ability-id";
|
import { AbilityId } from "#enums/ability-id";
|
||||||
@ -153,9 +153,9 @@ export class Arena {
|
|||||||
ret = globalScene.randomSpecies(waveIndex, level);
|
ret = globalScene.randomSpecies(waveIndex, level);
|
||||||
} else {
|
} else {
|
||||||
const entry = tierPool[randSeedInt(tierPool.length)];
|
const entry = tierPool[randSeedInt(tierPool.length)];
|
||||||
let species: Species;
|
let species: SpeciesId;
|
||||||
if (typeof entry === "number") {
|
if (typeof entry === "number") {
|
||||||
species = entry as Species;
|
species = entry as SpeciesId;
|
||||||
} else {
|
} else {
|
||||||
const levelThresholds = Object.keys(entry);
|
const levelThresholds = Object.keys(entry);
|
||||||
for (let l = levelThresholds.length - 1; l >= 0; l--) {
|
for (let l = levelThresholds.length - 1; l >= 0; l--) {
|
||||||
@ -199,7 +199,7 @@ export class Arena {
|
|||||||
|
|
||||||
const newSpeciesId = ret.getWildSpeciesForLevel(level, true, isBoss ?? isBossSpecies, globalScene.gameMode);
|
const newSpeciesId = ret.getWildSpeciesForLevel(level, true, isBoss ?? isBossSpecies, globalScene.gameMode);
|
||||||
if (newSpeciesId !== ret.speciesId) {
|
if (newSpeciesId !== ret.speciesId) {
|
||||||
console.log("Replaced", Species[ret.speciesId], "with", Species[newSpeciesId]);
|
console.log("Replaced", SpeciesId[ret.speciesId], "with", SpeciesId[newSpeciesId]);
|
||||||
ret = getPokemonSpecies(newSpeciesId);
|
ret = getPokemonSpecies(newSpeciesId);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
@ -239,8 +239,8 @@ export class Arena {
|
|||||||
|
|
||||||
getSpeciesFormIndex(species: PokemonSpecies): number {
|
getSpeciesFormIndex(species: PokemonSpecies): number {
|
||||||
switch (species.speciesId) {
|
switch (species.speciesId) {
|
||||||
case Species.BURMY:
|
case SpeciesId.BURMY:
|
||||||
case Species.WORMADAM:
|
case SpeciesId.WORMADAM:
|
||||||
switch (this.biomeType) {
|
switch (this.biomeType) {
|
||||||
case Biome.BEACH:
|
case Biome.BEACH:
|
||||||
return 1;
|
return 1;
|
||||||
@ -248,7 +248,7 @@ export class Arena {
|
|||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Species.ROTOM:
|
case SpeciesId.ROTOM:
|
||||||
switch (this.biomeType) {
|
switch (this.biomeType) {
|
||||||
case Biome.VOLCANO:
|
case Biome.VOLCANO:
|
||||||
return 1;
|
return 1;
|
||||||
@ -262,7 +262,7 @@ export class Arena {
|
|||||||
return 5;
|
return 5;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Species.LYCANROC:
|
case SpeciesId.LYCANROC:
|
||||||
const timeOfDay = this.getTimeOfDay();
|
const timeOfDay = this.getTimeOfDay();
|
||||||
switch (timeOfDay) {
|
switch (timeOfDay) {
|
||||||
case TimeOfDay.DAY:
|
case TimeOfDay.DAY:
|
||||||
@ -372,8 +372,8 @@ export class Arena {
|
|||||||
*/
|
*/
|
||||||
triggerWeatherBasedFormChanges(): void {
|
triggerWeatherBasedFormChanges(): void {
|
||||||
globalScene.getField(true).forEach(p => {
|
globalScene.getField(true).forEach(p => {
|
||||||
const isCastformWithForecast = p.hasAbility(AbilityId.FORECAST) && p.species.speciesId === Species.CASTFORM;
|
const isCastformWithForecast = p.hasAbility(AbilityId.FORECAST) && p.species.speciesId === SpeciesId.CASTFORM;
|
||||||
const isCherrimWithFlowerGift = p.hasAbility(AbilityId.FLOWER_GIFT) && p.species.speciesId === Species.CHERRIM;
|
const isCherrimWithFlowerGift = p.hasAbility(AbilityId.FLOWER_GIFT) && p.species.speciesId === SpeciesId.CHERRIM;
|
||||||
|
|
||||||
if (isCastformWithForecast || isCherrimWithFlowerGift) {
|
if (isCastformWithForecast || isCherrimWithFlowerGift) {
|
||||||
globalScene.triggerPokemonFormChange(p, SpeciesFormChangeWeatherTrigger);
|
globalScene.triggerPokemonFormChange(p, SpeciesFormChangeWeatherTrigger);
|
||||||
@ -387,9 +387,9 @@ export class Arena {
|
|||||||
triggerWeatherBasedFormChangesToNormal(): void {
|
triggerWeatherBasedFormChangesToNormal(): void {
|
||||||
globalScene.getField(true).forEach(p => {
|
globalScene.getField(true).forEach(p => {
|
||||||
const isCastformWithForecast =
|
const isCastformWithForecast =
|
||||||
p.hasAbility(AbilityId.FORECAST, false, true) && p.species.speciesId === Species.CASTFORM;
|
p.hasAbility(AbilityId.FORECAST, false, true) && p.species.speciesId === SpeciesId.CASTFORM;
|
||||||
const isCherrimWithFlowerGift =
|
const isCherrimWithFlowerGift =
|
||||||
p.hasAbility(AbilityId.FLOWER_GIFT, false, true) && p.species.speciesId === Species.CHERRIM;
|
p.hasAbility(AbilityId.FLOWER_GIFT, false, true) && p.species.speciesId === SpeciesId.CHERRIM;
|
||||||
|
|
||||||
if (isCastformWithForecast || isCherrimWithFlowerGift) {
|
if (isCastformWithForecast || isCherrimWithFlowerGift) {
|
||||||
return globalScene.triggerPokemonFormChange(p, SpeciesFormChangeRevertWeatherFormTrigger);
|
return globalScene.triggerPokemonFormChange(p, SpeciesFormChangeRevertWeatherFormTrigger);
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
import type { GameObjects } from "phaser";
|
import type { GameObjects } from "phaser";
|
||||||
import { globalScene } from "#app/global-scene";
|
import { globalScene } from "#app/global-scene";
|
||||||
import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter";
|
import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter";
|
||||||
import type { Species } from "#enums/species";
|
import type { SpeciesId } from "#enums/species";
|
||||||
import { isNullOrUndefined } from "#app/utils/common";
|
import { isNullOrUndefined } from "#app/utils/common";
|
||||||
import { getSpriteKeysFromSpecies } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils";
|
import { getSpriteKeysFromSpecies } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils";
|
||||||
import type { Variant } from "#app/sprites/variant";
|
import type { Variant } from "#app/sprites/variant";
|
||||||
import { doShinySparkleAnim } from "#app/field/anims";
|
import { doShinySparkleAnim } from "#app/field/anims";
|
||||||
import PlayAnimationConfig = Phaser.Types.Animations.PlayAnimationConfig;
|
|
||||||
import { loadPokemonVariantAssets } from "#app/sprites/pokemon-sprite";
|
import { loadPokemonVariantAssets } from "#app/sprites/pokemon-sprite";
|
||||||
|
import PlayAnimationConfig = Phaser.Types.Animations.PlayAnimationConfig;
|
||||||
|
|
||||||
type KnownFileRoot =
|
type KnownFileRoot =
|
||||||
| "arenas"
|
| "arenas"
|
||||||
@ -39,7 +39,7 @@ export class MysteryEncounterSpriteConfig {
|
|||||||
/** Refer to [/public/images](../../public/images) directorty for all folder names */
|
/** Refer to [/public/images](../../public/images) directorty for all folder names */
|
||||||
fileRoot: (KnownFileRoot & string) | string;
|
fileRoot: (KnownFileRoot & string) | string;
|
||||||
/** Optional replacement for `spriteKey`/`fileRoot`. Just know this defaults to male/genderless, form 0, no shiny */
|
/** Optional replacement for `spriteKey`/`fileRoot`. Just know this defaults to male/genderless, form 0, no shiny */
|
||||||
species?: Species;
|
species?: SpeciesId;
|
||||||
/** Enable shadow. Defaults to `false` */
|
/** Enable shadow. Defaults to `false` */
|
||||||
hasShadow?: boolean = false;
|
hasShadow?: boolean = false;
|
||||||
/** Disable animation. Defaults to `false` */
|
/** Disable animation. Defaults to `false` */
|
||||||
|
@ -227,7 +227,7 @@ import { BattlerTagType } from "#enums/battler-tag-type";
|
|||||||
import type { BerryType } from "#enums/berry-type";
|
import type { BerryType } from "#enums/berry-type";
|
||||||
import { Biome } from "#enums/biome";
|
import { Biome } from "#enums/biome";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { getPokemonNameWithAffix } from "#app/messages";
|
import { getPokemonNameWithAffix } from "#app/messages";
|
||||||
import { DamageAnimPhase } from "#app/phases/damage-anim-phase";
|
import { DamageAnimPhase } from "#app/phases/damage-anim-phase";
|
||||||
import { FaintPhase } from "#app/phases/faint-phase";
|
import { FaintPhase } from "#app/phases/faint-phase";
|
||||||
@ -334,7 +334,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
public friendship: number;
|
public friendship: number;
|
||||||
public metLevel: number;
|
public metLevel: number;
|
||||||
public metBiome: Biome | -1;
|
public metBiome: Biome | -1;
|
||||||
public metSpecies: Species;
|
public metSpecies: SpeciesId;
|
||||||
public metWave: number;
|
public metWave: number;
|
||||||
public luck: number;
|
public luck: number;
|
||||||
public pauseEvolutions: boolean;
|
public pauseEvolutions: boolean;
|
||||||
@ -1817,21 +1817,21 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if the {@linkcode Pokemon} has a fusion with the specified {@linkcode Species}.
|
* Checks if the {@linkcode Pokemon} has a fusion with the specified {@linkcode SpeciesId}.
|
||||||
* @param species the pokemon {@linkcode Species} to check
|
* @param species the pokemon {@linkcode SpeciesId} to check
|
||||||
* @returns `true` if the {@linkcode Pokemon} has a fusion with the specified {@linkcode Species}, `false` otherwise
|
* @returns `true` if the {@linkcode Pokemon} has a fusion with the specified {@linkcode SpeciesId}, `false` otherwise
|
||||||
*/
|
*/
|
||||||
hasFusionSpecies(species: Species): boolean {
|
hasFusionSpecies(species: SpeciesId): boolean {
|
||||||
return this.fusionSpecies?.speciesId === species;
|
return this.fusionSpecies?.speciesId === species;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if the {@linkcode Pokemon} has is the specified {@linkcode Species} or is fused with it.
|
* Checks if the {@linkcode Pokemon} has is the specified {@linkcode SpeciesId} or is fused with it.
|
||||||
* @param species the pokemon {@linkcode Species} to check
|
* @param species the pokemon {@linkcode SpeciesId} to check
|
||||||
* @param formKey If provided, requires the species to be in that form
|
* @param formKey If provided, requires the species to be in that form
|
||||||
* @returns `true` if the pokemon is the species or is fused with it, `false` otherwise
|
* @returns `true` if the pokemon is the species or is fused with it, `false` otherwise
|
||||||
*/
|
*/
|
||||||
hasSpecies(species: Species, formKey?: string): boolean {
|
hasSpecies(species: SpeciesId, formKey?: string): boolean {
|
||||||
if (isNullOrUndefined(formKey)) {
|
if (isNullOrUndefined(formKey)) {
|
||||||
return this.species.speciesId === species || this.fusionSpecies?.speciesId === species;
|
return this.species.speciesId === species || this.fusionSpecies?.speciesId === species;
|
||||||
}
|
}
|
||||||
@ -2291,11 +2291,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
* @returns the pokemon's current tera {@linkcode PokemonType}
|
* @returns the pokemon's current tera {@linkcode PokemonType}
|
||||||
*/
|
*/
|
||||||
getTeraType(): PokemonType {
|
getTeraType(): PokemonType {
|
||||||
if (this.hasSpecies(Species.TERAPAGOS)) {
|
if (this.hasSpecies(SpeciesId.TERAPAGOS)) {
|
||||||
return PokemonType.STELLAR;
|
return PokemonType.STELLAR;
|
||||||
}
|
}
|
||||||
if (this.hasSpecies(Species.OGERPON)) {
|
if (this.hasSpecies(SpeciesId.OGERPON)) {
|
||||||
const ogerponForm = this.species.speciesId === Species.OGERPON ? this.formIndex : this.fusionFormIndex;
|
const ogerponForm = this.species.speciesId === SpeciesId.OGERPON ? this.formIndex : this.fusionFormIndex;
|
||||||
switch (ogerponForm) {
|
switch (ogerponForm) {
|
||||||
case 0:
|
case 0:
|
||||||
case 4:
|
case 4:
|
||||||
@ -2311,7 +2311,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
return PokemonType.ROCK;
|
return PokemonType.ROCK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (this.hasSpecies(Species.SHEDINJA)) {
|
if (this.hasSpecies(SpeciesId.SHEDINJA)) {
|
||||||
return PokemonType.BUG;
|
return PokemonType.BUG;
|
||||||
}
|
}
|
||||||
return this.teraType;
|
return this.teraType;
|
||||||
@ -2987,7 +2987,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
!species.mythical &&
|
!species.mythical &&
|
||||||
!species.isTrainerForbidden() &&
|
!species.isTrainerForbidden() &&
|
||||||
species.speciesId !== this.species.speciesId &&
|
species.speciesId !== this.species.speciesId &&
|
||||||
species.speciesId !== Species.DITTO
|
species.speciesId !== SpeciesId.DITTO
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -3659,7 +3659,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
if (
|
if (
|
||||||
source.isTerastallized &&
|
source.isTerastallized &&
|
||||||
source.getTeraType() === PokemonType.STELLAR &&
|
source.getTeraType() === PokemonType.STELLAR &&
|
||||||
(!source.stellarTypesBoosted.includes(moveType) || source.hasSpecies(Species.TERAPAGOS))
|
(!source.stellarTypesBoosted.includes(moveType) || source.hasSpecies(SpeciesId.TERAPAGOS))
|
||||||
) {
|
) {
|
||||||
stabMultiplier.value += matchesSourceType ? 0.5 : 0.2;
|
stabMultiplier.value += matchesSourceType ? 0.5 : 0.2;
|
||||||
}
|
}
|
||||||
@ -4284,7 +4284,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
if (
|
if (
|
||||||
!tag.isBatonPassable ||
|
!tag.isBatonPassable ||
|
||||||
(tag.tagType === BattlerTagType.TELEKINESIS &&
|
(tag.tagType === BattlerTagType.TELEKINESIS &&
|
||||||
this.species.speciesId === Species.GENGAR &&
|
this.species.speciesId === SpeciesId.GENGAR &&
|
||||||
this.getFormKey() === "mega")
|
this.getFormKey() === "mega")
|
||||||
) {
|
) {
|
||||||
continue;
|
continue;
|
||||||
@ -4902,7 +4902,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
if (
|
if (
|
||||||
this.hasAbilityWithAttr(CommanderAbAttr) &&
|
this.hasAbilityWithAttr(CommanderAbAttr) &&
|
||||||
globalScene.currentBattle.double &&
|
globalScene.currentBattle.double &&
|
||||||
this.getAlly()?.species.speciesId === Species.DONDOZO
|
this.getAlly()?.species.speciesId === SpeciesId.DONDOZO
|
||||||
) {
|
) {
|
||||||
this.setVisible(false);
|
this.setVisible(false);
|
||||||
}
|
}
|
||||||
@ -5680,7 +5680,7 @@ export class PlayerPokemon extends Pokemon {
|
|||||||
}
|
}
|
||||||
// Add to candy progress for this mon's starter species and its fused species (if it has one)
|
// Add to candy progress for this mon's starter species and its fused species (if it has one)
|
||||||
starterData.forEach((sd: StarterDataEntry, i: number) => {
|
starterData.forEach((sd: StarterDataEntry, i: number) => {
|
||||||
const speciesId = !i ? starterSpeciesId : (fusionStarterSpeciesId as Species);
|
const speciesId = !i ? starterSpeciesId : (fusionStarterSpeciesId as SpeciesId);
|
||||||
sd.friendship = (sd.friendship || 0) + starterAmount.value;
|
sd.friendship = (sd.friendship || 0) + starterAmount.value;
|
||||||
if (sd.friendship >= getStarterValueFriendshipCap(speciesStarterCosts[speciesId])) {
|
if (sd.friendship >= getStarterValueFriendshipCap(speciesStarterCosts[speciesId])) {
|
||||||
globalScene.gameData.addStarterCandy(getPokemonSpecies(speciesId), 1);
|
globalScene.gameData.addStarterCandy(getPokemonSpecies(speciesId), 1);
|
||||||
@ -5815,7 +5815,7 @@ export class PlayerPokemon extends Pokemon {
|
|||||||
this.updateInfo(true).then(() => resolve());
|
this.updateInfo(true).then(() => resolve());
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
if (preEvolution.speciesId === Species.GIMMIGHOUL) {
|
if (preEvolution.speciesId === SpeciesId.GIMMIGHOUL) {
|
||||||
const evotracker = this.getHeldItems().filter(m => m instanceof EvoTrackerModifier)[0] ?? null;
|
const evotracker = this.getHeldItems().filter(m => m instanceof EvoTrackerModifier)[0] ?? null;
|
||||||
if (evotracker) {
|
if (evotracker) {
|
||||||
globalScene.removeModifier(evotracker);
|
globalScene.removeModifier(evotracker);
|
||||||
@ -5835,7 +5835,7 @@ export class PlayerPokemon extends Pokemon {
|
|||||||
const isFusion = evolution instanceof FusionSpeciesFormEvolution;
|
const isFusion = evolution instanceof FusionSpeciesFormEvolution;
|
||||||
|
|
||||||
const evoSpecies = !isFusion ? this.species : this.fusionSpecies;
|
const evoSpecies = !isFusion ? this.species : this.fusionSpecies;
|
||||||
if (evoSpecies?.speciesId === Species.NINCADA && evolution.speciesId === Species.NINJASK) {
|
if (evoSpecies?.speciesId === SpeciesId.NINCADA && evolution.speciesId === SpeciesId.NINJASK) {
|
||||||
const newEvolution = pokemonEvolutions[evoSpecies.speciesId][1];
|
const newEvolution = pokemonEvolutions[evoSpecies.speciesId][1];
|
||||||
|
|
||||||
if (newEvolution.condition?.predicate(this)) {
|
if (newEvolution.condition?.predicate(this)) {
|
||||||
@ -6111,7 +6111,7 @@ export class EnemyPokemon extends Pokemon {
|
|||||||
|
|
||||||
this.luck = (this.shiny ? this.variant + 1 : 0) + (this.fusionShiny ? this.fusionVariant + 1 : 0);
|
this.luck = (this.shiny ? this.variant + 1 : 0) + (this.fusionShiny ? this.fusionVariant + 1 : 0);
|
||||||
|
|
||||||
let prevolution: Species;
|
let prevolution: SpeciesId;
|
||||||
let speciesId = species.speciesId;
|
let speciesId = species.speciesId;
|
||||||
while ((prevolution = pokemonPrevolutions[speciesId])) {
|
while ((prevolution = pokemonPrevolutions[speciesId])) {
|
||||||
const evolution = pokemonEvolutions[prevolution].find(
|
const evolution = pokemonEvolutions[prevolution].find(
|
||||||
@ -6167,7 +6167,7 @@ export class EnemyPokemon extends Pokemon {
|
|||||||
|
|
||||||
generateAndPopulateMoveset(formIndex?: number): void {
|
generateAndPopulateMoveset(formIndex?: number): void {
|
||||||
switch (true) {
|
switch (true) {
|
||||||
case this.species.speciesId === Species.SMEARGLE:
|
case this.species.speciesId === SpeciesId.SMEARGLE:
|
||||||
this.moveset = [
|
this.moveset = [
|
||||||
new PokemonMove(MoveId.SKETCH),
|
new PokemonMove(MoveId.SKETCH),
|
||||||
new PokemonMove(MoveId.SKETCH),
|
new PokemonMove(MoveId.SKETCH),
|
||||||
@ -6175,7 +6175,7 @@ export class EnemyPokemon extends Pokemon {
|
|||||||
new PokemonMove(MoveId.SKETCH),
|
new PokemonMove(MoveId.SKETCH),
|
||||||
];
|
];
|
||||||
break;
|
break;
|
||||||
case this.species.speciesId === Species.ETERNATUS:
|
case this.species.speciesId === SpeciesId.ETERNATUS:
|
||||||
this.moveset = (formIndex !== undefined ? formIndex : this.formIndex)
|
this.moveset = (formIndex !== undefined ? formIndex : this.formIndex)
|
||||||
? [
|
? [
|
||||||
new PokemonMove(MoveId.DYNAMAX_CANNON),
|
new PokemonMove(MoveId.DYNAMAX_CANNON),
|
||||||
@ -6737,7 +6737,7 @@ interface IllusionData {
|
|||||||
fusionVariant: Variant;
|
fusionVariant: Variant;
|
||||||
};
|
};
|
||||||
/** The species of the illusion */
|
/** The species of the illusion */
|
||||||
species: Species;
|
species: SpeciesId;
|
||||||
/** The formIndex of the illusion */
|
/** The formIndex of the illusion */
|
||||||
formIndex: number;
|
formIndex: number;
|
||||||
/** The gender of the illusion */
|
/** The gender of the illusion */
|
||||||
|
@ -17,7 +17,7 @@ import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag";
|
|||||||
import { getIsInitialized, initI18n } from "#app/plugins/i18n";
|
import { getIsInitialized, initI18n } from "#app/plugins/i18n";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import { PartyMemberStrength } from "#enums/party-member-strength";
|
import { PartyMemberStrength } from "#enums/party-member-strength";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { TrainerType } from "#enums/trainer-type";
|
import { TrainerType } from "#enums/trainer-type";
|
||||||
import { signatureSpecies } from "#app/data/balance/signature-species";
|
import { signatureSpecies } from "#app/data/balance/signature-species";
|
||||||
|
|
||||||
@ -358,7 +358,7 @@ export default class Trainer extends Phaser.GameObjects.Container {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create an empty species pool (which will be set to one of the species pools based on the index)
|
// Create an empty species pool (which will be set to one of the species pools based on the index)
|
||||||
let newSpeciesPool: Species[] = [];
|
let newSpeciesPool: SpeciesId[] = [];
|
||||||
let useNewSpeciesPool = false;
|
let useNewSpeciesPool = false;
|
||||||
|
|
||||||
// If we are in a double battle of named trainers, we need to use alternate species pools (generate half the party from each trainer)
|
// If we are in a double battle of named trainers, we need to use alternate species pools (generate half the party from each trainer)
|
||||||
@ -399,9 +399,9 @@ export default class Trainer extends Phaser.GameObjects.Container {
|
|||||||
if (!(index % 2)) {
|
if (!(index % 2)) {
|
||||||
// Since the only currently allowed double battle with named trainers is Tate & Liza, we need to make sure that Solrock is the first pokemon in the party for Tate and Lunatone for Liza
|
// Since the only currently allowed double battle with named trainers is Tate & Liza, we need to make sure that Solrock is the first pokemon in the party for Tate and Lunatone for Liza
|
||||||
if (index === 0 && TrainerType[this.config.trainerType] === TrainerType[TrainerType.TATE]) {
|
if (index === 0 && TrainerType[this.config.trainerType] === TrainerType[TrainerType.TATE]) {
|
||||||
newSpeciesPool = [Species.SOLROCK];
|
newSpeciesPool = [SpeciesId.SOLROCK];
|
||||||
} else if (index === 0 && TrainerType[this.config.trainerType] === TrainerType[TrainerType.LIZA]) {
|
} else if (index === 0 && TrainerType[this.config.trainerType] === TrainerType[TrainerType.LIZA]) {
|
||||||
newSpeciesPool = [Species.LUNATONE];
|
newSpeciesPool = [SpeciesId.LUNATONE];
|
||||||
} else {
|
} else {
|
||||||
newSpeciesPool = speciesPoolFiltered;
|
newSpeciesPool = speciesPoolFiltered;
|
||||||
}
|
}
|
||||||
@ -409,9 +409,9 @@ export default class Trainer extends Phaser.GameObjects.Container {
|
|||||||
// If the index is odd, use the species pool for the partner trainer (that way he only uses his own pokemon in battle)
|
// If the index is odd, use the species pool for the partner trainer (that way he only uses his own pokemon in battle)
|
||||||
// Since the only currently allowed double battle with named trainers is Tate & Liza, we need to make sure that Solrock is the first pokemon in the party for Tate and Lunatone for Liza
|
// Since the only currently allowed double battle with named trainers is Tate & Liza, we need to make sure that Solrock is the first pokemon in the party for Tate and Lunatone for Liza
|
||||||
if (index === 1 && TrainerType[this.config.trainerTypeDouble] === TrainerType[TrainerType.TATE]) {
|
if (index === 1 && TrainerType[this.config.trainerTypeDouble] === TrainerType[TrainerType.TATE]) {
|
||||||
newSpeciesPool = [Species.SOLROCK];
|
newSpeciesPool = [SpeciesId.SOLROCK];
|
||||||
} else if (index === 1 && TrainerType[this.config.trainerTypeDouble] === TrainerType[TrainerType.LIZA]) {
|
} else if (index === 1 && TrainerType[this.config.trainerTypeDouble] === TrainerType[TrainerType.LIZA]) {
|
||||||
newSpeciesPool = [Species.LUNATONE];
|
newSpeciesPool = [SpeciesId.LUNATONE];
|
||||||
} else {
|
} else {
|
||||||
newSpeciesPool = speciesPoolPartnerFiltered;
|
newSpeciesPool = speciesPoolPartnerFiltered;
|
||||||
}
|
}
|
||||||
@ -542,10 +542,10 @@ export default class Trainer extends Phaser.GameObjects.Container {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if the enemy trainer already has the Pokemon species in their party
|
* Checks if the enemy trainer already has the Pokemon species in their party
|
||||||
* @param baseSpecies - The base {@linkcode Species} of the current Pokemon
|
* @param baseSpecies - The base {@linkcode SpeciesId} of the current Pokemon
|
||||||
* @returns `true` if the species is already present in the party
|
* @returns `true` if the species is already present in the party
|
||||||
*/
|
*/
|
||||||
checkDuplicateSpecies(baseSpecies: Species): boolean {
|
checkDuplicateSpecies(baseSpecies: SpeciesId): boolean {
|
||||||
const staticSpecies = (signatureSpecies[TrainerType[this.config.trainerType]] ?? []).flat(1).map(s => {
|
const staticSpecies = (signatureSpecies[TrainerType[this.config.trainerType]] ?? []).flat(1).map(s => {
|
||||||
let root = s;
|
let root = s;
|
||||||
while (pokemonPrevolutions.hasOwnProperty(root)) {
|
while (pokemonPrevolutions.hasOwnProperty(root)) {
|
||||||
|
@ -9,7 +9,7 @@ import type { Arena } from "./field/arena";
|
|||||||
import Overrides from "#app/overrides";
|
import Overrides from "#app/overrides";
|
||||||
import { isNullOrUndefined, randSeedInt, randSeedItem } from "#app/utils/common";
|
import { isNullOrUndefined, randSeedInt, randSeedItem } from "#app/utils/common";
|
||||||
import { Biome } from "#enums/biome";
|
import { Biome } from "#enums/biome";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { Challenges } from "./enums/challenges";
|
import { Challenges } from "./enums/challenges";
|
||||||
import { globalScene } from "#app/global-scene";
|
import { globalScene } from "#app/global-scene";
|
||||||
import { getDailyStartingBiome } from "./data/daily-run";
|
import { getDailyStartingBiome } from "./data/daily-run";
|
||||||
@ -220,8 +220,8 @@ export class GameMode implements GameModeConfig {
|
|||||||
s =>
|
s =>
|
||||||
(s.subLegendary || s.legendary || s.mythical) &&
|
(s.subLegendary || s.legendary || s.mythical) &&
|
||||||
s.baseTotal >= 600 &&
|
s.baseTotal >= 600 &&
|
||||||
s.speciesId !== Species.ETERNATUS &&
|
s.speciesId !== SpeciesId.ETERNATUS &&
|
||||||
s.speciesId !== Species.ARCEUS,
|
s.speciesId !== SpeciesId.ARCEUS,
|
||||||
);
|
);
|
||||||
return randSeedItem(allFinalBossSpecies);
|
return randSeedItem(allFinalBossSpecies);
|
||||||
}
|
}
|
||||||
|
@ -122,7 +122,7 @@ import { BerryType } from "#enums/berry-type";
|
|||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { Nature } from "#enums/nature";
|
import { Nature } from "#enums/nature";
|
||||||
import { PokeballType } from "#enums/pokeball";
|
import { PokeballType } from "#enums/pokeball";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { SpeciesFormKey } from "#enums/species-form-key";
|
import { SpeciesFormKey } from "#enums/species-form-key";
|
||||||
import type { PermanentStat, TempBattleStat } from "#enums/stat";
|
import type { PermanentStat, TempBattleStat } from "#enums/stat";
|
||||||
import { getStatKey, Stat, TEMP_BATTLE_STATS } from "#enums/stat";
|
import { getStatKey, Stat, TEMP_BATTLE_STATS } from "#enums/stat";
|
||||||
@ -430,7 +430,7 @@ export class TerastallizeModifierType extends PokemonModifierType {
|
|||||||
(pokemon: PlayerPokemon) => {
|
(pokemon: PlayerPokemon) => {
|
||||||
if (
|
if (
|
||||||
[pokemon.species.speciesId, pokemon.fusionSpecies?.speciesId].filter(
|
[pokemon.species.speciesId, pokemon.fusionSpecies?.speciesId].filter(
|
||||||
s => s === Species.TERAPAGOS || s === Species.OGERPON || s === Species.SHEDINJA,
|
s => s === SpeciesId.TERAPAGOS || s === SpeciesId.OGERPON || s === SpeciesId.SHEDINJA,
|
||||||
).length > 0
|
).length > 0
|
||||||
) {
|
) {
|
||||||
return PartyUiHandler.NoEffectMessage;
|
return PartyUiHandler.NoEffectMessage;
|
||||||
@ -1439,37 +1439,37 @@ class SpeciesStatBoosterModifierTypeGenerator extends ModifierTypeGenerator {
|
|||||||
LIGHT_BALL: {
|
LIGHT_BALL: {
|
||||||
stats: [Stat.ATK, Stat.SPATK],
|
stats: [Stat.ATK, Stat.SPATK],
|
||||||
multiplier: 2,
|
multiplier: 2,
|
||||||
species: [Species.PIKACHU],
|
species: [SpeciesId.PIKACHU],
|
||||||
rare: true,
|
rare: true,
|
||||||
},
|
},
|
||||||
THICK_CLUB: {
|
THICK_CLUB: {
|
||||||
stats: [Stat.ATK],
|
stats: [Stat.ATK],
|
||||||
multiplier: 2,
|
multiplier: 2,
|
||||||
species: [Species.CUBONE, Species.MAROWAK, Species.ALOLA_MAROWAK],
|
species: [SpeciesId.CUBONE, SpeciesId.MAROWAK, SpeciesId.ALOLA_MAROWAK],
|
||||||
rare: true,
|
rare: true,
|
||||||
},
|
},
|
||||||
METAL_POWDER: {
|
METAL_POWDER: {
|
||||||
stats: [Stat.DEF],
|
stats: [Stat.DEF],
|
||||||
multiplier: 2,
|
multiplier: 2,
|
||||||
species: [Species.DITTO],
|
species: [SpeciesId.DITTO],
|
||||||
rare: true,
|
rare: true,
|
||||||
},
|
},
|
||||||
QUICK_POWDER: {
|
QUICK_POWDER: {
|
||||||
stats: [Stat.SPD],
|
stats: [Stat.SPD],
|
||||||
multiplier: 2,
|
multiplier: 2,
|
||||||
species: [Species.DITTO],
|
species: [SpeciesId.DITTO],
|
||||||
rare: true,
|
rare: true,
|
||||||
},
|
},
|
||||||
DEEP_SEA_SCALE: {
|
DEEP_SEA_SCALE: {
|
||||||
stats: [Stat.SPDEF],
|
stats: [Stat.SPDEF],
|
||||||
multiplier: 2,
|
multiplier: 2,
|
||||||
species: [Species.CLAMPERL],
|
species: [SpeciesId.CLAMPERL],
|
||||||
rare: false,
|
rare: false,
|
||||||
},
|
},
|
||||||
DEEP_SEA_TOOTH: {
|
DEEP_SEA_TOOTH: {
|
||||||
stats: [Stat.SPATK],
|
stats: [Stat.SPATK],
|
||||||
multiplier: 2,
|
multiplier: 2,
|
||||||
species: [Species.CLAMPERL],
|
species: [SpeciesId.CLAMPERL],
|
||||||
rare: false,
|
rare: false,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@ -1517,7 +1517,7 @@ class SpeciesStatBoosterModifierTypeGenerator extends ModifierTypeGenerator {
|
|||||||
if (checkedSpecies.includes(speciesId) || (!!fusionSpeciesId && checkedSpecies.includes(fusionSpeciesId))) {
|
if (checkedSpecies.includes(speciesId) || (!!fusionSpeciesId && checkedSpecies.includes(fusionSpeciesId))) {
|
||||||
// Add weight if party member has a matching species or, if applicable, a matching fusion species
|
// Add weight if party member has a matching species or, if applicable, a matching fusion species
|
||||||
weights[i]++;
|
weights[i]++;
|
||||||
} else if (checkedSpecies.includes(Species.PIKACHU) && hasFling) {
|
} else if (checkedSpecies.includes(SpeciesId.PIKACHU) && hasFling) {
|
||||||
// Add weight to Light Ball if party member has Fling
|
// Add weight to Light Ball if party member has Fling
|
||||||
weights[i]++;
|
weights[i]++;
|
||||||
}
|
}
|
||||||
@ -1588,7 +1588,9 @@ class EvolutionItemModifierTypeGenerator extends ModifierTypeGenerator {
|
|||||||
.filter(
|
.filter(
|
||||||
p =>
|
p =>
|
||||||
pokemonEvolutions.hasOwnProperty(p.species.speciesId) &&
|
pokemonEvolutions.hasOwnProperty(p.species.speciesId) &&
|
||||||
(!p.pauseEvolutions || p.species.speciesId === Species.SLOWPOKE || p.species.speciesId === Species.EEVEE),
|
(!p.pauseEvolutions ||
|
||||||
|
p.species.speciesId === SpeciesId.SLOWPOKE ||
|
||||||
|
p.species.speciesId === SpeciesId.EEVEE),
|
||||||
)
|
)
|
||||||
.flatMap(p => {
|
.flatMap(p => {
|
||||||
const evolutions = pokemonEvolutions[p.species.speciesId];
|
const evolutions = pokemonEvolutions[p.species.speciesId];
|
||||||
@ -1606,8 +1608,8 @@ class EvolutionItemModifierTypeGenerator extends ModifierTypeGenerator {
|
|||||||
p.fusionSpecies &&
|
p.fusionSpecies &&
|
||||||
pokemonEvolutions.hasOwnProperty(p.fusionSpecies.speciesId) &&
|
pokemonEvolutions.hasOwnProperty(p.fusionSpecies.speciesId) &&
|
||||||
(!p.pauseEvolutions ||
|
(!p.pauseEvolutions ||
|
||||||
p.fusionSpecies.speciesId === Species.SLOWPOKE ||
|
p.fusionSpecies.speciesId === SpeciesId.SLOWPOKE ||
|
||||||
p.fusionSpecies.speciesId === Species.EEVEE),
|
p.fusionSpecies.speciesId === SpeciesId.EEVEE),
|
||||||
)
|
)
|
||||||
.flatMap(p => {
|
.flatMap(p => {
|
||||||
const evolutions = pokemonEvolutions[p.fusionSpecies!.speciesId];
|
const evolutions = pokemonEvolutions[p.fusionSpecies!.speciesId];
|
||||||
@ -1671,7 +1673,7 @@ class FormChangeItemModifierTypeGenerator extends ModifierTypeGenerator {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
if (p.species.speciesId === Species.NECROZMA) {
|
if (p.species.speciesId === SpeciesId.NECROZMA) {
|
||||||
// technically we could use a simplified version and check for formChanges.length > 3, but in case any code changes later, this might break...
|
// technically we could use a simplified version and check for formChanges.length > 3, but in case any code changes later, this might break...
|
||||||
let foundULTRA_Z = false,
|
let foundULTRA_Z = false,
|
||||||
foundN_LUNA = false,
|
foundN_LUNA = false,
|
||||||
@ -1932,7 +1934,7 @@ export const modifierTypes = {
|
|||||||
new PokemonHeldItemModifierType(
|
new PokemonHeldItemModifierType(
|
||||||
"modifierType:ModifierType.EVOLUTION_TRACKER_GIMMIGHOUL",
|
"modifierType:ModifierType.EVOLUTION_TRACKER_GIMMIGHOUL",
|
||||||
"relic_gold",
|
"relic_gold",
|
||||||
(type, args) => new EvoTrackerModifier(type, (args[0] as Pokemon).id, Species.GIMMIGHOUL, 10),
|
(type, args) => new EvoTrackerModifier(type, (args[0] as Pokemon).id, SpeciesId.GIMMIGHOUL, 10),
|
||||||
),
|
),
|
||||||
|
|
||||||
MEGA_BRACELET: () =>
|
MEGA_BRACELET: () =>
|
||||||
@ -2046,7 +2048,9 @@ export const modifierTypes = {
|
|||||||
}
|
}
|
||||||
const teraTypes: PokemonType[] = [];
|
const teraTypes: PokemonType[] = [];
|
||||||
for (const p of party) {
|
for (const p of party) {
|
||||||
if (!(p.hasSpecies(Species.TERAPAGOS) || p.hasSpecies(Species.OGERPON) || p.hasSpecies(Species.SHEDINJA))) {
|
if (
|
||||||
|
!(p.hasSpecies(SpeciesId.TERAPAGOS) || p.hasSpecies(SpeciesId.OGERPON) || p.hasSpecies(SpeciesId.SHEDINJA))
|
||||||
|
) {
|
||||||
teraTypes.push(p.teraType);
|
teraTypes.push(p.teraType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2125,9 +2129,9 @@ export const modifierTypes = {
|
|||||||
"leek",
|
"leek",
|
||||||
(type, args) =>
|
(type, args) =>
|
||||||
new SpeciesCritBoosterModifier(type, (args[0] as Pokemon).id, 2, [
|
new SpeciesCritBoosterModifier(type, (args[0] as Pokemon).id, 2, [
|
||||||
Species.FARFETCHD,
|
SpeciesId.FARFETCHD,
|
||||||
Species.GALAR_FARFETCHD,
|
SpeciesId.GALAR_FARFETCHD,
|
||||||
Species.SIRFETCHD,
|
SpeciesId.SIRFETCHD,
|
||||||
]),
|
]),
|
||||||
),
|
),
|
||||||
|
|
||||||
@ -2674,7 +2678,8 @@ const modifierPool: ModifierPool = {
|
|||||||
new WeightedModifierType(modifierTypes.BASE_STAT_BOOSTER, 3),
|
new WeightedModifierType(modifierTypes.BASE_STAT_BOOSTER, 3),
|
||||||
new WeightedModifierType(modifierTypes.TERA_SHARD, (party: Pokemon[]) =>
|
new WeightedModifierType(modifierTypes.TERA_SHARD, (party: Pokemon[]) =>
|
||||||
party.filter(
|
party.filter(
|
||||||
p => !(p.hasSpecies(Species.TERAPAGOS) || p.hasSpecies(Species.OGERPON) || p.hasSpecies(Species.SHEDINJA)),
|
p =>
|
||||||
|
!(p.hasSpecies(SpeciesId.TERAPAGOS) || p.hasSpecies(SpeciesId.OGERPON) || p.hasSpecies(SpeciesId.SHEDINJA)),
|
||||||
).length > 0
|
).length > 0
|
||||||
? 1
|
? 1
|
||||||
: 0,
|
: 0,
|
||||||
@ -2744,7 +2749,7 @@ const modifierPool: ModifierPool = {
|
|||||||
new WeightedModifierType(
|
new WeightedModifierType(
|
||||||
modifierTypes.LEEK,
|
modifierTypes.LEEK,
|
||||||
(party: Pokemon[]) => {
|
(party: Pokemon[]) => {
|
||||||
const checkedSpecies = [Species.FARFETCHD, Species.GALAR_FARFETCHD, Species.SIRFETCHD];
|
const checkedSpecies = [SpeciesId.FARFETCHD, SpeciesId.GALAR_FARFETCHD, SpeciesId.SIRFETCHD];
|
||||||
// If a party member doesn't already have a Leek and is one of the relevant species, Leek can appear
|
// If a party member doesn't already have a Leek and is one of the relevant species, Leek can appear
|
||||||
return party.some(
|
return party.some(
|
||||||
p =>
|
p =>
|
||||||
|
@ -21,7 +21,7 @@ import { BerryType } from "#enums/berry-type";
|
|||||||
import type { MoveId } from "#enums/move-id";
|
import type { MoveId } from "#enums/move-id";
|
||||||
import type { Nature } from "#enums/nature";
|
import type { Nature } from "#enums/nature";
|
||||||
import type { PokeballType } from "#enums/pokeball";
|
import type { PokeballType } from "#enums/pokeball";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { type PermanentStat, type TempBattleStat, BATTLE_STATS, Stat, TEMP_BATTLE_STATS } from "#enums/stat";
|
import { type PermanentStat, type TempBattleStat, BATTLE_STATS, Stat, TEMP_BATTLE_STATS } from "#enums/stat";
|
||||||
import { StatusEffect } from "#enums/status-effect";
|
import { StatusEffect } from "#enums/status-effect";
|
||||||
import type { PokemonType } from "#enums/pokemon-type";
|
import type { PokemonType } from "#enums/pokemon-type";
|
||||||
@ -873,11 +873,11 @@ export class BaseStatModifier extends PokemonHeldItemModifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export class EvoTrackerModifier extends PokemonHeldItemModifier {
|
export class EvoTrackerModifier extends PokemonHeldItemModifier {
|
||||||
protected species: Species;
|
protected species: SpeciesId;
|
||||||
protected required: number;
|
protected required: number;
|
||||||
public isTransferable = false;
|
public isTransferable = false;
|
||||||
|
|
||||||
constructor(type: ModifierType, pokemonId: number, species: Species, required: number, stackCount?: number) {
|
constructor(type: ModifierType, pokemonId: number, species: SpeciesId, required: number, stackCount?: number) {
|
||||||
super(type, pokemonId, stackCount);
|
super(type, pokemonId, stackCount);
|
||||||
this.species = species;
|
this.species = species;
|
||||||
this.required = required;
|
this.required = required;
|
||||||
@ -1268,20 +1268,20 @@ export class EvolutionStatBoosterModifier extends StatBoosterModifier {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Modifier used for held items that Applies {@linkcode Stat} boost(s) using a
|
* Modifier used for held items that Applies {@linkcode Stat} boost(s) using a
|
||||||
* multiplier if the holder is of a specific {@linkcode Species}.
|
* multiplier if the holder is of a specific {@linkcode SpeciesId}.
|
||||||
* @extends StatBoosterModifier
|
* @extends StatBoosterModifier
|
||||||
* @see {@linkcode apply}
|
* @see {@linkcode apply}
|
||||||
*/
|
*/
|
||||||
export class SpeciesStatBoosterModifier extends StatBoosterModifier {
|
export class SpeciesStatBoosterModifier extends StatBoosterModifier {
|
||||||
/** The species that the held item's stat boost(s) apply to */
|
/** The species that the held item's stat boost(s) apply to */
|
||||||
private species: Species[];
|
private species: SpeciesId[];
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
type: ModifierType,
|
type: ModifierType,
|
||||||
pokemonId: number,
|
pokemonId: number,
|
||||||
stats: Stat[],
|
stats: Stat[],
|
||||||
multiplier: number,
|
multiplier: number,
|
||||||
species: Species[],
|
species: SpeciesId[],
|
||||||
stackCount?: number,
|
stackCount?: number,
|
||||||
) {
|
) {
|
||||||
super(type, pokemonId, stats, multiplier, stackCount);
|
super(type, pokemonId, stats, multiplier, stackCount);
|
||||||
@ -1316,7 +1316,7 @@ export class SpeciesStatBoosterModifier extends StatBoosterModifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if the incoming stat is listed in {@linkcode stats} and if the holder's {@linkcode Species}
|
* Checks if the incoming stat is listed in {@linkcode stats} and if the holder's {@linkcode SpeciesId}
|
||||||
* (or its fused species) is listed in {@linkcode species}.
|
* (or its fused species) is listed in {@linkcode species}.
|
||||||
* @param pokemon {@linkcode Pokemon} that holds the item
|
* @param pokemon {@linkcode Pokemon} that holds the item
|
||||||
* @param stat {@linkcode Stat} being checked at the time
|
* @param stat {@linkcode Stat} being checked at the time
|
||||||
@ -1333,11 +1333,11 @@ export class SpeciesStatBoosterModifier extends StatBoosterModifier {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if either parameter is included in the corresponding lists
|
* Checks if either parameter is included in the corresponding lists
|
||||||
* @param speciesId {@linkcode Species} being checked
|
* @param speciesId {@linkcode SpeciesId} being checked
|
||||||
* @param stat {@linkcode Stat} being checked
|
* @param stat {@linkcode Stat} being checked
|
||||||
* @returns `true` if both parameters are in {@linkcode species} and {@linkcode stats} respectively, false otherwise
|
* @returns `true` if both parameters are in {@linkcode species} and {@linkcode stats} respectively, false otherwise
|
||||||
*/
|
*/
|
||||||
contains(speciesId: Species, stat: Stat): boolean {
|
contains(speciesId: SpeciesId, stat: Stat): boolean {
|
||||||
return this.species.includes(speciesId) && this.stats.includes(stat);
|
return this.species.includes(speciesId) && this.stats.includes(stat);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1391,15 +1391,21 @@ export class CritBoosterModifier extends PokemonHeldItemModifier {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Modifier used for held items that apply critical-hit stage boost(s)
|
* Modifier used for held items that apply critical-hit stage boost(s)
|
||||||
* if the holder is of a specific {@linkcode Species}.
|
* if the holder is of a specific {@linkcode SpeciesId}.
|
||||||
* @extends CritBoosterModifier
|
* @extends CritBoosterModifier
|
||||||
* @see {@linkcode shouldApply}
|
* @see {@linkcode shouldApply}
|
||||||
*/
|
*/
|
||||||
export class SpeciesCritBoosterModifier extends CritBoosterModifier {
|
export class SpeciesCritBoosterModifier extends CritBoosterModifier {
|
||||||
/** The species that the held item's critical-hit stage boost applies to */
|
/** The species that the held item's critical-hit stage boost applies to */
|
||||||
private species: Species[];
|
private species: SpeciesId[];
|
||||||
|
|
||||||
constructor(type: ModifierType, pokemonId: number, stageIncrement: number, species: Species[], stackCount?: number) {
|
constructor(
|
||||||
|
type: ModifierType,
|
||||||
|
pokemonId: number,
|
||||||
|
stageIncrement: number,
|
||||||
|
species: SpeciesId[],
|
||||||
|
stackCount?: number,
|
||||||
|
) {
|
||||||
super(type, pokemonId, stageIncrement, stackCount);
|
super(type, pokemonId, stageIncrement, stackCount);
|
||||||
|
|
||||||
this.species = species;
|
this.species = species;
|
||||||
@ -1424,7 +1430,7 @@ export class SpeciesCritBoosterModifier extends CritBoosterModifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if the holder's {@linkcode Species} (or its fused species) is listed
|
* Checks if the holder's {@linkcode SpeciesId} (or its fused species) is listed
|
||||||
* in {@linkcode species}.
|
* in {@linkcode species}.
|
||||||
* @param pokemon {@linkcode Pokemon} that holds the held item
|
* @param pokemon {@linkcode Pokemon} that holds the held item
|
||||||
* @param critStage {@linkcode NumberHolder} that holds the resulting critical-hit level
|
* @param critStage {@linkcode NumberHolder} that holds the resulting critical-hit level
|
||||||
@ -2112,7 +2118,7 @@ export class TerrastalizeModifier extends ConsumablePokemonModifier {
|
|||||||
return (
|
return (
|
||||||
super.shouldApply(playerPokemon) &&
|
super.shouldApply(playerPokemon) &&
|
||||||
[playerPokemon?.species.speciesId, playerPokemon?.fusionSpecies?.speciesId].filter(
|
[playerPokemon?.species.speciesId, playerPokemon?.fusionSpecies?.speciesId].filter(
|
||||||
s => s === Species.TERAPAGOS || s === Species.OGERPON || s === Species.SHEDINJA,
|
s => s === SpeciesId.TERAPAGOS || s === SpeciesId.OGERPON || s === SpeciesId.SHEDINJA,
|
||||||
).length === 0
|
).length === 0
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -2924,7 +2930,7 @@ export class MoneyRewardModifier extends ConsumableModifier {
|
|||||||
globalScene.addMoney(moneyAmount.value);
|
globalScene.addMoney(moneyAmount.value);
|
||||||
|
|
||||||
globalScene.getPlayerParty().map(p => {
|
globalScene.getPlayerParty().map(p => {
|
||||||
if (p.species?.speciesId === Species.GIMMIGHOUL || p.fusionSpecies?.speciesId === Species.GIMMIGHOUL) {
|
if (p.species?.speciesId === SpeciesId.GIMMIGHOUL || p.fusionSpecies?.speciesId === SpeciesId.GIMMIGHOUL) {
|
||||||
p.evoCounter
|
p.evoCounter
|
||||||
? (p.evoCounter += Math.min(Math.floor(this.moneyMultiplier), 3))
|
? (p.evoCounter += Math.min(Math.floor(this.moneyMultiplier), 3))
|
||||||
: (p.evoCounter = Math.min(Math.floor(this.moneyMultiplier), 3));
|
: (p.evoCounter = Math.min(Math.floor(this.moneyMultiplier), 3));
|
||||||
|
@ -15,7 +15,7 @@ import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
|||||||
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
||||||
import { PokeballType } from "#enums/pokeball";
|
import { PokeballType } from "#enums/pokeball";
|
||||||
import { PokemonType } from "#enums/pokemon-type";
|
import { PokemonType } from "#enums/pokemon-type";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { Stat } from "#enums/stat";
|
import { Stat } from "#enums/stat";
|
||||||
import { StatusEffect } from "#enums/status-effect";
|
import { StatusEffect } from "#enums/status-effect";
|
||||||
import { TimeOfDay } from "#enums/time-of-day";
|
import { TimeOfDay } from "#enums/time-of-day";
|
||||||
@ -128,7 +128,7 @@ class DefaultOverrides {
|
|||||||
* }
|
* }
|
||||||
* ```
|
* ```
|
||||||
*/
|
*/
|
||||||
readonly STARTER_FORM_OVERRIDES: Partial<Record<Species, number>> = {};
|
readonly STARTER_FORM_OVERRIDES: Partial<Record<SpeciesId, number>> = {};
|
||||||
|
|
||||||
/** default 5 or 20 for Daily */
|
/** default 5 or 20 for Daily */
|
||||||
readonly STARTING_LEVEL_OVERRIDE: number = 0;
|
readonly STARTING_LEVEL_OVERRIDE: number = 0;
|
||||||
@ -138,7 +138,7 @@ class DefaultOverrides {
|
|||||||
* default is 0 to not override
|
* default is 0 to not override
|
||||||
* @example SPECIES_OVERRIDE = Species.Bulbasaur;
|
* @example SPECIES_OVERRIDE = Species.Bulbasaur;
|
||||||
*/
|
*/
|
||||||
readonly STARTER_SPECIES_OVERRIDE: Species | number = 0;
|
readonly STARTER_SPECIES_OVERRIDE: SpeciesId | number = 0;
|
||||||
/**
|
/**
|
||||||
* This will force your starter to be a random fusion
|
* This will force your starter to be a random fusion
|
||||||
*/
|
*/
|
||||||
@ -146,7 +146,7 @@ class DefaultOverrides {
|
|||||||
/**
|
/**
|
||||||
* This will override the species of the fusion
|
* This will override the species of the fusion
|
||||||
*/
|
*/
|
||||||
readonly STARTER_FUSION_SPECIES_OVERRIDE: Species | number = 0;
|
readonly STARTER_FUSION_SPECIES_OVERRIDE: SpeciesId | number = 0;
|
||||||
readonly ABILITY_OVERRIDE: AbilityId = AbilityId.NONE;
|
readonly ABILITY_OVERRIDE: AbilityId = AbilityId.NONE;
|
||||||
readonly PASSIVE_ABILITY_OVERRIDE: AbilityId = AbilityId.NONE;
|
readonly PASSIVE_ABILITY_OVERRIDE: AbilityId = AbilityId.NONE;
|
||||||
readonly HAS_PASSIVE_ABILITY_OVERRIDE: boolean | null = null;
|
readonly HAS_PASSIVE_ABILITY_OVERRIDE: boolean | null = null;
|
||||||
@ -159,7 +159,7 @@ class DefaultOverrides {
|
|||||||
// --------------------------
|
// --------------------------
|
||||||
// OPPONENT / ENEMY OVERRIDES
|
// OPPONENT / ENEMY OVERRIDES
|
||||||
// --------------------------
|
// --------------------------
|
||||||
readonly OPP_SPECIES_OVERRIDE: Species | number = 0;
|
readonly OPP_SPECIES_OVERRIDE: SpeciesId | number = 0;
|
||||||
/**
|
/**
|
||||||
* This will make all opponents fused Pokemon
|
* This will make all opponents fused Pokemon
|
||||||
*/
|
*/
|
||||||
@ -167,7 +167,7 @@ class DefaultOverrides {
|
|||||||
/**
|
/**
|
||||||
* This will override the species of the fusion only when the opponent is already a fusion
|
* This will override the species of the fusion only when the opponent is already a fusion
|
||||||
*/
|
*/
|
||||||
readonly OPP_FUSION_SPECIES_OVERRIDE: Species | number = 0;
|
readonly OPP_FUSION_SPECIES_OVERRIDE: SpeciesId | number = 0;
|
||||||
readonly OPP_LEVEL_OVERRIDE: number = 0;
|
readonly OPP_LEVEL_OVERRIDE: number = 0;
|
||||||
readonly OPP_ABILITY_OVERRIDE: AbilityId = AbilityId.NONE;
|
readonly OPP_ABILITY_OVERRIDE: AbilityId = AbilityId.NONE;
|
||||||
readonly OPP_PASSIVE_ABILITY_OVERRIDE: AbilityId = AbilityId.NONE;
|
readonly OPP_PASSIVE_ABILITY_OVERRIDE: AbilityId = AbilityId.NONE;
|
||||||
@ -178,7 +178,7 @@ class DefaultOverrides {
|
|||||||
readonly OPP_SHINY_OVERRIDE: boolean | null = null;
|
readonly OPP_SHINY_OVERRIDE: boolean | null = null;
|
||||||
readonly OPP_VARIANT_OVERRIDE: Variant | null = null;
|
readonly OPP_VARIANT_OVERRIDE: Variant | null = null;
|
||||||
readonly OPP_IVS_OVERRIDE: number | number[] = [];
|
readonly OPP_IVS_OVERRIDE: number | number[] = [];
|
||||||
readonly OPP_FORM_OVERRIDES: Partial<Record<Species, number>> = {};
|
readonly OPP_FORM_OVERRIDES: Partial<Record<SpeciesId, number>> = {};
|
||||||
/**
|
/**
|
||||||
* Override to give the enemy Pokemon a given amount of health segments
|
* Override to give the enemy Pokemon a given amount of health segments
|
||||||
*
|
*
|
||||||
|
@ -40,7 +40,7 @@ import { BattleSpec } from "#enums/battle-spec";
|
|||||||
import { Biome } from "#enums/biome";
|
import { Biome } from "#enums/biome";
|
||||||
import { MysteryEncounterMode } from "#enums/mystery-encounter-mode";
|
import { MysteryEncounterMode } from "#enums/mystery-encounter-mode";
|
||||||
import { PlayerGender } from "#enums/player-gender";
|
import { PlayerGender } from "#enums/player-gender";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { overrideHeldItems, overrideModifiers } from "#app/modifier/modifier";
|
import { overrideHeldItems, overrideModifiers } from "#app/modifier/modifier";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import { WEIGHT_INCREMENT_ON_SPAWN_MISS } from "#app/data/mystery-encounters/mystery-encounters";
|
import { WEIGHT_INCREMENT_ON_SPAWN_MISS } from "#app/data/mystery-encounters/mystery-encounters";
|
||||||
@ -158,7 +158,7 @@ export class EncounterPhase extends BattlePhase {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enemyPokemon.species.speciesId === Species.ETERNATUS) {
|
if (enemyPokemon.species.speciesId === SpeciesId.ETERNATUS) {
|
||||||
if (
|
if (
|
||||||
globalScene.gameMode.isClassic &&
|
globalScene.gameMode.isClassic &&
|
||||||
(battle.battleSpec === BattleSpec.FINAL_BOSS || globalScene.gameMode.isWaveFinal(battle.waveIndex))
|
(battle.battleSpec === BattleSpec.FINAL_BOSS || globalScene.gameMode.isWaveFinal(battle.waveIndex))
|
||||||
@ -556,7 +556,7 @@ export class EncounterPhase extends BattlePhase {
|
|||||||
}
|
}
|
||||||
/** This sets Eternatus' held item to be untransferrable, preventing it from being stolen */
|
/** This sets Eternatus' held item to be untransferrable, preventing it from being stolen */
|
||||||
if (
|
if (
|
||||||
enemyPokemon.species.speciesId === Species.ETERNATUS &&
|
enemyPokemon.species.speciesId === SpeciesId.ETERNATUS &&
|
||||||
(globalScene.gameMode.isBattleClassicFinalBoss(globalScene.currentBattle.waveIndex) ||
|
(globalScene.gameMode.isBattleClassicFinalBoss(globalScene.currentBattle.waveIndex) ||
|
||||||
globalScene.gameMode.isEndlessMajorBoss(globalScene.currentBattle.waveIndex))
|
globalScene.gameMode.isEndlessMajorBoss(globalScene.currentBattle.waveIndex))
|
||||||
) {
|
) {
|
||||||
|
@ -4,7 +4,7 @@ import type Pokemon from "#app/field/pokemon";
|
|||||||
import { BattlePhase } from "#app/phases/battle-phase";
|
import { BattlePhase } from "#app/phases/battle-phase";
|
||||||
import { isNullOrUndefined } from "#app/utils/common";
|
import { isNullOrUndefined } from "#app/utils/common";
|
||||||
import { PokemonAnimType } from "#enums/pokemon-anim-type";
|
import { PokemonAnimType } from "#enums/pokemon-anim-type";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
|
|
||||||
export class PokemonAnimPhase extends BattlePhase {
|
export class PokemonAnimPhase extends BattlePhase {
|
||||||
/** The type of animation to play in this phase */
|
/** The type of animation to play in this phase */
|
||||||
@ -247,7 +247,7 @@ export class PokemonAnimPhase extends BattlePhase {
|
|||||||
}
|
}
|
||||||
const dondozo = this.pokemon.getAlly();
|
const dondozo = this.pokemon.getAlly();
|
||||||
|
|
||||||
if (dondozo?.species?.speciesId !== Species.DONDOZO) {
|
if (dondozo?.species?.speciesId !== SpeciesId.DONDOZO) {
|
||||||
return this.end();
|
return this.end();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ import { TitlePhase } from "#app/phases/title-phase";
|
|||||||
import { SaveSlotUiMode } from "#app/ui/save-slot-select-ui-handler";
|
import { SaveSlotUiMode } from "#app/ui/save-slot-select-ui-handler";
|
||||||
import type { Starter } from "#app/ui/starter-select-ui-handler";
|
import type { Starter } from "#app/ui/starter-select-ui-handler";
|
||||||
import { UiMode } from "#enums/ui-mode";
|
import { UiMode } from "#enums/ui-mode";
|
||||||
import type { Species } from "#enums/species";
|
import type { SpeciesId } from "#enums/species";
|
||||||
import SoundFade from "phaser3-rex-plugins/plugins/soundfade";
|
import SoundFade from "phaser3-rex-plugins/plugins/soundfade";
|
||||||
import { isNullOrUndefined } from "#app/utils/common";
|
import { isNullOrUndefined } from "#app/utils/common";
|
||||||
|
|
||||||
@ -43,7 +43,7 @@ export class SelectStarterPhase extends Phase {
|
|||||||
const loadPokemonAssets: Promise<void>[] = [];
|
const loadPokemonAssets: Promise<void>[] = [];
|
||||||
starters.forEach((starter: Starter, i: number) => {
|
starters.forEach((starter: Starter, i: number) => {
|
||||||
if (!i && Overrides.STARTER_SPECIES_OVERRIDE) {
|
if (!i && Overrides.STARTER_SPECIES_OVERRIDE) {
|
||||||
starter.species = getPokemonSpecies(Overrides.STARTER_SPECIES_OVERRIDE as Species);
|
starter.species = getPokemonSpecies(Overrides.STARTER_SPECIES_OVERRIDE as SpeciesId);
|
||||||
}
|
}
|
||||||
const starterProps = globalScene.gameData.getSpeciesDexAttrProps(starter.species, starter.dexAttr);
|
const starterProps = globalScene.gameData.getSpeciesDexAttrProps(starter.species, starter.dexAttr);
|
||||||
let starterFormIndex = Math.min(starterProps.formIndex, Math.max(starter.species.forms.length - 1, 0));
|
let starterFormIndex = Math.min(starterProps.formIndex, Math.max(starter.species.forms.length - 1, 0));
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import type { EggTier } from "#enums/egg-type";
|
import type { EggTier } from "#enums/egg-type";
|
||||||
import type { Species } from "#enums/species";
|
import type { SpeciesId } from "#enums/species";
|
||||||
import type { VariantTier } from "#enums/variant-tier";
|
import type { VariantTier } from "#enums/variant-tier";
|
||||||
import { EGG_SEED, Egg } from "../data/egg";
|
import { EGG_SEED, Egg } from "../data/egg";
|
||||||
import type { EggSourceType } from "#app/enums/egg-source-types";
|
import type { EggSourceType } from "#app/enums/egg-source-types";
|
||||||
@ -12,7 +12,7 @@ export default class EggData {
|
|||||||
public timestamp: number;
|
public timestamp: number;
|
||||||
public variantTier: VariantTier;
|
public variantTier: VariantTier;
|
||||||
public isShiny: boolean;
|
public isShiny: boolean;
|
||||||
public species: Species;
|
public species: SpeciesId;
|
||||||
public eggMoveIndex: number;
|
public eggMoveIndex: number;
|
||||||
public overrideHiddenAbility: boolean;
|
public overrideHiddenAbility: boolean;
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ import { Device } from "#enums/devices";
|
|||||||
import { GameDataType } from "#enums/game-data-type";
|
import { GameDataType } from "#enums/game-data-type";
|
||||||
import type { MoveId } from "#enums/move-id";
|
import type { MoveId } from "#enums/move-id";
|
||||||
import { PlayerGender } from "#enums/player-gender";
|
import { PlayerGender } from "#enums/player-gender";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { applyChallenges, ChallengeType } from "#app/data/challenge";
|
import { applyChallenges, ChallengeType } from "#app/data/challenge";
|
||||||
import { WeatherType } from "#enums/weather-type";
|
import { WeatherType } from "#enums/weather-type";
|
||||||
import { TerrainType } from "#app/data/terrain";
|
import { TerrainType } from "#app/data/terrain";
|
||||||
@ -63,34 +63,34 @@ import { ArenaTrapTag } from "#app/data/arena-tag";
|
|||||||
import { pokemonFormChanges } from "#app/data/pokemon-forms";
|
import { pokemonFormChanges } from "#app/data/pokemon-forms";
|
||||||
import type { PokemonType } from "#enums/pokemon-type";
|
import type { PokemonType } from "#enums/pokemon-type";
|
||||||
|
|
||||||
export const defaultStarterSpecies: Species[] = [
|
export const defaultStarterSpecies: SpeciesId[] = [
|
||||||
Species.BULBASAUR,
|
SpeciesId.BULBASAUR,
|
||||||
Species.CHARMANDER,
|
SpeciesId.CHARMANDER,
|
||||||
Species.SQUIRTLE,
|
SpeciesId.SQUIRTLE,
|
||||||
Species.CHIKORITA,
|
SpeciesId.CHIKORITA,
|
||||||
Species.CYNDAQUIL,
|
SpeciesId.CYNDAQUIL,
|
||||||
Species.TOTODILE,
|
SpeciesId.TOTODILE,
|
||||||
Species.TREECKO,
|
SpeciesId.TREECKO,
|
||||||
Species.TORCHIC,
|
SpeciesId.TORCHIC,
|
||||||
Species.MUDKIP,
|
SpeciesId.MUDKIP,
|
||||||
Species.TURTWIG,
|
SpeciesId.TURTWIG,
|
||||||
Species.CHIMCHAR,
|
SpeciesId.CHIMCHAR,
|
||||||
Species.PIPLUP,
|
SpeciesId.PIPLUP,
|
||||||
Species.SNIVY,
|
SpeciesId.SNIVY,
|
||||||
Species.TEPIG,
|
SpeciesId.TEPIG,
|
||||||
Species.OSHAWOTT,
|
SpeciesId.OSHAWOTT,
|
||||||
Species.CHESPIN,
|
SpeciesId.CHESPIN,
|
||||||
Species.FENNEKIN,
|
SpeciesId.FENNEKIN,
|
||||||
Species.FROAKIE,
|
SpeciesId.FROAKIE,
|
||||||
Species.ROWLET,
|
SpeciesId.ROWLET,
|
||||||
Species.LITTEN,
|
SpeciesId.LITTEN,
|
||||||
Species.POPPLIO,
|
SpeciesId.POPPLIO,
|
||||||
Species.GROOKEY,
|
SpeciesId.GROOKEY,
|
||||||
Species.SCORBUNNY,
|
SpeciesId.SCORBUNNY,
|
||||||
Species.SOBBLE,
|
SpeciesId.SOBBLE,
|
||||||
Species.SPRIGATITO,
|
SpeciesId.SPRIGATITO,
|
||||||
Species.FUECOCO,
|
SpeciesId.FUECOCO,
|
||||||
Species.QUAXLY,
|
SpeciesId.QUAXLY,
|
||||||
];
|
];
|
||||||
|
|
||||||
const saveKey = "x0i2O7WRiANTqPmZ"; // Temporary; secure encryption is not yet necessary
|
const saveKey = "x0i2O7WRiANTqPmZ"; // Temporary; secure encryption is not yet necessary
|
||||||
@ -555,7 +555,7 @@ export class GameData {
|
|||||||
|
|
||||||
this.migrateStarterAbilities(systemData, this.starterData);
|
this.migrateStarterAbilities(systemData, this.starterData);
|
||||||
|
|
||||||
const starterIds = Object.keys(this.starterData).map(s => Number.parseInt(s) as Species);
|
const starterIds = Object.keys(this.starterData).map(s => Number.parseInt(s) as SpeciesId);
|
||||||
for (const s of starterIds) {
|
for (const s of starterIds) {
|
||||||
this.starterData[s].candyCount += systemData.dexData[s].caughtCount;
|
this.starterData[s].candyCount += systemData.dexData[s].caughtCount;
|
||||||
this.starterData[s].candyCount += systemData.dexData[s].hatchedCount * 2;
|
this.starterData[s].candyCount += systemData.dexData[s].hatchedCount * 2;
|
||||||
@ -1720,7 +1720,7 @@ export class GameData {
|
|||||||
private initStarterData(): void {
|
private initStarterData(): void {
|
||||||
const starterData: StarterData = {};
|
const starterData: StarterData = {};
|
||||||
|
|
||||||
const starterSpeciesIds = Object.keys(speciesStarterCosts).map(k => Number.parseInt(k) as Species);
|
const starterSpeciesIds = Object.keys(speciesStarterCosts).map(k => Number.parseInt(k) as SpeciesId);
|
||||||
|
|
||||||
for (const speciesId of starterSpeciesIds) {
|
for (const speciesId of starterSpeciesIds) {
|
||||||
starterData[speciesId] = {
|
starterData[speciesId] = {
|
||||||
@ -1815,16 +1815,16 @@ export class GameData {
|
|||||||
const formKey = pokemon.getFormKey();
|
const formKey = pokemon.getFormKey();
|
||||||
if (formIndex > 0) {
|
if (formIndex > 0) {
|
||||||
// In case a Pikachu with formIndex > 0 was unlocked, base form Pichu is also unlocked
|
// In case a Pikachu with formIndex > 0 was unlocked, base form Pichu is also unlocked
|
||||||
if (pokemon.species.speciesId === Species.PIKACHU && species.speciesId === Species.PICHU) {
|
if (pokemon.species.speciesId === SpeciesId.PIKACHU && species.speciesId === SpeciesId.PICHU) {
|
||||||
dexEntry.caughtAttr |= globalScene.gameData.getFormAttr(0);
|
dexEntry.caughtAttr |= globalScene.gameData.getFormAttr(0);
|
||||||
}
|
}
|
||||||
if (pokemon.species.speciesId === Species.URSHIFU) {
|
if (pokemon.species.speciesId === SpeciesId.URSHIFU) {
|
||||||
if (formIndex === 2) {
|
if (formIndex === 2) {
|
||||||
dexEntry.caughtAttr |= globalScene.gameData.getFormAttr(0);
|
dexEntry.caughtAttr |= globalScene.gameData.getFormAttr(0);
|
||||||
} else if (formIndex === 3) {
|
} else if (formIndex === 3) {
|
||||||
dexEntry.caughtAttr |= globalScene.gameData.getFormAttr(1);
|
dexEntry.caughtAttr |= globalScene.gameData.getFormAttr(1);
|
||||||
}
|
}
|
||||||
} else if (pokemon.species.speciesId === Species.ZYGARDE) {
|
} else if (pokemon.species.speciesId === SpeciesId.ZYGARDE) {
|
||||||
if (formIndex === 4) {
|
if (formIndex === 4) {
|
||||||
dexEntry.caughtAttr |= globalScene.gameData.getFormAttr(2);
|
dexEntry.caughtAttr |= globalScene.gameData.getFormAttr(2);
|
||||||
} else if (formIndex === 5) {
|
} else if (formIndex === 5) {
|
||||||
@ -1929,7 +1929,7 @@ export class GameData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
incrementRibbonCount(species: PokemonSpecies, forStarter = false): number {
|
incrementRibbonCount(species: PokemonSpecies, forStarter = false): number {
|
||||||
const speciesIdToIncrement: Species = species.getRootSpeciesId(forStarter);
|
const speciesIdToIncrement: SpeciesId = species.getRootSpeciesId(forStarter);
|
||||||
|
|
||||||
if (!this.starterData[speciesIdToIncrement].classicWinCount) {
|
if (!this.starterData[speciesIdToIncrement].classicWinCount) {
|
||||||
this.starterData[speciesIdToIncrement].classicWinCount = 0;
|
this.starterData[speciesIdToIncrement].classicWinCount = 0;
|
||||||
@ -2040,7 +2040,7 @@ export class GameData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//recursively unlock nature for species and prevolutions
|
//recursively unlock nature for species and prevolutions
|
||||||
const _unlockSpeciesNature = (speciesId: Species) => {
|
const _unlockSpeciesNature = (speciesId: SpeciesId) => {
|
||||||
this.dexData[speciesId].natureAttr |= 1 << (nature + 1);
|
this.dexData[speciesId].natureAttr |= 1 << (nature + 1);
|
||||||
if (pokemonPrevolutions.hasOwnProperty(speciesId)) {
|
if (pokemonPrevolutions.hasOwnProperty(speciesId)) {
|
||||||
_unlockSpeciesNature(pokemonPrevolutions[speciesId]);
|
_unlockSpeciesNature(pokemonPrevolutions[speciesId]);
|
||||||
@ -2049,7 +2049,7 @@ export class GameData {
|
|||||||
_unlockSpeciesNature(species.speciesId);
|
_unlockSpeciesNature(species.speciesId);
|
||||||
}
|
}
|
||||||
|
|
||||||
updateSpeciesDexIvs(speciesId: Species, ivs: number[]): void {
|
updateSpeciesDexIvs(speciesId: SpeciesId, ivs: number[]): void {
|
||||||
let dexEntry: DexEntry;
|
let dexEntry: DexEntry;
|
||||||
do {
|
do {
|
||||||
dexEntry = globalScene.gameData.dexData[speciesId];
|
dexEntry = globalScene.gameData.dexData[speciesId];
|
||||||
@ -2180,7 +2180,7 @@ export class GameData {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
getSpeciesStarterValue(speciesId: Species): number {
|
getSpeciesStarterValue(speciesId: SpeciesId): number {
|
||||||
const baseValue = speciesStarterCosts[speciesId];
|
const baseValue = speciesStarterCosts[speciesId];
|
||||||
let value = baseValue;
|
let value = baseValue;
|
||||||
|
|
||||||
@ -2231,7 +2231,7 @@ export class GameData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
migrateStarterAbilities(systemData: SystemSaveData, initialStarterData?: StarterData): void {
|
migrateStarterAbilities(systemData: SystemSaveData, initialStarterData?: StarterData): void {
|
||||||
const starterIds = Object.keys(this.starterData).map(s => Number.parseInt(s) as Species);
|
const starterIds = Object.keys(this.starterData).map(s => Number.parseInt(s) as SpeciesId);
|
||||||
const starterData = initialStarterData || systemData.starterData;
|
const starterData = initialStarterData || systemData.starterData;
|
||||||
const dexData = systemData.dexData;
|
const dexData = systemData.dexData;
|
||||||
for (const s of starterIds) {
|
for (const s of starterIds) {
|
||||||
|
@ -10,14 +10,14 @@ import { TrainerSlot } from "#enums/trainer-slot";
|
|||||||
import type { Variant } from "#app/sprites/variant";
|
import type { Variant } from "#app/sprites/variant";
|
||||||
import type { Biome } from "#enums/biome";
|
import type { Biome } from "#enums/biome";
|
||||||
import type { MoveId } from "#enums/move-id";
|
import type { MoveId } from "#enums/move-id";
|
||||||
import type { Species } from "#enums/species";
|
import type { SpeciesId } from "#enums/species";
|
||||||
import { CustomPokemonData } from "#app/data/custom-pokemon-data";
|
import { CustomPokemonData } from "#app/data/custom-pokemon-data";
|
||||||
import type { PokemonType } from "#enums/pokemon-type";
|
import type { PokemonType } from "#enums/pokemon-type";
|
||||||
|
|
||||||
export default class PokemonData {
|
export default class PokemonData {
|
||||||
public id: number;
|
public id: number;
|
||||||
public player: boolean;
|
public player: boolean;
|
||||||
public species: Species;
|
public species: SpeciesId;
|
||||||
public nickname: string;
|
public nickname: string;
|
||||||
public formIndex: number;
|
public formIndex: number;
|
||||||
public abilityIndex: number;
|
public abilityIndex: number;
|
||||||
@ -38,7 +38,7 @@ export default class PokemonData {
|
|||||||
public friendship: number;
|
public friendship: number;
|
||||||
public metLevel: number;
|
public metLevel: number;
|
||||||
public metBiome: Biome | -1; // -1 for starters
|
public metBiome: Biome | -1; // -1 for starters
|
||||||
public metSpecies: Species;
|
public metSpecies: SpeciesId;
|
||||||
public metWave: number; // 0 for unknown (previous saves), -1 for starters
|
public metWave: number; // 0 for unknown (previous saves), -1 for starters
|
||||||
public luck: number;
|
public luck: number;
|
||||||
public pauseEvolutions: boolean;
|
public pauseEvolutions: boolean;
|
||||||
@ -49,7 +49,7 @@ export default class PokemonData {
|
|||||||
public isTerastallized: boolean;
|
public isTerastallized: boolean;
|
||||||
public stellarTypesBoosted: PokemonType[];
|
public stellarTypesBoosted: PokemonType[];
|
||||||
|
|
||||||
public fusionSpecies: Species;
|
public fusionSpecies: SpeciesId;
|
||||||
public fusionFormIndex: number;
|
public fusionFormIndex: number;
|
||||||
public fusionAbilityIndex: number;
|
public fusionAbilityIndex: number;
|
||||||
public fusionShiny: boolean;
|
public fusionShiny: boolean;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import type { SystemSaveMigrator } from "#app/@types/SystemSaveMigrator";
|
import type { SystemSaveMigrator } from "#app/@types/SystemSaveMigrator";
|
||||||
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
||||||
import { DexAttr, type SystemSaveData } from "#app/system/game-data";
|
import { DexAttr, type SystemSaveData } from "#app/system/game-data";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If a starter is caught, but the only forms registered as caught are not starterSelectable,
|
* If a starter is caught, but the only forms registered as caught are not starterSelectable,
|
||||||
@ -17,7 +17,7 @@ const migratePichuForms: SystemSaveMigrator = {
|
|||||||
const caughtAttr = data.dexData[sd]?.caughtAttr;
|
const caughtAttr = data.dexData[sd]?.caughtAttr;
|
||||||
const species = getPokemonSpecies(sd);
|
const species = getPokemonSpecies(sd);
|
||||||
// An extra check because you never know
|
// An extra check because you never know
|
||||||
if (species.speciesId === Species.PICHU && caughtAttr) {
|
if (species.speciesId === SpeciesId.PICHU && caughtAttr) {
|
||||||
// Ensuring that only existing forms are unlocked
|
// Ensuring that only existing forms are unlocked
|
||||||
data.dexData[sd].caughtAttr &= species.getFullUnlocksData();
|
data.dexData[sd].caughtAttr &= species.getFullUnlocksData();
|
||||||
// If no forms are unlocked now, since Pichu is caught, we unlock form 0
|
// If no forms are unlocked now, since Pichu is caught, we unlock form 0
|
||||||
|
@ -3,7 +3,7 @@ import { TextStyle, addTextObject } from "#app/ui/text";
|
|||||||
import type { nil } from "#app/utils/common";
|
import type { nil } from "#app/utils/common";
|
||||||
import { isNullOrUndefined } from "#app/utils/common";
|
import { isNullOrUndefined } from "#app/utils/common";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import type { WeatherPoolEntry } from "#app/data/weather";
|
import type { WeatherPoolEntry } from "#app/data/weather";
|
||||||
import { WeatherType } from "#enums/weather-type";
|
import { WeatherType } from "#enums/weather-type";
|
||||||
import { CLASSIC_CANDY_FRIENDSHIP_MULTIPLIER } from "./data/balance/starters";
|
import { CLASSIC_CANDY_FRIENDSHIP_MULTIPLIER } from "./data/balance/starters";
|
||||||
@ -26,7 +26,7 @@ interface EventBanner {
|
|||||||
}
|
}
|
||||||
|
|
||||||
interface EventEncounter {
|
interface EventEncounter {
|
||||||
species: Species;
|
species: SpeciesId;
|
||||||
blockEvolution?: boolean;
|
blockEvolution?: boolean;
|
||||||
formIndex?: number;
|
formIndex?: number;
|
||||||
}
|
}
|
||||||
@ -62,7 +62,7 @@ interface TimedEvent extends EventBanner {
|
|||||||
delibirdyBuff?: string[];
|
delibirdyBuff?: string[];
|
||||||
weather?: WeatherPoolEntry[];
|
weather?: WeatherPoolEntry[];
|
||||||
mysteryEncounterTierChanges?: EventMysteryEncounterTier[];
|
mysteryEncounterTierChanges?: EventMysteryEncounterTier[];
|
||||||
luckBoostedSpecies?: Species[];
|
luckBoostedSpecies?: SpeciesId[];
|
||||||
boostFusions?: boolean; //MODIFIER REWORK PLEASE
|
boostFusions?: boolean; //MODIFIER REWORK PLEASE
|
||||||
classicWaveRewards?: EventWaveReward[]; // Rival battle rewards
|
classicWaveRewards?: EventWaveReward[]; // Rival battle rewards
|
||||||
trainerShinyChance?: number; // Odds over 65536 of trainer mon generating as shiny
|
trainerShinyChance?: number; // Odds over 65536 of trainer mon generating as shiny
|
||||||
@ -82,26 +82,26 @@ const timedEvents: TimedEvent[] = [
|
|||||||
scale: 0.21,
|
scale: 0.21,
|
||||||
availableLangs: ["en", "de", "it", "fr", "ja", "ko", "es-ES", "pt-BR", "zh-CN"],
|
availableLangs: ["en", "de", "it", "fr", "ja", "ko", "es-ES", "pt-BR", "zh-CN"],
|
||||||
eventEncounters: [
|
eventEncounters: [
|
||||||
{ species: Species.GIMMIGHOUL, blockEvolution: true },
|
{ species: SpeciesId.GIMMIGHOUL, blockEvolution: true },
|
||||||
{ species: Species.DELIBIRD },
|
{ species: SpeciesId.DELIBIRD },
|
||||||
{ species: Species.STANTLER },
|
{ species: SpeciesId.STANTLER },
|
||||||
{ species: Species.CYNDAQUIL },
|
{ species: SpeciesId.CYNDAQUIL },
|
||||||
{ species: Species.PIPLUP },
|
{ species: SpeciesId.PIPLUP },
|
||||||
{ species: Species.CHESPIN },
|
{ species: SpeciesId.CHESPIN },
|
||||||
{ species: Species.BALTOY },
|
{ species: SpeciesId.BALTOY },
|
||||||
{ species: Species.SNOVER },
|
{ species: SpeciesId.SNOVER },
|
||||||
{ species: Species.CHINGLING },
|
{ species: SpeciesId.CHINGLING },
|
||||||
{ species: Species.LITWICK },
|
{ species: SpeciesId.LITWICK },
|
||||||
{ species: Species.CUBCHOO },
|
{ species: SpeciesId.CUBCHOO },
|
||||||
{ species: Species.SWIRLIX },
|
{ species: SpeciesId.SWIRLIX },
|
||||||
{ species: Species.AMAURA },
|
{ species: SpeciesId.AMAURA },
|
||||||
{ species: Species.MUDBRAY },
|
{ species: SpeciesId.MUDBRAY },
|
||||||
{ species: Species.ROLYCOLY },
|
{ species: SpeciesId.ROLYCOLY },
|
||||||
{ species: Species.MILCERY },
|
{ species: SpeciesId.MILCERY },
|
||||||
{ species: Species.SMOLIV },
|
{ species: SpeciesId.SMOLIV },
|
||||||
{ species: Species.ALOLA_VULPIX },
|
{ species: SpeciesId.ALOLA_VULPIX },
|
||||||
{ species: Species.GALAR_DARUMAKA },
|
{ species: SpeciesId.GALAR_DARUMAKA },
|
||||||
{ species: Species.IRON_BUNDLE },
|
{ species: SpeciesId.IRON_BUNDLE },
|
||||||
],
|
],
|
||||||
delibirdyBuff: ["CATCHING_CHARM", "SHINY_CHARM", "ABILITY_CHARM", "EXP_CHARM", "SUPER_EXP_CHARM", "HEALING_CHARM"],
|
delibirdyBuff: ["CATCHING_CHARM", "SHINY_CHARM", "ABILITY_CHARM", "EXP_CHARM", "SUPER_EXP_CHARM", "HEALING_CHARM"],
|
||||||
weather: [{ weatherType: WeatherType.SNOW, weight: 1 }],
|
weather: [{ weatherType: WeatherType.SNOW, weight: 1 }],
|
||||||
@ -138,59 +138,59 @@ const timedEvents: TimedEvent[] = [
|
|||||||
scale: 0.21,
|
scale: 0.21,
|
||||||
availableLangs: ["en", "de", "it", "fr", "ja", "ko", "es-ES", "pt-BR", "zh-CN"],
|
availableLangs: ["en", "de", "it", "fr", "ja", "ko", "es-ES", "pt-BR", "zh-CN"],
|
||||||
eventEncounters: [
|
eventEncounters: [
|
||||||
{ species: Species.EKANS },
|
{ species: SpeciesId.EKANS },
|
||||||
{ species: Species.ONIX },
|
{ species: SpeciesId.ONIX },
|
||||||
{ species: Species.DRATINI },
|
{ species: SpeciesId.DRATINI },
|
||||||
{ species: Species.CLEFFA },
|
{ species: SpeciesId.CLEFFA },
|
||||||
{ species: Species.UMBREON },
|
{ species: SpeciesId.UMBREON },
|
||||||
{ species: Species.DUNSPARCE },
|
{ species: SpeciesId.DUNSPARCE },
|
||||||
{ species: Species.TEDDIURSA },
|
{ species: SpeciesId.TEDDIURSA },
|
||||||
{ species: Species.SEVIPER },
|
{ species: SpeciesId.SEVIPER },
|
||||||
{ species: Species.LUNATONE },
|
{ species: SpeciesId.LUNATONE },
|
||||||
{ species: Species.CHINGLING },
|
{ species: SpeciesId.CHINGLING },
|
||||||
{ species: Species.SNIVY },
|
{ species: SpeciesId.SNIVY },
|
||||||
{ species: Species.DARUMAKA },
|
{ species: SpeciesId.DARUMAKA },
|
||||||
{ species: Species.DRAMPA },
|
{ species: SpeciesId.DRAMPA },
|
||||||
{ species: Species.SILICOBRA },
|
{ species: SpeciesId.SILICOBRA },
|
||||||
{ species: Species.BLOODMOON_URSALUNA },
|
{ species: SpeciesId.BLOODMOON_URSALUNA },
|
||||||
],
|
],
|
||||||
luckBoostedSpecies: [
|
luckBoostedSpecies: [
|
||||||
Species.EKANS,
|
SpeciesId.EKANS,
|
||||||
Species.ARBOK,
|
SpeciesId.ARBOK,
|
||||||
Species.ONIX,
|
SpeciesId.ONIX,
|
||||||
Species.STEELIX,
|
SpeciesId.STEELIX,
|
||||||
Species.DRATINI,
|
SpeciesId.DRATINI,
|
||||||
Species.DRAGONAIR,
|
SpeciesId.DRAGONAIR,
|
||||||
Species.DRAGONITE,
|
SpeciesId.DRAGONITE,
|
||||||
Species.CLEFFA,
|
SpeciesId.CLEFFA,
|
||||||
Species.CLEFAIRY,
|
SpeciesId.CLEFAIRY,
|
||||||
Species.CLEFABLE,
|
SpeciesId.CLEFABLE,
|
||||||
Species.UMBREON,
|
SpeciesId.UMBREON,
|
||||||
Species.DUNSPARCE,
|
SpeciesId.DUNSPARCE,
|
||||||
Species.DUDUNSPARCE,
|
SpeciesId.DUDUNSPARCE,
|
||||||
Species.TEDDIURSA,
|
SpeciesId.TEDDIURSA,
|
||||||
Species.URSARING,
|
SpeciesId.URSARING,
|
||||||
Species.URSALUNA,
|
SpeciesId.URSALUNA,
|
||||||
Species.SEVIPER,
|
SpeciesId.SEVIPER,
|
||||||
Species.LUNATONE,
|
SpeciesId.LUNATONE,
|
||||||
Species.RAYQUAZA,
|
SpeciesId.RAYQUAZA,
|
||||||
Species.CHINGLING,
|
SpeciesId.CHINGLING,
|
||||||
Species.CHIMECHO,
|
SpeciesId.CHIMECHO,
|
||||||
Species.CRESSELIA,
|
SpeciesId.CRESSELIA,
|
||||||
Species.DARKRAI,
|
SpeciesId.DARKRAI,
|
||||||
Species.SNIVY,
|
SpeciesId.SNIVY,
|
||||||
Species.SERVINE,
|
SpeciesId.SERVINE,
|
||||||
Species.SERPERIOR,
|
SpeciesId.SERPERIOR,
|
||||||
Species.DARUMAKA,
|
SpeciesId.DARUMAKA,
|
||||||
Species.DARMANITAN,
|
SpeciesId.DARMANITAN,
|
||||||
Species.ZYGARDE,
|
SpeciesId.ZYGARDE,
|
||||||
Species.DRAMPA,
|
SpeciesId.DRAMPA,
|
||||||
Species.LUNALA,
|
SpeciesId.LUNALA,
|
||||||
Species.BLACEPHALON,
|
SpeciesId.BLACEPHALON,
|
||||||
Species.SILICOBRA,
|
SpeciesId.SILICOBRA,
|
||||||
Species.SANDACONDA,
|
SpeciesId.SANDACONDA,
|
||||||
Species.ROARING_MOON,
|
SpeciesId.ROARING_MOON,
|
||||||
Species.BLOODMOON_URSALUNA,
|
SpeciesId.BLOODMOON_URSALUNA,
|
||||||
],
|
],
|
||||||
classicWaveRewards: [
|
classicWaveRewards: [
|
||||||
{ wave: 8, type: "SHINY_CHARM" },
|
{ wave: 8, type: "SHINY_CHARM" },
|
||||||
@ -210,28 +210,28 @@ const timedEvents: TimedEvent[] = [
|
|||||||
scale: 0.21,
|
scale: 0.21,
|
||||||
availableLangs: ["en", "de", "it", "fr", "ja", "ko", "es-ES", "pt-BR", "zh-CN"],
|
availableLangs: ["en", "de", "it", "fr", "ja", "ko", "es-ES", "pt-BR", "zh-CN"],
|
||||||
eventEncounters: [
|
eventEncounters: [
|
||||||
{ species: Species.NIDORAN_F },
|
{ species: SpeciesId.NIDORAN_F },
|
||||||
{ species: Species.NIDORAN_M },
|
{ species: SpeciesId.NIDORAN_M },
|
||||||
{ species: Species.IGGLYBUFF },
|
{ species: SpeciesId.IGGLYBUFF },
|
||||||
{ species: Species.SMOOCHUM },
|
{ species: SpeciesId.SMOOCHUM },
|
||||||
{ species: Species.VOLBEAT },
|
{ species: SpeciesId.VOLBEAT },
|
||||||
{ species: Species.ILLUMISE },
|
{ species: SpeciesId.ILLUMISE },
|
||||||
{ species: Species.ROSELIA },
|
{ species: SpeciesId.ROSELIA },
|
||||||
{ species: Species.LUVDISC },
|
{ species: SpeciesId.LUVDISC },
|
||||||
{ species: Species.WOOBAT },
|
{ species: SpeciesId.WOOBAT },
|
||||||
{ species: Species.FRILLISH },
|
{ species: SpeciesId.FRILLISH },
|
||||||
{ species: Species.ALOMOMOLA },
|
{ species: SpeciesId.ALOMOMOLA },
|
||||||
{ species: Species.FURFROU, formIndex: 1 }, // Heart Trim
|
{ species: SpeciesId.FURFROU, formIndex: 1 }, // Heart Trim
|
||||||
{ species: Species.ESPURR },
|
{ species: SpeciesId.ESPURR },
|
||||||
{ species: Species.SPRITZEE },
|
{ species: SpeciesId.SPRITZEE },
|
||||||
{ species: Species.SWIRLIX },
|
{ species: SpeciesId.SWIRLIX },
|
||||||
{ species: Species.APPLIN },
|
{ species: SpeciesId.APPLIN },
|
||||||
{ species: Species.MILCERY },
|
{ species: SpeciesId.MILCERY },
|
||||||
{ species: Species.INDEEDEE },
|
{ species: SpeciesId.INDEEDEE },
|
||||||
{ species: Species.TANDEMAUS },
|
{ species: SpeciesId.TANDEMAUS },
|
||||||
{ species: Species.ENAMORUS },
|
{ species: SpeciesId.ENAMORUS },
|
||||||
],
|
],
|
||||||
luckBoostedSpecies: [Species.LUVDISC],
|
luckBoostedSpecies: [SpeciesId.LUVDISC],
|
||||||
classicWaveRewards: [
|
classicWaveRewards: [
|
||||||
{ wave: 8, type: "SHINY_CHARM" },
|
{ wave: 8, type: "SHINY_CHARM" },
|
||||||
{ wave: 8, type: "ABILITY_CHARM" },
|
{ wave: 8, type: "ABILITY_CHARM" },
|
||||||
@ -249,39 +249,39 @@ const timedEvents: TimedEvent[] = [
|
|||||||
scale: 0.21,
|
scale: 0.21,
|
||||||
availableLangs: ["en", "de", "it", "fr", "ja", "ko", "es-ES", "pt-BR", "zh-CN"],
|
availableLangs: ["en", "de", "it", "fr", "ja", "ko", "es-ES", "pt-BR", "zh-CN"],
|
||||||
eventEncounters: [
|
eventEncounters: [
|
||||||
{ species: Species.PIKACHU, formIndex: 1, blockEvolution: true }, // Partner Form
|
{ species: SpeciesId.PIKACHU, formIndex: 1, blockEvolution: true }, // Partner Form
|
||||||
{ species: Species.EEVEE, formIndex: 1, blockEvolution: true }, // Partner Form
|
{ species: SpeciesId.EEVEE, formIndex: 1, blockEvolution: true }, // Partner Form
|
||||||
{ species: Species.CHIKORITA },
|
{ species: SpeciesId.CHIKORITA },
|
||||||
{ species: Species.TOTODILE },
|
{ species: SpeciesId.TOTODILE },
|
||||||
{ species: Species.TEPIG },
|
{ species: SpeciesId.TEPIG },
|
||||||
],
|
],
|
||||||
luckBoostedSpecies: [
|
luckBoostedSpecies: [
|
||||||
Species.PICHU,
|
SpeciesId.PICHU,
|
||||||
Species.PIKACHU,
|
SpeciesId.PIKACHU,
|
||||||
Species.RAICHU,
|
SpeciesId.RAICHU,
|
||||||
Species.ALOLA_RAICHU,
|
SpeciesId.ALOLA_RAICHU,
|
||||||
Species.PSYDUCK,
|
SpeciesId.PSYDUCK,
|
||||||
Species.GOLDUCK,
|
SpeciesId.GOLDUCK,
|
||||||
Species.EEVEE,
|
SpeciesId.EEVEE,
|
||||||
Species.FLAREON,
|
SpeciesId.FLAREON,
|
||||||
Species.JOLTEON,
|
SpeciesId.JOLTEON,
|
||||||
Species.VAPOREON,
|
SpeciesId.VAPOREON,
|
||||||
Species.ESPEON,
|
SpeciesId.ESPEON,
|
||||||
Species.UMBREON,
|
SpeciesId.UMBREON,
|
||||||
Species.LEAFEON,
|
SpeciesId.LEAFEON,
|
||||||
Species.GLACEON,
|
SpeciesId.GLACEON,
|
||||||
Species.SYLVEON,
|
SpeciesId.SYLVEON,
|
||||||
Species.CHIKORITA,
|
SpeciesId.CHIKORITA,
|
||||||
Species.BAYLEEF,
|
SpeciesId.BAYLEEF,
|
||||||
Species.MEGANIUM,
|
SpeciesId.MEGANIUM,
|
||||||
Species.TOTODILE,
|
SpeciesId.TOTODILE,
|
||||||
Species.CROCONAW,
|
SpeciesId.CROCONAW,
|
||||||
Species.FERALIGATR,
|
SpeciesId.FERALIGATR,
|
||||||
Species.TEPIG,
|
SpeciesId.TEPIG,
|
||||||
Species.PIGNITE,
|
SpeciesId.PIGNITE,
|
||||||
Species.EMBOAR,
|
SpeciesId.EMBOAR,
|
||||||
Species.ZYGARDE,
|
SpeciesId.ZYGARDE,
|
||||||
Species.ETERNAL_FLOETTE,
|
SpeciesId.ETERNAL_FLOETTE,
|
||||||
],
|
],
|
||||||
classicWaveRewards: [
|
classicWaveRewards: [
|
||||||
{ wave: 8, type: "SHINY_CHARM" },
|
{ wave: 8, type: "SHINY_CHARM" },
|
||||||
@ -321,28 +321,28 @@ const timedEvents: TimedEvent[] = [
|
|||||||
shinyMultiplier: 2,
|
shinyMultiplier: 2,
|
||||||
upgradeUnlockedVouchers: true,
|
upgradeUnlockedVouchers: true,
|
||||||
eventEncounters: [
|
eventEncounters: [
|
||||||
{ species: Species.HOPPIP },
|
{ species: SpeciesId.HOPPIP },
|
||||||
{ species: Species.CELEBI },
|
{ species: SpeciesId.CELEBI },
|
||||||
{ species: Species.VOLBEAT },
|
{ species: SpeciesId.VOLBEAT },
|
||||||
{ species: Species.ILLUMISE },
|
{ species: SpeciesId.ILLUMISE },
|
||||||
{ species: Species.SPOINK },
|
{ species: SpeciesId.SPOINK },
|
||||||
{ species: Species.LILEEP },
|
{ species: SpeciesId.LILEEP },
|
||||||
{ species: Species.SHINX },
|
{ species: SpeciesId.SHINX },
|
||||||
{ species: Species.PACHIRISU },
|
{ species: SpeciesId.PACHIRISU },
|
||||||
{ species: Species.CHERUBI },
|
{ species: SpeciesId.CHERUBI },
|
||||||
{ species: Species.MUNCHLAX },
|
{ species: SpeciesId.MUNCHLAX },
|
||||||
{ species: Species.TEPIG },
|
{ species: SpeciesId.TEPIG },
|
||||||
{ species: Species.PANSAGE },
|
{ species: SpeciesId.PANSAGE },
|
||||||
{ species: Species.PANSEAR },
|
{ species: SpeciesId.PANSEAR },
|
||||||
{ species: Species.PANPOUR },
|
{ species: SpeciesId.PANPOUR },
|
||||||
{ species: Species.DARUMAKA },
|
{ species: SpeciesId.DARUMAKA },
|
||||||
{ species: Species.ARCHEN },
|
{ species: SpeciesId.ARCHEN },
|
||||||
{ species: Species.DEERLING, formIndex: 0 }, // Spring Deerling
|
{ species: SpeciesId.DEERLING, formIndex: 0 }, // Spring Deerling
|
||||||
{ species: Species.CLAUNCHER },
|
{ species: SpeciesId.CLAUNCHER },
|
||||||
{ species: Species.WISHIWASHI },
|
{ species: SpeciesId.WISHIWASHI },
|
||||||
{ species: Species.DRAMPA },
|
{ species: SpeciesId.DRAMPA },
|
||||||
{ species: Species.JANGMO_O },
|
{ species: SpeciesId.JANGMO_O },
|
||||||
{ species: Species.APPLIN },
|
{ species: SpeciesId.APPLIN },
|
||||||
],
|
],
|
||||||
classicWaveRewards: [
|
classicWaveRewards: [
|
||||||
{ wave: 8, type: "SHINY_CHARM" },
|
{ wave: 8, type: "SHINY_CHARM" },
|
||||||
@ -510,8 +510,8 @@ export class TimedEventManager {
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
getEventLuckBoostedSpecies(): Species[] {
|
getEventLuckBoostedSpecies(): SpeciesId[] {
|
||||||
const ret: Species[] = [];
|
const ret: SpeciesId[] = [];
|
||||||
timedEvents
|
timedEvents
|
||||||
.filter(te => this.isActive(te))
|
.filter(te => this.isActive(te))
|
||||||
.map(te => {
|
.map(te => {
|
||||||
|
@ -3,14 +3,14 @@ import { globalScene } from "#app/global-scene";
|
|||||||
import { TextStyle, addTextObject } from "./text";
|
import { TextStyle, addTextObject } from "./text";
|
||||||
import { argbFromRgba } from "@material/material-color-utilities";
|
import { argbFromRgba } from "@material/material-color-utilities";
|
||||||
import { rgbHexToRgba } from "#app/utils/common";
|
import { rgbHexToRgba } from "#app/utils/common";
|
||||||
import type { Species } from "#enums/species";
|
import type { SpeciesId } from "#enums/species";
|
||||||
|
|
||||||
export default class CandyBar extends Phaser.GameObjects.Container {
|
export default class CandyBar extends Phaser.GameObjects.Container {
|
||||||
private bg: Phaser.GameObjects.NineSlice;
|
private bg: Phaser.GameObjects.NineSlice;
|
||||||
private candyIcon: Phaser.GameObjects.Sprite;
|
private candyIcon: Phaser.GameObjects.Sprite;
|
||||||
private candyOverlayIcon: Phaser.GameObjects.Sprite;
|
private candyOverlayIcon: Phaser.GameObjects.Sprite;
|
||||||
private countText: Phaser.GameObjects.Text;
|
private countText: Phaser.GameObjects.Text;
|
||||||
private speciesId: Species;
|
private speciesId: SpeciesId;
|
||||||
|
|
||||||
private tween: Phaser.Tweens.Tween | null;
|
private tween: Phaser.Tweens.Tween | null;
|
||||||
private autoHideTimer: NodeJS.Timeout | null;
|
private autoHideTimer: NodeJS.Timeout | null;
|
||||||
@ -47,7 +47,7 @@ export default class CandyBar extends Phaser.GameObjects.Container {
|
|||||||
this.shown = false;
|
this.shown = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
showStarterSpeciesCandy(starterSpeciesId: Species, count: number): Promise<void> {
|
showStarterSpeciesCandy(starterSpeciesId: SpeciesId, count: number): Promise<void> {
|
||||||
return new Promise<void>(resolve => {
|
return new Promise<void>(resolve => {
|
||||||
if (this.shown) {
|
if (this.shown) {
|
||||||
if (this.speciesId === starterSpeciesId) {
|
if (this.speciesId === starterSpeciesId) {
|
||||||
|
@ -10,7 +10,7 @@ import { globalScene } from "#app/global-scene";
|
|||||||
import { TerastallizeAccessModifier } from "#app/modifier/modifier";
|
import { TerastallizeAccessModifier } from "#app/modifier/modifier";
|
||||||
import { PokemonType } from "#enums/pokemon-type";
|
import { PokemonType } from "#enums/pokemon-type";
|
||||||
import { getTypeRgb } from "#app/data/type";
|
import { getTypeRgb } from "#app/data/type";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
|
|
||||||
export enum Command {
|
export enum Command {
|
||||||
FIGHT = 0,
|
FIGHT = 0,
|
||||||
@ -198,7 +198,7 @@ export default class CommandUiHandler extends UiHandler {
|
|||||||
const hasTeraMod = !!globalScene.getModifiers(TerastallizeAccessModifier).length;
|
const hasTeraMod = !!globalScene.getModifiers(TerastallizeAccessModifier).length;
|
||||||
const activePokemon = globalScene.getField()[this.fieldIndex];
|
const activePokemon = globalScene.getField()[this.fieldIndex];
|
||||||
const isBlockedForm =
|
const isBlockedForm =
|
||||||
activePokemon.isMega() || activePokemon.isMax() || activePokemon.hasSpecies(Species.NECROZMA, "ultra");
|
activePokemon.isMega() || activePokemon.isMax() || activePokemon.hasSpecies(SpeciesId.NECROZMA, "ultra");
|
||||||
const currentTeras = globalScene.arena.playerTerasUsed;
|
const currentTeras = globalScene.arena.playerTerasUsed;
|
||||||
const plannedTera =
|
const plannedTera =
|
||||||
globalScene.currentBattle.preTurnCommands[0]?.command === Command.TERA && this.fieldIndex > 0 ? 1 : 0;
|
globalScene.currentBattle.preTurnCommands[0]?.command === Command.TERA && this.fieldIndex > 0 ? 1 : 0;
|
||||||
|
@ -26,7 +26,7 @@ import MoveInfoOverlay from "#app/ui/move-info-overlay";
|
|||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import type BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext";
|
import type BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { getPokemonNameWithAffix } from "#app/messages";
|
import { getPokemonNameWithAffix } from "#app/messages";
|
||||||
import type { CommandPhase } from "#app/phases/command-phase";
|
import type { CommandPhase } from "#app/phases/command-phase";
|
||||||
import { SelectModifierPhase } from "#app/phases/select-modifier-phase";
|
import { SelectModifierPhase } from "#app/phases/select-modifier-phase";
|
||||||
@ -1578,7 +1578,7 @@ export default class PartyUiHandler extends MessageUiHandler {
|
|||||||
formChangeItemModifiers = formChangeItemModifiers.filter(
|
formChangeItemModifiers = formChangeItemModifiers.filter(
|
||||||
m => m.active || m.formChangeItem === FormChangeItem.ULTRANECROZIUM_Z,
|
m => m.active || m.formChangeItem === FormChangeItem.ULTRANECROZIUM_Z,
|
||||||
);
|
);
|
||||||
} else if (pokemon.species.speciesId === Species.NECROZMA) {
|
} else if (pokemon.species.speciesId === SpeciesId.NECROZMA) {
|
||||||
// no form is currently active. the user has to activate some form, except ULTRANECROZIUM_Z
|
// no form is currently active. the user has to activate some form, except ULTRANECROZIUM_Z
|
||||||
formChangeItemModifiers = formChangeItemModifiers.filter(
|
formChangeItemModifiers = formChangeItemModifiers.filter(
|
||||||
m => m.formChangeItem !== FormChangeItem.ULTRANECROZIUM_Z,
|
m => m.formChangeItem !== FormChangeItem.ULTRANECROZIUM_Z,
|
||||||
|
@ -37,7 +37,7 @@ import PokedexInfoOverlay from "#app/ui/pokedex-info-overlay";
|
|||||||
import { getEggTierForSpecies } from "#app/data/egg";
|
import { getEggTierForSpecies } from "#app/data/egg";
|
||||||
import { Device } from "#enums/devices";
|
import { Device } from "#enums/devices";
|
||||||
import type { MoveId } from "#enums/move-id";
|
import type { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { Button } from "#enums/buttons";
|
import { Button } from "#enums/buttons";
|
||||||
import { EggSourceType } from "#enums/egg-source-types";
|
import { EggSourceType } from "#enums/egg-source-types";
|
||||||
import {
|
import {
|
||||||
@ -203,7 +203,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler {
|
|||||||
private species: PokemonSpecies;
|
private species: PokemonSpecies;
|
||||||
private starterId: number;
|
private starterId: number;
|
||||||
private formIndex: number;
|
private formIndex: number;
|
||||||
private speciesLoaded: Map<Species, boolean> = new Map<Species, boolean>();
|
private speciesLoaded: Map<SpeciesId, boolean> = new Map<SpeciesId, boolean>();
|
||||||
private levelMoves: LevelMoves;
|
private levelMoves: LevelMoves;
|
||||||
private eggMoves: MoveId[] = [];
|
private eggMoves: MoveId[] = [];
|
||||||
private hasEggMoves: boolean[] = [];
|
private hasEggMoves: boolean[] = [];
|
||||||
@ -256,7 +256,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler {
|
|||||||
protected scale = 0.1666666667;
|
protected scale = 0.1666666667;
|
||||||
private menuDescriptions: string[];
|
private menuDescriptions: string[];
|
||||||
private isFormGender: boolean;
|
private isFormGender: boolean;
|
||||||
private filteredIndices: Species[] | null = null;
|
private filteredIndices: SpeciesId[] | null = null;
|
||||||
|
|
||||||
private availableVariants: number;
|
private availableVariants: number;
|
||||||
private unlockedVariants: boolean[];
|
private unlockedVariants: boolean[];
|
||||||
@ -863,7 +863,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler {
|
|||||||
|
|
||||||
// Function to ensure that forms appear in the appropriate biome and tod
|
// Function to ensure that forms appear in the appropriate biome and tod
|
||||||
sanitizeBiomes(biomes: BiomeTierTod[], speciesId: number): BiomeTierTod[] {
|
sanitizeBiomes(biomes: BiomeTierTod[], speciesId: number): BiomeTierTod[] {
|
||||||
if (speciesId === Species.BURMY || speciesId === Species.WORMADAM) {
|
if (speciesId === SpeciesId.BURMY || speciesId === SpeciesId.WORMADAM) {
|
||||||
return biomes.filter(b => {
|
return biomes.filter(b => {
|
||||||
const formIndex = (() => {
|
const formIndex = (() => {
|
||||||
switch (b.biome) {
|
switch (b.biome) {
|
||||||
@ -878,7 +878,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler {
|
|||||||
return this.formIndex === formIndex;
|
return this.formIndex === formIndex;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (speciesId === Species.ROTOM) {
|
if (speciesId === SpeciesId.ROTOM) {
|
||||||
return biomes.filter(b => {
|
return biomes.filter(b => {
|
||||||
const formIndex = (() => {
|
const formIndex = (() => {
|
||||||
switch (b.biome) {
|
switch (b.biome) {
|
||||||
@ -899,7 +899,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler {
|
|||||||
return this.formIndex === formIndex;
|
return this.formIndex === formIndex;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (speciesId === Species.LYCANROC) {
|
if (speciesId === SpeciesId.LYCANROC) {
|
||||||
return biomes.filter(b => {
|
return biomes.filter(b => {
|
||||||
const formIndex = (() => {
|
const formIndex = (() => {
|
||||||
switch (b.tod[0]) {
|
switch (b.tod[0]) {
|
||||||
@ -1089,11 +1089,11 @@ export default class PokedexPageUiHandler extends MessageUiHandler {
|
|||||||
* @returns the id of the corresponding starter
|
* @returns the id of the corresponding starter
|
||||||
*/
|
*/
|
||||||
getStarterSpeciesId(speciesId): number {
|
getStarterSpeciesId(speciesId): number {
|
||||||
if (speciesId === Species.PIKACHU) {
|
if (speciesId === SpeciesId.PIKACHU) {
|
||||||
if ([0, 1, 8].includes(this.formIndex)) {
|
if ([0, 1, 8].includes(this.formIndex)) {
|
||||||
return Species.PICHU;
|
return SpeciesId.PICHU;
|
||||||
}
|
}
|
||||||
return Species.PIKACHU;
|
return SpeciesId.PIKACHU;
|
||||||
}
|
}
|
||||||
if (speciesStarterCosts.hasOwnProperty(speciesId)) {
|
if (speciesStarterCosts.hasOwnProperty(speciesId)) {
|
||||||
return speciesId;
|
return speciesId;
|
||||||
@ -2581,7 +2581,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler {
|
|||||||
|
|
||||||
this.pokemonUncaughtText.setVisible(false);
|
this.pokemonUncaughtText.setVisible(false);
|
||||||
this.pokemonCaughtCountText.setText(`${this.speciesStarterDexEntry?.caughtCount}`);
|
this.pokemonCaughtCountText.setText(`${this.speciesStarterDexEntry?.caughtCount}`);
|
||||||
if (species.speciesId === Species.MANAPHY || species.speciesId === Species.PHIONE) {
|
if (species.speciesId === SpeciesId.MANAPHY || species.speciesId === SpeciesId.PHIONE) {
|
||||||
this.pokemonHatchedIcon.setFrame("manaphy");
|
this.pokemonHatchedIcon.setFrame("manaphy");
|
||||||
} else {
|
} else {
|
||||||
this.pokemonHatchedIcon.setFrame(getEggTierForSpecies(species));
|
this.pokemonHatchedIcon.setFrame(getEggTierForSpecies(species));
|
||||||
@ -2614,7 +2614,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler {
|
|||||||
this.pokemonCandyIcon.setTint(argbFromRgba(rgbHexToRgba(colorScheme[0])));
|
this.pokemonCandyIcon.setTint(argbFromRgba(rgbHexToRgba(colorScheme[0])));
|
||||||
this.pokemonCandyOverlayIcon.setTint(argbFromRgba(rgbHexToRgba(colorScheme[1])));
|
this.pokemonCandyOverlayIcon.setTint(argbFromRgba(rgbHexToRgba(colorScheme[1])));
|
||||||
this.pokemonCandyCountText.setText(
|
this.pokemonCandyCountText.setText(
|
||||||
`x${species.speciesId === Species.PIKACHU ? 0 : globalScene.gameData.starterData[this.starterId].candyCount}`,
|
`x${species.speciesId === SpeciesId.PIKACHU ? 0 : globalScene.gameData.starterData[this.starterId].candyCount}`,
|
||||||
);
|
);
|
||||||
this.pokemonCandyContainer.setVisible(true);
|
this.pokemonCandyContainer.setVisible(true);
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ import { TextStyle, addTextObject } from "#app/ui/text";
|
|||||||
import { UiMode } from "#enums/ui-mode";
|
import { UiMode } from "#enums/ui-mode";
|
||||||
import { SettingKeyboard } from "#app/system/settings/settings-keyboard";
|
import { SettingKeyboard } from "#app/system/settings/settings-keyboard";
|
||||||
import { Passive as PassiveAttr } from "#enums/passive";
|
import { Passive as PassiveAttr } from "#enums/passive";
|
||||||
import type { Species } from "#enums/species";
|
import type { SpeciesId } from "#enums/species";
|
||||||
import { Button } from "#enums/buttons";
|
import { Button } from "#enums/buttons";
|
||||||
import { DropDown, DropDownLabel, DropDownOption, DropDownState, DropDownType, SortCriteria } from "#app/ui/dropdown";
|
import { DropDown, DropDownLabel, DropDownOption, DropDownState, DropDownType, SortCriteria } from "#app/ui/dropdown";
|
||||||
import { PokedexMonContainer } from "#app/ui/pokedex-mon-container";
|
import { PokedexMonContainer } from "#app/ui/pokedex-mon-container";
|
||||||
@ -175,7 +175,7 @@ export default class PokedexUiHandler extends MessageUiHandler {
|
|||||||
private oldCursor = -1;
|
private oldCursor = -1;
|
||||||
|
|
||||||
private lastSpecies: PokemonSpecies;
|
private lastSpecies: PokemonSpecies;
|
||||||
private speciesLoaded: Map<Species, boolean> = new Map<Species, boolean>();
|
private speciesLoaded: Map<SpeciesId, boolean> = new Map<SpeciesId, boolean>();
|
||||||
private pokerusSpecies: PokemonSpecies[] = [];
|
private pokerusSpecies: PokemonSpecies[] = [];
|
||||||
private speciesStarterDexEntry: DexEntry | null;
|
private speciesStarterDexEntry: DexEntry | null;
|
||||||
|
|
||||||
@ -227,7 +227,7 @@ export default class PokedexUiHandler extends MessageUiHandler {
|
|||||||
private showFormTrayIconElement: Phaser.GameObjects.Sprite;
|
private showFormTrayIconElement: Phaser.GameObjects.Sprite;
|
||||||
private showFormTrayLabel: Phaser.GameObjects.Text;
|
private showFormTrayLabel: Phaser.GameObjects.Text;
|
||||||
private canShowFormTray: boolean;
|
private canShowFormTray: boolean;
|
||||||
private filteredIndices: Species[];
|
private filteredIndices: SpeciesId[];
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
super(UiMode.POKEDEX);
|
super(UiMode.POKEDEX);
|
||||||
|
@ -5,7 +5,7 @@ import { rgbHexToRgba, padInt } from "#app/utils/common";
|
|||||||
import { TextStyle, addTextObject } from "#app/ui/text";
|
import { TextStyle, addTextObject } from "#app/ui/text";
|
||||||
import { speciesEggMoves } from "#app/data/balance/egg-moves";
|
import { speciesEggMoves } from "#app/data/balance/egg-moves";
|
||||||
import { allMoves } from "#app/data/data-lists";
|
import { allMoves } from "#app/data/data-lists";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { getEggTierForSpecies } from "#app/data/egg";
|
import { getEggTierForSpecies } from "#app/data/egg";
|
||||||
import { starterColors } from "#app/global-vars/starter-colors";
|
import { starterColors } from "#app/global-vars/starter-colors";
|
||||||
import { globalScene } from "#app/global-scene";
|
import { globalScene } from "#app/global-scene";
|
||||||
@ -182,7 +182,7 @@ export default class PokemonHatchInfoContainer extends PokemonInfoContainer {
|
|||||||
// will always have at least one egg move
|
// will always have at least one egg move
|
||||||
this.pokemonEggMovesContainer.setVisible(true);
|
this.pokemonEggMovesContainer.setVisible(true);
|
||||||
|
|
||||||
if (species.speciesId === Species.MANAPHY || species.speciesId === Species.PHIONE) {
|
if (species.speciesId === SpeciesId.MANAPHY || species.speciesId === SpeciesId.PHIONE) {
|
||||||
this.pokemonHatchedIcon.setFrame("manaphy");
|
this.pokemonHatchedIcon.setFrame("manaphy");
|
||||||
} else {
|
} else {
|
||||||
this.pokemonHatchedIcon.setFrame(getEggTierForSpecies(species));
|
this.pokemonHatchedIcon.setFrame(getEggTierForSpecies(species));
|
||||||
|
@ -21,7 +21,7 @@ import { getNatureStatMultiplier, getNatureName } from "../data/nature";
|
|||||||
import { getVariantTint } from "#app/sprites/variant";
|
import { getVariantTint } from "#app/sprites/variant";
|
||||||
// biome-ignore lint/style/noNamespaceImport: See `src/system/game-data.ts`
|
// biome-ignore lint/style/noNamespaceImport: See `src/system/game-data.ts`
|
||||||
import * as Modifier from "#app/modifier/modifier";
|
import * as Modifier from "#app/modifier/modifier";
|
||||||
import type { Species } from "#enums/species";
|
import type { SpeciesId } from "#enums/species";
|
||||||
import { PlayerGender } from "#enums/player-gender";
|
import { PlayerGender } from "#enums/player-gender";
|
||||||
import { SettingKeyboard } from "#app/system/settings/settings-keyboard";
|
import { SettingKeyboard } from "#app/system/settings/settings-keyboard";
|
||||||
import { getBiomeName } from "#app/data/balance/biomes";
|
import { getBiomeName } from "#app/data/balance/biomes";
|
||||||
@ -1025,7 +1025,7 @@ export default class RunInfoUiHandler extends UiHandler {
|
|||||||
ignoreTimeTint: true,
|
ignoreTimeTint: true,
|
||||||
});
|
});
|
||||||
this.hallofFameContainer.add(pokemonSprite);
|
this.hallofFameContainer.add(pokemonSprite);
|
||||||
const speciesLoaded: Map<Species, boolean> = new Map<Species, boolean>();
|
const speciesLoaded: Map<SpeciesId, boolean> = new Map<SpeciesId, boolean>();
|
||||||
speciesLoaded.set(id, false);
|
speciesLoaded.set(id, false);
|
||||||
|
|
||||||
const female = pkmn.gender === 1;
|
const female = pkmn.gender === 1;
|
||||||
|
@ -48,7 +48,7 @@ import MoveInfoOverlay from "#app/ui/move-info-overlay";
|
|||||||
import { getEggTierForSpecies } from "#app/data/egg";
|
import { getEggTierForSpecies } from "#app/data/egg";
|
||||||
import { Device } from "#enums/devices";
|
import { Device } from "#enums/devices";
|
||||||
import type { MoveId } from "#enums/move-id";
|
import type { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { Button } from "#enums/buttons";
|
import { Button } from "#enums/buttons";
|
||||||
import { EggSourceType } from "#enums/egg-source-types";
|
import { EggSourceType } from "#enums/egg-source-types";
|
||||||
import { DropDown, DropDownLabel, DropDownOption, DropDownState, DropDownType, SortCriteria } from "#app/ui/dropdown";
|
import { DropDown, DropDownLabel, DropDownOption, DropDownState, DropDownType, SortCriteria } from "#app/ui/dropdown";
|
||||||
@ -356,7 +356,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
|||||||
|
|
||||||
private allSpecies: PokemonSpecies[] = [];
|
private allSpecies: PokemonSpecies[] = [];
|
||||||
private lastSpecies: PokemonSpecies;
|
private lastSpecies: PokemonSpecies;
|
||||||
private speciesLoaded: Map<Species, boolean> = new Map<Species, boolean>();
|
private speciesLoaded: Map<SpeciesId, boolean> = new Map<SpeciesId, boolean>();
|
||||||
public starterSpecies: PokemonSpecies[] = [];
|
public starterSpecies: PokemonSpecies[] = [];
|
||||||
private pokerusSpecies: PokemonSpecies[] = [];
|
private pokerusSpecies: PokemonSpecies[] = [];
|
||||||
private starterAttr: bigint[] = [];
|
private starterAttr: bigint[] = [];
|
||||||
@ -795,7 +795,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
|||||||
this.randomCursorObj.setOrigin(0, 0);
|
this.randomCursorObj.setOrigin(0, 0);
|
||||||
this.starterSelectContainer.add(this.randomCursorObj);
|
this.starterSelectContainer.add(this.randomCursorObj);
|
||||||
|
|
||||||
const starterSpecies: Species[] = [];
|
const starterSpecies: SpeciesId[] = [];
|
||||||
|
|
||||||
const starterBoxContainer = globalScene.add.container(speciesContainerX + 6, 9); //115
|
const starterBoxContainer = globalScene.add.container(speciesContainerX + 6, 9); //115
|
||||||
|
|
||||||
@ -3537,7 +3537,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
|||||||
this.pokemonPassiveLabelText.setVisible(true);
|
this.pokemonPassiveLabelText.setVisible(true);
|
||||||
this.pokemonNatureLabelText.setVisible(true);
|
this.pokemonNatureLabelText.setVisible(true);
|
||||||
this.pokemonCaughtCountText.setText(`${this.speciesStarterDexEntry.caughtCount}`);
|
this.pokemonCaughtCountText.setText(`${this.speciesStarterDexEntry.caughtCount}`);
|
||||||
if (species.speciesId === Species.MANAPHY || species.speciesId === Species.PHIONE) {
|
if (species.speciesId === SpeciesId.MANAPHY || species.speciesId === SpeciesId.PHIONE) {
|
||||||
this.pokemonHatchedIcon.setFrame("manaphy");
|
this.pokemonHatchedIcon.setFrame("manaphy");
|
||||||
} else {
|
} else {
|
||||||
this.pokemonHatchedIcon.setFrame(getEggTierForSpecies(species));
|
this.pokemonHatchedIcon.setFrame(getEggTierForSpecies(species));
|
||||||
|
@ -8,7 +8,7 @@ import { TimedEventDisplay } from "#app/timed-event-manager";
|
|||||||
import { version } from "../../package.json";
|
import { version } from "../../package.json";
|
||||||
import { pokerogueApi } from "#app/plugins/api/pokerogue-api";
|
import { pokerogueApi } from "#app/plugins/api/pokerogue-api";
|
||||||
import { globalScene } from "#app/global-scene";
|
import { globalScene } from "#app/global-scene";
|
||||||
import type { Species } from "#enums/species";
|
import type { SpeciesId } from "#enums/species";
|
||||||
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
||||||
import { PlayerGender } from "#enums/player-gender";
|
import { PlayerGender } from "#enums/player-gender";
|
||||||
import { timedEventManager } from "#app/global-event-manager";
|
import { timedEventManager } from "#app/global-event-manager";
|
||||||
@ -105,7 +105,7 @@ export default class TitleUiHandler extends OptionSelectUiHandler {
|
|||||||
/** Used solely to display a random Pokémon name in a splash message. */
|
/** Used solely to display a random Pokémon name in a splash message. */
|
||||||
randomPokemon(): void {
|
randomPokemon(): void {
|
||||||
const rand = randInt(1025, 1);
|
const rand = randInt(1025, 1);
|
||||||
const pokemon = getPokemonSpecies(rand as Species);
|
const pokemon = getPokemonSpecies(rand as SpeciesId);
|
||||||
if (
|
if (
|
||||||
this.splashMessage === "splashMessages:underratedPokemon" ||
|
this.splashMessage === "splashMessages:underratedPokemon" ||
|
||||||
this.splashMessage === "splashMessages:dontTalkAboutThePokemonIncident" ||
|
this.splashMessage === "splashMessages:dontTalkAboutThePokemonIncident" ||
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { Stat } from "#app/enums/stat";
|
import { Stat } from "#app/enums/stat";
|
||||||
import { AbilityId } from "#enums/ability-id";
|
import { AbilityId } from "#enums/ability-id";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import GameManager from "#test/testUtils/gameManager";
|
import GameManager from "#test/testUtils/gameManager";
|
||||||
import Phaser from "phaser";
|
import Phaser from "phaser";
|
||||||
import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest";
|
import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest";
|
||||||
@ -33,7 +33,7 @@ describe("Ability Duplication", () => {
|
|||||||
it("huge power should only be applied once if both normal and passive", async () => {
|
it("huge power should only be applied once if both normal and passive", async () => {
|
||||||
game.override.passiveAbility(AbilityId.HUGE_POWER);
|
game.override.passiveAbility(AbilityId.HUGE_POWER);
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.MAGIKARP]);
|
await game.classicMode.startBattle([SpeciesId.MAGIKARP]);
|
||||||
|
|
||||||
const [magikarp] = game.scene.getPlayerField();
|
const [magikarp] = game.scene.getPlayerField();
|
||||||
const magikarpAttack = magikarp.getEffectiveStat(Stat.ATK);
|
const magikarpAttack = magikarp.getEffectiveStat(Stat.ATK);
|
||||||
@ -46,7 +46,7 @@ describe("Ability Duplication", () => {
|
|||||||
it("huge power should stack with pure power", async () => {
|
it("huge power should stack with pure power", async () => {
|
||||||
game.override.passiveAbility(AbilityId.PURE_POWER);
|
game.override.passiveAbility(AbilityId.PURE_POWER);
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.MAGIKARP]);
|
await game.classicMode.startBattle([SpeciesId.MAGIKARP]);
|
||||||
|
|
||||||
const [magikarp] = game.scene.getPlayerField();
|
const [magikarp] = game.scene.getPlayerField();
|
||||||
const magikarpAttack = magikarp.getEffectiveStat(Stat.ATK);
|
const magikarpAttack = magikarp.getEffectiveStat(Stat.ATK);
|
||||||
|
@ -4,7 +4,7 @@ import { TurnInitPhase } from "#app/phases/turn-init-phase";
|
|||||||
import i18next from "#app/plugins/i18n";
|
import i18next from "#app/plugins/i18n";
|
||||||
import { UiMode } from "#enums/ui-mode";
|
import { UiMode } from "#enums/ui-mode";
|
||||||
import { AbilityId } from "#enums/ability-id";
|
import { AbilityId } from "#enums/ability-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import GameManager from "#test/testUtils/gameManager";
|
import GameManager from "#test/testUtils/gameManager";
|
||||||
import Phaser from "phaser";
|
import Phaser from "phaser";
|
||||||
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
||||||
@ -28,7 +28,7 @@ describe("Ability Timing", () => {
|
|||||||
|
|
||||||
game.override
|
game.override
|
||||||
.battleStyle("single")
|
.battleStyle("single")
|
||||||
.enemySpecies(Species.MAGIKARP)
|
.enemySpecies(SpeciesId.MAGIKARP)
|
||||||
.enemyAbility(AbilityId.INTIMIDATE)
|
.enemyAbility(AbilityId.INTIMIDATE)
|
||||||
.ability(AbilityId.BALL_FETCH);
|
.ability(AbilityId.BALL_FETCH);
|
||||||
vi.spyOn(i18next, "t");
|
vi.spyOn(i18next, "t");
|
||||||
@ -36,7 +36,7 @@ describe("Ability Timing", () => {
|
|||||||
|
|
||||||
it("should trigger after switch check", async () => {
|
it("should trigger after switch check", async () => {
|
||||||
game.settings.battleStyle = BattleStyle.SWITCH;
|
game.settings.battleStyle = BattleStyle.SWITCH;
|
||||||
await game.classicMode.runToSummon([Species.EEVEE, Species.FEEBAS]);
|
await game.classicMode.runToSummon([SpeciesId.EEVEE, SpeciesId.FEEBAS]);
|
||||||
|
|
||||||
game.onNextPrompt(
|
game.onNextPrompt(
|
||||||
"CheckSwitchPhase",
|
"CheckSwitchPhase",
|
||||||
|
@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle";
|
|||||||
import { isBetween, toDmgValue } from "#app/utils/common";
|
import { isBetween, toDmgValue } from "#app/utils/common";
|
||||||
import { AbilityId } from "#enums/ability-id";
|
import { AbilityId } from "#enums/ability-id";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import GameManager from "#test/testUtils/gameManager";
|
import GameManager from "#test/testUtils/gameManager";
|
||||||
import Phaser from "phaser";
|
import Phaser from "phaser";
|
||||||
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
||||||
@ -30,13 +30,13 @@ describe("Abilities - Analytic", () => {
|
|||||||
.disableCrits()
|
.disableCrits()
|
||||||
.startingLevel(200)
|
.startingLevel(200)
|
||||||
.enemyLevel(200)
|
.enemyLevel(200)
|
||||||
.enemySpecies(Species.SNORLAX)
|
.enemySpecies(SpeciesId.SNORLAX)
|
||||||
.enemyAbility(AbilityId.BALL_FETCH)
|
.enemyAbility(AbilityId.BALL_FETCH)
|
||||||
.enemyMoveset(MoveId.SPLASH);
|
.enemyMoveset(MoveId.SPLASH);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should increase damage if the user moves last", async () => {
|
it("should increase damage if the user moves last", async () => {
|
||||||
await game.classicMode.startBattle([Species.ARCEUS]);
|
await game.classicMode.startBattle([SpeciesId.ARCEUS]);
|
||||||
|
|
||||||
const enemy = game.scene.getEnemyPokemon()!;
|
const enemy = game.scene.getEnemyPokemon()!;
|
||||||
|
|
||||||
@ -54,7 +54,7 @@ describe("Abilities - Analytic", () => {
|
|||||||
|
|
||||||
it("should increase damage only if the user moves last in doubles", async () => {
|
it("should increase damage only if the user moves last in doubles", async () => {
|
||||||
game.override.battleStyle("double");
|
game.override.battleStyle("double");
|
||||||
await game.classicMode.startBattle([Species.GENGAR, Species.SHUCKLE]);
|
await game.classicMode.startBattle([SpeciesId.GENGAR, SpeciesId.SHUCKLE]);
|
||||||
|
|
||||||
const [enemy] = game.scene.getEnemyField();
|
const [enemy] = game.scene.getEnemyField();
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { allAbilities } from "#app/data/data-lists";
|
import { allAbilities } from "#app/data/data-lists";
|
||||||
import { AbilityId } from "#enums/ability-id";
|
import { AbilityId } from "#enums/ability-id";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import GameManager from "#test/testUtils/gameManager";
|
import GameManager from "#test/testUtils/gameManager";
|
||||||
import Phaser from "phaser";
|
import Phaser from "phaser";
|
||||||
import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest";
|
import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest";
|
||||||
@ -25,7 +25,7 @@ describe("Abilities - Arena Trap", () => {
|
|||||||
game.override
|
game.override
|
||||||
.moveset(MoveId.SPLASH)
|
.moveset(MoveId.SPLASH)
|
||||||
.ability(AbilityId.ARENA_TRAP)
|
.ability(AbilityId.ARENA_TRAP)
|
||||||
.enemySpecies(Species.RALTS)
|
.enemySpecies(SpeciesId.RALTS)
|
||||||
.enemyAbility(AbilityId.BALL_FETCH)
|
.enemyAbility(AbilityId.BALL_FETCH)
|
||||||
.enemyMoveset(MoveId.TELEPORT);
|
.enemyMoveset(MoveId.TELEPORT);
|
||||||
});
|
});
|
||||||
@ -65,7 +65,7 @@ describe("Abilities - Arena Trap", () => {
|
|||||||
.enemyMoveset(MoveId.SPLASH)
|
.enemyMoveset(MoveId.SPLASH)
|
||||||
.moveset([MoveId.ROAR, MoveId.SPLASH])
|
.moveset([MoveId.ROAR, MoveId.SPLASH])
|
||||||
.ability(AbilityId.BALL_FETCH);
|
.ability(AbilityId.BALL_FETCH);
|
||||||
await game.classicMode.startBattle([Species.MAGIKARP, Species.SUDOWOODO, Species.LUNATONE]);
|
await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.SUDOWOODO, SpeciesId.LUNATONE]);
|
||||||
|
|
||||||
const [enemy1, enemy2] = game.scene.getEnemyField();
|
const [enemy1, enemy2] = game.scene.getEnemyField();
|
||||||
const [player1, player2] = game.scene.getPlayerField();
|
const [player1, player2] = game.scene.getPlayerField();
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { AbilityId } from "#enums/ability-id";
|
import { AbilityId } from "#enums/ability-id";
|
||||||
import GameManager from "#test/testUtils/gameManager";
|
import GameManager from "#test/testUtils/gameManager";
|
||||||
import Phaser from "phaser";
|
import Phaser from "phaser";
|
||||||
@ -28,13 +28,13 @@ describe("Moves - Aroma Veil", () => {
|
|||||||
.battleStyle("double")
|
.battleStyle("double")
|
||||||
.enemyAbility(AbilityId.BALL_FETCH)
|
.enemyAbility(AbilityId.BALL_FETCH)
|
||||||
.enemyMoveset([MoveId.HEAL_BLOCK, MoveId.IMPRISON, MoveId.SPLASH])
|
.enemyMoveset([MoveId.HEAL_BLOCK, MoveId.IMPRISON, MoveId.SPLASH])
|
||||||
.enemySpecies(Species.SHUCKLE)
|
.enemySpecies(SpeciesId.SHUCKLE)
|
||||||
.ability(AbilityId.AROMA_VEIL)
|
.ability(AbilityId.AROMA_VEIL)
|
||||||
.moveset([MoveId.GROWL]);
|
.moveset([MoveId.GROWL]);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Aroma Veil protects the Pokemon's side against most Move Restriction Battler Tags", async () => {
|
it("Aroma Veil protects the Pokemon's side against most Move Restriction Battler Tags", async () => {
|
||||||
await game.classicMode.startBattle([Species.REGIELEKI, Species.BULBASAUR]);
|
await game.classicMode.startBattle([SpeciesId.REGIELEKI, SpeciesId.BULBASAUR]);
|
||||||
|
|
||||||
const party = game.scene.getPlayerParty()! as PlayerPokemon[];
|
const party = game.scene.getPlayerParty()! as PlayerPokemon[];
|
||||||
|
|
||||||
@ -48,7 +48,7 @@ describe("Moves - Aroma Veil", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("Aroma Veil does not protect against Imprison", async () => {
|
it("Aroma Veil does not protect against Imprison", async () => {
|
||||||
await game.classicMode.startBattle([Species.REGIELEKI, Species.BULBASAUR]);
|
await game.classicMode.startBattle([SpeciesId.REGIELEKI, SpeciesId.BULBASAUR]);
|
||||||
|
|
||||||
const party = game.scene.getPlayerParty()! as PlayerPokemon[];
|
const party = game.scene.getPlayerParty()! as PlayerPokemon[];
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { allMoves } from "#app/data/data-lists";
|
import { allMoves } from "#app/data/data-lists";
|
||||||
import { AbilityId } from "#enums/ability-id";
|
import { AbilityId } from "#enums/ability-id";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import GameManager from "#test/testUtils/gameManager";
|
import GameManager from "#test/testUtils/gameManager";
|
||||||
import Phaser from "phaser";
|
import Phaser from "phaser";
|
||||||
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
||||||
@ -29,7 +29,7 @@ describe("Abilities - Aura Break", () => {
|
|||||||
.moveset([MoveId.MOONBLAST, MoveId.DARK_PULSE])
|
.moveset([MoveId.MOONBLAST, MoveId.DARK_PULSE])
|
||||||
.enemyMoveset(MoveId.SPLASH)
|
.enemyMoveset(MoveId.SPLASH)
|
||||||
.enemyAbility(AbilityId.AURA_BREAK)
|
.enemyAbility(AbilityId.AURA_BREAK)
|
||||||
.enemySpecies(Species.SHUCKLE);
|
.enemySpecies(SpeciesId.SHUCKLE);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("reverses the effect of Fairy Aura", async () => {
|
it("reverses the effect of Fairy Aura", async () => {
|
||||||
@ -39,7 +39,7 @@ describe("Abilities - Aura Break", () => {
|
|||||||
game.override.ability(AbilityId.FAIRY_AURA);
|
game.override.ability(AbilityId.FAIRY_AURA);
|
||||||
vi.spyOn(moveToCheck, "calculateBattlePower");
|
vi.spyOn(moveToCheck, "calculateBattlePower");
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.PIKACHU]);
|
await game.classicMode.startBattle([SpeciesId.PIKACHU]);
|
||||||
game.move.select(MoveId.MOONBLAST);
|
game.move.select(MoveId.MOONBLAST);
|
||||||
await game.phaseInterceptor.to("MoveEffectPhase");
|
await game.phaseInterceptor.to("MoveEffectPhase");
|
||||||
|
|
||||||
@ -53,7 +53,7 @@ describe("Abilities - Aura Break", () => {
|
|||||||
game.override.ability(AbilityId.DARK_AURA);
|
game.override.ability(AbilityId.DARK_AURA);
|
||||||
vi.spyOn(moveToCheck, "calculateBattlePower");
|
vi.spyOn(moveToCheck, "calculateBattlePower");
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.PIKACHU]);
|
await game.classicMode.startBattle([SpeciesId.PIKACHU]);
|
||||||
game.move.select(MoveId.DARK_PULSE);
|
game.move.select(MoveId.DARK_PULSE);
|
||||||
await game.phaseInterceptor.to("MoveEffectPhase");
|
await game.phaseInterceptor.to("MoveEffectPhase");
|
||||||
|
|
||||||
@ -67,7 +67,7 @@ describe("Abilities - Aura Break", () => {
|
|||||||
game.override.ability(AbilityId.BALL_FETCH);
|
game.override.ability(AbilityId.BALL_FETCH);
|
||||||
vi.spyOn(moveToCheck, "calculateBattlePower");
|
vi.spyOn(moveToCheck, "calculateBattlePower");
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.PIKACHU]);
|
await game.classicMode.startBattle([SpeciesId.PIKACHU]);
|
||||||
game.move.select(MoveId.MOONBLAST);
|
game.move.select(MoveId.MOONBLAST);
|
||||||
await game.phaseInterceptor.to("MoveEffectPhase");
|
await game.phaseInterceptor.to("MoveEffectPhase");
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ import { AbilityId } from "#enums/ability-id";
|
|||||||
import { MoveEffectPhase } from "#app/phases/move-effect-phase";
|
import { MoveEffectPhase } from "#app/phases/move-effect-phase";
|
||||||
import { TurnEndPhase } from "#app/phases/turn-end-phase";
|
import { TurnEndPhase } from "#app/phases/turn-end-phase";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import GameManager from "#test/testUtils/gameManager";
|
import GameManager from "#test/testUtils/gameManager";
|
||||||
import Phaser from "phaser";
|
import Phaser from "phaser";
|
||||||
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
||||||
@ -27,7 +27,7 @@ describe("Abilities - Battery", () => {
|
|||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
game.override.battleStyle("double");
|
game.override.battleStyle("double");
|
||||||
game.override.enemySpecies(Species.SHUCKLE);
|
game.override.enemySpecies(SpeciesId.SHUCKLE);
|
||||||
game.override.enemyAbility(AbilityId.BALL_FETCH);
|
game.override.enemyAbility(AbilityId.BALL_FETCH);
|
||||||
game.override.moveset([MoveId.TACKLE, MoveId.BREAKING_SWIPE, MoveId.SPLASH, MoveId.DAZZLING_GLEAM]);
|
game.override.moveset([MoveId.TACKLE, MoveId.BREAKING_SWIPE, MoveId.SPLASH, MoveId.DAZZLING_GLEAM]);
|
||||||
game.override.enemyMoveset(MoveId.SPLASH);
|
game.override.enemyMoveset(MoveId.SPLASH);
|
||||||
@ -39,7 +39,7 @@ describe("Abilities - Battery", () => {
|
|||||||
|
|
||||||
vi.spyOn(moveToCheck, "calculateBattlePower");
|
vi.spyOn(moveToCheck, "calculateBattlePower");
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.PIKACHU, Species.CHARJABUG]);
|
await game.classicMode.startBattle([SpeciesId.PIKACHU, SpeciesId.CHARJABUG]);
|
||||||
|
|
||||||
game.move.select(MoveId.DAZZLING_GLEAM);
|
game.move.select(MoveId.DAZZLING_GLEAM);
|
||||||
game.move.select(MoveId.SPLASH, 1);
|
game.move.select(MoveId.SPLASH, 1);
|
||||||
@ -54,7 +54,7 @@ describe("Abilities - Battery", () => {
|
|||||||
|
|
||||||
vi.spyOn(moveToCheck, "calculateBattlePower");
|
vi.spyOn(moveToCheck, "calculateBattlePower");
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.PIKACHU, Species.CHARJABUG]);
|
await game.classicMode.startBattle([SpeciesId.PIKACHU, SpeciesId.CHARJABUG]);
|
||||||
|
|
||||||
game.move.select(MoveId.BREAKING_SWIPE);
|
game.move.select(MoveId.BREAKING_SWIPE);
|
||||||
game.move.select(MoveId.SPLASH, 1);
|
game.move.select(MoveId.SPLASH, 1);
|
||||||
@ -69,7 +69,7 @@ describe("Abilities - Battery", () => {
|
|||||||
|
|
||||||
vi.spyOn(moveToCheck, "calculateBattlePower");
|
vi.spyOn(moveToCheck, "calculateBattlePower");
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.CHARJABUG, Species.PIKACHU]);
|
await game.classicMode.startBattle([SpeciesId.CHARJABUG, SpeciesId.PIKACHU]);
|
||||||
|
|
||||||
game.move.select(MoveId.DAZZLING_GLEAM);
|
game.move.select(MoveId.DAZZLING_GLEAM);
|
||||||
game.move.select(MoveId.SPLASH, 1);
|
game.move.select(MoveId.SPLASH, 1);
|
||||||
|
@ -4,7 +4,7 @@ import { MultiHitType } from "#enums/MultiHitType";
|
|||||||
import { Status } from "#app/data/status-effect";
|
import { Status } from "#app/data/status-effect";
|
||||||
import { AbilityId } from "#enums/ability-id";
|
import { AbilityId } from "#enums/ability-id";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { StatusEffect } from "#enums/status-effect";
|
import { StatusEffect } from "#enums/status-effect";
|
||||||
import GameManager from "#test/testUtils/gameManager";
|
import GameManager from "#test/testUtils/gameManager";
|
||||||
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
||||||
@ -32,16 +32,16 @@ describe("Abilities - BATTLE BOND", () => {
|
|||||||
.battleStyle("single")
|
.battleStyle("single")
|
||||||
.startingWave(4) // Leads to arena reset on Wave 5 trainer battle
|
.startingWave(4) // Leads to arena reset on Wave 5 trainer battle
|
||||||
.ability(AbilityId.BATTLE_BOND)
|
.ability(AbilityId.BATTLE_BOND)
|
||||||
.starterForms({ [Species.GRENINJA]: ashForm })
|
.starterForms({ [SpeciesId.GRENINJA]: ashForm })
|
||||||
.moveset([MoveId.SPLASH, MoveId.WATER_SHURIKEN])
|
.moveset([MoveId.SPLASH, MoveId.WATER_SHURIKEN])
|
||||||
.enemySpecies(Species.BULBASAUR)
|
.enemySpecies(SpeciesId.BULBASAUR)
|
||||||
.enemyMoveset(MoveId.SPLASH)
|
.enemyMoveset(MoveId.SPLASH)
|
||||||
.startingLevel(100) // Avoid levelling up
|
.startingLevel(100) // Avoid levelling up
|
||||||
.enemyLevel(1000); // Avoid opponent dying before `doKillOpponents()`
|
.enemyLevel(1000); // Avoid opponent dying before `doKillOpponents()`
|
||||||
});
|
});
|
||||||
|
|
||||||
it("check if fainted pokemon switches to base form on arena reset", async () => {
|
it("check if fainted pokemon switches to base form on arena reset", async () => {
|
||||||
await game.classicMode.startBattle([Species.MAGIKARP, Species.GRENINJA]);
|
await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.GRENINJA]);
|
||||||
|
|
||||||
const greninja = game.scene.getPlayerParty()[1];
|
const greninja = game.scene.getPlayerParty()[1];
|
||||||
expect(greninja.formIndex).toBe(ashForm);
|
expect(greninja.formIndex).toBe(ashForm);
|
||||||
@ -60,7 +60,7 @@ describe("Abilities - BATTLE BOND", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("should not keep buffing Water Shuriken after Greninja switches to base form", async () => {
|
it("should not keep buffing Water Shuriken after Greninja switches to base form", async () => {
|
||||||
await game.classicMode.startBattle([Species.GRENINJA]);
|
await game.classicMode.startBattle([SpeciesId.GRENINJA]);
|
||||||
|
|
||||||
const waterShuriken = allMoves[MoveId.WATER_SHURIKEN];
|
const waterShuriken = allMoves[MoveId.WATER_SHURIKEN];
|
||||||
vi.spyOn(waterShuriken, "calculateBattlePower");
|
vi.spyOn(waterShuriken, "calculateBattlePower");
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { BattlerIndex } from "#app/battle";
|
import { BattlerIndex } from "#app/battle";
|
||||||
import { AbilityId } from "#enums/ability-id";
|
import { AbilityId } from "#enums/ability-id";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { Stat } from "#enums/stat";
|
import { Stat } from "#enums/stat";
|
||||||
import GameManager from "#test/testUtils/gameManager";
|
import GameManager from "#test/testUtils/gameManager";
|
||||||
import Phaser from "phaser";
|
import Phaser from "phaser";
|
||||||
@ -25,7 +25,7 @@ describe("Abilities - Beast Boost", () => {
|
|||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
game.override
|
game.override
|
||||||
.battleStyle("single")
|
.battleStyle("single")
|
||||||
.enemySpecies(Species.BULBASAUR)
|
.enemySpecies(SpeciesId.BULBASAUR)
|
||||||
.enemyAbility(AbilityId.BEAST_BOOST)
|
.enemyAbility(AbilityId.BEAST_BOOST)
|
||||||
.ability(AbilityId.BEAST_BOOST)
|
.ability(AbilityId.BEAST_BOOST)
|
||||||
.startingLevel(2000)
|
.startingLevel(2000)
|
||||||
@ -34,7 +34,7 @@ describe("Abilities - Beast Boost", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("should prefer highest stat to boost its corresponding stat stage by 1 when winning a battle", async () => {
|
it("should prefer highest stat to boost its corresponding stat stage by 1 when winning a battle", async () => {
|
||||||
await game.classicMode.startBattle([Species.SLOWBRO]);
|
await game.classicMode.startBattle([SpeciesId.SLOWBRO]);
|
||||||
|
|
||||||
const playerPokemon = game.scene.getPlayerPokemon()!;
|
const playerPokemon = game.scene.getPlayerPokemon()!;
|
||||||
// Set the pokemon's highest stat to DEF, so it should be picked by Beast Boost
|
// Set the pokemon's highest stat to DEF, so it should be picked by Beast Boost
|
||||||
@ -52,7 +52,7 @@ describe("Abilities - Beast Boost", () => {
|
|||||||
it("should use in-battle overriden stats when determining the stat stage to raise by 1", async () => {
|
it("should use in-battle overriden stats when determining the stat stage to raise by 1", async () => {
|
||||||
game.override.enemyMoveset([MoveId.GUARD_SPLIT]);
|
game.override.enemyMoveset([MoveId.GUARD_SPLIT]);
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.SLOWBRO]);
|
await game.classicMode.startBattle([SpeciesId.SLOWBRO]);
|
||||||
|
|
||||||
const playerPokemon = game.scene.getPlayerPokemon()!;
|
const playerPokemon = game.scene.getPlayerPokemon()!;
|
||||||
// If the opponent uses Guard Split, the pokemon's second highest stat (SPATK) should be chosen
|
// If the opponent uses Guard Split, the pokemon's second highest stat (SPATK) should be chosen
|
||||||
@ -70,7 +70,7 @@ describe("Abilities - Beast Boost", () => {
|
|||||||
|
|
||||||
it("should have order preference in case of stat ties", async () => {
|
it("should have order preference in case of stat ties", async () => {
|
||||||
// Order preference follows the order of EFFECTIVE_STAT
|
// Order preference follows the order of EFFECTIVE_STAT
|
||||||
await game.classicMode.startBattle([Species.SLOWBRO]);
|
await game.classicMode.startBattle([SpeciesId.SLOWBRO]);
|
||||||
|
|
||||||
const playerPokemon = game.scene.getPlayerPokemon()!;
|
const playerPokemon = game.scene.getPlayerPokemon()!;
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ import { WeatherType } from "#enums/weather-type";
|
|||||||
import { MoveResult } from "#app/field/pokemon";
|
import { MoveResult } from "#app/field/pokemon";
|
||||||
import { AbilityId } from "#enums/ability-id";
|
import { AbilityId } from "#enums/ability-id";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import GameManager from "#test/testUtils/gameManager";
|
import GameManager from "#test/testUtils/gameManager";
|
||||||
import Phaser from "phaser";
|
import Phaser from "phaser";
|
||||||
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
||||||
@ -36,7 +36,7 @@ describe("Abilities - Commander", () => {
|
|||||||
.ability(AbilityId.COMMANDER)
|
.ability(AbilityId.COMMANDER)
|
||||||
.battleStyle("double")
|
.battleStyle("double")
|
||||||
.disableCrits()
|
.disableCrits()
|
||||||
.enemySpecies(Species.SNORLAX)
|
.enemySpecies(SpeciesId.SNORLAX)
|
||||||
.enemyAbility(AbilityId.BALL_FETCH)
|
.enemyAbility(AbilityId.BALL_FETCH)
|
||||||
.enemyMoveset(MoveId.TACKLE);
|
.enemyMoveset(MoveId.TACKLE);
|
||||||
|
|
||||||
@ -44,7 +44,7 @@ describe("Abilities - Commander", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("causes the source to jump into Dondozo's mouth, granting a stat boost and hiding the source", async () => {
|
it("causes the source to jump into Dondozo's mouth, granting a stat boost and hiding the source", async () => {
|
||||||
await game.classicMode.startBattle([Species.TATSUGIRI, Species.DONDOZO]);
|
await game.classicMode.startBattle([SpeciesId.TATSUGIRI, SpeciesId.DONDOZO]);
|
||||||
|
|
||||||
const [tatsugiri, dondozo] = game.scene.getPlayerField();
|
const [tatsugiri, dondozo] = game.scene.getPlayerField();
|
||||||
|
|
||||||
@ -70,7 +70,7 @@ describe("Abilities - Commander", () => {
|
|||||||
it("should activate when a Dondozo switches in and cancel the source's move", async () => {
|
it("should activate when a Dondozo switches in and cancel the source's move", async () => {
|
||||||
game.override.enemyMoveset(MoveId.SPLASH);
|
game.override.enemyMoveset(MoveId.SPLASH);
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.TATSUGIRI, Species.MAGIKARP, Species.DONDOZO]);
|
await game.classicMode.startBattle([SpeciesId.TATSUGIRI, SpeciesId.MAGIKARP, SpeciesId.DONDOZO]);
|
||||||
|
|
||||||
const tatsugiri = game.scene.getPlayerField()[0];
|
const tatsugiri = game.scene.getPlayerField()[0];
|
||||||
|
|
||||||
@ -89,7 +89,7 @@ describe("Abilities - Commander", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("source should reenter the field when Dondozo faints", async () => {
|
it("source should reenter the field when Dondozo faints", async () => {
|
||||||
await game.classicMode.startBattle([Species.TATSUGIRI, Species.DONDOZO]);
|
await game.classicMode.startBattle([SpeciesId.TATSUGIRI, SpeciesId.DONDOZO]);
|
||||||
|
|
||||||
const [tatsugiri, dondozo] = game.scene.getPlayerField();
|
const [tatsugiri, dondozo] = game.scene.getPlayerField();
|
||||||
|
|
||||||
@ -116,7 +116,7 @@ describe("Abilities - Commander", () => {
|
|||||||
it("source should still take damage from Poison while hidden", async () => {
|
it("source should still take damage from Poison while hidden", async () => {
|
||||||
game.override.statusEffect(StatusEffect.POISON).enemyMoveset(MoveId.SPLASH);
|
game.override.statusEffect(StatusEffect.POISON).enemyMoveset(MoveId.SPLASH);
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.TATSUGIRI, Species.DONDOZO]);
|
await game.classicMode.startBattle([SpeciesId.TATSUGIRI, SpeciesId.DONDOZO]);
|
||||||
|
|
||||||
const [tatsugiri, dondozo] = game.scene.getPlayerField();
|
const [tatsugiri, dondozo] = game.scene.getPlayerField();
|
||||||
|
|
||||||
@ -134,7 +134,7 @@ describe("Abilities - Commander", () => {
|
|||||||
it("source should still take damage from Salt Cure while hidden", async () => {
|
it("source should still take damage from Salt Cure while hidden", async () => {
|
||||||
game.override.enemyMoveset(MoveId.SPLASH);
|
game.override.enemyMoveset(MoveId.SPLASH);
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.TATSUGIRI, Species.DONDOZO]);
|
await game.classicMode.startBattle([SpeciesId.TATSUGIRI, SpeciesId.DONDOZO]);
|
||||||
|
|
||||||
const [tatsugiri, dondozo] = game.scene.getPlayerField();
|
const [tatsugiri, dondozo] = game.scene.getPlayerField();
|
||||||
|
|
||||||
@ -154,7 +154,7 @@ describe("Abilities - Commander", () => {
|
|||||||
it("source should still take damage from Sandstorm while hidden", async () => {
|
it("source should still take damage from Sandstorm while hidden", async () => {
|
||||||
game.override.weather(WeatherType.SANDSTORM).enemyMoveset(MoveId.SPLASH);
|
game.override.weather(WeatherType.SANDSTORM).enemyMoveset(MoveId.SPLASH);
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.TATSUGIRI, Species.DONDOZO]);
|
await game.classicMode.startBattle([SpeciesId.TATSUGIRI, SpeciesId.DONDOZO]);
|
||||||
|
|
||||||
const [tatsugiri, dondozo] = game.scene.getPlayerField();
|
const [tatsugiri, dondozo] = game.scene.getPlayerField();
|
||||||
|
|
||||||
@ -172,7 +172,7 @@ describe("Abilities - Commander", () => {
|
|||||||
it("should make Dondozo immune to being forced out", async () => {
|
it("should make Dondozo immune to being forced out", async () => {
|
||||||
game.override.enemyMoveset([MoveId.SPLASH, MoveId.WHIRLWIND]);
|
game.override.enemyMoveset([MoveId.SPLASH, MoveId.WHIRLWIND]);
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.TATSUGIRI, Species.DONDOZO]);
|
await game.classicMode.startBattle([SpeciesId.TATSUGIRI, SpeciesId.DONDOZO]);
|
||||||
|
|
||||||
const [tatsugiri, dondozo] = game.scene.getPlayerField();
|
const [tatsugiri, dondozo] = game.scene.getPlayerField();
|
||||||
|
|
||||||
@ -194,7 +194,7 @@ describe("Abilities - Commander", () => {
|
|||||||
it("should interrupt the source's semi-invulnerability", async () => {
|
it("should interrupt the source's semi-invulnerability", async () => {
|
||||||
game.override.moveset([MoveId.SPLASH, MoveId.DIVE]).enemyMoveset(MoveId.SPLASH);
|
game.override.moveset([MoveId.SPLASH, MoveId.DIVE]).enemyMoveset(MoveId.SPLASH);
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.TATSUGIRI, Species.MAGIKARP, Species.DONDOZO]);
|
await game.classicMode.startBattle([SpeciesId.TATSUGIRI, SpeciesId.MAGIKARP, SpeciesId.DONDOZO]);
|
||||||
|
|
||||||
const tatsugiri = game.scene.getPlayerField()[0];
|
const tatsugiri = game.scene.getPlayerField()[0];
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ import { Stat } from "#enums/stat";
|
|||||||
import { TurnInitPhase } from "#app/phases/turn-init-phase";
|
import { TurnInitPhase } from "#app/phases/turn-init-phase";
|
||||||
import { AbilityId } from "#enums/ability-id";
|
import { AbilityId } from "#enums/ability-id";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import GameManager from "#test/testUtils/gameManager";
|
import GameManager from "#test/testUtils/gameManager";
|
||||||
import Phaser from "phaser";
|
import Phaser from "phaser";
|
||||||
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
||||||
@ -26,7 +26,7 @@ describe("Abilities - Competitive", () => {
|
|||||||
|
|
||||||
game.override
|
game.override
|
||||||
.battleStyle("single")
|
.battleStyle("single")
|
||||||
.enemySpecies(Species.BEEDRILL)
|
.enemySpecies(SpeciesId.BEEDRILL)
|
||||||
.enemyMoveset(MoveId.TICKLE)
|
.enemyMoveset(MoveId.TICKLE)
|
||||||
.startingLevel(1)
|
.startingLevel(1)
|
||||||
.moveset([MoveId.SPLASH, MoveId.CLOSE_COMBAT])
|
.moveset([MoveId.SPLASH, MoveId.CLOSE_COMBAT])
|
||||||
@ -34,7 +34,7 @@ describe("Abilities - Competitive", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("lower atk and def by 1 via tickle, then increase spatk by 4 via competitive", async () => {
|
it("lower atk and def by 1 via tickle, then increase spatk by 4 via competitive", async () => {
|
||||||
await game.classicMode.startBattle([Species.FLYGON]);
|
await game.classicMode.startBattle([SpeciesId.FLYGON]);
|
||||||
|
|
||||||
const playerPokemon = game.scene.getPlayerPokemon()!;
|
const playerPokemon = game.scene.getPlayerPokemon()!;
|
||||||
game.move.select(MoveId.SPLASH);
|
game.move.select(MoveId.SPLASH);
|
||||||
@ -47,7 +47,7 @@ describe("Abilities - Competitive", () => {
|
|||||||
|
|
||||||
it("lowering your own stats should not trigger competitive", async () => {
|
it("lowering your own stats should not trigger competitive", async () => {
|
||||||
game.override.enemyMoveset(MoveId.SPLASH);
|
game.override.enemyMoveset(MoveId.SPLASH);
|
||||||
await game.classicMode.startBattle([Species.FLYGON]);
|
await game.classicMode.startBattle([SpeciesId.FLYGON]);
|
||||||
|
|
||||||
const playerPokemon = game.scene.getPlayerPokemon()!;
|
const playerPokemon = game.scene.getPlayerPokemon()!;
|
||||||
game.move.select(MoveId.CLOSE_COMBAT);
|
game.move.select(MoveId.CLOSE_COMBAT);
|
||||||
@ -60,7 +60,7 @@ describe("Abilities - Competitive", () => {
|
|||||||
|
|
||||||
it("white herb should remove only the negative effects", async () => {
|
it("white herb should remove only the negative effects", async () => {
|
||||||
game.override.startingHeldItems([{ name: "WHITE_HERB" }]);
|
game.override.startingHeldItems([{ name: "WHITE_HERB" }]);
|
||||||
await game.classicMode.startBattle([Species.FLYGON]);
|
await game.classicMode.startBattle([SpeciesId.FLYGON]);
|
||||||
|
|
||||||
const playerPokemon = game.scene.getPlayerPokemon()!;
|
const playerPokemon = game.scene.getPlayerPokemon()!;
|
||||||
game.move.select(MoveId.SPLASH);
|
game.move.select(MoveId.SPLASH);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { AbilityId } from "#enums/ability-id";
|
import { AbilityId } from "#enums/ability-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { Stat } from "#enums/stat";
|
import { Stat } from "#enums/stat";
|
||||||
import GameManager from "#test/testUtils/gameManager";
|
import GameManager from "#test/testUtils/gameManager";
|
||||||
import Phaser from "phaser";
|
import Phaser from "phaser";
|
||||||
@ -24,14 +24,14 @@ describe("Abilities - Contrary", () => {
|
|||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
game.override
|
game.override
|
||||||
.battleStyle("single")
|
.battleStyle("single")
|
||||||
.enemySpecies(Species.BULBASAUR)
|
.enemySpecies(SpeciesId.BULBASAUR)
|
||||||
.enemyAbility(AbilityId.CONTRARY)
|
.enemyAbility(AbilityId.CONTRARY)
|
||||||
.ability(AbilityId.INTIMIDATE)
|
.ability(AbilityId.INTIMIDATE)
|
||||||
.enemyMoveset(MoveId.SPLASH);
|
.enemyMoveset(MoveId.SPLASH);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should invert stat changes when applied", async () => {
|
it("should invert stat changes when applied", async () => {
|
||||||
await game.classicMode.startBattle([Species.SLOWBRO]);
|
await game.classicMode.startBattle([SpeciesId.SLOWBRO]);
|
||||||
|
|
||||||
const enemyPokemon = game.scene.getEnemyPokemon()!;
|
const enemyPokemon = game.scene.getEnemyPokemon()!;
|
||||||
|
|
||||||
@ -41,7 +41,7 @@ describe("Abilities - Contrary", () => {
|
|||||||
describe("With Clear Body", () => {
|
describe("With Clear Body", () => {
|
||||||
it("should apply positive effects", async () => {
|
it("should apply positive effects", async () => {
|
||||||
game.override.enemyPassiveAbility(AbilityId.CLEAR_BODY).moveset([MoveId.TAIL_WHIP]);
|
game.override.enemyPassiveAbility(AbilityId.CLEAR_BODY).moveset([MoveId.TAIL_WHIP]);
|
||||||
await game.classicMode.startBattle([Species.SLOWBRO]);
|
await game.classicMode.startBattle([SpeciesId.SLOWBRO]);
|
||||||
|
|
||||||
const enemyPokemon = game.scene.getEnemyPokemon()!;
|
const enemyPokemon = game.scene.getEnemyPokemon()!;
|
||||||
|
|
||||||
@ -55,7 +55,7 @@ describe("Abilities - Contrary", () => {
|
|||||||
|
|
||||||
it("should block negative effects", async () => {
|
it("should block negative effects", async () => {
|
||||||
game.override.enemyPassiveAbility(AbilityId.CLEAR_BODY).enemyMoveset(MoveId.HOWL).moveset([MoveId.SPLASH]);
|
game.override.enemyPassiveAbility(AbilityId.CLEAR_BODY).enemyMoveset(MoveId.HOWL).moveset([MoveId.SPLASH]);
|
||||||
await game.classicMode.startBattle([Species.SLOWBRO]);
|
await game.classicMode.startBattle([SpeciesId.SLOWBRO]);
|
||||||
|
|
||||||
const enemyPokemon = game.scene.getEnemyPokemon()!;
|
const enemyPokemon = game.scene.getEnemyPokemon()!;
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { AbilityId } from "#enums/ability-id";
|
import { AbilityId } from "#enums/ability-id";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import GameManager from "#test/testUtils/gameManager";
|
import GameManager from "#test/testUtils/gameManager";
|
||||||
import Phaser from "phaser";
|
import Phaser from "phaser";
|
||||||
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
||||||
@ -25,14 +25,14 @@ describe("Abilities - Corrosion", () => {
|
|||||||
.moveset([MoveId.SPLASH])
|
.moveset([MoveId.SPLASH])
|
||||||
.battleStyle("single")
|
.battleStyle("single")
|
||||||
.disableCrits()
|
.disableCrits()
|
||||||
.enemySpecies(Species.GRIMER)
|
.enemySpecies(SpeciesId.GRIMER)
|
||||||
.enemyAbility(AbilityId.CORROSION)
|
.enemyAbility(AbilityId.CORROSION)
|
||||||
.enemyMoveset(MoveId.TOXIC);
|
.enemyMoveset(MoveId.TOXIC);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("If a Poison- or Steel-type Pokémon with this Ability poisons a target with Synchronize, Synchronize does not gain the ability to poison Poison- or Steel-type Pokémon.", async () => {
|
it("If a Poison- or Steel-type Pokémon with this Ability poisons a target with Synchronize, Synchronize does not gain the ability to poison Poison- or Steel-type Pokémon.", async () => {
|
||||||
game.override.ability(AbilityId.SYNCHRONIZE);
|
game.override.ability(AbilityId.SYNCHRONIZE);
|
||||||
await game.classicMode.startBattle([Species.FEEBAS]);
|
await game.classicMode.startBattle([SpeciesId.FEEBAS]);
|
||||||
|
|
||||||
const playerPokemon = game.scene.getPlayerPokemon();
|
const playerPokemon = game.scene.getPlayerPokemon();
|
||||||
const enemyPokemon = game.scene.getEnemyPokemon();
|
const enemyPokemon = game.scene.getEnemyPokemon();
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { Stat } from "#enums/stat";
|
import { Stat } from "#enums/stat";
|
||||||
import { AbilityId } from "#enums/ability-id";
|
import { AbilityId } from "#enums/ability-id";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#app/enums/species";
|
import { SpeciesId } from "#app/enums/species";
|
||||||
import { CommandPhase } from "#app/phases/command-phase";
|
import { CommandPhase } from "#app/phases/command-phase";
|
||||||
import { MessagePhase } from "#app/phases/message-phase";
|
import { MessagePhase } from "#app/phases/message-phase";
|
||||||
import GameManager from "#test/testUtils/gameManager";
|
import GameManager from "#test/testUtils/gameManager";
|
||||||
@ -33,7 +33,7 @@ describe("Abilities - COSTAR", () => {
|
|||||||
test("ability copies positive stat stages", async () => {
|
test("ability copies positive stat stages", async () => {
|
||||||
game.override.enemyAbility(AbilityId.BALL_FETCH);
|
game.override.enemyAbility(AbilityId.BALL_FETCH);
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP, Species.FLAMIGO]);
|
await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP, SpeciesId.FLAMIGO]);
|
||||||
|
|
||||||
let [leftPokemon, rightPokemon] = game.scene.getPlayerField();
|
let [leftPokemon, rightPokemon] = game.scene.getPlayerField();
|
||||||
|
|
||||||
@ -58,7 +58,7 @@ describe("Abilities - COSTAR", () => {
|
|||||||
test("ability copies negative stat stages", async () => {
|
test("ability copies negative stat stages", async () => {
|
||||||
game.override.enemyAbility(AbilityId.INTIMIDATE);
|
game.override.enemyAbility(AbilityId.INTIMIDATE);
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP, Species.FLAMIGO]);
|
await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP, SpeciesId.FLAMIGO]);
|
||||||
|
|
||||||
let [leftPokemon, rightPokemon] = game.scene.getPlayerField();
|
let [leftPokemon, rightPokemon] = game.scene.getPlayerField();
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ import { getPokemonNameWithAffix } from "#app/messages";
|
|||||||
import { AbilityId } from "#enums/ability-id";
|
import { AbilityId } from "#enums/ability-id";
|
||||||
import { BerryType } from "#enums/berry-type";
|
import { BerryType } from "#enums/berry-type";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { Stat } from "#enums/stat";
|
import { Stat } from "#enums/stat";
|
||||||
import GameManager from "#test/testUtils/gameManager";
|
import GameManager from "#test/testUtils/gameManager";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
@ -34,14 +34,14 @@ describe("Abilities - Cud Chew", () => {
|
|||||||
.ability(AbilityId.CUD_CHEW)
|
.ability(AbilityId.CUD_CHEW)
|
||||||
.battleStyle("single")
|
.battleStyle("single")
|
||||||
.disableCrits()
|
.disableCrits()
|
||||||
.enemySpecies(Species.MAGIKARP)
|
.enemySpecies(SpeciesId.MAGIKARP)
|
||||||
.enemyAbility(AbilityId.BALL_FETCH)
|
.enemyAbility(AbilityId.BALL_FETCH)
|
||||||
.enemyMoveset(MoveId.SPLASH);
|
.enemyMoveset(MoveId.SPLASH);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("tracks berries eaten", () => {
|
describe("tracks berries eaten", () => {
|
||||||
it("stores inside summonData at end of turn", async () => {
|
it("stores inside summonData at end of turn", async () => {
|
||||||
await game.classicMode.startBattle([Species.FARIGIRAF]);
|
await game.classicMode.startBattle([SpeciesId.FARIGIRAF]);
|
||||||
|
|
||||||
const farigiraf = game.scene.getPlayerPokemon()!;
|
const farigiraf = game.scene.getPlayerPokemon()!;
|
||||||
farigiraf.hp = 1; // needed to allow sitrus procs
|
farigiraf.hp = 1; // needed to allow sitrus procs
|
||||||
@ -69,7 +69,7 @@ describe("Abilities - Cud Chew", () => {
|
|||||||
it("shows ability popup for eating berry, even if berry is useless", async () => {
|
it("shows ability popup for eating berry, even if berry is useless", async () => {
|
||||||
const abDisplaySpy = vi.spyOn(globalScene, "queueAbilityDisplay");
|
const abDisplaySpy = vi.spyOn(globalScene, "queueAbilityDisplay");
|
||||||
game.override.enemyMoveset([MoveId.SPLASH, MoveId.HEAL_PULSE]);
|
game.override.enemyMoveset([MoveId.SPLASH, MoveId.HEAL_PULSE]);
|
||||||
await game.classicMode.startBattle([Species.FARIGIRAF]);
|
await game.classicMode.startBattle([SpeciesId.FARIGIRAF]);
|
||||||
|
|
||||||
const farigiraf = game.scene.getPlayerPokemon()!;
|
const farigiraf = game.scene.getPlayerPokemon()!;
|
||||||
// Dip below half to eat berry
|
// Dip below half to eat berry
|
||||||
@ -118,7 +118,7 @@ describe("Abilities - Cud Chew", () => {
|
|||||||
{ name: "BERRY", type: BerryType.LIECHI, count: 3 },
|
{ name: "BERRY", type: BerryType.LIECHI, count: 3 },
|
||||||
])
|
])
|
||||||
.enemyMoveset(MoveId.TEATIME);
|
.enemyMoveset(MoveId.TEATIME);
|
||||||
await game.classicMode.startBattle([Species.FARIGIRAF]);
|
await game.classicMode.startBattle([SpeciesId.FARIGIRAF]);
|
||||||
|
|
||||||
const farigiraf = game.scene.getPlayerPokemon()!;
|
const farigiraf = game.scene.getPlayerPokemon()!;
|
||||||
farigiraf.hp = 1; // needed to allow berry procs
|
farigiraf.hp = 1; // needed to allow berry procs
|
||||||
@ -146,7 +146,7 @@ describe("Abilities - Cud Chew", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("should reset both arrays on switch", async () => {
|
it("should reset both arrays on switch", async () => {
|
||||||
await game.classicMode.startBattle([Species.FARIGIRAF, Species.GIRAFARIG]);
|
await game.classicMode.startBattle([SpeciesId.FARIGIRAF, SpeciesId.GIRAFARIG]);
|
||||||
|
|
||||||
const farigiraf = game.scene.getPlayerPokemon()!;
|
const farigiraf = game.scene.getPlayerPokemon()!;
|
||||||
farigiraf.hp = 1;
|
farigiraf.hp = 1;
|
||||||
@ -175,7 +175,7 @@ describe("Abilities - Cud Chew", () => {
|
|||||||
|
|
||||||
it("clears array if disabled", async () => {
|
it("clears array if disabled", async () => {
|
||||||
game.override.enemyAbility(AbilityId.NEUTRALIZING_GAS);
|
game.override.enemyAbility(AbilityId.NEUTRALIZING_GAS);
|
||||||
await game.classicMode.startBattle([Species.FARIGIRAF]);
|
await game.classicMode.startBattle([SpeciesId.FARIGIRAF]);
|
||||||
|
|
||||||
const farigiraf = game.scene.getPlayerPokemon()!;
|
const farigiraf = game.scene.getPlayerPokemon()!;
|
||||||
farigiraf.hp = 1;
|
farigiraf.hp = 1;
|
||||||
@ -197,7 +197,7 @@ describe("Abilities - Cud Chew", () => {
|
|||||||
describe("regurgiates berries", () => {
|
describe("regurgiates berries", () => {
|
||||||
it("re-triggers effects on eater without pushing to array", async () => {
|
it("re-triggers effects on eater without pushing to array", async () => {
|
||||||
const apply = vi.spyOn(RepeatBerryNextTurnAbAttr.prototype, "apply");
|
const apply = vi.spyOn(RepeatBerryNextTurnAbAttr.prototype, "apply");
|
||||||
await game.classicMode.startBattle([Species.FARIGIRAF]);
|
await game.classicMode.startBattle([SpeciesId.FARIGIRAF]);
|
||||||
|
|
||||||
const farigiraf = game.scene.getPlayerPokemon()!;
|
const farigiraf = game.scene.getPlayerPokemon()!;
|
||||||
farigiraf.hp = 1;
|
farigiraf.hp = 1;
|
||||||
@ -223,7 +223,7 @@ describe("Abilities - Cud Chew", () => {
|
|||||||
|
|
||||||
it("bypasses unnerve", async () => {
|
it("bypasses unnerve", async () => {
|
||||||
game.override.enemyAbility(AbilityId.UNNERVE);
|
game.override.enemyAbility(AbilityId.UNNERVE);
|
||||||
await game.classicMode.startBattle([Species.FARIGIRAF]);
|
await game.classicMode.startBattle([SpeciesId.FARIGIRAF]);
|
||||||
|
|
||||||
const farigiraf = game.scene.getPlayerPokemon()!;
|
const farigiraf = game.scene.getPlayerPokemon()!;
|
||||||
farigiraf.hp = 1;
|
farigiraf.hp = 1;
|
||||||
@ -241,7 +241,7 @@ describe("Abilities - Cud Chew", () => {
|
|||||||
|
|
||||||
it("doesn't trigger on non-eating removal", async () => {
|
it("doesn't trigger on non-eating removal", async () => {
|
||||||
game.override.enemyMoveset(MoveId.INCINERATE);
|
game.override.enemyMoveset(MoveId.INCINERATE);
|
||||||
await game.classicMode.startBattle([Species.FARIGIRAF]);
|
await game.classicMode.startBattle([SpeciesId.FARIGIRAF]);
|
||||||
|
|
||||||
const farigiraf = game.scene.getPlayerPokemon()!;
|
const farigiraf = game.scene.getPlayerPokemon()!;
|
||||||
farigiraf.hp = farigiraf.getMaxHp() / 4;
|
farigiraf.hp = farigiraf.getMaxHp() / 4;
|
||||||
@ -257,10 +257,10 @@ describe("Abilities - Cud Chew", () => {
|
|||||||
|
|
||||||
it("works with pluck", async () => {
|
it("works with pluck", async () => {
|
||||||
game.override
|
game.override
|
||||||
.enemySpecies(Species.BLAZIKEN)
|
.enemySpecies(SpeciesId.BLAZIKEN)
|
||||||
.enemyHeldItems([{ name: "BERRY", type: BerryType.PETAYA, count: 1 }])
|
.enemyHeldItems([{ name: "BERRY", type: BerryType.PETAYA, count: 1 }])
|
||||||
.startingHeldItems([]);
|
.startingHeldItems([]);
|
||||||
await game.classicMode.startBattle([Species.FARIGIRAF]);
|
await game.classicMode.startBattle([SpeciesId.FARIGIRAF]);
|
||||||
|
|
||||||
const farigiraf = game.scene.getPlayerPokemon()!;
|
const farigiraf = game.scene.getPlayerPokemon()!;
|
||||||
|
|
||||||
@ -276,7 +276,7 @@ describe("Abilities - Cud Chew", () => {
|
|||||||
|
|
||||||
it("works with Ripen", async () => {
|
it("works with Ripen", async () => {
|
||||||
game.override.passiveAbility(AbilityId.RIPEN);
|
game.override.passiveAbility(AbilityId.RIPEN);
|
||||||
await game.classicMode.startBattle([Species.FARIGIRAF]);
|
await game.classicMode.startBattle([SpeciesId.FARIGIRAF]);
|
||||||
|
|
||||||
const farigiraf = game.scene.getPlayerPokemon()!;
|
const farigiraf = game.scene.getPlayerPokemon()!;
|
||||||
farigiraf.hp = 1;
|
farigiraf.hp = 1;
|
||||||
@ -292,7 +292,7 @@ describe("Abilities - Cud Chew", () => {
|
|||||||
|
|
||||||
it("is preserved on reload/wave clear", async () => {
|
it("is preserved on reload/wave clear", async () => {
|
||||||
game.override.enemyLevel(1);
|
game.override.enemyLevel(1);
|
||||||
await game.classicMode.startBattle([Species.FARIGIRAF]);
|
await game.classicMode.startBattle([SpeciesId.FARIGIRAF]);
|
||||||
|
|
||||||
const farigiraf = game.scene.getPlayerPokemon()!;
|
const farigiraf = game.scene.getPlayerPokemon()!;
|
||||||
farigiraf.hp = 1;
|
farigiraf.hp = 1;
|
||||||
|
@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle";
|
|||||||
import type { MovePhase } from "#app/phases/move-phase";
|
import type { MovePhase } from "#app/phases/move-phase";
|
||||||
import { AbilityId } from "#enums/ability-id";
|
import { AbilityId } from "#enums/ability-id";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import GameManager from "#test/testUtils/gameManager";
|
import GameManager from "#test/testUtils/gameManager";
|
||||||
import Phaser from "phaser";
|
import Phaser from "phaser";
|
||||||
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
||||||
@ -29,8 +29,8 @@ describe("Abilities - Dancer", () => {
|
|||||||
// Reference Link: https://bulbapedia.bulbagarden.net/wiki/Dancer_(Ability)
|
// Reference Link: https://bulbapedia.bulbagarden.net/wiki/Dancer_(Ability)
|
||||||
|
|
||||||
it("triggers when dance moves are used, doesn't consume extra PP", async () => {
|
it("triggers when dance moves are used, doesn't consume extra PP", async () => {
|
||||||
game.override.enemyAbility(AbilityId.DANCER).enemySpecies(Species.MAGIKARP).enemyMoveset(MoveId.VICTORY_DANCE);
|
game.override.enemyAbility(AbilityId.DANCER).enemySpecies(SpeciesId.MAGIKARP).enemyMoveset(MoveId.VICTORY_DANCE);
|
||||||
await game.classicMode.startBattle([Species.ORICORIO, Species.FEEBAS]);
|
await game.classicMode.startBattle([SpeciesId.ORICORIO, SpeciesId.FEEBAS]);
|
||||||
|
|
||||||
const [oricorio, feebas] = game.scene.getPlayerField();
|
const [oricorio, feebas] = game.scene.getPlayerField();
|
||||||
game.move.changeMoveset(oricorio, [MoveId.SWORDS_DANCE, MoveId.VICTORY_DANCE, MoveId.SPLASH]);
|
game.move.changeMoveset(oricorio, [MoveId.SWORDS_DANCE, MoveId.VICTORY_DANCE, MoveId.SPLASH]);
|
||||||
@ -68,9 +68,9 @@ describe("Abilities - Dancer", () => {
|
|||||||
game.override
|
game.override
|
||||||
.moveset([MoveId.FIERY_DANCE, MoveId.REVELATION_DANCE])
|
.moveset([MoveId.FIERY_DANCE, MoveId.REVELATION_DANCE])
|
||||||
.enemyMoveset([MoveId.INSTRUCT, MoveId.MIRROR_MOVE, MoveId.SPLASH])
|
.enemyMoveset([MoveId.INSTRUCT, MoveId.MIRROR_MOVE, MoveId.SPLASH])
|
||||||
.enemySpecies(Species.SHUCKLE)
|
.enemySpecies(SpeciesId.SHUCKLE)
|
||||||
.enemyLevel(10);
|
.enemyLevel(10);
|
||||||
await game.classicMode.startBattle([Species.ORICORIO, Species.FEEBAS]);
|
await game.classicMode.startBattle([SpeciesId.ORICORIO, SpeciesId.FEEBAS]);
|
||||||
|
|
||||||
const [oricorio] = game.scene.getPlayerField();
|
const [oricorio] = game.scene.getPlayerField();
|
||||||
const [, shuckle2] = game.scene.getEnemyField();
|
const [, shuckle2] = game.scene.getEnemyField();
|
||||||
|
@ -2,7 +2,7 @@ import { Stat } from "#enums/stat";
|
|||||||
import { TurnInitPhase } from "#app/phases/turn-init-phase";
|
import { TurnInitPhase } from "#app/phases/turn-init-phase";
|
||||||
import { AbilityId } from "#enums/ability-id";
|
import { AbilityId } from "#enums/ability-id";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import GameManager from "#test/testUtils/gameManager";
|
import GameManager from "#test/testUtils/gameManager";
|
||||||
import Phaser from "phaser";
|
import Phaser from "phaser";
|
||||||
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
||||||
@ -26,7 +26,7 @@ describe("Abilities - Defiant", () => {
|
|||||||
|
|
||||||
game.override
|
game.override
|
||||||
.battleStyle("single")
|
.battleStyle("single")
|
||||||
.enemySpecies(Species.BEEDRILL)
|
.enemySpecies(SpeciesId.BEEDRILL)
|
||||||
.enemyMoveset(MoveId.TICKLE)
|
.enemyMoveset(MoveId.TICKLE)
|
||||||
.startingLevel(1)
|
.startingLevel(1)
|
||||||
.moveset([MoveId.SPLASH, MoveId.CLOSE_COMBAT])
|
.moveset([MoveId.SPLASH, MoveId.CLOSE_COMBAT])
|
||||||
@ -34,7 +34,7 @@ describe("Abilities - Defiant", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("lower atk and def by 1 via tickle, then increase atk by 4 via defiant", async () => {
|
it("lower atk and def by 1 via tickle, then increase atk by 4 via defiant", async () => {
|
||||||
await game.classicMode.startBattle([Species.FLYGON]);
|
await game.classicMode.startBattle([SpeciesId.FLYGON]);
|
||||||
|
|
||||||
const playerPokemon = game.scene.getPlayerPokemon()!;
|
const playerPokemon = game.scene.getPlayerPokemon()!;
|
||||||
game.move.select(MoveId.SPLASH);
|
game.move.select(MoveId.SPLASH);
|
||||||
@ -46,7 +46,7 @@ describe("Abilities - Defiant", () => {
|
|||||||
|
|
||||||
it("lowering your own stats should not trigger defiant", async () => {
|
it("lowering your own stats should not trigger defiant", async () => {
|
||||||
game.override.enemyMoveset(MoveId.SPLASH);
|
game.override.enemyMoveset(MoveId.SPLASH);
|
||||||
await game.classicMode.startBattle([Species.FLYGON]);
|
await game.classicMode.startBattle([SpeciesId.FLYGON]);
|
||||||
|
|
||||||
const playerPokemon = game.scene.getPlayerPokemon()!;
|
const playerPokemon = game.scene.getPlayerPokemon()!;
|
||||||
game.move.select(MoveId.CLOSE_COMBAT);
|
game.move.select(MoveId.CLOSE_COMBAT);
|
||||||
@ -59,7 +59,7 @@ describe("Abilities - Defiant", () => {
|
|||||||
|
|
||||||
it("white herb should remove only the negative effects", async () => {
|
it("white herb should remove only the negative effects", async () => {
|
||||||
game.override.startingHeldItems([{ name: "WHITE_HERB" }]);
|
game.override.startingHeldItems([{ name: "WHITE_HERB" }]);
|
||||||
await game.classicMode.startBattle([Species.FLYGON]);
|
await game.classicMode.startBattle([SpeciesId.FLYGON]);
|
||||||
|
|
||||||
const playerPokemon = game.scene.getPlayerPokemon()!;
|
const playerPokemon = game.scene.getPlayerPokemon()!;
|
||||||
game.move.select(MoveId.SPLASH);
|
game.move.select(MoveId.SPLASH);
|
||||||
|
@ -4,7 +4,7 @@ import type { CommandPhase } from "#app/phases/command-phase";
|
|||||||
import { Command } from "#app/ui/command-ui-handler";
|
import { Command } from "#app/ui/command-ui-handler";
|
||||||
import { AbilityId } from "#enums/ability-id";
|
import { AbilityId } from "#enums/ability-id";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import GameManager from "#test/testUtils/gameManager";
|
import GameManager from "#test/testUtils/gameManager";
|
||||||
import Phaser from "phaser";
|
import Phaser from "phaser";
|
||||||
import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest";
|
import { afterEach, beforeAll, beforeEach, describe, it, expect, vi } from "vitest";
|
||||||
@ -28,7 +28,7 @@ describe("Abilities - Desolate Land", () => {
|
|||||||
game.override
|
game.override
|
||||||
.moveset(MoveId.SPLASH)
|
.moveset(MoveId.SPLASH)
|
||||||
.hasPassiveAbility(true)
|
.hasPassiveAbility(true)
|
||||||
.enemySpecies(Species.RALTS)
|
.enemySpecies(SpeciesId.RALTS)
|
||||||
.enemyAbility(AbilityId.BALL_FETCH)
|
.enemyAbility(AbilityId.BALL_FETCH)
|
||||||
.enemyMoveset(MoveId.SPLASH);
|
.enemyMoveset(MoveId.SPLASH);
|
||||||
});
|
});
|
||||||
@ -39,7 +39,12 @@ describe("Abilities - Desolate Land", () => {
|
|||||||
*/
|
*/
|
||||||
it("should lift only when all pokemon with this ability leave the field", async () => {
|
it("should lift only when all pokemon with this ability leave the field", async () => {
|
||||||
game.override.battleStyle("double").enemyMoveset([MoveId.SPLASH, MoveId.ROAR]);
|
game.override.battleStyle("double").enemyMoveset([MoveId.SPLASH, MoveId.ROAR]);
|
||||||
await game.classicMode.startBattle([Species.MAGCARGO, Species.MAGCARGO, Species.MAGIKARP, Species.MAGIKARP]);
|
await game.classicMode.startBattle([
|
||||||
|
SpeciesId.MAGCARGO,
|
||||||
|
SpeciesId.MAGCARGO,
|
||||||
|
SpeciesId.MAGIKARP,
|
||||||
|
SpeciesId.MAGIKARP,
|
||||||
|
]);
|
||||||
|
|
||||||
expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN);
|
expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN);
|
||||||
|
|
||||||
@ -82,9 +87,9 @@ describe("Abilities - Desolate Land", () => {
|
|||||||
.startingLevel(100)
|
.startingLevel(100)
|
||||||
.enemyLevel(1)
|
.enemyLevel(1)
|
||||||
.enemyMoveset([MoveId.SPLASH])
|
.enemyMoveset([MoveId.SPLASH])
|
||||||
.enemySpecies(Species.MAGCARGO)
|
.enemySpecies(SpeciesId.MAGCARGO)
|
||||||
.enemyHasPassiveAbility(true);
|
.enemyHasPassiveAbility(true);
|
||||||
await game.classicMode.startBattle([Species.MAGIKARP]);
|
await game.classicMode.startBattle([SpeciesId.MAGIKARP]);
|
||||||
|
|
||||||
expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN);
|
expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN);
|
||||||
|
|
||||||
@ -97,7 +102,7 @@ describe("Abilities - Desolate Land", () => {
|
|||||||
|
|
||||||
it("should lift when pokemon returns upon switching from double to single battle", async () => {
|
it("should lift when pokemon returns upon switching from double to single battle", async () => {
|
||||||
game.override.battleStyle("even-doubles").enemyMoveset([MoveId.SPLASH, MoveId.MEMENTO]).startingWave(12);
|
game.override.battleStyle("even-doubles").enemyMoveset([MoveId.SPLASH, MoveId.MEMENTO]).startingWave(12);
|
||||||
await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGCARGO]);
|
await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGCARGO]);
|
||||||
|
|
||||||
expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN);
|
expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN);
|
||||||
|
|
||||||
@ -119,9 +124,9 @@ describe("Abilities - Desolate Land", () => {
|
|||||||
game.override
|
game.override
|
||||||
.battleStyle("single")
|
.battleStyle("single")
|
||||||
.enemyMoveset([MoveId.SPLASH])
|
.enemyMoveset([MoveId.SPLASH])
|
||||||
.enemySpecies(Species.MAGCARGO)
|
.enemySpecies(SpeciesId.MAGCARGO)
|
||||||
.enemyHasPassiveAbility(true);
|
.enemyHasPassiveAbility(true);
|
||||||
await game.classicMode.startBattle([Species.MAGIKARP]);
|
await game.classicMode.startBattle([SpeciesId.MAGIKARP]);
|
||||||
|
|
||||||
expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN);
|
expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN);
|
||||||
|
|
||||||
@ -136,7 +141,7 @@ describe("Abilities - Desolate Land", () => {
|
|||||||
|
|
||||||
it("should lift after fleeing from a wild pokemon", async () => {
|
it("should lift after fleeing from a wild pokemon", async () => {
|
||||||
game.override.enemyAbility(AbilityId.DESOLATE_LAND).ability(AbilityId.BALL_FETCH);
|
game.override.enemyAbility(AbilityId.DESOLATE_LAND).ability(AbilityId.BALL_FETCH);
|
||||||
await game.classicMode.startBattle([Species.MAGIKARP]);
|
await game.classicMode.startBattle([SpeciesId.MAGIKARP]);
|
||||||
expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN);
|
expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN);
|
||||||
|
|
||||||
vi.spyOn(game.scene.getPlayerPokemon()!, "randBattleSeedInt").mockReturnValue(0);
|
vi.spyOn(game.scene.getPlayerPokemon()!, "randBattleSeedInt").mockReturnValue(0);
|
||||||
|
@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle";
|
|||||||
import { toDmgValue } from "#app/utils/common";
|
import { toDmgValue } from "#app/utils/common";
|
||||||
import { AbilityId } from "#enums/ability-id";
|
import { AbilityId } from "#enums/ability-id";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { Stat } from "#enums/stat";
|
import { Stat } from "#enums/stat";
|
||||||
import { StatusEffect } from "#enums/status-effect";
|
import { StatusEffect } from "#enums/status-effect";
|
||||||
import GameManager from "#test/testUtils/gameManager";
|
import GameManager from "#test/testUtils/gameManager";
|
||||||
@ -28,9 +28,9 @@ describe("Abilities - Disguise", () => {
|
|||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
game.override
|
game.override
|
||||||
.battleStyle("single")
|
.battleStyle("single")
|
||||||
.enemySpecies(Species.MIMIKYU)
|
.enemySpecies(SpeciesId.MIMIKYU)
|
||||||
.enemyMoveset(MoveId.SPLASH)
|
.enemyMoveset(MoveId.SPLASH)
|
||||||
.starterSpecies(Species.REGIELEKI)
|
.starterSpecies(SpeciesId.REGIELEKI)
|
||||||
.moveset([MoveId.SHADOW_SNEAK, MoveId.VACUUM_WAVE, MoveId.TOXIC_THREAD, MoveId.SPLASH]);
|
.moveset([MoveId.SHADOW_SNEAK, MoveId.VACUUM_WAVE, MoveId.TOXIC_THREAD, MoveId.SPLASH]);
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -109,7 +109,7 @@ describe("Abilities - Disguise", () => {
|
|||||||
game.override.enemyMoveset([MoveId.SHADOW_SNEAK]);
|
game.override.enemyMoveset([MoveId.SHADOW_SNEAK]);
|
||||||
game.override.starterSpecies(0);
|
game.override.starterSpecies(0);
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.MIMIKYU, Species.FURRET]);
|
await game.classicMode.startBattle([SpeciesId.MIMIKYU, SpeciesId.FURRET]);
|
||||||
|
|
||||||
const mimikyu = game.scene.getPlayerPokemon()!;
|
const mimikyu = game.scene.getPlayerPokemon()!;
|
||||||
const maxHp = mimikyu.getMaxHp();
|
const maxHp = mimikyu.getMaxHp();
|
||||||
@ -133,9 +133,9 @@ describe("Abilities - Disguise", () => {
|
|||||||
it("persists form change when wave changes with no arena reset", async () => {
|
it("persists form change when wave changes with no arena reset", async () => {
|
||||||
game.override.starterSpecies(0);
|
game.override.starterSpecies(0);
|
||||||
game.override.starterForms({
|
game.override.starterForms({
|
||||||
[Species.MIMIKYU]: bustedForm,
|
[SpeciesId.MIMIKYU]: bustedForm,
|
||||||
});
|
});
|
||||||
await game.classicMode.startBattle([Species.FURRET, Species.MIMIKYU]);
|
await game.classicMode.startBattle([SpeciesId.FURRET, SpeciesId.MIMIKYU]);
|
||||||
|
|
||||||
const mimikyu = game.scene.getPlayerParty()[1]!;
|
const mimikyu = game.scene.getPlayerParty()[1]!;
|
||||||
expect(mimikyu.formIndex).toBe(bustedForm);
|
expect(mimikyu.formIndex).toBe(bustedForm);
|
||||||
@ -149,9 +149,9 @@ describe("Abilities - Disguise", () => {
|
|||||||
|
|
||||||
it("reverts to Disguised form on arena reset", async () => {
|
it("reverts to Disguised form on arena reset", async () => {
|
||||||
game.override.startingWave(4);
|
game.override.startingWave(4);
|
||||||
game.override.starterSpecies(Species.MIMIKYU);
|
game.override.starterSpecies(SpeciesId.MIMIKYU);
|
||||||
game.override.starterForms({
|
game.override.starterForms({
|
||||||
[Species.MIMIKYU]: bustedForm,
|
[SpeciesId.MIMIKYU]: bustedForm,
|
||||||
});
|
});
|
||||||
|
|
||||||
await game.classicMode.startBattle();
|
await game.classicMode.startBattle();
|
||||||
@ -171,10 +171,10 @@ describe("Abilities - Disguise", () => {
|
|||||||
game.override.startingWave(10);
|
game.override.startingWave(10);
|
||||||
game.override.starterSpecies(0);
|
game.override.starterSpecies(0);
|
||||||
game.override.starterForms({
|
game.override.starterForms({
|
||||||
[Species.MIMIKYU]: bustedForm,
|
[SpeciesId.MIMIKYU]: bustedForm,
|
||||||
});
|
});
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.MIMIKYU, Species.FURRET]);
|
await game.classicMode.startBattle([SpeciesId.MIMIKYU, SpeciesId.FURRET]);
|
||||||
|
|
||||||
const mimikyu1 = game.scene.getPlayerPokemon()!;
|
const mimikyu1 = game.scene.getPlayerPokemon()!;
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { Species } from "#app/enums/species";
|
import { SpeciesId } from "#app/enums/species";
|
||||||
import { AbilityId } from "#enums/ability-id";
|
import { AbilityId } from "#enums/ability-id";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import GameManager from "#test/testUtils/gameManager";
|
import GameManager from "#test/testUtils/gameManager";
|
||||||
@ -26,10 +26,10 @@ describe("Abilities - Dry Skin", () => {
|
|||||||
.disableCrits()
|
.disableCrits()
|
||||||
.enemyAbility(AbilityId.DRY_SKIN)
|
.enemyAbility(AbilityId.DRY_SKIN)
|
||||||
.enemyMoveset(MoveId.SPLASH)
|
.enemyMoveset(MoveId.SPLASH)
|
||||||
.enemySpecies(Species.CHARMANDER)
|
.enemySpecies(SpeciesId.CHARMANDER)
|
||||||
.ability(AbilityId.BALL_FETCH)
|
.ability(AbilityId.BALL_FETCH)
|
||||||
.moveset([MoveId.SUNNY_DAY, MoveId.RAIN_DANCE, MoveId.SPLASH, MoveId.WATER_GUN])
|
.moveset([MoveId.SUNNY_DAY, MoveId.RAIN_DANCE, MoveId.SPLASH, MoveId.WATER_GUN])
|
||||||
.starterSpecies(Species.CHANDELURE);
|
.starterSpecies(SpeciesId.CHANDELURE);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("during sunlight, lose 1/8 of maximum health at the end of each turn", async () => {
|
it("during sunlight, lose 1/8 of maximum health at the end of each turn", async () => {
|
||||||
|
@ -2,7 +2,7 @@ import { Status } from "#app/data/status-effect";
|
|||||||
import { MoveResult } from "#app/field/pokemon";
|
import { MoveResult } from "#app/field/pokemon";
|
||||||
import { AbilityId } from "#enums/ability-id";
|
import { AbilityId } from "#enums/ability-id";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { StatusEffect } from "#enums/status-effect";
|
import { StatusEffect } from "#enums/status-effect";
|
||||||
import GameManager from "#test/testUtils/gameManager";
|
import GameManager from "#test/testUtils/gameManager";
|
||||||
import Phaser from "phaser";
|
import Phaser from "phaser";
|
||||||
@ -29,13 +29,13 @@ describe("Abilities - Early Bird", () => {
|
|||||||
.ability(AbilityId.EARLY_BIRD)
|
.ability(AbilityId.EARLY_BIRD)
|
||||||
.battleStyle("single")
|
.battleStyle("single")
|
||||||
.disableCrits()
|
.disableCrits()
|
||||||
.enemySpecies(Species.MAGIKARP)
|
.enemySpecies(SpeciesId.MAGIKARP)
|
||||||
.enemyAbility(AbilityId.BALL_FETCH)
|
.enemyAbility(AbilityId.BALL_FETCH)
|
||||||
.enemyMoveset(MoveId.SPLASH);
|
.enemyMoveset(MoveId.SPLASH);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("reduces Rest's sleep time to 1 turn", async () => {
|
it("reduces Rest's sleep time to 1 turn", async () => {
|
||||||
await game.classicMode.startBattle([Species.FEEBAS]);
|
await game.classicMode.startBattle([SpeciesId.FEEBAS]);
|
||||||
|
|
||||||
const player = game.scene.getPlayerPokemon()!;
|
const player = game.scene.getPlayerPokemon()!;
|
||||||
|
|
||||||
@ -60,7 +60,7 @@ describe("Abilities - Early Bird", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("reduces 3-turn sleep to 1 turn", async () => {
|
it("reduces 3-turn sleep to 1 turn", async () => {
|
||||||
await game.classicMode.startBattle([Species.FEEBAS]);
|
await game.classicMode.startBattle([SpeciesId.FEEBAS]);
|
||||||
|
|
||||||
const player = game.scene.getPlayerPokemon()!;
|
const player = game.scene.getPlayerPokemon()!;
|
||||||
player.status = new Status(StatusEffect.SLEEP, 0, 4);
|
player.status = new Status(StatusEffect.SLEEP, 0, 4);
|
||||||
@ -79,7 +79,7 @@ describe("Abilities - Early Bird", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("reduces 1-turn sleep to 0 turns", async () => {
|
it("reduces 1-turn sleep to 0 turns", async () => {
|
||||||
await game.classicMode.startBattle([Species.FEEBAS]);
|
await game.classicMode.startBattle([SpeciesId.FEEBAS]);
|
||||||
|
|
||||||
const player = game.scene.getPlayerPokemon()!;
|
const player = game.scene.getPlayerPokemon()!;
|
||||||
player.status = new Status(StatusEffect.SLEEP, 0, 2);
|
player.status = new Status(StatusEffect.SLEEP, 0, 2);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { BattlerIndex } from "#app/battle";
|
import { BattlerIndex } from "#app/battle";
|
||||||
import { BattlerTagType } from "#app/enums/battler-tag-type";
|
import { BattlerTagType } from "#app/enums/battler-tag-type";
|
||||||
import { Species } from "#app/enums/species";
|
import { SpeciesId } from "#app/enums/species";
|
||||||
import { MovePhase } from "#app/phases/move-phase";
|
import { MovePhase } from "#app/phases/move-phase";
|
||||||
import { TurnEndPhase } from "#app/phases/turn-end-phase";
|
import { TurnEndPhase } from "#app/phases/turn-end-phase";
|
||||||
import { AbilityId } from "#enums/ability-id";
|
import { AbilityId } from "#enums/ability-id";
|
||||||
@ -37,7 +37,7 @@ describe("Abilities - Flash Fire", () => {
|
|||||||
|
|
||||||
it("immune to Fire-type moves", async () => {
|
it("immune to Fire-type moves", async () => {
|
||||||
game.override.enemyMoveset([MoveId.EMBER]).moveset(MoveId.SPLASH);
|
game.override.enemyMoveset([MoveId.EMBER]).moveset(MoveId.SPLASH);
|
||||||
await game.classicMode.startBattle([Species.BLISSEY]);
|
await game.classicMode.startBattle([SpeciesId.BLISSEY]);
|
||||||
|
|
||||||
const blissey = game.scene.getPlayerPokemon()!;
|
const blissey = game.scene.getPlayerPokemon()!;
|
||||||
|
|
||||||
@ -48,7 +48,7 @@ describe("Abilities - Flash Fire", () => {
|
|||||||
|
|
||||||
it("not activate if the Pokémon is protected from the Fire-type move", async () => {
|
it("not activate if the Pokémon is protected from the Fire-type move", async () => {
|
||||||
game.override.enemyMoveset([MoveId.EMBER]).moveset([MoveId.PROTECT]);
|
game.override.enemyMoveset([MoveId.EMBER]).moveset([MoveId.PROTECT]);
|
||||||
await game.classicMode.startBattle([Species.BLISSEY]);
|
await game.classicMode.startBattle([SpeciesId.BLISSEY]);
|
||||||
|
|
||||||
const blissey = game.scene.getPlayerPokemon()!;
|
const blissey = game.scene.getPlayerPokemon()!;
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ describe("Abilities - Flash Fire", () => {
|
|||||||
|
|
||||||
it("activated by Will-O-Wisp", async () => {
|
it("activated by Will-O-Wisp", async () => {
|
||||||
game.override.enemyMoveset([MoveId.WILL_O_WISP]).moveset(MoveId.SPLASH);
|
game.override.enemyMoveset([MoveId.WILL_O_WISP]).moveset(MoveId.SPLASH);
|
||||||
await game.classicMode.startBattle([Species.BLISSEY]);
|
await game.classicMode.startBattle([SpeciesId.BLISSEY]);
|
||||||
|
|
||||||
const blissey = game.scene.getPlayerPokemon()!;
|
const blissey = game.scene.getPlayerPokemon()!;
|
||||||
|
|
||||||
@ -75,7 +75,7 @@ describe("Abilities - Flash Fire", () => {
|
|||||||
it("activated after being frozen", async () => {
|
it("activated after being frozen", async () => {
|
||||||
game.override.enemyMoveset([MoveId.EMBER]).moveset(MoveId.SPLASH);
|
game.override.enemyMoveset([MoveId.EMBER]).moveset(MoveId.SPLASH);
|
||||||
game.override.statusEffect(StatusEffect.FREEZE);
|
game.override.statusEffect(StatusEffect.FREEZE);
|
||||||
await game.classicMode.startBattle([Species.BLISSEY]);
|
await game.classicMode.startBattle([SpeciesId.BLISSEY]);
|
||||||
|
|
||||||
const blissey = game.scene.getPlayerPokemon()!;
|
const blissey = game.scene.getPlayerPokemon()!;
|
||||||
|
|
||||||
@ -87,7 +87,7 @@ describe("Abilities - Flash Fire", () => {
|
|||||||
|
|
||||||
it("not passing with baton pass", async () => {
|
it("not passing with baton pass", async () => {
|
||||||
game.override.enemyMoveset([MoveId.EMBER]).moveset([MoveId.BATON_PASS]);
|
game.override.enemyMoveset([MoveId.EMBER]).moveset([MoveId.BATON_PASS]);
|
||||||
await game.classicMode.startBattle([Species.BLISSEY, Species.CHANSEY]);
|
await game.classicMode.startBattle([SpeciesId.BLISSEY, SpeciesId.CHANSEY]);
|
||||||
|
|
||||||
// ensure use baton pass after enemy moved
|
// ensure use baton pass after enemy moved
|
||||||
game.move.select(MoveId.BATON_PASS);
|
game.move.select(MoveId.BATON_PASS);
|
||||||
@ -97,14 +97,14 @@ describe("Abilities - Flash Fire", () => {
|
|||||||
|
|
||||||
await game.phaseInterceptor.to(TurnEndPhase);
|
await game.phaseInterceptor.to(TurnEndPhase);
|
||||||
const chansey = game.scene.getPlayerPokemon()!;
|
const chansey = game.scene.getPlayerPokemon()!;
|
||||||
expect(game.scene.getPlayerPokemon()!.species.speciesId).toBe(Species.CHANSEY);
|
expect(game.scene.getPlayerPokemon()!.species.speciesId).toBe(SpeciesId.CHANSEY);
|
||||||
expect(chansey!.getTag(BattlerTagType.FIRE_BOOST)).toBeUndefined();
|
expect(chansey!.getTag(BattlerTagType.FIRE_BOOST)).toBeUndefined();
|
||||||
}, 20000);
|
}, 20000);
|
||||||
|
|
||||||
it("boosts Fire-type move when the ability is activated", async () => {
|
it("boosts Fire-type move when the ability is activated", async () => {
|
||||||
game.override.enemyMoveset([MoveId.FIRE_PLEDGE]).moveset([MoveId.EMBER, MoveId.SPLASH]);
|
game.override.enemyMoveset([MoveId.FIRE_PLEDGE]).moveset([MoveId.EMBER, MoveId.SPLASH]);
|
||||||
game.override.enemyAbility(AbilityId.FLASH_FIRE).ability(AbilityId.NONE);
|
game.override.enemyAbility(AbilityId.FLASH_FIRE).ability(AbilityId.NONE);
|
||||||
await game.classicMode.startBattle([Species.BLISSEY]);
|
await game.classicMode.startBattle([SpeciesId.BLISSEY]);
|
||||||
const blissey = game.scene.getPlayerPokemon()!;
|
const blissey = game.scene.getPlayerPokemon()!;
|
||||||
const initialHP = 1000;
|
const initialHP = 1000;
|
||||||
blissey.hp = initialHP;
|
blissey.hp = initialHP;
|
||||||
@ -129,8 +129,8 @@ describe("Abilities - Flash Fire", () => {
|
|||||||
it("still activates regardless of accuracy check", async () => {
|
it("still activates regardless of accuracy check", async () => {
|
||||||
game.override.moveset(MoveId.FIRE_PLEDGE).enemyMoveset(MoveId.EMBER);
|
game.override.moveset(MoveId.FIRE_PLEDGE).enemyMoveset(MoveId.EMBER);
|
||||||
game.override.enemyAbility(AbilityId.NONE).ability(AbilityId.FLASH_FIRE);
|
game.override.enemyAbility(AbilityId.NONE).ability(AbilityId.FLASH_FIRE);
|
||||||
game.override.enemySpecies(Species.BLISSEY);
|
game.override.enemySpecies(SpeciesId.BLISSEY);
|
||||||
await game.classicMode.startBattle([Species.RATTATA]);
|
await game.classicMode.startBattle([SpeciesId.RATTATA]);
|
||||||
|
|
||||||
const blissey = game.scene.getEnemyPokemon()!;
|
const blissey = game.scene.getEnemyPokemon()!;
|
||||||
const initialHP = 1000;
|
const initialHP = 1000;
|
||||||
|
@ -5,7 +5,7 @@ import { Stat } from "#app/enums/stat";
|
|||||||
import { WeatherType } from "#app/enums/weather-type";
|
import { WeatherType } from "#app/enums/weather-type";
|
||||||
import { TurnEndPhase } from "#app/phases/turn-end-phase";
|
import { TurnEndPhase } from "#app/phases/turn-end-phase";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import GameManager from "#test/testUtils/gameManager";
|
import GameManager from "#test/testUtils/gameManager";
|
||||||
import Phaser from "phaser";
|
import Phaser from "phaser";
|
||||||
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
||||||
@ -22,8 +22,8 @@ describe("Abilities - Flower Gift", () => {
|
|||||||
* @param {AbilityId} ability The ability that is active on the field
|
* @param {AbilityId} ability The ability that is active on the field
|
||||||
*/
|
*/
|
||||||
const testRevertFormAgainstAbility = async (game: GameManager, ability: AbilityId) => {
|
const testRevertFormAgainstAbility = async (game: GameManager, ability: AbilityId) => {
|
||||||
game.override.starterForms({ [Species.CASTFORM]: SUNSHINE_FORM }).enemyAbility(ability);
|
game.override.starterForms({ [SpeciesId.CASTFORM]: SUNSHINE_FORM }).enemyAbility(ability);
|
||||||
await game.classicMode.startBattle([Species.CASTFORM]);
|
await game.classicMode.startBattle([SpeciesId.CASTFORM]);
|
||||||
|
|
||||||
game.move.select(MoveId.SPLASH);
|
game.move.select(MoveId.SPLASH);
|
||||||
|
|
||||||
@ -56,7 +56,7 @@ describe("Abilities - Flower Gift", () => {
|
|||||||
const enemy_move = allyAttacker ? MoveId.SPLASH : move;
|
const enemy_move = allyAttacker ? MoveId.SPLASH : move;
|
||||||
const ally_target = allyAttacker ? BattlerIndex.ENEMY : null;
|
const ally_target = allyAttacker ? BattlerIndex.ENEMY : null;
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.CHERRIM, Species.MAGIKARP]);
|
await game.classicMode.startBattle([SpeciesId.CHERRIM, SpeciesId.MAGIKARP]);
|
||||||
const target = allyAttacker ? game.scene.getEnemyField()[0] : game.scene.getPlayerField()[1];
|
const target = allyAttacker ? game.scene.getEnemyField()[0] : game.scene.getPlayerField()[1];
|
||||||
const initialHp = target.getMaxHp();
|
const initialHp = target.getMaxHp();
|
||||||
|
|
||||||
@ -102,7 +102,7 @@ describe("Abilities - Flower Gift", () => {
|
|||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
game.override
|
game.override
|
||||||
.moveset([MoveId.SPLASH, MoveId.SUNSTEEL_STRIKE, MoveId.SUNNY_DAY, MoveId.MUD_SLAP])
|
.moveset([MoveId.SPLASH, MoveId.SUNSTEEL_STRIKE, MoveId.SUNNY_DAY, MoveId.MUD_SLAP])
|
||||||
.enemySpecies(Species.MAGIKARP)
|
.enemySpecies(SpeciesId.MAGIKARP)
|
||||||
.enemyMoveset(MoveId.SPLASH)
|
.enemyMoveset(MoveId.SPLASH)
|
||||||
.enemyAbility(AbilityId.BALL_FETCH)
|
.enemyAbility(AbilityId.BALL_FETCH)
|
||||||
.enemyLevel(100)
|
.enemyLevel(100)
|
||||||
@ -111,7 +111,7 @@ describe("Abilities - Flower Gift", () => {
|
|||||||
|
|
||||||
it("increases the ATK and SPDEF stat stages of the Pokémon with this Ability and its allies by 1.5× during Harsh Sunlight", async () => {
|
it("increases the ATK and SPDEF stat stages of the Pokémon with this Ability and its allies by 1.5× during Harsh Sunlight", async () => {
|
||||||
game.override.battleStyle("double");
|
game.override.battleStyle("double");
|
||||||
await game.classicMode.startBattle([Species.CHERRIM, Species.MAGIKARP]);
|
await game.classicMode.startBattle([SpeciesId.CHERRIM, SpeciesId.MAGIKARP]);
|
||||||
|
|
||||||
const [cherrim, magikarp] = game.scene.getPlayerField();
|
const [cherrim, magikarp] = game.scene.getPlayerField();
|
||||||
const cherrimAtkStat = cherrim.getEffectiveStat(Stat.ATK);
|
const cherrimAtkStat = cherrim.getEffectiveStat(Stat.ATK);
|
||||||
@ -166,7 +166,7 @@ describe("Abilities - Flower Gift", () => {
|
|||||||
|
|
||||||
it("changes the Pokemon's form during Harsh Sunlight", async () => {
|
it("changes the Pokemon's form during Harsh Sunlight", async () => {
|
||||||
game.override.weather(WeatherType.HARSH_SUN);
|
game.override.weather(WeatherType.HARSH_SUN);
|
||||||
await game.classicMode.startBattle([Species.CHERRIM]);
|
await game.classicMode.startBattle([SpeciesId.CHERRIM]);
|
||||||
|
|
||||||
const cherrim = game.scene.getPlayerPokemon()!;
|
const cherrim = game.scene.getPlayerPokemon()!;
|
||||||
expect(cherrim.formIndex).toBe(SUNSHINE_FORM);
|
expect(cherrim.formIndex).toBe(SUNSHINE_FORM);
|
||||||
@ -185,7 +185,7 @@ describe("Abilities - Flower Gift", () => {
|
|||||||
it("reverts to Overcast Form when the Flower Gift is suppressed, changes form under Harsh Sunlight/Sunny when it regains it", async () => {
|
it("reverts to Overcast Form when the Flower Gift is suppressed, changes form under Harsh Sunlight/Sunny when it regains it", async () => {
|
||||||
game.override.enemyMoveset([MoveId.GASTRO_ACID]).weather(WeatherType.HARSH_SUN);
|
game.override.enemyMoveset([MoveId.GASTRO_ACID]).weather(WeatherType.HARSH_SUN);
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.CHERRIM, Species.MAGIKARP]);
|
await game.classicMode.startBattle([SpeciesId.CHERRIM, SpeciesId.MAGIKARP]);
|
||||||
|
|
||||||
const cherrim = game.scene.getPlayerPokemon()!;
|
const cherrim = game.scene.getPlayerPokemon()!;
|
||||||
|
|
||||||
@ -213,7 +213,7 @@ describe("Abilities - Flower Gift", () => {
|
|||||||
it("should be in Overcast Form after the user is switched out", async () => {
|
it("should be in Overcast Form after the user is switched out", async () => {
|
||||||
game.override.weather(WeatherType.SUNNY);
|
game.override.weather(WeatherType.SUNNY);
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.CASTFORM, Species.MAGIKARP]);
|
await game.classicMode.startBattle([SpeciesId.CASTFORM, SpeciesId.MAGIKARP]);
|
||||||
const cherrim = game.scene.getPlayerPokemon()!;
|
const cherrim = game.scene.getPlayerPokemon()!;
|
||||||
|
|
||||||
expect(cherrim.formIndex).toBe(SUNSHINE_FORM);
|
expect(cherrim.formIndex).toBe(SUNSHINE_FORM);
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { BattlerIndex } from "#app/battle";
|
import { BattlerIndex } from "#app/battle";
|
||||||
import { AbilityId } from "#enums/ability-id";
|
import { AbilityId } from "#enums/ability-id";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { Stat } from "#enums/stat";
|
import { Stat } from "#enums/stat";
|
||||||
import { StatusEffect } from "#enums/status-effect";
|
import { StatusEffect } from "#enums/status-effect";
|
||||||
import GameManager from "#test/testUtils/gameManager";
|
import GameManager from "#test/testUtils/gameManager";
|
||||||
@ -29,11 +29,11 @@ describe("Abilities - Flower Veil", () => {
|
|||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
game.override
|
game.override
|
||||||
.moveset([MoveId.SPLASH])
|
.moveset([MoveId.SPLASH])
|
||||||
.enemySpecies(Species.BULBASAUR)
|
.enemySpecies(SpeciesId.BULBASAUR)
|
||||||
.ability(AbilityId.FLOWER_VEIL)
|
.ability(AbilityId.FLOWER_VEIL)
|
||||||
.battleStyle("single")
|
.battleStyle("single")
|
||||||
.disableCrits()
|
.disableCrits()
|
||||||
.enemySpecies(Species.MAGIKARP)
|
.enemySpecies(SpeciesId.MAGIKARP)
|
||||||
.enemyAbility(AbilityId.BALL_FETCH)
|
.enemyAbility(AbilityId.BALL_FETCH)
|
||||||
.enemyMoveset(MoveId.SPLASH);
|
.enemyMoveset(MoveId.SPLASH);
|
||||||
});
|
});
|
||||||
@ -46,7 +46,7 @@ describe("Abilities - Flower Veil", () => {
|
|||||||
.enemyMoveset([MoveId.TACKLE, MoveId.SPLASH])
|
.enemyMoveset([MoveId.TACKLE, MoveId.SPLASH])
|
||||||
.moveset([MoveId.REST, MoveId.SPLASH])
|
.moveset([MoveId.REST, MoveId.SPLASH])
|
||||||
.startingHeldItems([{ name: "FLAME_ORB" }]);
|
.startingHeldItems([{ name: "FLAME_ORB" }]);
|
||||||
await game.classicMode.startBattle([Species.BULBASAUR]);
|
await game.classicMode.startBattle([SpeciesId.BULBASAUR]);
|
||||||
const user = game.scene.getPlayerPokemon()!;
|
const user = game.scene.getPlayerPokemon()!;
|
||||||
game.move.select(MoveId.REST);
|
game.move.select(MoveId.REST);
|
||||||
await game.move.selectEnemyMove(MoveId.TACKLE);
|
await game.move.selectEnemyMove(MoveId.TACKLE);
|
||||||
@ -64,7 +64,7 @@ describe("Abilities - Flower Veil", () => {
|
|||||||
|
|
||||||
it("should prevent drowsiness from yawn for a grass user and its grass allies", async () => {
|
it("should prevent drowsiness from yawn for a grass user and its grass allies", async () => {
|
||||||
game.override.enemyMoveset([MoveId.YAWN]).moveset([MoveId.SPLASH]).battleStyle("double");
|
game.override.enemyMoveset([MoveId.YAWN]).moveset([MoveId.SPLASH]).battleStyle("double");
|
||||||
await game.classicMode.startBattle([Species.BULBASAUR, Species.BULBASAUR]);
|
await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.BULBASAUR]);
|
||||||
|
|
||||||
// Clear the ability of the ally to isolate the test
|
// Clear the ability of the ally to isolate the test
|
||||||
const ally = game.scene.getPlayerField()[1]!;
|
const ally = game.scene.getPlayerField()[1]!;
|
||||||
@ -83,7 +83,7 @@ describe("Abilities - Flower Veil", () => {
|
|||||||
it("should prevent status conditions from moves like Thunder Wave for a grass user and its grass allies", async () => {
|
it("should prevent status conditions from moves like Thunder Wave for a grass user and its grass allies", async () => {
|
||||||
game.override.enemyMoveset([MoveId.THUNDER_WAVE]).moveset([MoveId.SPLASH]).battleStyle("double");
|
game.override.enemyMoveset([MoveId.THUNDER_WAVE]).moveset([MoveId.SPLASH]).battleStyle("double");
|
||||||
vi.spyOn(allMoves[MoveId.THUNDER_WAVE], "accuracy", "get").mockReturnValue(100);
|
vi.spyOn(allMoves[MoveId.THUNDER_WAVE], "accuracy", "get").mockReturnValue(100);
|
||||||
await game.classicMode.startBattle([Species.BULBASAUR]);
|
await game.classicMode.startBattle([SpeciesId.BULBASAUR]);
|
||||||
|
|
||||||
game.move.select(MoveId.SPLASH);
|
game.move.select(MoveId.SPLASH);
|
||||||
await game.move.selectEnemyMove(MoveId.THUNDER_WAVE);
|
await game.move.selectEnemyMove(MoveId.THUNDER_WAVE);
|
||||||
@ -94,7 +94,7 @@ describe("Abilities - Flower Veil", () => {
|
|||||||
|
|
||||||
it("should not prevent status conditions for a non-grass user and its non-grass allies", async () => {
|
it("should not prevent status conditions for a non-grass user and its non-grass allies", async () => {
|
||||||
game.override.enemyMoveset([MoveId.THUNDER_WAVE]).moveset([MoveId.SPLASH]).battleStyle("double");
|
game.override.enemyMoveset([MoveId.THUNDER_WAVE]).moveset([MoveId.SPLASH]).battleStyle("double");
|
||||||
await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]);
|
await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP]);
|
||||||
const [user, ally] = game.scene.getPlayerField();
|
const [user, ally] = game.scene.getPlayerField();
|
||||||
vi.spyOn(allMoves[MoveId.THUNDER_WAVE], "accuracy", "get").mockReturnValue(100);
|
vi.spyOn(allMoves[MoveId.THUNDER_WAVE], "accuracy", "get").mockReturnValue(100);
|
||||||
// Clear the ally ability to isolate the test
|
// Clear the ally ability to isolate the test
|
||||||
@ -114,7 +114,7 @@ describe("Abilities - Flower Veil", () => {
|
|||||||
|
|
||||||
it("should prevent the status drops from enemies for the a grass user and its grass allies", async () => {
|
it("should prevent the status drops from enemies for the a grass user and its grass allies", async () => {
|
||||||
game.override.enemyMoveset([MoveId.GROWL]).moveset([MoveId.SPLASH]).battleStyle("double");
|
game.override.enemyMoveset([MoveId.GROWL]).moveset([MoveId.SPLASH]).battleStyle("double");
|
||||||
await game.classicMode.startBattle([Species.BULBASAUR, Species.BULBASAUR]);
|
await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.BULBASAUR]);
|
||||||
const [user, ally] = game.scene.getPlayerField();
|
const [user, ally] = game.scene.getPlayerField();
|
||||||
// Clear the ally ability to isolate the test
|
// Clear the ally ability to isolate the test
|
||||||
vi.spyOn(ally, "getAbility").mockReturnValue(allAbilities[AbilityId.BALL_FETCH]);
|
vi.spyOn(ally, "getAbility").mockReturnValue(allAbilities[AbilityId.BALL_FETCH]);
|
||||||
@ -127,7 +127,7 @@ describe("Abilities - Flower Veil", () => {
|
|||||||
|
|
||||||
it("should not prevent status drops for a non-grass user and its non-grass allies", async () => {
|
it("should not prevent status drops for a non-grass user and its non-grass allies", async () => {
|
||||||
game.override.enemyMoveset([MoveId.GROWL]).moveset([MoveId.SPLASH]).battleStyle("double");
|
game.override.enemyMoveset([MoveId.GROWL]).moveset([MoveId.SPLASH]).battleStyle("double");
|
||||||
await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]);
|
await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.MAGIKARP]);
|
||||||
const [user, ally] = game.scene.getPlayerField();
|
const [user, ally] = game.scene.getPlayerField();
|
||||||
// Clear the ally ability to isolate the test
|
// Clear the ally ability to isolate the test
|
||||||
vi.spyOn(ally, "getAbility").mockReturnValue(allAbilities[AbilityId.BALL_FETCH]);
|
vi.spyOn(ally, "getAbility").mockReturnValue(allAbilities[AbilityId.BALL_FETCH]);
|
||||||
@ -140,7 +140,7 @@ describe("Abilities - Flower Veil", () => {
|
|||||||
|
|
||||||
it("should not prevent self-inflicted stat drops from moves like Close Combat for a user or its allies", async () => {
|
it("should not prevent self-inflicted stat drops from moves like Close Combat for a user or its allies", async () => {
|
||||||
game.override.moveset([MoveId.CLOSE_COMBAT]).battleStyle("double");
|
game.override.moveset([MoveId.CLOSE_COMBAT]).battleStyle("double");
|
||||||
await game.classicMode.startBattle([Species.BULBASAUR, Species.BULBASAUR]);
|
await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.BULBASAUR]);
|
||||||
const [user, ally] = game.scene.getPlayerField();
|
const [user, ally] = game.scene.getPlayerField();
|
||||||
// Clear the ally ability to isolate the test
|
// Clear the ally ability to isolate the test
|
||||||
vi.spyOn(ally, "getAbility").mockReturnValue(allAbilities[AbilityId.BALL_FETCH]);
|
vi.spyOn(ally, "getAbility").mockReturnValue(allAbilities[AbilityId.BALL_FETCH]);
|
||||||
@ -156,7 +156,7 @@ describe("Abilities - Flower Veil", () => {
|
|||||||
|
|
||||||
it("should prevent the drops while retaining the boosts from spicy extract", async () => {
|
it("should prevent the drops while retaining the boosts from spicy extract", async () => {
|
||||||
game.override.enemyMoveset([MoveId.SPICY_EXTRACT]).moveset([MoveId.SPLASH]);
|
game.override.enemyMoveset([MoveId.SPICY_EXTRACT]).moveset([MoveId.SPLASH]);
|
||||||
await game.classicMode.startBattle([Species.BULBASAUR]);
|
await game.classicMode.startBattle([SpeciesId.BULBASAUR]);
|
||||||
const user = game.scene.getPlayerPokemon()!;
|
const user = game.scene.getPlayerPokemon()!;
|
||||||
game.move.select(MoveId.SPLASH);
|
game.move.select(MoveId.SPLASH);
|
||||||
await game.phaseInterceptor.to("BerryPhase");
|
await game.phaseInterceptor.to("BerryPhase");
|
||||||
|
@ -8,7 +8,7 @@ import { PostSummonPhase } from "#app/phases/post-summon-phase";
|
|||||||
import { QuietFormChangePhase } from "#app/phases/quiet-form-change-phase";
|
import { QuietFormChangePhase } from "#app/phases/quiet-form-change-phase";
|
||||||
import { TurnEndPhase } from "#app/phases/turn-end-phase";
|
import { TurnEndPhase } from "#app/phases/turn-end-phase";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import GameManager from "#test/testUtils/gameManager";
|
import GameManager from "#test/testUtils/gameManager";
|
||||||
import Phaser from "phaser";
|
import Phaser from "phaser";
|
||||||
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
||||||
@ -29,8 +29,8 @@ describe("Abilities - Forecast", () => {
|
|||||||
* @param initialForm The initial form pre form change
|
* @param initialForm The initial form pre form change
|
||||||
*/
|
*/
|
||||||
const testWeatherFormChange = async (game: GameManager, weather: WeatherType, form: number, initialForm?: number) => {
|
const testWeatherFormChange = async (game: GameManager, weather: WeatherType, form: number, initialForm?: number) => {
|
||||||
game.override.weather(weather).starterForms({ [Species.CASTFORM]: initialForm });
|
game.override.weather(weather).starterForms({ [SpeciesId.CASTFORM]: initialForm });
|
||||||
await game.classicMode.startBattle([Species.CASTFORM]);
|
await game.classicMode.startBattle([SpeciesId.CASTFORM]);
|
||||||
|
|
||||||
game.move.select(MoveId.SPLASH);
|
game.move.select(MoveId.SPLASH);
|
||||||
|
|
||||||
@ -43,8 +43,8 @@ describe("Abilities - Forecast", () => {
|
|||||||
* @param {AbilityId} ability The ability that is active on the field
|
* @param {AbilityId} ability The ability that is active on the field
|
||||||
*/
|
*/
|
||||||
const testRevertFormAgainstAbility = async (game: GameManager, ability: AbilityId) => {
|
const testRevertFormAgainstAbility = async (game: GameManager, ability: AbilityId) => {
|
||||||
game.override.starterForms({ [Species.CASTFORM]: SUNNY_FORM }).enemyAbility(ability);
|
game.override.starterForms({ [SpeciesId.CASTFORM]: SUNNY_FORM }).enemyAbility(ability);
|
||||||
await game.classicMode.startBattle([Species.CASTFORM]);
|
await game.classicMode.startBattle([SpeciesId.CASTFORM]);
|
||||||
|
|
||||||
game.move.select(MoveId.SPLASH);
|
game.move.select(MoveId.SPLASH);
|
||||||
|
|
||||||
@ -65,7 +65,7 @@ describe("Abilities - Forecast", () => {
|
|||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
game.override
|
game.override
|
||||||
.moveset([MoveId.SPLASH, MoveId.RAIN_DANCE, MoveId.SUNNY_DAY, MoveId.TACKLE])
|
.moveset([MoveId.SPLASH, MoveId.RAIN_DANCE, MoveId.SUNNY_DAY, MoveId.TACKLE])
|
||||||
.enemySpecies(Species.MAGIKARP)
|
.enemySpecies(SpeciesId.MAGIKARP)
|
||||||
.enemyMoveset(MoveId.SPLASH)
|
.enemyMoveset(MoveId.SPLASH)
|
||||||
.enemyAbility(AbilityId.BALL_FETCH);
|
.enemyAbility(AbilityId.BALL_FETCH);
|
||||||
});
|
});
|
||||||
@ -77,17 +77,17 @@ describe("Abilities - Forecast", () => {
|
|||||||
.moveset([MoveId.RAIN_DANCE, MoveId.SUNNY_DAY, MoveId.SNOWSCAPE, MoveId.SPLASH])
|
.moveset([MoveId.RAIN_DANCE, MoveId.SUNNY_DAY, MoveId.SNOWSCAPE, MoveId.SPLASH])
|
||||||
.battleStyle("double")
|
.battleStyle("double")
|
||||||
.starterForms({
|
.starterForms({
|
||||||
[Species.KYOGRE]: 1,
|
[SpeciesId.KYOGRE]: 1,
|
||||||
[Species.GROUDON]: 1,
|
[SpeciesId.GROUDON]: 1,
|
||||||
[Species.RAYQUAZA]: 1,
|
[SpeciesId.RAYQUAZA]: 1,
|
||||||
});
|
});
|
||||||
await game.classicMode.startBattle([
|
await game.classicMode.startBattle([
|
||||||
Species.CASTFORM,
|
SpeciesId.CASTFORM,
|
||||||
Species.FEEBAS,
|
SpeciesId.FEEBAS,
|
||||||
Species.KYOGRE,
|
SpeciesId.KYOGRE,
|
||||||
Species.GROUDON,
|
SpeciesId.GROUDON,
|
||||||
Species.RAYQUAZA,
|
SpeciesId.RAYQUAZA,
|
||||||
Species.ALTARIA,
|
SpeciesId.ALTARIA,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
vi.spyOn(game.scene.getPlayerParty()[5], "getAbility").mockReturnValue(allAbilities[AbilityId.CLOUD_NINE]);
|
vi.spyOn(game.scene.getPlayerParty()[5], "getAbility").mockReturnValue(allAbilities[AbilityId.CLOUD_NINE]);
|
||||||
@ -200,8 +200,8 @@ describe("Abilities - Forecast", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("has no effect on Pokémon other than Castform", async () => {
|
it("has no effect on Pokémon other than Castform", async () => {
|
||||||
game.override.enemyAbility(AbilityId.FORECAST).enemySpecies(Species.SHUCKLE);
|
game.override.enemyAbility(AbilityId.FORECAST).enemySpecies(SpeciesId.SHUCKLE);
|
||||||
await game.classicMode.startBattle([Species.CASTFORM]);
|
await game.classicMode.startBattle([SpeciesId.CASTFORM]);
|
||||||
|
|
||||||
game.move.select(MoveId.RAIN_DANCE);
|
game.move.select(MoveId.RAIN_DANCE);
|
||||||
await game.phaseInterceptor.to(TurnEndPhase);
|
await game.phaseInterceptor.to(TurnEndPhase);
|
||||||
@ -212,7 +212,7 @@ describe("Abilities - Forecast", () => {
|
|||||||
|
|
||||||
it("reverts to Normal Form when Forecast is suppressed, changes form to match the weather when it regains it", async () => {
|
it("reverts to Normal Form when Forecast is suppressed, changes form to match the weather when it regains it", async () => {
|
||||||
game.override.enemyMoveset([MoveId.GASTRO_ACID]).weather(WeatherType.RAIN);
|
game.override.enemyMoveset([MoveId.GASTRO_ACID]).weather(WeatherType.RAIN);
|
||||||
await game.classicMode.startBattle([Species.CASTFORM, Species.PIKACHU]);
|
await game.classicMode.startBattle([SpeciesId.CASTFORM, SpeciesId.PIKACHU]);
|
||||||
const castform = game.scene.getPlayerPokemon()!;
|
const castform = game.scene.getPlayerPokemon()!;
|
||||||
|
|
||||||
expect(castform.formIndex).toBe(RAINY_FORM);
|
expect(castform.formIndex).toBe(RAINY_FORM);
|
||||||
@ -243,7 +243,7 @@ describe("Abilities - Forecast", () => {
|
|||||||
|
|
||||||
it("does not change Castform's form until after Stealth Rock deals damage", async () => {
|
it("does not change Castform's form until after Stealth Rock deals damage", async () => {
|
||||||
game.override.weather(WeatherType.RAIN).enemyMoveset([MoveId.STEALTH_ROCK]);
|
game.override.weather(WeatherType.RAIN).enemyMoveset([MoveId.STEALTH_ROCK]);
|
||||||
await game.classicMode.startBattle([Species.PIKACHU, Species.CASTFORM]);
|
await game.classicMode.startBattle([SpeciesId.PIKACHU, SpeciesId.CASTFORM]);
|
||||||
|
|
||||||
// First turn - set up stealth rock
|
// First turn - set up stealth rock
|
||||||
game.move.select(MoveId.SPLASH);
|
game.move.select(MoveId.SPLASH);
|
||||||
@ -267,7 +267,7 @@ describe("Abilities - Forecast", () => {
|
|||||||
it("should be in Normal Form after the user is switched out", async () => {
|
it("should be in Normal Form after the user is switched out", async () => {
|
||||||
game.override.weather(WeatherType.RAIN);
|
game.override.weather(WeatherType.RAIN);
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.CASTFORM, Species.MAGIKARP]);
|
await game.classicMode.startBattle([SpeciesId.CASTFORM, SpeciesId.MAGIKARP]);
|
||||||
const castform = game.scene.getPlayerPokemon()!;
|
const castform = game.scene.getPlayerPokemon()!;
|
||||||
|
|
||||||
expect(castform.formIndex).toBe(RAINY_FORM);
|
expect(castform.formIndex).toBe(RAINY_FORM);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import { AbilityId } from "#enums/ability-id";
|
import { AbilityId } from "#enums/ability-id";
|
||||||
import GameManager from "#test/testUtils/gameManager";
|
import GameManager from "#test/testUtils/gameManager";
|
||||||
import Phaser from "phaser";
|
import Phaser from "phaser";
|
||||||
@ -29,13 +29,13 @@ describe("Moves - Friend Guard", () => {
|
|||||||
.battleStyle("double")
|
.battleStyle("double")
|
||||||
.enemyAbility(AbilityId.BALL_FETCH)
|
.enemyAbility(AbilityId.BALL_FETCH)
|
||||||
.enemyMoveset([MoveId.TACKLE, MoveId.SPLASH, MoveId.DRAGON_RAGE])
|
.enemyMoveset([MoveId.TACKLE, MoveId.SPLASH, MoveId.DRAGON_RAGE])
|
||||||
.enemySpecies(Species.SHUCKLE)
|
.enemySpecies(SpeciesId.SHUCKLE)
|
||||||
.moveset([MoveId.SPLASH])
|
.moveset([MoveId.SPLASH])
|
||||||
.startingLevel(100);
|
.startingLevel(100);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should reduce damage that other allied Pokémon receive from attacks (from any Pokémon) by 25%", async () => {
|
it("should reduce damage that other allied Pokémon receive from attacks (from any Pokémon) by 25%", async () => {
|
||||||
await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER]);
|
await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER]);
|
||||||
const [player1, player2] = game.scene.getPlayerField();
|
const [player1, player2] = game.scene.getPlayerField();
|
||||||
const spy = vi.spyOn(player1, "getAttackDamage");
|
const spy = vi.spyOn(player1, "getAttackDamage");
|
||||||
|
|
||||||
@ -76,7 +76,7 @@ describe("Moves - Friend Guard", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("should NOT reduce damage to pokemon with friend guard", async () => {
|
it("should NOT reduce damage to pokemon with friend guard", async () => {
|
||||||
await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER]);
|
await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER]);
|
||||||
|
|
||||||
const player2 = game.scene.getPlayerField()[1];
|
const player2 = game.scene.getPlayerField()[1];
|
||||||
const spy = vi.spyOn(player2, "getAttackDamage");
|
const spy = vi.spyOn(player2, "getAttackDamage");
|
||||||
@ -102,7 +102,7 @@ describe("Moves - Friend Guard", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("should NOT reduce damage from fixed damage attacks", async () => {
|
it("should NOT reduce damage from fixed damage attacks", async () => {
|
||||||
await game.classicMode.startBattle([Species.BULBASAUR, Species.CHARMANDER]);
|
await game.classicMode.startBattle([SpeciesId.BULBASAUR, SpeciesId.CHARMANDER]);
|
||||||
|
|
||||||
const [player1, player2] = game.scene.getPlayerField();
|
const [player1, player2] = game.scene.getPlayerField();
|
||||||
const spy = vi.spyOn(player1, "getAttackDamage");
|
const spy = vi.spyOn(player1, "getAttackDamage");
|
||||||
|
@ -8,7 +8,7 @@ import { StatusEffect } from "#app/enums/status-effect";
|
|||||||
import { WeatherType } from "#app/enums/weather-type";
|
import { WeatherType } from "#app/enums/weather-type";
|
||||||
import { AbilityId } from "#enums/ability-id";
|
import { AbilityId } from "#enums/ability-id";
|
||||||
import { MoveId } from "#enums/move-id";
|
import { MoveId } from "#enums/move-id";
|
||||||
import { Species } from "#enums/species";
|
import { SpeciesId } from "#enums/species";
|
||||||
import GameManager from "#test/testUtils/gameManager";
|
import GameManager from "#test/testUtils/gameManager";
|
||||||
import Phaser from "phaser";
|
import Phaser from "phaser";
|
||||||
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
||||||
@ -34,14 +34,14 @@ describe("Abilities - Good As Gold", () => {
|
|||||||
.ability(AbilityId.GOOD_AS_GOLD)
|
.ability(AbilityId.GOOD_AS_GOLD)
|
||||||
.battleStyle("single")
|
.battleStyle("single")
|
||||||
.disableCrits()
|
.disableCrits()
|
||||||
.enemySpecies(Species.MAGIKARP)
|
.enemySpecies(SpeciesId.MAGIKARP)
|
||||||
.enemyAbility(AbilityId.BALL_FETCH)
|
.enemyAbility(AbilityId.BALL_FETCH)
|
||||||
.enemyMoveset(MoveId.SPLASH);
|
.enemyMoveset(MoveId.SPLASH);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should block normal status moves", async () => {
|
it("should block normal status moves", async () => {
|
||||||
game.override.enemyMoveset([MoveId.GROWL]);
|
game.override.enemyMoveset([MoveId.GROWL]);
|
||||||
await game.classicMode.startBattle([Species.MAGIKARP]);
|
await game.classicMode.startBattle([SpeciesId.MAGIKARP]);
|
||||||
|
|
||||||
const player = game.scene.getPlayerPokemon()!;
|
const player = game.scene.getPlayerPokemon()!;
|
||||||
|
|
||||||
@ -55,7 +55,7 @@ describe("Abilities - Good As Gold", () => {
|
|||||||
|
|
||||||
it("should block memento and prevent the user from fainting", async () => {
|
it("should block memento and prevent the user from fainting", async () => {
|
||||||
game.override.enemyMoveset([MoveId.MEMENTO]);
|
game.override.enemyMoveset([MoveId.MEMENTO]);
|
||||||
await game.classicMode.startBattle([Species.MAGIKARP]);
|
await game.classicMode.startBattle([SpeciesId.MAGIKARP]);
|
||||||
game.move.select(MoveId.MEMENTO);
|
game.move.select(MoveId.MEMENTO);
|
||||||
await game.phaseInterceptor.to("BerryPhase");
|
await game.phaseInterceptor.to("BerryPhase");
|
||||||
expect(game.scene.getPlayerPokemon()!.isFainted()).toBe(false);
|
expect(game.scene.getPlayerPokemon()!.isFainted()).toBe(false);
|
||||||
@ -66,7 +66,7 @@ describe("Abilities - Good As Gold", () => {
|
|||||||
game.override.battleStyle("double");
|
game.override.battleStyle("double");
|
||||||
game.override.enemyMoveset([MoveId.STEALTH_ROCK, MoveId.HAZE]);
|
game.override.enemyMoveset([MoveId.STEALTH_ROCK, MoveId.HAZE]);
|
||||||
game.override.moveset([MoveId.SWORDS_DANCE, MoveId.SAFEGUARD]);
|
game.override.moveset([MoveId.SWORDS_DANCE, MoveId.SAFEGUARD]);
|
||||||
await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]);
|
await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.FEEBAS]);
|
||||||
const [good_as_gold, ball_fetch] = game.scene.getPlayerField();
|
const [good_as_gold, ball_fetch] = game.scene.getPlayerField();
|
||||||
|
|
||||||
// Force second pokemon to have ball fetch to isolate to a single mon.
|
// Force second pokemon to have ball fetch to isolate to a single mon.
|
||||||
@ -87,7 +87,7 @@ describe("Abilities - Good As Gold", () => {
|
|||||||
it("should not block field targeted effects in singles", async () => {
|
it("should not block field targeted effects in singles", async () => {
|
||||||
game.override.battleStyle("single");
|
game.override.battleStyle("single");
|
||||||
game.override.enemyMoveset([MoveId.SPIKES]);
|
game.override.enemyMoveset([MoveId.SPIKES]);
|
||||||
await game.classicMode.startBattle([Species.MAGIKARP]);
|
await game.classicMode.startBattle([SpeciesId.MAGIKARP]);
|
||||||
|
|
||||||
game.move.select(MoveId.SPLASH, 0);
|
game.move.select(MoveId.SPLASH, 0);
|
||||||
await game.phaseInterceptor.to("BerryPhase");
|
await game.phaseInterceptor.to("BerryPhase");
|
||||||
@ -98,7 +98,7 @@ describe("Abilities - Good As Gold", () => {
|
|||||||
it("should block the ally's helping hand", async () => {
|
it("should block the ally's helping hand", async () => {
|
||||||
game.override.battleStyle("double");
|
game.override.battleStyle("double");
|
||||||
game.override.moveset([MoveId.HELPING_HAND, MoveId.TACKLE]);
|
game.override.moveset([MoveId.HELPING_HAND, MoveId.TACKLE]);
|
||||||
await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]);
|
await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.FEEBAS]);
|
||||||
|
|
||||||
game.move.select(MoveId.HELPING_HAND, 0);
|
game.move.select(MoveId.HELPING_HAND, 0);
|
||||||
game.move.select(MoveId.TACKLE, 1);
|
game.move.select(MoveId.TACKLE, 1);
|
||||||
@ -110,7 +110,7 @@ describe("Abilities - Good As Gold", () => {
|
|||||||
// TODO: re-enable when heal bell is fixed
|
// TODO: re-enable when heal bell is fixed
|
||||||
it.todo("should block the ally's heal bell, but only if the good as gold user is on the field", async () => {
|
it.todo("should block the ally's heal bell, but only if the good as gold user is on the field", async () => {
|
||||||
game.override.battleStyle("double").statusEffect(StatusEffect.BURN);
|
game.override.battleStyle("double").statusEffect(StatusEffect.BURN);
|
||||||
await game.classicMode.startBattle([Species.MILOTIC, Species.FEEBAS, Species.ABRA]);
|
await game.classicMode.startBattle([SpeciesId.MILOTIC, SpeciesId.FEEBAS, SpeciesId.ABRA]);
|
||||||
const [milotic, feebas, abra] = game.scene.getPlayerParty();
|
const [milotic, feebas, abra] = game.scene.getPlayerParty();
|
||||||
game.field.mockAbility(milotic, AbilityId.GOOD_AS_GOLD);
|
game.field.mockAbility(milotic, AbilityId.GOOD_AS_GOLD);
|
||||||
game.field.mockAbility(feebas, AbilityId.BALL_FETCH);
|
game.field.mockAbility(feebas, AbilityId.BALL_FETCH);
|
||||||
@ -131,7 +131,7 @@ describe("Abilities - Good As Gold", () => {
|
|||||||
it("should not block field targeted effects like rain dance", async () => {
|
it("should not block field targeted effects like rain dance", async () => {
|
||||||
game.override.battleStyle("single");
|
game.override.battleStyle("single");
|
||||||
game.override.enemyMoveset([MoveId.RAIN_DANCE]);
|
game.override.enemyMoveset([MoveId.RAIN_DANCE]);
|
||||||
await game.classicMode.startBattle([Species.MAGIKARP]);
|
await game.classicMode.startBattle([SpeciesId.MAGIKARP]);
|
||||||
|
|
||||||
game.move.use(MoveId.SPLASH, 0);
|
game.move.use(MoveId.SPLASH, 0);
|
||||||
await game.phaseInterceptor.to("BerryPhase");
|
await game.phaseInterceptor.to("BerryPhase");
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user