diff --git a/src/data/move.ts b/src/data/move.ts index dbb29d4c9d1..c1296c25d4a 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -3,7 +3,7 @@ import { BattleEndPhase, MoveEndPhase, MovePhase, NewBattlePhase, PartyStatusCur import { BattleStat, getBattleStatName } from "./battle-stat"; import { EncoreTag, GulpMissileTag, HelpingHandTag, SemiInvulnerableTag, StockpilingTag, TypeBoostTag } from "./battler-tags"; import { getPokemonNameWithAffix } from "../messages"; -import Pokemon, { AttackMoveResult, EnemyPokemon, HitResult, MoveResult, PlayerPokemon, PokemonMove, TurnMove } from "../field/pokemon"; +import Pokemon, { AttackMoveResult, DamageResult, EnemyPokemon, HitResult, MoveResult, PlayerPokemon, PokemonMove, TurnMove } from "../field/pokemon"; import { StatusEffect, getStatusEffectHealText, isNonVolatileStatusEffect, getNonVolatileStatusEffects} from "./status-effect"; import { getTypeResistances, Type } from "./type"; import { Constructor } from "#app/utils"; @@ -1259,6 +1259,8 @@ export class SacrificialAttr extends MoveEffectAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { user.damageAndUpdate(user.hp, HitResult.OTHER, false, true, true); user.turnData.damageTaken += user.hp; + const attackResult = { move: move.id, result: HitResult.OTHER as DamageResult, damage: user.hp, critical: false, sourceId: user.id }; + user.turnData.attacksReceived.unshift(attackResult); return true; } diff --git a/src/phases.ts b/src/phases.ts index f561ea6f3fc..720e1b45263 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -3795,7 +3795,9 @@ export class FaintPhase extends PokemonPhase { if (pokemon.turnData?.attacksReceived?.length) { const lastAttack = pokemon.turnData.attacksReceived[0]; - applyPostFaintAbAttrs(PostFaintAbAttr, pokemon, this.scene.getPokemonById(lastAttack.sourceId), new PokemonMove(lastAttack.move).getMove(), lastAttack.result); + if (lastAttack.sourceId !== pokemon.id) { // prevent applying faint abilities to self + applyPostFaintAbAttrs(PostFaintAbAttr, pokemon, this.scene.getPokemonById(lastAttack.sourceId), new PokemonMove(lastAttack.move).getMove(), lastAttack.result); + } } const alivePlayField = this.scene.getField(true);