mirror of
https://github.com/zeldaret/oot.git
synced 2025-08-24 16:01:26 +00:00
refactor CDataExt.set_write callback args to use a dataclass
This commit is contained in:
parent
8e5e543731
commit
6e9b4d1a59
12 changed files with 215 additions and 202 deletions
|
@ -1,5 +1,5 @@
|
||||||
from __future__ import annotations
|
|
||||||
import abc
|
import abc
|
||||||
|
import dataclasses
|
||||||
import io
|
import io
|
||||||
from typing import TYPE_CHECKING, Callable, Any, Sequence, Union
|
from typing import TYPE_CHECKING, Callable, Any, Sequence, Union
|
||||||
|
|
||||||
|
@ -21,6 +21,12 @@ from .repr_c_struct import (
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@dataclasses.dataclass
|
||||||
|
class CDataExtWriteContext:
|
||||||
|
f: io.TextIOBase
|
||||||
|
line_prefix: str
|
||||||
|
|
||||||
|
|
||||||
class CDataExt(CData, abc.ABC):
|
class CDataExt(CData, abc.ABC):
|
||||||
|
|
||||||
report_f = None
|
report_f = None
|
||||||
|
@ -37,7 +43,7 @@ class CDataExt(CData, abc.ABC):
|
||||||
def set_write(
|
def set_write(
|
||||||
self,
|
self,
|
||||||
write_f: Callable[
|
write_f: Callable[
|
||||||
["CDataResource", "MemoryContext", Any, io.TextIOBase, str],
|
["CDataResource", "MemoryContext", Any, CDataExtWriteContext],
|
||||||
bool,
|
bool,
|
||||||
],
|
],
|
||||||
):
|
):
|
||||||
|
@ -88,7 +94,9 @@ class CDataExt(CData, abc.ABC):
|
||||||
(typically, False will be returned if this data is struct padding)
|
(typically, False will be returned if this data is struct padding)
|
||||||
"""
|
"""
|
||||||
if self.write_f:
|
if self.write_f:
|
||||||
ret = self.write_f(resource, memory_context, v, f, line_prefix)
|
ret = self.write_f(
|
||||||
|
resource, memory_context, v, CDataExtWriteContext(f, line_prefix)
|
||||||
|
)
|
||||||
# This assert is meant to ensure the function returns a value at all,
|
# This assert is meant to ensure the function returns a value at all,
|
||||||
# since it's easy to forget to return a value (typically True)
|
# since it's easy to forget to return a value (typically True)
|
||||||
assert isinstance(ret, bool), ("must return a bool", self.write_f)
|
assert isinstance(ret, bool), ("must return a bool", self.write_f)
|
||||||
|
@ -116,11 +124,10 @@ class CDataExt_Value(CData_Value, CDataExt):
|
||||||
resource: "CDataResource",
|
resource: "CDataResource",
|
||||||
memory_context: "MemoryContext",
|
memory_context: "MemoryContext",
|
||||||
v: Any,
|
v: Any,
|
||||||
f: io.TextIOBase,
|
wctx: CDataExtWriteContext,
|
||||||
line_prefix: str,
|
|
||||||
):
|
):
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(str_v(v))
|
wctx.f.write(str_v(v))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
self.set_write(write_f)
|
self.set_write(write_f)
|
||||||
|
@ -395,6 +402,7 @@ class S16ArrayResource(CDataResource):
|
||||||
else:
|
else:
|
||||||
raise ValueError()
|
raise ValueError()
|
||||||
|
|
||||||
|
|
||||||
cdata_ext_Vec3f = CDataExt_Struct(
|
cdata_ext_Vec3f = CDataExt_Struct(
|
||||||
(
|
(
|
||||||
("x", CDataExt_Value.f32),
|
("x", CDataExt_Value.f32),
|
||||||
|
|
|
@ -15,13 +15,14 @@ from ..extase.cdata_resources import (
|
||||||
CDataExt_Value,
|
CDataExt_Value,
|
||||||
CDataExt_Struct,
|
CDataExt_Struct,
|
||||||
CDataExt_Array,
|
CDataExt_Array,
|
||||||
|
CDataExtWriteContext,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class AnimationFrameDataResource(CDataResource, can_size_be_unknown=True):
|
class AnimationFrameDataResource(CDataResource, can_size_be_unknown=True):
|
||||||
def write_binang(resource, memory_context, v, f: io.TextIOBase, line_prefix):
|
def write_binang(resource, memory_context, v, wctx:CDataExtWriteContext):
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(f" 0x{v:04X}" if v >= 0 else "-0x" + f"{v:04X}".removeprefix("-"))
|
wctx.f.write(f" 0x{v:04X}" if v >= 0 else "-0x" + f"{v:04X}".removeprefix("-"))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
elem_cdata_ext = CDataExt_Value("h").set_write(write_binang)
|
elem_cdata_ext = CDataExt_Value("h").set_write(write_binang)
|
||||||
|
@ -81,21 +82,21 @@ class AnimationJointIndicesResource(CDataResource, can_size_be_unknown=True):
|
||||||
|
|
||||||
class AnimationResource(CDataResource):
|
class AnimationResource(CDataResource):
|
||||||
def write_frameData(
|
def write_frameData(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
address = v
|
address = v
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(memory_context.get_c_reference_at_segmented(address))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def write_jointIndices(
|
def write_jointIndices(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
address = v
|
address = v
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(memory_context.get_c_reference_at_segmented(address))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
cdata_ext = CDataExt_Struct(
|
cdata_ext = CDataExt_Struct(
|
||||||
|
|
|
@ -17,6 +17,7 @@ from ..extase.cdata_resources import (
|
||||||
CDataExt_Struct,
|
CDataExt_Struct,
|
||||||
CDataExt_Array,
|
CDataExt_Array,
|
||||||
CDataExt_Value,
|
CDataExt_Value,
|
||||||
|
CDataExtWriteContext,
|
||||||
cdata_ext_Vec3s,
|
cdata_ext_Vec3s,
|
||||||
INDENT,
|
INDENT,
|
||||||
)
|
)
|
||||||
|
@ -60,13 +61,13 @@ class CollisionPolyListResource(CDataResource):
|
||||||
resource: "CollisionPolyListResource",
|
resource: "CollisionPolyListResource",
|
||||||
memory_context: "MemoryContext",
|
memory_context: "MemoryContext",
|
||||||
v,
|
v,
|
||||||
f: io.TextIOBase,
|
wctx: CDataExtWriteContext,
|
||||||
line_prefix,
|
|
||||||
):
|
):
|
||||||
assert isinstance(v, list)
|
assert isinstance(v, list)
|
||||||
assert len(v) == 3
|
assert len(v) == 3
|
||||||
vtxData = v
|
vtxData = v
|
||||||
f.write(line_prefix)
|
f = wctx.f
|
||||||
|
f.write(wctx.line_prefix)
|
||||||
f.write("{\n")
|
f.write("{\n")
|
||||||
for i in range(3):
|
for i in range(3):
|
||||||
vI = vtxData[i]
|
vI = vtxData[i]
|
||||||
|
@ -93,10 +94,10 @@ class CollisionPolyListResource(CDataResource):
|
||||||
flags_str = " | ".join(flags_str_list)
|
flags_str = " | ".join(flags_str_list)
|
||||||
else:
|
else:
|
||||||
flags_str = "0"
|
flags_str = "0"
|
||||||
f.write(line_prefix)
|
f.write(wctx.line_prefix)
|
||||||
f.write(INDENT)
|
f.write(INDENT)
|
||||||
f.write(f"{vtxId} | (({flags_str}) << 13), // {i}\n")
|
f.write(f"{vtxId} | (({flags_str}) << 13), // {i}\n")
|
||||||
f.write(line_prefix)
|
f.write(wctx.line_prefix)
|
||||||
f.write("}")
|
f.write("}")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@ -104,13 +105,12 @@ class CollisionPolyListResource(CDataResource):
|
||||||
resource: "CollisionPolyListResource",
|
resource: "CollisionPolyListResource",
|
||||||
memory_context: "MemoryContext",
|
memory_context: "MemoryContext",
|
||||||
v,
|
v,
|
||||||
f: io.TextIOBase,
|
wctx: CDataExtWriteContext,
|
||||||
line_prefix,
|
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
nf = v / 0x7FFF
|
nf = v / 0x7FFF
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(f"COLPOLY_SNORMAL({nf})")
|
wctx.f.write(f"COLPOLY_SNORMAL({nf})")
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@ -166,13 +166,13 @@ class CollisionSurfaceTypeListResource(CDataResource):
|
||||||
resource: "CollisionSurfaceTypeListResource",
|
resource: "CollisionSurfaceTypeListResource",
|
||||||
memory_context: "MemoryContext",
|
memory_context: "MemoryContext",
|
||||||
v,
|
v,
|
||||||
f: io.TextIOBase,
|
wctx: CDataExtWriteContext,
|
||||||
line_prefix,
|
|
||||||
):
|
):
|
||||||
assert isinstance(v, list)
|
assert isinstance(v, list)
|
||||||
assert len(v) == 2
|
assert len(v) == 2
|
||||||
|
f = wctx.f
|
||||||
|
|
||||||
f.write(line_prefix)
|
f.write(wctx.line_prefix)
|
||||||
f.write("{\n")
|
f.write("{\n")
|
||||||
|
|
||||||
for i_data, bitfield_info in (
|
for i_data, bitfield_info in (
|
||||||
|
@ -206,7 +206,7 @@ class CollisionSurfaceTypeListResource(CDataResource):
|
||||||
|
|
||||||
data_val = v[i_data]
|
data_val = v[i_data]
|
||||||
|
|
||||||
f.write(line_prefix)
|
f.write(wctx.line_prefix)
|
||||||
f.write(INDENT)
|
f.write(INDENT)
|
||||||
f.write("(\n")
|
f.write("(\n")
|
||||||
|
|
||||||
|
@ -214,7 +214,7 @@ class CollisionSurfaceTypeListResource(CDataResource):
|
||||||
for mask, shift, name in bitfield_info:
|
for mask, shift, name in bitfield_info:
|
||||||
val = (data_val & mask) >> shift
|
val = (data_val & mask) >> shift
|
||||||
|
|
||||||
f.write(line_prefix)
|
f.write(wctx.line_prefix)
|
||||||
f.write(INDENT * 2)
|
f.write(INDENT * 2)
|
||||||
if has_prev:
|
if has_prev:
|
||||||
f.write("| ")
|
f.write("| ")
|
||||||
|
@ -225,11 +225,11 @@ class CollisionSurfaceTypeListResource(CDataResource):
|
||||||
|
|
||||||
has_prev = True
|
has_prev = True
|
||||||
|
|
||||||
f.write(line_prefix)
|
f.write(wctx.line_prefix)
|
||||||
f.write(INDENT)
|
f.write(INDENT)
|
||||||
f.write(f"), // {i_data}\n")
|
f.write(f"), // {i_data}\n")
|
||||||
|
|
||||||
f.write(line_prefix)
|
f.write(wctx.line_prefix)
|
||||||
f.write("}")
|
f.write("}")
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
@ -294,16 +294,15 @@ class CollisionBgCamListResource(CDataResource):
|
||||||
resource: "CollisionSurfaceTypeListResource",
|
resource: "CollisionSurfaceTypeListResource",
|
||||||
memory_context: "MemoryContext",
|
memory_context: "MemoryContext",
|
||||||
v,
|
v,
|
||||||
f: io.TextIOBase,
|
wctx: CDataExtWriteContext,
|
||||||
line_prefix,
|
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
address = v
|
address = v
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
if address != 0:
|
if address != 0:
|
||||||
f.write(memory_context.get_c_reference_at_segmented(address))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
|
||||||
else:
|
else:
|
||||||
f.write("NULL")
|
wctx.f.write("NULL")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
cdata_ext_elem = CDataExt_Struct(
|
cdata_ext_elem = CDataExt_Struct(
|
||||||
|
@ -428,11 +427,10 @@ class CollisionResource(CDataResource):
|
||||||
resource: "CollisionResource",
|
resource: "CollisionResource",
|
||||||
memory_context: "MemoryContext",
|
memory_context: "MemoryContext",
|
||||||
v,
|
v,
|
||||||
f: io.TextIOBase,
|
wctx: CDataExtWriteContext,
|
||||||
line_prefix,
|
|
||||||
):
|
):
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(
|
wctx.f.write(
|
||||||
memory_context.get_c_expression_length_at_segmented(
|
memory_context.get_c_expression_length_at_segmented(
|
||||||
resource.cdata_unpacked["vtxList"]
|
resource.cdata_unpacked["vtxList"]
|
||||||
)
|
)
|
||||||
|
@ -463,23 +461,21 @@ class CollisionResource(CDataResource):
|
||||||
resource: "CollisionResource",
|
resource: "CollisionResource",
|
||||||
memory_context: "MemoryContext",
|
memory_context: "MemoryContext",
|
||||||
v,
|
v,
|
||||||
f: io.TextIOBase,
|
wctx: CDataExtWriteContext,
|
||||||
line_prefix,
|
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(memory_context.get_c_reference_at_segmented(v))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(v))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def write_numPolygons(
|
def write_numPolygons(
|
||||||
resource: "CollisionResource",
|
resource: "CollisionResource",
|
||||||
memory_context: "MemoryContext",
|
memory_context: "MemoryContext",
|
||||||
v,
|
v,
|
||||||
f: io.TextIOBase,
|
wctx: CDataExtWriteContext,
|
||||||
line_prefix,
|
|
||||||
):
|
):
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(
|
wctx.f.write(
|
||||||
memory_context.get_c_expression_length_at_segmented(
|
memory_context.get_c_expression_length_at_segmented(
|
||||||
resource.cdata_unpacked["polyList"]
|
resource.cdata_unpacked["polyList"]
|
||||||
)
|
)
|
||||||
|
@ -510,32 +506,30 @@ class CollisionResource(CDataResource):
|
||||||
resource: "CollisionResource",
|
resource: "CollisionResource",
|
||||||
memory_context: "MemoryContext",
|
memory_context: "MemoryContext",
|
||||||
v,
|
v,
|
||||||
f: io.TextIOBase,
|
wctx: CDataExtWriteContext,
|
||||||
line_prefix,
|
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
address = v
|
address = v
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(memory_context.get_c_reference_at_segmented(address))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def write_numWaterBoxes(
|
def write_numWaterBoxes(
|
||||||
resource: "CollisionResource",
|
resource: "CollisionResource",
|
||||||
memory_context: "MemoryContext",
|
memory_context: "MemoryContext",
|
||||||
v,
|
v,
|
||||||
f: io.TextIOBase,
|
wctx: CDataExtWriteContext,
|
||||||
line_prefix,
|
|
||||||
):
|
):
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
length = resource.cdata_unpacked["numWaterBoxes"]
|
length = resource.cdata_unpacked["numWaterBoxes"]
|
||||||
if length != 0:
|
if length != 0:
|
||||||
f.write(
|
wctx.f.write(
|
||||||
memory_context.get_c_expression_length_at_segmented(
|
memory_context.get_c_expression_length_at_segmented(
|
||||||
resource.cdata_unpacked["waterBoxes"]
|
resource.cdata_unpacked["waterBoxes"]
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
f.write("0")
|
wctx.f.write("0")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def report_waterBoxes(
|
def report_waterBoxes(
|
||||||
|
@ -565,36 +559,34 @@ class CollisionResource(CDataResource):
|
||||||
resource: "CollisionResource",
|
resource: "CollisionResource",
|
||||||
memory_context: "MemoryContext",
|
memory_context: "MemoryContext",
|
||||||
v,
|
v,
|
||||||
f: io.TextIOBase,
|
wctx: CDataExtWriteContext,
|
||||||
line_prefix,
|
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(memory_context.get_c_reference_at_segmented(v))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(v))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def write_bgCamList(
|
def write_bgCamList(
|
||||||
resource: "CollisionResource",
|
resource: "CollisionResource",
|
||||||
memory_context: "MemoryContext",
|
memory_context: "MemoryContext",
|
||||||
v,
|
v,
|
||||||
f: io.TextIOBase,
|
wctx: CDataExtWriteContext,
|
||||||
line_prefix,
|
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(memory_context.get_c_reference_at_segmented(v))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(v))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def write_waterBoxes(
|
def write_waterBoxes(
|
||||||
resource: "CollisionResource",
|
resource: "CollisionResource",
|
||||||
memory_context: "MemoryContext",
|
memory_context: "MemoryContext",
|
||||||
v,
|
v,
|
||||||
f: io.TextIOBase,
|
wctx: CDataExtWriteContext,
|
||||||
line_prefix,
|
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
length = resource.cdata_unpacked["numWaterBoxes"]
|
length = resource.cdata_unpacked["numWaterBoxes"]
|
||||||
f.write(line_prefix)
|
f = wctx.f
|
||||||
|
f.write(wctx.line_prefix)
|
||||||
if length != 0:
|
if length != 0:
|
||||||
f.write(memory_context.get_c_reference_at_segmented(v))
|
f.write(memory_context.get_c_reference_at_segmented(v))
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -27,6 +27,7 @@ from ..extase.cdata_resources import (
|
||||||
CDataExt_Array,
|
CDataExt_Array,
|
||||||
CDataExt_Struct,
|
CDataExt_Struct,
|
||||||
CDataExt_Value,
|
CDataExt_Value,
|
||||||
|
CDataExtWriteContext,
|
||||||
INDENT,
|
INDENT,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -38,19 +39,21 @@ VERBOSE_BEST_EFFORT_TLUT_NO_REAL_USER = True
|
||||||
|
|
||||||
|
|
||||||
class MtxResource(CDataResource):
|
class MtxResource(CDataResource):
|
||||||
def write_mtx(resource, memory_context, v, f: io.TextIOBase, line_prefix):
|
|
||||||
|
def write_mtx(resource, memory_context, v, wctx: CDataExtWriteContext):
|
||||||
assert isinstance(v, dict)
|
assert isinstance(v, dict)
|
||||||
assert v.keys() == {"intPart", "fracPart"}
|
assert v.keys() == {"intPart", "fracPart"}
|
||||||
intPart = v["intPart"]
|
intPart = v["intPart"]
|
||||||
fracPart = v["fracPart"]
|
fracPart = v["fracPart"]
|
||||||
|
|
||||||
f.write(line_prefix)
|
f = wctx.f
|
||||||
|
f.write(wctx.line_prefix)
|
||||||
f.write("gdSPDefMtx(\n")
|
f.write("gdSPDefMtx(\n")
|
||||||
|
|
||||||
for i in range(4):
|
for i in range(4):
|
||||||
if i != 0:
|
if i != 0:
|
||||||
f.write(",\n")
|
f.write(",\n")
|
||||||
f.write(line_prefix + INDENT)
|
f.write(wctx.line_prefix + INDENT)
|
||||||
|
|
||||||
for j in range(4):
|
for j in range(4):
|
||||||
# #define IPART(x) (((s32)((x) * 0x10000) >> 16) & 0xFFFF)
|
# #define IPART(x) (((s32)((x) * 0x10000) >> 16) & 0xFFFF)
|
||||||
|
@ -75,7 +78,7 @@ class MtxResource(CDataResource):
|
||||||
f.write(f"{x}f")
|
f.write(f"{x}f")
|
||||||
f.write("\n")
|
f.write("\n")
|
||||||
|
|
||||||
f.write(line_prefix)
|
f.write(wctx.line_prefix)
|
||||||
f.write(")")
|
f.write(")")
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
@ -98,10 +101,10 @@ class MtxResource(CDataResource):
|
||||||
|
|
||||||
|
|
||||||
class VtxArrayResource(CDataResource):
|
class VtxArrayResource(CDataResource):
|
||||||
def write_elem(resource, memory_context, v, f: io.TextIOBase, line_prefix):
|
def write_elem(resource, memory_context, v, wctx: CDataExtWriteContext):
|
||||||
assert isinstance(v, dict)
|
assert isinstance(v, dict)
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(
|
wctx.f.write(
|
||||||
f"VTX({v['x']:6}, {v['y']:6}, {v['z']:6}, "
|
f"VTX({v['x']:6}, {v['y']:6}, {v['z']:6}, "
|
||||||
f"{v['s']:#7X}, {v['t']:#7X}, "
|
f"{v['s']:#7X}, {v['t']:#7X}, "
|
||||||
f"{v['crnx']:#04X}, {v['cgny']:#04X}, {v['cbnz']:#04X}, {v['a']:#04X})"
|
f"{v['crnx']:#04X}, {v['cgny']:#04X}, {v['cbnz']:#04X}, {v['a']:#04X})"
|
||||||
|
@ -1464,16 +1467,15 @@ def write_gfx_segmented(
|
||||||
resource: Resource,
|
resource: Resource,
|
||||||
memory_context: "MemoryContext",
|
memory_context: "MemoryContext",
|
||||||
v,
|
v,
|
||||||
f: io.TextIOBase,
|
wctx:CDataExtWriteContext,
|
||||||
line_prefix: str,
|
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
address = v
|
address = v
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
if address == 0:
|
if address == 0:
|
||||||
f.write("NULL")
|
wctx.f.write("NULL")
|
||||||
else:
|
else:
|
||||||
f.write(memory_context.get_c_reference_at_segmented(address))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
import io
|
|
||||||
|
|
||||||
from ..extase import MemoryContext
|
from ..extase import MemoryContext
|
||||||
|
|
||||||
from ..extase.cdata_resources import (
|
from ..extase.cdata_resources import (
|
||||||
|
@ -10,6 +8,7 @@ from ..extase.cdata_resources import (
|
||||||
CDataArrayResource,
|
CDataArrayResource,
|
||||||
CDataExt_Struct,
|
CDataExt_Struct,
|
||||||
CDataExt_Value,
|
CDataExt_Value,
|
||||||
|
CDataExtWriteContext,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -49,12 +48,12 @@ class PlayerAnimationResource(CDataResource):
|
||||||
player_animation_data_res.set_frame_count(v["common"]["frameCount"])
|
player_animation_data_res.set_frame_count(v["common"]["frameCount"])
|
||||||
|
|
||||||
def write_frameCount(
|
def write_frameCount(
|
||||||
resource, memory_context: "MemoryContext", v, f: "io.TextIOBase", line_prefix
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
address = resource.cdata_unpacked["segment"]
|
address = resource.cdata_unpacked["segment"]
|
||||||
assert isinstance(address, int)
|
assert isinstance(address, int)
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(
|
wctx.f.write(
|
||||||
memory_context.resolve_segmented(address)
|
memory_context.resolve_segmented(address)
|
||||||
.get_resource(PlayerAnimationDataResource)
|
.get_resource(PlayerAnimationDataResource)
|
||||||
.frame_count_name
|
.frame_count_name
|
||||||
|
@ -62,12 +61,12 @@ class PlayerAnimationResource(CDataResource):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def write_segment(
|
def write_segment(
|
||||||
resource, memory_context: "MemoryContext", v, f: "io.TextIOBase", line_prefix
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
address = v
|
address = v
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(memory_context.get_c_reference_at_segmented(address))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
cdata_ext = CDataExt_Struct(
|
cdata_ext = CDataExt_Struct(
|
||||||
|
|
|
@ -20,6 +20,7 @@ from ..extase.cdata_resources import (
|
||||||
CDataArrayNamedLengthResource,
|
CDataArrayNamedLengthResource,
|
||||||
CDataExt_Struct,
|
CDataExt_Struct,
|
||||||
CDataExt_Value,
|
CDataExt_Value,
|
||||||
|
CDataExtWriteContext,
|
||||||
cdata_ext_Vec3s,
|
cdata_ext_Vec3s,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -114,12 +115,12 @@ class RoomShapeNormalEntryArrayResource(CDataArrayNamedLengthResource):
|
||||||
|
|
||||||
class RoomShapeNormalResource(CDataResource):
|
class RoomShapeNormalResource(CDataResource):
|
||||||
def write_numEntries(
|
def write_numEntries(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix: str
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
address = resource.cdata_unpacked["entries"]
|
address = resource.cdata_unpacked["entries"]
|
||||||
assert isinstance(address, int)
|
assert isinstance(address, int)
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(memory_context.get_c_expression_length_at_segmented(address))
|
wctx.f.write(memory_context.get_c_expression_length_at_segmented(address))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def report_entries(resource, memory_context: "MemoryContext", v):
|
def report_entries(resource, memory_context: "MemoryContext", v):
|
||||||
|
@ -139,23 +140,23 @@ class RoomShapeNormalResource(CDataResource):
|
||||||
entries_resource.set_length(numEntries)
|
entries_resource.set_length(numEntries)
|
||||||
|
|
||||||
def write_entries(
|
def write_entries(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix: str
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
address = v
|
address = v
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(memory_context.get_c_reference_at_segmented(address))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def write_entriesEnd(
|
def write_entriesEnd(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix: str
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
address = resource.cdata_unpacked["entries"]
|
address = resource.cdata_unpacked["entries"]
|
||||||
assert isinstance(address, int)
|
assert isinstance(address, int)
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(memory_context.get_c_reference_at_segmented(address))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
|
||||||
f.write(" + ")
|
wctx.f.write(" + ")
|
||||||
f.write(memory_context.get_c_expression_length_at_segmented(address))
|
wctx.f.write(memory_context.get_c_expression_length_at_segmented(address))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
cdata_ext = CDataExt_Struct(
|
cdata_ext = CDataExt_Struct(
|
||||||
|
@ -211,12 +212,12 @@ def report_RoomShapeImageBase_entry(resource, memory_context: "MemoryContext", v
|
||||||
|
|
||||||
|
|
||||||
def write_RoomShapeImageBase_entry(
|
def write_RoomShapeImageBase_entry(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
address = v
|
address = v
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(memory_context.get_c_reference_at_segmented(address))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
@ -287,12 +288,12 @@ class RoomShapeImageSingleResource(CDataResource):
|
||||||
)
|
)
|
||||||
|
|
||||||
def write_source(
|
def write_source(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
address = v
|
address = v
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(memory_context.get_c_reference_at_segmented(address))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
cdata_ext = CDataExt_Struct(
|
cdata_ext = CDataExt_Struct(
|
||||||
|
@ -340,12 +341,12 @@ class RoomShapeImageMultiBgEntryArrayResource(CDataArrayNamedLengthResource):
|
||||||
)
|
)
|
||||||
|
|
||||||
def write_source(
|
def write_source(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
address = v
|
address = v
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(memory_context.get_c_reference_at_segmented(address))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
elem_cdata_ext = CDataExt_Struct(
|
elem_cdata_ext = CDataExt_Struct(
|
||||||
|
@ -375,15 +376,15 @@ class RoomShapeImageMultiBgEntryArrayResource(CDataArrayNamedLengthResource):
|
||||||
|
|
||||||
class RoomShapeImageMultiResource(CDataResource):
|
class RoomShapeImageMultiResource(CDataResource):
|
||||||
def write_numBackgrounds(
|
def write_numBackgrounds(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
address = resource.cdata_unpacked["backgrounds"]
|
address = resource.cdata_unpacked["backgrounds"]
|
||||||
assert isinstance(address, int)
|
assert isinstance(address, int)
|
||||||
backgrounds_resource = memory_context.resolve_segmented(address).get_resource(
|
backgrounds_resource = memory_context.resolve_segmented(address).get_resource(
|
||||||
RoomShapeImageMultiBgEntryArrayResource
|
RoomShapeImageMultiBgEntryArrayResource
|
||||||
)
|
)
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(backgrounds_resource.length_name)
|
wctx.f.write(backgrounds_resource.length_name)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def report_backgrounds(resource, memory_context: "MemoryContext", v):
|
def report_backgrounds(resource, memory_context: "MemoryContext", v):
|
||||||
|
@ -402,12 +403,12 @@ class RoomShapeImageMultiResource(CDataResource):
|
||||||
backgrounds_resource.set_length(resource.cdata_unpacked["numBackgrounds"])
|
backgrounds_resource.set_length(resource.cdata_unpacked["numBackgrounds"])
|
||||||
|
|
||||||
def write_backgrounds(
|
def write_backgrounds(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
address = v
|
address = v
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(memory_context.get_c_reference_at_segmented(address))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
cdata_ext = CDataExt_Struct(
|
cdata_ext = CDataExt_Struct(
|
||||||
|
@ -453,12 +454,12 @@ class RoomShapeCullableEntryArrayResource(CDataArrayNamedLengthResource):
|
||||||
|
|
||||||
class RoomShapeCullableResource(CDataResource):
|
class RoomShapeCullableResource(CDataResource):
|
||||||
def write_numEntries(
|
def write_numEntries(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix: str
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
address = resource.cdata_unpacked["entries"]
|
address = resource.cdata_unpacked["entries"]
|
||||||
assert isinstance(address, int)
|
assert isinstance(address, int)
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(memory_context.get_c_expression_length_at_segmented(address))
|
wctx.f.write(memory_context.get_c_expression_length_at_segmented(address))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def report_entries(resource, memory_context: "MemoryContext", v):
|
def report_entries(resource, memory_context: "MemoryContext", v):
|
||||||
|
@ -478,23 +479,23 @@ class RoomShapeCullableResource(CDataResource):
|
||||||
entries_resource.set_length(numEntries)
|
entries_resource.set_length(numEntries)
|
||||||
|
|
||||||
def write_entries(
|
def write_entries(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix: str
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
address = v
|
address = v
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(memory_context.get_c_reference_at_segmented(address))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def write_entriesEnd(
|
def write_entriesEnd(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix: str
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
address = resource.cdata_unpacked["entries"]
|
address = resource.cdata_unpacked["entries"]
|
||||||
assert isinstance(address, int)
|
assert isinstance(address, int)
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(memory_context.get_c_reference_at_segmented(address))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
|
||||||
f.write(" + ")
|
wctx.f.write(" + ")
|
||||||
f.write(memory_context.get_c_expression_length_at_segmented(address))
|
wctx.f.write(memory_context.get_c_expression_length_at_segmented(address))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
cdata_ext = CDataExt_Struct(
|
cdata_ext = CDataExt_Struct(
|
||||||
|
|
|
@ -17,6 +17,7 @@ from ..extase import (
|
||||||
from ..extase.cdata_resources import (
|
from ..extase.cdata_resources import (
|
||||||
CDataArrayResource,
|
CDataArrayResource,
|
||||||
CDataExt_Value,
|
CDataExt_Value,
|
||||||
|
CDataExtWriteContext,
|
||||||
)
|
)
|
||||||
|
|
||||||
from .. import oot64_data
|
from .. import oot64_data
|
||||||
|
@ -638,15 +639,15 @@ class AltHeadersResource(CDataArrayResource):
|
||||||
)
|
)
|
||||||
|
|
||||||
def write_elem(
|
def write_elem(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix: str
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
address = v
|
address = v
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
if address == 0:
|
if address == 0:
|
||||||
f.write("NULL")
|
wctx.f.write("NULL")
|
||||||
else:
|
else:
|
||||||
f.write(memory_context.get_c_reference_at_segmented(address))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
elem_cdata_ext = (
|
elem_cdata_ext = (
|
||||||
|
|
|
@ -17,6 +17,7 @@ from ..extase.cdata_resources import (
|
||||||
CDataExt_Struct,
|
CDataExt_Struct,
|
||||||
CDataExt_Array,
|
CDataExt_Array,
|
||||||
CDataExt_Value,
|
CDataExt_Value,
|
||||||
|
CDataExtWriteContext,
|
||||||
cdata_ext_Vec3s,
|
cdata_ext_Vec3s,
|
||||||
INDENT,
|
INDENT,
|
||||||
Vec3sArrayResource,
|
Vec3sArrayResource,
|
||||||
|
@ -65,26 +66,27 @@ def fmt_hex_u(v: int, nibbles: int = 0):
|
||||||
|
|
||||||
|
|
||||||
class ActorEntryListResource(CDataArrayNamedLengthResource):
|
class ActorEntryListResource(CDataArrayNamedLengthResource):
|
||||||
def write_elem(resource, memory_context, v, f: io.TextIOBase, line_prefix: str):
|
def write_elem(resource, memory_context, v, wctx: CDataExtWriteContext):
|
||||||
assert isinstance(v, dict)
|
assert isinstance(v, dict)
|
||||||
f.write(line_prefix)
|
f = wctx.f
|
||||||
|
f.write(wctx.line_prefix)
|
||||||
f.write("{\n")
|
f.write("{\n")
|
||||||
|
|
||||||
f.write(line_prefix + INDENT)
|
f.write(wctx.line_prefix + INDENT)
|
||||||
f.write(oot64_data.get_actor_id_name(v["id"]))
|
f.write(oot64_data.get_actor_id_name(v["id"]))
|
||||||
f.write(",\n")
|
f.write(",\n")
|
||||||
|
|
||||||
f.write(line_prefix + INDENT)
|
f.write(wctx.line_prefix + INDENT)
|
||||||
f.write("{ ")
|
f.write("{ ")
|
||||||
f.write(", ".join(f"{p:6}" for p in (v["pos"][axis] for axis in "xyz")))
|
f.write(", ".join(f"{p:6}" for p in (v["pos"][axis] for axis in "xyz")))
|
||||||
f.write(" }, // pos\n")
|
f.write(" }, // pos\n")
|
||||||
|
|
||||||
f.write(line_prefix + INDENT)
|
f.write(wctx.line_prefix + INDENT)
|
||||||
f.write("{ ")
|
f.write("{ ")
|
||||||
f.write(", ".join(fmt_hex_s(r, 4) for r in (v["rot"][axis] for axis in "xyz")))
|
f.write(", ".join(fmt_hex_s(r, 4) for r in (v["rot"][axis] for axis in "xyz")))
|
||||||
f.write(" }, // rot\n")
|
f.write(" }, // rot\n")
|
||||||
|
|
||||||
f.write(line_prefix + INDENT)
|
f.write(wctx.line_prefix + INDENT)
|
||||||
params = v["params"]
|
params = v["params"]
|
||||||
f.write(fmt_hex_s(params, 4))
|
f.write(fmt_hex_s(params, 4))
|
||||||
if params < 0:
|
if params < 0:
|
||||||
|
@ -92,7 +94,7 @@ class ActorEntryListResource(CDataArrayNamedLengthResource):
|
||||||
f.write(f" /* 0x{params_u16:04X} */")
|
f.write(f" /* 0x{params_u16:04X} */")
|
||||||
f.write(", // params\n")
|
f.write(", // params\n")
|
||||||
|
|
||||||
f.write(line_prefix)
|
f.write(wctx.line_prefix)
|
||||||
f.write("}")
|
f.write("}")
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
@ -120,7 +122,7 @@ class ObjectListResource(CDataArrayNamedLengthResource):
|
||||||
|
|
||||||
|
|
||||||
def write_RomFile(
|
def write_RomFile(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix: str
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
assert isinstance(v, dict)
|
assert isinstance(v, dict)
|
||||||
vromStart = v["vromStart"]
|
vromStart = v["vromStart"]
|
||||||
|
@ -128,8 +130,8 @@ def write_RomFile(
|
||||||
rom_file_name = memory_context.get_dmadata_table_rom_file_name_from_vrom(
|
rom_file_name = memory_context.get_dmadata_table_rom_file_name_from_vrom(
|
||||||
vromStart, vromEnd
|
vromStart, vromEnd
|
||||||
)
|
)
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(f"ROM_FILE({rom_file_name})")
|
wctx.f.write(f"ROM_FILE({rom_file_name})")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
@ -302,40 +304,41 @@ class EnvLightSettingsListResource(CDataArrayNamedLengthResource):
|
||||||
|
|
||||||
|
|
||||||
class TransitionActorEntryListResource(CDataArrayNamedLengthResource):
|
class TransitionActorEntryListResource(CDataArrayNamedLengthResource):
|
||||||
def write_elem(resource, memory_context, v, f: io.TextIOBase, line_prefix: str):
|
def write_elem(resource, memory_context, v, wctx: CDataExtWriteContext):
|
||||||
assert isinstance(v, dict)
|
assert isinstance(v, dict)
|
||||||
f.write(line_prefix)
|
f = wctx.f
|
||||||
|
f.write(wctx.line_prefix)
|
||||||
f.write("{\n")
|
f.write("{\n")
|
||||||
|
|
||||||
f.write(line_prefix + INDENT)
|
f.write(wctx.line_prefix + INDENT)
|
||||||
f.write("{\n")
|
f.write("{\n")
|
||||||
f.write(line_prefix + 2 * INDENT)
|
f.write(wctx.line_prefix + 2 * INDENT)
|
||||||
f.write("// { room, bgCamIndex }\n")
|
f.write("// { room, bgCamIndex }\n")
|
||||||
for side_i in range(2):
|
for side_i in range(2):
|
||||||
side = v["sides"][side_i]
|
side = v["sides"][side_i]
|
||||||
room = side["room"]
|
room = side["room"]
|
||||||
bgCamIndex = side["bgCamIndex"]
|
bgCamIndex = side["bgCamIndex"]
|
||||||
f.write(line_prefix + 2 * INDENT)
|
f.write(wctx.line_prefix + 2 * INDENT)
|
||||||
f.write("{ ")
|
f.write("{ ")
|
||||||
f.write(f"{room}, {bgCamIndex}")
|
f.write(f"{room}, {bgCamIndex}")
|
||||||
f.write(" },\n")
|
f.write(" },\n")
|
||||||
f.write(line_prefix + INDENT)
|
f.write(wctx.line_prefix + INDENT)
|
||||||
f.write("}, // sides\n")
|
f.write("}, // sides\n")
|
||||||
|
|
||||||
f.write(line_prefix + INDENT)
|
f.write(wctx.line_prefix + INDENT)
|
||||||
f.write(oot64_data.get_actor_id_name(v["id"]))
|
f.write(oot64_data.get_actor_id_name(v["id"]))
|
||||||
f.write(",\n")
|
f.write(",\n")
|
||||||
|
|
||||||
f.write(line_prefix + INDENT)
|
f.write(wctx.line_prefix + INDENT)
|
||||||
f.write("{ ")
|
f.write("{ ")
|
||||||
f.write(", ".join(f"{p:6}" for p in (v["pos"][axis] for axis in "xyz")))
|
f.write(", ".join(f"{p:6}" for p in (v["pos"][axis] for axis in "xyz")))
|
||||||
f.write(" }, // pos\n")
|
f.write(" }, // pos\n")
|
||||||
|
|
||||||
f.write(line_prefix + INDENT)
|
f.write(wctx.line_prefix + INDENT)
|
||||||
f.write(fmt_hex_s(v["rotY"], 4))
|
f.write(fmt_hex_s(v["rotY"], 4))
|
||||||
f.write(", // rotY\n")
|
f.write(", // rotY\n")
|
||||||
|
|
||||||
f.write(line_prefix + INDENT)
|
f.write(wctx.line_prefix + INDENT)
|
||||||
params = v["params"]
|
params = v["params"]
|
||||||
f.write(fmt_hex_s(params, 4))
|
f.write(fmt_hex_s(params, 4))
|
||||||
if params < 0:
|
if params < 0:
|
||||||
|
@ -343,7 +346,7 @@ class TransitionActorEntryListResource(CDataArrayNamedLengthResource):
|
||||||
f.write(f" /* 0x{params_u16:04X} */")
|
f.write(f" /* 0x{params_u16:04X} */")
|
||||||
f.write(", // params\n")
|
f.write(", // params\n")
|
||||||
|
|
||||||
f.write(line_prefix)
|
f.write(wctx.line_prefix)
|
||||||
f.write("}")
|
f.write("}")
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
@ -390,14 +393,15 @@ class PathListResource(CDataArrayResource):
|
||||||
)
|
)
|
||||||
|
|
||||||
def write_elem(
|
def write_elem(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix: str
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
assert isinstance(v, dict)
|
assert isinstance(v, dict)
|
||||||
count = v["count"]
|
count = v["count"]
|
||||||
assert isinstance(count, int)
|
assert isinstance(count, int)
|
||||||
points = v["points"]
|
points = v["points"]
|
||||||
assert isinstance(points, int)
|
assert isinstance(points, int)
|
||||||
f.write(line_prefix)
|
f = wctx.f
|
||||||
|
f.write(wctx.line_prefix)
|
||||||
f.write("{ ")
|
f.write("{ ")
|
||||||
f.write(memory_context.get_c_expression_length_at_segmented(points))
|
f.write(memory_context.get_c_expression_length_at_segmented(points))
|
||||||
f.write(", ")
|
f.write(", ")
|
||||||
|
|
|
@ -10,6 +10,7 @@ from ..extase.cdata_resources import (
|
||||||
CDataResource,
|
CDataResource,
|
||||||
CDataArrayResource,
|
CDataArrayResource,
|
||||||
CDataExt_Struct,
|
CDataExt_Struct,
|
||||||
|
CDataExtWriteContext,
|
||||||
cdata_ext_Vec3f,
|
cdata_ext_Vec3f,
|
||||||
cdata_ext_Vec3s,
|
cdata_ext_Vec3s,
|
||||||
CDataExt_Value,
|
CDataExt_Value,
|
||||||
|
@ -38,15 +39,15 @@ class LegacyLimbResource(CDataResource):
|
||||||
)
|
)
|
||||||
|
|
||||||
def write_limb(
|
def write_limb(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
address = v
|
address = v
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
if address == 0:
|
if address == 0:
|
||||||
f.write("NULL")
|
wctx.f.write("NULL")
|
||||||
else:
|
else:
|
||||||
f.write(memory_context.get_c_reference_at_segmented(address))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
cdata_ext = CDataExt_Struct(
|
cdata_ext = CDataExt_Struct(
|
||||||
|
@ -101,21 +102,21 @@ class LegacyJointKeyArrayResource(CDataArrayResource):
|
||||||
class LegacyAnimationResource(CDataResource):
|
class LegacyAnimationResource(CDataResource):
|
||||||
|
|
||||||
def write_frameData(
|
def write_frameData(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
address = v
|
address = v
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(memory_context.get_c_reference_at_segmented(address))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def write_jointKey(
|
def write_jointKey(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
address = v
|
address = v
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(memory_context.get_c_reference_at_segmented(address))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
cdata_ext = CDataExt_Struct(
|
cdata_ext = CDataExt_Struct(
|
||||||
|
|
|
@ -15,6 +15,7 @@ from ..extase.cdata_resources import (
|
||||||
CDataExt_Struct,
|
CDataExt_Struct,
|
||||||
CDataExt_Value,
|
CDataExt_Value,
|
||||||
CDataExt_Array,
|
CDataExt_Array,
|
||||||
|
CDataExtWriteContext,
|
||||||
)
|
)
|
||||||
|
|
||||||
from . import dlist_resources
|
from . import dlist_resources
|
||||||
|
@ -117,12 +118,12 @@ class CurveAnimationHeaderResource(CDataResource):
|
||||||
)
|
)
|
||||||
|
|
||||||
def write_knotCounts(
|
def write_knotCounts(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
address = v
|
address = v
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(memory_context.get_c_reference_at_segmented(address))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def report_interpolationData(resource, memory_context: "MemoryContext", v):
|
def report_interpolationData(resource, memory_context: "MemoryContext", v):
|
||||||
|
@ -138,12 +139,12 @@ class CurveAnimationHeaderResource(CDataResource):
|
||||||
)
|
)
|
||||||
|
|
||||||
def write_interpolationData(
|
def write_interpolationData(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
address = v
|
address = v
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(memory_context.get_c_reference_at_segmented(address))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def report_constantData(resource, memory_context: "MemoryContext", v):
|
def report_constantData(resource, memory_context: "MemoryContext", v):
|
||||||
|
@ -159,12 +160,12 @@ class CurveAnimationHeaderResource(CDataResource):
|
||||||
)
|
)
|
||||||
|
|
||||||
def write_constantData(
|
def write_constantData(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
address = v
|
address = v
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(memory_context.get_c_reference_at_segmented(address))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
cdata_ext = CDataExt_Struct(
|
cdata_ext = CDataExt_Struct(
|
||||||
|
@ -283,12 +284,12 @@ class SkelCurveLimbArrayResource(CDataResource):
|
||||||
)
|
)
|
||||||
|
|
||||||
def write_limb_element(
|
def write_limb_element(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
address = v
|
address = v
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(memory_context.get_c_reference_at_segmented(address))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
elem_cdata_ext = (
|
elem_cdata_ext = (
|
||||||
|
@ -328,12 +329,12 @@ class CurveSkeletonHeaderResource(CDataResource):
|
||||||
)
|
)
|
||||||
|
|
||||||
def write_limbs(
|
def write_limbs(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
address = v
|
address = v
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(memory_context.get_c_reference_at_segmented(address))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
cdata_ext = CDataExt_Struct(
|
cdata_ext = CDataExt_Struct(
|
||||||
|
|
|
@ -17,6 +17,7 @@ from ..extase.cdata_resources import (
|
||||||
CDataExt_Value,
|
CDataExt_Value,
|
||||||
CDataExt_Struct,
|
CDataExt_Struct,
|
||||||
CDataExt_Array,
|
CDataExt_Array,
|
||||||
|
CDataExtWriteContext,
|
||||||
cdata_ext_Vec3s,
|
cdata_ext_Vec3s,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -25,10 +26,11 @@ from . import dlist_resources
|
||||||
|
|
||||||
class StandardLimbResource(CDataResource):
|
class StandardLimbResource(CDataResource):
|
||||||
def write_limb_index(
|
def write_limb_index(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
f.write(line_prefix)
|
f = wctx.f
|
||||||
|
f.write(wctx.line_prefix)
|
||||||
if resource.skeleton_resource is None:
|
if resource.skeleton_resource is None:
|
||||||
f.write(f"{v}")
|
f.write(f"{v}")
|
||||||
else:
|
else:
|
||||||
|
@ -109,12 +111,12 @@ class LimbsArrayResourceABC(CDataArrayResource):
|
||||||
c_limb_type: str
|
c_limb_type: str
|
||||||
|
|
||||||
def write_limb_element(
|
def write_limb_element(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
address = v
|
address = v
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(memory_context.get_c_reference_at_segmented(address))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
elem_cdata_ext = CDataExt_Value("I").set_write(write_limb_element)
|
elem_cdata_ext = CDataExt_Value("I").set_write(write_limb_element)
|
||||||
|
@ -239,19 +241,19 @@ class SkeletonResourceABC(SkeletonResourceBaseABC):
|
||||||
)
|
)
|
||||||
|
|
||||||
def write_segment(
|
def write_segment(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
address = v
|
address = v
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(memory_context.get_c_reference_at_segmented(address))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def write_limbCount(
|
def write_limbCount(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(
|
wctx.f.write(
|
||||||
memory_context.get_c_expression_length_at_segmented(
|
memory_context.get_c_expression_length_at_segmented(
|
||||||
resource.get_skeleton_header_cdata_unpacked()["segment"]
|
resource.get_skeleton_header_cdata_unpacked()["segment"]
|
||||||
)
|
)
|
||||||
|
|
|
@ -11,6 +11,7 @@ from ..extase.cdata_resources import (
|
||||||
CDataArrayResource,
|
CDataArrayResource,
|
||||||
CDataExt_Value,
|
CDataExt_Value,
|
||||||
CDataExt_Struct,
|
CDataExt_Struct,
|
||||||
|
CDataExtWriteContext,
|
||||||
cdata_ext_Vec3s,
|
cdata_ext_Vec3s,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -85,21 +86,21 @@ class SkinLimbModifArrayResource(CDataArrayResource):
|
||||||
skin_vertices_res.set_length(v["transformCount"])
|
skin_vertices_res.set_length(v["transformCount"])
|
||||||
|
|
||||||
def write_skinVertices(
|
def write_skinVertices(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
address = v
|
address = v
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(memory_context.get_c_reference_at_segmented(address))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def write_limbTransformations(
|
def write_limbTransformations(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
address = v
|
address = v
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(memory_context.get_c_reference_at_segmented(address))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
elem_cdata_ext = CDataExt_Struct(
|
elem_cdata_ext = CDataExt_Struct(
|
||||||
|
@ -140,12 +141,12 @@ class SkinAnimatedLimbDataResource(CDataResource):
|
||||||
skin_vertices_res.set_length(resource.cdata_unpacked["limbModifCount"])
|
skin_vertices_res.set_length(resource.cdata_unpacked["limbModifCount"])
|
||||||
|
|
||||||
def write_limbModifications(
|
def write_limbModifications(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
address = v
|
address = v
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
f.write(memory_context.get_c_reference_at_segmented(address))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
cdata_ext = CDataExt_Struct(
|
cdata_ext = CDataExt_Struct(
|
||||||
|
@ -196,15 +197,15 @@ class SkinLimbResource(CDataResource):
|
||||||
dlist_resources.report_gfx_segmented(resource, memory_context, address)
|
dlist_resources.report_gfx_segmented(resource, memory_context, address)
|
||||||
|
|
||||||
def write_segment(
|
def write_segment(
|
||||||
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
|
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
|
||||||
):
|
):
|
||||||
assert isinstance(v, int)
|
assert isinstance(v, int)
|
||||||
address = v
|
address = v
|
||||||
f.write(line_prefix)
|
wctx.f.write(wctx.line_prefix)
|
||||||
if address == 0:
|
if address == 0:
|
||||||
f.write("NULL")
|
wctx.f.write("NULL")
|
||||||
else:
|
else:
|
||||||
f.write(memory_context.get_c_reference_at_segmented(address))
|
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
cdata_ext = CDataExt_Struct(
|
cdata_ext = CDataExt_Struct(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue