diff --git a/src/data/move.ts b/src/data/move.ts index 18f4b220911..11ce7069664 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -9384,7 +9384,7 @@ export function initMoves() { .attr(BypassBurnDamageReductionAttr), new AttackMove(Moves.FOCUS_PUNCH, Type.FIGHTING, MoveCategory.PHYSICAL, 150, 100, 20, -1, -3, 3) .attr(MessageHeaderAttr, (user, move) => i18next.t("moveTriggers:isTighteningFocus", { pokemonName: getPokemonNameWithAffix(user) })) - .attr(PreUseInterruptAttr, i18next.t("moveTriggers:lostFocus"), user => !!user.turnData.attacksReceived.find(r => r.damage)) + .attr(PreUseInterruptAttr, (user, target, move) => i18next.t("moveTriggers:lostFocus", { pokemonName: getPokemonNameWithAffix(user) }), user => !!user.turnData.attacksReceived.find(r => r.damage)) .punchingMove(), new AttackMove(Moves.SMELLING_SALTS, Type.NORMAL, MoveCategory.PHYSICAL, 70, 100, 10, -1, 0, 3) .attr(MovePowerMultiplierAttr, (user, target, move) => target.status?.effect === StatusEffect.PARALYSIS ? 2 : 1) diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 57e25325ba4..aefc583a98a 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -1645,11 +1645,19 @@ export class GameData { } else if (formIndex === 3) { dexEntry.caughtAttr |= globalScene.gameData.getFormAttr(1); } - } - const allFormChanges = pokemonFormChanges.hasOwnProperty(species.speciesId) ? pokemonFormChanges[species.speciesId] : []; - const toCurrentFormChanges = allFormChanges.filter(f => (f.formKey === formKey)); - if (toCurrentFormChanges.length > 0) { - dexEntry.caughtAttr |= globalScene.gameData.getFormAttr(0); + } else if (pokemon.species.speciesId === Species.ZYGARDE) { + if (formIndex === 4) { + dexEntry.caughtAttr |= globalScene.gameData.getFormAttr(2); + } else if (formIndex === 5) { + dexEntry.caughtAttr |= globalScene.gameData.getFormAttr(3); + } + } else { + const allFormChanges = pokemonFormChanges.hasOwnProperty(species.speciesId) ? pokemonFormChanges[species.speciesId] : []; + const toCurrentFormChanges = allFormChanges.filter(f => (f.formKey === formKey)); + if (toCurrentFormChanges.length > 0) { + // Needs to do this or Castform can unlock the wrong form, etc. + dexEntry.caughtAttr |= globalScene.gameData.getFormAttr(0); + } } } diff --git a/src/ui/abstact-option-select-ui-handler.ts b/src/ui/abstact-option-select-ui-handler.ts index 07e43a344dd..a462ed158cb 100644 --- a/src/ui/abstact-option-select-ui-handler.ts +++ b/src/ui/abstact-option-select-ui-handler.ts @@ -147,7 +147,7 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler { itemIcon.setScale(3 * this.scale); this.optionSelectIcons.push(itemIcon); - this.optionSelectContainer.add(itemIcon); + this.optionSelectTextContainer.add(itemIcon); itemIcon.setPositionRelative(this.optionSelectText, 36 * this.scale, 7 + i * (114 * this.scale - 3)); @@ -156,7 +156,7 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler { itemOverlayIcon.setScale(3 * this.scale); this.optionSelectIcons.push(itemOverlayIcon); - this.optionSelectContainer.add(itemOverlayIcon); + this.optionSelectTextContainer.add(itemOverlayIcon); itemOverlayIcon.setPositionRelative(this.optionSelectText, 36 * this.scale, 7 + i * (114 * this.scale - 3)); diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index f267c86d558..6bf559843c3 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -602,6 +602,14 @@ export default class PokedexPageUiHandler extends MessageUiHandler { this.battleForms = []; const species = this.species; + + let formKey = this.species?.forms.length > 0 ? this.species.forms[this.formIndex].formKey : ""; + this.isFormGender = formKey === "male" || formKey === "female"; + if (this.isFormGender && ((this.savedStarterAttributes.female === true && formKey === "male") || (this.savedStarterAttributes.female === false && formKey === "female"))) { + this.formIndex = (this.formIndex + 1) % 2; + formKey = this.species.forms[this.formIndex].formKey; + } + const formIndex = this.formIndex ?? 0; this.starterId = this.getStarterSpeciesId(this.species.speciesId); @@ -635,12 +643,9 @@ export default class PokedexPageUiHandler extends MessageUiHandler { this.eggMoves = speciesEggMoves[this.starterId] ?? []; this.hasEggMoves = Array.from({ length: 4 }, (_, em) => (globalScene.gameData.starterData[this.starterId].eggMoves & (1 << em)) !== 0); - 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.isFormGender = formKey === "male" || formKey === "female"; - const passiveId = starterPassiveAbilities.hasOwnProperty(species.speciesId) ? species.speciesId : starterPassiveAbilities.hasOwnProperty(this.starterId) ? this.starterId : pokemonPrevolutions[this.starterId]; const passives = starterPassiveAbilities[passiveId]; diff --git a/src/ui/pokedex-ui-handler.ts b/src/ui/pokedex-ui-handler.ts index a18f138e4f7..83739ba26a8 100644 --- a/src/ui/pokedex-ui-handler.ts +++ b/src/ui/pokedex-ui-handler.ts @@ -986,7 +986,7 @@ export default class PokedexUiHandler extends MessageUiHandler { this.updateScroll(); const proportion = this.filterBarCursor / Math.max(1, this.filterBar.numFilters - 1); const targetCol = Math.min(8, proportion < 0.5 ? Math.floor(proportion * 8) : Math.ceil(proportion * 8)); - this.setCursor(Math.min(targetCol, numberOfStarters)); + this.setCursor(Math.min(targetCol, numberOfStarters - 1)); success = true; } break; @@ -1108,7 +1108,7 @@ export default class PokedexUiHandler extends MessageUiHandler { } break; case Button.DOWN: - if (currentRow < numOfRows - 1) { // not last row + if ((currentRow < numOfRows - 1) && (this.cursor + 9 < this.filteredPokemonData.length)) { // not last row if (currentRow - this.scrollCursor === 8) { // last row of visible pokemon this.scrollCursor++; this.updateScroll(); @@ -1577,6 +1577,37 @@ export default class PokedexUiHandler extends MessageUiHandler { container.icon.setTint(0); } + if (data.eggMove1) { + container.eggMove1Icon.setVisible(true); + } else { + container.eggMove1Icon.setVisible(false); + } + if (data.eggMove2) { + container.eggMove2Icon.setVisible(true); + } else { + container.eggMove2Icon.setVisible(false); + } + if (data.tmMove1) { + container.tmMove1Icon.setVisible(true); + } else { + container.tmMove1Icon.setVisible(false); + } + if (data.tmMove2) { + container.tmMove2Icon.setVisible(true); + } else { + container.tmMove2Icon.setVisible(false); + } + if (data.passive1) { + container.passive1Icon.setVisible(true); + } else { + container.passive1Icon.setVisible(false); + } + if (data.passive2) { + container.passive2Icon.setVisible(true); + } else { + container.passive2Icon.setVisible(false); + } + if (this.showDecorations) { if (this.pokerusSpecies.includes(data.species)) { diff --git a/test/moves/focus_punch.test.ts b/test/moves/focus_punch.test.ts index 9bf858dfda5..1f14a19fbd7 100644 --- a/test/moves/focus_punch.test.ts +++ b/test/moves/focus_punch.test.ts @@ -140,6 +140,6 @@ describe("Moves - Focus Punch", () => { await game.phaseInterceptor.to("MessagePhase", false); const consoleSpy = vi.spyOn(console, "log"); await game.phaseInterceptor.to("MoveEndPhase", true); - expect(consoleSpy).nthCalledWith(1, i18next.t("moveTriggers:lostFocus")); + expect(consoleSpy).nthCalledWith(1, i18next.t("moveTriggers:lostFocus", { pokemonName: "Charizard" })); }); });