private static void CheckTextureInfo(DatReader reader, uint id) { EmbeddedFile textureFile = reader.LocateFile(id); Debug.Assert((id & 0xFF000000) == 0x08000000 && textureFile != null); try { textureFile.PrepareFileForReading(); // first dword is the ID uint textureId = textureFile.ReadUInt32(); Debug.Assert(textureId == id); uint textureType = textureFile.ReadUInt32(); switch (textureType) { case 0x01: uint unk01_01 = textureFile.ReadUInt32(); uint unk01_02 = textureFile.ReadUInt32(); Debug.Assert(unk01_02 == 0x00); break; default: return; //case 0x02: // uint textureNumber02 = textureFile.ReadUInt32(); // uint paletteNumber02 = textureFile.ReadUInt32(); // uint unk02_01 = textureFile.ReadUInt32(); // Debug.Assert((textureNumber02 & 0xFF000000) == 0x05000000); // Debug.Assert(paletteNumber02 == 0x00 || (paletteNumber02 & 0xF000000) == 0x04000000); // Debug.Assert(unk02_01 == 0x00); // break; //case 0x04: // uint textureNumber04 = textureFile.ReadUInt32(); // uint paletteNumber04 = textureFile.ReadUInt32(); // uint unk04_01 = textureFile.ReadUInt32(); // Debug.Assert((textureNumber04 & 0xFF000000) == 0x05000000); // Debug.Assert(paletteNumber04 == 0x00 || (paletteNumber04 & 0xFF000000) == 0x04000000); // Debug.Assert(unk04_01 == 0x00); // break; //case 0x11: // uint unk11_01 = textureFile.ReadUInt32(); // uint unk11_02 = textureFile.ReadUInt32(); // //Debug.Assert(unk11_02 == 0x3F800000); // break; } // read closing bytes.. uint unknown1 = textureFile.ReadUInt32(); uint unknown2 = textureFile.ReadUInt32(); Debug.Assert(unknown1 == 0x00 || unknown1 == 0x3F800000); Debug.Assert(unknown2 == 0x3F800000); } finally { textureFile.FileReadingComplete(); } }
/// <summary> /// Loads the decoration /// </summary> private void LoadDecoration() { // if we're dealing with texture info if ((m_id & 0xFF000000) == 0x08000000) { EmbeddedFile sourceFile = DataProvider.Instance.PortalDatReader.LocateFile(m_id); try { sourceFile.PrepareFileForReading(); // determine the type of texture information if (sourceFile.DatType != DatType.Portal_ToD) { uint fileId = sourceFile.ReadUInt32(); Debug.Assert(fileId == m_id); } m_typeFlag = sourceFile.ReadUInt32(); switch (m_typeFlag) { case 0x01: uint solidColor = sourceFile.ReadUInt32(); uint unk01_02 = sourceFile.ReadUInt32(); Debug.Assert(unk01_02 == 0x00); LoadAsSolidColor(solidColor); break; case 0x02: case 0x04: uint textureNumber = sourceFile.ReadUInt32(); uint paletteNumber = sourceFile.ReadUInt32(); uint unk_01 = sourceFile.ReadUInt32(); Debug.Assert((textureNumber & 0xFF000000) == 0x05000000); Debug.Assert(paletteNumber == 0x00 || (paletteNumber & 0xFF000000) == 0x04000000); Debug.Assert(unk_01 == 0x00); LoadAsTexture(textureNumber, (paletteNumber != 0x00 ? (uint?)paletteNumber : null)); break; case 0x11: case 0x12: case 0x14: m_decorationType = DecorationType.Unknown; break; default: throw new NotImplementedException(); } } finally { sourceFile.FileReadingComplete(); } } else { throw new NotImplementedException(); } }
private void DumpMesh(uint id) { EmbeddedFile file = DataProvider.Instance.PortalDatReader.LocateFile(id); ComplexMesh mesh = new ComplexMesh(file); mesh.ReadComplexMesh(); try { file.PrepareFileForReading(); rtbMeshDump.Clear(); rtbMeshDump.AppendText(String.Format("Flags: 0x{1:X2} Count: {2}{0}{0}", Environment.NewLine, mesh.Flags, mesh.SimpleMeshCount)); WriteLineNumber(0, 0); for (int i = 0; i < file.m_debugData.Length; i++) { if (i != 0 && i % 8 == 0) { // line break; rtbMeshDump.AppendText(Environment.NewLine); WriteLineNumber(i / 8, i * 4); } rtbMeshDump.AppendText(String.Format("{0:X8} ", file.m_debugData[i])); } rtbMeshDump.AppendText(String.Format("{0}{0}", Environment.NewLine)); WriteLineNumber(0, 0); for (int i = 0; i < file.m_debugDataFloats.Length; i++) { if (i != 0 && i % 8 == 0) { // line break; rtbMeshDump.AppendText(Environment.NewLine); WriteLineNumber(i / 8, i * 4); } rtbMeshDump.AppendText(String.Format("{0,8:0.00000} ", file.m_debugDataFloats[i])); } } finally { file.FileReadingComplete(); } }
private void DumpMesh(uint id) { EmbeddedFile file = DataProvider.Instance.PortalDatReader.LocateFile(id); DungeonBlock block = new DungeonBlock(file); block.ReadDungeonBlock(); try { file.PrepareFileForReading(); rtbMeshDump.Clear(); rtbMeshDump.AppendText(String.Format("Flags: 0x{1:X2} Count: {2}{0}{0}", Environment.NewLine, block.Flags, block.VertexCount)); WriteLineNumber(0, 0); for (int i = 0; i < file.m_debugData.Length; i++) { if (i != 0 && i % 8 == 0) { // line break; rtbMeshDump.AppendText(Environment.NewLine); WriteLineNumber(i / 8, i * 4); } rtbMeshDump.AppendText(String.Format("{0:X8} ", file.m_debugData[i])); } rtbMeshDump.AppendText(String.Format("{0}{0}", Environment.NewLine)); WriteLineNumber(0, 0); string textBuffer = "\t"; for (int i = 0; i < file.FileData.Length; i++) { if (i != 0 && i % 28 == 0) { // line break; rtbMeshDump.AppendText(textBuffer); rtbMeshDump.AppendText(Environment.NewLine); WriteLineNumber(i / 28, i); textBuffer = "\t"; } else if (i != 0 && i % 2 == 0) { rtbMeshDump.AppendText(" "); } rtbMeshDump.AppendText(String.Format("{0:X2}", file.FileData[i])); textBuffer += GetDisplayChar((char)file.FileData[i]); } rtbMeshDump.AppendText(String.Format("{0}{0}", Environment.NewLine)); WriteLineNumber(0, 0); for (int i = 0; i < file.m_debugDataFloats.Length; i++) { if (i != 0 && i % 8 == 0) { // line break; rtbMeshDump.AppendText(Environment.NewLine); WriteLineNumber(i / 8, i * 4); } string val = file.m_debugDataFloats[i].ToString("0.000000"); if (val.Length > 8) { val = val.Substring(0, 8); } rtbMeshDump.AppendText(String.Format("{0,8} ", val)); } } finally { file.FileReadingComplete(); } }