Skip to content

Match d_a_saku 100% - #1133

Open
LostGoron wants to merge 2 commits into
zeldaret:mainfrom
LostGoron:decompile-d_a_saku-fresh
Open

Match d_a_saku 100%#1133
LostGoron wants to merge 2 commits into
zeldaret:mainfrom
LostGoron:decompile-d_a_saku-fresh

Conversation

@LostGoron

Copy link
Copy Markdown

71/71 functions. 100% (GZLE01)

LostGoron and others added 2 commits July 15, 2026 17:43
Ports the completed 66/66-function decompilation, including the REL
hash fix, onto the current auto-generated actor skeleton. The five
never-referenced static const members (m_start_alpha, m_alpha_spd,
m_saku_height, m_at_cyl_src, m_max_particle_timer) must be defined
between the _daSaku_execute inline body and the daSaku_Execute
dispatcher so they land in .rodata at retail's exact layout; without
them g_profile_SAKU shifts and the inter-module relocation in
f_pc_profile_lst.rel breaks. Full GZLE01 build passes the REL hash
check (416 files OK) and objdiff reports 100% for all three units.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@decomp-dev

decomp-dev Bot commented Jul 20, 2026

Copy link
Copy Markdown

Report for GZLE01 (61a3a0a - 4c306c0)

📈 Matched code: 71.76% (+0.13%, +10028 bytes)
📈 Linked code: 58.24% (+0.13%, +10068 bytes)
📈 Matched data: 88.83% (+0.04%, +952 bytes)
📈 Linked data: 48.47% (+0.04%, +952 bytes)

✅ 68 new matches
Unit Item Bytes Before After
d_a_saku/d/actor/d_a_saku daSaku_c::_daSaku_create() +876 0.45% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::setEffBreak(int) +745 0.53% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::mode_break_none(int) +485 0.82% 100.00%
d_a_saku/d/actor/d_a_saku .data +468 19.39% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::setCol() +448 0.88% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::saku_draw_sub(int) +421 0.94% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::mode_break_throw_obj(int) +400 0.99% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::loadModel(int, int, int) +400 0.99% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_Delete(daSaku_c*) +368 1.08% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::setMtx() +324 1.22% 100.00%
d_a_saku/d/actor/d_a_saku changeXluMaterialAlpha(J3DMaterial*, unsigned char, bool) +324 1.22% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::checkCol() +316 1.25% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_Execute(daSaku_c*) +305 1.30% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::setEffFire(int) +292 1.35% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::CreateInit() +272 1.45% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::burn() +269 1.47% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::loadMoveBG(int, int, int) +265 1.49% 100.00%
d_a_saku/d/actor/d_a_saku .rodata +226 32.00% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::mode_break_fire(int) +216 1.82% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::broken(int) +209 1.89% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::setMoveBGMtx() +205 1.92% 100.00%
d_a_saku/d/actor/d_a_saku dCcD_Cyl::~dCcD_Cyl() +204 0.00% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::CreateHeap(int, int) +193 2.04% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::RecreateHeap(int, int) +173 2.27% 100.00%
d_a_saku/d/actor/d_a_saku matAlphaAnim(J3DModelData*, unsigned char, bool) +160 2.44% 100.00%
d_a_saku/d/actor/d_a_saku __sinit_d_a_saku_cpp +160 0.00% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::GetDzbId(int) +152 2.56% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::changeCollision(int) +144 2.70% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::CreateDummyHeap(int) +141 2.78% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::MoveBGResist(int, int) +133 2.94% 100.00%

...and 38 more new matches


Report for D44J01 (61a3a0a - 4c306c0)

📈 Matched code: 63.97% (+0.02%, +1464 bytes)
📈 Matched data: 85.26% (+0.02%, +372 bytes)

✅ 38 new matches
Unit Item Bytes Before After
d_a_saku/d/actor/d_a_saku .rodata +226 32.00% 100.00%
d_a_saku/d/actor/d_a_saku dCcD_Cyl::~dCcD_Cyl() +204 0.00% 100.00%
d_a_saku/d/actor/d_a_saku __sinit_d_a_saku_cpp +160 0.00% 100.00%
d_a_saku/d/actor/d_a_saku dCcD_Cyl::dCcD_Cyl() +132 0.00% 100.00%
d_a_saku/d/actor/d_a_saku cCcD_ShapeAttr::~cCcD_ShapeAttr() +92 0.00% 100.00%
d_a_saku/d/actor/d_a_saku dCcD_GStts::~dCcD_GStts() +92 0.00% 100.00%
d_a_saku/d/actor/d_a_saku dPa_levelEcallBack::~dPa_levelEcallBack() +92 0.00% 100.00%
d_a_saku/d/actor/d_a_saku cM3dGCyl::~cM3dGCyl() +72 0.00% 100.00%
d_a_saku/d/actor/d_a_saku cM3dGAab::~cM3dGAab() +72 0.00% 100.00%
d_a_saku/d/actor/d_a_saku JPACallBackBase<JPABaseEmitter*>::~JPACallBackBase() +72 0.00% 100.00%
d_a_saku/d/actor/d_a_saku cCcD_GStts::~cCcD_GStts() +72 0.00% 100.00%
d_a_saku/d/actor/d_a_saku sakuHIO_c::~sakuHIO_c() +72 0.00% 100.00%
d_a_saku/d/actor/d_a_saku cXyz::~cXyz() +60 0.00% 100.00%
d_a_saku/d/actor/d_a_saku cCcD_CylAttr::CrossAtTg(const cCcD_ShapeAttr&, cXyz*) const +56 0.00% 100.00%
d_a_saku/d/actor/d_a_saku cCcD_CylAttr::CrossCo(const cCcD_ShapeAttr&, float*) const +56 0.00% 100.00%
d_a_saku/d/actor/d_a_saku .bss +25 33.33% 100.00%
d_a_saku/d/actor/d_a_saku dCcD_Cyl::GetShapeAttr() +16 0.00% 100.00%
d_a_saku/d/actor/d_a_saku cCcD_ShapeAttr::GetCoCP() +12 0.00% 100.00%
d_a_saku/d/actor/d_a_saku cCcD_ShapeAttr::GetCoCP() const +12 0.00% 100.00%
d_a_saku/d/actor/d_a_saku cCcD_ShapeAttr::CrossAtTg(const cCcD_ShapeAttr&, cXyz*) const +8 0.00% 100.00%
d_a_saku/d/actor/d_a_saku cCcD_ShapeAttr::CrossCo(const cCcD_ShapeAttr&, float*) const +8 0.00% 100.00%
d_a_saku/d/actor/d_a_saku cCcD_CylAttr::GetCoCP() +8 0.00% 100.00%
d_a_saku/d/actor/d_a_saku cCcD_CylAttr::GetCoCP() const +8 0.00% 100.00%
d_a_saku/d/actor/d_a_saku cCcD_CylAttr::CrossAtTg(const cCcD_AabAttr&, cXyz*) const +8 0.00% 100.00%
d_a_saku/d/actor/d_a_saku cCcD_CylAttr::CrossAtTg(const cCcD_PntAttr&, cXyz*) const +8 0.00% 100.00%
d_a_saku/d/actor/d_a_saku cCcD_CylAttr::CrossCo(const cCcD_AabAttr&, float*) const +8 0.00% 100.00%
d_a_saku/d/actor/d_a_saku cCcD_CylAttr::CrossCo(const cCcD_TriAttr&, float*) const +8 0.00% 100.00%
d_a_saku/d/actor/d_a_saku cCcD_CylAttr::CrossCo(const cCcD_PntAttr&, float*) const +8 0.00% 100.00%
d_a_saku/d/actor/d_a_saku cCcD_Obj::GetShapeAttr() const +8 0.00% 100.00%
d_a_saku/d/actor/d_a_saku @280@__dt__8dCcD_CylFv +8 0.00% 100.00%

...and 8 more new matches

📈 28 improvements in unmatched items
Unit Item Bytes Before After
d_a_saku/d/actor/d_a_saku daSaku_c::_daSaku_create() +831 0.42% 88.53%
d_a_saku/d/actor/d_a_saku daSaku_c::setEffBreak(int) +723 0.54% 97.77%
d_a_saku/d/actor/d_a_saku daSaku_c::mode_break_none(int) +573 0.64% 92.61%
d_a_saku/d/actor/d_a_saku .data +472 18.44% 99.66%
d_a_saku/d/actor/d_a_saku daSaku_c::setCol() +446 0.88% 99.76%
d_a_saku/d/actor/d_a_saku daSaku_c::saku_draw_sub(int) +420 0.94% 99.86%
d_a_saku/d/actor/d_a_saku daSaku_c::loadModel(int, int, int) +399 0.99% 99.95%
d_a_saku/d/actor/d_a_saku daSaku_c::checkCol() +352 1.12% 99.73%
d_a_saku/d/actor/d_a_saku daSaku_c::setMtx() +323 1.22% 99.96%
d_a_saku/d/actor/d_a_saku changeXluMaterialAlpha(J3DMaterial*, unsigned char, bool) +323 1.22% 99.98%
d_a_saku/d/actor/d_a_saku daSaku_c::mode_break_throw_obj(int) +320 1.04% 84.16%
d_a_saku/d/actor/d_a_saku daSaku_Execute(daSaku_c*) +304 1.30% 99.92%
d_a_saku/d/actor/d_a_saku daSaku_c::setEffFire(int) +291 1.35% 99.97%
d_a_saku/d/actor/d_a_saku daSaku_Delete(daSaku_c*) +288 0.94% 68.85%
d_a_saku/d/actor/d_a_saku daSaku_c::loadMoveBG(int, int, int) +264 1.49% 99.94%
d_a_saku/d/actor/d_a_saku daSaku_c::burn() +251 1.47% 93.65%
d_a_saku/d/actor/d_a_saku daSaku_c::mode_break_fire(int) +215 1.82% 99.82%
d_a_saku/d/actor/d_a_saku daSaku_c::setMoveBGMtx() +204 1.92% 99.94%
d_a_saku/d/actor/d_a_saku daSaku_c::CreateHeap(int, int) +192 2.04% 99.98%
d_a_saku/d/actor/d_a_saku daSaku_c::broken(int) +192 1.89% 91.98%
d_a_saku/d/actor/d_a_saku daSaku_c::RecreateHeap(int, int) +172 2.27% 99.89%
d_a_saku/d/actor/d_a_saku matAlphaAnim(J3DModelData*, unsigned char, bool) +159 2.44% 99.95%
d_a_saku/d/actor/d_a_saku daSaku_c::GetDzbId(int) +148 2.63% 99.92%
d_a_saku/d/actor/d_a_saku daSaku_c::changeCollision(int) +143 2.70% 99.86%
d_a_saku/d/actor/d_a_saku daSaku_c::CreateDummyHeap(int) +140 2.78% 99.97%
d_a_saku/d/actor/d_a_saku daSaku_c::MoveBGResist(int, int) +132 2.94% 99.88%
d_a_saku/d/actor/d_a_saku daSaku_c::CreateInit() +124 1.96% 62.94%
d_a_saku/d/actor/d_a_saku daSaku_Draw(daSaku_c*) +72 5.26% 99.95%

Report for GZLP01 (61a3a0a - 4c306c0)

📈 Matched code: 69.92% (+0.13%, +10028 bytes)
📈 Matched data: 87.61% (+0.04%, +952 bytes)

✅ 68 new matches
Unit Item Bytes Before After
d_a_saku/d/actor/d_a_saku daSaku_c::_daSaku_create() +876 0.45% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::setEffBreak(int) +745 0.53% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::mode_break_none(int) +485 0.82% 100.00%
d_a_saku/d/actor/d_a_saku .data +468 19.39% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::setCol() +448 0.88% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::saku_draw_sub(int) +421 0.94% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::mode_break_throw_obj(int) +400 0.99% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::loadModel(int, int, int) +400 0.99% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_Delete(daSaku_c*) +368 1.08% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::setMtx() +324 1.22% 100.00%
d_a_saku/d/actor/d_a_saku changeXluMaterialAlpha(J3DMaterial*, unsigned char, bool) +324 1.22% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::checkCol() +316 1.25% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_Execute(daSaku_c*) +305 1.30% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::setEffFire(int) +292 1.35% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::CreateInit() +272 1.45% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::burn() +269 1.47% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::loadMoveBG(int, int, int) +265 1.49% 100.00%
d_a_saku/d/actor/d_a_saku .rodata +226 32.00% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::mode_break_fire(int) +216 1.82% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::broken(int) +209 1.89% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::setMoveBGMtx() +205 1.92% 100.00%
d_a_saku/d/actor/d_a_saku dCcD_Cyl::~dCcD_Cyl() +204 0.00% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::CreateHeap(int, int) +193 2.04% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::RecreateHeap(int, int) +173 2.27% 100.00%
d_a_saku/d/actor/d_a_saku matAlphaAnim(J3DModelData*, unsigned char, bool) +160 2.44% 100.00%
d_a_saku/d/actor/d_a_saku __sinit_d_a_saku_cpp +160 0.00% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::GetDzbId(int) +152 2.56% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::changeCollision(int) +144 2.70% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::CreateDummyHeap(int) +141 2.78% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::MoveBGResist(int, int) +133 2.94% 100.00%

...and 38 more new matches


Report for GZLJ01 (61a3a0a - 4c306c0)

📈 Matched code: 69.96% (+0.12%, +9540 bytes)
📈 Matched data: 88.27% (+0.04%, +952 bytes)

✅ 67 new matches
Unit Item Bytes Before After
d_a_saku/d/actor/d_a_saku daSaku_c::_daSaku_create() +876 0.45% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::setEffBreak(int) +745 0.53% 100.00%
d_a_saku/d/actor/d_a_saku .data +468 19.39% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::setCol() +448 0.88% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::saku_draw_sub(int) +421 0.94% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::mode_break_throw_obj(int) +400 0.99% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::loadModel(int, int, int) +400 0.99% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_Delete(daSaku_c*) +368 1.08% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::setMtx() +324 1.22% 100.00%
d_a_saku/d/actor/d_a_saku changeXluMaterialAlpha(J3DMaterial*, unsigned char, bool) +324 1.22% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::checkCol() +316 1.25% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_Execute(daSaku_c*) +305 1.30% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::setEffFire(int) +292 1.35% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::CreateInit() +272 1.45% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::burn() +269 1.47% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::loadMoveBG(int, int, int) +265 1.49% 100.00%
d_a_saku/d/actor/d_a_saku .rodata +226 32.00% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::mode_break_fire(int) +216 1.82% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::broken(int) +209 1.89% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::setMoveBGMtx() +205 1.92% 100.00%
d_a_saku/d/actor/d_a_saku dCcD_Cyl::~dCcD_Cyl() +204 0.00% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::CreateHeap(int, int) +193 2.04% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::RecreateHeap(int, int) +173 2.27% 100.00%
d_a_saku/d/actor/d_a_saku matAlphaAnim(J3DModelData*, unsigned char, bool) +160 2.44% 100.00%
d_a_saku/d/actor/d_a_saku __sinit_d_a_saku_cpp +160 0.00% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::GetDzbId(int) +152 2.56% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::changeCollision(int) +144 2.70% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::CreateDummyHeap(int) +141 2.78% 100.00%
d_a_saku/d/actor/d_a_saku daSaku_c::MoveBGResist(int, int) +133 2.94% 100.00%
d_a_saku/d/actor/d_a_saku dCcD_Cyl::dCcD_Cyl() +132 0.00% 100.00%

...and 37 more new matches

📈 1 improvement in an unmatched item
Unit Item Bytes Before After
d_a_saku/d/actor/d_a_saku daSaku_c::mode_break_none(int) +468 0.83% 98.28%

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