Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import struct
- import gzip
- def ensure_dir(path_name):
- if not os.path.exists(path_name):
- os.makedirs(path_name)
- TOC = []
- with open('GAMEDATA.CFI', 'rb') as f:
- folders = ord(f.read(1))
- for folder in range(folders):
- size = ord(f.read(1))
- folder_name = f.read(size).decode('ascii')
- files = ord(f.read(1))
- if files == 0xFC:
- files = struct.unpack('<H', f.read(2))[0]
- for file in range(files):
- size = ord(f.read(1))
- file_name = f.read(size).decode('ascii')
- offset, size = struct.unpack('<II', f.read(8))
- TOC.append((folder_name, file_name, offset, size))
- base_pos = f.tell()
- for folder_name, file_name, offset, size in TOC:
- ensure_dir(folder_name)
- path = folder_name + file_name
- f.seek(base_pos + offset)
- with open(path, 'wb') as g:
- if file_name[-4:] in ('.txt', '.dat', '.PNG', '.sbk'):
- g.write(f.read(size))
- else:
- zsize = size - 4
- size = struct.unpack('<I', f.read(4))[0]
- g.write(gzip.decompress(f.read(zsize)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement