[Balance] Prevent MEs on X1 Waves

This commit is contained in:
xsn34kzx 2025-08-02 22:23:29 -04:00
parent 491df80b66
commit 9b04ef3dba
5 changed files with 22 additions and 13 deletions

View File

@ -3528,6 +3528,7 @@ export class BattleScene extends SceneBase {
this.gameMode.hasMysteryEncounters && this.gameMode.hasMysteryEncounters &&
battleType === BattleType.WILD && battleType === BattleType.WILD &&
!this.gameMode.isBoss(waveIndex) && !this.gameMode.isBoss(waveIndex) &&
waveIndex % 10 !== 1 &&
waveIndex < highestMysteryEncounterWave && waveIndex < highestMysteryEncounterWave &&
waveIndex > lowestMysteryEncounterWave waveIndex > lowestMysteryEncounterWave
); );

View File

@ -59,7 +59,7 @@ export const TeleportingHijinksEncounter: MysteryEncounter = MysteryEncounterBui
) )
.withEncounterTier(MysteryEncounterTier.COMMON) .withEncounterTier(MysteryEncounterTier.COMMON)
.withSceneWaveRangeRequirement(...CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES) .withSceneWaveRangeRequirement(...CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES)
.withSceneRequirement(new WaveModulusRequirement([1, 2, 3], 10)) // Must be in first 3 waves after boss wave .withSceneRequirement(new WaveModulusRequirement([2, 3, 4], 10)) // Must be in first 3 waves after boss wave
.withSceneRequirement(new MoneyRequirement(0, MONEY_COST_MULTIPLIER)) // Must be able to pay teleport cost .withSceneRequirement(new MoneyRequirement(0, MONEY_COST_MULTIPLIER)) // Must be able to pay teleport cost
.withAutoHideIntroVisuals(false) .withAutoHideIntroVisuals(false)
.withCatchAllowed(true) .withCatchAllowed(true)

View File

@ -79,14 +79,6 @@ describe("Teleporting Hijinks - Mystery Encounter", () => {
expect(TeleportingHijinksEncounter.options.length).toBe(3); expect(TeleportingHijinksEncounter.options.length).toBe(3);
}); });
it("should run in waves that are X1", async () => {
game.override.startingWave(11).mysteryEncounterTier(MysteryEncounterTier.COMMON);
await game.runToMysteryEncounter();
expect(scene.currentBattle?.mysteryEncounter?.encounterType).toBe(MysteryEncounterType.TELEPORTING_HIJINKS);
});
it("should run in waves that are X2", async () => { it("should run in waves that are X2", async () => {
game.override.startingWave(32).mysteryEncounterTier(MysteryEncounterTier.COMMON); game.override.startingWave(32).mysteryEncounterTier(MysteryEncounterTier.COMMON);
@ -103,8 +95,16 @@ describe("Teleporting Hijinks - Mystery Encounter", () => {
expect(scene.currentBattle?.mysteryEncounter?.encounterType).toBe(MysteryEncounterType.TELEPORTING_HIJINKS); expect(scene.currentBattle?.mysteryEncounter?.encounterType).toBe(MysteryEncounterType.TELEPORTING_HIJINKS);
}); });
it("should NOT run in waves that are not X1, X2, or X3", async () => { it("should run in waves that are X4", async () => {
game.override.startingWave(54); game.override.startingWave(54).mysteryEncounterTier(MysteryEncounterTier.COMMON);
await game.runToMysteryEncounter();
expect(scene.currentBattle?.mysteryEncounter?.encounterType).toBe(MysteryEncounterType.TELEPORTING_HIJINKS);
});
it("should NOT run in waves that are not X2, X3, or X4", async () => {
game.override.startingWave(67);
await game.runToMysteryEncounter(); await game.runToMysteryEncounter();

View File

@ -24,7 +24,7 @@ describe("Mystery Encounters", () => {
beforeEach(() => { beforeEach(() => {
game = new GameManager(phaserGame); game = new GameManager(phaserGame);
scene = game.scene; scene = game.scene;
game.override.startingWave(11).mysteryEncounterChance(100); game.override.startingWave(12).mysteryEncounterChance(100);
}); });
it("Spawns a mystery encounter", async () => { it("Spawns a mystery encounter", async () => {
@ -37,6 +37,14 @@ describe("Mystery Encounters", () => {
expect(game.scene.phaseManager.getCurrentPhase()!.constructor.name).toBe(MysteryEncounterPhase.name); expect(game.scene.phaseManager.getCurrentPhase()!.constructor.name).toBe(MysteryEncounterPhase.name);
}); });
it("Encounters should not run on X1 waves", async () => {
game.override.startingWave(11);
await game.runToMysteryEncounter();
expect(scene.currentBattle?.mysteryEncounter?.encounterType).not.toBe(MysteryEncounterType.MYSTERIOUS_CHALLENGERS);
});
it("Encounters should not run below wave 10", async () => { it("Encounters should not run below wave 10", async () => {
game.override.startingWave(9); game.override.startingWave(9);

View File

@ -27,7 +27,7 @@ describe("Mystery Encounter Phases", () => {
beforeEach(() => { beforeEach(() => {
game = new GameManager(phaserGame); game = new GameManager(phaserGame);
game.override.startingWave(11).mysteryEncounterChance(100).seed("test"); // Seed guarantees wild encounter to be replaced by ME game.override.startingWave(12).mysteryEncounterChance(100).seed("test"); // Seed guarantees wild encounter to be replaced by ME
}); });
describe("MysteryEncounterPhase", () => { describe("MysteryEncounterPhase", () => {