Sacred 2: Fallen Angel

BLUS30312.savepatch

1. Decompress SAVE.DAT (Required)

Target File: SAVE.DAT

import uzlib
import apollo
zip_offset = uzlib.offzip(savedata, 15)
zip_id = {USERID}
unzip_data = uzlib.decompress(savedata[zip_offset[zip_id][0]:], 15)
print("Zip offset: 0x{:08X}".format(zip_offset[zip_id][0]))
print("Compressed size:", zip_offset[zip_id][1])
print("Decompressed size:", zip_offset[zip_id][2])
pos = apollo.search(unzip_data, b"\xFF\xFF\xAA\x07")
pos += apollo.search(unzip_data[pos:], b"\x00\x00\x00\x00\x40\x00") + 4
print("User Profile:", unzip_data[pos:pos+32].decode('utf-16'))

2. 32767 Skill Points

Target File: SAVE.DAT

import apollo
sw_code = """
80010004 FFFFAA07
18000008 00007FFF
"""
apollo.apply_savewizard(unzip_data, sw_code)

3. 32767 Attribute Points

Target File: SAVE.DAT

import apollo
sw_code = """
80010004 FFFFAA07
1800000A 00007FFF
"""
apollo.apply_savewizard(unzip_data, sw_code)

4. Lots of Gold

Target File: SAVE.DAT

import apollo
sw_code = """
80010004 FFFFAA07
2800019A 7FFFFFFF
"""
apollo.apply_savewizard(unzip_data, sw_code)

5. Lots of Kills Counts

Target File: SAVE.DAT

import apollo
sw_code = """
80010004 FFFFAA07
280001CC 7FFFFFFF
"""
apollo.apply_savewizard(unzip_data, sw_code)

6. Kill 1 to max out level

Target File: SAVE.DAT

import apollo
sw_code = """
80010004 FFFFAA07
2800000C 03B86412
"""
apollo.apply_savewizard(unzip_data, sw_code)

7. Easy Leveling

Target File: SAVE.DAT

import apollo
sw_code = """
80010004 FFFFAA07
08000005 00000001
2800000C 709E9CB7
"""
apollo.apply_savewizard(unzip_data, sw_code)

8. Compress SAVE.DAT (Required)

Target File: SAVE.DAT

import uzlib
print("Compressing bytes:", len(unzip_data))
print("Compress offset: 0x{:08X}".format(zip_offset[zip_id][0]))
print("Old compressed size:", zip_offset[zip_id][1])
savedata = uzlib.packzip(savedata, zip_offset[zip_id], unzip_data)
print("New compressed size:", zip_offset[zip_id][1])