mirror of
https://github.com/xprism1/ntool.git
synced 2025-06-19 06:15:37 -04:00
ntr_twl_srl: improve banner size calculation
This commit is contained in:
parent
7a9928b6e7
commit
5e78a74736
@ -365,14 +365,34 @@ class SRLReader:
|
|||||||
with open(file, 'rb') as f:
|
with open(file, 'rb') as f:
|
||||||
f.seek(self.hdr.banner_offset)
|
f.seek(self.hdr.banner_offset)
|
||||||
ver = readle(f.read(2))
|
ver = readle(f.read(2))
|
||||||
banner_sizes = { 0x0001: 0x0840,
|
|
||||||
0x0002: 0x0940,
|
calc_banner_size = False
|
||||||
0x0003: 0x1240,
|
banner_sizes = { 0x0001: 0x0840,
|
||||||
0x0103: 0x23C0 }
|
0x0002: 0x0940,
|
||||||
if self.hdr.unit_code == 0:
|
0x0003: 0x1240,
|
||||||
size = banner_sizes[ver]
|
0x0103: 0x23C0 }
|
||||||
elif self.hdr.unit_code == 2 or self.hdr.unit_code == 3:
|
if self.hdr.unit_code == 0:
|
||||||
size = self.hdr_ext.banner_size
|
if ver in banner_sizes.keys():
|
||||||
|
size = banner_sizes[ver]
|
||||||
|
if ver == 0x0003:
|
||||||
|
f.seek(self.hdr.banner_offset + size - 1)
|
||||||
|
if f.read(33) != b'\x00' + b'\xFF' * 32:
|
||||||
|
calc_banner_size = True
|
||||||
|
else:
|
||||||
|
calc_banner_size = True
|
||||||
|
elif self.hdr.unit_code == 2 or self.hdr.unit_code == 3:
|
||||||
|
size = self.hdr_ext.banner_size
|
||||||
|
|
||||||
|
# Calculate banner size manually (need to do this for some NTR games)
|
||||||
|
if calc_banner_size:
|
||||||
|
f.seek(self.hdr.banner_offset)
|
||||||
|
banner = f.read(0x1240)
|
||||||
|
off = banner[0x240:].find(b'\xFF' * 32) # Find the padding after the end of the banner
|
||||||
|
if off == -1: # Can't determine
|
||||||
|
size = 0x1240
|
||||||
|
else:
|
||||||
|
size = off + 0x240
|
||||||
|
|
||||||
files['banner.bin'] = {
|
files['banner.bin'] = {
|
||||||
'name': 'Banner',
|
'name': 'Banner',
|
||||||
'offset': self.hdr.banner_offset,
|
'offset': self.hdr.banner_offset,
|
||||||
|
Loading…
Reference in New Issue
Block a user