mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-07-01 14:02:18 +02:00
Added Shell Bell, Soul Dew
This commit is contained in:
parent
bce7472e3d
commit
ff24aae54b
@ -88,9 +88,7 @@ import {
|
|||||||
EnemyFusionChanceModifier,
|
EnemyFusionChanceModifier,
|
||||||
HiddenAbilityRateBoosterModifier,
|
HiddenAbilityRateBoosterModifier,
|
||||||
BaseStatModifier,
|
BaseStatModifier,
|
||||||
PokemonFriendshipBoosterModifier,
|
|
||||||
PokemonHeldItemModifier,
|
PokemonHeldItemModifier,
|
||||||
PokemonNatureWeightModifier,
|
|
||||||
ShinyRateBoosterModifier,
|
ShinyRateBoosterModifier,
|
||||||
TempStatStageBoosterModifier,
|
TempStatStageBoosterModifier,
|
||||||
TempCritBoosterModifier,
|
TempCritBoosterModifier,
|
||||||
@ -1611,7 +1609,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
} else {
|
} else {
|
||||||
statHolder.value += 5;
|
statHolder.value += 5;
|
||||||
const natureStatMultiplier = new NumberHolder(getNatureStatMultiplier(this.getNature(), s));
|
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) {
|
if (natureStatMultiplier.value !== 1) {
|
||||||
statHolder.value = Math.max(
|
statHolder.value = Math.max(
|
||||||
Math[natureStatMultiplier.value > 1 ? "ceil" : "floor"](statHolder.value * natureStatMultiplier.value),
|
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,
|
fusionStarterSpeciesId ? globalScene.gameData.starterData[fusionStarterSpeciesId] : null,
|
||||||
].filter(d => !!d);
|
].filter(d => !!d);
|
||||||
const amount = new NumberHolder(friendship);
|
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
|
const candyFriendshipMultiplier = globalScene.gameMode.isClassic
|
||||||
? timedEventManager.getClassicFriendshipMultiplier()
|
? timedEventManager.getClassicFriendshipMultiplier()
|
||||||
: 1;
|
: 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 EXP_BOOST_PARAMS, ExpBoosterHeldItem } from "./held-items/exp-booster";
|
||||||
import { type FIELD_EFFECT_PARAMS, FieldEffectHeldItem } from "./held-items/field-effect";
|
import { type FIELD_EFFECT_PARAMS, FieldEffectHeldItem } from "./held-items/field-effect";
|
||||||
import { type FLINCH_CHANCE_PARAMS, FlinchChanceHeldItem } from "./held-items/flinch-chance";
|
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 { type HIT_HEAL_PARAMS, HitHealHeldItem } from "./held-items/hit-heal";
|
||||||
import { InstantReviveHeldItem, type INSTANT_REVIVE_PARAMS } from "./held-items/instant-revive";
|
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 {
|
import {
|
||||||
ResetNegativeStatStageHeldItem,
|
ResetNegativeStatStageHeldItem,
|
||||||
type RESET_NEGATIVE_STAT_STAGE_PARAMS,
|
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.LUCKY_EGG] = new ExpBoosterHeldItem(HeldItemId.LUCKY_EGG, 99, 40);
|
||||||
allHeldItems[HeldItemId.GOLDEN_EGG] = new ExpBoosterHeldItem(HeldItemId.GOLDEN_EGG, 99, 100);
|
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.LEFTOVERS] = new TurnEndHealHeldItem(HeldItemId.LEFTOVERS, 4);
|
||||||
allHeldItems[HeldItemId.SHELL_BELL] = new HitHealHeldItem(HeldItemId.SHELL_BELL, 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.QUICK_CLAW] = new BypassSpeedChanceHeldItem(HeldItemId.QUICK_CLAW, 3);
|
||||||
allHeldItems[HeldItemId.KINGS_ROCK] = new FlinchChanceHeldItem(HeldItemId.KINGS_ROCK, 3, 10);
|
allHeldItems[HeldItemId.KINGS_ROCK] = new FlinchChanceHeldItem(HeldItemId.KINGS_ROCK, 3, 10);
|
||||||
allHeldItems[HeldItemId.MYSTICAL_ROCK] = new FieldEffectHeldItem(HeldItemId.MYSTICAL_ROCK, 2);
|
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.FLAME_ORB] = new TurnEndStatusHeldItem(HeldItemId.FLAME_ORB, 1, StatusEffect.BURN);
|
||||||
allHeldItems[HeldItemId.TOXIC_ORB] = new TurnEndStatusHeldItem(HeldItemId.TOXIC_ORB, 1, StatusEffect.TOXIC);
|
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.BYPASS_SPEED_CHANCE]: BYPASS_SPEED_CHANCE_PARAMS;
|
||||||
[ITEM_EFFECT.FLINCH_CHANCE]: FLINCH_CHANCE_PARAMS;
|
[ITEM_EFFECT.FLINCH_CHANCE]: FLINCH_CHANCE_PARAMS;
|
||||||
[ITEM_EFFECT.FIELD_EFFECT]: FIELD_EFFECT_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]) {
|
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,
|
BYPASS_SPEED_CHANCE: 13,
|
||||||
FLINCH_CHANCE: 14,
|
FLINCH_CHANCE: 14,
|
||||||
FIELD_EFFECT: 15,
|
FIELD_EFFECT: 15,
|
||||||
|
FRIENDSHIP_BOOSTER: 16,
|
||||||
|
NATURE_WEIGHT_BOOSTER: 17,
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
export type ITEM_EFFECT = (typeof ITEM_EFFECT)[keyof typeof ITEM_EFFECT];
|
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 ModifierOverride,
|
||||||
type ModifierType,
|
type ModifierType,
|
||||||
type PokemonBaseStatTotalModifierType,
|
type PokemonBaseStatTotalModifierType,
|
||||||
type PokemonExpBoosterModifierType,
|
|
||||||
type PokemonFriendshipBoosterModifierType,
|
|
||||||
type PokemonMoveAccuracyBoosterModifierType,
|
type PokemonMoveAccuracyBoosterModifierType,
|
||||||
type PokemonMultiHitModifierType,
|
type PokemonMultiHitModifierType,
|
||||||
type TerastallizeModifierType,
|
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 {
|
export class ExpShareModifier extends PersistentModifier {
|
||||||
match(modifier: Modifier): boolean {
|
match(modifier: Modifier): boolean {
|
||||||
return modifier instanceof ExpShareModifier;
|
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 {
|
export class PokemonMoveAccuracyBoosterModifier extends PokemonHeldItemModifier {
|
||||||
public override type: PokemonMoveAccuracyBoosterModifierType;
|
public override type: PokemonMoveAccuracyBoosterModifierType;
|
||||||
private accuracyAmount: number;
|
private accuracyAmount: number;
|
||||||
|
Loading…
Reference in New Issue
Block a user