diff --git a/pkNX.Structures.FlatBuffers/Arceus/Learnset8a.cs b/pkNX.Structures.FlatBuffers/Arceus/Learnset8a.cs index edfa092a..02efac59 100644 --- a/pkNX.Structures.FlatBuffers/Arceus/Learnset8a.cs +++ b/pkNX.Structures.FlatBuffers/Arceus/Learnset8a.cs @@ -28,7 +28,7 @@ public class Learnset8aMeta [FlatBufferItem(2)] public Learnset8aEntry[] Mainline { get; set; } = Array.Empty(); [FlatBufferItem(3)] public Learnset8aEntry[] Arceus { get; set; } = Array.Empty(); - public byte[] WriteAsLearn6() + public byte[] WriteLearnsetAsLearn6() { using var ms = new MemoryStream(); using var br = new BinaryWriter(ms); @@ -40,6 +40,19 @@ public byte[] WriteAsLearn6() br.Write(-1); return ms.ToArray(); } + + public byte[] WriteMasteryAsLearn6() + { + using var ms = new MemoryStream(); + using var br = new BinaryWriter(ms); + foreach (var entry in Arceus) + { + br.Write(entry.Move); + br.Write(entry.LevelMaster); + } + br.Write(-1); + return ms.ToArray(); + } } [FlatBufferTable, TypeConverter(typeof(ExpandableObjectConverter))] diff --git a/pkNX.WinForms/Dumping/GameDumperPLA.cs b/pkNX.WinForms/Dumping/GameDumperPLA.cs index 0fa57bbb..dab641f6 100644 --- a/pkNX.WinForms/Dumping/GameDumperPLA.cs +++ b/pkNX.WinForms/Dumping/GameDumperPLA.cs @@ -271,9 +271,11 @@ public void DumpLearnsetBinary() var obj = FlatBufferConverter.DeserializeFrom(data); var pt = GetPersonal(); var result = new byte[pt.TableLength][]; + var mastery = new byte[pt.TableLength][]; for (int i = 0; i < result.Length; i++) - result[i] = Array.Empty(); + result[i] = mastery[i] = Array.Empty(); + var Dupes = new List<(int Species, int Form)>(); foreach (var e in obj.Table) { if (e.Arceus.Length == 0) @@ -282,12 +284,30 @@ public void DumpLearnsetBinary() var entry = (PersonalInfoLA_Bin)pt[index]; if (!entry.IsPresentInGame) continue; - result[index] = e.WriteAsLearn6(); + result[index] = e.WriteLearnsetAsLearn6(); + mastery[index] = e.WriteMasteryAsLearn6(); + + if (e.Arceus.Select(z => z.Level).Distinct().Count() != e.Arceus.Length) + Dupes.Add(new(e.Species, e.Form)); } - var mini = MiniUtil.PackMini(result, "la"); - var bin = GetPath(Path.Combine("bin", "lvlmove_la.pkl")); - File.WriteAllBytes(bin, mini); + // Learnset + { + var mini = MiniUtil.PackMini(result, "la"); + var bin = GetPath(Path.Combine("bin", "lvlmove_la.pkl")); + File.WriteAllBytes(bin, mini); + } + // Mastery + { + var mini = MiniUtil.PackMini(mastery, "la"); + var bin = GetPath(Path.Combine("bin", "mastery_la.pkl")); + File.WriteAllBytes(bin, mini); + } + // Dupes + { + var txt = GetPath(Path.Combine("bin", "lvlmove_dupes.txt")); + File.WriteAllLines(txt, Dupes.Select(z => $"{(Species)z.Species}{(z.Form == 0 ? "" : $"{z.Form}")}")); + } } private PersonalTable GetPersonal()