Merge branch 'beta' into Court-Change-Additions

This commit is contained in:
thisPieonFire 2025-08-04 10:15:33 +02:00 committed by GitHub
commit f7f863070f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 82 additions and 26 deletions

View File

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

View File

@ -59,7 +59,7 @@ export const TeleportingHijinksEncounter: MysteryEncounter = MysteryEncounterBui
)
.withEncounterTier(MysteryEncounterTier.COMMON)
.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
.withAutoHideIntroVisuals(false)
.withCatchAllowed(true)

View File

@ -1244,12 +1244,58 @@ export const trainerConfigs: TrainerConfigs = {
.setHasDouble("Breeders")
.setPartyTemplateFunc(() =>
getWavePartyTemplate(
trainerPartyTemplates.FOUR_WEAKER,
trainerPartyTemplates.FIVE_WEAKER,
trainerPartyTemplates.SIX_WEAKER,
trainerPartyTemplates.FOUR_WEAK,
trainerPartyTemplates.FIVE_WEAK,
trainerPartyTemplates.SIX_WEAK,
),
)
.setSpeciesFilter(s => s.baseTotal < 450),
.setSpeciesPools({
[TrainerPoolTier.COMMON]: [
SpeciesId.PICHU,
SpeciesId.CLEFFA,
SpeciesId.IGGLYBUFF,
SpeciesId.TOGEPI,
SpeciesId.TYROGUE,
SpeciesId.SMOOCHUM,
SpeciesId.AZURILL,
SpeciesId.BUDEW,
SpeciesId.CHINGLING,
SpeciesId.BONSLY,
SpeciesId.MIME_JR,
SpeciesId.HAPPINY,
SpeciesId.MANTYKE,
SpeciesId.TOXEL,
],
[TrainerPoolTier.UNCOMMON]: [
SpeciesId.DITTO,
SpeciesId.ELEKID,
SpeciesId.MAGBY,
SpeciesId.WYNAUT,
SpeciesId.MUNCHLAX,
SpeciesId.RIOLU,
SpeciesId.AUDINO,
],
[TrainerPoolTier.RARE]: [
SpeciesId.ALOLA_RATTATA,
SpeciesId.ALOLA_SANDSHREW,
SpeciesId.ALOLA_VULPIX,
SpeciesId.ALOLA_DIGLETT,
SpeciesId.ALOLA_MEOWTH,
SpeciesId.GALAR_PONYTA,
],
[TrainerPoolTier.SUPER_RARE]: [
SpeciesId.ALOLA_GEODUDE,
SpeciesId.ALOLA_GRIMER,
SpeciesId.GALAR_MEOWTH,
SpeciesId.GALAR_SLOWPOKE,
SpeciesId.GALAR_FARFETCHD,
SpeciesId.HISUI_GROWLITHE,
SpeciesId.HISUI_VOLTORB,
SpeciesId.HISUI_QWILFISH,
SpeciesId.HISUI_SNEASEL,
SpeciesId.HISUI_ZORUA,
],
}),
[TrainerType.CLERK]: new TrainerConfig(++t)
.setHasGenders("Clerk Female")
.setHasDouble("Colleagues")

View File

@ -144,6 +144,7 @@ export const trainerPartyTemplates = {
FIVE_WEAK_BALANCED: new TrainerPartyTemplate(5, PartyMemberStrength.WEAK, false, true),
SIX_WEAKER: new TrainerPartyTemplate(6, PartyMemberStrength.WEAKER),
SIX_WEAKER_SAME: new TrainerPartyTemplate(6, PartyMemberStrength.WEAKER, true),
SIX_WEAK: new TrainerPartyTemplate(6, PartyMemberStrength.WEAK),
SIX_WEAK_SAME: new TrainerPartyTemplate(6, PartyMemberStrength.WEAK, true),
SIX_WEAK_BALANCED: new TrainerPartyTemplate(6, PartyMemberStrength.WEAK, false, true),

View File

@ -206,7 +206,7 @@ describe("Moves - Whirlwind", () => {
await game.classicMode.startBattle([SpeciesId.MAGIKARP, SpeciesId.TOTODILE]);
// expect the enemy to have at least 4 pokemon, necessary for this check to even work
expect(game.scene.getEnemyParty().length, "enemy must have exactly 4 pokemon").toBe(4);
expect(game.scene.getEnemyParty().length, "enemy must have exactly 4 pokemon").toBeGreaterThanOrEqual(4);
const user = game.scene.getPlayerPokemon()!;

View File

@ -174,7 +174,7 @@ describe("Berries Abound - Mystery Encounter", () => {
});
it("should start battle if fastest pokemon is slower than boss below wave 50", async () => {
game.override.startingWave(41);
game.override.startingWave(42);
const encounterTextSpy = vi.spyOn(EncounterDialogueUtils, "showEncounterText");
await game.runToMysteryEncounter(MysteryEncounterType.BERRIES_ABOUND, defaultParty);

View File

@ -253,7 +253,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => {
});
it("should start battle against the Bug-Type Superfan with wave 70 party template", async () => {
game.override.startingWave(61);
game.override.startingWave(63);
await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, defaultParty);
await runMysteryEncounterToEnd(game, 1, undefined, true);
@ -268,7 +268,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => {
});
it("should start battle against the Bug-Type Superfan with wave 100 party template", async () => {
game.override.startingWave(81);
game.override.startingWave(83);
await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, defaultParty);
await runMysteryEncounterToEnd(game, 1, undefined, true);
@ -284,7 +284,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => {
});
it("should start battle against the Bug-Type Superfan with wave 120 party template", async () => {
game.override.startingWave(111);
game.override.startingWave(113);
await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, defaultParty);
await runMysteryEncounterToEnd(game, 1, undefined, true);
@ -302,7 +302,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => {
});
it("should start battle against the Bug-Type Superfan with wave 140 party template", async () => {
game.override.startingWave(131);
game.override.startingWave(133);
await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, defaultParty);
await runMysteryEncounterToEnd(game, 1, undefined, true);
@ -320,7 +320,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => {
});
it("should start battle against the Bug-Type Superfan with wave 160 party template", async () => {
game.override.startingWave(151);
game.override.startingWave(153);
await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, defaultParty);
await runMysteryEncounterToEnd(game, 1, undefined, true);
@ -338,7 +338,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => {
});
it("should start battle against the Bug-Type Superfan with wave 180 party template", async () => {
game.override.startingWave(171);
game.override.startingWave(173);
await game.runToMysteryEncounter(MysteryEncounterType.BUG_TYPE_SUPERFAN, defaultParty);
await runMysteryEncounterToEnd(game, 1, undefined, true);

View File

@ -79,14 +79,6 @@ describe("Teleporting Hijinks - Mystery Encounter", () => {
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 () => {
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);
});
it("should NOT run in waves that are not X1, X2, or X3", async () => {
game.override.startingWave(54);
it("should run in waves that are X4", async () => {
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();

View File

@ -24,7 +24,7 @@ describe("Mystery Encounters", () => {
beforeEach(() => {
game = new GameManager(phaserGame);
scene = game.scene;
game.override.startingWave(11).mysteryEncounterChance(100);
game.override.startingWave(12).mysteryEncounterChance(100);
});
it("Spawns a mystery encounter", async () => {
@ -37,12 +37,20 @@ describe("Mystery Encounters", () => {
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).toBeUndefined();
});
it("Encounters should not run below wave 10", async () => {
game.override.startingWave(9);
await game.runToMysteryEncounter();
expect(scene.currentBattle?.mysteryEncounter?.encounterType).not.toBe(MysteryEncounterType.MYSTERIOUS_CHALLENGERS);
expect(scene.currentBattle.mysteryEncounter).toBeUndefined();
});
it("Encounters should not run above wave 180", async () => {

View File

@ -27,7 +27,7 @@ describe("Mystery Encounter Phases", () => {
beforeEach(() => {
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", () => {