Object reading improvements in utils

This commit is contained in:
aerinon
2021-02-24 13:29:10 -07:00
parent 90d45cc371
commit d14c9b5758

View File

@@ -459,7 +459,8 @@ def extract_data_from_us_rom(rom):
with open(rom, 'rb') as stream: with open(rom, 'rb') as stream:
rom_data = bytearray(stream.read()) rom_data = bytearray(stream.read())
rooms = [0x9a, 0x69, 0x78, 0x79, 0x7a, 0x88, 0x8a, 0xad] rooms = [0x1c, 0x1d, 0x4e]
# rooms = [0x9a, 0x69, 0x78, 0x79, 0x7a, 0x88, 0x8a, 0xad]
for room in rooms: for room in rooms:
b2idx = room*2 b2idx = room*2
b3idx = room*3 b3idx = room*3
@@ -470,11 +471,20 @@ def extract_data_from_us_rom(rom):
header.append(rom_data[headerloc+i]) header.append(rom_data[headerloc+i])
objectptr = 0xF8000 + b3idx objectptr = 0xF8000 + b3idx
objectloc = rom_data[objectptr] + rom_data[objectptr+1]*0x100 + rom_data[objectptr+2]*0x10000 objectloc = rom_data[objectptr] + rom_data[objectptr+1]*0x100 + rom_data[objectptr+2]*0x10000
objectloc -= 0x100000 bank = rom_data[objectptr+2]
even = bank % 2 == 0
adjustment = ((bank // 2 if even else bank // 2 + 1) << 16) + (0x8000 if even else 0)
objectloc -= adjustment
stop, idx = False, 0 stop, idx = False, 0
ffcnt = 0 ffcnt = 0
mode = 0 mode = 0
while ffcnt < 2: # first two bytes
b1 = rom_data[objectloc+idx]
b2 = rom_data[objectloc+idx+1]
objectdata.append(b1)
objectdata.append(b2)
idx += 2
while ffcnt < 3:
b1 = rom_data[objectloc+idx] b1 = rom_data[objectloc+idx]
b2 = rom_data[objectloc+idx+1] b2 = rom_data[objectloc+idx+1]
b3 = rom_data[objectloc+idx+2] b3 = rom_data[objectloc+idx+2]
@@ -483,9 +493,11 @@ def extract_data_from_us_rom(rom):
if b1 == 0xff and b2 == 0xff: if b1 == 0xff and b2 == 0xff:
ffcnt += 1 ffcnt += 1
mode = 0 mode = 0
if b1 == 0xf0 and b2 == 0xff: idx += 2
elif b1 == 0xf0 and b2 == 0xff:
mode = 1 mode = 1
if not mode and ffcnt < 2: idx += 2
elif not mode and ffcnt < 3:
objectdata.append(b3) objectdata.append(b3)
idx += 3 idx += 3
else: else:
@@ -573,8 +585,9 @@ def extract_data_from_jp_rom(rom):
with open(rom, 'rb') as stream: with open(rom, 'rb') as stream:
rom_data = bytearray(stream.read()) rom_data = bytearray(stream.read())
rooms = [0x1c, 0x1d, 0x4e]
# rooms = [0x7b, 0x7c, 0x7d, 0x8b, 0x8c, 0x8d, 0x9b, 0x9c, 0x9d] # rooms = [0x7b, 0x7c, 0x7d, 0x8b, 0x8c, 0x8d, 0x9b, 0x9c, 0x9d]
rooms = [0x1a, 0x2a, 0xd1] # rooms = [0x1a, 0x2a, 0xd1]
for room in rooms: for room in rooms:
b2idx = room*2 b2idx = room*2
b3idx = room*3 b3idx = room*3
@@ -585,11 +598,20 @@ def extract_data_from_jp_rom(rom):
header.append(rom_data[headerloc+i]) header.append(rom_data[headerloc+i])
objectptr = 0xF8000 + b3idx objectptr = 0xF8000 + b3idx
objectloc = rom_data[objectptr] + rom_data[objectptr+1]*0x100 + rom_data[objectptr+2]*0x10000 objectloc = rom_data[objectptr] + rom_data[objectptr+1]*0x100 + rom_data[objectptr+2]*0x10000
objectloc -= 0x100000 bank = rom_data[objectptr+2]
even = bank % 2 == 0
adjustment = ((bank // 2 if even else bank // 2 + 1) << 16) + (0x8000 if even else 0)
objectloc -= adjustment
stop, idx = False, 0 stop, idx = False, 0
ffcnt = 0 ffcnt = 0
mode = 0 mode = 0
while ffcnt < 2: # first two bytes
b1 = rom_data[objectloc+idx]
b2 = rom_data[objectloc+idx+1]
objectdata.append(b1)
objectdata.append(b2)
idx += 2
while ffcnt < 3:
b1 = rom_data[objectloc+idx] b1 = rom_data[objectloc+idx]
b2 = rom_data[objectloc+idx+1] b2 = rom_data[objectloc+idx+1]
b3 = rom_data[objectloc+idx+2] b3 = rom_data[objectloc+idx+2]
@@ -598,9 +620,11 @@ def extract_data_from_jp_rom(rom):
if b1 == 0xff and b2 == 0xff: if b1 == 0xff and b2 == 0xff:
ffcnt += 1 ffcnt += 1
mode = 0 mode = 0
if b1 == 0xf0 and b2 == 0xff: idx += 2
elif b1 == 0xf0 and b2 == 0xff:
mode = 1 mode = 1
if not mode and ffcnt < 2: idx += 2
elif not mode and ffcnt < 3:
objectdata.append(b3) objectdata.append(b3)
idx += 3 idx += 3
else: else: