Undid VSC autoformatter and changed the repel logic to just override the result of a double battle chance calculation (battle-scene:823 and battle-scene:836)
parent
1d41aa7173
commit
38078a3488
|
@ -1,4 +1,4 @@
|
||||||
import Phaser, { Time } from 'phaser';
|
import Phaser from 'phaser';
|
||||||
import UI, { Mode } from './ui/ui';
|
import UI, { Mode } from './ui/ui';
|
||||||
import { NextEncounterPhase, NewBiomeEncounterPhase, SelectBiomePhase, MessagePhase, TurnInitPhase, ReturnPhase, LevelCapPhase, ShowTrainerPhase, LoginPhase, MovePhase, TitlePhase, SwitchPhase } from './phases';
|
import { NextEncounterPhase, NewBiomeEncounterPhase, SelectBiomePhase, MessagePhase, TurnInitPhase, ReturnPhase, LevelCapPhase, ShowTrainerPhase, LoginPhase, MovePhase, TitlePhase, SwitchPhase } from './phases';
|
||||||
import Pokemon, { PlayerPokemon, EnemyPokemon } from './field/pokemon';
|
import Pokemon, { PlayerPokemon, EnemyPokemon } from './field/pokemon';
|
||||||
|
@ -54,13 +54,14 @@ import CharSprite from './ui/char-sprite';
|
||||||
import DamageNumberHandler from './field/damage-number-handler';
|
import DamageNumberHandler from './field/damage-number-handler';
|
||||||
import PokemonInfoContainer from './ui/pokemon-info-container';
|
import PokemonInfoContainer from './ui/pokemon-info-container';
|
||||||
import { biomeDepths } from './data/biomes';
|
import { biomeDepths } from './data/biomes';
|
||||||
import { initTouchControls } from './touch-controls';
|
|
||||||
import { UiTheme } from './enums/ui-theme';
|
import { UiTheme } from './enums/ui-theme';
|
||||||
import { SceneBase } from './scene-base';
|
import { SceneBase } from './scene-base';
|
||||||
import CandyBar from './ui/candy-bar';
|
import CandyBar from './ui/candy-bar';
|
||||||
import { Variant, variantData } from './data/variant';
|
import { Variant, variantData } from './data/variant';
|
||||||
import { Localizable } from './plugins/i18n';
|
import { Localizable } from './plugins/i18n';
|
||||||
import { STARTING_WAVE_OVERRIDE, OPP_SPECIES_OVERRIDE, SEED_OVERRIDE, STARTING_BIOME_OVERRIDE } from './overrides';
|
import { STARTING_WAVE_OVERRIDE, OPP_SPECIES_OVERRIDE, SEED_OVERRIDE, STARTING_BIOME_OVERRIDE } from './overrides';
|
||||||
|
import {InputsController} from "./inputs-controller";
|
||||||
|
import {UiInputs} from "./ui-inputs";
|
||||||
|
|
||||||
export const bypassLogin = import.meta.env.VITE_BYPASS_LOGIN === "1";
|
export const bypassLogin = import.meta.env.VITE_BYPASS_LOGIN === "1";
|
||||||
|
|
||||||
|
@ -69,33 +70,12 @@ const DEBUG_RNG = false;
|
||||||
export const startingWave = STARTING_WAVE_OVERRIDE || 1;
|
export const startingWave = STARTING_WAVE_OVERRIDE || 1;
|
||||||
|
|
||||||
const expSpriteKeys: string[] = [];
|
const expSpriteKeys: string[] = [];
|
||||||
const repeatInputDelayMillis = 250;
|
|
||||||
|
|
||||||
export let starterColors: StarterColors;
|
export let starterColors: StarterColors;
|
||||||
interface StarterColors {
|
interface StarterColors {
|
||||||
[key: string]: [string, string]
|
[key: string]: [string, string]
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum Button {
|
|
||||||
UP,
|
|
||||||
DOWN,
|
|
||||||
LEFT,
|
|
||||||
RIGHT,
|
|
||||||
SUBMIT,
|
|
||||||
ACTION,
|
|
||||||
CANCEL,
|
|
||||||
MENU,
|
|
||||||
STATS,
|
|
||||||
CYCLE_SHINY,
|
|
||||||
CYCLE_FORM,
|
|
||||||
CYCLE_GENDER,
|
|
||||||
CYCLE_ABILITY,
|
|
||||||
CYCLE_NATURE,
|
|
||||||
CYCLE_VARIANT,
|
|
||||||
SPEED_UP,
|
|
||||||
SLOW_DOWN
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface PokeballCounts {
|
export interface PokeballCounts {
|
||||||
[pb: string]: integer;
|
[pb: string]: integer;
|
||||||
}
|
}
|
||||||
|
@ -104,6 +84,8 @@ export type AnySound = Phaser.Sound.WebAudioSound | Phaser.Sound.HTML5AudioSound
|
||||||
|
|
||||||
export default class BattleScene extends SceneBase {
|
export default class BattleScene extends SceneBase {
|
||||||
public rexUI: UIPlugin;
|
public rexUI: UIPlugin;
|
||||||
|
public inputController: InputsController;
|
||||||
|
public uiInputs: UiInputs;
|
||||||
|
|
||||||
public sessionPlayTime: integer = null;
|
public sessionPlayTime: integer = null;
|
||||||
public masterVolume: number = 0.5;
|
public masterVolume: number = 0.5;
|
||||||
|
@ -124,6 +106,7 @@ export default class BattleScene extends SceneBase {
|
||||||
public gamepadSupport: boolean = true;
|
public gamepadSupport: boolean = true;
|
||||||
public enableTouchControls: boolean = false;
|
public enableTouchControls: boolean = false;
|
||||||
public enableVibration: boolean = false;
|
public enableVibration: boolean = false;
|
||||||
|
public abSwapped: boolean = false;
|
||||||
|
|
||||||
public disableMenu: boolean = false;
|
public disableMenu: boolean = false;
|
||||||
|
|
||||||
|
@ -190,34 +173,6 @@ export default class BattleScene extends SceneBase {
|
||||||
private bgmCache: Set<string> = new Set();
|
private bgmCache: Set<string> = new Set();
|
||||||
private playTimeTimer: Phaser.Time.TimerEvent;
|
private playTimeTimer: Phaser.Time.TimerEvent;
|
||||||
|
|
||||||
private buttonKeys: Phaser.Input.Keyboard.Key[][];
|
|
||||||
private lastProcessedButtonPressTimes: Map<Button, number> = new Map();
|
|
||||||
// movementButtonLock ensures only a single movement key is firing repeated inputs
|
|
||||||
// (i.e. by holding down a button) at a time
|
|
||||||
private movementButtonLock: Button;
|
|
||||||
|
|
||||||
// using a dualshock controller as a map
|
|
||||||
private gamepadKeyConfig = {
|
|
||||||
[Button.UP]: 12, // up
|
|
||||||
[Button.DOWN]: 13, // down
|
|
||||||
[Button.LEFT]: 14, // left
|
|
||||||
[Button.RIGHT]: 15, // right
|
|
||||||
[Button.SUBMIT]: 17, // touchpad
|
|
||||||
[Button.ACTION]: 0, // X
|
|
||||||
[Button.CANCEL]: 1, // O
|
|
||||||
[Button.MENU]: 9, // options
|
|
||||||
[Button.STATS]: 8, // share
|
|
||||||
[Button.CYCLE_SHINY]: 5, // RB
|
|
||||||
[Button.CYCLE_FORM]: 4, // LB
|
|
||||||
[Button.CYCLE_GENDER]: 6, // LT
|
|
||||||
[Button.CYCLE_ABILITY]: 7, // RT
|
|
||||||
[Button.CYCLE_NATURE]: 2, // square
|
|
||||||
[Button.CYCLE_VARIANT]: 3, // triangle
|
|
||||||
[Button.SPEED_UP]: 10, // L3
|
|
||||||
[Button.SLOW_DOWN]: 11 // R3
|
|
||||||
};
|
|
||||||
public gamepadButtonStates: boolean[] = new Array(17).fill(false);
|
|
||||||
|
|
||||||
public rngCounter: integer = 0;
|
public rngCounter: integer = 0;
|
||||||
public rngSeedOverride: string = '';
|
public rngSeedOverride: string = '';
|
||||||
public rngOffset: integer = 0;
|
public rngOffset: integer = 0;
|
||||||
|
@ -268,13 +223,13 @@ export default class BattleScene extends SceneBase {
|
||||||
|
|
||||||
create() {
|
create() {
|
||||||
initGameSpeed.apply(this);
|
initGameSpeed.apply(this);
|
||||||
|
this.inputController = new InputsController(this);
|
||||||
|
this.uiInputs = new UiInputs(this, this.inputController);
|
||||||
|
|
||||||
this.gameData = new GameData(this);
|
this.gameData = new GameData(this);
|
||||||
|
|
||||||
addUiThemeOverrides(this);
|
addUiThemeOverrides(this);
|
||||||
|
|
||||||
this.setupControls();
|
|
||||||
|
|
||||||
this.load.setBaseURL();
|
this.load.setBaseURL();
|
||||||
|
|
||||||
this.spritePipeline = new SpritePipeline(this.game);
|
this.spritePipeline = new SpritePipeline(this.game);
|
||||||
|
@ -287,7 +242,7 @@ export default class BattleScene extends SceneBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
update() {
|
update() {
|
||||||
this.checkInput();
|
this.inputController.update();
|
||||||
this.ui?.update();
|
this.ui?.update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -606,42 +561,6 @@ export default class BattleScene extends SceneBase {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
setupControls() {
|
|
||||||
const keyCodes = Phaser.Input.Keyboard.KeyCodes;
|
|
||||||
const keyConfig = {
|
|
||||||
[Button.UP]: [keyCodes.UP, keyCodes.W],
|
|
||||||
[Button.DOWN]: [keyCodes.DOWN, keyCodes.S],
|
|
||||||
[Button.LEFT]: [keyCodes.LEFT, keyCodes.A],
|
|
||||||
[Button.RIGHT]: [keyCodes.RIGHT, keyCodes.D],
|
|
||||||
[Button.SUBMIT]: [keyCodes.ENTER],
|
|
||||||
[Button.ACTION]: [keyCodes.SPACE, keyCodes.ENTER, keyCodes.Z],
|
|
||||||
[Button.CANCEL]: [keyCodes.BACKSPACE, keyCodes.X],
|
|
||||||
[Button.MENU]: [keyCodes.ESC, keyCodes.M],
|
|
||||||
[Button.STATS]: [keyCodes.SHIFT, keyCodes.C],
|
|
||||||
[Button.CYCLE_SHINY]: [keyCodes.R],
|
|
||||||
[Button.CYCLE_FORM]: [keyCodes.F],
|
|
||||||
[Button.CYCLE_GENDER]: [keyCodes.G],
|
|
||||||
[Button.CYCLE_ABILITY]: [keyCodes.E],
|
|
||||||
[Button.CYCLE_NATURE]: [keyCodes.N],
|
|
||||||
[Button.CYCLE_VARIANT]: [keyCodes.V],
|
|
||||||
[Button.SPEED_UP]: [keyCodes.PLUS],
|
|
||||||
[Button.SLOW_DOWN]: [keyCodes.MINUS]
|
|
||||||
};
|
|
||||||
const mobileKeyConfig = {};
|
|
||||||
this.buttonKeys = [];
|
|
||||||
for (let b of Utils.getEnumValues(Button)) {
|
|
||||||
const keys: Phaser.Input.Keyboard.Key[] = [];
|
|
||||||
if (keyConfig.hasOwnProperty(b)) {
|
|
||||||
for (let k of keyConfig[b])
|
|
||||||
keys.push(this.input.keyboard.addKey(k, false));
|
|
||||||
mobileKeyConfig[Button[b]] = keys[0];
|
|
||||||
}
|
|
||||||
this.buttonKeys[b] = keys;
|
|
||||||
}
|
|
||||||
|
|
||||||
initTouchControls(mobileKeyConfig);
|
|
||||||
}
|
|
||||||
|
|
||||||
getParty(): PlayerPokemon[] {
|
getParty(): PlayerPokemon[] {
|
||||||
return this.party;
|
return this.party;
|
||||||
}
|
}
|
||||||
|
@ -870,9 +789,6 @@ export default class BattleScene extends SceneBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
newBattle(waveIndex?: integer, battleType?: BattleType, trainerData?: TrainerData, double?: boolean): Battle {
|
newBattle(waveIndex?: integer, battleType?: BattleType, trainerData?: TrainerData, double?: boolean): Battle {
|
||||||
if (this.getModifiers(DoubleBattleChancePreventerModifier).length != 0) {
|
|
||||||
double = false;
|
|
||||||
}
|
|
||||||
let newWaveIndex = waveIndex || ((this.currentBattle?.waveIndex || (startingWave - 1)) + 1);
|
let newWaveIndex = waveIndex || ((this.currentBattle?.waveIndex || (startingWave - 1)) + 1);
|
||||||
let newDouble: boolean;
|
let newDouble: boolean;
|
||||||
let newBattleType: BattleType;
|
let newBattleType: BattleType;
|
||||||
|
@ -905,10 +821,11 @@ export default class BattleScene extends SceneBase {
|
||||||
if (trainerConfigs[trainerType].doubleOnly)
|
if (trainerConfigs[trainerType].doubleOnly)
|
||||||
doubleTrainer = true;
|
doubleTrainer = true;
|
||||||
else if (trainerConfigs[trainerType].hasDouble) {
|
else if (trainerConfigs[trainerType].hasDouble) {
|
||||||
const doubleChance = new Utils.IntegerHolder(newWaveIndex % 10 === 0 ? 32 : 8);
|
let doubleChance = new Utils.IntegerHolder(newWaveIndex % 10 === 0 ? 32 : 8);
|
||||||
this.applyModifiers(DoubleBattleChanceBoosterModifier, true, doubleChance);
|
this.applyModifiers(DoubleBattleChanceBoosterModifier, true, doubleChance);
|
||||||
playerField.forEach(p => applyAbAttrs(DoubleBattleChanceAbAttr, p, null, doubleChance));
|
playerField.forEach(p => applyAbAttrs(DoubleBattleChanceAbAttr, p, null, doubleChance));
|
||||||
doubleTrainer = !Utils.randSeedInt(doubleChance.value);
|
doubleTrainer = !Utils.randSeedInt(doubleChance.value);
|
||||||
|
if (this.getModifiers(DoubleBattleChancePreventerModifier).length != 0) doubleTrainer = false;
|
||||||
}
|
}
|
||||||
newTrainer = trainerData !== undefined ? trainerData.toTrainer(this) : new Trainer(this, trainerType, doubleTrainer ? TrainerVariant.DOUBLE : Utils.randSeedInt(2) ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT);
|
newTrainer = trainerData !== undefined ? trainerData.toTrainer(this) : new Trainer(this, trainerType, doubleTrainer ? TrainerVariant.DOUBLE : Utils.randSeedInt(2) ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT);
|
||||||
this.field.add(newTrainer);
|
this.field.add(newTrainer);
|
||||||
|
@ -917,10 +834,11 @@ export default class BattleScene extends SceneBase {
|
||||||
|
|
||||||
if (double === undefined && newWaveIndex > 1) {
|
if (double === undefined && newWaveIndex > 1) {
|
||||||
if (newBattleType === BattleType.WILD && !this.gameMode.isWaveFinal(newWaveIndex)) {
|
if (newBattleType === BattleType.WILD && !this.gameMode.isWaveFinal(newWaveIndex)) {
|
||||||
const doubleChance = new Utils.IntegerHolder(newWaveIndex % 10 === 0 ? 32 : 8);
|
let doubleChance = new Utils.IntegerHolder(newWaveIndex % 10 === 0 ? 32 : 8);
|
||||||
this.applyModifiers(DoubleBattleChanceBoosterModifier, true, doubleChance);
|
this.applyModifiers(DoubleBattleChanceBoosterModifier, true, doubleChance);
|
||||||
playerField.forEach(p => applyAbAttrs(DoubleBattleChanceAbAttr, p, null, doubleChance));
|
playerField.forEach(p => applyAbAttrs(DoubleBattleChanceAbAttr, p, null, doubleChance));
|
||||||
newDouble = !Utils.randSeedInt(doubleChance.value);
|
newDouble = !Utils.randSeedInt(doubleChance.value);
|
||||||
|
if (this.getModifiers(DoubleBattleChancePreventerModifier).length != 0) newDouble = false;
|
||||||
} else if (newBattleType === BattleType.TRAINER)
|
} else if (newBattleType === BattleType.TRAINER)
|
||||||
newDouble = newTrainer.variant === TrainerVariant.DOUBLE;
|
newDouble = newTrainer.variant === TrainerVariant.DOUBLE;
|
||||||
} else if (!battleConfig)
|
} else if (!battleConfig)
|
||||||
|
@ -1114,7 +1032,7 @@ export default class BattleScene extends SceneBase {
|
||||||
return 5;
|
return 5;
|
||||||
|
|
||||||
let isBoss: boolean;
|
let isBoss: boolean;
|
||||||
if (forceBoss || (species && (species.pseudoLegendary || species.legendary || species.mythical)))
|
if (forceBoss || (species && (species.subLegendary || species.legendary || species.mythical)))
|
||||||
isBoss = true;
|
isBoss = true;
|
||||||
else {
|
else {
|
||||||
this.executeWithSeedOffset(() => {
|
this.executeWithSeedOffset(() => {
|
||||||
|
@ -1346,177 +1264,6 @@ export default class BattleScene extends SceneBase {
|
||||||
return biomes[Utils.randSeedInt(biomes.length)];
|
return biomes[Utils.randSeedInt(biomes.length)];
|
||||||
}
|
}
|
||||||
|
|
||||||
checkInput(): boolean {
|
|
||||||
let inputSuccess = false;
|
|
||||||
let vibrationLength = 0;
|
|
||||||
if (this.buttonJustPressed(Button.UP) || this.repeatInputDurationJustPassed(Button.UP)) {
|
|
||||||
inputSuccess = this.ui.processInput(Button.UP);
|
|
||||||
vibrationLength = 5;
|
|
||||||
this.setLastProcessedMovementTime(Button.UP)
|
|
||||||
} else if (this.buttonJustPressed(Button.DOWN) || this.repeatInputDurationJustPassed(Button.DOWN)) {
|
|
||||||
inputSuccess = this.ui.processInput(Button.DOWN);
|
|
||||||
vibrationLength = 5;
|
|
||||||
this.setLastProcessedMovementTime(Button.DOWN)
|
|
||||||
} else if (this.buttonJustPressed(Button.LEFT) || this.repeatInputDurationJustPassed(Button.LEFT)) {
|
|
||||||
inputSuccess = this.ui.processInput(Button.LEFT);
|
|
||||||
vibrationLength = 5;
|
|
||||||
this.setLastProcessedMovementTime(Button.LEFT)
|
|
||||||
} else if (this.buttonJustPressed(Button.RIGHT) || this.repeatInputDurationJustPassed(Button.RIGHT)) {
|
|
||||||
inputSuccess = this.ui.processInput(Button.RIGHT);
|
|
||||||
vibrationLength = 5;
|
|
||||||
this.setLastProcessedMovementTime(Button.RIGHT)
|
|
||||||
} else if (this.buttonJustPressed(Button.SUBMIT) || this.repeatInputDurationJustPassed(Button.SUBMIT)) {
|
|
||||||
inputSuccess = this.ui.processInput(Button.SUBMIT) || this.ui.processInput(Button.ACTION);
|
|
||||||
this.setLastProcessedMovementTime(Button.SUBMIT);
|
|
||||||
} else if (this.buttonJustPressed(Button.ACTION) || this.repeatInputDurationJustPassed(Button.ACTION)) {
|
|
||||||
inputSuccess = this.ui.processInput(Button.ACTION);
|
|
||||||
this.setLastProcessedMovementTime(Button.ACTION);
|
|
||||||
} else if (this.buttonJustPressed(Button.CANCEL) || this.repeatInputDurationJustPassed(Button.CANCEL)) {
|
|
||||||
inputSuccess = this.ui.processInput(Button.CANCEL);
|
|
||||||
this.setLastProcessedMovementTime(Button.CANCEL);
|
|
||||||
} else if (this.buttonJustPressed(Button.MENU)) {
|
|
||||||
if (this.disableMenu)
|
|
||||||
return;
|
|
||||||
switch (this.ui?.getMode()) {
|
|
||||||
case Mode.MESSAGE:
|
|
||||||
if (!(this.ui.getHandler() as MessageUiHandler).pendingPrompt)
|
|
||||||
return;
|
|
||||||
case Mode.TITLE:
|
|
||||||
case Mode.COMMAND:
|
|
||||||
case Mode.FIGHT:
|
|
||||||
case Mode.BALL:
|
|
||||||
case Mode.TARGET_SELECT:
|
|
||||||
case Mode.SAVE_SLOT:
|
|
||||||
case Mode.PARTY:
|
|
||||||
case Mode.SUMMARY:
|
|
||||||
case Mode.STARTER_SELECT:
|
|
||||||
case Mode.CONFIRM:
|
|
||||||
case Mode.OPTION_SELECT:
|
|
||||||
this.ui.setOverlayMode(Mode.MENU);
|
|
||||||
inputSuccess = true;
|
|
||||||
break;
|
|
||||||
case Mode.MENU:
|
|
||||||
case Mode.SETTINGS:
|
|
||||||
case Mode.ACHIEVEMENTS:
|
|
||||||
this.ui.revertMode();
|
|
||||||
this.playSound('select');
|
|
||||||
inputSuccess = true;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} else if (this.ui?.getHandler() instanceof StarterSelectUiHandler) {
|
|
||||||
if (this.buttonJustPressed(Button.CYCLE_SHINY)) {
|
|
||||||
inputSuccess = this.ui.processInput(Button.CYCLE_SHINY);
|
|
||||||
this.setLastProcessedMovementTime(Button.CYCLE_SHINY);
|
|
||||||
} else if (this.buttonJustPressed(Button.CYCLE_FORM)) {
|
|
||||||
inputSuccess = this.ui.processInput(Button.CYCLE_FORM);
|
|
||||||
this.setLastProcessedMovementTime(Button.CYCLE_FORM);
|
|
||||||
} else if (this.buttonJustPressed(Button.CYCLE_GENDER)) {
|
|
||||||
inputSuccess = this.ui.processInput(Button.CYCLE_GENDER);
|
|
||||||
this.setLastProcessedMovementTime(Button.CYCLE_GENDER);
|
|
||||||
} else if (this.buttonJustPressed(Button.CYCLE_ABILITY)) {
|
|
||||||
inputSuccess = this.ui.processInput(Button.CYCLE_ABILITY);
|
|
||||||
this.setLastProcessedMovementTime(Button.CYCLE_ABILITY);
|
|
||||||
} else if (this.buttonJustPressed(Button.CYCLE_NATURE)) {
|
|
||||||
inputSuccess = this.ui.processInput(Button.CYCLE_NATURE);
|
|
||||||
this.setLastProcessedMovementTime(Button.CYCLE_NATURE);
|
|
||||||
} else if (this.buttonJustPressed(Button.CYCLE_VARIANT)) {
|
|
||||||
inputSuccess = this.ui.processInput(Button.CYCLE_VARIANT);
|
|
||||||
this.setLastProcessedMovementTime(Button.CYCLE_VARIANT);
|
|
||||||
} else
|
|
||||||
return;
|
|
||||||
} else if (this.buttonJustPressed(Button.SPEED_UP)) {
|
|
||||||
if (this.gameSpeed < 5) {
|
|
||||||
this.gameData.saveSetting(Setting.Game_Speed, settingOptions[Setting.Game_Speed].indexOf(`${this.gameSpeed}x`) + 1);
|
|
||||||
if (this.ui?.getMode() === Mode.SETTINGS)
|
|
||||||
(this.ui.getHandler() as SettingsUiHandler).show([]);
|
|
||||||
}
|
|
||||||
} else if (this.buttonJustPressed(Button.SLOW_DOWN)) {
|
|
||||||
if (this.gameSpeed > 1) {
|
|
||||||
this.gameData.saveSetting(Setting.Game_Speed, Math.max(settingOptions[Setting.Game_Speed].indexOf(`${this.gameSpeed}x`) - 1, 0));
|
|
||||||
if (this.ui?.getMode() === Mode.SETTINGS)
|
|
||||||
(this.ui.getHandler() as SettingsUiHandler).show([]);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
let pressed = false;
|
|
||||||
if (this.ui && (this.buttonJustReleased(Button.STATS) || (pressed = this.buttonJustPressed(Button.STATS)))) {
|
|
||||||
for (let p of this.getField().filter(p => p?.isActive(true)))
|
|
||||||
p.toggleStats(pressed);
|
|
||||||
if (pressed)
|
|
||||||
this.setLastProcessedMovementTime(Button.STATS);
|
|
||||||
} else
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (inputSuccess && this.enableVibration && typeof navigator.vibrate !== 'undefined')
|
|
||||||
navigator.vibrate(vibrationLength || 10);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* gamepadButtonJustDown returns true if @param button has just been pressed down
|
|
||||||
* or not. It will only return true once, until the key is released and pressed down
|
|
||||||
* again.
|
|
||||||
*/
|
|
||||||
gamepadButtonJustDown(button: Phaser.Input.Gamepad.Button): boolean {
|
|
||||||
if (!button || !this.gamepadSupport)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
let ret = false;
|
|
||||||
if (button.pressed) {
|
|
||||||
if (!this.gamepadButtonStates[button.index])
|
|
||||||
ret = true;
|
|
||||||
this.gamepadButtonStates[button.index] = true;
|
|
||||||
} else
|
|
||||||
this.gamepadButtonStates[button.index] = false;
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
buttonJustPressed(button: Button): boolean {
|
|
||||||
const gamepad = this.input.gamepad?.gamepads[0];
|
|
||||||
return this.buttonKeys[button].some(k => Phaser.Input.Keyboard.JustDown(k)) || this.gamepadButtonJustDown(gamepad?.buttons[this.gamepadKeyConfig[button]]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* gamepadButtonJustUp returns true if @param button has just been released
|
|
||||||
* or not. It will only return true once, until the key is released and pressed down
|
|
||||||
* again.
|
|
||||||
*/
|
|
||||||
gamepadButtonJustUp(button: Phaser.Input.Gamepad.Button): boolean {
|
|
||||||
if (!button || !this.gamepadSupport)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return !this.gamepadButtonStates[button.index];
|
|
||||||
}
|
|
||||||
|
|
||||||
buttonJustReleased(button: Button): boolean {
|
|
||||||
const gamepad = this.input.gamepad?.gamepads[0];
|
|
||||||
return this.buttonKeys[button].some(k => Phaser.Input.Keyboard.JustUp(k)) || this.gamepadButtonJustUp(gamepad?.buttons[this.gamepadKeyConfig[button]]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* repeatInputDurationJustPassed returns true if @param button has been held down long
|
|
||||||
* enough to fire a repeated input. A button must claim the movementButtonLock before
|
|
||||||
* firing a repeated input - this is to prevent multiple buttons from firing repeatedly.
|
|
||||||
*/
|
|
||||||
repeatInputDurationJustPassed(button: Button): boolean {
|
|
||||||
if (this.movementButtonLock !== null && this.movementButtonLock !== button) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (this.buttonKeys[button].every(k => k.isUp) && this.gamepadButtonStates.every(b => b == false)) {
|
|
||||||
this.movementButtonLock = null;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (this.time.now - this.lastProcessedButtonPressTimes.get(button) >= repeatInputDelayMillis) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
setLastProcessedMovementTime(button: Button) {
|
|
||||||
this.lastProcessedButtonPressTimes.set(button, this.time.now);
|
|
||||||
this.movementButtonLock = button;
|
|
||||||
}
|
|
||||||
|
|
||||||
isBgmPlaying(): boolean {
|
isBgmPlaying(): boolean {
|
||||||
return this.bgm && this.bgm.isPlaying;
|
return this.bgm && this.bgm.isPlaying;
|
||||||
}
|
}
|
||||||
|
@ -1674,11 +1421,13 @@ export default class BattleScene extends SceneBase {
|
||||||
return 13.122;
|
return 13.122;
|
||||||
case 'battle_unova_gym':
|
case 'battle_unova_gym':
|
||||||
return 19.145;
|
return 19.145;
|
||||||
case 'battle_legendary':
|
case 'battle_legendary_regis': //B2W2 Legendary Titan Battle
|
||||||
|
return 49.500;
|
||||||
|
case 'battle_legendary_unova': //BW Unova Legendary Battle
|
||||||
return 13.855;
|
return 13.855;
|
||||||
case 'battle_legendary_k':
|
case 'battle_legendary_kyurem': //BW Kyurem Battle
|
||||||
return 18.314;
|
return 18.314;
|
||||||
case 'battle_legendary_rz':
|
case 'battle_legendary_res_zek': //BW Reshiram & Zekrom Battle
|
||||||
return 18.329;
|
return 18.329;
|
||||||
case 'battle_rival':
|
case 'battle_rival':
|
||||||
return 13.689;
|
return 13.689;
|
||||||
|
@ -2068,6 +1817,171 @@ export default class BattleScene extends SceneBase {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
removeModifier(modifier: PersistentModifier, enemy?: boolean): boolean {
|
||||||
|
const modifiers = !enemy ? this.modifiers : this.enemyModifiers;
|
||||||
|
const modifierIndex = modifiers.indexOf(modifier);
|
||||||
|
if (modifierIndex > -1) {
|
||||||
|
modifiers.splice(modifierIndex, 1);
|
||||||
|
if (modifier instanceof PokemonFormChangeItemModifier || modifier instanceof TerastallizeModifier)
|
||||||
|
modifier.apply([ this.getPokemonById(modifier.pokemonId), false ]);
|
||||||
|
his.enemyModifiers.indexOf(m), 1);
|
||||||
|
this.updateModifiers(false).then(() => this.updateUIPositions());
|
||||||
|
}
|
||||||
|
|
||||||
|
setModifiersVisible(visible: boolean) {
|
||||||
|
[this.modifierBar, this.enemyModifierBar].map(m => m.setVisible(visible));
|
||||||
|
}
|
||||||
|
|
||||||
|
updateModifiers(player?: boolean, instant?: boolean): Promise<void> {
|
||||||
|
if (player === undefined)
|
||||||
|
player = true;
|
||||||
|
return new Promise(resolve => {
|
||||||
|
const modifiers = player ? this.modifiers : this.enemyModifiers as PersistentModifier[];
|
||||||
|
for (let m = 0; m < modifiers.length; m++) {
|
||||||
|
const modifier = modifiers[m];
|
||||||
|
if (modifier instanceof PokemonHeldItemModifier && !this.getPokemonById((modifier as PokemonHeldItemModifier).pokemonId))
|
||||||
|
modifiers.splice(m--, 1);
|
||||||
|
}
|
||||||
|
for (let modifier of modifiers) {
|
||||||
|
if (modifier instanceof PersistentModifier)
|
||||||
|
(modifier as PersistentModifier).virtualStackCount = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const modifiersClone = modifiers.slice(0);
|
||||||
|
for (let modifier of modifiersClone) {
|
||||||
|
if (!modifier.getStackCount())
|
||||||
|
modifiers.splice(modifiers.indexOf(modifier), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.updatePartyForModifiers(player ? this.getParty() : this.getEnemyParty(), instant).then(() => {
|
||||||
|
(player ? this.modifierBar : this.enemyModifierBar).updateModifiers(modifiers);
|
||||||
|
if (!player)
|
||||||
|
this.updateUIPositions();
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
updatePartyForModifiers(party: Pokemon[], instant?: boolean): Promise<void> {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
Promise.allSettled(party.map(p => {
|
||||||
|
if (p.scene)
|
||||||
|
p.calculateStats();
|
||||||
|
return p.updateInfo(instant);
|
||||||
|
})).then(() => resolve());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
removeModifier(modifier: PersistentModifier, enemy?: boolean): boolean {
|
||||||
|
const modifiers = !enemy ? this.modifiers : this.enemyModifiers;
|
||||||
|
const modifierIndex = modifiers.indexOf(modifier);
|
||||||
|
if (modifierIndex > -1) {
|
||||||
|
modifiers.splice(modifierIndex, 1);
|
||||||
|
if (modifier instanceof PokemonFormChangeItemModifier || modifier instanceof TerastallizeModifier)
|
||||||
|
modifier.apply([this.getPokemonById(modifier.pokemonId), false]);
|
||||||
|
his.enemyModifiers.indexOf(m), 1);
|
||||||
|
this.updateModifiers(false).then(() => this.updateUIPositions());
|
||||||
|
}
|
||||||
|
|
||||||
|
setModifiersVisible(visible: boolean) {
|
||||||
|
[this.modifierBar, this.enemyModifierBar].map(m => m.setVisible(visible));
|
||||||
|
}
|
||||||
|
|
||||||
|
updateModifiers(player?: boolean, instant?: boolean): Promise<void> {
|
||||||
|
if (player === undefined)
|
||||||
|
player = true;
|
||||||
|
return new Promise(resolve => {
|
||||||
|
const modifiers = player ? this.modifiers : this.enemyModifiers as PersistentModifier[];
|
||||||
|
for (let m = 0; m < modifiers.length; m++) {
|
||||||
|
const modifier = modifiers[m];
|
||||||
|
if (modifier instanceof PokemonHeldItemModifier && !this.getPokemonById((modifier as PokemonHeldItemModifier).pokemonId))
|
||||||
|
modifiers.splice(m--, 1);
|
||||||
|
}
|
||||||
|
for (let modifier of modifiers) {
|
||||||
|
if (modifier instanceof PersistentModifier)
|
||||||
|
(modifier as PersistentModifier).virtualStackCount = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const modifiersClone = modifiers.slice(0);
|
||||||
|
for (let modifier of modifiersClone) {
|
||||||
|
if (!modifier.getStackCount())
|
||||||
|
modifiers.splice(modifiers.indexOf(modifier), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.updatePartyForModifiers(player ? this.getParty() : this.getEnemyParty(), instant).then(() => {
|
||||||
|
(player ? this.modifierBar : this.enemyModifierBar).updateModifiers(modifiers);
|
||||||
|
if (!player)
|
||||||
|
this.updateUIPositions();
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
updatePartyForModifiers(party: Pokemon[], instant?: boolean): Promise<void> {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
Promise.allSettled(party.map(p => {
|
||||||
|
if (p.scene)
|
||||||
|
p.calculateStats();
|
||||||
|
return p.updateInfo(instant);
|
||||||
|
})).then(() => resolve());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
removeModifier(modifier: PersistentModifier, enemy?: boolean): boolean {
|
||||||
|
const modifiers = !enemy ? this.modifiers : this.enemyModifiers;
|
||||||
|
const modifierIndex = modifiers.indexOf(modifier);
|
||||||
|
if (modifierIndex > -1) {
|
||||||
|
modifiers.splice(modifierIndex, 1);
|
||||||
|
if (modifier instanceof PokemonFormChangeItemModifier || modifier instanceof TerastallizeModifier)
|
||||||
|
modifier.apply([this.getPokemonById(modifier.pokemonId), false]);
|
||||||
|
his.enemyModifiers.indexOf(m), 1);
|
||||||
|
this.updateModifiers(false).then(() => this.updateUIPositions());
|
||||||
|
}
|
||||||
|
|
||||||
|
setModifiersVisible(visible: boolean) {
|
||||||
|
[this.modifierBar, this.enemyModifierBar].map(m => m.setVisible(visible));
|
||||||
|
}
|
||||||
|
|
||||||
|
updateModifiers(player?: boolean, instant?: boolean): Promise<void> {
|
||||||
|
if (player === undefined)
|
||||||
|
player = true;
|
||||||
|
return new Promise(resolve => {
|
||||||
|
const modifiers = player ? this.modifiers : this.enemyModifiers as PersistentModifier[];
|
||||||
|
for (let m = 0; m < modifiers.length; m++) {
|
||||||
|
const modifier = modifiers[m];
|
||||||
|
if (modifier instanceof PokemonHeldItemModifier && !this.getPokemonById((modifier as PokemonHeldItemModifier).pokemonId))
|
||||||
|
modifiers.splice(m--, 1);
|
||||||
|
}
|
||||||
|
for (let modifier of modifiers) {
|
||||||
|
if (modifier instanceof PersistentModifier)
|
||||||
|
(modifier as PersistentModifier).virtualStackCount = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const modifiersClone = modifiers.slice(0);
|
||||||
|
for (let modifier of modifiersClone) {
|
||||||
|
if (!modifier.getStackCount())
|
||||||
|
modifiers.splice(modifiers.indexOf(modifier), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.updatePartyForModifiers(player ? this.getParty() : this.getEnemyParty(), instant).then(() => {
|
||||||
|
(player ? this.modifierBar : this.enemyModifierBar).updateModifiers(modifiers);
|
||||||
|
if (!player)
|
||||||
|
this.updateUIPositions();
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
updatePartyForModifiers(party: Pokemon[], instant?: boolean): Promise<void> {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
Promise.allSettled(party.map(p => {
|
||||||
|
if (p.scene)
|
||||||
|
p.calculateStats();
|
||||||
|
return p.updateInfo(instant);
|
||||||
|
})).then(() => resolve());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
removeModifier(modifier: PersistentModifier, enemy?: boolean): boolean {
|
removeModifier(modifier: PersistentModifier, enemy?: boolean): boolean {
|
||||||
const modifiers = !enemy ? this.modifiers : this.enemyModifiers;
|
const modifiers = !enemy ? this.modifiers : this.enemyModifiers;
|
||||||
const modifierIndex = modifiers.indexOf(modifier);
|
const modifierIndex = modifiers.indexOf(modifier);
|
||||||
|
|
|
@ -70,10 +70,7 @@ export class ModifierType {
|
||||||
return this.tier;
|
return this.tier;
|
||||||
if (!this.id)
|
if (!this.id)
|
||||||
return null;
|
return null;
|
||||||
let poolTypes: ModifierPoolType[];
|
let poolTypes: Modifier poolTypes = [ poolType, ModifierPoolType.TRAINER, ModifierPoolType.WILD ];
|
||||||
switch (poolType) {
|
|
||||||
case ModifierPoolType.PLAYER:
|
|
||||||
poolTypes = [poolType, ModifierPoolType.TRAINER, ModifierPoolType.WILD];
|
|
||||||
break;
|
break;
|
||||||
case ModifierPoolType.WILD:
|
case ModifierPoolType.WILD:
|
||||||
poolTypes = [ poolType, ModifierPoolType.PLAYER, ModifierPoolType.TRAINER ];
|
poolTypes = [ poolType, ModifierPoolType.PLAYER, ModifierPoolType.TRAINER ];
|
||||||
|
@ -815,9 +812,9 @@ export const modifierTypes = {
|
||||||
PP_UP: () => new PokemonPpUpModifierType('PP Up', 1),
|
PP_UP: () => new PokemonPpUpModifierType('PP Up', 1),
|
||||||
PP_MAX: () => new PokemonPpUpModifierType('PP Max', 3),
|
PP_MAX: () => new PokemonPpUpModifierType('PP Max', 3),
|
||||||
|
|
||||||
REPEL: () => new DoubleBattleChancePreventerModifierType('Repel', 5),
|
REPEL: () => new DoubleBattleChanceBoosterModifierType('Repel', 5),
|
||||||
SUPER_REPEL: () => new DoubleBattleChancePreventerModifierType('Super Repel', 10),
|
SUPER_REPEL: () => new DoubleBattleChanceBoosterModifierType('Super Repel', 10),
|
||||||
MAX_REPEL: () => new DoubleBattleChancePreventerModifierType('Max Repel', 25),
|
MAX_REPEL: () => new DoubleBattleChanceBoosterModifierType('Max Repel', 25),
|
||||||
|
|
||||||
LURE: () => new DoubleBattleChanceBoosterModifierType('Lure', 5),
|
LURE: () => new DoubleBattleChanceBoosterModifierType('Lure', 5),
|
||||||
SUPER_LURE: () => new DoubleBattleChanceBoosterModifierType('Super Lure', 10),
|
SUPER_LURE: () => new DoubleBattleChanceBoosterModifierType('Super Lure', 10),
|
||||||
|
@ -994,14 +991,7 @@ const modifierPool: 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;
|
||||||
}, 3),
|
}, 3),
|
||||||
new WeightedModifierType(modifierTypes.REPEL, (party: Pokemon[]) => {
|
new WeightedModifierType(modifierTypes.LURE, 2),
|
||||||
const existingItem = party[0].scene.findModifier(m => m.type instanceof DoubleBattleChancePreventerModifierType || m.type instanceof DoubleBattleChanceBoosterModifierType);
|
|
||||||
return existingItem ? 0 : 2;
|
|
||||||
}),
|
|
||||||
new WeightedModifierType(modifierTypes.LURE, (party: Pokemon[]) => {
|
|
||||||
const existingItem = party[0].scene.findModifier(m => m.type instanceof DoubleBattleChancePreventerModifierType || m.type instanceof DoubleBattleChanceBoosterModifierType);
|
|
||||||
return existingItem ? 0 : 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),
|
||||||
|
@ -1050,7 +1040,7 @@ const modifierPool: ModifierPool = {
|
||||||
return existingItem ? 0 : 4;
|
return existingItem ? 0 : 4;
|
||||||
}),
|
}),
|
||||||
new WeightedModifierType(modifierTypes.SUPER_LURE, (party: Pokemon[]) => {
|
new WeightedModifierType(modifierTypes.SUPER_LURE, (party: Pokemon[]) => {
|
||||||
const existingItem = party[0].scene.findModifier(m => m.type instanceof DoubleBattleChancePreventerModifierType || m.type instanceof DoubleBattleChanceBoosterModifierType);
|
const existingItem = party[0].scene.findModifier(m => m.type instanceof DoubleBattleChanceBoosterModifierType || m.type instanceof DoubleBattleChanceBoosterModifierType);
|
||||||
return existingItem ? 0 : 4;
|
return existingItem ? 0 : 4;
|
||||||
}),
|
}),
|
||||||
new WeightedModifierType(modifierTypes.NUGGET, 5),
|
new WeightedModifierType(modifierTypes.NUGGET, 5),
|
||||||
|
@ -1071,14 +1061,7 @@ const modifierPool: ModifierPool = {
|
||||||
].map(m => { m.setTier(ModifierTier.GREAT); return m; }),
|
].map(m => { m.setTier(ModifierTier.GREAT); return m; }),
|
||||||
[ModifierTier.ULTRA]: [
|
[ModifierTier.ULTRA]: [
|
||||||
new WeightedModifierType(modifierTypes.ULTRA_BALL, 24),
|
new WeightedModifierType(modifierTypes.ULTRA_BALL, 24),
|
||||||
new WeightedModifierType(modifierTypes.MAX_REPEL, (party: Pokemon[]) => {
|
new WeightedModifierType(modifierTypes.MAX_LURE, 4),
|
||||||
const existingItem = party[0].scene.findModifier(m => m.type instanceof DoubleBattleChancePreventerModifierType || m.type instanceof DoubleBattleChanceBoosterModifierType);
|
|
||||||
return existingItem ? 0 : 4;
|
|
||||||
}),
|
|
||||||
new WeightedModifierType(modifierTypes.MAX_LURE, (party: Pokemon[]) => {
|
|
||||||
const existingItem = party[0].scene.findModifier(m => m.type instanceof DoubleBattleChancePreventerModifierType || m.type instanceof DoubleBattleChanceBoosterModifierType);
|
|
||||||
return existingItem ? 0 : 4;
|
|
||||||
}),
|
|
||||||
new WeightedModifierType(modifierTypes.BIG_NUGGET, 12),
|
new WeightedModifierType(modifierTypes.BIG_NUGGET, 12),
|
||||||
new WeightedModifierType(modifierTypes.PP_UP, 9),
|
new WeightedModifierType(modifierTypes.PP_UP, 9),
|
||||||
new WeightedModifierType(modifierTypes.PP_MAX, 3),
|
new WeightedModifierType(modifierTypes.PP_MAX, 3),
|
||||||
|
@ -1183,7 +1166,7 @@ const enemyBuffModifierPool: ModifierPool = {
|
||||||
new WeightedModifierType(modifierTypes.ENEMY_ATTACK_FREEZE_CHANCE, 2),
|
new WeightedModifierType(modifierTypes.ENEMY_ATTACK_FREEZE_CHANCE, 2),
|
||||||
new WeightedModifierType(modifierTypes.ENEMY_ATTACK_BURN_CHANCE, 2),
|
new WeightedModifierType(modifierTypes.ENEMY_ATTACK_BURN_CHANCE, 2),
|
||||||
new WeightedModifierType(modifierTypes.ENEMY_STATUS_EFFECT_HEAL_CHANCE, 10),
|
new WeightedModifierType(modifierTypes.ENEMY_STATUS_EFFECT_HEAL_CHANCE, 10),
|
||||||
new WeightedModifierType(modifierTypes.ENEMY_ENDURE_CHANCE, 10000),
|
new WeightedModifierType(modifierTypes.ENEMY_ENDURE_CHANCE, 5),
|
||||||
new WeightedModifierType(modifierTypes.ENEMY_FUSED_CHANCE, 1)
|
new WeightedModifierType(modifierTypes.ENEMY_FUSED_CHANCE, 1)
|
||||||
].map(m => { m.setTier(ModifierTier.COMMON); return m; }),
|
].map(m => { m.setTier(ModifierTier.COMMON); return m; }),
|
||||||
[ModifierTier.GREAT]: [
|
[ModifierTier.GREAT]: [
|
||||||
|
@ -1194,12 +1177,12 @@ const enemyBuffModifierPool: ModifierPool = {
|
||||||
new WeightedModifierType(modifierTypes.ENEMY_FUSED_CHANCE, 1)
|
new WeightedModifierType(modifierTypes.ENEMY_FUSED_CHANCE, 1)
|
||||||
].map(m => { m.setTier(ModifierTier.GREAT); return m; }),
|
].map(m => { m.setTier(ModifierTier.GREAT); return m; }),
|
||||||
[ModifierTier.ULTRA]: [
|
[ModifierTier.ULTRA]: [
|
||||||
new WeightedModifierType(modifierTypes.ENEMY_DAMAGE_BOOSTER, 5),
|
new WeightedModifierType(modifierTypes.ENEMY_DAMAGE_BOOSTER, 10),
|
||||||
new WeightedModifierType(modifierTypes.ENEMY_DAMAGE_REDUCTION, 5),
|
new WeightedModifierType(modifierTypes.ENEMY_DAMAGE_REDUCTION, 10),
|
||||||
new WeightedModifierType(modifierTypes.ENEMY_HEAL, 5),
|
new WeightedModifierType(modifierTypes.ENEMY_HEAL, 10),
|
||||||
new WeightedModifierType(modifierTypes.ENEMY_STATUS_EFFECT_HEAL_CHANCE, 5),
|
new WeightedModifierType(modifierTypes.ENEMY_STATUS_EFFECT_HEAL_CHANCE, 10),
|
||||||
new WeightedModifierType(modifierTypes.ENEMY_ENDURE_CHANCE, 5),
|
new WeightedModifierType(modifierTypes.ENEMY_ENDURE_CHANCE, 10),
|
||||||
new WeightedModifierType(modifierTypes.ENEMY_FUSED_CHANCE, 300)
|
new WeightedModifierType(modifierTypes.ENEMY_FUSED_CHANCE, 5)
|
||||||
].map(m => { m.setTier(ModifierTier.ULTRA); return m; }),
|
].map(m => { m.setTier(ModifierTier.ULTRA); return m; }),
|
||||||
[ModifierTier.ROGUE]: [ ].map(m => { m.setTier(ModifierTier.ROGUE); return m; }),
|
[ModifierTier.ROGUE]: [ ].map(m => { m.setTier(ModifierTier.ROGUE); return m; }),
|
||||||
[ModifierTier.MASTER]: [ ].map(m => { m.setTier(ModifierTier.MASTER); return m; })
|
[ModifierTier.MASTER]: [ ].map(m => { m.setTier(ModifierTier.MASTER); return m; })
|
||||||
|
@ -1288,7 +1271,6 @@ export function regenerateModifierPoolThresholds(party: Pokemon[], poolType: Mod
|
||||||
pool[t].reduce((total: integer, modifierType: WeightedModifierType) => {
|
pool[t].reduce((total: integer, modifierType: WeightedModifierType) => {
|
||||||
const weightedModifierType = modifierType as WeightedModifierType;
|
const weightedModifierType = modifierType as WeightedModifierType;
|
||||||
const existingModifiers = party[0].scene.findModifiers(m => (m.type.generatorId || m.type.id) === weightedModifierType.modifierType.id, poolType === ModifierPoolType.PLAYER);
|
const existingModifiers = party[0].scene.findModifiers(m => (m.type.generatorId || m.type.id) === weightedModifierType.modifierType.id, poolType === ModifierPoolType.PLAYER);
|
||||||
existingModifiers.forEach(m => console.log(m.type.name))
|
|
||||||
const itemModifierType = weightedModifierType.modifierType instanceof ModifierTypeGenerator
|
const itemModifierType = weightedModifierType.modifierType instanceof ModifierTypeGenerator
|
||||||
? weightedModifierType.modifierType.generateType(party)
|
? weightedModifierType.modifierType.generateType(party)
|
||||||
: weightedModifierType.modifierType;
|
: weightedModifierType.modifierType;
|
||||||
|
@ -1555,6 +1537,85 @@ export function getPartyLuckValue(party: Pokemon[]): integer {
|
||||||
.reduce((total: integer, value: integer) => total += value, 0), 0, 14);
|
.reduce((total: integer, value: integer) => total += value, 0), 0, 14);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getLuckString(luckValue: integer): string {
|
||||||
|
return [ 'D', 'C', 'C+', 'B-', 'B', 'B+', 'A-', 'A', 'A+', 'A++', 'S', 'S+', 'SS', 'SS+', 'SSS' ][luckValue];
|
||||||
|
(modifierType instanceof ModifierTypeGenerator) {
|
||||||
|
modifierType = (modifierType as ModifierTypeGenerator).generateType(party);
|
||||||
|
if (modifierType === null) {
|
||||||
|
if (player)
|
||||||
|
console.log(ModifierTier[tier], upgradeCount);
|
||||||
|
return getNewModifierTypeOption(party, poolType, tier, upgradeCount, ++retryCount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(modifierType, !player ? '(enemy)' : '');
|
||||||
|
|
||||||
|
return new ModifierTypeOption(modifierType as ModifierType, upgradeCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getDefaultModifierTypeForTier(tier: ModifierTier): ModifierType {
|
||||||
|
let modifierType: ModifierType | WeightedModifierType = modifierPool[tier || ModifierTier.COMMON][0];
|
||||||
|
if (modifierType instanceof WeightedModifierType)
|
||||||
|
modifierType = (modifierType as WeightedModifierType).modifierType;
|
||||||
|
return modifierType;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ModifierTypeOption {
|
||||||
|
public type: ModifierType;
|
||||||
|
public upgradeCount: integer;
|
||||||
|
public cost: integer;
|
||||||
|
|
||||||
|
constructor(type: ModifierType, upgradeCount: integer, cost: number = 0) {
|
||||||
|
this.type = type;
|
||||||
|
this.upgradeCount = upgradeCount;
|
||||||
|
this.cost = Math.min(Math.round(cost), Number.MAX_SAFE_INTEGER);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getPartyLuckValue(party: Pokemon[]): integer {
|
||||||
|
return Phaser.Math.Clamp(party.map(p => p.isFainted() ? 0 : p.getLuck())
|
||||||
|
.reduce((total: integer, value: integer) => total += value, 0), 0, 14);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getLuckString(luckValue: integer): string {
|
||||||
|
return ['D', 'C', 'C+', 'B-', 'B', 'B+', 'A-', 'A', 'A+', 'A++', 'S', 'S+', 'SS', 'SS+', 'SSS'][luckValue];
|
||||||
|
(modifierType as ModifierTypeGenerator).generateType(party);
|
||||||
|
if (modifierType === null) {
|
||||||
|
if (player)
|
||||||
|
console.log(ModifierTier[tier], upgradeCount);
|
||||||
|
return getNewModifierTypeOption(party, poolType, tier, upgradeCount, ++retryCount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(modifierType, !player ? '(enemy)' : '');
|
||||||
|
|
||||||
|
return new ModifierTypeOption(modifierType as ModifierType, upgradeCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getDefaultModifierTypeForTier(tier: ModifierTier): ModifierType {
|
||||||
|
let modifierType: ModifierType | WeightedModifierType = modifierPool[tier || ModifierTier.COMMON][0];
|
||||||
|
if (modifierType instanceof WeightedModifierType)
|
||||||
|
modifierType = (modifierType as WeightedModifierType).modifierType;
|
||||||
|
return modifierType;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ModifierTypeOption {
|
||||||
|
public type: ModifierType;
|
||||||
|
public upgradeCount: integer;
|
||||||
|
public cost: integer;
|
||||||
|
|
||||||
|
constructor(type: ModifierType, upgradeCount: integer, cost: number = 0) {
|
||||||
|
this.type = type;
|
||||||
|
this.upgradeCount = upgradeCount;
|
||||||
|
this.cost = Math.min(Math.round(cost), Number.MAX_SAFE_INTEGER);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getPartyLuckValue(party: Pokemon[]): integer {
|
||||||
|
return Phaser.Math.Clamp(party.map(p => p.isFainted() ? 0 : p.getLuck())
|
||||||
|
.reduce((total: integer, value: integer) => total += value, 0), 0, 14);
|
||||||
|
}
|
||||||
|
|
||||||
export function getLuckString(luckValue: integer): string {
|
export function getLuckString(luckValue: integer): string {
|
||||||
return ['D', 'C', 'C+', 'B-', 'B', 'B+', 'A-', 'A', 'A+', 'A++', 'S', 'S+', 'SS', 'SS+', 'SSS'][luckValue];
|
return ['D', 'C', 'C+', 'B-', 'B', 'B+', 'A-', 'A', 'A+', 'A++', 'S', 'S+', 'SS', 'SS+', 'SSS'][luckValue];
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@ import { Biome } from "./data/enums/biome";
|
||||||
import { Moves } from "./data/enums/moves";
|
import { Moves } from "./data/enums/moves";
|
||||||
import { WeatherType } from "./data/weather";
|
import { WeatherType } from "./data/weather";
|
||||||
|
|
||||||
export const SEED_OVERRIDE = '';
|
export const SEED_OVERRIDE = 'b3DoubDG5i4izShAO06Z2V2y';
|
||||||
export const STARTER_SPECIES_OVERRIDE = 0;
|
export const STARTER_SPECIES_OVERRIDE = 0;
|
||||||
export const STARTER_FORM_OVERRIDE = 0;
|
export const STARTER_FORM_OVERRIDE = 0;
|
||||||
export const STARTING_LEVEL_OVERRIDE = 0;
|
export const STARTING_LEVEL_OVERRIDE = 0;
|
||||||
|
|
Loading…
Reference in New Issue