diff --git a/PKHeX.Core/Editing/CommonEdits.cs b/PKHeX.Core/Editing/CommonEdits.cs index 07752e351..1693e2741 100644 --- a/PKHeX.Core/Editing/CommonEdits.cs +++ b/PKHeX.Core/Editing/CommonEdits.cs @@ -309,11 +309,11 @@ public static void ApplyHeldItem(this PKM pk, int item, EntityContext context) public static int GetMaximumEV(this PKM pk, int index) { if (pk.Format < 3) - return ushort.MaxValue; + return EffortValues.Max12; var sum = pk.EVTotal - pk.GetEV(index); - int remaining = 510 - sum; - return Math.Clamp(remaining, 0, 252); + int remaining = EffortValues.Max510 - sum; + return Math.Clamp(remaining, 0, EffortValues.Max252); } /// diff --git a/PKHeX.Core/Legality/Verifiers/EffortValueVerifier.cs b/PKHeX.Core/Legality/Verifiers/EffortValueVerifier.cs index 48e5bd876..d4c4c2c19 100644 --- a/PKHeX.Core/Legality/Verifiers/EffortValueVerifier.cs +++ b/PKHeX.Core/Legality/Verifiers/EffortValueVerifier.cs @@ -16,7 +16,6 @@ public sealed class EffortValueVerifier : Verifier public override void Verify(LegalityAnalysis data) { var pk = data.Entity; - var enc = data.EncounterMatch; if (pk.IsEgg) { if (pk.EVTotal is not 0) @@ -33,6 +32,7 @@ public override void Verify(LegalityAnalysis data) if (sum > totalMax) // format >= 3 data.AddLine(GetInvalid(LEffortAbove510)); + var enc = data.EncounterMatch; Span evs = stackalloc int[6]; pk.GetEVs(evs); if (format >= 6 && evs.IndexOfAny(253, 254, 255) != -1) @@ -43,7 +43,7 @@ public override void Verify(LegalityAnalysis data) // Only one of the following can be true: 0, 508, and x%6!=0 if (sum == 0 && !enc.IsWithinEncounterRange(pk)) data.AddLine(Get(LEffortEXPIncreased, Severity.Fishy)); - else if (sum == 508) + else if (sum == EffortValues.MaxEffective) data.AddLine(Get(LEffort2Remaining, Severity.Fishy)); else if (evs[0] != 0 && evs.IndexOfAnyExcept(evs[0]) == -1) data.AddLine(Get(LEffortAllEqual, Severity.Fishy)); diff --git a/PKHeX.Core/PKM/PA8.cs b/PKHeX.Core/PKM/PA8.cs index 29d6eadba..ec539ed43 100644 --- a/PKHeX.Core/PKM/PA8.cs +++ b/PKHeX.Core/PKM/PA8.cs @@ -68,7 +68,7 @@ public override int CurrentFriendship // Maximums public override int MaxIV => 31; - public override int MaxEV => 252; + public override int MaxEV => EffortValues.Max252; public override int MaxStringLengthOT => 12; public override int MaxStringLengthNickname => 12; diff --git a/PKHeX.Core/PKM/PK5.cs b/PKHeX.Core/PKM/PK5.cs index 9878fb237..283d2ad85 100644 --- a/PKHeX.Core/PKM/PK5.cs +++ b/PKHeX.Core/PKM/PK5.cs @@ -285,7 +285,7 @@ private static byte[] DecryptParty(byte[] data) public override int MaxBallID => Legal.MaxBallID_5; public override int MaxGameID => Legal.MaxGameID_5; // B2 public override int MaxIV => 31; - public override int MaxEV => 255; + public override int MaxEV => EffortValues.Max255; public override int MaxStringLengthOT => 7; public override int MaxStringLengthNickname => 10; @@ -351,13 +351,13 @@ public PK6 ConvertToPK6() CNT_Tough = CNT_Tough, CNT_Sheen = CNT_Sheen, - // Cap EVs - EV_HP = Math.Min(EV_HP, 252), - EV_ATK = Math.Min(EV_ATK, 252), - EV_DEF = Math.Min(EV_DEF, 252), - EV_SPA = Math.Min(EV_SPA, 252), - EV_SPD = Math.Min(EV_SPD, 252), - EV_SPE = Math.Min(EV_SPE, 252), + // Cap EVs -- anything above 252 is dropped down to 252. + EV_HP = Math.Min(EV_HP , EffortValues.Max252), + EV_ATK = Math.Min(EV_ATK, EffortValues.Max252), + EV_DEF = Math.Min(EV_DEF, EffortValues.Max252), + EV_SPA = Math.Min(EV_SPA, EffortValues.Max252), + EV_SPD = Math.Min(EV_SPD, EffortValues.Max252), + EV_SPE = Math.Min(EV_SPE, EffortValues.Max252), Move1 = Move1, Move2 = Move2, diff --git a/PKHeX.Core/PKM/PK9.cs b/PKHeX.Core/PKM/PK9.cs index 74f2b1e82..ff02e2e12 100644 --- a/PKHeX.Core/PKM/PK9.cs +++ b/PKHeX.Core/PKM/PK9.cs @@ -69,7 +69,7 @@ public override int CurrentFriendship // Maximums public override int MaxIV => 31; - public override int MaxEV => 252; + public override int MaxEV => EffortValues.Max252; public override int MaxStringLengthOT => 12; public override int MaxStringLengthNickname => 12; diff --git a/PKHeX.Core/PKM/Searching/SearchUtil.cs b/PKHeX.Core/PKM/Searching/SearchUtil.cs index 973abb570..f5aca6132 100644 --- a/PKHeX.Core/PKM/Searching/SearchUtil.cs +++ b/PKHeX.Core/PKM/Searching/SearchUtil.cs @@ -45,8 +45,8 @@ public static bool SatisfiesFilterLevel(PKM pk, SearchComparison option, int lev { 1 => pk.EVTotal == 0, // None (0) 2 => pk.EVTotal is (not 0) and < 128, // Some (127-1) - 3 => pk.EVTotal is >= 128 and < 508, // Half (128-507) - 4 => pk.EVTotal >= 508, // Full (508+) + 3 => pk.EVTotal is >= 128 and < EffortValues.MaxEffective, // Half (128-507) + 4 => pk.EVTotal >= EffortValues.MaxEffective, // Full (508+) _ => true, }; diff --git a/PKHeX.Core/PKM/Shared/G4PKM.cs b/PKHeX.Core/PKM/Shared/G4PKM.cs index bed461234..e3e94c811 100644 --- a/PKHeX.Core/PKM/Shared/G4PKM.cs +++ b/PKHeX.Core/PKM/Shared/G4PKM.cs @@ -18,7 +18,7 @@ public abstract class G4PKM : PKM, public sealed override int MaxBallID => Legal.MaxBallID_4; public sealed override int MaxGameID => Legal.MaxGameID_4; public sealed override int MaxIV => 31; - public sealed override int MaxEV => 255; + public sealed override int MaxEV => EffortValues.Max255; public sealed override int MaxStringLengthOT => 7; public sealed override int MaxStringLengthNickname => 10; diff --git a/PKHeX.Core/PKM/Shared/G8PKM.cs b/PKHeX.Core/PKM/Shared/G8PKM.cs index ca029f2f7..ba98fcef3 100644 --- a/PKHeX.Core/PKM/Shared/G8PKM.cs +++ b/PKHeX.Core/PKM/Shared/G8PKM.cs @@ -44,7 +44,7 @@ public override int CurrentFriendship // Maximums public override int MaxIV => 31; - public override int MaxEV => 252; + public override int MaxEV => EffortValues.Max252; public override int MaxStringLengthOT => 12; public override int MaxStringLengthNickname => 12; diff --git a/PKHeX.Core/PKM/Shared/GBPKM.cs b/PKHeX.Core/PKM/Shared/GBPKM.cs index d861892e7..3821ec4e0 100644 --- a/PKHeX.Core/PKM/Shared/GBPKM.cs +++ b/PKHeX.Core/PKM/Shared/GBPKM.cs @@ -16,7 +16,7 @@ public abstract class GBPKM : PKM public sealed override int MinGameID => (int)GameVersion.RD; public sealed override int MaxGameID => (int)GameVersion.C; public sealed override int MaxIV => 15; - public sealed override int MaxEV => ushort.MaxValue; + public sealed override int MaxEV => EffortValues.Max12; public sealed override ReadOnlySpan ExtraBytes => ReadOnlySpan.Empty; diff --git a/PKHeX.Core/PKM/Util/EffortValues.cs b/PKHeX.Core/PKM/Util/EffortValues.cs index 3ead48799..022986299 100644 --- a/PKHeX.Core/PKM/Util/EffortValues.cs +++ b/PKHeX.Core/PKM/Util/EffortValues.cs @@ -7,6 +7,19 @@ namespace PKHeX.Core; /// public static class EffortValues { + /// Maximum value for a single stat in Generation 1/2 formats. + public const ushort Max12 = ushort.MaxValue; + /// Maximum value for a single stat in Generation 6+ formats. + public const byte Max252 = 252; + /// Maximum value for a single stat in Generation 3-5 formats. + public const byte Max255 = 255; + /// Maximum value for the sum of all stats in Generation 3+ formats. + public const ushort Max510 = 510; + /// Since EVs are effective in multiples of 4, the leftover EVs (2) have no impact regardless of stat gained. + public const ushort MaxEffective = 508; + /// The leftover EVs if two stats are . + public const byte LeftoverDual252 = 6; + /// /// Gets randomized EVs for a given generation format /// @@ -25,8 +38,8 @@ private static void SetRandom252(Span evs, Random rnd) { // Set random EVs (max 252 per stat) until we run out of EVs. // The last stat index receives the remaining EVs - const int maxTotal = 510; - const int maxStat = 252; + const int maxTotal = Max510; + const int maxStat = Max252; const int maxStatPlusBias = 300; // weight more towards the high end of received EVs while (true) // loop until we get a valid set of 6 stats { @@ -34,7 +47,7 @@ private static void SetRandom252(Span evs, Random rnd) for (int i = 0; i < evs.Length - 1; i++) { var max = Math.Min(maxStatPlusBias, remain); - var amount = rnd.Next(0, max); + var amount = rnd.Next(0, max + 1); if (amount > maxStat) amount = maxStat; remain -= (evs[i] = (byte)amount); @@ -53,7 +66,7 @@ private static void SetRandom12(Span evs, Random rnd) { // In generation 1/2, EVs can be 0-65535. for (int i = 0; i < evs.Length; i++) - evs[i] = rnd.Next(ushort.MaxValue + 1); + evs[i] = rnd.Next(Max12 + 1); } /// @@ -76,15 +89,15 @@ private static void SetMax252(Span evs, PKM entity) Span<(int Index, int Stat)> tuples = stackalloc (int, int)[6]; pi.GetSortedStatIndexes(tuples); - evs[tuples[0].Index] = 252; - evs[tuples[1].Index] = 252; - evs[tuples[2].Index] = 6; + evs[tuples[0].Index] = Max252; + evs[tuples[1].Index] = Max252; + evs[tuples[2].Index] = LeftoverDual252; } private static void SetMax12(Span evs) { for (int i = 0; i < evs.Length; i++) - evs[i] = ushort.MaxValue; + evs[i] = Max12; } /// @@ -92,4 +105,40 @@ private static void SetMax12(Span evs) /// /// Array to store the resulting EVs public static void Clear(Span evs) => evs.Clear(); + + public static EffortValueGrade GetGrade(int sum) => sum switch + { + 0 => EffortValueGrade.None, + <= 128 => EffortValueGrade.Quarter, + <= 256 => EffortValueGrade.Half, + + < MaxEffective => EffortValueGrade.NearFull, + MaxEffective => EffortValueGrade.MaxEffective, + Max510 - 1 => EffortValueGrade.MaxNearCap, + Max510 => EffortValueGrade.MaxLegal, + _ => EffortValueGrade.Illegal, + }; +} + +/// +/// Assessment of the total EVs, compared to the maximum allowed. +/// +public enum EffortValueGrade +{ + /// No EVs + None, + /// 1-128 EVs + Quarter, + /// 129-256 EVs + Half, + /// 257-508 EVs + NearFull, + /// 508 EVs + MaxEffective, + /// 509 EVs + MaxNearCap, + /// 510 EVs + MaxLegal, + /// 511+ EVs + Illegal, } diff --git a/PKHeX.Core/Saves/SAV1.cs b/PKHeX.Core/Saves/SAV1.cs index 653ff0e32..f247fde47 100644 --- a/PKHeX.Core/Saves/SAV1.cs +++ b/PKHeX.Core/Saves/SAV1.cs @@ -227,7 +227,7 @@ private int GetBoxRawDataOffset(int box) public override int MaxCoins => 9999; public override int BoxCount => Japanese ? 8 : 12; - public override int MaxEV => 65535; + public override int MaxEV => EffortValues.Max12; public override int MaxIV => 15; public override int Generation => 1; public override EntityContext Context => EntityContext.Gen1; diff --git a/PKHeX.Core/Saves/SAV1Stadium.cs b/PKHeX.Core/Saves/SAV1Stadium.cs index 9e7b85d19..b855180dd 100644 --- a/PKHeX.Core/Saves/SAV1Stadium.cs +++ b/PKHeX.Core/Saves/SAV1Stadium.cs @@ -12,7 +12,7 @@ public sealed class SAV1Stadium : SAV_STADIUM public override string SaveRevisionString => Japanese ? "J" : "U"; public override PersonalTable1 Personal => PersonalTable.Y; - public override int MaxEV => ushort.MaxValue; + public override int MaxEV => EffortValues.Max12; public override ReadOnlySpan HeldItems => Array.Empty(); public override GameVersion Version { get; protected set; } = GameVersion.Stadium; diff --git a/PKHeX.Core/Saves/SAV1StadiumJ.cs b/PKHeX.Core/Saves/SAV1StadiumJ.cs index f67faabb4..2a8de2297 100644 --- a/PKHeX.Core/Saves/SAV1StadiumJ.cs +++ b/PKHeX.Core/Saves/SAV1StadiumJ.cs @@ -13,7 +13,7 @@ public sealed class SAV1StadiumJ : SAV_STADIUM public override string SaveRevisionString => "0"; // so we're different from Japanese SAV1Stadium naming... public override PersonalTable1 Personal => PersonalTable.Y; - public override int MaxEV => ushort.MaxValue; + public override int MaxEV => EffortValues.Max12; public override ReadOnlySpan HeldItems => Array.Empty(); public override GameVersion Version { get; protected set; } = GameVersion.StadiumJ; diff --git a/PKHeX.Core/Saves/SAV2.cs b/PKHeX.Core/Saves/SAV2.cs index fb8a03b09..7d9f6462e 100644 --- a/PKHeX.Core/Saves/SAV2.cs +++ b/PKHeX.Core/Saves/SAV2.cs @@ -280,7 +280,7 @@ protected override byte[] GetFinalData() public int EventFlagCount => 2000; public override int BoxCount => Japanese ? 9 : 14; - public override int MaxEV => 65535; + public override int MaxEV => EffortValues.Max12; public override int MaxIV => 15; public override int Generation => 2; public override EntityContext Context => EntityContext.Gen2; diff --git a/PKHeX.Core/Saves/SAV3.cs b/PKHeX.Core/Saves/SAV3.cs index 31dbedddf..100d5d6f9 100644 --- a/PKHeX.Core/Saves/SAV3.cs +++ b/PKHeX.Core/Saves/SAV3.cs @@ -185,7 +185,7 @@ public void WriteBothSaveSlots(Span data) public sealed override ReadOnlySpan HeldItems => Legal.HeldItems_RS; public sealed override int BoxCount => 14; - public sealed override int MaxEV => 255; + public sealed override int MaxEV => EffortValues.Max255; public sealed override int Generation => 3; public sealed override EntityContext Context => EntityContext.Gen3; protected sealed override int GiftCountMax => 1; diff --git a/PKHeX.Core/Saves/SAV3Colosseum.cs b/PKHeX.Core/Saves/SAV3Colosseum.cs index 63ac2b16b..000ccb26e 100644 --- a/PKHeX.Core/Saves/SAV3Colosseum.cs +++ b/PKHeX.Core/Saves/SAV3Colosseum.cs @@ -145,7 +145,7 @@ private byte[] GetInnerData() public override int MaxItemID => Legal.MaxItemID_3_COLO; public override int MaxGameID => Legal.MaxGameID_3; - public override int MaxEV => 255; + public override int MaxEV => EffortValues.Max255; public override int Generation => 3; public override EntityContext Context => EntityContext.Gen3; protected override int GiftCountMax => 1; diff --git a/PKHeX.Core/Saves/SAV3RSBox.cs b/PKHeX.Core/Saves/SAV3RSBox.cs index f93fa5017..a9698858e 100644 --- a/PKHeX.Core/Saves/SAV3RSBox.cs +++ b/PKHeX.Core/Saves/SAV3RSBox.cs @@ -108,7 +108,7 @@ private byte[] GetInnerData() public override int MaxBallID => Legal.MaxBallID_3; public override int MaxGameID => Legal.MaxGameID_3; - public override int MaxEV => 255; + public override int MaxEV => EffortValues.Max255; public override int Generation => 3; public override EntityContext Context => EntityContext.Gen3; protected override int GiftCountMax => 1; diff --git a/PKHeX.Core/Saves/SAV3XD.cs b/PKHeX.Core/Saves/SAV3XD.cs index a168cc809..bbd67d003 100644 --- a/PKHeX.Core/Saves/SAV3XD.cs +++ b/PKHeX.Core/Saves/SAV3XD.cs @@ -188,7 +188,7 @@ private byte[] GetInnerData() public override int MaxItemID => Legal.MaxItemID_3_XD; public override int MaxGameID => Legal.MaxGameID_3; - public override int MaxEV => 255; + public override int MaxEV => EffortValues.Max255; public override int Generation => 3; public override EntityContext Context => EntityContext.Gen3; protected override int GiftCountMax => 1; diff --git a/PKHeX.Core/Saves/SAV4BR.cs b/PKHeX.Core/Saves/SAV4BR.cs index 614ac420f..d045d48fe 100644 --- a/PKHeX.Core/Saves/SAV4BR.cs +++ b/PKHeX.Core/Saves/SAV4BR.cs @@ -104,7 +104,7 @@ public int CurrentSlot public override int MaxBallID => Legal.MaxBallID_4; public override int MaxGameID => Legal.MaxGameID_4; - public override int MaxEV => 255; + public override int MaxEV => EffortValues.Max255; public override int Generation => 4; public override EntityContext Context => EntityContext.Gen4; protected override int GiftCountMax => 1; diff --git a/PKHeX.Core/Saves/SAV5.cs b/PKHeX.Core/Saves/SAV5.cs index d84138ad2..d732e5bcc 100644 --- a/PKHeX.Core/Saves/SAV5.cs +++ b/PKHeX.Core/Saves/SAV5.cs @@ -23,7 +23,7 @@ public abstract class SAV5 : SaveFile, ISaveBlock5BW, IEventFlag37 public override Type PKMType => typeof(PK5); public override int BoxCount => 24; - public override int MaxEV => 255; + public override int MaxEV => EffortValues.Max255; public override int Generation => 5; public override EntityContext Context => EntityContext.Gen5; public override int MaxStringLengthOT => 7; diff --git a/PKHeX.Core/Saves/SAV6.cs b/PKHeX.Core/Saves/SAV6.cs index 2486db131..8227b0393 100644 --- a/PKHeX.Core/Saves/SAV6.cs +++ b/PKHeX.Core/Saves/SAV6.cs @@ -23,7 +23,7 @@ public abstract class SAV6 : SAV_BEEF, ITrainerStatRecord, ISaveBlock6Core, IReg public override Type PKMType => typeof(PK6); public override int BoxCount => 31; - public override int MaxEV => 252; + public override int MaxEV => EffortValues.Max252; public override int Generation => 6; public override EntityContext Context => EntityContext.Gen6; protected override int GiftCountMax => 24; diff --git a/PKHeX.Core/Saves/SAV7.cs b/PKHeX.Core/Saves/SAV7.cs index bdf72372f..f15f3c72f 100644 --- a/PKHeX.Core/Saves/SAV7.cs +++ b/PKHeX.Core/Saves/SAV7.cs @@ -70,7 +70,7 @@ protected void ReloadBattleTeams() public override Type PKMType => typeof(PK7); public override int BoxCount => 32; - public override int MaxEV => 252; + public override int MaxEV => EffortValues.Max252; public override int Generation => 7; public override EntityContext Context => EntityContext.Gen7; protected override int GiftCountMax => 48; diff --git a/PKHeX.Core/Saves/SAV7b.cs b/PKHeX.Core/Saves/SAV7b.cs index d1dc3a73a..a601895fc 100644 --- a/PKHeX.Core/Saves/SAV7b.cs +++ b/PKHeX.Core/Saves/SAV7b.cs @@ -74,7 +74,7 @@ private void Initialize() public override int MaxAbilityID => Legal.MaxAbilityID_7b; public override int MaxIV => 31; - public override int MaxEV => 252; + public override int MaxEV => EffortValues.Max252; public override int MaxStringLengthOT => 12; public override int MaxStringLengthNickname => 12; protected override int GiftCountMax => 48; diff --git a/PKHeX.Core/Saves/SAV8BS.cs b/PKHeX.Core/Saves/SAV8BS.cs index 25dd5528d..7dd9622d4 100644 --- a/PKHeX.Core/Saves/SAV8BS.cs +++ b/PKHeX.Core/Saves/SAV8BS.cs @@ -106,7 +106,7 @@ private void Initialize() public override Type PKMType => typeof(PB8); public override int BoxCount => BoxLayout8b.BoxCount; - public override int MaxEV => 252; + public override int MaxEV => EffortValues.Max252; public override int Generation => 8; public override EntityContext Context => EntityContext.Gen8b; diff --git a/PKHeX.Core/Saves/SAV8LA.cs b/PKHeX.Core/Saves/SAV8LA.cs index 18d6b02b1..79f1f964a 100644 --- a/PKHeX.Core/Saves/SAV8LA.cs +++ b/PKHeX.Core/Saves/SAV8LA.cs @@ -60,7 +60,7 @@ public override void CopyChangesFrom(SaveFile sav) public override PA8 BlankPKM => new(); public override Type PKMType => typeof(PA8); - public override int MaxEV => 252; + public override int MaxEV => EffortValues.Max252; public override int Generation => 8; public override EntityContext Context => EntityContext.Gen8a; public override int MaxStringLengthOT => 12; diff --git a/PKHeX.Core/Saves/SAV8SWSH.cs b/PKHeX.Core/Saves/SAV8SWSH.cs index 8126a782d..cc9c97255 100644 --- a/PKHeX.Core/Saves/SAV8SWSH.cs +++ b/PKHeX.Core/Saves/SAV8SWSH.cs @@ -147,7 +147,7 @@ private void Initialize() public override Type PKMType => typeof(PK8); public override int BoxCount => BoxLayout8.BoxCount; - public override int MaxEV => 252; + public override int MaxEV => EffortValues.Max252; public override int Generation => 8; public override EntityContext Context => EntityContext.Gen8; public override int MaxStringLengthOT => 12; diff --git a/PKHeX.Core/Saves/SAV9SV.cs b/PKHeX.Core/Saves/SAV9SV.cs index f269b4827..27924877e 100644 --- a/PKHeX.Core/Saves/SAV9SV.cs +++ b/PKHeX.Core/Saves/SAV9SV.cs @@ -142,7 +142,7 @@ private void Initialize() public override Type PKMType => typeof(PK9); public override int BoxCount => BoxLayout9.BoxCount; - public override int MaxEV => 252; + public override int MaxEV => EffortValues.Max252; public override int Generation => 9; public override EntityContext Context => EntityContext.Gen9; public override int MaxStringLengthOT => 12; diff --git a/PKHeX.WinForms/Controls/PKM Editor/StatEditor.cs b/PKHeX.WinForms/Controls/PKM Editor/StatEditor.cs index 60f82f425..5ba9645ac 100644 --- a/PKHeX.WinForms/Controls/PKM Editor/StatEditor.cs +++ b/PKHeX.WinForms/Controls/PKM Editor/StatEditor.cs @@ -371,11 +371,11 @@ private void UpdateEVTotals() EVTip.SetToolTip(TB_EVTotal, $"Remaining: {510 - evtotal}"); } - private Color GetEVTotalColor(int evtotal, Color defaultColor) => evtotal switch + private Color GetEVTotalColor(int evtotal, Color defaultColor) => EffortValues.GetGrade(evtotal) switch { - > 510 => EVsInvalid, // Background turns Red - 510 => EVsMaxed, // Maximum EVs - 508 => EVsFishy, // Fishy EVs + EffortValueGrade.Illegal => EVsInvalid, // Background turns Red + EffortValueGrade.MaxLegal => EVsMaxed, // Maximum EVs + EffortValueGrade.MaxEffective => EVsFishy, // Fishy EVs _ => defaultColor, }; diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_SecretBase.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_SecretBase.cs index 599437dad..bbab2b618 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_SecretBase.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen6/SAV_SecretBase.cs @@ -192,12 +192,12 @@ private void SavePKM(SecretBase6PKM pk) pk.Nature = WinFormsUtil.GetIndex(CB_Nature); pk.Gender = EntityGender.GetFromString(Label_Gender.Text); pk.Form = (byte)CB_Form.SelectedIndex; - pk.EV_HP = Math.Min(Convert.ToInt32(TB_HPEV.Text), 252); - pk.EV_ATK = Math.Min(Convert.ToInt32(TB_ATKEV.Text), 252); - pk.EV_DEF = Math.Min(Convert.ToInt32(TB_DEFEV.Text), 252); - pk.EV_SPA = Math.Min(Convert.ToInt32(TB_SPAEV.Text), 252); - pk.EV_SPD = Math.Min(Convert.ToInt32(TB_SPDEV.Text), 252); - pk.EV_SPE = Math.Min(Convert.ToInt32(TB_SPEEV.Text), 252); + pk.EV_HP = Math.Clamp(Convert.ToInt32(TB_HPEV.Text) , 0, EffortValues.Max252); + pk.EV_ATK = Math.Clamp(Convert.ToInt32(TB_ATKEV.Text), 0, EffortValues.Max252); + pk.EV_DEF = Math.Clamp(Convert.ToInt32(TB_DEFEV.Text), 0, EffortValues.Max252); + pk.EV_SPA = Math.Clamp(Convert.ToInt32(TB_SPAEV.Text), 0, EffortValues.Max252); + pk.EV_SPD = Math.Clamp(Convert.ToInt32(TB_SPDEV.Text), 0, EffortValues.Max252); + pk.EV_SPE = Math.Clamp(Convert.ToInt32(TB_SPEEV.Text), 0, EffortValues.Max252); pk.Move1 = (ushort)WinFormsUtil.GetIndex(CB_Move1); pk.Move2 = (ushort)WinFormsUtil.GetIndex(CB_Move2); pk.Move3 = (ushort)WinFormsUtil.GetIndex(CB_Move3); @@ -206,7 +206,7 @@ private void SavePKM(SecretBase6PKM pk) pk.Move2_PPUps = CB_PPu2.SelectedIndex; pk.Move3_PPUps = CB_PPu3.SelectedIndex; pk.Move4_PPUps = CB_PPu4.SelectedIndex; - pk.IV_HP = Convert.ToByte(TB_HPIV.Text) & 0x1F; + pk.IV_HP = Convert.ToByte(TB_HPIV.Text) & 0x1F; pk.IV_ATK = Convert.ToByte(TB_ATKIV.Text) & 0x1F; pk.IV_DEF = Convert.ToByte(TB_DEFIV.Text) & 0x1F; pk.IV_SPA = Convert.ToByte(TB_SPAIV.Text) & 0x1F;