Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import struct
- from itertools import zip_longest
- from functools import partial
- def grouper(iterable, n, fillvalue=None):
- args = [iter(iterable)] * n
- return zip_longest(*args, fillvalue=fillvalue)
- with open('SCENE00.AFS', 'rb') as f:
- f.seek(4)
- num_of_files = struct.unpack('<I', f.read(4))[0]
- TOC = (struct.unpack('<' + 'I' * 2 * num_of_files,
- f.read(8 * num_of_files)))
- TOC_pos, TOC_size = struct.unpack('<II', f.read(8))
- filenames = []
- f.seek(TOC_pos)
- for x in range(num_of_files):
- s = b''
- pos = f.tell()
- for byte in iter(partial(f.read, 1), b'\x00'):
- s += byte
- filenames.append(s)
- f.seek(pos + 0x30)
- for filename, (fileoffset, filesize) in zip(filenames, grouper(TOC, 2)):
- f.seek(fileoffset)
- with open(filename, 'wb') as g:
- g.write(f.read(filesize))
Add Comment
Please, Sign In to add comment