[Balance] Expert Breeder ME tweaks (#6643)

* Change Strength Template

* Add friendship value to EnemyPokemonConfig, set Cleffa friendship values

Custom friendship values can now be set within Mystery Encounters. Set the Expert Pokemon Breeder's Cleffas to max friendship.

* Set all items as 3 Soothe Bells and nothing else

---------

Co-authored-by: Madmadness65 <blaze.the.fireman@gmail.com>
Co-authored-by: damocleas <damocleas25@gmail.com>
This commit is contained in:
Blitzy 2025-10-09 14:52:36 -05:00 committed by GitHub
parent b6f64aacd2
commit 120f8a2f33
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 43 additions and 3 deletions

View File

@ -16,9 +16,11 @@ import { PokemonType } from "#enums/pokemon-type";
import { SpeciesId } from "#enums/species-id"; import { SpeciesId } from "#enums/species-id";
import { TrainerType } from "#enums/trainer-type"; import { TrainerType } from "#enums/trainer-type";
import type { PlayerPokemon } from "#field/pokemon"; import type { PlayerPokemon } from "#field/pokemon";
import type { PokemonHeldItemModifierType } from "#modifiers/modifier-type";
import { getEncounterText } from "#mystery-encounters/encounter-dialogue-utils"; import { getEncounterText } from "#mystery-encounters/encounter-dialogue-utils";
import type { EnemyPartyConfig } from "#mystery-encounters/encounter-phase-utils"; import type { EnemyPartyConfig } from "#mystery-encounters/encounter-phase-utils";
import { import {
generateModifierType,
handleMysteryEncounterBattleFailed, handleMysteryEncounterBattleFailed,
initBattleWithEnemyConfig, initBattleWithEnemyConfig,
setEncounterRewards, setEncounterRewards,
@ -494,7 +496,14 @@ function getPartyConfig(): EnemyPartyConfig {
nature: Nature.ADAMANT, nature: Nature.ADAMANT,
moveSet: [MoveId.FIRE_PUNCH, MoveId.ICE_PUNCH, MoveId.THUNDER_PUNCH, MoveId.METEOR_MASH], moveSet: [MoveId.FIRE_PUNCH, MoveId.ICE_PUNCH, MoveId.THUNDER_PUNCH, MoveId.METEOR_MASH],
ivs: [31, 31, 31, 31, 31, 31], ivs: [31, 31, 31, 31, 31, 31],
modifierConfigs: [
{
modifier: generateModifierType(modifierTypes.SOOTHE_BELL) as PokemonHeldItemModifierType,
stackCount: 3,
},
],
tera: PokemonType.FAIRY, tera: PokemonType.FAIRY,
friendship: 255,
}, },
], ],
}; };
@ -514,6 +523,13 @@ function getPartyConfig(): EnemyPartyConfig {
nature: Nature.MODEST, nature: Nature.MODEST,
moveSet: [MoveId.DAZZLING_GLEAM, MoveId.MYSTICAL_FIRE, MoveId.ICE_BEAM, MoveId.THUNDERBOLT], // Make this one have an item gimmick when we have more items/finish implementations moveSet: [MoveId.DAZZLING_GLEAM, MoveId.MYSTICAL_FIRE, MoveId.ICE_BEAM, MoveId.THUNDERBOLT], // Make this one have an item gimmick when we have more items/finish implementations
ivs: [31, 31, 31, 31, 31, 31], ivs: [31, 31, 31, 31, 31, 31],
modifierConfigs: [
{
modifier: generateModifierType(modifierTypes.SOOTHE_BELL) as PokemonHeldItemModifierType,
stackCount: 3,
},
],
friendship: 255,
}, },
{ {
nickname: i18next.t(`${namespace}:cleffa3Nickname`, { nickname: i18next.t(`${namespace}:cleffa3Nickname`, {
@ -527,6 +543,13 @@ function getPartyConfig(): EnemyPartyConfig {
nature: Nature.BOLD, nature: Nature.BOLD,
moveSet: [MoveId.TRI_ATTACK, MoveId.STORED_POWER, MoveId.CALM_MIND, MoveId.MOONLIGHT], moveSet: [MoveId.TRI_ATTACK, MoveId.STORED_POWER, MoveId.CALM_MIND, MoveId.MOONLIGHT],
ivs: [31, 31, 31, 31, 31, 31], ivs: [31, 31, 31, 31, 31, 31],
modifierConfigs: [
{
modifier: generateModifierType(modifierTypes.SOOTHE_BELL) as PokemonHeldItemModifierType,
stackCount: 3,
},
],
friendship: 255,
}, },
); );
} else { } else {
@ -539,12 +562,22 @@ function getPartyConfig(): EnemyPartyConfig {
{ {
species: getPokemonSpecies(pool1Species), species: getPokemonSpecies(pool1Species),
isBoss: false, isBoss: false,
ivs: [31, 31, 31, 31, 31, 31], modifierConfigs: [
{
modifier: generateModifierType(modifierTypes.SOOTHE_BELL) as PokemonHeldItemModifierType,
stackCount: 3,
},
],
}, },
{ {
species: getPokemonSpecies(pool2Species), species: getPokemonSpecies(pool2Species),
isBoss: false, isBoss: false,
ivs: [31, 31, 31, 31, 31, 31], modifierConfigs: [
{
modifier: generateModifierType(modifierTypes.SOOTHE_BELL) as PokemonHeldItemModifierType,
stackCount: 3,
},
],
}, },
); );
} }

View File

@ -108,6 +108,7 @@ export interface EnemyPokemonConfig {
dataSource?: PokemonData; dataSource?: PokemonData;
tera?: PokemonType; tera?: PokemonType;
aiType?: AiType; aiType?: AiType;
friendship?: number;
} }
export interface EnemyPartyConfig { export interface EnemyPartyConfig {
@ -352,6 +353,11 @@ export async function initBattleWithEnemyConfig(partyConfig: EnemyPartyConfig):
enemyPokemon.aiType = config.aiType; enemyPokemon.aiType = config.aiType;
} }
// Set friendship
if (config.friendship != null) {
enemyPokemon.friendship = config.friendship;
}
// Set moves // Set moves
if (config?.moveSet && config.moveSet.length > 0) { if (config?.moveSet && config.moveSet.length > 0) {
const moves = config.moveSet.map(m => new PokemonMove(m)); const moves = config.moveSet.map(m => new PokemonMove(m));
@ -406,6 +412,7 @@ export async function initBattleWithEnemyConfig(partyConfig: EnemyPartyConfig):
`| Species ID: ${enemyPokemon.species.speciesId}`, `| Species ID: ${enemyPokemon.species.speciesId}`,
`| Level: ${enemyPokemon.level}`, `| Level: ${enemyPokemon.level}`,
`| Nature: ${getNatureName(enemyPokemon.nature, true, true, true)}`, `| Nature: ${getNatureName(enemyPokemon.nature, true, true, true)}`,
`| Friendship: ${enemyPokemon.friendship}`,
); );
console.log(`Stats (IVs): ${stats}`); console.log(`Stats (IVs): ${stats}`);
console.log( console.log(

View File

@ -6078,7 +6078,7 @@ export const trainerConfigs: TrainerConfigs = {
.setMoneyMultiplier(3) .setMoneyMultiplier(3)
.setEncounterBgm(TrainerType.ACE_TRAINER) .setEncounterBgm(TrainerType.ACE_TRAINER)
.setLocalizedName("Expert Pokemon Breeder") .setLocalizedName("Expert Pokemon Breeder")
.setPartyTemplates(new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE)), .setPartyTemplates(new TrainerPartyTemplate(3, PartyMemberStrength.WEAK)),
[TrainerType.FUTURE_SELF_M]: new TrainerConfig(++t) [TrainerType.FUTURE_SELF_M]: new TrainerConfig(++t)
.setMoneyMultiplier(0) .setMoneyMultiplier(0)
.setEncounterBgm("mystery_encounter_weird_dream") .setEncounterBgm("mystery_encounter_weird_dream")