Merge c01ca92674
into 81f424dc71
This commit is contained in:
commit
ea16525789
|
@ -0,0 +1,10 @@
|
|||
import type { HitResult } from "#enums/hit-result";
|
||||
|
||||
export type DamageResult =
|
||||
| HitResult.EFFECTIVE
|
||||
| HitResult.SUPER_EFFECTIVE
|
||||
| HitResult.NOT_VERY_EFFECTIVE
|
||||
| HitResult.ONE_HIT_KO
|
||||
| HitResult.CONFUSION
|
||||
| HitResult.INDIRECT_KO
|
||||
| HitResult.INDIRECT;
|
|
@ -40,7 +40,7 @@ import { initGameSpeed } from "#app/system/game-speed";
|
|||
import { Arena, ArenaBase } from "#app/field/arena";
|
||||
import { GameData } from "#app/system/game-data";
|
||||
import { addTextObject, getTextColor, TextStyle } from "#app/ui/text";
|
||||
import { allMoves } from "#app/data/moves/move";
|
||||
import { allMoves } from "./data/moves/all-moves";
|
||||
import { MusicPreference } from "#app/system/settings/settings";
|
||||
import {
|
||||
getDefaultModifierTypeForTier,
|
||||
|
|
|
@ -7,7 +7,8 @@ import { MoneyMultiplierModifier, PokemonHeldItemModifier } from "./modifier/mod
|
|||
import type { PokeballType } from "#enums/pokeball";
|
||||
import { trainerConfigs } from "#app/data/trainers/trainer-config";
|
||||
import { SpeciesFormKey } from "#enums/species-form-key";
|
||||
import type { EnemyPokemon, PlayerPokemon, TurnMove } from "#app/field/pokemon";
|
||||
import type { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon";
|
||||
import type { TurnMove } from "./interfaces/turn-move";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import { ArenaTagType } from "#enums/arena-tag-type";
|
||||
import { BattleSpec } from "#enums/battle-spec";
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
import type { EnemyPokemon, PokemonMove } from "../field/pokemon";
|
||||
import type { EnemyPokemon } from "../field/pokemon";
|
||||
import type { PokemonMove } from "./moves/pokemon-move";
|
||||
import type Pokemon from "../field/pokemon";
|
||||
import { HitResult, MoveResult, PlayerPokemon } from "../field/pokemon";
|
||||
import { MoveResult, PlayerPokemon } from "../field/pokemon";
|
||||
import { HitResult } from "#enums/hit-result";
|
||||
import { PokemonType } from "#enums/pokemon-type";
|
||||
import type { Constructor } from "#app/utils";
|
||||
import * as Utils from "../utils";
|
||||
|
@ -11,7 +13,8 @@ import { BattlerTagLapseType, GroundedTag } from "./battler-tags";
|
|||
import { getNonVolatileStatusEffects, getStatusEffectDescriptor, getStatusEffectHealText } from "#app/data/status-effect";
|
||||
import { Gender } from "./gender";
|
||||
import type Move from "./moves/move";
|
||||
import { AttackMove, FlinchAttr, OneHitKOAttr, HitHealAttr, allMoves, StatusMove, SelfStatusMove, VariablePowerAttr, applyMoveAttrs, VariableMoveTypeAttr, RandomMovesetMoveAttr, RandomMoveAttr, NaturePowerAttr, CopyMoveAttr, NeutralDamageAgainstFlyingTypeMultiplierAttr, FixedDamageAttr } from "./moves/move";
|
||||
import { AttackMove, FlinchAttr, OneHitKOAttr, HitHealAttr, StatusMove, SelfStatusMove, VariablePowerAttr, applyMoveAttrs, VariableMoveTypeAttr, RandomMovesetMoveAttr, RandomMoveAttr, NaturePowerAttr, CopyMoveAttr, NeutralDamageAgainstFlyingTypeMultiplierAttr, FixedDamageAttr } from "./moves/move";
|
||||
import { allMoves } from "./moves/all-moves";
|
||||
import { MoveFlags } from "#enums/MoveFlags";
|
||||
import { MoveTarget } from "#enums/MoveTarget";
|
||||
import { MoveCategory } from "#enums/MoveCategory";
|
||||
|
|
|
@ -2,12 +2,13 @@ import { globalScene } from "#app/global-scene";
|
|||
import type { Arena } from "#app/field/arena";
|
||||
import { PokemonType } from "#enums/pokemon-type";
|
||||
import { BooleanHolder, NumberHolder, toDmgValue } from "#app/utils";
|
||||
import { allMoves } from "#app/data/moves/move";
|
||||
import { allMoves } from "./moves/all-moves";
|
||||
import { MoveTarget } from "#enums/MoveTarget";
|
||||
import { MoveCategory } from "#enums/MoveCategory";
|
||||
import { getPokemonNameWithAffix } from "#app/messages";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import { HitResult, PokemonMove } from "#app/field/pokemon";
|
||||
import { HitResult } from "#enums/hit-result";
|
||||
import { PokemonMove } from "./moves/pokemon-move";
|
||||
import { StatusEffect } from "#enums/status-effect";
|
||||
import type { BattlerIndex } from "#app/battle";
|
||||
import {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { allMoves } from "#app/data/moves/move";
|
||||
import { allMoves } from "../moves/all-moves";
|
||||
import * as Utils from "#app/utils";
|
||||
import { Moves } from "#enums/moves";
|
||||
import { Species } from "#enums/species";
|
||||
|
|
|
@ -14,66 +14,10 @@ import { DamageMoneyRewardModifier, ExtraModifierModifier, MoneyMultiplierModifi
|
|||
import { SpeciesFormKey } from "#enums/species-form-key";
|
||||
import { speciesStarterCosts } from "./starters";
|
||||
import i18next from "i18next";
|
||||
import { SpeciesWildEvolutionDelay } from "#enums/species-wild-evolution-delay";
|
||||
import { EvolutionItem } from "#enums/evolution-item";
|
||||
|
||||
|
||||
export enum SpeciesWildEvolutionDelay {
|
||||
NONE,
|
||||
SHORT,
|
||||
MEDIUM,
|
||||
LONG,
|
||||
VERY_LONG,
|
||||
NEVER
|
||||
}
|
||||
|
||||
export enum EvolutionItem {
|
||||
NONE,
|
||||
|
||||
LINKING_CORD,
|
||||
SUN_STONE,
|
||||
MOON_STONE,
|
||||
LEAF_STONE,
|
||||
FIRE_STONE,
|
||||
WATER_STONE,
|
||||
THUNDER_STONE,
|
||||
ICE_STONE,
|
||||
DUSK_STONE,
|
||||
DAWN_STONE,
|
||||
SHINY_STONE,
|
||||
CRACKED_POT,
|
||||
SWEET_APPLE,
|
||||
TART_APPLE,
|
||||
STRAWBERRY_SWEET,
|
||||
UNREMARKABLE_TEACUP,
|
||||
UPGRADE,
|
||||
DUBIOUS_DISC,
|
||||
DRAGON_SCALE,
|
||||
PRISM_SCALE,
|
||||
RAZOR_CLAW,
|
||||
RAZOR_FANG,
|
||||
REAPER_CLOTH,
|
||||
ELECTIRIZER,
|
||||
MAGMARIZER,
|
||||
PROTECTOR,
|
||||
SACHET,
|
||||
WHIPPED_DREAM,
|
||||
SYRUPY_APPLE,
|
||||
CHIPPED_POT,
|
||||
GALARICA_CUFF,
|
||||
GALARICA_WREATH,
|
||||
AUSPICIOUS_ARMOR,
|
||||
MALICIOUS_ARMOR,
|
||||
MASTERPIECE_TEACUP,
|
||||
SUN_FLUTE,
|
||||
MOON_FLUTE,
|
||||
|
||||
BLACK_AUGURITE = 51,
|
||||
PEAT_BLOCK,
|
||||
METAL_ALLOY,
|
||||
SCROLL_OF_DARKNESS,
|
||||
SCROLL_OF_WATERS,
|
||||
LEADERS_CREST
|
||||
}
|
||||
|
||||
/**
|
||||
* Pokemon Evolution tuple type consisting of:
|
||||
* @property 0 {@linkcode Species} The species of the Pokemon.
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import { globalScene } from "#app/global-scene";
|
||||
import { AttackMove, BeakBlastHeaderAttr, DelayedAttackAttr, SelfStatusMove, allMoves } from "./moves/move";
|
||||
import { AttackMove, BeakBlastHeaderAttr, DelayedAttackAttr, SelfStatusMove } from "./moves/move";
|
||||
import { allMoves } from "./moves/all-moves";
|
||||
import { MoveFlags } from "#enums/MoveFlags";
|
||||
import type Pokemon from "../field/pokemon";
|
||||
import { type nil, getFrameMs, getEnumKeys, getEnumValues, animationFileName } from "../utils";
|
||||
|
|
|
@ -11,12 +11,12 @@ import {
|
|||
import { ChargeAnim, CommonAnim, CommonBattleAnim, MoveChargeAnim } from "#app/data/battle-anims";
|
||||
import type Move from "#app/data/moves/move";
|
||||
import {
|
||||
allMoves,
|
||||
applyMoveAttrs,
|
||||
ConsecutiveUseDoublePowerAttr,
|
||||
HealOnAllyAttr,
|
||||
StatusCategoryOnAllyAttr,
|
||||
} from "#app/data/moves/move";
|
||||
import { allMoves } from "./moves/all-moves";
|
||||
import { MoveFlags } from "#enums/MoveFlags";
|
||||
import { MoveCategory } from "#enums/MoveCategory";
|
||||
import { SpeciesFormChangeAbilityTrigger } from "#app/data/pokemon-forms";
|
||||
|
@ -24,7 +24,8 @@ import { getStatusEffectHealText } from "#app/data/status-effect";
|
|||
import { TerrainType } from "#app/data/terrain";
|
||||
import { PokemonType } from "#enums/pokemon-type";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import { HitResult, MoveResult } from "#app/field/pokemon";
|
||||
import { MoveResult } from "#app/field/pokemon";
|
||||
import { HitResult } from "#enums/hit-result";
|
||||
import { getPokemonNameWithAffix } from "#app/messages";
|
||||
import { CommonAnimPhase } from "#app/phases/common-anim-phase";
|
||||
import { MoveEffectPhase } from "#app/phases/move-effect-phase";
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { getPokemonNameWithAffix } from "../messages";
|
||||
import type Pokemon from "../field/pokemon";
|
||||
import { HitResult } from "../field/pokemon";
|
||||
import { HitResult } from "#enums/hit-result";
|
||||
import { getStatusEffectHealText } from "./status-effect";
|
||||
import * as Utils from "../utils";
|
||||
import {
|
||||
|
|
|
@ -6,7 +6,7 @@ import type PokemonSpecies from "#app/data/pokemon-species";
|
|||
import { getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species";
|
||||
import { speciesStarterCosts } from "#app/data/balance/starters";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import { PokemonMove } from "#app/field/pokemon";
|
||||
import { PokemonMove } from "./moves/pokemon-move";
|
||||
import type { FixedBattleConfig } from "#app/battle";
|
||||
import { ClassicFixedBossWaves, BattleType, getRandomTrainerFunc } from "#app/battle";
|
||||
import Trainer, { TrainerVariant } from "#app/field/trainer";
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
import type Move from "./move";
|
||||
|
||||
export const allMoves: Move[] = [];
|
|
@ -12,16 +12,17 @@ import {
|
|||
TypeBoostTag,
|
||||
} from "../battler-tags";
|
||||
import { getPokemonNameWithAffix } from "../../messages";
|
||||
import type { AttackMoveResult, TurnMove } from "../../field/pokemon";
|
||||
import type { AttackMoveResult } from "#app/interfaces/attack-move-result";
|
||||
import type { TurnMove } from "#app/interfaces/turn-move";
|
||||
import type Pokemon from "../../field/pokemon";
|
||||
import {
|
||||
EnemyPokemon,
|
||||
FieldPosition,
|
||||
HitResult,
|
||||
MoveResult,
|
||||
PlayerPokemon,
|
||||
PokemonMove,
|
||||
} from "../../field/pokemon";
|
||||
import { HitResult } from "#enums/hit-result";
|
||||
import { FieldPosition } from "#enums/field-position";
|
||||
import { PokemonMove } from "./pokemon-move";
|
||||
import {
|
||||
getNonVolatileStatusEffects,
|
||||
getStatusEffectHealText,
|
||||
|
@ -123,6 +124,7 @@ import { MoveFlags } from "#enums/MoveFlags";
|
|||
import { MoveEffectTrigger } from "#enums/MoveEffectTrigger";
|
||||
import { MultiHitType } from "#enums/MultiHitType";
|
||||
import { invalidAssistMoves, invalidCopycatMoves, invalidMetronomeMoves, invalidMirrorMoveMoves, invalidSleepTalkMoves } from "./invalid-moves";
|
||||
import { allMoves } from "./all-moves";
|
||||
|
||||
type MoveConditionFunc = (user: Pokemon, target: Pokemon, move: Move) => boolean;
|
||||
type UserMoveConditionFunc = (user: Pokemon, move: Move) => boolean;
|
||||
|
@ -8257,11 +8259,7 @@ export function getMoveTargets(user: Pokemon, move: Moves, replaceTarget?: MoveT
|
|||
return { targets: set.filter(p => p?.isActive(true)).map(p => p.getBattlerIndex()).filter(t => t !== undefined), multiple };
|
||||
}
|
||||
|
||||
export const allMoves: Move[] = [
|
||||
new SelfStatusMove(Moves.NONE, PokemonType.NORMAL, MoveCategory.STATUS, -1, -1, 0, 1),
|
||||
];
|
||||
|
||||
export const selfStatLowerMoves: Moves[] = [];
|
||||
allMoves.push(new SelfStatusMove(Moves.NONE, PokemonType.NORMAL, MoveCategory.STATUS, -1, -1, 0, 1));
|
||||
|
||||
export function initMoves() {
|
||||
allMoves.push(
|
||||
|
@ -11248,9 +11246,4 @@ export function initMoves() {
|
|||
new AttackMove(Moves.MALIGNANT_CHAIN, PokemonType.POISON, MoveCategory.SPECIAL, 100, 100, 5, 50, 0, 9)
|
||||
.attr(StatusEffectAttr, StatusEffect.TOXIC)
|
||||
);
|
||||
allMoves.map(m => {
|
||||
if (m.getAttrs(StatStageChangeAttr).some(a => a.selfTarget && a.stages < 0)) {
|
||||
selfStatLowerMoves.push(m.id);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -0,0 +1,93 @@
|
|||
import * as Utils from "#app/utils";
|
||||
import { allMoves } from "./all-moves";
|
||||
import type { Moves } from "#enums/moves";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import type Move from "./move";
|
||||
|
||||
/**
|
||||
* Wrapper class for the {@linkcode Move} class for Pokemon to interact with.
|
||||
* These are the moves assigned to a {@linkcode Pokemon} object.
|
||||
* It links to {@linkcode Move} class via the move ID.
|
||||
* Compared to {@linkcode Move}, this class also tracks if a move has received.
|
||||
* PP Ups, amount of PP used, and things like that.
|
||||
* @see {@linkcode isUsable} - checks if move is restricted, out of PP, or not implemented.
|
||||
* @see {@linkcode getMove} - returns {@linkcode Move} object by looking it up via ID.
|
||||
* @see {@linkcode usePp} - removes a point of PP from the move.
|
||||
* @see {@linkcode getMovePp} - returns amount of PP a move currently has.
|
||||
* @see {@linkcode getPpRatio} - returns the current PP amount / max PP amount.
|
||||
* @see {@linkcode getName} - returns name of {@linkcode Move}.
|
||||
**/
|
||||
export class PokemonMove {
|
||||
public moveId: Moves;
|
||||
public ppUsed: number;
|
||||
public ppUp: number;
|
||||
public virtual: boolean;
|
||||
|
||||
/**
|
||||
* If defined and nonzero, overrides the maximum PP of the move (e.g., due to move being copied by Transform).
|
||||
* This also nullifies all effects of `ppUp`.
|
||||
*/
|
||||
public maxPpOverride?: number;
|
||||
|
||||
constructor(moveId: Moves, ppUsed = 0, ppUp = 0, virtual = false, maxPpOverride?: number) {
|
||||
this.moveId = moveId;
|
||||
this.ppUsed = ppUsed;
|
||||
this.ppUp = ppUp;
|
||||
this.virtual = virtual;
|
||||
this.maxPpOverride = maxPpOverride;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the move can be selected or performed by a Pokemon, without consideration for the move's targets.
|
||||
* The move is unusable if it is out of PP, restricted by an effect, or unimplemented.
|
||||
*
|
||||
* @param pokemon - {@linkcode Pokemon} that would be using this move
|
||||
* @param ignorePp - If `true`, skips the PP check
|
||||
* @param ignoreRestrictionTags - If `true`, skips the check for move restriction tags (see {@link MoveRestrictionBattlerTag})
|
||||
* @returns `true` if the move can be selected and used by the Pokemon, otherwise `false`.
|
||||
*/
|
||||
isUsable(pokemon: Pokemon, ignorePp = false, ignoreRestrictionTags = false): boolean {
|
||||
if (this.moveId && !ignoreRestrictionTags && pokemon.isMoveRestricted(this.moveId, pokemon)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (this.getMove().name.endsWith(" (N)")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return ignorePp || this.ppUsed < this.getMovePp() || this.getMove().pp === -1;
|
||||
}
|
||||
|
||||
getMove(): Move {
|
||||
return allMoves[this.moveId];
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets {@link ppUsed} for this move and ensures the value does not exceed {@link getMovePp}
|
||||
* @param {number} count Amount of PP to use
|
||||
*/
|
||||
usePp(count = 1) {
|
||||
this.ppUsed = Math.min(this.ppUsed + count, this.getMovePp());
|
||||
}
|
||||
|
||||
getMovePp(): number {
|
||||
return this.maxPpOverride || this.getMove().pp + this.ppUp * Utils.toDmgValue(this.getMove().pp / 5);
|
||||
}
|
||||
|
||||
getPpRatio(): number {
|
||||
return 1 - this.ppUsed / this.getMovePp();
|
||||
}
|
||||
|
||||
getName(): string {
|
||||
return this.getMove().name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copies an existing move or creates a valid PokemonMove object from json representing one
|
||||
* @param source - The data for the move to copy
|
||||
* @return A valid pokemonmove object
|
||||
*/
|
||||
static loadMove(source: PokemonMove | any): PokemonMove {
|
||||
return new PokemonMove(source.moveId, source.ppUsed, source.ppUp, source.virtual, source.maxPpOverride);
|
||||
}
|
||||
}
|
|
@ -7,7 +7,8 @@ import {
|
|||
transitionMysteryEncounterIntroVisuals,
|
||||
} from "#app/data/mystery-encounters/utils/encounter-phase-utils";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import { EnemyPokemon, PokemonMove } from "#app/field/pokemon";
|
||||
import { EnemyPokemon } from "#app/field/pokemon";
|
||||
import { PokemonMove } from "#app/data/moves/pokemon-move";
|
||||
import type { BerryModifierType, PokemonHeldItemModifierType } from "#app/modifier/modifier-type";
|
||||
import { modifierTypes } from "#app/modifier/modifier-type";
|
||||
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
||||
|
|
|
@ -24,7 +24,7 @@ import { TrainerType } from "#enums/trainer-type";
|
|||
import { Species } from "#enums/species";
|
||||
import type { PlayerPokemon } from "#app/field/pokemon";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import { PokemonMove } from "#app/field/pokemon";
|
||||
import { PokemonMove } from "#app/data/moves/pokemon-move";
|
||||
import { getEncounterText, showEncounterDialogue } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils";
|
||||
import { LearnMovePhase } from "#app/phases/learn-move-phase";
|
||||
import { Moves } from "#enums/moves";
|
||||
|
@ -50,7 +50,7 @@ import {
|
|||
} from "#app/modifier/modifier";
|
||||
import i18next from "i18next";
|
||||
import MoveInfoOverlay from "#app/ui/move-info-overlay";
|
||||
import { allMoves } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { ModifierTier } from "#app/modifier/modifier-tier";
|
||||
import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode";
|
||||
import { getSpriteKeysFromSpecies } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils";
|
||||
|
|
|
@ -37,7 +37,7 @@ import { Mode } from "#app/ui/ui";
|
|||
import i18next from "i18next";
|
||||
import type { OptionSelectConfig } from "#app/ui/abstact-option-select-ui-handler";
|
||||
import type { PlayerPokemon } from "#app/field/pokemon";
|
||||
import { PokemonMove } from "#app/field/pokemon";
|
||||
import { PokemonMove } from "#app/data/moves/pokemon-move";
|
||||
import { Ability } from "#app/data/ability";
|
||||
import { BerryModifier } from "#app/modifier/modifier";
|
||||
import { BerryType } from "#enums/berry-type";
|
||||
|
|
|
@ -23,7 +23,8 @@ import { getPokemonSpecies } from "#app/data/pokemon-species";
|
|||
import { TrainerSlot } from "#enums/trainer-slot";
|
||||
import type { PlayerPokemon } from "#app/field/pokemon";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import { EnemyPokemon, PokemonMove } from "#app/field/pokemon";
|
||||
import { EnemyPokemon } from "#app/field/pokemon";
|
||||
import { PokemonMove } from "#app/data/moves/pokemon-move";
|
||||
import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode";
|
||||
import { modifierTypes } from "#app/modifier/modifier-type";
|
||||
import { LearnMovePhase } from "#app/phases/learn-move-phase";
|
||||
|
|
|
@ -7,7 +7,8 @@ import {
|
|||
setEncounterExp,
|
||||
setEncounterRewards,
|
||||
} from "#app/data/mystery-encounters/utils/encounter-phase-utils";
|
||||
import type { PlayerPokemon, PokemonMove } from "#app/field/pokemon";
|
||||
import type { PlayerPokemon } from "#app/field/pokemon";
|
||||
import type { PokemonMove } from "#app/data/moves/pokemon-move";
|
||||
import { modifierTypes } from "#app/modifier/modifier-type";
|
||||
import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler";
|
||||
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
||||
|
|
|
@ -26,7 +26,7 @@ import { Gender } from "#app/data/gender";
|
|||
import { PokemonType } from "#enums/pokemon-type";
|
||||
import { BattlerIndex } from "#app/battle";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import { PokemonMove } from "#app/field/pokemon";
|
||||
import { PokemonMove } from "#app/data/moves/pokemon-move";
|
||||
import { Moves } from "#enums/moves";
|
||||
import { EncounterBattleAnim } from "#app/data/battle-anims";
|
||||
import { WeatherType } from "#enums/weather-type";
|
||||
|
|
|
@ -13,7 +13,7 @@ import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/myst
|
|||
import { TrainerSlot } from "#enums/trainer-slot";
|
||||
import type { PlayerPokemon } from "#app/field/pokemon";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import { FieldPosition } from "#app/field/pokemon";
|
||||
import { FieldPosition } from "#enums/field-position";
|
||||
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
||||
import { MoneyRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements";
|
||||
import { queueEncounterMessage, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils";
|
||||
|
|
|
@ -26,7 +26,8 @@ import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode
|
|||
import { NumberHolder, isNullOrUndefined, randInt, randSeedInt, randSeedShuffle, randSeedItem } from "#app/utils";
|
||||
import type { PlayerPokemon } from "#app/field/pokemon";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import { EnemyPokemon, PokemonMove } from "#app/field/pokemon";
|
||||
import { EnemyPokemon } from "#app/field/pokemon";
|
||||
import { PokemonMove } from "#app/data/moves/pokemon-move";
|
||||
import type { PokemonHeldItemModifier } from "#app/modifier/modifier";
|
||||
import {
|
||||
HiddenAbilityRateBoosterModifier,
|
||||
|
|
|
@ -11,7 +11,7 @@ import { applyDamageToPokemon } from "#app/data/mystery-encounters/utils/encount
|
|||
import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
||||
import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode";
|
||||
import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode";
|
||||
import { PokemonMove } from "#app/field/pokemon";
|
||||
import { PokemonMove } from "#app/data/moves/pokemon-move";
|
||||
|
||||
const OPTION_1_REQUIRED_MOVE = Moves.SURF;
|
||||
const OPTION_2_REQUIRED_MOVE = Moves.FLY;
|
||||
|
|
|
@ -21,7 +21,8 @@ import {
|
|||
import { queueEncounterMessage } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils";
|
||||
import { Moves } from "#enums/moves";
|
||||
import { BattlerIndex } from "#app/battle";
|
||||
import { AiType, PokemonMove } from "#app/field/pokemon";
|
||||
import { PokemonMove } from "#app/data/moves/pokemon-move";
|
||||
import { AiType } from "#enums/ai-type";
|
||||
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
||||
import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
||||
import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode";
|
||||
|
|
|
@ -17,7 +17,7 @@ import { getPokemonSpecies } from "#app/data/pokemon-species";
|
|||
import { Species } from "#enums/species";
|
||||
import { Nature } from "#enums/nature";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import { PokemonMove } from "#app/field/pokemon";
|
||||
import { PokemonMove } from "#app/data/moves/pokemon-move";
|
||||
import { queueEncounterMessage, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils";
|
||||
import { modifyPlayerPokemonBST } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils";
|
||||
import { Moves } from "#enums/moves";
|
||||
|
|
|
@ -25,7 +25,7 @@ import { ModifierTier } from "#app/modifier/modifier-tier";
|
|||
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
||||
import { Moves } from "#enums/moves";
|
||||
import { BattlerIndex } from "#app/battle";
|
||||
import { PokemonMove } from "#app/field/pokemon";
|
||||
import { PokemonMove } from "#app/data/moves/pokemon-move";
|
||||
import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode";
|
||||
import { randSeedInt } from "#app/utils";
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ import {
|
|||
import { CHARMING_MOVES } from "#app/data/mystery-encounters/requirements/requirement-groups";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import type { EnemyPokemon } from "#app/field/pokemon";
|
||||
import { PokemonMove } from "#app/field/pokemon";
|
||||
import { PokemonMove } from "#app/data/moves/pokemon-move";
|
||||
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
||||
import { globalScene } from "#app/global-scene";
|
||||
import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter";
|
||||
|
|
|
@ -16,7 +16,7 @@ import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
|||
import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode";
|
||||
import type { PlayerPokemon } from "#app/field/pokemon";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import { PokemonMove } from "#app/field/pokemon";
|
||||
import { PokemonMove } from "#app/data/moves/pokemon-move";
|
||||
import { NumberHolder, isNullOrUndefined, randSeedInt, randSeedShuffle } from "#app/utils";
|
||||
import type PokemonSpecies from "#app/data/pokemon-species";
|
||||
import { allSpecies, getPokemonSpecies } from "#app/data/pokemon-species";
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import { globalScene } from "#app/global-scene";
|
||||
import { allAbilities } from "#app/data/ability";
|
||||
import { EvolutionItem, pokemonEvolutions } from "#app/data/balance/pokemon-evolutions";
|
||||
import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions";
|
||||
import { EvolutionItem } from "#enums/evolution-item";
|
||||
import { Nature } from "#enums/nature";
|
||||
import { FormChangeItem, pokemonFormChanges, SpeciesFormChangeItemTrigger } from "#app/data/pokemon-forms";
|
||||
import { StatusEffect } from "#enums/status-effect";
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import type { EnemyPartyConfig } from "#app/data/mystery-encounters/utils/encounter-phase-utils";
|
||||
import type { PlayerPokemon, PokemonMove } from "#app/field/pokemon";
|
||||
import type { PlayerPokemon } from "#app/field/pokemon";
|
||||
import type { PokemonMove } from "../moves/pokemon-move";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import { capitalizeFirstLetter, isNullOrUndefined } from "#app/utils";
|
||||
import type { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import type { Moves } from "#app/enums/moves";
|
||||
import type { PlayerPokemon } from "#app/field/pokemon";
|
||||
import { PokemonMove } from "#app/field/pokemon";
|
||||
import { PokemonMove } from "#app/data/moves/pokemon-move";
|
||||
import { isNullOrUndefined } from "#app/utils";
|
||||
import { EncounterPokemonRequirement } from "#app/data/mystery-encounters/mystery-encounter-requirements";
|
||||
import { globalScene } from "#app/global-scene";
|
||||
|
|
|
@ -7,9 +7,12 @@ import {
|
|||
WEIGHT_INCREMENT_ON_SPAWN_MISS,
|
||||
} from "#app/data/mystery-encounters/mystery-encounters";
|
||||
import { showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils";
|
||||
import type { AiType, PlayerPokemon } from "#app/field/pokemon";
|
||||
import type { PlayerPokemon } from "#app/field/pokemon";
|
||||
import type { AiType } from "#enums/ai-type";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import { EnemyPokemon, FieldPosition, PokemonMove, PokemonSummonData } from "#app/field/pokemon";
|
||||
import { EnemyPokemon, PokemonSummonData } from "#app/field/pokemon";
|
||||
import { FieldPosition } from "#enums/field-position";
|
||||
import { PokemonMove } from "#app/data/moves/pokemon-move";
|
||||
import type { CustomModifierSettings, ModifierType } from "#app/modifier/modifier-type";
|
||||
import {
|
||||
getPartyLuckValue,
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { PokemonFormChangeItemModifier } from "../modifier/modifier";
|
||||
import type Pokemon from "../field/pokemon";
|
||||
import { StatusEffect } from "#enums/status-effect";
|
||||
import { allMoves } from "./moves/move";
|
||||
import { allMoves } from "./moves/all-moves";
|
||||
import { MoveCategory } from "#enums/MoveCategory";
|
||||
import type { Constructor, nil } from "#app/utils";
|
||||
import { Abilities } from "#enums/abilities";
|
||||
|
|
|
@ -13,11 +13,8 @@ import { uncatchableSpecies } from "#app/data/balance/biomes";
|
|||
import { speciesEggMoves } from "#app/data/balance/egg-moves";
|
||||
import { GrowthRate } from "#app/data/exp";
|
||||
import type { EvolutionLevel } from "#app/data/balance/pokemon-evolutions";
|
||||
import {
|
||||
SpeciesWildEvolutionDelay,
|
||||
pokemonEvolutions,
|
||||
pokemonPrevolutions,
|
||||
} from "#app/data/balance/pokemon-evolutions";
|
||||
import { pokemonEvolutions, pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions";
|
||||
import { SpeciesWildEvolutionDelay } from "#enums/species-wild-evolution-delay";
|
||||
import { PokemonType } from "#enums/pokemon-type";
|
||||
import type { LevelMoves } from "#app/data/balance/pokemon-level-moves";
|
||||
import {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { globalScene } from "#app/global-scene";
|
||||
import { modifierTypes } from "#app/modifier/modifier-type";
|
||||
import { PokemonMove } from "#app/field/pokemon";
|
||||
import { PokemonMove } from "../moves/pokemon-move";
|
||||
import * as Utils from "#app/utils";
|
||||
import { pokemonEvolutions, pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions";
|
||||
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
export enum AiType {
|
||||
RANDOM,
|
||||
SMART_RANDOM,
|
||||
SMART
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
export enum EvolutionItem {
|
||||
NONE,
|
||||
|
||||
LINKING_CORD,
|
||||
SUN_STONE,
|
||||
MOON_STONE,
|
||||
LEAF_STONE,
|
||||
FIRE_STONE,
|
||||
WATER_STONE,
|
||||
THUNDER_STONE,
|
||||
ICE_STONE,
|
||||
DUSK_STONE,
|
||||
DAWN_STONE,
|
||||
SHINY_STONE,
|
||||
CRACKED_POT,
|
||||
SWEET_APPLE,
|
||||
TART_APPLE,
|
||||
STRAWBERRY_SWEET,
|
||||
UNREMARKABLE_TEACUP,
|
||||
UPGRADE,
|
||||
DUBIOUS_DISC,
|
||||
DRAGON_SCALE,
|
||||
PRISM_SCALE,
|
||||
RAZOR_CLAW,
|
||||
RAZOR_FANG,
|
||||
REAPER_CLOTH,
|
||||
ELECTIRIZER,
|
||||
MAGMARIZER,
|
||||
PROTECTOR,
|
||||
SACHET,
|
||||
WHIPPED_DREAM,
|
||||
SYRUPY_APPLE,
|
||||
CHIPPED_POT,
|
||||
GALARICA_CUFF,
|
||||
GALARICA_WREATH,
|
||||
AUSPICIOUS_ARMOR,
|
||||
MALICIOUS_ARMOR,
|
||||
MASTERPIECE_TEACUP,
|
||||
SUN_FLUTE,
|
||||
MOON_FLUTE,
|
||||
|
||||
BLACK_AUGURITE = 51,
|
||||
PEAT_BLOCK,
|
||||
METAL_ALLOY,
|
||||
SCROLL_OF_DARKNESS,
|
||||
SCROLL_OF_WATERS,
|
||||
LEADERS_CREST
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
export enum FieldPosition {
|
||||
CENTER,
|
||||
LEFT,
|
||||
RIGHT
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
export enum HitResult {
|
||||
EFFECTIVE = 1,
|
||||
SUPER_EFFECTIVE,
|
||||
NOT_VERY_EFFECTIVE,
|
||||
ONE_HIT_KO,
|
||||
NO_EFFECT,
|
||||
STATUS,
|
||||
HEAL,
|
||||
FAIL,
|
||||
MISS,
|
||||
INDIRECT,
|
||||
IMMUNE,
|
||||
CONFUSION,
|
||||
INDIRECT_KO
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
export enum LearnMoveSituation {
|
||||
MISC,
|
||||
LEVEL_UP,
|
||||
RELEARN,
|
||||
EVOLUTION,
|
||||
EVOLUTION_FUSED, // If fusionSpecies has Evolved
|
||||
EVOLUTION_FUSED_BASE, // If fusion's base species has Evolved
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
export enum SpeciesWildEvolutionDelay {
|
||||
NONE,
|
||||
SHORT,
|
||||
MEDIUM,
|
||||
LONG,
|
||||
VERY_LONG,
|
||||
NEVER
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
import { TextStyle, addTextObject } from "../ui/text";
|
||||
import type { DamageResult } from "./pokemon";
|
||||
import type { DamageResult } from "#app/@types/damage-result";
|
||||
import type Pokemon from "./pokemon";
|
||||
import { HitResult } from "./pokemon";
|
||||
import { HitResult } from "#enums/hit-result";
|
||||
import * as Utils from "../utils";
|
||||
import type { BattlerIndex } from "../battle";
|
||||
import { globalScene } from "#app/global-scene";
|
||||
|
|
|
@ -2,7 +2,7 @@ import Phaser from "phaser";
|
|||
import type { AnySound } from "#app/battle-scene";
|
||||
import type BattleScene from "#app/battle-scene";
|
||||
import { globalScene } from "#app/global-scene";
|
||||
import type { Variant, VariantSet } from "#app/sprites/variant";
|
||||
import type { Variant } from "#app/sprites/variant";
|
||||
import { populateVariantColors, variantColorCache } from "#app/sprites/variant";
|
||||
import { variantData } from "#app/sprites/variant";
|
||||
import BattleInfo, {
|
||||
|
@ -17,7 +17,6 @@ import {
|
|||
applyMoveAttrs,
|
||||
FixedDamageAttr,
|
||||
VariableAtkAttr,
|
||||
allMoves,
|
||||
TypelessAttr,
|
||||
CritOnlyAttr,
|
||||
getMoveTargets,
|
||||
|
@ -42,6 +41,7 @@ import {
|
|||
VariableMoveTypeChartAttr,
|
||||
HpSplitAttr,
|
||||
} from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { MoveTarget } from "#enums/MoveTarget";
|
||||
import { MoveCategory } from "#enums/MoveCategory";
|
||||
import type { PokemonSpeciesForm } from "#app/data/pokemon-species";
|
||||
|
@ -96,7 +96,6 @@ import {
|
|||
} from "#app/modifier/modifier";
|
||||
import { PokeballType } from "#enums/pokeball";
|
||||
import { Gender } from "#app/data/gender";
|
||||
import { initMoveAnim, loadMoveAnimAssets } from "#app/data/battle-anims";
|
||||
import { Status, getRandomStatus } from "#app/data/status-effect";
|
||||
import type {
|
||||
SpeciesFormEvolution,
|
||||
|
@ -221,7 +220,6 @@ import {
|
|||
SpeciesFormChangeLapseTeraTrigger,
|
||||
SpeciesFormChangeMoveLearnedTrigger,
|
||||
SpeciesFormChangePostMoveTrigger,
|
||||
SpeciesFormChangeStatusEffectTrigger,
|
||||
} from "#app/data/pokemon-forms";
|
||||
import { TerrainType } from "#app/data/terrain";
|
||||
import type { TrainerSlot } from "#enums/trainer-slot";
|
||||
|
@ -263,25 +261,18 @@ import { Nature } from "#enums/nature";
|
|||
import { StatusEffect } from "#enums/status-effect";
|
||||
import { doShinySparkleAnim } from "#app/field/anims";
|
||||
import { MoveFlags } from "#enums/MoveFlags";
|
||||
import { hasExpSprite } from "#app/sprites/sprite-utils";
|
||||
import { timedEventManager } from "#app/global-event-manager";
|
||||
import { loadMoveAnimations } from "#app/sprites/pokemon-asset-loader";
|
||||
import { ResetStatusPhase } from "#app/phases/reset-status-phase";
|
||||
|
||||
export enum LearnMoveSituation {
|
||||
MISC,
|
||||
LEVEL_UP,
|
||||
RELEARN,
|
||||
EVOLUTION,
|
||||
EVOLUTION_FUSED, // If fusionSpecies has Evolved
|
||||
EVOLUTION_FUSED_BASE, // If fusion's base species has Evolved
|
||||
}
|
||||
|
||||
export enum FieldPosition {
|
||||
CENTER,
|
||||
LEFT,
|
||||
RIGHT,
|
||||
}
|
||||
import { LearnMoveSituation } from "#enums/learn-move-situation";
|
||||
import { TurnMove } from "#app/interfaces/turn-move";
|
||||
import { AiType } from "#enums/ai-type";
|
||||
import { PokemonMove } from "#app/data/moves/pokemon-move";
|
||||
import { DamageCalculationResult } from "#app/interfaces/damage-calculation-result";
|
||||
import { FieldPosition } from "#enums/field-position";
|
||||
import { AttackMoveResult } from "#app/interfaces/attack-move-result";
|
||||
import { HitResult } from "#enums/hit-result";
|
||||
import { DamageResult } from "#app/@types/damage-result";
|
||||
|
||||
export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
||||
public id: number;
|
||||
|
@ -7551,24 +7542,6 @@ export class EnemyPokemon extends Pokemon {
|
|||
}
|
||||
}
|
||||
|
||||
export interface TurnMove {
|
||||
move: Moves;
|
||||
targets: BattlerIndex[];
|
||||
result?: MoveResult;
|
||||
virtual?: boolean;
|
||||
turn?: number;
|
||||
ignorePP?: boolean;
|
||||
}
|
||||
|
||||
export interface AttackMoveResult {
|
||||
move: Moves;
|
||||
result: DamageResult;
|
||||
damage: number;
|
||||
critical: boolean;
|
||||
sourceId: number;
|
||||
sourceBattlerIndex: BattlerIndex;
|
||||
}
|
||||
|
||||
export class PokemonSummonData {
|
||||
/** [Atk, Def, SpAtk, SpDef, Spd, Acc, Eva] */
|
||||
public statStages: number[] = [0, 0, 0, 0, 0, 0, 0];
|
||||
|
@ -7638,12 +7611,6 @@ export class PokemonTurnData {
|
|||
public extraTurns = 0;
|
||||
}
|
||||
|
||||
export enum AiType {
|
||||
RANDOM,
|
||||
SMART_RANDOM,
|
||||
SMART,
|
||||
}
|
||||
|
||||
export enum MoveResult {
|
||||
PENDING,
|
||||
SUCCESS,
|
||||
|
@ -7651,151 +7618,3 @@ export enum MoveResult {
|
|||
MISS,
|
||||
OTHER,
|
||||
}
|
||||
|
||||
export enum HitResult {
|
||||
EFFECTIVE = 1,
|
||||
SUPER_EFFECTIVE,
|
||||
NOT_VERY_EFFECTIVE,
|
||||
ONE_HIT_KO,
|
||||
NO_EFFECT,
|
||||
STATUS,
|
||||
HEAL,
|
||||
FAIL,
|
||||
MISS,
|
||||
INDIRECT,
|
||||
IMMUNE,
|
||||
CONFUSION,
|
||||
INDIRECT_KO,
|
||||
}
|
||||
|
||||
export type DamageResult =
|
||||
| HitResult.EFFECTIVE
|
||||
| HitResult.SUPER_EFFECTIVE
|
||||
| HitResult.NOT_VERY_EFFECTIVE
|
||||
| HitResult.ONE_HIT_KO
|
||||
| HitResult.CONFUSION
|
||||
| HitResult.INDIRECT_KO
|
||||
| HitResult.INDIRECT;
|
||||
|
||||
/** Interface containing the results of a damage calculation for a given move */
|
||||
export interface DamageCalculationResult {
|
||||
/** `true` if the move was cancelled (thus suppressing "No Effect" messages) */
|
||||
cancelled: boolean;
|
||||
/** The effectiveness of the move */
|
||||
result: HitResult;
|
||||
/** The damage dealt by the move */
|
||||
damage: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* Wrapper class for the {@linkcode Move} class for Pokemon to interact with.
|
||||
* These are the moves assigned to a {@linkcode Pokemon} object.
|
||||
* It links to {@linkcode Move} class via the move ID.
|
||||
* Compared to {@linkcode Move}, this class also tracks if a move has received.
|
||||
* PP Ups, amount of PP used, and things like that.
|
||||
* @see {@linkcode isUsable} - checks if move is restricted, out of PP, or not implemented.
|
||||
* @see {@linkcode getMove} - returns {@linkcode Move} object by looking it up via ID.
|
||||
* @see {@linkcode usePp} - removes a point of PP from the move.
|
||||
* @see {@linkcode getMovePp} - returns amount of PP a move currently has.
|
||||
* @see {@linkcode getPpRatio} - returns the current PP amount / max PP amount.
|
||||
* @see {@linkcode getName} - returns name of {@linkcode Move}.
|
||||
**/
|
||||
export class PokemonMove {
|
||||
public moveId: Moves;
|
||||
public ppUsed: number;
|
||||
public ppUp: number;
|
||||
public virtual: boolean;
|
||||
|
||||
/**
|
||||
* If defined and nonzero, overrides the maximum PP of the move (e.g., due to move being copied by Transform).
|
||||
* This also nullifies all effects of `ppUp`.
|
||||
*/
|
||||
public maxPpOverride?: number;
|
||||
|
||||
constructor(
|
||||
moveId: Moves,
|
||||
ppUsed = 0,
|
||||
ppUp = 0,
|
||||
virtual = false,
|
||||
maxPpOverride?: number,
|
||||
) {
|
||||
this.moveId = moveId;
|
||||
this.ppUsed = ppUsed;
|
||||
this.ppUp = ppUp;
|
||||
this.virtual = virtual;
|
||||
this.maxPpOverride = maxPpOverride;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the move can be selected or performed by a Pokemon, without consideration for the move's targets.
|
||||
* The move is unusable if it is out of PP, restricted by an effect, or unimplemented.
|
||||
*
|
||||
* @param {Pokemon} pokemon {@linkcode Pokemon} that would be using this move
|
||||
* @param {boolean} ignorePp If `true`, skips the PP check
|
||||
* @param {boolean} ignoreRestrictionTags If `true`, skips the check for move restriction tags (see {@link MoveRestrictionBattlerTag})
|
||||
* @returns `true` if the move can be selected and used by the Pokemon, otherwise `false`.
|
||||
*/
|
||||
isUsable(
|
||||
pokemon: Pokemon,
|
||||
ignorePp = false,
|
||||
ignoreRestrictionTags = false,
|
||||
): boolean {
|
||||
if (
|
||||
this.moveId &&
|
||||
!ignoreRestrictionTags &&
|
||||
pokemon.isMoveRestricted(this.moveId, pokemon)
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (this.getMove().name.endsWith(" (N)")) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return (
|
||||
ignorePp || this.ppUsed < this.getMovePp() || this.getMove().pp === -1
|
||||
);
|
||||
}
|
||||
|
||||
getMove(): Move {
|
||||
return allMoves[this.moveId];
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets {@link ppUsed} for this move and ensures the value does not exceed {@link getMovePp}
|
||||
* @param {number} count Amount of PP to use
|
||||
*/
|
||||
usePp(count = 1) {
|
||||
this.ppUsed = Math.min(this.ppUsed + count, this.getMovePp());
|
||||
}
|
||||
|
||||
getMovePp(): number {
|
||||
return (
|
||||
this.maxPpOverride ||
|
||||
this.getMove().pp + this.ppUp * Utils.toDmgValue(this.getMove().pp / 5)
|
||||
);
|
||||
}
|
||||
|
||||
getPpRatio(): number {
|
||||
return 1 - this.ppUsed / this.getMovePp();
|
||||
}
|
||||
|
||||
getName(): string {
|
||||
return this.getMove().name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copies an existing move or creates a valid PokemonMove object from json representing one
|
||||
* @param {PokemonMove | any} source The data for the move to copy
|
||||
* @return {PokemonMove} A valid pokemonmove object
|
||||
*/
|
||||
static loadMove(source: PokemonMove | any): PokemonMove {
|
||||
return new PokemonMove(
|
||||
source.moveId,
|
||||
source.ppUsed,
|
||||
source.ppUp,
|
||||
source.virtual,
|
||||
source.maxPpOverride,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
import type { BattlerIndex } from "#app/battle";
|
||||
import type { DamageResult } from "#app/@types/damage-result";
|
||||
import type { Moves } from "#enums/moves";
|
||||
|
||||
export interface AttackMoveResult {
|
||||
move: Moves;
|
||||
result: DamageResult;
|
||||
damage: number;
|
||||
critical: boolean;
|
||||
sourceId: number;
|
||||
sourceBattlerIndex: BattlerIndex;
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
import type { HitResult } from "#enums/hit-result";
|
||||
|
||||
/** Interface containing the results of a damage calculation for a given move */
|
||||
export interface DamageCalculationResult {
|
||||
/** `true` if the move was cancelled (thus suppressing "No Effect" messages) */
|
||||
cancelled: boolean;
|
||||
/** The effectiveness of the move */
|
||||
result: HitResult;
|
||||
/** The damage dealt by the move */
|
||||
damage: number;
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
import type { BattlerIndex } from "#app/battle";
|
||||
import type { MoveResult } from "#app/field/pokemon";
|
||||
import type { Moves } from "#enums/moves";
|
||||
|
||||
export interface TurnMove {
|
||||
move: Moves;
|
||||
targets: BattlerIndex[];
|
||||
result?: MoveResult;
|
||||
virtual?: boolean;
|
||||
turn?: number;
|
||||
ignorePP?: boolean;
|
||||
}
|
|
@ -1,8 +1,10 @@
|
|||
import { globalScene } from "#app/global-scene";
|
||||
import { EvolutionItem, pokemonEvolutions } from "#app/data/balance/pokemon-evolutions";
|
||||
import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions";
|
||||
import { EvolutionItem } from "#enums/evolution-item";
|
||||
import { tmPoolTiers, tmSpecies } from "#app/data/balance/tms";
|
||||
import { getBerryEffectDescription, getBerryName } from "#app/data/berry";
|
||||
import { allMoves, AttackMove } from "#app/data/moves/move";
|
||||
import { AttackMove } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { getNatureName, getNatureStatMultiplier } from "#app/data/nature";
|
||||
import { getPokeballCatchMultiplier, getPokeballName, MAX_PER_TYPE_POKEBALLS } from "#app/data/pokeball";
|
||||
import {
|
||||
|
@ -13,7 +15,8 @@ import {
|
|||
} from "#app/data/pokemon-forms";
|
||||
import { getStatusEffectDescriptor } from "#app/data/status-effect";
|
||||
import { PokemonType } from "#enums/pokemon-type";
|
||||
import type { EnemyPokemon, PlayerPokemon, PokemonMove } from "#app/field/pokemon";
|
||||
import type { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon";
|
||||
import type { PokemonMove } from "#app/data/moves/pokemon-move";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import { getPokemonNameWithAffix } from "#app/messages";
|
||||
import {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { FusionSpeciesFormEvolution, pokemonEvolutions } from "#app/data/balance/pokemon-evolutions";
|
||||
import { getBerryEffectFunc, getBerryPredicate } from "#app/data/berry";
|
||||
import { getLevelTotalExp } from "#app/data/exp";
|
||||
import { allMoves } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { MAX_PER_TYPE_POKEBALLS } from "#app/data/pokeball";
|
||||
import { type FormChangeItem, SpeciesFormChangeItemTrigger } from "#app/data/pokemon-forms";
|
||||
import { getStatusEffectHealText } from "#app/data/status-effect";
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { type PokeballCounts } from "#app/battle-scene";
|
||||
import { EvolutionItem } from "#app/data/balance/pokemon-evolutions";
|
||||
import { EvolutionItem } from "#enums/evolution-item";
|
||||
import { Gender } from "#app/data/gender";
|
||||
import { FormChangeItem } from "#app/data/pokemon-forms";
|
||||
import { Variant } from "#app/sprites/variant";
|
||||
|
|
|
@ -11,8 +11,9 @@ import { BattlerTagType } from "#app/enums/battler-tag-type";
|
|||
import { Biome } from "#app/enums/biome";
|
||||
import { Moves } from "#app/enums/moves";
|
||||
import { PokeballType } from "#enums/pokeball";
|
||||
import type { PlayerPokemon, TurnMove } from "#app/field/pokemon";
|
||||
import { FieldPosition } from "#app/field/pokemon";
|
||||
import type { PlayerPokemon } from "#app/field/pokemon";
|
||||
import type { TurnMove } from "#app/interfaces/turn-move";
|
||||
import { FieldPosition } from "#enums/field-position";
|
||||
import { getPokemonNameWithAffix } from "#app/messages";
|
||||
import { Command } from "#app/ui/command-ui-handler";
|
||||
import { Mode } from "#app/ui/ui";
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
import { globalScene } from "#app/global-scene";
|
||||
import type { BattlerIndex } from "#app/battle";
|
||||
import { BattleSpec } from "#enums/battle-spec";
|
||||
import { type DamageResult, HitResult } from "#app/field/pokemon";
|
||||
import type { DamageResult } from "#app/@types/damage-result";
|
||||
import { HitResult } from "#enums/hit-result";
|
||||
import { fixedInt } from "#app/utils";
|
||||
import { PokemonPhase } from "#app/phases/pokemon-phase";
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ import { TrainerSlot } from "#enums/trainer-slot";
|
|||
import { getRandomWeatherType } from "#app/data/weather";
|
||||
import { EncounterPhaseEvent } from "#app/events/battle-scene";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import { FieldPosition } from "#app/field/pokemon";
|
||||
import { FieldPosition } from "#enums/field-position";
|
||||
import { getPokemonNameWithAffix } from "#app/messages";
|
||||
import { BoostBugSpawnModifier, IvScannerModifier, TurnHeldItemTransferModifier } from "#app/modifier/modifier";
|
||||
import { ModifierPoolType, regenerateModifierPoolThresholds } from "#app/modifier/modifier-type";
|
||||
|
|
|
@ -10,7 +10,7 @@ import { Mode } from "#app/ui/ui";
|
|||
import { cos, sin } from "#app/field/anims";
|
||||
import type { PlayerPokemon } from "#app/field/pokemon";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import { LearnMoveSituation } from "#app/field/pokemon";
|
||||
import { LearnMoveSituation } from "#enums/learn-move-situation";
|
||||
import { getTypeRgb } from "#app/data/type";
|
||||
import i18next from "i18next";
|
||||
import { getPokemonNameWithAffix } from "#app/messages";
|
||||
|
|
|
@ -12,13 +12,16 @@ import {
|
|||
import type { DestinyBondTag, GrudgeTag } from "#app/data/battler-tags";
|
||||
import { BattlerTagLapseType } from "#app/data/battler-tags";
|
||||
import { battleSpecDialogue } from "#app/data/dialogue";
|
||||
import { allMoves, PostVictoryStatStageChangeAttr } from "#app/data/moves/move";
|
||||
import { PostVictoryStatStageChangeAttr } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms";
|
||||
import { BattleSpec } from "#app/enums/battle-spec";
|
||||
import { StatusEffect } from "#app/enums/status-effect";
|
||||
import type { EnemyPokemon } from "#app/field/pokemon";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import { HitResult, PlayerPokemon, PokemonMove } from "#app/field/pokemon";
|
||||
import { PlayerPokemon } from "#app/field/pokemon";
|
||||
import { HitResult } from "#enums/hit-result";
|
||||
import { PokemonMove } from "#app/data/moves/pokemon-move";
|
||||
import { getPokemonNameWithAffix } from "#app/messages";
|
||||
import { PokemonInstantReviveModifier } from "#app/modifier/modifier";
|
||||
import { SwitchType } from "#enums/switch-type";
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { globalScene } from "#app/global-scene";
|
||||
import { initMoveAnim, loadMoveAnimAssets } from "#app/data/battle-anims";
|
||||
import type Move from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { SpeciesFormChangeMoveLearnedTrigger } from "#app/data/pokemon-forms";
|
||||
import { Moves } from "#enums/moves";
|
||||
import { getPokemonNameWithAffix } from "#app/messages";
|
||||
|
|
|
@ -2,7 +2,7 @@ import { globalScene } from "#app/global-scene";
|
|||
import type { BattlerIndex } from "#app/battle";
|
||||
import { MoveChargeAnim } from "#app/data/battle-anims";
|
||||
import { applyMoveChargeAttrs, MoveEffectAttr, InstantChargeAttr } from "#app/data/moves/move";
|
||||
import type { PokemonMove } from "#app/field/pokemon";
|
||||
import type { PokemonMove } from "#app/data/moves/pokemon-move";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import { MoveResult } from "#app/field/pokemon";
|
||||
import { BooleanHolder } from "#app/utils";
|
||||
|
|
|
@ -49,9 +49,10 @@ import { MoveTarget } from "#enums/MoveTarget";
|
|||
import { MoveCategory } from "#enums/MoveCategory";
|
||||
import { SpeciesFormChangePostMoveTrigger } from "#app/data/pokemon-forms";
|
||||
import { PokemonType } from "#enums/pokemon-type";
|
||||
import { PokemonMove } from "#app/field/pokemon";
|
||||
import { PokemonMove } from "#app/data/moves/pokemon-move";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import { HitResult, MoveResult } from "#app/field/pokemon";
|
||||
import { MoveResult } from "#app/field/pokemon";
|
||||
import { HitResult } from "#enums/hit-result";
|
||||
import { getPokemonNameWithAffix } from "#app/messages";
|
||||
import {
|
||||
ContactHeldItemTransferChanceModifier,
|
||||
|
@ -297,16 +298,16 @@ export class MoveEffectPhase extends PokemonPhase {
|
|||
);
|
||||
}
|
||||
|
||||
/** Is the target protected by Protect, etc. or a relevant conditional protection effect? */
|
||||
const isProtected =
|
||||
![MoveTarget.ENEMY_SIDE, MoveTarget.BOTH_SIDES].includes(this.move.getMove().moveTarget) &&
|
||||
(bypassIgnoreProtect.value ||
|
||||
!this.move.getMove().doesFlagEffectApply({ flag: MoveFlags.IGNORE_PROTECT, user, target })) &&
|
||||
(hasConditionalProtectApplied.value ||
|
||||
(!target.findTags(t => t instanceof DamageProtectedTag).length &&
|
||||
target.findTags(t => t instanceof ProtectedTag).find(t => target.lapseTag(t.tagType))) ||
|
||||
(this.move.getMove().category !== MoveCategory.STATUS &&
|
||||
target.findTags(t => t instanceof DamageProtectedTag).find(t => target.lapseTag(t.tagType))));
|
||||
/** Is the target protected by Protect, etc. or a relevant conditional protection effect? */
|
||||
const isProtected =
|
||||
![MoveTarget.ENEMY_SIDE, MoveTarget.BOTH_SIDES].includes(this.move.getMove().moveTarget) &&
|
||||
(bypassIgnoreProtect.value ||
|
||||
!this.move.getMove().doesFlagEffectApply({ flag: MoveFlags.IGNORE_PROTECT, user, target })) &&
|
||||
(hasConditionalProtectApplied.value ||
|
||||
(!target.findTags(t => t instanceof DamageProtectedTag).length &&
|
||||
target.findTags(t => t instanceof ProtectedTag).find(t => target.lapseTag(t.tagType))) ||
|
||||
(this.move.getMove().category !== MoveCategory.STATUS &&
|
||||
target.findTags(t => t instanceof DamageProtectedTag).find(t => target.lapseTag(t.tagType))));
|
||||
|
||||
/** Is the target hidden by the effects of its Commander ability? */
|
||||
const isCommanding =
|
||||
|
@ -316,11 +317,11 @@ export class MoveEffectPhase extends PokemonPhase {
|
|||
/** Is the target reflecting status moves from the magic coat move? */
|
||||
const isReflecting = !!target.getTag(BattlerTagType.MAGIC_COAT);
|
||||
|
||||
/** Is the target's magic bounce ability not ignored and able to reflect this move? */
|
||||
const canMagicBounce =
|
||||
!isReflecting &&
|
||||
!move.doesFlagEffectApply({ flag: MoveFlags.IGNORE_ABILITIES, user, target }) &&
|
||||
target.hasAbilityWithAttr(ReflectStatusMoveAbAttr);
|
||||
/** Is the target's magic bounce ability not ignored and able to reflect this move? */
|
||||
const canMagicBounce =
|
||||
!isReflecting &&
|
||||
!move.doesFlagEffectApply({ flag: MoveFlags.IGNORE_ABILITIES, user, target }) &&
|
||||
target.hasAbilityWithAttr(ReflectStatusMoveAbAttr);
|
||||
|
||||
const semiInvulnerableTag = target.getTag(SemiInvulnerableTag);
|
||||
|
||||
|
@ -333,21 +334,19 @@ export class MoveEffectPhase extends PokemonPhase {
|
|||
(isReflecting || canMagicBounce) &&
|
||||
!semiInvulnerableTag;
|
||||
|
||||
// If the move will bounce, then queue the bounce and move on to the next target
|
||||
if (!target.switchOutStatus && willBounce) {
|
||||
const newTargets = move.isMultiTarget()
|
||||
? getMoveTargets(target, move.id).targets
|
||||
: [user.getBattlerIndex()];
|
||||
if (!isReflecting) {
|
||||
// TODO: Ability displays should be handled by the ability
|
||||
queuedPhases.push(
|
||||
new ShowAbilityPhase(
|
||||
target.getBattlerIndex(),
|
||||
target.getPassiveAbility().hasAttr(ReflectStatusMoveAbAttr),
|
||||
),
|
||||
);
|
||||
queuedPhases.push(new HideAbilityPhase());
|
||||
}
|
||||
// If the move will bounce, then queue the bounce and move on to the next target
|
||||
if (!target.switchOutStatus && willBounce) {
|
||||
const newTargets = move.isMultiTarget() ? getMoveTargets(target, move.id).targets : [user.getBattlerIndex()];
|
||||
if (!isReflecting) {
|
||||
// TODO: Ability displays should be handled by the ability
|
||||
queuedPhases.push(
|
||||
new ShowAbilityPhase(
|
||||
target.getBattlerIndex(),
|
||||
target.getPassiveAbility().hasAttr(ReflectStatusMoveAbAttr),
|
||||
),
|
||||
);
|
||||
queuedPhases.push(new HideAbilityPhase());
|
||||
}
|
||||
|
||||
queuedPhases.push(new MovePhase(target, newTargets, new PokemonMove(move.id, 0, 0, true), true, true, true));
|
||||
continue;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { applyMoveAttrs, MoveHeaderAttr } from "#app/data/moves/move";
|
||||
import type { PokemonMove } from "#app/field/pokemon";
|
||||
import type { PokemonMove } from "#app/data/moves/pokemon-move";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import { BattlePhase } from "./battle-phase";
|
||||
|
||||
|
|
|
@ -16,7 +16,6 @@ import { CommonAnim } from "#app/data/battle-anims";
|
|||
import { BattlerTagLapseType, CenterOfAttentionTag } from "#app/data/battler-tags";
|
||||
import {
|
||||
AddArenaTrapTagAttr,
|
||||
allMoves,
|
||||
applyMoveAttrs,
|
||||
BypassRedirectAttr,
|
||||
BypassSleepAttr,
|
||||
|
@ -27,13 +26,14 @@ import {
|
|||
PreMoveMessageAttr,
|
||||
PreUseInterruptAttr,
|
||||
} from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { MoveFlags } from "#enums/MoveFlags";
|
||||
import { SpeciesFormChangePreMoveTrigger } from "#app/data/pokemon-forms";
|
||||
import { getStatusEffectActivationText, getStatusEffectHealText } from "#app/data/status-effect";
|
||||
import { PokemonType } from "#enums/pokemon-type";
|
||||
import { getTerrainBlockMessage, getWeatherBlockMessage } from "#app/data/weather";
|
||||
import { MoveUsedEvent } from "#app/events/battle-scene";
|
||||
import type { PokemonMove } from "#app/field/pokemon";
|
||||
import type { PokemonMove } from "#app/data/moves/pokemon-move";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import { MoveResult } from "#app/field/pokemon";
|
||||
import { getPokemonNameWithAffix } from "#app/messages";
|
||||
|
|
|
@ -3,7 +3,7 @@ import type { BattlerIndex } from "#app/battle";
|
|||
import { CommonAnim } from "#app/data/battle-anims";
|
||||
import { getStatusEffectHealText } from "#app/data/status-effect";
|
||||
import { StatusEffect } from "#app/enums/status-effect";
|
||||
import { HitResult } from "#app/field/pokemon";
|
||||
import { HitResult } from "#enums/hit-result";
|
||||
import { getPokemonNameWithAffix } from "#app/messages";
|
||||
import { HealingBoosterModifier } from "#app/modifier/modifier";
|
||||
import { HealAchv } from "#app/system/achv";
|
||||
|
|
|
@ -2,7 +2,7 @@ import type { BattlerIndex } from "#app/battle";
|
|||
import { BattlerTagType } from "#enums/battler-tag-type";
|
||||
import { Moves } from "#enums/moves";
|
||||
import { EFFECTIVE_STATS, BATTLE_STATS } from "#enums/stat";
|
||||
import { PokemonMove } from "#app/field/pokemon";
|
||||
import { PokemonMove } from "#app/data/moves/pokemon-move";
|
||||
import { globalScene } from "#app/global-scene";
|
||||
import { PokemonPhase } from "./pokemon-phase";
|
||||
import { getPokemonNameWithAffix } from "#app/messages";
|
||||
|
|
|
@ -5,7 +5,7 @@ import { Mode } from "#app/ui/ui";
|
|||
import { CommandPhase } from "./command-phase";
|
||||
import { PokemonPhase } from "./pokemon-phase";
|
||||
import i18next from "#app/plugins/i18n";
|
||||
import { allMoves } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
|
||||
export class SelectTargetPhase extends PokemonPhase {
|
||||
// biome-ignore lint/complexity/noUselessConstructor: This makes `fieldIndex` required
|
||||
|
|
|
@ -5,7 +5,7 @@ import { TrainerSlot } from "#enums/trainer-slot";
|
|||
import { PlayerGender } from "#app/enums/player-gender";
|
||||
import { addPokeballOpenParticles } from "#app/field/anims";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import { FieldPosition } from "#app/field/pokemon";
|
||||
import { FieldPosition } from "#enums/field-position";
|
||||
import { getPokemonNameWithAffix } from "#app/messages";
|
||||
import i18next from "i18next";
|
||||
import { PartyMemberPokemonPhase } from "./party-member-pokemon-phase";
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import { globalScene } from "#app/global-scene";
|
||||
import { applyPreSwitchOutAbAttrs, PostDamageForceSwitchAbAttr, PreSwitchOutAbAttr } from "#app/data/ability";
|
||||
import { allMoves, ForceSwitchOutAttr } from "#app/data/moves/move";
|
||||
import { ForceSwitchOutAttr } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { getPokeballTintColor } from "#app/data/pokeball";
|
||||
import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms";
|
||||
import { TrainerSlot } from "#enums/trainer-slot";
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { globalScene } from "#app/global-scene";
|
||||
import { FieldPosition } from "#app/field/pokemon";
|
||||
import { FieldPosition } from "#enums/field-position";
|
||||
import { BattlePhase } from "./battle-phase";
|
||||
|
||||
export class ToggleDoublePositionPhase extends BattlePhase {
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
import { applyAbAttrs, BypassSpeedChanceAbAttr, PreventBypassSpeedChanceAbAttr } from "#app/data/ability";
|
||||
import { allMoves, MoveHeaderAttr } from "#app/data/moves/move";
|
||||
import { MoveHeaderAttr } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { Abilities } from "#app/enums/abilities";
|
||||
import { Stat } from "#app/enums/stat";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import { PokemonMove } from "#app/field/pokemon";
|
||||
import { PokemonMove } from "#app/data/moves/pokemon-move";
|
||||
import { BypassSpeedChanceModifier } from "#app/modifier/modifier";
|
||||
import { Command } from "#app/ui/command-ui-handler";
|
||||
import { randSeedShuffle, BooleanHolder } from "#app/utils";
|
||||
|
|
|
@ -14,7 +14,7 @@ import { getWeatherDamageMessage, getWeatherLapseMessage } from "#app/data/weath
|
|||
import { BattlerTagType } from "#app/enums/battler-tag-type";
|
||||
import { WeatherType } from "#app/enums/weather-type";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import { HitResult } from "#app/field/pokemon";
|
||||
import { HitResult } from "#enums/hit-result";
|
||||
import { BooleanHolder, toDmgValue } from "#app/utils";
|
||||
import { CommonAnimPhase } from "./common-anim-phase";
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@ import { Nature } from "#enums/nature";
|
|||
import { GameStats } from "#app/system/game-stats";
|
||||
import { Tutorial } from "#app/tutorial";
|
||||
import { speciesEggMoves } from "#app/data/balance/egg-moves";
|
||||
import { allMoves } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { TrainerVariant } from "#app/field/trainer";
|
||||
import type { Variant } from "#app/sprites/variant";
|
||||
import { setSettingGamepad, SettingGamepad, settingGamepadDefaults } from "#app/system/settings/settings-gamepad";
|
||||
|
|
|
@ -5,7 +5,8 @@ import type { Nature } from "#enums/nature";
|
|||
import type { PokeballType } from "#enums/pokeball";
|
||||
import { getPokemonSpecies, getPokemonSpeciesForm } from "../data/pokemon-species";
|
||||
import { Status } from "../data/status-effect";
|
||||
import Pokemon, { EnemyPokemon, PokemonMove, PokemonSummonData } from "../field/pokemon";
|
||||
import Pokemon, { EnemyPokemon, PokemonSummonData } from "../field/pokemon";
|
||||
import { PokemonMove } from "#app/data/moves/pokemon-move";
|
||||
import { TrainerSlot } from "#enums/trainer-slot";
|
||||
import type { Variant } from "#app/sprites/variant";
|
||||
import { loadBattlerTag } from "../data/battler-tags";
|
||||
|
|
|
@ -10,7 +10,7 @@ import * as Utils from "../utils";
|
|||
import { MoveCategory } from "#enums/MoveCategory";
|
||||
import i18next from "i18next";
|
||||
import { Button } from "#enums/buttons";
|
||||
import type { PokemonMove } from "#app/field/pokemon";
|
||||
import type { PokemonMove } from "#app/data/moves/pokemon-move";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import type { CommandPhase } from "#app/phases/command-phase";
|
||||
import MoveInfoOverlay from "./move-info-overlay";
|
||||
|
|
|
@ -9,7 +9,7 @@ import { LockModifierTiersModifier, PokemonHeldItemModifier, HealShopCostModifie
|
|||
import { handleTutorial, Tutorial } from "../tutorial";
|
||||
import { Button } from "#enums/buttons";
|
||||
import MoveInfoOverlay from "./move-info-overlay";
|
||||
import { allMoves } from "../data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import * as Utils from "./../utils";
|
||||
import Overrides from "#app/overrides";
|
||||
import i18next from "i18next";
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import type { PlayerPokemon, PokemonMove } from "#app/field/pokemon";
|
||||
import type { PlayerPokemon } from "#app/field/pokemon";
|
||||
import type { PokemonMove } from "#app/data/moves/pokemon-move";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import { MoveResult } from "#app/field/pokemon";
|
||||
import { addBBCodeTextObject, addTextObject, getTextColor, TextStyle } from "#app/ui/text";
|
||||
|
@ -11,7 +12,8 @@ import {
|
|||
PokemonHeldItemModifier,
|
||||
SwitchEffectTransferModifier,
|
||||
} from "#app/modifier/modifier";
|
||||
import { allMoves, ForceSwitchOutAttr } from "#app/data/moves/move";
|
||||
import { ForceSwitchOutAttr } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { Gender, getGenderColor, getGenderSymbol } from "#app/data/gender";
|
||||
import { StatusEffect } from "#enums/status-effect";
|
||||
import PokemonIconAnimHandler, { PokemonIconAnimMode } from "#app/ui/pokemon-icon-anim-handler";
|
||||
|
|
|
@ -9,7 +9,7 @@ import { allAbilities } from "#app/data/ability";
|
|||
import { speciesEggMoves } from "#app/data/balance/egg-moves";
|
||||
import { GrowthRate, getGrowthRateColor } from "#app/data/exp";
|
||||
import { Gender, getGenderColor, getGenderSymbol } from "#app/data/gender";
|
||||
import { allMoves } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { getNatureName } from "#app/data/nature";
|
||||
import type { SpeciesFormChange } from "#app/data/pokemon-forms";
|
||||
import { pokemonFormChanges } from "#app/data/pokemon-forms";
|
||||
|
|
|
@ -7,7 +7,7 @@ import { isNullOrUndefined } from "#app/utils";
|
|||
import { Mode } from "./ui";
|
||||
import { FilterTextRow } from "./filter-text";
|
||||
import { allAbilities } from "#app/data/ability";
|
||||
import { allMoves } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { allSpecies } from "#app/data/pokemon-species";
|
||||
import i18next from "i18next";
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@ import type { OptionSelectConfig } from "./abstact-option-select-ui-handler";
|
|||
import { FilterText, FilterTextRow } from "./filter-text";
|
||||
import { allAbilities } from "#app/data/ability";
|
||||
import { starterPassiveAbilities } from "#app/data/balance/passives";
|
||||
import { allMoves } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { speciesTmMoves } from "#app/data/balance/tms";
|
||||
import { pokemonPrevolutions, pokemonStarters } from "#app/data/balance/pokemon-evolutions";
|
||||
import { Biome } from "#enums/biome";
|
||||
|
|
|
@ -4,7 +4,7 @@ import { PokemonType } from "#enums/pokemon-type";
|
|||
import * as Utils from "#app/utils";
|
||||
import { TextStyle, addTextObject } from "#app/ui/text";
|
||||
import { speciesEggMoves } from "#app/data/balance/egg-moves";
|
||||
import { allMoves } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { Species } from "#enums/species";
|
||||
import { getEggTierForSpecies } from "#app/data/egg";
|
||||
import { starterColors } from "#app/battle-scene";
|
||||
|
|
|
@ -13,7 +13,7 @@ import { allAbilities } from "#app/data/ability";
|
|||
import { speciesEggMoves } from "#app/data/balance/egg-moves";
|
||||
import { GrowthRate, getGrowthRateColor } from "#app/data/exp";
|
||||
import { Gender, getGenderColor, getGenderSymbol } from "#app/data/gender";
|
||||
import { allMoves } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { getNatureName } from "#app/data/nature";
|
||||
import { pokemonFormChanges } from "#app/data/pokemon-forms";
|
||||
import type { LevelMoves } from "#app/data/balance/pokemon-level-moves";
|
||||
|
|
|
@ -3,7 +3,8 @@ import { globalScene } from "#app/global-scene";
|
|||
import { Mode } from "#app/ui/ui";
|
||||
import UiHandler from "#app/ui/ui-handler";
|
||||
import * as Utils from "#app/utils";
|
||||
import type { PlayerPokemon, PokemonMove } from "#app/field/pokemon";
|
||||
import type { PlayerPokemon } from "#app/field/pokemon";
|
||||
import type { PokemonMove } from "#app/data/moves/pokemon-move";
|
||||
import { getStarterValueFriendshipCap, speciesStarterCosts } from "#app/data/balance/starters";
|
||||
import { argbFromRgba } from "@material/material-color-utilities";
|
||||
import { getTypeRgb } from "#app/data/type";
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { allMoves } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { Abilities } from "#enums/abilities";
|
||||
import { Moves } from "#enums/moves";
|
||||
import { Species } from "#enums/species";
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { allMoves } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { Abilities } from "#app/enums/abilities";
|
||||
import { MoveEffectPhase } from "#app/phases/move-effect-phase";
|
||||
import { TurnEndPhase } from "#app/phases/turn-end-phase";
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import { allMoves, MultiHitAttr } from "#app/data/moves/move";
|
||||
import { MultiHitAttr } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { MultiHitType } from "#enums/MultiHitType";
|
||||
import { Status } from "#app/data/status-effect";
|
||||
import { Abilities } from "#enums/abilities";
|
||||
|
|
|
@ -7,7 +7,7 @@ import { StatusEffect } from "#enums/status-effect";
|
|||
import GameManager from "#test/testUtils/gameManager";
|
||||
import Phaser from "phaser";
|
||||
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
||||
import { allMoves } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { BattlerTagType } from "#enums/battler-tag-type";
|
||||
import { allAbilities } from "#app/data/ability";
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ import Phaser from "phaser";
|
|||
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
||||
import { BattlerIndex } from "#app/battle";
|
||||
import { allAbilities } from "#app/data/ability";
|
||||
import { allMoves } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { MoveCategory } from "#enums/MoveCategory";
|
||||
|
||||
describe("Moves - Friend Guard", () => {
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
import { BattlerIndex } from "#app/battle";
|
||||
import { allMoves } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { PokemonType } from "#enums/pokemon-type";
|
||||
import { Abilities } from "#app/enums/abilities";
|
||||
import { Moves } from "#app/enums/moves";
|
||||
import { Species } from "#app/enums/species";
|
||||
import { HitResult } from "#app/field/pokemon";
|
||||
import { HitResult } from "#enums/hit-result";
|
||||
import GameManager from "#test/testUtils/gameManager";
|
||||
import Phaser from "phaser";
|
||||
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { allMoves } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { Abilities } from "#app/enums/abilities";
|
||||
import { Stat } from "#app/enums/stat";
|
||||
import { Moves } from "#enums/moves";
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { ArenaTagSide } from "#app/data/arena-tag";
|
||||
import { allMoves } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { ArenaTagType } from "#enums/arena-tag-type";
|
||||
import { BattlerTagType } from "#enums/battler-tag-type";
|
||||
import { Stat } from "#enums/stat";
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { allMoves } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { PokemonType } from "#enums/pokemon-type";
|
||||
import { Weather } from "#app/data/weather";
|
||||
import type { PlayerPokemon } from "#app/field/pokemon";
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { BattlerIndex } from "#app/battle";
|
||||
import { allAbilities } from "#app/data/ability";
|
||||
import { ArenaTagSide } from "#app/data/arena-tag";
|
||||
import { allMoves } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { ArenaTagType } from "#app/enums/arena-tag-type";
|
||||
import { BattlerTagType } from "#app/enums/battler-tag-type";
|
||||
import { Stat } from "#app/enums/stat";
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { allMoves } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { Abilities } from "#app/enums/abilities";
|
||||
import { MoveEffectPhase } from "#app/phases/move-effect-phase";
|
||||
import { TurnEndPhase } from "#app/phases/turn-end-phase";
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { allMoves } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { PokemonType } from "#enums/pokemon-type";
|
||||
import { Weather } from "#app/data/weather";
|
||||
import type { PlayerPokemon } from "#app/field/pokemon";
|
||||
|
|
|
@ -9,7 +9,8 @@ import { Species } from "#enums/species";
|
|||
import GameManager from "#test/testUtils/gameManager";
|
||||
import Phaser from "phaser";
|
||||
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
||||
import { allMoves, RandomMoveAttr } from "#app/data/moves/move";
|
||||
import { RandomMoveAttr } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
|
||||
// See also: TypeImmunityAbAttr
|
||||
describe("Abilities - Sap Sipper", () => {
|
||||
|
|
|
@ -4,7 +4,7 @@ import { Moves } from "#enums/moves";
|
|||
import { Species } from "#enums/species";
|
||||
import GameManager from "#test/testUtils/gameManager";
|
||||
import Phaser from "phaser";
|
||||
import { allMoves } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
||||
import { FlinchAttr } from "#app/data/moves/move";
|
||||
|
||||
|
|
|
@ -7,7 +7,8 @@ import { Stat } from "#enums/stat";
|
|||
import GameManager from "#test/testUtils/gameManager";
|
||||
import Phaser from "phaser";
|
||||
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
||||
import { allMoves, FlinchAttr } from "#app/data/moves/move";
|
||||
import { FlinchAttr } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
|
||||
describe("Abilities - Sheer Force", () => {
|
||||
let phaserGame: Phaser.Game;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { allAbilities } from "#app/data/ability";
|
||||
import { allMoves } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { Abilities } from "#app/enums/abilities";
|
||||
import { Moves } from "#enums/moves";
|
||||
import { Species } from "#enums/species";
|
||||
|
|
|
@ -7,7 +7,7 @@ import { MoveEffectPhase } from "#app/phases/move-effect-phase";
|
|||
import GameManager from "#test/testUtils/gameManager";
|
||||
import Phaser from "phaser";
|
||||
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
||||
import { allMoves } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
|
||||
describe("Abilities - Supreme Overlord", () => {
|
||||
let phaserGame: Phaser.Game;
|
||||
|
|
|
@ -2,7 +2,7 @@ import { BattlerIndex } from "#app/battle";
|
|||
import { Abilities } from "#app/enums/abilities";
|
||||
import { Moves } from "#app/enums/moves";
|
||||
import { Species } from "#app/enums/species";
|
||||
import { HitResult } from "#app/field/pokemon";
|
||||
import { HitResult } from "#enums/hit-result";
|
||||
import GameManager from "#test/testUtils/gameManager";
|
||||
import Phaser from "phaser";
|
||||
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import { BattlerIndex } from "#app/battle";
|
||||
import { PostItemLostAbAttr } from "#app/data/ability";
|
||||
import { allMoves, StealHeldItemChanceAttr } from "#app/data/moves/move";
|
||||
import { StealHeldItemChanceAttr } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import type { ContactHeldItemTransferChanceModifier } from "#app/modifier/modifier";
|
||||
import { Abilities } from "#enums/abilities";
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import { BattlerIndex } from "#app/battle";
|
||||
import { ArenaTagSide } from "#app/data/arena-tag";
|
||||
import { allMoves } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import GameManager from "#test/testUtils/gameManager";
|
||||
import { toDmgValue } from "#app/utils";
|
||||
import { Abilities } from "#enums/abilities";
|
||||
|
@ -534,12 +534,12 @@ describe("Abilities - Wimp Out", () => {
|
|||
.enemyAbility(Abilities.WIMP_OUT)
|
||||
.startingLevel(50)
|
||||
.enemyLevel(1)
|
||||
.enemyMoveset([ Moves.SPLASH, Moves.ENDURE ])
|
||||
.enemyMoveset([Moves.SPLASH, Moves.ENDURE])
|
||||
.battleType("double")
|
||||
.moveset([ Moves.DRAGON_ENERGY, Moves.SPLASH ])
|
||||
.moveset([Moves.DRAGON_ENERGY, Moves.SPLASH])
|
||||
.startingWave(wave);
|
||||
|
||||
await game.classicMode.startBattle([ Species.REGIDRAGO, Species.MAGIKARP ]);
|
||||
await game.classicMode.startBattle([Species.REGIDRAGO, Species.MAGIKARP]);
|
||||
|
||||
// turn 1
|
||||
game.move.select(Moves.DRAGON_ENERGY, 0);
|
||||
|
@ -549,6 +549,5 @@ describe("Abilities - Wimp Out", () => {
|
|||
|
||||
await game.phaseInterceptor.to("SelectModifierPhase");
|
||||
expect(game.scene.currentBattle.waveIndex).toBe(wave + 1);
|
||||
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { allMoves } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { MoveEffectPhase } from "#app/phases/move-effect-phase";
|
||||
import { Abilities } from "#enums/abilities";
|
||||
import { Moves } from "#enums/moves";
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { BattlerIndex } from "#app/battle";
|
||||
import { allMoves } from "#app/data/moves/move";
|
||||
import { allMoves } from "#app/data/moves/all-moves";
|
||||
import { Abilities } from "#enums/abilities";
|
||||
import { ArenaTagType } from "#enums/arena-tag-type";
|
||||
import { BattlerTagType } from "#enums/battler-tag-type";
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue