Compare commits
No commits in common. "e84bd3ac89e50b2ee1e2286a60594718509a73da" and "61cc7a619fd0f4f6e4b265e11e94c1e3f185c9da" have entirely different histories.
e84bd3ac89
...
61cc7a619f
@ -146,8 +146,8 @@ body {
|
|||||||
margin-left: 10%;
|
margin-left: 10%;
|
||||||
}
|
}
|
||||||
|
|
||||||
#touchControls:not([data-ui-mode='STARTER_SELECT']):not([data-ui-mode='SETTINGS']):not([data-ui-mode='SETTINGS_DISPLAY']):not([data-ui-mode='SETTINGS_AUDIO']):not([data-ui-mode='SETTINGS_GAMEPAD']):not([data-ui-mode='SETTINGS_KEYBOARD']) #apad .apadRectBtnContainer > .apadSqBtn,
|
#touchControls:not([data-ui-mode='STARTER_SELECT']):not([data-ui-mode='SETTINGS']):not([data-ui-mode='SETTINGS_ACCESSIBILITY']):not([data-ui-mode='SETTINGS_GAMEPAD']):not([data-ui-mode='SETTINGS_KEYBOARD']) #apad .apadRectBtnContainer > .apadSqBtn,
|
||||||
#touchControls:not([data-ui-mode='STARTER_SELECT']):not([data-ui-mode='SETTINGS']):not([data-ui-mode='SETTINGS_DISPLAY']):not([data-ui-mode='SETTINGS_AUDIO']):not([data-ui-mode='SETTINGS_GAMEPAD']):not([data-ui-mode='SETTINGS_KEYBOARD']) #apad .apadSqBtnContainer
|
#touchControls:not([data-ui-mode='STARTER_SELECT']):not([data-ui-mode='SETTINGS']):not([data-ui-mode='SETTINGS_ACCESSIBILITY']):not([data-ui-mode='SETTINGS_GAMEPAD']):not([data-ui-mode='SETTINGS_KEYBOARD']) #apad .apadSqBtnContainer
|
||||||
{
|
{
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
BIN
public/images/ui/dawn_icon.png
Normal file
After Width: | Height: | Size: 581 B |
Before Width: | Height: | Size: 186 B |
Before Width: | Height: | Size: 347 B |
Before Width: | Height: | Size: 273 B |
BIN
public/images/ui/day_icon.png
Normal file
After Width: | Height: | Size: 593 B |
Before Width: | Height: | Size: 186 B |
Before Width: | Height: | Size: 398 B |
Before Width: | Height: | Size: 245 B |
BIN
public/images/ui/dusk_icon.png
Normal file
After Width: | Height: | Size: 534 B |
Before Width: | Height: | Size: 186 B |
Before Width: | Height: | Size: 388 B |
Before Width: | Height: | Size: 235 B |
BIN
public/images/ui/legacy/dawn_icon.png
Normal file
After Width: | Height: | Size: 327 B |
Before Width: | Height: | Size: 150 B |
Before Width: | Height: | Size: 249 B |
Before Width: | Height: | Size: 239 B |
BIN
public/images/ui/legacy/day_icon.png
Normal file
After Width: | Height: | Size: 285 B |
Before Width: | Height: | Size: 186 B |
Before Width: | Height: | Size: 255 B |
Before Width: | Height: | Size: 151 B |
BIN
public/images/ui/legacy/dusk_icon.png
Normal file
After Width: | Height: | Size: 300 B |
Before Width: | Height: | Size: 150 B |
Before Width: | Height: | Size: 252 B |
Before Width: | Height: | Size: 219 B |
BIN
public/images/ui/legacy/night_icon.png
Normal file
After Width: | Height: | Size: 288 B |
Before Width: | Height: | Size: 150 B |
Before Width: | Height: | Size: 240 B |
Before Width: | Height: | Size: 120 B |
BIN
public/images/ui/night_icon.png
Normal file
After Width: | Height: | Size: 686 B |
Before Width: | Height: | Size: 186 B |
Before Width: | Height: | Size: 440 B |
Before Width: | Height: | Size: 271 B |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.8 KiB |
@ -20,11 +20,6 @@ export enum BattleSceneEventType {
|
|||||||
*/
|
*/
|
||||||
BERRY_USED = "onBerryUsed",
|
BERRY_USED = "onBerryUsed",
|
||||||
|
|
||||||
/**
|
|
||||||
* Triggers at the start of each new encounter
|
|
||||||
* @see {@linkcode EncounterPhaseEvent}
|
|
||||||
*/
|
|
||||||
ENCOUNTER_PHASE = "onEncounterPhase",
|
|
||||||
/**
|
/**
|
||||||
* Triggers on the first turn of a new battle
|
* Triggers on the first turn of a new battle
|
||||||
* @see {@linkcode TurnInitEvent}
|
* @see {@linkcode TurnInitEvent}
|
||||||
@ -90,15 +85,6 @@ export class BerryUsedEvent extends Event {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Container class for {@linkcode BattleSceneEventType.ENCOUNTER_PHASE} events
|
|
||||||
* @extends Event
|
|
||||||
*/
|
|
||||||
export class EncounterPhaseEvent extends Event {
|
|
||||||
constructor() {
|
|
||||||
super(BattleSceneEventType.ENCOUNTER_PHASE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/**
|
/**
|
||||||
* Container class for {@linkcode BattleSceneEventType.TURN_INIT} events
|
* Container class for {@linkcode BattleSceneEventType.TURN_INIT} events
|
||||||
* @extends Event
|
* @extends Event
|
||||||
|
@ -11,8 +11,7 @@ import { Phase } from "./phase";
|
|||||||
import { initGameSpeed } from "./system/game-speed";
|
import { initGameSpeed } from "./system/game-speed";
|
||||||
import { Biome } from "./data/enums/biome";
|
import { Biome } from "./data/enums/biome";
|
||||||
import { Arena, ArenaBase } from "./field/arena";
|
import { Arena, ArenaBase } from "./field/arena";
|
||||||
import { GameData } from "./system/game-data";
|
import { GameData, PlayerGender } from "./system/game-data";
|
||||||
import { PlayerGender } from "./data/enums/player-gender";
|
|
||||||
import { TextStyle, addTextObject } from "./ui/text";
|
import { TextStyle, addTextObject } from "./ui/text";
|
||||||
import { Moves } from "./data/enums/moves";
|
import { Moves } from "./data/enums/moves";
|
||||||
import { allMoves } from "./data/move";
|
import { allMoves } from "./data/move";
|
||||||
@ -60,7 +59,6 @@ import {UiInputs} from "./ui-inputs";
|
|||||||
import { MoneyFormat } from "./enums/money-format";
|
import { MoneyFormat } from "./enums/money-format";
|
||||||
import { NewArenaEvent } from "./battle-scene-events";
|
import { NewArenaEvent } from "./battle-scene-events";
|
||||||
import ArenaFlyout from "./ui/arena-flyout";
|
import ArenaFlyout from "./ui/arena-flyout";
|
||||||
import { EaseType } from "./ui/enums/ease-type";
|
|
||||||
|
|
||||||
export const bypassLogin = import.meta.env.VITE_BYPASS_LOGIN === "1";
|
export const bypassLogin = import.meta.env.VITE_BYPASS_LOGIN === "1";
|
||||||
|
|
||||||
@ -72,20 +70,15 @@ const expSpriteKeys: string[] = [];
|
|||||||
|
|
||||||
export let starterColors: StarterColors;
|
export let starterColors: StarterColors;
|
||||||
interface StarterColors {
|
interface StarterColors {
|
||||||
[key: string]: [string, string]
|
[key: string]: [string, string]
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface PokeballCounts {
|
export interface PokeballCounts {
|
||||||
[pb: string]: integer;
|
[pb: string]: integer;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type AnySound = Phaser.Sound.WebAudioSound | Phaser.Sound.HTML5AudioSound | Phaser.Sound.NoAudioSound;
|
export type AnySound = Phaser.Sound.WebAudioSound | Phaser.Sound.HTML5AudioSound | Phaser.Sound.NoAudioSound;
|
||||||
|
|
||||||
export interface InfoToggle {
|
|
||||||
toggleInfo(force?: boolean): void;
|
|
||||||
isActive(): boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
export default class BattleScene extends SceneBase {
|
export default class BattleScene extends SceneBase {
|
||||||
public rexUI: UIPlugin;
|
public rexUI: UIPlugin;
|
||||||
public inputController: InputsController;
|
public inputController: InputsController;
|
||||||
@ -101,11 +94,8 @@ export default class BattleScene extends SceneBase {
|
|||||||
public reroll: boolean = false;
|
public reroll: boolean = false;
|
||||||
public showMovesetFlyout: boolean = true;
|
public showMovesetFlyout: boolean = true;
|
||||||
public showArenaFlyout: boolean = true;
|
public showArenaFlyout: boolean = true;
|
||||||
public showTimeOfDayWidget: boolean = true;
|
|
||||||
public timeOfDayAnimation: EaseType = EaseType.NONE;
|
|
||||||
public showLevelUpStats: boolean = true;
|
public showLevelUpStats: boolean = true;
|
||||||
public enableTutorials: boolean = import.meta.env.VITE_BYPASS_TUTORIAL === "1";
|
public enableTutorials: boolean = import.meta.env.VITE_BYPASS_TUTORIAL === "1";
|
||||||
public enableMoveInfo: boolean = true;
|
|
||||||
public enableRetries: boolean = false;
|
public enableRetries: boolean = false;
|
||||||
/**
|
/**
|
||||||
* Determines the condition for a notification should be shown for Candy Upgrades
|
* Determines the condition for a notification should be shown for Candy Upgrades
|
||||||
@ -130,28 +120,22 @@ export default class BattleScene extends SceneBase {
|
|||||||
public skipSeenDialogues: boolean = false;
|
public skipSeenDialogues: boolean = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines the experience gain display mode.
|
* Defines the experience gain display mode.
|
||||||
*
|
*
|
||||||
* @remarks
|
* @remarks
|
||||||
* The `expParty` can have several modes:
|
* The `expParty` can have several modes:
|
||||||
* - `0` - Default: The normal experience gain display, nothing changed.
|
* - `0` - Default: The normal experience gain display, nothing changed.
|
||||||
* - `1` - Level Up Notification: Displays the level up in the small frame instead of a message.
|
* - `1` - Level Up Notification: Displays the level up in the small frame instead of a message.
|
||||||
* - `2` - Skip: No level up frame nor message.
|
* - `2` - Skip: No level up frame nor message.
|
||||||
*
|
*
|
||||||
* Modes `1` and `2` are still compatible with stats display, level up, new move, etc.
|
* Modes `1` and `2` are still compatible with stats display, level up, new move, etc.
|
||||||
* @default 0 - Uses the default normal experience gain display.
|
* @default 0 - Uses the default normal experience gain display.
|
||||||
*/
|
*/
|
||||||
public expParty: integer = 0;
|
public expParty: integer = 0;
|
||||||
public hpBarSpeed: integer = 0;
|
public hpBarSpeed: integer = 0;
|
||||||
public fusionPaletteSwaps: boolean = true;
|
public fusionPaletteSwaps: boolean = true;
|
||||||
public enableTouchControls: boolean = false;
|
public enableTouchControls: boolean = false;
|
||||||
public enableVibration: boolean = false;
|
public enableVibration: boolean = false;
|
||||||
/**
|
|
||||||
* Determines the selected battle style.
|
|
||||||
* - 0 = 'Shift'
|
|
||||||
* - 1 = 'Set' - The option to switch the active pokemon at the start of a battle will not display.
|
|
||||||
*/
|
|
||||||
public battleStyle: integer = 0;
|
|
||||||
|
|
||||||
public disableMenu: boolean = false;
|
public disableMenu: boolean = false;
|
||||||
|
|
||||||
@ -225,8 +209,6 @@ export default class BattleScene extends SceneBase {
|
|||||||
public rngSeedOverride: string = "";
|
public rngSeedOverride: string = "";
|
||||||
public rngOffset: integer = 0;
|
public rngOffset: integer = 0;
|
||||||
|
|
||||||
private infoToggles: InfoToggle[] = [];
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allows subscribers to listen for events
|
* Allows subscribers to listen for events
|
||||||
*
|
*
|
||||||
@ -533,7 +515,7 @@ export default class BattleScene extends SceneBase {
|
|||||||
this.playTimeTimer = this.time.addEvent({
|
this.playTimeTimer = this.time.addEvent({
|
||||||
delay: Utils.fixedInt(1000),
|
delay: Utils.fixedInt(1000),
|
||||||
repeat: -1,
|
repeat: -1,
|
||||||
callback: () => {
|
callback: () => {
|
||||||
if (this.gameData) {
|
if (this.gameData) {
|
||||||
this.gameData.gameStats.playTime++;
|
this.gameData.gameStats.playTime++;
|
||||||
}
|
}
|
||||||
@ -617,25 +599,25 @@ export default class BattleScene extends SceneBase {
|
|||||||
|
|
||||||
/*const loadPokemonAssets: Promise<void>[] = [];
|
/*const loadPokemonAssets: Promise<void>[] = [];
|
||||||
|
|
||||||
for (let s of Object.keys(speciesStarters)) {
|
for (let s of Object.keys(speciesStarters)) {
|
||||||
const species = getPokemonSpecies(parseInt(s));
|
const species = getPokemonSpecies(parseInt(s));
|
||||||
loadPokemonAssets.push(species.loadAssets(this, false, 0, false));
|
loadPokemonAssets.push(species.loadAssets(this, false, 0, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
Promise.all(loadPokemonAssets).then(() => {
|
Promise.all(loadPokemonAssets).then(() => {
|
||||||
const starterCandyColors = {};
|
const starterCandyColors = {};
|
||||||
const rgbaToHexFunc = (r, g, b) => [r, g, b].map(x => x.toString(16).padStart(2, '0')).join('');
|
const rgbaToHexFunc = (r, g, b) => [r, g, b].map(x => x.toString(16).padStart(2, '0')).join('');
|
||||||
|
|
||||||
for (let s of Object.keys(speciesStarters)) {
|
for (let s of Object.keys(speciesStarters)) {
|
||||||
const species = getPokemonSpecies(parseInt(s));
|
const species = getPokemonSpecies(parseInt(s));
|
||||||
|
|
||||||
starterCandyColors[species.speciesId] = species.generateCandyColors(this).map(c => rgbaToHexFunc(c[0], c[1], c[2]));
|
starterCandyColors[species.speciesId] = species.generateCandyColors(this).map(c => rgbaToHexFunc(c[0], c[1], c[2]));
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(JSON.stringify(starterCandyColors));
|
console.log(JSON.stringify(starterCandyColors));
|
||||||
|
|
||||||
resolve();
|
resolve();
|
||||||
});*/
|
});*/
|
||||||
|
|
||||||
resolve();
|
resolve();
|
||||||
});
|
});
|
||||||
@ -700,16 +682,6 @@ export default class BattleScene extends SceneBase {
|
|||||||
: ret;
|
: ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
// store info toggles to be accessible by the ui
|
|
||||||
addInfoToggle(infoToggle: InfoToggle): void {
|
|
||||||
this.infoToggles.push(infoToggle);
|
|
||||||
}
|
|
||||||
|
|
||||||
// return the stored info toggles; used by ui-inputs
|
|
||||||
getInfoToggles(activeOnly: boolean = false): InfoToggle[] {
|
|
||||||
return activeOnly ? this.infoToggles.filter(t => t?.isActive()) : this.infoToggles;
|
|
||||||
}
|
|
||||||
|
|
||||||
getPokemonById(pokemonId: integer): Pokemon {
|
getPokemonById(pokemonId: integer): Pokemon {
|
||||||
const findInParty = (party: Pokemon[]) => party.find(p => p.id === pokemonId);
|
const findInParty = (party: Pokemon[]) => party.find(p => p.id === pokemonId);
|
||||||
return findInParty(this.getParty()) || findInParty(this.getEnemyParty());
|
return findInParty(this.getParty()) || findInParty(this.getEnemyParty());
|
||||||
@ -756,7 +728,7 @@ export default class BattleScene extends SceneBase {
|
|||||||
const container = this.add.container(x, y);
|
const container = this.add.container(x, y);
|
||||||
|
|
||||||
const icon = this.add.sprite(0, 0, pokemon.getIconAtlasKey(ignoreOverride));
|
const icon = this.add.sprite(0, 0, pokemon.getIconAtlasKey(ignoreOverride));
|
||||||
icon.setFrame(pokemon.getIconId(true));
|
icon.setFrame(pokemon.getIconId(true));
|
||||||
// Temporary fix to show pokemon's default icon if variant icon doesn't exist
|
// Temporary fix to show pokemon's default icon if variant icon doesn't exist
|
||||||
if (icon.frame.name !== pokemon.getIconId(true)) {
|
if (icon.frame.name !== pokemon.getIconId(true)) {
|
||||||
console.log(`${pokemon.name}'s variant icon does not exist. Replacing with default.`);
|
console.log(`${pokemon.name}'s variant icon does not exist. Replacing with default.`);
|
||||||
@ -1342,14 +1314,6 @@ export default class BattleScene extends SceneBase {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
showEnemyModifierBar(): void {
|
|
||||||
this.enemyModifierBar.setVisible(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
hideEnemyModifierBar(): void {
|
|
||||||
this.enemyModifierBar.setVisible(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
updateBiomeWaveText(): void {
|
updateBiomeWaveText(): void {
|
||||||
const isBoss = !(this.currentBattle.waveIndex % 10);
|
const isBoss = !(this.currentBattle.waveIndex % 10);
|
||||||
const biomeString: string = getBiomeName(this.arena.biomeType);
|
const biomeString: string = getBiomeName(this.arena.biomeType);
|
||||||
@ -1364,7 +1328,7 @@ export default class BattleScene extends SceneBase {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const formattedMoney =
|
const formattedMoney =
|
||||||
this.moneyFormat === MoneyFormat.ABBREVIATED ? Utils.formatFancyLargeNumber(this.money, 3) : this.money.toLocaleString();
|
this.moneyFormat === MoneyFormat.ABBREVIATED ? Utils.formatFancyLargeNumber(this.money, 3) : this.money.toLocaleString();
|
||||||
this.moneyText.setText(`₽${formattedMoney}`);
|
this.moneyText.setText(`₽${formattedMoney}`);
|
||||||
this.fieldUI.moveAbove(this.moneyText, this.luckText);
|
this.fieldUI.moveAbove(this.moneyText, this.luckText);
|
||||||
if (forceVisible) {
|
if (forceVisible) {
|
||||||
@ -1455,7 +1419,7 @@ export default class BattleScene extends SceneBase {
|
|||||||
|
|
||||||
randomSpecies(waveIndex: integer, level: integer, fromArenaPool?: boolean, speciesFilter?: PokemonSpeciesFilter, filterAllEvolutions?: boolean): PokemonSpecies {
|
randomSpecies(waveIndex: integer, level: integer, fromArenaPool?: boolean, speciesFilter?: PokemonSpeciesFilter, filterAllEvolutions?: boolean): PokemonSpecies {
|
||||||
if (fromArenaPool) {
|
if (fromArenaPool) {
|
||||||
return this.arena.randomSpecies(waveIndex, level,null , getPartyLuckValue(this.party));
|
return this.arena.randomSpecies(waveIndex, level);
|
||||||
}
|
}
|
||||||
const filteredSpecies = speciesFilter ? [...new Set(allSpecies.filter(s => s.isCatchable()).filter(speciesFilter).map(s => {
|
const filteredSpecies = speciesFilter ? [...new Set(allSpecies.filter(s => s.isCatchable()).filter(speciesFilter).map(s => {
|
||||||
if (!filterAllEvolutions) {
|
if (!filterAllEvolutions) {
|
||||||
@ -2014,7 +1978,7 @@ export default class BattleScene extends SceneBase {
|
|||||||
const newItemModifier = itemModifier.clone() as PokemonHeldItemModifier;
|
const newItemModifier = itemModifier.clone() as PokemonHeldItemModifier;
|
||||||
newItemModifier.pokemonId = target.id;
|
newItemModifier.pokemonId = target.id;
|
||||||
const matchingModifier = target.scene.findModifier(m => m instanceof PokemonHeldItemModifier
|
const matchingModifier = target.scene.findModifier(m => m instanceof PokemonHeldItemModifier
|
||||||
&& (m as PokemonHeldItemModifier).matchType(itemModifier) && m.pokemonId === target.id, target.isPlayer()) as PokemonHeldItemModifier;
|
&& (m as PokemonHeldItemModifier).matchType(itemModifier) && m.pokemonId === target.id, target.isPlayer()) as PokemonHeldItemModifier;
|
||||||
let removeOld = true;
|
let removeOld = true;
|
||||||
if (matchingModifier) {
|
if (matchingModifier) {
|
||||||
const maxStackCount = matchingModifier.getMaxStackCount(target.scene);
|
const maxStackCount = matchingModifier.getMaxStackCount(target.scene);
|
||||||
@ -2118,8 +2082,8 @@ export default class BattleScene extends SceneBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes all modifiers from enemy of PersistentModifier type
|
* Removes all modifiers from enemy of PersistentModifier type
|
||||||
*/
|
*/
|
||||||
clearEnemyModifiers(): void {
|
clearEnemyModifiers(): void {
|
||||||
const modifiersToRemove = this.enemyModifiers.filter(m => m instanceof PersistentModifier);
|
const modifiersToRemove = this.enemyModifiers.filter(m => m instanceof PersistentModifier);
|
||||||
for (const m of modifiersToRemove) {
|
for (const m of modifiersToRemove) {
|
||||||
@ -2129,8 +2093,8 @@ export default class BattleScene extends SceneBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes all modifiers from enemy of PokemonHeldItemModifier type
|
* Removes all modifiers from enemy of PokemonHeldItemModifier type
|
||||||
*/
|
*/
|
||||||
clearEnemyHeldItemModifiers(): void {
|
clearEnemyHeldItemModifiers(): void {
|
||||||
const modifiersToRemove = this.enemyModifiers.filter(m => m instanceof PokemonHeldItemModifier);
|
const modifiersToRemove = this.enemyModifiers.filter(m => m instanceof PokemonHeldItemModifier);
|
||||||
for (const m of modifiersToRemove) {
|
for (const m of modifiersToRemove) {
|
||||||
|
@ -8,7 +8,7 @@ import { Moves } from "./data/enums/moves";
|
|||||||
import { TrainerType } from "./data/enums/trainer-type";
|
import { TrainerType } from "./data/enums/trainer-type";
|
||||||
import { GameMode } from "./game-mode";
|
import { GameMode } from "./game-mode";
|
||||||
import { BattleSpec } from "./enums/battle-spec";
|
import { BattleSpec } from "./enums/battle-spec";
|
||||||
import { PlayerGender } from "./data/enums/player-gender";
|
import { PlayerGender } from "./system/game-data";
|
||||||
import { MoneyMultiplierModifier, PokemonHeldItemModifier } from "./modifier/modifier";
|
import { MoneyMultiplierModifier, PokemonHeldItemModifier } from "./modifier/modifier";
|
||||||
import { PokeballType } from "./data/pokeball";
|
import { PokeballType } from "./data/pokeball";
|
||||||
import {trainerConfigs} from "#app/data/trainer-config";
|
import {trainerConfigs} from "#app/data/trainer-config";
|
||||||
|
@ -3,7 +3,7 @@ import { Type } from "./type";
|
|||||||
import * as Utils from "../utils";
|
import * as Utils from "../utils";
|
||||||
import { BattleStat, getBattleStatName } from "./battle-stat";
|
import { BattleStat, getBattleStatName } from "./battle-stat";
|
||||||
import { MovePhase, PokemonHealPhase, ShowAbilityPhase, StatChangePhase } from "../phases";
|
import { MovePhase, PokemonHealPhase, ShowAbilityPhase, StatChangePhase } from "../phases";
|
||||||
import { getPokemonMessage, getPokemonNameWithAffix } from "../messages";
|
import { getPokemonMessage, getPokemonPrefix } from "../messages";
|
||||||
import { Weather, WeatherType } from "./weather";
|
import { Weather, WeatherType } from "./weather";
|
||||||
import { BattlerTag } from "./battler-tags";
|
import { BattlerTag } from "./battler-tags";
|
||||||
import { BattlerTagType } from "./enums/battler-tag-type";
|
import { BattlerTagType } from "./enums/battler-tag-type";
|
||||||
@ -23,7 +23,7 @@ import { Command } from "../ui/command-ui-handler";
|
|||||||
import { BerryModifierType } from "#app/modifier/modifier-type";
|
import { BerryModifierType } from "#app/modifier/modifier-type";
|
||||||
import { getPokeballName } from "./pokeball";
|
import { getPokeballName } from "./pokeball";
|
||||||
import { Species } from "./enums/species";
|
import { Species } from "./enums/species";
|
||||||
import { BattlerIndex } from "#app/battle";
|
import {BattlerIndex} from "#app/battle";
|
||||||
|
|
||||||
export class Ability implements Localizable {
|
export class Ability implements Localizable {
|
||||||
public id: Abilities;
|
public id: Abilities;
|
||||||
@ -156,7 +156,7 @@ export class BlockRecoilDamageAttr extends AbAttr {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]) {
|
getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]) {
|
||||||
return i18next.t("abilityTriggers:blockRecoilDamage", {pokemonName: getPokemonNameWithAffix(pokemon), abilityName: abilityName});
|
return i18next.t("abilityTriggers:blockRecoilDamage", {pokemonName: `${getPokemonPrefix(pokemon)}${pokemon.name}`, abilityName: abilityName});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -878,7 +878,7 @@ export class PostDefendPerishSongAbAttr extends PostDefendAbAttr {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string {
|
getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string {
|
||||||
return i18next.t("abilityTriggers:perishBody", {pokemonName: getPokemonNameWithAffix(pokemon), abilityName: abilityName});
|
return i18next.t("abilityTriggers:perishBody", {pokemonName: `${getPokemonPrefix(pokemon)}${pokemon.name}`, abilityName: abilityName});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2462,7 +2462,7 @@ export class PostTurnStatusHealAbAttr extends PostTurnAbAttr {
|
|||||||
* @returns Returns true if healed from status, false if not
|
* @returns Returns true if healed from status, false if not
|
||||||
*/
|
*/
|
||||||
applyPostTurn(pokemon: Pokemon, passive: boolean, args: any[]): boolean | Promise<boolean> {
|
applyPostTurn(pokemon: Pokemon, passive: boolean, args: any[]): boolean | Promise<boolean> {
|
||||||
if (this.effects.includes(pokemon.status?.effect)) {
|
if (this.effects.includes(pokemon.status.effect)) {
|
||||||
if (pokemon.getMaxHp() !== pokemon.hp) {
|
if (pokemon.getMaxHp() !== pokemon.hp) {
|
||||||
const scene = pokemon.scene;
|
const scene = pokemon.scene;
|
||||||
const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name;
|
const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name;
|
||||||
@ -2666,7 +2666,7 @@ export class PostTurnHurtIfSleepingAbAttr extends PostTurnAbAttr {
|
|||||||
for (const opp of pokemon.getOpponents()) {
|
for (const opp of pokemon.getOpponents()) {
|
||||||
if (opp.status?.effect === StatusEffect.SLEEP || opp.hasAbility(Abilities.COMATOSE)) {
|
if (opp.status?.effect === StatusEffect.SLEEP || opp.hasAbility(Abilities.COMATOSE)) {
|
||||||
opp.damageAndUpdate(Math.floor(Math.max(1, opp.getMaxHp() / 8)), HitResult.OTHER);
|
opp.damageAndUpdate(Math.floor(Math.max(1, opp.getMaxHp() / 8)), HitResult.OTHER);
|
||||||
pokemon.scene.queueMessage(i18next.t("abilityTriggers:badDreams", {pokemonName: getPokemonNameWithAffix(opp)}));
|
pokemon.scene.queueMessage(i18next.t("abilityTriggers:badDreams", {pokemonName: `${getPokemonPrefix(opp)}${opp.name}`}));
|
||||||
hadEffect = true;
|
hadEffect = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2764,12 +2764,8 @@ export class PostDancingMoveAbAttr extends PostMoveUsedAbAttr {
|
|||||||
* @return true if the Dancer ability was resolved
|
* @return true if the Dancer ability was resolved
|
||||||
*/
|
*/
|
||||||
applyPostMoveUsed(dancer: Pokemon, move: PokemonMove, source: Pokemon, targets: BattlerIndex[], args: any[]): boolean | Promise<boolean> {
|
applyPostMoveUsed(dancer: Pokemon, move: PokemonMove, source: Pokemon, targets: BattlerIndex[], args: any[]): boolean | Promise<boolean> {
|
||||||
// List of tags that prevent the Dancer from replicating the move
|
|
||||||
const forbiddenTags = [BattlerTagType.FLYING, BattlerTagType.UNDERWATER,
|
|
||||||
BattlerTagType.UNDERGROUND, BattlerTagType.HIDDEN];
|
|
||||||
// The move to replicate cannot come from the Dancer
|
// The move to replicate cannot come from the Dancer
|
||||||
if (source.getBattlerIndex() !== dancer.getBattlerIndex()
|
if (source.getBattlerIndex() !== dancer.getBattlerIndex()) {
|
||||||
&& !dancer.summonData.tags.some(tag => forbiddenTags.includes(tag.tagType))) {
|
|
||||||
// If the move is an AttackMove or a StatusMove the Dancer must replicate the move on the source of the Dance
|
// If the move is an AttackMove or a StatusMove the Dancer must replicate the move on the source of the Dance
|
||||||
if (move.getMove() instanceof AttackMove || move.getMove() instanceof StatusMove) {
|
if (move.getMove() instanceof AttackMove || move.getMove() instanceof StatusMove) {
|
||||||
const target = this.getTarget(dancer, source, targets);
|
const target = this.getTarget(dancer, source, targets);
|
||||||
@ -2778,9 +2774,8 @@ export class PostDancingMoveAbAttr extends PostMoveUsedAbAttr {
|
|||||||
// If the move is a SelfStatusMove (ie. Swords Dance) the Dancer should replicate it on itself
|
// If the move is a SelfStatusMove (ie. Swords Dance) the Dancer should replicate it on itself
|
||||||
dancer.scene.unshiftPhase(new MovePhase(dancer.scene, dancer, [dancer.getBattlerIndex()], move, true));
|
dancer.scene.unshiftPhase(new MovePhase(dancer.scene, dancer, [dancer.getBattlerIndex()], move, true));
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { CommonAnim, CommonBattleAnim } from "./battle-anims";
|
import { CommonAnim, CommonBattleAnim } from "./battle-anims";
|
||||||
import { CommonAnimPhase, MoveEffectPhase, MovePhase, PokemonHealPhase, ShowAbilityPhase, StatChangePhase } from "../phases";
|
import { CommonAnimPhase, MoveEffectPhase, MovePhase, PokemonHealPhase, ShowAbilityPhase, StatChangePhase } from "../phases";
|
||||||
import { getPokemonMessage, getPokemonNameWithAffix } from "../messages";
|
import { getPokemonMessage, getPokemonPrefix } from "../messages";
|
||||||
import Pokemon, { MoveResult, HitResult } from "../field/pokemon";
|
import Pokemon, { MoveResult, HitResult } from "../field/pokemon";
|
||||||
import { Stat, getStatName } from "./pokemon-stat";
|
import { Stat, getStatName } from "./pokemon-stat";
|
||||||
import { StatusEffect } from "./status-effect";
|
import { StatusEffect } from "./status-effect";
|
||||||
@ -200,9 +200,6 @@ export class InterruptedTag extends BattlerTag {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* BattlerTag that represents the {@link https://bulbapedia.bulbagarden.net/wiki/Confusion_(status_condition)}
|
|
||||||
*/
|
|
||||||
export class ConfusedTag extends BattlerTag {
|
export class ConfusedTag extends BattlerTag {
|
||||||
constructor(turnCount: integer, sourceMove: Moves) {
|
constructor(turnCount: integer, sourceMove: Moves) {
|
||||||
super(BattlerTagType.CONFUSED, BattlerTagLapseType.MOVE, turnCount, sourceMove);
|
super(BattlerTagType.CONFUSED, BattlerTagLapseType.MOVE, turnCount, sourceMove);
|
||||||
@ -238,8 +235,7 @@ export class ConfusedTag extends BattlerTag {
|
|||||||
pokemon.scene.queueMessage(getPokemonMessage(pokemon, " is\nconfused!"));
|
pokemon.scene.queueMessage(getPokemonMessage(pokemon, " is\nconfused!"));
|
||||||
pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, pokemon.getBattlerIndex(), undefined, CommonAnim.CONFUSION));
|
pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, pokemon.getBattlerIndex(), undefined, CommonAnim.CONFUSION));
|
||||||
|
|
||||||
// 1/3 chance of hitting self with a 40 base power move
|
if (pokemon.randSeedInt(3)) {
|
||||||
if (pokemon.randSeedInt(3) === 0) {
|
|
||||||
const atk = pokemon.getBattleStat(Stat.ATK);
|
const atk = pokemon.getBattleStat(Stat.ATK);
|
||||||
const def = pokemon.getBattleStat(Stat.DEF);
|
const def = pokemon.getBattleStat(Stat.DEF);
|
||||||
const damage = Math.ceil(((((2 * pokemon.level / 5 + 2) * 40 * atk / def) / 50) + 2) * (pokemon.randSeedInt(15, 85) / 100));
|
const damage = Math.ceil(((((2 * pokemon.level / 5 + 2) * 40 * atk / def) / 50) + 2) * (pokemon.randSeedInt(15, 85) / 100));
|
||||||
@ -803,7 +799,7 @@ export class ThunderCageTag extends DamagingTrapTag {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getTrapMessage(pokemon: Pokemon): string {
|
getTrapMessage(pokemon: Pokemon): string {
|
||||||
return getPokemonMessage(pokemon.scene.getPokemonById(this.sourceId), ` trapped\n${getPokemonNameWithAffix(pokemon)}!`);
|
return getPokemonMessage(pokemon.scene.getPokemonById(this.sourceId), ` trapped\n${getPokemonPrefix(pokemon).toLowerCase()}${pokemon.name}!`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -813,7 +809,7 @@ export class InfestationTag extends DamagingTrapTag {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getTrapMessage(pokemon: Pokemon): string {
|
getTrapMessage(pokemon: Pokemon): string {
|
||||||
return getPokemonMessage(pokemon, ` has been afflicted \nwith an infestation by ${getPokemonNameWithAffix(pokemon.scene.getPokemonById(this.sourceId))}!`);
|
return getPokemonMessage(pokemon, ` has been afflicted \nwith an infestation by ${getPokemonPrefix(pokemon.scene.getPokemonById(this.sourceId))}${pokemon.scene.getPokemonById(this.sourceId).name}!`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
/**
|
|
||||||
* enum for the game data types
|
|
||||||
*/
|
|
||||||
export enum GameDataType {
|
|
||||||
SYSTEM,
|
|
||||||
SESSION,
|
|
||||||
SETTINGS,
|
|
||||||
TUTORIALS,
|
|
||||||
SEEN_DIALOGUES
|
|
||||||
}
|
|
@ -1,7 +0,0 @@
|
|||||||
/**
|
|
||||||
* enum for passive
|
|
||||||
*/
|
|
||||||
export enum Passive {
|
|
||||||
UNLOCKED = 1,
|
|
||||||
ENABLED = 2
|
|
||||||
}
|
|
@ -1,8 +0,0 @@
|
|||||||
/**
|
|
||||||
* enum for the players gender
|
|
||||||
*/
|
|
||||||
export enum PlayerGender {
|
|
||||||
UNSET,
|
|
||||||
MALE,
|
|
||||||
FEMALE
|
|
||||||
}
|
|
@ -18539,14 +18539,12 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = {
|
|||||||
[ 8, Moves.DOUBLE_TEAM ],
|
[ 8, Moves.DOUBLE_TEAM ],
|
||||||
[ 12, Moves.ELECTRO_BALL ],
|
[ 12, Moves.ELECTRO_BALL ],
|
||||||
[ 16, Moves.FEINT ],
|
[ 16, Moves.FEINT ],
|
||||||
[ 20, Moves.ZIPPY_ZAP ], //Custom
|
[ 20, Moves.SPARK ],
|
||||||
[ 24, Moves.AGILITY ],
|
[ 24, Moves.AGILITY ],
|
||||||
[ 28, Moves.IRON_TAIL ],
|
[ 28, Moves.IRON_TAIL ],
|
||||||
[ 32, Moves.DISCHARGE ],
|
[ 32, Moves.DISCHARGE ],
|
||||||
[ 34, Moves.FLOATY_FALL ], //Custom
|
|
||||||
[ 36, Moves.THUNDERBOLT ],
|
[ 36, Moves.THUNDERBOLT ],
|
||||||
[ 40, Moves.LIGHT_SCREEN ],
|
[ 40, Moves.LIGHT_SCREEN ],
|
||||||
[ 42, Moves.SPLISHY_SPLASH ], //Custom
|
|
||||||
[ 44, Moves.THUNDER ],
|
[ 44, Moves.THUNDER ],
|
||||||
[ 48, Moves.PIKA_PAPOW ],
|
[ 48, Moves.PIKA_PAPOW ],
|
||||||
],
|
],
|
||||||
|
@ -918,12 +918,12 @@ export function initSpecies() {
|
|||||||
new PokemonSpecies(Species.PIKACHU, 1, false, false, false, "Mouse Pokémon", Type.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 320, 35, 55, 40, 50, 50, 90, 190, 50, 112, GrowthRate.MEDIUM_FAST, 50, true, true,
|
new PokemonSpecies(Species.PIKACHU, 1, false, false, false, "Mouse Pokémon", Type.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 320, 35, 55, 40, 50, 50, 90, 190, 50, 112, GrowthRate.MEDIUM_FAST, 50, true, true,
|
||||||
new PokemonForm("Normal", "", Type.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 320, 35, 55, 40, 50, 50, 90, 190, 50, 112, true, null, true),
|
new PokemonForm("Normal", "", Type.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 320, 35, 55, 40, 50, 50, 90, 190, 50, 112, true, null, true),
|
||||||
new PokemonForm("Partner", "partner", Type.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, "", true),
|
new PokemonForm("Partner", "partner", Type.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, "", true),
|
||||||
new PokemonForm("Cosplay", "cosplay", Type.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom
|
new PokemonForm("Cosplay", "cosplay", Type.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 320, 35, 55, 40, 50, 50, 90, 190, 50, 112, true, null, true),
|
||||||
new PokemonForm("Cool Cosplay", "cool-cosplay", Type.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom
|
new PokemonForm("Cool Cosplay", "cool-cosplay", Type.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 320, 35, 55, 40, 50, 50, 90, 190, 50, 112, true, null, true),
|
||||||
new PokemonForm("Beauty Cosplay", "beauty-cosplay", Type.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom
|
new PokemonForm("Beauty Cosplay", "beauty-cosplay", Type.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 320, 35, 55, 40, 50, 50, 90, 190, 50, 112, true, null, true),
|
||||||
new PokemonForm("Cute Cosplay", "cute-cosplay", Type.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom
|
new PokemonForm("Cute Cosplay", "cute-cosplay", Type.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 320, 35, 55, 40, 50, 50, 90, 190, 50, 112, true, null, true),
|
||||||
new PokemonForm("Smart Cosplay", "smart-cosplay", Type.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom
|
new PokemonForm("Smart Cosplay", "smart-cosplay", Type.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 320, 35, 55, 40, 50, 50, 90, 190, 50, 112, true, null, true),
|
||||||
new PokemonForm("Tough Cosplay", "tough-cosplay", Type.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 430, 45, 80, 50, 75, 60, 120, 190, 50, 112, true, null, true), //Custom
|
new PokemonForm("Tough Cosplay", "tough-cosplay", Type.ELECTRIC, null, 0.4, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 320, 35, 55, 40, 50, 50, 90, 190, 50, 112, true, null, true),
|
||||||
new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.ELECTRIC, null, 21, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 420, 45, 60, 65, 100, 75, 75, 190, 50, 112),
|
new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, Type.ELECTRIC, null, 21, 6, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 420, 45, 60, 65, 100, 75, 75, 190, 50, 112),
|
||||||
),
|
),
|
||||||
new PokemonSpecies(Species.RAICHU, 1, false, false, false, "Mouse Pokémon", Type.ELECTRIC, null, 0.8, 30, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 485, 60, 90, 55, 90, 80, 110, 75, 50, 243, GrowthRate.MEDIUM_FAST, 50, true),
|
new PokemonSpecies(Species.RAICHU, 1, false, false, false, "Mouse Pokémon", Type.ELECTRIC, null, 0.8, 30, Abilities.STATIC, Abilities.NONE, Abilities.LIGHTNING_ROD, 485, 60, 90, 55, 90, 80, 110, 75, 50, 243, GrowthRate.MEDIUM_FAST, 50, true),
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Biome } from "./enums/biome";
|
import { Biome } from "./enums/biome";
|
||||||
import { getPokemonMessage, getPokemonNameWithAffix } from "../messages";
|
import { getPokemonMessage, getPokemonPrefix } from "../messages";
|
||||||
import Pokemon from "../field/pokemon";
|
import Pokemon from "../field/pokemon";
|
||||||
import { Type } from "./type";
|
import { Type } from "./type";
|
||||||
import Move, { AttackMove } from "./move";
|
import Move, { AttackMove } from "./move";
|
||||||
@ -180,9 +180,9 @@ export function getWeatherLapseMessage(weatherType: WeatherType): string {
|
|||||||
export function getWeatherDamageMessage(weatherType: WeatherType, pokemon: Pokemon): string {
|
export function getWeatherDamageMessage(weatherType: WeatherType, pokemon: Pokemon): string {
|
||||||
switch (weatherType) {
|
switch (weatherType) {
|
||||||
case WeatherType.SANDSTORM:
|
case WeatherType.SANDSTORM:
|
||||||
return i18next.t("weather:sandstormDamageMessage", {pokemonNameWithAffix: getPokemonNameWithAffix(pokemon)});
|
return i18next.t("weather:sandstormDamageMessage", {pokemonPrefix: getPokemonPrefix(pokemon), pokemonName: pokemon.name});
|
||||||
case WeatherType.HAIL:
|
case WeatherType.HAIL:
|
||||||
return i18next.t("weather:hailDamageMessage", {pokemonNameWithAffix: getPokemonNameWithAffix(pokemon)});
|
return i18next.t("weather:hailDamageMessage", {pokemonPrefix: getPokemonPrefix(pokemon), pokemonName: pokemon.name});
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
@ -68,20 +68,14 @@ export class Arena {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
randomSpecies(waveIndex: integer, level: integer, attempt?: integer, luckValue?: integer): PokemonSpecies {
|
randomSpecies(waveIndex: integer, level: integer, attempt?: integer): PokemonSpecies {
|
||||||
const overrideSpecies = this.scene.gameMode.getOverrideSpecies(waveIndex);
|
const overrideSpecies = this.scene.gameMode.getOverrideSpecies(waveIndex);
|
||||||
if (overrideSpecies) {
|
if (overrideSpecies) {
|
||||||
return overrideSpecies;
|
return overrideSpecies;
|
||||||
}
|
}
|
||||||
const isBoss = !!this.scene.getEncounterBossSegments(waveIndex, level) && !!this.pokemonPool[BiomePoolTier.BOSS].length
|
const isBoss = !!this.scene.getEncounterBossSegments(waveIndex, level) && !!this.pokemonPool[BiomePoolTier.BOSS].length
|
||||||
&& (this.biomeType !== Biome.END || this.scene.gameMode.isClassic || this.scene.gameMode.isWaveFinal(waveIndex));
|
&& (this.biomeType !== Biome.END || this.scene.gameMode.isClassic || this.scene.gameMode.isWaveFinal(waveIndex));
|
||||||
const randVal = isBoss ? 64 : 512;
|
const tierValue = Utils.randSeedInt(!isBoss ? 512 : 64);
|
||||||
// luck influences encounter rarity
|
|
||||||
let luckModifier = 0;
|
|
||||||
if (typeof luckValue !== "undefined") {
|
|
||||||
luckModifier = luckValue * (isBoss ? 0.5 : 2);
|
|
||||||
}
|
|
||||||
const tierValue = Utils.randSeedInt(randVal - luckModifier);
|
|
||||||
let tier = !isBoss
|
let tier = !isBoss
|
||||||
? tierValue >= 156 ? BiomePoolTier.COMMON : tierValue >= 32 ? BiomePoolTier.UNCOMMON : tierValue >= 6 ? BiomePoolTier.RARE : tierValue >= 1 ? BiomePoolTier.SUPER_RARE : BiomePoolTier.ULTRA_RARE
|
? tierValue >= 156 ? BiomePoolTier.COMMON : tierValue >= 32 ? BiomePoolTier.UNCOMMON : tierValue >= 6 ? BiomePoolTier.RARE : tierValue >= 1 ? BiomePoolTier.SUPER_RARE : BiomePoolTier.ULTRA_RARE
|
||||||
: tierValue >= 20 ? BiomePoolTier.BOSS : tierValue >= 6 ? BiomePoolTier.BOSS_RARE : tierValue >= 1 ? BiomePoolTier.BOSS_SUPER_RARE : BiomePoolTier.BOSS_ULTRA_RARE;
|
: tierValue >= 20 ? BiomePoolTier.BOSS : tierValue >= 6 ? BiomePoolTier.BOSS_RARE : tierValue >= 1 ? BiomePoolTier.BOSS_SUPER_RARE : BiomePoolTier.BOSS_ULTRA_RARE;
|
||||||
|
@ -211,8 +211,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
this.generateFusionSpecies();
|
this.generateFusionSpecies();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.luck = (this.shiny ? this.variant + 1 : 0) + (this.fusionShiny ? this.fusionVariant + 1 : 0);
|
this.luck = (this.shiny ? this.variant + 1 : 0) + (this.fusionShiny ? this.fusionVariant + 1 : 0);
|
||||||
this.fusionLuck = this.luck;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.generateName();
|
this.generateName();
|
||||||
@ -1168,7 +1168,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
if (this.fusionSpecies) {
|
if (this.fusionSpecies) {
|
||||||
const evolutionLevelMoves = levelMoves.slice(0, Math.max(levelMoves.findIndex(lm => !!lm[0]), 0));
|
const evolutionLevelMoves = levelMoves.slice(0, Math.max(levelMoves.findIndex(lm => !!lm[0]), 0));
|
||||||
const fusionLevelMoves = this.getFusionSpeciesForm(true).getLevelMoves();
|
const fusionLevelMoves = this.getFusionSpeciesForm(true).getLevelMoves();
|
||||||
const fusionEvolutionLevelMoves = fusionLevelMoves.slice(0, Math.max(fusionLevelMoves.findIndex(flm => !!flm[0]), 0));
|
|
||||||
const newLevelMoves: LevelMoves = [];
|
const newLevelMoves: LevelMoves = [];
|
||||||
while (levelMoves.length && levelMoves[0][0] < startingLevel) {
|
while (levelMoves.length && levelMoves[0][0] < startingLevel) {
|
||||||
levelMoves.shift();
|
levelMoves.shift();
|
||||||
@ -1180,9 +1179,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
for (const elm of evolutionLevelMoves.reverse()) {
|
for (const elm of evolutionLevelMoves.reverse()) {
|
||||||
levelMoves.unshift(elm);
|
levelMoves.unshift(elm);
|
||||||
}
|
}
|
||||||
for (const felm of fusionEvolutionLevelMoves.reverse()) {
|
|
||||||
fusionLevelMoves.unshift(felm);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
for (let l = includeEvolutionMoves ? 0 : startingLevel; l <= this.level; l++) {
|
for (let l = includeEvolutionMoves ? 0 : startingLevel; l <= this.level; l++) {
|
||||||
if (l === 1 && startingLevel > 1) {
|
if (l === 1 && startingLevel > 1) {
|
||||||
@ -1277,16 +1273,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
* @returns the shiny variant
|
* @returns the shiny variant
|
||||||
*/
|
*/
|
||||||
generateVariant(): Variant {
|
generateVariant(): Variant {
|
||||||
const formIndex: number = this.formIndex;
|
if (!this.shiny || !variantData.hasOwnProperty(this.species.speciesId)) {
|
||||||
let variantDataIndex: string | number = this.species.speciesId;
|
|
||||||
if (this.species.forms.length > 0) {
|
|
||||||
const formKey = this.species.forms[formIndex]?.formKey;
|
|
||||||
if (formKey) {
|
|
||||||
variantDataIndex = `${variantDataIndex}-${formKey}`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Checks if there is no variant data for both the index or index with form
|
|
||||||
if (!this.shiny || (!variantData.hasOwnProperty(variantDataIndex) && !variantData.hasOwnProperty(this.species.speciesId))) {
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
const rand = Utils.randSeedInt(10);
|
const rand = Utils.randSeedInt(10);
|
||||||
|
@ -29,7 +29,6 @@ export class LoadingScene extends SceneBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
preload() {
|
preload() {
|
||||||
Utils.localPing();
|
|
||||||
this.load["manifest"] = this.game["manifest"];
|
this.load["manifest"] = this.game["manifest"];
|
||||||
|
|
||||||
if (!isMobile()) {
|
if (!isMobile()) {
|
||||||
@ -96,18 +95,10 @@ export class LoadingScene extends SceneBase {
|
|||||||
this.loadImage("type_tera", "ui");
|
this.loadImage("type_tera", "ui");
|
||||||
this.loadAtlas("type_bgs", "ui");
|
this.loadAtlas("type_bgs", "ui");
|
||||||
|
|
||||||
this.loadImage("dawn_icon_fg", "ui");
|
this.loadImage("dawn_icon", "ui");
|
||||||
this.loadImage("dawn_icon_mg", "ui");
|
this.loadImage("day_icon", "ui");
|
||||||
this.loadImage("dawn_icon_bg", "ui");
|
this.loadImage("dusk_icon", "ui");
|
||||||
this.loadImage("day_icon_fg", "ui");
|
this.loadImage("night_icon", "ui");
|
||||||
this.loadImage("day_icon_mg", "ui");
|
|
||||||
this.loadImage("day_icon_bg", "ui");
|
|
||||||
this.loadImage("dusk_icon_fg", "ui");
|
|
||||||
this.loadImage("dusk_icon_mg", "ui");
|
|
||||||
this.loadImage("dusk_icon_bg", "ui");
|
|
||||||
this.loadImage("night_icon_fg", "ui");
|
|
||||||
this.loadImage("night_icon_mg", "ui");
|
|
||||||
this.loadImage("night_icon_bg", "ui");
|
|
||||||
|
|
||||||
this.loadImage("pb_tray_overlay_player", "ui");
|
this.loadImage("pb_tray_overlay_player", "ui");
|
||||||
this.loadImage("pb_tray_overlay_enemy", "ui");
|
this.loadImage("pb_tray_overlay_enemy", "ui");
|
||||||
@ -135,7 +126,6 @@ export class LoadingScene extends SceneBase {
|
|||||||
this.loadImage("summary_stats_overlay_exp", "ui");
|
this.loadImage("summary_stats_overlay_exp", "ui");
|
||||||
this.loadImage("summary_moves", "ui");
|
this.loadImage("summary_moves", "ui");
|
||||||
this.loadImage("summary_moves_effect", "ui");
|
this.loadImage("summary_moves_effect", "ui");
|
||||||
this.loadImage("summary_moves_effect_type", "ui");
|
|
||||||
this.loadImage("summary_moves_overlay_row", "ui");
|
this.loadImage("summary_moves_overlay_row", "ui");
|
||||||
this.loadImage("summary_moves_overlay_pp", "ui");
|
this.loadImage("summary_moves_overlay_pp", "ui");
|
||||||
this.loadAtlas("summary_moves_cursor", "ui");
|
this.loadAtlas("summary_moves_cursor", "ui");
|
||||||
@ -362,17 +352,14 @@ export class LoadingScene extends SceneBase {
|
|||||||
const width = this.cameras.main.width;
|
const width = this.cameras.main.width;
|
||||||
const height = this.cameras.main.height;
|
const height = this.cameras.main.height;
|
||||||
|
|
||||||
const midWidth = width / 2;
|
const logo = this.add.image(width / 2, 240, "");
|
||||||
const midHeight = height / 2;
|
|
||||||
|
|
||||||
const logo = this.add.image(midWidth, 240, "");
|
|
||||||
logo.setVisible(false);
|
logo.setVisible(false);
|
||||||
logo.setOrigin(0.5, 0.5);
|
logo.setOrigin(0.5, 0.5);
|
||||||
logo.setScale(4);
|
logo.setScale(4);
|
||||||
|
|
||||||
const percentText = this.make.text({
|
const percentText = this.make.text({
|
||||||
x: midWidth,
|
x: width / 2,
|
||||||
y: midHeight - 24,
|
y: height / 2 - 24,
|
||||||
text: "0%",
|
text: "0%",
|
||||||
style: {
|
style: {
|
||||||
font: "72px emerald",
|
font: "72px emerald",
|
||||||
@ -382,8 +369,8 @@ export class LoadingScene extends SceneBase {
|
|||||||
percentText.setOrigin(0.5, 0.5);
|
percentText.setOrigin(0.5, 0.5);
|
||||||
|
|
||||||
const assetText = this.make.text({
|
const assetText = this.make.text({
|
||||||
x: midWidth,
|
x: width / 2,
|
||||||
y: midHeight + 48,
|
y: height / 2 + 48,
|
||||||
text: "",
|
text: "",
|
||||||
style: {
|
style: {
|
||||||
font: "48px emerald",
|
font: "48px emerald",
|
||||||
@ -392,32 +379,6 @@ export class LoadingScene extends SceneBase {
|
|||||||
});
|
});
|
||||||
assetText.setOrigin(0.5, 0.5);
|
assetText.setOrigin(0.5, 0.5);
|
||||||
|
|
||||||
const disclaimerText = this.make.text({
|
|
||||||
x: midWidth,
|
|
||||||
y: assetText.y + 152,
|
|
||||||
text: i18next.t("menu:disclaimer"),
|
|
||||||
style: {
|
|
||||||
font: "72px emerald",
|
|
||||||
color: "#DA3838",
|
|
||||||
},
|
|
||||||
});
|
|
||||||
disclaimerText.setOrigin(0.5, 0.5);
|
|
||||||
|
|
||||||
const disclaimerDescriptionText = this.make.text({
|
|
||||||
x: midWidth,
|
|
||||||
y: disclaimerText.y + 120,
|
|
||||||
text: i18next.t("menu:disclaimerDescription"),
|
|
||||||
style: {
|
|
||||||
font: "48px emerald",
|
|
||||||
color: "#ffffff",
|
|
||||||
align: "center"
|
|
||||||
},
|
|
||||||
});
|
|
||||||
disclaimerDescriptionText.setOrigin(0.5, 0.5);
|
|
||||||
|
|
||||||
disclaimerText.setVisible(false);
|
|
||||||
disclaimerDescriptionText.setVisible(false);
|
|
||||||
|
|
||||||
const intro = this.add.video(0, 0);
|
const intro = this.add.video(0, 0);
|
||||||
intro.setOrigin(0, 0);
|
intro.setOrigin(0, 0);
|
||||||
intro.setScale(3);
|
intro.setScale(3);
|
||||||
@ -427,7 +388,7 @@ export class LoadingScene extends SceneBase {
|
|||||||
percentText.setText(`${Math.floor(parsedValue * 100)}%`);
|
percentText.setText(`${Math.floor(parsedValue * 100)}%`);
|
||||||
progressBar.clear();
|
progressBar.clear();
|
||||||
progressBar.fillStyle(0xffffff, 0.8);
|
progressBar.fillStyle(0xffffff, 0.8);
|
||||||
progressBar.fillRect(midWidth - 320, 360, 640 * parsedValue, 64);
|
progressBar.fillRect(width / 2 - 320, 360, 640 * parsedValue, 64);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.load.on("fileprogress", file => {
|
this.load.on("fileprogress", file => {
|
||||||
@ -462,8 +423,6 @@ export class LoadingScene extends SceneBase {
|
|||||||
ease: "Sine.easeIn"
|
ease: "Sine.easeIn"
|
||||||
});
|
});
|
||||||
loadingGraphics.map(g => g.setVisible(true));
|
loadingGraphics.map(g => g.setVisible(true));
|
||||||
disclaimerText.setVisible(true);
|
|
||||||
disclaimerDescriptionText.setVisible(true);
|
|
||||||
});
|
});
|
||||||
intro.play();
|
intro.play();
|
||||||
break;
|
break;
|
||||||
|
@ -56,9 +56,6 @@ export const battle: SimpleTranslationEntries = {
|
|||||||
"notDisabled": "{{pokemonName}}'s {{moveName}} ist\nnicht mehr deaktiviert!",
|
"notDisabled": "{{pokemonName}}'s {{moveName}} ist\nnicht mehr deaktiviert!",
|
||||||
"eggHatching": "Oh?",
|
"eggHatching": "Oh?",
|
||||||
"ivScannerUseQuestion": "IV-Scanner auf {{pokemonName}} benutzen?",
|
"ivScannerUseQuestion": "IV-Scanner auf {{pokemonName}} benutzen?",
|
||||||
"wildPokemonWithAffix": "{{pokemonName}} (wild)",
|
|
||||||
"foePokemonWithAffix": "{{pokemonName}} (Gegner)",
|
|
||||||
"useMove": "{{pokemonNameWithAffix}} setzt {{moveName}} ein!",
|
|
||||||
"drainMessage": "{{pokemonName}} wurde Energie abgesaugt",
|
"drainMessage": "{{pokemonName}} wurde Energie abgesaugt",
|
||||||
"regainHealth": "KP von {{pokemonName}} wurden wieder aufgefrischt!"
|
"regainHealth": "KP von {{pokemonName}} wurden wieder aufgefrischt!"
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -49,6 +49,4 @@ export const menu: SimpleTranslationEntries = {
|
|||||||
"empty":"Leer",
|
"empty":"Leer",
|
||||||
"yes":"Ja",
|
"yes":"Ja",
|
||||||
"no":"Nein",
|
"no":"Nein",
|
||||||
"disclaimer": "DISCLAIMER",
|
|
||||||
"disclaimerDescription": "This game is an unfinished product; it might have playability issues (including the potential loss of save data),\n change without notice, and may or may not be updated further or completed."
|
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -99,10 +99,6 @@ export const modifierType: ModifierTypeTranslationEntries = {
|
|||||||
name: "TM{{moveId}} - {{moveName}}",
|
name: "TM{{moveId}} - {{moveName}}",
|
||||||
description: "Bringt einem Pokémon {{moveName}} bei",
|
description: "Bringt einem Pokémon {{moveName}} bei",
|
||||||
},
|
},
|
||||||
"TmModifierTypeWithInfo": {
|
|
||||||
name: "TM{{moveId}} - {{moveName}}",
|
|
||||||
description: "Bringt einem Pokémon {{moveName}} bei\n(Halte C oder Shift für mehr Infos)",
|
|
||||||
},
|
|
||||||
"EvolutionItemModifierType": {
|
"EvolutionItemModifierType": {
|
||||||
description: "Erlaubt es bestimmten Pokémon sich zu entwickeln",
|
description: "Erlaubt es bestimmten Pokémon sich zu entwickeln",
|
||||||
},
|
},
|
||||||
|
@ -15,12 +15,12 @@ export const weather: SimpleTranslationEntries = {
|
|||||||
"sandstormStartMessage": "Ein Sandsturm kommt auf!",
|
"sandstormStartMessage": "Ein Sandsturm kommt auf!",
|
||||||
"sandstormLapseMessage": "Der Sandsturm tobt.",
|
"sandstormLapseMessage": "Der Sandsturm tobt.",
|
||||||
"sandstormClearMessage": "Der Sandsturm legt sich.",
|
"sandstormClearMessage": "Der Sandsturm legt sich.",
|
||||||
"sandstormDamageMessage": " Der Sandsturm fügt {{pokemonNameWithAffix}} Schaden zu!",
|
"sandstormDamageMessage": " Der Sandsturm fügt {{pokemonPrefix}}{{pokemonName}} Schaden zu!",
|
||||||
|
|
||||||
"hailStartMessage": "Es fängt an zu hageln!",
|
"hailStartMessage": "Es fängt an zu hageln!",
|
||||||
"hailLapseMessage": "Der Hagelsturm tobt.",
|
"hailLapseMessage": "Der Hagelsturm tobt.",
|
||||||
"hailClearMessage": "Der Hagelsturm legt sich.",
|
"hailClearMessage": "Der Hagelsturm legt sich.",
|
||||||
"hailDamageMessage": "{{pokemonNameWithAffix}} wird von Hagelkörnern getroffen!",
|
"hailDamageMessage": "{{pokemonPrefix}}{{pokemonName}} wird von Hagelkörnern getroffen!",
|
||||||
|
|
||||||
"snowStartMessage": "Es fängt an zu schneien!",
|
"snowStartMessage": "Es fängt an zu schneien!",
|
||||||
"snowLapseMessage": "Der Schneesturm tobt.",
|
"snowLapseMessage": "Der Schneesturm tobt.",
|
||||||
|
@ -56,9 +56,6 @@ export const battle: SimpleTranslationEntries = {
|
|||||||
"skipItemQuestion": "Are you sure you want to skip taking an item?",
|
"skipItemQuestion": "Are you sure you want to skip taking an item?",
|
||||||
"eggHatching": "Oh?",
|
"eggHatching": "Oh?",
|
||||||
"ivScannerUseQuestion": "Use IV Scanner on {{pokemonName}}?",
|
"ivScannerUseQuestion": "Use IV Scanner on {{pokemonName}}?",
|
||||||
"wildPokemonWithAffix": "Wild {{pokemonName}}",
|
|
||||||
"foePokemonWithAffix": "Foe {{pokemonName}}",
|
|
||||||
"useMove": "{{pokemonNameWithAffix}} used {{moveName}}!",
|
|
||||||
"drainMessage": "{{pokemonName}} had its\nenergy drained!",
|
"drainMessage": "{{pokemonName}} had its\nenergy drained!",
|
||||||
"regainHealth": "{{pokemonName}} regained\nhealth!"
|
"regainHealth": "{{pokemonName}} regained\nhealth!"
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -49,6 +49,4 @@ export const menu: SimpleTranslationEntries = {
|
|||||||
"empty":"Empty",
|
"empty":"Empty",
|
||||||
"yes":"Yes",
|
"yes":"Yes",
|
||||||
"no":"No",
|
"no":"No",
|
||||||
"disclaimer": "DISCLAIMER",
|
|
||||||
"disclaimerDescription": "This game is an unfinished product; it might have playability issues (including the potential loss of save data),\n change without notice, and may or may not be updated further or completed."
|
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -99,10 +99,6 @@ export const modifierType: ModifierTypeTranslationEntries = {
|
|||||||
name: "TM{{moveId}} - {{moveName}}",
|
name: "TM{{moveId}} - {{moveName}}",
|
||||||
description: "Teach {{moveName}} to a Pokémon",
|
description: "Teach {{moveName}} to a Pokémon",
|
||||||
},
|
},
|
||||||
"TmModifierTypeWithInfo": {
|
|
||||||
name: "TM{{moveId}} - {{moveName}}",
|
|
||||||
description: "Teach {{moveName}} to a Pokémon\n(Hold C or Shift for more info)",
|
|
||||||
},
|
|
||||||
"EvolutionItemModifierType": {
|
"EvolutionItemModifierType": {
|
||||||
description: "Causes certain Pokémon to evolve",
|
description: "Causes certain Pokémon to evolve",
|
||||||
},
|
},
|
||||||
|
@ -15,12 +15,12 @@ export const weather: SimpleTranslationEntries = {
|
|||||||
"sandstormStartMessage": "A sandstorm brewed!",
|
"sandstormStartMessage": "A sandstorm brewed!",
|
||||||
"sandstormLapseMessage": "The sandstorm rages.",
|
"sandstormLapseMessage": "The sandstorm rages.",
|
||||||
"sandstormClearMessage": "The sandstorm subsided.",
|
"sandstormClearMessage": "The sandstorm subsided.",
|
||||||
"sandstormDamageMessage": "{{pokemonNameWithAffix}} is buffeted\nby the sandstorm!",
|
"sandstormDamageMessage": "{{pokemonPrefix}}{{pokemonName}} is buffeted\nby the sandstorm!",
|
||||||
|
|
||||||
"hailStartMessage": "It started to hail!",
|
"hailStartMessage": "It started to hail!",
|
||||||
"hailLapseMessage": "Hail continues to fall.",
|
"hailLapseMessage": "Hail continues to fall.",
|
||||||
"hailClearMessage": "The hail stopped.",
|
"hailClearMessage": "The hail stopped.",
|
||||||
"hailDamageMessage": "{{pokemonNameWithAffix}} is pelted\nby the hail!",
|
"hailDamageMessage": "{{pokemonPrefix}}{{pokemonName}} is pelted\nby the hail!",
|
||||||
|
|
||||||
"snowStartMessage": "It started to snow!",
|
"snowStartMessage": "It started to snow!",
|
||||||
"snowLapseMessage": "The snow is falling down.",
|
"snowLapseMessage": "The snow is falling down.",
|
||||||
|
@ -56,9 +56,6 @@ export const battle: SimpleTranslationEntries = {
|
|||||||
"skipItemQuestion": "¿Estás seguro de que no quieres coger un objeto?",
|
"skipItemQuestion": "¿Estás seguro de que no quieres coger un objeto?",
|
||||||
"eggHatching": "¿Y esto?",
|
"eggHatching": "¿Y esto?",
|
||||||
"ivScannerUseQuestion": "¿Quieres usar el Escáner de IVs en {{pokemonName}}?",
|
"ivScannerUseQuestion": "¿Quieres usar el Escáner de IVs en {{pokemonName}}?",
|
||||||
"wildPokemonWithAffix": "Wild {{pokemonName}}",
|
|
||||||
"foePokemonWithAffix": "Foe {{pokemonName}}",
|
|
||||||
"useMove": "{{pokemonNameWithAffix}} used {{moveName}}!",
|
|
||||||
"drainMessage": "{{pokemonName}} had its\nenergy drained!",
|
"drainMessage": "{{pokemonName}} had its\nenergy drained!",
|
||||||
"regainHealth": "{{pokemonName}} regained\nhealth!"
|
"regainHealth": "{{pokemonName}} regained\nhealth!"
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -49,6 +49,4 @@ export const menu: SimpleTranslationEntries = {
|
|||||||
"empty":"Vacío",
|
"empty":"Vacío",
|
||||||
"yes":"Sí",
|
"yes":"Sí",
|
||||||
"no":"No",
|
"no":"No",
|
||||||
"disclaimer": "DISCLAIMER",
|
|
||||||
"disclaimerDescription": "This game is an unfinished product; it might have playability issues (including the potential loss of save data),\n change without notice, and may or may not be updated further or completed."
|
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -99,10 +99,6 @@ export const modifierType: ModifierTypeTranslationEntries = {
|
|||||||
name: "MT{{moveId}} - {{moveName}}",
|
name: "MT{{moveId}} - {{moveName}}",
|
||||||
description: "Enseña {{moveName}} a un Pokémon",
|
description: "Enseña {{moveName}} a un Pokémon",
|
||||||
},
|
},
|
||||||
"TmModifierTypeWithInfo": {
|
|
||||||
name: "MT{{moveId}} - {{moveName}}",
|
|
||||||
description: "Enseña {{moveName}} a un Pokémon\n(Hold C or Shift for more info)",
|
|
||||||
},
|
|
||||||
"EvolutionItemModifierType": {
|
"EvolutionItemModifierType": {
|
||||||
description: "Hace que ciertos Pokémon evolucionen",
|
description: "Hace que ciertos Pokémon evolucionen",
|
||||||
},
|
},
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
import { SimpleTranslationEntries } from "#app/plugins/i18n";
|
||||||
|
|
||||||
export const pokemonInfoContainer: SimpleTranslationEntries = {
|
export const pokemonInfoContainer: SimpleTranslationEntries = {
|
||||||
"moveset": "Movimientos",
|
"moveset": "Moveset",
|
||||||
"gender": "Género:",
|
"gender": "Gender:",
|
||||||
"ability": "Habilid:",
|
"ability": "Ability:",
|
||||||
"nature": "Natur:",
|
"nature": "Nature:",
|
||||||
"epic": "Épico",
|
"epic": "Epic",
|
||||||
"rare": "Raro",
|
"rare": "Rare",
|
||||||
"common": "Común"
|
"common": "Common"
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -15,12 +15,12 @@ export const weather: SimpleTranslationEntries = {
|
|||||||
"sandstormStartMessage": "¡Se ha desatado una tormenta de arena!",
|
"sandstormStartMessage": "¡Se ha desatado una tormenta de arena!",
|
||||||
"sandstormLapseMessage": "La tormenta de arena arrecia...",
|
"sandstormLapseMessage": "La tormenta de arena arrecia...",
|
||||||
"sandstormClearMessage": "La tormenta de arena termino.",
|
"sandstormClearMessage": "La tormenta de arena termino.",
|
||||||
"sandstormDamageMessage": "¡La tormenta de arena zarandea al\n{{pokemonNameWithAffix}}!",
|
"sandstormDamageMessage": "¡La tormenta de arena zarandea al\n{{pokemonName}}{{pokemonPrefix}}!",
|
||||||
|
|
||||||
"hailStartMessage": "¡Ha empezado a granizar!",
|
"hailStartMessage": "¡Ha empezado a granizar!",
|
||||||
"hailLapseMessage": "Sigue granizando...",
|
"hailLapseMessage": "Sigue granizando...",
|
||||||
"hailClearMessage": "Had dejado de granizar.",
|
"hailClearMessage": "Had dejado de granizar.",
|
||||||
"hailDamageMessage": "El granizo golpea al\n{{pokemonNameWithAffix}}!",
|
"hailDamageMessage": "El granizo golpea al\n{{pokemonName}}{{pokemonPrefix}}!",
|
||||||
|
|
||||||
"snowStartMessage": "¡Ha empezado a nevar!",
|
"snowStartMessage": "¡Ha empezado a nevar!",
|
||||||
"snowLapseMessage": "Sigue nevando...",
|
"snowLapseMessage": "Sigue nevando...",
|
||||||
|
@ -56,9 +56,6 @@ export const battle: SimpleTranslationEntries = {
|
|||||||
"skipItemQuestion": "Êtes-vous sûr·e de ne pas vouloir prendre d’objet ?",
|
"skipItemQuestion": "Êtes-vous sûr·e de ne pas vouloir prendre d’objet ?",
|
||||||
"eggHatching": "Oh ?",
|
"eggHatching": "Oh ?",
|
||||||
"ivScannerUseQuestion": "Utiliser le Scanner d’IV sur {{pokemonName}} ?",
|
"ivScannerUseQuestion": "Utiliser le Scanner d’IV sur {{pokemonName}} ?",
|
||||||
"wildPokemonWithAffix": "{{pokemonName}} sauvage",
|
|
||||||
"foePokemonWithAffix": "{{pokemonName}} ennemi",
|
|
||||||
"useMove": "{{pokemonNameWithAffix}} utilise\n{{moveName}} !",
|
|
||||||
"drainMessage": "{{pokemonName}} had its\nenergy drained!",
|
"drainMessage": "{{pokemonName}} had its\nenergy drained!",
|
||||||
"regainHealth": "{{pokemonName}} regained\nhealth!"
|
"regainHealth": "{{pokemonName}} regained\nhealth!"
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -44,6 +44,4 @@ export const menu: SimpleTranslationEntries = {
|
|||||||
"empty":"Vide",
|
"empty":"Vide",
|
||||||
"yes":"Oui",
|
"yes":"Oui",
|
||||||
"no":"Non",
|
"no":"Non",
|
||||||
"disclaimer": "DISCLAIMER",
|
|
||||||
"disclaimerDescription": "This game is an unfinished product; it might have playability issues (including the potential loss of save data),\n change without notice, and may or may not be updated further or completed."
|
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -99,10 +99,6 @@ export const modifierType: ModifierTypeTranslationEntries = {
|
|||||||
name: "CT{{moveId}} - {{moveName}}",
|
name: "CT{{moveId}} - {{moveName}}",
|
||||||
description: "Apprend la capacité {{moveName}} à un Pokémon",
|
description: "Apprend la capacité {{moveName}} à un Pokémon",
|
||||||
},
|
},
|
||||||
"TmModifierTypeWithInfo": {
|
|
||||||
name: "CT{{moveId}} - {{moveName}}",
|
|
||||||
description: "Apprend la capacité {{moveName}} à un Pokémon\n(Hold C or Shift for more info)",
|
|
||||||
},
|
|
||||||
"EvolutionItemModifierType": {
|
"EvolutionItemModifierType": {
|
||||||
description: "Permet à certains Pokémon d’évoluer",
|
description: "Permet à certains Pokémon d’évoluer",
|
||||||
},
|
},
|
||||||
|
@ -15,12 +15,12 @@ export const weather: SimpleTranslationEntries = {
|
|||||||
"sandstormStartMessage": "Une tempête de sable se prépare !",
|
"sandstormStartMessage": "Une tempête de sable se prépare !",
|
||||||
"sandstormLapseMessage": "La tempête de sable fait rage !",
|
"sandstormLapseMessage": "La tempête de sable fait rage !",
|
||||||
"sandstormClearMessage": "La tempête de sable se calme !",
|
"sandstormClearMessage": "La tempête de sable se calme !",
|
||||||
"sandstormDamageMessage": "La tempête de sable inflige des dégâts\nà {{pokemonNameWithAffix}} !",
|
"sandstormDamageMessage": "La tempête de sable inflige des dégâts\nà {{pokemonPrefix}}{{pokemonName}} !",
|
||||||
|
|
||||||
"hailStartMessage": "Il commence à grêler !",
|
"hailStartMessage": "Il commence à grêler !",
|
||||||
"hailLapseMessage": "La grêle continue de tomber !",
|
"hailLapseMessage": "La grêle continue de tomber !",
|
||||||
"hailClearMessage": "La grêle s’est arrêtée !",
|
"hailClearMessage": "La grêle s’est arrêtée !",
|
||||||
"hailDamageMessage": "La grêle inflige des dégâts\nà {{pokemonNameWithAffix}} !",
|
"hailDamageMessage": "La grêle inflige des dégâts\nà {{pokemonPrefix}}{{pokemonName}} !",
|
||||||
|
|
||||||
"snowStartMessage": "Il commence à neiger !",
|
"snowStartMessage": "Il commence à neiger !",
|
||||||
"snowLapseMessage": "Il y a une tempête de neige !",
|
"snowLapseMessage": "Il y a une tempête de neige !",
|
||||||
|
@ -56,9 +56,6 @@ export const battle: SimpleTranslationEntries = {
|
|||||||
"skipItemQuestion": "Sei sicuro di non voler prendere nessun oggetto?",
|
"skipItemQuestion": "Sei sicuro di non voler prendere nessun oggetto?",
|
||||||
"eggHatching": "Oh!",
|
"eggHatching": "Oh!",
|
||||||
"ivScannerUseQuestion": "Vuoi usare lo scanner di IV su {{pokemonName}}?",
|
"ivScannerUseQuestion": "Vuoi usare lo scanner di IV su {{pokemonName}}?",
|
||||||
"wildPokemonWithAffix": "Wild {{pokemonName}}",
|
|
||||||
"foePokemonWithAffix": "Foe {{pokemonName}}",
|
|
||||||
"useMove": "{{pokemonNameWithAffix}} used {{moveName}}!",
|
|
||||||
"drainMessage": "{{pokemonName}} had its\nenergy drained!",
|
"drainMessage": "{{pokemonName}} had its\nenergy drained!",
|
||||||
"regainHealth": "{{pokemonName}} regained\nhealth!"
|
"regainHealth": "{{pokemonName}} regained\nhealth!"
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -49,6 +49,4 @@ export const menu: SimpleTranslationEntries = {
|
|||||||
"empty":"Vuoto",
|
"empty":"Vuoto",
|
||||||
"yes":"Si",
|
"yes":"Si",
|
||||||
"no":"No",
|
"no":"No",
|
||||||
"disclaimer": "DISCLAIMER",
|
|
||||||
"disclaimerDescription": "This game is an unfinished product; it might have playability issues (including the potential loss of save data),\n change without notice, and may or may not be updated further or completed."
|
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -99,10 +99,6 @@ export const modifierType: ModifierTypeTranslationEntries = {
|
|||||||
name: "MT{{moveId}} - {{moveName}}",
|
name: "MT{{moveId}} - {{moveName}}",
|
||||||
description: "Insegna {{moveName}} a un Pokémon",
|
description: "Insegna {{moveName}} a un Pokémon",
|
||||||
},
|
},
|
||||||
"TmModifierTypeWithInfo": {
|
|
||||||
name: "MT{{moveId}} - {{moveName}}",
|
|
||||||
description: "Insegna {{moveName}} a un Pokémon\n(Hold C or Shift for more info)",
|
|
||||||
},
|
|
||||||
"EvolutionItemModifierType": {
|
"EvolutionItemModifierType": {
|
||||||
description: "Fa evolvere determinate specie di Pokémon",
|
description: "Fa evolvere determinate specie di Pokémon",
|
||||||
},
|
},
|
||||||
|
@ -15,12 +15,12 @@ export const weather: SimpleTranslationEntries = {
|
|||||||
"sandstormStartMessage": "Si è scatenata una tempesta di sabbia!",
|
"sandstormStartMessage": "Si è scatenata una tempesta di sabbia!",
|
||||||
"sandstormLapseMessage": "La tempesta di sabbia infuria.",
|
"sandstormLapseMessage": "La tempesta di sabbia infuria.",
|
||||||
"sandstormClearMessage": "La tempesta di sabbia si è placata.",
|
"sandstormClearMessage": "La tempesta di sabbia si è placata.",
|
||||||
"sandstormDamageMessage": "{{pokemonNameWithAffix}} è stato colpito\ndalla tempesta di sabbia!",
|
"sandstormDamageMessage": "{{pokemonPrefix}}{{pokemonName}} è stato colpito\ndalla tempesta di sabbia!",
|
||||||
|
|
||||||
"hailStartMessage": "Ha iniziato a grandinare!",
|
"hailStartMessage": "Ha iniziato a grandinare!",
|
||||||
"hailLapseMessage": "La grandine continua a cadere.",
|
"hailLapseMessage": "La grandine continua a cadere.",
|
||||||
"hailClearMessage": "Ha smesso di grandinare.",
|
"hailClearMessage": "Ha smesso di grandinare.",
|
||||||
"hailDamageMessage": "{{pokemonNameWithAffix}} è stato colpito\ndalla grandine!",
|
"hailDamageMessage": "{{pokemonPrefix}}{{pokemonName}} è stato colpito\ndalla grandine!",
|
||||||
|
|
||||||
"snowStartMessage": "Ha iniziato a nevicare!",
|
"snowStartMessage": "Ha iniziato a nevicare!",
|
||||||
"snowLapseMessage": "La neve sta continuando a cadere.",
|
"snowLapseMessage": "La neve sta continuando a cadere.",
|
||||||
|
@ -55,8 +55,5 @@ export const battle: SimpleTranslationEntries = {
|
|||||||
"notDisabled": "{{pokemonName}}의\n{{moveName}} 사슬묶기가 풀렸다!",
|
"notDisabled": "{{pokemonName}}의\n{{moveName}} 사슬묶기가 풀렸다!",
|
||||||
"skipItemQuestion": "아이템을 받지 않고 넘어가시겠습니까?",
|
"skipItemQuestion": "아이템을 받지 않고 넘어가시겠습니까?",
|
||||||
"eggHatching": "어라…?",
|
"eggHatching": "어라…?",
|
||||||
"ivScannerUseQuestion": "{{pokemonName}}에게 개체값탐지기를 사용하시겠습니까?",
|
"ivScannerUseQuestion": "{{pokemonName}}에게 개체값탐지기를 사용하시겠습니까?"
|
||||||
"wildPokemonWithAffix": "야생 {{pokemonName}}",
|
|
||||||
"foePokemonWithAffix": "상대 {{pokemonName}}",
|
|
||||||
"useMove": "{{pokemonNameWithAffix}}의 {{moveName}}!"
|
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -4,58 +4,58 @@ import { DialogueTranslationEntries, SimpleTranslationEntries } from "#app/plugi
|
|||||||
export const PGMdialogue: DialogueTranslationEntries = {
|
export const PGMdialogue: DialogueTranslationEntries = {
|
||||||
"youngster": {
|
"youngster": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "거기 너! 나와 배틀 어때?",
|
1: "Hey, wanna battle?",
|
||||||
2: "넌 새내기 트레이너구나. 맞지?",
|
2: "Are you a new trainer too?",
|
||||||
3: "거기 너! 처음보는 얼굴인데? 나랑 배틀하자!",
|
3: "Hey, I haven't seen you before. Let's battle!",
|
||||||
4: "방금 배틀에서 져서 새로운 포켓몬을 찾는 중이야.\n잠깐! 넌 약해보이는데? 어서 나와 배틀하자!",
|
4: "I just lost, so I'm trying to find more Pokémon.\nWait! You look weak! Come on, let's battle!",
|
||||||
5: "우리 만난 적이 있었던가? 잘 기억은 안나지만 어쨌든 만나서 반가워!",
|
5: "Have we met or not? I don't really remember. Well, I guess it's nice to meet you anyway!",
|
||||||
6: "좋아! 시작하자!",
|
6: "All right! Let's go!",
|
||||||
7: "좋아! 내가 왔다! 내 힘을 보여주지!",
|
7: "All right! Here I come! I'll show you my power!",
|
||||||
8: "하하하… 내 포켓몬이 얼마나 멋진지 보여주겠어!",
|
8: "Haw haw haw... I'll show you how hawesome my Pokémon are!",
|
||||||
9: "인사할 시간도 없어. 준비가 되었다면 이리 와!",
|
9: "No need to waste time saying hello. Bring it on whenever you're ready!",
|
||||||
10: "긴장을 늦추지마. 그렇지 않으면 어린이에게 맞아 울지도 몰라.",
|
10: "Don't let your guard down, or you may be crying when a kid beats you.",
|
||||||
11: "난 내 포켓몬들을 소중히 키웠어. 내 포켓몬에게 상처를 입히게 놔두지 않겠어!",
|
11: "I've raised my Pokémon with great care. You're not allowed to hurt them!",
|
||||||
12: "여기까지 잘 왔구나! 하지만 지금부턴 쉽지 않을거야.",
|
12: "Glad you made it! It won't be an easy job from here.",
|
||||||
13: "배틀은 끝나지 않아! 끝없는 배틀의 세계에 온 것을 환영해!"
|
13: "The battles continue forever! Welcome to the world with no end!"
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "우와! 넌 강하구나!",
|
1: "Wow! You're strong!",
|
||||||
2: "하? 난 기회가 없었어.",
|
2: "I didn't stand a chance, huh?",
|
||||||
3: "내가 조금 더 큰 다음엔 널 찾아서 때리겠어!",
|
3: "I'll find you again when I'm older and beat you!",
|
||||||
4: "으.. 더이상 가지고 있는 포켓몬이 없어.",
|
4: "Ugh. I don't have any more Pokémon.",
|
||||||
5: "말도 안돼… 안돼! 내가 또 지다니…",
|
5: "No way… NO WAY! How could I lose again…",
|
||||||
6: "안돼! 내가 지다니!",
|
6: "No! I lost!",
|
||||||
7: "우와! 정말 깜짝 놀랐어! 넌 정말 강하구나!",
|
7: "Whoa! You are incredible! I'm amazed and surprised!",
|
||||||
8: "이럴수가… 내 포켓몬과 난 최강인데… 어떻게…",
|
8: "Could it be… How… My Pokémon and I are the strongest, though…",
|
||||||
9: "다음엔 지지 않을거야! 다음에 다시 배틀하자!",
|
9: "I won't lose next time! Let's battle again sometime!",
|
||||||
10: "쳇! 내가 어린애인게 보이지 않아?! 그렇게 최선을 다하는건 불공평해!",
|
10: "Sheesh! Can't you see that I'm just a kid! It wasn't fair of you to go all out like that!",
|
||||||
11: "네 포켓몬은 정말 굉장하구나! 나와 교환하자!",
|
11: "Your Pokémon are more amazing! Trade with me!",
|
||||||
12: "내가 잠깐 정신이 나갔었나 봐. 내가 무슨 말을 하고 있었지?",
|
12: "I got a little carried away earlier, but what job was I talking about?",
|
||||||
13: "아하! 거기구나! 좋아! 넌 이미 이 세계에 머무를 곳이 있구나!"
|
13: "Ahaha! There it is! That's right! You're already right at home in this world!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lass": {
|
"lass": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "나랑 배틀하자, 어때?",
|
1: "Let's have a battle, shall we?",
|
||||||
2: "넌 신입 트레이너구나. 나랑 배틀하자!",
|
2: "You look like a new trainer. Let's have a battle!",
|
||||||
3: "너 거기 있었구나? 나랑 배틀할래?",
|
3: "I don't recognize you. How about a battle?",
|
||||||
4: "재밌는 포켓몬 배틀하자!",
|
4: "Let's have a fun Pokémon battle!",
|
||||||
5: "내가 포켓몬을 어떻게 다뤄야하는지 보여줄게!",
|
5: "I'll show you the ropes of how to really use Pokémon!",
|
||||||
6: "진정한 배틀은 진지한 자세부터 시작이야! 준비됐어?",
|
6: "A serious battle starts from a serious beginning! Are you sure you're ready?",
|
||||||
7: "젊음이 한순간이듯 배틀에서 네 기회도 단 한번만 주어질거야. 곧 넌 추억속으로 사라질거야.",
|
7: "You're only young once. And you only get one shot at a given battle. Soon, you'll be nothing but a memory.",
|
||||||
8: "나에겐 살살해도 돼, 알았지? 그래도 난 진지하게 싸울거야!",
|
8: "You'd better go easy on me, OK? Though I'll be seriously fighting!",
|
||||||
9: "학교는 지겨워. 나는 할 일이 없어. 하암~ 난 그저 시간을 때우기 위해 싸울뿐이야."
|
9: "School is boring. I've got nothing to do. Yawn. I'm only battling to kill the time."
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "인상적이었어! 난 아직 배울게 많구나.",
|
1: "That was impressive! I've got a lot to learn.",
|
||||||
2: "내가 이렇게까지 크게 질 줄은 몰랐어…",
|
2: "I didn't think you'd beat me that bad…",
|
||||||
3: "언젠가 우리가 다시 배틀할 수 있을 날을 기다릴게.",
|
3: "I hope we get to have a rematch some day.",
|
||||||
4: "놀라울 정도로 엄청 재미있었어! 넌 날 완전히 지치게 만들어버렸네…",
|
4: "That was pretty amazingly fun! You've totally exhausted me…",
|
||||||
5: "넌 나에게 진짜 교훈을 주었어! 넌 정말 대단해!",
|
5: "You actually taught me a lesson! You're pretty amazing!",
|
||||||
6: "세상에, 내가 지다니. 이거 정말 우울하지만… 넌 정말 멋있었어.",
|
6: "Seriously, I lost. That is, like, seriously depressing, but you were seriously cool.",
|
||||||
7: "난 이런 기억따윈 필요없어. 잊어버리겠어…",
|
7: "I don't need memories like this. Deleting memory…",
|
||||||
8: "거기 너! 살살하라고 했지! 그래도 넌 진지할때 정말 멋지구나!",
|
8: "Hey! I told you to go easy on me! Still, you're pretty cool when you're serious.",
|
||||||
9: "사실 배틀하는 것이 지루하던 참이야… 뭔가 새로운 것이 없을까?"
|
9: "I'm actually getting tired of battling… There's gotta be something new to do…"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"breeder": {
|
"breeder": {
|
||||||
@ -373,297 +373,297 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
},
|
},
|
||||||
"brock": {
|
"brock": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "내 전문인 바위 타입 포켓몬으로 널 쓰러뜨려줄게! 덤벼!",
|
1: "My expertise on Rock-type Pokémon will take you down! Come on!",
|
||||||
2: "바위같은 의지로 널 압도하겠어!",
|
2: "My rock-hard willpower will overwhelm you!",
|
||||||
3: "내 포켓몬의 진정한 힘을 보여줄게!"
|
3: "Allow me to show you the true strength of my Pokémon!"
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "네 포켓몬의 힘이 바위같은 내 방어를 이겼어!",
|
1: "Your Pokémon's strength have overcome my rock-hard defenses!",
|
||||||
2: "세상은 넓구나! 너랑 겨뤄볼 수 있어서 즐거웠어.",
|
2: "The world is huge! I'm glad to have had a chance to battle you.",
|
||||||
3: "아마도 난 포켓몬 브리더의 꿈을 이루러 가야할지도…"
|
3: "Perhaps I should go back to pursuing my dream as a Pokémon Breeder…"
|
||||||
},
|
},
|
||||||
"defeat": {
|
"defeat": {
|
||||||
1: "최선의 공격은 적절한 방어지!\n그게 내 방식이야!",
|
1: "The best offense is a good defense!\nThat's my way of doing things!",
|
||||||
2: "다음에 나한테 더 배우러와. 바위타입과 어떻게 싸워야하는지 알려주지!",
|
2: "Come study rocks with me next time to better learn how to fight them!",
|
||||||
3: "아, 여러 지역을 돌아다니며 여행한 보람이 있군!"
|
3: "Hah, all my traveling around the regions is paying off!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"misty": {
|
"misty": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "내 방침은 물타입 포켓몬으로 공격하고 공격하고 또 공격하는 거!",
|
1: "My policy is an all out offensive with Water-type Pokémon!",
|
||||||
2: "아하핫, 너한테 내 물타입 포켓몬들의 힘을 보여줄게!",
|
2: "Hiya, I'll show you the strength of my aquatic Pokémon!",
|
||||||
3: "내 꿈은 여행을 다니며 강한 트레이너들과 배틀하는 거였어…\n네가 그 충분한 도전자가 될 수 있는지 볼까?"
|
3: "My dream was to go on a journey and battle powerful trainers…\nWill you be a sufficient challenge?"
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "너 정말로 강하구나… 그 실력 인정하도록 할게…",
|
1: "You really are strong… I'll admit that you are skilled…",
|
||||||
2: "으으… 너 그냥 운이 좋았던거야, 그치?!",
|
2: "Grrr… You know you just got lucky, right?!",
|
||||||
3: "우와, 너 대단해! 날 이기다니 믿을 수 없어!"
|
3: "Wow, you're too much! I can't believe you beat me!"
|
||||||
},
|
},
|
||||||
"defeat": {
|
"defeat": {
|
||||||
1: "최강인 최이슬! 너한테 좀 심했나?",
|
1: "Was the mighty Misty too much for you?",
|
||||||
2: "내 포켓몬들의 우아한 수영 테크닉을 봤길 바랄게!",
|
2: "I hope you saw my Pokémon's elegant swimming techniques!",
|
||||||
3: "내 프라이드와 즐거움엔 네 포켓몬들은 상대가 안 돼. "
|
3: "Your Pokémon were no match for my pride and joys!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lt_surge": {
|
"lt_surge": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "마이 전기 포켓몬은 전쟁에서 미를 구했어요! 하우를 유에게 보여줄게요!",
|
1: "My Electric Pokémon saved me during the war! I'll show you how!",
|
||||||
2: "헤이! 쇼크로 유를 항복시키겠어요!",
|
2: "Ten-hut! I'll shock you into surrender!",
|
||||||
3: "배틀에서 마이 에너미에게 했던 것처럼 유에게도 펀치를 날리겠어요!"
|
3: "I'll zap you just like I do to all my enemies in battle!"
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "와우, 키드! 유어 팀은 진짜 대단하군요!",
|
1: "Whoa! Your team's the real deal, kid!",
|
||||||
2: "으흐흑, 유는 스트롱하네요! 마이 전기 트릭도 유에겐 로스트입니다.",
|
2: "Aaargh, you're strong! Even my electric tricks lost against you.",
|
||||||
3: "앱솔루트하고 쇼킹한 패배였어요!"
|
3: "That was an absolutely shocking loss!"
|
||||||
},
|
},
|
||||||
"defeat": {
|
"defeat": {
|
||||||
1: "오우 예! 전기 타입 포켓몬이라면, 미가 월드에서 넘버 원이에요!",
|
1: "Oh yeah! When it comes to Electric-type Pokémon, I'm number one in the world!",
|
||||||
2: "하하하! 키드, 이것이 찌릿찌릿 일렉트릭 배틀입니다!",
|
2: "Hahaha! That was an electrifying battle, kid!",
|
||||||
3: "포켓몬 배틀은 전쟁, 앤드 나는 유에게 직접 전투를 보여줬습니다!"
|
3: "A Pokémon battle is war, and I have showed you first-hand combat!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"erika": {
|
"erika": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "아, 오늘은 날씨가 좋네요…\n음, 배틀일까요? 그럼 더 좋죠.",
|
1: "Ah, the weather is lovely here…\nOh, a battle? Very well then.",
|
||||||
2: "제 포켓몬들의 배틀 실력은 제 꽃꽂이 실력만큼 대단하답니다.",
|
2: "My Pokémon battling skills rival that of my flower arranging skills.",
|
||||||
3: "아, 제 포켓몬의 달콤한 향기가 저를 다시 잠들게 하지 않았으면 좋겠는데……",
|
3: "Oh, I hope the pleasant aroma of my Pokémon doesn't put me to sleep again…",
|
||||||
4: "정원에서 꽃을 보면 마음이 편안해져요.”."
|
4: "Seeing flowers in a garden is so soothing."
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "앗! 제 패배를 인정합니다.",
|
1: "Oh! I concede defeat.",
|
||||||
2: "방금 경기 정말 달콤했어요.",
|
2: "That match was most delightful.",
|
||||||
3: "아, 제가 진 것 같네요…",
|
3: "Ah, it appears it is my loss…",
|
||||||
4: "앗, 맙소사."
|
4: "Oh, my goodness."
|
||||||
},
|
},
|
||||||
"defeat": {
|
"defeat": {
|
||||||
1: "저 조금 걱정했어요. 너무 졸려서…",
|
1: "I was afraid I would doze off…",
|
||||||
2: "어머, 제 풀 포켓몬이 당신을 압도한 것 같네요.",
|
2: "Oh my, it seems my Grass Pokémon overwhelmed you.",
|
||||||
3: "이 배틀 정말로 편안한 경험이었네요.",
|
3: "That battle was such a soothing experience.",
|
||||||
4: "어머… 이게 끝인가요?"
|
4: "Oh… Is that all?"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"janine": {
|
"janine": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "난 독을 사용하는 인술을 갈고 닦고 있어.\n오늘 수련에서는 너랑 대련할거야!",
|
1: "I am mastering the art of poisonous attacks.\nI shall spar with you today!",
|
||||||
2: "아버지는 내가 잘해낼 수 있다고 신뢰하셔.\n 그게 맞는다는 걸 증명할게!",
|
2: "Father trusts that I can hold my own.\nI will prove him right!",
|
||||||
3: "내 인술은 아버지한테 뒤처지지 않아! 따라올 수 있겠어? "
|
3: "My ninja techniques are only second to my Father's!\nCan you keep up?"
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "역시 아직도, 난 더 수련이 필요해… 납득했어.",
|
1: "Even now, I still need training… I understand.",
|
||||||
2: "네 배틀 기술이 내 인술보다 한 수위야.",
|
2: "Your battle technique has outmatched mine.",
|
||||||
3: "더 스스로 갈고 닦아서, 내 인술을 향상 시키겠어."
|
3: "I'm going to really apply myself and improve my skills."
|
||||||
},
|
},
|
||||||
"defeat": {
|
"defeat": {
|
||||||
1: "후후후… 독이 네 기력을 모두 가져가버렸네.",
|
1: "Fufufu… the poison has sapped all your strength to battle.",
|
||||||
2: "하핫, 너 내 인술에 맞설 기회를 잡지 못했구나!",
|
2: "Ha! You didn't stand a chance against my superior ninja skills!",
|
||||||
3: "나를 향한 아버지의 신뢰, 틀리지 않았다는 걸 증명해냈어."
|
3: "Father's faith in me has proven to not be misplaced."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sabrina": {
|
"sabrina": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "내 초능력을 통해서, 너의 도착은 예상하고 있었어!",
|
1: "Through my psychic ability, I had a vision of your arrival!",
|
||||||
2: "싸우는 건 좋아하지 않지만 네가 원한다면… 나의 힘을 보여줄게!",
|
2: "I dislike fighting, but if you wish, I will show you my powers!",
|
||||||
3: "네게서 큰 염원이 느껴져. 그것이 근거 없는 것이 아닌지 지켜보겠어."
|
3: "I can sense great ambition in you. I shall see if it not unfounded."
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "너의 힘은… 내가 예견했던 것보다 훨씬 뛰어나…",
|
1: "Your power… It far exceeds what I foresaw…",
|
||||||
2: "나는 너의 힘을 정확하게 예측하지 못했어.",
|
2: "I failed to accurately predict your power.",
|
||||||
3: "나 엄청난 초능력을 가지고도, 너처럼 강한 사람을 느끼지 못했네."
|
3: "Even with my immense psychic powers, I cannot sense another as strong as you."
|
||||||
},
|
},
|
||||||
"defeat": {
|
"defeat": {
|
||||||
1: "이 승리는… 내가 환상에서 예견한 그대로네!",
|
1: "This victory… It is exactly as I foresaw in my visions!",
|
||||||
2: "아마도 그건, 내가 깊이 느꼈던 또 다른 염원이었을거야…",
|
2: "Perhaps it was another I sensed a great desire in…",
|
||||||
3: "무모하게 배틀에 임하기 전에 능력을 갈고닦도록.\n넌 미래가 어떻게 될지 예지할 수 없으니까…"
|
3: "Hone your abilities before recklessly charging into battle.\nYou never know what the future may hold if you do…"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"blaine": {
|
"blaine": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "우오오~옷! 화상치료제는 잘 준비했는가!",
|
1: "Hah! Hope you brought a Burn Heal!",
|
||||||
2: "나의 포켓몬은 모든 것을 불꽃으로 태워버리는 강한 녀석들뿐이다!",
|
2: "My fiery Pokémon will incinerate all challengers!",
|
||||||
3: "불꽃과 함께할 준비는 됐는가!"
|
3: "Get ready to play with fire!"
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "아무것도 남지 않고 불타버렸다! 재조차 남지 않았어!",
|
1: "I have burned down to nothing! Not even ashes remain!",
|
||||||
2: "내가 불을 너무 세게 피우지 않았나?",
|
2: "Didn't I stoke the flames high enough?",
|
||||||
3: "불태웠다… 하지만 이건 불꽃을 향상시키려는 내 동기를 더욱 뜨겁게 만드는군!"
|
3: "I'm all burned out… But this makes my motivation to improve burn even hotter!"
|
||||||
},
|
},
|
||||||
"defeat": {
|
"defeat": {
|
||||||
1: "나의 타오르는 불길은 진압할 수 없다!",
|
1: "My raging inferno cannot be quelled!",
|
||||||
2: "내 포켓몬은 이번 승리의 열기로 더욱 강해졌다!",
|
2: "My Pokémon have been powered up with the heat from this victory!",
|
||||||
3: "하! 내 열정이 네 것보다 더 밝게 타오르고 있군!"
|
3: "Hah! My passion burns brighter than yours!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"giovanni": {
|
"giovanni": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "나, 로켓단의 리더가, 고통의 세계를 느끼게 해주마!",
|
1: "I, the leader of Team Rocket, will make you feel a world of pain!",
|
||||||
2: "옛 동료들과 다시 만나기 전, 이곳에서의 훈련은 매우 중요하겠군.",
|
2: "My training here will be vital before I am to face my old associates again.",
|
||||||
3: "너는 곧 경험하게 될 실패에 대한 준비가 되어 있지 않군!"
|
3: "I do not think you are prepared for the level of failure you are about to experience!"
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "하! 내가 졌다고?! 더 이상 할말이 없군!",
|
1: "WHAT! Me, lose?! There is nothing I wish to say to you!",
|
||||||
2: "흐음… 넌 내가 이루고자 하는 것을 결코 이해할 수 없을 거다.",
|
2: "Hmph… You could never understand what I hope to achieve.",
|
||||||
3: "이 패배는 피할 수 없는 것을 단지 지연시킬 뿐.\n때가 되면 잿더미에서 로켓단을 일으켜 세울 것이다."
|
3: "This defeat is merely delaying the inevitable.\nI will rise Team Rocket from the ashes in due time."
|
||||||
},
|
},
|
||||||
"defeat": {
|
"defeat": {
|
||||||
1: "자신의 힘을 스스로 잴수 없다는 것은 네가 아직 꼬맹이라는 것을 보여준다고 할 수 있지.",
|
1: "Not being able to measure your own strength shows that you are still but a child.",
|
||||||
2: "다시는 나를 방해하지 말도록.",
|
2: "Do not try to interfere with me again.",
|
||||||
3: "나에게 도전하는 것이 얼마나 어리석은 짓인지 이해했으면 좋겠군."
|
3: "I hope you understand how foolish challenging me was."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"roxanne": {
|
"roxanne": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "당신이 어떻게 싸우는지 보여주시겠어요?",
|
1: "Would you kindly demonstrate how you battle?",
|
||||||
2: "당신은 여러 트레이너와 싸우면서 많은 것을 배울 수 있을거예요.",
|
2: "You can learn many things by battling many trainers.",
|
||||||
3: "아, 전략짜는 거 들켰네요.\n배틀할까요?"
|
3: "Oh, you caught me strategizing.\nWould you like to battle?"
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "아, 제가 진 것 같네요.\n승복하겠습니다.",
|
1: "Oh, I appear to have lost.\nI understand.",
|
||||||
2: "전 아직도 포켓몬 배틀에 대해서 한참 더 배워야할 것 같네요.",
|
2: "It seems that I still have so much more to learn when it comes to battle.",
|
||||||
3: "오늘 여기서 배운 것들을 마음에 담아둬야겠어요."
|
3: "I'll take what I learned here today to heart."
|
||||||
},
|
},
|
||||||
"defeat": {
|
"defeat": {
|
||||||
1: "전 방금 승부에서 많은 것을 배웠습니다.\n당신도 그랬길 바래요.",
|
1: "I have learned many things from our battle.\nI hope you have too.",
|
||||||
2: "다시 붙을 날이 기대되네요.\n당신이 여기서 배운 걸 활용할 수 있길 바랍니다.",
|
2: "I look forward to battling you again.\nI hope you'll use what you've learned here.",
|
||||||
3: "여태까지 공부해온 것 덕분에 이겼네요."
|
3: "I won due to everything I have learned."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"brawly": {
|
"brawly": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "오, 도전자잖아!\n어디 한 번 볼까!",
|
1: "Oh man, a challenger!\nLet's see what you can do!",
|
||||||
2: "넌 큰 파란을 일으킬 것 같군.\n승부다!",
|
2: "You seem like a big splash.\nLet's battle!",
|
||||||
3: "폭풍을 일으킬 시간이야!\n가자!"
|
3: "Time to create a storm!\nLet's go!"
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "우와, 너 날 씻겨버렸네!",
|
1: "Oh woah, you've washed me out!",
|
||||||
2: "내 파도를 타고, 나까지 밀어내다니!",
|
2: "You surfed my wave and crashed me down!",
|
||||||
3: "바위 동굴에서 길을 잃은 기분이야!"
|
3: "I feel like I'm lost in Granite Cave!"
|
||||||
},
|
},
|
||||||
"defeat": {
|
"defeat": {
|
||||||
1: "하핫, 난 큰 파도를 탔다고!\n언제 또 도전해주라.",
|
1: "Haha, I surfed the big wave!\nChallenge me again sometime.",
|
||||||
2: "언젠가 또 같이 서핑하자고!",
|
2: "Surf with me again some time!",
|
||||||
3: "파도가 밀려왔다가 밀려나듯, 언젠가 너도 다시 도전하러 와."
|
3: "Just like the tides come in and out, I hope you return to challenge me again."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"wattson": {
|
"wattson": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "찌릿찌릿해질 때가 됐군!\n와하하하핫!",
|
1: "Time to get shocked!\nWahahahaha!",
|
||||||
2: "스파크가 튀도록 해주마!\n와하하하하!",
|
2: "I'll make sparks fly!\nWahahahaha!",
|
||||||
3: "와하하하하!\n마비 치료제를 가져왔길 바라네!"
|
3: "I hope you brought Paralyz Heal!\nWahahahaha!"
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "이 몸 배터리가 다 됐군!\n와하하하하!",
|
1: "Seems like I'm out of charge!\nWahahahaha!",
|
||||||
2: "자네 완전히 날 좌초시켰군!\n와하하하핫!",
|
2: "You've completely grounded me!\nWahahahaha!",
|
||||||
3: "스릴 넘치는 배틀, 고맙네!\n와하하하하하!"
|
3: "Thanks for the thrill!\nWahahahaha!"
|
||||||
},
|
},
|
||||||
"defeat": {
|
"defeat": {
|
||||||
1: "자네의 배터리 재충전하게. 그리고 나에게 도전하러 돌아오도록!\n와하하하핫!",
|
1: "Recharge your batteries and challenge me again sometime!\nWahahahaha!",
|
||||||
2: "방금 배틀이 자네에게 짜릿짜릿했길 바란다네!\n와하하하하!",
|
2: "I hope you found our battle electrifying!\nWahahahaha!",
|
||||||
3: "자네 혹시 내가 이겨서 충격 받았나?\n와하하하핫!"
|
3: "Aren't you shocked I won?\nWahahahaha!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"flannery": {
|
"flannery": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "어서오세요! 잠깐, 아냐…\n너를 무너뜨려줄게!",
|
1: "Nice to meet you! Wait, no…\nI will crush you!",
|
||||||
2: "난 체육관 관장이 된지는 얼마 안됐지만, 널 태워버릴거야!",
|
2: "I've only been a leader for a little while, but I'll smoke you!",
|
||||||
3: "할아버지에게 배운 기술을 한 수 보여줄게! 승부다!"
|
3: "It's time to demonstrate the moves my grandfather has taught me! Let's battle!"
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "너 우리 할아버지를 생각나게 하네…\n내가 진 게 놀랍진 않아.",
|
1: "You remind me of my grandfather…\nNo wonder I lost.",
|
||||||
2: "나 너무 열심히 하는 건가?\n너무 열 올리면 안되니깐, 진정해야겠어.",
|
2: "Am I trying too hard?\nI should relax, can't get too heated.",
|
||||||
3: "패배는 날 꺼뜨릴 수 없어.\n트레이닝으로 다시 불을 붙일 때야!"
|
3: "Losing isn't going to smother me out.\nTime to reignite training!"
|
||||||
},
|
},
|
||||||
"defeat": {
|
"defeat": {
|
||||||
1: "할아버지가 자랑스러워하시길…\n언젠가 다시 배틀하자.",
|
1: "I hope I've made my grandfather proud…\nLet's battle again some time.",
|
||||||
2: "내…내가 이기다니!\n내 방식대로 한 게 통했어!",
|
2: "I…I can't believe I won!\nDoing things my way worked!",
|
||||||
3: "조만간 다시 뜨겁게 불타오르는 배틀을 하자!"
|
3: "Let's exchange burning hot moves again soon!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"norman": {
|
"norman": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "여기까지 오다니 놀랍군.\n한 번 겨뤄볼까.",
|
1: "I'm surprised you managed to get here.\nLet's battle.",
|
||||||
2: "관장으로서 최선을 다해 널 이길 거란다.\n가자!",
|
2: "I'll do everything in my power as a Gym Leader to win.\nLet's go!",
|
||||||
3: "최선을 다하는 게 좋을 거야.\n승부할 시간이다!"
|
3: "You better give this your all.\nIt's time to battle!"
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "내가 지다니…?\n규칙은 규칙이니, 흐음.",
|
1: "I lost to you…?\nRules are rules, though.",
|
||||||
2: "담청시티에서 이사한 게 문제였나…?",
|
2: "Was moving from Olivine a mistake…?",
|
||||||
3: "믿을 수 없구나.\n훌륭한 승부였어."
|
3: "I can't believe it.\nThat was a great match."
|
||||||
},
|
},
|
||||||
"defeat": {
|
"defeat": {
|
||||||
1: "우린 둘 다 최선을 다했지.\n다시 대결할 수 있었으면 좋겠구나.",
|
1: "We both tried our best.\nI hope we can battle again soon.",
|
||||||
2: "우리 집 꼬마에게 도전해보는 것도 좋겠군.\n아마 뭔가 배울 수 있을거다!",
|
2: "You should try challenging my kid instead.\nYou might learn something!",
|
||||||
3: "방금 전 배틀 완벽했어.\n다음에도 행운이 함께하길."
|
3: "Thank you for the excellent battle.\nBetter luck next time."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"winona": {
|
"winona": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "저는 먹이를 찾아서 하늘을 날아다녔어요…\n그리고 당신은 제 타겟입니다!",
|
1: "I've been soaring the skies looking for prey…\nAnd you're my target!",
|
||||||
2: "배틀이 어떻게 되든, 전 제 비행 포켓몬과 우아하게 승리하겠어요. 승부합시다!",
|
2: "No matter how our battle is, my Flying Pokémon and I will triumph with grace. Let's battle!",
|
||||||
3: "당신이 높은 곳을 무서워하지 않기를.\n자, 날아올라요!"
|
3: "I hope you aren't scared of heights.\nLet's ascend!"
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "저보다 우아하게 나서는 트레이너는 처음 봤습니다.\n훌륭하시네요.",
|
1: "You're the first Trainer I've seen with more grace than I.\nExcellently played.",
|
||||||
2: "이런, 제 비행 포켓몬이 추락해버렸네요!\n훌륭한 배틀이었습니다.",
|
2: "Oh, my Flying Pokémon have plummeted!\nVery well.",
|
||||||
3: "비록 전 떨어졌지만, 제 포켓몬은 다시 날아갈 겁니다!"
|
3: "Though I may have fallen, my Pokémon will continue to fly!"
|
||||||
},
|
},
|
||||||
"defeat": {
|
"defeat": {
|
||||||
1: "제 비행 포켓몬과 영원히 우아하게 춤출게요.",
|
1: "My Flying Pokémon and I will forever dance elegantly!",
|
||||||
2: "우리의 쇼가 즐거웠길 바라요.\우아한 춤은 끝났습니다.",
|
2: "I hope you enjoyed our show.\nOur graceful dance is finished.",
|
||||||
3: "우리의 엘레강스한 안무를 다시 보러오지 않을래요?"
|
3: "Won't you come see our elegant choreography again?"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tate": {
|
"tate": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "헤헤헤…\n내가 란과 같이 있지 않아서 놀랐지?",
|
1: "Hehehe…\nWere you surprised to see me without my sister?",
|
||||||
2: "네가 무슨 생각을 하는지 알아…\n승부하고 싶은거지!",
|
2: "I can see what you're thinking…\nYou want to battle!",
|
||||||
3: "네 움직임을 모두 알고 있는데…\n어떻게 이기려고?"
|
3: "How can you defeat someone…\nWho knows your every move?"
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "어쩔 수 없지…\n란이 보고싶다아…",
|
1: "It can't be helped…\nI miss Liza…",
|
||||||
2: "너와 네 포켓몬과의 유대, 나보다 더 견고한걸.",
|
2: "Your bond with your Pokémon was stronger than mine.",
|
||||||
3: "란이랑 함께였다면, 우리가 이겼어.\n둘이선 더 잘 할 수 있다구!"
|
3: "If I were with Liza, we would have won.\nWe can finish each other's thoughts!"
|
||||||
},
|
},
|
||||||
"defeat": {
|
"defeat": {
|
||||||
1: "내 포켓몬과 나는 우수하다구!",
|
1: "My Pokémon and I are superior!",
|
||||||
2: "날 못 이긴다면, 넌 란한테도 절대로 못 이겨.",
|
2: "If you can't even defeat me, you'll never be able to defeat Liza either.",
|
||||||
3: "란과 함께한 엄격한 훈련 덕이야.\n덕분에 포켓몬과 하나가 될 수 있었어."
|
3: "It's all thanks to my strict training with Liza.\nI can make myself one with Pokémon."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"liza": {
|
"liza": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "후후후…\n내가 풍과 같이 있지 않아서 놀랐지?",
|
1: "Fufufu…\nWere you surprised to see me without my brother?",
|
||||||
2: "네가 무얼 바라는지 알아…\n포켓몬 배틀, 맞지?",
|
2: "I can determine what you desire…\nYou want to battle, don't you?",
|
||||||
3: "포켓몬과 하나가 된 사람…\n어떻게 이기려고?"
|
3: "How can you defeat someone…\nWho's one with their Pokémon?"
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "어쩔 수 없지…\n풍이 보고싶다아…",
|
1: "It can't be helped…\nI miss Tate…",
|
||||||
2: "너와 네 포켓몬과의 유대, 나보다 더 견고한걸.",
|
2: "Your bond with your Pokémon…\nIt's stronger than mine.",
|
||||||
3: "풍이랑 함께였다면, 우리가 이겼어.\n둘이선 더 잘 할 수 있다구!"
|
3: "If I were with Tate, we would have won.\nWe can finish each other's sentences!"
|
||||||
},
|
},
|
||||||
"defeat": {
|
"defeat": {
|
||||||
1: "내 포켓몬과 내가 승리한거야.",
|
1: "My Pokémon and I are victorious.",
|
||||||
2: "날 못 이긴다면, 넌 풍한테도 절대로 못 이겨.",
|
2: "If you can't even defeat me, you'll never be able to defeat Tate either.",
|
||||||
3: "풍과 함께한 엄격한 훈련 덕이야.\n덕분에 포켓몬과 싱크로 될 수 있었어."
|
3: "It's all thanks to my strict training with Tate.\nI can synchronize myself with my Pokémon."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"juan": {
|
"juan": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "지금은 겸양을 부릴 때가 아니군요.\n승부합시다!",
|
1: "Now's not the time to act coy.\nLet's battle!",
|
||||||
2: "아하하하, 물 포켓몬과 함께 아트를 보여드리겠습니다!",
|
2: "Ahahaha, You'll be witness to my artistry with Water Pokémon!",
|
||||||
3: "태풍이 다가오는군요!\n저를 테스트해주시겠습니까?",
|
3: "A typhoon approaches!\nWill you be able to test me?",
|
||||||
4: "자, 마음껏 봐주십시오.\n저와 포켓몬이 이루어내는 물의 일루전을!"
|
4: "Please, you shall bear witness to our artistry.\nA grand illusion of water sculpted by my Pokémon and myself!"
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "당신은 윤진 관장을 뛰어넘을 지니어스군요!",
|
1: "You may be a genius who can take on Wallace!",
|
||||||
2: "당신이 훈련할 때 저는 엘레강스에 집중했습니다.\n당신이 이기는 건 당연하죠.",
|
2: "I focused on elegance while you trained.\nIt's only natural that you defeated me.",
|
||||||
3: "아하하하하!\n잘했습니다, 이번엔 당신이 이겼네요.",
|
3: "Ahahaha!\nVery well, You have won this time.",
|
||||||
4: "모든 것을 극복하는 브릴리언트 스킬, 당신에게 느껴지네요."
|
4: "From you, I sense the brilliant shine of skill that will overcome all."
|
||||||
},
|
},
|
||||||
"defeat": {
|
"defeat": {
|
||||||
1: "저와 포켓몬이 이루어내는 물의 일루전이 승리했습니다.",
|
1: "My Pokémon and I have sculpted an illusion of Water and come out victorious.",
|
||||||
2: "아하하핫, 저는 이겼고, 당신은 졌습니다.",
|
2: "Ahahaha, I have won, and you have lost.",
|
||||||
3: "겉옷 빌려드릴까요? 아마도 배틀에 도움이 될겁니다!\n아하하하, 농담입니다!",
|
3: "Shall I loan you my outfit? It may help you battle!\nAhahaha, I jest!",
|
||||||
4: "제가 승리자군요! 그리고, 당신은 졌네요."
|
4: "I'm the winner! Which is to say, you lost."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"crasher_wake": {
|
"crasher_wake": {
|
||||||
@ -943,31 +943,31 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
},
|
},
|
||||||
"ramos": {
|
"ramos": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: `그래, 올곧게 자란 초목을 모아서 만든 풀 정글짐은 어땠는가?
|
1: `Did yeh enjoy the garden playground I made with all these sturdy plants o' mine?
|
||||||
$자네가 느낀 그것이 나의 체육관 관장으로서의 실력이네! 한번 확인해 보겠나?`,
|
$Their strength is a sign o' my strength as a gardener and a Gym Leader! Yeh sure yer up to facing all that?`,
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "포켓몬은 자네를 믿고, 자네는 그들을 믿는다…가슴이 후련해지는 승부였구먼."
|
1: "Yeh believe in yer Pokémon… And they believe in yeh, too… It was a fine battle, sprout."
|
||||||
},
|
},
|
||||||
"defeat": {
|
"defeat": {
|
||||||
1: "호호호…연약해 보이는 풀잎은 콘크리트도 뚫을 수 있다네."
|
1: "Hohoho… Indeed. Frail little blades o' grass'll break through even concrete."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"viola": {
|
"viola": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: `패배의 분함도 승리의 순간도…
|
1: `Whether it's the tears of frustration that follow a loss or the blossoming of joy that comes with victory…
|
||||||
$둘 다 최고의 피사체야! 정말 멋져 멋져!
|
$They're both great subjects for my camera! Fantastic! This'll be just fantastic!
|
||||||
$자, 그럼 덤비렴!`,
|
$Now come at me!`,
|
||||||
2: "나 비올라는 셔트 찬스를 노리는 것처럼--승리를 노릴 거야!"
|
2: "My lens is always focused on victory--I won't let anything ruin this shot!"
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "너와 네 포켓몬은 최고의 콤비구나! 정말 멋져 멋져!",
|
1: "You and your Pokémon have shown me a whole new depth of field! Fantastic! Just fantastic!",
|
||||||
2: `렌즈 너머의 세계와 포켓몬의 마음으로 보는 세계…
|
2: `The world you see through a lens, and the world you see with a Pokémon by your side…
|
||||||
$똑같이 보이는 풍경이지만 다양한 세계가 겹쳐져 있는 거야.`
|
$The same world can look entirely different depending on your view.`
|
||||||
},
|
},
|
||||||
"defeat": {
|
"defeat": {
|
||||||
1: "내가 승리한 순간을 찍은 사진은 정말 멋져 멋져!",
|
1: "The photo from the moment of my victory will be a real winner, all right!",
|
||||||
2: "좋아! 멋진 사진을 찍었어!"
|
2: "Yes! I took some great photos!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"candice": {
|
"candice": {
|
||||||
@ -1046,24 +1046,24 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
},
|
},
|
||||||
"kofu": {
|
"kofu": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "물포켓몬의 풀코스를! 배 터지게 먹여 주도록 하마!"
|
1: "I'mma serve you a full course o' Water-type Pokémon! Don't try to eat 'em, though!"
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "우옷! 우오오옷! 이렇게 팔팔한 트레이너가 다 있다니!"
|
1: "Vaultin' Veluza! Yer a lively one, aren't ya! A little TOO lively, if I do say so myself!"
|
||||||
},
|
},
|
||||||
"defeat": {
|
"defeat": {
|
||||||
1: "젊은 친구! 다음에 또 만나기를 기대하고 있으마!"
|
1: "You come back to see me again now, ya hear?"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tulip": {
|
"tulip": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "리파의 기술로 너의 포켓몬들을 지금보다 훨~씬 아름답게 만들어 줄게!"
|
1: "Allow me to put my skills to use to make your cute little Pokémon even more beautiful!"
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "너의 강함은 풀 수 없는 매직이구나."
|
1: "Your strength has a magic to it that cannot be washed away."
|
||||||
},
|
},
|
||||||
"defeat": {
|
"defeat": {
|
||||||
1: "…리파의 업계에서는 어중간한 재능을 가진 사람은 대체로 금방 사라져 버려."
|
1: "You know, in my line of work, people who lack talent in one area or the other often fade away quickly—never to be heard of again."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sidney": {
|
"sidney": {
|
||||||
@ -1193,13 +1193,13 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
},
|
},
|
||||||
"rika": {
|
"rika": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "실컷 귀여워해 줄 테니까… 한 번 열심히 해 보라고!"
|
1: "I'd say I'll go easy on you, but… I'd be lying! Think fast!"
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "너, 꽤 하는구나!"
|
1: "Not bad, kiddo."
|
||||||
},
|
},
|
||||||
"defeat": {
|
"defeat": {
|
||||||
1: "아하하! 제법인데! 역시 너는 재밌는 녀석이라니까!"
|
1: "Nahahaha! You really are something else, kiddo!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"bruno": {
|
"bruno": {
|
||||||
@ -1295,14 +1295,14 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
},
|
},
|
||||||
"poppy": {
|
"poppy": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "우와~! 뽀삐와 포켓몬 승부가 하고 싶으세요?"
|
1: "Oooh! Do you wanna have a Pokémon battle with me?"
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "훌쩍, 으에엥~"
|
1: "Uagh?! Mmmuuuggghhh…"
|
||||||
},
|
},
|
||||||
"defeat": {
|
"defeat": {
|
||||||
1: `만세~! 만세~ 목수, 성공했어요!
|
1: `Yaaay! I did it! I de-feet-ed you! You can come for… For… An avenge match?
|
||||||
$에헴! 리벤지 매치는 언제든지 받아 줄게요!`,
|
$Come for an avenge match anytime you want!`,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"agatha": {
|
"agatha": {
|
||||||
@ -1390,14 +1390,14 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
},
|
},
|
||||||
"larry_elite": {
|
"larry_elite": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: `…안녕하십니까, 청목입니다.
|
1: `Hello there… It's me, Larry.
|
||||||
$귀찮게도 저는 사천왕도 겸임하고 있습니다.`,
|
$I serve as a member of the Elite Four too, yes… Unfortunately for me.`,
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "날고 있는 새포켓몬도 떨어뜨릴 기세로군요."
|
1: "Well, that took the wind from under our wings…"
|
||||||
},
|
},
|
||||||
"defeat": {
|
"defeat": {
|
||||||
1: "치프와 만나기로 한 시각이군요."
|
1: "It's time for a meeting with the boss."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lance": {
|
"lance": {
|
||||||
@ -1483,14 +1483,14 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
},
|
},
|
||||||
"hassel": {
|
"hassel": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "맹렬하게 몰아치는 승부의 숨결을 직접 가르쳐 드리겠습니다!!"
|
1: "Prepare to learn firsthand how the fiery breath of ferocious battle feels!"
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: `이번에는 당신이 승리를 쟁취했군요.
|
1: `Fortune smiled on me this time, but…
|
||||||
$하지만, 시합의 흐름을 보니… 다음 승부는 또 어떻게 될지 모르겠네요.`,
|
$Judging from how the match went, who knows if I will be so lucky next time.`,
|
||||||
},
|
},
|
||||||
"defeat": {
|
"defeat": {
|
||||||
1: "저에게 더 배우고 싶은 것이 있으시다면 또 승부하도록 하죠."
|
1: "That was an ace!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"blue": {
|
"blue": {
|
||||||
@ -1662,13 +1662,13 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
},
|
},
|
||||||
"katy": {
|
"katy": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "쓰러지고 싶지 않다면 방심하지 말고 열심히 해 봐~"
|
1: "Don't let your guard down unless you would like to find yourself knocked off your feet!"
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "내 포켓몬들 모두 지쳐서 헤벌레~ 해졌어~"
|
1: "All of my sweet little Pokémon dropped like flies!"
|
||||||
},
|
},
|
||||||
"defeat": {
|
"defeat": {
|
||||||
1: "비비용~ 많~이 먹으렴~"
|
1: "Eat up, my cute little Vivillon!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"pryce": {
|
"pryce": {
|
||||||
@ -1969,60 +1969,60 @@ export const PGMdialogue: DialogueTranslationEntries = {
|
|||||||
},
|
},
|
||||||
"brassius": {
|
"brassius": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "준비는 됐겠지!? 그럼, 우리 둘의 예술적인 합작품을 한번 만들어 보도록 할까!"
|
1: "I assume you are ready? Let our collaborative work of art begin!"
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "아… 아방가르드!!"
|
1: "Ahhh…vant-garde!"
|
||||||
},
|
},
|
||||||
"defeat": {
|
"defeat": {
|
||||||
1: "바로 신작을 만들러 가야 하니 이만 실례하겠다!"
|
1: "I will begin on a new piece at once!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"iono": {
|
"iono": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: `자~ 오늘의 각오는~ 모야모야~?
|
1: `How're ya feelin' about this battle?
|
||||||
$...
|
$...
|
||||||
$그럼, 이제 시작해 볼까!
|
$Let's get this show on the road! How strong is our challenger?
|
||||||
$도전자님의 실력은 과연 과연~!?`,
|
$I 'unno! Let's find out together!`,
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "너의 반짝임은 1000만볼트!"
|
1: "You're as flashy and bright as a 10,000,000-volt Thunderbolt, friendo!"
|
||||||
},
|
},
|
||||||
"defeat": {
|
"defeat": {
|
||||||
1: "당신의 눈길을 일렉트릭네트로 뾰로롱!"
|
1: "Your eyeballs are MINE!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"larry": {
|
"larry": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "그렇습니다. 심플한 것이 가장 강한 것입니다!"
|
1: "When all's said and done, simplicity is strongest."
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "허, 이걸로 한 방 먹은 게 되었군요."
|
1: "A serving of defeat, huh?"
|
||||||
},
|
},
|
||||||
"defeat": {
|
"defeat": {
|
||||||
1: "오늘은 저는 이만 실례하겠습니다."
|
1: "I'll call it a day."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ryme": {
|
"ryme": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "나의 영혼 흔들어 봐 Come On!"
|
1: "Come on, baby! Rattle me down to the bone!"
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "너의 Cool한 Youth 나의 Soul이 Move!"
|
1: "You're cool, my friend—you move my SOUL!"
|
||||||
},
|
},
|
||||||
"defeat": {
|
"defeat": {
|
||||||
1: "Bye Bye Baby~!"
|
1: "Later, baby!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"grusha": {
|
"grusha": {
|
||||||
"encounter": {
|
"encounter": {
|
||||||
1: "내가 너를 철저하게 얼려 버리면 고민할 것도 없겠지!"
|
1: "All I need to do is make sure the power of my Pokémon chills you to the bone!"
|
||||||
},
|
},
|
||||||
"victory": {
|
"victory": {
|
||||||
1: "너의 그 열기… 싫지 않아."
|
1: "Your burning passion… I kinda like it, to be honest."
|
||||||
},
|
},
|
||||||
"defeat": {
|
"defeat": {
|
||||||
1: "너에겐 아직 열기가 부족하구나."
|
1: "Things didn't heat up for you."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"marnie_elite": {
|
"marnie_elite": {
|
||||||
|
@ -49,6 +49,4 @@ export const menu: SimpleTranslationEntries = {
|
|||||||
"empty":"빈 슬롯",
|
"empty":"빈 슬롯",
|
||||||
"yes":"예",
|
"yes":"예",
|
||||||
"no":"아니오",
|
"no":"아니오",
|
||||||
"disclaimer": "DISCLAIMER",
|
|
||||||
"disclaimerDescription": "This game is an unfinished product; it might have playability issues (including the potential loss of save data),\n change without notice, and may or may not be updated further or completed."
|
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -99,10 +99,6 @@ export const modifierType: ModifierTypeTranslationEntries = {
|
|||||||
name: "No.{{moveId}} {{moveName}}",
|
name: "No.{{moveId}} {{moveName}}",
|
||||||
description: "포켓몬에게 {{moveName}}[[를]] 가르침",
|
description: "포켓몬에게 {{moveName}}[[를]] 가르침",
|
||||||
},
|
},
|
||||||
"TmModifierTypeWithInfo": {
|
|
||||||
name: "No.{{moveId}} {{moveName}}",
|
|
||||||
description: "포켓몬에게 {{moveName}}를(을) 가르침\n(Hold C or Shift for more info)",
|
|
||||||
},
|
|
||||||
"EvolutionItemModifierType": {
|
"EvolutionItemModifierType": {
|
||||||
description: "어느 특정 포켓몬을 진화",
|
description: "어느 특정 포켓몬을 진화",
|
||||||
},
|
},
|
||||||
|
@ -15,12 +15,12 @@ export const weather: SimpleTranslationEntries = {
|
|||||||
"sandstormStartMessage": "모래바람이 불기 시작했다!",
|
"sandstormStartMessage": "모래바람이 불기 시작했다!",
|
||||||
"sandstormLapseMessage": "모래바람이 세차게 분다",
|
"sandstormLapseMessage": "모래바람이 세차게 분다",
|
||||||
"sandstormClearMessage": "모래바람이 가라앉았다!",
|
"sandstormClearMessage": "모래바람이 가라앉았다!",
|
||||||
"sandstormDamageMessage": "모래바람이\n{{pokemonNameWithAffix}}[[를]] 덮쳤다!",
|
"sandstormDamageMessage": "모래바람이\n{{pokemonPrefix}}{{pokemonName}}[[를]] 덮쳤다!",
|
||||||
|
|
||||||
"hailStartMessage": "싸라기눈이 내리기 시작했다!",
|
"hailStartMessage": "싸라기눈이 내리기 시작했다!",
|
||||||
"hailLapseMessage": "싸라기눈이 계속 내리고 있다",
|
"hailLapseMessage": "싸라기눈이 계속 내리고 있다",
|
||||||
"hailClearMessage": "싸라기눈이 그쳤다!",
|
"hailClearMessage": "싸라기눈이 그쳤다!",
|
||||||
"hailDamageMessage": "싸라기눈이\n{{pokemonNameWithAffix}}[[를]] 덮쳤다!",
|
"hailDamageMessage": "싸라기눈이\n{{pokemonPrefix}}{{pokemonName}}[[를]] 덮쳤다!",
|
||||||
|
|
||||||
"snowStartMessage": "눈이 내리기 시작했다!",
|
"snowStartMessage": "눈이 내리기 시작했다!",
|
||||||
"snowLapseMessage": "눈이 계속 내리고 있다",
|
"snowLapseMessage": "눈이 계속 내리고 있다",
|
||||||
|
@ -56,9 +56,6 @@ export const battle: SimpleTranslationEntries = {
|
|||||||
"skipItemQuestion": "Tem certeza de que não quer escolher um item?",
|
"skipItemQuestion": "Tem certeza de que não quer escolher um item?",
|
||||||
"eggHatching": "Opa?",
|
"eggHatching": "Opa?",
|
||||||
"ivScannerUseQuestion": "Quer usar o Scanner de IVs em {{pokemonName}}?",
|
"ivScannerUseQuestion": "Quer usar o Scanner de IVs em {{pokemonName}}?",
|
||||||
"wildPokemonWithAffix": "{{pokemonName}} selvagem",
|
|
||||||
"foePokemonWithAffix": "{{pokemonName}} adversário",
|
|
||||||
"useMove": "{{pokemonNameWithAffix}} usou {{moveName}}!",
|
|
||||||
"drainMessage": "{{pokemonName}} teve sua\nenergia drenada!",
|
"drainMessage": "{{pokemonName}} teve sua\nenergia drenada!",
|
||||||
"regainHealth": "{{pokemonName}} recuperou\npontos de saúde!"
|
"regainHealth": "{{pokemonName}} recuperou\npontos de saúde!"
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -27,7 +27,7 @@ export const gameStatsUiHandler: SimpleTranslationEntries = {
|
|||||||
"subLegendsHatched": "Sub-Lendários Chocados",
|
"subLegendsHatched": "Sub-Lendários Chocados",
|
||||||
"legendsSeen": "Lendários Vistos",
|
"legendsSeen": "Lendários Vistos",
|
||||||
"legendsCaught": "Lendários Capturados",
|
"legendsCaught": "Lendários Capturados",
|
||||||
"legendsHatched": "Lendários Chocados",
|
"legendsHatched": "Legendários Chocados",
|
||||||
"mythicalsSeen": "Míticos Vistos",
|
"mythicalsSeen": "Míticos Vistos",
|
||||||
"mythicalsCaught": "Míticos Capturados",
|
"mythicalsCaught": "Míticos Capturados",
|
||||||
"mythicalsHatched": "Míticos Chocados",
|
"mythicalsHatched": "Míticos Chocados",
|
||||||
|
@ -49,6 +49,4 @@ export const menu: SimpleTranslationEntries = {
|
|||||||
"empty": "Vazio",
|
"empty": "Vazio",
|
||||||
"yes": "Sim",
|
"yes": "Sim",
|
||||||
"no": "Não",
|
"no": "Não",
|
||||||
"disclaimer": "AVISO",
|
|
||||||
"disclaimerDescription": "Este jogo é um produto inacabado; ele pode ter problemas de jogabilidade (incluindo possíveis perdas de dados salvos),\n sofrer alterações sem aviso prévio e pode ou não ser atualizado ou concluído."
|
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -46,7 +46,7 @@ export const modifierType: ModifierTypeTranslationEntries = {
|
|||||||
},
|
},
|
||||||
"PokemonNatureChangeModifierType": {
|
"PokemonNatureChangeModifierType": {
|
||||||
name: "Hortelã {{natureName}}",
|
name: "Hortelã {{natureName}}",
|
||||||
description: "Muda a natureza do Pokémon para {{natureName}} e a desbloqueia permanentemente",
|
description: "Muda a natureza de um Pokémon para {{natureName}} e a desbloqueia permanentemente para seu inicial",
|
||||||
},
|
},
|
||||||
"DoubleBattleChanceBoosterModifierType": {
|
"DoubleBattleChanceBoosterModifierType": {
|
||||||
description: "Dobra as chances de encontrar uma batalha em dupla por {{battleCount}} batalhas",
|
description: "Dobra as chances de encontrar uma batalha em dupla por {{battleCount}} batalhas",
|
||||||
@ -99,10 +99,6 @@ export const modifierType: ModifierTypeTranslationEntries = {
|
|||||||
name: "TM{{moveId}} - {{moveName}}",
|
name: "TM{{moveId}} - {{moveName}}",
|
||||||
description: "Ensina {{moveName}} a um Pokémon",
|
description: "Ensina {{moveName}} a um Pokémon",
|
||||||
},
|
},
|
||||||
"TmModifierTypeWithInfo": {
|
|
||||||
name: "TM{{moveId}} - {{moveName}}",
|
|
||||||
description: "Ensina {{moveName}} a um Pokémon\n(Segure C ou Shift para mais informações)",
|
|
||||||
},
|
|
||||||
"EvolutionItemModifierType": {
|
"EvolutionItemModifierType": {
|
||||||
description: "Faz certos Pokémon evoluírem",
|
description: "Faz certos Pokémon evoluírem",
|
||||||
},
|
},
|
||||||
|
@ -9,7 +9,7 @@ export const tutorial: SimpleTranslationEntries = {
|
|||||||
$Se o jogo estiver rodando lentamente, certifique-se de que a 'Aceleração de hardware' esteja ativada
|
$Se o jogo estiver rodando lentamente, certifique-se de que a 'Aceleração de hardware' esteja ativada
|
||||||
$nas configurações do seu navegador.`,
|
$nas configurações do seu navegador.`,
|
||||||
|
|
||||||
"accessMenu": `Para acessar o menu, pressione M ou Esc.
|
"accessMenu": `Para acessar o menu, aperte M ou Esc.
|
||||||
$O menu contém configurações e diversas funções.`,
|
$O menu contém configurações e diversas funções.`,
|
||||||
|
|
||||||
"menu": `A partir deste menu, você pode acessar as configurações.
|
"menu": `A partir deste menu, você pode acessar as configurações.
|
||||||
|
@ -15,12 +15,12 @@ export const weather: SimpleTranslationEntries = {
|
|||||||
"sandstormStartMessage": "Uma tempestade de areia se formou!",
|
"sandstormStartMessage": "Uma tempestade de areia se formou!",
|
||||||
"sandstormLapseMessage": "A tempestade de areia é violenta.",
|
"sandstormLapseMessage": "A tempestade de areia é violenta.",
|
||||||
"sandstormClearMessage": "A tempestade de areia diminuiu.",
|
"sandstormClearMessage": "A tempestade de areia diminuiu.",
|
||||||
"sandstormDamageMessage": "{{pokemonNameWithAffix}} é atingido\npela tempestade de areia!",
|
"sandstormDamageMessage": "{{pokemonPrefix}}{{pokemonName}} é atingido\npela tempestade de areia!",
|
||||||
|
|
||||||
"hailStartMessage": "Começou a chover granizo!",
|
"hailStartMessage": "Começou a chover granizo!",
|
||||||
"hailLapseMessage": "Granizo cai do céu.",
|
"hailLapseMessage": "Granizo cai do céu.",
|
||||||
"hailClearMessage": "O granizo parou.",
|
"hailClearMessage": "O granizo parou.",
|
||||||
"hailDamageMessage": "{{pokemonNameWithAffix}} é atingido\npelo granizo!",
|
"hailDamageMessage": "{{pokemonPrefix}}{{pokemonName}} é atingido\npelo granizo!",
|
||||||
|
|
||||||
"snowStartMessage": "Começou a nevar!",
|
"snowStartMessage": "Começou a nevar!",
|
||||||
"snowLapseMessage": "A neve continua caindo.",
|
"snowLapseMessage": "A neve continua caindo.",
|
||||||
|
@ -56,9 +56,6 @@ export const battle: SimpleTranslationEntries = {
|
|||||||
"skipItemQuestion": "你确定要跳过拾取道具吗?",
|
"skipItemQuestion": "你确定要跳过拾取道具吗?",
|
||||||
"eggHatching": "咦?",
|
"eggHatching": "咦?",
|
||||||
"ivScannerUseQuestion": "对 {{pokemonName}} 使用个体值扫描仪?",
|
"ivScannerUseQuestion": "对 {{pokemonName}} 使用个体值扫描仪?",
|
||||||
"wildPokemonWithAffix": "Wild {{pokemonName}}",
|
|
||||||
"foePokemonWithAffix": "Foe {{pokemonName}}",
|
|
||||||
"useMove": "{{pokemonNameWithAffix}} used {{moveName}}!",
|
|
||||||
"drainMessage": "{{pokemonName}} had its\nenergy drained!",
|
"drainMessage": "{{pokemonName}} had its\nenergy drained!",
|
||||||
"regainHealth": "{{pokemonName}} regained\nhealth!"
|
"regainHealth": "{{pokemonName}} regained\nhealth!"
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -49,6 +49,4 @@ export const menu: SimpleTranslationEntries = {
|
|||||||
"empty": "空",
|
"empty": "空",
|
||||||
"yes": "是",
|
"yes": "是",
|
||||||
"no": "否",
|
"no": "否",
|
||||||
"disclaimer": "DISCLAIMER",
|
|
||||||
"disclaimerDescription": "This game is an unfinished product; it might have playability issues (including the potential loss of save data),\n change without notice, and may or may not be updated further or completed."
|
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -99,10 +99,6 @@ export const modifierType: ModifierTypeTranslationEntries = {
|
|||||||
name: "招式学习器 {{moveId}} - {{moveName}}",
|
name: "招式学习器 {{moveId}} - {{moveName}}",
|
||||||
description: "教会一只宝可梦{{moveName}}",
|
description: "教会一只宝可梦{{moveName}}",
|
||||||
},
|
},
|
||||||
"TmModifierTypeWithInfo": {
|
|
||||||
name: "招式学习器 {{moveId}} - {{moveName}}",
|
|
||||||
description: "教会一只宝可梦{{moveName}}\n(Hold C or Shift for more info)",
|
|
||||||
},
|
|
||||||
"EvolutionItemModifierType": {
|
"EvolutionItemModifierType": {
|
||||||
description: "使某些宝可梦进化",
|
description: "使某些宝可梦进化",
|
||||||
},
|
},
|
||||||
|
@ -15,12 +15,12 @@ export const weather: SimpleTranslationEntries = {
|
|||||||
"sandstormStartMessage": "开始刮沙暴了!",
|
"sandstormStartMessage": "开始刮沙暴了!",
|
||||||
"sandstormLapseMessage": "沙暴肆虐。",
|
"sandstormLapseMessage": "沙暴肆虐。",
|
||||||
"sandstormClearMessage": "沙暴停止了!",
|
"sandstormClearMessage": "沙暴停止了!",
|
||||||
"sandstormDamageMessage": "沙暴袭击了{{pokemonNameWithAffix}}!",
|
"sandstormDamageMessage": "沙暴袭击了{{pokemonPrefix}}{{pokemonName}}!",
|
||||||
|
|
||||||
"hailStartMessage": "开始下冰雹了!",
|
"hailStartMessage": "开始下冰雹了!",
|
||||||
"hailLapseMessage": "冰雹继续肆虐。",
|
"hailLapseMessage": "冰雹继续肆虐。",
|
||||||
"hailClearMessage": "冰雹不再下了。",
|
"hailClearMessage": "冰雹不再下了。",
|
||||||
"hailDamageMessage": "冰雹袭击了{{pokemonNameWithAffix}}!",
|
"hailDamageMessage": "冰雹袭击了{{pokemonPrefix}}{{pokemonName}}!",
|
||||||
|
|
||||||
"snowStartMessage": "开始下雪了!",
|
"snowStartMessage": "开始下雪了!",
|
||||||
"snowLapseMessage": "雪继续下。",
|
"snowLapseMessage": "雪继续下。",
|
||||||
|
@ -53,9 +53,6 @@ export const battle: SimpleTranslationEntries = {
|
|||||||
"skipItemQuestion": "你要跳過拾取道具嗎?",
|
"skipItemQuestion": "你要跳過拾取道具嗎?",
|
||||||
"eggHatching": "咦?",
|
"eggHatching": "咦?",
|
||||||
"ivScannerUseQuestion": "對 {{pokemonName}} 使用個體值掃描?",
|
"ivScannerUseQuestion": "對 {{pokemonName}} 使用個體值掃描?",
|
||||||
"wildPokemonWithAffix": "Wild {{pokemonName}}",
|
|
||||||
"foePokemonWithAffix": "Foe {{pokemonName}}",
|
|
||||||
"useMove": "{{pokemonNameWithAffix}} used {{moveName}}!",
|
|
||||||
"drainMessage": "{{pokemonName}} had its\nenergy drained!",
|
"drainMessage": "{{pokemonName}} had its\nenergy drained!",
|
||||||
"regainHealth": "{{pokemonName}} regained\nhealth!"
|
"regainHealth": "{{pokemonName}} regained\nhealth!"
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -49,6 +49,4 @@ export const menu: SimpleTranslationEntries = {
|
|||||||
"empty":"空",
|
"empty":"空",
|
||||||
"yes":"是",
|
"yes":"是",
|
||||||
"no":"否",
|
"no":"否",
|
||||||
"disclaimer": "DISCLAIMER",
|
|
||||||
"disclaimerDescription": "This game is an unfinished product; it might have playability issues (including the potential loss of save data),\n change without notice, and may or may not be updated further or completed."
|
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -98,10 +98,6 @@ export const modifierType: ModifierTypeTranslationEntries = {
|
|||||||
name: "招式學習器 {{moveId}} - {{moveName}}",
|
name: "招式學習器 {{moveId}} - {{moveName}}",
|
||||||
description: "教會一隻寶可夢{{moveName}}",
|
description: "教會一隻寶可夢{{moveName}}",
|
||||||
},
|
},
|
||||||
TmModifierTypeWithInfo: {
|
|
||||||
name: "TM{{moveId}} - {{moveName}}",
|
|
||||||
description: "教會一隻寶可夢{{moveName}}\n(Hold C or Shift for more info)",
|
|
||||||
},
|
|
||||||
EvolutionItemModifierType: { description: "使某些寶可夢進化" },
|
EvolutionItemModifierType: { description: "使某些寶可夢進化" },
|
||||||
FormChangeItemModifierType: { description: "使某些寶可夢更改形態" },
|
FormChangeItemModifierType: { description: "使某些寶可夢更改形態" },
|
||||||
FusePokemonModifierType: {
|
FusePokemonModifierType: {
|
||||||
|
@ -15,12 +15,12 @@ export const weather: SimpleTranslationEntries = {
|
|||||||
"sandstormStartMessage": "開始刮沙暴了!",
|
"sandstormStartMessage": "開始刮沙暴了!",
|
||||||
"sandstormLapseMessage": "沙暴肆虐。",
|
"sandstormLapseMessage": "沙暴肆虐。",
|
||||||
"sandstormClearMessage": "沙暴停止了。",
|
"sandstormClearMessage": "沙暴停止了。",
|
||||||
"sandstormDamageMessage": "沙暴襲擊了{{pokemonNameWithAffix}}!",
|
"sandstormDamageMessage": "沙暴襲擊了{{pokemonPrefix}}{{pokemonName}}!",
|
||||||
|
|
||||||
"hailStartMessage": "開始下冰雹了!",
|
"hailStartMessage": "開始下冰雹了!",
|
||||||
"hailLapseMessage": "冰雹繼續肆虐。",
|
"hailLapseMessage": "冰雹繼續肆虐。",
|
||||||
"hailClearMessage": "冰雹不再下了。",
|
"hailClearMessage": "冰雹不再下了。",
|
||||||
"hailDamageMessage": "冰雹襲擊了{{pokemonNameWithAffix}}!",
|
"hailDamageMessage": "冰雹襲擊了{{pokemonPrefix}}{{pokemonName}}!",
|
||||||
|
|
||||||
"snowStartMessage": "開始下雪了!",
|
"snowStartMessage": "開始下雪了!",
|
||||||
"snowLapseMessage": "雪繼續下。",
|
"snowLapseMessage": "雪繼續下。",
|
||||||
|
@ -1,40 +1,19 @@
|
|||||||
import { BattleSpec } from "./enums/battle-spec";
|
import { BattleSpec } from "./enums/battle-spec";
|
||||||
import Pokemon from "./field/pokemon";
|
import Pokemon from "./field/pokemon";
|
||||||
import i18next from "./plugins/i18n";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Builds a message by concatenating the Pokemon name with its potential affix and the given text
|
|
||||||
* @param pokemon {@linkcode Pokemon} name and battle context will be retrieved from this instance for {@linkcode getPokemonNameWithAffix}
|
|
||||||
* @param {string} content any text
|
|
||||||
* @returns {string} ex: "Wild Gengar fainted!", "Ectoplasma sauvage est K.O!"
|
|
||||||
* @see {@linkcode getPokemonNameWithAffix} for the Pokemon's name and potentiel affix
|
|
||||||
*/
|
|
||||||
export function getPokemonMessage(pokemon: Pokemon, content: string): string {
|
export function getPokemonMessage(pokemon: Pokemon, content: string): string {
|
||||||
return `${getPokemonNameWithAffix(pokemon)}${content}`;
|
return `${getPokemonPrefix(pokemon)}${pokemon.name}${content}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
export function getPokemonPrefix(pokemon: Pokemon): string {
|
||||||
* Retrieves the Pokemon's name, potentially with an affix indicating its role (wild or foe) in the current battle context, translated
|
let prefix: string;
|
||||||
* @param pokemon {@linkcode Pokemon} name and battle context will be retrieved from this instance
|
|
||||||
* @returns {string} ex: "Wild Gengar", "Ectoplasma sauvage"
|
|
||||||
*/
|
|
||||||
export function getPokemonNameWithAffix(pokemon: Pokemon): string {
|
|
||||||
switch (pokemon.scene.currentBattle.battleSpec) {
|
switch (pokemon.scene.currentBattle.battleSpec) {
|
||||||
case BattleSpec.DEFAULT:
|
case BattleSpec.DEFAULT:
|
||||||
return !pokemon.isPlayer()
|
prefix = !pokemon.isPlayer() ? pokemon.hasTrainer() ? "Foe " : "Wild " : "";
|
||||||
? pokemon.hasTrainer()
|
break;
|
||||||
? i18next.t("battle:foePokemonWithAffix", {
|
|
||||||
pokemonName: pokemon.name,
|
|
||||||
})
|
|
||||||
: i18next.t("battle:wildPokemonWithAffix", {
|
|
||||||
pokemonName: pokemon.name,
|
|
||||||
})
|
|
||||||
: pokemon.name;
|
|
||||||
case BattleSpec.FINAL_BOSS:
|
case BattleSpec.FINAL_BOSS:
|
||||||
return !pokemon.isPlayer()
|
prefix = !pokemon.isPlayer() ? "Foe " : "";
|
||||||
? i18next.t("battle:foePokemonWithAffix", { pokemonName: pokemon.name })
|
break;
|
||||||
: pokemon.name;
|
|
||||||
default:
|
|
||||||
return pokemon.name;
|
|
||||||
}
|
}
|
||||||
|
return prefix;
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,6 @@ import { ModifierTier } from "./modifier-tier";
|
|||||||
import { Nature, getNatureName, getNatureStatMultiplier } from "#app/data/nature";
|
import { Nature, getNatureName, getNatureStatMultiplier } from "#app/data/nature";
|
||||||
import i18next from "#app/plugins/i18n";
|
import i18next from "#app/plugins/i18n";
|
||||||
import { getModifierTierTextTint } from "#app/ui/text";
|
import { getModifierTierTextTint } from "#app/ui/text";
|
||||||
import * as Overrides from "../overrides";
|
|
||||||
|
|
||||||
const outputModifierData = false;
|
const outputModifierData = false;
|
||||||
const useMaxWeightForOutput = false;
|
const useMaxWeightForOutput = false;
|
||||||
@ -722,7 +721,7 @@ export class TmModifierType extends PokemonModifierType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getDescription(scene: BattleScene): string {
|
getDescription(scene: BattleScene): string {
|
||||||
return i18next.t(scene.enableMoveInfo ? "modifierType:ModifierType.TmModifierTypeWithInfo.description" : "modifierType:ModifierType.TmModifierType.description", { moveName: allMoves[this.moveId].name });
|
return i18next.t("modifierType:ModifierType.TmModifierType.description", { moveName: allMoves[this.moveId].name });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1323,7 +1322,6 @@ const modifierPool: ModifierPool = {
|
|||||||
new WeightedModifierType(modifierTypes.BASE_STAT_BOOSTER, 3),
|
new WeightedModifierType(modifierTypes.BASE_STAT_BOOSTER, 3),
|
||||||
new WeightedModifierType(modifierTypes.TERA_SHARD, 1),
|
new WeightedModifierType(modifierTypes.TERA_SHARD, 1),
|
||||||
new WeightedModifierType(modifierTypes.DNA_SPLICERS, (party: Pokemon[]) => party[0].scene.gameMode.isSplicedOnly && party.filter(p => !p.fusionSpecies).length > 1 ? 4 : 0),
|
new WeightedModifierType(modifierTypes.DNA_SPLICERS, (party: Pokemon[]) => party[0].scene.gameMode.isSplicedOnly && party.filter(p => !p.fusionSpecies).length > 1 ? 4 : 0),
|
||||||
new WeightedModifierType(modifierTypes.VOUCHER, (party: Pokemon[], rerollCount: integer) => !party[0].scene.gameMode.isDaily ? Math.max(1 - rerollCount, 0) : 0, 1),
|
|
||||||
].map(m => {
|
].map(m => {
|
||||||
m.setTier(ModifierTier.GREAT); return m;
|
m.setTier(ModifierTier.GREAT); return m;
|
||||||
}),
|
}),
|
||||||
@ -1359,6 +1357,7 @@ const modifierPool: ModifierPool = {
|
|||||||
new WeightedModifierType(modifierTypes.EXP_SHARE, 12),
|
new WeightedModifierType(modifierTypes.EXP_SHARE, 12),
|
||||||
new WeightedModifierType(modifierTypes.EXP_BALANCE, 4),
|
new WeightedModifierType(modifierTypes.EXP_BALANCE, 4),
|
||||||
new WeightedModifierType(modifierTypes.TERA_ORB, (party: Pokemon[]) => Math.min(Math.max(Math.floor(party[0].scene.currentBattle.waveIndex / 50) * 2, 1), 4), 4),
|
new WeightedModifierType(modifierTypes.TERA_ORB, (party: Pokemon[]) => Math.min(Math.max(Math.floor(party[0].scene.currentBattle.waveIndex / 50) * 2, 1), 4), 4),
|
||||||
|
new WeightedModifierType(modifierTypes.VOUCHER, (party: Pokemon[], rerollCount: integer) => !party[0].scene.gameMode.isDaily ? Math.max(3 - rerollCount, 0) : 0, 3),
|
||||||
new WeightedModifierType(modifierTypes.WIDE_LENS, 4),
|
new WeightedModifierType(modifierTypes.WIDE_LENS, 4),
|
||||||
].map(m => {
|
].map(m => {
|
||||||
m.setTier(ModifierTier.ULTRA); return m;
|
m.setTier(ModifierTier.ULTRA); return m;
|
||||||
@ -1383,7 +1382,6 @@ const modifierPool: ModifierPool = {
|
|||||||
new WeightedModifierType(modifierTypes.FORM_CHANGE_ITEM, 18),
|
new WeightedModifierType(modifierTypes.FORM_CHANGE_ITEM, 18),
|
||||||
new WeightedModifierType(modifierTypes.MEGA_BRACELET, (party: Pokemon[]) => Math.min(Math.ceil(party[0].scene.currentBattle.waveIndex / 50), 4) * 8, 32),
|
new WeightedModifierType(modifierTypes.MEGA_BRACELET, (party: Pokemon[]) => Math.min(Math.ceil(party[0].scene.currentBattle.waveIndex / 50), 4) * 8, 32),
|
||||||
new WeightedModifierType(modifierTypes.DYNAMAX_BAND, (party: Pokemon[]) => Math.min(Math.ceil(party[0].scene.currentBattle.waveIndex / 50), 4) * 8, 32),
|
new WeightedModifierType(modifierTypes.DYNAMAX_BAND, (party: Pokemon[]) => Math.min(Math.ceil(party[0].scene.currentBattle.waveIndex / 50), 4) * 8, 32),
|
||||||
new WeightedModifierType(modifierTypes.VOUCHER_PLUS, (party: Pokemon[], rerollCount: integer) => !party[0].scene.gameMode.isDaily ? Math.max(5 - rerollCount * 2, 0) : 0, 5),
|
|
||||||
].map(m => {
|
].map(m => {
|
||||||
m.setTier(ModifierTier.ROGUE); return m;
|
m.setTier(ModifierTier.ROGUE); return m;
|
||||||
}),
|
}),
|
||||||
@ -1392,7 +1390,7 @@ const modifierPool: ModifierPool = {
|
|||||||
new WeightedModifierType(modifierTypes.SHINY_CHARM, 14),
|
new WeightedModifierType(modifierTypes.SHINY_CHARM, 14),
|
||||||
new WeightedModifierType(modifierTypes.HEALING_CHARM, 18),
|
new WeightedModifierType(modifierTypes.HEALING_CHARM, 18),
|
||||||
new WeightedModifierType(modifierTypes.MULTI_LENS, 18),
|
new WeightedModifierType(modifierTypes.MULTI_LENS, 18),
|
||||||
new WeightedModifierType(modifierTypes.VOUCHER_PREMIUM, (party: Pokemon[], rerollCount: integer) => !party[0].scene.gameMode.isDaily && !party[0].scene.gameMode.isEndless && !party[0].scene.gameMode.isSplicedOnly ? Math.max(6 - rerollCount * 2, 0) : 0, 6),
|
new WeightedModifierType(modifierTypes.VOUCHER_PLUS, (party: Pokemon[], rerollCount: integer) => !party[0].scene.gameMode.isDaily ? Math.max(9 - rerollCount * 3, 0) : 0, 9),
|
||||||
new WeightedModifierType(modifierTypes.DNA_SPLICERS, (party: Pokemon[]) => !party[0].scene.gameMode.isSplicedOnly && party.filter(p => !p.fusionSpecies).length > 1 ? 24 : 0, 24),
|
new WeightedModifierType(modifierTypes.DNA_SPLICERS, (party: Pokemon[]) => !party[0].scene.gameMode.isSplicedOnly && party.filter(p => !p.fusionSpecies).length > 1 ? 24 : 0, 24),
|
||||||
new WeightedModifierType(modifierTypes.MINI_BLACK_HOLE, (party: Pokemon[]) => party[0].scene.gameData.unlocks[Unlockables.MINI_BLACK_HOLE] ? 1 : 0, 1),
|
new WeightedModifierType(modifierTypes.MINI_BLACK_HOLE, (party: Pokemon[]) => party[0].scene.gameData.unlocks[Unlockables.MINI_BLACK_HOLE] ? 1 : 0, 1),
|
||||||
].map(m => {
|
].map(m => {
|
||||||
@ -1674,14 +1672,6 @@ export function getPlayerModifierTypeOptions(count: integer, party: PlayerPokemo
|
|||||||
}
|
}
|
||||||
options.push(candidate);
|
options.push(candidate);
|
||||||
});
|
});
|
||||||
// OVERRIDE IF NECESSARY
|
|
||||||
if (Overrides.ITEM_REWARD_OVERRIDE?.length) {
|
|
||||||
options.forEach((mod, i) => {
|
|
||||||
// @ts-ignore: keeps throwing don't use string as index error in typedoc run
|
|
||||||
const override = modifierTypes[Overrides.ITEM_REWARD_OVERRIDE[i]]?.();
|
|
||||||
mod.type = (override instanceof ModifierTypeGenerator ? override.generateType(party) : override) || mod.type;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return options;
|
return options;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1884,9 +1874,8 @@ export class ModifierTypeOption {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function getPartyLuckValue(party: Pokemon[]): integer {
|
export function getPartyLuckValue(party: Pokemon[]): integer {
|
||||||
const luck = Phaser.Math.Clamp(party.map(p => p.isFainted() ? 0 : p.getLuck())
|
return Phaser.Math.Clamp(party.map(p => p.isFainted() ? 0 : p.getLuck())
|
||||||
.reduce((total: integer, value: integer) => total += value, 0), 0, 14);
|
.reduce((total: integer, value: integer) => total += value, 0), 0, 14);
|
||||||
return luck || 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getLuckString(luckValue: integer): string {
|
export function getLuckString(luckValue: integer): string {
|
||||||
|
@ -22,7 +22,6 @@ import { Nature } from "#app/data/nature";
|
|||||||
import { BattlerTagType } from "#app/data/enums/battler-tag-type";
|
import { BattlerTagType } from "#app/data/enums/battler-tag-type";
|
||||||
import * as Overrides from "../overrides";
|
import * as Overrides from "../overrides";
|
||||||
import { ModifierType, modifierTypes } from "./modifier-type";
|
import { ModifierType, modifierTypes } from "./modifier-type";
|
||||||
import { Command } from "#app/ui/command-ui-handler.js";
|
|
||||||
|
|
||||||
export type ModifierPredicate = (modifier: Modifier) => boolean;
|
export type ModifierPredicate = (modifier: Modifier) => boolean;
|
||||||
|
|
||||||
@ -777,10 +776,7 @@ export class BypassSpeedChanceModifier extends PokemonHeldItemModifier {
|
|||||||
|
|
||||||
if (!bypassSpeed.value && pokemon.randSeedInt(10) < this.getStackCount()) {
|
if (!bypassSpeed.value && pokemon.randSeedInt(10) < this.getStackCount()) {
|
||||||
bypassSpeed.value = true;
|
bypassSpeed.value = true;
|
||||||
const isCommandFight = pokemon.scene.currentBattle.turnCommands[pokemon.getBattlerIndex()]?.command === Command.FIGHT;
|
if (this.type instanceof ModifierTypes.PokemonHeldItemModifierType && this.type.id === "QUICK_CLAW") {
|
||||||
const hasQuickClaw = this.type instanceof ModifierTypes.PokemonHeldItemModifierType && this.type.id === "QUICK_CLAW";
|
|
||||||
|
|
||||||
if (isCommandFight && hasQuickClaw) {
|
|
||||||
pokemon.scene.queueMessage(getPokemonMessage(pokemon, " used its quick claw to move faster!"));
|
pokemon.scene.queueMessage(getPokemonMessage(pokemon, " used its quick claw to move faster!"));
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -2195,8 +2191,7 @@ export class EnemyAttackStatusEffectChanceModifier extends EnemyPersistentModifi
|
|||||||
super(type, stackCount);
|
super(type, stackCount);
|
||||||
|
|
||||||
this.effect = effect;
|
this.effect = effect;
|
||||||
//Hardcode temporarily
|
this.chance = (chancePercent || 5) / 100;
|
||||||
this.chance = .025 * ((this.effect === StatusEffect.BURN || this.effect === StatusEffect.POISON) ? 2 : 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
match(modifier: Modifier): boolean {
|
match(modifier: Modifier): boolean {
|
||||||
@ -2231,8 +2226,7 @@ export class EnemyStatusEffectHealChanceModifier extends EnemyPersistentModifier
|
|||||||
constructor(type: ModifierType, chancePercent: number, stackCount?: integer) {
|
constructor(type: ModifierType, chancePercent: number, stackCount?: integer) {
|
||||||
super(type, stackCount);
|
super(type, stackCount);
|
||||||
|
|
||||||
//Hardcode temporarily
|
this.chance = (chancePercent || 2.5) / 100;
|
||||||
this.chance = .025;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
match(modifier: Modifier): boolean {
|
match(modifier: Modifier): boolean {
|
||||||
@ -2270,8 +2264,7 @@ export class EnemyEndureChanceModifier extends EnemyPersistentModifier {
|
|||||||
constructor(type: ModifierType, chancePercent?: number, stackCount?: integer) {
|
constructor(type: ModifierType, chancePercent?: number, stackCount?: integer) {
|
||||||
super(type, stackCount || 10);
|
super(type, stackCount || 10);
|
||||||
|
|
||||||
//Hardcode temporarily
|
this.chance = (chancePercent || 2) / 100;
|
||||||
this.chance = .02;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
match(modifier: Modifier) {
|
match(modifier: Modifier) {
|
||||||
|
@ -110,11 +110,3 @@ export const OPP_MODIFIER_OVERRIDE: Array<ModifierOverride> = [];
|
|||||||
|
|
||||||
export const STARTING_HELD_ITEMS_OVERRIDE: Array<ModifierOverride> = [];
|
export const STARTING_HELD_ITEMS_OVERRIDE: Array<ModifierOverride> = [];
|
||||||
export const OPP_HELD_ITEMS_OVERRIDE: Array<ModifierOverride> = [];
|
export const OPP_HELD_ITEMS_OVERRIDE: Array<ModifierOverride> = [];
|
||||||
|
|
||||||
/**
|
|
||||||
* An array of items by keys as defined in the "modifierTypes" object in the "modifier/modifier-type.ts" file.
|
|
||||||
* Items listed will replace the normal rolls.
|
|
||||||
* If less items are listed than rolled, only some items will be replaced
|
|
||||||
* If more items are listed than rolled, only the first X items will be shown, where X is the number of items rolled.
|
|
||||||
*/
|
|
||||||
export const ITEM_REWARD_OVERRIDE: Array<String> = [];
|
|
||||||
|
@ -23,7 +23,7 @@ import { FusePokemonModifierType, ModifierPoolType, ModifierType, ModifierTypeFu
|
|||||||
import SoundFade from "phaser3-rex-plugins/plugins/soundfade";
|
import SoundFade from "phaser3-rex-plugins/plugins/soundfade";
|
||||||
import { BattlerTagLapseType, EncoreTag, HideSpriteTag as HiddenTag, ProtectedTag, TrappedTag } from "./data/battler-tags";
|
import { BattlerTagLapseType, EncoreTag, HideSpriteTag as HiddenTag, ProtectedTag, TrappedTag } from "./data/battler-tags";
|
||||||
import { BattlerTagType } from "./data/enums/battler-tag-type";
|
import { BattlerTagType } from "./data/enums/battler-tag-type";
|
||||||
import { getPokemonMessage, getPokemonNameWithAffix } from "./messages";
|
import { getPokemonMessage, getPokemonPrefix } from "./messages";
|
||||||
import { Starter } from "./ui/starter-select-ui-handler";
|
import { Starter } from "./ui/starter-select-ui-handler";
|
||||||
import { Gender } from "./data/gender";
|
import { Gender } from "./data/gender";
|
||||||
import { Weather, WeatherType, getRandomWeatherType, getTerrainBlockMessage, getWeatherDamageMessage, getWeatherLapseMessage } from "./data/weather";
|
import { Weather, WeatherType, getRandomWeatherType, getTerrainBlockMessage, getWeatherDamageMessage, getWeatherLapseMessage } from "./data/weather";
|
||||||
@ -43,8 +43,7 @@ import { EggHatchPhase } from "./egg-hatch-phase";
|
|||||||
import { Egg } from "./data/egg";
|
import { Egg } from "./data/egg";
|
||||||
import { vouchers } from "./system/voucher";
|
import { vouchers } from "./system/voucher";
|
||||||
import { loggedInUser, updateUserInfo } from "./account";
|
import { loggedInUser, updateUserInfo } from "./account";
|
||||||
import { SessionSaveData } from "./system/game-data";
|
import { PlayerGender, SessionSaveData } from "./system/game-data";
|
||||||
import { PlayerGender } from "./data/enums/player-gender";
|
|
||||||
import { addPokeballCaptureStars, addPokeballOpenParticles } from "./field/anims";
|
import { addPokeballCaptureStars, addPokeballOpenParticles } from "./field/anims";
|
||||||
import { SpeciesFormChangeActiveTrigger, SpeciesFormChangeManualTrigger, SpeciesFormChangeMoveLearnedTrigger, SpeciesFormChangePostMoveTrigger, SpeciesFormChangePreMoveTrigger } from "./data/pokemon-forms";
|
import { SpeciesFormChangeActiveTrigger, SpeciesFormChangeManualTrigger, SpeciesFormChangeMoveLearnedTrigger, SpeciesFormChangePostMoveTrigger, SpeciesFormChangePreMoveTrigger } from "./data/pokemon-forms";
|
||||||
import { battleSpecDialogue, getCharVariantFromDialogue, miscDialogue } from "./data/dialogue";
|
import { battleSpecDialogue, getCharVariantFromDialogue, miscDialogue } from "./data/dialogue";
|
||||||
@ -62,7 +61,7 @@ import { Abilities } from "./data/enums/abilities";
|
|||||||
import * as Overrides from "./overrides";
|
import * as Overrides from "./overrides";
|
||||||
import { TextStyle, addTextObject } from "./ui/text";
|
import { TextStyle, addTextObject } from "./ui/text";
|
||||||
import { Type } from "./data/type";
|
import { Type } from "./data/type";
|
||||||
import { BerryUsedEvent, EncounterPhaseEvent, MoveUsedEvent, TurnEndEvent, TurnInitEvent } from "./battle-scene-events";
|
import { BerryUsedEvent, MoveUsedEvent, TurnEndEvent, TurnInitEvent } from "./battle-scene-events";
|
||||||
|
|
||||||
|
|
||||||
export class LoginPhase extends Phase {
|
export class LoginPhase extends Phase {
|
||||||
@ -741,8 +740,6 @@ export class EncounterPhase extends BattlePhase {
|
|||||||
|
|
||||||
this.scene.initSession();
|
this.scene.initSession();
|
||||||
|
|
||||||
this.scene.eventTarget.dispatchEvent(new EncounterPhaseEvent());
|
|
||||||
|
|
||||||
// Failsafe if players somehow skip floor 200 in classic mode
|
// Failsafe if players somehow skip floor 200 in classic mode
|
||||||
if (this.scene.gameMode.isClassic && this.scene.currentBattle.waveIndex > 200) {
|
if (this.scene.gameMode.isClassic && this.scene.currentBattle.waveIndex > 200) {
|
||||||
this.scene.unshiftPhase(new GameOverPhase(this.scene));
|
this.scene.unshiftPhase(new GameOverPhase(this.scene));
|
||||||
@ -1667,11 +1664,6 @@ export class CheckSwitchPhase extends BattlePhase {
|
|||||||
|
|
||||||
const pokemon = this.scene.getPlayerField()[this.fieldIndex];
|
const pokemon = this.scene.getPlayerField()[this.fieldIndex];
|
||||||
|
|
||||||
if (this.scene.battleStyle === 1) {
|
|
||||||
super.end();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.scene.field.getAll().indexOf(pokemon) === -1) {
|
if (this.scene.field.getAll().indexOf(pokemon) === -1) {
|
||||||
this.scene.unshiftPhase(new SummonMissingPhase(this.scene, this.fieldIndex));
|
this.scene.unshiftPhase(new SummonMissingPhase(this.scene, this.fieldIndex));
|
||||||
super.end();
|
super.end();
|
||||||
@ -2281,7 +2273,7 @@ export class TurnEndPhase extends FieldPhase {
|
|||||||
pokemon.lapseTags(BattlerTagLapseType.TURN_END);
|
pokemon.lapseTags(BattlerTagLapseType.TURN_END);
|
||||||
|
|
||||||
if (pokemon.summonData.disabledMove && !--pokemon.summonData.disabledTurns) {
|
if (pokemon.summonData.disabledMove && !--pokemon.summonData.disabledTurns) {
|
||||||
this.scene.pushPhase(new MessagePhase(this.scene, i18next.t("battle:notDisabled", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: allMoves[pokemon.summonData.disabledMove].name })));
|
this.scene.pushPhase(new MessagePhase(this.scene, i18next.t("battle:notDisabled", { pokemonName: `${getPokemonPrefix(pokemon)}${pokemon.name}`, moveName: allMoves[pokemon.summonData.disabledMove].name })));
|
||||||
pokemon.summonData.disabledMove = Moves.NONE;
|
pokemon.summonData.disabledMove = Moves.NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2591,7 +2583,7 @@ export class MovePhase extends BattlePhase {
|
|||||||
this.scene.getPlayerField().forEach(pokemon => {
|
this.scene.getPlayerField().forEach(pokemon => {
|
||||||
applyPostMoveUsedAbAttrs(PostMoveUsedAbAttr, pokemon, this.move, this.pokemon, this.targets);
|
applyPostMoveUsedAbAttrs(PostMoveUsedAbAttr, pokemon, this.move, this.pokemon, this.targets);
|
||||||
});
|
});
|
||||||
this.scene.getEnemyField().forEach(pokemon => {
|
this.scene.getEnemyParty().forEach(pokemon => {
|
||||||
applyPostMoveUsedAbAttrs(PostMoveUsedAbAttr, pokemon, this.move, this.pokemon, this.targets);
|
applyPostMoveUsedAbAttrs(PostMoveUsedAbAttr, pokemon, this.move, this.pokemon, this.targets);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -2648,10 +2640,7 @@ export class MovePhase extends BattlePhase {
|
|||||||
if (this.move.getMove().hasAttr(ChargeAttr)) {
|
if (this.move.getMove().hasAttr(ChargeAttr)) {
|
||||||
const lastMove = this.pokemon.getLastXMoves() as TurnMove[];
|
const lastMove = this.pokemon.getLastXMoves() as TurnMove[];
|
||||||
if (!lastMove.length || lastMove[0].move !== this.move.getMove().id || lastMove[0].result !== MoveResult.OTHER) {
|
if (!lastMove.length || lastMove[0].move !== this.move.getMove().id || lastMove[0].result !== MoveResult.OTHER) {
|
||||||
this.scene.queueMessage(i18next.t("battle:useMove", {
|
this.scene.queueMessage(getPokemonMessage(this.pokemon, ` used\n${this.move.getName()}!`), 500);
|
||||||
pokemonNameWithAffix: getPokemonNameWithAffix(this.pokemon),
|
|
||||||
moveName: this.move.getName()
|
|
||||||
}), 500);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2660,10 +2649,7 @@ export class MovePhase extends BattlePhase {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.scene.queueMessage(i18next.t("battle:useMove", {
|
this.scene.queueMessage(getPokemonMessage(this.pokemon, ` used\n${this.move.getName()}!`), 500);
|
||||||
pokemonNameWithAffix: getPokemonNameWithAffix(this.pokemon),
|
|
||||||
moveName: this.move.getName()
|
|
||||||
}), 500);
|
|
||||||
applyMoveAttrs(PreMoveMessageAttr, this.pokemon, this.pokemon.getOpponents().find(() => true), this.move.getMove());
|
applyMoveAttrs(PreMoveMessageAttr, this.pokemon, this.pokemon.getOpponents().find(() => true), this.move.getMove());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,11 +36,28 @@ import { TerrainChangedEvent, WeatherChangedEvent } from "#app/field/arena-event
|
|||||||
import { Device } from "#app/enums/devices.js";
|
import { Device } from "#app/enums/devices.js";
|
||||||
import { EnemyAttackStatusEffectChanceModifier } from "../modifier/modifier";
|
import { EnemyAttackStatusEffectChanceModifier } from "../modifier/modifier";
|
||||||
import { StatusEffect } from "#app/data/status-effect.js";
|
import { StatusEffect } from "#app/data/status-effect.js";
|
||||||
import { PlayerGender } from "#app/data/enums/player-gender";
|
|
||||||
import { GameDataType } from "#app/data/enums/game-data-type";
|
|
||||||
|
|
||||||
const saveKey = "x0i2O7WRiANTqPmZ"; // Temporary; secure encryption is not yet necessary
|
const saveKey = "x0i2O7WRiANTqPmZ"; // Temporary; secure encryption is not yet necessary
|
||||||
|
|
||||||
|
export enum GameDataType {
|
||||||
|
SYSTEM,
|
||||||
|
SESSION,
|
||||||
|
SETTINGS,
|
||||||
|
TUTORIALS,
|
||||||
|
SEEN_DIALOGUES
|
||||||
|
}
|
||||||
|
|
||||||
|
export enum PlayerGender {
|
||||||
|
UNSET,
|
||||||
|
MALE,
|
||||||
|
FEMALE
|
||||||
|
}
|
||||||
|
|
||||||
|
export enum Passive {
|
||||||
|
UNLOCKED = 1,
|
||||||
|
ENABLED = 2
|
||||||
|
}
|
||||||
|
|
||||||
export function getDataTypeKey(dataType: GameDataType, slotId: integer = 0): string {
|
export function getDataTypeKey(dataType: GameDataType, slotId: integer = 0): string {
|
||||||
switch (dataType) {
|
switch (dataType) {
|
||||||
case GameDataType.SYSTEM:
|
case GameDataType.SYSTEM:
|
||||||
|
@ -3,11 +3,10 @@ import i18next from "i18next";
|
|||||||
import BattleScene from "../../battle-scene";
|
import BattleScene from "../../battle-scene";
|
||||||
import { hasTouchscreen } from "../../touch-controls";
|
import { hasTouchscreen } from "../../touch-controls";
|
||||||
import { updateWindowType } from "../../ui/ui-theme";
|
import { updateWindowType } from "../../ui/ui-theme";
|
||||||
import { PlayerGender } from "#app/data/enums/player-gender";
|
import { PlayerGender } from "../game-data";
|
||||||
import { CandyUpgradeNotificationChangedEvent } from "#app/battle-scene-events.js";
|
import { CandyUpgradeNotificationChangedEvent } from "#app/battle-scene-events.js";
|
||||||
import { MoneyFormat } from "../../enums/money-format";
|
import { MoneyFormat } from "../../enums/money-format";
|
||||||
import SettingsUiHandler from "#app/ui/settings/settings-ui-handler";
|
import SettingsUiHandler from "#app/ui/settings/settings-ui-handler";
|
||||||
import { EaseType } from "#app/ui/enums/ease-type.js";
|
|
||||||
|
|
||||||
const MUTE = "Mute";
|
const MUTE = "Mute";
|
||||||
const VOLUME_OPTIONS = new Array(11).fill(null).map((_, i) => i ? (i * 10).toString() : MUTE);
|
const VOLUME_OPTIONS = new Array(11).fill(null).map((_, i) => i ? (i * 10).toString() : MUTE);
|
||||||
@ -19,8 +18,7 @@ const AUTO_DISABLED = ["Auto", "Disabled"];
|
|||||||
*/
|
*/
|
||||||
export enum SettingType {
|
export enum SettingType {
|
||||||
GENERAL,
|
GENERAL,
|
||||||
DISPLAY,
|
ACCESSIBILITY
|
||||||
AUDIO
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Setting {
|
export interface Setting {
|
||||||
@ -38,36 +36,32 @@ export interface Setting {
|
|||||||
*/
|
*/
|
||||||
export const SettingKeys = {
|
export const SettingKeys = {
|
||||||
Game_Speed: "GAME_SPEED",
|
Game_Speed: "GAME_SPEED",
|
||||||
HP_Bar_Speed: "HP_BAR_SPEED",
|
|
||||||
EXP_Gains_Speed: "EXP_GAINS_SPEED",
|
|
||||||
EXP_Party_Display: "EXP_PARTY_DISPLAY",
|
|
||||||
Skip_Seen_Dialogues: "SKIP_SEEN_DIALOGUES",
|
|
||||||
Battle_Style: "BATTLE_STYLE",
|
|
||||||
Enable_Retries: "ENABLE_RETRIES",
|
|
||||||
Tutorials: "TUTORIALS",
|
|
||||||
Touch_Controls: "TOUCH_CONTROLS",
|
|
||||||
Vibration: "VIBRATION",
|
|
||||||
Language: "LANGUAGE",
|
|
||||||
UI_Theme: "UI_THEME",
|
|
||||||
Window_Type: "WINDOW_TYPE",
|
|
||||||
Money_Format: "MONEY_FORMAT",
|
|
||||||
Damage_Numbers: "DAMAGE_NUMBERS",
|
|
||||||
Move_Animations: "MOVE_ANIMATIONS",
|
|
||||||
Show_Stats_on_Level_Up: "SHOW_LEVEL_UP_STATS",
|
|
||||||
Candy_Upgrade_Notification: "CANDY_UPGRADE_NOTIFICATION",
|
|
||||||
Candy_Upgrade_Display: "CANDY_UPGRADE_DISPLAY",
|
|
||||||
Move_Info: "MOVE_INFO",
|
|
||||||
Show_Moveset_Flyout: "SHOW_MOVESET_FLYOUT",
|
|
||||||
Show_Arena_Flyout: "SHOW_ARENA_FLYOUT",
|
|
||||||
Show_Time_Of_Day_Widget: "SHOW_TIME_OF_DAY_WIDGET",
|
|
||||||
Time_Of_Day_Animation: "TIME_OF_DAY_ANIMATION",
|
|
||||||
Sprite_Set: "SPRITE_SET",
|
|
||||||
Fusion_Palette_Swaps: "FUSION_PALETTE_SWAPS",
|
|
||||||
Player_Gender: "PLAYER_GENDER",
|
|
||||||
Master_Volume: "MASTER_VOLUME",
|
Master_Volume: "MASTER_VOLUME",
|
||||||
BGM_Volume: "BGM_VOLUME",
|
BGM_Volume: "BGM_VOLUME",
|
||||||
SE_Volume: "SE_VOLUME",
|
SE_Volume: "SE_VOLUME",
|
||||||
Music_Preference: "MUSIC_PREFERENCE"
|
Language: "LANGUAGE",
|
||||||
|
Damage_Numbers: "DAMAGE_NUMBERS",
|
||||||
|
UI_Theme: "UI_THEME",
|
||||||
|
Window_Type: "WINDOW_TYPE",
|
||||||
|
Tutorials: "TUTORIALS",
|
||||||
|
Enable_Retries: "ENABLE_RETRIES",
|
||||||
|
Skip_Seen_Dialogues: "SKIP_SEEN_DIALOGUES",
|
||||||
|
Candy_Upgrade_Notification: "CANDY_UPGRADE_NOTIFICATION",
|
||||||
|
Candy_Upgrade_Display: "CANDY_UPGRADE_DISPLAY",
|
||||||
|
Money_Format: "MONEY_FORMAT",
|
||||||
|
Sprite_Set: "SPRITE_SET",
|
||||||
|
Music_Preference: "MUSIC_PREFERENCE",
|
||||||
|
Move_Animations: "MOVE_ANIMATIONS",
|
||||||
|
Show_Moveset_Flyout: "SHOW_MOVESET_FLYOUT",
|
||||||
|
Show_Arena_Flyout: "SHOW_ARENA_FLYOUT",
|
||||||
|
Show_Stats_on_Level_Up: "SHOW_LEVEL_UP_STATS",
|
||||||
|
EXP_Gains_Speed: "EXP_GAINS_SPEED",
|
||||||
|
EXP_Party_Display: "EXP_PARTY_DISPLAY",
|
||||||
|
HP_Bar_Speed: "HP_BAR_SPEED",
|
||||||
|
Fusion_Palette_Swaps: "FUSION_PALETTE_SWAPS",
|
||||||
|
Player_Gender: "PLAYER_GENDER",
|
||||||
|
Touch_Controls: "TOUCH_CONTROLS",
|
||||||
|
Vibration: "VIBRATION"
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -82,10 +76,141 @@ export const Setting: Array<Setting> = [
|
|||||||
type: SettingType.GENERAL
|
type: SettingType.GENERAL
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: SettingKeys.HP_Bar_Speed,
|
key: SettingKeys.Master_Volume,
|
||||||
label: "HP Bar Speed",
|
label: "Master Volume",
|
||||||
options: ["Normal", "Fast", "Faster", "Skip"],
|
options: VOLUME_OPTIONS,
|
||||||
|
default: 5,
|
||||||
|
type: SettingType.GENERAL
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: SettingKeys.BGM_Volume,
|
||||||
|
label: "BGM Volume",
|
||||||
|
options: VOLUME_OPTIONS,
|
||||||
|
default: 10,
|
||||||
|
type: SettingType.GENERAL
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: SettingKeys.SE_Volume,
|
||||||
|
label: "SE Volume",
|
||||||
|
options: VOLUME_OPTIONS,
|
||||||
|
default: 10,
|
||||||
|
type: SettingType.GENERAL
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: SettingKeys.Language,
|
||||||
|
label: "Language",
|
||||||
|
options: ["English", "Change"],
|
||||||
default: 0,
|
default: 0,
|
||||||
|
type: SettingType.GENERAL,
|
||||||
|
requireReload: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: SettingKeys.Damage_Numbers,
|
||||||
|
label: "Damage Numbers",
|
||||||
|
options: ["Off", "Simple", "Fancy"],
|
||||||
|
default: 0,
|
||||||
|
type: SettingType.GENERAL
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: SettingKeys.UI_Theme,
|
||||||
|
label: "UI Theme",
|
||||||
|
options: ["Default", "Legacy"],
|
||||||
|
default: 0,
|
||||||
|
type: SettingType.GENERAL,
|
||||||
|
requireReload: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: SettingKeys.Window_Type,
|
||||||
|
label: "Window Type",
|
||||||
|
options: new Array(5).fill(null).map((_, i) => (i + 1).toString()),
|
||||||
|
default: 0,
|
||||||
|
type: SettingType.GENERAL
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: SettingKeys.Tutorials,
|
||||||
|
label: "Tutorials",
|
||||||
|
options: OFF_ON,
|
||||||
|
default: 1,
|
||||||
|
type: SettingType.GENERAL
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: SettingKeys.Enable_Retries,
|
||||||
|
label: "Enable Retries",
|
||||||
|
options: OFF_ON,
|
||||||
|
default: 0,
|
||||||
|
type: SettingType.ACCESSIBILITY
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: SettingKeys.Skip_Seen_Dialogues,
|
||||||
|
label: "Skip Seen Dialogues",
|
||||||
|
options: OFF_ON,
|
||||||
|
default: 0,
|
||||||
|
type: SettingType.GENERAL
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: SettingKeys.Candy_Upgrade_Notification,
|
||||||
|
label: "Candy Upgrade Notification",
|
||||||
|
options: ["Off", "Passives Only", "On"],
|
||||||
|
default: 0,
|
||||||
|
type: SettingType.ACCESSIBILITY
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: SettingKeys.Candy_Upgrade_Display,
|
||||||
|
label: "Candy Upgrade Display",
|
||||||
|
options: ["Icon", "Animation"],
|
||||||
|
default: 0,
|
||||||
|
type: SettingType.ACCESSIBILITY,
|
||||||
|
requireReload: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: SettingKeys.Money_Format,
|
||||||
|
label: "Money Format",
|
||||||
|
options: ["Normal", "Abbreviated"],
|
||||||
|
default: 0,
|
||||||
|
type: SettingType.ACCESSIBILITY
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: SettingKeys.Sprite_Set,
|
||||||
|
label: "Sprite Set",
|
||||||
|
options: ["Consistent", "Mixed Animated"],
|
||||||
|
default: 0,
|
||||||
|
type: SettingType.GENERAL,
|
||||||
|
requireReload: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: SettingKeys.Music_Preference,
|
||||||
|
label: "Music Preference",
|
||||||
|
options: ["Consistent", "Mixed"],
|
||||||
|
default: 0,
|
||||||
|
type: SettingType.GENERAL,
|
||||||
|
requireReload: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: SettingKeys.Move_Animations,
|
||||||
|
label: "Move Animations",
|
||||||
|
options: OFF_ON,
|
||||||
|
default: 1,
|
||||||
|
type: SettingType.GENERAL
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: SettingKeys.Show_Moveset_Flyout,
|
||||||
|
label: "Show Moveset Flyout",
|
||||||
|
options: OFF_ON,
|
||||||
|
default: 1,
|
||||||
|
type: SettingType.ACCESSIBILITY
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: SettingKeys.Show_Arena_Flyout,
|
||||||
|
label: "Show Battle Effects Flyout",
|
||||||
|
options: OFF_ON,
|
||||||
|
default: 1,
|
||||||
|
type: SettingType.ACCESSIBILITY
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: SettingKeys.Show_Stats_on_Level_Up,
|
||||||
|
label: "Show Stats on Level Up",
|
||||||
|
options: OFF_ON,
|
||||||
|
default: 1,
|
||||||
type: SettingType.GENERAL
|
type: SettingType.GENERAL
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -103,33 +228,26 @@ export const Setting: Array<Setting> = [
|
|||||||
type: SettingType.GENERAL
|
type: SettingType.GENERAL
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: SettingKeys.Skip_Seen_Dialogues,
|
key: SettingKeys.HP_Bar_Speed,
|
||||||
label: "Skip Seen Dialogues",
|
label: "HP Bar Speed",
|
||||||
options: OFF_ON,
|
options: ["Normal", "Fast", "Faster", "Skip"],
|
||||||
default: 0,
|
default: 0,
|
||||||
type: SettingType.GENERAL
|
type: SettingType.GENERAL
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: SettingKeys.Battle_Style,
|
key: SettingKeys.Fusion_Palette_Swaps,
|
||||||
label: "Battle Style",
|
label: "Fusion Palette Swaps",
|
||||||
options: ["Switch", "Set"],
|
|
||||||
default: 0,
|
|
||||||
type: SettingType.GENERAL
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: SettingKeys.Enable_Retries,
|
|
||||||
label: "Enable Retries",
|
|
||||||
options: OFF_ON,
|
|
||||||
default: 0,
|
|
||||||
type: SettingType.GENERAL
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: SettingKeys.Tutorials,
|
|
||||||
label: "Tutorials",
|
|
||||||
options: OFF_ON,
|
options: OFF_ON,
|
||||||
default: 1,
|
default: 1,
|
||||||
type: SettingType.GENERAL
|
type: SettingType.GENERAL
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
key: SettingKeys.Player_Gender,
|
||||||
|
label: "Player Gender",
|
||||||
|
options: ["Boy", "Girl"],
|
||||||
|
default: 0,
|
||||||
|
type: SettingType.GENERAL
|
||||||
|
},
|
||||||
{
|
{
|
||||||
key: SettingKeys.Touch_Controls,
|
key: SettingKeys.Touch_Controls,
|
||||||
label: "Touch Controls",
|
label: "Touch Controls",
|
||||||
@ -143,159 +261,6 @@ export const Setting: Array<Setting> = [
|
|||||||
options: AUTO_DISABLED,
|
options: AUTO_DISABLED,
|
||||||
default: 0,
|
default: 0,
|
||||||
type: SettingType.GENERAL
|
type: SettingType.GENERAL
|
||||||
},
|
|
||||||
{
|
|
||||||
key: SettingKeys.Language,
|
|
||||||
label: "Language",
|
|
||||||
options: ["English", "Change"],
|
|
||||||
default: 0,
|
|
||||||
type: SettingType.DISPLAY,
|
|
||||||
requireReload: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: SettingKeys.UI_Theme,
|
|
||||||
label: "UI Theme",
|
|
||||||
options: ["Default", "Legacy"],
|
|
||||||
default: 0,
|
|
||||||
type: SettingType.DISPLAY,
|
|
||||||
requireReload: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: SettingKeys.Window_Type,
|
|
||||||
label: "Window Type",
|
|
||||||
options: new Array(5).fill(null).map((_, i) => (i + 1).toString()),
|
|
||||||
default: 0,
|
|
||||||
type: SettingType.DISPLAY
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: SettingKeys.Money_Format,
|
|
||||||
label: "Money Format",
|
|
||||||
options: ["Normal", "Abbreviated"],
|
|
||||||
default: 0,
|
|
||||||
type: SettingType.DISPLAY
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: SettingKeys.Damage_Numbers,
|
|
||||||
label: "Damage Numbers",
|
|
||||||
options: ["Off", "Simple", "Fancy"],
|
|
||||||
default: 0,
|
|
||||||
type: SettingType.DISPLAY
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: SettingKeys.Move_Animations,
|
|
||||||
label: "Move Animations",
|
|
||||||
options: OFF_ON,
|
|
||||||
default: 1,
|
|
||||||
type: SettingType.DISPLAY
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: SettingKeys.Show_Stats_on_Level_Up,
|
|
||||||
label: "Show Stats on Level Up",
|
|
||||||
options: OFF_ON,
|
|
||||||
default: 1,
|
|
||||||
type: SettingType.DISPLAY
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: SettingKeys.Candy_Upgrade_Notification,
|
|
||||||
label: "Candy Upgrade Notification",
|
|
||||||
options: ["Off", "Passives Only", "On"],
|
|
||||||
default: 0,
|
|
||||||
type: SettingType.DISPLAY
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: SettingKeys.Candy_Upgrade_Display,
|
|
||||||
label: "Candy Upgrade Display",
|
|
||||||
options: ["Icon", "Animation"],
|
|
||||||
default: 0,
|
|
||||||
type: SettingType.DISPLAY,
|
|
||||||
requireReload: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: SettingKeys.Move_Info,
|
|
||||||
label: "Move Info",
|
|
||||||
options: OFF_ON,
|
|
||||||
default: 1,
|
|
||||||
type: SettingType.DISPLAY
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: SettingKeys.Show_Moveset_Flyout,
|
|
||||||
label: "Show Moveset Flyout",
|
|
||||||
options: OFF_ON,
|
|
||||||
default: 1,
|
|
||||||
type: SettingType.DISPLAY
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: SettingKeys.Show_Arena_Flyout,
|
|
||||||
label: "Show Battle Effects Flyout",
|
|
||||||
options: OFF_ON,
|
|
||||||
default: 1,
|
|
||||||
type: SettingType.DISPLAY
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: SettingKeys.Show_Time_Of_Day_Widget,
|
|
||||||
label: "Show Time of Day Widget",
|
|
||||||
options: OFF_ON,
|
|
||||||
default: 1,
|
|
||||||
type: SettingType.DISPLAY,
|
|
||||||
requireReload: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: SettingKeys.Time_Of_Day_Animation,
|
|
||||||
label: "Time of Day Animation",
|
|
||||||
options: ["Bounce", "Back"],
|
|
||||||
default: 0,
|
|
||||||
type: SettingType.DISPLAY
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: SettingKeys.Sprite_Set,
|
|
||||||
label: "Sprite Set",
|
|
||||||
options: ["Consistent", "Mixed Animated"],
|
|
||||||
default: 0,
|
|
||||||
type: SettingType.DISPLAY,
|
|
||||||
requireReload: true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: SettingKeys.Fusion_Palette_Swaps,
|
|
||||||
label: "Fusion Palette Swaps",
|
|
||||||
options: OFF_ON,
|
|
||||||
default: 1,
|
|
||||||
type: SettingType.DISPLAY
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: SettingKeys.Player_Gender,
|
|
||||||
label: "Player Gender",
|
|
||||||
options: ["Boy", "Girl"],
|
|
||||||
default: 0,
|
|
||||||
type: SettingType.DISPLAY
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: SettingKeys.Master_Volume,
|
|
||||||
label: "Master Volume",
|
|
||||||
options: VOLUME_OPTIONS,
|
|
||||||
default: 5,
|
|
||||||
type: SettingType.AUDIO
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: SettingKeys.BGM_Volume,
|
|
||||||
label: "BGM Volume",
|
|
||||||
options: VOLUME_OPTIONS,
|
|
||||||
default: 10,
|
|
||||||
type: SettingType.AUDIO
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: SettingKeys.SE_Volume,
|
|
||||||
label: "SE Volume",
|
|
||||||
options: VOLUME_OPTIONS,
|
|
||||||
default: 10,
|
|
||||||
type: SettingType.AUDIO
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key: SettingKeys.Music_Preference,
|
|
||||||
label: "Music Preference",
|
|
||||||
options: ["Consistent", "Mixed"],
|
|
||||||
default: 0,
|
|
||||||
type: SettingType.AUDIO,
|
|
||||||
requireReload: true
|
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
@ -344,9 +309,6 @@ export function setSetting(scene: BattleScene, setting: string, value: integer):
|
|||||||
scene.seVolume = value ? parseInt(Setting[index].options[value]) * 0.01 : 0;
|
scene.seVolume = value ? parseInt(Setting[index].options[value]) * 0.01 : 0;
|
||||||
scene.updateSoundVolume();
|
scene.updateSoundVolume();
|
||||||
break;
|
break;
|
||||||
case SettingKeys.Music_Preference:
|
|
||||||
scene.musicPreference = value;
|
|
||||||
break;
|
|
||||||
case SettingKeys.Damage_Numbers:
|
case SettingKeys.Damage_Numbers:
|
||||||
scene.damageNumbersMode = value;
|
scene.damageNumbersMode = value;
|
||||||
break;
|
break;
|
||||||
@ -359,18 +321,12 @@ export function setSetting(scene: BattleScene, setting: string, value: integer):
|
|||||||
case SettingKeys.Tutorials:
|
case SettingKeys.Tutorials:
|
||||||
scene.enableTutorials = Setting[index].options[value] === "On";
|
scene.enableTutorials = Setting[index].options[value] === "On";
|
||||||
break;
|
break;
|
||||||
case SettingKeys.Move_Info:
|
|
||||||
scene.enableMoveInfo = Setting[index].options[value] === "On";
|
|
||||||
break;
|
|
||||||
case SettingKeys.Enable_Retries:
|
case SettingKeys.Enable_Retries:
|
||||||
scene.enableRetries = Setting[index].options[value] === "On";
|
scene.enableRetries = Setting[index].options[value] === "On";
|
||||||
break;
|
break;
|
||||||
case SettingKeys.Skip_Seen_Dialogues:
|
case SettingKeys.Skip_Seen_Dialogues:
|
||||||
scene.skipSeenDialogues = Setting[index].options[value] === "On";
|
scene.skipSeenDialogues = Setting[index].options[value] === "On";
|
||||||
break;
|
break;
|
||||||
case SettingKeys.Battle_Style:
|
|
||||||
scene.battleStyle = value;
|
|
||||||
break;
|
|
||||||
case SettingKeys.Candy_Upgrade_Notification:
|
case SettingKeys.Candy_Upgrade_Notification:
|
||||||
if (scene.candyUpgradeNotification === value) {
|
if (scene.candyUpgradeNotification === value) {
|
||||||
break;
|
break;
|
||||||
@ -398,6 +354,9 @@ export function setSetting(scene: BattleScene, setting: string, value: integer):
|
|||||||
scene.initExpSprites();
|
scene.initExpSprites();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case SettingKeys.Music_Preference:
|
||||||
|
scene.musicPreference = value;
|
||||||
|
break;
|
||||||
case SettingKeys.Move_Animations:
|
case SettingKeys.Move_Animations:
|
||||||
scene.moveAnimations = Setting[index].options[value] === "On";
|
scene.moveAnimations = Setting[index].options[value] === "On";
|
||||||
break;
|
break;
|
||||||
@ -407,12 +366,6 @@ export function setSetting(scene: BattleScene, setting: string, value: integer):
|
|||||||
case SettingKeys.Show_Arena_Flyout:
|
case SettingKeys.Show_Arena_Flyout:
|
||||||
scene.showArenaFlyout = Setting[index].options[value] === "On";
|
scene.showArenaFlyout = Setting[index].options[value] === "On";
|
||||||
break;
|
break;
|
||||||
case SettingKeys.Show_Time_Of_Day_Widget:
|
|
||||||
scene.showTimeOfDayWidget = Setting[index].options[value] === "On";
|
|
||||||
break;
|
|
||||||
case SettingKeys.Time_Of_Day_Animation:
|
|
||||||
scene.timeOfDayAnimation = Setting[index].options[value] === "Bounce" ? EaseType.BOUNCE : EaseType.BACK;
|
|
||||||
break;
|
|
||||||
case SettingKeys.Show_Stats_on_Level_Up:
|
case SettingKeys.Show_Stats_on_Level_Up:
|
||||||
scene.showLevelUpStats = Setting[index].options[value] === "On";
|
scene.showLevelUpStats = Setting[index].options[value] === "On";
|
||||||
break;
|
break;
|
||||||
|
@ -9,8 +9,7 @@ import {Button} from "./enums/buttons";
|
|||||||
import SettingsGamepadUiHandler from "./ui/settings/settings-gamepad-ui-handler";
|
import SettingsGamepadUiHandler from "./ui/settings/settings-gamepad-ui-handler";
|
||||||
import SettingsKeyboardUiHandler from "#app/ui/settings/settings-keyboard-ui-handler";
|
import SettingsKeyboardUiHandler from "#app/ui/settings/settings-keyboard-ui-handler";
|
||||||
import BattleScene from "./battle-scene";
|
import BattleScene from "./battle-scene";
|
||||||
import SettingsDisplayUiHandler from "./ui/settings/settings-display-ui-handler";
|
import SettingsAccessibilityUiHandler from "./ui/settings/settings-accessiblity-ui-handler";
|
||||||
import SettingsAudioUiHandler from "./ui/settings/settings-audio-ui-handler";
|
|
||||||
|
|
||||||
type ActionKeys = Record<Button, () => void>;
|
type ActionKeys = Record<Button, () => void>;
|
||||||
|
|
||||||
@ -115,11 +114,6 @@ export class UiInputs {
|
|||||||
}
|
}
|
||||||
|
|
||||||
buttonStats(pressed: boolean = true): void {
|
buttonStats(pressed: boolean = true): void {
|
||||||
// allow access to Button.STATS as a toggle for other elements
|
|
||||||
for (const t of this.scene.getInfoToggles(true)) {
|
|
||||||
t.toggleInfo(pressed);
|
|
||||||
}
|
|
||||||
// handle normal pokemon battle ui
|
|
||||||
for (const p of this.scene.getField().filter(p => p?.isActive(true))) {
|
for (const p of this.scene.getField().filter(p => p?.isActive(true))) {
|
||||||
p.toggleStats(pressed);
|
p.toggleStats(pressed);
|
||||||
}
|
}
|
||||||
@ -170,7 +164,7 @@ export class UiInputs {
|
|||||||
}
|
}
|
||||||
|
|
||||||
buttonCycleOption(button: Button): void {
|
buttonCycleOption(button: Button): void {
|
||||||
const whitelist = [StarterSelectUiHandler, SettingsUiHandler, SettingsDisplayUiHandler, SettingsAudioUiHandler, SettingsGamepadUiHandler, SettingsKeyboardUiHandler];
|
const whitelist = [StarterSelectUiHandler, SettingsUiHandler, SettingsAccessibilityUiHandler, SettingsGamepadUiHandler, SettingsKeyboardUiHandler];
|
||||||
const uiHandler = this.scene.ui?.getHandler();
|
const uiHandler = this.scene.ui?.getHandler();
|
||||||
if (whitelist.some(handler => uiHandler instanceof handler)) {
|
if (whitelist.some(handler => uiHandler instanceof handler)) {
|
||||||
this.scene.ui.processInput(button);
|
this.scene.ui.processInput(button);
|
||||||
|
@ -14,17 +14,15 @@ export interface OptionSelectConfig {
|
|||||||
maxOptions?: integer;
|
maxOptions?: integer;
|
||||||
delay?: integer;
|
delay?: integer;
|
||||||
noCancel?: boolean;
|
noCancel?: boolean;
|
||||||
supportHover?: boolean;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface OptionSelectItem {
|
export interface OptionSelectItem {
|
||||||
label: string;
|
label: string;
|
||||||
handler: () => boolean;
|
handler: () => boolean;
|
||||||
onHover?: () => void;
|
|
||||||
keepOpen?: boolean;
|
keepOpen?: boolean;
|
||||||
overrideSound?: boolean;
|
overrideSound?: boolean;
|
||||||
item?: string;
|
item?: string;
|
||||||
itemArgs?: any[];
|
itemArgs?: any[]
|
||||||
}
|
}
|
||||||
|
|
||||||
const scrollUpLabel = "↑";
|
const scrollUpLabel = "↑";
|
||||||
@ -195,10 +193,6 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (this.config?.supportHover) {
|
|
||||||
// handle hover code if the element supports hover-handlers and the option has the optional hover-handler set.
|
|
||||||
this.config?.options[this.cursor + (this.scrollCursor - (this.scrollCursor ? 1 : 0))]?.onHover?.();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (success && playSound) {
|
if (success && playSound) {
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import * as Utils from "../utils";
|
||||||
import { addTextObject, TextStyle } from "./text";
|
import { addTextObject, TextStyle } from "./text";
|
||||||
import BattleScene from "#app/battle-scene.js";
|
import BattleScene from "#app/battle-scene.js";
|
||||||
import { ArenaTagSide } from "#app/data/arena-tag.js";
|
import { ArenaTagSide } from "#app/data/arena-tag.js";
|
||||||
@ -7,8 +8,7 @@ import { addWindow, WindowVariant } from "./ui-theme";
|
|||||||
import { ArenaEvent, ArenaEventType, TagAddedEvent, TagRemovedEvent, TerrainChangedEvent, WeatherChangedEvent } from "#app/field/arena-events.js";
|
import { ArenaEvent, ArenaEventType, TagAddedEvent, TagRemovedEvent, TerrainChangedEvent, WeatherChangedEvent } from "#app/field/arena-events.js";
|
||||||
import { BattleSceneEventType, TurnEndEvent } from "#app/battle-scene-events.js";
|
import { BattleSceneEventType, TurnEndEvent } from "#app/battle-scene-events.js";
|
||||||
import { ArenaTagType } from "#app/data/enums/arena-tag-type.js";
|
import { ArenaTagType } from "#app/data/enums/arena-tag-type.js";
|
||||||
import TimeOfDayWidget from "./time-of-day-widget";
|
import { TimeOfDay } from "#app/data/enums/time-of-day.js";
|
||||||
import * as Utils from "../utils";
|
|
||||||
|
|
||||||
/** Enum used to differentiate {@linkcode Arena} effects */
|
/** Enum used to differentiate {@linkcode Arena} effects */
|
||||||
enum ArenaEffectType {
|
enum ArenaEffectType {
|
||||||
@ -60,7 +60,8 @@ export default class ArenaFlyout extends Phaser.GameObjects.Container {
|
|||||||
/** The {@linkcode Phaser.GameObjects.Text} that goes inside of the header */
|
/** The {@linkcode Phaser.GameObjects.Text} that goes inside of the header */
|
||||||
private flyoutTextHeader: Phaser.GameObjects.Text;
|
private flyoutTextHeader: Phaser.GameObjects.Text;
|
||||||
|
|
||||||
private timeOfDayWidget: TimeOfDayWidget;
|
/** The {@linkcode Phaser.GameObjects.Sprite} that represents the current time of day */
|
||||||
|
private timeOfDayIcon: Phaser.GameObjects.Sprite;
|
||||||
|
|
||||||
/** The {@linkcode Phaser.GameObjects.Text} header used to indicate the player's effects */
|
/** The {@linkcode Phaser.GameObjects.Text} header used to indicate the player's effects */
|
||||||
private flyoutTextHeaderPlayer: Phaser.GameObjects.Text;
|
private flyoutTextHeaderPlayer: Phaser.GameObjects.Text;
|
||||||
@ -81,6 +82,7 @@ export default class ArenaFlyout extends Phaser.GameObjects.Container {
|
|||||||
|
|
||||||
// Stores callbacks in a variable so they can be unsubscribed from when destroyed
|
// Stores callbacks in a variable so they can be unsubscribed from when destroyed
|
||||||
private readonly onNewArenaEvent = (event: Event) => this.onNewArena(event);
|
private readonly onNewArenaEvent = (event: Event) => this.onNewArena(event);
|
||||||
|
private readonly onTurnInitEvent = (event: Event) => this.onTurnInit(event);
|
||||||
private readonly onTurnEndEvent = (event: Event) => this.onTurnEnd(event);
|
private readonly onTurnEndEvent = (event: Event) => this.onTurnEnd(event);
|
||||||
|
|
||||||
private readonly onFieldEffectChangedEvent = (event: Event) => this.onFieldEffectChanged(event);
|
private readonly onFieldEffectChangedEvent = (event: Event) => this.onFieldEffectChanged(event);
|
||||||
@ -115,8 +117,10 @@ export default class ArenaFlyout extends Phaser.GameObjects.Container {
|
|||||||
|
|
||||||
this.flyoutContainer.add(this.flyoutTextHeader);
|
this.flyoutContainer.add(this.flyoutTextHeader);
|
||||||
|
|
||||||
this.timeOfDayWidget = new TimeOfDayWidget(this.scene, (this.flyoutWidth / 2) + (this.flyoutWindowHeader.displayWidth / 2));
|
this.timeOfDayIcon = this.scene.add.sprite((this.flyoutWidth / 2) + (this.flyoutWindowHeader.displayWidth / 2), 0, "dawn_icon").setOrigin();
|
||||||
this.flyoutContainer.add(this.timeOfDayWidget);
|
this.timeOfDayIcon.setVisible(false);
|
||||||
|
|
||||||
|
this.flyoutContainer.add(this.timeOfDayIcon);
|
||||||
|
|
||||||
this.flyoutTextHeaderPlayer = addTextObject(this.scene, 6, 5, "Player", TextStyle.SUMMARY_BLUE);
|
this.flyoutTextHeaderPlayer = addTextObject(this.scene, 6, 5, "Player", TextStyle.SUMMARY_BLUE);
|
||||||
this.flyoutTextHeaderPlayer.setFontSize(54);
|
this.flyoutTextHeaderPlayer.setFontSize(54);
|
||||||
@ -168,9 +172,18 @@ export default class ArenaFlyout extends Phaser.GameObjects.Container {
|
|||||||
|
|
||||||
// Subscribes to required events available on game start
|
// Subscribes to required events available on game start
|
||||||
this.battleScene.eventTarget.addEventListener(BattleSceneEventType.NEW_ARENA, this.onNewArenaEvent);
|
this.battleScene.eventTarget.addEventListener(BattleSceneEventType.NEW_ARENA, this.onNewArenaEvent);
|
||||||
|
this.battleScene.eventTarget.addEventListener(BattleSceneEventType.TURN_INIT, this.onTurnInitEvent);
|
||||||
this.battleScene.eventTarget.addEventListener(BattleSceneEventType.TURN_END, this.onTurnEndEvent);
|
this.battleScene.eventTarget.addEventListener(BattleSceneEventType.TURN_END, this.onTurnEndEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private setTimeOfDayIcon() {
|
||||||
|
this.timeOfDayIcon.setTexture(TimeOfDay[this.battleScene.arena.getTimeOfDay()].toLowerCase() + "_icon");
|
||||||
|
}
|
||||||
|
|
||||||
|
private onTurnInit(event: Event) {
|
||||||
|
this.setTimeOfDayIcon();
|
||||||
|
}
|
||||||
|
|
||||||
private onNewArena(event: Event) {
|
private onNewArena(event: Event) {
|
||||||
this.fieldEffectInfo.length = 0;
|
this.fieldEffectInfo.length = 0;
|
||||||
|
|
||||||
@ -179,6 +192,8 @@ export default class ArenaFlyout extends Phaser.GameObjects.Container {
|
|||||||
this.battleScene.arena.eventTarget.addEventListener(ArenaEventType.TERRAIN_CHANGED, this.onFieldEffectChangedEvent);
|
this.battleScene.arena.eventTarget.addEventListener(ArenaEventType.TERRAIN_CHANGED, this.onFieldEffectChangedEvent);
|
||||||
this.battleScene.arena.eventTarget.addEventListener(ArenaEventType.TAG_ADDED, this.onFieldEffectChangedEvent);
|
this.battleScene.arena.eventTarget.addEventListener(ArenaEventType.TAG_ADDED, this.onFieldEffectChangedEvent);
|
||||||
this.battleScene.arena.eventTarget.addEventListener(ArenaEventType.TAG_REMOVED, this.onFieldEffectChangedEvent);
|
this.battleScene.arena.eventTarget.addEventListener(ArenaEventType.TAG_REMOVED, this.onFieldEffectChangedEvent);
|
||||||
|
|
||||||
|
this.setTimeOfDayIcon();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -345,18 +360,17 @@ export default class ArenaFlyout extends Phaser.GameObjects.Container {
|
|||||||
* Animates the flyout to either show or hide it by applying a fade and translation
|
* Animates the flyout to either show or hide it by applying a fade and translation
|
||||||
* @param visible Should the flyout be shown?
|
* @param visible Should the flyout be shown?
|
||||||
*/
|
*/
|
||||||
public toggleFlyout(visible: boolean): void {
|
toggleFlyout(visible: boolean): void {
|
||||||
this.scene.tweens.add({
|
this.scene.tweens.add({
|
||||||
targets: this.flyoutParent,
|
targets: this.flyoutParent,
|
||||||
x: visible ? this.anchorX : this.anchorX - this.translationX,
|
x: visible ? this.anchorX : this.anchorX - this.translationX,
|
||||||
duration: Utils.fixedInt(125),
|
duration: Utils.fixedInt(125),
|
||||||
ease: "Sine.easeInOut",
|
ease: "Sine.easeInOut",
|
||||||
alpha: visible ? 1 : 0,
|
alpha: visible ? 1 : 0,
|
||||||
onComplete: () => this.timeOfDayWidget.parentVisible = visible,
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public destroy(fromScene?: boolean): void {
|
destroy(fromScene?: boolean): void {
|
||||||
this.battleScene.eventTarget.removeEventListener(BattleSceneEventType.NEW_ARENA, this.onNewArenaEvent);
|
this.battleScene.eventTarget.removeEventListener(BattleSceneEventType.NEW_ARENA, this.onNewArenaEvent);
|
||||||
this.battleScene.eventTarget.removeEventListener(BattleSceneEventType.TURN_END, this.onTurnEndEvent);
|
this.battleScene.eventTarget.removeEventListener(BattleSceneEventType.TURN_END, this.onTurnEndEvent);
|
||||||
|
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
export enum EaseType {
|
|
||||||
NONE,
|
|
||||||
LINEAR = "Linear",
|
|
||||||
QUADRATIC = "Quad",
|
|
||||||
CUBIC = "Cubic",
|
|
||||||
QUARTIC = "Quart",
|
|
||||||
QUINTIC = "Quint",
|
|
||||||
SINUSOIDAL = "Sine",
|
|
||||||
EXPONENTIAL = "Expo",
|
|
||||||
CIRCULAR = "Circ",
|
|
||||||
ELASTIC = "Elastic",
|
|
||||||
BACK = "Back",
|
|
||||||
BOUNCE = "Bounce",
|
|
||||||
STEPPED = "Stepped",
|
|
||||||
}
|
|