diff --git a/src/items/reward.ts b/src/items/reward.ts index 62b75a5d913..cd725667970 100644 --- a/src/items/reward.ts +++ b/src/items/reward.ts @@ -17,7 +17,7 @@ import { HeldItemId } from "#enums/held-item-id"; import { LearnMoveType } from "#enums/learn-move-type"; import { MoveId } from "#enums/move-id"; import { Nature } from "#enums/nature"; -import { PokeballType } from "#enums/pokeball"; +import type { PokeballType } from "#enums/pokeball"; import { PokemonType } from "#enums/pokemon-type"; import { RewardId } from "#enums/reward-id"; import { RarityTier } from "#enums/reward-tier"; @@ -32,14 +32,10 @@ import { permanentStatToHeldItem, statBoostItems } from "#items/base-stat-booste import { berryTypeToHeldItem } from "#items/berry"; import { getNewAttackTypeBoosterHeldItem, getNewBerryHeldItem, getNewVitaminHeldItem } from "#items/held-item-pool"; import { formChangeItemName } from "#items/item-utility"; -import { - SPECIES_STAT_BOOSTER_ITEMS, - type SpeciesStatBoosterItemId, - type SpeciesStatBoostHeldItem, -} from "#items/stat-booster"; +import { SPECIES_STAT_BOOSTER_ITEMS, type SpeciesStatBoostHeldItem } from "#items/stat-booster"; import { TrainerItemEffect, tempStatToTrainerItem } from "#items/trainer-item"; import type { PokemonMove } from "#moves/pokemon-move"; -import { getVoucherTypeIcon, getVoucherTypeName, VoucherType } from "#system/voucher"; +import { getVoucherTypeIcon, getVoucherTypeName, type VoucherType } from "#system/voucher"; import type { RewardFunc, WeightedRewardWeightFunc } from "#types/rewards"; import type { Exact } from "#types/type-helpers"; import type { PokemonMoveSelectFilter, PokemonSelectFilter } from "#ui/party-ui-handler"; @@ -1528,289 +1524,6 @@ export class WeightedReward { } } -type BaseRewardOverride = { - name: Exclude; - count?: number; -}; - -/** Type for modifiers and held items that are constructed via {@linkcode RewardGenerator}. */ -export type GeneratorRewardOverride = { - count?: number; -} & ( - | { - name: keyof Pick; - type?: SpeciesStatBoosterItemId; - } - | { - name: keyof Pick; - type?: TempBattleStat; - } - | { - name: keyof Pick; - type?: Stat; - } - | { - name: keyof Pick; - type?: Nature; - } - | { - name: keyof Pick; - type?: PokemonType; - } - | { - name: keyof Pick; - type?: BerryType; - } - | { - name: keyof Pick; - type?: EvolutionItem; - } - | { - name: keyof Pick; - type?: FormChangeItem; - } - | { - name: keyof Pick; - type?: MoveId; - } -); - -/** Type used to construct modifiers and held items for overriding purposes. */ -export type RewardOverride = GeneratorRewardOverride | BaseRewardOverride; - -const rewardInitObj = Object.freeze({ - // Pokeball rewards - POKEBALL: () => new AddPokeballReward("pb", PokeballType.POKEBALL, 5, RewardId.POKEBALL), - GREAT_BALL: () => new AddPokeballReward("gb", PokeballType.GREAT_BALL, 5, RewardId.GREAT_BALL), - ULTRA_BALL: () => new AddPokeballReward("ub", PokeballType.ULTRA_BALL, 5, RewardId.ULTRA_BALL), - ROGUE_BALL: () => new AddPokeballReward("rb", PokeballType.ROGUE_BALL, 5, RewardId.ROGUE_BALL), - MASTER_BALL: () => new AddPokeballReward("mb", PokeballType.MASTER_BALL, 1, RewardId.MASTER_BALL), - - // Voucher rewards - VOUCHER: () => new AddVoucherReward(VoucherType.REGULAR, 1, RewardId.VOUCHER), - VOUCHER_PLUS: () => new AddVoucherReward(VoucherType.PLUS, 1, RewardId.VOUCHER_PLUS), - VOUCHER_PREMIUM: () => new AddVoucherReward(VoucherType.PREMIUM, 1, RewardId.VOUCHER_PREMIUM), - - // Money rewards - NUGGET: () => - new AddMoneyReward( - "modifierType:ModifierType.NUGGET", - "nugget", - 1, - "modifierType:ModifierType.MoneyRewardModifierType.extra.small", - RewardId.NUGGET, - ), - BIG_NUGGET: () => - new AddMoneyReward( - "modifierType:ModifierType.BIG_NUGGET", - "big_nugget", - 2.5, - "modifierType:ModifierType.MoneyRewardModifierType.extra.moderate", - RewardId.BIG_NUGGET, - ), - RELIC_GOLD: () => - new AddMoneyReward( - "modifierType:ModifierType.RELIC_GOLD", - "relic_gold", - 10, - "modifierType:ModifierType.MoneyRewardModifierType.extra.large", - RewardId.RELIC_GOLD, - ), - - // Party-wide consumables - RARER_CANDY: () => new AllPokemonLevelIncrementReward("modifierType:ModifierType.RARER_CANDY", "rarer_candy"), - SACRED_ASH: () => new AllPokemonFullReviveReward("modifierType:ModifierType.SACRED_ASH", "sacred_ash"), - - // Pokemon consumables - RARE_CANDY: () => new PokemonLevelIncrementReward("modifierType:ModifierType.RARE_CANDY", "rare_candy"), - - EVOLUTION_ITEM: () => new EvolutionItemRewardGenerator(false, RewardId.EVOLUTION_ITEM), - RARE_EVOLUTION_ITEM: () => new EvolutionItemRewardGenerator(true, RewardId.RARE_EVOLUTION_ITEM), - - POTION: () => new PokemonHpRestoreReward("modifierType:ModifierType.POTION", "potion", RewardId.POTION, 20, 10), - SUPER_POTION: () => - new PokemonHpRestoreReward("modifierType:ModifierType.SUPER_POTION", "super_potion", RewardId.SUPER_POTION, 50, 25), - HYPER_POTION: () => - new PokemonHpRestoreReward( - "modifierType:ModifierType.HYPER_POTION", - "hyper_potion", - RewardId.HYPER_POTION, - 200, - 50, - ), - MAX_POTION: () => - new PokemonHpRestoreReward("modifierType:ModifierType.MAX_POTION", "max_potion", RewardId.MAX_POTION, 0, 100), - FULL_RESTORE: () => - new PokemonHpRestoreReward( - "modifierType:ModifierType.FULL_RESTORE", - "full_restore", - RewardId.FULL_RESTORE, - 0, - 100, - true, - ), - - REVIVE: () => new PokemonReviveReward("modifierType:ModifierType.REVIVE", "revive", RewardId.REVIVE, 50), - MAX_REVIVE: () => - new PokemonReviveReward("modifierType:ModifierType.MAX_REVIVE", "max_revive", RewardId.MAX_REVIVE, 100), - - FULL_HEAL: () => new PokemonStatusHealReward("modifierType:ModifierType.FULL_HEAL", "full_heal"), - - ETHER: () => new PokemonPpRestoreReward("modifierType:ModifierType.ETHER", "ether", RewardId.ETHER, 10), - MAX_ETHER: () => - new PokemonPpRestoreReward("modifierType:ModifierType.MAX_ETHER", "max_ether", RewardId.MAX_ETHER, -1), - - ELIXIR: () => new PokemonAllMovePpRestoreReward("modifierType:ModifierType.ELIXIR", "elixir", RewardId.ELIXIR, 10), - MAX_ELIXIR: () => - new PokemonAllMovePpRestoreReward("modifierType:ModifierType.MAX_ELIXIR", "max_elixir", RewardId.MAX_ELIXIR, -1), - - PP_UP: () => new PokemonPpUpReward("modifierType:ModifierType.PP_UP", "pp_up", RewardId.PP_UP, 1), - PP_MAX: () => new PokemonPpUpReward("modifierType:ModifierType.PP_MAX", "pp_max", RewardId.PP_MAX, 3), - - /*REPEL: () => new DoubleBattleChanceBoosterReward('Repel', 5), - SUPER_REPEL: () => new DoubleBattleChanceBoosterReward('Super Repel', 10), - MAX_REPEL: () => new DoubleBattleChanceBoosterReward('Max Repel', 25),*/ - - MINT: () => new MintRewardGenerator(), - - TERA_SHARD: () => new TeraTypeRewardGenerator(), - - TM_COMMON: () => new TmRewardGenerator(RarityTier.COMMON), - TM_GREAT: () => new TmRewardGenerator(RarityTier.GREAT), - TM_ULTRA: () => new TmRewardGenerator(RarityTier.ULTRA), - - MEMORY_MUSHROOM: () => new RememberMoveReward("modifierType:ModifierType.MEMORY_MUSHROOM", "big_mushroom"), - - DNA_SPLICERS: () => new FusePokemonReward("modifierType:ModifierType.DNA_SPLICERS", "dna_splicers"), - - // Form change items - FORM_CHANGE_ITEM: () => new FormChangeItemRewardGenerator(false, RewardId.FORM_CHANGE_ITEM), - RARE_FORM_CHANGE_ITEM: () => new FormChangeItemRewardGenerator(true, RewardId.RARE_FORM_CHANGE_ITEM), - - // Held items - REVIVER_SEED: () => new HeldItemReward(HeldItemId.REVIVER_SEED), - - WHITE_HERB: () => new HeldItemReward(HeldItemId.WHITE_HERB), - - SPECIES_STAT_BOOSTER: () => new SpeciesStatBoosterRewardGenerator(false), - RARE_SPECIES_STAT_BOOSTER: () => new SpeciesStatBoosterRewardGenerator(true), - - BASE_STAT_BOOSTER: () => new BaseStatBoosterRewardGenerator(), - - ATTACK_TYPE_BOOSTER: () => new AttackTypeBoosterRewardGenerator(), - - MYSTICAL_ROCK: () => new HeldItemReward(HeldItemId.MYSTICAL_ROCK), - - BERRY: () => new BerryRewardGenerator(), - - LUCKY_EGG: () => new HeldItemReward(HeldItemId.LUCKY_EGG), - GOLDEN_EGG: () => new HeldItemReward(HeldItemId.GOLDEN_EGG), - - SOOTHE_BELL: () => new HeldItemReward(HeldItemId.SOOTHE_BELL), - - SCOPE_LENS: () => new HeldItemReward(HeldItemId.SCOPE_LENS), - LEEK: () => new HeldItemReward(HeldItemId.LEEK), - - EVIOLITE: () => new HeldItemReward(HeldItemId.EVIOLITE), - - SOUL_DEW: () => new HeldItemReward(HeldItemId.SOUL_DEW), - - GOLDEN_PUNCH: () => new HeldItemReward(HeldItemId.GOLDEN_PUNCH), - - GRIP_CLAW: () => new HeldItemReward(HeldItemId.GRIP_CLAW), - WIDE_LENS: () => new HeldItemReward(HeldItemId.WIDE_LENS), - - MULTI_LENS: () => new HeldItemReward(HeldItemId.MULTI_LENS), - - FOCUS_BAND: () => new HeldItemReward(HeldItemId.FOCUS_BAND), - - QUICK_CLAW: () => new HeldItemReward(HeldItemId.QUICK_CLAW), - - KINGS_ROCK: () => new HeldItemReward(HeldItemId.KINGS_ROCK), - - LEFTOVERS: () => new HeldItemReward(HeldItemId.LEFTOVERS), - - SHELL_BELL: () => new HeldItemReward(HeldItemId.SHELL_BELL), - - TOXIC_ORB: () => new HeldItemReward(HeldItemId.TOXIC_ORB), - - FLAME_ORB: () => new HeldItemReward(HeldItemId.FLAME_ORB), - - BATON: () => new HeldItemReward(HeldItemId.BATON), - - MINI_BLACK_HOLE: () => new HeldItemReward(HeldItemId.MINI_BLACK_HOLE), - - // Trainer items - MEGA_BRACELET: () => new TrainerItemReward(TrainerItemId.MEGA_BRACELET), - DYNAMAX_BAND: () => new TrainerItemReward(TrainerItemId.DYNAMAX_BAND), - TERA_ORB: () => new TrainerItemReward(TrainerItemId.TERA_ORB), - - MAP: () => new TrainerItemReward(TrainerItemId.MAP), - - LURE: () => new LapsingTrainerItemReward(TrainerItemId.LURE, RewardId.LURE), - SUPER_LURE: () => new LapsingTrainerItemReward(TrainerItemId.SUPER_LURE, RewardId.SUPER_LURE), - MAX_LURE: () => new LapsingTrainerItemReward(TrainerItemId.MAX_LURE, RewardId.MAX_LURE), - - TEMP_STAT_STAGE_BOOSTER: () => new TempStatStageBoosterRewardGenerator(), - - DIRE_HIT: () => new LapsingTrainerItemReward(TrainerItemId.DIRE_HIT, RewardId.TEMP_STAT_STAGE_BOOSTER), - - EXP_SHARE: () => new TrainerItemReward(TrainerItemId.EXP_SHARE), - EXP_BALANCE: () => new TrainerItemReward(TrainerItemId.EXP_BALANCE), - - OVAL_CHARM: () => new TrainerItemReward(TrainerItemId.OVAL_CHARM), - - EXP_CHARM: () => new TrainerItemReward(TrainerItemId.EXP_CHARM), - SUPER_EXP_CHARM: () => new TrainerItemReward(TrainerItemId.SUPER_EXP_CHARM), - - AMULET_COIN: () => new TrainerItemReward(TrainerItemId.AMULET_COIN), - - LOCK_CAPSULE: () => new TrainerItemReward(TrainerItemId.LOCK_CAPSULE), - - HEALING_CHARM: () => new TrainerItemReward(TrainerItemId.HEALING_CHARM), - CANDY_JAR: () => new TrainerItemReward(TrainerItemId.CANDY_JAR), - - BERRY_POUCH: () => new TrainerItemReward(TrainerItemId.BERRY_POUCH), - - SHINY_CHARM: () => new TrainerItemReward(TrainerItemId.SHINY_CHARM), - ABILITY_CHARM: () => new TrainerItemReward(TrainerItemId.ABILITY_CHARM), - CATCHING_CHARM: () => new TrainerItemReward(TrainerItemId.CATCHING_CHARM), - - IV_SCANNER: () => new TrainerItemReward(TrainerItemId.IV_SCANNER), - - GOLDEN_POKEBALL: () => new TrainerItemReward(TrainerItemId.GOLDEN_POKEBALL), - - // Tokens //TODO: do we even need them here? - ENEMY_DAMAGE_BOOSTER: () => new TrainerItemReward(TrainerItemId.ENEMY_DAMAGE_BOOSTER), - ENEMY_DAMAGE_REDUCTION: () => new TrainerItemReward(TrainerItemId.ENEMY_DAMAGE_REDUCTION), - //ENEMY_SUPER_EFFECT_BOOSTER: () => new Reward('Type Advantage Token', 'Increases damage of super effective attacks by 30%', (type, _args) => new EnemySuperEffectiveDamageBoosterModifier(type, 30), 'wl_custom_super_effective'), - ENEMY_HEAL: () => new TrainerItemReward(TrainerItemId.ENEMY_HEAL), - ENEMY_ATTACK_POISON_CHANCE: () => new TrainerItemReward(TrainerItemId.ENEMY_ATTACK_POISON_CHANCE), - ENEMY_ATTACK_PARALYZE_CHANCE: () => new TrainerItemReward(TrainerItemId.ENEMY_ATTACK_PARALYZE_CHANCE), - ENEMY_ATTACK_BURN_CHANCE: () => new TrainerItemReward(TrainerItemId.ENEMY_ATTACK_BURN_CHANCE), - ENEMY_STATUS_EFFECT_HEAL_CHANCE: () => new TrainerItemReward(TrainerItemId.ENEMY_STATUS_EFFECT_HEAL_CHANCE), - ENEMY_ENDURE_CHANCE: () => new TrainerItemReward(TrainerItemId.ENEMY_ENDURE_CHANCE), - ENEMY_FUSED_CHANCE: () => new TrainerItemReward(TrainerItemId.ENEMY_FUSED_CHANCE), - - // Items from mystery encounters - MYSTERY_ENCOUNTER_SHUCKLE_JUICE_GOOD: () => new HeldItemReward(HeldItemId.SHUCKLE_JUICE_GOOD), - MYSTERY_ENCOUNTER_SHUCKLE_JUICE_BAD: () => new HeldItemReward(HeldItemId.SHUCKLE_JUICE_BAD), - - MYSTERY_ENCOUNTER_OLD_GATEAU: () => new HeldItemReward(HeldItemId.OLD_GATEAU), - - MYSTERY_ENCOUNTER_BLACK_SLUDGE: () => new TrainerItemReward(TrainerItemId.BLACK_SLUDGE), - - MYSTERY_ENCOUNTER_MACHO_BRACE: () => new HeldItemReward(HeldItemId.MACHO_BRACE), - - MYSTERY_ENCOUNTER_GOLDEN_BUG_NET: () => new TrainerItemReward(TrainerItemId.GOLDEN_BUG_NET), -}); - -/** - * The initial set of modifier types, used to generate the modifier pool. - */ -export type Rewards = typeof rewardInitObj; -export type RewardKeys = keyof typeof rewardInitObj; - export class RewardOption { public type: Reward; public upgradeCount: number;