diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 9d5c383e1aa..340831d1b9b 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -811,8 +811,20 @@ export default class BattleScene extends SceneBase { return true; } - public getPlayerParty(): PlayerPokemon[] { - return this.party; + public getPlayerParty(fakeShininess: boolean = true): PlayerPokemon[] { + const party = this.party + if(!fakeShininess){ + party.map(pokemon => { + pokemon.shiny = pokemon.isShiny() + pokemon.variant = pokemon.getVariant() + pokemon.name = pokemon.getNameToRender() + if(pokemon.isFusion()){ + pokemon.fusionVariant = pokemon.battleData?.illusion.basePokemon!.fusionVariant ?? pokemon.fusionVariant; + pokemon.fusionShiny = pokemon.battleData?.illusion.basePokemon!.fusionShiny ?? pokemon.fusionShiny; + } + }); + } + return party; } /** diff --git a/src/data/ability.ts b/src/data/ability.ts index ef5afafcec4..c2db17a6a0d 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -4778,28 +4778,13 @@ export class IllusionPostBattleAbAttr extends PostBattleAbAttr { * @returns {boolean} - Whether the illusion was applied. */ applyPostBattle(pokemon: Pokemon, passive: boolean, simulated:boolean, args: any[]): boolean { + console.log("POSTBATTLE") pokemon.breakIllusion(); pokemon.battleData.illusion.available = true; return true; } } -export class IllusionDisableAbAttr extends PostSummonAbAttr { - /** - * Illusion will be disabled if the pokemon is summoned with an illusion. - * So the pokemon can use 1 illusion per battle. - * - * @param {Pokemon} pokemon - The Pokémon with the Illusion ability. - * @param {boolean} passive - N/A - * @param {...any} args - N/A - * @returns {boolean} - */ - applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - pokemon.battleData.illusion.available = false; - return true; - } -} - /** * If a Pokémon with this Ability selects a damaging move, it has a 30% chance of going first in its priority bracket. If the Ability activates, this is announced at the start of the turn (after move selection). @@ -5905,8 +5890,6 @@ export function initAbilities() { .conditionalAttr((pokemon) => pokemon.battleData.illusion.active, IllusionBreakAbAttr, true) //Illusion is available again after a battle .conditionalAttr((pokemon) => pokemon.isAllowedInBattle(), IllusionPostBattleAbAttr, false) - //Illusion is not available after summon - .attr(IllusionDisableAbAttr, false) .bypassFaint(), new Ability(Abilities.IMPOSTER, 5) .attr(PostSummonTransformAbAttr) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 34a51a25604..b09e647b9c5 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -437,7 +437,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const lastPokemon: Pokemon = party.filter(p => p !== this).at(-1) || this; const speciesId = lastPokemon.species.speciesId; - if ( lastPokemon === this || this.battleData?.illusion.active || + if ( lastPokemon === this || this.battleData.illusion.active || ((speciesId === Species.OGERPON || speciesId === Species.TERAPAGOS) && (lastPokemon.isTerastallized() || this.isTerastallized()))) { return false; } @@ -455,6 +455,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { fusionGender: lastPokemon.fusionGender }; + console.log("GENERATE ILLUSION ", this.battleData.illusion.basePokemon!.name) + this.name = lastPokemon.name; this.nickname = lastPokemon.nickname; this.shiny = lastPokemon.shiny; @@ -465,6 +467,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.initShinySparkle(); } this.loadAssets(false, true).then(() => this.playAnim()); + this.updateInfo(); } else { let availables: Species[] = []; let randomIllusion: PokemonSpecies = globalScene.arena.randomSpecies(globalScene.currentBattle.waveIndex, this.level); @@ -488,11 +491,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return true; } - breakIllusion(): boolean { + breakIllusion(toSave: boolean = false): boolean { + console.log("breakIllusion"); if (!this.battleData?.illusion.active) { return false; } - this.name = this.battleData?.illusion.basePokemon!.name; this.nickname = this.battleData?.illusion.basePokemon!.nickname; this.shiny = this.battleData?.illusion.basePokemon!.shiny; @@ -506,8 +509,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (this.shiny) { this.initShinySparkle(); } - this.loadAssets(false).then(() => this.playAnim()); - this.updateInfo(true); + if(!toSave){ + this.loadAssets(false).then(() => this.playAnim()); + this.updateInfo(true); + } return true; } @@ -3961,10 +3966,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } resetBattleData(): void { - const illusionActive: boolean = this.battleData?.illusion.active ?? false; + console.log("RESETBATTLEDATA : ", this.getNameToRender(false)) + const illusionActive: boolean = this.battleData?.illusion.active; this.breakIllusion(); this.battleData = new PokemonBattleData(); - illusionActive ? this.generateIllusion() : null; + if(illusionActive){ + this.generateIllusion() + } } resetBattleSummonData(): void { diff --git a/src/phases/encounter-phase.ts b/src/phases/encounter-phase.ts index 4f5a2f82d12..d0d6c1d92ad 100644 --- a/src/phases/encounter-phase.ts +++ b/src/phases/encounter-phase.ts @@ -11,7 +11,7 @@ import { TrainerSlot } from "#app/data/trainer-config"; import { getRandomWeatherType } from "#app/data/weather"; import { EncounterPhaseEvent } from "#app/events/battle-scene"; import type Pokemon from "#app/field/pokemon"; -import { FieldPosition } from "#app/field/pokemon"; +import { FieldPosition, PlayerPokemon } from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { BoostBugSpawnModifier, IvScannerModifier, TurnHeldItemTransferModifier } from "#app/modifier/modifier"; import { ModifierPoolType, regenerateModifierPoolThresholds } from "#app/modifier/modifier-type"; @@ -203,6 +203,9 @@ export class EncounterPhase extends BattlePhase { } if (e < (battle.double ? 2 : 1)) { if (battle.battleType === BattleType.WILD) { + for(const pokemon of globalScene.getPlayerField()){ + applyPreSummonAbAttrs(PreSummonAbAttr, pokemon, []); + } applyPreSummonAbAttrs(PreSummonAbAttr, enemyPokemon, []); globalScene.field.add(enemyPokemon); battle.seenEnemyPartyMemberIds.add(enemyPokemon.id); diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 58d416eb468..6248ccda457 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -949,7 +949,7 @@ export class GameData { seed: globalScene.seed, playTime: globalScene.sessionPlayTime, gameMode: globalScene.gameMode.modeId, - party: globalScene.getPlayerParty().map(p => new PokemonData(p)), + party: globalScene.getPlayerParty(false).map(p => new PokemonData(p)), enemyParty: globalScene.getEnemyParty().map(p => new PokemonData(p)), modifiers: globalScene.findModifiers(() => true).map(m => new PersistentModifierData(m, true)), enemyModifiers: globalScene.findModifiers(() => true, false).map(m => new PersistentModifierData(m, false)),