mirror of
https://github.com/notwa/mm
synced 2024-05-19 05:33:22 -07:00
handle owl save sizes properly
This commit is contained in:
parent
7758bed4ac
commit
e823103995
48
chksum.py
48
chksum.py
|
@ -7,20 +7,20 @@ from util import R2, W2, swap_order
|
||||||
|
|
||||||
lament = lambda *args, **kwargs: print(*args, file=sys.stderr, **kwargs)
|
lament = lambda *args, **kwargs: print(*args, file=sys.stderr, **kwargs)
|
||||||
|
|
||||||
save_1 = 0x20800
|
MAX16 = 0xFFFF
|
||||||
save_2 = 0x24800
|
|
||||||
owl_1 = 0x28800
|
|
||||||
owl_2 = 0x30800
|
|
||||||
save_1_copy = 0x22800
|
|
||||||
save_2_copy = 0x26800
|
|
||||||
owl_1_copy = 0x2C800
|
|
||||||
owl_2_copy = 0x34800
|
|
||||||
|
|
||||||
chksum_offset = 0x100A
|
chksum_offset = 0x100A
|
||||||
save_size = 0x2000
|
save_size = 0x2000
|
||||||
owl_size = 0x4000
|
owl_size = 0x4000
|
||||||
|
|
||||||
MAX16 = 0xFFFF
|
save_1 = (0x20800, save_size)
|
||||||
|
save_2 = (0x24800, save_size)
|
||||||
|
owl_1 = (0x28800, owl_size)
|
||||||
|
owl_2 = (0x30800, owl_size)
|
||||||
|
save_1_copy = (0x22800, save_size)
|
||||||
|
save_2_copy = (0x26800, save_size)
|
||||||
|
owl_1_copy = (0x2C800, owl_size)
|
||||||
|
owl_2_copy = (0x34800, owl_size)
|
||||||
|
|
||||||
def calc_sum(data):
|
def calc_sum(data):
|
||||||
chksum = 0
|
chksum = 0
|
||||||
|
@ -29,32 +29,30 @@ def calc_sum(data):
|
||||||
chksum &= MAX16
|
chksum &= MAX16
|
||||||
return chksum
|
return chksum
|
||||||
|
|
||||||
def fix_sum(f, addr, owl=False):
|
def fix_sum(f, save, owl=False):
|
||||||
f.seek(addr)
|
f.seek(save[0])
|
||||||
data = f.read(save_size)
|
data = f.read(save[1])
|
||||||
chksum = calc_sum(data[:chksum_offset])
|
chksum = calc_sum(data[:chksum_offset])
|
||||||
|
|
||||||
if owl and data != b'\x00'*save_size:
|
if owl and data != b'\x00'*len(data):
|
||||||
chksum += 0x24 # don't know why
|
chksum += 0x24 # don't know why
|
||||||
chksum &= MAX16
|
chksum &= MAX16
|
||||||
|
|
||||||
f.seek(addr + chksum_offset)
|
f.seek(save[0] + chksum_offset)
|
||||||
old_chksum = R2(f.read(2))
|
old_chksum = R2(f.read(2))
|
||||||
f.seek(addr + chksum_offset)
|
f.seek(save[0] + chksum_offset)
|
||||||
f.write(W2(chksum))
|
f.write(W2(chksum))
|
||||||
lament('{:04X} -> {:04X}'.format(old_chksum, chksum))
|
lament('{:04X} -> {:04X}'.format(old_chksum, chksum))
|
||||||
|
|
||||||
def copy_save(f, addr, addr2):
|
def copy_save(f, save_from, save_to):
|
||||||
f.seek(addr)
|
f.seek(save_from[0])
|
||||||
# TODO: handle owl size properly
|
data = f.read(save_from[1])
|
||||||
data = f.read(save_size)
|
f.seek(save_to[0])
|
||||||
f.seek(addr2)
|
f.write(data[:save_to[1]])
|
||||||
f.write(data)
|
|
||||||
|
|
||||||
def delete_save(f, addr):
|
def delete_save(f, save):
|
||||||
f.seek(addr)
|
f.seek(save[0])
|
||||||
# TODO: handle owl size properly
|
f.write(b'\x00'*save[1])
|
||||||
f.write(b'\x00'*save_size)
|
|
||||||
|
|
||||||
def run(args):
|
def run(args):
|
||||||
for fn in args:
|
for fn in args:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user