public FilesystemBrowser(byte[] _romBytes) { InitializeComponent(); var fs = new DW3Editor.GameClasses.FileSystem(_romBytes); foreach (var fr in fs.FileRecords) { ListViewItem lvi = new ListViewItem(); lvi.Text = string.Format("${0:X3}", fr.GlobalFileID); var props = new string[] { string.Format("${0:X2}", fr.Bank), string.Format("${0:X2}", fr.LocalFileID), string.Format("${0:X4}", fr.LocalOffset), string.Format("${0:X6}", fr.RomAddress), string.Format("${0:X4}", fr.SuspectedLength), fr.Name }; lvi.SubItems.AddRange(props); lvGlobalFiles.Items.Add(lvi); } lvGlobalFiles.AutoResizeColumn(5, ColumnHeaderAutoResizeStyle.HeaderSize); lvGlobalFiles.AutoResizeColumn(6, ColumnHeaderAutoResizeStyle.ColumnContent); }
public MapViewer(byte[] _romBytes) { romBytes = _romBytes; InitializeComponent(); pictureBox1.InterpolationMode = InterpolationMode.NearestNeighbor; //populate a quick reference for debugging MapStates var fs = new DW3Editor.GameClasses.FileSystem(romBytes); var fr = fs.FileRecords[0x1E]; for (int i = 0; i < 256; i++) { var br = new BinaryReader(new MemoryStream(romBytes)); br.BaseStream.Position = fr.RomAddress; int mapDirectoryPointer = br.ReadUInt16(); br.BaseStream.Position = Form1.Address(7, mapDirectoryPointer - 0x8000) + 3 * i; int mdecPtr = br.ReadUInt16(); int tilesetNumber = br.ReadByte(); int bank = 6; if (tilesetNumber >= 0x0C) { bank = 7; } br.BaseStream.Position = Form1.Address(bank, mdecPtr - 0x8000); int mapWidth = br.ReadByte(); int mapheight = br.ReadByte(); int stuff = br.ReadByte(); listBox1.Items.Add(string.Format("{0} (${1:X2}) ts:${2:X2} {3:X2}:{4:X4} {5}x{6} [{7:X2}]", i, i, tilesetNumber, bank, mdecPtr, mapWidth, mapheight, stuff)); } listBox1.SelectedIndex = 0; RefreshViewer(); }
void RefreshViewer() { int targetMapState = (int)listBox1.SelectedIndex; //read the MapDirectory entry var fs = new DW3Editor.GameClasses.FileSystem(romBytes); var fr = fs.FileRecords[0x1E]; var br = new BinaryReader(new MemoryStream(romBytes)); br.BaseStream.Position = fr.RomAddress; int mapDirectoryPointer = br.ReadUInt16(); br.BaseStream.Position = Form1.Address(7, mapDirectoryPointer - 0x8000) + 3 * targetMapState; int mdecPtr = br.ReadUInt16(); int tilesetNumber = br.ReadByte(); //dummied out map if (mdecPtr == 0) { pictureBox1.Image = new Bitmap(1, 1); return; } int bank = 6; if (tilesetNumber >= 0x0C) { bank = 7; } var mdec = new GameClasses.Mdec(romBytes, Form1.Address(bank, mdecPtr - 0x8000)); //turn into a bitmap and pop open a test viewer var bmp = new Bitmap(mdec.width, mdec.height); for (int y = 0; y < mdec.height; y++) { for (int x = 0; x < mdec.width; x++) { bmp.SetPixel(x, y, TestColors[mdec.Map[x, y] % TestColors.Length]); } } pictureBox1.Image = bmp; pictureBox1.ClientSize = new Size(mdec.width * 4, mdec.height * 4); pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; }