From 3fdfd29e4bddb8ce3af3537f95f9bbd668a165a0 Mon Sep 17 00:00:00 2001 From: Kurt Date: Mon, 4 Sep 2023 00:50:26 -0700 Subject: [PATCH] Misc tweaks Gift1: use IVs if required Gift2: Enforce 0 TimeOfDay Egg9: Require Egg Location to match encounter PGT: keep requested gender in the event of antishiny PGT: never yield Korean Ranger Manaphy for Format4 Simplify ushort range checks Rename `EReader` bool to `IsEReader` Extract Gender/Nature fetch for unfixed encounters Remove Unown PIDIV branch when template has no Unown Remove unnecessary loop for Pokewalker PID creation --- PKHeX.Core/Items/ItemStorage3RS.cs | 6 ++--- PKHeX.Core/Items/ItemStorage8SWSH.cs | 2 +- PKHeX.Core/Legality/Bulk/BulkAnalysis.cs | 2 +- .../ByGeneration/EncounterGenerator3GC.cs | 2 +- .../Encounters/Generator/EncounterCriteria.cs | 20 ++++++++++++-- .../Moveset/EncounterMovesetGenerator.cs | 2 +- .../Generator/Search/EncounterEnumerator9.cs | 2 +- .../Templates/GO/EncounterSlot7GO.cs | 2 +- .../Templates/GO/EncounterSlot8GO.cs | 2 +- .../Templates/Gen1/EncounterGift1.cs | 2 +- .../Templates/Gen3/Colo/EncounterGift3Colo.cs | 4 +-- .../Gen3/Colo/EncounterShadow3Colo.cs | 20 +++++++------- .../Gen3/Colo/EncounterStatic3Colo.cs | 5 ++-- .../Templates/Gen3/EncounterSlot3.cs | 4 +-- .../Templates/Gen3/EncounterStatic3.cs | 27 +++++-------------- .../Templates/Gen3/XD/EncounterShadow3XD.cs | 8 +++--- .../Templates/Gen3/XD/EncounterSlot3XD.cs | 4 +-- .../Templates/Gen3/XD/EncounterStatic3XD.cs | 22 ++++----------- .../Templates/Gen3/XD/EncounterTrade3XD.cs | 4 +-- .../Templates/Gen4/EncounterSlot4.cs | 4 +-- .../Gen4/EncounterStatic4Pokewalker.cs | 2 +- .../Templates/Gen5/EncounterSlot5.cs | 4 +-- .../Templates/Gen5/EncounterStatic5.cs | 2 +- .../Templates/Gen5/EncounterStatic5Entree.cs | 2 +- .../Templates/Gen5/EncounterStatic5Radar.cs | 4 +-- .../Templates/Gen6/EncounterSlot6AO.cs | 4 +-- .../Templates/Gen6/EncounterSlot6XY.cs | 4 +-- .../Templates/Gen7/EncounterSlot7.cs | 4 +-- .../Templates/Gen7b/EncounterSlot7b.cs | 4 +-- .../Templates/Gen7b/EncounterStatic7b.cs | 4 +-- .../Templates/Gen7b/EncounterTrade7b.cs | 4 +-- .../Templates/Gen8/EncounterSlot8.cs | 4 +-- .../Templates/Gen8/EncounterStatic8.cs | 4 +-- .../Templates/Gen8b/EncounterSlot8b.cs | 4 +-- .../Templates/Gen9/EncounterFixed9.cs | 4 +-- .../Templates/Gen9/EncounterSlot9.cs | 2 +- .../Templates/Shared/EncounterEgg.cs | 4 +-- .../Encounters/Verifiers/EncounterVerifier.cs | 2 +- PKHeX.Core/Legality/RNG/PIDGenerator.cs | 3 +-- PKHeX.Core/Legality/Verifiers/MiscVerifier.cs | 7 ++++- PKHeX.Core/MysteryGifts/PGF.cs | 2 +- PKHeX.Core/MysteryGifts/PGT.cs | 14 +++++----- .../Encryption/SwishCrypto/SCTypeCode.cs | 2 +- .../Saves/Substructures/Gen7/LGPE/GP1.cs | 2 +- .../Saves/Substructures/PokeDex/Zukan.cs | 2 +- PKHeX.WinForms/Subforms/ReportGrid.cs | 2 +- 46 files changed, 116 insertions(+), 124 deletions(-) diff --git a/PKHeX.Core/Items/ItemStorage3RS.cs b/PKHeX.Core/Items/ItemStorage3RS.cs index f1a6edcbd..ee9e60d09 100644 --- a/PKHeX.Core/Items/ItemStorage3RS.cs +++ b/PKHeX.Core/Items/ItemStorage3RS.cs @@ -33,9 +33,9 @@ public sealed class ItemStorage3RS : IItemStorage internal static ReadOnlySpan Pouch_TM_RS => Pouch_TMHM_RS[..COUNT_TM]; - public static bool IsTMHM(ushort itemID) => (uint)(itemID - 289) < COUNT_TM + COUNT_HM; - public static bool IsTM(ushort itemID) => (uint)(itemID - 289) < COUNT_TM; - public static bool IsHM(ushort itemID) => (uint)(itemID - 339) < COUNT_HM; + public static bool IsTMHM(ushort itemID) => itemID - 289u < COUNT_TM + COUNT_HM; + public static bool IsTM(ushort itemID) => itemID - 289u < COUNT_TM; + public static bool IsHM(ushort itemID) => itemID - 339u < COUNT_HM; internal static ReadOnlySpan Pouch_Berries_RS => new ushort[] { diff --git a/PKHeX.Core/Items/ItemStorage8SWSH.cs b/PKHeX.Core/Items/ItemStorage8SWSH.cs index c0db7c7ec..de5e935ae 100644 --- a/PKHeX.Core/Items/ItemStorage8SWSH.cs +++ b/PKHeX.Core/Items/ItemStorage8SWSH.cs @@ -104,7 +104,7 @@ public sealed class ItemStorage8SWSH : IItemStorage private const int COUNT_TR = 100; private static ReadOnlySpan Pouch_TR_SWSH => Pouch_TMTR_SWSH.Slice(99, COUNT_TR); - public static bool IsTechRecord(ushort itemID) => (uint)(itemID - 1130) < COUNT_TR; + public static bool IsTechRecord(ushort itemID) => itemID - 1130u < COUNT_TR; private static ReadOnlySpan Pouch_Medicine_SWSH => new ushort[] { diff --git a/PKHeX.Core/Legality/Bulk/BulkAnalysis.cs b/PKHeX.Core/Legality/Bulk/BulkAnalysis.cs index 70b9d8531..dfff9cd85 100644 --- a/PKHeX.Core/Legality/Bulk/BulkAnalysis.cs +++ b/PKHeX.Core/Legality/Bulk/BulkAnalysis.cs @@ -47,7 +47,7 @@ public BulkAnalysis(SaveFile sav, IBulkAnalysisSettings settings) private static bool IsEmptyData(SlotCache obj) { var pk = obj.Entity; - if ((uint)(pk.Species - 1) >= pk.MaxSpeciesID) + if (pk.Species - 1u >= pk.MaxSpeciesID) return true; if (!pk.ChecksumValid) return true; diff --git a/PKHeX.Core/Legality/Encounters/Generator/ByGeneration/EncounterGenerator3GC.cs b/PKHeX.Core/Legality/Encounters/Generator/ByGeneration/EncounterGenerator3GC.cs index 0eba66366..606bda895 100644 --- a/PKHeX.Core/Legality/Encounters/Generator/ByGeneration/EncounterGenerator3GC.cs +++ b/PKHeX.Core/Legality/Encounters/Generator/ByGeneration/EncounterGenerator3GC.cs @@ -72,7 +72,7 @@ private static IEnumerable IterateInner(PKM pk, EvoCriteria[] ch private static bool GetIsShadowLockValid(PKM pk, LegalInfo info, IShadow3 s) => s switch { - EncounterShadow3Colo { EReader: true } => GetIsShadowLockValidEReader(pk, info, s), + EncounterShadow3Colo { IsEReader: true } => GetIsShadowLockValidEReader(pk, info, s), _ => LockFinder.IsAllShadowLockValid(s, info.PIDIV, pk), }; diff --git a/PKHeX.Core/Legality/Encounters/Generator/EncounterCriteria.cs b/PKHeX.Core/Legality/Encounters/Generator/EncounterCriteria.cs index e0bdb9f6c..7f37e0bdc 100644 --- a/PKHeX.Core/Legality/Encounters/Generator/EncounterCriteria.cs +++ b/PKHeX.Core/Legality/Encounters/Generator/EncounterCriteria.cs @@ -127,24 +127,40 @@ private static AbilityPermission GetAbilityValueDual(int ability, IPersonalAbili } /// - /// Gets a random nature to generate, based off an encounter's . + /// Gets the nature to generate, random if unspecified by the template or criteria. /// public Nature GetNature(Nature encValue) { if ((uint)encValue < 25) return encValue; + return GetNature(); + } + + /// + /// Gets the nature to generate, random if unspecified. + /// + public Nature GetNature() + { if (Nature != Nature.Random) return Nature; return (Nature)Util.Rand.Next(25); } /// - /// Gets a random gender to generate, based off an encounter's . + /// Gets the gender to generate, random if unspecified by the template or criteria. /// public int GetGender(int gender, IGenderDetail pkPersonalInfo) { if ((uint)gender < 3) return gender; + return GetGender(pkPersonalInfo); + } + + /// + /// Gets the gender to generate, random if unspecified. + /// + public int GetGender(IGenderDetail pkPersonalInfo) + { if (!pkPersonalInfo.IsDualGender) return pkPersonalInfo.FixedGender(); if (pkPersonalInfo.Genderless) diff --git a/PKHeX.Core/Legality/Encounters/Generator/Moveset/EncounterMovesetGenerator.cs b/PKHeX.Core/Legality/Encounters/Generator/Moveset/EncounterMovesetGenerator.cs index 082096e32..b3702b78d 100644 --- a/PKHeX.Core/Legality/Encounters/Generator/Moveset/EncounterMovesetGenerator.cs +++ b/PKHeX.Core/Legality/Encounters/Generator/Moveset/EncounterMovesetGenerator.cs @@ -209,7 +209,7 @@ private static IEnumerable GenerateVersionEncounters(PKM pk, Rea private static bool IsSane(PKM pk, ReadOnlySpan moves) { var species = pk.Species; - if ((uint)(species - 1) >= pk.MaxSpeciesID) // can enter this method after failing to set a species ID that cannot exist in the format + if (species - 1u >= pk.MaxSpeciesID) // can enter this method after failing to set a species ID that cannot exist in the format return false; if (AnyMoveOutOfRange(moves, pk.MaxMoveID)) return false; diff --git a/PKHeX.Core/Legality/Encounters/Generator/Search/EncounterEnumerator9.cs b/PKHeX.Core/Legality/Encounters/Generator/Search/EncounterEnumerator9.cs index d362747db..fefcf3230 100644 --- a/PKHeX.Core/Legality/Encounters/Generator/Search/EncounterEnumerator9.cs +++ b/PKHeX.Core/Legality/Encounters/Generator/Search/EncounterEnumerator9.cs @@ -74,7 +74,7 @@ public bool MoveNext() case YieldState.Bred: State = YieldState.TradeStart; - if (EncounterGenerator9.TryGetEgg(Entity, Chain, Version, out var egg)) + if (Locations.IsEggLocationBred9(Entity.Egg_Location) && EncounterGenerator9.TryGetEgg(Entity, Chain, Version, out var egg)) return SetCurrent(egg); goto case YieldState.TradeStart; diff --git a/PKHeX.Core/Legality/Encounters/Templates/GO/EncounterSlot7GO.cs b/PKHeX.Core/Legality/Encounters/Templates/GO/EncounterSlot7GO.cs index 73f828f30..c55fa480f 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/GO/EncounterSlot7GO.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/GO/EncounterSlot7GO.cs @@ -78,7 +78,7 @@ private void SetPINGA(PB7 pk, EncounterCriteria criteria) { var g = Gender == Gender.Random ? -1 : (int)Gender; int gender = criteria.GetGender(g, PersonalTable.GG[Species]); - int nature = (int)criteria.GetNature(Nature.Random); + int nature = (int)criteria.GetNature(); var ability = criteria.GetAbilityFromNumber(Ability); criteria.SetRandomIVsGO(pk, Type.GetMinIV()); diff --git a/PKHeX.Core/Legality/Encounters/Templates/GO/EncounterSlot8GO.cs b/PKHeX.Core/Legality/Encounters/Templates/GO/EncounterSlot8GO.cs index 87b9e694b..01a4725e0 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/GO/EncounterSlot8GO.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/GO/EncounterSlot8GO.cs @@ -170,7 +170,7 @@ private void SetPINGA(PKM pk, EncounterCriteria criteria) pk.EXP = Experience.GetEXP(LevelMin, pi.EXPGrowth); var g = Gender == Gender.Random ? -1 : (int)Gender; int gender = criteria.GetGender(g, pi); - int nature = (int)criteria.GetNature(Nature.Random); + int nature = (int)criteria.GetNature(); var ability = criteria.GetAbilityFromNumber(Ability); pk.Nature = pk.StatNature = nature; diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen1/EncounterGift1.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen1/EncounterGift1.cs index df0c29ba7..adad7b96a 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen1/EncounterGift1.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen1/EncounterGift1.cs @@ -58,7 +58,7 @@ public PK1 ConvertToPKM(ITrainerInfo tr, EncounterCriteria criteria) Species = Species, CurrentLevel = LevelMin, Catch_Rate = GetInitialCatchRate(), - DV16 = EncounterUtil1.GetRandomDVs(Util.Rand), + DV16 = IVs.IsSpecified ? EncounterUtil1.GetDV16(IVs) : EncounterUtil1.GetRandomDVs(Util.Rand), OT_Name = EncounterUtil1.GetTrainerName(tr, lang), TID16 = tr.TID16, diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen3/Colo/EncounterGift3Colo.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen3/Colo/EncounterGift3Colo.cs index fcdb4147c..342b2f8b2 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen3/Colo/EncounterGift3Colo.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen3/Colo/EncounterGift3Colo.cs @@ -90,8 +90,8 @@ private int GetTemplateLanguage(ITrainerInfo tr) private void SetPINGA(CK3 pk, EncounterCriteria criteria, PersonalInfo3 pi) { - int gender = criteria.GetGender(-1, pi); - int nature = (int)criteria.GetNature(Nature.Random); + int gender = criteria.GetGender(pi); + int nature = (int)criteria.GetNature(); var ability = criteria.GetAbilityFromNumber(Ability); do { diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen3/Colo/EncounterShadow3Colo.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen3/Colo/EncounterShadow3Colo.cs index 2fe6f5fcd..ef2b7cd79 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen3/Colo/EncounterShadow3Colo.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen3/Colo/EncounterShadow3Colo.cs @@ -38,7 +38,7 @@ public sealed record EncounterShadow3Colo(byte ID, short Gauge, ReadOnlyMemory /// Originates from the EReader scans (Japanese Only) /// - public bool EReader => Location == 128; // @ Card e Room (Japanese games only) + public bool IsEReader => Location == 128; // @ Card e Room (Japanese games only) #region Generating PKM IEncounterConvertible.ConvertToPKM(ITrainerInfo tr, EncounterCriteria criteria) => ConvertToPKM(tr, criteria); @@ -77,11 +77,11 @@ public CK3 ConvertToPKM(ITrainerInfo tr, EncounterCriteria criteria) return pk; } - private int GetTemplateLanguage(ITrainerInfo tr) => EReader ? 1 : (int)Language.GetSafeLanguage(Generation, (LanguageID)tr.Language); + private int GetTemplateLanguage(ITrainerInfo tr) => IsEReader ? 1 : (int)Language.GetSafeLanguage(Generation, (LanguageID)tr.Language); private void SetPINGA(CK3 pk, EncounterCriteria criteria, PersonalInfo3 pi) { - if (!EReader) + if (!IsEReader) SetPINGA_Regular(pk, criteria, pi); else SetPINGA_EReader(pk); @@ -89,9 +89,9 @@ private void SetPINGA(CK3 pk, EncounterCriteria criteria, PersonalInfo3 pi) private void SetPINGA_Regular(CK3 pk, EncounterCriteria criteria, PersonalInfo3 pi) { - int gender = criteria.GetGender(-1, pi); - int nature = (int)criteria.GetNature(Nature.Random); - int ability = criteria.GetAbilityFromNumber(0); + int gender = criteria.GetGender(pi); + int nature = (int)criteria.GetNature(); + int ability = criteria.GetAbilityFromNumber(Ability); // Ensure that any generated specimen has valid Shadow Locks // This can be kinda slow, depending on how many locks / how strict they are. @@ -108,7 +108,7 @@ private void SetPINGA_Regular(CK3 pk, EncounterCriteria criteria, PersonalInfo3 } while (++ctr <= max); - System.Diagnostics.Debug.Assert(ctr < 100_000); + System.Diagnostics.Debug.Assert(ctr < max); } private void SetPINGA_EReader(CK3 pk) @@ -139,7 +139,7 @@ private void SetPINGA_EReader(CK3 pk) while (++ctr <= max); #if DEBUG - System.Diagnostics.Debug.Assert(ctr < 100_000); + System.Diagnostics.Debug.Assert(ctr < max); #endif } @@ -200,14 +200,14 @@ private bool IsMatchLocation(PKM pk) public bool IsCompatible(PIDType val, PKM pk) { - if (EReader) + if (IsEReader) return true; return val is PIDType.CXD; } public PIDType GetSuggestedCorrelation() { - if (EReader) + if (IsEReader) return PIDType.None; return PIDType.CXD; } diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen3/Colo/EncounterStatic3Colo.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen3/Colo/EncounterStatic3Colo.cs index bcea0e511..18c5c83f2 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen3/Colo/EncounterStatic3Colo.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen3/Colo/EncounterStatic3Colo.cs @@ -72,12 +72,11 @@ public CK3 ConvertToPKM(ITrainerInfo tr, EncounterCriteria criteria) private void SetPINGA(CK3 pk, EncounterCriteria criteria, PersonalInfo3 pi) { int gender = criteria.GetGender(Gender, pi); - int nature = (int)criteria.GetNature(Nature.Random); + int nature = (int)criteria.GetNature(); var ability = criteria.GetAbilityFromNumber(Ability); - const PIDType type = PIDType.CXD; do { - PIDGenerator.SetRandomWildPID4(pk, nature, ability, gender, type); + PIDGenerator.SetRandomWildPID4(pk, nature, ability, gender, PIDType.CXD); } while (Shiny == Shiny.Never && pk.IsShiny); } #endregion diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen3/EncounterSlot3.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen3/EncounterSlot3.cs index c3ed90daf..bfcb74a7b 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen3/EncounterSlot3.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen3/EncounterSlot3.cs @@ -61,8 +61,8 @@ public PK3 ConvertToPKM(ITrainerInfo tr, EncounterCriteria criteria) private void SetPINGA(PK3 pk, EncounterCriteria criteria, PersonalInfo3 pi) { - int gender = criteria.GetGender(-1, pi); - int nature = (int)criteria.GetNature(Nature.Random); + int gender = criteria.GetGender(pi); + int nature = (int)criteria.GetNature(); var ability = criteria.GetAbilityFromNumber(Ability); if (Species == (int)Core.Species.Unown) { diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen3/EncounterStatic3.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen3/EncounterStatic3.cs index 1ba32f708..67e1206ae 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen3/EncounterStatic3.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen3/EncounterStatic3.cs @@ -93,29 +93,14 @@ private int GetTemplateLanguage(ITrainerInfo tr) private void SetPINGA(PK3 pk, EncounterCriteria criteria, PersonalInfo3 pi) { - int gender = criteria.GetGender(-1, pi); - int nature = (int)criteria.GetNature(Nature.Random); + int gender = criteria.GetGender(pi); + int nature = (int)criteria.GetNature(); var ability = criteria.GetAbilityFromNumber(Ability); - if (Species == (int)Core.Species.Unown) + var type = Roaming && Version != GameVersion.E ? PIDType.Method_1_Roamer : PIDType.Method_1; + do { - do - { - PIDGenerator.SetRandomWildPID4(pk, nature, ability, gender, PIDType.Method_1_Unown); - ability ^= 1; // some nature-forms cannot have a certain PID-ability set, so just flip it as Unown doesn't have dual abilities. - } while (pk.Form != Form); - } - else - { - PIDType type = this switch - { - { Roaming: true, Version: not GameVersion.E } => PIDType.Method_1_Roamer, - _ => PIDType.Method_1, - }; - do - { - PIDGenerator.SetRandomWildPID4(pk, nature, ability, gender, type); - } while (Shiny == Shiny.Never && pk.IsShiny); - } + PIDGenerator.SetRandomWildPID4(pk, nature, ability, gender, type); + } while (Shiny == Shiny.Never && pk.IsShiny); } #endregion diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen3/XD/EncounterShadow3XD.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen3/XD/EncounterShadow3XD.cs index 648ff02f1..f720f5dbf 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen3/XD/EncounterShadow3XD.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen3/XD/EncounterShadow3XD.cs @@ -79,9 +79,9 @@ public XK3 ConvertToPKM(ITrainerInfo tr, EncounterCriteria criteria) private void SetPINGA(XK3 pk, EncounterCriteria criteria, PersonalInfo3 pi) { - int gender = criteria.GetGender(-1, pi); - int nature = (int)criteria.GetNature(Nature.Random); - int ability = criteria.GetAbilityFromNumber(0); + int gender = criteria.GetGender(pi); + int nature = (int)criteria.GetNature(); + int ability = criteria.GetAbilityFromNumber(Ability); // Ensure that any generated specimen has valid Shadow Locks // This can be kinda slow, depending on how many locks / how strict they are. @@ -98,7 +98,7 @@ private void SetPINGA(XK3 pk, EncounterCriteria criteria, PersonalInfo3 pi) } while (++ctr <= max); - System.Diagnostics.Debug.Assert(ctr < 100_000); + System.Diagnostics.Debug.Assert(ctr < max); } #endregion diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen3/XD/EncounterSlot3XD.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen3/XD/EncounterSlot3XD.cs index c79b21a3f..47b639aca 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen3/XD/EncounterSlot3XD.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen3/XD/EncounterSlot3XD.cs @@ -60,8 +60,8 @@ public XK3 ConvertToPKM(ITrainerInfo tr, EncounterCriteria criteria) private void SetPINGA(XK3 pk, EncounterCriteria criteria, PersonalInfo3 pi) { - int gender = criteria.GetGender(-1, pi); - int nature = (int)criteria.GetNature(Nature.Random); + int gender = criteria.GetGender(pi); + int nature = (int)criteria.GetNature(); int ability = criteria.GetAbilityFromNumber(Ability); PIDGenerator.SetRandomPokeSpotPID(pk, nature, gender, ability, SlotNumber); } diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen3/XD/EncounterStatic3XD.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen3/XD/EncounterStatic3XD.cs index 6f93bfcc6..e4040d155 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen3/XD/EncounterStatic3XD.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen3/XD/EncounterStatic3XD.cs @@ -71,25 +71,13 @@ public XK3 ConvertToPKM(ITrainerInfo tr, EncounterCriteria criteria) private void SetPINGA(XK3 pk, EncounterCriteria criteria, PersonalInfo3 pi) { - int gender = criteria.GetGender(-1, pi); - int nature = (int)criteria.GetNature(Nature.Random); + int gender = criteria.GetGender(pi); + int nature = (int)criteria.GetNature(); var ability = criteria.GetAbilityFromNumber(Ability); - if (Species == (int)Core.Species.Unown) + do { - do - { - PIDGenerator.SetRandomWildPID4(pk, nature, ability, gender, PIDType.Method_1_Unown); - ability ^= 1; // some nature-forms cannot have a certain PID-ability set, so just flip it as Unown doesn't have dual abilities. - } while (pk.Form != Form); - } - else - { - const PIDType type = PIDType.CXD; - do - { - PIDGenerator.SetRandomWildPID4(pk, nature, ability, gender, type); - } while (Shiny == Shiny.Never && pk.IsShiny); - } + PIDGenerator.SetRandomWildPID4(pk, nature, ability, gender, PIDType.CXD); + } while (Shiny == Shiny.Never && pk.IsShiny); } #endregion diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen3/XD/EncounterTrade3XD.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen3/XD/EncounterTrade3XD.cs index 35fdf0474..1f19e04e5 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen3/XD/EncounterTrade3XD.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen3/XD/EncounterTrade3XD.cs @@ -93,8 +93,8 @@ public XK3 ConvertToPKM(ITrainerInfo tr, EncounterCriteria criteria) private void SetPINGA(XK3 pk, EncounterCriteria criteria, PersonalInfo3 pi) { - int gender = criteria.GetGender(-1, pi); - int nature = (int)criteria.GetNature(Nature.Random); + int gender = criteria.GetGender(pi); + int nature = (int)criteria.GetNature(); var ability = criteria.GetAbilityFromNumber(Ability); if (Species == (int)Core.Species.Unown) { diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen4/EncounterSlot4.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen4/EncounterSlot4.cs index 1407ad1ff..6981f6b18 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen4/EncounterSlot4.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen4/EncounterSlot4.cs @@ -78,8 +78,8 @@ private byte GetWildForm(byte form) private void SetPINGA(PK4 pk, EncounterCriteria criteria, PersonalInfo4 pi) { - int gender = criteria.GetGender(-1, pi); - int nature = (int)criteria.GetNature(Nature.Random); + int gender = criteria.GetGender(pi); + int nature = (int)criteria.GetNature(); var ability = criteria.GetAbilityFromNumber(Ability); int ctr = 0; do diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen4/EncounterStatic4Pokewalker.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen4/EncounterStatic4Pokewalker.cs index ba70dd068..3cba9722f 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen4/EncounterStatic4Pokewalker.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen4/EncounterStatic4Pokewalker.cs @@ -99,7 +99,7 @@ public PK4 ConvertToPKM(ITrainerInfo tr, EncounterCriteria criteria) private void SetPINGA(PK4 pk, EncounterCriteria criteria, PersonalInfo4 pi) { int gender = criteria.GetGender(Gender, pi); - int nature = (int)criteria.GetNature(Nature.Random); + int nature = (int)criteria.GetNature(); // Cannot force an ability; nature-gender-trainerID only yield fixed PIDs. // int ability = criteria.GetAbilityFromNumber(Ability, pi); diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen5/EncounterSlot5.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen5/EncounterSlot5.cs index 63fd20e6b..08b6fe49c 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen5/EncounterSlot5.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen5/EncounterSlot5.cs @@ -82,8 +82,8 @@ private byte GetWildForm(byte form) private void SetPINGA(PK5 pk, EncounterCriteria criteria, PersonalInfo5B2W2 pi) { - int gender = criteria.GetGender(-1, pi); - int nature = (int)criteria.GetNature(Nature.Random); + int gender = criteria.GetGender(pi); + int nature = (int)criteria.GetNature(); var ability = criteria.GetAbilityFromNumber(Ability); PIDGenerator.SetRandomWildPID5(pk, nature, ability, gender); criteria.SetRandomIVs(pk); diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen5/EncounterStatic5.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen5/EncounterStatic5.cs index 7e23b1c17..f64b9a037 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen5/EncounterStatic5.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen5/EncounterStatic5.cs @@ -84,7 +84,7 @@ public PK5 ConvertToPKM(ITrainerInfo tr, EncounterCriteria criteria) private void SetPINGA(PK5 pk, EncounterCriteria criteria, PersonalInfo5B2W2 pi) { int gender = criteria.GetGender(Gender, pi); - int nature = (int)criteria.GetNature(Nature.Random); + int nature = (int)criteria.GetNature(); var ability = criteria.GetAbilityFromNumber(Ability); var type = Shiny == Shiny.Always ? PIDType.G5MGShiny : PIDType.None; PIDGenerator.SetRandomWildPID5(pk, nature, ability, gender, type); diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen5/EncounterStatic5Entree.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen5/EncounterStatic5Entree.cs index 676c06253..ec8786cb7 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen5/EncounterStatic5Entree.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen5/EncounterStatic5Entree.cs @@ -70,7 +70,7 @@ public PK5 ConvertToPKM(ITrainerInfo tr, EncounterCriteria criteria) private void SetPINGA(PK5 pk, EncounterCriteria criteria, PersonalInfo5B2W2 pi) { int gender = criteria.GetGender(Gender, pi); - int nature = (int)criteria.GetNature(Nature.Random); + int nature = (int)criteria.GetNature(); var ability = criteria.GetAbilityFromNumber(Ability); PIDGenerator.SetRandomWildPID5(pk, nature, ability, gender); if (pk.IsShiny) diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen5/EncounterStatic5Radar.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen5/EncounterStatic5Radar.cs index 1888baee8..e7cfa08c6 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen5/EncounterStatic5Radar.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen5/EncounterStatic5Radar.cs @@ -62,8 +62,8 @@ public PK5 ConvertToPKM(ITrainerInfo tr, EncounterCriteria criteria) private void SetPINGA(PK5 pk, EncounterCriteria criteria, PersonalInfo5B2W2 pi) { - int gender = criteria.GetGender(-1, pi); - int nature = (int)criteria.GetNature(Nature.Random); + int gender = criteria.GetGender(pi); + int nature = (int)criteria.GetNature(); var ability = criteria.GetAbilityFromNumber(Ability); PIDGenerator.SetRandomWildPID5(pk, nature, ability, gender); if (pk.IsShiny) diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen6/EncounterSlot6AO.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen6/EncounterSlot6AO.cs index 62d78989c..a702b36ce 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen6/EncounterSlot6AO.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen6/EncounterSlot6AO.cs @@ -106,8 +106,8 @@ private void SetPINGA(PK6 pk, EncounterCriteria criteria, PersonalInfo6AO pi) { pk.PID = Util.Rand32(); pk.EncryptionConstant = Util.Rand32(); - pk.Nature = (int)criteria.GetNature(Nature.Random); - pk.Gender = criteria.GetGender(-1, pi); + pk.Nature = (int)criteria.GetNature(); + pk.Gender = criteria.GetGender(pi); pk.RefreshAbility(criteria.GetAbilityFromNumber(Ability)); criteria.SetRandomIVs(pk); } diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen6/EncounterSlot6XY.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen6/EncounterSlot6XY.cs index eee158473..47eae1300 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen6/EncounterSlot6XY.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen6/EncounterSlot6XY.cs @@ -96,8 +96,8 @@ private void SetPINGA(PK6 pk, EncounterCriteria criteria) var pi = PersonalTable.XY.GetFormEntry(Species, Form); pk.PID = Util.Rand32(); pk.EncryptionConstant = Util.Rand32(); - pk.Nature = (int)criteria.GetNature(Nature.Random); - pk.Gender = criteria.GetGender(-1, pi); + pk.Nature = (int)criteria.GetNature(); + pk.Gender = criteria.GetGender(pi); pk.RefreshAbility(criteria.GetAbilityFromNumber(Ability)); criteria.SetRandomIVs(pk, FlawlessIVCount); } diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen7/EncounterSlot7.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen7/EncounterSlot7.cs index 02fc3ded3..4745bbacf 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen7/EncounterSlot7.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen7/EncounterSlot7.cs @@ -90,8 +90,8 @@ private void SetPINGA(PK7 pk, EncounterCriteria criteria, PersonalInfo7 pi) { pk.PID = Util.Rand32(); pk.EncryptionConstant = Util.Rand32(); - pk.Nature = (int)criteria.GetNature(Nature.Random); - pk.Gender = criteria.GetGender(-1, pi); + pk.Nature = (int)criteria.GetNature(); + pk.Gender = criteria.GetGender(pi); criteria.SetRandomIVs(pk); var num = Ability; diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen7b/EncounterSlot7b.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen7b/EncounterSlot7b.cs index da9c7bd26..96e3ee872 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen7b/EncounterSlot7b.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen7b/EncounterSlot7b.cs @@ -63,8 +63,8 @@ private void SetPINGA(PB7 pk, EncounterCriteria criteria, PersonalInfo7GG pi) { pk.PID = Util.Rand32(); pk.EncryptionConstant = Util.Rand32(); - pk.Nature = (int)criteria.GetNature(Nature.Random); - pk.Gender = criteria.GetGender(-1, pi); + pk.Nature = (int)criteria.GetNature(); + pk.Gender = criteria.GetGender(pi); pk.RefreshAbility(criteria.GetAbilityFromNumber(Ability)); criteria.SetRandomIVs(pk); diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen7b/EncounterStatic7b.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen7b/EncounterStatic7b.cs index 6b0ce66f5..f5d7a029f 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen7b/EncounterStatic7b.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen7b/EncounterStatic7b.cs @@ -71,8 +71,8 @@ private void SetPINGA(PB7 pk, EncounterCriteria criteria, PersonalInfo7GG pi) { pk.PID = Util.Rand32(); pk.EncryptionConstant = Util.Rand32(); - pk.Nature = (int)criteria.GetNature(Nature.Random); - pk.Gender = criteria.GetGender(-1, pi); + pk.Nature = (int)criteria.GetNature(); + pk.Gender = criteria.GetGender(pi); pk.RefreshAbility(criteria.GetAbilityFromNumber(Ability)); if (IVs.IsSpecified) diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen7b/EncounterTrade7b.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen7b/EncounterTrade7b.cs index 540d8699e..272e8dadf 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen7b/EncounterTrade7b.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen7b/EncounterTrade7b.cs @@ -89,8 +89,8 @@ private void SetPINGA(PB7 pk, EncounterCriteria criteria, PersonalInfo7GG pi) { pk.PID = Util.Rand32(); pk.EncryptionConstant = Util.Rand32(); - pk.Nature = (int)criteria.GetNature(Nature.Random); - pk.Gender = criteria.GetGender(-1, pi); + pk.Nature = (int)criteria.GetNature(); + pk.Gender = criteria.GetGender(pi); pk.RefreshAbility(criteria.GetAbilityFromNumber(Ability)); criteria.SetRandomIVs(pk, IVs); } diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen8/EncounterSlot8.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen8/EncounterSlot8.cs index d68fc9a2e..1b4d6893a 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen8/EncounterSlot8.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen8/EncounterSlot8.cs @@ -102,8 +102,8 @@ private void SetPINGA(PK8 pk, EncounterCriteria criteria, PersonalInfo8SWSH pi) pk.EncryptionConstant = rand.Rand32(); pk.PID = rand.Rand32(); criteria.SetRandomIVs(pk); - pk.Gender = criteria.GetGender(-1, pi); - pk.Nature = pk.StatNature = (int)criteria.GetNature(Nature.Random); + pk.Gender = criteria.GetGender(pi); + pk.Nature = pk.StatNature = (int)criteria.GetNature(); pk.RefreshAbility(criteria.GetAbilityFromNumber(Ability)); return; } diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen8/EncounterStatic8.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen8/EncounterStatic8.cs index ff98f6f1f..864e0dc0d 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen8/EncounterStatic8.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen8/EncounterStatic8.cs @@ -115,8 +115,8 @@ private void SetPINGA(PK8 pk, EncounterCriteria criteria) var pi = PersonalTable.SWSH[Species, Form]; pk.RefreshAbility(criteria.GetAbilityFromNumber(Ability)); - pk.Nature = pk.StatNature = (int)criteria.GetNature(Nature.Random); - pk.Gender = criteria.GetGender(-1, pi); + pk.Nature = pk.StatNature = (int)criteria.GetNature(); + pk.Gender = criteria.GetGender(pi); var req = GetRequirement(pk); if (req != MustHave) diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen8b/EncounterSlot8b.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen8b/EncounterSlot8b.cs index a96edcb9c..7f17fbe50 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen8b/EncounterSlot8b.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen8b/EncounterSlot8b.cs @@ -97,8 +97,8 @@ private void SetPINGA(PB8 pk, EncounterCriteria criteria, PersonalInfo8BDSP pi) pk.PID = Util.Rand32(); pk.EncryptionConstant = Util.Rand32(); criteria.SetRandomIVs(pk); - pk.Nature = pk.StatNature = (int)criteria.GetNature(Nature.Random); - pk.Gender = criteria.GetGender(-1, pi); + pk.Nature = pk.StatNature = (int)criteria.GetNature(); + pk.Gender = criteria.GetGender(pi); pk.RefreshAbility(criteria.GetAbilityFromNumber(Ability)); } diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterFixed9.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterFixed9.cs index b74e54e87..567694ed5 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterFixed9.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterFixed9.cs @@ -123,8 +123,8 @@ private void SetPINGA(PK9 pk, EncounterCriteria criteria, PersonalInfo9SV pi) { pk.PID = Util.Rand32(); pk.EncryptionConstant = Util.Rand32(); - pk.Nature = pk.StatNature = (int)criteria.GetNature(Nature.Random); - pk.Gender = criteria.GetGender(-1, pi); + pk.Nature = pk.StatNature = (int)criteria.GetNature(); + pk.Gender = criteria.GetGender(pi); pk.RefreshAbility(criteria.GetAbilityFromNumber(Ability)); criteria.SetRandomIVs(pk, FlawlessIVCount); diff --git a/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterSlot9.cs b/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterSlot9.cs index e57101d7e..4e7abedd7 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterSlot9.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Gen9/EncounterSlot9.cs @@ -133,7 +133,7 @@ private void SetPINGA(PK9 pk, EncounterCriteria criteria, PersonalInfo9SV pi) pk.EncryptionConstant = Util.Rand32(); criteria.SetRandomIVs(pk); - pk.Nature = pk.StatNature = (int)criteria.GetNature(Nature.Random); + pk.Nature = pk.StatNature = (int)criteria.GetNature(); pk.Gender = criteria.GetGender(Gender, pi); pk.RefreshAbility(criteria.GetAbilityFromNumber(Ability)); diff --git a/PKHeX.Core/Legality/Encounters/Templates/Shared/EncounterEgg.cs b/PKHeX.Core/Legality/Encounters/Templates/Shared/EncounterEgg.cs index 64cc4bf65..ac819fc65 100644 --- a/PKHeX.Core/Legality/Encounters/Templates/Shared/EncounterEgg.cs +++ b/PKHeX.Core/Legality/Encounters/Templates/Shared/EncounterEgg.cs @@ -120,8 +120,8 @@ private static void SetPINGA(PKM pk, EncounterCriteria criteria) if (pk.Format <= 2) return; - int gender = criteria.GetGender(-1, pk.PersonalInfo); - int nature = (int)criteria.GetNature(Nature.Random); + int gender = criteria.GetGender(pk.PersonalInfo); + int nature = (int)criteria.GetNature(); if (pk.Format <= 5) { diff --git a/PKHeX.Core/Legality/Encounters/Verifiers/EncounterVerifier.cs b/PKHeX.Core/Legality/Encounters/Verifiers/EncounterVerifier.cs index 75c4d3ad2..1b4791a63 100644 --- a/PKHeX.Core/Legality/Encounters/Verifiers/EncounterVerifier.cs +++ b/PKHeX.Core/Legality/Encounters/Verifiers/EncounterVerifier.cs @@ -22,7 +22,7 @@ public static class EncounterVerifier private static CheckResult VerifyEncounter(PKM pk, IEncounterTemplate enc) => enc switch { EncounterEgg e => VerifyEncounterEgg(pk, e.Generation), - EncounterShadow3Colo { EReader: true } when pk.Language != (int)LanguageID.Japanese => GetInvalid(LG3EReader), + EncounterShadow3Colo { IsEReader: true } when pk.Language != (int)LanguageID.Japanese => GetInvalid(LG3EReader), EncounterStatic3 { Species: (int)Species.Mew, Location: 201 } when pk.Language != (int)LanguageID.Japanese => GetInvalid(LEncUnreleasedEMewJP), EncounterStatic3 { Species: (int)Species.Deoxys, Location: 200 } when pk.Language == (int)LanguageID.Japanese => GetInvalid(LEncUnreleased), EncounterStatic4 { Roaming: true } when pk is G4PKM { Met_Location: 193, GroundTile: GroundTileType.Water } => GetInvalid(LG4InvalidTileR45Surf), diff --git a/PKHeX.Core/Legality/RNG/PIDGenerator.cs b/PKHeX.Core/Legality/RNG/PIDGenerator.cs index 0930131e9..6e16a5ab7 100644 --- a/PKHeX.Core/Legality/RNG/PIDGenerator.cs +++ b/PKHeX.Core/Legality/RNG/PIDGenerator.cs @@ -291,8 +291,7 @@ public static void SetRandomPIDPokewalker(PKM pk, int nature, int gender) // Pokewalker PIDs cannot yield multiple abilities from the input nature-gender-trainerID. Disregard any ability request. var pi = pk.PersonalInfo.Gender; pk.Gender = gender; - do pk.PID = GetPokeWalkerPID(pk.TID16, pk.SID16, (uint)nature, gender, pi); - while (!pk.IsGenderValid()); + pk.PID = GetPokeWalkerPID(pk.TID16, pk.SID16, (uint)nature, gender, pi); pk.RefreshAbility((int) (pk.PID & 1)); } diff --git a/PKHeX.Core/Legality/Verifiers/MiscVerifier.cs b/PKHeX.Core/Legality/Verifiers/MiscVerifier.cs index b2741502a..b6c115900 100644 --- a/PKHeX.Core/Legality/Verifiers/MiscVerifier.cs +++ b/PKHeX.Core/Legality/Verifiers/MiscVerifier.cs @@ -267,7 +267,12 @@ public void VerifyMiscG1(LegalityAnalysis data) if (pk is ICaughtData2 { CaughtData: not 0 } t) { var time = t.Met_TimeOfDay; - bool valid = data.EncounterOriginal is EncounterTrade2 ? time == 0 : time is 1 or 2 or 3; + bool valid = data.EncounterOriginal switch + { + EncounterGift2 => time == 0, + EncounterTrade2 => time == 0, + _ => time is 1 or 2 or 3, + }; if (!valid) data.AddLine(new CheckResult(Severity.Invalid, Encounter, LMetDetailTimeOfDay)); } diff --git a/PKHeX.Core/MysteryGifts/PGF.cs b/PKHeX.Core/MysteryGifts/PGF.cs index 9108146cf..634c15d2a 100644 --- a/PKHeX.Core/MysteryGifts/PGF.cs +++ b/PKHeX.Core/MysteryGifts/PGF.cs @@ -297,7 +297,7 @@ private void SetPINGA(PK5 pk, EncounterCriteria criteria) { var pi = PersonalTable.B2W2.GetFormEntry(Species, Form); pk.Nature = (int)criteria.GetNature((Nature)Nature); - pk.Gender = pi.Genderless ? 2 : Gender != 2 ? Gender : criteria.GetGender(-1, pi); + pk.Gender = pi.Genderless ? 2 : Gender != 2 ? Gender : criteria.GetGender(pi); var av = GetAbilityIndex(criteria); SetPID(pk, av); pk.RefreshAbility(av); diff --git a/PKHeX.Core/MysteryGifts/PGT.cs b/PKHeX.Core/MysteryGifts/PGT.cs index e8a78fa46..fd121a3b6 100644 --- a/PKHeX.Core/MysteryGifts/PGT.cs +++ b/PKHeX.Core/MysteryGifts/PGT.cs @@ -212,7 +212,7 @@ private void SetPINGA(PK4 pk4, EncounterCriteria criteria) if ((pk4.IV32 & 0x3FFF_FFFFu) == 0) // Ignore Nickname/Egg flag bits { uint iv1 = ((seed = LCRNG.Next(seed)) >> 16) & 0x7FFF; - uint iv2 = ((LCRNG.Next(seed)) >> 16) & 0x7FFF; + uint iv2 = (LCRNG.Next(seed) >> 16) & 0x7FFF; pk4.IV32 |= iv1 | (iv2 << 15); } } @@ -225,7 +225,7 @@ private uint SetPID(PK4 pk4, EncounterCriteria criteria) // The games don't decide the Nature/Gender up-front, but we can try to honor requests. // Pre-determine the result values, and generate something. - var n = (int)criteria.GetNature(Nature.Random); + var n = (int)criteria.GetNature(); // Gender is already pre-determined in the template. while (true) { @@ -258,25 +258,25 @@ private static uint GeneratePID(uint seed, PK4 pk4) uint pid1 = (seed = LCRNG.Next(seed)) >> 16; // low uint pid2 = (seed = LCRNG.Next(seed)) & 0xFFFF0000; // hi pk4.PID = pid2 | pid1; + while (pk4.IsShiny) // Call the ARNG to change the PID + pk4.PID = ARNG.Next(pk4.PID); // sanity check gender for non-genderless PID cases } while (!pk4.IsGenderValid()); - while (pk4.IsShiny) // Call the ARNG to change the PID - pk4.PID = ARNG.Next(pk4.PID); return seed; } public static bool IsRangerManaphy(PKM pk) { + if (pk.Language >= (int)LanguageID.Korean) // never korean + return false; + var egg = pk.Egg_Location; if (!pk.IsEgg) // Link Trade Egg or Ranger return egg is Locations.LinkTrade4 or Locations.Ranger4; if (egg != Locations.Ranger4) return false; - if (pk.Language == (int)LanguageID.Korean) // never korean - return false; - var met = pk.Met_Location; return met is Locations.LinkTrade4 or 0; } diff --git a/PKHeX.Core/Saves/Encryption/SwishCrypto/SCTypeCode.cs b/PKHeX.Core/Saves/Encryption/SwishCrypto/SCTypeCode.cs index db6830e92..554baff57 100644 --- a/PKHeX.Core/Saves/Encryption/SwishCrypto/SCTypeCode.cs +++ b/PKHeX.Core/Saves/Encryption/SwishCrypto/SCTypeCode.cs @@ -32,7 +32,7 @@ public enum SCTypeCode : byte public static class SCTypeCodeExtensions { - public static bool IsBoolean(this SCTypeCode type) => unchecked((uint)type - 1) < 3; + public static bool IsBoolean(this SCTypeCode type) => unchecked((uint)type - 1u) < 3; public static int GetTypeSize(this SCTypeCode type) => type switch { diff --git a/PKHeX.Core/Saves/Substructures/Gen7/LGPE/GP1.cs b/PKHeX.Core/Saves/Substructures/Gen7/LGPE/GP1.cs index 32073406d..1c2d606eb 100644 --- a/PKHeX.Core/Saves/Substructures/Gen7/LGPE/GP1.cs +++ b/PKHeX.Core/Saves/Substructures/Gen7/LGPE/GP1.cs @@ -179,7 +179,7 @@ public PB7 ConvertToPKM(ITrainerInfo sav, EncounterCriteria criteria) var pi = pk.PersonalInfo; pk.Gender = criteria.GetGender(Gender, pi); - pk.Nature = (int)criteria.GetNature(Nature.Random); + pk.Nature = (int)criteria.GetNature(); pk.RefreshAbility(criteria.GetAbilityFromNumber(Ability)); bool isShiny = pk.IsShiny; diff --git a/PKHeX.Core/Saves/Substructures/PokeDex/Zukan.cs b/PKHeX.Core/Saves/Substructures/PokeDex/Zukan.cs index 4fe9ef285..c1c5a6ef8 100644 --- a/PKHeX.Core/Saves/Substructures/PokeDex/Zukan.cs +++ b/PKHeX.Core/Saves/Substructures/PokeDex/Zukan.cs @@ -152,7 +152,7 @@ private void ClearSeen(ushort species) public override void SetDex(PKM pk) { - if ((uint)(pk.Species - 1) >= SAV.MaxSpeciesID) // out of range + if (pk.Species - 1u >= SAV.MaxSpeciesID) // out of range return; if (pk.IsEgg) // do not add return; diff --git a/PKHeX.WinForms/Subforms/ReportGrid.cs b/PKHeX.WinForms/Subforms/ReportGrid.cs index d0ac41710..de60bef62 100644 --- a/PKHeX.WinForms/Subforms/ReportGrid.cs +++ b/PKHeX.WinForms/Subforms/ReportGrid.cs @@ -58,7 +58,7 @@ public void PopulateData(IList Data) foreach (var entry in Data) { var pk = entry.Entity; - if ((uint)(pk.Species - 1) >= pk.MaxSpeciesID) + if (pk.Species - 1u >= pk.MaxSpeciesID) { continue; }