diff --git a/src/data/ability.ts b/src/data/ability.ts index 9833f0b69f3..c22fddda73e 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -1036,7 +1036,7 @@ export class PostDefendContactDamageAbAttr extends PostDefendAbAttr { override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): boolean { if (!simulated && move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) && !attacker.hasAbilityWithAttr(BlockNonDirectDamageAbAttr) && !move.hitsSubstitute(attacker, pokemon)) { - attacker.damageAndUpdate(Utils.toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)), HitResult.INDIRECT); + attacker.damageAndUpdate(Utils.toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)), { result: HitResult.INDIRECT }); attacker.turnData.damageTaken += Utils.toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)); return true; } @@ -3738,7 +3738,7 @@ export class PostWeatherLapseDamageAbAttr extends PostWeatherLapseAbAttr { if (!simulated) { const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; globalScene.queueMessage(i18next.t("abilityTriggers:postWeatherLapseDamage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName })); - pokemon.damageAndUpdate(Utils.toDmgValue(pokemon.getMaxHp() / (16 / this.damageFactor)), HitResult.INDIRECT); + pokemon.damageAndUpdate(Utils.toDmgValue(pokemon.getMaxHp() / (16 / this.damageFactor)), { result: HitResult.INDIRECT }); } return true; @@ -4050,7 +4050,7 @@ export class PostTurnHurtIfSleepingAbAttr extends PostTurnAbAttr { for (const opp of pokemon.getOpponents()) { if ((opp.status?.effect === StatusEffect.SLEEP || opp.hasAbility(Abilities.COMATOSE)) && !opp.hasAbilityWithAttr(BlockNonDirectDamageAbAttr) && !opp.switchOutStatus) { if (!simulated) { - opp.damageAndUpdate(Utils.toDmgValue(opp.getMaxHp() / 8), HitResult.INDIRECT); + opp.damageAndUpdate(Utils.toDmgValue(opp.getMaxHp() / 8), { result: HitResult.INDIRECT }); globalScene.queueMessage(i18next.t("abilityTriggers:badDreams", { pokemonName: getPokemonNameWithAffix(opp) })); } hadEffect = true; @@ -4532,7 +4532,7 @@ export class PostFaintContactDamageAbAttr extends PostFaintAbAttr { return false; } if (!simulated) { - attacker.damageAndUpdate(Utils.toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)), HitResult.INDIRECT); + attacker.damageAndUpdate(Utils.toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)), { result: HitResult.INDIRECT }); attacker.turnData.damageTaken += Utils.toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)); } return true; @@ -4557,7 +4557,7 @@ export class PostFaintHPDamageAbAttr extends PostFaintAbAttr { applyPostFaint(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker?: Pokemon, move?: Move, hitResult?: HitResult, ...args: any[]): boolean { if (move !== undefined && attacker !== undefined && !simulated) { //If the mon didn't die to indirect damage const damage = pokemon.turnData.attacksReceived[0].damage; - attacker.damageAndUpdate((damage), HitResult.INDIRECT); + attacker.damageAndUpdate((damage), { result: HitResult.INDIRECT }); attacker.turnData.damageTaken += damage; } return true; @@ -4956,7 +4956,7 @@ export class FormBlockDamageAbAttr extends ReceivedMoveDamageMultiplierAbAttr { (args[0] as Utils.NumberHolder).value = this.multiplier; pokemon.removeTag(this.tagType); if (this.recoilDamageFunc) { - pokemon.damageAndUpdate(this.recoilDamageFunc(pokemon), HitResult.INDIRECT, false, true, true); + pokemon.damageAndUpdate(this.recoilDamageFunc(pokemon), { result: HitResult.INDIRECT, ignoreSegments: true, ignoreFaintPhase: true }); } } return true; diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index 74dbe629698..f245343a284 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -698,7 +698,7 @@ class SpikesTag extends ArenaTrapTag { const damage = toDmgValue(pokemon.getMaxHp() * damageHpRatio); globalScene.queueMessage(i18next.t("arenaTag:spikesActivateTrap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); - pokemon.damageAndUpdate(damage, HitResult.INDIRECT); + pokemon.damageAndUpdate(damage, { result: HitResult.INDIRECT }); if (pokemon.turnData) { pokemon.turnData.damageTaken += damage; } @@ -864,7 +864,7 @@ class StealthRockTag extends ArenaTrapTag { } const damage = toDmgValue(pokemon.getMaxHp() * damageHpRatio); globalScene.queueMessage(i18next.t("arenaTag:stealthRockActivateTrap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); - pokemon.damageAndUpdate(damage, HitResult.INDIRECT); + pokemon.damageAndUpdate(damage, { result: HitResult.INDIRECT }); if (pokemon.turnData) { pokemon.turnData.damageTaken += damage; } @@ -1148,7 +1148,7 @@ class FireGrassPledgeTag extends ArenaTag { globalScene.queueMessage(i18next.t("arenaTag:fireGrassPledgeLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); // TODO: Replace this with a proper animation globalScene.unshiftPhase(new CommonAnimPhase(pokemon.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.MAGMA_STORM)); - pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 8), HitResult.INDIRECT); + pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 8), { result: HitResult.INDIRECT }); }); return super.lapse(arena); diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 36ec3460c02..7be8350be36 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -666,7 +666,7 @@ export class ConfusedTag extends BattlerTag { const def = pokemon.getEffectiveStat(Stat.DEF); const damage = toDmgValue(((((2 * pokemon.level / 5 + 2) * 40 * atk / def) / 50) + 2) * (pokemon.randSeedIntRange(85, 100) / 100)); globalScene.queueMessage(i18next.t("battlerTags:confusedLapseHurtItself")); - pokemon.damageAndUpdate(damage, HitResult.CONFUSION); + pokemon.damageAndUpdate(damage, { result: HitResult.CONFUSION }); pokemon.battleData.hitCount++; (globalScene.getCurrentPhase() as MovePhase).cancel(); } @@ -723,7 +723,7 @@ export class DestinyBondTag extends BattlerTag { pokemonNameWithAffix2: getPokemonNameWithAffix(pokemon) }) ); - pokemon.damageAndUpdate(pokemon.hp, HitResult.INDIRECT_KO, false, true); + pokemon.damageAndUpdate(pokemon.hp, { result: HitResult.INDIRECT_KO, ignoreSegments: true }); return false; } } @@ -841,7 +841,7 @@ export class SeedTag extends BattlerTag { if (!cancelled.value) { globalScene.unshiftPhase(new CommonAnimPhase(source.getBattlerIndex(), pokemon.getBattlerIndex(), CommonAnim.LEECH_SEED)); - const damage = pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 8), HitResult.INDIRECT); + const damage = pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 8), { result: HitResult.INDIRECT }); const reverseDrain = pokemon.hasAbilityWithAttr(ReverseDrainAbAttr, false); globalScene.unshiftPhase(new PokemonHealPhase(source.getBattlerIndex(), !reverseDrain ? damage : damage * -1, @@ -898,7 +898,7 @@ export class PowderTag extends BattlerTag { const cancelDamage = new BooleanHolder(false); applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelDamage); if (!cancelDamage.value) { - pokemon.damageAndUpdate(Math.floor(pokemon.getMaxHp() / 4), HitResult.INDIRECT); + pokemon.damageAndUpdate(Math.floor(pokemon.getMaxHp() / 4), { result: HitResult.INDIRECT }); } // "When the flame touched the powder\non the Pokémon, it exploded!" @@ -940,7 +940,7 @@ export class NightmareTag extends BattlerTag { applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); if (!cancelled.value) { - pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 4), HitResult.INDIRECT); + pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 4), { result: HitResult.INDIRECT }); } } @@ -1268,7 +1268,7 @@ export abstract class DamagingTrapTag extends TrappedTag { applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); if (!cancelled.value) { - pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 8), HitResult.INDIRECT); + pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 8), { result: HitResult.INDIRECT }); } } @@ -1459,7 +1459,7 @@ export class ContactDamageProtectedTag extends ProtectedTag { if (effectPhase instanceof MoveEffectPhase && effectPhase.move.getMove().hasFlag(MoveFlags.MAKES_CONTACT)) { const attacker = effectPhase.getPokemon(); if (!attacker.hasAbilityWithAttr(BlockNonDirectDamageAbAttr)) { - attacker.damageAndUpdate(toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)), HitResult.INDIRECT); + attacker.damageAndUpdate(toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)), { result: HitResult.INDIRECT }); } } } @@ -1613,7 +1613,7 @@ export class PerishSongTag extends BattlerTag { }) ); } else { - pokemon.damageAndUpdate(pokemon.hp, HitResult.INDIRECT_KO, false, true); + pokemon.damageAndUpdate(pokemon.hp, { result: HitResult.INDIRECT_KO, ignoreSegments: true }); } return ret; @@ -1981,7 +1981,7 @@ export class SaltCuredTag extends BattlerTag { if (!cancelled.value) { const pokemonSteelOrWater = pokemon.isOfType(Type.STEEL) || pokemon.isOfType(Type.WATER); - pokemon.damageAndUpdate(toDmgValue(pokemonSteelOrWater ? pokemon.getMaxHp() / 4 : pokemon.getMaxHp() / 8), HitResult.INDIRECT); + pokemon.damageAndUpdate(toDmgValue(pokemonSteelOrWater ? pokemon.getMaxHp() / 4 : pokemon.getMaxHp() / 8), { result: HitResult.INDIRECT }); globalScene.queueMessage( i18next.t("battlerTags:saltCuredLapse", { @@ -2027,7 +2027,7 @@ export class CursedTag extends BattlerTag { applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); if (!cancelled.value) { - pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 4), HitResult.INDIRECT); + pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / 4), { result: HitResult.INDIRECT }); globalScene.queueMessage(i18next.t("battlerTags:cursedLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } } @@ -2327,7 +2327,7 @@ export class GulpMissileTag extends BattlerTag { applyAbAttrs(BlockNonDirectDamageAbAttr, attacker, cancelled); if (!cancelled.value) { - attacker.damageAndUpdate(Math.max(1, Math.floor(attacker.getMaxHp() / 4)), HitResult.INDIRECT); + attacker.damageAndUpdate(Math.max(1, Math.floor(attacker.getMaxHp() / 4)), { result: HitResult.INDIRECT }); } if (this.tagType === BattlerTagType.GULP_MISSILE_ARROKUDA) { diff --git a/src/data/move.ts b/src/data/move.ts index f7ab61bb0ee..2aedf3d1856 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -1731,7 +1731,7 @@ export class RecoilAttr extends MoveEffectAttr { return false; } - user.damageAndUpdate(recoilDamage, HitResult.INDIRECT, false, true); + user.damageAndUpdate(recoilDamage, { result: HitResult.INDIRECT, ignoreSegments: true }); globalScene.queueMessage(i18next.t("moveTriggers:hitWithRecoil", { pokemonName: getPokemonNameWithAffix(user) })); user.turnData.damageTaken += recoilDamage; @@ -1763,7 +1763,7 @@ export class SacrificialAttr extends MoveEffectAttr { * @returns true if the function succeeds **/ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - user.damageAndUpdate(user.hp, HitResult.INDIRECT, false, true); + user.damageAndUpdate(user.hp, { result: HitResult.INDIRECT, ignoreSegments: true }); user.turnData.damageTaken += user.hp; return true; @@ -1801,7 +1801,7 @@ export class SacrificialAttrOnHit extends MoveEffectAttr { return false; } - user.damageAndUpdate(user.hp, HitResult.INDIRECT, false, true); + user.damageAndUpdate(user.hp, { result: HitResult.INDIRECT, ignoreSegments: true }); user.turnData.damageTaken += user.hp; return true; @@ -1843,7 +1843,7 @@ export class HalfSacrificialAttr extends MoveEffectAttr { // Check to see if the Pokemon has an ability that blocks non-direct damage applyAbAttrs(BlockNonDirectDamageAbAttr, user, cancelled); if (!cancelled.value) { - user.damageAndUpdate(Utils.toDmgValue(user.getMaxHp() / 2), HitResult.INDIRECT, false, true); + user.damageAndUpdate(Utils.toDmgValue(user.getMaxHp() / 2), { result: HitResult.INDIRECT, ignoreSegments: true }); globalScene.queueMessage(i18next.t("moveTriggers:cutHpPowerUpMove", { pokemonName: getPokemonNameWithAffix(user) })); // Queue recoil message } return true; @@ -1890,7 +1890,7 @@ export class AddSubstituteAttr extends MoveEffectAttr { } const damageTaken = this.roundUp ? Math.ceil(user.getMaxHp() * this.hpCost) : Math.floor(user.getMaxHp() * this.hpCost); - user.damageAndUpdate(damageTaken, HitResult.INDIRECT, false, true, true); + user.damageAndUpdate(damageTaken, { result: HitResult.INDIRECT, ignoreSegments: true, ignoreFaintPhase: true }); user.addTag(BattlerTagType.SUBSTITUTE, 0, move.id, user.id); return true; } @@ -2048,7 +2048,7 @@ export class FlameBurstAttr extends MoveEffectAttr { return false; } - targetAlly.damageAndUpdate(Math.max(1, Math.floor(1 / 16 * targetAlly.getMaxHp())), HitResult.INDIRECT); + targetAlly.damageAndUpdate(Math.max(1, Math.floor(1 / 16 * targetAlly.getMaxHp())), { result: HitResult.INDIRECT }); return true; } @@ -3528,7 +3528,7 @@ export class CutHpStatStageBoostAttr extends StatStageChangeAttr { this.messageCallback = messageCallback; } override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - user.damageAndUpdate(Utils.toDmgValue(user.getMaxHp() / this.cutRatio), HitResult.INDIRECT, false); + user.damageAndUpdate(Utils.toDmgValue(user.getMaxHp() / this.cutRatio), { result: HitResult.INDIRECT }); user.updateInfo(); const ret = super.apply(user, target, move, args); if (this.messageCallback) { @@ -5420,7 +5420,7 @@ const crashDamageFunc = (user: Pokemon, move: Move) => { return false; } - user.damageAndUpdate(Utils.toDmgValue(user.getMaxHp() / 2), HitResult.INDIRECT, false); + user.damageAndUpdate(Utils.toDmgValue(user.getMaxHp() / 2), { result: HitResult.INDIRECT }); globalScene.queueMessage(i18next.t("moveTriggers:keptGoingAndCrashed", { pokemonName: getPokemonNameWithAffix(user) })); user.turnData.damageTaken += Utils.toDmgValue(user.getMaxHp() / 2); @@ -5716,7 +5716,7 @@ export class CurseAttr extends MoveEffectAttr { return false; } const curseRecoilDamage = Math.max(1, Math.floor(user.getMaxHp() / 2)); - user.damageAndUpdate(curseRecoilDamage, HitResult.INDIRECT, false, true); + user.damageAndUpdate(curseRecoilDamage, { result: HitResult.INDIRECT, ignoreSegments: true }); globalScene.queueMessage( i18next.t("battlerTags:cursedOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(user), diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 0e473c970ed..8834e9ac4d7 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -3054,7 +3054,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * We explicitly require to ignore the faint phase here, as we want to show the messages * about the critical hit and the super effective/not very effective messages before the faint phase. */ - const damage = this.damageAndUpdate(isBlockedBySubstitute ? 0 : dmg, result as DamageResult, isCritical, false, true, source); + const damage = this.damageAndUpdate(isBlockedBySubstitute ? 0 : dmg, { result: result as DamageResult, critical: isCritical, ignoreSegments: false, ignoreFaintPhase: true, source: source }); if (damage > 0) { if (source.isPlayer()) { @@ -3168,7 +3168,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param ignoreFaintPhase boolean to ignore adding a FaintPhase, passsed to damage() * @returns integer of damage done */ - damageAndUpdate(damage: number, result: DamageResult = HitResult.EFFECTIVE, critical: boolean = false, ignoreSegments: boolean = false, ignoreFaintPhase: boolean = false, source?: Pokemon): number { + damageAndUpdate(damage: number, + { + result = HitResult.EFFECTIVE, critical = false, ignoreSegments = false, ignoreFaintPhase = false, source = undefined, + }: + { + result?: DamageResult, critical?: boolean, ignoreSegments?: boolean, ignoreFaintPhase?: boolean, source?: Pokemon, + } + ): number { const isIndirectDamage = [ HitResult.INDIRECT, HitResult.INDIRECT_KO ].includes(result); const damagePhase = new DamageAnimPhase(this.getBattlerIndex(), damage, result as DamageResult, critical); globalScene.unshiftPhase(damagePhase); diff --git a/src/phases/pokemon-heal-phase.ts b/src/phases/pokemon-heal-phase.ts index c99cf2e0329..fe5fbccf80d 100644 --- a/src/phases/pokemon-heal-phase.ts +++ b/src/phases/pokemon-heal-phase.ts @@ -3,7 +3,6 @@ import type { BattlerIndex } from "#app/battle"; import { CommonAnim } from "#app/data/battle-anims"; import { getStatusEffectHealText } from "#app/data/status-effect"; import { StatusEffect } from "#app/enums/status-effect"; -import type { DamageResult } from "#app/field/pokemon"; import { HitResult } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { HealingBoosterModifier } from "#app/modifier/modifier"; @@ -68,7 +67,7 @@ export class PokemonHealPhase extends CommonAnimPhase { } const healAmount = new Utils.NumberHolder(Math.floor(this.hpHealed * hpRestoreMultiplier.value)); if (healAmount.value < 0) { - pokemon.damageAndUpdate(healAmount.value * -1, HitResult.INDIRECT as DamageResult); + pokemon.damageAndUpdate(healAmount.value * -1, { result: HitResult.INDIRECT }); healAmount.value = 0; } // Prevent healing to full if specified (in case of healing tokens so Sturdy doesn't cause a softlock) diff --git a/src/phases/weather-effect-phase.ts b/src/phases/weather-effect-phase.ts index 3a9d0357e79..1c6786df22f 100644 --- a/src/phases/weather-effect-phase.ts +++ b/src/phases/weather-effect-phase.ts @@ -49,7 +49,7 @@ export class WeatherEffectPhase extends CommonAnimPhase { const damage = Utils.toDmgValue(pokemon.getMaxHp() / 16); globalScene.queueMessage(getWeatherDamageMessage(this.weather?.weatherType!, pokemon)!); // TODO: are those bangs correct? - pokemon.damageAndUpdate(damage, HitResult.INDIRECT, false, true); + pokemon.damageAndUpdate(damage, { result: HitResult.INDIRECT, ignoreSegments: true }); }; this.executeForAll((pokemon: Pokemon) => { diff --git a/test/abilities/wimp_out.test.ts b/test/abilities/wimp_out.test.ts index 5aff05d4c20..624e4748c99 100644 --- a/test/abilities/wimp_out.test.ts +++ b/test/abilities/wimp_out.test.ts @@ -259,7 +259,7 @@ describe("Abilities - Wimp Out", () => { const wimpod = game.scene.getPlayerPokemon()!; - wimpod.damageAndUpdate(toDmgValue(wimpod.getMaxHp() * 0.4)); + wimpod.damageAndUpdate(toDmgValue(wimpod.getMaxHp() * 0.4), {}); game.move.select(Moves.DOUBLE_EDGE); game.doSelectPartyPokemon(1); diff --git a/test/boss-pokemon.test.ts b/test/boss-pokemon.test.ts index ea5a9000000..7be28d89298 100644 --- a/test/boss-pokemon.test.ts +++ b/test/boss-pokemon.test.ts @@ -125,7 +125,7 @@ describe("Boss Pokemon / Shields", () => { expect(boss1.bossSegmentIndex).toBe(4); // Not enough damage to break through all shields - boss1.damageAndUpdate(Math.floor(requiredDamageBoss1 - 5)); + boss1.damageAndUpdate(Math.floor(requiredDamageBoss1 - 5), {}); expect(boss1.bossSegmentIndex).toBe(1); expect(boss1.hp).toBe(boss1.getMaxHp() - toDmgValue(boss1SegmentHp * 3)); @@ -137,7 +137,7 @@ describe("Boss Pokemon / Shields", () => { expect(boss2.bossSegments).toBe(5); // Enough damage to break through all shields - boss2.damageAndUpdate(Math.ceil(requiredDamageBoss2)); + boss2.damageAndUpdate(Math.ceil(requiredDamageBoss2), {}); expect(boss2.bossSegmentIndex).toBe(0); expect(boss2.hp).toBe(boss2.getMaxHp() - toDmgValue(boss2SegmentHp * 4)); @@ -165,7 +165,7 @@ describe("Boss Pokemon / Shields", () => { // Break the shields one by one for (let i = 1; i <= shieldsToBreak; i++) { - boss1.damageAndUpdate(singleShieldDamage); + boss1.damageAndUpdate(singleShieldDamage, {}); expect(boss1.bossSegmentIndex).toBe(shieldsToBreak - i); expect(boss1.hp).toBe(boss1.getMaxHp() - toDmgValue(boss1SegmentHp * i)); // Do nothing and go to next turn so that the StatStageChangePhase gets applied @@ -186,7 +186,7 @@ describe("Boss Pokemon / Shields", () => { expect(getTotalStatStageBoosts(boss2)).toBe(0); // Enough damage to break all shields at once - boss2.damageAndUpdate(Math.ceil(requiredDamage)); + boss2.damageAndUpdate(Math.ceil(requiredDamage), {}); expect(boss2.bossSegmentIndex).toBe(0); expect(boss2.hp).toBe(boss2.getMaxHp() - toDmgValue(boss2SegmentHp * shieldsToBreak)); // Do nothing and go to next turn so that the StatStageChangePhase gets applied diff --git a/test/items/reviver_seed.test.ts b/test/items/reviver_seed.test.ts index 30138fea910..4682984aab1 100644 --- a/test/items/reviver_seed.test.ts +++ b/test/items/reviver_seed.test.ts @@ -55,7 +55,7 @@ describe("Items - Reviver Seed", () => { .enemyMoveset(move); await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); const player = game.scene.getPlayerPokemon()!; - player.damageAndUpdate(player.hp - 1); + player.damageAndUpdate(player.hp - 1, {}); const reviverSeed = player.getHeldItems()[0] as PokemonInstantReviveModifier; vi.spyOn(reviverSeed, "apply"); @@ -73,7 +73,7 @@ describe("Items - Reviver Seed", () => { .enemyMoveset(Moves.SPLASH); await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); const player = game.scene.getPlayerPokemon()!; - player.damageAndUpdate(player.hp - 1); + player.damageAndUpdate(player.hp - 1, {}); player.addTag(BattlerTagType.CONFUSED, 3); const reviverSeed = player.getHeldItems()[0] as PokemonInstantReviveModifier; @@ -102,7 +102,7 @@ describe("Items - Reviver Seed", () => { .enemyMoveset(Moves.ENDURE); await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); const enemy = game.scene.getEnemyPokemon()!; - enemy.damageAndUpdate(enemy.hp - 1); + enemy.damageAndUpdate(enemy.hp - 1, {}); game.move.select(move); await game.phaseInterceptor.to("TurnEndPhase"); @@ -126,7 +126,7 @@ describe("Items - Reviver Seed", () => { .enemyMoveset(Moves.SPLASH); await game.classicMode.startBattle([ Species.GASTLY, Species.FEEBAS ]); const player = game.scene.getPlayerPokemon()!; - player.damageAndUpdate(player.hp - 1); + player.damageAndUpdate(player.hp - 1, {}); const playerSeed = player.getHeldItems()[0] as PokemonInstantReviveModifier; vi.spyOn(playerSeed, "apply"); @@ -147,7 +147,7 @@ describe("Items - Reviver Seed", () => { .enemyMoveset(Moves.TACKLE); await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); const player = game.scene.getPlayerPokemon()!; - player.damageAndUpdate(player.hp - 1); + player.damageAndUpdate(player.hp - 1, {}); const enemy = game.scene.getEnemyPokemon()!; game.move.select(Moves.DESTINY_BOND); diff --git a/test/moves/endure.test.ts b/test/moves/endure.test.ts index 4923f524fc0..7eb387d3164 100644 --- a/test/moves/endure.test.ts +++ b/test/moves/endure.test.ts @@ -76,7 +76,7 @@ describe("Moves - Endure", () => { .enemyMoveset(Moves.ENDURE); await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); const enemy = game.scene.getEnemyPokemon()!; - enemy.damageAndUpdate(enemy.hp - 1); + enemy.damageAndUpdate(enemy.hp - 1, {}); game.move.select(move); await game.phaseInterceptor.to("TurnEndPhase"); diff --git a/test/moves/fake_out.test.ts b/test/moves/fake_out.test.ts index 21a129b6410..33598a96680 100644 --- a/test/moves/fake_out.test.ts +++ b/test/moves/fake_out.test.ts @@ -52,7 +52,7 @@ describe("Moves - Fake Out", () => { await game.classicMode.startBattle([ Species.FEEBAS ]); const enemy = game.scene.getEnemyPokemon()!; - enemy.damageAndUpdate(enemy.getMaxHp() - 1); + enemy.damageAndUpdate(enemy.getMaxHp() - 1, {}); game.move.select(Moves.FAKE_OUT); await game.toNextWave(); diff --git a/test/moves/heal_block.test.ts b/test/moves/heal_block.test.ts index a0e8eaf541c..88a9e6ac07f 100644 --- a/test/moves/heal_block.test.ts +++ b/test/moves/heal_block.test.ts @@ -43,7 +43,7 @@ describe("Moves - Heal Block", () => { const player = game.scene.getPlayerPokemon()!; const enemy = game.scene.getEnemyPokemon()!; - player.damageAndUpdate(enemy.getMaxHp() - 1); + player.damageAndUpdate(enemy.getMaxHp() - 1, {}); game.move.select(Moves.ABSORB); await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); @@ -74,7 +74,7 @@ describe("Moves - Heal Block", () => { const player = game.scene.getPlayerPokemon()!; - player.damageAndUpdate(player.getMaxHp() - 1); + player.damageAndUpdate(player.getMaxHp() - 1, {}); game.move.select(Moves.WISH); await game.phaseInterceptor.to("TurnEndPhase"); @@ -95,7 +95,7 @@ describe("Moves - Heal Block", () => { const player = game.scene.getPlayerPokemon()!; - player.damageAndUpdate(player.getMaxHp() - 1); + player.damageAndUpdate(player.getMaxHp() - 1, {}); game.move.select(Moves.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); @@ -108,7 +108,7 @@ describe("Moves - Heal Block", () => { const player = game.scene.getPlayerPokemon()!; - player.damageAndUpdate(player.getMaxHp() - 1); + player.damageAndUpdate(player.getMaxHp() - 1, {}); game.move.select(Moves.AQUA_RING); await game.phaseInterceptor.to("TurnEndPhase"); @@ -126,7 +126,7 @@ describe("Moves - Heal Block", () => { const player = game.scene.getPlayerPokemon()!; - player.damageAndUpdate(player.getMaxHp() - 1); + player.damageAndUpdate(player.getMaxHp() - 1, {}); game.move.select(Moves.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); @@ -140,7 +140,7 @@ describe("Moves - Heal Block", () => { await game.classicMode.startBattle([ Species.CHARIZARD ]); const player = game.scene.getPlayerPokemon()!; - player.damageAndUpdate(player.getMaxHp() - 1); + player.damageAndUpdate(player.getMaxHp() - 1, {}); game.move.select(Moves.SPLASH); await game.phaseInterceptor.to("TurnEndPhase"); diff --git a/test/moves/safeguard.test.ts b/test/moves/safeguard.test.ts index 9768b24f170..1a20a27b815 100644 --- a/test/moves/safeguard.test.ts +++ b/test/moves/safeguard.test.ts @@ -121,7 +121,7 @@ describe("Moves - Safeguard", () => { game.move.select(Moves.SPLASH); await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.toNextTurn(); - enemyPokemon.damageAndUpdate(1); + enemyPokemon.damageAndUpdate(1, {}); expect(enemyPokemon.status?.effect).toEqual(StatusEffect.BURN); @@ -130,7 +130,7 @@ describe("Moves - Safeguard", () => { // TODO: Remove after enemy AI rework is in enemyPokemon.getMoveset(); game.move.select(Moves.SPLASH); - enemyPokemon.damageAndUpdate(1); + enemyPokemon.damageAndUpdate(1, {}); await game.toNextTurn(); expect(enemyPokemon.status?.effect).toEqual(StatusEffect.SLEEP);