From b0d29eb232c5887669d8a687053535693b65de60 Mon Sep 17 00:00:00 2001 From: Christopher Schmidt Date: Sat, 25 Jan 2025 12:33:09 -0500 Subject: [PATCH] Create new turnData field for tracking damageResults, check for HitResult in Reviver Seed modifier --- src/field/pokemon.ts | 8 ++++++++ src/modifier/modifier.ts | 6 +++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 731d5c8fbe7..31ab2c44e1e 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -3060,6 +3060,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @returns integer of damage done */ damageAndUpdate(damage: number, result?: DamageResult, critical: boolean = false, ignoreSegments: boolean = false, preventEndure: boolean = false, ignoreFaintPhase: boolean = false, source?: Pokemon): number { + // When damage is done from any source (Move or Indirect damage, e.g. weather), store latest occurrence in damageSources[0] + if (result !== undefined) { + this.turnData.damageSources.unshift(result); + } const damagePhase = new DamageAnimPhase(this.getBattlerIndex(), damage, result as DamageResult, critical); globalScene.unshiftPhase(damagePhase); if (this.switchOutStatus && source) { @@ -5365,6 +5369,10 @@ export class PokemonTurnData { * forced to act again in the same turn */ public extraTurns: number = 0; + /** + * Used to track damage sources from HitResult.OTHER + */ + public damageSources: DamageResult[] = []; } export enum AiType { diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index c51fa129efe..975f9d07d05 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -5,7 +5,7 @@ import { allMoves } from "#app/data/move"; import { MAX_PER_TYPE_POKEBALLS } from "#app/data/pokeball"; import { type FormChangeItem, SpeciesFormChangeItemTrigger, SpeciesFormChangeLapseTeraTrigger, SpeciesFormChangeTeraTrigger } from "#app/data/pokemon-forms"; import { getStatusEffectHealText } from "#app/data/status-effect"; -import Pokemon, { type PlayerPokemon } from "#app/field/pokemon"; +import Pokemon, { HitResult, type PlayerPokemon } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import Overrides from "#app/overrides"; import { EvolutionPhase } from "#app/phases/evolution-phase"; @@ -1927,6 +1927,10 @@ export class PokemonInstantReviveModifier extends PokemonHeldItemModifier { * @returns always `true` */ override apply(pokemon: Pokemon): boolean { + // Do not revive if damage is indirect + if (pokemon.turnData?.damageSources?.at(0) === HitResult.OTHER) { + return false; + } // Restore the Pokemon to half HP globalScene.unshiftPhase(new PokemonHealPhase(pokemon.getBattlerIndex(), toDmgValue(pokemon.getMaxHp() / 2), i18next.t("modifier:pokemonInstantReviveApply", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), typeName: this.type.name }), false, false, true));