public void ReadData(string filename) { using (FileStream file = new FileStream(filename, FileMode.Open, FileAccess.Read)) { byte[] magic = new byte[4]; file.Read(magic); if (Encoding.ASCII.GetString(magic) != "GTAR") { Console.WriteLine("Not a GTAR archive."); return; } uint tableCount = file.ReadUInt(); uint dataStart = file.ReadUInt(); uint unknown = file.ReadUInt(); var dataTableStreams = new MemoryStream[tableCount]; for (int i = 0; i < tableCount; i++) { file.Position = (i * 4) + 0x10; uint start = file.ReadUInt(); uint end = file.ReadUInt(); uint length = end - start; file.Position = start + dataStart; byte[] buffer = new byte[length]; file.Read(buffer); dataTableStreams[i] = new MemoryStream(buffer); } BrakeParts.Read(dataTableStreams[0]); BrakeBalanceControllerParts.Read(dataTableStreams[1]); SteeringParts.Read(dataTableStreams[2]); ChassisParts.Read(dataTableStreams[3]); WeightReductionParts.Read(dataTableStreams[4]); BodyParts.Read(dataTableStreams[5]); EngineParts.Read(dataTableStreams[6]); PortPolishingParts.Read(dataTableStreams[7]); EngineBalancingParts.Read(dataTableStreams[8]); DisplacementIncreaseParts.Read(dataTableStreams[9]); ComputerParts.Read(dataTableStreams[10]); NATuneParts.Read(dataTableStreams[11]); TurboKitParts.Read(dataTableStreams[12]); DrivetrainParts.Read(dataTableStreams[13]); FlywheelParts.Read(dataTableStreams[14]); ClutchParts.Read(dataTableStreams[15]); PropellerShaftParts.Read(dataTableStreams[16]); GearboxParts.Read(dataTableStreams[17]); SuspensionParts.Read(dataTableStreams[18]); IntercoolerParts.Read(dataTableStreams[19]); MufflerParts.Read(dataTableStreams[20]); LSDParts.Read(dataTableStreams[21]); TCSCParts.Read(dataTableStreams[22]); ASCCParts.Read(dataTableStreams[23]); WheelsParts.Read(dataTableStreams[24]); TyreSizeParts.Read(dataTableStreams[25]); TyreForceVolParts.Read(dataTableStreams[26]); TyreCompounds.Read(dataTableStreams[27]); TyresFrontParts.Read(dataTableStreams[28]); TyresRearParts.Read(dataTableStreams[29]); Opponents.Read(dataTableStreams[30]); Events.Read(dataTableStreams[31]); Regulations.Read(dataTableStreams[32]); Courses.Read(dataTableStreams[33]); ArcadeCars.Read(dataTableStreams[34]); Cars.Read(dataTableStreams[35]); foreach (var stream in dataTableStreams) { stream.Dispose(); } } }