Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct CPVS
- {
- int[] Indices;
- byte[] Data;
- public int Length => Indices.Length - 1;
- public CPVS(BinaryReader reader)
- {
- if (reader.ReadUInt32() != 0x30535650 /*PVS0*/)
- {
- throw new Exception("Invalid Magic");
- }
- Indices = new int[reader.ReadUInt32()];
- Indices[0] = 0;
- for (int i = 1; i < Indices.Length; ++i)
- Indices[i] = reader.ReadInt32();
- Data = reader.ReadBytes((int) (reader.BaseStream.Length - reader.BaseStream.Position));
- }
- public byte[] Decompress(int index)
- {
- byte[] result = new byte[512];
- for (int input = Indices[index], output = 0; input < Indices[index + 1];)
- {
- byte size = Data[input++];
- if (size >= 128) // Copy
- {
- size -= 127;
- for (int j = 0; j < size; ++j)
- result[output++] = Data[input++];
- }
- else // Fill
- {
- byte value = Data[input++];
- for (int j = 0; j < size; ++j)
- result[output++] = value;
- }
- }
- return result;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement