Add lure items
parent
9faa489f19
commit
7e0974a6c2
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 50 KiB |
Binary file not shown.
After Width: | Height: | Size: 588 B |
Binary file not shown.
After Width: | Height: | Size: 596 B |
Binary file not shown.
After Width: | Height: | Size: 582 B |
|
@ -5,7 +5,7 @@ import { allMoves, applyMoveAttrs, BypassSleepAttr, ChargeAttr, applyFilteredMov
|
||||||
import { Mode } from './ui/ui';
|
import { Mode } from './ui/ui';
|
||||||
import { Command } from "./ui/command-ui-handler";
|
import { Command } from "./ui/command-ui-handler";
|
||||||
import { Stat } from "./data/pokemon-stat";
|
import { Stat } from "./data/pokemon-stat";
|
||||||
import { BerryModifier, ContactHeldItemTransferChanceModifier, ExpBalanceModifier, ExpBoosterModifier, ExpShareModifier, ExtraModifierModifier, FlinchChanceModifier, HealingBoosterModifier, HitHealModifier, MapModifier, MultipleParticipantExpBonusModifier, PokemonExpBoosterModifier, PokemonHeldItemModifier, SwitchEffectTransferModifier, TempBattleStatBoosterModifier, TurnHealModifier, TurnHeldItemTransferModifier } from "./modifier/modifier";
|
import { BerryModifier, ContactHeldItemTransferChanceModifier, ExpBalanceModifier, ExpBoosterModifier, ExpShareModifier, ExtraModifierModifier, FlinchChanceModifier, HealingBoosterModifier, HitHealModifier, LapsingPersistentModifier, MapModifier, MultipleParticipantExpBonusModifier, PokemonExpBoosterModifier, PokemonHeldItemModifier, SwitchEffectTransferModifier, TempBattleStatBoosterModifier, TurnHealModifier, TurnHeldItemTransferModifier } from "./modifier/modifier";
|
||||||
import PartyUiHandler, { PartyOption, PartyUiMode } from "./ui/party-ui-handler";
|
import PartyUiHandler, { PartyOption, PartyUiMode } from "./ui/party-ui-handler";
|
||||||
import { doPokeballBounceAnim, getPokeballAtlasKey, getPokeballCatchMultiplier, getPokeballName, getPokeballTintColor, PokeballType } from "./data/pokeball";
|
import { doPokeballBounceAnim, getPokeballAtlasKey, getPokeballCatchMultiplier, getPokeballName, getPokeballTintColor, PokeballType } from "./data/pokeball";
|
||||||
import { CommonAnim, CommonBattleAnim, MoveAnim, initMoveAnim, loadMoveAnimAssets } from "./data/battle-anims";
|
import { CommonAnim, CommonBattleAnim, MoveAnim, initMoveAnim, loadMoveAnimAssets } from "./data/battle-anims";
|
||||||
|
@ -1070,8 +1070,8 @@ export class BattleEndPhase extends BattlePhase {
|
||||||
|
|
||||||
this.scene.clearEnemyModifiers();
|
this.scene.clearEnemyModifiers();
|
||||||
|
|
||||||
const tempBattleStatBoosterModifiers = this.scene.getModifiers(TempBattleStatBoosterModifier) as TempBattleStatBoosterModifier[];
|
const lapsingModifiers = this.scene.findModifiers(m => m instanceof LapsingPersistentModifier) as LapsingPersistentModifier[];
|
||||||
for (let m of tempBattleStatBoosterModifiers) {
|
for (let m of lapsingModifiers) {
|
||||||
if (!m.lapse())
|
if (!m.lapse())
|
||||||
this.scene.removeModifier(m);
|
this.scene.removeModifier(m);
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@ import { EncounterPhase, SummonPhase, NextEncounterPhase, NewBiomeEncounterPhase
|
||||||
import Pokemon, { PlayerPokemon, EnemyPokemon } from './pokemon';
|
import Pokemon, { PlayerPokemon, EnemyPokemon } from './pokemon';
|
||||||
import PokemonSpecies, { allSpecies, getPokemonSpecies, initSpecies } from './data/pokemon-species';
|
import PokemonSpecies, { allSpecies, getPokemonSpecies, initSpecies } from './data/pokemon-species';
|
||||||
import * as Utils from './utils';
|
import * as Utils from './utils';
|
||||||
import { Modifier, ModifierBar, ConsumablePokemonModifier, ConsumableModifier, PokemonHpRestoreModifier, HealingBoosterModifier, PersistentModifier, PokemonHeldItemModifier, ModifierPredicate } from './modifier/modifier';
|
import { Modifier, ModifierBar, ConsumablePokemonModifier, ConsumableModifier, PokemonHpRestoreModifier, HealingBoosterModifier, PersistentModifier, PokemonHeldItemModifier, ModifierPredicate, DoubleBattleChanceBoosterModifier } from './modifier/modifier';
|
||||||
import { PokeballType } from './data/pokeball';
|
import { PokeballType } from './data/pokeball';
|
||||||
import { Species } from './data/species';
|
import { Species } from './data/species';
|
||||||
import { initAutoPlay } from './system/auto-play';
|
import { initAutoPlay } from './system/auto-play';
|
||||||
|
@ -520,6 +520,7 @@ export default class BattleScene extends Phaser.Scene {
|
||||||
|
|
||||||
if (double === undefined) {
|
if (double === undefined) {
|
||||||
const doubleChance = new Utils.IntegerHolder(newWaveIndex % 10 === 0 ? 32 : 8);
|
const doubleChance = new Utils.IntegerHolder(newWaveIndex % 10 === 0 ? 32 : 8);
|
||||||
|
this.applyModifiers(DoubleBattleChanceBoosterModifier, true, doubleChance);
|
||||||
this.getPlayerField().forEach(p => applyAbAttrs(DoubleBattleChanceAbAttr, p, null, doubleChance));
|
this.getPlayerField().forEach(p => applyAbAttrs(DoubleBattleChanceAbAttr, p, null, doubleChance));
|
||||||
newDouble = !Utils.randInt(doubleChance.value);
|
newDouble = !Utils.randInt(doubleChance.value);
|
||||||
} else
|
} else
|
||||||
|
|
|
@ -197,6 +197,17 @@ export class PokemonAllMovePpRestoreModifierType extends PokemonModifierType {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class DoubleBattleChanceBoosterModifierType extends ModifierType {
|
||||||
|
public battleCount: integer;
|
||||||
|
|
||||||
|
constructor(name: string, battleCount: integer) {
|
||||||
|
super(name, `Doubles the chance of an encounter being a double battle for ${battleCount} battles`, (_type, _args) => new Modifiers.DoubleBattleChanceBoosterModifier(this, this.battleCount),
|
||||||
|
null, 'lure');
|
||||||
|
|
||||||
|
this.battleCount = battleCount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export class TempBattleStatBoosterModifierType extends ModifierType implements GeneratedPersistentModifierType {
|
export class TempBattleStatBoosterModifierType extends ModifierType implements GeneratedPersistentModifierType {
|
||||||
public tempBattleStat: TempBattleStat;
|
public tempBattleStat: TempBattleStat;
|
||||||
|
|
||||||
|
@ -556,6 +567,10 @@ const modifierTypes = {
|
||||||
ELIXIR: () => new PokemonAllMovePpRestoreModifierType('ELIXIR', 10),
|
ELIXIR: () => new PokemonAllMovePpRestoreModifierType('ELIXIR', 10),
|
||||||
MAX_ELIXIR: () => new PokemonAllMovePpRestoreModifierType('MAX ELIXIR', -1),
|
MAX_ELIXIR: () => new PokemonAllMovePpRestoreModifierType('MAX ELIXIR', -1),
|
||||||
|
|
||||||
|
LURE: () => new DoubleBattleChanceBoosterModifierType('LURE', 5),
|
||||||
|
SUPER_LURE: () => new DoubleBattleChanceBoosterModifierType('SUPER LURE', 10),
|
||||||
|
MAX_LURE: () => new DoubleBattleChanceBoosterModifierType('LURE', 25),
|
||||||
|
|
||||||
TEMP_STAT_BOOSTER: () => new ModifierTypeGenerator((party: Pokemon[], pregenArgs?: any[]) => {
|
TEMP_STAT_BOOSTER: () => new ModifierTypeGenerator((party: Pokemon[], pregenArgs?: any[]) => {
|
||||||
if (pregenArgs)
|
if (pregenArgs)
|
||||||
return new TempBattleStatBoosterModifierType(pregenArgs[0] as TempBattleStat);
|
return new TempBattleStatBoosterModifierType(pregenArgs[0] as TempBattleStat);
|
||||||
|
@ -658,6 +673,7 @@ const modifierPool = {
|
||||||
const thresholdPartyMemberCount = Math.min(party.filter(p => p.hp && p.getMoveset().filter(m => (m.getMove().pp - m.ppUsed) <= 5).length).length, 3);
|
const thresholdPartyMemberCount = Math.min(party.filter(p => p.hp && p.getMoveset().filter(m => (m.getMove().pp - m.ppUsed) <= 5).length).length, 3);
|
||||||
return thresholdPartyMemberCount;
|
return thresholdPartyMemberCount;
|
||||||
}),
|
}),
|
||||||
|
new WeightedModifierType(modifierTypes.LURE, 2),
|
||||||
new WeightedModifierType(modifierTypes.TEMP_STAT_BOOSTER, 4),
|
new WeightedModifierType(modifierTypes.TEMP_STAT_BOOSTER, 4),
|
||||||
new WeightedModifierType(modifierTypes.BERRY, 2),
|
new WeightedModifierType(modifierTypes.BERRY, 2),
|
||||||
new WeightedModifierType(modifierTypes.TM_COMMON, 1)
|
new WeightedModifierType(modifierTypes.TM_COMMON, 1)
|
||||||
|
@ -695,6 +711,7 @@ const modifierPool = {
|
||||||
const thresholdPartyMemberCount = Math.min(party.filter(p => p.hp && p.getMoveset().filter(m => (m.getMove().pp - m.ppUsed) <= 5).length).length, 3);
|
const thresholdPartyMemberCount = Math.min(party.filter(p => p.hp && p.getMoveset().filter(m => (m.getMove().pp - m.ppUsed) <= 5).length).length, 3);
|
||||||
return thresholdPartyMemberCount;
|
return thresholdPartyMemberCount;
|
||||||
}),
|
}),
|
||||||
|
new WeightedModifierType(modifierTypes.SUPER_LURE, 4),
|
||||||
new WeightedModifierType(modifierTypes.MAP, (party: Pokemon[]) => party[0].scene.gameMode === GameMode.CLASSIC ? 1 : 0),
|
new WeightedModifierType(modifierTypes.MAP, (party: Pokemon[]) => party[0].scene.gameMode === GameMode.CLASSIC ? 1 : 0),
|
||||||
new WeightedModifierType(modifierTypes.TM_GREAT, 2),
|
new WeightedModifierType(modifierTypes.TM_GREAT, 2),
|
||||||
new WeightedModifierType(modifierTypes.EXP_SHARE, 1),
|
new WeightedModifierType(modifierTypes.EXP_SHARE, 1),
|
||||||
|
@ -703,6 +720,7 @@ const modifierPool = {
|
||||||
[ModifierTier.ULTRA]: [
|
[ModifierTier.ULTRA]: [
|
||||||
new WeightedModifierType(modifierTypes.ULTRA_BALL, 8),
|
new WeightedModifierType(modifierTypes.ULTRA_BALL, 8),
|
||||||
new WeightedModifierType(modifierTypes.EVOLUTION_ITEM, 12),
|
new WeightedModifierType(modifierTypes.EVOLUTION_ITEM, 12),
|
||||||
|
new WeightedModifierType(modifierTypes.MAX_LURE, 4),
|
||||||
new WeightedModifierType(modifierTypes.ATTACK_TYPE_BOOSTER, 4),
|
new WeightedModifierType(modifierTypes.ATTACK_TYPE_BOOSTER, 4),
|
||||||
new WeightedModifierType(modifierTypes.TM_ULTRA, 5),
|
new WeightedModifierType(modifierTypes.TM_ULTRA, 5),
|
||||||
new WeightedModifierType(modifierTypes.CANDY_JAR, 3),
|
new WeightedModifierType(modifierTypes.CANDY_JAR, 3),
|
||||||
|
|
|
@ -194,35 +194,13 @@ export class AddPokeballModifier extends ConsumableModifier {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class TempBattleStatBoosterModifier extends PersistentModifier {
|
export abstract class LapsingPersistentModifier extends PersistentModifier {
|
||||||
private tempBattleStat: TempBattleStat;
|
protected battlesLeft: integer;
|
||||||
private battlesLeft: integer;
|
|
||||||
|
|
||||||
constructor(type: ModifierTypes.TempBattleStatBoosterModifierType, tempBattleStat: TempBattleStat, battlesLeft?: integer, stackCount?: integer) {
|
constructor(type: ModifierTypes.ModifierType, battlesLeft?: integer, stackCount?: integer) {
|
||||||
super(type, stackCount);
|
super(type, stackCount);
|
||||||
|
|
||||||
this.tempBattleStat = tempBattleStat;
|
this.battlesLeft = battlesLeft;
|
||||||
this.battlesLeft = battlesLeft || 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
clone(): TempBattleStatBoosterModifier {
|
|
||||||
return new TempBattleStatBoosterModifier(this.type as ModifierTypes.TempBattleStatBoosterModifierType, this.tempBattleStat, this.stackCount);
|
|
||||||
}
|
|
||||||
|
|
||||||
getArgs(): any[] {
|
|
||||||
return [ this.tempBattleStat, this.battlesLeft ];
|
|
||||||
}
|
|
||||||
|
|
||||||
apply(args: any[]): boolean {
|
|
||||||
const tempBattleStat = args[0] as TempBattleStat;
|
|
||||||
|
|
||||||
if (tempBattleStat === this.tempBattleStat) {
|
|
||||||
const statLevel = args[1] as Utils.IntegerHolder;
|
|
||||||
statLevel.value = Math.min(statLevel.value + 1, 6);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
lapse(): boolean {
|
lapse(): boolean {
|
||||||
|
@ -242,6 +220,57 @@ export class TempBattleStatBoosterModifier extends PersistentModifier {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class DoubleBattleChanceBoosterModifier extends LapsingPersistentModifier {
|
||||||
|
constructor(type: ModifierTypes.DoubleBattleChanceBoosterModifierType, battlesLeft: integer, stackCount?: integer) {
|
||||||
|
super(type, battlesLeft, stackCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
clone(): TempBattleStatBoosterModifier {
|
||||||
|
return new TempBattleStatBoosterModifier(this.type as ModifierTypes.TempBattleStatBoosterModifierType, this.battlesLeft, this.stackCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
getArgs(): any[] {
|
||||||
|
return [ this.battlesLeft ];
|
||||||
|
}
|
||||||
|
|
||||||
|
apply(args: any[]): boolean {
|
||||||
|
const doubleBattleChance = args[0] as Utils.NumberHolder;
|
||||||
|
doubleBattleChance.value = Math.ceil(doubleBattleChance.value / 2);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class TempBattleStatBoosterModifier extends LapsingPersistentModifier {
|
||||||
|
private tempBattleStat: TempBattleStat;
|
||||||
|
|
||||||
|
constructor(type: ModifierTypes.TempBattleStatBoosterModifierType, tempBattleStat: TempBattleStat, battlesLeft?: integer, stackCount?: integer) {
|
||||||
|
super(type, battlesLeft || 5, stackCount);
|
||||||
|
|
||||||
|
this.tempBattleStat = tempBattleStat;
|
||||||
|
}
|
||||||
|
|
||||||
|
clone(): TempBattleStatBoosterModifier {
|
||||||
|
return new TempBattleStatBoosterModifier(this.type as ModifierTypes.TempBattleStatBoosterModifierType, this.tempBattleStat, this.battlesLeft, this.stackCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
getArgs(): any[] {
|
||||||
|
return [ this.tempBattleStat, this.battlesLeft ];
|
||||||
|
}
|
||||||
|
|
||||||
|
apply(args: any[]): boolean {
|
||||||
|
const tempBattleStat = args[0] as TempBattleStat;
|
||||||
|
|
||||||
|
if (tempBattleStat === this.tempBattleStat) {
|
||||||
|
const statLevel = args[1] as Utils.IntegerHolder;
|
||||||
|
statLevel.value = Math.min(statLevel.value + 1, 6);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export class MapModifier extends PersistentModifier {
|
export class MapModifier extends PersistentModifier {
|
||||||
constructor(type: ModifierType, stackCount?: integer) {
|
constructor(type: ModifierType, stackCount?: integer) {
|
||||||
super(type, stackCount);
|
super(type, stackCount);
|
||||||
|
|
Loading…
Reference in New Issue