From 0da56cda9fef735490aeaca691a2fed60f97acf6 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Mon, 21 Apr 2025 13:46:32 -0500 Subject: [PATCH 1/2] [Bug][Sprite] Fix variant loading console spam (#5690) --- src/data/pokemon-species.ts | 42 ++++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 95ff28e61e0..34efefd2849 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -27,7 +27,7 @@ import { } from "#app/data/balance/pokemon-level-moves"; import type { Stat } from "#enums/stat"; import type { Variant, VariantSet } from "#app/sprites/variant"; -import { populateVariantColorCache, variantData } from "#app/sprites/variant"; +import { populateVariantColorCache, variantColorCache, variantData } from "#app/sprites/variant"; import { speciesStarterCosts, POKERUS_STARTER_COUNT } from "#app/data/balance/starters"; import { SpeciesFormKey } from "#enums/species-form-key"; import { starterPassiveAbilities } from "#app/data/balance/passives"; @@ -594,6 +594,34 @@ export abstract class PokemonSpeciesForm { return true; } + /** + * Load the variant colors for the species into the variant color cache + * + * @param spriteKey - The sprite key to use + * @param female - Whether to get + * + */ + async loadVariantColors(spriteKey: string, female: boolean, variant: Variant, formIndex?: number): Promise { + const baseSpriteKey = this.getBaseSpriteKey(female, formIndex); + + if (variantColorCache.hasOwnProperty(baseSpriteKey)) { + // Variant colors have already been loaded + return; + } + + const variantInfo = variantData[this.getVariantDataIndex(formIndex)]; + // Do nothing if there is no variant information or the variant does not have color replacements + if (!variantInfo || variantInfo[variant] !== 1) { + return; + } + + await populateVariantColorCache( + "pkmn__" + baseSpriteKey, + globalScene.experimentalSprites && hasExpSprite(spriteKey), + baseSpriteKey, + ); + } + async loadAssets( female: boolean, formIndex?: number, @@ -606,15 +634,9 @@ export abstract class PokemonSpeciesForm { const spriteKey = this.getSpriteKey(female, formIndex, shiny, variant, back); globalScene.loadPokemonAtlas(spriteKey, this.getSpriteAtlasPath(female, formIndex, shiny, variant, back)); globalScene.load.audio(this.getCryKey(formIndex), `audio/${this.getCryKey(formIndex)}.m4a`); - - const baseSpriteKey = this.getBaseSpriteKey(female, formIndex); - - // Force the variant color cache to be loaded for the form - await populateVariantColorCache( - "pkmn__" + baseSpriteKey, - globalScene.experimentalSprites && hasExpSprite(spriteKey), - baseSpriteKey, - ); + if (!isNullOrUndefined(variant)) { + await this.loadVariantColors(spriteKey, female, variant, formIndex); + } return new Promise(resolve => { globalScene.load.once(Phaser.Loader.Events.COMPLETE, () => { const originalWarn = console.warn; From be6a117b1e0716e5f3b0cd7c495ebe01bd0a4350 Mon Sep 17 00:00:00 2001 From: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Date: Mon, 21 Apr 2025 14:52:08 -0500 Subject: [PATCH 2/2] [Bug][Sprite] Fix variants not using recolors for back sprite (#5691) Fix variants not showing back recolors with exp --- src/data/pokemon-species.ts | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 34efefd2849..2fff2b562c0 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -404,7 +404,7 @@ export abstract class PokemonSpeciesForm { } /** Compute the sprite ID of the pokemon form. */ - getSpriteId(female: boolean, formIndex?: number, shiny?: boolean, variant = 0, back?: boolean): string { + getSpriteId(female: boolean, formIndex?: number, shiny?: boolean, variant = 0, back = false): string { const baseSpriteKey = this.getBaseSpriteKey(female, formIndex); let config = variantData; @@ -598,11 +598,21 @@ export abstract class PokemonSpeciesForm { * Load the variant colors for the species into the variant color cache * * @param spriteKey - The sprite key to use - * @param female - Whether to get + * @param female - Whether to load female instead of male + * @param back - Whether the back sprite is being loaded * */ - async loadVariantColors(spriteKey: string, female: boolean, variant: Variant, formIndex?: number): Promise { - const baseSpriteKey = this.getBaseSpriteKey(female, formIndex); + async loadVariantColors( + spriteKey: string, + female: boolean, + variant: Variant, + back = false, + formIndex?: number, + ): Promise { + let baseSpriteKey = this.getBaseSpriteKey(female, formIndex); + if (back) { + baseSpriteKey = "back__" + baseSpriteKey; + } if (variantColorCache.hasOwnProperty(baseSpriteKey)) { // Variant colors have already been loaded @@ -618,7 +628,7 @@ export abstract class PokemonSpeciesForm { await populateVariantColorCache( "pkmn__" + baseSpriteKey, globalScene.experimentalSprites && hasExpSprite(spriteKey), - baseSpriteKey, + baseSpriteKey.replace("__", "/"), ); } @@ -635,7 +645,7 @@ export abstract class PokemonSpeciesForm { globalScene.loadPokemonAtlas(spriteKey, this.getSpriteAtlasPath(female, formIndex, shiny, variant, back)); globalScene.load.audio(this.getCryKey(formIndex), `audio/${this.getCryKey(formIndex)}.m4a`); if (!isNullOrUndefined(variant)) { - await this.loadVariantColors(spriteKey, female, variant, formIndex); + await this.loadVariantColors(spriteKey, female, variant, back, formIndex); } return new Promise(resolve => { globalScene.load.once(Phaser.Loader.Events.COMPLETE, () => {