From 1e9a2a749d3650dfa7e02c5ce3f1ec6ffdec5b46 Mon Sep 17 00:00:00 2001 From: Lylian Date: Thu, 10 Oct 2024 17:49:18 +0200 Subject: [PATCH] refactor field illusion out of battleData --- src/data/ability.ts | 13 ++-- src/data/move.ts | 2 +- src/field/pokemon.ts | 99 +++++++++++++++-------------- src/phases/summon-phase.ts | 6 +- src/phases/switch-summon-phase.ts | 2 +- src/test/abilities/illusion.test.ts | 17 ++--- src/ui/battle-info.ts | 4 +- src/ui/party-ui-handler.ts | 2 +- src/ui/summary-ui-handler.ts | 6 +- 9 files changed, 79 insertions(+), 72 deletions(-) diff --git a/src/data/ability.ts b/src/data/ability.ts index c03f8e6f26b..23f926c6ad7 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -2428,7 +2428,7 @@ export class PostSummonTransformAbAttr extends PostSummonAbAttr { target = targets[0]; } - if (target.battleData.illusion.active) { + if (target.illusion.active) { return false; } pokemon.summonData.speciesForm = target.getSpeciesForm(); @@ -4562,13 +4562,14 @@ export class IllusionPreSummonAbAttr extends PreSummonAbAttr { */ applyPreSummon(pokemon: Pokemon, passive: boolean, args: any[]): boolean { let suppressed = false; + console.log("PRESUMMONILLUSION : ", pokemon.name) pokemon.scene.getField(true).filter(p => p !== pokemon).map(p => { if ((p.getAbility().hasAttr(SuppressFieldAbilitiesAbAttr) && p.canApplyAbility()) || (p.getPassiveAbility().hasAttr(SuppressFieldAbilitiesAbAttr) && p.canApplyAbility(true))) { suppressed = true; } }); - if (pokemon.battleData.illusion.available && !suppressed) { + if (pokemon.illusion.available && !suppressed) { return pokemon.generateIllusion(); } else { return false; @@ -4610,7 +4611,7 @@ export class IllusionPostBattleAbAttr extends PostBattleAbAttr { */ applyPostBattle(pokemon: Pokemon, passive: boolean, simulated:boolean, args: any[]): boolean { pokemon.breakIllusion(); - pokemon.battleData.illusion.available = true; + pokemon.illusion.available = true; return true; } } @@ -4626,7 +4627,7 @@ export class IllusionDisableAbAttr extends PostSummonAbAttr { * @returns {boolean} */ applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - pokemon.battleData.illusion.available = false; + pokemon.illusion.available = false; return true; } } @@ -5412,9 +5413,9 @@ export function initAbilities() { .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) //The pokemon generate an illusion if it's available - .conditionalAttr((pokemon) => pokemon.battleData.illusion.available, IllusionPreSummonAbAttr, false) + .conditionalAttr((pokemon) => pokemon.illusion.available, IllusionPreSummonAbAttr, false) //The pokemon loses his illusion when he is damaged by a move - .conditionalAttr((pokemon) => pokemon.battleData.illusion.active, IllusionBreakAbAttr, true) + .conditionalAttr((pokemon) => pokemon.illusion.active, IllusionBreakAbAttr, true) //Illusion is available again after a battle .conditionalAttr((pokemon) => pokemon.isAllowedInBattle(), IllusionPostBattleAbAttr, false) //Illusion is not available after summon diff --git a/src/data/move.ts b/src/data/move.ts index 7ab41768dc5..d22a2906776 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -6402,7 +6402,7 @@ export class SuppressAbilitiesIfActedAttr extends MoveEffectAttr { export class TransformAttr extends MoveEffectAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise { return new Promise(resolve => { - if (!super.apply(user, target, move, args) || target.battleData.illusion.active || user.battleData.illusion.active) { + if (!super.apply(user, target, move, args) || target.illusion.active || user.illusion.active) { user.scene.queueMessage(i18next.t("battle:attackFailed")); return resolve(false); } diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index e412e24b54b..d1b27a68051 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -123,6 +123,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { public battleSummonData: PokemonBattleSummonData; public turnData: PokemonTurnData; public mysteryEncounterPokemonData: MysteryEncounterPokemonData; + public illusion: Illusion; /** Used by Mystery Encounters to execute pokemon-specific logic (such as stat boosts) at start of battle */ public mysteryEncounterBattleEffects?: (pokemon: Pokemon) => void; @@ -153,6 +154,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.pokeball = dataSource?.pokeball || PokeballType.POKEBALL; this.level = level; this.switchOutStatus = false; + this.illusion = { active: false, available: true }; // Determine the ability index if (abilityIndex !== undefined) { @@ -281,8 +283,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { getNameToRender(useIllusion: boolean = true) { - const name: string = (!useIllusion && this.battleData.illusion.active) ? this.battleData.illusion.name! : this.name; - const nickname: string = (!useIllusion && this.battleData.illusion.active) ? this.battleData.illusion.nickname! : this.nickname; + const name: string = (!useIllusion && this.illusion.active) ? this.illusion.name! : this.name; + const nickname: string = (!useIllusion && this.illusion.active) ? this.illusion.nickname! : this.nickname; try { if (nickname) { return decodeURIComponent(escape(atob(nickname))); @@ -397,16 +399,18 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { */ generateIllusion(): boolean { if (this.hasTrainer()) { + console.log("GENERATEILLUSION() : ", this.name) const party: Pokemon[] = (this.isPlayer() ? this.scene.getParty() : this.scene.getEnemyParty()).filter(p => p.isAllowedInBattle()); - const lastPokemon: Pokemon = party.at(-1) || this; + const lastPokemon: Pokemon = party.filter(p => p !== this).at(-1) || this; + console.log(lastPokemon.name) const speciesId = lastPokemon.species.speciesId; - if ( lastPokemon === this || this.battleData.illusion.active || + if ( lastPokemon === this || this.illusion.active || ((speciesId === Species.OGERPON || speciesId === Species.TERAPAGOS) && (lastPokemon.isTerastallized() || this.isTerastallized()))) { return false; } - this.battleData.illusion = { + this.illusion = { active: true, available: true, name: this.name, @@ -457,7 +461,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } const randomIllusion: PokemonSpecies = getPokemonSpecies(availables[this.randSeedInt(availables.length)]); - this.battleData.illusion = { + this.illusion = { active: true, available: true, species: randomIllusion, @@ -471,21 +475,23 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.name = randomIllusion.name; this.loadAssets(false, true).then(() => this.playAnim()); } + console.log("L'ILLUSION : ", this.illusion) return true; } breakIllusion(): boolean { - if (!this.battleData.illusion.active) { + console.log("BREAKILLUSION") + if (!this.illusion.active) { return false; } - this.name = this.battleData.illusion.name!; - this.nickname = this.battleData.illusion.nickname!; - this.shiny = this.battleData.illusion.shiny!; - this.variant = this.battleData.illusion.variant!; - this.fusionVariant = this.battleData.illusion.fusionVariant!; - this.fusionShiny = this.battleData.illusion.fusionShiny!; - this.battleData.illusion = { active: false, available: false }; + this.name = this.illusion.name!; + this.nickname = this.illusion.nickname!; + this.shiny = this.illusion.shiny!; + this.variant = this.illusion.variant!; + this.fusionVariant = this.illusion.fusionVariant!; + this.fusionShiny = this.illusion.fusionShiny!; + this.illusion = { active: false, available: false }; if (this.isOnField()) { this.scene.playSound("PRSFX- Transform"); } @@ -514,15 +520,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { Promise.allSettled(moveIds.map(m => initMoveAnim(this.scene, m))) .then(() => { loadMoveAnimAssets(this.scene, moveIds); - const formIndex = this.battleData.illusion.active && useIllusion ? this.battleData.illusion.formIndex : this.formIndex; + const formIndex = this.illusion.active && useIllusion ? this.illusion.formIndex : this.formIndex; this.getSpeciesForm(false, useIllusion).loadAssets(this.scene, this.getGender(useIllusion) === Gender.FEMALE, formIndex, this.isShiny(useIllusion), this.getVariant(useIllusion)); if (this.isPlayer() || this.getFusionSpeciesForm(false, useIllusion)) { this.scene.loadPokemonAtlas(this.getBattleSpriteKey(true, ignoreOverride), this.getBattleSpriteAtlasPath(true, ignoreOverride)); } if (this.getFusionSpeciesForm(false, useIllusion)) { - const fusionFormIndex = this.battleData.illusion.active && useIllusion ? this.battleData.illusion.fusionFormIndex : this.fusionFormIndex; - const fusionShiny = this.battleData.illusion.active && !useIllusion ? this.battleData.illusion.fusionShiny : this.fusionShiny; - const fusionVariant = this.battleData.illusion.active && !useIllusion ? this.battleData.illusion.fusionVariant : this.fusionVariant; + const fusionFormIndex = this.illusion.active && useIllusion ? this.illusion.fusionFormIndex : this.fusionFormIndex; + const fusionShiny = this.illusion.active && !useIllusion ? this.illusion.fusionShiny : this.fusionShiny; + const fusionVariant = this.illusion.active && !useIllusion ? this.illusion.fusionVariant : this.fusionVariant; this.getFusionSpeciesForm(false, useIllusion).loadAssets(this.scene, this.getFusionGender(false, useIllusion) === Gender.FEMALE, fusionFormIndex, fusionShiny, fusionVariant); this.scene.loadPokemonAtlas(this.getFusionBattleSpriteKey(true, ignoreOverride), this.getFusionBattleSpriteAtlasPath(true, ignoreOverride)); } @@ -623,7 +629,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } getSpriteId(ignoreOverride?: boolean): string { - const formIndex: integer = this.battleData.illusion.active ? this.battleData.illusion.formIndex! : this.formIndex; + const formIndex: integer = this.illusion.active ? this.illusion.formIndex! : this.formIndex; return this.getSpeciesForm(ignoreOverride, true).getSpriteId(this.getGender(ignoreOverride, true) === Gender.FEMALE, formIndex, this.shiny, this.variant); } @@ -632,7 +638,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { back = this.isPlayer(); } - const formIndex: integer = this.battleData.illusion.active ? this.battleData.illusion.formIndex! : this.formIndex; + const formIndex: integer = this.illusion.active ? this.illusion.formIndex! : this.formIndex; return this.getSpeciesForm(ignoreOverride, true).getSpriteId(this.getGender(ignoreOverride, true) === Gender.FEMALE, formIndex, this.shiny, this.variant, back); } @@ -641,8 +647,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return this.getSpeciesForm(ignoreOverride, false).getSpriteKey( this.getGender(ignoreOverride) === Gender.FEMALE, this.formIndex, - this.battleData.illusion.shiny ?? this.shiny, - this.battleData.illusion.variant ?? this.variant + this.illusion.shiny ?? this.shiny, + this.illusion.variant ?? this.variant ); } @@ -651,7 +657,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } getFusionSpriteId(ignoreOverride?: boolean): string { - const fusionFormIndex: integer = this.battleData.illusion.active ? this.battleData.illusion.fusionFormIndex! : this.fusionFormIndex; + const fusionFormIndex: integer = this.illusion.active ? this.illusion.fusionFormIndex! : this.fusionFormIndex; return this.getFusionSpeciesForm(ignoreOverride, true).getSpriteId(this.getFusionGender(ignoreOverride, true) === Gender.FEMALE, fusionFormIndex, this.fusionShiny, this.fusionVariant); } @@ -660,7 +666,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { back = this.isPlayer(); } - const fusionFormIndex: integer = this.battleData.illusion.active ? this.battleData.illusion.fusionFormIndex! : this.fusionFormIndex; + const fusionFormIndex: integer = this.illusion.active ? this.illusion.fusionFormIndex! : this.fusionFormIndex; return this.getFusionSpeciesForm(ignoreOverride, true).getSpriteId(this.getFusionGender(ignoreOverride, true) === Gender.FEMALE, fusionFormIndex, this.fusionShiny, this.fusionVariant, back); } @@ -674,7 +680,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } getIconAtlasKey(ignoreOverride?: boolean): string { - const formIndex: integer = this.battleData.illusion.active ? this.battleData.illusion.formIndex! : this.formIndex; + const formIndex: integer = this.illusion.active ? this.illusion.formIndex! : this.formIndex; return this.getSpeciesForm(ignoreOverride, true).getIconAtlasKey(formIndex, this.shiny, this.variant); } @@ -683,12 +689,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } getIconId(ignoreOverride?: boolean): string { - const formIndex: integer = this.battleData.illusion.active ? this.battleData.illusion.formIndex! : this.formIndex; + const formIndex: integer = this.illusion.active ? this.illusion.formIndex! : this.formIndex; return this.getSpeciesForm(ignoreOverride, true).getIconId(this.getGender(ignoreOverride, true) === Gender.FEMALE, formIndex, this.shiny, this.variant); } getFusionIconId(ignoreOverride?: boolean): string { - const fusionFormIndex: integer = this.battleData.illusion.active ? this.battleData.illusion.fusionFormIndex! : this.fusionFormIndex; + const fusionFormIndex: integer = this.illusion.active ? this.illusion.fusionFormIndex! : this.fusionFormIndex; return this.getFusionSpeciesForm(ignoreOverride, true).getIconId(this.getFusionGender(ignoreOverride, true) === Gender.FEMALE, fusionFormIndex, this.fusionShiny, this.fusionVariant); } @@ -696,9 +702,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param {boolean} useIllusion - Whether we want the speciesForm of the illusion or not. */ getSpeciesForm(ignoreOverride?: boolean, useIllusion: boolean = false): PokemonSpeciesForm { - const species: PokemonSpecies = useIllusion && this.battleData.illusion.active ? this.battleData.illusion.species! : this.species; + const species: PokemonSpecies = useIllusion && this.illusion.active ? this.illusion.species! : this.species; - const formIndex: integer = useIllusion && this.battleData.illusion.active ? this.battleData.illusion.formIndex! : this.formIndex; + const formIndex: integer = useIllusion && this.illusion.active ? this.illusion.formIndex! : this.formIndex; if (!ignoreOverride && this.summonData?.speciesForm) { return this.summonData.speciesForm; @@ -714,8 +720,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param {boolean} useIllusion - Whether we want the fusionSpeciesForm of the illusion or not. */ getFusionSpeciesForm(ignoreOverride?: boolean, useIllusion: boolean = false): PokemonSpeciesForm { - const fusionSpecies: PokemonSpecies = useIllusion && this.battleData.illusion.active ? this.battleData.illusion.fusionSpecies! : this.fusionSpecies!; - const fusionFormIndex: integer = useIllusion && this.battleData.illusion.active ? this.battleData.illusion.fusionFormIndex! : this.fusionFormIndex; + const fusionSpecies: PokemonSpecies = useIllusion && this.illusion.active ? this.illusion.fusionSpecies! : this.fusionSpecies!; + const fusionFormIndex: integer = useIllusion && this.illusion.active ? this.illusion.fusionFormIndex! : this.fusionFormIndex; if (!ignoreOverride && this.summonData?.speciesForm) { return this.summonData.fusionSpeciesForm; @@ -1211,8 +1217,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param {boolean} useIllusion - Whether we want the gender of the illusion or not. */ getGender(ignoreOverride?: boolean, useIllusion: boolean = false): Gender { - if (useIllusion && this.battleData.illusion.active) { - return this.battleData.illusion.gender!; + if (useIllusion && this.illusion.active) { + return this.illusion.gender!; } else if (!ignoreOverride && this.summonData?.gender !== undefined) { return this.summonData.gender; } @@ -1223,8 +1229,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param {boolean} useIllusion - Whether we want the fusionGender of the illusion or not. */ getFusionGender(ignoreOverride?: boolean, useIllusion: boolean = false): Gender { - if (useIllusion && this.battleData.illusion.active) { - return this.battleData.illusion.fusionGender!; + if (useIllusion && this.illusion.active) { + return this.illusion.fusionGender!; } else if (!ignoreOverride && this.summonData?.fusionGender !== undefined) { return this.summonData.fusionGender; } @@ -1232,24 +1238,24 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } isShiny(useIllusion: boolean = false): boolean { - if (!useIllusion && this.battleData.illusion.active) { - return this.battleData.illusion.shiny || (!!this.battleData.illusion.fusionSpecies && this.battleData.illusion.fusionShiny) || false; + if (!useIllusion && this.illusion.active) { + return this.illusion.shiny || (!!this.illusion.fusionSpecies && this.illusion.fusionShiny) || false; } else { return this.shiny || (this.isFusion(useIllusion) && this.fusionShiny); } } isDoubleShiny(useIllusion: boolean = false): boolean { - if (!useIllusion && this.battleData.illusion.active) { - return this.isFusion(false) && this.battleData.illusion.shiny! && this.battleData.illusion.fusionShiny!; + if (!useIllusion && this.illusion.active) { + return this.isFusion(false) && this.illusion.shiny! && this.illusion.fusionShiny!; } else { return this.isFusion(useIllusion) && this.shiny && this.fusionShiny; } } getVariant(useIllusion: boolean = false): Variant { - if (!useIllusion && this.battleData.illusion.active) { - return !this.isFusion(false) ? this.battleData.illusion.variant! : Math.max(this.variant, this.fusionVariant) as Variant; + if (!useIllusion && this.illusion.active) { + return !this.isFusion(false) ? this.illusion.variant! : Math.max(this.variant, this.fusionVariant) as Variant; } else { return !this.isFusion(true) ? this.variant : Math.max(this.variant, this.fusionVariant) as Variant; } @@ -1258,7 +1264,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { getBaseVariant(doubleShiny: boolean): Variant { if (doubleShiny) { - return this.battleData.illusion.active ? this.battleData.illusion.variant! : this.variant; + return this.illusion.active ? this.illusion.variant! : this.variant; } else { return this.getVariant(); } @@ -1269,15 +1275,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } isFusion(useIllusion: boolean = false): boolean { - if (useIllusion && this.battleData.illusion.active) { - return !!this.battleData.illusion.fusionSpecies; + if (useIllusion && this.illusion.active) { + return !!this.illusion.fusionSpecies; } else { return !!this.fusionSpecies; } } getName(illusion: boolean = false): string { - return (!illusion && this.battleData.illusion.active && this.battleData.illusion.name) ? this.battleData.illusion.name : this.name; + return (!illusion && this.illusion.active && this.illusion.name) ? this.illusion.name : this.name; } /** @@ -1381,7 +1387,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (this.mysteryEncounterPokemonData.types && this.mysteryEncounterPokemonData.types.length > 0) { // "Permanent" override for a Pokemon's normal types, currently only used by Mystery Encounters this.mysteryEncounterPokemonData.types.forEach(t => types.push(t)); - } else if (!ignoreOverride && this.summonData?.types && this.summonData.types.length > 0 && (!this.battleData.illusion.active || !doIllusion)) { + } else if (!ignoreOverride && this.summonData?.types && this.summonData.types.length > 0 && (!this.illusion.active || !doIllusion)) { this.summonData.types.forEach(t => types.push(t)); } else if (this.mysteryEncounterPokemonData.types && this.mysteryEncounterPokemonData.types.length > 0) { // "Permanent" override for a Pokemon's normal types, currently only used by Mystery Encounters @@ -5300,7 +5306,6 @@ export class PokemonBattleData { public berriesEaten: BerryType[] = []; public abilitiesApplied: Abilities[] = []; public abilityRevealed: boolean = false; - public illusion: Illusion = { active: false, available: true }; } export class PokemonBattleSummonData { diff --git a/src/phases/summon-phase.ts b/src/phases/summon-phase.ts index 35d17a3aa8d..96f7f3796fe 100644 --- a/src/phases/summon-phase.ts +++ b/src/phases/summon-phase.ts @@ -102,7 +102,7 @@ export class SummonPhase extends PartyMemberPokemonPhase { const pokemon = this.getPokemon(); const pokeball = this.scene.addFieldSprite( - this.player ? 36 : 248, this.player ? 80 : 44, "pb", getPokeballAtlasKey(pokemon.battleData.illusion.pokeball ?? pokemon.pokeball) + this.player ? 36 : 248, this.player ? 80 : 44, "pb", getPokeballAtlasKey(pokemon.illusion.pokeball ?? pokemon.pokeball) ); pokeball.setVisible(false); pokeball.setOrigin(0.5, 0.625); @@ -149,7 +149,7 @@ export class SummonPhase extends PartyMemberPokemonPhase { } this.scene.currentBattle.seenEnemyPartyMemberIds.add(pokemon.id); } - addPokeballOpenParticles(this.scene, pokemon.x, pokemon.y - 16, pokemon.battleData.illusion.pokeball ?? pokemon.pokeball); + addPokeballOpenParticles(this.scene, pokemon.x, pokemon.y - 16, pokemon.illusion.pokeball ?? pokemon.pokeball); this.scene.updateModifiers(this.player); this.scene.updateFieldScale(); pokemon.showInfo(); @@ -157,7 +157,7 @@ export class SummonPhase extends PartyMemberPokemonPhase { pokemon.setVisible(true); pokemon.getSprite().setVisible(true); pokemon.setScale(0.5); - pokemon.tint(getPokeballTintColor(pokemon.battleData.illusion.pokeball ?? pokemon.pokeball)); + pokemon.tint(getPokeballTintColor(pokemon.illusion.pokeball ?? pokemon.pokeball)); pokemon.untint(250, "Sine.easeIn"); this.scene.updateFieldScale(); this.scene.tweens.add({ diff --git a/src/phases/switch-summon-phase.ts b/src/phases/switch-summon-phase.ts index 5d10553b2aa..dda4871862d 100644 --- a/src/phases/switch-summon-phase.ts +++ b/src/phases/switch-summon-phase.ts @@ -88,7 +88,7 @@ export class SwitchSummonPhase extends SummonPhase { ); this.scene.playSound("se/pb_rel"); pokemon.hideInfo(); - pokemon.tint(getPokeballTintColor(pokemon.battleData.illusion.pokeball ?? pokemon.pokeball), 1, 250, "Sine.easeIn"); + pokemon.tint(getPokeballTintColor(pokemon.illusion.pokeball ?? pokemon.pokeball), 1, 250, "Sine.easeIn"); this.scene.tweens.add({ targets: pokemon, duration: 250, diff --git a/src/test/abilities/illusion.test.ts b/src/test/abilities/illusion.test.ts index 37c4be14331..c4414f3b871 100644 --- a/src/test/abilities/illusion.test.ts +++ b/src/test/abilities/illusion.test.ts @@ -43,9 +43,9 @@ describe("Abilities - Illusion", () => { const zoroark = game.scene.getPlayerPokemon()!; const zorua = game.scene.getEnemyPokemon()!; - expect(zoroark.battleData.illusion.active).equals(true); - expect(zorua.battleData.illusion.active).equals(true); - expect(zoroark.battleData.illusion.available).equals(false); + expect(zoroark.illusion.active).equals(true); + expect(zorua.illusion.active).equals(true); + expect(zoroark.illusion.available).equals(false); }); it("break after receiving damaging move", async () => { @@ -56,7 +56,7 @@ describe("Abilities - Illusion", () => { const zorua = game.scene.getEnemyPokemon()!; - expect(zorua.battleData.illusion.active).equals(false); + expect(zorua.illusion.active).equals(false); }); it("break after getting ability changed", async () => { @@ -67,7 +67,7 @@ describe("Abilities - Illusion", () => { const zorua = game.scene.getEnemyPokemon()!; - expect(zorua.battleData.illusion.active).equals(false); + expect(zorua.illusion.active).equals(false); }); it("break if the ability is suppressed", async () => { @@ -76,7 +76,7 @@ describe("Abilities - Illusion", () => { const zorua = game.scene.getEnemyPokemon()!; - expect(zorua.battleData.illusion.active).equals(false); + expect(zorua.illusion.active).equals(false); }); it("trick the enemy AI for moves effectiveness using ILLUSION type instead of actual type", async () => { @@ -107,7 +107,7 @@ describe("Abilities - Illusion", () => { const zoroark = game.scene.getPlayerPokemon()!; - expect(zoroark.battleData.illusion.active).equals(true); + expect(zoroark.illusion.active).equals(true); }); it("copy the the name, the nickname, the gender, the shininess and the pokeball of the pokemon", async () => { @@ -126,10 +126,11 @@ describe("Abilities - Illusion", () => { await game.phaseInterceptor.to(TurnEndPhase); const zoroark = game.scene.getPlayerPokemon()!; + console.log(zoroark.illusion) expect(zoroark.name).equals("Axew"); expect(zoroark.getNameToRender()).equals("axew nickname"); expect(zoroark.getGender(false, true)).equals(Gender.FEMALE); expect(zoroark.isShiny(true)).equals(true); - expect(zoroark.battleData.illusion.pokeball).equals(PokeballType.GREAT_BALL); + expect(zoroark.illusion.pokeball).equals(PokeballType.GREAT_BALL); }); }); diff --git a/src/ui/battle-info.ts b/src/ui/battle-info.ts index 7b2ccf4b7b0..77fd5934b77 100644 --- a/src/ui/battle-info.ts +++ b/src/ui/battle-info.ts @@ -534,7 +534,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { return resolve(); } - const gender: Gender = pokemon.battleData.illusion.active ? pokemon.battleData.illusion.gender! : pokemon.gender; + const gender: Gender = pokemon.illusion.active ? pokemon.illusion.gender! : pokemon.gender; this.genderText.setText(getGenderSymbol(gender)); this.genderText.setColor(getGenderColor(gender)); @@ -682,7 +682,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { const nameSizeTest = addTextObject(this.scene, 0, 0, displayName, TextStyle.BATTLE_INFO); nameTextWidth = nameSizeTest.displayWidth; - const gender: Gender = pokemon.battleData.illusion.active ? pokemon.battleData.illusion.gender! : pokemon.gender; + const gender: Gender = pokemon.illusion.active ? pokemon.illusion.gender! : pokemon.gender; while (nameTextWidth > (this.player || !this.boss ? 60 : 98) - ((gender !== Gender.GENDERLESS ? 6 : 0) + (pokemon.fusionSpecies ? 8 : 0) + (pokemon.isShiny() ? 8 : 0) + (Math.min(pokemon.level.toString().length, 3) - 3) * 8)) { displayName = `${displayName.slice(0, displayName.endsWith(".") ? -2 : -1).trimEnd()}.`; nameSizeTest.setText(displayName); diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index 4051ac04b21..c60f1048dac 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -1294,7 +1294,7 @@ class PartySlot extends Phaser.GameObjects.Container { const fusionShinyStar = this.scene.add.image(0, 0, "shiny_star_small_2"); fusionShinyStar.setOrigin(0, 0); fusionShinyStar.setPosition(shinyStar.x, shinyStar.y); - fusionShinyStar.setTint(getVariantTint(this.pokemon.battleData.illusion.fusionVariant ?? this.pokemon.fusionVariant)); + fusionShinyStar.setTint(getVariantTint(this.pokemon.illusion.fusionVariant ?? this.pokemon.fusionVariant)); slotInfoContainer.add(fusionShinyStar); } diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index bd9b299b7b0..f04c70c529c 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -324,8 +324,8 @@ export default class SummaryUiHandler extends UiHandler { this.pokemonSprite.setPipelineData("teraColor", getTypeRgb(this.pokemon.getTeraType())); this.pokemonSprite.setPipelineData("ignoreTimeTint", true); this.pokemonSprite.setPipelineData("spriteKey", this.pokemon.getSpriteKey()); - this.pokemonSprite.setPipelineData("shiny", this.pokemon.battleData.illusion.shiny ?? this.pokemon.shiny); - this.pokemonSprite.setPipelineData("variant", this.pokemon.battleData.illusion.variant ?? this.pokemon.variant); + this.pokemonSprite.setPipelineData("shiny", this.pokemon.illusion.shiny ?? this.pokemon.shiny); + this.pokemonSprite.setPipelineData("variant", this.pokemon.illusion.variant ?? this.pokemon.variant); [ "spriteColors", "fusionSpriteColors" ].map(k => { delete this.pokemonSprite.pipelineData[`${k}Base`]; if (this.pokemon?.summonData?.speciesForm) { @@ -396,7 +396,7 @@ export default class SummaryUiHandler extends UiHandler { this.fusionShinyIcon.setPosition(this.shinyIcon.x, this.shinyIcon.y); this.fusionShinyIcon.setVisible(doubleShiny); if (isFusion) { - this.fusionShinyIcon.setTint(getVariantTint(this.pokemon.battleData.illusion.fusionVariant ?? this.pokemon.fusionVariant)); + this.fusionShinyIcon.setTint(getVariantTint(this.pokemon.illusion.fusionVariant ?? this.pokemon.fusionVariant)); } this.pokeball.setFrame(getPokeballAtlasKey(this.pokemon.pokeball));