Discourage enemy trainers from switching too much consecutively

This commit is contained in:
Flashfyre 2024-04-05 10:59:03 -04:00
parent a214e815bc
commit dd2743bcf5
2 changed files with 13 additions and 3 deletions

View File

@ -49,6 +49,7 @@ export default class Battle {
public seenEnemyPartyMemberIds: Set<integer>;
public double: boolean;
public started: boolean;
public enemySwitchCounter: integer;
public turn: integer;
public turnCommands: TurnCommands;
public playerParticipantIds: Set<integer>;
@ -73,6 +74,7 @@ export default class Battle {
this.enemyParty = [];
this.seenEnemyPartyMemberIds = new Set<integer>();
this.double = double;
this.enemySwitchCounter = 0;
this.turn = 0;
this.playerParticipantIds = new Set<integer>();
this.battleScore = 0;

View File

@ -1658,7 +1658,9 @@ export class EnemyCommandPhase extends FieldPhase {
const enemyPokemon = this.scene.getEnemyField()[this.fieldIndex];
const trainer = this.scene.currentBattle.trainer;
const battle = this.scene.currentBattle;
const trainer = battle.trainer;
if (trainer && !enemyPokemon.getMoveQueue().length) {
const opponents = enemyPokemon.getOpponents();
@ -1675,11 +1677,15 @@ export class EnemyCommandPhase extends FieldPhase {
const sortedPartyMemberScores = trainer.getSortedPartyMemberMatchupScores(partyMemberScores);
if (sortedPartyMemberScores[0][1] >= matchupScore * (trainer.config.isBoss ? 2 : 3)) {
const switchMultiplier = 1 - (battle.enemySwitchCounter ? Math.pow(0.1, (1 / battle.enemySwitchCounter)) : 0);
if (sortedPartyMemberScores[0][1] * switchMultiplier >= matchupScore * (trainer.config.isBoss ? 2 : 3)) {
const index = trainer.getNextSummonIndex(enemyPokemon.trainerSlot, partyMemberScores);
this.scene.currentBattle.turnCommands[this.fieldIndex + BattlerIndex.ENEMY] =
battle.turnCommands[this.fieldIndex + BattlerIndex.ENEMY] =
{ command: Command.POKEMON, cursor: index, args: [ false ] };
battle.enemySwitchCounter++;
return this.end();
}
@ -1692,6 +1698,8 @@ export class EnemyCommandPhase extends FieldPhase {
this.scene.currentBattle.turnCommands[this.fieldIndex + BattlerIndex.ENEMY] =
{ command: Command.FIGHT, move: nextMove };
this.scene.currentBattle.enemySwitchCounter = Math.max(this.scene.currentBattle.enemySwitchCounter - 1, 0);
this.end();
}
}