Added Baton and Golden Punch

This commit is contained in:
Wlowscha 2025-06-08 00:48:27 +02:00
parent 0b32cfb622
commit bac6aa1d3d
No known key found for this signature in database
GPG Key ID: 3C8F1AD330565D04
6 changed files with 64 additions and 52 deletions

View File

@ -17,9 +17,11 @@ import {
BaseStatBoosterHeldItem, BaseStatBoosterHeldItem,
permanentStatToHeldItem, permanentStatToHeldItem,
} from "./held-items/base-stat-booster"; } from "./held-items/base-stat-booster";
import { type BATON_PARAMS, BatonHeldItem } from "./held-items/baton";
import { type BERRY_PARAMS, BerryHeldItem, berryTypeToHeldItem } from "./held-items/berry"; import { type BERRY_PARAMS, BerryHeldItem, berryTypeToHeldItem } from "./held-items/berry";
import { type BYPASS_SPEED_CHANCE_PARAMS, BypassSpeedChanceHeldItem } from "./held-items/bypass-speed-chance"; import { type BYPASS_SPEED_CHANCE_PARAMS, BypassSpeedChanceHeldItem } from "./held-items/bypass-speed-chance";
import { type CRIT_BOOST_PARAMS, CritBoostHeldItem, SpeciesCritBoostHeldItem } from "./held-items/crit-booster"; import { type CRIT_BOOST_PARAMS, CritBoostHeldItem, SpeciesCritBoostHeldItem } from "./held-items/crit-booster";
import { type DAMAGE_MONEY_REWARD_PARAMS, DamageMoneyRewardHeldItem } from "./held-items/damage-money-reward";
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";
@ -119,6 +121,8 @@ export function initHeldItems() {
allHeldItems[HeldItemId.SOUL_DEW] = new NatureWeightBoosterHeldItem(HeldItemId.SOUL_DEW, 10); allHeldItems[HeldItemId.SOUL_DEW] = new NatureWeightBoosterHeldItem(HeldItemId.SOUL_DEW, 10);
allHeldItems[HeldItemId.WIDE_LENS] = new AccuracyBoosterHeldItem(HeldItemId.WIDE_LENS, 3, 5); allHeldItems[HeldItemId.WIDE_LENS] = new AccuracyBoosterHeldItem(HeldItemId.WIDE_LENS, 3, 5);
allHeldItems[HeldItemId.MULTI_LENS] = new MultiHitHeldItem(HeldItemId.MULTI_LENS, 2); allHeldItems[HeldItemId.MULTI_LENS] = new MultiHitHeldItem(HeldItemId.MULTI_LENS, 2);
allHeldItems[HeldItemId.GOLDEN_PUNCH] = new DamageMoneyRewardHeldItem(HeldItemId.GOLDEN_PUNCH, 5);
allHeldItems[HeldItemId.BATON] = new BatonHeldItem(HeldItemId.BATON, 1);
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);
@ -150,6 +154,8 @@ type APPLY_HELD_ITEMS_PARAMS = {
[ITEM_EFFECT.NATURE_WEIGHT_BOOSTER]: NATURE_WEIGHT_BOOST_PARAMS; [ITEM_EFFECT.NATURE_WEIGHT_BOOSTER]: NATURE_WEIGHT_BOOST_PARAMS;
[ITEM_EFFECT.ACCURACY_BOOSTER]: ACCURACY_BOOST_PARAMS; [ITEM_EFFECT.ACCURACY_BOOSTER]: ACCURACY_BOOST_PARAMS;
[ITEM_EFFECT.MULTI_HIT]: MULTI_HIT_PARAMS; [ITEM_EFFECT.MULTI_HIT]: MULTI_HIT_PARAMS;
[ITEM_EFFECT.DAMAGE_MONEY_REWARD]: DAMAGE_MONEY_REWARD_PARAMS;
[ITEM_EFFECT.BATON]: BATON_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]) {

View File

@ -25,6 +25,8 @@ export const ITEM_EFFECT = {
NATURE_WEIGHT_BOOSTER: 17, NATURE_WEIGHT_BOOSTER: 17,
ACCURACY_BOOSTER: 18, ACCURACY_BOOSTER: 18,
MULTI_HIT: 19, MULTI_HIT: 19,
DAMAGE_MONEY_REWARD: 20,
BATON: 21,
} 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];

View File

@ -0,0 +1,22 @@
import type Pokemon from "#app/field/pokemon";
import type { NumberHolder } from "#app/utils/common";
import { HeldItem, ITEM_EFFECT } from "../held-item";
export interface BATON_PARAMS {
/** The pokemon with the item */
pokemon: Pokemon;
/** The amount of exp to gain */
expAmount: NumberHolder;
}
export class BatonHeldItem extends HeldItem {
public effects: ITEM_EFFECT[] = [ITEM_EFFECT.BATON];
/**
* Applies {@linkcode SwitchEffectTransferModifier}
* @returns always `true`
*/
apply(): boolean {
return true;
}
}

View File

@ -0,0 +1,33 @@
import type Pokemon from "#app/field/pokemon";
import { globalScene } from "#app/global-scene";
import { MoneyMultiplierModifier } from "#app/modifier/modifier";
import { NumberHolder } from "#app/utils/common";
import { HeldItem, ITEM_EFFECT } from "../held-item";
export interface DAMAGE_MONEY_REWARD_PARAMS {
/** The pokemon with the item */
pokemon: Pokemon;
/** The amount of exp to gain */
damage: number;
}
export class DamageMoneyRewardHeldItem extends HeldItem {
public effects: ITEM_EFFECT[] = [ITEM_EFFECT.DAMAGE_MONEY_REWARD];
/**
* Applies {@linkcode DamageMoneyRewardModifier}
* @param pokemon The {@linkcode Pokemon} attacking
* @param multiplier {@linkcode NumberHolder} holding the multiplier value
* @returns always `true`
*/
apply(params: DAMAGE_MONEY_REWARD_PARAMS): boolean {
const pokemon = params.pokemon;
const damage = params.damage;
const stackCount = pokemon.heldItemManager.getStack(this.type);
const moneyAmount = new NumberHolder(Math.floor(damage * (0.5 * stackCount)));
globalScene.applyModifiers(MoneyMultiplierModifier, true, moneyAmount);
globalScene.addMoney(moneyAmount.value);
return true;
}
}

View File

@ -1812,34 +1812,6 @@ export class MoneyMultiplierModifier extends PersistentModifier {
} }
} }
export class DamageMoneyRewardModifier extends PokemonHeldItemModifier {
matchType(modifier: Modifier): boolean {
return modifier instanceof DamageMoneyRewardModifier;
}
clone(): DamageMoneyRewardModifier {
return new DamageMoneyRewardModifier(this.type, this.pokemonId, this.stackCount);
}
/**
* Applies {@linkcode DamageMoneyRewardModifier}
* @param pokemon The {@linkcode Pokemon} attacking
* @param multiplier {@linkcode NumberHolder} holding the multiplier value
* @returns always `true`
*/
override apply(_pokemon: Pokemon, multiplier: NumberHolder): boolean {
const moneyAmount = new NumberHolder(Math.floor(multiplier.value * (0.5 * this.getStackCount())));
globalScene.applyModifiers(MoneyMultiplierModifier, true, moneyAmount);
globalScene.addMoney(moneyAmount.value);
return true;
}
getMaxHeldItemCount(_pokemon: Pokemon): number {
return 5;
}
}
export class MoneyInterestModifier extends PersistentModifier { export class MoneyInterestModifier extends PersistentModifier {
match(modifier: Modifier): boolean { match(modifier: Modifier): boolean {
return modifier instanceof MoneyInterestModifier; return modifier instanceof MoneyInterestModifier;
@ -2035,28 +2007,6 @@ export class BoostBugSpawnModifier extends PersistentModifier {
} }
} }
export class SwitchEffectTransferModifier extends PokemonHeldItemModifier {
matchType(modifier: Modifier): boolean {
return modifier instanceof SwitchEffectTransferModifier;
}
clone(): SwitchEffectTransferModifier {
return new SwitchEffectTransferModifier(this.type, this.pokemonId, this.stackCount);
}
/**
* Applies {@linkcode SwitchEffectTransferModifier}
* @returns always `true`
*/
override apply(): boolean {
return true;
}
getMaxHeldItemCount(_pokemon: Pokemon): number {
return 1;
}
}
/** /**
* Abstract class for held items that steal other Pokemon's items. * Abstract class for held items that steal other Pokemon's items.
* @see {@linkcode TurnHeldItemTransferModifier} * @see {@linkcode TurnHeldItemTransferModifier}

View File

@ -54,7 +54,6 @@ import { HitResult, MoveResult } from "#app/field/pokemon";
import { getPokemonNameWithAffix } from "#app/messages"; import { getPokemonNameWithAffix } from "#app/messages";
import { import {
ContactHeldItemTransferChanceModifier, ContactHeldItemTransferChanceModifier,
DamageMoneyRewardModifier,
EnemyAttackStatusEffectChanceModifier, EnemyAttackStatusEffectChanceModifier,
EnemyEndureChanceModifier, EnemyEndureChanceModifier,
} from "#app/modifier/modifier"; } from "#app/modifier/modifier";
@ -887,7 +886,7 @@ export class MoveEffectPhase extends PokemonPhase {
}); });
if (user.isPlayer() && !target.isPlayer()) { if (user.isPlayer() && !target.isPlayer()) {
globalScene.applyModifiers(DamageMoneyRewardModifier, true, user, new NumberHolder(damage)); applyHeldItems(ITEM_EFFECT.DAMAGE_MONEY_REWARD, { pokemon: user, damage: damage });
} }
return result; return result;