mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-07-26 02:02:20 +02:00
Filtering obtainable unlocks in dex
This commit is contained in:
parent
e900c1b510
commit
cb0036aa42
@ -741,14 +741,15 @@ export default class PokedexPageUiHandler extends MessageUiHandler {
|
|||||||
return biomes;
|
return biomes;
|
||||||
}
|
}
|
||||||
|
|
||||||
isCaught(otherSpeciesDexEntry?: DexEntry): bigint {
|
isCaught(otherSpecies?: PokemonSpecies): bigint {
|
||||||
if (globalScene.dexForDevs) {
|
if (globalScene.dexForDevs) {
|
||||||
return 255n;
|
return 255n;
|
||||||
}
|
}
|
||||||
|
|
||||||
const dexEntry = otherSpeciesDexEntry ? otherSpeciesDexEntry : this.speciesStarterDexEntry;
|
const species = otherSpecies ? otherSpecies : this.species;
|
||||||
|
const dexEntry = globalScene.gameData.dexData[species.speciesId];
|
||||||
|
|
||||||
return dexEntry?.caughtAttr ?? 0n;
|
return (dexEntry?.caughtAttr ?? 0n) & species.getFullUnlocksData();
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Check whether a given form is caught for a given species.
|
* Check whether a given form is caught for a given species.
|
||||||
@ -765,11 +766,9 @@ export default class PokedexPageUiHandler extends MessageUiHandler {
|
|||||||
}
|
}
|
||||||
const species = otherSpecies ? otherSpecies : this.species;
|
const species = otherSpecies ? otherSpecies : this.species;
|
||||||
const formIndex = otherFormIndex !== undefined ? otherFormIndex : this.formIndex;
|
const formIndex = otherFormIndex !== undefined ? otherFormIndex : this.formIndex;
|
||||||
const dexEntry = globalScene.gameData.dexData[species.speciesId];
|
const caughtAttr = this.isCaught(species);
|
||||||
|
|
||||||
const isFormCaught = dexEntry ?
|
const isFormCaught = (caughtAttr & globalScene.gameData.getFormAttr(formIndex ?? 0)) > 0n;
|
||||||
(dexEntry.caughtAttr & globalScene.gameData.getFormAttr(formIndex ?? 0)) > 0n
|
|
||||||
: false;
|
|
||||||
return isFormCaught;
|
return isFormCaught;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -783,8 +782,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler {
|
|||||||
*/
|
*/
|
||||||
initStarterPrefs(): StarterAttributes {
|
initStarterPrefs(): StarterAttributes {
|
||||||
const starterAttributes : StarterAttributes | null = this.species ? { ...this.savedStarterAttributes } : null;
|
const starterAttributes : StarterAttributes | null = this.species ? { ...this.savedStarterAttributes } : null;
|
||||||
const dexEntry = globalScene.gameData.dexData[this.species.speciesId];
|
const caughtAttr = this.isCaught();
|
||||||
const caughtAttr = this.isCaught(dexEntry);
|
|
||||||
|
|
||||||
// no preferences or Pokemon wasn't caught, return empty attribute
|
// no preferences or Pokemon wasn't caught, return empty attribute
|
||||||
if (!starterAttributes || !caughtAttr) {
|
if (!starterAttributes || !caughtAttr) {
|
||||||
@ -1235,7 +1233,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler {
|
|||||||
|
|
||||||
case MenuOptions.BIOMES:
|
case MenuOptions.BIOMES:
|
||||||
|
|
||||||
if (!(this.isCaught() || this.speciesStarterDexEntry?.seenAttr)) {
|
if (!(isCaught || this.speciesStarterDexEntry?.seenAttr)) {
|
||||||
error = true;
|
error = true;
|
||||||
} else {
|
} else {
|
||||||
this.blockInput = true;
|
this.blockInput = true;
|
||||||
@ -1372,8 +1370,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler {
|
|||||||
});
|
});
|
||||||
this.evolutions.map(evo => {
|
this.evolutions.map(evo => {
|
||||||
const evoSpecies = allSpecies.find(species => species.speciesId === evo.speciesId);
|
const evoSpecies = allSpecies.find(species => species.speciesId === evo.speciesId);
|
||||||
const evoSpeciesStarterDexEntry = evoSpecies ? globalScene.gameData.dexData[evoSpecies.speciesId] : undefined;
|
const isCaughtEvo = this.isCaught(evoSpecies) ? true : false;
|
||||||
const isCaughtEvo = this.isCaught(evoSpeciesStarterDexEntry) ? true : false;
|
|
||||||
// Attempts to find the formIndex of the evolved species
|
// Attempts to find the formIndex of the evolved species
|
||||||
const newFormKey = evo.evoFormKey ? evo.evoFormKey : (this.species.forms.length > 0 ? this.species.forms[this.formIndex].formKey : "");
|
const newFormKey = evo.evoFormKey ? evo.evoFormKey : (this.species.forms.length > 0 ? this.species.forms[this.formIndex].formKey : "");
|
||||||
const matchingForm = evoSpecies?.forms.find(form => form.formKey === newFormKey);
|
const matchingForm = evoSpecies?.forms.find(form => form.formKey === newFormKey);
|
||||||
@ -2096,7 +2093,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler {
|
|||||||
if (species) {
|
if (species) {
|
||||||
const dexEntry = globalScene.gameData.dexData[species.speciesId];
|
const dexEntry = globalScene.gameData.dexData[species.speciesId];
|
||||||
|
|
||||||
const caughtAttr = this.isCaught(dexEntry);
|
const caughtAttr = this.isCaught(species);
|
||||||
|
|
||||||
if (!caughtAttr) {
|
if (!caughtAttr) {
|
||||||
const props = this.starterAttributes;
|
const props = this.starterAttributes;
|
||||||
@ -2329,7 +2326,8 @@ export default class PokedexPageUiHandler extends MessageUiHandler {
|
|||||||
*/
|
*/
|
||||||
getCurrentDexProps(speciesId: number): bigint {
|
getCurrentDexProps(speciesId: number): bigint {
|
||||||
let props = 0n;
|
let props = 0n;
|
||||||
const caughtAttr = globalScene.gameData.dexData[speciesId].caughtAttr;
|
const species = allSpecies.find(sp => sp.speciesId === speciesId);
|
||||||
|
const caughtAttr = globalScene.gameData.dexData[speciesId].caughtAttr & (species?.getFullUnlocksData() ?? 0n);
|
||||||
|
|
||||||
/* this checks the gender of the pokemon; this works by checking a) that the starter preferences for the species exist, and if so, is it female. If so, it'll add DexAttr.FEMALE to our temp props
|
/* this checks the gender of the pokemon; this works by checking a) that the starter preferences for the species exist, and if so, is it female. If so, it'll add DexAttr.FEMALE to our temp props
|
||||||
* It then checks b) if the caughtAttr for the pokemon is female and NOT male - this means that the ONLY gender we've gotten is female, and we need to add DexAttr.FEMALE to our temp props
|
* It then checks b) if the caughtAttr for the pokemon is female and NOT male - this means that the ONLY gender we've gotten is female, and we need to add DexAttr.FEMALE to our temp props
|
||||||
|
@ -565,7 +565,7 @@ export default class PokedexUiHandler extends MessageUiHandler {
|
|||||||
|
|
||||||
this.starterPreferences[species.speciesId] = this.initStarterPrefs(species);
|
this.starterPreferences[species.speciesId] = this.initStarterPrefs(species);
|
||||||
|
|
||||||
if (dexEntry.caughtAttr || globalScene.dexForDevs) {
|
if ((dexEntry.caughtAttr & species.getFullUnlocksData()) || globalScene.dexForDevs) {
|
||||||
icon.clearTint();
|
icon.clearTint();
|
||||||
} else if (dexEntry.seenAttr) {
|
} else if (dexEntry.seenAttr) {
|
||||||
icon.setTint(0x808080);
|
icon.setTint(0x808080);
|
||||||
@ -606,7 +606,7 @@ export default class PokedexUiHandler extends MessageUiHandler {
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
const caughtAttr = dexEntry.caughtAttr;
|
const caughtAttr = dexEntry.caughtAttr & species.getFullUnlocksData();
|
||||||
|
|
||||||
const hasShiny = caughtAttr & DexAttr.SHINY;
|
const hasShiny = caughtAttr & DexAttr.SHINY;
|
||||||
const hasNonShiny = caughtAttr & DexAttr.NON_SHINY;
|
const hasNonShiny = caughtAttr & DexAttr.NON_SHINY;
|
||||||
@ -1255,7 +1255,7 @@ export default class PokedexUiHandler extends MessageUiHandler {
|
|||||||
|
|
||||||
// First, ensure you have the caught attributes for the species else default to bigint 0
|
// First, ensure you have the caught attributes for the species else default to bigint 0
|
||||||
// TODO: This might be removed depending on how accessible we want the pokedex function to be
|
// TODO: This might be removed depending on how accessible we want the pokedex function to be
|
||||||
const caughtAttr = globalScene.gameData.dexData[container.species.speciesId]?.caughtAttr || BigInt(0);
|
const caughtAttr = (globalScene.gameData.dexData[container.species.speciesId]?.caughtAttr || BigInt(0)) & container.species.getFullUnlocksData();
|
||||||
const starterData = globalScene.gameData.starterData[starterId];
|
const starterData = globalScene.gameData.starterData[starterId];
|
||||||
const isStarterProgressable = speciesEggMoves.hasOwnProperty(starterId);
|
const isStarterProgressable = speciesEggMoves.hasOwnProperty(starterId);
|
||||||
|
|
||||||
@ -1580,11 +1580,12 @@ export default class PokedexUiHandler extends MessageUiHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const speciesId = container.species.speciesId;
|
const speciesId = container.species.speciesId;
|
||||||
|
const caughtAttr = globalScene.gameData.dexData[speciesId].caughtAttr & container.species.getFullUnlocksData();
|
||||||
this.updateStarterValueLabel(container);
|
this.updateStarterValueLabel(container);
|
||||||
|
|
||||||
container.label.setVisible(true);
|
container.label.setVisible(true);
|
||||||
const speciesVariants = speciesId && globalScene.gameData.dexData[speciesId].caughtAttr & DexAttr.SHINY
|
const speciesVariants = speciesId && caughtAttr & DexAttr.SHINY
|
||||||
? [ DexAttr.DEFAULT_VARIANT, DexAttr.VARIANT_2, DexAttr.VARIANT_3 ].filter(v => !!(globalScene.gameData.dexData[speciesId].caughtAttr & v))
|
? [ DexAttr.DEFAULT_VARIANT, DexAttr.VARIANT_2, DexAttr.VARIANT_3 ].filter(v => !!(caughtAttr & v))
|
||||||
: [];
|
: [];
|
||||||
for (let v = 0; v < 3; v++) {
|
for (let v = 0; v < 3; v++) {
|
||||||
const hasVariant = speciesVariants.length > v;
|
const hasVariant = speciesVariants.length > v;
|
||||||
@ -1595,7 +1596,7 @@ export default class PokedexUiHandler extends MessageUiHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
container.starterPassiveBgs.setVisible(!!globalScene.gameData.starterData[this.getStarterSpeciesId(speciesId)].passiveAttr);
|
container.starterPassiveBgs.setVisible(!!globalScene.gameData.starterData[this.getStarterSpeciesId(speciesId)].passiveAttr);
|
||||||
container.hiddenAbilityIcon.setVisible(!!globalScene.gameData.dexData[speciesId].caughtAttr && !!(globalScene.gameData.starterData[this.getStarterSpeciesId(speciesId)].abilityAttr & 4));
|
container.hiddenAbilityIcon.setVisible(!!caughtAttr && !!(globalScene.gameData.starterData[this.getStarterSpeciesId(speciesId)].abilityAttr & 4));
|
||||||
container.classicWinIcon.setVisible(globalScene.gameData.starterData[this.getStarterSpeciesId(speciesId)].classicWinCount > 0);
|
container.classicWinIcon.setVisible(globalScene.gameData.starterData[this.getStarterSpeciesId(speciesId)].classicWinCount > 0);
|
||||||
container.favoriteIcon.setVisible(this.starterPreferences[speciesId]?.favorite ?? false);
|
container.favoriteIcon.setVisible(this.starterPreferences[speciesId]?.favorite ?? false);
|
||||||
|
|
||||||
@ -1729,7 +1730,7 @@ export default class PokedexUiHandler extends MessageUiHandler {
|
|||||||
|
|
||||||
this.trayContainers = [];
|
this.trayContainers = [];
|
||||||
this.trayForms.map((f, index) => {
|
this.trayForms.map((f, index) => {
|
||||||
const isFormCaught = dexEntry ? (dexEntry.caughtAttr & globalScene.gameData.getFormAttr(f.formIndex ?? 0)) > 0n : false;
|
const isFormCaught = dexEntry ? (dexEntry.caughtAttr & species.getFullUnlocksData() & globalScene.gameData.getFormAttr(f.formIndex ?? 0)) > 0n : false;
|
||||||
const isFormSeen = dexEntry ? (dexEntry.seenAttr & globalScene.gameData.getFormAttr(f.formIndex ?? 0)) > 0n : false;
|
const isFormSeen = dexEntry ? (dexEntry.seenAttr & globalScene.gameData.getFormAttr(f.formIndex ?? 0)) > 0n : false;
|
||||||
const formContainer = new PokedexMonContainer(species, { formIndex: f.formIndex, female: props.female, shiny: props.shiny, variant: props.variant });
|
const formContainer = new PokedexMonContainer(species, { formIndex: f.formIndex, female: props.female, shiny: props.shiny, variant: props.variant });
|
||||||
this.iconAnimHandler.addOrUpdate(formContainer.icon, PokemonIconAnimMode.NONE);
|
this.iconAnimHandler.addOrUpdate(formContainer.icon, PokemonIconAnimMode.NONE);
|
||||||
@ -1900,8 +1901,9 @@ export default class PokedexUiHandler extends MessageUiHandler {
|
|||||||
|
|
||||||
if (species) {
|
if (species) {
|
||||||
const dexEntry = globalScene.gameData.dexData[species.speciesId];
|
const dexEntry = globalScene.gameData.dexData[species.speciesId];
|
||||||
|
const caughtAttr = dexEntry.caughtAttr & species.getFullUnlocksData();
|
||||||
|
|
||||||
if (!dexEntry.caughtAttr) {
|
if (!caughtAttr) {
|
||||||
const props = this.getSanitizedProps(globalScene.gameData.getSpeciesDexAttrProps(species, this.getCurrentDexProps(species.speciesId)));
|
const props = this.getSanitizedProps(globalScene.gameData.getSpeciesDexAttrProps(species, this.getCurrentDexProps(species.speciesId)));
|
||||||
|
|
||||||
if (shiny === undefined) {
|
if (shiny === undefined) {
|
||||||
@ -1918,7 +1920,7 @@ export default class PokedexUiHandler extends MessageUiHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const isFormCaught = dexEntry ? (dexEntry.caughtAttr & globalScene.gameData.getFormAttr(formIndex ?? 0)) > 0n : false;
|
const isFormCaught = dexEntry ? (caughtAttr & globalScene.gameData.getFormAttr(formIndex ?? 0)) > 0n : false;
|
||||||
const isFormSeen = dexEntry ? (dexEntry.seenAttr & globalScene.gameData.getFormAttr(formIndex ?? 0)) > 0n : false;
|
const isFormSeen = dexEntry ? (dexEntry.seenAttr & globalScene.gameData.getFormAttr(formIndex ?? 0)) > 0n : false;
|
||||||
|
|
||||||
const assetLoadCancelled = new BooleanHolder(false);
|
const assetLoadCancelled = new BooleanHolder(false);
|
||||||
@ -2060,7 +2062,8 @@ export default class PokedexUiHandler extends MessageUiHandler {
|
|||||||
*/
|
*/
|
||||||
getCurrentDexProps(speciesId: number): bigint {
|
getCurrentDexProps(speciesId: number): bigint {
|
||||||
let props = 0n;
|
let props = 0n;
|
||||||
const caughtAttr = globalScene.gameData.dexData[speciesId].caughtAttr;
|
const species = allSpecies.find(sp => sp.speciesId === speciesId);
|
||||||
|
const caughtAttr = globalScene.gameData.dexData[speciesId].caughtAttr & (species?.getFullUnlocksData() ?? 0n);
|
||||||
|
|
||||||
/* this checks the gender of the pokemon; this works by checking a) that the starter preferences for the species exist, and if so, is it female. If so, it'll add DexAttr.FEMALE to our temp props
|
/* this checks the gender of the pokemon; this works by checking a) that the starter preferences for the species exist, and if so, is it female. If so, it'll add DexAttr.FEMALE to our temp props
|
||||||
* It then checks b) if the caughtAttr for the pokemon is female and NOT male - this means that the ONLY gender we've gotten is female, and we need to add DexAttr.FEMALE to our temp props
|
* It then checks b) if the caughtAttr for the pokemon is female and NOT male - this means that the ONLY gender we've gotten is female, and we need to add DexAttr.FEMALE to our temp props
|
||||||
|
Loading…
Reference in New Issue
Block a user