mirror of
https://github.com/NinjaCheetah/libWiiPy.git
synced 2025-04-26 05:11:02 -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 binascii
|
||||
from .shared import align_value
|
||||
|
||||
|
||||
class WAD:
|
||||
@ -64,7 +65,7 @@ class WAD:
|
||||
# WAD content size.
|
||||
wad_data.seek(0x18)
|
||||
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)
|
||||
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
|
||||
# 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_tik_offset = int(64 * round((self.wad_crl_offset + self.wad_crl_size) / 64))
|
||||
self.wad_tmd_offset = int(64 * round((self.wad_tik_offset + self.wad_tik_size) / 64))
|
||||
self.wad_content_offset = int(64 * round((self.wad_tmd_offset + self.wad_tmd_size) / 64))
|
||||
# meta is also never used, but Nintendo's tools calculate it, so we should too.
|
||||
self.wad_meta_offset = int(64 * round((self.wad_content_offset + self.wad_content_size) / 64))
|
||||
self.wad_crl_offset = align_value(self.wad_cert_offset + self.wad_cert_size)
|
||||
self.wad_tik_offset = align_value(self.wad_crl_offset + self.wad_crl_size)
|
||||
self.wad_tmd_offset = align_value(self.wad_tik_offset + self.wad_tik_size)
|
||||
# meta isn't guaranteed to be used, but some older SDK titles use it, and not reading it breaks things.
|
||||
self.wad_meta_offset = align_value(self.wad_tmd_offset + self.wad_tmd_size)
|
||||
self.wad_content_offset = align_value(self.wad_meta_offset + self.wad_meta_size)
|
||||
|
||||
def get_cert_region(self):
|
||||
"""Gets the offset and size of the certificate data.
|
||||
|
Loading…
x
Reference in New Issue
Block a user