1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-08-23 15:31:15 +00:00

refactor CDataExt.set_write callback args to use a dataclass

This commit is contained in:
Dragorn421 2025-02-12 22:37:26 +01:00
parent 8e5e543731
commit 6e9b4d1a59
No known key found for this signature in database
GPG key ID: 381AEBAF3D429335
12 changed files with 215 additions and 202 deletions

View file

@ -1,5 +1,5 @@
from __future__ import annotations
import abc
import dataclasses
import io
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):
report_f = None
@ -37,7 +43,7 @@ class CDataExt(CData, abc.ABC):
def set_write(
self,
write_f: Callable[
["CDataResource", "MemoryContext", Any, io.TextIOBase, str],
["CDataResource", "MemoryContext", Any, CDataExtWriteContext],
bool,
],
):
@ -88,7 +94,9 @@ class CDataExt(CData, abc.ABC):
(typically, False will be returned if this data is struct padding)
"""
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,
# since it's easy to forget to return a value (typically True)
assert isinstance(ret, bool), ("must return a bool", self.write_f)
@ -116,11 +124,10 @@ class CDataExt_Value(CData_Value, CDataExt):
resource: "CDataResource",
memory_context: "MemoryContext",
v: Any,
f: io.TextIOBase,
line_prefix: str,
wctx: CDataExtWriteContext,
):
f.write(line_prefix)
f.write(str_v(v))
wctx.f.write(wctx.line_prefix)
wctx.f.write(str_v(v))
return True
self.set_write(write_f)
@ -395,6 +402,7 @@ class S16ArrayResource(CDataResource):
else:
raise ValueError()
cdata_ext_Vec3f = CDataExt_Struct(
(
("x", CDataExt_Value.f32),

View file

@ -15,13 +15,14 @@ from ..extase.cdata_resources import (
CDataExt_Value,
CDataExt_Struct,
CDataExt_Array,
CDataExtWriteContext,
)
class AnimationFrameDataResource(CDataResource, can_size_be_unknown=True):
def write_binang(resource, memory_context, v, f: io.TextIOBase, line_prefix):
f.write(line_prefix)
f.write(f" 0x{v:04X}" if v >= 0 else "-0x" + f"{v:04X}".removeprefix("-"))
def write_binang(resource, memory_context, v, wctx:CDataExtWriteContext):
wctx.f.write(wctx.line_prefix)
wctx.f.write(f" 0x{v:04X}" if v >= 0 else "-0x" + f"{v:04X}".removeprefix("-"))
return True
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):
def write_frameData(
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
):
assert isinstance(v, int)
address = v
f.write(line_prefix)
f.write(memory_context.get_c_reference_at_segmented(address))
wctx.f.write(wctx.line_prefix)
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
return True
def write_jointIndices(
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
):
assert isinstance(v, int)
address = v
f.write(line_prefix)
f.write(memory_context.get_c_reference_at_segmented(address))
wctx.f.write(wctx.line_prefix)
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
return True
cdata_ext = CDataExt_Struct(

View file

@ -17,6 +17,7 @@ from ..extase.cdata_resources import (
CDataExt_Struct,
CDataExt_Array,
CDataExt_Value,
CDataExtWriteContext,
cdata_ext_Vec3s,
INDENT,
)
@ -60,13 +61,13 @@ class CollisionPolyListResource(CDataResource):
resource: "CollisionPolyListResource",
memory_context: "MemoryContext",
v,
f: io.TextIOBase,
line_prefix,
wctx: CDataExtWriteContext,
):
assert isinstance(v, list)
assert len(v) == 3
vtxData = v
f.write(line_prefix)
f = wctx.f
f.write(wctx.line_prefix)
f.write("{\n")
for i in range(3):
vI = vtxData[i]
@ -93,10 +94,10 @@ class CollisionPolyListResource(CDataResource):
flags_str = " | ".join(flags_str_list)
else:
flags_str = "0"
f.write(line_prefix)
f.write(wctx.line_prefix)
f.write(INDENT)
f.write(f"{vtxId} | (({flags_str}) << 13), // {i}\n")
f.write(line_prefix)
f.write(wctx.line_prefix)
f.write("}")
return True
@ -104,13 +105,12 @@ class CollisionPolyListResource(CDataResource):
resource: "CollisionPolyListResource",
memory_context: "MemoryContext",
v,
f: io.TextIOBase,
line_prefix,
wctx: CDataExtWriteContext,
):
assert isinstance(v, int)
nf = v / 0x7FFF
f.write(line_prefix)
f.write(f"COLPOLY_SNORMAL({nf})")
wctx.f.write(wctx.line_prefix)
wctx.f.write(f"COLPOLY_SNORMAL({nf})")
return True
@ -166,13 +166,13 @@ class CollisionSurfaceTypeListResource(CDataResource):
resource: "CollisionSurfaceTypeListResource",
memory_context: "MemoryContext",
v,
f: io.TextIOBase,
line_prefix,
wctx: CDataExtWriteContext,
):
assert isinstance(v, list)
assert len(v) == 2
f = wctx.f
f.write(line_prefix)
f.write(wctx.line_prefix)
f.write("{\n")
for i_data, bitfield_info in (
@ -206,7 +206,7 @@ class CollisionSurfaceTypeListResource(CDataResource):
data_val = v[i_data]
f.write(line_prefix)
f.write(wctx.line_prefix)
f.write(INDENT)
f.write("(\n")
@ -214,7 +214,7 @@ class CollisionSurfaceTypeListResource(CDataResource):
for mask, shift, name in bitfield_info:
val = (data_val & mask) >> shift
f.write(line_prefix)
f.write(wctx.line_prefix)
f.write(INDENT * 2)
if has_prev:
f.write("| ")
@ -225,11 +225,11 @@ class CollisionSurfaceTypeListResource(CDataResource):
has_prev = True
f.write(line_prefix)
f.write(wctx.line_prefix)
f.write(INDENT)
f.write(f"), // {i_data}\n")
f.write(line_prefix)
f.write(wctx.line_prefix)
f.write("}")
return True
@ -294,16 +294,15 @@ class CollisionBgCamListResource(CDataResource):
resource: "CollisionSurfaceTypeListResource",
memory_context: "MemoryContext",
v,
f: io.TextIOBase,
line_prefix,
wctx: CDataExtWriteContext,
):
assert isinstance(v, int)
address = v
f.write(line_prefix)
wctx.f.write(wctx.line_prefix)
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:
f.write("NULL")
wctx.f.write("NULL")
return True
cdata_ext_elem = CDataExt_Struct(
@ -428,11 +427,10 @@ class CollisionResource(CDataResource):
resource: "CollisionResource",
memory_context: "MemoryContext",
v,
f: io.TextIOBase,
line_prefix,
wctx: CDataExtWriteContext,
):
f.write(line_prefix)
f.write(
wctx.f.write(wctx.line_prefix)
wctx.f.write(
memory_context.get_c_expression_length_at_segmented(
resource.cdata_unpacked["vtxList"]
)
@ -463,23 +461,21 @@ class CollisionResource(CDataResource):
resource: "CollisionResource",
memory_context: "MemoryContext",
v,
f: io.TextIOBase,
line_prefix,
wctx: CDataExtWriteContext,
):
assert isinstance(v, int)
f.write(line_prefix)
f.write(memory_context.get_c_reference_at_segmented(v))
wctx.f.write(wctx.line_prefix)
wctx.f.write(memory_context.get_c_reference_at_segmented(v))
return True
def write_numPolygons(
resource: "CollisionResource",
memory_context: "MemoryContext",
v,
f: io.TextIOBase,
line_prefix,
wctx: CDataExtWriteContext,
):
f.write(line_prefix)
f.write(
wctx.f.write(wctx.line_prefix)
wctx.f.write(
memory_context.get_c_expression_length_at_segmented(
resource.cdata_unpacked["polyList"]
)
@ -510,32 +506,30 @@ class CollisionResource(CDataResource):
resource: "CollisionResource",
memory_context: "MemoryContext",
v,
f: io.TextIOBase,
line_prefix,
wctx: CDataExtWriteContext,
):
assert isinstance(v, int)
address = v
f.write(line_prefix)
f.write(memory_context.get_c_reference_at_segmented(address))
wctx.f.write(wctx.line_prefix)
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
return True
def write_numWaterBoxes(
resource: "CollisionResource",
memory_context: "MemoryContext",
v,
f: io.TextIOBase,
line_prefix,
wctx: CDataExtWriteContext,
):
f.write(line_prefix)
wctx.f.write(wctx.line_prefix)
length = resource.cdata_unpacked["numWaterBoxes"]
if length != 0:
f.write(
wctx.f.write(
memory_context.get_c_expression_length_at_segmented(
resource.cdata_unpacked["waterBoxes"]
)
)
else:
f.write("0")
wctx.f.write("0")
return True
def report_waterBoxes(
@ -565,36 +559,34 @@ class CollisionResource(CDataResource):
resource: "CollisionResource",
memory_context: "MemoryContext",
v,
f: io.TextIOBase,
line_prefix,
wctx: CDataExtWriteContext,
):
assert isinstance(v, int)
f.write(line_prefix)
f.write(memory_context.get_c_reference_at_segmented(v))
wctx.f.write(wctx.line_prefix)
wctx.f.write(memory_context.get_c_reference_at_segmented(v))
return True
def write_bgCamList(
resource: "CollisionResource",
memory_context: "MemoryContext",
v,
f: io.TextIOBase,
line_prefix,
wctx: CDataExtWriteContext,
):
assert isinstance(v, int)
f.write(line_prefix)
f.write(memory_context.get_c_reference_at_segmented(v))
wctx.f.write(wctx.line_prefix)
wctx.f.write(memory_context.get_c_reference_at_segmented(v))
return True
def write_waterBoxes(
resource: "CollisionResource",
memory_context: "MemoryContext",
v,
f: io.TextIOBase,
line_prefix,
wctx: CDataExtWriteContext,
):
assert isinstance(v, int)
length = resource.cdata_unpacked["numWaterBoxes"]
f.write(line_prefix)
f = wctx.f
f.write(wctx.line_prefix)
if length != 0:
f.write(memory_context.get_c_reference_at_segmented(v))
else:

View file

@ -27,6 +27,7 @@ from ..extase.cdata_resources import (
CDataExt_Array,
CDataExt_Struct,
CDataExt_Value,
CDataExtWriteContext,
INDENT,
)
@ -38,19 +39,21 @@ VERBOSE_BEST_EFFORT_TLUT_NO_REAL_USER = True
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 v.keys() == {"intPart", "fracPart"}
intPart = v["intPart"]
fracPart = v["fracPart"]
f.write(line_prefix)
f = wctx.f
f.write(wctx.line_prefix)
f.write("gdSPDefMtx(\n")
for i in range(4):
if i != 0:
f.write(",\n")
f.write(line_prefix + INDENT)
f.write(wctx.line_prefix + INDENT)
for j in range(4):
# #define IPART(x) (((s32)((x) * 0x10000) >> 16) & 0xFFFF)
@ -75,7 +78,7 @@ class MtxResource(CDataResource):
f.write(f"{x}f")
f.write("\n")
f.write(line_prefix)
f.write(wctx.line_prefix)
f.write(")")
return True
@ -98,10 +101,10 @@ class MtxResource(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)
f.write(line_prefix)
f.write(
wctx.f.write(wctx.line_prefix)
wctx.f.write(
f"VTX({v['x']:6}, {v['y']:6}, {v['z']:6}, "
f"{v['s']:#7X}, {v['t']:#7X}, "
f"{v['crnx']:#04X}, {v['cgny']:#04X}, {v['cbnz']:#04X}, {v['a']:#04X})"
@ -1464,16 +1467,15 @@ def write_gfx_segmented(
resource: Resource,
memory_context: "MemoryContext",
v,
f: io.TextIOBase,
line_prefix: str,
wctx:CDataExtWriteContext,
):
assert isinstance(v, int)
address = v
f.write(line_prefix)
wctx.f.write(wctx.line_prefix)
if address == 0:
f.write("NULL")
wctx.f.write("NULL")
else:
f.write(memory_context.get_c_reference_at_segmented(address))
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
return True

View file

@ -1,8 +1,6 @@
from typing import TYPE_CHECKING
if TYPE_CHECKING:
import io
from ..extase import MemoryContext
from ..extase.cdata_resources import (
@ -10,6 +8,7 @@ from ..extase.cdata_resources import (
CDataArrayResource,
CDataExt_Struct,
CDataExt_Value,
CDataExtWriteContext,
)
@ -49,12 +48,12 @@ class PlayerAnimationResource(CDataResource):
player_animation_data_res.set_frame_count(v["common"]["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"]
assert isinstance(address, int)
f.write(line_prefix)
f.write(
wctx.f.write(wctx.line_prefix)
wctx.f.write(
memory_context.resolve_segmented(address)
.get_resource(PlayerAnimationDataResource)
.frame_count_name
@ -62,12 +61,12 @@ class PlayerAnimationResource(CDataResource):
return True
def write_segment(
resource, memory_context: "MemoryContext", v, f: "io.TextIOBase", line_prefix
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
):
assert isinstance(v, int)
address = v
f.write(line_prefix)
f.write(memory_context.get_c_reference_at_segmented(address))
wctx.f.write(wctx.line_prefix)
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
return True
cdata_ext = CDataExt_Struct(

View file

@ -20,6 +20,7 @@ from ..extase.cdata_resources import (
CDataArrayNamedLengthResource,
CDataExt_Struct,
CDataExt_Value,
CDataExtWriteContext,
cdata_ext_Vec3s,
)
@ -114,12 +115,12 @@ class RoomShapeNormalEntryArrayResource(CDataArrayNamedLengthResource):
class RoomShapeNormalResource(CDataResource):
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"]
assert isinstance(address, int)
f.write(line_prefix)
f.write(memory_context.get_c_expression_length_at_segmented(address))
wctx.f.write(wctx.line_prefix)
wctx.f.write(memory_context.get_c_expression_length_at_segmented(address))
return True
def report_entries(resource, memory_context: "MemoryContext", v):
@ -139,23 +140,23 @@ class RoomShapeNormalResource(CDataResource):
entries_resource.set_length(numEntries)
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)
address = v
f.write(line_prefix)
f.write(memory_context.get_c_reference_at_segmented(address))
wctx.f.write(wctx.line_prefix)
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
return True
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"]
assert isinstance(address, int)
f.write(line_prefix)
f.write(memory_context.get_c_reference_at_segmented(address))
f.write(" + ")
f.write(memory_context.get_c_expression_length_at_segmented(address))
wctx.f.write(wctx.line_prefix)
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
wctx.f.write(" + ")
wctx.f.write(memory_context.get_c_expression_length_at_segmented(address))
return True
cdata_ext = CDataExt_Struct(
@ -211,12 +212,12 @@ def report_RoomShapeImageBase_entry(resource, memory_context: "MemoryContext", v
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)
address = v
f.write(line_prefix)
f.write(memory_context.get_c_reference_at_segmented(address))
wctx.f.write(wctx.line_prefix)
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
return True
@ -287,12 +288,12 @@ class RoomShapeImageSingleResource(CDataResource):
)
def write_source(
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
):
assert isinstance(v, int)
address = v
f.write(line_prefix)
f.write(memory_context.get_c_reference_at_segmented(address))
wctx.f.write(wctx.line_prefix)
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
return True
cdata_ext = CDataExt_Struct(
@ -340,12 +341,12 @@ class RoomShapeImageMultiBgEntryArrayResource(CDataArrayNamedLengthResource):
)
def write_source(
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
):
assert isinstance(v, int)
address = v
f.write(line_prefix)
f.write(memory_context.get_c_reference_at_segmented(address))
wctx.f.write(wctx.line_prefix)
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
return True
elem_cdata_ext = CDataExt_Struct(
@ -375,15 +376,15 @@ class RoomShapeImageMultiBgEntryArrayResource(CDataArrayNamedLengthResource):
class RoomShapeImageMultiResource(CDataResource):
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"]
assert isinstance(address, int)
backgrounds_resource = memory_context.resolve_segmented(address).get_resource(
RoomShapeImageMultiBgEntryArrayResource
)
f.write(line_prefix)
f.write(backgrounds_resource.length_name)
wctx.f.write(wctx.line_prefix)
wctx.f.write(backgrounds_resource.length_name)
return True
def report_backgrounds(resource, memory_context: "MemoryContext", v):
@ -402,12 +403,12 @@ class RoomShapeImageMultiResource(CDataResource):
backgrounds_resource.set_length(resource.cdata_unpacked["numBackgrounds"])
def write_backgrounds(
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
):
assert isinstance(v, int)
address = v
f.write(line_prefix)
f.write(memory_context.get_c_reference_at_segmented(address))
wctx.f.write(wctx.line_prefix)
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
return True
cdata_ext = CDataExt_Struct(
@ -453,12 +454,12 @@ class RoomShapeCullableEntryArrayResource(CDataArrayNamedLengthResource):
class RoomShapeCullableResource(CDataResource):
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"]
assert isinstance(address, int)
f.write(line_prefix)
f.write(memory_context.get_c_expression_length_at_segmented(address))
wctx.f.write(wctx.line_prefix)
wctx.f.write(memory_context.get_c_expression_length_at_segmented(address))
return True
def report_entries(resource, memory_context: "MemoryContext", v):
@ -478,23 +479,23 @@ class RoomShapeCullableResource(CDataResource):
entries_resource.set_length(numEntries)
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)
address = v
f.write(line_prefix)
f.write(memory_context.get_c_reference_at_segmented(address))
wctx.f.write(wctx.line_prefix)
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
return True
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"]
assert isinstance(address, int)
f.write(line_prefix)
f.write(memory_context.get_c_reference_at_segmented(address))
f.write(" + ")
f.write(memory_context.get_c_expression_length_at_segmented(address))
wctx.f.write(wctx.line_prefix)
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
wctx.f.write(" + ")
wctx.f.write(memory_context.get_c_expression_length_at_segmented(address))
return True
cdata_ext = CDataExt_Struct(

View file

@ -17,6 +17,7 @@ from ..extase import (
from ..extase.cdata_resources import (
CDataArrayResource,
CDataExt_Value,
CDataExtWriteContext,
)
from .. import oot64_data
@ -638,15 +639,15 @@ class AltHeadersResource(CDataArrayResource):
)
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)
address = v
f.write(line_prefix)
wctx.f.write(wctx.line_prefix)
if address == 0:
f.write("NULL")
wctx.f.write("NULL")
else:
f.write(memory_context.get_c_reference_at_segmented(address))
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
return True
elem_cdata_ext = (

View file

@ -17,6 +17,7 @@ from ..extase.cdata_resources import (
CDataExt_Struct,
CDataExt_Array,
CDataExt_Value,
CDataExtWriteContext,
cdata_ext_Vec3s,
INDENT,
Vec3sArrayResource,
@ -65,26 +66,27 @@ def fmt_hex_u(v: int, nibbles: int = 0):
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)
f.write(line_prefix)
f = wctx.f
f.write(wctx.line_prefix)
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(",\n")
f.write(line_prefix + INDENT)
f.write(wctx.line_prefix + INDENT)
f.write("{ ")
f.write(", ".join(f"{p:6}" for p in (v["pos"][axis] for axis in "xyz")))
f.write(" }, // pos\n")
f.write(line_prefix + INDENT)
f.write(wctx.line_prefix + INDENT)
f.write("{ ")
f.write(", ".join(fmt_hex_s(r, 4) for r in (v["rot"][axis] for axis in "xyz")))
f.write(" }, // rot\n")
f.write(line_prefix + INDENT)
f.write(wctx.line_prefix + INDENT)
params = v["params"]
f.write(fmt_hex_s(params, 4))
if params < 0:
@ -92,7 +94,7 @@ class ActorEntryListResource(CDataArrayNamedLengthResource):
f.write(f" /* 0x{params_u16:04X} */")
f.write(", // params\n")
f.write(line_prefix)
f.write(wctx.line_prefix)
f.write("}")
return True
@ -120,7 +122,7 @@ class ObjectListResource(CDataArrayNamedLengthResource):
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)
vromStart = v["vromStart"]
@ -128,8 +130,8 @@ def write_RomFile(
rom_file_name = memory_context.get_dmadata_table_rom_file_name_from_vrom(
vromStart, vromEnd
)
f.write(line_prefix)
f.write(f"ROM_FILE({rom_file_name})")
wctx.f.write(wctx.line_prefix)
wctx.f.write(f"ROM_FILE({rom_file_name})")
return True
@ -302,40 +304,41 @@ class EnvLightSettingsListResource(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)
f.write(line_prefix)
f = wctx.f
f.write(wctx.line_prefix)
f.write("{\n")
f.write(line_prefix + INDENT)
f.write(wctx.line_prefix + INDENT)
f.write("{\n")
f.write(line_prefix + 2 * INDENT)
f.write(wctx.line_prefix + 2 * INDENT)
f.write("// { room, bgCamIndex }\n")
for side_i in range(2):
side = v["sides"][side_i]
room = side["room"]
bgCamIndex = side["bgCamIndex"]
f.write(line_prefix + 2 * INDENT)
f.write(wctx.line_prefix + 2 * INDENT)
f.write("{ ")
f.write(f"{room}, {bgCamIndex}")
f.write(" },\n")
f.write(line_prefix + INDENT)
f.write(wctx.line_prefix + INDENT)
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(",\n")
f.write(line_prefix + INDENT)
f.write(wctx.line_prefix + INDENT)
f.write("{ ")
f.write(", ".join(f"{p:6}" for p in (v["pos"][axis] for axis in "xyz")))
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(", // rotY\n")
f.write(line_prefix + INDENT)
f.write(wctx.line_prefix + INDENT)
params = v["params"]
f.write(fmt_hex_s(params, 4))
if params < 0:
@ -343,7 +346,7 @@ class TransitionActorEntryListResource(CDataArrayNamedLengthResource):
f.write(f" /* 0x{params_u16:04X} */")
f.write(", // params\n")
f.write(line_prefix)
f.write(wctx.line_prefix)
f.write("}")
return True
@ -390,14 +393,15 @@ class PathListResource(CDataArrayResource):
)
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)
count = v["count"]
assert isinstance(count, int)
points = v["points"]
assert isinstance(points, int)
f.write(line_prefix)
f = wctx.f
f.write(wctx.line_prefix)
f.write("{ ")
f.write(memory_context.get_c_expression_length_at_segmented(points))
f.write(", ")

View file

@ -10,6 +10,7 @@ from ..extase.cdata_resources import (
CDataResource,
CDataArrayResource,
CDataExt_Struct,
CDataExtWriteContext,
cdata_ext_Vec3f,
cdata_ext_Vec3s,
CDataExt_Value,
@ -38,15 +39,15 @@ class LegacyLimbResource(CDataResource):
)
def write_limb(
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
):
assert isinstance(v, int)
address = v
f.write(line_prefix)
wctx.f.write(wctx.line_prefix)
if address == 0:
f.write("NULL")
wctx.f.write("NULL")
else:
f.write(memory_context.get_c_reference_at_segmented(address))
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
return True
cdata_ext = CDataExt_Struct(
@ -101,21 +102,21 @@ class LegacyJointKeyArrayResource(CDataArrayResource):
class LegacyAnimationResource(CDataResource):
def write_frameData(
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
):
assert isinstance(v, int)
address = v
f.write(line_prefix)
f.write(memory_context.get_c_reference_at_segmented(address))
wctx.f.write(wctx.line_prefix)
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
return True
def write_jointKey(
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
):
assert isinstance(v, int)
address = v
f.write(line_prefix)
f.write(memory_context.get_c_reference_at_segmented(address))
wctx.f.write(wctx.line_prefix)
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
return True
cdata_ext = CDataExt_Struct(

View file

@ -15,6 +15,7 @@ from ..extase.cdata_resources import (
CDataExt_Struct,
CDataExt_Value,
CDataExt_Array,
CDataExtWriteContext,
)
from . import dlist_resources
@ -117,12 +118,12 @@ class CurveAnimationHeaderResource(CDataResource):
)
def write_knotCounts(
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
):
assert isinstance(v, int)
address = v
f.write(line_prefix)
f.write(memory_context.get_c_reference_at_segmented(address))
wctx.f.write(wctx.line_prefix)
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
return True
def report_interpolationData(resource, memory_context: "MemoryContext", v):
@ -138,12 +139,12 @@ class CurveAnimationHeaderResource(CDataResource):
)
def write_interpolationData(
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
):
assert isinstance(v, int)
address = v
f.write(line_prefix)
f.write(memory_context.get_c_reference_at_segmented(address))
wctx.f.write(wctx.line_prefix)
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
return True
def report_constantData(resource, memory_context: "MemoryContext", v):
@ -159,12 +160,12 @@ class CurveAnimationHeaderResource(CDataResource):
)
def write_constantData(
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
):
assert isinstance(v, int)
address = v
f.write(line_prefix)
f.write(memory_context.get_c_reference_at_segmented(address))
wctx.f.write(wctx.line_prefix)
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
return True
cdata_ext = CDataExt_Struct(
@ -283,12 +284,12 @@ class SkelCurveLimbArrayResource(CDataResource):
)
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)
address = v
f.write(line_prefix)
f.write(memory_context.get_c_reference_at_segmented(address))
wctx.f.write(wctx.line_prefix)
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
return True
elem_cdata_ext = (
@ -328,12 +329,12 @@ class CurveSkeletonHeaderResource(CDataResource):
)
def write_limbs(
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
):
assert isinstance(v, int)
address = v
f.write(line_prefix)
f.write(memory_context.get_c_reference_at_segmented(address))
wctx.f.write(wctx.line_prefix)
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
return True
cdata_ext = CDataExt_Struct(

View file

@ -17,6 +17,7 @@ from ..extase.cdata_resources import (
CDataExt_Value,
CDataExt_Struct,
CDataExt_Array,
CDataExtWriteContext,
cdata_ext_Vec3s,
)
@ -25,10 +26,11 @@ from . import dlist_resources
class StandardLimbResource(CDataResource):
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)
f.write(line_prefix)
f = wctx.f
f.write(wctx.line_prefix)
if resource.skeleton_resource is None:
f.write(f"{v}")
else:
@ -109,12 +111,12 @@ class LimbsArrayResourceABC(CDataArrayResource):
c_limb_type: str
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)
address = v
f.write(line_prefix)
f.write(memory_context.get_c_reference_at_segmented(address))
wctx.f.write(wctx.line_prefix)
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
return True
elem_cdata_ext = CDataExt_Value("I").set_write(write_limb_element)
@ -239,19 +241,19 @@ class SkeletonResourceABC(SkeletonResourceBaseABC):
)
def write_segment(
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
):
assert isinstance(v, int)
address = v
f.write(line_prefix)
f.write(memory_context.get_c_reference_at_segmented(address))
wctx.f.write(wctx.line_prefix)
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
return True
def write_limbCount(
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
):
f.write(line_prefix)
f.write(
wctx.f.write(wctx.line_prefix)
wctx.f.write(
memory_context.get_c_expression_length_at_segmented(
resource.get_skeleton_header_cdata_unpacked()["segment"]
)

View file

@ -11,6 +11,7 @@ from ..extase.cdata_resources import (
CDataArrayResource,
CDataExt_Value,
CDataExt_Struct,
CDataExtWriteContext,
cdata_ext_Vec3s,
)
@ -85,21 +86,21 @@ class SkinLimbModifArrayResource(CDataArrayResource):
skin_vertices_res.set_length(v["transformCount"])
def write_skinVertices(
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
):
assert isinstance(v, int)
address = v
f.write(line_prefix)
f.write(memory_context.get_c_reference_at_segmented(address))
wctx.f.write(wctx.line_prefix)
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
return True
def write_limbTransformations(
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
):
assert isinstance(v, int)
address = v
f.write(line_prefix)
f.write(memory_context.get_c_reference_at_segmented(address))
wctx.f.write(wctx.line_prefix)
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
return True
elem_cdata_ext = CDataExt_Struct(
@ -140,12 +141,12 @@ class SkinAnimatedLimbDataResource(CDataResource):
skin_vertices_res.set_length(resource.cdata_unpacked["limbModifCount"])
def write_limbModifications(
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
):
assert isinstance(v, int)
address = v
f.write(line_prefix)
f.write(memory_context.get_c_reference_at_segmented(address))
wctx.f.write(wctx.line_prefix)
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
return True
cdata_ext = CDataExt_Struct(
@ -196,15 +197,15 @@ class SkinLimbResource(CDataResource):
dlist_resources.report_gfx_segmented(resource, memory_context, address)
def write_segment(
resource, memory_context: "MemoryContext", v, f: io.TextIOBase, line_prefix
resource, memory_context: "MemoryContext", v, wctx: CDataExtWriteContext
):
assert isinstance(v, int)
address = v
f.write(line_prefix)
wctx.f.write(wctx.line_prefix)
if address == 0:
f.write("NULL")
wctx.f.write("NULL")
else:
f.write(memory_context.get_c_reference_at_segmented(address))
wctx.f.write(memory_context.get_c_reference_at_segmented(address))
return True
cdata_ext = CDataExt_Struct(