Add dump for mastery levels, duplicate levels

This commit is contained in:
Kurt 2022-05-06 20:52:47 -07:00
parent ec9d9c539e
commit 58cf010e44
2 changed files with 39 additions and 6 deletions

View File

@ -28,7 +28,7 @@ public class Learnset8aMeta
[FlatBufferItem(2)] public Learnset8aEntry[] Mainline { get; set; } = Array.Empty<Learnset8aEntry>();
[FlatBufferItem(3)] public Learnset8aEntry[] Arceus { get; set; } = Array.Empty<Learnset8aEntry>();
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))]

View File

@ -271,9 +271,11 @@ public void DumpLearnsetBinary()
var obj = FlatBufferConverter.DeserializeFrom<Learnset8a>(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<byte>();
result[i] = mastery[i] = Array.Empty<byte>();
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()