Add player faint count to ArenaData, track total player/enemy faints in BattleScene

This commit is contained in:
AJ Fontaine 2025-02-26 21:05:34 -05:00
parent de148277ea
commit 8d051b07b5
5 changed files with 22 additions and 12 deletions

View File

@ -339,6 +339,8 @@ export default class BattleScene extends SceneBase {
public currentBattle: Battle; public currentBattle: Battle;
public pokeballCounts: PokeballCounts; public pokeballCounts: PokeballCounts;
public money: number; public money: number;
public totalPlayerFaints: number;
public totalEnemyFaints: number;
public pokemonInfoContainer: PokemonInfoContainer; public pokemonInfoContainer: PokemonInfoContainer;
private party: PlayerPokemon[]; private party: PlayerPokemon[];
/** Session save data that pertains to Mystery Encounters */ /** Session save data that pertains to Mystery Encounters */
@ -1401,6 +1403,8 @@ export default class BattleScene extends SceneBase {
this.score = 0; this.score = 0;
this.money = 0; this.money = 0;
this.totalPlayerFaints = 0;
this.totalEnemyFaints = 0;
this.lockModifierTiers = false; this.lockModifierTiers = false;
@ -1794,8 +1798,8 @@ export default class BattleScene extends SceneBase {
return this.currentBattle; return this.currentBattle;
} }
newArena(biome: Biome, playerFaints?: number): Arena { newArena(biome: Biome): Arena {
this.arena = new Arena(biome, Biome[biome].toLowerCase(), playerFaints); this.arena = new Arena(biome, Biome[biome].toLowerCase());
this.eventTarget.dispatchEvent(new NewArenaEvent()); this.eventTarget.dispatchEvent(new NewArenaEvent());
this.arenaBg.pipelineData = { this.arenaBg.pipelineData = {

View File

@ -58,14 +58,14 @@ export class Arena {
public readonly eventTarget: EventTarget = new EventTarget(); public readonly eventTarget: EventTarget = new EventTarget();
constructor(biome: Biome, bgm: string, playerFaints: number = 0) { constructor(biome: Biome, bgm: string) {
this.biomeType = biome; this.biomeType = biome;
this.tags = []; this.tags = [];
this.bgm = bgm; this.bgm = bgm;
this.trainerPool = biomeTrainerPools[biome]; this.trainerPool = biomeTrainerPools[biome];
this.updatePoolsForTimeOfDay(); this.updatePoolsForTimeOfDay();
this.playerTerasUsed = 0; this.playerTerasUsed = 0;
this.playerFaints = playerFaints; this.playerFaints = 0;
} }
init() { init() {
@ -696,7 +696,6 @@ export class Arena {
this.trySetWeather(WeatherType.NONE, false); this.trySetWeather(WeatherType.NONE, false);
} }
this.trySetTerrain(TerrainType.NONE, false, true); this.trySetTerrain(TerrainType.NONE, false, true);
this.resetPlayerFaintCount();
this.removeAllTags(); this.removeAllTags();
} }
@ -782,10 +781,6 @@ export class Arena {
return 0; return 0;
} }
} }
resetPlayerFaintCount(): void {
this.playerFaints = 0;
}
} }
export function getBiomeKey(biome: Biome): string { export function getBiomeKey(biome: Biome): string {

View File

@ -100,9 +100,11 @@ export class FaintPhase extends PokemonPhase {
if (pokemon.isPlayer()) { if (pokemon.isPlayer()) {
globalScene.arena.playerFaints += 1; globalScene.arena.playerFaints += 1;
globalScene.currentBattle.playerFaintsHistory.push({ pokemon: pokemon, turn: globalScene.currentBattle.turn }); globalScene.currentBattle.playerFaintsHistory.push({ pokemon: pokemon, turn: globalScene.currentBattle.turn });
globalScene.totalPlayerFaints++;
} else { } else {
globalScene.currentBattle.enemyFaints += 1; globalScene.currentBattle.enemyFaints += 1;
globalScene.currentBattle.enemyFaintsHistory.push({ pokemon: pokemon, turn: globalScene.currentBattle.turn }); globalScene.currentBattle.enemyFaintsHistory.push({ pokemon: pokemon, turn: globalScene.currentBattle.turn });
globalScene.totalEnemyFaints++;
} }
globalScene.queueMessage(i18next.t("battle:fainted", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), null, true); globalScene.queueMessage(i18next.t("battle:fainted", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), null, true);

View File

@ -11,6 +11,7 @@ export default class ArenaData {
public terrain: Terrain | null; public terrain: Terrain | null;
public tags: ArenaTag[]; public tags: ArenaTag[];
public playerTerasUsed: number; public playerTerasUsed: number;
public playerFaints: number;
constructor(source: Arena | any) { constructor(source: Arena | any) {
const sourceArena = source instanceof Arena ? source as Arena : null; const sourceArena = source instanceof Arena ? source as Arena : null;
@ -18,6 +19,7 @@ export default class ArenaData {
this.weather = sourceArena ? sourceArena.weather : source.weather ? new Weather(source.weather.weatherType, source.weather.turnsLeft) : null; this.weather = sourceArena ? sourceArena.weather : source.weather ? new Weather(source.weather.weatherType, source.weather.turnsLeft) : null;
this.terrain = sourceArena ? sourceArena.terrain : source.terrain ? new Terrain(source.terrain.terrainType, source.terrain.turnsLeft) : null; this.terrain = sourceArena ? sourceArena.terrain : source.terrain ? new Terrain(source.terrain.terrainType, source.terrain.turnsLeft) : null;
this.playerTerasUsed = (sourceArena ? sourceArena.playerTerasUsed : source.playerTerasUsed) ?? 0; this.playerTerasUsed = (sourceArena ? sourceArena.playerTerasUsed : source.playerTerasUsed) ?? 0;
this.playerFaints = (sourceArena ? sourceArena.playerFaints : source.playerFaints) ?? 0;
this.tags = []; this.tags = [];
if (source.tags) { if (source.tags) {

View File

@ -144,9 +144,10 @@ export interface SessionSaveData {
mysteryEncounterType: MysteryEncounterType | -1; // Only defined when current wave is ME, mysteryEncounterType: MysteryEncounterType | -1; // Only defined when current wave is ME,
mysteryEncounterSaveData: MysteryEncounterSaveData; mysteryEncounterSaveData: MysteryEncounterSaveData;
/** /**
* Counts the amount of pokemon fainted in your party during the current arena encounter. * Counts the amount of pokemon fainted in your party throughout the run.
*/ */
playerFaints: number; playerFaints: number;
enemyFaints: number;
} }
interface Unlocks { interface Unlocks {
@ -972,7 +973,8 @@ export class GameData {
challenges: globalScene.gameMode.challenges.map(c => new ChallengeData(c)), challenges: globalScene.gameMode.challenges.map(c => new ChallengeData(c)),
mysteryEncounterType: globalScene.currentBattle.mysteryEncounter?.encounterType ?? -1, mysteryEncounterType: globalScene.currentBattle.mysteryEncounter?.encounterType ?? -1,
mysteryEncounterSaveData: globalScene.mysteryEncounterSaveData, mysteryEncounterSaveData: globalScene.mysteryEncounterSaveData,
playerFaints: globalScene.arena.playerFaints playerFaints: globalScene.totalPlayerFaints,
enemyFaints: globalScene.totalEnemyFaints
} as SessionSaveData; } as SessionSaveData;
} }
@ -1064,7 +1066,10 @@ export class GameData {
globalScene.mysteryEncounterSaveData = new MysteryEncounterSaveData(sessionData.mysteryEncounterSaveData); globalScene.mysteryEncounterSaveData = new MysteryEncounterSaveData(sessionData.mysteryEncounterSaveData);
globalScene.newArena(sessionData.arena.biome, sessionData.playerFaints); globalScene.totalPlayerFaints = sessionData.playerFaints;
globalScene.totalEnemyFaints = sessionData.enemyFaints;
globalScene.newArena(sessionData.arena.biome);
const battleType = sessionData.battleType || 0; const battleType = sessionData.battleType || 0;
const trainerConfig = sessionData.trainer ? trainerConfigs[sessionData.trainer.trainerType] : null; const trainerConfig = sessionData.trainer ? trainerConfigs[sessionData.trainer.trainerType] : null;
@ -1092,6 +1097,8 @@ export class GameData {
globalScene.arena.playerTerasUsed = sessionData.arena.playerTerasUsed; globalScene.arena.playerTerasUsed = sessionData.arena.playerTerasUsed;
globalScene.arena.playerFaints = sessionData.arena.playerFaints;
globalScene.arena.tags = sessionData.arena.tags; globalScene.arena.tags = sessionData.arena.tags;
if (globalScene.arena.tags) { if (globalScene.arena.tags) {
for (const tag of globalScene.arena.tags) { for (const tag of globalScene.arena.tags) {