Fixes based on Kev's suggestions

This commit is contained in:
Christopher Schmidt 2025-03-06 18:55:13 -05:00
parent 49011c4e5e
commit 3dfeabe46a
8 changed files with 25 additions and 25 deletions

View File

@ -3063,7 +3063,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 * 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. * about the critical hit and the super effective/not very effective messages before the faint phase.
*/ */
const damage = this.damageAndUpdate(isBlockedBySubstitute ? 0 : dmg, { result: result as DamageResult, critical: isCritical, ignoreSegments: false, ignoreFaintPhase: true, source: source }); const damage = this.damageAndUpdate(isBlockedBySubstitute ? 0 : dmg, { result: result as DamageResult, isCritical, ignoreFaintPhase: true, source });
if (damage > 0) { if (damage > 0) {
if (source.isPlayer()) { if (source.isPlayer()) {
@ -3179,14 +3179,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
*/ */
damageAndUpdate(damage: number, damageAndUpdate(damage: number,
{ {
result = HitResult.EFFECTIVE, critical = false, ignoreSegments = false, ignoreFaintPhase = false, source = undefined, result = HitResult.EFFECTIVE, isCritical = false, ignoreSegments = false, ignoreFaintPhase = false, source = undefined,
}: }:
{ {
result?: DamageResult, critical?: boolean, ignoreSegments?: boolean, ignoreFaintPhase?: boolean, source?: Pokemon, result?: DamageResult, isCritical?: boolean, ignoreSegments?: boolean, ignoreFaintPhase?: boolean, source?: Pokemon,
} } = {}
): number { ): number {
const isIndirectDamage = [ HitResult.INDIRECT, HitResult.INDIRECT_KO ].includes(result); const isIndirectDamage = [ HitResult.INDIRECT, HitResult.INDIRECT_KO ].includes(result);
const damagePhase = new DamageAnimPhase(this.getBattlerIndex(), damage, result as DamageResult, critical); const damagePhase = new DamageAnimPhase(this.getBattlerIndex(), damage, result as DamageResult, isCritical);
globalScene.unshiftPhase(damagePhase); globalScene.unshiftPhase(damagePhase);
if (this.switchOutStatus && source) { if (this.switchOutStatus && source) {
damage = 0; damage = 0;

View File

@ -259,7 +259,7 @@ describe("Abilities - Wimp Out", () => {
const wimpod = game.scene.getPlayerPokemon()!; 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.move.select(Moves.DOUBLE_EDGE);
game.doSelectPartyPokemon(1); game.doSelectPartyPokemon(1);

View File

@ -125,7 +125,7 @@ describe("Boss Pokemon / Shields", () => {
expect(boss1.bossSegmentIndex).toBe(4); expect(boss1.bossSegmentIndex).toBe(4);
// Not enough damage to break through all shields // 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.bossSegmentIndex).toBe(1);
expect(boss1.hp).toBe(boss1.getMaxHp() - toDmgValue(boss1SegmentHp * 3)); expect(boss1.hp).toBe(boss1.getMaxHp() - toDmgValue(boss1SegmentHp * 3));
@ -137,7 +137,7 @@ describe("Boss Pokemon / Shields", () => {
expect(boss2.bossSegments).toBe(5); expect(boss2.bossSegments).toBe(5);
// Enough damage to break through all shields // Enough damage to break through all shields
boss2.damageAndUpdate(Math.ceil(requiredDamageBoss2), {}); boss2.damageAndUpdate(Math.ceil(requiredDamageBoss2));
expect(boss2.bossSegmentIndex).toBe(0); expect(boss2.bossSegmentIndex).toBe(0);
expect(boss2.hp).toBe(boss2.getMaxHp() - toDmgValue(boss2SegmentHp * 4)); expect(boss2.hp).toBe(boss2.getMaxHp() - toDmgValue(boss2SegmentHp * 4));
@ -165,7 +165,7 @@ describe("Boss Pokemon / Shields", () => {
// Break the shields one by one // Break the shields one by one
for (let i = 1; i <= shieldsToBreak; i++) { for (let i = 1; i <= shieldsToBreak; i++) {
boss1.damageAndUpdate(singleShieldDamage, {}); boss1.damageAndUpdate(singleShieldDamage);
expect(boss1.bossSegmentIndex).toBe(shieldsToBreak - i); expect(boss1.bossSegmentIndex).toBe(shieldsToBreak - i);
expect(boss1.hp).toBe(boss1.getMaxHp() - toDmgValue(boss1SegmentHp * i)); expect(boss1.hp).toBe(boss1.getMaxHp() - toDmgValue(boss1SegmentHp * i));
// Do nothing and go to next turn so that the StatStageChangePhase gets applied // 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); expect(getTotalStatStageBoosts(boss2)).toBe(0);
// Enough damage to break all shields at once // 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.bossSegmentIndex).toBe(0);
expect(boss2.hp).toBe(boss2.getMaxHp() - toDmgValue(boss2SegmentHp * shieldsToBreak)); expect(boss2.hp).toBe(boss2.getMaxHp() - toDmgValue(boss2SegmentHp * shieldsToBreak));
// Do nothing and go to next turn so that the StatStageChangePhase gets applied // Do nothing and go to next turn so that the StatStageChangePhase gets applied

View File

@ -55,7 +55,7 @@ describe("Items - Reviver Seed", () => {
.enemyMoveset(move); .enemyMoveset(move);
await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]);
const player = game.scene.getPlayerPokemon()!; const player = game.scene.getPlayerPokemon()!;
player.damageAndUpdate(player.hp - 1, {}); player.damageAndUpdate(player.hp - 1);
const reviverSeed = player.getHeldItems()[0] as PokemonInstantReviveModifier; const reviverSeed = player.getHeldItems()[0] as PokemonInstantReviveModifier;
vi.spyOn(reviverSeed, "apply"); vi.spyOn(reviverSeed, "apply");
@ -73,7 +73,7 @@ describe("Items - Reviver Seed", () => {
.enemyMoveset(Moves.SPLASH); .enemyMoveset(Moves.SPLASH);
await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]);
const player = game.scene.getPlayerPokemon()!; const player = game.scene.getPlayerPokemon()!;
player.damageAndUpdate(player.hp - 1, {}); player.damageAndUpdate(player.hp - 1);
player.addTag(BattlerTagType.CONFUSED, 3); player.addTag(BattlerTagType.CONFUSED, 3);
const reviverSeed = player.getHeldItems()[0] as PokemonInstantReviveModifier; const reviverSeed = player.getHeldItems()[0] as PokemonInstantReviveModifier;
@ -102,7 +102,7 @@ describe("Items - Reviver Seed", () => {
.enemyMoveset(Moves.ENDURE); .enemyMoveset(Moves.ENDURE);
await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]);
const enemy = game.scene.getEnemyPokemon()!; const enemy = game.scene.getEnemyPokemon()!;
enemy.damageAndUpdate(enemy.hp - 1, {}); enemy.damageAndUpdate(enemy.hp - 1);
game.move.select(move); game.move.select(move);
await game.phaseInterceptor.to("TurnEndPhase"); await game.phaseInterceptor.to("TurnEndPhase");
@ -126,7 +126,7 @@ describe("Items - Reviver Seed", () => {
.enemyMoveset(Moves.SPLASH); .enemyMoveset(Moves.SPLASH);
await game.classicMode.startBattle([ Species.GASTLY, Species.FEEBAS ]); await game.classicMode.startBattle([ Species.GASTLY, Species.FEEBAS ]);
const player = game.scene.getPlayerPokemon()!; const player = game.scene.getPlayerPokemon()!;
player.damageAndUpdate(player.hp - 1, {}); player.damageAndUpdate(player.hp - 1);
const playerSeed = player.getHeldItems()[0] as PokemonInstantReviveModifier; const playerSeed = player.getHeldItems()[0] as PokemonInstantReviveModifier;
vi.spyOn(playerSeed, "apply"); vi.spyOn(playerSeed, "apply");
@ -147,7 +147,7 @@ describe("Items - Reviver Seed", () => {
.enemyMoveset(Moves.TACKLE); .enemyMoveset(Moves.TACKLE);
await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]);
const player = game.scene.getPlayerPokemon()!; const player = game.scene.getPlayerPokemon()!;
player.damageAndUpdate(player.hp - 1, {}); player.damageAndUpdate(player.hp - 1);
const enemy = game.scene.getEnemyPokemon()!; const enemy = game.scene.getEnemyPokemon()!;
game.move.select(Moves.DESTINY_BOND); game.move.select(Moves.DESTINY_BOND);

View File

@ -76,7 +76,7 @@ describe("Moves - Endure", () => {
.enemyMoveset(Moves.ENDURE); .enemyMoveset(Moves.ENDURE);
await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]);
const enemy = game.scene.getEnemyPokemon()!; const enemy = game.scene.getEnemyPokemon()!;
enemy.damageAndUpdate(enemy.hp - 1, {}); enemy.damageAndUpdate(enemy.hp - 1);
game.move.select(move); game.move.select(move);
await game.phaseInterceptor.to("TurnEndPhase"); await game.phaseInterceptor.to("TurnEndPhase");

View File

@ -52,7 +52,7 @@ describe("Moves - Fake Out", () => {
await game.classicMode.startBattle([ Species.FEEBAS ]); await game.classicMode.startBattle([ Species.FEEBAS ]);
const enemy = game.scene.getEnemyPokemon()!; const enemy = game.scene.getEnemyPokemon()!;
enemy.damageAndUpdate(enemy.getMaxHp() - 1, {}); enemy.damageAndUpdate(enemy.getMaxHp() - 1);
game.move.select(Moves.FAKE_OUT); game.move.select(Moves.FAKE_OUT);
await game.toNextWave(); await game.toNextWave();

View File

@ -43,7 +43,7 @@ describe("Moves - Heal Block", () => {
const player = game.scene.getPlayerPokemon()!; const player = game.scene.getPlayerPokemon()!;
const enemy = game.scene.getEnemyPokemon()!; const enemy = game.scene.getEnemyPokemon()!;
player.damageAndUpdate(enemy.getMaxHp() - 1, {}); player.damageAndUpdate(enemy.getMaxHp() - 1);
game.move.select(Moves.ABSORB); game.move.select(Moves.ABSORB);
await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]);
@ -74,7 +74,7 @@ describe("Moves - Heal Block", () => {
const player = game.scene.getPlayerPokemon()!; const player = game.scene.getPlayerPokemon()!;
player.damageAndUpdate(player.getMaxHp() - 1, {}); player.damageAndUpdate(player.getMaxHp() - 1);
game.move.select(Moves.WISH); game.move.select(Moves.WISH);
await game.phaseInterceptor.to("TurnEndPhase"); await game.phaseInterceptor.to("TurnEndPhase");
@ -95,7 +95,7 @@ describe("Moves - Heal Block", () => {
const player = game.scene.getPlayerPokemon()!; const player = game.scene.getPlayerPokemon()!;
player.damageAndUpdate(player.getMaxHp() - 1, {}); player.damageAndUpdate(player.getMaxHp() - 1);
game.move.select(Moves.SPLASH); game.move.select(Moves.SPLASH);
await game.phaseInterceptor.to("TurnEndPhase"); await game.phaseInterceptor.to("TurnEndPhase");
@ -108,7 +108,7 @@ describe("Moves - Heal Block", () => {
const player = game.scene.getPlayerPokemon()!; const player = game.scene.getPlayerPokemon()!;
player.damageAndUpdate(player.getMaxHp() - 1, {}); player.damageAndUpdate(player.getMaxHp() - 1);
game.move.select(Moves.AQUA_RING); game.move.select(Moves.AQUA_RING);
await game.phaseInterceptor.to("TurnEndPhase"); await game.phaseInterceptor.to("TurnEndPhase");
@ -126,7 +126,7 @@ describe("Moves - Heal Block", () => {
const player = game.scene.getPlayerPokemon()!; const player = game.scene.getPlayerPokemon()!;
player.damageAndUpdate(player.getMaxHp() - 1, {}); player.damageAndUpdate(player.getMaxHp() - 1);
game.move.select(Moves.SPLASH); game.move.select(Moves.SPLASH);
await game.phaseInterceptor.to("TurnEndPhase"); await game.phaseInterceptor.to("TurnEndPhase");
@ -140,7 +140,7 @@ describe("Moves - Heal Block", () => {
await game.classicMode.startBattle([ Species.CHARIZARD ]); await game.classicMode.startBattle([ Species.CHARIZARD ]);
const player = game.scene.getPlayerPokemon()!; const player = game.scene.getPlayerPokemon()!;
player.damageAndUpdate(player.getMaxHp() - 1, {}); player.damageAndUpdate(player.getMaxHp() - 1);
game.move.select(Moves.SPLASH); game.move.select(Moves.SPLASH);
await game.phaseInterceptor.to("TurnEndPhase"); await game.phaseInterceptor.to("TurnEndPhase");

View File

@ -121,7 +121,7 @@ describe("Moves - Safeguard", () => {
game.move.select(Moves.SPLASH); game.move.select(Moves.SPLASH);
await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]); await game.setTurnOrder([ BattlerIndex.ENEMY, BattlerIndex.PLAYER ]);
await game.toNextTurn(); await game.toNextTurn();
enemyPokemon.damageAndUpdate(1, {}); enemyPokemon.damageAndUpdate(1);
expect(enemyPokemon.status?.effect).toEqual(StatusEffect.BURN); expect(enemyPokemon.status?.effect).toEqual(StatusEffect.BURN);
@ -130,7 +130,7 @@ describe("Moves - Safeguard", () => {
// TODO: Remove after enemy AI rework is in // TODO: Remove after enemy AI rework is in
enemyPokemon.getMoveset(); enemyPokemon.getMoveset();
game.move.select(Moves.SPLASH); game.move.select(Moves.SPLASH);
enemyPokemon.damageAndUpdate(1, {}); enemyPokemon.damageAndUpdate(1);
await game.toNextTurn(); await game.toNextTurn();
expect(enemyPokemon.status?.effect).toEqual(StatusEffect.SLEEP); expect(enemyPokemon.status?.effect).toEqual(StatusEffect.SLEEP);