From d45cdcb9e0bc80b76dda3793350c1f93cf41c423 Mon Sep 17 00:00:00 2001 From: Kurt Date: Mon, 15 Dec 2025 15:28:26 -0600 Subject: [PATCH] Misc tweaks Fixes default moves being in inverse order --- .../Templates/Gen9a/EncounterGift9a.cs | 2 +- .../Templates/Gen9a/EncounterSlot9a.cs | 2 +- .../Templates/Gen9a/EncounterStatic9a.cs | 30 ++++++++++++++----- .../Templates/Gen9a/EncounterTrade9a.cs | 2 +- .../Legality/Verifiers/LegendsZAVerifier.cs | 2 +- 5 files changed, 27 insertions(+), 11 deletions(-) diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen9a/EncounterGift9a.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen9a/EncounterGift9a.cs index d3cd9d496..b364de0be 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen9a/EncounterGift9a.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen9a/EncounterGift9a.cs @@ -135,7 +135,7 @@ private void SetMoves(PA9 pk, PersonalInfo9ZA pi, byte level) if (!IsAlpha) { - learn.SetEncounterMoves(level, moves); + learn.SetEncounterMovesBackwards(level, moves, sameDescend: false); PlusRecordApplicator.SetPlusFlagsEncounter(pk, pi, plus, level); } else diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen9a/EncounterSlot9a.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen9a/EncounterSlot9a.cs index 12becdb69..9c9a40138 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen9a/EncounterSlot9a.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen9a/EncounterSlot9a.cs @@ -82,7 +82,7 @@ private void SetMoves(PA9 pk, PersonalInfo9ZA pi, byte level) Span moves = stackalloc ushort[4]; if (!IsAlpha) { - learn.SetEncounterMoves(level, moves); + learn.SetEncounterMovesBackwards(level, moves, sameDescend: false); PlusRecordApplicator.SetPlusFlagsEncounter(pk, pi, plus, level); } else diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen9a/EncounterStatic9a.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen9a/EncounterStatic9a.cs index f2ba88b0e..b6b5b6442 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen9a/EncounterStatic9a.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen9a/EncounterStatic9a.cs @@ -35,7 +35,8 @@ public sealed record EncounterStatic9a(ushort Species, byte Form, byte Level, by ushort ILocation.Location => Location; - private bool HyperspaceShinyPossible => Shiny != Shiny.Never && Location == EncounterArea9a.LocationHyperspace; + private bool IsHyperspace => Location == EncounterArea9a.LocationHyperspace; + private bool IsHyperspaceShinyPossible => Shiny != Shiny.Never && IsHyperspace; public string Name => "Static Encounter"; public string LongName => Name; @@ -84,7 +85,8 @@ private void SetPINGA(PA9 pk, EncounterCriteria criteria, PersonalInfo9ZA pi) if (IVs.IsSpecified || Correlation is LumioseCorrelation.ReApplyIVs) generate = criteria.WithoutIVs(); - var param = GetParams(pi); + bool shinyPlease = criteria.Shiny.IsShiny(); + var param = GetParams(pi, shinyPlease, shinyPlease); ulong init = Util.Rand.Rand64(); var success = this.TryApply64(pk, init, param, generate); if (!success && !this.TryApply64(pk, init, param, generate.WithoutIVs())) @@ -110,7 +112,7 @@ private void SetMoves(PA9 pk, PersonalInfo9ZA pi, byte level) if (!IsAlpha) { - learn.SetEncounterMoves(level, moves); + learn.SetEncounterMovesBackwards(level, moves, sameDescend: false); PlusRecordApplicator.SetPlusFlagsEncounter(pk, pi, plus, level); } else @@ -195,15 +197,17 @@ private bool IsMatchPartial(PKM pk) public SeedCorrelationResult TryGetSeed(PKM pk, out ulong seed) { + // Try with 1 shiny roll, since all encounters besides the hyperspace sublegends are. var param = GetParams(PersonalTable.ZA[Species, Form]); if (param.TryGetSeed(pk, out seed)) return SeedCorrelationResult.Success; - if (!HyperspaceShinyPossible) + if (!IsHyperspaceShinyPossible) return SeedCorrelationResult.Invalid; if (pk.IsShiny && !LumioseSolver.SearchShiny1 || !LumioseSolver.SearchShinyN) return SeedCorrelationResult.Ignore; - param = param with { RollCount = 7 }; + // Assume any combination of shiny charm and donut boost is active. + param = param with { RollCount = 1 + ShinyCharm + ShinyHyperspace }; if (param.TryGetSeed(pk, out seed)) return SeedCorrelationResult.Success; return SeedCorrelationResult.Invalid; @@ -221,9 +225,21 @@ public LumioseCorrelation Correlation } } - public GenerateParam9a GetParams(PersonalInfo9ZA pi) + private const byte ShinyCharm = 3; + private const byte ShinyHyperspace = 3; + + public GenerateParam9a GetParams(PersonalInfo9ZA pi) => GetParams(pi, shinyCharm: false, activeShinyPower: false); + + public GenerateParam9a GetParams(PersonalInfo9ZA pi, bool shinyCharm, bool activeShinyPower) { - byte rollCount = HyperspaceShinyPossible ? (byte)7 : (byte)1; + byte rollCount = 1; + if (IsHyperspaceShinyPossible) + { + if (shinyCharm) + rollCount += ShinyCharm; + if (activeShinyPower) + rollCount += ShinyHyperspace; + } var gender = Gender switch { 0 => PersonalInfo.RatioMagicMale, diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen9a/EncounterTrade9a.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen9a/EncounterTrade9a.cs index ded28986b..4b78d1fdb 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen9a/EncounterTrade9a.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen9a/EncounterTrade9a.cs @@ -138,7 +138,7 @@ private void SetMoves(PA9 pk, PersonalInfo9ZA pi, byte level) if (!IsAlpha) { - learn.SetEncounterMoves(level, moves); + learn.SetEncounterMovesBackwards(level, moves, sameDescend: false); PlusRecordApplicator.SetPlusFlagsEncounter(pk, pi, plus, level); } else diff --git a/PKHeX.Core/Legality/Verifiers/LegendsZAVerifier.cs b/PKHeX.Core/Legality/Verifiers/LegendsZAVerifier.cs index 1c687a65f..717c3b6aa 100644 --- a/PKHeX.Core/Legality/Verifiers/LegendsZAVerifier.cs +++ b/PKHeX.Core/Legality/Verifiers/LegendsZAVerifier.cs @@ -118,7 +118,7 @@ private static void GetInitialMoves(IEncounter9a enc, PA9 pa9, Span move var learn = LearnSource9ZA.Instance.GetLearnset(enc.Species, enc.Form); if (!enc.IsAlpha) { - learn.SetEncounterMoves(level, moves); + learn.SetEncounterMovesBackwards(level, moves, sameDescend: false); return; } learn.SetEncounterMovesBackwards(level, moves, sameDescend: false);