mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-10-30 07:56:07 +01:00
* Grabbed reverted changes from stuff
* Added version migrator for rage fist data + deepMergeSpriteData tests
* fixed formattign
* Fied a few
* Fixed constructor (maybe), moved deepCopy and deepMergeSpriteData to own file
`common.ts` is hella bloated so seems legit
* Moved empty moveset verification mapping thing to upgrade script bc i wanted to
* Fixed tests
* test added
* Fixed summondata being cleared inside summonPhase, removed `summonDataPrimer`
like seriously how come no-one checked this
* Fixed test
I forgot that we outsped and oneshot
* Fixed test
* huhjjjjjb
* Hopefully fixed bug
my sanity and homework are paying the price for this lol
* added commented out console.log statement
uncomment to see new berry data
* Fixed migrate script, re-added deprecated attributes out of necessity
* Fixed failing test by not trying to mock rng
* Fixed test
* Fixed tests
* Update ability.ts
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
* Update ability.ts
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
* Update overrides.ts
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
* Update berry-phase.ts
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
* Update encounter-phase.ts
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
* Update game-data.ts
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
* Update move-phase.ts
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
* Added utility function `randSeedFloat`
basically just `Phaser.math.RND.realInRange(0, 1)`
* Applied review comments, cleaned up code a bit
* Removed unnecessary null checks for turnData and co.
I explicitly made them initialized by default for this very reason
* Added tests for Last Resort regarding moveHistory
* Update pokemon.ts
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
* Update pokemon.ts
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
* Update pokemon.ts
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
* Update pokemon.ts
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
* Update pokemon.ts
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
* Update pokemon.ts
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
* Update pokemon.ts
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
* Update pokemon.ts
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
* Update battle-scene.ts
Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com>
* Update the-winstrate-challenge-encounter.ts
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
* Update pokemon.ts
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
* Update pokemon.ts
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
* Update pokemon.ts
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
* Update ability.ts
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
* Update move.ts
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
* Update move.ts
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
* Update move.ts
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
* Update battle-anims.ts
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
* Update pokemon.ts comments
* Fixed a few outstanding issues with documentation
* Updated switch summon phase comment
* Re-added BattleSummonData as TempSummonData
* Hppefully fixed -1 sprite scale glitch
* Fixed comment
* Reveted `pokemon-forms.ts`
* Fuxed constructor
* fixed -1 bug
* Revert "Added utility function `randSeedFloat`"
This reverts commit 4c3447c851.
---------
Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com>
Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com>
197 lines
8.2 KiB
TypeScript
197 lines
8.2 KiB
TypeScript
import { globalScene } from "#app/global-scene";
|
|
import { fixedInt } from "#app/utils/common";
|
|
import { achvs } from "../system/achv";
|
|
import type { SpeciesFormChange } from "../data/pokemon-forms";
|
|
import { getSpeciesFormChangeMessage } from "../data/pokemon-forms";
|
|
import type { PlayerPokemon } from "../field/pokemon";
|
|
import { UiMode } from "#enums/ui-mode";
|
|
import type PartyUiHandler from "../ui/party-ui-handler";
|
|
import { getPokemonNameWithAffix } from "../messages";
|
|
import { EndEvolutionPhase } from "./end-evolution-phase";
|
|
import { EvolutionPhase } from "./evolution-phase";
|
|
import { BattlerTagType } from "#enums/battler-tag-type";
|
|
import { SpeciesFormKey } from "#enums/species-form-key";
|
|
|
|
export class FormChangePhase extends EvolutionPhase {
|
|
private formChange: SpeciesFormChange;
|
|
private modal: boolean;
|
|
|
|
constructor(pokemon: PlayerPokemon, formChange: SpeciesFormChange, modal: boolean) {
|
|
super(pokemon, null, 0);
|
|
|
|
this.formChange = formChange;
|
|
this.modal = modal;
|
|
}
|
|
|
|
validate(): boolean {
|
|
return !!this.formChange;
|
|
}
|
|
|
|
setMode(): Promise<void> {
|
|
if (!this.modal) {
|
|
return super.setMode();
|
|
}
|
|
return globalScene.ui.setOverlayMode(UiMode.EVOLUTION_SCENE);
|
|
}
|
|
|
|
doEvolution(): void {
|
|
const preName = getPokemonNameWithAffix(this.pokemon);
|
|
|
|
this.pokemon.getPossibleForm(this.formChange).then(transformedPokemon => {
|
|
[this.pokemonEvoSprite, this.pokemonEvoTintSprite].map(sprite => {
|
|
const spriteKey = transformedPokemon.getSpriteKey(true);
|
|
try {
|
|
sprite.play(spriteKey);
|
|
} catch (err: unknown) {
|
|
console.error(`Failed to play animation for ${spriteKey}`, err);
|
|
}
|
|
|
|
sprite.setPipelineData("ignoreTimeTint", true);
|
|
sprite.setPipelineData("spriteKey", transformedPokemon.getSpriteKey());
|
|
sprite.setPipelineData("shiny", transformedPokemon.shiny);
|
|
sprite.setPipelineData("variant", transformedPokemon.variant);
|
|
["spriteColors", "fusionSpriteColors"].map(k => {
|
|
if (transformedPokemon.summonData.speciesForm) {
|
|
k += "Base";
|
|
}
|
|
sprite.pipelineData[k] = transformedPokemon.getSprite().pipelineData[k];
|
|
});
|
|
});
|
|
|
|
globalScene.time.delayedCall(250, () => {
|
|
globalScene.tweens.add({
|
|
targets: this.evolutionBgOverlay,
|
|
alpha: 1,
|
|
delay: 500,
|
|
duration: 1500,
|
|
ease: "Sine.easeOut",
|
|
onComplete: () => {
|
|
globalScene.time.delayedCall(1000, () => {
|
|
globalScene.tweens.add({
|
|
targets: this.evolutionBgOverlay,
|
|
alpha: 0,
|
|
duration: 250,
|
|
});
|
|
this.evolutionBg.setVisible(true);
|
|
this.evolutionBg.play();
|
|
});
|
|
globalScene.playSound("se/charge");
|
|
this.doSpiralUpward();
|
|
globalScene.tweens.addCounter({
|
|
from: 0,
|
|
to: 1,
|
|
duration: 2000,
|
|
onUpdate: t => {
|
|
this.pokemonTintSprite.setAlpha(t.getValue());
|
|
},
|
|
onComplete: () => {
|
|
this.pokemonSprite.setVisible(false);
|
|
globalScene.time.delayedCall(1100, () => {
|
|
globalScene.playSound("se/beam");
|
|
this.doArcDownward();
|
|
globalScene.time.delayedCall(1000, () => {
|
|
this.pokemonEvoTintSprite.setScale(0.25);
|
|
this.pokemonEvoTintSprite.setVisible(true);
|
|
this.doCycle(1, 1).then(_success => {
|
|
globalScene.playSound("se/sparkle");
|
|
this.pokemonEvoSprite.setVisible(true);
|
|
this.doCircleInward();
|
|
globalScene.time.delayedCall(900, () => {
|
|
this.pokemon.changeForm(this.formChange).then(() => {
|
|
if (!this.modal) {
|
|
globalScene.unshiftPhase(new EndEvolutionPhase());
|
|
}
|
|
|
|
globalScene.playSound("se/shine");
|
|
this.doSpray();
|
|
globalScene.tweens.add({
|
|
targets: this.evolutionOverlay,
|
|
alpha: 1,
|
|
duration: 250,
|
|
easing: "Sine.easeIn",
|
|
onComplete: () => {
|
|
this.evolutionBgOverlay.setAlpha(1);
|
|
this.evolutionBg.setVisible(false);
|
|
globalScene.tweens.add({
|
|
targets: [this.evolutionOverlay, this.pokemonEvoTintSprite],
|
|
alpha: 0,
|
|
duration: 2000,
|
|
delay: 150,
|
|
easing: "Sine.easeIn",
|
|
onComplete: () => {
|
|
globalScene.tweens.add({
|
|
targets: this.evolutionBgOverlay,
|
|
alpha: 0,
|
|
duration: 250,
|
|
onComplete: () => {
|
|
globalScene.time.delayedCall(250, () => {
|
|
this.pokemon.cry();
|
|
globalScene.time.delayedCall(1250, () => {
|
|
let playEvolutionFanfare = false;
|
|
if (this.formChange.formKey.indexOf(SpeciesFormKey.MEGA) > -1) {
|
|
globalScene.validateAchv(achvs.MEGA_EVOLVE);
|
|
playEvolutionFanfare = true;
|
|
} else if (
|
|
this.formChange.formKey.indexOf(SpeciesFormKey.GIGANTAMAX) > -1 ||
|
|
this.formChange.formKey.indexOf(SpeciesFormKey.ETERNAMAX) > -1
|
|
) {
|
|
globalScene.validateAchv(achvs.GIGANTAMAX);
|
|
playEvolutionFanfare = true;
|
|
}
|
|
|
|
const delay = playEvolutionFanfare ? 4000 : 1750;
|
|
globalScene.playSoundWithoutBgm(
|
|
playEvolutionFanfare ? "evolution_fanfare" : "minor_fanfare",
|
|
);
|
|
|
|
transformedPokemon.destroy();
|
|
globalScene.ui.showText(
|
|
getSpeciesFormChangeMessage(this.pokemon, this.formChange, preName),
|
|
null,
|
|
() => this.end(),
|
|
null,
|
|
true,
|
|
fixedInt(delay),
|
|
);
|
|
globalScene.time.delayedCall(fixedInt(delay + 250), () =>
|
|
globalScene.playBgm(),
|
|
);
|
|
});
|
|
});
|
|
},
|
|
});
|
|
},
|
|
});
|
|
},
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
},
|
|
});
|
|
},
|
|
});
|
|
});
|
|
});
|
|
}
|
|
|
|
end(): void {
|
|
this.pokemon.findAndRemoveTags(t => t.tagType === BattlerTagType.AUTOTOMIZED);
|
|
if (this.modal) {
|
|
globalScene.ui.revertMode().then(() => {
|
|
if (globalScene.ui.getMode() === UiMode.PARTY) {
|
|
const partyUiHandler = globalScene.ui.getHandler() as PartyUiHandler;
|
|
partyUiHandler.clearPartySlots();
|
|
partyUiHandler.populatePartySlots();
|
|
}
|
|
|
|
super.end();
|
|
});
|
|
} else {
|
|
super.end();
|
|
}
|
|
}
|
|
}
|