Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 22 additions & 1 deletion attribution.json
Original file line number Diff line number Diff line change
Expand Up @@ -859,6 +859,27 @@
"src/actors/daObjPathLift_c.cpp#_ZN15daObjPathLift_cD0Ev": "tangosdev",
"src/actors/daObjPathLift_c.cpp#_ZN15daObjPathLift_cD1Ev": "tangosdev",
"src/actors/daObjPathLift_c.cpp#func_ov100_02146e70": "aitddlabs",
"src/actors/daObjPathLift_c.cpp#func_ov100_0214700c": "tangosdev"
"src/actors/daObjPathLift_c.cpp#func_ov100_0214700c": "tangosdev",
"src/actors/daKpFr_c.cpp#_ZN8daKpFr_c13InitResourcesEv": "tangosdev",
"src/actors/daKpFr_c.cpp#_ZN8daKpFr_c13OnYoshiTryEatEv": "andrewboudreau",
"src/actors/daKpFr_c.cpp#_ZN8daKpFr_c16CleanupResourcesEv": "andrewboudreau",
"src/actors/daKpFr_c.cpp#_ZN8daKpFr_c16OnPendingDestroyEv": "andrewboudreau",
"src/actors/daKpFr_c.cpp#_ZN8daKpFr_c6RenderEv": "tangosdev",
"src/actors/daKpFr_c.cpp#_ZN8daKpFr_c8BehaviorEv": "tangosdev",
"src/actors/daKpFr_c.cpp#_ZN8daKpFr_cD0Ev": "andrewboudreau",
"src/actors/daKpFr_c.cpp#_ZN8daKpFr_cD1Ev": "andrewboudreau",
"src/actors/daKpFr_c.cpp#daKpFr_c_Spawn": "tangosdev",
"src/actors/daKpFr_c.cpp#func_ov070_02121be4": "tangosdev",
"src/actors/daKpFr_c.cpp#func_ov070_02121c8c": "tangosdev",
"src/actors/daKpFr_c.cpp#func_ov070_02121cbc": "tangosdev",
"src/actors/daKpFr_c.cpp#func_ov070_02121d50": "tangosdev",
"src/actors/daKpFr_c.cpp#func_ov070_02121e14": "tangosdev",
"src/actors/daKpFr_c.cpp#func_ov070_02121eb0": "tangosdev",
"src/actors/daKpFr_c.cpp#func_ov070_02121ef8": "tangosdev",
"src/actors/daKpFr_c.cpp#func_ov070_02121f18": "tangosdev",
"src/actors/daKpFr_c.cpp#func_ov070_02121fb0": "tangosdev",
"src/actors/daKpFr_c.cpp#func_ov070_02121fd0": "tangosdev",
"src/actors/daKpFr_c.cpp#func_ov070_0212200c": "tangosdev",
"src/actors/daKpFr_c.cpp#func_ov070_02122044": "ruspecial"
}
}
88 changes: 4 additions & 84 deletions config/arm9/overlays/ov070/delinks.txt
Original file line number Diff line number Diff line change
Expand Up @@ -288,90 +288,6 @@ src/daKrpa_c_Spawn.c:
complete
.text start:0x02121af8 end:0x02121b48

src/_ZN8daKpFr_cD1Ev.cpp:
complete
.text start:0x02121b48 end:0x02121b88

src/_ZN8daKpFr_cD0Ev.cpp:
complete
.text start:0x02121b88 end:0x02121bdc

src/_ZN8daKpFr_c13OnYoshiTryEatEv.cpp:
complete
.text start:0x02121bdc end:0x02121be4

src/func_ov070_02121be4.cpp:
complete
.text start:0x02121be4 end:0x02121c8c

src/func_ov070_02121c8c.c:
complete
.text start:0x02121c8c end:0x02121cbc

src/func_ov070_02121cbc.c:
complete
.text start:0x02121cbc end:0x02121d50

src/func_ov070_02121d50.cpp:
complete
.text start:0x02121d50 end:0x02121e14

src/func_ov070_02121e14.cpp:
complete
.text start:0x02121e14 end:0x02121eb0

src/func_ov070_02121eb0.c:
complete
.text start:0x02121eb0 end:0x02121ef8

src/func_ov070_02121ef8.c:
complete
.text start:0x02121ef8 end:0x02121f18

src/func_ov070_02121f18.cpp:
complete
.text start:0x02121f18 end:0x02121fb0

src/func_ov070_02121fb0.c:
complete
.text start:0x02121fb0 end:0x02121fd0

src/func_ov070_02121fd0.cpp:
complete
.text start:0x02121fd0 end:0x0212200c

src/func_ov070_0212200c.cpp:
complete
.text start:0x0212200c end:0x02122044

src/func_ov070_02122044.c:
complete
.text start:0x02122044 end:0x02122060

src/_ZN8daKpFr_c16CleanupResourcesEv.cpp:
complete
.text start:0x02122060 end:0x02122068

src/_ZN8daKpFr_c16OnPendingDestroyEv.cpp:
complete
.text start:0x02122068 end:0x0212206c

src/_ZN8daKpFr_c6RenderEv.cpp:
complete
.text start:0x0212206c end:0x02122104

src/_ZN8daKpFr_c8BehaviorEv.cpp:
complete
.text start:0x02122104 end:0x02122124

src/_ZN8daKpFr_c13InitResourcesEv.cpp:
complete
.text start:0x02122124 end:0x021221fc

src/daKpFr_c_Spawn.c:
complete
.text start:0x021221fc end:0x02122244

src/__sinit_ov070_02122afc.c:
complete
.init start:0x02122afc end:0x02122d80
Expand All @@ -387,3 +303,7 @@ src/__sinit_ov070_02122f30.c:
src/__sinit_ov070_02123030.c:
complete
.init start:0x02123030 end:0x021230a4

src/actors/daKpFr_c.cpp:
complete
.text start:0x02121b48 end:0x02122244
6 changes: 6 additions & 0 deletions config/converted-backslide-exceptions.jsonl
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,11 @@
{"path": "src/_ZN6BobOmb13OnYoshiTryEatEv.cpp", "reason": "Both files traded a raw (unsigned char*)this cast at [263] for dEnemyBase_c's actual field at 0x107, which is still honestly named unk_107 because nobody has recovered what the byte means. The old spelling only scored because a raw index through a re-cast this pointer slips past the RAW_OFFSET criterion -- it was never more readable, only less legible to the gate. Reverting it to score would be exactly the regression the tier exists to prevent; naming the field properly is a dEnemyBase_c-wide rename touching 13 files and belongs in its own PR."}
{"path": "src/_ZN6Rabbit13OnYoshiTryEatEv.cpp", "reason": "Both files traded a raw (unsigned char*)this cast at [263] for dEnemyBase_c's actual field at 0x107, which is still honestly named unk_107 because nobody has recovered what the byte means. The old spelling only scored because a raw index through a re-cast this pointer slips past the RAW_OFFSET criterion -- it was never more readable, only less legible to the gate. Reverting it to score would be exactly the regression the tier exists to prevent; naming the field properly is a dEnemyBase_c-wide rename touching 13 files and belongs in its own PR."}
{"path": "src/__sinit_ov075_0211bb00.c", "reason": "dScEntry_c::graphCallback_c's constructor is now a real compiler-owned C++ symbol. The static initializer remains a generated C reconstruction and cannot spell a constructor call in C++ source form, so its relocation must use _ZN10dScEntry_c15graphCallback_cC1Ev until the initializer's globals are reconstructed as typed C++ definitions."}
{"path": "src/_ZN8daKpFr_c13OnYoshiTryEatEv.cpp", "reason": "Atomic promotion consolidated this banked one-function path into src/actors/daKpFr_c.cpp. Its compiler-owned symbol, exact bytes, and relocation identity remain verified in the promoted 21-function class TU; only the legacy path disappeared."}
{"path": "src/_ZN8daKpFr_c16CleanupResourcesEv.cpp", "reason": "Atomic promotion consolidated this banked one-function path into src/actors/daKpFr_c.cpp. Its compiler-owned symbol, exact bytes, and relocation identity remain verified in the promoted 21-function class TU; only the legacy path disappeared."}
{"path": "src/_ZN8daKpFr_c16OnPendingDestroyEv.cpp", "reason": "Atomic promotion consolidated this banked one-function path into src/actors/daKpFr_c.cpp. Its compiler-owned symbol, exact bytes, and relocation identity remain verified in the promoted 21-function class TU; only the legacy path disappeared."}
{"path": "src/_ZN8daKpFr_c8BehaviorEv.cpp", "reason": "Atomic promotion consolidated this banked one-function path into src/actors/daKpFr_c.cpp. Its compiler-owned symbol, exact bytes, and relocation identity remain verified in the promoted 21-function class TU; only the legacy path disappeared."}
{"path": "src/_ZN8daKpFr_cD0Ev.cpp", "reason": "Atomic promotion consolidated this banked one-function path into src/actors/daKpFr_c.cpp. Its compiler-owned symbol, exact bytes, and relocation identity remain verified in the promoted 21-function class TU; only the legacy path disappeared."}
{"path": "src/_ZN8daKpFr_cD1Ev.cpp", "reason": "Atomic promotion consolidated this banked one-function path into src/actors/daKpFr_c.cpp. Its compiler-owned symbol, exact bytes, and relocation identity remain verified in the promoted 21-function class TU; only the legacy path disappeared."}
{"path": "src/_ZN12daObjAbuku_cD0Ev.cpp", "reason": "TU promotion ov002/daObjAbuku_c (PR #1996) consolidated these two per-symbol files into src/actors/daObjAbuku_c.cpp. A reconstructed TU must spell vague-linkage symbols directly (_ZN7fBase_cnwEj, _ZN8dActor_cC2Ev, _ZN8dActor_cD2Ev) or its range will not link, so no_mangled_refs cannot pass for the absorbing file. Byte-match outranks readability; the code was not reverted and no byte changed."}
{"path": "src/_ZN12daObjAbuku_cD1Ev.cpp", "reason": "TU promotion ov002/daObjAbuku_c (PR #1996) consolidated these two per-symbol files into src/actors/daObjAbuku_c.cpp. A reconstructed TU must spell vague-linkage symbols directly (_ZN7fBase_cnwEj, _ZN8dActor_cC2Ev, _ZN8dActor_cD2Ev) or its range will not link, so no_mangled_refs cannot pass for the absorbing file. Byte-match outranks readability; the code was not reverted and no byte changed."}
8 changes: 1 addition & 7 deletions config/converted-baseline.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"no_codegen_trick",
"no_mangled_refs"
],
"count": 2565,
"count": 2559,
"converted": [
"src/ARMMathLoadState.c",
"src/ARMMathSaveState.c",
Expand Down Expand Up @@ -2103,12 +2103,6 @@
"src/_ZN8daEyBm_c16OnPendingDestroyEv.cpp",
"src/_ZN8daEyBm_cD0Ev.cpp",
"src/_ZN8daEyBm_cD1Ev.cpp",
"src/_ZN8daKpFr_c13OnYoshiTryEatEv.cpp",
"src/_ZN8daKpFr_c16CleanupResourcesEv.cpp",
"src/_ZN8daKpFr_c16OnPendingDestroyEv.cpp",
"src/_ZN8daKpFr_c8BehaviorEv.cpp",
"src/_ZN8daKpFr_cD0Ev.cpp",
"src/_ZN8daKpFr_cD1Ev.cpp",
"src/_ZN8daKrpa_c13OnYoshiTryEatEv.cpp",
"src/_ZN8daKrpa_c16CleanupResourcesEv.cpp",
"src/_ZN8daKrpa_c16OnPendingDestroyEv.cpp",
Expand Down
130 changes: 124 additions & 6 deletions config/tu_manifest.d/ov070/daKpFr_c.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"id": "ov070/daKpFr_c",
"module": "ov070",
"source": "src_tu/actors/daKpFr_c.cpp",
"source": "src/actors/daKpFr_c.cpp",
"promoted_source": "src/actors/daKpFr_c.cpp",
"status": "text-verified",
"status": "promoted",
"boundary_confidence": "high",
"boundary_evidence": [
"contiguous linker run: 0x2121b48..0x2122244, 21 function(s), from build/tu_map.json (tools/tu_map.py)",
Expand Down Expand Up @@ -168,10 +168,82 @@
],
"data": [],
"bss": [],
"compiler_only_output": [
{
"symbol": "_ZTI7fBase_c",
"disposition": "deadstrip-data",
"canonical_module": "arm9",
"canonical_address": "0x02086d70",
"reason": "The key-function TU emits the inherited fBase_c typeinfo as vague linkage; romdata_check proves this exact copy at its canonical arm9 home before text-only isolation discards it."
},
{
"symbol": "_ZTS7fBase_c",
"disposition": "deadstrip-data",
"canonical_module": "arm9",
"canonical_address": "0x02086e60",
"reason": "The key-function TU emits the inherited fBase_c type-name string as vague linkage; romdata_check proves its exact emitted bytes at the canonical arm9 home before isolation discards it."
},
{
"symbol": "_ZTS7dBase_c",
"disposition": "deadstrip-data",
"canonical_module": "arm9",
"canonical_address": "0x02086e54",
"reason": "The key-function TU emits the inherited dBase_c type-name string as vague linkage; romdata_check proves its exact emitted bytes at the canonical arm9 home before isolation discards it."
},
{
"symbol": "_ZTS8dActor_c",
"disposition": "deadstrip-data",
"canonical_module": "arm9",
"canonical_address": "0x0208e384",
"reason": "The key-function TU emits the inherited dActor_c type-name string as vague linkage; romdata_check proves its exact emitted bytes at the canonical arm9 home before isolation discards it."
},
{
"symbol": "_ZTS8daKpFr_c",
"disposition": "deadstrip-data",
"canonical_module": "ov070",
"canonical_address": "0x0212340c",
"reason": "The key-function TU emits daKpFr_c's ROM-named type string; its canonical bytes remain gap-owned in this text-only production model and are proved before isolation discards the copy."
},
{
"symbol": "_ZTI8daKpFr_c",
"disposition": "deadstrip-data",
"canonical_module": "ov070",
"canonical_address": "0x02123418",
"reason": "The key-function TU emits daKpFr_c's single-inheritance typeinfo; romdata_check proves its ABI kind, name relocation, and dActor_c base link at the canonical ov070 home."
},
{
"symbol": "_ZTI8dActor_c",
"disposition": "deadstrip-data",
"canonical_module": "arm9",
"canonical_address": "0x0208e390",
"reason": "The key-function TU emits the inherited dActor_c typeinfo as vague linkage; romdata_check proves this copy at its canonical arm9 home before isolation discards it."
},
{
"symbol": "_ZTI7dBase_c",
"disposition": "deadstrip-data",
"canonical_module": "arm9",
"canonical_address": "0x02086e78",
"reason": "The key-function TU emits the inherited dBase_c typeinfo as vague linkage; romdata_check proves this copy at its canonical arm9 home before isolation discards it."
},
{
"symbol": "daKpFr_c_SpawnInfo",
"disposition": "deadstrip-data",
"canonical_module": "ov070",
"canonical_address": "0x02123424",
"reason": "The source reconstructs the 0x1c actor descriptor with its sole relocation to daKpFr_c_Spawn and exact priorities, flags, and culling words; romdata_check proves all emitted bytes at its ov070 home."
},
{
"symbol": "_ZTV8daKpFr_c",
"disposition": "deadstrip-data",
"canonical_module": "ov070",
"canonical_address": "0x02123448",
"reason": "The key-function TU emits the full daKpFr_c vtable storage; romdata_check applies the 8-byte ABI address-point bias and proves all 31 retail slots before text-only isolation discards it."
}
],
"notes": [
"Generated by tools/tubuild.py create. See the file's own header comment for what was and was not reconciled, and notes/translation-unit-reconstruction-plan.md section 7.3 for what this generator does and does not attempt to resolve automatically.",
"tubuild create warning: hand-assembled: raw concatenation in reverse ROM order; tubuild create refused this TU (extern \"C\"-wrapped legacy bodies)",
"21/21 MATCH, objisolate clean, reloc-destinations clean. Hand-assembled. The legacy dBgCh_Actr shadow's extra methods (GetFloorResult, SurfaceInfo::CopyNormalTo) are spelled by their mangled names against the real header type; dBgCh_Gnd kept one definition with one extern-C signature set; one destructor emits D0+D1; Spawn stores &_ZTV8daKpFr_c[2].",
"tubuild create warning: this TU began as a hand-assembled reverse-ROM-order concatenation because tubuild create refused the extern-C-wrapped legacy bodies; it has since been reconstructed around the genuine daKpFr_c class and typed owned subobjects.",
"21/21 MATCH, objisolate clean, reloc-destinations clean. Natural `new daKpFr_c` was rejected because it relocates to unresolved `_Znwm`; the typed actor-table factory explicitly retains retail `_ZN7fBase_cnwEj` plus the proven base/member constructors and vptr store. The inline virtual destructor still makes mwcc emit retail D1 then D0 with no D2; automatic real dBgCh_Gnd objects eliminate the shadow lifecycle, while typed Matrix4x3/state storage and POD local vector buffers avoid any standalone Vector3 destructor. The source also emits the exact actor descriptor, RTTI, and complete vtable, all fail-closed through deadstrip-data rows in this text-only manifest.",
"Spawn symbol renamed with the class (FlameChomp[Fire]_Spawn -> daKpFr_c_Spawn); re-verified N/N MATCH after the rename."
],
"verification": {
Expand All @@ -185,9 +257,55 @@
"criteria": {
"every_declared_function_defined": "PASS",
"every_declared_function_bytes_match": "PASS",
"declared_function_set_equals_defined_function_set": "FAIL-BY-DESIGN -- 11 unlicensed section/symbol(s); see unlicensed_output_observed",
"functions_occur_in_expected_order": "PARTIAL -- ordinal pair(s) not in ROM order: [(0, 1)]",
"declared_function_set_equals_defined_function_set": "PASS",
"functions_occur_in_expected_order": "PASS",
"relocation_destinations_verified": "PASS"
},
"compilerOnlyOutput": {
"requested": [],
"deadstripped": [],
"droppedSections": [
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20
],
"data": [
"_ZTI7fBase_c",
"_ZTS7fBase_c",
"_ZTS7dBase_c",
"_ZTS8dActor_c",
"_ZTS8daKpFr_c",
"_ZTI8daKpFr_c",
"_ZTI8dActor_c",
"_ZTI7dBase_c",
"daKpFr_c_SpawnInfo",
"_ZTV8daKpFr_c"
],
"dataExternalized": [
"_ZTI7dBase_c",
"_ZTI7fBase_c",
"_ZTI8dActor_c",
"_ZTI8daKpFr_c",
"_ZTS7dBase_c",
"_ZTS7fBase_c",
"_ZTS8dActor_c",
"_ZTS8daKpFr_c",
"_ZTV8daKpFr_c",
"daKpFr_c_SpawnInfo"
]
}
}
}
43 changes: 30 additions & 13 deletions include/daKpFr_c.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,12 @@
* FlameChompFire): the typeinfo at ov070
* 0x02123418 names dActor_c as the sole base at offset 0, and the class's
* vtable at 0x02123448 (31 slots, same count as dActor_c's) is what pairs it
* to daKpFr_c_Spawn (renamed with the class; was FlameChompFire_Spawn), which stores that address after allocating 0x330
* bytes via fBase_c::operator new.
* to daKpFr_c_Spawn (renamed with the class; was FlameChompFire_Spawn).
* A natural `new daKpFr_c` was measured and rejected: its instruction bytes
* match after relocation masking, but it targets the unresolved global
* `_Znwm` rather than retail's fBase_c::operator new. The actor-table factory
* therefore keeps an explicit typed construction seam for the allocator,
* base/member constructors, and vptr store.
*
* The Spawn constructs the three owned subobjects below at 0xd4..0x130 in
* declaration order; D1 destroys them in exactly the reverse order before
Expand All @@ -28,26 +32,39 @@
* non-derived struct a virtual would have inserted a vptr and shifted every
* offset. Deriving from dActor_c is what makes the declarations below honest.
*/
struct daKpFr_c;
typedef void (daKpFr_c::*daKpFrStateMethod)();

struct daKpFrState {
daKpFrStateMethod init;
daKpFrStateMethod behavior;
};

typedef char daKpFrState_size_must_be_0x10[
sizeof(daKpFrState) == 0x10 ? 1 : -1];

struct daKpFr_c : dActor_c {
u8 pad_0d0[0x4];
ShadowModel mShadowModel; /* 0x0d4 */
dCcAc_c mdCcAc_c; /* 0x0fc */
dBgCh_Actr mWithMeshClsn; /* 0x130 */
/* InitResources assigns IDENTITY_MATRIX4X3 into this slot, so it begins a
Matrix4x3. Still spelt u8 + pad so the header need not pull in
math/Matrix.h. [_ZN8daKpFr_c13InitResourcesEv.cpp] */
u8 mMatrix; /* 0x2ec */
u8 pad_2ed[0x37];
/* InitResources assigns IDENTITY_MATRIX4X3 into this slot, Render passes
it to DropShadowRadHeight, and its translation lives at 0x310. */
Matrix4x3 mMatrix; /* 0x2ec */
daKpFrState *mStateMethods; /* 0x31c */
s32 mStateResult; /* 0x320 */
/* Two particle handles, effects 0x7f and 0x80, both fed back into
Particle::System::NewUnkCallback818 every Render, at mPosY + 0x4b000.
[_ZN8daKpFr_c6RenderEv.cpp] */
s32 mParticle1; /* 0x324 */
s32 mParticle2; /* 0x328 */
u8 pad_32c[0x4];
u32 mParticle1; /* 0x324 */
u32 mParticle2; /* 0x328 */
u8 mStateTimer; /* 0x32c */
u8 pad_32d[0x3];

/* Declared first on purpose, same reasoning as dActor_c.h: the key
function pins where mwcc anchors the vtable. */
virtual ~daKpFr_c();
/* Inline plus vtable instantiation is load-bearing: mwcc emits retail's
D1 then D0 pair, with no homeless D2. InitResources is the first
out-of-line virtual and anchors this TU's vtable/RTTI group. */
virtual ~daKpFr_c() {}

virtual s32 InitResources(); /* slot 0 */
virtual s32 CleanupResources(); /* slot 3 */
Expand Down
Loading
Loading