private unsafe void Thread_Start() { string path = Engine.FileManager.BasePath(string.Format("Data/QuickLoad/Anim{0}.mul", this.m_Index)); string str2 = Engine.FileManager.ResolveMUL(string.Format("Anim{0}.mul", (this.m_Index == 1) ? "" : this.m_Index.ToString())); string str3 = Engine.FileManager.ResolveMUL(string.Format("Anim{0}.idx", (this.m_Index == 1) ? "" : this.m_Index.ToString())); if (!File.Exists(str2) || !File.Exists(str3)) { if (this.m_Index == 1) { this.m_Owner.m_Index = new Entry3D[0]; this.m_Owner.m_Count = 0; } else if (this.m_Index == 2) { this.m_Owner.m_Index2 = new Entry3D[0]; this.m_Owner.m_Count2 = 0; } else if (this.m_Index == 3) { this.m_Owner.m_Index3 = new Entry3D[0]; this.m_Owner.m_Count3 = 0; } else { this.m_Owner.m_Index4 = new Entry3D[0]; this.m_Owner.m_Count4 = 0; } } else { if (File.Exists(path)) { using (FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read)) { if (stream.Length >= 0x15L) { BinaryReader reader = new BinaryReader(stream); if (reader.ReadBoolean()) { DateTime timeStamp = Engine.GetTimeStamp(str2); DateTime time2 = Engine.GetTimeStamp(str3); DateTime time3 = DateTime.FromFileTime(reader.ReadInt64()); DateTime time4 = DateTime.FromFileTime(reader.ReadInt64()); if ((timeStamp == time3) && (time2 == time4)) { int num = reader.ReadInt32(); if (reader.BaseStream.Length >= (0x15 + (num * 12))) { Entry3D[] entrydArray = new Entry3D[num]; entrydArray = new Entry3D[num]; fixed(Entry3D *entrydRef = entrydArray) { Engine.NativeRead((FileStream)reader.BaseStream, (void *)entrydRef, num * 12); } if (this.m_Index == 1) { this.m_Owner.m_Index = entrydArray; this.m_Owner.m_Count = num; } else if (this.m_Index == 2) { this.m_Owner.m_Index2 = entrydArray; this.m_Owner.m_Count2 = num; } else if (this.m_Index == 3) { this.m_Owner.m_Index3 = entrydArray; this.m_Owner.m_Count3 = num; } else { this.m_Owner.m_Index4 = entrydArray; this.m_Owner.m_Count4 = num; } return; } } } } } } using (FileStream stream2 = new FileStream(str3, FileMode.Open, FileAccess.Read, FileShare.Read)) { int num2 = (int)(stream2.Length / 12L); Entry3D[] entrydArray2 = new Entry3D[num2]; fixed(Entry3D *entrydRef2 = entrydArray2) { Engine.NativeRead(stream2, (void *)entrydRef2, num2 * 12); using (FileStream stream3 = new FileStream(str2, FileMode.Open, FileAccess.Read, FileShare.Read)) { BinaryReader reader2 = new BinaryReader(stream3); Entry3D * entrydPtr = entrydRef2; Entry3D * entrydPtr2 = entrydRef2 + num2; while (entrydPtr < entrydPtr2) { if (entrydPtr->m_Lookup >= 0) { reader2.BaseStream.Seek((long)(entrydPtr->m_Lookup + 0x200), SeekOrigin.Begin); int num3 = reader2.ReadInt32() & 0xff; int num4 = 0; int num5 = -10000; while (num4 < num3) { reader2.BaseStream.Seek((long)((entrydPtr->m_Lookup + 0x204) + (num4 << 2)), SeekOrigin.Begin); reader2.BaseStream.Seek((long)((entrydPtr->m_Lookup + 0x202) + reader2.ReadInt32()), SeekOrigin.Begin); int num6 = reader2.ReadInt16(); int num7 = reader2.ReadInt32() >> 0x10; if ((num7 + num6) > num5) { num5 = num7 + num6; } num4++; } entrydPtr->m_Extra = num3 | (num5 << 8); } entrydPtr++; } } using (FileStream stream4 = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None)) { BinaryWriter writer = new BinaryWriter(stream4); writer.Write(false); writer.Write(Engine.GetTimeStamp(str2).ToFileTime()); writer.Write(Engine.GetTimeStamp(str3).ToFileTime()); writer.Write(num2); Engine.NativeWrite((FileStream)writer.BaseStream, (void *)entrydRef2, num2 * 12); writer.Seek(0, SeekOrigin.Begin); writer.Write(true); } } if (this.m_Index == 1) { this.m_Owner.m_Index = entrydArray2; this.m_Owner.m_Count = num2; } else if (this.m_Index == 2) { this.m_Owner.m_Index2 = entrydArray2; this.m_Owner.m_Count2 = num2; } else if (this.m_Index == 3) { this.m_Owner.m_Index3 = entrydArray2; this.m_Owner.m_Count3 = num2; } else { this.m_Owner.m_Index4 = entrydArray2; this.m_Owner.m_Count4 = num2; } } } }