mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-07-01 05:52:17 +02:00
Added Shell Bell, Soul Dew
This commit is contained in:
parent
bce7472e3d
commit
ff24aae54b
@ -88,9 +88,7 @@ import {
|
||||
EnemyFusionChanceModifier,
|
||||
HiddenAbilityRateBoosterModifier,
|
||||
BaseStatModifier,
|
||||
PokemonFriendshipBoosterModifier,
|
||||
PokemonHeldItemModifier,
|
||||
PokemonNatureWeightModifier,
|
||||
ShinyRateBoosterModifier,
|
||||
TempStatStageBoosterModifier,
|
||||
TempCritBoosterModifier,
|
||||
@ -1611,7 +1609,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
||||
} else {
|
||||
statHolder.value += 5;
|
||||
const natureStatMultiplier = new NumberHolder(getNatureStatMultiplier(this.getNature(), s));
|
||||
globalScene.applyModifier(PokemonNatureWeightModifier, this.isPlayer(), this, natureStatMultiplier);
|
||||
applyHeldItems(ITEM_EFFECT.NATURE_WEIGHT_BOOSTER, { pokemon: this, multiplier: natureStatMultiplier });
|
||||
if (natureStatMultiplier.value !== 1) {
|
||||
statHolder.value = Math.max(
|
||||
Math[natureStatMultiplier.value > 1 ? "ceil" : "floor"](statHolder.value * natureStatMultiplier.value),
|
||||
@ -5649,7 +5647,7 @@ export class PlayerPokemon extends Pokemon {
|
||||
fusionStarterSpeciesId ? globalScene.gameData.starterData[fusionStarterSpeciesId] : null,
|
||||
].filter(d => !!d);
|
||||
const amount = new NumberHolder(friendship);
|
||||
globalScene.applyModifier(PokemonFriendshipBoosterModifier, true, this, amount);
|
||||
applyHeldItems(ITEM_EFFECT.FRIENDSHIP_BOOSTER, { pokemon: this, friendship: amount });
|
||||
const candyFriendshipMultiplier = globalScene.gameMode.isClassic
|
||||
? timedEventManager.getClassicFriendshipMultiplier()
|
||||
: 1;
|
||||
|
@ -22,8 +22,10 @@ import { type CRIT_BOOST_PARAMS, CritBoostHeldItem, SpeciesCritBoostHeldItem } f
|
||||
import { type EXP_BOOST_PARAMS, ExpBoosterHeldItem } from "./held-items/exp-booster";
|
||||
import { type FIELD_EFFECT_PARAMS, FieldEffectHeldItem } from "./held-items/field-effect";
|
||||
import { type FLINCH_CHANCE_PARAMS, FlinchChanceHeldItem } from "./held-items/flinch-chance";
|
||||
import { type FRIENDSHIP_BOOST_PARAMS, FriendshipBoosterHeldItem } from "./held-items/friendship-booster";
|
||||
import { type HIT_HEAL_PARAMS, HitHealHeldItem } from "./held-items/hit-heal";
|
||||
import { InstantReviveHeldItem, type INSTANT_REVIVE_PARAMS } from "./held-items/instant-revive";
|
||||
import { type NATURE_WEIGHT_BOOST_PARAMS, NatureWeightBoosterHeldItem } from "./held-items/nature-weight-booster";
|
||||
import {
|
||||
ResetNegativeStatStageHeldItem,
|
||||
type RESET_NEGATIVE_STAT_STAGE_PARAMS,
|
||||
@ -103,6 +105,7 @@ export function initHeldItems() {
|
||||
|
||||
allHeldItems[HeldItemId.LUCKY_EGG] = new ExpBoosterHeldItem(HeldItemId.LUCKY_EGG, 99, 40);
|
||||
allHeldItems[HeldItemId.GOLDEN_EGG] = new ExpBoosterHeldItem(HeldItemId.GOLDEN_EGG, 99, 100);
|
||||
allHeldItems[HeldItemId.SOOTHE_BELL] = new FriendshipBoosterHeldItem(HeldItemId.SOOTHE_BELL, 3);
|
||||
|
||||
allHeldItems[HeldItemId.LEFTOVERS] = new TurnEndHealHeldItem(HeldItemId.LEFTOVERS, 4);
|
||||
allHeldItems[HeldItemId.SHELL_BELL] = new HitHealHeldItem(HeldItemId.SHELL_BELL, 4);
|
||||
@ -111,6 +114,7 @@ export function initHeldItems() {
|
||||
allHeldItems[HeldItemId.QUICK_CLAW] = new BypassSpeedChanceHeldItem(HeldItemId.QUICK_CLAW, 3);
|
||||
allHeldItems[HeldItemId.KINGS_ROCK] = new FlinchChanceHeldItem(HeldItemId.KINGS_ROCK, 3, 10);
|
||||
allHeldItems[HeldItemId.MYSTICAL_ROCK] = new FieldEffectHeldItem(HeldItemId.MYSTICAL_ROCK, 2);
|
||||
allHeldItems[HeldItemId.SOUL_DEW] = new NatureWeightBoosterHeldItem(HeldItemId.SOUL_DEW, 10);
|
||||
|
||||
allHeldItems[HeldItemId.FLAME_ORB] = new TurnEndStatusHeldItem(HeldItemId.FLAME_ORB, 1, StatusEffect.BURN);
|
||||
allHeldItems[HeldItemId.TOXIC_ORB] = new TurnEndStatusHeldItem(HeldItemId.TOXIC_ORB, 1, StatusEffect.TOXIC);
|
||||
@ -138,6 +142,8 @@ type APPLY_HELD_ITEMS_PARAMS = {
|
||||
[ITEM_EFFECT.BYPASS_SPEED_CHANCE]: BYPASS_SPEED_CHANCE_PARAMS;
|
||||
[ITEM_EFFECT.FLINCH_CHANCE]: FLINCH_CHANCE_PARAMS;
|
||||
[ITEM_EFFECT.FIELD_EFFECT]: FIELD_EFFECT_PARAMS;
|
||||
[ITEM_EFFECT.FRIENDSHIP_BOOSTER]: FRIENDSHIP_BOOST_PARAMS;
|
||||
[ITEM_EFFECT.NATURE_WEIGHT_BOOSTER]: NATURE_WEIGHT_BOOST_PARAMS;
|
||||
};
|
||||
|
||||
export function applyHeldItems<T extends ITEM_EFFECT>(effect: T, params: APPLY_HELD_ITEMS_PARAMS[T]) {
|
||||
|
@ -21,6 +21,8 @@ export const ITEM_EFFECT = {
|
||||
BYPASS_SPEED_CHANCE: 13,
|
||||
FLINCH_CHANCE: 14,
|
||||
FIELD_EFFECT: 15,
|
||||
FRIENDSHIP_BOOSTER: 16,
|
||||
NATURE_WEIGHT_BOOSTER: 17,
|
||||
} as const;
|
||||
|
||||
export type ITEM_EFFECT = (typeof ITEM_EFFECT)[keyof typeof ITEM_EFFECT];
|
||||
|
29
src/items/held-items/friendship-booster.ts
Normal file
29
src/items/held-items/friendship-booster.ts
Normal file
@ -0,0 +1,29 @@
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import type { NumberHolder } from "#app/utils/common";
|
||||
import { HeldItem, ITEM_EFFECT } from "../held-item";
|
||||
|
||||
export interface FRIENDSHIP_BOOST_PARAMS {
|
||||
/** The pokemon with the item */
|
||||
pokemon: Pokemon;
|
||||
/** The amount of exp to gain */
|
||||
friendship: NumberHolder;
|
||||
}
|
||||
|
||||
export class FriendshipBoosterHeldItem extends HeldItem {
|
||||
public effects: ITEM_EFFECT[] = [ITEM_EFFECT.FRIENDSHIP_BOOSTER];
|
||||
|
||||
/**
|
||||
* Applies {@linkcode PokemonFriendshipBoosterModifier}
|
||||
* @param _pokemon The {@linkcode Pokemon} to apply the friendship boost to
|
||||
* @param friendship {@linkcode NumberHolder} holding the friendship boost value
|
||||
* @returns always `true`
|
||||
*/
|
||||
apply(params: FRIENDSHIP_BOOST_PARAMS): boolean {
|
||||
const pokemon = params.pokemon;
|
||||
const friendship = params.friendship;
|
||||
const stackCount = pokemon.heldItemManager.getStack(this.type);
|
||||
friendship.value = Math.floor(friendship.value * (1 + 0.5 * stackCount));
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
32
src/items/held-items/nature-weight-booster.ts
Normal file
32
src/items/held-items/nature-weight-booster.ts
Normal file
@ -0,0 +1,32 @@
|
||||
import type Pokemon from "#app/field/pokemon";
|
||||
import type { NumberHolder } from "#app/utils/common";
|
||||
import { HeldItem, ITEM_EFFECT } from "../held-item";
|
||||
|
||||
export interface NATURE_WEIGHT_BOOST_PARAMS {
|
||||
/** The pokemon with the item */
|
||||
pokemon: Pokemon;
|
||||
/** The amount of exp to gain */
|
||||
multiplier: NumberHolder;
|
||||
}
|
||||
|
||||
export class NatureWeightBoosterHeldItem extends HeldItem {
|
||||
public effects: ITEM_EFFECT[] = [ITEM_EFFECT.NATURE_WEIGHT_BOOSTER];
|
||||
|
||||
/**
|
||||
* Applies {@linkcode PokemonNatureWeightModifier}
|
||||
* @param _pokemon The {@linkcode Pokemon} to apply the nature weight to
|
||||
* @param multiplier {@linkcode NumberHolder} holding the nature weight
|
||||
* @returns `true` if multiplier was applied
|
||||
*/
|
||||
apply(params: NATURE_WEIGHT_BOOST_PARAMS): boolean {
|
||||
const pokemon = params.pokemon;
|
||||
const multiplier = params.multiplier;
|
||||
const stackCount = pokemon.heldItemManager.getStack(this.type);
|
||||
if (multiplier.value !== 1) {
|
||||
multiplier.value += 0.1 * stackCount * (multiplier.value > 1 ? 1 : -1);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
@ -32,8 +32,6 @@ import {
|
||||
type ModifierOverride,
|
||||
type ModifierType,
|
||||
type PokemonBaseStatTotalModifierType,
|
||||
type PokemonExpBoosterModifierType,
|
||||
type PokemonFriendshipBoosterModifierType,
|
||||
type PokemonMoveAccuracyBoosterModifierType,
|
||||
type PokemonMultiHitModifierType,
|
||||
type TerastallizeModifierType,
|
||||
@ -1650,59 +1648,6 @@ export class ExpBoosterModifier extends PersistentModifier {
|
||||
}
|
||||
}
|
||||
|
||||
export class PokemonExpBoosterModifier extends PokemonHeldItemModifier {
|
||||
public override type: PokemonExpBoosterModifierType;
|
||||
|
||||
private boostMultiplier: number;
|
||||
|
||||
constructor(type: PokemonExpBoosterModifierType, pokemonId: number, boostPercent: number, stackCount?: number) {
|
||||
super(type, pokemonId, stackCount);
|
||||
this.boostMultiplier = boostPercent * 0.01;
|
||||
}
|
||||
|
||||
matchType(modifier: Modifier): boolean {
|
||||
if (modifier instanceof PokemonExpBoosterModifier) {
|
||||
const pokemonExpModifier = modifier as PokemonExpBoosterModifier;
|
||||
return pokemonExpModifier.boostMultiplier === this.boostMultiplier;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
clone(): PersistentModifier {
|
||||
return new PokemonExpBoosterModifier(this.type, this.pokemonId, this.boostMultiplier * 100, this.stackCount);
|
||||
}
|
||||
|
||||
getArgs(): any[] {
|
||||
return super.getArgs().concat(this.boostMultiplier * 100);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if {@linkcode PokemonExpBoosterModifier} should be applied
|
||||
* @param pokemon The {@linkcode Pokemon} to apply the exp boost to
|
||||
* @param boost {@linkcode NumberHolder} holding the exp boost value
|
||||
* @returns `true` if {@linkcode PokemonExpBoosterModifier} should be applied
|
||||
*/
|
||||
override shouldApply(pokemon: Pokemon, boost: NumberHolder): boolean {
|
||||
return super.shouldApply(pokemon, boost) && !!boost;
|
||||
}
|
||||
|
||||
/**
|
||||
* Applies {@linkcode PokemonExpBoosterModifier}
|
||||
* @param _pokemon The {@linkcode Pokemon} to apply the exp boost to
|
||||
* @param boost {@linkcode NumberHolder} holding the exp boost value
|
||||
* @returns always `true`
|
||||
*/
|
||||
override apply(_pokemon: Pokemon, boost: NumberHolder): boolean {
|
||||
boost.value = Math.floor(boost.value * (1 + this.getStackCount() * this.boostMultiplier));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
getMaxHeldItemCount(_pokemon: Pokemon): number {
|
||||
return 99;
|
||||
}
|
||||
}
|
||||
|
||||
export class ExpShareModifier extends PersistentModifier {
|
||||
match(modifier: Modifier): boolean {
|
||||
return modifier instanceof ExpShareModifier;
|
||||
@ -1747,63 +1692,6 @@ export class ExpBalanceModifier extends PersistentModifier {
|
||||
}
|
||||
}
|
||||
|
||||
export class PokemonFriendshipBoosterModifier extends PokemonHeldItemModifier {
|
||||
public override type: PokemonFriendshipBoosterModifierType;
|
||||
|
||||
matchType(modifier: Modifier): boolean {
|
||||
return modifier instanceof PokemonFriendshipBoosterModifier;
|
||||
}
|
||||
|
||||
clone(): PersistentModifier {
|
||||
return new PokemonFriendshipBoosterModifier(this.type, this.pokemonId, this.stackCount);
|
||||
}
|
||||
|
||||
/**
|
||||
* Applies {@linkcode PokemonFriendshipBoosterModifier}
|
||||
* @param _pokemon The {@linkcode Pokemon} to apply the friendship boost to
|
||||
* @param friendship {@linkcode NumberHolder} holding the friendship boost value
|
||||
* @returns always `true`
|
||||
*/
|
||||
override apply(_pokemon: Pokemon, friendship: NumberHolder): boolean {
|
||||
friendship.value = Math.floor(friendship.value * (1 + 0.5 * this.getStackCount()));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
getMaxHeldItemCount(_pokemon: Pokemon): number {
|
||||
return 3;
|
||||
}
|
||||
}
|
||||
|
||||
export class PokemonNatureWeightModifier extends PokemonHeldItemModifier {
|
||||
matchType(modifier: Modifier): boolean {
|
||||
return modifier instanceof PokemonNatureWeightModifier;
|
||||
}
|
||||
|
||||
clone(): PersistentModifier {
|
||||
return new PokemonNatureWeightModifier(this.type, this.pokemonId, this.stackCount);
|
||||
}
|
||||
|
||||
/**
|
||||
* Applies {@linkcode PokemonNatureWeightModifier}
|
||||
* @param _pokemon The {@linkcode Pokemon} to apply the nature weight to
|
||||
* @param multiplier {@linkcode NumberHolder} holding the nature weight
|
||||
* @returns `true` if multiplier was applied
|
||||
*/
|
||||
override apply(_pokemon: Pokemon, multiplier: NumberHolder): boolean {
|
||||
if (multiplier.value !== 1) {
|
||||
multiplier.value += 0.1 * this.getStackCount() * (multiplier.value > 1 ? 1 : -1);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
getMaxHeldItemCount(_pokemon: Pokemon): number {
|
||||
return 10;
|
||||
}
|
||||
}
|
||||
|
||||
export class PokemonMoveAccuracyBoosterModifier extends PokemonHeldItemModifier {
|
||||
public override type: PokemonMoveAccuracyBoosterModifierType;
|
||||
private accuracyAmount: number;
|
||||
|
Loading…
Reference in New Issue
Block a user