mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-07-11 02:42:19 +02:00
better code for override of modifiers and held items, for player and opponent.
This commit is contained in:
parent
0300c25b41
commit
4538eebd79
@ -4,7 +4,7 @@ import { NextEncounterPhase, NewBiomeEncounterPhase, SelectBiomePhase, MessagePh
|
||||
import Pokemon, { PlayerPokemon, EnemyPokemon } from './field/pokemon';
|
||||
import PokemonSpecies, { PokemonSpeciesFilter, allSpecies, getPokemonSpecies, initSpecies, speciesStarters } from './data/pokemon-species';
|
||||
import * as Utils from './utils';
|
||||
import { Modifier, ModifierBar, ConsumablePokemonModifier, ConsumableModifier, PokemonHpRestoreModifier, HealingBoosterModifier, PersistentModifier, PokemonHeldItemModifier, ModifierPredicate, DoubleBattleChanceBoosterModifier, FusePokemonModifier, PokemonFormChangeItemModifier, TerastallizeModifier } from './modifier/modifier';
|
||||
import { Modifier, ModifierBar, ConsumablePokemonModifier, ConsumableModifier, PokemonHpRestoreModifier, HealingBoosterModifier, PersistentModifier, PokemonHeldItemModifier, ModifierPredicate, DoubleBattleChanceBoosterModifier, FusePokemonModifier, PokemonFormChangeItemModifier, TerastallizeModifier, modifiersOverride, itemHeldsOverride } from './modifier/modifier';
|
||||
import { PokeballType } from './data/pokeball';
|
||||
import { initCommonAnims, initMoveAnim, loadCommonAnimAssets, loadMoveAnimAssets, populateAnims } from './data/battle-anims';
|
||||
import { Phase } from './phase';
|
||||
@ -615,16 +615,8 @@ export default class BattleScene extends SceneBase {
|
||||
if (OPP_SPECIES_OVERRIDE)
|
||||
species = getPokemonSpecies(OPP_SPECIES_OVERRIDE);
|
||||
const pokemon = new EnemyPokemon(this, species, level, trainerSlot, boss, dataSource);
|
||||
// we get the modifiers override for the opponent
|
||||
const modifiersOverride = this.getEnemyModifiersOverride();
|
||||
// if we have some modifiers override, apply them to the opponent
|
||||
if (modifiersOverride?.length) {
|
||||
// we delete all previous modifiers to avoid stack of override
|
||||
this.enemyModifiers = [];
|
||||
for (const m of modifiersOverride) {
|
||||
this.addEnemyModifier(getModifierType(modifierTypes[m]).newModifier(pokemon) as PersistentModifier, true, true);
|
||||
}
|
||||
}
|
||||
modifiersOverride(this, false);
|
||||
itemHeldsOverride(this, pokemon, false);
|
||||
if (boss && !dataSource) {
|
||||
const secondaryIvs = Utils.getIvsFromId(Utils.randSeedInt(4294967295));
|
||||
|
||||
@ -1733,24 +1725,6 @@ export default class BattleScene extends SceneBase {
|
||||
});
|
||||
}
|
||||
|
||||
getEnemyModifiersOverride(): Array<string> {
|
||||
// if no override, do nothing
|
||||
const ret = [];
|
||||
if (!OPP_MODIFIER_OVERRIDE || OPP_MODIFIER_OVERRIDE.length === 0) return ret;
|
||||
// we loop through all the modifier name given in the override file
|
||||
for (const [index, modifierName] of OPP_MODIFIER_OVERRIDE.entries()) {
|
||||
// if the modifier does not exist, we skip it
|
||||
if (!modifierTypes.hasOwnProperty(modifierName)) continue;
|
||||
// We get how many modifiers, if none given, default to 1
|
||||
const qty = OPP_MODIFIER_QTY_OVERRIDE[index] || 1
|
||||
// for example, if qty is 2, we create an array of size 2 with the modifier on each slot
|
||||
for (const i of [...Array(qty).keys()]) {
|
||||
ret.push(modifierName);
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
generateEnemyModifiers(): Promise<void> {
|
||||
return new Promise(resolve => {
|
||||
if (this.currentBattle.battleSpec === BattleSpec.FINAL_BOSS)
|
||||
|
@ -19,7 +19,7 @@ import { VoucherType } from '../system/voucher';
|
||||
import { FormChangeItem, SpeciesFormChangeItemTrigger } from '../data/pokemon-forms';
|
||||
import { Nature } from '#app/data/nature';
|
||||
import { BattlerTagType } from '#app/data/enums/battler-tag-type';
|
||||
import { STARTING_MODIFIER_OVERRIDE, STARTING_MODIFIER_QTY_OVERRIDE, OPP_HELD_ITEMS_OVERRIDE, STARTING_HELD_ITEMS_OVERRIDE } from "../overrides";
|
||||
import { STARTING_MODIFIER_OVERRIDE, STARTING_MODIFIER_QTY_OVERRIDE, OPP_HELD_ITEMS_OVERRIDE, STARTING_HELD_ITEMS_OVERRIDE, OPP_MODIFIER_OVERRIDE, OPP_MODIFIER_QTY_OVERRIDE } from "../overrides";
|
||||
import { modifierTypes } from "./modifier-type";
|
||||
|
||||
type ModifierType = ModifierTypes.ModifierType;
|
||||
@ -2179,31 +2179,39 @@ export class EnemyFusionChanceModifier extends EnemyPersistentModifier {
|
||||
}
|
||||
}
|
||||
|
||||
export function getModifierOverride(): Modifier[] {
|
||||
export function modifiersOverride(scene: Phaser.Scene, player: boolean = true): void {
|
||||
// if no override, do nothing
|
||||
const modifiers: Modifier[] = new Array();
|
||||
if (!STARTING_MODIFIER_OVERRIDE || STARTING_MODIFIER_OVERRIDE.length === 0) return modifiers;
|
||||
const modifierOverride = player ? STARTING_MODIFIER_OVERRIDE : OPP_MODIFIER_OVERRIDE;
|
||||
const modifierQtyOverride = player ? STARTING_MODIFIER_QTY_OVERRIDE : OPP_MODIFIER_QTY_OVERRIDE;
|
||||
if (!modifierOverride || modifierOverride.length === 0 || !scene) return;
|
||||
if (!player) {
|
||||
scene.enemyModifiers = [];
|
||||
}
|
||||
// we loop through all the modifier name given in the override file
|
||||
for (const [index, modifierName] of STARTING_MODIFIER_OVERRIDE.entries()) {
|
||||
for (const [index, modifierName] of modifierOverride.entries()) {
|
||||
// if the modifier does not exist, we skip it
|
||||
if (!modifierTypes.hasOwnProperty(modifierName)) continue;
|
||||
const modifierType = modifierTypes[modifierName]();
|
||||
// We get how many modifiers, if none given, default to 1
|
||||
const qty = STARTING_MODIFIER_QTY_OVERRIDE[index] || 1
|
||||
const qty = modifierQtyOverride[index] || 1
|
||||
for (const i of [...Array(qty).keys()]) {
|
||||
// for example, if qty is 2, we create an array of size 2 with the modifier on each slot
|
||||
modifiers.push(modifierType.withIdFromFunc(modifierTypes[modifierName]).newModifier());
|
||||
const modifier = modifierType.withIdFromFunc(modifierTypes[modifierName]).newModifier();
|
||||
if (player) {
|
||||
scene.addModifier(modifier as PersistentModifier, true, false, false, true);
|
||||
} else {
|
||||
scene.addEnemyModifier(modifier as PersistentModifier, true, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
return modifiers;
|
||||
}
|
||||
|
||||
export function startingItemHeldsOverride(pokemon: Pokemon): Modifier[] {
|
||||
const ret: Modifier[] = new Array();
|
||||
// if no override, do nothing
|
||||
if (!STARTING_HELD_ITEMS_OVERRIDE || STARTING_HELD_ITEMS_OVERRIDE.length === 0) return ret;
|
||||
// we loop through all the itemName given in the override file
|
||||
for (const itemName of STARTING_HELD_ITEMS_OVERRIDE) {
|
||||
export function itemHeldsOverride(scene: Phaser.Scene, pokemon: Pokemon, player: boolean = true): void {
|
||||
const heldItemsOverride = player ? STARTING_HELD_ITEMS_OVERRIDE : OPP_HELD_ITEMS_OVERRIDE;
|
||||
// if no override, do nothing
|
||||
if (!heldItemsOverride || heldItemsOverride.length === 0 || !scene) return;
|
||||
// we loop through all the itemName given in the override file
|
||||
for (const itemName of heldItemsOverride) {
|
||||
// if the item does not exist, we skip it
|
||||
if (!modifierTypes.hasOwnProperty(itemName)) continue;
|
||||
// we retrieve the item in the list
|
||||
@ -2214,28 +2222,10 @@ export function startingItemHeldsOverride(pokemon: Pokemon): Modifier[] {
|
||||
itemModifier.pokemonId = pokemon.id;
|
||||
// we say how many items we want
|
||||
itemModifier.stackCount = 1;
|
||||
ret.push(itemModifier);
|
||||
if (player) {
|
||||
scene.addModifier(itemModifier as PokemonHeldItemModifier, true, false, false, true);
|
||||
} else {
|
||||
scene.addEnemyModifier(itemModifier as PokemonHeldItemModifier, true, true);
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
export function opponentItemHeldsOverride(pokemon: Pokemon): Modifier[] {
|
||||
const ret: Modifier[] = new Array();
|
||||
// if no override, do nothing
|
||||
if (!OPP_HELD_ITEMS_OVERRIDE || OPP_HELD_ITEMS_OVERRIDE.length === 0) return ret;
|
||||
// we loop through all the itemName given in the override file
|
||||
for (const itemName of OPP_HELD_ITEMS_OVERRIDE) {
|
||||
// if the item does not exist, we skip it
|
||||
if (!modifierTypes.hasOwnProperty(itemName)) continue;
|
||||
// we retrieve the item in the list
|
||||
const modifierType = modifierTypes[itemName]();
|
||||
// we create the item
|
||||
const itemModifier = modifierType.withIdFromFunc(modifierTypes[itemName]).newModifier((pokemon) as PersistentModifier) as PokemonHeldItemModifier;
|
||||
// we assign the created item to the pokemon
|
||||
itemModifier.pokemonId = pokemon.id;
|
||||
// we say how many items we want
|
||||
itemModifier.stackCount = 1;
|
||||
ret.push(itemModifier);
|
||||
}
|
||||
return ret;
|
||||
}
|
@ -15,7 +15,7 @@ export const STARTING_MODIFIER_OVERRIDE = []; // ['EXP_SHARE', 'GOLDEN_EXP_CHARM
|
||||
export const STARTING_MODIFIER_QTY_OVERRIDE = []; // [5, 10];
|
||||
export const WEATHER_OVERRIDE = WeatherType.NONE;
|
||||
export const DOUBLE_BATTLE_OVERRIDE = false;
|
||||
export const STARTING_HELD_ITEMS_OVERRIDE = ['REVIVER_SEED'];
|
||||
export const STARTING_HELD_ITEMS_OVERRIDE = []; // ['REVIVER_SEED'];
|
||||
|
||||
export const ABILITY_OVERRIDE = Abilities.NONE;
|
||||
export const PASSIVE_ABILITY_OVERRIDE = Abilities.NONE;
|
||||
@ -26,7 +26,7 @@ export const OPP_ABILITY_OVERRIDE = Abilities.NONE;
|
||||
export const OPP_PASSIVE_ABILITY_OVERRIDE = Abilities.NONE;
|
||||
export const OPP_MOVE_OVERRIDE = Moves.NONE;
|
||||
export const OPP_MOVE_OVERRIDE_2 = Moves.NONE;
|
||||
export const OPP_HELD_ITEMS_OVERRIDE = ['LUCKY_EGG'];
|
||||
export const OPP_HELD_ITEMS_OVERRIDE = []; // ['LUCKY_EGG']
|
||||
export const OPP_MODIFIER_OVERRIDE = []; // ['ENEMY_DAMAGE_REDUCTION', 'ENEMY_ATTACK_POISON_CHANCE']
|
||||
export const OPP_MODIFIER_QTY_OVERRIDE = []; // [1, 1];
|
||||
|
||||
|
@ -6,7 +6,7 @@ import { allMoves, applyMoveAttrs, BypassSleepAttr, ChargeAttr, applyFilteredMov
|
||||
import { Mode } from './ui/ui';
|
||||
import { Command } from "./ui/command-ui-handler";
|
||||
import { Stat } from "./data/pokemon-stat";
|
||||
import { BerryModifier, ContactHeldItemTransferChanceModifier, EnemyAttackStatusEffectChanceModifier, EnemyPersistentModifier, EnemyStatusEffectHealChanceModifier, EnemyTurnHealModifier, ExpBalanceModifier, ExpBoosterModifier, ExpShareModifier, ExtraModifierModifier, FlinchChanceModifier, FusePokemonModifier, HealingBoosterModifier, HitHealModifier, LapsingPersistentModifier, MapModifier, Modifier, MultipleParticipantExpBonusModifier, PersistentModifier, PokemonExpBoosterModifier, PokemonHeldItemModifier, PokemonInstantReviveModifier, SwitchEffectTransferModifier, TempBattleStatBoosterModifier, TurnHealModifier, TurnHeldItemTransferModifier, MoneyMultiplierModifier, MoneyInterestModifier, IvScannerModifier, LapsingPokemonHeldItemModifier, PokemonMultiHitModifier, PokemonMoveAccuracyBoosterModifier, getModifierOverride, startingItemHeldsOverride, opponentItemHeldsOverride } from "./modifier/modifier";
|
||||
import { BerryModifier, ContactHeldItemTransferChanceModifier, EnemyAttackStatusEffectChanceModifier, EnemyPersistentModifier, EnemyStatusEffectHealChanceModifier, EnemyTurnHealModifier, ExpBalanceModifier, ExpBoosterModifier, ExpShareModifier, ExtraModifierModifier, FlinchChanceModifier, FusePokemonModifier, HealingBoosterModifier, HitHealModifier, LapsingPersistentModifier, MapModifier, Modifier, MultipleParticipantExpBonusModifier, PersistentModifier, PokemonExpBoosterModifier, PokemonHeldItemModifier, PokemonInstantReviveModifier, SwitchEffectTransferModifier, TempBattleStatBoosterModifier, TurnHealModifier, TurnHeldItemTransferModifier, MoneyMultiplierModifier, MoneyInterestModifier, IvScannerModifier, LapsingPokemonHeldItemModifier, PokemonMultiHitModifier, PokemonMoveAccuracyBoosterModifier, modifiersOverride, itemHeldsOverride } from "./modifier/modifier";
|
||||
import PartyUiHandler, { PartyOption, PartyUiMode } from "./ui/party-ui-handler";
|
||||
import { doPokeballBounceAnim, getPokeballAtlasKey, getPokeballCatchMultiplier, getPokeballTintColor, PokeballType } from "./data/pokeball";
|
||||
import { CommonAnim, CommonBattleAnim, MoveAnim, initMoveAnim, loadMoveAnimAssets } from "./data/battle-anims";
|
||||
@ -510,21 +510,8 @@ export class SelectStarterPhase extends Phase {
|
||||
party.push(starterPokemon);
|
||||
loadPokemonAssets.push(starterPokemon.loadAssets());
|
||||
});
|
||||
const itemHeldsOverride = startingItemHeldsOverride(party[0]);
|
||||
if (itemHeldsOverride?.length) {
|
||||
for (const itemHeldOverride of itemHeldsOverride) {
|
||||
this.scene.addModifier(itemHeldOverride, true, false, false, true);
|
||||
}
|
||||
}
|
||||
// we get the modifiers override
|
||||
const modifiersOverride = getModifierOverride();
|
||||
// if we have some modifiers override, apply them to the player
|
||||
if (modifiersOverride?.length) {
|
||||
for (const m of modifiersOverride) {
|
||||
this.scene.addModifier(m, true, false, false, true);
|
||||
}
|
||||
this.scene.updateModifiers(true, true);
|
||||
}
|
||||
modifiersOverride(this.scene);
|
||||
itemHeldsOverride(this.scene, party[0]);
|
||||
Promise.all(loadPokemonAssets).then(() => {
|
||||
SoundFade.fadeOut(this.scene, this.scene.sound.get('menu'), 500, true);
|
||||
this.scene.time.delayedCall(500, () => this.scene.playBgm());
|
||||
@ -744,13 +731,6 @@ export class EncounterPhase extends BattlePhase {
|
||||
console.log(enemyPokemon.name, enemyPokemon.species.speciesId, enemyPokemon.stats);
|
||||
});
|
||||
|
||||
const itemHeldsOverride = opponentItemHeldsOverride(this.scene.getEnemyParty()[0]);
|
||||
if (itemHeldsOverride?.length) {
|
||||
for (const itemHeldOverride of itemHeldsOverride) {
|
||||
this.scene.addEnemyModifier(itemHeldOverride, true, false, false, true);
|
||||
}
|
||||
}
|
||||
|
||||
if (this.scene.getParty().filter(p => p.isShiny()).length === 6)
|
||||
this.scene.validateAchv(achvs.SHINY_PARTY);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user