mirror of
https://github.com/NinjaCheetah/libWiiPy.git
synced 2025-04-26 13:21:01 -04:00
WAD extraction now works for all non-vWii WADs!
This commit is contained in:
parent
9598d6d434
commit
0cb37487b6
@ -0,0 +1,22 @@
|
|||||||
|
# "shared.py" from libWiiPy by NinjaCheetah & Contributors
|
||||||
|
# https://github.com/NinjaCheetah/libWiiPy
|
||||||
|
|
||||||
|
def align_value(value, alignment=64):
|
||||||
|
"""Aligns the provided value to the set alignment (defaults to 64).
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
value : int
|
||||||
|
The value to align.
|
||||||
|
alignment : int
|
||||||
|
The number to align to. Defaults to 64.
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
int
|
||||||
|
The aligned value.
|
||||||
|
"""
|
||||||
|
if (value % alignment) != 0:
|
||||||
|
aligned_value = value + (alignment - (value % alignment))
|
||||||
|
return aligned_value
|
||||||
|
return value
|
@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
import io
|
import io
|
||||||
import binascii
|
import binascii
|
||||||
|
from .shared import align_value
|
||||||
|
|
||||||
|
|
||||||
class WAD:
|
class WAD:
|
||||||
@ -64,7 +65,7 @@ class WAD:
|
|||||||
# WAD content size.
|
# WAD content size.
|
||||||
wad_data.seek(0x18)
|
wad_data.seek(0x18)
|
||||||
self.wad_content_size = int(binascii.hexlify(wad_data.read(4)), 16)
|
self.wad_content_size = int(binascii.hexlify(wad_data.read(4)), 16)
|
||||||
# Publisher of the title contained in the WAD.
|
# Time/build stamp for the title contained in the WAD.
|
||||||
wad_data.seek(0x1c)
|
wad_data.seek(0x1c)
|
||||||
self.wad_meta_size = int(binascii.hexlify(wad_data.read(4)), 16)
|
self.wad_meta_size = int(binascii.hexlify(wad_data.read(4)), 16)
|
||||||
# ====================================================================================
|
# ====================================================================================
|
||||||
@ -72,12 +73,12 @@ class WAD:
|
|||||||
# ====================================================================================
|
# ====================================================================================
|
||||||
self.wad_cert_offset = self.wad_hdr_size
|
self.wad_cert_offset = self.wad_hdr_size
|
||||||
# crl isn't ever used, however an entry for its size exists in the header, so its calculated just in case.
|
# crl isn't ever used, however an entry for its size exists in the header, so its calculated just in case.
|
||||||
self.wad_crl_offset = int(64 * round((self.wad_cert_offset + self.wad_cert_size) / 64))
|
self.wad_crl_offset = align_value(self.wad_cert_offset + self.wad_cert_size)
|
||||||
self.wad_tik_offset = int(64 * round((self.wad_crl_offset + self.wad_crl_size) / 64))
|
self.wad_tik_offset = align_value(self.wad_crl_offset + self.wad_crl_size)
|
||||||
self.wad_tmd_offset = int(64 * round((self.wad_tik_offset + self.wad_tik_size) / 64))
|
self.wad_tmd_offset = align_value(self.wad_tik_offset + self.wad_tik_size)
|
||||||
self.wad_content_offset = int(64 * round((self.wad_tmd_offset + self.wad_tmd_size) / 64))
|
# meta isn't guaranteed to be used, but some older SDK titles use it, and not reading it breaks things.
|
||||||
# meta is also never used, but Nintendo's tools calculate it, so we should too.
|
self.wad_meta_offset = align_value(self.wad_tmd_offset + self.wad_tmd_size)
|
||||||
self.wad_meta_offset = int(64 * round((self.wad_content_offset + self.wad_content_size) / 64))
|
self.wad_content_offset = align_value(self.wad_meta_offset + self.wad_meta_size)
|
||||||
|
|
||||||
def get_cert_region(self):
|
def get_cert_region(self):
|
||||||
"""Gets the offset and size of the certificate data.
|
"""Gets the offset and size of the certificate data.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user