Add various money-related modifiers
Add various money-related modifiers; change grip claw to work with all attackspull/2/head
parent
0c3d246b11
commit
a113db5e3f
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 56 KiB |
Binary file not shown.
After Width: | Height: | Size: 293 B |
Binary file not shown.
After Width: | Height: | Size: 245 B |
Binary file not shown.
After Width: | Height: | Size: 518 B |
Binary file not shown.
After Width: | Height: | Size: 275 B |
|
@ -5,7 +5,7 @@ import { allMoves, applyMoveAttrs, BypassSleepAttr, ChargeAttr, applyFilteredMov
|
|||
import { Mode } from './ui/ui';
|
||||
import { Command } from "./ui/command-ui-handler";
|
||||
import { Stat } from "./data/pokemon-stat";
|
||||
import { BerryModifier, ContactHeldItemTransferChanceModifier, EnemyAttackStatusEffectChanceModifier, EnemyInstantReviveChanceModifier, EnemyPersistentModifier, EnemyStatusEffectHealChanceModifier, EnemyTurnHealModifier, ExpBalanceModifier, ExpBoosterModifier, ExpShareModifier, ExtraModifierModifier, FlinchChanceModifier, FusePokemonModifier, HealingBoosterModifier, HitHealModifier, LapsingPersistentModifier, MapModifier, Modifier, MultipleParticipantExpBonusModifier, PersistentModifier, PokemonExpBoosterModifier, PokemonHeldItemModifier, PokemonInstantReviveModifier, SwitchEffectTransferModifier, TempBattleStatBoosterModifier, TurnHealModifier, TurnHeldItemTransferModifier } from "./modifier/modifier";
|
||||
import { BerryModifier, AttackHeldItemTransferChanceModifier, EnemyAttackStatusEffectChanceModifier, EnemyInstantReviveChanceModifier, EnemyPersistentModifier, EnemyStatusEffectHealChanceModifier, EnemyTurnHealModifier, ExpBalanceModifier, ExpBoosterModifier, ExpShareModifier, ExtraModifierModifier, FlinchChanceModifier, FusePokemonModifier, HealingBoosterModifier, HitHealModifier, LapsingPersistentModifier, MapModifier, Modifier, MultipleParticipantExpBonusModifier, PersistentModifier, PokemonExpBoosterModifier, PokemonHeldItemModifier, PokemonInstantReviveModifier, SwitchEffectTransferModifier, TempBattleStatBoosterModifier, TurnHealModifier, TurnHeldItemTransferModifier, MoneyMultiplierModifier, MoneyInterestModifier } from "./modifier/modifier";
|
||||
import PartyUiHandler, { PartyOption, PartyUiMode } from "./ui/party-ui-handler";
|
||||
import { doPokeballBounceAnim, getPokeballAtlasKey, getPokeballCatchMultiplier, getPokeballTintColor, PokeballType } from "./data/pokeball";
|
||||
import { CommonAnim, CommonBattleAnim, MoveAnim, initMoveAnim, loadMoveAnimAssets } from "./data/battle-anims";
|
||||
|
@ -467,8 +467,10 @@ export class SelectBiomePhase extends BattlePhase {
|
|||
const currentBiome = this.scene.arena.biomeType;
|
||||
|
||||
const setNextBiome = (nextBiome: Biome) => {
|
||||
if (this.scene.currentBattle.waveIndex % 10 === 1)
|
||||
if (this.scene.currentBattle.waveIndex % 10 === 1) {
|
||||
this.scene.applyModifiers(MoneyInterestModifier, true, this.scene);
|
||||
this.scene.unshiftPhase(new PartyHealPhase(this.scene, false));
|
||||
}
|
||||
this.scene.unshiftPhase(new SwitchBiomePhase(this.scene, nextBiome));
|
||||
this.end();
|
||||
};
|
||||
|
@ -1588,8 +1590,8 @@ class MoveEffectPhase extends PokemonPhase {
|
|||
if (!user.isPlayer() && this.move instanceof AttackMove)
|
||||
user.scene.applyModifiers(EnemyAttackStatusEffectChanceModifier, false, target);
|
||||
}
|
||||
if (this.move.getMove().hasFlag(MoveFlags.MAKES_CONTACT))
|
||||
this.scene.applyModifiers(ContactHeldItemTransferChanceModifier, this.player, user, target.getFieldIndex());
|
||||
if (this.move instanceof AttackMove)
|
||||
this.scene.applyModifiers(AttackHeldItemTransferChanceModifier, this.player, user, target.getFieldIndex());
|
||||
})
|
||||
).then(() => resolve());
|
||||
});
|
||||
|
@ -2250,12 +2252,14 @@ export class MoneyRewardPhase extends BattlePhase {
|
|||
const waveIndex = this.scene.currentBattle.waveIndex;
|
||||
const waveSetIndex = Math.ceil(waveIndex / 10) - 1;
|
||||
const moneyValue = Math.pow((waveSetIndex + 1 + (0.75 + (((waveIndex - 1) % 10) + 1) / 10)) * 100, 1 + 0.005 * waveSetIndex) * this.moneyMultiplier;
|
||||
const moneyAmount = Math.floor(moneyValue / 10) * 10;
|
||||
const moneyAmount = new Utils.IntegerHolder(Math.floor(moneyValue / 10) * 10);
|
||||
|
||||
this.scene.money += moneyAmount;
|
||||
this.scene.applyModifiers(MoneyMultiplierModifier, true, moneyAmount);
|
||||
|
||||
this.scene.money += moneyAmount.value;
|
||||
this.scene.updateMoneyText();
|
||||
|
||||
this.scene.ui.showText(`You got ₽${moneyAmount.toLocaleString('en-US')}\nfor winning!`, null, () => this.end(), null, true);
|
||||
this.scene.ui.showText(`You got ₽${moneyAmount.value.toLocaleString('en-US')}\nfor winning!`, null, () => this.end(), null, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -549,7 +549,7 @@ class EvolutionItemModifierTypeGenerator extends ModifierTypeGenerator {
|
|||
|
||||
export class ContactHeldItemTransferChanceModifierType extends PokemonHeldItemModifierType {
|
||||
constructor(name: string, chancePercent: integer, iconImage?: string, group?: string, soundName?: string) {
|
||||
super(name, `On contact, there is a ${chancePercent}% chance the foe's held item will be stolen`, (type, args) => new Modifiers.ContactHeldItemTransferChanceModifier(type, (args[0] as Pokemon).id, chancePercent), iconImage, group, soundName);
|
||||
super(name, `Upon attacking, there is a ${chancePercent}% chance the foe's held item will be stolen`, (type, args) => new Modifiers.AttackHeldItemTransferChanceModifier(type, (args[0] as Pokemon).id, chancePercent), iconImage, group, soundName);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -680,6 +680,10 @@ export const modifierTypes = {
|
|||
LUCKY_EGG: () => new PokemonExpBoosterModifierType('Lucky Egg', 50),
|
||||
GOLDEN_EGG: () => new PokemonExpBoosterModifierType('Golden Egg', 150),
|
||||
|
||||
AMULET_COIN: () => new ModifierType('Amulet Coin', 'Increases money rewards by 20%', (type, _args) => new Modifiers.MoneyMultiplierModifier(type)),
|
||||
GOLDEN_PUNCH: () => new PokemonHeldItemModifierType('Golden Punch', 'Grants 20% of damage inflicted as money', (type, args) => new Modifiers.DamageMoneyRewardModifier(type, (args[0] as Pokemon).id)),
|
||||
COIN_CASE: () => new ModifierType('Coin Case', 'After every 10th battle, receive money equivalent to 20% of your money', (type, _args) => new Modifiers.MoneyInterestModifier(type)),
|
||||
|
||||
GRIP_CLAW: () => new ContactHeldItemTransferChanceModifierType('Grip Claw', 10),
|
||||
|
||||
HEALING_CHARM: () => new ModifierType('Healing Charm', 'Increases the effectiveness of HP restoring moves and items by 100% (excludes revives)',
|
||||
|
@ -791,6 +795,7 @@ const modifierPool = {
|
|||
new WeightedModifierType(modifierTypes.MAP, (party: Pokemon[]) => party[0].scene.gameMode === GameMode.CLASSIC ? 1 : 0),
|
||||
new WeightedModifierType(modifierTypes.TM_GREAT, 2),
|
||||
new WeightedModifierType(modifierTypes.EXP_SHARE, 1),
|
||||
new WeightedModifierType(modifierTypes.AMULET_COIN, 1),
|
||||
new WeightedModifierType(modifierTypes.BASE_STAT_BOOSTER, 3),
|
||||
new WeightedModifierType(modifierTypes.REVERSE_DNA_SPLICERS, (party: Pokemon[]) => party[0].scene.gameMode === GameMode.SPLICED_ENDLESS && party.filter(p => p.fusionSpecies).length ? 4 : 0),
|
||||
].map(m => { m.setTier(ModifierTier.GREAT); return m; }),
|
||||
|
@ -802,6 +807,7 @@ const modifierPool = {
|
|||
new WeightedModifierType(modifierTypes.MEMORY_MUSHROOM, (party: Pokemon[]) => party.filter(p => p.getLearnableLevelMoves().length).length ? 4 : 0),
|
||||
new WeightedModifierType(modifierTypes.REVIVER_SEED, 3),
|
||||
new WeightedModifierType(modifierTypes.CANDY_JAR, 3),
|
||||
new WeightedModifierType(modifierTypes.GOLDEN_PUNCH, 2),
|
||||
new WeightedModifierType(modifierTypes.GRIP_CLAW, 2),
|
||||
new WeightedModifierType(modifierTypes.HEALING_CHARM, 1),
|
||||
new WeightedModifierType(modifierTypes.BATON, 1),
|
||||
|
@ -814,6 +820,7 @@ const modifierPool = {
|
|||
new WeightedModifierType(modifierTypes.OVAL_CHARM, 2),
|
||||
new WeightedModifierType(modifierTypes.ABILITY_CHARM, 2),
|
||||
new WeightedModifierType(modifierTypes.EXP_BALANCE, 1),
|
||||
new WeightedModifierType(modifierTypes.COIN_CASE, 1),
|
||||
new WeightedModifierType(modifierTypes.REVERSE_DNA_SPLICERS, (party: Pokemon[]) => party[0].scene.gameMode !== GameMode.SPLICED_ENDLESS && party.filter(p => p.fusionSpecies).length ? 3 : 0),
|
||||
new WeightedModifierType(modifierTypes.DNA_SPLICERS, (party: Pokemon[]) => party[0].scene.gameMode === GameMode.SPLICED_ENDLESS && party.filter(p => !p.fusionSpecies).length > 1 ? 6 : 0),
|
||||
].map(m => { m.setTier(ModifierTier.ULTRA); return m; }),
|
||||
|
|
|
@ -464,7 +464,7 @@ export class AttackTypeBoosterModifier extends PokemonHeldItemModifier {
|
|||
this.boostMultiplier = boostPercent * 0.01;
|
||||
}
|
||||
|
||||
matchType(modifier: Modifier) {
|
||||
matchType(modifier: Modifier): boolean {
|
||||
if (modifier instanceof AttackTypeBoosterModifier) {
|
||||
const attackTypeBoosterModifier = modifier as AttackTypeBoosterModifier;
|
||||
return attackTypeBoosterModifier.moveType === this.moveType && attackTypeBoosterModifier.boostMultiplier === this.boostMultiplier;
|
||||
|
@ -495,7 +495,7 @@ export class SurviveDamageModifier extends PokemonHeldItemModifier {
|
|||
super(type, pokemonId, stackCount);
|
||||
}
|
||||
|
||||
matchType(modifier: Modifier) {
|
||||
matchType(modifier: Modifier): boolean {
|
||||
return modifier instanceof SurviveDamageModifier;
|
||||
}
|
||||
|
||||
|
@ -1093,14 +1093,14 @@ export class ExpShareModifier extends PersistentModifier {
|
|||
return modifier instanceof ExpShareModifier;
|
||||
}
|
||||
|
||||
apply(_args: any[]): boolean {
|
||||
return true;
|
||||
}
|
||||
|
||||
clone(): ExpShareModifier {
|
||||
return new ExpShareModifier(this.type, this.stackCount);
|
||||
}
|
||||
|
||||
apply(_args: any[]): boolean {
|
||||
return true;
|
||||
}
|
||||
|
||||
getMaxStackCount(): integer {
|
||||
return 5;
|
||||
}
|
||||
|
@ -1115,19 +1115,100 @@ export class ExpBalanceModifier extends PersistentModifier {
|
|||
return modifier instanceof ExpBalanceModifier;
|
||||
}
|
||||
|
||||
apply(_args: any[]): boolean {
|
||||
return true;
|
||||
}
|
||||
|
||||
clone(): ExpBalanceModifier {
|
||||
return new ExpBalanceModifier(this.type, this.stackCount);
|
||||
}
|
||||
|
||||
apply(_args: any[]): boolean {
|
||||
return true;
|
||||
}
|
||||
|
||||
getMaxStackCount(): integer {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
export class MoneyMultiplierModifier extends PersistentModifier {
|
||||
constructor(type: ModifierType, stackCount?: integer) {
|
||||
super(type, stackCount);
|
||||
}
|
||||
|
||||
match(modifier: Modifier): boolean {
|
||||
return modifier instanceof MoneyMultiplierModifier;
|
||||
}
|
||||
|
||||
clone(): MoneyMultiplierModifier {
|
||||
return new MoneyMultiplierModifier(this.type, this.stackCount);
|
||||
}
|
||||
|
||||
apply(args: any[]): boolean {
|
||||
(args[0] as Utils.IntegerHolder).value += Math.floor((args[0] as Utils.IntegerHolder).value * 0.2 * this.getStackCount());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
getMaxStackCount(): integer {
|
||||
return 5;
|
||||
}
|
||||
}
|
||||
|
||||
export class DamageMoneyRewardModifier extends PokemonHeldItemModifier {
|
||||
constructor(type: ModifierType, pokemonId: integer, stackCount?: integer) {
|
||||
super(type, pokemonId, stackCount);
|
||||
}
|
||||
|
||||
matchType(modifier: Modifier): boolean {
|
||||
return modifier instanceof DamageMoneyRewardModifier;
|
||||
}
|
||||
|
||||
clone(): DamageMoneyRewardModifier {
|
||||
return new DamageMoneyRewardModifier(this.type, this.pokemonId, this.stackCount);
|
||||
}
|
||||
|
||||
apply(args: any[]): boolean {
|
||||
const scene = (args[0] as Pokemon).scene;
|
||||
const moneyAmount = new Utils.IntegerHolder(Math.floor((args[1] as Utils.IntegerHolder).value * (0.2 * this.getStackCount())));
|
||||
scene.applyModifiers(MoneyMultiplierModifier, true, moneyAmount);
|
||||
scene.money += moneyAmount.value;
|
||||
scene.updateMoneyText();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
getMaxStackCount(): integer {
|
||||
return 5;
|
||||
}
|
||||
}
|
||||
|
||||
export class MoneyInterestModifier extends PersistentModifier {
|
||||
constructor(type: ModifierType, stackCount?: integer) {
|
||||
super(type, stackCount);
|
||||
}
|
||||
|
||||
match(modifier: Modifier): boolean {
|
||||
return modifier instanceof MoneyInterestModifier;
|
||||
}
|
||||
|
||||
apply(args: any[]): boolean {
|
||||
const scene = args[0] as BattleScene;
|
||||
const interestAmount = Math.floor(scene.money * 0.2 * this.getStackCount());
|
||||
scene.money += interestAmount;
|
||||
scene.updateMoneyText();
|
||||
|
||||
scene.queueMessage(`You received interest of ₽${interestAmount.toLocaleString('en-US')}\nfrom the ${this.type.name}!`, null, true);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
clone(): MoneyInterestModifier {
|
||||
return new MoneyInterestModifier(this.type, this.stackCount);
|
||||
}
|
||||
|
||||
getMaxStackCount(): integer {
|
||||
return 5;
|
||||
}
|
||||
}
|
||||
|
||||
export class HiddenAbilityRateBoosterModifier extends PersistentModifier {
|
||||
constructor(type: ModifierType, stackCount?: integer) {
|
||||
super(type, stackCount);
|
||||
|
@ -1274,7 +1355,7 @@ export class TurnHeldItemTransferModifier extends HeldItemTransferModifier {
|
|||
}
|
||||
}
|
||||
|
||||
export class ContactHeldItemTransferChanceModifier extends HeldItemTransferModifier {
|
||||
export class AttackHeldItemTransferChanceModifier extends HeldItemTransferModifier {
|
||||
private chance: number;
|
||||
|
||||
constructor(type: ModifierType, pokemonId: integer, chancePercent: number, stackCount?: integer) {
|
||||
|
@ -1284,11 +1365,11 @@ export class ContactHeldItemTransferChanceModifier extends HeldItemTransferModif
|
|||
}
|
||||
|
||||
matchType(modifier: Modifier): boolean {
|
||||
return modifier instanceof ContactHeldItemTransferChanceModifier;
|
||||
return modifier instanceof AttackHeldItemTransferChanceModifier;
|
||||
}
|
||||
|
||||
clone(): ContactHeldItemTransferChanceModifier {
|
||||
return new ContactHeldItemTransferChanceModifier(this.type, this.pokemonId, this.chance * 100, this.stackCount);
|
||||
clone(): AttackHeldItemTransferChanceModifier {
|
||||
return new AttackHeldItemTransferChanceModifier(this.type, this.pokemonId, this.chance * 100, this.stackCount);
|
||||
}
|
||||
|
||||
getArgs(): any[] {
|
||||
|
|
|
@ -7,7 +7,7 @@ import * as Utils from './utils';
|
|||
import { Type, TypeDamageMultiplier, getTypeDamageMultiplier } from './data/type';
|
||||
import { getLevelTotalExp } from './data/exp';
|
||||
import { Stat } from './data/pokemon-stat';
|
||||
import { AttackTypeBoosterModifier, EnemyDamageBoosterModifier, EnemyDamageReducerModifier, HiddenAbilityRateBoosterModifier, PokemonBaseStatModifier, PokemonHeldItemModifier, ShinyRateBoosterModifier, SurviveDamageModifier, TempBattleStatBoosterModifier } from './modifier/modifier';
|
||||
import { AttackTypeBoosterModifier, DamageMoneyRewardModifier, EnemyDamageBoosterModifier, EnemyDamageReducerModifier, HiddenAbilityRateBoosterModifier, PokemonBaseStatModifier, PokemonHeldItemModifier, ShinyRateBoosterModifier, SurviveDamageModifier, TempBattleStatBoosterModifier } from './modifier/modifier';
|
||||
import { PokeballType } from './data/pokeball';
|
||||
import { Gender } from './data/gender';
|
||||
import { initMoveAnim, loadMoveAnimAssets } from './data/battle-anims';
|
||||
|
@ -29,7 +29,7 @@ import { Mode } from './ui/ui';
|
|||
import PartyUiHandler, { PartyOption, PartyUiMode } from './ui/party-ui-handler';
|
||||
import SoundFade from 'phaser3-rex-plugins/plugins/soundfade';
|
||||
import { GameMode } from './game-mode';
|
||||
import { LevelMoves, pokemonFormLevelMoves } from './data/pokemon-level-moves';
|
||||
import { LevelMoves } from './data/pokemon-level-moves';
|
||||
|
||||
export enum FieldPosition {
|
||||
CENTER,
|
||||
|
@ -869,6 +869,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||
this.damage(damage.value);
|
||||
source.turnData.damageDealt += damage.value;
|
||||
this.turnData.attacksReceived.unshift({ move: move.id, result: result as DamageResult, damage: damage.value, critical: isCritical, sourceId: source.id });
|
||||
if (source.isPlayer() && !this.isPlayer())
|
||||
this.scene.applyModifiers(DamageMoneyRewardModifier, true, source, damage)
|
||||
}
|
||||
|
||||
if (source.turnData.hitsLeft === 1) {
|
||||
|
|
Loading…
Reference in New Issue