From 96bf5a6891d6fcfb0eb0ae111feb1091a49bf55b Mon Sep 17 00:00:00 2001 From: Kurt Date: Sun, 19 May 2024 23:29:27 -0500 Subject: [PATCH] Misc tweaks --- .../Legality/Verifiers/NicknameVerifier.cs | 16 +++++++- PKHeX.Core/Saves/Util/SaveLanguage.cs | 5 ++- .../Controls/PKM Editor/PKMEditor.cs | 39 ++++++++++--------- 3 files changed, 40 insertions(+), 20 deletions(-) diff --git a/PKHeX.Core/Legality/Verifiers/NicknameVerifier.cs b/PKHeX.Core/Legality/Verifiers/NicknameVerifier.cs index 0f9dfec39..d33cc0cb4 100644 --- a/PKHeX.Core/Legality/Verifiers/NicknameVerifier.cs +++ b/PKHeX.Core/Legality/Verifiers/NicknameVerifier.cs @@ -45,7 +45,7 @@ public override void Verify(LegalityAnalysis data) { if (pk.VC) VerifyG1NicknameWithinBounds(data, nickname); - else if (enc is MysteryGift {IsEgg: false}) + else if (IsMysteryGiftNoNickname(enc)) data.AddLine(Get(LEncGiftNicknamed, ParseSettings.Settings.Nickname.NicknamedMysteryGift(enc.Context))); } @@ -75,6 +75,20 @@ public override void Verify(LegalityAnalysis data) } } + private static bool IsMysteryGiftNoNickname(IEncounterable enc) + { + if (enc is not MysteryGift { IsEgg: false }) + return false; + return enc switch + { + PCD pcd => !pcd.Gift.PK.IsNicknamed, + PGF pgf => !pgf.IsNicknamed, + WC6 wc6 => !wc6.IsNicknamed && wc6 is not { IsLinkGift: true, Species: (int)Species.Glalie or (int)Species.Steelix }, // Can nickname the demo gift + WC7 wc7 => !wc7.IsNicknamed, + _ => true, + }; + } + private void VerifyFixedNicknameEncounter(LegalityAnalysis data, ILangNicknamedTemplate n, IEncounterTemplate enc, PKM pk, ReadOnlySpan nickname) { var encounterNickname = n.GetNickname(pk.Language); diff --git a/PKHeX.Core/Saves/Util/SaveLanguage.cs b/PKHeX.Core/Saves/Util/SaveLanguage.cs index 87214f619..d793ff03b 100644 --- a/PKHeX.Core/Saves/Util/SaveLanguage.cs +++ b/PKHeX.Core/Saves/Util/SaveLanguage.cs @@ -109,7 +109,10 @@ public static SaveLanguageResult InferFrom(this SAV3 sav) if (sav.Metadata.FileName is not { } x) return GetFallback(sav); - var result = InferFrom3(x, sav.Version); + var ver = sav.Version; + if (ver is FR) + ver = FRLG; // Reset since the SAV3 impl assumes FR by default + var result = InferFrom3(x, ver); if (!IsResultValid(result, sav)) return GetFallback(sav); diff --git a/PKHeX.WinForms/Controls/PKM Editor/PKMEditor.cs b/PKHeX.WinForms/Controls/PKM Editor/PKMEditor.cs index bdc10010c..6cd8a4451 100644 --- a/PKHeX.WinForms/Controls/PKM Editor/PKMEditor.cs +++ b/PKHeX.WinForms/Controls/PKM Editor/PKMEditor.cs @@ -215,32 +215,35 @@ public bool EditsComplete { get { + // Find the first unfilled control, indicate as invalid. + TabPage? invalid = GetInvalidParentTab(); + if (invalid is null) + return true; // No issue. + if (ModifierKeys == (Keys.Control | Keys.Shift | Keys.Alt)) return true; // Override - // Find the first unfilled control, indicate as invalid. - Control? cb = null; - foreach (var type in ValidatedControls) - { - cb = type.IsNotValid(Entity); - if (cb is not null) - break; - } - - if (cb != null) - Hidden_TC.SelectedTab = WinFormsUtil.FindFirstControlOfType(cb); - else if (!Stats.Valid) - Hidden_TC.SelectedTab = Hidden_Stats; - else if (WinFormsUtil.GetIndex(CB_Species) == 0 && !HaX) // can't set an empty slot... - Hidden_TC.SelectedTab = Hidden_Main; - else - return true; - System.Media.SystemSounds.Exclamation.Play(); return false; } } + private TabPage? GetInvalidParentTab() + { + if (!Stats.Valid) + return Hidden_Stats; + if (WinFormsUtil.GetIndex(CB_Species) == 0 && !HaX) // can't set an empty slot... + return Hidden_Main; + foreach (var type in ValidatedControls) + { + var cb = type.IsNotValid(Entity); + if (cb is null) + continue; + return WinFormsUtil.FindFirstControlOfType(cb); + } + return null; + } + public void SetPKMFormatMode(PKM pk) { // Load Extra Byte List