private void ReadChunks(Stream s)
{
try
{
DebugLog.PrintLn("Reading Chunks...");
for (int i = 0; i < Header.Chunks.Count; i++)
{
if(verbose)
DebugLog.PrintLn("Reading Chunk(" + i + ") Header...");
CompressedChunk c = Header.Chunks[i];
s.Seek(c.CompOffset, 0);
c.Magic = ReadUInt(s);
if (c.Magic != 0x9E2A83C1)
throw new Exception("Not a valid Chunkheader, wrong magic!(#" + i + ")");
c.BlockSize = ReadUInt(s);
ReadUInt(s);
ReadUInt(s);
uint count = (c.UnCompSize + c.BlockSize - 1) / c.BlockSize;
c.Blocks = new List<CompressedChunkBlock>();
if (verbose)
DebugLog.PrintLn("Reading Chunk(" + i + ") Blocks...");
for (int j = 0; j < count; j++)
{
CompressedChunkBlock b = new CompressedChunkBlock();
b.CompSize = ReadUInt(s);
b.UnCompSize = ReadUInt(s);
b.loaded = false;
c.Blocks.Add(b);
}
Header.Chunks[i] = c;
}
if (Header.Chunks.Count != 0)
{
uint FullSize = Header.Chunks[Header.Chunks.Count - 1].UnCompOffset + Header.Chunks[Header.Chunks.Count - 1].UnCompSize;
Header.DeCompBuffer = new MemoryStream(new byte[FullSize]);
Header.DeCompBuffer.Seek(0, 0);
Source.Seek(0, 0);
byte[]buff = new byte[Header._offsetCompFlagEnd];
Source.Read(buff, 0, (int)Header._offsetCompFlagEnd);
Header.DeCompBuffer.Write(buff, 0, (int)Header._offsetCompFlagEnd);
Header.DeCompBuffer.Write(BitConverter.GetBytes(0), 0, 4);
Header.DeCompBuffer.Write(BitConverter.GetBytes(Header.unk7), 0, 4);
Header.DeCompBuffer.Write(BitConverter.GetBytes(Header.unk8), 0, 4);
Header.DeCompBuffer.Seek(Header._offsetFlag, 0);
uint newFlags = (Header.Flags ^ 0x02000000);
Header.DeCompBuffer.Write(BitConverter.GetBytes(newFlags), 0, 4);
}
}
catch (Exception ex)
{
DebugLog.PrintLn("PCCPACKAGE::READCHUNKS ERROR:\n" + ex.Message);
}
}
private void ReadNameTable()