From 4b3bf3380bd7c58b5d68f16c3693a17beaedfb40 Mon Sep 17 00:00:00 2001 From: Kurt Date: Sat, 30 Nov 2019 18:10:28 -0800 Subject: [PATCH] Add static/gift/trade generic editors --- .../Gen8/FlatGift/EncounterGift8Archive.cs | 4 +- .../FlatStatic/EncounterStatic8Archive.cs | 4 +- .../Gen8/FlatStatic/IFlatBufferArchive.cs | 7 +++ .../Gen8/FlatTrade/EncounterTrade8Archive.cs | 2 +- pkNX.WinForms/Dumping/GameDumperSWSH.cs | 4 +- pkNX.WinForms/MainEditor/EditorSWSH.cs | 46 ++++++++++++++++++- .../Flatbuffers/EncounterGift8Archive.fbs | 2 +- .../Flatbuffers/EncounterStatic8Archive.fbs | 2 +- pkNX.WinForms/Subforms/SSWE.cs | 4 +- 9 files changed, 63 insertions(+), 12 deletions(-) create mode 100644 pkNX.Structures/Encounter/Gen8/FlatStatic/IFlatBufferArchive.cs diff --git a/pkNX.Structures/Encounter/Gen8/FlatGift/EncounterGift8Archive.cs b/pkNX.Structures/Encounter/Gen8/FlatGift/EncounterGift8Archive.cs index c131d0c1..8dcc3973 100644 --- a/pkNX.Structures/Encounter/Gen8/FlatGift/EncounterGift8Archive.cs +++ b/pkNX.Structures/Encounter/Gen8/FlatGift/EncounterGift8Archive.cs @@ -1,7 +1,7 @@ namespace pkNX.Structures { - public class EncounterGift8Archive + public class EncounterGift8Archive : IFlatBufferArchive { - public EncounterGift8[] Encounters { get; set; } + public EncounterGift8[] Table { get; set; } } } \ No newline at end of file diff --git a/pkNX.Structures/Encounter/Gen8/FlatStatic/EncounterStatic8Archive.cs b/pkNX.Structures/Encounter/Gen8/FlatStatic/EncounterStatic8Archive.cs index d1205aac..0f7736b2 100644 --- a/pkNX.Structures/Encounter/Gen8/FlatStatic/EncounterStatic8Archive.cs +++ b/pkNX.Structures/Encounter/Gen8/FlatStatic/EncounterStatic8Archive.cs @@ -1,7 +1,7 @@ namespace pkNX.Structures { - public class EncounterStatic8Archive + public class EncounterStatic8Archive : IFlatBufferArchive { - public EncounterStatic8[] Encounters { get; set; } + public EncounterStatic8[] Table { get; set; } } } \ No newline at end of file diff --git a/pkNX.Structures/Encounter/Gen8/FlatStatic/IFlatBufferArchive.cs b/pkNX.Structures/Encounter/Gen8/FlatStatic/IFlatBufferArchive.cs new file mode 100644 index 00000000..e9af95e0 --- /dev/null +++ b/pkNX.Structures/Encounter/Gen8/FlatStatic/IFlatBufferArchive.cs @@ -0,0 +1,7 @@ +namespace pkNX.Structures +{ + public interface IFlatBufferArchive where T : class + { + T[] Table { get; set; } + } +} \ No newline at end of file diff --git a/pkNX.Structures/Encounter/Gen8/FlatTrade/EncounterTrade8Archive.cs b/pkNX.Structures/Encounter/Gen8/FlatTrade/EncounterTrade8Archive.cs index 8bca5bf4..8e57acbf 100644 --- a/pkNX.Structures/Encounter/Gen8/FlatTrade/EncounterTrade8Archive.cs +++ b/pkNX.Structures/Encounter/Gen8/FlatTrade/EncounterTrade8Archive.cs @@ -2,7 +2,7 @@ namespace pkNX.Structures { - public class EncounterTrade8Archive + public class EncounterTrade8Archive : IFlatBufferArchive { public EncounterTrade8[] Table { get; set; } } diff --git a/pkNX.WinForms/Dumping/GameDumperSWSH.cs b/pkNX.WinForms/Dumping/GameDumperSWSH.cs index 4597fe5f..ff01fac2 100644 --- a/pkNX.WinForms/Dumping/GameDumperSWSH.cs +++ b/pkNX.WinForms/Dumping/GameDumperSWSH.cs @@ -266,7 +266,7 @@ public void DumpGifts() { var path = ROM.GetFile(GameFile.EncounterGift).FilePath; var gifts = FlatBufferConverter.DeserializeFrom(path); - var table = TableUtil.GetTable(gifts.Encounters); + var table = TableUtil.GetTable(gifts.Table); var fn = GetPath("GiftEncounters.txt"); File.WriteAllText(fn, table); } @@ -275,7 +275,7 @@ public void DumpStatic() { var path = ROM.GetFile(GameFile.EncounterStatic).FilePath; var gifts = FlatBufferConverter.DeserializeFrom(path); - var table = TableUtil.GetTable(gifts.Encounters); + var table = TableUtil.GetTable(gifts.Table); var fn = GetPath("StaticEncounters.txt"); File.WriteAllText(fn, table); } diff --git a/pkNX.WinForms/MainEditor/EditorSWSH.cs b/pkNX.WinForms/MainEditor/EditorSWSH.cs index d95d016a..886ef5c3 100644 --- a/pkNX.WinForms/MainEditor/EditorSWSH.cs +++ b/pkNX.WinForms/MainEditor/EditorSWSH.cs @@ -1,5 +1,6 @@ using System; using System.IO; +using System.Linq; using pkNX.Containers; using pkNX.Game; using pkNX.Structures; @@ -203,7 +204,7 @@ private void PopWildEdit(string file) using var form = new SSWE(ROM, s, h); form.ShowDialog(); - if (!form.Saved) + if (!form.Modified) return; var sd = FlatBufferConverter.SerializeFrom(s); @@ -214,6 +215,49 @@ private void PopWildEdit(string file) fp[0] = data_table.Write(); } + public void EditStatic() + { + var arc = ROM.GetFile(GameFile.EncounterStatic); + var data = arc[0]; + if (CreateGenericEditor(ref data, "Static Encounters")) + arc[0] = data; + } + + public void EditGift() + { + var arc = ROM.GetFile(GameFile.EncounterGift); + var data = arc[0]; + if (CreateGenericEditor(ref data, "Gift Encounters")) + arc[0] = data; + } + + public void EditTrade() + { + var arc = ROM.GetFile(GameFile.EncounterTrade); + var data = arc[0]; + if (CreateGenericEditor(ref data, "Trade Encounters")) + arc[0] = data; + } + + private bool CreateGenericEditor(ref byte[] data, string title, string[] names = null) where TA : IFlatBufferArchive where T1 : class + { + var objs = FlatBufferConverter.DeserializeFrom(data); + if (names == null) + names = Enumerable.Range(1, objs.Table.Length).Select(z => z.ToString()).ToArray(); + var result = PopEdit(objs.Table, title, names); + if (result) + data = FlatBufferConverter.SerializeFrom(objs); + return result; + } + + private bool PopEdit(T[] data, string title, string[] names) where T : class + { + var cache = new DirectCache(data); + using var form = new GenericEditor(cache, names, title); + form.ShowDialog(); + return form.Modified; + } + public void EditMasterDump() { using var md = new DumperSWSH((GameManagerSWSH)ROM); diff --git a/pkNX.WinForms/Resources/Flatbuffers/EncounterGift8Archive.fbs b/pkNX.WinForms/Resources/Flatbuffers/EncounterGift8Archive.fbs index 3eb4574d..bd78f3c2 100644 --- a/pkNX.WinForms/Resources/Flatbuffers/EncounterGift8Archive.fbs +++ b/pkNX.WinForms/Resources/Flatbuffers/EncounterGift8Archive.fbs @@ -1,7 +1,7 @@ namespace pkNX.Structures; table EncounterGift8Archive { - Encounters:[EncounterGift8]; + Table:[EncounterGift8]; } table EncounterGift8 { diff --git a/pkNX.WinForms/Resources/Flatbuffers/EncounterStatic8Archive.fbs b/pkNX.WinForms/Resources/Flatbuffers/EncounterStatic8Archive.fbs index 25ce6205..2fd3a011 100644 --- a/pkNX.WinForms/Resources/Flatbuffers/EncounterStatic8Archive.fbs +++ b/pkNX.WinForms/Resources/Flatbuffers/EncounterStatic8Archive.fbs @@ -1,7 +1,7 @@ namespace pkNX.Structures; table EncounterStatic8Archive { - Encounters:[EncounterStatic8]; + Table:[EncounterStatic8]; } table EncounterStatic8 { diff --git a/pkNX.WinForms/Subforms/SSWE.cs b/pkNX.WinForms/Subforms/SSWE.cs index c6291fe8..1df053c8 100644 --- a/pkNX.WinForms/Subforms/SSWE.cs +++ b/pkNX.WinForms/Subforms/SSWE.cs @@ -52,7 +52,7 @@ public LocationHash(ulong hash, string loc) } } - public bool Saved { get; private set; } + public bool Modified { get; private set; } public void LoadLocations() { @@ -136,7 +136,7 @@ void Save(EncounterList8[] arr, EncounterArchive8 arc) private void B_Save_Click(object sender, EventArgs e) { SaveEntry(entry); - Saved = true; + Modified = true; Close(); }