From ce24ddfc4e6f0f2865abb956208a19dd6b40acf3 Mon Sep 17 00:00:00 2001 From: Alessevan <44125445+Alessevan@users.noreply.github.com> Date: Fri, 14 Aug 2026 10:37:50 -0400 Subject: [PATCH] Improvements in SWBM (#133) * feat: improvements in SWBM * feat: improvements * feat: increase matching for jp version * feat: add vfuncs from fields' classes * feat: improve matching * feat: rename parameters to reflect staticness of the function * refactor: change mangled name * feat: remove unused variable from bss * style: explicite parenthesis * feat: better matching * feat: replace if/else by a switch statement --- config/eur/arm9/overlays/ov000/symbols.txt | 4 +- config/eur/arm9/overlays/ov031/delinks.txt | 5 +- config/eur/arm9/overlays/ov031/relocs.txt | 6 +- config/eur/arm9/overlays/ov031/symbols.txt | 52 ++-- config/eur/arm9/overlays/ov063/symbols.txt | 2 +- config/jp/arm9/overlays/ov000/symbols.txt | 4 +- config/jp/arm9/overlays/ov031/delinks.txt | 3 +- config/jp/arm9/overlays/ov031/relocs.txt | 6 +- config/jp/arm9/overlays/ov031/symbols.txt | 54 ++-- config/jp/arm9/overlays/ov063/symbols.txt | 2 +- include/Actor/ActorItemBoomerang.hpp | 2 +- include/Actor/ActorRollingStone.hpp | 2 +- include/Actor/ActorShotArrow.hpp | 2 +- include/Actor/ActorUnkCANS.hpp | 2 +- include/Actor/ActorUnkSWBM.hpp | 87 ++++-- include/Physics/Cylinder.hpp | 3 + include/Unknown/Common.hpp | 1 + include/Unknown/UnkStruct_027e0958.hpp | 2 +- include/Unknown/UnkStruct_027e0ce0.hpp | 2 +- include/Unknown/UnkStruct_027e0d34.hpp | 1 + libs/nitro/include/nitro/reg.h | 2 + src/031_Land/Actor/ActorItemBoomerang.cpp | 16 +- src/031_Land/Actor/ActorRollingStone.cpp | 2 +- src/031_Land/Actor/ActorShotArrow.cpp | 2 +- src/031_Land/Actor/ActorUnkSWBM.cpp | 323 +++++++++++++++++++-- src/063_Shrine/Actor/ActorUnkCANS.cpp | 4 +- 26 files changed, 462 insertions(+), 129 deletions(-) diff --git a/config/eur/arm9/overlays/ov000/symbols.txt b/config/eur/arm9/overlays/ov000/symbols.txt index 0610b2b0..dd1fedea 100644 --- a/config/eur/arm9/overlays/ov000/symbols.txt +++ b/config/eur/arm9/overlays/ov000/symbols.txt @@ -179,7 +179,7 @@ func_ov000_02058f5c kind:function(arm,size=0x18) addr:0x02058f5c func_ov000_02058f74 kind:function(arm,size=0x10) addr:0x02058f74 func_ov000_02058f84 kind:function(arm,size=0x18) addr:0x02058f84 _ZN18UnkStruct_027e09586CreateEv kind:function(arm,size=0x28) addr:0x02058f9c -_ZN18UnkStruct_027e095819func_ov000_02058fc4EP7VecFx32S1_ kind:function(arm,size=0x34) addr:0x02058fc4 +_ZN18UnkStruct_027e095819func_ov000_02058fc4EP27UnkStruct_PlayerGet_74_baseP7VecFx32 kind:function(arm,size=0x34) addr:0x02058fc4 func_ov000_02058ff8 kind:function(arm,size=0xdc) addr:0x02058ff8 func_ov000_020590d4 kind:function(arm,size=0x10) addr:0x020590d4 _ZN27UnkStruct_PlayerGet_74_baseC2Ev kind:function(arm,size=0x24) addr:0x020590e4 @@ -1414,7 +1414,7 @@ _ZN24UnkStruct_ov000_020b28388vfunc_00Ev kind:function(arm,size=0x4) addr:0x0207 _ZN24UnkStruct_ov000_020b2838D0Ev kind:function(arm,size=0x14) addr:0x0207bfe8 _ZN29UnkStruct_ov031_Items_00_BaseD2Ev kind:function(arm,size=0x4) addr:0x0207bffc _ZN26UnkStruct_027e0ce0_38_Base8vfunc_08EPK24UnkStruct_ov031_020f3310 kind:function(arm,size=0x8) addr:0x0207c000 -_ZN26UnkStruct_027e0ce0_38_Base8vfunc_0CEPK24UnkStruct_ov031_020e54d4ii kind:function(arm,size=0x8) addr:0x0207c008 +_ZN26UnkStruct_027e0ce0_38_Base8vfunc_0CEPK24UnkStruct_ov031_020e54d4Pii kind:function(arm,size=0x8) addr:0x0207c008 _ZN26UnkStruct_027e0ce0_38_Base8vfunc_10Ev kind:function(arm,size=0x8) addr:0x0207c010 _ZN17MapObject_10_BaseC2Ev kind:function(arm,size=0x30) addr:0x0207c018 func_ov000_0207c048 kind:function(arm,size=0x30) addr:0x0207c048 diff --git a/config/eur/arm9/overlays/ov031/delinks.txt b/config/eur/arm9/overlays/ov031/delinks.txt index 8150bc3f..2cdf19ba 100644 --- a/config/eur/arm9/overlays/ov031/delinks.txt +++ b/config/eur/arm9/overlays/ov031/delinks.txt @@ -45,10 +45,11 @@ src/031_Land/Actor/ActorItemTornado.cpp: .bss start:0x02116534 end:0x02116580 src/031_Land/Actor/ActorUnkSWBM.cpp: - .text start:0x020e6b34 end:0x020e7378 + .text start:0x020e68d8 end:0x020e7378 .init start:0x021111ac end:0x02111220 .ctor start:0x021127b0 end:0x021127b4 - .bss start:0x02116580 end:0x021165d0 + .data start:0x02113108 end:0x021131dc + .bss start:0x02116580 end:0x021165cc src/031_Land/Actor/ActorUnkROCK.cpp: .text start:0x020e8824 end:0x020e8cb8 diff --git a/config/eur/arm9/overlays/ov031/relocs.txt b/config/eur/arm9/overlays/ov031/relocs.txt index d9363e15..bd78dc38 100644 --- a/config/eur/arm9/overlays/ov031/relocs.txt +++ b/config/eur/arm9/overlays/ov031/relocs.txt @@ -1579,9 +1579,9 @@ from:0x020e6bb0 kind:arm_call to:0x02098388 module:overlay(0) from:0x020e6c00 kind:arm_call to:0x020590e4 module:overlay(0) from:0x020e6c30 kind:arm_call to:0x02028c4c module:main from:0x020e6c4c kind:load to:0x02113180 add:0x8 module:overlay(31) -from:0x020e6c50 kind:load to:0x02113148 module:overlay(31) -from:0x020e6c54 kind:load to:0x0211312c module:overlay(31) -from:0x020e6c58 kind:load to:0x02113110 module:overlay(31) +from:0x020e6c50 kind:load to:0x02113140 module:overlay(31) add:0x8 +from:0x020e6c54 kind:load to:0x02113124 module:overlay(31) add:0x8 +from:0x020e6c58 kind:load to:0x02113108 module:overlay(31) add:0x8 from:0x020e6c68 kind:arm_call to:0x0207bffc module:overlay(0) from:0x020e6c7c kind:arm_call to:0x0207b6c0 module:overlay(0) from:0x020e6d38 kind:load to:0x0203e964 module:main diff --git a/config/eur/arm9/overlays/ov031/symbols.txt b/config/eur/arm9/overlays/ov031/symbols.txt index b4605b21..0e40440d 100644 --- a/config/eur/arm9/overlays/ov031/symbols.txt +++ b/config/eur/arm9/overlays/ov031/symbols.txt @@ -50,7 +50,7 @@ func_ov031_020d96e0 kind:function(thumb,size=0x4) addr:0x020d96e0 func_ov031_020d96e4 kind:function(arm,size=0x10) addr:0x020d96e4 func_ov031_020d96f4 kind:function(arm,size=0x10) addr:0x020d96f4 func_ov031_020d9704 kind:function(arm,size=0x10) addr:0x020d9704 -func_ov031_020d9714 kind:function(arm,size=0x1c) addr:0x020d9714 +_ZN18UnkStruct_027e0d3419func_ov031_020d9714Ev kind:function(arm,size=0x1c) addr:0x020d9714 func_ov031_020d9730 kind:function(arm,size=0x18) addr:0x020d9730 func_ov031_020d9748 kind:function(arm,size=0x10) addr:0x020d9748 _ZN18UnkStruct_027e0d3419func_ov031_020d9758Ev kind:function(arm,size=0x18) addr:0x020d9758 @@ -444,7 +444,7 @@ _ZN22ActorItemBoomerang_11CC1EP18ActorItemBoomerang kind:function(arm,size=0x28) _ZN22ActorItemBoomerang_11CD1Ev kind:function(arm,size=0x14) addr:0x020e5474 _ZN22ActorItemBoomerang_11CD0Ev kind:function(arm,size=0x1c) addr:0x020e5488 _ZN22ActorItemBoomerang_11C8vfunc_08EPK24UnkStruct_ov031_020f3310 kind:function(arm,size=0x30) addr:0x020e54a4 -_ZN22ActorItemBoomerang_11C8vfunc_0CEPK24UnkStruct_ov031_020e54d4ii kind:function(arm,size=0x230) addr:0x020e54d4 +_ZN22ActorItemBoomerang_11C8vfunc_0CEPK24UnkStruct_ov031_020e54d4Pii kind:function(arm,size=0x230) addr:0x020e54d4 _ZN26ActorItemBoomerang_Unknown19func_ov031_020e5704Ev kind:function(arm,size=0xc) addr:0x020e5704 _ZN21ActorItemBoomerang_A0D0Ev kind:function(arm,size=0x1c) addr:0x020e5710 _ZN21ActorItemBoomerang_CCD0Ev kind:function(arm,size=0x1c) addr:0x020e572c @@ -481,29 +481,29 @@ _ZN19func_ov031_020e6774D0Ev kind:function(arm,size=0x68) addr:0x020e6774 func_ov031_020e67dc kind:function(arm,size=0x7c) addr:0x020e67dc func_ov031_020e6858 kind:function(arm,size=0x64) addr:0x020e6858 _ZN19func_ov031_020e68bcD0Ev kind:function(arm,size=0x1c) addr:0x020e68bc -func_ov031_020e68d8 kind:function(arm,size=0x28) addr:0x020e68d8 -func_ov031_020e6900 kind:function(arm,size=0x1c) addr:0x020e6900 -func_ov031_020e691c kind:function(arm,size=0x58) addr:0x020e691c -func_ov031_020e6974 kind:function(arm,size=0x58) addr:0x020e6974 -func_ov031_020e69cc kind:function(arm,size=0x168) addr:0x020e69cc +_ZN15ActorUnkSWBM_948vfunc_08EPK24UnkStruct_ov031_020f3310 kind:function(arm,size=0x28) addr:0x020e68d8 +_ZN15ActorUnkSWBM_948vfunc_0CEPK24UnkStruct_ov031_020e54d4Pii kind:function(arm,size=0x1c) addr:0x020e6900 +_ZN15ActorUnkSWBM_988vfunc_0CEP5ActorP7VecFx32 kind:function(arm,size=0x58) addr:0x020e691c +_ZN15ActorUnkSWBM_988vfunc_10EP5Actor kind:function(arm,size=0x58) addr:0x020e6974 +_ZN15ActorUnkSWBM_C88vfunc_00Eiii kind:function(arm,size=0x168) addr:0x020e69cc _ZN19ActorProfileUnkSWBM10GetProfileEv kind:function(arm,size=0xc) addr:0x020e6b34 _ZN19ActorProfileUnkSWBM6CreateEv kind:function(arm,size=0x24) addr:0x020e6b40 _ZN19ActorProfileUnkSWBMC1Ev kind:function(arm,size=0x44) addr:0x020e6b64 _ZN12ActorUnkSWBMC1Ev kind:function(arm,size=0xb8) addr:0x020e6ba8 -_ZN12ActorUnkSWBM19func_ov031_020e6c60Ev kind:function(arm,size=0x14) addr:0x020e6c60 -_ZN12ActorUnkSWBM19func_ov031_020e6c74Ev kind:function(arm,size=0x14) addr:0x020e6c74 -_ZN12ActorUnkSWBM19func_ov031_020e6c88Ev kind:function(arm,size=0xc0) addr:0x020e6c88 +_ZN15ActorUnkSWBM_94D1Ev kind:function(arm,size=0x14) addr:0x020e6c60 +_ZN15ActorUnkSWBM_98D1Ev kind:function(arm,size=0x14) addr:0x020e6c74 +_ZN12ActorUnkSWBM8vfunc_18Ei kind:function(arm,size=0xc0) addr:0x020e6c88 _ZN12ActorUnkSWBM19func_ov031_020e6d48Ev kind:function(arm,size=0x38) addr:0x020e6d48 -_ZN12ActorUnkSWBM19func_ov031_020e6d80Ev kind:function(arm,size=0x104) addr:0x020e6d80 -_ZN12ActorUnkSWBM19func_ov031_020e6e84Ev kind:function(arm,size=0x74) addr:0x020e6e84 -_ZN12ActorUnkSWBM19func_ov031_020e6ef8Ev kind:function(arm,size=0x268) addr:0x020e6ef8 -_ZN12ActorUnkSWBM19func_ov031_020e7160Ev kind:function(arm,size=0x2c) addr:0x020e7160 -_ZN12ActorUnkSWBM19func_ov031_020e718cEv kind:function(arm,size=0x108) addr:0x020e718c -_ZN12ActorUnkSWBM19func_ov031_020e7294Ev kind:function(arm,size=0x40) addr:0x020e7294 -_ZN12ActorUnkSWBMD0Ev kind:function(arm,size=0x1c) addr:0x020e72d4 -_ZN12ActorUnkSWBM19func_ov031_020e72f0Ev kind:function(arm,size=0x1c) addr:0x020e72f0 +_ZN12ActorUnkSWBM19func_ov031_020e6d80Ei kind:function(arm,size=0x104) addr:0x020e6d80 +_ZN12ActorUnkSWBM19func_ov031_020e6e84Es kind:function(arm,size=0x74) addr:0x020e6e84 +_ZN12ActorUnkSWBM8vfunc_20Ev kind:function(arm,size=0x268) addr:0x020e6ef8 +_ZN12ActorUnkSWBM8vfunc_24Ev kind:function(arm,size=0x2c) addr:0x020e7160 +_ZN12ActorUnkSWBM19func_ov031_020e718cEP7VecFx32P5Mat3pists kind:function(arm,size=0x108) addr:0x020e718c +_ZN12ActorUnkSWBM8vfunc_2CEi kind:function(arm,size=0x40) addr:0x020e7294 +_ZN15ActorUnkSWBM_94D0Ev kind:function(arm,size=0x1c) addr:0x020e72d4 +_ZN15ActorUnkSWBM_98D0Ev kind:function(arm,size=0x1c) addr:0x020e72f0 _ZN12ActorUnkSWBMD1Ev kind:function(arm,size=0x28) addr:0x020e730c -_ZN12ActorUnkSWBM19func_ov031_020e7334Ev kind:function(arm,size=0x30) addr:0x020e7334 +_ZN12ActorUnkSWBMD0Ev kind:function(arm,size=0x30) addr:0x020e7334 _ZN19ActorProfileUnkSWBMD1Ev kind:function(arm,size=0x14) addr:0x020e7364 func_ov031_020e7378 kind:function(arm,size=0x74) addr:0x020e7378 _ZN19func_ov031_020e73ecD1Ev kind:function(arm,size=0x20) addr:0x020e73ec @@ -924,7 +924,7 @@ _ZN18ActorShotArrow_178D1Ev kind:function(arm,size=0x1c) addr:0x020f32c4 _ZN18ActorShotArrow_178D0Ev kind:function(arm,size=0x24) addr:0x020f32e0 _ZN18ActorShotArrow_17819func_ov031_020f3304Ev kind:function(arm,size=0xc) addr:0x020f3304 _ZN18ActorShotArrow_1788vfunc_08EPK24UnkStruct_ov031_020f3310 kind:function(arm,size=0xac) addr:0x020f3310 -_ZN18ActorShotArrow_1788vfunc_0CEPK24UnkStruct_ov031_020e54d4ii kind:function(arm,size=0x350) addr:0x020f33bc +_ZN18ActorShotArrow_1788vfunc_0CEPK24UnkStruct_ov031_020e54d4Pii kind:function(arm,size=0x350) addr:0x020f33bc _ZN18ActorShotArrow_194C1EP14ActorShotArrow kind:function(arm,size=0x40) addr:0x020f370c _ZN18ActorShotArrow_19419func_ov031_020f374cEP5Actor kind:function(arm,size=0x164) addr:0x020f374c _ZN18ActorShotArrow_1948vfunc_10EP5Actor kind:function(arm,size=0x388) addr:0x020f38b0 @@ -1110,7 +1110,7 @@ _ZN19ActorProfileUnkFLEND1Ev kind:function(arm,size=0x14) addr:0x020f82cc _ZN24ActorProfileRollingStone10GetProfileEv kind:function(arm,size=0xc) addr:0x020f82e0 _ZN24ActorProfileRollingStone6CreateEv kind:function(arm,size=0x24) addr:0x020f82ec _ZN24ActorProfileRollingStoneC1Ev kind:function(arm,size=0x44) addr:0x020f8310 -_ZN21ActorRollingStone_1048vfunc_0CEPK24UnkStruct_ov031_020e54d4ii kind:function(arm,size=0x90) addr:0x020f8354 +_ZN21ActorRollingStone_1048vfunc_0CEPK24UnkStruct_ov031_020e54d4Pii kind:function(arm,size=0x90) addr:0x020f8354 _ZN21ActorRollingStone_1048vfunc_10Ev kind:function(arm,size=0xb8) addr:0x020f83e4 _ZN20ActorRollingStone_D48vfunc_10EP5Actor kind:function(arm,size=0x44) addr:0x020f849c _ZN17ActorRollingStoneC1Ev kind:function(arm,size=0x194) addr:0x020f84e0 @@ -2268,12 +2268,12 @@ _ZTV23ActorProfileItemTornado kind:data(any) addr:0x02113008 _ZTV16ActorItemTornado kind:data(any) addr:0x0211302c _ZTV19data_ov031_02113090 kind:data(any) addr:0x02113088 _ZTV19data_ov031_021130a4 kind:data(any) addr:0x021130a4 -data_ov031_02113110 kind:data(any) addr:0x02113110 +_ZTV15ActorUnkSWBM_C8 kind:data(any) addr:0x02113108 data_ov031_02113114 kind:data(any) addr:0x02113114 -data_ov031_0211312c kind:data(any) addr:0x0211312c -data_ov031_02113148 kind:data(any) addr:0x02113148 -_ZTV19data_ov031_0211315c kind:data(any) addr:0x0211315c -_ZTV19data_ov031_02113180 kind:data(any) addr:0x02113180 +_ZTV15ActorUnkSWBM_98 kind:data(any) addr:0x02113124 +_ZTV15ActorUnkSWBM_94 kind:data(any) addr:0x02113140 +_ZTV19ActorProfileUnkSWBM kind:data(any) addr:0x0211315c +_ZTV12ActorUnkSWBM kind:data(any) addr:0x02113180 data_ov031_021131dc kind:data(any) addr:0x021131dc data_ov031_021131e0 kind:data(any) addr:0x021131e0 data_ov031_021131e4 kind:data(any) addr:0x021131e4 diff --git a/config/eur/arm9/overlays/ov063/symbols.txt b/config/eur/arm9/overlays/ov063/symbols.txt index d004143a..9ff00512 100644 --- a/config/eur/arm9/overlays/ov063/symbols.txt +++ b/config/eur/arm9/overlays/ov063/symbols.txt @@ -54,7 +54,7 @@ _ZN24UnkStruct_ov063_02162ea8C1Ev kind:function(arm,size=0x30) addr:0x0215a7d4 _ZN24UnkStruct_ov063_02162ea8D1Ev kind:function(arm,size=0x14) addr:0x0215a804 _ZN24UnkStruct_ov063_02162ea8D0Ev kind:function(arm,size=0x1c) addr:0x0215a818 _ZN24UnkStruct_ov063_02162ea88vfunc_08EP24UnkStruct_ov031_020f3310 kind:function(arm,size=0x4c) addr:0x0215a834 -_ZN24UnkStruct_ov063_02162ea88vfunc_0CEPK24UnkStruct_ov031_020e54d4ii kind:function(arm,size=0xcc) addr:0x0215a880 +_ZN24UnkStruct_ov063_02162ea88vfunc_0CEPK24UnkStruct_ov031_020e54d4Pii kind:function(arm,size=0xcc) addr:0x0215a880 _ZN24UnkStruct_ov063_02162f148vfunc_3CEv kind:function(arm,size=0x24) addr:0x0215a94c _ZN24UnkStruct_ov063_02162f148vfunc_38Eii kind:function(arm,size=0x2c) addr:0x0215a970 _ZN24UnkStruct_ov063_02162ee8D0Ev kind:function(arm,size=0x1c) addr:0x0215a99c diff --git a/config/jp/arm9/overlays/ov000/symbols.txt b/config/jp/arm9/overlays/ov000/symbols.txt index b427f54b..75dc4fea 100644 --- a/config/jp/arm9/overlays/ov000/symbols.txt +++ b/config/jp/arm9/overlays/ov000/symbols.txt @@ -179,7 +179,7 @@ func_ov000_0205a4dc kind:function(arm,size=0x18) addr:0x0205a4dc func_ov000_0205a4f4 kind:function(arm,size=0x10) addr:0x0205a4f4 func_ov000_0205a504 kind:function(arm,size=0x18) addr:0x0205a504 _ZN18UnkStruct_027e09586CreateEv kind:function(arm,size=0x28) addr:0x0205a51c -func_ov000_0205a544 kind:function(arm,size=0x34) addr:0x0205a544 +_ZN18UnkStruct_027e095819func_ov000_02058fc4EP27UnkStruct_PlayerGet_74_baseP7VecFx32 kind:function(arm,size=0x34) addr:0x0205a544 func_ov000_0205a578 kind:function(arm,size=0xdc) addr:0x0205a578 func_ov000_0205a654 kind:function(arm,size=0x10) addr:0x0205a654 _ZN27UnkStruct_PlayerGet_74_baseC2Ev kind:function(arm,size=0x24) addr:0x0205a664 @@ -1412,7 +1412,7 @@ func_ov000_0207d69c kind:function(arm,size=0x4) addr:0x0207d69c _ZN19func_ov000_0207d6a0D0Ev kind:function(arm,size=0x14) addr:0x0207d6a0 _ZN29UnkStruct_ov031_Items_00_BaseD2Ev kind:function(arm,size=0x4) addr:0x0207d6b4 _ZN26UnkStruct_027e0ce0_38_Base8vfunc_08EPK24UnkStruct_ov031_020f3310 kind:function(arm,size=0x8) addr:0x0207d6b8 -_ZN26UnkStruct_027e0ce0_38_Base8vfunc_0CEPK24UnkStruct_ov031_020e54d4ii kind:function(arm,size=0x8) addr:0x0207d6c0 +_ZN26UnkStruct_027e0ce0_38_Base8vfunc_0CEPK24UnkStruct_ov031_020e54d4Pii kind:function(arm,size=0x8) addr:0x0207d6c0 _ZN26UnkStruct_027e0ce0_38_Base8vfunc_10Ev kind:function(arm,size=0x8) addr:0x0207d6c8 _ZN17MapObject_10_BaseC2Ev kind:function(arm,size=0x30) addr:0x0207d6d0 func_ov000_0207d700 kind:function(arm,size=0x30) addr:0x0207d700 diff --git a/config/jp/arm9/overlays/ov031/delinks.txt b/config/jp/arm9/overlays/ov031/delinks.txt index 28d50066..42fa5513 100644 --- a/config/jp/arm9/overlays/ov031/delinks.txt +++ b/config/jp/arm9/overlays/ov031/delinks.txt @@ -44,9 +44,10 @@ src/031_Land/Actor/ActorItemTornado.cpp: .bss start:0x021182d4 end:0x02118320 src/031_Land/Actor/ActorUnkSWBM.cpp: - .text start:0x020e8520 end:0x020e8d64 + .text start:0x020e82c4 end:0x020e8d64 .init start:0x02112f1c end:0x02112f90 .ctor start:0x0211453c end:0x02114540 + .data start:0x02114ea8 end:0x02114f7c .bss start:0x02118320 end:0x0211836c src/031_Land/Actor/ActorUnkROCK.cpp: diff --git a/config/jp/arm9/overlays/ov031/relocs.txt b/config/jp/arm9/overlays/ov031/relocs.txt index 60bd891e..6417fd32 100644 --- a/config/jp/arm9/overlays/ov031/relocs.txt +++ b/config/jp/arm9/overlays/ov031/relocs.txt @@ -1580,9 +1580,9 @@ from:0x020e859c kind:arm_call to:0x02099b30 module:overlay(0) from:0x020e85ec kind:arm_call to:0x0205a664 module:overlay(0) from:0x020e861c kind:arm_call to:0x0202a17c module:main from:0x020e8638 kind:load to:0x02114f20 add:0x8 module:overlay(31) -from:0x020e863c kind:load to:0x02114ee8 module:overlay(31) -from:0x020e8640 kind:load to:0x02114ecc module:overlay(31) -from:0x020e8644 kind:load to:0x02114eb0 module:overlay(31) +from:0x020e863c kind:load to:0x02114ee0 module:overlay(31) add:0x8 +from:0x020e8640 kind:load to:0x02114ec4 module:overlay(31) add:0x8 +from:0x020e8644 kind:load to:0x02114ea8 module:overlay(31) add:0x8 from:0x020e8654 kind:arm_call to:0x0207d6b4 module:overlay(0) from:0x020e8668 kind:arm_call to:0x0207cd78 module:overlay(0) from:0x020e8724 kind:load to:0x0203feb0 module:main diff --git a/config/jp/arm9/overlays/ov031/symbols.txt b/config/jp/arm9/overlays/ov031/symbols.txt index 6ef7e5df..230dcbb5 100644 --- a/config/jp/arm9/overlays/ov031/symbols.txt +++ b/config/jp/arm9/overlays/ov031/symbols.txt @@ -50,7 +50,7 @@ func_ov031_020db080 kind:function(thumb,size=0x4) addr:0x020db080 func_ov031_020db084 kind:function(arm,size=0x10) addr:0x020db084 func_ov031_020db094 kind:function(arm,size=0x10) addr:0x020db094 func_ov031_020db0a4 kind:function(arm,size=0x10) addr:0x020db0a4 -func_ov031_020db0b4 kind:function(arm,size=0x1c) addr:0x020db0b4 +_ZN18UnkStruct_027e0d3419func_ov031_020d9714Ev kind:function(arm,size=0x1c) addr:0x020db0b4 func_ov031_020db0d0 kind:function(arm,size=0x18) addr:0x020db0d0 func_ov031_020db0e8 kind:function(arm,size=0x10) addr:0x020db0e8 _ZN18UnkStruct_027e0d3419func_ov031_020d9758Ev kind:function(arm,size=0x18) addr:0x020db0f8 @@ -444,7 +444,7 @@ _ZN22ActorItemBoomerang_11CC1EP18ActorItemBoomerang kind:function(arm,size=0x28) _ZN22ActorItemBoomerang_11CD1Ev kind:function(arm,size=0x14) addr:0x020e6e60 _ZN22ActorItemBoomerang_11CD0Ev kind:function(arm,size=0x1c) addr:0x020e6e74 _ZN22ActorItemBoomerang_11C8vfunc_08EPK24UnkStruct_ov031_020f3310 kind:function(arm,size=0x30) addr:0x020e6e90 -_ZN22ActorItemBoomerang_11C8vfunc_0CEPK24UnkStruct_ov031_020e54d4ii kind:function(arm,size=0x230) addr:0x020e6ec0 +_ZN22ActorItemBoomerang_11C8vfunc_0CEPK24UnkStruct_ov031_020e54d4Pii kind:function(arm,size=0x230) addr:0x020e6ec0 _ZN26ActorItemBoomerang_Unknown19func_ov031_020e5704Ev kind:function(arm,size=0xc) addr:0x020e70f0 _ZN21ActorItemBoomerang_A0D0Ev kind:function(arm,size=0x1c) addr:0x020e70fc _ZN21ActorItemBoomerang_CCD0Ev kind:function(arm,size=0x1c) addr:0x020e7118 @@ -481,29 +481,29 @@ _ZN19func_ov031_020e6774D0Ev kind:function(arm,size=0x68) addr:0x020e8160 func_ov031_020e81c8 kind:function(arm,size=0x7c) addr:0x020e81c8 func_ov031_020e8244 kind:function(arm,size=0x64) addr:0x020e8244 _ZN19func_ov031_020e68bcD0Ev kind:function(arm,size=0x1c) addr:0x020e82a8 -func_ov031_020e82c4 kind:function(arm,size=0x28) addr:0x020e82c4 -func_ov031_020e82ec kind:function(arm,size=0x1c) addr:0x020e82ec -func_ov031_020e8308 kind:function(arm,size=0x58) addr:0x020e8308 -func_ov031_020e8360 kind:function(arm,size=0x58) addr:0x020e8360 -func_ov031_020e83b8 kind:function(arm,size=0x168) addr:0x020e83b8 +_ZN15ActorUnkSWBM_948vfunc_08EPK24UnkStruct_ov031_020f3310 kind:function(arm,size=0x28) addr:0x020e82c4 +_ZN15ActorUnkSWBM_948vfunc_0CEPK24UnkStruct_ov031_020e54d4Pii kind:function(arm,size=0x1c) addr:0x020e82ec +_ZN15ActorUnkSWBM_988vfunc_0CEP5ActorP7VecFx32 kind:function(arm,size=0x58) addr:0x020e8308 +_ZN15ActorUnkSWBM_988vfunc_10EP5Actor kind:function(arm,size=0x58) addr:0x020e8360 +_ZN15ActorUnkSWBM_C88vfunc_00Eiii kind:function(arm,size=0x168) addr:0x020e83b8 _ZN19ActorProfileUnkSWBM10GetProfileEv kind:function(arm,size=0xc) addr:0x020e8520 _ZN19ActorProfileUnkSWBM6CreateEv kind:function(arm,size=0x24) addr:0x020e852c _ZN19ActorProfileUnkSWBMC1Ev kind:function(arm,size=0x44) addr:0x020e8550 _ZN12ActorUnkSWBMC1Ev kind:function(arm,size=0xb8) addr:0x020e8594 -_ZN12ActorUnkSWBM19func_ov031_020e6c60Ev kind:function(arm,size=0x14) addr:0x020e864c -_ZN12ActorUnkSWBM19func_ov031_020e6c74Ev kind:function(arm,size=0x14) addr:0x020e8660 -_ZN12ActorUnkSWBM19func_ov031_020e6c88Ev kind:function(arm,size=0xc0) addr:0x020e8674 +_ZN15ActorUnkSWBM_94D1Ev kind:function(arm,size=0x14) addr:0x020e864c +_ZN15ActorUnkSWBM_98D1Ev kind:function(arm,size=0x14) addr:0x020e8660 +_ZN12ActorUnkSWBM8vfunc_18Ei kind:function(arm,size=0xc0) addr:0x020e8674 _ZN12ActorUnkSWBM19func_ov031_020e6d48Ev kind:function(arm,size=0x38) addr:0x020e8734 -_ZN12ActorUnkSWBM19func_ov031_020e6d80Ev kind:function(arm,size=0x104) addr:0x020e876c -_ZN12ActorUnkSWBM19func_ov031_020e6e84Ev kind:function(arm,size=0x74) addr:0x020e8870 -_ZN12ActorUnkSWBM19func_ov031_020e6ef8Ev kind:function(arm,size=0x268) addr:0x020e88e4 -_ZN12ActorUnkSWBM19func_ov031_020e7160Ev kind:function(arm,size=0x2c) addr:0x020e8b4c -_ZN12ActorUnkSWBM19func_ov031_020e718cEv kind:function(arm,size=0x108) addr:0x020e8b78 -_ZN12ActorUnkSWBM19func_ov031_020e7294Ev kind:function(arm,size=0x40) addr:0x020e8c80 -_ZN12ActorUnkSWBMD0Ev kind:function(arm,size=0x1c) addr:0x020e8cc0 -_ZN12ActorUnkSWBM19func_ov031_020e72f0Ev kind:function(arm,size=0x1c) addr:0x020e8cdc +_ZN12ActorUnkSWBM19func_ov031_020e6d80Ei kind:function(arm,size=0x104) addr:0x020e876c +_ZN12ActorUnkSWBM19func_ov031_020e6e84Es kind:function(arm,size=0x74) addr:0x020e8870 +_ZN12ActorUnkSWBM8vfunc_20Ev kind:function(arm,size=0x268) addr:0x020e88e4 +_ZN12ActorUnkSWBM8vfunc_24Ev kind:function(arm,size=0x2c) addr:0x020e8b4c +_ZN12ActorUnkSWBM19func_ov031_020e718cEP7VecFx32P5Mat3pists kind:function(arm,size=0x108) addr:0x020e8b78 +_ZN12ActorUnkSWBM8vfunc_2CEi kind:function(arm,size=0x40) addr:0x020e8c80 +_ZN15ActorUnkSWBM_94D0Ev kind:function(arm,size=0x1c) addr:0x020e8cc0 +_ZN15ActorUnkSWBM_98D0Ev kind:function(arm,size=0x1c) addr:0x020e8cdc _ZN12ActorUnkSWBMD1Ev kind:function(arm,size=0x28) addr:0x020e8cf8 -_ZN12ActorUnkSWBM19func_ov031_020e7334Ev kind:function(arm,size=0x30) addr:0x020e8d20 +_ZN12ActorUnkSWBMD0Ev kind:function(arm,size=0x30) addr:0x020e8d20 _ZN19ActorProfileUnkSWBMD1Ev kind:function(arm,size=0x14) addr:0x020e8d50 func_ov031_020e7378 kind:function(arm,size=0x74) addr:0x020e8d64 _ZN19func_ov031_020e73ecD1Ev kind:function(arm,size=0x20) addr:0x020e8dd8 @@ -924,7 +924,7 @@ _ZN18ActorShotArrow_178D1Ev kind:function(arm,size=0x1c) addr:0x020f4cc0 _ZN18ActorShotArrow_178D0Ev kind:function(arm,size=0x24) addr:0x020f4cdc _ZN18ActorShotArrow_17819func_ov031_020f3304Ev kind:function(arm,size=0xc) addr:0x020f4d00 _ZN18ActorShotArrow_1788vfunc_08EPK24UnkStruct_ov031_020f3310 kind:function(arm,size=0xac) addr:0x020f4d0c -_ZN18ActorShotArrow_1788vfunc_0CEPK24UnkStruct_ov031_020e54d4ii kind:function(arm,size=0x3f8) addr:0x020f4db8 +_ZN18ActorShotArrow_1788vfunc_0CEPK24UnkStruct_ov031_020e54d4Pii kind:function(arm,size=0x3f8) addr:0x020f4db8 _ZN18ActorShotArrow_194C1EP14ActorShotArrow kind:function(arm,size=0x40) addr:0x020f51b0 _ZN18ActorShotArrow_19419func_ov031_020f374cEP5Actor kind:function(arm,size=0x164) addr:0x020f51f0 _ZN18ActorShotArrow_1948vfunc_10EP5Actor kind:function(arm,size=0x388) addr:0x020f5354 @@ -1109,7 +1109,7 @@ _ZN19ActorProfileUnkFLEND1Ev kind:function(arm,size=0x14) addr:0x020f9d10 _ZN24ActorProfileRollingStone10GetProfileEv kind:function(arm,size=0xc) addr:0x020f9d24 _ZN24ActorProfileRollingStone6CreateEv kind:function(arm,size=0x24) addr:0x020f9d30 _ZN24ActorProfileRollingStoneC1Ev kind:function(arm,size=0x44) addr:0x020f9d54 -_ZN21ActorRollingStone_1048vfunc_0CEPK24UnkStruct_ov031_020e54d4ii kind:function(arm,size=0x90) addr:0x020f9d98 +_ZN21ActorRollingStone_1048vfunc_0CEPK24UnkStruct_ov031_020e54d4Pii kind:function(arm,size=0x90) addr:0x020f9d98 _ZN21ActorRollingStone_1048vfunc_10Ev kind:function(arm,size=0xb8) addr:0x020f9e28 _ZN20ActorRollingStone_D48vfunc_10EP5Actor kind:function(arm,size=0x44) addr:0x020f9ee0 _ZN17ActorRollingStoneC1Ev kind:function(arm,size=0x194) addr:0x020f9f24 @@ -2265,12 +2265,12 @@ _ZTV19data_ov031_02114da8 kind:data(any) addr:0x02114da8 _ZTV19data_ov031_02114dcc kind:data(any) addr:0x02114dcc _ZTV19data_ov031_02114e30 kind:data(any) addr:0x02114e28 _ZTV19data_ov031_02114e44 kind:data(any) addr:0x02114e44 -data_ov031_02114eb0 kind:data(any) addr:0x02114eb0 -data_ov031_02114eb4 kind:data(any) addr:0x02114eb4 -data_ov031_02114ecc kind:data(any) addr:0x02114ecc -data_ov031_02114ee8 kind:data(any) addr:0x02114ee8 -_ZTV19data_ov031_02114efc kind:data(any) addr:0x02114efc -_ZTV19data_ov031_02114f20 kind:data(any) addr:0x02114f20 +_ZTV15ActorUnkSWBM_C8 kind:data(any) addr:0x02114ea8 +data_ov031_02113114 kind:data(any) addr:0x02114eb4 +_ZTV15ActorUnkSWBM_98 kind:data(any) addr:0x02114ec4 +_ZTV15ActorUnkSWBM_94 kind:data(any) addr:0x02114ee0 +_ZTV19ActorProfileUnkSWBM kind:data(any) addr:0x02114efc +_ZTV12ActorUnkSWBM kind:data(any) addr:0x02114f20 data_ov031_02114f7c kind:data(any) addr:0x02114f7c data_ov031_02114f80 kind:data(any) addr:0x02114f80 data_ov031_02114f84 kind:data(any) addr:0x02114f84 diff --git a/config/jp/arm9/overlays/ov063/symbols.txt b/config/jp/arm9/overlays/ov063/symbols.txt index d2762602..528e418c 100644 --- a/config/jp/arm9/overlays/ov063/symbols.txt +++ b/config/jp/arm9/overlays/ov063/symbols.txt @@ -54,7 +54,7 @@ _ZN24UnkStruct_ov063_02162ea8C1Ev kind:function(arm,size=0x30) addr:0x0215c570 _ZN24UnkStruct_ov063_02162ea8D1Ev kind:function(arm,size=0x14) addr:0x0215c5a0 _ZN24UnkStruct_ov063_02162ea8D0Ev kind:function(arm,size=0x1c) addr:0x0215c5b4 _ZN24UnkStruct_ov063_02162ea88vfunc_08EP24UnkStruct_ov031_020f3310 kind:function(arm,size=0x4c) addr:0x0215c5d0 -_ZN24UnkStruct_ov063_02162ea88vfunc_0CEPK24UnkStruct_ov031_020e54d4ii kind:function(arm,size=0xcc) addr:0x0215c61c +_ZN24UnkStruct_ov063_02162ea88vfunc_0CEPK24UnkStruct_ov031_020e54d4Pii kind:function(arm,size=0xcc) addr:0x0215c61c _ZN24UnkStruct_ov063_02162f148vfunc_3CEv kind:function(arm,size=0x24) addr:0x0215c6e8 _ZN24UnkStruct_ov063_02162f148vfunc_38Eii kind:function(arm,size=0x2c) addr:0x0215c70c _ZN24UnkStruct_ov063_02162ee8D0Ev kind:function(arm,size=0x1c) addr:0x0215c738 diff --git a/include/Actor/ActorItemBoomerang.hpp b/include/Actor/ActorItemBoomerang.hpp index 55eeb064..6ed14b30 100644 --- a/include/Actor/ActorItemBoomerang.hpp +++ b/include/Actor/ActorItemBoomerang.hpp @@ -36,7 +36,7 @@ public: /* 00 */ virtual ~ActorItemBoomerang_11C() override; /* 08 */ virtual bool vfunc_08(const UnkStruct_ov031_020f3310 *param1) override; - /* 0C */ virtual bool vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 param2, unk32 param3) override; + /* 0C */ virtual bool vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 *param2, unk32 param3) override; }; class ActorItemBoomerang_A0 : public UnkStruct_ov031_Items_01 { diff --git a/include/Actor/ActorRollingStone.hpp b/include/Actor/ActorRollingStone.hpp index ed4e2806..d676b41e 100644 --- a/include/Actor/ActorRollingStone.hpp +++ b/include/Actor/ActorRollingStone.hpp @@ -33,7 +33,7 @@ public: /* 04 */ // data_ov031_02114a5c - /* 0C */ virtual bool vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 param2, + /* 0C */ virtual bool vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 *param2, unk32 param3) override; // func_ov031_020f8354 /* 10 */ virtual void vfunc_10() override; // func_ov031_020f83e4 /* 14 */ diff --git a/include/Actor/ActorShotArrow.hpp b/include/Actor/ActorShotArrow.hpp index af3ecfcf..d952a778 100644 --- a/include/Actor/ActorShotArrow.hpp +++ b/include/Actor/ActorShotArrow.hpp @@ -50,7 +50,7 @@ public: // data_ov031_02114288 /* 00 */ virtual ~ActorShotArrow_178() override; /* 08 */ virtual bool vfunc_08(const UnkStruct_ov031_020f3310 *param1) override; - /* 0C */ virtual bool vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 param2, unk32 param3) override; + /* 0C */ virtual bool vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 *param2, unk32 param3) override; void func_ov031_020f3304(); }; diff --git a/include/Actor/ActorUnkCANS.hpp b/include/Actor/ActorUnkCANS.hpp index 71a35be2..01381885 100644 --- a/include/Actor/ActorUnkCANS.hpp +++ b/include/Actor/ActorUnkCANS.hpp @@ -42,7 +42,7 @@ public: /* 00 (base) */ virtual ~UnkStruct_ov063_02162ea8(); /* 08 */ virtual bool vfunc_08(UnkStruct_ov031_020f3310 *param1) override; - /* 0C */ virtual bool vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 param2, unk32 param3) override; + /* 0C */ virtual bool vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 *param2, unk32 param3) override; }; class UnkStruct_ov063_02162ee8 : public UnkStruct_ov000_020b3268 { diff --git a/include/Actor/ActorUnkSWBM.hpp b/include/Actor/ActorUnkSWBM.hpp index 0777e7dd..be71734d 100644 --- a/include/Actor/ActorUnkSWBM.hpp +++ b/include/Actor/ActorUnkSWBM.hpp @@ -1,43 +1,81 @@ -//! TODO: This file was generated automatically and might contain errors - #pragma once #include "Actor/Actor.hpp" #include "Actor/ActorProfile.hpp" +#include "Player/PlayerGet.hpp" #include "global.h" #include "types.h" -class ActorUnkSWBM_C4 : public Actor_C4 { -public: - ActorUnkSWBM_C4(Actor *param1); +class ActorUnkSWBM; +enum ActorUnkSWBMState_ { + ActorUnkSWBMState_0 = 0, + ActorUnkSWBMState_1 = 1, + ActorUnkSWBMState_2 = 2, + ActorUnkSWBMState_Max +}; - /* 00 */ virtual bool vfunc_00(ActorRef ref, unk32 param2) override; - /* 04 */ virtual bool vfunc_04() override; - /* 08 */ virtual void vfunc_08() override; - /* 0C */ virtual void vfunc_0C(unk32 param1) override; +class ActorUnkSWBM_94 : public UnkStruct_ov031_Items_00_Base { +public: + /* 00 (base) */ + /* 04 */ + + // data_ov031_02113148 + /* 08 */ virtual bool vfunc_08(const UnkStruct_ov031_020f3310 *param1) override; // func_ov031_020e68d8 + /* 0C */ virtual bool vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 *param2, + unk32 param3) override; // func_ov031_020e6900 +}; + +class ActorUnkSWBM_98 : public UnkStruct_ov031_Items_01 { +public: + /* 00 (base) */ + /* 2C */ ActorUnkSWBM *mUnk_2C; + /* 30 */ + + ActorUnkSWBM_98(ActorUnkSWBM *param1) : + mUnk_2C(param1) {} + + // data_ov031_0211312c + /* 0C */ virtual bool vfunc_0C(Actor *param1, VecFx32 *vector) override; // func_ov031_020e691c + /* 10 */ virtual void vfunc_10(Actor *actor) override; // func_ov031_020e6974 +}; + +class ActorUnkSWBM_C8 : public UnkStruct_PlayerGet_74_base { +public: + /* 00 (base) */ + /* 04 */ STRUCT_PAD(0x04, 0x14); + /* 14 */ ActorUnkSWBM *mUnk_14; + /* 18 */ + + ActorUnkSWBM_C8(ActorUnkSWBM *param1) : + mUnk_14(param1) {} + + // data_ov031_02113110 + /* 00 */ virtual void vfunc_00(unk32 param1, unk32 param2, unk32 param3) override; // func_ov031_020e69cc }; class ActorUnkSWBM : public Actor { public: - /* 00 (base) */ - /* 94 */ + /* 000 (base) */ + /* 094 */ ActorUnkSWBM_94 mUnk_094; + /* 098 */ ActorUnkSWBM_98 mUnk_098; + /* 0C8 */ ActorUnkSWBM_C8 mUnk_0C8; + /* 0E0 */ unk16 mUnk_0E0; + /* 0E4 */ VecFx32 mUnk_0E4[0x3]; + /* 108 */ unk16 mUnk_108; + /* 10A */ unk16 mUnk_10A; + /* 10C */ ActorUnkSWBM(); - /* 4C */ virtual ~ActorUnkSWBM() override; + /* 18 */ virtual bool vfunc_18(unk32 param1) override; + /* 20 */ virtual void vfunc_20() override; + /* 24 */ virtual void vfunc_24() override; + /* 2C */ virtual void vfunc_2C(unk32 param1) override; - void func_ov031_020e6c60(void); - void func_ov031_020e6c74(void); - void func_ov031_020e6c88(void); - void func_ov031_020e6d48(void); - void func_ov031_020e6d80(void); - void func_ov031_020e6e84(void); - void func_ov031_020e6ef8(void); - void func_ov031_020e7160(void); - void func_ov031_020e718c(void); - void func_ov031_020e7294(void); - void func_ov031_020e72f0(void); - void func_ov031_020e7334(void); + void func_ov031_020e6d48(); + void func_ov031_020e6d80(unk32 param1); + void func_ov031_020e6e84(ActorState state); + static void func_ov031_020e718c(VecFx32 *param0, Mat3p *param1, s32 param2, s16 param3, u16 param4, s16 param5); }; class ActorProfileUnkSWBM : public ActorProfile { @@ -45,7 +83,6 @@ public: /* 00 (base) */ ActorProfileUnkSWBM(); - ~ActorProfileUnkSWBM(); /* 0C */ virtual Actor *Create(); diff --git a/include/Physics/Cylinder.hpp b/include/Physics/Cylinder.hpp index 564053ee..13036255 100644 --- a/include/Physics/Cylinder.hpp +++ b/include/Physics/Cylinder.hpp @@ -13,6 +13,9 @@ struct Cylinder { Cylinder(fx32 size) { this->Init(size); } + Cylinder(fx32 x, fx32 y, fx32 z, fx32 size) { + this->Init(x, y, z, size); + } void Init(fx32 size) { pos.x = 0; diff --git a/include/Unknown/Common.hpp b/include/Unknown/Common.hpp index fe6d484a..e05626fc 100644 --- a/include/Unknown/Common.hpp +++ b/include/Unknown/Common.hpp @@ -1303,6 +1303,7 @@ public: class UnkStruct_PlayerGet_74_base { public: /* 00 (vtable) */ + /* 04 */ /* 00 */ virtual void vfunc_00(unk32 param1, unk32 param2, unk32 param3); diff --git a/include/Unknown/UnkStruct_027e0958.hpp b/include/Unknown/UnkStruct_027e0958.hpp index 0761e98d..930682e1 100644 --- a/include/Unknown/UnkStruct_027e0958.hpp +++ b/include/Unknown/UnkStruct_027e0958.hpp @@ -14,7 +14,7 @@ public: static UnkStruct_027e0958 *Create(); static void Destroy(); - void func_ov000_02058fc4(UnkStruct_PlayerGet_74 *param1, VecFx32 *param2); + void func_ov000_02058fc4(UnkStruct_PlayerGet_74_base *param1, VecFx32 *param2); }; extern UnkStruct_027e0958 *data_027e0958; diff --git a/include/Unknown/UnkStruct_027e0ce0.hpp b/include/Unknown/UnkStruct_027e0ce0.hpp index 6c3b815c..ef953f1b 100644 --- a/include/Unknown/UnkStruct_027e0ce0.hpp +++ b/include/Unknown/UnkStruct_027e0ce0.hpp @@ -302,7 +302,7 @@ public: // data_ov000_020b2838 /* 00 */ virtual ~UnkStruct_027e0ce0_38_Base(); /* 08 */ virtual bool vfunc_08(const UnkStruct_ov031_020f3310 *param1); - /* 0C */ virtual bool vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 param2, unk32 param3); + /* 0C */ virtual bool vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 *param2, unk32 param3); /* 10 */ virtual void vfunc_10(); /* 14 */ }; diff --git a/include/Unknown/UnkStruct_027e0d34.hpp b/include/Unknown/UnkStruct_027e0d34.hpp index 56e7d435..5106fb2e 100644 --- a/include/Unknown/UnkStruct_027e0d34.hpp +++ b/include/Unknown/UnkStruct_027e0d34.hpp @@ -21,6 +21,7 @@ public: static void Destroy(); // overlay 31 + bool func_ov031_020d9714(); bool func_ov031_020d9758(); bool func_ov031_020d97e4(); bool func_ov031_020d97f4(); diff --git a/libs/nitro/include/nitro/reg.h b/libs/nitro/include/nitro/reg.h index 6f3becaf..6741cf75 100644 --- a/libs/nitro/include/nitro/reg.h +++ b/libs/nitro/include/nitro/reg.h @@ -67,9 +67,11 @@ extern "C" { #define REG_GFX_FIFO_VERTEX_COLOR (*(vu32 *) 0x04000480) #define REG_GFX_FIFO_VERTEX_TEXCOORD (*(vu32 *) 0x04000488) #define REG_GFX_FIFO_VERTEX_16 (*(vu32 *) 0x0400048C) +#define REG_GFX_FIFO_VERTEX_XZ (*(vu32 *) 0x04000498) #define REG_GFX_FIFO_POLYGON_ATTR (*(vu32 *) 0x040004A4) #define REG_GFX_FIFO_TEXTURE_PARAM (*(vu32 *) 0x040004A8) #define REG_GFX_FIFO_TEXTURE_PALETTE (*(vu32 *) 0x040004AC) +#define REG_GFX_FIFO_DIFFUSE_AMBIENT_REFLECT (*(vu32 *) 0x040004C0) #define REG_GFX_FIFO_POLYGONS_BEGIN (*(vu32 *) 0x04000500) #define REG_GFX_FIFO_POLYGONS_END (*(vu32 *) 0x04000504) #define REG_GFX_FIFO_SWAP_BUFFERS (*(vu32 *) 0x04000540) diff --git a/src/031_Land/Actor/ActorItemBoomerang.cpp b/src/031_Land/Actor/ActorItemBoomerang.cpp index 03fa8cc3..ee65768f 100644 --- a/src/031_Land/Actor/ActorItemBoomerang.cpp +++ b/src/031_Land/Actor/ActorItemBoomerang.cpp @@ -365,7 +365,7 @@ bool ActorItemBoomerang_11C::vfunc_08(const UnkStruct_ov031_020f3310 *param1) { return func_ov000_020982d8(); } -bool ActorItemBoomerang_11C::vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 param2, unk32 param3) { +bool ActorItemBoomerang_11C::vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 *param2, unk32 param3) { u32 val = (param1->mUnk_08 >> 9) & 7; if (val == 0x2) { this->mUnk_08->func_ov031_020e5034(0x1); @@ -381,9 +381,9 @@ bool ActorItemBoomerang_11C::vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, un Vec2bCpp pos; if (this->mUnk_08->mState == ActorItemBoomerangState_1) { - if (param2 & 0x1000) { - pos.x = (u8) param2 >> 16; - pos.y = (u8) param2 >> 24; + if (*param2 & 0x1000) { + pos.x = (u8) *param2 >> 16; + pos.y = (u8) *param2 >> 24; MapObject *mapObject = gpMapObjManager->func_01fff498(pos); if (mapObject != NULL) { @@ -395,16 +395,16 @@ bool ActorItemBoomerang_11C::vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, un return false; } - if (param2 & 0x1000) { - pos.x = (u8) param2 >> 16; - pos.y = (u8) param2 >> 24; + if (*param2 & 0x1000) { + pos.x = (u8) *param2 >> 16; + pos.y = (u8) *param2 >> 24; MapObject *mapObject = gpMapObjManager->func_01fff498(pos); if (mapObject != NULL) { switch (mapObject->GetMapObjectId()) { case MapObjectId_SKDI: case MapObjectId_SWHT: - data_027e0d2c->func_ov031_020d95c8(param2); + data_027e0d2c->func_ov031_020d95c8(*param2); case MapObjectId_Pot: mapObject->vfunc_1C(this->mUnk_08->mRef, 0xC, &this->mUnk_08->mVel); return false; diff --git a/src/031_Land/Actor/ActorRollingStone.cpp b/src/031_Land/Actor/ActorRollingStone.cpp index 34285c70..194feb91 100644 --- a/src/031_Land/Actor/ActorRollingStone.cpp +++ b/src/031_Land/Actor/ActorRollingStone.cpp @@ -62,7 +62,7 @@ ActorProfileRollingStone::ActorProfileRollingStone() : } // non-matching -bool ActorRollingStone_104::vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 param2, unk32 param3) {} +bool ActorRollingStone_104::vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 *param2, unk32 param3) {} // non-matching void ActorRollingStone_104::vfunc_10() {} diff --git a/src/031_Land/Actor/ActorShotArrow.cpp b/src/031_Land/Actor/ActorShotArrow.cpp index 0625e9c6..fec1f686 100644 --- a/src/031_Land/Actor/ActorShotArrow.cpp +++ b/src/031_Land/Actor/ActorShotArrow.cpp @@ -987,7 +987,7 @@ bool ActorShotArrow_178::vfunc_08(const UnkStruct_ov031_020f3310 *param1) { } // non-matching -bool ActorShotArrow_178::vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 param2, unk32 param3) {} +bool ActorShotArrow_178::vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 *param2, unk32 param3) {} ActorShotArrow_194::ActorShotArrow_194(ActorShotArrow *param1) { this->mUnk_2C = param1; diff --git a/src/031_Land/Actor/ActorUnkSWBM.cpp b/src/031_Land/Actor/ActorUnkSWBM.cpp index ac1eb7c7..997935d1 100644 --- a/src/031_Land/Actor/ActorUnkSWBM.cpp +++ b/src/031_Land/Actor/ActorUnkSWBM.cpp @@ -1,7 +1,100 @@ -//! TODO: This file was generated automatically and might contain errors - #include "Actor/ActorUnkSWBM.hpp" #include "System/SysNew.hpp" +#include "Unknown/UnkStruct_027e0958.hpp" +#include "Unknown/UnkStruct_027e095c.hpp" +#include "Unknown/UnkStruct_027e09a8.hpp" +#include "Unknown/UnkStruct_027e09c0.hpp" +#include "Unknown/UnkStruct_027e0cec.hpp" +#include "Unknown/UnkStruct_027e0d34.hpp" +#include "Unknown/UnkStruct_ov000_020b4ec4.hpp" + +struct UnkStruct_ov031_020e5d18_00 { + Actor *mUnk_00; + u8 mUnk_04[0x14]; +}; + +extern "C" void func_01ffe6c4(Actor **, ActorRef, VecFx32 *, VecFx32 *, s32, VecFx32 *, UnkStruct_ov031_Items_00_Base *); +extern "C" bool func_ov000_02080998(VecFx32 *); + +extern "C" void /*GX_*/ func_02024a84(Mat3p *param1); +extern "C" void FlushGfxQueue(); + +static const Cylinder data_ov031_02113114(FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.35f)); + +// non-matching +bool ActorUnkSWBM_94::vfunc_08(const UnkStruct_ov031_020f3310 *param1) { + return (((u32) param1->mUnk_04->mUnk_24[param1->mUnk_00->mUnk_06] >> 0x16) & 0x1) != 0x1; +} + +bool ActorUnkSWBM_94::vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 *param2, unk32 param3) { + return (((u32) param2[0x2] >> 0x16) & 0x1) != 0x1; +} + +bool ActorUnkSWBM_98::vfunc_0C(Actor *param1, VecFx32 *vector) { + bool retValue = this->UnkStruct_ov031_Items_01::vfunc_0C(param1, vector); + if (!retValue) { + return retValue; + } + + u16 angle = this->mUnk_2C->mAngle; + + vector->x = SIN(angle); + vector->y = FLOAT_TO_FX32(0.0f); + vector->z = COS(angle); + return retValue; +} + +void ActorUnkSWBM_98::vfunc_10(Actor *actor) { + switch (GET_FLAG(actor->mFlags, ActorFlag_17)) { + case false: + ActorUnkSWBM *actorSWBM = this->mUnk_2C; + if (actorSWBM->mState != ActorUnkSWBMState_0) { + break; + } + actorSWBM->func_ov031_020e6e84(ActorUnkSWBMState_1); + break; + case true: + this->mUnk_2C->func_ov031_020e6d80(0x8C98); + break; + } +} + +// non-matching +void ActorUnkSWBM_C8::vfunc_00(unk32 param1, unk32 param2, unk32 param3) { + ActorUnkSWBM *actor = this->mUnk_14; + + FlushGfxQueue(); + REG_GFX_FIFO_DIFFUSE_AMBIENT_REFLECT = 0x1084FFFF; + VecFx32 *textureParam = data_027e095c->mUnk_000; + REG_GFX_FIFO_TEXTURE_PARAM = textureParam[0x8].z; + + unk32 var_r2 = 1; + if (((textureParam[0x8].z >> 0x1A) & 7) != 2) { + var_r2 = 0; + } + REG_GFX_FIFO_TEXTURE_PALETTE = ((u32) (textureParam[0x8].y << 0x10) >> 0xD) >> (4 - var_r2); + + Mat3p mat; + + u16 angle = actor->mAngle; + Mat3p_InitYRotation(&mat, SIN(angle), COS(angle)); + + s16 var_r8 = 0xB33; + s32 var_r9 = 0x1F - ((0xE - actor->mUnk_0E0) * 2); + u16 var_r7 = 0xB33; + ActorUnkSWBM::func_ov031_020e718c(&actor->mPos, &mat, var_r9, 0xB33, 0xB33, actor->mUnk_108); + + unk16 var_r10 = actor->mUnk_10A; + if ((s32) var_r10 >= 3) { + var_r10 = 3; + } + for (unk32 var_r6 = 0; var_r6 < (s32) var_r10; ++var_r6) { + var_r8 += 0x11F; + var_r7 += 0x23D; + var_r9 -= 5; + ActorUnkSWBM::func_ov031_020e718c(&actor->mUnk_0E4[var_r6], &mat, var_r9, var_r8, var_r7, actor->mUnk_108); + } +} DECL_PROFILE(ActorProfileUnkSWBM); @@ -10,22 +103,216 @@ Actor *ActorProfileUnkSWBM::Create() { } ActorProfileUnkSWBM::ActorProfileUnkSWBM() : - ActorProfile(ActorId_SWBM) {} + ActorProfile(ActorId_SWBM) { + VecFx32_Init(FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), FLOAT_TO_FX32(0.0f), &this->mUnk_04.pos); + this->mUnk_04.size = FLOAT_TO_FX32(0.35f); +} -ActorUnkSWBM::ActorUnkSWBM() {} +ActorUnkSWBM::ActorUnkSWBM() : + mUnk_098(this), + mUnk_0C8(this), + mUnk_0E0(0xE), + mUnk_108(0x0), + mUnk_10A(0x0) { + MI_CpuFill32(0x0, this->mUnk_0E4, ARRAY_LEN(this->mUnk_0E4) * sizeof *this->mUnk_0E4); + this->mState = ActorUnkSWBMState_0; + this->mUnk_52 = 0xFFFF; + this->mUnk_50 = 0x0000; +} -void ActorUnkSWBM::func_ov031_020e6c60(void) {} -void ActorUnkSWBM::func_ov031_020e6c74(void) {} -void ActorUnkSWBM::func_ov031_020e6c88(void) {} -void ActorUnkSWBM::func_ov031_020e6d48(void) {} -void ActorUnkSWBM::func_ov031_020e6d80(void) {} -void ActorUnkSWBM::func_ov031_020e6e84(void) {} -void ActorUnkSWBM::func_ov031_020e6ef8(void) {} -void ActorUnkSWBM::func_ov031_020e7160(void) {} -void ActorUnkSWBM::func_ov031_020e718c(void) {} -void ActorUnkSWBM::func_ov031_020e7294(void) {} -void ActorUnkSWBM::func_ov031_020e72f0(void) {} -void ActorUnkSWBM::func_ov031_020e7334(void) {} +bool ActorUnkSWBM::vfunc_18(unk32 param1) { + this->mUnk_44 = 0x1F; + this->mUnk_098.mUnk_04 = this->mRef; -ActorUnkSWBM::~ActorUnkSWBM() {} -ActorProfileUnkSWBM::~ActorProfileUnkSWBM() {} + this->mUnk_34 = (Cylinder *) &data_ov031_02113114; + VecFx32_Copy(&this->mPos, &this->mUnk_098.mUnk_0C.pos); + this->mUnk_098.mUnk_0C.size = FLOAT_TO_FX32(0.35f); + + this->mVel.x = MUL_FX32(SIN((u16) this->mAngle), 0xB33); + this->mVel.z = MUL_FX32(COS((u16) this->mAngle), 0xB33); + this->mVel.y = FLOAT_TO_FX32(0.0f); + return true; +} + +void ActorUnkSWBM::func_ov031_020e6d48() { + switch (this->mState) { + case ActorUnkSWBMState_1: + if (this->mUnk_0E0 != 6) { + return; + } + case ActorUnkSWBMState_0: + this->mState = ActorUnkSWBMState_0; + this->func_ov031_020e6d80(0x8C98); + break; + default: + break; + } +} + +void ActorUnkSWBM::func_ov031_020e6d80(unk32 param1) { + if (this->mState != ActorUnkSWBMState_0) { + return; + } + + if (param1 >= 0x0) { + data_027e09a8->func_ov000_02071b30((u16) param1, &this->mPos, 0x0); + } + + if (!data_027e0d34->func_ov031_020d9714()) { + VecFx16 vecSp08; + + data_027e0cec->func_ov000_0209feac(0x8E0, &this->mPos, 0x1, 0x0, 0x0); + + s16 angle = this->mAngle - DEG_TO_ANG(180); + + vecSp08.x = SIN((u16) angle); + vecSp08.y = FLOAT_TO_FX32(0.0f); + vecSp08.z = COS((u16) angle); + + data_027e0cec->func_ov000_0209ff24(0x8E1, &this->mPos, &vecSp08, 0x1); + } + + this->func_ov031_020e6e84(ActorUnkSWBMState_1); + this->mUnk_0E0 = 0x3; +} + +void ActorUnkSWBM::func_ov031_020e6e84(ActorState state) { + switch (state) { + case ActorUnkSWBMState_2: + UNSET_FLAG(this->mFlags, ActorFlag_Alive); + break; + case ActorUnkSWBMState_1: + if (this->mUnk_0E0 > 0x6) { + this->mUnk_0E0 = 0x6; + } + + this->mVel.x /= 3; + this->mVel.z /= 3; + break; + } + this->mState = state; + this->mUnk_52 = 0xFFFF; + this->mUnk_50 = 0x0000; +} + +// non-matching +void ActorUnkSWBM::vfunc_20() { + VecFx32_Copy(&this->mPos, &this->mPrevPos); + VecFx32_Add(&this->mPos, &this->mVel, &this->mPos); + + for (VecFx32 *vec = &this->mUnk_0E4[ARRAY_LEN(this->mUnk_0E4) - 1]; vec > &this->mUnk_0E4[0]; --vec) { + VecFx32_Copy(vec - 1, vec); + } + + VecFx32_Copy(&this->mPrevPos, &this->mUnk_0E4[0]); + ++this->mUnk_10A; + + if (this->mState != ActorUnkSWBMState_2) { + --this->mUnk_0E0; + if (this->mUnk_0E0 <= 0) { + this->func_ov031_020e6e84(ActorUnkSWBMState_2); + } else { + s16 newVal = this->mUnk_108 + 0x666; + if (newVal >= 0xB33) { + newVal = 0xB33; + } + this->mUnk_108 = newVal; + } + } + + this->IsTimerOut(); + + if (this->mState != ActorUnkSWBMState_2) { + if (!Actor::func_ov017_020beeec(0x0)) { + this->func_ov031_020e6e84(ActorUnkSWBMState_2); + return; + } + if (func_ov000_02080998(&this->mPos)) { + this->func_ov031_020e6e84(ActorUnkSWBMState_2); + return; + } + } + + switch (this->mState) { + case ActorUnkSWBMState_0: + + if (this->func_ov000_02098ab4(0x4, 0x19, 0x2, &this->mVel)) { + this->func_ov031_020e6d80(-0x1); + } else { + VecFx32_Copy(&this->mPos, &this->mUnk_098.mUnk_0C.pos); + data_027e09c0->func_ov000_0207e58c(this->mRef, 0x7, 0x4, &this->mUnk_098); + } + //! TODO : find this + UnkStruct_ov031_020e5d18_00 actorSpC; + actorSpC.mUnk_00 = NULL; + + func_01ffe6c4((Actor **) &actorSpC, this->mRef, &this->mPos, &this->mPrevPos, (s16) this->mUnk_44, &this->mPos, + &this->mUnk_094); + + unk32 val = ((Actor *) &actorSpC)->func_ov000_0207df88(this->mUnk_30, 0x7) | + ((Actor *) &actorSpC)->func_ov000_0207e294(this->mUnk_30); + this->mUnk_46 = val; + if (val == 0x0) { + return; + } + + this->func_ov031_020e6d80(-0x1); + break; + case ActorUnkSWBMState_1: + break; + } +} + +void ActorUnkSWBM::vfunc_24() { + if (this->mState == ActorUnkSWBMState_0) { + this->func_ov031_020e6e84(ActorUnkSWBMState_1); + return; + } + this->vfunc_20(); +} + +// non-matching +void ActorUnkSWBM::func_ov031_020e718c(VecFx32 *param0, Mat3p *param1, s32 param2, s16 param3, u16 param4, s16 param5) { + if (param2 <= 0) { + return; + } + REG_GFX_FIFO_POLYGON_ATTR = data_ov000_020b4ec4.func_01ffc768(0x4) << 0x18 | 0x80 | (param2 << 0x10); + REG_GFX_FIFO_MATRIX_PUSH = false; + REG_GFX_FIFO_MATRIX_TRANSLATE = param0->x; + REG_GFX_FIFO_MATRIX_TRANSLATE = param0->y; + REG_GFX_FIFO_MATRIX_TRANSLATE = param0->z; + + func_02024a84(param1); + + REG_GFX_FIFO_POLYGONS_BEGIN = true; + REG_GFX_FIFO_VERTEX_TEXCOORD = 0x02000200; + + u16 var1 = (u16) (s16) -param3; + u16 var2 = (u16) param3; + u16 var3 = (u16) (s16) -param5; + + REG_GFX_FIFO_VERTEX_16 = var1; + REG_GFX_FIFO_VERTEX_16 = var3; + + REG_GFX_FIFO_VERTEX_TEXCOORD = 0x200; + REG_GFX_FIFO_VERTEX_XZ = var1 | (param4 << 0x10); + + REG_GFX_FIFO_VERTEX_TEXCOORD = 0x0; + REG_GFX_FIFO_VERTEX_XZ = var2 | (param4 << 0x10); + + REG_GFX_FIFO_VERTEX_TEXCOORD = 0x02000000; + REG_GFX_FIFO_VERTEX_XZ = var2 | (var3 << 0x10); + + REG_GFX_FIFO_POLYGONS_END = false; + REG_GFX_FIFO_MATRIX_POP = true; +} + +void ActorUnkSWBM::vfunc_2C(unk32 param1) { + if (this->mState == ActorUnkSWBMState_2) { + return; + } + if (!this->func_01fff5d0(param1, 0x0)) { + return; + } + data_027e0958->func_ov000_02058fc4(&this->mUnk_0C8, &this->mPos); +} diff --git a/src/063_Shrine/Actor/ActorUnkCANS.cpp b/src/063_Shrine/Actor/ActorUnkCANS.cpp index 83886597..25bdc264 100644 --- a/src/063_Shrine/Actor/ActorUnkCANS.cpp +++ b/src/063_Shrine/Actor/ActorUnkCANS.cpp @@ -131,8 +131,8 @@ bool UnkStruct_ov063_02162ea8::vfunc_08(UnkStruct_ov031_020f3310 *param1) { return retVal; } -bool UnkStruct_ov063_02162ea8::vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 param2, unk32 param3) { - UnkStruct_02162ea8_vfunc_0C *param2Struct = (UnkStruct_02162ea8_vfunc_0C *) ¶m2; +bool UnkStruct_ov063_02162ea8::vfunc_0C(const UnkStruct_ov031_020e54d4 *param1, unk32 *param2, unk32 param3) { + UnkStruct_02162ea8_vfunc_0C *param2Struct = (UnkStruct_02162ea8_vfunc_0C *) param2; if ((*(u16 *) ¶m2Struct->mUnk_04 & 0x1000) != 0) { UnkStruct_02162ea8_vfunc_0C tmp; tmp.mUnk_04 = *(volatile unk32 *) ¶m2Struct->mUnk_04;