From 9fe628b5c9797b8a65114cb9e3e9cc652dd4d3df Mon Sep 17 00:00:00 2001 From: Kurt Date: Fri, 10 Jan 2020 15:48:54 -0800 Subject: [PATCH] Add ROM raid editor --- pkNX.Game/Editors/DataCache.cs | 2 +- .../Gen8/FlatNest/EncounterNest8Archive.cs | 25 ++++++++++++------- pkNX.WinForms/MainEditor/EditorSWSH.cs | 21 ++++++++++++++++ 3 files changed, 38 insertions(+), 10 deletions(-) diff --git a/pkNX.Game/Editors/DataCache.cs b/pkNX.Game/Editors/DataCache.cs index 72a1d47a..73082eff 100644 --- a/pkNX.Game/Editors/DataCache.cs +++ b/pkNX.Game/Editors/DataCache.cs @@ -9,7 +9,7 @@ public class DataCache : IDataEditor where T : class public Func Create { private get; set; } public Func Write { protected get; set; } - protected DataCache(T[] cache) => Cache = cache; + public DataCache(T[] cache) => Cache = cache; public DataCache(IFileContainer f) : this(new T[f.Count]) => Data = f; protected readonly T[] Cache; diff --git a/pkNX.Structures/Encounter/Gen8/FlatNest/EncounterNest8Archive.cs b/pkNX.Structures/Encounter/Gen8/FlatNest/EncounterNest8Archive.cs index 9734271d..79437b5a 100644 --- a/pkNX.Structures/Encounter/Gen8/FlatNest/EncounterNest8Archive.cs +++ b/pkNX.Structures/Encounter/Gen8/FlatNest/EncounterNest8Archive.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Linq; +using Newtonsoft.Json; namespace pkNX.Structures { @@ -131,30 +132,36 @@ public class EncounterNest8 public int Species { get; set; } public int AltForm { get; set; } public ulong LevelTableID { get; set; } - public int Ability { get; set; } + public byte Ability { get; set; } public bool IsGigantamax { get; set; } public ulong DropTableID { get; set; } public ulong BonusTableID { get; set; } - public int[] Probabilities { get; set; } - public int Gender { get; set; } - public int FlawlessIVs { get; set; } + public uint[] Probabilities { get; set; } + public byte Gender { get; set; } + public byte FlawlessIVs { get; set; } + [JsonIgnore] public FixedAbility AbilityPermitted { get => (FixedAbility) Ability; - set => Ability = (int) value; + set => Ability = (byte) value; } + [JsonIgnore] public int MinRank => Array.FindIndex(Probabilities, z => z != 0); + + [JsonIgnore] public int MaxRank => Array.FindLastIndex(Probabilities, z => z != 0); + + public override string ToString() => $"{EntryIndex:00} - {Species:000}"; } public enum FixedAbility { - Regular12 = 0, - Only1 = 1, - Only2 = 2, - OnlyH = 3, + Ability1 = 0, + Ability2 = 1, + AbilityH = 2, + Ability1_2 = 3, Any = 4, } } diff --git a/pkNX.WinForms/MainEditor/EditorSWSH.cs b/pkNX.WinForms/MainEditor/EditorSWSH.cs index 886ef5c3..abea0260 100644 --- a/pkNX.WinForms/MainEditor/EditorSWSH.cs +++ b/pkNX.WinForms/MainEditor/EditorSWSH.cs @@ -215,6 +215,27 @@ private void PopWildEdit(string file) fp[0] = data_table.Write(); } + public void EditRaid() + { + IFileContainer fp = ROM.GetFile(GameFile.NestData); + var data_table = new GFPack(fp[0]); + const string nest = "nest_hole_encount.bin"; + var nest_encounts = FlatBufferConverter.DeserializeFrom(data_table.GetDataFileName(nest)); + + var arr = nest_encounts.Tables; + var cache = new DataCache(arr); + var games = new[] {"Sword", "Shield"}; + var names = arr.Select((z, i) => $"{games[z.GameVersion - 1]} - {i / 2}").ToArray(); + using var form = new GenericEditor(cache, names, "Raid Encounters"); + form.ShowDialog(); + if (!form.Modified) + return; + + var data = FlatBufferConverter.SerializeFrom(nest_encounts); + data_table.SetDataFileName(nest, data); + fp[0] = data_table.Write(); + } + public void EditStatic() { var arc = ROM.GetFile(GameFile.EncounterStatic);