Address Minor Manual NITs

This commit is contained in:
xsn34kzx 2024-08-18 01:38:33 -04:00
parent 2edb67b56d
commit 24338efe63
5 changed files with 56 additions and 68 deletions

View File

@ -2062,22 +2062,22 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
if (critOnly.value || critAlways) { if (critOnly.value || critAlways) {
isCritical = true; isCritical = true;
} else { } else {
const critLevel = new Utils.IntegerHolder(0); const critStage = new Utils.IntegerHolder(0);
applyMoveAttrs(HighCritAttr, source, this, move, critLevel); applyMoveAttrs(HighCritAttr, source, this, move, critStage);
this.scene.applyModifiers(CritBoosterModifier, source.isPlayer(), source, critLevel); this.scene.applyModifiers(CritBoosterModifier, source.isPlayer(), source, critStage);
this.scene.applyModifiers(TempCritBoosterModifier, source.isPlayer(), critLevel); this.scene.applyModifiers(TempCritBoosterModifier, source.isPlayer(), critStage);
const bonusCrit = new Utils.BooleanHolder(false); const bonusCrit = new Utils.BooleanHolder(false);
//@ts-ignore //@ts-ignore
if (applyAbAttrs(BonusCritAbAttr, source, null, bonusCrit)) { // TODO: resolve ts-ignore. This is a promise. Checking a promise is bogus. if (applyAbAttrs(BonusCritAbAttr, source, null, bonusCrit)) { // TODO: resolve ts-ignore. This is a promise. Checking a promise is bogus.
if (bonusCrit.value) { if (bonusCrit.value) {
critLevel.value += 1; critStage.value += 1;
} }
} }
if (source.getTag(BattlerTagType.CRIT_BOOST)) { if (source.getTag(BattlerTagType.CRIT_BOOST)) {
critLevel.value += 2; critStage.value += 2;
} }
console.log(`crit stage: +${critLevel.value}`); console.log(`crit stage: +${critStage.value}`);
const critChance = [24, 8, 2, 1][Math.max(0, Math.min(critLevel.value, 3))]; const critChance = [24, 8, 2, 1][Math.max(0, Math.min(critStage.value, 3))];
isCritical = critChance === 1 || !this.scene.randBattleSeedInt(critChance); isCritical = critChance === 1 || !this.scene.randBattleSeedInt(critChance);
if (Overrides.NEVER_CRIT_OVERRIDE) { if (Overrides.NEVER_CRIT_OVERRIDE) {
isCritical = false; isCritical = false;

View File

@ -58,16 +58,16 @@ describe("Items - Leek", () => {
const partyMember = game.scene.getPlayerPokemon()!; const partyMember = game.scene.getPlayerPokemon()!;
// Making sure modifier is not applied without holding item // Making sure modifier is not applied without holding item
const critLevel = new Utils.IntegerHolder(0); const critStage = new Utils.IntegerHolder(0);
partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); 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 // Giving Leek to party member and testing if it applies
partyMember.scene.addModifier(modifierTypes.LEEK().newModifier(partyMember), true); 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); }, 20000);
it("LEEK held by GALAR_FARFETCHD", async() => { it("LEEK held by GALAR_FARFETCHD", async() => {
@ -78,16 +78,16 @@ describe("Items - Leek", () => {
const partyMember = game.scene.getPlayerPokemon()!; const partyMember = game.scene.getPlayerPokemon()!;
// Making sure modifier is not applied without holding item // Making sure modifier is not applied without holding item
const critLevel = new Utils.IntegerHolder(0); const critStage = new Utils.IntegerHolder(0);
partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); 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 // Giving Leek to party member and testing if it applies
partyMember.scene.addModifier(modifierTypes.LEEK().newModifier(partyMember), true); 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); }, 20000);
it("LEEK held by SIRFETCHD", async() => { it("LEEK held by SIRFETCHD", async() => {
@ -98,16 +98,16 @@ describe("Items - Leek", () => {
const partyMember = game.scene.getPlayerPokemon()!; const partyMember = game.scene.getPlayerPokemon()!;
// Making sure modifier is not applied without holding item // Making sure modifier is not applied without holding item
const critLevel = new Utils.IntegerHolder(0); const critStage = new Utils.IntegerHolder(0);
partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); 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 // Giving Leek to party member and testing if it applies
partyMember.scene.addModifier(modifierTypes.LEEK().newModifier(partyMember), true); 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); }, 20000);
it("LEEK held by fused FARFETCHD line (base)", async() => { it("LEEK held by fused FARFETCHD line (base)", async() => {
@ -133,16 +133,16 @@ describe("Items - Leek", () => {
partyMember.fusionLuck = ally.luck; partyMember.fusionLuck = ally.luck;
// Making sure modifier is not applied without holding item // Making sure modifier is not applied without holding item
const critLevel = new Utils.IntegerHolder(0); const critStage = new Utils.IntegerHolder(0);
partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); 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 // Giving Leek to party member and testing if it applies
partyMember.scene.addModifier(modifierTypes.LEEK().newModifier(partyMember), true); 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); }, 20000);
it("LEEK held by fused FARFETCHD line (part)", async() => { it("LEEK held by fused FARFETCHD line (part)", async() => {
@ -168,16 +168,16 @@ describe("Items - Leek", () => {
partyMember.fusionLuck = ally.luck; partyMember.fusionLuck = ally.luck;
// Making sure modifier is not applied without holding item // Making sure modifier is not applied without holding item
const critLevel = new Utils.IntegerHolder(0); const critStage = new Utils.IntegerHolder(0);
partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); 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 // Giving Leek to party member and testing if it applies
partyMember.scene.addModifier(modifierTypes.LEEK().newModifier(partyMember), true); 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); }, 20000);
it("LEEK not held by FARFETCHD line", async() => { it("LEEK not held by FARFETCHD line", async() => {
@ -188,15 +188,15 @@ describe("Items - Leek", () => {
const partyMember = game.scene.getPlayerPokemon()!; const partyMember = game.scene.getPlayerPokemon()!;
// Making sure modifier is not applied without holding item // Making sure modifier is not applied without holding item
const critLevel = new Utils.IntegerHolder(0); const critStage = new Utils.IntegerHolder(0);
partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); 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 // Giving Leek to party member and testing if it applies
partyMember.scene.addModifier(modifierTypes.LEEK().newModifier(partyMember), true); 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); }, 20000);
}); });

View File

@ -58,15 +58,15 @@ describe("Items - Scope Lens", () => {
const partyMember = game.scene.getPlayerPokemon()!; const partyMember = game.scene.getPlayerPokemon()!;
// Making sure modifier is not applied without holding item // Making sure modifier is not applied without holding item
const critLevel = new Utils.IntegerHolder(0); const critStage = new Utils.IntegerHolder(0);
partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); 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 // Giving Scope Lens to party member and testing if it applies
partyMember.scene.addModifier(modifierTypes.SCOPE_LENS().newModifier(partyMember), true); 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); }, 20000);
}); });

View File

@ -40,7 +40,7 @@ describe("Moves - FILLET AWAY", () => {
//Bulbapedia Reference: https://bulbapedia.bulbagarden.net/wiki/fillet_away_(move) //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() => { async() => {
await game.startBattle([Species.MAGIKARP]); await game.startBattle([Species.MAGIKARP]);
@ -57,7 +57,7 @@ describe("Moves - FILLET AWAY", () => {
}, TIMEOUT }, 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() => { async() => {
await game.startBattle([Species.MAGIKARP]); await game.startBattle([Species.MAGIKARP]);
@ -78,7 +78,7 @@ describe("Moves - FILLET AWAY", () => {
}, TIMEOUT }, TIMEOUT
); );
test("Fillet Away fails if all stats involved are at max", test("fails if all stat stages involved are at max",
async() => { async() => {
await game.startBattle([Species.MAGIKARP]); await game.startBattle([Species.MAGIKARP]);
@ -98,7 +98,7 @@ describe("Moves - FILLET AWAY", () => {
}, TIMEOUT }, 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() => { async() => {
await game.startBattle([Species.MAGIKARP]); await game.startBattle([Species.MAGIKARP]);

View File

@ -1,13 +1,12 @@
import BattleScene from "../battle-scene"; import BattleScene from "../battle-scene";
import { addBBCodeTextObject, addTextObject, getTextColor, TextStyle } from "./text"; import { addBBCodeTextObject, addTextObject, getTextColor, TextStyle } from "./text";
import { Mode } from "./ui"; import { Mode } from "./ui";
import * as Utils from "../utils";
import MessageUiHandler from "./message-ui-handler"; import MessageUiHandler from "./message-ui-handler";
import { addWindow } from "./ui-theme"; import { addWindow } from "./ui-theme";
import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext";
import {Button} from "#enums/buttons"; import {Button} from "#enums/buttons";
import i18next from "i18next"; 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 { export default class BattleMessageUiHandler extends MessageUiHandler {
private levelUpStatsContainer: Phaser.GameObjects.Container; private levelUpStatsContainer: Phaser.GameObjects.Container;
@ -171,8 +170,7 @@ export default class BattleMessageUiHandler extends MessageUiHandler {
} }
const newStats = (this.scene as BattleScene).getParty()[partyMemberIndex].stats; const newStats = (this.scene as BattleScene).getParty()[partyMemberIndex].stats;
let levelUpStatsValuesText = ""; let levelUpStatsValuesText = "";
const stats = Utils.getEnumValues(Stat); for (const s of PERMANENT_STATS) {
for (const s of stats) {
levelUpStatsValuesText += `${showTotals ? newStats[s] : newStats[s] - prevStats[s]}\n`; levelUpStatsValuesText += `${showTotals ? newStats[s] : newStats[s] - prevStats[s]}\n`;
} }
this.levelUpStatsValuesContent.text = levelUpStatsValuesText; this.levelUpStatsValuesContent.text = levelUpStatsValuesText;
@ -194,10 +192,9 @@ export default class BattleMessageUiHandler extends MessageUiHandler {
return new Promise(resolve => { return new Promise(resolve => {
this.scene.executeWithSeedOffset(() => { this.scene.executeWithSeedOffset(() => {
let levelUpStatsValuesText = ""; let levelUpStatsValuesText = "";
const stats = Utils.getEnumValues(Stat);
const shownStats = this.getTopIvs(ivs, shownIvsCount); const shownStats = this.getTopIvs(ivs, shownIvsCount);
for (const s of stats) { for (const s of PERMANENT_STATS) {
levelUpStatsValuesText += `${shownStats.indexOf(s) > -1 ? this.getIvDescriptor(ivs[s], s, pokemonId) : "???"}\n`; levelUpStatsValuesText += `${shownStats.includes(s) ? this.getIvDescriptor(ivs[s], s, pokemonId) : "???"}\n`;
} }
this.levelUpStatsValuesContent.text = levelUpStatsValuesText; this.levelUpStatsValuesContent.text = levelUpStatsValuesText;
this.levelUpStatsIncrContent.setVisible(false); this.levelUpStatsIncrContent.setVisible(false);
@ -212,26 +209,17 @@ export default class BattleMessageUiHandler extends MessageUiHandler {
} }
getTopIvs(ivs: integer[], shownIvsCount: integer): Stat[] { getTopIvs(ivs: integer[], shownIvsCount: integer): Stat[] {
const stats = Utils.getEnumValues(Stat);
let shownStats: Stat[] = []; let shownStats: Stat[] = [];
if (shownIvsCount < 6) { if (shownIvsCount < 6) {
const statsPool = stats.slice(0); let highestIv = -1;
for (let i = 0; i < shownIvsCount; i++) { for (let i = 0; i < shownIvsCount; i++) {
let shownStat: Stat | null = null; if (ivs[i] > highestIv) {
let highestIv = -1; shownStats.push(PERMANENT_STATS[i]);
statsPool.map(s => { highestIv = ivs[i];
if (ivs[s] > highestIv) {
shownStat = s as Stat;
highestIv = ivs[s];
}
});
if (shownStat) {
shownStats.push(shownStat);
statsPool.splice(statsPool.indexOf(shownStat), 1);
} }
} }
} else { } else {
shownStats = stats; shownStats = PERMANENT_STATS.slice();
} }
return shownStats; return shownStats;
} }