mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-07-28 11:12:24 +02:00
Displaying form-specific TMs properly; adjusting for passives rework
This commit is contained in:
parent
7d4e383052
commit
b19d223324
@ -1,7 +1,15 @@
|
|||||||
import { Abilities } from "#app/enums/abilities";
|
import { Abilities } from "#app/enums/abilities";
|
||||||
import { Species } from "#app/enums/species";
|
import { Species } from "#app/enums/species";
|
||||||
|
|
||||||
export const starterPassiveAbilities = {
|
export interface PassiveAbilities {
|
||||||
|
[key: integer]: Abilities
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface StarterPassiveAbilities {
|
||||||
|
[key: integer]: PassiveAbilities
|
||||||
|
}
|
||||||
|
|
||||||
|
export const starterPassiveAbilities: StarterPassiveAbilities = {
|
||||||
[Species.BULBASAUR]: { 0: Abilities.GRASSY_SURGE },
|
[Species.BULBASAUR]: { 0: Abilities.GRASSY_SURGE },
|
||||||
[Species.CHARMANDER]: { 0: Abilities.BEAST_BOOST },
|
[Species.CHARMANDER]: { 0: Abilities.BEAST_BOOST },
|
||||||
[Species.SQUIRTLE]: { 0: Abilities.STURDY },
|
[Species.SQUIRTLE]: { 0: Abilities.STURDY },
|
||||||
|
@ -68434,7 +68434,7 @@ export const tmSpecies: TmSpecies = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
interface SpeciesTmMoves {
|
interface SpeciesTmMoves {
|
||||||
[key: integer]: Moves[]
|
[key: integer]: (Moves | [string | Species, Moves])[];
|
||||||
}
|
}
|
||||||
|
|
||||||
function flipTmSpecies(tmSpecies: TmSpecies): SpeciesTmMoves {
|
function flipTmSpecies(tmSpecies: TmSpecies): SpeciesTmMoves {
|
||||||
@ -68445,11 +68445,27 @@ function flipTmSpecies(tmSpecies: TmSpecies): SpeciesTmMoves {
|
|||||||
const speciesList = tmSpecies[move];
|
const speciesList = tmSpecies[move];
|
||||||
|
|
||||||
for (const species of speciesList) {
|
for (const species of speciesList) {
|
||||||
const speciesKey = Number(species);
|
|
||||||
if (!flipped[speciesKey]) {
|
if (Array.isArray(species)) {
|
||||||
flipped[speciesKey] = [];
|
// Extract base species and all associated forms
|
||||||
|
const [ baseSpecies, ...forms ] = species;
|
||||||
|
const speciesKey = Number(baseSpecies);
|
||||||
|
|
||||||
|
if (!flipped[speciesKey]) {
|
||||||
|
flipped[speciesKey] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const form of forms) {
|
||||||
|
flipped[speciesKey].push([ form, moveKey ]);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
const speciesKey = Number(species);
|
||||||
|
if (!flipped[speciesKey]) {
|
||||||
|
flipped[speciesKey] = [];
|
||||||
|
}
|
||||||
|
flipped[speciesKey].push(moveKey);
|
||||||
}
|
}
|
||||||
flipped[speciesKey].push(moveKey);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return flipped;
|
return flipped;
|
||||||
@ -68457,7 +68473,6 @@ function flipTmSpecies(tmSpecies: TmSpecies): SpeciesTmMoves {
|
|||||||
|
|
||||||
export const speciesTmMoves: SpeciesTmMoves = flipTmSpecies(tmSpecies);
|
export const speciesTmMoves: SpeciesTmMoves = flipTmSpecies(tmSpecies);
|
||||||
|
|
||||||
|
|
||||||
interface TmPoolTiers {
|
interface TmPoolTiers {
|
||||||
[key: integer]: ModifierTier
|
[key: integer]: ModifierTier
|
||||||
}
|
}
|
||||||
|
@ -632,9 +632,12 @@ export default class PokedexPageUiHandler extends MessageUiHandler {
|
|||||||
this.eggMoves = speciesEggMoves[this.getStarterSpeciesId(species.speciesId)] ?? [];
|
this.eggMoves = speciesEggMoves[this.getStarterSpeciesId(species.speciesId)] ?? [];
|
||||||
this.hasEggMoves = Array.from({ length: 4 }, (_, em) => (globalScene.gameData.starterData[this.getStarterSpeciesId(species.speciesId)].eggMoves & (1 << em)) !== 0);
|
this.hasEggMoves = Array.from({ length: 4 }, (_, em) => (globalScene.gameData.starterData[this.getStarterSpeciesId(species.speciesId)].eggMoves & (1 << em)) !== 0);
|
||||||
|
|
||||||
this.tmMoves = (speciesTmMoves[species.speciesId] ?? []).sort((a, b) => allMoves[a].name > allMoves[b].name ? 1 : -1);
|
const formKey = this.species?.forms.length > 0 ? this.species.forms[this.formIndex].formKey : "";
|
||||||
|
this.tmMoves = speciesTmMoves[species.speciesId]?.filter(m => Array.isArray(m) ? (m[0] === formKey ? true : false ) : true)
|
||||||
|
.map(m => Array.isArray(m) ? m[1] : m).sort((a, b) => allMoves[a].name > allMoves[b].name ? 1 : -1) ?? [];
|
||||||
|
|
||||||
this.passive = starterPassiveAbilities[this.getStarterSpeciesId(species.speciesId)];
|
const passives = starterPassiveAbilities[this.getStarterSpeciesId(species.speciesId)];
|
||||||
|
this.passive = (this.formIndex in passives) ? passives[formIndex] : passives[0];
|
||||||
|
|
||||||
const starterData = globalScene.gameData.starterData[this.getStarterSpeciesId(species.speciesId)];
|
const starterData = globalScene.gameData.starterData[this.getStarterSpeciesId(species.speciesId)];
|
||||||
const abilityAttr = starterData.abilityAttr;
|
const abilityAttr = starterData.abilityAttr;
|
||||||
@ -1640,7 +1643,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler {
|
|||||||
if (!(passiveAttr & PassiveAttr.UNLOCKED)) {
|
if (!(passiveAttr & PassiveAttr.UNLOCKED)) {
|
||||||
const passiveCost = getPassiveCandyCount(speciesStarterCosts[this.getStarterSpeciesId(this.species.speciesId)]);
|
const passiveCost = getPassiveCandyCount(speciesStarterCosts[this.getStarterSpeciesId(this.species.speciesId)]);
|
||||||
options.push({
|
options.push({
|
||||||
label: `x${passiveCost} ${i18next.t("pokedexUiHandler:unlockPassive")} (${allAbilities[starterPassiveAbilities[this.getStarterSpeciesId(this.species.speciesId)]].name})`,
|
label: `x${passiveCost} ${i18next.t("pokedexUiHandler:unlockPassive")} (${allAbilities[this.passive].name})`,
|
||||||
handler: () => {
|
handler: () => {
|
||||||
if (Overrides.FREE_CANDY_UPGRADE_OVERRIDE || candyCount >= passiveCost) {
|
if (Overrides.FREE_CANDY_UPGRADE_OVERRIDE || candyCount >= passiveCost) {
|
||||||
starterData.passiveAttr |= PassiveAttr.UNLOCKED | PassiveAttr.ENABLED;
|
starterData.passiveAttr |= PassiveAttr.UNLOCKED | PassiveAttr.ENABLED;
|
||||||
|
@ -34,6 +34,7 @@ import { addWindow } from "./ui-theme";
|
|||||||
import type { OptionSelectConfig } from "./abstact-option-select-ui-handler";
|
import type { OptionSelectConfig } from "./abstact-option-select-ui-handler";
|
||||||
import { FilterText, FilterTextRow } from "./filter-text";
|
import { FilterText, FilterTextRow } from "./filter-text";
|
||||||
import { allAbilities } from "#app/data/ability";
|
import { allAbilities } from "#app/data/ability";
|
||||||
|
import type { PassiveAbilities } from "#app/data/balance/passives";
|
||||||
import { starterPassiveAbilities } from "#app/data/balance/passives";
|
import { starterPassiveAbilities } from "#app/data/balance/passives";
|
||||||
import { allMoves } from "#app/data/move";
|
import { allMoves } from "#app/data/move";
|
||||||
import { speciesTmMoves } from "#app/data/balance/tms";
|
import { speciesTmMoves } from "#app/data/balance/tms";
|
||||||
@ -1192,7 +1193,7 @@ export default class PokedexUiHandler extends MessageUiHandler {
|
|||||||
const levelMoves = pokemonSpeciesLevelMoves[container.species.speciesId].map(m => allMoves[m[1]].name);
|
const levelMoves = pokemonSpeciesLevelMoves[container.species.speciesId].map(m => allMoves[m[1]].name);
|
||||||
// This always gets egg moves from the starter
|
// This always gets egg moves from the starter
|
||||||
const eggMoves = speciesEggMoves[this.getStarterSpeciesId(container.species.speciesId)]?.map(m => allMoves[m].name) ?? [];
|
const eggMoves = speciesEggMoves[this.getStarterSpeciesId(container.species.speciesId)]?.map(m => allMoves[m].name) ?? [];
|
||||||
const tmMoves = speciesTmMoves[container.species.speciesId]?.map(m => allMoves[m].name) ?? [];
|
const tmMoves = speciesTmMoves[this.getStarterSpeciesId(container.species.speciesId)]?.map(m => allMoves[Array.isArray(m) ? m[1] : m].name) ?? [];
|
||||||
const selectedMove1 = this.filterText.getValue(FilterTextRow.MOVE_1);
|
const selectedMove1 = this.filterText.getValue(FilterTextRow.MOVE_1);
|
||||||
const selectedMove2 = this.filterText.getValue(FilterTextRow.MOVE_2);
|
const selectedMove2 = this.filterText.getValue(FilterTextRow.MOVE_2);
|
||||||
|
|
||||||
@ -1225,16 +1226,17 @@ export default class PokedexUiHandler extends MessageUiHandler {
|
|||||||
|
|
||||||
// Ability filter
|
// Ability filter
|
||||||
const abilities = [ container.species.ability1, container.species.ability2, container.species.abilityHidden ].map(a => allAbilities[a].name);
|
const abilities = [ container.species.ability1, container.species.ability2, container.species.abilityHidden ].map(a => allAbilities[a].name);
|
||||||
const passive = starterPassiveAbilities[this.getStarterSpeciesId(container.species.speciesId)] ?? 0;
|
console.log(container.species.name, this.getStarterSpeciesId(container.species.speciesId));
|
||||||
|
const passives = starterPassiveAbilities[this.getStarterSpeciesId(container.species.speciesId)] ?? {} as PassiveAbilities;
|
||||||
|
|
||||||
const selectedAbility1 = this.filterText.getValue(FilterTextRow.ABILITY_1);
|
const selectedAbility1 = this.filterText.getValue(FilterTextRow.ABILITY_1);
|
||||||
const fitsFormAbility = container.species.forms.some(form => allAbilities[form.ability1].name === selectedAbility1);
|
const fitsFormAbility = container.species.forms.some(form => allAbilities[form.ability1].name === selectedAbility1);
|
||||||
const fitsAbility1 = abilities.includes(selectedAbility1) || fitsFormAbility || selectedAbility1 === this.filterText.defaultText;
|
const fitsAbility1 = abilities.includes(selectedAbility1) || fitsFormAbility || selectedAbility1 === this.filterText.defaultText;
|
||||||
const fitsPassive1 = allAbilities[passive].name === selectedAbility1;
|
const fitsPassive1 = Object.values(passives).some(p => p.name === selectedAbility1);
|
||||||
|
|
||||||
const selectedAbility2 = this.filterText.getValue(FilterTextRow.ABILITY_2);
|
const selectedAbility2 = this.filterText.getValue(FilterTextRow.ABILITY_2);
|
||||||
const fitsAbility2 = abilities.includes(selectedAbility2) || fitsFormAbility || selectedAbility2 === this.filterText.defaultText;
|
const fitsAbility2 = abilities.includes(selectedAbility2) || fitsFormAbility || selectedAbility2 === this.filterText.defaultText;
|
||||||
const fitsPassive2 = allAbilities[passive].name === selectedAbility2;
|
const fitsPassive2 = Object.values(passives).some(p => p.name === selectedAbility2);
|
||||||
|
|
||||||
// If both fields have been set to the same ability, show both ability and passive
|
// If both fields have been set to the same ability, show both ability and passive
|
||||||
const fitsAbilities = (fitsAbility1 && (fitsPassive2 || selectedAbility2 === this.filterText.defaultText)) ||
|
const fitsAbilities = (fitsAbility1 && (fitsPassive2 || selectedAbility2 === this.filterText.defaultText)) ||
|
||||||
|
Loading…
Reference in New Issue
Block a user