From 24338efe63d699c3b02556e60c627380a2aaa45b Mon Sep 17 00:00:00 2001 From: xsn34kzx Date: Sun, 18 Aug 2024 01:38:33 -0400 Subject: [PATCH] Address Minor Manual NITs --- src/field/pokemon.ts | 16 ++++---- src/test/items/leek.test.ts | 60 ++++++++++++++--------------- src/test/items/scope_lens.test.ts | 10 ++--- src/test/moves/fillet_away.test.ts | 8 ++-- src/ui/battle-message-ui-handler.ts | 30 +++++---------- 5 files changed, 56 insertions(+), 68 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index be92ab4d91ed..2c5ad3c179bc 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -2062,22 +2062,22 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (critOnly.value || critAlways) { isCritical = true; } else { - const critLevel = new Utils.IntegerHolder(0); - applyMoveAttrs(HighCritAttr, source, this, move, critLevel); - this.scene.applyModifiers(CritBoosterModifier, source.isPlayer(), source, critLevel); - this.scene.applyModifiers(TempCritBoosterModifier, source.isPlayer(), critLevel); + const critStage = new Utils.IntegerHolder(0); + applyMoveAttrs(HighCritAttr, source, this, move, critStage); + this.scene.applyModifiers(CritBoosterModifier, source.isPlayer(), source, critStage); + this.scene.applyModifiers(TempCritBoosterModifier, source.isPlayer(), critStage); const bonusCrit = new Utils.BooleanHolder(false); //@ts-ignore if (applyAbAttrs(BonusCritAbAttr, source, null, bonusCrit)) { // TODO: resolve ts-ignore. This is a promise. Checking a promise is bogus. if (bonusCrit.value) { - critLevel.value += 1; + critStage.value += 1; } } if (source.getTag(BattlerTagType.CRIT_BOOST)) { - critLevel.value += 2; + critStage.value += 2; } - console.log(`crit stage: +${critLevel.value}`); - const critChance = [24, 8, 2, 1][Math.max(0, Math.min(critLevel.value, 3))]; + console.log(`crit stage: +${critStage.value}`); + const critChance = [24, 8, 2, 1][Math.max(0, Math.min(critStage.value, 3))]; isCritical = critChance === 1 || !this.scene.randBattleSeedInt(critChance); if (Overrides.NEVER_CRIT_OVERRIDE) { isCritical = false; diff --git a/src/test/items/leek.test.ts b/src/test/items/leek.test.ts index 4abc470c6f02..6ec41b999c0c 100644 --- a/src/test/items/leek.test.ts +++ b/src/test/items/leek.test.ts @@ -58,16 +58,16 @@ describe("Items - Leek", () => { const partyMember = game.scene.getPlayerPokemon()!; // Making sure modifier is not applied without holding item - const critLevel = new Utils.IntegerHolder(0); - partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); + const critStage = new Utils.IntegerHolder(0); + partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critStage); - expect(critLevel.value).toBe(0); + expect(critStage.value).toBe(0); // Giving Leek to party member and testing if it applies partyMember.scene.addModifier(modifierTypes.LEEK().newModifier(partyMember), true); - partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); + partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critStage); - expect(critLevel.value).toBe(2); + expect(critStage.value).toBe(2); }, 20000); it("LEEK held by GALAR_FARFETCHD", async() => { @@ -78,16 +78,16 @@ describe("Items - Leek", () => { const partyMember = game.scene.getPlayerPokemon()!; // Making sure modifier is not applied without holding item - const critLevel = new Utils.IntegerHolder(0); - partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); + const critStage = new Utils.IntegerHolder(0); + partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critStage); - expect(critLevel.value).toBe(0); + expect(critStage.value).toBe(0); // Giving Leek to party member and testing if it applies partyMember.scene.addModifier(modifierTypes.LEEK().newModifier(partyMember), true); - partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); + partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critStage); - expect(critLevel.value).toBe(2); + expect(critStage.value).toBe(2); }, 20000); it("LEEK held by SIRFETCHD", async() => { @@ -98,16 +98,16 @@ describe("Items - Leek", () => { const partyMember = game.scene.getPlayerPokemon()!; // Making sure modifier is not applied without holding item - const critLevel = new Utils.IntegerHolder(0); - partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); + const critStage = new Utils.IntegerHolder(0); + partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critStage); - expect(critLevel.value).toBe(0); + expect(critStage.value).toBe(0); // Giving Leek to party member and testing if it applies partyMember.scene.addModifier(modifierTypes.LEEK().newModifier(partyMember), true); - partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); + partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critStage); - expect(critLevel.value).toBe(2); + expect(critStage.value).toBe(2); }, 20000); it("LEEK held by fused FARFETCHD line (base)", async() => { @@ -133,16 +133,16 @@ describe("Items - Leek", () => { partyMember.fusionLuck = ally.luck; // Making sure modifier is not applied without holding item - const critLevel = new Utils.IntegerHolder(0); - partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); + const critStage = new Utils.IntegerHolder(0); + partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critStage); - expect(critLevel.value).toBe(0); + expect(critStage.value).toBe(0); // Giving Leek to party member and testing if it applies partyMember.scene.addModifier(modifierTypes.LEEK().newModifier(partyMember), true); - partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); + partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critStage); - expect(critLevel.value).toBe(2); + expect(critStage.value).toBe(2); }, 20000); it("LEEK held by fused FARFETCHD line (part)", async() => { @@ -168,16 +168,16 @@ describe("Items - Leek", () => { partyMember.fusionLuck = ally.luck; // Making sure modifier is not applied without holding item - const critLevel = new Utils.IntegerHolder(0); - partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); + const critStage = new Utils.IntegerHolder(0); + partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critStage); - expect(critLevel.value).toBe(0); + expect(critStage.value).toBe(0); // Giving Leek to party member and testing if it applies partyMember.scene.addModifier(modifierTypes.LEEK().newModifier(partyMember), true); - partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); + partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critStage); - expect(critLevel.value).toBe(2); + expect(critStage.value).toBe(2); }, 20000); it("LEEK not held by FARFETCHD line", async() => { @@ -188,15 +188,15 @@ describe("Items - Leek", () => { const partyMember = game.scene.getPlayerPokemon()!; // Making sure modifier is not applied without holding item - const critLevel = new Utils.IntegerHolder(0); - partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); + const critStage = new Utils.IntegerHolder(0); + partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critStage); - expect(critLevel.value).toBe(0); + expect(critStage.value).toBe(0); // Giving Leek to party member and testing if it applies partyMember.scene.addModifier(modifierTypes.LEEK().newModifier(partyMember), true); - partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); + partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critStage); - expect(critLevel.value).toBe(0); + expect(critStage.value).toBe(0); }, 20000); }); diff --git a/src/test/items/scope_lens.test.ts b/src/test/items/scope_lens.test.ts index 4efc7ab9d05e..f84c30a3487b 100644 --- a/src/test/items/scope_lens.test.ts +++ b/src/test/items/scope_lens.test.ts @@ -58,15 +58,15 @@ describe("Items - Scope Lens", () => { const partyMember = game.scene.getPlayerPokemon()!; // Making sure modifier is not applied without holding item - const critLevel = new Utils.IntegerHolder(0); - partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); + const critStage = new Utils.IntegerHolder(0); + partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critStage); - expect(critLevel.value).toBe(0); + expect(critStage.value).toBe(0); // Giving Scope Lens to party member and testing if it applies partyMember.scene.addModifier(modifierTypes.SCOPE_LENS().newModifier(partyMember), true); - partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); + partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critStage); - expect(critLevel.value).toBe(1); + expect(critStage.value).toBe(1); }, 20000); }); diff --git a/src/test/moves/fillet_away.test.ts b/src/test/moves/fillet_away.test.ts index 4805f929d01e..0e435725ab48 100644 --- a/src/test/moves/fillet_away.test.ts +++ b/src/test/moves/fillet_away.test.ts @@ -40,7 +40,7 @@ describe("Moves - FILLET AWAY", () => { //Bulbapedia Reference: https://bulbapedia.bulbagarden.net/wiki/fillet_away_(move) - test("Fillet Away raises the user's Attack, Special Attack, and Speed by two stages each, at the cost of 1/2 of its maximum HP", + test("raises the user's ATK, SPATK, and SPD stat stages by 2 each, at the cost of 1/2 of its maximum HP", async() => { await game.startBattle([Species.MAGIKARP]); @@ -57,7 +57,7 @@ describe("Moves - FILLET AWAY", () => { }, TIMEOUT ); - test("Fillet Away will still take effect if one or more of the involved stats are not at max", + test("still takes effect if one or more of the involved stat stages are not at max", async() => { await game.startBattle([Species.MAGIKARP]); @@ -78,7 +78,7 @@ describe("Moves - FILLET AWAY", () => { }, TIMEOUT ); - test("Fillet Away fails if all stats involved are at max", + test("fails if all stat stages involved are at max", async() => { await game.startBattle([Species.MAGIKARP]); @@ -98,7 +98,7 @@ describe("Moves - FILLET AWAY", () => { }, TIMEOUT ); - test("Fillet Away fails if the user's health is less than 1/2", + test("fails if the user's health is less than 1/2", async() => { await game.startBattle([Species.MAGIKARP]); diff --git a/src/ui/battle-message-ui-handler.ts b/src/ui/battle-message-ui-handler.ts index 88efaa389880..eee0de9bb7cc 100644 --- a/src/ui/battle-message-ui-handler.ts +++ b/src/ui/battle-message-ui-handler.ts @@ -1,13 +1,12 @@ import BattleScene from "../battle-scene"; import { addBBCodeTextObject, addTextObject, getTextColor, TextStyle } from "./text"; import { Mode } from "./ui"; -import * as Utils from "../utils"; import MessageUiHandler from "./message-ui-handler"; import { addWindow } from "./ui-theme"; import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; import {Button} from "#enums/buttons"; import i18next from "i18next"; -import { Stat, getStatKey, PERMANENT_STATS } from "#app/enums/stat.js"; +import { Stat, PERMANENT_STATS, getStatKey } from "#app/enums/stat.js"; export default class BattleMessageUiHandler extends MessageUiHandler { private levelUpStatsContainer: Phaser.GameObjects.Container; @@ -171,8 +170,7 @@ export default class BattleMessageUiHandler extends MessageUiHandler { } const newStats = (this.scene as BattleScene).getParty()[partyMemberIndex].stats; let levelUpStatsValuesText = ""; - const stats = Utils.getEnumValues(Stat); - for (const s of stats) { + for (const s of PERMANENT_STATS) { levelUpStatsValuesText += `${showTotals ? newStats[s] : newStats[s] - prevStats[s]}\n`; } this.levelUpStatsValuesContent.text = levelUpStatsValuesText; @@ -194,10 +192,9 @@ export default class BattleMessageUiHandler extends MessageUiHandler { return new Promise(resolve => { this.scene.executeWithSeedOffset(() => { let levelUpStatsValuesText = ""; - const stats = Utils.getEnumValues(Stat); const shownStats = this.getTopIvs(ivs, shownIvsCount); - for (const s of stats) { - levelUpStatsValuesText += `${shownStats.indexOf(s) > -1 ? this.getIvDescriptor(ivs[s], s, pokemonId) : "???"}\n`; + for (const s of PERMANENT_STATS) { + levelUpStatsValuesText += `${shownStats.includes(s) ? this.getIvDescriptor(ivs[s], s, pokemonId) : "???"}\n`; } this.levelUpStatsValuesContent.text = levelUpStatsValuesText; this.levelUpStatsIncrContent.setVisible(false); @@ -212,26 +209,17 @@ export default class BattleMessageUiHandler extends MessageUiHandler { } getTopIvs(ivs: integer[], shownIvsCount: integer): Stat[] { - const stats = Utils.getEnumValues(Stat); let shownStats: Stat[] = []; if (shownIvsCount < 6) { - const statsPool = stats.slice(0); + let highestIv = -1; for (let i = 0; i < shownIvsCount; i++) { - let shownStat: Stat | null = null; - let highestIv = -1; - statsPool.map(s => { - if (ivs[s] > highestIv) { - shownStat = s as Stat; - highestIv = ivs[s]; - } - }); - if (shownStat) { - shownStats.push(shownStat); - statsPool.splice(statsPool.indexOf(shownStat), 1); + if (ivs[i] > highestIv) { + shownStats.push(PERMANENT_STATS[i]); + highestIv = ivs[i]; } } } else { - shownStats = stats; + shownStats = PERMANENT_STATS.slice(); } return shownStats; }