// fixup serialization/deserialization: // language strings should be properties; resolve to actual string only when called public CaesarContainer(byte[] fileBytes) { Stopwatch sw = new Stopwatch(); sw.Start(); FileBytes = fileBytes; // work from int __cdecl DIIAddCBFFile(char *fileName) using (BinaryReader reader = new BinaryReader(new MemoryStream(fileBytes, 0, fileBytes.Length, false, true))) { byte[] header = reader.ReadBytes(StubHeader.StubHeaderSize); StubHeader.ReadHeader(header); int cffHeaderSize = reader.ReadInt32(); byte[] cffHeaderData = reader.ReadBytes(cffHeaderSize); // expensive, probably an impediment for modders // VerifyChecksum(fileBytes, out uint checksum); FileChecksum = ReadFileChecksum(fileBytes); ReadCFFDefinition(reader); // language is the highest priority since all our strings come from it ReadCTF(reader); ReadECU(reader); } sw.Stop(); #if DEBUG Console.WriteLine($"Loaded {CaesarECUs[0].Qualifier} in {sw.ElapsedMilliseconds}ms"); #endif }
public CaesarContainer(byte[] fileBytes) { FileBytes = fileBytes; // work from int __cdecl DIIAddCBFFile(char *fileName) using (BinaryReader reader = new BinaryReader(new MemoryStream(fileBytes))) { byte[] header = reader.ReadBytes(StubHeader.StubHeaderSize); StubHeader.ReadHeader(header); int cffHeaderSize = reader.ReadInt32(); byte[] cffHeaderData = reader.ReadBytes(cffHeaderSize); VerifyChecksum(fileBytes, out uint checksum); FileChecksum = checksum; ReadCFFDefinition(reader); // language is the highest priority since all our strings come from it ReadCTF(reader); ReadECU(reader); } }