public TrifanSet ParseTrifanSet(bool doTaggedRecord, uint trifanCount, TrifanType triType, int?dungeonUnk3) { TrifanSet set = new TrifanSet(); // trifan count & data set.TrifanCount = trifanCount; set.TrifanData = new TrifanInfo[set.TrifanCount]; //int hasFlagFourCount = 0; // amount of trifans with flag bit 0x04 set for (int i = 0; i < set.TrifanCount; i++) { set.TrifanData[i] = ParseTrifanInfo(); //if ((set.TrifanData[i].Flags & 0x04) == 0x04) //{ // hasFlagFourCount++; //} } if (m_sourceFile.Position % 4 != 0) { //Debugger.Break(); } if (m_sourceFile.DatType != DatType.Portal_ToD) { m_sourceFile.AlignToDwordBoundary(); } if (dungeonUnk3.HasValue) { int skipCount = dungeonUnk3.Value * sizeof(UInt16); m_sourceFile.Skip(skipCount); m_sourceFile.AlignToDwordBoundary(); } //ushort[] UnkShorts = new ushort[hasFlagFourCount]; //if (hasFlagFourCount > 0) //{ // for (int i = 0; i < UnkShorts.Length; i++) // { // UnkShorts[i] = m_sourceFile.ReadUInt16(); // } //} //else //{ // uint unkUint32 = m_sourceFile.ReadUInt32(); // should be 0x00 // if (unkUint32 != 0x00) // { // Debugger.Break(); // } //} if (doTaggedRecord) { set.BP = ParseTaggedRecord(triType); } return(set); }
public TrifanSet ParseTrifanSet(bool doTaggedRecord, uint trifanCount, TrifanType triType) { return(ParseTrifanSet(doTaggedRecord, trifanCount, triType, null)); }
// node list: // // 0x4250464C BPFL // 0x4250494E BPIN // 0x4250496E BPIn // 0x42504F4C BPOL // 0x42506E4E BPnN // 0x42506E6E BPnn // 0x4270494E BpIN // 0x4270496E BpIn // 0x4C454146 LEAF // 0x504f5254 PORT public BP ParseTaggedRecord(TrifanType triType) { int num; //depth++; uint bpType = m_sourceFile.ReadUInt32(); switch (bpType) { case 0x42506e4e: case 0x4250494e: m_sourceFile.Skip(16); ParseTaggedRecord(triType); ParseTaggedRecord(triType); break; case 0x42506e6e: case 0x4250496e: case 0x4270494e: case 0x42706e4e: m_sourceFile.Skip(16); ParseTaggedRecord(triType); break; case 0x4c454146: uint unkFlag = m_sourceFile.ReadUInt32(); if (triType != TrifanType.T1) { return(null); } m_sourceFile.Skip(20); num = m_sourceFile.ReadInt32(); m_sourceFile.Skip(num * 2); if (m_sourceFile.DatType == DatType.Portal_ToD) { //if (unkFlag == 0x01) //{ // m_sourceFile.Skip(4 * sizeof(uint)); //} } else { m_sourceFile.AlignToDwordBoundary(); } return(null); case 0x504f5254: { m_sourceFile.Skip(16); ParseTaggedRecord(triType); ParseTaggedRecord(triType); //if ((triType == TrifanType.T1) || (triType == TrifanType.T2)) { m_sourceFile.Skip(16); } num = m_sourceFile.ReadInt32(); int num2 = m_sourceFile.ReadInt32(); m_sourceFile.Skip((num * 2) + (num2 * 4)); m_sourceFile.AlignToDwordBoundary(); return(null); } case 0x42504f4c: case 0x4270496e: case 0x4250464c: { m_sourceFile.Skip(16); break; } default: { m_sourceFile.Skip(16); break; } } if ((triType == TrifanType.T0) || (triType == TrifanType.T1)) { m_sourceFile.Skip(16); } if (triType == TrifanType.T0) { num = m_sourceFile.ReadInt32(); m_sourceFile.Skip(num * 2); } if (m_sourceFile.DatType != DatType.Portal_ToD) { m_sourceFile.AlignToDwordBoundary(); } return(null); }