public override bool Read(string filePath, Palette[] palettes) { var options = new FileOptions(); if (Extension.OpenFileOptionsWindow(options) == false) { return(false); } try { if (!string.IsNullOrEmpty(options.UI_FilePathTextBox.Text)) { palettes[0].Clear(); for (int y = 0; y < 8; ++y) { for (int x = 0; x < 16; ++x) { palettes[0].Colours[(y + 16) * 16 + x] = new ManiaColor(0, 0, 0); palettes[1].Colours[(y + 16) * 16 + x] = new ManiaColor(0, 0, 0); palettes[2].Colours[(y + 16) * 16 + x] = new ManiaColor(0, 0, 0); palettes[3].Colours[(y + 16) * 16 + x] = new ManiaColor(0, 0, 0); palettes[4].Colours[(y + 16) * 16 + x] = new ManiaColor(0, 0, 0); } } } } catch (Exception ex) { ExceptionWindow.UnhandledExceptionEventHandler(ex); } Data = File.ReadAllBytes(filePath); using (var stream = new MemoryStream(Data)) { stream.Position = 0x14; for (int p = 0; p < 3; ++p) { for (int y = 0; y < 3; ++y) { for (int x = 0; x < 6; ++x) { ++stream.Position; palettes[p].Colours[y * 16 + x].Blue = (byte)stream.ReadByte(); palettes[p].Colours[y * 16 + x].Green = (byte)stream.ReadByte(); palettes[p].Colours[y * 16 + x].Red = (byte)stream.ReadByte(); } } stream.Position += 9; } for (int p = 0; p < 3; ++p) { for (int y = 0; y < 3; ++y) { for (int x = 0; x < 6; ++x) { ++stream.Position; palettes[p].Colours[(1 * 3 + y) * 16 + x].Blue = (byte)stream.ReadByte(); palettes[p].Colours[(1 * 3 + y) * 16 + x].Green = (byte)stream.ReadByte(); palettes[p].Colours[(1 * 3 + y) * 16 + x].Red = (byte)stream.ReadByte(); } } stream.Position += 9; } for (int p = 0; p < 3; ++p) { for (int y = 0; y < 3; ++y) { for (int x = 0; x < 6; ++x) { ++stream.Position; palettes[p].Colours[(2 * 3 + y) * 16 + x].Blue = (byte)stream.ReadByte(); palettes[p].Colours[(2 * 3 + y) * 16 + x].Green = (byte)stream.ReadByte(); palettes[p].Colours[(2 * 3 + y) * 16 + x].Red = (byte)stream.ReadByte(); } } stream.Position += 9; } } for (int ii = 0; ii < 5; ++ii) { for (int i = 0; i < 16 * 8; ++i) { palettes[ii].Offsets[i] = (16 * 16); } // Sonic palettes[ii].Offsets[4 * 16 + 00] = -(4 * 16); palettes[ii].Offsets[4 * 16 + 01] = -(4 * 16); palettes[ii].Offsets[4 * 16 + 02] = -(4 * 16); palettes[ii].Offsets[4 * 16 + 03] = -(4 * 16); palettes[ii].Offsets[4 * 16 + 04] = -(4 * 16); palettes[ii].Offsets[4 * 16 + 05] = -(4 * 16); // Tails palettes[ii].Offsets[4 * 16 + 06] = -(1 * 16) - 6; palettes[ii].Offsets[4 * 16 + 07] = -(1 * 16) - 6; palettes[ii].Offsets[4 * 16 + 08] = -(1 * 16) - 6; palettes[ii].Offsets[4 * 16 + 09] = -(1 * 16) - 6; palettes[ii].Offsets[4 * 16 + 10] = -(1 * 16) - 6; palettes[ii].Offsets[4 * 16 + 11] = -(1 * 16) - 6; // Knuckles palettes[ii].Offsets[5 * 16 + 00] = (1 * 16); palettes[ii].Offsets[5 * 16 + 01] = (1 * 16); palettes[ii].Offsets[5 * 16 + 02] = (1 * 16); palettes[ii].Offsets[5 * 16 + 03] = (1 * 16); palettes[ii].Offsets[5 * 16 + 04] = (1 * 16); palettes[ii].Offsets[5 * 16 + 05] = (1 * 16); } return(true); }
public override bool Read(string filePath, Palette[] palettes, int palette) { var options = new FileOptions(); if (Extension.OpenFileOptionsWindow(options) == false) { return(false); } try { if (!string.IsNullOrEmpty(options.UI_FilePathTextBox.Text)) { RSDKv5.GameConfig config; string path = options.UI_FilePathTextBox.Text; if (path.StartsWith(".")) { path = Path.GetFullPath(Path.GetDirectoryName(filePath) + '\\' + path); } using (var stream = File.OpenRead(path)) config = new RSDKv5.GameConfig(stream); palettes[0].Clear(); // Sonic palettes[1].Clear(); // Tails palettes[2].Clear(); // Knuckles palettes[3].Clear(); // Mighty palettes[4].Clear(); // Ray for (int y = 0; y < 8; ++y) { for (int x = 0; x < 16; ++x) { var col = config.Palettes[0]?.Colors[y]?[x]; if (col == null) { continue; } palettes[0].Colours[(y + 16) * 16 + x] = new ManiaColor(col.R, col.G, col.B); // Sonic palettes[1].Colours[(y + 16) * 16 + x] = new ManiaColor(col.R, col.G, col.B); // Tails palettes[2].Colours[(y + 16) * 16 + x] = new ManiaColor(col.R, col.G, col.B); // Knuckles palettes[3].Colours[(y + 16) * 16 + x] = new ManiaColor(col.R, col.G, col.B); // Mighty palettes[4].Colours[(y + 16) * 16 + x] = new ManiaColor(col.R, col.G, col.B); // Ray } } } } catch (Exception ex) { ExceptionWindow.UnhandledExceptionEventHandler(ex); } Data = File.ReadAllBytes(filePath); using (var stream = new MemoryStream(Data)) { stream.Position = 0x539; for (int p = 0; p < 5; ++p) { for (int y = 0; y < 3; ++y) { for (int x = 0; x < 6; ++x) { ++stream.Position; palettes[p].Colours[y * 16 + x].Blue = (byte)stream.ReadByte(); palettes[p].Colours[y * 16 + x].Green = (byte)stream.ReadByte(); palettes[p].Colours[y * 16 + x].Red = (byte)stream.ReadByte(); } } stream.Position += 9; } for (int p = 0; p < 5; ++p) { for (int y = 0; y < 3; ++y) { for (int x = 0; x < 6; ++x) { ++stream.Position; palettes[p].Colours[(1 * 3 + y) * 16 + x].Blue = (byte)stream.ReadByte(); palettes[p].Colours[(1 * 3 + y) * 16 + x].Green = (byte)stream.ReadByte(); palettes[p].Colours[(1 * 3 + y) * 16 + x].Red = (byte)stream.ReadByte(); } } stream.Position += 9; } for (int p = 0; p < 5; ++p) { for (int y = 0; y < 3; ++y) { for (int x = 0; x < 6; ++x) { ++stream.Position; palettes[p].Colours[(2 * 3 + y) * 16 + x].Blue = (byte)stream.ReadByte(); palettes[p].Colours[(2 * 3 + y) * 16 + x].Green = (byte)stream.ReadByte(); palettes[p].Colours[(2 * 3 + y) * 16 + x].Red = (byte)stream.ReadByte(); } } stream.Position += 9; } } for (int ii = 0; ii < 5; ++ii) { for (int i = 0; i < 16 * 8; ++i) { palettes[ii].Offsets[i] = (16 * 16); } // Sonic palettes[ii].Offsets[4 * 16 + 00] = -(4 * 16); palettes[ii].Offsets[4 * 16 + 01] = -(4 * 16); palettes[ii].Offsets[4 * 16 + 02] = -(4 * 16); palettes[ii].Offsets[4 * 16 + 03] = -(4 * 16); palettes[ii].Offsets[4 * 16 + 04] = -(4 * 16); palettes[ii].Offsets[4 * 16 + 05] = -(4 * 16); // Tails palettes[ii].Offsets[4 * 16 + 06] = -(1 * 16) - 6; palettes[ii].Offsets[4 * 16 + 07] = -(1 * 16) - 6; palettes[ii].Offsets[4 * 16 + 08] = -(1 * 16) - 6; palettes[ii].Offsets[4 * 16 + 09] = -(1 * 16) - 6; palettes[ii].Offsets[4 * 16 + 10] = -(1 * 16) - 6; palettes[ii].Offsets[4 * 16 + 11] = -(1 * 16) - 6; // Knuckles palettes[ii].Offsets[5 * 16 + 00] = (1 * 16); palettes[ii].Offsets[5 * 16 + 01] = (1 * 16); palettes[ii].Offsets[5 * 16 + 02] = (1 * 16); palettes[ii].Offsets[5 * 16 + 03] = (1 * 16); palettes[ii].Offsets[5 * 16 + 04] = (1 * 16); palettes[ii].Offsets[5 * 16 + 05] = (1 * 16); // Mighty palettes[ii].Offsets[6 * 16 + 00] = (3 * 16); palettes[ii].Offsets[6 * 16 + 01] = (3 * 16); palettes[ii].Offsets[6 * 16 + 02] = (3 * 16); palettes[ii].Offsets[6 * 16 + 03] = (3 * 16); palettes[ii].Offsets[6 * 16 + 04] = (3 * 16); palettes[ii].Offsets[6 * 16 + 05] = (3 * 16); // Ray palettes[ii].Offsets[7 * 16 + 00] = (5 * 16); palettes[ii].Offsets[7 * 16 + 01] = (5 * 16); palettes[ii].Offsets[7 * 16 + 02] = (5 * 16); palettes[ii].Offsets[7 * 16 + 03] = (5 * 16); palettes[ii].Offsets[7 * 16 + 04] = (5 * 16); palettes[ii].Offsets[7 * 16 + 05] = (5 * 16); } return(true); }