Splitting held items to their own file

This commit is contained in:
Wlowscha 2025-05-29 16:10:59 +02:00
parent 908c78ae03
commit 604c216e12
No known key found for this signature in database
GPG Key ID: 3C8F1AD330565D04
11 changed files with 2152 additions and 2115 deletions

View File

@ -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;

File diff suppressed because it is too large Load Diff

View 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);
}
}

View File

@ -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,

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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) {

View File

@ -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,

View File

@ -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";