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(); }
public TableEditorForm(ROMHandler.ROMHandler rom) { InitializeComponent(); ROM = rom; InitializeDataGridViews(); dgvEntranceTable.Select(); }
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))); }
public TitleCardForm(ROMHandler.ROMHandler rom, ROMHandler.SceneTableEntryOcarina ste) { InitializeComponent(); ROM = rom; Scene = ste; ofdImage.SetCommonImageFilter("png"); sfdImage.SetCommonImageFilter("png"); ReadImageFromROM(); }
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))); }
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>(); }
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); }
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))); }
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]; } }
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); }