public Track(EndianBinaryReader er, int Id) { er.BaseStream.Position = TrackHeaderAddress + Id * 0x30; Header = new TrackHeader(er); er.BaseStream.Position = Header.DLOffset; DL = MIO0.Decompress(er.ReadBytes((int)(Header.DLEnd - Header.DLOffset))); er.BaseStream.Position = Header.TrackDataOffset; byte[] VtxData = MIO0.Decompress(er.ReadBytes((int)(Header.VertexDataMIO0Length & 0xFFFFFF))); VertexData = new VertexDataEntry[Header.VertexDataNrEntries]; for (int i = 0; i < Header.VertexDataNrEntries; i++) { VertexData[i] = new VertexDataEntry(VtxData, i * 0xE); } LevelScript = er.ReadBytes((int)(Header.TrackDataEnd - Header.TrackDataOffset - (Header.VertexDataMIO0Length & 0xFFFFFF))); er.BaseStream.Position = Header.TexTableOffset; List <TexTableEntry> texes = new List <TexTableEntry>(); while (true) { var v = new TexTableEntry(er); if (v.GPUTexAddress == 0) { break; } texes.Add(v); } TexTable = texes.ToArray(); }
public TexTableEntry(EndianBinaryReader er) { GPUTexAddress = er.ReadUInt32(); CompressedSize = er.ReadUInt32(); DecompressedSize = er.ReadUInt32(); Unknown2 = er.ReadUInt32(); if (GPUTexAddress == 0) { return; } long curpos = er.BaseStream.Position; er.BaseStream.Position = TexBaseAddress + (GPUTexAddress & 0xFFFFFF); TexData = MIO0.Decompress(er.ReadBytes((int)CompressedSize)); er.BaseStream.Position = curpos; }