From 39f98a4a940283a0f54fffc263e3b08c0d09cf88 Mon Sep 17 00:00:00 2001 From: Kurt Date: Sat, 27 Oct 2018 21:59:31 -0700 Subject: [PATCH] Misc qol updates Check max case for level first, then iterate upwards (eliminates inner if) change wc* nature to sbyte (update comparisons, 0xFF too magic-y) use Rand.Next(x) instead of (0, x) --- PKHeX.Core/Legality/Analysis.cs | 2 +- PKHeX.Core/Legality/Core.cs | 2 +- PKHeX.Core/Legality/Encounters/EncounterSlot.cs | 2 +- .../Encounters/Generator/EncounterSlotGenerator.cs | 14 +++++++------- .../Encounters/Generator/MysteryGiftGenerator.cs | 6 +++--- PKHeX.Core/Legality/Memories.cs | 2 +- PKHeX.Core/Legality/RNG/PIDGenerator.cs | 2 +- PKHeX.Core/Legality/Tables.cs | 1 - PKHeX.Core/Legality/Tables7.cs | 2 +- .../Legality/Verifiers/Ribbons/RibbonVerifier.cs | 9 +++++---- PKHeX.Core/MysteryGifts/PGF.cs | 4 ++-- PKHeX.Core/MysteryGifts/WC6.cs | 4 ++-- PKHeX.Core/MysteryGifts/WC7.cs | 4 ++-- PKHeX.Core/PKM/Util/Experience.cs | 9 ++++----- PKHeX.Core/Saves/Util/SaveUtil.cs | 2 +- 15 files changed, 32 insertions(+), 33 deletions(-) diff --git a/PKHeX.Core/Legality/Analysis.cs b/PKHeX.Core/Legality/Analysis.cs index 454c47c6f..96aa0ab12 100644 --- a/PKHeX.Core/Legality/Analysis.cs +++ b/PKHeX.Core/Legality/Analysis.cs @@ -145,7 +145,7 @@ private void ParseLegality() if (!pkm.IsOriginValid) AddLine(Severity.Invalid, LEncConditionBadSpecies, CheckIdentifier.GameOrigin); - if (pkm.Format == 1 || pkm.Format == 2) // prior to storing GameVersion + if (pkm.Format <= 2) // prior to storing GameVersion { ParsePK1(); return; diff --git a/PKHeX.Core/Legality/Core.cs b/PKHeX.Core/Legality/Core.cs index 7c9d19030..1337d5561 100644 --- a/PKHeX.Core/Legality/Core.cs +++ b/PKHeX.Core/Legality/Core.cs @@ -727,7 +727,7 @@ private static IEnumerable GetValidMoves(PKM pkm, GameVersion Version, IRea { int formcount = pkm.PersonalInfo.FormeCount; - // In gen 3 deoxys has different forms depending on the current game, in personal info there is no alter form info + // In gen 3 deoxys has different forms depending on the current game, in the PersonalInfo there is no alternate form info if (species == 386 && pkm.Format == 3) formcount = 4; diff --git a/PKHeX.Core/Legality/Encounters/EncounterSlot.cs b/PKHeX.Core/Legality/Encounters/EncounterSlot.cs index 84e2b84e0..e2b309b2a 100644 --- a/PKHeX.Core/Legality/Encounters/EncounterSlot.cs +++ b/PKHeX.Core/Legality/Encounters/EncounterSlot.cs @@ -95,7 +95,7 @@ public PKM ConvertToPKM(ITrainerInfo SAV) } pk.Language = lang; - var ability = Util.Rand.Next(0, 2); + var ability = Util.Rand.Next(2); var pidtype = GetPIDType(); if (pidtype == PIDType.PokeSpot) PIDGenerator.SetRandomPokeSpotPID(pk, nature, gender, ability, SlotNumber); diff --git a/PKHeX.Core/Legality/Encounters/Generator/EncounterSlotGenerator.cs b/PKHeX.Core/Legality/Encounters/Generator/EncounterSlotGenerator.cs index 56412b280..1ff11af1e 100644 --- a/PKHeX.Core/Legality/Encounters/Generator/EncounterSlotGenerator.cs +++ b/PKHeX.Core/Legality/Encounters/Generator/EncounterSlotGenerator.cs @@ -84,8 +84,8 @@ public static IEnumerable GetValidWildEncounters(PKM pkm, IReadOn return Enumerable.Empty(); var s = GetRawEncounterSlots(pkm, lvl, vs, gameSource); - bool IsSafariBall = pkm.Ball == 5; - bool IsSportBall = pkm.Ball == 0x18; + bool IsSafariBall = pkm.Ball == (int)Ball.Safari; + bool IsSportBall = pkm.Ball == (int)Ball.Sport; bool IsHidden = pkm.AbilityNumber == 4; // hidden Ability int species = pkm.Species; @@ -102,8 +102,8 @@ public static IEnumerable GetValidWildEncounters(PKM pkm, GameVer return Enumerable.Empty(); var s = GetRawEncounterSlots(pkm, lvl, gameSource); - bool IsSafariBall = pkm.Ball == 5; - bool IsSportBall = pkm.Ball == 0x18; + bool IsSafariBall = pkm.Ball == (int)Ball.Safari; + bool IsSportBall = pkm.Ball == (int)Ball.Sport; bool IsHidden = pkm.AbilityNumber == 4; // hidden Ability int species = pkm.Species; @@ -218,8 +218,8 @@ private static IEnumerable GetFilteredSlots67(PKM pkm, IEnumerabl // Edge Case Handling switch (species) { - case 744 when form == 1: - case 745 when form == 2: + case 744 when form == 1: // Rockruff Event + case 745 when form == 2: // Lycanroc Event yield break; } @@ -432,7 +432,7 @@ internal static bool IsDexNavValid(PKM pkm) return false; var vs = EvolutionChain.GetValidPreEvolutions(pkm); - var table = pkm.Version == (int) GameVersion.AS ? Encounters6.SlotsA : Encounters6.SlotsO; + var table = pkm.Version == (int) GameVersion.AS ? SlotsA : SlotsO; int loc = pkm.Met_Location; var areas = table.Where(l => l.Location == loc); var d_areas = areas.Select(area => GetValidEncounterSlots(pkm, area, vs, DexNav: true)); diff --git a/PKHeX.Core/Legality/Encounters/Generator/MysteryGiftGenerator.cs b/PKHeX.Core/Legality/Encounters/Generator/MysteryGiftGenerator.cs index d68cafef5..6af8624b8 100644 --- a/PKHeX.Core/Legality/Encounters/Generator/MysteryGiftGenerator.cs +++ b/PKHeX.Core/Legality/Encounters/Generator/MysteryGiftGenerator.cs @@ -305,7 +305,7 @@ private static bool GetIsMatchPGF(PKM pkm, PGF wc, IEnumerable vs) if (wc.Level != pkm.Met_Level) return false; if (wc.Ball != pkm.Ball) return false; - if (wc.Nature != 0xFF && wc.Nature != pkm.Nature) return false; + if (wc.Nature != -1 && wc.Nature != pkm.Nature) return false; if (wc.Gender != 2 && wc.Gender != pkm.Gender) return false; if (pkm is IContestStats s && s.IsContestBelow(wc)) @@ -354,7 +354,7 @@ private static bool GetIsMatchWC6(PKM pkm, WC6 wc, IEnumerable vs) if (wc.Level != pkm.Met_Level) return false; if (wc.Ball != pkm.Ball) return false; if (wc.OTGender < 3 && wc.OTGender != pkm.OT_Gender) return false; - if (wc.Nature != 0xFF && wc.Nature != pkm.Nature) return false; + if (wc.Nature != -1 && wc.Nature != pkm.Nature) return false; if (wc.Gender != 3 && wc.Gender != pkm.Gender) return false; if (pkm is IContestStats s && s.IsContestBelow(wc)) @@ -415,7 +415,7 @@ private static bool GetIsMatchWC7(PKM pkm, WC7 wc, IEnumerable vs) if (wc.MetLevel != pkm.Met_Level) return false; if (wc.Ball != pkm.Ball) return false; if (wc.OTGender < 3 && wc.OTGender != pkm.OT_Gender) return false; - if (wc.Nature != 0xFF && wc.Nature != pkm.Nature) return false; + if (wc.Nature != -1 && wc.Nature != pkm.Nature) return false; if (wc.Gender != 3 && wc.Gender != pkm.Gender) return false; if (pkm is IContestStats s && s.IsContestBelow(wc)) diff --git a/PKHeX.Core/Legality/Memories.cs b/PKHeX.Core/Legality/Memories.cs index fc154471e..c1856651e 100644 --- a/PKHeX.Core/Legality/Memories.cs +++ b/PKHeX.Core/Legality/Memories.cs @@ -180,7 +180,7 @@ public static int GetRandomFeeling(int memory, int max = 24) var bits = MemoryFeelings[memory]; while (true) { - int feel = Util.Rand.Next(0, max); + int feel = Util.Rand.Next(max); if ((bits & (1 << feel)) != 0) return feel; } diff --git a/PKHeX.Core/Legality/RNG/PIDGenerator.cs b/PKHeX.Core/Legality/RNG/PIDGenerator.cs index 3c1fdb2e8..5d12761db 100644 --- a/PKHeX.Core/Legality/RNG/PIDGenerator.cs +++ b/PKHeX.Core/Legality/RNG/PIDGenerator.cs @@ -340,7 +340,7 @@ private static PIDType GetPIDType(PKM pk, PIDType specific) if (pk.Version == 15) return PIDType.CXD; if (pk.GenNumber == 3 && pk.Species == 201) - return PIDType.Method_1_Unown + Util.Rand.Next(0, 3); + return PIDType.Method_1_Unown + Util.Rand.Next(3); return PIDType.Method_1; } diff --git a/PKHeX.Core/Legality/Tables.cs b/PKHeX.Core/Legality/Tables.cs index 1a0a87d0e..8ef7271be 100644 --- a/PKHeX.Core/Legality/Tables.cs +++ b/PKHeX.Core/Legality/Tables.cs @@ -16,7 +16,6 @@ public static partial class Legal public static readonly int[] Gen4EncounterTypes = { 1, 2, 4, 5, 7, 9, 10, 12, 23, 24 }; public static readonly HashSet LightBall = new HashSet { 25, 26, 172 }; - public static readonly int[] Fossils = { 138, 140, 142, 345, 347, 408, 410, 564, 566, 696, 698 }; public static readonly int[] RotomMoves = { 0, 315, 056, 059, 403, 437 }; public static readonly HashSet WildForms = new HashSet diff --git a/PKHeX.Core/Legality/Tables7.cs b/PKHeX.Core/Legality/Tables7.cs index 0a32e8b70..05ef5af8c 100644 --- a/PKHeX.Core/Legality/Tables7.cs +++ b/PKHeX.Core/Legality/Tables7.cs @@ -153,7 +153,7 @@ public static partial class Legal }).ToArray(); public static readonly Dictionary ZCrystalDictionary = Pouch_ZCrystal_USUM - .Zip(Pouch_ZCrystalHeld_USUM, (k, v) => new { Key = (int)k, Value = (int)v }) + .Zip(Pouch_ZCrystalHeld_USUM, (k, v) => new KeyValuePair(k, v)) .ToDictionary(x => x.Key, x => x.Value); internal static readonly ushort[] HeldItems_SM = new ushort[1].Concat(Pouch_Items_SM).Concat(Pouch_Berries_SM).Concat(Pouch_Medicine_SM).Concat(Pouch_ZCrystalHeld_SM).ToArray(); diff --git a/PKHeX.Core/Legality/Verifiers/Ribbons/RibbonVerifier.cs b/PKHeX.Core/Legality/Verifiers/Ribbons/RibbonVerifier.cs index b04450237..13f72d304 100644 --- a/PKHeX.Core/Legality/Verifiers/Ribbons/RibbonVerifier.cs +++ b/PKHeX.Core/Legality/Verifiers/Ribbons/RibbonVerifier.cs @@ -134,7 +134,7 @@ IEnumerable getMissingContestRibbons(IReadOnlyList bits, IRe if (pkm is IRibbonSetCommon4 s4) { bool inhabited4 = 3 <= gen && gen <= 4; - IEnumerable iterate = GetInvalidRibbons4Any(pkm, s4, gen); + var iterate = GetInvalidRibbons4Any(pkm, s4, gen); if (!inhabited4) iterate = iterate.Concat(GetInvalidRibbonsNone(s4.RibbonBitsOnly(), s4.RibbonNamesOnly())); foreach (var z in iterate) @@ -382,12 +382,13 @@ private static IEnumerable GetInvalidRibbonsNone(IReadOnlyList species != 201 && species != 132; // Disallow Unown and Ditto - private static bool IsAllowedBattleFrontier(int species, int form = 0, int gen = 0) + private static bool IsAllowedBattleFrontier(int species) => !Legal.BattleFrontierBanlist.Contains(species); + + private static bool IsAllowedBattleFrontier(int species, int form, int gen) { if (gen == 4 && species == 172 && form == 1) // spiky return false; - - return !Legal.BattleFrontierBanlist.Contains(species); + return IsAllowedBattleFrontier(species); } } } diff --git a/PKHeX.Core/MysteryGifts/PGF.cs b/PKHeX.Core/MysteryGifts/PGF.cs index 83ea9d600..fc8689c42 100644 --- a/PKHeX.Core/MysteryGifts/PGF.cs +++ b/PKHeX.Core/MysteryGifts/PGF.cs @@ -57,7 +57,7 @@ public string Nickname set => Encoding.Unicode.GetBytes(value.PadRight(0xB, (char)0xFFFF)).CopyTo(Data, 0x1E); } - public int Nature { get => Data[0x34]; set => Data[0x34] = (byte)value; } + public int Nature { get => (sbyte)Data[0x34]; set => Data[0x34] = (byte)value; } public override int Gender { get => Data[0x35]; set => Data[0x35] = (byte)value; } public override int AbilityType { get => Data[0x36]; set => Data[0x36] = (byte)value; } public int PIDType { get => Data[0x37]; set => Data[0x37] = (byte)value; } @@ -181,7 +181,7 @@ public override PKM ConvertToPKM(ITrainerInfo SAV) Species = Species, HeldItem = HeldItem, Met_Level = currentLevel, - Nature = Nature != 0xFF ? Nature : Util.Rand.Next(25), + Nature = Nature != -1 ? Nature : Util.Rand.Next(25), Gender = pi.Gender == 255 ? 2 : (Gender != 2 ? Gender : pi.RandomGender), AltForm = Form, Version = OriginGame == 0 ? SAV.Game : OriginGame, diff --git a/PKHeX.Core/MysteryGifts/WC6.cs b/PKHeX.Core/MysteryGifts/WC6.cs index 3618a8128..e1ce8998f 100644 --- a/PKHeX.Core/MysteryGifts/WC6.cs +++ b/PKHeX.Core/MysteryGifts/WC6.cs @@ -164,7 +164,7 @@ public string Nickname set => Encoding.Unicode.GetBytes(value.PadRight(12 + 1, '\0')).CopyTo(Data, 0x86); } - public int Nature { get => Data[0xA0]; set => Data[0xA0] = (byte)value; } + public int Nature { get => (sbyte)Data[0xA0]; set => Data[0xA0] = (byte)value; } public override int Gender { get => Data[0xA1]; set => Data[0xA1] = (byte)value; } public override int AbilityType { get => Data[0xA2]; set => Data[0xA2] = (byte)value; } public Shiny PIDType { get => (Shiny)Data[0xA3]; set => Data[0xA3] = (byte)value; } @@ -297,7 +297,7 @@ public override PKM ConvertToPKM(ITrainerInfo SAV) TID = TID, SID = SID, Met_Level = currentLevel, - Nature = Nature != 0xFF ? Nature : Util.Rand.Next(25), + Nature = Nature != -1 ? Nature : Util.Rand.Next(25), Gender = Gender != 3 ? Gender : pi.RandomGender, AltForm = Form, EncryptionConstant = EncryptionConstant != 0 ? EncryptionConstant : Util.Rand32(), diff --git a/PKHeX.Core/MysteryGifts/WC7.cs b/PKHeX.Core/MysteryGifts/WC7.cs index d77d70f19..d47ce1699 100644 --- a/PKHeX.Core/MysteryGifts/WC7.cs +++ b/PKHeX.Core/MysteryGifts/WC7.cs @@ -201,7 +201,7 @@ public string Nickname set => Encoding.Unicode.GetBytes(value.PadRight(12 + 1, '\0')).CopyTo(Data, 0x86); } - public int Nature { get => Data[0xA0]; set => Data[0xA0] = (byte)value; } + public int Nature { get => (sbyte)Data[0xA0]; set => Data[0xA0] = (byte)value; } public override int Gender { get => Data[0xA1]; set => Data[0xA1] = (byte)value; } public override int AbilityType { get => Data[0xA2]; set => Data[0xA2] = (byte)value; } public Shiny PIDType { get => (Shiny)Data[0xA3]; set => Data[0xA3] = (byte)value; } @@ -337,7 +337,7 @@ public override PKM ConvertToPKM(ITrainerInfo SAV) TID = TID, SID = SID, Met_Level = metLevel, - Nature = Nature != 0xFF ? Nature : Util.Rand.Next(25), + Nature = Nature != -1 ? Nature : Util.Rand.Next(25), Gender = Gender != 3 ? Gender : pi.RandomGender, AltForm = Form, EncryptionConstant = EncryptionConstant != 0 ? EncryptionConstant : Util.Rand32(), diff --git a/PKHeX.Core/PKM/Util/Experience.cs b/PKHeX.Core/PKM/Util/Experience.cs index bddfa8928..ea54a3c35 100644 --- a/PKHeX.Core/PKM/Util/Experience.cs +++ b/PKHeX.Core/PKM/Util/Experience.cs @@ -14,12 +14,11 @@ public static class Experience public static int GetLevel(int species, uint exp) { int growth = PKX.Personal[species].EXPGrowth; + if (exp >= ExpTable[99, growth]) + return 100; int tl = 1; // Initial Level. Iterate upwards to find the level - while (ExpTable[tl, growth] <= exp) - { - if (++tl == 100) - break; - } + while (exp >= ExpTable[tl, growth]) + ++tl; return tl; } diff --git a/PKHeX.Core/Saves/Util/SaveUtil.cs b/PKHeX.Core/Saves/Util/SaveUtil.cs index d8e565048..4c6ccc7a1 100644 --- a/PKHeX.Core/Saves/Util/SaveUtil.cs +++ b/PKHeX.Core/Saves/Util/SaveUtil.cs @@ -1137,7 +1137,7 @@ public static ushort[] AdvanceGCKeys(ushort[] oldKeys) uint s7 = 4294; if (val > 967295) s7--; - s7 = (uint)Util.Rand.Next(0, (int)s7); + s7 = (uint)Util.Rand.Next((int)s7); val += s7 * 1000000; } var TID = (ushort)(val & 0xFFFF);