1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-05-10 19:13:42 +00:00
oot/tools/assets/extract/extase_oot64/misc_resources.py
2025-02-12 23:10:17 +01:00

51 lines
1.5 KiB
Python

from __future__ import annotations
import struct
from ..extase import (
RESOURCE_PARSE_SUCCESS,
File,
Resource,
)
from tools import csdis
class CutsceneResource(Resource, can_size_be_unknown=True):
def __init__(self, file: File, range_start: int, name: str):
super().__init__(file, range_start, None, name)
def try_parse_data(self, memory_context):
assert self.range_start % 4 == 0
data = self.file.data[self.range_start :]
num_bytes = len(data)
if num_bytes % 4 != 0:
data = data[: -(num_bytes % 4)]
data_words = [unpacked[0] for unpacked in struct.iter_unpack(">I", data)]
size_words, cs_source = csdis.disassemble_cutscene(data_words)
self.range_end = self.range_start + 4 * size_words
self.cs_source = cs_source
return RESOURCE_PARSE_SUCCESS
def get_c_reference(self, resource_offset: int):
if resource_offset == 0:
return self.symbol_name
else:
raise ValueError
extracted_path_suffix = ".inc.c"
def get_filename_stem(self):
return f"{self.name}.csdata"
def write_extracted(self, memory_context):
with self.extract_to_path.open("w") as f:
f.write('#include "z64cutscene_commands.h"\n')
if not self.braces_in_source:
f.write("{\n")
f.write(self.cs_source)
if not self.braces_in_source:
f.write("}\n")
def get_c_declaration_base(self):
return f"CutsceneData {self.symbol_name}[]"