@@ -59,7 +59,7 @@
N
-
diff --git a/src/ui-inputs.ts b/src/ui-inputs.ts
index e6a0ed7a69c..951aec2a3b6 100644
--- a/src/ui-inputs.ts
+++ b/src/ui-inputs.ts
@@ -86,7 +86,7 @@ export class UiInputs {
[Button.CYCLE_GENDER]: () => this.buttonCycleOption(Button.CYCLE_GENDER),
[Button.CYCLE_ABILITY]: () => this.buttonCycleOption(Button.CYCLE_ABILITY),
[Button.CYCLE_NATURE]: () => this.buttonCycleOption(Button.CYCLE_NATURE),
- [Button.V]: () => this.buttonCycleOption(Button.V),
+ [Button.CYCLE_TERA]: () => this.buttonCycleOption(Button.CYCLE_TERA),
[Button.SPEED_UP]: () => this.buttonSpeedChange(),
[Button.SLOW_DOWN]: () => this.buttonSpeedChange(false),
};
@@ -109,7 +109,7 @@ export class UiInputs {
[Button.CYCLE_GENDER]: () => undefined,
[Button.CYCLE_ABILITY]: () => undefined,
[Button.CYCLE_NATURE]: () => undefined,
- [Button.V]: () => this.buttonInfo(false),
+ [Button.CYCLE_TERA]: () => undefined,
[Button.SPEED_UP]: () => undefined,
[Button.SLOW_DOWN]: () => undefined,
};
@@ -197,7 +197,7 @@ export class UiInputs {
const uiHandler = globalScene.ui?.getHandler();
if (whitelist.some(handler => uiHandler instanceof handler)) {
globalScene.ui.processInput(button);
- } else if (button === Button.V) {
+ } else if (button === Button.CYCLE_TERA) {
this.buttonInfo(true);
}
}
diff --git a/src/ui/party-exp-bar.ts b/src/ui/party-exp-bar.ts
index 75970a5908b..b9da9320fcb 100644
--- a/src/ui/party-exp-bar.ts
+++ b/src/ui/party-exp-bar.ts
@@ -1,6 +1,7 @@
import { globalScene } from "#app/global-scene";
import type Pokemon from "../field/pokemon";
import { TextStyle, addTextObject } from "./text";
+import i18next from "i18next";
export default class PartyExpBar extends Phaser.GameObjects.Container {
private bg: Phaser.GameObjects.NineSlice;
@@ -43,9 +44,9 @@ export default class PartyExpBar extends Phaser.GameObjects.Container {
// if we want to only display the level in the small frame
if (showOnlyLevelUp) {
if (newLevel > 200) { // if the level is greater than 200, we only display Lv. UP
- this.expText.setText("Lv. UP");
+ this.expText.setText(i18next.t("battleScene:levelUp"));
} else { // otherwise we display Lv. Up and the new level
- this.expText.setText(`Lv. UP: ${newLevel.toString()}`);
+ this.expText.setText(i18next.t("battleScene:levelUpWithLevel", { level: newLevel }));
}
} else {
// if we want to display the exp
diff --git a/src/ui/pokedex-ui-handler.ts b/src/ui/pokedex-ui-handler.ts
index 5180d7bd956..1ba1b846224 100644
--- a/src/ui/pokedex-ui-handler.ts
+++ b/src/ui/pokedex-ui-handler.ts
@@ -919,7 +919,7 @@ export default class PokedexUiHandler extends MessageUiHandler {
} else {
error = true;
}
- } else if (button === Button.V) {
+ } else if (button === Button.CYCLE_TERA) {
if (!this.filterTextMode && !this.showingTray) {
this.cursorObj.setVisible(false);
this.setSpecies(null);
@@ -1170,9 +1170,6 @@ export default class PokedexUiHandler extends MessageUiHandler {
case SettingKeyboard.Button_Cycle_Shiny:
iconPath = "R.png";
break;
- case SettingKeyboard.Button_Cycle_Variant:
- iconPath = "V.png";
- break;
case SettingKeyboard.Button_Cycle_Form:
iconPath = "F.png";
break;
diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts
index b919679be00..a102fc9dc08 100644
--- a/src/ui/starter-select-ui-handler.ts
+++ b/src/ui/starter-select-ui-handler.ts
@@ -56,6 +56,8 @@ import { getPassiveCandyCount, getValueReductionCandyCounts, getSameSpeciesEggCa
import { BooleanHolder, fixedInt, getLocalizedSpriteKey, isNullOrUndefined, NumberHolder, padInt, randIntRange, rgbHexToRgba, toReadableString } from "#app/utils";
import type { Nature } from "#enums/nature";
import { PLAYER_PARTY_MAX_SIZE } from "#app/constants";
+import { achvs } from "#app/system/achv";
+import * as Utils from "../utils";
export type StarterSelectCallback = (starters: Starter[]) => void;
@@ -68,6 +70,7 @@ export interface Starter {
moveset?: StarterMoveset;
pokerus: boolean;
nickname?: string;
+ teraType?: Type;
}
interface LanguageSetting {
@@ -212,6 +215,7 @@ interface SpeciesDetails {
abilityIndex?: number,
natureIndex?: number,
forSeen?: boolean, // default = false
+ teraType?: Type,
}
export default class StarterSelectUiHandler extends MessageUiHandler {
@@ -262,6 +266,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
private pokemonShinyIcon: Phaser.GameObjects.Sprite;
private pokemonPassiveDisabledIcon: Phaser.GameObjects.Sprite;
private pokemonPassiveLockedIcon: Phaser.GameObjects.Sprite;
+ private teraIcon: Phaser.GameObjects.Sprite;
private activeTooltip: "ABILITY" | "PASSIVE" | "CANDY" | undefined;
private instructionsContainer: Phaser.GameObjects.Container;
@@ -271,12 +276,14 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
private abilityIconElement: Phaser.GameObjects.Sprite;
private genderIconElement: Phaser.GameObjects.Sprite;
private natureIconElement: Phaser.GameObjects.Sprite;
+ private teraIconElement: Phaser.GameObjects.Sprite;
private goFilterIconElement: Phaser.GameObjects.Sprite;
private shinyLabel: Phaser.GameObjects.Text;
private formLabel: Phaser.GameObjects.Text;
private genderLabel: Phaser.GameObjects.Text;
private abilityLabel: Phaser.GameObjects.Text;
private natureLabel: Phaser.GameObjects.Text;
+ private teraLabel: Phaser.GameObjects.Text;
private goFilterLabel: Phaser.GameObjects.Text;
private starterSelectMessageBox: Phaser.GameObjects.NineSlice;
@@ -292,6 +299,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
private dexAttrCursor: bigint = 0n;
private abilityCursor: number = -1;
private natureCursor: number = -1;
+ private teraCursor: Type = Type.UNKNOWN;
private filterBarCursor: number = 0;
private starterMoveset: StarterMoveset | null;
private scrollCursor: number;
@@ -304,6 +312,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
private starterAttr: bigint[] = [];
private starterAbilityIndexes: number[] = [];
private starterNatures: Nature[] = [];
+ private starterTeras: Type[] = [];
private starterMovesets: StarterMoveset[] = [];
private speciesStarterDexEntry: DexEntry | null;
private speciesStarterMoves: Moves[];
@@ -312,6 +321,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
private canCycleGender: boolean;
private canCycleAbility: boolean;
private canCycleNature: boolean;
+ private canCycleTera: boolean;
private assetLoadCancelled: BooleanHolder | null;
public cursorObj: Phaser.GameObjects.Image;
@@ -823,6 +833,11 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.starterSelectContainer.add(this.pokemonEggMovesContainer);
+ this.teraIcon = globalScene.add.sprite(85, 63, "button_tera");
+ this.teraIcon.setName("terrastallize-icon");
+ this.teraIcon.setFrame("fire");
+ this.starterSelectContainer.add(this.teraIcon);
+
// The font size should be set per language
const instructionTextSize = textSettings.instructionTextSize;
@@ -867,6 +882,13 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.natureLabel = addTextObject(this.instructionRowX + this.instructionRowTextOffset, this.instructionRowY, i18next.t("starterSelectUiHandler:cycleNature"), TextStyle.PARTY, { fontSize: instructionTextSize });
this.natureLabel.setName("text-nature-label");
+ this.teraIconElement = new Phaser.GameObjects.Sprite(globalScene, this.instructionRowX, this.instructionRowY, "keyboard", "V.png");
+ this.teraIconElement.setName("sprite-tera-icon-element");
+ this.teraIconElement.setScale(0.675);
+ this.teraIconElement.setOrigin(0.0, 0.0);
+ this.teraLabel = addTextObject(this.instructionRowX + this.instructionRowTextOffset, this.instructionRowY, i18next.t("starterSelectUiHandler:cycleTera"), TextStyle.PARTY, { fontSize: instructionTextSize });
+ this.teraLabel.setName("text-tera-label");
+
this.goFilterIconElement = new Phaser.GameObjects.Sprite(globalScene, this.filterInstructionRowX, this.filterInstructionRowY, "keyboard", "C.png");
this.goFilterIconElement.setName("sprite-goFilter-icon-element");
this.goFilterIconElement.setScale(0.675);
@@ -1497,6 +1519,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
const props = globalScene.gameData.getSpeciesDexAttrProps(randomSpecies, dexAttr);
const abilityIndex = this.abilityCursor;
const nature = this.natureCursor as unknown as Nature;
+ const teraType = this.teraCursor;
const moveset = this.starterMoveset?.slice(0) as StarterMoveset;
const starterCost = globalScene.gameData.getSpeciesStarterValue(randomSpecies.speciesId);
const speciesForm = getPokemonSpeciesForm(randomSpecies.speciesId, props.formIndex);
@@ -1505,7 +1528,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
.loadAssets(props.female, props.formIndex, props.shiny, props.variant, true)
.then(() => {
if (this.tryUpdateValue(starterCost, true)) {
- this.addToParty(randomSpecies, dexAttr, abilityIndex, nature, moveset, true);
+ this.addToParty(randomSpecies, dexAttr, abilityIndex, nature, moveset, teraType, true);
ui.playSelect();
}
});
@@ -1585,7 +1608,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
const cursorObj = this.starterCursorObjs[this.starterSpecies.length];
cursorObj.setVisible(true);
cursorObj.setPosition(this.cursorObj.x, this.cursorObj.y);
- this.addToParty(this.lastSpecies, this.dexAttrCursor, this.abilityCursor, this.natureCursor as unknown as Nature, this.starterMoveset?.slice(0) as StarterMoveset);
+ this.addToParty(this.lastSpecies, this.dexAttrCursor, this.abilityCursor, this.natureCursor as unknown as Nature, this.starterMoveset?.slice(0) as StarterMoveset, this.teraCursor);
ui.playSelect();
} else {
ui.playError(); // this should be redundant as there is now a trigger for when a pokemon can't be added to party
@@ -2066,7 +2089,8 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
}
} while (newFormIndex !== props.formIndex);
starterAttributes.form = newFormIndex; // store the selected form
- this.setSpeciesDetails(this.lastSpecies, { formIndex: newFormIndex });
+ starterAttributes.tera = this.lastSpecies.forms[newFormIndex].type1;
+ this.setSpeciesDetails(this.lastSpecies, { formIndex: newFormIndex, teraType: starterAttributes.tera });
success = true;
}
break;
@@ -2125,6 +2149,19 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
success = true;
}
break;
+ case Button.CYCLE_TERA:
+ if (this.canCycleTera) {
+ const speciesForm = getPokemonSpeciesForm(this.lastSpecies.speciesId, starterAttributes.form ?? 0);
+ if (speciesForm.type1 === this.teraCursor && !Utils.isNullOrUndefined(speciesForm.type2)) {
+ starterAttributes.tera = speciesForm.type2!;
+ this.setSpeciesDetails(this.lastSpecies, { teraType: speciesForm.type2! });
+ } else {
+ starterAttributes.tera = speciesForm.type1;
+ this.setSpeciesDetails(this.lastSpecies, { teraType: speciesForm.type1 });
+ }
+ success = true;
+ }
+ break;
case Button.UP:
if (!this.starterIconsCursorObj.visible) {
if (currentRow > 0) {
@@ -2289,7 +2326,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
return [ isDupe, removeIndex ];
}
- addToParty(species: PokemonSpecies, dexAttr: bigint, abilityIndex: number, nature: Nature, moveset: StarterMoveset, randomSelection: boolean = false) {
+ addToParty(species: PokemonSpecies, dexAttr: bigint, abilityIndex: number, nature: Nature, moveset: StarterMoveset, teraType: Type, randomSelection: boolean = false) {
const props = globalScene.gameData.getSpeciesDexAttrProps(species, dexAttr);
this.starterIcons[this.starterSpecies.length].setTexture(species.getIconAtlasKey(props.formIndex, props.shiny, props.variant));
this.starterIcons[this.starterSpecies.length].setFrame(species.getIconId(props.female, props.formIndex, props.shiny, props.variant));
@@ -2299,6 +2336,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.starterAttr.push(dexAttr);
this.starterAbilityIndexes.push(abilityIndex);
this.starterNatures.push(nature);
+ this.starterTeras.push(teraType);
this.starterMovesets.push(moveset);
if (this.speciesLoaded.get(species.speciesId) || randomSelection ) {
getPokemonSpeciesForm(species.speciesId, props.formIndex).cry();
@@ -2379,6 +2417,9 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
case SettingKeyboard.Button_Cycle_Nature:
iconPath = "N.png";
break;
+ case SettingKeyboard.Button_Cycle_Tera:
+ iconPath = "V.png";
+ break;
case SettingKeyboard.Button_Stats:
iconPath = "C.png";
break;
@@ -2459,6 +2500,9 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
if (this.canCycleNature) {
this.updateButtonIcon(SettingKeyboard.Button_Cycle_Nature, gamepadType, this.natureIconElement, this.natureLabel);
}
+ if (this.canCycleTera) {
+ this.updateButtonIcon(SettingKeyboard.Button_Cycle_Tera, gamepadType, this.teraIconElement, this.teraLabel);
+ }
}
// if filter mode is inactivated and gamepadType is not undefined, update the button icons
@@ -2876,6 +2920,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.dexAttrCursor = species ? this.getCurrentDexProps(species.speciesId) : 0n;
this.abilityCursor = species ? globalScene.gameData.getStarterSpeciesDefaultAbilityIndex(species) : 0;
this.natureCursor = species ? globalScene.gameData.getSpeciesDefaultNature(species) : 0;
+ this.teraCursor = species ? species.type1 : Type.UNKNOWN;
if (!species && globalScene.ui.getTooltip().visible) {
globalScene.ui.hideTooltip();
@@ -2894,6 +2939,10 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
// load default ability from stater save data, if set
this.abilityCursor = starterAttributes.ability;
}
+ if (starterAttributes?.tera) {
+ // load default tera from starter save data, if set
+ this.teraCursor = starterAttributes.tera;
+ }
if (this.statsMode) {
if (this.speciesStarterDexEntry?.caughtAttr) {
@@ -3035,7 +3084,8 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
female: props.female,
variant: props.variant,
abilityIndex: this.starterAbilityIndexes[starterIndex],
- natureIndex: this.starterNatures[starterIndex]
+ natureIndex: this.starterNatures[starterIndex],
+ teraType: this.starterTeras[starterIndex]
});
} else {
const defaultDexAttr = this.getCurrentDexProps(species.speciesId);
@@ -3083,6 +3133,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.pokemonCaughtHatchedContainer.setVisible(false);
this.pokemonCandyContainer.setVisible(false);
this.pokemonFormText.setVisible(false);
+ this.teraIcon.setVisible(false);
const defaultDexAttr = globalScene.gameData.getSpeciesDefaultDexAttr(species, true, true);
const defaultAbilityIndex = globalScene.gameData.getStarterSpeciesDefaultAbilityIndex(species);
@@ -3117,6 +3168,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.pokemonCaughtHatchedContainer.setVisible(false);
this.pokemonCandyContainer.setVisible(false);
this.pokemonFormText.setVisible(false);
+ this.teraIcon.setVisible(false);
this.setSpeciesDetails(species!, { // TODO: is this bang correct?
shiny: false,
@@ -3131,7 +3183,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
}
setSpeciesDetails(species: PokemonSpecies, options: SpeciesDetails = {}): void {
- let { shiny, formIndex, female, variant, abilityIndex, natureIndex } = options;
+ let { shiny, formIndex, female, variant, abilityIndex, natureIndex, teraType } = options;
const forSeen: boolean = options.forSeen ?? false;
const oldProps = species ? globalScene.gameData.getSpeciesDexAttrProps(species, this.dexAttrCursor) : null;
const oldAbilityIndex = this.abilityCursor > -1 ? this.abilityCursor : globalScene.gameData.getStarterSpeciesDefaultAbilityIndex(species);
@@ -3139,6 +3191,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.dexAttrCursor = 0n;
this.abilityCursor = -1;
this.natureCursor = -1;
+ this.teraCursor = Type.UNKNOWN;
// We will only update the sprite if there is a change to form, shiny/variant
// or gender for species with gender sprite differences
const shouldUpdateSprite = (species?.genderDiffs && !isNullOrUndefined(female))
@@ -3168,6 +3221,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.dexAttrCursor |= globalScene.gameData.getFormAttr(formIndex !== undefined ? formIndex : (formIndex = oldProps!.formIndex)); // TODO: is this bang correct?
this.abilityCursor = abilityIndex !== undefined ? abilityIndex : (abilityIndex = oldAbilityIndex);
this.natureCursor = natureIndex !== undefined ? natureIndex : (natureIndex = oldNatureIndex);
+ this.teraCursor = !Utils.isNullOrUndefined(teraType) ? teraType : (teraType = species.type1);
const [ isInParty, partyIndex ]: [boolean, number] = this.isInParty(species); // we use this to firstly check if the pokemon is in the party, and if so, to get the party index in order to update the icon image
if (isInParty) {
this.updatePartyIcon(species, partyIndex);
@@ -3179,6 +3233,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.pokemonPassiveText.setVisible(false);
this.pokemonPassiveDisabledIcon.setVisible(false);
this.pokemonPassiveLockedIcon.setVisible(false);
+ this.teraIcon.setVisible(false);
if (this.assetLoadCancelled) {
this.assetLoadCancelled.value = true;
@@ -3230,6 +3285,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.starterAttr[starterIndex] = this.dexAttrCursor;
this.starterAbilityIndexes[starterIndex] = this.abilityCursor;
this.starterNatures[starterIndex] = this.natureCursor;
+ this.starterTeras[starterIndex] = this.teraCursor;
}
const assetLoadCancelled = new BooleanHolder(false);
@@ -3288,7 +3344,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.canCycleForm = species.forms.filter(f => f.isStarterSelectable || !pokemonFormChanges[species.speciesId]?.find(fc => fc.formKey))
.map((_, f) => dexEntry.caughtAttr & globalScene.gameData.getFormAttr(f)).filter(f => f).length > 1;
this.canCycleNature = globalScene.gameData.getNaturesForAttr(dexEntry.natureAttr).length > 1;
-
+ this.canCycleTera = globalScene.gameData.achvUnlocks.hasOwnProperty(achvs.TERASTALLIZE.id) && !Utils.isNullOrUndefined(getPokemonSpeciesForm(species.speciesId, formIndex ?? 0).type2);
}
if (dexEntry.caughtAttr && species.malePercent !== null) {
@@ -3412,10 +3468,14 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.pokemonFormText.setText(formText);
this.setTypeIcons(speciesForm.type1, speciesForm.type2);
+
+ this.teraIcon.setFrame(Type[this.teraCursor].toLowerCase());
+ this.teraIcon.setVisible(!this.statsMode && globalScene.gameData.achvUnlocks.hasOwnProperty(achvs.TERASTALLIZE.id));
} else {
this.pokemonAbilityText.setText("");
this.pokemonPassiveText.setText("");
this.pokemonNatureText.setText("");
+ this.teraIcon.setVisible(false);
this.setTypeIcons(null, null);
}
} else {
@@ -3426,6 +3486,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.pokemonAbilityText.setText("");
this.pokemonPassiveText.setText("");
this.pokemonNatureText.setText("");
+ this.teraIcon.setVisible(false);
this.setTypeIcons(null, null);
}
@@ -3479,6 +3540,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.starterAttr.splice(index, 1);
this.starterAbilityIndexes.splice(index, 1);
this.starterNatures.splice(index, 1);
+ this.starterTeras.splice(index, 1);
this.starterMovesets.splice(index, 1);
for (let s = 0; s < this.starterSpecies.length; s++) {
@@ -3690,6 +3752,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
abilityIndex: thisObj.starterAbilityIndexes[i],
passive: !(globalScene.gameData.starterData[starterSpecies.speciesId].passiveAttr ^ (PassiveAttr.ENABLED | PassiveAttr.UNLOCKED)),
nature: thisObj.starterNatures[i] as Nature,
+ teraType: thisObj.starterTeras[i] as Type,
moveset: thisObj.starterMovesets[i],
pokerus: thisObj.pokerusSpecies.includes(starterSpecies),
nickname: thisObj.starterPreferences[starterSpecies.speciesId]?.nickname,
@@ -3816,6 +3879,8 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.abilityLabel.setVisible(false);
this.natureIconElement.setVisible(false);
this.natureLabel.setVisible(false);
+ this.teraIconElement.setVisible(false);
+ this.teraLabel.setVisible(false);
this.goFilterIconElement.setVisible(false);
this.goFilterLabel.setVisible(false);
}
diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts
index 1526ae982e5..b952037a079 100644
--- a/src/ui/summary-ui-handler.ts
+++ b/src/ui/summary-ui-handler.ts
@@ -225,7 +225,7 @@ export default class SummaryUiHandler extends UiHandler {
this.summaryContainer.add(this.championRibbon);
this.championRibbon.setVisible(false);
- this.levelText = addTextObject(36, -17, "", TextStyle.SUMMARY_ALT);
+ this.levelText = addTextObject(24, -17, "", TextStyle.SUMMARY_ALT);
this.levelText.setOrigin(0, 1);
this.summaryContainer.add(this.levelText);
@@ -413,7 +413,7 @@ export default class SummaryUiHandler extends UiHandler {
}
this.pokeball.setFrame(getPokeballAtlasKey(this.pokemon.pokeball));
- this.levelText.setText(this.pokemon.level.toString());
+ this.levelText.setText(`${i18next.t("pokemonSummary:lv")}${this.pokemon.level.toString()}`);
this.genderText.setText(getGenderSymbol(this.pokemon.getGender(true)));
this.genderText.setColor(getGenderColor(this.pokemon.getGender(true)));
this.genderText.setShadowColor(getGenderColor(this.pokemon.getGender(true), true));
@@ -756,7 +756,7 @@ export default class SummaryUiHandler extends UiHandler {
trainerText.setOrigin(0, 0);
profileContainer.add(trainerText);
- const trainerIdText = addTextObject(174, 12, globalScene.gameData.trainerId.toString(), TextStyle.SUMMARY_ALT);
+ const trainerIdText = addTextObject(141, 12, `${i18next.t("pokemonSummary:idNo")}${globalScene.gameData.trainerId.toString()}`, TextStyle.SUMMARY_ALT);
trainerIdText.setOrigin(0, 0);
profileContainer.add(trainerIdText);