From aee2d1a55614363848319692078ba8374f0f8349 Mon Sep 17 00:00:00 2001 From: Kurt Date: Fri, 12 Dec 2025 12:50:07 -0600 Subject: [PATCH] Meowstic/Magearna dex edit/set Also fixes tatsugiri form set when giving all --- .../PKM/Util/Conversion/FormConverter.cs | 12 ++++++- .../Saves/Substructures/Gen9/ZA/Zukan9a.cs | 16 +++++++-- .../Save Editors/Gen9/SAV_Pokedex9a.cs | 34 ++++++++++++------- 3 files changed, 46 insertions(+), 16 deletions(-) diff --git a/PKHeX.Core/PKM/Util/Conversion/FormConverter.cs b/PKHeX.Core/PKM/Util/Conversion/FormConverter.cs index 4c719d5ee..612e01cab 100644 --- a/PKHeX.Core/PKM/Util/Conversion/FormConverter.cs +++ b/PKHeX.Core/PKM/Util/Conversion/FormConverter.cs @@ -950,7 +950,7 @@ private static string[] GetFormsZygarde(IReadOnlyList forms, string[] re return result; } - public static MegaFormNames GetMegaFormNames(ReadOnlySpan forms) => new() + public static MegaFormNames GetMegaFormNames(ReadOnlySpan forms, IReadOnlyList gender, IReadOnlyList types) => new() { Regular = forms[Mega], X = forms[MegaX], @@ -960,6 +960,12 @@ public static MegaFormNames GetMegaFormNames(ReadOnlySpan forms) => new( Tatsu0 = $"{forms[Curly]}-{forms[Mega]}", Tatsu1 = $"{forms[Droopy]}-{forms[Mega]}", Tatsu2 = $"{forms[Stretchy]}-{forms[Mega]}", + + MeowsticM = $"{gender[000]}-{forms[Mega]}", + MeowsticF = $"{gender[001]}-{forms[Mega]}", + + Magearna0 = $"{types[000]}-{forms[Mega]}", + Magearna1 = $"{forms[1062]}-{forms[Mega]}", }; private const int Mega = 804; @@ -1139,4 +1145,8 @@ public sealed record MegaFormNames public required string Tatsu0 { get; init; } public required string Tatsu1 { get; init; } public required string Tatsu2 { get; init; } + public required string MeowsticM { get; init; } + public required string MeowsticF { get; init; } + public required string Magearna0 { get; init; } + public required string Magearna1 { get; init; } } diff --git a/PKHeX.Core/Saves/Substructures/Gen9/ZA/Zukan9a.cs b/PKHeX.Core/Saves/Substructures/Gen9/ZA/Zukan9a.cs index a6a8edf47..15b84b14d 100644 --- a/PKHeX.Core/Saves/Substructures/Gen9/ZA/Zukan9a.cs +++ b/PKHeX.Core/Saves/Substructures/Gen9/ZA/Zukan9a.cs @@ -1,3 +1,5 @@ +using System; + namespace PKHeX.Core; public sealed class Zukan9a(SAV9ZA sav, SCBlock block) : ZukanBase(sav, block.Raw) @@ -39,8 +41,13 @@ private void Register(PKM pk, ushort species, byte form) entry.SetIsFormCaught(form, true); if (FormInfo.IsMegaForm(species, form)) entry.SetIsSeenMega(0, true); - if (IsMegaFormXY(species, SAV.SaveRevision)) + + if (IsMegaFormXY(species, SAV.SaveRevision) || IsMegaFormZA(species, SAV.SaveRevision)) entry.SetIsSeenMega(1, true); + else if (species is (int)Species.Magearna or (int)Species.Meowstic) + entry.SetIsSeenMega(1, true); + else if (species == (int)Species.Tatsugiri) + entry.SetIsSeenMega(form < 3 ? form : (byte)Math.Clamp(form - 3, 0, 3), true); entry.SetLanguageFlag(pk.Language, true); var isShiny = pk.IsShiny; @@ -218,10 +225,13 @@ private void SeenAll(ushort species, PersonalInfo9ZA pi, bool value = true, bool entry.SetIsSeenAlpha(value); if (FormInfo.IsMegaForm(species, form)) entry.SetIsSeenMega(0, value); + if (IsMegaFormXY(species, SAV.SaveRevision) || IsMegaFormZA(species, SAV.SaveRevision)) entry.SetIsSeenMega(1, value); - else if (species is (int)Species.Tatsugiri or (int)Species.Magearna) - entry.SetIsSeenMega(form, value); + else if (species is (int)Species.Magearna or (int)Species.Meowstic) + entry.SetIsSeenMega(1, value); + else if (species == (int)Species.Tatsugiri) + entry.SetIsSeenMega(form < 3 ? form : (byte)Math.Clamp(form - 3, 0, 3), true); if (value) { diff --git a/PKHeX.WinForms/Subforms/Save Editors/Gen9/SAV_Pokedex9a.cs b/PKHeX.WinForms/Subforms/Save Editors/Gen9/SAV_Pokedex9a.cs index b4f6a3c4b..c2f058ad2 100644 --- a/PKHeX.WinForms/Subforms/Save Editors/Gen9/SAV_Pokedex9a.cs +++ b/PKHeX.WinForms/Subforms/Save Editors/Gen9/SAV_Pokedex9a.cs @@ -40,7 +40,8 @@ public SAV_Pokedex9a(SAV9ZA sav) // Fill List var filtered = GameInfo.FilteredSources; - MegaNames = FormConverter.GetMegaFormNames(filtered.Source.Strings.forms); + var strings = filtered.Source.Strings; + MegaNames = FormConverter.GetMegaFormNames(strings.forms, Main.GenderSymbols, strings.Types); int maxSpecies = sav.MaxSpeciesID; // no DLC species CB_Species.InitializeBinding(); @@ -152,10 +153,11 @@ private void GetEntry(ushort species) CHK_SeenGenderless.Checked = entry.GetIsGenderSeen(2); CHK_SeenAlpha.Checked = entry.GetIsSeenAlpha(); + CHK_SeenMega0.Checked = entry.GetIsSeenMega(0); + CHK_SeenMega1.Checked = entry.GetIsSeenMega(1); + CHK_SeenMega2.Checked = entry.GetIsSeenMega(2); if (Zukan9a.IsMegaFormXY(species, SAV.SaveRevision)) { - CHK_SeenMega0.Checked = entry.GetIsSeenMega(0); - CHK_SeenMega1.Checked = entry.GetIsSeenMega(1); CHK_SeenMega2.Visible = false; CHK_SeenMega0.Text = MegaNames.X; @@ -165,8 +167,6 @@ private void GetEntry(ushort species) } else if (Zukan9a.IsMegaFormZA(species, SAV.SaveRevision)) { - CHK_SeenMega0.Checked = entry.GetIsSeenMega(0); - CHK_SeenMega1.Checked = entry.GetIsSeenMega(1); CHK_SeenMega2.Visible = false; CHK_SeenMega0.Text = MegaNames.Regular; @@ -174,12 +174,24 @@ private void GetEntry(ushort species) CHK_SeenMega0.Visible = true; CHK_SeenMega1.Visible = true; } + else if (species is (int)Species.Meowstic) + { + CHK_SeenMega0.Text = MegaNames.MeowsticM; + CHK_SeenMega1.Text = MegaNames.MeowsticF; + CHK_SeenMega0.Visible = true; + CHK_SeenMega1.Visible = true; + CHK_SeenMega2.Visible = false; + } + else if (species is (int)Species.Magearna) + { + CHK_SeenMega0.Text = MegaNames.Magearna0; + CHK_SeenMega1.Text = MegaNames.Magearna1; + CHK_SeenMega0.Visible = true; + CHK_SeenMega1.Visible = true; + CHK_SeenMega2.Visible = false; + } else if (species is (int)Species.Tatsugiri) { - CHK_SeenMega0.Checked = entry.GetIsSeenMega(0); - CHK_SeenMega1.Checked = entry.GetIsSeenMega(1); - CHK_SeenMega2.Checked = entry.GetIsSeenMega(2); - CHK_SeenMega0.Text = MegaNames.Tatsu0; CHK_SeenMega1.Text = MegaNames.Tatsu1; CHK_SeenMega2.Text = MegaNames.Tatsu2; @@ -189,8 +201,6 @@ private void GetEntry(ushort species) } else { - CHK_SeenMega0.Checked = entry.GetIsSeenMega(0); - CHK_SeenMega0.Text = MegaNames.Regular; CHK_SeenMega0.Visible = true; CHK_SeenMega1.Visible = false; @@ -252,7 +262,7 @@ private void SetEntry(ushort species) entry.SetIsGenderSeen(2, CHK_SeenGenderless.Checked); entry.SetIsSeenAlpha(CHK_SeenAlpha.Checked); - if (Zukan9a.IsMegaFormXY(species, SAV.SaveRevision) || Zukan9a.IsMegaFormZA(species, SAV.SaveRevision)) + if (Zukan9a.IsMegaFormXY(species, SAV.SaveRevision) || Zukan9a.IsMegaFormZA(species, SAV.SaveRevision) || species is (int)Species.Magearna or (int)Species.Meowstic) { entry.SetIsSeenMega(0, CHK_SeenMega0.Checked); entry.SetIsSeenMega(1, CHK_SeenMega1.Checked);