Add summary memo text

pull/14/head
Flashfyre 2024-01-05 11:29:34 -05:00
parent 39b31e7d6f
commit 6dc868272f
9 changed files with 65 additions and 39 deletions

52
package-lock.json generated
View File

@ -35,9 +35,9 @@
} }
}, },
"node_modules/@babel/runtime": { "node_modules/@babel/runtime": {
"version": "7.23.6", "version": "7.23.7",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.6.tgz", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.7.tgz",
"integrity": "sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==", "integrity": "sha512-w06OXVOFso7LcbzMiDGt+3X7Rh7Ho8MmgPoWU3rarH+8upf+wSU/grlGbWzQyr3DkdN6ZeuMFjpdwW0Q+HxobA==",
"dependencies": { "dependencies": {
"regenerator-runtime": "^0.14.0" "regenerator-runtime": "^0.14.0"
}, },
@ -546,9 +546,9 @@
} }
}, },
"node_modules/acorn": { "node_modules/acorn": {
"version": "8.11.2", "version": "8.11.3",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
"integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
"dev": true, "dev": true,
"bin": { "bin": {
"acorn": "bin/acorn" "acorn": "bin/acorn"
@ -618,12 +618,12 @@
"dev": true "dev": true
}, },
"node_modules/axios": { "node_modules/axios": {
"version": "1.6.3", "version": "1.6.4",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.6.3.tgz", "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.4.tgz",
"integrity": "sha512-fWyNdeawGam70jXSVlKl+SUNVcL6j6W79CuSIPfi6HnDUmSCH6gyUys/HrqHeA/wU0Az41rRgean494d0Jb+ww==", "integrity": "sha512-heJnIs6N4aa1eSthhN9M5ioILu8Wi8vmQW9iHQ9NUvfkJb0lEEDUiIdQNAuBtfUt3FxReaKdpQA5DbmMOqzF/A==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"follow-redirects": "^1.15.0", "follow-redirects": "^1.15.4",
"form-data": "^4.0.0", "form-data": "^4.0.0",
"proxy-from-env": "^1.1.0" "proxy-from-env": "^1.1.0"
} }
@ -810,9 +810,9 @@
} }
}, },
"node_modules/cookies": { "node_modules/cookies": {
"version": "0.8.0", "version": "0.9.1",
"resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz", "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.9.1.tgz",
"integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==", "integrity": "sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"depd": "~2.0.0", "depd": "~2.0.0",
@ -1242,9 +1242,9 @@
"dev": true "dev": true
}, },
"node_modules/follow-redirects": { "node_modules/follow-redirects": {
"version": "1.15.3", "version": "1.15.4",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz",
"integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {
@ -1738,16 +1738,16 @@
} }
}, },
"node_modules/koa": { "node_modules/koa": {
"version": "2.14.2", "version": "2.15.0",
"resolved": "https://registry.npmjs.org/koa/-/koa-2.14.2.tgz", "resolved": "https://registry.npmjs.org/koa/-/koa-2.15.0.tgz",
"integrity": "sha512-VFI2bpJaodz6P7x2uyLiX6RLYpZmOJqNmoCst/Yyd7hQlszyPwG/I9CQJ63nOtKSxpt5M7NH67V6nJL2BwCl7g==", "integrity": "sha512-KEL/vU1knsoUvfP4MC4/GthpQrY/p6dzwaaGI6Rt4NQuFqkw3qrvsdYF5pz3wOfi7IGTvMPHC9aZIcUKYFNxsw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"accepts": "^1.3.5", "accepts": "^1.3.5",
"cache-content-type": "^1.0.0", "cache-content-type": "^1.0.0",
"content-disposition": "~0.5.2", "content-disposition": "~0.5.2",
"content-type": "^1.0.4", "content-type": "^1.0.4",
"cookies": "~0.8.0", "cookies": "~0.9.0",
"debug": "^4.3.2", "debug": "^4.3.2",
"delegates": "^1.0.0", "delegates": "^1.0.0",
"depd": "^2.0.0", "depd": "^2.0.0",
@ -2143,9 +2143,9 @@
} }
}, },
"node_modules/phaser3-rex-plugins": { "node_modules/phaser3-rex-plugins": {
"version": "1.60.8", "version": "1.60.9",
"resolved": "https://registry.npmjs.org/phaser3-rex-plugins/-/phaser3-rex-plugins-1.60.8.tgz", "resolved": "https://registry.npmjs.org/phaser3-rex-plugins/-/phaser3-rex-plugins-1.60.9.tgz",
"integrity": "sha512-akmRnNpPMP239aN91zxIEsqLIWwoFJe6BBdJEw5pgMMi/bnMY/3NpyoDfJT1thFC7Yf8rwLCBGtPF/nWXx6jAw==", "integrity": "sha512-3tH98Fo3boDIFwwehlGhFdpaHAK0/gLugTyaXipfVS4dyWbT7BO5LOLhcgSuGoCTgooWN020x5juMMOtttxbSw==",
"dependencies": { "dependencies": {
"eventemitter3": "^3.1.2", "eventemitter3": "^3.1.2",
"i18next": "^22.5.1", "i18next": "^22.5.1",
@ -2184,9 +2184,9 @@
} }
}, },
"node_modules/postcss": { "node_modules/postcss": {
"version": "8.4.32", "version": "8.4.33",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz",
"integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==",
"dev": true, "dev": true,
"funding": [ "funding": [
{ {

View File

@ -45,7 +45,9 @@ export enum Biome {
END = 50 END = 50
}; };
export function getBiomeName(biome: Biome) { export function getBiomeName(biome: Biome | -1) {
if (biome === -1)
return 'Somewhere you can\'t remember';
switch (biome) { switch (biome) {
case Biome.GRASS: case Biome.GRASS:
return 'Grassy Field'; return 'Grassy Field';

View File

@ -65,6 +65,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
public moveset: PokemonMove[]; public moveset: PokemonMove[];
public status: Status; public status: Status;
public friendship: integer; public friendship: integer;
public metLevel: integer;
public metBiome: Biome | -1;
public pauseEvolutions: boolean; public pauseEvolutions: boolean;
public pokerus: boolean; public pokerus: boolean;
@ -124,6 +126,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
this.moveset = dataSource.moveset; this.moveset = dataSource.moveset;
this.status = dataSource.status; this.status = dataSource.status;
this.friendship = dataSource.friendship !== undefined ? dataSource.friendship : this.species.baseFriendship; this.friendship = dataSource.friendship !== undefined ? dataSource.friendship : this.species.baseFriendship;
this.metLevel = dataSource.metLevel || 5;
this.metBiome = dataSource.metBiome;
this.pauseEvolutions = dataSource.pauseEvolutions; this.pauseEvolutions = dataSource.pauseEvolutions;
this.pokerus = !!dataSource.pokerus; this.pokerus = !!dataSource.pokerus;
this.fusionSpecies = dataSource.fusionSpecies instanceof PokemonSpecies ? dataSource.fusionSpecies : getPokemonSpecies(dataSource.fusionSpecies); this.fusionSpecies = dataSource.fusionSpecies instanceof PokemonSpecies ? dataSource.fusionSpecies : getPokemonSpecies(dataSource.fusionSpecies);
@ -161,6 +165,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
this.trySetShiny(); this.trySetShiny();
this.friendship = species.baseFriendship; this.friendship = species.baseFriendship;
this.metLevel = level;
this.metBiome = scene.currentBattle ? scene.arena.biomeType : -1;
this.pokerus = false; this.pokerus = false;
if (scene.gameMode === GameMode.SPLICED_ENDLESS) { if (scene.gameMode === GameMode.SPLICED_ENDLESS) {
@ -1717,15 +1723,11 @@ export default interface Pokemon {
} }
export class PlayerPokemon extends Pokemon { export class PlayerPokemon extends Pokemon {
public metBiome: Biome;
public metLevel: integer;
public compatibleTms: Moves[]; public compatibleTms: Moves[];
constructor(scene: BattleScene, species: PokemonSpecies, level: integer, abilityIndex: integer, formIndex: integer, gender?: Gender, shiny?: boolean, ivs?: integer[], dataSource?: Pokemon | PokemonData) { constructor(scene: BattleScene, species: PokemonSpecies, level: integer, abilityIndex: integer, formIndex: integer, gender?: Gender, shiny?: boolean, ivs?: integer[], dataSource?: Pokemon | PokemonData) {
super(scene, 106, 148, species, level, abilityIndex, formIndex, gender, shiny, ivs, dataSource); super(scene, 106, 148, species, level, abilityIndex, formIndex, gender, shiny, ivs, dataSource);
this.metBiome = scene.arena?.biomeType || Biome.TOWN;
this.metLevel = level;
this.generateCompatibleTms(); this.generateCompatibleTms();
} }
@ -2092,6 +2094,8 @@ export class EnemyPokemon extends Pokemon {
if (party.length < 6) { if (party.length < 6) {
this.pokeball = pokeballType; this.pokeball = pokeballType;
this.metLevel = this.level;
this.metBiome = this.scene.arena.biomeType;
const newPokemon = new PlayerPokemon(this.scene, this.species, this.level, this.abilityIndex, this.formIndex, this.gender, this.shiny, null, this); const newPokemon = new PlayerPokemon(this.scene, this.species, this.level, this.abilityIndex, this.formIndex, this.gender, this.shiny, null, this);
party.push(newPokemon); party.push(newPokemon);
ret = newPokemon; ret = newPokemon;

View File

@ -1,5 +1,6 @@
import { BattleType } from "../battle"; import { BattleType } from "../battle";
import BattleScene from "../battle-scene"; import BattleScene from "../battle-scene";
import { Biome } from "../data/biome";
import { Gender } from "../data/gender"; import { Gender } from "../data/gender";
import { PokeballType } from "../data/pokeball"; import { PokeballType } from "../data/pokeball";
import { getPokemonSpecies } from "../data/pokemon-species"; import { getPokemonSpecies } from "../data/pokemon-species";
@ -25,6 +26,8 @@ export default class PokemonData {
public moveset: PokemonMove[]; public moveset: PokemonMove[];
public status: Status; public status: Status;
public friendship: integer; public friendship: integer;
public metLevel: integer;
public metBiome: Biome | -1;
public pauseEvolutions: boolean; public pauseEvolutions: boolean;
public pokerus: boolean; public pokerus: boolean;
@ -53,6 +56,8 @@ export default class PokemonData {
this.stats = source.stats; this.stats = source.stats;
this.ivs = source.ivs; this.ivs = source.ivs;
this.friendship = source.friendship !== undefined ? source.friendship : getPokemonSpecies(this.species).baseFriendship; this.friendship = source.friendship !== undefined ? source.friendship : getPokemonSpecies(this.species).baseFriendship;
this.metLevel = source.metLevel || 5;
this.metBiome = source.metBiome !== undefined ? source.metBiome : -1;
this.pauseEvolutions = !!source.pauseEvolutions; this.pauseEvolutions = !!source.pauseEvolutions;
this.pokerus = !!source.pokerus; this.pokerus = !!source.pokerus;

View File

@ -65,8 +65,8 @@ export abstract class FormModalUiHandler extends ModalUiHandler {
}); });
this.errorMessage = addTextObject(this.scene, 10, (hasTitle ? 31 : 5) + 20 * (fields.length - 1) + 16, '', TextStyle.TOOLTIP_CONTENT); this.errorMessage = addTextObject(this.scene, 10, (hasTitle ? 31 : 5) + 20 * (fields.length - 1) + 16, '', TextStyle.TOOLTIP_CONTENT);
this.errorMessage.setColor(getTextColor(TextStyle.SUMMARY_RED)); this.errorMessage.setColor(getTextColor(TextStyle.SUMMARY_PINK));
this.errorMessage.setShadowColor(getTextColor(TextStyle.SUMMARY_RED, true)); this.errorMessage.setShadowColor(getTextColor(TextStyle.SUMMARY_PINK, true));
this.errorMessage.setVisible(false); this.errorMessage.setVisible(false);
this.modalContainer.add(this.errorMessage); this.modalContainer.add(this.errorMessage);
} }

View File

@ -118,7 +118,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.pokemonGrowthRateLabelText.setVisible(false); this.pokemonGrowthRateLabelText.setVisible(false);
this.starterSelectContainer.add(this.pokemonGrowthRateLabelText); this.starterSelectContainer.add(this.pokemonGrowthRateLabelText);
this.pokemonGrowthRateText = addTextObject(this.scene, 44, 103, '', TextStyle.SUMMARY_RED, { fontSize: '48px' }); this.pokemonGrowthRateText = addTextObject(this.scene, 44, 103, '', TextStyle.SUMMARY_PINK, { fontSize: '48px' });
this.pokemonGrowthRateText.setOrigin(0, 0); this.pokemonGrowthRateText.setOrigin(0, 0);
this.starterSelectContainer.add(this.pokemonGrowthRateText); this.starterSelectContainer.add(this.pokemonGrowthRateText);
@ -796,8 +796,8 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
const newValue = value + (add || 0); const newValue = value + (add || 0);
const overLimit = newValue > 10; const overLimit = newValue > 10;
this.valueLimitLabel.setText(`${newValue}/10`); this.valueLimitLabel.setText(`${newValue}/10`);
this.valueLimitLabel.setColor(getTextColor(!overLimit ? TextStyle.TOOLTIP_CONTENT : TextStyle.SUMMARY_RED)); this.valueLimitLabel.setColor(getTextColor(!overLimit ? TextStyle.TOOLTIP_CONTENT : TextStyle.SUMMARY_PINK));
this.valueLimitLabel.setShadowColor(getTextColor(!overLimit ? TextStyle.TOOLTIP_CONTENT : TextStyle.SUMMARY_RED, true)); this.valueLimitLabel.setShadowColor(getTextColor(!overLimit ? TextStyle.TOOLTIP_CONTENT : TextStyle.SUMMARY_PINK, true));
if (overLimit) { if (overLimit) {
this.scene.time.delayedCall(Utils.fixedInt(500), () => this.tryUpdateValue()); this.scene.time.delayedCall(Utils.fixedInt(500), () => this.tryUpdateValue());
return false; return false;

View File

@ -71,7 +71,7 @@ export class StatsContainer extends Phaser.GameObjects.Container {
let label = ivs[i].toString(); let label = ivs[i].toString();
if (this.showDiff && originalIvs) { if (this.showDiff && originalIvs) {
if (originalIvs[i] < ivs[i]) if (originalIvs[i] < ivs[i])
label += ` ([color=${getGenderColor(Gender.MALE)}]+${ivs[i] - originalIvs[i]}[/color])`; label += ` ([color=${getGenderColor(Gender.MALE)}][shadow=${getGenderColor(Gender.MALE, true)}]+${ivs[i] - originalIvs[i]}[/shadow][/color])`;
else else
label += ' (-)'; label += ' (-)';
} }

View File

@ -4,7 +4,7 @@ import UiHandler from "./ui-handler";
import * as Utils from "../utils"; import * as Utils from "../utils";
import { PlayerPokemon } from "../pokemon"; import { PlayerPokemon } from "../pokemon";
import { Type } from "../data/type"; import { Type } from "../data/type";
import { TextStyle, addTextObject, getTextColor } from "./text"; import { TextStyle, addBBCodeTextObject, addTextObject, getBBCodeFrag, getTextColor } from "./text";
import Move, { MoveCategory } from "../data/move"; import Move, { MoveCategory } from "../data/move";
import { getPokeballAtlasKey } from "../data/pokeball"; import { getPokeballAtlasKey } from "../data/pokeball";
import { getGenderColor, getGenderSymbol } from "../data/gender"; import { getGenderColor, getGenderSymbol } from "../data/gender";
@ -12,6 +12,7 @@ import { getLevelTotalExp } from "../data/exp";
import { Stat, getStatName } from "../data/pokemon-stat"; import { Stat, getStatName } from "../data/pokemon-stat";
import { PokemonHeldItemModifier } from "../modifier/modifier"; import { PokemonHeldItemModifier } from "../modifier/modifier";
import { StatusEffect } from "../data/status-effect"; import { StatusEffect } from "../data/status-effect";
import { getBiomeName } from "../data/biome";
enum Page { enum Page {
PROFILE, PROFILE,
@ -529,6 +530,12 @@ export default class SummaryUiHandler extends UiHandler {
y: `-=${14.83 * (abilityDescriptionLineCount - 2)}` y: `-=${14.83 * (abilityDescriptionLineCount - 2)}`
}); });
} }
let memoString = `${getBBCodeFrag(`${this.pokemon.metBiome === -1 ? 'apparently ' : ''}met at Lv`, TextStyle.WINDOW)}${getBBCodeFrag(this.pokemon.metLevel.toString(), TextStyle.SUMMARY_RED)}${getBBCodeFrag(',', TextStyle.WINDOW)}\n${getBBCodeFrag(getBiomeName(this.pokemon.metBiome), TextStyle.SUMMARY_RED)}${getBBCodeFrag('.', TextStyle.WINDOW)}`;
const memoText = addBBCodeTextObject(this.scene, 7, 113, memoString, TextStyle.WINDOW);
memoText.setOrigin(0, 0);
profileContainer.add(memoText);
break; break;
case Page.STATS: case Page.STATS:
const statsContainer = this.scene.add.container(0, -pageBg.height); const statsContainer = this.scene.add.container(0, -pageBg.height);
@ -619,7 +626,7 @@ export default class SummaryUiHandler extends UiHandler {
this.extraMoveRowContainer.add(extraRowOverlay); this.extraMoveRowContainer.add(extraRowOverlay);
const extraRowText = addTextObject(this.scene, 35, 0, this.summaryUiMode === SummaryUiMode.LEARN_MOVE ? this.newMove.name : 'Cancel', const extraRowText = addTextObject(this.scene, 35, 0, this.summaryUiMode === SummaryUiMode.LEARN_MOVE ? this.newMove.name : 'Cancel',
this.summaryUiMode === SummaryUiMode.LEARN_MOVE ? TextStyle.SUMMARY_RED : TextStyle.SUMMARY); this.summaryUiMode === SummaryUiMode.LEARN_MOVE ? TextStyle.SUMMARY_PINK : TextStyle.SUMMARY);
extraRowText.setOrigin(0, 1); extraRowText.setOrigin(0, 1);
this.extraMoveRowContainer.add(extraRowText); this.extraMoveRowContainer.add(extraRowText);

View File

@ -9,6 +9,7 @@ export enum TextStyle {
PARTY_RED, PARTY_RED,
SUMMARY, SUMMARY,
SUMMARY_RED, SUMMARY_RED,
SUMMARY_PINK,
SUMMARY_GOLD, SUMMARY_GOLD,
MONEY, MONEY,
SETTINGS_LABEL, SETTINGS_LABEL,
@ -68,6 +69,7 @@ function getTextStyleOptions(style: TextStyle, extraStyleOptions?: Phaser.Types.
switch (style) { switch (style) {
case TextStyle.SUMMARY: case TextStyle.SUMMARY:
case TextStyle.SUMMARY_RED: case TextStyle.SUMMARY_RED:
case TextStyle.SUMMARY_PINK:
case TextStyle.SUMMARY_GOLD: case TextStyle.SUMMARY_GOLD:
case TextStyle.WINDOW: case TextStyle.WINDOW:
case TextStyle.MESSAGE: case TextStyle.MESSAGE:
@ -105,6 +107,10 @@ function getTextStyleOptions(style: TextStyle, extraStyleOptions?: Phaser.Types.
return [ styleOptions, shadowColor, shadowSize ]; return [ styleOptions, shadowColor, shadowSize ];
} }
export function getBBCodeFrag(content: string, textStyle: TextStyle): string {
return `[color=${getTextColor(textStyle)}][shadow=${getTextColor(textStyle, true)}]${content}[/shadow][/color]`;
}
export function getTextColor(textStyle: TextStyle, shadow?: boolean): string { export function getTextColor(textStyle: TextStyle, shadow?: boolean): string {
switch (textStyle) { switch (textStyle) {
case TextStyle.MESSAGE: case TextStyle.MESSAGE:
@ -122,6 +128,8 @@ export function getTextColor(textStyle: TextStyle, shadow?: boolean): string {
return !shadow ? '#ffffff' : '#636363'; return !shadow ? '#ffffff' : '#636363';
case TextStyle.SUMMARY_RED: case TextStyle.SUMMARY_RED:
case TextStyle.TOOLTIP_TITLE: case TextStyle.TOOLTIP_TITLE:
return !shadow ? '#e70808' : '#ffbd73';
case TextStyle.SUMMARY_PINK:
return !shadow ? '#f89890' : '#984038'; return !shadow ? '#f89890' : '#984038';
case TextStyle.SUMMARY_GOLD: case TextStyle.SUMMARY_GOLD:
case TextStyle.MONEY: case TextStyle.MONEY: