Skip to content

Reconstruct five unique actor profile pairs - #2135

Merged
andrewboudreau merged 12 commits into
mainfrom
cpp/profile-reconstruction-wave5
Sep 2, 2026
Merged

Reconstruct five unique actor profile pairs#2135
andrewboudreau merged 12 commits into
mainfrom
cpp/profile-reconstruction-wave5

Conversation

@andrewboudreau

Copy link
Copy Markdown
Collaborator

Stacked on #2133.

Reconstructs five additional unique profile/class-initializer pairs:

  • HATENA_SWITCH -> daObjHatenaSwitch_c_classInit and g_profile_HATENA_SWITCH
  • CT_MECHA05 -> daObjCtMecha05_c_classInit and g_profile_CT_MECHA05
  • PATH_LIFT -> daObjPathLift_c_classInit and g_profile_PATH_LIFT
  • C0_SWITCH -> daObjC0_Switch_c_classInit and g_profile_C0_SWITCH
  • C0_WATER -> daObjC0Water_c_classInit and g_profile_C0_WATER

The spellings are explicitly lineage-supported reconstructions. ROM evidence independently proves each literal profile ID, RTTI class, unique factory relationship, allocation size, and vtable identity. Historical aliases remain in the rename ledger.

Overlay-multiplexed candidates such as C1_TRAP and KM3_KAITENDAI were intentionally excluded because the same numeric registry pointer has different overlay-local meanings.

Verification:

  • five factories strict-relocation MATCH
  • Hatena, CtMecha05, PathLift, SwitchPillar, and BasementWater TU checks retain 44/44 matching members
  • g_profile_HATENA_SWITCH and g_profile_CT_MECHA05 each VERIFIED 28/28 bytes, blindWords 0
  • range gate: 11 VERIFIED, 3 aggregate warnings independently covered by 29/29 TU member checks, 0 blocking
  • four standalone filenames are pure R100 moves with attribution intact
  • 98/98 promoted TUs compile
  • full ROM: 11,088/11,088 functions, 4/4 source data, 106/106 modules exact
  • references, port, attribution, TU compatibility/conflict, Python-name, and dead-reference gates pass

@tangos-validator

tangos-validator Bot commented Sep 1, 2026

Copy link
Copy Markdown

✅ PR validation — Passed

Committed merge passes; 3 contributor credit reassignment(s) noted, not a blocker.

Full merge validation

Check Result
Committed test merge yes
Byte-verified functions 10,668 / 11,347 (94.02%, +0)
Byte-verified code bytes 1,990,608 / 2,211,124 (90.03%, +0)
Claimed, not byte-verified 549 functions, 115,072 bytes (+0)
Perfect source moves 0 R100
Enrolled ranges (delinks complete) 11,059 functions, 2,053,148 bytes (92.86%, +0) -- differs from byte-verified by +391
Contributor credit 0 added, 3 changed, 0 lost
Relocation check 32 checked; 32 VERIFIED
Port reference check 405 checked; 0 stale
Module fidelity 106/106 exact; 100.000000% compared bytes
Code linked from verified source 11,088 functions, 2,067,148 bytes (93.49%)
Module bytes from source 2,067,148 / 3,049,600 (67.8%); 811,492 (26.6%) are data no delink entry reaches
ROM data reproduced from source 585 symbol(s) exact, 170 partial, 5 differ

Contributor credit moved (3)

Function Source Before After
ov006:0x020e3820 src/dScMgCurling_c_classInit.c tangosdev andrewboudreau
ov006:0x020e6bf4 src/dScMgCurling2_c_classInit.c tangosdev andrewboudreau
ov085:0x0212d4e8 src/daObj_Mip_Key_c_classInit.c tangosdev andrewboudreau

Byte-verified means the range carries complete in a delinks.txt, so the ROM build compiled it and compared it to the cartridge. The 549 claimed functions have a src/ file named after the symbol with no NONMATCHING banner, and nothing compiles them -- dsd fills their addresses with the ROM's own bytes. Both together are the 11,217 this project calls matched.

Warnings: contributor attribution changed, not a blocker (3 changed, 0 lost -- src/dScMgCurling_c_classInit.c: tangosdev -> andrewboudreau; src/dScMgCurling2_c_classInit.c: tangosdev -> andrewboudreau; src/daObj_Mip_Key_c_classInit.c: tangosdev -> andrewboudreau).

Per-file link-check detail

All 6 changed file(s) compile to the ROM byte-for-byte with correct relocation targets.

File Symbol Result Slots checked
src/actors/daObjCtMecha05_c.cpp _ZN16daObjCtMecha05_cD1Ev + _ZN16daObjCtMecha05_cD0Ev + func_ov065_0211ac0c + _ZN16daObjCtMecha05_c16CleanupResourcesEv + _ZN16daObjCtMecha05_c6RenderEv + func_ov065_0211ad70 + _ZN16daObjCtMecha05_c8BehaviorEv + _ZN16daObjCtMecha05_c13InitResourcesEv ✅ verified 8
src/actors/daObjHatenaSwitch_c.cpp _ZN19daObjHatenaSwitch_cD1Ev + _ZN19daObjHatenaSwitch_cD0Ev + _ZN19daObjHatenaSwitch_c15OnGroundPoundedER8dActor_c + _ZN19daObjHatenaSwitch_c15UpdateClsnStateEv + _ZN19daObjHatenaSwitch_c19UpdateClsnTransformEv + _ZN19daObjHatenaSwitch_c20UpdateModelTransformEv + _ZN19daObjHatenaSwitch_c16CleanupResourcesEv + _ZN19daObjHatenaSwitch_c6RenderEv + _ZN19daObjHatenaSwitch_c8BehaviorEv + _ZN19daObjHatenaSwitch_c13InitResourcesEv + _ZN19daObjHatenaSwitch_c10HandleClsnER8dActor_c + _ZN19daObjHatenaSwitch_c17AfterClsnCallbackEP4dBgWP8dActor_cS3_ + daObjHatenaSwitch_c_classInit ✅ verified 13
src/actors/daObjPathLift_c.cpp _ZN15daObjPathLift_cD1Ev + _ZN15daObjPathLift_cD0Ev + func_ov100_02146e70 + func_ov100_0214700c + _ZN15daObjPathLift_c16CleanupResourcesEv + _ZN15daObjPathLift_c6RenderEv + _ZN15daObjPathLift_c8BehaviorEv + _ZN15daObjPathLift_c13InitResourcesEv ✅ verified 8
src/daObjC0Water_c_classInit.c daObjC0Water_c_classInit ✅ verified 1
src/daObjCtMecha05_c_classInit.cpp daObjCtMecha05_c_classInit ✅ verified 1
src/daObjPathLift_c_classInit.cpp daObjPathLift_c_classInit ✅ verified 1

The private worker commits a test merge, builds the stock ROM profile, compares every executable module, measures matched and source-built code, checks contributor lineage, and verifies affected relocations. The mod profile is opt-in and is not part of this merge gate.

Base automatically changed from cpp/profile-reconstruction-wave4 to main September 2, 2026 01:42
…ction-wave5

# Conflicts:
#	config/arm9/overlays/ov012/delinks.txt
#	config/arm9/overlays/ov012/symbols.txt
#	config/tu_manifest.d/ov012/SwitchPillar.json
#	include/daObjC0_Switch_c.h
#	notes/data/c-cpp-classification.tsv
#	notes/data/tu-merge-candidates.json
#	src/actors/d_a_obj_c0_switch.cpp
#	symbols/actor_renames.tsv
@andrewboudreau
andrewboudreau marked this pull request as ready for review September 2, 2026 02:06
@andrewboudreau
andrewboudreau merged commit 806110f into main Sep 2, 2026
9 checks passed
@andrewboudreau
andrewboudreau deleted the cpp/profile-reconstruction-wave5 branch September 2, 2026 02:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant