mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-08-19 22:09:27 +02:00
Merge branch 'beta' into egg-move-scripts
This commit is contained in:
commit
b55c2433bd
61
.devcontainer/devcontainer.json
Normal file
61
.devcontainer/devcontainer.json
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
|
||||||
|
// README at: https://github.com/devcontainers/templates/tree/main/src/typescript-node
|
||||||
|
{
|
||||||
|
"name": "Node.js & TypeScript",
|
||||||
|
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
|
||||||
|
"image": "mcr.microsoft.com/devcontainers/typescript-node:1-22-bookworm",
|
||||||
|
"features": {
|
||||||
|
"ghcr.io/devcontainers/features/github-cli:1": {
|
||||||
|
"installDirectlyFromGitHubRelease": true,
|
||||||
|
"version": "latest"
|
||||||
|
},
|
||||||
|
"ghcr.io/devcontainers-extra/features/pnpm:2": {
|
||||||
|
"version": "latest"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"customizations": {
|
||||||
|
"vscode": {
|
||||||
|
"settings": {
|
||||||
|
// # Formatter configs
|
||||||
|
"editor.defaultFormatter": "biomejs.biome",
|
||||||
|
"editor.tabSize": 2,
|
||||||
|
"editor.insertSpaces": true,
|
||||||
|
"editor.codeActionsOnSave": {
|
||||||
|
"source.addMissingImports.ts": "always",
|
||||||
|
"source.removeUnusedImports": "always",
|
||||||
|
"source.fixAll.biome": "always",
|
||||||
|
"source.organizeImports.biome": "always"
|
||||||
|
},
|
||||||
|
"biome.suggestInstallingGlobally": false,
|
||||||
|
|
||||||
|
// # JS/TS setting overrides
|
||||||
|
"javascript.preferences.importModuleSpecifier": "non-relative",
|
||||||
|
"javascript.preferences.importModuleSpecifierEnding": "index",
|
||||||
|
"javascript.preferGoToSourceDefinition": true,
|
||||||
|
"javascript.updateImportsOnFileMove.enabled": "always",
|
||||||
|
|
||||||
|
"typescript.preferences.importModuleSpecifier": "non-relative",
|
||||||
|
"typescript.preferences.importModuleSpecifierEnding": "index",
|
||||||
|
"typescript.preferGoToSourceDefinition": true,
|
||||||
|
"typescript.updateImportsOnFileMove.enabled": "always",
|
||||||
|
|
||||||
|
"typescript.tsserver.experimental.enableProjectDiagnostics": true,
|
||||||
|
|
||||||
|
// # Miscellaneous
|
||||||
|
"npm.packageManager": "pnpm",
|
||||||
|
"npm.scriptRunner": "pnpm",
|
||||||
|
"vitest.cliArguments": "--no-isolate"
|
||||||
|
},
|
||||||
|
"extensions": [
|
||||||
|
"biomejs.biome",
|
||||||
|
"YoavBls.pretty-ts-errors",
|
||||||
|
"vitest.explorer",
|
||||||
|
"adpyke.codesnap", // Bind to a hotkey (ctrl+\, etc) for best results
|
||||||
|
"aaron-bond.better-comments",
|
||||||
|
"MuTsunTsai.jsdoc-link"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"postCreateCommand": "pnpm install",
|
||||||
|
"forwardPorts": [8000]
|
||||||
|
}
|
5
.gitignore
vendored
5
.gitignore
vendored
@ -12,9 +12,10 @@ dist
|
|||||||
dist-ssr
|
dist-ssr
|
||||||
*.local
|
*.local
|
||||||
|
|
||||||
# Editor directories and files
|
# Editor directories and files (excluding `extensions.json` for devcontainer)
|
||||||
.vscode
|
|
||||||
*.code-workspace
|
*.code-workspace
|
||||||
|
.vscode/*
|
||||||
|
!.vscode/extensions.json
|
||||||
.idea
|
.idea
|
||||||
.DS_Store
|
.DS_Store
|
||||||
*.suo
|
*.suo
|
||||||
|
@ -26,3 +26,4 @@ ignore:
|
|||||||
- .git
|
- .git
|
||||||
- public
|
- public
|
||||||
- dist
|
- dist
|
||||||
|
- .devcontainer
|
||||||
|
13
.vscode/extensions.json
vendored
Normal file
13
.vscode/extensions.json
vendored
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"recommendations": [
|
||||||
|
"biomejs.biome",
|
||||||
|
"YoavBls.pretty-ts-errors",
|
||||||
|
"vitest.explorer",
|
||||||
|
|
||||||
|
// This stuff isn't mandatory - it's just nice to have :)
|
||||||
|
|
||||||
|
"adpyke.codesnap", // Bind to a hotkey (ctrl+\, etc) for best results
|
||||||
|
"aaron-bond.better-comments",
|
||||||
|
"MuTsunTsai.jsdoc-link"
|
||||||
|
]
|
||||||
|
}
|
@ -18,17 +18,34 @@ We are here to help and the better you understand what you're working on, the ea
|
|||||||
|
|
||||||
PokéRogue is built with [Typescript](https://www.typescriptlang.org/docs/handbook/intro.html), using the [Phaser](https://github.com/phaserjs/phaser) game framework.
|
PokéRogue is built with [Typescript](https://www.typescriptlang.org/docs/handbook/intro.html), using the [Phaser](https://github.com/phaserjs/phaser) game framework.
|
||||||
|
|
||||||
If you have the motivation and experience with Typescript/Javascript (or are willing to learn) you can contribute by forking the repository and making pull requests with contributions.
|
If you have the motivation and experience with Typescript/Javascript (or are willing to learn), you can contribute by forking the repository and making pull requests with contributions.
|
||||||
|
|
||||||
## 💻 Environment Setup
|
## 💻 Environment Setup
|
||||||
|
|
||||||
### Prerequisites
|
### Codespaces/Devcontainer Environment
|
||||||
|
|
||||||
- node: >=22.14.0 - [manage with pnpm](https://pnpm.io/cli/env) | [manage with fnm](https://github.com/Schniz/fnm) | [manage with nvm](https://github.com/nvm-sh/nvm)
|
Arguably the easiest way to get started is by using the prepared development environment.
|
||||||
|
|
||||||
|
We have a `.devcontainer/devcontainer.json` file, meaning we are compatible with:
|
||||||
|
|
||||||
|
- [![Open in GitHub Codespaces][codespaces-badge]][codespaces-link], or
|
||||||
|
- the [Visual Studio Code Remote - Containers][devcontainer-ext] extension.
|
||||||
|
|
||||||
|
This Linux environment comes with all required dependencies needed to start working on the project.
|
||||||
|
|
||||||
|
[codespaces-badge]: <https://github.com/codespaces/badge.svg>
|
||||||
|
[codespaces-link]: <https://github.com/codespaces/new?hide_repo_select=true&repo=620476224&ref=beta>
|
||||||
|
[devcontainer-ext]: <https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers>
|
||||||
|
|
||||||
|
### Local Development
|
||||||
|
|
||||||
|
#### Prerequisites
|
||||||
|
|
||||||
|
- node: >=22.14.0 - [manage with pnpm](https://pnpm.io/cli/env) | [manage with fnm](https://github.com/Schniz/fnm) | [manage with nvm](https://github.com/nvm-sh/nvm) | [manage with volta.sh](https://volta.sh/)
|
||||||
- pnpm: 10.x - [how to install](https://pnpm.io/installation) (not recommended to install via `npm` on Windows native) | [alternate method - volta.sh](https://volta.sh/)
|
- pnpm: 10.x - [how to install](https://pnpm.io/installation) (not recommended to install via `npm` on Windows native) | [alternate method - volta.sh](https://volta.sh/)
|
||||||
- The repository [forked](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo) and [cloned](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) locally on your device
|
- The repository [forked](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo) and [cloned](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) locally on your device
|
||||||
|
|
||||||
### Running Locally
|
#### Running Locally
|
||||||
|
|
||||||
1. Run `pnpm install` from the repository root
|
1. Run `pnpm install` from the repository root
|
||||||
- *if you run into any errors, reach out in the **#dev-corner** channel on Discord*
|
- *if you run into any errors, reach out in the **#dev-corner** channel on Discord*
|
||||||
@ -50,7 +67,7 @@ Most issues are bugs and are labeled with their area, such as `Move`, `Ability`,
|
|||||||
- `P2`: Minor - Incorrect (but non-crashing) move/ability/interaction
|
- `P2`: Minor - Incorrect (but non-crashing) move/ability/interaction
|
||||||
- `P3`: No gameplay impact - typo, minor graphical error, etc.
|
- `P3`: No gameplay impact - typo, minor graphical error, etc.
|
||||||
|
|
||||||
Also under issues, you can take a look at the [List of Partial / Unimplemented Moves and Abilities](https://github.com/pagefaultgames/pokerogue/issues/3503) and the [Bug Board](https://github.com/orgs/pagefaultgames/projects/3) (the latter is essentially the same as the issues page but easier to work with).
|
Also under issues, you can take a look at the [List of Partial / Unimplemented Moves and Abilities](https://github.com/pagefaultgames/pokerogue/issues/3503) and the [Bug Board](https://github.com/orgs/pagefaultgames/projects/3). The latter is essentially the same as the issues page, so take your pick.
|
||||||
|
|
||||||
You are free to comment on any issue so that you may be assigned to it and we can avoid multiple people working on the same thing.
|
You are free to comment on any issue so that you may be assigned to it and we can avoid multiple people working on the same thing.
|
||||||
|
|
||||||
@ -58,7 +75,7 @@ You are free to comment on any issue so that you may be assigned to it and we ca
|
|||||||
|
|
||||||
You can find the auto-generated documentation [here](https://pagefaultgames.github.io/pokerogue/main/index.html).
|
You can find the auto-generated documentation [here](https://pagefaultgames.github.io/pokerogue/main/index.html).
|
||||||
|
|
||||||
Additionally, the [docs folder](./docs) contains a variety of in-depth documents and guides useful for aspiring contributors.
|
Additionally, the [docs folder](./docs) contains a variety of in-depth documents and guides useful for aspiring contributors. \
|
||||||
Notable topics include:
|
Notable topics include:
|
||||||
- [Commenting your code](./docs/comments.md)
|
- [Commenting your code](./docs/comments.md)
|
||||||
- [Linting & Formatting](./docs/linting.md)
|
- [Linting & Formatting](./docs/linting.md)
|
||||||
|
@ -37,7 +37,6 @@
|
|||||||
"!**/src/data/balance/tms.ts"
|
"!**/src/data/balance/tms.ts"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
"assist": {
|
"assist": {
|
||||||
"actions": {
|
"actions": {
|
||||||
"source": {
|
"source": {
|
||||||
|
@ -17,8 +17,6 @@
|
|||||||
"eggMoves:parse": "node scripts/parse-egg-moves/main.js",
|
"eggMoves:parse": "node scripts/parse-egg-moves/main.js",
|
||||||
"typecheck": "tsc --noEmit",
|
"typecheck": "tsc --noEmit",
|
||||||
"typecheck:scripts": "tsc -p scripts/jsconfig.json",
|
"typecheck:scripts": "tsc -p scripts/jsconfig.json",
|
||||||
"eslint": "eslint --fix .",
|
|
||||||
"eslint-ci": "eslint .",
|
|
||||||
"biome": "biome check --write --changed --no-errors-on-unmatched --diagnostic-level=error",
|
"biome": "biome check --write --changed --no-errors-on-unmatched --diagnostic-level=error",
|
||||||
"biome-ci": "biome ci --diagnostic-level=error --reporter=github --no-errors-on-unmatched",
|
"biome-ci": "biome ci --diagnostic-level=error --reporter=github --no-errors-on-unmatched",
|
||||||
"docs": "typedoc",
|
"docs": "typedoc",
|
||||||
|
146
public/images/ui/legacy/party_slot_main_short.json
Normal file
146
public/images/ui/legacy/party_slot_main_short.json
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "party_slot_main_short.png",
|
||||||
|
"format": "RGBA8888",
|
||||||
|
"size": {
|
||||||
|
"w": 110,
|
||||||
|
"h": 294
|
||||||
|
},
|
||||||
|
"scale": 1,
|
||||||
|
"frames": [
|
||||||
|
{
|
||||||
|
"filename": "party_slot_main_short",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 110,
|
||||||
|
"h": 41
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 110,
|
||||||
|
"h": 41
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 110,
|
||||||
|
"h": 41
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "party_slot_main_short_sel",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 110,
|
||||||
|
"h": 41
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 110,
|
||||||
|
"h": 41
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 41,
|
||||||
|
"w": 110,
|
||||||
|
"h": 41
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "party_slot_main_short_fnt",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 110,
|
||||||
|
"h": 41
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 110,
|
||||||
|
"h": 41
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 82,
|
||||||
|
"w": 110,
|
||||||
|
"h": 41
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "party_slot_main_short_fnt_sel",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 110,
|
||||||
|
"h": 41
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 110,
|
||||||
|
"h": 41
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 123,
|
||||||
|
"w": 110,
|
||||||
|
"h": 41
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "party_slot_main_short_swap",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 110,
|
||||||
|
"h": 41
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 110,
|
||||||
|
"h": 41
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 164,
|
||||||
|
"w": 110,
|
||||||
|
"h": 41
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "party_slot_main_short_swap_sel",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": false,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 110,
|
||||||
|
"h": 41
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 110,
|
||||||
|
"h": 41
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 205,
|
||||||
|
"w": 110,
|
||||||
|
"h": 41
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:29685f2f538901cf5bf7f0ed2ea867c3:a080ea6c8cccd1e03244214053e79796:565f7afc5ca419b6ba8dbce51ea30818$"
|
||||||
|
}
|
||||||
|
}
|
BIN
public/images/ui/legacy/party_slot_main_short.png
Normal file
BIN
public/images/ui/legacy/party_slot_main_short.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 753 B |
@ -1 +1 @@
|
|||||||
Subproject commit 1ea8f865e30d1940caa0fceeabf37ae2e4689471
|
Subproject commit 17b353bd5752b7ce5c9e7051a17ec310e0b99c1e
|
@ -1184,7 +1184,7 @@ export class PostDefendTypeChangeAbAttr extends PostDefendAbAttr {
|
|||||||
return i18next.t("abilityTriggers:postDefendTypeChange", {
|
return i18next.t("abilityTriggers:postDefendTypeChange", {
|
||||||
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon),
|
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon),
|
||||||
abilityName,
|
abilityName,
|
||||||
typeName: i18next.t(`pokemonInfo:Type.${PokemonType[this.type]}`),
|
typeName: i18next.t(`pokemonInfo:type.${toCamelCase(PokemonType[this.type])}`),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1749,7 +1749,7 @@ export class PokemonTypeChangeAbAttr extends PreAttackAbAttr {
|
|||||||
getTriggerMessage({ pokemon }: AugmentMoveInteractionAbAttrParams, _abilityName: string): string {
|
getTriggerMessage({ pokemon }: AugmentMoveInteractionAbAttrParams, _abilityName: string): string {
|
||||||
return i18next.t("abilityTriggers:pokemonTypeChange", {
|
return i18next.t("abilityTriggers:pokemonTypeChange", {
|
||||||
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon),
|
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon),
|
||||||
moveType: i18next.t(`pokemonInfo:Type.${PokemonType[this.moveType]}`),
|
moveType: i18next.t(`pokemonInfo:type.${toCamelCase(PokemonType[this.moveType])}`),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -6222,7 +6222,9 @@ export class TerrainEventTypeChangeAbAttr extends PostSummonAbAttr {
|
|||||||
if (currentTerrain === TerrainType.NONE) {
|
if (currentTerrain === TerrainType.NONE) {
|
||||||
return i18next.t("abilityTriggers:pokemonTypeChangeRevert", { pokemonNameWithAffix });
|
return i18next.t("abilityTriggers:pokemonTypeChangeRevert", { pokemonNameWithAffix });
|
||||||
}
|
}
|
||||||
const moveType = i18next.t(`pokemonInfo:Type.${PokemonType[this.determineTypeChange(pokemon, currentTerrain)[0]]}`);
|
const moveType = i18next.t(
|
||||||
|
`pokemonInfo:type.${toCamelCase(PokemonType[this.determineTypeChange(pokemon, currentTerrain)[0]])}`,
|
||||||
|
);
|
||||||
return i18next.t("abilityTriggers:pokemonTypeChange", { pokemonNameWithAffix, moveType });
|
return i18next.t("abilityTriggers:pokemonTypeChange", { pokemonNameWithAffix, moveType });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ import { TimeOfDay } from "#enums/time-of-day";
|
|||||||
import { TrainerType } from "#enums/trainer-type";
|
import { TrainerType } from "#enums/trainer-type";
|
||||||
import { randSeedInt } from "#utils/common";
|
import { randSeedInt } from "#utils/common";
|
||||||
import { getEnumValues } from "#utils/enums";
|
import { getEnumValues } from "#utils/enums";
|
||||||
|
import { toCamelCase } from "#utils/strings";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
|
|
||||||
export function getBiomeName(biome: BiomeId | -1) {
|
export function getBiomeName(biome: BiomeId | -1) {
|
||||||
@ -15,13 +16,13 @@ export function getBiomeName(biome: BiomeId | -1) {
|
|||||||
}
|
}
|
||||||
switch (biome) {
|
switch (biome) {
|
||||||
case BiomeId.GRASS:
|
case BiomeId.GRASS:
|
||||||
return i18next.t("biome:GRASS");
|
return i18next.t("biome:grass");
|
||||||
case BiomeId.RUINS:
|
case BiomeId.RUINS:
|
||||||
return i18next.t("biome:RUINS");
|
return i18next.t("biome:ruins");
|
||||||
case BiomeId.END:
|
case BiomeId.END:
|
||||||
return i18next.t("biome:END");
|
return i18next.t("biome:end");
|
||||||
default:
|
default:
|
||||||
return i18next.t(`biome:${BiomeId[biome].toUpperCase()}`);
|
return i18next.t(`biome:${toCamelCase(BiomeId[biome])}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@ import type { Pokemon } from "#field/pokemon";
|
|||||||
import type { SpeciesStatBoosterItem, SpeciesStatBoosterModifierType } from "#modifiers/modifier-type";
|
import type { SpeciesStatBoosterItem, SpeciesStatBoosterModifierType } from "#modifiers/modifier-type";
|
||||||
import { coerceArray, isNullOrUndefined, randSeedInt } from "#utils/common";
|
import { coerceArray, isNullOrUndefined, randSeedInt } from "#utils/common";
|
||||||
import { getPokemonSpecies } from "#utils/pokemon-utils";
|
import { getPokemonSpecies } from "#utils/pokemon-utils";
|
||||||
|
import { toCamelCase } from "#utils/strings";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
|
|
||||||
export enum SpeciesWildEvolutionDelay {
|
export enum SpeciesWildEvolutionDelay {
|
||||||
@ -133,11 +134,11 @@ export class SpeciesEvolutionCondition {
|
|||||||
case EvoCondKey.FRIENDSHIP:
|
case EvoCondKey.FRIENDSHIP:
|
||||||
return i18next.t("pokemonEvolutions:friendship");
|
return i18next.t("pokemonEvolutions:friendship");
|
||||||
case EvoCondKey.TIME:
|
case EvoCondKey.TIME:
|
||||||
return i18next.t(`pokemonEvolutions:timeOfDay.${TimeOfDay[cond.time[cond.time.length - 1]]}`); // For Day and Night evos, the key we want goes last
|
return i18next.t(`pokemonEvolutions:timeOfDay.${toCamelCase(TimeOfDay[cond.time[cond.time.length - 1]])}`); // For Day and Night evos, the key we want goes last
|
||||||
case EvoCondKey.MOVE_TYPE:
|
case EvoCondKey.MOVE_TYPE:
|
||||||
return i18next.t("pokemonEvolutions:moveType", {type: i18next.t(`pokemonInfo:Type.${PokemonType[cond.pkmnType]}`)});
|
return i18next.t("pokemonEvolutions:moveType", {type: i18next.t(`pokemonInfo:type.${toCamelCase(PokemonType[cond.pkmnType])}`)});
|
||||||
case EvoCondKey.PARTY_TYPE:
|
case EvoCondKey.PARTY_TYPE:
|
||||||
return i18next.t("pokemonEvolutions:partyType", {type: i18next.t(`pokemonInfo:Type.${PokemonType[cond.pkmnType]}`)});
|
return i18next.t("pokemonEvolutions:partyType", {type: i18next.t(`pokemonInfo:type.${toCamelCase(PokemonType[cond.pkmnType])}`)});
|
||||||
case EvoCondKey.GENDER:
|
case EvoCondKey.GENDER:
|
||||||
return i18next.t("pokemonEvolutions:gender", {gender: getGenderSymbol(cond.gender)});
|
return i18next.t("pokemonEvolutions:gender", {gender: getGenderSymbol(cond.gender)});
|
||||||
case EvoCondKey.MOVE:
|
case EvoCondKey.MOVE:
|
||||||
@ -156,7 +157,7 @@ export class SpeciesEvolutionCondition {
|
|||||||
case EvoCondKey.SPECIES_CAUGHT:
|
case EvoCondKey.SPECIES_CAUGHT:
|
||||||
return i18next.t("pokemonEvolutions:caught", {species: getPokemonSpecies(cond.speciesCaught).name});
|
return i18next.t("pokemonEvolutions:caught", {species: getPokemonSpecies(cond.speciesCaught).name});
|
||||||
case EvoCondKey.HELD_ITEM:
|
case EvoCondKey.HELD_ITEM:
|
||||||
return i18next.t(`pokemonEvolutions:heldItem.${cond.itemKey}`);
|
return i18next.t(`pokemonEvolutions:heldItem.${toCamelCase(cond.itemKey)}`);
|
||||||
}
|
}
|
||||||
}).filter(s => !isNullOrUndefined(s)); // Filter out stringless conditions
|
}).filter(s => !isNullOrUndefined(s)); // Filter out stringless conditions
|
||||||
return this.desc;
|
return this.desc;
|
||||||
@ -245,7 +246,7 @@ export class SpeciesFormEvolution {
|
|||||||
}
|
}
|
||||||
if (this.item) {
|
if (this.item) {
|
||||||
const itemDescription = i18next.t(`modifierType:EvolutionItem.${EvolutionItem[this.item].toUpperCase()}`);
|
const itemDescription = i18next.t(`modifierType:EvolutionItem.${EvolutionItem[this.item].toUpperCase()}`);
|
||||||
const rarity = this.item > 50 ? i18next.t("pokemonEvolutions:ULTRA") : i18next.t("pokemonEvolutions:GREAT");
|
const rarity = this.item > 50 ? i18next.t("pokemonEvolutions:ultra") : i18next.t("pokemonEvolutions:great");
|
||||||
strings.push(i18next.t("pokemonEvolutions:using", {item: itemDescription, tier: rarity}));
|
strings.push(i18next.t("pokemonEvolutions:using", {item: itemDescription, tier: rarity}));
|
||||||
}
|
}
|
||||||
if (this.condition) {
|
if (this.condition) {
|
||||||
|
@ -1505,9 +1505,9 @@ export function initSpecies() {
|
|||||||
new PokemonForm("Hero of Many Battles", "hero-of-many-battles", PokemonType.FIGHTING, null, 2.9, 210, AbilityId.DAUNTLESS_SHIELD, AbilityId.NONE, AbilityId.NONE, 660, 92, 120, 115, 80, 115, 138, 10, 0, 335, false, "", true),
|
new PokemonForm("Hero of Many Battles", "hero-of-many-battles", PokemonType.FIGHTING, null, 2.9, 210, AbilityId.DAUNTLESS_SHIELD, AbilityId.NONE, AbilityId.NONE, 660, 92, 120, 115, 80, 115, 138, 10, 0, 335, false, "", true),
|
||||||
new PokemonForm("Crowned", "crowned", PokemonType.FIGHTING, PokemonType.STEEL, 2.9, 785, AbilityId.DAUNTLESS_SHIELD, AbilityId.NONE, AbilityId.NONE, 700, 92, 120, 140, 80, 140, 128, 10, 0, 360)
|
new PokemonForm("Crowned", "crowned", PokemonType.FIGHTING, PokemonType.STEEL, 2.9, 785, AbilityId.DAUNTLESS_SHIELD, AbilityId.NONE, AbilityId.NONE, 700, 92, 120, 140, 80, 140, 128, 10, 0, 360)
|
||||||
),
|
),
|
||||||
new PokemonSpecies(SpeciesId.ETERNATUS, 8, false, true, false, "Gigantic Pokémon", PokemonType.POISON, PokemonType.DRAGON, 20, 950, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 690, 140, 85, 95, 145, 95, 130, 255, 0, 345, GrowthRate.SLOW, null, false, true,
|
new PokemonSpecies(SpeciesId.ETERNATUS, 8, false, true, false, "Gigantic Pokémon", PokemonType.POISON, PokemonType.DRAGON, 20, 950, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 690, 140, 85, 95, 145, 95, 130, 45, 0, 345, GrowthRate.SLOW, null, false, true,
|
||||||
new PokemonForm("Normal", "", PokemonType.POISON, PokemonType.DRAGON, 20, 950, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 690, 140, 85, 95, 145, 95, 130, 255, 0, 345, false, null, true),
|
new PokemonForm("Normal", "", PokemonType.POISON, PokemonType.DRAGON, 20, 950, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 690, 140, 85, 95, 145, 95, 130, 45, 0, 345, false, null, true),
|
||||||
new PokemonForm("E-Max", "eternamax", PokemonType.POISON, PokemonType.DRAGON, 100, 999.9, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 1125, 255, 115, 250, 125, 250, 130, 255, 0, 345)
|
new PokemonForm("E-Max", "eternamax", PokemonType.POISON, PokemonType.DRAGON, 100, 999.9, AbilityId.PRESSURE, AbilityId.NONE, AbilityId.NONE, 1125, 255, 115, 250, 125, 250, 130, 45, 0, 345)
|
||||||
),
|
),
|
||||||
new PokemonSpecies(SpeciesId.KUBFU, 8, true, false, false, "Wushu Pokémon", PokemonType.FIGHTING, null, 0.6, 12, AbilityId.INNER_FOCUS, AbilityId.NONE, AbilityId.NONE, 385, 60, 90, 60, 53, 50, 72, 3, 50, 77, GrowthRate.SLOW, 87.5, false),
|
new PokemonSpecies(SpeciesId.KUBFU, 8, true, false, false, "Wushu Pokémon", PokemonType.FIGHTING, null, 0.6, 12, AbilityId.INNER_FOCUS, AbilityId.NONE, AbilityId.NONE, 385, 60, 90, 60, 53, 50, 72, 3, 50, 77, GrowthRate.SLOW, 87.5, false),
|
||||||
new PokemonSpecies(SpeciesId.URSHIFU, 8, true, false, false, "Wushu Pokémon", PokemonType.FIGHTING, PokemonType.DARK, 1.9, 105, AbilityId.UNSEEN_FIST, AbilityId.NONE, AbilityId.NONE, 550, 100, 130, 100, 63, 60, 97, 3, 50, 275, GrowthRate.SLOW, 87.5, false, true,
|
new PokemonSpecies(SpeciesId.URSHIFU, 8, true, false, false, "Wushu Pokémon", PokemonType.FIGHTING, PokemonType.DARK, 1.9, 105, AbilityId.UNSEEN_FIST, AbilityId.NONE, AbilityId.NONE, 550, 100, 130, 100, 63, 60, 97, 3, 50, 275, GrowthRate.SLOW, 87.5, false, true,
|
||||||
|
@ -50,6 +50,7 @@ import type {
|
|||||||
} from "#types/battler-tags";
|
} from "#types/battler-tags";
|
||||||
import type { Mutable } from "#types/type-helpers";
|
import type { Mutable } from "#types/type-helpers";
|
||||||
import { BooleanHolder, coerceArray, getFrameMs, isNullOrUndefined, NumberHolder, toDmgValue } from "#utils/common";
|
import { BooleanHolder, coerceArray, getFrameMs, isNullOrUndefined, NumberHolder, toDmgValue } from "#utils/common";
|
||||||
|
import { toCamelCase } from "#utils/strings";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @module
|
* @module
|
||||||
@ -2305,7 +2306,7 @@ export class TypeBoostTag extends SerializableBattlerTag {
|
|||||||
globalScene.phaseManager.queueMessage(
|
globalScene.phaseManager.queueMessage(
|
||||||
i18next.t("abilityTriggers:typeImmunityPowerBoost", {
|
i18next.t("abilityTriggers:typeImmunityPowerBoost", {
|
||||||
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon),
|
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon),
|
||||||
typeName: i18next.t(`pokemonInfo:Type.${PokemonType[this.boostedType]}`),
|
typeName: i18next.t(`pokemonInfo:type.${toCamelCase(PokemonType[this.boostedType])}`),
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -11,11 +11,11 @@ import { NumberHolder, randSeedInt, toDmgValue } from "#utils/common";
|
|||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
|
|
||||||
export function getBerryName(berryType: BerryType): string {
|
export function getBerryName(berryType: BerryType): string {
|
||||||
return i18next.t(`berry:${BerryType[berryType]}.name`);
|
return i18next.t(`berry:${BerryType[berryType].toLowerCase()}.name`);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getBerryEffectDescription(berryType: BerryType): string {
|
export function getBerryEffectDescription(berryType: BerryType): string {
|
||||||
return i18next.t(`berry:${BerryType[berryType]}.effect`);
|
return i18next.t(`berry:${BerryType[berryType].toLowerCase()}.effect`);
|
||||||
}
|
}
|
||||||
|
|
||||||
export type BerryPredicate = (pokemon: Pokemon) => boolean;
|
export type BerryPredicate = (pokemon: Pokemon) => boolean;
|
||||||
|
@ -756,7 +756,7 @@ export class SingleTypeChallenge extends Challenge {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getDescription(overrideValue: number = this.value): string {
|
getDescription(overrideValue: number = this.value): string {
|
||||||
const type = i18next.t(`pokemonInfo:Type.${PokemonType[overrideValue - 1]}`);
|
const type = i18next.t(`pokemonInfo:type.${toCamelCase(PokemonType[overrideValue - 1])}`);
|
||||||
const typeColor = `[color=${TypeColor[PokemonType[overrideValue - 1]]}][shadow=${TypeShadow[PokemonType[this.value - 1]]}]${type}[/shadow][/color]`;
|
const typeColor = `[color=${TypeColor[PokemonType[overrideValue - 1]]}][shadow=${TypeShadow[PokemonType[this.value - 1]]}]${type}[/shadow][/color]`;
|
||||||
const defaultDesc = i18next.t("challenges:singleType.desc_default");
|
const defaultDesc = i18next.t("challenges:singleType.desc_default");
|
||||||
const typeDesc = i18next.t("challenges:singleType.desc", {
|
const typeDesc = i18next.t("challenges:singleType.desc", {
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -2,43 +2,43 @@
|
|||||||
// that caused this to be moved out in the first place
|
// that caused this to be moved out in the first place
|
||||||
export const doubleBattleDialogue = {
|
export const doubleBattleDialogue = {
|
||||||
blue_red_double: {
|
blue_red_double: {
|
||||||
encounter: ["doubleBattleDialogue:blue_red_double.encounter.1"],
|
encounter: ["doubleBattleDialogue:blueRedDouble.encounter.1"],
|
||||||
victory: ["doubleBattleDialogue:blue_red_double.victory.1"],
|
victory: ["doubleBattleDialogue:blueRedDouble.victory.1"],
|
||||||
},
|
},
|
||||||
red_blue_double: {
|
red_blue_double: {
|
||||||
encounter: ["doubleBattleDialogue:red_blue_double.encounter.1"],
|
encounter: ["doubleBattleDialogue:redBlueDouble.encounter.1"],
|
||||||
victory: ["doubleBattleDialogue:red_blue_double.victory.1"],
|
victory: ["doubleBattleDialogue:redBlueDouble.victory.1"],
|
||||||
},
|
},
|
||||||
tate_liza_double: {
|
tate_liza_double: {
|
||||||
encounter: ["doubleBattleDialogue:tate_liza_double.encounter.1"],
|
encounter: ["doubleBattleDialogue:tateLizaDouble.encounter.1"],
|
||||||
victory: ["doubleBattleDialogue:tate_liza_double.victory.1"],
|
victory: ["doubleBattleDialogue:tateLizaDouble.victory.1"],
|
||||||
},
|
},
|
||||||
liza_tate_double: {
|
liza_tate_double: {
|
||||||
encounter: ["doubleBattleDialogue:liza_tate_double.encounter.1"],
|
encounter: ["doubleBattleDialogue:lizaTateDouble.encounter.1"],
|
||||||
victory: ["doubleBattleDialogue:liza_tate_double.victory.1"],
|
victory: ["doubleBattleDialogue:lizaTateDouble.victory.1"],
|
||||||
},
|
},
|
||||||
wallace_steven_double: {
|
wallace_steven_double: {
|
||||||
encounter: ["doubleBattleDialogue:wallace_steven_double.encounter.1"],
|
encounter: ["doubleBattleDialogue:wallaceStevenDouble.encounter.1"],
|
||||||
victory: ["doubleBattleDialogue:wallace_steven_double.victory.1"],
|
victory: ["doubleBattleDialogue:wallaceStevenDouble.victory.1"],
|
||||||
},
|
},
|
||||||
steven_wallace_double: {
|
steven_wallace_double: {
|
||||||
encounter: ["doubleBattleDialogue:steven_wallace_double.encounter.1"],
|
encounter: ["doubleBattleDialogue:stevenWallaceDouble.encounter.1"],
|
||||||
victory: ["doubleBattleDialogue:steven_wallace_double.victory.1"],
|
victory: ["doubleBattleDialogue:stevenWallaceDouble.victory.1"],
|
||||||
},
|
},
|
||||||
alder_iris_double: {
|
alder_iris_double: {
|
||||||
encounter: ["doubleBattleDialogue:alder_iris_double.encounter.1"],
|
encounter: ["doubleBattleDialogue:alderIrisDouble.encounter.1"],
|
||||||
victory: ["doubleBattleDialogue:alder_iris_double.victory.1"],
|
victory: ["doubleBattleDialogue:alderIrisDouble.victory.1"],
|
||||||
},
|
},
|
||||||
iris_alder_double: {
|
iris_alder_double: {
|
||||||
encounter: ["doubleBattleDialogue:iris_alder_double.encounter.1"],
|
encounter: ["doubleBattleDialogue:irisAlderDouble.encounter.1"],
|
||||||
victory: ["doubleBattleDialogue:iris_alder_double.victory.1"],
|
victory: ["doubleBattleDialogue:irisAlderDouble.victory.1"],
|
||||||
},
|
},
|
||||||
marnie_piers_double: {
|
marnie_piers_double: {
|
||||||
encounter: ["doubleBattleDialogue:marnie_piers_double.encounter.1"],
|
encounter: ["doubleBattleDialogue:marniePiersDouble.encounter.1"],
|
||||||
victory: ["doubleBattleDialogue:marnie_piers_double.victory.1"],
|
victory: ["doubleBattleDialogue:marniePiersDouble.victory.1"],
|
||||||
},
|
},
|
||||||
piers_marnie_double: {
|
piers_marnie_double: {
|
||||||
encounter: ["doubleBattleDialogue:piers_marnie_double.encounter.1"],
|
encounter: ["doubleBattleDialogue:piersMarnieDouble.encounter.1"],
|
||||||
victory: ["doubleBattleDialogue:piers_marnie_double.victory.1"],
|
victory: ["doubleBattleDialogue:piersMarnieDouble.victory.1"],
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -6675,7 +6675,7 @@ export class CopyBiomeTypeAttr extends MoveEffectAttr {
|
|||||||
user.summonData.types = [ typeChange ];
|
user.summonData.types = [ typeChange ];
|
||||||
user.updateInfo();
|
user.updateInfo();
|
||||||
|
|
||||||
globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:transformedIntoType", { pokemonName: getPokemonNameWithAffix(user), typeName: i18next.t(`pokemonInfo:Type.${PokemonType[typeChange]}`) }));
|
globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:transformedIntoType", { pokemonName: getPokemonNameWithAffix(user), typeName: i18next.t(`pokemonInfo:type.${toCamelCase(PokemonType[typeChange])}`) }));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -6803,7 +6803,7 @@ export class AddTypeAttr extends MoveEffectAttr {
|
|||||||
target.summonData.addedType = this.type;
|
target.summonData.addedType = this.type;
|
||||||
target.updateInfo();
|
target.updateInfo();
|
||||||
|
|
||||||
globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:addType", { typeName: i18next.t(`pokemonInfo:Type.${PokemonType[this.type]}`), pokemonName: getPokemonNameWithAffix(target) }));
|
globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:addType", { typeName: i18next.t(`pokemonInfo:type.${toCamelCase(PokemonType[this.type])}`), pokemonName: getPokemonNameWithAffix(target) }));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -6825,7 +6825,7 @@ export class FirstMoveTypeAttr extends MoveEffectAttr {
|
|||||||
|
|
||||||
const firstMoveType = target.getMoveset()[0].getMove().type;
|
const firstMoveType = target.getMoveset()[0].getMove().type;
|
||||||
user.summonData.types = [ firstMoveType ];
|
user.summonData.types = [ firstMoveType ];
|
||||||
globalScene.phaseManager.queueMessage(i18next.t("battle:transformedIntoType", { pokemonName: getPokemonNameWithAffix(user), type: i18next.t(`pokemonInfo:Type.${PokemonType[firstMoveType]}`) }));
|
globalScene.phaseManager.queueMessage(i18next.t("battle:transformedIntoType", { pokemonName: getPokemonNameWithAffix(user), type: i18next.t(`pokemonInfo:type.${toCamelCase(PokemonType[firstMoveType])}`) }));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -8512,7 +8512,7 @@ export function initMoves() {
|
|||||||
.punchingMove(),
|
.punchingMove(),
|
||||||
new AttackMove(MoveId.SCRATCH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 35, -1, 0, 1),
|
new AttackMove(MoveId.SCRATCH, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 35, -1, 0, 1),
|
||||||
new AttackMove(MoveId.VISE_GRIP, PokemonType.NORMAL, MoveCategory.PHYSICAL, 55, 100, 30, -1, 0, 1),
|
new AttackMove(MoveId.VISE_GRIP, PokemonType.NORMAL, MoveCategory.PHYSICAL, 55, 100, 30, -1, 0, 1),
|
||||||
new AttackMove(MoveId.GUILLOTINE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 200, 30, 5, -1, 0, 1)
|
new AttackMove(MoveId.GUILLOTINE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 250, 30, 5, -1, 0, 1)
|
||||||
.attr(OneHitKOAttr)
|
.attr(OneHitKOAttr)
|
||||||
.attr(OneHitKOAccuracyAttr),
|
.attr(OneHitKOAccuracyAttr),
|
||||||
new ChargingAttackMove(MoveId.RAZOR_WIND, PokemonType.NORMAL, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 1)
|
new ChargingAttackMove(MoveId.RAZOR_WIND, PokemonType.NORMAL, MoveCategory.SPECIAL, 80, 100, 10, -1, 0, 1)
|
||||||
@ -8565,7 +8565,7 @@ export function initMoves() {
|
|||||||
new AttackMove(MoveId.HORN_ATTACK, PokemonType.NORMAL, MoveCategory.PHYSICAL, 65, 100, 25, -1, 0, 1),
|
new AttackMove(MoveId.HORN_ATTACK, PokemonType.NORMAL, MoveCategory.PHYSICAL, 65, 100, 25, -1, 0, 1),
|
||||||
new AttackMove(MoveId.FURY_ATTACK, PokemonType.NORMAL, MoveCategory.PHYSICAL, 15, 85, 20, -1, 0, 1)
|
new AttackMove(MoveId.FURY_ATTACK, PokemonType.NORMAL, MoveCategory.PHYSICAL, 15, 85, 20, -1, 0, 1)
|
||||||
.attr(MultiHitAttr),
|
.attr(MultiHitAttr),
|
||||||
new AttackMove(MoveId.HORN_DRILL, PokemonType.NORMAL, MoveCategory.PHYSICAL, 200, 30, 5, -1, 0, 1)
|
new AttackMove(MoveId.HORN_DRILL, PokemonType.NORMAL, MoveCategory.PHYSICAL, 250, 30, 5, -1, 0, 1)
|
||||||
.attr(OneHitKOAttr)
|
.attr(OneHitKOAttr)
|
||||||
.attr(OneHitKOAccuracyAttr),
|
.attr(OneHitKOAccuracyAttr),
|
||||||
new AttackMove(MoveId.TACKLE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 35, -1, 0, 1),
|
new AttackMove(MoveId.TACKLE, PokemonType.NORMAL, MoveCategory.PHYSICAL, 40, 100, 35, -1, 0, 1),
|
||||||
@ -8746,7 +8746,7 @@ export function initMoves() {
|
|||||||
.attr(MovePowerMultiplierAttr, (user, target, move) => globalScene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1)
|
.attr(MovePowerMultiplierAttr, (user, target, move) => globalScene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() ? 0.5 : 1)
|
||||||
.makesContact(false)
|
.makesContact(false)
|
||||||
.target(MoveTarget.ALL_NEAR_OTHERS),
|
.target(MoveTarget.ALL_NEAR_OTHERS),
|
||||||
new AttackMove(MoveId.FISSURE, PokemonType.GROUND, MoveCategory.PHYSICAL, 200, 30, 5, -1, 0, 1)
|
new AttackMove(MoveId.FISSURE, PokemonType.GROUND, MoveCategory.PHYSICAL, 250, 30, 5, -1, 0, 1)
|
||||||
.attr(OneHitKOAttr)
|
.attr(OneHitKOAttr)
|
||||||
.attr(OneHitKOAccuracyAttr)
|
.attr(OneHitKOAccuracyAttr)
|
||||||
.attr(HitsTagAttr, BattlerTagType.UNDERGROUND)
|
.attr(HitsTagAttr, BattlerTagType.UNDERGROUND)
|
||||||
@ -9528,7 +9528,7 @@ export function initMoves() {
|
|||||||
new AttackMove(MoveId.SAND_TOMB, PokemonType.GROUND, MoveCategory.PHYSICAL, 35, 85, 15, -1, 0, 3)
|
new AttackMove(MoveId.SAND_TOMB, PokemonType.GROUND, MoveCategory.PHYSICAL, 35, 85, 15, -1, 0, 3)
|
||||||
.attr(TrapAttr, BattlerTagType.SAND_TOMB)
|
.attr(TrapAttr, BattlerTagType.SAND_TOMB)
|
||||||
.makesContact(false),
|
.makesContact(false),
|
||||||
new AttackMove(MoveId.SHEER_COLD, PokemonType.ICE, MoveCategory.SPECIAL, 200, 30, 5, -1, 0, 3)
|
new AttackMove(MoveId.SHEER_COLD, PokemonType.ICE, MoveCategory.SPECIAL, 250, 30, 5, -1, 0, 3)
|
||||||
.attr(IceNoEffectTypeAttr)
|
.attr(IceNoEffectTypeAttr)
|
||||||
.attr(OneHitKOAttr)
|
.attr(OneHitKOAttr)
|
||||||
.attr(SheerColdAccuracyAttr),
|
.attr(SheerColdAccuracyAttr),
|
||||||
|
@ -82,7 +82,7 @@ export const ATrainersTestEncounter: MysteryEncounter = MysteryEncounterBuilder.
|
|||||||
encounter.dialogue.intro = [
|
encounter.dialogue.intro = [
|
||||||
{
|
{
|
||||||
speaker: `trainerNames:${trainerNameKey}`,
|
speaker: `trainerNames:${trainerNameKey}`,
|
||||||
text: `${namespace}:${trainerNameKey}.intro_dialogue`,
|
text: `${namespace}:${trainerNameKey}.introDialogue`,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
encounter.options[0].dialogue!.selected = [
|
encounter.options[0].dialogue!.selected = [
|
||||||
|
@ -237,7 +237,7 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = MysteryEncounterBuilde
|
|||||||
modifierConfigs: bossModifierConfigs,
|
modifierConfigs: bossModifierConfigs,
|
||||||
tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON],
|
tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON],
|
||||||
mysteryEncounterBattleEffects: (pokemon: Pokemon) => {
|
mysteryEncounterBattleEffects: (pokemon: Pokemon) => {
|
||||||
queueEncounterMessage(`${namespace}:option.1.boss_enraged`);
|
queueEncounterMessage(`${namespace}:option.1.bossEnraged`);
|
||||||
globalScene.phaseManager.unshiftNew(
|
globalScene.phaseManager.unshiftNew(
|
||||||
"StatStageChangePhase",
|
"StatStageChangePhase",
|
||||||
pokemon.getBattlerIndex(),
|
pokemon.getBattlerIndex(),
|
||||||
@ -300,7 +300,7 @@ export const AbsoluteAvariceEncounter: MysteryEncounter = MysteryEncounterBuilde
|
|||||||
globalScene.addModifier(seedModifier, false, false, false, true);
|
globalScene.addModifier(seedModifier, false, false, false, true);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
queueEncounterMessage(`${namespace}:option.1.food_stash`);
|
queueEncounterMessage(`${namespace}:option.1.foodStash`);
|
||||||
};
|
};
|
||||||
|
|
||||||
setEncounterRewards({ fillRemaining: true }, undefined, givePartyPokemonReviverSeeds);
|
setEncounterRewards({ fillRemaining: true }, undefined, givePartyPokemonReviverSeeds);
|
||||||
|
@ -71,7 +71,7 @@ export const AnOfferYouCantRefuseEncounter: MysteryEncounter = MysteryEncounterB
|
|||||||
text: `${namespace}:intro`,
|
text: `${namespace}:intro`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: `${namespace}:intro_dialogue`,
|
text: `${namespace}:introDialogue`,
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
},
|
},
|
||||||
])
|
])
|
||||||
@ -152,7 +152,7 @@ export const AnOfferYouCantRefuseEncounter: MysteryEncounter = MysteryEncounterB
|
|||||||
.withDialogue({
|
.withDialogue({
|
||||||
buttonLabel: `${namespace}:option.2.label`,
|
buttonLabel: `${namespace}:option.2.label`,
|
||||||
buttonTooltip: `${namespace}:option.2.tooltip`,
|
buttonTooltip: `${namespace}:option.2.tooltip`,
|
||||||
disabledButtonTooltip: `${namespace}:option.2.tooltip_disabled`,
|
disabledButtonTooltip: `${namespace}:option.2.tooltipDisabled`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
|
@ -254,7 +254,7 @@ export const BerriesAboundEncounter: MysteryEncounter = MysteryEncounterBuilder.
|
|||||||
undefined,
|
undefined,
|
||||||
doBerryRewards,
|
doBerryRewards,
|
||||||
);
|
);
|
||||||
await showEncounterText(`${namespace}:option.2.selected_bad`);
|
await showEncounterText(`${namespace}:option.2.selectedBad`);
|
||||||
await initBattleWithEnemyConfig(config);
|
await initBattleWithEnemyConfig(config);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -198,7 +198,7 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = MysteryEncounterBuilde
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
text: `${namespace}:intro_dialogue`,
|
text: `${namespace}:introDialogue`,
|
||||||
},
|
},
|
||||||
])
|
])
|
||||||
.withOnInit(() => {
|
.withOnInit(() => {
|
||||||
@ -312,7 +312,7 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = MysteryEncounterBuilde
|
|||||||
.withDialogue({
|
.withDialogue({
|
||||||
buttonLabel: `${namespace}:option.2.label`,
|
buttonLabel: `${namespace}:option.2.label`,
|
||||||
buttonTooltip: `${namespace}:option.2.tooltip`,
|
buttonTooltip: `${namespace}:option.2.tooltip`,
|
||||||
disabledButtonTooltip: `${namespace}:option.2.disabled_tooltip`,
|
disabledButtonTooltip: `${namespace}:option.2.disabledTooltip`,
|
||||||
})
|
})
|
||||||
.withPreOptionPhase(async () => {
|
.withPreOptionPhase(async () => {
|
||||||
// Player shows off their bug types
|
// Player shows off their bug types
|
||||||
@ -333,7 +333,7 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = MysteryEncounterBuilde
|
|||||||
encounter.selectedOption!.dialogue!.selected = [
|
encounter.selectedOption!.dialogue!.selected = [
|
||||||
{
|
{
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
text: `${namespace}:option.2.selected_0_to_1`,
|
text: `${namespace}:option.2.selected0To1`,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
} else if (numBugTypes < 4) {
|
} else if (numBugTypes < 4) {
|
||||||
@ -344,7 +344,7 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = MysteryEncounterBuilde
|
|||||||
encounter.selectedOption!.dialogue!.selected = [
|
encounter.selectedOption!.dialogue!.selected = [
|
||||||
{
|
{
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
text: `${namespace}:option.2.selected_2_to_3`,
|
text: `${namespace}:option.2.selected2To3`,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
} else if (numBugTypes < 6) {
|
} else if (numBugTypes < 6) {
|
||||||
@ -355,7 +355,7 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = MysteryEncounterBuilde
|
|||||||
encounter.selectedOption!.dialogue!.selected = [
|
encounter.selectedOption!.dialogue!.selected = [
|
||||||
{
|
{
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
text: `${namespace}:option.2.selected_4_to_5`,
|
text: `${namespace}:option.2.selected4To5`,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
} else {
|
} else {
|
||||||
@ -398,7 +398,7 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = MysteryEncounterBuilde
|
|||||||
encounter.selectedOption!.dialogue!.selected = [
|
encounter.selectedOption!.dialogue!.selected = [
|
||||||
{
|
{
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
text: `${namespace}:option.2.selected_6`,
|
text: `${namespace}:option.2.selected6`,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@ -421,17 +421,17 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = MysteryEncounterBuilde
|
|||||||
.withDialogue({
|
.withDialogue({
|
||||||
buttonLabel: `${namespace}:option.3.label`,
|
buttonLabel: `${namespace}:option.3.label`,
|
||||||
buttonTooltip: `${namespace}:option.3.tooltip`,
|
buttonTooltip: `${namespace}:option.3.tooltip`,
|
||||||
disabledButtonTooltip: `${namespace}:option.3.disabled_tooltip`,
|
disabledButtonTooltip: `${namespace}:option.3.disabledTooltip`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.3.selected`,
|
text: `${namespace}:option.3.selected`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
text: `${namespace}:option.3.selected_dialogue`,
|
text: `${namespace}:option.3.selectedDialogue`,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
secondOptionPrompt: `${namespace}:option.3.select_prompt`,
|
secondOptionPrompt: `${namespace}:option.3.selectPrompt`,
|
||||||
})
|
})
|
||||||
.withPreOptionPhase(async (): Promise<boolean> => {
|
.withPreOptionPhase(async (): Promise<boolean> => {
|
||||||
const encounter = globalScene.currentBattle.mysteryEncounter!;
|
const encounter = globalScene.currentBattle.mysteryEncounter!;
|
||||||
@ -476,7 +476,7 @@ export const BugTypeSuperfanEncounter: MysteryEncounter = MysteryEncounterBuilde
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
if (!hasValidItem) {
|
if (!hasValidItem) {
|
||||||
return getEncounterText(`${namespace}:option.3.invalid_selection`) ?? null;
|
return getEncounterText(`${namespace}:option.3.invalidSelection`) ?? null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
@ -713,7 +713,7 @@ function doBugTypeMoveTutor(): Promise<void> {
|
|||||||
// biome-ignore lint/suspicious/noAsyncPromiseExecutor: TODO explain
|
// biome-ignore lint/suspicious/noAsyncPromiseExecutor: TODO explain
|
||||||
return new Promise<void>(async resolve => {
|
return new Promise<void>(async resolve => {
|
||||||
const moveOptions = globalScene.currentBattle.mysteryEncounter!.misc.moveTutorOptions;
|
const moveOptions = globalScene.currentBattle.mysteryEncounter!.misc.moveTutorOptions;
|
||||||
await showEncounterDialogue(`${namespace}:battle_won`, `${namespace}:speaker`);
|
await showEncounterDialogue(`${namespace}:battleWon`, `${namespace}:speaker`);
|
||||||
|
|
||||||
const moveInfoOverlay = new MoveInfoOverlay({
|
const moveInfoOverlay = new MoveInfoOverlay({
|
||||||
delayVisibility: false,
|
delayVisibility: false,
|
||||||
@ -748,7 +748,7 @@ function doBugTypeMoveTutor(): Promise<void> {
|
|||||||
|
|
||||||
const result = await selectOptionThenPokemon(
|
const result = await selectOptionThenPokemon(
|
||||||
optionSelectItems,
|
optionSelectItems,
|
||||||
`${namespace}:teach_move_prompt`,
|
`${namespace}:teachMovePrompt`,
|
||||||
undefined,
|
undefined,
|
||||||
onHoverOverCancel,
|
onHoverOverCancel,
|
||||||
);
|
);
|
||||||
|
@ -119,7 +119,7 @@ export const ClowningAroundEncounter: MysteryEncounter = MysteryEncounterBuilder
|
|||||||
text: `${namespace}:intro`,
|
text: `${namespace}:intro`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: `${namespace}:intro_dialogue`,
|
text: `${namespace}:introDialogue`,
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
},
|
},
|
||||||
])
|
])
|
||||||
@ -233,7 +233,7 @@ export const ClowningAroundEncounter: MysteryEncounter = MysteryEncounterBuilder
|
|||||||
// After the battle, offer the player the opportunity to permanently swap ability
|
// After the battle, offer the player the opportunity to permanently swap ability
|
||||||
const abilityWasSwapped = await handleSwapAbility();
|
const abilityWasSwapped = await handleSwapAbility();
|
||||||
if (abilityWasSwapped) {
|
if (abilityWasSwapped) {
|
||||||
await showEncounterText(`${namespace}:option.1.ability_gained`);
|
await showEncounterText(`${namespace}:option.1.abilityGained`);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Play animations once ability swap is complete
|
// Play animations once ability swap is complete
|
||||||
@ -267,10 +267,10 @@ export const ClowningAroundEncounter: MysteryEncounter = MysteryEncounterBuilder
|
|||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.2.selected_2`,
|
text: `${namespace}:option.2.selected2`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.2.selected_3`,
|
text: `${namespace}:option.2.selected3`,
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@ -359,10 +359,10 @@ export const ClowningAroundEncounter: MysteryEncounter = MysteryEncounterBuilder
|
|||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.3.selected_2`,
|
text: `${namespace}:option.3.selected2`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.3.selected_3`,
|
text: `${namespace}:option.3.selected3`,
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
@ -432,8 +432,8 @@ export const ClowningAroundEncounter: MysteryEncounter = MysteryEncounterBuilder
|
|||||||
async function handleSwapAbility() {
|
async function handleSwapAbility() {
|
||||||
// biome-ignore lint/suspicious/noAsyncPromiseExecutor: TODO: Consider refactoring to avoid async promise executor
|
// biome-ignore lint/suspicious/noAsyncPromiseExecutor: TODO: Consider refactoring to avoid async promise executor
|
||||||
return new Promise<boolean>(async resolve => {
|
return new Promise<boolean>(async resolve => {
|
||||||
await showEncounterDialogue(`${namespace}:option.1.apply_ability_dialogue`, `${namespace}:speaker`);
|
await showEncounterDialogue(`${namespace}:option.1.applyAbilityDialogue`, `${namespace}:speaker`);
|
||||||
await showEncounterText(`${namespace}:option.1.apply_ability_message`);
|
await showEncounterText(`${namespace}:option.1.applyAbilityMessage`);
|
||||||
|
|
||||||
globalScene.ui.setMode(UiMode.MESSAGE).then(() => {
|
globalScene.ui.setMode(UiMode.MESSAGE).then(() => {
|
||||||
displayYesNoOptions(resolve);
|
displayYesNoOptions(resolve);
|
||||||
@ -442,7 +442,7 @@ async function handleSwapAbility() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function displayYesNoOptions(resolve) {
|
function displayYesNoOptions(resolve) {
|
||||||
showEncounterText(`${namespace}:option.1.ability_prompt`, null, 500, false);
|
showEncounterText(`${namespace}:option.1.abilityPrompt`, null, 500, false);
|
||||||
const fullOptions = [
|
const fullOptions = [
|
||||||
{
|
{
|
||||||
label: i18next.t("menu:yes"),
|
label: i18next.t("menu:yes"),
|
||||||
|
@ -174,7 +174,7 @@ export const DancingLessonsEncounter: MysteryEncounter = MysteryEncounterBuilder
|
|||||||
// Gets +1 to all stats except SPD on battle start
|
// Gets +1 to all stats except SPD on battle start
|
||||||
tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON],
|
tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON],
|
||||||
mysteryEncounterBattleEffects: (pokemon: Pokemon) => {
|
mysteryEncounterBattleEffects: (pokemon: Pokemon) => {
|
||||||
queueEncounterMessage(`${namespace}:option.1.boss_enraged`);
|
queueEncounterMessage(`${namespace}:option.1.bossEnraged`);
|
||||||
globalScene.phaseManager.unshiftNew(
|
globalScene.phaseManager.unshiftNew(
|
||||||
"StatStageChangePhase",
|
"StatStageChangePhase",
|
||||||
pokemon.getBattlerIndex(),
|
pokemon.getBattlerIndex(),
|
||||||
@ -273,8 +273,8 @@ export const DancingLessonsEncounter: MysteryEncounter = MysteryEncounterBuilder
|
|||||||
.withDialogue({
|
.withDialogue({
|
||||||
buttonLabel: `${namespace}:option.3.label`,
|
buttonLabel: `${namespace}:option.3.label`,
|
||||||
buttonTooltip: `${namespace}:option.3.tooltip`,
|
buttonTooltip: `${namespace}:option.3.tooltip`,
|
||||||
disabledButtonTooltip: `${namespace}:option.3.disabled_tooltip`,
|
disabledButtonTooltip: `${namespace}:option.3.disabledTooltip`,
|
||||||
secondOptionPrompt: `${namespace}:option.3.select_prompt`,
|
secondOptionPrompt: `${namespace}:option.3.selectPrompt`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.3.selected`,
|
text: `${namespace}:option.3.selected`,
|
||||||
@ -316,7 +316,7 @@ export const DancingLessonsEncounter: MysteryEncounter = MysteryEncounterBuilder
|
|||||||
}
|
}
|
||||||
const meetsReqs = encounter.options[2].pokemonMeetsPrimaryRequirements(pokemon);
|
const meetsReqs = encounter.options[2].pokemonMeetsPrimaryRequirements(pokemon);
|
||||||
if (!meetsReqs) {
|
if (!meetsReqs) {
|
||||||
return getEncounterText(`${namespace}:invalid_selection`) ?? null;
|
return getEncounterText(`${namespace}:invalidSelection`) ?? null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
@ -119,7 +119,7 @@ export const DarkDealEncounter: MysteryEncounter = MysteryEncounterBuilder.withE
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
text: `${namespace}:intro_dialogue`,
|
text: `${namespace}:introDialogue`,
|
||||||
},
|
},
|
||||||
])
|
])
|
||||||
.withSceneWaveRangeRequirement(30, CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES[1])
|
.withSceneWaveRangeRequirement(30, CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES[1])
|
||||||
@ -137,10 +137,10 @@ export const DarkDealEncounter: MysteryEncounter = MysteryEncounterBuilder.withE
|
|||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
text: `${namespace}:option.1.selected_dialogue`,
|
text: `${namespace}:option.1.selectedDialogue`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.1.selected_message`,
|
text: `${namespace}:option.1.selectedMessage`,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
|
@ -193,7 +193,7 @@ export const DelibirdyEncounter: MysteryEncounter = MysteryEncounterBuilder.with
|
|||||||
.withDialogue({
|
.withDialogue({
|
||||||
buttonLabel: `${namespace}:option.2.label`,
|
buttonLabel: `${namespace}:option.2.label`,
|
||||||
buttonTooltip: `${namespace}:option.2.tooltip`,
|
buttonTooltip: `${namespace}:option.2.tooltip`,
|
||||||
secondOptionPrompt: `${namespace}:option.2.select_prompt`,
|
secondOptionPrompt: `${namespace}:option.2.selectPrompt`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.2.selected`,
|
text: `${namespace}:option.2.selected`,
|
||||||
@ -229,7 +229,7 @@ export const DelibirdyEncounter: MysteryEncounter = MysteryEncounterBuilder.with
|
|||||||
// If pokemon has valid item, it can be selected
|
// If pokemon has valid item, it can be selected
|
||||||
const meetsReqs = encounter.options[1].pokemonMeetsPrimaryRequirements(pokemon);
|
const meetsReqs = encounter.options[1].pokemonMeetsPrimaryRequirements(pokemon);
|
||||||
if (!meetsReqs) {
|
if (!meetsReqs) {
|
||||||
return getEncounterText(`${namespace}:invalid_selection`) ?? null;
|
return getEncounterText(`${namespace}:invalidSelection`) ?? null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
@ -303,7 +303,7 @@ export const DelibirdyEncounter: MysteryEncounter = MysteryEncounterBuilder.with
|
|||||||
.withDialogue({
|
.withDialogue({
|
||||||
buttonLabel: `${namespace}:option.3.label`,
|
buttonLabel: `${namespace}:option.3.label`,
|
||||||
buttonTooltip: `${namespace}:option.3.tooltip`,
|
buttonTooltip: `${namespace}:option.3.tooltip`,
|
||||||
secondOptionPrompt: `${namespace}:option.3.select_prompt`,
|
secondOptionPrompt: `${namespace}:option.3.selectPrompt`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.3.selected`,
|
text: `${namespace}:option.3.selected`,
|
||||||
@ -341,7 +341,7 @@ export const DelibirdyEncounter: MysteryEncounter = MysteryEncounterBuilder.with
|
|||||||
// If pokemon has valid item, it can be selected
|
// If pokemon has valid item, it can be selected
|
||||||
const meetsReqs = encounter.options[2].pokemonMeetsPrimaryRequirements(pokemon);
|
const meetsReqs = encounter.options[2].pokemonMeetsPrimaryRequirements(pokemon);
|
||||||
if (!meetsReqs) {
|
if (!meetsReqs) {
|
||||||
return getEncounterText(`${namespace}:invalid_selection`) ?? null;
|
return getEncounterText(`${namespace}:invalidSelection`) ?? null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
@ -43,7 +43,7 @@ export const DepartmentStoreSaleEncounter: MysteryEncounter = MysteryEncounterBu
|
|||||||
text: `${namespace}:intro`,
|
text: `${namespace}:intro`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: `${namespace}:intro_dialogue`,
|
text: `${namespace}:introDialogue`,
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
},
|
},
|
||||||
])
|
])
|
||||||
|
@ -56,7 +56,7 @@ export const FieldTripEncounter: MysteryEncounter = MysteryEncounterBuilder.with
|
|||||||
text: `${namespace}:intro`,
|
text: `${namespace}:intro`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: `${namespace}:intro_dialogue`,
|
text: `${namespace}:introDialogue`,
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
},
|
},
|
||||||
])
|
])
|
||||||
@ -70,7 +70,7 @@ export const FieldTripEncounter: MysteryEncounter = MysteryEncounterBuilder.with
|
|||||||
.withDialogue({
|
.withDialogue({
|
||||||
buttonLabel: `${namespace}:option.1.label`,
|
buttonLabel: `${namespace}:option.1.label`,
|
||||||
buttonTooltip: `${namespace}:option.1.tooltip`,
|
buttonTooltip: `${namespace}:option.1.tooltip`,
|
||||||
secondOptionPrompt: `${namespace}:second_option_prompt`,
|
secondOptionPrompt: `${namespace}:secondOptionPrompt`,
|
||||||
})
|
})
|
||||||
.withPreOptionPhase(async (): Promise<boolean> => {
|
.withPreOptionPhase(async (): Promise<boolean> => {
|
||||||
const encounter = globalScene.currentBattle.mysteryEncounter!;
|
const encounter = globalScene.currentBattle.mysteryEncounter!;
|
||||||
@ -118,7 +118,7 @@ export const FieldTripEncounter: MysteryEncounter = MysteryEncounterBuilder.with
|
|||||||
.withDialogue({
|
.withDialogue({
|
||||||
buttonLabel: `${namespace}:option.2.label`,
|
buttonLabel: `${namespace}:option.2.label`,
|
||||||
buttonTooltip: `${namespace}:option.2.tooltip`,
|
buttonTooltip: `${namespace}:option.2.tooltip`,
|
||||||
secondOptionPrompt: `${namespace}:second_option_prompt`,
|
secondOptionPrompt: `${namespace}:secondOptionPrompt`,
|
||||||
})
|
})
|
||||||
.withPreOptionPhase(async (): Promise<boolean> => {
|
.withPreOptionPhase(async (): Promise<boolean> => {
|
||||||
const encounter = globalScene.currentBattle.mysteryEncounter!;
|
const encounter = globalScene.currentBattle.mysteryEncounter!;
|
||||||
@ -166,7 +166,7 @@ export const FieldTripEncounter: MysteryEncounter = MysteryEncounterBuilder.with
|
|||||||
.withDialogue({
|
.withDialogue({
|
||||||
buttonLabel: `${namespace}:option.3.label`,
|
buttonLabel: `${namespace}:option.3.label`,
|
||||||
buttonTooltip: `${namespace}:option.3.tooltip`,
|
buttonTooltip: `${namespace}:option.3.tooltip`,
|
||||||
secondOptionPrompt: `${namespace}:second_option_prompt`,
|
secondOptionPrompt: `${namespace}:secondOptionPrompt`,
|
||||||
})
|
})
|
||||||
.withPreOptionPhase(async (): Promise<boolean> => {
|
.withPreOptionPhase(async (): Promise<boolean> => {
|
||||||
const encounter = globalScene.currentBattle.mysteryEncounter!;
|
const encounter = globalScene.currentBattle.mysteryEncounter!;
|
||||||
@ -226,7 +226,7 @@ function pokemonAndMoveChosen(pokemon: PlayerPokemon, move: PokemonMove, correct
|
|||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: `${namespace}:incorrect_exp`,
|
text: `${namespace}:incorrectExp`,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
setEncounterExp(
|
setEncounterExp(
|
||||||
@ -243,7 +243,7 @@ function pokemonAndMoveChosen(pokemon: PlayerPokemon, move: PokemonMove, correct
|
|||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: `${namespace}:correct_exp`,
|
text: `${namespace}:correctExp`,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
setEncounterExp([pokemon.id], 100);
|
setEncounterExp([pokemon.id], 100);
|
||||||
|
@ -247,7 +247,7 @@ export const FieryFalloutEncounter: MysteryEncounter = MysteryEncounterBuilder.w
|
|||||||
// Burn applied
|
// Burn applied
|
||||||
encounter.setDialogueToken("burnedPokemon", chosenPokemon.getNameToRender());
|
encounter.setDialogueToken("burnedPokemon", chosenPokemon.getNameToRender());
|
||||||
encounter.setDialogueToken("abilityName", allAbilities[AbilityId.HEATPROOF].name);
|
encounter.setDialogueToken("abilityName", allAbilities[AbilityId.HEATPROOF].name);
|
||||||
queueEncounterMessage(`${namespace}:option.2.target_burned`);
|
queueEncounterMessage(`${namespace}:option.2.targetBurned`);
|
||||||
|
|
||||||
// Also permanently change the burned Pokemon's ability to Heatproof
|
// Also permanently change the burned Pokemon's ability to Heatproof
|
||||||
applyAbilityOverrideToPokemon(chosenPokemon, AbilityId.HEATPROOF);
|
applyAbilityOverrideToPokemon(chosenPokemon, AbilityId.HEATPROOF);
|
||||||
@ -269,7 +269,7 @@ export const FieryFalloutEncounter: MysteryEncounter = MysteryEncounterBuilder.w
|
|||||||
.withDialogue({
|
.withDialogue({
|
||||||
buttonLabel: `${namespace}:option.3.label`,
|
buttonLabel: `${namespace}:option.3.label`,
|
||||||
buttonTooltip: `${namespace}:option.3.tooltip`,
|
buttonTooltip: `${namespace}:option.3.tooltip`,
|
||||||
disabledButtonTooltip: `${namespace}:option.3.disabled_tooltip`,
|
disabledButtonTooltip: `${namespace}:option.3.disabledTooltip`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.3.selected`,
|
text: `${namespace}:option.3.selected`,
|
||||||
@ -313,6 +313,6 @@ function giveLeadPokemonAttackTypeBoostItem() {
|
|||||||
const encounter = globalScene.currentBattle.mysteryEncounter!;
|
const encounter = globalScene.currentBattle.mysteryEncounter!;
|
||||||
encounter.setDialogueToken("itemName", boosterModifierType.name);
|
encounter.setDialogueToken("itemName", boosterModifierType.name);
|
||||||
encounter.setDialogueToken("leadPokemon", leadPokemon.getNameToRender());
|
encounter.setDialogueToken("leadPokemon", leadPokemon.getNameToRender());
|
||||||
queueEncounterMessage(`${namespace}:found_item`);
|
queueEncounterMessage(`${namespace}:foundItem`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -69,7 +69,7 @@ export const FightOrFlightEncounter: MysteryEncounter = MysteryEncounterBuilder.
|
|||||||
isBoss: true,
|
isBoss: true,
|
||||||
tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON],
|
tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON],
|
||||||
mysteryEncounterBattleEffects: (pokemon: Pokemon) => {
|
mysteryEncounterBattleEffects: (pokemon: Pokemon) => {
|
||||||
queueEncounterMessage(`${namespace}:option.1.stat_boost`);
|
queueEncounterMessage(`${namespace}:option.1.statBoost`);
|
||||||
// Randomly boost 1 stat 2 stages
|
// Randomly boost 1 stat 2 stages
|
||||||
// Cannot boost Spd, Acc, or Evasion
|
// Cannot boost Spd, Acc, or Evasion
|
||||||
globalScene.phaseManager.unshiftNew(
|
globalScene.phaseManager.unshiftNew(
|
||||||
@ -165,7 +165,7 @@ export const FightOrFlightEncounter: MysteryEncounter = MysteryEncounterBuilder.
|
|||||||
.withDialogue({
|
.withDialogue({
|
||||||
buttonLabel: `${namespace}:option.2.label`,
|
buttonLabel: `${namespace}:option.2.label`,
|
||||||
buttonTooltip: `${namespace}:option.2.tooltip`,
|
buttonTooltip: `${namespace}:option.2.tooltip`,
|
||||||
disabledButtonTooltip: `${namespace}:option.2.disabled_tooltip`,
|
disabledButtonTooltip: `${namespace}:option.2.disabledTooltip`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.2.selected`,
|
text: `${namespace}:option.2.selected`,
|
||||||
|
@ -78,7 +78,7 @@ export const FunAndGamesEncounter: MysteryEncounter = MysteryEncounterBuilder.wi
|
|||||||
.withIntroDialogue([
|
.withIntroDialogue([
|
||||||
{
|
{
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
text: `${namespace}:intro_dialogue`,
|
text: `${namespace}:introDialogue`,
|
||||||
},
|
},
|
||||||
])
|
])
|
||||||
.setLocalizationKey(`${namespace}`)
|
.setLocalizationKey(`${namespace}`)
|
||||||
@ -118,7 +118,7 @@ export const FunAndGamesEncounter: MysteryEncounter = MysteryEncounterBuilder.wi
|
|||||||
|
|
||||||
// Only Pokemon that are not KOed/legal can be selected
|
// Only Pokemon that are not KOed/legal can be selected
|
||||||
const selectableFilter = (pokemon: Pokemon) => {
|
const selectableFilter = (pokemon: Pokemon) => {
|
||||||
return isPokemonValidForEncounterOptionSelection(pokemon, `${namespace}:invalid_selection`);
|
return isPokemonValidForEncounterOptionSelection(pokemon, `${namespace}:invalidSelection`);
|
||||||
};
|
};
|
||||||
|
|
||||||
return selectPokemonForOption(onPokemonSelected, undefined, selectableFilter);
|
return selectPokemonForOption(onPokemonSelected, undefined, selectableFilter);
|
||||||
@ -132,7 +132,7 @@ export const FunAndGamesEncounter: MysteryEncounter = MysteryEncounterBuilder.wi
|
|||||||
const moneyCost = (encounter.options[0].requirements[0] as MoneyRequirement).requiredMoney;
|
const moneyCost = (encounter.options[0].requirements[0] as MoneyRequirement).requiredMoney;
|
||||||
updatePlayerMoney(-moneyCost, true, false);
|
updatePlayerMoney(-moneyCost, true, false);
|
||||||
await showEncounterText(
|
await showEncounterText(
|
||||||
i18next.t("mysteryEncounterMessages:paid_money", {
|
i18next.t("mysteryEncounterMessages:paidMoney", {
|
||||||
amount: moneyCost,
|
amount: moneyCost,
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
@ -284,25 +284,25 @@ function handleNextTurn() {
|
|||||||
guaranteedModifierTypeFuncs: [modifierTypes.MULTI_LENS],
|
guaranteedModifierTypeFuncs: [modifierTypes.MULTI_LENS],
|
||||||
fillRemaining: false,
|
fillRemaining: false,
|
||||||
});
|
});
|
||||||
resultMessageKey = `${namespace}:best_result`;
|
resultMessageKey = `${namespace}:bestResult`;
|
||||||
} else if (healthRatio < 0.15) {
|
} else if (healthRatio < 0.15) {
|
||||||
// 2nd prize
|
// 2nd prize
|
||||||
setEncounterRewards({
|
setEncounterRewards({
|
||||||
guaranteedModifierTypeFuncs: [modifierTypes.SCOPE_LENS],
|
guaranteedModifierTypeFuncs: [modifierTypes.SCOPE_LENS],
|
||||||
fillRemaining: false,
|
fillRemaining: false,
|
||||||
});
|
});
|
||||||
resultMessageKey = `${namespace}:great_result`;
|
resultMessageKey = `${namespace}:greatResult`;
|
||||||
} else if (healthRatio < 0.33) {
|
} else if (healthRatio < 0.33) {
|
||||||
// 3rd prize
|
// 3rd prize
|
||||||
setEncounterRewards({
|
setEncounterRewards({
|
||||||
guaranteedModifierTypeFuncs: [modifierTypes.WIDE_LENS],
|
guaranteedModifierTypeFuncs: [modifierTypes.WIDE_LENS],
|
||||||
fillRemaining: false,
|
fillRemaining: false,
|
||||||
});
|
});
|
||||||
resultMessageKey = `${namespace}:good_result`;
|
resultMessageKey = `${namespace}:goodResult`;
|
||||||
} else {
|
} else {
|
||||||
// No prize
|
// No prize
|
||||||
isHealPhase = true;
|
isHealPhase = true;
|
||||||
resultMessageKey = `${namespace}:bad_result`;
|
resultMessageKey = `${namespace}:badResult`;
|
||||||
}
|
}
|
||||||
|
|
||||||
// End the battle
|
// End the battle
|
||||||
@ -312,7 +312,7 @@ function handleNextTurn() {
|
|||||||
globalScene.currentBattle.mysteryEncounter!.doContinueEncounter = undefined;
|
globalScene.currentBattle.mysteryEncounter!.doContinueEncounter = undefined;
|
||||||
leaveEncounterWithoutBattle(isHealPhase);
|
leaveEncounterWithoutBattle(isHealPhase);
|
||||||
// Must end the TurnInit phase prematurely so battle phases aren't added to queue
|
// Must end the TurnInit phase prematurely so battle phases aren't added to queue
|
||||||
queueEncounterMessage(`${namespace}:end_game`);
|
queueEncounterMessage(`${namespace}:endGame`);
|
||||||
queueEncounterMessage(resultMessageKey);
|
queueEncounterMessage(resultMessageKey);
|
||||||
|
|
||||||
// Skip remainder of TurnInitPhase
|
// Skip remainder of TurnInitPhase
|
||||||
@ -320,9 +320,9 @@ function handleNextTurn() {
|
|||||||
}
|
}
|
||||||
if (encounter.misc.turnsRemaining < 3) {
|
if (encounter.misc.turnsRemaining < 3) {
|
||||||
// Display charging messages on turns that aren't the initial turn
|
// Display charging messages on turns that aren't the initial turn
|
||||||
queueEncounterMessage(`${namespace}:charging_continue`);
|
queueEncounterMessage(`${namespace}:chargingContinue`);
|
||||||
}
|
}
|
||||||
queueEncounterMessage(`${namespace}:turn_remaining_${encounter.misc.turnsRemaining}`);
|
queueEncounterMessage(`${namespace}:turnRemaining${encounter.misc.turnsRemaining}`);
|
||||||
encounter.misc.turnsRemaining--;
|
encounter.misc.turnsRemaining--;
|
||||||
|
|
||||||
// Don't skip remainder of TurnInitPhase
|
// Don't skip remainder of TurnInitPhase
|
||||||
|
@ -158,7 +158,7 @@ export const GlobalTradeSystemEncounter: MysteryEncounter = MysteryEncounterBuil
|
|||||||
.withDialogue({
|
.withDialogue({
|
||||||
buttonLabel: `${namespace}:option.1.label`,
|
buttonLabel: `${namespace}:option.1.label`,
|
||||||
buttonTooltip: `${namespace}:option.1.tooltip`,
|
buttonTooltip: `${namespace}:option.1.tooltip`,
|
||||||
secondOptionPrompt: `${namespace}:option.1.trade_options_prompt`,
|
secondOptionPrompt: `${namespace}:option.1.tradeOptionsPrompt`,
|
||||||
})
|
})
|
||||||
.withPreOptionPhase(async (): Promise<boolean> => {
|
.withPreOptionPhase(async (): Promise<boolean> => {
|
||||||
const encounter = globalScene.currentBattle.mysteryEncounter!;
|
const encounter = globalScene.currentBattle.mysteryEncounter!;
|
||||||
@ -248,7 +248,7 @@ export const GlobalTradeSystemEncounter: MysteryEncounter = MysteryEncounterBuil
|
|||||||
// Show the trade animation
|
// Show the trade animation
|
||||||
await showTradeBackground();
|
await showTradeBackground();
|
||||||
await doPokemonTradeSequence(tradedPokemon, newPlayerPokemon);
|
await doPokemonTradeSequence(tradedPokemon, newPlayerPokemon);
|
||||||
await showEncounterText(`${namespace}:trade_received`, null, 0, true, 4000);
|
await showEncounterText(`${namespace}:tradeReceived`, null, 0, true, 4000);
|
||||||
globalScene.playBgm(encounter.misc.bgmKey);
|
globalScene.playBgm(encounter.misc.bgmKey);
|
||||||
await addPokemonDataToDexAndValidateAchievements(newPlayerPokemon);
|
await addPokemonDataToDexAndValidateAchievements(newPlayerPokemon);
|
||||||
await hideTradeBackground();
|
await hideTradeBackground();
|
||||||
@ -369,7 +369,7 @@ export const GlobalTradeSystemEncounter: MysteryEncounter = MysteryEncounterBuil
|
|||||||
// Show the trade animation
|
// Show the trade animation
|
||||||
await showTradeBackground();
|
await showTradeBackground();
|
||||||
await doPokemonTradeSequence(tradedPokemon, newPlayerPokemon);
|
await doPokemonTradeSequence(tradedPokemon, newPlayerPokemon);
|
||||||
await showEncounterText(`${namespace}:trade_received`, null, 0, true, 4000);
|
await showEncounterText(`${namespace}:tradeReceived`, null, 0, true, 4000);
|
||||||
globalScene.playBgm(encounter.misc.bgmKey);
|
globalScene.playBgm(encounter.misc.bgmKey);
|
||||||
await addPokemonDataToDexAndValidateAchievements(newPlayerPokemon);
|
await addPokemonDataToDexAndValidateAchievements(newPlayerPokemon);
|
||||||
await hideTradeBackground();
|
await hideTradeBackground();
|
||||||
@ -384,7 +384,7 @@ export const GlobalTradeSystemEncounter: MysteryEncounter = MysteryEncounterBuil
|
|||||||
.withDialogue({
|
.withDialogue({
|
||||||
buttonLabel: `${namespace}:option.3.label`,
|
buttonLabel: `${namespace}:option.3.label`,
|
||||||
buttonTooltip: `${namespace}:option.3.tooltip`,
|
buttonTooltip: `${namespace}:option.3.tooltip`,
|
||||||
secondOptionPrompt: `${namespace}:option.3.trade_options_prompt`,
|
secondOptionPrompt: `${namespace}:option.3.tradeOptionsPrompt`,
|
||||||
})
|
})
|
||||||
.withPreOptionPhase(async (): Promise<boolean> => {
|
.withPreOptionPhase(async (): Promise<boolean> => {
|
||||||
const encounter = globalScene.currentBattle.mysteryEncounter!;
|
const encounter = globalScene.currentBattle.mysteryEncounter!;
|
||||||
@ -416,7 +416,7 @@ export const GlobalTradeSystemEncounter: MysteryEncounter = MysteryEncounterBuil
|
|||||||
return it.isTransferable;
|
return it.isTransferable;
|
||||||
}).length > 0;
|
}).length > 0;
|
||||||
if (!meetsReqs) {
|
if (!meetsReqs) {
|
||||||
return getEncounterText(`${namespace}:option.3.invalid_selection`) ?? null;
|
return getEncounterText(`${namespace}:option.3.invalidSelection`) ?? null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
@ -468,7 +468,7 @@ export const GlobalTradeSystemEncounter: MysteryEncounter = MysteryEncounterBuil
|
|||||||
// Generate a trainer name
|
// Generate a trainer name
|
||||||
const traderName = generateRandomTraderName();
|
const traderName = generateRandomTraderName();
|
||||||
encounter.setDialogueToken("tradeTrainerName", traderName.trim());
|
encounter.setDialogueToken("tradeTrainerName", traderName.trim());
|
||||||
await showEncounterText(`${namespace}:item_trade_selected`);
|
await showEncounterText(`${namespace}:itemTradeSelected`);
|
||||||
leaveEncounterWithoutBattle();
|
leaveEncounterWithoutBattle();
|
||||||
})
|
})
|
||||||
.build(),
|
.build(),
|
||||||
@ -740,10 +740,10 @@ function doPokemonTradeSequence(tradedPokemon: PlayerPokemon, receivedPokemon: P
|
|||||||
duration: 500,
|
duration: 500,
|
||||||
onComplete: async () => {
|
onComplete: async () => {
|
||||||
globalScene.fadeOutBgm(1000, false);
|
globalScene.fadeOutBgm(1000, false);
|
||||||
await showEncounterText(`${namespace}:pokemon_trade_selected`);
|
await showEncounterText(`${namespace}:pokemonTradeSelected`);
|
||||||
tradedPokemon.cry();
|
tradedPokemon.cry();
|
||||||
globalScene.playBgm("evolution");
|
globalScene.playBgm("evolution");
|
||||||
await showEncounterText(`${namespace}:pokemon_trade_goodbye`);
|
await showEncounterText(`${namespace}:pokemonTradeGoodbye`);
|
||||||
|
|
||||||
tradedPokeball.setAlpha(0);
|
tradedPokeball.setAlpha(0);
|
||||||
tradedPokeball.setVisible(true);
|
tradedPokeball.setVisible(true);
|
||||||
|
@ -63,9 +63,9 @@ export const LostAtSeaEncounter: MysteryEncounter = MysteryEncounterBuilder.with
|
|||||||
.withPokemonCanLearnMoveRequirement(OPTION_1_REQUIRED_MOVE)
|
.withPokemonCanLearnMoveRequirement(OPTION_1_REQUIRED_MOVE)
|
||||||
.withDialogue({
|
.withDialogue({
|
||||||
buttonLabel: `${namespace}:option.1.label`,
|
buttonLabel: `${namespace}:option.1.label`,
|
||||||
disabledButtonLabel: `${namespace}:option.1.label_disabled`,
|
disabledButtonLabel: `${namespace}:option.1.labelDisabled`,
|
||||||
buttonTooltip: `${namespace}:option.1.tooltip`,
|
buttonTooltip: `${namespace}:option.1.tooltip`,
|
||||||
disabledButtonTooltip: `${namespace}:option.1.tooltip_disabled`,
|
disabledButtonTooltip: `${namespace}:option.1.tooltipDisabled`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.1.selected`,
|
text: `${namespace}:option.1.selected`,
|
||||||
@ -81,9 +81,9 @@ export const LostAtSeaEncounter: MysteryEncounter = MysteryEncounterBuilder.with
|
|||||||
.withPokemonCanLearnMoveRequirement(OPTION_2_REQUIRED_MOVE)
|
.withPokemonCanLearnMoveRequirement(OPTION_2_REQUIRED_MOVE)
|
||||||
.withDialogue({
|
.withDialogue({
|
||||||
buttonLabel: `${namespace}:option.2.label`,
|
buttonLabel: `${namespace}:option.2.label`,
|
||||||
disabledButtonLabel: `${namespace}:option.2.label_disabled`,
|
disabledButtonLabel: `${namespace}:option.2.labelDisabled`,
|
||||||
buttonTooltip: `${namespace}:option.2.tooltip`,
|
buttonTooltip: `${namespace}:option.2.tooltip`,
|
||||||
disabledButtonTooltip: `${namespace}:option.2.tooltip_disabled`,
|
disabledButtonTooltip: `${namespace}:option.2.tooltipDisabled`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.2.selected`,
|
text: `${namespace}:option.2.selected`,
|
||||||
|
@ -58,7 +58,7 @@ export const PartTimerEncounter: MysteryEncounter = MysteryEncounterBuilder.with
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
text: `${namespace}:intro_dialogue`,
|
text: `${namespace}:introDialogue`,
|
||||||
},
|
},
|
||||||
])
|
])
|
||||||
.withOnInit(() => {
|
.withOnInit(() => {
|
||||||
@ -128,7 +128,7 @@ export const PartTimerEncounter: MysteryEncounter = MysteryEncounterBuilder.with
|
|||||||
|
|
||||||
// Only Pokemon non-KOd pokemon can be selected
|
// Only Pokemon non-KOd pokemon can be selected
|
||||||
const selectableFilter = (pokemon: Pokemon) => {
|
const selectableFilter = (pokemon: Pokemon) => {
|
||||||
return isPokemonValidForEncounterOptionSelection(pokemon, `${namespace}:invalid_selection`);
|
return isPokemonValidForEncounterOptionSelection(pokemon, `${namespace}:invalidSelection`);
|
||||||
};
|
};
|
||||||
|
|
||||||
return selectPokemonForOption(onPokemonSelected, undefined, selectableFilter);
|
return selectPokemonForOption(onPokemonSelected, undefined, selectableFilter);
|
||||||
@ -142,18 +142,18 @@ export const PartTimerEncounter: MysteryEncounter = MysteryEncounterBuilder.with
|
|||||||
|
|
||||||
// Give money and do dialogue
|
// Give money and do dialogue
|
||||||
if (moneyMultiplier > 2.5) {
|
if (moneyMultiplier > 2.5) {
|
||||||
await showEncounterDialogue(`${namespace}:job_complete_good`, `${namespace}:speaker`);
|
await showEncounterDialogue(`${namespace}:jobCompleteGood`, `${namespace}:speaker`);
|
||||||
} else {
|
} else {
|
||||||
await showEncounterDialogue(`${namespace}:job_complete_bad`, `${namespace}:speaker`);
|
await showEncounterDialogue(`${namespace}:jobCompleteBad`, `${namespace}:speaker`);
|
||||||
}
|
}
|
||||||
const moneyChange = globalScene.getWaveMoneyAmount(moneyMultiplier);
|
const moneyChange = globalScene.getWaveMoneyAmount(moneyMultiplier);
|
||||||
updatePlayerMoney(moneyChange, true, false);
|
updatePlayerMoney(moneyChange, true, false);
|
||||||
await showEncounterText(
|
await showEncounterText(
|
||||||
i18next.t("mysteryEncounterMessages:receive_money", {
|
i18next.t("mysteryEncounterMessages:receiveMoney", {
|
||||||
amount: moneyChange,
|
amount: moneyChange,
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
await showEncounterText(`${namespace}:pokemon_tired`);
|
await showEncounterText(`${namespace}:pokemonTired`);
|
||||||
|
|
||||||
setEncounterRewards({ fillRemaining: true });
|
setEncounterRewards({ fillRemaining: true });
|
||||||
leaveEncounterWithoutBattle();
|
leaveEncounterWithoutBattle();
|
||||||
@ -210,7 +210,7 @@ export const PartTimerEncounter: MysteryEncounter = MysteryEncounterBuilder.with
|
|||||||
|
|
||||||
// Only Pokemon non-KOd pokemon can be selected
|
// Only Pokemon non-KOd pokemon can be selected
|
||||||
const selectableFilter = (pokemon: Pokemon) => {
|
const selectableFilter = (pokemon: Pokemon) => {
|
||||||
return isPokemonValidForEncounterOptionSelection(pokemon, `${namespace}:invalid_selection`);
|
return isPokemonValidForEncounterOptionSelection(pokemon, `${namespace}:invalidSelection`);
|
||||||
};
|
};
|
||||||
|
|
||||||
return selectPokemonForOption(onPokemonSelected, undefined, selectableFilter);
|
return selectPokemonForOption(onPokemonSelected, undefined, selectableFilter);
|
||||||
@ -224,18 +224,18 @@ export const PartTimerEncounter: MysteryEncounter = MysteryEncounterBuilder.with
|
|||||||
|
|
||||||
// Give money and do dialogue
|
// Give money and do dialogue
|
||||||
if (moneyMultiplier > 2.5) {
|
if (moneyMultiplier > 2.5) {
|
||||||
await showEncounterDialogue(`${namespace}:job_complete_good`, `${namespace}:speaker`);
|
await showEncounterDialogue(`${namespace}:jobCompleteGood`, `${namespace}:speaker`);
|
||||||
} else {
|
} else {
|
||||||
await showEncounterDialogue(`${namespace}:job_complete_bad`, `${namespace}:speaker`);
|
await showEncounterDialogue(`${namespace}:jobCompleteBad`, `${namespace}:speaker`);
|
||||||
}
|
}
|
||||||
const moneyChange = globalScene.getWaveMoneyAmount(moneyMultiplier);
|
const moneyChange = globalScene.getWaveMoneyAmount(moneyMultiplier);
|
||||||
updatePlayerMoney(moneyChange, true, false);
|
updatePlayerMoney(moneyChange, true, false);
|
||||||
await showEncounterText(
|
await showEncounterText(
|
||||||
i18next.t("mysteryEncounterMessages:receive_money", {
|
i18next.t("mysteryEncounterMessages:receiveMoney", {
|
||||||
amount: moneyChange,
|
amount: moneyChange,
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
await showEncounterText(`${namespace}:pokemon_tired`);
|
await showEncounterText(`${namespace}:pokemonTired`);
|
||||||
|
|
||||||
setEncounterRewards({ fillRemaining: true });
|
setEncounterRewards({ fillRemaining: true });
|
||||||
leaveEncounterWithoutBattle();
|
leaveEncounterWithoutBattle();
|
||||||
@ -248,7 +248,7 @@ export const PartTimerEncounter: MysteryEncounter = MysteryEncounterBuilder.with
|
|||||||
.withDialogue({
|
.withDialogue({
|
||||||
buttonLabel: `${namespace}:option.3.label`,
|
buttonLabel: `${namespace}:option.3.label`,
|
||||||
buttonTooltip: `${namespace}:option.3.tooltip`,
|
buttonTooltip: `${namespace}:option.3.tooltip`,
|
||||||
disabledButtonTooltip: `${namespace}:option.3.disabled_tooltip`,
|
disabledButtonTooltip: `${namespace}:option.3.disabledTooltip`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.3.selected`,
|
text: `${namespace}:option.3.selected`,
|
||||||
@ -282,15 +282,15 @@ export const PartTimerEncounter: MysteryEncounter = MysteryEncounterBuilder.with
|
|||||||
await transitionMysteryEncounterIntroVisuals(false, false);
|
await transitionMysteryEncounterIntroVisuals(false, false);
|
||||||
|
|
||||||
// Give money and do dialogue
|
// Give money and do dialogue
|
||||||
await showEncounterDialogue(`${namespace}:job_complete_good`, `${namespace}:speaker`);
|
await showEncounterDialogue(`${namespace}:jobCompleteGood`, `${namespace}:speaker`);
|
||||||
const moneyChange = globalScene.getWaveMoneyAmount(2.5);
|
const moneyChange = globalScene.getWaveMoneyAmount(2.5);
|
||||||
updatePlayerMoney(moneyChange, true, false);
|
updatePlayerMoney(moneyChange, true, false);
|
||||||
await showEncounterText(
|
await showEncounterText(
|
||||||
i18next.t("mysteryEncounterMessages:receive_money", {
|
i18next.t("mysteryEncounterMessages:receiveMoney", {
|
||||||
amount: moneyChange,
|
amount: moneyChange,
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
await showEncounterText(`${namespace}:pokemon_tired`);
|
await showEncounterText(`${namespace}:pokemonTired`);
|
||||||
|
|
||||||
setEncounterRewards({ fillRemaining: true });
|
setEncounterRewards({ fillRemaining: true });
|
||||||
leaveEncounterWithoutBattle();
|
leaveEncounterWithoutBattle();
|
||||||
|
@ -205,7 +205,7 @@ const safariZoneGameOptions: MysteryEncounterOption[] = [
|
|||||||
// 80% chance to increase flee stage +1
|
// 80% chance to increase flee stage +1
|
||||||
const fleeChangeResult = tryChangeFleeStage(1, 8);
|
const fleeChangeResult = tryChangeFleeStage(1, 8);
|
||||||
if (!fleeChangeResult) {
|
if (!fleeChangeResult) {
|
||||||
await showEncounterText(getEncounterText(`${namespace}:safari.busy_eating`) ?? "", null, 1000, false);
|
await showEncounterText(getEncounterText(`${namespace}:safari.busyEating`) ?? "", null, 1000, false);
|
||||||
} else {
|
} else {
|
||||||
await showEncounterText(getEncounterText(`${namespace}:safari.eating`) ?? "", null, 1000, false);
|
await showEncounterText(getEncounterText(`${namespace}:safari.eating`) ?? "", null, 1000, false);
|
||||||
}
|
}
|
||||||
@ -233,7 +233,7 @@ const safariZoneGameOptions: MysteryEncounterOption[] = [
|
|||||||
// 80% chance to decrease catch stage -1
|
// 80% chance to decrease catch stage -1
|
||||||
const catchChangeResult = tryChangeCatchStage(-1, 8);
|
const catchChangeResult = tryChangeCatchStage(-1, 8);
|
||||||
if (!catchChangeResult) {
|
if (!catchChangeResult) {
|
||||||
await showEncounterText(getEncounterText(`${namespace}:safari.beside_itself_angry`) ?? "", null, 1000, false);
|
await showEncounterText(getEncounterText(`${namespace}:safari.besideItselfAngry`) ?? "", null, 1000, false);
|
||||||
} else {
|
} else {
|
||||||
await showEncounterText(getEncounterText(`${namespace}:safari.angry`) ?? "", null, 1000, false);
|
await showEncounterText(getEncounterText(`${namespace}:safari.angry`) ?? "", null, 1000, false);
|
||||||
}
|
}
|
||||||
@ -274,7 +274,7 @@ async function summonSafariPokemon() {
|
|||||||
const encounter = globalScene.currentBattle.mysteryEncounter!;
|
const encounter = globalScene.currentBattle.mysteryEncounter!;
|
||||||
// Message pokemon remaining
|
// Message pokemon remaining
|
||||||
encounter.setDialogueToken("remainingCount", encounter.misc.safariPokemonRemaining);
|
encounter.setDialogueToken("remainingCount", encounter.misc.safariPokemonRemaining);
|
||||||
globalScene.phaseManager.queueMessage(getEncounterText(`${namespace}:safari.remaining_count`) ?? "", null, true);
|
globalScene.phaseManager.queueMessage(getEncounterText(`${namespace}:safari.remainingCount`) ?? "", null, true);
|
||||||
|
|
||||||
// Generate pokemon using safariPokemonRemaining so they are always the same pokemon no matter how many turns are taken
|
// Generate pokemon using safariPokemonRemaining so they are always the same pokemon no matter how many turns are taken
|
||||||
// Safari pokemon roll twice on shiny and HA chances, but are otherwise normal
|
// Safari pokemon roll twice on shiny and HA chances, but are otherwise normal
|
||||||
|
@ -70,7 +70,7 @@ export const ShadyVitaminDealerEncounter: MysteryEncounter = MysteryEncounterBui
|
|||||||
text: `${namespace}:intro`,
|
text: `${namespace}:intro`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: `${namespace}:intro_dialogue`,
|
text: `${namespace}:introDialogue`,
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
},
|
},
|
||||||
])
|
])
|
||||||
@ -119,7 +119,7 @@ export const ShadyVitaminDealerEncounter: MysteryEncounter = MysteryEncounterBui
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (!encounter.pokemonMeetsPrimaryRequirements(pokemon)) {
|
if (!encounter.pokemonMeetsPrimaryRequirements(pokemon)) {
|
||||||
return getEncounterText(`${namespace}:invalid_selection`) ?? null;
|
return getEncounterText(`${namespace}:invalidSelection`) ?? null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
@ -155,7 +155,7 @@ export const ShadyVitaminDealerEncounter: MysteryEncounter = MysteryEncounterBui
|
|||||||
|
|
||||||
chosenPokemon.setCustomNature(newNature);
|
chosenPokemon.setCustomNature(newNature);
|
||||||
encounter.setDialogueToken("newNature", getNatureName(newNature));
|
encounter.setDialogueToken("newNature", getNatureName(newNature));
|
||||||
queueEncounterMessage(`${namespace}:cheap_side_effects`);
|
queueEncounterMessage(`${namespace}:cheapSideEffects`);
|
||||||
setEncounterExp([chosenPokemon.id], 100);
|
setEncounterExp([chosenPokemon.id], 100);
|
||||||
await chosenPokemon.updateInfo();
|
await chosenPokemon.updateInfo();
|
||||||
})
|
})
|
||||||
@ -193,7 +193,7 @@ export const ShadyVitaminDealerEncounter: MysteryEncounter = MysteryEncounterBui
|
|||||||
|
|
||||||
// Only Pokemon that can gain benefits are unfainted
|
// Only Pokemon that can gain benefits are unfainted
|
||||||
const selectableFilter = (pokemon: Pokemon) => {
|
const selectableFilter = (pokemon: Pokemon) => {
|
||||||
return isPokemonValidForEncounterOptionSelection(pokemon, `${namespace}:invalid_selection`);
|
return isPokemonValidForEncounterOptionSelection(pokemon, `${namespace}:invalidSelection`);
|
||||||
};
|
};
|
||||||
|
|
||||||
return selectPokemonForOption(onPokemonSelected, undefined, selectableFilter);
|
return selectPokemonForOption(onPokemonSelected, undefined, selectableFilter);
|
||||||
@ -215,7 +215,7 @@ export const ShadyVitaminDealerEncounter: MysteryEncounter = MysteryEncounterBui
|
|||||||
const encounter = globalScene.currentBattle.mysteryEncounter!;
|
const encounter = globalScene.currentBattle.mysteryEncounter!;
|
||||||
const chosenPokemon = encounter.misc.chosenPokemon;
|
const chosenPokemon = encounter.misc.chosenPokemon;
|
||||||
|
|
||||||
queueEncounterMessage(`${namespace}:no_bad_effects`);
|
queueEncounterMessage(`${namespace}:noBadEffects`);
|
||||||
setEncounterExp([chosenPokemon.id], 100);
|
setEncounterExp([chosenPokemon.id], 100);
|
||||||
|
|
||||||
await chosenPokemon.updateInfo();
|
await chosenPokemon.updateInfo();
|
||||||
|
@ -157,7 +157,7 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = MysteryEncounterBuil
|
|||||||
// Fall asleep waiting for Snorlax
|
// Fall asleep waiting for Snorlax
|
||||||
// Full heal party
|
// Full heal party
|
||||||
globalScene.phaseManager.unshiftNew("PartyHealPhase", true);
|
globalScene.phaseManager.unshiftNew("PartyHealPhase", true);
|
||||||
queueEncounterMessage(`${namespace}:option.2.rest_result`);
|
queueEncounterMessage(`${namespace}:option.2.restResult`);
|
||||||
leaveEncounterWithoutBattle();
|
leaveEncounterWithoutBattle();
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@ -167,7 +167,7 @@ export const SlumberingSnorlaxEncounter: MysteryEncounter = MysteryEncounterBuil
|
|||||||
.withDialogue({
|
.withDialogue({
|
||||||
buttonLabel: `${namespace}:option.3.label`,
|
buttonLabel: `${namespace}:option.3.label`,
|
||||||
buttonTooltip: `${namespace}:option.3.tooltip`,
|
buttonTooltip: `${namespace}:option.3.tooltip`,
|
||||||
disabledButtonTooltip: `${namespace}:option.3.disabled_tooltip`,
|
disabledButtonTooltip: `${namespace}:option.3.disabledTooltip`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.3.selected`,
|
text: `${namespace}:option.3.selected`,
|
||||||
|
@ -122,7 +122,7 @@ export const TeleportingHijinksEncounter: MysteryEncounter = MysteryEncounterBui
|
|||||||
.withDialogue({
|
.withDialogue({
|
||||||
buttonLabel: `${namespace}:option.2.label`,
|
buttonLabel: `${namespace}:option.2.label`,
|
||||||
buttonTooltip: `${namespace}:option.2.tooltip`,
|
buttonTooltip: `${namespace}:option.2.tooltip`,
|
||||||
disabledButtonTooltip: `${namespace}:option.2.disabled_tooltip`,
|
disabledButtonTooltip: `${namespace}:option.2.disabledTooltip`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.2.selected`,
|
text: `${namespace}:option.2.selected`,
|
||||||
@ -227,7 +227,7 @@ async function doBiomeTransitionDialogueAndBattleInit() {
|
|||||||
isBoss: true,
|
isBoss: true,
|
||||||
tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON],
|
tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON],
|
||||||
mysteryEncounterBattleEffects: (pokemon: Pokemon) => {
|
mysteryEncounterBattleEffects: (pokemon: Pokemon) => {
|
||||||
queueEncounterMessage(`${namespace}:boss_enraged`);
|
queueEncounterMessage(`${namespace}:bossEnraged`);
|
||||||
globalScene.phaseManager.unshiftNew(
|
globalScene.phaseManager.unshiftNew(
|
||||||
"StatStageChangePhase",
|
"StatStageChangePhase",
|
||||||
pokemon.getBattlerIndex(),
|
pokemon.getBattlerIndex(),
|
||||||
|
@ -139,7 +139,7 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = MysteryEncount
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
speaker: trainerNameKey,
|
speaker: trainerNameKey,
|
||||||
text: `${namespace}:intro_dialogue`,
|
text: `${namespace}:introDialogue`,
|
||||||
},
|
},
|
||||||
])
|
])
|
||||||
.withOnInit(() => {
|
.withOnInit(() => {
|
||||||
@ -189,13 +189,13 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = MysteryEncount
|
|||||||
|
|
||||||
// Dialogue and egg calcs for Pokemon 1
|
// Dialogue and egg calcs for Pokemon 1
|
||||||
const [pokemon1CommonEggs, pokemon1RareEggs] = calculateEggRewardsForPokemon(pokemon1);
|
const [pokemon1CommonEggs, pokemon1RareEggs] = calculateEggRewardsForPokemon(pokemon1);
|
||||||
let pokemon1Tooltip = getEncounterText(`${namespace}:option.1.tooltip_base`)!;
|
let pokemon1Tooltip = getEncounterText(`${namespace}:option.1.tooltipBase`)!;
|
||||||
if (pokemon1RareEggs > 0) {
|
if (pokemon1RareEggs > 0) {
|
||||||
const eggsText = i18next.t(`${namespace}:numEggs`, {
|
const eggsText = i18next.t(`${namespace}:numEggs`, {
|
||||||
count: pokemon1RareEggs,
|
count: pokemon1RareEggs,
|
||||||
rarity: i18next.t("egg:greatTier"),
|
rarity: i18next.t("egg:greatTier"),
|
||||||
});
|
});
|
||||||
pokemon1Tooltip += i18next.t(`${namespace}:eggs_tooltip`, {
|
pokemon1Tooltip += i18next.t(`${namespace}:eggsTooltip`, {
|
||||||
eggs: eggsText,
|
eggs: eggsText,
|
||||||
});
|
});
|
||||||
encounter.setDialogueToken("pokemon1RareEggs", eggsText);
|
encounter.setDialogueToken("pokemon1RareEggs", eggsText);
|
||||||
@ -205,7 +205,7 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = MysteryEncount
|
|||||||
count: pokemon1CommonEggs,
|
count: pokemon1CommonEggs,
|
||||||
rarity: i18next.t("egg:defaultTier"),
|
rarity: i18next.t("egg:defaultTier"),
|
||||||
});
|
});
|
||||||
pokemon1Tooltip += i18next.t(`${namespace}:eggs_tooltip`, {
|
pokemon1Tooltip += i18next.t(`${namespace}:eggsTooltip`, {
|
||||||
eggs: eggsText,
|
eggs: eggsText,
|
||||||
});
|
});
|
||||||
encounter.setDialogueToken("pokemon1CommonEggs", eggsText);
|
encounter.setDialogueToken("pokemon1CommonEggs", eggsText);
|
||||||
@ -214,13 +214,13 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = MysteryEncount
|
|||||||
|
|
||||||
// Dialogue and egg calcs for Pokemon 2
|
// Dialogue and egg calcs for Pokemon 2
|
||||||
const [pokemon2CommonEggs, pokemon2RareEggs] = calculateEggRewardsForPokemon(pokemon2);
|
const [pokemon2CommonEggs, pokemon2RareEggs] = calculateEggRewardsForPokemon(pokemon2);
|
||||||
let pokemon2Tooltip = getEncounterText(`${namespace}:option.2.tooltip_base`)!;
|
let pokemon2Tooltip = getEncounterText(`${namespace}:option.2.tooltipBase`)!;
|
||||||
if (pokemon2RareEggs > 0) {
|
if (pokemon2RareEggs > 0) {
|
||||||
const eggsText = i18next.t(`${namespace}:numEggs`, {
|
const eggsText = i18next.t(`${namespace}:numEggs`, {
|
||||||
count: pokemon2RareEggs,
|
count: pokemon2RareEggs,
|
||||||
rarity: i18next.t("egg:greatTier"),
|
rarity: i18next.t("egg:greatTier"),
|
||||||
});
|
});
|
||||||
pokemon2Tooltip += i18next.t(`${namespace}:eggs_tooltip`, {
|
pokemon2Tooltip += i18next.t(`${namespace}:eggsTooltip`, {
|
||||||
eggs: eggsText,
|
eggs: eggsText,
|
||||||
});
|
});
|
||||||
encounter.setDialogueToken("pokemon2RareEggs", eggsText);
|
encounter.setDialogueToken("pokemon2RareEggs", eggsText);
|
||||||
@ -230,7 +230,7 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = MysteryEncount
|
|||||||
count: pokemon2CommonEggs,
|
count: pokemon2CommonEggs,
|
||||||
rarity: i18next.t("egg:defaultTier"),
|
rarity: i18next.t("egg:defaultTier"),
|
||||||
});
|
});
|
||||||
pokemon2Tooltip += i18next.t(`${namespace}:eggs_tooltip`, {
|
pokemon2Tooltip += i18next.t(`${namespace}:eggsTooltip`, {
|
||||||
eggs: eggsText,
|
eggs: eggsText,
|
||||||
});
|
});
|
||||||
encounter.setDialogueToken("pokemon2CommonEggs", eggsText);
|
encounter.setDialogueToken("pokemon2CommonEggs", eggsText);
|
||||||
@ -239,13 +239,13 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = MysteryEncount
|
|||||||
|
|
||||||
// Dialogue and egg calcs for Pokemon 3
|
// Dialogue and egg calcs for Pokemon 3
|
||||||
const [pokemon3CommonEggs, pokemon3RareEggs] = calculateEggRewardsForPokemon(pokemon3);
|
const [pokemon3CommonEggs, pokemon3RareEggs] = calculateEggRewardsForPokemon(pokemon3);
|
||||||
let pokemon3Tooltip = getEncounterText(`${namespace}:option.3.tooltip_base`)!;
|
let pokemon3Tooltip = getEncounterText(`${namespace}:option.3.tooltipBase`)!;
|
||||||
if (pokemon3RareEggs > 0) {
|
if (pokemon3RareEggs > 0) {
|
||||||
const eggsText = i18next.t(`${namespace}:numEggs`, {
|
const eggsText = i18next.t(`${namespace}:numEggs`, {
|
||||||
count: pokemon3RareEggs,
|
count: pokemon3RareEggs,
|
||||||
rarity: i18next.t("egg:greatTier"),
|
rarity: i18next.t("egg:greatTier"),
|
||||||
});
|
});
|
||||||
pokemon3Tooltip += i18next.t(`${namespace}:eggs_tooltip`, {
|
pokemon3Tooltip += i18next.t(`${namespace}:eggsTooltip`, {
|
||||||
eggs: eggsText,
|
eggs: eggsText,
|
||||||
});
|
});
|
||||||
encounter.setDialogueToken("pokemon3RareEggs", eggsText);
|
encounter.setDialogueToken("pokemon3RareEggs", eggsText);
|
||||||
@ -255,7 +255,7 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = MysteryEncount
|
|||||||
count: pokemon3CommonEggs,
|
count: pokemon3CommonEggs,
|
||||||
rarity: i18next.t("egg:defaultTier"),
|
rarity: i18next.t("egg:defaultTier"),
|
||||||
});
|
});
|
||||||
pokemon3Tooltip += i18next.t(`${namespace}:eggs_tooltip`, {
|
pokemon3Tooltip += i18next.t(`${namespace}:eggsTooltip`, {
|
||||||
eggs: eggsText,
|
eggs: eggsText,
|
||||||
});
|
});
|
||||||
encounter.setDialogueToken("pokemon3CommonEggs", eggsText);
|
encounter.setDialogueToken("pokemon3CommonEggs", eggsText);
|
||||||
@ -321,14 +321,14 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = MysteryEncount
|
|||||||
];
|
];
|
||||||
if (encounter.dialogueTokens.hasOwnProperty("pokemon1CommonEggs")) {
|
if (encounter.dialogueTokens.hasOwnProperty("pokemon1CommonEggs")) {
|
||||||
encounter.dialogue.outro.push({
|
encounter.dialogue.outro.push({
|
||||||
text: i18next.t(`${namespace}:gained_eggs`, {
|
text: i18next.t(`${namespace}:gainedEggs`, {
|
||||||
numEggs: encounter.dialogueTokens["pokemon1CommonEggs"],
|
numEggs: encounter.dialogueTokens["pokemon1CommonEggs"],
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (encounter.dialogueTokens.hasOwnProperty("pokemon1RareEggs")) {
|
if (encounter.dialogueTokens.hasOwnProperty("pokemon1RareEggs")) {
|
||||||
encounter.dialogue.outro.push({
|
encounter.dialogue.outro.push({
|
||||||
text: i18next.t(`${namespace}:gained_eggs`, {
|
text: i18next.t(`${namespace}:gainedEggs`, {
|
||||||
numEggs: encounter.dialogueTokens["pokemon1RareEggs"],
|
numEggs: encounter.dialogueTokens["pokemon1RareEggs"],
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
@ -380,14 +380,14 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = MysteryEncount
|
|||||||
];
|
];
|
||||||
if (encounter.dialogueTokens.hasOwnProperty("pokemon2CommonEggs")) {
|
if (encounter.dialogueTokens.hasOwnProperty("pokemon2CommonEggs")) {
|
||||||
encounter.dialogue.outro.push({
|
encounter.dialogue.outro.push({
|
||||||
text: i18next.t(`${namespace}:gained_eggs`, {
|
text: i18next.t(`${namespace}:gainedEggs`, {
|
||||||
numEggs: encounter.dialogueTokens["pokemon2CommonEggs"],
|
numEggs: encounter.dialogueTokens["pokemon2CommonEggs"],
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (encounter.dialogueTokens.hasOwnProperty("pokemon2RareEggs")) {
|
if (encounter.dialogueTokens.hasOwnProperty("pokemon2RareEggs")) {
|
||||||
encounter.dialogue.outro.push({
|
encounter.dialogue.outro.push({
|
||||||
text: i18next.t(`${namespace}:gained_eggs`, {
|
text: i18next.t(`${namespace}:gainedEggs`, {
|
||||||
numEggs: encounter.dialogueTokens["pokemon2RareEggs"],
|
numEggs: encounter.dialogueTokens["pokemon2RareEggs"],
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
@ -439,14 +439,14 @@ export const TheExpertPokemonBreederEncounter: MysteryEncounter = MysteryEncount
|
|||||||
];
|
];
|
||||||
if (encounter.dialogueTokens.hasOwnProperty("pokemon3CommonEggs")) {
|
if (encounter.dialogueTokens.hasOwnProperty("pokemon3CommonEggs")) {
|
||||||
encounter.dialogue.outro.push({
|
encounter.dialogue.outro.push({
|
||||||
text: i18next.t(`${namespace}:gained_eggs`, {
|
text: i18next.t(`${namespace}:gainedEggs`, {
|
||||||
numEggs: encounter.dialogueTokens["pokemon3CommonEggs"],
|
numEggs: encounter.dialogueTokens["pokemon3CommonEggs"],
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (encounter.dialogueTokens.hasOwnProperty("pokemon3RareEggs")) {
|
if (encounter.dialogueTokens.hasOwnProperty("pokemon3RareEggs")) {
|
||||||
encounter.dialogue.outro.push({
|
encounter.dialogue.outro.push({
|
||||||
text: i18next.t(`${namespace}:gained_eggs`, {
|
text: i18next.t(`${namespace}:gainedEggs`, {
|
||||||
numEggs: encounter.dialogueTokens["pokemon3RareEggs"],
|
numEggs: encounter.dialogueTokens["pokemon3RareEggs"],
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
@ -482,7 +482,7 @@ function getPartyConfig(): EnemyPartyConfig {
|
|||||||
trainerType: TrainerType.EXPERT_POKEMON_BREEDER,
|
trainerType: TrainerType.EXPERT_POKEMON_BREEDER,
|
||||||
pokemonConfigs: [
|
pokemonConfigs: [
|
||||||
{
|
{
|
||||||
nickname: i18next.t(`${namespace}:cleffa_1_nickname`, {
|
nickname: i18next.t(`${namespace}:cleffa1Nickname`, {
|
||||||
speciesName: getPokemonSpecies(cleffaSpecies).getName(),
|
speciesName: getPokemonSpecies(cleffaSpecies).getName(),
|
||||||
}),
|
}),
|
||||||
species: getPokemonSpecies(cleffaSpecies),
|
species: getPokemonSpecies(cleffaSpecies),
|
||||||
@ -501,7 +501,7 @@ function getPartyConfig(): EnemyPartyConfig {
|
|||||||
// All 3 members always Cleffa line, but different configs
|
// All 3 members always Cleffa line, but different configs
|
||||||
baseConfig.pokemonConfigs!.push(
|
baseConfig.pokemonConfigs!.push(
|
||||||
{
|
{
|
||||||
nickname: i18next.t(`${namespace}:cleffa_2_nickname`, {
|
nickname: i18next.t(`${namespace}:cleffa2Nickname`, {
|
||||||
speciesName: getPokemonSpecies(cleffaSpecies).getName(),
|
speciesName: getPokemonSpecies(cleffaSpecies).getName(),
|
||||||
}),
|
}),
|
||||||
species: getPokemonSpecies(cleffaSpecies),
|
species: getPokemonSpecies(cleffaSpecies),
|
||||||
@ -514,7 +514,7 @@ function getPartyConfig(): EnemyPartyConfig {
|
|||||||
ivs: [31, 31, 31, 31, 31, 31],
|
ivs: [31, 31, 31, 31, 31, 31],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
nickname: i18next.t(`${namespace}:cleffa_3_nickname`, {
|
nickname: i18next.t(`${namespace}:cleffa3Nickname`, {
|
||||||
speciesName: getPokemonSpecies(cleffaSpecies).getName(),
|
speciesName: getPokemonSpecies(cleffaSpecies).getName(),
|
||||||
}),
|
}),
|
||||||
species: getPokemonSpecies(cleffaSpecies),
|
species: getPokemonSpecies(cleffaSpecies),
|
||||||
@ -647,7 +647,7 @@ function onGameOver() {
|
|||||||
encounter.dialogue.outro = [
|
encounter.dialogue.outro = [
|
||||||
{
|
{
|
||||||
speaker: trainerNameKey,
|
speaker: trainerNameKey,
|
||||||
text: `${namespace}:outro_failed`,
|
text: `${namespace}:outroFailed`,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@ -66,7 +66,7 @@ export const ThePokemonSalesmanEncounter: MysteryEncounter = MysteryEncounterBui
|
|||||||
text: `${namespace}:intro`,
|
text: `${namespace}:intro`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: `${namespace}:intro_dialogue`,
|
text: `${namespace}:introDialogue`,
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
},
|
},
|
||||||
])
|
])
|
||||||
@ -178,8 +178,8 @@ export const ThePokemonSalesmanEncounter: MysteryEncounter = MysteryEncounterBui
|
|||||||
// Always max price for shiny (flip HA back to normal), and add special messaging
|
// Always max price for shiny (flip HA back to normal), and add special messaging
|
||||||
priceMultiplier = MAX_POKEMON_PRICE_MULTIPLIER;
|
priceMultiplier = MAX_POKEMON_PRICE_MULTIPLIER;
|
||||||
pokemon.abilityIndex = 0;
|
pokemon.abilityIndex = 0;
|
||||||
encounter.dialogue.encounterOptionsDialogue!.description = `${namespace}:description_shiny`;
|
encounter.dialogue.encounterOptionsDialogue!.description = `${namespace}:descriptionShiny`;
|
||||||
encounter.options[0].dialogue!.buttonTooltip = `${namespace}:option.1.tooltip_shiny`;
|
encounter.options[0].dialogue!.buttonTooltip = `${namespace}:option.1.tooltipShiny`;
|
||||||
}
|
}
|
||||||
const price = globalScene.getWaveMoneyAmount(priceMultiplier);
|
const price = globalScene.getWaveMoneyAmount(priceMultiplier);
|
||||||
encounter.setDialogueToken("purchasePokemon", pokemon.getNameToRender());
|
encounter.setDialogueToken("purchasePokemon", pokemon.getNameToRender());
|
||||||
@ -202,7 +202,7 @@ export const ThePokemonSalesmanEncounter: MysteryEncounter = MysteryEncounterBui
|
|||||||
buttonTooltip: `${namespace}:option.1.tooltip`,
|
buttonTooltip: `${namespace}:option.1.tooltip`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.1.selected_message`,
|
text: `${namespace}:option.1.selectedMessage`,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
@ -215,7 +215,7 @@ export const ThePokemonSalesmanEncounter: MysteryEncounter = MysteryEncounterBui
|
|||||||
updatePlayerMoney(-price, true, false);
|
updatePlayerMoney(-price, true, false);
|
||||||
|
|
||||||
// Show dialogue
|
// Show dialogue
|
||||||
await showEncounterDialogue(`${namespace}:option.1.selected_dialogue`, `${namespace}:speaker`);
|
await showEncounterDialogue(`${namespace}:option.1.selectedDialogue`, `${namespace}:speaker`);
|
||||||
await transitionMysteryEncounterIntroVisuals();
|
await transitionMysteryEncounterIntroVisuals();
|
||||||
|
|
||||||
// "Catch" purchased pokemon
|
// "Catch" purchased pokemon
|
||||||
|
@ -115,7 +115,7 @@ export const TheStrongStuffEncounter: MysteryEncounter = MysteryEncounterBuilder
|
|||||||
],
|
],
|
||||||
tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON],
|
tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON],
|
||||||
mysteryEncounterBattleEffects: (pokemon: Pokemon) => {
|
mysteryEncounterBattleEffects: (pokemon: Pokemon) => {
|
||||||
queueEncounterMessage(`${namespace}:option.2.stat_boost`);
|
queueEncounterMessage(`${namespace}:option.2.statBoost`);
|
||||||
globalScene.phaseManager.unshiftNew(
|
globalScene.phaseManager.unshiftNew(
|
||||||
"StatStageChangePhase",
|
"StatStageChangePhase",
|
||||||
pokemon.getBattlerIndex(),
|
pokemon.getBattlerIndex(),
|
||||||
@ -181,7 +181,7 @@ export const TheStrongStuffEncounter: MysteryEncounter = MysteryEncounterBuilder
|
|||||||
|
|
||||||
encounter.setDialogueToken("reductionValue", HIGH_BST_REDUCTION_VALUE.toString());
|
encounter.setDialogueToken("reductionValue", HIGH_BST_REDUCTION_VALUE.toString());
|
||||||
encounter.setDialogueToken("increaseValue", BST_INCREASE_VALUE.toString());
|
encounter.setDialogueToken("increaseValue", BST_INCREASE_VALUE.toString());
|
||||||
await showEncounterText(`${namespace}:option.1.selected_2`, null, undefined, true);
|
await showEncounterText(`${namespace}:option.1.selected2`, null, undefined, true);
|
||||||
|
|
||||||
encounter.dialogue.outro = [
|
encounter.dialogue.outro = [
|
||||||
{
|
{
|
||||||
|
@ -87,7 +87,7 @@ export const TheWinstrateChallengeEncounter: MysteryEncounter = MysteryEncounter
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
text: `${namespace}:intro_dialogue`,
|
text: `${namespace}:introDialogue`,
|
||||||
},
|
},
|
||||||
])
|
])
|
||||||
.withAutoHideIntroVisuals(false)
|
.withAutoHideIntroVisuals(false)
|
||||||
@ -163,7 +163,7 @@ async function spawnNextTrainerOrEndEncounter() {
|
|||||||
globalScene.playSound("item_fanfare");
|
globalScene.playSound("item_fanfare");
|
||||||
await showEncounterText(i18next.t("battle:rewardGain", { modifierName: newModifier?.type.name }));
|
await showEncounterText(i18next.t("battle:rewardGain", { modifierName: newModifier?.type.name }));
|
||||||
|
|
||||||
await showEncounterDialogue(`${namespace}:victory_2`, `${namespace}:speaker`);
|
await showEncounterDialogue(`${namespace}:victory2`, `${namespace}:speaker`);
|
||||||
globalScene.ui.clearText(); // Clears "Winstrate" title from screen as rewards get animated in
|
globalScene.ui.clearText(); // Clears "Winstrate" title from screen as rewards get animated in
|
||||||
const machoBrace = generateModifierTypeOption(modifierTypes.MYSTERY_ENCOUNTER_MACHO_BRACE)!;
|
const machoBrace = generateModifierTypeOption(modifierTypes.MYSTERY_ENCOUNTER_MACHO_BRACE)!;
|
||||||
machoBrace.type.tier = ModifierTier.MASTER;
|
machoBrace.type.tier = ModifierTier.MASTER;
|
||||||
|
@ -90,7 +90,7 @@ export const TrainingSessionEncounter: MysteryEncounter = MysteryEncounterBuilde
|
|||||||
|
|
||||||
// Only Pokemon that are not KOed/legal can be trained
|
// Only Pokemon that are not KOed/legal can be trained
|
||||||
const selectableFilter = (pokemon: Pokemon) => {
|
const selectableFilter = (pokemon: Pokemon) => {
|
||||||
return isPokemonValidForEncounterOptionSelection(pokemon, `${namespace}:invalid_selection`);
|
return isPokemonValidForEncounterOptionSelection(pokemon, `${namespace}:invalidSelection`);
|
||||||
};
|
};
|
||||||
|
|
||||||
return selectPokemonForOption(onPokemonSelected, undefined, selectableFilter);
|
return selectPokemonForOption(onPokemonSelected, undefined, selectableFilter);
|
||||||
@ -174,7 +174,7 @@ export const TrainingSessionEncounter: MysteryEncounter = MysteryEncounterBuilde
|
|||||||
.withDialogue({
|
.withDialogue({
|
||||||
buttonLabel: `${namespace}:option.2.label`,
|
buttonLabel: `${namespace}:option.2.label`,
|
||||||
buttonTooltip: `${namespace}:option.2.tooltip`,
|
buttonTooltip: `${namespace}:option.2.tooltip`,
|
||||||
secondOptionPrompt: `${namespace}:option.2.select_prompt`,
|
secondOptionPrompt: `${namespace}:option.2.selectPrompt`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.selected`,
|
text: `${namespace}:option.selected`,
|
||||||
@ -205,7 +205,7 @@ export const TrainingSessionEncounter: MysteryEncounter = MysteryEncounterBuilde
|
|||||||
|
|
||||||
// Only Pokemon that are not KOed/legal can be trained
|
// Only Pokemon that are not KOed/legal can be trained
|
||||||
const selectableFilter = (pokemon: Pokemon) => {
|
const selectableFilter = (pokemon: Pokemon) => {
|
||||||
return isPokemonValidForEncounterOptionSelection(pokemon, `${namespace}:invalid_selection`);
|
return isPokemonValidForEncounterOptionSelection(pokemon, `${namespace}:invalidSelection`);
|
||||||
};
|
};
|
||||||
|
|
||||||
return selectPokemonForOption(onPokemonSelected, undefined, selectableFilter);
|
return selectPokemonForOption(onPokemonSelected, undefined, selectableFilter);
|
||||||
@ -248,7 +248,7 @@ export const TrainingSessionEncounter: MysteryEncounter = MysteryEncounterBuilde
|
|||||||
.withDialogue({
|
.withDialogue({
|
||||||
buttonLabel: `${namespace}:option.3.label`,
|
buttonLabel: `${namespace}:option.3.label`,
|
||||||
buttonTooltip: `${namespace}:option.3.tooltip`,
|
buttonTooltip: `${namespace}:option.3.tooltip`,
|
||||||
secondOptionPrompt: `${namespace}:option.3.select_prompt`,
|
secondOptionPrompt: `${namespace}:option.3.selectPrompt`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.selected`,
|
text: `${namespace}:option.selected`,
|
||||||
@ -295,7 +295,7 @@ export const TrainingSessionEncounter: MysteryEncounter = MysteryEncounterBuilde
|
|||||||
|
|
||||||
// Only Pokemon that are not KOed/legal can be trained
|
// Only Pokemon that are not KOed/legal can be trained
|
||||||
const selectableFilter = (pokemon: Pokemon) => {
|
const selectableFilter = (pokemon: Pokemon) => {
|
||||||
return isPokemonValidForEncounterOptionSelection(pokemon, `${namespace}:invalid_selection`);
|
return isPokemonValidForEncounterOptionSelection(pokemon, `${namespace}:invalidSelection`);
|
||||||
};
|
};
|
||||||
|
|
||||||
return selectPokemonForOption(onPokemonSelected, undefined, selectableFilter);
|
return selectPokemonForOption(onPokemonSelected, undefined, selectableFilter);
|
||||||
|
@ -194,7 +194,7 @@ export const TrashToTreasureEncounter: MysteryEncounter = MysteryEncounterBuilde
|
|||||||
.withOptionPhase(async () => {
|
.withOptionPhase(async () => {
|
||||||
// Investigate garbage, battle Gmax Garbodor
|
// Investigate garbage, battle Gmax Garbodor
|
||||||
globalScene.setFieldScale(0.75);
|
globalScene.setFieldScale(0.75);
|
||||||
await showEncounterText(`${namespace}:option.2.selected_2`);
|
await showEncounterText(`${namespace}:option.2.selected2`);
|
||||||
await transitionMysteryEncounterIntroVisuals();
|
await transitionMysteryEncounterIntroVisuals();
|
||||||
|
|
||||||
const encounter = globalScene.currentBattle.mysteryEncounter!;
|
const encounter = globalScene.currentBattle.mysteryEncounter!;
|
||||||
|
@ -97,7 +97,7 @@ export const UncommonBreedEncounter: MysteryEncounter = MysteryEncounterBuilder.
|
|||||||
isBoss: false,
|
isBoss: false,
|
||||||
tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON],
|
tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON],
|
||||||
mysteryEncounterBattleEffects: (pokemon: Pokemon) => {
|
mysteryEncounterBattleEffects: (pokemon: Pokemon) => {
|
||||||
queueEncounterMessage(`${namespace}:option.1.stat_boost`);
|
queueEncounterMessage(`${namespace}:option.1.statBoost`);
|
||||||
globalScene.phaseManager.unshiftNew(
|
globalScene.phaseManager.unshiftNew(
|
||||||
"StatStageChangePhase",
|
"StatStageChangePhase",
|
||||||
pokemon.getBattlerIndex(),
|
pokemon.getBattlerIndex(),
|
||||||
@ -191,7 +191,7 @@ export const UncommonBreedEncounter: MysteryEncounter = MysteryEncounterBuilder.
|
|||||||
.withDialogue({
|
.withDialogue({
|
||||||
buttonLabel: `${namespace}:option.2.label`,
|
buttonLabel: `${namespace}:option.2.label`,
|
||||||
buttonTooltip: `${namespace}:option.2.tooltip`,
|
buttonTooltip: `${namespace}:option.2.tooltip`,
|
||||||
disabledButtonTooltip: `${namespace}:option.2.disabled_tooltip`,
|
disabledButtonTooltip: `${namespace}:option.2.disabledTooltip`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.2.selected`,
|
text: `${namespace}:option.2.selected`,
|
||||||
@ -236,7 +236,7 @@ export const UncommonBreedEncounter: MysteryEncounter = MysteryEncounterBuilder.
|
|||||||
.withDialogue({
|
.withDialogue({
|
||||||
buttonLabel: `${namespace}:option.3.label`,
|
buttonLabel: `${namespace}:option.3.label`,
|
||||||
buttonTooltip: `${namespace}:option.3.tooltip`,
|
buttonTooltip: `${namespace}:option.3.tooltip`,
|
||||||
disabledButtonTooltip: `${namespace}:option.3.disabled_tooltip`,
|
disabledButtonTooltip: `${namespace}:option.3.disabledTooltip`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.3.selected`,
|
text: `${namespace}:option.3.selected`,
|
||||||
|
@ -143,7 +143,7 @@ export const WeirdDreamEncounter: MysteryEncounter = MysteryEncounterBuilder.wit
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
text: `${namespace}:intro_dialogue`,
|
text: `${namespace}:introDialogue`,
|
||||||
},
|
},
|
||||||
])
|
])
|
||||||
.setLocalizationKey(`${namespace}`)
|
.setLocalizationKey(`${namespace}`)
|
||||||
@ -216,7 +216,7 @@ export const WeirdDreamEncounter: MysteryEncounter = MysteryEncounterBuilder.wit
|
|||||||
await cutsceneDialoguePromise;
|
await cutsceneDialoguePromise;
|
||||||
|
|
||||||
doHideDreamBackground();
|
doHideDreamBackground();
|
||||||
await showEncounterText(`${namespace}:option.1.dream_complete`);
|
await showEncounterText(`${namespace}:option.1.dreamComplete`);
|
||||||
|
|
||||||
await doNewTeamPostProcess(transformations);
|
await doNewTeamPostProcess(transformations);
|
||||||
setEncounterRewards({
|
setEncounterRewards({
|
||||||
@ -329,7 +329,7 @@ export const WeirdDreamEncounter: MysteryEncounter = MysteryEncounterBuilder.wit
|
|||||||
onBeforeRewards,
|
onBeforeRewards,
|
||||||
);
|
);
|
||||||
|
|
||||||
await showEncounterText(`${namespace}:option.2.selected_2`, null, undefined, true);
|
await showEncounterText(`${namespace}:option.2.selected2`, null, undefined, true);
|
||||||
await initBattleWithEnemyConfig(enemyPartyConfig);
|
await initBattleWithEnemyConfig(enemyPartyConfig);
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
@ -467,7 +467,7 @@ export function updatePlayerMoney(changeValue: number, playSound = true, showMes
|
|||||||
if (showMessage) {
|
if (showMessage) {
|
||||||
if (changeValue < 0) {
|
if (changeValue < 0) {
|
||||||
globalScene.phaseManager.queueMessage(
|
globalScene.phaseManager.queueMessage(
|
||||||
i18next.t("mysteryEncounterMessages:paid_money", {
|
i18next.t("mysteryEncounterMessages:paidMoney", {
|
||||||
amount: -changeValue,
|
amount: -changeValue,
|
||||||
}),
|
}),
|
||||||
null,
|
null,
|
||||||
@ -475,7 +475,7 @@ export function updatePlayerMoney(changeValue: number, playSound = true, showMes
|
|||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
globalScene.phaseManager.queueMessage(
|
globalScene.phaseManager.queueMessage(
|
||||||
i18next.t("mysteryEncounterMessages:receive_money", {
|
i18next.t("mysteryEncounterMessages:receiveMoney", {
|
||||||
amount: changeValue,
|
amount: changeValue,
|
||||||
}),
|
}),
|
||||||
null,
|
null,
|
||||||
@ -587,7 +587,7 @@ export function selectPokemonForOption(
|
|||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
onHover: () => {
|
onHover: () => {
|
||||||
showEncounterText(i18next.t("mysteryEncounterMessages:cancel_option"), 0, 0, false);
|
showEncounterText(i18next.t("mysteryEncounterMessages:cancelOption"), 0, 0, false);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -720,7 +720,7 @@ export function selectOptionThenPokemon(
|
|||||||
if (onHoverOverCancelOption) {
|
if (onHoverOverCancelOption) {
|
||||||
onHoverOverCancelOption();
|
onHoverOverCancelOption();
|
||||||
}
|
}
|
||||||
showEncounterText(i18next.t("mysteryEncounterMessages:cancel_option"), 0, 0, false);
|
showEncounterText(i18next.t("mysteryEncounterMessages:cancelOption"), 0, 0, false);
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ import { EFFECTIVE_STATS, getShortenedStatKey, Stat } from "#enums/stat";
|
|||||||
import { TextStyle } from "#enums/text-style";
|
import { TextStyle } from "#enums/text-style";
|
||||||
import { UiTheme } from "#enums/ui-theme";
|
import { UiTheme } from "#enums/ui-theme";
|
||||||
import { getBBCodeFrag } from "#ui/text";
|
import { getBBCodeFrag } from "#ui/text";
|
||||||
import { toTitleCase } from "#utils/strings";
|
import { toCamelCase } from "#utils/strings";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
|
|
||||||
export function getNatureName(
|
export function getNatureName(
|
||||||
@ -13,7 +13,7 @@ export function getNatureName(
|
|||||||
ignoreBBCode = false,
|
ignoreBBCode = false,
|
||||||
uiTheme: UiTheme = UiTheme.DEFAULT,
|
uiTheme: UiTheme = UiTheme.DEFAULT,
|
||||||
): string {
|
): string {
|
||||||
let ret = toTitleCase(Nature[nature]);
|
let ret = toCamelCase(Nature[nature]);
|
||||||
//Translating nature
|
//Translating nature
|
||||||
if (i18next.exists(`nature:${ret}`)) {
|
if (i18next.exists(`nature:${ret}`)) {
|
||||||
ret = i18next.t(`nature:${ret}` as any);
|
ret = i18next.t(`nature:${ret}` as any);
|
||||||
|
@ -30,7 +30,7 @@ export abstract class SpeciesFormChangeTrigger {
|
|||||||
export class SpeciesFormChangeManualTrigger extends SpeciesFormChangeTrigger {}
|
export class SpeciesFormChangeManualTrigger extends SpeciesFormChangeTrigger {}
|
||||||
|
|
||||||
export class SpeciesFormChangeAbilityTrigger extends SpeciesFormChangeTrigger {
|
export class SpeciesFormChangeAbilityTrigger extends SpeciesFormChangeTrigger {
|
||||||
public description: string = i18next.t("pokemonEvolutions:Forms.ability");
|
public description: string = i18next.t("pokemonEvolutions:forms.ability");
|
||||||
}
|
}
|
||||||
|
|
||||||
export class SpeciesFormChangeCompoundTrigger {
|
export class SpeciesFormChangeCompoundTrigger {
|
||||||
@ -69,10 +69,10 @@ export class SpeciesFormChangeItemTrigger extends SpeciesFormChangeTrigger {
|
|||||||
this.item = item;
|
this.item = item;
|
||||||
this.active = active;
|
this.active = active;
|
||||||
this.description = this.active
|
this.description = this.active
|
||||||
? i18next.t("pokemonEvolutions:Forms.item", {
|
? i18next.t("pokemonEvolutions:forms.item", {
|
||||||
item: i18next.t(`modifierType:FormChangeItem.${FormChangeItem[this.item]}`),
|
item: i18next.t(`modifierType:FormChangeItem.${FormChangeItem[this.item]}`),
|
||||||
})
|
})
|
||||||
: i18next.t("pokemonEvolutions:Forms.deactivateItem", {
|
: i18next.t("pokemonEvolutions:forms.deactivateItem", {
|
||||||
item: i18next.t(`modifierType:FormChangeItem.${FormChangeItem[this.item]}`),
|
item: i18next.t(`modifierType:FormChangeItem.${FormChangeItem[this.item]}`),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -97,7 +97,7 @@ export class SpeciesFormChangeTimeOfDayTrigger extends SpeciesFormChangeTrigger
|
|||||||
constructor(...timesOfDay: TimeOfDay[]) {
|
constructor(...timesOfDay: TimeOfDay[]) {
|
||||||
super();
|
super();
|
||||||
this.timesOfDay = timesOfDay;
|
this.timesOfDay = timesOfDay;
|
||||||
this.description = i18next.t("pokemonEvolutions:Forms.timeOfDay");
|
this.description = i18next.t("pokemonEvolutions:orms.timeOfDay");
|
||||||
}
|
}
|
||||||
|
|
||||||
canChange(_pokemon: Pokemon): boolean {
|
canChange(_pokemon: Pokemon): boolean {
|
||||||
@ -111,8 +111,8 @@ export class SpeciesFormChangeActiveTrigger extends SpeciesFormChangeTrigger {
|
|||||||
super();
|
super();
|
||||||
this.active = active;
|
this.active = active;
|
||||||
this.description = this.active
|
this.description = this.active
|
||||||
? i18next.t("pokemonEvolutions:Forms.enter")
|
? i18next.t("pokemonEvolutions:forms.enter")
|
||||||
: i18next.t("pokemonEvolutions:Forms.leave");
|
: i18next.t("pokemonEvolutions:forms.leave");
|
||||||
}
|
}
|
||||||
|
|
||||||
canChange(pokemon: Pokemon): boolean {
|
canChange(pokemon: Pokemon): boolean {
|
||||||
@ -128,7 +128,7 @@ export class SpeciesFormChangeStatusEffectTrigger extends SpeciesFormChangeTrigg
|
|||||||
super();
|
super();
|
||||||
this.statusEffects = coerceArray(statusEffects);
|
this.statusEffects = coerceArray(statusEffects);
|
||||||
this.invert = invert;
|
this.invert = invert;
|
||||||
// this.description = i18next.t("pokemonEvolutions:Forms.statusEffect");
|
// this.description = i18next.t("pokemonEvolutions:forms.statusEffect");
|
||||||
}
|
}
|
||||||
|
|
||||||
canChange(pokemon: Pokemon): boolean {
|
canChange(pokemon: Pokemon): boolean {
|
||||||
@ -146,10 +146,10 @@ export class SpeciesFormChangeMoveLearnedTrigger extends SpeciesFormChangeTrigge
|
|||||||
this.known = known;
|
this.known = known;
|
||||||
const moveKey = toCamelCase(MoveId[this.move]);
|
const moveKey = toCamelCase(MoveId[this.move]);
|
||||||
this.description = known
|
this.description = known
|
||||||
? i18next.t("pokemonEvolutions:Forms.moveLearned", {
|
? i18next.t("pokemonEvolutions:forms.moveLearned", {
|
||||||
move: i18next.t(`move:${moveKey}.name`),
|
move: i18next.t(`move:${moveKey}.name`),
|
||||||
})
|
})
|
||||||
: i18next.t("pokemonEvolutions:Forms.moveForgotten", {
|
: i18next.t("pokemonEvolutions:forms.moveForgotten", {
|
||||||
move: i18next.t(`move:${moveKey}.name`),
|
move: i18next.t(`move:${moveKey}.name`),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -171,7 +171,7 @@ export abstract class SpeciesFormChangeMoveTrigger extends SpeciesFormChangeTrig
|
|||||||
}
|
}
|
||||||
|
|
||||||
export class SpeciesFormChangePreMoveTrigger extends SpeciesFormChangeMoveTrigger {
|
export class SpeciesFormChangePreMoveTrigger extends SpeciesFormChangeMoveTrigger {
|
||||||
description = i18next.t("pokemonEvolutions:Forms.preMove");
|
description = i18next.t("pokemonEvolutions:forms.preMove");
|
||||||
canChange(pokemon: Pokemon): boolean {
|
canChange(pokemon: Pokemon): boolean {
|
||||||
const command = globalScene.currentBattle.turnCommands[pokemon.getBattlerIndex()];
|
const command = globalScene.currentBattle.turnCommands[pokemon.getBattlerIndex()];
|
||||||
return !!command?.move && this.movePredicate(command.move.move) === this.used;
|
return !!command?.move && this.movePredicate(command.move.move) === this.used;
|
||||||
@ -179,7 +179,7 @@ export class SpeciesFormChangePreMoveTrigger extends SpeciesFormChangeMoveTrigge
|
|||||||
}
|
}
|
||||||
|
|
||||||
export class SpeciesFormChangePostMoveTrigger extends SpeciesFormChangeMoveTrigger {
|
export class SpeciesFormChangePostMoveTrigger extends SpeciesFormChangeMoveTrigger {
|
||||||
description = i18next.t("pokemonEvolutions:Forms.postMove");
|
description = i18next.t("pokemonEvolutions:forms.postMove");
|
||||||
canChange(pokemon: Pokemon): boolean {
|
canChange(pokemon: Pokemon): boolean {
|
||||||
return (
|
return (
|
||||||
pokemon.summonData && !!pokemon.getLastXMoves(1).filter(m => this.movePredicate(m.move)).length === this.used
|
pokemon.summonData && !!pokemon.getLastXMoves(1).filter(m => this.movePredicate(m.move)).length === this.used
|
||||||
@ -244,7 +244,7 @@ export class SpeciesFormChangeWeatherTrigger extends SpeciesFormChangeTrigger {
|
|||||||
super();
|
super();
|
||||||
this.ability = ability;
|
this.ability = ability;
|
||||||
this.weathers = weathers;
|
this.weathers = weathers;
|
||||||
this.description = i18next.t("pokemonEvolutions:Forms.weather");
|
this.description = i18next.t("pokemonEvolutions:forms.weather");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -282,7 +282,7 @@ export class SpeciesFormChangeRevertWeatherFormTrigger extends SpeciesFormChange
|
|||||||
super();
|
super();
|
||||||
this.ability = ability;
|
this.ability = ability;
|
||||||
this.weathers = weathers;
|
this.weathers = weathers;
|
||||||
this.description = i18next.t("pokemonEvolutions:Forms.weatherRevert");
|
this.description = i18next.t("pokemonEvolutions:forms.weatherRevert");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -778,7 +778,7 @@ export class PokemonSpecies extends PokemonSpeciesForm implements Localizable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (key) {
|
if (key) {
|
||||||
return i18next.t(`battlePokemonForm:${key}`, {
|
return i18next.t(`battlePokemonForm:${toCamelCase(key)}`, {
|
||||||
pokemonName: this.name,
|
pokemonName: this.name,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -810,7 +810,9 @@ export class PokemonSpecies extends PokemonSpeciesForm implements Localizable {
|
|||||||
return this.name; // Other special cases could be put here too
|
return this.name; // Other special cases could be put here too
|
||||||
}
|
}
|
||||||
// Everything beyond this point essentially follows the pattern of FORMNAME_SPECIES
|
// Everything beyond this point essentially follows the pattern of FORMNAME_SPECIES
|
||||||
return i18next.t(`pokemonForm:appendForm.${SpeciesId[this.speciesId].split("_")[0]}`, { pokemonName: this.name });
|
return i18next.t(`pokemonForm:appendForm.${toCamelCase(SpeciesId[this.speciesId].split("_")[0])}`, {
|
||||||
|
pokemonName: this.name,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -827,7 +829,7 @@ export class PokemonSpecies extends PokemonSpeciesForm implements Localizable {
|
|||||||
|
|
||||||
const region = this.getRegion();
|
const region = this.getRegion();
|
||||||
if (this.speciesId === SpeciesId.ARCEUS) {
|
if (this.speciesId === SpeciesId.ARCEUS) {
|
||||||
ret = i18next.t(`pokemonInfo:Type.${formText.toUpperCase()}`);
|
ret = i18next.t(`pokemonInfo:type.${toCamelCase(formText)}`);
|
||||||
} else if (
|
} else if (
|
||||||
[
|
[
|
||||||
SpeciesFormKey.MEGA,
|
SpeciesFormKey.MEGA,
|
||||||
@ -841,8 +843,8 @@ export class PokemonSpecies extends PokemonSpeciesForm implements Localizable {
|
|||||||
].includes(formKey as SpeciesFormKey)
|
].includes(formKey as SpeciesFormKey)
|
||||||
) {
|
) {
|
||||||
return append
|
return append
|
||||||
? i18next.t(`battlePokemonForm:${formKey}`, { pokemonName: this.name })
|
? i18next.t(`battlePokemonForm:${toCamelCase(formKey)}`, { pokemonName: this.name })
|
||||||
: i18next.t(`pokemonForm:battleForm.${formKey}`);
|
: i18next.t(`pokemonForm:battleForm.${toCamelCase(formKey)}`);
|
||||||
} else if (
|
} else if (
|
||||||
region === Region.NORMAL ||
|
region === Region.NORMAL ||
|
||||||
(this.speciesId === SpeciesId.GALAR_DARMANITAN && formIndex > 0) ||
|
(this.speciesId === SpeciesId.GALAR_DARMANITAN && formIndex > 0) ||
|
||||||
@ -868,10 +870,10 @@ export class PokemonSpecies extends PokemonSpeciesForm implements Localizable {
|
|||||||
return i18next.t("pokemonForm:ursalunaBloodmoon");
|
return i18next.t("pokemonForm:ursalunaBloodmoon");
|
||||||
} else {
|
} else {
|
||||||
// Only regional forms should be left at this point
|
// Only regional forms should be left at this point
|
||||||
return i18next.t(`pokemonForm:regionalForm.${Region[region]}`);
|
return i18next.t(`pokemonForm:regionalForm.${toCamelCase(Region[region])}`);
|
||||||
}
|
}
|
||||||
return append
|
return append
|
||||||
? i18next.t("pokemonForm:appendForm.GENERIC", {
|
? i18next.t("pokemonForm:appendForm.generic", {
|
||||||
pokemonName: this.name,
|
pokemonName: this.name,
|
||||||
formName: ret,
|
formName: ret,
|
||||||
})
|
})
|
||||||
@ -879,8 +881,8 @@ export class PokemonSpecies extends PokemonSpeciesForm implements Localizable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
localize(): void {
|
localize(): void {
|
||||||
this.name = i18next.t(`pokemon:${SpeciesId[this.speciesId].toLowerCase()}`);
|
this.name = i18next.t(`pokemon:${toCamelCase(SpeciesId[this.speciesId])}`);
|
||||||
this.category = i18next.t(`pokemonCategory:${SpeciesId[this.speciesId].toLowerCase()}_category`);
|
this.category = i18next.t(`pokemonCategory:${toCamelCase(SpeciesId[this.speciesId])}Category`);
|
||||||
}
|
}
|
||||||
|
|
||||||
getWildSpeciesForLevel(level: number, allowEvolving: boolean, isBoss: boolean, gameMode: GameMode): SpeciesId {
|
getWildSpeciesForLevel(level: number, allowEvolving: boolean, isBoss: boolean, gameMode: GameMode): SpeciesId {
|
||||||
|
@ -64,7 +64,7 @@ export function getStatStageChangeDescriptionKey(stages: number, isIncrease: boo
|
|||||||
* @returns the translation key corresponding to the given {@linkcode Stat}
|
* @returns the translation key corresponding to the given {@linkcode Stat}
|
||||||
*/
|
*/
|
||||||
export function getStatKey(stat: Stat) {
|
export function getStatKey(stat: Stat) {
|
||||||
return `pokemonInfo:Stat.${Stat[stat]}`;
|
return `pokemonInfo:stat.${Stat[stat].toLowerCase()}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -73,5 +73,5 @@ export function getStatKey(stat: Stat) {
|
|||||||
* @returns the translation key corresponding to the given {@linkcode Stat}
|
* @returns the translation key corresponding to the given {@linkcode Stat}
|
||||||
*/
|
*/
|
||||||
export function getShortenedStatKey(stat: PermanentStat) {
|
export function getShortenedStatKey(stat: PermanentStat) {
|
||||||
return `pokemonInfo:Stat.${Stat[stat]}shortened`;
|
return `pokemonInfo:stat.${Stat[stat].toLowerCase()}Shortened`;
|
||||||
}
|
}
|
||||||
|
@ -130,6 +130,7 @@ import {
|
|||||||
} from "#utils/common";
|
} from "#utils/common";
|
||||||
import { getEnumKeys, getEnumValues } from "#utils/enums";
|
import { getEnumKeys, getEnumValues } from "#utils/enums";
|
||||||
import { getModifierPoolForType, getModifierType } from "#utils/modifier-utils";
|
import { getModifierPoolForType, getModifierType } from "#utils/modifier-utils";
|
||||||
|
import { toCamelCase } from "#utils/strings";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
|
|
||||||
const outputModifierData = false;
|
const outputModifierData = false;
|
||||||
@ -451,13 +452,13 @@ export class TerastallizeModifierType extends PokemonModifierType {
|
|||||||
|
|
||||||
get name(): string {
|
get name(): string {
|
||||||
return i18next.t("modifierType:ModifierType.TerastallizeModifierType.name", {
|
return i18next.t("modifierType:ModifierType.TerastallizeModifierType.name", {
|
||||||
teraType: i18next.t(`pokemonInfo:Type.${PokemonType[this.teraType]}`),
|
teraType: i18next.t(`pokemonInfo:type.${toCamelCase(PokemonType[this.teraType])}`),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getDescription(): string {
|
getDescription(): string {
|
||||||
return i18next.t("modifierType:ModifierType.TerastallizeModifierType.description", {
|
return i18next.t("modifierType:ModifierType.TerastallizeModifierType.description", {
|
||||||
teraType: i18next.t(`pokemonInfo:Type.${PokemonType[this.teraType]}`),
|
teraType: i18next.t(`pokemonInfo:type.${toCamelCase(PokemonType[this.teraType])}`),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -861,7 +862,7 @@ export class AttackTypeBoosterModifierType
|
|||||||
getDescription(): string {
|
getDescription(): string {
|
||||||
// TODO: Need getTypeName?
|
// TODO: Need getTypeName?
|
||||||
return i18next.t("modifierType:ModifierType.AttackTypeBoosterModifierType.description", {
|
return i18next.t("modifierType:ModifierType.AttackTypeBoosterModifierType.description", {
|
||||||
moveType: i18next.t(`pokemonInfo:Type.${PokemonType[this.moveType]}`),
|
moveType: i18next.t(`pokemonInfo:type.${toCamelCase(PokemonType[this.moveType])}`),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,8 +65,8 @@ export class GameOverPhase extends BattlePhase {
|
|||||||
const genderIndex = globalScene.gameData.gender ?? PlayerGender.UNSET;
|
const genderIndex = globalScene.gameData.gender ?? PlayerGender.UNSET;
|
||||||
const genderStr = PlayerGender[genderIndex].toLowerCase();
|
const genderStr = PlayerGender[genderIndex].toLowerCase();
|
||||||
globalScene.ui.showDialogue(
|
globalScene.ui.showDialogue(
|
||||||
i18next.t("miscDialogue:ending_endless", { context: genderStr }),
|
i18next.t("miscDialogue:endingEndless", { context: genderStr }),
|
||||||
i18next.t("miscDialogue:ending_name"),
|
i18next.t("miscDialogue:endingName"),
|
||||||
0,
|
0,
|
||||||
() => this.handleGameOver(),
|
() => this.handleGameOver(),
|
||||||
);
|
);
|
||||||
|
@ -7,6 +7,7 @@ import { PokemonType } from "#enums/pokemon-type";
|
|||||||
import type { Pokemon } from "#field/pokemon";
|
import type { Pokemon } from "#field/pokemon";
|
||||||
import { BattlePhase } from "#phases/battle-phase";
|
import { BattlePhase } from "#phases/battle-phase";
|
||||||
import { achvs } from "#system/achv";
|
import { achvs } from "#system/achv";
|
||||||
|
import { toCamelCase } from "#utils/strings";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
|
|
||||||
export class TeraPhase extends BattlePhase {
|
export class TeraPhase extends BattlePhase {
|
||||||
@ -25,7 +26,7 @@ export class TeraPhase extends BattlePhase {
|
|||||||
globalScene.phaseManager.queueMessage(
|
globalScene.phaseManager.queueMessage(
|
||||||
i18next.t("battle:pokemonTerastallized", {
|
i18next.t("battle:pokemonTerastallized", {
|
||||||
pokemonNameWithAffix: getPokemonNameWithAffix(this.pokemon),
|
pokemonNameWithAffix: getPokemonNameWithAffix(this.pokemon),
|
||||||
type: i18next.t(`pokemonInfo:Type.${PokemonType[this.pokemon.getTeraType()]}`),
|
type: i18next.t(`pokemonInfo:type.${toCamelCase(PokemonType[this.pokemon.getTeraType()])}`),
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
new CommonBattleAnim(CommonAnim.TERASTALLIZE, this.pokemon).play(false, () => {
|
new CommonBattleAnim(CommonAnim.TERASTALLIZE, this.pokemon).play(false, () => {
|
||||||
|
@ -15,6 +15,7 @@ import { TurnHeldItemTransferModifier } from "#modifiers/modifier";
|
|||||||
import type { ConditionFn } from "#types/common";
|
import type { ConditionFn } from "#types/common";
|
||||||
import { isNuzlockeChallenge } from "#utils/challenge-utils";
|
import { isNuzlockeChallenge } from "#utils/challenge-utils";
|
||||||
import { NumberHolder } from "#utils/common";
|
import { NumberHolder } from "#utils/common";
|
||||||
|
import { toCamelCase } from "#utils/strings";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import type { Modifier } from "typescript";
|
import type { Modifier } from "typescript";
|
||||||
|
|
||||||
@ -214,244 +215,244 @@ export function getAchievementDescription(localizationKey: string): string {
|
|||||||
const genderStr = PlayerGender[genderIndex].toLowerCase();
|
const genderStr = PlayerGender[genderIndex].toLowerCase();
|
||||||
|
|
||||||
switch (localizationKey) {
|
switch (localizationKey) {
|
||||||
case "10K_MONEY":
|
case "10KMoney":
|
||||||
return i18next.t("achv:MoneyAchv.description", {
|
return i18next.t("achv:moneyAchv.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
moneyAmount: achvs._10K_MONEY.moneyAmount.toLocaleString("en-US"),
|
moneyAmount: achvs._10K_MONEY.moneyAmount.toLocaleString("en-US"),
|
||||||
});
|
});
|
||||||
case "100K_MONEY":
|
case "100KMoney":
|
||||||
return i18next.t("achv:MoneyAchv.description", {
|
return i18next.t("achv:moneyAchv.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
moneyAmount: achvs._100K_MONEY.moneyAmount.toLocaleString("en-US"),
|
moneyAmount: achvs._100K_MONEY.moneyAmount.toLocaleString("en-US"),
|
||||||
});
|
});
|
||||||
case "1M_MONEY":
|
case "1MMoney":
|
||||||
return i18next.t("achv:MoneyAchv.description", {
|
return i18next.t("achv:moneyAchv.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
moneyAmount: achvs._1M_MONEY.moneyAmount.toLocaleString("en-US"),
|
moneyAmount: achvs._1M_MONEY.moneyAmount.toLocaleString("en-US"),
|
||||||
});
|
});
|
||||||
case "10M_MONEY":
|
case "10MMoney":
|
||||||
return i18next.t("achv:MoneyAchv.description", {
|
return i18next.t("achv:moneyAchv.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
moneyAmount: achvs._10M_MONEY.moneyAmount.toLocaleString("en-US"),
|
moneyAmount: achvs._10M_MONEY.moneyAmount.toLocaleString("en-US"),
|
||||||
});
|
});
|
||||||
case "250_DMG":
|
case "250Dmg":
|
||||||
return i18next.t("achv:DamageAchv.description", {
|
return i18next.t("achv:damageAchv.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
damageAmount: achvs._250_DMG.damageAmount.toLocaleString("en-US"),
|
damageAmount: achvs._250_DMG.damageAmount.toLocaleString("en-US"),
|
||||||
});
|
});
|
||||||
case "1000_DMG":
|
case "1000Dmg":
|
||||||
return i18next.t("achv:DamageAchv.description", {
|
return i18next.t("achv:damageAchv.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
damageAmount: achvs._1000_DMG.damageAmount.toLocaleString("en-US"),
|
damageAmount: achvs._1000_DMG.damageAmount.toLocaleString("en-US"),
|
||||||
});
|
});
|
||||||
case "2500_DMG":
|
case "2500Dmg":
|
||||||
return i18next.t("achv:DamageAchv.description", {
|
return i18next.t("achv:damageAchv.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
damageAmount: achvs._2500_DMG.damageAmount.toLocaleString("en-US"),
|
damageAmount: achvs._2500_DMG.damageAmount.toLocaleString("en-US"),
|
||||||
});
|
});
|
||||||
case "10000_DMG":
|
case "10000Dmg":
|
||||||
return i18next.t("achv:DamageAchv.description", {
|
return i18next.t("achv:damageAchv.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
damageAmount: achvs._10000_DMG.damageAmount.toLocaleString("en-US"),
|
damageAmount: achvs._10000_DMG.damageAmount.toLocaleString("en-US"),
|
||||||
});
|
});
|
||||||
case "250_HEAL":
|
case "250Heal":
|
||||||
return i18next.t("achv:HealAchv.description", {
|
return i18next.t("achv:healAchv.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
healAmount: achvs._250_HEAL.healAmount.toLocaleString("en-US"),
|
healAmount: achvs._250_HEAL.healAmount.toLocaleString("en-US"),
|
||||||
HP: i18next.t(getShortenedStatKey(Stat.HP)),
|
HP: i18next.t(getShortenedStatKey(Stat.HP)),
|
||||||
});
|
});
|
||||||
case "1000_HEAL":
|
case "1000Heal":
|
||||||
return i18next.t("achv:HealAchv.description", {
|
return i18next.t("achv:healAchv.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
healAmount: achvs._1000_HEAL.healAmount.toLocaleString("en-US"),
|
healAmount: achvs._1000_HEAL.healAmount.toLocaleString("en-US"),
|
||||||
HP: i18next.t(getShortenedStatKey(Stat.HP)),
|
HP: i18next.t(getShortenedStatKey(Stat.HP)),
|
||||||
});
|
});
|
||||||
case "2500_HEAL":
|
case "2500Heal":
|
||||||
return i18next.t("achv:HealAchv.description", {
|
return i18next.t("achv:healAchv.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
healAmount: achvs._2500_HEAL.healAmount.toLocaleString("en-US"),
|
healAmount: achvs._2500_HEAL.healAmount.toLocaleString("en-US"),
|
||||||
HP: i18next.t(getShortenedStatKey(Stat.HP)),
|
HP: i18next.t(getShortenedStatKey(Stat.HP)),
|
||||||
});
|
});
|
||||||
case "10000_HEAL":
|
case "10000Heal":
|
||||||
return i18next.t("achv:HealAchv.description", {
|
return i18next.t("achv:healAchv.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
healAmount: achvs._10000_HEAL.healAmount.toLocaleString("en-US"),
|
healAmount: achvs._10000_HEAL.healAmount.toLocaleString("en-US"),
|
||||||
HP: i18next.t(getShortenedStatKey(Stat.HP)),
|
HP: i18next.t(getShortenedStatKey(Stat.HP)),
|
||||||
});
|
});
|
||||||
case "LV_100":
|
case "lv100":
|
||||||
return i18next.t("achv:LevelAchv.description", {
|
return i18next.t("achv:levelAchv.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
level: achvs.LV_100.level,
|
level: achvs.LV_100.level,
|
||||||
});
|
});
|
||||||
case "LV_250":
|
case "lv250":
|
||||||
return i18next.t("achv:LevelAchv.description", {
|
return i18next.t("achv:levelAchv.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
level: achvs.LV_250.level,
|
level: achvs.LV_250.level,
|
||||||
});
|
});
|
||||||
case "LV_1000":
|
case "lv1000":
|
||||||
return i18next.t("achv:LevelAchv.description", {
|
return i18next.t("achv:levelAchv.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
level: achvs.LV_1000.level,
|
level: achvs.LV_1000.level,
|
||||||
});
|
});
|
||||||
case "10_RIBBONS":
|
case "10Ribbons":
|
||||||
return i18next.t("achv:RibbonAchv.description", {
|
return i18next.t("achv:ribbonAchv.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
ribbonAmount: achvs._10_RIBBONS.ribbonAmount.toLocaleString("en-US"),
|
ribbonAmount: achvs._10_RIBBONS.ribbonAmount.toLocaleString("en-US"),
|
||||||
});
|
});
|
||||||
case "25_RIBBONS":
|
case "25Ribbons":
|
||||||
return i18next.t("achv:RibbonAchv.description", {
|
return i18next.t("achv:ribbonAchv.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
ribbonAmount: achvs._25_RIBBONS.ribbonAmount.toLocaleString("en-US"),
|
ribbonAmount: achvs._25_RIBBONS.ribbonAmount.toLocaleString("en-US"),
|
||||||
});
|
});
|
||||||
case "50_RIBBONS":
|
case "50Ribbons":
|
||||||
return i18next.t("achv:RibbonAchv.description", {
|
return i18next.t("achv:ribbonAchv.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
ribbonAmount: achvs._50_RIBBONS.ribbonAmount.toLocaleString("en-US"),
|
ribbonAmount: achvs._50_RIBBONS.ribbonAmount.toLocaleString("en-US"),
|
||||||
});
|
});
|
||||||
case "75_RIBBONS":
|
case "75Ribbons":
|
||||||
return i18next.t("achv:RibbonAchv.description", {
|
return i18next.t("achv:ribbonAchv.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
ribbonAmount: achvs._75_RIBBONS.ribbonAmount.toLocaleString("en-US"),
|
ribbonAmount: achvs._75_RIBBONS.ribbonAmount.toLocaleString("en-US"),
|
||||||
});
|
});
|
||||||
case "100_RIBBONS":
|
case "100Ribbons":
|
||||||
return i18next.t("achv:RibbonAchv.description", {
|
return i18next.t("achv:ribbonAchv.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
ribbonAmount: achvs._100_RIBBONS.ribbonAmount.toLocaleString("en-US"),
|
ribbonAmount: achvs._100_RIBBONS.ribbonAmount.toLocaleString("en-US"),
|
||||||
});
|
});
|
||||||
case "TRANSFER_MAX_STAT_STAGE":
|
case "transferMaxStatStage":
|
||||||
return i18next.t("achv:TRANSFER_MAX_STAT_STAGE.description", {
|
return i18next.t("achv:transferMaxStatStage.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
});
|
});
|
||||||
case "MAX_FRIENDSHIP":
|
case "maxFriendship":
|
||||||
return i18next.t("achv:MAX_FRIENDSHIP.description", {
|
return i18next.t("achv:maxFriendship.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
});
|
});
|
||||||
case "MEGA_EVOLVE":
|
case "megaEvolve":
|
||||||
return i18next.t("achv:MEGA_EVOLVE.description", { context: genderStr });
|
return i18next.t("achv:megaEvolve.description", { context: genderStr });
|
||||||
case "GIGANTAMAX":
|
case "gigantamax":
|
||||||
return i18next.t("achv:GIGANTAMAX.description", { context: genderStr });
|
return i18next.t("achv:gigantamax.description", { context: genderStr });
|
||||||
case "TERASTALLIZE":
|
case "terastallize":
|
||||||
return i18next.t("achv:TERASTALLIZE.description", { context: genderStr });
|
return i18next.t("achv:terastallize.description", { context: genderStr });
|
||||||
case "STELLAR_TERASTALLIZE":
|
case "stellarTerastallize":
|
||||||
return i18next.t("achv:STELLAR_TERASTALLIZE.description", {
|
return i18next.t("achv:stellarTerastallize.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
});
|
});
|
||||||
case "SPLICE":
|
case "splice":
|
||||||
return i18next.t("achv:SPLICE.description", { context: genderStr });
|
return i18next.t("achv:splice.description", { context: genderStr });
|
||||||
case "MINI_BLACK_HOLE":
|
case "miniBlackHole":
|
||||||
return i18next.t("achv:MINI_BLACK_HOLE.description", {
|
return i18next.t("achv:miniBlackHole.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
});
|
});
|
||||||
case "CATCH_MYTHICAL":
|
case "catchMythical":
|
||||||
return i18next.t("achv:CATCH_MYTHICAL.description", {
|
return i18next.t("achv:catchMythical.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
});
|
});
|
||||||
case "CATCH_SUB_LEGENDARY":
|
case "catchSubLegendary":
|
||||||
return i18next.t("achv:CATCH_SUB_LEGENDARY.description", {
|
return i18next.t("achv:catchSubLegendary.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
});
|
});
|
||||||
case "CATCH_LEGENDARY":
|
case "catchLegendary":
|
||||||
return i18next.t("achv:CATCH_LEGENDARY.description", {
|
return i18next.t("achv:catchLegendary.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
});
|
});
|
||||||
case "SEE_SHINY":
|
case "seeShiny":
|
||||||
return i18next.t("achv:SEE_SHINY.description", { context: genderStr });
|
return i18next.t("achv:seeShiny.description", { context: genderStr });
|
||||||
case "SHINY_PARTY":
|
case "shinyParty":
|
||||||
return i18next.t("achv:SHINY_PARTY.description", { context: genderStr });
|
return i18next.t("achv:shinyParty.description", { context: genderStr });
|
||||||
case "HATCH_MYTHICAL":
|
case "hatchMythical":
|
||||||
return i18next.t("achv:HATCH_MYTHICAL.description", {
|
return i18next.t("achv:hatchMythical.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
});
|
});
|
||||||
case "HATCH_SUB_LEGENDARY":
|
case "hatchSubLegendary":
|
||||||
return i18next.t("achv:HATCH_SUB_LEGENDARY.description", {
|
return i18next.t("achv:hatchSubLegendary.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
});
|
});
|
||||||
case "HATCH_LEGENDARY":
|
case "hatchLegendary":
|
||||||
return i18next.t("achv:HATCH_LEGENDARY.description", {
|
return i18next.t("achv:hatchLegendary.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
});
|
});
|
||||||
case "HATCH_SHINY":
|
case "hatchShiny":
|
||||||
return i18next.t("achv:HATCH_SHINY.description", { context: genderStr });
|
return i18next.t("achv:hatchShiny.description", { context: genderStr });
|
||||||
case "HIDDEN_ABILITY":
|
case "hiddenAbility":
|
||||||
return i18next.t("achv:HIDDEN_ABILITY.description", {
|
return i18next.t("achv:hiddenAbility.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
});
|
});
|
||||||
case "PERFECT_IVS":
|
case "perfectIvs":
|
||||||
return i18next.t("achv:PERFECT_IVS.description", { context: genderStr });
|
return i18next.t("achv:perfectIvs.description", { context: genderStr });
|
||||||
case "CLASSIC_VICTORY":
|
case "classicVictory":
|
||||||
return i18next.t("achv:CLASSIC_VICTORY.description", {
|
return i18next.t("achv:classicVictory.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
});
|
});
|
||||||
case "UNEVOLVED_CLASSIC_VICTORY":
|
case "unevolvedClassicVictory":
|
||||||
return i18next.t("achv:UNEVOLVED_CLASSIC_VICTORY.description", {
|
return i18next.t("achv:unevolvedClassicVictory.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
});
|
});
|
||||||
case "MONO_GEN_ONE":
|
case "monoGenOne":
|
||||||
return i18next.t("achv:MONO_GEN_ONE.description", { context: genderStr });
|
return i18next.t("achv:monoGenOne.description", { context: genderStr });
|
||||||
case "MONO_GEN_TWO":
|
case "monoGenTwo":
|
||||||
return i18next.t("achv:MONO_GEN_TWO.description", { context: genderStr });
|
return i18next.t("achv:monoGenTwo.description", { context: genderStr });
|
||||||
case "MONO_GEN_THREE":
|
case "monoGenThree":
|
||||||
return i18next.t("achv:MONO_GEN_THREE.description", {
|
return i18next.t("achv:monoGenThree.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
});
|
});
|
||||||
case "MONO_GEN_FOUR":
|
case "monoGenFour":
|
||||||
return i18next.t("achv:MONO_GEN_FOUR.description", {
|
return i18next.t("achv:monoGenFour.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
});
|
});
|
||||||
case "MONO_GEN_FIVE":
|
case "monoGenFive":
|
||||||
return i18next.t("achv:MONO_GEN_FIVE.description", {
|
return i18next.t("achv:monoGenFive.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
});
|
});
|
||||||
case "MONO_GEN_SIX":
|
case "monoGenSix":
|
||||||
return i18next.t("achv:MONO_GEN_SIX.description", { context: genderStr });
|
return i18next.t("achv:monoGenSix.description", { context: genderStr });
|
||||||
case "MONO_GEN_SEVEN":
|
case "monoGenSeven":
|
||||||
return i18next.t("achv:MONO_GEN_SEVEN.description", {
|
return i18next.t("achv:monoGenSeven.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
});
|
});
|
||||||
case "MONO_GEN_EIGHT":
|
case "monoGenEight":
|
||||||
return i18next.t("achv:MONO_GEN_EIGHT.description", {
|
return i18next.t("achv:monoGenEight.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
});
|
});
|
||||||
case "MONO_GEN_NINE":
|
case "monoGenNine":
|
||||||
return i18next.t("achv:MONO_GEN_NINE.description", {
|
return i18next.t("achv:monoGenNine.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
});
|
});
|
||||||
case "MONO_NORMAL":
|
case "monoNormal":
|
||||||
case "MONO_FIGHTING":
|
case "monoFighting":
|
||||||
case "MONO_FLYING":
|
case "monoFlying":
|
||||||
case "MONO_POISON":
|
case "monoPoison":
|
||||||
case "MONO_GROUND":
|
case "monoGround":
|
||||||
case "MONO_ROCK":
|
case "monoRock":
|
||||||
case "MONO_BUG":
|
case "monoBug":
|
||||||
case "MONO_GHOST":
|
case "monoGhost":
|
||||||
case "MONO_STEEL":
|
case "monoSteel":
|
||||||
case "MONO_FIRE":
|
case "monoFire":
|
||||||
case "MONO_WATER":
|
case "monoWater":
|
||||||
case "MONO_GRASS":
|
case "monoGrass":
|
||||||
case "MONO_ELECTRIC":
|
case "monoElectric":
|
||||||
case "MONO_PSYCHIC":
|
case "monoPsychic":
|
||||||
case "MONO_ICE":
|
case "monoIce":
|
||||||
case "MONO_DRAGON":
|
case "monoDragon":
|
||||||
case "MONO_DARK":
|
case "monoDark":
|
||||||
case "MONO_FAIRY":
|
case "monoFairy":
|
||||||
return i18next.t("achv:MonoType.description", {
|
return i18next.t("achv:monoType.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
type: i18next.t(`pokemonInfo:Type.${localizationKey.slice(5)}`),
|
type: i18next.t(`pokemonInfo:type.${toCamelCase(localizationKey.slice(4))}`),
|
||||||
});
|
});
|
||||||
case "FRESH_START":
|
case "freshStart":
|
||||||
return i18next.t("achv:FRESH_START.description", { context: genderStr });
|
return i18next.t("achv:freshStart.description", { context: genderStr });
|
||||||
case "INVERSE_BATTLE":
|
case "inverseBattle":
|
||||||
return i18next.t("achv:INVERSE_BATTLE.description", {
|
return i18next.t("achv:inverseBattle.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
});
|
});
|
||||||
case "FLIP_STATS":
|
case "flipStats":
|
||||||
return i18next.t("achv:FLIP_STATS.description", { context: genderStr });
|
return i18next.t("achv:flipStats.description", { context: genderStr });
|
||||||
case "FLIP_INVERSE":
|
case "flipInverse":
|
||||||
return i18next.t("achv:FLIP_INVERSE.description", { context: genderStr });
|
return i18next.t("achv:flipInverse.description", { context: genderStr });
|
||||||
case "NUZLOCKE":
|
case "nuzlocke":
|
||||||
return i18next.t("achv:NUZLOCKE.description", { context: genderStr });
|
return i18next.t("achv:nuzlocke.description", { context: genderStr });
|
||||||
case "BREEDERS_IN_SPACE":
|
case "breedersInSpace":
|
||||||
return i18next.t("achv:BREEDERS_IN_SPACE.description", {
|
return i18next.t("achv:breedersInSpace.description", {
|
||||||
context: genderStr,
|
context: genderStr,
|
||||||
});
|
});
|
||||||
default:
|
default:
|
||||||
@ -460,84 +461,84 @@ export function getAchievementDescription(localizationKey: string): string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const achvs = {
|
export const achvs = {
|
||||||
_10K_MONEY: new MoneyAchv("10K_MONEY", "", 10000, "nugget", 10),
|
_10K_MONEY: new MoneyAchv("10KMoney", "", 10000, "nugget", 10),
|
||||||
_100K_MONEY: new MoneyAchv("100K_MONEY", "", 100000, "big_nugget", 25).setSecret(true),
|
_100K_MONEY: new MoneyAchv("100KMoney", "", 100000, "big_nugget", 25).setSecret(true),
|
||||||
_1M_MONEY: new MoneyAchv("1M_MONEY", "", 1000000, "relic_gold", 50).setSecret(true),
|
_1M_MONEY: new MoneyAchv("1MMoney", "", 1000000, "relic_gold", 50).setSecret(true),
|
||||||
_10M_MONEY: new MoneyAchv("10M_MONEY", "", 10000000, "coin_case", 100).setSecret(true),
|
_10M_MONEY: new MoneyAchv("10MMoney", "", 10000000, "coin_case", 100).setSecret(true),
|
||||||
_250_DMG: new DamageAchv("250_DMG", "", 250, "lucky_punch", 10),
|
_250_DMG: new DamageAchv("250Dmg", "", 250, "lucky_punch", 10),
|
||||||
_1000_DMG: new DamageAchv("1000_DMG", "", 1000, "lucky_punch_great", 25).setSecret(true),
|
_1000_DMG: new DamageAchv("1000Dmg", "", 1000, "lucky_punch_great", 25).setSecret(true),
|
||||||
_2500_DMG: new DamageAchv("2500_DMG", "", 2500, "lucky_punch_ultra", 50).setSecret(true),
|
_2500_DMG: new DamageAchv("2500Dmg", "", 2500, "lucky_punch_ultra", 50).setSecret(true),
|
||||||
_10000_DMG: new DamageAchv("10000_DMG", "", 10000, "lucky_punch_master", 100).setSecret(true),
|
_10000_DMG: new DamageAchv("10000Dmg", "", 10000, "lucky_punch_master", 100).setSecret(true),
|
||||||
_250_HEAL: new HealAchv("250_HEAL", "", 250, "potion", 10),
|
_250_HEAL: new HealAchv("250Heal", "", 250, "potion", 10),
|
||||||
_1000_HEAL: new HealAchv("1000_HEAL", "", 1000, "super_potion", 25).setSecret(true),
|
_1000_HEAL: new HealAchv("1000Heal", "", 1000, "super_potion", 25).setSecret(true),
|
||||||
_2500_HEAL: new HealAchv("2500_HEAL", "", 2500, "hyper_potion", 50).setSecret(true),
|
_2500_HEAL: new HealAchv("2500Heal", "", 2500, "hyper_potion", 50).setSecret(true),
|
||||||
_10000_HEAL: new HealAchv("10000_HEAL", "", 10000, "max_potion", 100).setSecret(true),
|
_10000_HEAL: new HealAchv("10000Heal", "", 10000, "max_potion", 100).setSecret(true),
|
||||||
LV_100: new LevelAchv("LV_100", "", 100, "rare_candy", 25).setSecret(),
|
LV_100: new LevelAchv("lv100", "", 100, "rare_candy", 25).setSecret(),
|
||||||
LV_250: new LevelAchv("LV_250", "", 250, "rarer_candy", 50).setSecret(true),
|
LV_250: new LevelAchv("lv250", "", 250, "rarer_candy", 50).setSecret(true),
|
||||||
LV_1000: new LevelAchv("LV_1000", "", 1000, "candy_jar", 100).setSecret(true),
|
LV_1000: new LevelAchv("lv1000", "", 1000, "candy_jar", 100).setSecret(true),
|
||||||
_10_RIBBONS: new RibbonAchv("10_RIBBONS", "", 10, "bronze_ribbon", 10),
|
_10_RIBBONS: new RibbonAchv("10Ribbons", "", 10, "bronze_ribbon", 10),
|
||||||
_25_RIBBONS: new RibbonAchv("25_RIBBONS", "", 25, "great_ribbon", 25).setSecret(true),
|
_25_RIBBONS: new RibbonAchv("25Ribbons", "", 25, "great_ribbon", 25).setSecret(true),
|
||||||
_50_RIBBONS: new RibbonAchv("50_RIBBONS", "", 50, "ultra_ribbon", 50).setSecret(true),
|
_50_RIBBONS: new RibbonAchv("50Ribbons", "", 50, "ultra_ribbon", 50).setSecret(true),
|
||||||
_75_RIBBONS: new RibbonAchv("75_RIBBONS", "", 75, "rogue_ribbon", 75).setSecret(true),
|
_75_RIBBONS: new RibbonAchv("75Ribbons", "", 75, "rogue_ribbon", 75).setSecret(true),
|
||||||
_100_RIBBONS: new RibbonAchv("100_RIBBONS", "", 100, "master_ribbon", 100).setSecret(true),
|
_100_RIBBONS: new RibbonAchv("100Ribbons", "", 100, "master_ribbon", 100).setSecret(true),
|
||||||
TRANSFER_MAX_STAT_STAGE: new Achv("TRANSFER_MAX_STAT_STAGE", "", "TRANSFER_MAX_STAT_STAGE.description", "baton", 20),
|
TRANSFER_MAX_STAT_STAGE: new Achv("transferMaxStatStage", "", "transferMaxStatStage.description", "baton", 20),
|
||||||
MAX_FRIENDSHIP: new Achv("MAX_FRIENDSHIP", "", "MAX_FRIENDSHIP.description", "soothe_bell", 25),
|
MAX_FRIENDSHIP: new Achv("maxFriendship", "", "maxFriendship.description", "soothe_bell", 25),
|
||||||
MEGA_EVOLVE: new Achv("MEGA_EVOLVE", "", "MEGA_EVOLVE.description", "mega_bracelet", 50),
|
MEGA_EVOLVE: new Achv("megaEvolve", "", "megaEvolve.description", "mega_bracelet", 50),
|
||||||
GIGANTAMAX: new Achv("GIGANTAMAX", "", "GIGANTAMAX.description", "dynamax_band", 50),
|
GIGANTAMAX: new Achv("gigantamax", "", "gigantamax.description", "dynamax_band", 50),
|
||||||
TERASTALLIZE: new Achv("TERASTALLIZE", "", "TERASTALLIZE.description", "tera_orb", 25),
|
TERASTALLIZE: new Achv("terastallize", "", "terastallize.description", "tera_orb", 25),
|
||||||
STELLAR_TERASTALLIZE: new Achv(
|
STELLAR_TERASTALLIZE: new Achv(
|
||||||
"STELLAR_TERASTALLIZE",
|
"stellarTerastallize",
|
||||||
"",
|
"",
|
||||||
"STELLAR_TERASTALLIZE.description",
|
"stellarTerastallize.description",
|
||||||
"stellar_tera_shard",
|
"stellar_tera_shard",
|
||||||
25,
|
25,
|
||||||
).setSecret(true),
|
).setSecret(true),
|
||||||
SPLICE: new Achv("SPLICE", "", "SPLICE.description", "dna_splicers", 10),
|
SPLICE: new Achv("splice", "", "splice.description", "dna_splicers", 10),
|
||||||
MINI_BLACK_HOLE: new ModifierAchv(
|
MINI_BLACK_HOLE: new ModifierAchv(
|
||||||
"MINI_BLACK_HOLE",
|
"miniBlackHole",
|
||||||
"",
|
"",
|
||||||
"MINI_BLACK_HOLE.description",
|
"miniBlackHole.description",
|
||||||
"mini_black_hole",
|
"mini_black_hole",
|
||||||
25,
|
25,
|
||||||
modifier => modifier instanceof TurnHeldItemTransferModifier,
|
modifier => modifier instanceof TurnHeldItemTransferModifier,
|
||||||
).setSecret(),
|
).setSecret(),
|
||||||
CATCH_MYTHICAL: new Achv("CATCH_MYTHICAL", "", "CATCH_MYTHICAL.description", "strange_ball", 50).setSecret(),
|
CATCH_MYTHICAL: new Achv("catchMythical", "", "catchMythical.description", "strange_ball", 50).setSecret(),
|
||||||
CATCH_SUB_LEGENDARY: new Achv("CATCH_SUB_LEGENDARY", "", "CATCH_SUB_LEGENDARY.description", "rb", 75).setSecret(),
|
CATCH_SUB_LEGENDARY: new Achv("catchSubLegendary", "", "catchSubLegendary.description", "rb", 75).setSecret(),
|
||||||
CATCH_LEGENDARY: new Achv("CATCH_LEGENDARY", "", "CATCH_LEGENDARY.description", "mb", 100).setSecret(),
|
CATCH_LEGENDARY: new Achv("catchLegendary", "", "catchLegendary.description", "mb", 100).setSecret(),
|
||||||
SEE_SHINY: new Achv("SEE_SHINY", "", "SEE_SHINY.description", "pb_gold", 75),
|
SEE_SHINY: new Achv("seeShiny", "", "seeShiny.description", "pb_gold", 75),
|
||||||
SHINY_PARTY: new Achv("SHINY_PARTY", "", "SHINY_PARTY.description", "shiny_charm", 100).setSecret(true),
|
SHINY_PARTY: new Achv("shinyParty", "", "shinyParty.description", "shiny_charm", 100).setSecret(true),
|
||||||
HATCH_MYTHICAL: new Achv("HATCH_MYTHICAL", "", "HATCH_MYTHICAL.description", "mystery_egg", 75).setSecret(),
|
HATCH_MYTHICAL: new Achv("hatchMythical", "", "hatchMythical.description", "mystery_egg", 75).setSecret(),
|
||||||
HATCH_SUB_LEGENDARY: new Achv(
|
HATCH_SUB_LEGENDARY: new Achv(
|
||||||
"HATCH_SUB_LEGENDARY",
|
"hatchSubLegendary",
|
||||||
"",
|
"",
|
||||||
"HATCH_SUB_LEGENDARY.description",
|
"hatchSubLegendary.description",
|
||||||
"oval_stone",
|
"oval_stone",
|
||||||
100,
|
100,
|
||||||
).setSecret(),
|
).setSecret(),
|
||||||
HATCH_LEGENDARY: new Achv("HATCH_LEGENDARY", "", "HATCH_LEGENDARY.description", "lucky_egg", 125).setSecret(),
|
HATCH_LEGENDARY: new Achv("hatchLegendary", "", "hatchLegendary.description", "lucky_egg", 125).setSecret(),
|
||||||
HATCH_SHINY: new Achv("HATCH_SHINY", "", "HATCH_SHINY.description", "golden_egg", 100).setSecret(),
|
HATCH_SHINY: new Achv("hatchShiny", "", "hatchShiny.description", "golden_egg", 100).setSecret(),
|
||||||
HIDDEN_ABILITY: new Achv("HIDDEN_ABILITY", "", "HIDDEN_ABILITY.description", "ability_charm", 75),
|
HIDDEN_ABILITY: new Achv("hiddenAbility", "", "hiddenAbility.description", "ability_charm", 75),
|
||||||
PERFECT_IVS: new Achv("PERFECT_IVS", "", "PERFECT_IVS.description", "blunder_policy", 100),
|
PERFECT_IVS: new Achv("perfectIvs", "", "perfectIvs.description", "blunder_policy", 100),
|
||||||
CLASSIC_VICTORY: new Achv(
|
CLASSIC_VICTORY: new Achv(
|
||||||
"CLASSIC_VICTORY",
|
"classicVictory",
|
||||||
"",
|
"",
|
||||||
"CLASSIC_VICTORY.description",
|
"classicVictory.description",
|
||||||
"relic_crown",
|
"relic_crown",
|
||||||
150,
|
150,
|
||||||
_ => globalScene.gameData.gameStats.sessionsWon === 0,
|
_ => globalScene.gameData.gameStats.sessionsWon === 0,
|
||||||
),
|
),
|
||||||
UNEVOLVED_CLASSIC_VICTORY: new Achv(
|
UNEVOLVED_CLASSIC_VICTORY: new Achv(
|
||||||
"UNEVOLVED_CLASSIC_VICTORY",
|
"unevolvedClassicVictory",
|
||||||
"",
|
"",
|
||||||
"UNEVOLVED_CLASSIC_VICTORY.description",
|
"unevolvedClassicVictory.description",
|
||||||
"eviolite",
|
"eviolite",
|
||||||
175,
|
175,
|
||||||
_ => globalScene.getPlayerParty().some(p => p.getSpeciesForm(true).speciesId in pokemonEvolutions),
|
_ => globalScene.getPlayerParty().some(p => p.getSpeciesForm(true).speciesId in pokemonEvolutions),
|
||||||
),
|
),
|
||||||
MONO_GEN_ONE_VICTORY: new ChallengeAchv(
|
MONO_GEN_ONE_VICTORY: new ChallengeAchv(
|
||||||
"MONO_GEN_ONE",
|
"monoGenOne",
|
||||||
"",
|
"",
|
||||||
"MONO_GEN_ONE.description",
|
"monoGenOne.description",
|
||||||
"ribbon_gen1",
|
"ribbon_gen1",
|
||||||
100,
|
100,
|
||||||
c =>
|
c =>
|
||||||
@ -548,9 +549,9 @@ export const achvs = {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
MONO_GEN_TWO_VICTORY: new ChallengeAchv(
|
MONO_GEN_TWO_VICTORY: new ChallengeAchv(
|
||||||
"MONO_GEN_TWO",
|
"monoGenTwo",
|
||||||
"",
|
"",
|
||||||
"MONO_GEN_TWO.description",
|
"monoGenTwo.description",
|
||||||
"ribbon_gen2",
|
"ribbon_gen2",
|
||||||
100,
|
100,
|
||||||
c =>
|
c =>
|
||||||
@ -561,9 +562,9 @@ export const achvs = {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
MONO_GEN_THREE_VICTORY: new ChallengeAchv(
|
MONO_GEN_THREE_VICTORY: new ChallengeAchv(
|
||||||
"MONO_GEN_THREE",
|
"monoGenThree",
|
||||||
"",
|
"",
|
||||||
"MONO_GEN_THREE.description",
|
"monoGenThree.description",
|
||||||
"ribbon_gen3",
|
"ribbon_gen3",
|
||||||
100,
|
100,
|
||||||
c =>
|
c =>
|
||||||
@ -574,9 +575,9 @@ export const achvs = {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
MONO_GEN_FOUR_VICTORY: new ChallengeAchv(
|
MONO_GEN_FOUR_VICTORY: new ChallengeAchv(
|
||||||
"MONO_GEN_FOUR",
|
"monoGenFour",
|
||||||
"",
|
"",
|
||||||
"MONO_GEN_FOUR.description",
|
"monoGenFour.description",
|
||||||
"ribbon_gen4",
|
"ribbon_gen4",
|
||||||
100,
|
100,
|
||||||
c =>
|
c =>
|
||||||
@ -587,9 +588,9 @@ export const achvs = {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
MONO_GEN_FIVE_VICTORY: new ChallengeAchv(
|
MONO_GEN_FIVE_VICTORY: new ChallengeAchv(
|
||||||
"MONO_GEN_FIVE",
|
"monoGenFive",
|
||||||
"",
|
"",
|
||||||
"MONO_GEN_FIVE.description",
|
"monoGenFive.description",
|
||||||
"ribbon_gen5",
|
"ribbon_gen5",
|
||||||
100,
|
100,
|
||||||
c =>
|
c =>
|
||||||
@ -600,9 +601,9 @@ export const achvs = {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
MONO_GEN_SIX_VICTORY: new ChallengeAchv(
|
MONO_GEN_SIX_VICTORY: new ChallengeAchv(
|
||||||
"MONO_GEN_SIX",
|
"monoGenSix",
|
||||||
"",
|
"",
|
||||||
"MONO_GEN_SIX.description",
|
"monoGenSix.description",
|
||||||
"ribbon_gen6",
|
"ribbon_gen6",
|
||||||
100,
|
100,
|
||||||
c =>
|
c =>
|
||||||
@ -613,9 +614,9 @@ export const achvs = {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
MONO_GEN_SEVEN_VICTORY: new ChallengeAchv(
|
MONO_GEN_SEVEN_VICTORY: new ChallengeAchv(
|
||||||
"MONO_GEN_SEVEN",
|
"monoGenSeven",
|
||||||
"",
|
"",
|
||||||
"MONO_GEN_SEVEN.description",
|
"monoGenSeven.description",
|
||||||
"ribbon_gen7",
|
"ribbon_gen7",
|
||||||
100,
|
100,
|
||||||
c =>
|
c =>
|
||||||
@ -626,9 +627,9 @@ export const achvs = {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
MONO_GEN_EIGHT_VICTORY: new ChallengeAchv(
|
MONO_GEN_EIGHT_VICTORY: new ChallengeAchv(
|
||||||
"MONO_GEN_EIGHT",
|
"monoGenEight",
|
||||||
"",
|
"",
|
||||||
"MONO_GEN_EIGHT.description",
|
"monoGenEight.description",
|
||||||
"ribbon_gen8",
|
"ribbon_gen8",
|
||||||
100,
|
100,
|
||||||
c =>
|
c =>
|
||||||
@ -639,9 +640,9 @@ export const achvs = {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
MONO_GEN_NINE_VICTORY: new ChallengeAchv(
|
MONO_GEN_NINE_VICTORY: new ChallengeAchv(
|
||||||
"MONO_GEN_NINE",
|
"monoGenNine",
|
||||||
"",
|
"",
|
||||||
"MONO_GEN_NINE.description",
|
"monoGenNine.description",
|
||||||
"ribbon_gen9",
|
"ribbon_gen9",
|
||||||
100,
|
100,
|
||||||
c =>
|
c =>
|
||||||
@ -652,9 +653,9 @@ export const achvs = {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
MONO_NORMAL: new ChallengeAchv(
|
MONO_NORMAL: new ChallengeAchv(
|
||||||
"MONO_NORMAL",
|
"monoNormal",
|
||||||
"",
|
"",
|
||||||
"MONO_NORMAL.description",
|
"monoNormal.description",
|
||||||
"silk_scarf",
|
"silk_scarf",
|
||||||
100,
|
100,
|
||||||
c =>
|
c =>
|
||||||
@ -665,9 +666,9 @@ export const achvs = {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
MONO_FIGHTING: new ChallengeAchv(
|
MONO_FIGHTING: new ChallengeAchv(
|
||||||
"MONO_FIGHTING",
|
"monoFighting",
|
||||||
"",
|
"",
|
||||||
"MONO_FIGHTING.description",
|
"monoFighting.description",
|
||||||
"black_belt",
|
"black_belt",
|
||||||
100,
|
100,
|
||||||
c =>
|
c =>
|
||||||
@ -678,9 +679,9 @@ export const achvs = {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
MONO_FLYING: new ChallengeAchv(
|
MONO_FLYING: new ChallengeAchv(
|
||||||
"MONO_FLYING",
|
"monoFlying",
|
||||||
"",
|
"",
|
||||||
"MONO_FLYING.description",
|
"monoFlying.description",
|
||||||
"sharp_beak",
|
"sharp_beak",
|
||||||
100,
|
100,
|
||||||
c =>
|
c =>
|
||||||
@ -691,9 +692,9 @@ export const achvs = {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
MONO_POISON: new ChallengeAchv(
|
MONO_POISON: new ChallengeAchv(
|
||||||
"MONO_POISON",
|
"monoPoison",
|
||||||
"",
|
"",
|
||||||
"MONO_POISON.description",
|
"monoPoison.description",
|
||||||
"poison_barb",
|
"poison_barb",
|
||||||
100,
|
100,
|
||||||
c =>
|
c =>
|
||||||
@ -704,9 +705,9 @@ export const achvs = {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
MONO_GROUND: new ChallengeAchv(
|
MONO_GROUND: new ChallengeAchv(
|
||||||
"MONO_GROUND",
|
"monoGround",
|
||||||
"",
|
"",
|
||||||
"MONO_GROUND.description",
|
"monoGround.description",
|
||||||
"soft_sand",
|
"soft_sand",
|
||||||
100,
|
100,
|
||||||
c =>
|
c =>
|
||||||
@ -717,9 +718,9 @@ export const achvs = {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
MONO_ROCK: new ChallengeAchv(
|
MONO_ROCK: new ChallengeAchv(
|
||||||
"MONO_ROCK",
|
"monoRock",
|
||||||
"",
|
"",
|
||||||
"MONO_ROCK.description",
|
"monoRock.description",
|
||||||
"hard_stone",
|
"hard_stone",
|
||||||
100,
|
100,
|
||||||
c =>
|
c =>
|
||||||
@ -730,9 +731,9 @@ export const achvs = {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
MONO_BUG: new ChallengeAchv(
|
MONO_BUG: new ChallengeAchv(
|
||||||
"MONO_BUG",
|
"monoBug",
|
||||||
"",
|
"",
|
||||||
"MONO_BUG.description",
|
"monoBug.description",
|
||||||
"silver_powder",
|
"silver_powder",
|
||||||
100,
|
100,
|
||||||
c =>
|
c =>
|
||||||
@ -743,9 +744,9 @@ export const achvs = {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
MONO_GHOST: new ChallengeAchv(
|
MONO_GHOST: new ChallengeAchv(
|
||||||
"MONO_GHOST",
|
"monoGhost",
|
||||||
"",
|
"",
|
||||||
"MONO_GHOST.description",
|
"monoGhost.description",
|
||||||
"spell_tag",
|
"spell_tag",
|
||||||
100,
|
100,
|
||||||
c =>
|
c =>
|
||||||
@ -756,9 +757,9 @@ export const achvs = {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
MONO_STEEL: new ChallengeAchv(
|
MONO_STEEL: new ChallengeAchv(
|
||||||
"MONO_STEEL",
|
"monoSteel",
|
||||||
"",
|
"",
|
||||||
"MONO_STEEL.description",
|
"monoSteel.description",
|
||||||
"metal_coat",
|
"metal_coat",
|
||||||
100,
|
100,
|
||||||
c =>
|
c =>
|
||||||
@ -769,9 +770,9 @@ export const achvs = {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
MONO_FIRE: new ChallengeAchv(
|
MONO_FIRE: new ChallengeAchv(
|
||||||
"MONO_FIRE",
|
"monoFire",
|
||||||
"",
|
"",
|
||||||
"MONO_FIRE.description",
|
"monoFire.description",
|
||||||
"charcoal",
|
"charcoal",
|
||||||
100,
|
100,
|
||||||
c =>
|
c =>
|
||||||
@ -782,9 +783,9 @@ export const achvs = {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
MONO_WATER: new ChallengeAchv(
|
MONO_WATER: new ChallengeAchv(
|
||||||
"MONO_WATER",
|
"monoWater",
|
||||||
"",
|
"",
|
||||||
"MONO_WATER.description",
|
"monoWater.description",
|
||||||
"mystic_water",
|
"mystic_water",
|
||||||
100,
|
100,
|
||||||
c =>
|
c =>
|
||||||
@ -795,9 +796,9 @@ export const achvs = {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
MONO_GRASS: new ChallengeAchv(
|
MONO_GRASS: new ChallengeAchv(
|
||||||
"MONO_GRASS",
|
"monoGrass",
|
||||||
"",
|
"",
|
||||||
"MONO_GRASS.description",
|
"monoGrass.description",
|
||||||
"miracle_seed",
|
"miracle_seed",
|
||||||
100,
|
100,
|
||||||
c =>
|
c =>
|
||||||
@ -808,9 +809,9 @@ export const achvs = {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
MONO_ELECTRIC: new ChallengeAchv(
|
MONO_ELECTRIC: new ChallengeAchv(
|
||||||
"MONO_ELECTRIC",
|
"monoElectric",
|
||||||
"",
|
"",
|
||||||
"MONO_ELECTRIC.description",
|
"monoElectric.description",
|
||||||
"magnet",
|
"magnet",
|
||||||
100,
|
100,
|
||||||
c =>
|
c =>
|
||||||
@ -821,9 +822,9 @@ export const achvs = {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
MONO_PSYCHIC: new ChallengeAchv(
|
MONO_PSYCHIC: new ChallengeAchv(
|
||||||
"MONO_PSYCHIC",
|
"monoPsychic",
|
||||||
"",
|
"",
|
||||||
"MONO_PSYCHIC.description",
|
"monoPsychic.description",
|
||||||
"twisted_spoon",
|
"twisted_spoon",
|
||||||
100,
|
100,
|
||||||
c =>
|
c =>
|
||||||
@ -834,9 +835,9 @@ export const achvs = {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
MONO_ICE: new ChallengeAchv(
|
MONO_ICE: new ChallengeAchv(
|
||||||
"MONO_ICE",
|
"monoIce",
|
||||||
"",
|
"",
|
||||||
"MONO_ICE.description",
|
"monoIce.description",
|
||||||
"never_melt_ice",
|
"never_melt_ice",
|
||||||
100,
|
100,
|
||||||
c =>
|
c =>
|
||||||
@ -847,9 +848,9 @@ export const achvs = {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
MONO_DRAGON: new ChallengeAchv(
|
MONO_DRAGON: new ChallengeAchv(
|
||||||
"MONO_DRAGON",
|
"monoDragon",
|
||||||
"",
|
"",
|
||||||
"MONO_DRAGON.description",
|
"monoDragon.description",
|
||||||
"dragon_fang",
|
"dragon_fang",
|
||||||
100,
|
100,
|
||||||
c =>
|
c =>
|
||||||
@ -860,9 +861,9 @@ export const achvs = {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
MONO_DARK: new ChallengeAchv(
|
MONO_DARK: new ChallengeAchv(
|
||||||
"MONO_DARK",
|
"monoDark",
|
||||||
"",
|
"",
|
||||||
"MONO_DARK.description",
|
"monoDark.description",
|
||||||
"black_glasses",
|
"black_glasses",
|
||||||
100,
|
100,
|
||||||
c =>
|
c =>
|
||||||
@ -873,9 +874,9 @@ export const achvs = {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
MONO_FAIRY: new ChallengeAchv(
|
MONO_FAIRY: new ChallengeAchv(
|
||||||
"MONO_FAIRY",
|
"monoFairy",
|
||||||
"",
|
"",
|
||||||
"MONO_FAIRY.description",
|
"monoFairy.description",
|
||||||
"fairy_feather",
|
"fairy_feather",
|
||||||
100,
|
100,
|
||||||
c =>
|
c =>
|
||||||
@ -886,9 +887,9 @@ export const achvs = {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
FRESH_START: new ChallengeAchv(
|
FRESH_START: new ChallengeAchv(
|
||||||
"FRESH_START",
|
"freshStart",
|
||||||
"",
|
"",
|
||||||
"FRESH_START.description",
|
"freshStart.description",
|
||||||
"reviver_seed",
|
"reviver_seed",
|
||||||
100,
|
100,
|
||||||
c =>
|
c =>
|
||||||
@ -899,25 +900,25 @@ export const achvs = {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
INVERSE_BATTLE: new ChallengeAchv(
|
INVERSE_BATTLE: new ChallengeAchv(
|
||||||
"INVERSE_BATTLE",
|
"inverseBattle",
|
||||||
"",
|
"",
|
||||||
"INVERSE_BATTLE.description",
|
"inverseBattle.description",
|
||||||
"inverse",
|
"inverse",
|
||||||
100,
|
100,
|
||||||
c => c instanceof InverseBattleChallenge && c.value > 0,
|
c => c instanceof InverseBattleChallenge && c.value > 0,
|
||||||
),
|
),
|
||||||
FLIP_STATS: new ChallengeAchv(
|
FLIP_STATS: new ChallengeAchv(
|
||||||
"FLIP_STATS",
|
"flipStats",
|
||||||
"",
|
"",
|
||||||
"FLIP_STATS.description",
|
"flipStats.description",
|
||||||
"dubious_disc",
|
"dubious_disc",
|
||||||
100,
|
100,
|
||||||
c => c instanceof FlipStatChallenge && c.value > 0,
|
c => c instanceof FlipStatChallenge && c.value > 0,
|
||||||
),
|
),
|
||||||
FLIP_INVERSE: new ChallengeAchv(
|
FLIP_INVERSE: new ChallengeAchv(
|
||||||
"FLIP_INVERSE",
|
"flipInverse",
|
||||||
"",
|
"",
|
||||||
"FLIP_INVERSE.description",
|
"flipInverse.description",
|
||||||
"cracked_pot",
|
"cracked_pot",
|
||||||
100,
|
100,
|
||||||
c =>
|
c =>
|
||||||
@ -926,8 +927,8 @@ export const achvs = {
|
|||||||
globalScene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0),
|
globalScene.gameMode.challenges.some(c => c.id === Challenges.INVERSE_BATTLE && c.value > 0),
|
||||||
).setSecret(),
|
).setSecret(),
|
||||||
// TODO: Decide on icon
|
// TODO: Decide on icon
|
||||||
NUZLOCKE: new ChallengeAchv("NUZLOCKE", "", "NUZLOCKE.description", "leaf_stone", 100, isNuzlockeChallenge),
|
NUZLOCKE: new ChallengeAchv("nuzlocke", "", "nuzlocke.description", "leaf_stone", 100, isNuzlockeChallenge),
|
||||||
BREEDERS_IN_SPACE: new Achv("BREEDERS_IN_SPACE", "", "BREEDERS_IN_SPACE.description", "moon_stone", 50).setSecret(),
|
BREEDERS_IN_SPACE: new Achv("breedersInSpace", "", "breedersInSpace.description", "moon_stone", 50).setSecret(),
|
||||||
};
|
};
|
||||||
|
|
||||||
export function initAchievements() {
|
export function initAchievements() {
|
||||||
|
@ -15,6 +15,6 @@ export function awardRibbonsToSpeciesLine(id: SpeciesId, ribbons: RibbonFlag): v
|
|||||||
dexData[id].ribbons.award(ribbons);
|
dexData[id].ribbons.award(ribbons);
|
||||||
// Mark all pre-evolutions of the Pokémon with the same ribbon flags.
|
// Mark all pre-evolutions of the Pokémon with the same ribbon flags.
|
||||||
for (let prevoId = pokemonPrevolutions[id]; !isNullOrUndefined(prevoId); prevoId = pokemonPrevolutions[prevoId]) {
|
for (let prevoId = pokemonPrevolutions[id]; !isNullOrUndefined(prevoId); prevoId = pokemonPrevolutions[prevoId]) {
|
||||||
dexData[id].ribbons.award(ribbons);
|
dexData[prevoId].ribbons.award(ribbons);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -96,7 +96,7 @@ export class AchvsUiHandler extends MessageUiHandler {
|
|||||||
const genderIndex = globalScene.gameData.gender ?? PlayerGender.MALE;
|
const genderIndex = globalScene.gameData.gender ?? PlayerGender.MALE;
|
||||||
const genderStr = PlayerGender[genderIndex].toLowerCase();
|
const genderStr = PlayerGender[genderIndex].toLowerCase();
|
||||||
|
|
||||||
this.achvsName = i18next.t("achv:Achievements.name", { context: genderStr });
|
this.achvsName = i18next.t("achv:achievements.name", { context: genderStr });
|
||||||
this.vouchersName = i18next.t("voucher:vouchers");
|
this.vouchersName = i18next.t("voucher:vouchers");
|
||||||
|
|
||||||
this.iconsBg = addWindow(0, this.headerBg.height, WIDTH - 2, HEIGHT - this.headerBg.height - 68).setOrigin(0);
|
this.iconsBg = addWindow(0, this.headerBg.height, WIDTH - 2, HEIGHT - this.headerBg.height - 68).setOrigin(0);
|
||||||
@ -214,7 +214,7 @@ export class AchvsUiHandler extends MessageUiHandler {
|
|||||||
this.showText(!hidden ? achv.description : "");
|
this.showText(!hidden ? achv.description : "");
|
||||||
this.scoreText.setText(`${achv.score}pt`);
|
this.scoreText.setText(`${achv.score}pt`);
|
||||||
this.unlockText.setText(
|
this.unlockText.setText(
|
||||||
unlocked ? new Date(achvUnlocks[achv.id]).toLocaleDateString() : i18next.t("achv:Locked.name"),
|
unlocked ? new Date(achvUnlocks[achv.id]).toLocaleDateString() : i18next.t("achv:locked.name"),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ import { TextStyle } from "#enums/text-style";
|
|||||||
import { addTextObject } from "#ui/text";
|
import { addTextObject } from "#ui/text";
|
||||||
import { addWindow } from "#ui/ui-theme";
|
import { addWindow } from "#ui/ui-theme";
|
||||||
import { fixedInt } from "#utils/common";
|
import { fixedInt } from "#utils/common";
|
||||||
|
import { toCamelCase } from "#utils/strings";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
|
|
||||||
interface BaseStatsOverlaySettings {
|
interface BaseStatsOverlaySettings {
|
||||||
@ -68,7 +69,9 @@ export class BaseStatsOverlay extends Phaser.GameObjects.Container implements In
|
|||||||
// show this component with infos for the specific move
|
// show this component with infos for the specific move
|
||||||
show(values: number[], total: number): boolean {
|
show(values: number[], total: number): boolean {
|
||||||
for (let i = 0; i < 6; i++) {
|
for (let i = 0; i < 6; i++) {
|
||||||
this.statsLabels[i].setText(i18next.t(`pokemonInfo:Stat.${shortStats[i]}shortened`) + ": " + `${values[i]}`);
|
this.statsLabels[i].setText(
|
||||||
|
i18next.t(`pokemonInfo:stat.${toCamelCase(shortStats[i])}Shortened`) + ": " + `${values[i]}`,
|
||||||
|
);
|
||||||
// This accounts for base stats up to 200, might not be enough.
|
// This accounts for base stats up to 200, might not be enough.
|
||||||
// TODO: change color based on value.
|
// TODO: change color based on value.
|
||||||
this.statsShadows[i].setSize(values[i] / 2, 5);
|
this.statsShadows[i].setSize(values[i] / 2, 5);
|
||||||
|
@ -9,6 +9,7 @@ import type { Pokemon } from "#field/pokemon";
|
|||||||
import { getVariantTint } from "#sprites/variant";
|
import { getVariantTint } from "#sprites/variant";
|
||||||
import { addTextObject } from "#ui/text";
|
import { addTextObject } from "#ui/text";
|
||||||
import { fixedInt, getLocalizedSpriteKey, getShinyDescriptor } from "#utils/common";
|
import { fixedInt, getLocalizedSpriteKey, getShinyDescriptor } from "#utils/common";
|
||||||
|
import { toCamelCase } from "#utils/strings";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -361,7 +362,7 @@ export abstract class BattleInfo extends Phaser.GameObjects.Container {
|
|||||||
globalScene.ui.showTooltip(
|
globalScene.ui.showTooltip(
|
||||||
"",
|
"",
|
||||||
i18next.t("fightUiHandler:teraHover", {
|
i18next.t("fightUiHandler:teraHover", {
|
||||||
type: i18next.t(`pokemonInfo:Type.${PokemonType[this.lastTeraType]}`),
|
type: i18next.t(`pokemonInfo:type.${toCamelCase(PokemonType[this.lastTeraType])}`),
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { globalScene } from "#app/global-scene";
|
import { globalScene } from "#app/global-scene";
|
||||||
import { TextStyle } from "#enums/text-style";
|
import { TextStyle } from "#enums/text-style";
|
||||||
import { addTextObject } from "#ui/text";
|
import { addTextObject } from "#ui/text";
|
||||||
import { toTitleCase } from "#utils/strings";
|
import { toCamelCase, toTitleCase } from "#utils/strings";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
|
|
||||||
const hiddenX = -150;
|
const hiddenX = -150;
|
||||||
@ -100,7 +100,7 @@ export class BgmBar extends Phaser.GameObjects.Container {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getRealBgmName(bgmName: string): string {
|
getRealBgmName(bgmName: string): string {
|
||||||
return i18next.t([`bgmName:${bgmName}`, "bgmName:missing_entries"], {
|
return i18next.t([`bgmName:${toCamelCase(bgmName)}`, "bgmName:missingEntries"], {
|
||||||
name: toTitleCase(bgmName),
|
name: toTitleCase(bgmName),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -31,14 +31,14 @@ export class ConfirmUiHandler extends AbstractOptionSelectUiHandler {
|
|||||||
const config: OptionSelectConfig = {
|
const config: OptionSelectConfig = {
|
||||||
options: [
|
options: [
|
||||||
{
|
{
|
||||||
label: i18next.t("partyUiHandler:SUMMARY"),
|
label: i18next.t("partyUiHandler:summary"),
|
||||||
handler: () => {
|
handler: () => {
|
||||||
args[0]();
|
args[0]();
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: i18next.t("partyUiHandler:POKEDEX"),
|
label: i18next.t("partyUiHandler:pokedex"),
|
||||||
handler: () => {
|
handler: () => {
|
||||||
args[1]();
|
args[1]();
|
||||||
return true;
|
return true;
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
|
import { loggedInUser } from "#app/account";
|
||||||
import { globalScene } from "#app/global-scene";
|
import { globalScene } from "#app/global-scene";
|
||||||
import { speciesStarterCosts } from "#balance/starters";
|
import { speciesStarterCosts } from "#balance/starters";
|
||||||
import { Button } from "#enums/buttons";
|
import { Button } from "#enums/buttons";
|
||||||
import { DexAttr } from "#enums/dex-attr";
|
import { DexAttr } from "#enums/dex-attr";
|
||||||
|
import { PlayerGender } from "#enums/player-gender";
|
||||||
import { TextStyle } from "#enums/text-style";
|
import { TextStyle } from "#enums/text-style";
|
||||||
import { UiTheme } from "#enums/ui-theme";
|
import { UiTheme } from "#enums/ui-theme";
|
||||||
import type { GameData } from "#system/game-data";
|
import type { GameData } from "#system/game-data";
|
||||||
@ -227,6 +229,9 @@ export class GameStatsUiHandler extends UiHandler {
|
|||||||
private arrowUp: Phaser.GameObjects.Sprite;
|
private arrowUp: Phaser.GameObjects.Sprite;
|
||||||
private arrowDown: Phaser.GameObjects.Sprite;
|
private arrowDown: Phaser.GameObjects.Sprite;
|
||||||
|
|
||||||
|
/** Logged in username */
|
||||||
|
private headerText: Phaser.GameObjects.Text;
|
||||||
|
|
||||||
/** Whether the UI is single column mode */
|
/** Whether the UI is single column mode */
|
||||||
private get singleCol(): boolean {
|
private get singleCol(): boolean {
|
||||||
const resolvedLang = i18next.resolvedLanguage ?? "en";
|
const resolvedLang = i18next.resolvedLanguage ?? "en";
|
||||||
@ -296,6 +301,23 @@ export class GameStatsUiHandler extends UiHandler {
|
|||||||
return GameStatsUiHandler.ROWS_PER_PAGE * this.columnCount;
|
return GameStatsUiHandler.ROWS_PER_PAGE * this.columnCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the username of logged in user. If the username is hidden, the trainer name based on gender will be displayed.
|
||||||
|
* @returns The username of logged in user
|
||||||
|
*/
|
||||||
|
private getUsername(): string {
|
||||||
|
const usernameReplacement =
|
||||||
|
globalScene.gameData.gender === PlayerGender.FEMALE
|
||||||
|
? i18next.t("trainerNames:player_f")
|
||||||
|
: i18next.t("trainerNames:player_m");
|
||||||
|
|
||||||
|
const displayName = !globalScene.hideUsername
|
||||||
|
? (loggedInUser?.username ?? i18next.t("common:guest"))
|
||||||
|
: usernameReplacement;
|
||||||
|
|
||||||
|
return i18next.t("gameStatsUiHandler:stats", { username: displayName });
|
||||||
|
}
|
||||||
|
|
||||||
// #endregion Columnar-specific properties
|
// #endregion Columnar-specific properties
|
||||||
|
|
||||||
setup() {
|
setup() {
|
||||||
@ -316,11 +338,11 @@ export class GameStatsUiHandler extends UiHandler {
|
|||||||
|
|
||||||
const headerBg = addWindow(0, 0, sWidth - 2, 24).setOrigin(0);
|
const headerBg = addWindow(0, 0, sWidth - 2, 24).setOrigin(0);
|
||||||
|
|
||||||
const headerText = addTextObject(0, 0, i18next.t("gameStatsUiHandler:stats"), TextStyle.HEADER_LABEL)
|
this.headerText = addTextObject(0, 0, this.getUsername(), TextStyle.HEADER_LABEL)
|
||||||
.setOrigin(0)
|
.setOrigin(0)
|
||||||
.setPositionRelative(headerBg, 8, 4);
|
.setPositionRelative(headerBg, 8, 4);
|
||||||
|
|
||||||
this.gameStatsContainer.add([headerBg, headerText]);
|
this.gameStatsContainer.add([headerBg, this.headerText]);
|
||||||
|
|
||||||
const colWidth = this.colWidth;
|
const colWidth = this.colWidth;
|
||||||
|
|
||||||
@ -368,6 +390,10 @@ export class GameStatsUiHandler extends UiHandler {
|
|||||||
|
|
||||||
show(args: any[]): boolean {
|
show(args: any[]): boolean {
|
||||||
super.show(args);
|
super.show(args);
|
||||||
|
|
||||||
|
// show updated username on every render
|
||||||
|
this.headerText.setText(this.getUsername());
|
||||||
|
|
||||||
this.gameStatsContainer.setActive(true).setVisible(true);
|
this.gameStatsContainer.setActive(true).setVisible(true);
|
||||||
|
|
||||||
this.arrowUp.setActive(true).play("prompt").setVisible(false);
|
this.arrowUp.setActive(true).play("prompt").setVisible(false);
|
||||||
|
@ -17,6 +17,7 @@ import { addWindow, WindowVariant } from "#ui/ui-theme";
|
|||||||
import { fixedInt, isLocal, sessionIdKey } from "#utils/common";
|
import { fixedInt, isLocal, sessionIdKey } from "#utils/common";
|
||||||
import { getCookie } from "#utils/cookies";
|
import { getCookie } from "#utils/cookies";
|
||||||
import { getEnumValues } from "#utils/enums";
|
import { getEnumValues } from "#utils/enums";
|
||||||
|
import { toCamelCase } from "#utils/strings";
|
||||||
import { isBeta } from "#utils/utility-vars";
|
import { isBeta } from "#utils/utility-vars";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
|
|
||||||
@ -138,7 +139,7 @@ export class MenuUiHandler extends MessageUiHandler {
|
|||||||
this.optionSelectText = addTextObject(
|
this.optionSelectText = addTextObject(
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
this.menuOptions.map(o => `${i18next.t(`menuUiHandler:${MenuOptions[o]}`)}`).join("\n"),
|
this.menuOptions.map(o => `${i18next.t(`menuUiHandler:${toCamelCase(MenuOptions[o])}`)}`).join("\n"),
|
||||||
TextStyle.WINDOW,
|
TextStyle.WINDOW,
|
||||||
{ maxLines: this.menuOptions.length },
|
{ maxLines: this.menuOptions.length },
|
||||||
);
|
);
|
||||||
|
@ -473,7 +473,7 @@ export class MysteryEncounterUiHandler extends UiHandler {
|
|||||||
const viewPartyText = addBBCodeTextObject(
|
const viewPartyText = addBBCodeTextObject(
|
||||||
globalScene.scaledCanvas.width,
|
globalScene.scaledCanvas.width,
|
||||||
-24,
|
-24,
|
||||||
getBBCodeFrag(i18next.t("mysteryEncounterMessages:view_party_button"), TextStyle.PARTY),
|
getBBCodeFrag(i18next.t("mysteryEncounterMessages:viewPartyButton"), TextStyle.PARTY),
|
||||||
TextStyle.PARTY,
|
TextStyle.PARTY,
|
||||||
);
|
);
|
||||||
this.optionsContainer.add(viewPartyText);
|
this.optionsContainer.add(viewPartyText);
|
||||||
@ -694,7 +694,7 @@ export class MysteryEncounterUiHandler extends UiHandler {
|
|||||||
duration: 750,
|
duration: 750,
|
||||||
onComplete: () => {
|
onComplete: () => {
|
||||||
this.dexProgressContainer.on("pointerover", () => {
|
this.dexProgressContainer.on("pointerover", () => {
|
||||||
globalScene.ui.showTooltip("", i18next.t("mysteryEncounterMessages:affects_pokedex"), true);
|
globalScene.ui.showTooltip("", i18next.t("mysteryEncounterMessages:affectsPokedex"), true);
|
||||||
});
|
});
|
||||||
this.dexProgressContainer.on("pointerout", () => {
|
this.dexProgressContainer.on("pointerout", () => {
|
||||||
globalScene.ui.hideTooltip();
|
globalScene.ui.hideTooltip();
|
||||||
|
@ -27,7 +27,7 @@ import { addBBCodeTextObject, addTextObject, getTextColor } from "#ui/text";
|
|||||||
import { addWindow } from "#ui/ui-theme";
|
import { addWindow } from "#ui/ui-theme";
|
||||||
import { applyChallenges } from "#utils/challenge-utils";
|
import { applyChallenges } from "#utils/challenge-utils";
|
||||||
import { BooleanHolder, getLocalizedSpriteKey, randInt } from "#utils/common";
|
import { BooleanHolder, getLocalizedSpriteKey, randInt } from "#utils/common";
|
||||||
import { toTitleCase } from "#utils/strings";
|
import { toCamelCase, toTitleCase } from "#utils/strings";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import type BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext";
|
import type BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext";
|
||||||
|
|
||||||
@ -1573,12 +1573,12 @@ export class PartyUiHandler extends MessageUiHandler {
|
|||||||
const formChangeItemModifiers = this.getFormChangeItemsModifiers(pokemon);
|
const formChangeItemModifiers = this.getFormChangeItemsModifiers(pokemon);
|
||||||
if (formChangeItemModifiers && option >= PartyOption.FORM_CHANGE_ITEM) {
|
if (formChangeItemModifiers && option >= PartyOption.FORM_CHANGE_ITEM) {
|
||||||
const modifier = formChangeItemModifiers[option - PartyOption.FORM_CHANGE_ITEM];
|
const modifier = formChangeItemModifiers[option - PartyOption.FORM_CHANGE_ITEM];
|
||||||
optionName = `${modifier.active ? i18next.t("partyUiHandler:DEACTIVATE") : i18next.t("partyUiHandler:ACTIVATE")} ${modifier.type.name}`;
|
optionName = `${modifier.active ? i18next.t("partyUiHandler:deactivate") : i18next.t("partyUiHandler:activate")} ${modifier.type.name}`;
|
||||||
} else if (option === PartyOption.UNPAUSE_EVOLUTION) {
|
} else if (option === PartyOption.UNPAUSE_EVOLUTION) {
|
||||||
optionName = `${pokemon.pauseEvolutions ? i18next.t("partyUiHandler:UNPAUSE_EVOLUTION") : i18next.t("partyUiHandler:PAUSE_EVOLUTION")}`;
|
optionName = `${pokemon.pauseEvolutions ? i18next.t("partyUiHandler:unpausedEvolution") : i18next.t("partyUiHandler:pauseEvolution")}`;
|
||||||
} else {
|
} else {
|
||||||
if (this.localizedOptions.includes(option)) {
|
if (this.localizedOptions.includes(option)) {
|
||||||
optionName = i18next.t(`partyUiHandler:${PartyOption[option]}`);
|
optionName = i18next.t(`partyUiHandler:${toCamelCase(PartyOption[option])}`);
|
||||||
} else {
|
} else {
|
||||||
optionName = toTitleCase(PartyOption[option]);
|
optionName = toTitleCase(PartyOption[option]);
|
||||||
}
|
}
|
||||||
@ -1595,7 +1595,7 @@ export class PartyUiHandler extends MessageUiHandler {
|
|||||||
.getLevelMoves()
|
.getLevelMoves()
|
||||||
.find(plm => plm[1] === move);
|
.find(plm => plm[1] === move);
|
||||||
} else if (option === PartyOption.ALL) {
|
} else if (option === PartyOption.ALL) {
|
||||||
optionName = i18next.t("partyUiHandler:ALL");
|
optionName = i18next.t("partyUiHandler:all");
|
||||||
} else {
|
} else {
|
||||||
const itemModifiers = this.getItemModifiers(pokemon);
|
const itemModifiers = this.getItemModifiers(pokemon);
|
||||||
const itemModifier = itemModifiers[option];
|
const itemModifier = itemModifiers[option];
|
||||||
@ -2190,7 +2190,7 @@ class PartyDiscardModeButton extends Phaser.GameObjects.Container {
|
|||||||
setup(party: PartyUiHandler) {
|
setup(party: PartyUiHandler) {
|
||||||
this.transferIcon = globalScene.add.sprite(0, 0, "party_transfer");
|
this.transferIcon = globalScene.add.sprite(0, 0, "party_transfer");
|
||||||
this.discardIcon = globalScene.add.sprite(0, 0, "party_discard");
|
this.discardIcon = globalScene.add.sprite(0, 0, "party_discard");
|
||||||
this.textBox = addTextObject(-8, -7, i18next.t("partyUiHandler:TRANSFER"), TextStyle.PARTY);
|
this.textBox = addTextObject(-8, -7, i18next.t("partyUiHandler:transfer"), TextStyle.PARTY);
|
||||||
this.party = party;
|
this.party = party;
|
||||||
|
|
||||||
this.add(this.transferIcon);
|
this.add(this.transferIcon);
|
||||||
@ -2238,14 +2238,14 @@ class PartyDiscardModeButton extends Phaser.GameObjects.Container {
|
|||||||
this.transferIcon.setVisible(true);
|
this.transferIcon.setVisible(true);
|
||||||
this.discardIcon.setVisible(false);
|
this.discardIcon.setVisible(false);
|
||||||
this.textBox.setVisible(true);
|
this.textBox.setVisible(true);
|
||||||
this.textBox.setText(i18next.t("partyUiHandler:TRANSFER"));
|
this.textBox.setText(i18next.t("partyUiHandler:transfer"));
|
||||||
this.transferIcon.displayWidth = this.textBox.text.length * 9 + 3;
|
this.transferIcon.displayWidth = this.textBox.text.length * 9 + 3;
|
||||||
break;
|
break;
|
||||||
case PartyUiMode.DISCARD:
|
case PartyUiMode.DISCARD:
|
||||||
this.transferIcon.setVisible(false);
|
this.transferIcon.setVisible(false);
|
||||||
this.discardIcon.setVisible(true);
|
this.discardIcon.setVisible(true);
|
||||||
this.textBox.setVisible(true);
|
this.textBox.setVisible(true);
|
||||||
this.textBox.setText(i18next.t("partyUiHandler:DISCARD"));
|
this.textBox.setText(i18next.t("partyUiHandler:discard"));
|
||||||
this.discardIcon.displayWidth = this.textBox.text.length * 9 + 3;
|
this.discardIcon.displayWidth = this.textBox.text.length * 9 + 3;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -57,7 +57,7 @@ import { addWindow } from "#ui/ui-theme";
|
|||||||
import { BooleanHolder, getLocalizedSpriteKey, isNullOrUndefined, padInt, rgbHexToRgba } from "#utils/common";
|
import { BooleanHolder, getLocalizedSpriteKey, isNullOrUndefined, padInt, rgbHexToRgba } from "#utils/common";
|
||||||
import { getEnumValues } from "#utils/enums";
|
import { getEnumValues } from "#utils/enums";
|
||||||
import { getPokemonSpecies, getPokemonSpeciesForm } from "#utils/pokemon-utils";
|
import { getPokemonSpecies, getPokemonSpeciesForm } from "#utils/pokemon-utils";
|
||||||
import { toTitleCase } from "#utils/strings";
|
import { toCamelCase, toTitleCase } from "#utils/strings";
|
||||||
import { argbFromRgba } from "@material/material-color-utilities";
|
import { argbFromRgba } from "@material/material-color-utilities";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import type BBCodeText from "phaser3-rex-plugins/plugins/gameobjects/tagtext/bbcodetext/BBCodeText";
|
import type BBCodeText from "phaser3-rex-plugins/plugins/gameobjects/tagtext/bbcodetext/BBCodeText";
|
||||||
@ -1517,13 +1517,13 @@ export class PokedexPageUiHandler extends MessageUiHandler {
|
|||||||
this.biomes.map(b => {
|
this.biomes.map(b => {
|
||||||
options.push({
|
options.push({
|
||||||
label:
|
label:
|
||||||
i18next.t(`biome:${BiomeId[b.biome].toUpperCase()}`) +
|
i18next.t(`biome:${toCamelCase(BiomeId[b.biome])}`) +
|
||||||
" - " +
|
" - " +
|
||||||
i18next.t(`biome:${BiomePoolTier[b.tier].toUpperCase()}`) +
|
i18next.t(`biome:${toCamelCase(BiomePoolTier[b.tier])}`) +
|
||||||
(b.tod.length === 1 && b.tod[0] === -1
|
(b.tod.length === 1 && b.tod[0] === -1
|
||||||
? ""
|
? ""
|
||||||
: " (" +
|
: " (" +
|
||||||
b.tod.map(tod => i18next.t(`biome:${TimeOfDay[tod].toUpperCase()}`)).join(", ") +
|
b.tod.map(tod => i18next.t(`biome:${toCamelCase(TimeOfDay[tod])}`)).join(", ") +
|
||||||
")"),
|
")"),
|
||||||
handler: () => false,
|
handler: () => false,
|
||||||
});
|
});
|
||||||
@ -1538,13 +1538,13 @@ export class PokedexPageUiHandler extends MessageUiHandler {
|
|||||||
this.preBiomes.map(b => {
|
this.preBiomes.map(b => {
|
||||||
options.push({
|
options.push({
|
||||||
label:
|
label:
|
||||||
i18next.t(`biome:${BiomeId[b.biome].toUpperCase()}`) +
|
i18next.t(`biome:${toCamelCase(BiomeId[b.biome])}`) +
|
||||||
" - " +
|
" - " +
|
||||||
i18next.t(`biome:${BiomePoolTier[b.tier].toUpperCase()}`) +
|
i18next.t(`biome:${toCamelCase(BiomePoolTier[b.tier])}`) +
|
||||||
(b.tod.length === 1 && b.tod[0] === -1
|
(b.tod.length === 1 && b.tod[0] === -1
|
||||||
? ""
|
? ""
|
||||||
: " (" +
|
: " (" +
|
||||||
b.tod.map(tod => i18next.t(`biome:${TimeOfDay[tod].toUpperCase()}`)).join(", ") +
|
b.tod.map(tod => i18next.t(`biome:${toCamelCase(TimeOfDay[tod])}`)).join(", ") +
|
||||||
")"),
|
")"),
|
||||||
handler: () => false,
|
handler: () => false,
|
||||||
});
|
});
|
||||||
@ -2612,7 +2612,7 @@ export class PokedexPageUiHandler extends MessageUiHandler {
|
|||||||
// Setting growth rate text
|
// Setting growth rate text
|
||||||
if (isFormCaught) {
|
if (isFormCaught) {
|
||||||
let growthReadable = toTitleCase(GrowthRate[species.growthRate]);
|
let growthReadable = toTitleCase(GrowthRate[species.growthRate]);
|
||||||
const growthAux = growthReadable.replace(" ", "_");
|
const growthAux = toCamelCase(growthReadable);
|
||||||
if (i18next.exists("growth:" + growthAux)) {
|
if (i18next.exists("growth:" + growthAux)) {
|
||||||
growthReadable = i18next.t(("growth:" + growthAux) as any);
|
growthReadable = i18next.t(("growth:" + growthAux) as any);
|
||||||
}
|
}
|
||||||
|
@ -47,6 +47,7 @@ import { BooleanHolder, fixedInt, getLocalizedSpriteKey, padInt, randIntRange, r
|
|||||||
import type { StarterPreferences } from "#utils/data";
|
import type { StarterPreferences } from "#utils/data";
|
||||||
import { loadStarterPreferences } from "#utils/data";
|
import { loadStarterPreferences } from "#utils/data";
|
||||||
import { getPokemonSpeciesForm, getPokerusStarters } from "#utils/pokemon-utils";
|
import { getPokemonSpeciesForm, getPokerusStarters } from "#utils/pokemon-utils";
|
||||||
|
import { toCamelCase } from "#utils/strings";
|
||||||
import { argbFromRgba } from "@material/material-color-utilities";
|
import { argbFromRgba } from "@material/material-color-utilities";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
|
|
||||||
@ -324,7 +325,7 @@ export class PokedexUiHandler extends MessageUiHandler {
|
|||||||
.filter(value => typeof value === "number") // Filter numeric values from the enum
|
.filter(value => typeof value === "number") // Filter numeric values from the enum
|
||||||
.map(
|
.map(
|
||||||
(biomeValue, index) =>
|
(biomeValue, index) =>
|
||||||
new DropDownOption(index, new DropDownLabel(i18next.t(`biome:${BiomeId[biomeValue].toUpperCase()}`))),
|
new DropDownOption(index, new DropDownLabel(i18next.t(`biome:${toCamelCase(BiomeId[biomeValue])}`))),
|
||||||
);
|
);
|
||||||
biomeOptions.push(new DropDownOption(biomeOptions.length, new DropDownLabel(i18next.t("filterBar:uncatchable"))));
|
biomeOptions.push(new DropDownOption(biomeOptions.length, new DropDownLabel(i18next.t("filterBar:uncatchable"))));
|
||||||
const biomeDropDown: DropDown = new DropDown(0, 0, biomeOptions, this.updateStarters, DropDownType.HYBRID);
|
const biomeDropDown: DropDown = new DropDown(0, 0, biomeOptions, this.updateStarters, DropDownType.HYBRID);
|
||||||
|
@ -700,7 +700,11 @@ export class RunInfoUiHandler extends UiHandler {
|
|||||||
const typeTextColor = `[color=${TypeColor[typeRule]}]`;
|
const typeTextColor = `[color=${TypeColor[typeRule]}]`;
|
||||||
const typeShadowColor = `[shadow=${TypeShadow[typeRule]}]`;
|
const typeShadowColor = `[shadow=${TypeShadow[typeRule]}]`;
|
||||||
const typeText =
|
const typeText =
|
||||||
typeTextColor + typeShadowColor + i18next.t(`pokemonInfo:Type.${typeRule}`)! + "[/color]" + "[/shadow]";
|
typeTextColor +
|
||||||
|
typeShadowColor +
|
||||||
|
i18next.t(`pokemonInfo:type.${toCamelCase(typeRule)}`)! +
|
||||||
|
"[/color]" +
|
||||||
|
"[/shadow]";
|
||||||
rules.push(typeText);
|
rules.push(typeText);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -794,15 +798,15 @@ export class RunInfoUiHandler extends UiHandler {
|
|||||||
pStats[i] = isMult < 1 ? pStats[i] + "[color=#40c8f8]↓[/color]" : pStats[i];
|
pStats[i] = isMult < 1 ? pStats[i] + "[color=#40c8f8]↓[/color]" : pStats[i];
|
||||||
pStats[i] = isMult > 1 ? pStats[i] + "[color=#f89890]↑[/color]" : pStats[i];
|
pStats[i] = isMult > 1 ? pStats[i] + "[color=#f89890]↑[/color]" : pStats[i];
|
||||||
}
|
}
|
||||||
const hp = i18next.t("pokemonInfo:Stat.HPshortened") + ": " + pStats[0];
|
const hp = i18next.t("pokemonInfo:stat.hpShortened") + ": " + pStats[0];
|
||||||
const atk = i18next.t("pokemonInfo:Stat.ATKshortened") + ": " + pStats[1];
|
const atk = i18next.t("pokemonInfo:stat.atkShortened") + ": " + pStats[1];
|
||||||
const def = i18next.t("pokemonInfo:Stat.DEFshortened") + ": " + pStats[2];
|
const def = i18next.t("pokemonInfo:stat.defShortened") + ": " + pStats[2];
|
||||||
const spatk = i18next.t("pokemonInfo:Stat.SPATKshortened") + ": " + pStats[3];
|
const spatk = i18next.t("pokemonInfo:stat.spatkShortened") + ": " + pStats[3];
|
||||||
const spdef = i18next.t("pokemonInfo:Stat.SPDEFshortened") + ": " + pStats[4];
|
const spdef = i18next.t("pokemonInfo:stat.spdefShortened") + ": " + pStats[4];
|
||||||
const speedLabel =
|
const speedLabel =
|
||||||
currentLanguage === "es-ES" || currentLanguage === "pt_BR"
|
currentLanguage === "es-ES" || currentLanguage === "pt_BR"
|
||||||
? i18next.t("runHistory:SPDshortened")
|
? i18next.t("runHistory:SPDshortened")
|
||||||
: i18next.t("pokemonInfo:Stat.SPDshortened");
|
: i18next.t("pokemonInfo:stat.spdShortened");
|
||||||
const speed = speedLabel + ": " + pStats[5];
|
const speed = speedLabel + ": " + pStats[5];
|
||||||
// Column 1: HP Atk Def
|
// Column 1: HP Atk Def
|
||||||
const pokeStatText1 = addBBCodeTextObject(-5, 0, hp, TextStyle.SUMMARY, {
|
const pokeStatText1 = addBBCodeTextObject(-5, 0, hp, TextStyle.SUMMARY, {
|
||||||
|
@ -73,7 +73,7 @@ import {
|
|||||||
import type { StarterPreferences } from "#utils/data";
|
import type { StarterPreferences } from "#utils/data";
|
||||||
import { loadStarterPreferences, saveStarterPreferences } from "#utils/data";
|
import { loadStarterPreferences, saveStarterPreferences } from "#utils/data";
|
||||||
import { getPokemonSpeciesForm, getPokerusStarters } from "#utils/pokemon-utils";
|
import { getPokemonSpeciesForm, getPokerusStarters } from "#utils/pokemon-utils";
|
||||||
import { toTitleCase } from "#utils/strings";
|
import { toCamelCase, toTitleCase } from "#utils/strings";
|
||||||
import { argbFromRgba } from "@material/material-color-utilities";
|
import { argbFromRgba } from "@material/material-color-utilities";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import type { GameObjects } from "phaser";
|
import type { GameObjects } from "phaser";
|
||||||
@ -2264,7 +2264,7 @@ export class StarterSelectUiHandler extends MessageUiHandler {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
options.push({
|
options.push({
|
||||||
label: i18next.t("menuUiHandler:POKEDEX"),
|
label: i18next.t("menuUiHandler:pokedex"),
|
||||||
handler: () => {
|
handler: () => {
|
||||||
ui.setMode(UiMode.STARTER_SELECT).then(() => {
|
ui.setMode(UiMode.STARTER_SELECT).then(() => {
|
||||||
const attributes = {
|
const attributes = {
|
||||||
@ -3470,7 +3470,7 @@ export class StarterSelectUiHandler extends MessageUiHandler {
|
|||||||
|
|
||||||
//Growth translate
|
//Growth translate
|
||||||
let growthReadable = toTitleCase(GrowthRate[species.growthRate]);
|
let growthReadable = toTitleCase(GrowthRate[species.growthRate]);
|
||||||
const growthAux = growthReadable.replace(" ", "_");
|
const growthAux = toCamelCase(growthReadable);
|
||||||
if (i18next.exists("growth:" + growthAux)) {
|
if (i18next.exists("growth:" + growthAux)) {
|
||||||
growthReadable = i18next.t(("growth:" + growthAux) as any);
|
growthReadable = i18next.t(("growth:" + growthAux) as any);
|
||||||
}
|
}
|
||||||
|
@ -37,7 +37,7 @@ import {
|
|||||||
rgbHexToRgba,
|
rgbHexToRgba,
|
||||||
} from "#utils/common";
|
} from "#utils/common";
|
||||||
import { getEnumValues } from "#utils/enums";
|
import { getEnumValues } from "#utils/enums";
|
||||||
import { toTitleCase } from "#utils/strings";
|
import { toCamelCase, toTitleCase } from "#utils/strings";
|
||||||
import { argbFromRgba } from "@material/material-color-utilities";
|
import { argbFromRgba } from "@material/material-color-utilities";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
|
|
||||||
@ -962,7 +962,7 @@ export class SummaryUiHandler extends UiHandler {
|
|||||||
this.passiveContainer?.descriptionText?.setVisible(false);
|
this.passiveContainer?.descriptionText?.setVisible(false);
|
||||||
|
|
||||||
const closeFragment = getBBCodeFrag("", TextStyle.WINDOW_ALT);
|
const closeFragment = getBBCodeFrag("", TextStyle.WINDOW_ALT);
|
||||||
const rawNature = toTitleCase(Nature[this.pokemon?.getNature()!]); // TODO: is this bang correct?
|
const rawNature = toCamelCase(Nature[this.pokemon?.getNature()!]); // TODO: is this bang correct?
|
||||||
const nature = `${getBBCodeFrag(toTitleCase(getNatureName(this.pokemon?.getNature()!)), TextStyle.SUMMARY_RED)}${closeFragment}`; // TODO: is this bang correct?
|
const nature = `${getBBCodeFrag(toTitleCase(getNatureName(this.pokemon?.getNature()!)), TextStyle.SUMMARY_RED)}${closeFragment}`; // TODO: is this bang correct?
|
||||||
|
|
||||||
const memoString = i18next.t("pokemonSummary:memoString", {
|
const memoString = i18next.t("pokemonSummary:memoString", {
|
||||||
|
@ -66,7 +66,7 @@ describe("An Offer You Can't Refuse - Mystery Encounter", () => {
|
|||||||
expect(AnOfferYouCantRefuseEncounter.dialogue).toBeDefined();
|
expect(AnOfferYouCantRefuseEncounter.dialogue).toBeDefined();
|
||||||
expect(AnOfferYouCantRefuseEncounter.dialogue.intro).toStrictEqual([
|
expect(AnOfferYouCantRefuseEncounter.dialogue.intro).toStrictEqual([
|
||||||
{ text: `${namespace}:intro` },
|
{ text: `${namespace}:intro` },
|
||||||
{ speaker: `${namespace}:speaker`, text: `${namespace}:intro_dialogue` },
|
{ speaker: `${namespace}:speaker`, text: `${namespace}:introDialogue` },
|
||||||
]);
|
]);
|
||||||
expect(AnOfferYouCantRefuseEncounter.dialogue.encounterOptionsDialogue?.title).toBe(`${namespace}:title`);
|
expect(AnOfferYouCantRefuseEncounter.dialogue.encounterOptionsDialogue?.title).toBe(`${namespace}:title`);
|
||||||
expect(AnOfferYouCantRefuseEncounter.dialogue.encounterOptionsDialogue?.description).toBe(
|
expect(AnOfferYouCantRefuseEncounter.dialogue.encounterOptionsDialogue?.description).toBe(
|
||||||
@ -180,7 +180,7 @@ describe("An Offer You Can't Refuse - Mystery Encounter", () => {
|
|||||||
expect(option.dialogue).toStrictEqual({
|
expect(option.dialogue).toStrictEqual({
|
||||||
buttonLabel: `${namespace}:option.2.label`,
|
buttonLabel: `${namespace}:option.2.label`,
|
||||||
buttonTooltip: `${namespace}:option.2.tooltip`,
|
buttonTooltip: `${namespace}:option.2.tooltip`,
|
||||||
disabledButtonTooltip: `${namespace}:option.2.tooltip_disabled`,
|
disabledButtonTooltip: `${namespace}:option.2.tooltipDisabled`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
|
@ -194,7 +194,7 @@ describe("Berries Abound - Mystery Encounter", () => {
|
|||||||
|
|
||||||
// Should be enraged
|
// Should be enraged
|
||||||
expect(enemyField[0].summonData.statStages).toEqual([0, 1, 0, 1, 1, 0, 0]);
|
expect(enemyField[0].summonData.statStages).toEqual([0, 1, 0, 1, 1, 0, 0]);
|
||||||
expect(encounterTextSpy).toHaveBeenCalledWith(`${namespace}:option.2.selected_bad`);
|
expect(encounterTextSpy).toHaveBeenCalledWith(`${namespace}:option.2.selectedBad`);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should start battle if fastest pokemon is slower than boss above wave 50", async () => {
|
it("should start battle if fastest pokemon is slower than boss above wave 50", async () => {
|
||||||
@ -218,7 +218,7 @@ describe("Berries Abound - Mystery Encounter", () => {
|
|||||||
|
|
||||||
// Should be enraged
|
// Should be enraged
|
||||||
expect(enemyField[0].summonData.statStages).toEqual([1, 1, 1, 1, 1, 0, 0]);
|
expect(enemyField[0].summonData.statStages).toEqual([1, 1, 1, 1, 1, 0, 0]);
|
||||||
expect(encounterTextSpy).toHaveBeenCalledWith(`${namespace}:option.2.selected_bad`);
|
expect(encounterTextSpy).toHaveBeenCalledWith(`${namespace}:option.2.selectedBad`);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("Should skip battle when fastest pokemon is faster than boss", async () => {
|
it("Should skip battle when fastest pokemon is faster than boss", async () => {
|
||||||
|
@ -181,7 +181,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
text: `${namespace}:intro_dialogue`,
|
text: `${namespace}:introDialogue`,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
expect(BugTypeSuperfanEncounter.dialogue.encounterOptionsDialogue?.title).toBe(`${namespace}:title`);
|
expect(BugTypeSuperfanEncounter.dialogue.encounterOptionsDialogue?.title).toBe(`${namespace}:title`);
|
||||||
@ -389,7 +389,7 @@ describe("Bug-Type Superfan - Mystery Encounter", () => {
|
|||||||
expect(option.dialogue).toStrictEqual({
|
expect(option.dialogue).toStrictEqual({
|
||||||
buttonLabel: `${namespace}:option.2.label`,
|
buttonLabel: `${namespace}:option.2.label`,
|
||||||
buttonTooltip: `${namespace}:option.2.tooltip`,
|
buttonTooltip: `${namespace}:option.2.tooltip`,
|
||||||
disabledButtonTooltip: `${namespace}:option.2.disabled_tooltip`,
|
disabledButtonTooltip: `${namespace}:option.2.disabledTooltip`,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -513,17 +513,17 @@ describe("Bug-Type Superfan - Mystery Encounter", () => {
|
|||||||
expect(option.dialogue).toStrictEqual({
|
expect(option.dialogue).toStrictEqual({
|
||||||
buttonLabel: `${namespace}:option.3.label`,
|
buttonLabel: `${namespace}:option.3.label`,
|
||||||
buttonTooltip: `${namespace}:option.3.tooltip`,
|
buttonTooltip: `${namespace}:option.3.tooltip`,
|
||||||
disabledButtonTooltip: `${namespace}:option.3.disabled_tooltip`,
|
disabledButtonTooltip: `${namespace}:option.3.disabledTooltip`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.3.selected`,
|
text: `${namespace}:option.3.selected`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
text: `${namespace}:option.3.selected_dialogue`,
|
text: `${namespace}:option.3.selectedDialogue`,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
secondOptionPrompt: `${namespace}:option.3.select_prompt`,
|
secondOptionPrompt: `${namespace}:option.3.selectPrompt`,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -80,7 +80,7 @@ describe("Clowning Around - Mystery Encounter", () => {
|
|||||||
{ text: `${namespace}:intro` },
|
{ text: `${namespace}:intro` },
|
||||||
{
|
{
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
text: `${namespace}:intro_dialogue`,
|
text: `${namespace}:introDialogue`,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
expect(ClowningAroundEncounter.dialogue.encounterOptionsDialogue?.title).toBe(`${namespace}:title`);
|
expect(ClowningAroundEncounter.dialogue.encounterOptionsDialogue?.title).toBe(`${namespace}:title`);
|
||||||
@ -249,11 +249,11 @@ describe("Clowning Around - Mystery Encounter", () => {
|
|||||||
text: `${namespace}:option.2.selected`,
|
text: `${namespace}:option.2.selected`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.2.selected_2`,
|
text: `${namespace}:option.2.selected2`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
text: `${namespace}:option.2.selected_3`,
|
text: `${namespace}:option.2.selected3`,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
@ -334,11 +334,11 @@ describe("Clowning Around - Mystery Encounter", () => {
|
|||||||
text: `${namespace}:option.3.selected`,
|
text: `${namespace}:option.3.selected`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.3.selected_2`,
|
text: `${namespace}:option.3.selected2`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
text: `${namespace}:option.3.selected_3`,
|
text: `${namespace}:option.3.selected3`,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
@ -186,8 +186,8 @@ describe("Dancing Lessons - Mystery Encounter", () => {
|
|||||||
expect(option.dialogue).toStrictEqual({
|
expect(option.dialogue).toStrictEqual({
|
||||||
buttonLabel: `${namespace}:option.3.label`,
|
buttonLabel: `${namespace}:option.3.label`,
|
||||||
buttonTooltip: `${namespace}:option.3.tooltip`,
|
buttonTooltip: `${namespace}:option.3.tooltip`,
|
||||||
disabledButtonTooltip: `${namespace}:option.3.disabled_tooltip`,
|
disabledButtonTooltip: `${namespace}:option.3.disabledTooltip`,
|
||||||
secondOptionPrompt: `${namespace}:option.3.select_prompt`,
|
secondOptionPrompt: `${namespace}:option.3.selectPrompt`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.3.selected`,
|
text: `${namespace}:option.3.selected`,
|
||||||
|
@ -186,7 +186,7 @@ describe("Delibird-y - Mystery Encounter", () => {
|
|||||||
expect(option.dialogue).toStrictEqual({
|
expect(option.dialogue).toStrictEqual({
|
||||||
buttonLabel: `${namespace}:option.2.label`,
|
buttonLabel: `${namespace}:option.2.label`,
|
||||||
buttonTooltip: `${namespace}:option.2.tooltip`,
|
buttonTooltip: `${namespace}:option.2.tooltip`,
|
||||||
secondOptionPrompt: `${namespace}:option.2.select_prompt`,
|
secondOptionPrompt: `${namespace}:option.2.selectPrompt`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.2.selected`,
|
text: `${namespace}:option.2.selected`,
|
||||||
@ -348,7 +348,7 @@ describe("Delibird-y - Mystery Encounter", () => {
|
|||||||
expect(option.dialogue).toStrictEqual({
|
expect(option.dialogue).toStrictEqual({
|
||||||
buttonLabel: `${namespace}:option.3.label`,
|
buttonLabel: `${namespace}:option.3.label`,
|
||||||
buttonTooltip: `${namespace}:option.3.tooltip`,
|
buttonTooltip: `${namespace}:option.3.tooltip`,
|
||||||
secondOptionPrompt: `${namespace}:option.3.select_prompt`,
|
secondOptionPrompt: `${namespace}:option.3.selectPrompt`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.3.selected`,
|
text: `${namespace}:option.3.selected`,
|
||||||
|
@ -61,7 +61,7 @@ describe("Department Store Sale - Mystery Encounter", () => {
|
|||||||
{ text: `${namespace}:intro` },
|
{ text: `${namespace}:intro` },
|
||||||
{
|
{
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
text: `${namespace}:intro_dialogue`,
|
text: `${namespace}:introDialogue`,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
expect(DepartmentStoreSaleEncounter.dialogue.encounterOptionsDialogue?.title).toBe(`${namespace}:title`);
|
expect(DepartmentStoreSaleEncounter.dialogue.encounterOptionsDialogue?.title).toBe(`${namespace}:title`);
|
||||||
|
@ -61,7 +61,7 @@ describe("Field Trip - Mystery Encounter", () => {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
text: `${namespace}:intro_dialogue`,
|
text: `${namespace}:introDialogue`,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
expect(FieldTripEncounter.dialogue.encounterOptionsDialogue?.title).toBe(`${namespace}:title`);
|
expect(FieldTripEncounter.dialogue.encounterOptionsDialogue?.title).toBe(`${namespace}:title`);
|
||||||
@ -78,7 +78,7 @@ describe("Field Trip - Mystery Encounter", () => {
|
|||||||
expect(option.dialogue).toStrictEqual({
|
expect(option.dialogue).toStrictEqual({
|
||||||
buttonLabel: `${namespace}:option.1.label`,
|
buttonLabel: `${namespace}:option.1.label`,
|
||||||
buttonTooltip: `${namespace}:option.1.tooltip`,
|
buttonTooltip: `${namespace}:option.1.tooltip`,
|
||||||
secondOptionPrompt: `${namespace}:second_option_prompt`,
|
secondOptionPrompt: `${namespace}:secondOptionPrompt`,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -139,7 +139,7 @@ describe("Field Trip - Mystery Encounter", () => {
|
|||||||
expect(option.dialogue).toStrictEqual({
|
expect(option.dialogue).toStrictEqual({
|
||||||
buttonLabel: `${namespace}:option.2.label`,
|
buttonLabel: `${namespace}:option.2.label`,
|
||||||
buttonTooltip: `${namespace}:option.2.tooltip`,
|
buttonTooltip: `${namespace}:option.2.tooltip`,
|
||||||
secondOptionPrompt: `${namespace}:second_option_prompt`,
|
secondOptionPrompt: `${namespace}:secondOptionPrompt`,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -200,7 +200,7 @@ describe("Field Trip - Mystery Encounter", () => {
|
|||||||
expect(option.dialogue).toStrictEqual({
|
expect(option.dialogue).toStrictEqual({
|
||||||
buttonLabel: `${namespace}:option.3.label`,
|
buttonLabel: `${namespace}:option.3.label`,
|
||||||
buttonTooltip: `${namespace}:option.3.tooltip`,
|
buttonTooltip: `${namespace}:option.3.tooltip`,
|
||||||
secondOptionPrompt: `${namespace}:second_option_prompt`,
|
secondOptionPrompt: `${namespace}:secondOptionPrompt`,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -253,7 +253,7 @@ describe("Fiery Fallout - Mystery Encounter", () => {
|
|||||||
expect(option1.dialogue).toStrictEqual({
|
expect(option1.dialogue).toStrictEqual({
|
||||||
buttonLabel: `${namespace}:option.3.label`,
|
buttonLabel: `${namespace}:option.3.label`,
|
||||||
buttonTooltip: `${namespace}:option.3.tooltip`,
|
buttonTooltip: `${namespace}:option.3.tooltip`,
|
||||||
disabledButtonTooltip: `${namespace}:option.3.disabled_tooltip`,
|
disabledButtonTooltip: `${namespace}:option.3.disabledTooltip`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.3.selected`,
|
text: `${namespace}:option.3.selected`,
|
||||||
|
@ -143,7 +143,7 @@ describe("Fight or Flight - Mystery Encounter", () => {
|
|||||||
expect(option.dialogue).toStrictEqual({
|
expect(option.dialogue).toStrictEqual({
|
||||||
buttonLabel: `${namespace}:option.2.label`,
|
buttonLabel: `${namespace}:option.2.label`,
|
||||||
buttonTooltip: `${namespace}:option.2.tooltip`,
|
buttonTooltip: `${namespace}:option.2.tooltip`,
|
||||||
disabledButtonTooltip: `${namespace}:option.2.disabled_tooltip`,
|
disabledButtonTooltip: `${namespace}:option.2.disabledTooltip`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.2.selected`,
|
text: `${namespace}:option.2.selected`,
|
||||||
|
@ -71,7 +71,7 @@ describe("Fun And Games! - Mystery Encounter", () => {
|
|||||||
expect(FunAndGamesEncounter.dialogue.intro).toStrictEqual([
|
expect(FunAndGamesEncounter.dialogue.intro).toStrictEqual([
|
||||||
{
|
{
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
text: `${namespace}:intro_dialogue`,
|
text: `${namespace}:introDialogue`,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
expect(FunAndGamesEncounter.dialogue.encounterOptionsDialogue?.title).toBe(`${namespace}:title`);
|
expect(FunAndGamesEncounter.dialogue.encounterOptionsDialogue?.title).toBe(`${namespace}:title`);
|
||||||
|
@ -98,7 +98,7 @@ describe("Global Trade System - Mystery Encounter", () => {
|
|||||||
expect(option.dialogue).toStrictEqual({
|
expect(option.dialogue).toStrictEqual({
|
||||||
buttonLabel: `${namespace}:option.1.label`,
|
buttonLabel: `${namespace}:option.1.label`,
|
||||||
buttonTooltip: `${namespace}:option.1.tooltip`,
|
buttonTooltip: `${namespace}:option.1.tooltip`,
|
||||||
secondOptionPrompt: `${namespace}:option.1.trade_options_prompt`,
|
secondOptionPrompt: `${namespace}:option.1.tradeOptionsPrompt`,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -210,7 +210,7 @@ describe("Global Trade System - Mystery Encounter", () => {
|
|||||||
expect(option.dialogue).toStrictEqual({
|
expect(option.dialogue).toStrictEqual({
|
||||||
buttonLabel: `${namespace}:option.3.label`,
|
buttonLabel: `${namespace}:option.3.label`,
|
||||||
buttonTooltip: `${namespace}:option.3.tooltip`,
|
buttonTooltip: `${namespace}:option.3.tooltip`,
|
||||||
secondOptionPrompt: `${namespace}:option.3.trade_options_prompt`,
|
secondOptionPrompt: `${namespace}:option.3.tradeOptionsPrompt`,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -99,9 +99,9 @@ describe("Lost at Sea - Mystery Encounter", () => {
|
|||||||
expect(option1.dialogue).toBeDefined();
|
expect(option1.dialogue).toBeDefined();
|
||||||
expect(option1.dialogue).toStrictEqual({
|
expect(option1.dialogue).toStrictEqual({
|
||||||
buttonLabel: `${namespace}:option.1.label`,
|
buttonLabel: `${namespace}:option.1.label`,
|
||||||
disabledButtonLabel: `${namespace}:option.1.label_disabled`,
|
disabledButtonLabel: `${namespace}:option.1.labelDisabled`,
|
||||||
buttonTooltip: `${namespace}:option.1.tooltip`,
|
buttonTooltip: `${namespace}:option.1.tooltip`,
|
||||||
disabledButtonTooltip: `${namespace}:option.1.tooltip_disabled`,
|
disabledButtonTooltip: `${namespace}:option.1.tooltipDisabled`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.1.selected`,
|
text: `${namespace}:option.1.selected`,
|
||||||
@ -162,9 +162,9 @@ describe("Lost at Sea - Mystery Encounter", () => {
|
|||||||
expect(option2.dialogue).toBeDefined();
|
expect(option2.dialogue).toBeDefined();
|
||||||
expect(option2.dialogue).toStrictEqual({
|
expect(option2.dialogue).toStrictEqual({
|
||||||
buttonLabel: `${namespace}:option.2.label`,
|
buttonLabel: `${namespace}:option.2.label`,
|
||||||
disabledButtonLabel: `${namespace}:option.2.label_disabled`,
|
disabledButtonLabel: `${namespace}:option.2.labelDisabled`,
|
||||||
buttonTooltip: `${namespace}:option.2.tooltip`,
|
buttonTooltip: `${namespace}:option.2.tooltip`,
|
||||||
disabledButtonTooltip: `${namespace}:option.2.tooltip_disabled`,
|
disabledButtonTooltip: `${namespace}:option.2.tooltipDisabled`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.2.selected`,
|
text: `${namespace}:option.2.selected`,
|
||||||
|
@ -65,7 +65,7 @@ describe("Part-Timer - Mystery Encounter", () => {
|
|||||||
{ text: `${namespace}:intro` },
|
{ text: `${namespace}:intro` },
|
||||||
{
|
{
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
text: `${namespace}:intro_dialogue`,
|
text: `${namespace}:introDialogue`,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
expect(PartTimerEncounter.dialogue.encounterOptionsDialogue?.title).toBe(`${namespace}:title`);
|
expect(PartTimerEncounter.dialogue.encounterOptionsDialogue?.title).toBe(`${namespace}:title`);
|
||||||
@ -219,7 +219,7 @@ describe("Part-Timer - Mystery Encounter", () => {
|
|||||||
expect(option.dialogue).toStrictEqual({
|
expect(option.dialogue).toStrictEqual({
|
||||||
buttonLabel: `${namespace}:option.3.label`,
|
buttonLabel: `${namespace}:option.3.label`,
|
||||||
buttonTooltip: `${namespace}:option.3.tooltip`,
|
buttonTooltip: `${namespace}:option.3.tooltip`,
|
||||||
disabledButtonTooltip: `${namespace}:option.3.disabled_tooltip`,
|
disabledButtonTooltip: `${namespace}:option.3.disabledTooltip`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.3.selected`,
|
text: `${namespace}:option.3.selected`,
|
||||||
|
@ -207,7 +207,7 @@ describe("Teleporting Hijinks - Mystery Encounter", () => {
|
|||||||
expect(option.dialogue).toStrictEqual({
|
expect(option.dialogue).toStrictEqual({
|
||||||
buttonLabel: `${namespace}:option.2.label`,
|
buttonLabel: `${namespace}:option.2.label`,
|
||||||
buttonTooltip: `${namespace}:option.2.tooltip`,
|
buttonTooltip: `${namespace}:option.2.tooltip`,
|
||||||
disabledButtonTooltip: `${namespace}:option.2.disabled_tooltip`,
|
disabledButtonTooltip: `${namespace}:option.2.disabledTooltip`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.2.selected`,
|
text: `${namespace}:option.2.selected`,
|
||||||
|
@ -71,7 +71,7 @@ describe("The Expert Pokémon Breeder - Mystery Encounter", () => {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
speaker: "trainerNames:expert_pokemon_breeder",
|
speaker: "trainerNames:expert_pokemon_breeder",
|
||||||
text: `${namespace}:intro_dialogue`,
|
text: `${namespace}:introDialogue`,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
expect(TheExpertPokemonBreederEncounter.dialogue.encounterOptionsDialogue?.title).toBe(`${namespace}:title`);
|
expect(TheExpertPokemonBreederEncounter.dialogue.encounterOptionsDialogue?.title).toBe(`${namespace}:title`);
|
||||||
|
@ -67,7 +67,7 @@ describe("The Pokemon Salesman - Mystery Encounter", () => {
|
|||||||
expect(dialogue).toBeDefined();
|
expect(dialogue).toBeDefined();
|
||||||
expect(dialogue.intro).toStrictEqual([
|
expect(dialogue.intro).toStrictEqual([
|
||||||
{ text: `${namespace}:intro` },
|
{ text: `${namespace}:intro` },
|
||||||
{ speaker: `${namespace}:speaker`, text: `${namespace}:intro_dialogue` },
|
{ speaker: `${namespace}:speaker`, text: `${namespace}:introDialogue` },
|
||||||
]);
|
]);
|
||||||
const { title, description, query } = dialogue.encounterOptionsDialogue!;
|
const { title, description, query } = dialogue.encounterOptionsDialogue!;
|
||||||
expect(title).toBe(`${namespace}:title`);
|
expect(title).toBe(`${namespace}:title`);
|
||||||
@ -120,7 +120,7 @@ describe("The Pokemon Salesman - Mystery Encounter", () => {
|
|||||||
buttonTooltip: expect.stringMatching(new RegExp(`^${namespace}\\:option\\.1\\.tooltip(_shiny)?$`)),
|
buttonTooltip: expect.stringMatching(new RegExp(`^${namespace}\\:option\\.1\\.tooltip(_shiny)?$`)),
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.1.selected_message`,
|
text: `${namespace}:option.1.selectedMessage`,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
@ -73,7 +73,7 @@ describe("The Winstrate Challenge - Mystery Encounter", () => {
|
|||||||
{ text: `${namespace}:intro` },
|
{ text: `${namespace}:intro` },
|
||||||
{
|
{
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
text: `${namespace}:intro_dialogue`,
|
text: `${namespace}:introDialogue`,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
expect(TheWinstrateChallengeEncounter.dialogue.encounterOptionsDialogue?.title).toBe(`${namespace}:title`);
|
expect(TheWinstrateChallengeEncounter.dialogue.encounterOptionsDialogue?.title).toBe(`${namespace}:title`);
|
||||||
|
@ -172,7 +172,7 @@ describe("Uncommon Breed - Mystery Encounter", () => {
|
|||||||
expect(option.dialogue).toStrictEqual({
|
expect(option.dialogue).toStrictEqual({
|
||||||
buttonLabel: `${namespace}:option.2.label`,
|
buttonLabel: `${namespace}:option.2.label`,
|
||||||
buttonTooltip: `${namespace}:option.2.tooltip`,
|
buttonTooltip: `${namespace}:option.2.tooltip`,
|
||||||
disabledButtonTooltip: `${namespace}:option.2.disabled_tooltip`,
|
disabledButtonTooltip: `${namespace}:option.2.disabledTooltip`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.2.selected`,
|
text: `${namespace}:option.2.selected`,
|
||||||
@ -237,7 +237,7 @@ describe("Uncommon Breed - Mystery Encounter", () => {
|
|||||||
expect(option.dialogue).toStrictEqual({
|
expect(option.dialogue).toStrictEqual({
|
||||||
buttonLabel: `${namespace}:option.3.label`,
|
buttonLabel: `${namespace}:option.3.label`,
|
||||||
buttonTooltip: `${namespace}:option.3.tooltip`,
|
buttonTooltip: `${namespace}:option.3.tooltip`,
|
||||||
disabledButtonTooltip: `${namespace}:option.3.disabled_tooltip`,
|
disabledButtonTooltip: `${namespace}:option.3.disabledTooltip`,
|
||||||
selected: [
|
selected: [
|
||||||
{
|
{
|
||||||
text: `${namespace}:option.3.selected`,
|
text: `${namespace}:option.3.selected`,
|
||||||
|
@ -68,7 +68,7 @@ describe("Weird Dream - Mystery Encounter", () => {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
speaker: `${namespace}:speaker`,
|
speaker: `${namespace}:speaker`,
|
||||||
text: `${namespace}:intro_dialogue`,
|
text: `${namespace}:introDialogue`,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
expect(WeirdDreamEncounter.dialogue.encounterOptionsDialogue?.title).toBe(`${namespace}:title`);
|
expect(WeirdDreamEncounter.dialogue.encounterOptionsDialogue?.title).toBe(`${namespace}:title`);
|
||||||
|
Loading…
Reference in New Issue
Block a user