Add ability to extract joint enums from bmd/bdl files (#2704)

* arc extraction will auto-create resource files

* Update enum extraction to extract joint enums

* Update enum extraction to use pathlib

* Move enum extraction to converters folder

* Added check to extract bmd file if src file is modded
This commit is contained in:
roeming
2025-09-27 18:30:13 -04:00
committed by GitHub
parent 6242aa6e84
commit 3f37bad921
3 changed files with 325 additions and 167 deletions
+61
View File
@@ -0,0 +1,61 @@
import os
import struct
from typing import BinaryIO
def skip_bytes(binary_file:BinaryIO, byte_count:int) -> None:
binary_file.seek(byte_count, os.SEEK_CUR)
def read_s8(binary_file: BinaryIO)-> int:
chunk = binary_file.read(1)
if len(chunk) < 1:
raise EOFError()
return struct.unpack(">b", chunk)[0]
def read_s16(binary_file: BinaryIO) -> int:
chunk = binary_file.read(2)
if len(chunk) < 2:
raise EOFError()
return struct.unpack(">h", chunk)[0]
def read_s32(binary_file: BinaryIO) -> int:
chunk = binary_file.read(4)
if len(chunk) < 4:
raise EOFError()
return struct.unpack(">i", chunk)[0]
def read_u8(binary_file: BinaryIO) -> int:
chunk = binary_file.read(1)
if len(chunk) < 1:
raise EOFError()
return struct.unpack(">B", chunk)[0]
def read_u16(binary_file: BinaryIO) -> int:
chunk = binary_file.read(2)
if len(chunk) < 2:
raise EOFError()
return struct.unpack(">H", chunk)[0]
def read_u32(binary_file: BinaryIO) -> int:
chunk = binary_file.read(4)
if len(chunk) < 4:
raise EOFError()
return struct.unpack(">I", chunk)[0]
def read_f32(binary_file: BinaryIO) -> int:
chunk = binary_file.read(4)
if len(chunk) < 4:
raise EOFError()
return struct.unpack(">f", chunk)[0]
def read_bytes_until_null(binary_file: BinaryIO) -> bytes:
begin = binary_file.tell()
while True:
b = binary_file.read(1)
if len(b) == 0:
raise EOFError()
if b[0] == 0:
break
str_length = binary_file.tell() - begin - 1
binary_file.seek(begin)
return binary_file.read(str_length)