Example #1
0
        private void openROMToolStripMenuItem_Click(object sender, EventArgs e)
        {
            openFileDialog1.DefaultExt       = ".smc";
            openFileDialog1.DereferenceLinks = true;
            openFileDialog1.InitialDirectory = Path.GetDirectoryName(Program.args[0]);
            openFileDialog1.Multiselect      = false;
            openFileDialog1.Title            = "Open ROM";
            openFileDialog1.Filter           = "Common ROM Files (*.smc; *.sfc) | *.smc; *.sfc | All files (*.*) | *.*";
            openFileDialog1.ShowHelp         = true;
            openFileDialog1.FileName         = "SMW_U.smc";
            openFileDialog1.AddExtension     = true;
            openFileDialog1.CheckFileExists  = true;
            openFileDialog1.CheckPathExists  = true;
            openFileDialog1.RestoreDirectory = true;
            openFileDialog1.ShowDialog();
            RH = new ROMHandler(openFileDialog1.FileName);
            treeView1.CollapseAll();
            treeView1.Nodes.Clear();
            treeView1.Nodes.Add(RH.ROMName);

            ThreadStart threadStart = new ThreadStart(LoadTreeView);
            Thread      thread      = new Thread(threadStart);

            thread.Start();
        }
Example #2
0
        public TableEditorForm(ROMHandler.ROMHandler rom)
        {
            InitializeComponent();

            ROM = rom;

            InitializeDataGridViews();
            dgvEntranceTable.Select();
        }
Example #3
0
            public Entry(ROMHandler.ROMHandler rom, uint adr)
            {
                ROM = rom;
                Address = adr;

                byte[] segdata = (byte[])ROM.SegmentMapping[(byte)(adr >> 24)];
                if (segdata == null) return;

                Number = Endian.SwapUInt16(BitConverter.ToUInt16(segdata, (int)(adr & 0xFFFFFF)));
            }
Example #4
0
        public TitleCardForm(ROMHandler.ROMHandler rom, ROMHandler.SceneTableEntryOcarina ste)
        {
            InitializeComponent();

            ROM = rom;
            Scene = ste;

            ofdImage.SetCommonImageFilter("png");
            sfdImage.SetCommonImageFilter("png");

            ReadImageFromROM();
        }
Example #5
0
            public Entry(ROMHandler.ROMHandler rom, uint adr)
            {
                ROM = rom;
                Address = adr;

                byte[] segdata = (byte[])ROM.SegmentMapping[(byte)(adr >> 24)];
                if (segdata == null) return;

                adr &= 0xFFFFFF;

                AmbientColor = Color.FromArgb(segdata[adr], segdata[adr + 1], segdata[adr + 2]);
                Diffuse1Direction = new Vector4(((sbyte)segdata[adr + 3] / 255.0f), ((sbyte)segdata[adr + 4] / 255.0f), ((sbyte)segdata[adr + 5] / 255.0f), 0.0f);
                Diffuse1Color = Color.FromArgb(segdata[adr + 6], segdata[adr + 7], segdata[adr + 8]);
                Diffuse2Direction = new Vector4(((sbyte)segdata[adr + 9] / 255.0f), ((sbyte)segdata[adr + 10] / 255.0f), ((sbyte)segdata[adr + 11] / 255.0f), 0.0f);
                Diffuse2Color = Color.FromArgb(segdata[adr + 12], segdata[adr + 13], segdata[adr + 14]);
                FogColor = Color.FromArgb(segdata[adr + 15], segdata[adr + 16], segdata[adr + 17]);
                FogStart = (ushort)(Endian.SwapUInt16(BitConverter.ToUInt16(segdata, (int)(adr + 18))) & 0x3FF);
                DrawDistance = Endian.SwapUInt16(BitConverter.ToUInt16(segdata, (int)(adr + 20)));
            }
Example #6
0
        public MIPSEvaluator(ROMHandler.ROMHandler rom, ROMHandler.DMATableEntry dma, uint ramadr, RegisterHookDelegate reghook = null, ushort var = 0)
        {
            BaseAddress = ramadr;

            Registers = new uint[32];
            Stack = new uint[256 * MIPS.SafetyVal];
            StackPos = (int)(128 * MIPS.SafetyVal);

            Sections = new OvlSections(rom, dma, 0);

            MemoryMap = new List<MemoryRegion>();
            MemoryMap.Add(new MemoryRegion(Sections.text, ramadr + Sections.textVA));
            MemoryMap.Add(new MemoryRegion(Sections.data, ramadr + Sections.dataVA));
            MemoryMap.Add(new MemoryRegion(Sections.rodata, ramadr + Sections.rodataVA));
            MemoryMap.Add(new MemoryRegion(Sections.bss, ramadr + Sections.bssVA));

            RegisterHook = reghook;

            SpecialOps = new List<SpecialOp>();
            SpecialOps.Add(new SpecialOp(MIPS.LH((uint)MIPS.Register.R0, 0x1C, (uint)MIPS.Register.A0), MIPS.LH((uint)MIPS.Register.R0, 0x1C, (uint)MIPS.Register.A0), var));
            SpecialOps.Add(new SpecialOp(MIPS.LH((uint)MIPS.Register.R0, 0x1C, (uint)MIPS.Register.S0), MIPS.LH((uint)MIPS.Register.R0, 0x1C, (uint)MIPS.Register.A0), var));

            Watches = new List<uint>();
        }
Example #7
0
            public Waterbox(ROMHandler.ROMHandler rom, uint adr, int number, Collision colheader)
            {
                ROM = rom;
                Address = adr;
                Number = number;
                ParentCollisionHeader = colheader;

                byte[] segdata = (byte[])ROM.SegmentMapping[(byte)(adr >> 24)];
                if (segdata == null) return;

                Position = new Vector3d(
                    (double)Endian.SwapInt16(BitConverter.ToInt16(segdata, (int)(adr & 0xFFFFFF))),
                    (double)Endian.SwapInt16(BitConverter.ToInt16(segdata, (int)((adr & 0xFFFFFF) + 2))),
                    (double)Endian.SwapInt16(BitConverter.ToInt16(segdata, (int)((adr & 0xFFFFFF) + 4))));

                SizeXZ = new Vector2d(
                    (double)Endian.SwapInt16(BitConverter.ToInt16(segdata, (int)((adr & 0xFFFFFF) + 6))),
                    (double)Endian.SwapInt16(BitConverter.ToInt16(segdata, (int)((adr & 0xFFFFFF) + 8))));

                RoomPropRaw = (Endian.SwapUInt32(BitConverter.ToUInt32(segdata, (int)((adr & 0xFFFFFF) + 12))) & 0xFFFFFF);
            }
Example #8
0
            public PolygonType(ROMHandler.ROMHandler rom, uint adr, int number)
            {
                ROM = rom;
                Address = adr;
                Number = number;

                byte[] segdata = (byte[])ROM.SegmentMapping[(byte)(adr >> 24)];
                if (segdata == null) return;

                Raw = Endian.SwapUInt64(BitConverter.ToUInt64(segdata, (int)(adr & 0xFFFFFF)));
            }
Example #9
0
            public Polygon(ROMHandler.ROMHandler rom, uint adr, int number, Collision colheader)
            {
                ROM = rom;
                Address = adr;
                Number = number;
                ParentCollisionHeader = colheader;

                byte[] segdata = (byte[])ROM.SegmentMapping[(byte)(adr >> 24)];
                if (segdata == null) return;

                PolygonType = Endian.SwapUInt16(BitConverter.ToUInt16(segdata, (int)(adr & 0xFFFFFF)));
                NormalXDirection = Endian.SwapInt16(BitConverter.ToInt16(segdata, (int)(adr & 0xFFFFFF) + 0x8));
                NormalYDirection = Endian.SwapInt16(BitConverter.ToInt16(segdata, (int)(adr & 0xFFFFFF) + 0xA));
                NormalZDirection = Endian.SwapInt16(BitConverter.ToInt16(segdata, (int)(adr & 0xFFFFFF) + 0xC));
                CollisionPlaneDistFromOrigin = Endian.SwapInt16(BitConverter.ToInt16(segdata, (int)(adr & 0xFFFFFF) + 0xE));

                /* Read vertex IDs & fetch vertices */
                VertexIDs = new ushort[3];
                Vertices = new Vector3d[3];
                for (int i = 0; i < 3; i++)
                {
                    ushort vidx = (ushort)(Endian.SwapUInt16(BitConverter.ToUInt16(segdata, (int)(adr & 0xFFFFFF) + 0x2 + (i * 2))) & 0xFFF);
                    VertexIDs[i] = vidx;
                    Vertices[i] = ParentCollisionHeader.Vertices[vidx];
                }
            }
Example #10
0
            public OvlSections(ROMHandler.ROMHandler rom, ROMHandler.DMATableEntry dma, uint vstart)
            {
                byte[] ovl = new byte[dma.PEnd - dma.PStart];
                Buffer.BlockCopy(rom.Data, (int)dma.PStart, ovl, 0, ovl.Length);

                int indent, secaddr;
                indent = (int)Endian.SwapUInt32(BitConverter.ToUInt32(ovl, ovl.Length - 4));
                secaddr = (ovl.Length - indent);

                text = new byte[Endian.SwapUInt32(BitConverter.ToUInt32(ovl, secaddr))];
                textVA = vstart;
                Buffer.BlockCopy(ovl, (int)textVA, text, 0, text.Length);

                data = new byte[Endian.SwapUInt32(BitConverter.ToUInt32(ovl, secaddr + 4))];
                dataVA = (uint)(textVA + text.Length);
                Buffer.BlockCopy(ovl, (int)dataVA, data, 0, data.Length);

                rodata = new byte[Endian.SwapUInt32(BitConverter.ToUInt32(ovl, secaddr + 8))];
                rodataVA = (uint)(dataVA + data.Length);
                Buffer.BlockCopy(ovl, (int)rodataVA, rodata, 0, rodata.Length);

                bss = new byte[Endian.SwapUInt32(BitConverter.ToUInt32(ovl, secaddr + 12))];
                bssVA = (uint)(rodataVA + rodata.Length);
                Buffer.BlockCopy(ovl, (int)bssVA, bss, 0, bss.Length);
            }