diff --git a/src/battle.ts b/src/battle.ts index 7ede7b2982e..ab94d1a24ad 100644 --- a/src/battle.ts +++ b/src/battle.ts @@ -44,6 +44,7 @@ export enum ClassicFixedBossWaves { ELITE_FOUR_4 = 188, CHAMPION = 190, RIVAL_6 = 195, + ETERNATUS = 200, } export enum BattleType { @@ -250,7 +251,7 @@ export default class Battle { } else { return this.trainer?.getMixedBattleBgm() ?? null; } - } else if (this.gameMode.isClassic && this.waveIndex > 195 && this.battleSpec !== BattleSpec.FINAL_BOSS) { + } else if (this.gameMode.isClassic && this.waveIndex > ClassicFixedBossWaves.RIVAL_6 && this.battleSpec !== BattleSpec.FINAL_BOSS) { return "end_summit"; } const wildOpponents = globalScene.getEnemyParty(); @@ -419,7 +420,7 @@ export default class Battle { } } - if (globalScene.gameMode.isClassic && this.waveIndex <= 4) { + if (globalScene.gameMode.isClassic && this.waveIndex < ClassicFixedBossWaves.TOWN_YOUNGSTER) { return "battle_wild"; } diff --git a/src/data/trainer-config.ts b/src/data/trainer-config.ts index 016a2c9bca6..319dcd6ebd4 100644 --- a/src/data/trainer-config.ts +++ b/src/data/trainer-config.ts @@ -22,6 +22,7 @@ import { PartyMemberStrength } from "#enums/party-member-strength"; import { Species } from "#enums/species"; import { TrainerType } from "#enums/trainer-type"; import { Gender } from "#app/data/gender"; +import { ClassicFixedBossWaves } from "#app/battle"; /** Minimum BST for Pokemon generated onto the Elite Four's teams */ const ELITE_FOUR_MINIMUM_BST = 460; @@ -1129,21 +1130,25 @@ interface TrainerConfigs { } /** - * The function to get variable strength grunts + * The function to get the appropriate strength template for grunts and admins. + * Each successive evil team battle has higher strength template. + * The exception is Grunt 4 and Admin 2, who share the GYM_LEADER_5 template. + * The Leader's strength template is defined separately. + * @see {@linkcode initForEvilTeamLeader} * @returns the correct TrainerPartyTemplate */ function getEvilGruntPartyTemplate(): TrainerPartyTemplate { - const waveIndex = globalScene.currentBattle?.waveIndex; - if (waveIndex < 40) { - return trainerPartyTemplates.TWO_AVG; - } else if (waveIndex < 63) { - return trainerPartyTemplates.THREE_AVG; - } else if (waveIndex < 65) { - return trainerPartyTemplates.TWO_AVG_ONE_STRONG; - } else if (waveIndex < 112) { - return trainerPartyTemplates.GYM_LEADER_4; // 3avg 1 strong 1 stronger - } else { - return trainerPartyTemplates.GYM_LEADER_5; // 3 avg 2 strong 1 stronger + switch (globalScene.currentBattle?.waveIndex) { + case ClassicFixedBossWaves.EVIL_GRUNT_1: + return trainerPartyTemplates.TWO_AVG; + case ClassicFixedBossWaves.EVIL_GRUNT_2: + return trainerPartyTemplates.THREE_AVG; + case ClassicFixedBossWaves.EVIL_GRUNT_3: + return trainerPartyTemplates.TWO_AVG_ONE_STRONG; + case ClassicFixedBossWaves.EVIL_ADMIN_1: + return trainerPartyTemplates.GYM_LEADER_4; // 3 avg 1 strong 1 stronger + default: + return trainerPartyTemplates.GYM_LEADER_5; // 3 avg 2 strong 1 stronger } } diff --git a/src/game-mode.ts b/src/game-mode.ts index 1da125ea55a..bfc23768643 100644 --- a/src/game-mode.ts +++ b/src/game-mode.ts @@ -1,6 +1,6 @@ import i18next from "i18next"; import type { FixedBattleConfigs } from "./battle"; -import { classicFixedBattles, FixedBattleConfig } from "./battle"; +import { classicFixedBattles, ClassicFixedBossWaves, FixedBattleConfig } from "./battle"; import type { Challenge } from "./data/challenge"; import { allChallenges, applyChallenges, ChallengeType, copyChallenge } from "./data/challenge"; import type PokemonSpecies from "./data/pokemon-species"; @@ -215,7 +215,7 @@ export class GameMode implements GameModeConfig { switch (modeId) { case GameModes.CLASSIC: case GameModes.CHALLENGE: - return waveIndex === 200; + return waveIndex === ClassicFixedBossWaves.ETERNATUS; case GameModes.ENDLESS: case GameModes.SPLICED_ENDLESS: return !(waveIndex % 250); diff --git a/src/phases/encounter-phase.ts b/src/phases/encounter-phase.ts index 1dd275ab130..468bf448245 100644 --- a/src/phases/encounter-phase.ts +++ b/src/phases/encounter-phase.ts @@ -1,4 +1,4 @@ -import { BattlerIndex, BattleType } from "#app/battle"; +import { BattlerIndex, BattleType, ClassicFixedBossWaves } from "#app/battle"; import { globalScene } from "#app/global-scene"; import { PLAYER_PARTY_MAX_SIZE } from "#app/constants"; import { applyAbAttrs, SyncEncounterNatureAbAttr } from "#app/data/ability"; @@ -58,7 +58,7 @@ export class EncounterPhase extends BattlePhase { globalScene.eventTarget.dispatchEvent(new EncounterPhaseEvent()); // Failsafe if players somehow skip floor 200 in classic mode - if (globalScene.gameMode.isClassic && globalScene.currentBattle.waveIndex > 200) { + if (globalScene.gameMode.isClassic && globalScene.currentBattle.waveIndex > ClassicFixedBossWaves.ETERNATUS) { globalScene.unshiftPhase(new GameOverPhase()); } diff --git a/src/phases/game-over-phase.ts b/src/phases/game-over-phase.ts index d4b529fe00e..aaa736361aa 100644 --- a/src/phases/game-over-phase.ts +++ b/src/phases/game-over-phase.ts @@ -1,5 +1,5 @@ import { clientSessionId } from "#app/account"; -import { BattleType } from "#app/battle"; +import { BattleType, ClassicFixedBossWaves } from "#app/battle"; import { globalScene } from "#app/global-scene"; import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import { getCharVariantFromDialogue } from "#app/data/dialogue"; @@ -46,7 +46,7 @@ export class GameOverPhase extends BattlePhase { super.start(); // Failsafe if players somehow skip floor 200 in classic mode - if (globalScene.gameMode.isClassic && globalScene.currentBattle.waveIndex > 200) { + if (globalScene.gameMode.isClassic && globalScene.currentBattle.waveIndex > ClassicFixedBossWaves.ETERNATUS) { this.isVictory = true; }