Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- #-------------------------------------------------------------------------------
- # Decompression routine for Vigilante 8.
- def dec(data):
- out = bytearray()
- ring = bytearray(0x800)
- src = iter(data[8:])
- sz = int.from_bytes(data[4:8], 'little')
- rp = 0
- c = next(src) | 0x100
- while len(out) < sz:
- if c > 0xFFFF:
- c = next(src) | 0x100
- if c & 0x80:
- out.append(next(src))
- ring[rp] = out[-1]
- rp += 1
- rp &= 0x7FF
- else:
- p = next(src)
- p |= next(src) << 8
- l = (p & 0x1F) + 2
- p >>= 5
- for i in range(p, p+l):
- out.append(ring[i & 0x7FF])
- ring[rp] = out[-1]
- rp += 1
- rp &= 0x7FF
- c <<= 1
- return bytes(out)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement