diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 90f9c073f95..70e27467ab0 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -147,6 +147,7 @@ export default class BattleScene extends SceneBase { public damageNumbersMode: integer = 0; public reroll: boolean = false; public shopCursorTarget: number = ShopCursorTarget.REWARDS; + public commandCursorMemory: boolean = false; public showMovesetFlyout: boolean = true; public showArenaFlyout: boolean = true; public showTimeOfDayWidget: boolean = true; diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index d1ca0bbd421..5344a7eb802 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -4489,6 +4489,7 @@ export class PlayerPokemon extends Pokemon { newPokemon.moveset = this.moveset.slice(); newPokemon.moveset = this.copyMoveset(); newPokemon.luck = this.luck; + newPokemon.gender = Gender.GENDERLESS; newPokemon.metLevel = this.metLevel; newPokemon.metBiome = this.metBiome; newPokemon.metSpecies = this.metSpecies; diff --git a/src/phases/command-phase.ts b/src/phases/command-phase.ts index eab76282908..fa85f2427e5 100644 --- a/src/phases/command-phase.ts +++ b/src/phases/command-phase.ts @@ -35,8 +35,14 @@ export class CommandPhase extends FieldPhase { this.scene.updateGameInfo(); const commandUiHandler = this.scene.ui.handlers[Mode.COMMAND]; + + // If one of these conditions is true, we always reset the cursor to Command.FIGHT + const cursorResetEvent = this.scene.currentBattle.battleType === BattleType.MYSTERY_ENCOUNTER || + this.scene.currentBattle.battleType === BattleType.TRAINER || + this.scene.arena.biomeType === Biome.END; + if (commandUiHandler) { - if (this.scene.currentBattle.turn === 1 || commandUiHandler.getCursor() === Command.POKEMON) { + if ((this.scene.currentBattle.turn === 1 && (!this.scene.commandCursorMemory || cursorResetEvent)) || commandUiHandler.getCursor() === Command.POKEMON) { commandUiHandler.setCursor(Command.FIGHT); } else { commandUiHandler.setCursor(commandUiHandler.getCursor()); diff --git a/src/system/settings/settings.ts b/src/system/settings/settings.ts index 64ddfdae5cf..ebdcad1c4f9 100644 --- a/src/system/settings/settings.ts +++ b/src/system/settings/settings.ts @@ -157,6 +157,7 @@ export const SettingKeys = { Move_Animations: "MOVE_ANIMATIONS", Show_Stats_on_Level_Up: "SHOW_LEVEL_UP_STATS", Shop_Cursor_Target: "SHOP_CURSOR_TARGET", + Command_Cursor_Memory: "COMMAND_CURSOR_MEMORY", Candy_Upgrade_Notification: "CANDY_UPGRADE_NOTIFICATION", Candy_Upgrade_Display: "CANDY_UPGRADE_DISPLAY", Move_Info: "MOVE_INFO", @@ -339,6 +340,13 @@ export const Setting: Array = [ default: 0, type: SettingType.GENERAL }, + { + key: SettingKeys.Command_Cursor_Memory, + label: i18next.t("settings:commandCursorMemory"), + options: OFF_ON, + default: 0, + type: SettingType.GENERAL + }, { key: SettingKeys.Enable_Retries, label: i18next.t("settings:enableRetries"), @@ -827,6 +835,9 @@ export function setSetting(scene: BattleScene, setting: string, value: integer): const selectedValue = shopCursorTargetIndexMap[value]; scene.shopCursorTarget = selectedValue; break; + case SettingKeys.Command_Cursor_Memory: + scene.commandCursorMemory = Setting[index].options[value].value === "On"; + break; case SettingKeys.EXP_Gains_Speed: scene.expGainsSpeed = value; break; diff --git a/src/test/evolution.test.ts b/src/test/evolution.test.ts index 3046d103cbc..10748899d59 100644 --- a/src/test/evolution.test.ts +++ b/src/test/evolution.test.ts @@ -78,12 +78,15 @@ describe("Evolution", () => { const nincada = game.scene.getPlayerPokemon()!; nincada.abilityIndex = 2; nincada.metBiome = -1; + nincada.gender = 1; nincada.evolve(pokemonEvolutions[Species.NINCADA][0], nincada.getSpeciesForm()); const ninjask = game.scene.getPlayerParty()[0]; const shedinja = game.scene.getPlayerParty()[1]; expect(ninjask.abilityIndex).toBe(2); expect(shedinja.abilityIndex).toBe(1); + expect(ninjask.gender).toBe(1); + expect(shedinja.gender).toBe(-1); // Regression test for https://github.com/pagefaultgames/pokerogue/issues/3842 expect(shedinja.metBiome).toBe(-1); });