import struct
import zlib
# w tym samym katalogu musi być plik SAV
plik = open('baldur.sav', 'rb')
try:
tekst = plik.read()
finally:
plik.close()
# dane zaczynają się od:
a = 0x0004 + 4
# aż dojedziemy do końca pliku dekompresujemy wszystko:
while a < len(tekst):
lenght = struct.unpack('i', tekst[a:a+4])[0]
print 'Długość pliku: ' + str(lenght)
# nazwa pliku jest zmienna
filename = str(tekst[a+4:a+16])
# dzielimy nazwę na 2 części, kropka jest dzielnikiem
file_name = filename.split('.')
# ext to rozszerzenie ze śmieciami
ext = file_name[1]
# usuwamy śmiecie czytając tylko 3 pierwsze znaki :)
file_name = file_name[0] +'.'+ ext[0:3]
print 'Nazwa Pliku: ' + file_name
decomp_size = struct.unpack('i', tekst[a+0x0004+lenght:a+0x0004+lenght+4])[0]
print 'Rozmiar po rozpakowaniu: ' + str(decomp_size)
comp_size = struct.unpack('i', tekst[a+0x0008+lenght:a+0x0008+lenght+4])[0]
print 'Rozmiar skompresowanego pliku: ' + str(comp_size)
if decomp_size != 0:
code = tekst[a+0x000c+lenght:a+0x000c+lenght+comp_size]
open(file_name, 'wb').write(zlib.decompress(code))
print 'Dane zapisane jako ' + file_name
a = a+0x000c+lenght+comp_size
print "----------------------------"