Skip to content

Start decompiling ActorUnkCASE - #124

Open
Mityno wants to merge 42 commits into
zeldaret:mainfrom
Mityno:ActorUnkCASE
Open

Start decompiling ActorUnkCASE#124
Mityno wants to merge 42 commits into
zeldaret:mainfrom
Mityno:ActorUnkCASE

Conversation

@Mityno

@Mityno Mityno commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

This looks quite similar to ActorUnkCANS but smaller, there are shared basis from what i've seen so far

@decomp-dev

decomp-dev Bot commented Aug 4, 2026

Copy link
Copy Markdown

Report for eur (b2a5532 - 25cfc62)

📈 Matched code: 7.86% (+0.06%, +2820 bytes)
📈 Matched data: 32.00% (+0.03%, +348 bytes)

✅ 39 new matches
Unit Item Bytes Before After
src/063_Shrine/Actor/ActorUnkCASE .data +348 0.00% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b090() +299 0.53% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::ActorUnkCASE() +266 9.14% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b99c(ActorUnkCASE*, UnkStruct_func_ov063_0215a678*) +172 0.00% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b724() +167 0.95% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::vfunc_2C(int) +164 0.00% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215afb8() +155 1.03% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b1bc() +135 1.18% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE_150::vfunc_00(ActorRef, int) +116 0.00% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b244() +107 1.48% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::vfunc_18(int) +104 0.00% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215acec(ActorRef*, ActorRef) +89 4.35% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215aefc(short) +88 0.00% 100.00%
src/063_Shrine/Actor/ActorUnkCASE .init +71 52.19% 100.00%
src/063_Shrine/Actor/ActorUnkCASE __sinit_ActorUnkCASE.cpp +71 52.19% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215af60() +67 2.35% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b814(ActorRef) +64 0.00% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE_174::ActorUnkCASE_174(Actor*) +60 0.00% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b054() +59 2.67% 100.00%
src/031_Land/Actor/ActorUnkNFSP ActorUnkNFSP_C0::vfunc_0C(int*) +56 0.00% 100.00%
src/063_Shrine/Actor/ActorUnkCASE UnkStruct_ov063_021631a0::UnkStruct_ov063_021631a0(G3d_Model_*) +52 0.00% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE_150::ActorUnkCASE_150(Actor*) +52 0.00% 100.00%
src/031_Land/Actor/ActorRupee ActorRupee_C4::vfunc_0C(int*) +40 0.00% 100.00%
src/031_Land/Actor/ActorHeart ActorHeart_C4::vfunc_0C(int*) +40 0.00% 100.00%
src/031_Land/Actor/ActorItemDrop ActorItemDrop_C4::vfunc_0C(int*) +40 0.00% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE_150::vfunc_0C(int*) +36 0.00% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE_174::vfunc_10(Actor*) +36 0.00% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::vfunc_24() +36 0.00% 100.00%
src/071_Tower/Actor/ActorTearLight ActorTearLight_194::vfunc_0C(int*) +36 0.00% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorProfileUnkCASE::ActorProfileUnkCASE() +33 54.78% 100.00%

...and 9 more new matches

🥀 5 broken matches
Unit Item Bytes Before After
src/031_Land/Actor/ActorUnkNFSP ActorUnkNFSP_C0::vfunc_0C(int) -56 100.00% 0.00%
src/031_Land/Actor/ActorRupee ActorRupee_C4::vfunc_0C(int) -40 100.00% 0.00%
src/031_Land/Actor/ActorHeart ActorHeart_C4::vfunc_0C(int) -40 100.00% 0.00%
src/031_Land/Actor/ActorItemDrop ActorItemDrop_C4::vfunc_0C(int) -40 100.00% 0.00%
src/071_Tower/Actor/ActorTearLight ActorTearLight_194::vfunc_0C(int) -36 100.00% 0.00%
📈 5 improvements in unmatched items
Unit Item Bytes Before After
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::vfunc_20() +808 0.00% 98.11%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b8e8(int*) +178 0.00% 99.11%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b854() +141 1.08% 96.08%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b6c8(VecFx32*, UnkAngleStruct) +83 4.35% 93.70%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::vfunc_10(Cylinder*) +54 0.00% 76.39%
📉 22 regressions in unmatched items
Unit Item Bytes Before After
src/031_Land/Actor/ActorRollingStone ActorRollingStone::func_ov031_020f8bc4() -12 99.87% 97.68%
src/031_Land/Actor/ActorRollingStone ActorRollingStone::func_ov031_020f9554() -12 97.26% 95.37%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b814() -4 6.25% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215abd8() -3 3.45% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215ac8c() -3 6.67% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215ab70() -1 3.08% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215aba4() -1 3.08% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215ac4c() -1 5.71% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215ac68() -1 4.44% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215acc8() -1 4.44% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215ae6c() -1 8.00% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215ae80() -1 8.00% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215ae94() -1 1.54% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215aefc() -1 1.82% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b2c8() -1 4.44% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b2ec() -1 0.19% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b624() -1 0.98% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b7cc() -1 2.22% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b8e8() -1 0.89% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b99c() -1 0.93% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215ba64() -1 5.71% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215bab0() -1 2.86% 0.00%

Report for jp (b2a5532 - 25cfc62)

📈 Matched code: 7.84% (+0.06%, +2820 bytes)
📈 Matched data: 31.86% (+0.05%, +708 bytes)

✅ 40 new matches
Unit Item Bytes Before After
src/031_Land/Actor/ActorRollingStone .data +360 0.00% 100.00%
src/063_Shrine/Actor/ActorUnkCASE .data +348 0.00% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b090() +299 0.53% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::ActorUnkCASE() +266 9.14% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b99c(ActorUnkCASE*, UnkStruct_func_ov063_0215a678*) +172 0.00% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b724() +167 0.95% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::vfunc_2C(int) +164 0.00% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215afb8() +155 1.03% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b1bc() +135 1.18% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE_150::vfunc_00(ActorRef, int) +116 0.00% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b244() +107 1.48% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::vfunc_18(int) +104 0.00% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215acec(ActorRef*, ActorRef) +89 4.35% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215aefc(short) +88 0.00% 100.00%
src/063_Shrine/Actor/ActorUnkCASE .init +71 52.19% 100.00%
src/063_Shrine/Actor/ActorUnkCASE __sinit_ActorUnkCASE.cpp +71 52.19% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215af60() +67 2.35% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b814(ActorRef) +64 0.00% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE_174::ActorUnkCASE_174(Actor*) +60 0.00% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b054() +59 2.67% 100.00%
src/031_Land/Actor/ActorUnkNFSP ActorUnkNFSP_C0::vfunc_0C(int*) +56 0.00% 100.00%
src/063_Shrine/Actor/ActorUnkCASE UnkStruct_ov063_021631a0::UnkStruct_ov063_021631a0(G3d_Model_*) +52 0.00% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE_150::ActorUnkCASE_150(Actor*) +52 0.00% 100.00%
src/031_Land/Actor/ActorRupee ActorRupee_C4::vfunc_0C(int*) +40 0.00% 100.00%
src/031_Land/Actor/ActorHeart ActorHeart_C4::vfunc_0C(int*) +40 0.00% 100.00%
src/031_Land/Actor/ActorItemDrop ActorItemDrop_C4::vfunc_0C(int*) +40 0.00% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE_150::vfunc_0C(int*) +36 0.00% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE_174::vfunc_10(Actor*) +36 0.00% 100.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::vfunc_24() +36 0.00% 100.00%
src/071_Tower/Actor/ActorTearLight ActorTearLight_194::vfunc_0C(int*) +36 0.00% 100.00%

...and 10 more new matches

🥀 5 broken matches
Unit Item Bytes Before After
src/031_Land/Actor/ActorUnkNFSP ActorUnkNFSP_C0::vfunc_0C(int) -56 100.00% 0.00%
src/031_Land/Actor/ActorRupee ActorRupee_C4::vfunc_0C(int) -40 100.00% 0.00%
src/031_Land/Actor/ActorHeart ActorHeart_C4::vfunc_0C(int) -40 100.00% 0.00%
src/031_Land/Actor/ActorItemDrop ActorItemDrop_C4::vfunc_0C(int) -40 100.00% 0.00%
src/071_Tower/Actor/ActorTearLight ActorTearLight_194::vfunc_0C(int) -36 100.00% 0.00%
📈 5 improvements in unmatched items
Unit Item Bytes Before After
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::vfunc_20() +808 0.00% 98.11%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b8e8(int*) +164 0.00% 95.79%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b854() +141 1.08% 96.08%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b6c8(VecFx32*, UnkAngleStruct) +83 4.35% 93.70%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::vfunc_10(Cylinder*) +54 0.00% 76.39%
📉 22 regressions in unmatched items
Unit Item Bytes Before After
src/031_Land/Actor/ActorRollingStone ActorRollingStone::func_ov031_020f8bc4() -12 99.87% 97.68%
src/031_Land/Actor/ActorRollingStone ActorRollingStone::func_ov031_020f9554() -12 97.26% 95.37%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b814() -4 6.25% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215abd8() -3 3.45% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215ac8c() -3 6.67% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215ab70() -1 3.08% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215aba4() -1 3.08% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215ac4c() -1 5.71% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215ac68() -1 4.44% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215acc8() -1 4.44% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215ae6c() -1 8.00% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215ae80() -1 8.00% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215ae94() -1 1.54% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215aefc() -1 1.82% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b2c8() -1 4.44% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b2ec() -1 0.19% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b624() -1 0.98% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b7cc() -1 2.22% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b8e8() -1 0.93% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215b99c() -1 0.93% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215ba64() -1 5.71% 0.00%
src/063_Shrine/Actor/ActorUnkCASE ActorUnkCASE::func_ov063_0215bab0() -1 2.86% 0.00%

@Mityno

Mityno commented Aug 11, 2026

Copy link
Copy Markdown
Contributor Author

This is almost 100% decompiled.
The .data ordering is wrong, I'm not sure why it is, nor why it matches and what to do.
Non-matched functions are mostly regalloc and ldm vs ldr problems.
I couldn't get the ActorProfile to the right size for its Create vfunc.

@Mityno
Mityno marked this pull request as ready for review August 11, 2026 18:43
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