mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-07-29 19:52:27 +02:00
Merge branch 'beta' into last-respect-implementation
This commit is contained in:
commit
4c1aee8ed1
File diff suppressed because it is too large
Load Diff
@ -22,6 +22,7 @@ import type { Variant, VariantSet } from "#app/data/variant";
|
||||
import { variantData } from "#app/data/variant";
|
||||
import { speciesStarterCosts, POKERUS_STARTER_COUNT } from "#app/data/balance/starters";
|
||||
import { SpeciesFormKey } from "#enums/species-form-key";
|
||||
import { starterPassiveAbilities } from "#app/data/balance/passives";
|
||||
|
||||
export enum Region {
|
||||
NORMAL,
|
||||
@ -230,6 +231,31 @@ export abstract class PokemonSpeciesForm {
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to get the passive ability of a Pokemon species
|
||||
* @param formIndex The form index to use, defaults to form for this species instance
|
||||
* @returns The id of the ability
|
||||
*/
|
||||
getPassiveAbility(formIndex?: number): Abilities {
|
||||
if (Utils.isNullOrUndefined(formIndex)) {
|
||||
formIndex = this.formIndex;
|
||||
}
|
||||
let starterSpeciesId = this.speciesId;
|
||||
while (!(starterSpeciesId in starterPassiveAbilities) || !(formIndex in starterPassiveAbilities[starterSpeciesId])) {
|
||||
if (pokemonPrevolutions.hasOwnProperty(starterSpeciesId)) {
|
||||
starterSpeciesId = pokemonPrevolutions[starterSpeciesId];
|
||||
} else { // If we've reached the base species and still haven't found a matching ability, use form 0 if possible
|
||||
if (0 in starterPassiveAbilities[starterSpeciesId]) {
|
||||
return starterPassiveAbilities[starterSpeciesId][0];
|
||||
} else {
|
||||
console.log("No passive ability found for %s, using run away", this.speciesId);
|
||||
return Abilities.RUN_AWAY;
|
||||
}
|
||||
}
|
||||
}
|
||||
return starterPassiveAbilities[starterSpeciesId][formIndex];
|
||||
}
|
||||
|
||||
getLevelMoves(): LevelMoves {
|
||||
if (pokemonSpeciesFormLevelMoves.hasOwnProperty(this.speciesId) && pokemonSpeciesFormLevelMoves[this.speciesId].hasOwnProperty(this.formIndex)) {
|
||||
return pokemonSpeciesFormLevelMoves[this.speciesId][this.formIndex].slice(0);
|
||||
|
@ -11,7 +11,6 @@ import { HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtk
|
||||
import type { PokemonSpeciesForm } from "#app/data/pokemon-species";
|
||||
import { default as PokemonSpecies, getFusedSpeciesName, getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species";
|
||||
import { getStarterValueFriendshipCap, speciesStarterCosts } from "#app/data/balance/starters";
|
||||
import { starterPassiveAbilities } from "#app/data/balance/passives";
|
||||
import type { Constructor } from "#app/utils";
|
||||
import { isNullOrUndefined, randSeedInt, type nil } from "#app/utils";
|
||||
import * as Utils from "#app/utils";
|
||||
@ -1401,11 +1400,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
||||
return allAbilities[this.customPokemonData.passive];
|
||||
}
|
||||
|
||||
let starterSpeciesId = this.species.speciesId;
|
||||
while (pokemonPrevolutions.hasOwnProperty(starterSpeciesId)) {
|
||||
starterSpeciesId = pokemonPrevolutions[starterSpeciesId];
|
||||
}
|
||||
return allAbilities[starterPassiveAbilities[starterSpeciesId]];
|
||||
return allAbilities[this.species.getPassiveAbility(this.formIndex)];
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -166,7 +166,7 @@ export const SettingKeys = {
|
||||
Field_Volume: "FIELD_VOLUME",
|
||||
SE_Volume: "SE_VOLUME",
|
||||
UI_Volume: "UI_SOUND_EFFECTS",
|
||||
Music_Preference: "MUSIC_PREFERENCE",
|
||||
Battle_Music: "BATTLE_MUSIC",
|
||||
Show_BGM_Bar: "SHOW_BGM_BAR",
|
||||
Move_Touch_Controls: "MOVE_TOUCH_CONTROLS",
|
||||
Shop_Overlay_Opacity: "SHOP_OVERLAY_OPACITY"
|
||||
@ -577,8 +577,8 @@ export const Setting: Array<Setting> = [
|
||||
label: i18next.t("settings:consistent")
|
||||
},
|
||||
{
|
||||
value: "Mixed Animated",
|
||||
label: i18next.t("settings:mixedAnimated")
|
||||
value: "Experimental",
|
||||
label: i18next.t("settings:experimental")
|
||||
}
|
||||
],
|
||||
default: 0,
|
||||
@ -658,11 +658,11 @@ export const Setting: Array<Setting> = [
|
||||
type: SettingType.AUDIO
|
||||
},
|
||||
{
|
||||
key: SettingKeys.Music_Preference,
|
||||
label: i18next.t("settings:musicPreference"),
|
||||
key: SettingKeys.Battle_Music,
|
||||
label: i18next.t("settings:battleMusic"),
|
||||
options: [
|
||||
{
|
||||
value: "Gen V + PMD",
|
||||
value: "Gen V",
|
||||
label: i18next.t("settings:musicGenFive")
|
||||
},
|
||||
{
|
||||
@ -741,7 +741,7 @@ export function setSetting(setting: string, value: integer): boolean {
|
||||
case SettingKeys.UI_Volume:
|
||||
globalScene.uiVolume = value ? parseInt(Setting[index].options[value].value) * 0.01 : 0;
|
||||
break;
|
||||
case SettingKeys.Music_Preference:
|
||||
case SettingKeys.Battle_Music:
|
||||
globalScene.musicPreference = value;
|
||||
break;
|
||||
case SettingKeys.Damage_Numbers:
|
||||
|
@ -362,8 +362,9 @@ describe("UI - Starter select", () => {
|
||||
const handler = game.scene.ui.getHandler() as StarterSelectUiHandler;
|
||||
handler.processInput(Button.RIGHT);
|
||||
handler.processInput(Button.LEFT);
|
||||
handler.processInput(Button.V);
|
||||
handler.processInput(Button.V);
|
||||
handler.processInput(Button.CYCLE_SHINY);
|
||||
handler.processInput(Button.CYCLE_SHINY);
|
||||
handler.processInput(Button.CYCLE_SHINY);
|
||||
handler.processInput(Button.ACTION);
|
||||
game.phaseInterceptor.unlock();
|
||||
});
|
||||
@ -423,7 +424,8 @@ describe("UI - Starter select", () => {
|
||||
const handler = game.scene.ui.getHandler() as StarterSelectUiHandler;
|
||||
handler.processInput(Button.RIGHT);
|
||||
handler.processInput(Button.LEFT);
|
||||
handler.processInput(Button.V);
|
||||
handler.processInput(Button.CYCLE_SHINY);
|
||||
handler.processInput(Button.CYCLE_SHINY);
|
||||
handler.processInput(Button.ACTION);
|
||||
game.phaseInterceptor.unlock();
|
||||
});
|
||||
|
@ -20,7 +20,6 @@ import { pokemonFormLevelMoves, pokemonSpeciesLevelMoves } from "#app/data/balan
|
||||
import type PokemonSpecies from "#app/data/pokemon-species";
|
||||
import { allSpecies, getPokemonSpeciesForm, getPokerusStarters } from "#app/data/pokemon-species";
|
||||
import { getStarterValueFriendshipCap, speciesStarterCosts, POKERUS_STARTER_COUNT } from "#app/data/balance/starters";
|
||||
import { starterPassiveAbilities } from "#app/data/balance/passives";
|
||||
import { Type } from "#enums/type";
|
||||
import { GameModes } from "#app/game-mode";
|
||||
import type { DexAttrProps, DexEntry, StarterMoveset, StarterAttributes, StarterPreferences } from "#app/system/game-data";
|
||||
@ -272,14 +271,12 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
||||
private abilityIconElement: Phaser.GameObjects.Sprite;
|
||||
private genderIconElement: Phaser.GameObjects.Sprite;
|
||||
private natureIconElement: Phaser.GameObjects.Sprite;
|
||||
private variantIconElement: Phaser.GameObjects.Sprite;
|
||||
private goFilterIconElement: Phaser.GameObjects.Sprite;
|
||||
private shinyLabel: Phaser.GameObjects.Text;
|
||||
private formLabel: Phaser.GameObjects.Text;
|
||||
private genderLabel: Phaser.GameObjects.Text;
|
||||
private abilityLabel: Phaser.GameObjects.Text;
|
||||
private natureLabel: Phaser.GameObjects.Text;
|
||||
private variantLabel: Phaser.GameObjects.Text;
|
||||
private goFilterLabel: Phaser.GameObjects.Text;
|
||||
|
||||
private starterSelectMessageBox: Phaser.GameObjects.NineSlice;
|
||||
@ -315,7 +312,6 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
||||
private canCycleGender: boolean;
|
||||
private canCycleAbility: boolean;
|
||||
private canCycleNature: boolean;
|
||||
private canCycleVariant: boolean;
|
||||
|
||||
private assetLoadCancelled: BooleanHolder | null;
|
||||
public cursorObj: Phaser.GameObjects.Image;
|
||||
@ -871,13 +867,6 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
||||
this.natureLabel = addTextObject(this.instructionRowX + this.instructionRowTextOffset, this.instructionRowY, i18next.t("starterSelectUiHandler:cycleNature"), TextStyle.PARTY, { fontSize: instructionTextSize });
|
||||
this.natureLabel.setName("text-nature-label");
|
||||
|
||||
this.variantIconElement = new Phaser.GameObjects.Sprite(globalScene, this.instructionRowX, this.instructionRowY, "keyboard", "V.png");
|
||||
this.variantIconElement.setName("sprite-variant-icon-element");
|
||||
this.variantIconElement.setScale(0.675);
|
||||
this.variantIconElement.setOrigin(0.0, 0.0);
|
||||
this.variantLabel = addTextObject(this.instructionRowX + this.instructionRowTextOffset, this.instructionRowY, i18next.t("starterSelectUiHandler:cycleVariant"), TextStyle.PARTY, { fontSize: instructionTextSize });
|
||||
this.variantLabel.setName("text-variant-label");
|
||||
|
||||
this.goFilterIconElement = new Phaser.GameObjects.Sprite(globalScene, this.filterInstructionRowX, this.filterInstructionRowY, "keyboard", "C.png");
|
||||
this.goFilterIconElement.setName("sprite-goFilter-icon-element");
|
||||
this.goFilterIconElement.setScale(0.675);
|
||||
@ -1854,7 +1843,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
||||
if (!(passiveAttr & PassiveAttr.UNLOCKED)) {
|
||||
const passiveCost = getPassiveCandyCount(speciesStarterCosts[this.lastSpecies.speciesId]);
|
||||
options.push({
|
||||
label: `x${passiveCost} ${i18next.t("starterSelectUiHandler:unlockPassive")} (${allAbilities[starterPassiveAbilities[this.lastSpecies.speciesId]].name})`,
|
||||
label: `x${passiveCost} ${i18next.t("starterSelectUiHandler:unlockPassive")} (${allAbilities[this.lastSpecies.getPassiveAbility()].name})`,
|
||||
handler: () => {
|
||||
if (Overrides.FREE_CANDY_UPGRADE_OVERRIDE || candyCount >= passiveCost) {
|
||||
starterData.passiveAttr |= PassiveAttr.UNLOCKED | PassiveAttr.ENABLED;
|
||||
@ -1999,53 +1988,56 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
||||
switch (button) {
|
||||
case Button.CYCLE_SHINY:
|
||||
if (this.canCycleShiny) {
|
||||
starterAttributes.shiny = starterAttributes.shiny !== undefined ? !starterAttributes.shiny : false;
|
||||
|
||||
if (starterAttributes.shiny) {
|
||||
// Change to shiny, we need to get the proper default variant
|
||||
if (starterAttributes.shiny === false) {
|
||||
// If not shiny, we change to shiny and get the proper default variant
|
||||
const newProps = globalScene.gameData.getSpeciesDexAttrProps(this.lastSpecies, this.getCurrentDexProps(this.lastSpecies.speciesId));
|
||||
const newVariant = starterAttributes.variant ? starterAttributes.variant as Variant : newProps.variant;
|
||||
this.setSpeciesDetails(this.lastSpecies, { shiny: true, variant: newVariant });
|
||||
|
||||
globalScene.playSound("se/sparkle");
|
||||
// Set the variant label to the shiny tint
|
||||
// Cycle tint based on current sprite tint
|
||||
const tint = getVariantTint(newVariant);
|
||||
this.pokemonShinyIcon.setFrame(getVariantIcon(newVariant));
|
||||
this.pokemonShinyIcon.setTint(tint);
|
||||
this.pokemonShinyIcon.setVisible(true);
|
||||
|
||||
starterAttributes.shiny = true;
|
||||
} else {
|
||||
this.setSpeciesDetails(this.lastSpecies, { shiny: false, variant: 0 });
|
||||
this.pokemonShinyIcon.setVisible(false);
|
||||
success = true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case Button.V:
|
||||
if (this.canCycleVariant) {
|
||||
let newVariant = props.variant;
|
||||
do {
|
||||
newVariant = (newVariant + 1) % 3;
|
||||
if (newVariant === 0) {
|
||||
if (this.speciesStarterDexEntry!.caughtAttr & DexAttr.DEFAULT_VARIANT) { // TODO: is this bang correct?
|
||||
break;
|
||||
}
|
||||
} else if (newVariant === 1) {
|
||||
if (this.speciesStarterDexEntry!.caughtAttr & DexAttr.VARIANT_2) { // TODO: is this bang correct?
|
||||
break;
|
||||
// If shiny, we update the variant
|
||||
let newVariant = props.variant;
|
||||
do {
|
||||
newVariant = (newVariant + 1) % 3;
|
||||
if (newVariant === 0) {
|
||||
if (this.speciesStarterDexEntry!.caughtAttr & DexAttr.DEFAULT_VARIANT) { // TODO: is this bang correct?
|
||||
break;
|
||||
}
|
||||
} else if (newVariant === 1) {
|
||||
if (this.speciesStarterDexEntry!.caughtAttr & DexAttr.VARIANT_2) { // TODO: is this bang correct?
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
if (this.speciesStarterDexEntry!.caughtAttr & DexAttr.VARIANT_3) { // TODO: is this bang correct?
|
||||
break;
|
||||
}
|
||||
}
|
||||
} while (newVariant !== props.variant);
|
||||
starterAttributes.variant = newVariant; // store the selected variant
|
||||
// If going to a higher variant, display that
|
||||
if (newVariant > props.variant) {
|
||||
this.setSpeciesDetails(this.lastSpecies, { variant: newVariant as Variant });
|
||||
// Cycle tint based on current sprite tint
|
||||
const tint = getVariantTint(newVariant as Variant);
|
||||
this.pokemonShinyIcon.setFrame(getVariantIcon(newVariant as Variant));
|
||||
this.pokemonShinyIcon.setTint(tint);
|
||||
success = true;
|
||||
// If we have run out of variants, go back to non shiny
|
||||
} else {
|
||||
if (this.speciesStarterDexEntry!.caughtAttr & DexAttr.VARIANT_3) { // TODO: is this bang correct?
|
||||
break;
|
||||
}
|
||||
this.setSpeciesDetails(this.lastSpecies, { shiny: false, variant: 0 });
|
||||
this.pokemonShinyIcon.setVisible(false);
|
||||
success = true;
|
||||
starterAttributes.shiny = false;
|
||||
}
|
||||
} while (newVariant !== props.variant);
|
||||
starterAttributes.variant = newVariant; // store the selected variant
|
||||
this.setSpeciesDetails(this.lastSpecies, { variant: newVariant as Variant });
|
||||
// Cycle tint based on current sprite tint
|
||||
const tint = getVariantTint(newVariant as Variant);
|
||||
this.pokemonShinyIcon.setFrame(getVariantIcon(newVariant as Variant));
|
||||
this.pokemonShinyIcon.setTint(tint);
|
||||
success = true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case Button.CYCLE_FORM:
|
||||
@ -2372,9 +2364,6 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
||||
case SettingKeyboard.Button_Cycle_Nature:
|
||||
iconPath = "N.png";
|
||||
break;
|
||||
case SettingKeyboard.Button_Cycle_Variant:
|
||||
iconPath = "V.png";
|
||||
break;
|
||||
case SettingKeyboard.Button_Stats:
|
||||
iconPath = "C.png";
|
||||
break;
|
||||
@ -2455,9 +2444,6 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
||||
if (this.canCycleNature) {
|
||||
this.updateButtonIcon(SettingKeyboard.Button_Cycle_Nature, gamepadType, this.natureIconElement, this.natureLabel);
|
||||
}
|
||||
if (this.canCycleVariant) {
|
||||
this.updateButtonIcon(SettingKeyboard.Button_Cycle_Variant, gamepadType, this.variantIconElement, this.variantLabel);
|
||||
}
|
||||
}
|
||||
|
||||
// if filter mode is inactivated and gamepadType is not undefined, update the button icons
|
||||
@ -3262,12 +3248,8 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
||||
|
||||
const isNonShinyCaught = !!(caughtAttr & DexAttr.NON_SHINY);
|
||||
const isShinyCaught = !!(caughtAttr & DexAttr.SHINY);
|
||||
const isVariant1Caught = isShinyCaught && !!(caughtAttr & DexAttr.DEFAULT_VARIANT);
|
||||
const isVariant2Caught = isShinyCaught && !!(caughtAttr & DexAttr.VARIANT_2);
|
||||
const isVariant3Caught = isShinyCaught && !!(caughtAttr & DexAttr.VARIANT_3);
|
||||
|
||||
this.canCycleShiny = isNonShinyCaught && isShinyCaught;
|
||||
this.canCycleVariant = !!shiny && [ isVariant1Caught, isVariant2Caught, isVariant3Caught ].filter(v => v).length > 1;
|
||||
|
||||
const isMaleCaught = !!(caughtAttr & DexAttr.MALE);
|
||||
const isFemaleCaught = !!(caughtAttr & DexAttr.FEMALE);
|
||||
@ -3312,7 +3294,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
||||
this.pokemonAbilityText.setShadowColor(this.getTextColor(!isHidden ? TextStyle.SUMMARY_ALT : TextStyle.SUMMARY_GOLD, true));
|
||||
|
||||
const passiveAttr = globalScene.gameData.starterData[species.speciesId].passiveAttr;
|
||||
const passiveAbility = allAbilities[starterPassiveAbilities[this.lastSpecies.speciesId]];
|
||||
const passiveAbility = allAbilities[this.lastSpecies.getPassiveAbility(formIndex)];
|
||||
|
||||
if (this.pokemonAbilityText.visible) {
|
||||
if (this.activeTooltip === "ABILITY") {
|
||||
@ -3826,8 +3808,6 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
||||
this.abilityLabel.setVisible(false);
|
||||
this.natureIconElement.setVisible(false);
|
||||
this.natureLabel.setVisible(false);
|
||||
this.variantIconElement.setVisible(false);
|
||||
this.variantLabel.setVisible(false);
|
||||
this.goFilterIconElement.setVisible(false);
|
||||
this.goFilterLabel.setVisible(false);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user