void Core_Platform_InsertData(string filepath)
        {
            BattlePlatform platform;

            try
            {
                string path = Path.GetDirectoryName(filepath) + '\\';
                string file = Path.GetFileNameWithoutExtension(filepath);

                if (!File.Exists(path + file + ".chr"))
                {
                    throw new Exception("Could not find Tileset file:\n" + path + file + ".chr");
                }
                if (!File.Exists(path + file + ".pal"))
                {
                    throw new Exception("Could not find Palette file:\n" + path + file + ".pal");
                }

                byte[] tileset = File.ReadAllBytes(path + file + ".chr");
                byte[] palette = File.ReadAllBytes(path + file + ".pal");

                platform = new BattlePlatform(tileset, palette);
            }
            catch (Exception ex)
            {
                Program.ShowError("Could not load the image file.", ex);
                return;
            }
            Core_Insert(platform);
        }
        void Core_Platform_InsertImage(string filepath)
        {
            BattlePlatform platform;

            try
            {
                platform = new BattlePlatform(new GBA.Image(filepath));
            }
            catch (Exception ex)
            {
                Program.ShowError("Could not load the image file.", ex);
                return;
            }
            Core_Insert(platform);
        }
        void Core_LoadPlatform()
        {
            try
            {
                byte[] tileset = Core.ReadData((Pointer)Current["Tileset"], 0);
                byte[] palette = Core.ReadData((Pointer)Current["Palette"], Palette.LENGTH);

                CurrentPlatform = new BattlePlatform(tileset, palette);

                Platform_ImageBox.Load(CurrentPlatform);
                Platform_PaletteBox.Load(new Palette(palette));
            }
            catch (Exception ex)
            {
                Program.ShowError("Could not load the battle platform image.", ex);

                Platform_ImageBox.Reset();
                Platform_PaletteBox.Reset();
            }
        }
        void Core_Insert(BattlePlatform insert)
        {
            Core.SuspendUpdate();
            try
            {
                byte[] data_tileset = insert.Sheet.ToBytes(true);
                byte[] data_palette = insert.Colors.ToBytes(false);

                bool cancel = Prompt.ShowRepointDialog(this, "Repoint Battle Platform",
                                                       "The battle platform to insert might need some of its parts to be repointed.",
                                                       CurrentEntry, new Tuple <string, Pointer, int>[] {
                    Tuple.Create("Tileset", (Pointer)Current["Tileset"], data_tileset.Length),
                    Tuple.Create("Palette", (Pointer)Current["Palette"], data_palette.Length),
                }, new Pointer[] {
                    Current.GetAddress(Current.EntryIndex, "Tileset"),
                    Current.GetAddress(Current.EntryIndex, "Palette"),
                });
                if (cancel)
                {
                    return;
                }

                Core.WriteData(this,
                               (Pointer)Current["Tileset"],
                               data_tileset,
                               CurrentEntry + "Tileset changed");

                Core.WriteData(this,
                               (Pointer)Current["Palette"],
                               data_palette,
                               CurrentEntry + "Palette changed");
            }
            catch (Exception ex)
            {
                Program.ShowError("Could not insert the image.", ex);
                Core_Update();
            }
            Core.ResumeUpdate();
            Core.PerformUpdate();
        }