mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-07-04 15:32:18 +02:00
Splitting held items to their own file
This commit is contained in:
parent
908c78ae03
commit
604c216e12
@ -19,7 +19,7 @@ import {
|
||||
type Constructor,
|
||||
} from "#app/utils/common";
|
||||
import { deepMergeSpriteData } from "#app/utils/data";
|
||||
import type { Modifier, ModifierPredicate, TurnHeldItemTransferModifier } from "./modifier/modifier";
|
||||
import type { Modifier, ModifierPredicate } from "./modifier/modifier";
|
||||
import {
|
||||
ConsumableModifier,
|
||||
ConsumablePokemonModifier,
|
||||
@ -28,14 +28,9 @@ import {
|
||||
ExpShareModifier,
|
||||
FusePokemonModifier,
|
||||
HealingBoosterModifier,
|
||||
ModifierBar,
|
||||
MultipleParticipantExpBonusModifier,
|
||||
PersistentModifier,
|
||||
PokemonExpBoosterModifier,
|
||||
PokemonFormChangeItemModifier,
|
||||
PokemonHeldItemModifier,
|
||||
PokemonHpRestoreModifier,
|
||||
PokemonIncrementingStatModifier,
|
||||
RememberMoveModifier,
|
||||
} from "./modifier/modifier";
|
||||
import { PokeballType } from "#enums/pokeball";
|
||||
@ -182,6 +177,14 @@ import { hasExpSprite } from "./sprites/sprite-utils";
|
||||
import { timedEventManager } from "./global-event-manager";
|
||||
import { starterColors } from "./global-vars/starter-colors";
|
||||
import { startingWave } from "./starting-wave";
|
||||
import { ModifierBar } from "./modifier/modifier-bar";
|
||||
import {
|
||||
PokemonExpBoosterModifier,
|
||||
PokemonFormChangeItemModifier,
|
||||
PokemonHeldItemModifier,
|
||||
PokemonIncrementingStatModifier,
|
||||
type TurnHeldItemTransferModifier,
|
||||
} from "./modifier/held-item-modifier";
|
||||
|
||||
const DEBUG_RNG = false;
|
||||
|
||||
|
2012
src/modifier/held-item-modifier.ts
Normal file
2012
src/modifier/held-item-modifier.ts
Normal file
File diff suppressed because it is too large
Load Diff
82
src/modifier/modifier-bar.ts
Normal file
82
src/modifier/modifier-bar.ts
Normal file
@ -0,0 +1,82 @@
|
||||
import { globalScene } from "#app/global-scene";
|
||||
import { modifierSortFunc, type PokemonHeldItemModifier } from "./held-item-modifier";
|
||||
import type { PersistentModifier } from "./modifier";
|
||||
|
||||
const iconOverflowIndex = 24;
|
||||
|
||||
export class ModifierBar extends Phaser.GameObjects.Container {
|
||||
private player: boolean;
|
||||
private modifierCache: PersistentModifier[];
|
||||
|
||||
constructor(enemy?: boolean) {
|
||||
super(globalScene, 1 + (enemy ? 302 : 0), 2);
|
||||
|
||||
this.player = !enemy;
|
||||
this.setScale(0.5);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to update content displayed in {@linkcode ModifierBar}
|
||||
* @param {PersistentModifier[]} modifiers - The list of modifiers to be displayed in the {@linkcode ModifierBar}
|
||||
* @param {boolean} hideHeldItems - If set to "true", only modifiers not assigned to a Pokémon are displayed
|
||||
*/
|
||||
updateModifiers(modifiers: PersistentModifier[], hideHeldItems = false) {
|
||||
this.removeAll(true);
|
||||
|
||||
const visibleIconModifiers = modifiers.filter(m => m.isIconVisible());
|
||||
const nonPokemonSpecificModifiers = visibleIconModifiers
|
||||
.filter(m => !(m as PokemonHeldItemModifier).pokemonId)
|
||||
.sort(modifierSortFunc);
|
||||
const pokemonSpecificModifiers = visibleIconModifiers
|
||||
.filter(m => (m as PokemonHeldItemModifier).pokemonId)
|
||||
.sort(modifierSortFunc);
|
||||
|
||||
const sortedVisibleIconModifiers = hideHeldItems
|
||||
? nonPokemonSpecificModifiers
|
||||
: nonPokemonSpecificModifiers.concat(pokemonSpecificModifiers);
|
||||
|
||||
sortedVisibleIconModifiers.forEach((modifier: PersistentModifier, i: number) => {
|
||||
const icon = modifier.getIcon();
|
||||
if (i >= iconOverflowIndex) {
|
||||
icon.setVisible(false);
|
||||
}
|
||||
this.add(icon);
|
||||
this.setModifierIconPosition(icon, sortedVisibleIconModifiers.length);
|
||||
icon.setInteractive(new Phaser.Geom.Rectangle(0, 0, 32, 24), Phaser.Geom.Rectangle.Contains);
|
||||
icon.on("pointerover", () => {
|
||||
globalScene.ui.showTooltip(modifier.type.name, modifier.type.getDescription());
|
||||
if (this.modifierCache && this.modifierCache.length > iconOverflowIndex) {
|
||||
this.updateModifierOverflowVisibility(true);
|
||||
}
|
||||
});
|
||||
icon.on("pointerout", () => {
|
||||
globalScene.ui.hideTooltip();
|
||||
if (this.modifierCache && this.modifierCache.length > iconOverflowIndex) {
|
||||
this.updateModifierOverflowVisibility(false);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
for (const icon of this.getAll()) {
|
||||
this.sendToBack(icon);
|
||||
}
|
||||
|
||||
this.modifierCache = modifiers;
|
||||
}
|
||||
|
||||
updateModifierOverflowVisibility(ignoreLimit: boolean) {
|
||||
const modifierIcons = this.getAll().reverse();
|
||||
for (const modifier of modifierIcons.map(m => m as Phaser.GameObjects.Container).slice(iconOverflowIndex)) {
|
||||
modifier.setVisible(ignoreLimit);
|
||||
}
|
||||
}
|
||||
|
||||
setModifierIconPosition(icon: Phaser.GameObjects.Container, modifierCount: number) {
|
||||
const rowIcons: number = 12 + 6 * Math.max(Math.ceil(Math.min(modifierCount, 24) / 12) - 2, 0);
|
||||
|
||||
const x = ((this.getIndex(icon) % rowIcons) * 26) / (rowIcons / 12);
|
||||
const y = Math.floor(this.getIndex(icon) / rowIcons) * 20;
|
||||
|
||||
icon.setPosition(this.player ? x : -x, y);
|
||||
}
|
||||
}
|
@ -11,14 +11,13 @@ import { Moves } from "#enums/moves";
|
||||
import { PokeballType } from "#enums/pokeball";
|
||||
import { Species } from "#enums/species";
|
||||
import { StatusEffect } from "#enums/status-effect";
|
||||
import type { EnemyPersistentModifier, PersistentModifier } from "./modifier";
|
||||
import {
|
||||
BerryModifier,
|
||||
type EnemyPersistentModifier,
|
||||
type PersistentModifier,
|
||||
type PokemonHeldItemModifier,
|
||||
SpeciesCritBoosterModifier,
|
||||
TurnStatusEffectModifier,
|
||||
} from "./modifier";
|
||||
} from "./held-item-modifier";
|
||||
import { ModifierTier } from "./modifier-tier";
|
||||
import {
|
||||
FormChangeItemModifierType,
|
||||
|
@ -20,14 +20,7 @@ import { getPokemonNameWithAffix } from "#app/messages";
|
||||
import {
|
||||
AddPokeballModifier,
|
||||
AddVoucherModifier,
|
||||
AttackTypeBoosterModifier,
|
||||
BaseStatModifier,
|
||||
BerryModifier,
|
||||
BoostBugSpawnModifier,
|
||||
BypassSpeedChanceModifier,
|
||||
ContactHeldItemTransferChanceModifier,
|
||||
CritBoosterModifier,
|
||||
DamageMoneyRewardModifier,
|
||||
DoubleBattleChanceBoosterModifier,
|
||||
EnemyAttackStatusEffectChanceModifier,
|
||||
EnemyDamageBoosterModifier,
|
||||
@ -37,19 +30,15 @@ import {
|
||||
EnemyStatusEffectHealChanceModifier,
|
||||
EnemyTurnHealModifier,
|
||||
EvolutionItemModifier,
|
||||
EvolutionStatBoosterModifier,
|
||||
EvoTrackerModifier,
|
||||
ExpBalanceModifier,
|
||||
ExpBoosterModifier,
|
||||
ExpShareModifier,
|
||||
ExtraModifierModifier,
|
||||
FlinchChanceModifier,
|
||||
FusePokemonModifier,
|
||||
GigantamaxAccessModifier,
|
||||
HealingBoosterModifier,
|
||||
HealShopCostModifier,
|
||||
HiddenAbilityRateBoosterModifier,
|
||||
HitHealModifier,
|
||||
IvScannerModifier,
|
||||
LevelIncrementBoosterModifier,
|
||||
LockModifierTiersModifier,
|
||||
@ -60,44 +49,57 @@ import {
|
||||
MoneyRewardModifier,
|
||||
MultipleParticipantExpBonusModifier,
|
||||
PokemonAllMovePpRestoreModifier,
|
||||
PokemonHpRestoreModifier,
|
||||
PokemonLevelIncrementModifier,
|
||||
PokemonNatureChangeModifier,
|
||||
PokemonPpRestoreModifier,
|
||||
PokemonPpUpModifier,
|
||||
PokemonStatusHealModifier,
|
||||
RememberMoveModifier,
|
||||
ShinyRateBoosterModifier,
|
||||
TempCritBoosterModifier,
|
||||
TempStatStageBoosterModifier,
|
||||
TerastallizeAccessModifier,
|
||||
TerrastalizeModifier,
|
||||
TmModifier,
|
||||
type Modifier,
|
||||
TempExtraModifierModifier,
|
||||
CriticalCatchChanceBoosterModifier,
|
||||
} from "#app/modifier/modifier";
|
||||
import {
|
||||
AttackTypeBoosterModifier,
|
||||
BaseStatModifier,
|
||||
BerryModifier,
|
||||
BypassSpeedChanceModifier,
|
||||
ContactHeldItemTransferChanceModifier,
|
||||
CritBoosterModifier,
|
||||
DamageMoneyRewardModifier,
|
||||
EvolutionStatBoosterModifier,
|
||||
EvoTrackerModifier,
|
||||
FlinchChanceModifier,
|
||||
HitHealModifier,
|
||||
PokemonBaseStatFlatModifier,
|
||||
PokemonBaseStatTotalModifier,
|
||||
PokemonExpBoosterModifier,
|
||||
PokemonFormChangeItemModifier,
|
||||
PokemonFriendshipBoosterModifier,
|
||||
PokemonHeldItemModifier,
|
||||
PokemonHpRestoreModifier,
|
||||
PokemonIncrementingStatModifier,
|
||||
PokemonInstantReviveModifier,
|
||||
PokemonLevelIncrementModifier,
|
||||
PokemonMoveAccuracyBoosterModifier,
|
||||
PokemonMultiHitModifier,
|
||||
PokemonNatureChangeModifier,
|
||||
PokemonNatureWeightModifier,
|
||||
PokemonPpRestoreModifier,
|
||||
PokemonPpUpModifier,
|
||||
PokemonStatusHealModifier,
|
||||
PreserveBerryModifier,
|
||||
RememberMoveModifier,
|
||||
ResetNegativeStatStageModifier,
|
||||
ShinyRateBoosterModifier,
|
||||
SpeciesCritBoosterModifier,
|
||||
SpeciesStatBoosterModifier,
|
||||
SurviveDamageModifier,
|
||||
SwitchEffectTransferModifier,
|
||||
TempCritBoosterModifier,
|
||||
TempStatStageBoosterModifier,
|
||||
TerastallizeAccessModifier,
|
||||
TerrastalizeModifier,
|
||||
TmModifier,
|
||||
TurnHealModifier,
|
||||
TurnHeldItemTransferModifier,
|
||||
TurnStatusEffectModifier,
|
||||
type Modifier,
|
||||
TempExtraModifierModifier,
|
||||
CriticalCatchChanceBoosterModifier,
|
||||
FieldEffectModifier,
|
||||
} from "#app/modifier/modifier";
|
||||
} from "#app/modifier/held-item-modifier";
|
||||
import { ModifierTier } from "#app/modifier/modifier-tier";
|
||||
import { getVoucherTypeIcon, getVoucherTypeName, VoucherType } from "#app/system/voucher";
|
||||
import type { PokemonMoveSelectFilter, PokemonSelectFilter } from "#app/ui/party-ui-handler";
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -19,7 +19,7 @@ import { EncounterPhaseEvent } from "#app/events/battle-scene";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import { FieldPosition } from "#app/field/pokemon";
|
||||
import { getPokemonNameWithAffix } from "#app/messages";
|
||||
import { BoostBugSpawnModifier, IvScannerModifier, TurnHeldItemTransferModifier } from "#app/modifier/modifier";
|
||||
import { BoostBugSpawnModifier, IvScannerModifier } from "#app/modifier/modifier";
|
||||
import { ModifierPoolType, regenerateModifierPoolThresholds } from "#app/modifier/modifier-pool";
|
||||
import Overrides from "#app/overrides";
|
||||
import { BattlePhase } from "#app/phases/battle-phase";
|
||||
@ -41,10 +41,11 @@ import { Biome } from "#enums/biome";
|
||||
import { MysteryEncounterMode } from "#enums/mystery-encounter-mode";
|
||||
import { PlayerGender } from "#enums/player-gender";
|
||||
import { Species } from "#enums/species";
|
||||
import { overrideHeldItems, overrideModifiers } from "#app/modifier/modifier";
|
||||
import { overrideModifiers } from "#app/modifier/modifier";
|
||||
import i18next from "i18next";
|
||||
import { WEIGHT_INCREMENT_ON_SPAWN_MISS } from "#app/data/mystery-encounters/mystery-encounters";
|
||||
import { getNatureName } from "#app/data/nature";
|
||||
import { overrideHeldItems, TurnHeldItemTransferModifier } from "#app/modifier/held-item-modifier";
|
||||
|
||||
export class EncounterPhase extends BattlePhase {
|
||||
private loaded: boolean;
|
||||
|
@ -5,7 +5,7 @@ import { getPokeballAtlasKey } from "#app/data/pokeball";
|
||||
import { addTextObject, getTextStyleOptions, getModifierTierTextTint, getTextColor, TextStyle } from "./text";
|
||||
import AwaitableUiHandler from "./awaitable-ui-handler";
|
||||
import { UiMode } from "#enums/ui-mode";
|
||||
import { LockModifierTiersModifier, PokemonHeldItemModifier, HealShopCostModifier } from "../modifier/modifier";
|
||||
import { LockModifierTiersModifier, HealShopCostModifier } from "../modifier/modifier";
|
||||
import { handleTutorial, Tutorial } from "../tutorial";
|
||||
import { Button } from "#enums/buttons";
|
||||
import MoveInfoOverlay from "./move-info-overlay";
|
||||
@ -17,6 +17,7 @@ import { ShopCursorTarget } from "#app/enums/shop-cursor-target";
|
||||
import Phaser from "phaser";
|
||||
import type { PokeballType } from "#enums/pokeball";
|
||||
import { getPlayerShopModifierTypeOptionsForWave } from "#app/modifier/modifier-pool";
|
||||
import { PokemonHeldItemModifier } from "#app/modifier/held-item-modifier";
|
||||
|
||||
export const SHOP_OPTIONS_ROW_LIMIT = 7;
|
||||
const SINGLE_SHOP_ROW_YOFFSET = 12;
|
||||
|
@ -27,6 +27,7 @@ import { SettingKeyboard } from "#app/system/settings/settings-keyboard";
|
||||
import { getBiomeName } from "#app/data/balance/biomes";
|
||||
import type { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
||||
import { globalScene } from "#app/global-scene";
|
||||
import { modifierSortFunc, PokemonHeldItemModifier } from "#app/modifier/held-item-modifier";
|
||||
|
||||
/**
|
||||
* RunInfoUiMode indicates possible overlays of RunInfoUiHandler.
|
||||
@ -650,7 +651,7 @@ export default class RunInfoUiHandler extends UiHandler {
|
||||
modifierIconsContainer.setScale(0.45);
|
||||
for (const m of this.runInfo.modifiers) {
|
||||
const modifier = m.toModifier(this.modifiersModule[m.className]);
|
||||
if (modifier instanceof Modifier.PokemonHeldItemModifier) {
|
||||
if (modifier instanceof PokemonHeldItemModifier) {
|
||||
continue;
|
||||
}
|
||||
const icon = modifier?.getIcon(false);
|
||||
@ -881,17 +882,17 @@ export default class RunInfoUiHandler extends UiHandler {
|
||||
const heldItemsScale =
|
||||
this.runInfo.gameMode === GameModes.SPLICED_ENDLESS || this.runInfo.gameMode === GameModes.ENDLESS ? 0.25 : 0.5;
|
||||
const heldItemsContainer = globalScene.add.container(-82, 2);
|
||||
const heldItemsList: Modifier.PokemonHeldItemModifier[] = [];
|
||||
const heldItemsList: PokemonHeldItemModifier[] = [];
|
||||
if (this.runInfo.modifiers.length) {
|
||||
for (const m of this.runInfo.modifiers) {
|
||||
const modifier = m.toModifier(this.modifiersModule[m.className]);
|
||||
if (modifier instanceof Modifier.PokemonHeldItemModifier && modifier.pokemonId === pokemon.id) {
|
||||
if (modifier instanceof PokemonHeldItemModifier && modifier.pokemonId === pokemon.id) {
|
||||
modifier.stackCount = m["stackCount"];
|
||||
heldItemsList.push(modifier);
|
||||
}
|
||||
}
|
||||
if (heldItemsList.length > 0) {
|
||||
(heldItemsList as Modifier.PokemonHeldItemModifier[]).sort(Modifier.modifierSortFunc);
|
||||
(heldItemsList as PokemonHeldItemModifier[]).sort(modifierSortFunc);
|
||||
let row = 0;
|
||||
for (const [index, item] of heldItemsList.entries()) {
|
||||
if (index > 36) {
|
||||
|
@ -24,7 +24,6 @@ import { MoveCategory } from "#enums/MoveCategory";
|
||||
import { getPokeballAtlasKey } from "#app/data/pokeball";
|
||||
import { getGenderColor, getGenderSymbol } from "#app/data/gender";
|
||||
import { getLevelRelExp, getLevelTotalExp } from "#app/data/exp";
|
||||
import { PokemonHeldItemModifier } from "#app/modifier/modifier";
|
||||
import { StatusEffect } from "#enums/status-effect";
|
||||
import { getBiomeName } from "#app/data/balance/biomes";
|
||||
import { getNatureName, getNatureStatMultiplier } from "#app/data/nature";
|
||||
@ -34,11 +33,11 @@ import { getVariantTint } from "#app/sprites/variant";
|
||||
import { Button } from "#enums/buttons";
|
||||
import type { Ability } from "#app/data/abilities/ability-class";
|
||||
import i18next from "i18next";
|
||||
import { modifierSortFunc } from "#app/modifier/modifier";
|
||||
import { PlayerGender } from "#enums/player-gender";
|
||||
import { Stat, PERMANENT_STATS, getStatKey } from "#enums/stat";
|
||||
import { Nature } from "#enums/nature";
|
||||
import { achvs } from "#app/system/achv";
|
||||
import { modifierSortFunc, PokemonHeldItemModifier } from "#app/modifier/held-item-modifier";
|
||||
|
||||
enum Page {
|
||||
PROFILE,
|
||||
|
@ -6,7 +6,7 @@ import { getMoveTargets } from "../data/moves/move";
|
||||
import { Button } from "#enums/buttons";
|
||||
import type { Moves } from "#enums/moves";
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import type { ModifierBar } from "#app/modifier/modifier";
|
||||
import type { ModifierBar } from "#app/modifier/modifier-bar";
|
||||
import { SubstituteTag } from "#app/data/battler-tags";
|
||||
import { globalScene } from "#app/global-scene";
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user