From f80574a1a057210875a68f248318154611f3c193 Mon Sep 17 00:00:00 2001 From: AJ Fontaine Date: Sun, 17 Aug 2025 21:41:39 -0400 Subject: [PATCH] Add player faints to Arena Data --- src/battle-scene.ts | 4 ++-- src/field/arena.ts | 10 ++-------- src/phases/game-over-phase.ts | 1 - src/system/arena-data.ts | 4 ++++ src/system/game-data.ts | 7 +------ 5 files changed, 9 insertions(+), 17 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 4d3f190c02a..9e4e7f9928a 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -1508,8 +1508,8 @@ export class BattleScene extends SceneBase { return this.currentBattle; } - newArena(biome: BiomeId, playerFaints = 0): Arena { - this.arena = new Arena(biome, playerFaints); + newArena(biome: BiomeId): Arena { + this.arena = new Arena(biome); this.eventTarget.dispatchEvent(new NewArenaEvent()); this.arenaBg.pipelineData = { diff --git a/src/field/arena.ts b/src/field/arena.ts index 2ce347b5337..19e7e974c6a 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -59,7 +59,7 @@ export class Arena { * Saves the number of times a party pokemon faints during a arena encounter. * {@linkcode globalScene.currentBattle.enemyFaints} is the corresponding faint counter for the enemy (this resets every wave). */ - public playerFaints: number; + public playerFaints = 0; private lastTimeOfDay: TimeOfDay; @@ -68,12 +68,11 @@ export class Arena { public readonly eventTarget: EventTarget = new EventTarget(); - constructor(biome: BiomeId, playerFaints = 0) { + constructor(biome: BiomeId) { this.biomeType = biome; this.bgm = BiomeId[biome].toLowerCase(); this.trainerPool = biomeTrainerPools[biome]; this.updatePoolsForTimeOfDay(); - this.playerFaints = playerFaints; } init() { @@ -854,7 +853,6 @@ export class Arena { this.trySetWeather(WeatherType.NONE); } this.trySetTerrain(TerrainType.NONE, true); - this.resetPlayerFaintCount(); this.removeAllTags(); } @@ -940,10 +938,6 @@ export class Arena { return 0; } } - - resetPlayerFaintCount(): void { - this.playerFaints = 0; - } } export function getBiomeKey(biome: BiomeId): string { diff --git a/src/phases/game-over-phase.ts b/src/phases/game-over-phase.ts index 9b980f9982c..43c34f43ba3 100644 --- a/src/phases/game-over-phase.ts +++ b/src/phases/game-over-phase.ts @@ -340,7 +340,6 @@ export class GameOverPhase extends BattlePhase { challenges: globalScene.gameMode.challenges.map(c => new ChallengeData(c)), mysteryEncounterType: globalScene.currentBattle.mysteryEncounter?.encounterType ?? -1, mysteryEncounterSaveData: globalScene.mysteryEncounterSaveData, - playerFaints: globalScene.arena.playerFaints, } as SessionSaveData; } } diff --git a/src/system/arena-data.ts b/src/system/arena-data.ts index b2a04f96a55..282d1c2b1fa 100644 --- a/src/system/arena-data.ts +++ b/src/system/arena-data.ts @@ -15,6 +15,7 @@ export interface SerializedArenaData { tags?: ArenaTagTypeData[]; positionalTags: SerializedPositionalTag[]; playerTerasUsed?: number; + playerFaints?: number; } export class ArenaData { @@ -24,6 +25,7 @@ export class ArenaData { public tags: ArenaTag[]; public positionalTags: SerializedPositionalTag[] = []; public playerTerasUsed: number; + public playerFaints: number; constructor(source: Arena | SerializedArenaData) { // Exclude any unserializable tags from the serialized data (such as ones only lasting 1 turn). @@ -43,6 +45,7 @@ export class ArenaData { // The assertion here is ok - we ensure that all tags are inside the `posTagConstructorMap` map, // and that all `PositionalTags` will become their respective interfaces when serialized and de-serialized. this.positionalTags = (source.positionalTagManager.tags as unknown as SerializedPositionalTag[]) ?? []; + this.playerFaints = source.playerFaints; return; } @@ -50,5 +53,6 @@ export class ArenaData { this.weather = source.weather ? new Weather(source.weather.weatherType, source.weather.turnsLeft) : null; this.terrain = source.terrain ? new Terrain(source.terrain.terrainType, source.terrain.turnsLeft) : null; this.positionalTags = source.positionalTags ?? []; + this.playerFaints = source.playerFaints ?? 0; } } diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 90cbf6e18cc..a27e59bd25c 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -134,10 +134,6 @@ export interface SessionSaveData { challenges: ChallengeData[]; mysteryEncounterType: MysteryEncounterType | -1; // Only defined when current wave is ME, mysteryEncounterSaveData: MysteryEncounterSaveData; - /** - * Counts the amount of pokemon fainted in your party during the current arena encounter. - */ - playerFaints: number; } interface Unlocks { @@ -941,7 +937,6 @@ export class GameData { challenges: globalScene.gameMode.challenges.map(c => new ChallengeData(c)), mysteryEncounterType: globalScene.currentBattle.mysteryEncounter?.encounterType ?? -1, mysteryEncounterSaveData: globalScene.mysteryEncounterSaveData, - playerFaints: globalScene.arena.playerFaints, } as SessionSaveData; } @@ -1079,7 +1074,7 @@ export class GameData { globalScene.mysteryEncounterSaveData = new MysteryEncounterSaveData(sessionData.mysteryEncounterSaveData); - globalScene.newArena(sessionData.arena.biome, sessionData.playerFaints); + globalScene.newArena(sessionData.arena.biome); const battleType = sessionData.battleType || 0; const trainerConfig = sessionData.trainer ? trainerConfigs[sessionData.trainer.trainerType] : null;