diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 39149398a4d..43a70e7ef2c 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -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, modifiersOverride, itemHeldsOverride } from './modifier/modifier'; +import { Modifier, ModifierBar, ConsumablePokemonModifier, ConsumableModifier, PokemonHpRestoreModifier, HealingBoosterModifier, PersistentModifier, PokemonHeldItemModifier, ModifierPredicate, DoubleBattleChanceBoosterModifier, FusePokemonModifier, PokemonFormChangeItemModifier, TerastallizeModifier, overrideModifiers, overrideHeldItems } from './modifier/modifier'; import { PokeballType } from './data/pokeball'; import { initCommonAnims, initMoveAnim, loadCommonAnimAssets, loadMoveAnimAssets, populateAnims } from './data/battle-anims'; import { Phase } from './phase'; @@ -615,8 +615,8 @@ export default class BattleScene extends SceneBase { if (Overrides.OPP_SPECIES_OVERRIDE) species = getPokemonSpecies(Overrides.OPP_SPECIES_OVERRIDE); const pokemon = new EnemyPokemon(this, species, level, trainerSlot, boss, dataSource); - modifiersOverride(this, false); - itemHeldsOverride(this, pokemon, false); + overrideModifiers(this, false); + overrideHeldItems(this, pokemon, false); if (boss && !dataSource) { const secondaryIvs = Utils.getIvsFromId(Utils.randSeedInt(4294967295)); @@ -1769,6 +1769,9 @@ export default class BattleScene extends SceneBase { }); } + /** + * Removes all modifiers from enemy of PersistentModifier type + */ clearEnemyModifiers(): void { const modifiersToRemove = this.enemyModifiers.filter(m => m instanceof PersistentModifier); for (let m of modifiersToRemove) @@ -1776,6 +1779,9 @@ export default class BattleScene extends SceneBase { this.updateModifiers(false).then(() => this.updateUIPositions()); } + /** + * Removes all modifiers from enemy of PokemonHeldItemModifier type + */ clearEnemyHeldItemModifiers(): void { const modifiersToRemove = this.enemyModifiers.filter(m => m instanceof PokemonHeldItemModifier); for (let m of modifiersToRemove) diff --git a/src/field/arena.ts b/src/field/arena.ts index a7968342c22..5101ffd29eb 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -273,6 +273,11 @@ export class Arena { return 131 / 180; } + /** + * Sets weather to the override specified in overrides.ts + * @param weather new weather to set of type WeatherType + * @returns true to force trySetWeather to return true + */ trySetWeatherOverride(weather: WeatherType): boolean { this.weather = new Weather(weather, 0); this.scene.unshiftPhase(new CommonAnimPhase(this.scene, undefined, undefined, CommonAnim.SUNNY + (weather - 1))); @@ -280,8 +285,13 @@ export class Arena { return true } + /** + * Attempts to set a new weather to the battle + * @param weather new weather to set of type WeatherType + * @param hasPokemonSource is the new weather from a pokemon + * @returns true if new weather set, false if no weather provided or attempting to set the same weather as currently in use + */ trySetWeather(weather: WeatherType, hasPokemonSource: boolean): boolean { - // override hook for debugging if (Overrides.WEATHER_OVERRIDE) return this.trySetWeatherOverride(Overrides.WEATHER_OVERRIDE); diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index e07dab1822e..94a0fd5c9a9 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -725,9 +725,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ? this.summonData.moveset : this.moveset; - const overideArray: Array = this.isPlayer() ? Overrides.MOVESET_OVERRIDE : Overrides.OPP_MOVESET_OVERRIDE; - if (overideArray.length > 0) { - overideArray.forEach((move: Moves, index: number) => { + // Overrides moveset based on arrays specified in overrides.ts + const overrideArray: Array = this.isPlayer() ? Overrides.MOVESET_OVERRIDE : Overrides.OPP_MOVESET_OVERRIDE; + if (overrideArray.length > 0) { + overrideArray.forEach((move: Moves, index: number) => { this.moveset[index] = new PokemonMove(move, Math.min(this.moveset[index].ppUsed, allMoves[move].pp)) }); } @@ -819,8 +820,17 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return allAbilities[starterPassiveAbilities[starterSpeciesId]]; } + /** + * Checks if a pokemon has a passive either from: + * - bought with starter candy + * - set by override + * - is a boss pokemon + * @returns whether or not a pokemon should have a passive + */ hasPassive(): boolean { - if ((Overrides.PASSIVE_ABILITY_OVERRIDE !== Abilities.NONE && this.isPlayer()) || (Overrides.OPP_PASSIVE_ABILITY_OVERRIDE !== Abilities.NONE && !this.isPlayer())) + // returns override if valid for current case + if ((Overrides.PASSIVE_ABILITY_OVERRIDE !== Abilities.NONE && this.isPlayer()) || + (Overrides.OPP_PASSIVE_ABILITY_OVERRIDE !== Abilities.NONE && !this.isPlayer())) return true; return this.passive || this.isBoss(); } diff --git a/src/game-mode.ts b/src/game-mode.ts index 305652770b5..593585a17c5 100644 --- a/src/game-mode.ts +++ b/src/game-mode.ts @@ -45,6 +45,13 @@ export class GameMode implements GameModeConfig { Object.assign(this, config); } + /** + * Returns either: + * - override from overrides.ts + * - 20 for Daily Runs + * - 5 for all other modes + * @returns starting level + */ getStartingLevel(): integer { if (Overrides.STARTING_LEVEL_OVERRIDE) return Overrides.STARTING_LEVEL_OVERRIDE; diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 9348b74eae3..0bb6c1e0f75 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -2178,7 +2178,12 @@ export class EnemyFusionChanceModifier extends EnemyPersistentModifier { } } -export function modifiersOverride(scene: BattleScene, player: boolean = true): void { +/** + * Uses override from overrides.ts to set PersistentModifiers for starting a new game + * @param scene current BattleScene + * @param player is this for player for enemy + */ +export function overrideModifiers(scene: BattleScene, player: boolean = true): void { const modifierOverride = player ? Overrides.STARTING_MODIFIER_OVERRIDE : Overrides.OPP_MODIFIER_OVERRIDE; if (!modifierOverride || modifierOverride.length === 0 || !scene) return; // if no override, do nothing // if it's the opponent, we clear all his current modifiers to avoid stacking @@ -2201,7 +2206,12 @@ export function modifiersOverride(scene: BattleScene, player: boolean = true): v }); } -export function itemHeldsOverride(scene: BattleScene, pokemon: Pokemon, player: boolean = true): void { +/** + * Uses override from overrides.ts to set PokemonHeldItemModifiers for starting a new game + * @param scene current BattleScene + * @param player is this for player for enemy + */ +export function overrideHeldItems(scene: BattleScene, pokemon: Pokemon, player: boolean = true): void { const heldItemsOverride = player ? Overrides.STARTING_HELD_ITEMS_OVERRIDE : Overrides.OPP_HELD_ITEMS_OVERRIDE; if (!heldItemsOverride || heldItemsOverride.length === 0 || !scene) return; // if no override, do nothing // we loop through all the itemName given in the override file diff --git a/src/phases.ts b/src/phases.ts index edbab388523..2442abdc62c 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -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, modifiersOverride, itemHeldsOverride } 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, overrideModifiers, overrideHeldItems } 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,8 +510,8 @@ export class SelectStarterPhase extends Phase { party.push(starterPokemon); loadPokemonAssets.push(starterPokemon.loadAssets()); }); - modifiersOverride(this.scene); - itemHeldsOverride(this.scene, party[0]); + overrideModifiers(this.scene); + overrideHeldItems(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());