From ba6fdc074f597c69f58e8bb827e1003b46cca68d Mon Sep 17 00:00:00 2001 From: Greenlamp Date: Tue, 7 May 2024 15:14:05 +0200 Subject: [PATCH] working override for starting held items for player --- src/modifier/modifier.ts | 23 +++++++++++++++++++++++ src/overrides.ts | 2 ++ src/phases.ts | 8 +++++++- 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 2d76bec3496..d0ee0b40423 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -19,6 +19,8 @@ import { VoucherType } from '../system/voucher'; import { FormChangeItem, SpeciesFormChangeItemTrigger } from '../data/pokemon-forms'; import { Nature } from '#app/data/nature'; import { BattlerTagType } from '#app/data/enums/battler-tag-type'; +import { STARTING_HELD_ITEMS_OVERRIDE } from "./overrides"; +import { modifierTypes } from "./modifier-type"; type ModifierType = ModifierTypes.ModifierType; export type ModifierPredicate = (modifier: Modifier) => boolean; @@ -2175,4 +2177,25 @@ export class EnemyFusionChanceModifier extends EnemyPersistentModifier { getMaxStackCount(scene: BattleScene): integer { return 10; } +} + +export function startingItemHeldsOverride(pokemon: Pokemon): Modifier[] { + const ret: Modifier[] = new Array(); + // if no override, do nothing + if (!STARTING_HELD_ITEMS_OVERRIDE || STARTING_HELD_ITEMS_OVERRIDE.length === 0) return ret; + // we loop through all the itemName given in the override file + for (const itemName of STARTING_HELD_ITEMS_OVERRIDE) { + // if the item does not exist, we skip it + if (!modifierTypes.hasOwnProperty(itemName)) continue; + // we retrieve the item in the list + const modifierType = modifierTypes[itemName](); + // we create the item + const itemModifier = modifierType.withIdFromFunc(modifierTypes[itemName]).newModifier((pokemon) as PersistentModifier) as PokemonHeldItemModifier; + // we assign the created item to the pokemon + itemModifier.pokemonId = pokemon.id; + // we say how many items we want + itemModifier.stackCount = 1; + ret.push(itemModifier); + } + return ret; } \ No newline at end of file diff --git a/src/overrides.ts b/src/overrides.ts index 7608275ea0f..97ad8518c58 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -13,6 +13,7 @@ export const STARTING_BIOME_OVERRIDE = Biome.TOWN; export const STARTING_MONEY_OVERRIDE = 0; export const WEATHER_OVERRIDE = WeatherType.NONE; export const DOUBLE_BATTLE_OVERRIDE = false; +export const STARTING_HELD_ITEMS_OVERRIDE = ['REVIVER_SEED']; export const ABILITY_OVERRIDE = Abilities.NONE; export const PASSIVE_ABILITY_OVERRIDE = Abilities.NONE; @@ -23,6 +24,7 @@ export const OPP_ABILITY_OVERRIDE = Abilities.NONE; export const OPP_PASSIVE_ABILITY_OVERRIDE = Abilities.NONE; export const OPP_MOVE_OVERRIDE = Moves.NONE; export const OPP_MOVE_OVERRIDE_2 = Moves.NONE; +export const OPP_HELD_ITEMS_OVERRIDE = ['LUCKY_EGG']; export const OPP_SHINY_OVERRIDE = false; export const OPP_VARIANT_OVERRIDE = 0; diff --git a/src/phases.ts b/src/phases.ts index 59022f5fe5e..8a1269ef4ab 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -6,7 +6,7 @@ import { allMoves, applyMoveAttrs, BypassSleepAttr, ChargeAttr, applyFilteredMov import { Mode } from './ui/ui'; import { Command } from "./ui/command-ui-handler"; import { Stat } from "./data/pokemon-stat"; -import { BerryModifier, ContactHeldItemTransferChanceModifier, EnemyAttackStatusEffectChanceModifier, EnemyPersistentModifier, EnemyStatusEffectHealChanceModifier, EnemyTurnHealModifier, ExpBalanceModifier, ExpBoosterModifier, ExpShareModifier, ExtraModifierModifier, FlinchChanceModifier, FusePokemonModifier, HealingBoosterModifier, HitHealModifier, LapsingPersistentModifier, MapModifier, Modifier, MultipleParticipantExpBonusModifier, PersistentModifier, PokemonExpBoosterModifier, PokemonHeldItemModifier, PokemonInstantReviveModifier, SwitchEffectTransferModifier, TempBattleStatBoosterModifier, TurnHealModifier, TurnHeldItemTransferModifier, MoneyMultiplierModifier, MoneyInterestModifier, IvScannerModifier, LapsingPokemonHeldItemModifier, PokemonMultiHitModifier, PokemonMoveAccuracyBoosterModifier } from "./modifier/modifier"; +import { BerryModifier, ContactHeldItemTransferChanceModifier, EnemyAttackStatusEffectChanceModifier, EnemyPersistentModifier, EnemyStatusEffectHealChanceModifier, EnemyTurnHealModifier, ExpBalanceModifier, ExpBoosterModifier, ExpShareModifier, ExtraModifierModifier, FlinchChanceModifier, FusePokemonModifier, HealingBoosterModifier, HitHealModifier, LapsingPersistentModifier, MapModifier, Modifier, MultipleParticipantExpBonusModifier, PersistentModifier, PokemonExpBoosterModifier, PokemonHeldItemModifier, PokemonInstantReviveModifier, SwitchEffectTransferModifier, TempBattleStatBoosterModifier, TurnHealModifier, TurnHeldItemTransferModifier, MoneyMultiplierModifier, MoneyInterestModifier, IvScannerModifier, LapsingPokemonHeldItemModifier, PokemonMultiHitModifier, PokemonMoveAccuracyBoosterModifier, startingItemHeldsOverride } from "./modifier/modifier"; import PartyUiHandler, { PartyOption, PartyUiMode } from "./ui/party-ui-handler"; import { doPokeballBounceAnim, getPokeballAtlasKey, getPokeballCatchMultiplier, getPokeballTintColor, PokeballType } from "./data/pokeball"; import { CommonAnim, CommonBattleAnim, MoveAnim, initMoveAnim, loadMoveAnimAssets } from "./data/battle-anims"; @@ -510,6 +510,12 @@ export class SelectStarterPhase extends Phase { party.push(starterPokemon); loadPokemonAssets.push(starterPokemon.loadAssets()); }); + const itemHeldsOverride = startingItemHeldsOverride(party[0]); + if (itemHeldsOverride?.length) { + for (const itemHeldOverride of itemHeldsOverride) { + this.scene.addModifier(itemHeldOverride, true, false, false, true); + } + } Promise.all(loadPokemonAssets).then(() => { SoundFade.fadeOut(this.scene, this.scene.sound.get('menu'), 500, true); this.scene.time.delayedCall(500, () => this.scene.playBgm());