public void EditPlacement() { var arc = ROM.GetFile(GameFile.Placement); var placement = new GFPack(arc[0]); var area_names = new AHTB(placement.GetDataFileName("AreaNameHashTable.tbl")).ToDictionary(); List <PlacementArea8Archive> areas = new(); List <string> names = new(); foreach (var area in area_names) { var areaName = area.Value; var fileName = $"{areaName}.bin"; if (placement.GetIndexFileName(fileName) < 0) { continue; } var bin = placement.GetDataFileName(fileName); var data = FlatBufferConverter.DeserializeFrom <PlacementArea8Archive>(bin); names.Add(fileName); areas.Add(data); } var arr = areas.ToArray(); var nameArr = names.ToArray(); var cache = new DataCache <PlacementArea8Archive>(arr); var form = new GenericEditor <PlacementArea8Archive>(cache, nameArr, "Placement", canSave: true); form.ShowDialog(); if (!form.Modified) { return; } // Stuff files back into the gfpak and save for (int i = 0; i < arr.Length; i++) { var obj = arr[i]; var bin = FlatBufferConverter.SerializeFrom(obj); placement.SetDataFileName(nameArr[i], bin); } arc[0] = placement.Write(); }