Rebalance trainer evolution logic

This commit is contained in:
Flashfyre committed 2024-03-28 14:05:15 -04:00
1 parent 96bafab830
commit 0afec8fd35
7 files changed
+152 -114

No files matched your search

+2 -1
View File
@@ -17,6 +17,7 @@ import { Moves } from "../data/enums/moves";
import { TimeOfDay } from "../data/enums/time-of-day";
import { Terrain, TerrainType } from "../data/terrain";
import { PostTerrainChangeAbAttr, PostWeatherChangeAbAttr, applyPostTerrainChangeAbAttrs, applyPostWeatherChangeAbAttrs } from "../data/ability";
import { PartyMemberStrength } from "../data/enums/party-member-strength";
const WEATHER_OVERRIDE = WeatherType.NONE;
@@ -118,7 +119,7 @@ export class Arena {
return this.randomSpecies(waveIndex, level, (attempt || 0) + 1);
}
const newSpeciesId = ret.getSpeciesForLevel(level, true, false, isBoss);
const newSpeciesId = ret.getWildSpeciesForLevel(level, true, isBoss, this.scene.gameMode);
if (newSpeciesId !== ret.speciesId) {
console.log('Replaced', Species[ret.speciesId], 'with', Species[newSpeciesId]);
ret = getPokemonSpecies(newSpeciesId);
+2 -2
View File
@@ -2254,9 +2254,9 @@ export class EnemyPokemon extends Pokemon {
this.battleInfo.updateBossSegments(this);
}
setBoss(boss: boolean = true): void {
setBoss(boss: boolean = true, bossSegments: integer = 0): void {
if (boss) {
this.bossSegments = this.scene.getEncounterBossSegments(this.scene.currentBattle.waveIndex, this.level, this.species, true);
this.bossSegments = bossSegments || this.scene.getEncounterBossSegments(this.scene.currentBattle.waveIndex, this.level, this.species, true);
this.bossSegmentIndex = this.bossSegments - 1;
} else {
this.bossSegments = 0;
+23 -21
View File
@@ -1,7 +1,8 @@
import BattleScene from "../battle-scene";
import { pokemonPrevolutions } from "../data/pokemon-evolutions";
import PokemonSpecies, { getPokemonSpecies } from "../data/pokemon-species";
import { TrainerConfig, TrainerPartyCompoundTemplate, TrainerPartyMemberStrength, TrainerPartyTemplate, TrainerPoolTier, TrainerSlot, trainerConfigs, trainerPartyTemplates } from "../data/trainer-config";
import { TrainerConfig, TrainerPartyCompoundTemplate, TrainerPartyTemplate, TrainerPoolTier, TrainerSlot, trainerConfigs, trainerPartyTemplates } from "../data/trainer-config";
import { PartyMemberStrength } from "../data/enums/party-member-strength";
import { TrainerType } from "../data/enums/trainer-type";
import { EnemyPokemon } from "./pokemon";
import * as Utils from "../utils";
@@ -150,28 +151,28 @@ export default class Trainer extends Phaser.GameObjects.Container {
const strength = partyTemplate.getStrength(i);
switch (strength) {
case TrainerPartyMemberStrength.WEAKER:
case PartyMemberStrength.WEAKER:
multiplier = 0.95;
break;
case TrainerPartyMemberStrength.WEAK:
case PartyMemberStrength.WEAK:
multiplier = 1.0;
break;
case TrainerPartyMemberStrength.AVERAGE:
case PartyMemberStrength.AVERAGE:
multiplier = 1.1;
break;
case TrainerPartyMemberStrength.STRONG:
case PartyMemberStrength.STRONG:
multiplier = 1.2;
break;
case TrainerPartyMemberStrength.STRONGER:
case PartyMemberStrength.STRONGER:
multiplier = 1.25;
break;
}
let levelOffset = 0;
if (strength < TrainerPartyMemberStrength.STRONG) {
if (strength < PartyMemberStrength.STRONG) {
multiplier = Math.min(multiplier + 0.025 * Math.floor(difficultyWaveIndex / 25), 1.2);
levelOffset = -Math.floor((difficultyWaveIndex / 50) * (TrainerPartyMemberStrength.STRONG - strength));
levelOffset = -Math.floor((difficultyWaveIndex / 50) * (PartyMemberStrength.STRONG - strength));
}
const level = Math.ceil(baseLevel * multiplier) + levelOffset;
@@ -189,13 +190,14 @@ export default class Trainer extends Phaser.GameObjects.Container {
this.scene.executeWithSeedOffset(() => {
const template = this.getPartyTemplate();
const strength: PartyMemberStrength = template.getStrength(index);
if (this.config.partyMemberFuncs.hasOwnProperty(index)) {
ret = this.config.partyMemberFuncs[index](this.scene, level);
ret = this.config.partyMemberFuncs[index](this.scene, level, strength);
return;
}
if (this.config.partyMemberFuncs.hasOwnProperty(index - template.size)) {
ret = this.config.partyMemberFuncs[index - template.size](this.scene, level);
ret = this.config.partyMemberFuncs[index - template.size](this.scene, level, template.getStrength(index));
return;
}
@@ -210,8 +212,8 @@ export default class Trainer extends Phaser.GameObjects.Container {
}
const species = template.isSameSpecies(index) && index > offset
? getPokemonSpecies(battle.enemyParty[offset].species.getSpeciesForLevel(level, false, true, this.config.isBoss))
: this.genNewPartyMemberSpecies(level);
? getPokemonSpecies(battle.enemyParty[offset].species.getTrainerSpeciesForLevel(level, false, template.getStrength(offset)))
: this.genNewPartyMemberSpecies(level, strength);
ret = this.scene.addEnemyPokemon(species, level, !this.isDouble() || !(index % 2) ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER);
}, this.config.hasStaticParty ? this.config.getDerivedType() + ((index + 1) << 8) : this.scene.currentBattle.waveIndex + (this.config.getDerivedType() << 10) + (((!this.config.useSameSeedForAllMembers ? index : 0) + 1) << 8));
@@ -219,7 +221,7 @@ export default class Trainer extends Phaser.GameObjects.Container {
return ret;
}
genNewPartyMemberSpecies(level: integer, attempt?: integer): PokemonSpecies {
genNewPartyMemberSpecies(level: integer, strength: PartyMemberStrength, attempt?: integer): PokemonSpecies {
const battle = this.scene.currentBattle;
const template = this.getPartyTemplate();
@@ -237,7 +239,7 @@ export default class Trainer extends Phaser.GameObjects.Container {
} else
species = this.scene.randomSpecies(battle.waveIndex, level, false, this.config.speciesFilter);
let ret = getPokemonSpecies(species.getSpeciesForLevel(level, true, true, this.config.isBoss));
let ret = getPokemonSpecies(species.getTrainerSpeciesForLevel(level, true, strength));
let retry = false;
console.log(ret.getName());
@@ -255,7 +257,7 @@ export default class Trainer extends Phaser.GameObjects.Container {
console.log('Attempting reroll of species evolution to fit specialty type...');
let evoAttempt = 0;
while (retry && evoAttempt++ < 10) {
ret = getPokemonSpecies(species.getSpeciesForLevel(level, true, true, this.config.isBoss));
ret = getPokemonSpecies(species.getTrainerSpeciesForLevel(level, true, strength));
console.log(ret.name);
if (this.config.specialtyTypes.find(t => ret.isOfType(t)))
retry = false;
@@ -264,7 +266,7 @@ export default class Trainer extends Phaser.GameObjects.Container {
if (retry && (attempt || 0) < 10) {
console.log('Rerolling party member...')
ret = this.genNewPartyMemberSpecies(level, (attempt || 0) + 1);
ret = this.genNewPartyMemberSpecies(level, strength, (attempt || 0) + 1);
}
return ret;
@@ -323,15 +325,15 @@ export default class Trainer extends Phaser.GameObjects.Container {
getPartyMemberModifierChanceMultiplier(index: integer): number {
switch (this.getPartyTemplate().getStrength(index)) {
case TrainerPartyMemberStrength.WEAKER:
case PartyMemberStrength.WEAKER:
return 0.75;
case TrainerPartyMemberStrength.WEAK:
case PartyMemberStrength.WEAK:
return 0.675;
case TrainerPartyMemberStrength.AVERAGE:
case PartyMemberStrength.AVERAGE:
return 0.5625;
case TrainerPartyMemberStrength.STRONG:
case PartyMemberStrength.STRONG:
return 0.45;
case TrainerPartyMemberStrength.STRONGER:
case PartyMemberStrength.STRONGER:
return 0.375;
}
}