Example #1
0
        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();
        }