mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-08-09 17:09:26 +02:00
Create updateSelectedStarterMoveset and fix moveset adjustment for pokemon forms
Co-authored-by: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com>
This commit is contained in:
parent
efecb0bff9
commit
b93cd28316
@ -2663,56 +2663,64 @@ export class StarterSelectUiHandler extends MessageUiHandler {
|
|||||||
this.checkIconId(this.starterIcons[index], species, props.female, props.formIndex, props.shiny, props.variant);
|
this.checkIconId(this.starterIcons[index], species, props.female, props.formIndex, props.shiny, props.variant);
|
||||||
}
|
}
|
||||||
|
|
||||||
switchMoveHandler(i: number, newMove: MoveId, move: MoveId) {
|
/**
|
||||||
const speciesId = this.lastSpecies.speciesId;
|
* Puts a move at the requested index in the current highlighted Pokemon's moveset.
|
||||||
const existingMoveIndex = this.starterMoveset?.indexOf(newMove)!; // TODO: is this bang correct?
|
* If the move was already present in the moveset, swap its position with the one at the requested index.
|
||||||
this.starterMoveset![i] = newMove; // TODO: is this bang correct?
|
*
|
||||||
if (existingMoveIndex > -1) {
|
* @remarks
|
||||||
this.starterMoveset![existingMoveIndex] = move; // TODO: is this bang correct?
|
* ⚠️ {@linkcode starterMoveset | this.starterMoveset} **must not be null when this method is called**
|
||||||
|
* @param targetIndex - The index to place the move
|
||||||
|
* @param newMove - The move to place in the moveset
|
||||||
|
* @param previousMove - The move that was previously in the spot
|
||||||
|
*/
|
||||||
|
switchMoveHandler(targetIndex: number, newMove: MoveId, previousMove: MoveId) {
|
||||||
|
const starterMoveset = this.starterMoveset;
|
||||||
|
if (isNullOrUndefined(starterMoveset)) {
|
||||||
|
console.warn("Trying to update a non-existing moveset");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
const props: DexAttrProps = globalScene.gameData.getSpeciesDexAttrProps(this.lastSpecies, this.dexAttrCursor);
|
|
||||||
|
const speciesId = this.lastSpecies.speciesId;
|
||||||
|
const existingMoveIndex = starterMoveset.indexOf(newMove);
|
||||||
|
starterMoveset[targetIndex] = newMove;
|
||||||
|
if (existingMoveIndex !== -1) {
|
||||||
|
starterMoveset[existingMoveIndex] = previousMove;
|
||||||
|
}
|
||||||
|
const updatedMoveset = starterMoveset.slice() as StarterMoveset;
|
||||||
|
const formIndex = globalScene.gameData.getSpeciesDexAttrProps(this.lastSpecies, this.dexAttrCursor).formIndex;
|
||||||
|
const starterData = globalScene.gameData.starterData[speciesId];
|
||||||
// species has different forms
|
// species has different forms
|
||||||
if (pokemonFormLevelMoves.hasOwnProperty(speciesId)) {
|
if (pokemonFormLevelMoves.hasOwnProperty(speciesId)) {
|
||||||
// starterMoveData doesn't have base form moves or is using the single form format
|
// Species has forms with different movesets
|
||||||
if (
|
if (!starterData.moveset || Array.isArray(starterData.moveset)) {
|
||||||
!globalScene.gameData.starterData[speciesId].moveset ||
|
starterData.moveset = {};
|
||||||
Array.isArray(globalScene.gameData.starterData[speciesId].moveset)
|
|
||||||
) {
|
|
||||||
globalScene.gameData.starterData[speciesId].moveset = {
|
|
||||||
[props.formIndex]: this.starterMoveset?.slice(0) as StarterMoveset,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
const starterMoveData = globalScene.gameData.starterData[speciesId].moveset;
|
|
||||||
|
|
||||||
// starterMoveData doesn't have active form moves
|
|
||||||
if (!starterMoveData.hasOwnProperty(props.formIndex)) {
|
|
||||||
globalScene.gameData.starterData[speciesId].moveset[props.formIndex] = this.starterMoveset?.slice(
|
|
||||||
0,
|
|
||||||
) as StarterMoveset;
|
|
||||||
}
|
|
||||||
|
|
||||||
// does the species' starter move data have its form's starter moves and has it been updated
|
|
||||||
if (starterMoveData.hasOwnProperty(props.formIndex)) {
|
|
||||||
// active form move hasn't been updated
|
|
||||||
if (starterMoveData[props.formIndex][existingMoveIndex] !== newMove) {
|
|
||||||
globalScene.gameData.starterData[speciesId].moveset[props.formIndex] = this.starterMoveset?.slice(
|
|
||||||
0,
|
|
||||||
) as StarterMoveset;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
starterData.moveset[formIndex] = updatedMoveset;
|
||||||
} else {
|
} else {
|
||||||
globalScene.gameData.starterData[speciesId].moveset = this.starterMoveset?.slice(0) as StarterMoveset;
|
starterData.moveset = updatedMoveset;
|
||||||
}
|
}
|
||||||
this.setSpeciesDetails(this.lastSpecies, { forSeen: false });
|
this.setSpeciesDetails(this.lastSpecies, { forSeen: false });
|
||||||
|
|
||||||
// switch moves of starter if exists
|
this.updateSelectedStarterMoveset(speciesId);
|
||||||
if (this.starterMovesets.length) {
|
}
|
||||||
Array.from({ length: this.starterSpecies.length }, (_, i) => {
|
|
||||||
const starterSpecies = this.starterSpecies[i];
|
/**
|
||||||
if (starterSpecies.speciesId === speciesId) {
|
* Update the starter moveset for the given species if it is part of the selected starters.
|
||||||
this.starterMovesets[i] = this.starterMoveset!; // TODO: is this bang correct?
|
*
|
||||||
}
|
* @remarks
|
||||||
});
|
* It is safe to call with a species that is not part of the selected starters.
|
||||||
|
*
|
||||||
|
* @param id - The species ID to update the moveset for
|
||||||
|
*/
|
||||||
|
private updateSelectedStarterMoveset(id: SpeciesId): void {
|
||||||
|
if (this.starterMoveset === null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const [index, species] of this.starterSpecies.entries()) {
|
||||||
|
if (species.speciesId === id) {
|
||||||
|
this.starterMovesets[index] = this.starterMoveset;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3548,6 +3556,11 @@ export class StarterSelectUiHandler extends MessageUiHandler {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!isNullOrUndefined(props.formIndex)) {
|
||||||
|
// If switching forms while the pokemon is in the team, update its moveset
|
||||||
|
this.updateSelectedStarterMoveset(species.speciesId);
|
||||||
|
}
|
||||||
|
|
||||||
const speciesForm = getPokemonSpeciesForm(species.speciesId, props.formIndex);
|
const speciesForm = getPokemonSpeciesForm(species.speciesId, props.formIndex);
|
||||||
this.setTypeIcons(speciesForm.type1, speciesForm.type2);
|
this.setTypeIcons(speciesForm.type1, speciesForm.type2);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user