rename to Expert Pokemon Breeder

This commit is contained in:
ImperialSympathizer 2024-09-19 15:28:34 -04:00
parent 280db86999
commit 3085f2e224
14 changed files with 54 additions and 51 deletions

View File

@ -1,7 +1,7 @@
{
"textures": [
{
"image": "expert_breeder.png",
"image": "expert_pokemon_breeder.png",
"format": "RGBA8888",
"size": {
"w": 39,

View File

Before

Width:  |  Height:  |  Size: 1006 B

After

Width:  |  Height:  |  Size: 1006 B

View File

@ -1139,7 +1139,10 @@ export default class BattleScene extends SceneBase {
let battleConfig: FixedBattleConfig | null = null;
this.newArena(Biome.SPACE);
this.fieldUI.setVisible(false);
this.trainer.setVisible(false);
this.ui.setVisible(false);
this.modifierBar.setVisible(false);
this.resetSeed(newWaveIndex);

View File

@ -26,9 +26,9 @@ import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode
import { achvs } from "#app/system/achv";
/** the i18n namespace for the encounter */
const namespace = "mysteryEncounter:expertBreeder";
const namespace = "mysteryEncounter:expertPokemonBreeder";
const trainerNameKey = "trainerNames:expert_breeder";
const trainerNameKey = "trainerNames:expert_pokemon_breeder";
const FIRST_STAGE_EVOLUTION_WAVE = 30;
const SECOND_STAGE_EVOLUTION_WAVE = 45;
@ -73,12 +73,12 @@ const POOL_2_POKEMON: (Species | BreederSpeciesEvolution)[][] = [
];
/**
* The Expert Breeder encounter.
* The Expert Pokémon Breeder encounter.
* @see {@link https://github.com/pagefaultgames/pokerogue/issues/3818 | GitHub Issue #3818}
* @see For biome requirements check {@linkcode mysteryEncountersByBiome}
*/
export const TheExpertBreederEncounter: MysteryEncounter =
MysteryEncounterBuilder.withEncounterType(MysteryEncounterType.THE_EXPERT_BREEDER)
export const TheExpertPokemonBreederEncounter: MysteryEncounter =
MysteryEncounterBuilder.withEncounterType(MysteryEncounterType.THE_EXPERT_POKEMON_BREEDER)
.withEncounterTier(MysteryEncounterTier.ULTRA)
.withSceneWaveRangeRequirement(...CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES)
.withScenePartySizeRequirement(4, 6, true) // Must have at least 4 legal pokemon in party
@ -114,7 +114,7 @@ export const TheExpertBreederEncounter: MysteryEncounter =
yShadow: -2
},
{
spriteKey: "expert_breeder",
spriteKey: "expert_pokemon_breeder",
fileRoot: "trainer",
hasShadow: true,
x: -14,
@ -370,13 +370,13 @@ export const TheExpertBreederEncounter: MysteryEncounter =
function getPartyConfig(scene: BattleScene): EnemyPartyConfig {
// Bug type superfan trainer config
const waveIndex = scene.currentBattle.waveIndex;
const breederConfig = trainerConfigs[TrainerType.EXPERT_BREEDER].clone();
const breederConfig = trainerConfigs[TrainerType.EXPERT_POKEMON_BREEDER].clone();
breederConfig.name = i18next.t(trainerNameKey);
// First mon is *always* this special cleffa
const cleffaSpecies = waveIndex < FIRST_STAGE_EVOLUTION_WAVE ? Species.CLEFFA : waveIndex < FINAL_STAGE_EVOLUTION_WAVE ? Species.CLEFAIRY : Species.CLEFABLE;
const baseConfig: EnemyPartyConfig = {
trainerType: TrainerType.EXPERT_BREEDER,
trainerType: TrainerType.EXPERT_POKEMON_BREEDER,
pokemonConfigs: [
{
nickname: i18next.t(`${namespace}.cleffa_1_nickname`),

View File

@ -31,7 +31,7 @@ import { BugTypeSuperfanEncounter } from "#app/data/mystery-encounters/encounter
import { FunAndGamesEncounter } from "#app/data/mystery-encounters/encounters/fun-and-games-encounter";
import { UncommonBreedEncounter } from "#app/data/mystery-encounters/encounters/uncommon-breed-encounter";
import { GlobalTradeSystemEncounter } from "#app/data/mystery-encounters/encounters/global-trade-system-encounter";
import { TheExpertBreederEncounter } from "#app/data/mystery-encounters/encounters/the-expert-breeder-encounter";
import { TheExpertPokemonBreederEncounter } from "#app/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter";
/**
* Spawn chance: (BASE_MYSTERY_ENCOUNTER_SPAWN_WEIGHT + WIGHT_INCREMENT_ON_SPAWN_MISS * <number of missed spawns>) / MYSTERY_ENCOUNTER_SPAWN_MAX_WEIGHT
@ -186,7 +186,7 @@ const humanTransitableBiomeEncounters: MysteryEncounterType[] = [
MysteryEncounterType.THE_POKEMON_SALESMAN,
MysteryEncounterType.AN_OFFER_YOU_CANT_REFUSE,
MysteryEncounterType.THE_WINSTRATE_CHALLENGE,
MysteryEncounterType.THE_EXPERT_BREEDER
MysteryEncounterType.THE_EXPERT_POKEMON_BREEDER
];
const civilizationBiomeEncounters: MysteryEncounterType[] = [
@ -277,7 +277,7 @@ export const mysteryEncountersByBiome = new Map<Biome, MysteryEncounterType[]>([
MysteryEncounterType.DANCING_LESSONS
]],
[Biome.SPACE, [
MysteryEncounterType.THE_EXPERT_BREEDER
MysteryEncounterType.THE_EXPERT_POKEMON_BREEDER
]],
[Biome.CONSTRUCTION_SITE, []],
[Biome.JUNGLE, [
@ -322,7 +322,7 @@ export function initMysteryEncounters() {
allMysteryEncounters[MysteryEncounterType.FUN_AND_GAMES] = FunAndGamesEncounter;
allMysteryEncounters[MysteryEncounterType.UNCOMMON_BREED] = UncommonBreedEncounter;
allMysteryEncounters[MysteryEncounterType.GLOBAL_TRADE_SYSTEM] = GlobalTradeSystemEncounter;
allMysteryEncounters[MysteryEncounterType.THE_EXPERT_BREEDER] = TheExpertBreederEncounter;
allMysteryEncounters[MysteryEncounterType.THE_EXPERT_POKEMON_BREEDER] = TheExpertPokemonBreederEncounter;
// Add extreme encounters to biome map
extremeBiomeEncounters.forEach(encounter => {

View File

@ -2311,7 +2311,7 @@ export const trainerConfigs: TrainerConfigs = {
.setPartyTemplates(new TrainerPartyCompoundTemplate(new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), new TrainerPartyTemplate(2, PartyMemberStrength.STRONG))),
[TrainerType.BUG_TYPE_SUPERFAN]: new TrainerConfig(++t).setMoneyMultiplier(2.25).setEncounterBgm(TrainerType.ACE_TRAINER)
.setPartyTemplates(new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE)),
[TrainerType.EXPERT_BREEDER]: new TrainerConfig(++t).setMoneyMultiplier(3).setEncounterBgm(TrainerType.ACE_TRAINER)
[TrainerType.EXPERT_POKEMON_BREEDER]: new TrainerConfig(++t).setMoneyMultiplier(3).setEncounterBgm(TrainerType.ACE_TRAINER)
.setPartyTemplates(new TrainerPartyTemplate(3, PartyMemberStrength.STRONG))
};

View File

@ -29,5 +29,5 @@ export enum MysteryEncounterType {
FUN_AND_GAMES,
UNCOMMON_BREED,
GLOBAL_TRADE_SYSTEM,
THE_EXPERT_BREEDER
THE_EXPERT_POKEMON_BREEDER
}

View File

@ -107,7 +107,7 @@ export enum TrainerType {
VICKY,
VITO,
BUG_TYPE_SUPERFAN,
EXPERT_BREEDER,
EXPERT_POKEMON_BREEDER,
BROCK = 200,
MISTY,

View File

@ -286,6 +286,6 @@
},
"BREEDERS_IN_SPACE": {
"name": "Breeders in Space!",
"description": "Beat the Expert Breeder in the Space Biome."
"description": "Beat the Expert Pokémon Breeder in the Space Biome."
}
}

View File

@ -84,7 +84,7 @@ import bugTypeSuperfan from "#app/locales/en/mystery-encounters/bug-type-superfa
import funAndGames from "#app/locales/en/mystery-encounters/fun-and-games-dialogue.json";
import uncommonBreed from "#app/locales/en/mystery-encounters/uncommon-breed-dialogue.json";
import globalTradeSystem from "#app/locales/en/mystery-encounters/global-trade-system-dialogue.json";
import expertBreeder from "#app/locales/en/mystery-encounters/the-expert-breeder-dialogue.json";
import expertPokemonBreeder from "#app/locales/en/mystery-encounters/the-expert-pokemon-breeder-dialogue.json";
/**
* Dialogue/Text token injection patterns that can be used:
@ -185,7 +185,7 @@ export const enConfig = {
funAndGames,
uncommonBreed,
globalTradeSystem,
expertBreeder
expertPokemonBreeder
},
mysteryEncounterMessages
};

View File

@ -1,7 +1,7 @@
{
"intro": "It's a trainer carrying tons of Pokémon Eggs!",
"intro_dialogue": "Hey there, trainer!$It looks like some of your\npartner Pokémon are feeling a little down.$Why not have a battle with me to cheer them up?",
"title": "The Expert Breeder",
"title": "The Expert Pokémon Breeder",
"description": "You've been challenged to a battle where @[TOOLTIP_TITLE]{you can only use a single Pokémon}. It might be tough, but it would surely deepen the bond you have with the Pokémon you choose!\nThe breeder will also give you some @[TOOLTIP_TITLE]{Pokémon Eggs} if you win!",
"query": "Who will you battle with?",
"cleffa_1_nickname": "Ace",

View File

@ -173,5 +173,5 @@
"vicky": "Vicky",
"vito": "Vito",
"bug_type_superfan": "Bug-Type Superfan",
"expert_breeder": "Expert Breeder"
"expert_pokemon_breeder": "Expert Pokémon Breeder"
}

View File

@ -145,7 +145,7 @@ class DefaultOverrides {
/** 1 to 256, set to null to ignore */
readonly MYSTERY_ENCOUNTER_RATE_OVERRIDE: number | null = 256;
readonly MYSTERY_ENCOUNTER_TIER_OVERRIDE: MysteryEncounterTier | null = null;
readonly MYSTERY_ENCOUNTER_OVERRIDE: MysteryEncounterType | null = MysteryEncounterType.THE_EXPERT_BREEDER;
readonly MYSTERY_ENCOUNTER_OVERRIDE: MysteryEncounterType | null = MysteryEncounterType.THE_EXPERT_POKEMON_BREEDER;
// -------------------------
// MODIFIER / ITEM OVERRIDES

View File

@ -14,7 +14,7 @@ import { MysteryEncounterMode } from "#enums/mystery-encounter-mode";
import MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter";
import { CommandPhase } from "#app/phases/command-phase";
import { SelectModifierPhase } from "#app/phases/select-modifier-phase";
import { TheExpertBreederEncounter } from "#app/data/mystery-encounters/encounters/the-expert-breeder-encounter";
import { TheExpertPokemonBreederEncounter } from "#app/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter";
import { TrainerType } from "#enums/trainer-type";
import { EggTier } from "#enums/egg-type";
import { PostMysteryEncounterPhase } from "#app/phases/mystery-encounter-phases";
@ -24,7 +24,7 @@ const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA];
const defaultBiome = Biome.CAVE;
const defaultWave = 45;
describe("The Expert Breeder - Mystery Encounter", () => {
describe("The Expert Pokémon Breeder - Mystery Encounter", () => {
let phaserGame: Phaser.Game;
let game: GameManager;
let scene: BattleScene;
@ -45,7 +45,7 @@ describe("The Expert Breeder - Mystery Encounter", () => {
[Biome.VOLCANO, [MysteryEncounterType.FIGHT_OR_FLIGHT]],
]);
HUMAN_TRANSITABLE_BIOMES.forEach(biome => {
biomeMap.set(biome, [MysteryEncounterType.THE_EXPERT_BREEDER]);
biomeMap.set(biome, [MysteryEncounterType.THE_EXPERT_POKEMON_BREEDER]);
});
vi.spyOn(MysteryEncounters, "mysteryEncountersByBiome", "get").mockReturnValue(biomeMap);
});
@ -57,24 +57,24 @@ describe("The Expert Breeder - Mystery Encounter", () => {
});
it("should have the correct properties", async () => {
await game.runToMysteryEncounter(MysteryEncounterType.THE_EXPERT_BREEDER, defaultParty);
await game.runToMysteryEncounter(MysteryEncounterType.THE_EXPERT_POKEMON_BREEDER, defaultParty);
expect(TheExpertBreederEncounter.encounterType).toBe(MysteryEncounterType.THE_EXPERT_BREEDER);
expect(TheExpertBreederEncounter.encounterTier).toBe(MysteryEncounterTier.ULTRA);
expect(TheExpertBreederEncounter.dialogue).toBeDefined();
expect(TheExpertBreederEncounter.dialogue.intro).toStrictEqual([
expect(TheExpertPokemonBreederEncounter.encounterType).toBe(MysteryEncounterType.THE_EXPERT_POKEMON_BREEDER);
expect(TheExpertPokemonBreederEncounter.encounterTier).toBe(MysteryEncounterTier.ULTRA);
expect(TheExpertPokemonBreederEncounter.dialogue).toBeDefined();
expect(TheExpertPokemonBreederEncounter.dialogue.intro).toStrictEqual([
{
text: `${namespace}.intro`
},
{
speaker: "trainerNames:expert_breeder",
speaker: "trainerNames:expert_pokemon_breeder",
text: `${namespace}.intro_dialogue`
},
]);
expect(TheExpertBreederEncounter.dialogue.encounterOptionsDialogue?.title).toBe(`${namespace}.title`);
expect(TheExpertBreederEncounter.dialogue.encounterOptionsDialogue?.description).toBe(`${namespace}.description`);
expect(TheExpertBreederEncounter.dialogue.encounterOptionsDialogue?.query).toBe(`${namespace}.query`);
expect(TheExpertBreederEncounter.options.length).toBe(3);
expect(TheExpertPokemonBreederEncounter.dialogue.encounterOptionsDialogue?.title).toBe(`${namespace}.title`);
expect(TheExpertPokemonBreederEncounter.dialogue.encounterOptionsDialogue?.description).toBe(`${namespace}.description`);
expect(TheExpertPokemonBreederEncounter.dialogue.encounterOptionsDialogue?.query).toBe(`${namespace}.query`);
expect(TheExpertPokemonBreederEncounter.options.length).toBe(3);
});
it("should not spawn outside of HUMAN_TRANSITABLE_BIOMES", async () => {
@ -82,12 +82,12 @@ describe("The Expert Breeder - Mystery Encounter", () => {
game.override.startingBiome(Biome.VOLCANO);
await game.runToMysteryEncounter();
expect(scene.currentBattle?.mysteryEncounter?.encounterType).not.toBe(MysteryEncounterType.THE_EXPERT_BREEDER);
expect(scene.currentBattle?.mysteryEncounter?.encounterType).not.toBe(MysteryEncounterType.THE_EXPERT_POKEMON_BREEDER);
});
it("should initialize fully", async () => {
initSceneWithoutEncounterPhase(scene, defaultParty);
scene.currentBattle.mysteryEncounter = new MysteryEncounter(TheExpertBreederEncounter);
scene.currentBattle.mysteryEncounter = new MysteryEncounter(TheExpertPokemonBreederEncounter);
const encounter = scene.currentBattle.mysteryEncounter!;
scene.currentBattle.waveIndex = defaultWave;
@ -100,7 +100,7 @@ describe("The Expert Breeder - Mystery Encounter", () => {
expect(encounter.enemyPartyConfigs).toBeDefined();
expect(encounter.enemyPartyConfigs.length).toBe(1);
expect(encounter.enemyPartyConfigs[0].trainerType).toBe(TrainerType.EXPERT_BREEDER);
expect(encounter.enemyPartyConfigs[0].trainerType).toBe(TrainerType.EXPERT_POKEMON_BREEDER);
expect(encounter.enemyPartyConfigs[0].pokemonConfigs?.length).toBe(3);
expect(encounter.spriteConfigs).toBeDefined();
expect(encounter.spriteConfigs.length).toBe(2);
@ -109,7 +109,7 @@ describe("The Expert Breeder - Mystery Encounter", () => {
describe("Option 1 - Battle with Pokemon 1", () => {
it("should have the correct properties", () => {
const option = TheExpertBreederEncounter.options[0];
const option = TheExpertPokemonBreederEncounter.options[0];
expect(option.optionMode).toBe(MysteryEncounterOptionMode.DEFAULT);
expect(option.dialogue).toBeDefined();
expect(option.dialogue).toStrictEqual({
@ -117,7 +117,7 @@ describe("The Expert Breeder - Mystery Encounter", () => {
buttonTooltip: expect.any(String), // Varies based on pokemon
selected: [
{
speaker: "trainerNames:expert_breeder",
speaker: "trainerNames:expert_pokemon_breeder",
text: `${namespace}.option.selected`,
},
],
@ -125,7 +125,7 @@ describe("The Expert Breeder - Mystery Encounter", () => {
});
it("should start battle against the trainer", async () => {
await game.runToMysteryEncounter(MysteryEncounterType.THE_EXPERT_BREEDER, defaultParty);
await game.runToMysteryEncounter(MysteryEncounterType.THE_EXPERT_POKEMON_BREEDER, defaultParty);
await runMysteryEncounterToEnd(game, 1, undefined, true);
expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name);
@ -135,7 +135,7 @@ describe("The Expert Breeder - Mystery Encounter", () => {
});
it("Should reward the player with friendship and eggs based on pokemon selected", async () => {
await game.runToMysteryEncounter(MysteryEncounterType.THE_EXPERT_BREEDER, defaultParty);
await game.runToMysteryEncounter(MysteryEncounterType.THE_EXPERT_POKEMON_BREEDER, defaultParty);
const friendshipBefore = scene.currentBattle.mysteryEncounter!.misc.pokemon1.friendship;
@ -167,7 +167,7 @@ describe("The Expert Breeder - Mystery Encounter", () => {
describe("Option 2 - Battle with Pokemon 2", () => {
it("should have the correct properties", () => {
const option = TheExpertBreederEncounter.options[1];
const option = TheExpertPokemonBreederEncounter.options[1];
expect(option.optionMode).toBe(MysteryEncounterOptionMode.DEFAULT);
expect(option.dialogue).toBeDefined();
expect(option.dialogue).toStrictEqual({
@ -175,7 +175,7 @@ describe("The Expert Breeder - Mystery Encounter", () => {
buttonTooltip: expect.any(String), // Varies based on pokemon
selected: [
{
speaker: "trainerNames:expert_breeder",
speaker: "trainerNames:expert_pokemon_breeder",
text: `${namespace}.option.selected`,
},
],
@ -183,7 +183,7 @@ describe("The Expert Breeder - Mystery Encounter", () => {
});
it("should start battle against the trainer", async () => {
await game.runToMysteryEncounter(MysteryEncounterType.THE_EXPERT_BREEDER, defaultParty);
await game.runToMysteryEncounter(MysteryEncounterType.THE_EXPERT_POKEMON_BREEDER, defaultParty);
await runMysteryEncounterToEnd(game, 2, undefined, true);
expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name);
@ -193,7 +193,7 @@ describe("The Expert Breeder - Mystery Encounter", () => {
});
it("Should reward the player with friendship and eggs based on pokemon selected", async () => {
await game.runToMysteryEncounter(MysteryEncounterType.THE_EXPERT_BREEDER, defaultParty);
await game.runToMysteryEncounter(MysteryEncounterType.THE_EXPERT_POKEMON_BREEDER, defaultParty);
const friendshipBefore = scene.currentBattle.mysteryEncounter!.misc.pokemon2.friendship;
@ -225,7 +225,7 @@ describe("The Expert Breeder - Mystery Encounter", () => {
describe("Option 3 - Battle with Pokemon 3", () => {
it("should have the correct properties", () => {
const option = TheExpertBreederEncounter.options[2];
const option = TheExpertPokemonBreederEncounter.options[2];
expect(option.optionMode).toBe(MysteryEncounterOptionMode.DEFAULT);
expect(option.dialogue).toBeDefined();
expect(option.dialogue).toStrictEqual({
@ -233,7 +233,7 @@ describe("The Expert Breeder - Mystery Encounter", () => {
buttonTooltip: expect.any(String), // Varies based on pokemon
selected: [
{
speaker: "trainerNames:expert_breeder",
speaker: "trainerNames:expert_pokemon_breeder",
text: `${namespace}.option.selected`,
},
],
@ -241,7 +241,7 @@ describe("The Expert Breeder - Mystery Encounter", () => {
});
it("should start battle against the trainer", async () => {
await game.runToMysteryEncounter(MysteryEncounterType.THE_EXPERT_BREEDER, defaultParty);
await game.runToMysteryEncounter(MysteryEncounterType.THE_EXPERT_POKEMON_BREEDER, defaultParty);
await runMysteryEncounterToEnd(game, 3, undefined, true);
expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name);
@ -251,7 +251,7 @@ describe("The Expert Breeder - Mystery Encounter", () => {
});
it("Should reward the player with friendship and eggs based on pokemon selected", async () => {
await game.runToMysteryEncounter(MysteryEncounterType.THE_EXPERT_BREEDER, defaultParty);
await game.runToMysteryEncounter(MysteryEncounterType.THE_EXPERT_POKEMON_BREEDER, defaultParty);
const friendshipBefore = scene.currentBattle.mysteryEncounter!.misc.pokemon3.friendship;