From e2a6a9320984cd7c6569200a0e15f5deef220c6d Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Sat, 9 Dec 2023 00:33:29 -0500 Subject: [PATCH] Rebalance base stat boosters and make max stack count rely on IVs --- src/battle-scene.ts | 8 +-- src/data/pokemon-species.ts | 2 +- src/data/trainer-type.ts | 21 ++++--- src/modifier/modifier-type.ts | 17 ++++-- src/modifier/modifier.ts | 109 ++++++++++++++++++++++------------ src/system/modifier-data.ts | 4 +- src/ui/party-ui-handler.ts | 2 +- 7 files changed, 104 insertions(+), 59 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index f81d017c1..26ddcb4d6 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -1174,7 +1174,7 @@ export default class BattleScene extends Phaser.Scene { const soundName = modifier.type.soundName; this.validateAchvs(ModifierAchv, modifier); if (modifier instanceof PersistentModifier) { - if ((modifier as PersistentModifier).add(this.modifiers, !!virtual)) { + if ((modifier as PersistentModifier).add(this.modifiers, !!virtual, this)) { if (playSound && !this.sound.get(soundName)) this.playSound(soundName); } else if (!virtual) { @@ -1222,7 +1222,7 @@ export default class BattleScene extends Phaser.Scene { addEnemyModifier(itemModifier: PersistentModifier, ignoreUpdate?: boolean): Promise { return new Promise(resolve => { - itemModifier.add(this.enemyModifiers, false); + itemModifier.add(this.enemyModifiers, false, this); if (!ignoreUpdate) this.updateModifiers(false).then(() => resolve()); else @@ -1245,7 +1245,7 @@ export default class BattleScene extends Phaser.Scene { && (m as PokemonHeldItemModifier).matchType(itemModifier) && m.pokemonId === target.id, target.isPlayer()) as PokemonHeldItemModifier; let removeOld = true; if (matchingModifier) { - const maxStackCount = matchingModifier.getMaxStackCount(); + const maxStackCount = matchingModifier.getMaxStackCount(source.scene); if (matchingModifier.stackCount >= maxStackCount) { resolve(false); return; @@ -1312,7 +1312,7 @@ export default class BattleScene extends Phaser.Scene { if (isBoss) count = Math.max(count, Math.floor(chances / 2)); getEnemyModifierTypesForWave(waveIndex, count, [ enemyPokemon ], this.currentBattle.battleType === BattleType.TRAINER ? ModifierPoolType.TRAINER : ModifierPoolType.WILD, this.gameMode) - .map(mt => mt.newModifier(enemyPokemon).add(this.enemyModifiers, false)); + .map(mt => mt.newModifier(enemyPokemon).add(this.enemyModifiers, false, this)); }); this.updateModifiers(false).then(() => resolve()); diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index a815da946..a7f9d8c59 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -2458,7 +2458,7 @@ export const speciesStarters = { [Species.PANCHAM]: 3, [Species.FURFROU]: 4, [Species.ESPURR]: 3, - [Species.HONEDGE]: 3, + [Species.HONEDGE]: 4, [Species.SPRITZEE]: 3, [Species.SWIRLIX]: 3, [Species.INKAY]: 3, diff --git a/src/data/trainer-type.ts b/src/data/trainer-type.ts index 6c4f06252..b0e40cd88 100644 --- a/src/data/trainer-type.ts +++ b/src/data/trainer-type.ts @@ -569,7 +569,7 @@ export const trainerConfigs: TrainerConfigs = { .setPartyTemplates(trainerPartyTemplates.ONE_STRONG, trainerPartyTemplates.ONE_WEAK_ONE_STRONG, trainerPartyTemplates.ONE_AVG_ONE_STRONG) .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ Species.RHYHORN, Species.AIPOM, Species.MAKUHITA, Species.MAWILE, Species.NUMEL, Species.LILLIPUP, Species.SANDILE, /* Species.WOOLOO */ ], - [TrainerPoolTier.UNCOMMON]: [ Species.GIRAFARIG, Species.ZANGOOSE, Species.SEVIPER, Species.CUBCHOO, /* Species.PANCHAM, */ /*Species.SKIDDO*/ /* Species.MUDBRAY */ ], + [TrainerPoolTier.UNCOMMON]: [ Species.GIRAFARIG, Species.ZANGOOSE, Species.SEVIPER, Species.CUBCHOO, Species.PANCHAM, /*Species.SKIDDO*/ /* Species.MUDBRAY */ ], [TrainerPoolTier.RARE]: [ Species.TAUROS, Species.STANTLER, Species.DARUMAKA, Species.BOUFFALANT, Species.DEERLING, /*Species.IMPIDIMP, */ ], [TrainerPoolTier.SUPER_RARE]: [ /* Species.GALAR_DARUMAKA */ /* Species.TEDDIURSA */ ] }), @@ -580,18 +580,19 @@ export const trainerConfigs: TrainerConfigs = { .setPartyTemplates(trainerPartyTemplates.TWO_WEAK_ONE_AVG, trainerPartyTemplates.TWO_WEAK_ONE_AVG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_ONE_STRONG, trainerPartyTemplates.THREE_AVG, trainerPartyTemplates.TWO_AVG_ONE_STRONG) .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ Species.NIDORAN_F, Species.NIDORAN_M, Species.MACHOP, Species.MAKUHITA, Species.MEDITITE, Species.CROAGUNK, Species.TIMBURR ], - [TrainerPoolTier.UNCOMMON]: [ Species.MANKEY, Species.POLIWRATH, Species.TYROGUE, Species.BRELOOM, Species.SCRAGGY, Species.MIENFOO, /* Species.PANCHAM, */ /* Species.STUFFUL */ /* Species.CRABRAWLER, */ ], + [TrainerPoolTier.UNCOMMON]: [ Species.MANKEY, Species.POLIWRATH, Species.TYROGUE, Species.BRELOOM, Species.SCRAGGY, Species.MIENFOO, Species.PANCHAM, /* Species.STUFFUL */ /* Species.CRABRAWLER, */ ], [TrainerPoolTier.RARE]: [ Species.HERACROSS, Species.RIOLU, Species.THROH, Species.SAWK, /* Species.CLOBBOPUS, */ /* Species.PASSIMIAN, */ ], - [TrainerPoolTier.SUPER_RARE]: [ Species.INFERNAPE, Species.GALLADE, Species.HITMONTOP, /* Species.HAWLUCHA, */ /* Species.HAKAMO_O, */ ] + [TrainerPoolTier.SUPER_RARE]: [ Species.INFERNAPE, Species.GALLADE, Species.HITMONTOP, Species.HAWLUCHA, /* Species.HAKAMO_O, */ ], + [TrainerPoolTier.ULTRA_RARE]: [ Species.KUBFU ] }), [TrainerType.BREEDER]: new TrainerConfig(++t).setMoneyMultiplier(1.325).setEncounterBgm(TrainerType.POKEFAN).setHasGenders().setDouble() .setPartyTemplateFunc(scene => getWavePartyTemplate(scene, trainerPartyTemplates.FOUR_WEAKER, trainerPartyTemplates.FIVE_WEAKER, trainerPartyTemplates.SIX_WEAKER)), [TrainerType.CLERK]: new TrainerConfig(++t).setHasGenders().setEncounterBgm(TrainerType.CLERK) .setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.THREE_WEAK, trainerPartyTemplates.ONE_AVG, trainerPartyTemplates.TWO_AVG, trainerPartyTemplates.TWO_WEAK_ONE_AVG) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [ Species.MEOWTH, Species.PSYDUCK, Species.BUDEW, Species.PIDOVE, Species.CINCCINO, /* Species.LITLEO */ ], + [TrainerPoolTier.COMMON]: [ Species.MEOWTH, Species.PSYDUCK, Species.BUDEW, Species.PIDOVE, Species.CINCCINO, Species.LITLEO ], [TrainerPoolTier.UNCOMMON]: [ Species.JIGGLYPUFF, Species.MAGNEMITE, Species.MARILL, Species.COTTONEE, /* Species.SKIDDO */ ], - [TrainerPoolTier.RARE]: [ Species.BUIZEL, Species.SNEASEL, /* Species.KLEFKI, Species.INDEEDEE, */ ] + [TrainerPoolTier.RARE]: [ Species.BUIZEL, Species.SNEASEL, Species.KLEFKI, /* Species.INDEEDEE, */ ] }), [TrainerType.CYCLIST]: new TrainerConfig(++t).setMoneyMultiplier(1.3).setHasGenders().setEncounterBgm(TrainerType.CYCLIST).setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === Moves.QUICK_ATTACK)) .setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.ONE_AVG) @@ -664,10 +665,16 @@ export const trainerConfigs: TrainerConfigs = { .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ Species.ABRA, Species.DROWZEE, Species.RALTS, Species.SPOINK, Species.GOTHITA, Species.SOLOSIS, /* Species.BLIPBUG, Species.ESPURR, Species.HATTENA */ ], [TrainerPoolTier.UNCOMMON]: [ Species.MIME_JR, Species.EXEGGCUTE, Species.MEDITITE, Species.NATU, Species.EXEGGCUTE, Species.WOOBAT, /* Species.INKAY, Species.ORANGURU, */], - [TrainerPoolTier.RARE]: [ Species.ELGYEM, Species.SIGILYPH, Species.BALTOY, Species.GIRAFARIG, /* Species.MEOWSTIC */ ], + [TrainerPoolTier.RARE]: [ Species.ELGYEM, Species.SIGILYPH, Species.BALTOY, Species.GIRAFARIG, Species.MEOWSTIC ], [TrainerPoolTier.SUPER_RARE]: [ Species.BELDUM, Species.ESPEON /* Species.WYRDEER, */ ], }), - [TrainerType.RANGER]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.BACKPACKER).setHasGenders(), + [TrainerType.RANGER]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.BACKPACKER).setHasGenders() + .setSpeciesPools({ + [TrainerPoolTier.COMMON]: [ Species.PICHU, Species.GROWLITHE, Species.PONYTA, Species.ZIGZAGOON, Species.SEEDOT, Species.BIDOOF, Species.RIOLU, Species.SEWADDLE, Species.SKIDDO, /* Species.SALANDIT */ /* Species.YAMPER */ ], + [TrainerPoolTier.UNCOMMON]: [ Species.AZURILL, Species.TAUROS, Species.MAREEP, Species.FARFETCHD, Species.TEDDIURSA, Species.SHROOMISH, Species.ELECTRIKE, Species.BUDEW, Species.BUIZEL, /* Species.MUDBRAY, */ /* Species.STUFFUL */ ], + [TrainerPoolTier.RARE]: [ Species.EEVEE, Species.SCYTHER, Species.KANGASKHAN, Species.RALTS, Species.MUNCHLAX, Species.ZORUA, /* Species.PALDEA_TAUROS */ /* Species.TINKATINK */ /* Species.CYCLIZAR */ /* Species.FLAMIGO */ ], + [TrainerPoolTier.SUPER_RARE]: [ Species.LARVESTA ], + }), [TrainerType.RICH]: new TrainerConfig(++t).setMoneyMultiplier(5).setName('Gentleman').setHasGenders(), [TrainerType.RICH_KID]: new TrainerConfig(++t).setMoneyMultiplier(3.75).setName('Rich Boy').setHasGenders('Lady').setEncounterBgm(TrainerType.RICH), [TrainerType.ROUGHNECK]: new TrainerConfig(++t).setMoneyMultiplier(1.4).setEncounterBgm(TrainerType.ROUGHNECK).setSpeciesFilter(s => s.isOfType(Type.DARK)), diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index 5fa62a885..1afbad159 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -14,6 +14,7 @@ import { Unlockables } from '../system/unlockables'; import { GameMode } from '../game-mode'; import { StatusEffect, getStatusEffectDescriptor } from '../data/status-effect'; import { SpeciesFormKey } from '../data/pokemon-species'; +import BattleScene from '../battle-scene'; type Modifier = Modifiers.Modifier; @@ -107,7 +108,13 @@ export class PokemonModifierType extends ModifierType { export class PokemonHeldItemModifierType extends PokemonModifierType { constructor(name: string, description: string, newModifierFunc: NewModifierFunc, iconImage?: string, group?: string, soundName?: string) { - super(name, description, newModifierFunc, undefined, iconImage, group, soundName); + super(name, description, newModifierFunc, (pokemon: PlayerPokemon) => { + const dummyModifier = this.newModifier(pokemon); + const matchingModifier = pokemon.scene.findModifier(m => m instanceof Modifiers.PokemonHeldItemModifier && m.pokemonId === pokemon.id && m.matchType(dummyModifier)) as Modifiers.PokemonHeldItemModifier; + if (matchingModifier && matchingModifier.stackCount === matchingModifier.getMaxStackCount(pokemon.scene)) + return `${pokemon.name} has too many\nof this item!`; + return null; + }, iconImage, group, soundName); } newModifier(...args: any[]): Modifiers.PokemonHeldItemModifier { @@ -354,7 +361,7 @@ export class PokemonBaseStatBoosterModifierType extends PokemonHeldItemModifierT private stat: Stat; constructor(name: string, stat: Stat, _iconImage?: string) { - super(name, `Increases the holder's base ${getStatName(stat)} by 20%`, (_type, args) => new Modifiers.PokemonBaseStatModifier(this, (args[0] as Pokemon).id, this.stat)); + super(name, `Increases the holder's base ${getStatName(stat)} by 10%. The higher your IVs, the higher the stack limit.`, (_type, args) => new Modifiers.PokemonBaseStatModifier(this, (args[0] as Pokemon).id, this.stat)); this.stat = stat; } @@ -921,7 +928,7 @@ export function regenerateModifierPoolThresholds(party: Pokemon[], poolType: Mod pool[t].reduce((total: integer, modifierType: WeightedModifierType) => { const weightedModifierType = modifierType as WeightedModifierType; const existingModifiers = party[0].scene.findModifiers(m => (m.type.generatorId || m.type.id) === weightedModifierType.modifierType.id, player); - const weight = !existingModifiers.length || existingModifiers.filter(m => m.stackCount < m.getMaxStackCount()).length + const weight = !existingModifiers.length || existingModifiers.filter(m => m.stackCount < m.getMaxStackCount(party[0].scene, true)).length ? weightedModifierType.weight instanceof Function ? (weightedModifierType.weight as Function)(party) : weightedModifierType.weight as integer @@ -968,13 +975,13 @@ export function getPlayerModifierTypeOptionsForWave(waveIndex: integer, count: i return options; } -export function getEnemyBuffModifierForWave(tier: ModifierTier, enemyModifiers: Modifiers.PersistentModifier[]): Modifiers.EnemyPersistentModifier { +export function getEnemyBuffModifierForWave(tier: ModifierTier, enemyModifiers: Modifiers.PersistentModifier[], scene: BattleScene): Modifiers.EnemyPersistentModifier { const tierStackCount = tier === ModifierTier.ULTRA ? 10 : tier === ModifierTier.GREAT ? 5 : 1; const retryCount = 50; let candidate = getNewModifierTypeOption(null, ModifierPoolType.ENEMY_BUFF, tier); let r = 0; let matchingModifier: Modifiers.PersistentModifier; - while (++r < retryCount && (matchingModifier = enemyModifiers.find(m => m.type.id === candidate.type.id)) && matchingModifier.getMaxStackCount() < matchingModifier.stackCount + (r < 10 ? tierStackCount : 1)) + while (++r < retryCount && (matchingModifier = enemyModifiers.find(m => m.type.id === candidate.type.id)) && matchingModifier.getMaxStackCount(scene) < matchingModifier.stackCount + (r < 10 ? tierStackCount : 1)) candidate = getNewModifierTypeOption(null, ModifierPoolType.ENEMY_BUFF, tier); const modifier = candidate.type.newModifier() as Modifiers.EnemyPersistentModifier; diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 54ab7595f..3c8ddcd3e 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -111,10 +111,10 @@ export abstract class PersistentModifier extends Modifier { this.virtualStackCount = 0; } - add(modifiers: PersistentModifier[], virtual: boolean): boolean { + add(modifiers: PersistentModifier[], virtual: boolean, scene: BattleScene): boolean { for (let modifier of modifiers) { if (this.match(modifier)) - return modifier.incrementStack(this.stackCount, virtual); + return modifier.incrementStack(scene, this.stackCount, virtual); } if (virtual) { @@ -131,8 +131,8 @@ export abstract class PersistentModifier extends Modifier { return []; } - incrementStack(amount: integer, virtual: boolean): boolean { - if (this.getStackCount() + amount <= this.getMaxStackCount()) { + incrementStack(scene: BattleScene, amount: integer, virtual: boolean): boolean { + if (this.getStackCount() + amount <= this.getMaxStackCount(scene)) { if (!virtual) this.stackCount += amount; else @@ -147,9 +147,7 @@ export abstract class PersistentModifier extends Modifier { return this.stackCount + this.virtualStackCount; } - getMaxStackCount(): integer { - return 99; - } + abstract getMaxStackCount(scene: BattleScene, forThreshold?: boolean): integer isIconVisible(scene: BattleScene): boolean { return true; @@ -175,10 +173,10 @@ export abstract class PersistentModifier extends Modifier { } getIconStackText(scene: BattleScene, virtual?: boolean): Phaser.GameObjects.Text { - if (this.getMaxStackCount() === 1 || (virtual && !this.virtualStackCount)) + if (this.getMaxStackCount(scene) === 1 || (virtual && !this.virtualStackCount)) return null; - const isStackMax = this.getStackCount() >= this.getMaxStackCount(); + const isStackMax = this.getStackCount() >= this.getMaxStackCount(scene); const maxColor = '#f89890'; const maxStrokeColor = '#984038'; @@ -257,6 +255,10 @@ export abstract class LapsingPersistentModifier extends PersistentModifier { return container; } + + getMaxStackCount(scene: BattleScene, forThreshold?: boolean): number { + return 99; + } } export class DoubleBattleChanceBoosterModifier extends LapsingPersistentModifier { @@ -336,7 +338,7 @@ export class MapModifier extends PersistentModifier { return true; } - getMaxStackCount(): integer { + getMaxStackCount(scene: BattleScene): integer { return 1; } } @@ -354,7 +356,7 @@ export class MegaEvolutionAccessModifier extends PersistentModifier { return true; } - getMaxStackCount(): integer { + getMaxStackCount(scene: BattleScene): integer { return 1; } } @@ -425,6 +427,15 @@ export abstract class PokemonHeldItemModifier extends PersistentModifier { getPokemon(scene: BattleScene): Pokemon { return scene.getPokemonById(this.pokemonId); } + + getMaxStackCount(scene: BattleScene, forThreshold?: boolean): integer { + const pokemon = this.getPokemon(scene); + if (pokemon.isPlayer() && forThreshold) + return scene.getParty().map(p => this.getMaxHeldItemCount(p)).reduce((stackCount: integer, maxStackCount: integer) => Math.max(stackCount, maxStackCount), 0); + return this.getMaxHeldItemCount(pokemon); + } + + abstract getMaxHeldItemCount(pokemon: Pokemon): integer } export class PokemonBaseStatModifier extends PokemonHeldItemModifier { @@ -454,7 +465,7 @@ export class PokemonBaseStatModifier extends PokemonHeldItemModifier { } apply(args: any[]): boolean { - args[1][this.stat] = Math.min(Math.floor(args[1][this.stat] * (1 + this.getStackCount() * 0.2)), 999999); + args[1][this.stat] = Math.min(Math.floor(args[1][this.stat] * (1 + this.getStackCount() * 0.1)), 999999); return true; } @@ -463,8 +474,8 @@ export class PokemonBaseStatModifier extends PokemonHeldItemModifier { return false; } - getMaxStackCount(): integer { - return 10; + getMaxHeldItemCount(pokemon: Pokemon): integer { + return pokemon.ivs[this.stat]; } } @@ -503,6 +514,10 @@ export class AttackTypeBoosterModifier extends PokemonHeldItemModifier { return true; } + + getMaxHeldItemCount(pokemon: Pokemon): integer { + return 10; + } } export class SurviveDamageModifier extends PokemonHeldItemModifier { @@ -536,7 +551,7 @@ export class SurviveDamageModifier extends PokemonHeldItemModifier { return false; } - getMaxStackCount(): integer { + getMaxHeldItemCount(pokemon: Pokemon): integer { return 5; } } @@ -569,7 +584,7 @@ export class FlinchChanceModifier extends PokemonHeldItemModifier { return false; } - getMaxStackCount(): integer { + getMaxHeldItemCount(pokemon: Pokemon): integer { return 3; } } @@ -600,7 +615,7 @@ export class TurnHealModifier extends PokemonHeldItemModifier { return false; } - getMaxStackCount(): integer { + getMaxHeldItemCount(pokemon: Pokemon): integer { return 4; } } @@ -630,7 +645,7 @@ export class HitHealModifier extends PokemonHeldItemModifier { return true; } - getMaxStackCount(): integer { + getMaxHeldItemCount(pokemon: Pokemon): integer { return 4; } } @@ -657,6 +672,10 @@ export class LevelIncrementBoosterModifier extends PersistentModifier { return true; } + + getMaxStackCount(scene: BattleScene, forThreshold?: boolean): number { + return 99; + } } export class BerryModifier extends PokemonHeldItemModifier { @@ -698,6 +717,10 @@ export class BerryModifier extends PokemonHeldItemModifier { return true; } + + getMaxHeldItemCount(pokemon: Pokemon): integer { + return 10; + } } export class PreserveBerryModifier extends PersistentModifier { @@ -719,12 +742,12 @@ export class PreserveBerryModifier extends PersistentModifier { apply(args: any[]): boolean { if (!(args[0] as Utils.BooleanHolder).value) - (args[0] as Utils.BooleanHolder).value = Utils.randInt(this.getMaxStackCount()) < this.getStackCount(); + (args[0] as Utils.BooleanHolder).value = Utils.randInt(this.getMaxStackCount(null)) < this.getStackCount(); return true; } - getMaxStackCount(): integer { + getMaxStackCount(scene: BattleScene): integer { return 3; } } @@ -753,7 +776,7 @@ export class PokemonInstantReviveModifier extends PokemonHeldItemModifier { return true; } - getMaxStackCount(): integer { + getMaxHeldItemCount(pokemon: Pokemon): integer { return 1; } } @@ -991,7 +1014,7 @@ export class MultipleParticipantExpBonusModifier extends PersistentModifier { return new MultipleParticipantExpBonusModifier(this.type, this.stackCount); } - getMaxStackCount(): integer { + getMaxStackCount(scene: BattleScene): integer { return 5; } } @@ -1024,7 +1047,7 @@ export class HealingBoosterModifier extends PersistentModifier { return true; } - getMaxStackCount(): integer { + getMaxStackCount(scene: BattleScene): integer { return 4; } } @@ -1063,6 +1086,10 @@ export class ExpBoosterModifier extends PersistentModifier { getStackCount(): integer { return this.boostMultiplier < 1 ? super.getStackCount() : 10; } + + getMaxStackCount(scene: BattleScene, forThreshold?: boolean): integer { + return 99; + } } export class PokemonExpBoosterModifier extends PokemonHeldItemModifier { @@ -1098,6 +1125,10 @@ export class PokemonExpBoosterModifier extends PokemonHeldItemModifier { return true; } + + getMaxHeldItemCount(pokemon: Pokemon): integer { + return 99; + } } export class ExpShareModifier extends PersistentModifier { @@ -1117,7 +1148,7 @@ export class ExpShareModifier extends PersistentModifier { return true; } - getMaxStackCount(): integer { + getMaxStackCount(scene: BattleScene): integer { return 5; } } @@ -1139,7 +1170,7 @@ export class ExpBalanceModifier extends PersistentModifier { return true; } - getMaxStackCount(): integer { + getMaxStackCount(scene: BattleScene): integer { return 1; } } @@ -1163,7 +1194,7 @@ export class MoneyMultiplierModifier extends PersistentModifier { return true; } - getMaxStackCount(): integer { + getMaxStackCount(scene: BattleScene): integer { return 5; } } @@ -1192,7 +1223,7 @@ export class DamageMoneyRewardModifier extends PokemonHeldItemModifier { return true; } - getMaxStackCount(): integer { + getMaxHeldItemCount(pokemon: Pokemon): integer { return 5; } } @@ -1222,7 +1253,7 @@ export class MoneyInterestModifier extends PersistentModifier { return new MoneyInterestModifier(this.type, this.stackCount); } - getMaxStackCount(): integer { + getMaxStackCount(scene: BattleScene): integer { return 5; } } @@ -1246,7 +1277,7 @@ export class HiddenAbilityRateBoosterModifier extends PersistentModifier { return true; } - getMaxStackCount(): integer { + getMaxStackCount(scene: BattleScene): integer { return 4; } } @@ -1270,7 +1301,7 @@ export class ShinyRateBoosterModifier extends PersistentModifier { return true; } - getMaxStackCount(): integer { + getMaxStackCount(scene: BattleScene): integer { return 4; } } @@ -1292,7 +1323,7 @@ export class SwitchEffectTransferModifier extends PokemonHeldItemModifier { return true; } - getMaxStackCount(): integer { + getMaxHeldItemCount(pokemon: Pokemon): integer { return 1; } } @@ -1368,7 +1399,7 @@ export class TurnHeldItemTransferModifier extends HeldItemTransferModifier { return getPokemonMessage(targetPokemon, `'s ${item.name} was absorbed\nby ${pokemon.name}'s ${this.type.name}!`); } - getMaxStackCount(): integer { + getMaxHeldItemCount(pokemon: Pokemon): integer { return 3; } } @@ -1402,7 +1433,7 @@ export class ContactHeldItemTransferChanceModifier extends HeldItemTransferModif return getPokemonMessage(targetPokemon, `'s ${item.name} was snatched\nby ${pokemon.name}'s ${this.type.name}!`); } - getMaxStackCount(): integer { + getMaxHeldItemCount(pokemon: Pokemon): integer { return 5; } } @@ -1424,7 +1455,7 @@ export class IvScannerModifier extends PersistentModifier { return true; } - getMaxStackCount(): integer { + getMaxStackCount(scene: BattleScene): integer { return 5; } } @@ -1448,7 +1479,7 @@ export class ExtraModifierModifier extends PersistentModifier { return true; } - getMaxStackCount(): integer { + getMaxStackCount(scene: BattleScene): integer { return 3; } } @@ -1458,7 +1489,7 @@ export abstract class EnemyPersistentModifier extends PersistentModifier { super(type, stackCount); } - getMaxStackCount(): integer { + getMaxStackCount(scene: BattleScene): integer { return this.type.tier ? 1 : 5; } } @@ -1478,7 +1509,7 @@ abstract class EnemyDamageMultiplierModifier extends EnemyPersistentModifier { return true; } - getMaxStackCount(): integer { + getMaxStackCount(scene: BattleScene): integer { return 99; } } @@ -1553,7 +1584,7 @@ export class EnemyTurnHealModifier extends EnemyPersistentModifier { return false; } - getMaxStackCount(): integer { + getMaxStackCount(scene: BattleScene): integer { return 20; } } @@ -1663,7 +1694,7 @@ export class EnemyInstantReviveChanceModifier extends EnemyPersistentModifier { return true; } - getMaxStackCount(): integer { + getMaxStackCount(scene: BattleScene): integer { return 10; } } \ No newline at end of file diff --git a/src/system/modifier-data.ts b/src/system/modifier-data.ts index 772c61026..be845f407 100644 --- a/src/system/modifier-data.ts +++ b/src/system/modifier-data.ts @@ -41,8 +41,8 @@ export default class ModifierData { const ret = Reflect.construct(constructor, ([ type ] as any[]).concat(this.args).concat(this.stackCount)) as PersistentModifier; - if (ret.stackCount > ret.getMaxStackCount()) - ret.stackCount = ret.getMaxStackCount(); + if (ret.stackCount > ret.getMaxStackCount(scene)) + ret.stackCount = ret.getMaxStackCount(scene); return ret; } diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index 9f826a4ed..1f7572b8b 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -96,7 +96,7 @@ export default class PartyUiHandler extends MessageUiHandler { public static FilterItemMaxStacks = (pokemon: PlayerPokemon, modifier: PokemonHeldItemModifier) => { const matchingModifier = pokemon.scene.findModifier(m => m instanceof PokemonHeldItemModifier && (m as PokemonHeldItemModifier).matchType(modifier)) as PokemonHeldItemModifier; - if (matchingModifier && matchingModifier.stackCount === matchingModifier.getMaxStackCount()) + if (matchingModifier && matchingModifier.stackCount === matchingModifier.getMaxStackCount(pokemon.scene)) return `${pokemon.name} has too many\nof this item!`; return null; };