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);
        }
示例#2
0
        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();
        }
示例#3
0
        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;
        }